@clickview/lite 0.0.18-rc.2 → 0.0.18

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 (321) hide show
  1. package/dist/css/11.chunk.css +14 -8
  2. package/dist/css/12.chunk.css +15 -5
  3. package/dist/css/13.chunk.css +5 -13
  4. package/dist/css/14.chunk.css +6 -6
  5. package/dist/css/15.chunk.css +15 -3
  6. package/dist/css/16.chunk.css +9 -3
  7. package/dist/css/17.chunk.css +4 -2
  8. package/dist/css/19.chunk.css +2 -6
  9. package/dist/css/2.chunk.css +0 -14
  10. package/dist/css/20.chunk.css +2 -2
  11. package/dist/css/21.chunk.css +7 -1
  12. package/dist/css/22.chunk.css +2 -2
  13. package/dist/css/23.chunk.css +2 -2
  14. package/dist/css/24.chunk.css +1 -1
  15. package/dist/css/25.chunk.css +2 -2
  16. package/dist/css/26.chunk.css +2 -2
  17. package/dist/css/27.chunk.css +1 -67
  18. package/dist/css/28.chunk.css +2 -48
  19. package/dist/css/29.chunk.css +2 -45
  20. package/dist/css/3.chunk.css +7 -13
  21. package/dist/css/31.chunk.css +1 -6
  22. package/dist/css/34.chunk.css +1 -5
  23. package/dist/css/38.chunk.css +2 -36
  24. package/dist/css/4.chunk.css +13 -5
  25. package/dist/css/44.chunk.css +1 -1
  26. package/dist/css/46.chunk.css +2 -0
  27. package/dist/css/5.chunk.css +8 -2
  28. package/dist/css/6.chunk.css +2 -0
  29. package/dist/libs/common/src/react/utils/ArrayHelper.d.ts +1 -1
  30. package/dist/libs/shared/src/utils/ImageHelper.d.ts +1 -1
  31. package/dist/scripts/0-d95e8444c4.chunk.js +1 -0
  32. package/dist/scripts/{1-f6fa17226d.chunk.js → 1-2b6afccaa5.chunk.js} +3 -3
  33. package/dist/scripts/11-d419aa0984.chunk.js +1 -0
  34. package/dist/scripts/12-b38a27f951.chunk.js +1 -0
  35. package/dist/scripts/13-1ad100c6fa.chunk.js +1 -0
  36. package/dist/scripts/14-9f08e07fae.chunk.js +1 -0
  37. package/dist/scripts/15-ee9fb81b9f.chunk.js +1 -0
  38. package/dist/scripts/{14-11868e2868.chunk.js → 16-8fe78e04c2.chunk.js} +1 -1
  39. package/dist/scripts/17-ea7fe3ea28.chunk.js +1 -0
  40. package/dist/scripts/18-1bb07c0b9b.chunk.js +1 -0
  41. package/dist/scripts/19-c869d34687.chunk.js +1 -0
  42. package/dist/scripts/2-a816feb2a1.chunk.js +1 -0
  43. package/dist/scripts/20-43ec005977.chunk.js +1 -0
  44. package/dist/scripts/21-8513db8251.chunk.js +1 -0
  45. package/dist/scripts/22-d4adb2384c.chunk.js +1 -0
  46. package/dist/scripts/23-d8b5b9ad2c.chunk.js +1 -0
  47. package/dist/scripts/{21-891207049a.chunk.js → 24-f2913e26e2.chunk.js} +1 -1
  48. package/dist/scripts/25-68705527ea.chunk.js +1 -0
  49. package/dist/scripts/26-7d25448f1c.chunk.js +1 -0
  50. package/dist/scripts/27-bab6c9f5c7.chunk.js +1 -0
  51. package/dist/scripts/28-080baa3fbc.chunk.js +1 -0
  52. package/dist/scripts/29-5e9889b68a.chunk.js +1 -0
  53. package/dist/scripts/3-6e2ac46662.chunk.js +7 -0
  54. package/dist/scripts/{27-f26afdae78.chunk.js → 30-cdbeea4fc5.chunk.js} +1 -1
  55. package/dist/scripts/31-6fa4413cdb.chunk.js +1 -0
  56. package/dist/scripts/32-d4725d3b7d.chunk.js +1 -0
  57. package/dist/scripts/33-bec24aab85.chunk.js +1 -0
  58. package/dist/scripts/34-c42c6cf42a.chunk.js +1 -0
  59. package/dist/scripts/{33-4579af9cf9.chunk.js → 35-4512b236f2.chunk.js} +1 -1
  60. package/dist/scripts/{34-d8b96d9f9f.chunk.js → 36-eede7769b2.chunk.js} +1 -1
  61. package/dist/scripts/37-80ed339c4f.chunk.js +1 -0
  62. package/dist/scripts/{37-afd3d321e3.chunk.js → 38-c11d4c88e3.chunk.js} +1 -1
  63. package/dist/scripts/{38-6ad53aa15b.chunk.js → 39-d0e74fb062.chunk.js} +1 -1
  64. package/dist/scripts/4-ea79bf1533.chunk.js +1 -0
  65. package/dist/scripts/{39-46c747b1d9.chunk.js → 40-d764e6157b.chunk.js} +1 -1
  66. package/dist/scripts/{40-c1b8806b1c.chunk.js → 41-0aa7093354.chunk.js} +1 -1
  67. package/dist/scripts/42-3d8c5fa14c.chunk.js +1 -0
  68. package/dist/scripts/43-969806e81e.chunk.js +1 -0
  69. package/dist/scripts/44-e8e3fef4c3.chunk.js +1 -0
  70. package/dist/scripts/45-d8f70269d6.chunk.js +1 -0
  71. package/dist/scripts/{44-7f92272274.chunk.js → 46-946ae22c1f.chunk.js} +1 -1
  72. package/dist/scripts/47-1579412cd0.chunk.js +1 -0
  73. package/dist/scripts/48-fdf97c1c73.chunk.js +1 -0
  74. package/dist/scripts/49-970fc479c8.chunk.js +1 -0
  75. package/dist/scripts/5-d1bb14adf6.chunk.js +1 -0
  76. package/dist/scripts/50-1257ab0b95.chunk.js +1 -0
  77. package/dist/scripts/{50-8cb0d9cd7d.chunk.js → 51-ac615445f0.chunk.js} +1 -1
  78. package/dist/scripts/52-874629b81c.chunk.js +1 -0
  79. package/dist/scripts/{52-bfb2683b5d.chunk.js → 53-22e3d0793b.chunk.js} +1 -1
  80. package/dist/scripts/{53-3cf5cd5f69.chunk.js → 54-da1a07610c.chunk.js} +1 -1
  81. package/dist/scripts/{54-26807e3e49.chunk.js → 55-02647df65c.chunk.js} +1 -1
  82. package/dist/scripts/56-1b6e6349fa.chunk.js +1 -0
  83. package/dist/scripts/57-8fc09ba02c.chunk.js +1 -0
  84. package/dist/scripts/{56-d4abc25ec3.chunk.js → 58-8e5cc56c3f.chunk.js} +1 -1
  85. package/dist/scripts/6-0e53df2ece.chunk.js +1 -0
  86. package/dist/scripts/7-26822045b2.chunk.js +1 -0
  87. package/dist/scripts/8-7450eff674.chunk.js +1 -0
  88. package/dist/scripts/9-f24f1577dd.chunk.js +1 -0
  89. package/dist/scripts/bundle-5ecb0c9441.min.js +1 -0
  90. package/dist/scripts/bundle-c6241bd7ac.min.js +1 -0
  91. package/dist/scripts/bundles.json +1 -1
  92. package/package.json +3 -3
  93. package/dist/css/0.chunk.css.map +0 -1
  94. package/dist/css/1.chunk.css +0 -146
  95. package/dist/css/1.chunk.css.map +0 -1
  96. package/dist/css/10.chunk.css +0 -20
  97. package/dist/css/10.chunk.css.map +0 -1
  98. package/dist/css/11.chunk.css.map +0 -1
  99. package/dist/css/12.chunk.css.map +0 -1
  100. package/dist/css/13.chunk.css.map +0 -1
  101. package/dist/css/14.chunk.css.map +0 -1
  102. package/dist/css/16.chunk.css.map +0 -1
  103. package/dist/css/18.chunk.css.map +0 -1
  104. package/dist/css/19.chunk.css.map +0 -1
  105. package/dist/css/21.chunk.css.map +0 -1
  106. package/dist/css/22.chunk.css.map +0 -1
  107. package/dist/css/23.chunk.css.map +0 -1
  108. package/dist/css/24.chunk.css.map +0 -1
  109. package/dist/css/25.chunk.css.map +0 -1
  110. package/dist/css/26.chunk.css.map +0 -1
  111. package/dist/css/27.chunk.css.map +0 -1
  112. package/dist/css/28.chunk.css.map +0 -1
  113. package/dist/css/29.chunk.css.map +0 -1
  114. package/dist/css/3.chunk.css.map +0 -1
  115. package/dist/css/30.chunk.css.map +0 -1
  116. package/dist/css/31.chunk.css.map +0 -1
  117. package/dist/css/32.chunk.css +0 -5
  118. package/dist/css/32.chunk.css.map +0 -1
  119. package/dist/css/34.chunk.css.map +0 -1
  120. package/dist/css/35.chunk.css +0 -7
  121. package/dist/css/35.chunk.css.map +0 -1
  122. package/dist/css/36.chunk.css +0 -4
  123. package/dist/css/36.chunk.css.map +0 -1
  124. package/dist/css/37.chunk.css +0 -4
  125. package/dist/css/37.chunk.css.map +0 -1
  126. package/dist/css/38.chunk.css.map +0 -1
  127. package/dist/css/4.chunk.css.map +0 -1
  128. package/dist/css/45.chunk.css +0 -9
  129. package/dist/css/45.chunk.css.map +0 -1
  130. package/dist/css/5.chunk.css.map +0 -1
  131. package/dist/css/9.chunk.css +0 -24
  132. package/dist/css/lite-app.css.map +0 -1
  133. package/dist/scripts/0-525bd75473.chunk.js +0 -1
  134. package/dist/scripts/0.chunk.js +0 -478
  135. package/dist/scripts/0.chunk.js.map +0 -1
  136. package/dist/scripts/1.chunk.js +0 -621
  137. package/dist/scripts/1.chunk.js.map +0 -1
  138. package/dist/scripts/10-f3b34b2d35.chunk.js +0 -1
  139. package/dist/scripts/10.chunk.js +0 -400
  140. package/dist/scripts/10.chunk.js.map +0 -1
  141. package/dist/scripts/11-a698af3f1c.chunk.js +0 -1
  142. package/dist/scripts/11.chunk.js +0 -1289
  143. package/dist/scripts/11.chunk.js.map +0 -1
  144. package/dist/scripts/12-9ace90fcbc.chunk.js +0 -1
  145. package/dist/scripts/12.chunk.js +0 -1059
  146. package/dist/scripts/12.chunk.js.map +0 -1
  147. package/dist/scripts/13-3a4f103546.chunk.js +0 -1
  148. package/dist/scripts/13.chunk.js +0 -751
  149. package/dist/scripts/13.chunk.js.map +0 -1
  150. package/dist/scripts/14.chunk.js +0 -425
  151. package/dist/scripts/14.chunk.js.map +0 -1
  152. package/dist/scripts/15-78ff5e8be2.chunk.js +0 -1
  153. package/dist/scripts/15.chunk.js +0 -609
  154. package/dist/scripts/15.chunk.js.map +0 -1
  155. package/dist/scripts/16-22f6224811.chunk.js +0 -1
  156. package/dist/scripts/16.chunk.js +0 -648
  157. package/dist/scripts/16.chunk.js.map +0 -1
  158. package/dist/scripts/17-afe6281dd5.chunk.js +0 -1
  159. package/dist/scripts/17.chunk.js +0 -541
  160. package/dist/scripts/17.chunk.js.map +0 -1
  161. package/dist/scripts/18-47be31c0b6.chunk.js +0 -1
  162. package/dist/scripts/18.chunk.js +0 -766
  163. package/dist/scripts/18.chunk.js.map +0 -1
  164. package/dist/scripts/19-89c0b2c20e.chunk.js +0 -1
  165. package/dist/scripts/19.chunk.js +0 -647
  166. package/dist/scripts/19.chunk.js.map +0 -1
  167. package/dist/scripts/2-3b37480a80.chunk.js +0 -7
  168. package/dist/scripts/2.chunk.js +0 -8259
  169. package/dist/scripts/2.chunk.js.map +0 -1
  170. package/dist/scripts/20-32ac3fe0b9.chunk.js +0 -1
  171. package/dist/scripts/20.chunk.js +0 -122
  172. package/dist/scripts/20.chunk.js.map +0 -1
  173. package/dist/scripts/21.chunk.js +0 -1571
  174. package/dist/scripts/21.chunk.js.map +0 -1
  175. package/dist/scripts/22-24236e6723.chunk.js +0 -1
  176. package/dist/scripts/22.chunk.js +0 -1387
  177. package/dist/scripts/22.chunk.js.map +0 -1
  178. package/dist/scripts/23-7b425169bc.chunk.js +0 -1
  179. package/dist/scripts/23.chunk.js +0 -1121
  180. package/dist/scripts/23.chunk.js.map +0 -1
  181. package/dist/scripts/24-40edd30087.chunk.js +0 -1
  182. package/dist/scripts/24.chunk.js +0 -1348
  183. package/dist/scripts/24.chunk.js.map +0 -1
  184. package/dist/scripts/25-887b9ef587.chunk.js +0 -1
  185. package/dist/scripts/25.chunk.js +0 -1137
  186. package/dist/scripts/25.chunk.js.map +0 -1
  187. package/dist/scripts/26-cbe0ff0f77.chunk.js +0 -1
  188. package/dist/scripts/26.chunk.js +0 -906
  189. package/dist/scripts/26.chunk.js.map +0 -1
  190. package/dist/scripts/27.chunk.js +0 -1143
  191. package/dist/scripts/27.chunk.js.map +0 -1
  192. package/dist/scripts/28-70414fd373.chunk.js +0 -1
  193. package/dist/scripts/28.chunk.js +0 -656
  194. package/dist/scripts/28.chunk.js.map +0 -1
  195. package/dist/scripts/29-944b5c01a7.chunk.js +0 -1
  196. package/dist/scripts/29.chunk.js +0 -616
  197. package/dist/scripts/29.chunk.js.map +0 -1
  198. package/dist/scripts/3-233f573a92.chunk.js +0 -1
  199. package/dist/scripts/3.chunk.js +0 -585
  200. package/dist/scripts/3.chunk.js.map +0 -1
  201. package/dist/scripts/30-3a229887e9.chunk.js +0 -1
  202. package/dist/scripts/30.chunk.js +0 -557
  203. package/dist/scripts/30.chunk.js.map +0 -1
  204. package/dist/scripts/31-ab038bfc0c.chunk.js +0 -1
  205. package/dist/scripts/31.chunk.js +0 -731
  206. package/dist/scripts/31.chunk.js.map +0 -1
  207. package/dist/scripts/32-8bd6703eef.chunk.js +0 -1
  208. package/dist/scripts/32.chunk.js +0 -957
  209. package/dist/scripts/32.chunk.js.map +0 -1
  210. package/dist/scripts/33.chunk.js +0 -938
  211. package/dist/scripts/33.chunk.js.map +0 -1
  212. package/dist/scripts/34.chunk.js +0 -523
  213. package/dist/scripts/34.chunk.js.map +0 -1
  214. package/dist/scripts/35-666d815525.chunk.js +0 -1
  215. package/dist/scripts/35.chunk.js +0 -414
  216. package/dist/scripts/35.chunk.js.map +0 -1
  217. package/dist/scripts/36-02ce5f3538.chunk.js +0 -1
  218. package/dist/scripts/36.chunk.js +0 -404
  219. package/dist/scripts/36.chunk.js.map +0 -1
  220. package/dist/scripts/37.chunk.js +0 -245
  221. package/dist/scripts/37.chunk.js.map +0 -1
  222. package/dist/scripts/38.chunk.js +0 -343
  223. package/dist/scripts/38.chunk.js.map +0 -1
  224. package/dist/scripts/39.chunk.js +0 -318
  225. package/dist/scripts/39.chunk.js.map +0 -1
  226. package/dist/scripts/4-6942fee782.chunk.js +0 -1
  227. package/dist/scripts/4.chunk.js +0 -1030
  228. package/dist/scripts/4.chunk.js.map +0 -1
  229. package/dist/scripts/40.chunk.js +0 -236
  230. package/dist/scripts/40.chunk.js.map +0 -1
  231. package/dist/scripts/41-f4c23477e3.chunk.js +0 -1
  232. package/dist/scripts/41.chunk.js +0 -231
  233. package/dist/scripts/41.chunk.js.map +0 -1
  234. package/dist/scripts/42-7a5b92d70b.chunk.js +0 -1
  235. package/dist/scripts/42.chunk.js +0 -350
  236. package/dist/scripts/42.chunk.js.map +0 -1
  237. package/dist/scripts/43-97193a87df.chunk.js +0 -1
  238. package/dist/scripts/43.chunk.js +0 -225
  239. package/dist/scripts/43.chunk.js.map +0 -1
  240. package/dist/scripts/44.chunk.js +0 -318
  241. package/dist/scripts/44.chunk.js.map +0 -1
  242. package/dist/scripts/45-265f1a7a42.chunk.js +0 -1
  243. package/dist/scripts/45.chunk.js +0 -64
  244. package/dist/scripts/45.chunk.js.map +0 -1
  245. package/dist/scripts/46-a594ad7eba.chunk.js +0 -1
  246. package/dist/scripts/46.chunk.js +0 -108
  247. package/dist/scripts/46.chunk.js.map +0 -1
  248. package/dist/scripts/47-99777c20cf.chunk.js +0 -1
  249. package/dist/scripts/47.chunk.js +0 -110
  250. package/dist/scripts/47.chunk.js.map +0 -1
  251. package/dist/scripts/48-9880523c82.chunk.js +0 -1
  252. package/dist/scripts/48.chunk.js +0 -148
  253. package/dist/scripts/48.chunk.js.map +0 -1
  254. package/dist/scripts/49-5e718594e5.chunk.js +0 -1
  255. package/dist/scripts/49.chunk.js +0 -142
  256. package/dist/scripts/49.chunk.js.map +0 -1
  257. package/dist/scripts/5-2f631dcd74.chunk.js +0 -1
  258. package/dist/scripts/5.chunk.js +0 -3262
  259. package/dist/scripts/5.chunk.js.map +0 -1
  260. package/dist/scripts/50.chunk.js +0 -145
  261. package/dist/scripts/50.chunk.js.map +0 -1
  262. package/dist/scripts/51-211b643ca5.chunk.js +0 -1
  263. package/dist/scripts/51.chunk.js +0 -176
  264. package/dist/scripts/51.chunk.js.map +0 -1
  265. package/dist/scripts/52.chunk.js +0 -160
  266. package/dist/scripts/52.chunk.js.map +0 -1
  267. package/dist/scripts/53.chunk.js +0 -98
  268. package/dist/scripts/53.chunk.js.map +0 -1
  269. package/dist/scripts/54.chunk.js +0 -48
  270. package/dist/scripts/54.chunk.js.map +0 -1
  271. package/dist/scripts/55-d38be4860b.chunk.js +0 -1
  272. package/dist/scripts/55.chunk.js +0 -99
  273. package/dist/scripts/55.chunk.js.map +0 -1
  274. package/dist/scripts/56.chunk.js +0 -64
  275. package/dist/scripts/56.chunk.js.map +0 -1
  276. package/dist/scripts/57.chunk.js +0 -72
  277. package/dist/scripts/57.chunk.js.map +0 -1
  278. package/dist/scripts/58.chunk.js +0 -73
  279. package/dist/scripts/58.chunk.js.map +0 -1
  280. package/dist/scripts/59.chunk.js +0 -70
  281. package/dist/scripts/59.chunk.js.map +0 -1
  282. package/dist/scripts/6-4d72a3c3fc.chunk.js +0 -1
  283. package/dist/scripts/6.chunk.js +0 -24
  284. package/dist/scripts/6.chunk.js.map +0 -1
  285. package/dist/scripts/60.chunk.js +0 -32
  286. package/dist/scripts/60.chunk.js.map +0 -1
  287. package/dist/scripts/61.chunk.js +0 -29
  288. package/dist/scripts/61.chunk.js.map +0 -1
  289. package/dist/scripts/62.chunk.js +0 -27
  290. package/dist/scripts/62.chunk.js.map +0 -1
  291. package/dist/scripts/63.chunk.js +0 -67
  292. package/dist/scripts/63.chunk.js.map +0 -1
  293. package/dist/scripts/64.chunk.js +0 -80
  294. package/dist/scripts/64.chunk.js.map +0 -1
  295. package/dist/scripts/65.chunk.js +0 -65
  296. package/dist/scripts/65.chunk.js.map +0 -1
  297. package/dist/scripts/66.chunk.js +0 -67
  298. package/dist/scripts/66.chunk.js.map +0 -1
  299. package/dist/scripts/67.chunk.js +0 -104
  300. package/dist/scripts/67.chunk.js.map +0 -1
  301. package/dist/scripts/68.chunk.js +0 -69
  302. package/dist/scripts/68.chunk.js.map +0 -1
  303. package/dist/scripts/69.chunk.js +0 -89
  304. package/dist/scripts/69.chunk.js.map +0 -1
  305. package/dist/scripts/7-90ad392b55.chunk.js +0 -1
  306. package/dist/scripts/7.chunk.js +0 -327
  307. package/dist/scripts/7.chunk.js.map +0 -1
  308. package/dist/scripts/70.chunk.js +0 -36
  309. package/dist/scripts/70.chunk.js.map +0 -1
  310. package/dist/scripts/8.chunk.js +0 -470
  311. package/dist/scripts/8.chunk.js.map +0 -1
  312. package/dist/scripts/9-52877087ef.chunk.js +0 -1
  313. package/dist/scripts/9.chunk.js +0 -471
  314. package/dist/scripts/9.chunk.js.map +0 -1
  315. package/dist/scripts/bundle-87d75d901a.min.js +0 -1
  316. package/dist/scripts/bundle-99976c17a2.min.js +0 -1
  317. package/dist/scripts/bundle-9f5ad50596.min.js +0 -1
  318. package/dist/scripts/bundle-a4952df647.min.js +0 -1
  319. package/dist/scripts/bundle.js +0 -34769
  320. package/dist/scripts/bundle.js.map +0 -1
  321. /package/dist/css/{30.chunk.css → 8.chunk.css} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["file://C:/ClickView Projects/@clickview/packages/libs/shared/src/apps/playlists/components/playlist-list/PlaylistItem.tsx","webpack://@clickview/lite/C:/ClickView Projects/@clickview/packages/libs/shared/src/apps/playlists/components/playlist-list/playlist.scss?dd51","file://C:/ClickView Projects/@clickview/packages/libs/shared/src/components/audience-label/AudienceLabel.tsx","webpack://@clickview/lite/C:/ClickView Projects/@clickview/packages/libs/shared/src/components/audience-label/audience-label.scss?93bd","file://C:/ClickView Projects/@clickview/packages/libs/shared/src/components/forms/form-buttons/FormButtons.tsx","file://C:/ClickView Projects/@clickview/packages/libs/shared/src/components/forms/form-checkbox/Checkbox.tsx","file://C:/ClickView Projects/@clickview/packages/libs/shared/src/components/forms/form-checkbox/FormCheckbox.tsx","file://C:/ClickView Projects/@clickview/packages/libs/shared/src/components/forms/form-field/CharacterCounter.tsx","file://C:/ClickView Projects/@clickview/packages/libs/shared/src/components/forms/form-field/FormField.tsx","file://C:/ClickView Projects/@clickview/packages/libs/shared/src/components/forms/form-wrapper/FormWrapper.tsx","file://C:/ClickView Projects/@clickview/packages/libs/shared/src/components/widgets/items/playlist-widget-item/PlaylistWidgetItem.tsx","webpack://@clickview/lite/C:/ClickView Projects/@clickview/packages/libs/shared/src/components/widgets/items/playlist-widget-item/playlist-widget-item.scss?2861","file://C:/ClickView Projects/@clickview/packages/libs/shared/src/components/widgets/items/series-widget-item/SeriesWidgetItem.tsx","webpack://@clickview/lite/C:/ClickView Projects/@clickview/packages/libs/shared/src/components/widgets/items/series-widget-item/series-widget-item.scss?8475","file://C:/ClickView Projects/@clickview/packages/libs/shared/src/hooks/UseCanSubmitForm.ts","file://C:/ClickView Projects/@clickview/packages/libs/shared/src/utils/AudienceHelper.ts","file://C:/ClickView Projects/@clickview/packages/libs/shared/src/utils/FormHelper.ts","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/search/components/filter-actions/FilterActions.tsx","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/search/components/filter-button/FilterButton.tsx","webpack://@clickview/lite/./src/apps/search/components/filter-button/filter-button.scss?2197","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/search/components/filter-types/checkbox-filter/CheckboxFilter.tsx","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/search/components/filter-types/dropdown-filter/DropdownFilter.tsx","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/search/components/filter-types/index.ts","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/search/components/filter-types/more-filters/MoreFilters.tsx","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/search/components/filter-types/radio-filter/RadioFilter.tsx","webpack://@clickview/lite/./src/apps/search/components/filter-types/radio-filter/radio-filter.scss?30e5","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/search/components/filter-types/radio-filter/year-level/YearLevelRadioFilter.tsx","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/search/components/filter-types/switch-filter/SwitchFilter.tsx","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/search/components/index.ts","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/search/components/reset-button/ResetButton.tsx","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/search/components/search-filters/PartialSearchFilters.tsx","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/search/components/search-filters/SearchFilters.tsx","webpack://@clickview/lite/./src/apps/search/components/search-filters/search-filters.scss?d75c","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/search/reducers/FilterReducer.tsx","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/search/reducers/index.ts","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/search/utils/FilterHelper.tsx","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/search/utils/SearchHelper.tsx","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/search/utils/index.ts","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/user-manager/components/bulk-upload-file-select/BulkUploadFileSelect.tsx","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/user-manager/components/edit-student-details/EditStudentDetails.tsx","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/user-manager/components/edit-teacher-details/EditTeacherDetails.tsx","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/user-manager/components/index.ts","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/user-manager/components/user-details-form/UserDetailsForm.tsx","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/user-manager/components/year-level-select/YearLevelSelect.tsx","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/user-manager/enums/index.ts","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/user-manager/enums/mocks/MockUserType.ts","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/user-manager/validation/user-validation/UserValidationSchema.ts","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/shared/components/toggle-switch/ToggleSwitch.tsx","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/shared/hooks/useBulkCheckboxManager.tsx"],"names":[],"mappings":";;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAUM,SAAU,YAAV,CAAuB,KAAvB,EAA+C;AACnD,QAAM,QAAQ,GAAG,8DAAW,CAAC,SAAZ,CAAsB,KAAK,CAAC,IAAN,CAAW,KAAX,IAAoB,KAAK,CAAC,IAAN,CAAW,KAAX,CAAiB,GAA3D,EAAgE;AAC/E,QAAI,EAAE,uDAAS,CAAC,MAD+D;AAE/E,cAAU,EAAE,wDAAU,CAAC;AAFwD,GAAhE,CAAjB;AAKA,QAAM,SAAS,GAAG,KAAK,CAAC,IAAN,CAAW,4BAAX,IAChB,KAAK,CAAC,IAAN,CAAW,4BAAX,CAAwC,IAD1C;AAGA,QAAM,iBAAiB,GAAG,oEAAc,CAAC,8BAAf,CAA8C,SAA9C,EAAyD,KAAK,CAAC,qBAA/D,CAA1B;AACA,QAAM,cAAc,GAAG,oEAAc,CAAC,mCAAf,CAAmD,iBAAnD,CAAvB;AAEA,QAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,SAAR,IAAqB,CAAC,CAAC,KAAK,CAAC,IAAN,CAAW,MAAlC,IAA4C,KAAK,CAAC,IAAN,CAAW,MAAX,CAAkB,KAA5E;AAEA,SACE,oDAAC,oEAAD,EAAQ;AAAC,WAAO,EAAE,KAAK,CAAC;AAAhB,GAAR,EACE,oDAAC,uFAAD,EAAc;AAAC,QAAI,EAAE,QAAP;AAAiB,aAAS,EAAE,qDAAM,CAAC;AAAnC,GAAd,EACE,oDAAC,+FAAD,EAAkB;AAAC,QAAI,EAAE,mGAAqB,CAAC;AAA7B,GAAlB,CADF,EAEE;AAAK,aAAS,EAAE,cAAc,qDAAM,CAAC,gBAAgB;AAArD,KACG,MAAM,CAAC,SAAP,CAAiB,KAAjB,KACC,oDAAC,0DAAD,EAAK;AAAC,aAAS,EAAC,qBAAX;AAAiC,UAAM,EAAC,QAAxC;AAAiD,WAAO,EAAE;AAAE,gBAAU,EAAE;AAAd;AAA1D,GAAL,CAFJ,EAIE;AAAI,aAAS,EAAC;AAAd,KAAkC,KAAK,CAAC,IAAN,CAAW,IAA7C,CAJF,EAKG,CAAC,CAAC,SAAF,IAAe,CAAC,CAAC,SAAS,CAAC,MAA3B,IACC,oDAAC,sFAAD,EAAc;AACZ,YAAQ,EAAE,cADE;AAEZ,UAAM,EAAC;AAFK,GAAd,CANJ,CAFF,CADF,CADF;AAmBD,C;;;;;;;;;;;ACzDD;AACA,kBAAkB,yL;;;;;;;;;;;;ACDlB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AASM,SAAU,aAAV,CAAwB,KAAxB,EAAiD;AACrD,MAAI,CAAC,KAAK,CAAC,QAAX,EACE,OAAO,yGAAP;AAEF,SACE;AAAK,aAAS,EAAE,gDAAgD,YAAY,KAAK,CAAC,MAAM;AAAxF,KACG,KAAK,CAAC,QAAN,CAAe,IADlB,CADF;AAKD;AAOK,SAAU,iBAAV,CAA4B,KAA5B,EAAyD;AAC7D,MAAI,CAAC,KAAK,CAAC,SAAP,IAAoB,CAAC,KAAK,CAAC,SAAN,CAAgB,MAAzC,EACE,OAAO,yGAAP;AAEF,SACE,0GACG,KAAK,CAAC,SAAN,CAAgB,GAAhB,CAAoB,CAAC,CAAD,EAAI,GAAJ,KACnB;AAAM,OAAG,EAAE,GAAX;AAAgB,aAAS,EAAE,2DAAM,CAAC;AAAlC,KACE,oDAAC,aAAD,EAAc;AAAC,YAAQ,EAAE,CAAX;AAAc,UAAM,EAAE,KAAK,CAAC;AAA5B,GAAd,CADF,CADD,CADH,CADF;AASD,C;;;;;;;;;;;ACzCD;AACA,kBAAkB,4D;;;;;;;;;;;;ACDlB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA,MAAM,SAAS,GAAG,oBAAlB;AAEA,MAAM,cAAc,GAAG,EAAvB;AAOM,SAAU,WAAV,CAA6C,KAA7C,EAAoE;AACxE,QAAM,WAAW,GAAG,+DAAgB,EAApC;AAEA,QAAM,SAAS,GAAG,gFAAgB,CAAC,WAAD,CAAlC;AAEA;;;;;;AAKA,kDAAgB,MAAK;AACnB,aAAS,UAAT,CAAoB,CAApB,EAAoC;AAClC,UAAI,CAAC,CAAC,OAAF,KAAc,cAAd,IAAgC,CAAC,SAArC,EACE;AAEF,iBAAW,CAAC,YAAZ,GAA2B,IAA3B,CAAgC,MAAM,IAAG;AACvC,YAAI,CAAC,MAAM,CAAC,IAAP,CAAY,MAAZ,EAAoB,MAAzB,EACE,WAAW,CAAC,UAAZ;AACH,OAHD;AAID;;AAED,UAAM,CAAC,gBAAP,CAAwB,UAAxB,EAAoC,UAApC;AACA,WAAO,MAAM,MAAM,CAAC,mBAAP,CAA2B,UAA3B,EAAuC,UAAvC,CAAb;AACD,GAbD,EAaG,CAAC,SAAD,CAbH;AAeA,MAAI,SAAS,GAAG,MAAhB;AACA,MAAI,KAAK,CAAC,KAAV,EACE,SAAS,GAAG,QAAZ;AACF,MAAI,KAAK,CAAC,OAAV,EACE,SAAS,GAAG,MAAZ;AAEF,SACE,oDAAC,2EAAD,EAAc;AAAC,eAAW,EAAE,WAAW,CAAC,YAA1B;AAAwC,QAAI,EAAC,QAA7C;AAAsD,YAAQ,EAAE,CAAC;AAAjE,GAAd,EACE,oDAAC,+CAAD,EAAK;AAAC,aAAS,EAAE,SAAZ;AAAuB,UAAM,EAAE;AAA/B,GAAL,CADF,CADF;AAKD,C;;;;;;;;;;;;ACpDD;AAAA;AAAA;AAAA;AAAA;AAWA,QAAQ,CAAC,YAAT,GAAwB;AACtB,SAAO,EAAE,KADa;AAEtB,OAAK,EAAE,EAFe;AAGtB,WAAS,EAAE;AAHW,CAAxB;AAMA;;;;AAGM,SAAU,QAAV,CAAmB,KAAnB,EAAuC;AAC3C,SACE;AAAK,aAAS,EAAE,kCAAkC,KAAK,CAAC,SAAS;AAAjE,KACE;AACE,QAAI,EAAC,UADP;AAEE,aAAS,EAAC,sBAFZ;AAGE,MAAE,EAAE,KAAK,CAAC,EAHZ;AAIE,QAAI,EAAE,KAAK,CAAC,IAJd;AAKE,WAAO,EAAE,KAAK,CAAC,OALjB;AAME,YAAQ,EAAE,KAAK,CAAC;AANlB,IADF,EASE;AAAO,aAAS,EAAC,qCAAjB;AAAuD,WAAO,EAAE,KAAK,CAAC;AAAtE,KAA2E,KAAK,CAAC,KAAjF,CATF,CADF;AAaD,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClCD;AAGA;AACA;AAEA;;;;AAGM,SAAU,YAAV,CAA8C,KAA9C,EAA4F;AAChG,QAAM;AAAE;AAAF,MAA2B,KAAjC;AAAA,QAAe,qCAAf;;AAEA,SACE,oDAAC,oDAAI,CAAC,KAAN,EAAW,IAAX,EACE;AAAK,aAAS,EAAC;AAAf,KACE,oDAAC,kEAAD,EAAa;AAAS,aAAS,EAAC;AAAnB,KAA8C,UAA9C,CAAb,CADF,EAEE,oDAAC,oDAAI,CAAC,KAAN,EAAW;AAAC,aAAS,EAAC,sBAAX;AAAkC,WAAO,EAAE,UAAU,CAAC;AAAtD,GAAX,EAAsE,KAAtE,CAFF,CADF,CADF;AAQD,C;;;;;;;;;;;;ACpBD;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAOM,SAAU,gBAAV,CAAkD,KAAlD,EAAsF;AAC1F,QAAM;AAAE;AAAF,MAAa,+DAAgB,EAAnC;AAEA,QAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,SAAP,CAApB;AAEA,MAAI,OAAO,KAAP,KAAiB,QAArB,EACE,OAAO,yGAAP;AAEF,SACE;AAAK,aAAS,EAAC;AAAf,KACG,KAAK,CAAC,MADT,E,GAAA,EACkB,KAAK,CAAC,KADxB,CADF;AAKD,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrBD;AACA;AACA;AAEA;AAEA;AAEA;AACA;AAaM,SAAU,YAAV,CACJ,KADI,EACkE;AAEtE,QAAM;AAAE;AAAF,MAA8B,KAApC;AAAA,QAAkB,wCAAlB;;AAEA,SACE,oDAAC,4CAAD,EAAM,kBAAK,UAAL,CAAN,EACG,wFAAc,CAAC,UAAf,CAA0B,QAA1B,IACI,CAAD,IAAmB,QAAQ,CAAC,CAAD,CAD9B,GAEG,+CAAe,KAAf,CAAqB,QAArB,IAAiC,QAAjC,GAA4C,IAHlD,CADF;AAQD;AAEK,SAAU,SAAV,CAA2C,KAA3C,EAAyF;AAC7F,QAAM;AAAE,SAAF;AAAS,aAAT;AAAoB;AAApB,MAA4D,KAAlE;AAAA,QAAgD,0EAAhD;;AAEA,QAAM;AAAE,UAAF;AAAU;AAAV,MAAsB,+DAAgB,EAA5C;AAEA,MAAI,UAAU,CAAC,IAAX,KAAoB,UAAxB,EACE,OAAO,oDAAC,wEAAD,EAAa,kBAAa,KAAb,CAAb,CAAP;AAEF,SACE,oDAAC,oDAAI,CAAC,KAAN,EAAW,IAAX,EACG,CAAC,CAAC,KAAF,IAAW,oDAAC,oDAAI,CAAC,KAAN,EAAW;AAAC,WAAO,EAAE,UAAU,CAAC;AAArB,GAAX,EAAqC,KAArC,CADd,EAEE,oDAAC,YAAD,EAAa;AACX,aAAS,EAAE,4DAAU,CAAC,6BAAX,CAAyC,MAAzC,EAAiD,OAAjD,EAA0D,UAAU,CAAC,IAArE,EAA2E,SAA3E;AADA,KAEP,UAFO,CAAb,CAFF,EAMG,CAAC,CAAC,oBAAF,IAA0B,CAAC,CAAE,UAAgD,CAAC,SAA9E,IACC,oDAAC,kEAAD,EAAiB;AACf,aAAS,EAAG,UAAU,CAAC,IADR;AAEf,SAAK,EAAG,UAAgD,CAAC;AAF1C,GAAjB,CAPJ,EAYE,oDAAC,mDAAD,EAAa;AAAC,QAAI,EAAE,UAAU,CAAC;AAAlB,GAAb,EACI,YAAD,IAA0B,oDAAC,oDAAI,CAAC,OAAL,CAAa,QAAd,EAAsB;AAAC,QAAI,EAAC;AAAN,GAAtB,EAAuC,YAAvC,CAD7B,CAZF,CADF;AAkBD,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/DD;AACA;AACA;AACA;;AAEA,SAAS,qBAAT,CAA4D,aAA5D,EAAiF;AAC/E,QAAM,MAAM,GAAG,iFAAY,CAAC,SAAb,CAAuB,aAAvB,CAAf;AAEA,QAAM,CAAC,IAAP,CAAY,MAAZ,EAAoB,OAApB,CAA6B,GAAD,IAAsB;AAChD,QAAI,CAAC,MAAM,CAAC,cAAP,CAAsB,GAAtB,CAAL,EACE;AAEF,QAAI,iFAAY,CAAC,QAAb,CAAsB,MAAM,CAAC,GAAD,CAA5B,CAAJ,EACE,MAAM,CAAC,GAAD,CAAN,GAAc,qBAAqB,CAAC,MAAM,CAAC,GAAD,CAAP,CAAnC,CADF,KAEK,IAAI,MAAM,CAAC,GAAD,CAAN,KAAgB,IAApB,EACH,OAAO,MAAM,CAAC,GAAD,CAAb;AACH,GARD;AAUA,SAAO,MAAP;AACD;;AAkBD,WAAW,CAAC,YAAZ,GAA2B;AACzB,mBAAiB,EAAE,IADM;AAEzB,oBAAkB,EAAE;AAFK,CAA3B;AAKM,SAAU,WAAV,CAIJ,KAJI,EAI0F;AAC9F,QAAM;AAAE,qBAAF;AAAqB,sBAArB;AAAyC,iBAAzC;AAAwD,YAAxD;AAAkE;AAAlE,MAAoG,KAA1G;AAAA,QAAuF,sHAAvF;AAEA;;;;;;AAIA,QAAM,sBAAsB,GAAe,iBAAiB,IAAI,KAAK,CAAC,gBAA3B,GACvC,KAAK,CAAC,gBAAN,CAAuB,IAAvB,CAA4B,qBAAqB,CAAC,aAAD,CAAjD,CADuC,GAEvC,aAFJ;;AAIA,QAAM,eAAe,GAAG,CACtB,MADsB,EAEtB;AAAE,iBAAF;AAAiB;AAAjB,GAFsB,KAGpB;AACF;;;;;AAKA,UAAM,aAAa,GAAG,kBAAkB,IAAI,KAAK,CAAC,gBAA5B,GAClB,KAAK,CAAC,gBAAN,CAAuB,IAAvB,CAA4B,MAA5B,CADkB,GAElB,MAFJ;AAIA,YAAQ,CAAC,aAAD,EAAgB,MAAK;AAC3B,mBAAa,IAAI,SAAS,EAA1B;AACA,mBAAa,CAAC,KAAD,CAAb;AACD,KAHO,CAAR;AAID,GAjBD;;AAmBA,QAAM,aAAa,GAAkB;AACnC,sBAAkB,EAAE,KAAK,CAAC;AADS,GAArC;AAIA,SACE,oDAAC,6CAAD,EAAO;AACL,sBAAkB;AADb,KAEA,WAFA,EAE6D;AAClE,iBAAa,EAAE,sBADmD;AAElE,YAAQ,EAAE,eAFwD;AAGlE,iBAAa,EAAE;AAHmD,GAF7D,CAAP,EAOG,wFAAc,CAAC,UAAf,CAA0B,KAAK,CAAC,QAAhC,IACI,CAAD,IAAiC,KAAK,CAAC,QAAN,CAAmE,CAAnE,CADpC,GAEG,+CAAe,KAAf,CAAqB,KAAK,CAAC,QAA3B,IAAuC,KAAK,CAAC,QAA7C,GAAwD,IAT9D,CADF;AAcD;AAEK,SAAU,uBAAV,GAAiC;AACrC,SAAO,+DAAgB,EAAvB;AACD,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClGD;AAKA;AAEA;AASM,SAAU,kBAAV,CAA6B,KAA7B,EAA4D;AAChE,QAAM;AAAE;AAAF,MAA6B,KAAnC;AAAA,QAAiB,uCAAjB;;AAEA,SACE;AAAK,aAAS,EAAE,uCAAuC,iEAAM,CAAC,KAAK;AAAnE,KACE,oDAAC,kGAAD,EAAa,kBAAK,UAAL,CAAb,CADF,CADF;AAKD,C;;;;;;;;;;;ACxBD;AACA,kBAAkB,4B;;;;;;;;;;;;ACDlB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AASM,SAAU,gBAAV,CAA2B,KAA3B,EAAwD;AAC5D,QAAM;AAAE,QAAI,EAAE,MAAR;AAAgB,WAAhB;AAAyB;AAAzB,MAA0C,KAAhD;AAEA,QAAM,aAAa,mCACd,OADc,GACP;AACV,QAAI,EAAE,CAAE,MAAM,CAAC,EAAT,EAAa,6EAAU,CAAC,OAAX,CAAmB,MAAM,CAAC,IAA1B,CAAb;AADI,GADO,CAAnB;AAKA;;;;;;;;AAQA,MAAI,SAAS,GAAG,MAAM,IAAI,MAAM,CAAC,4BAAjB,IACd,MAAM,CAAC,4BAAP,CAAoC,IADtB,IAC8B,EAD9C;AAGA,QAAM,iBAAiB,GAAG,oEAAc,CAAC,8BAAf,CAA8C,SAA9C,EAAyD,KAAK,CAAC,SAA/D,CAA1B;AACA,QAAM,cAAc,GAAG,oEAAc,CAAC,mCAAf,CAAmD,iBAAnD,CAAvB;AAEA,QAAM,CAAE,QAAF,EAAY,UAAZ,IAA2B,sEAAc,CAAiB,gEAAM,CAAC,WAAxB,CAA/C;AAEA,SACE,oDAAC,yDAAD,EAAQ;AACN,OAAG,EAAE,MAAM,CAAC,EADN;AAEN,WAAO,EAAE,aAFH;AAGN,aAAS,EAAE,uCAAuC,gEAAM,CAAC,KAAK;AAHxD,GAAR,EAKE;AAAK,OAAG,EAAE;AAAV,KACG,UAAU,IACT;AAAK,aAAS,EAAE,8BAA8B,gEAAM,CAAC,IAAI;AAAzD,KACE;AAAI,aAAS,EAAC;AAAd,KAAoB,MAAM,CAAC,IAA3B,CADF,EAEE,+DAAI,MAAM,CAAC,WAAX,CAFF,CAFJ,EAOE,oDAAC,4EAAD,EAAc;AACZ,QAAI,EAAE,MAAM,CAAC,UADD;AAEZ,eAAW,EAAE,0EAAW,CAAC,aAFb;AAGZ,WAAO,EAAE,YAHG;AAIZ,QAAI,EAAE,kEAAa,CAAC;AAJR,GAAd,EAKI,oDAAC,oFAAD,EAAkB;AAAC,QAAI,EAAE,wFAAqB,CAAC;AAA7B,GAAlB,CALJ,EAMI;AAAK,aAAS,EAAE,gCAAgC,gEAAM,CAAC,cAAc;AAArE,KACC,CAAC,CAAC,SAAF,IAAe,SAAS,CAAC,MAAzB,GACG,oDAAC,2EAAD,EAAc;AAAC,YAAQ,EAAG,cAAZ;AAA6B,UAAM,EAAC;AAApC,GAAd,CADH,GAEG,oDAAC,mDAAD,EAAM;AAAC,QAAI,EAAE,uDAAS,CAAC,MAAjB;AAAyB,QAAI,EAAE,MAAM,CAAC;AAAtC,GAAN,CAHJ,CANJ,CAPF,CALF,CADF;AA6BD,C;;;;;;;;;;;AC7ED;AACA,kBAAkB,iP;;;;;;;;;;;;ACDlB;AAAA;AAAA;AAAA;AAAA;AAGA;;;;;;;;;AAQM,SAAU,gBAAV,CAAwD,WAAxD,EAAwF;;;AAC5F,QAAM,CAAE,SAAF,EAAa,YAAb,IAA8B,+CAAe,KAAf,CAApC;AAEA,kDAAgB,MAAK;;;AACnB,QAAI,CAAC,WAAW,CAAC,OAAjB,EAA0B;AACxB,kBAAY,CAAC,KAAD,CAAZ;AACA;AACD,KAJkB,CAMnB;;;AACA,QAAI,WAAW,CAAC,KAAZ,KAAiB,MAAI,WAAW,CAAC,aAAhB,MAA6B,IAA7B,IAA6B,aAA7B,GAA6B,MAA7B,GAA6B,GAAE,kBAAhD,CAAJ,EACE,YAAY,CAAC,IAAD,CAAZ,CADF,KAGE,YAAY,CAAC,KAAD,CAAZ;AAEH,GAZD,EAYG,CAAE,WAAW,CAAC,OAAd,EAAqB,MAAE,WAAW,CAAC,aAAd,MAA2B,IAA3B,IAA2B,aAA3B,GAA2B,MAA3B,GAA2B,GAAE,kBAAlD,EAAsE,WAAW,CAAC,KAAlF,EAAyF,WAAW,CAAC,MAArG,CAZH;AAcA,kDAAgB,MAAK;AACnB,QAAI,WAAW,CAAC,YAAhB,EACE,YAAY,CAAC,KAAD,CAAZ;AACH,GAHD,EAGG,CAAC,WAAW,CAAC,YAAb,CAHH;AAKA,SAAO,SAAP;AACD,C;;;;;;;;;;;;AChCD;AAAA;AAAA;AAAA;AAEA,MAAM,WAAW,GAAG,YAApB;AACA,MAAM,UAAU,GAAG,UAAnB;AACA,MAAM,YAAY,GAAG,CAArB;;AAEA,SAAS,qBAAT,CAA+B,cAA/B,EAAuD;AACrD;;;AAGA,MAAI,MAAM,GAAG,YAAb;AAEA,MAAI,UAAJ,EAAgB,OAAhB;AACA,MAAI,aAAa,GAAY,KAA7B;AAEA,QAAM,MAAM,GAAa,EAAzB,CATqD,CAWrD;;AACA,gBAAc,GAAG,cAAc,CAAC,IAAf,CAAoB,CAAC,CAAD,EAAI,CAAJ,KAAU,CAAC,GAAG,CAAlC,CAAjB;AAEA,MAAI,CAAJ,EAAO,CAAP;;AAEA,OAAK,CAAC,GAAG,CAAT,EAAY,CAAC,GAAG,cAAc,CAAC,MAA/B,EAAuC,CAAC,EAAxC,EAA4C;AAC1C,KAAC,GAAG,CAAC,GAAG,CAAR,CAD0C,CAG1C;;AACA,QAAI,CAAC,aAAL,EACE,UAAU,GAAG,cAAc,CAAC,CAAD,CAA3B;AAEF,WAAO,GAAG,cAAc,CAAC,CAAD,CAAxB;AAEA;;;;;;AAKA,QAAI,cAAc,CAAC,CAAD,CAAd,GAAoB,MAApB,KAA+B,OAAnC,EAA4C;AAC1C,mBAAa,GAAG,IAAhB;AAED,KAHD,MAGO,IAAI,aAAJ,EAAmB;AAExB;;;;AAKA,YAAM,CAAC,IAAP,CAAY,GAAG,UAAU,MAAM,cAAc,CAAC,CAAD,CAAG,EAAhD;AACA,mBAAa,GAAG,KAAhB;AAED,KAVM,MAUA;AAEL;;;AAIA,YAAM,CAAC,IAAP,CAAY,GAAG,cAAc,CAAC,CAAD,CAAG,EAAhC;AACA,mBAAa,GAAG,KAAhB;AACD;AAEF;;AAED,SAAO,MAAP;AACD;;AAEM,MAAM,cAAc,GAAG;AAC5B;;;;;AAKA,gCAA8B,CAC5B,eAD4B,EAE5B,qBAF4B,EAEiB;AAE7C,UAAM,iBAAiB,GAAG,eAAe,CAAC,GAAhB,CAAoB,QAAQ,IAAI,QAAQ,CAAC,EAAT,CAAY,QAAZ,EAAhC,CAA1B;AAEA;;;;AAGA,UAAM,iBAAiB,GAAG,qBAAqB,CAAC,MAAtB,CAA6B,YAAY,IAAG;AACpE,aAAO,iBAAiB,CAAC,QAAlB,CAA2B,YAAY,CAAC,QAAb,CAAsB,QAAtB,EAA3B,CAAP;AACD,KAFyB,CAA1B;AAIA,WAAO,iBAAP;AACD,GApB2B;;AAsB5B,qCAAmC,CAAC,qBAAD,EAA8C;AAC/E,QAAI,qBAAqB,CAAC,MAAtB,KAAiC,CAArC,EACE,OAAO,qBAAqB,CAAC,CAAD,CAA5B;AAEF;;;;AAGA,UAAM,SAAS,GAAG,qBAAqB,CAAC,GAAtB,CAA0B,CAAC,IAAI,CAAC,CAAC,IAAjC,EAAuC,IAAvC,CAA4C,GAA5C,CAAlB;AAEA;;;;;AAIA,UAAM,UAAU,GAAG,SAAS,CAAC,KAAV,CAAgB,WAAhB,CAAnB;AACA,UAAM,WAAW,GAAG,SAAS,CAAC,KAAV,CAAgB,UAAhB,CAApB;AAEA,QAAI,CAAC,UAAD,IAAe,CAAC,WAApB,EAAiC,OAAO,qBAAqB,CAAC,CAAD,CAA5B;AAEjC,UAAM,cAAc,GAAG,UAAU,CAC9B,GADoB,CAChB,CAAC,IAAI,CAAC,CADU,KACJ,EADnB;AAGA;;;;AAGA,UAAM,aAAa,GAAG,qBAAqB,CAAC,cAAD,CAA3C;AAEA;;;;AAGA,UAAM,YAAY,GAAG,WAAW,CAAC,CAAD,CAAhC;AAEA,WAAO;AACL,UAAI,EAAE,GAAG,YAAY,IAAI,aAAa,CAAC,IAAd,CAAmB,KAAnB,CAAyB;AAD7C,KAAP;AAGD,GAxD2B;;AA0D5B;;;AAGA,yCAAuC,CAAC,OAAD,EAAsB;AAC3D;AACA,UAAM,iBAAiB,GAAI,SAAD,IAA0B;AAClD,UAAI,cAAJ;AACA,UAAI,mBAAJ;AAEA,eAAS,CAAC,OAAV,CAAkB,QAAQ,IAAG;AAC3B,cAAM,KAAK,GAAG,CAAC,+EAAW,CAAC,KAAZ,CAAkB,QAAQ,CAAC,IAAT,CAAc,KAAd,CAAoB,WAApB,CAAlB,CAAf;;AAEA,YAAI,CAAC,cAAL,EAAqB;AACnB,wBAAc,GAAG,QAAjB;AACA,6BAAmB,GAAG,KAAtB;AACA;AACD;;AAED,YAAI,KAAK,GAAG,mBAAZ,EACE,cAAc,GAAG,QAAjB;AACH,OAXD;AAaA,aAAO,cAAP;AACD,KAlBD,CAF2D,CAsB3D;;;AACA,UAAM,YAAY,GAAuB,EAAzC;AAEA,QAAI,MAAM,GAAiB,EAA3B;AAEA,WAAO,CAAC,OAAR,CAAgB,MAAM,IAAG;AACvB,UAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAR,CAAjB,EAAgC;AAC9B,oBAAY,CAAC,MAAM,CAAC,IAAR,CAAZ,GAA4B,CAA5B;AACA,cAAM,CAAC,IAAP,CAAY,MAAZ;AACA;AACD;;AAED,YAAM,CAAC,IAAP,CAAY,MAAZ;AACA,kBAAY,CAAC,MAAM,CAAC,IAAR,CAAZ,GARuB,CAUvB;;AACA,YAAM,KAAK,GAAG,MAAM,CAAC,MAAP,CAAc,MAAM,CAAC,MAAP,GAAgB,YAAY,CAAC,MAAM,CAAC,IAAR,CAA1C,CAAd,CAXuB,CAavB;;AACA,YAAM,WAAW,GAAG,KAAK,CAAC,IAAN,CAAW,CAAC,CAAD,EAAS,CAAT,KAAmB;AAChD,cAAM,sBAAsB,GAAG,iBAAiB,CAAC,CAAC,CAAC,4BAAF,CAA+B,IAAhC,CAAhD;AACA,cAAM,uBAAuB,GAAG,iBAAiB,CAAC,CAAC,CAAC,4BAAF,CAA+B,IAAhC,CAAjD;AAEA,eAAO,sBAAsB,CAAC,IAAvB,CAA4B,aAA5B,CAA0C,uBAAuB,CAAC,IAAlE,CAAP;AACD,OALmB,CAApB;AAOA,YAAM,GAAG,MAAM,CAAC,MAAP,CAAc,WAAd,CAAT;AACD,KAtBD;AAwBA,WAAO,MAAP;AACD;;AAjH2B,CAAvB,C;;;;;;;;;;;;AClEP;AAAA;AAAA;AAAA;AAEO,MAAM,UAAU,GAAG;AACxB,+BAA6B,CAC3B,MAD2B,EAE3B,OAF2B,EAG3B,SAH2B,EAI3B,mBAJ2B,EAIC;AAE5B,QAAI,SAAS,GAAG,cAAhB,CAF4B,CAI5B;;AACA,QAAI,oDAAK,CAAC,OAAD,EAAU,SAAV,CAAL,IAA6B,oDAAK,CAAC,MAAD,EAAS,SAAT,CAAtC,EACE,SAAS,IAAI,aAAb;AAEF,QAAI,mBAAJ,EACE,SAAS,IAAI,IAAI,mBAAmB,EAApC;AAEF,WAAO,SAAP;AACD;;AAjBuB,CAAnB,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACFP;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AAEA,IAAM,SAAS,GAAG,sBAAlB;;AAEA,IAAM,cAAc,GAAG,SAAjB,cAAiB,CAAC,WAAD,EAAmC;AACxD,MAAM,kBAAkB,GAAG,8DAAI,CAAC,aAAL,CAAmB,QAAnB,EAA3B;AAEA,MAAM,cAAc,GAAG,uFAAc,CAAC,eAAf,GAAiC,OAAxD;AAEA,gEAAI,CAAC,aAAL,CAAmB,OAAnB,CAA2B;AACzB,eAAW,EAAE,cAAc,CAAC,WADH;AAEzB,UAAM,EAAE,cAAc,CAAC,MAFE;AAGzB,UAAM,EAAE,8DAAY,CAAC,gBAAb,CAA8B,kBAA9B,EAAkD,WAAlD;AAHiB,GAA3B;AAKD,CAVD;;AAgBA,aAAa,CAAC,YAAd,GAA6B;AAC3B,QAAM,EAAE,KADmB;AAE3B,WAAS,EAAE;AAFgB,CAA7B;AAKM,SAAU,aAAV,CAAwB,KAAxB,EAAiD;AAAA,0BAChC,iDAAiB,kEAAjB,CADgC;AAAA,MAC7C,QAD6C,qBAC7C,QAD6C;;AAAA,wBAGP,+CAAe,KAAf,CAHO;AAAA;AAAA,MAG7C,cAH6C;AAAA,MAG7B,iBAH6B;;AAAA,8BAI/B,uEAJ+B;AAAA;AAAA,MAI/C,GAJ+C;AAAA,MAI1C,MAJ0C;;AAMrD,kDAAgB,YAAK;AACnB,QAAI,OAAQ,MAAc,CAAC,oBAAvB,KAAgD,WAApD,EACE;;AAEF,QAAI,MAAJ,EAAY;AACV,uBAAiB,CAAC,IAAD,CAAjB;AACA;AACD;;AAED,QAAI,CAAC,MAAD,IAAW,cAAf,EAA+B;AAC7B,uBAAiB,CAAC,KAAD,CAAjB;AACA,iBAAW,CAAC,KAAD,CAAX;AACD;AACF,GAbD,EAaG,CAAC,MAAD,CAbH;;AAeA,WAAS,WAAT,CAAqB,YAArB,EAA0C;eAAA,CACxC;;;AACA,QAAM,cAAc,GAAG,YAAK,CAAC,SAAN,MAAe,IAAf,IAAe,aAAf,GAAe,MAAf,GAAe,GAAE,MAAjB,MAA4B,CAA5B,KAA6B,MAAI,oFAAW,CAAC,KAAZ,CAAkB,KAAK,CAAC,SAAxB,CAAJ,MAAsC,IAAtC,IAAsC,aAAtC,GAAsC,MAAtC,GAAsC,aAAnE,CAAvB;AAEA,uFAAe,CAAC,aAAhB,CAA8B;AAC5B,YAAM,EAAE,KAAK,CAAC,MAAN,CAAa,IADO;AAE5B,eAAS,EAAG,KAAK,CAAC,SAAN,IAAmB,CAAC,cAArB,GAAuC,KAAK,CAAC,SAA7C,GAAyD,EAFxC;AAG5B,cAAQ,EAAE,KAAK,CAAC,MAAN,IAAgB,CAAC,cAHC;AAI5B,kBAAY,EAAZ;AAJ4B,KAA9B,EAKG,mFAAe,CAAC,YAAhB,CAA6B,KAAK,CAAC,gBAAnC,EAAqD;AACtD,mBAAa,EAAE,6EAAa,CAAC,QADyB;AAEtD,gBAAU,EAAE,0EAAU,CAAC;AAF+B,KAArD,CALH;AAUA,QAAM,OAAO,GAAsB;AACjC,YAAM,EAAE,KAAK,CAAC,MADmB;AAEjC,YAAM,EAAE,KAAK,CAAC,MAAN,IAAgB,CAAC,cAFQ;AAGjC,eAAS,EAAG,KAAK,CAAC,SAAN,IAAmB,CAAC,cAArB,GAAuC,KAAK,CAAC,SAA7C,GAAyD;AAHnC,KAAnC;AAMA,YAAQ,CAAC;AAAE,UAAI,EAAE,OAAR;AAAiB,aAAO,EAAP;AAAjB,KAAD,CAAR;AACA,kBAAc,CAAC,OAAD,CAAd;AACD;;AAED,WAAS,YAAT,CAAsB,CAAtB,EAAyC;AACvC,KAAC,CAAC,cAAF;AAEA,uFAAe,CAAC,aAAhB,CAA8B;AAC5B,YAAM,EAAE,KAAK,CAAC,MAAN,CAAa;AADO,KAA9B,EAEG,mFAAe,CAAC,YAAhB,CAA6B,KAAK,CAAC,gBAAnC,EAAqD;AACtD,mBAAa,EAAE,6EAAa,CAAC,QADyB;AAEtD,gBAAU,EAAE,0EAAU,CAAC,MAF+B;AAGtD,gBAAU,EAAE,gFAAgB,CAAC;AAHyB,KAArD,CAFH;AAQA,QAAM,OAAO,GAAsB;AACjC,YAAM,EAAE,KAAK,CAAC,MADmB;AAEjC,YAAM,EAAE,KAFyB;AAGjC,eAAS,EAAE;AAHsB,KAAnC;AAMA,YAAQ,CAAC;AAAE,UAAI,EAAE,OAAR;AAAiB,aAAO,EAAP;AAAjB,KAAD,CAAR;AACA,kBAAc,CAAC,OAAD,CAAd;AACD;;AAED,WAAS,YAAT,CAAsB,CAAtB,EAAyC;AACvC,KAAC,CAAC,cAAF;AAEA,eAAW,CAAC,IAAD,CAAX;AACD;;AAED,SACE;AAAK,OAAG,EAAE,GAAV;AAAe,aAAS,2CAAoC,KAAK,CAAC,SAA1C;AAAxB,KACE,oDAAC,0FAAD,EAAU;AAAC,aAAS,EAAC,gDAAX;AAA4D,WAAO,EAAE;AAArE,GAAV,EACE,oDAAC,0EAAD,EAAK;AAAC,aAAS,EAAE,SAAZ;AAAuB,UAAM,EAAC;AAA9B,GAAL,CADF,CADF,EAKE,oDAAC,0FAAD,EAAU;AAAC,aAAS,EAAC,WAAX;AAAuB,WAAO,EAAE;AAAhC,GAAV,EACE,oDAAC,0EAAD,EAAK;AAAC,aAAS,EAAE,SAAZ;AAAuB,UAAM,EAAC;AAA9B,GAAL,CADF,CALF,CADF;AAWD,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1HD;AACA;AAGA;AACA;AAEA;AAOM,SAAU,YAAV,CAAuB,KAAvB,EAA+C;AAAA,wBACvB,+CAAe,KAAK,CAAC,MAAN,CAAa,IAA5B,CADuB;AAAA;AAAA,MAC3C,KAD2C;AAAA,MACpC,QADoC;;AAGnD,MAAM,eAAe,GAAG,KAAK,CAAC,MAAN,CAAa,eAAb,GACpB,KAAK,CAAC,MAAN,CAAa,eADO,GAEpB,8DAAY,CAAC,kBAAb,CAAgC,KAAK,CAAC,MAAN,CAAa,IAA7C,CAFJ;;AAHmD,0BAOjC,iDAAiB,kEAAjB,CAPiC;AAAA,MAO3C,KAP2C,qBAO3C,KAP2C;;AAQnD,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,MAAN,CAAa,EAAd,CAAzB;AAEA,kDAAgB,YAAK;AACnB,YAAQ,CAAC,8DAAY,CAAC,QAAb,CAAsB,KAAK,CAAC,MAA5B,EAAoC,WAApC,CAAD,CAAR;AACD,GAFD,EAEG,CAAE,KAAK,CAAC,MAAR,EAAgB,WAAW,CAAC,SAA5B,CAFH;AAIA,MAAM,SAAS,aAAM,0DAAM,CAAC,YAAb,cAAf;AACA,MAAM,UAAU,GAAG,WAAW,CAAC,MAAZ,GAAqB,UAArB,GAAkC,WAArD;AACA,MAAM,UAAU,GAAG,KAAK,CAAC,MAAN,CAAa,IAAb,KAAsB,UAAtB,GAAmC,0DAAM,CAAC,SAA1C,GAAsD,EAAzE;AAEA,SACE,oDAAC,wDAAD,EAAS,IAAT,EACE,oDAAC,wDAAQ,CAAC,MAAV,EAAgB;AAAC,MAAE,EAAE,KAAK,CAAC,MAAN,CAAa,EAAlB;AAAsB,aAAS,YAAK,SAAL,cAAkB,UAAlB,cAAgC,UAAhC;AAA/B,GAAhB,EACG,KADH,CADF,EAKE,oDAAC,wDAAQ,CAAC,IAAV,EAAc;AAAC,WAAO,EAAE,iBAAC,CAAD;AAAA,aAAyB,CAAC,CAAC,eAAF,EAAzB;AAAA;AAAV,GAAd,EACE;AAAK,aAAS,YAAK,0DAAM,CAAC,UAAZ,mBAA+B,KAAK,CAAC,MAAN,CAAa,IAAb,KAAsB,UAAtB,GAAmC,WAAnC,GAAiD,EAAhF;AAAd,KACE,oDAAC,eAAD,EAAgB;AAAC,oBAAgB,EAAE,KAAK,CAAC,gBAAzB;AAA2C,UAAM,EAAE,KAAK,CAAC;AAAzD,GAAhB,CADF,CADF,CALF,CADF;AAaD,C;;;;;;;;;;;AC7CD;AACA,kBAAkB,kH;;;;;;;;;;;;ACDlB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAEA;AAGA;AAEA;AAOM,SAAU,cAAV,CAAyB,KAAzB,EAAmD;;;AAAA,0BACrC,iDAAiB,kEAAjB,CADqC;AAAA,MAC/C,KAD+C,qBAC/C,KAD+C;;AAEvD,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,MAAN,CAAa,EAAd,CAAzB;;AAFuD,8BAIN,kGAAsB,CAAC,KAAK,CAAC,MAAN,CAAa,OAAd,EAAuB;AAC5F,kBAAc,EAAE,kBAAW,CAAC,SAAZ,MAAqB,IAArB,IAAqB,aAArB,GAAqB,MAArB,GAAqB,GAAE,GAAF,CAAM,WAAC;AAAA,aAAI,CAAC,CAAC,EAAN;AAAA,KAAP,CAArB,KAAyC;AADmC,GAAvB,CAJhB;AAAA,MAI/C,YAJ+C,yBAI/C,YAJ+C;AAAA,MAIjC,SAJiC,yBAIjC,SAJiC;AAAA,MAItB,WAJsB,yBAItB,WAJsB;;AAQvD,MAAM,UAAU,GAAG,WAAW,GAAG,GAAd,CAAkB,oBAAU;AAAA,WAAI,KAAK,CAAC,MAAN,CAAa,OAAb,CAAqB,IAArB,CAA0B,WAAC;AAAA,aAAI,CAAC,CAAC,EAAF,KAAS,UAAb;AAAA,KAA3B,CAAJ;AAAA,GAA5B,CAAnB;AAEA,SACE,0GACE;AAAI,aAAS,EAAC;AAAd,KAAyB,KAAK,CAAC,MAAN,CAAa,IAAtC,CADF,EAGE,oDAAC,oDAAD,EAAK;AAAC,aAAS,EAAC;AAAX,GAAL,EACG,KAAK,CAAC,MAAN,CAAa,OAAb,CAAqB,GAArB,CAAyB,gBAAM,EAAG;AACjC,WACE,oDAAC,iGAAD,EAAS;AACP,SAAG,EAAE,MAAM,CAAC,EADL;AAEP,WAAK,EAAE,MAAM,CAAC,IAFP;AAGP,UAAI,EAAE,MAAM,CAAC,EAHN;AAIP,QAAE,EAAE,MAAM,CAAC,EAJJ;AAKP,cAAQ,EAAE;AAAA,eAAM,YAAY,CAAC,MAAM,CAAC,EAAR,CAAlB;AAAA,OALH;AAMP,aAAO,EAAE,SAAS,CAAC,MAAM,CAAC,EAAR,CANX;AAOP,eAAS,EAAC;AAPH,KAAT,CADF;AAWD,GAZA,CADH,CAHF,EAmBE,oDAAC,2EAAD,EAAc;AACZ,UAAM,EAAE,CAAC,CAAC,UAAU,CAAC,MADT;AAEZ,UAAM,EAAE,KAAK,CAAC,MAFF;AAGZ,aAAS,EAAE,UAHC;AAIZ,oBAAgB,EAAE,KAAK,CAAC;AAJZ,GAAd,CAnBF,CADF;AA4BD,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvDD;AAEA;AAGA;AACA;AAOM,SAAU,cAAV,CAAyB,KAAzB,EAAmD;AAAA,0BACrC,4CAAK,CAAC,UAAN,CAAiB,kEAAjB,CADqC;AAAA,MAC/C,KAD+C,qBAC/C,KAD+C;;AAEvD,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,MAAN,CAAa,EAAd,CAAzB;;AAFuD,wBAIL,4CAAK,CAAC,QAAN,CAAe,WAAW,CAAC,SAA3B,CAJK;AAAA;AAAA,MAI/C,gBAJ+C;AAAA,MAI7B,mBAJ6B;;AAMvD,SACE,wHACG,KAAK,CAAC,MAAN,CAAa,OAAb,CAAqB,GAArB,CAAyB,gBAAM;AAAA,WAC9B,2DAAC,wDAAQ,CAAC,IAAV,EAAc;AACZ,SAAG,EAAE,MAAM,CAAC,EADA;AAEZ,aAAO,EAAE;AAAA,eAAM,mBAAmB,CAAC,CAAC,MAAD,CAAD,CAAzB;AAAA;AAFG,KAAd,EAIG,MAAM,CAAC,IAJV,CAD8B;AAAA,GAA/B,CADH,EAUE,2DAAC,2EAAD,EAAc;AACZ,UAAM,EAAE,CAAC,CAAC,gBADE;AAEZ,UAAM,EAAE,KAAK,CAAC,MAFF;AAGZ,aAAS,EAAE,gBAHC;AAIZ,aAAS,EAAC,WAJE;AAKZ,oBAAgB,EAAE,KAAK,CAAC;AALZ,GAAd,CAVF,CADF;AAoBD,C;;;;;;;;;;;;ACvCD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACJA;AAAA;AAAA;AAAA;AAAA;AAIM,SAAU,WAAV,CAAsB,KAAtB,EAA6C;AACjD,SACE,yGADF;AAGD,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACRD;AACA;AAEA;AAGA;AACA;AAEA;AAOM,SAAU,WAAV,CAAsB,KAAtB,EAA6C;;;AAAA,0BAC/B,iDAAiB,kEAAjB,CAD+B;AAAA,MACzC,KADyC,qBACzC,KADyC;;AAEjD,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,MAAN,CAAa,EAAd,CAAzB;;AAFiD,wBAIC,+CAAe,WAAW,CAAC,SAA3B,CAJD;AAAA;AAAA,MAIzC,gBAJyC;AAAA,MAIvB,mBAJuB;;AAKjD,kDAAgB;AAAA,WAAM,mBAAmB,CAAC,WAAW,CAAC,SAAb,CAAzB;AAAA,GAAhB,EAAkE,CAAC,WAAW,CAAC,SAAb,CAAlE;AAEA,SACE,0GACE;AAAI,aAAS,EAAC;AAAd,KAAyB,KAAK,CAAC,MAAN,CAAa,IAAtC,CADF,EAGE,oDAAC,oDAAD,EAAK;AAAC,aAAS,EAAC;AAAX,GAAL,EACG,KAAK,CAAC,MAAN,CAAa,OAAb,CAAqB,GAArB,CAAyB,gBAAM,EAAG;;;AACjC,QAAM,UAAU,GAAG,6BAAgB,IAAhB,IAAgB,aAAhB,GAAgB,MAAhB,GAAgB,GAAE,MAAlB,KAA4B,MAAM,CAAC,EAAP,KAAc,oFAAW,CAAC,KAAZ,CAAkB,gBAAlB,EAAoC,EAAjG;AAEA,WACE,oDAAC,oDAAI,CAAC,KAAN,EAAW;AACT,SAAG,EAAE,MAAM,CAAC,EADH;AAET,YAAM,MAFG;AAGT,UAAI,EAAC,OAHI;AAIT,WAAK,EAAE,MAAM,CAAC,IAJL;AAKT,UAAI,EAAE,MAAM,CAAC,EALJ;AAMT,QAAE,EAAE,MAAM,CAAC,EANF;AAOT,WAAK,EAAE,MAAM,CAAC,EAPL;AAQT,cAAQ,EAAE;AAAA,eAAM,mBAAmB,CAAC,CAAC,MAAD,CAAD,CAAzB;AAAA,OARD;AAST,aAAO,EAAE,UATA;AAUT,eAAS,EAAE,yDAAM,CAAC;AAVT,KAAX,CADF;AAcD,GAjBA,CADH,CAHF,EAwBE,oDAAC,oEAAD,EAAc;AACZ,UAAM,EAAE,CAAC,QAAC,gBAAD,MAAiB,IAAjB,IAAiB,aAAjB,GAAiB,MAAjB,GAAiB,GAAE,MAAnB,CADG;AAEZ,UAAM,EAAE,KAAK,CAAC,MAFF;AAGZ,aAAS,EAAE,gBAHC;AAIZ,oBAAgB,EAAE,KAAK,CAAC;AAJZ,GAAd,CAxBF,CADF;AAiCD,C;;;;;;;;;;;ACxDD;AACA,kBAAkB,wC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACDlB;AACA;AAEA;AAGA;AACA;AAEA;AAOM,SAAU,oBAAV,CAA+B,KAA/B,EAA+D;;;AAAA,0BACjD,iDAAiB,kEAAjB,CADiD;AAAA,MAC3D,KAD2D,qBAC3D,KAD2D;;AAEnE,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,MAAN,CAAa,EAAd,CAAzB;;AAFmE,wBAIjB,+CAAe,WAAW,CAAC,SAA3B,CAJiB;AAAA;AAAA,MAI3D,gBAJ2D;AAAA,MAIzC,mBAJyC;;AAMnE,kDAAgB;AAAA,WAAM,mBAAmB,CAAC,WAAW,CAAC,SAAb,CAAzB;AAAA,GAAhB,EAAkE,CAAC,WAAW,CAAC,SAAb,CAAlE;;AAEA,WAAS,QAAT,CAAkB,SAAlB,EAAyC;AACvC,uBAAmB,CAAC,CAAC,SAAD,CAAD,CAAnB;AACD;;AAED,SACE,0GACE;AAAI,aAAS,EAAC;AAAd,KAAyB,KAAK,CAAC,MAAN,CAAa,IAAtC,CADF,EAGE,oDAAC,oDAAD,EAAK;AAAC,aAAS,EAAC;AAAX,GAAL,EACE,oDAAC,4EAAD,EAAgB;AACd,cAAU,EAAE,KAAK,CAAC,MAAN,CAAa,OADX;AAEd,YAAQ,EAAE,QAFI;AAGd,YAAQ,EAAE,oFAAW,CAAC,KAAZ,CAAkB,gBAAlB;AAHI,GAAhB,CADF,CAHF,EAWE,oDAAC,oEAAD,EAAc;AACZ,UAAM,EAAE,CAAC,QAAC,gBAAD,MAAiB,IAAjB,IAAiB,aAAjB,GAAiB,MAAjB,GAAiB,GAAE,MAAnB,CADG;AAEZ,UAAM,EAAE,KAAK,CAAC,MAFF;AAGZ,aAAS,EAAE,gBAHC;AAIZ,oBAAgB,EAAE,KAAK,CAAC;AAJZ,GAAd,CAXF,CADF;AAoBD,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChDD;AAEA;AAGA;AACA;AAEM,SAAU,YAAV,CAAuB,KAAvB,EAAyC;AAAA,0BAC3B,iDAAiB,kEAAjB,CAD2B;AAAA,MACrC,KADqC,qBACrC,KADqC;;AAE7C,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,MAAN,CAAa,EAAd,CAAzB;;AAF6C,wBAIf,+CAAwB,WAAW,CAAC,MAApC,CAJe;AAAA;AAAA,MAIrC,MAJqC;AAAA,MAI7B,SAJ6B;;AAM7C,SACE,0GACE;AAAI,aAAS,EAAC;AAAd,KAAyB,KAAK,CAAC,MAAN,CAAa,IAAtC,CADF,EAEE;AAAG,aAAS,EAAC;AAAb,KAA4C,KAAK,CAAC,MAAN,CAAa,WAAzD,CAFF,EAIE,oDAAC,yFAAD,EAAa;AAAC,WAAO,EAAE;AAAA,aAAM,SAAS,CAAC,CAAC,MAAF,CAAf;AAAA,KAAV;AAAoC,MAAE,EAAE;AAAxC,GAAb,CAJF,EAME,oDAAC,oEAAD,EAAc;AAAC,UAAM,EAAE,MAAT;AAAiB,UAAM,EAAE,KAAK,CAAC,MAA/B;AAAuC,oBAAgB,EAAE,KAAK,CAAC;AAA/D,GAAd,CANF,CADF;AAUD,C;;;;;;;;;;;;ACxBD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACJA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAOM,SAAU,WAAV,CAAsB,KAAtB,EAA6C;AAAA,0BAC5B,iDAAiB,kEAAjB,CAD4B;AAAA,MACzC,QADyC,qBACzC,QADyC;;AAGjD,MAAM,YAAY,GAAG,SAAf,YAAe,GAAK;AACxB,QAAM,cAAc,GAAG,uFAAc,CAAC,eAAf,GAAiC,OAAxD;AAEA,QAAM,WAAW,GAAiB;AAChC,iBAAW,EAAE,cAAc,CAAC,WADI;AAEhC,YAAM,EAAE,cAAc,CAAC;AAFS,KAAlC;AAKA,uFAAe,CAAC,aAAhB,CAA8B;AAC5B,YAAM,EAAE;AADoB,KAA9B,EAEG,mFAAe,CAAC,YAAhB,CAA6B,KAAK,CAAC,gBAAnC,EAAqD;AACtD,gBAAU,EAAE,yEAAU,CAAC,MAD+B;AAEtD,gBAAU,EAAE,+EAAgB,CAAC,KAFyB;AAGtD,mBAAa,EAAE,4EAAa,CAAC;AAHyB,KAArD,CAFH;AAQA,QAAI,KAAK,CAAC,iBAAV,EACE,WAAW,CAAC,MAAZ,GAAqB;AAAE,WAAK,EAAE,KAAK,CAAC;AAAf,KAArB;AAEF,kEAAI,CAAC,aAAL,CAAmB,OAAnB,CAA2B,WAA3B;AAEA,YAAQ,CAAC;AACP,UAAI,EAAE,eADC;AAEP,aAAO,EAAE;AAFF,KAAD,CAAR;AAID,GAzBD;;AA2BA,SACE,oDAAC,0FAAD,EAAU;AACR,WAAO,EAAE,YADD;AAER,aAAS,EAAC;AAFF,GAAV,EAIE,oDAAC,0EAAD,EAAK;AAAC,aAAS,EAAC,oBAAX;AAAgC,UAAM,EAAC;AAAvC,GAAL,CAJF,CADF;AAQD,C;;;;;;;;;;;;ACtDD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAOM,SAAU,oBAAV,OAAoF;AAAA,wBAAnD,KAAmD;AAAA,MAAnD,KAAmD,2BAA3C,CAA2C;AAAA,MAAxC,WAAwC,QAAxC,WAAwC;AACxF,SACE;AAAK,aAAS,EAAC;AAAf,KACG,CAAC,WAAD,IACC;AAAK,aAAS,wBACV,2DAAM,CAAC,oBADG;AAAd,IAFJ,EAcE;AAAK,aAAS,EAAC;AAAf,KACG,KAAK,CAAC,KAAD,CAAL,CAAa,IAAb,CAAkB,IAAlB,EAAwB,GAAxB,CAA4B,UAAC,IAAD,EAAO,KAAP;AAAA,WAC3B;AAAK,SAAG,EAAE,KAAV;AAAiB,eAAS,YAAK,2DAAM,CAAC,aAAZ;AAA1B,MAD2B;AAAA,GAA5B,CADH,CAdF,CADF;AAsBD,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/BD;AAGA;AAEA;AACA;AACA;AAYM,SAAU,aAAV,CAAwB,KAAxB,EAAiD;AAAA,MAC7C,WAD6C,GACU,KADV,CAC7C,WAD6C;AAAA,MAChC,WADgC,GACU,KADV,CAChC,WADgC;AAAA,MACnB,WADmB,GACU,KADV,CACnB,WADmB;AAAA,MACN,WADM,GACU,KADV,CACN,WADM;AAGrD,MAAM,YAAY,GAAG,8CAAc,YAAK;AACtC,WAAO,8DAAY,CAAC,2BAAb,CAAyC,WAAzC,EAAsD,WAAtD,EAAmE,WAAnE,CAAP;AACD,GAFoB,EAElB,CAAC,WAAD,CAFkB,CAArB;;AAHqD,0BAOzB,iDAAiB,kEAAjB,EAAgC,YAAhC,CAPyB;AAAA;AAAA,MAO7C,KAP6C;AAAA,MAOtC,QAPsC;;AASrD,kDAAgB,YAAK;AACnB,QAAI,CAAC,KAAK,CAAC,SAAX,EACE;AAEF,YAAQ,CAAC;AACP,UAAI,EAAE,YADC;AAEP,aAAO,EAAE,8DAAY,CAAC,2BAAb,CAAyC,EAAzC,EAA6C,WAA7C,EAA0D,WAA1D;AAFF,KAAD,CAAR;AAID,GARD,EAQG,CAAC,KAAD,CARH;AAUA,SACE,oDAAC,kEAAa,CAAC,QAAf,EAAuB;AAAC,SAAK,EAAE;AAAE,WAAK,EAAL,KAAF;AAAS,cAAQ,EAAR;AAAT;AAAR,GAAvB,EACE,oDAAC,8FAAwB,CAAC,QAA1B,EAAkC;AAAC,SAAK,EAAC;AAAP,GAAlC,EACE;AAAS,aAAS,EAAC;AAAnB,KACG,CAAC,WAAD,IACC;AAAI,aAAS,EAAC;AAAd,KAAmF,oDAAC,0EAAD,EAAK;AAAC,UAAM,EAAC;AAAR,GAAL,CAAnF,CAFJ,EAKE;AAAK,aAAS,EAAC;AAAf,KACG,WAAW,CAAC,GAAZ,CAAgB,WAAC;AAAA,WAAI,oDAAC,mEAAD,EAAa;AAAC,SAAG,EAAE,CAAC,CAAC,EAAR;AAAY,YAAM,EAAE,CAApB;AAAuB,sBAAgB,EAAE,KAAK,CAAC;AAA/C,KAAb,CAAJ;AAAA,GAAjB,CADH,EAGG,WAAW,IACV,oDAAC,mEAAD,EAAa;AAAC,OAAG,EAAE,WAAW,CAAC,EAAlB;AAAsB,UAAM,EAAE,WAA9B;AAA2C,oBAAgB,EAAE,KAAK,CAAC;AAAnE,GAAb,CAJJ,EAOG,8DAAY,CAAC,gBAAb,CAA8B,WAA9B,KACC,oDAAC,kEAAD,EAAY;AAAC,qBAAiB,EAAE,WAAW,CAAC,KAAhC;AAAuC,oBAAgB,EAAE,KAAK,CAAC;AAA/D,GAAZ,CARJ,CALF,CADF,CADF,CADF;AAuBD,C;;;;;;;;;;;AC7DD;AACA,kBAAkB,qG;;;;;;;;;;;;;;;;;;;ACDlB;AAkCO,IAAM,aAAa,GAAG,2DAAa,CAAoB,IAApB,CAAnC;AAEP;;;;AAGM,SAAU,aAAV,CACJ,KADI,EAEJ,MAFI,EAEuD;AAE3D,UAAQ,MAAM,CAAC,IAAf;AACA,SAAK,OAAL;AACE,6CACK,KADL,uBAEG,MAAM,CAAC,OAAP,CAAe,MAAf,CAAsB,EAFzB,EAE8B;AAC1B,cAAM,EAAE,MAAM,CAAC,OAAP,CAAe,MADG;AAE1B,iBAAS,EAAE,MAAM,CAAC,OAAP,CAAe;AAFA,OAF9B;;AAQF,SAAK,OAAL;AACE,6CACK,KADL,uBAEG,MAAM,CAAC,OAAP,CAAe,MAAf,CAAsB,EAFzB,EAE8B;AAC1B,cAAM,EAAE,MAAM,CAAC,OAAP,CAAe,MADG;AAE1B,iBAAS,EAAE,MAAM,CAAC,OAAP,CAAe;AAFA,OAF9B;;AAQF,SAAK,eAAL;AACE,6CACK,KADL,GACU;AACR,iBAAS,EAAE;AADH,OADV;;AAKF,SAAK,YAAL;AACE,2DACK,KADL,GAEK,MAAM,CAAC,OAFZ,GAEmB;AACjB,iBAAS,EAAE;AADM,OAFnB;;AAMF;AACE,aAAO,KAAP;AAjCF;AAmCD,C;;;;;;;;;;;;AC9ED;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAA;AAEA;AAEA;AACA;AAIA;AAGA,IAAM,SAAS,GAAG,kGAAe,CAAC,gBAAhB,CAAiC,cAAjC,CAAlB;AAYO,IAAM,OAAO,GAAsB;AACxC,YAAU,EAAE,oBAAC,OAAD;AAAA,WAA8B;AACxC,QAAE,EAAE,UADoC;AAExC,UAAI,EAAE,SAAS,CAAC,eAAD,CAFyB;AAGxC,UAAI,EAAE,UAHkC;AAIxC,aAAO,EAAP;AAJwC,KAA9B;AAAA,GAD4B;AAOxC,WAAS,EAAE,mBAAC,OAAD;AAAA,WAA8B;AACvC,QAAE,EAAE,WADmC;AAEvC,UAAI,EAAE,SAAS,CAAC,WAAD,CAFwB;AAGvC,UAAI,EAAE,OAHiC;AAIvC,qBAAe,EAAE,wFAJsB;AAKvC,aAAO,EAAP;AALuC,KAA9B;AAAA,GAP6B;AAcxC,YAAU,EAAE,oBAAC,OAAD;AAAA,WAA8B;AACxC,QAAE,EAAE,YADoC;AAExC,UAAI,EAAE,SAAS,CAAC,aAAD,CAFyB;AAGxC,UAAI,EAAE,OAHkC;AAIxC,aAAO,EAAP;AAJwC,KAA9B;AAAA,GAd4B;AAoBxC,SAAO,EAAE,iBAAC,OAAD;AAAA,WAA8B;AACrC,QAAE,EAAE,SADiC;AAErC,UAAI,EAAE,SAAS,CAAC,SAAD,CAFsB;AAGrC,UAAI,EAAE,QAH+B;AAIrC,aAAO,EAAP;AAJqC,KAA9B;AAAA,GApB+B;AA0BxC,cAAY,EAAE;AAAA,WAAO;AACnB,QAAE,EAAE,cADe;AAEnB,UAAI,EAAE,SAAS,CAAC,cAAD,CAFI;AAGnB,UAAI,EAAE,QAHa;AAInB,iBAAW,EAAE,SAAS,CAAC,yBAAD;AAJH,KAAP;AAAA,GA1B0B;AAgCxC,OAAK,EAAE;AAAA,WAAO;AACZ,QAAE,EAAE,OADQ;AAEZ,UAAI,EAAE,SAAS,CAAC,OAAD,CAFH;AAGZ,UAAI,EAAE,QAHM;AAIZ,iBAAW,EAAE,SAAS,CAAC,kBAAD;AAJV,KAAP;AAAA,GAhCiC;AAsCxC,WAAS,EAAE,mBAAC,OAAD;AAAA,WAA8B;AACvC,QAAE,EAAE,WADmC;AAEvC,UAAI,EAAE,SAAS,CAAC,WAAD,CAFwB;AAGvC,UAAI,EAAE,UAHiC;AAIvC,aAAO,EAAP;AAJuC,KAA9B;AAAA;AAtC6B,CAAnC;AA8CA,IAAM,YAAY,GAAG;AAC1B,gBAD0B,4BACZ;AACZ,WAAO;AACL,QAAE,EAAE,aADC;AAEL,UAAI,EAAE,SAAS,CAAC,aAAD,CAFV;AAGL,UAAI,EAAE,cAHD;AAIL,aAAO,EAAE;AAJJ,KAAP;AAMD,GARyB;AAU1B,oBAV0B,8BAUP,IAVO,EAUS;AACjC,YAAQ,IAAR;AACA,WAAK,QAAL;AACE,eAAO,UAAC,KAAD;AAAA,iBAAgB,oDAAC,gFAAD,EAAa;AAAC,eAAG,EAAE,KAAK,CAAC;AAAZ,aAAoB,KAApB,CAAb,CAAhB;AAAA,SAAP;;AACF,WAAK,UAAL;AACE,eAAO,UAAC,KAAD;AAAA,iBAAgB,oDAAC,kFAAD,EAAe;AAAC,eAAG,EAAE,KAAK,CAAC;AAAZ,aAAoB,KAApB,CAAf,CAAhB;AAAA,SAAP;;AACF,WAAK,OAAL;AACE,eAAO,UAAC,KAAD;AAAA,iBAAgB,oDAAC,+EAAD,EAAY;AAAC,eAAG,EAAE,KAAK,CAAC;AAAZ,aAAoB,KAApB,CAAZ,CAAhB;AAAA,SAAP;;AACF,WAAK,QAAL;AACE,eAAO,UAAC,KAAD;AAAA,iBAAgB,oDAAC,gFAAD,EAAa;AAAC,eAAG,EAAE,KAAK,CAAC;AAAZ,aAAoB,KAApB,CAAb,CAAhB;AAAA,SAAP;;AACF,WAAK,UAAL;AACE,eAAO,UAAC,KAAD;AAAA,iBAAgB,oDAAC,kFAAD,EAAe;AAAC,eAAG,EAAE,KAAK,CAAC;AAAZ,aAAoB,KAApB,CAAf,CAAhB;AAAA,SAAP;;AACF,WAAK,cAAL;AACE,eAAO,UAAC,KAAD;AAAA,iBAAgB,oDAAC,+EAAD,EAAqB;AAAC,eAAG,EAAE,KAAK,CAAC;AAAZ,aAAoB,KAApB,CAArB,CAAhB;AAAA,SAAP;AAZF;AAcD,GAzByB;AA2B1B,6BA3B0B,yCA8BO;AAAA,QAF/B,WAE+B,uEAFL,EAEK;AAAA,QAD/B,WAC+B,uEADD,IACC;AAAA,QAA/B,WAA+B,uEAAJ,IAAI;AAE/B,QAAM,aAAa,GAAoB;AACrC,cAAQ,EAAE;AACR,cAAM,EAAE,CAAC,CAAC,WAAW,CAAC,QADd;AAER,iBAAS,EAAE,kCAAkC,CAAC,WAAD,EAAc,WAAd,EAA2B,UAA3B;AAFrC,OAD2B;AAMrC,gBAAU,EAAE;AACV,cAAM,EAAE,CAAC,CAAC,WAAW,CAAC,UADZ;AAEV,iBAAS,EAAE,kCAAkC,CAAC,WAAD,EAAc,WAAd,EAA2B,YAA3B;AAFnC,OANyB;AAWrC,aAAO,EAAE;AACP,cAAM,EAAE,CAAC,CAAC,WAAW,CAAC,OADf;AAEP,iBAAS,EAAE,WAAW,CAAC,OAAZ,IAAuB;AAF3B,OAX4B;AAgBrC,kBAAY,EAAE;AACZ,cAAM,EAAE,WAAW,CAAC;AADR,OAhBuB;AAoBrC,WAAK,EAAE;AACL,cAAM,EAAE,WAAW,CAAC;AADf,OApB8B;AAwBrC,eAAS,EAAE;AACT,cAAM,EAAE,CAAC,CAAC,WAAW,CAAC,SADb;AAET,iBAAS,EAAE,kCAAkC,CAAC,WAAD,EAAc,WAAd,EAA2B,WAA3B;AAFpC,OAxB0B;AA6BrC,eAAS,EAAE;AACT,cAAM,EAAE,CAAC,CAAC,WAAW,CAAC,SADb;AAET,iBAAS,EAAE,kCAAkC,CAAC,WAAD,EAAc,WAAd,EAA2B,WAA3B;AAFpC,OA7B0B;AAkCrC,iBAAW,EAAE;AACX,cAAM,EAAE,KADG,CACG;;AADH;AAlCwB,KAAvC;AAuCA,QAAM,YAAY,GAAG,WAAW,CAAC,MAAZ,CAAoC,UAAC,KAAD,EAAyB,MAAzB,EAAmC;AAC1F,WAAK,CAAC,MAAM,CAAC,EAAR,CAAL,GAAmB,aAAa,CAAC,MAAM,CAAC,EAAR,CAAhC;AACA,aAAO,KAAP;AACD,KAHoB,EAGlB,EAHkB,CAArB;AAKA,QAAI,WAAJ,EACE,YAAY,CAAC,WAAb,GAA2B,aAAa,CAAC,WAAzC;AAEF,WAAO,YAAP;AACD,GAhFyB;AAkF1B,kBAlF0B,4BAkFT,WAlFS,EAkFc;AACtC,QAAM,SAAS,GAAG,MAAM,CAAC,IAAP,CAAY,WAAZ,CAAlB;AAEA,QAAI,CAAC,SAAS,CAAC,MAAf,EACE,OAAO,KAAP;AAEF,QAAM,aAAa,GAAG,SAAS,CAAC,MAAV,CAAiB,WAAC,EAAG;AACzC;AACA,UAAI,CAAC,KAAK,OAAN,IAAiB,CAAC,KAAK,QAAvB,IAAmC,CAAC,KAAK,MAA7C,EACE,OAAO,KAAP,CAHuC,CAKzC;;AACA,UAAI,KAAK,CAAC,OAAN,CAAc,WAAW,CAAC,CAAD,CAAzB,KAAiC,CAAC,WAAW,CAAC,CAAD,CAAX,CAAe,MAArD,EACE,OAAO,KAAP;AAEF,aAAO,IAAP;AACD,KAVqB,CAAtB;AAYA,WAAO,CAAC,CAAC,aAAa,CAAC,MAAvB;AACD,GArGyB;AAuG1B,UAvG0B,oBAuGjB,MAvGiB,EAuGK,WAvGL,EAuG6B;;;AACrD,QAAI,QAAC,WAAW,CAAC,SAAb,MAAsB,IAAtB,IAAsB,aAAtB,GAAsB,MAAtB,GAAsB,GAAE,MAAxB,CAAJ,EACE,OAAO,MAAM,CAAC,IAAd;AAEF,QAAI,MAAM,CAAC,IAAP,KAAgB,UAApB,EACE,OAAO,oFAAW,CAAC,KAAZ,CAAkB,WAAW,CAAC,SAA9B,EAAyC,IAAhD;;AAEF,QAAI,MAAM,CAAC,IAAP,KAAgB,OAApB,EAA6B;AAC3B,UAAM,SAAS,GAAG,oFAAW,CAAC,KAAZ,CAAkB,WAAW,CAAC,SAA9B,CAAlB;AACA,UAAI,CAAC,SAAD,IAAc,SAAS,WAA3B,EACE,OAAO,MAAM,CAAC,IAAd;AAEF,aAAO,SAAS,CAAC,IAAjB;AACD;;AAED,QAAI,MAAM,CAAC,IAAP,KAAgB,UAApB,EACE,iBAAU,MAAM,CAAC,IAAjB,gBAA2B,WAAW,CAAC,SAAZ,CAAsB,MAAjD;AACH,GAxHyB;AA0H1B,kBA1H0B,4BA0HT,WA1HS,EA0HgB,KA1HhB,EA0HwC;AAAA,wBACpC,KAAK,CAAC,MAD8B;AAAA,QACpD,KADoD,iBACxD,EADwD;AAAA,QAC7C,IAD6C,iBAC7C,IAD6C;AAGhE,QAAM,aAAa,qBAAQ,WAAR,CAAnB;;AAEA,YAAQ,IAAR;AACA,WAAK,QAAL;AACE,qBAAa,CAAC,KAAD,CAAb,GAAuB,KAAK,CAAC,MAAN,GAAe,MAAf,GAAwB,EAA/C;AACA;;AAEF,WAAK,OAAL;AACA,WAAK,UAAL;AACE,qBAAa,CAAC,KAAD,CAAb,GAAuB,kBAAkB,CAAC,KAAK,CAAC,SAAP,CAAzC;AACA;;AAEF,WAAK,UAAL;AACE,qBAAa,CAAC,KAAD,CAAb,GAAuB,KAAK,CAAC,MAAN,GAAe,KAAK,CAAC,SAAN,CAAgB,GAAhB,CAAoB,gBAAM;AAAA,iBAAI,MAAM,CAAC,EAAX;AAAA,SAA1B,CAAf,GAA0D,EAAjF;AAXF;;AAcA,QAAI,CAAC,aAAa,CAAC,KAAD,CAAlB,EAA2B;AACzB,aAAO,aAAa,CAAC,KAAD,CAApB;AAEF,WAAO,aAAP;AACD,GAjJyB;;AAmJ1B;;;;;;;;AAQA,uBA3J0B,iCA2JJ,WA3JI,EA2JmB;AAC3C,QAAM,CAAC,GAAG,WAAW,CAAC,KAAtB;AACA,QAAM,KAAK,GAAG,gBAAgB,CAAC,WAAD,CAA9B;AACA,QAAM,MAAM,GAAG,eAAe,CAAC,WAAD,CAA9B;AAEA,QAAM,kBAAkB,GAAe,EAAvC;AAEA,QAAI,CAAJ,EACE,kBAAkB,CAAC,CAAnB,GAAuB,CAAvB;AAEF,QAAI,KAAJ,EACE,kBAAkB,CAAC,KAAnB,GAA2B,KAA3B;AAEF,QAAI,MAAJ,EACE,kBAAkB,CAAC,MAAnB,cAAgC,MAAhC;AAEF,QAAI,WAAW,CAAC,MAAhB,EACE,kBAAkB,CAAC,MAAnB,GAA4B,WAAW,CAAC,MAAxC;AAEF,WAAO,kBAAP;AACD,GA/KyB;;AAiL1B;;;;;AAKA,8BAtL0B,wCAsLG,aAtLH,EAsLwB;AAChD,QAAI,CAAC,aAAL,EACE,OAAO,EAAP,CAF8C,CAIhD;;AACA,iBAAa,GAAG,aAAa,CAAC,OAAd,CAAsB,GAAtB,EAA2B,GAA3B,EAAgC,OAAhC,CAAwC,GAAxC,EAA6C,GAA7C,CAAhB;AAEA,QAAM,cAAc,GAAG,aAAa,CAAC,KAAd,CAAoB,GAApB,CAAvB;AAEA,QAAI,gBAAgB,GAAW,EAA/B;AACA,QAAI,eAAe,GAAa,EAAhC;AAEA,kBAAc,CAAC,OAAf,CAAuB,mBAAS,EAAG;AACjC,UAAI,SAAS,CAAC,QAAV,CAAmB,GAAnB,CAAJ,EACE,gBAAgB,GAAG,SAAnB,CADF,KAGE,eAAe,CAAC,IAAhB,CAAqB,SAArB;AACH,KALD;;AAZgD,gCAmBjB,gBAAgB,CAAC,KAAjB,CAAuB,GAAvB,CAnBiB;AAAA;AAAA,QAmBxC,OAnBwC;AAAA,QAmB/B,SAnB+B;;AAqBhD,WAAO;AACL,YAAM,EAAE,eADH;AAEL,aAAO,EAAP,OAFK;AAGL,eAAS,EAAT;AAHK,KAAP;AAKD,GAhNyB;AAkN1B;AACA,oBAnN0B,8BAmNP,YAnNO,EAmNa;AACrC,QAAI,CAAC,YAAL,EACE,OAAO,EAAP,CAFmC,CAIrC;;AACA,gBAAY,GAAG,YAAY,CAAC,KAAb,CAAmB,CAAnB,EAAsB,CAAC,CAAvB,CAAf,CALqC,CAOrC;AACA;;AACA,QAAM,YAAY,GAAG,YAAY,CAAC,KAAb,CAAmB,GAAnB,CAArB;AAEA,QAAM,qBAAqB,GAAa,EAAxC;AAEA,QAAI,gBAAgB,GAAG,EAAvB;AACA,gBAAY,CAAC,OAAb,CAAqB,mBAAS,EAAG;AAC/B;AACA;AAEA,UAAI,SAAS,CAAC,QAAV,CAAmB,GAAnB,CAAJ,EAA6B;AAC3B,wBAAgB,GAAG,SAAS,CAAC,KAAV,CAAgB,GAAhB,EAAqB,CAArB,CAAnB;AACA,6BAAqB,CAAC,IAAtB,CAA2B,SAA3B;AACA;AACD;;AAED,UAAM,gBAAgB,aAAM,gBAAN,cAA0B,SAA1B,CAAtB;AACA,2BAAqB,CAAC,IAAtB,CAA2B,gBAA3B;AACD,KAZD,EAdqC,CA4BrC;AACA;;AACA,WAAO,qBAAqB,CAAC,MAAtB,CAA6B,UAAC,SAAD,EAAwB,SAAxB,EAAqC;AAAA,6BAChD,SAAS,CAAC,KAAV,CAAgB,GAAhB,CADgD;AAAA;AAAA,UAC/D,GAD+D;AAAA,UAC1D,KAD0D;;AAGvE,UAAI,SAAS,CAAC,GAAD,CAAT,IAAkB,CAAC,KAAK,CAAC,OAAN,CAAc,SAAS,CAAC,GAAD,CAAvB,CAAvB,EAAsD;AACpD,YAAM,IAAI,GAAG,SAAS,CAAC,GAAD,CAAtB;AACA,iBAAS,CAAC,GAAD,CAAT,GAAiB,CAAC,IAAD,CAAjB;AACD;;AAED,UAAI,KAAK,CAAC,OAAN,CAAc,SAAS,CAAC,GAAD,CAAvB,CAAJ,EACE,SAAS,CAAC,GAAD,CAAT,CAAe,IAAf,CAAoB,KAApB,EADF,KAGE,SAAS,CAAC,GAAD,CAAT,GAAiB,KAAjB;AAEF,aAAO,SAAP;AACD,KAdM,EAcJ,EAdI,CAAP;AAeD,GAhQyB;;AAkQ1B;;;;AAIA,sBAtQ0B,kCAsQN;AAClB,WAAO,CACL;AACE,QAAE,EAAE,UADN;AAEE,UAAI,EAAE,SAAS,CAAC,UAAD,CAFjB;AAGE,iBAAS;AAHX,KADK,EAML;AACE,QAAE,EAAE,QADN;AAEE,UAAI,EAAE,SAAS,CAAC,QAAD;AAFjB,KANK,EAUL;AACE,QAAE,EAAE,WADN;AAEE,UAAI,EAAE,SAAS,CAAC,WAAD;AAFjB,KAVK,EAcL;AACE,QAAE,EAAE,QADN;AAEE,UAAI,EAAE,SAAS,CAAC,QAAD;AAFjB,KAdK,EAkBL;AACE,QAAE,EAAE,QADN;AAEE,UAAI,EAAE,SAAS,CAAC,QAAD;AAFjB,KAlBK,CAAP;AAuBD,GA9RyB;AAgS1B,oBAhS0B,gCAgSR;AAChB,WAAO,CACL;AACE,QAAE,EAAE,iBADN;AAEE,UAAI,EAAE,SAAS,CAAC,eAAD,CAFjB;AAGE,iBAAS;AAHX,KADK,EAML;AACE,QAAE,EAAE,iBADN;AAEE,UAAI,EAAE,SAAS,CAAC,eAAD;AAFjB,KANK,EAUL;AACE,QAAE,EAAE,cADN;AAEE,UAAI,EAAE,SAAS,CAAC,aAAD;AAFjB,KAVK,EAcL;AACE,QAAE,EAAE,cADN;AAEE,UAAI,EAAE,SAAS,CAAC,aAAD;AAFjB,KAdK,CAAP;AAmBD,GApTyB;AAsT1B,qBAtT0B,+BAsTN,UAtTM,EAsTqB;;;AAC7C,QAAI,QAAC,UAAD,MAAW,IAAX,IAAW,aAAX,GAAW,MAAX,GAAW,GAAE,MAAb,CAAJ,EACE,OAAO,EAAP;AAEF,WAAO,UAAU,CAAC,GAAX,CAAe,eAAK;AAAA,aAAK;AAC9B,UAAE,EAAE,KAAK,CAAC,IAAN,CAAW,WAAX,GAAyB,OAAzB,CAAiC,GAAjC,EAAsC,GAAtC,CAD0B;AAE9B,YAAI,EAAE,KAAK,CAAC;AAFkB,OAAL;AAAA,KAApB,CAAP;AAID,GA9TyB;AAgU1B,qBAhU0B,+BAgUN,UAhUM,EAgUqB;;;AAC7C,QAAI,QAAC,UAAD,MAAW,IAAX,IAAW,aAAX,GAAW,MAAX,GAAW,GAAE,MAAb,CAAJ,EACE,OAAO,EAAP;AAEF,WAAO,UAAU,CAAC,GAAX,CAAe,mBAAS;AAAA,aAAK;AAClC,UAAE,EAAE,SAAS,CAAC,IAAV,CAAe,WAAf,GAA6B,OAA7B,CAAqC,GAArC,EAA0C,GAA1C,CAD8B;AAElC,YAAI,EAAE,SAAS,CAAC;AAFkB,OAAL;AAAA,KAAxB,CAAP;AAID;AAxUyB,CAArB,C,CA2UP;;AACA,SAAS,kCAAT,CACE,WADF,EAEE,OAFF,EAGE,UAHF,EAGuB;AAErB,MAAM,MAAM,GAAG,OAAO,CAAC,IAAR,CAAa,WAAC;AAAA,WAAI,CAAC,CAAC,EAAF,KAAS,UAAb;AAAA,GAAd,CAAf;AAEA,MAAI,CAAC,MAAL,EACE,OAAO,EAAP;AAEF,MAAI,CAAC,WAAW,CAAC,UAAD,CAAhB,EACE,OAAO,MAAM,CAAC,OAAP,CAAe,MAAf,CAAsB,gBAAM;AAAA,WAAI,MAAM,WAAV;AAAA,GAA5B,CAAP;AAEF,MAAI,UAAU,GAAG,WAAW,CAAC,UAAD,CAA5B;AACA,MAAI,CAAC,KAAK,CAAC,OAAN,CAAc,UAAd,CAAL,EACE,UAAU,GAAG,CAAC,UAAD,CAAb;AAEF,SAAO,MAAM,CAAC,OAAP,CAAe,MAAf,CAAsB,gBAAM;AAAA,WAAI,UAAU,CAAC,QAAX,CAAoB,MAAM,CAAC,EAA3B,CAAJ;AAAA,GAA5B,CAAP;AACD;;AAED,SAAS,kBAAT,CAA4B,SAA5B,EAAqD;;;AACnD,MAAI,QAAC,SAAD,MAAU,IAAV,IAAU,aAAV,GAAU,MAAV,GAAU,GAAE,MAAZ,CAAJ,EACE,OAAO,EAAP;AAEF,SAAO,oFAAW,CAAC,KAAZ,CAAkB,SAAlB,EAA6B,EAApC;AACD;AAED;;;;;;AAIA,SAAS,gBAAT,CAA0B,WAA1B,EAAiD;AAC/C,MAAI,aAAa,GAAG,EAApB;;AAEA,MAAI,WAAW,CAAC,UAAD,CAAf,EAA6B;AAC3B,YAAQ,WAAW,CAAC,UAAD,CAAnB;AACA,WAAK,iBAAL;AACE,qBAAa,IAAI,gBAAjB;AACA;;AAEF,WAAK,iBAAL;AACE,qBAAa,IAAI,oBAAjB;AACA;;AAEF,WAAK,cAAL;AACE,qBAAa,IAAI,mBAAjB;AACA;;AAEF,WAAK,cAAL;AACE,qBAAa,IAAI,uBAAjB;AACA;;AAEF;AACE;AAlBF;AAoBD;;AAED,SAAO,aAAP;AACD;AAED;;;;;AAIA,SAAS,eAAT,CAAyB,WAAzB,EAAgD;AAC9C;AACA,MAAM,QAAQ,GAAG,CAAE,OAAF,EAAW,UAAX,EAAuB,QAAvB,EAAiC,MAAjC,CAAjB;AAEA,MAAM,iBAAiB,GAAG,sFAAY,CAAC,IAAb,CAAkB,WAAlB,EAA+B,QAA/B,CAA1B;AAEA,MAAM,aAAa,GAAG,MAAM,CAAC,IAAP,CAAY,iBAAZ,EAA+B,GAA/B,CAAmC,gBAAM,EAAG;AAChE,qBAAU,MAAV,cAAoB,iBAAiB,CAAC,MAAD,CAArC;AACD,GAFqB,CAAtB;AAIA,SAAO,aAAa,CAAC,IAAd,CAAmB,GAAnB,CAAP;AACD,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7dD;AAGA;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA,IAAM,UAAU,GAAG;AACjB,aAAW,EAAE;AACX,YAAQ,EAAE,EADC;AAEX,aAAS,EAAE,CAFA;AAGX,UAAM,EAAE;AAHG,GADI;AAOjB,cAAY,EAAE;AACZ,UAAM,EAAE,CADI;AAEZ,aAAS,EAAE,EAFC;AAGZ,UAAM,EAAE;AAHI;AAPG,CAAnB;AAcO,IAAM,YAAY,GAAG;AAC1B;;;AAGA,mBAJ0B,6BAIR,OAJQ,EAIc;AAAA,QAC9B,WAD8B,GACd,UADc,CAC9B,WAD8B;AAGtC,QAAM,QAAQ,GAAG,oFAAW,CAAC,QAAZ,CAAqB,OAAO,CAAC,QAA7B,EAAuC,WAAW,CAAC,QAAnD,CAAjB;AACA,QAAM,UAAU,GAAG,oFAAW,CAAC,KAAZ,CAAkB,OAAO,CAAC,MAA1B,CAAnB;AACA,QAAM,SAAS,GAAG,oFAAW,CAAC,QAAZ,CAAqB,OAAO,CAAC,SAA7B,EAAwC,WAAW,CAAC,SAApD,CAAlB;AACA,QAAM,MAAM,GAAG,oFAAW,CAAC,QAAZ,CAAqB,OAAO,CAAC,MAA7B,EAAqC,WAAW,CAAC,MAAjD,CAAf;AAEA,WAAO;AACL,cAAQ,EAAR,QADK;AAEL,gBAAU,EAAV,UAFK;AAGL,eAAS,EAAT,SAHK;AAIL,YAAM,EAAN,MAJK;AAKL,kBAAY,EAAE;AACZ,cAAM,EAAE,oFAAW,CAAC,OAAZ,CAAoB,OAAO,CAAC,MAA5B,EAAoC,OAAO,CAAC,MAAR,CAAe,MAAf,GAAwB,CAA5D,CADI;AAEZ,iBAAS,EAAE,oFAAW,CAAC,OAAZ,CAAoB,OAAO,CAAC,SAA5B,EAAuC,OAAO,CAAC,SAAR,CAAkB,MAAlB,GAA2B,WAAW,CAAC,SAA9E,CAFC;AAGZ,cAAM,EAAE,oFAAW,CAAC,OAAZ,CAAoB,OAAO,CAAC,MAA5B,EAAoC,OAAO,CAAC,MAAR,CAAe,MAAf,GAAwB,WAAW,CAAC,MAAxE;AAHI;AALT,KAAP;AAWD,GAvByB;AAyB1B,uBAzB0B,iCAyBJ,OAzBI,EAyBuB;AAAA,QACvC,YADuC,GACtB,UADsB,CACvC,YADuC;AAG/C,QAAM,SAAS,GAAG,oFAAW,CAAC,KAAZ,CAAyB,OAAO,CAAC,MAAjC,EAAyC,YAAY,CAAC,MAAtD,CAAlB;AACA,QAAM,YAAY,GAAG,oFAAW,CAAC,KAAZ,CAA4B,OAAO,CAAC,SAApC,EAA+C,YAAY,CAAC,SAA5D,CAArB;AACA,QAAM,UAAU,GAAG,oFAAW,CAAC,KAAZ,CAA0B,OAAO,CAAC,MAAlC,EAA0C,YAAY,CAAC,MAAvD,CAAnB;AAEA,WAAO,YAAY,CAAC,oBAAb,CAAkC,SAAlC,EAA6C,YAA7C,EAA2D,UAA3D,CAAP;AACD,GAjCyB;AAmC1B;AACA,sBApC0B,gCAqCxB,SArCwB,EAsCxB,YAtCwB,EAuCxB,UAvCwB,EAuCF;AAEtB,QAAM,SAAS,GAA2B,EAA1C,CAFsB,CAItB;;AACA,QAAM,WAAW,sBAAO,SAAP,CAAjB;;AACA,QAAM,cAAc,sBAAO,YAAP,CAApB;;AACA,QAAM,WAAW,sBAAO,UAAP,CAAjB,CAPsB,CAStB;;;AACA,QAAM,UAAU,GAAG,SAAS,CAAC,MAA7B;;AACA,SAAK,IAAI,KAAK,GAAG,CAAjB,EAAoB,KAAK,GAAG,UAA5B,EAAwC,KAAK,EAA7C,EAAiD;AAC/C,UAAM,YAAY,GAAG,WAAW,CAAC,KAAZ,EAArB,CAD+C,CAG/C;;AACA,UAAM,mBAAmB,GAAG,YAAY,CAAC,sBAAb,CAAoC,cAApC,EAAoD,WAApD,EAAiE,KAAjE,CAA5B;AAEA,kBAAY,IAAI,SAAS,CAAC,IAAV,CAAe;AAAE,YAAI,EAAE,OAAR;AAAiB,YAAI,EAAE;AAAvB,OAAf,CAAhB;AACA,yBAAmB,IAAI,SAAS,CAAC,IAAV,CAAe,mBAAf,CAAvB;AACD,KAnBqB,CAqBtB;;;AACA,QAAI,cAAc,CAAC,MAAnB,EAA2B;AACzB,oBAAc,CAAC,OAAf,CAAuB,cAAI;AAAA,eAAI,SAAS,CAAC,IAAV,CAAe;AAAE,cAAI,EAAE,UAAR;AAAoB,cAAI,EAAJ;AAApB,SAAf,CAAJ;AAAA,OAA3B;AACD;;AAED,QAAI,WAAW,CAAC,MAAhB,EAAwB;AACtB,iBAAW,CAAC,OAAZ,CAAoB,cAAI;AAAA,eAAI,SAAS,CAAC,IAAV,CAAe;AAAE,cAAI,EAAE,QAAR;AAAkB,cAAI,EAAJ;AAAlB,SAAf,CAAJ;AAAA,OAAxB;AACD,KA5BqB,CA8BtB;;;AACA,WAAO,SAAS,CAAC,MAAV,CAAiB,aAAG;AAAA,aAAI,GAAG,CAAC,IAAJ,IAAY,CAAC,CAAC,GAAG,CAAC,IAAJ,CAAS,MAA3B;AAAA,KAApB,CAAP;AACD,GAvEyB;;AAyE1B;;;AAGA,wBA5E0B,kCA4EH,SA5EG,EA4EsB,MA5EtB,EA4E0C,aA5E1C,EA4E+D;AACvF,QAAM,KAAK,GAAG,aAAa,GAAG,CAAhB,KAAsB,CAApC,CADuF,CAChD;;AAEvC,QAAK,KAAK,IAAI,MAAM,CAAC,MAAjB,IAA4B,CAAC,SAAS,CAAC,MAA3C,EACE,OAAO;AAAE,UAAI,EAAE,QAAR;AAAkB,UAAI,EAAE,MAAM,CAAC,KAAP;AAAxB,KAAP;AAEF,QAAK,CAAC,KAAD,IAAU,SAAS,CAAC,MAArB,IAAgC,CAAC,MAAM,CAAC,MAA5C,EACE,OAAO;AAAE,UAAI,EAAE,UAAR;AAAoB,UAAI,EAAE,SAAS,CAAC,KAAV;AAA1B,KAAP,CAPqF,CASvF;;AACA,WAAO,IAAP;AACD,GAvFyB;AAyF1B,uBAzF0B,iCA0FxB,GA1FwB,EA2FxB,SA3FwB,EA4FxB,YA5FwB,EA4FgE;AAExF,YAAQ,GAAG,CAAC,IAAZ;AACA,WAAK,OAAL;AACE,eACE;AAAK,mBAAS,EAAC;AAAf,WACE,oDAAC,0FAAD,EAAU;AACR,gBAAM,EAAE,GAAG,CAAC,IADJ;AAER,yBAAe,EAAE,YAAY,CAAC,eAFtB;AAGR,0BAAgB,EAAE,YAAY,CAAC,gBAHvB;AAIR,sBAAY,EAAE;AAJN,SAAV,CADF,CADF;;AAWF,WAAK,UAAL;AACE,eACE;AAAK,mBAAS,EAAC;AAAf,WACE,oDAAC,wGAAD,EAAY;AACV,cAAI,EAAE,kGAAe,CAAC,SAAhB,CAA0B,sBAA1B,EAAkD,kBAAlD,CADI;AAEV,oBAAU,EAAE,GAAG,CAAC,IAFN;AAGV,sBAAY,EAAE,YAAY,CAAC,kBAAb,EAHJ;AAIV,wBAAc,EAAE,wBAAC,UAAD;AAAA,mBACd,oDAAC,oIAAD,EAAmB,kBACb,UADa,EACH;AACd,mCAAqB,EAAE;AADT,aADG,CAAnB,CADc;AAAA,WAJN;AAUV,kBAAQ,EAAE,oFAAc,CAAC;AAVf,SAAZ,CADF,CADF;;AAiBF,WAAK,QAAL;AACE,eACE;AAAK,mBAAS,EAAC;AAAf,WACE,oDAAC,wGAAD,EAAY;AACV,cAAI,EAAE,kGAAe,CAAC,SAAhB,CAA0B,sBAA1B,EAAkD,eAAlD,CADI;AAEV,oBAAU,EAAE,GAAG,CAAC,IAFN;AAGV,sBAAY,EAAE,YAAY,CAAC,gBAAb,EAHJ;AAIV,wBAAc,EAAE,wBAAC,UAAD;AAAA,mBACd,oDAAC,8HAAD,EAAiB,kBACX,UADW,EACD;AACd,uBAAS,EAAE;AADG,aADC,CAAjB,CADc;AAAA,WAJN;AAUV,kBAAQ,EAAE,oFAAc,CAAC;AAVf,SAAZ,CADF,CADF;AAhCF;AAiDD,GA/IyB;AAiJ1B,iBAjJ0B,2BAiJV,KAjJU,EAiJE;AAC1B,WAAO;AACL,iBAAW,EAAE,8EAAW,CAAC,OADpB;AAEL,YAAM,EAAE,YAFH;AAGL,UAAI,EAAE,CAAC,KAAK,CAAC,EAAP;AAHD,KAAP;AAKD,GAvJyB;AAyJ1B,kBAzJ0B,4BAyJT,MAzJS,EAyJM;AAC9B,WAAO;AACL,iBAAW,EAAE,8EAAW,CAAC,OADpB;AAEL,YAAM,EAAE,qEAAO,CAAC,OAAR,CAAgB,MAFnB;AAGL,UAAI,EAAE,MAAM,GAAG,CAAE,MAAM,CAAC,EAAT,EAAa,kFAAU,CAAC,OAAX,CAAmB,MAAM,CAAC,IAA1B,CAAb,CAAH,GAAoD;AAH3D,KAAP;AAKD,GA/JyB;AAiK1B,oBAjK0B,8BAiKP,QAjKO,EAiKY;AACpC,WAAO;AACL,iBAAW,EAAE,8EAAW,CAAC,SADpB;AAEL,YAAM,EAAE,qEAAO,CAAC,SAAR,CAAkB,QAFrB;AAGL,UAAI,EAAE,QAAQ,GAAG,CAAE,QAAQ,CAAC,EAAX,EAAe,kFAAU,CAAC,OAAX,CAAmB,QAAQ,CAAC,IAA5B,CAAf,CAAH,GAAwD;AAHjE,KAAP;AAKD;AAvKyB,CAArB,C;;;;;;;;;;;;ACjCP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAGA;AACA;AAEA;AACA;AAGA;AAEA,IAAM,SAAS,GAAG,kCAAlB;AASM,SAAU,oBAAV,CAA+B,KAA/B,EAA+D;AACnE,MAAM,GAAG,GAAG,4CAAK,CAAC,MAAN,CAAa,IAAb,CAAZ;AACA,MAAM,MAAM,GAAG,4CAAK,CAAC,WAAN,CAAkB,cAAI,EAAG;AACtC,QAAI,CAAC,IAAL,EACE;AAEF,OAAG,CAAC,OAAJ,GAAc,IAAd;AACD,GALc,EAKZ,EALY,CAAf;AAOA,MAAM,YAAY,GAAG,KAAK,CAAC,QAAN,KAAmB,qEAAY,CAAC,OAAhC,GACjB,8EAAa,CAAC,mBADG,GAEjB,8EAAa,CAAC,mBAFlB;;AATmE,sBAa5C,8FAAY,CAAC,YAAD,CAbgC;AAAA;AAAA,MAazD,QAbyD;;AAenE,MAAM,MAAM,GAAG,kFAAS,EAAxB;;AAEA,MAAM,YAAY,GAAG,SAAf,YAAe,CAAC,CAAD,EAAgB,KAAhB,EAA6C;AAChE,QAAM,SAAS,GAAG,KAAK,CAAC,UAAN,CAAiB,IAAjB,CAAsB,WAAC;AAAA,aAAI,CAAC,CAAC,IAAF,KAAW,CAAC,CAAC,CAAD,CAAhB;AAAA,KAAvB,CAAlB;AAEA,WAAO;AACL,cAAQ,EAAE,KAAK,CAAC,QAAN,EADL;AAEL,UAAI,EAAE,CAAC,CAAC,CAAD,CAFF;AAGL,aAAO,EAAE,CAAC,CAAC,CAAD,CAHL;AAIL,eAAS,EAAT,SAJK;AAKL,WAAK,EAAE,CAAC,CAAC,CAAD;AALH,KAAP;AAOD,GAVD;;AAYA,MAAM,YAAY,GAAG,SAAf,YAAe,CAAC,CAAD,EAAgB,KAAhB,EAA6C;AAChE,QAAM,QAAQ,GAAG,KAAK,CAAC,SAAN,CAAgB,IAAhB,CAAqB,WAAC;AAAA,aAAI,CAAC,CAAC,IAAF,KAAW,CAAC,CAAC,CAAD,CAAhB;AAAA,KAAtB,CAAjB,CADgE,CAGhE;;AACA,WAAO;AACL,cAAQ,EAAE,KAAK,CAAC,QAAN,EADL;AAEL,UAAI,EAAE,CAAC,CAAC,CAAD,CAFF;AAGL,aAAO,EAAE,CAAC,CAAC,CAAD,CAHL;AAIL,cAAQ,EAAR,QAJK;AAKL,WAAK,EAAE,CAAC,CAAC,CAAD;AALH,KAAP;AAOD,GAXD;;AAaA,MAAM,OAAO,GAAG,SAAV,OAAU,CAAC,CAAD,EAAwB;AACtC,OAAG,CAAC,OAAJ,CAAY,KAAZ,GAAoB,IAApB;AACA,OAAG,CAAC,OAAJ,CAAY,KAAZ,CAAkB,IAAlB;AACD,GAHD;;AAKA,MAAM,SAAQ,GAAG,SAAX,QAAW,CAAC,IAAD,EAAe;AAC9B,2DAAK,CAAC,IAAD,EAAO;AACV,cAAQ,EAAE,kBAAC,MAAD,EAAwB;AAChC,YAAM,IAAI,GAAG,MAAM,CAAC,IAApB;;AAEA,YAAI,CAAC,IAAI,CAAC,MAAN,IAAgB,IAAI,CAAC,MAAL,KAAgB,CAApC,EAAuC;AACrC,gBAAM,CAAC,OAAP,CAAe,kGAAe,CAAC,SAAhB,CAA0B,SAA1B,EAAqC,iBAArC,CAAf;AACA;AACD;;AAED,YAAI,CAAC,KAAL;AAEA,gBAAQ,CAAC,IAAI,CAAC,GAAL,CAAS,KAAK,CAAC,QAAN,KAAmB,qEAAY,CAAC,OAAhC,GAA0C,YAA1C,GAAyD,YAAlE,CAAD,CAAR;AAEA,sEAAI,CAAC,aAAL,CAAmB,OAAnB,CAA2B;AACzB,qBAAW,EAAE,8EAAW,CAAC,YADA;AAEzB,gBAAM,EAAE,KAAK,CAAC;AAFW,SAA3B;AAID;AAjBS,KAAP,CAAL;AAmBD,GApBD;;AAsBA,SACE,wHACE,2DAAC,6FAAD,EAAW;AACT,WAAO,EAAE,6EAAY,CAAC,MADb;AAET,aAAS,EAAC,sBAFD;AAGT,WAAO,EAAE;AAHA,GAAX,EAKE,2DAAC,0EAAD,EAAK;AAAC,aAAS,EAAE,SAAZ;AAAuB,UAAM,EAAC;AAA9B,GAAL,CALF,CADF,EASE;AACE,QAAI,EAAC,MADP;AAEE,gBAAY,EAAC,KAFf;AAGE,aAAS,EAAC,oBAHZ;AAIE,UAAM,EAAC,UAJT;AAKE,OAAG,EAAE,MALP;AAME,YAAQ,EAAE,mBAAC;AAAA,aAAI,SAAQ,CAAC,CAAC,CAAC,MAAF,CAAS,KAAT,CAAe,CAAf,CAAD,CAAZ;AAAA;AANb,IATF,CADF;AAoBD,C;;;;;;;;;;;;ACrHD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAGA;AACA;AACA;AAWM,SAAU,kBAAV,CAA6B,KAA7B,EAA2D;;;AAAA,MACvD,IADuD,GAC4B,KAD5B,CACvD,IADuD;AAAA,MACjD,QADiD,GAC4B,KAD5B,CACjD,QADiD;AAAA,MACvC,aADuC,GAC4B,KAD5B,CACvC,aADuC;AAAA,MACxB,UADwB,GAC4B,KAD5B,CACxB,UADwB;AAAA,uBAC4B,KAD5B,CACZ,OADY;AAAA,MACZ,OADY,+BACF,KADE;AAAA,6BAC4B,KAD5B,CACK,aADL;AAAA,MACK,aADL,qCACqB,EADrB;AAG/D,MAAM,aAAa,GAAoB;AACrC,MAAE,QAAS,IAAT,MAAa,IAAb,IAAa,aAAb,GAAa,MAAb,GAAa,GAAE,EADoB;AAErC,QAAI,QAAO,IAAP,MAAW,IAAX,IAAW,aAAX,GAAW,MAAX,GAAW,GAAE,IAFoB;AAGrC,SAAK,QAAM,IAAN,MAAU,IAAV,IAAU,aAAV,GAAU,MAAV,GAAU,GAAE,KAHoB;AAIrC,WAAO,QAAI,IAAJ,MAAQ,IAAR,IAAQ,aAAR,GAAQ,MAAR,GAAQ,GAAE,OAJoB;AAKrC,aAAS,EAAE;AACT,QAAE,cAAE,IAAF,MAAM,IAAN,IAAM,aAAN,GAAM,MAAN,GAAM,GAAE,SAAR,MAAiB,IAAjB,IAAiB,aAAjB,GAAiB,MAAjB,GAAiB,GAAE,EADZ;AAET,UAAI,cAAE,IAAF,MAAM,IAAN,IAAM,aAAN,GAAM,MAAN,GAAM,GAAE,SAAR,MAAiB,IAAjB,IAAiB,aAAjB,GAAiB,MAAjB,GAAiB,GAAE;AAFd;AAL0B,GAAvC;AAWA,MAAM,cAAc,GAAmC,EAAvD;AACA,QAAM,CAAC,IAAP,CAAY,aAAZ,EAA2B,OAA3B,CAAmC,UAAC,GAAD,EAA+B;AAChE,kBAAc,CAAC,GAAD,CAAd,GAAsB,IAAtB;AACD,GAFD;AAIA,MAAM,uBAAuB,GAAG,oIAA0B,CAAC,UAAD,CAA1D;AAEA,SACE,2DAAC,sGAAD,EAAY;AACV,iBAAa,EAAE,aADL;AAEV,iBAAa,EAAE,aAFL;AAGV,kBAAc,EAAE,cAHN;AAIV,oBAAgB,EAAE,uBAJR;AAKV,YAAQ,EAAE;AALA,GAAZ,EAOE,2DAAC,8GAAD,EAAgB;AACd,iBAAa,EAAE,aADD;AAEd,cAAU,EAAE,UAFE;AAGd,YAAQ,EAAE,oEAAY,CAAC,OAHT;AAId,WAAO,EAAE;AAJK,GAAhB,CAPF,CADF;AAgBD,C;;;;;;;;;;;;ACxDD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AAWM,SAAU,kBAAV,CAA6B,KAA7B,EAA2D;;;AAAA,MACvD,IADuD,GAC2B,KAD3B,CACvD,IADuD;AAAA,MACjD,QADiD,GAC2B,KAD3B,CACjD,QADiD;AAAA,MACvC,aADuC,GAC2B,KAD3B,CACvC,aADuC;AAAA,MACxB,SADwB,GAC2B,KAD3B,CACxB,SADwB;AAAA,uBAC2B,KAD3B,CACb,OADa;AAAA,MACb,OADa,+BACH,KADG;AAAA,6BAC2B,KAD3B,CACI,aADJ;AAAA,MACI,aADJ,qCACoB,EADpB;AAG/D,MAAM,aAAa,GAAoB;AACrC,MAAE,QAAS,IAAT,MAAa,IAAb,IAAa,aAAb,GAAa,MAAb,GAAa,GAAE,EADoB;AAErC,QAAI,QAAO,IAAP,MAAW,IAAX,IAAW,aAAX,GAAW,MAAX,GAAW,GAAE,IAFoB;AAGrC,SAAK,QAAM,IAAN,MAAU,IAAV,IAAU,aAAV,GAAU,MAAV,GAAU,GAAE,KAHoB;AAIrC,WAAO,QAAI,IAAJ,MAAQ,IAAR,IAAQ,aAAR,GAAQ,MAAR,GAAQ,GAAE,OAJoB;AAKrC,YAAQ,EAAE;AACR,QAAE,cAAE,IAAF,MAAM,IAAN,IAAM,aAAN,GAAM,MAAN,GAAM,GAAE,QAAR,MAAgB,IAAhB,IAAgB,aAAhB,GAAgB,MAAhB,GAAgB,GAAE,EADZ;AAER,UAAI,cAAE,IAAF,MAAM,IAAN,IAAM,aAAN,GAAM,MAAN,GAAM,GAAE,QAAR,MAAgB,IAAhB,IAAgB,aAAhB,GAAgB,MAAhB,GAAgB,GAAE;AAFd;AAL2B,GAAvC;AAWA,MAAM,cAAc,GAAmC,EAAvD;AACA,QAAM,CAAC,IAAP,CAAY,aAAZ,EAA2B,OAA3B,CAAmC,UAAC,GAAD,EAA+B;AAChE,kBAAc,CAAC,GAAD,CAAd,GAAsB,IAAtB;AACD,GAFD;AAIA,MAAM,uBAAuB,GAAG,oIAA0B,CAAC,SAAD,CAA1D;AAEA,SACE,2DAAC,sGAAD,EAAY;AACV,iBAAa,EAAE,aADL;AAEV,iBAAa,EAAE,aAFL;AAGV,kBAAc,EAAE,cAHN;AAIV,oBAAgB,EAAE,uBAJR;AAKV,YAAQ,EAAE;AALA,GAAZ,EAOE,2DAAC,8GAAD,EAAgB;AACd,iBAAa,EAAE,aADD;AAEd,aAAS,EAAE,SAFG;AAGd,YAAQ,EAAE,oEAAY,CAAC,OAHT;AAId,WAAO,EAAE;AAJK,GAAhB,CAPF,CADF;AAgBD,C;;;;;;;;;;;;ACvDD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;;;;;;;;;;;;;ACHA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;;;;;;;AAMA,IAAM,SAAS,GAAG,6BAAlB;AACA,IAAM,SAAS,GAAG,kGAAe,CAAC,gBAAhB,CAAiC,SAAjC,CAAlB;AAUM,SAAU,eAAV,CAA0B,KAA1B,EAAqD;AAAA,MACjD,aADiD,GACE,KADF,CACjD,aADiD;AAAA,MAClC,UADkC,GACE,KADF,CAClC,UADkC;AAAA,MACtB,SADsB,GACE,KADF,CACtB,SADsB;AAAA,MACX,QADW,GACE,KADF,CACX,QADW;AAGzD,MAAM,WAAW,GAAG,0HAAuB,EAA3C;;AAEA,MAAM,sBAAsB,GAAG,SAAzB,sBAAyB,CAAC,KAAD;AAAA,WAAkC,4EAAU,CAAC,6BAAX,CAC/D,WAAW,CAAC,MADmD,EAE/D,WAAW,CAAC,OAFmD,EAG/D,KAH+D,EAI/D,4BAJ+D,CAAlC;AAAA,GAA/B;;AAOA,MAAM,aAAa,GAAG,kGAAe,CAAC,gBAAhB,CACpB,QAAQ,KAAK,oEAAY,CAAC,OAA1B,GAAoC,gCAApC,GAAuE,gCADnD,CAAtB;AAIA,SACE,oDAAC,2CAAD,EAAK,IAAL,EACE,oDAAC,gGAAD,EAAU;AACR,SAAK,EAAE,SAAS,CAAC,WAAD,CADR;AAER,QAAI,EAAC,MAFG;AAGR,QAAI,EAAC,MAHG;AAIR,MAAE,EAAC,MAJK;AAKR,eAAW,EAAE,aAAa,CAAC,sBAAD,CALlB;AAMR,aAAS,MAND;AAOR,SAAK,EAAE,WAAW,CAAC,MAAZ,CAAmB;AAPlB,GAAV,CADF,EAUE,oDAAC,gGAAD,EAAU;AACR,SAAK,EAAE,SAAS,CAAC,UAAD,CADR;AAER,QAAI,EAAC,MAFG;AAGR,QAAI,EAAC,SAHG;AAIR,MAAE,EAAC,SAJK;AAKR,eAAW,EAAE,aAAa,CAAC,qBAAD,CALlB;AAMR,SAAK,EAAE,WAAW,CAAC,MAAZ,CAAmB;AANlB,GAAV,CAVF,EAkBG,UAAU,IACT,oDAAC,gGAAD,EAAU;AACR,QAAI,EAAC,WADG;AAER,SAAK,EAAE,SAAS,CAAC,WAAD;AAFR,GAAV,EAIG;AAAA,WACC;AAAK,eAAS,EAAE,sBAAsB,CAAC,WAAD;AAAtC,OACE,oDAAC,8GAAD,EAAgB;AACd,gBAAU,EAAE,UADE;AAEd,cAAQ,EAAE,WAAW,CAAC,MAAZ,CAAmB,SAFf;AAGd,cAAQ,EAAE,kBAAC,SAAD;AAAA,eAA8B,WAAW,CAAC,aAAZ,CAA0B,WAA1B,EAAuC,SAAvC,CAA9B;AAAA;AAHI,KAAhB,CADF,CADD;AAAA,GAJH,CAnBJ,EAkCG,SAAS,IACR,oDAAC,gGAAD,EAAU;AACR,SAAK,EAAE,SAAS,CAAC,UAAD,CADR;AAER,QAAI,EAAC,UAFG;AAGR,MAAE,EAAC,QAHK;AAIR,YAAQ,EAAE,kBAAC,CAAD,EAAW;AACnB,UAAM,OAAO,GAAG,KAAK,CAAC,SAAN,CAAgB,IAAhB,CAAqB,WAAC;AAAA,eAAI,CAAC,CAAC,EAAF,KAAS,CAAC,CAAC,MAAF,CAAS,KAAtB;AAAA,OAAtB,CAAhB;AACA,iBAAW,CAAC,aAAZ,CAA0B,UAA1B,EAAsC,OAAtC;AACD,KAPO;AAQR,SAAK,EAAE,WAAW,CAAC,MAAZ,CAAmB,QAAnB,CAA4B;AAR3B,GAAV,EAUG,SAAS,CAAC,GAAV,CAAc,WAAC;AAAA,WAAI;AAAQ,SAAG,EAAE,CAAC,CAAC,EAAf;AAAmB,WAAK,EAAE,CAAC,CAAC;AAA5B,OAAiC,CAAC,CAAC,IAAnC,CAAJ;AAAA,GAAf,CAVH,CAnCJ,EAgDE,oDAAC,gGAAD,EAAU;AACR,SAAK,EAAE,SAAS,CAAC,cAAD,CADR;AAER,QAAI,EAAC,MAFG;AAGR,QAAI,EAAC,OAHG;AAIR,MAAE,EAAC,OAJK;AAKR,eAAW,EAAE,aAAa,CAAC,yBAAD,CALlB;AAMR,SAAK,EAAE,WAAW,CAAC,MAAZ,CAAmB;AANlB,GAAV,CAhDF,EAwDE;AAAK,aAAS,EAAC;AAAf,KACE;AAAQ,QAAI,EAAC,QAAb;AAAsB,aAAS,qBAA/B;AAAsD,WAAO,EAAE;AAA/D,KACE,oDAAC,0EAAD,EAAK;AAAC,aAAS,EAAE,SAAZ;AAAuB,UAAM,EAAC;AAA9B,GAAL,CADF,CADF,EAIE,oDAAC,sGAAD,EAAY;AAAC,SAAK,EAAE,KAAR;AAAe,WAAO,EAAE,KAAK,CAAC;AAA9B,GAAZ,CAJF,CAxDF,CADF;AAiED,C;;;;;;;;;;;;AC/GD;AAAA;AAAA;AAAA;AAAA;;AAUA,SAAS,SAAT,CAAmB,KAAnB,EAAwC;AAAA,MAC9B,SAD8B,GACI,KADJ,CAC9B,SAD8B;AAAA,MACnB,QADmB,GACI,KADJ,CACnB,QADmB;AAAA,MACT,QADS,GACI,KADJ,CACT,QADS;AAGtC,MAAM,SAAS,GAAG,QAAQ,GAAG,YAAH,GAAkB,aAA5C;AAEA,SACE;AACE,aAAS,+DAAwD,SAAxD,CADX;AAEE,QAAI,EAAC,OAFP;AAEc,oBACE,QAHhB;AAIE,WAAO,EAAE;AAAA,aAAM,QAAQ,CAAC,SAAD,CAAd;AAAA;AAJX,KAMG,SAAS,CAAC,IANb,CADF;AAUD;;AAQK,SAAU,eAAV,CAA0B,KAA1B,EAAqD;AAAA,MACjD,UADiD,GACd,KADc,CACjD,UADiD;AAAA,MACrC,QADqC,GACd,KADc,CACrC,QADqC;AAAA,MAC3B,QAD2B,GACd,KADc,CAC3B,QAD2B;AAGzD,SACE;AAAK,QAAI,EAAC;AAAV,KACG,UAAU,CAAC,GAAX,CAAe,WAAC,EAAG;;;AAClB,+DAAC,SAAD,EAAU;AACR,SAAG,EAAE,CAAC,CAAC,EADC;AAER,eAAS,EAAE,CAFH;AAGR,cAAQ,EAAE,CAAC,CAAC,EAAF,CAAK,QAAL,QAAe,YAAK,QAAL,MAAa,IAAb,IAAa,aAAb,GAAa,MAAb,GAAa,GAAE,EAAf,MAAiB,IAAjB,IAAiB,aAAjB,GAAiB,MAAjB,GAAiB,GAAE,QAAF,EAAhC,CAHF;AAIR,cAAQ,EAAE;AAJF,KAAV;AAKE,GANH,CADH,CADF;AAYD,C;;;;;;;;;;;;AChDD;AAAA;AAAA;AAAA;;;;;;;;;;;;;ACAA;AAAA;AAAA,IAAY,YAAZ;;AAAA,WAAY,YAAZ,EAAwB;AACtB;AACA;AACD,CAHD,EAAY,YAAY,KAAZ,YAAY,MAAxB,E;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAGA,IAAM,SAAS,GAAG,kGAAe,CAAC,gBAAhB,CAAiC,4BAAjC,CAAlB;AAEA,IAAM,oBAAoB,GAAG,kDAAM,GAAG,KAAT,CAAe;AAC1C,MAAI,EAAE,kDAAM,GACT,GADG,CACC,GADD,EACM;AAAA,WAAM,SAAS,CAAC,aAAD,CAAf;AAAA,GADN,EAEH,QAFG,CAEM;AAAA,WAAM,SAAS,CAAC,cAAD,CAAf;AAAA,GAFN,aAGK,EAHL,CADoC;AAK1C,SAAO,EAAE,kDAAM,GACZ,GADM,CACF,GADE,EACG;AAAA,WAAM,SAAS,CAAC,gBAAD,CAAf;AAAA,GADH,EAEN,QAFM,CAEG;AAAA,WAAM,SAAS,CAAC,iBAAD,CAAf;AAAA,GAFH,aAGE,EAHF,CALiC;AAS1C,OAAK,EAAE,kDAAM,GACV,GADI,CACA,GADA,EACK;AAAA,WAAM,SAAS,CAAC,cAAD,CAAf;AAAA,GADL,EAEJ,QAFI,CAEK;AAAA,WAAM,SAAS,CAAC,eAAD,CAAf;AAAA,GAFL,EAGJ,KAHI,CAGE;AAAA,WAAM,SAAS,CAAC,YAAD,CAAf;AAAA,GAHF,aAII,EAJJ;AATmC,CAAf,CAA7B;AAgBO,IAAM,0BAA0B,GAAG,SAA7B,0BAA6B,CAAC,SAAD;AAAA,SAA+B,oBAAoB,CAAC,KAArB,CAA2B;AAClG,YAAQ,EAAE,kDAAM,GAAG,KAAT,CAAe;AACvB,UAAI,EAAE,kDAAM,GACT,QADG,CACM;AAAA,eAAM,SAAS,CAAC,kBAAD,CAAf;AAAA,OADN,EAEH,KAFG,CAEG,SAAS,CAAC,GAAV,CAAc,WAAC;AAAA,eAAI,CAAC,CAAC,IAAN;AAAA,OAAf,CAFH,EAE+B;AAAA,eAAM,SAAS,CAAC,iBAAD,CAAf;AAAA,OAF/B,aAGK,EAHL;AADiB,KAAf;AADwF,GAA3B,CAA/B;AAAA,CAAnC;AASA,IAAM,0BAA0B,GAAG,SAA7B,0BAA6B,CAAC,UAAD;AAAA,SAAiC,oBAAoB,CAAC,KAArB,CAA2B;AACpG,aAAS,EAAE,kDAAM,GAAG,KAAT,CAAe;AACxB,UAAI,EAAE,kDAAM,GACT,QADG,CACM;AAAA,eAAM,SAAS,CAAC,mBAAD,CAAf;AAAA,OADN,EAEH,KAFG,CAEG,UAAU,CAAC,GAAX,CAAe,WAAC;AAAA,eAAI,CAAC,CAAC,IAAN;AAAA,OAAhB,CAFH,EAEgC;AAAA,eAAM,SAAS,CAAC,kBAAD,CAAf;AAAA,OAFhC,aAGK,EAHL;AADkB,KAAf;AADyF,GAA3B,CAAjC;AAAA,CAAnC,C;;;;;;;;;;;;AChCP;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAQM,SAAU,YAAV,CAAuB,KAAvB,EAA+C;AACnD,WAAS,OAAT,GAA6B;AAC3B,QAAI,KAAK,CAAC,QAAV,EACE;AAEF,SAAK,CAAC,OAAN,YAAK,YAAL;AACD;;AAED,MAAM,gBAAgB,GAAG,kEAAzB;AACA,MAAM,OAAO,GAAI,KAAK,CAAC,EAAN,IAAY,CAAC,KAAK,CAAC,QAApB,GAAgC,IAAhC,GAAuC,EAAvD;AACA,MAAM,aAAa,GAAG,KAAK,CAAC,QAAN,GAAiB,UAAjB,GAA8B,EAApD;AAEA,SACE,2DAAC,0FAAD,EAAU;AACR,WAAO,EAAE,OADD;AAER,aAAS,YAAK,gBAAL,cAAyB,OAAzB,cAAoC,aAApC;AAFD,GAAV,EAIE;AAAM,aAAS,EAAC;AAAhB,IAJF,CADF;AAQD,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7BD;AAYA;;;;;AAIO,IAAM,sBAAsB,GAAG,SAAzB,sBAAyB,CAAC,UAAD,EAAuE;AAAA,MAA5C,OAA4C,uEAAN,EAAM;;AAAA,wBACnE,4CAAK,CAAC,QAAN,CAAe,KAAf,CADmE;AAAA;AAAA,MACnG,WADmG;AAAA,MACtF,cADsF;;AAAA,yBAE/E,4CAAK,CAAC,QAAN,CAAmC,EAAnC,CAF+E;AAAA;AAAA,MAEnG,KAFmG;AAAA,MAE5F,QAF4F;;AAAA,yBAIhF,OAJgF,CAInG,OAJmG;AAAA,MAInG,OAJmG,iCAIzF,IAJyF;AAM3G,8CAAK,CAAC,SAAN,CAAgB,YAAK;;;AACnB,QAAI,QAAC,UAAD,MAAW,IAAX,IAAW,aAAX,GAAW,MAAX,GAAW,GAAE,MAAb,CAAJ,EACE;AAEF,QAAM,YAAY,GAAG,UAAU,CAAC,MAAX,CAAsC,UAAC,QAAD,EAA+B,IAA/B,EAAmD;;;AAC5G,UAAI,aAAa,GAAG,KAApB;AAEA,sBAAI,OAAJ,MAAW,IAAX,IAAW,aAAX,GAAW,MAAX,GAAW,GAAE,cAAb,MAA2B,IAA3B,IAA2B,aAA3B,GAA2B,MAA3B,GAA2B,GAAE,QAAF,CAAW,IAAI,CAAC,OAAD,CAAf,CAA3B,EACE,aAAa,GAAG,IAAhB;AAEF,UAAM,EAAE,GAAG,IAAI,CAAC,OAAD,CAAf;AACA,cAAQ,CAAC,EAAD,CAAR,GAAe,aAAf;AAEA,aAAO,QAAP;AACD,KAVoB,EAUlB,EAVkB,CAArB;AAYA,YAAQ,CAAC,YAAD,CAAR;AACD,GAjBD,EAiBG,CAAC,UAAD,CAjBH,EAN2G,CAyB3G;;AACA,WAAS,YAAT,GAAqB;AACnB,QAAM,SAAS,GAAG,CAAC,WAAnB;AAEA,kBAAc,CAAC,SAAD,CAAd;AAEA,QAAM,aAAa,GAAG,UAAU,CAAC,MAAX,CAAsC,UAAC,QAAD,EAA+B,IAA/B,EAAmD;AAC7G,cAAQ,CAAC,IAAI,CAAC,OAAD,CAAL,CAAR,GAA0B,SAA1B;AACA,aAAO,QAAP;AACD,KAHqB,EAGnB,EAHmB,CAAtB;AAKA,YAAQ,CAAC,aAAD,CAAR;AACD,GArC0G,CAuC3G;;;AACA,WAAS,YAAT,CAAsB,EAAtB,EAAgC;AAC9B,QAAM,aAAa,GAAG,CAAC,KAAK,CAAC,EAAD,CAA5B;AAEA,QAAM,SAAS,mCACV,KADU,uBAEZ,EAFY,EAEP,aAFO,EAAf;AAIA,YAAQ,CAAC,SAAD,CAAR;AAEA;;;;AAGA,QAAM,kBAAkB,GAAG,MAAM,CAAC,IAAP,CAAY,SAAZ,EAAuB,MAAvB,CAA8B,WAAC;AAAA,aAAI,SAAS,CAAC,CAAD,CAAb;AAAA,KAA/B,EAAiD,MAA5E;;AACA,QAAI,kBAAkB,KAAK,UAAU,CAAC,MAAtC,EAA8C;AAC5C,oBAAc,CAAC,IAAD,CAAd;AACA;AACD;;AAED,QAAI,CAAC,aAAD,IAAkB,WAAtB,EACE,cAAc,CAAC,KAAD,CAAd;AACH,GA5D0G,CA8D3G;;;AACA,WAAS,SAAT,CAAmB,IAAnB,EAAoD;AAClD,QAAI,WAAJ,EACE,OAAO,IAAP;AAEF,QAAI,OAAO,IAAP,KAAgB,QAApB,EACE,IAAI,GAAG,IAAI,CAAC,OAAD,CAAX;AAEF,WAAO,KAAK,CAAC,IAAD,CAAZ;AACD;;AAED,WAAS,WAAT,GAAoB;AAClB,QAAI,WAAJ,EACE,OAAO,MAAM,CAAC,IAAP,CAAY,KAAZ,CAAP;AAEF,WAAO,MAAM,CAAC,IAAP,CAAY,KAAZ,EAAmB,MAAnB,CAA0B,cAAI;AAAA,aAAI,KAAK,CAAC,IAAD,CAAT;AAAA,KAA9B,CAAP;AACD;;AAED,SAAO;AAAE,gBAAY,EAAZ,YAAF;AAAgB,gBAAY,EAAZ,YAAhB;AAA8B,eAAW,EAAX,WAA9B;AAA2C,aAAS,EAAT,SAA3C;AAAsD,eAAW,EAAX;AAAtD,GAAP;AACD,CAjFM,C","file":"scripts/5.chunk.js","sourcesContent":["import * as React from 'react';\r\n\r\nimport { Core } from 'libs/common/core';\r\n\r\nimport { Playlist, PresentationAudience } from 'libs/shared/interfaces';\r\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\r\nimport { AudienceHelper } from 'libs/shared/utils/AudienceHelper';\r\nimport { ImageSize, ResizeType } from 'libs/shared/enums/Images';\r\nimport { Text } from 'libs/shared/components/text/Text';\r\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\r\nimport { BaseThumbnail } from 'libs/shared/components/thumbnails/base/BaseThumbnail';\r\nimport { ThumbnailFallback, ThumbnailFallbackType } from 'libs/shared/components/thumbnails/base/ThumbnailFallback';\r\nimport { AudienceLabelList, AudienceLabel } from 'libs/shared/components/audience-label/AudienceLabel';\r\n\r\nimport styles from './playlist.scss';\r\n\r\ninterface PlaylistItemProps {\r\n data: Playlist;\r\n appLink: Core.AppLink;\r\n presentationAudiences: PresentationAudience[];\r\n className?: string;\r\n showCount?: boolean;\r\n}\r\n\r\nexport function PlaylistItem(props: PlaylistItemProps): JSX.Element {\r\n const imageUrl = ImageHelper.createUrl(props.data.cover && props.data.cover.url, {\r\n size: ImageSize.Medium,\r\n resizeType: ResizeType.Cover\r\n });\r\n\r\n const audiences = props.data.subjectPresentationAudiences &&\r\n props.data.subjectPresentationAudiences.data;\r\n\r\n const filteredAudiences = AudienceHelper.getSortedPresentationAudiences(audiences, props.presentationAudiences);\r\n const mergedAudience = AudienceHelper.getMergedPresentationAudienceString(filteredAudiences);\r\n\r\n const count = !!props.showCount && !!props.data.videos && props.data.videos.count;\r\n\r\n return (\r\n <AppLink appLink={props.appLink}>\r\n <BaseThumbnail data={imageUrl} className={styles.playlistItem}>\r\n <ThumbnailFallback type={ThumbnailFallbackType.Playlist} />\r\n <div className={`text-white ${styles.playlistMetadata}`}>\r\n {Number.isInteger(count) &&\r\n <Text namespace='shared.playlistItem' phrase='videos' options={{ smartCount: count }} />\r\n }\r\n <h5 className='text-shadow mb-0'>{props.data.name}</h5>\r\n {!!audiences && !!audiences.length &&\r\n <AudienceLabel\r\n audience={mergedAudience}\r\n border='white'\r\n />\r\n }\r\n </div>\r\n </BaseThumbnail>\r\n </AppLink>\r\n );\r\n}","// extracted by mini-css-extract-plugin\nmodule.exports = {\"basePlaylistItem\":\"cv--basePlaylistItem--2nvrp\",\"playlistItem\":\"cv--playlistItem--6o0Z2\",\"playlistMetadata\":\"cv--playlistMetadata--3MCKL\",\"partialHeading\":\"cv--partialHeading--13tO6\"};","import * as React from 'react';\r\nimport { Audience } from 'libs/shared/interfaces';\r\n\r\nimport styles from './audience-label.scss';\r\n\r\ntype AudienceBorderColour = 'dark' | 'white';\r\n\r\ninterface AudienceLabelProps {\r\n audience: Audience;\r\n border: AudienceBorderColour;\r\n}\r\n\r\nexport function AudienceLabel(props: AudienceLabelProps): JSX.Element {\r\n if (!props.audience)\r\n return <></>;\r\n\r\n return (\r\n <div className={`border rounded-pill d-inline-block px-2 mt-1 ${'border-' + props.border}`}>\r\n {props.audience.name}\r\n </div>\r\n );\r\n}\r\n\r\ninterface AudienceLabelListProps {\r\n audiences: Audience[];\r\n border: AudienceBorderColour;\r\n}\r\n\r\nexport function AudienceLabelList(props: AudienceLabelListProps): JSX.Element {\r\n if (!props.audiences || !props.audiences.length)\r\n return <></>;\r\n\r\n return (\r\n <>\r\n {props.audiences.map((a, idx) => (\r\n <span key={idx} className={styles.audienceLabelListItem}>\r\n <AudienceLabel audience={a} border={props.border} />\r\n </span>\r\n ))}\r\n </>\r\n );\r\n}","// extracted by mini-css-extract-plugin\nmodule.exports = {\"audienceLabelListItem\":\"cv--audienceLabelListItem--2YGVO\"};","import * as React from 'react';\r\nimport { useFormikContext } from 'formik';\r\n\r\nimport { useCanSubmitForm } from 'libs/shared/hooks/UseCanSubmitForm';\r\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\r\nimport { Text } from 'libs/shared/components/text/Text';\r\n\r\nconst namespace = 'shared.formButtons';\r\n\r\nconst ENTER_KEY_CODE = 13;\r\n\r\ninterface FormButtonsProps {\r\n isNew: boolean;\r\n hasNext?: boolean;\r\n}\r\n\r\nexport function FormButtons<Values extends object>(props: FormButtonsProps): JSX.Element {\r\n const formikProps = useFormikContext<Values>();\r\n\r\n const canSubmit = useCanSubmitForm(formikProps);\r\n\r\n /**\r\n * This hook listens to \"Enter\" keypress events, and submits the form if there\r\n * are no errors. This prevents any edge cases where submitting doesn't work on\r\n * Enter normally, such as when a custom component is in focus.\r\n */\r\n React.useEffect(() => {\r\n function onKeyPress(e: KeyboardEvent): void {\r\n if (e.keyCode !== ENTER_KEY_CODE || !canSubmit)\r\n return;\r\n\r\n formikProps.validateForm().then(errors => {\r\n if (!Object.keys(errors).length)\r\n formikProps.submitForm();\r\n });\r\n }\r\n\r\n window.addEventListener('keypress', onKeyPress);\r\n return () => window.removeEventListener('keypress', onKeyPress);\r\n }, [canSubmit]);\r\n\r\n let phraseKey = 'save';\r\n if (props.isNew)\r\n phraseKey = 'create';\r\n if (props.hasNext)\r\n phraseKey = 'next';\r\n\r\n return (\r\n <SpinnerButton showSpinner={formikProps.isSubmitting} type='submit' disabled={!canSubmit}>\r\n <Text namespace={namespace} phrase={phraseKey} />\r\n </SpinnerButton>\r\n );\r\n}","import * as React from 'react';\r\n\r\ninterface CheckboxProps {\r\n id: string;\r\n checked: boolean;\r\n onChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\r\n label?: string;\r\n name?: string;\r\n className?: string;\r\n}\r\n\r\nCheckbox.defaultProps = {\r\n checked: false,\r\n label: '',\r\n className: ''\r\n};\r\n\r\n/**\r\n * Use this checkbox outside of Formik contexts\r\n */\r\nexport function Checkbox(props: CheckboxProps): JSX.Element {\r\n return (\r\n <div className={`custom-control custom-checkbox ${props.className}`}>\r\n <input\r\n type='checkbox'\r\n className='custom-control-input'\r\n id={props.id}\r\n name={props.name}\r\n checked={props.checked}\r\n onChange={props.onChange}\r\n />\r\n <label className='custom-control-label cursor-pointer' htmlFor={props.id}>{props.label}</label>\r\n </div>\r\n );\r\n}","import * as React from 'react';\r\n\r\nimport { FieldAttributes } from 'formik';\r\nimport { Form } from 'react-bootstrap';\r\nimport { FieldWrapper, FormFieldProps } from '../form-field/FormField';\r\n\r\n/**\r\n * Use this checkbox within Formik contexts\r\n */\r\nexport function FormCheckbox<Values extends object>(props: FieldAttributes<FormFieldProps<Values>>): JSX.Element {\r\n const { label, ...fieldProps } = props;\r\n\r\n return (\r\n <Form.Group>\r\n <div className='custom-control custom-checkbox'>\r\n <FieldWrapper<Values> className='custom-control-input' {...fieldProps} />\r\n <Form.Label className='custom-control-label' htmlFor={fieldProps.id}>{label}</Form.Label>\r\n </div>\r\n </Form.Group>\r\n );\r\n}\r\n\r\n","import * as React from 'react';\r\nimport { useFormikContext } from 'formik';\r\n\r\ninterface CharacterCounterProps<Values extends object> {\r\n fieldName: keyof Values;\r\n limit: number;\r\n}\r\n\r\nexport function CharacterCounter<Values extends object>(props: CharacterCounterProps<Values>): JSX.Element {\r\n const { values } = useFormikContext<Values>();\r\n\r\n const field = values[props.fieldName];\r\n\r\n if (typeof field !== 'string')\r\n return <></>;\r\n\r\n return (\r\n <div className='float-right text-muted'>\r\n {field.length}/{props.limit}\r\n </div>\r\n );\r\n}","import * as React from 'react';\r\nimport { Field, FieldAttributes, useFormikContext, ErrorMessage, FieldProps } from 'formik';\r\nimport { Form } from 'react-bootstrap';\r\n\r\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\r\n\r\nimport { FormHelper } from 'libs/shared/utils/FormHelper';\r\n\r\nimport { CharacterCounter } from './CharacterCounter';\r\nimport { FormCheckbox } from '../form-checkbox/FormCheckbox';\r\n\r\nexport interface FormFieldProps<Values extends object> {\r\n /**\r\n * The name prop MUST be the same as the attribute\r\n * name of the value that the field is bound to.\r\n */\r\n name: string;\r\n label?: string;\r\n children?: ((props: FieldProps) => React.ReactNode) | React.ReactNode;\r\n showCharacterCounter?: boolean;\r\n}\r\n\r\nexport function FieldWrapper<Values extends object>(\r\n props: FieldAttributes<FormFieldProps<Values>> & { className: string }\r\n): React.ReactElement {\r\n const { children, ...fieldProps } = props;\r\n\r\n return (\r\n <Field {...fieldProps}>\r\n {FunctionHelper.isFunction(children)\r\n ? (f: FieldProps) => children(f)\r\n : React.Children.count(children) ? children : null\r\n }\r\n </Field>\r\n );\r\n}\r\n\r\nexport function FormField<Values extends object>(props: FieldAttributes<FormFieldProps<Values>>): React.ReactElement {\r\n const { label, className, showCharacterCounter, ...fieldProps } = props;\r\n\r\n const { errors, touched } = useFormikContext<Values>();\r\n\r\n if (fieldProps.type === 'checkbox')\r\n return <FormCheckbox<Values> {...props} />;\r\n\r\n return (\r\n <Form.Group>\r\n {!!label && <Form.Label htmlFor={fieldProps.id}>{label}</Form.Label>}\r\n <FieldWrapper<Values>\r\n className={FormHelper.getCustomFormControlClassName(errors, touched, fieldProps.name, className)}\r\n {...fieldProps}\r\n />\r\n {!!showCharacterCounter && !!(fieldProps as React.HTMLProps<HTMLInputElement>).maxLength &&\r\n <CharacterCounter\r\n fieldName={(fieldProps.name as keyof Values)}\r\n limit={(fieldProps as React.HTMLProps<HTMLInputElement>).maxLength}\r\n />\r\n }\r\n <ErrorMessage name={fieldProps.name}>\r\n {(errorMessage: string) => <Form.Control.Feedback type='invalid'>{errorMessage}</Form.Control.Feedback>}\r\n </ErrorMessage>\r\n </Form.Group>\r\n );\r\n}","import * as React from 'react';\r\nimport { Formik, FormikValues, FormikConfig, FormikProps, FormikHelpers, useFormikContext, FormikContextType } from 'formik';\r\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\r\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\r\n\r\nfunction omitNullInitialValues<Values extends FormikValues>(initialValues: Values): Values {\r\n const values = ObjectHelper.deepClone(initialValues);\r\n\r\n Object.keys(values).forEach((key: keyof Values) => {\r\n if (!values.hasOwnProperty(key))\r\n return;\r\n\r\n if (ObjectHelper.isObject(values[key]))\r\n values[key] = omitNullInitialValues(values[key]);\r\n else if (values[key] === null)\r\n delete values[key];\r\n });\r\n\r\n return values;\r\n}\r\n\r\n// Omit attributes from FormikConfig that are defined in FormWrapperProps.\r\ntype ModifiedFormikConfig<Values extends FormikValues> = Omit<FormikConfig<Values>, 'initialValues' | 'onSubmit'>;\r\n\r\ninterface InitialStatus {\r\n allowInitialSubmit: boolean;\r\n}\r\n\r\ninterface FormWrapperProps<FormValues extends FormikValues, ApiValues extends FormikValues> {\r\n initialValues: FormValues | ApiValues;\r\n onSubmit: (data: FormValues, onDone: () => void) => void;\r\n castInitialValues?: boolean; // cast to validationSchema\r\n castValuesOnSubmit?: boolean; // cast to validationSchema\r\n allowInitialSubmit?: boolean; // if true, useCanSubmitForm will allow submit without any user changes.\r\n resetOnSubmit?: boolean;\r\n}\r\n\r\nFormWrapper.defaultProps = {\r\n castInitialValues: true,\r\n castValuesOnSubmit: true\r\n};\r\n\r\nexport function FormWrapper<\r\n FormValues extends FormikValues = FormikValues,\r\n ApiValues extends FormikValues = FormikValues,\r\n ExtraProps = {}\r\n>(props: ModifiedFormikConfig<FormValues> & ExtraProps & FormWrapperProps<FormValues, ApiValues>): JSX.Element {\r\n const { castInitialValues, castValuesOnSubmit, initialValues, onSubmit, resetOnSubmit, ...formikProps } = props;\r\n\r\n /**\r\n * If castInitialValues is true, cast initialValues to the validationSchema.\r\n * This will ensure that any data fetched from the api conforms to the expected form data shape.\r\n */\r\n const formattedInitialValues: FormValues = castInitialValues && props.validationSchema\r\n ? props.validationSchema.cast(omitNullInitialValues(initialValues))\r\n : initialValues;\r\n\r\n const onSubmitHandler = (\r\n values: FormValues,\r\n { setSubmitting, resetForm }: FormikHelpers<FormValues>\r\n ) => {\r\n /**\r\n * validationSchema.cast will coerce the values to the types defined in validationSchema.\r\n * This is useful for trimming inputs:\r\n * e.g. if a value field has type Yup.string().trim(), it will be automatically trimmed.\r\n */\r\n const formattedData = castValuesOnSubmit && props.validationSchema\r\n ? props.validationSchema.cast(values)\r\n : values;\r\n\r\n onSubmit(formattedData, () => {\r\n resetOnSubmit && resetForm();\r\n setSubmitting(false);\r\n });\r\n };\r\n\r\n const initialStatus: InitialStatus = {\r\n allowInitialSubmit: props.allowInitialSubmit\r\n };\r\n\r\n return (\r\n <Formik<FormValues, ExtraProps>\r\n enableReinitialize\r\n {...(formikProps as ModifiedFormikConfig<FormValues> & ExtraProps)}\r\n initialValues={formattedInitialValues}\r\n onSubmit={onSubmitHandler}\r\n initialStatus={initialStatus}\r\n >\r\n {FunctionHelper.isFunction(props.children)\r\n ? (f: FormikProps<FormValues>) => (props.children as (f: FormikProps<FormValues>) => React.ReactNode)(f)\r\n : React.Children.count(props.children) ? props.children : null\r\n }\r\n </Formik>\r\n );\r\n}\r\n\r\nexport function useFormikContextWrapper<T>(): FormikContextType<T> {\r\n return useFormikContext<T>();\r\n}","import * as React from 'react';\r\n\r\nimport { Core } from 'libs/common/core';\r\n\r\nimport { Playlist, PresentationAudience, WidgetContext } from 'libs/shared/interfaces';\r\nimport { PlaylistItem } from 'libs/shared/apps/playlists/components/playlist-list/PlaylistItem';\r\n\r\nimport styles from './playlist-widget-item.scss';\r\n\r\nexport interface PlaylistWidgetItemProps {\r\n data: Playlist;\r\n appLink: Core.AppLink;\r\n presentationAudiences: PresentationAudience[];\r\n context: WidgetContext;\r\n}\r\n\r\nexport function PlaylistWidgetItem(props : PlaylistWidgetItemProps): JSX.Element {\r\n const { context, ...otherProps } = props;\r\n\r\n return (\r\n <div className={`position-relative p-1 flex-shrink-0 ${styles.width}`}>\r\n <PlaylistItem {...otherProps} />\r\n </div>\r\n );\r\n}","// extracted by mini-css-extract-plugin\nmodule.exports = {\"width\":\"cv--width--wNWEd\"};","import * as React from 'react';\r\n\r\nimport { Core } from 'libs/common/core';\r\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\r\n\r\nimport { useHoverIntent } from 'libs/shared/hooks/UseHover';\r\nimport { Series, PresentationAudience } from 'libs/shared/interfaces';\r\nimport { AudienceHelper } from 'libs/shared/utils/AudienceHelper';\r\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\r\nimport { BaseThumbnail, AspectRatio } from 'libs/shared/components/thumbnails/base/BaseThumbnail';\r\nimport { ThumbnailFallback, ThumbnailFallbackType } from 'libs/shared/components/thumbnails/base/ThumbnailFallback';\r\nimport { ThumbnailSize } from 'libs/shared/enums/ThumbnailSize';\r\nimport { AudienceLabel } from 'libs/shared/components/audience-label/AudienceLabel';\r\nimport { BadgeType, Badge } from 'libs/shared/components/badges/Badge';\r\n\r\nimport styles from './series-widget-item.scss';\r\n\r\nexport interface SeriesWidgetItemProps {\r\n data: Series;\r\n appLink: Core.AppLink;\r\n audiences: PresentationAudience[];\r\n preloadImage?: boolean;\r\n}\r\n\r\nexport function SeriesWidgetItem(props : SeriesWidgetItemProps): JSX.Element {\r\n const { data: series, appLink, preloadImage } = props;\r\n\r\n const seriesAppLink: Core.AppLink = {\r\n ...appLink,\r\n args: [ series.id, TextHelper.slugify(series.name) ]\r\n };\r\n\r\n /**\r\n * Subject audiences currently take render precedence over rating.\r\n * \r\n * This means that until we properly add productionCompanies to series, we\r\n * should expect only CV series to have a subject audience. Any TV series\r\n * from the Exchange should only have a rating. \r\n */\r\n\r\n let audiences = series && series.subjectPresentationAudiences &&\r\n series.subjectPresentationAudiences.data || [];\r\n\r\n const filteredAudiences = AudienceHelper.getSortedPresentationAudiences(audiences, props.audiences);\r\n const mergedAudience = AudienceHelper.getMergedPresentationAudienceString(filteredAudiences);\r\n\r\n const [ hoverRef, isHovering ] = useHoverIntent<HTMLDivElement>(styles.hoverActive);\r\n\r\n return (\r\n <AppLink\r\n key={series.id}\r\n appLink={seriesAppLink}\r\n className={`position-relative p-1 flex-shrink-0 ${styles.width}`}\r\n >\r\n <div ref={hoverRef}>\r\n {isHovering &&\r\n <div className={`p-3 text-white text-center ${styles.mask}`}>\r\n <h3 className='h4'>{series.name}</h3>\r\n <p>{series.description}</p>\r\n </div>\r\n }\r\n <BaseThumbnail\r\n data={series.tallPoster}\r\n aspectRatio={AspectRatio.NineBySixteen}\r\n preload={preloadImage}\r\n size={ThumbnailSize.Large}>\r\n <ThumbnailFallback type={ThumbnailFallbackType.Series} />\r\n <div className={`position-absolute text-white ${styles.labelContainer}`}>\r\n {!!audiences && audiences.length\r\n ? <AudienceLabel audience={ mergedAudience } border='white' />\r\n : <Badge type={BadgeType.Rating} data={series.rating} />\r\n }\r\n </div>\r\n </BaseThumbnail>\r\n </div>\r\n </AppLink>\r\n );\r\n}","// extracted by mini-css-extract-plugin\nmodule.exports = {\"partialLoadingHeading\":\"cv--partialLoadingHeading--1RLPq\",\"partialLoading\":\"cv--partialLoading--oArG4\",\"labelContainer\":\"cv--labelContainer--QLCgm\",\"hoverActive\":\"cv--hoverActive--3Aleb\",\"mask\":\"cv--mask--2M2Zz\",\"width\":\"cv--width--TQg2K\"};","import * as React from 'react';\r\nimport { FormikValues, FormikProps } from 'formik';\r\n\r\n/**\r\n * useCanSubmitForm determines if a form can be submitted.\r\n * \r\n * It will return true if a form is valid and has been changed from it's initial state.\r\n * \r\n * A common use case for this is determining whether or not to enable\r\n * a submit button in a form.\r\n */\r\nexport function useCanSubmitForm<Values extends FormikValues>(formikProps: FormikProps<Values>): boolean {\r\n const [ canSubmit, setCanSubmit ] = React.useState(false);\r\n\r\n React.useEffect(() => {\r\n if (!formikProps.isValid) {\r\n setCanSubmit(false);\r\n return;\r\n }\r\n\r\n // If the form values have changed of if allowInitialSubmit is true, set canSubmit to true.\r\n if (formikProps.dirty || formikProps.initialStatus?.allowInitialSubmit)\r\n setCanSubmit(true);\r\n else\r\n setCanSubmit(false);\r\n\r\n }, [ formikProps.isValid, formikProps.initialStatus?.allowInitialSubmit, formikProps.dirty, formikProps.values ]);\r\n\r\n React.useEffect(() => {\r\n if (formikProps.isSubmitting)\r\n setCanSubmit(false);\r\n }, [formikProps.isSubmitting]);\r\n\r\n return canSubmit;\r\n}\r\n","import { HashObject } from 'libs/common/react/interfaces';\r\nimport { Audience, PresentationAudience, BaseObject } from 'libs/shared/interfaces';\r\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\r\n\r\nconst DIGIT_REGEX = /([0-9]+)/ig;\r\nconst NAME_REGEX = /(^\\w+)/ig;\r\nconst COUNT_OFFSET = 1;\r\n\r\nfunction processAudienceRanges(audienceValues: number[]): string[] {\r\n /**\r\n * Lookahead by increments of offset\r\n */\r\n let offset = COUNT_OFFSET;\r\n\r\n let initialVal, nextVal;\r\n let isContinguous: boolean = false;\r\n\r\n const ranges: string[] = [];\r\n\r\n // Audience values need to be in ascending order\r\n audienceValues = audienceValues.sort((a, b) => a - b);\r\n\r\n let i, j;\r\n\r\n for (i = 0; i < audienceValues.length; i++) {\r\n j = i + 1;\r\n\r\n // Set our lower boundary to compare against\r\n if (!isContinguous)\r\n initialVal = audienceValues[i];\r\n\r\n nextVal = audienceValues[j];\r\n\r\n /**\r\n * Where the next number is also the next incremental value\r\n * we're going to continue iterating until the next value\r\n * is no longer contiguos.\r\n */\r\n if (audienceValues[i] + offset === nextVal) {\r\n isContinguous = true;\r\n\r\n } else if (isContinguous) {\r\n\r\n /**\r\n * Where we were tracking a contiguous set, format appropriately \r\n * and store the vals\r\n */\r\n\r\n ranges.push(`${initialVal} - ${audienceValues[i]}`);\r\n isContinguous = false;\r\n\r\n } else {\r\n\r\n /**\r\n * Where the values arent contiguous, just store the current value\r\n */\r\n\r\n ranges.push(`${audienceValues[i]}`);\r\n isContinguous = false;\r\n }\r\n\r\n }\r\n\r\n return ranges;\r\n}\r\n\r\nexport const AudienceHelper = {\r\n /**\r\n * This is needed to sort an object's audiences, as they are not sorted by the backend.\r\n * To do this, we take the presentation audiences (sorted) and filter them by the object's\r\n * audiences, leaving behind a sorted array of object audiences.\r\n */\r\n getSortedPresentationAudiences(\r\n objectAudiences: Audience[],\r\n presentationAudiences: PresentationAudience[]\r\n ): PresentationAudience[] {\r\n const objectAudienceIds = objectAudiences.map(audience => audience.id.toString());\r\n\r\n /**\r\n * Remove audiences that aren't relevant for the user's current presentation\r\n */\r\n const filteredAudiences = presentationAudiences.filter(presAudience => {\r\n return objectAudienceIds.includes(presAudience.masterId.toString());\r\n });\r\n\r\n return filteredAudiences;\r\n },\r\n\r\n getMergedPresentationAudienceString(presentationAudiences: PresentationAudience[]): PresentationAudience {\r\n if (presentationAudiences.length === 1)\r\n return presentationAudiences[0];\r\n\r\n /**\r\n * Create a string with all of the audiences\r\n */\r\n const valuesStr = presentationAudiences.map(a => a.name).join(',');\r\n\r\n /**\r\n * Extract all the numbers and matches from the string\r\n * Where there aren't matches, just return the first Audience.\r\n */\r\n const valMatches = valuesStr.match(DIGIT_REGEX);\r\n const nameMatches = valuesStr.match(NAME_REGEX);\r\n\r\n if (!valMatches || !nameMatches) return presentationAudiences[0];\r\n\r\n const audienceValues = valMatches\r\n .map(l => +l) || [];\r\n\r\n /**\r\n * Build set of logical audience ranges\r\n */\r\n const audienceRange = processAudienceRanges(audienceValues);\r\n\r\n /**\r\n * Get matches name\r\n */\r\n const audienceName = nameMatches[0];\r\n\r\n return {\r\n name: `${audienceName} ${audienceRange.join(' , ')}`\r\n } as PresentationAudience;\r\n },\r\n\r\n /**\r\n * This function assumes the members array passed in is ordered by `name`.\r\n */\r\n sortMembersWithDuplicateNamesByAudience(members: BaseObject[]): BaseObject[] {\r\n // Returns the lowest level audience out of an array of audience objects by looking at the name\r\n const getLowestAudience = (audiences: Audience[]) => {\r\n let lowestAudience: Audience;\r\n let lowestAudienceDigit: number;\r\n\r\n audiences.forEach(audience => {\r\n const digit = +ArrayHelper.first(audience.name.match(DIGIT_REGEX));\r\n\r\n if (!lowestAudience) {\r\n lowestAudience = audience;\r\n lowestAudienceDigit = digit;\r\n return;\r\n }\r\n\r\n if (digit > lowestAudienceDigit)\r\n lowestAudience = audience;\r\n });\r\n\r\n return lowestAudience;\r\n };\r\n\r\n // This is used to track how many times a member's name appears in the collection\r\n const nameCountMap: HashObject<number> = {};\r\n\r\n let sorted: BaseObject[] = [];\r\n\r\n members.forEach(member => {\r\n if (!nameCountMap[member.name]) {\r\n nameCountMap[member.name] = 1;\r\n sorted.push(member);\r\n return;\r\n }\r\n\r\n sorted.push(member);\r\n nameCountMap[member.name]++;\r\n\r\n // Take the slice of duplicates that we want to sort by audience\r\n const slice = sorted.splice(sorted.length - nameCountMap[member.name]);\r\n\r\n // Sort the slice by lowest audience\r\n const sortedSlice = slice.sort((a: any, b: any) => {\r\n const firstObjLowestAudience = getLowestAudience(a.subjectPresentationAudiences.data);\r\n const secondObjLowestAudience = getLowestAudience(b.subjectPresentationAudiences.data);\r\n\r\n return firstObjLowestAudience.name.localeCompare(secondObjLowestAudience.name);\r\n });\r\n\r\n sorted = sorted.concat(sortedSlice);\r\n });\r\n\r\n return sorted;\r\n }\r\n};","import { FormikErrors, FormikTouched, getIn } from 'formik';\r\n\r\nexport const FormHelper = {\r\n getCustomFormControlClassName<T>(\r\n errors: FormikErrors<T>,\r\n touched: FormikTouched<T>,\r\n attribute: string,\r\n additionalClassName?: string\r\n ): string {\r\n let className = 'form-control';\r\n\r\n // Using getIn as it supports dot notation\r\n if (getIn(touched, attribute) && getIn(errors, attribute))\r\n className += ' is-invalid';\r\n\r\n if (additionalClassName)\r\n className += ` ${additionalClassName}`;\r\n\r\n return className;\r\n }\r\n};","import * as React from 'react';\r\nimport * as ReactIntersectionObserver from 'react-intersection-observer';\r\n\r\nimport { Core } from 'libs/common/core';\r\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\r\nimport { ContextService } from 'libs/shared/services/ContextService';\r\nimport { Text } from 'libs/shared/components/text/Text';\r\n\r\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\r\n\r\nimport { FilterContext, FilterPayloadType } from 'apps/search/reducers';\r\nimport { FilterHelper } from 'apps/search/utils';\r\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\r\nimport { PropsWithAnalyticsOptions } from 'libs/shared/interfaces';\r\nimport { WorkflowPhase, UserAction, FilterDescriptor } from 'libs/analytics/interfaces';\r\n\r\nconst namespace = 'search.filterActions';\r\n\r\nconst triggerAppLink = (stateChange: FilterPayloadType) => {\r\n const currentQueryParams = Core.LocationUtils.GetQuery();\r\n\r\n const currentAppLink = ContextService.getCurrentRoute().appLink;\r\n\r\n Core.AppLinkHelper.trigger({\r\n application: currentAppLink.application,\r\n action: currentAppLink.action,\r\n params: FilterHelper.buildQueryParams(currentQueryParams, stateChange)\r\n });\r\n};\r\n\r\ntype FilterActionsProps = FilterPayloadType & PropsWithAnalyticsOptions<{\r\n className?: string;\r\n}>;\r\n\r\nFilterActions.defaultProps = {\r\n active: false,\r\n className: ''\r\n};\r\n\r\nexport function FilterActions(props: FilterActionsProps): JSX.Element {\r\n const { dispatch } = React.useContext(FilterContext);\r\n\r\n const [ triggerOnClose, setTriggerOnClose ] = React.useState(false);\r\n let [ ref, inView ] = ReactIntersectionObserver.useInView();\r\n\r\n React.useEffect(() => {\r\n if (typeof (window as any).IntersectionObserver === 'undefined')\r\n return;\r\n\r\n if (inView) {\r\n setTriggerOnClose(true);\r\n return;\r\n }\r\n\r\n if (!inView && triggerOnClose) {\r\n setTriggerOnClose(false);\r\n applyFilter(false);\r\n }\r\n }, [inView]);\r\n\r\n function applyFilter(applyClicked: boolean): void {\r\n // The default value should not be set as a query param\r\n const isDefaultValue = props.selection?.length === 1 && ArrayHelper.first(props.selection)?.default;\r\n\r\n AnalyticsHelper.logUserAction({\r\n filter: props.filter.name,\r\n selection: (props.selection && !isDefaultValue) ? props.selection : [],\r\n isActive: props.active && !isDefaultValue,\r\n applyClicked\r\n }, AnalyticsHelper.mergeOptions(props.analyticsOptions, {\r\n workflowPhase: WorkflowPhase.Complete,\r\n actionType: UserAction.Filter\r\n }));\r\n\r\n const payload: FilterPayloadType = {\r\n filter: props.filter,\r\n active: props.active && !isDefaultValue,\r\n selection: (props.selection && !isDefaultValue) ? props.selection : []\r\n };\r\n\r\n dispatch({ type: 'apply', payload });\r\n triggerAppLink(payload);\r\n }\r\n\r\n function onClickReset(e: React.MouseEvent): void {\r\n e.preventDefault();\r\n\r\n AnalyticsHelper.logUserAction({\r\n filter: props.filter.name\r\n }, AnalyticsHelper.mergeOptions(props.analyticsOptions, {\r\n workflowPhase: WorkflowPhase.Complete,\r\n actionType: UserAction.Filter,\r\n descriptor: FilterDescriptor.Reset\r\n }));\r\n\r\n const payload: FilterPayloadType = {\r\n filter: props.filter,\r\n active: false,\r\n selection: null\r\n };\r\n\r\n dispatch({ type: 'reset', payload });\r\n triggerAppLink(payload);\r\n }\r\n\r\n function onClickApply(e: React.MouseEvent): void {\r\n e.preventDefault();\r\n\r\n applyFilter(true);\r\n }\r\n\r\n return (\r\n <div ref={ref} className={`d-flex justify-content-between ${props.className}`}>\r\n <DivButton className='text-muted hover-text-underline cursor-pointer' onClick={onClickReset}>\r\n <Text namespace={namespace} phrase='reset' />\r\n </DivButton>\r\n\r\n <DivButton className='info-link' onClick={onClickApply}>\r\n <Text namespace={namespace} phrase='apply' />\r\n </DivButton>\r\n </div>\r\n );\r\n}","import * as React from 'react';\r\nimport { Dropdown } from 'react-bootstrap';\r\n\r\nimport { SearchFilter, MoreFilters } from 'apps/search/interfaces';\r\nimport { FilterHelper } from 'apps/search/utils';\r\nimport { FilterContext } from 'apps/search/reducers';\r\n\r\nimport styles from './filter-button.scss';\r\nimport { PropsWithAnalyticsOptions } from 'libs/shared/interfaces';\r\n\r\ntype FilterButtonProps = PropsWithAnalyticsOptions<{\r\n filter: SearchFilter | MoreFilters;\r\n}>;\r\n\r\nexport function FilterButton(props: FilterButtonProps): JSX.Element {\r\n const [ label, setLabel ] = React.useState(props.filter.name);\r\n\r\n const FilterComponent = props.filter.customComponent\r\n ? props.filter.customComponent\r\n : FilterHelper.mapTypeToComponent(props.filter.type);\r\n\r\n const { state } = React.useContext(FilterContext);\r\n const filterState = state[props.filter.id];\r\n\r\n React.useEffect(() => {\r\n setLabel(FilterHelper.getLabel(props.filter, filterState));\r\n }, [ props.filter, filterState.selection ]);\r\n\r\n const baseClass = `${styles.filterButton} mx-1 btn`;\r\n const colorClass = filterState.active ? 'btn-info' : 'btn-light';\r\n const caretClass = props.filter.type !== 'dropdown' ? styles.hideCaret : '';\r\n\r\n return (\r\n <Dropdown>\r\n <Dropdown.Toggle id={props.filter.id} className={`${baseClass} ${colorClass} ${caretClass}`}>\r\n {label}\r\n </Dropdown.Toggle>\r\n\r\n <Dropdown.Menu onClick={(e: React.MouseEvent) => e.stopPropagation()}>\r\n <div className={`${styles.filterItem} mx-1 ${props.filter.type !== 'dropdown' ? 'px-2 py-1' : ''}`}>\r\n <FilterComponent analyticsOptions={props.analyticsOptions} filter={props.filter} />\r\n </div>\r\n </Dropdown.Menu>\r\n </Dropdown>\r\n );\r\n}","// extracted by mini-css-extract-plugin\nmodule.exports = {\"filterButton\":\"cv--filterButton--2LJ1G\",\"hideCaret\":\"cv--hideCaret--2OStB\",\"filterItem\":\"cv--filterItem--13K5j\"};","import * as React from 'react';\r\nimport { Form } from 'react-bootstrap';\r\n\r\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\r\n\r\nimport { useBulkCheckboxManager } from 'shared/hooks/useBulkCheckboxManager';\r\n\r\nimport { SearchFilter } from 'apps/search/interfaces';\r\nimport { FilterContext } from 'apps/search/reducers';\r\n\r\nimport { FilterActions } from '../../filter-actions/FilterActions';\r\nimport { PropsWithAnalyticsOptions } from 'libs/shared/interfaces';\r\n\r\ntype CheckboxFilterProps = PropsWithAnalyticsOptions<{\r\n filter: SearchFilter;\r\n}>;\r\n\r\nexport function CheckboxFilter(props: CheckboxFilterProps): JSX.Element {\r\n const { state } = React.useContext(FilterContext);\r\n const filterState = state[props.filter.id];\r\n\r\n const { onToggleItem, isChecked, getSelected } = useBulkCheckboxManager(props.filter.options, {\r\n preselectedIds: filterState.selection?.map(s => s.id) || []\r\n });\r\n\r\n const selections = getSelected().map(optionName => props.filter.options.find(o => o.id === optionName));\r\n\r\n return (\r\n <>\r\n <h3 className='h6 mb-2'>{props.filter.name}</h3>\r\n\r\n <Form className='mb-3'>\r\n {props.filter.options.map(option => {\r\n return (\r\n <Checkbox\r\n key={option.id}\r\n label={option.name}\r\n name={option.id}\r\n id={option.id}\r\n onChange={() => onToggleItem(option.id)}\r\n checked={isChecked(option.id)}\r\n className='my-1'\r\n />\r\n );\r\n })}\r\n </Form>\r\n\r\n <FilterActions\r\n active={!!selections.length}\r\n filter={props.filter}\r\n selection={selections}\r\n analyticsOptions={props.analyticsOptions}\r\n />\r\n </>\r\n );\r\n}","import React from 'react';\r\n\r\nimport { Dropdown } from 'react-bootstrap';\r\n\r\nimport { SearchFilter, FilterOption } from 'apps/search/interfaces';\r\nimport { FilterContext } from 'apps/search/reducers';\r\nimport { FilterActions } from '../../filter-actions/FilterActions';\r\nimport { PropsWithAnalyticsOptions } from 'libs/shared/interfaces';\r\n\r\ntype DropdownFilterProps = PropsWithAnalyticsOptions<{\r\n filter: SearchFilter;\r\n}>;\r\n\r\nexport function DropdownFilter(props: DropdownFilterProps): JSX.Element {\r\n const { state } = React.useContext(FilterContext);\r\n const filterState = state[props.filter.id];\r\n\r\n const [ currentSelection, setCurrentSelection ] = React.useState(filterState.selection);\r\n\r\n return (\r\n <>\r\n {props.filter.options.map(option => (\r\n <Dropdown.Item\r\n key={option.id}\r\n onClick={() => setCurrentSelection([option])}\r\n >\r\n {option.name}\r\n </Dropdown.Item>\r\n ))}\r\n\r\n <FilterActions\r\n active={!!currentSelection}\r\n filter={props.filter}\r\n selection={currentSelection}\r\n className='pt-1 px-2'\r\n analyticsOptions={props.analyticsOptions}\r\n />\r\n </>\r\n );\r\n}","export * from './checkbox-filter/CheckboxFilter';\r\nexport * from './more-filters/MoreFilters';\r\nexport * from './switch-filter/SwitchFilter';\r\nexport * from './dropdown-filter/DropdownFilter';\r\nexport * from './radio-filter/RadioFilter';\r\nexport * from './radio-filter/year-level/YearLevelRadioFilter';","import * as React from 'react';\r\n\r\ninterface MoreFiltersProps {}\r\n\r\nexport function MoreFilters(props: MoreFiltersProps): JSX.Element {\r\n return (\r\n <></>\r\n );\r\n}","import * as React from 'react';\r\nimport { Form } from 'react-bootstrap';\r\n\r\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\r\n\r\nimport { SearchFilter } from 'apps/search/interfaces';\r\nimport { FilterContext } from 'apps/search/reducers';\r\nimport { FilterActions } from 'apps/search/components';\r\n\r\nimport styles from './radio-filter.scss';\r\nimport { PropsWithAnalyticsOptions } from 'libs/shared/interfaces';\r\n\r\ntype RadioFilterProps = PropsWithAnalyticsOptions<{\r\n filter: SearchFilter;\r\n}>;\r\n\r\nexport function RadioFilter(props: RadioFilterProps): JSX.Element {\r\n const { state } = React.useContext(FilterContext);\r\n const filterState = state[props.filter.id];\r\n\r\n const [ currentSelection, setCurrentSelection ] = React.useState(filterState.selection);\r\n React.useEffect(() => setCurrentSelection(filterState.selection), [filterState.selection]);\r\n\r\n return (\r\n <>\r\n <h3 className='h6 mb-2'>{props.filter.name}</h3>\r\n\r\n <Form className='mb-3'>\r\n {props.filter.options.map(option => {\r\n const isSelected = currentSelection?.length && option.id === ArrayHelper.first(currentSelection).id;\r\n\r\n return (\r\n <Form.Check\r\n key={option.id}\r\n custom\r\n type='radio'\r\n label={option.name}\r\n name={option.id}\r\n id={option.id}\r\n value={option.id}\r\n onChange={() => setCurrentSelection([option])}\r\n checked={isSelected}\r\n className={styles.radioFilter}\r\n />\r\n );\r\n })}\r\n </Form>\r\n\r\n <FilterActions\r\n active={!!currentSelection?.length}\r\n filter={props.filter}\r\n selection={currentSelection}\r\n analyticsOptions={props.analyticsOptions}\r\n />\r\n </>\r\n );\r\n}","// extracted by mini-css-extract-plugin\nmodule.exports = {\"radioFilter\":\"cv--radioFilter--3srm_\"};","import * as React from 'react';\r\nimport { Form } from 'react-bootstrap';\r\n\r\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\r\n\r\nimport { SearchFilter, FilterOption } from 'apps/search/interfaces';\r\nimport { FilterContext } from 'apps/search/reducers';\r\nimport { FilterActions } from 'apps/search/components';\r\n\r\nimport { YearLevelSelect } from 'apps/user-manager/components';\r\nimport { PropsWithAnalyticsOptions } from 'libs/shared/interfaces';\r\n\r\ntype YearLevelRadioFilterProps = PropsWithAnalyticsOptions<{\r\n filter: SearchFilter;\r\n}>;\r\n\r\nexport function YearLevelRadioFilter(props: YearLevelRadioFilterProps): JSX.Element {\r\n const { state } = React.useContext(FilterContext);\r\n const filterState = state[props.filter.id];\r\n\r\n const [ currentSelection, setCurrentSelection ] = React.useState(filterState.selection);\r\n\r\n React.useEffect(() => setCurrentSelection(filterState.selection), [filterState.selection]);\r\n\r\n function onSelect(yearLevel: FilterOption): void {\r\n setCurrentSelection([yearLevel]);\r\n }\r\n\r\n return (\r\n <>\r\n <h3 className='h6 mb-2'>{props.filter.name}</h3>\r\n\r\n <Form className='mb-3'>\r\n <YearLevelSelect\r\n yearLevels={props.filter.options}\r\n onSelect={onSelect}\r\n selected={ArrayHelper.first(currentSelection)}\r\n />\r\n </Form>\r\n\r\n <FilterActions\r\n active={!!currentSelection?.length}\r\n filter={props.filter}\r\n selection={currentSelection}\r\n analyticsOptions={props.analyticsOptions}\r\n />\r\n </>\r\n );\r\n}","import * as React from 'react';\r\n\r\nimport { ToggleSwitch } from 'shared/components/toggle-switch/ToggleSwitch';\r\n\r\nimport { FilterProps } from 'apps/search/interfaces';\r\nimport { FilterActions } from 'apps/search/components';\r\nimport { FilterContext } from 'apps/search/reducers';\r\n\r\nexport function SwitchFilter(props: FilterProps): JSX.Element {\r\n const { state } = React.useContext(FilterContext);\r\n const filterState = state[props.filter.id];\r\n\r\n const [ active, setActive ] = React.useState<boolean>(filterState.active);\r\n\r\n return (\r\n <>\r\n <h3 className='h6 mb-2'>{props.filter.name}</h3>\r\n <p className='d-inline-block w-75 mr-auto'>{props.filter.description}</p>\r\n\r\n <ToggleSwitch onClick={() => setActive(!active)} on={active} />\r\n\r\n <FilterActions active={active} filter={props.filter} analyticsOptions={props.analyticsOptions} />\r\n </>\r\n );\r\n}","export * from './search-filters/SearchFilters';\r\nexport * from './search-filters/PartialSearchFilters';\r\nexport * from './filter-button/FilterButton';\r\nexport * from './filter-actions/FilterActions';\r\nexport * from './reset-button/ResetButton';\r\nexport * from './filter-types';","import * as React from 'react';\r\n\r\nimport { Core } from 'libs/common/core';\r\nimport { ContextService } from 'libs/shared/services/ContextService';\r\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\r\nimport { Text } from 'libs/shared/components/text/Text';\r\n\r\nimport { FilterContext } from 'apps/search/reducers';\r\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\r\nimport { UserAction, FilterDescriptor, WorkflowPhase } from 'libs/analytics/interfaces';\r\nimport { PropsWithAnalyticsOptions } from 'libs/shared/interfaces';\r\n\r\ntype ResetButtonProps = PropsWithAnalyticsOptions<{\r\n currentQueryParam: string;\r\n}>;\r\n\r\nexport function ResetButton(props: ResetButtonProps): JSX.Element {\r\n const { dispatch } = React.useContext(FilterContext);\r\n\r\n const onClickReset = () => {\r\n const currentAppLink = ContextService.getCurrentRoute().appLink;\r\n\r\n const nextAppLink: Core.AppLink = {\r\n application: currentAppLink.application,\r\n action: currentAppLink.action\r\n };\r\n\r\n AnalyticsHelper.logUserAction({\r\n filter: 'All'\r\n }, AnalyticsHelper.mergeOptions(props.analyticsOptions, {\r\n actionType: UserAction.Filter,\r\n descriptor: FilterDescriptor.Reset,\r\n workflowPhase: WorkflowPhase.Complete\r\n }));\r\n\r\n if (props.currentQueryParam)\r\n nextAppLink.params = { query: props.currentQueryParam };\r\n\r\n Core.AppLinkHelper.trigger(nextAppLink);\r\n\r\n dispatch({\r\n type: 'trigger-reset',\r\n payload: {}\r\n });\r\n };\r\n\r\n return (\r\n <DivButton\r\n onClick={onClickReset}\r\n className='hover-text-underline cursor-pointer d-flex align-items-center ml-2'\r\n >\r\n <Text namespace='search.resetButton' phrase='reset' />\r\n </DivButton>\r\n );\r\n}","import * as React from 'react';\r\nimport styles from './search-filters.scss';\r\n\r\ninterface PartialSearchFiltersProps {\r\n count?: number;\r\n hideHeading?: boolean;\r\n}\r\n\r\nexport function PartialSearchFilters({ count = 6, hideHeading }: PartialSearchFiltersProps): JSX.Element {\r\n return (\r\n <div className='d-flex'>\r\n {!hideHeading && (\r\n <div className={`\r\n ${styles.partialFilterHeading}\r\n partial-loading-background\r\n d-inline-block\r\n pr-2\r\n border-right\r\n d-flex\r\n align-items-center\r\n my-auto\r\n `} />\r\n )}\r\n\r\n <div className='d-flex pl-1'>\r\n {Array(count).fill(null).map((item, index) => (\r\n <div key={index} className={`${styles.partialButton} partial-loading-background mx-1`} />\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n}","import * as React from 'react';\r\n\r\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\r\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\r\n\r\nimport { FilterButton, ResetButton } from 'apps/search/components';\r\nimport { FilterHelper } from 'apps/search/utils';\r\nimport { FilterReducer, FilterContext } from 'apps/search/reducers';\r\nimport { SearchFilter, MoreFilters } from 'apps/search/interfaces';\r\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\r\nimport { PropsWithAnalyticsOptions } from 'libs/shared/interfaces';\r\n\r\ntype SearchFiltersProps = PropsWithAnalyticsOptions<{\r\n queryParams: HashObject;\r\n mainFilters: SearchFilter[];\r\n moreFilters?: MoreFilters;\r\n hideHeading?: boolean;\r\n}>;\r\n\r\nexport function SearchFilters(props: SearchFiltersProps): JSX.Element {\r\n const { queryParams, mainFilters, moreFilters, hideHeading } = props;\r\n\r\n const initialState = React.useMemo(() => {\r\n return FilterHelper.deriveInitialStateFromQuery(queryParams, mainFilters, moreFilters);\r\n }, [queryParams]);\r\n\r\n const [ state, dispatch ] = React.useReducer(FilterReducer, initialState);\r\n\r\n React.useEffect(() => {\r\n if (!state.bulkReset)\r\n return;\r\n\r\n dispatch({\r\n type: 'bulk-reset',\r\n payload: FilterHelper.deriveInitialStateFromQuery({}, mainFilters, moreFilters) as any\r\n });\r\n }, [state]);\r\n\r\n return (\r\n <FilterContext.Provider value={{ state, dispatch }}>\r\n <LanguageNamespaceContext.Provider value='search.searchFilters'>\r\n <section className='d-flex'>\r\n {!hideHeading && (\r\n <h2 className='h5 mb-0 d-inline-block pr-2 border-right d-flex align-items-center'><Text phrase='heading' /></h2>\r\n )}\r\n\r\n <div className='d-flex'>\r\n {mainFilters.map(f => <FilterButton key={f.id} filter={f} analyticsOptions={props.analyticsOptions} />)}\r\n\r\n {moreFilters && (\r\n <FilterButton key={moreFilters.id} filter={moreFilters} analyticsOptions={props.analyticsOptions} />\r\n )}\r\n\r\n {FilterHelper.hasActiveFilters(queryParams) &&\r\n <ResetButton currentQueryParam={queryParams.query} analyticsOptions={props.analyticsOptions} />\r\n }\r\n </div>\r\n </section>\r\n </LanguageNamespaceContext.Provider>\r\n </FilterContext.Provider>\r\n );\r\n}","// extracted by mini-css-extract-plugin\nmodule.exports = {\"partialFilterHeading\":\"cv--partialFilterHeading--2zHGT\",\"partialButton\":\"cv--partialButton--3Gy7Y\"};","import { createContext } from 'react';\r\n\r\nimport { ReducerActions } from 'libs/common/react/interfaces';\r\nimport { SearchFilter, FilterIds, FilterOption } from 'apps/search/interfaces';\r\n\r\nexport type FilterState = {\r\n active: boolean;\r\n selection?: FilterOption[];\r\n};\r\n\r\ntype FilterStateHashFilters = {\r\n [key in FilterIds]: FilterState\r\n};\r\n\r\nexport type FilterStateHash = FilterStateHashFilters & {\r\n bulkReset?: boolean;\r\n};\r\n\r\nexport type FilterActionType = 'apply' | 'reset' | 'bulk-reset' | 'trigger-reset';\r\n\r\nexport interface FilterPayloadType {\r\n filter: SearchFilter;\r\n active: boolean;\r\n selection?: FilterOption[];\r\n}\r\n\r\n/**\r\n * Context\r\n */\r\ninterface FilterContextType {\r\n state: FilterStateHash;\r\n dispatch: React.Dispatch<ReducerActions<FilterActionType>>;\r\n}\r\n\r\nexport const FilterContext = createContext<FilterContextType>(null);\r\n\r\n/**\r\n * Reducer - root level keys should match the filter object's corresponding \"id\" field\r\n */\r\nexport function FilterReducer(\r\n state: FilterStateHash,\r\n action: ReducerActions<FilterActionType, FilterPayloadType>\r\n): FilterStateHash {\r\n switch (action.type) {\r\n case 'apply':\r\n return {\r\n ...state,\r\n [action.payload.filter.id]: {\r\n active: action.payload.active,\r\n selection: action.payload.selection\r\n }\r\n };\r\n\r\n case 'reset':\r\n return {\r\n ...state,\r\n [action.payload.filter.id]: {\r\n active: action.payload.active,\r\n selection: action.payload.selection\r\n }\r\n };\r\n\r\n case 'trigger-reset':\r\n return {\r\n ...state,\r\n bulkReset: true\r\n };\r\n\r\n case 'bulk-reset':\r\n return {\r\n ...state,\r\n ...action.payload,\r\n bulkReset: false\r\n };\r\n\r\n default:\r\n return state;\r\n }\r\n}","export * from './FilterReducer';","import * as React from 'react';\r\n\r\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\r\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\r\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\r\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\r\n\r\nimport { SearchFilter, MoreFilters, FilterType, FilterProps, FilterOption, FilterIds } from 'apps/search/interfaces';\r\nimport { FilterStateHash, FilterPayloadType, FilterState } from 'apps/search/reducers';\r\nimport { SwitchFilter, RadioFilter, CheckboxFilter, DropdownFilter, YearLevelRadioFilter, MoreFilters as MoreFiltersComponent } from 'apps/search/components/filter-types';\r\nimport { MockYearLevel, MockClassroom } from 'apps/user-manager/interfaces';\r\n\r\nconst getPhrase = LanguageService.encloseNamespace('search.utils');\r\n\r\ninterface WithStatementObject {\r\n sortKey?: string;\r\n sortValue?: string;\r\n assocs?: string[];\r\n}\r\n\r\ntype FiltersDictionary = {\r\n [key: string]: (options?: any) => SearchFilter;\r\n};\r\n\r\nexport const Filters: FiltersDictionary = {\r\n SortByName: (options: FilterOption[]) => ({\r\n id: 'sortName',\r\n name: getPhrase('firstNameAToZ'),\r\n type: 'dropdown',\r\n options\r\n }),\r\n YearLevel: (options: FilterOption[]) => ({\r\n id: 'yearLevel', // \"name\" should match the state keys in `FilterReducer`\r\n name: getPhrase('yearLevel'),\r\n type: 'radio',\r\n customComponent: YearLevelRadioFilter,\r\n options\r\n }),\r\n ObjectType: (options: FilterOption[]) => ({\r\n id: 'objectType',\r\n name: getPhrase('objectTypes'),\r\n type: 'radio',\r\n options\r\n }),\r\n Ratings: (options: FilterOption[]) => ({\r\n id: 'ratings',\r\n name: getPhrase('ratings'),\r\n type: 'rating',\r\n options\r\n }),\r\n Interactives: () => ({\r\n id: 'interactives',\r\n name: getPhrase('interactives'),\r\n type: 'switch',\r\n description: getPhrase('interactivesDescription')\r\n }),\r\n Clips: () => ({\r\n id: 'clips',\r\n name: getPhrase('clips'),\r\n type: 'switch',\r\n description: getPhrase('clipsDescription')\r\n }),\r\n Classroom: (options: FilterOption[]) => ({\r\n id: 'classroom',\r\n name: getPhrase('classroom'),\r\n type: 'checkbox',\r\n options\r\n })\r\n};\r\n\r\nexport const FilterHelper = {\r\n getMoreFilters(): MoreFilters {\r\n return {\r\n id: 'moreFilters',\r\n name: getPhrase('moreFilters'),\r\n type: 'more-filters',\r\n filters: []\r\n };\r\n },\r\n\r\n mapTypeToComponent(type: FilterType): (props: FilterProps) => JSX.Element {\r\n switch (type) {\r\n case 'switch':\r\n return (props: any) => <SwitchFilter key={props.id} {...props} />;\r\n case 'checkbox':\r\n return (props: any) => <CheckboxFilter key={props.id} {...props} />;\r\n case 'radio':\r\n return (props: any) => <RadioFilter key={props.id} {...props} />;\r\n case 'rating':\r\n return (props: any) => <SwitchFilter key={props.id} {...props} />;\r\n case 'dropdown':\r\n return (props: any) => <DropdownFilter key={props.id} {...props} />;\r\n case 'more-filters':\r\n return (props: any) => <MoreFiltersComponent key={props.id} {...props} />;\r\n }\r\n },\r\n\r\n deriveInitialStateFromQuery(\r\n queryParams: HashObject = {},\r\n mainFilters: SearchFilter[] = null,\r\n moreFilters: MoreFilters = null\r\n ): FilterStateHash {\r\n const initialStates: FilterStateHash = {\r\n sortName: {\r\n active: !!queryParams.sortName,\r\n selection: getFilterSelectionsFromQueryParams(queryParams, mainFilters, 'sortName')\r\n },\r\n\r\n objectType: {\r\n active: !!queryParams.objectType,\r\n selection: getFilterSelectionsFromQueryParams(queryParams, mainFilters, 'objectType')\r\n },\r\n\r\n ratings: {\r\n active: !!queryParams.ratings,\r\n selection: queryParams.ratings || null\r\n },\r\n\r\n interactives: {\r\n active: queryParams.interactives\r\n },\r\n\r\n clips: {\r\n active: queryParams.clips\r\n },\r\n\r\n yearLevel: {\r\n active: !!queryParams.yearLevel,\r\n selection: getFilterSelectionsFromQueryParams(queryParams, mainFilters, 'yearLevel')\r\n },\r\n\r\n classroom: {\r\n active: !!queryParams.classroom,\r\n selection: getFilterSelectionsFromQueryParams(queryParams, mainFilters, 'classroom')\r\n },\r\n\r\n moreFilters: {\r\n active: false // TODO: figure this shit out eventually\r\n }\r\n };\r\n\r\n const derivedState = mainFilters.reduce<FilterStateHash>((state: FilterStateHash, filter) => {\r\n state[filter.id] = initialStates[filter.id];\r\n return state;\r\n }, {} as FilterStateHash);\r\n\r\n if (moreFilters)\r\n derivedState.moreFilters = initialStates.moreFilters;\r\n\r\n return derivedState;\r\n },\r\n\r\n hasActiveFilters(queryParams: HashObject): boolean {\r\n const paramKeys = Object.keys(queryParams);\r\n\r\n if (!paramKeys.length)\r\n return false;\r\n\r\n const activeFilters = paramKeys.filter(q => {\r\n // 'query', 'cursor', and 'page' don't count as filters\r\n if (q === 'query' || q === 'cursor' || q === 'page')\r\n return false;\r\n\r\n // Filters that can have multiple selections (e.g. checkbox types) do not count as active if they are empty\r\n if (Array.isArray(queryParams[q]) && !queryParams[q].length)\r\n return false;\r\n\r\n return true;\r\n });\r\n\r\n return !!activeFilters.length;\r\n },\r\n\r\n getLabel(filter: SearchFilter, filterState: FilterState): string {\r\n if (!filterState.selection?.length)\r\n return filter.name;\r\n\r\n if (filter.type === 'dropdown')\r\n return ArrayHelper.first(filterState.selection).name;\r\n\r\n if (filter.type === 'radio') {\r\n const selection = ArrayHelper.first(filterState.selection);\r\n if (!selection || selection.default)\r\n return filter.name;\r\n\r\n return selection.name;\r\n }\r\n\r\n if (filter.type === 'checkbox')\r\n return `${filter.name} - ${filterState.selection.length}`;\r\n },\r\n\r\n buildQueryParams(queryParams: HashObject, state: FilterPayloadType): HashObject {\r\n const { id: param, type } = state.filter;\r\n\r\n const updatedParams = { ...queryParams };\r\n\r\n switch (type) {\r\n case 'switch':\r\n updatedParams[param] = state.active ? 'true' : '';\r\n break;\r\n\r\n case 'radio':\r\n case 'dropdown':\r\n updatedParams[param] = getRadioParamValue(state.selection);\r\n break;\r\n\r\n case 'checkbox':\r\n updatedParams[param] = state.active ? state.selection.map(option => option.id) : [];\r\n }\r\n\r\n if (!updatedParams[param]) // If the param is empty, delete it\r\n delete updatedParams[param];\r\n\r\n return updatedParams;\r\n },\r\n\r\n /**\r\n * This returns an object of all of the query params our search requests will pass to the backend endpoint.\r\n * This usually consists of:\r\n * q = the query string e.g. 'shakespeare'\r\n * filter = the filter string e.g. '{interactives:true,classroom:classroom-2-a,classroom:classroom-2-b}'\r\n * query = the with statement e.g. '{orderbydesc:name}series,season,interactives,resources,subtitles'\r\n * cursor = the cursor e.g. 's-sf3r9o32f-0vd'\r\n */\r\n getBackendQueryParams(queryParams: HashObject): HashObject {\r\n const q = queryParams.query;\r\n const query = getWithStatement(queryParams);\r\n const filter = getFilterString(queryParams);\r\n\r\n const backendQueryParams: HashObject = {};\r\n\r\n if (q)\r\n backendQueryParams.q = q;\r\n\r\n if (query)\r\n backendQueryParams.query = query;\r\n\r\n if (filter)\r\n backendQueryParams.filter = `{${filter}}`;\r\n\r\n if (queryParams.cursor)\r\n backendQueryParams.cursor = queryParams.cursor;\r\n\r\n return backendQueryParams;\r\n },\r\n\r\n /**\r\n * This functions purpose is to convert a with statement string into an object that is easy to use\r\n * in mock backends for sorting/filtering mock data. It doesn't need to be efficient, as it should\r\n * never ever be used in production\r\n */\r\n convertWithStatementToObject(withStatement: string): WithStatementObject {\r\n if (!withStatement)\r\n return {};\r\n\r\n // Remove any angle brackets with commas, which we use in `.split` just below\r\n withStatement = withStatement.replace('{', ',').replace('}', ',');\r\n\r\n const withStatements = withStatement.split(',');\r\n\r\n let sortingStatement: string = '';\r\n let assocStatements: string[] = [];\r\n\r\n withStatements.forEach(statement => {\r\n if (statement.includes(':'))\r\n sortingStatement = statement;\r\n else\r\n assocStatements.push(statement);\r\n });\r\n\r\n const [ sortKey, sortValue ] = sortingStatement.split(':');\r\n\r\n return {\r\n assocs: assocStatements,\r\n sortKey,\r\n sortValue\r\n };\r\n },\r\n\r\n // This is used for filtering data in mock flight requests. It shouldn't be used in production code\r\n revertFilterString(filterString: string): HashObject {\r\n if (!filterString)\r\n return {};\r\n\r\n // Remove \"{\" and \"}\" from both ends\r\n filterString = filterString.slice(1, -1);\r\n\r\n // Get an array of all of our filter values:\r\n // E.g. [ 'yearLevel:year-2', 'classroom:classroom-2-a', 'classroom-2-b', 'classroom-2-c' ]\r\n const filterValues = filterString.split(',');\r\n\r\n const keyValueFilterStrings: string[] = [];\r\n\r\n let currentFilterKey = '';\r\n filterValues.forEach(filterStr => {\r\n // Here we're building an array that looks like `filterValues`, but where every value has its key attached\r\n // E.g. [ 'yearLevel:year-2', 'classroom:classroom-2-a', 'classroom:classroom-2-b', 'classroom:classroom-2-c' ]\r\n\r\n if (filterStr.includes(':')) {\r\n currentFilterKey = filterStr.split(':')[0];\r\n keyValueFilterStrings.push(filterStr);\r\n return;\r\n }\r\n\r\n const fullFilterString = `${currentFilterKey}:${filterStr}`;\r\n keyValueFilterStrings.push(fullFilterString);\r\n });\r\n\r\n // Convert the array into an object.\r\n // E.g. { yearLevel: 'year-2', classroom: [ 'classroom-2-a', 'classroom-2-b', 'classroom-2-c' ] }\r\n return keyValueFilterStrings.reduce((filterObj: HashObject, filterStr) => {\r\n const [ key, value ] = filterStr.split(':');\r\n\r\n if (filterObj[key] && !Array.isArray(filterObj[key])) {\r\n const temp = filterObj[key];\r\n filterObj[key] = [temp];\r\n }\r\n\r\n if (Array.isArray(filterObj[key]))\r\n filterObj[key].push(value);\r\n else\r\n filterObj[key] = value;\r\n\r\n return filterObj;\r\n }, {});\r\n },\r\n\r\n /**\r\n * Helpers below this comment return hard coded filter options for a particular filter.\r\n * If you are adding a new filter with hard coded options, add a new function here.\r\n */\r\n getObjectTypeOptions(): FilterOption[] {\r\n return [\r\n {\r\n id: 'allTypes',\r\n name: getPhrase('allTypes'),\r\n default: true\r\n },\r\n {\r\n id: 'topics',\r\n name: getPhrase('topics')\r\n },\r\n {\r\n id: 'playlists',\r\n name: getPhrase('playlists')\r\n },\r\n {\r\n id: 'series',\r\n name: getPhrase('series')\r\n },\r\n {\r\n id: 'videos',\r\n name: getPhrase('videos')\r\n }\r\n ];\r\n },\r\n\r\n getNameSortOptions(): FilterOption[] {\r\n return [\r\n {\r\n id: 'first-name-atoz',\r\n name: getPhrase('firstNameAToZ'),\r\n default: true\r\n },\r\n {\r\n id: 'first-name-ztoa',\r\n name: getPhrase('firstNameZToA')\r\n },\r\n {\r\n id: 'surname-atoz',\r\n name: getPhrase('surnameAToZ')\r\n },\r\n {\r\n id: 'surname-ztoa',\r\n name: getPhrase('surnameZToA')\r\n }\r\n ];\r\n },\r\n\r\n getYearLevelOptions(yearLevels: MockYearLevel[]): FilterOption[] {\r\n if (!yearLevels?.length)\r\n return [];\r\n\r\n return yearLevels.map(level => ({\r\n id: level.name.toLowerCase().replace(' ', '-'),\r\n name: level.name\r\n }));\r\n },\r\n\r\n getClassroomOptions(classrooms: MockClassroom[]): FilterOption[] {\r\n if (!classrooms?.length)\r\n return [];\r\n\r\n return classrooms.map(classroom => ({\r\n id: classroom.name.toLowerCase().replace(' ', '-'),\r\n name: classroom.name\r\n }));\r\n }\r\n};\r\n\r\n// This allows us to determine which filters should be applied based on the query params set on first load\r\nfunction getFilterSelectionsFromQueryParams(\r\n queryParams: HashObject,\r\n filters: SearchFilter[],\r\n filterName: FilterIds\r\n): FilterOption[] {\r\n const filter = filters.find(f => f.id === filterName);\r\n\r\n if (!filter)\r\n return [];\r\n\r\n if (!queryParams[filterName])\r\n return filter.options.filter(option => option.default);\r\n\r\n let selections = queryParams[filterName];\r\n if (!Array.isArray(selections))\r\n selections = [selections];\r\n\r\n return filter.options.filter(option => selections.includes(option.id));\r\n}\r\n\r\nfunction getRadioParamValue(selection: FilterOption[]): string {\r\n if (!selection?.length)\r\n return '';\r\n\r\n return ArrayHelper.first(selection).id;\r\n}\r\n\r\n/**\r\n * This is massively under developed, and only does what it's needed for at this time.\r\n * Please update if you need extra functionality\r\n */\r\nfunction getWithStatement(queryParams: HashObject): string {\r\n let withStatement = '';\r\n\r\n if (queryParams['sortName']) {\r\n switch (queryParams['sortName']) {\r\n case 'first-name-atoz':\r\n withStatement += '{orderby:name}';\r\n break;\r\n\r\n case 'first-name-ztoa':\r\n withStatement += '{orderbydesc:name}';\r\n break;\r\n\r\n case 'surname-atoz':\r\n withStatement += '{orderby:surname}';\r\n break;\r\n\r\n case 'surname-ztoa':\r\n withStatement += '{orderbydesc:surname}';\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n return withStatement;\r\n}\r\n\r\n/**\r\n * Private functions\r\n */\r\n\r\nfunction getFilterString(queryParams: HashObject): string {\r\n // Add any potential query params here that are not supposed to be in the filter string\r\n const omitKeys = [ 'query', 'sortName', 'cursor', 'page' ];\r\n\r\n const filterQueryParams = ObjectHelper.omit(queryParams, omitKeys);\r\n\r\n const filterStrings = Object.keys(filterQueryParams).map(filter => {\r\n return `${filter}:${filterQueryParams[filter]}`;\r\n });\r\n\r\n return filterStrings.join(',');\r\n}","import * as React from 'react';\r\nimport * as _ from 'underscore';\r\n\r\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\r\nimport { Core } from 'libs/common/core';\r\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\r\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\r\n\r\nimport { Video, Series, Playlist, PresentationAudience } from 'libs/shared/interfaces';\r\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\r\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\r\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\r\nimport { PlaylistWidgetItem } from 'libs/shared/components/widgets/items/playlist-widget-item/PlaylistWidgetItem';\r\nimport { SeriesWidgetItem } from 'libs/shared/components/widgets/items/series-widget-item/SeriesWidgetItem';\r\n\r\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\r\nimport { Actions } from 'shared/constants/LiteActions';\r\nimport { SearchResults, MainSearchResults, OtherSearchResultSet, OtherSearchResults } from 'apps/search/interfaces';\r\n\r\nconst Capacities = {\r\n MainResults: {\r\n SUBJECTS: 10,\r\n PLAYLISTS: 5,\r\n SERIES: 4\r\n },\r\n\r\n OtherResults: {\r\n VIDEOS: 6,\r\n PLAYLISTS: 10,\r\n SERIES: 10\r\n }\r\n};\r\n\r\nexport const SearchHelper = {\r\n /**\r\n * These are the results that appear at the very top of the page\r\n */\r\n filterMainResults(results: SearchResults): MainSearchResults {\r\n const { MainResults } = Capacities;\r\n\r\n const subjects = ArrayHelper.firstFew(results.subjects, MainResults.SUBJECTS);\r\n const firstVideo = ArrayHelper.first(results.videos);\r\n const playlists = ArrayHelper.firstFew(results.playlists, MainResults.PLAYLISTS);\r\n const series = ArrayHelper.firstFew(results.series, MainResults.SERIES);\r\n\r\n return {\r\n subjects,\r\n firstVideo,\r\n playlists,\r\n series,\r\n otherResults: { // All excess results are displayed in a different format defined below\r\n videos: ArrayHelper.lastFew(results.videos, results.videos.length - 1),\r\n playlists: ArrayHelper.lastFew(results.playlists, results.playlists.length - MainResults.PLAYLISTS),\r\n series: ArrayHelper.lastFew(results.series, results.series.length - MainResults.SERIES)\r\n }\r\n };\r\n },\r\n\r\n structureOtherResults(results: OtherSearchResults): OtherSearchResultSet[] {\r\n const { OtherResults } = Capacities;\r\n\r\n const videoSets = ArrayHelper.chunk<Video>(results.videos, OtherResults.VIDEOS);\r\n const playlistSets = ArrayHelper.chunk<Playlist>(results.playlists, OtherResults.PLAYLISTS);\r\n const seriesSets = ArrayHelper.chunk<Series>(results.series, OtherResults.SERIES);\r\n\r\n return SearchHelper.buildResultStructure(videoSets, playlistSets, seriesSets);\r\n },\r\n\r\n // For every 6 videos, there should be either a row of playlists or a row of series (alternating)\r\n buildResultStructure(\r\n videoSets: Video[][],\r\n playlistSets: Playlist[][],\r\n seriesSets: Series[][]\r\n ): OtherSearchResultSet[] {\r\n const structure: OtherSearchResultSet[] = [];\r\n\r\n // Clone each set as we need to use a mutable structure, but don't want to mutate the inputs directly\r\n const videosClone = [...videoSets];\r\n const playlistsClone = [...playlistSets];\r\n const seriesClone = [...seriesSets];\r\n\r\n // We set the iterations here instead of in the for-loop args because `videoSets` gets mutated\r\n const iterations = videoSets.length;\r\n for (let index = 0; index < iterations; index++) {\r\n const nextVideoSet = videosClone.shift();\r\n\r\n // After every video set will come a set of playlists or series\r\n const seriesOrPlaylistSet = SearchHelper.getSeriesOrPlaylistSet(playlistsClone, seriesClone, index);\r\n\r\n nextVideoSet && structure.push({ type: 'video', data: nextVideoSet });\r\n seriesOrPlaylistSet && structure.push(seriesOrPlaylistSet);\r\n }\r\n\r\n // In edge cases where there may be more playlists or series result sets than video sets, add them to the end\r\n if (playlistsClone.length) {\r\n playlistsClone.forEach(data => structure.push({ type: 'playlist', data }));\r\n }\r\n\r\n if (seriesClone.length) {\r\n seriesClone.forEach(data => structure.push({ type: 'series', data }));\r\n }\r\n\r\n // Remove any empty sets\r\n return structure.filter(set => set.data && !!set.data.length);\r\n },\r\n\r\n /**\r\n * Determines whether or not a playlist or series set should be added to the results structure next.\r\n */\r\n getSeriesOrPlaylistSet(playlists: Playlist[][], series: Series[][], videoSetIndex: number): OtherSearchResultSet {\r\n const isOdd = videoSetIndex % 2 === 0; // If odd, add a series set. If even, add a playlist set.\r\n\r\n if ((isOdd && series.length) || !playlists.length)\r\n return { type: 'series', data: series.shift() };\r\n\r\n if ((!isOdd && playlists.length) || !series.length)\r\n return { type: 'playlist', data: playlists.shift() };\r\n\r\n // We will only reach this point once we have run out of series and playlist results\r\n return null;\r\n },\r\n\r\n getResultSetComponent(\r\n set: OtherSearchResultSet,\r\n audiences: PresentationAudience[],\r\n setFavourite?: (videoId: string, shouldFavourite: boolean, onError?: () => void) => void\r\n ): JSX.Element {\r\n switch (set.type) {\r\n case 'video':\r\n return (\r\n <div className='pb-3'>\r\n <VideoList\r\n videos={set.data as Video[]}\r\n getVideoAppLink={SearchHelper.getVideoAppLink}\r\n getSeriesAppLink={SearchHelper.getSeriesAppLink}\r\n setFavourite={setFavourite}\r\n />\r\n </div>\r\n );\r\n\r\n case 'playlist':\r\n return (\r\n <div className='mx-n1'>\r\n <FixedWidget\r\n name={LanguageService.getPhrase('search.searchResults', 'relatedPlaylists')}\r\n collection={set.data as Playlist[]}\r\n childAppLink={SearchHelper.getPlaylistAppLink()}\r\n childComponent={(childProps: any) => (\r\n <PlaylistWidgetItem\r\n {...childProps}\r\n presentationAudiences={audiences}\r\n />\r\n )}\r\n contents={WidgetContents.Playlists}\r\n />\r\n </div>\r\n );\r\n\r\n case 'series':\r\n return (\r\n <div className='mx-n1'>\r\n <FixedWidget\r\n name={LanguageService.getPhrase('search.searchResults', 'relatedSeries')}\r\n collection={set.data}\r\n childAppLink={SearchHelper.getSeriesAppLink()}\r\n childComponent={(childProps: any) => (\r\n <SeriesWidgetItem\r\n {...childProps}\r\n audiences={audiences}\r\n />\r\n )}\r\n contents={WidgetContents.Series}\r\n />\r\n </div>\r\n );\r\n }\r\n },\r\n\r\n getVideoAppLink(video: Video): Core.AppLink {\r\n return {\r\n application: AppChannels.DEFAULT,\r\n action: 'play:video', // TODO: Change to constant\r\n args: [video.id]\r\n };\r\n },\r\n\r\n getSeriesAppLink(series?: Series): Core.AppLink {\r\n return {\r\n application: AppChannels.DEFAULT,\r\n action: Actions.Default.SERIES,\r\n args: series ? [ series.id, TextHelper.slugify(series.name) ] : []\r\n };\r\n },\r\n\r\n getPlaylistAppLink(playlist?: Playlist): Core.AppLink {\r\n return {\r\n application: AppChannels.PLAYLISTS,\r\n action: Actions.Playlists.PLAYLIST,\r\n args: playlist ? [ playlist.id, TextHelper.slugify(playlist.name) ] : []\r\n };\r\n },\r\n};","export * from './FilterHelper';\r\nexport * from './SearchHelper';","import React from 'react';\r\nimport { parse, ParseResult } from 'papaparse';\r\n\r\nimport { useViewModel } from 'libs/common/react/hooks/useViewModel';\r\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\r\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\r\nimport { Text } from 'libs/shared/components/text/Text';\r\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\r\n\r\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\r\nimport { Core } from 'libs/common/core';\r\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\r\n\r\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\r\nimport { ViewModelKeys } from 'shared/constants/LiteViewModels';\r\n\r\nimport { MockYearLevel, MockUserRole } from 'apps/user-manager/interfaces';\r\nimport { MockUserType } from 'apps/user-manager/enums';\r\n\r\nconst namespace = 'userManager.bulkUploadFileSelect';\r\n\r\ninterface BulkUploadFileSelectProps {\r\n action: string;\r\n userType: MockUserType;\r\n userRoles?: MockUserRole[];\r\n yearLevels?: MockYearLevel[];\r\n}\r\n\r\nexport function BulkUploadFileSelect(props: BulkUploadFileSelectProps): React.ReactElement {\r\n const ref = React.useRef(null);\r\n const useRef = React.useCallback(node => {\r\n if (!node)\r\n return;\r\n\r\n ref.current = node;\r\n }, []);\r\n\r\n const viewModelKey = props.userType === MockUserType.Student\r\n ? ViewModelKeys.BULK_STUDENT_UPLOAD\r\n : ViewModelKeys.BULK_TEACHER_UPLOAD;\r\n\r\n const [ , setUsers ] = useViewModel(viewModelKey);\r\n\r\n const alerts = useAlerts();\r\n\r\n const buildStudent = (r: HashObject, index: number): HashObject => {\r\n const yearLevel = props.yearLevels.find(y => y.name === r[2]);\r\n\r\n return {\r\n lookupId: index.toString(),\r\n name: r[0],\r\n surname: r[1],\r\n yearLevel,\r\n email: r[3]\r\n };\r\n };\r\n\r\n const buildTeacher = (r: HashObject, index: number): HashObject => {\r\n const userRole = props.userRoles.find(y => y.name === r[2]);\r\n\r\n // TODO: Change to actually work\r\n return {\r\n lookupId: index.toString(),\r\n name: r[0],\r\n surname: r[1],\r\n userRole,\r\n email: r[3]\r\n };\r\n };\r\n\r\n const onClick = (e: React.MouseEvent) => {\r\n ref.current.value = null;\r\n ref.current.click(null);\r\n };\r\n\r\n const onChange = (file: File) => {\r\n parse(file, {\r\n complete: (result: ParseResult) => {\r\n const data = result.data;\r\n\r\n if (!data.length || data.length === 1) {\r\n alerts.warning(LanguageService.getPhrase(namespace, 'emptyCsvWarning'));\r\n return;\r\n }\r\n\r\n data.shift();\r\n\r\n setUsers(data.map(props.userType === MockUserType.Student ? buildStudent : buildTeacher));\r\n\r\n Core.AppLinkHelper.trigger({\r\n application: AppChannels.USER_MANAGER,\r\n action: props.action\r\n });\r\n }\r\n });\r\n };\r\n\r\n return (\r\n <>\r\n <IconButton\r\n svgName={cvSvgLibrary.Upload}\r\n className='btn btn-outline-dark'\r\n onClick={onClick}\r\n >\r\n <Text namespace={namespace} phrase='button' />\r\n </IconButton>\r\n\r\n <input\r\n type='file'\r\n autoComplete='off'\r\n className='file-select d-none'\r\n accept='text/csv'\r\n ref={useRef}\r\n onChange={e => onChange(e.target.files[0])}\r\n />\r\n </>\r\n );\r\n}","import React from 'react';\r\nimport { FormikErrors, FormikTouched } from 'formik';\r\n\r\nimport { FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\r\n\r\nimport { EditUserRequest, MockYearLevel, MockStudent } from 'apps/user-manager/interfaces';\r\nimport { MockUserType } from 'apps/user-manager/enums';\r\nimport { getStudentValidationSchema } from 'apps/user-manager/validation/user-validation/UserValidationSchema';\r\nimport { UserDetailsForm } from 'apps/user-manager/components/user-details-form/UserDetailsForm';\r\n\r\nexport interface EditStudentDetailsProps {\r\n user?: MockStudent;\r\n saveUser: (data: EditUserRequest) => void;\r\n onClickCancel: () => void;\r\n yearLevels: MockYearLevel[];\r\n initialErrors?: FormikErrors<EditUserRequest>;\r\n hasNext?: boolean;\r\n}\r\n\r\nexport function EditStudentDetails(props: EditStudentDetailsProps): React.ReactElement {\r\n const { user, saveUser, onClickCancel, yearLevels, hasNext = false, initialErrors = {} } = props;\r\n\r\n const initialValues: EditUserRequest = {\r\n id: user?.id,\r\n name: user?.name,\r\n email: user?.email,\r\n surname: user?.surname,\r\n yearLevel: {\r\n id: user?.yearLevel?.id,\r\n name: user?.yearLevel?.name\r\n }\r\n };\r\n\r\n const initialTouched: FormikTouched<EditUserRequest> = {};\r\n Object.keys(initialErrors).forEach((err: keyof EditUserRequest) => {\r\n initialTouched[err] = true;\r\n });\r\n\r\n const StudentValidationSchema = getStudentValidationSchema(yearLevels);\r\n\r\n return (\r\n <FormWrapper<EditUserRequest>\r\n initialValues={initialValues}\r\n initialErrors={initialErrors}\r\n initialTouched={initialTouched}\r\n validationSchema={StudentValidationSchema}\r\n onSubmit={saveUser}\r\n >\r\n <UserDetailsForm\r\n onClickCancel={onClickCancel}\r\n yearLevels={yearLevels}\r\n userType={MockUserType.Student}\r\n hasNext={hasNext}\r\n />\r\n </FormWrapper>\r\n );\r\n}","import React from 'react';\r\nimport { FormikErrors, FormikTouched } from 'formik';\r\n\r\nimport { FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\r\nimport { EditUserRequest, MockUserRole, MockTeacher } from 'apps/user-manager/interfaces';\r\nimport { getTeacherValidationSchema } from 'apps/user-manager/validation/user-validation/UserValidationSchema';\r\nimport { UserDetailsForm } from 'apps/user-manager/components/user-details-form/UserDetailsForm';\r\nimport { MockUserType } from 'apps/user-manager/enums';\r\n\r\nexport interface EditTeacherDetailsProps {\r\n user?: MockTeacher;\r\n saveUser: (data: EditUserRequest) => void;\r\n onClickCancel: () => void;\r\n userRoles: MockUserRole[];\r\n initialErrors?: FormikErrors<EditUserRequest>;\r\n hasNext?: boolean;\r\n}\r\n\r\nexport function EditTeacherDetails(props: EditTeacherDetailsProps): React.ReactElement {\r\n const { user, saveUser, onClickCancel, userRoles, hasNext = false, initialErrors = {} } = props;\r\n\r\n const initialValues: EditUserRequest = {\r\n id: user?.id,\r\n name: user?.name,\r\n email: user?.email,\r\n surname: user?.surname,\r\n userRole: {\r\n id: user?.userRole?.id,\r\n name: user?.userRole?.name\r\n }\r\n };\r\n\r\n const initialTouched: FormikTouched<EditUserRequest> = {};\r\n Object.keys(initialErrors).forEach((err: keyof EditUserRequest) => {\r\n initialTouched[err] = true;\r\n });\r\n\r\n const TeacherValidationSchema = getTeacherValidationSchema(userRoles);\r\n\r\n return (\r\n <FormWrapper<EditUserRequest>\r\n initialValues={initialValues}\r\n initialErrors={initialErrors}\r\n initialTouched={initialTouched}\r\n validationSchema={TeacherValidationSchema}\r\n onSubmit={saveUser}\r\n >\r\n <UserDetailsForm\r\n onClickCancel={onClickCancel}\r\n userRoles={userRoles}\r\n userType={MockUserType.Teacher}\r\n hasNext={hasNext}\r\n />\r\n </FormWrapper>\r\n );\r\n}","export * from './user-details-form/UserDetailsForm';\r\nexport * from './year-level-select/YearLevelSelect';\r\nexport * from './edit-student-details/EditStudentDetails';\r\nexport * from './edit-teacher-details/EditTeacherDetails';\r\nexport * from './bulk-upload-file-select/BulkUploadFileSelect';","import * as React from 'react';\r\nimport { Form } from 'formik';\r\n\r\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\r\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\r\nimport { FormButtons } from 'libs/shared/components/forms/form-buttons/FormButtons';\r\nimport { Text } from 'libs/shared/components/text/Text';\r\nimport { FormHelper } from 'libs/shared/utils/FormHelper';\r\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\r\nimport { EditUserRequest, MockYearLevel, MockUserRole } from 'apps/user-manager/interfaces';\r\nimport { YearLevelSelect } from 'apps/user-manager/components/year-level-select/YearLevelSelect';\r\nimport { MockUserType } from 'apps/user-manager/enums';\r\n\r\n/**\r\n * This file uses 3 *.lang.json files.\r\n * - One for generic values\r\n * - One for student specific values\r\n * - One for teacher specific values\r\n */\r\nconst namespace = 'userManager.userDetailsForm';\r\nconst getPhrase = LanguageService.encloseNamespace(namespace);\r\n\r\ninterface UserDetailsFormProps {\r\n onClickCancel: () => void;\r\n yearLevels?: MockYearLevel[];\r\n userRoles?: MockUserRole[];\r\n userType: MockUserType;\r\n hasNext?: boolean;\r\n}\r\n\r\nexport function UserDetailsForm(props: UserDetailsFormProps): React.ReactElement {\r\n const { onClickCancel, yearLevels, userRoles, userType } = props;\r\n\r\n const formikProps = useFormikContextWrapper<EditUserRequest>();\r\n\r\n const getTreeSelectClassName = (field: keyof EditUserRequest) => FormHelper.getCustomFormControlClassName(\r\n formikProps.errors,\r\n formikProps.touched,\r\n field,\r\n 'revert-form-control h-auto'\r\n );\r\n\r\n const getTypePhrase = LanguageService.encloseNamespace(\r\n userType === MockUserType.Teacher ? 'userManager.teacherDetailsForm' : 'userManager.studentDetailsForm'\r\n );\r\n\r\n return (\r\n <Form>\r\n <FormField\r\n label={getPhrase('firstName')}\r\n type='text'\r\n name='name'\r\n id='name'\r\n placeholder={getTypePhrase('firstNamePlaceholder')}\r\n autoFocus\r\n value={formikProps.values.name}\r\n />\r\n <FormField\r\n label={getPhrase('lastName')}\r\n type='text'\r\n name='surname'\r\n id='surname'\r\n placeholder={getTypePhrase('lastNamePlaceholder')}\r\n value={formikProps.values.surname}\r\n />\r\n {yearLevels &&\r\n <FormField\r\n name='yearLevel'\r\n label={getPhrase('yearLevel')}\r\n >\r\n {() => (\r\n <div className={getTreeSelectClassName('yearLevel')}>\r\n <YearLevelSelect\r\n yearLevels={yearLevels}\r\n selected={formikProps.values.yearLevel}\r\n onSelect={(yearLevel: MockYearLevel) => formikProps.setFieldValue('yearLevel', yearLevel)}\r\n />\r\n </div>\r\n )}\r\n </FormField>\r\n }\r\n {userRoles &&\r\n <FormField\r\n label={getPhrase('userRole')}\r\n name='userRole'\r\n as='select'\r\n onChange={(e: any) => {\r\n const roleObj = props.userRoles.find(r => r.id === e.target.value);\r\n formikProps.setFieldValue('userRole', roleObj);\r\n }}\r\n value={formikProps.values.userRole.id}\r\n >\r\n {userRoles.map(r => <option key={r.id} value={r.id}>{r.name}</option>)}\r\n </FormField>\r\n }\r\n <FormField\r\n label={getPhrase('emailAddress')}\r\n type='text'\r\n name='email'\r\n id='email'\r\n placeholder={getTypePhrase('emailAddressPlaceholder')}\r\n value={formikProps.values.email}\r\n />\r\n <div className='btn-container d-flex justify-content-end'>\r\n <button type='button' className={`btn btn-link mr-2`} onClick={onClickCancel}>\r\n <Text namespace={namespace} phrase='cancel' />\r\n </button>\r\n <FormButtons isNew={false} hasNext={props.hasNext} />\r\n </div>\r\n </Form>\r\n );\r\n}\r\n","import * as React from 'react';\r\n\r\nimport { MockYearLevel } from 'apps/user-manager/interfaces';\r\n\r\ninterface YearLevelProps {\r\n yearLevel: MockYearLevel;\r\n selected: boolean;\r\n onSelect: (yearLevel: MockYearLevel) => void;\r\n}\r\n\r\nfunction YearLevel(props: YearLevelProps): React.ReactElement {\r\n const { yearLevel, selected, onSelect } = props;\r\n\r\n const className = selected ? 'badge-info' : 'badge-light';\r\n\r\n return (\r\n <span\r\n className={`badge-pill d-inline-block mr-1 mb-1 cursor-pointer ${className}`}\r\n role='radio'\r\n aria-checked={selected}\r\n onClick={() => onSelect(yearLevel)}\r\n >\r\n {yearLevel.name}\r\n </span>\r\n );\r\n}\r\n\r\ninterface YearLevelSelectProps {\r\n yearLevels: MockYearLevel[];\r\n onSelect: (yearLevel: MockYearLevel) => void;\r\n selected?: MockYearLevel;\r\n}\r\n\r\nexport function YearLevelSelect(props: YearLevelSelectProps): React.ReactElement {\r\n const { yearLevels, selected, onSelect } = props;\r\n\r\n return (\r\n <div role='radiogroup'>\r\n {yearLevels.map(y =>\r\n <YearLevel\r\n key={y.id}\r\n yearLevel={y}\r\n selected={y.id.toString() === selected?.id?.toString()}\r\n onSelect={onSelect}\r\n />\r\n )}\r\n </div>\r\n );\r\n}","export * from './mocks/MockUserType';","export enum MockUserType {\r\n Student = 'student',\r\n Teacher = 'teacher'\r\n}","import { object, string } from 'yup';\r\n\r\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\r\nimport { MockYearLevel, MockUserRole } from 'apps/user-manager/interfaces';\r\n\r\nconst getPhrase = LanguageService.encloseNamespace('userManager.userValidation');\r\n\r\nconst UserValidationSchema = object().shape({\r\n name: string()\r\n .max(255, () => getPhrase('nameExceeds'))\r\n .required(() => getPhrase('nameRequired'))\r\n .default(''),\r\n surname: string()\r\n .max(255, () => getPhrase('surnameExceeds'))\r\n .required(() => getPhrase('surnameRequired'))\r\n .default(''),\r\n email: string()\r\n .max(255, () => getPhrase('emailExceeds'))\r\n .required(() => getPhrase('emailRequired'))\r\n .email(() => getPhrase('emailValid'))\r\n .default('')\r\n});\r\n\r\nexport const getTeacherValidationSchema = (userRoles: MockUserRole[]) => UserValidationSchema.shape({\r\n userRole: object().shape({\r\n name: string()\r\n .required(() => getPhrase('userRoleRequired'))\r\n .oneOf(userRoles.map(r => r.name), () => getPhrase('userRoleInvalid'))\r\n .default('')\r\n })\r\n});\r\n\r\nexport const getStudentValidationSchema = (yearLevels: MockYearLevel[]) => UserValidationSchema.shape({\r\n yearLevel: object().shape({\r\n name: string()\r\n .required(() => getPhrase('yearLevelRequired'))\r\n .oneOf(yearLevels.map(y => y.name), () => getPhrase('yearLevelInvalid'))\r\n .default('')\r\n })\r\n});","import React from 'react';\r\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\r\n\r\ninterface ToggleSwitchProps {\r\n onClick: (...args: any) => any;\r\n on: boolean;\r\n disabled?: boolean;\r\n}\r\n\r\nexport function ToggleSwitch(props: ToggleSwitchProps): JSX.Element {\r\n function onClick(...args: any): void {\r\n if (props.disabled)\r\n return;\r\n\r\n props.onClick(...args);\r\n }\r\n\r\n const bootstrapClasses = 'd-inline-block float-right align-top custom-toggle toggle-option';\r\n const onClass = (props.on && !props.disabled) ? 'on' : '';\r\n const disabledClass = props.disabled ? 'disabled' : '';\r\n\r\n return (\r\n <DivButton\r\n onClick={onClick}\r\n className={`${bootstrapClasses} ${onClass} ${disabledClass}`}\r\n >\r\n <span className='handle' />\r\n </DivButton>\r\n );\r\n}","import React from 'react';\r\n\r\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\r\ninterface CheckboxItemsState {\r\n [id: string]: boolean;\r\n}\r\n\r\ninterface BulkCheckboxManagerOptions {\r\n preselectedIds?: string[]; // An array of ids of objects whose checkboxes are checked by default\r\n idField?: string; // For objects like `PresentationAudiences` that don't use `id` as their identifier field\r\n}\r\n\r\n/**\r\n * @param collection - The collection you are keeping track of with checkboxes\r\n * @param options - See interface above\r\n */\r\nexport const useBulkCheckboxManager = (collection: HashObject[], options: BulkCheckboxManagerOptions = {}) => {\r\n const [ bulkChecked, setBulkChecked ] = React.useState(false);\r\n const [ items, setItems ] = React.useState<CheckboxItemsState>({});\r\n\r\n const { idField = 'id' } = options;\r\n\r\n React.useEffect(() => {\r\n if (!collection?.length)\r\n return;\r\n\r\n const newItemState = collection.reduce<CheckboxItemsState>((stateObj: CheckboxItemsState, item: HashObject) => {\r\n let checkboxState = false;\r\n\r\n if (options?.preselectedIds?.includes(item[idField]))\r\n checkboxState = true;\r\n\r\n const id = item[idField];\r\n stateObj[id] = checkboxState;\r\n\r\n return stateObj;\r\n }, {});\r\n\r\n setItems(newItemState);\r\n }, [collection]);\r\n\r\n // When toggled on, all checkbox items will be enabled. Vice versa if toggled off\r\n function onToggleBulk(): void {\r\n const nextState = !bulkChecked;\r\n\r\n setBulkChecked(nextState);\r\n\r\n const newItemsState = collection.reduce<CheckboxItemsState>((stateObj: CheckboxItemsState, item: HashObject) => {\r\n stateObj[item[idField]] = nextState;\r\n return stateObj;\r\n }, {});\r\n\r\n setItems(newItemsState);\r\n }\r\n\r\n // Toggles a single item\r\n function onToggleItem(id: string): void {\r\n const nextItemState = !items[id];\r\n\r\n const nextState = {\r\n ...items,\r\n [id]: nextItemState\r\n };\r\n setItems(nextState);\r\n\r\n /**\r\n * Keep the bulk checkbox in sync with all of the other checkboxes\r\n */\r\n const totalItemsSelected = Object.keys(nextState).filter(i => nextState[i]).length;\r\n if (totalItemsSelected === collection.length) {\r\n setBulkChecked(true);\r\n return;\r\n }\r\n\r\n if (!nextItemState && bulkChecked)\r\n setBulkChecked(false);\r\n }\r\n\r\n // Returns the state of the item passed in\r\n function isChecked(item: string | HashObject<string>): boolean {\r\n if (bulkChecked)\r\n return true;\r\n\r\n if (typeof item !== 'string')\r\n item = item[idField];\r\n\r\n return items[item];\r\n }\r\n\r\n function getSelected(): string[] {\r\n if (bulkChecked)\r\n return Object.keys(items);\r\n\r\n return Object.keys(items).filter(item => items[item]);\r\n }\r\n\r\n return { onToggleBulk, onToggleItem, getSelected, isChecked, bulkChecked };\r\n};"],"sourceRoot":""}
