@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"657.js","mappings":"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","sources":["webpack://helm/../../libraries/bio/node_modules/lru-cache/dist/esm/index.js","webpack://helm/../../libraries/bio/node_modules/@datagrok-libraries/hwe/dist/index.js"],"sourcesContent":["/**\n * @module LRUCache\n */\nconst perf = typeof performance === 'object' &&\n performance &&\n typeof performance.now === 'function'\n ? performance\n : Date;\nconst warned = new Set();\n/* c8 ignore start */\nconst PROCESS = (typeof process === 'object' && !!process ? process : {});\n/* c8 ignore start */\nconst emitWarning = (msg, type, code, fn) => {\n typeof PROCESS.emitWarning === 'function'\n ? PROCESS.emitWarning(msg, type, code, fn)\n : console.error(`[${code}] ${type}: ${msg}`);\n};\nlet AC = globalThis.AbortController;\nlet AS = globalThis.AbortSignal;\n/* c8 ignore start */\nif (typeof AC === 'undefined') {\n //@ts-ignore\n AS = class AbortSignal {\n onabort;\n _onabort = [];\n reason;\n aborted = false;\n addEventListener(_, fn) {\n this._onabort.push(fn);\n }\n };\n //@ts-ignore\n AC = class AbortController {\n constructor() {\n warnACPolyfill();\n }\n signal = new AS();\n abort(reason) {\n if (this.signal.aborted)\n return;\n //@ts-ignore\n this.signal.reason = reason;\n //@ts-ignore\n this.signal.aborted = true;\n //@ts-ignore\n for (const fn of this.signal._onabort) {\n fn(reason);\n }\n this.signal.onabort?.(reason);\n }\n };\n let printACPolyfillWarning = PROCESS.env?.LRU_CACHE_IGNORE_AC_WARNING !== '1';\n const warnACPolyfill = () => {\n if (!printACPolyfillWarning)\n return;\n printACPolyfillWarning = false;\n emitWarning('AbortController is not defined. If using lru-cache in ' +\n 'node 14, load an AbortController polyfill from the ' +\n '`node-abort-controller` package. A minimal polyfill is ' +\n 'provided for use by LRUCache.fetch(), but it should not be ' +\n 'relied upon in other contexts (eg, passing it to other APIs that ' +\n 'use AbortController/AbortSignal might have undesirable effects). ' +\n 'You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.', 'NO_ABORT_CONTROLLER', 'ENOTSUP', warnACPolyfill);\n };\n}\n/* c8 ignore stop */\nconst shouldWarn = (code) => !warned.has(code);\nconst TYPE = Symbol('type');\nconst isPosInt = (n) => n && n === Math.floor(n) && n > 0 && isFinite(n);\n/* c8 ignore start */\n// This is a little bit ridiculous, tbh.\n// The maximum array length is 2^32-1 or thereabouts on most JS impls.\n// And well before that point, you're caching the entire world, I mean,\n// that's ~32GB of just integers for the next/prev links, plus whatever\n// else to hold that many keys and values. Just filling the memory with\n// zeroes at init time is brutal when you get that big.\n// But why not be complete?\n// Maybe in the future, these limits will have expanded.\nconst getUintArray = (max) => !isPosInt(max)\n ? null\n : max <= Math.pow(2, 8)\n ? Uint8Array\n : max <= Math.pow(2, 16)\n ? Uint16Array\n : max <= Math.pow(2, 32)\n ? Uint32Array\n : max <= Number.MAX_SAFE_INTEGER\n ? ZeroArray\n : null;\n/* c8 ignore stop */\nclass ZeroArray extends Array {\n constructor(size) {\n super(size);\n this.fill(0);\n }\n}\nclass Stack {\n heap;\n length;\n // private constructor\n static #constructing = false;\n static create(max) {\n const HeapCls = getUintArray(max);\n if (!HeapCls)\n return [];\n Stack.#constructing = true;\n const s = new Stack(max, HeapCls);\n Stack.#constructing = false;\n return s;\n }\n constructor(max, HeapCls) {\n /* c8 ignore start */\n if (!Stack.#constructing) {\n throw new TypeError('instantiate Stack using Stack.create(n)');\n }\n /* c8 ignore stop */\n this.heap = new HeapCls(max);\n this.length = 0;\n }\n push(n) {\n this.heap[this.length++] = n;\n }\n pop() {\n return this.heap[--this.length];\n }\n}\n/**\n * Default export, the thing you're using this module to get.\n *\n * The `K` and `V` types define the key and value types, respectively. The\n * optional `FC` type defines the type of the `context` object passed to\n * `cache.fetch()` and `cache.memo()`.\n *\n * Keys and values **must not** be `null` or `undefined`.\n *\n * All properties from the options object (with the exception of `max`,\n * `maxSize`, `fetchMethod`, `memoMethod`, `dispose` and `disposeAfter`) are\n * added as normal public members. (The listed options are read-only getters.)\n *\n * Changing any of these will alter the defaults for subsequent method calls.\n */\nexport class LRUCache {\n // options that cannot be changed without disaster\n #max;\n #maxSize;\n #dispose;\n #disposeAfter;\n #fetchMethod;\n #memoMethod;\n /**\n * {@link LRUCache.OptionsBase.ttl}\n */\n ttl;\n /**\n * {@link LRUCache.OptionsBase.ttlResolution}\n */\n ttlResolution;\n /**\n * {@link LRUCache.OptionsBase.ttlAutopurge}\n */\n ttlAutopurge;\n /**\n * {@link LRUCache.OptionsBase.updateAgeOnGet}\n */\n updateAgeOnGet;\n /**\n * {@link LRUCache.OptionsBase.updateAgeOnHas}\n */\n updateAgeOnHas;\n /**\n * {@link LRUCache.OptionsBase.allowStale}\n */\n allowStale;\n /**\n * {@link LRUCache.OptionsBase.noDisposeOnSet}\n */\n noDisposeOnSet;\n /**\n * {@link LRUCache.OptionsBase.noUpdateTTL}\n */\n noUpdateTTL;\n /**\n * {@link LRUCache.OptionsBase.maxEntrySize}\n */\n maxEntrySize;\n /**\n * {@link LRUCache.OptionsBase.sizeCalculation}\n */\n sizeCalculation;\n /**\n * {@link LRUCache.OptionsBase.noDeleteOnFetchRejection}\n */\n noDeleteOnFetchRejection;\n /**\n * {@link LRUCache.OptionsBase.noDeleteOnStaleGet}\n */\n noDeleteOnStaleGet;\n /**\n * {@link LRUCache.OptionsBase.allowStaleOnFetchAbort}\n */\n allowStaleOnFetchAbort;\n /**\n * {@link LRUCache.OptionsBase.allowStaleOnFetchRejection}\n */\n allowStaleOnFetchRejection;\n /**\n * {@link LRUCache.OptionsBase.ignoreFetchAbort}\n */\n ignoreFetchAbort;\n // computed properties\n #size;\n #calculatedSize;\n #keyMap;\n #keyList;\n #valList;\n #next;\n #prev;\n #head;\n #tail;\n #free;\n #disposed;\n #sizes;\n #starts;\n #ttls;\n #hasDispose;\n #hasFetchMethod;\n #hasDisposeAfter;\n /**\n * Do not call this method unless you need to inspect the\n * inner workings of the cache. If anything returned by this\n * object is modified in any way, strange breakage may occur.\n *\n * These fields are private for a reason!\n *\n * @internal\n */\n static unsafeExposeInternals(c) {\n return {\n // properties\n starts: c.#starts,\n ttls: c.#ttls,\n sizes: c.#sizes,\n keyMap: c.#keyMap,\n keyList: c.#keyList,\n valList: c.#valList,\n next: c.#next,\n prev: c.#prev,\n get head() {\n return c.#head;\n },\n get tail() {\n return c.#tail;\n },\n free: c.#free,\n // methods\n isBackgroundFetch: (p) => c.#isBackgroundFetch(p),\n backgroundFetch: (k, index, options, context) => c.#backgroundFetch(k, index, options, context),\n moveToTail: (index) => c.#moveToTail(index),\n indexes: (options) => c.#indexes(options),\n rindexes: (options) => c.#rindexes(options),\n isStale: (index) => c.#isStale(index),\n };\n }\n // Protected read-only members\n /**\n * {@link LRUCache.OptionsBase.max} (read-only)\n */\n get max() {\n return this.#max;\n }\n /**\n * {@link LRUCache.OptionsBase.maxSize} (read-only)\n */\n get maxSize() {\n return this.#maxSize;\n }\n /**\n * The total computed size of items in the cache (read-only)\n */\n get calculatedSize() {\n return this.#calculatedSize;\n }\n /**\n * The number of items stored in the cache (read-only)\n */\n get size() {\n return this.#size;\n }\n /**\n * {@link LRUCache.OptionsBase.fetchMethod} (read-only)\n */\n get fetchMethod() {\n return this.#fetchMethod;\n }\n get memoMethod() {\n return this.#memoMethod;\n }\n /**\n * {@link LRUCache.OptionsBase.dispose} (read-only)\n */\n get dispose() {\n return this.#dispose;\n }\n /**\n * {@link LRUCache.OptionsBase.disposeAfter} (read-only)\n */\n get disposeAfter() {\n return this.#disposeAfter;\n }\n constructor(options) {\n const { max = 0, ttl, ttlResolution = 1, ttlAutopurge, updateAgeOnGet, updateAgeOnHas, allowStale, dispose, disposeAfter, noDisposeOnSet, noUpdateTTL, maxSize = 0, maxEntrySize = 0, sizeCalculation, fetchMethod, memoMethod, noDeleteOnFetchRejection, noDeleteOnStaleGet, allowStaleOnFetchRejection, allowStaleOnFetchAbort, ignoreFetchAbort, } = options;\n if (max !== 0 && !isPosInt(max)) {\n throw new TypeError('max option must be a nonnegative integer');\n }\n const UintArray = max ? getUintArray(max) : Array;\n if (!UintArray) {\n throw new Error('invalid max value: ' + max);\n }\n this.#max = max;\n this.#maxSize = maxSize;\n this.maxEntrySize = maxEntrySize || this.#maxSize;\n this.sizeCalculation = sizeCalculation;\n if (this.sizeCalculation) {\n if (!this.#maxSize && !this.maxEntrySize) {\n throw new TypeError('cannot set sizeCalculation without setting maxSize or maxEntrySize');\n }\n if (typeof this.sizeCalculation !== 'function') {\n throw new TypeError('sizeCalculation set to non-function');\n }\n }\n if (memoMethod !== undefined &&\n typeof memoMethod !== 'function') {\n throw new TypeError('memoMethod must be a function if defined');\n }\n this.#memoMethod = memoMethod;\n if (fetchMethod !== undefined &&\n typeof fetchMethod !== 'function') {\n throw new TypeError('fetchMethod must be a function if specified');\n }\n this.#fetchMethod = fetchMethod;\n this.#hasFetchMethod = !!fetchMethod;\n this.#keyMap = new Map();\n this.#keyList = new Array(max).fill(undefined);\n this.#valList = new Array(max).fill(undefined);\n this.#next = new UintArray(max);\n this.#prev = new UintArray(max);\n this.#head = 0;\n this.#tail = 0;\n this.#free = Stack.create(max);\n this.#size = 0;\n this.#calculatedSize = 0;\n if (typeof dispose === 'function') {\n this.#dispose = dispose;\n }\n if (typeof disposeAfter === 'function') {\n this.#disposeAfter = disposeAfter;\n this.#disposed = [];\n }\n else {\n this.#disposeAfter = undefined;\n this.#disposed = undefined;\n }\n this.#hasDispose = !!this.#dispose;\n this.#hasDisposeAfter = !!this.#disposeAfter;\n this.noDisposeOnSet = !!noDisposeOnSet;\n this.noUpdateTTL = !!noUpdateTTL;\n this.noDeleteOnFetchRejection = !!noDeleteOnFetchRejection;\n this.allowStaleOnFetchRejection = !!allowStaleOnFetchRejection;\n this.allowStaleOnFetchAbort = !!allowStaleOnFetchAbort;\n this.ignoreFetchAbort = !!ignoreFetchAbort;\n // NB: maxEntrySize is set to maxSize if it's set\n if (this.maxEntrySize !== 0) {\n if (this.#maxSize !== 0) {\n if (!isPosInt(this.#maxSize)) {\n throw new TypeError('maxSize must be a positive integer if specified');\n }\n }\n if (!isPosInt(this.maxEntrySize)) {\n throw new TypeError('maxEntrySize must be a positive integer if specified');\n }\n this.#initializeSizeTracking();\n }\n this.allowStale = !!allowStale;\n this.noDeleteOnStaleGet = !!noDeleteOnStaleGet;\n this.updateAgeOnGet = !!updateAgeOnGet;\n this.updateAgeOnHas = !!updateAgeOnHas;\n this.ttlResolution =\n isPosInt(ttlResolution) || ttlResolution === 0\n ? ttlResolution\n : 1;\n this.ttlAutopurge = !!ttlAutopurge;\n this.ttl = ttl || 0;\n if (this.ttl) {\n if (!isPosInt(this.ttl)) {\n throw new TypeError('ttl must be a positive integer if specified');\n }\n this.#initializeTTLTracking();\n }\n // do not allow completely unbounded caches\n if (this.#max === 0 && this.ttl === 0 && this.#maxSize === 0) {\n throw new TypeError('At least one of max, maxSize, or ttl is required');\n }\n if (!this.ttlAutopurge && !this.#max && !this.#maxSize) {\n const code = 'LRU_CACHE_UNBOUNDED';\n if (shouldWarn(code)) {\n warned.add(code);\n const msg = 'TTL caching without ttlAutopurge, max, or maxSize can ' +\n 'result in unbounded memory consumption.';\n emitWarning(msg, 'UnboundedCacheWarning', code, LRUCache);\n }\n }\n }\n /**\n * Return the number of ms left in the item's TTL. If item is not in cache,\n * returns `0`. Returns `Infinity` if item is in cache without a defined TTL.\n */\n getRemainingTTL(key) {\n return this.#keyMap.has(key) ? Infinity : 0;\n }\n #initializeTTLTracking() {\n const ttls = new ZeroArray(this.#max);\n const starts = new ZeroArray(this.#max);\n this.#ttls = ttls;\n this.#starts = starts;\n this.#setItemTTL = (index, ttl, start = perf.now()) => {\n starts[index] = ttl !== 0 ? start : 0;\n ttls[index] = ttl;\n if (ttl !== 0 && this.ttlAutopurge) {\n const t = setTimeout(() => {\n if (this.#isStale(index)) {\n this.#delete(this.#keyList[index], 'expire');\n }\n }, ttl + 1);\n // unref() not supported on all platforms\n /* c8 ignore start */\n if (t.unref) {\n t.unref();\n }\n /* c8 ignore stop */\n }\n };\n this.#updateItemAge = index => {\n starts[index] = ttls[index] !== 0 ? perf.now() : 0;\n };\n this.#statusTTL = (status, index) => {\n if (ttls[index]) {\n const ttl = ttls[index];\n const start = starts[index];\n /* c8 ignore next */\n if (!ttl || !start)\n return;\n status.ttl = ttl;\n status.start = start;\n status.now = cachedNow || getNow();\n const age = status.now - start;\n status.remainingTTL = ttl - age;\n }\n };\n // debounce calls to perf.now() to 1s so we're not hitting\n // that costly call repeatedly.\n let cachedNow = 0;\n const getNow = () => {\n const n = perf.now();\n if (this.ttlResolution > 0) {\n cachedNow = n;\n const t = setTimeout(() => (cachedNow = 0), this.ttlResolution);\n // not available on all platforms\n /* c8 ignore start */\n if (t.unref) {\n t.unref();\n }\n /* c8 ignore stop */\n }\n return n;\n };\n this.getRemainingTTL = key => {\n const index = this.#keyMap.get(key);\n if (index === undefined) {\n return 0;\n }\n const ttl = ttls[index];\n const start = starts[index];\n if (!ttl || !start) {\n return Infinity;\n }\n const age = (cachedNow || getNow()) - start;\n return ttl - age;\n };\n this.#isStale = index => {\n const s = starts[index];\n const t = ttls[index];\n return !!t && !!s && (cachedNow || getNow()) - s > t;\n };\n }\n // conditionally set private methods related to TTL\n #updateItemAge = () => { };\n #statusTTL = () => { };\n #setItemTTL = () => { };\n /* c8 ignore stop */\n #isStale = () => false;\n #initializeSizeTracking() {\n const sizes = new ZeroArray(this.#max);\n this.#calculatedSize = 0;\n this.#sizes = sizes;\n this.#removeItemSize = index => {\n this.#calculatedSize -= sizes[index];\n sizes[index] = 0;\n };\n this.#requireSize = (k, v, size, sizeCalculation) => {\n // provisionally accept background fetches.\n // actual value size will be checked when they return.\n if (this.#isBackgroundFetch(v)) {\n return 0;\n }\n if (!isPosInt(size)) {\n if (sizeCalculation) {\n if (typeof sizeCalculation !== 'function') {\n throw new TypeError('sizeCalculation must be a function');\n }\n size = sizeCalculation(v, k);\n if (!isPosInt(size)) {\n throw new TypeError('sizeCalculation return invalid (expect positive integer)');\n }\n }\n else {\n throw new TypeError('invalid size value (must be positive integer). ' +\n 'When maxSize or maxEntrySize is used, sizeCalculation ' +\n 'or size must be set.');\n }\n }\n return size;\n };\n this.#addItemSize = (index, size, status) => {\n sizes[index] = size;\n if (this.#maxSize) {\n const maxSize = this.#maxSize - sizes[index];\n while (this.#calculatedSize > maxSize) {\n this.#evict(true);\n }\n }\n this.#calculatedSize += sizes[index];\n if (status) {\n status.entrySize = size;\n status.totalCalculatedSize = this.#calculatedSize;\n }\n };\n }\n #removeItemSize = _i => { };\n #addItemSize = (_i, _s, _st) => { };\n #requireSize = (_k, _v, size, sizeCalculation) => {\n if (size || sizeCalculation) {\n throw new TypeError('cannot set size without setting maxSize or maxEntrySize on cache');\n }\n return 0;\n };\n *#indexes({ allowStale = this.allowStale } = {}) {\n if (this.#size) {\n for (let i = this.#tail; true;) {\n if (!this.#isValidIndex(i)) {\n break;\n }\n if (allowStale || !this.#isStale(i)) {\n yield i;\n }\n if (i === this.#head) {\n break;\n }\n else {\n i = this.#prev[i];\n }\n }\n }\n }\n *#rindexes({ allowStale = this.allowStale } = {}) {\n if (this.#size) {\n for (let i = this.#head; true;) {\n if (!this.#isValidIndex(i)) {\n break;\n }\n if (allowStale || !this.#isStale(i)) {\n yield i;\n }\n if (i === this.#tail) {\n break;\n }\n else {\n i = this.#next[i];\n }\n }\n }\n }\n #isValidIndex(index) {\n return (index !== undefined &&\n this.#keyMap.get(this.#keyList[index]) === index);\n }\n /**\n * Return a generator yielding `[key, value]` pairs,\n * in order from most recently used to least recently used.\n */\n *entries() {\n for (const i of this.#indexes()) {\n if (this.#valList[i] !== undefined &&\n this.#keyList[i] !== undefined &&\n !this.#isBackgroundFetch(this.#valList[i])) {\n yield [this.#keyList[i], this.#valList[i]];\n }\n }\n }\n /**\n * Inverse order version of {@link LRUCache.entries}\n *\n * Return a generator yielding `[key, value]` pairs,\n * in order from least recently used to most recently used.\n */\n *rentries() {\n for (const i of this.#rindexes()) {\n if (this.#valList[i] !== undefined &&\n this.#keyList[i] !== undefined &&\n !this.#isBackgroundFetch(this.#valList[i])) {\n yield [this.#keyList[i], this.#valList[i]];\n }\n }\n }\n /**\n * Return a generator yielding the keys in the cache,\n * in order from most recently used to least recently used.\n */\n *keys() {\n for (const i of this.#indexes()) {\n const k = this.#keyList[i];\n if (k !== undefined &&\n !this.#isBackgroundFetch(this.#valList[i])) {\n yield k;\n }\n }\n }\n /**\n * Inverse order version of {@link LRUCache.keys}\n *\n * Return a generator yielding the keys in the cache,\n * in order from least recently used to most recently used.\n */\n *rkeys() {\n for (const i of this.#rindexes()) {\n const k = this.#keyList[i];\n if (k !== undefined &&\n !this.#isBackgroundFetch(this.#valList[i])) {\n yield k;\n }\n }\n }\n /**\n * Return a generator yielding the values in the cache,\n * in order from most recently used to least recently used.\n */\n *values() {\n for (const i of this.#indexes()) {\n const v = this.#valList[i];\n if (v !== undefined &&\n !this.#isBackgroundFetch(this.#valList[i])) {\n yield this.#valList[i];\n }\n }\n }\n /**\n * Inverse order version of {@link LRUCache.values}\n *\n * Return a generator yielding the values in the cache,\n * in order from least recently used to most recently used.\n */\n *rvalues() {\n for (const i of this.#rindexes()) {\n const v = this.#valList[i];\n if (v !== undefined &&\n !this.#isBackgroundFetch(this.#valList[i])) {\n yield this.#valList[i];\n }\n }\n }\n /**\n * Iterating over the cache itself yields the same results as\n * {@link LRUCache.entries}\n */\n [Symbol.iterator]() {\n return this.entries();\n }\n /**\n * A String value that is used in the creation of the default string\n * description of an object. Called by the built-in method\n * `Object.prototype.toString`.\n */\n [Symbol.toStringTag] = 'LRUCache';\n /**\n * Find a value for which the supplied fn method returns a truthy value,\n * similar to `Array.find()`. fn is called as `fn(value, key, cache)`.\n */\n find(fn, getOptions = {}) {\n for (const i of this.#indexes()) {\n const v = this.#valList[i];\n const value = this.#isBackgroundFetch(v)\n ? v.__staleWhileFetching\n : v;\n if (value === undefined)\n continue;\n if (fn(value, this.#keyList[i], this)) {\n return this.get(this.#keyList[i], getOptions);\n }\n }\n }\n /**\n * Call the supplied function on each item in the cache, in order from most\n * recently used to least recently used.\n *\n * `fn` is called as `fn(value, key, cache)`.\n *\n * If `thisp` is provided, function will be called in the `this`-context of\n * the provided object, or the cache if no `thisp` object is provided.\n *\n * Does not update age or recenty of use, or iterate over stale values.\n */\n forEach(fn, thisp = this) {\n for (const i of this.#indexes()) {\n const v = this.#valList[i];\n const value = this.#isBackgroundFetch(v)\n ? v.__staleWhileFetching\n : v;\n if (value === undefined)\n continue;\n fn.call(thisp, value, this.#keyList[i], this);\n }\n }\n /**\n * The same as {@link LRUCache.forEach} but items are iterated over in\n * reverse order. (ie, less recently used items are iterated over first.)\n */\n rforEach(fn, thisp = this) {\n for (const i of this.#rindexes()) {\n const v = this.#valList[i];\n const value = this.#isBackgroundFetch(v)\n ? v.__staleWhileFetching\n : v;\n if (value === undefined)\n continue;\n fn.call(thisp, value, this.#keyList[i], this);\n }\n }\n /**\n * Delete any stale entries. Returns true if anything was removed,\n * false otherwise.\n */\n purgeStale() {\n let deleted = false;\n for (const i of this.#rindexes({ allowStale: true })) {\n if (this.#isStale(i)) {\n this.#delete(this.#keyList[i], 'expire');\n deleted = true;\n }\n }\n return deleted;\n }\n /**\n * Get the extended info about a given entry, to get its value, size, and\n * TTL info simultaneously. Returns `undefined` if the key is not present.\n *\n * Unlike {@link LRUCache#dump}, which is designed to be portable and survive\n * serialization, the `start` value is always the current timestamp, and the\n * `ttl` is a calculated remaining time to live (negative if expired).\n *\n * Always returns stale values, if their info is found in the cache, so be\n * sure to check for expirations (ie, a negative {@link LRUCache.Entry#ttl})\n * if relevant.\n */\n info(key) {\n const i = this.#keyMap.get(key);\n if (i === undefined)\n return undefined;\n const v = this.#valList[i];\n const value = this.#isBackgroundFetch(v)\n ? v.__staleWhileFetching\n : v;\n if (value === undefined)\n return undefined;\n const entry = { value };\n if (this.#ttls && this.#starts) {\n const ttl = this.#ttls[i];\n const start = this.#starts[i];\n if (ttl && start) {\n const remain = ttl - (perf.now() - start);\n entry.ttl = remain;\n entry.start = Date.now();\n }\n }\n if (this.#sizes) {\n entry.size = this.#sizes[i];\n }\n return entry;\n }\n /**\n * Return an array of [key, {@link LRUCache.Entry}] tuples which can be\n * passed to {@link LRLUCache#load}.\n *\n * The `start` fields are calculated relative to a portable `Date.now()`\n * timestamp, even if `performance.now()` is available.\n *\n * Stale entries are always included in the `dump`, even if\n * {@link LRUCache.OptionsBase.allowStale} is false.\n *\n * Note: this returns an actual array, not a generator, so it can be more\n * easily passed around.\n */\n dump() {\n const arr = [];\n for (const i of this.#indexes({ allowStale: true })) {\n const key = this.#keyList[i];\n const v = this.#valList[i];\n const value = this.#isBackgroundFetch(v)\n ? v.__staleWhileFetching\n : v;\n if (value === undefined || key === undefined)\n continue;\n const entry = { value };\n if (this.#ttls && this.#starts) {\n entry.ttl = this.#ttls[i];\n // always dump the start relative to a portable timestamp\n // it's ok for this to be a bit slow, it's a rare operation.\n const age = perf.now() - this.#starts[i];\n entry.start = Math.floor(Date.now() - age);\n }\n if (this.#sizes) {\n entry.size = this.#sizes[i];\n }\n arr.unshift([key, entry]);\n }\n return arr;\n }\n /**\n * Reset the cache and load in the items in entries in the order listed.\n *\n * The shape of the resulting cache may be different if the same options are\n * not used in both caches.\n *\n * The `start` fields are assumed to be calculated relative to a portable\n * `Date.now()` timestamp, even if `performance.now()` is available.\n */\n load(arr) {\n this.clear();\n for (const [key, entry] of arr) {\n if (entry.start) {\n // entry.start is a portable timestamp, but we may be using\n // node's performance.now(), so calculate the offset, so that\n // we get the intended remaining TTL, no matter how long it's\n // been on ice.\n //\n // it's ok for this to be a bit slow, it's a rare operation.\n const age = Date.now() - entry.start;\n entry.start = perf.now() - age;\n }\n this.set(key, entry.value, entry);\n }\n }\n /**\n * Add a value to the cache.\n *\n * Note: if `undefined` is specified as a value, this is an alias for\n * {@link LRUCache#delete}\n *\n * Fields on the {@link LRUCache.SetOptions} options param will override\n * their corresponding values in the constructor options for the scope\n * of this single `set()` operation.\n *\n * If `start` is provided, then that will set the effective start\n * time for the TTL calculation. Note that this must be a previous\n * value of `performance.now()` if supported, or a previous value of\n * `Date.now()` if not.\n *\n * Options object may also include `size`, which will prevent\n * calling the `sizeCalculation` function and just use the specified\n * number if it is a positive integer, and `noDisposeOnSet` which\n * will prevent calling a `dispose` function in the case of\n * overwrites.\n *\n * If the `size` (or return value of `sizeCalculation`) for a given\n * entry is greater than `maxEntrySize`, then the item will not be\n * added to the cache.\n *\n * Will update the recency of the entry.\n *\n * If the value is `undefined`, then this is an alias for\n * `cache.delete(key)`. `undefined` is never stored in the cache.\n */\n set(k, v, setOptions = {}) {\n if (v === undefined) {\n this.delete(k);\n return this;\n }\n const { ttl = this.ttl, start, noDisposeOnSet = this.noDisposeOnSet, sizeCalculation = this.sizeCalculation, status, } = setOptions;\n let { noUpdateTTL = this.noUpdateTTL } = setOptions;\n const size = this.#requireSize(k, v, setOptions.size || 0, sizeCalculation);\n // if the item doesn't fit, don't do anything\n // NB: maxEntrySize set to maxSize by default\n if (this.maxEntrySize && size > this.maxEntrySize) {\n if (status) {\n status.set = 'miss';\n status.maxEntrySizeExceeded = true;\n }\n // have to delete, in case something is there already.\n this.#delete(k, 'set');\n return this;\n }\n let index = this.#size === 0 ? undefined : this.#keyMap.get(k);\n if (index === undefined) {\n // addition\n index = (this.#size === 0\n ? this.#tail\n : this.#free.length !== 0\n ? this.#free.pop()\n : this.#size === this.#max\n ? this.#evict(false)\n : this.#size);\n this.#keyList[index] = k;\n this.#valList[index] = v;\n this.#keyMap.set(k, index);\n this.#next[this.#tail] = index;\n this.#prev[index] = this.#tail;\n this.#tail = index;\n this.#size++;\n this.#addItemSize(index, size, status);\n if (status)\n status.set = 'add';\n noUpdateTTL = false;\n }\n else {\n // update\n this.#moveToTail(index);\n const oldVal = this.#valList[index];\n if (v !== oldVal) {\n if (this.#hasFetchMethod && this.#isBackgroundFetch(oldVal)) {\n oldVal.__abortController.abort(new Error('replaced'));\n const { __staleWhileFetching: s } = oldVal;\n if (s !== undefined && !noDisposeOnSet) {\n if (this.#hasDispose) {\n this.#dispose?.(s, k, 'set');\n }\n if (this.#hasDisposeAfter) {\n this.#disposed?.push([s, k, 'set']);\n }\n }\n }\n else if (!noDisposeOnSet) {\n if (this.#hasDispose) {\n this.#dispose?.(oldVal, k, 'set');\n }\n if (this.#hasDisposeAfter) {\n this.#disposed?.push([oldVal, k, 'set']);\n }\n }\n this.#removeItemSize(index);\n this.#addItemSize(index, size, status);\n this.#valList[index] = v;\n if (status) {\n status.set = 'replace';\n const oldValue = oldVal && this.#isBackgroundFetch(oldVal)\n ? oldVal.__staleWhileFetching\n : oldVal;\n if (oldValue !== undefined)\n status.oldValue = oldValue;\n }\n }\n else if (status) {\n status.set = 'update';\n }\n }\n if (ttl !== 0 && !this.#ttls) {\n this.#initializeTTLTracking();\n }\n if (this.#ttls) {\n if (!noUpdateTTL) {\n this.#setItemTTL(index, ttl, start);\n }\n if (status)\n this.#statusTTL(status, index);\n }\n if (!noDisposeOnSet && this.#hasDisposeAfter && this.#disposed) {\n const dt = this.#disposed;\n let task;\n while ((task = dt?.shift())) {\n this.#disposeAfter?.(...task);\n }\n }\n return this;\n }\n /**\n * Evict the least recently used item, returning its value or\n * `undefined` if cache is empty.\n */\n pop() {\n try {\n while (this.#size) {\n const val = this.#valList[this.#head];\n this.#evict(true);\n if (this.#isBackgroundFetch(val)) {\n if (val.__staleWhileFetching) {\n return val.__staleWhileFetching;\n }\n }\n else if (val !== undefined) {\n return val;\n }\n }\n }\n finally {\n if (this.#hasDisposeAfter && this.#disposed) {\n const dt = this.#disposed;\n let task;\n while ((task = dt?.shift())) {\n this.#disposeAfter?.(...task);\n }\n }\n }\n }\n #evict(free) {\n const head = this.#head;\n const k = this.#keyList[head];\n const v = this.#valList[head];\n if (this.#hasFetchMethod && this.#isBackgroundFetch(v)) {\n v.__abortController.abort(new Error('evicted'));\n }\n else if (this.#hasDispose || this.#hasDisposeAfter) {\n if (this.#hasDispose) {\n this.#dispose?.(v, k, 'evict');\n }\n if (this.#hasDisposeAfter) {\n this.#disposed?.push([v, k, 'evict']);\n }\n }\n this.#removeItemSize(head);\n // if we aren't about to use the index, then null these out\n if (free) {\n this.#keyList[head] = undefined;\n this.#valList[head] = undefined;\n this.#free.push(head);\n }\n if (this.#size === 1) {\n this.#head = this.#tail = 0;\n this.#free.length = 0;\n }\n else {\n this.#head = this.#next[head];\n }\n this.#keyMap.delete(k);\n this.#size--;\n return head;\n }\n /**\n * Check if a key is in the cache, without updating the recency of use.\n * Will return false if the item is stale, even though it is technically\n * in the cache.\n *\n * Check if a key is in the cache, without updating the recency of\n * use. Age is updated if {@link LRUCache.OptionsBase.updateAgeOnHas} is set\n * to `true` in either the options or the constructor.\n *\n * Will return `false` if the item is stale, even though it is technically in\n * the cache. The difference can be determined (if it matters) by using a\n * `status` argument, and inspecting the `has` field.\n *\n * Will not update item age unless\n * {@link LRUCache.OptionsBase.updateAgeOnHas} is set.\n */\n has(k, hasOptions = {}) {\n const { updateAgeOnHas = this.updateAgeOnHas, status } = hasOptions;\n const index = this.#keyMap.get(k);\n if (index !== undefined) {\n const v = this.#valList[index];\n if (this.#isBackgroundFetch(v) &&\n v.__staleWhileFetching === undefined) {\n return false;\n }\n if (!this.#isStale(index)) {\n if (updateAgeOnHas) {\n this.#updateItemAge(index);\n }\n if (status) {\n status.has = 'hit';\n this.#statusTTL(status, index);\n }\n return true;\n }\n else if (status) {\n status.has = 'stale';\n this.#statusTTL(status, index);\n }\n }\n else if (status) {\n status.has = 'miss';\n }\n return false;\n }\n /**\n * Like {@link LRUCache#get} but doesn't update recency or delete stale\n * items.\n *\n * Returns `undefined` if the item is stale, unless\n * {@link LRUCache.OptionsBase.allowStale} is set.\n */\n peek(k, peekOptions = {}) {\n const { allowStale = this.allowStale } = peekOptions;\n const index = this.#keyMap.get(k);\n if (index === undefined ||\n (!allowStale && this.#isStale(index))) {\n return;\n }\n const v = this.#valList[index];\n // either stale and allowed, or forcing a refresh of non-stale value\n return this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v;\n }\n #backgroundFetch(k, index, options, context) {\n const v = index === undefined ? undefined : this.#valList[index];\n if (this.#isBackgroundFetch(v)) {\n return v;\n }\n const ac = new AC();\n const { signal } = options;\n // when/if our AC signals, then stop listening to theirs.\n signal?.addEventListener('abort', () => ac.abort(signal.reason), {\n signal: ac.signal,\n });\n const fetchOpts = {\n signal: ac.signal,\n options,\n context,\n };\n const cb = (v, updateCache = false) => {\n const { aborted } = ac.signal;\n const ignoreAbort = options.ignoreFetchAbort && v !== undefined;\n if (options.status) {\n if (aborted && !updateCache) {\n options.status.fetchAborted = true;\n options.status.fetchError = ac.signal.reason;\n if (ignoreAbort)\n options.status.fetchAbortIgnored = true;\n }\n else {\n options.status.fetchResolved = true;\n }\n }\n if (aborted && !ignoreAbort && !updateCache) {\n return fetchFail(ac.signal.reason);\n }\n // either we didn't abort, and are still here, or we did, and ignored\n const bf = p;\n if (this.#valList[index] === p) {\n if (v === undefined) {\n if (bf.__staleWhileFetching) {\n this.#valList[index] = bf.__staleWhileFetching;\n }\n else {\n this.#delete(k, 'fetch');\n }\n }\n else {\n if (options.status)\n options.status.fetchUpdated = true;\n this.set(k, v, fetchOpts.options);\n }\n }\n return v;\n };\n const eb = (er) => {\n if (options.status) {\n options.status.fetchRejected = true;\n options.status.fetchError = er;\n }\n return fetchFail(er);\n };\n const fetchFail = (er) => {\n const { aborted } = ac.signal;\n const allowStaleAborted = aborted && options.allowStaleOnFetchAbort;\n const allowStale = allowStaleAborted || options.allowStaleOnFetchRejection;\n const noDelete = allowStale || options.noDeleteOnFetchRejection;\n const bf = p;\n if (this.#valList[index] === p) {\n // if we allow stale on fetch rejections, then we need to ensure that\n // the stale value is not removed from the cache when the fetch fails.\n const del = !noDelete || bf.__staleWhileFetching === undefined;\n if (del) {\n this.#delete(k, 'fetch');\n }\n else if (!allowStaleAborted) {\n // still replace the *promise* with the stale value,\n // since we are done with the promise at this point.\n // leave it untouched if we're still waiting for an\n // aborted background fetch that hasn't yet returned.\n this.#valList[index] = bf.__staleWhileFetching;\n }\n }\n if (allowStale) {\n if (options.status && bf.__staleWhileFetching !== undefined) {\n options.status.returnedStale = true;\n }\n return bf.__staleWhileFetching;\n }\n else if (bf.__returned === bf) {\n throw er;\n }\n };\n const pcall = (res, rej) => {\n const fmp = this.#fetchMethod?.(k, v, fetchOpts);\n if (fmp && fmp instanceof Promise) {\n fmp.then(v => res(v === undefined ? undefined : v), rej);\n }\n // ignored, we go until we finish, regardless.\n // defer check until we are actually aborting,\n // so fetchMethod can override.\n ac.signal.addEventListener('abort', () => {\n if (!options.ignoreFetchAbort ||\n options.allowStaleOnFetchAbort) {\n res(undefined);\n // when it eventually resolves, update the cache.\n if (options.allowStaleOnFetchAbort) {\n res = v => cb(v, true);\n }\n }\n });\n };\n if (options.status)\n options.status.fetchDispatched = true;\n const p = new Promise(pcall).then(cb, eb);\n const bf = Object.assign(p, {\n __abortController: ac,\n __staleWhileFetching: v,\n __returned: undefined,\n });\n if (index === undefined) {\n // internal, don't expose status.\n this.set(k, bf, { ...fetchOpts.options, status: undefined });\n index = this.#keyMap.get(k);\n }\n else {\n this.#valList[index] = bf;\n }\n return bf;\n }\n #isBackgroundFetch(p) {\n if (!this.#hasFetchMethod)\n return false;\n const b = p;\n return (!!b &&\n b instanceof Promise &&\n b.hasOwnProperty('__staleWhileFetching') &&\n b.__abortController instanceof AC);\n }\n async fetch(k, fetchOptions = {}) {\n const { \n // get options\n allowStale = this.allowStale, updateAgeOnGet = this.updateAgeOnGet, noDeleteOnStaleGet = this.noDeleteOnStaleGet, \n // set options\n ttl = this.ttl, noDisposeOnSet = this.noDisposeOnSet, size = 0, sizeCalculation = this.sizeCalculation, noUpdateTTL = this.noUpdateTTL, \n // fetch exclusive options\n noDeleteOnFetchRejection = this.noDeleteOnFetchRejection, allowStaleOnFetchRejection = this.allowStaleOnFetchRejection, ignoreFetchAbort = this.ignoreFetchAbort, allowStaleOnFetchAbort = this.allowStaleOnFetchAbort, context, forceRefresh = false, status, signal, } = fetchOptions;\n if (!this.#hasFetchMethod) {\n if (status)\n status.fetch = 'get';\n return this.get(k, {\n allowStale,\n updateAgeOnGet,\n noDeleteOnStaleGet,\n status,\n });\n }\n const options = {\n allowStale,\n updateAgeOnGet,\n noDeleteOnStaleGet,\n ttl,\n noDisposeOnSet,\n size,\n sizeCalculation,\n noUpdateTTL,\n noDeleteOnFetchRejection,\n allowStaleOnFetchRejection,\n allowStaleOnFetchAbort,\n ignoreFetchAbort,\n status,\n signal,\n };\n let index = this.#keyMap.get(k);\n if (index === undefined) {\n if (status)\n status.fetch = 'miss';\n const p = this.#backgroundFetch(k, index, options, context);\n return (p.__returned = p);\n }\n else {\n // in cache, maybe already fetching\n const v = this.#valList[index];\n if (this.#isBackgroundFetch(v)) {\n const stale = allowStale && v.__staleWhileFetching !== undefined;\n if (status) {\n status.fetch = 'inflight';\n if (stale)\n status.returnedStale = true;\n }\n return stale ? v.__staleWhileFetching : (v.__returned = v);\n }\n // if we force a refresh, that means do NOT serve the cached value,\n // unless we are already in the process of refreshing the cache.\n const isStale = this.#isStale(index);\n if (!forceRefresh && !isStale) {\n if (status)\n status.fetch = 'hit';\n this.#moveToTail(index);\n if (updateAgeOnGet) {\n this.#updateItemAge(index);\n }\n if (status)\n this.#statusTTL(status, index);\n return v;\n }\n // ok, it is stale or a forced refresh, and not already fetching.\n // refresh the cache.\n const p = this.#backgroundFetch(k, index, options, context);\n const hasStale = p.__staleWhileFetching !== undefined;\n const staleVal = hasStale && allowStale;\n if (status) {\n status.fetch = isStale ? 'stale' : 'refresh';\n if (staleVal && isStale)\n status.returnedStale = true;\n }\n return staleVal ? p.__staleWhileFetching : (p.__returned = p);\n }\n }\n async forceFetch(k, fetchOptions = {}) {\n const v = await this.fetch(k, fetchOptions);\n if (v === undefined)\n throw new Error('fetch() returned undefined');\n return v;\n }\n memo(k, memoOptions = {}) {\n const memoMethod = this.#memoMethod;\n if (!memoMethod) {\n throw new Error('no memoMethod provided to constructor');\n }\n const { context, forceRefresh, ...options } = memoOptions;\n const v = this.get(k, options);\n if (!forceRefresh && v !== undefined)\n return v;\n const vv = memoMethod(k, v, {\n options,\n context,\n });\n this.set(k, vv, options);\n return vv;\n }\n /**\n * Return a value from the cache. Will update the recency of the cache\n * entry found.\n *\n * If the key is not found, get() will return `undefined`.\n */\n get(k, getOptions = {}) {\n const { allowStale = this.allowStale, updateAgeOnGet = this.updateAgeOnGet, noDeleteOnStaleGet = this.noDeleteOnStaleGet, status, } = getOptions;\n const index = this.#keyMap.get(k);\n if (index !== undefined) {\n const value = this.#valList[index];\n const fetching = this.#isBackgroundFetch(value);\n if (status)\n this.#statusTTL(status, index);\n if (this.#isStale(index)) {\n if (status)\n status.get = 'stale';\n // delete only if not an in-flight background fetch\n if (!fetching) {\n if (!noDeleteOnStaleGet) {\n this.#delete(k, 'expire');\n }\n if (status && allowStale)\n status.returnedStale = true;\n return allowStale ? value : undefined;\n }\n else {\n if (status &&\n allowStale &&\n value.__staleWhileFetching !== undefined) {\n status.returnedStale = true;\n }\n return allowStale ? value.__staleWhileFetching : undefined;\n }\n }\n else {\n if (status)\n status.get = 'hit';\n // if we're currently fetching it, we don't actually have it yet\n // it's not stale, which means this isn't a staleWhileRefetching.\n // If it's not stale, and fetching, AND has a __staleWhileFetching\n // value, then that means the user fetched with {forceRefresh:true},\n // so it's safe to return that value.\n if (fetching) {\n return value.__staleWhileFetching;\n }\n this.#moveToTail(index);\n if (updateAgeOnGet) {\n this.#updateItemAge(index);\n }\n return value;\n }\n }\n else if (status) {\n status.get = 'miss';\n }\n }\n #connect(p, n) {\n this.#prev[n] = p;\n this.#next[p] = n;\n }\n #moveToTail(index) {\n // if tail already, nothing to do\n // if head, move head to next[index]\n // else\n // move next[prev[index]] to next[index] (head has no prev)\n // move prev[next[index]] to prev[index]\n // prev[index] = tail\n // next[tail] = index\n // tail = index\n if (index !== this.#tail) {\n if (index === this.#head) {\n this.#head = this.#next[index];\n }\n else {\n this.#connect(this.#prev[index], this.#next[index]);\n }\n this.#connect(this.#tail, index);\n this.#tail = index;\n }\n }\n /**\n * Deletes a key out of the cache.\n *\n * Returns true if the key was deleted, false otherwise.\n */\n delete(k) {\n return this.#delete(k, 'delete');\n }\n #delete(k, reason) {\n let deleted = false;\n if (this.#size !== 0) {\n const index = this.#keyMap.get(k);\n if (index !== undefined) {\n deleted = true;\n if (this.#size === 1) {\n this.#clear(reason);\n }\n else {\n this.#removeItemSize(index);\n const v = this.#valList[index];\n if (this.#isBackgroundFetch(v)) {\n v.__abortController.abort(new Error('deleted'));\n }\n else if (this.#hasDispose || this.#hasDisposeAfter) {\n if (this.#hasDispose) {\n this.#dispose?.(v, k, reason);\n }\n if (this.#hasDisposeAfter) {\n this.#disposed?.push([v, k, reason]);\n }\n }\n this.#keyMap.delete(k);\n this.#keyList[index] = undefined;\n this.#valList[index] = undefined;\n if (index === this.#tail) {\n this.#tail = this.#prev[index];\n }\n else if (index === this.#head) {\n this.#head = this.#next[index];\n }\n else {\n const pi = this.#prev[index];\n this.#next[pi] = this.#next[index];\n const ni = this.#next[index];\n this.#prev[ni] = this.#prev[index];\n }\n this.#size--;\n this.#free.push(index);\n }\n }\n }\n if (this.#hasDisposeAfter && this.#disposed?.length) {\n const dt = this.#disposed;\n let task;\n while ((task = dt?.shift())) {\n this.#disposeAfter?.(...task);\n }\n }\n return deleted;\n }\n /**\n * Clear the cache entirely, throwing away all values.\n */\n clear() {\n return this.#clear('delete');\n }\n #clear(reason) {\n for (const index of this.#rindexes({ allowStale: true })) {\n const v = this.#valList[index];\n if (this.#isBackgroundFetch(v)) {\n v.__abortController.abort(new Error('deleted'));\n }\n else {\n const k = this.#keyList[index];\n if (this.#hasDispose) {\n this.#dispose?.(v, k, reason);\n }\n if (this.#hasDisposeAfter) {\n this.#disposed?.push([v, k, reason]);\n }\n }\n }\n this.#keyMap.clear();\n this.#valList.fill(undefined);\n this.#keyList.fill(undefined);\n if (this.#ttls && this.#starts) {\n this.#ttls.fill(0);\n this.#starts.fill(0);\n }\n if (this.#sizes) {\n this.#sizes.fill(0);\n }\n this.#head = 0;\n this.#tail = 0;\n this.#free.length = 0;\n this.#calculatedSize = 0;\n this.#size = 0;\n if (this.#hasDisposeAfter && this.#disposed) {\n const dt = this.#disposed;\n let task;\n while ((task = dt?.shift())) {\n this.#disposeAfter?.(...task);\n }\n }\n }\n}\n//# sourceMappingURL=index.js.map","import {LRUCache}from'lru-cache';var B=class extends Error{constructor(e,t,n){super(t),this.name=\"HwError\",this.code=e,n!==void 0&&(this.context=Object.freeze({...n})),Object.setPrototypeOf(this,new.target.prototype),typeof Error.captureStackTrace==\"function\"&&Error.captureStackTrace(this,new.target);}},D=class extends B{constructor(e,t,n){super(e,t,n?.context),this.name=\"HelmParseError\",n?.span!==void 0&&(this.span={...n.span}),Object.setPrototypeOf(this,new.target.prototype);}},qe=class extends B{constructor(e,t){let n=Object.freeze([...e]),o=t??Oi(n);super(\"helm-validation-failed\",o),this.name=\"HelmValidationError\",this.diagnostics=n,Object.setPrototypeOf(this,new.target.prototype);}};function Oi(i){if(i.length===0)return \"HELM validation failed\";let t=i[0],n=i.length>1?` (+${i.length-1} more)`:\"\";return `HELM validation failed: ${t.code} \\u2014 ${t.message}${n}`}var K=class extends B{constructor(e,t,n){super(e,t??`HELM operation not supported: ${e}`,n),this.name=\"HelmNotSupportedError\",Object.setPrototypeOf(this,new.target.prototype);}},Yt=class extends B{constructor(e,t){super(\"monomer-not-found\",`Monomer not found in library: ${e}/${t}`,{polymerType:e,symbol:t}),this.name=\"MonomerNotFoundError\",this.polymerType=e,this.symbol=t,Object.setPrototypeOf(this,new.target.prototype);}};var Ae=class{constructor(e){if(!Number.isInteger(e.max)||e.max<=0)throw new RangeError(`LruCache: max must be a positive integer (got ${e.max})`);let t=e.onEvict;this._cache=t===void 0?new LRUCache({max:e.max}):new LRUCache({max:e.max,dispose:(n,o,r)=>{t(o,n);}});}get(e){return this._cache.get(e)}set(e,t){this._cache.set(e,t);}has(e){return this._cache.has(e)}delete(e){return this._cache.delete(e)}clear(){this._cache.clear();}get size(){return this._cache.size}keys(){return this._cache.keys()}entries(){return this._cache.entries()}};var Me=class{debug(e,t){}info(e,t){}warn(e,t){}error(e,t){}};function Xt(i){return i>=65&&i<=90||i>=97&&i<=122}function Ye(i){return i>=48&&i<=57}function Ni(i){return i===32||i===9||i===10||i===13}var Jt=class{constructor(e){this.src=e,this.len=e.length,this.pos=0,this.tokens=[];}tokenize(){for(;this.pos<this.len;){let e=this.pos,t=this.src.charCodeAt(this.pos);if(Ni(t))throw new D(\"unexpected-whitespace\",`Unexpected whitespace at offset ${e}`,{span:{start:e,end:e+1}});if(t===91){this.scanBracket(e);continue}if(t===34){this.scanQuote(e);continue}if(Xt(t)){this.scanIdentifier(e);continue}if(Ye(t)){this.scanNumber(e);continue}let n=Fi.get(t);if(n!==void 0){this.pos+=1,this.push(n,this.src.charAt(e),e,this.pos);continue}throw new D(\"unexpected-char\",`Unexpected character ${JSON.stringify(this.src.charAt(e))} at offset ${e}`,{span:{start:e,end:e+1}})}return this.push(\"eof\",\"\",this.len,this.len),{tokens:this.tokens,source:this.src}}scanBracket(e){let t=1,n=false,o=false,r=e+1;for(;r<this.len;){let s=this.src.charCodeAt(r);if(n){if(s===92&&r+1<this.len){r+=2;continue}if(s===34){n=false,r+=1;continue}if(s===10||s===13)throw new D(\"unexpected-newline\",`Newline inside bracket at offset ${r}`,{span:{start:r,end:r+1}});r+=1;continue}if(o){if(s===36&&r+1<this.len){let a=this.src.charCodeAt(r+1);if(a===124){o=false,r+=2;continue}if(a===93){o=false,r+=1;continue}}if(s===10||s===13)throw new D(\"unexpected-newline\",`Newline inside bracket at offset ${r}`,{span:{start:r,end:r+1}});r+=1;continue}if(s===10||s===13)throw new D(\"unexpected-newline\",`Newline inside bracket at offset ${r}`,{span:{start:r,end:r+1}});if(s===34){n=true,r+=1;continue}if(s===124&&r+1<this.len&&this.src.charCodeAt(r+1)===36){o=true,r+=2;continue}if(s===91){t+=1,r+=1;continue}if(s===93){if(t-=1,t===0){let a=r+1,l=this.src.slice(e+1,r);this.pos=a,this.push(\"inline-smiles\",l,e,a);return}r+=1;continue}r+=1;}throw new D(\"unterminated-bracket\",`Unterminated '[' starting at offset ${e}`,{span:{start:e,end:this.len}})}scanQuote(e){let t=[],n=e+1;for(;n<this.len;){let o=this.src.charCodeAt(n);if(o===34){let r=n+1;this.pos=r,this.push(\"quote-string\",t.join(\"\"),e,r);return}if(o===92&&n+1<this.len){let r=this.src.charCodeAt(n+1);r===34?t.push('\"'):r===92?t.push(\"\\\\\"):r===110?t.push(`\n`):r===114?t.push(\"\\r\"):r===116?t.push(\"\t\"):(t.push(\"\\\\\"),t.push(this.src.charAt(n+1))),n+=2;continue}if(o===10||o===13)throw new D(\"unexpected-newline\",`Newline inside quote at offset ${n}`,{span:{start:n,end:n+1}});t.push(this.src.charAt(n)),n+=1;}throw new D(\"unterminated-quote\",`Unterminated '\"' starting at offset ${e}`,{span:{start:e,end:this.len}})}scanIdentifier(e){let t=e+1;for(;t<this.len;){let o=this.src.charCodeAt(t);if(Xt(o)||Ye(o)||o===95){t+=1;continue}if(o===45&&t+1<this.len&&Xt(this.src.charCodeAt(t+1))){t+=2;continue}break}let n=this.src.slice(e,t);this.pos=t,this.push(\"identifier\",n,e,t);}scanNumber(e){let t=e+1;for(;t<this.len&&Ye(this.src.charCodeAt(t));)t+=1;if(t+1<this.len&&this.src.charCodeAt(t)===46&&Ye(this.src.charCodeAt(t+1))){for(t+=2;t<this.len&&Ye(this.src.charCodeAt(t));)t+=1;let o=this.src.slice(e,t);this.pos=t,this.push(\"decimal\",o,e,t);return}let n=this.src.slice(e,t);this.pos=t,this.push(\"integer\",n,e,t);}push(e,t,n,o){this.tokens.push({kind:e,value:t,span:{start:n,end:o}});}},Fi=new Map([[123,\"lbrace\"],[125,\"rbrace\"],[40,\"lparen\"],[41,\"rparen\"],[93,\"rbracket\"],[124,\"pipe\"],[46,\"dot\"],[44,\"comma\"],[43,\"plus\"],[58,\"colon\"],[45,\"dash\"],[36,\"dollar\"],[62,\"gt\"],[63,\"question\"],[42,\"asterisk\"],[95,\"underscore\"],[39,\"apos\"]]);function zn(i){let e=new Jt(i).tokenize();return Gi(e),e}function Gi(i){let e=null;for(let t of i.tokens)if(t.kind===\"apos\")e=e===null?t.span:null;else if(t.kind===\"eof\"&&e!==null)throw new D(\"unterminated-apostrophe\",`Unterminated apostrophe block starting at offset ${e.start}`,{span:{start:e.start,end:i.source.length}})}var Vi={perPolymer:new Map,version:\"\"};function ce(){return {atoms:[],bonds:[],chains:[],groups:[],annotations:Vi}}function Y(i,e){for(let t of i.atoms)if(t.id===e)return t}function yt(i,e){for(let t of i.bonds)if(t.id===e)return t}function re(i,e){if(e===void 0)return i.bio.positionInChain;let t=0;for(let n=0;n<e.backboneAtoms.length;n++){let o=e.backboneAtoms[n];if(o!==void 0&&(t+=1,o.id===i.id||o.branchAtom!==void 0&&(t+=1,o.branchAtom.id===i.id)))return t}return 0}var b={AA:\"HELM_AA\",SUGAR:\"HELM_SUGAR\",BASE:\"HELM_BASE\",LINKER:\"HELM_LINKER\",CHEM:\"HELM_CHEM\",BLOB:\"HELM_BLOB\",NUCLEOTIDE:\"HELM_NUCLEOTIDE\"},v={PEPTIDE:\"PEPTIDE\",RNA:\"RNA\",CHEM:\"CHEM\",BLOB:\"BLOB\",G:\"G\"},Ui={BACKBONE:\"Backbone\",BRANCH:\"Branch\",TERMINAL:\"Terminal\",UNDEFINED:\"Undefined\"};var ye=class{constructor(){this._counter=0;}next(){return this._counter+=1,this._counter}reset(){this._counter=0;}get current(){return this._counter}};function Te(i){let e=new Map,t=0;for(let n of i.chains)for(let o of n.backboneAtoms)t+=1,e.set(o.id,t),o.branchAtom!==void 0&&(t+=1,e.set(o.branchAtom.id,t));return e}function Se(i){let e=i.trim();if(/^\\[[a-zA-Z_][a-zA-Z0-9_]*\\]$/.test(e))return false;for(let t=0;t<e.length;t++){let n=e.charCodeAt(t);if(n===40||n===91||n===61||n===47||n===92||n===42)return true}return false}function zi(i){let e=new Map,t=/\\[R(\\d{1,2})\\]/g,n;for(;(n=t.exec(i))!==null;){let o=parseInt(n[1],10);o>=1&&o<=10&&!e.has(o)&&e.set(o,n.index);}return e}function Ki(i){let e=new Map,n=/\\s*\\|\\$([^$]*)\\$\\|/.exec(i);if(n===null)return e;let o=n[1].split(\";\"),r=n.index+n[0].indexOf(\"$\")+1,s=0;for(let a of o){let l=/^_R(\\d{1,2})$/.exec(a);if(l!==null){let d=parseInt(l[1],10);d>=1&&d<=10&&!e.has(d)&&e.set(d,r+s);}s+=a.length+1;}return e}function Wi(i){let e=new Map,t=/\\[\\*:(\\d{1,2})\\]/g,n;for(;(n=t.exec(i))!==null;){let o=parseInt(n[1],10);o>=1&&o<=10&&!e.has(o)&&e.set(o,n.index);}return e}function Kn(i){let e=i.trim();if(e.length===0)return {ok:false,reason:\"empty-smiles\"};let t=zi(e);if(t.size>0)return {ok:true,canonicalSmiles:e,info:{rs:t.size,rgroupPositions:t,flavor:\"jsdraw\"}};let n=Ki(e);if(n.size>0)return {ok:true,canonicalSmiles:e,info:{rs:n.size,rgroupPositions:n,flavor:\"chemaxon\"}};let o=Wi(e);return o.size>0?{ok:true,canonicalSmiles:e,info:{rs:o.size,rgroupPositions:o,flavor:\"opensmiles\"}}:{ok:false,reason:\"no-rgroups-found\"}}var X=class{constructor(){this._listeners=new Set;this._completed=false;}subscribe(e){return this._completed?()=>{}:(this._listeners.add(e),()=>{this._listeners.delete(e);})}next(e){if(!this._completed)for(let t of [...this._listeners])t(e);}complete(){this._completed=true,this._listeners.clear();}get observerCount(){return this._listeners.size}};function C(i){return {line:\"#202020\",text:\"#000000\",background:i}}function ji(i){return {line:\"#e0e0e0\",text:\"#ffffff\",background:en(i,.25)}}function Ee(i){let e=/^#([0-9a-fA-F]{6})$/.exec(i),t=/^#([0-9a-fA-F]{3})$/.exec(i);if(e!==null){let n=e[1];return [parseInt(n.slice(0,2),16),parseInt(n.slice(2,4),16),parseInt(n.slice(4,6),16)]}if(t!==null){let n=t[1];return [parseInt(n[0]+n[0],16),parseInt(n[1]+n[1],16),parseInt(n[2]+n[2],16)]}return null}function Zt(i){return i.toString(16).padStart(2,\"0\")}function tn(i,e,t){return `#${Zt(i)}${Zt(e)}${Zt(t)}`}function nn(i,e,t){let n=i/255,o=e/255,r=t/255,s=Math.max(n,o,r),a=Math.min(n,o,r),l=(s+a)/2;if(s===a)return [0,0,l];let d=s-a,u=l>.5?d/(2-s-a):d/(s+a),c;return s===n?c=((o-r)/d+(o<r?6:0))*60:s===o?c=((r-n)/d+2)*60:c=((n-o)/d+4)*60,[c,u,l]}function Qt(i,e,t){let n=t;return n<0&&(n+=1),n>1&&(n-=1),n<1/6?i+(e-i)*6*n:n<1/2?e:n<2/3?i+(e-i)*(2/3-n)*6:i}function jn(i,e,t){if(e===0){let s=Math.round(t*255);return [s,s,s]}let n=t<.5?t*(1+e):t+e-t*e,o=2*t-n,r=i/360;return [Math.round(Qt(o,n,r+1/3)*255),Math.round(Qt(o,n,r)*255),Math.round(Qt(o,n,r-1/3)*255)]}function vt(i,e=.3,t=.1){let n=Ee(i);if(n===null)return i;let[o,r,s]=nn(n[0],n[1],n[2]),a=Math.max(0,Math.min(1,r*(1-e))),l=Math.max(0,Math.min(.95,s+t*(1-s))),[d,u,c]=jn(o,a,l);return tn(d,u,c)}function Wn(i){let e=Ee(i);if(e===null)return 0;let t=n=>{let o=n/255;return o<=.03928?o/12.92:Math.pow((o+.055)/1.055,2.4)};return .2126*t(e[0])+.7152*t(e[1])+.0722*t(e[2])}function qn(i,e){let t=Wn(i),n=Wn(e),o=Math.max(t,n),r=Math.min(t,n);return (o+.05)/(r+.05)}function Yn(i){let e=Ee(i);if(e===null)return {h:0,s:0,l:0};let[t,n,o]=nn(e[0],e[1],e[2]);return {h:t,s:n,l:o}}function qi(i){let e=(i.h%360+360)%360,t=Math.max(0,Math.min(1,i.s)),n=Math.max(0,Math.min(1,i.l)),[o,r,s]=jn(e,t,n);return tn(o,r,s)}function gt(i){let e=Ee(i);if(e===null)return \"#1f2937\";let[t,n,o]=nn(e[0],e[1],e[2]);if(o>.85||n<.15&&o>.7)return \"#1f2937\";let r=Math.max(.08,o-.3),s=Math.min(1,n+.1);return qi({h:t,s,l:r})}function Yi(i){let e=Ee(i);return e===null?null:{r:e[0]/255,g:e[1]/255,b:e[2]/255}}function _t(i){let e=Yi(i);if(e===null)return \"#1f2937\";let t=s=>s<=.03928?s/12.92:Math.pow((s+.055)/1.055,2.4),n=.2126*t(e.r)+.7152*t(e.g)+.0722*t(e.b),o=(n+.05)/(0+.05);return (1+.05)/(n+.05)>o?\"#ffffff\":\"#1f2937\"}function en(i,e){let t=Ee(i);if(t===null)return i;let n=1-e,o=Math.max(0,Math.min(255,Math.round(t[0]*n))),r=Math.max(0,Math.min(255,Math.round(t[1]*n))),s=Math.max(0,Math.min(255,Math.round(t[2]*n)));return tn(o,r,s)}var Xn={A:C(\"#A0A0FF\"),G:C(\"#FF7070\"),T:C(\"#A0FFA0\"),C:C(\"#FF8C4B\"),U:C(\"#FF8080\")},Jn={R:C(\"#7a85c1\"),r:C(\"#7a85c1\")},Zn={P:C(\"#9aa5e1\"),p:C(\"#9aa5e1\")},Qn={A:C(\"#C8C8C8\"),R:C(\"#145AFF\"),N:C(\"#00DCDC\"),D:C(\"#E60A0A\"),C:C(\"#E6E600\"),E:C(\"#00DCDC\"),Q:C(\"#E60A0A\"),G:C(\"#EBEBEB\"),H:C(\"#8282D2\"),I:C(\"#0F820F\"),L:C(\"#0F820F\"),K:C(\"#145AFF\"),M:C(\"#E6E600\"),F:C(\"#3232AA\"),P:C(\"#DC9682\"),S:C(\"#FA9600\"),T:C(\"#FA9600\"),W:C(\"#B45AB4\"),Y:C(\"#3232AA\"),V:C(\"#0F820F\")},eo={R:C(\"#eeeeee\")},to={B:C(\"#999999\"),G:C(\"#e2e2e2\")},no={P:C(\"#9aa5e1\")},_e={name:\"light\",fallback:{line:\"#202020\",text:\"#000000\",background:\"#eeeeee\"},errorTriple:{line:\"#cc0000\",text:\"#000000\",background:\"#FFFF00\"},palette:{[b.BASE]:Xn,[b.SUGAR]:Jn,[b.LINKER]:Zn,[b.AA]:Qn,[b.CHEM]:eo,[b.BLOB]:to,[b.NUCLEOTIDE]:no}};function ge(i){let e={};for(let[t,n]of Object.entries(i))e[t]=ji(n.background);return e}var Ce={name:\"dark\",fallback:{line:\"#e0e0e0\",text:\"#ffffff\",background:en(\"#eeeeee\",.5)},errorTriple:{line:\"#ff5050\",text:\"#ffffff\",background:en(\"#FFFF00\",.4)},palette:{[b.BASE]:ge(Xn),[b.SUGAR]:ge(Jn),[b.LINKER]:ge(Zn),[b.AA]:ge(Qn),[b.CHEM]:ge(eo),[b.BLOB]:ge(to),[b.NUCLEOTIDE]:ge(no)}};function P(i,e,t=_e){if(i===null)return {...t.errorTriple};let n=i.meta?.colors;if(n!==void 0){let r=t.name===\"light\"?n.light:t.name===\"dark\"?n.dark:void 0;if(r!==void 0)return {...r,line:gt(r.background)};if(n.default!==void 0)return {...n.default,line:gt(n.default.background)}}let o=i.naturalAnalog;if(o!==void 0&&o!==\"\"){let r=t.palette[e];if(r!==void 0){let s=r[o];if(s!==void 0)return {...s,line:gt(s.background),text:_t(s.background)}}}return {...t.fallback,line:gt(t.fallback.background),text:_t(t.fallback.background)}}function Xe(i){for(let e in i)if(Object.prototype.hasOwnProperty.call(i,e)&&e.toLowerCase()===\"capgroupsmiles\"){let t=i[e];if(typeof t==\"string\")return t}}function oo(i){let e=false,t=i.rgroups.map(n=>{let o=Xe(n);return o!==void 0&&n.capGroupSMILES!==o?(e=true,{...n,capGroupSMILES:o}):n});return e?{...i,rgroups:t}:i}var Xi=new Set([\"PEPTIDE\",\"RNA\",\"CHEM\",\"BLOB\"]),Ji=new Set([\"Backbone\",\"Branch\",\"Terminal\",\"Undefined\"]),Zi=/^R[1-9][0-9]*$/;function wt(i){let e=[];if(!Array.isArray(i))return {ok:false,errors:[{path:\"$\",message:`Expected a JSON array of monomers, got ${O(i)}`}]};for(let t=0;t<i.length;t++)Qi(i[t],`$.${t}`,e);return e.length>0?{ok:false,errors:e}:{ok:true,data:i}}function Qi(i,e,t){if(!Ze(i)){t.push({path:e,message:`Expected an object, got ${O(i)}`});return}on(i,\"symbol\",e,t,{minLength:1}),on(i,\"molfile\",e,t);let n=i.polymerType;n===void 0?t.push({path:`${e}.polymerType`,message:\"Required property missing\"}):typeof n!=\"string\"?t.push({path:`${e}.polymerType`,message:`Expected string, got ${O(n)}`}):Xi.has(n)||t.push({path:`${e}.polymerType`,message:`Expected one of PEPTIDE|RNA|CHEM|BLOB, got '${n}'`});let o=i.monomerType;o===void 0?t.push({path:`${e}.monomerType`,message:\"Required property missing\"}):typeof o!=\"string\"?t.push({path:`${e}.monomerType`,message:`Expected string, got ${O(o)}`}):Ji.has(o)||t.push({path:`${e}.monomerType`,message:`Expected one of Backbone|Branch|Terminal|Undefined, got '${o}'`});let r=i.rgroups;if(r===void 0)t.push({path:`${e}.rgroups`,message:\"Required property missing\"});else if(!Array.isArray(r))t.push({path:`${e}.rgroups`,message:`Expected array, got ${O(r)}`});else {let s=new Set;for(let a=0;a<r.length;a++)er(r[a],`${e}.rgroups[${a}]`,t,s);}if(Je(i,\"name\",e,t),Je(i,\"smiles\",e,t),Je(i,\"naturalAnalog\",e,t),Je(i,\"author\",e,t),\"createDate\"in i&&i.createDate!==void 0&&i.createDate!==null&&typeof i.createDate!=\"string\"&&t.push({path:`${e}.createDate`,message:`Expected string or null, got ${O(i.createDate)}`}),\"id\"in i&&i.id!==void 0){let s=i.id;typeof s==\"string\"||typeof s==\"number\"&&Number.isInteger(s)||t.push({path:`${e}.id`,message:`Expected integer or string, got ${O(s)}`});}if(\"meta\"in i&&i.meta!==void 0){let s=i.meta;Ze(s)?s.colors!==void 0&&tr(s.colors,`${e}.meta.colors`,t):t.push({path:`${e}.meta`,message:`Expected object, got ${O(s)}`});}}function er(i,e,t,n){if(!Ze(i)){t.push({path:e,message:`Expected an object, got ${O(i)}`});return}let o=i.label;if(o===void 0?t.push({path:`${e}.label`,message:\"Required property missing\"}):typeof o!=\"string\"?t.push({path:`${e}.label`,message:`Expected string, got ${O(o)}`}):Zi.test(o)?n.has(o)?t.push({path:`${e}.label`,message:`Duplicate R-group label '${o}'`}):n.add(o):t.push({path:`${e}.label`,message:`Expected pattern /^R[1-9][0-9]*$/, got '${o}'`}),on(i,\"capGroupName\",e,t),Xe(i)===void 0){let r=Object.keys(i).some(s=>s.toLowerCase()===\"capgroupsmiles\");t.push({path:`${e}.capGroupSMILES`,message:r?\"Expected string\":\"Required property missing\"});}Je(i,\"alternateId\",e,t),\"id\"in i&&i.id!==void 0&&(typeof i.id!=\"number\"||!Number.isInteger(i.id))&&t.push({path:`${e}.id`,message:`Expected integer, got ${O(i.id)}`});}function tr(i,e,t){if(!Ze(i)){t.push({path:e,message:`Expected object, got ${O(i)}`});return}for(let n of [\"default\",\"light\",\"dark\"])i[n]!==void 0&&nr(i[n],`${e}.${n}`,t);}function nr(i,e,t){if(!Ze(i)){t.push({path:e,message:`Expected object, got ${O(i)}`});return}for(let n of [\"line\",\"text\",\"background\"])i[n]===void 0?t.push({path:`${e}.${n}`,message:\"Required property missing\"}):typeof i[n]!=\"string\"&&t.push({path:`${e}.${n}`,message:`Expected string, got ${O(i[n])}`});}function on(i,e,t,n,o){let r=i[e],s=`${t}.${e}`;if(r===void 0){n.push({path:s,message:\"Required property missing\"});return}if(typeof r!=\"string\"){n.push({path:s,message:`Expected string, got ${O(r)}`});return}o?.minLength!==void 0&&r.length<o.minLength&&n.push({path:s,message:`Expected string of length >= ${o.minLength}, got ${r.length}`});}function Je(i,e,t,n){let o=i[e];o!==void 0&&typeof o!=\"string\"&&n.push({path:`${t}.${e}`,message:`Expected string, got ${O(o)}`});}function Ze(i){return typeof i==\"object\"&&i!==null&&!Array.isArray(i)}function O(i){return i===null?\"null\":Array.isArray(i)?\"array\":typeof i}var or=/^R([1-9][0-9]*)$/;function Z(i){switch(i.polymerType){case v.PEPTIDE:return b.AA;case v.CHEM:return b.CHEM;case v.BLOB:return b.BLOB;case v.RNA:{if(i.monomerType===\"Branch\")return b.BASE;if(i.monomerType===\"Backbone\"){let e=i.naturalAnalog;return e===\"P\"||e===\"p\"?b.LINKER:b.SUGAR}return null}default:return null}}function ir(i){let e=new Map;for(let t of i.rgroups){let n=or.exec(t.label);n!==null&&e.set(parseInt(n[1],10),t);}return Object.assign({},i,{rs:i.rgroups.length,rgroupMap:e})}var rn=class i{constructor(e){this._version=0;this._byPolymerSymbol=new Map;this._byBiotypeSymbol=new Map;this._byNaturalAnalog=new Map;this._resolved=new WeakMap;this._inlineSmilesCounter=0;this.source=e,this.onChanged=new X;}static empty(e=\"empty\"){return new i(e)}static fromJSON(e,t=\"inline\",n){let o=new i(t);for(let r=0;r<e.length;r++){let s=e[r],a=wt([s]);if(!a.ok){n!==void 0?n.skipped.push({index:r,errors:a.errors}):console.warn(`MonomerLib.fromJSON: skipping invalid entry at index ${r}`,a.errors);continue}o._addNoFire(s);}return o}static fromText(e,t=\"inline\"){let n;try{n=JSON.parse(e);}catch(r){let s=r instanceof Error?r.message:String(r);throw new B(\"invalid-monomer-lib\",`MonomerLib.fromText: JSON.parse failed \\u2014 ${s}`)}let o=wt(n);if(!o.ok)throw new B(\"invalid-monomer-lib\",`MonomerLib.fromText: schema validation failed (${o.errors.length} errors)`,{errors:o.errors});return i.fromJSON(o.data,t)}static async fromUrl(e,t){let n=t??globalThis.fetch;if(n===void 0)throw new B(\"fetch-unavailable\",\"MonomerLib.fromUrl: no fetch implementation available \\u2014 pass `fetchImpl` or run in a fetch-capable environment.\",{url:e});let o=await n(e);if(!o.ok)throw new B(\"monomer-lib-fetch-failed\",`MonomerLib.fromUrl: HTTP ${o.status} fetching ${e}`,{url:e,status:o.status});let r=await o.text();return i.fromText(r,e)}static merge(...e){let t=e.map(o=>o.source).join(\"+\")||\"empty\",n=new i(t);for(let o of e)for(let r of o.getPolymerTypes())for(let s of o.getMonomerSymbolsByType(r)){let a=o.getMonomer(r,s);a!==null&&n._addNoFire(a);}return n}get isEmpty(){for(let e of this._byPolymerSymbol.values())if(e.size>0)return false;return true}get version(){return this._version}getMonomer(e,t){let n=this._byPolymerSymbol.get(e);return n===void 0?null:n.get(t)??null}getMonomerSet(e){let t=this._byBiotypeSymbol.get(e);return t===void 0?new Map:new Map(t)}getMonomerSymbolsByType(e){let t=this._byPolymerSymbol.get(e);return t===void 0?[]:Array.from(t.keys())}getByNaturalAnalog(e,t){let n=this._byNaturalAnalog.get(e);if(n===void 0)return [];let o=n.get(t);return o===void 0?[]:o.slice()}getPolymerTypes(){let e=[];for(let[t,n]of this._byPolymerSymbol.entries())n.size>0&&e.push(t);return e}getColors(e,t){let n=rr(t),o=e===null?b.AA:Z(e)??b.AA;return P(e,o,n)}getResolved(e){return this._resolved.get(e)}addMonomer(e){let t=wt([e]);if(!t.ok)throw new B(\"invalid-monomer\",\"MonomerLib.addMonomer: schema validation failed\",{errors:t.errors});let n=this._addNoFire(e);this._bumpVersion(),this.onChanged.next({type:n?\"update\":\"add\",affectedSymbols:[e.symbol]});}addMonomers(e){let t=[],n=false;for(let o of e)this._addNoFire(o)&&(n=true),t.push(o.symbol);t.length!==0&&(this._bumpVersion(),this.onChanged.next({type:n?\"update\":\"add\",affectedSymbols:t}));}removeMonomer(e,t){let n=this._byPolymerSymbol.get(e);if(n===void 0)return false;let o=n.get(t);if(o===void 0)return false;n.delete(t);let r=Z(o);if(r!==null){let a=this._byBiotypeSymbol.get(r);a!==void 0&&a.delete(t);}let s=o.naturalAnalog;if(s!==void 0&&s!==\"\"){let l=this._byNaturalAnalog.get(e)?.get(s);if(l!==void 0){let d=l.indexOf(o);d>=0&&l.splice(d,1);}}return this._bumpVersion(),this.onChanged.next({type:\"remove\",affectedSymbols:[t]}),true}setMonomerColors(e,t,n){let o=this.getMonomer(e,t);if(o===null)throw new B(\"monomer-not-found\",`MonomerLib.setMonomerColors: ${e}/${t} not found`,{polymerType:e,symbol:t});let r=o.meta??{},s=r.colors??{},a=Object.assign({},r,{colors:Object.assign({},s,n)}),l=Object.assign({},o,{meta:a});this._addNoFire(l),this._bumpVersion(),this.onChanged.next({type:\"update\",affectedSymbols:[t]});}merge(e){for(let t of e.getPolymerTypes())for(let n of e.getMonomerSymbolsByType(t)){let o=e.getMonomer(t,n);o!==null&&this._addNoFire(o);}this._bumpVersion(),this.onChanged.next({type:\"reload\"});}registerInlineSmilesMonomer(e,t,n){let o=Kn(t);if(!o.ok)throw new B(\"inline-smiles-without-r-groups\",`MonomerLib.registerInlineSmilesMonomer: ${o.reason}`,{smiles:t});this._inlineSmilesCounter+=1;let r=`#${this._inlineSmilesCounter}`,s=[],a=Array.from(o.info.rgroupPositions.keys()).sort((u,c)=>u-c);for(let u of a)s.push({label:`R${u}`,capGroupName:\"H\",capGroupSMILES:\"\"});let l=n?.symbolHint!==void 0?{smilesHint:n.symbolHint}:void 0,d={symbol:r,polymerType:e,monomerType:\"Undefined\",molfile:\"\",smiles:o.canonicalSmiles,rgroups:s,...l!==void 0?{meta:l}:{}};return this._addNoFire(d),this._bumpVersion(),this.onChanged.next({type:\"add\",affectedSymbols:[r]}),d}toJSON(){let e=[];for(let t of this._byPolymerSymbol.values())for(let n of t.values())e.push(n);return e}_addNoFire(e){e=oo(e);let t=e.polymerType,n=this._byPolymerSymbol.get(t);n===void 0&&(n=new Map,this._byPolymerSymbol.set(t,n));let o=n.get(e.symbol);if(n.set(e.symbol,e),o!==void 0){let a=Z(o);if(a!==null){let d=this._byBiotypeSymbol.get(a);d!==void 0&&d.delete(o.symbol);}let l=o.naturalAnalog;if(l!==void 0&&l!==\"\"){let d=this._byNaturalAnalog.get(t)?.get(l);if(d!==void 0){let u=d.indexOf(o);u>=0&&d.splice(u,1);}}this._resolved.delete(o);}let r=Z(e);if(r!==null){let a=this._byBiotypeSymbol.get(r);a===void 0&&(a=new Map,this._byBiotypeSymbol.set(r,a)),a.set(e.symbol,e);}let s=e.naturalAnalog;if(s!==void 0&&s!==\"\"){let a=this._byNaturalAnalog.get(t);a===void 0&&(a=new Map,this._byNaturalAnalog.set(t,a));let l=a.get(s);l===void 0&&(l=[],a.set(s,l)),l.push(e);}return this._resolved.set(e,ir(e)),o!==void 0}_bumpVersion(){this._version+=1;}};function rr(i){return i===\"dark\"?Ce:_e}function ve(i,e,t){return new sn(i,e,t??{}).run()}var sr=new Set([\"?\",\"*\",\"_\",\"X\",\"N\"]),ar=/^R([1-9][0-9]*)$/;function lr(i){return typeof i.registerInlineSmilesMonomer==\"function\"}var sn=class{constructor(e,t,n){this.diagnostics=[];this.oldToNew=new Map;this.placeholderCache=new Map;this.mol=e,this.lib=t,this.options=n;}run(){let e=new Map;for(let a of this.mol.chains)e.set(a.id,a.polymerType);for(let a of this.mol.atoms){let l=e.get(a.bio.chainId)??null,d=this.resolveAtom(a,l);this.oldToNew.set(a.id,d);}for(let a of this.mol.atoms){let l=this.oldToNew.get(a.id);if(l===void 0||a.branchAtom===void 0)continue;let d=this.oldToNew.get(a.branchAtom.id);d!==void 0&&(l.branchAtom=d);}let t=[];for(let a of this.mol.bonds){let l=this.oldToNew.get(a.a1.id),d=this.oldToNew.get(a.a2.id);l===void 0||d===void 0||t.push({...a,a1:l,a2:d});}let n=new Map;for(let a of t)n.set(a.id,a);let o=[];for(let a of this.mol.chains){let l=[];for(let u of a.backboneAtoms){let c=this.oldToNew.get(u.id);c!==void 0&&l.push(c);}let d=[];for(let u of a.bonds){let c=n.get(u.id);c!==void 0&&d.push(c);}o.push({id:a.id,polymerType:a.polymerType,backboneAtoms:l,bonds:d,...a.annotation!==void 0?{annotation:a.annotation}:{},...a.strandType!==void 0?{strandType:a.strandType}:{}});}return {mol:{atoms:this.mol.atoms.map(a=>this.oldToNew.get(a.id)),bonds:t,chains:o,groups:this.mol.groups,annotations:this.mol.annotations},diagnostics:this.diagnostics}}resolveAtom(e,t){let n=null,o=e.biotype;if(t!==null){let r=this.lib.getMonomer(t,e.symbol);if(r!==null)n=this.toResolved(r),o=Z(r)??e.biotype;else if(this.isAmbiguitySymbol(e))n=this.synthesizeAmbiguity(t,e),this.emit(\"info\",\"ambiguous-monomer\",`Ambiguous monomer '${e.symbol}' on chain '${e.bio.chainId}'`,e);else if(Se(e.symbol))n=this.registerInlineSmilesFallback(t,e);else if(this.options.legacyCaseFallback===true&&t===\"RNA\"){let s=this.findCaseInsensitiveMatch(t,e.symbol);s!==null&&(n=this.toResolved(s),o=Z(s)??e.biotype,this.emit(\"info\",\"case-mismatch\",`Symbol '${e.symbol}' matched library entry '${s.symbol}' only after case fold`,e));}n===null&&(n=this.synthesizeMissing(t,e),this.emit(\"warning\",\"unresolved-monomer\",`Monomer '${e.symbol}' not found in library for ${t}`,e));}return {...e,monomer:n,biotype:o}}toResolved(e){let t=this.lib.getResolved?.(e);if(t!==void 0)return t;let n=new Map;for(let o of e.rgroups){let r=ar.exec(o.label);r!==null&&n.set(parseInt(r[1],10),o);}return Object.assign({},e,{rs:e.rgroups.length,rgroupMap:n})}isAmbiguitySymbol(e){return !!(sr.has(e.symbol)||e.bio.ambiguity!==void 0)}synthesizeAmbiguity(e,t){let n=`ambig:${e}:${t.symbol}`,o=this.placeholderCache.get(n);return o===void 0&&(o={symbol:t.symbol,polymerType:e,monomerType:\"Undefined\",molfile:\"\",rgroups:[{label:\"R1\",capGroupName:\"H\",capGroupSMILES:\"\"},{label:\"R2\",capGroupName:\"H\",capGroupSMILES:\"\"}],meta:{ambiguous:true}},this.placeholderCache.set(n,o)),this.toResolved(o)}synthesizeMissing(e,t){let n=`missing:${e}:${t.symbol}`,o=this.placeholderCache.get(n);return o===void 0&&(o={symbol:t.symbol,polymerType:e,monomerType:\"Undefined\",molfile:\"\",rgroups:[{label:\"R1\",capGroupName:\"H\",capGroupSMILES:\"\"},{label:\"R2\",capGroupName:\"H\",capGroupSMILES:\"\"}],meta:{missing:true}},this.placeholderCache.set(n,o)),this.toResolved(o)}registerInlineSmilesFallback(e,t){if(lr(this.lib))try{let n=this.lib.registerInlineSmilesMonomer(e,t.symbol);return this.toResolved(n)}catch{this.emit(\"warning\",\"inline-smiles-without-r-groups\",`Inline SMILES '${dr(t.symbol,40)}' has no detectable R-groups`,t);}else this.emit(\"warning\",\"inline-smiles-without-r-groups\",\"Inline SMILES seen but lib has no registerInlineSmilesMonomer\",t);return this.synthesizeMissing(e,t)}findCaseInsensitiveMatch(e,t){let n=t.toLowerCase();for(let o of this.lib.getMonomerSymbolsByType(e))if(o.toLowerCase()===n&&o!==t){let r=this.lib.getMonomer(e,o);if(r!==null)return r}return null}emit(e,t,n,o){let r={chainId:o.bio.chainId,atomId:o.id,symbol:o.symbol};this.diagnostics.push({severity:e,code:t,message:n,context:r});}};function dr(i,e){return i.length<=e?i:i.slice(0,e-1)+\"\\u2026\"}function Qe(i,e,t){let n=t?.mode??\"lenient\",o;try{o=zn(i);}catch(r){if(r instanceof D){if(n===\"strict\")throw r;let s={severity:\"error\",code:r.code,message:r.message,...r.span!==void 0?{span:{start:r.span.start,end:r.span.end}}:{}};return {mol:ce(),diagnostics:[s]}}throw r}return ro(o,e,t)}function ro(i,e,t){let o=new ln(i,e,t?.mode??\"lenient\").parseDocument();if(e===null||t?.resolveMonomers===false)return o;let r=ve(o.mol,e,{mode:t?.mode??\"lenient\",...t?.legacyCaseFallback===true?{legacyCaseFallback:true}:{}});return {mol:r.mol,diagnostics:[...o.diagnostics,...r.diagnostics]}}var an=class{constructor(e){this.tokens=e.tokens,this.len=e.tokens.length,this.eof=e.tokens[e.tokens.length-1],this.idx=0;}peek(e=0){let t=this.idx+e;return t>=this.len?this.eof:this.tokens[t]}advance(){let e=this.idx<this.len?this.tokens[this.idx]:this.eof;return e.kind!==\"eof\"&&(this.idx+=1),e}optional(e){let t=this.idx<this.len?this.tokens[this.idx]:this.eof;return t.kind===e?(t.kind!==\"eof\"&&(this.idx+=1),t):null}at(e){return (this.idx<this.len?this.tokens[this.idx]:this.eof).kind===e}at2(e,t){let o=(this.idx<this.len?this.tokens[this.idx]:this.eof).kind;return o===e||o===t}at3(e,t,n){let r=(this.idx<this.len?this.tokens[this.idx]:this.eof).kind;return r===e||r===t||r===n}currentSpan(){return (this.idx<this.len?this.tokens[this.idx]:this.eof).span}position(){return this.idx}setPosition(e){this.idx=e;}isAtEnd(){return (this.idx<this.len?this.tokens[this.idx]:this.eof).kind===\"eof\"}},cr=/^(PEPTIDE|RNA|DNA|CHEM|BLOB|G)([0-9]+)$/;function io(i){let e=cr.exec(i);if(e===null)return null;let t=e[1],n=parseInt(e[2],10);switch(t){case \"PEPTIDE\":return {rawTypeName:\"PEPTIDE\",polymerType:v.PEPTIDE,number:n,isDnaShim:false,isGroup:false};case \"RNA\":return {rawTypeName:\"RNA\",polymerType:v.RNA,number:n,isDnaShim:false,isGroup:false};case \"DNA\":return {rawTypeName:\"DNA\",polymerType:v.RNA,number:n,isDnaShim:true,isGroup:false};case \"CHEM\":return {rawTypeName:\"CHEM\",polymerType:v.CHEM,number:n,isDnaShim:false,isGroup:false};case \"BLOB\":return {rawTypeName:\"BLOB\",polymerType:v.BLOB,number:n,isDnaShim:false,isGroup:false};case \"G\":return {rawTypeName:\"G\",polymerType:v.PEPTIDE,number:n,isDnaShim:false,isGroup:true};default:return null}}var ln=class{constructor(e,t,n){this.diagnostics=[];this.chains=[];this.chainById=new Map;this.pendingBonds=[];this.groups=[];this.atomIds=new ye;this.bondIds=new ye;this.cursor=new an(e),this.source=e.source,this.lib=t,this.mode=n,this.annotations={perPolymer:new Map,version:\"\"};}parseDocument(){if(this.cursor.isAtEnd())return this.emit(\"warning\",\"empty-helm\",\"Empty HELM string\"),{mol:ce(),diagnostics:this.diagnostics};if(this.parseSimplePolymers(),this.expectDollarSeparator(1),this.parseConnections(),this.expectDollarSeparator(2),this.parseGroupsSection(),this.expectDollarSeparator(3),this.parseAnnotationsSection(),this.cursor.at(\"dollar\")&&(this.cursor.advance(),this.parseVersionTrailer()),!this.cursor.isAtEnd())for(this.emit(\"warning\",\"extra-section-separator\",\"Unexpected trailing tokens after HELM document\",this.cursor.currentSpan());!this.cursor.isAtEnd();)this.cursor.advance();return {mol:this.finalize(),diagnostics:this.diagnostics}}expectDollarSeparator(e){if(this.cursor.at(\"dollar\")){this.cursor.advance();return}this.emit(\"error\",\"missing-section-separator\",`Expected '$' separator before section ${e+1}`,this.cursor.currentSpan());}parseSimplePolymers(){if(!(this.cursor.at(\"dollar\")||this.cursor.isAtEnd()))for(this.parsePolymer();this.cursor.at(\"pipe\");){if(this.cursor.advance(),this.cursor.at(\"dollar\")||this.cursor.isAtEnd()){this.emit(\"warning\",\"empty-polymer-body\",\"Empty polymer after '|'\",this.cursor.currentSpan());return}this.parsePolymer();}}parsePolymer(){let e=this.cursor.currentSpan(),t=this.cursor.optional(\"identifier\");if(t===null){this.emit(\"error\",\"unexpected-token\",`Expected polymer id, got '${this.cursor.peek().value}'`,this.cursor.currentSpan()),this.skipUntil([\"pipe\",\"dollar\",\"eof\"]);return}let n=io(t.value);if(n===null){this.emit(\"error\",\"unknown-polymer-type\",`Unknown polymer type '${t.value}'`,t.span),this.skipUntil([\"pipe\",\"dollar\",\"eof\"]);return}if(this.chainById.has(t.value)&&this.emit(\"warning\",\"duplicate-polymer-id\",`Duplicate polymer id '${t.value}'`,t.span),this.cursor.optional(\"lbrace\")===null){this.emit(\"error\",\"unexpected-token\",`Expected '{' after polymer id '${t.value}'`,this.cursor.currentSpan());return}let o={id:t.value,polymerType:n.polymerType,rawTypeName:n.rawTypeName,rawNumber:n.number,backboneAtoms:[],allAtoms:[],bonds:[],span:{start:e.start,end:e.end}};if(this.chains.push(o),this.chainById.set(o.id,o),this.cursor.at(\"rbrace\"))this.emit(\"warning\",\"empty-polymer-body\",`Empty body for polymer '${o.id}'`,this.cursor.currentSpan());else if(n.isGroup)this.parseGroupBody(o);else switch(n.polymerType){case v.PEPTIDE:this.parsePeptideBody(o);break;case v.RNA:this.parseRnaBody(o,n.isDnaShim),n.isDnaShim&&this.emit(\"info\",\"dna-emitted-as-rna\",`DNA polymer '${o.id}' will be emitted as RNA on canonicalize`,t.span);break;case v.CHEM:this.parseChemBody(o);break;case v.BLOB:this.parseBlobBody(o);break;}if(this.cursor.optional(\"rbrace\")===null){this.emit(\"error\",\"unterminated-brace\",`Expected '}' to close polymer '${o.id}'`,this.cursor.currentSpan()),this.skipUntil([\"pipe\",\"dollar\",\"eof\"]);return}let r=this.cursor.optional(\"quote-string\");r!==null&&(o.annotation=r.value);}parsePeptideBody(e){for(this.parsePeptideItem(e);this.cursor.at(\"dot\")&&(this.cursor.advance(),!(this.cursor.at(\"rbrace\")||this.cursor.at(\"gt\")));)this.parsePeptideItem(e);if(this.cursor.at(\"gt\")){let t=this.cursor.currentSpan();this.cursor.advance(),this.emit(\"warning\",\"peptide-cyclic-without-closure\",`Peptide '${e.id}' marked cyclic with '>' \\u2014 no explicit closure connection emitted`,t);}}parsePeptideItem(e){if(this.cursor.at(\"lparen\"))this.parsePeptideAlternation(e);else {let t=this.parsePeptideAtom(e);this.maybeRepeatBracket(e,[t]);}this.maybeAttachAnnotation(e);}parsePeptideAtom(e){let t=this.consumeMonomerSymbol(false),{symbol:n,annotation:o,ambiguity:r,ambiguityKind:s,isInlineSmiles:a,rawPayload:l,inlineSource:d,span:u}=t,c=this.makeAtom(e,b.AA,n);o!==void 0&&(c.tag=o),r!==void 0&&(c.bio.ambiguity=r),s!==void 0&&(c.bio.ambiguityKind=s),d!==void 0&&(c.inlineSource=d),a&&this.registerInlineSmiles(l,u,v.PEPTIDE),this.addToChain(e,c,true);let m=e.backboneAtoms[e.backboneAtoms.length-2];return m!==void 0&&this.addBond(e,m,c,\"backbone\",{kind:\"numeric\",r:2},{kind:\"numeric\",r:1}),c}parsePeptideAlternation(e){let t=this.cursor.currentSpan();if(this.cursor.advance(),this.peptideContentIsSubsequence()){let d=e.backboneAtoms.length;for(this.parsePeptideItem(e);this.cursor.at(\"dot\")&&(this.cursor.advance(),!(this.cursor.at(\"rparen\")||this.cursor.isAtEnd()));)this.parsePeptideItem(e);this.cursor.optional(\"rparen\")===null&&this.emit(\"error\",\"unterminated-paren\",\"Expected ')' to close repeat sub-sequence\",this.cursor.currentSpan());let u=e.backboneAtoms.slice(d);this.maybeRepeatBracket(e,u),this.maybeAttachAnnotation(e);return}let n=[],o=null;for(;!this.cursor.at(\"rparen\")&&!this.cursor.isAtEnd();){let d=this.parseAlternationCandidate(v.PEPTIDE);if(n.push(d),this.cursor.at(\"comma\"))o===\"and\"&&this.emit(\"warning\",\"mixed-separator-in-alternation\",\"Mixed ',' and '+' separators in alternation\",this.cursor.currentSpan()),o=\"or\",this.cursor.advance();else if(this.cursor.at(\"plus\"))o===\"or\"&&this.emit(\"warning\",\"mixed-separator-in-alternation\",\"Mixed ',' and '+' separators in alternation\",this.cursor.currentSpan()),o=\"and\",this.cursor.advance();else break}this.cursor.optional(\"rparen\")===null&&this.emit(\"error\",\"unterminated-paren\",\"Expected ')' to close alternation\",this.cursor.currentSpan());let r=o===\"and\"?\"+\":\",\",s=`(${n.map(d=>d.symbol+(d.ratio!==void 0?`:${String(d.ratio)}`:\"\")).join(r)})`,a=this.makeAtom(e,b.AA,\"?\");a.bio.ambiguity=s,a.bio.ambiguityKind=o===\"and\"?\"and\":\"or\",this.addToChain(e,a,true);let l=e.backboneAtoms[e.backboneAtoms.length-2];if(l!==void 0&&this.addBond(e,l,a,\"backbone\",{kind:\"numeric\",r:2},{kind:\"numeric\",r:1}),o===\"and\")for(let d of n)typeof d.ratio==\"number\"&&d.ratio<0&&this.emit(\"error\",\"ratio-and-negative\",`Negative ratio ${d.ratio} in AND mixture`,t);this.maybeRepeatBracket(e,[a]),this.maybeAttachAnnotation(e);}peptideContentIsSubsequence(){let e=1,t=0;for(;;){let n=this.cursor.peek(t);if(n.kind===\"eof\")return false;if(n.kind===\"lparen\"){e+=1,t+=1;continue}if(n.kind===\"rparen\"){if(e-=1,e===0)return true;t+=1;continue}if(e===1){if(n.kind===\"dot\")return true;if(n.kind===\"comma\"||n.kind===\"plus\"||n.kind===\"colon\")return false}if(t+=1,t>1024)return false}}parseAlternationCandidate(e){let{symbol:t,isInlineSmiles:n,rawPayload:o,span:r}=this.consumeMonomerSymbol(true);n&&this.registerInlineSmiles(o,r,e);let s;if(this.cursor.optional(\"colon\")!==null){let a=this.cursor.peek();a.kind===\"integer\"||a.kind===\"decimal\"?(this.cursor.advance(),s=parseFloat(a.value)):a.kind===\"question\"?(this.cursor.advance(),s=\"?\"):this.emit(\"error\",\"unexpected-token\",\"Expected ratio after ':' in alternation\",a.span);}return s===void 0?{symbol:t}:{symbol:t,ratio:s}}parseRnaBody(e,t){for(this.parseRnaItem(e,t);this.cursor.at(\"dot\")&&(this.cursor.advance(),!(this.cursor.at(\"rbrace\")||this.cursor.at(\"dollar\")||this.cursor.isAtEnd()));)this.parseRnaItem(e,t);}parseRnaItem(e,t){if(this.cursor.at(\"lparen\")){this.parseRnaAlternation(e,t);return}if(this.cursor.at(\"asterisk\")){this.cursor.currentSpan();this.cursor.advance();let d=this.makeAtom(e,b.NUCLEOTIDE,\"*\");this.addToChain(e,d,true);let u=e.backboneAtoms[e.backboneAtoms.length-2];u!==void 0&&this.addBond(e,u,d,\"backbone\",{kind:\"numeric\",r:2},{kind:\"numeric\",r:1}),this.maybeRepeatBracket(e,[d]),this.maybeAttachAnnotation(e);return}let n=this.parseRnaSugar(e,t);this.maybeAttachAnnotation(e);let o;this.cursor.at(\"lparen\")&&(this.cursor.advance(),this.cursor.at(\"rparen\")||(o=this.parseRnaBaseSymbol(e),this.maybeAttachAnnotationTo(o)),this.cursor.optional(\"rparen\")===null&&this.emit(\"error\",\"unterminated-paren\",\"Expected ')' after RNA base\",this.cursor.currentSpan()),o!==void 0&&(this.addBond(e,n,o,\"branch\",{kind:\"numeric\",r:3},{kind:\"numeric\",r:1}),n.branchAtom=o));let r;this.canStartRnaLinker()&&(r=this.parseRnaLinker(e),this.maybeAttachAnnotationTo(r)),r!==void 0&&this.addBond(e,n,r,\"backbone\",{kind:\"numeric\",r:2},{kind:\"numeric\",r:1});let s=e.backboneAtoms.indexOf(n);if(s>0){let l=e.backboneAtoms[s-1];this.addBond(e,l,n,\"backbone\",{kind:\"numeric\",r:2},{kind:\"numeric\",r:1});}let a=[n];o!==void 0&&a.push(o),r!==void 0&&a.push(r),this.maybeRepeatBracket(e,a);}canStartRnaLinker(){let e=this.cursor.peek().kind;return e===\"identifier\"||e===\"inline-smiles\"||e===\"asterisk\"}parseRnaSugar(e,t){let{symbol:n,isInlineSmiles:o,rawPayload:r,inlineSource:s,span:a}=this.consumeMonomerSymbol(false),l=this.makeAtom(e,b.SUGAR,n);return s!==void 0&&(l.inlineSource=s),o&&this.registerInlineSmiles(r,a,v.RNA),this.addToChain(e,l,true),l}parseRnaBaseSymbol(e){let{symbol:t,isInlineSmiles:n,rawPayload:o,inlineSource:r,span:s}=this.consumeMonomerSymbol(false),a=this.makeAtom(e,b.BASE,t);return r!==void 0&&(a.inlineSource=r),n&&this.registerInlineSmiles(o,s,v.RNA),this.addToChain(e,a,false),a}parseRnaLinker(e){if(this.cursor.at(\"asterisk\")){this.cursor.currentSpan();this.cursor.advance();let d=this.makeAtom(e,b.LINKER,\"*\");return this.addToChain(e,d,true),d}let{symbol:t,isInlineSmiles:n,rawPayload:o,inlineSource:r,span:s}=this.consumeMonomerSymbol(false),a=this.makeAtom(e,b.LINKER,t);return r!==void 0&&(a.inlineSource=r),n&&this.registerInlineSmiles(o,s,v.RNA),this.addToChain(e,a,true),a}parseRnaAlternation(e,t){let n=e.backboneAtoms.length;if(this.cursor.advance(),this.looksLikeFlatAlternation()){let r=[],s=null;for(;!this.cursor.at(\"rparen\")&&!this.cursor.isAtEnd();)if(r.push(this.parseAlternationCandidate(v.RNA)),this.cursor.at(\"comma\"))s=\"or\",this.cursor.advance();else if(this.cursor.at(\"plus\"))s=\"and\",this.cursor.advance();else break;this.cursor.optional(\"rparen\")===null&&this.emit(\"error\",\"unterminated-paren\",\"Expected ')' in RNA alternation\",this.cursor.currentSpan());let a=s===\"and\"?\"+\":\",\",l=`(${r.map(c=>c.symbol+(c.ratio!==void 0?`:${String(c.ratio)}`:\"\")).join(a)})`,d=this.makeAtom(e,b.BASE,\"?\");d.bio.ambiguity=l,d.bio.ambiguityKind=s===\"and\"?\"and\":\"or\",this.addToChain(e,d,true);let u=e.backboneAtoms[e.backboneAtoms.length-2];u!==void 0&&this.addBond(e,u,d,\"backbone\",{kind:\"numeric\",r:2},{kind:\"numeric\",r:1}),this.maybeRepeatBracket(e,[d]),this.maybeAttachAnnotation(e);return}for(this.parseRnaItem(e,t);this.cursor.at(\"dot\")&&(this.cursor.advance(),!(this.cursor.at(\"rparen\")||this.cursor.isAtEnd()));)this.parseRnaItem(e,t);this.cursor.optional(\"rparen\")===null&&this.emit(\"error\",\"unterminated-paren\",\"Expected ')' in RNA repeat\",this.cursor.currentSpan());let o=e.backboneAtoms.slice(n);this.maybeRepeatBracket(e,o),this.maybeAttachAnnotation(e);}looksLikeFlatAlternation(){let e=1,t=0,n=false;for(;;){let o=this.cursor.peek(t);if(o.kind===\"eof\")return n;if(o.kind===\"rparen\"){if(e-=1,e===0)return n}else {if(o.kind===\"lparen\")return false;if(o.kind===\"dot\")return false;e===1&&(o.kind===\"comma\"||o.kind===\"plus\")&&(n=true);}if(t+=1,t>256)return n}}parseChemBody(e){let t;if(this.cursor.at(\"asterisk\"))this.cursor.advance(),t=this.makeAtom(e,b.CHEM,\"*\"),this.addToChain(e,t,true);else {let{symbol:n,isInlineSmiles:o,rawPayload:r,inlineSource:s,span:a}=this.consumeMonomerSymbol(false);t=this.makeAtom(e,b.CHEM,n),s!==void 0&&(t.inlineSource=s),o&&this.registerInlineSmiles(r,a,v.CHEM),this.addToChain(e,t,true);}this.maybeAttachAnnotation(e),this.cursor.at(\"apos\")&&this.maybeRepeatBracket(e,[t]),this.cursor.at(\"rbrace\")||(this.emit(\"error\",\"chem-multiple-monomers\",`CHEM polymer '${e.id}' must contain exactly one monomer`,this.cursor.currentSpan()),this.skipUntil([\"rbrace\",\"eof\"]));}parseBlobBody(e){let t,n,o=false,r=\"\",s,a=this.cursor.currentSpan();if(this.cursor.at(\"inline-smiles\")){let d=this.cursor.advance();o=Se(d.value),r=d.value,t=d.value,n=d.value,s=d.value,a=d.span;}else if(this.cursor.at(\"identifier\")){let d=this.cursor.advance();t=d.value,n=d.value,a=d.span;}else this.emit(\"error\",\"unknown-blobtype\",\"Expected BLOB identifier\",this.cursor.currentSpan()),t=\"?\",n=\"?\";let l=this.makeAtom(e,b.BLOB,t);l.bio.blobtype=n,s!==void 0&&(l.inlineSource=s),o&&this.registerInlineSmiles(r,a,v.BLOB),this.addToChain(e,l,true),this.maybeAttachAnnotation(e);}parseGroupBody(e){let t=0;for(;;){let n=this.cursor.peek();if(n.kind===\"eof\"||t===0&&n.kind===\"rbrace\")break;n.kind===\"lbrace\"&&(t+=1),n.kind===\"rbrace\"&&(t-=1),this.cursor.advance();}}parseConnections(){if(!(this.cursor.at(\"dollar\")||this.cursor.isAtEnd()))for(this.parseConnection();this.cursor.at(\"pipe\")&&(this.cursor.advance(),!(this.cursor.at(\"dollar\")||this.cursor.isAtEnd()));)this.parseConnection();}parseConnection(){let e=this.cursor.currentSpan(),t=this.cursor.optional(\"identifier\");if(t===null){this.emit(\"error\",\"unexpected-token\",\"Expected chain id in connection\",this.cursor.currentSpan()),this.skipUntil([\"pipe\",\"dollar\",\"eof\"]);return}if(this.cursor.optional(\"comma\")===null){this.emit(\"error\",\"unexpected-token\",\"Expected ',' in connection\",this.cursor.currentSpan()),this.skipUntil([\"pipe\",\"dollar\",\"eof\"]);return}let n=this.cursor.optional(\"identifier\");if(n===null){this.emit(\"error\",\"unexpected-token\",\"Expected second chain id in connection\",this.cursor.currentSpan()),this.skipUntil([\"pipe\",\"dollar\",\"eof\"]);return}if(this.cursor.optional(\"comma\")===null){this.emit(\"error\",\"unexpected-token\",\"Expected ',' before connection position\",this.cursor.currentSpan()),this.skipUntil([\"pipe\",\"dollar\",\"eof\"]);return}let o=this.parsePosition();if(this.cursor.optional(\"colon\")===null){this.emit(\"error\",\"unexpected-token\",\"Expected ':' between position and R-group\",this.cursor.currentSpan()),this.skipUntil([\"pipe\",\"dollar\",\"eof\"]);return}let r=this.parseRGroupSpec();if(this.cursor.optional(\"dash\")===null){this.emit(\"error\",\"unexpected-token\",\"Expected '-' between connection endpoints\",this.cursor.currentSpan()),this.skipUntil([\"pipe\",\"dollar\",\"eof\"]);return}let s=this.parsePosition();if(this.cursor.optional(\"colon\")===null){this.emit(\"error\",\"unexpected-token\",\"Expected ':' before second R-group\",this.cursor.currentSpan()),this.skipUntil([\"pipe\",\"dollar\",\"eof\"]);return}let a=this.parseRGroupSpec(),l=this.cursor.optional(\"quote-string\"),d=r.kind===\"pair\"&&a.kind===\"pair\"?\"hbond\":\"cross-polymer\",u={chain1:t.value,pos1:o,r1:r,chain2:n.value,pos2:s,r2:a,kind:d,span:{start:e.start,end:l?.span.end??this.cursor.peek().span.start},...l!==null?{tag:l.value}:{}};this.pendingBonds.push(u);}parsePosition(){let e=this.cursor.peek();return e.kind===\"integer\"?(this.cursor.advance(),{kind:\"index\",value:parseInt(e.value,10)}):e.kind===\"question\"?(this.cursor.advance(),{kind:\"any\"}):e.kind===\"identifier\"?(this.cursor.advance(),this.emit(\"info\",\"symbol-position-reference\",`Connection position uses monomer symbol '${e.value}' as chain-level ambiguity`,e.span),{kind:\"symbol\",value:e.value}):(this.emit(\"error\",\"invalid-position\",`Expected position (integer, '?', or symbol), got '${e.value}'`,e.span),{kind:\"any\"})}parseRGroupSpec(){let e=this.cursor.peek();if(e.kind===\"question\")return this.cursor.advance(),{kind:\"unspecified\"};if(e.kind===\"asterisk\")return this.cursor.advance(),{kind:\"wildcard\"};if(e.kind===\"identifier\"){if(this.cursor.advance(),e.value===\"pair\")return {kind:\"pair\"};let t=/^R([1-9][0-9]*)$/.exec(e.value);return t===null?(this.emit(\"error\",\"invalid-rgroup\",`Expected R-group label, got '${e.value}'`,e.span),{kind:\"unspecified\"}):{kind:\"numeric\",r:parseInt(t[1],10)}}return this.emit(\"error\",\"invalid-rgroup\",`Expected R-group label, got '${e.value}'`,e.span),{kind:\"unspecified\"}}parseGroupsSection(){if(!(this.cursor.at(\"dollar\")||this.cursor.isAtEnd()))for(this.parseGroupOrBondRatio();this.cursor.at(\"pipe\")&&(this.cursor.advance(),!(this.cursor.at(\"dollar\")||this.cursor.isAtEnd()));)this.parseGroupOrBondRatio();}parseGroupOrBondRatio(){let e=this.cursor.optional(\"identifier\");if(e===null){this.emit(\"error\",\"unexpected-token\",\"Expected group or bond-ratio identifier\",this.cursor.currentSpan()),this.skipUntil([\"pipe\",\"dollar\",\"eof\"]);return}this.cursor.at(\"lparen\")?this.parseGroupAfterId(e):this.cursor.at(\"plus\")?this.parseBondRatioAfterId(e):(this.emit(\"warning\",\"unexpected-token\",`Expected '(' or '+' after id '${e.value}' in section 3`,this.cursor.currentSpan()),this.skipUntil([\"pipe\",\"dollar\",\"eof\"]));}parseGroupAfterId(e){let t=io(e.value);(t===null||!t.isGroup)&&this.emit(\"error\",\"unknown-group-reference\",`Group id must be 'G<n>', got '${e.value}'`,e.span),this.cursor.advance();let n=[],o=\"or\",r=null;for(;!this.cursor.at(\"rparen\")&&!this.cursor.isAtEnd();){let s=this.parseGroupMember();if(s!==null&&n.push(s),this.cursor.at(\"comma\"))r===null&&(r=\"or\",o=\"or\"),this.cursor.advance();else if(this.cursor.at(\"plus\"))r===null&&(r=\"and\",o=\"and\"),this.cursor.advance();else break}this.cursor.optional(\"rparen\")===null&&this.emit(\"error\",\"unterminated-paren\",\"Expected ')' to close group\",this.cursor.currentSpan()),this.groups.push({id:e.value,kind:o,members:n});}parseGroupMember(){let e=this.cursor.optional(\"identifier\");if(e===null)return this.emit(\"error\",\"unexpected-token\",\"Expected group member id\",this.cursor.currentSpan()),null;let t;return this.cursor.optional(\"colon\")!==null&&(t=this.parseRatio()),t===void 0?{target:e.value}:{target:e.value,ratio:t}}parseRatio(){let e=this.cursor.peek();if(e.kind===\"integer\"||e.kind===\"decimal\"){this.cursor.advance();let t=parseFloat(e.value);if(this.cursor.at(\"dash\")){this.cursor.peek();if(this.cursor.peek(1).kind===\"integer\"){this.cursor.advance();let o=this.cursor.advance();this.emit(\"info\",\"ratio-range\",`Ratio range ${e.value}-${o.value}; using lower bound`,{start:e.span.start,end:o.span.end});}}return t}return e.kind===\"question\"?(this.cursor.advance(),\"?\"):(this.emit(\"error\",\"unexpected-token\",`Expected ratio after ':', got '${e.value}'`,e.span),0)}parseBondRatioAfterId(e){this.cursor.advance();let t=this.cursor.optional(\"identifier\");if(t===null){this.emit(\"error\",\"unexpected-token\",\"Expected second chain id in bond-ratio\",this.cursor.currentSpan());return}let n;if(this.cursor.optional(\"colon\")!==null){let r=this.parseRatio();typeof r==\"number\"&&(n=r);}let o=this.pendingBonds.find(r=>r.chain1===e.value&&r.chain2===t.value||r.chain1===t.value&&r.chain2===e.value);if(o===void 0){this.emit(\"warning\",\"bond-ratio-no-matching-bond\",`Bond-ratio for ${e.value}+${t.value} has no matching cross-polymer bond`,e.span);return}n!==void 0&&(o.ratio={numerator:n});}parseAnnotationsSection(){if(this.cursor.at(\"dollar\")||this.cursor.isAtEnd())return;this.cursor.position();if(this.cursor.at(\"lbrace\")){this.parseAnnotation20(),this.cursor.at(\"pipe\")&&(this.emit(\"info\",\"annotation-mixed-versions\",\"Mixed HELM 2.0 JSON and HELM 1.0 pipe annotations\",this.cursor.currentSpan()),this.cursor.advance(),this.parseAnnotation10Entries());return}this.parseAnnotation10Entries();}parseAnnotation20(){let e=this.cursor.currentSpan(),t=0,n=e.end;for(;!this.cursor.isAtEnd();){let s=this.cursor.peek();if(s.kind===\"lbrace\")t+=1;else if(s.kind===\"rbrace\"&&(t-=1,t===0)){n=s.span.end,this.cursor.advance();break}this.cursor.advance();}let o=this.source.slice(e.start,n),r=null;try{r=JSON.parse(o);}catch{this.emit(\"warning\",\"annotation-malformed-json\",\"Annotation block is not valid JSON\",{start:e.start,end:n}),this.annotations={perPolymer:this.annotations.perPolymer,version:this.annotations.version,raw:o};return}if(r!==null&&typeof r==\"object\"&&!Array.isArray(r)){let s=new Map(this.annotations.perPolymer);for(let[a,l]of Object.entries(r))l!==null&&typeof l==\"object\"&&!Array.isArray(l)?(s.set(a,{...l}),this.chainById.has(a)||this.emit(\"warning\",\"annotation-unknown-polymer\",`Annotation references unknown polymer '${a}'`,e)):s.set(a,{value:l});this.annotations={perPolymer:s,version:this.annotations.version};}else this.emit(\"warning\",\"annotation-malformed-json\",\"Annotation block parsed but is not an object\",{start:e.start,end:n}),this.annotations={perPolymer:this.annotations.perPolymer,version:this.annotations.version,raw:o};}parseAnnotation10Entries(){for(this.parseAnnotation10One();this.cursor.at(\"pipe\")&&(this.cursor.advance(),!(this.cursor.at(\"dollar\")||this.cursor.isAtEnd()));)this.parseAnnotation10One();}parseAnnotation10One(){let e=this.cursor.optional(\"identifier\");if(e===null){this.emit(\"warning\",\"annotation-malformed-json\",\"Expected polymer-id in HELM 1.0 annotation\",this.cursor.currentSpan()),this.skipUntil([\"pipe\",\"dollar\",\"eof\"]);return}if(this.cursor.optional(\"lbrace\")===null){this.emit(\"warning\",\"annotation-malformed-json\",\"Expected '{' after polymer-id\",this.cursor.currentSpan()),this.skipUntil([\"pipe\",\"dollar\",\"eof\"]);return}let t=[];for(;!this.cursor.at(\"rbrace\")&&!this.cursor.isAtEnd();)t.push(this.cursor.advance().value);if(this.cursor.optional(\"rbrace\")===null){this.emit(\"error\",\"unterminated-brace\",\"Expected '}' to close annotation\",this.cursor.currentSpan());return}let n=t.join(\"\").trim(),o=new Map(this.annotations.perPolymer),r=o.get(e.value)??{};n===\"ss\"||n===\"as\"?o.set(e.value,{...r,strandtype:n}):o.set(e.value,{...r,[n]:true}),this.chainById.has(e.value)||this.emit(\"warning\",\"annotation-unknown-polymer\",`Annotation references unknown polymer '${e.value}'`,e.span),this.annotations={perPolymer:o,version:this.annotations.version};}parseVersionTrailer(){let e=this.cursor.optional(\"identifier\");if(e===null){this.annotations={...this.annotations,version:\"\"};return}let t=e.value;if(this.cursor.at(\"dot\")&&this.cursor.peek(1).kind===\"integer\"){this.cursor.advance();let n=this.cursor.advance();t=`${e.value}.${n.value}`;}this.annotations={...this.annotations,version:t};}skipUntil(e){for(;!this.cursor.isAtEnd();){if(e.includes(this.cursor.peek().kind))return;this.cursor.advance();}}consumeMonomerSymbol(e){let t=this.cursor.peek();if(t.kind===\"inline-smiles\"){this.cursor.advance();let n=Se(t.value);return {symbol:t.value,isInlineSmiles:n,rawPayload:t.value,inlineSource:t.value,span:t.span}}if(t.kind===\"identifier\"){this.cursor.advance();let n=t.value,o=t.span;for(;this.cursor.peek().kind===\"dash\"&&this.cursor.peek(1).kind===\"integer\"&&(this.cursor.peek(2).kind===\"identifier\"||this.cursor.peek(2).kind===\"dash\");){this.cursor.advance();let s=this.cursor.advance();if(n=`${n}-${s.value}`,o=s.span,this.cursor.peek().kind===\"identifier\"){let a=this.cursor.advance();n=`${n}${a.value}`,o=a.span;}}return {symbol:n,isInlineSmiles:false,rawPayload:n,span:{start:t.span.start,end:o.end}}}if(t.kind===\"asterisk\"||t.kind===\"underscore\"||t.kind===\"question\")return this.cursor.advance(),{symbol:t.value,isInlineSmiles:false,rawPayload:t.value,span:t.span};if(t.kind===\"integer\"&&this.cursor.peek(1).kind===\"identifier\"){let n=this.cursor.advance(),o=this.cursor.advance(),r=`${n.value}${o.value}`;return {symbol:r,isInlineSmiles:false,rawPayload:r,span:{start:n.span.start,end:o.span.end}}}return this.emit(\"error\",\"unexpected-token\",`Expected monomer symbol, got '${t.value}'`,t.span),{symbol:\"?\",isInlineSmiles:false,rawPayload:\"\",span:t.span}}maybeRepeatBracket(e,t){if(!this.cursor.at(\"apos\"))return;let n=this.cursor.currentSpan();this.cursor.advance();let o=this.cursor.optional(\"integer\");if(o===null){this.emit(\"error\",\"unexpected-token\",\"Expected integer in repeat bracket\",this.cursor.currentSpan()),this.cursor.optional(\"apos\");return}let r=parseInt(o.value,10),s=r;if(this.cursor.at(\"dash\")){this.cursor.advance();let a=this.cursor.optional(\"integer\");a===null?this.emit(\"error\",\"unexpected-token\",\"Expected integer after '-' in repeat bracket\",this.cursor.currentSpan()):s=parseInt(a.value,10);}if(this.cursor.optional(\"apos\")===null&&this.emit(\"error\",\"unterminated-apostrophe\",\"Expected closing apostrophe\",this.cursor.currentSpan()),t.length===0){this.emit(\"warning\",\"repeat-on-empty-bracket\",\"Repeat bracket applied to empty content\",n);return}if(s<r){this.emit(\"warning\",\"repeat-range-inverted\",`Repeat range ${r}-${s} has max < min; swapping`,n);let a=r;r=s,s=a;}if(r===0&&s===0){this.emit(\"warning\",\"repeat-zero-count\",\"Repeat bracket with zero count\",n);return}s>1e4&&this.emit(\"warning\",\"bracket-repeat-too-large\",`Repeat range upper bound ${s} > 10000`,n),e.polymerType===v.CHEM&&this.emit(\"error\",\"repeat-on-non-iterable-polymer\",`Repeat bracket not allowed on CHEM polymer '${e.id}'`,n),this.groups.push({id:`${e.id}/bracket@${t[0]?.id??0}`,kind:\"bracket\",members:t.map(a=>({target:String(a.id)})),repeat:{min:r,max:s}});}maybeAttachAnnotation(e){let t=e.backboneAtoms[e.backboneAtoms.length-1];t!==void 0&&this.maybeAttachAnnotationTo(t);}maybeAttachAnnotationTo(e){if(e===void 0)return;let t=this.cursor.optional(\"quote-string\");t!==null&&(e.tag=t.value);}registerInlineSmiles(e,t,n){if(Se(e)){if(this.lib===null){this.emit(\"info\",\"inline-smiles-no-lib\",\"Inline SMILES seen but no monomer library available for registration\",t);return}try{this.lib.addMonomer;let o=this.lib.registerInlineSmilesMonomer;typeof o==\"function\"&&o.call(this.lib,n,e);}catch(o){let r=o instanceof Error?o.message:String(o);this.emit(\"warning\",\"inline-smiles-without-r-groups\",`Inline SMILES registration failed: ${r}`,t);}}}makeAtom(e,t,n){return {id:this.atomIds.next(),p:{x:0,y:0},biotype:t,symbol:n,monomer:null,bio:{chainId:e.id,positionInChain:0,continuousId:0},hidden:false,selected:false,highlighted:false}}addToChain(e,t,n){e.allAtoms.push(t),n&&(e.backboneAtoms.push(t),t.bio.positionInChain=e.backboneAtoms.length);}addBond(e,t,n,o,r,s){let a=this.bondIds.next();e.bonds.push({id:a,a1:t,a2:n,kind:o,r1:r,r2:s});}finalize(){let e=[];for(let a of this.pendingBonds){let l=this.chainById.get(a.chain1),d=this.chainById.get(a.chain2);if(l===void 0){this.emit(\"error\",\"unknown-chain-reference\",`Connection references unknown chain '${a.chain1}'`,a.span);continue}if(d===void 0){this.emit(\"error\",\"unknown-chain-reference\",`Connection references unknown chain '${a.chain2}'`,a.span);continue}let u=this.resolveAtomByPosition(l,a.pos1,a.span),c=this.resolveAtomByPosition(d,a.pos2,a.span);if(u===null||c===null)continue;a.r1.kind===\"pair\"&&u.branchAtom!==void 0&&(u=u.branchAtom),a.r2.kind===\"pair\"&&c.branchAtom!==void 0&&(c=c.branchAtom);let p={id:this.bondIds.next(),a1:u,a2:c,kind:a.kind,r1:a.r1,r2:a.r2,...a.tag!==void 0?{tag:a.tag}:{},...a.ratio!==void 0?{ratio:a.ratio}:{}};e.push(p);}let t=[],n=[],o=[];for(let a of this.chains){for(let c of a.allAtoms)t.push(c);for(let c of a.bonds)n.push(c);let l=this.annotations.perPolymer.get(a.id),d=l===void 0?void 0:l.strandtype,u=d===\"ss\"||d===\"as\"?d:void 0;o.push({id:a.id,polymerType:a.polymerType,backboneAtoms:a.backboneAtoms,bonds:a.bonds,...a.annotation!==void 0?{annotation:a.annotation}:{},...u!==void 0?{strandType:u}:{}});}for(let a of e)n.push(a);let r=0;for(let a of this.chains)for(let l of a.backboneAtoms)r+=1,l.bio.continuousId=r,l.branchAtom!==void 0&&(r+=1,l.branchAtom.bio.continuousId=r);let s=[];for(let a of this.groups)s.push({id:a.id,kind:a.kind,members:a.members,...a.repeat!==void 0?{repeat:a.repeat}:{}});return {atoms:t,bonds:n,chains:o,groups:s,annotations:this.annotations}}sourceOrderAtoms(e){let t=[];for(let n of e.backboneAtoms)t.push(n),n.branchAtom!==void 0&&t.push(n.branchAtom);return t}resolveAtomByPosition(e,t,n){if(t.kind===\"any\")return e.backboneAtoms[0]??null;if(t.kind===\"symbol\"){let s=e.backboneAtoms.find(a=>a.symbol===t.value);if(s===void 0){let a=e.allAtoms.find(l=>l.symbol===t.value);return a===void 0?(this.emit(\"warning\",\"position-out-of-range\",`Chain '${e.id}' has no monomer with symbol '${t.value}'`,n),e.backboneAtoms[0]??null):a}return s}let o=this.sourceOrderAtoms(e),r=t.value;return r<1||r>o.length?(this.emit(\"error\",\"position-out-of-range\",`Position ${r} out of range for chain '${e.id}' (length ${o.length})`,n),e.backboneAtoms[0]??null):o[r-1]}emit(e,t,n,o){let r={severity:e,code:t,message:n,...o!==void 0?{span:{start:o.start,end:o.end}}:{}};if(this.diagnostics.push(r),this.mode===\"strict\"&&e===\"error\")throw new D(t,n,{...o!==void 0?{span:{start:o.start,end:o.end}}:{}})}};function so(i,e,t){for(let n of t){if(n.kind!==\"backbone\"||n.r1.kind!==\"numeric\"||n.r2.kind!==\"numeric\")continue;let o=n.a1.id===i.id&&n.a2.id===e.id&&n.r1.r===2&&n.r2.r===1,r=n.a1.id===e.id&&n.a2.id===i.id&&n.r1.r===2&&n.r2.r===1;if(o||r)return true}return false}function ur(i){let e=false;for(let u of i.chains){for(let c=0;c<u.backboneAtoms.length-1;c++){let m=u.backboneAtoms[c],p=u.backboneAtoms[c+1];if(!so(m,p,i.bonds)){e=true;break}}if(e)break}if(!e)return i;let t=new Set(i.chains.map(u=>u.id)),n=u=>{let c=1;for(;t.has(`${u}${c}`);)c+=1;let m=`${u}${c}`;return t.add(m),m},o=[];for(let u of i.chains){let c=[[]],m=c[0];for(let p=0;p<u.backboneAtoms.length;p++){let h=u.backboneAtoms[p];if(m.push(h),p<u.backboneAtoms.length-1){let f=u.backboneAtoms[p+1];so(h,f,i.bonds)||(m=[],c.push(m));}}for(let p=0;p<c.length;p++){let f={id:p===0?u.id:n(u.polymerType),polymerType:u.polymerType,atoms:c[p]};p===0&&u.annotation!==void 0&&(f.annotation=u.annotation),o.push(f);}}let r=new Map;for(let u of o)for(let c=0;c<u.atoms.length;c++){let m=u.atoms[c];r.set(m.id,{chainId:u.id,pos:c+1}),m.branchAtom!==void 0&&r.set(m.branchAtom.id,{chainId:u.id,pos:c+1});}let s=new Map;for(let u of i.atoms){let c=r.get(u.id);if(c===void 0){s.set(u.id,u);continue}if(u.bio.chainId===c.chainId&&u.bio.positionInChain===c.pos){s.set(u.id,u);continue}s.set(u.id,{...u,bio:{...u.bio,chainId:c.chainId,positionInChain:c.pos}});}for(let u of i.atoms){if(u.branchAtom===void 0)continue;let c=s.get(u.id),m=s.get(u.branchAtom.id);c===void 0||m===void 0||(c.branchAtom=m);}let a=i.bonds.map(u=>{let c=s.get(u.a1.id)??u.a1,m=s.get(u.a2.id)??u.a2;return c===u.a1&&m===u.a2?u:{...u,a1:c,a2:m}}),l=o.map(u=>{let c=u.atoms.map(f=>s.get(f.id)??f),m=new Set;for(let f of u.atoms)m.add(f.id),f.branchAtom!==void 0&&m.add(f.branchAtom.id);let p=[];for(let f of a)m.has(f.a1.id)&&m.has(f.a2.id)&&p.push(f);return {id:u.id,polymerType:u.polymerType,backboneAtoms:c,bonds:p,...u.annotation!==void 0?{annotation:u.annotation}:{}}});return {atoms:i.atoms.map(u=>s.get(u.id)??u),bonds:a,chains:l,groups:i.groups,annotations:i.annotations}}function Le(i,e){let t=ur(i);return new dn(t,e??{}).emit()}var dn=class{constructor(e,t){this.mol=e,this.options=t;}emit(){let t=this.orderedChains().map(a=>this.emitPolymer(a)).join(\"|\"),n=this.emitConnections(),o=this.emitGroupsAndBondRatios(),r=this.emitAnnotations(),s=this.versionTrailer();return `${t}$${n}$${o}$${r}${s}`}orderedChains(){if(this.options.canonicalize!==true)return this.mol.chains;let e=this.mol.chains.slice();return e.sort((t,n)=>t.polymerType!==n.polymerType?t.polymerType<n.polymerType?-1:1:t.id<n.id?-1:t.id>n.id?1:0),e}emitPolymer(e){let t=this.emitChainBody(e),n=e.annotation!==void 0?`\"${Q(e.annotation)}\"`:\"\";return `${e.id}{${t}}${n}`}emitChainBody(e){switch(e.polymerType){case \"PEPTIDE\":return this.emitPeptideBody(e);case \"RNA\":return this.emitRnaBody(e);case \"CHEM\":return this.emitChemBody(e);case \"BLOB\":return this.emitBlobBody(e);default:return \"\"}}emitPeptideBody(e){let t=this.bracketsForChain(e.id),n=[],o=0,r=0,s=null;for(;o<e.backboneAtoms.length;){let a=e.backboneAtoms[o],l=t.find(u=>u.startAtomId===a.id);l!==void 0&&s===null&&(n.push(\"(\"),s=l,r+=1),n.push(this.emitMonomerToken(a));let d=a.tag!==void 0?`\"${Q(a.tag)}\"`:\"\";n.push(d),s!==null&&s.endAtomId===a.id&&(n.push(`)${ao(s.min,s.max)}`),s=null,r-=1),o+=1,o<e.backboneAtoms.length&&n.push(\".\");}return n.join(\"\")}emitRnaBody(e){let t=this.bracketsForChain(e.id),n=[],o=0,r=true,s=null,a=d=>{s!==null&&s.endAtomId===d&&(n.push(`)${ao(s.min,s.max)}`),s=null);},l=d=>{let u=t.find(c=>c.startAtomId===d);u!==void 0&&s===null&&(n.push(\"(\"),s=u);};for(;o<e.backboneAtoms.length;){let d=e.backboneAtoms[o];if(r||n.push(\".\"),r=false,d.biotype===b.NUCLEOTIDE){l(d.id),n.push(this.emitMonomerToken(d)),d.tag!==void 0&&n.push(`\"${Q(d.tag)}\"`),a(d.id),o+=1;continue}if(d.biotype===b.SUGAR){l(d.id),n.push(this.emitMonomerToken(d)),d.tag!==void 0&&n.push(`\"${Q(d.tag)}\"`),d.branchAtom!==void 0&&(n.push(\"(\"),n.push(this.emitMonomerToken(d.branchAtom)),d.branchAtom.tag!==void 0&&n.push(`\"${Q(d.branchAtom.tag)}\"`),n.push(\")\"));let u=e.backboneAtoms[o+1];u!==void 0&&u.biotype===b.LINKER?(n.push(this.emitMonomerToken(u)),u.tag!==void 0&&n.push(`\"${Q(u.tag)}\"`),a(u.id),o+=2):(a(d.id),o+=1);continue}l(d.id),n.push(this.emitMonomerToken(d)),d.tag!==void 0&&n.push(`\"${Q(d.tag)}\"`),a(d.id),o+=1;}return n.join(\"\")}emitChemBody(e){let t=e.backboneAtoms[0];if(t===void 0)return \"\";let n=t.tag!==void 0?`\"${Q(t.tag)}\"`:\"\";return `${this.emitMonomerToken(t)}${n}`}emitBlobBody(e){let t=e.backboneAtoms[0];if(t===void 0)return \"\";let n=t.tag!==void 0?`\"${Q(t.tag)}\"`:\"\";return `${this.emitMonomerToken(t)}${n}`}emitMonomerToken(e){let t;return e.inlineSource!==void 0?t=`[${e.inlineSource}]`:e.bio.ambiguity!==void 0&&(e.symbol===\"?\"||e.bio.ambiguity.startsWith(\"(\"))?t=e.bio.ambiguity:t=e.symbol,this.options.includeHighlights===true&&e.selected?`<span style='background:#bbf;'>${t}</span>`:t}emitConnections(){let e=[];for(let t of this.crossPolymerBonds())e.push(this.emitConnection(t));return e.join(\"|\")}*crossPolymerBonds(){let e=new Map;for(let t of this.mol.chains){let n=new Map;for(let o=0;o<t.backboneAtoms.length;o++)n.set(t.backboneAtoms[o].id,o);e.set(t.id,n);}for(let t of this.mol.bonds){if(t.kind===\"backbone\"){if(t.a1.bio.chainId===t.a2.bio.chainId){let n=e.get(t.a1.bio.chainId);if(n!==void 0){let o=n.get(t.a1.id),r=n.get(t.a2.id);if(o!==void 0&&r!==void 0&&Math.abs(o-r)===1)continue}}yield t;continue}if(t.kind===\"branch\"){if(t.a1.branchAtom!==void 0&&t.a1.branchAtom.id===t.a2.id||t.a2.branchAtom!==void 0&&t.a2.branchAtom.id===t.a1.id)continue;yield t;continue}yield t;}}emitConnection(e){let t=lo(e.r1,e.kind),n=lo(e.r2,e.kind),o=e.tag!==void 0?`\"${Q(e.tag)}\"`:\"\",r=String(this.connectionPosition(e.a1)),s=String(this.connectionPosition(e.a2));return `${e.a1.bio.chainId},${e.a2.bio.chainId},${r}:${t}-${s}:${n}${o}`}connectionPosition(e){return re(e,this.mol.chains.find(t=>t.id===e.bio.chainId))}emitGroupsAndBondRatios(){let e=[];for(let t of this.mol.groups)t.kind!==\"bracket\"&&e.push(this.emitGroup(t));for(let t of this.mol.bonds){if(t.kind!==\"cross-polymer\"||t.ratio===void 0)continue;let n=t.ratio.denominator!==void 0?`${t.ratio.numerator}/${t.ratio.denominator}`:`${t.ratio.numerator}`;e.push(`${t.a1.bio.chainId}+${t.a2.bio.chainId}:${n}`);}return e.join(\"|\")}emitGroup(e){let t=e.kind===\"and\"?\"+\":\",\",n=e.members.map(o=>mr(o)).join(t);return `${e.id}(${n})`}emitAnnotations(){let e=this.mol.annotations.perPolymer;if(e.size===0)return \"\";let t={};for(let[n,o]of e)t[n]=o;return JSON.stringify(t)}versionTrailer(){let e=this.options.version??\"V2.0\";if(e===\"none\")return \"\";if(e===\"preserve\"){let t=this.mol.annotations.version;return t===\"\"?\"\":`$${t}`}return `$${e}`}bracketsForChain(e){let t=[],n=new Map;for(let o of this.mol.atoms)n.set(o.id,o.bio.chainId);for(let o of this.mol.groups){if(o.kind!==\"bracket\")continue;let r=[];for(let l of o.members){let d=parseInt(l.target,10);Number.isFinite(d)&&r.push(d);}if(r.length===0)continue;let s=new Set;for(let l of r){let d=n.get(l);d!==void 0&&s.add(d);}if(!s.has(e)||s.size>1)continue;let a=o.repeat??{min:1,max:1};t.push({members:r,min:a.min,max:a.max,set:new Set(r),startAtomId:r[0],endAtomId:r[r.length-1]});}return t}};function Q(i){let e=\"\";for(let t=0;t<i.length;t++){let n=i.charCodeAt(t);if(n===34){e+='\\\\\"';continue}if(n===92){e+=\"\\\\\\\\\";continue}if(n===10){e+=\"\\\\n\";continue}if(n===13){e+=\"\\\\r\";continue}if(n===9){e+=\"\\\\t\";continue}e+=i.charAt(t);}return e}function ao(i,e){return i===e?`'${i}'`:`'${i}-${e}'`}function lo(i,e){switch(i.kind){case \"numeric\":return `R${i.r}`;case \"unspecified\":return \"?\";case \"wildcard\":return \"*\";case \"pair\":return \"pair\";case \"positional\":return `${i.position}:R${i.r}`;default:return \"?\"}}function mr(i){return i.ratio===void 0?i.target:`${i.target}:${i.ratio}`}function un(i){return new cn(i).run()}var cn=class{constructor(e){this.chainIdMap=new Map;this.mol=e;}run(){let e=this.mol.chains.slice().sort((m,p)=>m.polymerType!==p.polymerType?m.polymerType<p.polymerType?-1:1:uo(m.id,p.id)),t={},n=[];for(let m of e){let p=pr(m.polymerType);t[p]=(t[p]??0)+1;let h=`${p}${t[p]}`;this.chainIdMap.set(m.id,h),n.push(m);}let o=new Map;for(let m of this.mol.atoms){let p=this.chainIdMap.get(m.bio.chainId)??m.bio.chainId;o.set(m.id,{...m,bio:{...m.bio,chainId:p}});}for(let m of this.mol.atoms){if(m.branchAtom===void 0)continue;let p=o.get(m.id),h=o.get(m.branchAtom.id);p!==void 0&&h!==void 0&&(p.branchAtom=h);}let r=this.mol.bonds.map(m=>({...m,a1:o.get(m.a1.id)??m.a1,a2:o.get(m.a2.id)??m.a2})),s=new Map;for(let m of r)s.set(m.id,m);let a=n.map(m=>{let p=this.chainIdMap.get(m.id)??m.id,h=[];for(let _ of m.backboneAtoms){let k=o.get(_.id);k!==void 0&&h.push(k);}let f=[];for(let _ of m.bonds){let k=s.get(_.id);k!==void 0&&f.push(k);}return {id:p,polymerType:m.polymerType,backboneAtoms:h,bonds:f,...m.annotation!==void 0&&m.annotation.length>0?{annotation:m.annotation}:{}}}),l=new Map;for(let m of a)l.set(m.id,m);r.sort((m,p)=>{let h=co(m.kind),f=co(p.kind);if(h&&!f)return 1;if(!h&&f)return -1;if(!h&&!f)return m.id-p.id;let _=m.a1.bio.chainId,k=p.a1.bio.chainId;if(_!==k)return _<k?-1:1;let g=m.a2.bio.chainId,M=p.a2.bio.chainId;if(g!==M)return g<M?-1:1;let A=re(m.a1,l.get(m.a1.bio.chainId)),w=re(p.a1,l.get(p.a1.bio.chainId));if(A!==w)return A-w;let T=re(m.a2,l.get(m.a2.bio.chainId)),S=re(p.a2,l.get(p.a2.bio.chainId));return T-S});let d=this.renumberGroups(this.mol.groups),u=this.rekeyAnnotations(this.mol.annotations);return {atoms:this.mol.atoms.map(m=>o.get(m.id)),bonds:r,chains:a,groups:d,annotations:u}}renumberGroups(e){let t=[],n=[];for(let r of e)r.kind===\"bracket\"?t.push(this.rekeyBracket(r)):n.push(r);n.sort((r,s)=>uo(r.id,s.id));let o={G:0};return n.map(r=>{o.G+=1;let s=`G${o.G}`;return {...r,id:s,members:r.members.map(a=>this.rekeyMember(a))}}).concat(t)}rekeyBracket(e){return e}rekeyMember(e){let t=this.chainIdMap.get(e.target);return t===void 0?e:e.ratio===void 0?{target:t}:{target:t,ratio:e.ratio}}rekeyAnnotations(e){let t=new Map;for(let[n,o]of e.perPolymer){let r=this.chainIdMap.get(n)??n;Object.keys(o).length!==0&&t.set(r,o);}return {perPolymer:t,version:e.version}}};function pr(i){switch(i){case \"PEPTIDE\":return \"PEPTIDE\";case \"RNA\":return \"RNA\";case \"CHEM\":return \"CHEM\";case \"BLOB\":return \"BLOB\";default:return \"BLOB\"}}function co(i){return i===\"cross-polymer\"||i===\"hbond\"}function uo(i,e){let t=/^([A-Z]+)([0-9]+)$/.exec(i),n=/^([A-Z]+)([0-9]+)$/.exec(e);return t===null||n===null?i<e?-1:i>e?1:0:t[1]!==n[1]?t[1]<n[1]?-1:1:parseInt(t[2],10)-parseInt(n[2],10)}function mo(i){let e=Te(i),t=new Map;for(let a of i.atoms){let l=e.get(a.id);if(l===void 0||l===a.bio.continuousId){t.set(a.id,a);continue}t.set(a.id,{...a,bio:{...a.bio,continuousId:l}});}for(let a of i.atoms){if(a.branchAtom===void 0)continue;let l=t.get(a.id),d=t.get(a.branchAtom.id);l===void 0||d===void 0||(l.branchAtom=d);}let n=i.bonds.map(a=>{let l=t.get(a.a1.id),d=t.get(a.a2.id);return l===void 0||d===void 0||l===a.a1&&d===a.a2?a:{...a,a1:l,a2:d}}),o=new Map;for(let a of n)o.set(a.id,a);let r=i.chains.map(a=>{let l=[];for(let u of a.backboneAtoms){let c=t.get(u.id);l.push(c??u);}let d=[];for(let u of a.bonds){let c=o.get(u.id);d.push(c??u);}return {id:a.id,polymerType:a.polymerType,backboneAtoms:l,bonds:d,...a.annotation!==void 0?{annotation:a.annotation}:{}}});return {atoms:i.atoms.map(a=>t.get(a.id)??a),bonds:n,chains:r,groups:i.groups,annotations:i.annotations}}function mn(i,e){let n=Qe(i,e??null,{mode:\"lenient\",resolveMonomers:false}),o=hr(n.mol),r=mo(o.mol),s=new Map;for(let d of r.atoms)s.set(d.id,d.bio.continuousId);let a=new Map;for(let[d,u]of o.survivorByOldContinuousId){let c=s.get(u);c!==void 0&&a.set(d,c);}let l=Le(r,{version:\"V2.0\"});return {srcHelm:i,resHelm:l,monomerMap:a}}function hr(i){let e=new Map;for(let c of i.atoms)e.set(c.bio.continuousId,c.id);let t=new Set;for(let c of i.atoms)c.symbol===\"*\"&&t.add(c.id);if(t.size===0)return {mol:i,survivorByOldContinuousId:e};let n=new Map;for(let c of i.atoms)n.set(c.id,[]);for(let c of i.bonds)n.get(c.a1.id)?.push(c),n.get(c.a2.id)?.push(c);for(let c of t){let m=n.get(c)??[];if(m.some(f=>f.kind===\"cross-polymer\"||f.kind===\"hbond\"))throw new K(\"gap-at-complex-junction\",`Gap atom ${c} participates in a cross-polymer/hbond bond`,{atomId:c});let h=m.filter(f=>f.kind===\"backbone\");if(h.length>2)throw new K(\"gap-at-complex-junction\",`Gap atom ${c} has ${h.length} backbone bonds (max 2 allowed)`,{atomId:c,bondCount:h.length})}let o=i.atoms.filter(c=>!t.has(c.id)),r=[],s=[];for(let c of i.chains){let m=c.backboneAtoms.filter(f=>!t.has(f.id)),p=(()=>{let f=0;for(let _ of i.bonds)_.id>f&&(f=_.id);return f+1})(),h=[];for(let f of c.bonds)t.has(f.a1.id)||t.has(f.a2.id)||h.push(f);for(let f=0;f<c.backboneAtoms.length;f++){let _=c.backboneAtoms[f];if(!t.has(_.id))continue;let k=fr(c.backboneAtoms,f,t),g=br(c.backboneAtoms,f,t);if(k===null||g===null)continue;let M={id:p++,a1:k,a2:g,kind:\"backbone\",r1:{kind:\"numeric\",r:2},r2:{kind:\"numeric\",r:1}};h.find(w=>w.a1.id===k.id&&w.a2.id===g.id)===void 0&&h.push(M);}for(let f of h)s.push(f);r.push({id:c.id,polymerType:c.polymerType,backboneAtoms:m,bonds:h,...c.annotation!==void 0?{annotation:c.annotation}:{}});}for(let c of i.bonds)c.kind!==\"cross-polymer\"&&c.kind!==\"hbond\"||t.has(c.a1.id)||t.has(c.a2.id)||s.push(c);let a=new Map;for(let c of r){let m=0;for(let p of c.backboneAtoms)m+=1,a.set(p.id,{...p,bio:{...p.bio,positionInChain:m}});}for(let c of o)a.has(c.id)||a.set(c.id,c);let l=r.map(c=>{let m=c.backboneAtoms.map(h=>a.get(h.id)),p=c.bonds.map(h=>({...h,a1:a.get(h.a1.id),a2:a.get(h.a2.id)}));return {id:c.id,polymerType:c.polymerType,backboneAtoms:m,bonds:p,...c.annotation!==void 0?{annotation:c.annotation}:{}}}),d=s.map(c=>({...c,a1:a.get(c.a1.id),a2:a.get(c.a2.id)}));return {mol:{atoms:o.map(c=>a.get(c.id)),bonds:d,chains:l,groups:i.groups,annotations:i.annotations},survivorByOldContinuousId:e}}function fr(i,e,t){for(let n=e-1;n>=0;n--){let o=i[n];if(o!==void 0&&!t.has(o.id))return o}return null}function br(i,e,t){for(let n=e+1;n<i.length;n++){let o=i[n];if(o!==void 0&&!t.has(o.id))return o}return null}function pn(i,e,t){let n=t?.mode??\"lenient\",o=[];for(let s of yr)o.push(...s(i,e));let r=n===\"pedantic\"?o.map(s=>s.severity===\"warning\"?{...s,severity:\"error\"}:s):o;if(n===\"strict\"||n===\"pedantic\"){let s=r.filter(a=>a.severity===\"error\");if(s.length>0)throw new qe(s)}return r}var yr=[gr,_r,vr,wr,kr,Ar,Mr,Tr];function gr(i,e){let t=[],n=new Set(i.chains.map(s=>s.id));for(let s of i.bonds)s.kind!==\"cross-polymer\"&&s.kind!==\"hbond\"||(n.has(s.a1.bio.chainId)||t.push({severity:\"error\",code:\"unknown-chain-reference\",message:`Connection references unknown chain '${s.a1.bio.chainId}'`,context:{chainId:s.a1.bio.chainId,bondId:s.id}}),n.has(s.a2.bio.chainId)||t.push({severity:\"error\",code:\"unknown-chain-reference\",message:`Connection references unknown chain '${s.a2.bio.chainId}'`,context:{chainId:s.a2.bio.chainId,bondId:s.id}}));for(let s of i.chains)for(let a of i.bonds){if(a.kind!==\"cross-polymer\"&&a.kind!==\"hbond\")continue;let l=0;for(let d of s.backboneAtoms)l+=d.branchAtom!==void 0?2:1;for(let d of [a.a1,a.a2]){if(d.bio.chainId!==s.id)continue;let u=re(d,s);(u<1||u>l)&&t.push({severity:\"error\",code:\"position-out-of-range\",message:`Position ${u} out of range for chain '${s.id}' (length ${l})`,context:{chainId:s.id,atomId:d.id,found:u}});}}let o=new Set;for(let s of i.groups)s.kind!==\"bracket\"&&o.add(s.id);for(let s of i.groups)if(s.kind!==\"bracket\")for(let a of s.members)n.has(a.target)||o.has(a.target)||t.push({severity:\"error\",code:\"unknown-group-reference\",message:`Group '${s.id}' references unknown id '${a.target}'`,context:{found:a.target}});let r=new Map;for(let s of i.groups){if(s.kind===\"bracket\")continue;let a=[];for(let l of s.members)o.has(l.target)&&a.push(l.target);r.set(s.id,a);}for(let s of r.keys()){let a=new Set,l=[s];for(;l.length>0;){let d=l.pop();if(a.has(d))continue;a.add(d);let u=r.get(d)??[];for(let c of u)c===s?t.push({severity:\"error\",code:\"group-cycle\",message:`Group cycle detected involving '${s}'`,context:{found:s}}):a.has(c)||l.push(c);}}return t}function _r(i,e){let t=[];if(e===null)return t;let n=new Map;for(let o of i.chains)n.set(o.id,o.polymerType);for(let o of i.atoms){let r=n.get(o.bio.chainId);if(r===void 0)continue;let s=o.monomer,a=s?.meta;if(s===null||a?.missing===true){t.push({severity:\"warning\",code:\"unresolved-monomer\",message:`Monomer '${o.symbol}' not found in library for ${r}`,context:{chainId:o.bio.chainId,atomId:o.id,found:o.symbol}});continue}a?.ambiguous!==true&&s.smiles!==void 0&&s.smiles.length>0&&(s.rgroups.length===0?t.push({severity:\"warning\",code:\"inline-smiles-without-r-groups\",message:`Inline-SMILES monomer '${s.symbol}' has no R-groups`,context:{atomId:o.id,found:s.symbol}}):s.rgroups.length>4&&t.push({severity:\"warning\",code:\"inline-smiles-too-many-rs\",message:`Inline-SMILES monomer '${s.symbol}' has ${s.rgroups.length} R-groups (max 4 expected)`,context:{atomId:o.id,found:s.rgroups.length}}));}for(let o of i.atoms){let r=n.get(o.bio.chainId);if(!(r===void 0||e.getMonomer(r,o.symbol)!==null)){for(let a of e.getMonomerSymbolsByType(r))if(a!==o.symbol&&a.toLowerCase()===o.symbol.toLowerCase()){t.push({severity:\"info\",code:\"case-mismatch\",message:`Symbol '${o.symbol}' differs from library entry '${a}' only in case`,context:{atomId:o.id,found:o.symbol,expected:a}});break}}}return t}function vr(i,e){let t=[],n=new Map;for(let o of i.bonds)for(let[r,s]of [[o.a1,o.r1],[o.a2,o.r2]]){if(s.kind!==\"numeric\")continue;let a=n.get(r.id)??new Set;a.has(s.r)&&t.push({severity:\"error\",code:\"rgroup-already-bonded\",message:`R-group R${s.r} on atom ${r.id} already bonded`,context:{atomId:r.id,bondId:o.id,found:s.r}}),a.add(s.r),n.set(r.id,a);}for(let o of i.bonds){for(let[r,s]of [[o.a1,o.r1],[o.a2,o.r2]]){if(s.kind!==\"numeric\"||r.monomer===null)continue;let a=r.monomer.rs;(s.r<1||s.r>a)&&t.push({severity:\"error\",code:\"rgroup-not-on-monomer\",message:`R-group R${s.r} not defined on monomer '${r.symbol}' (rs=${a})`,context:{atomId:r.id,bondId:o.id,found:s.r,expected:`R1..R${a}`}});}o.kind===\"backbone\"&&o.r1.kind===\"numeric\"&&o.r2.kind===\"numeric\"&&(o.r1.r===2&&o.r2.r===1||t.push({severity:\"warning\",code:\"backbone-rgroup-misaligned\",message:`Backbone bond uses R${o.r1.r}->R${o.r2.r} (expected R2->R1)`,context:{bondId:o.id,found:`R${o.r1.r}->R${o.r2.r}`}})),o.kind===\"branch\"&&o.r1.kind===\"numeric\"&&o.r1.r!==3&&t.push({severity:\"warning\",code:\"branch-rgroup-misaligned\",message:`Branch bond uses R${o.r1.r} (expected R3 on parent)`,context:{bondId:o.id,found:`R${o.r1.r}`}});}for(let o of i.atoms){if(o.monomer===null)continue;let s=n.get(o.id)?.size??0;if(o.monomer.rs>s){let a=o.monomer.rs-s;a>0&&o.monomer.rs>0&&t.push({severity:\"info\",code:\"unmatched-r-group\",message:`Monomer '${o.symbol}' on atom ${o.id} has ${a} unused R-group(s); default cap applied`,context:{atomId:o.id,found:a}});}}return t}function wr(i,e){let t=[];for(let n of i.chains){if(n.polymerType===\"CHEM\"&&n.backboneAtoms.length>1&&t.push({severity:\"error\",code:\"chem-multiple-monomers\",message:`CHEM polymer '${n.id}' has ${n.backboneAtoms.length} monomers (expected 1)`,context:{chainId:n.id,found:n.backboneAtoms.length}}),n.polymerType===\"BLOB\")for(let o of n.backboneAtoms)o.bio.blobtype===void 0&&o.symbol!==\"Bead\"&&o.symbol!==\"Group\"&&t.push({severity:\"error\",code:\"blob-non-blob-symbol\",message:`BLOB '${n.id}' contains non-blob symbol '${o.symbol}'`,context:{chainId:n.id,atomId:o.id,found:o.symbol}});if(n.polymerType===\"RNA\"){let o=false;for(let r=0;r<n.backboneAtoms.length;r++){let s=n.backboneAtoms[r];s.biotype===b.BASE&&!o&&t.push({severity:\"error\",code:\"rna-bare-base\",message:`Bare base '${s.symbol}' without parent sugar in '${n.id}'`,context:{chainId:n.id,atomId:s.id}}),s.biotype===b.LINKER&&(n.backboneAtoms.slice(0,r).some(l=>l.biotype===b.SUGAR)||t.push({severity:\"warning\",code:\"rna-bare-linker\",message:`Bare linker '${s.symbol}' before any sugar in '${n.id}'`,context:{chainId:n.id,atomId:s.id}})),o=s.biotype===b.SUGAR||s.biotype===b.LINKER;}}}return t}function kr(i,e){let t=[],n=new Map;for(let r of i.chains)n.set(r.id,r.polymerType);let o=new Map;for(let r of i.bonds){if(r.kind!==\"hbond\")continue;o.set(r.a1.id,(o.get(r.a1.id)??0)+1),o.set(r.a2.id,(o.get(r.a2.id)??0)+1);let s=n.get(r.a1.bio.chainId),a=n.get(r.a2.bio.chainId);(s!==\"RNA\"||a!==\"RNA\")&&t.push({severity:\"error\",code:\"pair-non-rna\",message:`Hydrogen-bond connects non-RNA chains (${s}/${a})`,context:{bondId:r.id}}),(r.a1.biotype!==b.BASE||r.a2.biotype!==b.BASE)&&t.push({severity:\"warning\",code:\"pair-position-not-base\",message:\"Hydrogen-bond endpoints are not both bases\",context:{bondId:r.id,found:`${r.a1.biotype}/${r.a2.biotype}`}}),xr(r.a1.symbol,r.a2.symbol)||t.push({severity:\"warning\",code:\"pair-non-canonical\",message:`Non-canonical pair ${r.a1.symbol}-${r.a2.symbol}`,context:{bondId:r.id,found:`${r.a1.symbol}-${r.a2.symbol}`}});}for(let[r,s]of o)s>1&&t.push({severity:\"warning\",code:\"pair-already-paired\",message:`Base atom ${r} participates in ${s} pair bonds`,context:{atomId:r,found:s}});return t}function xr(i,e){let t=i.toUpperCase(),n=e.toUpperCase();return new Set([\"A:T\",\"T:A\",\"A:U\",\"U:A\",\"G:C\",\"C:G\"]).has(`${t}:${n}`)}function Ar(i,e){let t=[];for(let n of i.atoms){let o=n.bio.ambiguity;if(o!==void 0){if(n.bio.ambiguityKind===\"and\"){let r=po(o,\"+\");for(let s of r)s.ratio!==void 0&&s.ratio<0&&t.push({severity:\"error\",code:\"ratio-and-negative\",message:`AND ratio for '${s.symbol}' is negative (${s.ratio})`,context:{atomId:n.id,found:s.ratio}});}else if(n.bio.ambiguityKind===\"or\"){let r=po(o,\",\"),s=0,a=false;for(let l of r)typeof l.ratio==\"number\"&&(s+=l.ratio,a=true);a&&Math.abs(s-1)>.001&&Math.abs(s-100)>.5&&t.push({severity:\"info\",code:\"ratio-doesnt-sum-to-1\",message:`OR ratios sum to ${s} (expected 1.0 or 100)`,context:{atomId:n.id,found:s}});}}}return t}function po(i,e){let t=i.trim();t.startsWith(\"(\")&&t.endsWith(\")\")&&(t=t.slice(1,-1));let n=t.split(e),o=[];for(let r of n){let s=r.trim();if(s.length===0)continue;let a=s.indexOf(\":\");if(a<0){o.push({symbol:s});continue}let l=s.slice(0,a),d=s.slice(a+1),u=parseFloat(d);Number.isFinite(u)?o.push({symbol:l,ratio:u}):o.push({symbol:l});}return o}function Mr(i,e){let t=[],n=new Set(i.chains.map(o=>o.id));for(let o of i.annotations.perPolymer.keys())n.has(o)||t.push({severity:\"warning\",code:\"annotation-unknown-polymer\",message:`Annotation references unknown polymer '${o}'`,context:{found:o}});return t}function Tr(i,e){let t=[];for(let o of i.chains)o.backboneAtoms.length>1e4&&t.push({severity:\"info\",code:\"polymer-too-long\",message:`Polymer '${o.id}' has ${o.backboneAtoms.length} atoms (> 10000); renderer may switch to rows layout`,context:{chainId:o.id,found:o.backboneAtoms.length}});let n=0;for(let o of i.bonds)(o.kind===\"cross-polymer\"||o.kind===\"hbond\")&&(n+=1);n>1e3&&t.push({severity:\"info\",code:\"connection-count-high\",message:`${n} cross-polymer/hbond connections (> 1000); rendering may be slow`,context:{found:n}});for(let o of i.groups)o.kind===\"bracket\"&&o.repeat!==void 0&&o.repeat.max>1e4&&t.push({severity:\"warning\",code:\"bracket-repeat-too-large\",message:`Bracket repeat upper bound ${o.repeat.max} > 10000`,context:{found:o.repeat.max}});return t}function ho(i){let e=[],t=new Map;for(let n of i.chains)for(let o of n.backboneAtoms)t.set(o.id,n.id);for(let n of i.chains)for(let o of n.backboneAtoms)o.branchAtom!==void 0&&t.set(o.branchAtom.id,n.id);for(let n of i.chains){let o=Sr(n.polymerType),r=n.backboneAtoms,s=[],a=[],l=[];for(let u of n.bonds)u.kind===\"backbone\"&&l.push(u);if(o===\"RNA\")for(let u of r){if(u.biotype!==b.SUGAR){s.push(null),a.push(null);continue}let c=null,m=null;for(let p of n.bonds){if(p.kind!==\"branch\")continue;let h=p.a1.id===u.id?p.a2:p.a2.id===u.id?p.a1:null;if(h!==null&&h.biotype===b.BASE){c=h,m=p;break}}s.push(c),a.push(m);}else for(let u=0;u<r.length;u++)s.push(null),a.push(null);let d=Er(i,n.id,r,t);e.push({id:n.id,polymerType:o,backbone:r,bases:s,backboneBonds:l,baseBonds:a,isCyclic:d,...n.strandType!==void 0?{strandType:n.strandType}:{}});}return e}function Sr(i){switch(i){case v.PEPTIDE:return \"PEPTIDE\";case v.RNA:return \"RNA\";case v.CHEM:return \"CHEM\";case v.BLOB:return \"BLOB\";default:return \"BLOB\"}}function Er(i,e,t,n){if(t.length<2)return false;let o=t[0],r=t[t.length-1];for(let s of i.bonds){if(s.kind===\"backbone\"||s.kind===\"branch\")continue;let a=n.get(s.a1.id),l=n.get(s.a2.id);if(a!==e||l!==e||!(s.a1.id===r.id&&s.a2.id===o.id||s.a2.id===r.id&&s.a1.id===o.id))continue;let u=s.a1.id===o.id?s.r1:s.r2,c=s.a1.id===r.id?s.r1:s.r2,m=u.kind===\"numeric\"&&u.r===1,p=c.kind===\"numeric\"&&c.r===2;if(m&&p)return true}return false}var hn=44.800000000000004,fo=1.5*28,kt=1.5*28/hn,fn=1.5*28/hn,bn=1.5*28/hn;function we(i,e){let t=e?.bondLength??28,n=e?.origin??{x:0,y:0},o=1.6*t,r=new Map;for(let s=0;s<i.backbone.length;s++){let a=i.backbone[s];r.set(a.id,{x:n.x+s*o,y:n.y});}return r}var Cr=Math.PI/180;function xt(i,e){let t=i.backbone.length;if(t<=2){let d={};return e?.bondLength!==void 0&&(d.bondLength=e.bondLength),e?.origin!==void 0&&(d.origin=e.origin),we(i,d)}let n=e?.bondLength??28,o=e?.origin??{x:0,y:0},r=e?.startDegrees??-90,a=1.6*n/(2*Math.sin(Math.PI/t)),l=new Map;for(let d=0;d<t;d++){let u=i.backbone[d],m=(r+d*360/t)*Cr;l.set(u.id,{x:o.x+a*Math.cos(m),y:o.y+a*Math.sin(m)});}return l}var Lr=10,Br=1.5/1.6;function bo(i,e){let t=e?.bondLength??28,n=e?.origin??{x:0,y:0},o=Math.max(1,e?.perRow??Lr),r=e?.rowSpacing??Br,s=1.6*t,a=r*s,l=new Map;for(let d=0;d<i.backbone.length;d++){let u=i.backbone[d],c=Math.floor(d/o),m=d%o,p=c%2===0?n.x+m*s:n.x+(o-1-m)*s,h=n.y+c*a;l.set(u.id,{x:p,y:h});}return l}function yo(i,e){let t=new Map;for(let r=0;r<i.backbone.length;r++)t.set(i.backbone[r].id,r);let n=i.backbone.length-1,o=[];for(let r of e.bonds){if(r.kind===\"backbone\"||r.kind===\"branch\")continue;let s=t.get(r.a1.id),a=t.get(r.a2.id);if(s===void 0||a===void 0)continue;let l=Math.min(s,a),d=Math.max(s,a);d-l<2||l===0&&d===n||o.push({lo:l,hi:d});}return o}function go(i,e){return e===null?false:yo(i,e).length>0}function yn(i,e,t){if(e===null)return we(i,t);let n=t?.bondLength??28,o=t?.origin??{x:0,y:0},r=1.6*n,s=yo(i,e);if(s.length===0)return we(i,t);let a=s[0].lo,l=s[0].hi;for(let g of s)g.lo<a&&(a=g.lo),g.hi>l&&(l=g.hi);let d=i.backbone.slice(a,l+1),u=d.length,c=r/(2*Math.sin(Math.PI/u)),m={id:i.id,polymerType:i.polymerType,backbone:d,bases:new Array(u).fill(null),baseBonds:new Array(u).fill(null)},p=a,h={x:o.x+p*r+c,y:o.y},f=xt(m,{bondLength:n,origin:h,startDegrees:180}),_=new Map;for(let g=0;g<a;g++){let M=i.backbone[g];_.set(M.id,{x:o.x+g*r,y:o.y});}for(let[g,M]of f)_.set(g,M);let k=h.x+c+r;for(let g=l+1;g<i.backbone.length;g++){let M=i.backbone[g],A=g-(l+1);_.set(M.id,{x:k+A*r,y:o.y});}return _}function vo(i){let e=new Map,t=new Map;for(let n=0;n<i.backbone.length;n++){e.set(i.backbone[n].id,n);let o=i.bases[n];o!=null&&t.set(o.id,n);}return {sugarToIdx:e,baseToIdx:t}}function _o(i,e,t){let n=e.get(i);if(n!==void 0)return n;let o=t.get(i);return o!==void 0?o:null}function wo(i,e,t){let n=i.kind===\"hbond\",o=i.kind===\"cross-polymer\"&&typeof i.r1==\"object\"&&i.r1!==null&&i.r1.kind===\"pair\"&&typeof i.r2==\"object\"&&i.r2!==null&&i.r2.kind===\"pair\";if(!n&&!o)return null;let r=_o(i.a1.id,e,t),s=_o(i.a2.id,e,t);return r===null||s===null||r===s?null:{lo:Math.min(r,s),hi:Math.max(r,s)}}function ko(i,e){if(i.polymerType!==\"RNA\"||i.backbone.length===0)return false;let{sugarToIdx:t,baseToIdx:n}=vo(i);for(let o of e.bonds)if(wo(o,t,n)!==null)return true;return false}function Rr(i,e){let t=i.backbone.length,n=new Int32Array(t).fill(-1);if(t===0)return n;let{sugarToIdx:o,baseToIdx:r}=vo(i),s=[];for(let l of e.bonds){let d=wo(l,o,r);d!==null&&s.push([d.lo,d.hi]);}s.sort((l,d)=>l[0]-d[0]||d[1]-l[1]);let a=[];for(let l of s){let[d,u]=l,c=false;for(let[m,p]of a){let h=u<m||d>p,f=d>m&&u<p||d<m&&u>p;if(!h&&!f){c=true;break}}c||n[d]!==-1||n[u]!==-1||(n[d]=u,n[u]=d,a.push(l));}return n}function Ir(i){return e(0,i.length-1,null);function e(t,n,o){let r=[],s=-1,a=t;for(;a<=n;){let l=i[a];if(l>a&&l<=n){s!==-1&&(r.push({kind:\"unpaired\",from:s,to:a-1}),s=-1);let d=1;for(;a+2*d<l-2*d&&i[a+2*d]===l-2*d&&i[a+2*d-1]===-1&&i[l-2*d+1]===-1;)d+=1;let u=a+2*(d-1),c=l-2*(d-1),m=[u,c],p=e(u+1,c-1,m);r.push({kind:\"stem\",fromIdx:a,toIdx:l,numPairs:d,child:p}),a=l+1;}else s===-1&&(s=a),a+=1;}return s!==-1&&r.push({kind:\"unpaired\",from:s,to:n}),{kind:\"loop\",nodes:r,closingPair:o}}}function At(i){let e=Math.hypot(i.x,i.y);return e===0?{x:1,y:0}:{x:i.x/e,y:i.y/e}}function Pr(i){return {x:-i.y,y:i.x}}function gn(i,e,t){return {x:i.x+e*Math.cos(t),y:i.y+e*Math.sin(t)}}function Hr(i,e,t,n){let o=t+n+1;if(o<=0)return Math.max(i/2+1,e);let r=n+1,s=o*e,a=Math.max(s/(2*Math.PI),i/2+1);for(let l=0;l<64;l++){let d=i/(2*a),c=2*Math.asin(Math.min(.9999,Math.max(-0.9999,d))),m=(2*Math.PI-r*c)*a-s,p=d,h=Math.sqrt(Math.max(1e-12,1-p*p)),_=2*(-i/(2*a*a)/h),k=2*Math.PI-r*c-r*a*_;if(!Number.isFinite(k)||Math.abs(k)<1e-12)break;let g=m/k,M=a-g;if(!Number.isFinite(M)||M<i/2+.001){a=i/2+.001;break}if(a=M,Math.abs(g)<1e-9)break}return Math.max(a,i/2+.001)}function Mt(i,e,t,n,o){let r=o.chain.bases[i];r!=null&&o.out.set(r.id,{x:e.x+n*t.x,y:e.y+n*t.y});}function xo(i,e,t){let{chain:n,step:o,rail:r,baseInwardHang:s,out:a}=t,l=2*i.numPairs-1,d={x:e.normal.x,y:e.normal.y},u={x:-e.normal.x,y:-e.normal.y};for(let m=0;m<l;m++){let p=n.backbone[i.fromIdx+m],h=n.backbone[i.toIdx-m],f=m*o,_={x:e.origin.x+f*e.tangent.x,y:e.origin.y+f*e.tangent.y},k={x:e.origin.x+f*e.tangent.x+r*e.normal.x,y:e.origin.y+f*e.tangent.y+r*e.normal.y};a.set(p.id,_),a.set(h.id,k),Mt(i.fromIdx+m,_,d,s,t),Mt(i.toIdx-m,k,u,s,t);}let c=(l-1)*o;return {origin:{x:e.origin.x+c*e.tangent.x,y:e.origin.y+c*e.tangent.y},tangent:e.tangent,normal:e.normal}}function Ao(i,e,t,n){if(i.closingPair===null)return;let{step:o,rail:r,out:s}=t,a=0,l=0;for(let T of i.nodes)T.kind===\"unpaired\"?a+=T.to-T.from+1:l+=1;let d=Hr(r,o,a,l),u=s.get(t.chain.backbone[i.closingPair[0]].id),c=s.get(t.chain.backbone[i.closingPair[1]].id),m={x:(u.x+c.x)/2,y:(u.y+c.y)/2},p=Math.sqrt(Math.max(0,d*d-r/2*(r/2))),h={x:m.x+p*e.tangent.x,y:m.y+p*e.tangent.y},f=Math.atan2(u.y-h.y,u.x-h.x),k=Math.atan2(c.y-h.y,c.x-h.x)-f;for(;k>Math.PI;)k-=2*Math.PI;for(;k<=-Math.PI;)k+=2*Math.PI;let g=k>0?-1:1,M=2*Math.asin(Math.min(.9999,Math.max(-0.9999,r/(2*d)))),A=o/d,w=f;for(let T of i.nodes)if(T.kind===\"unpaired\")for(let S=T.from;S<=T.to;S++){w=w+g*A;let R=gn(h,d,w);s.set(t.chain.backbone[S].id,R);let z=At({x:R.x-h.x,y:R.y-h.y});Mt(S,R,z,t.step,t);}else {w=w+g*A;let S=gn(h,d,w);w=w+g*M;let R=gn(h,d,w);s.set(t.chain.backbone[T.fromIdx].id,S),s.set(t.chain.backbone[T.toIdx].id,R);let z=At({x:(S.x+R.x)/2-h.x,y:(S.y+R.y)/2-h.y}),de=At({x:R.x-S.x,y:R.y-S.y}),Di=xo(T,{origin:S,tangent:z,normal:de},t);Ao(T.child,Di,t);}}function $r(i,e,t){let{step:n,rail:o,out:r}=t,s={x:e.origin.x,y:e.origin.y},a={x:e.tangent.x,y:e.tangent.y},l={x:-e.normal.x,y:-e.normal.y};for(let d of i.nodes)if(d.kind===\"unpaired\")for(let u=d.from;u<=d.to;u++){let c={x:s.x,y:s.y};r.set(t.chain.backbone[u].id,c),Mt(u,c,{x:e.normal.x,y:e.normal.y},t.step,t),s={x:s.x+n*a.x,y:s.y+n*a.y};}else {let u={origin:{x:s.x,y:s.y},tangent:l,normal:a},c=xo(d,u,t);Ao(d.child,c,t),s={x:s.x+(o+n)*a.x,y:s.y+(o+n)*a.y};}}function Mo(i,e,t){let n=t?.bondLength??28,o=1.6*n,r=o/2,a=fo*(n/28)+2*r,l=t?.origin??{x:0,y:0},d=At(t?.rootDirection??{x:1,y:0}),u=Pr(d),c=new Map;if(i.backbone.length===0)return c;let m=Rr(i,e),p=Ir(m);$r(p,{origin:l,tangent:d,normal:u},{chain:i,step:o,rail:a,baseInwardHang:r,out:c});for(let _ of i.backbone)c.has(_.id)||c.set(_.id,{x:l.x,y:l.y});return c}function To(i,e,t){if(i.polymerType!==\"RNA\")return e;let n=t?.bondLength??28,o=1.6*n;for(let r=0;r<i.backbone.length;r++){let s=i.bases[r];if(s==null||e.has(s.id))continue;let a=i.backbone[r],l=e.get(a.id);if(l===void 0)continue;let d=Dr(i,r,e);e.set(s.id,{x:l.x+o*d.x,y:l.y+o*d.y});}return e}function Dr(i,e,t){let n=i.backbone[e],o=t.get(n.id);if(o===void 0)return {x:0,y:1};let r=e>0?i.backbone[e-1]:void 0,s=e<i.backbone.length-1?i.backbone[e+1]:void 0,a=r!==void 0?t.get(r.id):void 0,l=s!==void 0?t.get(s.id):void 0,d=0,u=0;if(a!==void 0&&l!==void 0){let c=l.x-a.x,m=l.y-a.y,p=Math.hypot(c,m);if(p===0)return {x:0,y:1};let h={x:m/p,y:-c/p},f={x:-m/p,y:c/p},_=h.y>=f.y?h:f;d=_.x,u=_.y;}else if(l!==void 0){let c=l.x-o.x,m=l.y-o.y,p=Math.hypot(c,m);if(p===0)return {x:0,y:1};let h={x:m/p,y:-c/p},f={x:-m/p,y:c/p},_=h.y>=f.y?h:f;d=_.x,u=_.y;}else if(a!==void 0){let c=o.x-a.x,m=o.y-a.y,p=Math.hypot(c,m);if(p===0)return {x:0,y:1};let h={x:m/p,y:-c/p},f={x:-m/p,y:c/p},_=h.y>=f.y?h:f;d=_.x,u=_.y;}else return {x:0,y:1};return {x:d,y:u}}function Eo(i,e,t,n){let o=n?.bondLength??28,r=1.6*o,s=new Map,a=new Map;for(let p of i){let h=new Set;for(let f of p.backbone)h.add(f.id);for(let f of p.bases)f!==null&&h.add(f.id);a.set(p.id,{chain:p,atomIds:h});for(let f of h)s.set(f,p);}let l=new Set;if(i.length>0){let p=i.find(h=>h.strandType===\"ss\");l.add((p??i[0]).id);}let d=new Map;for(let p of i)d.set(p.id,p.id);let u=p=>{let h=p;for(;d.get(h)!==h;)h=d.get(h);let f=p;for(;d.get(f)!==h;){let _=d.get(f);d.set(f,h),f=_;}return h},c=(p,h)=>{d.set(u(p),u(h));},m=p=>{let h=u(p),f=new Set;for(let[_,k]of a)if(u(_)===h)for(let g of k.atomIds)f.add(g);return f};for(let p of t.bonds){if(p.kind===\"backbone\"||p.kind===\"branch\")continue;let h=s.get(p.a1.id),f=s.get(p.a2.id);if(h===void 0||f===void 0||h.id===f.id)continue;p.kind===\"hbond\"&&(h.strandType===\"as\"&&f.strandType===\"ss\"?l.add(f.id):f.strandType===\"as\"&&h.strandType===\"ss\"?l.add(h.id):h.strandType===\"as\"&&!l.has(f.id)?l.add(f.id):f.strandType===\"as\"&&!l.has(h.id)&&l.add(h.id));let _=f,k=p.a1,g=p.a2;if(l.has(f.id)&&!l.has(h.id))_=h,k=p.a2,g=p.a1;else if(!l.has(h.id)&&!l.has(f.id)){if(l.size>0){let w=new Set;for(let z of l){let de=a.get(z);if(de!==void 0)for(let je of de.atomIds)w.add(je);}let T=Lo(w,e),S=a.get(h.id),R=Co(S.atomIds,e);if(T!==null&&R!==null){let z=T+r*kt-R;z>0&&et(S.atomIds,e,0,z);}}l.add(h.id),_=f,k=p.a1,g=p.a2;}else if(l.has(h.id)&&l.has(f.id)){if(u(h.id)===u(f.id)||p.kind!==\"cross-polymer\")continue;let w=m(h.id),T=m(f.id),S=w.size<=T.size,R=S?w:T,z=S?T:w,de=e.get((S?p.a1:p.a2).id),je=e.get((S?p.a2:p.a1).id);de!==void 0&&je!==void 0&&Fr(R,de,z,je,r,e),c(h.id,f.id);continue}let M=e.get(k.id),A=e.get(g.id);if(!(M===void 0||A===void 0)){if(p.kind===\"hbond\"){let w=a.get(_.id);Or(w.atomIds,e),Nr(w.atomIds,e);let T=e.get(g.id),S=M.x-T.x,R=M.y+r*fn-T.y;R=So(R,w,l,a,e,r*fn),et(w.atomIds,e,S,R);}else if(_.isCyclic&&_.backbone.length>=3){let w=a.get(_.id),T=_.id===h.id?f:h,S=a.get(T.id);Vr(w.atomIds,A,S.atomIds,M,r,e);}else {let w=a.get(_.id),T=M.x-A.x,S=M.y+r*bn-A.y;S=So(S,w,l,a,e,r*bn),et(w.atomIds,e,T,S);}l.add(_.id),c(h.id,f.id);}}return l}function So(i,e,t,n,o,r){let s=Co(e.atomIds,o);if(s===null)return i;let a=null;for(let u of t){let c=n.get(u);if(c===void 0)continue;let m=Lo(c.atomIds,o);m!==null&&(a===null||m>a)&&(a=m);}if(a===null)return i;let l=s+i,d=a+r;return l<d?d-s:i}function Co(i,e){let t=null;for(let n of i){let o=e.get(n);o!==void 0&&(t===null||o.y<t)&&(t=o.y);}return t}function Lo(i,e){let t=null;for(let n of i){let o=e.get(n);o!==void 0&&(t===null||o.y>t)&&(t=o.y);}return t}function et(i,e,t,n){for(let o of i){let r=e.get(o);r!==void 0&&e.set(o,{x:r.x+t,y:r.y+n});}}function Or(i,e){let t=0,n=0;for(let r of i){let s=e.get(r);s!==void 0&&(t+=s.x,n+=1);}if(n===0)return;let o=t/n;for(let r of i){let s=e.get(r);s!==void 0&&e.set(r,{x:2*o-s.x,y:s.y});}}function Nr(i,e){let t=0,n=0;for(let r of i){let s=e.get(r);s!==void 0&&(t+=s.y,n+=1);}if(n===0)return;let o=t/n;for(let r of i){let s=e.get(r);s!==void 0&&e.set(r,{x:s.x,y:2*o-s.y});}}function _n(i,e){let t=0,n=0,o=0;for(let r of i){let s=e.get(r);s!==void 0&&(t+=s.x,n+=s.y,o+=1);}return o===0?{x:0,y:0}:{x:t/o,y:n/o}}function Fr(i,e,t,n,o,r){let s=_n(t,r),a=n.x-s.x,l=n.y-s.y,d=Math.hypot(a,l);d<1e-6&&(a=0,l=1,d=1);let u=a/d,c=l/d,m=n.x+u*o,p=n.y+c*o;et(i,r,m-e.x,p-e.y);}function Gr(i,e,t,n){let o=Math.cos(n),r=Math.sin(n);for(let s of i){let a=e.get(s);if(a===void 0)continue;let l=a.x-t.x,d=a.y-t.y;e.set(s,{x:t.x+l*o-d*r,y:t.y+l*r+d*o});}}function Vr(i,e,t,n,o,r){let s=_n(t,r),a=n.x-s.x,l=n.y-s.y,d=Math.hypot(a,l);d<1e-6&&(a=1,l=0,d=1);let u=a/d,c=l/d,m=_n(i,r),p=Math.hypot(e.x-m.x,e.y-m.y),h=Math.atan2(e.y-m.y,e.x-m.x),f=Math.atan2(-c,-u);Gr(i,r,m,f-h);let _=n.x+u*(o+p),k=n.y+c*(o+p);et(i,r,_-m.x,k-m.y);}function Bo(i,e,t,n){let o=n?.bondLength??28,r=n?.gap??kt,s=1.6*o,a=r*s,l=0,d=false;for(let c of i)if(t.has(c.id)){for(let m of c.backbone){let p=e.get(m.id);p!==void 0&&(d?p.y>l&&(l=p.y):(l=p.y,d=true));}for(let m of c.bases){if(m===null)continue;let p=e.get(m.id);p!==void 0&&p.y>l&&(l=p.y);}}d||(l=0);let u=l+a;for(let c of i){if(t.has(c.id))continue;let m=Number.POSITIVE_INFINITY,p=Number.NEGATIVE_INFINITY;for(let f of c.backbone){let _=e.get(f.id);_!==void 0&&(_.y<m&&(m=_.y),_.y>p&&(p=_.y));}for(let f of c.bases){if(f===null)continue;let _=e.get(f.id);_!==void 0&&(_.y<m&&(m=_.y),_.y>p&&(p=_.y));}if(m===Number.POSITIVE_INFINITY){t.add(c.id);continue}let h=u-m;for(let f of c.backbone){let _=e.get(f.id);_!==void 0&&e.set(f.id,{x:_.x,y:_.y+h});}for(let f of c.bases){if(f===null)continue;let _=e.get(f.id);_!==void 0&&e.set(f.id,{x:_.x,y:_.y+h});}u=p+h+a,t.add(c.id);}}var Ur=20,zr=40,Kr=250,Wr=4;function jr(i,e){let t=1,n=Kr;for(;e>n;)t*=2,n*=Wr;return i*t}function ee(i,e){let t=e?.bondLength??28,n=e?.perRow,o=e?.rowsThreshold,r=e?.circleThreshold??20,s=ho(i),a=new Map;for(let d of s){let u=qr(d,i,t,n,o,r);for(let[c,m]of u)a.set(c,m);d.polymerType===\"RNA\"&&To(d,a,{bondLength:t});}let l=Eo(s,a,i,{bondLength:t});Bo(s,a,l,{bondLength:t});for(let d of i.atoms)a.has(d.id)||a.set(d.id,{x:0,y:0});return Yr(i,a)}function qr(i,e,t,n,o,r){let s=i.backbone.length;if(s===0)return new Map;let a=i.polymerType===\"RNA\",d=n??jr(a?zr:Ur,s),u=o??d;if(i.polymerType===\"RNA\"&&ko(i,e))return Mo(i,e,{bondLength:t});if(i.isCyclic&&s<=r)return xt(i,{bondLength:t});if(!i.isCyclic&&go(i,e))return yn(i,e,{bondLength:t});if(s>u){let c=a?2:void 0;return bo(i,c!==void 0?{bondLength:t,perRow:d,rowSpacing:c}:{bondLength:t,perRow:d})}return i.isCyclic?we(i,{bondLength:t}):yn(i,e,{bondLength:t})}function Yr(i,e){let t=new Map,n=[];for(let s of i.atoms){let a=e.get(s.id)??s.p,l={...s,p:{x:a.x,y:a.y}};t.set(s.id,l),n.push(l);}for(let s=0;s<n.length;s++){let a=i.atoms[s];if(a.branchAtom!==void 0){let l=t.get(a.branchAtom.id);l!==void 0&&(n[s]={...n[s],branchAtom:l}),t.set(n[s].id,n[s]);}}let o=[];for(let s of i.bonds){let a=t.get(s.a1.id),l=t.get(s.a2.id);a===void 0||l===void 0||o.push({...s,a1:a,a2:l});}let r=[];for(let s of i.chains){let a=s.backboneAtoms.map(d=>t.get(d.id)??d),l=s.bonds.map(d=>{let u=t.get(d.a1.id)??d.a1,c=t.get(d.a2.id)??d.a2;return {...d,a1:u,a2:c}});r.push({id:s.id,polymerType:s.polymerType,backboneAtoms:a,bonds:l,...s.annotation!==void 0?{annotation:s.annotation}:{},...s.strandType!==void 0?{strandType:s.strandType}:{}});}return {atoms:n,bonds:o,chains:r,groups:i.groups,annotations:i.annotations}}function Tt(i,e){let t=Math.min(i.x,e.x),n=Math.min(i.y,e.y),o=Math.max(i.x+i.width,e.x+e.width),r=Math.max(i.y+i.height,e.y+e.height);return {x:t,y:n,width:o-t,height:r-n}}function x(i){if(Number.isInteger(i))return i===0?\"0\":i.toString();if(!Number.isFinite(i)||Object.is(i,-0))return \"0\";let e=Math.round(i*1e3)/1e3;return e===0?\"0\":e.toString()}function vn(i){if(i.length===0)return \"\";let e=i[0],t=`M ${x(e.x)} ${x(e.y)}`;for(let n=1;n<i.length;n++){let o=i[n];t+=` L ${x(o.x)} ${x(o.y)}`;}return t+=` L ${x(e.x)} ${x(e.y)} Z`,t}function Ro(i,e,t,n){let o=[],r=360/e;for(let s=0;s<e;s++){let a=(n+s*r)*Math.PI/180;o.push({x:i.x+t*Math.cos(a),y:i.y+t*Math.sin(a)});}return o}function Io(i,e,t=-30){return vn(Ro(i,6,e,t))}function Po(i,e){let t=[{x:i.x,y:i.y-e},{x:i.x+e,y:i.y},{x:i.x,y:i.y+e},{x:i.x-e,y:i.y}];return vn(t)}function Ho(i,e,t=-90){return vn(Ro(i,5,e,t))}function wn(i,e,t,n){let o=Math.abs(e)/2,r=Math.abs(t)/2,s=Math.max(0,Math.min(n,o,r)),a=i.x-o,l=i.y-r,d=a+o*2,u=l+r*2,c=`M ${x(a+s)} ${x(l)}`;return c+=` L ${x(d-s)} ${x(l)}`,c+=` A ${x(s)} ${x(s)} 0 0 1 ${x(d)} ${x(l+s)}`,c+=` L ${x(d)} ${x(u-s)}`,c+=` A ${x(s)} ${x(s)} 0 0 1 ${x(d-s)} ${x(u)}`,c+=` L ${x(a+s)} ${x(u)}`,c+=` A ${x(s)} ${x(s)} 0 0 1 ${x(a)} ${x(u-s)}`,c+=` L ${x(a)} ${x(l+s)}`,c+=` A ${x(s)} ${x(s)} 0 0 1 ${x(a+s)} ${x(l)}`,c+=\" Z\",c}function kn(i,e,t){let n=Math.abs(e),o=Math.abs(t);return `M ${x(i.x-n)} ${x(i.y)} A ${x(n)} ${x(o)} 0 1 0 ${x(i.x+n)} ${x(i.y)} A ${x(n)} ${x(o)} 0 1 0 ${x(i.x-n)} ${x(i.y)} Z`}function $o(i,e,t,n){return wn(i,e,t,n)}function Do(i,e){return kn(i,e,e)}function Oo(i,e){return `M ${x(i.x)} ${x(i.y)} L ${x(e.x)} ${x(e.y)}`}function No(i,e,t=6){let n=e.x-i.x,o=e.y-i.y,r=Math.sqrt(n*n+o*o);if(r===0)return `M ${x(i.x)} ${x(i.y)} L ${x(i.x)} ${x(i.y)}`;let s=n/r,a=o/r,l=-a,d=s,u=(i.x+e.x)/2,c=(i.y+e.y)/2,m=t/2,p=Math.min(t*.6,r*.25),h=u-s*p,f=c-a*p,_=u+s*p,k=c+a*p;return `M ${x(h-l*m)} ${x(f-d*m)} L ${x(h+l*m)} ${x(f+d*m)} M ${x(_-l*m)} ${x(k-d*m)} L ${x(_+l*m)} ${x(k+d*m)}`}function xn(i,e,t,n){switch(i){case \"hexagon\":{let o=t*Math.sqrt(3)/2,r=t;return {x:e.x-o,y:e.y-r,width:o*2,height:r*2}}case \"diamond\":return {x:e.x-t,y:e.y-t,width:t*2,height:t*2};case \"pentagon\":{let o=Math.cos(18*Math.PI/180)*t,r=-t,s=Math.sin(54*Math.PI/180)*t;return {x:e.x-o,y:e.y+r,width:o*2,height:s-r}}case \"rounded-rect\":case \"blob\":{let o=n??t,r=Math.abs(t)/2,s=Math.abs(o)/2;return {x:e.x-r,y:e.y-s,width:r*2,height:s*2}}case \"ellipse\":{let o=Math.abs(t),r=Math.abs(n??t);return {x:e.x-o,y:e.y-r,width:o*2,height:r*2}}case \"circle\":{let o=Math.abs(t);return {x:e.x-o,y:e.y-o,width:o*2,height:o*2}}}}var St=14,Fo='\"Helvetica Neue\", Helvetica, Arial, sans-serif';function Go(i){return {aa:{size:i*.72,strokeWidth:5},sugar:{size:i*1.39,strokeWidth:5,cornerRadius:i*.3},base:{size:i*.88,strokeWidth:5},linker:{size:i*.63,strokeWidth:5},chem:{size:i*1.49,strokeWidth:5,cornerRadius:i*.5},blob:{size:i*1.64,strokeWidth:5,cornerRadius:i*.8},nucleotide:{size:i*.98,strokeWidth:5}}}var I={name:\"light\",background:\"#ffffff\",defaultStroke:\"#202020\",defaultFill:\"#ffffff\",selectionColor:\"#FFC107\",highlightColor:\"#A4E2DC\",errorColor:\"#cc0000\",fontSize:St,fontFamily:Fo,bondLength:28,textColor:\"#000000\",idColor:\"#00aa00\",annotationColor:\"#FFA500\",tagDotColor:\"#dd2222\",hbondColor:\"#888888\",nonCanonicalHbondColor:\"#cc8800\",crossPolymerBondColor:\"#1f5fcd\",colorTheme:_e,palette:{softenCanvas:false},shapes:Go(St)},An={name:\"dark\",background:\"#1a1d23\",defaultStroke:\"#e0e0e0\",defaultFill:\"#2b2f37\",selectionColor:\"#FFD54F\",highlightColor:\"#7DD8CC\",errorColor:\"#ff5050\",fontSize:St,fontFamily:Fo,bondLength:28,textColor:\"#ffffff\",idColor:\"#33ff33\",annotationColor:\"#FFB84D\",tagDotColor:\"#ff6464\",hbondColor:\"#aaaaaa\",nonCanonicalHbondColor:\"#ffaa44\",crossPolymerBondColor:\"#6699ff\",colorTheme:Ce,palette:{softenCanvas:false},shapes:Go(St)};function Xr(i,e){let t=e.shapes===void 0?i.shapes:{...i.shapes,...e.shapes};return {...i,...e,shapes:t}}function tt(i,e){switch(e){case b.AA:return i.shapes.aa;case b.SUGAR:return i.shapes.sugar;case b.BASE:return i.shapes.base;case b.LINKER:return i.shapes.linker;case b.CHEM:return i.shapes.chem;case b.BLOB:return i.shapes.blob;case b.NUCLEOTIDE:return i.shapes.nucleotide}}var Vo=\"*\";function Et(i){switch(i){case b.AA:return \"hexagon\";case b.SUGAR:return \"rounded-rect\";case b.BASE:return \"diamond\";case b.LINKER:return \"circle\";case b.CHEM:return \"rounded-rect\";case b.BLOB:return \"blob\";case b.NUCLEOTIDE:return \"pentagon\"}}function Be(i,e,t=0){let n=tt(e,i.biotype);if(i.symbol===Vo)return Do(i.p,n.size+t);switch(Et(i.biotype)){case \"hexagon\":{let r=t===0?0:t/Math.cos(Math.PI/6);return Io(i.p,n.size+r)}case \"diamond\":{let r=t===0?0:t/Math.cos(Math.PI/4);return Po(i.p,n.size+r)}case \"pentagon\":{let r=t===0?0:t/Math.cos(Math.PI/5);return Ho(i.p,n.size+r)}case \"rounded-rect\":return wn(i.p,n.size+2*t,n.size+2*t,(n.cornerRadius??0)+t);case \"blob\":return $o(i.p,n.size+2*t,n.size+2*t,(n.cornerRadius??0)+t);case \"circle\":return kn(i.p,n.size+t,n.size+t)}}function ue(i,e){let t=tt(e,i.biotype),n=i.symbol===Vo?\"circle\":Et(i.biotype),o;switch(n){case \"hexagon\":case \"diamond\":case \"pentagon\":case \"circle\":o=xn(n,i.p,t.size);break;case \"rounded-rect\":case \"blob\":o=xn(n,i.p,t.size,t.size);break}let r=t.strokeWidth/2;return {x:o.x-r,y:o.y-r,width:o.width+2*r,height:o.height+2*r}}function Uo(i,e){return tt(e,i.biotype).size}function me(i,e){return tt(e,i.biotype)}var Jr=/[&\"'<>]/,Zr=/[&<>]/;function Qr(i){return Jr.test(i)?i.replace(/&/g,\"&amp;\").replace(/\"/g,\"&quot;\").replace(/'/g,\"&apos;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\"):i}function se(i){return Zr.test(i)?i.replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\"):i}function ke(i){if(Number.isInteger(i))return i===0?\"0\":i.toString();if(!Number.isFinite(i)||Object.is(i,-0))return \"0\";let e=Math.round(i*1e3)/1e3;return e===0?\"0\":e.toString()}function L(i,e,t){let n=`<${i}`;if(e!==void 0)for(let o in e){let r=e[o];if(!(r===void 0||r===false)){if(r===true){n+=` ${o}`;continue}typeof r==\"number\"?n+=` ${o}=\"${ke(r)}\"`:n+=` ${o}=\"${Qr(r)}\"`;}}return t===void 0?`${n}/>`:typeof t==\"string\"?`${n}>${t}</${i}>`:`${n}>${t.join(\"\")}</${i}>`}var es=\"http://www.w3.org/2000/svg\",Mn=.525,Tn=.8,Sn=1.125,ts=\".hw-atom{transition:stroke-width 120ms,filter 120ms;}.hw-atom:focus{outline:none;}.hw-atom__shape{shape-rendering:geometricPrecision;}.hw-bond__stroke{stroke-linecap:round;}\",ns=[[\"A\",\"T\"],[\"A\",\"U\"],[\"G\",\"C\"]];function Lt(i,e={}){let t=e.theme??I,n=e.width??400,o=e.height??100,r=e.padding??16,s=e.backColor??t.background,a=e.showIds??false,l=e.showAnnotations??true,d=e.fontSize??t.fontSize,u=e.selectedAtomIds??new Set,c=e.highlightedAtomIds??new Set;e.documentImpl??(typeof globalThis<\"u\"&&typeof globalThis.document<\"u\"?globalThis.document:void 0);let p=e.fixedModelBbox??En(i,t),h=os(p,n,o,r,e.maxScale??1),f=h.x-p.x*h.scale,_=h.y-p.y*h.scale,k=Cn(i,t,c),g=Ln(i,t,u),M=is(i,t),A=cs(i,t,d,a,e.bondLength??t.bondLength),w=l?ps(i,t,d):\"\",T=`translate(${ke(f)} ${ke(_)}) scale(${ke(h.scale)})`,S=L(\"g\",{class:\"hw-content\",transform:T},[M,A,w,k,g].join(\"\")),R=L(\"defs\",void 0,`<style>${ts}</style>`),z=L(\"rect\",{class:\"hw-bg\",x:0,y:0,width:n,height:o,fill:s});return {svg:L(\"svg\",{xmlns:es,viewBox:`0 0 ${ke(n)} ${ke(o)}`,width:n,height:o,\"data-hw-theme\":t.name},[R,z,S].join(\"\")),bbox:{x:p.x,y:p.y,width:p.width,height:p.height},drawBox:{x:h.x,y:h.y,width:h.width,height:h.height,scale:h.scale}}}function En(i,e=I){if(i.atoms.length===0)return {x:0,y:0,width:0,height:0};let t=ue(i.atoms[0],e);for(let n=1;n<i.atoms.length;n++)t=Tt(t,ue(i.atoms[n],e));return t}function os(i,e,t,n,o=1){let r=Math.max(0,e-2*n),s=Math.max(0,t-2*n),a=1;if(i.width>0||i.height>0){let u=i.width>0?r/i.width:Number.POSITIVE_INFINITY,c=i.height>0?s/i.height:Number.POSITIVE_INFINITY;a=Math.min(u,c,o),(!Number.isFinite(a)||a<=0)&&(a=1);}let l=i.width*a,d=i.height*a;return {x:(e-l)/2,y:(t-d)/2,width:l,height:d,scale:a}}var Ct=3;function Cn(i,e,t){if(t.size===0)return L(\"g\",{class:\"hw-layer hw-highlights\"},\"\");let n=[];for(let o of i.atoms){if(!t.has(o.id))continue;let s=(me(o,e).strokeWidth+Ct)/2,a=Be(o,e,s);n.push(L(\"path\",{d:a,class:\"hw-highlight\",fill:\"none\",stroke:e.highlightColor,\"stroke-width\":Ct,\"stroke-linejoin\":\"round\",\"stroke-linecap\":\"round\",\"data-symbol\":o.symbol,\"data-ring-atom-id\":o.id,\"data-testid\":`highlight-ring-${o.id}`}));}return L(\"g\",{class:\"hw-layer hw-highlights\"},n.join(\"\"))}function Ln(i,e,t){if(t.size===0)return L(\"g\",{class:\"hw-layer hw-selections\"},\"\");let n=[];for(let o of i.atoms){if(!t.has(o.id))continue;let s=(me(o,e).strokeWidth+Ct)/2,a=Be(o,e,s);n.push(L(\"path\",{d:a,class:\"hw-selection\",fill:\"none\",stroke:e.selectionColor,\"stroke-width\":Ct,\"stroke-linejoin\":\"round\",\"stroke-linecap\":\"round\",\"data-symbol\":o.symbol,\"data-ring-atom-id\":o.id,\"data-testid\":`selection-ring-${o.id}`}));}return L(\"g\",{class:\"hw-layer hw-selections\"},n.join(\"\"))}function is(i,e){let t=[];for(let n of i.bonds)t.push(rs(n,e));return L(\"g\",{class:\"hw-layer hw-bonds\"},t.join(\"\"))}function rs(i,e){let t=i.a1.p,n=i.a2.p,o=ss(i,e),r=as(i),s=ls(),l={d:Oo(t,n),class:\"hw-bond__stroke\",fill:\"none\",stroke:o,\"stroke-width\":s};r!==void 0&&(l[\"stroke-dasharray\"]=r);let d=[L(\"path\",l)];return i.kind===\"hbond\"&&d.push(L(\"path\",{d:No(t,n,e.fontSize*.6),class:\"hw-bond__hash\",fill:\"none\",stroke:o,\"stroke-width\":s})),L(\"g\",{class:`hw-bond hw-bond--${i.kind}`,\"data-bond-id\":i.id,\"data-kind\":i.kind,\"data-testid\":`canvas-bond-${i.id}`},d.join(\"\"))}function ss(i,e){switch(i.kind){case \"backbone\":case \"branch\":return e.defaultStroke;case \"cross-polymer\":return e.crossPolymerBondColor;case \"hbond\":return ds(i)?e.hbondColor:e.nonCanonicalHbondColor;case \"group\":return e.defaultStroke}}function as(i){if(i.kind===\"hbond\")return \"4 3\"}function ls(i){return Sn}function ds(i){if(i.a1.biotype!==b.BASE||i.a2.biotype!==b.BASE)return false;let e=zo(i.a1),t=zo(i.a2);for(let[n,o]of ns)if(e===n&&t===o||e===o&&t===n)return true;return false}function zo(i){let e=i.monomer?.naturalAnalog,t=e!==void 0&&e!==\"\"?e:i.symbol;return t.length===0?\"\":t.charAt(0).toUpperCase()}function cs(i,e,t,n,o=e.bondLength){let r=[];for(let s of i.atoms)s.hidden||r.push(us(s,e,t,n,o));return L(\"g\",{class:\"hw-layer hw-atoms\"},r.join(\"\"))}function us(i,e,t,n,o=e.bondLength){let r=me(i,e),s=Be(i,e),a=P(i.monomer,i.biotype,e.colorTheme),l=a.background,d=a.text,u=i.symbol===\"*\"?\"3 3\":void 0,c={d:s,class:\"hw-atom__shape\",fill:l,stroke:l,\"stroke-width\":r.strokeWidth,\"stroke-linejoin\":\"round\",\"stroke-linecap\":\"round\"};u!==void 0&&(c[\"stroke-dasharray\"]=u);let m=[L(\"path\",c)],p=i.monomer?.symbol??i.symbol;if(p!==\"\"){let f=p.length<=1?1:Math.min(1,2/p.length),_=t*f;m.push(L(\"text\",{class:\"hw-atom__label\",x:i.p.x,y:i.p.y+_*.35,\"text-anchor\":\"middle\",\"font-size\":_,\"font-family\":e.fontFamily,fill:d},se(p)));}if(i.bio.ambiguity!==void 0&&i.bio.ambiguity!==\"\"&&m.push(L(\"text\",{class:\"hw-atom__ambiguity\",x:i.p.x,y:i.p.y+r.size+t*.7,\"text-anchor\":\"middle\",\"font-size\":t*.7,\"font-family\":e.fontFamily,fill:d},se(i.bio.ambiguity))),n){let f=o*Mn;m.push(L(\"text\",{class:\"hw-atom__id\",x:i.p.x-f,y:i.p.y-f,\"font-size\":t*Tn,\"font-family\":e.fontFamily,fill:e.idColor},se(String(i.bio.continuousId))));}i.tag!==void 0&&i.tag!==\"\"&&m.push(L(\"circle\",{class:\"hw-atom__tag-dot\",cx:i.p.x+r.size*.7,cy:i.p.y-r.size*.7,r:Math.max(2,t*.18),fill:e.tagDotColor}));let h=ms(i);return L(\"g\",{class:\"hw-atom\",\"data-atom-id\":i.id,\"data-symbol\":i.symbol,\"data-chain-id\":i.bio.chainId,\"data-biotype\":i.biotype,\"data-testid\":`canvas-atom-${i.id}`,tabindex:0,role:\"button\",\"aria-label\":h},m.join(\"\"))}function ms(i){let e=i.symbol===\"\"?\"?\":i.symbol,t=i.bio.chainId===\"\"?\"unknown chain\":i.bio.chainId,n=i.bio.positionInChain;return `${e} at position ${n} of ${t}`}function ps(i,e,t){let n=[];for(let o of i.bonds){if(o.ratio===void 0)continue;let r=(o.a1.p.x+o.a2.p.x)/2,s=(o.a1.p.y+o.a2.p.y)/2,a=o.ratio.denominator!==void 0?`${o.ratio.numerator}/${o.ratio.denominator}`:`${o.ratio.numerator}`;n.push(L(\"text\",{class:\"hw-annotation hw-annotation--bond-ratio\",x:r,y:s-t*.4,\"text-anchor\":\"middle\",\"font-size\":t*.7,\"font-family\":e.fontFamily,fill:e.annotationColor},se(a)));}for(let o of i.atoms){let r=o.bio.annotation;if(r===void 0||r===\"\")continue;let s=me(o,e);n.push(L(\"text\",{class:\"hw-annotation hw-annotation--atom\",x:o.p.x+s.size+2,y:o.p.y-s.size,\"font-size\":t*.7,\"font-family\":e.fontFamily,fill:e.annotationColor},se(r)));}for(let o of i.chains){if(o.annotation===void 0||o.annotation===\"\")continue;let r=o.backboneAtoms[0];r!==void 0&&n.push(L(\"text\",{class:\"hw-annotation hw-annotation--chain\",x:r.p.x,y:r.p.y-e.fontSize*1.4,\"font-size\":t*.8,\"font-family\":e.fontFamily,fill:e.annotationColor},se(o.annotation)));}for(let o of i.chains){if(o.polymerType!==\"RNA\")continue;let r=o.backboneAtoms;if(r.length<2)continue;let s=r[0],a=r[r.length-1],l=r.length>=2?r[1]:null,d=r.length>=2?r[r.length-2]:null,u=e.fontSize*1.4,c=Ko(s.p,l?.p??null,u),m=Ko(a.p,d?.p??null,u),p=o.strandType!==void 0?`5'${o.strandType}`:\"5'\",h=o.strandType!==void 0?`3'${o.strandType}`:\"3'\";n.push(L(\"text\",{class:\"hw-annotation hw-annotation--prime hw-annotation--prime-5\",\"data-testid\":`prime-5-${o.id}`,x:c.x,y:c.y,\"text-anchor\":\"middle\",\"dominant-baseline\":\"central\",\"font-size\":t*.85,\"font-family\":e.fontFamily,\"font-weight\":\"bold\",fill:e.annotationColor},se(p))),n.push(L(\"text\",{class:\"hw-annotation hw-annotation--prime hw-annotation--prime-3\",\"data-testid\":`prime-3-${o.id}`,x:m.x,y:m.y,\"text-anchor\":\"middle\",\"dominant-baseline\":\"central\",\"font-size\":t*.85,\"font-family\":e.fontFamily,\"font-weight\":\"bold\",fill:e.annotationColor},se(h)));}return L(\"g\",{class:\"hw-layer hw-annotations\"},n.join(\"\"))}function Ko(i,e,t){if(e===null)return {x:i.x-t,y:i.y};let n=i.x-e.x,o=i.y-e.y,r=Math.hypot(n,o);return r===0?{x:i.x-t,y:i.y}:{x:i.x+t*(n/r),y:i.y+t*(o/r)}}function Bt(i,e,t,n={}){let o=n.theme??I,r=n.padding??16,s=fs(e,o),a=bs(s,t.width,t.height,r,n.maxScale??1),l=t.x+a.x,d=t.y+a.y;return i.save(),i.beginPath(),i.rect(t.x,t.y,t.width,t.height),i.clip(),n.backColor!==void 0&&(i.fillStyle=n.backColor,i.fillRect(t.x,t.y,t.width,t.height)),i.translate(l,d),i.scale(a.scale,a.scale),i.translate(-s.x,-s.y),ys(i,e,o),_s(i,e,o,n.fontSize??o.fontSize,n.showIds??false,n.bondLength??o.bondLength),n.showAnnotations!==false&&gs(i,e,o,n.fontSize??o.fontSize),i.restore(),{bbox:{x:s.x,y:s.y,width:s.width,height:s.height},drawBox:{x:l,y:d,width:a.width,height:a.height}}}async function Yo(i,e={}){let t=hs();if(t===null&&e.canvas===void 0)throw new Error(\"renderToPng: OffscreenCanvas is not available in this environment\");let n=e.theme??I,o=e.width??400,r=e.height??100,s=e.pixelRatio??1,a=e.canvas??new t(Math.max(1,Math.round(o*s)),Math.max(1,Math.round(r*s))),l=a.getContext(\"2d\");if(l===null)throw new Error(\"renderToPng: failed to acquire 2D context\");l.save(),l.scale(s,s),Bt(l,i,{x:0,y:0,width:o,height:r},{...e,backColor:e.backColor??n.background}),l.restore();let d=a;if(typeof d.convertToBlob!=\"function\")throw new Error(\"renderToPng: canvas.convertToBlob is not available\");let c=await(await d.convertToBlob({type:\"image/png\"})).arrayBuffer();return new Uint8Array(c)}function hs(){let i=globalThis;return typeof i.OffscreenCanvas==\"function\"?i.OffscreenCanvas:null}function fs(i,e){if(i.atoms.length===0)return {x:0,y:0,width:0,height:0};let t=ue(i.atoms[0],e);for(let n=1;n<i.atoms.length;n++)t=Tt(t,ue(i.atoms[n],e));return t}function bs(i,e,t,n,o=1){let r=Math.max(0,e-2*n),s=Math.max(0,t-2*n),a=1;if(i.width>0||i.height>0){let u=i.width>0?r/i.width:Number.POSITIVE_INFINITY,c=i.height>0?s/i.height:Number.POSITIVE_INFINITY;a=Math.min(u,c,o),(!Number.isFinite(a)||a<=0)&&(a=1);}let l=i.width*a,d=i.height*a;return {x:(e-l)/2,y:(t-d)/2,width:l,height:d,scale:a}}function ys(i,e,t){for(let n of e.bonds)i.save(),i.strokeStyle=ws(n,t),i.lineWidth=ks(),n.kind===\"hbond\"?i.setLineDash([4,3]):i.setLineDash([]),i.beginPath(),i.moveTo(n.a1.p.x,n.a1.p.y),i.lineTo(n.a2.p.x,n.a2.p.y),i.stroke(),i.restore();}function gs(i,e,t,n){i.save(),i.fillStyle=t.annotationColor,i.font=`${n*.7}px ${t.fontFamily}`,i.textAlign=\"left\",i.textBaseline=\"alphabetic\";for(let r of e.atoms){let s=r.bio.annotation;if(s===void 0||s===\"\")continue;let a=me(r,t);i.fillText(s,r.p.x+a.size+2,r.p.y-a.size);}i.font=`${n*.8}px ${t.fontFamily}`;for(let r of e.chains){if(r.annotation===void 0||r.annotation===\"\")continue;let s=r.backboneAtoms[0];s!==void 0&&i.fillText(r.annotation,s.p.x,s.p.y-t.fontSize*1.4);}i.font=`bold ${n*.85}px ${t.fontFamily}`,i.textAlign=\"center\",i.textBaseline=\"middle\";let o=t.fontSize*1.4;for(let r of e.chains){if(r.polymerType!==\"RNA\")continue;let s=r.backboneAtoms;if(s.length<2)continue;let a=s[0],l=s[s.length-1],d=s.length>=2?s[1]:null,u=s.length>=2?s[s.length-2]:null,c=Wo(a.p,d?.p??null,o),m=Wo(l.p,u?.p??null,o),p=r.strandType!==void 0?`5'${r.strandType}`:\"5'\",h=r.strandType!==void 0?`3'${r.strandType}`:\"3'\";i.fillText(p,c.x,c.y),i.fillText(h,m.x,m.y);}i.restore();}function Wo(i,e,t){if(e===null)return {x:i.x-t,y:i.y};let n=i.x-e.x,o=i.y-e.y,r=Math.hypot(n,o);return r===0?{x:i.x-t,y:i.y}:{x:i.x+t*(n/r),y:i.y+t*(o/r)}}function _s(i,e,t,n,o=false,r=t.bondLength){for(let s of e.atoms){if(s.hidden)continue;let a=me(s,t),l=P(s.monomer,s.biotype,t.colorTheme);i.save(),i.fillStyle=l.background,i.strokeStyle=l.background,i.lineWidth=a.strokeWidth,i.lineJoin=\"round\",i.lineCap=\"round\",s.symbol===\"*\"?i.setLineDash([3,3]):i.setLineDash([]),vs(i,s,a.size,a.cornerRadius??0),i.fill(),i.stroke(),i.restore();let d=s.monomer?.symbol??s.symbol;if(d!==\"\"){let u=d.length<=1?1:Math.min(1,2/d.length),c=n*u;i.save(),i.fillStyle=l.text,i.font=`${c}px ${t.fontFamily}`,i.textAlign=\"center\",i.textBaseline=\"middle\",i.fillText(d,s.p.x,s.p.y),i.restore();}if(o){let u=r*Mn;i.save(),i.fillStyle=t.idColor,i.font=`${n*Tn}px ${t.fontFamily}`,i.textAlign=\"right\",i.textBaseline=\"bottom\",i.fillText(String(s.bio.continuousId),s.p.x-u,s.p.y-u),i.restore();}}}function vs(i,e,t,n){let o=e.p,r=e.symbol===\"*\"?\"circle\":Et(e.biotype);switch(i.beginPath(),r){case \"hexagon\":jo(i,o,6,t,-30);break;case \"diamond\":i.moveTo(o.x,o.y-t),i.lineTo(o.x+t,o.y),i.lineTo(o.x,o.y+t),i.lineTo(o.x-t,o.y),i.closePath();break;case \"pentagon\":jo(i,o,5,t,-90);break;case \"rounded-rect\":case \"blob\":{let s=t/2,a=Math.max(0,Math.min(n,s)),l=o.x-s,d=o.y-s,u=s*2,c=s*2;i.moveTo(l+a,d),i.lineTo(l+u-a,d),i.quadraticCurveTo(l+u,d,l+u,d+a),i.lineTo(l+u,d+c-a),i.quadraticCurveTo(l+u,d+c,l+u-a,d+c),i.lineTo(l+a,d+c),i.quadraticCurveTo(l,d+c,l,d+c-a),i.lineTo(l,d+a),i.quadraticCurveTo(l,d,l+a,d),i.closePath();break}case \"circle\":i.ellipse(o.x,o.y,t,t,0,0,Math.PI*2);break}}function jo(i,e,t,n,o){let r=360/t;for(let s=0;s<t;s++){let a=(o+s*r)*Math.PI/180,l=e.x+n*Math.cos(a),d=e.y+n*Math.sin(a);s===0?i.moveTo(l,d):i.lineTo(l,d);}i.closePath();}function ws(i,e){switch(i.kind){case \"backbone\":case \"branch\":return e.defaultStroke;case \"cross-polymer\":return e.crossPolymerBondColor;case \"hbond\":return As(i)?e.hbondColor:e.nonCanonicalHbondColor;case \"group\":return e.defaultStroke}}function ks(i){return Sn}var xs=[[\"A\",\"T\"],[\"A\",\"U\"],[\"G\",\"C\"]];function As(i){if(i.a1.biotype!==b.BASE||i.a2.biotype!==b.BASE)return false;let e=qo(i.a1),t=qo(i.a2);for(let[n,o]of xs)if(e===n&&t===o||e===o&&t===n)return true;return false}function qo(i){let e=i.monomer?.naturalAnalog,t=e!==void 0&&e!==\"\"?e:i.symbol;return t.length===0?\"\":t.charAt(0).toUpperCase()}function pe(i){let e=new Map,t=new Map;for(let o of i.bonds){let r=o.a1.id,s=o.a2.id,a=t.get(r);a===void 0&&(a=[],t.set(r,a)),a.push(o);let l=t.get(s);l===void 0&&(l=[],t.set(s,l)),l.push(o);}for(let o of i.atoms)Xo(e,o,t.get(o.id)??[]);for(let o of i.groups){if(o.kind!==\"bracket\")continue;let r=o.repeat?.min??1;if(r===1)continue;let s=new Set(o.members.map(l=>l.target)),a=new Map;for(let l of i.atoms){if(!s.has(l.bio.chainId))continue;let d=new Map;Xo(d,l,t.get(l.id)??[]);for(let[u,c]of d)a.set(u,(a.get(u)??0)+c*(r-1));}for(let[l,d]of a)e.set(l,(e.get(l)??0)+d);}for(let[o,r]of [...e])r===0&&e.delete(o);let n=Ss(e);return {elements:e,mw:n}}var Ms={H:1.008,C:12.011,N:14.007,O:15.999,F:18.998,Na:22.99,Mg:24.305,P:30.974,S:32.06,Cl:35.45,K:39.098,Ca:40.078,Br:79.904,I:126.904,Fe:55.845,Zn:65.38,Cu:63.546},Ts={C:4,N:3,O:2,S:2,P:3,F:1,Cl:1,Br:1,I:1,H:1};function Ss(i){let e=0;for(let[t,n]of i){let o=Ms[t];o!==void 0&&(e+=o*n);}return Math.round(e*1e3)/1e3}function Xo(i,e,t){if(e.monomer===null)return;let n=Cs(e.monomer);for(let[o,r]of n.elements)i.set(o,(i.get(o)??0)+r);for(let o of t){if(o.kind===\"hbond\"||o.kind===\"group\")continue;let r=o.a1.id===e.id?o.r1:o.r2,s=Es(e.monomer,r);if(s===void 0)continue;let a=Zo(s);for(let[l,d]of a)i.set(l,(i.get(l)??0)-d);}}function Es(i,e){if(e.kind!==\"numeric\"&&e.kind!==\"positional\")return;let t=(e.kind===\"numeric\",e.r);for(let n of i.rgroups){let o=/^R([1-9][0-9]*)$/.exec(n.label);if(o!==null&&parseInt(o[1],10)===t)return n.capGroupName}}function Zo(i){let e=new Map;switch(i){case \"H\":e.set(\"H\",1);break;case \"OH\":e.set(\"H\",1),e.set(\"O\",1);break;}return e}var Jo=new WeakMap;function Cs(i){let e=Jo.get(i);if(e!==void 0)return e;let t=Ls(i);return Jo.set(i,t),t}function Ls(i){let e=new Map;if(i.molfile===void 0||i.molfile===\"\")return {elements:e};let t=Bs(i.molfile);if(t===null)return {elements:e};let{atoms:n,bondOrders:o}=t;for(let r=0;r<n.length;r++){let s=n[r];if(s===\"R\"||s===\"R#\"||s===\"*\")continue;e.set(s,(e.get(s)??0)+1);let a=Ts[s];if(a===void 0)continue;let l=o[r]??0,d=a-l;d>0&&e.set(\"H\",(e.get(\"H\")??0)+d);}for(let r of i.rgroups){let s=r.capGroupName;if(s===void 0)continue;let a=Zo(s);for(let[l,d]of a)e.set(l,(e.get(l)??0)+d);}return {elements:e}}function Bs(i){let e=i.split(/\\r\\n|\\n|\\r/);if(e.length<5)return null;let t=e[3];if(t===void 0||t.length<6)return null;let n=parseInt(t.slice(0,3),10),o=parseInt(t.slice(3,6),10);if(!Number.isFinite(n)||!Number.isFinite(o)||e.length<4+n+o)return null;let r=[];for(let a=0;a<n;a++){let l=e[4+a];if(l===void 0)return null;let d=l.slice(31,34).trim();r.push(d);}let s=new Array(n).fill(0);for(let a=0;a<o;a++){let l=e[4+n+a];if(l===void 0)return null;let d=parseInt(l.slice(0,3),10),u=parseInt(l.slice(3,6),10),c=parseInt(l.slice(6,9),10);if(!Number.isFinite(d)||!Number.isFinite(u)||!Number.isFinite(c))continue;let m=c===4?1:c;d>=1&&d<=n&&(s[d-1]=(s[d-1]??0)+m),u>=1&&u<=n&&(s[u-1]=(s[u-1]??0)+m);}return {atoms:r,bondOrders:s}}function Re(i){return pe(i).mw}var Bn={W:5.5,Y:1.49,C:.0625},Rs={AA:13.65,AC:10.67,AG:12.79,AU:12.14,CA:10.67,CC:7.52,CG:9.39,CU:8.37,GA:12.79,GC:9.39,GG:11.77,GU:10.21,UA:12.14,UC:8.37,UG:10.21,UU:8.99},Qo={A:15.4,C:7.4,G:11.7,U:10,T:8.8};function Ie(i){let e=0;for(let t of i.chains)t.polymerType===\"PEPTIDE\"?e+=Is(t.backboneAtoms):t.polymerType===\"RNA\"&&(e+=Ps(t.backboneAtoms));return Math.round(e*1e4)/1e4}function Is(i){let e=0,t=0,n=0;for(let o of i){let r=ei(o);r===\"W\"?e++:r===\"Y\"?t++:r===\"C\"&&n++;}return Bn.W*e+Bn.Y*t+Bn.C*n}function Ps(i){let e=[];for(let o of i)if(o.branchAtom!==void 0&&o.branchAtom.biotype===b.BASE){let r=ei(o.branchAtom);r===\"T\"&&(r=\"U\"),r!==\"\"&&e.push(r);}if(e.length===0)return 0;if(e.length===1){let o=e[0];return Qo[o]??0}let t=0;for(let o=0;o<e.length-1;o++){let r=e[o],s=e[o+1],a=Rs[r+s];a!==void 0&&(t+=a);}let n=0;for(let o=1;o<e.length-1;o++){let r=e[o];n+=Qo[r]??0;}return 2*t-n}function ei(i){let e=i.monomer;return e!==null&&e.naturalAnalog!==void 0&&e.naturalAnalog!==\"\"?e.naturalAnalog.charAt(0).toUpperCase():i.symbol===\"\"?\"\":i.symbol.charAt(0).toUpperCase()}function Rt(i){let e=[];e.push(\"HWE pseudo-molfile\"),e.push(\" HWE 2D\"),e.push(\"\");let t=i.atoms.length,n=i.bonds.length;e.push(Hs(t,n));for(let r of i.atoms)e.push($s(r));let o=new Map;for(let r=0;r<i.atoms.length;r++)o.set(i.atoms[r].id,r+1);for(let r of i.bonds){let s=o.get(r.a1.id),a=o.get(r.a2.id);s===void 0||a===void 0||e.push(Ds(s,a));}return e.push(\"M END\"),e.join(`\n`)+`\n`}function Hs(i,e){return Pe(i)+Pe(e)+\" 0 0 0 0 0 0 0 0999 V2000\"}function $s(i){let e=Os(i);return Rn(i.p.x)+Rn(i.p.y)+Rn(0)+\" \"+Ns(e,3)+\" 0 0 0 0 0 0 0 0 0 0 0 0\"}function Ds(i,e){return Pe(i)+Pe(e)+Pe(1)+Pe(0)}function Os(i){let e=i.monomer;return e!==null&&e.symbol!==\"\"?e.symbol:i.symbol!==\"\"?i.symbol:e!==null&&e.naturalAnalog!==void 0&&e.naturalAnalog!==\"\"?e.naturalAnalog:\"X\"}function Pe(i){let e=String(i);return e.length>=3?e:\" \".repeat(3-e.length)+e}function Ns(i,e){return i.length>=e?i:i+\" \".repeat(e-i.length)}function Rn(i){let e=i.toFixed(4);return e.length>=10?e.slice(0,10):\" \".repeat(10-e.length)+e}function Fs(i){return `${i.mode}|${i.resolveMonomers?1:0}|${i.helm}`}function Gs(i){let e=i.chains.map(o=>`${o.id}:${o.polymerType}:${o.backboneAtoms.length}`).join(\",\"),t=i.atoms.map(o=>`${o.id}@${o.symbol}@${o.bio.chainId}`).join(\";\"),n=i.bonds.map(o=>`${o.id}:${o.a1.id}-${o.a2.id}:${o.kind}`).join(\";\");return `${e}#${t}#${n}`}var Vs=256,In=class{constructor(e){this._destroyed=false;this._parseHits=0;this._parseMisses=0;this._layoutHits=0;this._layoutMisses=0;this._renderHits=0;this._renderMisses=0;if(e.monomerLib===void 0||e.monomerLib===null)throw new TypeError(\"HelmService: options.monomerLib is required\");this.monomerLib=e.monomerLib,this.theme=e.theme??I,this.logger=e.logger??new Me,this.options=Object.freeze({...e});let t=e.cacheSize??Vs;this._parseCache=new Ae({max:t}),this._layoutCache=new Ae({max:t}),this._renderCache=new Ae({max:t}),this._libUnsub=this.monomerLib.onChanged.subscribe(()=>{this.clearCaches();});}parse(e,t){this._ensureLive(),e=this._normalizeHelm(e);let n=t?.mode??\"lenient\",o=t?.resolveMonomers!==false,r=Fs({mode:n,resolveMonomers:o,helm:e}),s=this._parseCache.get(r);if(s!==void 0)return this._parseHits+=1,s;this._parseMisses+=1;let a={mode:n,resolveMonomers:o},l=Qe(e,this.monomerLib,a),d={mol:l.mol,diagnostics:Object.freeze([...l.diagnostics])};return this._parseCache.set(r,d),d}serialize(e,t){this._ensureLive();let n={...t?.canonicalize!==void 0?{canonicalize:t.canonicalize}:{},...t?.includeHighlights!==void 0?{includeHighlights:t.includeHighlights}:{},...t?.version!==void 0?{version:t.version}:{}};return Le(e,n)}validate(e,t){this._ensureLive(),e=this._normalizeHelm(e);let{mol:n,diagnostics:o}=this.parse(e,{mode:\"lenient\"}),r=t?.mode!==void 0?{mode:t.mode}:{},s=pn(n,this.monomerLib,r);return [...o,...s]}canonicalize(e){this._ensureLive(),e=this._normalizeHelm(e);let{mol:t}=this.parse(e,{mode:\"lenient\"}),n=un(t);return Le(n,{canonicalize:true,version:\"V2.0\"})}removeGaps(e){return this._ensureLive(),mn(this._normalizeHelm(e),this.monomerLib)}renderToSvg(e,t){this._ensureLive(),e=this._normalizeHelm(e);let n=this._resolveRenderOptions(t),o=this._renderKey(e,n),r=this._renderCache.get(o);if(r!==void 0)return this._renderHits+=1,r;this._renderMisses+=1;let{mol:s}=this.parse(e,{mode:\"lenient\"}),a=this._layout(s,n.bondLength),{svg:l}=Lt(a,n);return this._renderCache.set(o,l),l}renderMol(e,t){this._ensureLive();let n=this._resolveRenderOptions(t),{svg:o}=Lt(e,n);return o}renderMolResult(e,t){this._ensureLive();let n=this._resolveRenderOptions(t);return Lt(e,n)}async renderToPng(e,t){if(this._ensureLive(),e=this._normalizeHelm(e),typeof globalThis.OffscreenCanvas!=\"function\")throw new K(\"png-rendering-requires-browser\",\"HelmService.renderToPng requires OffscreenCanvas (browser-only).\");let n=this._resolveRenderOptions(t),{mol:o}=this.parse(e,{mode:\"lenient\"}),r=this._layout(o,n.bondLength);return Yo(r,n)}renderToCanvas(e,t,n,o){this._ensureLive(),t=this._normalizeHelm(t);let r=this._resolveRenderOptions(o),{mol:s}=this.parse(t,{mode:\"lenient\"}),a=this._layout(s,r.bondLength),{bbox:l,drawBox:d}=Bt(e,a,n,r);return {mol:a,bbox:l,drawBox:d}}renderMolToCanvas(e,t,n,o){this._ensureLive();let r=this._resolveRenderOptions(o),{bbox:s,drawBox:a}=Bt(e,t,n,r);return {mol:t,bbox:s,drawBox:a}}*renderMany(e,t){for(let n of e??[]){let o=this.renderToSvg(n.helm,t);yield {id:n.id,svg:o};}}getFormula(e){this._ensureLive();let{mol:t}=this.parse(this._normalizeHelm(e),{mode:\"lenient\"});return pe(t)}getMolWeight(e){this._ensureLive();let{mol:t}=this.parse(this._normalizeHelm(e),{mode:\"lenient\"});return Re(t)}getExtinctionCoefficient(e){this._ensureLive();let{mol:t}=this.parse(this._normalizeHelm(e),{mode:\"lenient\"});return Ie(t)}getMolfile(e){this._ensureLive();let{mol:t}=this.parse(this._normalizeHelm(e),{mode:\"lenient\"});return Rt(t)}hasAtomicMolfileProvider(){return typeof this.options.atomicMolfileProvider==\"function\"}async getAtomicMolfile(e){this._ensureLive(),e=this._normalizeHelm(e);let t=this.options.atomicMolfileProvider;if(typeof t!=\"function\")throw new K(\"atomic-molfile-not-configured\",\"Set HelmServiceOptions.atomicMolfileProvider to enable atomic-level expansion.\");return await t(e,this.monomerLib)}invalidate(e){if(e===void 0){this.clearCaches();return}for(let t of [this._parseCache,this._layoutCache,this._renderCache]){let n=[];for(let o of t.keys())e(o)&&n.push(o);for(let o of n)t.delete(o);}}clearCaches(){this._parseCache.clear(),this._layoutCache.clear(),this._renderCache.clear(),this._parseHits=0,this._parseMisses=0,this._layoutHits=0,this._layoutMisses=0,this._renderHits=0,this._renderMisses=0;}destroy(){this._destroyed||(this._destroyed=true,this._libUnsub(),this.clearCaches());}_ensureLive(){if(this._destroyed)throw new K(\"service-destroyed\",\"HelmService instance has been destroyed.\")}_normalizeHelm(e){return e==null?\"\":typeof e==\"string\"?e:String(e)}_resolveRenderOptions(e){let t={},n=e?.theme??this.theme;return t.theme=n,e?.width!==void 0&&(t.width=e.width),e?.height!==void 0&&(t.height=e.height),e?.backColor!==void 0&&(t.backColor=e.backColor),e?.padding!==void 0&&(t.padding=e.padding),e?.showIds!==void 0&&(t.showIds=e.showIds),e?.showAnnotations!==void 0&&(t.showAnnotations=e.showAnnotations),e?.bondLength!==void 0&&(t.bondLength=e.bondLength),e?.fontSize!==void 0&&(t.fontSize=e.fontSize),e?.maxScale!==void 0&&(t.maxScale=e.maxScale),e?.showRGroupLabels!==void 0&&(t.showRGroupLabels=e.showRGroupLabels),e?.selectedAtomIds!==void 0&&(t.selectedAtomIds=e.selectedAtomIds),e?.highlightedAtomIds!==void 0&&(t.highlightedAtomIds=e.highlightedAtomIds),e?.fixedModelBbox!==void 0&&(t.fixedModelBbox=e.fixedModelBbox),t}_renderKey(e,t){let o=(t.theme??this.theme).name,r=this._libCacheTag(),s=t.width??0,a=t.height??0,l=t.padding??-1,d=t.bondLength??-1,u=t.backColor??\"\",c=t.showIds===true?1:0,m=t.showAnnotations===false?0:1,p=t.maxScale??1;return `${r}|${o}|${s}x${a}|p${l}|b${d}|bg${u}|i${c}a${m}|s${p}|${e}`}_layout(e,t){let n=Gs(e),o=`${this._libCacheTag()}|${t??\"d\"}|${n}`,r=this._layoutCache.get(o);if(r!==void 0)return this._layoutHits+=1,r;this._layoutMisses+=1;let s=t!==void 0?ee(e,{bondLength:t}):ee(e);return this._layoutCache.set(o,s),s}get stats(){return {parseHits:this._parseHits,parseMisses:this._parseMisses,layoutHits:this._layoutHits,layoutMisses:this._layoutMisses,renderHits:this._renderHits,renderMisses:this._renderMisses}}_libCacheTag(){let e=this.monomerLib,t=typeof e.version==\"number\"?e.version:0;return `${this.monomerLib.source}@${t}`}};var J=class{constructor(e,t){this.atoms=e,this.bonds=t,this.isEmpty=e.size===0&&t.size===0,Object.freeze(this);}},ti=new J(new Set,new Set),N={empty(){return ti},fromAtoms(i){return new J(new Set(i),new Set)},fromBonds(i){return new J(new Set,new Set(i))},fromAtomsAndBonds(i,e){return new J(new Set(i),new Set(e))},union(...i){if(i.length===0)return ti;let e=new Set,t=new Set;for(let n of i){for(let o of n.atoms)e.add(o);for(let o of n.bonds)t.add(o);}return new J(e,t)},difference(i,e){let t=new Set,n=new Set;for(let o of i.atoms)e.atoms.has(o)||t.add(o);for(let o of i.bonds)e.bonds.has(o)||n.add(o);return new J(t,n)},intersect(i,e){let t=new Set,n=new Set;for(let o of i.atoms)e.atoms.has(o)&&t.add(o);for(let o of i.bonds)e.bonds.has(o)&&n.add(o);return new J(t,n)},toggle(i,e){if(e.kind===\"atom\"){let n=new Set(i.atoms);return n.has(e.id)?n.delete(e.id):n.add(e.id),new J(n,new Set(i.bonds))}let t=new Set(i.bonds);return t.has(e.id)?t.delete(e.id):t.add(e.id),new J(new Set(i.atoms),t)},hasAtom(i,e){return i.atoms.has(e)},hasBond(i,e){return i.bonds.has(e)},equals(i,e){if(i===e)return true;if(i.atoms.size!==e.atoms.size||i.bonds.size!==e.bonds.size)return false;for(let t of i.atoms)if(!e.atoms.has(t))return false;for(let t of i.bonds)if(!e.bonds.has(t))return false;return true}};function he(i){let e=i.monomer;return e===null?0:e.rgroups.length}function ni(i,e){let t=new Set;for(let r of e)r.a1.id===i.id&&r.r1.kind===\"numeric\"&&t.add(r.r1.r),r.a2.id===i.id&&r.r2.kind===\"numeric\"&&t.add(r.r2.r);let n=[],o=Array.from(t).sort((r,s)=>r-s);for(let r of o)n.push(r);return n}function U(i,e){let t=he(i);if(t===0)return [];let n=new Set(ni(i,e)),o=[];for(let r=1;r<=t;r++)n.has(r)||o.push(r);return o}function Us(i,e){return U(i,e).length>0}function It(i,e){let t=[];for(let n of e)if(n.a1.id===i.id){let o=n.r1.kind===\"numeric\"?n.r1.r:0;t.push({bond:n,side:\"r1\",rNumber:o});}else if(n.a2.id===i.id){let o=n.r2.kind===\"numeric\"?n.r2.r:0;t.push({bond:n,side:\"r2\",rNumber:o});}return t}function zs(i){switch(i){case b.AA:return v.PEPTIDE;case b.SUGAR:case b.BASE:case b.LINKER:case b.NUCLEOTIDE:return v.RNA;case b.CHEM:return v.CHEM;case b.BLOB:return v.BLOB}}function Ks(i){switch(i){case v.PEPTIDE:return \"PEPTIDE\";case v.RNA:return \"RNA\";case v.CHEM:return \"CHEM\";case v.BLOB:return \"BLOB\";case v.G:return \"G\"}}function Ws(i){let e=0;for(let t of i.atoms)t.id>e&&(e=t.id);for(let t of i.bonds)t.id>e&&(e=t.id);return e}function Pt(i,e){return i.kind!==e.kind?false:i.kind===\"numeric\"&&e.kind===\"numeric\"?i.r===e.r:i.kind===\"positional\"&&e.kind===\"positional\"?i.position===e.position&&i.r===e.r:true}var $=class{constructor(e){this._atoms=new Map;this._atomOrder=[];this._bonds=new Map;this._bondOrder=[];this._chains=new Map;this._chainOrder=[];this._addedAtoms=new Set;this._removedAtoms=new Set;this._modifiedAtoms=new Set;this._addedBonds=new Set;this._removedBonds=new Set;this._modifiedBonds=new Set;this._topologyDirty=false;this._idgen=new ye;let t=Ws(e);for(let n=0;n<t;n++)this._idgen.next();for(let n of e.chains)this._chains.set(n.id,{id:n.id,polymerType:n.polymerType,backboneAtomIds:n.backboneAtoms.map(o=>o.id),bondIds:n.bonds.map(o=>o.id),annotation:n.annotation}),this._chainOrder.push(n.id);for(let n of e.atoms)this._atoms.set(n.id,{id:n.id,p:{x:n.p.x,y:n.p.y},biotype:n.biotype,symbol:n.symbol,monomer:n.monomer,bio:{...n.bio},hidden:n.hidden,selected:n.selected,highlighted:n.highlighted,tag:n.tag,branchAtomId:n.branchAtom?.id,inlineSource:n.inlineSource}),this._atomOrder.push(n.id);for(let n of e.bonds)this._bonds.set(n.id,{id:n.id,a1Id:n.a1.id,a2Id:n.a2.id,kind:n.kind,r1:n.r1,r2:n.r2,ratio:n.ratio,tag:n.tag}),this._bondOrder.push(n.id);this._groups=[...e.groups],this._annotations=e.annotations;}addAtom(e){let t=this._idgen.next(),n=zs(e.biotype),o=e.chainId??this._pickChainId(n),r=this._chains.get(o);r===void 0&&(r={id:o,polymerType:n,backboneAtomIds:[],bondIds:[],annotation:void 0},this._chains.set(o,r),this._chainOrder.push(o));let s=e.positionInChain??r.backboneAtomIds.length+1,a={id:t,p:{x:e.p.x,y:e.p.y},biotype:e.biotype,symbol:e.symbol,monomer:null,bio:{chainId:o,positionInChain:s,continuousId:0},hidden:false,selected:false,highlighted:false,tag:void 0,branchAtomId:void 0,inlineSource:void 0};this._atoms.set(t,a),this._atomOrder.push(t);let l=Math.max(0,Math.min(s-1,r.backboneAtomIds.length));return r.backboneAtomIds.splice(l,0,t),this._addedAtoms.add(t),this._topologyDirty=true,t}removeAtom(e){let t=this._atoms.get(e);if(t===void 0)return;let n=[];for(let s of this._bonds.values())(s.a1Id===e||s.a2Id===e)&&n.push(s.id);for(let s of n)this._removeBondInternal(s);for(let s of this._atoms.values())s.branchAtomId===e&&(s.branchAtomId=void 0);let o=this._chains.get(t.bio.chainId);if(o!==void 0){let s=o.backboneAtomIds.indexOf(e);s>=0&&o.backboneAtomIds.splice(s,1);}this._atoms.delete(e);let r=this._atomOrder.indexOf(e);r>=0&&this._atomOrder.splice(r,1),this._addedAtoms.has(e)?this._addedAtoms.delete(e):this._removedAtoms.add(e),this._modifiedAtoms.delete(e),this._topologyDirty=true;}updateAtom(e,t){let n=this._atoms.get(e);n!==void 0&&(t.p!==void 0&&(n.p={x:t.p.x,y:t.p.y}),t.symbol!==void 0&&(n.symbol=t.symbol),t.selected!==void 0&&(n.selected=t.selected),t.highlighted!==void 0&&(n.highlighted=t.highlighted),\"tag\"in t&&(n.tag=t.tag),t.hidden!==void 0&&(n.hidden=t.hidden),this._addedAtoms.has(e)||this._modifiedAtoms.add(e));}addBond(e){if(!this._atoms.has(e.a1))throw new Error(`Transaction.addBond: atom ${e.a1} does not exist`);if(!this._atoms.has(e.a2))throw new Error(`Transaction.addBond: atom ${e.a2} does not exist`);for(let r of this._bonds.values()){let s=r.a1Id===e.a1&&r.a2Id===e.a2&&Pt(r.r1,e.r1)&&Pt(r.r2,e.r2),a=r.a1Id===e.a2&&r.a2Id===e.a1&&Pt(r.r1,e.r2)&&Pt(r.r2,e.r1);if(s||a)throw new Error(`Transaction.addBond: duplicate bond ${e.a1}:${oi(e.r1)}-${e.a2}:${oi(e.r2)}`)}let t=this._idgen.next();this._bonds.set(t,{id:t,a1Id:e.a1,a2Id:e.a2,kind:e.kind,r1:e.r1,r2:e.r2,ratio:void 0,tag:void 0}),this._bondOrder.push(t);let n=this._atoms.get(e.a1),o=this._atoms.get(e.a2);if(n!==void 0&&o!==void 0&&n.bio.chainId===o.bio.chainId){let r=this._chains.get(n.bio.chainId);r!==void 0&&r.bondIds.push(t);}return this._addedBonds.add(t),this._topologyDirty=true,t}removeBond(e){this._bonds.has(e)&&(this._removeBondInternal(e),this._topologyDirty=true);}updateBond(e,t){let n=this._bonds.get(e);n!==void 0&&(\"tag\"in t&&(n.tag=t.tag),\"ratio\"in t&&(n.ratio=t.ratio),this._addedBonds.has(e)||this._modifiedBonds.add(e));}commit(){let e=new Map;for(let l of this._atomOrder){let d=this._atoms.get(l);if(d===void 0)continue;let u={id:d.id,p:{x:d.p.x,y:d.p.y},biotype:d.biotype,symbol:d.symbol,monomer:d.monomer,bio:{...d.bio},hidden:d.hidden,selected:d.selected,highlighted:d.highlighted,...d.tag!==void 0?{tag:d.tag}:{},...d.inlineSource!==void 0?{inlineSource:d.inlineSource}:{}};e.set(l,u);}for(let l of this._atomOrder){let d=this._atoms.get(l);if(d===void 0||d.branchAtomId===void 0)continue;let u=e.get(l),c=e.get(d.branchAtomId);u===void 0||c===void 0||(u.branchAtom=c);}let t=new Map;for(let l of this._bondOrder){let d=this._bonds.get(l);if(d===void 0)continue;let u=e.get(d.a1Id),c=e.get(d.a2Id);if(u===void 0||c===void 0)continue;let m={id:d.id,a1:u,a2:c,kind:d.kind,r1:d.r1,r2:d.r2,...d.ratio!==void 0?{ratio:{...d.ratio}}:{},...d.tag!==void 0?{tag:d.tag}:{}};t.set(l,m);}let n=[];for(let l of this._chainOrder){let d=this._chains.get(l);if(d===void 0||d.backboneAtomIds.length===0&&d.bondIds.length===0)continue;let u=[];for(let m of d.backboneAtomIds){let p=e.get(m);p!==void 0&&u.push(p);}let c=[];for(let m of d.bondIds){let p=t.get(m);p!==void 0&&c.push(p);}n.push({id:d.id,polymerType:d.polymerType,backboneAtoms:u,bonds:c,...d.annotation!==void 0?{annotation:d.annotation}:{}});}let o=this._atomOrder.map(l=>e.get(l)).filter(l=>l!==void 0),r=this._bondOrder.map(l=>t.get(l)).filter(l=>l!==void 0),s={atoms:o,bonds:r,chains:n,groups:[...this._groups],annotations:this._annotations};this._topologyDirty&&(s=js(s));let a=Object.freeze({addedAtomIds:new Set(this._addedAtoms),removedAtomIds:new Set(this._removedAtoms),addedBondIds:new Set(this._addedBonds),removedBondIds:new Set(this._removedBonds),modifiedAtomIds:new Set(this._modifiedAtoms),modifiedBondIds:new Set(this._modifiedBonds)});return this._addedAtoms.clear(),this._removedAtoms.clear(),this._modifiedAtoms.clear(),this._addedBonds.clear(),this._removedBonds.clear(),this._modifiedBonds.clear(),this._topologyDirty=false,{mol:s,changes:a}}_removeBondInternal(e){if(this._bonds.get(e)===void 0)return;this._bonds.delete(e);let n=this._bondOrder.indexOf(e);n>=0&&this._bondOrder.splice(n,1);for(let o of this._chains.values()){let r=o.bondIds.indexOf(e);r>=0&&o.bondIds.splice(r,1);}this._addedBonds.has(e)?this._addedBonds.delete(e):this._removedBonds.add(e),this._modifiedBonds.delete(e);}_pickChainId(e){let t=Ks(e),n=1;for(;this._chains.has(`${t}${n}`);)n+=1;return `${t}${n}`}};function oi(i){switch(i.kind){case \"numeric\":return `R${i.r}`;case \"unspecified\":return \"?\";case \"wildcard\":return \"*\";case \"pair\":return \"pair\";case \"positional\":return `${i.position}pos:R${i.r}`}}function js(i){let e=Te(i),t=new Map;for(let a of i.atoms){let l=e.get(a.id);if(l===void 0||l===a.bio.continuousId){t.set(a.id,a);continue}t.set(a.id,{...a,bio:{...a.bio,continuousId:l}});}for(let a of i.atoms){if(a.branchAtom===void 0)continue;let l=t.get(a.id),d=t.get(a.branchAtom.id);l===void 0||d===void 0||(l.branchAtom=d);}let n=i.bonds.map(a=>{let l=t.get(a.a1.id),d=t.get(a.a2.id);return l===void 0||d===void 0||l===a.a1&&d===a.a2?a:{...a,a1:l,a2:d}}),o=new Map;for(let a of n)o.set(a.id,a);let r=i.chains.map(a=>{let l=[];for(let u of a.backboneAtoms)l.push(t.get(u.id)??u);let d=[];for(let u of a.bonds)d.push(o.get(u.id)??u);return {id:a.id,polymerType:a.polymerType,backboneAtoms:l,bonds:d,...a.annotation!==void 0?{annotation:a.annotation}:{}}});return {atoms:i.atoms.map(a=>t.get(a.id)??a),bonds:n,chains:r,groups:i.groups,annotations:i.annotations}}var W=class{constructor(e,t,n){this.atoms=[];this.bonds=[];this.bondHitWidth=n?.bondHitWidth??4,this.rebuild(e,t);}rebuild(e,t){let n=[];for(let r of e.atoms)r.hidden||n.push({atom:r,bbox:ue(r,t),hitRadius:Uo(r,t)});let o=[];for(let r of e.bonds)o.push({bond:r,a:r.a1.p,b:r.a2.p});this.atoms=n,this.bonds=o;}test(e){let t=null,n=null;for(let r of this.atoms){if(!Ht(e,r.bbox))continue;let s=e.x-r.atom.p.x,a=e.y-r.atom.p.y,l=Math.sqrt(s*s+a*a);l>r.hitRadius||(t===null||l<t.d?(n=t,t={entry:r,d:l}):(n===null||l<n.d)&&(n={entry:r,d:l}));}if(t!==null)return {atom:t.entry.atom};let o=null;for(let r of this.bonds){let s=qs(e,r.a,r.b);s>this.bondHitWidth||(o===null||s<o.d)&&(o={entry:r,d:s});}return o!==null?{bond:o.entry.bond}:null}testRect(e){let t=[];for(let o of this.atoms)Ht(o.atom.p,e)&&t.push(o.atom);let n=[];for(let o of this.bonds)Ht(o.a,e)&&Ht(o.b,e)&&n.push(o.bond);return {atoms:t,bonds:n}}atomCount(){return this.atoms.length}bondCount(){return this.bonds.length}};function Ht(i,e){return i.x>=e.x&&i.x<=e.x+e.width&&i.y>=e.y&&i.y<=e.y+e.height}function qs(i,e,t){let n=t.x-e.x,o=t.y-e.y,r=n*n+o*o;if(r===0){let c=i.x-e.x,m=i.y-e.y;return Math.sqrt(c*c+m*m)}let s=((i.x-e.x)*n+(i.y-e.y)*o)/r;s<0?s=0:s>1&&(s=1);let a=e.x+s*n,l=e.y+s*o,d=i.x-a,u=i.y-l;return Math.sqrt(d*d+u*u)}var He=class{constructor(){this._handlers=new Map;}on(e,t){let n=this._handlers.get(e);n===void 0&&(n=new Set,this._handlers.set(e,n));let o=t;return n.add(o),()=>{let r=this._handlers.get(e);r!==void 0&&r.delete(o);}}off(e,t){let n=this._handlers.get(e);n!==void 0&&n.delete(t);}fire(e,t){let n=this._handlers.get(e);if(n===void 0||n.size===0)return;let o=[...n];for(let r of o)r(t);}clear(){this._handlers.clear();}observerCount(e){if(e===void 0){let t=0;for(let n of this._handlers.values())t+=n.size;return t}return this._handlers.get(e)?.size??0}};var $e=class{constructor(e){this._entries=[];this._idx=-1;let t=e?.maxEntries??100;if(t<=0)throw new RangeError(\"HistoryStack: maxEntries must be > 0\");this._max=t;}push(e){for(this._idx<this._entries.length-1&&(this._entries=this._entries.slice(0,this._idx+1)),this._entries.push(e),this._idx=this._entries.length-1;this._entries.length>this._max;)this._entries.shift(),this._idx-=1;}canUndo(){return this._idx>0}canRedo(){return this._idx>=0&&this._idx<this._entries.length-1}undo(){return this.canUndo()?(this._idx-=1,this._entries[this._idx]??null):null}redo(){return this.canRedo()?(this._idx+=1,this._entries[this._idx]??null):null}clear(){this._entries=[],this._idx=-1;}get size(){return this._entries.length}current(){return this._idx<0?null:this._entries[this._idx]??null}};function ii(i,e={}){let t=e.theme??I,n=e.selectedAtomIds??new Set,o=e.highlightedAtomIds??new Set;return {highlightLayer:Cn(i,t,o),selectionLayer:Ln(i,t,n)}}function E(i){let e=i.ownerDocument;if(e!=null)return e;let t=globalThis;if(t.document!==void 0)return t.document;throw new Error(\"EditorView: no Document available (host.ownerDocument is null).\")}function y(i,e,t,n){let o=i.createElement(e);if(t!==void 0)for(let r of Object.keys(t)){let s=t[r];s===false||s===void 0||o.setAttribute(r,s===true?\"\":String(s));}if(n!==void 0)for(let r of n)typeof r==\"string\"?o.appendChild(i.createTextNode(r)):o.appendChild(r);return o}function ri(i){let e=E(i);if(e.querySelector(\"style[data-hw-editor-view-styles]\")!==null)return;let n=e.createElement(\"style\");n.setAttribute(\"data-hw-editor-view-styles\",\"\"),n.textContent=\".hw-editor-view{position:relative;display:block;overflow:hidden;outline:none;}.hw-editor-view svg{display:block;user-select:none;}.hw-editor-view.hw-view-only{cursor:default;}\";let o=e.head??e.documentElement;o!==null&&o.appendChild(n);}function si(i,e){let t=E(i),n=i.querySelector(\".hw-editor-view\");if(n===null)throw new Error(\"EditorView.replaceSvg: missing .hw-editor-view wrapper.\");let o=t.createElement(\"div\");o.innerHTML=e;let r=o.querySelector(\"svg\");if(r===null)throw new Error(\"EditorView.replaceSvg: rendered output contained no <svg>.\");for(;n.firstChild!==null;)n.removeChild(n.firstChild);return n.appendChild(r),r}function fe(i,e,t=220,n=140){if(i==null||e===\"\")return null;try{let o=i.get_mol(e);if(o===null)return null;let r=o.get_svg(t,n);return o.delete(),r}catch{return null}}function te(i,e,t){let n=\"data-testid\";for(let r=0;r<i.body.children.length;r++){let s=i.body.children[r];if(s!==void 0&&s.getAttribute(n)===e)return s}let o=y(i,\"div\",{class:t,[n]:e});return o.style.display=\"none\",i.body.appendChild(o),o}function xe(i,e,t){for(;e.firstChild!==null;)e.removeChild(e.firstChild);if(e.appendChild(y(i,\"div\",{class:\"hw-tooltip__symbol\"},[t.symbol])),t.name!==void 0&&t.name!==\"\"&&t.name!==t.symbol&&e.appendChild(y(i,\"div\",{class:\"hw-tooltip__name\"},[t.name])),t.rdkitSvg!==void 0&&t.rdkitSvg!==null&&t.rdkitSvg!==\"\"){let n={class:\"hw-tooltip__rdkit\"};t.rdkitTestid!==void 0&&(n[\"data-testid\"]=t.rdkitTestid);let o=y(i,\"div\",n);o.innerHTML=t.rdkitSvg,e.appendChild(o);}t.hint!==void 0&&t.hint!==\"\"&&e.appendChild(y(i,\"div\",{class:\"hw-tooltip__hint\"},[t.hint]));}function ai(i,e,t){for(;e.firstChild!==null;)e.removeChild(e.firstChild);e.appendChild(y(i,\"div\",{class:\"hw-tooltip__symbol\"},[t.title]));let n=y(i,\"div\",{class:\"hw-tooltip__triplet\"});for(let o of t.parts){let r=y(i,\"div\",{class:\"hw-tooltip__triplet-part\"});if(r.appendChild(y(i,\"div\",{class:\"hw-tooltip__triplet-role\"},[`${o.role}: ${o.symbol}`])),o.name!==void 0&&o.name!==\"\"&&o.name!==o.symbol&&r.appendChild(y(i,\"div\",{class:\"hw-tooltip__name\"},[o.name])),o.rdkitSvg!==void 0&&o.rdkitSvg!==null&&o.rdkitSvg!==\"\"){let s={class:\"hw-tooltip__rdkit\"};t.rdkitTestid!==void 0&&(s[\"data-testid\"]=t.rdkitTestid);let a=y(i,\"div\",s);a.innerHTML=o.rdkitSvg,r.appendChild(a);}n.appendChild(r);}e.appendChild(n),t.hint!==void 0&&t.hint!==\"\"&&e.appendChild(y(i,\"div\",{class:\"hw-tooltip__hint\"},[t.hint]));}function j(i,e,t){let n=i.style;n.display=\"block\",n.left=`${e+12}px`,n.top=`${t+12}px`;}function F(i){i!==null&&(i.style.display=\"none\");}function $t(i){let e=i.body;if(e==null)return;let t=\"data-testid\";for(let n=0;n<e.children.length;n++){let o=e.children[n];if(o===void 0)continue;let r=o.getAttribute===void 0?null:o.getAttribute(t);r!=null&&r.endsWith(\"-tooltip\")&&F(o);}}var Ot=class Ot{constructor(e,t,n){this._baseTransform=\"\";this._viewport={scale:1,offset:{x:0,y:0}};this._pinnedBbox=null;this._tooltip=null;this._bondTooltip=null;this._rdkitSvgCache=new Map;this._unsubs=[];this._destroyed=false;this.host=e,this._editor=t,this._doc=n?.documentImpl??E(e),this._width=n?.width??400,this._height=n?.height??200,ri(e);let o=this._doc.createElement(\"div\");o.setAttribute(\"class\",\"hw-editor-view\"),e.appendChild(o),this._tooltip=te(this._doc,\"atom-tooltip\",\"hw-atom-tooltip\"),this._bondTooltip=te(this._doc,\"bond-tooltip\",\"hw-bond-tooltip\"),this._svgRoot=this._renderFresh(),this._unsubs.push(t.on(\"mol:changed\",r=>{this._hideTooltip(),this._hideBondTooltip(),(r.reason===\"setHelm\"||r.reason===\"cleanLayout\"||r.reason===\"initial\")&&(this._pinnedBbox=null),this._renderFresh();})),this._unsubs.push(t.on(\"selection:change\",r=>{this._refreshOverlays(r);})),this._unsubs.push(t.on(\"highlight:change\",r=>{this._refreshOverlays(r);})),this._unsubs.push(t.on(\"theme:change\",()=>{this._renderFresh();})),this._unsubs.push(t.on(\"view:resize\",r=>{this._applyResize(r.width,r.height);})),this._unsubs.push(t.on(\"view:viewport-change\",r=>{this._viewport=r.viewport,this._applyViewport(r.viewport);})),this._unsubs.push(t.on(\"view:fit-to-content\",()=>{this._pinnedBbox=null,this._renderFresh();})),this._unsubs.push(t.on(\"monomer:hover\",r=>{this._showTooltip(r.atom,r.clientX,r.clientY);})),this._unsubs.push(t.on(\"monomer:hover-end\",()=>{this._hideTooltip();})),this._unsubs.push(t.on(\"bond:hover\",r=>{this._showBondTooltip(r.bond,r.clientX,r.clientY);})),this._unsubs.push(t.on(\"bond:hover-end\",()=>{this._hideBondTooltip();})),this._unsubs.push(t.on(\"bond:preview\",r=>{this._paintBondPreview(r.start.p,r.cursor,r.candidate!==null);})),this._unsubs.push(t.on(\"bond:preview-end\",()=>{this._clearBondPreview();})),this._unsubs.push(t.on(\"bond:cancel\",()=>{this._clearBondPreview();})),this._unsubs.push(t.on(\"selection:rectangle-start\",r=>{this._paintSelectionRect(r.origin,r.origin);})),this._unsubs.push(t.on(\"selection:rectangle-update\",r=>{this._paintSelectionRectFromRect(r.rect);})),this._unsubs.push(t.on(\"selection:rectangle-end\",()=>{this._clearSelectionRect();}));}get svgRoot(){return this._svgRoot}get width(){return this._width}get height(){return this._height}resize(e,t){this._destroyed||(this._width=e,this._height=t,this._renderFresh());}redraw(){this._destroyed||this._renderFresh();}destroy(){if(this._destroyed)return;this._destroyed=true;for(let t of this._unsubs)t();this._unsubs.length=0;let e=this.host.querySelector(\".hw-editor-view\");e!==null&&e.parentNode!==null&&e.parentNode.removeChild(e),F(this._tooltip),F(this._bondTooltip),this._tooltip=null,this._bondTooltip=null;}_renderFresh(){let e=this._editor.getService(),t=this._currentTheme(),n=this._editor.getMol();this._pinnedBbox===null&&(this._pinnedBbox=En(n,t));let o=e.renderMol(n,{width:this._width,height:this._height,theme:t,fixedModelBbox:this._pinnedBbox});this._svgRoot=si(this.host,o);let r=this._svgRoot.querySelector(\".hw-content\");return this._baseTransform=r!==null?r.getAttribute(\"transform\")??\"\":\"\",this._svgRoot.setAttribute(\"data-testid\",\"editor-svg\"),this._applyOverlaysToCurrent(),(this._viewport.scale!==1||this._viewport.offset.x!==0||this._viewport.offset.y!==0)&&this._applyViewport(this._viewport),this._svgRoot}_refreshOverlays(e){this._applyOverlaysToCurrent();}_applyOverlaysToCurrent(){let e=this._editor.getMol(),t=this._editor.getSelection(),n=ii(e,{theme:this._currentTheme(),selectedAtomIds:t.atoms,highlightedAtomIds:this._editorHighlights()});this._spliceLayer(\"hw-highlights\",n.highlightLayer),this._spliceLayer(\"hw-selections\",n.selectionLayer);}_spliceLayer(e,t){let n=this._svgRoot.querySelector(`.${e}`);if(n===null||n.parentNode===null)return;let o=this._doc.createElementNS(\"http://www.w3.org/2000/svg\",\"svg\");o.innerHTML=t;let r=o.querySelector(`.${e}`);r!==null&&n.parentNode.replaceChild(r,n);}_editorHighlights(){let e=this._editor;return typeof e._currentHighlights==\"function\"?e._currentHighlights():new Set}_currentTheme(){let e=this._editor;return typeof e._currentTheme==\"function\"?e._currentTheme():this._editor.getService().theme}_applyResize(e,t){this._width=e,this._height=t,this._pinnedBbox=null,this._renderFresh();}_applyViewport(e){let n=this._svgRoot.querySelector(\".hw-content\");if(n===null)return;let o=`translate(${e.offset.x} ${e.offset.y}) scale(${e.scale})`,r=this._baseTransform===\"\"?o:`${o} ${this._baseTransform}`;n.setAttribute(\"transform\",r);}_showTooltip(e,t,n){let o=this._tooltip;if(o===null)return;let r=e.symbol===\"\"?\"?\":e.symbol,s=e.monomer?.name??\"\",a=e.bio.positionInChain,l=e.bio.chainId===\"\"?\"?\":e.bio.chainId,d=s!==\"\"&&s!==r?`${s} @ ${l}:${a}`:`${r} @ ${l}:${a}`,u=this._renderRdkitTooltipSvg(e);xe(this._doc,o,{symbol:r,name:d,rdkitSvg:u,rdkitTestid:\"atom-tooltip-rdkit-svg\"});let c=s!==\"\"&&s!==r?`${r} \\u2014 ${s} @ ${l}:${a}`:`${r} @ ${l}:${a}`,m=this._doc.createElement(\"div\");m.setAttribute(\"class\",\"hw-atom-tooltip__text\"),m.style.display=\"none\",m.appendChild(this._doc.createTextNode(c)),o.appendChild(m),j(o,t,n);}_renderRdkitTooltipSvg(e){let n=this._editor.getService().options.rdkitModule;if(n==null)return null;let o=e.monomer;if(o===null)return null;let r=o.smiles;if(r===void 0||r===\"\")return null;let s=`${o.polymerType}:${o.symbol}`;if(this._rdkitSvgCache.has(s))return this._rdkitSvgCache.get(s)??null;let a=fe(n,r,220,140);if(this._rdkitSvgCache.size>=Ot._RDKIT_CACHE_LIMIT){let l=this._rdkitSvgCache.keys().next().value;l!==void 0&&this._rdkitSvgCache.delete(l);}return this._rdkitSvgCache.set(s,a),a}_hideTooltip(){F(this._tooltip);}_showBondTooltip(e,t,n){let o=this._bondTooltip;if(o===null)return;let r=li(e.r1),s=li(e.r2),a=`${e.a1.symbol}@${e.a1.bio.chainId}:${e.a1.bio.positionInChain}`,l=`${e.a2.symbol}@${e.a2.bio.chainId}:${e.a2.bio.positionInChain}`;xe(this._doc,o,{symbol:`${r}-${s} (${e.kind})`,name:`${a} \\u2194 ${l}`}),j(o,t,n);}_hideBondTooltip(){F(this._bondTooltip);}_paintBondPreview(e,t,n){let o=\"http://www.w3.org/2000/svg\",r=this._svgRoot.querySelector(\".hw-content\");if(r===null)return;let s=r.querySelector(\".hw-bond-preview\");s===null&&(s=this._doc.createElementNS(o,\"line\"),s.setAttribute(\"class\",\"hw-bond-preview\"),s.setAttribute(\"data-testid\",\"bond-preview\"),s.setAttribute(\"stroke-dasharray\",\"6 4\"),s.setAttribute(\"stroke-width\",\"2\"),s.setAttribute(\"fill\",\"none\"),s.setAttribute(\"pointer-events\",\"none\"),r.appendChild(s)),s.setAttribute(\"x1\",String(e.x)),s.setAttribute(\"y1\",String(e.y)),s.setAttribute(\"x2\",String(t.x)),s.setAttribute(\"y2\",String(t.y)),s.setAttribute(\"stroke\",n?\"#1f5fcd\":\"#999999\");}_clearBondPreview(){let e=this._svgRoot.querySelector(\".hw-bond-preview\");e!==null&&e.parentNode!==null&&e.parentNode.removeChild(e);}_paintSelectionRect(e,t){let n=Math.min(e.x,t.x),o=Math.min(e.y,t.y),r=Math.abs(e.x-t.x),s=Math.abs(e.y-t.y);this._paintSelectionRectAt(n,o,r,s);}_paintSelectionRectFromRect(e){this._paintSelectionRectAt(e.x,e.y,e.width,e.height);}_paintSelectionRectAt(e,t,n,o){let r=\"http://www.w3.org/2000/svg\",s=this._svgRoot.querySelector(\".hw-content\");if(s===null)return;let a=s.querySelector(\".hw-selection-rect\");a===null&&(a=this._doc.createElementNS(r,\"rect\"),a.setAttribute(\"class\",\"hw-selection-rect\"),a.setAttribute(\"data-testid\",\"selection-rect\"),a.setAttribute(\"fill\",\"rgba(31, 95, 205, 0.08)\"),a.setAttribute(\"stroke\",\"#1f5fcd\"),a.setAttribute(\"stroke-width\",\"1\"),a.setAttribute(\"stroke-dasharray\",\"4 3\"),a.setAttribute(\"pointer-events\",\"none\"),s.appendChild(a)),a.setAttribute(\"x\",String(e)),a.setAttribute(\"y\",String(t)),a.setAttribute(\"width\",String(n)),a.setAttribute(\"height\",String(o));}_clearSelectionRect(){let e=this._svgRoot.querySelector(\".hw-selection-rect\");e!==null&&e.parentNode!==null&&e.parentNode.removeChild(e);}};Ot._RDKIT_CACHE_LIMIT=256;var Dt=Ot;function li(i){switch(i.kind){case \"numeric\":return `R${i.r}`;case \"unspecified\":return \"?\";case \"wildcard\":return \"*\";case \"pair\":return \"pair\";case \"positional\":return `${i.position}pos:R${i.r}`}}var ne=class ne{constructor(e,t){this._onClose=null;this._primaryAction=null;this._host=e,this._doc=t.documentImpl??E(e);let n=this._doc,o={class:\"hw-modal-backdrop\",role:\"presentation\"};t.testId!==void 0&&(o[\"data-testid\"]=`dialog-${t.testId}`);let r=y(n,\"div\",o),s={class:\"hw-modal\",role:\"dialog\",\"aria-modal\":\"true\",\"aria-label\":t.title};t.testId!==void 0&&(s[\"data-testid\"]=`dialog-${t.testId}-frame`);let a=y(n,\"div\",s),l=y(n,\"div\",{class:\"hw-modal__header\"},[t.title]),d=y(n,\"div\",{class:\"hw-modal__body\"});a.appendChild(l),a.appendChild(d),r.appendChild(a);let u=c=>{c.stopPropagation();};for(let c of [\"mousedown\",\"mousemove\",\"mouseup\",\"mouseover\",\"mouseenter\",\"mouseleave\",\"wheel\",\"contextmenu\",\"dblclick\",\"keydown\",\"keyup\",\"keypress\"])r.addEventListener(c,u);a.addEventListener(\"keydown\",c=>{let m=c;if(m.key!==\"Enter\"||m.target?.tagName===\"TEXTAREA\")return;let p=this._primaryAction;p!==null&&(m.preventDefault?.(),m.stopImmediatePropagation?.(),p());}),r.addEventListener(\"click\",c=>{if(c.target===r){this.close();return}c.stopPropagation();}),this.root=r,this.body=d;}static anyOpen(){return ne._openStack.length>0}static closeTopmost(){let e=ne._openStack[ne._openStack.length-1];return e===void 0?false:(e.close(),true)}open(e){this._onClose=e??null,this.root.parentNode===null&&this._host.appendChild(this.root),ne._openStack.includes(this)||ne._openStack.push(this),$t(this._doc);}close(){let e=ne._openStack.indexOf(this);e>=0&&ne._openStack.splice(e,1),this.root.parentNode!==null&&this.root.parentNode.removeChild(this.root);let t=this._onClose;this._onClose=null,t!==null&&t();}setPrimaryAction(e){this._primaryAction=e;}get isOpen(){return this.root.parentNode!==null}};ne._openStack=[];var q=ne;function De(i,e,t,n){let o=`hw-input-${Math.random().toString(36).slice(2,9)}`,r=y(i,\"label\",{for:o,class:\"hw-modal__label\"},[e]),s=i.createElement(\"input\");return s.setAttribute(\"id\",o),s.setAttribute(\"type\",\"text\"),s.setAttribute(\"class\",\"hw-modal__input\"),n!==void 0&&s.setAttribute(\"data-testid\",n),s.value=t,{row:y(i,\"div\",{class:\"hw-modal__row\"},[r,s]),input:s}}function Oe(i,e,t,n,o){let r=`hw-sel-${Math.random().toString(36).slice(2,9)}`,s=y(i,\"label\",{for:r,class:\"hw-modal__label\"},[e]),a=i.createElement(\"select\");a.setAttribute(\"id\",r),a.setAttribute(\"class\",\"hw-modal__select\"),o!==void 0&&a.setAttribute(\"data-testid\",o);for(let d of t){let u=i.createElement(\"option\");u.setAttribute(\"value\",d.value),d.value===n&&u.setAttribute(\"selected\",\"\"),u.appendChild(i.createTextNode(d.label)),a.appendChild(u);}return {row:y(i,\"div\",{class:\"hw-modal__row\"},[s,a]),select:a}}function Ne(i,e){let t=i.createElement(\"button\");t.setAttribute(\"class\",\"hw-modal__ok\"),t.setAttribute(\"type\",\"button\"),e!==void 0&&t.setAttribute(\"data-testid\",`${e}-ok`),t.appendChild(i.createTextNode(\"OK\"));let n=i.createElement(\"button\");return n.setAttribute(\"class\",\"hw-modal__cancel\"),n.setAttribute(\"type\",\"button\"),e!==void 0&&n.setAttribute(\"data-testid\",`${e}-cancel`),n.appendChild(i.createTextNode(\"Cancel\")),{row:y(i,\"div\",{class:\"hw-modal__actions\"},[t,n]),ok:t,cancel:n}}var Fe=class{constructor(e,t){this._modal=null;this._editor=e;let n=e._getHost();if(n===null)throw new Error(\"ChooseRDialog: editor has no host element.\");this._doc=t?.documentImpl??E(n);}open(e,t,n){this.close();let o=this._editor._getHost();if(o===null)return Promise.resolve(null);let r=new q(o,{documentImpl:this._doc,title:\"Choose R-Groups\",testId:\"choose-r\"});this._modal=r;let s=ci(e,n?.freeR1,n?.currentR1,this._editor),a=ci(t,n?.freeR2,n?.currentR2,this._editor),l=y(this._doc,\"div\",{class:\"hw-modal__info\"},[`${e.symbol} (${e.bio.chainId})`]),d=n?.currentR1!==void 0?String(n.currentR1):s[0]?.value??\"1\",u=n?.currentR2!==void 0?String(n.currentR2):a[0]?.value??\"1\",c=Oe(this._doc,\"R-group on side A\",s,d,\"choose-r-r1\"),m=y(this._doc,\"div\",{class:\"hw-modal__info\"},[`${t.symbol} (${t.bio.chainId})`]),p=Oe(this._doc,\"R-group on side B\",a,u,\"choose-r-r2\"),h=Ne(this._doc,\"choose-r\"),f=[];return s.length===0&&f.push(y(this._doc,\"div\",{class:\"hw-modal__info hw-modal__note-fully-booked\"},[`All R-groups on ${e.symbol} are in use.`])),a.length===0&&f.push(y(this._doc,\"div\",{class:\"hw-modal__info hw-modal__note-fully-booked\"},[`All R-groups on ${t.symbol} are in use.`])),new Promise(_=>{let k=false,g=w=>{k||(k=true,_(w));},M=w=>{g(w),this.close();},A=()=>M({r1:di(c.select),r2:di(p.select)});h.ok.addEventListener(\"click\",A),h.cancel.addEventListener(\"click\",()=>M(null)),r.setPrimaryAction(A),r.body.appendChild(l),r.body.appendChild(c.row),r.body.appendChild(m),r.body.appendChild(p.row);for(let w of f)r.body.appendChild(w);r.body.appendChild(h.row),r.open(()=>g(null));})}get isOpen(){return this._modal!==null&&this._modal.isOpen}close(){this._modal!==null&&(this._modal.close(),this._modal=null);}};function di(i){let e=i.value;if(typeof e==\"string\"&&e.length>0){let o=Number(e);if(Number.isFinite(o)&&o>=1)return o}let t=i.querySelectorAll(\"option\");for(let o of Array.from(t))if(o.getAttribute(\"selected\")!==null){let r=o.getAttribute(\"value\")??\"\",s=Number(r);if(Number.isFinite(s)&&s>=1)return s}let n=t[0];if(n!==void 0){let o=n.getAttribute(\"value\")??\"\",r=Number(o);if(Number.isFinite(r)&&r>=1)return r}return 1}function ci(i,e,t,n){let o=i.monomer?.rgroups;if(o===void 0||o.length===0)return [{value:\"1\",label:\"R1\"},{value:\"2\",label:\"R2\"},{value:\"3\",label:\"R3\"}];let r;if(e!==void 0)r=new Set(e);else if(r=new Set(U(i,n.getMol().bonds)),r.size===0)for(let l=1;l<=o.length;l++)r.add(l);t!==void 0&&t>=1&&t<=o.length&&r.add(t);let s=[],a=Array.from(r).sort((l,d)=>l-d);for(let l of a){let d=o[l-1];if(d===void 0)continue;let u=d.capGroupName!==void 0&&d.capGroupName!==\"\"?` (${d.capGroupName})`:\"\";s.push({value:String(l),label:`${d.label}${u}`});}return s}var ui=\"next-add-cursor\",nt=28,Nt=nt*2;function mi(i){let e=\"data-testid\";for(let n=0;n<i.body.children.length;n++){let o=i.body.children[n];if(o!==void 0&&o.getAttribute(e)===ui)return o}let t=i.createElement(\"div\");return t.className=\"hw-next-add-cursor\",t.setAttribute(e,ui),t.style.display=\"none\",i.body.appendChild(t),t}function pi(i,e,t,n,o,r,s){let l=Be({p:{x:0,y:0},biotype:t,symbol:e},o),u=P(n,t,o.colorTheme).background,c=_t(u),m=e.length,p=m<=1?1:Math.min(1,2/m),h=o.fontSize*p,f=`<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"${-nt} ${-nt} ${Nt} ${Nt}\" width=\"${Nt}\" height=\"${Nt}\" class=\"hw-next-add-cursor__svg\" aria-hidden=\"true\"><path d=\"${l}\" fill=\"${u}\" stroke=\"${u}\" stroke-width=\"5\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><text x=\"0\" y=\"0\" text-anchor=\"middle\" dominant-baseline=\"central\" font-family=\"Helvetica Neue, Helvetica, Arial, sans-serif\" font-size=\"${h}\" fill=\"${c}\">${Ys(e)}</text></svg>`;i.innerHTML=f;let _=i.style;_.left=`${r-nt}px`,_.top=`${s-nt}px`,_.display=\"block\";}function ot(i){i!==null&&(i.style.display=\"none\");}function Ys(i){let e=\"\";for(let t=0;t<i.length;t++){let n=i.charAt(t);n===\"<\"?e+=\"&lt;\":n===\">\"?e+=\"&gt;\":n===\"&\"?e+=\"&amp;\":e+=n;}return e}var Ft=class{constructor(e,t,n){this._hoverAtom=null;this._hoverBond=null;this._dragOrigin=null;this._bondStart=null;this._bondDragMoved=false;this._rectDragHappened=false;this._chooseRDialog=null;this._panStart=null;this._atomDragState=null;this._panMoved=false;this._atomDragMoved=false;this._nextAddCursorEl=null;this._destroyed=false;this._unsubs=[];this._host=e,this._editor=t,this._enableContextMenu=n?.enableContextMenu??true,this._tester=new W(t.getMol(),t._currentTheme()),this._unsubs.push(t.on(\"mol:changed\",()=>{this._tester=new W(this._editor.getMol(),this._editor._currentTheme()),this._hoverAtom=null,this._hoverBond=null;})),this._unsubs.push(t.on(\"option:change\",o=>{(o.key===\"mode\"||o.key===\"nextAdd\")&&ot(this._nextAddCursorEl);})),this._onMove=o=>this._handleMove(o),this._onClick=o=>this._handleClick(o),this._onDblClick=o=>this._handleDblClick(o),this._onContextMenu=o=>this._handleContextMenu(o),this._onMouseDown=o=>this._handleMouseDown(o),this._onMouseUp=o=>this._handleMouseUp(o),this._onMouseLeave=o=>this._handleMouseLeave(o),this._onWheel=o=>this._handleWheel(o),e.addEventListener(\"mousemove\",this._onMove),e.addEventListener(\"click\",this._onClick),e.addEventListener(\"dblclick\",this._onDblClick),e.addEventListener(\"contextmenu\",this._onContextMenu),e.addEventListener(\"mousedown\",this._onMouseDown),e.addEventListener(\"mouseup\",this._onMouseUp),e.addEventListener(\"mouseleave\",this._onMouseLeave),e.addEventListener(\"wheel\",this._onWheel,{passive:false});}destroy(){if(!this._destroyed){this._destroyed=true;for(let e of this._unsubs)e();this._host.removeEventListener(\"mousemove\",this._onMove),this._host.removeEventListener(\"click\",this._onClick),this._host.removeEventListener(\"dblclick\",this._onDblClick),this._host.removeEventListener(\"contextmenu\",this._onContextMenu),this._host.removeEventListener(\"mousedown\",this._onMouseDown),this._host.removeEventListener(\"mouseup\",this._onMouseUp),this._host.removeEventListener(\"mouseleave\",this._onMouseLeave),this._host.removeEventListener(\"wheel\",this._onWheel),this._chooseRDialog!==null&&(this._chooseRDialog.close(),this._chooseRDialog=null),ot(this._nextAddCursorEl),this._nextAddCursorEl=null;}}_handleMove(e){if(this._panStart!==null){let s=this._toViewBox({clientX:e.clientX,clientY:e.clientY}),a=s.x-this._panStart.origin.x,l=s.y-this._panStart.origin.y;this._editor.panTo({x:this._panStart.initialOffset.x+a,y:this._panStart.initialOffset.y+l}),this._panMoved=true;return}if(this._atomDragState!==null){let s=this._toModel(e),a=s.x-this._atomDragState.pointerDownModel.x,l=s.y-this._atomDragState.pointerDownModel.y,d=[];for(let u of this._atomDragState.atomIds){let c=this._atomDragState.initialPositions.get(u);c!==void 0&&d.push({atomId:u,p:{x:c.x+a,y:c.y+l}});}this._editor.moveAtoms(d),this._atomDragMoved=true;return}let t=this._toModel(e),n=this._tester.test(t),o=n?.atom??null,r=n?.bond??null;if(this._bondStart!==null){this._bondDragMoved=true;let s=o!==null&&o.id!==this._bondStart.id?o:null;this._editor.fire(\"bond:preview\",{start:this._bondStart,cursor:t,candidate:s,kind:this._editor.getMode()===\"hbond\"?\"hbond\":\"backbone\"});}if(this._hoverAtom!==null&&(o===null||o.id!==this._hoverAtom.id)&&(this._editor.fire(\"monomer:hover-end\",{atom:this._hoverAtom}),this._hoverAtom=null),o!==null&&(this._hoverAtom===null||this._hoverAtom.id!==o.id)&&(this._hoverAtom=o,this._editor.fire(\"monomer:hover\",{atom:o,clientX:e.clientX,clientY:e.clientY,modelX:t.x,modelY:t.y})),this._hoverBond!==null&&(r===null||r.id!==this._hoverBond.id)&&(this._editor.fire(\"bond:hover-end\",{bond:this._hoverBond}),this._hoverBond=null),r!==null&&(this._hoverBond===null||this._hoverBond.id!==r.id)&&(this._hoverBond=r,this._editor.fire(\"bond:hover\",{bond:r,clientX:e.clientX,clientY:e.clientY})),this._dragOrigin!==null){let s=gi(this._dragOrigin,t);this._editor.fire(\"selection:rectangle-update\",{rect:s});}this._updateNextAddCursor(e);}_handleClick(e){if(this._bondDragMoved){this._bondDragMoved=false;return}if(this._rectDragHappened){this._rectDragHappened=false;return}if(this._panMoved){this._panMoved=false;return}if(this._atomDragMoved){this._atomDragMoved=false;return}let t=this._toModel(e),n=this._tester.test(t),o=yi(e),r=this._editor.getMode();if(r===\"eraser\"){if(n?.atom!==void 0){this._editor.removeAtom(n.atom);return}if(n?.bond!==void 0){this._editor.removeBond(n.bond);return}return}if(n?.atom!==void 0){if(r===\"select\"&&!o.ctrl&&!o.shift&&!o.meta){let s=this._editor.getNextAddSymbol();if(s!==null){if(n.atom.biotype===s.biotype){this._editor.replaceMonomer(n.atom,s.symbol);return}this._editor.fire(\"editor:status\",{message:`Cannot replace: ${n.atom.biotype} is incompatible with ${s.biotype}`,severity:\"warn\",durationMs:3e3});return}}this._editor.fire(\"monomer:click\",{atom:n.atom,modifiers:o,clientX:e.clientX,clientY:e.clientY});return}if(n?.bond!==void 0){this._editor.fire(\"bond:click\",{bond:n.bond,modifiers:o});return}if(this._addsEnabled()){let s=this._editor.getNextAddSymbol();if(s!==null){this._editor.addAtom(t,s.biotype,s.symbol);return}}!o.shift&&!o.ctrl&&!o.meta&&this._editor.clearSelection();}_handleDblClick(e){let t=this._toModel(e),n=this._tester.test(t),o=yi(e);if(n?.atom!==void 0){this._editor.fire(\"monomer:dblclick\",{atom:n.atom,modifiers:o});return}n===null&&this._editor.fitToContent();}_handleContextMenu(e){this._enableContextMenu||e.preventDefault();let t=this._toModel(e),n=this._tester.test(t),r=()=>{e.preventDefault();};n?.atom!==void 0?this._editor.fire(\"monomer:contextmenu\",{atom:n.atom,clientX:e.clientX,clientY:e.clientY,preventDefault:r}):n?.bond!==void 0&&this._editor.fire(\"bond:contextmenu\",{bond:n.bond,clientX:e.clientX,clientY:e.clientY,preventDefault:r});}_handleMouseDown(e){if(e.button!==0)return;let t=this._toModel(e),n=this._tester.test(t),o=this._editor.getMode(),r=e.ctrlKey===true||e.metaKey===true;if(n?.atom!==void 0){if(o===\"move\"||o===\"select\"&&r){let s=this._editor.getSelection(),l=s.atoms.has(n.atom.id)?Array.from(s.atoms):[n.atom.id],d=this._editor.getMol(),u=new Map;for(let c of l){let m=d.atoms.find(p=>p.id===c);m!==void 0&&u.set(c,{x:m.p.x,y:m.p.y});}this._atomDragState={atomIds:l,pointerDownModel:{x:t.x,y:t.y},initialPositions:u},this._atomDragMoved=false;return}this._bondStart=n.atom,this._bondDragMoved=false;return}if(n===null){if(o===\"move\"||o===\"select\"&&!r){let s=this._editor.getViewport();this._panStart={origin:this._toViewBox({clientX:e.clientX,clientY:e.clientY}),initialOffset:{x:s.offset.x,y:s.offset.y}},this._panMoved=false;return}o===\"select\"&&r&&(this._dragOrigin=t,this._editor.fire(\"selection:rectangle-start\",{origin:t}));}}_handleMouseUp(e){if(this._panStart!==null){this._panStart=null;return}if(this._atomDragState!==null){this._atomDragState=null;return}if(this._bondStart!==null){let a=this._bondStart,l=this._bondDragMoved;this._bondStart=null;let d=this._toModel(e),c=this._tester.test(d)?.atom;if(l&&c!==void 0&&c.id!==a.id){if(this._editor.fire(\"bond:preview-end\",{start:a}),this._editor.getMode()===\"hbond\"){try{this._editor.addHydrogenBond(a,c);}catch{this._editor.fire(\"bond:cancel\",{start:a});}return}let m=a.bio.chainId===c.bio.chainId&&bi(a,c,this._editor.getMol())?\"backbone\":\"cross-polymer\",p=hi(a,c,this._editor.getMol().bonds,m);if(p.mode===\"fail\"){this._editor.fire(\"bond:cancel\",{start:a}),this._editor.fire(\"editor:status\",{message:p.reason,severity:\"error\",durationMs:3e3});return}if(p.mode===\"auto\"){try{this._editor.addBond(a,c,p.r1,p.r2,p.kind);}catch{this._editor.fire(\"bond:cancel\",{start:a});}return}this._openChooseR(a,c,m,p.freeR1,p.freeR2);return}if(l){let m=this._addsEnabled()?this._editor.getNextAddSymbol():null;if(m!==null){let p;try{p=this._editor.addAtom(d,m.biotype,m.symbol);}catch{this._editor.fire(\"bond:cancel\",{start:a}),this._editor.fire(\"bond:preview-end\",{start:a});return}let h=this._editor.getMol().atoms.find(M=>M.id===a.id);if(h===void 0){this._editor.fire(\"bond:cancel\",{start:a}),this._editor.fire(\"bond:preview-end\",{start:a});return}let f=h.bio.chainId===p.bio.chainId&&bi(h,p,this._editor.getMol())?\"backbone\":\"cross-polymer\",_=U(h,this._editor.getMol().bonds),k=U(p,this._editor.getMol().bonds);if(_.includes(2)&&k.includes(1)){try{this._editor.addBond(h,p,2,1,f);}catch{this._editor.fire(\"bond:cancel\",{start:a});}this._editor.fire(\"bond:preview-end\",{start:a});return}let g=hi(h,p,this._editor.getMol().bonds,f);if(g.mode===\"fail\"){this._editor.fire(\"bond:cancel\",{start:a}),this._editor.fire(\"editor:status\",{message:g.reason,severity:\"error\",durationMs:3e3}),this._editor.fire(\"bond:preview-end\",{start:a});return}if(g.mode===\"auto\"){try{this._editor.addBond(h,p,g.r1,g.r2,g.kind);}catch{this._editor.fire(\"bond:cancel\",{start:a});}this._editor.fire(\"bond:preview-end\",{start:a});return}this._editor.fire(\"bond:preview-end\",{start:a}),this._openChooseR(h,p,f,g.freeR1,g.freeR2);return}this._editor.fire(\"bond:cancel\",{start:a}),this._editor.fire(\"bond:preview-end\",{start:a});return}return}if(this._dragOrigin===null)return;let t=this._toModel(e),n=gi(this._dragOrigin,t);this._dragOrigin=null;let o=this._tester.testRect(n),r=N.fromAtomsAndBonds(o.atoms.map(a=>a.id),o.bonds.map(a=>a.id)),s=N.union(this._editor.getSelection(),r);this._editor.setSelection(s),this._editor.fire(\"selection:rectangle-end\",{rect:n,selection:s}),this._rectDragHappened=true,s.atoms.size>0&&this._editor.getMode()===\"select\"&&this._editor.setMode(\"move\");}_handleMouseLeave(e){this._hoverAtom!==null&&(this._editor.fire(\"monomer:hover-end\",{atom:this._hoverAtom}),this._hoverAtom=null),this._hoverBond!==null&&(this._editor.fire(\"bond:hover-end\",{bond:this._hoverBond}),this._hoverBond=null),this._bondStart!==null&&(this._editor.fire(\"bond:cancel\",{start:this._bondStart}),this._editor.fire(\"bond:preview-end\",{start:this._bondStart}),this._bondStart=null,this._bondDragMoved=false),this._dragOrigin=null,this._panStart=null,this._atomDragState=null,this._panMoved=false,this._atomDragMoved=false,ot(this._nextAddCursorEl);}_openChooseR(e,t,n,o,r){this._chooseRDialog===null&&(this._chooseRDialog=new Fe(this._editor)),this._chooseRDialog.open(e,t,{freeR1:o,freeR2:r}).then(a=>{if(!this._destroyed){if(a===null){this._editor.fire(\"bond:cancel\",{start:e});return}try{this._editor.addBond(e,t,a.r1,a.r2,n);}catch{this._editor.fire(\"bond:cancel\",{start:e});}}});}_updateNextAddCursor(e){let t=this._editor.getNextAddSymbol(),n=this._editor.getMode(),o=this._hoverAtom!==null,r=this._bondStart!==null||this._dragOrigin!==null||this._panStart!==null||this._atomDragState!==null;if(!(n===\"select\"&&t!==null&&!o&&!r)){this._nextAddCursorEl!==null&&ot(this._nextAddCursorEl);return}let a=this._host.ownerDocument;if(a===null)return;this._nextAddCursorEl===null&&(this._nextAddCursorEl=mi(a));let l=this._editor.getService().monomerLib,d=null;for(let u of l.getPolymerTypes()){let c=l.getMonomer(u,t.symbol);if(c!==null){d=c;break}}pi(this._nextAddCursorEl,t.symbol,t.biotype,d,this._editor._currentTheme(),e.clientX,e.clientY);}_addsEnabled(){return this._editor.getMode()===\"select\"}_handleWheel(e){if(!e.ctrlKey&&!e.metaKey)return;e.preventDefault();let t=e.deltaY<0?1.1:1/1.1,n=this._toViewBox({clientX:e.clientX,clientY:e.clientY}),o=this._editor.getViewport(),r=o.scale===0?n:{x:(n.x-o.offset.x)/o.scale,y:(n.y-o.offset.y)/o.scale};this._editor.zoom(t,r);}_toModel(e){let t=this._host.querySelector(\"svg\"),n=t!==null?t.querySelector(\".hw-content\"):null;if(t!==null&&n!==null){let r=fi(n,e.clientX,e.clientY);if(r!==null)return r;let s=this._host.getBoundingClientRect(),a=e.clientX-s.left,l=e.clientY-s.top,d=Js(n.getAttribute(\"transform\")??\"\");return d!==null?{x:(a-d.tx)/(d.scale===0?1:d.scale),y:(l-d.ty)/(d.scale===0?1:d.scale)}:{x:a,y:l}}let o=this._host.getBoundingClientRect();return {x:e.clientX-o.left,y:e.clientY-o.top}}_toViewBox(e){let t=this._host.querySelector(\"svg\");if(t!==null){let o=fi(t,e.clientX,e.clientY);if(o!==null)return o;let r=this._host.getBoundingClientRect(),s=e.clientX-r.left,a=e.clientY-r.top,l=Xs(t.getAttribute(\"viewBox\"));return l!==null&&r.width>0&&r.height>0?{x:s*(l.w/r.width),y:a*(l.h/r.height)}:{x:s,y:a}}let n=this._host.getBoundingClientRect();return {x:e.clientX-n.left,y:e.clientY-n.top}}};function hi(i,e,t,n){let o=he(i),r=he(e);if(o===0||r===0)return {mode:\"auto\",r1:2,r2:1,kind:n};let s=U(i,t),a=U(e,t);if(s.length===0)return {mode:\"fail\",reason:`${i.symbol} has no free R-groups (max ${o}).`};if(a.length===0)return {mode:\"fail\",reason:`${e.symbol} has no free R-groups (max ${r}).`};if(s.includes(2)&&a.includes(1)&&(s.length===1||a.length===1))return {mode:\"auto\",r1:2,r2:1,kind:n};if(s.length===1&&a.length===1){let l=s[0],d=a[0];return {mode:\"auto\",r1:l,r2:d,kind:n}}return {mode:\"choose\",freeR1:s,freeR2:a}}function fi(i,e,t){let n=i;if(typeof n.getScreenCTM!=\"function\")return null;let o=n.getScreenCTM();if(o===null)return null;let r=null;try{let l=o;typeof l.inverse==\"function\"&&(r=l.inverse());}catch{return null}if(r===null)return null;let s=n.ownerSVGElement;if(s!=null&&typeof s.createSVGPoint==\"function\"){let l=s.createSVGPoint();l.x=e,l.y=t;let d=l.matrixTransform(r);return {x:d.x,y:d.y}}let a=r;return {x:a.a*e+a.c*t+a.e,y:a.b*e+a.d*t+a.f}}function Xs(i){if(i===null||i===\"\")return null;let e=i.split(/[,\\s]+/).map(o=>Number(o)).filter(o=>Number.isFinite(o));if(e.length<4)return null;let t=e[2],n=e[3];return t<=0||n<=0?null:{w:t,h:n}}function Js(i){if(i===\"\")return null;let e=0,t=0,n=1,o=/(translate|scale)\\(([^)]+)\\)/g,r,s=false;for(;(r=o.exec(i))!==null;){s=true;let a=r[1],l=(r[2]??\"\").split(/[,\\s]+/).map(d=>Number(d)).filter(d=>Number.isFinite(d));if(a===\"translate\"){let d=l[0]??0,u=l[1]??0;e=e+n*d,t=t+n*u;}else if(a===\"scale\"){let d=l[0]??1;n=n*d;}}return s?{tx:e,ty:t,scale:n}:null}function bi(i,e,t){if(i.bio.chainId!==e.bio.chainId)return false;let n=t.chains.find(s=>s.id===i.bio.chainId);if(n===void 0)return false;let o=-1,r=-1;for(let s=0;s<n.backboneAtoms.length;s++){let a=n.backboneAtoms[s];a.id===i.id&&(o=s),a.id===e.id&&(r=s);}return o<0||r<0?false:Math.abs(o-r)===1}function yi(i){return {shift:i.shiftKey===true,alt:i.altKey===true,ctrl:i.ctrlKey===true,meta:i.metaKey===true}}function gi(i,e){let t=Math.min(i.x,e.x),n=Math.min(i.y,e.y);return {x:t,y:n,width:Math.abs(i.x-e.x),height:Math.abs(i.y-e.y)}}var Gt=class{constructor(e,t,n){this._destroyed=false;this._host=e,this._editor=t,this._enabled=n?.enableKeyboard!==false,this._enabled&&e.getAttribute(\"tabindex\")===null&&e.setAttribute(\"tabindex\",\"0\"),this._onKey=o=>this._handleKey(o),e.addEventListener(\"keydown\",this._onKey);}destroy(){this._destroyed||(this._destroyed=true,this._host.removeEventListener(\"keydown\",this._onKey));}_handleKey(e){if(!this._enabled)return;let t=this._classify(e),n=Zs(e);if(t===null){this._editor.fire(\"key:unhandled\",{key:e.key,modifiers:n,preventDefault:()=>e.preventDefault()});return}let o=false,r=()=>{o=true,e.preventDefault();};this._editor.fire(\"key:command\",{command:t,preventDefault:r}),!o&&(e.preventDefault(),t!==\"clearSelection\"&&(e.stopPropagation(),e.stopImmediatePropagation?.()),this._execute(t));}_classify(e){let t=e.key,n=e.ctrlKey||e.metaKey;return t===\"Delete\"||t===\"Backspace\"?\"delete\":n&&(t===\"z\"||t===\"Z\")&&!e.shiftKey?\"undo\":n&&((t===\"z\"||t===\"Z\")&&e.shiftKey||t===\"y\"||t===\"Y\")?\"redo\":n&&(t===\"a\"||t===\"A\")?\"selectAll\":n&&(t===\"c\"||t===\"C\")?\"copy\":n&&(t===\"v\"||t===\"V\")?\"paste\":n&&(t===\"x\"||t===\"X\")?\"cut\":t===\"Escape\"?\"clearSelection\":t===\"+\"||t===\"=\"?\"zoomIn\":t===\"-\"||t===\"_\"?\"zoomOut\":t===\"0\"?\"fitToContent\":t===\"ArrowUp\"?\"nudgeUp\":t===\"ArrowDown\"?\"nudgeDown\":t===\"ArrowLeft\"?\"nudgeLeft\":t===\"ArrowRight\"?\"nudgeRight\":null}_execute(e){switch(e){case \"delete\":this._editor.deleteSelection();return;case \"undo\":this._editor.undo();return;case \"redo\":this._editor.redo();return;case \"selectAll\":this._editor.selectAll();return;case \"clearSelection\":this._editor.clearSelection();return;case \"zoomIn\":this._editor.zoom(1.1);return;case \"zoomOut\":this._editor.zoom(1/1.1);return;case \"fitToContent\":this._editor.fitToContent();return;case \"nudgeUp\":this._editor.nudgeSelection(0,-5);return;case \"nudgeDown\":this._editor.nudgeSelection(0,5);return;case \"nudgeLeft\":this._editor.nudgeSelection(-5,0);return;case \"nudgeRight\":this._editor.nudgeSelection(5,0);return;case \"copy\":{let t=this._editor.getHelm();this._editor.fire(\"clipboard:copy\",{format:\"helm\",payload:t});return}case \"cut\":{let t=this._editor.getHelm();this._editor.fire(\"clipboard:copy\",{format:\"helm\",payload:t}),this._editor.deleteSelection();return}case \"paste\":this._editor.fire(\"clipboard:paste\",{format:\"helm\"});return;default:return}}};function Zs(i){return {shift:i.shiftKey===true,alt:i.altKey===true,ctrl:i.ctrlKey===true,meta:i.metaKey===true}}var Qs=\"application/x-hwe-monomer\",Vt=class{constructor(e,t){this._currentPaletteSymbol=null;this._currentPaletteBiotype=null;this._destroyed=false;this._unsubs=[];this._host=e,this._editor=t,this._tester=new W(t.getMol(),t._currentTheme()),this._unsubs.push(t.on(\"mol:changed\",()=>{this._tester=new W(this._editor.getMol(),this._editor._currentTheme());})),this._onDragOver=n=>this._handleDragOver(n),this._onDrop=n=>this._handleDrop(n),this._onDragStart=n=>this._handleDragStart(n),this._onDragEnd=n=>this._handleDragEnd(n),this._onDragEnter=n=>this._handleDragEnter(n),this._onDragLeave=n=>this._handleDragLeave(n),e.addEventListener(\"dragover\",this._onDragOver),e.addEventListener(\"drop\",this._onDrop),e.addEventListener(\"dragstart\",this._onDragStart),e.addEventListener(\"dragend\",this._onDragEnd),e.addEventListener(\"dragenter\",this._onDragEnter),e.addEventListener(\"dragleave\",this._onDragLeave);}startPaletteDrag(e,t){this._currentPaletteSymbol=e,this._currentPaletteBiotype=t,this._editor.fire(\"dnd:start\",{source:\"palette\",symbol:e});}cancelPaletteDrag(){this._currentPaletteSymbol!==null&&(this._currentPaletteSymbol=null,this._currentPaletteBiotype=null,this._editor.fire(\"dnd:cancel\",{source:\"palette\"}));}destroy(){if(!this._destroyed){this._destroyed=true;for(let e of this._unsubs)e();this._host.removeEventListener(\"dragover\",this._onDragOver),this._host.removeEventListener(\"drop\",this._onDrop),this._host.removeEventListener(\"dragstart\",this._onDragStart),this._host.removeEventListener(\"dragend\",this._onDragEnd),this._host.removeEventListener(\"dragenter\",this._onDragEnter),this._host.removeEventListener(\"dragleave\",this._onDragLeave);}}_activePaletteSymbol(e){if(this._currentPaletteSymbol!==null&&this._currentPaletteBiotype!==null)return {symbol:this._currentPaletteSymbol,biotype:this._currentPaletteBiotype};let t=e.dataTransfer;if(t==null)return null;try{let n=typeof t.getData==\"function\"?t.getData(Qs):\"\";if(n===\"\")return null;let o=JSON.parse(n);return typeof o.symbol!=\"string\"||typeof o.biotype!=\"string\"?null:{symbol:o.symbol,biotype:o.biotype}}catch{return null}}_handleDragEnter(e){if(this._activePaletteSymbol(e)!==null&&(e.preventDefault(),e.dataTransfer!==null&&e.dataTransfer!==void 0))try{e.dataTransfer.dropEffect=\"copy\";}catch{}}_handleDragLeave(e){}_handleDragOver(e){if(this._activePaletteSymbol(e)===null)return;if(e.preventDefault(),e.dataTransfer!==null&&e.dataTransfer!==void 0)try{e.dataTransfer.dropEffect=\"copy\";}catch{}let n=this._toModel(e),o=this._tester.test(n),r=o?.atom!==void 0?o.atom:o?.bond!==void 0?o.bond:void 0,s={clientX:e.clientX,clientY:e.clientY};r!==void 0&&(s.target=r),this._editor.fire(\"dnd:over\",s);}_handleDrop(e){let t=this._activePaletteSymbol(e);if(t===null)return;e.preventDefault();let{symbol:n,biotype:o}=t,r=this._toModel(e),s=this._tester.test(r),a=s?.atom!==void 0?s.atom:s?.bond!==void 0?s.bond:void 0,l={symbol:n,biotype:o,clientX:e.clientX,clientY:e.clientY};a!==void 0&&(l.target=a),this._editor.fire(\"dnd:drop\",l),s?.atom!==void 0?this._editor.replaceMonomer(s.atom,n):this._editor.addAtom(r,o,n),this._currentPaletteSymbol=null,this._currentPaletteBiotype=null;}_handleDragStart(e){this._editor.fire(\"dnd:start\",{source:\"canvas\"});}_handleDragEnd(e){this._currentPaletteSymbol!==null&&(this._currentPaletteSymbol=null,this._currentPaletteBiotype=null,this._editor.fire(\"dnd:cancel\",{source:\"palette\"}));}_toModel(e){let t=this._host.querySelector(\"svg\"),n=t!==null?t.querySelector(\".hw-content\"):null;if(t!==null&&n!==null){let r=ea(n,e.clientX,e.clientY);if(r!==null)return r;let s=this._host.getBoundingClientRect(),a=e.clientX-s.left,l=e.clientY-s.top,d=ta(n.getAttribute(\"transform\")??\"\");return d!==null?{x:(a-d.tx)/(d.scale===0?1:d.scale),y:(l-d.ty)/(d.scale===0?1:d.scale)}:{x:a,y:l}}let o=this._host.getBoundingClientRect();return {x:e.clientX-o.left,y:e.clientY-o.top}}};function ea(i,e,t){let n=i;if(typeof n.getScreenCTM!=\"function\")return null;let o=n.getScreenCTM();if(o===null)return null;let r=null;try{let l=o;typeof l.inverse==\"function\"&&(r=l.inverse());}catch{return null}if(r===null)return null;let s=n.ownerSVGElement;if(s!=null&&typeof s.createSVGPoint==\"function\"){let l=s.createSVGPoint();l.x=e,l.y=t;let d=l.matrixTransform(r);return {x:d.x,y:d.y}}let a=r;return {x:a.a*e+a.c*t+a.e,y:a.b*e+a.d*t+a.f}}function ta(i){if(i===\"\")return null;let e=0,t=0,n=1,o=/(translate|scale)\\(([^)]+)\\)/g,r,s=false;for(;(r=o.exec(i))!==null;){s=true;let a=r[1],l=(r[2]??\"\").split(/[,\\s]+/).map(d=>Number(d)).filter(d=>Number.isFinite(d));if(a===\"translate\"){let d=l[0]??0,u=l[1]??0;e=e+n*d,t=t+n*u;}else if(a===\"scale\"){let d=l[0]??1;n=n*d;}}return s?{tx:e,ty:t,scale:n}:null}var Ge=class{constructor(e,t){this._modal=null;this._atom=null;this._editor=e;let n=e._getHost();if(n===null)throw new Error(\"AtomPropsDialog: editor has no host element.\");this._doc=t?.documentImpl??E(n);}get isOpen(){return this._modal!==null&&this._modal.isOpen}open(e){this.close(),this._atom=e;let t=this._editor._getHost();if(t===null)return;let n=new q(t,{documentImpl:this._doc,title:\"Monomer Properties\",testId:\"atom-props\"});this._modal=n;let o=y(this._doc,\"div\",{class:\"hw-modal__info\"},[`Position ${e.bio.continuousId} in ${e.bio.chainId}`]),r=De(this._doc,\"Symbol\",e.symbol,\"atom-props-symbol\"),s=De(this._doc,\"Annotation\",e.bio.annotation??\"\",\"atom-props-annotation\"),a=Ne(this._doc,\"atom-props\"),l=()=>this._commit(r.input.value,s.input.value);a.ok.addEventListener(\"click\",l),a.cancel.addEventListener(\"click\",()=>this.close()),n.setPrimaryAction(l),n.body.appendChild(o),n.body.appendChild(r.row),n.body.appendChild(s.row),n.body.appendChild(a.row),n.open();}close(){this._modal!==null&&(this._modal.close(),this._modal=null),this._atom=null;}_commit(e,t){let n=this._atom;if(n===null){this.close();return}let o=e.trim(),r=(n.bio.annotation??\"\")!==t;if(o.length>0&&o!==n.symbol&&this._editor.replaceMonomer(n,o),r){let a=new $(this._editor.getMol()),l={};l.tag=t===\"\"?void 0:t,a.updateAtom(n.id,l);let{mol:d}=a.commit();this._editor.setMol(d);let u=d.atoms.find(c=>c.id===n.id);if(u!==void 0){let c={atom:u};n.bio.annotation!==void 0&&(c.oldAnnotation=n.bio.annotation),t!==\"\"&&(c.newAnnotation=t),this._editor.fire(\"monomer:annotate\",c);}}this.close();}};var Ve=class{constructor(e,t){this._modal=null;this._bond=null;this._editor=e;let n=e._getHost();if(n===null)throw new Error(\"BondPropsDialog: editor has no host element.\");this._doc=t?.documentImpl??E(n);}get isOpen(){return this._modal!==null&&this._modal.isOpen}open(e){this.close(),this._bond=e;let t=this._editor._getHost();if(t===null)return;let n=new q(t,{documentImpl:this._doc,title:\"Bond Properties\",testId:\"bond-props\"});this._modal=n;let o=y(this._doc,\"div\",{class:\"hw-modal__info\"},[`Kind: ${e.kind}`]),r=this._buildAtomsPreviewRow(e),s=e.r1.kind===\"numeric\",a=e.r2.kind===\"numeric\",l=s&&a,u=this._editor.getMol().bonds,c=l?_i(e.r1,e.a1,u):[],m=l?_i(e.r2,e.a2,u):[],p=null,h=null;if(l){let k=String(e.r1.r),g=String(e.r2.r);p=Oe(this._doc,`R-group on ${e.a1.symbol} (${e.a1.bio.chainId}:${e.a1.bio.positionInChain})`,c,k,\"bond-props-r1\"),h=Oe(this._doc,`R-group on ${e.a2.symbol} (${e.a2.bio.chainId}:${e.a2.bio.positionInChain})`,m,g,\"bond-props-r2\");}let f=Ne(this._doc,\"bond-props\"),_=()=>{let k=p!==null?Number(vi(p.select,e.r1.r)):null,g=h!==null?Number(vi(h.select,e.r2.r)):null;this._commit(k,g);};f.ok.addEventListener(\"click\",_),f.cancel.addEventListener(\"click\",()=>this.close()),n.setPrimaryAction(_),n.body.appendChild(o),r!==null&&n.body.appendChild(r),p!==null&&n.body.appendChild(p.row),h!==null&&n.body.appendChild(h.row),n.body.appendChild(f.row),n.open();}_buildAtomsPreviewRow(e){let t=this._rdkit(),n=this._buildAtomCell(e.a1,t,\"bond-props-atom-a1\"),o=this._buildAtomCell(e.a2,t,\"bond-props-atom-a2\"),r=y(this._doc,\"div\",{class:\"hw-bond-props__bond-arrow\"},[\"\\u2194\"]);return y(this._doc,\"div\",{class:\"hw-bond-props__atoms\",\"data-testid\":\"bond-props-atoms\"},[n,r,o])}_buildAtomCell(e,t,n){let o=e.monomer?.name??e.symbol,r=e.symbol===o?e.symbol:`${e.symbol} \\u2014 ${o}`,s=y(this._doc,\"div\",{class:\"hw-bond-props__atom-label\"},[r]),a={class:\"hw-bond-props__atom-rdkit\",\"data-testid\":`${n}-rdkit`},l=y(this._doc,\"div\",a),d=e.monomer?.smiles;if(t!==null&&d!==void 0&&d!==\"\"){let u=fe(t,d,220,140);u!==null&&u!==\"\"&&(l.innerHTML=u);}return y(this._doc,\"div\",{class:\"hw-bond-props__atom\",\"data-testid\":n},[s,l])}_rdkit(){let t=this._editor.getService().options?.rdkitModule;return t??null}close(){this._modal!==null&&(this._modal.close(),this._modal=null),this._bond=null;}_commit(e,t){let n=this._bond;if(n===null){this.close();return}let o=n.r1.kind===\"numeric\"?n.r1.r:null,r=n.r2.kind===\"numeric\"?n.r2.r:null;if(!(e!==null&&t!==null&&(e!==o||t!==r))){this.close();return}if(e!==null&&t!==null){let a=n.kind,l=n.a1,d=n.a2;this._editor.removeBond(n);try{this._editor.addBond(l,d,e,t,a);}catch(u){if(o!==null&&r!==null)try{this._editor.addBond(l,d,o,r,n.kind);}catch{}}}this.close();}};function _i(i,e,t){let n=e.monomer?.rgroups;if(n===void 0||n.length===0)return [{value:\"1\",label:\"R1\"},{value:\"2\",label:\"R2\"},{value:\"3\",label:\"R3\"}];let o=new Set(U(e,t));o.add(i.r);let r=Array.from(o).sort((a,l)=>a-l),s=[];for(let a of r){let l=n[a-1];if(l===void 0)continue;let d=l.capGroupName!==void 0&&l.capGroupName!==\"\"?` (${l.capGroupName})`:\"\";s.push({value:String(a),label:`${l.label}${d}`});}return s}function vi(i,e){let t=i.value;if(typeof t==\"string\"&&t.length>0){let o=Number(t);if(Number.isFinite(o)&&o>=1)return o}let n=i.querySelectorAll(\"option\");for(let o of Array.from(n))if(o.getAttribute(\"selected\")!==null){let r=o.getAttribute(\"value\")??\"\",s=Number(r);if(Number.isFinite(s)&&s>=1)return s}return e}var Ue=class{constructor(e,t){this._modal=null;this._result=null;this._findInput=null;this._replaceInput=null;this._matches=[];this._cursor=-1;this._editor=e;let n=e._getHost();if(n===null)throw new Error(\"FindReplaceDialog: editor has no host element.\");this._doc=t?.documentImpl??E(n);}get isOpen(){return this._modal!==null&&this._modal.isOpen}open(){this.close();let e=this._editor._getHost();if(e===null)return;let t=new q(e,{documentImpl:this._doc,title:\"Find / Replace\",testId:\"find-replace\"});this._modal=t;let n=De(this._doc,\"Find\",\"\",\"find-replace-find\"),o=De(this._doc,\"Replace with\",\"\",\"find-replace-replace\");this._findInput=n.input,this._replaceInput=o.input;let r=this._doc.createElement(\"button\");r.setAttribute(\"class\",\"hw-modal__find-next\"),r.setAttribute(\"type\",\"button\"),r.setAttribute(\"data-testid\",\"find-replace-next\"),r.appendChild(this._doc.createTextNode(\"Find Next\")),r.addEventListener(\"click\",()=>this._findNext());let s=this._doc.createElement(\"button\");s.setAttribute(\"class\",\"hw-modal__replace\"),s.setAttribute(\"type\",\"button\"),s.setAttribute(\"data-testid\",\"find-replace-replace-one\"),s.appendChild(this._doc.createTextNode(\"Replace\")),s.addEventListener(\"click\",()=>this._replaceOne());let a=this._doc.createElement(\"button\");a.setAttribute(\"class\",\"hw-modal__replace-all\"),a.setAttribute(\"type\",\"button\"),a.setAttribute(\"data-testid\",\"find-replace-replace-all\"),a.appendChild(this._doc.createTextNode(\"Replace All\")),a.addEventListener(\"click\",()=>this._replaceAll());let l=this._doc.createElement(\"button\");l.setAttribute(\"class\",\"hw-modal__cancel\"),l.setAttribute(\"type\",\"button\"),l.setAttribute(\"data-testid\",\"find-replace-close\"),l.appendChild(this._doc.createTextNode(\"Close\")),l.addEventListener(\"click\",()=>this.close());let d=y(this._doc,\"div\",{class:\"hw-modal__actions\"},[r,s,a,l]),u=y(this._doc,\"div\",{class:\"hw-modal__result\",\"data-testid\":\"find-replace-result\"},[\"0 matches\"]);this._result=u,t.setPrimaryAction(()=>this._findNext()),t.body.appendChild(n.row),t.body.appendChild(o.row),t.body.appendChild(d),t.body.appendChild(u),t.open();}close(){this._modal!==null&&(this._modal.close(),this._modal=null),this._result=null,this._findInput=null,this._replaceInput=null,this._matches=[],this._cursor=-1;}_findNext(){let e=this._findInput?.value.trim()??\"\";if(e===\"\"){this._setResultText(\"Enter a symbol to find\");return}let t=this._editor.findMonomers(e);if(this._matches=t.map(o=>o.id),this._matches.length===0){this._cursor=-1,this._editor.setHighlights([]),this._setResultText(\"No matches\");return}this._cursor=(this._cursor+1)%this._matches.length;let n=this._matches[this._cursor];n!==void 0&&this._editor.setHighlights([n]),this._setResultText(`${this._cursor+1} / ${this._matches.length} matches`);}_replaceOne(){let e=this._findInput?.value.trim()??\"\",t=this._replaceInput?.value.trim()??\"\";if(e===\"\"||t===\"\"){this._setResultText(\"Both Find and Replace fields are required\");return}if(this._matches.length===0||this._cursor<0){this._findNext();return}let n=this._matches[this._cursor];if(n===void 0)return;let o=this._editor.getMol().atoms.find(r=>r.id===n);if(o!==void 0)if(this._editor.replaceMonomer(o,t),this._matches.splice(this._cursor,1),this._matches.length===0)this._cursor=-1,this._editor.setHighlights([]),this._setResultText(\"Replaced; no further matches\");else {this._cursor=this._cursor%this._matches.length;let r=this._matches[this._cursor];r!==void 0&&this._editor.setHighlights([r]),this._setResultText(`${this._matches.length} matches remaining`);}}_replaceAll(){let e=this._findInput?.value.trim()??\"\",t=this._replaceInput?.value.trim()??\"\";if(e===\"\"||t===\"\"){this._setResultText(\"Both Find and Replace fields are required\");return}let n=this._editor.replaceMonomers(e,t);this._matches=[],this._cursor=-1,this._editor.setHighlights([]),this._setResultText(`${n} replacement${n===1?\"\":\"s\"} made`);}_setResultText(e){if(this._result!==null){for(;this._result.firstChild!==null;)this._result.removeChild(this._result.firstChild);this._result.appendChild(this._doc.createTextNode(e));}}};var be=Object.freeze(new Set),it=class{constructor(e,t){this._events=new He;this._destroyed=false;this._view=null;this._pointer=null;this._keyboard=null;this._dnd=null;this._atomDialog=null;this._bondDialog=null;this._findReplaceDialog=null;this._viewBootstrapped=false;this._mode=\"select\";this._nextAdd=null;this._lastAction=null;this._lastTripletSugarPos=null;if(t.service===void 0||t.service===null)throw new TypeError(\"HelmEditor: options.service is required\");this._host=e,this._service=t.service,this._options=Object.freeze({...t}),this._mol=ce(),this._selection=N.empty(),this._highlights=be,this._theme=t.service.theme??I,this._viewport={scale:1,offset:{x:0,y:0}},this._viewOnly=t.viewOnly??false,this._history=new $e({maxEntries:100}),this._history.push({mol:this._mol,label:\"initial\"}),this._libUnsub=this._service.monomerLib.onChanged.subscribe(n=>{let o=this._service.monomerLib,r=typeof o.version==\"number\"?o.version:0,s=n.type===\"reload\"?\"replace\":\"update\";this._events.fire(\"monomer-lib:change\",{source:this._service.monomerLib.source,version:r,reason:s});}),t.initialHelm!==void 0&&this.setHelm(t.initialHelm),this._bootstrapWaveB();}_bootstrapWaveB(){if(this._viewBootstrapped||this._host===null)return;let e=this._resolveDocument(this._host);if(e===null)return;this._viewBootstrapped=true;let t={documentImpl:e};this._options.width!==void 0&&(t.width=this._options.width),this._options.height!==void 0&&(t.height=this._options.height),this._view=new Dt(this._host,this,t),this._viewOnly!==true&&(this._pointer=new Ft(this._host,this,{enableContextMenu:this._options.enableContextMenu??true})),this._options.enableKeyboard!==false&&(this._keyboard=new Gt(this._host,this,{enableKeyboard:true})),this._options.enableDragDrop!==false&&(this._dnd=new Vt(this._host,this)),this._events.on(\"monomer:hover\",n=>{this.setHighlights([n.atom.id]);}),this._events.on(\"monomer:hover-end\",()=>{this.clearHighlights();}),this._events.on(\"monomer:click\",n=>{let o=n.modifiers;if(o.ctrl===true||o.meta===true){this.setSelection(N.toggle(this._selection,{kind:\"atom\",id:n.atom.id}));return}if(o.shift===true){this.setSelection(N.union(this._selection,N.fromAtoms([n.atom.id])));return}this.setSelection(N.fromAtoms([n.atom.id]));});}_resolveDocument(e){let t=e.ownerDocument;if(t!=null)return t;let n=globalThis;return n.document!==void 0?n.document:null}destroy(){this._destroyed||(this._destroyed=true,this._atomDialog!==null&&(this._atomDialog.close(),this._atomDialog=null),this._bondDialog!==null&&(this._bondDialog.close(),this._bondDialog=null),this._findReplaceDialog!==null&&(this._findReplaceDialog.close(),this._findReplaceDialog=null),this._dnd!==null&&(this._dnd.destroy(),this._dnd=null),this._keyboard!==null&&(this._keyboard.destroy(),this._keyboard=null),this._pointer!==null&&(this._pointer.destroy(),this._pointer=null),this._view!==null&&(this._view.destroy(),this._view=null),this._libUnsub(),this._events.clear(),this._history.clear());}resize(e,t){this._ensureLive(),this._view!==null&&this._view.resize(e,t),this._events.fire(\"view:resize\",{width:e,height:t});}redraw(){if(this._ensureLive(),this._view!==null){this._view.redraw();return}this._events.fire(\"render:skip\",{reason:\"no-view-mounted\"});}setHelm(e,t){this._ensureLive();let n=t?.canonicalize??this._options.canonicalize??false,o=this._service.parse(e,{mode:\"lenient\"}),r=o.diagnostics;r.filter(d=>d.severity===\"error\").length>0&&this._events.fire(\"helm:parse-error\",{helm:e,diagnostics:r});for(let d of r)d.severity===\"error\"?this._events.fire(\"validation:error\",{diagnostic:d}):d.severity===\"warning\"&&this._events.fire(\"validation:warning\",{diagnostic:d});let a=o.mol;if(n){let d=this._service.canonicalize(e);a=this._service.parse(d,{mode:\"lenient\"}).mol;}let l=ee(a,this._options.bondLength!==void 0?{bondLength:this._options.bondLength}:void 0);return this._replaceMol(l,\"setHelm\",\"api\"),{mol:l,diagnostics:r}}getHelm(e){this._ensureLive();let t={};return e?.canonicalize!==void 0&&(t.canonicalize=e.canonicalize),e?.includeHighlights!==void 0&&(t.includeHighlights=e.includeHighlights),this._service.serialize(this._mol,t)}setMol(e){this._ensureLive(),this._replaceMol(e,\"setMol\",\"api\");}getMol(){return this._mol}getService(){return this._service}getSelection(){return this._selection}setSelection(e){if(this._ensureLive(),N.equals(this._selection,e))return;let t=N.difference(e,this._selection),n=N.difference(this._selection,e);this._selection=e,this._events.fire(\"selection:change\",{selection:e,addedAtomIds:t.atoms,removedAtomIds:n.atoms,addedBondIds:t.bonds,removedBondIds:n.bonds});}selectAll(){this._ensureLive();let e=this._mol.atoms.map(n=>n.id),t=this._mol.bonds.map(n=>n.id);this.setSelection(N.fromAtomsAndBonds(e,t));}clearSelection(){this._ensureLive(),!this._selection.isEmpty&&this.setSelection(N.empty());}setHighlights(e){this._ensureLive();let t=new Set(e);this._highlights=t,this._events.fire(\"highlight:change\",{atomIds:t,bondIds:be});}clearHighlights(){this._ensureLive(),this._highlights.size!==0&&(this._highlights=be,this._events.fire(\"highlight:change\",{atomIds:be,bondIds:be}));}addAtom(e,t,n){this._ensureLive();let o=new $(this._mol),r=o.addAtom({p:e,biotype:t,symbol:n}),{mol:s}=o.commit(),a=ve(s,this._service.monomerLib,{mode:\"lenient\"}).mol;this._replaceMol(a,`addAtom:${n}`,\"api\");let l=Y(a,r);if(l===void 0)throw new Error(\"HelmEditor.addAtom: lost atom after commit\");return this._events.fire(\"monomer:add\",{atom:l,source:\"api\"}),l}removeAtom(e){this._ensureLive();let t=typeof e==\"number\"?e:e.id,n=Y(this._mol,t);if(n===void 0)return;let o=new $(this._mol);o.removeAtom(t);let{mol:r}=o.commit();this._replaceMol(r,`removeAtom:${n.symbol}`,\"api\"),this._events.fire(\"monomer:remove\",{atom:n,source:\"api\"});}addBond(e,t,n,o,r){this._ensureLive();let s,a;try{this._validateAddBondConstraints(e,t,n,o);let d=r??\"backbone\",u=this._maybeMergeForLinearExtend(e,t,n,o,d);if(u!==null)({id:s,mol:a}=u);else {let c=new $(this._mol);s=c.addBond({a1:e.id,a2:t.id,kind:r??\"backbone\",r1:{kind:\"numeric\",r:n},r2:{kind:\"numeric\",r:o}}),{mol:a}=c.commit();}}catch(d){let u=d instanceof B?d.message:this._friendlyBondError(d instanceof Error?d.message:String(d),e,t,n,o);throw this._events.fire(\"editor:status\",{message:`Could not add bond: ${u}`,severity:\"error\",durationMs:3e3}),d}this._replaceMol(a,\"addBond\",\"api\");let l=yt(a,s);if(l===void 0)throw new Error(\"HelmEditor.addBond: lost bond after commit\");return this._events.fire(\"bond:add\",{bond:l,source:\"api\"}),l}_maybeMergeForLinearExtend(e,t,n,o,r){if(e.bio.chainId===t.bio.chainId||r!==\"backbone\"&&r!==\"cross-polymer\")return null;let s=this._mol.chains.find(l=>l.id===e.bio.chainId),a=this._mol.chains.find(l=>l.id===t.bio.chainId);if(s===void 0||a===void 0||s.polymerType!==a.polymerType)return null;if(n===2&&o===1){let l=s.backboneAtoms[s.backboneAtoms.length-1],d=a.backboneAtoms[0];if(l!==void 0&&d!==void 0&&l.id===e.id&&d.id===t.id)return this._mergeChains(s,a,r)}if(n===1&&o===2){let l=s.backboneAtoms[0],d=a.backboneAtoms[a.backboneAtoms.length-1];if(l!==void 0&&d!==void 0&&l.id===e.id&&d.id===t.id)return this._mergeChains(a,s,r)}return null}_mergeChains(e,t,n){let o=e.backboneAtoms.length,r=new Set;for(let g of t.backboneAtoms)r.add(g.id),g.branchAtom!==void 0&&r.add(g.branchAtom.id);let s=new Map,a=o;for(let g of t.backboneAtoms){a+=1;let M={...g,bio:{...g.bio,chainId:e.id,positionInChain:a}};if(s.set(g.id,M),g.branchAtom!==void 0){let A=g.branchAtom,w={...A,bio:{...A.bio,chainId:e.id,positionInChain:a}};s.set(A.id,w);}}for(let g of t.backboneAtoms){let M=s.get(g.id);if(M===void 0||g.branchAtom===void 0)continue;let A=s.get(g.branchAtom.id);A!==void 0&&(M.branchAtom=A);}for(let g of this._mol.atoms)s.has(g.id)||s.set(g.id,g);let l=0;for(let g of this._mol.atoms)g.id>l&&(l=g.id);for(let g of this._mol.bonds)g.id>l&&(l=g.id);let d=l+1,u=s.get(e.backboneAtoms[e.backboneAtoms.length-1].id),c=s.get(t.backboneAtoms[0].id),m={id:d,a1:u,a2:c,kind:\"backbone\",r1:{kind:\"numeric\",r:2},r2:{kind:\"numeric\",r:1}},p=[];for(let g of this._mol.bonds){let M=s.get(g.a1.id)??g.a1,A=s.get(g.a2.id)??g.a2;M===g.a1&&A===g.a2?p.push(g):p.push({...g,a1:M,a2:A});}p.push(m);let h=[],f=[...e.backboneAtoms];for(let g of t.backboneAtoms)f.push(s.get(g.id));for(let g of this._mol.chains)if(g.id!==t.id)if(g.id===e.id){let M=g.bonds.map(A=>{let w=s.get(A.a1.id)??A.a1,T=s.get(A.a2.id)??A.a2;return w===A.a1&&T===A.a2?A:{...A,a1:w,a2:T}});for(let A of t.bonds){let w=s.get(A.a1.id)??A.a1,T=s.get(A.a2.id)??A.a2;M.push(w===A.a1&&T===A.a2?A:{...A,a1:w,a2:T});}M.push(m),h.push({id:g.id,polymerType:g.polymerType,backboneAtoms:f,bonds:M,...g.annotation!==void 0?{annotation:g.annotation}:{}});}else {let M=g.backboneAtoms.map(w=>s.get(w.id)??w),A=g.bonds.map(w=>{let T=s.get(w.a1.id)??w.a1,S=s.get(w.a2.id)??w.a2;return T===w.a1&&S===w.a2?w:{...w,a1:T,a2:S}});h.push({id:g.id,polymerType:g.polymerType,backboneAtoms:M,bonds:A,...g.annotation!==void 0?{annotation:g.annotation}:{}});}let k={atoms:this._mol.atoms.map(g=>s.get(g.id)??g),bonds:p,chains:h,groups:this._mol.groups,annotations:this._mol.annotations};return k=this._refreshContinuousIdsLocal(k),{id:d,mol:k}}_refreshContinuousIdsLocal(e){let t=Te(e),n=new Map;for(let l of e.atoms){let d=t.get(l.id);if(d===void 0||d===l.bio.continuousId){n.set(l.id,l);continue}n.set(l.id,{...l,bio:{...l.bio,continuousId:d}});}for(let l of e.atoms){if(l.branchAtom===void 0)continue;let d=n.get(l.id),u=n.get(l.branchAtom.id);d===void 0||u===void 0||(d.branchAtom=u);}let o=e.bonds.map(l=>{let d=n.get(l.a1.id)??l.a1,u=n.get(l.a2.id)??l.a2;return d===l.a1&&u===l.a2?l:{...l,a1:d,a2:u}}),r=new Map;for(let l of o)r.set(l.id,l);let s=e.chains.map(l=>{let d=l.backboneAtoms.map(c=>n.get(c.id)??c),u=l.bonds.map(c=>r.get(c.id)??c);return {id:l.id,polymerType:l.polymerType,backboneAtoms:d,bonds:u,...l.annotation!==void 0?{annotation:l.annotation}:{}}});return {atoms:e.atoms.map(l=>n.get(l.id)??l),bonds:o,chains:s,groups:e.groups,annotations:e.annotations}}_friendlyBondError(e,t,n,o,r){return e.includes(\"duplicate bond\")?`bond ${t.symbol}:R${o} \\u2194 ${n.symbol}:R${r} already exists`:e.includes(\"does not exist\")?\"one of the endpoint atoms is missing\":e}_validateAddBondConstraints(e,t,n,o){let r=this._mol.bonds,s=he(e);if(s>0&&(n<1||n>s))throw new B(\"rgroup-not-on-monomer\",`R-group R${n} is not defined on monomer '${e.symbol}' (has R1..R${s})`,{atomId:e.id,requested:n,total:s});let a=he(t);if(a>0&&(o<1||o>a))throw new B(\"rgroup-not-on-monomer\",`R-group R${o} is not defined on monomer '${t.symbol}' (has R1..R${a})`,{atomId:t.id,requested:o,total:a});if(s>0){let l=It(e,r).find(d=>d.rNumber===n);if(l!==void 0){let d=l.side===\"r1\"?l.bond.a2:l.bond.a1;throw new B(\"rgroup-already-bonded\",`R-group R${n} on '${e.symbol}' is already bonded to '${d.symbol}' (${d.bio.chainId}:${d.bio.positionInChain})`,{atomId:e.id,requested:n,conflictingBondId:l.bond.id})}}if(a>0){let l=It(t,r).find(d=>d.rNumber===o);if(l!==void 0){let d=l.side===\"r1\"?l.bond.a2:l.bond.a1;throw new B(\"rgroup-already-bonded\",`R-group R${o} on '${t.symbol}' is already bonded to '${d.symbol}' (${d.bio.chainId}:${d.bio.positionInChain})`,{atomId:t.id,requested:o,conflictingBondId:l.bond.id})}}for(let l of r){if(l.r1.kind!==\"numeric\"||l.r2.kind!==\"numeric\")continue;let d=l.a1.id===e.id&&l.a2.id===t.id&&l.r1.r===n&&l.r2.r===o,u=l.a1.id===t.id&&l.a2.id===e.id&&l.r1.r===o&&l.r2.r===n;if(d||u)throw new B(\"duplicate-bond\",`bond ${e.symbol}:R${n} \\u2194 ${t.symbol}:R${o} already exists`,{atomId:e.id,bondId:l.id})}}_freeRgroupsOn(e){return U(e,this._mol.bonds)}addHydrogenBond(e,t){this._ensureLive();let n=new $(this._mol),o={kind:\"pair\"},r=n.addBond({a1:e.id,a2:t.id,kind:\"hbond\",r1:o,r2:o}),{mol:s}=n.commit();this._replaceMol(s,\"addHydrogenBond\",\"api\");let a=yt(s,r);if(a===void 0)throw new Error(\"HelmEditor.addHydrogenBond: lost bond after commit\");return this._events.fire(\"bond:add\",{bond:a,source:\"api\"}),a}removeBond(e){this._ensureLive();let t=typeof e==\"number\"?e:e.id,n=yt(this._mol,t);if(n===void 0)return;let o=new $(this._mol);o.removeBond(t);let{mol:r}=o.commit();this._replaceMol(r,\"removeBond\",\"api\"),this._events.fire(\"bond:remove\",{bond:n,source:\"api\"});}replaceMonomer(e,t){this._ensureLive();let n=Y(this._mol,e.id);if(n===void 0)return;let o=n.symbol;if(o===t)return;let r=new $(this._mol);r.updateAtom(e.id,{symbol:t});let{mol:s}=r.commit(),a=ve(s,this._service.monomerLib,{mode:\"lenient\"}).mol;this._replaceMol(a,`replaceMonomer:${o}->${t}`,\"api\");let l=Y(a,e.id);l!==void 0&&this._events.fire(\"monomer:replace\",{atom:l,oldSymbol:o,newSymbol:t});}hitTest(e,t){this._ensureLive();let o=new W(this._mol,this._theme).test({x:e,y:t});return o===null?null:o.atom!==void 0?{atom:o.atom}:o.bond!==void 0?{bond:o.bond}:null}moveAtom(e,t){this._ensureLive();let n=Y(this._mol,e);if(n===void 0||n.p.x===t.x&&n.p.y===t.y)return;let o=new $(this._mol);o.updateAtom(e,{p:{x:t.x,y:t.y}});let{mol:r}=o.commit();this._replaceMol(r,\"moveAtom\",\"user\");}moveAtoms(e){if(this._ensureLive(),e.length===0)return;let t=new $(this._mol),n=0;for(let r of e){let s=Y(this._mol,r.atomId);s!==void 0&&(s.p.x===r.p.x&&s.p.y===r.p.y||(t.updateAtom(r.atomId,{p:{x:r.p.x,y:r.p.y}}),n+=1));}if(n===0)return;let{mol:o}=t.commit();this._replaceMol(o,\"moveAtom\",\"user\");}cleanLayout(e){this._ensureLive(),this._resetLastAction();let t=ee(this._mol,this._options.bondLength!==void 0?{bondLength:this._options.bondLength}:void 0);this._mol=t,this._history.push({mol:t,label:\"cleanLayout\"}),this._events.fire(\"layout:change\",{mol:t,strategy:\"auto\"}),this._events.fire(\"mol:changed\",{mol:t,changedAtomIds:new Set(t.atoms.map(n=>n.id)),changedBondIds:be,reason:\"cleanLayout\"});}canUndo(){return this._history.canUndo()}canRedo(){return this._history.canRedo()}undo(){this._ensureLive();let e=this._history.undo();e!==null&&this._restoreFromHistory(e.mol,\"undo\");}redo(){this._ensureLive();let e=this._history.redo();e!==null&&this._restoreFromHistory(e.mol,\"redo\");}on(e,t){return this._events.on(e,t)}off(e,t){this._events.off(e,t);}fire(e,t){this._events.fire(e,t);}zoom(e,t){if(this._ensureLive(),!Number.isFinite(e)||e<=0)return;let n=this._viewport.scale,o=n*e,r={...this._viewport.offset},s=r;t!==void 0&&(s={x:r.x+(n-o)*t.x,y:r.y+(n-o)*t.y});let a={scale:o,offset:s};this._viewport=a;let l=t??{x:0,y:0};this._events.fire(\"view:zoom\",{scale:o,center:l,previousScale:n}),this._events.fire(\"view:viewport-change\",{viewport:a});}panTo(e){this._ensureLive();let t={...this._viewport.offset},n={scale:this._viewport.scale,offset:{...e}};this._viewport=n,this._events.fire(\"view:pan\",{offset:n.offset,previousOffset:t}),this._events.fire(\"view:viewport-change\",{viewport:n});}getViewport(){return {scale:this._viewport.scale,offset:{...this._viewport.offset}}}fitToContent(e){this._ensureLive();let t=0,n=0,o=0,r=0,s=false;for(let c of this._mol.atoms){if(!s){t=o=c.p.x,n=r=c.p.y,s=true;continue}c.p.x<t&&(t=c.p.x),c.p.x>o&&(o=c.p.x),c.p.y<n&&(n=c.p.y),c.p.y>r&&(r=c.p.y);}let a=s?{x:t,y:n,width:o-t,height:r-n}:{x:0,y:0,width:0,height:0},l={...this._viewport.offset},d=this._viewport.scale,u={scale:1,offset:{x:0,y:0}};this._viewport=u,d!==1&&this._events.fire(\"view:zoom\",{scale:1,center:{x:0,y:0},previousScale:d}),(l.x!==0||l.y!==0)&&this._events.fire(\"view:pan\",{offset:u.offset,previousOffset:l}),this._events.fire(\"view:viewport-change\",{viewport:u}),this._events.fire(\"view:fit-to-content\",{bbox:a});}setViewOnly(e){this._ensureLive();let t=this._viewOnly;t!==e&&(this._viewOnly=e,this._events.fire(\"option:change\",{key:\"viewOnly\",oldValue:t,newValue:e}));}setTheme(e){this._ensureLive();let t=this._theme;t!==e&&(this._theme=e,this._events.fire(\"theme:change\",{theme:e,previousTheme:t}));}toSvg(e){this._ensureLive();let t=this.getHelm(),n={};return e?.width!==void 0&&(n.width=e.width),e?.height!==void 0&&(n.height=e.height),this._service.renderToSvg(t,n)}async toPng(e){this._ensureLive();let t=this.getHelm(),n={};return e?.width!==void 0&&(n.width=e.width),e?.height!==void 0&&(n.height=e.height),this._service.renderToPng(t,n)}_getHost(){return this._host}_observerCount(){return this._events.observerCount()}_currentHighlights(){return this._highlights}_currentTheme(){return this._theme}_getView(){return this._view}_getViewport(){return this._viewport}openAtomProps(e){this._ensureLive(),this._host!==null&&(this._atomDialog===null&&(this._atomDialog=new Ge(this)),this._atomDialog.open(e));}openBondProps(e){this._ensureLive(),this._host!==null&&(this._bondDialog===null&&(this._bondDialog=new Ve(this)),this._bondDialog.open(e));}openFindReplace(){this._ensureLive(),this._host!==null&&(this._findReplaceDialog===null&&(this._findReplaceDialog=new Ue(this)),this._findReplaceDialog.open());}getMode(){return this._mode}setMode(e){this._ensureLive();let t=this._mode;t!==e&&(this._mode=e,this._events.fire(\"option:change\",{key:\"mode\",oldValue:t,newValue:e}));}getNextAddSymbol(){return this._nextAdd}setNextAddSymbol(e,t){this._ensureLive();let n=this._nextAdd;if(e===null)this._nextAdd=null;else {if(t===void 0)return;this._nextAdd={symbol:e,biotype:t};}this._events.fire(\"option:change\",{key:\"nextAdd\",oldValue:n,newValue:this._nextAdd});}startPaletteDrag(e,t){if(this._ensureLive(),this._dnd===null){this._events.fire(\"dnd:start\",{source:\"palette\",symbol:e});return}this._dnd.startPaletteDrag(e,t);}findMonomers(e){this._ensureLive();let t=[];for(let n of this._mol.atoms)n.symbol===e&&t.push(n);return t}replaceMonomers(e,t){this._ensureLive();let n,o;if(typeof e==\"string\"){let d=e,u=t;if(n=this.findMonomers(d),n.length===0)return 0;if(d===u)return n.length;o=`${d}->${u}`;}else {let d=t,u=new Set,c=[];for(let m of e){if(u.has(m.id))continue;u.add(m.id);let p=Y(this._mol,m.id);p!==void 0&&p.symbol!==d&&c.push(p);}if(c.length===0)return 0;n=c,o=`atoms[${c.length}]->${d}`;}let r=t,s=new $(this._mol);for(let d of n)s.updateAtom(d.id,{symbol:r});let{mol:a}=s.commit(),l=ve(a,this._service.monomerLib,{mode:\"lenient\"}).mol;return this._replaceMol(l,`replaceMonomers:${o}`,\"api\"),n.length}nudgeSelection(e,t){this._ensureLive();let n=this._selection;if(n.atoms.size===0)return;let o=new $(this._mol);for(let s of n.atoms){let a=Y(this._mol,s);a!==void 0&&o.updateAtom(s,{p:{x:a.p.x+e,y:a.p.y+t}});}let{mol:r}=o.commit();this._replaceMol(r,\"nudge\",\"user\");}deleteSelection(){this._ensureLive();let e=this._selection;if(e.atoms.size===0&&e.bonds.size===0)return;let t=new $(this._mol);for(let o of e.atoms)t.removeAtom(o);for(let o of e.bonds)t.removeBond(o);let{mol:n}=t.commit();this._selection=N.empty(),this._replaceMol(n,\"delete-selection\",\"user\"),this._events.fire(\"selection:change\",{selection:this._selection,addedAtomIds:be,removedAtomIds:e.atoms,addedBondIds:be,removedBondIds:e.bonds});}appendRnaTriplet(e,t,n){this._ensureLive();let o=ze(e,t,n),r=this.getHelm(),s=oa(r,o);this.setHelm(s);}placeRnaTriplet(e,t,n){this._ensureLive();let o=1.6*(this._options.bondLength??28),r,s=this._mol.atoms;if(this._lastAction===\"add-triplet\"&&this._lastTripletSugarPos!==null)r={x:this._lastTripletSugarPos.x+o*2,y:this._lastTripletSugarPos.y};else if(s.length===0)r={x:0,y:0};else {let M=s[0].p.x,A=s[0].p.y;for(let w of s)w.p.x<M&&(M=w.p.x),w.p.y>A&&(A=w.p.y);r={x:M,y:A+o};}let a={x:r.x+o,y:r.y},l={x:r.x,y:r.y+o},d=new Set;for(let M of this._mol.chains)d.add(M.id);let u=1;for(;d.has(`RNA${u}`);)u+=1;let c=`RNA${u}`,m=new $(this._mol),p=m.addAtom({p:r,biotype:b.SUGAR,symbol:e,chainId:c,positionInChain:1}),h=m.addAtom({p:a,biotype:b.LINKER,symbol:n,chainId:c,positionInChain:2}),f=m.addAtom({p:l,biotype:b.BASE,symbol:t,chainId:c,positionInChain:0});m.addBond({a1:p,a2:f,kind:\"branch\",r1:{kind:\"numeric\",r:3},r2:{kind:\"numeric\",r:1}}),m.addBond({a1:p,a2:h,kind:\"backbone\",r1:{kind:\"numeric\",r:2},r2:{kind:\"numeric\",r:1}});let{mol:_}=m.commit(),k=this._postProcessTripletMol(_,p,f,c),g=ve(k,this._service.monomerLib,{mode:\"lenient\"}).mol;this._replaceMol(g,\"placeRnaTriplet\",\"user\"),this._lastAction=\"add-triplet\",this._lastTripletSugarPos=r;}_postProcessTripletMol(e,t,n,o){let r=new Map,s=Y(e,n),a=Y(e,t);if(s===void 0||a===void 0)return e;let l={...a,branchAtom:s};r.set(t,l);let d=e.bonds.map(h=>{let f=r.get(h.a1.id)??h.a1,_=r.get(h.a2.id)??h.a2;return f===h.a1&&_===h.a2?h:{...h,a1:f,a2:_}}),u=new Map;for(let h of d)u.set(h.id,h);let c=e.chains.map(h=>{let f=[];for(let k of h.backboneAtoms)h.id===o&&k.id===n||f.push(r.get(k.id)??k);let _=h.bonds.map(k=>u.get(k.id)??k);return {id:h.id,polymerType:h.polymerType,backboneAtoms:f,bonds:_,...h.annotation!==void 0?{annotation:h.annotation}:{}}}),p={atoms:e.atoms.map(h=>r.get(h.id)??h),bonds:d,chains:c,groups:e.groups,annotations:e.annotations};return p=this._refreshContinuousIdsLocal(p),p}_resetLastAction(){this._lastAction=\"other\",this._lastTripletSugarPos=null;}_ensureLive(){if(this._destroyed)throw new Error(\"HelmEditor: this instance has been destroyed.\")}_replaceMol(e,t,n){let o=this._service.serialize(this._mol),r=this._service.serialize(e);this._mol=e,this._history.push({mol:e,label:t}),this._resetLastAction(),this._events.fire(\"mol:changed\",{mol:e,changedAtomIds:new Set(e.atoms.map(s=>s.id)),changedBondIds:new Set(e.bonds.map(s=>s.id)),reason:t}),o!==r&&this._events.fire(\"helm:changed\",{helm:r,mol:e,source:n});}_restoreFromHistory(e,t){let n=this._service.serialize(this._mol),o=this._service.serialize(e);this._mol=e,this._resetLastAction(),this._events.fire(\"mol:changed\",{mol:e,changedAtomIds:new Set(e.atoms.map(r=>r.id)),changedBondIds:new Set(e.bonds.map(r=>r.id)),reason:t}),n!==o&&this._events.fire(\"helm:changed\",{helm:o,mol:e,source:t});}};function Pn(i){return i.startsWith(\"[\")&&i.endsWith(\"]\")||i.length===1&&/^[A-Za-z]$/.test(i)?i:`[${i}]`}function ze(i,e,t){return `${Pn(i)}(${Pn(e)})${Pn(t)}`}function oa(i,e){if(i===\"\")return `RNA1{${e}}$$$$V2.0`;let t=/(^|\\|)(RNA\\d+)\\{([^}]*)\\}/g,n=null,o;for(;(o=t.exec(i))!==null;)n={name:o[2],body:o[3],matchText:o[0]};if(n!==null){let h=n.body===\"\"?\"\":\".\",f=`${n.matchText.startsWith(\"|\")?\"|\":\"\"}${n.name}{${n.body}${h}${e}}`,_=i.lastIndexOf(n.matchText);return i.slice(0,_)+f+i.slice(_+n.matchText.length)}let r=new Set,s=/RNA(\\d+)\\{/g,a;for(;(a=s.exec(i))!==null;)r.add(Number(a[1]));let l=1;for(;r.has(l);)l+=1;let d=`RNA${l}{${e}}`,u=i.indexOf(\"$\");if(u<0)return `${i}|${d}$$$$V2.0`;let c=i.slice(0,u),m=i.slice(u);return `${c}${c===\"\"?\"\":\"|\"}${d}${m}`}var ia=5,ra=3,sa=14,aa=11,la=9,da=8,ca=48,ua=96;function ma(i){return i<=ra?sa:i<=6?aa:i<=9?la:da}function wi(i,e){let t=P(e.monomer,e.biotype,e.theme.colorTheme),n=vt(t.background),o=t.text,r=qn(o,n)<ia,s=e.monomer.symbol,a=ma(s.length),d=s.length>=10?\"line-height:1.1;letter-spacing:-0.02em;\":\"\",u=`font-size:${a}px;${d}white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:${ua-16}px;display:inline-block;`,c=y(i,\"span\",{class:\"hw-palette__star\"},[e.favorite?\"\\u2605\":\"\\u2606\"]),m=y(i,\"span\",{class:\"hw-palette__label\",style:u},[s]),p=[\"hw-palette__tile\"];e.primed&&p.push(\"hw-palette__tile--primed\"),e.favorite&&p.push(\"hw-palette__tile--favorite\"),r&&p.push(\"hw-palette__tile--low-contrast\");let h=e.monomer.name!==void 0?`${s} \\u2014 ${e.monomer.name}`:s,f=`background:${n};color:${o};width:100%;min-width:${ca}px;padding:4px 6px;height:40px;box-sizing:border-box;overflow:hidden;text-overflow:ellipsis;`;return {root:y(i,\"div\",{class:p.join(\" \"),draggable:\"true\",role:\"button\",\"aria-pressed\":e.primed?\"true\":\"false\",\"aria-label\":h,\"data-symbol\":s,\"data-biotype\":e.biotype,\"data-bg\":n,\"data-raw-bg\":t.background,\"data-testid\":`palette-tile-${s}`,title:h,style:f},[c,m]),star:c}}function ki(i,e){let t=e.showStar!==false,n=y(i,\"span\",{class:\"hw-triplet-chip__star\"},[e.favorite?\"\\u2605\":\"\\u2606\"]),o=y(i,\"span\",{class:\"hw-triplet-chip__label\"},[e.label]),r=[\"hw-triplet-chip\"];e.favorite&&r.push(\"hw-triplet-chip--favorite\");let s=t?[n,o]:[o];return {root:y(i,\"div\",{class:r.join(\" \"),role:\"button\",tabindex:\"0\",\"aria-label\":e.title,\"data-sugar\":e.sugar,\"data-base\":e.base,\"data-linker\":e.linker,\"data-triplet\":e.label,\"data-testid\":`palette-triplet-${e.label}`,title:e.title,style:`background:${e.background};color:${e.textColor};`},s),star:n}}var ae=\"http://www.w3.org/2000/svg\",xi={sugar:b.SUGAR,base:b.BASE,linker:b.LINKER},pa={sugar:[\"r\",\"R\"],base:[\"A\"],linker:[\"p\",\"P\"]},ha=200,fa=180,rt={x:70,y:60},Hn={x:140,y:60},$n={x:70,y:130},Ke=18,Ai=18,st=22,zt=class zt{constructor(e,t,n){this.onValueSet=new X;this.onPickModeChange=new X;this._slots=new Map;this._favStar=null;this._pickMode=null;this._destroyed=false;this._builderRdkitCache=new Map;this._editor=t,this._doc=n?.documentImpl??E(e),this._hooks=n?.paletteHooks??null,this._favHooks=n?.favoriteHooks??null,this.element=y(this._doc,\"div\",{class:\"hw-rna-builder\",\"data-testid\":\"rna-builder\"});let o=y(this._doc,\"div\",{class:\"hw-rna-builder__header\"});if(o.appendChild(y(this._doc,\"div\",{class:\"hw-rna-builder__title\"},[\"RNA builder\"])),this._favHooks!==null){let l=y(this._doc,\"span\",{class:\"hw-rna-builder__fav hw-rna-builder__fav--disabled\",role:\"button\",tabindex:\"0\",\"data-testid\":\"rna-builder-fav-star\",title:\"Favorite this triplet\",\"aria-pressed\":\"false\",\"aria-disabled\":\"true\"},[\"\\u2606\"]),d=u=>{u.stopPropagation();let c=this.getSelection();c.preview===\"\"||this._favHooks===null||this._favHooks.toggleFavoriteTriplet(c.sugar,c.base,c.linker);};l.addEventListener(\"click\",d),l.addEventListener(\"keydown\",u=>{let c=u;(c.key===\"Enter\"||c.key===\" \")&&d(u);}),this._favStar=l,o.appendChild(l);}this.element.appendChild(o),this._hintEl=y(this._doc,\"div\",{class:\"hw-rna-builder__hint\",\"data-testid\":\"rna-builder-hint\",hidden:true}),this.element.appendChild(this._hintEl);let r=this._buildSvg();this.element.appendChild(r),this._preview=y(this._doc,\"div\",{class:\"hw-rna-builder__preview\",\"data-testid\":\"rna-builder-preview\"}),this.element.appendChild(this._preview),this._addBtn=y(this._doc,\"button\",{class:\"hw-rna-builder__add\",type:\"button\",\"data-testid\":\"rna-builder-add-btn\"},[\"Add triplet\"]),this._addBtn.addEventListener(\"click\",()=>this._onAddClicked()),this.element.appendChild(this._addBtn),e.appendChild(this.element);let s=t.getService().monomerLib.onChanged.subscribe(()=>{this._destroyed||this.refresh();}),a=t.on(\"theme:change\",()=>{this._destroyed||this._repaintSlotColors();});this._libUnsub=()=>{try{s();}catch{}try{a();}catch{}},this._populateDefaults(),this._updatePreview(),this._repaintSlotColors();}refresh(){this._populateDefaults(),this._updatePreview(),this._repaintSlotColors();}getSelection(){let e=this._slots.get(\"sugar\")?.value??\"\",t=this._slots.get(\"base\")?.value??\"\",n=this._slots.get(\"linker\")?.value??\"\",o=e!==\"\"&&t!==\"\"&&n!==\"\"?ze(e,t,n):\"\";return {sugar:e,base:t,linker:n,preview:o}}setField(e,t){let n=this._slots.get(e);n!==void 0&&(n.value=t,this._setLabelText(n.labelEl,t),this._repaintSlot(n),this._updatePreview(),this.onValueSet.next({field:e,symbol:t}));}startPickMode(e){if(this._pickMode===e){this.cancelPickMode();return}this._pickMode!==null&&this._setSlotPressed(this._pickMode,false),this._pickMode=e,this._setSlotPressed(e,true),this._setHintActive(e),this.onPickModeChange.next({field:e}),this._hooks!==null&&this._hooks.beginBiotypeFilter(xi[e],t=>{this.setField(e,t),this._exitPickMode();},()=>{this._exitPickMode();});}cancelPickMode(){this._pickMode!==null&&(this._hooks!==null&&this._hooks.endBiotypeFilter(),this._exitPickMode());}getPickMode(){return this._pickMode}triggerAdd(){this._onAddClicked();}destroy(){this._destroyed||(this._destroyed=true,this._pickMode!==null&&this._hooks!==null&&this._hooks.endBiotypeFilter(),this._libUnsub(),this.onValueSet.complete(),this.onPickModeChange.complete(),this.element.parentNode!==null&&this.element.parentNode.removeChild(this.element));}_buildSvg(){let e=this._doc.createElementNS(ae,\"svg\");e.setAttribute(\"class\",\"hw-rna-builder__triplet\"),e.setAttribute(\"viewBox\",`0 0 ${ha} ${fa}`),e.setAttribute(\"data-testid\",\"rna-builder-triplet-svg\"),e.setAttribute(\"role\",\"group\"),e.setAttribute(\"aria-label\",\"Triplet preview\");let t=this._doc.createElementNS(ae,\"line\");t.setAttribute(\"class\",\"hw-rna-builder__bond\"),t.setAttribute(\"x1\",String(rt.x+Ke)),t.setAttribute(\"y1\",String(rt.y)),t.setAttribute(\"x2\",String(Hn.x-Ai)),t.setAttribute(\"y2\",String(Hn.y)),e.appendChild(t);let n=this._doc.createElementNS(ae,\"line\");n.setAttribute(\"class\",\"hw-rna-builder__bond\"),n.setAttribute(\"x1\",String(rt.x)),n.setAttribute(\"y1\",String(rt.y+Ke)),n.setAttribute(\"x2\",String($n.x)),n.setAttribute(\"y2\",String($n.y-st)),e.appendChild(n);let o=this._doc.createElementNS(ae,\"rect\");o.setAttribute(\"class\",\"hw-rna-builder__slot-shape\"),o.setAttribute(\"x\",String(-Ke)),o.setAttribute(\"y\",String(-Ke)),o.setAttribute(\"width\",String(Ke*2)),o.setAttribute(\"height\",String(Ke*2)),o.setAttribute(\"rx\",\"8\"),o.setAttribute(\"ry\",\"8\");let r=this._buildSlot(\"sugar\",\"Pick sugar (backbone)\",rt,o),s=this._doc.createElementNS(ae,\"circle\");s.setAttribute(\"class\",\"hw-rna-builder__slot-shape\"),s.setAttribute(\"cx\",\"0\"),s.setAttribute(\"cy\",\"0\"),s.setAttribute(\"r\",String(Ai));let a=this._buildSlot(\"linker\",\"Pick linker\",Hn,s),l=this._doc.createElementNS(ae,\"path\");l.setAttribute(\"class\",\"hw-rna-builder__slot-shape\"),l.setAttribute(\"d\",`M ${-st} 0 L 0 ${-st} L ${st} 0 L 0 ${st} Z`);let d=this._buildSlot(\"base\",\"Pick base\",$n,l);return e.appendChild(a.groupEl),e.appendChild(r.groupEl),e.appendChild(d.groupEl),this._slots.set(\"sugar\",r),this._slots.set(\"linker\",a),this._slots.set(\"base\",d),e}_buildSlot(e,t,n,o){let r=this._doc.createElementNS(ae,\"g\");r.setAttribute(\"class\",\"hw-rna-builder__slot\"),r.setAttribute(\"data-slot\",e),r.setAttribute(\"data-testid\",`rna-builder-slot-${e}`),r.setAttribute(\"role\",\"button\"),r.setAttribute(\"tabindex\",\"0\"),r.setAttribute(\"aria-label\",t),r.setAttribute(\"aria-pressed\",\"false\"),r.setAttribute(\"transform\",`translate(${n.x} ${n.y})`),r.appendChild(o);let s=this._doc.createElementNS(ae,\"text\");s.setAttribute(\"class\",\"hw-rna-builder__slot-label\"),s.setAttribute(\"data-testid\",`rna-builder-${e}-value`),s.setAttribute(\"x\",\"0\"),s.setAttribute(\"y\",\"0\"),s.setAttribute(\"text-anchor\",\"middle\"),s.setAttribute(\"dominant-baseline\",\"central\"),r.appendChild(s);let a=l=>{l.stopPropagation(),this.startPickMode(e);};return r.addEventListener(\"click\",a),r.addEventListener(\"keydown\",l=>{let d=l;(d.key===\"Enter\"||d.key===\" \")&&a(l);}),r.addEventListener(\"mouseenter\",l=>this._showSlotTooltip(e,l)),r.addEventListener(\"mouseleave\",()=>this._hideSlotTooltip()),r.addEventListener(\"focus\",()=>this._showSlotTooltip(e,null)),r.addEventListener(\"blur\",()=>this._hideSlotTooltip()),{id:e,biotype:xi[e],groupEl:r,shapeEl:o,labelEl:s,value:\"\"}}_setLabelText(e,t){let n=[];for(let a=e.firstChild;a!==null;a=a.nextSibling)a.nodeName===\"title\"||a.nodeName===\"TITLE\"||n.push(a);for(let a of n)e.removeChild(a);let o=ba(t);e.setAttribute(\"font-size\",String(o)),e.setAttribute(\"text-anchor\",\"middle\"),e.setAttribute(\"dominant-baseline\",\"central\");let r=t.length>10?`${t.slice(0,9)}\\u2026`:t;e.appendChild(this._doc.createTextNode(r));let s=e.parentNode;if(s!==null){let a=null;for(let l=s.firstChild;l!==null;l=l.nextSibling)if(l.nodeName===\"title\"||l.nodeName===\"TITLE\"){a=l;break}for(a===null&&(a=this._doc.createElementNS(ae,\"title\"),s.insertBefore(a,s.firstChild));a.firstChild!==null;)a.removeChild(a.firstChild);a.appendChild(this._doc.createTextNode(t));}}_repaintSlotColors(){for(let e of this._slots.values())this._repaintSlot(e);}_repaintSlot(e){let t=this._editor.getService().monomerLib,n=this._theme(),o=e.value===\"\"?null:_a(t,e.biotype,e.value),r=P(o,e.biotype,n.colorTheme);e.shapeEl.style.fill=r.background,e.shapeEl.style.stroke=r.line,e.labelEl.style.fill=r.text;}_populateDefaults(){let e=this._editor.getService().monomerLib;for(let[t,n]of this._slots.entries()){let o=ya(e,n.biotype),r=ga(o,pa[t]),s=n.value!==\"\"&&o.some(a=>a.symbol===n.value)?n.value:r??o[0]?.symbol??\"\";n.value=s,this._setLabelText(n.labelEl,s);}}_updatePreview(){let e=this.getSelection();for(;this._preview.firstChild!==null;)this._preview.removeChild(this._preview.firstChild);this._preview.appendChild(this._doc.createTextNode(e.preview===\"\"?\"-\":e.preview)),this._updateFavStar(e);}_updateFavStar(e){if(this._favStar===null||this._favHooks===null)return;let t=e.preview!==\"\",n=t&&this._favHooks.isFavoriteTriplet(e.sugar,e.base,e.linker);for(;this._favStar.firstChild!==null;)this._favStar.removeChild(this._favStar.firstChild);this._favStar.appendChild(this._doc.createTextNode(n?\"\\u2605\":\"\\u2606\")),this._favStar.setAttribute(\"aria-pressed\",n?\"true\":\"false\"),t?this._favStar.removeAttribute(\"aria-disabled\"):this._favStar.setAttribute(\"aria-disabled\",\"true\");let o=\"hw-rna-builder__fav\"+(n?\" hw-rna-builder__fav--active\":\"\")+(t?\"\":\" hw-rna-builder__fav--disabled\");this._favStar.setAttribute(\"class\",o);}_onAddClicked(){let e=this.getSelection();e.preview!==\"\"&&this._editor.placeRnaTriplet(e.sugar,e.base,e.linker);}_exitPickMode(){if(this._pickMode===null)return;let e=this._pickMode;this._setSlotPressed(e,false),this._pickMode=null,this._setHintActive(null),this.onPickModeChange.next({field:null});}_setHintActive(e){let t=this._hintEl;for(;t.firstChild!==null;)t.removeChild(t.firstChild);if(e===null){t.setAttribute(\"hidden\",\"\");return}t.removeAttribute(\"hidden\");let n=e===\"sugar\"?\"sugar\":e===\"base\"?\"base\":\"linker\";t.appendChild(this._doc.createTextNode(`Pick ${n} from palette`));}_setSlotPressed(e,t){let n=this._slots.get(e);if(n===void 0)return;n.groupEl.setAttribute(\"aria-pressed\",t?\"true\":\"false\");let r=(n.groupEl.getAttribute(\"class\")??\"\").split(/\\s+/).filter(s=>s!==\"hw-rna-builder__slot--active\").join(\" \");n.groupEl.setAttribute(\"class\",t?`${r} hw-rna-builder__slot--active`:r);}_theme(){let e=this._editor;return typeof e._currentTheme==\"function\"?e._currentTheme():this._editor.getService().theme}_rdkit(){let t=this._editor.getService().options?.rdkitModule;return t??null}_builderRdkitSvgFor(e){if(e===null)return null;let t=e.smiles;if(t===void 0||t===\"\")return null;let n=this._rdkit();if(n===null)return null;let o=`${e.polymerType}:${e.symbol}`;if(this._builderRdkitCache.has(o))return this._builderRdkitCache.get(o)??null;let r=fe(n,t,220,140);if(this._builderRdkitCache.size>=zt._BUILDER_RDKIT_CACHE_LIMIT){let s=this._builderRdkitCache.keys().next().value;s!==void 0&&this._builderRdkitCache.delete(s);}return this._builderRdkitCache.set(o,r),r}_slotHint(e){switch(e){case \"sugar\":return \"Click to choose a different sugar\";case \"base\":return \"Click to choose a different base\";case \"linker\":return \"Click to choose a different linker\"}}_slotTitle(e,t){let n=t===\"\"?\"?\":t;switch(e){case \"sugar\":return `Sugar: ${n}`;case \"base\":return `Base: ${n}`;case \"linker\":return `Linker: ${n}`}}_showSlotTooltip(e,t){let n=this._slots.get(e);if(n===void 0)return;let r=this._editor.getService().monomerLib.getMonomerSet(n.biotype),s=n.value===\"\"?null:r.get(n.value)??null,a=te(this._doc,\"builder-tooltip\",\"hw-builder-tooltip\");xe(this._doc,a,{symbol:this._slotTitle(e,n.value),name:s?.name??\"\",rdkitSvg:this._builderRdkitSvgFor(s),rdkitTestid:\"builder-tooltip-rdkit-svg\",hint:this._slotHint(e)});let l=t;if(l!==null&&typeof l.clientX==\"number\"&&typeof l.clientY==\"number\")j(a,l.clientX,l.clientY);else {let d=n.groupEl,u=typeof d.getBoundingClientRect==\"function\"?d.getBoundingClientRect():null;u!==null?j(a,u.left+u.width/2,u.top+u.height/2):j(a,0,0);}}_hideSlotTooltip(){let e=this._doc.body.querySelector('[data-testid=\"builder-tooltip\"]');F(e);}};zt._BUILDER_RDKIT_CACHE_LIMIT=256;var Ut=zt;function ba(i){let e=i.length;return e<=2?16:e<=4?11:e<=7?8:e<=10?6:5}function ya(i,e){let t=i.getMonomerSet(e),n=[];for(let o of t.values())n.push(o);return n.sort((o,r)=>o.symbol.localeCompare(r.symbol)),n}function ga(i,e){let t=new Set;for(let n of i)t.add(n.symbol);for(let n of e)if(t.has(n))return n;return null}function _a(i,e,t){return i.getMonomerSet(e).get(t)??null}var le=\"Favorites\",Dn={[le]:\"\\u2605 Favorites\",[v.PEPTIDE]:\"Peptides\",[v.RNA]:\"RNA\",[v.CHEM]:\"CHEM\",[v.BLOB]:\"BLOB\",G:\"G\"},Kt=[le,v.PEPTIDE,v.RNA,v.CHEM,v.BLOB,\"G\"],Mi=\"hwe:palette:favorites\",Ti=\"hwe:palette:active-tab\",va=\"hwe.palette.favorites\";function Wt(i){return `${i.sugar}|${i.base}|${i.linker}`}var We=class We{constructor(e,t,n){this.favoritesChanged=new X;this._nextAddUnsub=()=>{};this._favorites=new Set;this._favoriteTriplets=[];this._pendingRnaSelection=null;this._visibleTabs=[le];this._activeTab=le;this._searchInput=null;this._filter=\"\";this._destroyed=false;this._rnaBuilder=null;this._activeBiotypeFilter=null;this._pickResolver=null;this._pickCanceller=null;this._pickEscapeListener=null;this._pickOutsideClickListener=null;this._paletteRdkitCache=new Map;this._editor=t,this._doc=n?.documentImpl??E(e),this._opts={documentImpl:this._doc,groupByNaturalAnalog:n?.groupByNaturalAnalog??true,allowFavorites:n?.allowFavorites??true},this._loadFavorites(),this._activeTab=this._resolveInitialTab(n?.initialTab),this.element=y(this._doc,\"div\",{class:\"hw-palette\",\"data-testid\":\"palette\"}),e.appendChild(this.element),this._render(),this._libUnsub=t.getService().monomerLib.onChanged.subscribe(()=>{this._destroyed||this.refresh();}),this._themeUnsub=t.on(\"theme:change\",()=>{this._destroyed||this.refresh();}),this._nextAddUnsub=t.on(\"option:change\",o=>{this._destroyed||o.key===\"nextAdd\"&&this._updatePrimedClasses();});}refresh(){this._render();}setFilter(e){this._filter=e.trim().toLowerCase(),this._searchInput!==null&&this._searchInput.value!==e&&(this._searchInput.value=e),this._applyFilter();}setActiveTab(e){this._visibleTabs.includes(e)&&(this._activeTab=e,this._persistActiveTab(),this._applyActiveTabClasses(),this._applyFilter());}getActiveTab(){return this._activeTab}getFavorites(){let e=this._editor.getService().monomerLib,t=[];for(let n of this._favorites)this._findMonomer(e,n)!==null&&t.push(n);return t}setFavorite(e,t){let n=this._favorites.has(e);t!==n&&(t?this._favorites.add(e):this._favorites.delete(e),this._saveFavorites(),this._hidePaletteTooltips(),this._render(),this._emitFavoritesChanged());}clearFavorites(){this._favorites.size===0&&this._favoriteTriplets.length===0||(this._favorites.clear(),this._favoriteTriplets.length=0,this._saveFavorites(),this._render(),this._emitFavoritesChanged());}getFavoriteTriplets(){return this._favoriteTriplets.map(e=>({...e}))}isFavoriteTriplet(e,t,n){let o=Wt({sugar:e,base:t,linker:n});return this._favoriteTriplets.some(r=>Wt(r)===o)}setFavoriteTriplet(e,t,n,o){let r=Wt({sugar:e,base:t,linker:n}),s=this._favoriteTriplets.findIndex(l=>Wt(l)===r),a=s>=0;o!==a&&(o?this._favoriteTriplets.push({sugar:e,base:t,linker:n}):this._favoriteTriplets.splice(s,1),this._saveFavorites(),this._hidePaletteTooltips(),this._render(),this._emitFavoritesChanged());}_hidePaletteTooltips(){let e=this._doc.body;F(e.querySelector('[data-testid=\"palette-tooltip\"]')),F(e.querySelector('[data-testid=\"palette-triplet-tooltip\"]'));}_emitFavoritesChanged(){this.favoritesChanged.next({favorites:this.getFavorites(),triplets:this.getFavoriteTriplets()});}destroy(){this._destroyed||(this._destroyed=true,this._rnaBuilder!==null&&(this._rnaBuilder.destroy(),this._rnaBuilder=null),this._libUnsub(),this._themeUnsub(),this._nextAddUnsub(),this.element.parentNode!==null&&this.element.parentNode.removeChild(this.element));}getRnaBuilder(){return this._rnaBuilder}hasActiveBiotypeFilter(){return this._activeBiotypeFilter!==null}getActiveBiotypeFilter(){return this._activeBiotypeFilter}cancelBiotypeFilter(){if(this._activeBiotypeFilter===null)return;let e=this._pickCanceller;this._teardownPickMode(),e?.();}_buildPaletteFilterHooks(){return {beginBiotypeFilter:(e,t,n)=>{this._activeBiotypeFilter!==null&&this._teardownPickMode(),this._activeBiotypeFilter=e,this._pickResolver=t,this._pickCanceller=n,this._applyFilter();let o=l=>{l.key===\"Escape\"&&this.cancelBiotypeFilter();};this._pickEscapeListener=o,this._doc.defaultView?.addEventListener(\"keydown\",o);let s=l=>{if(this._activeBiotypeFilter===null)return;let d=l.target;if(d==null)return;let u=this._activeBiotypeFilter,c=d;for(;c!==null;){let m=c.getAttribute===void 0?null:c.getAttribute(\"class\");if(m!==null){let p=m.split(/\\s+/);if(p.includes(\"hw-palette__tile\")){if((c.getAttribute(\"data-biotype\")??\"\")===u)return;break}if(p.includes(\"hw-rna-builder__slot\")){if(this._isInsideOwnPalette(c))return;break}}c=c.parentElement;}this.cancelBiotypeFilter();};this._pickOutsideClickListener=s,this._doc.addEventListener(\"mousedown\",s,true);},endBiotypeFilter:()=>this._teardownPickMode()}}_scrollActivePaneToTop(){let e=this.element.querySelector(`.hw-palette__pane[data-tab=\"${this._activeTab}\"]`);if(e===null)return;let t=e;try{if(typeof t.scrollTo==\"function\"){t.scrollTo({top:0,behavior:\"smooth\"});return}}catch{}typeof t.scrollTop==\"number\"&&(t.scrollTop=0);}_isInsideOwnPalette(e){let t=e;for(;t!==null;){if(t===this.element)return true;t=t.parentElement;}return false}_teardownPickMode(){this._activeBiotypeFilter!==null&&(this._activeBiotypeFilter=null,this._pickResolver=null,this._pickCanceller=null,this._pickEscapeListener!==null&&(this._doc.defaultView?.removeEventListener(\"keydown\",this._pickEscapeListener),this._pickEscapeListener=null),this._pickOutsideClickListener!==null&&(this._doc.removeEventListener(\"mousedown\",this._pickOutsideClickListener,true),this._pickOutsideClickListener=null),this._applyFilter());}_render(){for(this._rnaBuilder!==null&&(this._pendingRnaSelection=this._rnaBuilder.getSelection(),this._rnaBuilder.destroy(),this._rnaBuilder=null);this.element.firstChild!==null;)this.element.removeChild(this.element.firstChild);let e=this._doc.createElement(\"input\");e.setAttribute(\"type\",\"search\"),e.setAttribute(\"class\",\"hw-palette__search\"),e.setAttribute(\"placeholder\",\"Search monomers...\"),e.setAttribute(\"data-testid\",\"palette-search\"),this._filter!==\"\"&&(e.value=this._filter),e.addEventListener(\"input\",()=>this.setFilter(e.value)),this._searchInput=e,this.element.appendChild(e),this._visibleTabs=this._computeVisibleTabs(),this._visibleTabs.includes(this._activeTab)||(this._activeTab=le);let t=y(this._doc,\"div\",{class:\"hw-palette__tabs\",role:\"tablist\",\"data-testid\":\"palette-tabs\"});for(let s of this._visibleTabs){let a=s===this._activeTab,l=y(this._doc,\"button\",{class:\"hw-palette__tab\",type:\"button\",role:\"tab\",\"aria-controls\":`hw-palette-pane-${s}`,\"aria-selected\":a?\"true\":\"false\",\"data-testid\":`palette-tab-${s}`,\"data-tab\":s,title:Dn[s]},[Dn[s]]);l.addEventListener(\"click\",()=>this.setActiveTab(s)),t.appendChild(l);}this.element.appendChild(t);let n=y(this._doc,\"div\",{class:\"hw-palette__panes\"}),o=this._theme(),r=this._editor.getService().monomerLib;for(let s of this._visibleTabs){let a=s===this._activeTab,l=y(this._doc,\"div\",{class:\"hw-palette__pane\",id:`hw-palette-pane-${s}`,role:\"tabpanel\",\"data-testid\":`palette-pane-${s}`,\"data-tab\":s,hidden:!a});s===le?this._buildFavoritesPane(l,r,o):this._buildPolymerPane(l,s,r,o),n.appendChild(l);}this.element.appendChild(n),this._applyFilter();}_computeVisibleTabs(){let e=this._editor.getService().monomerLib,t=new Set;for(let o of e.getPolymerTypes())t.add(o);let n=[];n.push(le);for(let o of Kt)o!==le&&t.has(o)&&n.push(o);return n}_buildFavoritesPane(e,t,n){let o=this._resolveFavoriteMonomers(t),r=this._favoriteTriplets;if(o.length===0&&r.length===0){let s=y(this._doc,\"div\",{class:\"hw-palette__placeholder\",\"data-testid\":\"palette-favorites-empty\"},[\"No favorites yet \\u2014 click the \\u2606 on any tile to add one.\"]);e.appendChild(s);return}for(let[s,a]of this._groupByPolymerAndType(o))e.appendChild(this._renderGroup(s,a));r.length>0&&e.appendChild(this._renderTripletGroup(\"RNA \\xB7 Triplets\",r,t));}_groupByPolymerAndType(e){let t=new Map;for(let s of e){let a=s.polymerType,l=s.monomerType??\"Undefined\",d=`${a}|${l}`,u=t.get(d);u===void 0&&(u={pt:a,mt:l,list:[]},t.set(d,u)),u.list.push(s);}let n=s=>{let a=Kt.indexOf(s);return a<0?99:a},o={Backbone:0,Branch:1,Terminal:2,Undefined:3};return Array.from(t.values()).sort((s,a)=>n(s.pt)-n(a.pt)||(o[s.mt]??9)-(o[a.mt]??9)||s.mt.localeCompare(a.mt)).map(s=>[`${this._polymerLabel(s.pt)} \\xB7 ${s.mt}`,s.list])}_polymerLabel(e){return Dn[e]??e}_renderTripletGroup(e,t,n){let o=y(this._doc,\"div\",{class:\"hw-palette__group\",\"data-natural-analog\":e}),r=y(this._doc,\"div\",{class:\"hw-palette__group-header\",\"data-testid\":`palette-group-${e}`},[e]),s=y(this._doc,\"div\",{class:\"hw-triplet-chips\",\"data-testid\":\"palette-triplet-favorites\"});for(let a of t)s.appendChild(this._renderTripletChip(a,n));return o.appendChild(r),o.appendChild(s),o}_renderTripletChip(e,t){let n=ze(e.sugar,e.base,e.linker),o=t.getMonomerSet(b.BASE).get(e.base)??null,r=P(o,b.BASE,this._theme().colorTheme),s=this.isFavoriteTriplet(e.sugar,e.base,e.linker),a=o?.name!==void 0&&o.name!==\"\"?`${n} \\u2014 ${o.name}`:n,{root:l}=ki(this._doc,{sugar:e.sugar,base:e.base,linker:e.linker,label:n,title:a,background:vt(r.background),textColor:r.text,favorite:s,showStar:this._opts.allowFavorites});return this._wireTripletChip(l,e),l}_wireTripletChip(e,t){e.addEventListener(\"mouseenter\",n=>{let o=n,r=te(this._doc,\"palette-triplet-tooltip\",\"hw-palette-tooltip hw-triplet-tooltip\");ai(this._doc,r,{title:ze(t.sugar,t.base,t.linker),parts:this._tripletTooltipParts(t),hint:\"Click to add this triplet\",rdkitTestid:\"palette-triplet-tooltip-rdkit-svg\"}),j(r,typeof o.clientX==\"number\"?o.clientX:0,typeof o.clientY==\"number\"?o.clientY:0);}),e.addEventListener(\"mouseleave\",()=>{F(this._doc.body.querySelector('[data-testid=\"palette-triplet-tooltip\"]'));}),e.addEventListener(\"click\",n=>{let o=n.target;if(this._opts.allowFavorites&&o?.classList?.contains(\"hw-triplet-chip__star\")===true){this.setFavoriteTriplet(t.sugar,t.base,t.linker,!this.isFavoriteTriplet(t.sugar,t.base,t.linker)),n.stopPropagation();return}this._editor.placeRnaTriplet(t.sugar,t.base,t.linker);}),e.addEventListener(\"keydown\",n=>{let o=n;(o.key===\"Enter\"||o.key===\" \")&&this._editor.placeRnaTriplet(t.sugar,t.base,t.linker);});}_buildRnaDefaultChips(e){let t=this._pickSymbol(e.getMonomerSet(b.SUGAR),[\"r\",\"R\"]),n=this._pickSymbol(e.getMonomerSet(b.LINKER),[\"p\",\"P\"]),o=e.getMonomerSet(b.BASE);if(t===null||n===null)return null;let r=We._DEFAULT_TRIPLET_BASES.filter(a=>o.has(a));if(r.length===0)return null;let s=y(this._doc,\"div\",{class:\"hw-triplet-chips hw-triplet-chips--defaults\",\"data-testid\":\"rna-default-triplets\"});for(let a of r)s.appendChild(this._renderTripletChip({sugar:t,base:a,linker:n},e));return s}_tripletTooltipParts(e){let t=this._editor.getService().monomerLib,n=(o,r,s)=>{let a=t.getMonomerSet(r).get(s)??null;return {role:o,symbol:s,...a?.name!==void 0?{name:a.name}:{},rdkitSvg:a===null?null:this._paletteRdkitSvg(a)}};return [n(\"Sugar\",b.SUGAR,e.sugar),n(\"Base\",b.BASE,e.base),n(\"Linker\",b.LINKER,e.linker)]}_pickSymbol(e,t){for(let o of t)if(e.has(o))return o;let n=e.keys().next();return n.done===true?null:n.value}_restoreRnaSelection(){let e=this._pendingRnaSelection;if(this._pendingRnaSelection=null,e===null||this._rnaBuilder===null)return;let t=this._editor.getService().monomerLib;e.sugar!==\"\"&&t.getMonomerSet(b.SUGAR).has(e.sugar)&&this._rnaBuilder.setField(\"sugar\",e.sugar),e.base!==\"\"&&t.getMonomerSet(b.BASE).has(e.base)&&this._rnaBuilder.setField(\"base\",e.base),e.linker!==\"\"&&t.getMonomerSet(b.LINKER).has(e.linker)&&this._rnaBuilder.setField(\"linker\",e.linker);}_resolveFavoriteMonomers(e){let t=[];for(let n of this._favorites){let o=this._findMonomer(e,n);o!==null&&t.push(o);}return t}_findMonomer(e,t){for(let n of e.getPolymerTypes()){let o=e.getMonomer(n,t);if(o!==null)return o}return null}_buildPolymerPane(e,t,n,o){let r=t,s=this._monomersForPolymer(r,n);if(s.length===0)return;if(r===v.RNA){this._rnaBuilder=new Ut(e,this._editor,{documentImpl:this._doc,paletteHooks:this._buildPaletteFilterHooks(),favoriteHooks:this._opts.allowFavorites?{isFavoriteTriplet:(m,p,h)=>this.isFavoriteTriplet(m,p,h),toggleFavoriteTriplet:(m,p,h)=>this.setFavoriteTriplet(m,p,h,!this.isFavoriteTriplet(m,p,h))}:null}),this._restoreRnaSelection();let u=this._buildRnaDefaultChips(n);u!==null&&e.appendChild(u);let c=this._groupRna(s);for(let[m,p]of c)p.length!==0&&e.appendChild(this._renderGroup(m,p));return}if(r===v.PEPTIDE&&this._opts.groupByNaturalAnalog){let u=this._groupByAnalog(s);for(let[c,m]of u){let p=c===\"\"?\"Other\":c;e.appendChild(this._renderGroup(p,m));}return}let a=y(this._doc,\"div\",{class:\"hw-palette__group-tiles\"}),l=this._editor.getNextAddSymbol(),d=this._sortByColor(s);for(let u of d){let c=this._biotype(u,r);a.appendChild(this._renderTile(u,c,l));}e.appendChild(a);}_renderGroup(e,t){let n=y(this._doc,\"div\",{class:\"hw-palette__group\",\"data-natural-analog\":e}),o=y(this._doc,\"div\",{class:\"hw-palette__group-header\",\"data-testid\":`palette-group-${e}`},[e]),r=y(this._doc,\"div\",{class:\"hw-palette__group-tiles\"}),s=this._editor.getNextAddSymbol(),a=this._sortByColor(t);for(let l of a){let d=this._biotype(l,l.polymerType);r.appendChild(this._renderTile(l,d,s));}return n.appendChild(o),n.appendChild(r),n}_sortByColor(e){let t=this._theme(),n=e.map((o,r)=>{let s=this._biotype(o,o.polymerType),a=P(o,s,t.colorTheme),l=Yn(a.background),d=l.s===0?1:0;return {m:o,idx:r,h:l.h,s:l.s,l:l.l,isGrey:d}});return n.sort((o,r)=>o.isGrey!==r.isGrey?o.isGrey-r.isGrey:o.h!==r.h?o.h-r.h:o.s!==r.s?o.s-r.s:o.l!==r.l?o.l-r.l:o.idx-r.idx),n.map(o=>o.m)}_monomersForPolymer(e,t){let n=t.getMonomerSymbolsByType(e),o=[];for(let r of n){let s=t.getMonomer(e,r);s!==null&&o.push(s);}return o.sort((r,s)=>r.symbol.localeCompare(s.symbol)),o}_groupByAnalog(e){let t=new Map;for(let r of e){let s=r.naturalAnalog??\"\",a=t.get(s);a===void 0&&(a=[],t.set(s,a)),a.push(r);}let n=[],o=Array.from(t.keys()).sort((r,s)=>r===\"\"&&s!==\"\"?1:s===\"\"&&r!==\"\"?-1:r.localeCompare(s));for(let r of o)n.push([r,t.get(r)]);return new Map(n)}_groupRna(e){let t=[],n=[],o=[],r=[];for(let a of e){let l=Z(a);l===b.SUGAR?t.push(a):l===b.BASE?n.push(a):l===b.LINKER?o.push(a):r.push(a);}let s=new Map;return s.set(\"Backbones\",t),s.set(\"Bases\",n),s.set(\"Linkers\",o),r.length>0&&s.set(\"Other\",r),s}_renderTile(e,t,n){let o=this._favorites.has(e.symbol),r=n!==null&&n.symbol===e.symbol&&n.biotype===t,{root:s,star:a}=wi(this._doc,{monomer:e,biotype:t,theme:this._theme(),favorite:o,primed:r});return this._wireTile(s,a,e,t),s}_rdkit(){let t=this._editor.getService().options?.rdkitModule;return t??null}_paletteRdkitSvg(e){let t=e.smiles;if(t===void 0||t===\"\")return null;let n=this._rdkit();if(n===null)return null;let o=`${e.polymerType}:${e.symbol}`;if(this._paletteRdkitCache.has(o))return this._paletteRdkitCache.get(o)??null;let r=fe(n,t,220,140);if(this._paletteRdkitCache.size>=We._PALETTE_RDKIT_CACHE_LIMIT){let s=this._paletteRdkitCache.keys().next().value;s!==void 0&&this._paletteRdkitCache.delete(s);}return this._paletteRdkitCache.set(o,r),r}_wireTile(e,t,n,o){e.addEventListener(\"mouseenter\",r=>{let s=r,a=te(this._doc,\"palette-tooltip\",\"hw-palette-tooltip\");xe(this._doc,a,{symbol:n.symbol,name:n.name??\"\",rdkitSvg:this._paletteRdkitSvg(n),rdkitTestid:\"palette-tooltip-rdkit-svg\"});let l=typeof s.clientX==\"number\"?s.clientX:0,d=typeof s.clientY==\"number\"?s.clientY:0;j(a,l,d);}),e.addEventListener(\"mouseleave\",()=>{F(this._doc.body.querySelector('[data-testid=\"palette-tooltip\"]'));}),e.addEventListener(\"click\",r=>{let s=r.target;if(this._opts.allowFavorites&&s!==void 0&&s?.classList?.contains(\"hw-palette__star\")===true){this.setFavorite(n.symbol,!this._favorites.has(n.symbol)),r.stopPropagation();return}if(this._activeBiotypeFilter!==null&&this._activeBiotypeFilter===o){let d=this._pickResolver;this._teardownPickMode(),d?.(n.symbol),this._scrollActivePaneToTop(),r.stopPropagation();return}let a=this._editor.getSelection();if(a.atoms.size>0){let d=this._editor.getMol(),u=[];for(let m of a.atoms){let p=d.atoms.find(h=>h.id===m);p!==void 0&&u.push(p);}if(u.length>0&&u.every(m=>m.biotype===o)){this._editor.replaceMonomers(u,n.symbol),r.stopPropagation();return}this._editor.fire(\"editor:status\",{message:`Cannot bulk-replace ${u.length} selected atom(s) with ${n.symbol}: selection contains incompatible biotypes for ${o}.`,severity:\"warn\",durationMs:3e3}),r.stopPropagation();return}let l=this._editor.getNextAddSymbol();if(l!==null&&l.symbol===n.symbol&&l.biotype===o){this._editor.setNextAddSymbol(null),this._updatePrimedClasses();return}this._editor.setNextAddSymbol(n.symbol,o),this._updatePrimedClasses();}),e.addEventListener(\"dragstart\",r=>{let s=r.dataTransfer;if(s!=null)try{s.setData(\"application/x-hwe-monomer\",JSON.stringify({symbol:n.symbol,biotype:o})),s.effectAllowed=\"copy\";}catch{}F(this._doc.body.querySelector('[data-testid=\"palette-tooltip\"]')),this._editor.startPaletteDrag(n.symbol,o);});}_biotype(e,t){let n=Z(e);if(n!==null)return n;switch(t){case v.PEPTIDE:return b.AA;case v.RNA:return b.SUGAR;case v.CHEM:return b.CHEM;case v.BLOB:return b.BLOB;default:return b.CHEM}}_theme(){let e=this._editor;return typeof e._currentTheme==\"function\"?e._currentTheme():this._editor.getService().theme}_applyFilter(){let e=this._filter,t=this._activeBiotypeFilter,n=this.element.querySelector(`.hw-palette__pane[data-tab=\"${this._activeTab}\"]`),o=(n??this.element).querySelectorAll(\".hw-palette__tile\");for(let a=0;a<o.length;a++){let l=o[a],d=(l.getAttribute(\"data-symbol\")??\"\").toLowerCase(),u=(l.getAttribute(\"title\")??\"\").toLowerCase(),c=l.getAttribute(\"data-biotype\")??\"\",h=(e===\"\"||d.indexOf(e)>=0||u.indexOf(e)>=0)&&(t===null||c===t);l.style.display=h?\"\":\"none\";}let r=(n??this.element).querySelectorAll(\".hw-triplet-chip\");for(let a=0;a<r.length;a++){let l=r[a],d=[l.getAttribute(\"data-triplet\")??\"\",l.getAttribute(\"data-sugar\")??\"\",l.getAttribute(\"data-base\")??\"\",l.getAttribute(\"data-linker\")??\"\"].join(\" \").toLowerCase(),u=(e===\"\"||d.indexOf(e)>=0)&&t===null;l.style.display=u?\"\":\"none\";}let s=(n??this.element).querySelectorAll(\".hw-palette__group\");for(let a=0;a<s.length;a++){let l=s[a],d=l.querySelectorAll(\".hw-palette__tile, .hw-triplet-chip\"),u=false;for(let c=0;c<d.length;c++)if(d[c].style.display!==\"none\"){u=true;break}u?(l.removeAttribute(\"hidden\"),l.removeAttribute(\"data-section-empty\")):(l.setAttribute(\"hidden\",\"\"),l.setAttribute(\"data-section-empty\",\"true\"));}}_updatePrimedClasses(){let e=this._editor.getNextAddSymbol(),t=this.element.querySelectorAll(\".hw-palette__tile\");for(let n=0;n<t.length;n++){let o=t[n],r=o.getAttribute(\"data-symbol\")??\"\",s=o.getAttribute(\"data-biotype\")??\"\",a=e!==null&&e.symbol===r&&e.biotype===s,d=(o.getAttribute(\"class\")??\"\").split(/\\s+/).filter(u=>u!==\"hw-palette__tile--primed\").join(\" \");o.setAttribute(\"class\",a?`${d} hw-palette__tile--primed`:d),o.setAttribute(\"aria-pressed\",a?\"true\":\"false\");}}_applyActiveTabClasses(){let e=this.element.querySelectorAll(\".hw-palette__tab\");for(let n=0;n<e.length;n++){let o=e[n],r=o.getAttribute(\"data-tab\")??\"\";o.setAttribute(\"aria-selected\",r===this._activeTab?\"true\":\"false\");}let t=this.element.querySelectorAll(\".hw-palette__pane\");for(let n=0;n<t.length;n++){let o=t[n];(o.getAttribute(\"data-tab\")??\"\")===this._activeTab?o.removeAttribute(\"hidden\"):o.setAttribute(\"hidden\",\"\");}}_localStorage(){if(!this._opts.allowFavorites)return null;let e=this._doc.defaultView;if(e==null)return null;try{return e.localStorage??null}catch{return null}}_resolveInitialTab(e){if(e!==void 0&&Kt.includes(e))return e;let t=this._localStorage();if(t!==null)try{let n=t.getItem(Ti);if(n!==null&&Kt.includes(n))return n}catch{}return le}_persistActiveTab(){let e=this._localStorage();if(e!==null)try{e.setItem(Ti,this._activeTab);}catch{}}_loadFavorites(){let e=this._localStorage();if(e!==null){try{let t=e.getItem(Mi);if(t!==null&&t!==\"\"){let n=JSON.parse(t),o=this._extractSymbols(n);for(let r of o)this._favorites.add(r);for(let r of this._extractTriplets(n))this._favoriteTriplets.push(r);return}}catch{}try{let t=e.getItem(va);if(t===null||t===\"\")return;let n=JSON.parse(t);if(Array.isArray(n)){for(let o of n){if(typeof o!=\"string\")continue;let r=o.indexOf(\"|\"),s=r>=0?o.slice(r+1):o;s!==\"\"&&this._favorites.add(s);}this._saveFavorites();}}catch{}}}_extractSymbols(e){if(Array.isArray(e)){let t=[];for(let n of e)typeof n==\"string\"&&t.push(n);return t}if(e!==null&&typeof e==\"object\"){let t=e;if(Array.isArray(t.symbols)){let n=[];for(let o of t.symbols)typeof o==\"string\"&&n.push(o);return n}}return []}_extractTriplets(e){if(e===null||typeof e!=\"object\")return [];let t=e;if(!Array.isArray(t.triplets))return [];let n=[];for(let o of t.triplets){if(o===null||typeof o!=\"object\")continue;let r=o;typeof r.sugar==\"string\"&&typeof r.base==\"string\"&&typeof r.linker==\"string\"&&n.push({sugar:r.sugar,base:r.base,linker:r.linker});}return n}_saveFavorites(){let e=this._localStorage();if(e!==null)try{let t={symbols:Array.from(this._favorites)};this._favoriteTriplets.length>0&&(t.triplets=this._favoriteTriplets.map(n=>({...n}))),e.setItem(Mi,JSON.stringify(t));}catch{}}};We._DEFAULT_TRIPLET_BASES=[\"A\",\"C\",\"G\",\"U\",\"T\"],We._PALETTE_RDKIT_CACHE_LIMIT=256;var at=We;var G='<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">',wa={new:`${G}<path d=\"M13 3H7a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V9z\"/><path d=\"M13 3v6h6\"/><line x1=\"12\" y1=\"12.5\" x2=\"12\" y2=\"17.5\"/><line x1=\"9.5\" y1=\"15\" x2=\"14.5\" y2=\"15\"/></svg>`,open:`${G}<path d=\"m6 14 1.45-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.55 6a2 2 0 0 1-1.94 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H18a2 2 0 0 1 2 2v2\"/></svg>`,save:`${G}<rect x=\"8\" y=\"2\" width=\"8\" height=\"4\" rx=\"1\" ry=\"1\"/><path d=\"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2\"/><path d=\"m9 14 2 2 4-4\"/></svg>`,undo:`${G}<path d=\"M3 12a9 9 0 1 0 9-9 9.7 9.7 0 0 0-6.7 2.8L3 8\"/><path d=\"M3 3v5h5\"/></svg>`,redo:`${G}<path d=\"M21 12a9 9 0 1 1-9-9 9.7 9.7 0 0 1 6.7 2.8L21 8\"/><path d=\"M21 3v5h-5\"/></svg>`,eraser:`${G}<path d=\"m7 21-4.3-4.3c-1-1-1-2.5 0-3.4l9.6-9.6c1-1 2.5-1 3.4 0l5.6 5.6c1 1 1 2.5 0 3.4L13 21\"/><path d=\"M22 21H7\"/><path d=\"m5 11 9 9\"/></svg>`,select:`${G}<path d=\"m4 4 7.07 17 2.51-7.39L21 11.07z\"/></svg>`,hbond:`${G}<path d=\"M9 17H7A5 5 0 0 1 7 7h2\"/><path d=\"M15 7h2a5 5 0 1 1 0 10h-2\"/><line x1=\"8\" y1=\"12\" x2=\"16\" y2=\"12\"/></svg>`,\"zoom-in\":`${G}<circle cx=\"11\" cy=\"11\" r=\"8\"/><line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"/><line x1=\"11\" y1=\"8\" x2=\"11\" y2=\"14\"/><line x1=\"8\" y1=\"11\" x2=\"14\" y2=\"11\"/></svg>`,\"zoom-out\":`${G}<circle cx=\"11\" cy=\"11\" r=\"8\"/><line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"/><line x1=\"8\" y1=\"11\" x2=\"14\" y2=\"11\"/></svg>`,fit:`${G}<polyline points=\"15 3 21 3 21 9\"/><polyline points=\"9 21 3 21 3 15\"/><line x1=\"21\" y1=\"3\" x2=\"14\" y2=\"10\"/><line x1=\"3\" y1=\"21\" x2=\"10\" y2=\"14\"/></svg>`,move:`${G}<polyline points=\"5 9 2 12 5 15\"/><polyline points=\"9 5 12 2 15 5\"/><polyline points=\"15 19 12 22 9 19\"/><polyline points=\"19 9 22 12 19 15\"/><line x1=\"2\" y1=\"12\" x2=\"22\" y2=\"12\"/><line x1=\"12\" y1=\"2\" x2=\"12\" y2=\"22\"/></svg>`,clean:`${G}<path d=\"m21.64 3.64-1.28-1.28a1.21 1.21 0 0 0-1.72 0L2.36 18.64a1.21 1.21 0 0 0 0 1.72l1.28 1.28a1.2 1.2 0 0 0 1.72 0L21.64 5.36a1.2 1.2 0 0 0 0-1.72Z\"/><path d=\"m14 7 3 3\"/><path d=\"M5 6v4\"/><path d=\"M19 14v4\"/><path d=\"M10 2v2\"/><path d=\"M7 8H3\"/><path d=\"M21 16h-4\"/><path d=\"M11 3H9\"/></svg>`,find:`${G}<circle cx=\"11\" cy=\"11\" r=\"8\"/><line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"/></svg>`,theme:`${G}<circle cx=\"12\" cy=\"12\" r=\"9\"/><path d=\"M12 3a9 9 0 0 1 0 18z\" fill=\"currentColor\" stroke=\"none\"/></svg>`},ka={new:\"New \\u2014 clear the canvas\",open:\"Open \\u2014 paste a HELM string\",save:\"Save \\u2014 copy HELM string to clipboard\",undo:\"Undo last action\",redo:\"Redo last undone action\",eraser:\"Eraser \\u2014 click an atom or bond to delete it\",select:\"Select mode (default)\",hbond:\"H-Bond mode \\u2014 drag between two RNA bases to add a Watson-Crick pair\",\"zoom-in\":\"Zoom in\",\"zoom-out\":\"Zoom out\",fit:\"Fit to content \\u2014 reset zoom and pan\",move:\"Move/Pan mode \\u2014 drag the canvas to scroll\",clean:\"Clean layout \\u2014 re-run automatic layout\",find:\"Find / Replace monomer\",theme:\"Toggle dark / light theme\"},Si=[{id:\"new\",label:\"New\",icon:\"New\"},{id:\"open\",label:\"Open\",icon:\"Open\"},{id:\"save\",label:\"Save\",icon:\"Save\"},{id:\"undo\",label:\"Undo\",icon:\"\\u21BA\",shortcut:\"Ctrl+Z\",separator:true},{id:\"redo\",label:\"Redo\",icon:\"\\u21BB\",shortcut:\"Ctrl+Y\"},{id:\"eraser\",label:\"Eraser\",icon:\"Eraser\",separator:true},{id:\"select\",label:\"Select\",icon:\"Select\"},{id:\"hbond\",label:\"H-Bond\",icon:\"H-Bond\"},{id:\"zoom-in\",label:\"Zoom In\",icon:\"+\",shortcut:\"Ctrl++\",separator:true},{id:\"zoom-out\",label:\"Zoom Out\",icon:\"\\u2212\",shortcut:\"Ctrl+\\u2212\"},{id:\"fit\",label:\"Fit\",icon:\"Fit\",shortcut:\"0\"},{id:\"move\",label:\"Move\",icon:\"Move\"},{id:\"clean\",label:\"Clean\",icon:\"Clean\",separator:true},{id:\"find\",label:\"Find\",icon:\"Find\",shortcut:\"Ctrl+F\"},{id:\"theme\",label:\"Theme\",icon:\"Theme\",separator:true}],lt=class{constructor(e,t,n){this._buttons=new Map;this._unsubs=[];this._destroyed=false;this._editor=t,this._doc=n?.documentImpl??E(e);let o=n?.buttons??Si;this.element=y(this._doc,\"div\",{class:\"hw-toolbar\",\"data-testid\":\"toolbar\"}),e.appendChild(this.element);for(let s of o){if(s.separator===true){let l=y(this._doc,\"span\",{class:\"hw-toolbar__separator\"});this.element.appendChild(l);}let a=this._buildButton(s);this.element.appendChild(a),this._buttons.set(s.id,a);}let r=()=>this._refreshHistoryState();this._unsubs.push(t.on(\"mol:changed\",r)),this._unsubs.push(t.on(\"helm:changed\",r)),r(),this._reflectMode(),this._unsubs.push(t.on(\"option:change\",s=>{s.key===\"mode\"&&this._reflectMode();}));}setButtonEnabled(e,t){let n=this._buttons.get(e);n!==void 0&&(t?n.removeAttribute(\"disabled\"):n.setAttribute(\"disabled\",\"\"));}destroy(){if(!this._destroyed){this._destroyed=true,this._hideTip();for(let e of this._unsubs)e();this.element.parentNode!==null&&this.element.parentNode.removeChild(this.element);}}_buildButton(e){let t=this._doc.createElement(\"button\");t.setAttribute(\"class\",\"hw-toolbar__btn\"),t.setAttribute(\"type\",\"button\"),t.setAttribute(\"data-action\",e.id),t.setAttribute(\"data-testid\",`toolbar-${e.id}`);let n=ka[e.id]??e.label,o=e.shortcut!==void 0?`${n} (${e.shortcut})`:n;t.setAttribute(\"data-tooltip\",o),t.setAttribute(\"aria-label\",n),t.addEventListener(\"mouseenter\",s=>{let a=s;this._showTip(o,typeof a.clientX==\"number\"?a.clientX:0,typeof a.clientY==\"number\"?a.clientY:0);}),t.addEventListener(\"mouseleave\",()=>this._hideTip()),t.addEventListener(\"click\",()=>this._hideTip());let r=wa[e.id];if(r!==void 0){let s=this._doc.createElement(\"span\");s.setAttribute(\"class\",\"hw-toolbar__btn-icon\"),s.setAttribute(\"aria-hidden\",\"true\"),s.innerHTML=r,t.appendChild(s);}else {let s=e.icon??e.label;t.appendChild(this._doc.createTextNode(s));}return t.addEventListener(\"click\",()=>this._invoke(e.id)),t}_showTip(e,t,n){let o=te(this._doc,\"toolbar-tooltip\",\"hw-toolbar-tooltip\");for(;o.firstChild!==null;)o.removeChild(o.firstChild);o.appendChild(this._doc.createTextNode(e)),j(o,t,n);}_hideTip(){F(this._doc.body.querySelector('[data-testid=\"toolbar-tooltip\"]'));}_invoke(e){let t=false;this._editor.fire(\"key:command\",{command:e,preventDefault:()=>{t=true;}}),!t&&this._execute(e);}_execute(e){switch(e){case \"new\":this._editor.setHelm(\"\");return;case \"open\":{let t=this._doc.defaultView;if(t!=null&&typeof t.prompt==\"function\"){let n=t.prompt(\"Enter HELM string\");n!==null&&this._editor.setHelm(n);}return}case \"save\":{let t=this._editor.getHelm();this._editor.fire(\"clipboard:copy\",{format:\"helm\",payload:t});return}case \"undo\":this._editor.undo();return;case \"redo\":this._editor.redo();return;case \"eraser\":{if(!this._editor.getSelection().isEmpty){this._editor.deleteSelection();return}this._editor.setMode(\"eraser\");return}case \"select\":case \"hbond\":case \"move\":this._editor.setMode(e);return;case \"zoom-in\":this._editor.zoom(1.1,this._molCenterOrUndefined());return;case \"zoom-out\":this._editor.zoom(1/1.1,this._molCenterOrUndefined());return;case \"fit\":this._editor.fitToContent();return;case \"clean\":this._editor.cleanLayout();return;case \"find\":this._editor.openFindReplace();return;case \"theme\":{let t=this._editor,n=typeof t._currentTheme==\"function\"?t._currentTheme():null,o=n!==null&&n.name===\"dark\";this._editor.setTheme(o?I:An);return}default:return}}_refreshHistoryState(){this.setButtonEnabled(\"undo\",this._editor.canUndo()),this.setButtonEnabled(\"redo\",this._editor.canRedo());}_molCenterOrUndefined(){let e=this._editor.getMol();if(e.atoms.length===0)return;let t=e.atoms[0].p.x,n=t,o=e.atoms[0].p.y,r=o;for(let s=1;s<e.atoms.length;s++){let a=e.atoms[s].p;a.x<t&&(t=a.x),a.x>n&&(n=a.x),a.y<o&&(o=a.y),a.y>r&&(r=a.y);}return {x:(t+n)/2,y:(o+r)/2}}_reflectMode(){let e=this._editor.getMode();for(let t of [\"select\",\"eraser\",\"hbond\",\"move\"]){let n=this._buttons.get(t);if(n===void 0)continue;let r=(n.getAttribute(\"class\")??\"\").split(/\\s+/).filter(s=>s!==\"hw-toolbar__btn--active\").join(\" \");n.setAttribute(\"class\",t===e?`${r} hw-toolbar__btn--active`:r);}}};var dt=class{constructor(e,t,n){this._unsubs=[];this._destroyed=false;this._editor=t,this._doc=n?.documentImpl??E(e),this._content=y(this._doc,\"pre\",{class:\"hw-pane__content hw-pane__sequence\",\"data-testid\":\"sequence-pane-content\"}),this.element=y(this._doc,\"div\",{class:\"hw-pane hw-pane--sequence\",\"data-testid\":\"pane-sequence\"},[this._content]),e.appendChild(this.element),this.refresh(),this._unsubs.push(t.on(\"helm:changed\",()=>this.refresh())),this._unsubs.push(t.on(\"mol:changed\",()=>this.refresh()));}refresh(){if(this._destroyed)return;let e=this._compute();for(;this._content.firstChild!==null;)this._content.removeChild(this._content.firstChild);this._content.appendChild(this._doc.createTextNode(e));}destroy(){if(!this._destroyed){this._destroyed=true;for(let e of this._unsubs)e();this.element.parentNode!==null&&this.element.parentNode.removeChild(this.element);}}_compute(){let e=this._editor.getMol(),t=[],n;for(let o of e.atoms){let r=o.bio.chainId;n!==void 0&&r!==n&&t.push(\"|\"),n=r;let s=o.monomer?.naturalAnalog;t.push(s!==void 0&&s!==\"\"?s:o.symbol);}return t.join(\"\")}};var ct=class{constructor(e,t,n){this._unsubs=[];this._destroyed=false;this._suppressNext=false;this._editor=t,this._doc=n?.documentImpl??E(e),this._input=y(this._doc,\"div\",{class:\"hw-pane__content hw-pane__notation\",contenteditable:\"true\",spellcheck:\"false\",\"data-testid\":\"notation-pane-content\"}),this._error=y(this._doc,\"div\",{class:\"hw-pane__error\",\"data-testid\":\"notation-pane-error\"}),this.element=y(this._doc,\"div\",{class:\"hw-pane hw-pane--notation\",\"data-testid\":\"pane-helm\"},[this._input,this._error]),e.appendChild(this.element),this.refresh(),this._input.addEventListener(\"blur\",()=>this._commit()),this._input.addEventListener(\"keydown\",o=>{o.key===\"Enter\"&&(o.preventDefault(),o.stopPropagation(),o.stopImmediatePropagation(),this._commit());}),this._unsubs.push(t.on(\"helm:changed\",()=>{if(this._suppressNext){this._suppressNext=false;return}this.refresh();})),this._unsubs.push(t.on(\"mol:changed\",()=>this.refresh()));}refresh(){if(this._destroyed)return;let e=this._editor.getHelm();for(;this._input.firstChild!==null;)this._input.removeChild(this._input.firstChild);this._input.appendChild(this._doc.createTextNode(e)),this._clearError();}destroy(){if(!this._destroyed){this._destroyed=true;for(let e of this._unsubs)e();this.element.parentNode!==null&&this.element.parentNode.removeChild(this.element);}}_commit(){if(this._destroyed)return;let e=(this._input.textContent??\"\").trim(),t=this._editor.getHelm();if(e===t){this._clearError();return}let r=this._editor.getService().validate(e).filter(s=>s.severity===\"error\");if(r.length>0){this._showError(r.map(s=>s.message).join(\"; \"));return}this._clearError(),this._suppressNext=true,this._editor.setHelm(e);}_showError(e){for(;this._error.firstChild!==null;)this._error.removeChild(this._error.firstChild);this._error.appendChild(this._doc.createTextNode(e)),this._error.setAttribute(\"class\",\"hw-pane__error hw-pane__error--visible\");}_clearError(){for(;this._error.firstChild!==null;)this._error.removeChild(this._error.firstChild);this._error.setAttribute(\"class\",\"hw-pane__error\");}};var xa=1e3,ut=class{constructor(e,t,n){this._unsubs=[];this._destroyed=false;this._editor=t,this._doc=n?.documentImpl??E(e),this._body=y(this._doc,\"div\",{class:\"hw-pane__content hw-pane__properties\",\"data-testid\":\"properties-pane-content\"}),this.element=y(this._doc,\"div\",{class:\"hw-pane hw-pane--properties\",\"data-testid\":\"pane-properties\"},[this._body]),e.appendChild(this.element),this.refresh(),this._unsubs.push(t.on(\"helm:changed\",()=>this.refresh())),this._unsubs.push(t.on(\"mol:changed\",()=>this.refresh()));}refresh(){if(this._destroyed)return;for(;this._body.firstChild!==null;)this._body.removeChild(this._body.firstChild);let e=this._editor.getHelm();if(e.length>xa){this._body.appendChild(y(this._doc,\"div\",{class:\"hw-pane__placeholder\"},[\"(too long)\"]));return}let t=this._editor.getService(),n=\"\",o=0,r=0;try{let s=t.getFormula(e);n=Aa(s.elements),o=s.mw;}catch{n=\"\\u2014\";}try{o=t.getMolWeight(e);}catch{}try{r=t.getExtinctionCoefficient(e);}catch{}this._body.appendChild(this._makeRow(\"Formula\",n,\"formula\")),this._body.appendChild(this._makeRow(\"Molecular Weight\",o===0?\"\\u2014\":o.toFixed(2),\"mw\")),this._body.appendChild(this._makeRow(\"Extinction Coefficient\",r===0?\"\\u2014\":r.toFixed(0),\"extinction\"));}destroy(){if(!this._destroyed){this._destroyed=true;for(let e of this._unsubs)e();this.element.parentNode!==null&&this.element.parentNode.removeChild(this.element);}}_makeRow(e,t,n){let o=y(this._doc,\"span\",{class:\"hw-pane__prop-label\"},[e]),r=y(this._doc,\"span\",{class:\"hw-pane__prop-value\",\"data-testid\":`properties-${n}`},[t]);return y(this._doc,\"div\",{class:\"hw-pane__prop-row\"},[o,r])}};function Aa(i){let e=Array.from(i.keys()).sort((n,o)=>n===o?0:n===\"C\"?-1:o===\"C\"?1:n===\"H\"?-1:o===\"H\"?1:n.localeCompare(o)),t=\"\";for(let n of e){let o=i.get(n);o===void 0||o===0||(t+=o===1?n:`${n}${o}`);}return t===\"\"?\"\\u2014\":t}var mt=class{constructor(e,t,n){this._unsubs=[];this._destroyed=false;this._refreshToken=0;this._editor=t,this._doc=n?.documentImpl??E(e),this._content=y(this._doc,\"pre\",{class:\"hw-pane__content hw-pane__atomic\",\"data-testid\":\"atomic-pane-content\"}),this.element=y(this._doc,\"div\",{class:\"hw-pane hw-pane--atomic\",\"data-testid\":\"pane-atomic\"},[this._content]),e.appendChild(this.element),this.refresh(),this._unsubs.push(t.on(\"helm:changed\",()=>{this.refresh();}));}async refresh(){if(this._destroyed)return;let e=++this._refreshToken,t=this._editor.getHelm(),n=this._editor.getService();if(!n.hasAtomicMolfileProvider()){this._render(\"Atomic structure unavailable\");return}try{let o=await n.getAtomicMolfile(t);if(this._destroyed||e!==this._refreshToken)return;this._render(o);}catch(o){if(this._destroyed||e!==this._refreshToken)return;let r=o instanceof Error?o.message:String(o);this._render(`Atomic structure unavailable: ${r}`);}}destroy(){if(!this._destroyed){this._destroyed=true;for(let e of this._unsubs)e();this.element.parentNode!==null&&this.element.parentNode.removeChild(this.element);}}_render(e){for(;this._content.firstChild!==null;)this._content.removeChild(this._content.firstChild);this._content.appendChild(this._doc.createTextNode(e));}};var Ma=[{id:\"sequence\",label:\"Sequence\"},{id:\"helm\",label:\"HELM\"},{id:\"properties\",label:\"Properties\"},{id:\"atomic\",label:\"Atomic Structure\"}],pt=class{constructor(e,t){this._paneByName=new Map;this._tabsByName=new Map;this._unsubs=[];this._activePane=\"helm\";this._destroyed=false;this._statusModeNode=null;this._statusMessageNode=null;this._statusMessageTimeout=null;this._host=e,this._doc=t.documentImpl??E(e);let o=(t.theme??I).name===\"dark\"?\"hw-app hw-app--dark\":\"hw-app\";this.element=y(this._doc,\"div\",{class:o,\"data-testid\":\"app-root\"}),this._toolbarHost=y(this._doc,\"div\",{class:\"hw-app__toolbar\"}),this._paletteHost=y(this._doc,\"div\",{class:\"hw-app__palette\"}),this._canvasHost=y(this._doc,\"div\",{class:\"hw-app__canvas\",\"data-testid\":\"canvas-host\"});let r=y(this._doc,\"div\",{class:\"hw-app__main\"},[this._paletteHost,this._canvasHost]);this._tabsHost=y(this._doc,\"div\",{class:\"hw-app__tabs\",role:\"tablist\"}),this._paneBody=y(this._doc,\"div\",{class:\"hw-app__pane-body\"});let s=y(this._doc,\"div\",{class:\"hw-app__panes\"},[this._tabsHost,this._paneBody]);this.element.appendChild(this._toolbarHost),this.element.appendChild(r),this.element.appendChild(s),e.appendChild(this.element);let a={service:t.service};t.initialHelm!==void 0&&(a.initialHelm=t.initialHelm),t.width!==void 0&&(a.width=t.width),t.height!==void 0&&(a.height=t.height),this.canvas=new it(this._canvasHost,a),t.theme!==void 0&&this.canvas.setTheme(t.theme);let l={documentImpl:this._doc};t.toolbarButtons!==void 0&&(l.buttons=t.toolbarButtons),this.toolbar=new lt(this._toolbarHost,this.canvas,l),this.palette=new at(this._paletteHost,this.canvas,{documentImpl:this._doc,...t.paletteOptions}),this.sequencePane=new dt(this._paneBody,this.canvas,{documentImpl:this._doc}),this.notationPane=new ct(this._paneBody,this.canvas,{documentImpl:this._doc}),this.propertiesPane=new ut(this._paneBody,this.canvas,{documentImpl:this._doc}),t.service.hasAtomicMolfileProvider()?this.atomicStructurePane=new mt(this._paneBody,this.canvas,{documentImpl:this._doc}):this.atomicStructurePane=null,this._paneByName.set(\"sequence\",this.sequencePane.element),this._paneByName.set(\"helm\",this.notationPane.element),this._paneByName.set(\"properties\",this.propertiesPane.element),this.atomicStructurePane!==null&&this._paneByName.set(\"atomic\",this.atomicStructurePane.element);let d=this._resolveVisiblePanes(t);for(let c of d){let m=Ma.find(h=>h.id===c);if(m===void 0)continue;let p=this._doc.createElement(\"button\");p.setAttribute(\"type\",\"button\"),p.setAttribute(\"class\",\"hw-app__tab\"),p.setAttribute(\"role\",\"tab\"),p.setAttribute(\"data-pane\",c),p.setAttribute(\"data-testid\",`tab-${c}`),p.appendChild(this._doc.createTextNode(m.label)),p.addEventListener(\"click\",()=>this.activatePane(c)),this._tabsHost.appendChild(p),this._tabsByName.set(c,p);}let u=d.includes(\"helm\")?\"helm\":d[0]??\"helm\";this.activatePane(u),this._unsubs.push(this.canvas.on(\"theme:change\",c=>this._applyTheme(c.theme))),this._buildStatusBar(),this._applyMode(this.canvas.getMode()),this._unsubs.push(this.canvas.on(\"option:change\",c=>{c.key===\"mode\"&&this._applyMode(c.newValue),c.key===\"nextAdd\"&&this._refreshStatus();})),this._unsubs.push(this.canvas.on(\"mol:changed\",()=>this._refreshStatus())),this._unsubs.push(this.canvas.on(\"helm:changed\",()=>this._refreshStatus())),this._unsubs.push(this.canvas.on(\"editor:status\",c=>{this._showStatusMessage(c.message,c.severity,c.durationMs);})),this._unsubs.push(this.canvas.on(\"monomer:contextmenu\",c=>{c.preventDefault(),this.canvas.openAtomProps(c.atom);})),this._unsubs.push(this.canvas.on(\"bond:contextmenu\",c=>{c.preventDefault(),this.canvas.openBondProps(c.bond);})),this._onDocKeydown=c=>this._handleEscape(c),this._doc.addEventListener(\"keydown\",this._onDocKeydown,true);}_handleEscape(e){let t=e;t.key===\"Escape\"&&($t(this._doc),q.closeTopmost()&&(t.stopImmediatePropagation?.(),t.preventDefault?.()));}_buildStatusBar(){let e=y(this._doc,\"div\",{class:\"hw-status-bar\",\"data-testid\":\"status-bar\"}),t=y(this._doc,\"span\",{class:\"hw-status-bar__mode\",\"data-testid\":\"status-mode\"}),n=y(this._doc,\"span\",{class:\"hw-status-bar__message\",\"data-testid\":\"status-message\",role:\"status\",\"aria-live\":\"polite\"});e.appendChild(t),e.appendChild(n),this._canvasHost.appendChild(e),this._statusModeNode=t,this._statusMessageNode=n,this._refreshStatus();}_refreshStatus(){let e=this._statusModeNode;if(e===null)return;let t=this.canvas.getMode(),n=this.canvas.getNextAddSymbol();for(;e.firstChild!==null;)e.removeChild(e.firstChild);if(n===null){e.appendChild(this._doc.createTextNode(`Mode: ${t} | Next add: none`));return}e.appendChild(this._doc.createTextNode(`Mode: ${t} | Next add: `));let o=y(this._doc,\"span\",{class:\"hw-status-bar__next-add-symbol\",\"data-testid\":\"status-next-add-symbol\"},[n.symbol]);e.appendChild(o);let r=y(this._doc,\"button\",{type:\"button\",class:\"hw-status-bar__next-add-clear\",\"data-testid\":\"status-next-add-clear\",\"aria-label\":\"Clear next-add monomer\",title:\"Clear (Esc)\"},[\"\\xD7\"]);r.addEventListener(\"click\",s=>{s.preventDefault(),s.stopPropagation(),this.canvas.setNextAddSymbol(null);}),e.appendChild(r);}_showStatusMessage(e,t,n){let o=this._statusMessageNode;if(o!==null){for(this._statusMessageTimeout!==null&&(clearTimeout(this._statusMessageTimeout),this._statusMessageTimeout=null);o.firstChild!==null;)o.removeChild(o.firstChild);o.appendChild(this._doc.createTextNode(e)),o.setAttribute(\"data-severity\",t),n>0&&(this._statusMessageTimeout=setTimeout(()=>{let r=this._statusMessageNode;if(r!==null){for(;r.firstChild!==null;)r.removeChild(r.firstChild);r.removeAttribute(\"data-severity\"),this._statusMessageTimeout=null;}},n));}}_applyMode(e){let t=this._canvasHost.querySelector(\".hw-editor-view\");if(t===null)return;let o=(t.getAttribute(\"class\")??\"\").split(/\\s+/).filter(r=>!r.startsWith(\"hw-editor-view--\")).join(\" \");t.setAttribute(\"class\",`${o} hw-editor-view--${e}`.trim()),this._refreshStatus();}setHelm(e){this.canvas.setHelm(e);}getHelm(){return this.canvas.getHelm()}on(e,t){return this.canvas.on(e,t)}activatePane(e){if(!(!this._paneByName.has(e)&&!this._tabsByName.has(e))){this._activePane=e;for(let[t,n]of this._paneByName.entries())n.style.display=t===e?\"\":\"none\";for(let[t,n]of this._tabsByName.entries()){let r=(n.getAttribute(\"class\")??\"\").split(/\\s+/).filter(s=>s!==\"hw-app__tab--active\").join(\" \");n.setAttribute(\"class\",t===e?`${r} hw-app__tab--active`:r);}}}getActivePane(){return this._activePane}destroy(){if(!this._destroyed){this._destroyed=true,this._statusMessageTimeout!==null&&(clearTimeout(this._statusMessageTimeout),this._statusMessageTimeout=null),this._doc.removeEventListener(\"keydown\",this._onDocKeydown,true);for(let e of this._unsubs)e();this.atomicStructurePane!==null&&this.atomicStructurePane.destroy(),this.propertiesPane.destroy(),this.notationPane.destroy(),this.sequencePane.destroy(),this.palette.destroy(),this.toolbar.destroy(),this.canvas.destroy(),this.element.parentNode!==null&&this.element.parentNode.removeChild(this.element),this._host;}}_resolveVisiblePanes(e){let t=e.service.hasAtomicMolfileProvider(),n=e.visiblePanes??[\"sequence\",\"helm\",\"properties\",\"atomic\"];return t||(n=n.filter(o=>o!==\"atomic\")),n}_applyTheme(e){let t=e.name===\"dark\",o=(this.element.getAttribute(\"class\")??\"\").split(/\\s+/).filter(r=>r!==\"hw-app--dark\").join(\" \");this.element.setAttribute(\"class\",t?`${o} hw-app--dark`:o);}};var On=class{constructor(e){this.T=\"ATOM\";this.selected=e.selected,this.highlighted=e.highlighted,this.p={x:e.p.x,y:e.p.y},this.elem=e.symbol,this.bio={type:e.biotype,continuousId:e.bio.continuousId,chainId:e.bio.chainId,positionInChain:e.bio.positionInChain,...e.bio.annotation!==void 0?{annotation:e.bio.annotation}:{},...e.bio.blobtype!==void 0?{blobtype:e.bio.blobtype}:{},...e.bio.ambiguity!==void 0?{ambiguity:e.bio.ambiguity}:{},id:e.id},e.inlineSource!==void 0&&(this.inlineSource=e.inlineSource);}biotype(){return this.bio.type}},Nn=class{constructor(e,t,n){this.a1=t,this.a2=n,this.r1=Ei(e.r1),this.r2=Ei(e.r2),this.kind=e.kind;}};function Ei(i){switch(i.kind){case \"numeric\":return i.r;case \"positional\":return i.r;default:return 0}}function oe(i){let e=[],t=new Map;for(let r of i.atoms){let s=new On(r);e.push(s),t.set(r.id,s);}let n=[];for(let r of i.bonds){let s=t.get(r.a1.id),a=t.get(r.a2.id);s===void 0||a===void 0||n.push(new Nn(r,s,a));}return {atoms:e,bonds:n,clone(r){return oe(i)},_internalMol:i}}var Ta=400,Sa=100,Ea=14,ie=class{constructor(e,t,n){this._laidMol=null;this._currentHelm=\"\";this._drawOptions={fontsize:Ea};this._noDraw=false;this._svgEl=null;this.host=e,this._service=t,this._doc=n?.documentImpl??E(e),this._width=n?.width??Ta,this._height=n?.height??Sa,this._mol=ce(),this._molView=oe(this._mol),this.editor=this._buildEditor();}resizeEditor(e,t){this._width=e,this._height=t,this._redraw();}_buildEditor(){let e=this,t={get noDraw(){return e._noDraw},set noDraw(n){e._noDraw=n;},get jsd(){return e.editor}};return {get div(){return e.host},get m(){return e._molView},set m(n){e._molView=n;},get helm(){return t},get options(){return {width:e._width,height:e._height}},setData(n,o){if(o!==\"helm\")throw new Error(`LegacyEditorWrapper: only 'helm' format supported (got '${o}').`);e._setHelm(n);},setHelm(n){e._setHelm(n);},setMol(n){e._mol=n._internalMol,e._molView=e._buildView(e._mol),e._currentHelm=e._service.serialize(e._mol),e._redraw();},getHelm(n){return e._currentHelm},getMolfile(){return Rt(e._mol)},resize(n,o){e._width=n,e._height=o,e._redraw();},setSize(n,o){e._width=n,e._height=o,e._redraw();},redraw(){e._redraw();},reset(){e._mol=ce(),e._laidMol=null,e._molView=oe(e._mol),e._currentHelm=\"\",e._removeSvg();},getFormula(n){return Ca(pe(e._mol))},getMolWeight(){return Re(e._mol)},getExtinctionCoefficient(){return Ie(e._mol)},getDrawOptions(){return e._drawOptions}}}_setHelm(e){this._currentHelm=e;let t=this._service.parse(e,{mode:\"lenient\",resolveMonomers:true});this._mol=t.mol,this._molView=this._buildView(this._mol),this._redraw();}_buildView(e){return this._laidMol=this._noDraw?null:ee(e),oe(this._laidMol??e)}_redraw(){if(this._noDraw){this._removeSvg();return}if(this._currentHelm===\"\"||this._laidMol===null){this._removeSvg();return}let e=new Set,t=new Set;for(let o of this._molView.atoms){let r=o.bio.id;r!==void 0&&(o.selected&&e.add(r),o.highlighted&&t.add(r));}let n=this._service.renderMolResult(this._laidMol,{width:this._width,height:this._height,maxScale:1/0,showIds:true,selectedAtomIds:e,highlightedAtomIds:t});this._bakeViewToSurface(n.bbox,n.drawBox),this._mountSvg(n.svg);}_bakeViewToSurface(e,t){if(this._laidMol===null)return;let n=t.scale,o=t.x-e.x*n,r=t.y-e.y*n,s=this._laidMol.atoms,a=this._molView.atoms,l=Math.min(s.length,a.length);for(let d=0;d<l;d++){let u=s[d].p,c=a[d].p;c.x=u.x*n+o,c.y=u.y*n+r;}}_mountSvg(e){this._removeSvg();let t=La(this._doc,e,this._width,this._height);t.setAttribute(\"pointer-events\",\"none\"),this.host.firstChild!==null?this.host.insertBefore(t,this.host.firstChild):this.host.appendChild(t),this._svgEl=t;}_removeSvg(){this._svgEl!==null&&this._svgEl.parentNode!==null&&this._svgEl.parentNode.removeChild(this._svgEl),this._svgEl=null;}},Ci=[\"C\",\"H\",\"N\",\"O\",\"S\",\"P\"];function Ca(i){let e=o=>{let r=Ci.indexOf(o);return r===-1?Ci.length:r},t=[...i.elements.keys()].sort((o,r)=>{let s=e(o),a=e(r);return s!==a?s-a:o<r?-1:o>r?1:0}),n=[];for(let o of t){let r=i.elements.get(o);n.push(r===1?o:`${o}${r}`);}return n.join(\"\")}function La(i,e,t,n){let o=Ba(i,e);if(o!==null)return o;let r=i.createElementNS(\"http://www.w3.org/2000/svg\",\"svg\");return r.setAttribute(\"width\",String(t)),r.setAttribute(\"height\",String(n)),r}function Ba(i,e){let t=globalThis.DOMParser;if(t===void 0)return null;try{let r=new t().parseFromString(e,\"image/svg+xml\").documentElement;return r==null?null:i.importNode(r,!0)}catch{return null}}var Ra=800,Ia=400,Pa=32,Ha=14,Fn=class{constructor(e){this._width=0;this._height=0;this._doc=e;}resize(e,t){this._width=e,this._height=t;}select(){}dblclick(){}createMonomerDiv(e,t,n){let o=y(this._doc,\"div\",{\"data-monomer\":t,\"data-biotype\":n,\"data-testid\":`legacy-mex-monomer-${t}`});return e.appendChild(o),o}getSize(){return {width:this._width,height:this._height}}},ht=class{constructor(e,t,n){this.toolbarheight=Pa;this._drawOptions={fontsize:Ha};this._unsubs=[];this._destroyed=false;this._host=e,this._service=t,this._doc=n?.documentImpl??E(e),this._width=n?.width??Ra,this._height=n?.height??Ia;let o={service:t};n?.initialHelm!==void 0&&(o.initialHelm=n.initialHelm),n?.documentImpl!==void 0&&(o.documentImpl=n.documentImpl),n?.width!==void 0&&(o.width=n.width),n?.height!==void 0&&(o.height=n.height),this._app=new pt(e,o),this.sequence=this._app.sequencePane.element,this.notation=this._app.notationPane.element,this.properties={parent:this._app.propertiesPane.element},this._structureviewHost=y(this._doc,\"div\",{class:\"hwe-legacy-app__structureview\",\"data-testid\":\"legacy-app-structureview\"}),this._structureviewWrapper=new ie(this._structureviewHost,t,{documentImpl:this._doc}),this.structureview=this._structureviewWrapper,this.mex=new Fn(this._doc),this._editorFacade=this._buildEditorFacade();let r=this._editorFacade;this.canvas={get host(){return r.div},get editor(){return r},get helm(){return r.helm},resizeEditor:(a,l)=>{this._resize(a,l);},getHelm:a=>r.getHelm(a),setHelm:a=>{r.setHelm(a);}};let s=()=>{this._structureviewWrapper.editor.setHelm(this._app.getHelm());};this._unsubs.push(this._app.canvas.on(\"helm:changed\",s)),n?.initialHelm!==void 0&&n.initialHelm.length>0&&s();}get editorApp(){return this._app}_buildEditorFacade(){let e=this,t=this._app,n={noDraw:false,get jsd(){return e._editorFacade}};return {get div(){return t.element},get m(){return e._currentMolView()},set m(o){o!=null&&o._internalMol!==void 0&&t.canvas.setMol(o._internalMol);},get helm(){return n},get options(){return {width:e._width,height:e._height}},setData(o,r){if(r!==\"helm\")throw new Error(`LegacyAppWrapper: only 'helm' format supported (got '${r}').`);t.setHelm(o);},setHelm(o){t.setHelm(o);},setMol(o){t.canvas.setMol(o._internalMol);},getHelm(o){return t.getHelm()},getMolfile(){return e._service.getMolfile(t.getHelm())},resize(o,r){e._resize(o,r);},setSize(o,r){e._resize(o,r);},redraw(){t.canvas.redraw();},reset(){t.setHelm(\"\");},getFormula(o){return $a(pe(t.canvas.getMol()))},getMolWeight(){return Re(t.canvas.getMol())},getExtinctionCoefficient(){return Ie(t.canvas.getMol())},getDrawOptions(){return e._drawOptions}}}_currentMolView(){let e=this._app.canvas.getMol(),t=oe(e),n=this._app.canvas.getSelection();if(!n.isEmpty)for(let o of t.atoms){let r=o.bio.id;typeof r==\"number\"&&(o.selected=n.atoms.has(r));}return t}_resize(e,t){this._width=e,this._height=t,this._app.canvas.resize(e,t);}calculateSizes(){let e=Li(this._host.clientWidth,this._width),t=Li(this._host.clientHeight,this._height);this._resize(e,Math.max(50,t-this.toolbarheight));}destroy(){if(!this._destroyed){this._destroyed=true;for(let e of this._unsubs)e();this._unsubs.length=0,this._app.destroy();}}};function $a(i){let e=[];for(let[t,n]of i.elements.entries())e.push(n===1?t:`${t}${n}`);return e.join(\"\")}function Li(i,e){return typeof i!=\"number\"||isNaN(i)||i<=0?e:i}var Da=240,Oa=80,ft=class{constructor(e,t,n){this._tooltip=null;this._destroyed=false;this.name=e,this._service=t;let o=n?.documentImpl??Na();if(o===null)throw new Error(\"LegacyInputWrapper: no Document available.\");this._doc=o,this._host=y(this._doc,\"div\",{class:\"hwe-legacy-input\",\"data-testid\":\"legacy-input-host\"}),this.viewer=new ie(this._host,t,{width:n?.editorOptions?.width??Da,height:n?.editorOptions?.height??Oa,documentImpl:this._doc});}get value(){return this.viewer.editor.getHelm()}set value(e){this._ensureLive(),this.viewer.editor.setHelm(e);}get molValue(){return this.viewer.editor.m}set molValue(e){this._ensureLive(),this.viewer.editor.setMol(e);}redraw(){this._ensureLive(),this.viewer.editor.redraw();}showTooltip(e,t){this._ensureLive(),this._tooltip!==null&&this._tooltip.parentNode!==null&&this._tooltip.parentNode.removeChild(this._tooltip);let n=y(this._doc,\"div\",{class:\"hwe-legacy-input__tooltip\",\"data-testid\":\"legacy-input-tooltip\",style:`position: absolute; left: ${t.p.x}px; top: ${t.p.y}px;`});typeof e==\"string\"?n.appendChild(this._doc.createTextNode(e)):n.appendChild(e),this._host.appendChild(n),this._tooltip=n;}destroy(){this._destroyed||(this._destroyed=true,this._tooltip!==null&&this._tooltip.parentNode!==null&&this._tooltip.parentNode.removeChild(this._tooltip),this._host.parentNode!==null&&this._host.parentNode.removeChild(this._host));}getHost(){return this._host}getTooltip(){return this._tooltip}_ensureLive(){if(this._destroyed)throw new Error(\"LegacyInputWrapper: this instance has been destroyed.\");this._service;}};function Na(){return globalThis.document??null}var Fa=/^R([1-9][0-9]*)$/,Ri=new Set([v.PEPTIDE,v.RNA,v.CHEM,v.BLOB]),Ga=new Set([\"Backbone\",\"Branch\",\"Terminal\",\"Undefined\"]);function Bi(i){if(typeof i.symbol!=\"string\"||i.symbol.length===0||typeof i.molfile!=\"string\"||!Ri.has(i.polymerType)||!Ga.has(i.monomerType))return null;let e=[];for(let n of i.rgroups??[]){if(typeof n.label!=\"string\"||!Fa.test(n.label))continue;let o={label:n.label,capGroupName:typeof n.capGroupName==\"string\"?n.capGroupName:\"\",capGroupSMILES:Xe(n)??\"\"};typeof n.alternateId==\"string\"&&(o.alternateId=n.alternateId),e.push(o);}let t={symbol:i.symbol,molfile:i.molfile,polymerType:i.polymerType,monomerType:i.monomerType,rgroups:e};return typeof i.name==\"string\"&&(t.name=i.name),typeof i.smiles==\"string\"&&(t.smiles=i.smiles),typeof i.naturalAnalog==\"string\"&&(t.naturalAnalog=i.naturalAnalog),i.meta!==void 0&&i.meta!==null&&(t.meta={...i.meta}),typeof i.author==\"string\"&&(t.author=i.author),i.createDate!==void 0&&(t.createDate=i.createDate),typeof i.id==\"number\"&&(t.id=i.id),t}function Va(i){return i===v.PEPTIDE?b.AA:i===v.RNA?b.SUGAR:i===v.CHEM?b.CHEM:i===v.BLOB?b.BLOB:b.AA}function Gn(i,e,t){if(i===v.PEPTIDE)return b.AA;if(i===v.CHEM)return b.CHEM;if(i===v.BLOB)return b.BLOB;if(i===v.RNA){if(e===\"Branch\")return b.BASE;if(e===\"Backbone\")return t===\"P\"||t===\"p\"?b.LINKER:b.SUGAR}return b.AA}function Ua(i,e){let t=i.subscribe(e);return ()=>{t!=null&&typeof t.unsubscribe==\"function\"&&t.unsubscribe();}}var jt=class{constructor(e,t){this._cache=new Map;this._polymerTypesCache=null;this._version=0;this._base=e,this.source=t??(typeof e.source==\"string\"?e.source:\"datagrok-bridge\"),this.onChanged=new X,this._unsub=Ua(e.onChanged,()=>{this._cache.clear(),this._polymerTypesCache=null,this._version+=1,this.onChanged.next({type:\"reload\"});});}get version(){return this._version}get isEmpty(){return typeof this._base.isEmpty==\"boolean\"?this._base.isEmpty:this.getPolymerTypes().length===0}getMonomer(e,t){let n=`${e}|${t}`;if(this._cache.has(n))return this._cache.get(n)??null;let o=this._base.getMonomer(e,t),r=o==null?null:this._enrichColors(Bi(o));return this._cache.set(n,r),r}_enrichColors(e){if(e===null)return null;let t=this._base;if(typeof t.getMonomerColors!=\"function\")return e;let n=Gn(e.polymerType,e.monomerType,e.naturalAnalog),o=null;try{o=t.getMonomerColors(n,e.symbol);}catch{o=null;}if(o==null)return e;let r=o.backgroundcolor,s=o.textcolor,a=o.linecolor;if(typeof r!=\"string\"||typeof s!=\"string\"||typeof a!=\"string\")return e;let l={...e.meta??{},colors:{...e.meta?.colors??{},default:{line:a,text:s,background:r}}};return {...e,meta:l}}registerInlineSmilesMonomer(e,t){let n=this._base;typeof n.getWebEditorMonomer==\"function\"&&n.getWebEditorMonomer(Va(e),t);let o=n.getMonomer(e,t),r=o==null?null:this._enrichColors(Bi(o));if(r===null)throw new Error(`BridgedMonomerLib: could not register inline SMILES monomer '${t}'`);return this._cache.set(`${e}|${t}`,r),this._cache.set(`${e}|${r.symbol}`,r),r}getMonomerSet(e){let t=new Map;for(let n of this.getPolymerTypes())for(let o of this.getMonomerSymbolsByType(n)){let r=this.getMonomer(n,o);r!==null&&Gn(r.polymerType,r.monomerType,r.naturalAnalog)===e&&t.set(o,r);}return t}getMonomerSymbolsByType(e){return this._base.getMonomerSymbolsByType(e)}getByNaturalAnalog(e,t){let n=[];for(let o of this.getMonomerSymbolsByType(e)){let r=this.getMonomer(e,o);r!==null&&r.naturalAnalog===t&&n.push(r);}return n}getPolymerTypes(){if(this._polymerTypesCache!==null)return this._polymerTypesCache;let e=[],t=typeof this._base.getPolymerTypes==\"function\"?this._base.getPolymerTypes():Object.values(v);for(let n of t){if(!Ri.has(n))continue;let o=this._base.getMonomerSymbolsByType(n);Array.isArray(o)&&o.length>0&&e.push(n);}return this._polymerTypesCache=e,e}getColors(e,t){let n=t===\"dark\"?Ce:_e,o=e===null?b.AA:Gn(e.polymerType,e.monomerType,e.naturalAnalog);return P(e,o,n)}addMonomer(e){throw new Error(\"BridgedMonomerLib: mutation is not supported on a Datagrok-bridged library.\")}removeMonomer(e,t){return false}merge(e){throw new Error(\"BridgedMonomerLib: mutation is not supported on a Datagrok-bridged library.\")}toJSON(){let e=[];for(let t of this.getPolymerTypes())for(let n of this.getMonomerSymbolsByType(t)){let o=this.getMonomer(t,n);o!==null&&e.push(o);}return e}destroy(){this._unsub(),this.onChanged.complete(),this._cache.clear();}};function Vn(i,e){return new jt(i,e)}var qt=class qt{constructor(e){this._overriddenFuncs=null;this._originalFuncs=null;this._molfilesEditor=null;this._molfilesEditorHost=null;this._molfilesGcTimer=null;if(e.service===void 0||e.service===null)throw new TypeError(\"HelmHelperAdapter: options.service is required\");this._service=e.service,this.seqHelper=e.seqHelper??null,this._logger=e.logger??new Me,this._bridge=e.monomerLibBridge??(t=>Vn(t)),this._doc=e.documentImpl??Ii();}get service(){return this._service}createHelmInput(e,t){let n={...t};return n.documentImpl===void 0&&this._doc!==null&&(n.documentImpl=this._doc),new ft(e,this._service,n)}createHelmWebEditor(e,t){let n=e??this._createDetachedHost();return new ie(n,this._service,{...t?.width!==void 0?{width:t.width}:{},...t?.height!==void 0?{height:t.height}:{},...this._doc!==null?{documentImpl:this._doc}:{}})}createWebEditorApp(e,t){return new ht(e,this._service,{...t!==void 0?{initialHelm:t}:{},...this._doc!==null?{documentImpl:this._doc}:{}})}get originalMonomersFuncs(){return this._originalFuncs}buildMonomersFuncsFromLib(e){let t=this._bridge(e),n=e;function o(s,a){if(typeof n.getWebEditorMonomer==\"function\"){let p=n.getWebEditorMonomer(s,a);if(p!=null)return p}let{biotype:l,symbol:d}=Pi(s,a);if(d===null)return null;let u=Ka(d),c=Hi(l),m=t.getMonomer(c,u);return m===null?null:$i(m,u)}function r(s){let{biotype:a}=Pi(s,void 0),l=Hi(a),d={};for(let u of t.getMonomerSymbolsByType(l)){let c=t.getMonomer(l,u);c!==null&&(d[u]=$i(c,u));}return d}return {getMonomer:o,getMonomerSet:r}}overrideMonomersFuncs(e){let t=this._overriddenFuncs;return this._originalFuncs===null&&(this._originalFuncs=t??this._defaultFuncs()),this._overriddenFuncs=e,t??this._originalFuncs}revertOriginalMonomersFuncs(){let e=this._originalFuncs??this._defaultFuncs(),t=this._overriddenFuncs??e;return this._overriddenFuncs=e,this._originalFuncs=null,t}getHoveredAtom(e,t,n,o){let s=new W(n._internalMol,I).test({x:e,y:t});if(s===null||s.atom===void 0)return null;for(let a of n.atoms)if(a.bio.id===s.atom.id||a.bio.id===void 0&&a.bio.continuousId===s.atom.bio.continuousId)return a;return null}getMolfiles(e){let t=this._ensureMolfilesEditor();t.editor.helm.noDraw=true;try{let n=[];for(let o of e){if(typeof o!=\"string\"||o.length===0){n.push(\"\");continue}t.editor.setHelm(o),n.push(t.editor.getMolfile());}return n}finally{t.editor.helm.noDraw=false,this._scheduleMolfilesEditorGc();}}parse(e,t){let n=this._service.parse(e,{mode:\"lenient\",resolveMonomers:false}),o=ee(n.mol);return oe(o)}removeGaps(e){let t;try{t=this._service.removeGaps(e);}catch(o){throw o instanceof K&&o.type===void 0&&(o.type=\"HelmNotSupportedError\"),o}let n=za(this._service,e);return {srcHelm:t.srcHelm,resHelm:t.resHelm,monomerMap:n?new Map(t.monomerMap):null}}destroy(){this._molfilesGcTimer!==null&&(clearTimeout(this._molfilesGcTimer),this._molfilesGcTimer=null),this._removeMolfilesEditorNow();}_defaultFuncs(){return {getMonomer:(e,t)=>null,getMonomerSet:e=>({})}}_createDetachedHost(){let e=this._doc??Ii();if(e===null)throw new Error(\"HelmHelperAdapter: no Document available\");let t=e.createElement(\"div\");return t.style.width=\"0px\",t.style.height=\"0px\",t.style.position=\"fixed\",t}_ensureMolfilesEditor(){if(this._molfilesEditor!==null)return this._molfilesGcTimer!==null&&(clearTimeout(this._molfilesGcTimer),this._molfilesGcTimer=null),this._molfilesEditor;let e=this._createDetachedHost();return this._molfilesEditorHost=e,this._molfilesEditor=new ie(e,this._service,{width:100,height:100,...this._doc!==null?{documentImpl:this._doc}:{}}),this._logger,this._molfilesEditor}_scheduleMolfilesEditorGc(){this._molfilesGcTimer!==null&&clearTimeout(this._molfilesGcTimer),typeof setTimeout==\"function\"&&(this._molfilesGcTimer=setTimeout(()=>{this._molfilesGcTimer=null,this._removeMolfilesEditorNow();},qt._MOLFILES_GC_MS));}_removeMolfilesEditorNow(){this._molfilesEditor=null,this._molfilesEditorHost!==null&&this._molfilesEditorHost.parentNode!==null&&this._molfilesEditorHost.parentNode.removeChild(this._molfilesEditorHost),this._molfilesEditorHost=null;}};qt._MOLFILES_GC_MS=1e3;var bt=qt;function Ii(){return globalThis.document??null}function za(i,e){try{let t=i.parse(e,{mode:\"lenient\",resolveMonomers:!1});for(let n of t.mol.atoms)if(n.symbol===\"*\")return !0;return !1}catch{return false}}function Ka(i){return i.length>=2&&i.charAt(0)===\"[\"&&i.charAt(i.length-1)===\"]\"?i.slice(1,i.length-1):i}function Pi(i,e){if(typeof i==\"string\")return {biotype:i,symbol:e??null};if(i!==null&&typeof i==\"object\"&&i.T===\"ATOM\"){let t=i;return {biotype:t.bio.type,symbol:e??t.elem}}return {biotype:b.AA,symbol:e??null}}function Hi(i){switch(i){case b.AA:return v.PEPTIDE;case b.SUGAR:case b.BASE:case b.LINKER:case b.NUCLEOTIDE:return v.RNA;case b.CHEM:return v.CHEM;case b.BLOB:return v.BLOB;default:return v.PEPTIDE}}function $i(i,e){let t={};for(let o of i.rgroups)t[o.label]=o.capGroupName;let n={id:e??i.symbol,m:i.molfile,rs:i.rgroups.length,type:i.polymerType,mt:i.monomerType,at:t};return i.name!==void 0&&(n.n=i.name),i.naturalAnalog!==void 0&&(n.na=i.naturalAnalog),i.smiles!==void 0&&(n.smiles=i.smiles),n}function Wa(i,e){if(e==null)throw new TypeError(\"registerWithDatagrok: options is required\");let t=new bt({service:e.service,...e.seqHelper!==void 0?{seqHelper:e.seqHelper}:{},...e.logger!==void 0?{logger:e.logger}:{},...e.documentImpl!==void 0?{documentImpl:e.documentImpl}:{}}),n=()=>{};if(typeof e.libProvider==\"function\"){let o=e.libProvider;Promise.resolve().then(()=>o()).then(r=>{if(r==null)return;let s=r.onChanged.subscribe(()=>{t.buildMonomersFuncsFromLib(r);});n=()=>{s!=null&&typeof s.unsubscribe==\"function\"&&s.unsubscribe();};}).catch(()=>{});}return {adapter:t,unsubscribe(){n();}}}\nexport{Ge as AtomPropsDialog,mt as AtomicStructurePane,Ve as BondPropsDialog,jt as BridgedMonomerLib,Fe as ChooseRDialog,Si as DEFAULT_TOOLBAR_BUTTONS,He as EventBus,Ue as FindReplaceDialog,it as HelmEditor,pt as HelmEditorApp,bt as HelmHelperAdapter,K as HelmNotSupportedError,D as HelmParseError,In as HelmService,b as HelmTypes,qe as HelmValidationError,$e as HistoryStack,B as HwError,ht as LegacyAppWrapper,ie as LegacyEditorWrapper,ft as LegacyInputWrapper,rn as MonomerLib,Yt as MonomerNotFoundError,at as MonomerPalette,Ui as MonomerTypes,ct as NotationPane,v as PolymerTypes,ut as PropertiesPane,N as Selection,dt as SequencePane,lt as Toolbar,It as bondsOnAtom,Vn as bridgeMonomerLib,oe as buildHelmMolView,An as darkTheme,Xr as defineTheme,U as freeRgroups,Us as hasFreeRgroup,I as lightTheme,Wa as registerWithDatagrok,ni as takenRgroups,he as totalRgroups};"],"names":["performance","now","Date","Set","PROCESS","process","AC","globalThis","AbortController","AS","AbortSignal","onabort","_onabort","reason","aborted","addEventListener","_","fn","this","push","constructor","warnACPolyfill","signal","abort","printACPolyfillWarning","env","LRU_CACHE_IGNORE_AC_WARNING","msg","type","code","emitWarning","console","error","Symbol","iterator","toStringTag","Error","Map","b","AA","SUGAR","BASE","LINKER","CHEM","BLOB","NUCLEOTIDE","v","PEPTIDE","RNA","G","X","_listeners","_completed","subscribe","e","add","delete","next","t","complete","clear","observerCount","size","C","i","line","text","background","ji","en","Ee","exec","n","parseInt","slice","Zt","toString","padStart","tn","nn","o","r","s","Math","max","a","min","l","c","d","Qt","jn","round","vt","u","Wn","pow","gt","h","qi","_t","g","Yi","Xn","A","T","U","Jn","R","Zn","P","p","Qn","N","D","E","Q","H","I","L","K","M","F","S","W","Y","V","eo","to","B","no","_e","name","fallback","errorTriple","palette","ge","Object","entries","Ce","meta","colors","light","dark","default","naturalAnalog","Z","polymerType","monomerType","PI","Tt","x","y","width","height","Number","isInteger","isFinite","is","vn","length","Ro","cos","sin","wn","abs","kn","xn","sqrt","Fo","Go","aa","strokeWidth","sugar","cornerRadius","base","linker","chem","blob","nucleotide","defaultStroke","defaultFill","selectionColor","highlightColor","errorColor","fontSize","fontFamily","bondLength","textColor","idColor","annotationColor","tagDotColor","hbondColor","nonCanonicalHbondColor","crossPolymerBondColor","colorTheme","softenCanvas","shapes","tt","Et","Be","biotype","symbol","Do","Io","Po","Ho","$o","ue","me","Jr","Qr","test","replace","ke","join","Cn","class","atoms","has","id","fill","stroke","Ln","WeakMap","J","bonds","isEmpty","freeze","ownerDocument","document","createElement","keys","setAttribute","String","appendChild","createTextNode","fe","get_mol","get_svg","te","body","children","getAttribute","style","display","xe","firstChild","removeChild","rdkitSvg","rdkitTestid","innerHTML","hint","j","left","top","$t","endsWith","Ot","_baseTransform","_viewport","scale","offset","_pinnedBbox","_tooltip","_bondTooltip","_rdkitSvgCache","_unsubs","_destroyed","host","_editor","_doc","documentImpl","_width","_height","querySelector","textContent","head","documentElement","ri","_svgRoot","_renderFresh","on","_hideTooltip","_hideBondTooltip","_refreshOverlays","_applyResize","viewport","_applyViewport","_showTooltip","atom","clientX","clientY","_showBondTooltip","bond","_paintBondPreview","start","cursor","candidate","_clearBondPreview","_paintSelectionRect","origin","_paintSelectionRectFromRect","rect","_clearSelectionRect","svgRoot","resize","redraw","destroy","parentNode","getService","_currentTheme","getMol","En","renderMol","theme","fixedModelBbox","si","_applyOverlaysToCurrent","getSelection","selectedAtomIds","highlightLayer","highlightedAtomIds","selectionLayer","ii","_editorHighlights","_spliceLayer","createElementNS","replaceChild","_currentHighlights","monomer","bio","positionInChain","chainId","_renderRdkitTooltipSvg","m","options","rdkitModule","smiles","get","_RDKIT_CACHE_LIMIT","value","set","li","r1","r2","a1","a2","kind","_paintSelectionRectAt","position","ne","_onClose","_primaryAction","_host","role","testId","title","stopPropagation","key","target","tagName","preventDefault","stopImmediatePropagation","close","root","anyOpen","_openStack","closeTopmost","open","includes","indexOf","splice","setPrimaryAction","isOpen","Pn","startsWith","ze","ae","xi","pa","rt","Hn","$n","zt","onValueSet","onPickModeChange","_slots","_favStar","_pickMode","_builderRdkitCache","_hooks","paletteHooks","_favHooks","favoriteHooks","element","tabindex","preview","toggleFavoriteTriplet","_hintEl","hidden","_buildSvg","_preview","_addBtn","_onAddClicked","monomerLib","onChanged","refresh","_repaintSlotColors","_libUnsub","_populateDefaults","_updatePreview","setField","_setLabelText","labelEl","_repaintSlot","field","startPickMode","_setSlotPressed","_setHintActive","beginBiotypeFilter","_exitPickMode","cancelPickMode","endBiotypeFilter","getPickMode","triggerAdd","Ke","_buildSlot","groupEl","_showSlotTooltip","_hideSlotTooltip","shapeEl","nextSibling","nodeName","ba","insertBefore","values","_theme","getMonomerSet","_a","ya","ga","some","_updateFavStar","isFavoriteTriplet","removeAttribute","placeRnaTriplet","split","filter","_rdkit","_builderRdkitSvgFor","_BUILDER_RDKIT_CACHE_LIMIT","_slotHint","_slotTitle","getBoundingClientRect","Ut","sort","localeCompare","le","Dn","Kt","Mi","Ti","Wt","We","favoritesChanged","_nextAddUnsub","_favorites","_favoriteTriplets","_pendingRnaSelection","_visibleTabs","_activeTab","_searchInput","_filter","_rnaBuilder","_activeBiotypeFilter","_pickResolver","_pickCanceller","_pickEscapeListener","_pickOutsideClickListener","_paletteRdkitCache","_opts","groupByNaturalAnalog","allowFavorites","_loadFavorites","_resolveInitialTab","initialTab","_render","_themeUnsub","_updatePrimedClasses","setFilter","trim","toLowerCase","_applyFilter","setActiveTab","_persistActiveTab","_applyActiveTabClasses","getActiveTab","getFavorites","_findMonomer","setFavorite","_saveFavorites","_hidePaletteTooltips","_emitFavoritesChanged","clearFavorites","getFavoriteTriplets","map","setFavoriteTriplet","findIndex","favorites","triplets","getRnaBuilder","hasActiveBiotypeFilter","getActiveBiotypeFilter","cancelBiotypeFilter","_teardownPickMode","_buildPaletteFilterHooks","defaultView","_isInsideOwnPalette","parentElement","_scrollActivePaneToTop","scrollTo","behavior","scrollTop","removeEventListener","_computeVisibleTabs","_buildFavoritesPane","_buildPolymerPane","getPolymerTypes","_resolveFavoriteMonomers","_groupByPolymerAndType","_renderGroup","_renderTripletGroup","pt","mt","list","Backbone","Branch","Terminal","Undefined","Array","from","_polymerLabel","_renderTripletChip","showStar","favorite","label","star","ki","_wireTripletChip","parts","ai","_tripletTooltipParts","classList","contains","_buildRnaDefaultChips","_pickSymbol","_DEFAULT_TRIPLET_BASES","_paletteRdkitSvg","done","_restoreRnaSelection","getMonomer","_monomersForPolymer","_groupRna","_groupByAnalog","getNextAddSymbol","_sortByColor","_biotype","_renderTile","Yn","idx","isGrey","getMonomerSymbolsByType","qn","ma","primed","f","draggable","wi","_wireTile","_PALETTE_RDKIT_CACHE_LIMIT","find","every","replaceMonomers","fire","message","severity","durationMs","setNextAddSymbol","dataTransfer","setData","JSON","stringify","effectAllowed","startPaletteDrag","querySelectorAll","_localStorage","localStorage","getItem","setItem","parse","_extractSymbols","_extractTriplets","isArray","symbols"],"sourceRoot":""}