@iobroker/gui-components 8.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (368) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +1450 -0
  3. package/build/AdminConnection.d.ts +1 -0
  4. package/build/AdminConnection.js +2 -0
  5. package/build/AdminConnection.js.map +1 -0
  6. package/build/Components/404.d.ts +4 -0
  7. package/build/Components/404.js +97 -0
  8. package/build/Components/404.js.map +1 -0
  9. package/build/Components/ColorPicker.d.ts +86 -0
  10. package/build/Components/ColorPicker.js +222 -0
  11. package/build/Components/ColorPicker.js.map +1 -0
  12. package/build/Components/ComplexCron.d.ts +40 -0
  13. package/build/Components/ComplexCron.js +401 -0
  14. package/build/Components/ComplexCron.js.map +1 -0
  15. package/build/Components/CopyToClipboard.d.ts +14 -0
  16. package/build/Components/CopyToClipboard.js +160 -0
  17. package/build/Components/CopyToClipboard.js.map +1 -0
  18. package/build/Components/CustomModal.d.ts +26 -0
  19. package/build/Components/CustomModal.js +62 -0
  20. package/build/Components/CustomModal.js.map +1 -0
  21. package/build/Components/DeviceType/DeviceTypeIcon.d.ts +29 -0
  22. package/build/Components/DeviceType/DeviceTypeIcon.js +108 -0
  23. package/build/Components/DeviceType/DeviceTypeIcon.js.map +1 -0
  24. package/build/Components/DeviceType/DeviceTypeOptions.d.ts +2 -0
  25. package/build/Components/DeviceType/DeviceTypeOptions.js +69 -0
  26. package/build/Components/DeviceType/DeviceTypeOptions.js.map +1 -0
  27. package/build/Components/DeviceType/DeviceTypeSelector.d.ts +20 -0
  28. package/build/Components/DeviceType/DeviceTypeSelector.js +83 -0
  29. package/build/Components/DeviceType/DeviceTypeSelector.js.map +1 -0
  30. package/build/Components/DeviceType/deviceTypeTranslations.d.ts +1 -0
  31. package/build/Components/DeviceType/deviceTypeTranslations.js +30 -0
  32. package/build/Components/DeviceType/deviceTypeTranslations.js.map +1 -0
  33. package/build/Components/DeviceType/i18n/de.json +46 -0
  34. package/build/Components/DeviceType/i18n/en.json +46 -0
  35. package/build/Components/DeviceType/i18n/fr.json +46 -0
  36. package/build/Components/DeviceType/i18n/it.json +46 -0
  37. package/build/Components/DeviceType/i18n/nl.json +46 -0
  38. package/build/Components/DeviceType/i18n/pl.json +46 -0
  39. package/build/Components/DeviceType/i18n/pt.json +46 -0
  40. package/build/Components/DeviceType/i18n/ru.json +46 -0
  41. package/build/Components/DeviceType/i18n/uk.json +46 -0
  42. package/build/Components/DeviceType/i18n/zh-cn.json +46 -0
  43. package/build/Components/DeviceType/icons/Cleaner.d.ts +3 -0
  44. package/build/Components/DeviceType/icons/Cleaner.js +14 -0
  45. package/build/Components/DeviceType/icons/Cleaner.js.map +1 -0
  46. package/build/Components/DeviceType/icons/DoorClosed.d.ts +3 -0
  47. package/build/Components/DeviceType/icons/DoorClosed.js +7 -0
  48. package/build/Components/DeviceType/icons/DoorClosed.js.map +1 -0
  49. package/build/Components/DeviceType/icons/DoorOpened.d.ts +3 -0
  50. package/build/Components/DeviceType/icons/DoorOpened.js +7 -0
  51. package/build/Components/DeviceType/icons/DoorOpened.js.map +1 -0
  52. package/build/Components/DeviceType/icons/FireOff.d.ts +3 -0
  53. package/build/Components/DeviceType/icons/FireOff.js +8 -0
  54. package/build/Components/DeviceType/icons/FireOff.js.map +1 -0
  55. package/build/Components/DeviceType/icons/FireOn.d.ts +3 -0
  56. package/build/Components/DeviceType/icons/FireOn.js +14 -0
  57. package/build/Components/DeviceType/icons/FireOn.js.map +1 -0
  58. package/build/Components/DeviceType/icons/FloodOff.d.ts +3 -0
  59. package/build/Components/DeviceType/icons/FloodOff.js +11 -0
  60. package/build/Components/DeviceType/icons/FloodOff.js.map +1 -0
  61. package/build/Components/DeviceType/icons/FloodOn.d.ts +3 -0
  62. package/build/Components/DeviceType/icons/FloodOn.js +18 -0
  63. package/build/Components/DeviceType/icons/FloodOn.js.map +1 -0
  64. package/build/Components/DeviceType/icons/Gate.d.ts +3 -0
  65. package/build/Components/DeviceType/icons/Gate.js +8 -0
  66. package/build/Components/DeviceType/icons/Gate.js.map +1 -0
  67. package/build/Components/DeviceType/icons/HeatValve.d.ts +3 -0
  68. package/build/Components/DeviceType/icons/HeatValve.js +6 -0
  69. package/build/Components/DeviceType/icons/HeatValve.js.map +1 -0
  70. package/build/Components/DeviceType/icons/Home.d.ts +3 -0
  71. package/build/Components/DeviceType/icons/Home.js +6 -0
  72. package/build/Components/DeviceType/icons/Home.js.map +1 -0
  73. package/build/Components/DeviceType/icons/Humidity.d.ts +3 -0
  74. package/build/Components/DeviceType/icons/Humidity.js +8 -0
  75. package/build/Components/DeviceType/icons/Humidity.js.map +1 -0
  76. package/build/Components/DeviceType/icons/IconHome.d.ts +5 -0
  77. package/build/Components/DeviceType/icons/IconHome.js +21 -0
  78. package/build/Components/DeviceType/icons/IconHome.js.map +1 -0
  79. package/build/Components/DeviceType/icons/Jalousie.d.ts +3 -0
  80. package/build/Components/DeviceType/icons/Jalousie.js +7 -0
  81. package/build/Components/DeviceType/icons/Jalousie.js.map +1 -0
  82. package/build/Components/DeviceType/icons/Material.d.ts +3 -0
  83. package/build/Components/DeviceType/icons/Material.js +8 -0
  84. package/build/Components/DeviceType/icons/Material.js.map +1 -0
  85. package/build/Components/DeviceType/icons/MotionOff.d.ts +3 -0
  86. package/build/Components/DeviceType/icons/MotionOff.js +11 -0
  87. package/build/Components/DeviceType/icons/MotionOff.js.map +1 -0
  88. package/build/Components/DeviceType/icons/MotionOn.d.ts +3 -0
  89. package/build/Components/DeviceType/icons/MotionOn.js +7 -0
  90. package/build/Components/DeviceType/icons/MotionOn.js.map +1 -0
  91. package/build/Components/DeviceType/icons/PushButton.d.ts +3 -0
  92. package/build/Components/DeviceType/icons/PushButton.js +9 -0
  93. package/build/Components/DeviceType/icons/PushButton.js.map +1 -0
  94. package/build/Components/DeviceType/icons/RGB.d.ts +3 -0
  95. package/build/Components/DeviceType/icons/RGB.js +43 -0
  96. package/build/Components/DeviceType/icons/RGB.js.map +1 -0
  97. package/build/Components/DeviceType/icons/RepairExpert.d.ts +3 -0
  98. package/build/Components/DeviceType/icons/RepairExpert.js +6 -0
  99. package/build/Components/DeviceType/icons/RepairExpert.js.map +1 -0
  100. package/build/Components/DeviceType/icons/Socket.d.ts +3 -0
  101. package/build/Components/DeviceType/icons/Socket.js +8 -0
  102. package/build/Components/DeviceType/icons/Socket.js.map +1 -0
  103. package/build/Components/DeviceType/icons/Thermometer.d.ts +3 -0
  104. package/build/Components/DeviceType/icons/Thermometer.js +7 -0
  105. package/build/Components/DeviceType/icons/Thermometer.js.map +1 -0
  106. package/build/Components/DeviceType/icons/ThermometerSimple.d.ts +3 -0
  107. package/build/Components/DeviceType/icons/ThermometerSimple.js +8 -0
  108. package/build/Components/DeviceType/icons/ThermometerSimple.js.map +1 -0
  109. package/build/Components/DeviceType/icons/Thermostat.d.ts +3 -0
  110. package/build/Components/DeviceType/icons/Thermostat.js +9 -0
  111. package/build/Components/DeviceType/icons/Thermostat.js.map +1 -0
  112. package/build/Components/DeviceType/icons/Valve.d.ts +3 -0
  113. package/build/Components/DeviceType/icons/Valve.js +7 -0
  114. package/build/Components/DeviceType/icons/Valve.js.map +1 -0
  115. package/build/Components/DeviceType/icons/WindowClosed.d.ts +3 -0
  116. package/build/Components/DeviceType/icons/WindowClosed.js +8 -0
  117. package/build/Components/DeviceType/icons/WindowClosed.js.map +1 -0
  118. package/build/Components/DeviceType/icons/WindowOpened.d.ts +3 -0
  119. package/build/Components/DeviceType/icons/WindowOpened.js +9 -0
  120. package/build/Components/DeviceType/icons/WindowOpened.js.map +1 -0
  121. package/build/Components/DeviceType/icons/WindowTilted.d.ts +3 -0
  122. package/build/Components/DeviceType/icons/WindowTilted.js +8 -0
  123. package/build/Components/DeviceType/icons/WindowTilted.js.map +1 -0
  124. package/build/Components/DeviceType/icons/index.d.ts +28 -0
  125. package/build/Components/DeviceType/icons/index.js +28 -0
  126. package/build/Components/DeviceType/icons/index.js.map +1 -0
  127. package/build/Components/FileBrowser.d.ts +187 -0
  128. package/build/Components/FileBrowser.js +1711 -0
  129. package/build/Components/FileBrowser.js.map +1 -0
  130. package/build/Components/FileViewer.d.ts +49 -0
  131. package/build/Components/FileViewer.js +247 -0
  132. package/build/Components/FileViewer.js.map +1 -0
  133. package/build/Components/Icon.d.ts +35 -0
  134. package/build/Components/Icon.js +140 -0
  135. package/build/Components/Icon.js.map +1 -0
  136. package/build/Components/IconPicker.d.ts +25 -0
  137. package/build/Components/IconPicker.js +72 -0
  138. package/build/Components/IconPicker.js.map +1 -0
  139. package/build/Components/IconSelector.d.ts +33 -0
  140. package/build/Components/IconSelector.js +2086 -0
  141. package/build/Components/IconSelector.js.map +1 -0
  142. package/build/Components/Image.d.ts +31 -0
  143. package/build/Components/Image.js +126 -0
  144. package/build/Components/Image.js.map +1 -0
  145. package/build/Components/InfoBox.d.ts +37 -0
  146. package/build/Components/InfoBox.js +115 -0
  147. package/build/Components/InfoBox.js.map +1 -0
  148. package/build/Components/IobUri.d.ts +14 -0
  149. package/build/Components/IobUri.js +168 -0
  150. package/build/Components/IobUri.js.map +1 -0
  151. package/build/Components/Loader.d.ts +31 -0
  152. package/build/Components/Loader.js +265 -0
  153. package/build/Components/Loader.js.map +1 -0
  154. package/build/Components/Loaders/MV.d.ts +17 -0
  155. package/build/Components/Loaders/MV.js +61 -0
  156. package/build/Components/Loaders/MV.js.map +1 -0
  157. package/build/Components/Loaders/PT.d.ts +27 -0
  158. package/build/Components/Loaders/PT.js +150 -0
  159. package/build/Components/Loaders/PT.js.map +1 -0
  160. package/build/Components/Loaders/Vendor.d.ts +22 -0
  161. package/build/Components/Loaders/Vendor.js +52 -0
  162. package/build/Components/Loaders/Vendor.js.map +1 -0
  163. package/build/Components/Logo.d.ts +18 -0
  164. package/build/Components/Logo.js +109 -0
  165. package/build/Components/Logo.js.map +1 -0
  166. package/build/Components/MDUtils.d.ts +11 -0
  167. package/build/Components/MDUtils.js +99 -0
  168. package/build/Components/MDUtils.js.map +1 -0
  169. package/build/Components/ObjectBrowser.d.ts +665 -0
  170. package/build/Components/ObjectBrowser.js +6245 -0
  171. package/build/Components/ObjectBrowser.js.map +1 -0
  172. package/build/Components/Router.d.ts +21 -0
  173. package/build/Components/Router.js +77 -0
  174. package/build/Components/Router.js.map +1 -0
  175. package/build/Components/SaveCloseButtons.d.ts +20 -0
  176. package/build/Components/SaveCloseButtons.js +65 -0
  177. package/build/Components/SaveCloseButtons.js.map +1 -0
  178. package/build/Components/Schedule.d.ts +62 -0
  179. package/build/Components/Schedule.js +1266 -0
  180. package/build/Components/Schedule.js.map +1 -0
  181. package/build/Components/SelectWithIcon.d.ts +37 -0
  182. package/build/Components/SelectWithIcon.js +139 -0
  183. package/build/Components/SelectWithIcon.js.map +1 -0
  184. package/build/Components/SimpleCron/cronText.d.ts +10 -0
  185. package/build/Components/SimpleCron/cronText.js +14 -0
  186. package/build/Components/SimpleCron/cronText.js.map +1 -0
  187. package/build/Components/SimpleCron/index.d.ts +55 -0
  188. package/build/Components/SimpleCron/index.js +698 -0
  189. package/build/Components/SimpleCron/index.js.map +1 -0
  190. package/build/Components/TabContainer.d.ts +15 -0
  191. package/build/Components/TabContainer.js +23 -0
  192. package/build/Components/TabContainer.js.map +1 -0
  193. package/build/Components/TabContent.d.ts +11 -0
  194. package/build/Components/TabContent.js +20 -0
  195. package/build/Components/TabContent.js.map +1 -0
  196. package/build/Components/TabHeader.d.ts +6 -0
  197. package/build/Components/TabHeader.js +6 -0
  198. package/build/Components/TabHeader.js.map +1 -0
  199. package/build/Components/TableResize.d.ts +45 -0
  200. package/build/Components/TableResize.js +204 -0
  201. package/build/Components/TableResize.js.map +1 -0
  202. package/build/Components/TextWithIcon.d.ts +21 -0
  203. package/build/Components/TextWithIcon.js +113 -0
  204. package/build/Components/TextWithIcon.js.map +1 -0
  205. package/build/Components/ToggleThemeMenu.d.ts +12 -0
  206. package/build/Components/ToggleThemeMenu.js +13 -0
  207. package/build/Components/ToggleThemeMenu.js.map +1 -0
  208. package/build/Components/TreeTable.d.ts +79 -0
  209. package/build/Components/TreeTable.js +538 -0
  210. package/build/Components/TreeTable.js.map +1 -0
  211. package/build/Components/UploadImage.d.ts +23 -0
  212. package/build/Components/UploadImage.js +516 -0
  213. package/build/Components/UploadImage.js.map +1 -0
  214. package/build/Components/Utils.d.ts +331 -0
  215. package/build/Components/Utils.js +1605 -0
  216. package/build/Components/Utils.js.map +1 -0
  217. package/build/Components/withWidth.d.ts +2 -0
  218. package/build/Components/withWidth.js +22 -0
  219. package/build/Components/withWidth.js.map +1 -0
  220. package/build/Connection.d.ts +1 -0
  221. package/build/Connection.js +2 -0
  222. package/build/Connection.js.map +1 -0
  223. package/build/Dialogs/ComplexCron.d.ts +24 -0
  224. package/build/Dialogs/ComplexCron.js +85 -0
  225. package/build/Dialogs/ComplexCron.js.map +1 -0
  226. package/build/Dialogs/Confirm.d.ts +39 -0
  227. package/build/Dialogs/Confirm.js +83 -0
  228. package/build/Dialogs/Confirm.js.map +1 -0
  229. package/build/Dialogs/Cron.d.ts +29 -0
  230. package/build/Dialogs/Cron.js +72 -0
  231. package/build/Dialogs/Cron.js.map +1 -0
  232. package/build/Dialogs/Error.d.ts +18 -0
  233. package/build/Dialogs/Error.js +27 -0
  234. package/build/Dialogs/Error.js.map +1 -0
  235. package/build/Dialogs/Message.d.ts +20 -0
  236. package/build/Dialogs/Message.js +29 -0
  237. package/build/Dialogs/Message.js.map +1 -0
  238. package/build/Dialogs/SelectFile.d.ts +85 -0
  239. package/build/Dialogs/SelectFile.js +115 -0
  240. package/build/Dialogs/SelectFile.js.map +1 -0
  241. package/build/Dialogs/SelectID.d.ts +102 -0
  242. package/build/Dialogs/SelectID.js +151 -0
  243. package/build/Dialogs/SelectID.js.map +1 -0
  244. package/build/Dialogs/SimpleCron.d.ts +19 -0
  245. package/build/Dialogs/SimpleCron.js +46 -0
  246. package/build/Dialogs/SimpleCron.js.map +1 -0
  247. package/build/Dialogs/TextInput.d.ts +2 -0
  248. package/build/Dialogs/TextInput.js +31 -0
  249. package/build/Dialogs/TextInput.js.map +1 -0
  250. package/build/GenericApp.d.ts +209 -0
  251. package/build/GenericApp.js +842 -0
  252. package/build/GenericApp.js.map +1 -0
  253. package/build/LegacyConnection.d.ts +938 -0
  254. package/build/LegacyConnection.js +2849 -0
  255. package/build/LegacyConnection.js.map +1 -0
  256. package/build/Prompt.d.ts +5 -0
  257. package/build/Prompt.js +19 -0
  258. package/build/Prompt.js.map +1 -0
  259. package/build/Theme.d.ts +5 -0
  260. package/build/Theme.js +344 -0
  261. package/build/Theme.js.map +1 -0
  262. package/build/assets/devices/parseNames.d.ts +0 -0
  263. package/build/assets/devices/parseNames.js +35 -0
  264. package/build/assets/devices/parseNames.js.map +1 -0
  265. package/build/assets/devices.json +1 -0
  266. package/build/assets/lamp_ceiling.svg +9 -0
  267. package/build/assets/lamp_table.svg +8 -0
  268. package/build/assets/no_icon.svg +9 -0
  269. package/build/assets/rooms/parseNames.d.ts +0 -0
  270. package/build/assets/rooms/parseNames.js +35 -0
  271. package/build/assets/rooms/parseNames.js.map +1 -0
  272. package/build/assets/rooms.json +1 -0
  273. package/build/dictionary.d.ts +1 -0
  274. package/build/dictionary.js +25 -0
  275. package/build/dictionary.js.map +1 -0
  276. package/build/globals.d.ts +19 -0
  277. package/build/i18n/de.json +480 -0
  278. package/build/i18n/en.json +480 -0
  279. package/build/i18n/es.json +480 -0
  280. package/build/i18n/fr.json +480 -0
  281. package/build/i18n/it.json +475 -0
  282. package/build/i18n/nl.json +475 -0
  283. package/build/i18n/pl.json +475 -0
  284. package/build/i18n/pt.json +475 -0
  285. package/build/i18n/ru.json +475 -0
  286. package/build/i18n/uk.json +475 -0
  287. package/build/i18n/zh-cn.json +475 -0
  288. package/build/i18n.d.ts +84 -0
  289. package/build/i18n.js +224 -0
  290. package/build/i18n.js.map +1 -0
  291. package/build/icons/IconAdapter.d.ts +3 -0
  292. package/build/icons/IconAdapter.js +7 -0
  293. package/build/icons/IconAdapter.js.map +1 -0
  294. package/build/icons/IconAlias.d.ts +3 -0
  295. package/build/icons/IconAlias.js +7 -0
  296. package/build/icons/IconAlias.js.map +1 -0
  297. package/build/icons/IconButtonImage.d.ts +3 -0
  298. package/build/icons/IconButtonImage.js +9 -0
  299. package/build/icons/IconButtonImage.js.map +1 -0
  300. package/build/icons/IconChannel.d.ts +3 -0
  301. package/build/icons/IconChannel.js +10 -0
  302. package/build/icons/IconChannel.js.map +1 -0
  303. package/build/icons/IconClearFilter.d.ts +3 -0
  304. package/build/icons/IconClearFilter.js +8 -0
  305. package/build/icons/IconClearFilter.js.map +1 -0
  306. package/build/icons/IconClosed.d.ts +3 -0
  307. package/build/icons/IconClosed.js +7 -0
  308. package/build/icons/IconClosed.js.map +1 -0
  309. package/build/icons/IconCopy.d.ts +3 -0
  310. package/build/icons/IconCopy.js +6 -0
  311. package/build/icons/IconCopy.js.map +1 -0
  312. package/build/icons/IconDevice.d.ts +3 -0
  313. package/build/icons/IconDevice.js +16 -0
  314. package/build/icons/IconDevice.js.map +1 -0
  315. package/build/icons/IconDocument.d.ts +3 -0
  316. package/build/icons/IconDocument.js +7 -0
  317. package/build/icons/IconDocument.js.map +1 -0
  318. package/build/icons/IconDocumentReadOnly.d.ts +3 -0
  319. package/build/icons/IconDocumentReadOnly.js +8 -0
  320. package/build/icons/IconDocumentReadOnly.js.map +1 -0
  321. package/build/icons/IconExpert.d.ts +3 -0
  322. package/build/icons/IconExpert.js +7 -0
  323. package/build/icons/IconExpert.js.map +1 -0
  324. package/build/icons/IconFx.d.ts +3 -0
  325. package/build/icons/IconFx.js +6 -0
  326. package/build/icons/IconFx.js.map +1 -0
  327. package/build/icons/IconInstance.d.ts +3 -0
  328. package/build/icons/IconInstance.js +7 -0
  329. package/build/icons/IconInstance.js.map +1 -0
  330. package/build/icons/IconLogout.d.ts +3 -0
  331. package/build/icons/IconLogout.js +7 -0
  332. package/build/icons/IconLogout.js.map +1 -0
  333. package/build/icons/IconNoIcon.d.ts +3 -0
  334. package/build/icons/IconNoIcon.js +6 -0
  335. package/build/icons/IconNoIcon.js.map +1 -0
  336. package/build/icons/IconOpen.d.ts +3 -0
  337. package/build/icons/IconOpen.js +7 -0
  338. package/build/icons/IconOpen.js.map +1 -0
  339. package/build/icons/IconState.d.ts +3 -0
  340. package/build/icons/IconState.js +7 -0
  341. package/build/icons/IconState.js.map +1 -0
  342. package/build/icons/IconVacuum.d.ts +3 -0
  343. package/build/icons/IconVacuum.js +12 -0
  344. package/build/icons/IconVacuum.js.map +1 -0
  345. package/build/index.css +56 -0
  346. package/build/index.d.ts +87 -0
  347. package/build/index.js +85 -0
  348. package/build/index.js.map +1 -0
  349. package/build/modulefederation.admin.config.d.ts +13 -0
  350. package/build/modulefederation.admin.config.js +45 -0
  351. package/build/modulefederation.admin.config.js.map +1 -0
  352. package/build/types.d.ts +236 -0
  353. package/i18n/de.json +480 -0
  354. package/i18n/en.json +480 -0
  355. package/i18n/es.json +480 -0
  356. package/i18n/fr.json +480 -0
  357. package/i18n/it.json +475 -0
  358. package/i18n/nl.json +475 -0
  359. package/i18n/pl.json +475 -0
  360. package/i18n/pt.json +475 -0
  361. package/i18n/ru.json +475 -0
  362. package/i18n/uk.json +475 -0
  363. package/i18n/zh-cn.json +475 -0
  364. package/index.css +56 -0
  365. package/modulefederation.admin.config.d.ts +20 -0
  366. package/modulefederation.admin.config.js +54 -0
  367. package/package.json +86 -0
  368. package/tasksExample.js +91 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"./src/","sources":["Components/SimpleCron/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EACH,UAAU,EACV,QAAQ,EACR,MAAM,EACN,SAAS,EACT,WAAW,EACX,gBAAgB,EAChB,QAAQ,GAEX,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAElC,MAAM,MAAM,GAAwC;IAChD,OAAO,EAAE;QACL,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,MAAM;QACd,QAAQ,EAAE,MAAM;KACnB;IACD,WAAW,EAAE;QACT,MAAM,EAAE,CAAC;QACT,QAAQ,EAAE,GAAG;KAChB;IACD,sBAAsB,EAAE;QACpB,WAAW,EAAE,CAAC;KACjB;IACD,qBAAqB,EAAE;QACnB,UAAU,EAAE,GAAG;KAClB;CACJ,CAAC;AAGF,MAAM,QAAQ,GAAG;IACb,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,UAAU;IACpB,eAAe,EAAE,iBAAiB;IAClC,QAAQ,EAAE,UAAU;CACvB,CAAC;AACF,MAAM,cAAc,GAAG;IACnB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,kBAAkB;CACrB,CAAC;AACF,MAAM,QAAQ,GAAG;IACb,WAAW;IACX,WAAW;IACX,YAAY;IACZ,cAAc;IACd,aAAa;IACb,WAAW;IACX,aAAa;IACb,WAAW;CACd,CAAC;AAEF,SAAS,OAAO,CAAC,GAAW;IACxB,IAAI,GAAG,GAAG,EAAE,EAAE,CAAC;QACX,OAAO,IAAI,GAAG,EAAE,CAAC;IACrB,CAAC;IAED,OAAO,GAAG,GAAG,EAAE,CAAC;AACpB,CAAC;AACD,MAAM,aAAa,GAAG;IAClB,IAAI,EAAE,UAAU;IAChB,QAAQ,EAAE;QACN,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,cAAc,CAAC,OAAO;KAC/B;CACJ,CAAC;AA+CF,SAAS,aAAa,CAAC,IAAY;IAC/B,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;QACf,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACjC,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACjB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACtC,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACpC,KAAK,IAAI,GAAG,GAAG,KAAK,EAAE,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC;gBACtC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;oBACtC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBACnC,CAAC;YACL,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;gBACf,IAAI,GAAG,GAAG,CAAC;YACf,CAAC;YACD,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACnC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC1B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACvB,CAAC;QACL,CAAC;IACL,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,IAAI,EAAE,CAAC;IACZ,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,KAAe;IACpD,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACxC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,OAAsB,CAAC;IAC3B,IAAI,KAAK,GAAoC,IAAI,CAAC;IAElD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,GAAG;YACN,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG;YAC5B,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG;YAC5B,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG;YAC1B,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG;YACzB,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG;YAC3B,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG;SAC3B,CAAC;IACN,CAAC;SAAM,CAAC;QACJ,OAAO,GAAG;YACN,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG;YAC5B,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG;YAC1B,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG;YACzB,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG;YAC3B,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG;SAC3B,CAAC;IACN,CAAC;IAED,YAAY;IACZ,IACI,OAAO,CAAC,OAAO,KAAK,IAAI;QACxB,OAAO,CAAC,OAAO,KAAK,GAAG;QACvB,OAAO,CAAC,KAAK,KAAK,GAAG;QACrB,OAAO,CAAC,IAAI,KAAK,GAAG;QACpB,OAAO,CAAC,MAAM,KAAK,GAAG;QACtB,CAAC,OAAO,CAAC,GAAG,KAAK,GAAG,IAAI,KAAK,CAAC,EAChC,CAAC;QACC,KAAK,GAAG;YACJ,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE;gBACN,MAAM,EAAE,CAAC;gBACT,IAAI,EAAE,cAAc,CAAC,OAAO;aAC/B;SACJ,CAAC;IACN,CAAC,CAAC,cAAc;IAEhB,IACI,OAAO,CAAC,OAAO,KAAK,GAAG;QACvB,OAAO,CAAC,OAAO,KAAK,GAAG;QACvB,OAAO,CAAC,KAAK,KAAK,GAAG;QACrB,OAAO,CAAC,IAAI,KAAK,GAAG;QACpB,OAAO,CAAC,MAAM,KAAK,GAAG;QACtB,CAAC,OAAO,CAAC,GAAG,KAAK,GAAG,IAAI,KAAK,CAAC,EAChC,CAAC;QACC,KAAK,GAAG;YACJ,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE;gBACN,MAAM,EAAE,CAAC;gBACT,IAAI,EAAE,cAAc,CAAC,OAAO;aAC/B;SACJ,CAAC;IACN,CAAC;SAAM,IACH,OAAO,CAAC,OAAO,KAAK,IAAI;QACxB,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;QAC7B,OAAO,CAAC,KAAK,KAAK,GAAG;QACrB,OAAO,CAAC,IAAI,KAAK,GAAG;QACpB,OAAO,CAAC,MAAM,KAAK,GAAG;QACtB,CAAC,OAAO,CAAC,GAAG,KAAK,GAAG,IAAI,KAAK,CAAC,EAChC,CAAC;QACC,cAAc;QACd,KAAK,GAAG;YACJ,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE;gBACN,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBACnD,IAAI,EAAE,cAAc,CAAC,OAAO;aAC/B;SACJ,CAAC;IACN,CAAC;SAAM,IACH,OAAO,CAAC,OAAO,KAAK,IAAI;QACxB,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;QAC7B,OAAO,CAAC,OAAO,KAAK,GAAG;QACvB,OAAO,CAAC,KAAK,KAAK,GAAG;QACrB,OAAO,CAAC,IAAI,KAAK,GAAG;QACpB,OAAO,CAAC,MAAM,KAAK,GAAG;QACtB,CAAC,OAAO,CAAC,GAAG,KAAK,GAAG,IAAI,KAAK,CAAC,EAChC,CAAC;QACC,gBAAgB;QAChB,KAAK,GAAG;YACJ,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE;gBACN,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBACnD,IAAI,EAAE,cAAc,CAAC,OAAO;aAC/B;SACJ,CAAC;IACN,CAAC;SAAM,IACH,OAAO,CAAC,OAAO,KAAK,IAAI;QACxB,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;QAC7B,OAAO,CAAC,OAAO,KAAK,GAAG;QACvB,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;QAC3B,OAAO,CAAC,IAAI,KAAK,GAAG;QACpB,OAAO,CAAC,MAAM,KAAK,GAAG;QACtB,CAAC,OAAO,CAAC,GAAG,KAAK,GAAG,IAAI,KAAK,CAAC,EAChC,CAAC;QACC,0CAA0C;QAC1C,KAAK,GAAG;YACJ,IAAI,EAAE,iBAAiB;YACvB,eAAe,EAAE;gBACb,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBACnD,IAAI,EAAE,cAAc,CAAC,OAAO;gBAC5B,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBACnD,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBACjD,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC;aACvC;SACJ,CAAC;IACN,CAAC;SAAM,IACH,OAAO,CAAC,OAAO,KAAK,IAAI;QACxB,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;QAC7B,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;QAC3B,OAAO,CAAC,IAAI,KAAK,GAAG;QACpB,OAAO,CAAC,MAAM,KAAK,GAAG;QACtB,CAAC,OAAO,CAAC,GAAG,KAAK,GAAG,IAAI,KAAK,CAAC,EAChC,CAAC;QACC,sCAAsC;QACtC,KAAK,GAAG;YACJ,IAAI,EAAE,iBAAiB;YACvB,eAAe,EAAE;gBACb,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBACnD,IAAI,EAAE,cAAc,CAAC,OAAO;gBAC5B,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBACnD,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBACjD,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC;aACvC;SACJ,CAAC;IACN,CAAC;SAAM,IACH,OAAO,CAAC,OAAO,KAAK,IAAI;QACxB,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,KAAK,OAAO,CAAC,OAAO;QAC5D,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,KAAK,OAAO,CAAC,KAAK;QACxD,OAAO,CAAC,IAAI,KAAK,GAAG;QACpB,OAAO,CAAC,MAAM,KAAK,GAAG;QACtB,CAAC,OAAO,CAAC,GAAG,KAAK,GAAG,IAAI,KAAK,CAAC,EAChC,CAAC;QACC,2BAA2B;QAC3B,KAAK,GAAG;YACJ,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE;gBACN,IAAI,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE;gBACzF,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC;aACvC;SACJ,CAAC;IACN,CAAC;SAAM,IACH,OAAO,CAAC,OAAO,KAAK,IAAI;QACxB,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,KAAK,OAAO,CAAC,OAAO;QAC5D,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,KAAK,OAAO,CAAC,KAAK;QACxD,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,KAAK,OAAO,CAAC,IAAI;QACtD,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,KAAK,OAAO,CAAC,MAAM;QAC1D,CAAC,OAAO,CAAC,GAAG,KAAK,GAAG,IAAI,KAAK,CAAC,EAChC,CAAC;QACC,YAAY;QACZ,KAAK,GAAG;YACJ,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE;gBACF,IAAI,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE;gBACzF,IAAI,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE;aAC1F;SACJ,CAAC;IACN,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,MAAM,OAAO,UAAW,SAAQ,KAAK,CAAC,SAA2C;IAC7E,YAAY,KAAsB;QAC9B,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,IAAI,GACJ,OAAO,KAAK,CAAC,cAAc,KAAK,QAAQ;YACpC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;YACnE,CAAC,CAAC,EAAE,CAAC;QACb,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YAClB,IAAI,GAAG,EAAE,CAAC;QACd,CAAC;QACD,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,IAAI,WAAW,EAAE,IAAI,CAAC,IAAI,aAAa,CAAC;QAErE,IAAI,CAAC,KAAK,GAAG;YACT,QAAQ,EAAE,KAAK;YACf,IAAI,EAAE,UAAU,CAAC,UAAU,CAAC,KAAwB,CAAC;YACrD,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE;gBACF,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,EAAE;aACX;YACD,QAAQ,EAAE;gBACN,MAAM,EAAE,CAAC;gBACT,IAAI,EAAE,cAAc,CAAC,OAAO;aAC/B;YACD,eAAe,EAAE;gBACb,MAAM,EAAE,CAAC;gBACT,IAAI,EAAE,cAAc,CAAC,OAAO;gBAC5B,QAAQ,EAAE,CAAC;gBACX,MAAM,EAAE,EAAE;gBACV,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;aAClC;YACD,QAAQ,EAAE;gBACN,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;aAClC;SACJ,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAEjC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,cAAc,EAAE,CAAC;YAC3C,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QAC7E,CAAC;IACL,CAAC;IAED,MAAM,CAAC,gBAAgB,CAAC,IAAc,EAAE,MAAc,CAAC;QACnD,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC;QACf,IAAI,IAAI,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACtB,OAAO,GAAG,CAAC;QACf,CAAC;QACD,MAAM,IAAI,GAAG,EAAE,CAAC;QAChB,IAAI,KAAK,GAAG,IAAI,CAAC;QACjB,IAAI,GAAG,GAAG,IAAI,CAAC;QACf,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACf,OAAO,GAAG,CAAC;QACf,CAAC;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACnC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACjB,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;iBAAM,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;iBAAM,CAAC;gBACJ,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;oBAChB,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC;gBACjC,CAAC;qBAAM,CAAC;oBACJ,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACrB,CAAC;gBACD,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACL,CAAC;QACD,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YAChB,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,MAAM,CAAC,aAAa,CAAC,IAAY;QAC7B,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,KAA+B;QAC7C,IAAI,IAAI,GAAG,WAAW,CAAC;QACvB,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI;gBAC/B,MAAM,EAAE,CAAC;gBACT,IAAI,EAAE,cAAc,CAAC,OAAO;aAC/B,CAAC;YACF,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;gBACxD,QAAQ,CAAC,MAAM,GAAG,EAAE,CAAC;YACzB,CAAC;YACD,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvD,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;YACxB,CAAC;YAED,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS,IAAI,QAAQ,CAAC,OAAO,KAAK,IAAI,IAAI,QAAQ,CAAC,OAAO,GAAG,EAAE,EAAE,CAAC;gBACvF,QAAQ,CAAC,OAAO,GAAG,EAAE,CAAC;YAC1B,CAAC;YACD,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS,IAAI,QAAQ,CAAC,OAAO,KAAK,IAAI,IAAI,QAAQ,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;gBACtF,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC;YACzB,CAAC;YAED,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS,IAAI,QAAQ,CAAC,KAAK,KAAK,IAAI,IAAI,QAAQ,CAAC,KAAK,GAAG,EAAE,EAAE,CAAC;gBACjF,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAC;YACxB,CAAC;YACD,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS,IAAI,QAAQ,CAAC,KAAK,KAAK,IAAI,IAAI,QAAQ,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;gBAChF,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC;YACvB,CAAC;YAED,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACjB,IAAI,GAAG,GAAG,QAAQ,CAAC,OAAO,KAAK,SAAS,IAAI,QAAQ,CAAC,OAAO,KAAK,IAAI,IAAI,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS,IAAI,QAAQ,CAAC,KAAK,KAAK,IAAI,IAAI,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;YACzP,CAAC;iBAAM,CAAC;gBACJ,QAAQ,QAAQ,CAAC,IAAI,EAAE,CAAC;oBACpB,KAAK,cAAc,CAAC,OAAO;wBACvB,IAAI,GAAG,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC;wBACzE,MAAM;oBACV,KAAK,cAAc,CAAC,OAAO;wBACvB,IAAI,GAAG,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;wBACvE,MAAM;oBACV;wBACI,MAAM;gBACd,CAAC;YACL,CAAC;QACL,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;YAC1C,MAAM,QAAQ,GAAG,KAAK,CAAC,eAAe,IAAI;gBACtC,MAAM,EAAE,CAAC;gBACT,IAAI,EAAE,cAAc,CAAC,OAAO;gBAC5B,QAAQ,EAAE,CAAC;gBACX,MAAM,EAAE,EAAE;gBACV,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;aAClC,CAAC;YACF,IAAI,KAAK,CAAC;YACV,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,IAAI,CAAC,CAAC;YAC3C,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;YACvE,IAAI,QAAQ,CAAC,QAAQ,KAAK,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;gBACpD,QAAQ,CAAC,MAAM,GAAG,EAAE,CAAC;YACzB,CAAC;YACD,IAAI,QAAQ,CAAC,QAAQ,KAAK,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;gBACpD,KAAK,GAAG,GAAG,CAAC;YAChB,CAAC;iBAAM,CAAC;gBACJ,KAAK,GAAG,QAAQ,CAAC,QAAQ,KAAK,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;YACpG,CAAC;YACD,IAAI,QAAQ,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;gBACvB,QAAQ,CAAC,MAAM,GAAG,EAAE,CAAC;YACzB,CAAC;YACD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtB,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;YACxB,CAAC;YACD,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,cAAc,CAAC,OAAO,CAAC;YACxD,QAAQ,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACpB,KAAK,cAAc,CAAC,OAAO;oBACvB,IAAI,GAAG,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,QAAQ,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC1H,MAAM;gBACV,KAAK,cAAc,CAAC,OAAO;oBACvB,IAAI,GAAG,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,QAAQ,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACxH,MAAM;gBACV;oBACI,MAAM;YACd,CAAC;QACL,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACnC,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI;gBAC/B,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;aAClC,CAAC;YACF,MAAM,KAAK,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACpD,IAAI,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;YAC1C,IAAI,OAAO,GAAG,EAAE,EAAE,CAAC;gBACf,OAAO,GAAG,EAAE,CAAC;YACjB,CAAC;YACD,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;gBACd,OAAO,GAAG,CAAC,CAAC;YAChB,CAAC;YACD,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;YACxC,IAAI,KAAK,GAAG,EAAE,EAAE,CAAC;gBACb,KAAK,GAAG,EAAE,CAAC;YACf,CAAC;YACD,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBACZ,KAAK,GAAG,CAAC,CAAC;YACd,CAAC;YAED,IAAI,GAAG,GAAG,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,CAAC;QACvF,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC/B,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,IAAI;gBAC3B,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,EAAE;aACX,CAAC;YACF,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACjB,QAAQ,CAAC,IAAI,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,IAAI,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;YACpF,CAAC;YACD,MAAM,KAAK,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACpD,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC3C,IAAI,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;YAC1C,IAAI,OAAO,GAAG,EAAE,EAAE,CAAC;gBACf,OAAO,GAAG,EAAE,CAAC;YACjB,CAAC;YACD,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;gBACd,OAAO,GAAG,CAAC,CAAC;YAChB,CAAC;YACD,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;YACxC,IAAI,KAAK,GAAG,EAAE,EAAE,CAAC;gBACb,KAAK,GAAG,EAAE,CAAC;YACf,CAAC;YACD,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBACZ,KAAK,GAAG,CAAC,CAAC;YACd,CAAC;YACD,IAAI,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;YAC3C,IAAI,IAAI,GAAG,EAAE,EAAE,CAAC;gBACZ,IAAI,GAAG,EAAE,CAAC;YACd,CAAC;YACD,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;gBACX,KAAK,GAAG,CAAC,CAAC;YACd,CAAC;YACD,IAAI,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;YAC5C,IAAI,KAAK,GAAG,EAAE,EAAE,CAAC;gBACb,KAAK,GAAG,EAAE,CAAC;YACf,CAAC;YACD,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBACZ,KAAK,GAAG,CAAC,CAAC;YACd,CAAC;YAED,IAAI,GAAG,GAAG,OAAO,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,CAAC;QACpD,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,UAAU;QACN,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,2BAA2B,CAAC,IAAoC;QAC5D,MAAM,QAAQ,GAAG,IAAI,KAAK,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC/F,OAAO,CACH,6BACI,GAAG,EAAC,UAAU,EACd,KAAK,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,QAAQ,EAAE,GAAG,EAAE;YAEnE,gCAAK,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAM;YAClC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAC9B,oBAAC,gBAAgB,IACb,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,EAClB,OAAO,EACH,oBAAC,QAAQ,IACL,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EACxC,QAAQ,EAAE,CAAC,CAAC,EAAE;wBACV,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wBAC/D,MAAM,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;wBAC5C,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;4BACnB,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;gCACb,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;4BACjC,CAAC;wBACL,CAAC;6BAAM,CAAC;4BACJ,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;gCACb,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;4BACtC,CAAC;wBACL,CAAC;wBACD,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;wBAC1B,IAAI,IAAI,KAAK,iBAAiB,EAAE,CAAC;4BAC7B,IAAI,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;wBAC3E,CAAC;6BAAM,CAAC;4BACJ,IAAI,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;wBACpE,CAAC;oBACL,CAAC,EACD,KAAK,EAAE,GAAG,CAAC,QAAQ,EAAE,GACvB,EAEN,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAC9B,CACL,CAAC,CACA,CACT,CAAC;IACN,CAAC;IAED,yBAAyB,CAAC,IAAoC;QAC1D,MAAM,QAAQ,GAAG,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC;QAExF,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YACtB,OAAO,CACH,6BACI,GAAG,EAAC,QAAQ,EACZ,KAAK,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE;gBAElD,4BAAI,KAAK,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,IAAG,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAM;gBAC1D,oBAAC,SAAS,IACN,OAAO,EAAC,UAAU,EAClB,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,aAAa,EAAE,QAAQ,EAAE,EACjE,GAAG,EAAC,OAAO,EACX,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,EAC3B,KAAK,EAAE,QAAQ,CAAC,OAAO,EACvB,QAAQ,EAAE,CAAC,CAAC,EAAE;wBACV,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wBAC/D,SAAS,CAAC,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;wBACjD,IAAI,SAAS,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;4BACxB,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC;wBAC1B,CAAC;wBACD,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;4BACtB,IAAI,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;wBACpE,CAAC;6BAAM,CAAC;4BACJ,IAAI,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;wBAC3E,CAAC;oBACL,CAAC,EACD,SAAS,EAAE;wBACP,SAAS,EAAE;4BACP,GAAG,EAAE,CAAC;4BACN,GAAG,EAAE,EAAE;yBACV;wBACD,UAAU,EAAE;4BACR,MAAM,EAAE,IAAI;yBACf;qBACJ,EACD,IAAI,EAAC,QAAQ,EACb,MAAM,EAAC,QAAQ,GACjB;gBACF,oBAAC,SAAS,IACN,OAAO,EAAC,UAAU,EAClB,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,aAAa,EAAE,QAAQ,EAAE,EACjE,GAAG,EAAC,OAAO,EACX,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,EACzB,KAAK,EAAE,QAAQ,CAAC,KAAK,EACrB,QAAQ,EAAE,CAAC,CAAC,EAAE;wBACV,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wBAC/D,SAAS,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;wBAC/C,IAAI,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;4BACtB,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC;wBACxB,CAAC;wBACD,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;4BACtB,IAAI,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;wBACpE,CAAC;6BAAM,CAAC;4BACJ,IAAI,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;wBAC3E,CAAC;oBACL,CAAC,EACD,SAAS,EAAE;wBACP,SAAS,EAAE;4BACP,GAAG,EAAE,CAAC;4BACN,GAAG,EAAE,EAAE;yBACV;wBACD,UAAU,EAAE;4BACR,MAAM,EAAE,IAAI;yBACf;qBACJ,EACD,IAAI,EAAC,QAAQ,EACb,MAAM,EAAC,QAAQ,GACjB,CACA,CACT,CAAC;QACN,CAAC;QAED,OAAO,CACH,6BACI,GAAG,EAAC,QAAQ,EACZ,KAAK,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE;YAElD,4BAAI,KAAK,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,IAAG,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAM;YAC1D,oBAAC,SAAS,IACN,OAAO,EAAC,UAAU,EAClB,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,aAAa,EAAE,QAAQ,EAAE,EACjE,GAAG,EAAC,OAAO,EACX,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,EACzB,KAAK,EAAE,QAAQ,CAAC,MAAM,EACtB,QAAQ,EAAE,CAAC,CAAC,EAAE;oBACV,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAC/D,SAAS,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;oBAChD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACvB,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;oBACzB,CAAC;oBACD,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;wBACtB,IAAI,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;oBACpE,CAAC;yBAAM,CAAC;wBACJ,IAAI,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;oBAC3E,CAAC;gBACL,CAAC,EACD,SAAS,EAAE;oBACP,SAAS,EAAE;wBACP,GAAG,EAAE,CAAC;wBACN,GAAG,EAAE,EAAE;qBACV;oBACD,UAAU,EAAE;wBACR,MAAM,EAAE,IAAI;qBACf;iBACJ,EACD,IAAI,EAAC,QAAQ,EACb,MAAM,EAAC,QAAQ,GACjB;YACF,oBAAC,MAAM,IACH,OAAO,EAAC,UAAU,EAClB,KAAK,EAAE,EAAE,aAAa,EAAE,QAAQ,EAAE,EAClC,KAAK,EAAE,QAAQ,CAAC,IAAI,EACpB,QAAQ,EAAE,CAAC,CAAC,EAAE;oBACV,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAC/D,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;oBAChC,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;wBACtB,IAAI,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;oBACpE,CAAC;yBAAM,CAAC;wBACJ,IAAI,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;oBAC3E,CAAC;gBACL,CAAC;gBAED,oBAAC,QAAQ,IAAC,KAAK,EAAC,SAAS,IAAE,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAY;;gBAC3D,oBAAC,QAAQ,IAAC,KAAK,EAAC,SAAS,IAAE,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAY;oBACtD,CACP,CACT,CAAC;IACN,CAAC;IAED,eAAe,CAAC,IAAyB;QACrC,MAAM,QAAQ,GAAG,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;QACzE,OAAO,CACH,oBAAC,WAAW,IACR,OAAO,EAAC,UAAU,EAClB,EAAE,EAAE;gBACA,GAAG,MAAM,CAAC,WAAW;gBACrB,uBAAuB,EAAE,MAAM,CAAC,sBAAsB;aACzD;YAED,oBAAC,SAAS,IACN,OAAO,EAAC,UAAU,EAClB,GAAG,EAAC,IAAI,EACR,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,EACxB,KAAK,EAAE,QAAQ,CAAC,IAAI,EACpB,IAAI,EAAC,MAAM,EACX,EAAE,EAAE,CAAC,KAAY,EAAE,EAAE,CAAC,CAAC;oBACnB,yDAAyD,EAAE;wBACvD,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;qBACpE;iBACJ,CAAC,EACF,QAAQ,EAAE,CAAC,CAAC,EAAE;oBACV,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAC/D,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;oBAChC,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;wBAClB,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;oBAChE,CAAC;yBAAM,CAAC;wBACJ,IAAI,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;oBACpE,CAAC;gBACL,CAAC,EACD,SAAS,EAAE;oBACP,UAAU,EAAE;wBACR,MAAM,EAAE,IAAI;qBACf;iBACJ,EACD,MAAM,EAAC,QAAQ,GACjB,CACQ,CACjB,CAAC;IACN,CAAC;IAED,eAAe;QACX,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QAEjC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;YACrB,QAAQ,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,OAAO,EAAE,IAAI,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;QAClE,CAAC;QAED,iFAAiF;QACjF,OAAO,CACH,oBAAC,WAAW,IACR,OAAO,EAAC,UAAU,EAClB,KAAK,EAAE,MAAM,CAAC,WAAW;YAEzB,oBAAC,SAAS,IACN,OAAO,EAAC,UAAU,EAClB,GAAG,EAAC,MAAM,EACV,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,EACxB,KAAK,EAAE,QAAQ,CAAC,IAAI,EACpB,IAAI,EAAC,MAAM,EACX,SAAS,EAAE;oBACP,SAAS,EAAE;wBACP,KAAK,EAAE,MAAM,CAAC,qBAAqB;qBACtC;oBACD,UAAU,EAAE;wBACR,MAAM,EAAE,IAAI;qBACf;iBACJ,EACD,QAAQ,EAAE,CAAC,CAAC,EAAE;oBACV,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;oBAC9D,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;oBAChC,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;gBAChE,CAAC,EACD,MAAM,EAAC,QAAQ,GACjB,CACQ,CACjB,CAAC;IACN,CAAC;IAED,eAAe;QACX,OAAO,CACH,6BAAK,KAAK,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE;YACxB,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;YAC5B,IAAI,CAAC,eAAe,EAAE,CACrB,CACT,CAAC;IACN,CAAC;IAED,mBAAmB;QACf,OAAO,IAAI,CAAC,yBAAyB,CAAC,UAAU,CAAC,CAAC;IACtD,CAAC;IAED,0BAA0B;QACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC;QAC5C,OAAO;YACH,IAAI,CAAC,yBAAyB,CAAC,iBAAiB,CAAC;YACjD,6BACI,GAAG,EAAC,SAAS,EACb,KAAK,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,KAAK,EAAE;gBAExE,4BAAI,KAAK,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,IAAG,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAM;gBACzD,oBAAC,WAAW,IACR,OAAO,EAAC,UAAU,EAClB,KAAK,EAAE,MAAM,CAAC,WAAW;oBAEzB,oBAAC,UAAU,IACP,MAAM,QACN,OAAO,EAAC,uBAAuB,IAE9B,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CACT;oBACb,oBAAC,MAAM,IACH,OAAO,EAAC,UAAU,EAClB,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EACrB,KAAK,EAAE,QAAQ,CAAC,QAAQ,EACxB,QAAQ,EAAE,CAAC,CAAC,EAAE;4BACV,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;4BACzE,SAAS,CAAC,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAe,EAAE,EAAE,CAAC,CAAC;4BAC5D,IAAI,SAAS,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;gCAC1B,SAAS,CAAC,MAAM,GAAG,EAAE,CAAC;4BAC1B,CAAC;4BACD,IAAI,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;wBAC3E,CAAC,IAEA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CACvF,IAAI,CAAC,EAAE,CAAC,CACJ,oBAAC,QAAQ,IACL,GAAG,EAAE,KAAK,IAAI,EAAE,EAChB,KAAK,EAAE,IAAI,IAEV,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CACf,CACd,CACJ,CACI,CACC;gBACd,oBAAC,WAAW,IACR,OAAO,EAAC,UAAU,EAClB,KAAK,EAAE,MAAM,CAAC,WAAW;oBAEzB,oBAAC,UAAU,IACP,MAAM,QACN,OAAO,EAAC,uBAAuB,IAE9B,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CACP;oBACb,oBAAC,MAAM,IACH,OAAO,EAAC,UAAU,EAClB,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EACrB,KAAK,EAAE,QAAQ,CAAC,MAAM,EACtB,QAAQ,EAAE,CAAC,CAAC,EAAE;4BACV,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;4BACzE,SAAS,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAe,EAAE,EAAE,CAAC,CAAC;4BAC1D,IAAI,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;wBAC3E,CAAC;wBAEA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CACpF,IAAI,CAAC,EAAE,CAAC,CACJ,oBAAC,QAAQ,IACL,GAAG,EAAE,KAAK,IAAI,EAAE,EAChB,KAAK,EAAE,IAAI,IAEV,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CACf,CACd,CACJ;wBACA,CAAC,QAAQ,CAAC,QAAQ,IAAI,oBAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,YAAkB,CACvD,CACC,CACZ;YACN,IAAI,CAAC,2BAA2B,CAAC,iBAAiB,CAAC;SACtD,CAAC;IACN,CAAC;IAED,uBAAuB;QACnB,OAAO;YACH,6BACI,GAAG,EAAC,MAAM,EACV,KAAK,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,IAEvB,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAC/B;YACN,IAAI,CAAC,2BAA2B,CAAC,UAAU,CAAC;SAC/C,CAAC;IACN,CAAC;IAED,YAAY,CAAC,IAA0D;QACnE,IAAI,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YAC3B,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QACrD,CAAC;IACL,CAAC;IAED,QAAQ,CAAC,IAAY;QACjB,IAAI,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YAC3B,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;YACxB,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACrD,CAAC;IACL,CAAC;IAED,MAAM;QACF,OAAO,CACH,6BAAK,KAAK,EAAE,MAAM,CAAC,OAAO;YACtB,6BAAK,KAAK,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE;gBACrD,oBAAC,SAAS,IACN,OAAO,EAAC,UAAU,EAClB,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EACxB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EACtB,QAAQ,QACR,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GACtC,CACA;YACN,6BAAK,KAAK,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,MAAM,EAAE,EAAE,EAAE,IAChE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAC1B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC;gBAC3B,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,CACnE;YACN;gBACI,oBAAC,WAAW,IACR,OAAO,EAAC,UAAU,EAClB,KAAK,EAAE,EAAE,GAAG,MAAM,CAAC,WAAW,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE;oBAE7D,oBAAC,UAAU,QAAE,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAc;oBAC9C,oBAAC,MAAM,IACH,OAAO,EAAC,UAAU,EAClB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EACtB,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,KAAuB,CAAC,EAClE,UAAU,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE;wBAExC,oBAAC,QAAQ,IAAC,KAAK,EAAC,MAAM,IAAE,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAY;wBACrD,oBAAC,QAAQ,IAAC,KAAK,EAAC,UAAU,IAAE,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,CAAY;wBAC7D,oBAAC,QAAQ,IAAC,KAAK,EAAC,iBAAiB,IAAE,IAAI,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAY;wBAC3E,oBAAC,QAAQ,IAAC,KAAK,EAAC,UAAU,IAAE,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,CAAY,CACxD,CACC,CACZ;YACL,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,eAAe,EAAE;YAC3D,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC5D,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,iBAAiB,IAAI,IAAI,CAAC,0BAA0B,EAAE;YAC1E,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,uBAAuB,EAAE,CAC/D,CACT,CAAC;IACN,CAAC;CACJ","sourcesContent":["import React from 'react';\r\n\r\nimport {\r\n InputLabel,\r\n MenuItem,\r\n Select,\r\n TextField,\r\n FormControl,\r\n FormControlLabel,\r\n Checkbox,\r\n type Theme,\r\n} from '@mui/material';\r\n\r\nimport { convertCronToText } from './cronText';\r\n\r\nimport { I18n } from '../../i18n';\r\n\r\nconst styles: Record<string, React.CSSProperties> = {\r\n mainDiv: {\r\n width: '100%',\r\n height: '100%',\r\n overflow: 'auto',\r\n },\r\n formControl: {\r\n margin: 0,\r\n minWidth: 120,\r\n },\r\n formControlMarginRight: {\r\n marginRight: 5,\r\n },\r\n formControlPaddingTop: {\r\n paddingTop: 6.2,\r\n },\r\n};\r\n\r\ntype SimpleCronType = 'once' | 'interval' | 'intervalBetween' | 'specific';\r\nconst PERIODIC = {\r\n once: 'once',\r\n interval: 'interval',\r\n intervalBetween: 'intervalBetween',\r\n specific: 'specific',\r\n};\r\nconst PERIODIC_TYPES = {\r\n seconds: 'seconds',\r\n minutes: 'minutes',\r\n // hours: 'hours',\r\n};\r\nconst WEEKDAYS = [\r\n 'ra_Sunday',\r\n 'ra_Monday',\r\n 'ra_Tuesday',\r\n 'ra_Wednesday',\r\n 'ra_Thursday',\r\n 'ra_Friday',\r\n 'ra_Saturday',\r\n 'ra_Sunday',\r\n];\r\n\r\nfunction padding(num: number): string {\r\n if (num < 10) {\r\n return `0${num}`;\r\n }\r\n\r\n return `${num}`;\r\n}\r\nconst DEFAULT_STATE = {\r\n mode: 'interval',\r\n interval: {\r\n period: 1,\r\n unit: PERIODIC_TYPES.minutes,\r\n },\r\n};\r\n\r\ninterface SimpleCronProps {\r\n cronExpression?: string;\r\n onChange: (cron: string) => void;\r\n language: ioBroker.Languages;\r\n}\r\n\r\ninterface SimpleCronState {\r\n extended: boolean;\r\n cron: string;\r\n mode: SimpleCronType;\r\n once: {\r\n time: string;\r\n date: string;\r\n // weekdays?: number[];\r\n };\r\n interval: {\r\n period: number;\r\n unit: string;\r\n minutes?: number; // if extended\r\n hours?: number; // if extended\r\n };\r\n intervalBetween: {\r\n period: number;\r\n unit: string;\r\n timeFrom: number;\r\n timeTo: number;\r\n weekdays: number[];\r\n minutes?: number; // if extended\r\n hours?: number; // if extended\r\n };\r\n specific: {\r\n time: string;\r\n weekdays: number[];\r\n };\r\n}\r\n\r\ninterface CronStructure {\r\n seconds: string | null;\r\n minutes: string;\r\n hours: string;\r\n date: string;\r\n months: string;\r\n dow: string;\r\n}\r\n\r\nfunction text2weekdays(text: string): number[] {\r\n if (text === '*') {\r\n return [0, 1, 2, 3, 4, 5, 6];\r\n }\r\n\r\n const parts = text.split(',');\r\n const list: number[] = [];\r\n parts.forEach(part => {\r\n const _parts = part.split('-');\r\n if (_parts.length === 2) {\r\n const start = parseInt(_parts[0], 10);\r\n const end = parseInt(_parts[1], 10);\r\n for (let day = start; day <= end; day++) {\r\n if (!list.includes(day === 7 ? 0 : day)) {\r\n list.push(day === 7 ? 0 : day);\r\n }\r\n }\r\n } else {\r\n if (part === '7') {\r\n part = '0';\r\n }\r\n const numPart = parseInt(part, 10);\r\n if (!list.includes(numPart)) {\r\n list.push(numPart);\r\n }\r\n }\r\n });\r\n list.sort();\r\n return list;\r\n}\r\n\r\nexport function cron2state(cron: string, force?: boolean): Partial<SimpleCronState> | null {\r\n cron = cron.replace(/['\"]/g, '').trim();\r\n const cronParts = cron.split(' ');\r\n let options: CronStructure;\r\n let state: Partial<SimpleCronState> | null = null;\r\n\r\n if (cronParts.length === 6) {\r\n options = {\r\n seconds: cronParts[0] || '*',\r\n minutes: cronParts[1] || '*',\r\n hours: cronParts[2] || '*',\r\n date: cronParts[3] || '*',\r\n months: cronParts[4] || '*',\r\n dow: cronParts[5] || '*',\r\n };\r\n } else {\r\n options = {\r\n seconds: null,\r\n minutes: cronParts[0] || '*',\r\n hours: cronParts[1] || '*',\r\n date: cronParts[2] || '*',\r\n months: cronParts[3] || '*',\r\n dow: cronParts[4] || '*',\r\n };\r\n }\r\n\r\n // * * * * *\r\n if (\r\n options.seconds === null &&\r\n options.minutes === '*' &&\r\n options.hours === '*' &&\r\n options.date === '*' &&\r\n options.months === '*' &&\r\n (options.dow === '*' || force)\r\n ) {\r\n state = {\r\n mode: 'interval',\r\n interval: {\r\n period: 1,\r\n unit: PERIODIC_TYPES.minutes,\r\n },\r\n };\r\n } // * * * * * *\r\n\r\n if (\r\n options.seconds === '*' &&\r\n options.minutes === '*' &&\r\n options.hours === '*' &&\r\n options.date === '*' &&\r\n options.months === '*' &&\r\n (options.dow === '*' || force)\r\n ) {\r\n state = {\r\n mode: 'interval',\r\n interval: {\r\n period: 1,\r\n unit: PERIODIC_TYPES.seconds,\r\n },\r\n };\r\n } else if (\r\n options.seconds === null &&\r\n options.minutes.includes('/') &&\r\n options.hours === '*' &&\r\n options.date === '*' &&\r\n options.months === '*' &&\r\n (options.dow === '*' || force)\r\n ) {\r\n // */n * * * *\r\n state = {\r\n mode: 'interval',\r\n interval: {\r\n period: parseInt(options.minutes.split('/')[1], 10),\r\n unit: PERIODIC_TYPES.minutes,\r\n },\r\n };\r\n } else if (\r\n options.seconds !== null &&\r\n options.seconds.includes('/') &&\r\n options.minutes === '*' &&\r\n options.hours === '*' &&\r\n options.date === '*' &&\r\n options.months === '*' &&\r\n (options.dow === '*' || force)\r\n ) {\r\n // */n * * * * *\r\n state = {\r\n mode: 'interval',\r\n interval: {\r\n period: parseInt(options.seconds.split('/')[1], 10),\r\n unit: PERIODIC_TYPES.seconds,\r\n },\r\n };\r\n } else if (\r\n options.seconds !== null &&\r\n options.seconds.includes('/') &&\r\n options.minutes === '*' &&\r\n options.hours.includes('-') &&\r\n options.date === '*' &&\r\n options.months === '*' &&\r\n (options.dow === '*' || force)\r\n ) {\r\n // */n * 0-23 * * 1-7 or */n * 0-23 * * *\r\n state = {\r\n mode: 'intervalBetween',\r\n intervalBetween: {\r\n period: parseInt(options.seconds.split('/')[1], 10),\r\n unit: PERIODIC_TYPES.seconds,\r\n timeFrom: parseInt(options.hours.split('-')[0], 10),\r\n timeTo: parseInt(options.hours.split('-')[1], 10),\r\n weekdays: text2weekdays(options.dow),\r\n },\r\n };\r\n } else if (\r\n options.seconds === null &&\r\n options.minutes.includes('/') &&\r\n options.hours.includes('-') &&\r\n options.date === '*' &&\r\n options.months === '*' &&\r\n (options.dow === '*' || force)\r\n ) {\r\n // */n 0-23 * * 1-7 or */n 0-23 * * *\r\n state = {\r\n mode: 'intervalBetween',\r\n intervalBetween: {\r\n period: parseInt(options.minutes.split('/')[1], 10),\r\n unit: PERIODIC_TYPES.minutes,\r\n timeFrom: parseInt(options.hours.split('-')[0], 10),\r\n timeTo: parseInt(options.hours.split('-')[1], 10),\r\n weekdays: text2weekdays(options.dow),\r\n },\r\n };\r\n } else if (\r\n options.seconds === null &&\r\n parseInt(options.minutes, 10).toString() === options.minutes &&\r\n parseInt(options.hours, 10).toString() === options.hours &&\r\n options.date === '*' &&\r\n options.months === '*' &&\r\n (options.dow === '*' || force)\r\n ) {\r\n // m h * * 1-7 or m h * * *\r\n state = {\r\n mode: 'specific',\r\n specific: {\r\n time: `${padding(parseInt(options.hours, 10))}:${padding(parseInt(options.minutes, 10))}`,\r\n weekdays: text2weekdays(options.dow),\r\n },\r\n };\r\n } else if (\r\n options.seconds === null &&\r\n parseInt(options.minutes, 10).toString() === options.minutes &&\r\n parseInt(options.hours, 10).toString() === options.hours &&\r\n parseInt(options.date, 10).toString() === options.date &&\r\n parseInt(options.months, 10).toString() === options.months &&\r\n (options.dow === '*' || force)\r\n ) {\r\n // m h d M *\r\n state = {\r\n mode: 'once',\r\n once: {\r\n time: `${padding(parseInt(options.hours, 10))}:${padding(parseInt(options.minutes, 10))}`,\r\n date: `${padding(parseInt(options.date, 10))}.${padding(parseInt(options.months, 10))}`,\r\n },\r\n };\r\n }\r\n\r\n return state;\r\n}\r\n\r\nexport class SimpleCron extends React.Component<SimpleCronProps, SimpleCronState> {\r\n constructor(props: SimpleCronProps) {\r\n super(props);\r\n let cron =\r\n typeof props.cronExpression === 'string'\r\n ? props.cronExpression.replace(/^[\"']/, '').replace(/[\"']\\n?$/, '')\r\n : '';\r\n if (cron[0] === '{') {\r\n cron = '';\r\n }\r\n const state = cron2state(cron || '* * * * *', true) || DEFAULT_STATE;\r\n\r\n this.state = {\r\n extended: false,\r\n cron: SimpleCron.state2cron(state as SimpleCronState),\r\n mode: 'interval',\r\n once: {\r\n time: '00:00',\r\n date: '',\r\n },\r\n interval: {\r\n period: 1,\r\n unit: PERIODIC_TYPES.minutes,\r\n },\r\n intervalBetween: {\r\n period: 1,\r\n unit: PERIODIC_TYPES.minutes,\r\n timeFrom: 0,\r\n timeTo: 23,\r\n weekdays: [0, 1, 2, 3, 4, 5, 6],\r\n },\r\n specific: {\r\n time: '00:00',\r\n weekdays: [0, 1, 2, 3, 4, 5, 6],\r\n },\r\n };\r\n Object.assign(this.state, state);\r\n\r\n if (this.state.cron !== props.cronExpression) {\r\n setTimeout(() => props.onChange && props.onChange(this.state.cron), 100);\r\n }\r\n }\r\n\r\n static periodArray2text(list: number[], max: number = 7): string {\r\n max = max || 7;\r\n if (list.length === max) {\r\n return '*';\r\n }\r\n const text = [];\r\n let start = null;\r\n let end = null;\r\n if (!list.length) {\r\n return '_';\r\n }\r\n for (let i = 0; i < list.length; i++) {\r\n if (start === null) {\r\n start = list[i];\r\n end = list[i];\r\n } else if (list[i - 1] + 1 === list[i]) {\r\n end = list[i];\r\n } else {\r\n if (start !== end) {\r\n text.push(`${start}-${end}`);\r\n } else {\r\n text.push(start);\r\n }\r\n start = list[i];\r\n end = list[i];\r\n }\r\n }\r\n if (start !== end) {\r\n text.push(`${start}-${end}`);\r\n } else {\r\n text.push(start);\r\n }\r\n return text.join(',');\r\n }\r\n\r\n static text2weekdays(text: string): number[] {\r\n return text2weekdays(text);\r\n }\r\n\r\n static state2cron(state: Partial<SimpleCronState>): string {\r\n let cron = '* * * * *';\r\n if (state.mode === 'interval') {\r\n const settings = state.interval || {\r\n period: 1,\r\n unit: PERIODIC_TYPES.minutes,\r\n };\r\n if (settings.period !== undefined && settings.period > 60) {\r\n settings.period = 60;\r\n }\r\n if (settings.period !== undefined && settings.period < 1) {\r\n settings.period = 1;\r\n }\r\n\r\n if (settings.minutes !== undefined && settings.minutes !== null && settings.minutes > 60) {\r\n settings.minutes = 60;\r\n }\r\n if (settings.minutes !== undefined && settings.minutes !== null && settings.minutes < 1) {\r\n settings.minutes = 1;\r\n }\r\n\r\n if (settings.hours !== undefined && settings.hours !== null && settings.hours > 24) {\r\n settings.hours = 24;\r\n }\r\n if (settings.hours !== undefined && settings.hours !== null && settings.hours < 1) {\r\n settings.hours = 1;\r\n }\r\n\r\n if (state.extended) {\r\n cron = `${settings.minutes !== undefined && settings.minutes !== null && settings.minutes > 1 ? `*/${settings.minutes}` : '*'} ${settings.hours !== undefined && settings.hours !== null && settings.hours > 1 ? `*/${settings.hours}` : '*'} * * *`;\r\n } else {\r\n switch (settings.unit) {\r\n case PERIODIC_TYPES.seconds:\r\n cron = `${settings.period > 1 ? `*/${settings.period}` : '*'} * * * * *`;\r\n break;\r\n case PERIODIC_TYPES.minutes:\r\n cron = `${settings.period > 1 ? `*/${settings.period}` : '*'} * * * *`;\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n } else if (state.mode === 'intervalBetween') {\r\n const settings = state.intervalBetween || {\r\n period: 1,\r\n unit: PERIODIC_TYPES.minutes,\r\n timeFrom: 0,\r\n timeTo: 24,\r\n weekdays: [0, 1, 2, 3, 4, 5, 6],\r\n };\r\n let hours;\r\n settings.timeFrom = settings.timeFrom || 0;\r\n settings.timeTo = settings.timeTo === undefined ? 24 : settings.timeTo;\r\n if (settings.timeFrom !== 0 && settings.timeTo === 24) {\r\n settings.timeTo = 23;\r\n }\r\n if (settings.timeFrom === 0 && settings.timeTo === 24) {\r\n hours = '*';\r\n } else {\r\n hours = settings.timeFrom !== settings.timeTo ? `${settings.timeFrom}-${settings.timeTo}` : '*';\r\n }\r\n if (settings.period > 60) {\r\n settings.period = 60;\r\n }\r\n if (settings.period < 1) {\r\n settings.period = 1;\r\n }\r\n settings.unit = settings.unit || PERIODIC_TYPES.minutes;\r\n switch (settings.unit) {\r\n case PERIODIC_TYPES.seconds:\r\n cron = `${settings.period > 1 ? `*/${settings.period}` : '*'} * ${hours} * * ${this.periodArray2text(settings.weekdays)}`;\r\n break;\r\n case PERIODIC_TYPES.minutes:\r\n cron = `${settings.period > 1 ? `*/${settings.period}` : '*'} ${hours} * * ${this.periodArray2text(settings.weekdays)}`;\r\n break;\r\n default:\r\n break;\r\n }\r\n } else if (state.mode === 'specific') {\r\n const settings = state.specific || {\r\n time: '00:00',\r\n weekdays: [0, 1, 2, 3, 4, 5, 6],\r\n };\r\n const parts = (settings.time || '00:00').split(':');\r\n let minutes = parseInt(parts[1], 10) || 0;\r\n if (minutes > 59) {\r\n minutes = 59;\r\n }\r\n if (minutes < 0) {\r\n minutes = 0;\r\n }\r\n let hours = parseInt(parts[0], 10) || 0;\r\n if (hours > 23) {\r\n hours = 59;\r\n }\r\n if (hours < 0) {\r\n hours = 0;\r\n }\r\n\r\n cron = `${minutes} ${hours} * * ${this.periodArray2text(settings.weekdays || [])}`;\r\n } else if (state.mode === 'once') {\r\n const settings = state.once || {\r\n time: '00:00',\r\n date: '',\r\n };\r\n if (!settings.date) {\r\n settings.date = `${new Date().getDate()}.${padding(new Date().getMonth() + 1)}`;\r\n }\r\n const parts = (settings.time || '00:00').split(':');\r\n const partsDate = settings.date.split('.');\r\n let minutes = parseInt(parts[1], 10) || 0;\r\n if (minutes > 59) {\r\n minutes = 59;\r\n }\r\n if (minutes < 0) {\r\n minutes = 0;\r\n }\r\n let hours = parseInt(parts[0], 10) || 0;\r\n if (hours > 23) {\r\n hours = 59;\r\n }\r\n if (hours < 0) {\r\n hours = 0;\r\n }\r\n let date = parseInt(partsDate[0], 10) || 1;\r\n if (date > 31) {\r\n date = 31;\r\n }\r\n if (date < 1) {\r\n hours = 1;\r\n }\r\n let month = parseInt(partsDate[1], 10) || 1;\r\n if (month > 12) {\r\n month = 12;\r\n }\r\n if (month < 1) {\r\n month = 1;\r\n }\r\n\r\n cron = `${minutes} ${hours} ${date} ${month} *`;\r\n }\r\n return cron;\r\n }\r\n\r\n recalcCron(): void {\r\n this.onChange(SimpleCron.state2cron(this.state));\r\n }\r\n\r\n getControlsWeekdaysElements(type: 'intervalBetween' | 'specific'): React.JSX.Element {\r\n const settings = type === 'intervalBetween' ? this.state.intervalBetween : this.state.specific;\r\n return (\r\n <div\r\n key=\"weekdays\"\r\n style={{ paddingLeft: 8, width: 'calc(100% - 8px)', maxWidth: 600 }}\r\n >\r\n <h5>{I18n.t('ra_On weekdays')}</h5>\r\n {[1, 2, 3, 4, 5, 6, 0].map(day => (\r\n <FormControlLabel\r\n key={WEEKDAYS[day]}\r\n control={\r\n <Checkbox\r\n checked={settings.weekdays.includes(day)}\r\n onChange={e => {\r\n const _settings = JSON.parse(JSON.stringify(this.state[type]));\r\n const pos = _settings.weekdays.indexOf(day);\r\n if (e.target.checked) {\r\n if (pos === -1) {\r\n _settings.weekdays.push(day);\r\n }\r\n } else {\r\n if (pos !== -1) {\r\n _settings.weekdays.splice(pos, 1);\r\n }\r\n }\r\n _settings.weekdays.sort();\r\n if (type === 'intervalBetween') {\r\n this.setState({ intervalBetween: _settings }, () => this.recalcCron());\r\n } else {\r\n this.setState({ specific: _settings }, () => this.recalcCron());\r\n }\r\n }}\r\n value={day.toString()}\r\n />\r\n }\r\n label={I18n.t(WEEKDAYS[day])}\r\n />\r\n ))}\r\n </div>\r\n );\r\n }\r\n\r\n getControlsPeriodElements(type: 'interval' | 'intervalBetween'): React.JSX.Element {\r\n const settings = type === 'interval' ? this.state.interval : this.state.intervalBetween;\r\n\r\n if (this.state.extended) {\r\n return (\r\n <div\r\n key=\"period\"\r\n style={{ paddingLeft: 8, display: 'inline-block' }}\r\n >\r\n <h5 style={{ marginBottom: 5 }}>{I18n.t('sc_period')}</h5>\r\n <TextField\r\n variant=\"standard\"\r\n style={{ marginTop: 0, marginBottom: 0, verticalAlign: 'bottom' }}\r\n key=\"value\"\r\n label={I18n.t('sc_minutes')}\r\n value={settings.minutes}\r\n onChange={e => {\r\n const _settings = JSON.parse(JSON.stringify(this.state[type]));\r\n _settings.minutes = parseInt(e.target.value, 10);\r\n if (_settings.minutes < 1) {\r\n _settings.minutes = 1;\r\n }\r\n if (type === 'interval') {\r\n this.setState({ interval: _settings }, () => this.recalcCron());\r\n } else {\r\n this.setState({ intervalBetween: _settings }, () => this.recalcCron());\r\n }\r\n }}\r\n slotProps={{\r\n htmlInput: {\r\n min: 1,\r\n max: 60,\r\n },\r\n inputLabel: {\r\n shrink: true,\r\n },\r\n }}\r\n type=\"number\"\r\n margin=\"normal\"\r\n />\r\n <TextField\r\n variant=\"standard\"\r\n style={{ marginTop: 0, marginBottom: 0, verticalAlign: 'bottom' }}\r\n key=\"value\"\r\n label={I18n.t('sc_hours')}\r\n value={settings.hours}\r\n onChange={e => {\r\n const _settings = JSON.parse(JSON.stringify(this.state[type]));\r\n _settings.hours = parseInt(e.target.value, 10);\r\n if (_settings.hours < 1) {\r\n _settings.hours = 1;\r\n }\r\n if (type === 'interval') {\r\n this.setState({ interval: _settings }, () => this.recalcCron());\r\n } else {\r\n this.setState({ intervalBetween: _settings }, () => this.recalcCron());\r\n }\r\n }}\r\n slotProps={{\r\n htmlInput: {\r\n min: 1,\r\n max: 24,\r\n },\r\n inputLabel: {\r\n shrink: true,\r\n },\r\n }}\r\n type=\"number\"\r\n margin=\"normal\"\r\n />\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div\r\n key=\"period\"\r\n style={{ paddingLeft: 8, display: 'inline-block' }}\r\n >\r\n <h5 style={{ marginBottom: 5 }}>{I18n.t('sc_period')}</h5>\r\n <TextField\r\n variant=\"standard\"\r\n style={{ marginTop: 0, marginBottom: 0, verticalAlign: 'bottom' }}\r\n key=\"value\"\r\n label={I18n.t('sc_every')}\r\n value={settings.period}\r\n onChange={e => {\r\n const _settings = JSON.parse(JSON.stringify(this.state[type]));\r\n _settings.period = parseInt(e.target.value, 10);\r\n if (_settings.period < 1) {\r\n _settings.period = 1;\r\n }\r\n if (type === 'interval') {\r\n this.setState({ interval: _settings }, () => this.recalcCron());\r\n } else {\r\n this.setState({ intervalBetween: _settings }, () => this.recalcCron());\r\n }\r\n }}\r\n slotProps={{\r\n htmlInput: {\r\n min: 1,\r\n max: 60,\r\n },\r\n inputLabel: {\r\n shrink: true,\r\n },\r\n }}\r\n type=\"number\"\r\n margin=\"normal\"\r\n />\r\n <Select\r\n variant=\"standard\"\r\n style={{ verticalAlign: 'bottom' }}\r\n value={settings.unit}\r\n onChange={e => {\r\n const _settings = JSON.parse(JSON.stringify(this.state[type]));\r\n _settings.unit = e.target.value;\r\n if (type === 'interval') {\r\n this.setState({ interval: _settings }, () => this.recalcCron());\r\n } else {\r\n this.setState({ intervalBetween: _settings }, () => this.recalcCron());\r\n }\r\n }}\r\n >\r\n <MenuItem value=\"seconds\">{I18n.t('sc_seconds')}</MenuItem>)\r\n <MenuItem value=\"minutes\">{I18n.t('sc_minutes')}</MenuItem>)\r\n </Select>\r\n </div>\r\n );\r\n }\r\n\r\n getControlsTime(type: 'once' | 'specific'): React.JSX.Element {\r\n const settings = type === 'once' ? this.state.once : this.state.specific;\r\n return (\r\n <FormControl\r\n variant=\"standard\"\r\n sx={{\r\n ...styles.formControl,\r\n '&.MuiFormControl-root': styles.formControlMarginRight,\r\n }}\r\n >\r\n <TextField\r\n variant=\"standard\"\r\n key=\"at\"\r\n label={I18n.t('sc_time')}\r\n value={settings.time}\r\n type=\"time\"\r\n sx={(theme: Theme) => ({\r\n '& input[type=\"time\"]::-webkit-calendar-picker-indicator': {\r\n filter: theme.palette.mode === 'dark' ? 'invert(80%)' : undefined,\r\n },\r\n })}\r\n onChange={e => {\r\n const _settings = JSON.parse(JSON.stringify(this.state[type]));\r\n _settings.time = e.target.value;\r\n if (type === 'once') {\r\n this.setState({ once: _settings }, () => this.recalcCron());\r\n } else {\r\n this.setState({ specific: _settings }, () => this.recalcCron());\r\n }\r\n }}\r\n slotProps={{\r\n inputLabel: {\r\n shrink: true,\r\n },\r\n }}\r\n margin=\"normal\"\r\n />\r\n </FormControl>\r\n );\r\n }\r\n\r\n getControlsDate(): React.JSX.Element {\r\n const settings = this.state.once;\r\n\r\n if (!settings.date) {\r\n const d = new Date();\r\n settings.date = `${d.getDate()}.${padding(d.getMonth() + 1)}`;\r\n }\r\n\r\n // <InputLabel htmlFor=\"formatted-text-mask-input\">{I18n.t('sc_at')}</InputLabel>\r\n return (\r\n <FormControl\r\n variant=\"standard\"\r\n style={styles.formControl}\r\n >\r\n <TextField\r\n variant=\"standard\"\r\n key=\"date\"\r\n label={I18n.t('sc_date')}\r\n value={settings.date}\r\n type=\"text\"\r\n slotProps={{\r\n htmlInput: {\r\n style: styles.formControlPaddingTop,\r\n },\r\n inputLabel: {\r\n shrink: true,\r\n },\r\n }}\r\n onChange={e => {\r\n const _settings = JSON.parse(JSON.stringify(this.state.once));\r\n _settings.date = e.target.value;\r\n this.setState({ once: _settings }, () => this.recalcCron());\r\n }}\r\n margin=\"normal\"\r\n />\r\n </FormControl>\r\n );\r\n }\r\n\r\n getOnceElements(): React.JSX.Element {\r\n return (\r\n <div style={{ marginLeft: 8 }}>\r\n {this.getControlsTime('once')}\r\n {this.getControlsDate()}\r\n </div>\r\n );\r\n }\r\n\r\n getIntervalElements(): React.JSX.Element {\r\n return this.getControlsPeriodElements('interval');\r\n }\r\n\r\n getIntervalBetweenElements(): React.JSX.Element[] {\r\n const settings = this.state.intervalBetween;\r\n return [\r\n this.getControlsPeriodElements('intervalBetween'),\r\n <div\r\n key=\"between\"\r\n style={{ paddingLeft: 8, display: 'inline-block', verticalAlign: 'top' }}\r\n >\r\n <h5 style={{ marginBottom: 5 }}>{I18n.t('sc_hours')}</h5>\r\n <FormControl\r\n variant=\"standard\"\r\n style={styles.formControl}\r\n >\r\n <InputLabel\r\n shrink\r\n htmlFor=\"age-label-placeholder\"\r\n >\r\n {I18n.t('sc_from')}\r\n </InputLabel>\r\n <Select\r\n variant=\"standard\"\r\n style={{ width: 100 }}\r\n value={settings.timeFrom}\r\n onChange={e => {\r\n const _settings = JSON.parse(JSON.stringify(this.state.intervalBetween));\r\n _settings.timeFrom = parseInt(e.target.value as string, 10);\r\n if (_settings.timeTo === 24) {\r\n _settings.timeTo = 23;\r\n }\r\n this.setState({ intervalBetween: _settings }, () => this.recalcCron());\r\n }}\r\n >\r\n {[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23].map(\r\n hour => (\r\n <MenuItem\r\n key={`B_${hour}`}\r\n value={hour}\r\n >\r\n {`${padding(hour)}:00`}\r\n </MenuItem>\r\n ),\r\n )}\r\n </Select>\r\n </FormControl>\r\n <FormControl\r\n variant=\"standard\"\r\n style={styles.formControl}\r\n >\r\n <InputLabel\r\n shrink\r\n htmlFor=\"age-label-placeholder\"\r\n >\r\n {I18n.t('sc_to')}\r\n </InputLabel>\r\n <Select\r\n variant=\"standard\"\r\n style={{ width: 100 }}\r\n value={settings.timeTo}\r\n onChange={e => {\r\n const _settings = JSON.parse(JSON.stringify(this.state.intervalBetween));\r\n _settings.timeTo = parseInt(e.target.value as string, 10);\r\n this.setState({ intervalBetween: _settings }, () => this.recalcCron());\r\n }}\r\n >\r\n {[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23].map(\r\n hour => (\r\n <MenuItem\r\n key={`A_${hour}`}\r\n value={hour}\r\n >\r\n {`${padding(hour)}:00`}\r\n </MenuItem>\r\n ),\r\n )}\r\n {!settings.timeFrom && <MenuItem value={24}>00:00</MenuItem>}\r\n </Select>\r\n </FormControl>\r\n </div>,\r\n this.getControlsWeekdaysElements('intervalBetween'),\r\n ];\r\n }\r\n\r\n getSpecificTimeElements(): React.JSX.Element[] {\r\n return [\r\n <div\r\n key=\"time\"\r\n style={{ marginLeft: 8 }}\r\n >\r\n {this.getControlsTime('specific')}\r\n </div>,\r\n this.getControlsWeekdaysElements('specific'),\r\n ];\r\n }\r\n\r\n onModeChange(mode: 'once' | 'interval' | 'intervalBetween' | 'specific'): void {\r\n if (mode !== this.state.mode) {\r\n this.setState({ mode }, () => this.recalcCron());\r\n }\r\n }\r\n\r\n onChange(cron: string): void {\r\n if (cron !== this.state.cron) {\r\n this.setState({ cron });\r\n this.props.onChange && this.props.onChange(cron);\r\n }\r\n }\r\n\r\n render(): React.JSX.Element {\r\n return (\r\n <div style={styles.mainDiv}>\r\n <div style={{ paddingLeft: 8, width: 'calc(100% - 8px)' }}>\r\n <TextField\r\n variant=\"standard\"\r\n style={{ width: '100%' }}\r\n value={this.state.cron}\r\n disabled\r\n error={this.state.cron.includes('_')}\r\n />\r\n </div>\r\n <div style={{ paddingLeft: 8, width: 'calc(100% - 8px)', height: 60 }}>\r\n {this.state.cron.includes('_')\r\n ? I18n.t('sc_invalid_cron')\r\n : convertCronToText(this.state.cron, this.props.language || 'en')}\r\n </div>\r\n <div>\r\n <FormControl\r\n variant=\"standard\"\r\n style={{ ...styles.formControl, marginLeft: 8, marginTop: 8 }}\r\n >\r\n <InputLabel>{I18n.t('ra_Repeat')}</InputLabel>\r\n <Select\r\n variant=\"standard\"\r\n value={this.state.mode}\r\n onChange={e => this.onModeChange(e.target.value as SimpleCronType)}\r\n inputProps={{ name: 'mode', id: 'mode' }}\r\n >\r\n <MenuItem value=\"once\">{I18n.t('sc_once')}</MenuItem>\r\n <MenuItem value=\"interval\">{I18n.t('sc_interval')}</MenuItem>\r\n <MenuItem value=\"intervalBetween\">{I18n.t('sc_intervalBetween')}</MenuItem>\r\n <MenuItem value=\"specific\">{I18n.t('sc_specific')}</MenuItem>\r\n </Select>\r\n </FormControl>\r\n </div>\r\n {this.state.mode === PERIODIC.once && this.getOnceElements()}\r\n {this.state.mode === 'interval' && this.getIntervalElements()}\r\n {this.state.mode === 'intervalBetween' && this.getIntervalBetweenElements()}\r\n {this.state.mode === 'specific' && this.getSpecificTimeElements()}\r\n </div>\r\n );\r\n }\r\n}\r\n"]}
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ interface TabContainerProps {
3
+ elevation?: number;
4
+ overflow?: string;
5
+ styles?: {
6
+ root?: React.CSSProperties;
7
+ container?: React.CSSProperties;
8
+ };
9
+ onKeyDown?: (event: React.KeyboardEvent<HTMLDivElement>) => void;
10
+ tabIndex?: number;
11
+ /** The content of the component. */
12
+ children: React.ReactNode;
13
+ }
14
+ export declare function TabContainer(props: TabContainerProps): React.JSX.Element;
15
+ export {};
@@ -0,0 +1,23 @@
1
+ import React from 'react';
2
+ import { Grid2, Paper } from '@mui/material';
3
+ const styles = {
4
+ root: {
5
+ width: '100%',
6
+ height: '100%',
7
+ },
8
+ overflowHidden: {
9
+ overflow: 'hidden',
10
+ },
11
+ container: {
12
+ height: '100%',
13
+ },
14
+ };
15
+ export function TabContainer(props) {
16
+ return (React.createElement(Paper, { elevation: !Number.isNaN(props.elevation) ? props.elevation : 1, style: {
17
+ ...styles.root,
18
+ ...(props.styles?.root || undefined),
19
+ ...(props.overflow !== 'visible' ? styles.overflowHidden : undefined),
20
+ }, onKeyDown: props.onKeyDown, tabIndex: props.tabIndex },
21
+ React.createElement(Grid2, { container: true, direction: "column", wrap: "nowrap", sx: styles.container }, props.children)));
22
+ }
23
+ //# sourceMappingURL=TabContainer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TabContainer.js","sourceRoot":"./src/","sources":["Components/TabContainer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAE7C,MAAM,MAAM,GAAwC;IAChD,IAAI,EAAE;QACF,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,MAAM;KACjB;IACD,cAAc,EAAE;QACZ,QAAQ,EAAE,QAAQ;KACrB;IACD,SAAS,EAAE;QACP,MAAM,EAAE,MAAM;KACjB;CACJ,CAAC;AAiBF,MAAM,UAAU,YAAY,CAAC,KAAwB;IACjD,OAAO,CACH,oBAAC,KAAK,IACF,SAAS,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAC/D,KAAK,EAAE;YACH,GAAG,MAAM,CAAC,IAAI;YACd,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,IAAI,SAAS,CAAC;YACpC,GAAG,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC;SACxE,EACD,SAAS,EAAE,KAAK,CAAC,SAAS,EAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ;QAExB,oBAAC,KAAK,IACF,SAAS,QACT,SAAS,EAAC,QAAQ,EAClB,IAAI,EAAC,QAAQ,EACb,EAAE,EAAE,MAAM,CAAC,SAAS,IAEnB,KAAK,CAAC,QAAQ,CACX,CACJ,CACX,CAAC;AACN,CAAC","sourcesContent":["import React from 'react';\r\n\r\nimport { Grid2, Paper } from '@mui/material';\r\n\r\nconst styles: Record<string, React.CSSProperties> = {\r\n root: {\r\n width: '100%',\r\n height: '100%',\r\n },\r\n overflowHidden: {\r\n overflow: 'hidden',\r\n },\r\n container: {\r\n height: '100%',\r\n },\r\n};\r\n\r\ninterface TabContainerProps {\r\n /* The elevation of the tab container. */\r\n elevation?: number;\r\n /* Set to 'visible' show the overflow. */\r\n overflow?: string;\r\n styles?: {\r\n root?: React.CSSProperties;\r\n container?: React.CSSProperties;\r\n };\r\n onKeyDown?: (event: React.KeyboardEvent<HTMLDivElement>) => void;\r\n tabIndex?: number;\r\n /** The content of the component. */\r\n children: React.ReactNode;\r\n}\r\n\r\nexport function TabContainer(props: TabContainerProps): React.JSX.Element {\r\n return (\r\n <Paper\r\n elevation={!Number.isNaN(props.elevation) ? props.elevation : 1}\r\n style={{\r\n ...styles.root,\r\n ...(props.styles?.root || undefined),\r\n ...(props.overflow !== 'visible' ? styles.overflowHidden : undefined),\r\n }}\r\n onKeyDown={props.onKeyDown}\r\n tabIndex={props.tabIndex}\r\n >\r\n <Grid2\r\n container\r\n direction=\"column\"\r\n wrap=\"nowrap\"\r\n sx={styles.container}\r\n >\r\n {props.children}\r\n </Grid2>\r\n </Paper>\r\n );\r\n}\r\n"]}
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ interface TabContentProps {
3
+ /** The content of the component. */
4
+ children: React.JSX.Element | (React.JSX.Element | null | React.JSX.Element[])[];
5
+ /** Overflow behavior */
6
+ overflow?: 'auto';
7
+ style?: React.CSSProperties;
8
+ ref?: React.RefObject<HTMLDivElement>;
9
+ }
10
+ export declare function TabContent(props: TabContentProps): React.JSX.Element;
11
+ export {};
@@ -0,0 +1,20 @@
1
+ // please do not delete React, as without it other projects could not be compiled: ReferenceError: React is not defined
2
+ import React from 'react';
3
+ import { Grid2 } from '@mui/material';
4
+ const styles = {
5
+ root: {
6
+ height: '100%',
7
+ overflow: 'hidden',
8
+ },
9
+ overflowAuto: {
10
+ overflow: 'auto',
11
+ },
12
+ };
13
+ export function TabContent(props) {
14
+ return (React.createElement(Grid2, { sx: {
15
+ ...styles.root,
16
+ ...(props?.style || undefined),
17
+ ...(props.overflow === 'auto' ? styles.overflowAuto : undefined),
18
+ }, ref: props.ref }, props.children));
19
+ }
20
+ //# sourceMappingURL=TabContent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TabContent.js","sourceRoot":"./src/","sources":["Components/TabContent.tsx"],"names":[],"mappings":"AAAA,uHAAuH;AACvH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEtC,MAAM,MAAM,GAAwC;IAChD,IAAI,EAAE;QACF,MAAM,EAAE,MAAM;QACd,QAAQ,EAAE,QAAQ;KACrB;IACD,YAAY,EAAE;QACV,QAAQ,EAAE,MAAM;KACnB;CACJ,CAAC;AAWF,MAAM,UAAU,UAAU,CAAC,KAAsB;IAC7C,OAAO,CACH,oBAAC,KAAK,IACF,EAAE,EAAE;YACA,GAAG,MAAM,CAAC,IAAI;YACd,GAAG,CAAC,KAAK,EAAE,KAAK,IAAI,SAAS,CAAC;YAC9B,GAAG,CAAC,KAAK,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;SACnE,EACD,GAAG,EAAE,KAAK,CAAC,GAAG,IAEb,KAAK,CAAC,QAAQ,CACX,CACX,CAAC;AACN,CAAC","sourcesContent":["// please do not delete React, as without it other projects could not be compiled: ReferenceError: React is not defined\r\nimport React from 'react';\r\nimport { Grid2 } from '@mui/material';\r\n\r\nconst styles: Record<string, React.CSSProperties> = {\r\n root: {\r\n height: '100%',\r\n overflow: 'hidden',\r\n },\r\n overflowAuto: {\r\n overflow: 'auto',\r\n },\r\n};\r\n\r\ninterface TabContentProps {\r\n /** The content of the component. */\r\n children: React.JSX.Element | (React.JSX.Element | null | React.JSX.Element[])[];\r\n /** Overflow behavior */\r\n overflow?: 'auto';\r\n style?: React.CSSProperties;\r\n ref?: React.RefObject<HTMLDivElement>;\r\n}\r\n\r\nexport function TabContent(props: TabContentProps): React.JSX.Element {\r\n return (\r\n <Grid2\r\n sx={{\r\n ...styles.root,\r\n ...(props?.style || undefined),\r\n ...(props.overflow === 'auto' ? styles.overflowAuto : undefined),\r\n }}\r\n ref={props.ref}\r\n >\r\n {props.children}\r\n </Grid2>\r\n );\r\n}\r\n"]}
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ interface TabHeaderProps {
3
+ children: React.ReactNode;
4
+ }
5
+ export declare function TabHeader(props: TabHeaderProps): React.JSX.Element;
6
+ export {};
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ import { Grid2 } from '@mui/material';
3
+ export function TabHeader(props) {
4
+ return (React.createElement(Grid2, { container: true, alignItems: "center" }, props.children));
5
+ }
6
+ //# sourceMappingURL=TabHeader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TabHeader.js","sourceRoot":"./src/","sources":["Components/TabHeader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAMtC,MAAM,UAAU,SAAS,CAAC,KAAqB;IAC3C,OAAO,CACH,oBAAC,KAAK,IACF,SAAS,QACT,UAAU,EAAC,QAAQ,IAElB,KAAK,CAAC,QAAQ,CACX,CACX,CAAC;AACN,CAAC","sourcesContent":["import React from 'react';\r\n\r\nimport { Grid2 } from '@mui/material';\r\n\r\ninterface TabHeaderProps {\r\n children: React.ReactNode;\r\n}\r\n\r\nexport function TabHeader(props: TabHeaderProps): React.JSX.Element {\r\n return (\r\n <Grid2\r\n container\r\n alignItems=\"center\"\r\n >\r\n {props.children}\r\n </Grid2>\r\n );\r\n}\r\n"]}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Copyright 2022-2024, Denis Haev <dogafox@gmail.com>
3
+ *
4
+ * MIT License
5
+ *
6
+ */
7
+ import React, { Component } from 'react';
8
+ interface TableResizeProps {
9
+ name?: string;
10
+ ready?: boolean;
11
+ stickyHeader?: boolean;
12
+ size?: 'small' | 'medium';
13
+ className?: string;
14
+ sx?: Record<string, any>;
15
+ style?: React.CSSProperties;
16
+ initialWidths?: (number | 'auto')[];
17
+ minWidths?: number[];
18
+ dblTitle?: string;
19
+ children?: React.ReactNode;
20
+ }
21
+ export declare class TableResize extends Component<TableResizeProps> {
22
+ private readonly resizerRefTable;
23
+ private resizerActiveIndex;
24
+ private resizerActiveDiv;
25
+ private resizerCurrentWidths;
26
+ private widthFilled;
27
+ private installTimeout;
28
+ private resizerMin;
29
+ private resizerMinNext;
30
+ private resizerPosition;
31
+ private resizerOldWidth;
32
+ private resizerOldWidthNext;
33
+ constructor(props: TableResizeProps);
34
+ componentDidMount(): void;
35
+ componentWillUnmount(): void;
36
+ resizerInstall(): void;
37
+ resizerReset: () => void;
38
+ resizerUninstall(): void;
39
+ resizerApplyWidths(): string | undefined;
40
+ resizerMouseMove: (e: MouseEvent) => void;
41
+ resizerMouseUp: () => void;
42
+ resizerMouseDown: (e: MouseEvent) => void;
43
+ render(): React.JSX.Element;
44
+ }
45
+ export {};
@@ -0,0 +1,204 @@
1
+ /**
2
+ * Copyright 2022-2024, Denis Haev <dogafox@gmail.com>
3
+ *
4
+ * MIT License
5
+ *
6
+ */
7
+ import React, { Component } from 'react';
8
+ import { Table, Skeleton } from '@mui/material';
9
+ export class TableResize extends Component {
10
+ resizerRefTable;
11
+ resizerActiveIndex;
12
+ resizerActiveDiv;
13
+ resizerCurrentWidths;
14
+ widthFilled = false;
15
+ installTimeout = null;
16
+ resizerMin = 0;
17
+ resizerMinNext = 0;
18
+ resizerPosition = 0;
19
+ resizerOldWidth = 0;
20
+ resizerOldWidthNext = 0;
21
+ constructor(props) {
22
+ super(props);
23
+ this.resizerRefTable = React.createRef();
24
+ this.resizerActiveIndex = null;
25
+ this.resizerActiveDiv = null;
26
+ this.resizerCurrentWidths = [];
27
+ }
28
+ componentDidMount() {
29
+ this.resizerInstall();
30
+ }
31
+ componentWillUnmount() {
32
+ this.resizerUninstall();
33
+ }
34
+ resizerInstall() {
35
+ if (this.resizerRefTable.current && !this.resizerRefTable.current._installed) {
36
+ this.resizerRefTable.current._installed = true;
37
+ const ths = this.resizerRefTable.current.querySelectorAll('th');
38
+ const widthsStored = (window._localStorage || window.localStorage).getItem(`App.${this.props.name || 'history'}.table`);
39
+ this.widthFilled = false;
40
+ if (widthsStored) {
41
+ try {
42
+ this.resizerCurrentWidths = JSON.parse(widthsStored);
43
+ this.widthFilled = true;
44
+ }
45
+ catch {
46
+ // ignore
47
+ }
48
+ }
49
+ if (this.widthFilled) {
50
+ if (this.resizerCurrentWidths.length !== ths.length) {
51
+ this.resizerCurrentWidths = [];
52
+ this.widthFilled = false;
53
+ }
54
+ else {
55
+ const tableWidth = this.resizerRefTable.current.offsetWidth;
56
+ let storedWidth = 0;
57
+ for (let w = 0; w < this.resizerCurrentWidths.length; w++) {
58
+ if (window.isFinite(this.resizerCurrentWidths[w])) {
59
+ storedWidth += this.resizerCurrentWidths[w];
60
+ }
61
+ else {
62
+ storedWidth = null;
63
+ break;
64
+ }
65
+ }
66
+ if (storedWidth !== null && Math.abs(storedWidth - tableWidth) > 20) {
67
+ this.resizerCurrentWidths = [];
68
+ this.widthFilled = false;
69
+ }
70
+ }
71
+ }
72
+ for (let i = 0; i < ths.length; i++) {
73
+ !this.widthFilled && this.resizerCurrentWidths.push(ths[i].offsetWidth);
74
+ // last column does need a handle
75
+ if (i < ths.length - 1) {
76
+ const div = window.document.createElement('div');
77
+ div.dataset.index = i.toString();
78
+ div.onmousedown = this.resizerMouseDown;
79
+ div.ondblclick = this.resizerReset;
80
+ div.title = this.props.dblTitle || 'Double click to reset table layout';
81
+ div.className = 'resize-handle';
82
+ ths[i].appendChild(div);
83
+ }
84
+ }
85
+ if (this.widthFilled) {
86
+ this.resizerApplyWidths();
87
+ }
88
+ }
89
+ else {
90
+ this.installTimeout = setTimeout(() => {
91
+ this.installTimeout = null;
92
+ this.resizerInstall();
93
+ }, 100);
94
+ }
95
+ }
96
+ resizerReset = () => {
97
+ for (let c = 0; c < this.resizerCurrentWidths.length; c++) {
98
+ this.resizerCurrentWidths[c] = (this.props.initialWidths || [])[c] || 'auto';
99
+ }
100
+ (window._localStorage || window.localStorage).setItem(`App.${this.props.name || 'history'}.table`, JSON.stringify(this.resizerCurrentWidths));
101
+ this.resizerApplyWidths();
102
+ };
103
+ resizerUninstall() {
104
+ this.installTimeout && clearTimeout(this.installTimeout);
105
+ this.installTimeout = null;
106
+ // resizer
107
+ if (this.resizerRefTable.current && this.resizerRefTable.current._installed) {
108
+ this.resizerRefTable.current._installed = false;
109
+ const ths = this.resizerRefTable.current.querySelectorAll('th');
110
+ for (let i = 0; i < ths.length; i++) {
111
+ const div = ths[i].querySelector('.resize-handle');
112
+ if (div) {
113
+ div.onmousedown = null;
114
+ div.remove();
115
+ }
116
+ }
117
+ }
118
+ }
119
+ resizerApplyWidths() {
120
+ const gridTemplateColumns = [];
121
+ if (this.resizerCurrentWidths.length) {
122
+ for (let c = 0; c < this.resizerCurrentWidths.length; c++) {
123
+ if (this.resizerCurrentWidths[c]) {
124
+ gridTemplateColumns.push(this.resizerCurrentWidths[c] !== 'auto' ? `${this.resizerCurrentWidths[c]}px` : 'auto');
125
+ }
126
+ else if (this.props.initialWidths && this.props.initialWidths[c]) {
127
+ gridTemplateColumns.push(this.props.initialWidths[c] !== 'auto' ? `${this.props.initialWidths[c]}px` : 'auto');
128
+ }
129
+ else {
130
+ gridTemplateColumns.push('auto');
131
+ }
132
+ }
133
+ }
134
+ else if (this.props.initialWidths) {
135
+ for (let c = 0; c < this.props.initialWidths.length; c++) {
136
+ if (this.props.initialWidths[c]) {
137
+ gridTemplateColumns.push(this.props.initialWidths[c] !== 'auto' ? `${this.props.initialWidths[c]}px` : 'auto');
138
+ }
139
+ else {
140
+ gridTemplateColumns.push('auto');
141
+ }
142
+ }
143
+ }
144
+ if (this.resizerRefTable.current && gridTemplateColumns.length) {
145
+ this.resizerRefTable.current.style.gridTemplateColumns = gridTemplateColumns.join(' ');
146
+ }
147
+ return gridTemplateColumns.length ? gridTemplateColumns.join(' ') : undefined;
148
+ }
149
+ resizerMouseMove = (e) => {
150
+ if (this.resizerActiveDiv && this.resizerActiveIndex !== null) {
151
+ const width = this.resizerOldWidth + e.clientX - this.resizerPosition;
152
+ const widthNext = this.resizerOldWidthNext - e.clientX + this.resizerPosition;
153
+ if ((!this.resizerMin || width > this.resizerMin) &&
154
+ (!this.resizerMinNext || widthNext > this.resizerMinNext)) {
155
+ this.resizerCurrentWidths[this.resizerActiveIndex] = width;
156
+ this.resizerCurrentWidths[this.resizerActiveIndex + 1] = widthNext;
157
+ this.resizerApplyWidths();
158
+ }
159
+ }
160
+ };
161
+ resizerMouseUp = () => {
162
+ (window._localStorage || window.localStorage).setItem(`App.${this.props.name || 'history'}.table`, JSON.stringify(this.resizerCurrentWidths));
163
+ this.resizerActiveIndex = null;
164
+ this.resizerActiveDiv = null;
165
+ window.removeEventListener('mousemove', this.resizerMouseMove);
166
+ window.removeEventListener('mouseup', this.resizerMouseUp);
167
+ };
168
+ resizerMouseDown = (e) => {
169
+ if (this.resizerActiveIndex === null || this.resizerActiveIndex === undefined) {
170
+ console.log(`Mouse down ${e.target?.dataset.index}`);
171
+ this.resizerActiveIndex = parseInt(e.target?.dataset.index || '0', 10);
172
+ this.resizerActiveDiv = e.target;
173
+ this.resizerMin = this.props.minWidths ? this.props.minWidths[this.resizerActiveIndex] : 0;
174
+ this.resizerMinNext = this.props.minWidths ? this.props.minWidths[this.resizerActiveIndex + 1] : 0;
175
+ this.resizerPosition = e.clientX;
176
+ let ths;
177
+ if (this.resizerCurrentWidths[this.resizerActiveIndex] === 'auto') {
178
+ ths = this.resizerRefTable.current?.querySelectorAll('th');
179
+ if (ths) {
180
+ this.resizerCurrentWidths[this.resizerActiveIndex] = ths[this.resizerActiveIndex].offsetWidth;
181
+ }
182
+ }
183
+ if (this.resizerCurrentWidths[this.resizerActiveIndex + 1] === 'auto') {
184
+ ths = ths || this.resizerRefTable.current?.querySelectorAll('th');
185
+ if (ths) {
186
+ this.resizerCurrentWidths[this.resizerActiveIndex + 1] =
187
+ ths[this.resizerActiveIndex + 1].offsetWidth;
188
+ }
189
+ }
190
+ this.resizerOldWidth = this.resizerCurrentWidths[this.resizerActiveIndex];
191
+ this.resizerOldWidthNext = this.resizerCurrentWidths[this.resizerActiveIndex + 1];
192
+ window.addEventListener('mousemove', this.resizerMouseMove);
193
+ window.addEventListener('mouseup', this.resizerMouseUp);
194
+ }
195
+ };
196
+ render() {
197
+ if (this.props.ready === false) {
198
+ return React.createElement(Skeleton, null);
199
+ }
200
+ const style = { gridTemplateColumns: this.resizerApplyWidths() };
201
+ return (React.createElement(Table, { stickyHeader: this.props.stickyHeader, size: this.props.size || 'small', className: this.props.className, sx: this.props.sx, ref: this.resizerRefTable, style: { ...(this.props.style || undefined), ...style } }, this.props.children));
202
+ }
203
+ }
204
+ //# sourceMappingURL=TableResize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableResize.js","sourceRoot":"./src/","sources":["Components/TableResize.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Copyright 2022-2024, Denis Haev <dogafox@gmail.com>\r\n *\r\n * MIT License\r\n *\r\n */\r\nimport React, { Component } from 'react';\r\n\r\nimport { Table, Skeleton } from '@mui/material';\r\n\r\ninterface TableResizeProps {\r\n name?: string;\r\n ready?: boolean;\r\n stickyHeader?: boolean;\r\n size?: 'small' | 'medium';\r\n className?: string;\r\n sx?: Record<string, any>;\r\n style?: React.CSSProperties;\r\n initialWidths?: (number | 'auto')[];\r\n minWidths?: number[];\r\n dblTitle?: string;\r\n children?: React.ReactNode;\r\n}\r\n\r\nexport class TableResize extends Component<TableResizeProps> {\r\n private readonly resizerRefTable: React.RefObject<HTMLTableElement>;\r\n\r\n private resizerActiveIndex: number | null;\r\n\r\n private resizerActiveDiv: HTMLDivElement | null;\r\n\r\n private resizerCurrentWidths: (number | 'auto')[];\r\n\r\n private widthFilled: boolean = false;\r\n\r\n private installTimeout: ReturnType<typeof setTimeout> | null = null;\r\n\r\n private resizerMin: number = 0;\r\n\r\n private resizerMinNext: number = 0;\r\n\r\n private resizerPosition: number = 0;\r\n\r\n private resizerOldWidth: number = 0;\r\n\r\n private resizerOldWidthNext: number = 0;\r\n\r\n constructor(props: TableResizeProps) {\r\n super(props);\r\n this.resizerRefTable = React.createRef();\r\n this.resizerActiveIndex = null;\r\n this.resizerActiveDiv = null;\r\n this.resizerCurrentWidths = [];\r\n }\r\n\r\n componentDidMount(): void {\r\n this.resizerInstall();\r\n }\r\n\r\n componentWillUnmount(): void {\r\n this.resizerUninstall();\r\n }\r\n\r\n resizerInstall(): void {\r\n if (this.resizerRefTable.current && !(this.resizerRefTable.current as any)._installed) {\r\n (this.resizerRefTable.current as any)._installed = true;\r\n const ths = this.resizerRefTable.current.querySelectorAll('th');\r\n\r\n const widthsStored = ((window as any)._localStorage || window.localStorage).getItem(\r\n `App.${this.props.name || 'history'}.table`,\r\n );\r\n this.widthFilled = false;\r\n\r\n if (widthsStored) {\r\n try {\r\n this.resizerCurrentWidths = JSON.parse(widthsStored);\r\n this.widthFilled = true;\r\n } catch {\r\n // ignore\r\n }\r\n }\r\n if (this.widthFilled) {\r\n if (this.resizerCurrentWidths.length !== ths.length) {\r\n this.resizerCurrentWidths = [];\r\n this.widthFilled = false;\r\n } else {\r\n const tableWidth = this.resizerRefTable.current.offsetWidth;\r\n let storedWidth: number | null = 0;\r\n for (let w = 0; w < this.resizerCurrentWidths.length; w++) {\r\n if (window.isFinite(this.resizerCurrentWidths[w] as number)) {\r\n storedWidth += this.resizerCurrentWidths[w] as number;\r\n } else {\r\n storedWidth = null;\r\n break;\r\n }\r\n }\r\n if (storedWidth !== null && Math.abs(storedWidth - tableWidth) > 20) {\r\n this.resizerCurrentWidths = [];\r\n this.widthFilled = false;\r\n }\r\n }\r\n }\r\n\r\n for (let i = 0; i < ths.length; i++) {\r\n !this.widthFilled && this.resizerCurrentWidths.push(ths[i].offsetWidth);\r\n\r\n // last column does need a handle\r\n if (i < ths.length - 1) {\r\n const div = window.document.createElement('div');\r\n div.dataset.index = i.toString();\r\n div.onmousedown = this.resizerMouseDown;\r\n div.ondblclick = this.resizerReset;\r\n div.title = this.props.dblTitle || 'Double click to reset table layout';\r\n div.className = 'resize-handle';\r\n ths[i].appendChild(div);\r\n }\r\n }\r\n if (this.widthFilled) {\r\n this.resizerApplyWidths();\r\n }\r\n } else {\r\n this.installTimeout = setTimeout(() => {\r\n this.installTimeout = null;\r\n this.resizerInstall();\r\n }, 100);\r\n }\r\n }\r\n\r\n resizerReset = (): void => {\r\n for (let c = 0; c < this.resizerCurrentWidths.length; c++) {\r\n this.resizerCurrentWidths[c] = (this.props.initialWidths || [])[c] || 'auto';\r\n }\r\n\r\n ((window as any)._localStorage || window.localStorage).setItem(\r\n `App.${this.props.name || 'history'}.table`,\r\n JSON.stringify(this.resizerCurrentWidths),\r\n );\r\n this.resizerApplyWidths();\r\n };\r\n\r\n resizerUninstall(): void {\r\n this.installTimeout && clearTimeout(this.installTimeout);\r\n this.installTimeout = null;\r\n\r\n // resizer\r\n if (this.resizerRefTable.current && (this.resizerRefTable.current as any)._installed) {\r\n (this.resizerRefTable.current as any)._installed = false;\r\n const ths = this.resizerRefTable.current.querySelectorAll('th');\r\n for (let i = 0; i < ths.length; i++) {\r\n const div: HTMLDivElement | null = ths[i].querySelector('.resize-handle');\r\n if (div) {\r\n div.onmousedown = null;\r\n div.remove();\r\n }\r\n }\r\n }\r\n }\r\n\r\n resizerApplyWidths(): string | undefined {\r\n const gridTemplateColumns: string[] = [];\r\n if (this.resizerCurrentWidths.length) {\r\n for (let c = 0; c < this.resizerCurrentWidths.length; c++) {\r\n if (this.resizerCurrentWidths[c]) {\r\n gridTemplateColumns.push(\r\n this.resizerCurrentWidths[c] !== 'auto' ? `${this.resizerCurrentWidths[c]}px` : 'auto',\r\n );\r\n } else if (this.props.initialWidths && this.props.initialWidths[c]) {\r\n gridTemplateColumns.push(\r\n this.props.initialWidths[c] !== 'auto' ? `${this.props.initialWidths[c]}px` : 'auto',\r\n );\r\n } else {\r\n gridTemplateColumns.push('auto');\r\n }\r\n }\r\n } else if (this.props.initialWidths) {\r\n for (let c = 0; c < this.props.initialWidths.length; c++) {\r\n if (this.props.initialWidths[c]) {\r\n gridTemplateColumns.push(\r\n this.props.initialWidths[c] !== 'auto' ? `${this.props.initialWidths[c]}px` : 'auto',\r\n );\r\n } else {\r\n gridTemplateColumns.push('auto');\r\n }\r\n }\r\n }\r\n\r\n if (this.resizerRefTable.current && gridTemplateColumns.length) {\r\n this.resizerRefTable.current.style.gridTemplateColumns = gridTemplateColumns.join(' ');\r\n }\r\n\r\n return gridTemplateColumns.length ? gridTemplateColumns.join(' ') : undefined;\r\n }\r\n\r\n resizerMouseMove = (e: MouseEvent): void => {\r\n if (this.resizerActiveDiv && this.resizerActiveIndex !== null) {\r\n const width = this.resizerOldWidth + e.clientX - this.resizerPosition;\r\n const widthNext = this.resizerOldWidthNext - e.clientX + this.resizerPosition;\r\n if (\r\n (!this.resizerMin || width > this.resizerMin) &&\r\n (!this.resizerMinNext || widthNext > this.resizerMinNext)\r\n ) {\r\n this.resizerCurrentWidths[this.resizerActiveIndex] = width;\r\n this.resizerCurrentWidths[this.resizerActiveIndex + 1] = widthNext;\r\n this.resizerApplyWidths();\r\n }\r\n }\r\n };\r\n\r\n resizerMouseUp = (): void => {\r\n ((window as any)._localStorage || window.localStorage).setItem(\r\n `App.${this.props.name || 'history'}.table`,\r\n JSON.stringify(this.resizerCurrentWidths),\r\n );\r\n\r\n this.resizerActiveIndex = null;\r\n this.resizerActiveDiv = null;\r\n window.removeEventListener('mousemove', this.resizerMouseMove);\r\n window.removeEventListener('mouseup', this.resizerMouseUp);\r\n };\r\n\r\n resizerMouseDown = (e: MouseEvent): void => {\r\n if (this.resizerActiveIndex === null || this.resizerActiveIndex === undefined) {\r\n console.log(`Mouse down ${(e.target as HTMLDivElement)?.dataset.index}`);\r\n this.resizerActiveIndex = parseInt((e.target as HTMLDivElement)?.dataset.index || '0', 10);\r\n this.resizerActiveDiv = e.target as HTMLDivElement;\r\n this.resizerMin = this.props.minWidths ? this.props.minWidths[this.resizerActiveIndex] : 0;\r\n this.resizerMinNext = this.props.minWidths ? this.props.minWidths[this.resizerActiveIndex + 1] : 0;\r\n this.resizerPosition = e.clientX;\r\n let ths;\r\n if (this.resizerCurrentWidths[this.resizerActiveIndex] === 'auto') {\r\n ths = this.resizerRefTable.current?.querySelectorAll('th');\r\n if (ths) {\r\n this.resizerCurrentWidths[this.resizerActiveIndex] = ths[this.resizerActiveIndex].offsetWidth;\r\n }\r\n }\r\n if (this.resizerCurrentWidths[this.resizerActiveIndex + 1] === 'auto') {\r\n ths = ths || this.resizerRefTable.current?.querySelectorAll('th');\r\n if (ths) {\r\n this.resizerCurrentWidths[this.resizerActiveIndex + 1] =\r\n ths[this.resizerActiveIndex + 1].offsetWidth;\r\n }\r\n }\r\n\r\n this.resizerOldWidth = this.resizerCurrentWidths[this.resizerActiveIndex] as number;\r\n this.resizerOldWidthNext = this.resizerCurrentWidths[this.resizerActiveIndex + 1] as number;\r\n\r\n window.addEventListener('mousemove', this.resizerMouseMove);\r\n window.addEventListener('mouseup', this.resizerMouseUp);\r\n }\r\n };\r\n\r\n render(): React.JSX.Element {\r\n if (this.props.ready === false) {\r\n return <Skeleton />;\r\n }\r\n\r\n const style = { gridTemplateColumns: this.resizerApplyWidths() };\r\n\r\n return (\r\n <Table\r\n stickyHeader={this.props.stickyHeader}\r\n size={this.props.size || 'small'}\r\n className={this.props.className}\r\n sx={this.props.sx}\r\n ref={this.resizerRefTable}\r\n style={{ ...(this.props.style || undefined), ...style }}\r\n >\r\n {this.props.children}\r\n </Table>\r\n );\r\n }\r\n}\r\n"]}
@@ -0,0 +1,21 @@
1
+ import React from 'react';
2
+ import type { ThemeType } from '../types';
3
+ interface TextWithIconProps {
4
+ lang: ioBroker.Languages;
5
+ themeType?: ThemeType;
6
+ value: string | Record<string, any>;
7
+ list?: ioBroker.Object[] | Record<string, ioBroker.Object>;
8
+ className?: string;
9
+ style?: React.CSSProperties;
10
+ title?: string;
11
+ removePrefix?: string;
12
+ moreClasses?: {
13
+ root?: string;
14
+ icon?: string;
15
+ text?: string;
16
+ };
17
+ icon?: string;
18
+ color?: string;
19
+ }
20
+ export declare function TextWithIcon(props: TextWithIconProps): React.JSX.Element;
21
+ export {};