@@ -1,145 +0,0 @@
1
- (window["webpackJsonp_clickview_lite"] = window["webpackJsonp_clickview_lite"] || []).push([[50],{
2
-
3
- /***/ "../../libs/shared/src/hooks/UseAlerts.ts":
4
- /*!************************************************************************************!*\
5
- !*** C:/ClickView Projects/@clickview/packages/libs/shared/src/hooks/UseAlerts.ts ***!
6
- \************************************************************************************/
7
- /*! exports provided: useAlerts */
8
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
9
-
10
- "use strict";
11
- __webpack_require__.r(__webpack_exports__);
12
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "useAlerts", function() { return useAlerts; });
13
- /* harmony import */ var _common_src_react_hooks_UseService__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../common/src/react/hooks/UseService */ "../../libs/common/src/react/hooks/UseService.ts");
14
- /* harmony import */ var _common_src_backbone_services_BaseAlertService__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../common/src/backbone/services/BaseAlertService */ "../../libs/common/src/backbone/services/BaseAlertService.ts");
15
- /* harmony import */ var _common_src_backbone_constants_CommonServices__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../common/src/backbone/constants/CommonServices */ "../../libs/common/src/backbone/constants/CommonServices.ts");
16
-
17
-
18
-
19
- const useAlerts = () => {
20
- const alertService = Object(_common_src_react_hooks_UseService__WEBPACK_IMPORTED_MODULE_0__["useService"])(_common_src_backbone_constants_CommonServices__WEBPACK_IMPORTED_MODULE_2__["CommonServices"].ALERT);
21
- return {
22
- success(alertContent) {
23
- alertService.success(alertContent)();
24
- },
25
-
26
- error(alertContent) {
27
- alertService.error(alertContent)();
28
- },
29
-
30
- warning(alertContent) {
31
- alertService.createAlert({
32
- type: _common_src_backbone_services_BaseAlertService__WEBPACK_IMPORTED_MODULE_1__["AlertType"].Warning,
33
- heading: _common_src_backbone_services_BaseAlertService__WEBPACK_IMPORTED_MODULE_1__["DefaultAlertHeading"].Warning,
34
- message: alertContent
35
- });
36
- }
37
-
38
- };
39
- };
40
-
41
- /***/ }),
42
-
43
- /***/ "./src/apps/classrooms/views/remove-students-from-classroom/RemoveStudentsFromClassroomView.tsx":
44
- /*!******************************************************************************************************!*\
45
- !*** ./src/apps/classrooms/views/remove-students-from-classroom/RemoveStudentsFromClassroomView.tsx ***!
46
- \******************************************************************************************************/
47
- /*! exports provided: RemoveStudentsFromClassroomView */
48
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
49
-
50
- "use strict";
51
- __webpack_require__.r(__webpack_exports__);
52
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RemoveStudentsFromClassroomView", function() { return RemoveStudentsFromClassroomView; });
53
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
54
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
55
- /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-redux */ "react-redux");
56
- /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_1__);
57
- /* harmony import */ var _libs_common_src_backbone_services_LanguageService__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../../../../libs/common/src/backbone/services/LanguageService */ "../../libs/common/src/backbone/services/LanguageService.tsx");
58
- /* harmony import */ var _libs_common_src_react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../../../../../libs/common/src/react */ "../../libs/common/src/react/index.ts");
59
- /* harmony import */ var _libs_shared_src_components_popup_Popup__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../../../../../libs/shared/src/components/popup/Popup */ "../../libs/shared/src/components/popup/Popup.tsx");
60
- /* harmony import */ var _libs_shared_src_components_popup_PopupButtons__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../../../../../libs/shared/src/components/popup/PopupButtons */ "../../libs/shared/src/components/popup/PopupButtons.tsx");
61
- /* harmony import */ var _libs_shared_src_components_text_Text__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../../../../../libs/shared/src/components/text/Text */ "../../libs/shared/src/components/text/Text.tsx");
62
- /* harmony import */ var _libs_shared_src_hooks_UseAlerts__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../../../../../../libs/shared/src/hooks/UseAlerts */ "../../libs/shared/src/hooks/UseAlerts.ts");
63
- /* harmony import */ var apps_classrooms_flight_requests_ClassroomRequests__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! apps/classrooms/flight-requests/ClassroomRequests */ "./src/apps/classrooms/flight-requests/ClassroomRequests.ts");
64
- /* harmony import */ var _libs_analytics_src_AnalyticsHelper__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../../../../../../libs/analytics/src/AnalyticsHelper */ "../../libs/analytics/src/AnalyticsHelper.ts");
65
- function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
66
-
67
- function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
68
-
69
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
70
-
71
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
72
-
73
- function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
74
-
75
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
76
-
77
-
78
-
79
-
80
-
81
-
82
-
83
-
84
-
85
-
86
-
87
- var namespace = 'classrooms.removeStudentsFromClassroom';
88
- var getPhrase = _libs_common_src_backbone_services_LanguageService__WEBPACK_IMPORTED_MODULE_2__["LanguageService"].encloseNamespace(namespace);
89
- function RemoveStudentsFromClassroomView(props) {
90
- var _a;
91
-
92
- var _React$useState = react__WEBPACK_IMPORTED_MODULE_0___default.a.useState(false),
93
- _React$useState2 = _slicedToArray(_React$useState, 2),
94
- showButtonSpinner = _React$useState2[0],
95
- setShowButtonSpinner = _React$useState2[1];
96
-
97
- var classroom = _libs_common_src_react__WEBPACK_IMPORTED_MODULE_3__["Flight"].useBasicFetch(apps_classrooms_flight_requests_ClassroomRequests__WEBPACK_IMPORTED_MODULE_8__["ClassroomRequests"].getClassroom(props.classroomId));
98
- var dispatch = Object(react_redux__WEBPACK_IMPORTED_MODULE_1__["useDispatch"])();
99
- var alerts = Object(_libs_shared_src_hooks_UseAlerts__WEBPACK_IMPORTED_MODULE_7__["useAlerts"])();
100
- var langOptions = {
101
- smartCount: props.studentIds.length,
102
- classroomName: (_a = classroom.data) === null || _a === void 0 ? void 0 : _a.name
103
- };
104
-
105
- function removeStudents() {
106
- setShowButtonSpinner(true);
107
- _libs_common_src_react__WEBPACK_IMPORTED_MODULE_3__["Flight"].fetch(dispatch, apps_classrooms_flight_requests_ClassroomRequests__WEBPACK_IMPORTED_MODULE_8__["ClassroomRequests"].removeStudents(props.studentIds, props.classroomId, function () {
108
- setShowButtonSpinner(false);
109
- _libs_analytics_src_AnalyticsHelper__WEBPACK_IMPORTED_MODULE_9__["AnalyticsHelper"].logUserAction({
110
- id: props.classroomId,
111
- studentCount: props.studentIds.length
112
- }, props.analyticsOptions);
113
- alerts.success(getPhrase('success', langOptions));
114
- props.closePopup();
115
- }));
116
- }
117
-
118
- var title = classroom.data ? getPhrase('title', langOptions) : '';
119
- return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_libs_shared_src_components_popup_Popup__WEBPACK_IMPORTED_MODULE_4__["Popup"], {
120
- title: title,
121
- closePopup: props.closePopup,
122
- showLoadingSpinner: !classroom.data
123
- }, classroom.data && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_libs_shared_src_components_text_Text__WEBPACK_IMPORTED_MODULE_6__["Text"], {
124
- namespace: namespace,
125
- phrase: 'confirm',
126
- options: langOptions
127
- })), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_libs_shared_src_components_popup_PopupButtons__WEBPACK_IMPORTED_MODULE_5__["PopupButtons"], {
128
- buttons: [{
129
- variant: 'link',
130
- onClick: props.closePopup,
131
- buttonText: getPhrase('cancel')
132
- }, {
133
- variant: 'danger',
134
- onClick: removeStudents,
135
- buttonText: getPhrase('remove'),
136
- isSpinnerButton: true,
137
- showSpinner: showButtonSpinner
138
- }]
139
- })));
140
- }
141
-
142
- /***/ })
143
-
144
- }]);
145
- //# sourceMappingURL=50.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["file://C:/ClickView Projects/@clickview/packages/libs/shared/src/hooks/UseAlerts.ts","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/classrooms/views/remove-students-from-classroom/RemoveStudentsFromClassroomView.tsx"],"names":[],"mappings":"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","file":"scripts/50.chunk.js","sourcesContent":["import { useService } from 'libs/common/react/hooks/UseService';\r\nimport { BaseAlertService, BaseAlert, BaseAlertOptions, AlertType, DefaultAlertHeading } from 'libs/common/backbone/services/BaseAlertService';\r\nimport { CommonServices } from 'libs/common/backbone/constants/CommonServices';\r\n\r\nexport const useAlerts = () => {\r\n const alertService = useService<BaseAlertService>(CommonServices.ALERT);\r\n\r\n return {\r\n success(alertContent: string | BaseAlert | BaseAlertOptions): void {\r\n alertService.success(alertContent)();\r\n },\r\n error(alertContent: string | BaseAlert | BaseAlertOptions): void {\r\n alertService.error(alertContent)();\r\n },\r\n warning(alertContent: string): void {\r\n alertService.createAlert({\r\n type: AlertType.Warning,\r\n heading: DefaultAlertHeading.Warning,\r\n message: alertContent\r\n });\r\n }\r\n };\r\n};","import React from 'react';\r\nimport { useDispatch } from 'react-redux';\r\n\r\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\r\nimport { Flight } from 'libs/common/flight';\r\n\r\nimport { Popup } from 'libs/shared/components/popup/Popup';\r\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\r\nimport { Text } from 'libs/shared/components/text/Text';\r\nimport { PopupViewProps, PropsWithPopupViewProps, PropsWithAnalyticsOptions } from 'libs/shared/interfaces';\r\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\r\n\r\nimport { MockClassroom } from 'apps/user-manager/interfaces/mocks/MockClassroom';\r\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\r\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\r\n\r\nconst namespace = 'classrooms.removeStudentsFromClassroom';\r\nconst getPhrase = LanguageService.encloseNamespace(namespace);\r\n\r\ntype RemoveStudentsFromClassroomViewProps = PropsWithPopupViewProps<PropsWithAnalyticsOptions<{\r\n classroomId: string;\r\n studentIds: string[];\r\n}>>;\r\n\r\nexport function RemoveStudentsFromClassroomView(props: RemoveStudentsFromClassroomViewProps): JSX.Element {\r\n const [ showButtonSpinner, setShowButtonSpinner ] = React.useState(false);\r\n\r\n const classroom = Flight.useBasicFetch<MockClassroom>(ClassroomRequests.getClassroom(props.classroomId));\r\n\r\n const dispatch = useDispatch();\r\n const alerts = useAlerts();\r\n\r\n const langOptions = { smartCount: props.studentIds.length, classroomName: classroom.data?.name };\r\n\r\n function removeStudents(): void {\r\n setShowButtonSpinner(true);\r\n\r\n Flight.fetch(dispatch, ClassroomRequests.removeStudents(props.studentIds, props.classroomId, () => {\r\n setShowButtonSpinner(false);\r\n\r\n AnalyticsHelper.logUserAction({\r\n id: props.classroomId,\r\n studentCount: props.studentIds.length\r\n }, props.analyticsOptions);\r\n\r\n alerts.success(getPhrase('success', langOptions));\r\n\r\n props.closePopup();\r\n }));\r\n }\r\n\r\n const title = classroom.data ? getPhrase('title', langOptions) : '';\r\n\r\n return (\r\n <Popup title={title} closePopup={props.closePopup} showLoadingSpinner={!classroom.data}>\r\n {classroom.data &&\r\n <>\r\n <p>\r\n <Text namespace={namespace} phrase='confirm' options={langOptions} />\r\n </p>\r\n\r\n <PopupButtons buttons={\r\n [\r\n {\r\n variant: 'link',\r\n onClick: props.closePopup,\r\n buttonText: getPhrase('cancel')\r\n },\r\n {\r\n variant: 'danger',\r\n onClick: removeStudents,\r\n buttonText: getPhrase('remove'),\r\n isSpinnerButton: true,\r\n showSpinner: showButtonSpinner\r\n }\r\n ]\r\n }/>\r\n </>\r\n }\r\n </Popup>\r\n );\r\n}"],"sourceRoot":""}
@@ -1 +0,0 @@
1
- (window.webpackJsonp_clickview_lite=window.webpackJsonp_clickview_lite||[]).push([[51],{636:function(e,t,n){"use strict";n.r(t),n.d(t,"DialogView",(function(){return s}));var o=n(0),c=n(26),i=n(125),l=n(118);function s(e){const t=e.buttons.map(t=>({buttonText:t.text,className:t.className,onClick:()=>{t.success?c.a.isFunction(e.onDone)&&e.onDone():c.a.isFunction(e.onFail)&&e.onFail(),t.close&&e.closePopup()},type:t.type}));return o.createElement(l.a,{title:e.title,closePopup:e.closePopup},o.createElement("p",null,e.text),o.createElement(i.a,{buttons:t}))}}}]);