@openremote/or-rules 1.8.0-snapshot.20250723203453 → 1.8.0-snapshot.20250725120000

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 (584) hide show
  1. package/README.md +30 -30
  2. package/custom-elements.json +13 -13
  3. package/dist/umd/index.bundle.js +4998 -4707
  4. package/dist/umd/index.bundle.js.map +1 -0
  5. package/lib/flow-viewer/components/confirmation-dialog.d.ts +2 -2
  6. package/lib/flow-viewer/components/confirmation-dialog.js +61 -24
  7. package/lib/flow-viewer/components/connection-container.d.ts +1 -1
  8. package/lib/flow-viewer/components/connection-container.js +35 -1
  9. package/lib/flow-viewer/components/connection-line.d.ts +1 -1
  10. package/lib/flow-viewer/components/connection-line.js +117 -28
  11. package/lib/flow-viewer/components/context-menu.d.ts +2 -2
  12. package/lib/flow-viewer/components/context-menu.js +140 -45
  13. package/lib/flow-viewer/components/editor-workspace.d.ts +2 -2
  14. package/lib/flow-viewer/components/editor-workspace.js +282 -20
  15. package/lib/flow-viewer/components/flow-editor.d.ts +2 -2
  16. package/lib/flow-viewer/components/flow-editor.js +160 -47
  17. package/lib/flow-viewer/components/flow-node-socket.d.ts +2 -2
  18. package/lib/flow-viewer/components/flow-node-socket.js +146 -31
  19. package/lib/flow-viewer/components/flow-node.d.ts +1 -1
  20. package/lib/flow-viewer/components/flow-node.js +192 -29
  21. package/lib/flow-viewer/components/internal-picker.d.ts +1 -1
  22. package/lib/flow-viewer/components/internal-picker.js +271 -54
  23. package/lib/flow-viewer/components/node-menu-item.d.ts +2 -2
  24. package/lib/flow-viewer/components/node-menu-item.js +132 -32
  25. package/lib/flow-viewer/components/node-panel.d.ts +2 -2
  26. package/lib/flow-viewer/components/node-panel.js +104 -60
  27. package/lib/flow-viewer/components/notification-dialog.d.ts +2 -2
  28. package/lib/flow-viewer/components/notification-dialog.js +55 -23
  29. package/lib/flow-viewer/components/popup-modal.d.ts +1 -1
  30. package/lib/flow-viewer/components/popup-modal.js +113 -54
  31. package/lib/flow-viewer/components/rule-browser.d.ts +2 -2
  32. package/lib/flow-viewer/components/rule-browser.js +119 -30
  33. package/lib/flow-viewer/components/selectable-element.d.ts +1 -1
  34. package/lib/flow-viewer/components/selectable-element.js +71 -1
  35. package/lib/flow-viewer/components/selection-box.d.ts +1 -1
  36. package/lib/flow-viewer/components/selection-box.js +119 -15
  37. package/lib/flow-viewer/components/top-bar.d.ts +2 -2
  38. package/lib/flow-viewer/components/top-bar.js +116 -49
  39. package/lib/flow-viewer/components/workspace-contextmenu-options.js +128 -5
  40. package/lib/flow-viewer/components/writable-dropdown.d.ts +1 -1
  41. package/lib/flow-viewer/components/writable-dropdown.js +51 -5
  42. package/lib/flow-viewer/converters/node-converter.js +10 -1
  43. package/lib/flow-viewer/flow-viewer.js +19 -1
  44. package/lib/flow-viewer/models/camera.js +2 -1
  45. package/lib/flow-viewer/models/context-menu-button.js +2 -1
  46. package/lib/flow-viewer/models/light-node-collection.js +2 -1
  47. package/lib/flow-viewer/models/status.js +8 -1
  48. package/lib/flow-viewer/node-structure/copy.machine.js +34 -1
  49. package/lib/flow-viewer/node-structure/identity.assigner.js +10 -1
  50. package/lib/flow-viewer/node-structure/identity.dom.link.js +4 -1
  51. package/lib/flow-viewer/node-structure/index.js +5 -1
  52. package/lib/flow-viewer/node-structure/socket.type.matcher.js +50 -1
  53. package/lib/flow-viewer/node-structure/utils.js +109 -1
  54. package/lib/flow-viewer/services/copy-paste-manager.js +59 -1
  55. package/lib/flow-viewer/services/exporter.js +67 -1
  56. package/lib/flow-viewer/services/input.d.ts +0 -1
  57. package/lib/flow-viewer/services/input.js +80 -1
  58. package/lib/flow-viewer/services/integration.d.ts +0 -1
  59. package/lib/flow-viewer/services/integration.js +27 -1
  60. package/lib/flow-viewer/services/modal.js +29 -8
  61. package/lib/flow-viewer/services/project.d.ts +0 -1
  62. package/lib/flow-viewer/services/project.js +222 -1
  63. package/lib/flow-viewer/services/project.js.map +1 -1
  64. package/lib/flow-viewer/services/shortcuts.js +63 -1
  65. package/lib/flow-viewer/styles/editor-workspace-style.js +55 -53
  66. package/lib/flow-viewer/styles/flow-node-style.js +95 -93
  67. package/lib/flow-viewer/styles/picker-styles.js +31 -29
  68. package/lib/flow-viewer/utils.js +49 -1
  69. package/lib/index.d.ts +2 -2
  70. package/lib/index.js +953 -56
  71. package/lib/index.js.map +1 -1
  72. package/lib/json-viewer/forms/or-rule-form-alarm.d.ts +1 -1
  73. package/lib/json-viewer/forms/or-rule-form-alarm.js +91 -18
  74. package/lib/json-viewer/forms/or-rule-form-email-message.d.ts +2 -2
  75. package/lib/json-viewer/forms/or-rule-form-email-message.js +51 -12
  76. package/lib/json-viewer/forms/or-rule-form-localized.d.ts +2 -2
  77. package/lib/json-viewer/forms/or-rule-form-localized.js +269 -43
  78. package/lib/json-viewer/forms/or-rule-form-localized.js.map +1 -1
  79. package/lib/json-viewer/forms/or-rule-form-push-notification.d.ts +1 -1
  80. package/lib/json-viewer/forms/or-rule-form-push-notification.js +152 -63
  81. package/lib/json-viewer/forms/or-rule-form-push-notification.js.map +1 -1
  82. package/lib/json-viewer/forms/or-rule-form-webhook.js +296 -101
  83. package/lib/json-viewer/modals/or-rule-alarm-modal.d.ts +2 -2
  84. package/lib/json-viewer/modals/or-rule-alarm-modal.js +173 -17
  85. package/lib/json-viewer/modals/or-rule-notification-modal.d.ts +2 -2
  86. package/lib/json-viewer/modals/or-rule-notification-modal.js +196 -11
  87. package/lib/json-viewer/modals/or-rule-radial-modal.d.ts +2 -2
  88. package/lib/json-viewer/modals/or-rule-radial-modal.js +142 -17
  89. package/lib/json-viewer/modals/or-rule-webhook-modal.d.ts +1 -1
  90. package/lib/json-viewer/modals/or-rule-webhook-modal.js +78 -8
  91. package/lib/json-viewer/or-rule-action-alarm.js +97 -5
  92. package/lib/json-viewer/or-rule-action-attribute.d.ts +1 -1
  93. package/lib/json-viewer/or-rule-action-attribute.js +235 -33
  94. package/lib/json-viewer/or-rule-action-notification.js +465 -56
  95. package/lib/json-viewer/or-rule-action-webhook.d.ts +1 -1
  96. package/lib/json-viewer/or-rule-action-webhook.js +49 -18
  97. package/lib/json-viewer/or-rule-asset-query.d.ts +5 -5
  98. package/lib/json-viewer/or-rule-asset-query.js +849 -126
  99. package/lib/json-viewer/or-rule-condition.js +216 -29
  100. package/lib/json-viewer/or-rule-json-viewer.d.ts +1 -1
  101. package/lib/json-viewer/or-rule-json-viewer.js +393 -34
  102. package/lib/json-viewer/or-rule-then-otherwise.js +609 -113
  103. package/lib/json-viewer/or-rule-trigger-query.d.ts +1 -1
  104. package/lib/json-viewer/or-rule-trigger-query.js +227 -57
  105. package/lib/json-viewer/or-rule-when.js +343 -126
  106. package/lib/or-rule-group-viewer.d.ts +2 -2
  107. package/lib/or-rule-group-viewer.js +106 -12
  108. package/lib/or-rule-text-viewer.d.ts +0 -2
  109. package/lib/or-rule-text-viewer.js +133 -22
  110. package/lib/or-rule-text-viewer.js.map +1 -1
  111. package/lib/or-rule-tree.js +601 -57
  112. package/lib/or-rule-tree.js.map +1 -1
  113. package/lib/or-rule-validity.d.ts +1 -1
  114. package/lib/or-rule-validity.js +373 -62
  115. package/lib/or-rule-viewer.d.ts +1 -1
  116. package/lib/or-rule-viewer.js +361 -81
  117. package/lib/style.js +89 -64
  118. package/package.json +13 -13
  119. package/dist/umd/003671ee2a876e7614cd94390e2255b3.js +0 -1
  120. package/dist/umd/0078b630bed2938ce03f618c2bcd1363.js +0 -1
  121. package/dist/umd/0144de97a3c256f81447e7e7135780e5.js +0 -1
  122. package/dist/umd/019e34e85139cfc611bf23efa096c980.js +0 -1
  123. package/dist/umd/02174460fe8ff6a6bc19db86543b9600.js +0 -1
  124. package/dist/umd/029ed9161a8d24a9c2ba97124020989d.js +0 -1
  125. package/dist/umd/03452373324e7ceaf58e3830eafd1a28.js +0 -1
  126. package/dist/umd/03980cb12dacd26148c22bb61fce440f.js +0 -1
  127. package/dist/umd/03a5f5b2b97a8fc289399d92fba810d0.js +0 -1
  128. package/dist/umd/03aae8272914723a7bf85b984385032c.js +0 -1
  129. package/dist/umd/03ab996935e5c1a84ac09966ede74fb8.js +0 -1
  130. package/dist/umd/0416c21cfe088739209926632a360e3b.js +0 -1
  131. package/dist/umd/069a0d6b093e73e820f6a60a91fa614b.js +0 -1
  132. package/dist/umd/06d958315fc6cdbb28576b03e43203aa.js +0 -1
  133. package/dist/umd/07397bd479cbc34bc04576b4f15bdf18.js +0 -1
  134. package/dist/umd/07567125b93045706d81f17f7d04e262.js +0 -1
  135. package/dist/umd/078dd0bd08c93b1512e3d1b777591b21.js +0 -1
  136. package/dist/umd/0972f21af3e75388ef55435c0b3b831d.js +0 -1
  137. package/dist/umd/0973bb38b2e3efd2a879fd8e81d50fce.js +0 -1
  138. package/dist/umd/0a1d9862d917663419ac2dd2e8193267.js +0 -1
  139. package/dist/umd/0b06cbc7edf78b6f2810187262e7630b.js +0 -1
  140. package/dist/umd/0bd45b2d490c48c31619072a4fb0eaea.js +0 -1
  141. package/dist/umd/0cd2349b7f4b6f7013e195c8145d2917.js +0 -1
  142. package/dist/umd/0dd9fc97c3dee2275f41cd20ffaea059.js +0 -1
  143. package/dist/umd/0e67325b9a04863301e36c0c37947069.js +0 -1
  144. package/dist/umd/0f147528a6f36ca40c8b3ec796429f58.js +0 -1
  145. package/dist/umd/0f2d1162158745e1093693a3a999932a.js +0 -1
  146. package/dist/umd/0fa30731c46fe8b6a54f9752ad0ed7e0.js +0 -1
  147. package/dist/umd/0fd64c8920c10008be86572dd6830dc1.js +0 -1
  148. package/dist/umd/10132993df2cf9c9423b53a8a44379ab.js +0 -1
  149. package/dist/umd/1034e3807d1bcf55cb564491950237ab.js +0 -1
  150. package/dist/umd/105b17c6442efb97c18ca2aef3976b06.js +0 -1
  151. package/dist/umd/10c464f3f882bfeeefbc0934c2ee9fbe.js +0 -1
  152. package/dist/umd/111d9fdb9864abba36298d1a0807fe6d.js +0 -1
  153. package/dist/umd/1195816afa4a5e8183857be16a04ae6f.js +0 -1
  154. package/dist/umd/119f6c45ea400e3c27e1ce172e4c881d.js +0 -1
  155. package/dist/umd/11e3a2a8fb5bcb9d19298a80cafd3f5a.js +0 -1
  156. package/dist/umd/130340e2c62b9e858f186dab5f491e55.js +0 -1
  157. package/dist/umd/135747176621bcc94e9edd0323a81d3c.js +0 -1
  158. package/dist/umd/1383530217ac0068c844902d24e18e08.js +0 -1
  159. package/dist/umd/13eda3507db9cbfb400f46b9b3ff6553.js +0 -1
  160. package/dist/umd/1495a3d68b15b8622c53f6688b64809f.js +0 -1
  161. package/dist/umd/1533058f0ce13acdaa8d5bdc7d147bef.js +0 -1
  162. package/dist/umd/15f3800d33b854ba476c9daf1b9e0326.js +0 -1
  163. package/dist/umd/16c2e1b50af4ba05edaa03c8c9e9d18c.js +0 -1
  164. package/dist/umd/170487867de05784a96608617bdd544d.js +0 -1
  165. package/dist/umd/1736cea368ae85240f34289307fdf67f.js +0 -1
  166. package/dist/umd/17632e1e19e438f431784dfd77e01773.js +0 -1
  167. package/dist/umd/17dc98279d24649d3ca77cbce8c44e83.js +0 -1
  168. package/dist/umd/1875ecdf54e78b5f07ff1bd944cf794b.js +0 -1
  169. package/dist/umd/191feb6103c36b202bc01ba262916cdf.js +0 -1
  170. package/dist/umd/1b15b9f88acaf59b96e59c6b5f32da12.js +0 -1
  171. package/dist/umd/1c24a68cb472146022d0806ea2505cfb.js +0 -1
  172. package/dist/umd/1c57b3481f295105588972ffa1305521.js +0 -1
  173. package/dist/umd/1cc6fc3772824e2f87f10a9c3fad2dae.js +0 -1
  174. package/dist/umd/1ce14f2cad9f3c122cb5ccfcd485ffb4.js +0 -1
  175. package/dist/umd/1d3796180f854b5d8ab435ab0a1c2c11.js +0 -1
  176. package/dist/umd/1dddd8903e00ce9149ded23fb87f6f34.js +0 -1
  177. package/dist/umd/1e5fe0a75db78dcabbd4f27c2b084e4b.js +0 -1
  178. package/dist/umd/1ed6368e8e20628ad5229329eec28baa.js +0 -1
  179. package/dist/umd/1ff1389501159e4846a5133e3b8992d8.js +0 -1
  180. package/dist/umd/210aec2722e6416a0349a987260e14a3.js +0 -1
  181. package/dist/umd/211511e7b374f57ad31acaf49dbdccb1.js +0 -1
  182. package/dist/umd/2272c6632c52c3e402ab27b8045ab8f1.js +0 -1
  183. package/dist/umd/228ca80abf1ae030cbfe7faaec61913f.js +0 -1
  184. package/dist/umd/2302902e10c4afab56e1b864c96070cb.js +0 -1
  185. package/dist/umd/23602ad4c88f0f19e7a0a12454ebf556.js +0 -1
  186. package/dist/umd/23bb1a9f279e7a732bfd405350aab114.js +0 -1
  187. package/dist/umd/24a3ff38afde257888d755ece9bfd704.js +0 -1
  188. package/dist/umd/24f97ddd76026815674affbc50ad6169.js +0 -1
  189. package/dist/umd/25718a469574ade47e23567d8c543169.js +0 -1
  190. package/dist/umd/25eda4bb98e40a82cfd5b4bf9fbc06ec.js +0 -1
  191. package/dist/umd/262f489eb59166e1215642b60446d123.js +0 -1
  192. package/dist/umd/269732f4c5f6e82ea3246548a9631b47.js +0 -1
  193. package/dist/umd/275d8f4e0550edce2f3b85b3eaa94e54.js +0 -1
  194. package/dist/umd/27730a0bdc6f430cc85049a46a73a029.js +0 -1
  195. package/dist/umd/27846e85433e54a3ec0ab34d62233dc5.js +0 -1
  196. package/dist/umd/283970c76db99e2d0d90f0e7c45494f9.js +0 -1
  197. package/dist/umd/28785bea435918d49b290d27bf660baa.js +0 -1
  198. package/dist/umd/2a8394955e047270a2a965ec67843989.js +0 -1
  199. package/dist/umd/2aa392a501973ebfcea38239a45ed8e7.js +0 -1
  200. package/dist/umd/2ad349208b3a727abb3c9f943865a27c.js +0 -1
  201. package/dist/umd/2b1b8f8b9e8f1e423a69afd121fd7da9.js +0 -1
  202. package/dist/umd/2b5729e073775b8fb827fc8e4725e48a.js +0 -1
  203. package/dist/umd/2c3ad366cda02f17520d3369cae64c2c.js +0 -1
  204. package/dist/umd/2d2a75e3d01a74b93d07db04df8abe5e.js +0 -1
  205. package/dist/umd/2dd82c65030101b60dffccedd8741c6e.js +0 -1
  206. package/dist/umd/2e841e8b77c2a2c00fd71940632bc1e1.js +0 -1
  207. package/dist/umd/2f055ac4066041b9008dd6aebf9df34b.js +0 -1
  208. package/dist/umd/2f25a4dc442bc9aebc58cae30c50c3e2.js +0 -1
  209. package/dist/umd/2f55cddc8eb85b63ee5b4ce0e5488230.js +0 -1
  210. package/dist/umd/2fc0239242a898632ca8aa451cb930c2.js +0 -1
  211. package/dist/umd/2fe2904fc024afaf81732563cb83e547.js +0 -1
  212. package/dist/umd/318dcae1cdcd4733986a93e7a5fab7b8.js +0 -1
  213. package/dist/umd/31c610efb1d25afc90853b52ba4cb089.js +0 -1
  214. package/dist/umd/328cbf598e9711b0a87c19437b02f80d.js +0 -1
  215. package/dist/umd/33b4e371d4983ab56f4db08627119f0b.js +0 -1
  216. package/dist/umd/349237ad9565dc823ce7bcb7527ba7ee.js +0 -1
  217. package/dist/umd/34b8d1c8a81822685f809c49097b81fc.js +0 -1
  218. package/dist/umd/34f99cce131bd7aa65e7a924e2456006.js +0 -1
  219. package/dist/umd/3567d1ea443427e944a6f189a0898819.js +0 -1
  220. package/dist/umd/363d3bac8dcd9a83332c3758185ce080.js +0 -1
  221. package/dist/umd/3645af9e7e929d3abe3255c739e20e84.js +0 -1
  222. package/dist/umd/367def81f25c0a08527f9a4e86e70c56.js +0 -1
  223. package/dist/umd/37172facd8a534a38f378ca2a9c7c11b.js +0 -1
  224. package/dist/umd/37ee3b5201ae2e2dc5dc8b1b20ad900e.js +0 -1
  225. package/dist/umd/3834f2acef5a5debb2a21ad919272307.js +0 -1
  226. package/dist/umd/38b1d18836e38ee7b4deaeba0c35f7b8.js +0 -1
  227. package/dist/umd/39fea85ed7dd99d7c6c9e59b7040523f.js +0 -1
  228. package/dist/umd/3a1227a65a1fc39ca476c295d1a260a4.js +0 -1
  229. package/dist/umd/3a6ca6958d003ae67bb7fefc8713ee93.js +0 -1
  230. package/dist/umd/3ac8c7749734990e2d9f81eeca219886.js +0 -1
  231. package/dist/umd/3b02cca9e95276a74f3ed2bbc7a64ce6.js +0 -1
  232. package/dist/umd/3b190e5159c72fb7e27271956772bcba.js +0 -1
  233. package/dist/umd/3b544bb2c5a4e7b225a4b50235a0fd6d.js +0 -1
  234. package/dist/umd/3b6e7dc98c47eeafd851ca5072db4be6.js +0 -1
  235. package/dist/umd/3bf96f8eb1859e2724a4b769af3b5f1e.js +0 -1
  236. package/dist/umd/3c5b59a666c5d39d9ba9cc054d36a410.js +0 -1
  237. package/dist/umd/3ea020c57c2bbf457a8497df313b2e5c.js +0 -1
  238. package/dist/umd/3eefbe1c009cfd730b2ca6f834367c45.js +0 -1
  239. package/dist/umd/3f896944a97f002f2146e028ff2eac63.js +0 -1
  240. package/dist/umd/414cd2c842fa42bf71e155f870619e00.js +0 -1
  241. package/dist/umd/42c556183279bbdaaed3a8a9f9108f58.js +0 -1
  242. package/dist/umd/42e0ea6351d45d342caab13cb12f9ea4.js +0 -1
  243. package/dist/umd/43139bfbcbce9de597b4985dc1e6a03b.js +0 -1
  244. package/dist/umd/432a5982ba3ddf958381d780e1e9a8e2.js +0 -1
  245. package/dist/umd/432aff60ba31a74d2120031fdc894775.js +0 -1
  246. package/dist/umd/4430c55f023b72fb5e389cee9351b38c.js +0 -1
  247. package/dist/umd/44599d9b6202ebebfcdd073edf3562e3.js +0 -1
  248. package/dist/umd/44efcea2f84e80cc4092a89796afe886.js +0 -1
  249. package/dist/umd/472ba8f81bf8cac86027cb1be4e3b9cd.js +0 -1
  250. package/dist/umd/479ec45a8edfe482fae4298d1e9862d2.js +0 -1
  251. package/dist/umd/47e4cb297b2c3841ef86ce04a7f5584e.js +0 -1
  252. package/dist/umd/47e5776dff3b80ed69ab5947dba33c76.js +0 -1
  253. package/dist/umd/48e9351c5623d4da657ce7d5d0267ea6.js +0 -1
  254. package/dist/umd/492e618a031cfde9c83d699c430de2ac.js +0 -1
  255. package/dist/umd/49582665262ff6179b9f3a98adf7ed5c.js +0 -1
  256. package/dist/umd/4b692785a8a6340a89e6067274a7583c.js +0 -1
  257. package/dist/umd/4bee3a46b8378a7b4ef84492f08abd22.js +0 -1
  258. package/dist/umd/4bf3bc1fbdd26ac698fef1bdf26e3ff4.js +0 -1
  259. package/dist/umd/4bf6763c5956e3bccbf0373068810ded.js +0 -1
  260. package/dist/umd/4c1bdecbedd36a5765de184ac056822a.js +0 -1
  261. package/dist/umd/4d0849c6c9a868c09130600ac68319b3.js +0 -1
  262. package/dist/umd/4d0ebf4c528cee9b0cdd3e076e06570b.js +0 -1
  263. package/dist/umd/4d156ee0485ab4b40b090a3cd7b995a9.js +0 -1
  264. package/dist/umd/4d6d9020e7e5c8d8dee7a5e374355f05.js +0 -1
  265. package/dist/umd/4d8cb7033879cb7fcc7a43798e2bde22.js +0 -1
  266. package/dist/umd/4e389cce6fb8f78845fab249bce43c0b.js +0 -1
  267. package/dist/umd/4ef80ee74467e0297eec3cc03092da01.js +0 -1
  268. package/dist/umd/4f683c6881e9f8740f5516a85b9eb9da.js +0 -1
  269. package/dist/umd/5106411f7468a5ee5b1ee77aed12c0c7.js +0 -1
  270. package/dist/umd/51f903c5ce5284a63196247cffb5ca40.js +0 -1
  271. package/dist/umd/52fd09d1713345d9ee64dc7daea9fd6f.js +0 -1
  272. package/dist/umd/5348f3cfbe5a63954e7d984f197bbddb.js +0 -1
  273. package/dist/umd/5352ecd8e5f1a2637b48e18cc406edb1.js +0 -1
  274. package/dist/umd/5398e3b596fa15df4d84b2aa0464e5c4.js +0 -1
  275. package/dist/umd/53e3600928916423671f3388e2d67844.js +0 -1
  276. package/dist/umd/54560f13b36626237959e93b7771a484.js +0 -1
  277. package/dist/umd/54a10f3bddad1e6da452fee7124fe846.js +0 -1
  278. package/dist/umd/57e14488b13e50ebdb5fdfc7880da683.js +0 -1
  279. package/dist/umd/57f4109bd1f06be4dc2bcb8ff7eaf1e5.js +0 -1
  280. package/dist/umd/582e24f5ba929e358fadfc7be4c18025.js +0 -1
  281. package/dist/umd/58598705e7012f4ca1eb1dd21d3c59a5.js +0 -1
  282. package/dist/umd/5861dfe4f2c7823623e82d0619c5bf06.js +0 -1
  283. package/dist/umd/58aab872dbdb5e1607076e1935130e03.js +0 -1
  284. package/dist/umd/58c35e5c73bbc1664bbd67c570342aa0.js +0 -1
  285. package/dist/umd/58e7f91772635a5c59bacc975735da6c.js +0 -1
  286. package/dist/umd/59cc05504a1c823b6d4796bf6b430822.js +0 -1
  287. package/dist/umd/5a496ae20cc576bef1d35972548207cf.js +0 -1
  288. package/dist/umd/5a741aab715866cb4d9a55e89dfc8420.js +0 -1
  289. package/dist/umd/5b6a626249d0bc43e412fffa6a9ee177.js +0 -1
  290. package/dist/umd/5cab33610b8d9c1aee4db4672811cb5f.js +0 -1
  291. package/dist/umd/5cd4e1282f4409600b942819b7aa4f21.js +0 -1
  292. package/dist/umd/5ce650c06c385f9d15621e54c60457c0.js +0 -1
  293. package/dist/umd/5cebfc2c3495b6294dcb2a99e5174872.js +0 -1
  294. package/dist/umd/5d312b184c1f4565f51247d3c6dbba90.js +0 -1
  295. package/dist/umd/5d3314103b00c8ea165c6f9f6757f794.js +0 -1
  296. package/dist/umd/5df362c9904925cdf574d9506e4be76d.js +0 -1
  297. package/dist/umd/5e55b301888460bd06c8e26d1011e01a.js +0 -1
  298. package/dist/umd/5e8a4f4320a07ae4bb1d8a5cd621d955.js +0 -1
  299. package/dist/umd/5f3ce6efab3c679ec1ad25ab0b3f6b2f.js +0 -1
  300. package/dist/umd/5f5a93ab1249b7cbdb13d9466febd3a0.js +0 -1
  301. package/dist/umd/5fedbf948ed123687f77167fac1faf8b.js +0 -1
  302. package/dist/umd/60190285b6c2243e14184b9e57d48dbb.js +0 -1
  303. package/dist/umd/603e2644074e6512faf427d511d47fe4.js +0 -1
  304. package/dist/umd/60ede8d7ffdf4c05f2ce51b6d8d2be68.js +0 -1
  305. package/dist/umd/6130486ae80b103700a2e1eec0bc5cea.js +0 -1
  306. package/dist/umd/622e27eec5f26148f51ccc30315a3deb.js +0 -1
  307. package/dist/umd/6250c7594cd66ca91184b5beca293e06.js +0 -1
  308. package/dist/umd/62a96977e725e8bc809dc80afe0fedf1.js +0 -1
  309. package/dist/umd/63596b4896732fb322ab0496b4be1e74.js +0 -1
  310. package/dist/umd/6490772da5aecc6cb9e4c625abc74a96.js +0 -1
  311. package/dist/umd/64a5f4d62507d032038dcd76d15188e1.js +0 -1
  312. package/dist/umd/64d6924350bd7706850cdc0dcc76ccf6.js +0 -1
  313. package/dist/umd/65e7cf62ca9df32c18b630f31025a401.js +0 -1
  314. package/dist/umd/663ffb67b9683a2126410325d1a5a152.js +0 -1
  315. package/dist/umd/669c462287be8fa855e0ac003c145b55.js +0 -1
  316. package/dist/umd/678f5201c1917429f334b88078ca4174.js +0 -1
  317. package/dist/umd/6a1c347ab79a93f3ac01b08c8ccfc827.js +0 -1
  318. package/dist/umd/6a851f05f1f4a974e02fe23eac2bad4e.js +0 -1
  319. package/dist/umd/6b4b87a54f673cfbb82be45329441bef.js +0 -1
  320. package/dist/umd/6bed1b724e74e6bc80688f42bc824d70.js +0 -1
  321. package/dist/umd/6c0a75dc5671c3f237a79f6e45b9891c.js +0 -1
  322. package/dist/umd/6c67587c2093ac3a19da9f2196e040b7.js +0 -1
  323. package/dist/umd/6c6d192b6860b4508a14c2d04769a35e.js +0 -1
  324. package/dist/umd/6d0c0aa17d36cb16bafc76d7376b97f7.js +0 -1
  325. package/dist/umd/6d38cef4a006e6cfe54a6117aba7b600.js +0 -1
  326. package/dist/umd/6e40b726d91e9138d9eaef6fd012c740.js +0 -1
  327. package/dist/umd/6faa9e5f2a0122d2333fa450337a09b0.js +0 -1
  328. package/dist/umd/70074e0c785c9a808dea76c7c7d17af3.js +0 -1
  329. package/dist/umd/70286c33cab463fd576766adecd2d5d9.js +0 -1
  330. package/dist/umd/70289d3b9b2b851df3286e20e40410a6.js +0 -1
  331. package/dist/umd/7080d2a1db1608264a6d9d9fbaf2cce8.js +0 -1
  332. package/dist/umd/70efbabef77fb217f904f41dbf7fe8bf.js +0 -1
  333. package/dist/umd/714763ddd9bd466c95df7b042900bb87.js +0 -1
  334. package/dist/umd/7222998c10fabd9c824cf8cf540b3b74.js +0 -1
  335. package/dist/umd/724a16861717b5b4f786d24b56b62614.js +0 -1
  336. package/dist/umd/7259bceba25ac1476fc775122a63d249.js +0 -1
  337. package/dist/umd/725da29f1643c2263a437c08a1454aea.js +0 -1
  338. package/dist/umd/742afd6665dee8dafd43661093bdda9d.js +0 -1
  339. package/dist/umd/755114145e5b97e5571a160a39e716db.js +0 -1
  340. package/dist/umd/757ef1b870d065a77ce3c182a03d93ad.js +0 -1
  341. package/dist/umd/7648d83718f74149cb2db078b19fb7db.js +0 -1
  342. package/dist/umd/764b59bdd3a89e14f88c9d63020551a1.js +0 -1
  343. package/dist/umd/77aaca51c1c32acaf32656d45f4dc017.js +0 -1
  344. package/dist/umd/78632dc7e1875ec8c39416f645e53733.js +0 -1
  345. package/dist/umd/79241f85b016a7332f85bb66667459c2.js +0 -1
  346. package/dist/umd/79455ab9a6cd507f5314141cc965093a.js +0 -1
  347. package/dist/umd/7aa17a5a81c83c0f455941b3b286d5da.js +0 -1
  348. package/dist/umd/7b839a5c1f6d89538928c8a29003bbda.js +0 -1
  349. package/dist/umd/7bc18fc7a7d1323c178aa1846d79fb3c.js +0 -1
  350. package/dist/umd/7d64980faff5b041a461fd0ba3e2f3f5.js +0 -1
  351. package/dist/umd/7e4099fc2d04c7c1cf96892b962ba4ec.js +0 -1
  352. package/dist/umd/7ec97a8161bf26e434d3891f64adb15b.js +0 -1
  353. package/dist/umd/7f45be8b3fab8d742afc26fc48a23d2e.js +0 -1
  354. package/dist/umd/7f79d4bde67c8013b187889b63e25bce.js +0 -1
  355. package/dist/umd/7f9a9efc9ab681fcbf6400e2adb368a9.js +0 -1
  356. package/dist/umd/805cb6232d7a9fa46025d48a43622ecf.js +0 -1
  357. package/dist/umd/80ddbf4f0fdde4ddba57130e61043017.js +0 -1
  358. package/dist/umd/81318a3530fb35d5178eb7a4a13a606f.js +0 -1
  359. package/dist/umd/817edb0c6f9d66f9c0027762edb1d797.js +0 -1
  360. package/dist/umd/827c1cbf746eacfc23ed2037e4d6359d.js +0 -1
  361. package/dist/umd/83387cb17a7680f59240e7b399e3ac2b.js +0 -1
  362. package/dist/umd/839e3594798c1942d3c92f9acfaa5f0b.js +0 -1
  363. package/dist/umd/83bd353f98aa901411c82b8af58d1296.js +0 -1
  364. package/dist/umd/84270e22d4439d15b0d8f392d1338d8e.js +0 -1
  365. package/dist/umd/843c762c24f7fac628d8c62519a7b308.js +0 -1
  366. package/dist/umd/84abf03cc94d264bb38020b4ac5f76e1.js +0 -1
  367. package/dist/umd/84effdea6b72577c780f6621246d2e82.js +0 -1
  368. package/dist/umd/852f0ecd7b17e3bfd700a821ff438f7e.js +0 -1
  369. package/dist/umd/8646c11c7b2b46a2b2becab0d9e549c7.js +0 -1
  370. package/dist/umd/875ae58e8015a6d08dbc9d0c04e24638.js +0 -1
  371. package/dist/umd/879d6bc1ca1dde95a9a98dc7a2ab0d06.js +0 -1
  372. package/dist/umd/87bce6f50196688852142c679227b1b9.js +0 -1
  373. package/dist/umd/880ae94877022f7fb0458ced0825eb4c.js +0 -1
  374. package/dist/umd/88730abfeb4a23e692ac7933882f12eb.js +0 -1
  375. package/dist/umd/88da0e09d486e197aaca5bc3d6350998.js +0 -1
  376. package/dist/umd/88e2feda80ac8cfb28f1dc0ec833b40d.js +0 -1
  377. package/dist/umd/894052ca1f8f35cc1cf7cfb29ef75027.js +0 -1
  378. package/dist/umd/894edcaf39c3c95818e3949d737ed459.js +0 -1
  379. package/dist/umd/8a31266178067a316bb2503147cdb5cb.js +0 -1
  380. package/dist/umd/8a5127228870aafabfff6111d29313d6.js +0 -1
  381. package/dist/umd/8b8336037f074d9dcbd20eab535b803f.js +0 -1
  382. package/dist/umd/8c7616f0adba6a5ac0d2f06ba4ebd696.js +0 -1
  383. package/dist/umd/8d9bb1799d9b98db107e84f10132e17f.js +0 -1
  384. package/dist/umd/8ed58ed9c7e1cb1ae1f2830d29011ffb.js +0 -1
  385. package/dist/umd/8ed5aba33ead1f94e97d5c35a5e93434.js +0 -1
  386. package/dist/umd/8eede17ae9e4d25c3c17b8a8a7fc3c3d.js +0 -1
  387. package/dist/umd/8f9ce72eeabbf31f2d51f4bcfc66d3b0.js +0 -1
  388. package/dist/umd/90812d89181b698975cbb081adcbbcb0.js +0 -1
  389. package/dist/umd/90f3dc3c18d447104b63c156cb7fddb5.js +0 -1
  390. package/dist/umd/91beb08737a1bbf071f351fb0acdbf3c.js +0 -1
  391. package/dist/umd/92f4aab5c66f6269c7054c8fbcb3de13.js +0 -1
  392. package/dist/umd/950a205e91da7e78226dd785fd6d34db.js +0 -1
  393. package/dist/umd/962969a46fefcace3305abd4d6e14a2e.js +0 -1
  394. package/dist/umd/9696a4229fb787eeb25b26f1274b75ee.js +0 -1
  395. package/dist/umd/96b8d8b5efd11741639659c63a485c27.js +0 -1
  396. package/dist/umd/972ea4b6ab9d3baeab6d00057cd5f9d3.js +0 -1
  397. package/dist/umd/9807cf1e443a7440371904b6525f37eb.js +0 -1
  398. package/dist/umd/981bd23edacd811f9e4a583d89b544ee.js +0 -1
  399. package/dist/umd/9827973b533de05b338533a0211d97d9.js +0 -1
  400. package/dist/umd/983fccb9f00748c487e889f6c83aa367.js +0 -1
  401. package/dist/umd/9920e03a65566d728a73c7bf18bc5741.js +0 -1
  402. package/dist/umd/99add2656ccb006ff11de385c4219f41.js +0 -1
  403. package/dist/umd/9b1fd9cf4206cc32e84150c49707d811.js +0 -1
  404. package/dist/umd/9b4733fc7a2fe9aedb0fa242bd49e9f0.js +0 -1
  405. package/dist/umd/9b4de1346c73ba258736f1a3f00fdc14.js +0 -1
  406. package/dist/umd/9b5a6ec07bb0a2daade10189696fc399.js +0 -1
  407. package/dist/umd/9b80d1a12acd18c90e41ca92073122a7.js +0 -1
  408. package/dist/umd/9b9578869f378f8e2afbf85a76c0ac72.js +0 -1
  409. package/dist/umd/9ebb9ac2c9c875649c72722bc585d445.js +0 -1
  410. package/dist/umd/9ed8c3550b5c3c1e878d0692f0338cb7.js +0 -1
  411. package/dist/umd/9fa80a5bc14fe8644697fe0dd7b99431.js +0 -1
  412. package/dist/umd/9fd3f255cfd09016ec7f4896bc51864c.js +0 -1
  413. package/dist/umd/a0e32ba94aa4384823d768802b9486e1.js +0 -1
  414. package/dist/umd/a1c8660c5bcc6b6a43a7fb3c351174d9.js +0 -1
  415. package/dist/umd/a223748cd69094dd12b486353b22f479.js +0 -1
  416. package/dist/umd/a2746fc96d535b19c120d4b87dc86ef1.js +0 -1
  417. package/dist/umd/a2b29b879b9e8606085c0d3776f789ca.js +0 -1
  418. package/dist/umd/a34efdb6282815cdc27d2f83352b59e0.js +0 -1
  419. package/dist/umd/a3dfa410d90c00078f4b015410048f34.js +0 -1
  420. package/dist/umd/a41ce517e26d17d855b7224af9ee433b.js +0 -1
  421. package/dist/umd/a496f663a8cf2dc047e12d8a80d76510.js +0 -1
  422. package/dist/umd/a4bedde07e392f8ebf64341b61f75df2.js +0 -1
  423. package/dist/umd/a4d638b976f02f35740be031f996e088.js +0 -1
  424. package/dist/umd/a4e021a4b5d5d65cc87fee17c1886c3f.js +0 -1
  425. package/dist/umd/a52f9ac0e3d582ed7e488aa1dfc33eda.js +0 -1
  426. package/dist/umd/a533e643002830be2da76c9527265860.js +0 -1
  427. package/dist/umd/a569591af2f834ec4b58f43ab7742186.js +0 -1
  428. package/dist/umd/a678d4dedcc646810a379211797d5294.js +0 -1
  429. package/dist/umd/a6eb87af5cd7ae7e4fcba8ec606ec4ba.js +0 -1
  430. package/dist/umd/a709bba98acec5da3ea6258e245514cb.js +0 -1
  431. package/dist/umd/a9cb92db2399f7ac97ad55fe79fe5c20.js +0 -1
  432. package/dist/umd/a9f61cc92a7407c8ca0a5843b29d7a57.js +0 -1
  433. package/dist/umd/aa0417796df2b0398a45c00f93f37ea4.js +0 -1
  434. package/dist/umd/aa0eee504d52a12d3a30bbd523afcc34.js +0 -1
  435. package/dist/umd/aa5623ec68d23fedb9c9c115c7d99063.js +0 -1
  436. package/dist/umd/ab0128ab12bcb8729032421b40f5f8dd.js +0 -1
  437. package/dist/umd/ab237eed5fd16ab99c06f0d28d465edb.js +0 -1
  438. package/dist/umd/ab720dd0a0fd070ad82c052263f748e2.js +0 -1
  439. package/dist/umd/ac54fd77986affc0a122d325788b34d3.js +0 -1
  440. package/dist/umd/af1635b600efd13f6059eb6ac9deae12.js +0 -1
  441. package/dist/umd/af6fdb556ee3f9065578bb01f81f6216.js +0 -1
  442. package/dist/umd/afba1f28f2baa29eae717d6cb03f5464.js +0 -1
  443. package/dist/umd/b02d982ccb1011197a5a24800b178a0a.js +0 -1
  444. package/dist/umd/b03bc4e99280d8b4dfd1c6cddedfbd76.js +0 -1
  445. package/dist/umd/b10accbff47791a59b8494225af07025.js +0 -1
  446. package/dist/umd/b1170472ae4b50e3b0070eb991e502fe.js +0 -1
  447. package/dist/umd/b1e349371cb9c226905c846706ad8b93.js +0 -1
  448. package/dist/umd/b1f3f77a9279cdb38846ebe13c3438bc.js +0 -1
  449. package/dist/umd/b20cd9acf45420fcacfd923754185663.js +0 -1
  450. package/dist/umd/b24bb117549d04501b98ffb66b427e0f.js +0 -1
  451. package/dist/umd/b275e591896df64fa3202d90ae70c583.js +0 -1
  452. package/dist/umd/b2d62f22463367ca31dfdbc615637c32.js +0 -1
  453. package/dist/umd/b306285dfd802d091e788de0f96b8cb2.js +0 -1
  454. package/dist/umd/b33ef9b4202539d3690251cb8213a034.js +0 -1
  455. package/dist/umd/b3f1431b9e6d9e6632a93c2cd89f945b.js +0 -1
  456. package/dist/umd/b676b876040015b30352b3cda5e243b7.js +0 -1
  457. package/dist/umd/b714a3647ca66ab7685eb0437c9e3a8d.js +0 -1
  458. package/dist/umd/b808fb222140a85b23ebbe0fffa906d9.js +0 -1
  459. package/dist/umd/b881dca9d9a80f61d87374b4bd5a2dd5.js +0 -1
  460. package/dist/umd/b8b6bd460e7da0ba8f3b2218327966ee.js +0 -1
  461. package/dist/umd/b934b22e8f8a8b1ba81dbc2cf058b0cd.js +0 -1
  462. package/dist/umd/b953ce2f19e7291598cd9c05128133c1.js +0 -1
  463. package/dist/umd/b992b348ffb6453e4a02a60e71c5304e.js +0 -1
  464. package/dist/umd/b9bf918956902d11645efb99e2ab5293.js +0 -1
  465. package/dist/umd/ba6b8b3e06cd9d0aee9c69278ee84647.js +0 -1
  466. package/dist/umd/bb1365c0983ce5ad50060b24788b9630.js +0 -1
  467. package/dist/umd/bb1de0986c4fb3ee31c5a413b8f97c94.js +0 -1
  468. package/dist/umd/bb5bab7a675544fe31ddb7f4a77dffb9.js +0 -1
  469. package/dist/umd/bd309bb3f23f2bfbcf914f2e71474ab5.js +0 -1
  470. package/dist/umd/be75b76e74c78535966ec8aaa7d46bec.js +0 -1
  471. package/dist/umd/bf37de323316c6ae5745fc11fd576b1c.js +0 -1
  472. package/dist/umd/c19292ad0187d75dd9580319cbfd5688.js +0 -1
  473. package/dist/umd/c1a1f4ba29aa2d9a0b1a1abe5cfee0c6.js +0 -1
  474. package/dist/umd/c2999cd0bf63072240931010a45c21da.js +0 -1
  475. package/dist/umd/c2f4581864c135dff9056745035d3914.js +0 -1
  476. package/dist/umd/c2fa476995041f9982b89a1c483da2b9.js +0 -1
  477. package/dist/umd/c3832579be376308fa819b04e7b0c66f.js +0 -1
  478. package/dist/umd/c3f345c994392d97785925e790513a9f.js +0 -1
  479. package/dist/umd/c428d0ff296b8b683347a18896d72015.js +0 -1
  480. package/dist/umd/c4e58637b4d14c303e29d3ce4b4a210f.js +0 -1
  481. package/dist/umd/c51840077c684be0e7e13339f85cd4a9.js +0 -1
  482. package/dist/umd/c530988d2b1966fd10a4d99fa3877e1b.js +0 -1
  483. package/dist/umd/c5647f3b9e799d1b9818e80796f8a574.js +0 -1
  484. package/dist/umd/c64d6e1e72024bb5d3d3e9bfc19d183d.js +0 -1
  485. package/dist/umd/c6938ce24c731f9ee703747909cd2aad.js +0 -1
  486. package/dist/umd/c80e89199aef31e48addb2b35ea96365.js +0 -1
  487. package/dist/umd/c8230f96396f0378d032dce2be3dce66.js +0 -1
  488. package/dist/umd/c8acc93023012737a3bf8fb767b66838.js +0 -1
  489. package/dist/umd/c93947dfac92c92c3999d1d51fc5b516.js +0 -1
  490. package/dist/umd/c9568507cc8ea516d091749c7919b744.js +0 -1
  491. package/dist/umd/cb0d121a88477f943960f5ad60602c22.js +0 -1
  492. package/dist/umd/cb4bb785934eeca9b408e892ae6b73b7.js +0 -1
  493. package/dist/umd/cb5746e29527a2fdb9f857a121e086ed.js +0 -1
  494. package/dist/umd/cb652f200fc3dd740b2e7f678a9272ea.js +0 -1
  495. package/dist/umd/cb9910e014b468ada91393696fcad206.js +0 -1
  496. package/dist/umd/cbdbd623038183a8c068dd24ecd90682.js +0 -1
  497. package/dist/umd/cbdc4ca43a8c940a6c3f59a8b6f17df5.js +0 -1
  498. package/dist/umd/cc0de4981277622a9017f137023a6dd5.js +0 -1
  499. package/dist/umd/cc65d108f0e7cfb200de1d0bcf115005.js +0 -1
  500. package/dist/umd/cd9a17f94a922c7c88000b1b3cdd67df.js +0 -1
  501. package/dist/umd/cf188b3f83735389d47bb12fc9f7069a.js +0 -1
  502. package/dist/umd/cf26dd07f19bcb5b7efbf057a6cfeb8f.js +0 -1
  503. package/dist/umd/cf3f6b1c74c72cb5d02870022dbc9f94.js +0 -1
  504. package/dist/umd/cf909ad6e321c2f98750f5c3581556f8.js +0 -1
  505. package/dist/umd/cf9c7cbfc2b609b9ae59daeab82719c4.js +0 -1
  506. package/dist/umd/cfaaa83ec3973688a7946b95b597c228.js +0 -1
  507. package/dist/umd/d0415105402964718010284fcfa8b2ea.js +0 -1
  508. package/dist/umd/d09463c099fb2c44719380623a5c68fb.js +0 -1
  509. package/dist/umd/d1a1ee70e5eed28571ae9c619f33de7c.js +0 -1
  510. package/dist/umd/d1db2c4677dd2ee7a0c690c58798a013.js +0 -1
  511. package/dist/umd/d43ad5f9bad9a042b49b2592c7639c28.js +0 -1
  512. package/dist/umd/d4ad4ca9643d85d3990bfefe29cb3bb0.js +0 -1
  513. package/dist/umd/d4f1a314cb3668f8e17f24bccf0229b6.js +0 -1
  514. package/dist/umd/d4f5981ee5a73d8a6e19112f2ffcb72c.js +0 -1
  515. package/dist/umd/d542dda7308361c34af2afb9b70d755a.js +0 -1
  516. package/dist/umd/d5999827bd3af6b813a871de344b109a.js +0 -1
  517. package/dist/umd/d5a6140d581e5c4eb200259ce372f40b.js +0 -1
  518. package/dist/umd/d5f79987405c2169278f8de37bcc9d05.js +0 -1
  519. package/dist/umd/d7340300249ab98bd9b3f538a767106e.js +0 -1
  520. package/dist/umd/d78d3b050ea95b068380d975fd413fd7.js +0 -1
  521. package/dist/umd/d7d616d4aa8fd3f51d681242853dcde9.js +0 -1
  522. package/dist/umd/d83cda12aee0c87c8b381a1234bf7798.js +0 -1
  523. package/dist/umd/d869a443b727ea4b7cef2de0ff2a6ed8.js +0 -1
  524. package/dist/umd/d8f7ecdd496f3caf14f5afbedfff1937.js +0 -1
  525. package/dist/umd/d9b2daf38414fcbaf89924ad3e10e587.js +0 -1
  526. package/dist/umd/da740c1b29a85b999a6874b59a1baeef.js +0 -1
  527. package/dist/umd/db8ca5cfb6fe4aaef215f116f6991784.js +0 -1
  528. package/dist/umd/dc8240db39815020378555a4d80571c3.js +0 -1
  529. package/dist/umd/dc83a73f0eb89665520bbb6672dfa3cb.js +0 -1
  530. package/dist/umd/dc932cde2fbfca8e2901fb693968b131.js +0 -1
  531. package/dist/umd/ddbc961769cd2ff4d4a7a136168ebf4c.js +0 -1
  532. package/dist/umd/de0fd4fd7c2d7a4887cbc99eed91f797.js +0 -1
  533. package/dist/umd/de73b4d2a9ed4bcb851f9141e303636d.js +0 -1
  534. package/dist/umd/e0adad8a8579bf99f3e22f7c214a5c64.js +0 -1
  535. package/dist/umd/e0c565aadda4787ba4ef4456c0a7ee29.js +0 -1
  536. package/dist/umd/e0fa6a4fe8bff90d50ce812e666957ca.js +0 -1
  537. package/dist/umd/e13fc7d468ab9b5797f2a44412ca2f00.js +0 -1
  538. package/dist/umd/e2b38a8393be2cf23f3894ace3efb1c3.js +0 -1
  539. package/dist/umd/e2fe8f0d4fd950b20b30fabaea96b3f8.js +0 -1
  540. package/dist/umd/e37ac12436bcd0536ec98ae8470a1228.js +0 -1
  541. package/dist/umd/e4917fa7632b01d28e99304d32d989f7.js +0 -1
  542. package/dist/umd/e61779df91186b23e7adf2d1968b2708.js +0 -1
  543. package/dist/umd/e6ad50b520736b595970c9e07029c3f1.js +0 -1
  544. package/dist/umd/e7e1a807af3160b342e0a3550cf8f7c5.js +0 -1
  545. package/dist/umd/e7f37e0f2b6113039c45a326264c4d36.js +0 -1
  546. package/dist/umd/e80d5ee40455d0675f8f2a3688071adf.js +0 -1
  547. package/dist/umd/e874d975c9128dc6eb9a513d088bed9f.js +0 -1
  548. package/dist/umd/e9382a0e67b22188c75e9418de1c9295.js +0 -1
  549. package/dist/umd/e9c8f7e13e00284ce126890bf7ac46fd.js +0 -1
  550. package/dist/umd/ea6edcde22c9fdbb9f7b8d9cf72a062b.js +0 -1
  551. package/dist/umd/eaa55a522fb2cb2f0287711f42344984.js +0 -1
  552. package/dist/umd/eb08efe1d361a9c5e37e1d4c8100212e.js +0 -1
  553. package/dist/umd/eb0b62e1895dcf7491419aa728f00c38.js +0 -1
  554. package/dist/umd/ecdb4966f685f3e44b1f28fae46827a3.js +0 -1
  555. package/dist/umd/ecff3d4bbf59ef41230960af46098e74.js +0 -1
  556. package/dist/umd/ed88b2c21452a7eaea143e54e27a0879.js +0 -1
  557. package/dist/umd/ee41eb1fd1d1c87c45e818b5a8a65cf8.js +0 -1
  558. package/dist/umd/ee5d36473f84db2af26d82efd69a38ec.js +0 -1
  559. package/dist/umd/ef6cac9d9a3156e1c19b46cd181863ed.js +0 -1
  560. package/dist/umd/ef7dedac6423354de55896b34230d548.js +0 -1
  561. package/dist/umd/ef87482c92662e8b69a21f47588474ea.js +0 -1
  562. package/dist/umd/efc14cdf19554635e477781704353ec2.js +0 -1
  563. package/dist/umd/eff4371180dfac54de25ed3a0105d82f.js +0 -1
  564. package/dist/umd/f15362a7feef894b2e7f706252e6c510.js +0 -1
  565. package/dist/umd/f15cbf0d23cba4a313f3f2acfef5370c.js +0 -1
  566. package/dist/umd/f18c12f0446bad25ec3732c621d60f88.js +0 -1
  567. package/dist/umd/f2fb7fcc9bdd849d687150c07a81ffe4.js +0 -1
  568. package/dist/umd/f326f2f263b1498fedbe1d07d7254d10.js +0 -1
  569. package/dist/umd/f4480bd3d93cb0949fc4f3af8eff6531.js +0 -1
  570. package/dist/umd/f5655f072ce70050c78fab024d5028a8.js +0 -1
  571. package/dist/umd/f666b5647087bcfdf6623f8b14d56657.js +0 -1
  572. package/dist/umd/f6d7091e70dee6c74956acfef2464d08.js +0 -1
  573. package/dist/umd/f799992a362826cff3c7d1ce9dc9940c.js +0 -1
  574. package/dist/umd/fa0c561bb37040fc8145e5c70ea64912.js +0 -1
  575. package/dist/umd/fb393a7455b47f3d4fc30cf219d5145c.js +0 -1
  576. package/dist/umd/fb5080213f065f82f0391c551c864434.js +0 -1
  577. package/dist/umd/fd3859a700b456e06c65c0cf6b0af05c.js +0 -1
  578. package/dist/umd/fd5bc50b18c9f46380cbe5ec1ac2127b.js +0 -1
  579. package/dist/umd/fd9645aaf1f70c8abc562be41bee25fc.js +0 -1
  580. package/dist/umd/fd98f0e48b18e1de428edd5174539c2a.js +0 -1
  581. package/dist/umd/fe9499c0a5444f7f42843fa00fb355cb.js +0 -1
  582. package/dist/umd/fec23c6964d6cf25681d1f3e24b076a4.js +0 -1
  583. package/dist/umd/ffd3b83e8b5878f4785591ff54b1dfff.js +0 -1
  584. package/dist/umd/index.bundle.js.LICENSE.txt +0 -228
package/lib/index.js CHANGED
@@ -1,56 +1,953 @@
1
- var __decorate=this&&this.__decorate||function(e,t,r,s){var o,n=arguments.length,l=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,r):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,r,s);else for(var i=e.length-1;i>=0;i--)(o=e[i])&&(l=(n<3?o(l):n>3?o(t,r,l):o(t,r))||l);return n>3&&l&&Object.defineProperty(t,r,l),l},__awaiter=this&&this.__awaiter||function(e,t,r,s){return new(r||(r=Promise))((function(o,n){function l(e){try{a(s.next(e))}catch(e){n(e)}}function i(e){try{a(s.throw(e))}catch(e){n(e)}}function a(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(l,i)}a((s=s.apply(e,t||[])).next())}))};import{css,html,LitElement,unsafeCSS}from"lit";import{customElement,property,query,state}from"lit/decorators.js";import manager,{DefaultBoxShadow,DefaultColor1,DefaultColor2,DefaultColor3,DefaultColor4,DefaultColor5,DefaultColor6,Util}from"@openremote/core";import i18next from"i18next";import"@openremote/or-icon";import{AssetModelUtil}from"@openremote/model";import"@openremote/or-translate";import"@openremote/or-mwc-components/or-mwc-drawer";import{translate}from"@openremote/or-translate";import"./or-rule-viewer";import"./or-rule-group-viewer";import"./or-rule-tree";import"./flow-viewer/flow-viewer";import{showOkCancelDialog}from"@openremote/or-mwc-components/or-mwc-dialog";import{showSnackbar}from"@openremote/or-mwc-components/or-mwc-snackbar";import{OrTreeDragEvent}from"@openremote/or-tree-menu";import{when}from"lit/directives/when.js";export{buttonStyle}from"./style";export var TimeTriggerType;!function(e){e.TIME_OF_DAY="TIME_OF_DAY"}(TimeTriggerType||(TimeTriggerType={}));export var AssetQueryOperator;!function(e){e.VALUE_EMPTY="empty",e.VALUE_NOT_EMPTY="notEmpty",e.EQUALS="equals",e.NOT_EQUALS="notEquals",e.GREATER_THAN="greaterThan",e.GREATER_EQUALS="greaterEquals",e.LESS_THAN="lessThan",e.LESS_EQUALS="lessEquals",e.BETWEEN="between",e.NOT_BETWEEN="notBetween",e.CONTAINS="contains",e.NOT_CONTAINS="notContains",e.STARTS_WITH="startsWith",e.NOT_STARTS_WITH="notStartsWith",e.ENDS_WITH="endsWith",e.NOT_ENDS_WITH="notEndsWith",e.CONTAINS_KEY="containsKey",e.NOT_CONTAINS_KEY="notContainsKey",e.INDEX_CONTAINS="indexContains",e.NOT_INDEX_CONTAINS="notIndexContains",e.LENGTH_EQUALS="lengthEquals",e.NOT_LENGTH_EQUALS="notLengthEquals",e.LENGTH_GREATER_THAN="lengthGreaterThan",e.LENGTH_LESS_THAN="lengthLessThan",e.IS_TRUE="true",e.IS_FALSE="false",e.WITHIN_RADIUS="withinRadius",e.OUTSIDE_RADIUS="outsideRadius",e.WITHIN_RECTANGLE="withinRectangle",e.OUTSIDE_RECTANGLE="outsideRectangle",e.NOT_UPDATED_FOR="notUpdatedFor"}(AssetQueryOperator||(AssetQueryOperator={}));export const RuleViewInfoMap={JSON:{viewTemplateProvider:(e,t,r)=>html`<or-rule-json-viewer id="rule-view" .ruleset="${e}" .config="${t}" .readonly="${r}"></or-rule-json-viewer>`},FLOW:{viewTemplateProvider:(e,t,r)=>html`<flow-editor id="rule-view" .ruleset="${e}" .readonly="${r}"></flow-editor>`},GROOVY:{viewTemplateProvider:(e,t,r)=>html`
2
- <or-rule-text-viewer id="rule-view" .ruleset="${e}" .config="${t}" .readonly="${r}"></or-rule-text-viewer>
3
- `,viewRulesetTemplate:'package demo.rules\n\nimport org.openremote.manager.rules.RulesBuilder\nimport org.openremote.model.notification.*\nimport org.openremote.model.attribute.AttributeInfo\nimport org.openremote.model.asset.Asset\nimport org.openremote.model.asset.impl.*\nimport org.openremote.model.query.*\nimport org.openremote.model.query.filter.*\nimport org.openremote.model.rules.Assets\nimport org.openremote.model.rules.Notifications\nimport org.openremote.model.rules.Users\n\nimport java.util.logging.Logger\nimport java.util.stream.Collectors\n\nLogger LOG = binding.LOG\nRulesBuilder rules = binding.rules\nNotifications notifications = binding.notifications\nUsers users = binding.users\nAssets assets = binding.assets\n\n/*\n* A groovy rule is made up of a when closure (LHS) which must return a boolean indicating whether the then closure (RHS)\n* should be executed. The rule engine will periodically evaluate the when closure and if it evaluates to true then the\n* rule then closure will execute.\n*\n* NOTE: DO NOT MODIFY THE FACTS IN THE WHEN CLOSURE THIS SHOULD BE DONE IN THE THEN CLOSURE\n*\n* To avoid an infinite rule loop the when closure should not continually return true for subsequent executions\n* so either the then closure should perform an action that prevents the when closure from matching on subsequent\n* evaluations, or custom facts should be used, some ideas:\n*\n* - Change the value of an attribute being matched in the when closure (which will prevent it matching on subsequent evaluations)\n* - Insert a custom fact on first match and test this fact in the when closure to determine when the rule should match again (for\n* example if a rule should match whenever the asset state changes the asset state timestamp can be used)\n*/\n\nrules.add()\n .name("Example rule")\n .when({\n facts ->\n\n // Find first matching asset state using an asset query\n\n facts.matchFirstAssetState(\n\n // Find asset state by asset type and attribute name\n new AssetQuery().types(ThingAsset).attributeNames("someAttribute")\n\n // Find asset state by asset ID and attribute name\n //new AssetQuery().ids("7CaBoyiDhtdf2kn1Xso1w5").attributeNames("someAttribute")\n\n // Find asset state by asset type, attribute name and value string predicate\n //new AssetQuery().types(ThingAsset).attributes(\n // new AttributePredicate()\n // .name("someAttribute")\n // .value(new StringPredicate()\n // .value("someValue")\n // .match(AssetQuery.Match.EXACT)\n // .caseSensitive(true)))\n\n // Find asset state by asset type and location attribute predicate\n //new AssetQuery().types(ThingAsset).attributes(\n // new AttributePredicate()\n // .name(Asset.LOCATION)\n // .value(new RadialGeofencePredicate()\n // .radius(100)\n // .lat(50.0)\n // .lng(0.0)))\n\n ).map { assetState ->\n\n // Use logging to help with debugging if needed //LOG.info("ATTRIBUTE FOUND")\n\n // Check if this rule really should fire this time\n Optional<Long> lastFireTimestamp = facts.getOptional("someAttribute")\n if (lastFireTimestamp.isPresent() && assetState.getTimestamp() <= lastFireTimestamp.get()) {\n return false\n }\n\n // OK to fire if we reach here\n\n // Compute and bind any facts required for the then closure\n facts.bind("assetState", assetState)\n true\n }.orElseGet {\n // Asset state didn\'t match so clear out any custom facts to allow the rule to fire next time the when closure matches\n facts.remove("someAttribute")\n false\n }\n\n})\n .then({\n facts ->\n\n // Extract any binded facts\n AttributeInfo assetState = facts.bound("assetState")\n\n // Insert the custom fact to prevent rule loop\n facts.put("someAttribute", assetState.getTimestamp())\n\n // Write to attributes\n def otherAttributeValue = null\n if (assetState.getValue().orElse{null} == "Value 1") {\n otherAttributeValue = "Converted Value 1"\n } else if (assetState.getValue().orElse{null} == "Value 2") {\n otherAttributeValue = "Converted Value 2"\n } else {\n otherAttributeValue = "Unknown"\n }\n assets.dispatch(assetState.id, "otherAttribute", otherAttributeValue)\n\n // Generate notifications (useful for rules that check if an attribute is out of range)\n //notifications.send(new Notification()\n // .setName("Attribute alert")\n // .setMessage(new EmailNotificationMessage()\n // .setTo("no-reply@openremote.io")\n // .setSubject("Attribute out of range: Attribute=${assetState.name} Asset ID=${assetState.id}")\n // .setText("Some text body")\n // .setHtml("<p>Or some HTML body</p>")\n // )\n //)\n})'},JAVASCRIPT:{viewTemplateProvider:(e,t,r)=>html`
4
- <or-rule-text-viewer id="rule-view" .ruleset="${e}" .config="${t}" .readonly="${r}"></or-rule-text-viewer>
5
- `,viewRulesetTemplate:'rules = [ // An array of rules, add more objects to add more rules\n {\n name: "Set bar to foo on someAttribute",\n description: "An example rule that sets \'bar\' on someAttribute when it is \'foo\'",\n when: function(facts) {\n return facts.matchAssetState(\n new AssetQuery().types(AssetType.THING).attributeValue("someAttribute", "foo")\n ).map(function(thing) {\n facts.bind("assetId", thing.id);\n return true;\n }).orElse(false);\n },\n then: function(facts) {\n facts.updateAssetState(\n facts.bound("assetId"), "someAttribute", "bar"\n );\n }\n }\n]'}};function getAssetDescriptorFromSection(e,t,r){if(!t||!t.descriptors)return;const s=r?t.descriptors.action:t.descriptors.when,o=t.descriptors.all;return(s&&s.assets?s.assets[e]?s.assets[e]:s.assets["*"]:void 0)||(o&&o.assets?o.assets[e]?o.assets[e]:o.assets["*"]:void 0)}export function getAssetTypeFromQuery(e){return e&&e.types&&e.types.length>0&&e.types[0]?e.types[0]:void 0}export function getAssetIdsFromQuery(e){return e&&e.ids?[...e.ids]:void 0}export const getAssetTypes=()=>__awaiter(void 0,void 0,void 0,(function*(){return AssetModelUtil.getAssetTypeInfos().map((e=>e.assetDescriptor.name))}));export function getAssetInfos(e,t){const r=AssetModelUtil.getAssetDescriptors();return getAssetTypes().then((s=>{let o=s||[],n=[];if(!e||!e.descriptors)return r.map((e=>AssetModelUtil.getAssetTypeInfo(e)));const l=t?e.descriptors.action:e.descriptors.when;return(l&&l.includeAssets||e.descriptors.all&&e.descriptors.all.includeAssets)&&(o=[],l&&l.includeAssets&&(o=[...l.includeAssets]),e.descriptors.all&&e.descriptors.all.includeAssets&&(o=[...e.descriptors.all.includeAssets])),l&&l.excludeAssets&&(n=[...l.excludeAssets]),e.descriptors.all&&e.descriptors.all.excludeAssets&&(n=n.concat(e.descriptors.all.excludeAssets)),r.filter((e=>!(o.length>0&&o.indexOf(e.name)<0)&&n.indexOf(e.name)<0)).map((r=>{let s=AssetModelUtil.getAssetTypeInfo(r);const o=getAssetDescriptorFromSection(r.name,e,t);if(!o)return s;const n={assetDescriptor:s.assetDescriptor?Object.assign({},s.assetDescriptor):{descriptorType:"asset"},attributeDescriptors:s.attributeDescriptors?[...s.attributeDescriptors]:[],metaItemDescriptors:s.metaItemDescriptors?[...s.metaItemDescriptors]:[],valueDescriptors:s.valueDescriptors?[...s.valueDescriptors]:[]};if(o.icon&&(n.assetDescriptor.icon=o.icon),o.color&&(n.assetDescriptor.colour=o.color),n.attributeDescriptors){const t=void 0!==o.includeAttributes?o.includeAttributes:void 0,r=void 0!==o.excludeAttributes?o.excludeAttributes:void 0;(t||r)&&(n.attributeDescriptors=n.attributeDescriptors.filter((e=>(!t||t.some((t=>Util.stringMatch(t,e.name))))&&(!r||!r.some((t=>Util.stringMatch(t,e.name))))))),o.attributeDescriptors&&n.attributeDescriptors.map((t=>{let r=o.attributeDescriptors[t.name];r||(r=l&&l.attributeDescriptors?l.attributeDescriptors[t.name]:void 0),r||(r=e.descriptors.all&&e.descriptors.all.attributeDescriptors?e.descriptors.all.attributeDescriptors[t.name]:void 0),r&&(r.type&&(t.type=r.type),r.format&&(t.format=r.format),r.units&&(t.units=r.units),r.constraints&&(t.constraints=t.constraints?[...r.constraints,...t.constraints]:r.constraints))}))}return n}))}))}export function getAssetsByType(e,t,r){return __awaiter(this,void 0,void 0,(function*(){if(null==r?void 0:r.has(e))return{assets:null==r?void 0:r.get(e),loadedAssets:r};{r||(r=new Map);const s={types:[e],orderBy:{property:"NAME"}};null!=t&&(s.realm={name:t});const o=yield manager.rest.api.AssetResource.queryAssets(s);return r.set(e,o.data),{assets:o.data,loadedAssets:r}}}))}export class OrRulesRuleChangedEvent extends CustomEvent{constructor(e){super(OrRulesRuleChangedEvent.NAME,{bubbles:!0,composed:!0,detail:e})}}OrRulesRuleChangedEvent.NAME="or-rules-rule-changed";export class OrRulesRuleUnsupportedEvent extends CustomEvent{constructor(){super(OrRulesRuleUnsupportedEvent.NAME,{bubbles:!0,composed:!0})}}OrRulesRuleUnsupportedEvent.NAME="or-rules-rule-unsupported";export class OrRulesRequestSelectionEvent extends CustomEvent{constructor(e){super(OrRulesRequestSelectionEvent.NAME,{bubbles:!0,composed:!0,cancelable:!0,detail:e})}}OrRulesRequestSelectionEvent.NAME="or-rules-request-selection";export class OrRulesSelectionEvent extends CustomEvent{constructor(e){super(OrRulesSelectionEvent.NAME,{bubbles:!0,composed:!0,detail:e})}}OrRulesSelectionEvent.NAME="or-rules-selection";export class OrRulesRequestAddEvent extends CustomEvent{constructor(e){super(OrRulesRequestAddEvent.NAME,{bubbles:!0,composed:!0,detail:{detail:e,allow:!0}})}}OrRulesRequestAddEvent.NAME="or-rules-request-add";export class OrRulesRequestGroupEvent extends CustomEvent{constructor(e){super(OrRulesRequestGroupEvent.NAME,{bubbles:!0,composed:!0,detail:{value:e}})}}OrRulesRequestGroupEvent.NAME="or-rules-request-group";export class OrRulesAddEvent extends CustomEvent{constructor(e){super(OrRulesAddEvent.NAME,{bubbles:!0,composed:!0,detail:e})}}OrRulesAddEvent.NAME="or-rules-add";export class OrRulesRequestDeleteEvent extends CustomEvent{constructor(e){super(OrRulesRequestDeleteEvent.NAME,{bubbles:!0,composed:!0,detail:{detail:e,allow:!0}})}}OrRulesRequestDeleteEvent.NAME="or-rules-request-delete";export class OrRulesRequestSaveEvent extends CustomEvent{constructor(e){super(OrRulesRequestSaveEvent.NAME,{bubbles:!0,composed:!0,detail:{allow:!0,detail:e}})}}OrRulesRequestSaveEvent.NAME="or-rules-request-save";export class OrRulesSaveEvent extends CustomEvent{constructor(e){super(OrRulesSaveEvent.NAME,{bubbles:!0,composed:!0,detail:e})}}OrRulesSaveEvent.NAME="or-rules-save";export class OrRulesDeleteEvent extends CustomEvent{constructor(e){super(OrRulesDeleteEvent.NAME,{bubbles:!0,composed:!0,detail:e})}}OrRulesDeleteEvent.NAME="or-rules-delete";export class OrRulesGroupNameChangeEvent extends CustomEvent{constructor(e){super(OrRulesGroupNameChangeEvent.NAME,{bubbles:!0,composed:!0,cancelable:!0,detail:{value:e}})}}OrRulesGroupNameChangeEvent.NAME="or-rules-group-name-change";export const style=css`
6
-
7
- :host {
8
- display: flex;
9
- height: 100%;
10
- width: 100%;
11
-
12
- --internal-or-rules-background-color: var(--or-rules-background-color, var(--or-app-color2, ${unsafeCSS(DefaultColor2)}));
13
- --internal-or-rules-text-color: var(--or-rules-text-color, inherit);
14
- --internal-or-rules-button-color: var(--or-rules-button-color, var(--or-app-color4, ${unsafeCSS(DefaultColor4)}));
15
- --internal-or-rules-invalid-color: var(--or-rules-invalid-color, var(--or-app-color6, ${unsafeCSS(DefaultColor6)}));
16
- --internal-or-rules-panel-color: var(--or-rules-panel-color, var(--or-app-color1, ${unsafeCSS(DefaultColor1)}));
17
- --internal-or-rules-line-color: var(--or-rules-line-color, var(--or-app-color5, ${unsafeCSS(DefaultColor5)}));
18
-
19
- --internal-or-rules-list-selected-color: var(--or-rules-list-selected-color, var(--or-app-color2, ${unsafeCSS(DefaultColor2)}));
20
- --internal-or-rules-list-text-color: var(--or-rules-list-text-color, var(--or-app-color3, ${unsafeCSS(DefaultColor3)}));
21
- --internal-or-rules-list-text-size: var(--or-rules-list-text-size, 15px);
22
- --internal-or-rules-list-header-height: var(--or-rules-list-header-height, 48px);
23
-
24
- --internal-or-rules-list-icon-color-error: var(--or-rules-list-icon-color-error, var(--or-app-color6, ${unsafeCSS(DefaultColor6)}));
25
- --internal-or-rules-list-icon-color-ok: var(--or-rules-list-icon-color-ok, var(--or-app-color5, ${unsafeCSS(DefaultColor5)}));
26
-
27
- --internal-or-rules-list-button-size: var(--or-rules-list-button-size, 24px);
28
-
29
- --internal-or-rules-header-background-color: var(--or-rules-header-background-color, var(--or-app-color3, ${unsafeCSS(DefaultColor3)}));
30
- --internal-or-rules-header-height: var(--or-rules-header-height, unset);
31
-
32
- --or-panel-background-color: var(--internal-or-rules-panel-color);
33
- }
34
-
35
- or-rule-tree {
36
- min-width: 300px;
37
- width: 300px;
38
- z-index: 2;
39
- display: flex;
40
- flex-direction: column;
41
- background-color: var(--internal-or-rules-panel-color);
42
- color: var(--internal-or-rules-list-text-color);
43
- box-shadow: ${unsafeCSS(DefaultBoxShadow)};
44
- }
45
-
46
- or-rule-viewer, or-rule-group-viewer {
47
- z-index: 1;
48
- }
49
- `;let OrRules=class extends(translate(i18next)(LitElement)){static get styles(){return[style]}constructor(){super(),this.addEventListener(OrRulesRequestSelectionEvent.NAME,this._onRuleSelectionRequested),this.addEventListener(OrRulesSelectionEvent.NAME,this._onRuleSelectionChanged),this.addEventListener(OrRulesAddEvent.NAME,this._onRuleAdd),this.addEventListener(OrRulesSaveEvent.NAME,this._onRuleSave),this.addEventListener(OrTreeDragEvent.NAME,this._onRuleDrag),this.addEventListener(OrRulesRequestGroupEvent.NAME,this._onGroupAddRequest),this.addEventListener(OrRulesGroupNameChangeEvent.NAME,this._onGroupNameChange)}render(){return html`
50
- <or-rule-tree id="rule-tree" ?readonly=${this._isReadonly()} .config=${this.config}></or-rule-tree>
51
- ${when(this._selectedGroup,(()=>html`
52
- <or-rule-group-viewer .group="${this._selectedGroup}" .readonly="${this._isReadonly()}"></or-rule-group-viewer>
53
- `),(()=>html`
54
- <or-rule-viewer id="rule-viewer" .config="${this.config}" .readonly="${this._isReadonly()}"></or-rule-viewer>
55
- `))}
56
- `}refresh(){var e;console.debug("Refreshing the rules content..."),this._viewer&&(this._viewer.ruleset=void 0),null===(e=this._rulesTree)||void 0===e||e.refresh()}_isReadonly(){return this.readonly||!manager.hasRole("write:rules")}_confirmContinue(e){var t;(null===(t=this._viewer)||void 0===t?void 0:t.modified)?showOkCancelDialog(i18next.t("loseChanges"),i18next.t("confirmContinueRulesetModified"),i18next.t("discard")).then((t=>e(t))):e(!0)}_onRuleSelectionRequested(e){var t;(null===(t=this._viewer)||void 0===t?void 0:t.modified)&&(e.preventDefault(),console.debug("Prevented new rule selection; prompting user changes have been made."),this._confirmContinue((t=>{t?(this._onNodeSelectionChanged(e.detail),e.detail.newNodes.filter((e=>"rule"===e.type)).forEach((e=>{var t;return null===(t=this._rulesTree)||void 0===t?void 0:t.selectRuleset(e.ruleset,!0)}))):e.detail.oldNodes.filter((e=>"rule"===e.type)).forEach((e=>{var t;return null===(t=this._rulesTree)||void 0===t?void 0:t.selectRuleset(e.ruleset,!0)}))})))}_onRuleSelectionChanged(e){this._onNodeSelectionChanged(e.detail)}_onNodeSelectionChanged(e){var t;const r=e.newNodes,s=r.filter((e=>"group"===e.type));if(1===s.length)return this._viewer&&(this._viewer.ruleset=void 0),void(this._selectedGroup=s[0].groupId);if(Util.objectsEqual(r,e.oldNodes)){console.debug("Force reloading rule viewer...");const e=null===(t=r[0])||void 0===t?void 0:t.ruleset;this._viewer.ruleset=e?Object.assign({},e.ruleset):void 0}else{const e=r.filter((e=>"group"===e.type)),t=r.filter((e=>"rule"===e.type)),s=t.map((e=>e.ruleset.id));console.debug(`Selecting rule IDs ${s}`),this._deselectGroup().then((()=>{1===t.length?this.getUpdateComplete().then((()=>{console.debug("Ruleset viewer is now showing",t[0].ruleset.name),this._viewer.ruleset=Object.assign({},t[0].ruleset)})):(this._viewer.ruleset=void 0,1===e.length&&(this._selectedGroup=e[0].groupId))}))}}_onRuleAdd(e){this._deselectGroup().then((()=>{this._viewer.ruleset=e.detail.ruleset}))}_onRuleSave(e){var t,r,s,o;return __awaiter(this,void 0,void 0,(function*(){if(e.detail.success){this._viewer&&(this._viewer.modified=!1);const n=yield null===(t=this._rulesTree)||void 0===t?void 0:t.refresh();this._checkForViewerUpdate(void 0,n);const l=e.detail.ruleset,i=null===(r=l.meta)||void 0===r?void 0:r.groupId;if(i&&this._rulesTree&&this._rulesTree.expandGroup(i),e.detail.isNew){const t=null==n?void 0:n.find((t=>t.id&&t.id===e.detail.ruleset.id));t?(null===(s=this._rulesTree)||void 0===s||s.deselectAllNodes(),null===(o=this._rulesTree)||void 0===o||o.selectRuleset(t)):console.warn("Could not select the new ruleset.")}}}))}_checkForViewerUpdate(e=this._viewer,t){if(null==e?void 0:e.ruleset){const r=null==t?void 0:t.find((t=>{var r;return t.id===(null===(r=null==e?void 0:e.ruleset)||void 0===r?void 0:r.id)}));r&&(e.ruleset=r)}}_onRuleDrag(e){var t,r;const s=null===(t=this._viewer)||void 0===t?void 0:t.modified,o=null===(r=e.detail.groupNode)||void 0===r?void 0:r.label,n=(e,t)=>(l(e,t),this._saveRuleset(e)),l=(e,t)=>{e.meta||(e.meta={}),e.meta.groupId=t,0===Object.keys(e.meta).length&&delete e.meta};if(s)console.debug("Prevented the default tree drag behavior."),e.preventDefault(),this._confirmContinue((t=>{t&&e.detail.nodes.forEach((t=>{var r;t.ruleset?null===(r=n(t.ruleset,o))||void 0===r||r.then((()=>{var r;null===(r=this._rulesTree)||void 0===r||r.moveNodesToGroup([t],e.detail.groupNode),showSnackbar(void 0,"ruleDragSuccess!")})).catch((()=>{showSnackbar(void 0,"ruleDragFailed")})):t.ruleset?console.warn("Could not add rule to group; could not find ruleset."):o&&console.warn("Could not add rule to group; could not find group ID.")}))}));else{const t=e.detail.nodes.map((e=>{if(e.ruleset)return n(e.ruleset,o)}));Promise.all(t).then((()=>showSnackbar(void 0,"ruleDragSuccess"))).catch((()=>showSnackbar(void 0,"ruleDragFailed"))).finally((()=>{var e;return null===(e=this._rulesTree)||void 0===e?void 0:e.refresh().then((e=>this._checkForViewerUpdate(void 0,e)))}))}}_deselectGroup(){return this._selectedGroup=void 0,this.getUpdateComplete()}_onGroupAddRequest(e){this._selectedGroup=e.detail.value}_onGroupNameChange(e){var t,r,s;const o=this._selectedGroup,n=e.detail.value;if(null===(t=this._rulesTree)||void 0===t?void 0:t.nodes.find((e=>e.label===n)))return console.warn(`The group '${n}' already exists. Please try again.`),void e.preventDefault();console.debug(`Renaming group '${o}' to '${n}'`);const l=[],i=null===(s=null===(r=this._rulesTree)||void 0===r?void 0:r.rules)||void 0===s?void 0:s.filter((e=>{var t;return(null===(t=e.meta)||void 0===t?void 0:t.groupId)===o}));if(null==i||i.forEach((e=>{e.meta.groupId=n,l.push(this._saveRuleset(e))})),l.length>0)Promise.all(l).then((()=>showSnackbar(void 0,"Saved!"))).catch((()=>showSnackbar(void 0,"Failed!"))).finally((()=>{var e;return null===(e=this._rulesTree)||void 0===e?void 0:e.refresh()}));else if(this._rulesTree){const e=[...this._rulesTree.nodes],t=e.find((e=>e.label===o));t?(t.label=n,this._rulesTree.nodes=e):this._rulesTree.nodes=[...e,{id:n,label:n,children:[]}]}this._selectedGroup=n}_saveRuleset(e){return __awaiter(this,void 0,void 0,(function*(){let t;switch(e.type){case"asset":t=manager.rest.api.RulesResource.updateAssetRuleset(e.id,e);break;case"global":t=manager.rest.api.RulesResource.updateGlobalRuleset(e.id,e);break;case"realm":t=manager.rest.api.RulesResource.updateRealmRuleset(e.id,e)}return t}))}};OrRules.DEFAULT_RULESET_NAME="",__decorate([property({type:Boolean})],OrRules.prototype,"readonly",void 0),__decorate([property({type:Object})],OrRules.prototype,"config",void 0),__decorate([property({type:String})],OrRules.prototype,"realm",void 0),__decorate([property({type:String})],OrRules.prototype,"language",void 0),__decorate([property({attribute:!1})],OrRules.prototype,"_isValidRule",void 0),__decorate([state()],OrRules.prototype,"_selectedGroup",void 0),__decorate([query("#rule-tree")],OrRules.prototype,"_rulesTree",void 0),__decorate([query("#rule-viewer")],OrRules.prototype,"_viewer",void 0),OrRules=__decorate([customElement("or-rules")],OrRules);export{OrRules};
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
8
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
9
+ return new (P || (P = Promise))(function (resolve, reject) {
10
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
11
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
12
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
13
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
14
+ });
15
+ };
16
+ /*
17
+ * Copyright 2025, OpenRemote Inc.
18
+ *
19
+ * See the CONTRIBUTORS.txt file in the distribution for a
20
+ * full listing of individual contributors.
21
+ *
22
+ * This program is free software: you can redistribute it and/or modify
23
+ * it under the terms of the GNU Affero General Public License as
24
+ * published by the Free Software Foundation, either version 3 of the
25
+ * License, or (at your option) any later version.
26
+ *
27
+ * This program is distributed in the hope that it will be useful,
28
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
29
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
30
+ * GNU Affero General Public License for more details.
31
+ *
32
+ * You should have received a copy of the GNU Affero General Public License
33
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
34
+ */
35
+ import { css, html, LitElement, unsafeCSS } from "lit";
36
+ import { customElement, property, query, state } from "lit/decorators.js";
37
+ import manager, { DefaultBoxShadow, DefaultColor1, DefaultColor2, DefaultColor3, DefaultColor4, DefaultColor5, DefaultColor6, Util } from "@openremote/core";
38
+ import i18next from "i18next";
39
+ import "@openremote/or-icon";
40
+ import { AssetModelUtil } from "@openremote/model";
41
+ import "@openremote/or-translate";
42
+ import "@openremote/or-mwc-components/or-mwc-drawer";
43
+ import { translate } from "@openremote/or-translate";
44
+ import "./or-rule-viewer";
45
+ import "./or-rule-group-viewer";
46
+ import "./or-rule-tree";
47
+ import "./flow-viewer/flow-viewer";
48
+ import { showOkCancelDialog } from "@openremote/or-mwc-components/or-mwc-dialog";
49
+ import { showSnackbar } from "@openremote/or-mwc-components/or-mwc-snackbar";
50
+ import { OrTreeDragEvent } from "@openremote/or-tree-menu";
51
+ import { when } from "lit/directives/when.js";
52
+ export { buttonStyle } from "./style";
53
+ export var TimeTriggerType;
54
+ (function (TimeTriggerType) {
55
+ TimeTriggerType["TIME_OF_DAY"] = "TIME_OF_DAY";
56
+ })(TimeTriggerType || (TimeTriggerType = {}));
57
+ export var AssetQueryOperator;
58
+ (function (AssetQueryOperator) {
59
+ AssetQueryOperator["VALUE_EMPTY"] = "empty";
60
+ AssetQueryOperator["VALUE_NOT_EMPTY"] = "notEmpty";
61
+ AssetQueryOperator["EQUALS"] = "equals";
62
+ AssetQueryOperator["NOT_EQUALS"] = "notEquals";
63
+ AssetQueryOperator["GREATER_THAN"] = "greaterThan";
64
+ AssetQueryOperator["GREATER_EQUALS"] = "greaterEquals";
65
+ AssetQueryOperator["LESS_THAN"] = "lessThan";
66
+ AssetQueryOperator["LESS_EQUALS"] = "lessEquals";
67
+ AssetQueryOperator["BETWEEN"] = "between";
68
+ AssetQueryOperator["NOT_BETWEEN"] = "notBetween";
69
+ AssetQueryOperator["CONTAINS"] = "contains";
70
+ AssetQueryOperator["NOT_CONTAINS"] = "notContains";
71
+ AssetQueryOperator["STARTS_WITH"] = "startsWith";
72
+ AssetQueryOperator["NOT_STARTS_WITH"] = "notStartsWith";
73
+ AssetQueryOperator["ENDS_WITH"] = "endsWith";
74
+ AssetQueryOperator["NOT_ENDS_WITH"] = "notEndsWith";
75
+ AssetQueryOperator["CONTAINS_KEY"] = "containsKey";
76
+ AssetQueryOperator["NOT_CONTAINS_KEY"] = "notContainsKey";
77
+ AssetQueryOperator["INDEX_CONTAINS"] = "indexContains";
78
+ AssetQueryOperator["NOT_INDEX_CONTAINS"] = "notIndexContains";
79
+ AssetQueryOperator["LENGTH_EQUALS"] = "lengthEquals";
80
+ AssetQueryOperator["NOT_LENGTH_EQUALS"] = "notLengthEquals";
81
+ AssetQueryOperator["LENGTH_GREATER_THAN"] = "lengthGreaterThan";
82
+ AssetQueryOperator["LENGTH_LESS_THAN"] = "lengthLessThan";
83
+ AssetQueryOperator["IS_TRUE"] = "true";
84
+ AssetQueryOperator["IS_FALSE"] = "false";
85
+ AssetQueryOperator["WITHIN_RADIUS"] = "withinRadius";
86
+ AssetQueryOperator["OUTSIDE_RADIUS"] = "outsideRadius";
87
+ AssetQueryOperator["WITHIN_RECTANGLE"] = "withinRectangle";
88
+ AssetQueryOperator["OUTSIDE_RECTANGLE"] = "outsideRectangle";
89
+ AssetQueryOperator["NOT_UPDATED_FOR"] = "notUpdatedFor";
90
+ })(AssetQueryOperator || (AssetQueryOperator = {}));
91
+ export const RuleViewInfoMap = {
92
+ JSON: {
93
+ viewTemplateProvider: (ruleset, config, readonly) => html `<or-rule-json-viewer id="rule-view" .ruleset="${ruleset}" .config="${config}" .readonly="${readonly}"></or-rule-json-viewer>`,
94
+ },
95
+ FLOW: {
96
+ viewTemplateProvider: (ruleset, config, readonly) => html `<flow-editor id="rule-view" .ruleset="${ruleset}" .readonly="${readonly}"></flow-editor>`
97
+ },
98
+ GROOVY: {
99
+ viewTemplateProvider: (ruleset, config, readonly) => html `
100
+ <or-rule-text-viewer id="rule-view" .ruleset="${ruleset}" .config="${config}" .readonly="${readonly}"></or-rule-text-viewer>
101
+ `,
102
+ viewRulesetTemplate: "package demo.rules\n" +
103
+ "\n" +
104
+ "import org.openremote.manager.rules.RulesBuilder\n" +
105
+ "import org.openremote.model.notification.*\n" +
106
+ "import org.openremote.model.attribute.AttributeInfo\n" +
107
+ "import org.openremote.model.asset.Asset\n" +
108
+ "import org.openremote.model.asset.impl.*\n" +
109
+ "import org.openremote.model.query.*\n" +
110
+ "import org.openremote.model.query.filter.*\n" +
111
+ "import org.openremote.model.rules.Assets\n" +
112
+ "import org.openremote.model.rules.Notifications\n" +
113
+ "import org.openremote.model.rules.Users\n" +
114
+ "\n" +
115
+ "import java.util.logging.Logger\n" +
116
+ "import java.util.stream.Collectors\n" +
117
+ "\n" +
118
+ "Logger LOG = binding.LOG\n" +
119
+ "RulesBuilder rules = binding.rules\n" +
120
+ "Notifications notifications = binding.notifications\n" +
121
+ "Users users = binding.users\n" +
122
+ "Assets assets = binding.assets\n" +
123
+ "\n" +
124
+ "/*\n" +
125
+ "* A groovy rule is made up of a when closure (LHS) which must return a boolean indicating whether the then closure (RHS)\n" +
126
+ "* should be executed. The rule engine will periodically evaluate the when closure and if it evaluates to true then the\n" +
127
+ "* rule then closure will execute.\n" +
128
+ "*\n" +
129
+ "* NOTE: DO NOT MODIFY THE FACTS IN THE WHEN CLOSURE THIS SHOULD BE DONE IN THE THEN CLOSURE\n" +
130
+ "*\n" +
131
+ "* To avoid an infinite rule loop the when closure should not continually return true for subsequent executions\n" +
132
+ "* so either the then closure should perform an action that prevents the when closure from matching on subsequent\n" +
133
+ "* evaluations, or custom facts should be used, some ideas:\n" +
134
+ "*\n" +
135
+ "* - Change the value of an attribute being matched in the when closure (which will prevent it matching on subsequent evaluations)\n" +
136
+ "* - Insert a custom fact on first match and test this fact in the when closure to determine when the rule should match again (for\n" +
137
+ "* example if a rule should match whenever the asset state changes the asset state timestamp can be used)\n" +
138
+ "*/\n" +
139
+ "\n" +
140
+ "rules.add()\n" +
141
+ " .name(\"Example rule\")\n" +
142
+ " .when({\n" +
143
+ " facts ->\n" +
144
+ "\n" +
145
+ " // Find first matching asset state using an asset query\n" +
146
+ "\n" +
147
+ " facts.matchFirstAssetState(\n" +
148
+ "\n" +
149
+ " // Find asset state by asset type and attribute name\n" +
150
+ " new AssetQuery().types(ThingAsset).attributeNames(\"someAttribute\")\n" +
151
+ "\n" +
152
+ " // Find asset state by asset ID and attribute name\n" +
153
+ " //new AssetQuery().ids(\"7CaBoyiDhtdf2kn1Xso1w5\").attributeNames(\"someAttribute\")\n" +
154
+ "\n" +
155
+ " // Find asset state by asset type, attribute name and value string predicate\n" +
156
+ " //new AssetQuery().types(ThingAsset).attributes(\n" +
157
+ " // new AttributePredicate()\n" +
158
+ " // .name(\"someAttribute\")\n" +
159
+ " // .value(new StringPredicate()\n" +
160
+ " // .value(\"someValue\")\n" +
161
+ " // .match(AssetQuery.Match.EXACT)\n" +
162
+ " // .caseSensitive(true)))\n" +
163
+ "\n" +
164
+ " // Find asset state by asset type and location attribute predicate\n" +
165
+ " //new AssetQuery().types(ThingAsset).attributes(\n" +
166
+ " // new AttributePredicate()\n" +
167
+ " // .name(Asset.LOCATION)\n" +
168
+ " // .value(new RadialGeofencePredicate()\n" +
169
+ " // .radius(100)\n" +
170
+ " // .lat(50.0)\n" +
171
+ " // .lng(0.0)))\n" +
172
+ "\n" +
173
+ " ).map { assetState ->\n" +
174
+ "\n" +
175
+ " // Use logging to help with debugging if needed" +
176
+ " //LOG.info(\"ATTRIBUTE FOUND\")\n" +
177
+ "\n" +
178
+ " // Check if this rule really should fire this time\n" +
179
+ " Optional<Long> lastFireTimestamp = facts.getOptional(\"someAttribute\")\n" +
180
+ " if (lastFireTimestamp.isPresent() && assetState.getTimestamp() <= lastFireTimestamp.get()) {\n" +
181
+ " return false\n" +
182
+ " }\n" +
183
+ "\n" +
184
+ " // OK to fire if we reach here\n" +
185
+ "\n" +
186
+ " // Compute and bind any facts required for the then closure\n" +
187
+ " facts.bind(\"assetState\", assetState)\n" +
188
+ " true\n" +
189
+ " }.orElseGet {\n" +
190
+ " // Asset state didn't match so clear out any custom facts to allow the rule to fire next time the when closure matches\n" +
191
+ " facts.remove(\"someAttribute\")\n" +
192
+ " false\n" +
193
+ " }\n" +
194
+ "\n" +
195
+ "})\n" +
196
+ " .then({\n" +
197
+ " facts ->\n" +
198
+ "\n" +
199
+ " // Extract any binded facts\n" +
200
+ " AttributeInfo assetState = facts.bound(\"assetState\")\n" +
201
+ "\n" +
202
+ " // Insert the custom fact to prevent rule loop\n" +
203
+ " facts.put(\"someAttribute\", assetState.getTimestamp())\n" +
204
+ "\n" +
205
+ " // Write to attributes\n" +
206
+ " def otherAttributeValue = null\n" +
207
+ " if (assetState.getValue().orElse{null} == \"Value 1\") {\n" +
208
+ " otherAttributeValue = \"Converted Value 1\"\n" +
209
+ " } else if (assetState.getValue().orElse{null} == \"Value 2\") {\n" +
210
+ " otherAttributeValue = \"Converted Value 2\"\n" +
211
+ " } else {\n" +
212
+ " otherAttributeValue = \"Unknown\"\n" +
213
+ " }\n" +
214
+ " assets.dispatch(assetState.id, \"otherAttribute\", otherAttributeValue)\n" +
215
+ "\n" +
216
+ " // Generate notifications (useful for rules that check if an attribute is out of range)\n" +
217
+ " //notifications.send(new Notification()\n" +
218
+ " // .setName(\"Attribute alert\")\n" +
219
+ " // .setMessage(new EmailNotificationMessage()\n" +
220
+ " // .setTo(\"no-reply@openremote.io\")\n" +
221
+ " // .setSubject(\"Attribute out of range: Attribute=${assetState.name} Asset ID=${assetState.id}\")\n" +
222
+ " // .setText(\"Some text body\")\n" +
223
+ " // .setHtml(\"<p>Or some HTML body</p>\")\n" +
224
+ " // )\n" +
225
+ " //)\n" +
226
+ "})"
227
+ },
228
+ JAVASCRIPT: {
229
+ viewTemplateProvider: (ruleset, config, readonly) => html `
230
+ <or-rule-text-viewer id="rule-view" .ruleset="${ruleset}" .config="${config}" .readonly="${readonly}"></or-rule-text-viewer>
231
+ `,
232
+ viewRulesetTemplate: "rules = [ // An array of rules, add more objects to add more rules\n" +
233
+ " {\n" +
234
+ " name: \"Set bar to foo on someAttribute\",\n" +
235
+ " description: \"An example rule that sets 'bar' on someAttribute when it is 'foo'\",\n" +
236
+ " when: function(facts) {\n" +
237
+ " return facts.matchAssetState(\n" +
238
+ " new AssetQuery().types(AssetType.THING).attributeValue(\"someAttribute\", \"foo\")\n" +
239
+ " ).map(function(thing) {\n" +
240
+ " facts.bind(\"assetId\", thing.id);\n" +
241
+ " return true;\n" +
242
+ " }).orElse(false);\n" +
243
+ " },\n" +
244
+ " then: function(facts) {\n" +
245
+ " facts.updateAssetState(\n" +
246
+ " facts.bound(\"assetId\"), \"someAttribute\", \"bar\"\n" +
247
+ " );\n" +
248
+ " }\n" +
249
+ " }\n" +
250
+ "]"
251
+ }
252
+ };
253
+ function getAssetDescriptorFromSection(assetType, config, useActionConfig) {
254
+ if (!config || !config.descriptors) {
255
+ return;
256
+ }
257
+ const section = useActionConfig ? config.descriptors.action : config.descriptors.when;
258
+ const allSection = config.descriptors.all;
259
+ const descriptor = section && section.assets ? section.assets[assetType] ? section.assets[assetType] : section.assets["*"] : undefined;
260
+ if (descriptor) {
261
+ return descriptor;
262
+ }
263
+ return allSection && allSection.assets ? allSection.assets[assetType] ? allSection.assets[assetType] : allSection.assets["*"] : undefined;
264
+ }
265
+ export function getAssetTypeFromQuery(query) {
266
+ return query && query.types && query.types.length > 0 && query.types[0] ? query.types[0] : undefined;
267
+ }
268
+ export function getAssetIdsFromQuery(query) {
269
+ return query && query.ids ? [...query.ids] : undefined;
270
+ }
271
+ export const getAssetTypes = () => __awaiter(void 0, void 0, void 0, function* () {
272
+ // RT: Change to just get all asset types for now as if an instance of a particular asset doesn't exist you
273
+ // won't be able to create a rule for it (e.g. if no ConsoleAsset in a realm then cannot create a console rule)
274
+ return AssetModelUtil.getAssetTypeInfos().map(ati => ati.assetDescriptor.name);
275
+ // const response = await manager.rest.api.AssetResource.queryAssets({
276
+ // select: {
277
+ // attributes: []
278
+ // },
279
+ // realm: {
280
+ // realm: manager.displayRealm
281
+ // },
282
+ // recursive: true
283
+ // });
284
+ //
285
+ // if (response && response.data) {
286
+ // return response.data.map(asset => asset.type!);
287
+ // }
288
+ });
289
+ export function getAssetInfos(config, useActionConfig) {
290
+ const assetDescriptors = AssetModelUtil.getAssetDescriptors();
291
+ return getAssetTypes().then(availibleAssetTypes => {
292
+ let allowedAssetTypes = availibleAssetTypes ? availibleAssetTypes : [];
293
+ let excludedAssetTypes = [];
294
+ if (!config || !config.descriptors) {
295
+ return assetDescriptors.map((ad) => AssetModelUtil.getAssetTypeInfo(ad));
296
+ }
297
+ const section = useActionConfig ? config.descriptors.action : config.descriptors.when;
298
+ if ((section && section.includeAssets) || (config.descriptors.all && config.descriptors.all.includeAssets)) {
299
+ allowedAssetTypes = [];
300
+ if (section && section.includeAssets) {
301
+ allowedAssetTypes = [...section.includeAssets];
302
+ }
303
+ if (config.descriptors.all && config.descriptors.all.includeAssets) {
304
+ allowedAssetTypes = [...config.descriptors.all.includeAssets];
305
+ }
306
+ }
307
+ if (section && section.excludeAssets) {
308
+ excludedAssetTypes = [...section.excludeAssets];
309
+ }
310
+ if (config.descriptors.all && config.descriptors.all.excludeAssets) {
311
+ excludedAssetTypes = excludedAssetTypes.concat(config.descriptors.all.excludeAssets);
312
+ }
313
+ return assetDescriptors.filter((ad) => {
314
+ if (allowedAssetTypes.length > 0 && allowedAssetTypes.indexOf(ad.name) < 0) {
315
+ return false;
316
+ }
317
+ return excludedAssetTypes.indexOf(ad.name) < 0;
318
+ }).map((ad) => {
319
+ let typeInfo = AssetModelUtil.getAssetTypeInfo(ad);
320
+ // Amalgamate matching descriptor from config if defined
321
+ const configDescriptor = getAssetDescriptorFromSection(ad.name, config, useActionConfig);
322
+ if (!configDescriptor) {
323
+ return typeInfo;
324
+ }
325
+ const modifiedTypeInfo = {
326
+ assetDescriptor: typeInfo.assetDescriptor ? Object.assign({}, typeInfo.assetDescriptor) : { descriptorType: "asset" },
327
+ attributeDescriptors: typeInfo.attributeDescriptors ? [...typeInfo.attributeDescriptors] : [],
328
+ metaItemDescriptors: typeInfo.metaItemDescriptors ? [...typeInfo.metaItemDescriptors] : [],
329
+ valueDescriptors: typeInfo.valueDescriptors ? [...typeInfo.valueDescriptors] : []
330
+ };
331
+ if (configDescriptor.icon) {
332
+ modifiedTypeInfo.assetDescriptor.icon = configDescriptor.icon;
333
+ }
334
+ if (configDescriptor.color) {
335
+ modifiedTypeInfo.assetDescriptor.colour = configDescriptor.color;
336
+ }
337
+ // Remove any excluded attributes
338
+ if (modifiedTypeInfo.attributeDescriptors) {
339
+ const includedAttributes = configDescriptor.includeAttributes !== undefined ? configDescriptor.includeAttributes : undefined;
340
+ const excludedAttributes = configDescriptor.excludeAttributes !== undefined ? configDescriptor.excludeAttributes : undefined;
341
+ if (includedAttributes || excludedAttributes) {
342
+ modifiedTypeInfo.attributeDescriptors = modifiedTypeInfo.attributeDescriptors.filter((mad) => (!includedAttributes || includedAttributes.some((inc) => Util.stringMatch(inc, mad.name)))
343
+ && (!excludedAttributes || !excludedAttributes.some((exc) => Util.stringMatch(exc, mad.name))));
344
+ }
345
+ // Override any attribute descriptors
346
+ if (configDescriptor.attributeDescriptors) {
347
+ modifiedTypeInfo.attributeDescriptors.map((attributeDescriptor) => {
348
+ let configAttributeDescriptor = configDescriptor.attributeDescriptors[attributeDescriptor.name];
349
+ if (!configAttributeDescriptor) {
350
+ configAttributeDescriptor = section && section.attributeDescriptors ? section.attributeDescriptors[attributeDescriptor.name] : undefined;
351
+ }
352
+ if (!configAttributeDescriptor) {
353
+ configAttributeDescriptor = config.descriptors.all && config.descriptors.all.attributeDescriptors ? config.descriptors.all.attributeDescriptors[attributeDescriptor.name] : undefined;
354
+ }
355
+ if (configAttributeDescriptor) {
356
+ if (configAttributeDescriptor.type) {
357
+ attributeDescriptor.type = configAttributeDescriptor.type;
358
+ }
359
+ if (configAttributeDescriptor.format) {
360
+ attributeDescriptor.format = configAttributeDescriptor.format;
361
+ }
362
+ if (configAttributeDescriptor.units) {
363
+ attributeDescriptor.units = configAttributeDescriptor.units;
364
+ }
365
+ if (configAttributeDescriptor.constraints) {
366
+ attributeDescriptor.constraints = attributeDescriptor.constraints ? [...configAttributeDescriptor.constraints, ...attributeDescriptor.constraints] : configAttributeDescriptor.constraints;
367
+ }
368
+ }
369
+ });
370
+ }
371
+ }
372
+ return modifiedTypeInfo;
373
+ });
374
+ });
375
+ }
376
+ // Function for getting assets by type
377
+ // loadedAssets is an object given as parameter that will be updated if new assets are fetched.
378
+ export function getAssetsByType(type, realm, loadedAssets) {
379
+ return __awaiter(this, void 0, void 0, function* () {
380
+ if (loadedAssets === null || loadedAssets === void 0 ? void 0 : loadedAssets.has(type)) {
381
+ return {
382
+ assets: loadedAssets === null || loadedAssets === void 0 ? void 0 : loadedAssets.get(type),
383
+ loadedAssets: loadedAssets
384
+ };
385
+ }
386
+ else {
387
+ if (!loadedAssets) {
388
+ loadedAssets = new Map();
389
+ }
390
+ const assetQuery = {
391
+ types: [type],
392
+ orderBy: {
393
+ property: "NAME" /* AssetQueryOrderBy$Property.NAME */
394
+ }
395
+ };
396
+ if (realm != undefined) {
397
+ assetQuery.realm = { name: realm };
398
+ }
399
+ const response = yield manager.rest.api.AssetResource.queryAssets(assetQuery);
400
+ loadedAssets.set(type, response.data);
401
+ return {
402
+ assets: response.data,
403
+ loadedAssets: loadedAssets
404
+ };
405
+ }
406
+ });
407
+ }
408
+ export class OrRulesRuleChangedEvent extends CustomEvent {
409
+ constructor(valid) {
410
+ super(OrRulesRuleChangedEvent.NAME, {
411
+ bubbles: true,
412
+ composed: true,
413
+ detail: valid
414
+ });
415
+ }
416
+ }
417
+ OrRulesRuleChangedEvent.NAME = "or-rules-rule-changed";
418
+ export class OrRulesRuleUnsupportedEvent extends CustomEvent {
419
+ constructor() {
420
+ super(OrRulesRuleUnsupportedEvent.NAME, {
421
+ bubbles: true,
422
+ composed: true
423
+ });
424
+ }
425
+ }
426
+ OrRulesRuleUnsupportedEvent.NAME = "or-rules-rule-unsupported";
427
+ export class OrRulesRequestSelectionEvent extends CustomEvent {
428
+ constructor(request) {
429
+ super(OrRulesRequestSelectionEvent.NAME, {
430
+ bubbles: true,
431
+ composed: true,
432
+ cancelable: true,
433
+ detail: request
434
+ });
435
+ }
436
+ }
437
+ OrRulesRequestSelectionEvent.NAME = "or-rules-request-selection";
438
+ export class OrRulesSelectionEvent extends CustomEvent {
439
+ constructor(nodes) {
440
+ super(OrRulesSelectionEvent.NAME, {
441
+ bubbles: true,
442
+ composed: true,
443
+ detail: nodes
444
+ });
445
+ }
446
+ }
447
+ OrRulesSelectionEvent.NAME = "or-rules-selection";
448
+ export class OrRulesRequestAddEvent extends CustomEvent {
449
+ constructor(detail) {
450
+ super(OrRulesRequestAddEvent.NAME, {
451
+ bubbles: true,
452
+ composed: true,
453
+ detail: {
454
+ detail: detail,
455
+ allow: true
456
+ }
457
+ });
458
+ }
459
+ }
460
+ OrRulesRequestAddEvent.NAME = "or-rules-request-add";
461
+ export class OrRulesRequestGroupEvent extends CustomEvent {
462
+ constructor(name) {
463
+ super(OrRulesRequestGroupEvent.NAME, {
464
+ bubbles: true,
465
+ composed: true,
466
+ detail: {
467
+ value: name,
468
+ }
469
+ });
470
+ }
471
+ }
472
+ OrRulesRequestGroupEvent.NAME = "or-rules-request-group";
473
+ export class OrRulesAddEvent extends CustomEvent {
474
+ constructor(detail) {
475
+ super(OrRulesAddEvent.NAME, {
476
+ bubbles: true,
477
+ composed: true,
478
+ detail: detail
479
+ });
480
+ }
481
+ }
482
+ OrRulesAddEvent.NAME = "or-rules-add";
483
+ export class OrRulesRequestDeleteEvent extends CustomEvent {
484
+ constructor(request) {
485
+ super(OrRulesRequestDeleteEvent.NAME, {
486
+ bubbles: true,
487
+ composed: true,
488
+ detail: {
489
+ detail: request,
490
+ allow: true
491
+ }
492
+ });
493
+ }
494
+ }
495
+ OrRulesRequestDeleteEvent.NAME = "or-rules-request-delete";
496
+ export class OrRulesRequestSaveEvent extends CustomEvent {
497
+ constructor(ruleset) {
498
+ super(OrRulesRequestSaveEvent.NAME, {
499
+ bubbles: true,
500
+ composed: true,
501
+ detail: {
502
+ allow: true,
503
+ detail: ruleset
504
+ }
505
+ });
506
+ }
507
+ }
508
+ OrRulesRequestSaveEvent.NAME = "or-rules-request-save";
509
+ export class OrRulesSaveEvent extends CustomEvent {
510
+ constructor(result) {
511
+ super(OrRulesSaveEvent.NAME, {
512
+ bubbles: true,
513
+ composed: true,
514
+ detail: result
515
+ });
516
+ }
517
+ }
518
+ OrRulesSaveEvent.NAME = "or-rules-save";
519
+ export class OrRulesDeleteEvent extends CustomEvent {
520
+ constructor(rulesets) {
521
+ super(OrRulesDeleteEvent.NAME, {
522
+ bubbles: true,
523
+ composed: true,
524
+ detail: rulesets
525
+ });
526
+ }
527
+ }
528
+ OrRulesDeleteEvent.NAME = "or-rules-delete";
529
+ export class OrRulesGroupNameChangeEvent extends CustomEvent {
530
+ constructor(name) {
531
+ super(OrRulesGroupNameChangeEvent.NAME, {
532
+ bubbles: true,
533
+ composed: true,
534
+ cancelable: true,
535
+ detail: {
536
+ value: name
537
+ }
538
+ });
539
+ }
540
+ }
541
+ OrRulesGroupNameChangeEvent.NAME = "or-rules-group-name-change";
542
+ // language=CSS
543
+ export const style = css `
544
+
545
+ :host {
546
+ display: flex;
547
+ height: 100%;
548
+ width: 100%;
549
+
550
+ --internal-or-rules-background-color: var(--or-rules-background-color, var(--or-app-color2, ${unsafeCSS(DefaultColor2)}));
551
+ --internal-or-rules-text-color: var(--or-rules-text-color, inherit);
552
+ --internal-or-rules-button-color: var(--or-rules-button-color, var(--or-app-color4, ${unsafeCSS(DefaultColor4)}));
553
+ --internal-or-rules-invalid-color: var(--or-rules-invalid-color, var(--or-app-color6, ${unsafeCSS(DefaultColor6)}));
554
+ --internal-or-rules-panel-color: var(--or-rules-panel-color, var(--or-app-color1, ${unsafeCSS(DefaultColor1)}));
555
+ --internal-or-rules-line-color: var(--or-rules-line-color, var(--or-app-color5, ${unsafeCSS(DefaultColor5)}));
556
+
557
+ --internal-or-rules-list-selected-color: var(--or-rules-list-selected-color, var(--or-app-color2, ${unsafeCSS(DefaultColor2)}));
558
+ --internal-or-rules-list-text-color: var(--or-rules-list-text-color, var(--or-app-color3, ${unsafeCSS(DefaultColor3)}));
559
+ --internal-or-rules-list-text-size: var(--or-rules-list-text-size, 15px);
560
+ --internal-or-rules-list-header-height: var(--or-rules-list-header-height, 48px);
561
+
562
+ --internal-or-rules-list-icon-color-error: var(--or-rules-list-icon-color-error, var(--or-app-color6, ${unsafeCSS(DefaultColor6)}));
563
+ --internal-or-rules-list-icon-color-ok: var(--or-rules-list-icon-color-ok, var(--or-app-color5, ${unsafeCSS(DefaultColor5)}));
564
+
565
+ --internal-or-rules-list-button-size: var(--or-rules-list-button-size, 24px);
566
+
567
+ --internal-or-rules-header-background-color: var(--or-rules-header-background-color, var(--or-app-color3, ${unsafeCSS(DefaultColor3)}));
568
+ --internal-or-rules-header-height: var(--or-rules-header-height, unset);
569
+
570
+ --or-panel-background-color: var(--internal-or-rules-panel-color);
571
+ }
572
+
573
+ or-rule-tree {
574
+ min-width: 300px;
575
+ width: 300px;
576
+ z-index: 2;
577
+ display: flex;
578
+ flex-direction: column;
579
+ background-color: var(--internal-or-rules-panel-color);
580
+ color: var(--internal-or-rules-list-text-color);
581
+ box-shadow: ${unsafeCSS(DefaultBoxShadow)};
582
+ }
583
+
584
+ or-rule-viewer, or-rule-group-viewer {
585
+ z-index: 1;
586
+ }
587
+ `;
588
+ let OrRules = class OrRules extends translate(i18next)(LitElement) {
589
+ static get styles() {
590
+ return [
591
+ style
592
+ ];
593
+ }
594
+ constructor() {
595
+ super();
596
+ this.addEventListener(OrRulesRequestSelectionEvent.NAME, this._onRuleSelectionRequested);
597
+ this.addEventListener(OrRulesSelectionEvent.NAME, this._onRuleSelectionChanged);
598
+ this.addEventListener(OrRulesAddEvent.NAME, this._onRuleAdd);
599
+ this.addEventListener(OrRulesSaveEvent.NAME, this._onRuleSave);
600
+ this.addEventListener(OrTreeDragEvent.NAME, this._onRuleDrag);
601
+ this.addEventListener(OrRulesRequestGroupEvent.NAME, this._onGroupAddRequest);
602
+ this.addEventListener(OrRulesGroupNameChangeEvent.NAME, this._onGroupNameChange);
603
+ }
604
+ render() {
605
+ return html `
606
+ <or-rule-tree id="rule-tree" ?readonly=${this._isReadonly()} .config=${this.config}></or-rule-tree>
607
+ ${when(this._selectedGroup, () => html `
608
+ <or-rule-group-viewer .group="${this._selectedGroup}" .readonly="${this._isReadonly()}"></or-rule-group-viewer>
609
+ `, () => html `
610
+ <or-rule-viewer id="rule-viewer" .config="${this.config}" .readonly="${this._isReadonly()}"></or-rule-viewer>
611
+ `)}
612
+ `;
613
+ }
614
+ refresh() {
615
+ var _a;
616
+ console.debug("Refreshing the rules content...");
617
+ if (this._viewer) {
618
+ this._viewer.ruleset = undefined;
619
+ }
620
+ (_a = this._rulesTree) === null || _a === void 0 ? void 0 : _a.refresh();
621
+ }
622
+ _isReadonly() {
623
+ return this.readonly || !manager.hasRole("write:rules" /* ClientRole.WRITE_RULES */);
624
+ }
625
+ _confirmContinue(action) {
626
+ var _a;
627
+ if ((_a = this._viewer) === null || _a === void 0 ? void 0 : _a.modified) {
628
+ showOkCancelDialog(i18next.t("loseChanges"), i18next.t("confirmContinueRulesetModified"), i18next.t("discard"))
629
+ .then((ok) => action(ok));
630
+ }
631
+ else {
632
+ action(true);
633
+ }
634
+ }
635
+ /**
636
+ * HTML event callback on when a "rule (or group) selection is requested".
637
+ * It is a cancellable event that can prompt a user "to discard changes" if they have been made.
638
+ * @param event - The cancellable selection event
639
+ */
640
+ _onRuleSelectionRequested(event) {
641
+ var _a;
642
+ const isModified = (_a = this._viewer) === null || _a === void 0 ? void 0 : _a.modified;
643
+ if (!isModified) {
644
+ return;
645
+ }
646
+ // Prevent the initial request
647
+ event.preventDefault();
648
+ console.debug("Prevented new rule selection; prompting user changes have been made.");
649
+ // Prompt user to "discard changes", and continue the selection afterwards
650
+ this._confirmContinue((ok) => {
651
+ if (ok) {
652
+ this._onNodeSelectionChanged(event.detail);
653
+ event.detail.newNodes.filter(n => n.type === "rule")
654
+ .forEach(n => { var _a; return (_a = this._rulesTree) === null || _a === void 0 ? void 0 : _a.selectRuleset(n.ruleset, true); });
655
+ }
656
+ else {
657
+ event.detail.oldNodes.filter(n => n.type === "rule")
658
+ .forEach(n => { var _a; return (_a = this._rulesTree) === null || _a === void 0 ? void 0 : _a.selectRuleset(n.ruleset, true); });
659
+ }
660
+ });
661
+ }
662
+ /**
663
+ * HTML event callback on when a new rule (or group) has been selected.
664
+ * @param event - The selection event
665
+ */
666
+ _onRuleSelectionChanged(event) {
667
+ this._onNodeSelectionChanged(event.detail);
668
+ }
669
+ /**
670
+ * Utility event callback function called by {@link _onRuleSelectionRequested} and {@link _onRuleSelectionChanged},
671
+ * when a new node in the {@link OrRuleTree} element is selected. It processes the event, and updates the {@link OrRuleViewer} with the new rule.
672
+ * Alternatively, if a group is selected, it updates {@link _selectedGroup} instead.
673
+ * @param payload - Event payload of the {@link RulesetBaseNode} selection
674
+ */
675
+ _onNodeSelectionChanged(payload) {
676
+ var _a;
677
+ const selectedNodes = payload.newNodes;
678
+ const groupNodes = selectedNodes.filter(n => n.type === "group"); // list of selected group nodes
679
+ // If any group has been selected
680
+ if (groupNodes.length === 1) {
681
+ if (this._viewer)
682
+ this._viewer.ruleset = undefined; // clear viewer, since a group is selected instead
683
+ this._selectedGroup = groupNodes[0].groupId;
684
+ return;
685
+ }
686
+ // If the user has clicked the same node so let's force reload it
687
+ else if (Util.objectsEqual(selectedNodes, payload.oldNodes)) {
688
+ console.debug("Force reloading rule viewer...");
689
+ const node = (_a = selectedNodes[0]) === null || _a === void 0 ? void 0 : _a.ruleset;
690
+ this._viewer.ruleset = node ? Object.assign({}, node.ruleset) : undefined;
691
+ // Otherwise, select the new rule or group.
692
+ }
693
+ else {
694
+ const groupNodes = selectedNodes.filter(n => n.type === "group"); // list of selected group nodes
695
+ const rulesetNodes = selectedNodes.filter(n => n.type === "rule"); // list of selected rule nodes
696
+ const selectedIds = rulesetNodes.map((node) => node.ruleset.id);
697
+ console.debug(`Selecting rule IDs ${selectedIds}`);
698
+ // Deselect the group, and select either a new rule or group after that.
699
+ this._deselectGroup().then(() => {
700
+ if (rulesetNodes.length === 1) {
701
+ this.getUpdateComplete().then(() => {
702
+ console.debug("Ruleset viewer is now showing", rulesetNodes[0].ruleset.name);
703
+ this._viewer.ruleset = Object.assign({}, rulesetNodes[0].ruleset);
704
+ });
705
+ }
706
+ else {
707
+ this._viewer.ruleset = undefined; // clear viewer, since a group is selected instead
708
+ if (groupNodes.length === 1) {
709
+ this._selectedGroup = groupNodes[0].groupId;
710
+ }
711
+ }
712
+ });
713
+ }
714
+ }
715
+ /**
716
+ * HTML callback event for when a new rule is added.
717
+ * @param event - A {@link CustomEvent} with the new ruleset as payload.
718
+ */
719
+ _onRuleAdd(event) {
720
+ // Load the ruleset into the viewer
721
+ this._deselectGroup().then(() => {
722
+ this._viewer.ruleset = event.detail.ruleset;
723
+ });
724
+ }
725
+ /**
726
+ * HTML callback event for when a rule has been saved by the user.
727
+ * @param event - A {@link CustomEvent} with a {@link SaveResult} payload.
728
+ */
729
+ _onRuleSave(event) {
730
+ return __awaiter(this, void 0, void 0, function* () {
731
+ var _a, _b, _c, _d;
732
+ if (event.detail.success) {
733
+ // Reset the modified state, which disables the "save" button
734
+ if (this._viewer)
735
+ this._viewer.modified = false;
736
+ // Fetch the updated rules, and change the viewer to the latest version
737
+ const newRulesets = yield ((_a = this._rulesTree) === null || _a === void 0 ? void 0 : _a.refresh());
738
+ this._checkForViewerUpdate(undefined, newRulesets);
739
+ // After the tree has refreshed, check if the saved rule belongs to a group.
740
+ const savedRuleset = event.detail.ruleset;
741
+ const groupId = (_b = savedRuleset.meta) === null || _b === void 0 ? void 0 : _b.groupId;
742
+ // If it has a group ID, expand tree component to show that group and rules that are inside.
743
+ if (groupId && this._rulesTree) {
744
+ this._rulesTree.expandGroup(groupId);
745
+ }
746
+ // Select the ruleset if it's new
747
+ if (event.detail.isNew) {
748
+ const ruleset = newRulesets === null || newRulesets === void 0 ? void 0 : newRulesets.find(r => r.id && r.id === event.detail.ruleset.id);
749
+ if (ruleset) {
750
+ (_c = this._rulesTree) === null || _c === void 0 ? void 0 : _c.deselectAllNodes();
751
+ (_d = this._rulesTree) === null || _d === void 0 ? void 0 : _d.selectRuleset(ruleset);
752
+ }
753
+ else {
754
+ console.warn("Could not select the new ruleset.");
755
+ }
756
+ }
757
+ }
758
+ });
759
+ }
760
+ /**
761
+ * Utility function that updates the viewer with the latest changes.
762
+ * @param viewer - The or-rule-viewer HTML element
763
+ * @param updatedRulesets - List of new rulesets that have been changed
764
+ */
765
+ _checkForViewerUpdate(viewer = this._viewer, updatedRulesets) {
766
+ const current = viewer === null || viewer === void 0 ? void 0 : viewer.ruleset;
767
+ if (current) {
768
+ const found = updatedRulesets === null || updatedRulesets === void 0 ? void 0 : updatedRulesets.find(r => { var _a; return r.id === ((_a = viewer === null || viewer === void 0 ? void 0 : viewer.ruleset) === null || _a === void 0 ? void 0 : _a.id); });
769
+ if (found)
770
+ viewer.ruleset = found;
771
+ }
772
+ }
773
+ /**
774
+ * HTML callback for {@link OrTreeDragEvent}, for when a rule is dragged into (or outside) a group.
775
+ * It handles updating of the 'meta groupId' in a rule, and persists the changes with the HTTP API.
776
+ * @param ev - Tree drag event with a payload of the moved nodes
777
+ */
778
+ _onRuleDrag(ev) {
779
+ var _a, _b;
780
+ const isModified = (_a = this._viewer) === null || _a === void 0 ? void 0 : _a.modified;
781
+ const groupId = (_b = ev.detail.groupNode) === null || _b === void 0 ? void 0 : _b.label;
782
+ const moveAndSave = (ruleset, groupId) => {
783
+ move(ruleset, groupId);
784
+ return this._saveRuleset(ruleset);
785
+ };
786
+ const move = (ruleset, groupId) => {
787
+ if (!ruleset.meta)
788
+ ruleset.meta = {};
789
+ ruleset.meta.groupId = groupId;
790
+ if (Object.keys(ruleset.meta).length === 0) {
791
+ delete ruleset.meta;
792
+ }
793
+ };
794
+ // If the ruleset viewer has no changes, continue dragging the node, and apply changes.
795
+ if (!isModified) {
796
+ const promises = ev.detail.nodes.map(node => {
797
+ if (node.ruleset) {
798
+ return moveAndSave(node.ruleset, groupId);
799
+ }
800
+ });
801
+ Promise.all(promises)
802
+ .then(() => showSnackbar(undefined, "ruleDragSuccess"))
803
+ .catch(() => showSnackbar(undefined, "ruleDragFailed"))
804
+ .finally(() => { var _a; return (_a = this._rulesTree) === null || _a === void 0 ? void 0 : _a.refresh().then(rulesets => this._checkForViewerUpdate(undefined, rulesets)); });
805
+ return;
806
+ }
807
+ console.debug("Prevented the default tree drag behavior.");
808
+ ev.preventDefault(); // prevent the initial rule dragging
809
+ // Prompt the user to "discard changes"
810
+ this._confirmContinue((ok) => {
811
+ if (ok) {
812
+ ev.detail.nodes.forEach(node => {
813
+ var _a;
814
+ if (node.ruleset) {
815
+ (_a = moveAndSave(node.ruleset, groupId)) === null || _a === void 0 ? void 0 : _a.then(() => {
816
+ var _a;
817
+ (_a = this._rulesTree) === null || _a === void 0 ? void 0 : _a.moveNodesToGroup([node], ev.detail.groupNode); // move the nodes again, as the initial event got cancelled.
818
+ showSnackbar(undefined, "ruleDragSuccess!");
819
+ }).catch(() => {
820
+ showSnackbar(undefined, "ruleDragFailed");
821
+ });
822
+ }
823
+ else if (node.ruleset) {
824
+ console.warn("Could not add rule to group; could not find ruleset.");
825
+ }
826
+ else if (groupId) {
827
+ console.warn("Could not add rule to group; could not find group ID.");
828
+ }
829
+ });
830
+ }
831
+ });
832
+ }
833
+ /**
834
+ * Utility function that deselects the group by clearing {@link _selectedGroup}.
835
+ */
836
+ _deselectGroup() {
837
+ this._selectedGroup = undefined;
838
+ return this.getUpdateComplete();
839
+ }
840
+ /**
841
+ * HTML callback for when a new group is added to the {@link OrRuleTree}.
842
+ * @param ev - Callback event
843
+ */
844
+ _onGroupAddRequest(ev) {
845
+ this._selectedGroup = ev.detail.value;
846
+ }
847
+ /**
848
+ * HTML callback for when the selected group name has changed.
849
+ * This function handles renaming the groupId of the rules within that group,
850
+ * together with persisting the changes using the HTTP API.
851
+ * @param ev - Callback event
852
+ */
853
+ _onGroupNameChange(ev) {
854
+ var _a, _b, _c;
855
+ const oldValue = this._selectedGroup;
856
+ const newValue = ev.detail.value;
857
+ // If the group name already exists, we should prevent the event from happening
858
+ if ((_a = this._rulesTree) === null || _a === void 0 ? void 0 : _a.nodes.find(n => n.label === newValue)) {
859
+ console.warn(`The group '${newValue}' already exists. Please try again.`);
860
+ ev.preventDefault();
861
+ return;
862
+ }
863
+ console.debug(`Renaming group '${oldValue}' to '${newValue}'`);
864
+ // Change the groupId for each child rule, and prepare an HTTP API update
865
+ const promises = [];
866
+ const groupRules = (_c = (_b = this._rulesTree) === null || _b === void 0 ? void 0 : _b.rules) === null || _c === void 0 ? void 0 : _c.filter(r => { var _a; return ((_a = r.meta) === null || _a === void 0 ? void 0 : _a.groupId) === oldValue; });
867
+ groupRules === null || groupRules === void 0 ? void 0 : groupRules.forEach((r) => {
868
+ r.meta.groupId = newValue;
869
+ promises.push(this._saveRuleset(r));
870
+ });
871
+ // If a rule has changed, execute the HTTP requests.
872
+ // After that, we fetch the list of rules again using .refresh();
873
+ if (promises.length > 0) {
874
+ Promise.all(promises)
875
+ .then(() => showSnackbar(undefined, "Saved!"))
876
+ .catch(() => showSnackbar(undefined, "Failed!"))
877
+ .finally(() => { var _a; return (_a = this._rulesTree) === null || _a === void 0 ? void 0 : _a.refresh(); });
878
+ // Otherwise, only update the group name in the tree.
879
+ }
880
+ else {
881
+ if (this._rulesTree) {
882
+ const nodes = [...this._rulesTree.nodes];
883
+ const node = nodes.find(n => n.label === oldValue);
884
+ if (node) {
885
+ node.label = newValue;
886
+ this._rulesTree.nodes = nodes;
887
+ }
888
+ else {
889
+ this._rulesTree.nodes = [...nodes, { id: newValue, label: newValue, children: [] }];
890
+ }
891
+ }
892
+ }
893
+ this._selectedGroup = newValue;
894
+ }
895
+ /**
896
+ * Utility function that returns a promise for saving the ruleset, based on its type.
897
+ * @param ruleset - The ruleset to be saved
898
+ */
899
+ _saveRuleset(ruleset) {
900
+ return __awaiter(this, void 0, void 0, function* () {
901
+ let promise;
902
+ switch (ruleset.type) {
903
+ case "asset": {
904
+ promise = manager.rest.api.RulesResource.updateAssetRuleset(ruleset.id, ruleset);
905
+ break;
906
+ }
907
+ case "global": {
908
+ promise = manager.rest.api.RulesResource.updateGlobalRuleset(ruleset.id, ruleset);
909
+ break;
910
+ }
911
+ case "realm": {
912
+ promise = manager.rest.api.RulesResource.updateRealmRuleset(ruleset.id, ruleset);
913
+ break;
914
+ }
915
+ default: {
916
+ break;
917
+ }
918
+ }
919
+ return promise;
920
+ });
921
+ }
922
+ ;
923
+ };
924
+ OrRules.DEFAULT_RULESET_NAME = "";
925
+ __decorate([
926
+ property({ type: Boolean })
927
+ ], OrRules.prototype, "readonly", void 0);
928
+ __decorate([
929
+ property({ type: Object })
930
+ ], OrRules.prototype, "config", void 0);
931
+ __decorate([
932
+ property({ type: String })
933
+ ], OrRules.prototype, "realm", void 0);
934
+ __decorate([
935
+ property({ type: String })
936
+ ], OrRules.prototype, "language", void 0);
937
+ __decorate([
938
+ property({ attribute: false })
939
+ ], OrRules.prototype, "_isValidRule", void 0);
940
+ __decorate([
941
+ state()
942
+ ], OrRules.prototype, "_selectedGroup", void 0);
943
+ __decorate([
944
+ query("#rule-tree")
945
+ ], OrRules.prototype, "_rulesTree", void 0);
946
+ __decorate([
947
+ query("#rule-viewer")
948
+ ], OrRules.prototype, "_viewer", void 0);
949
+ OrRules = __decorate([
950
+ customElement("or-rules")
951
+ ], OrRules);
952
+ export { OrRules };
953
+ //# sourceMappingURL=index.js.map