@dereekb/dbx-form 12.6.21 → 13.0.0

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 (378) hide show
  1. package/LICENSE +1 -1
  2. package/fesm2022/dereekb-dbx-form-calendar.mjs +86 -86
  3. package/fesm2022/dereekb-dbx-form-calendar.mjs.map +1 -1
  4. package/fesm2022/dereekb-dbx-form-mapbox.mjs +28 -28
  5. package/fesm2022/dereekb-dbx-form-mapbox.mjs.map +1 -1
  6. package/fesm2022/dereekb-dbx-form.mjs +429 -600
  7. package/fesm2022/dereekb-dbx-form.mjs.map +1 -1
  8. package/lib/formly/field/value/phone/_phone.scss +1 -0
  9. package/lib/style/_theming.scss +196 -1
  10. package/package.json +26 -32
  11. package/types/dereekb-dbx-form-calendar.d.ts +679 -0
  12. package/types/dereekb-dbx-form-mapbox.d.ts +216 -0
  13. package/types/dereekb-dbx-form.d.ts +3050 -0
  14. package/calendar/index.d.ts +0 -1
  15. package/calendar/lib/calendar.module.d.ts +0 -19
  16. package/calendar/lib/calendar.schedule.selection.cell.component.d.ts +0 -16
  17. package/calendar/lib/calendar.schedule.selection.component.d.ts +0 -74
  18. package/calendar/lib/calendar.schedule.selection.d.ts +0 -29
  19. package/calendar/lib/calendar.schedule.selection.days.component.d.ts +0 -15
  20. package/calendar/lib/calendar.schedule.selection.days.form.component.d.ts +0 -10
  21. package/calendar/lib/calendar.schedule.selection.dialog.button.component.d.ts +0 -15
  22. package/calendar/lib/calendar.schedule.selection.dialog.component.d.ts +0 -24
  23. package/calendar/lib/calendar.schedule.selection.form.d.ts +0 -4
  24. package/calendar/lib/calendar.schedule.selection.popover.button.component.d.ts +0 -17
  25. package/calendar/lib/calendar.schedule.selection.popover.component.d.ts +0 -14
  26. package/calendar/lib/calendar.schedule.selection.popover.content.component.d.ts +0 -5
  27. package/calendar/lib/calendar.schedule.selection.range.component.d.ts +0 -52
  28. package/calendar/lib/calendar.schedule.selection.store.d.ts +0 -282
  29. package/calendar/lib/calendar.schedule.selection.store.provide.d.ts +0 -23
  30. package/calendar/lib/calendar.schedule.selection.toggle.button.component.d.ts +0 -18
  31. package/calendar/lib/field/index.d.ts +0 -1
  32. package/calendar/lib/field/schedule/calendar.schedule.field.component.d.ts +0 -102
  33. package/calendar/lib/field/schedule/calendar.schedule.field.d.ts +0 -6
  34. package/calendar/lib/field/schedule/calendar.schedule.module.d.ts +0 -8
  35. package/calendar/lib/field/schedule/index.d.ts +0 -3
  36. package/calendar/lib/index.d.ts +0 -17
  37. package/esm2022/calendar/dereekb-dbx-form-calendar.mjs +0 -5
  38. package/esm2022/calendar/index.mjs +0 -2
  39. package/esm2022/calendar/lib/calendar.module.mjs +0 -84
  40. package/esm2022/calendar/lib/calendar.schedule.selection.cell.component.mjs +0 -42
  41. package/esm2022/calendar/lib/calendar.schedule.selection.component.mjs +0 -156
  42. package/esm2022/calendar/lib/calendar.schedule.selection.days.component.mjs +0 -47
  43. package/esm2022/calendar/lib/calendar.schedule.selection.days.form.component.mjs +0 -22
  44. package/esm2022/calendar/lib/calendar.schedule.selection.dialog.button.component.mjs +0 -32
  45. package/esm2022/calendar/lib/calendar.schedule.selection.dialog.component.mjs +0 -59
  46. package/esm2022/calendar/lib/calendar.schedule.selection.form.mjs +0 -15
  47. package/esm2022/calendar/lib/calendar.schedule.selection.mjs +0 -31
  48. package/esm2022/calendar/lib/calendar.schedule.selection.popover.button.component.mjs +0 -50
  49. package/esm2022/calendar/lib/calendar.schedule.selection.popover.component.mjs +0 -41
  50. package/esm2022/calendar/lib/calendar.schedule.selection.popover.content.component.mjs +0 -34
  51. package/esm2022/calendar/lib/calendar.schedule.selection.range.component.mjs +0 -165
  52. package/esm2022/calendar/lib/calendar.schedule.selection.store.mjs +0 -785
  53. package/esm2022/calendar/lib/calendar.schedule.selection.store.provide.mjs +0 -48
  54. package/esm2022/calendar/lib/calendar.schedule.selection.toggle.button.component.mjs +0 -67
  55. package/esm2022/calendar/lib/field/index.mjs +0 -3
  56. package/esm2022/calendar/lib/field/schedule/calendar.schedule.field.component.mjs +0 -154
  57. package/esm2022/calendar/lib/field/schedule/calendar.schedule.field.mjs +0 -28
  58. package/esm2022/calendar/lib/field/schedule/calendar.schedule.module.mjs +0 -26
  59. package/esm2022/calendar/lib/field/schedule/index.mjs +0 -4
  60. package/esm2022/calendar/lib/index.mjs +0 -18
  61. package/esm2022/dereekb-dbx-form.mjs +0 -5
  62. package/esm2022/index.mjs +0 -2
  63. package/esm2022/lib/form/action/form.action.dialog.component.mjs +0 -79
  64. package/esm2022/lib/form/action/form.action.directive.mjs +0 -167
  65. package/esm2022/lib/form/action/form.action.module.mjs +0 -19
  66. package/esm2022/lib/form/action/index.mjs +0 -5
  67. package/esm2022/lib/form/action/transition/form.action.transition.module.mjs +0 -19
  68. package/esm2022/lib/form/action/transition/form.action.transition.safety.directive.mjs +0 -28
  69. package/esm2022/lib/form/action/transition/index.mjs +0 -3
  70. package/esm2022/lib/form/form.angular.util.mjs +0 -13
  71. package/esm2022/lib/form/form.mjs +0 -42
  72. package/esm2022/lib/form/form.module.mjs +0 -17
  73. package/esm2022/lib/form/index.mjs +0 -6
  74. package/esm2022/lib/form/io/form.change.directive.mjs +0 -36
  75. package/esm2022/lib/form/io/form.input.directive.mjs +0 -95
  76. package/esm2022/lib/form/io/form.io.module.mjs +0 -26
  77. package/esm2022/lib/form/io/form.loading.directive.mjs +0 -36
  78. package/esm2022/lib/form/io/index.mjs +0 -5
  79. package/esm2022/lib/form.module.mjs +0 -18
  80. package/esm2022/lib/form.providers.mjs +0 -32
  81. package/esm2022/lib/formly/config/index.mjs +0 -2
  82. package/esm2022/lib/formly/config/validation.mjs +0 -23
  83. package/esm2022/lib/formly/field/checklist/checklist.field.mjs +0 -102
  84. package/esm2022/lib/formly/field/checklist/checklist.item.field.component.mjs +0 -86
  85. package/esm2022/lib/formly/field/checklist/checklist.item.field.content.default.component.mjs +0 -50
  86. package/esm2022/lib/formly/field/checklist/checklist.item.field.mjs +0 -14
  87. package/esm2022/lib/formly/field/checklist/checklist.item.field.module.mjs +0 -30
  88. package/esm2022/lib/formly/field/checklist/checklist.item.mjs +0 -2
  89. package/esm2022/lib/formly/field/checklist/index.mjs +0 -7
  90. package/esm2022/lib/formly/field/component/component.field.component.mjs +0 -25
  91. package/esm2022/lib/formly/field/component/component.field.mjs +0 -7
  92. package/esm2022/lib/formly/field/component/component.field.module.mjs +0 -26
  93. package/esm2022/lib/formly/field/component/index.mjs +0 -4
  94. package/esm2022/lib/formly/field/field.mjs +0 -97
  95. package/esm2022/lib/formly/field/form.field.module.mjs +0 -22
  96. package/esm2022/lib/formly/field/index.mjs +0 -9
  97. package/esm2022/lib/formly/field/selection/index.mjs +0 -8
  98. package/esm2022/lib/formly/field/selection/list/index.mjs +0 -4
  99. package/esm2022/lib/formly/field/selection/list/list.field.component.mjs +0 -90
  100. package/esm2022/lib/formly/field/selection/list/list.field.mjs +0 -15
  101. package/esm2022/lib/formly/field/selection/list/list.field.module.mjs +0 -26
  102. package/esm2022/lib/formly/field/selection/pickable/index.mjs +0 -8
  103. package/esm2022/lib/formly/field/selection/pickable/pickable.chip.field.component.mjs +0 -37
  104. package/esm2022/lib/formly/field/selection/pickable/pickable.field.directive.mjs +0 -272
  105. package/esm2022/lib/formly/field/selection/pickable/pickable.field.mjs +0 -26
  106. package/esm2022/lib/formly/field/selection/pickable/pickable.field.module.mjs +0 -33
  107. package/esm2022/lib/formly/field/selection/pickable/pickable.list.field.component.mjs +0 -130
  108. package/esm2022/lib/formly/field/selection/pickable/pickable.mjs +0 -2
  109. package/esm2022/lib/formly/field/selection/pickable/pickable.util.mjs +0 -35
  110. package/esm2022/lib/formly/field/selection/searchable/index.mjs +0 -9
  111. package/esm2022/lib/formly/field/selection/searchable/searchable.chip.field.component.mjs +0 -70
  112. package/esm2022/lib/formly/field/selection/searchable/searchable.field.autocomplete.item.component.mjs +0 -90
  113. package/esm2022/lib/formly/field/selection/searchable/searchable.field.directive.mjs +0 -288
  114. package/esm2022/lib/formly/field/selection/searchable/searchable.field.mjs +0 -69
  115. package/esm2022/lib/formly/field/selection/searchable/searchable.field.module.mjs +0 -34
  116. package/esm2022/lib/formly/field/selection/searchable/searchable.mjs +0 -2
  117. package/esm2022/lib/formly/field/selection/searchable/searchable.text.field.component.mjs +0 -72
  118. package/esm2022/lib/formly/field/selection/searchable/text.chip.field.mjs +0 -15
  119. package/esm2022/lib/formly/field/selection/selection.field.mjs +0 -39
  120. package/esm2022/lib/formly/field/selection/selection.mjs +0 -2
  121. package/esm2022/lib/formly/field/selection/selection.module.mjs +0 -28
  122. package/esm2022/lib/formly/field/selection/sourceselect/index.mjs +0 -5
  123. package/esm2022/lib/formly/field/selection/sourceselect/sourceselect.field.component.mjs +0 -325
  124. package/esm2022/lib/formly/field/selection/sourceselect/sourceselect.field.mjs +0 -14
  125. package/esm2022/lib/formly/field/selection/sourceselect/sourceselect.field.module.mjs +0 -26
  126. package/esm2022/lib/formly/field/selection/sourceselect/sourceselect.mjs +0 -2
  127. package/esm2022/lib/formly/field/texteditor/index.mjs +0 -4
  128. package/esm2022/lib/formly/field/texteditor/texteditor.field.component.mjs +0 -97
  129. package/esm2022/lib/formly/field/texteditor/texteditor.field.mjs +0 -21
  130. package/esm2022/lib/formly/field/texteditor/texteditor.field.module.mjs +0 -26
  131. package/esm2022/lib/formly/field/value/array/array.field.component.mjs +0 -231
  132. package/esm2022/lib/formly/field/value/array/array.field.mjs +0 -28
  133. package/esm2022/lib/formly/field/value/array/array.field.module.mjs +0 -26
  134. package/esm2022/lib/formly/field/value/array/index.mjs +0 -4
  135. package/esm2022/lib/formly/field/value/boolean/boolean.field.mjs +0 -51
  136. package/esm2022/lib/formly/field/value/boolean/boolean.field.module.mjs +0 -19
  137. package/esm2022/lib/formly/field/value/boolean/index.mjs +0 -3
  138. package/esm2022/lib/formly/field/value/date/date.field.module.mjs +0 -36
  139. package/esm2022/lib/formly/field/value/date/date.value.mjs +0 -133
  140. package/esm2022/lib/formly/field/value/date/datetime.field.component.mjs +0 -737
  141. package/esm2022/lib/formly/field/value/date/datetime.field.mjs +0 -151
  142. package/esm2022/lib/formly/field/value/date/datetime.field.service.mjs +0 -23
  143. package/esm2022/lib/formly/field/value/date/datetime.mjs +0 -26
  144. package/esm2022/lib/formly/field/value/date/datetime.preset.mjs +0 -31
  145. package/esm2022/lib/formly/field/value/date/fixeddaterange.field.component.mjs +0 -521
  146. package/esm2022/lib/formly/field/value/date/index.mjs +0 -10
  147. package/esm2022/lib/formly/field/value/hidden.field.mjs +0 -8
  148. package/esm2022/lib/formly/field/value/index.mjs +0 -9
  149. package/esm2022/lib/formly/field/value/number/index.mjs +0 -3
  150. package/esm2022/lib/formly/field/value/number/number.field.mjs +0 -75
  151. package/esm2022/lib/formly/field/value/number/number.field.module.mjs +0 -18
  152. package/esm2022/lib/formly/field/value/phone/index.mjs +0 -4
  153. package/esm2022/lib/formly/field/value/phone/phone.field.component.mjs +0 -104
  154. package/esm2022/lib/formly/field/value/phone/phone.field.mjs +0 -66
  155. package/esm2022/lib/formly/field/value/phone/phone.field.module.mjs +0 -26
  156. package/esm2022/lib/formly/field/value/text/index.mjs +0 -5
  157. package/esm2022/lib/formly/field/value/text/text.additional.field.mjs +0 -114
  158. package/esm2022/lib/formly/field/value/text/text.address.field.mjs +0 -73
  159. package/esm2022/lib/formly/field/value/text/text.field.mjs +0 -47
  160. package/esm2022/lib/formly/field/value/text/text.field.module.mjs +0 -20
  161. package/esm2022/lib/formly/field/value/value.module.mjs +0 -31
  162. package/esm2022/lib/formly/field/wrapper/autotouch.wrapper.component.mjs +0 -32
  163. package/esm2022/lib/formly/field/wrapper/expand.wrapper.component.mjs +0 -34
  164. package/esm2022/lib/formly/field/wrapper/expand.wrapper.delegate.mjs +0 -58
  165. package/esm2022/lib/formly/field/wrapper/flex.wrapper.component.mjs +0 -38
  166. package/esm2022/lib/formly/field/wrapper/index.mjs +0 -13
  167. package/esm2022/lib/formly/field/wrapper/info.wrapper.component.mjs +0 -48
  168. package/esm2022/lib/formly/field/wrapper/section.wrapper.component.mjs +0 -31
  169. package/esm2022/lib/formly/field/wrapper/style.wrapper.component.mjs +0 -53
  170. package/esm2022/lib/formly/field/wrapper/subsection.wrapper.component.mjs +0 -30
  171. package/esm2022/lib/formly/field/wrapper/toggle.wrapper.component.mjs +0 -55
  172. package/esm2022/lib/formly/field/wrapper/working.wrapper.component.mjs +0 -45
  173. package/esm2022/lib/formly/field/wrapper/wrapper.key.mjs +0 -10
  174. package/esm2022/lib/formly/field/wrapper/wrapper.mjs +0 -77
  175. package/esm2022/lib/formly/field/wrapper/wrapper.module.mjs +0 -101
  176. package/esm2022/lib/formly/form/form.form.mjs +0 -17
  177. package/esm2022/lib/formly/form/form.form.module.mjs +0 -20
  178. package/esm2022/lib/formly/form/index.mjs +0 -4
  179. package/esm2022/lib/formly/form/search.form.component.mjs +0 -35
  180. package/esm2022/lib/formly/formly.component.template.mjs +0 -29
  181. package/esm2022/lib/formly/formly.context.directive.mjs +0 -23
  182. package/esm2022/lib/formly/formly.context.mjs +0 -102
  183. package/esm2022/lib/formly/formly.directive.mjs +0 -84
  184. package/esm2022/lib/formly/formly.form.component.mjs +0 -194
  185. package/esm2022/lib/formly/formly.module.mjs +0 -40
  186. package/esm2022/lib/formly/formly.providers.mjs +0 -8
  187. package/esm2022/lib/formly/index.mjs +0 -12
  188. package/esm2022/lib/formly/template/available.mjs +0 -18
  189. package/esm2022/lib/formly/template/available.module.mjs +0 -18
  190. package/esm2022/lib/formly/template/index.mjs +0 -8
  191. package/esm2022/lib/formly/template/login.mjs +0 -92
  192. package/esm2022/lib/formly/template/login.module.mjs +0 -17
  193. package/esm2022/lib/formly/template/timezone.mjs +0 -46
  194. package/esm2022/lib/formly/template/timezone.module.mjs +0 -17
  195. package/esm2022/lib/formly/template/website.mjs +0 -25
  196. package/esm2022/lib/index.mjs +0 -7
  197. package/esm2022/lib/layout/form.layout.module.mjs +0 -20
  198. package/esm2022/lib/layout/form.spacer.directive.mjs +0 -20
  199. package/esm2022/lib/layout/index.mjs +0 -3
  200. package/esm2022/lib/validator/available.mjs +0 -31
  201. package/esm2022/lib/validator/boolean.mjs +0 -12
  202. package/esm2022/lib/validator/email.mjs +0 -6
  203. package/esm2022/lib/validator/field.mjs +0 -31
  204. package/esm2022/lib/validator/index.mjs +0 -8
  205. package/esm2022/lib/validator/number.mjs +0 -53
  206. package/esm2022/lib/validator/phone.mjs +0 -61
  207. package/esm2022/lib/validator/website.mjs +0 -68
  208. package/esm2022/mapbox/dereekb-dbx-form-mapbox.mjs +0 -5
  209. package/esm2022/mapbox/index.mjs +0 -3
  210. package/esm2022/mapbox/lib/field/index.mjs +0 -3
  211. package/esm2022/mapbox/lib/field/latlng/index.mjs +0 -5
  212. package/esm2022/mapbox/lib/field/latlng/latlng.field.component.mjs +0 -262
  213. package/esm2022/mapbox/lib/field/latlng/latlng.field.marker.component.mjs +0 -34
  214. package/esm2022/mapbox/lib/field/latlng/latlng.field.mjs +0 -35
  215. package/esm2022/mapbox/lib/field/latlng/latlng.module.mjs +0 -26
  216. package/esm2022/mapbox/lib/field/zoom/index.mjs +0 -4
  217. package/esm2022/mapbox/lib/field/zoom/zoom.field.component.mjs +0 -146
  218. package/esm2022/mapbox/lib/field/zoom/zoom.field.mjs +0 -23
  219. package/esm2022/mapbox/lib/field/zoom/zoom.module.mjs +0 -26
  220. package/esm2022/mapbox/lib/mapbox.module.mjs +0 -16
  221. package/index.d.ts +0 -1
  222. package/lib/form/action/form.action.dialog.component.d.ts +0 -63
  223. package/lib/form/action/form.action.directive.d.ts +0 -66
  224. package/lib/form/action/form.action.module.d.ts +0 -10
  225. package/lib/form/action/index.d.ts +0 -4
  226. package/lib/form/action/transition/form.action.transition.module.d.ts +0 -10
  227. package/lib/form/action/transition/form.action.transition.safety.directive.d.ts +0 -17
  228. package/lib/form/action/transition/index.d.ts +0 -2
  229. package/lib/form/form.angular.util.d.ts +0 -15
  230. package/lib/form/form.d.ts +0 -92
  231. package/lib/form/form.module.d.ts +0 -9
  232. package/lib/form/index.d.ts +0 -5
  233. package/lib/form/io/form.change.directive.d.ts +0 -17
  234. package/lib/form/io/form.input.directive.d.ts +0 -28
  235. package/lib/form/io/form.io.module.d.ts +0 -16
  236. package/lib/form/io/form.loading.directive.d.ts +0 -23
  237. package/lib/form/io/index.d.ts +0 -4
  238. package/lib/form.module.d.ts +0 -10
  239. package/lib/form.providers.d.ts +0 -8
  240. package/lib/formly/config/index.d.ts +0 -1
  241. package/lib/formly/config/validation.d.ts +0 -23
  242. package/lib/formly/field/checklist/checklist.field.d.ts +0 -44
  243. package/lib/formly/field/checklist/checklist.item.d.ts +0 -36
  244. package/lib/formly/field/checklist/checklist.item.field.component.d.ts +0 -43
  245. package/lib/formly/field/checklist/checklist.item.field.content.default.component.d.ts +0 -10
  246. package/lib/formly/field/checklist/checklist.item.field.d.ts +0 -7
  247. package/lib/formly/field/checklist/checklist.item.field.module.d.ts +0 -10
  248. package/lib/formly/field/checklist/index.d.ts +0 -6
  249. package/lib/formly/field/component/component.field.component.d.ts +0 -12
  250. package/lib/formly/field/component/component.field.d.ts +0 -3
  251. package/lib/formly/field/component/component.field.module.d.ts +0 -8
  252. package/lib/formly/field/component/index.d.ts +0 -3
  253. package/lib/formly/field/field.d.ts +0 -99
  254. package/lib/formly/field/form.field.module.d.ts +0 -12
  255. package/lib/formly/field/index.d.ts +0 -8
  256. package/lib/formly/field/selection/index.d.ts +0 -7
  257. package/lib/formly/field/selection/list/index.d.ts +0 -3
  258. package/lib/formly/field/selection/list/list.field.component.d.ts +0 -55
  259. package/lib/formly/field/selection/list/list.field.d.ts +0 -8
  260. package/lib/formly/field/selection/list/list.field.module.d.ts +0 -8
  261. package/lib/formly/field/selection/pickable/index.d.ts +0 -7
  262. package/lib/formly/field/selection/pickable/pickable.chip.field.component.d.ts +0 -10
  263. package/lib/formly/field/selection/pickable/pickable.d.ts +0 -26
  264. package/lib/formly/field/selection/pickable/pickable.field.d.ts +0 -8
  265. package/lib/formly/field/selection/pickable/pickable.field.directive.d.ts +0 -169
  266. package/lib/formly/field/selection/pickable/pickable.field.module.d.ts +0 -9
  267. package/lib/formly/field/selection/pickable/pickable.list.field.component.d.ts +0 -39
  268. package/lib/formly/field/selection/pickable/pickable.util.d.ts +0 -14
  269. package/lib/formly/field/selection/searchable/index.d.ts +0 -8
  270. package/lib/formly/field/selection/searchable/searchable.chip.field.component.d.ts +0 -28
  271. package/lib/formly/field/selection/searchable/searchable.d.ts +0 -39
  272. package/lib/formly/field/selection/searchable/searchable.field.autocomplete.item.component.d.ts +0 -22
  273. package/lib/formly/field/selection/searchable/searchable.field.d.ts +0 -25
  274. package/lib/formly/field/selection/searchable/searchable.field.directive.d.ts +0 -163
  275. package/lib/formly/field/selection/searchable/searchable.field.module.d.ts +0 -10
  276. package/lib/formly/field/selection/searchable/searchable.text.field.component.d.ts +0 -24
  277. package/lib/formly/field/selection/searchable/text.chip.field.d.ts +0 -8
  278. package/lib/formly/field/selection/selection.d.ts +0 -26
  279. package/lib/formly/field/selection/selection.field.d.ts +0 -38
  280. package/lib/formly/field/selection/selection.module.d.ts +0 -18
  281. package/lib/formly/field/selection/sourceselect/index.d.ts +0 -4
  282. package/lib/formly/field/selection/sourceselect/sourceselect.d.ts +0 -116
  283. package/lib/formly/field/selection/sourceselect/sourceselect.field.component.d.ts +0 -95
  284. package/lib/formly/field/selection/sourceselect/sourceselect.field.d.ts +0 -7
  285. package/lib/formly/field/selection/sourceselect/sourceselect.field.module.d.ts +0 -8
  286. package/lib/formly/field/texteditor/index.d.ts +0 -3
  287. package/lib/formly/field/texteditor/texteditor.field.component.d.ts +0 -24
  288. package/lib/formly/field/texteditor/texteditor.field.d.ts +0 -6
  289. package/lib/formly/field/texteditor/texteditor.field.module.d.ts +0 -8
  290. package/lib/formly/field/value/array/array.field.component.d.ts +0 -89
  291. package/lib/formly/field/value/array/array.field.d.ts +0 -40
  292. package/lib/formly/field/value/array/array.field.module.d.ts +0 -8
  293. package/lib/formly/field/value/array/index.d.ts +0 -3
  294. package/lib/formly/field/value/boolean/boolean.field.d.ts +0 -8
  295. package/lib/formly/field/value/boolean/boolean.field.module.d.ts +0 -9
  296. package/lib/formly/field/value/boolean/index.d.ts +0 -2
  297. package/lib/formly/field/value/date/date.field.module.d.ts +0 -10
  298. package/lib/formly/field/value/date/date.value.d.ts +0 -32
  299. package/lib/formly/field/value/date/datetime.d.ts +0 -56
  300. package/lib/formly/field/value/date/datetime.field.component.d.ts +0 -307
  301. package/lib/formly/field/value/date/datetime.field.d.ts +0 -31
  302. package/lib/formly/field/value/date/datetime.field.service.d.ts +0 -12
  303. package/lib/formly/field/value/date/datetime.preset.d.ts +0 -2
  304. package/lib/formly/field/value/date/fixeddaterange.field.component.d.ts +0 -163
  305. package/lib/formly/field/value/date/index.d.ts +0 -9
  306. package/lib/formly/field/value/hidden.field.d.ts +0 -4
  307. package/lib/formly/field/value/index.d.ts +0 -8
  308. package/lib/formly/field/value/number/index.d.ts +0 -2
  309. package/lib/formly/field/value/number/number.field.d.ts +0 -46
  310. package/lib/formly/field/value/number/number.field.module.d.ts +0 -8
  311. package/lib/formly/field/value/phone/index.d.ts +0 -3
  312. package/lib/formly/field/value/phone/phone.field.component.d.ts +0 -35
  313. package/lib/formly/field/value/phone/phone.field.d.ts +0 -28
  314. package/lib/formly/field/value/phone/phone.field.module.d.ts +0 -8
  315. package/lib/formly/field/value/text/index.d.ts +0 -4
  316. package/lib/formly/field/value/text/text.additional.field.d.ts +0 -24
  317. package/lib/formly/field/value/text/text.address.field.d.ts +0 -43
  318. package/lib/formly/field/value/text/text.field.d.ts +0 -21
  319. package/lib/formly/field/value/text/text.field.module.d.ts +0 -10
  320. package/lib/formly/field/value/value.module.d.ts +0 -21
  321. package/lib/formly/field/wrapper/autotouch.wrapper.component.d.ts +0 -11
  322. package/lib/formly/field/wrapper/expand.wrapper.component.d.ts +0 -14
  323. package/lib/formly/field/wrapper/expand.wrapper.delegate.d.ts +0 -31
  324. package/lib/formly/field/wrapper/flex.wrapper.component.d.ts +0 -25
  325. package/lib/formly/field/wrapper/index.d.ts +0 -12
  326. package/lib/formly/field/wrapper/info.wrapper.component.d.ts +0 -11
  327. package/lib/formly/field/wrapper/section.wrapper.component.d.ts +0 -10
  328. package/lib/formly/field/wrapper/style.wrapper.component.d.ts +0 -27
  329. package/lib/formly/field/wrapper/subsection.wrapper.component.d.ts +0 -10
  330. package/lib/formly/field/wrapper/toggle.wrapper.component.d.ts +0 -17
  331. package/lib/formly/field/wrapper/working.wrapper.component.d.ts +0 -21
  332. package/lib/formly/field/wrapper/wrapper.d.ts +0 -35
  333. package/lib/formly/field/wrapper/wrapper.key.d.ts +0 -9
  334. package/lib/formly/field/wrapper/wrapper.module.d.ts +0 -17
  335. package/lib/formly/form/form.form.d.ts +0 -11
  336. package/lib/formly/form/form.form.module.d.ts +0 -10
  337. package/lib/formly/form/index.d.ts +0 -3
  338. package/lib/formly/form/search.form.component.d.ts +0 -13
  339. package/lib/formly/formly.component.template.d.ts +0 -19
  340. package/lib/formly/formly.context.d.ts +0 -57
  341. package/lib/formly/formly.context.directive.d.ts +0 -18
  342. package/lib/formly/formly.directive.d.ts +0 -56
  343. package/lib/formly/formly.form.component.d.ts +0 -52
  344. package/lib/formly/formly.module.d.ts +0 -15
  345. package/lib/formly/formly.providers.d.ts +0 -1
  346. package/lib/formly/index.d.ts +0 -11
  347. package/lib/formly/template/available.d.ts +0 -7
  348. package/lib/formly/template/available.module.d.ts +0 -8
  349. package/lib/formly/template/index.d.ts +0 -7
  350. package/lib/formly/template/login.d.ts +0 -66
  351. package/lib/formly/template/login.module.d.ts +0 -7
  352. package/lib/formly/template/timezone.d.ts +0 -20
  353. package/lib/formly/template/timezone.module.d.ts +0 -7
  354. package/lib/formly/template/website.d.ts +0 -15
  355. package/lib/index.d.ts +0 -6
  356. package/lib/layout/form.layout.module.d.ts +0 -10
  357. package/lib/layout/form.spacer.directive.d.ts +0 -8
  358. package/lib/layout/index.d.ts +0 -2
  359. package/lib/validator/available.d.ts +0 -30
  360. package/lib/validator/boolean.d.ts +0 -2
  361. package/lib/validator/email.d.ts +0 -2
  362. package/lib/validator/field.d.ts +0 -32
  363. package/lib/validator/index.d.ts +0 -7
  364. package/lib/validator/number.d.ts +0 -23
  365. package/lib/validator/phone.d.ts +0 -16
  366. package/lib/validator/website.d.ts +0 -31
  367. package/mapbox/index.d.ts +0 -2
  368. package/mapbox/lib/field/index.d.ts +0 -2
  369. package/mapbox/lib/field/latlng/index.d.ts +0 -4
  370. package/mapbox/lib/field/latlng/latlng.field.component.d.ts +0 -116
  371. package/mapbox/lib/field/latlng/latlng.field.d.ts +0 -6
  372. package/mapbox/lib/field/latlng/latlng.field.marker.component.d.ts +0 -12
  373. package/mapbox/lib/field/latlng/latlng.module.d.ts +0 -8
  374. package/mapbox/lib/field/zoom/index.d.ts +0 -3
  375. package/mapbox/lib/field/zoom/zoom.field.component.d.ts +0 -68
  376. package/mapbox/lib/field/zoom/zoom.field.d.ts +0 -6
  377. package/mapbox/lib/field/zoom/zoom.module.d.ts +0 -8
  378. package/mapbox/lib/mapbox.module.d.ts +0 -8
@@ -1 +1 @@
1
- {"version":3,"file":"dereekb-dbx-form.mjs","sources":["../../../../packages/dbx-form/src/lib/form/form.ts","../../../../packages/dbx-form/src/lib/form/action/form.action.directive.ts","../../../../packages/dbx-form/src/lib/form/action/transition/form.action.transition.safety.directive.ts","../../../../packages/dbx-form/src/lib/form/action/transition/form.action.transition.module.ts","../../../../packages/dbx-form/src/lib/form/action/form.action.module.ts","../../../../packages/dbx-form/src/lib/formly/formly.context.ts","../../../../packages/dbx-form/src/lib/formly/formly.form.component.ts","../../../../packages/dbx-form/src/lib/form/io/form.input.directive.ts","../../../../packages/dbx-form/src/lib/form/action/form.action.dialog.component.ts","../../../../packages/dbx-form/src/lib/form/io/form.loading.directive.ts","../../../../packages/dbx-form/src/lib/form/io/form.change.directive.ts","../../../../packages/dbx-form/src/lib/form/io/form.io.module.ts","../../../../packages/dbx-form/src/lib/form/form.angular.util.ts","../../../../packages/dbx-form/src/lib/form/form.module.ts","../../../../packages/dbx-form/src/lib/formly/config/validation.ts","../../../../packages/dbx-form/src/lib/formly/field/checklist/checklist.item.field.content.default.component.ts","../../../../packages/dbx-form/src/lib/formly/field/checklist/checklist.item.field.component.ts","../../../../packages/dbx-form/src/lib/formly/field/checklist/checklist.item.field.component.html","../../../../packages/dbx-form/src/lib/formly/field/wrapper/info.wrapper.component.ts","../../../../packages/dbx-form/src/lib/formly/field/wrapper/section.wrapper.component.ts","../../../../packages/dbx-form/src/lib/formly/field/wrapper/flex.wrapper.component.ts","../../../../packages/dbx-form/src/lib/formly/field/wrapper/subsection.wrapper.component.ts","../../../../packages/dbx-form/src/lib/formly/field/wrapper/expand.wrapper.delegate.ts","../../../../packages/dbx-form/src/lib/formly/field/wrapper/expand.wrapper.component.ts","../../../../packages/dbx-form/src/lib/formly/field/wrapper/autotouch.wrapper.component.ts","../../../../packages/dbx-form/src/lib/formly/field/wrapper/toggle.wrapper.component.ts","../../../../packages/dbx-form/src/lib/formly/field/wrapper/style.wrapper.component.ts","../../../../packages/dbx-form/src/lib/formly/field/wrapper/working.wrapper.component.ts","../../../../packages/dbx-form/src/lib/formly/field/wrapper/wrapper.key.ts","../../../../packages/dbx-form/src/lib/formly/field/wrapper/wrapper.module.ts","../../../../packages/dbx-form/src/lib/formly/field/checklist/checklist.item.field.module.ts","../../../../packages/dbx-form/src/lib/formly/field/field.ts","../../../../packages/dbx-form/src/lib/formly/field/checklist/checklist.item.field.ts","../../../../packages/dbx-form/src/lib/formly/field/checklist/checklist.field.ts","../../../../packages/dbx-form/src/lib/formly/field/component/component.field.component.ts","../../../../packages/dbx-form/src/lib/formly/field/component/component.field.module.ts","../../../../packages/dbx-form/src/lib/formly/field/component/component.field.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/list/list.field.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/list/list.field.component.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/list/list.field.component.html","../../../../packages/dbx-form/src/lib/formly/field/selection/list/list.field.module.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/pickable/pickable.field.directive.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/pickable/pickable.chip.field.component.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/pickable/pickable.chip.field.component.html","../../../../packages/dbx-form/src/lib/formly/field/selection/pickable/pickable.list.field.component.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/pickable/pickable.list.field.component.html","../../../../packages/dbx-form/src/lib/formly/field/selection/pickable/pickable.field.module.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/pickable/pickable.field.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/pickable/pickable.util.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/searchable/searchable.field.autocomplete.item.component.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/searchable/searchable.field.directive.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/searchable/searchable.chip.field.component.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/searchable/searchable.chip.field.component.html","../../../../packages/dbx-form/src/lib/formly/field/selection/searchable/searchable.field.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/searchable/searchable.text.field.component.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/searchable/searchable.text.field.component.html","../../../../packages/dbx-form/src/lib/formly/field/selection/searchable/searchable.field.module.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/searchable/text.chip.field.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/sourceselect/sourceselect.field.component.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/sourceselect/sourceselect.field.component.html","../../../../packages/dbx-form/src/lib/formly/field/selection/sourceselect/sourceselect.field.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/sourceselect/sourceselect.field.module.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/selection.field.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/selection.module.ts","../../../../packages/dbx-form/src/lib/formly/field/texteditor/texteditor.field.component.ts","../../../../packages/dbx-form/src/lib/formly/field/texteditor/texteditor.field.module.ts","../../../../packages/dbx-form/src/lib/formly/field/texteditor/texteditor.field.ts","../../../../packages/dbx-form/src/lib/formly/field/value/array/array.field.component.ts","../../../../packages/dbx-form/src/lib/formly/field/value/array/array.field.module.ts","../../../../packages/dbx-form/src/lib/formly/field/value/array/array.field.ts","../../../../packages/dbx-form/src/lib/formly/field/value/boolean/boolean.field.module.ts","../../../../packages/dbx-form/src/lib/formly/field/value/boolean/boolean.field.ts","../../../../packages/dbx-form/src/lib/formly/field/value/date/datetime.ts","../../../../packages/dbx-form/src/lib/formly/field/value/date/datetime.field.service.ts","../../../../packages/dbx-form/src/lib/formly/field/value/date/date.value.ts","../../../../packages/dbx-form/src/lib/formly/field/value/date/datetime.field.component.ts","../../../../packages/dbx-form/src/lib/formly/field/value/date/datetime.field.component.html","../../../../packages/dbx-form/src/lib/formly/field/value/date/fixeddaterange.field.component.ts","../../../../packages/dbx-form/src/lib/formly/field/value/date/fixeddaterange.field.component.html","../../../../packages/dbx-form/src/lib/formly/field/value/date/date.field.module.ts","../../../../packages/dbx-form/src/lib/formly/field/wrapper/wrapper.ts","../../../../packages/dbx-form/src/lib/formly/field/value/date/datetime.field.ts","../../../../packages/dbx-form/src/lib/formly/field/value/date/datetime.preset.ts","../../../../packages/dbx-form/src/lib/validator/boolean.ts","../../../../packages/dbx-form/src/lib/validator/email.ts","../../../../packages/dbx-form/src/lib/validator/field.ts","../../../../packages/dbx-form/src/lib/validator/number.ts","../../../../packages/dbx-form/src/lib/validator/available.ts","../../../../packages/dbx-form/src/lib/validator/phone.ts","../../../../packages/dbx-form/src/lib/validator/website.ts","../../../../packages/dbx-form/src/lib/formly/field/value/number/number.field.ts","../../../../packages/dbx-form/src/lib/formly/field/value/number/number.field.module.ts","../../../../packages/dbx-form/src/lib/formly/field/value/phone/phone.field.component.ts","../../../../packages/dbx-form/src/lib/formly/field/value/phone/phone.field.component.html","../../../../packages/dbx-form/src/lib/formly/field/value/phone/phone.field.module.ts","../../../../packages/dbx-form/src/lib/formly/field/value/text/text.field.ts","../../../../packages/dbx-form/src/lib/formly/field/value/phone/phone.field.ts","../../../../packages/dbx-form/src/lib/formly/field/value/text/text.additional.field.ts","../../../../packages/dbx-form/src/lib/formly/field/value/text/text.address.field.ts","../../../../packages/dbx-form/src/lib/formly/field/value/text/text.field.module.ts","../../../../packages/dbx-form/src/lib/formly/field/value/hidden.field.ts","../../../../packages/dbx-form/src/lib/formly/field/value/value.module.ts","../../../../packages/dbx-form/src/lib/formly/field/form.field.module.ts","../../../../packages/dbx-form/src/lib/formly/formly.directive.ts","../../../../packages/dbx-form/src/lib/formly/form/form.form.ts","../../../../packages/dbx-form/src/lib/formly/formly.component.template.ts","../../../../packages/dbx-form/src/lib/formly/form/search.form.component.ts","../../../../packages/dbx-form/src/lib/formly/form/form.form.module.ts","../../../../packages/dbx-form/src/lib/formly/template/available.ts","../../../../packages/dbx-form/src/lib/formly/template/available.module.ts","../../../../packages/dbx-form/src/lib/formly/template/login.ts","../../../../packages/dbx-form/src/lib/formly/template/login.module.ts","../../../../packages/dbx-form/src/lib/formly/template/timezone.ts","../../../../packages/dbx-form/src/lib/formly/template/timezone.module.ts","../../../../packages/dbx-form/src/lib/formly/template/website.ts","../../../../packages/dbx-form/src/lib/formly/formly.context.directive.ts","../../../../packages/dbx-form/src/lib/formly/formly.module.ts","../../../../packages/dbx-form/src/lib/formly/formly.providers.ts","../../../../packages/dbx-form/src/lib/layout/form.spacer.directive.ts","../../../../packages/dbx-form/src/lib/layout/form.layout.module.ts","../../../../packages/dbx-form/src/lib/form.module.ts","../../../../packages/dbx-form/src/lib/form.providers.ts","../../../../packages/dbx-form/src/dereekb-dbx-form.ts"],"sourcesContent":["import { forwardRef, type Provider, type Type } from '@angular/core';\nimport { type Observable } from 'rxjs';\nimport { type LockSet } from '@dereekb/rxjs';\nimport { type BooleanStringKeyArray, type Maybe } from '@dereekb/util';\nimport { type AbstractControl, type FormControlStatus } from '@angular/forms';\n\n/**\n * Current state of a DbxForm\n */\nexport enum DbxFormState {\n /**\n * Form is not finished initializing.\n */\n INITIALIZING = -1,\n /**\n * Form is initialized but has not yet used.\n */\n RESET = 0,\n /**\n * Form has been used.\n */\n USED = 1\n}\n\n/**\n * Unique key for disabling/enabling.\n */\nexport type DbxFormDisabledKey = string;\n\nexport const DEFAULT_FORM_DISABLED_KEY = 'dbx_form_disabled';\n\nexport interface DbxFormStateRef {\n readonly state: DbxFormState;\n}\n\n/**\n * DbxForm stream event\n */\nexport interface DbxFormEvent extends DbxFormStateRef {\n readonly isComplete: boolean;\n readonly status: FormControlStatus;\n readonly pristine?: boolean;\n readonly untouched?: boolean;\n readonly lastResetAt?: Date;\n readonly changesCount?: number;\n /**\n * Whether or not the form is disabled.\n */\n readonly isDisabled?: boolean;\n /**\n * Current disabled state keys.\n */\n readonly disabled?: BooleanStringKeyArray;\n}\n\n/**\n * Form that has an event stream, value, and state items.\n */\nexport abstract class DbxForm<T = unknown> {\n abstract readonly stream$: Observable<DbxFormEvent>;\n\n /**\n * Returns an observable that returns the current state of the form.\n */\n abstract getValue(): Observable<T>;\n\n /**\n * Returns an observable that returns the current disabled keys.\n */\n abstract getDisabled(): Observable<BooleanStringKeyArray>;\n}\n\nexport abstract class DbxMutableForm<T = unknown> extends DbxForm<T> {\n /**\n * LockSet for the form.\n */\n abstract readonly lockSet?: LockSet;\n\n /**\n * Sets the initial value of the form, and resets the form.\n *\n * @param value\n */\n abstract setValue(value: Maybe<Partial<T>>): void;\n\n /**\n * Resets the form to the initial value.\n */\n abstract resetForm(): void;\n\n /**\n * Disables the form\n *\n * @param disabled\n */\n abstract setDisabled(key?: DbxFormDisabledKey, disabled?: boolean): void;\n\n /**\n * Force the form to update itself as if it was changed.\n */\n abstract forceFormUpdate(): void;\n}\n\nexport function provideDbxForm<S extends DbxForm>(sourceType: Type<S>): Provider[] {\n return [{ provide: DbxForm, useExisting: forwardRef(() => sourceType) }];\n}\n\nexport function provideDbxMutableForm<S extends DbxMutableForm>(sourceType: Type<S>): Provider[] {\n return [...provideDbxForm(sourceType), { provide: DbxMutableForm, useExisting: forwardRef(() => sourceType) }];\n}\n\nexport function toggleDisableFormControl(form: AbstractControl<any>, isDisabled: boolean, config?: Parameters<AbstractControl['disable']>[0]) {\n if (isDisabled) {\n form.disable(config);\n } else {\n form.enable(config);\n }\n}\n","import { Directive, OnInit, OnDestroy, inject, input } from '@angular/core';\nimport { addSeconds, isPast } from 'date-fns';\nimport { Observable, of, combineLatest, exhaustMap, catchError, delay, filter, first, map, switchMap, distinctUntilChanged, shareReplay } from 'rxjs';\nimport { DbxActionContextStoreSourceInstance, DbxActionValueGetterResult } from '@dereekb/dbx-core';\nimport { SubscriptionObject, LockSet, IsModifiedFunction, IsValidFunction, ObservableOrValue, asObservable, IsEqualFunction, makeIsModifiedFunctionObservable } from '@dereekb/rxjs';\nimport { DbxFormState, DbxMutableForm } from '../../form/form';\nimport { IsModified, IsValid, MapFunction, Maybe } from '@dereekb/util';\nimport { toObservable } from '@angular/core/rxjs-interop';\n\nexport const APP_ACTION_FORM_DISABLED_KEY = 'dbx_action_form';\n\nexport type DbxActionFormMapValueFunction<T, O> = MapFunction<T, ObservableOrValue<DbxActionValueGetterResult<O>>>;\n\n/**\n * Used with an action to bind a form to an action as it's value source.\n *\n * If the form has errors when the action is trigger, it will reject the action.\n *\n * If the source is not considered modified, the trigger will be ignored.\n */\n@Directive({\n selector: '[dbxActionForm]',\n standalone: true\n})\nexport class DbxActionFormDirective<T = object, O = T> implements OnInit, OnDestroy {\n readonly form = inject(DbxMutableForm<T>, { host: true });\n readonly source = inject(DbxActionContextStoreSourceInstance<O, unknown>);\n\n readonly lockSet = new LockSet();\n\n /**\n * Whether or not to disable the form while the action is working.\n *\n * Defaults to true.\n */\n readonly dbxActionFormDisabledOnWorking = input<Maybe<boolean>>(true);\n\n /**\n * Optional validator that checks whether or not the value is\n * ready to send before the context store is marked enabled.\n */\n readonly dbxActionFormIsValid = input<Maybe<IsValidFunction<T>>>();\n\n /**\n * Optional function that checks whether or not the value is still the same/equal.\n */\n readonly dbxActionFormIsEqual = input<Maybe<IsEqualFunction<T>>>();\n\n /**\n * Optional function that checks whether or not the value has been modified.\n *\n * If dbxActionFormIsEqual is provided, this will be ignored.\n */\n readonly dbxActionFormIsModified = input<Maybe<IsModifiedFunction<T>>>();\n\n /**\n * Optional function that maps the form's value to the source's value.\n */\n readonly dbxActionFormMapValue = input<Maybe<DbxActionFormMapValueFunction<T, O>>>();\n\n readonly dbxActionFormDisabledOnWorking$ = toObservable(this.dbxActionFormDisabledOnWorking);\n\n readonly isValidFunction$ = toObservable(this.dbxActionFormIsValid).pipe(\n map((x) => x ?? (() => of(true))),\n shareReplay(1)\n );\n readonly isModifiedFunction$: Observable<IsModifiedFunction<T>> = makeIsModifiedFunctionObservable({\n isModified: toObservable(this.dbxActionFormIsModified),\n isEqual: toObservable(this.dbxActionFormIsEqual)\n }).pipe(shareReplay(1));\n\n readonly mapValueFunction$: Observable<Maybe<DbxActionFormMapValueFunction<T, O>>> = toObservable(this.dbxActionFormMapValue);\n\n private readonly _triggeredSub = new SubscriptionObject();\n private readonly _isCompleteSub = new SubscriptionObject();\n private readonly _isWorkingSub = new SubscriptionObject();\n\n constructor() {\n if (this.form.lockSet) {\n this.lockSet.addChildLockSet(this.form.lockSet, 'form');\n }\n\n this.lockSet.addChildLockSet(this.source.lockSet, 'source');\n }\n\n ngOnInit(): void {\n // Pass data from the form to the source when triggered.\n this._triggeredSub.subscription = this.source.triggered$\n .pipe(\n switchMap(() =>\n this.form.stream$.pipe(\n first(),\n exhaustMap((stream) => {\n const { isComplete } = stream;\n const doNothing = {}; // nothing, form not complete\n\n let obs: Observable<DbxActionValueGetterResult<O>>;\n\n if (isComplete) {\n obs = this.form.getValue().pipe(\n first(),\n exhaustMap((value) =>\n this.preCheckReadyValue(value).pipe(\n first(),\n switchMap((canContinue) => {\n if (canContinue) {\n return this.readyValue(value).pipe(first());\n } else {\n return of(doNothing);\n }\n }),\n catchError((error) => of({ reject: error }))\n )\n )\n );\n } else {\n obs = of(doNothing);\n }\n\n return obs;\n })\n )\n )\n )\n .subscribe((result: DbxActionValueGetterResult<O>) => {\n if (result.reject) {\n this.source.reject(result.reject);\n } else if (result.value != null) {\n this.source.readyValue(result.value);\n } else {\n // value isn't ready\n }\n });\n\n // Update the enabled/disabled state\n this._isCompleteSub.subscription = this.form.stream$\n .pipe(\n delay(0),\n filter((x) => x.state !== DbxFormState.INITIALIZING),\n switchMap((event) => {\n return this.form.getValue().pipe(\n first(),\n exhaustMap((value) => {\n // Use both changes count and whether or not something was in the past to guage whether or not the item has been touched.\n // Angular Form's untouched is whether or not focus has been lost but we can still receive value updates.\n // More than a certain amount of updates implies that it is being typed into/used.\n // 3 changes and 2 seconds are arbitrary values derived from guesses about any slow/late changes that may come from external directives for setup.\n const isProbablyTouched = !event.untouched || ((event.changesCount ?? 0) > 3 && isPast(addSeconds(event.lastResetAt ?? new Date(), 2)));\n\n // create overrides\n const returnFalseFunction = () => of(false);\n\n const runIsValidCheck = event.isComplete;\n const isValidFunction: Maybe<IsValidFunction<T>> = runIsValidCheck ? undefined : returnFalseFunction;\n\n const isConsideredModified = event.pristine === false && isProbablyTouched;\n const isModifiedFunction: Maybe<IsModifiedFunction<T>> = isConsideredModified ? undefined : returnFalseFunction;\n\n return this.checkIsValidAndIsModified(value, { isValidFunction, isModifiedFunction }).pipe(\n map(([valid, modified]: [boolean, boolean]) => ({ valid, modified, value, event })),\n first()\n );\n })\n );\n })\n )\n .subscribe(({ valid, modified /*, value, event */ }) => {\n // console.log('x: ', value, event, valid, modified);\n\n // Update Modified State\n this.source.setIsModified(modified);\n\n // Disable if the form is not yet complete/valid.\n this.source.enable(APP_ACTION_FORM_DISABLED_KEY, valid);\n });\n\n // Watch the working state and disable form while working\n this._isWorkingSub.subscription = combineLatest([this.source.isWorking$, this.dbxActionFormDisabledOnWorking$])\n .pipe(\n map(([isWorking, disableFormWhileWorking]: [boolean, Maybe<boolean>]) => disableFormWhileWorking !== false && isWorking),\n distinctUntilChanged()\n )\n .subscribe((disable) => {\n this.form.setDisabled(APP_ACTION_FORM_DISABLED_KEY, disable);\n });\n }\n\n ngOnDestroy(): void {\n this.source.enable(APP_ACTION_FORM_DISABLED_KEY);\n this.lockSet.destroyOnNextUnlock(() => {\n this._triggeredSub.destroy();\n this._isCompleteSub.destroy();\n this._isWorkingSub.destroy();\n this.form.setDisabled(APP_ACTION_FORM_DISABLED_KEY, false);\n });\n }\n\n checkIsValidAndIsModified(value: T, overrides?: CheckValidAndModifiedOverrides<T>): Observable<[IsValid, IsModified]> {\n const { isModifiedFunction: overrideIsModifiedFunction, isValidFunction: overrideIsValidFunction } = overrides ?? {};\n const isValidFunctionObs = overrideIsValidFunction != null ? of(overrideIsValidFunction) : this.isValidFunction$;\n const isModifiedFunctionObs = overrideIsModifiedFunction != null ? of(overrideIsModifiedFunction) : this.isModifiedFunction$;\n\n return combineLatest([isValidFunctionObs, isModifiedFunctionObs]).pipe(\n switchMap(([isValid, isModified]) => {\n return combineLatest([isValid(value), isModified(value)]).pipe(map(([valid, modified]) => [valid, modified] as [boolean, boolean]));\n })\n );\n }\n\n protected preCheckReadyValue(value: T): Observable<[IsValid, IsModified]> {\n return this.checkIsValidAndIsModified(value);\n }\n\n protected readyValue(value: T): Observable<DbxActionValueGetterResult<O>> {\n return this.mapValueFunction$.pipe(\n switchMap((mapFunction) => {\n if (mapFunction) {\n return asObservable(mapFunction(value));\n } else {\n return of({ value: value as unknown as O });\n }\n })\n );\n }\n}\n\ninterface CheckValidAndModifiedOverrides<T> {\n isModifiedFunction?: Maybe<IsModifiedFunction<T>>;\n isValidFunction?: Maybe<IsValidFunction<T>>;\n}\n","import { Directive, effect, inject, input } from '@angular/core';\nimport { HookResult, Transition } from '@uirouter/core';\nimport { DbxActionTransitionSafetyType, DbxActionTransitionSafetyDirective } from '@dereekb/dbx-web';\nimport { DbxActionFormDirective } from '../form.action.directive';\n\n/**\n * Extension of DbxActionTransitionSafetyDirective that forces the form to update first.\n *\n * NOTE: Only works with UIRouter\n */\n@Directive({\n selector: '[dbxActionFormSafety]',\n standalone: true\n})\nexport class DbxActionFormSafetyDirective<T, O> extends DbxActionTransitionSafetyDirective<T, O> {\n readonly dbxActionForm = inject(DbxActionFormDirective<T>, { host: true });\n readonly dbxActionFormSafety = input<DbxActionTransitionSafetyType>('auto');\n\n protected readonly _dbxActionFormSafetyUpdateEffect = effect(() => this._safetyType.next(this.dbxActionFormSafety()));\n\n protected override _handleOnBeforeTransition(transition: Transition): HookResult {\n this.dbxActionForm.form.forceFormUpdate();\n return super._handleOnBeforeTransition(transition);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { DbxActionFormSafetyDirective } from './form.action.transition.safety.directive';\n\n/**\n * @deprecated import DbxActionFormSafetyDirective directly\n */\n@NgModule({\n imports: [DbxActionFormSafetyDirective],\n exports: [DbxActionFormSafetyDirective]\n})\nexport class DbxFormActionTransitionModule {}\n","import { NgModule } from '@angular/core';\nimport { DbxActionFormDirective } from './form.action.directive';\n\n/**\n * @deprecated Import DbxActionFormDirective directly instead.\n */\n@NgModule({\n imports: [DbxActionFormDirective],\n exports: [DbxActionFormDirective]\n})\nexport class DbxFormActionModule {}\n","import { Injectable, OnDestroy, Provider } from '@angular/core';\nimport { BehaviorSubject, Observable, of, switchMap, shareReplay, distinctUntilChanged } from 'rxjs';\nimport { DbxForm, DbxFormDisabledKey, DbxFormEvent, DbxFormState, DbxMutableForm, DEFAULT_FORM_DISABLED_KEY, provideDbxMutableForm } from '../form/form';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { LockSet, filterMaybe } from '@dereekb/rxjs';\nimport { BooleanStringKeyArray, BooleanStringKeyArrayUtility, Destroyable, type Maybe } from '@dereekb/util';\n\nexport interface DbxFormlyInitialize<T> {\n fields: Observable<FormlyFieldConfig[]>;\n initialDisabled: BooleanStringKeyArray;\n initialValue: Maybe<Partial<T>>;\n}\n\n/**\n * DbxFormlyContext delegate.\n *\n * This is usually the component or element that contains the form itself.\n */\nexport interface DbxFormlyContextDelegate<T = unknown> extends Omit<DbxMutableForm<T>, 'lockSet'> {\n readonly stream$: Observable<DbxFormEvent>;\n init(initialize: DbxFormlyInitialize<T>): void;\n}\n\n/**\n * Allows a directive to provide a formly context and form.\n */\nexport function provideFormlyContext(): Provider[] {\n return [DbxFormlyContext, ...provideDbxMutableForm(DbxFormlyContext)];\n}\n\n/**\n * DbxForm Instance that registers a delegate and manages the state of that form/delegate.\n */\n@Injectable()\nexport class DbxFormlyContext<T = unknown> implements DbxForm<T>, Destroyable, OnDestroy {\n private static INITIAL_STATE: DbxFormEvent = { isComplete: false, state: DbxFormState.INITIALIZING, status: 'PENDING' };\n\n readonly lockSet = new LockSet();\n\n private readonly _fields = new BehaviorSubject<Maybe<FormlyFieldConfig[]>>(undefined);\n private readonly _initialValue = new BehaviorSubject<Maybe<Partial<T>>>(undefined);\n private readonly _disabled = new BehaviorSubject<BooleanStringKeyArray>(undefined);\n private readonly _delegate = new BehaviorSubject<Maybe<DbxFormlyContextDelegate<T>>>(undefined);\n\n readonly fields$ = this._fields.pipe(filterMaybe(), shareReplay(1));\n readonly disabled$ = this._disabled.pipe(filterMaybe(), shareReplay(1));\n readonly stream$: Observable<DbxFormEvent> = this._delegate.pipe(\n distinctUntilChanged(),\n switchMap((x) => (x ? x.stream$ : of(DbxFormlyContext.INITIAL_STATE))),\n shareReplay(1)\n );\n\n ngOnDestroy(): void {\n this.destroy();\n }\n\n destroy(): void {\n this.lockSet.destroyOnNextUnlock(() => {\n this._fields.complete();\n this._initialValue.complete();\n this._disabled.complete();\n this._delegate.complete();\n });\n }\n\n setDelegate(delegate?: DbxFormlyContextDelegate<T>): void {\n if (delegate !== this._delegate.value) {\n if (delegate != null) {\n delegate.init({\n fields: this.fields$,\n initialDisabled: this.disabled,\n initialValue: this._initialValue.value\n });\n }\n\n this._delegate.next(delegate);\n }\n }\n\n clearDelegate(delegate: DbxFormlyContextDelegate<T>): void {\n if (delegate === this._delegate.value) {\n this.setDelegate(undefined);\n }\n }\n\n get fields(): Maybe<FormlyFieldConfig[]> {\n return this._fields.value;\n }\n\n set fields(fields: Maybe<FormlyFieldConfig[]>) {\n this._fields.next(fields);\n }\n\n // MARK: FormComponent\n getValue(): Observable<T> {\n return this._delegate.pipe(\n filterMaybe(),\n switchMap((x) => x.getValue()),\n shareReplay(1)\n );\n }\n\n setValue(value: Partial<T>): void {\n this._initialValue.next(value);\n\n if (this._delegate.value) {\n this._delegate.value.setValue(value);\n }\n }\n\n isDisabled(): boolean {\n return BooleanStringKeyArrayUtility.isTrue(this.disabled);\n }\n\n get disabled(): BooleanStringKeyArray {\n return this._disabled.value;\n }\n\n getDisabled(): Observable<BooleanStringKeyArray> {\n return this._disabled.asObservable();\n }\n\n setDisabled(key?: DbxFormDisabledKey, disabled = true): void {\n const nextDisabled = BooleanStringKeyArrayUtility.set(this.disabled, key ?? DEFAULT_FORM_DISABLED_KEY, disabled);\n this._disabled.next(nextDisabled);\n\n if (this._delegate.value) {\n this._delegate.value.setDisabled(key, disabled);\n }\n }\n\n resetForm(): void {\n if (this._delegate.value) {\n this._delegate.value.resetForm();\n }\n }\n\n forceFormUpdate(): void {\n if (this._delegate.value) {\n this._delegate.value.forceFormUpdate();\n }\n }\n}\n","import { ChangeDetectionStrategy, Component, OnDestroy, OnInit, computed, inject, signal, viewChild } from '@angular/core';\nimport { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { FormlyFieldConfig, FormlyForm, FormlyFormOptions, FormlyModule } from '@ngx-formly/core';\nimport { distinctUntilChanged, map, throttleTime, startWith, BehaviorSubject, Observable, Subject, switchMap, shareReplay, of, scan, filter, timer, first, merge, delay } from 'rxjs';\nimport { AbstractSubscriptionDirective } from '@dereekb/dbx-core';\nimport { DbxForm, DbxFormDisabledKey, DbxFormEvent, DbxFormState, DEFAULT_FORM_DISABLED_KEY, provideDbxMutableForm, toggleDisableFormControl } from '../form/form';\nimport { DbxFormlyContext, DbxFormlyContextDelegate, DbxFormlyInitialize } from './formly.context';\nimport { scanCount, switchMapFilterMaybe, SubscriptionObject } from '@dereekb/rxjs';\nimport { BooleanStringKeyArray, BooleanStringKeyArrayUtility, iterablesAreSetEquivalent, type Maybe } from '@dereekb/util';\nimport { toSignal } from '@angular/core/rxjs-interop';\n\nexport interface DbxFormlyFormState {\n changesSinceLastResetCount: number;\n isFormValid: boolean;\n isFormDisabled: boolean;\n}\n\n/**\n * Used for rending a form from a DbxFormlyContext.\n */\n@Component({\n selector: 'dbx-formly',\n exportAs: 'formly',\n template: `\n <form [formGroup]=\"form\" class=\"dbx-formly\">\n <formly-form [form]=\"form\" [options]=\"options\" [fields]=\"fieldsSignal()\" [model]=\"modelSignal()\"></formly-form>\n </form>\n `,\n host: {\n class: 'dbx-formly'\n },\n providers: provideDbxMutableForm(DbxFormlyComponent),\n imports: [FormsModule, ReactiveFormsModule, FormlyModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFormlyComponent<T> extends AbstractSubscriptionDirective implements DbxForm, DbxFormlyContextDelegate<T>, OnInit, OnDestroy {\n private readonly _dbxFormlyContext = inject(DbxFormlyContext<T>);\n\n readonly formlyForm = viewChild(FormlyForm);\n\n private readonly _fields = new BehaviorSubject<Maybe<Observable<FormlyFieldConfig[]>>>(undefined);\n private readonly _events = new BehaviorSubject<DbxFormEvent>({ isComplete: false, state: DbxFormState.INITIALIZING, status: 'PENDING' });\n private readonly _disabled = new BehaviorSubject<BooleanStringKeyArray>(undefined);\n\n private readonly _reset = new BehaviorSubject<Date>(new Date());\n private readonly _forceUpdate = new Subject<void>();\n\n private readonly _disabledSub = new SubscriptionObject();\n private readonly _enforceDisabledSub = new SubscriptionObject();\n\n readonly form = new FormGroup({});\n readonly modelSignal = signal<T>({} as T);\n\n readonly options: FormlyFormOptions = {};\n\n readonly fields$ = this._fields.pipe(switchMapFilterMaybe(), distinctUntilChanged(), shareReplay(1));\n\n readonly stream$: Observable<DbxFormEvent> = this._reset.pipe(\n switchMap((lastResetAt) =>\n this.form.valueChanges.pipe(\n startWith(0),\n distinctUntilChanged(),\n throttleTime(50, undefined, { leading: true, trailing: true }),\n scanCount(-1),\n // update on validation changes too. Does not count towards changes since last reset.\n switchMap((changesSinceLastReset) => this.form.statusChanges.pipe(startWith(this.form.status), distinctUntilChanged()).pipe(map(() => changesSinceLastReset))),\n map((changesSinceLastResetCount: number) => ({\n changesSinceLastResetCount,\n isFormValid: this.form.status !== 'PENDING' && this.form.valid,\n isFormDisabled: this.form.disabled\n })),\n scan(\n (acc: DbxFormlyFormState, next: DbxFormlyFormState) => {\n // Pass forward valid if next was a disabled change/check, which changes angular form's isValid value.\n // If it was valid prior, then it should be valid now, unless we just reset, in which case it might not be valid.\n const valid = next.isFormValid || (next.isFormDisabled && acc.isFormValid && acc.changesSinceLastResetCount > 0);\n\n return {\n changesSinceLastResetCount: next.changesSinceLastResetCount,\n isFormValid: valid,\n isFormDisabled: next.isFormDisabled\n };\n },\n {\n changesSinceLastResetCount: 0,\n isFormValid: false,\n isFormDisabled: false\n }\n ),\n switchMap(({ changesSinceLastResetCount, isFormValid, isFormDisabled }) => {\n const nextState = () => {\n const isReset = changesSinceLastResetCount <= 1; // first emission after reset is the first value.\n const complete = isFormValid;\n\n const nextState: DbxFormEvent = {\n isComplete: complete,\n state: isReset ? DbxFormState.RESET : DbxFormState.USED,\n status: this.form.status,\n untouched: this.form.untouched,\n pristine: this.form.pristine,\n changesCount: changesSinceLastResetCount,\n lastResetAt,\n disabled: this.disabled,\n isDisabled: isFormDisabled\n };\n\n return nextState;\n };\n\n const state = nextState();\n\n if (isFormValid && this.form.untouched) {\n return timer(150, 200).pipe(\n // every 200 ms check if the form is now marked touched, then push a new state\n filter(() => this.form.touched),\n map(() => nextState()),\n // only push the new state once\n first(),\n // send the first value immediately\n startWith(state)\n );\n } else {\n return of(state);\n }\n })\n )\n ),\n shareReplay(1)\n );\n\n private readonly _fieldsSignal = toSignal(this.fields$, { initialValue: undefined });\n readonly fieldsSignal = computed(() => this._fieldsSignal() ?? []);\n\n ngOnInit(): void {\n this._dbxFormlyContext.setDelegate(this);\n\n const resyncDisabledState = () => {\n const isDisabled = BooleanStringKeyArrayUtility.isTrue(this._disabled.value);\n let change = false;\n\n if (this.form.disabled !== isDisabled) {\n toggleDisableFormControl(this.form, isDisabled, { emitEvent: true });\n change = true;\n }\n\n return change;\n };\n\n this._disabledSub.subscription = this._disabled.pipe(distinctUntilChanged(iterablesAreSetEquivalent)).subscribe(() => {\n resyncDisabledState();\n });\n\n // NOTE: Form sometimes becomes undisabled somewhere/somehow. Re-enforce the disabled state where necessary.\n this._enforceDisabledSub.subscription = merge([\n this._reset.pipe(\n map(() => 'RESET'),\n delay(50)\n ),\n this.form.statusChanges.pipe(throttleTime(50, undefined, { leading: true, trailing: true }))\n ]).subscribe((change) => {\n resyncDisabledState();\n });\n }\n\n override ngOnDestroy(): void {\n this._dbxFormlyContext.lockSet.onNextUnlock(() => {\n super.ngOnDestroy();\n this._dbxFormlyContext.clearDelegate(this);\n this._events.complete();\n this._fields.complete();\n this._reset.complete();\n this._forceUpdate.complete();\n this._disabled.complete();\n this._disabledSub.destroy();\n this._enforceDisabledSub.destroy();\n });\n }\n\n // MARK: Delegate\n init(initialize: DbxFormlyInitialize<T>): void {\n this._fields.next(initialize.fields);\n this._disabled.next(initialize.initialDisabled);\n }\n\n getValue(): Observable<T> {\n return of(this.form.value as T);\n }\n\n setValue(value: T): void {\n this.modelSignal.set(structuredClone(value) as T);\n\n if (this.options.updateInitialValue) {\n this.options.updateInitialValue();\n this.options.resetModel?.();\n }\n\n // Re-mark as untouched and pristine.\n this.form.markAsUntouched();\n this.form.markAsPristine();\n\n // After updating the value, if the form is still untouched mark it as pristine again.\n // Sometimes the values get marked as changed and break pristine before a user has time to interact.\n setTimeout(() => {\n if (this.form.untouched) {\n this.form.markAsPristine();\n }\n }, 500);\n\n // ping reset\n this.resetForm();\n }\n\n resetForm(): void {\n if (this.options.resetModel) {\n this.options.resetModel();\n }\n\n this._reset.next(new Date());\n }\n\n get isDisabled(): boolean {\n return BooleanStringKeyArrayUtility.isTrue(this.disabled);\n }\n\n get disabled(): BooleanStringKeyArray {\n return this._disabled.value;\n }\n\n getDisabled(): Observable<BooleanStringKeyArray> {\n return this._disabled.asObservable();\n }\n\n setDisabled(key?: DbxFormDisabledKey, disabled = true): void {\n const next = BooleanStringKeyArrayUtility.set(this.disabled, key ?? DEFAULT_FORM_DISABLED_KEY, disabled);\n this._disabled.next(next);\n }\n\n // MARK: Update\n forceFormUpdate(): void {\n this._forceUpdate.next();\n }\n}\n","import { distinctUntilChanged, filter, map, switchMap, combineLatest, Observable, EMPTY, exhaustMap, takeUntil, Subject, tap, shareReplay, throttleTime, Subscription } from 'rxjs';\nimport { Directive, OnDestroy, effect, inject, input } from '@angular/core';\nimport { AbstractSubscriptionDirective } from '@dereekb/dbx-core';\nimport { DbxFormState, DbxFormStateRef, DbxMutableForm } from '../form';\nimport { type Maybe } from '@dereekb/util';\nimport { asObservable, ObservableOrValue, cleanup, errorOnEmissionsInPeriod } from '@dereekb/rxjs';\n\nexport function dbxFormSourceObservable<T>(form: DbxMutableForm, inputObs: ObservableOrValue<T>, modeObs: Observable<DbxFormSourceDirectiveMode>): Observable<T> {\n return dbxFormSourceObservableFromStream(form.stream$, inputObs, modeObs);\n}\n\nexport function dbxFormSourceObservableFromStream<T>(streamObs: Observable<DbxFormStateRef>, inputObs: ObservableOrValue<T>, modeObs: ObservableOrValue<DbxFormSourceDirectiveMode>): Observable<T> {\n const value$ = asObservable(inputObs).pipe(shareReplay(1)); // catch/share the latest emission\n\n const state$ = streamObs.pipe(\n map((x) => x.state),\n distinctUntilChanged()\n );\n\n const mode$ = asObservable(modeObs).pipe(distinctUntilChanged());\n\n return combineLatest([mode$, value$]).pipe(\n map((x) => x[0]),\n distinctUntilChanged(),\n switchMap((mode: DbxFormSourceDirectiveMode) => {\n if (mode === 'reset') {\n // reset only\n return state$.pipe(\n exhaustMap((state: DbxFormState) => {\n if (state === DbxFormState.RESET) {\n let firstValueSent = false;\n const doneSubject = new Subject();\n\n return combineLatest([value$, state$]).pipe(\n map(([value, state]) => {\n if (!firstValueSent || state === DbxFormState.RESET) {\n return [value, true] as [T, boolean]; // always forward the first value.\n } else {\n return [value, false] as [T, boolean];\n }\n }),\n tap(([_, send]) => {\n firstValueSent = true;\n if (!send) {\n doneSubject.next(undefined);\n }\n }),\n filter(([_, send]) => send),\n map(([value, _]) => value),\n takeUntil(doneSubject),\n cleanup(() => {\n doneSubject.complete();\n })\n );\n } else {\n return EMPTY;\n }\n })\n );\n } else {\n // pass any updated value while not initializing.\n return state$.pipe(\n map((x) => x === DbxFormState.INITIALIZING),\n distinctUntilChanged(),\n switchMap((initializing: boolean) => {\n if (initializing) {\n return EMPTY;\n } else {\n let valueObs = value$;\n\n if (mode === 'always') {\n valueObs = valueObs.pipe(\n throttleTime(10, undefined, { leading: true, trailing: true }),\n errorOnEmissionsInPeriod({\n period: 1000,\n maxEmissionsPerPeriod: 50,\n onError: () => {\n console.error('dbxFormSourceObservableFromStream: Error thrown due to too many emissions. There may be an unintentional loop being triggered by dbxFormSource. Typically this can occur in cases where the dbxFormSource directive is used at the same time as dbxFormValueChange directive and the same value is being pushed.');\n }\n })\n );\n }\n\n return valueObs;\n }\n })\n );\n }\n })\n );\n}\n\n/**\n * DbxFormSourceDirective modes that define when to copy data from the source.\n *\n * - reset: only copy data when the form is reset.\n * - always: always copy data when the data observable emits a value. Has a throttle of 20ms to prevent too many emissions. If emissions occur in a manner that appears to be a loop (more than 30 emissions in 1 second), then an error is thrown and warning printed to the console.\n * - every: equal to always, but has no throttle or error message warning.\n */\nexport type DbxFormSourceDirectiveMode = 'reset' | 'always' | 'every';\n\n/**\n * Used with a FormComponent to set the value based on the input value.\n */\n@Directive({\n selector: '[dbxFormSource]',\n standalone: true\n})\nexport class DbxFormSourceDirective<T = unknown> extends AbstractSubscriptionDirective implements OnDestroy {\n readonly form = inject(DbxMutableForm<T>, { host: true });\n\n readonly dbxFormSourceMode = input<Maybe<DbxFormSourceDirectiveMode>>();\n readonly dbxFormSource = input<Maybe<ObservableOrValue<Maybe<Partial<T>>>>>();\n\n protected readonly _setFormSourceObservableEffect = effect(\n () => {\n const formSource = this.dbxFormSource();\n const mode: DbxFormSourceDirectiveMode = this.dbxFormSourceMode() ?? 'reset';\n\n let subscription: Maybe<Subscription>;\n\n if (formSource) {\n subscription = dbxFormSourceObservableFromStream(this.form.stream$, formSource, mode).subscribe((x) => {\n this.form.setValue(x);\n });\n }\n\n this.sub = subscription;\n },\n {\n allowSignalWrites: true\n }\n );\n}\n","import { Component, inject, OnInit, OnDestroy } from '@angular/core';\nimport { AbstractDialogDirective, DbxDialogContentDirective, DbxDialogContentCloseComponent, DbxActionModule, DbxButtonModule, DbxButtonStyle } from '@dereekb/dbx-web';\nimport { MatDialog, MatDialogConfig, MatDialogRef } from '@angular/material/dialog';\nimport { Maybe } from '@dereekb/util';\nimport { asObservableFromGetter, MaybeObservableOrValueGetter, ObservableOrValueGetter, SubscriptionObject, WorkUsingContext } from '@dereekb/rxjs';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { distinctUntilChanged } from 'rxjs';\nimport { DbxButtonDisplay } from '@dereekb/dbx-core';\nimport { DbxFormlyContext, provideFormlyContext } from '../../formly/formly.context';\nimport { DbxFormlyComponent } from '../../formly/formly.form.component';\nimport { DbxFormSourceDirective } from '../io/form.input.directive';\nimport { DbxActionFormDirective } from './form.action.directive';\n\nexport interface DbxFormActionDialogComponentButtonConfig extends DbxButtonDisplay, DbxButtonStyle {}\n\nexport interface DbxFormActionDialogComponentConfig<O> {\n /**\n * Header text for the dialog.\n */\n readonly header: string;\n /**\n * Used for retrieving the fields to display in the dialog.\n */\n readonly fields: ObservableOrValueGetter<FormlyFieldConfig[]>;\n /**\n * Initial value for the form.\n */\n readonly initialValue?: MaybeObservableOrValueGetter<O>;\n /**\n * Text/Icon for the submit button.\n */\n readonly submitButtonConfig?: DbxFormActionDialogComponentButtonConfig;\n /**\n * Dialog-specific configuration\n */\n readonly dialog?: Omit<MatDialogConfig, 'data'>;\n}\n\n/**\n *\n */\n@Component({\n template: `\n <dbx-dialog-content dbxAction [dbxActionHandler]=\"handleSubmitValue\" class=\"dbx-dialog-content-with-header\">\n <h3 class=\"dbx-dialog-content-header\">{{ header }}</h3>\n <dbx-dialog-content-close (close)=\"close()\"></dbx-dialog-content-close>\n <div>\n <dbx-formly dbxActionForm [dbxFormSource]=\"initialValue$\"></dbx-formly>\n <dbx-button dbxActionButton [buttonDisplay]=\"submitButtonConfig\" [buttonStyle]=\"submitButtonConfig\" [raised]=\"true\"></dbx-button>\n </div>\n </dbx-dialog-content>\n `,\n standalone: true,\n providers: [provideFormlyContext()],\n imports: [DbxDialogContentDirective, DbxActionModule, DbxButtonModule, DbxDialogContentCloseComponent, DbxFormlyComponent, DbxFormSourceDirective, DbxActionFormDirective, DbxFormlyComponent]\n})\nexport class DbxFormActionDialogComponent<O> extends AbstractDialogDirective<O, DbxFormActionDialogComponentConfig<O>> implements OnInit, OnDestroy {\n private readonly _fieldsSub = new SubscriptionObject();\n\n readonly context = inject(DbxFormlyContext<O>, { self: true });\n readonly fields$ = asObservableFromGetter(this.data.fields);\n readonly initialValue$ = asObservableFromGetter(this.data.initialValue);\n\n readonly header = this.data.header;\n\n readonly submitButtonConfig = {\n text: 'Submit',\n ...this.data.submitButtonConfig\n };\n\n override ngOnInit(): void {\n super.ngOnInit();\n this._fieldsSub.subscription = this.fields$.pipe(distinctUntilChanged()).subscribe((fields) => {\n this.context.fields = fields;\n });\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._fieldsSub.destroy();\n }\n\n readonly handleSubmitValue: WorkUsingContext<O> = (value, context) => {\n context.success();\n this.close(value);\n };\n\n static openDialogWithForm<O>(matDialog: MatDialog, config: DbxFormActionDialogComponentConfig<O>): MatDialogRef<DbxFormActionDialogComponent<O>, Maybe<O>> {\n const dialogRef = matDialog.open(DbxFormActionDialogComponent<O>, {\n width: '90vw',\n maxHeight: '300px',\n maxWidth: '600px',\n ...config.dialog,\n data: config\n });\n\n return dialogRef;\n }\n}\n","import { Observable } from 'rxjs';\nimport { Directive, OnDestroy, inject, input } from '@angular/core';\nimport { AbstractSubscriptionDirective } from '@dereekb/dbx-core';\nimport { DbxMutableForm } from '../../form/form';\nimport { LoadingState, MaybeObservableOrValue, filterMaybe, maybeValueFromObservableOrValue, valueFromFinishedLoadingState } from '@dereekb/rxjs';\nimport { dbxFormSourceObservableFromStream, DbxFormSourceDirectiveMode } from './form.input.directive';\nimport { Maybe } from '@dereekb/util';\nimport { toObservable } from '@angular/core/rxjs-interop';\n\nconst DEFAULT_DBX_FORM_LOADING_SOURCE_DIRECTIVE_MODE: DbxFormSourceDirectiveMode = 'reset';\n\n/**\n * Used with a FormComponent to set the value from a LoadingState when the value is available.\n *\n * Only passes non-null values from the source.\n */\n@Directive({\n selector: '[dbxFormLoadingSource]',\n standalone: true\n})\nexport class DbxFormLoadingSourceDirective<T extends object = object> extends AbstractSubscriptionDirective implements OnDestroy {\n readonly form = inject(DbxMutableForm<T>, { host: true });\n\n readonly dbxFormLoadingSourceMode = input<DbxFormSourceDirectiveMode, Maybe<DbxFormSourceDirectiveMode>>(DEFAULT_DBX_FORM_LOADING_SOURCE_DIRECTIVE_MODE, { transform: (x) => x ?? DEFAULT_DBX_FORM_LOADING_SOURCE_DIRECTIVE_MODE });\n readonly dbxFormLoadingSource = input<MaybeObservableOrValue<LoadingState<T>>>();\n\n readonly mode$ = toObservable(this.dbxFormLoadingSourceMode);\n readonly source$: Observable<Maybe<T>> = toObservable(this.dbxFormLoadingSource).pipe(maybeValueFromObservableOrValue(), filterMaybe(), valueFromFinishedLoadingState());\n\n constructor() {\n super();\n this.sub = dbxFormSourceObservableFromStream(this.form.stream$, this.source$, this.mode$).subscribe((x) => {\n this.form.setValue(x);\n });\n }\n}\n","import { Directive, OnInit, OnDestroy, inject, output } from '@angular/core';\nimport { AbstractSubscriptionDirective } from '@dereekb/dbx-core';\nimport { type Maybe } from '@dereekb/util';\nimport { first, mergeMap, delay, map } from 'rxjs';\nimport { DbxForm } from '../form';\n\n/**\n * Used to see form value changes.\n *\n * Emits undefined when the form is incomplete, and the value when the form is complete.\n */\n@Directive({\n selector: '[dbxFormValueChange]',\n standalone: true\n})\nexport class DbxFormValueChangeDirective<T> extends AbstractSubscriptionDirective implements OnInit, OnDestroy {\n readonly form = inject(DbxForm<T>, { host: true });\n readonly dbxFormValueChange = output<Maybe<T>>();\n\n ngOnInit(): void {\n this.sub = this.form.stream$\n .pipe(\n mergeMap((x) =>\n this.form.getValue().pipe(\n first(),\n map((value) => ({ isComplete: x.isComplete, value }))\n )\n ),\n delay(0)\n )\n .subscribe(({ isComplete, value }) => {\n if (isComplete) {\n this.dbxFormValueChange.emit(value);\n } else {\n this.dbxFormValueChange.emit(undefined);\n }\n });\n }\n}\n","import { NgModule } from '@angular/core';\nimport { DbxFormValueChangeDirective } from './form.change.directive';\nimport { DbxFormSourceDirective } from './form.input.directive';\nimport { DbxFormLoadingSourceDirective } from './form.loading.directive';\n\nconst importsAndExports = [DbxFormSourceDirective, DbxFormValueChangeDirective, DbxFormLoadingSourceDirective];\n\n/**\n * @deprecated import the directives directly instead.\n *\n * @see DbxFormSourceDirective\n * @see DbxFormValueChangeDirective\n * @see DbxFormLoadingSourceDirective\n */\n@NgModule({\n imports: importsAndExports,\n exports: importsAndExports\n})\nexport class DbxFormIoModule {}\n","import { type AbstractControl } from '@angular/forms';\nimport { type Maybe } from '@dereekb/util';\nimport { type Observable, startWith } from 'rxjs';\n\n/**\n * A FormGroup/AbstractControl path to a specific control.\n */\nexport type FormControlPath = string;\n\n/**\n * Streams a value from the input control at the given path. If no path is specified, streams the value from the control.\n *\n * @param fromControl\n * @param path\n * @returns\n */\nexport function streamValueFromControl<T>(fromControl: AbstractControl, path?: FormControlPath): Maybe<Observable<T>> {\n const control = path ? fromControl.get(path) : fromControl;\n return control?.valueChanges.pipe(startWith(control.value));\n}\n","import { DbxFormIoModule } from './io/form.io.module';\nimport { DbxFormActionModule } from './action/form.action.module';\nimport { DbxFormActionTransitionModule } from './action/transition/form.action.transition.module';\nimport { NgModule } from '@angular/core';\n\n@NgModule({\n exports: [DbxFormActionTransitionModule, DbxFormActionModule, DbxFormIoModule]\n})\nexport class DbxFormModule {}\n","import { type FieldTypeConfig } from '@ngx-formly/core';\nimport { type ValidationMessageOption } from '@ngx-formly/core/lib/models';\n\nexport function minLengthValidationMessage(err: unknown, field: FieldTypeConfig) {\n return `Should have atleast ${field.props.minLength} characters.`;\n}\n\nexport function maxLengthValidationMessage(err: unknown, field: FieldTypeConfig) {\n return `This value should be less than ${field.props.maxLength} characters.`;\n}\n\nexport function minValidationMessage(err: unknown, field: FieldTypeConfig) {\n return `This value should be more than or equal to ${field.props.min}.`;\n}\n\nexport function maxValidationMessage(err: unknown, field: FieldTypeConfig) {\n return `This value should be less than or equal to ${field.props.max}.`;\n}\n\nexport const REQUIRED_VALIDATION_MESSAGE = { name: 'required', message: 'This field is required.' };\nexport const MIN_LENGTH_VALIDATION_MESSAGE = { name: 'minLength', message: minLengthValidationMessage } as ValidationMessageOption;\nexport const MAX_LENGTH_VALIDATION_MESSAGE = { name: 'maxLength', message: maxLengthValidationMessage } as ValidationMessageOption;\nexport const MIN_VALIDATION_MESSAGE = { name: 'min', message: minValidationMessage } as ValidationMessageOption;\nexport const MAX_VALIDATION_MESSAGE = { name: 'max', message: maxValidationMessage } as ValidationMessageOption;\nexport const INVALID_PHONE_NUMBER_MESSAGE = { name: 'validatePhoneNumber', message: 'This is not a valid phone number.' };\nexport const INVALID_PHONE_NUMBER_EXTENSION_MESSAGE = { name: 'validatePhoneNumberExtension', message: 'This is not a valid phone number extension.' };\n\nexport function defaultValidationMessages(): ValidationMessageOption[] {\n return [REQUIRED_VALIDATION_MESSAGE, MIN_LENGTH_VALIDATION_MESSAGE, MAX_LENGTH_VALIDATION_MESSAGE, MIN_VALIDATION_MESSAGE, MAX_VALIDATION_MESSAGE, INVALID_PHONE_NUMBER_MESSAGE, INVALID_PHONE_NUMBER_EXTENSION_MESSAGE];\n}\n","import { ChangeDetectionStrategy, Component, signal } from '@angular/core';\nimport { ChecklistItemDisplayContent, ChecklistItemFieldDisplayComponent } from './checklist.item';\nimport { type Maybe } from '@dereekb/util';\n\n// MARK: Default\n@Component({\n template: `\n @if (displayContentSignal()) {\n <div class=\"dbx-default-checklist-item-field\">\n @if (displayContentSignal()?.label) {\n <div class=\"item-label\">{{ displayContentSignal()?.label }}</div>\n }\n @if (displayContentSignal()?.sublabel) {\n <div class=\"item-sublabel\">{{ displayContentSignal()?.sublabel }}</div>\n }\n @if (displayContentSignal()?.description) {\n <div class=\"dbx-hint item-description\">{{ displayContentSignal()?.description }}</div>\n }\n </div>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: []\n})\nexport class DbxDefaultChecklistItemFieldDisplayComponent<T = unknown> implements ChecklistItemFieldDisplayComponent<T> {\n readonly _displayContentSignal = signal<Maybe<ChecklistItemDisplayContent<T>>>(undefined);\n readonly displayContentSignal = this._displayContentSignal.asReadonly();\n\n setDisplayContent(displayContent: ChecklistItemDisplayContent<T>): void {\n this._displayContentSignal.set(displayContent);\n }\n}\n","import { ChangeDetectionStrategy, Component, OnInit, Type, inject, signal } from '@angular/core';\nimport { DbxInjectionComponentConfig, AbstractSubscriptionDirective, DbxInjectionComponent } from '@dereekb/dbx-core';\nimport { switchMapFilterMaybe } from '@dereekb/rxjs';\nimport { shareReplay, distinctUntilChanged, map, Observable } from 'rxjs';\nimport { ValidationErrors, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { FieldType, FieldTypeConfig, FormlyFieldProps } from '@ngx-formly/core';\nimport { ChecklistItemFieldDisplayComponent, ChecklistItemDisplayContent } from './checklist.item';\nimport { DbxDefaultChecklistItemFieldDisplayComponent } from './checklist.item.field.content.default.component';\nimport { type Maybe } from '@dereekb/util';\nimport { toSignal, toObservable } from '@angular/core/rxjs-interop';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatRippleModule } from '@angular/material/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { DbxAnchorComponent } from '@dereekb/dbx-web';\n\n@Component({\n selector: 'dbx-checklist-item-content-component',\n template: `\n <dbx-injection [config]=\"config\"></dbx-injection>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [DbxInjectionComponent]\n})\nexport class DbxChecklistItemContentComponent<T = unknown> extends AbstractSubscriptionDirective {\n readonly checklistItemFieldComponent = inject(DbxChecklistItemFieldComponent<T>);\n\n readonly config: DbxInjectionComponentConfig<ChecklistItemFieldDisplayComponent<T>> = {\n componentClass: this.checklistItemFieldComponent.componentClass,\n init: (instance) => {\n this.sub = this.checklistItemFieldComponent.displayContent$.subscribe((content: ChecklistItemDisplayContent<T>) => {\n instance.setDisplayContent(content);\n });\n }\n };\n}\n\nexport interface DbxChecklistItemFieldProps<T = unknown> extends FormlyFieldProps {\n /**\n * Observable used to retrieve content to display for the item.\n */\n readonly displayContent: Observable<ChecklistItemDisplayContent<T>>;\n /**\n * Custom component class to use by default.\n */\n readonly componentClass?: Type<ChecklistItemFieldDisplayComponent<T>>;\n}\n\n@Component({\n templateUrl: 'checklist.item.field.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [ReactiveFormsModule, MatCheckboxModule, DbxAnchorComponent, MatRippleModule, MatIconModule, DbxChecklistItemContentComponent]\n})\nexport class DbxChecklistItemFieldComponent<T = unknown> extends FieldType<FieldTypeConfig<DbxChecklistItemFieldProps<T>>> implements OnInit {\n private readonly _displayContentObs = signal<Maybe<Observable<ChecklistItemDisplayContent<T>>>>(undefined);\n\n readonly displayContent$: Observable<ChecklistItemDisplayContent<T>> = toObservable(this._displayContentObs).pipe(switchMapFilterMaybe(), distinctUntilChanged(), shareReplay(1));\n\n readonly anchor$ = this.displayContent$.pipe(\n map((x: ChecklistItemDisplayContent<T>) => x.anchor),\n shareReplay(1)\n );\n\n readonly rippleDisabled$ = this.displayContent$.pipe(\n map((x: ChecklistItemDisplayContent<T>) => x.ripple === false || (x.ripple !== true && !x.anchor)),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly anchorSignal = toSignal(this.anchor$);\n readonly rippleDisabledSignal = toSignal(this.rippleDisabled$, { initialValue: false });\n\n get formGroup(): FormGroup {\n return this.form as FormGroup;\n }\n\n get formControlName(): string {\n return this.key as string;\n }\n\n get label(): Maybe<string> {\n return this.props.label;\n }\n\n get description(): Maybe<string> {\n return this.props.description;\n }\n\n get required(): Maybe<boolean> {\n return this.props.required;\n }\n\n get checklistField(): DbxChecklistItemFieldProps<T> {\n return this.props;\n }\n\n get errors(): Maybe<ValidationErrors> {\n return this.field.formControl?.errors;\n }\n\n get componentClass(): Type<ChecklistItemFieldDisplayComponent<T>> {\n return this.checklistField.componentClass ?? DbxDefaultChecklistItemFieldDisplayComponent;\n }\n\n ngOnInit() {\n this._displayContentObs.set(this.checklistField.displayContent);\n }\n}\n","<div class=\"dbx-checklist-item-wrapper\" [formGroup]=\"formGroup\">\n @if (label) {\n <div class=\"dbx-checklist-item-label\">{{ label }}</div>\n }\n <div class=\"dbx-checklist-item\">\n <div class=\"dbx-checklist-item-check\">\n <mat-checkbox [formControlName]=\"formControlName\"></mat-checkbox>\n </div>\n <div class=\"dbx-checklist-item-content-wrapper\">\n <dbx-anchor [block]=\"true\" [anchor]=\"anchorSignal()\">\n <div class=\"dbx-checklist-item-content\" matRipple [matRippleDisabled]=\"rippleDisabledSignal()\">\n <dbx-checklist-item-content-component></dbx-checklist-item-content-component>\n <span class=\"spacer\"></span>\n @if (!rippleDisabledSignal()) {\n <mat-icon>navigate_next</mat-icon>\n }\n </div>\n </dbx-anchor>\n </div>\n </div>\n @if (description) {\n <div class=\"dbx-hint\">{{ description }}</div>\n }\n</div>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { FieldWrapper, FormlyFieldConfig, FormlyFieldProps } from '@ngx-formly/core';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\n\nexport interface DbxFormInfoConfig extends FormlyFieldProps {\n readonly onInfoClick: () => void;\n}\n\n@Component({\n template: `\n <div class=\"dbx-form-info-wrapper dbx-flex-bar\">\n <div class=\"dbx-form-info-wrapper-content dbx-flex-grow\">\n <ng-container #fieldComponent></ng-container>\n </div>\n <div class=\"dbx-form-info-wrapper-info dbx-flex-noshrink dbx-flex-column dbx-flex-center\">\n <button mat-icon-button [attr.aria-label]=\"'show info button for ' + (to.label || 'section')\" (click)=\"onInfoClick()\">\n <mat-icon>info</mat-icon>\n </button>\n </div>\n </div>\n `,\n imports: [MatIconButton, MatIconModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFormInfoWrapperComponent extends FieldWrapper<FormlyFieldConfig<DbxFormInfoConfig>> {\n get infoWrapper(): DbxFormInfoConfig {\n return this.props;\n }\n\n onInfoClick(): void {\n this.infoWrapper.onInfoClick();\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { DbxSectionHeaderConfig, DbxSectionLayoutModule } from '@dereekb/dbx-web';\nimport { type Maybe } from '@dereekb/util';\nimport { FieldWrapper, FormlyFieldConfig } from '@ngx-formly/core';\n\nexport type DbxFormSectionConfig = DbxSectionHeaderConfig;\n\n@Component({\n selector: 'dbx-form-section-wrapper',\n template: `\n <dbx-section [headerConfig]=\"headerConfig\">\n <ng-container #fieldComponent></ng-container>\n </dbx-section>\n `,\n imports: [DbxSectionLayoutModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFormSectionWrapperComponent extends FieldWrapper<FormlyFieldConfig<DbxFormSectionConfig>> {\n get headerConfig(): Maybe<DbxSectionHeaderConfig> {\n return this.props;\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { DbxFlexGroupDirective, ScreenMediaWidthType } from '@dereekb/dbx-web';\nimport { FieldWrapper, FormlyFieldConfig } from '@ngx-formly/core';\n\nexport interface DbxFlexWrapperConfig {\n /**\n * Breakpoint based on the screen width.\n */\n readonly breakpoint?: ScreenMediaWidthType;\n /**\n * Whether or not to use relative sizing.\n */\n readonly relative?: boolean;\n /**\n * Whether or not to break to a new column when the breakpoint is reached.\n */\n readonly breakToColumn?: boolean;\n}\n\n@Component({\n template: `\n <div class=\"dbx-form-flex-section\" dbxFlexGroup [content]=\"false\" [relative]=\"relative\" [breakpoint]=\"breakpoint\" [breakToColumn]=\"breakToColumn\">\n <ng-container #fieldComponent></ng-container>\n </div>\n `,\n imports: [DbxFlexGroupDirective],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFormFlexWrapperComponent extends FieldWrapper<FormlyFieldConfig<DbxFlexWrapperConfig>> {\n get flexWrapper(): DbxFlexWrapperConfig {\n return this.props;\n }\n\n get breakpoint() {\n return this.flexWrapper.breakpoint;\n }\n\n get relative() {\n return this.flexWrapper.relative ?? false;\n }\n\n get breakToColumn() {\n return this.flexWrapper.breakToColumn ?? false;\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { DbxSectionHeaderConfig, DbxSubSectionComponent } from '@dereekb/dbx-web';\nimport { type Maybe } from '@dereekb/util';\nimport { FieldTypeConfig, FieldWrapper } from '@ngx-formly/core';\n\nexport type DbxFormSubsectionConfig = DbxSectionHeaderConfig;\n\n@Component({\n selector: 'dbx-form-subsection-wrapper',\n template: `\n <dbx-subsection [headerConfig]=\"headerConfig\">\n <ng-container #fieldComponent></ng-container>\n </dbx-subsection>\n `,\n imports: [DbxSubSectionComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFormSubsectionWrapperComponent extends FieldWrapper<FieldTypeConfig<DbxFormSubsectionConfig>> {\n get headerConfig(): Maybe<DbxSectionHeaderConfig> {\n return this.props;\n }\n}\n","import { Maybe, objectIsEmpty } from '@dereekb/util';\nimport { FieldWrapper, FormlyFieldProps, FormlyFieldConfig } from '@ngx-formly/core';\nimport { map, shareReplay, startWith, switchMap, BehaviorSubject, of, distinctUntilChanged } from 'rxjs';\nimport { Directive, OnDestroy, OnInit } from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\nimport { filterMaybe } from '@dereekb/rxjs';\nimport { toSignal } from '@angular/core/rxjs-interop';\n\nexport interface AbstractFormExpandSectionConfig<T extends object = object> extends Pick<FormlyFieldProps, 'label'> {\n expandLabel?: string;\n /**\n * Optional function to use for checking value existence.\n */\n hasValueFn?: (value: T) => boolean;\n}\n\nexport const DEFAULT_HAS_VALUE_FN = (x: object) => !objectIsEmpty(x);\n\n@Directive()\nexport class AbstractFormExpandSectionWrapperDirective<T extends object = object, S extends AbstractFormExpandSectionConfig<T> = AbstractFormExpandSectionConfig<T>> extends FieldWrapper<FormlyFieldConfig<S>> implements OnInit, OnDestroy {\n protected readonly _formControlObs = new BehaviorSubject<Maybe<AbstractControl>>(undefined);\n protected readonly _toggleOpen = new BehaviorSubject<Maybe<boolean>>(undefined);\n\n readonly formControl$ = this._formControlObs.pipe(filterMaybe());\n\n readonly show$ = this._toggleOpen.pipe(\n switchMap((toggleOpen: Maybe<boolean>) => {\n if (toggleOpen != null) {\n return of(toggleOpen);\n } else {\n return this.hasValue$;\n }\n }),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly hasValue$ = this.formControl$.pipe(\n switchMap((x) =>\n x.valueChanges.pipe(\n startWith(x.value),\n map((value) => {\n return this.hasValueFn(value);\n }),\n shareReplay(1)\n )\n )\n );\n\n readonly showSignal = toSignal(this.show$, { initialValue: false });\n readonly hasValueSignal = toSignal(this.hasValue$, { initialValue: false });\n\n get expandSection(): S {\n return this.props;\n }\n\n get hasValueFn(): (value: T) => boolean {\n return this.expandSection.hasValueFn ?? (DEFAULT_HAS_VALUE_FN as (value: T) => boolean);\n }\n\n get expandLabel(): Maybe<string> {\n let label: Maybe<string> = this.expandSection.expandLabel ?? this.field.props?.label;\n\n if (label == null) {\n const firstFieldGroup = this.field.fieldGroup?.[0];\n\n if (firstFieldGroup) {\n label = firstFieldGroup.props?.label ?? (firstFieldGroup.key as string);\n }\n }\n\n return label;\n }\n\n open(): void {\n this._toggleOpen.next(true);\n }\n\n ngOnInit(): void {\n this._formControlObs.next(this.formControl);\n }\n\n ngOnDestroy(): void {\n this._toggleOpen.complete();\n this._formControlObs.complete();\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { AbstractFormExpandSectionWrapperDirective, AbstractFormExpandSectionConfig } from './expand.wrapper.delegate';\n\nexport type DbxFormExpandWrapperButtonType = 'button' | 'text';\n\nexport interface DbxFormExpandWrapperConfig<T extends object = object> extends AbstractFormExpandSectionConfig<T> {\n readonly buttonType?: DbxFormExpandWrapperButtonType;\n}\n\n/**\n * Section that is expandable by a button until a value is set, or the button is pressed.\n */\n@Component({\n template: `\n @if (showSignal()) {\n <ng-container #fieldComponent></ng-container>\n } @else {\n <span class=\"dbx-form-expand-wrapper-button\" (click)=\"open()\">{{ expandLabel }}</span>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFormExpandWrapperComponent<T extends object = object> extends AbstractFormExpandSectionWrapperDirective<T, DbxFormExpandWrapperConfig<T>> {\n get buttonType(): DbxFormExpandWrapperButtonType {\n return this.expandSection.buttonType ?? 'button';\n }\n}\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\nimport { FieldTypeConfig, FieldWrapper } from '@ngx-formly/core';\nimport { delay } from 'rxjs';\n\n/**\n * Wrapper than sets the field to \"touched\" when the value changes and the field is not pristine.\n */\n@Component({\n template: `\n <ng-container #fieldComponent></ng-container>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class AutoTouchFieldWrapperComponent extends FieldWrapper<FieldTypeConfig> implements OnInit {\n ngOnInit(): void {\n this.formControl.valueChanges.pipe(delay(200)).subscribe(() => {\n if (!this.formControl.pristine && this.formControl.untouched) {\n this.formControl.markAsTouched();\n this.formControl.updateValueAndValidity();\n }\n });\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { type Maybe } from '@dereekb/util';\nimport { first, shareReplay, switchMap, Observable, of } from 'rxjs';\nimport { AbstractFormExpandSectionConfig, AbstractFormExpandSectionWrapperDirective } from './expand.wrapper.delegate';\nimport { MatSlideToggle } from '@angular/material/slide-toggle';\nimport { toSignal } from '@angular/core/rxjs-interop';\n\nexport interface DbxFormToggleWrapperConfig<T extends object = object> extends AbstractFormExpandSectionConfig<T> {\n toggleLabelObs?: (open: Maybe<boolean>) => Observable<string>;\n}\n\n/**\n * Section that can be expanded by a button until a value is set, or the button is pressed.\n */\n@Component({\n template: `\n <div class=\"dbx-form-toggle-wrapper\">\n <div class=\"dbx-form-toggle-wrapper-toggle\">\n <mat-slide-toggle [checked]=\"showSignal()\" (toggleChange)=\"onToggleChange()\">{{ slideLabelSignal() }}</mat-slide-toggle>\n </div>\n @if (showSignal()) {\n <ng-container #fieldComponent></ng-container>\n }\n </div>\n `,\n imports: [MatSlideToggle],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFormToggleWrapperComponent<T extends object = object> extends AbstractFormExpandSectionWrapperDirective<T, DbxFormToggleWrapperConfig> {\n readonly slideLabel$ = this._toggleOpen.pipe(\n switchMap((x) => {\n if (this.expandSection?.toggleLabelObs) {\n return this.expandSection?.toggleLabelObs(x);\n } else {\n return of(this.expandLabel);\n }\n }),\n shareReplay(1)\n );\n\n readonly slideLabelSignal = toSignal(this.slideLabel$, { initialValue: '' });\n\n onToggleChange(): void {\n this.show$.pipe(first()).subscribe((show) => {\n this._toggleOpen.next(!show);\n });\n }\n}\n","import { NgClass, NgStyle } from '@angular/common';\nimport { OnInit, OnDestroy, Component, ChangeDetectionStrategy } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { asObservable, ObservableOrValue, switchMapMaybeDefault } from '@dereekb/rxjs';\nimport { type Maybe } from '@dereekb/util';\nimport { FieldWrapper, FormlyFieldConfig } from '@ngx-formly/core';\nimport { BehaviorSubject, Observable, shareReplay } from 'rxjs';\n\nexport type DbxFormStyleObject = { [styleClass: string]: any };\n\nexport interface DbxFormStyleWrapperConfig {\n styleGetter?: Maybe<ObservableOrValue<DbxFormStyleObject>>;\n classGetter?: Maybe<ObservableOrValue<string>>;\n}\n\n@Component({\n template: `\n <div class=\"dbx-form-style-wrapper\" [ngClass]=\"classSignal()\" [ngStyle]=\"styleSignal()\">\n <ng-container #fieldComponent></ng-container>\n </div>\n `,\n imports: [NgClass, NgStyle],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFormStyleWrapperComponent extends FieldWrapper<FormlyFieldConfig<DbxFormStyleWrapperConfig>> implements OnInit, OnDestroy {\n private readonly _style = new BehaviorSubject<Maybe<Observable<DbxFormStyleObject>>>(undefined);\n private readonly _class = new BehaviorSubject<Maybe<Observable<string>>>(undefined);\n\n readonly style$ = this._style.pipe(switchMapMaybeDefault({}), shareReplay(1));\n readonly class$ = this._class.pipe(switchMapMaybeDefault(''), shareReplay(1));\n\n readonly styleSignal = toSignal(this.style$);\n readonly classSignal = toSignal(this.class$);\n\n get styleGetter(): Maybe<ObservableOrValue<DbxFormStyleObject>> {\n return this.props.styleGetter;\n }\n\n get classGetter(): Maybe<ObservableOrValue<string>> {\n return this.props.classGetter;\n }\n\n ngOnInit(): void {\n if (this.styleGetter) {\n this._style.next(asObservable(this.styleGetter));\n }\n\n if (this.classGetter) {\n this._class.next(asObservable(this.classGetter));\n }\n }\n\n ngOnDestroy(): void {\n this._style.complete();\n this._class.complete();\n }\n}\n","import { OnInit, OnDestroy, Component, ChangeDetectionStrategy } from '@angular/core';\nimport { DbxLoadingComponent } from '@dereekb/dbx-web';\nimport { SimpleLoadingContext, SubscriptionObject } from '@dereekb/rxjs';\nimport { FieldWrapper, FormlyFieldConfig } from '@ngx-formly/core';\n\n/**\n * No configurable value for now.\n */\nexport type DbxFormWorkingWrapperConfig = object;\n\n/**\n * Adds a loading bar to help signify asynchronos work is occuring.\n *\n * By default shows loading during asynchronous validation of a field (FormControl status is \"PENDING\")\n */\n@Component({\n template: `\n <div class=\"dbx-form-working-wrapper\">\n <ng-container #fieldComponent></ng-container>\n <dbx-loading [linear]=\"true\" [context]=\"workingContext\"></dbx-loading>\n </div>\n `,\n imports: [DbxLoadingComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFormWorkingWrapperComponent extends FieldWrapper<FormlyFieldConfig<DbxFormWorkingWrapperConfig>> implements OnInit, OnDestroy {\n readonly sub = new SubscriptionObject();\n readonly workingContext = new SimpleLoadingContext(false);\n\n ngOnInit(): void {\n this.sub.subscription = this.formControl?.statusChanges.subscribe({\n next: (x) => this.workingContext.setLoading(x === 'PENDING')\n });\n }\n\n ngOnDestroy(): void {\n this.workingContext.destroy();\n this.sub.destroy();\n }\n}\n","export const AUTO_TOUCH_WRAPPER_KEY = 'autotouch';\nexport const TOGGLE_WRAPPER_KEY = 'toggle';\nexport const SECTION_WRAPPER_KEY = 'section';\nexport const SUBSECTION_WRAPPER_KEY = 'subsection';\nexport const INFO_WRAPPER_KEY = 'info';\nexport const FLEX_WRAPPER_KEY = 'flex';\nexport const STYLE_WRAPPER_KEY = 'style';\nexport const WORKING_WRAPPER_KEY = 'working';\nexport const EXPAND_WRAPPER_KEY = 'expand';\n","import { NgModule } from '@angular/core';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxFormInfoWrapperComponent } from './info.wrapper.component';\nimport { DbxFormSectionWrapperComponent } from './section.wrapper.component';\nimport { DbxFormFlexWrapperComponent } from './flex.wrapper.component';\nimport { DbxFormSubsectionWrapperComponent } from './subsection.wrapper.component';\nimport { DbxFormExpandWrapperComponent } from './expand.wrapper.component';\nimport { AutoTouchFieldWrapperComponent } from './autotouch.wrapper.component';\nimport { DbxFormToggleWrapperComponent } from './toggle.wrapper.component';\nimport { DbxFormStyleWrapperComponent } from './style.wrapper.component';\nimport { DbxFormWorkingWrapperComponent } from './working.wrapper.component';\nimport { AUTO_TOUCH_WRAPPER_KEY, EXPAND_WRAPPER_KEY, FLEX_WRAPPER_KEY, INFO_WRAPPER_KEY, SECTION_WRAPPER_KEY, STYLE_WRAPPER_KEY, SUBSECTION_WRAPPER_KEY, TOGGLE_WRAPPER_KEY, WORKING_WRAPPER_KEY } from './wrapper.key';\nimport { FormlyMaterialModule } from '@ngx-formly/material';\n\nconst importsAndExports = [\n AutoTouchFieldWrapperComponent,\n DbxFormSectionWrapperComponent,\n DbxFormSubsectionWrapperComponent,\n DbxFormInfoWrapperComponent,\n DbxFormExpandWrapperComponent,\n DbxFormToggleWrapperComponent,\n DbxFormFlexWrapperComponent,\n DbxFormStyleWrapperComponent,\n DbxFormWorkingWrapperComponent,\n // Formly\n FormlyModule,\n FormlyMaterialModule\n];\n\n@NgModule({\n imports: [\n ...importsAndExports,\n FormlyModule.forChild({\n wrappers: [\n { name: AUTO_TOUCH_WRAPPER_KEY, component: AutoTouchFieldWrapperComponent },\n { name: EXPAND_WRAPPER_KEY, component: DbxFormExpandWrapperComponent },\n { name: TOGGLE_WRAPPER_KEY, component: DbxFormToggleWrapperComponent },\n { name: SECTION_WRAPPER_KEY, component: DbxFormSectionWrapperComponent },\n { name: SUBSECTION_WRAPPER_KEY, component: DbxFormSubsectionWrapperComponent },\n { name: INFO_WRAPPER_KEY, component: DbxFormInfoWrapperComponent },\n { name: FLEX_WRAPPER_KEY, component: DbxFormFlexWrapperComponent },\n { name: STYLE_WRAPPER_KEY, component: DbxFormStyleWrapperComponent },\n { name: WORKING_WRAPPER_KEY, component: DbxFormWorkingWrapperComponent }\n ]\n })\n ],\n exports: importsAndExports\n})\nexport class DbxFormFormlyWrapperModule {}\n","import { NgModule } from '@angular/core';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxFormFormlyWrapperModule } from '../wrapper/wrapper.module';\nimport { DbxChecklistItemContentComponent, DbxChecklistItemFieldComponent } from './checklist.item.field.component';\nimport { DbxDefaultChecklistItemFieldDisplayComponent } from './checklist.item.field.content.default.component';\n\nconst importsAndExports = [DbxChecklistItemFieldComponent, DbxChecklistItemContentComponent, DbxDefaultChecklistItemFieldDisplayComponent];\n\n@NgModule({\n imports: [\n ...importsAndExports,\n DbxFormFormlyWrapperModule,\n FormlyModule.forChild({\n types: [{ name: 'checklistitem', component: DbxChecklistItemFieldComponent }]\n })\n ],\n exports: importsAndExports\n})\nexport class DbxFormFormlyChecklistItemFieldModule {}\n","import { type AsyncValidatorFn, type ValidatorFn } from '@angular/forms';\nimport { mergeObjects, filterFromPOJO, mergeObjectsFunction, filterFromPOJOFunction, type FilterKeyValueTuplesInput, type GeneralFilterFromPOJOFunction, type ArrayOrValue, type Maybe, asArray, objectHasNoKeys, type MapFunction } from '@dereekb/util';\nimport { type FormlyFieldConfig, type FormlyFieldProps } from '@ngx-formly/core';\nimport { type ValidationMessageOption } from '@ngx-formly/core/lib/models';\nimport { type FormlyFieldProps as MaterialFormlyFormFieldProps } from '@ngx-formly/material/form-field';\n\nexport type FormlyValueParser<I = any, O = any> = MapFunction<I, O>;\n\nexport interface FieldConfigParsersRef {\n parsers: FormlyValueParser[];\n}\n\nexport interface FieldConfig extends Pick<FormlyFieldConfig, 'expressions' | 'parsers'>, Partial<FieldConfigParsersRef> {\n key: string;\n required?: boolean;\n readonly?: boolean;\n}\n\nexport interface FieldConfigWithParsers {\n parsers?: FormlyValueParser[];\n}\n\nexport type DisableAutocompleteForField = false;\n\nexport interface LabeledFieldConfig extends FieldConfig {\n key: string;\n label?: string;\n placeholder?: string;\n required?: boolean;\n readonly?: boolean;\n /**\n * Sets the autocomplete values.\n */\n autocomplete?: string | DisableAutocompleteForField;\n}\n\nexport interface DefaultValueFieldConfig<T = unknown> {\n defaultValue?: T;\n}\n\nexport interface AttributesFieldConfig {\n attributes?: {\n [key: string]: string | number;\n };\n}\n\nexport interface DescriptionFieldConfig {\n description?: string;\n}\n\nexport type PartialPotentialFieldConfig = Partial<FieldConfig> & Partial<LabeledFieldConfig> & Partial<AttributesFieldConfig> & Partial<DescriptionFieldConfig>;\n\n/**\n * Validates the configuration on the input field.\n */\nexport function formlyField<T extends FormlyFieldConfig = FormlyFieldConfig>(fieldConfig: T): T {\n if (!fieldConfig.key) {\n console.error(fieldConfig);\n throw new Error(`Field had a null key.`);\n }\n\n return fieldConfig;\n}\n\n/**\n * Creates an object with propers, expressions, and parsers properly configured from the input FieldConfig.\n *\n * @param fieldConfig\n * @param override\n * @returns\n */\nexport function propsAndConfigForFieldConfig<O extends object = object>(fieldConfig: Partial<FieldConfig> & Partial<LabeledFieldConfig> & Partial<AttributesFieldConfig> & Partial<DescriptionFieldConfig>, override?: PartialPotentialFieldConfig & O) {\n const { expressions, parsers } = fieldConfig;\n const props = propsValueForFieldConfig(fieldConfig, override);\n\n return {\n props,\n expressions,\n parsers\n };\n}\n\nexport const partialPotentialFieldConfigKeys: (keyof PartialPotentialFieldConfig)[] = ['label', 'placeholder', 'required', 'readonly', 'description', 'autocomplete'];\nexport const partialPotentialFieldConfigKeysFilter: FilterKeyValueTuplesInput<PartialPotentialFieldConfig> = {\n keysFilter: partialPotentialFieldConfigKeys\n};\n\nexport const mergePropsValueObjects = mergeObjectsFunction<PartialPotentialFieldConfig>(partialPotentialFieldConfigKeysFilter);\n\nexport const filterPartialPotentialFieldConfigValuesFromObject = filterFromPOJOFunction<PartialPotentialFieldConfig>({\n filter: partialPotentialFieldConfigKeysFilter\n}) as GeneralFilterFromPOJOFunction<PartialPotentialFieldConfig>;\n\nexport function propsValueForFieldConfig<T extends FormlyFieldProps, O extends object = object>(fieldConfig: PartialPotentialFieldConfig, override?: PartialPotentialFieldConfig & O): Partial<T> & O {\n const { label, placeholder, required, readonly, description, autocomplete } = mergePropsValueObjects([fieldConfig, override]);\n const attributes = mergeObjects([fieldConfig.attributes, override?.attributes]);\n\n const result = filterFromPOJO({\n ...override,\n label,\n placeholder,\n required,\n readonly,\n description,\n attributes\n }) as T & O;\n\n // Apply autocomplete\n if (autocomplete != null) {\n if (autocomplete === false) {\n result.attributes = {\n ...result.attributes,\n ...disableFormlyFieldAutofillAttributes()\n };\n } else {\n (\n result.attributes as {\n [key: string]: string | number;\n }\n )['autocomplete'] = autocomplete;\n }\n }\n\n return result;\n}\n\n/**\n * Returns configuration for a formlyField that will disable autofill/autocomplete for a field.\n */\nexport function disableFormlyFieldAutofillAttributes(): { name: string; autocomplete: string } {\n // https://stackoverflow.com/questions/15738259/disabling-chrome-autofill\n return {\n name: 'password',\n autocomplete: 'off'\n };\n}\n\nexport type FormlyMessageProperties = {\n [messageProperties: string]: ValidationMessageOption['message'];\n};\n\nexport interface ValidatorsForFieldConfigInput {\n validators?: ArrayOrValue<ValidatorFn>;\n asyncValidators?: ArrayOrValue<AsyncValidatorFn>;\n messages?: Maybe<FormlyMessageProperties>;\n}\n\nexport type ValidatorsForFieldConfig = {\n validation?: {\n messages?: FormlyMessageProperties;\n };\n validators?: {\n validation: ValidatorFn[];\n };\n asyncValidators?: {\n validation: AsyncValidatorFn[];\n };\n};\n\nexport function validatorsForFieldConfig(input: ValidatorsForFieldConfigInput): Maybe<ValidatorsForFieldConfig> {\n const validators: ValidatorFn[] = asArray(input.validators);\n const asyncValidators: AsyncValidatorFn[] = asArray(input.asyncValidators);\n const messages: Maybe<FormlyMessageProperties> = input.messages;\n let config: Maybe<ValidatorsForFieldConfig>;\n\n if (messages || validators.length || asyncValidators.length) {\n config = {};\n\n if (validators.length) {\n config.validators = {\n validation: validators\n };\n }\n\n if (asyncValidators.length) {\n config.validators = {\n validation: asyncValidators\n };\n }\n\n if (messages && !objectHasNoKeys(messages)) {\n config.validation = {\n messages\n };\n }\n }\n\n return config;\n}\n\n// MARK: Material\nexport interface MaterialFormFieldConfig {\n readonly materialFormField?: Partial<Pick<MaterialFormlyFormFieldProps, 'prefix' | 'suffix' | 'hideLabel' | 'hideRequiredMarker' | 'hideFieldUnderline' | 'floatLabel' | 'appearance' | 'color' | 'hintStart' | 'hintEnd'>>;\n}\n","import { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig } from '../field';\nimport { type DbxChecklistItemFieldProps } from './checklist.item.field.component';\n\nexport interface ChecklistItemFieldConfig<T = unknown> extends LabeledFieldConfig, DbxChecklistItemFieldProps<T> {}\nexport type ChecklistItemFieldBuilderInput<T = unknown> = Partial<ChecklistItemFieldConfig<T>> & Pick<ChecklistItemFieldConfig<T>, 'key' | 'displayContent'>;\n\nexport function checklistItemField<T = unknown>(config: ChecklistItemFieldBuilderInput<T>): FormlyFieldConfig<DbxChecklistItemFieldProps<T>> {\n const { key, displayContent, componentClass } = config;\n\n const fieldConfig = formlyField({\n key,\n type: 'checklistitem',\n ...propsAndConfigForFieldConfig(config, {\n displayContent,\n componentClass\n })\n });\n\n return fieldConfig;\n}\n","import { type Observable, combineLatest, map, shareReplay } from 'rxjs';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type ChecklistItemDisplayContent } from './checklist.item';\nimport { type Configurable, type KeyValueTransformMap, addPlusPrefixToNumber, type Maybe } from '@dereekb/util';\nimport { checklistItemField, type ChecklistItemFieldBuilderInput } from './checklist.item.field';\n\nexport type ChecklistItemFieldDataSetFieldKey<D> = keyof D & string;\nexport type ChecklistItemFieldDataSetFieldValueForKey<D, K extends keyof D = keyof D> = D[K];\nexport type ChecklistType<D> = KeyValueTransformMap<D, boolean>;\n\nexport type ChecklistItemFieldDataSetBuilderInput<D, T> = { key: ChecklistItemFieldDataSetFieldKey<D> } & ChecklistItemFieldBuilderInput<T>;\n\nexport interface ChecklistItemFieldDataSetItem<D, T extends ChecklistType<D>> {\n /**\n * Key for the field.\n */\n readonly key: ChecklistItemFieldDataSetFieldKey<T>;\n /**\n * Base field configuration to use.\n */\n readonly field: ChecklistItemFieldBuilderInput<T>;\n}\n\n/**\n * Used for building a set of configurations for a data-type object that has as second object that is used as a checklist.\n */\nexport class ChecklistItemFieldDataSetBuilder<D extends object, C extends ChecklistType<D> = ChecklistType<D>> {\n private readonly _fields = new Map<ChecklistItemFieldDataSetFieldKey<C>, ChecklistItemFieldDataSetItem<D, ChecklistType<D>>>();\n\n readonly dataObs$: Observable<D>;\n\n constructor(dataObs: Observable<D>) {\n this.dataObs$ = dataObs;\n }\n\n /**\n * Merges the input config with existing configuration.\n *\n * The displayContentObs, if provided, will merge with the existing observable and the two objects merged.\n */\n merge<T>(key: ChecklistItemFieldDataSetFieldKey<D>, config: Partial<ChecklistItemFieldBuilderInput<T>>) {\n const currentField = this._assertFieldExists(key).field;\n const mergedConfig: Configurable<ChecklistItemFieldDataSetBuilderInput<D, T>> = {\n ...currentField,\n ...config,\n key\n } as any;\n\n if (currentField.displayContent && config.displayContent) {\n mergedConfig.displayContent = combineLatest([currentField.displayContent, config.displayContent]).pipe(\n map(([a, b]) => {\n const result = {\n ...a,\n ...b\n };\n\n // console.log('A and b: ', a, b, result);\n return result;\n }),\n shareReplay(1)\n );\n }\n\n // console.log('Merged: ', mergedConfig);\n\n this.field(mergedConfig);\n }\n\n override<T>(key: ChecklistItemFieldDataSetFieldKey<D>, config: Partial<ChecklistItemFieldBuilderInput<T>>) {\n const currentField = this._assertFieldExists(key);\n\n this.field({\n ...currentField.field,\n ...config,\n key\n });\n }\n\n _assertFieldExists(key: ChecklistItemFieldDataSetFieldKey<D>): ChecklistItemFieldDataSetItem<D, any> {\n const currentField = this._fields.get(key);\n\n if (!currentField) {\n throw new Error(`Expected field with key \"${key}\" for override() but was unavailable.`);\n }\n\n return currentField;\n }\n\n showValueFieldArrayCount<T extends ChecklistItemFieldDataSetFieldValueForKey<D> & Array<unknown>>(key: ChecklistItemFieldDataSetFieldKey<D>, config?: Partial<ChecklistItemFieldDataSetBuilderInput<D, T>>) {\n return this.field({\n displayContent: this.contentWithDisplayValueFromData(key, (x: T) => addPlusPrefixToNumber(x?.length)),\n ...config,\n key\n });\n }\n\n showValueField<T extends ChecklistItemFieldDataSetFieldValueForKey<D> = ChecklistItemFieldDataSetFieldValueForKey<D>>(key: ChecklistItemFieldDataSetFieldKey<D>, config?: Partial<ChecklistItemFieldDataSetBuilderInput<D, T>>, labelFn: (value: T) => Maybe<string> = (x: T) => (x as unknown as object | number | string)?.toString()) {\n return this.field({\n displayContent: this.contentWithDisplayValueFromData(key, labelFn),\n ...config,\n key\n });\n }\n\n field<T>(config: ChecklistItemFieldDataSetBuilderInput<D, T>) {\n const key = config.key;\n\n const field: ChecklistItemFieldDataSetItem<D, ChecklistType<D>> = {\n key,\n field: config as unknown as ChecklistItemFieldBuilderInput<ChecklistType<D>>\n };\n\n this._fields.set(key, field);\n }\n\n // MARK: Build/Finish\n build(): FormlyFieldConfig[] {\n return Array.from(this._fields.values()).map(({ field }) => {\n return checklistItemField(field);\n });\n }\n\n // MARK: Utility\n customContentFromData<T extends ChecklistItemFieldDataSetFieldValueForKey<D> = ChecklistItemFieldDataSetFieldValueForKey<D>>(mapFn: (data: D) => ChecklistItemDisplayContent<T>): Observable<ChecklistItemDisplayContent<T>> {\n return this.dataObs$.pipe(map(mapFn));\n }\n\n contentWithValueFromData<K extends keyof D = keyof D, T extends ChecklistItemFieldDataSetFieldValueForKey<D> = ChecklistItemFieldDataSetFieldValueForKey<D>>(key: K, contentFn?: (value: T) => ChecklistItemDisplayContent<T>): Observable<ChecklistItemDisplayContent<T>> {\n return this.customContentFromData((data) => {\n const meta = data[key] as unknown as T;\n const content = contentFn?.(meta);\n\n return {\n meta,\n ...content\n };\n });\n }\n\n contentWithDisplayValueFromData<T extends ChecklistItemFieldDataSetFieldValueForKey<D> = ChecklistItemFieldDataSetFieldValueForKey<D>>(key: ChecklistItemFieldDataSetFieldKey<D>, labelFn: (value: T) => Maybe<string> = (x: T) => (x as unknown as object | number | string)?.toString()): Observable<ChecklistItemDisplayContent<T>> {\n function sanitizeLabel(label: Maybe<string>): string {\n return label ?? 'N/A';\n }\n\n return this.contentWithValueFromData(key, (value: T) => ({ label: sanitizeLabel(labelFn(value)) }));\n }\n}\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\nimport { DbxInjectionComponent, DbxInjectionComponentConfig } from '@dereekb/dbx-core';\nimport { FieldType, FormlyFieldConfig } from '@ngx-formly/core';\n\nexport type DbxFormComponentFieldConfig<T> = DbxInjectionComponentConfig<T>;\n\nexport interface DbxFormComponentFormlyFieldConfig<T = unknown> extends FormlyFieldConfig {\n componentField: DbxFormComponentFieldConfig<T>;\n}\n\n@Component({\n template: `\n <div class=\"dbx-form-component\" dbx-injection [config]=\"config\"></div>\n `,\n imports: [DbxInjectionComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFormComponentFieldComponent<T = unknown> extends FieldType<DbxFormComponentFormlyFieldConfig<T>> {\n get config(): DbxInjectionComponentConfig<T> {\n return this.field.componentField;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxFormComponentFieldComponent } from './component.field.component';\n\nconst importsAndExports = [DbxFormComponentFieldComponent];\n\n@NgModule({\n imports: [\n ...importsAndExports,\n FormlyModule.forChild({\n types: [{ name: 'component', component: DbxFormComponentFieldComponent }]\n })\n ],\n exports: importsAndExports\n})\nexport class DbxFormFormlyComponentFieldModule {}\n","import { type DbxFormComponentFieldConfig, type DbxFormComponentFormlyFieldConfig } from './component.field.component';\n\nexport type ComponentFieldConfig<T = unknown> = DbxFormComponentFieldConfig<T>;\n\nexport function componentField<T = unknown>(config: ComponentFieldConfig<T>): DbxFormComponentFormlyFieldConfig<T> {\n return {\n type: 'component',\n componentField: config\n };\n}\n","import { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig } from '../../field';\nimport { type DbxItemListFieldProps } from './list.field.component';\nimport { type AbstractDbxSelectionListWrapperDirective } from '@dereekb/dbx-web';\nimport { type PrimativeKey } from '@dereekb/util';\n\nexport interface DbxListFieldConfig<T = unknown, C extends AbstractDbxSelectionListWrapperDirective<T> = AbstractDbxSelectionListWrapperDirective<T>, K extends PrimativeKey = PrimativeKey> extends LabeledFieldConfig, DbxItemListFieldProps<T, C, K> {}\n\nexport function dbxListField<T = unknown, C extends AbstractDbxSelectionListWrapperDirective<T> = AbstractDbxSelectionListWrapperDirective<T>, K extends PrimativeKey = PrimativeKey>(config: DbxListFieldConfig<T, C, K>): FormlyFieldConfig {\n const { key, listComponentClass, readKey, state$, loadMore } = config;\n return formlyField({\n key,\n type: 'dbxlistfield',\n ...propsAndConfigForFieldConfig(config, {\n listComponentClass,\n readKey,\n state$,\n loadMore\n })\n });\n}\n","import { ChangeDetectionStrategy, Component, OnDestroy, OnInit, Type } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { AbstractControl } from '@angular/forms';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { DbxInjectionComponent, DbxInjectionComponentConfig } from '@dereekb/dbx-core';\nimport { AbstractDbxSelectionListWrapperDirective, ListSelectionState, DbxValueListItemDecisionFunction, dbxValueListItemDecisionFunction, DbxListModifierModule } from '@dereekb/dbx-web';\nimport { distinctUntilHasDifferentValues, filterMaybe, ListLoadingState, SubscriptionObject, switchMapFilterMaybe } from '@dereekb/rxjs';\nimport { convertMaybeToArray, hasDifferentValues, isSelectedDecisionFunctionFactory, Maybe, PrimativeKey, ReadKeyFunction, readKeysFrom } from '@dereekb/util';\nimport { FormlyFieldProps, FieldType, FieldTypeConfig } from '@ngx-formly/core';\nimport { map, Observable, shareReplay, BehaviorSubject, startWith, switchMap } from 'rxjs';\n\nexport interface DbxItemListFieldProps<T = unknown, C extends AbstractDbxSelectionListWrapperDirective<T> = AbstractDbxSelectionListWrapperDirective<T>, K extends PrimativeKey = PrimativeKey> extends Pick<FormlyFieldProps, 'label' | 'description'> {\n /**\n * List to render components from\n */\n readonly listComponentClass: Observable<Type<C>>;\n /**\n * Read key function to read the identifier from the input\n */\n readonly readKey: ReadKeyFunction<T, K>;\n /**\n * Observable that provides the items to select.\n */\n readonly state$: Observable<ListLoadingState<T>>;\n /**\n * Function that signals to load more items.\n */\n readonly loadMore?: () => void;\n}\n\n/**\n * Used for picking items by identifier from a DbxList component.\n */\n@Component({\n templateUrl: 'list.field.component.html',\n imports: [DbxListModifierModule, DbxInjectionComponent, MatDividerModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxItemListFieldComponent<T = unknown, C extends AbstractDbxSelectionListWrapperDirective<T> = AbstractDbxSelectionListWrapperDirective<T>, K extends PrimativeKey = PrimativeKey> extends FieldType<FieldTypeConfig<DbxItemListFieldProps<T, C, K>>> implements OnInit, OnDestroy {\n private readonly _selectionEventSub = new SubscriptionObject();\n private readonly _loadMoreSub = new SubscriptionObject();\n\n private readonly _formControlObs = new BehaviorSubject<Maybe<AbstractControl>>(undefined);\n readonly formControl$ = this._formControlObs.pipe(filterMaybe());\n\n readonly _formControlValue$: Observable<Maybe<K[]>> = this.formControl$.pipe(switchMap((control) => control.valueChanges.pipe(startWith(control.value), shareReplay(1))));\n readonly values$: Observable<K[]> = this._formControlValue$.pipe(map(convertMaybeToArray), shareReplay(1));\n\n private readonly _listComponentClassObs = new BehaviorSubject<Maybe<Observable<Type<C>>>>(undefined);\n readonly listComponentClass$ = this._listComponentClassObs.pipe(switchMapFilterMaybe());\n\n readonly config$: Observable<DbxInjectionComponentConfig<C>> = this.listComponentClass$.pipe(\n map((componentClass) => {\n const loadMore = this.loadMore;\n const config: DbxInjectionComponentConfig<C> = {\n componentClass,\n init: (listView) => {\n listView.setSelectionMode('select'); // always enable select\n listView.setState(this.field.props.state$);\n\n if (loadMore != null) {\n this._loadMoreSub.subscription = listView.loadMore.subscribe(() => loadMore());\n }\n\n // set subscription\n this._selectionEventSub.subscription = listView.selectionChange.subscribe((x) => this.updateForSelection(x));\n }\n };\n\n return config;\n })\n );\n\n readonly isSelectedModifierFunction$: Observable<DbxValueListItemDecisionFunction<T>> = this.values$.pipe(\n distinctUntilHasDifferentValues(),\n map((values) => {\n return dbxValueListItemDecisionFunction(isSelectedDecisionFunctionFactory({ readKey: this.readKey })(values));\n }),\n shareReplay(1)\n );\n\n readonly configSignal = toSignal(this.config$);\n readonly isSelectedModifierFunctionSignal = toSignal(this.isSelectedModifierFunction$);\n\n get label() {\n return this.field.props.label;\n }\n\n get description() {\n return this.field.props.description;\n }\n\n get listComponentClass() {\n return this.field.props.listComponentClass;\n }\n\n get readKey() {\n return this.field.props.readKey;\n }\n\n get loadMore() {\n return this.field.props.loadMore;\n }\n\n ngOnInit(): void {\n this._formControlObs.next(this.formControl);\n this._listComponentClassObs.next(this.listComponentClass);\n }\n\n ngOnDestroy(): void {\n this._formControlObs.complete();\n this._selectionEventSub.destroy();\n this._listComponentClassObs.complete();\n }\n\n updateForSelection(list: ListSelectionState<T>) {\n const items = list.items.filter((x) => x.selected).map((x) => x.itemValue);\n const values = readKeysFrom(this.readKey, items);\n this.setValues(values);\n }\n\n setValues(values: Maybe<K[]>): void {\n const currentValues = this.formControl.value;\n\n if (currentValues == null || hasDifferentValues(currentValues, values)) {\n this.formControl.setValue(values);\n this.formControl.markAsDirty();\n this.formControl.markAsTouched();\n }\n }\n}\n","<div class=\"dbx-list-item-field\" dbxListItemModifier [dbxListItemIsSelectedModifier]=\"isSelectedModifierFunctionSignal()\">\n @if (label) {\n <span class=\"dbx-label dbx-label-padded\">{{ label }}</span>\n }\n <div class=\"dbx-list-item-field-content\">\n <dbx-injection [config]=\"configSignal()\"></dbx-injection>\n </div>\n <mat-divider></mat-divider>\n @if (description) {\n <div class=\"dbx-form-description\">{{ description }}</div>\n }\n</div>\n","import { NgModule } from '@angular/core';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxItemListFieldComponent } from './list.field.component';\n\nconst importsAndExports = [DbxItemListFieldComponent];\n\n@NgModule({\n imports: [\n ...importsAndExports,\n FormlyModule.forChild({\n types: [{ name: 'dbxlistfield', component: DbxItemListFieldComponent }]\n })\n ],\n exports: importsAndExports\n})\nexport class DbxFormFormlyDbxListFieldModule {}\n","import { DbxInjectionComponentConfig } from '@dereekb/dbx-core';\nimport { LoadingState, successResult, mapLoadingStateResults, filterMaybe, mapIsListLoadingStateWithEmptyValue, startWithBeginLoading, SubscriptionObject, listLoadingStateContext } from '@dereekb/rxjs';\nimport { PrimativeKey, convertMaybeToArray, makeValuesGroupMap, Maybe, ArrayOrValue, separateValues, filterUniqueValues, Configurable } from '@dereekb/util';\nimport { Directive, OnDestroy, OnInit, viewChild } from '@angular/core';\nimport { FormControl, AbstractControl } from '@angular/forms';\nimport { MatInput } from '@angular/material/input';\nimport { FieldTypeConfig, FormlyFieldProps } from '@ngx-formly/core';\nimport { FieldType } from '@ngx-formly/material';\nimport { BehaviorSubject, combineLatest, Observable, of, filter, map, debounceTime, distinctUntilChanged, switchMap, startWith, shareReplay, mergeMap, first, delay } from 'rxjs';\nimport { PickableValueFieldDisplayFunction, PickableValueFieldDisplayValue, PickableValueFieldFilterFunction, PickableValueFieldHashFunction, PickableValueFieldLoadValuesFunction, PickableValueFieldValue } from './pickable';\nimport { DbxValueListItem } from '@dereekb/dbx-web';\nimport { camelCase } from 'change-case-all';\nimport { toSignal } from '@angular/core/rxjs-interop';\n\n/**\n * Wraps the selected state with the items.\n */\nexport type PickableItemFieldItem<T, M = unknown> = DbxValueListItem<PickableValueFieldDisplayValue<T, M>>;\n\nexport type PickableItemFieldItemSortFn<T, M = unknown> = (items: PickableItemFieldItem<T, M>[]) => PickableItemFieldItem<T, M>[];\n\nexport interface PickableValueFieldsFieldProps<T, M = unknown, H extends PrimativeKey = PrimativeKey> extends FormlyFieldProps {\n /**\n * Loads all pickable values.\n */\n readonly loadValues: PickableValueFieldLoadValuesFunction<T, M>;\n /**\n * Used for building a display value given the input.\n */\n readonly displayForValue: PickableValueFieldDisplayFunction<T, M>;\n /**\n * Used for hashing display values and omitting repeat values.\n *\n * If hashForValue is not provided, the value's value will be used as is.\n */\n readonly hashForValue?: PickableValueFieldHashFunction<T, H>;\n /**\n * Used for filtering values via the search text.\n */\n readonly filterValues?: PickableValueFieldFilterFunction<T, M>;\n /**\n * Used for sorting the items before they are displayed.\n *\n * Should only be used to sort values.\n */\n readonly sortItems?: PickableItemFieldItemSortFn<T, M>;\n /**\n * Whether or not to allow multiple items to be selected.\n */\n readonly multiSelect?: boolean;\n /**\n * Whether or not to set/get values as an array or a single value. If set false, multiSelect is ignored.\n */\n readonly asArrayValue?: boolean;\n /**\n * Whether or not to show the text filter. True by default if filterValues is provided.\n */\n readonly showTextFilter?: boolean;\n /**\n * Whether or not to skip the filter function when the input is empty.\n *\n * True by default.\n */\n readonly skipFilterFnOnEmpty?: boolean;\n /**\n * Filter Label\n */\n readonly filterLabel?: string;\n /**\n * The maximum number of values that can be picked\n */\n readonly maxPicks?: number;\n /**\n * Optional description/hint to display.\n */\n readonly description?: string;\n /**\n * Footer Display\n */\n readonly footerConfig?: DbxInjectionComponentConfig;\n /**\n * Changes the selection mode of the list to \"view\" mode on disabled, hiding the selection boxes.\n */\n readonly changeSelectionModeToViewOnDisabled?: boolean;\n /**\n * (Optional) observable that will trigger the clearing of all cached display values.\n */\n readonly refreshDisplayValues$?: Observable<unknown>;\n}\n\n/**\n * Displayed value with the computed hash.\n */\nexport interface PickableValueFieldDisplayValueWithHash<T, M = unknown, H extends PrimativeKey = PrimativeKey> extends PickableValueFieldDisplayValue<T, M> {\n _hash: H;\n}\n\n/**\n * Used for picking pre-set values using items as the presentation.\n */\n@Directive()\nexport class AbstractDbxPickableItemFieldDirective<T, M = unknown, H extends PrimativeKey = PrimativeKey> extends FieldType<FieldTypeConfig<PickableValueFieldsFieldProps<T, M, H>>> implements OnInit, OnDestroy {\n readonly filterMatInput = viewChild<string, MatInput>('matInput', { read: MatInput });\n\n readonly inputCtrl = new FormControl('');\n\n private readonly _formControlObs = new BehaviorSubject<Maybe<AbstractControl>>(undefined);\n readonly formControl$ = this._formControlObs.pipe(filterMaybe());\n\n private readonly _clearDisplayHashMapSub = new SubscriptionObject();\n private readonly _displayHashMap = new BehaviorSubject<Map<H, PickableValueFieldDisplayValue<T, M>>>(new Map());\n\n readonly filterInputValue$: Observable<Maybe<string>> = this.inputCtrl.valueChanges.pipe(startWith(undefined));\n readonly filterInputValueString$: Observable<Maybe<string>> = this.filterInputValue$.pipe(debounceTime(200), distinctUntilChanged(), shareReplay(1));\n\n readonly loadResultsDisplayValuesState$: Observable<LoadingState<PickableValueFieldDisplayValueWithHash<T, M, H>[]>> = this.formControl$.pipe(\n first(),\n switchMap(() =>\n this.loadValuesFn().pipe(\n switchMap((x) => this.loadDisplayValuesForFieldValues(x)),\n startWithBeginLoading()\n )\n ),\n shareReplay(1)\n );\n\n readonly _formControlValue$: Observable<T | T[]> = this.formControl$.pipe(switchMap((control) => control.valueChanges.pipe(startWith(control.value), shareReplay(1))));\n\n readonly loadResultsDisplayValues$: Observable<PickableValueFieldDisplayValueWithHash<T, M, H>[]> = this.loadResultsDisplayValuesState$.pipe(map((x) => x?.value ?? []));\n\n /**\n * Current values in the form control.\n */\n readonly values$: Observable<T[]> = this._formControlValue$.pipe(map(convertMaybeToArray), shareReplay(1));\n\n /**\n * Current values with their display value.\n */\n readonly displayValuesState$: Observable<LoadingState<PickableValueFieldDisplayValueWithHash<T, M, H>[]>> = combineLatest([this.loadResultsDisplayValues$, this.values$]).pipe(\n switchMap(([displayValues, currentValues]) => {\n const displayValuesMap = makeValuesGroupMap(displayValues, (x) => this.hashForValue(x.value));\n const valuesNotInDisplayMap: T[] = [];\n\n currentValues.forEach((x) => {\n const key = this.hashForValue(x);\n const displayValue: Maybe<PickableValueFieldDisplayValueWithHash<T, M, H>> = displayValuesMap.get(key)?.[0];\n\n if (!displayValue) {\n valuesNotInDisplayMap.push(x);\n }\n });\n\n if (valuesNotInDisplayMap.length) {\n return this.loadDisplayValuesForValues(valuesNotInDisplayMap).pipe(\n map((x) =>\n mapLoadingStateResults(x, {\n mapValue: (loadedValues: Configurable<PickableValueFieldDisplayValueWithHash<T, M, H>>[]) => {\n loadedValues.forEach((x) => (x.isUnknown = x.isUnknown ?? true)); // Assign unknown flag.\n return [...displayValues, ...loadedValues];\n }\n })\n )\n );\n } else {\n return of(successResult(displayValues));\n }\n })\n );\n\n /**\n * Results to be displayed if filtered.\n */\n readonly filteredSearchResultsState$: Observable<LoadingState<PickableValueFieldDisplayValueWithHash<T, M, H>[]>> = this.loadResultsDisplayValues$.pipe(\n switchMap((values) =>\n this.filterInputValueString$.pipe(\n switchMap((text) =>\n combineLatest([this._filterValues(text, values), this.displayValuesState$]).pipe(\n map(([values, displayState]) =>\n mapLoadingStateResults(displayState, {\n mapValue: (displayValues: PickableValueFieldDisplayValueWithHash<T, M, H>[]) => {\n const valueHashSet = new Set(values.map((x) => this.hashForValue(x)));\n return displayValues.filter((x) => !x.isUnknown && valueHashSet.has(x._hash));\n }\n })\n ),\n startWithBeginLoading()\n )\n )\n )\n ),\n shareReplay(1)\n );\n\n readonly filteredSearchResults$: Observable<PickableValueFieldDisplayValueWithHash<T, M, H>[]> = this.filteredSearchResultsState$.pipe(\n map((x) => x?.value),\n filterMaybe(),\n shareReplay(1)\n );\n\n readonly items$: Observable<PickableItemFieldItem<T, M>[]> = combineLatest([this.filteredSearchResults$, this.values$]).pipe(\n map(([displayValues, values]) => {\n const selectedHashValuesSet = new Set(values.map((x) => this.hashForValue(x)));\n let items: PickableItemFieldItem<T, M>[] = displayValues.map((x) => ({ itemValue: x, selected: selectedHashValuesSet.has(x._hash) }));\n\n if (this.sortItems) {\n items = this.sortItems(items);\n }\n\n return items;\n }),\n shareReplay(1)\n );\n\n readonly itemsLoadingState$: Observable<LoadingState<PickableItemFieldItem<T>[]>> = this.loadResultsDisplayValues$.pipe(\n switchMap(() =>\n this.items$.pipe(\n first(),\n map((x) => successResult(x)),\n startWithBeginLoading(),\n shareReplay(1)\n )\n )\n );\n\n /**\n * Context used for managing the loading of items, or when the current results change.\n */\n readonly context = listLoadingStateContext({ obs: this.itemsLoadingState$, showLoadingOnNoValue: false });\n\n readonly filterItemsLoadingState$: Observable<LoadingState<PickableItemFieldItem<T>[]>> = this.items$.pipe(\n map((x) => successResult(x)),\n startWithBeginLoading(),\n shareReplay(1)\n );\n\n readonly noItemsAvailable$ = this.filterItemsLoadingState$.pipe(mapIsListLoadingStateWithEmptyValue(), distinctUntilChanged());\n\n /**\n * Context used for searching/filtering.\n */\n readonly filterResultsContext = listLoadingStateContext({ obs: this.filteredSearchResultsState$, showLoadingOnNoValue: true });\n\n readonly itemsSignal = toSignal(this.items$);\n readonly noItemsAvailableSignal = toSignal(this.noItemsAvailable$);\n\n get readonly(): Maybe<boolean> {\n return this.props.readonly;\n }\n\n get isReadonlyOrDisabled() {\n return this.readonly || this.disabled;\n }\n\n get pickableField(): PickableValueFieldsFieldProps<T, M, H> {\n return this.props;\n }\n\n get multiSelect(): boolean {\n return this.pickableField.multiSelect ?? true;\n }\n\n get asArrayValue(): boolean {\n return this.pickableField.asArrayValue ?? true;\n }\n\n get pickOnlyOne(): boolean {\n return this.asArrayValue === false || this.multiSelect === false;\n }\n\n get filterLabel(): Maybe<string> {\n return this.pickableField.filterLabel;\n }\n\n get name(): string {\n return this.field.name ?? camelCase(this.label ?? (this.key as string));\n }\n\n get label(): Maybe<string> {\n return this.props.label;\n }\n\n get autocomplete(): string {\n return (this.props.attributes?.['autocomplete'] ?? this.key) as string;\n }\n\n get changeSelectionModeToViewOnDisabled(): boolean {\n return this.pickableField.changeSelectionModeToViewOnDisabled ?? false;\n }\n\n get sortItems(): Maybe<PickableItemFieldItemSortFn<T, M>> {\n return this.pickableField.sortItems;\n }\n\n get hashForValue(): PickableValueFieldHashFunction<T, H> {\n return this.pickableField.hashForValue ?? ((x) => x as unknown as H);\n }\n\n get displayForValue(): PickableValueFieldDisplayFunction<T, M> {\n return this.pickableField.displayForValue;\n }\n\n get showFilterInput(): boolean {\n return Boolean(this.pickableField.filterValues);\n }\n\n get filterValuesFn(): PickableValueFieldFilterFunction<T, M> {\n return this.pickableField.filterValues ?? ((_, x) => of(x.map((y) => y.value)));\n }\n\n get skipFilterFnOnEmpty(): boolean {\n return this.pickableField.skipFilterFnOnEmpty ?? true;\n }\n\n get _filterValues(): PickableValueFieldFilterFunction<T, M> {\n let fn: PickableValueFieldFilterFunction<T, M>;\n\n if (this.skipFilterFnOnEmpty) {\n fn = (filterText: Maybe<string>, values: PickableValueFieldDisplayValue<T, M>[]): Observable<T[]> => {\n let result: Observable<T[]>;\n\n if (filterText) {\n result = this.filterValuesFn(filterText, values);\n } else {\n result = of(values.map((x) => x.value));\n }\n\n return result;\n };\n } else {\n fn = this.filterValuesFn;\n }\n\n return fn;\n }\n\n get showTextFilter(): boolean {\n return this.pickableField.showTextFilter ?? Boolean(this.pickableField.filterValues);\n }\n\n get loadValuesFn(): PickableValueFieldLoadValuesFunction<T, M> {\n return this.pickableField.loadValues;\n }\n\n get values(): T[] {\n return this._getValueOnFormControl(this.formControl.value) ?? [];\n }\n\n get footerConfig(): Maybe<DbxInjectionComponentConfig> {\n return this.pickableField.footerConfig;\n }\n\n get refreshDisplayValues$() {\n return this.pickableField.refreshDisplayValues$;\n }\n\n loadDisplayValuesForValues(values: T[]): Observable<LoadingState<PickableValueFieldDisplayValueWithHash<T, M, H>[]>> {\n return this.loadDisplayValuesForFieldValues(values.map((value) => ({ value })));\n }\n\n loadDisplayValuesForFieldValues(values: PickableValueFieldValue<T, M>[]): Observable<LoadingState<PickableValueFieldDisplayValueWithHash<T, M, H>[]>> {\n return this.getDisplayValuesForFieldValues(values).pipe(\n map((displayValues: PickableValueFieldDisplayValueWithHash<T, M, H>[]) => successResult(displayValues)),\n startWithBeginLoading(),\n shareReplay(1)\n );\n }\n\n getDisplayValuesForFieldValues(values: PickableValueFieldValue<T, M>[]): Observable<PickableValueFieldDisplayValueWithHash<T, M, H>[]> {\n return this._displayHashMap.pipe(\n mergeMap((displayMap) => {\n const mappingResult = values.map((x) => [x, this.hashForValue(x.value)] as [PickableValueFieldValue<T, M>, H]).map(([x, hash], i) => [i, hash, x, displayMap.get(hash)] as [number, H, PickableValueFieldValue<T, M>, PickableValueFieldDisplayValueWithHash<T, M, H>]);\n\n const {\n //\n included: hasDisplay,\n excluded: needsDisplay\n } = separateValues(mappingResult, (x) => Boolean(x[3]));\n\n if (needsDisplay.length > 0) {\n // Go get the display value.\n const displayValuesObs = this.displayForValue(needsDisplay.map((x) => x[2]));\n\n return displayValuesObs.pipe(\n first(),\n map((displayResults) => {\n const displayResultsWithHash: PickableValueFieldDisplayValueWithHash<T, M, H>[] = displayResults.map((x) => {\n (x as PickableValueFieldDisplayValueWithHash<T, M, H>)._hash = this.hashForValue(x.value);\n return x as PickableValueFieldDisplayValueWithHash<T, M, H>;\n });\n\n // Create a map to re-join values later.\n const displayResultsMapping: [PickableValueFieldDisplayValueWithHash<T, M, H>, H][] = displayResultsWithHash.map((x) => [x, x._hash]);\n const valueIndexHashMap = new Map(displayResultsMapping.map(([x, hash]) => [hash, x]));\n\n // Update displayMap. No need to push an update notification.\n displayResultsMapping.forEach(([x, hash]) => displayMap.set(hash, x));\n\n // Zip values back together.\n const newDisplayValues = mappingResult.map((x) => x[3] ?? valueIndexHashMap.get(x[1]));\n\n // Return display values.\n return newDisplayValues;\n })\n );\n } else {\n // If all display values are hashed return that.\n return of(hasDisplay.map((x) => x[3])) as Observable<PickableValueFieldDisplayValueWithHash<T, M, H>[]>;\n }\n })\n );\n }\n\n ngOnInit(): void {\n this._formControlObs.next(this.formControl);\n\n if (this.refreshDisplayValues$ != null) {\n this._clearDisplayHashMapSub.subscription = this.refreshDisplayValues$.subscribe(() => this._displayHashMap.next(new Map()));\n }\n\n // Focus after finished loading for the first time.\n this.context.loading$\n .pipe(\n delay(10),\n filter((x) => x),\n first()\n )\n .subscribe(() => {\n this.filterMatInput()?.focus();\n });\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._displayHashMap.complete();\n this._formControlObs.complete();\n this._clearDisplayHashMapSub.destroy();\n this.filterResultsContext.destroy();\n }\n\n protected _getValueOnFormControl(valueOnFormControl: ArrayOrValue<T>): T[] {\n const value: T[] = valueOnFormControl != null ? ([] as T[]).concat(valueOnFormControl) : []; // Always return an array.\n return value;\n }\n\n addValue(value: T): void {\n let newValues: T[];\n\n if (this.pickOnlyOne) {\n newValues = [value];\n } else {\n newValues = [...this.values, value];\n }\n\n this.setValues(newValues);\n }\n\n removeValue(value: T): void {\n const hashToFilter = this.hashForValue(value);\n const values = this.values.filter((x) => this.hashForValue(x) !== hashToFilter);\n this.setValues(values);\n }\n\n setValues(values: T[]): void {\n // Use to filter non-unique values.\n if (this.hashForValue) {\n values = filterUniqueValues(values, this.hashForValue);\n }\n\n if (this.pickOnlyOne) {\n values = [values[0]].filter((x) => x != null);\n }\n\n this._setValueOnFormControl(values);\n }\n\n // MARK: Internal\n protected _setValueOnFormControl(values: T[]): void {\n let newValue: T | T[] = values;\n\n if (!this.asArrayValue) {\n newValue = [values[0]].filter((x) => x != null)[0];\n }\n\n this.formControl.setValue(newValue);\n this.formControl.markAsTouched();\n this.formControl.markAsDirty();\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { AbstractDbxPickableItemFieldDirective, PickableItemFieldItem } from './pickable.field.directive';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { DbxLoadingComponent } from '@dereekb/dbx-web';\nimport { MatDivider } from '@angular/material/divider';\nimport { DbxInjectionComponent } from '@dereekb/dbx-core';\nimport { MatInputModule } from '@angular/material/input';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\n\n/**\n * Used for picking pre-set values using chips as the presentation.\n */\n@Component({\n templateUrl: 'pickable.chip.field.component.html',\n imports: [MatChipsModule, NgTemplateOutlet, FormsModule, ReactiveFormsModule, MatIconModule, MatInputModule, DbxLoadingComponent, MatDivider, DbxInjectionComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxPickableChipListFieldComponent<T> extends AbstractDbxPickableItemFieldDirective<T> {\n itemClicked(item: PickableItemFieldItem<T>): void {\n if (!item.disabled && !this.isReadonlyOrDisabled) {\n if (item.selected) {\n this.removeValue(item.itemValue.value);\n } else {\n this.addValue(item.itemValue.value);\n }\n }\n }\n}\n","<div class=\"dbx-pickable-item-field\">\n <dbx-loading [context]=\"context\" [linear]=\"true\">\n @if (showFilterInput) {\n <ng-container *ngTemplateOutlet=\"filterTemplate\"></ng-container>\n }\n <!-- Content -->\n <div class=\"dbx-pickable-item-field-chips\">\n <mat-chip-listbox [multiple]=\"multiSelect\" [required]=\"required\" [selectable]=\"!isReadonlyOrDisabled\" [disabled]=\"readonly\" #chipList>\n @for (item of itemsSignal(); track item.itemValue.value) {\n <mat-chip-option (click)=\"itemClicked(item)\" [selected]=\"item.selected\" [disabled]=\"isReadonlyOrDisabled || item.disabled\">\n @if (item.itemValue.icon) {\n <mat-icon matChipAvatar>{{ item.itemValue.icon }}</mat-icon>\n }\n <span class=\"dbx-chip-label\">{{ item.itemValue.label }}</span>\n @if (item.itemValue.sublabel) {\n <span class=\"dbx-chip-sublabel\">{{ item.itemValue.sublabel }}</span>\n }\n </mat-chip-option>\n }\n </mat-chip-listbox>\n <dbx-injection [config]=\"footerConfig\"></dbx-injection>\n </div>\n </dbx-loading>\n</div>\n\n<!-- Filter Input -->\n<ng-template #filterTemplate>\n <div class=\"dbx-pickable-item-field-filter\">\n <div class=\"dbx-label\">{{ filterLabel }}</div>\n <input [name]=\"name\" autocomplete=\"{{ autocomplete }}\" #filterMatInput=\"matInput\" matInput [placeholder]=\"placeholder\" [formControl]=\"inputCtrl\" />\n <mat-divider></mat-divider>\n <dbx-loading [linear]=\"true\" [context]=\"filterResultsContext\"></dbx-loading>\n <!-- No items found. -->\n @if (noItemsAvailableSignal()) {\n <p class=\"dbx-label\">No items match this filter.</p>\n }\n </div>\n</ng-template>\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { DbxInjectionComponent, DbxInjectionComponentConfig } from '@dereekb/dbx-core';\nimport { AbstractDbxSelectionListWrapperDirective, provideDbxListView, AbstractDbxSelectionListViewDirective, AbstractDbxValueListViewItemComponent, ListSelectionState, addConfigToValueListItems, DbxListSelectionMode, provideDbxListViewWrapper, DbxLoadingComponent, DbxSelectionValueListViewContentComponent, DEFAULT_LIST_WRAPPER_COMPONENT_CONFIGURATION_TEMPLATE, DbxListWrapperComponentImportsModule } from '@dereekb/dbx-web';\nimport { type Maybe } from '@dereekb/util';\nimport { map, shareReplay } from 'rxjs';\nimport { PickableValueFieldDisplayValue } from './pickable';\nimport { AbstractDbxPickableItemFieldDirective, PickableItemFieldItem } from './pickable.field.directive';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatDivider } from '@angular/material/divider';\nimport { MatInputModule } from '@angular/material/input';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { toSignal } from '@angular/core/rxjs-interop';\n\n// MARK: Selection List\n@Component({\n selector: 'dbx-form-pickable-item-field-item-list',\n template: DEFAULT_LIST_WRAPPER_COMPONENT_CONFIGURATION_TEMPLATE,\n imports: [DbxListWrapperComponentImportsModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: provideDbxListViewWrapper(DbxPickableListFieldItemListComponent),\n standalone: true\n})\nexport class DbxPickableListFieldItemListComponent<T> extends AbstractDbxSelectionListWrapperDirective<PickableItemFieldItem<T>> {\n constructor() {\n super({\n componentClass: DbxPickableListFieldItemListViewComponent\n });\n }\n}\n\n/**\n * NOTE: Values input are PickableItemFieldItem<T>, but output values are PickableValueFieldDisplayValue<T>.\n */\n@Component({\n template: `\n <dbx-selection-list-view-content [multiple]=\"multiple\" [selectionMode]=\"selectionMode\" [items]=\"itemsSignal()\"></dbx-selection-list-view-content>\n `,\n providers: provideDbxListView(DbxPickableListFieldItemListViewComponent),\n imports: [DbxSelectionValueListViewContentComponent],\n standalone: true\n})\nexport class DbxPickableListFieldItemListViewComponent<T> extends AbstractDbxSelectionListViewDirective<any> {\n readonly dbxPickableListFieldComponent = inject(DbxPickableListFieldComponent<T>);\n\n // TODO: any belongs here for now, but item list typings need to be updated.\n\n readonly config: DbxInjectionComponentConfig = {\n componentClass: DbxPickableListFieldItemListViewItemComponent\n };\n\n get multiple(): boolean {\n return !this.dbxPickableListFieldComponent.pickOnlyOne;\n }\n\n get selectionMode(): Maybe<DbxListSelectionMode> {\n let selectionMode: Maybe<DbxListSelectionMode> = 'select';\n\n if (this.dbxPickableListFieldComponent.disabled && this.dbxPickableListFieldComponent.changeSelectionModeToViewOnDisabled) {\n selectionMode = 'view';\n }\n\n return selectionMode;\n }\n\n readonly items$ = this.values$.pipe(\n // NOTE: This causes the \"value\" to be a PickableValueFieldDisplayValue<T>, which means we emit PickableValueFieldDisplayValue<T> to DbxPickableListFieldComponent.\n map((x) => addConfigToValueListItems(this.config, x)),\n shareReplay(1)\n );\n\n readonly itemsSignal = toSignal(this.items$);\n}\n\n@Component({\n template: `\n <div class=\"dbx-default-pickable-item-field-list-item dbx-flex-bar\">\n @if (icon) {\n <mat-icon class=\"dbx-icon-spacer\">{{ icon }}</mat-icon>\n }\n <span class=\"dbx-chip-label\">{{ label }}</span>\n @if (sublabel) {\n <span class=\"dbx-chip-sublabel\">({{ sublabel }})</span>\n }\n </div>\n `,\n imports: [MatIconModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxPickableListFieldItemListViewItemComponent<T> extends AbstractDbxValueListViewItemComponent<PickableValueFieldDisplayValue<T>> {\n readonly label = this.itemValue.label;\n readonly sublabel = this.itemValue.sublabel;\n readonly icon = this.itemValue.icon;\n}\n\n// List Field Component\n/**\n * Used for picking pre-set values using a selection list as the presentation.\n */\n@Component({\n templateUrl: 'pickable.list.field.component.html',\n imports: [DbxPickableListFieldItemListComponent, NgTemplateOutlet, FormsModule, ReactiveFormsModule, MatInputModule, MatDivider, DbxLoadingComponent, DbxInjectionComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxPickableListFieldComponent<T> extends AbstractDbxPickableItemFieldDirective<T> {\n onSelectionChange(event: unknown) {\n const items = (event as ListSelectionState<PickableValueFieldDisplayValue<T>>).items;\n const values = items.map((x) => x.itemValue.value);\n this.setValues(values);\n }\n}\n","<div class=\"dbx-pickable-item-field\">\n <dbx-loading [context]=\"context\">\n @if (showFilterInput) {\n <ng-container *ngTemplateOutlet=\"filterTemplate\"></ng-container>\n }\n <!-- Content -->\n <div class=\"dbx-pickable-item-field-list\">\n <div class=\"dbx-pickable-item-field-list-content\">\n <dbx-form-pickable-item-field-item-list [disabled]=\"isReadonlyOrDisabled\" [state$]=\"filterItemsLoadingState$\" (selectionChange)=\"onSelectionChange($event)\"></dbx-form-pickable-item-field-item-list>\n </div>\n <dbx-injection [config]=\"footerConfig\"></dbx-injection>\n </div>\n </dbx-loading>\n</div>\n\n<!-- Filter Input -->\n<ng-template #filterTemplate>\n <div class=\"dbx-pickable-item-field-filter\">\n <div class=\"dbx-label\">{{ filterLabel }}</div>\n <input [name]=\"name\" autocomplete=\"{{ autocomplete }}\" #filterMatInput=\"matInput\" matInput [placeholder]=\"placeholder\" [formControl]=\"inputCtrl\" />\n <mat-divider></mat-divider>\n <dbx-loading [linear]=\"true\" [context]=\"filterResultsContext\"></dbx-loading>\n <!-- No items found. -->\n @if (noItemsAvailableSignal()) {\n <p class=\"dbx-label\">No items match this filter.</p>\n }\n </div>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxPickableChipListFieldComponent } from './pickable.chip.field.component';\nimport { DbxPickableListFieldComponent, DbxPickableListFieldItemListComponent, DbxPickableListFieldItemListViewComponent, DbxPickableListFieldItemListViewItemComponent } from './pickable.list.field.component';\n\nconst importsAndExports = [DbxPickableChipListFieldComponent, DbxPickableListFieldComponent, DbxPickableListFieldItemListComponent, DbxPickableListFieldItemListViewComponent, DbxPickableListFieldItemListViewItemComponent];\n\n@NgModule({\n imports: [\n ...importsAndExports,\n FormlyModule.forChild({\n types: [\n { name: 'pickablechipfield', component: DbxPickableChipListFieldComponent, wrappers: ['form-field'] },\n { name: 'pickablelistfield', component: DbxPickableListFieldComponent, wrappers: ['form-field'] }\n ]\n })\n ],\n exports: importsAndExports\n})\nexport class DbxFormFormlyPickableFieldModule {}\n","import { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig, type MaterialFormFieldConfig } from '../../field';\nimport { PickableItemFieldItem, type PickableValueFieldsFieldProps } from './pickable.field.directive';\nexport { PickableItemFieldItem };\n\nexport interface PickableItemFieldConfig<T = unknown, M = unknown> extends LabeledFieldConfig, PickableValueFieldsFieldProps<T, M>, MaterialFormFieldConfig {}\n\nexport function pickableItemChipField<T = unknown, M = unknown>(config: PickableItemFieldConfig<T, M>): FormlyFieldConfig {\n const { key, materialFormField } = config;\n return formlyField({\n key,\n type: 'pickablechipfield',\n ...propsAndConfigForFieldConfig(config, {\n ...materialFormField,\n ...config,\n autocomplete: false\n })\n });\n}\n\nexport function pickableItemListField<T = unknown, M = unknown>(config: PickableItemFieldConfig<T, M>): FormlyFieldConfig {\n const { key, materialFormField } = config;\n return formlyField({\n key,\n type: 'pickablelistfield',\n ...propsAndConfigForFieldConfig(config, {\n ...materialFormField,\n ...config,\n autocomplete: false\n })\n });\n}\n","import { caseInsensitiveFilterByIndexOfDecisionFactory, type LabeledValue, type Maybe, type SearchStringFilterFunction, searchStringFilterFunction, sortByStringFunction } from '@dereekb/util';\nimport { type Observable, of } from 'rxjs';\nimport { type PickableValueFieldDisplayValue, type PickableValueFieldValue } from './pickable';\nimport { type PickableItemFieldItem, type PickableValueFieldsFieldProps } from './pickable.field.directive';\n\nexport const filterPickableItemFieldValuesByLabelFilterFunction: SearchStringFilterFunction<PickableValueFieldDisplayValue<any>> = searchStringFilterFunction({\n readStrings: (x) => [x.label],\n decisionFactory: caseInsensitiveFilterByIndexOfDecisionFactory\n});\n\nexport function filterPickableItemFieldValuesByLabel<T>(filterText: Maybe<string>, values: PickableValueFieldDisplayValue<T>[]): Observable<T[]> {\n let filteredValues: PickableValueFieldDisplayValue<T>[];\n\n if (filterText) {\n filteredValues = filterPickableItemFieldValuesByLabelFilterFunction(filterText, values);\n } else {\n filteredValues = values;\n }\n\n return of(filteredValues.map((x) => x.value));\n}\n\nexport const sortPickableItemsByLabelStringFunction = sortByStringFunction<PickableItemFieldItem<any>>((x) => x.itemValue.label);\n\nexport function sortPickableItemsByLabel<T>(chips: PickableItemFieldItem<T>[]): PickableItemFieldItem<T>[] {\n return chips.sort(sortPickableItemsByLabelStringFunction);\n}\n\n// MARK: PickableValueFieldValuesConfigForStaticLabeledValues\nexport type PickableValueFieldValuesConfigForStaticLabeledValues<T, M extends LabeledValue<T>> = Pick<PickableValueFieldsFieldProps<T, M>, 'loadValues' | 'displayForValue' | 'filterValues'>;\n\nexport interface PickableValueFieldValuesConfigForStaticLabeledValuesConfig<T, M extends LabeledValue<T>> {\n readonly allOptions: M[];\n readonly unknownOptionLabel?: string;\n}\n\nexport function pickableValueFieldValuesConfigForStaticLabeledValues<T, M extends LabeledValue<T>>(input: M[] | PickableValueFieldValuesConfigForStaticLabeledValuesConfig<T, M>): PickableValueFieldValuesConfigForStaticLabeledValues<T, M> {\n const config = Array.isArray(input) ? { allOptions: input } : input;\n const { allOptions, unknownOptionLabel = 'UNKNOWN' } = config;\n const values: PickableValueFieldValue<T, M>[] = allOptions.map((meta) => ({ value: meta.value, meta }));\n const optionsMap = new Map(allOptions.map((x) => [x.value, x]));\n\n return {\n loadValues: () => of(values),\n filterValues: filterPickableItemFieldValuesByLabel, // auto filter by label\n displayForValue: (values: PickableValueFieldValue<T, M>[]) =>\n of(\n values.map((x) => {\n const meta = x.meta ?? optionsMap.get(x.value);\n return { ...x, meta, label: meta?.label ?? unknownOptionLabel };\n })\n )\n };\n}\n","import { ChangeDetectionStrategy, Component, computed, Directive, inject, InjectionToken, input } from '@angular/core';\nimport { ConfiguredSearchableValueFieldDisplayValue } from './searchable';\nimport { mergeArraysIntoArray } from '@dereekb/util';\nimport { DbxInjectionComponent, DbxInjectionComponentConfig } from '@dereekb/dbx-core';\nimport { DbxAnchorComponent } from '@dereekb/dbx-web';\nimport { MatIconModule } from '@angular/material/icon';\n\nexport const DBX_SEARCHABLE_FIELD_COMPONENT_DATA_TOKEN = new InjectionToken('DbxSearchableField');\n\n@Component({\n selector: 'dbx-searchable-field-autocomplete-item',\n template: `\n <dbx-anchor [block]=\"true\" [anchor]=\"anchorSignal()\">\n <dbx-injection [config]=\"configSignal()\"></dbx-injection>\n </dbx-anchor>\n `,\n imports: [DbxAnchorComponent, DbxInjectionComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxSearchableFieldAutocompleteItemComponent<T> {\n readonly displayValue = input.required<ConfiguredSearchableValueFieldDisplayValue<T>>();\n\n readonly configSignal = computed(() => {\n const displayValue = this.displayValue();\n const config: DbxInjectionComponentConfig = {\n ...displayValue.display,\n providers: mergeArraysIntoArray(\n [\n {\n provide: DBX_SEARCHABLE_FIELD_COMPONENT_DATA_TOKEN,\n useValue: displayValue\n }\n ],\n displayValue.display.providers\n )\n };\n\n return config;\n });\n\n readonly anchorSignal = computed(() => this.displayValue().anchor);\n}\n\n// MARK: Default\n@Directive()\nexport abstract class AbstractDbxSearchableFieldDisplayDirective<T> {\n readonly displayValue = inject<ConfiguredSearchableValueFieldDisplayValue<T>>(DBX_SEARCHABLE_FIELD_COMPONENT_DATA_TOKEN);\n}\n\n@Component({\n selector: 'dbx-default-searchable-field-display',\n template: `\n <div class=\"dbx-default-searchable-field-display dbx-flex-bar\">\n @if (icon) {\n <mat-icon class=\"dbx-icon-spacer\">{{ icon }}</mat-icon>\n }\n <span class=\"dbx-chip-label\">{{ displayValue.label }}</span>\n @if (displayValue.sublabel) {\n <span class=\"dbx-chip-sublabel\">({{ displayValue.sublabel }})</span>\n }\n </div>\n `,\n imports: [MatIconModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxDefaultSearchableFieldDisplayComponent<T> extends AbstractDbxSearchableFieldDisplayDirective<T> {\n readonly icon = this.displayValue.icon;\n}\n","import { ArrayOrValue, Maybe, convertMaybeToArray, lastValue, PrimativeKey, separateValues, asArray, filterUniqueValues, Configurable } from '@dereekb/util';\nimport { DbxInjectionComponentConfig, mergeDbxInjectionComponentConfigs } from '@dereekb/dbx-core';\nimport { filterMaybe, SubscriptionObject, LoadingState, successResult, startWithBeginLoading, loadingStateContext, isLoadingStateInLoadingState } from '@dereekb/rxjs';\nimport { Directive, ElementRef, OnDestroy, OnInit, viewChild } from '@angular/core';\nimport { AbstractControl, FormControl, ValidatorFn } from '@angular/forms';\nimport { FieldTypeConfig, FormlyFieldProps } from '@ngx-formly/core';\nimport { FieldType } from '@ngx-formly/material';\nimport { debounceTime, distinctUntilChanged, first, map, mergeMap, shareReplay, startWith, switchMap, BehaviorSubject, of, Observable } from 'rxjs';\nimport { SearchableValueFieldHashFn, SearchableValueFieldStringSearchFn, SearchableValueFieldDisplayFn, SearchableValueFieldDisplayValue, SearchableValueFieldValue, SearchableValueFieldAnchorFn, ConfiguredSearchableValueFieldDisplayValue } from './searchable';\nimport { DbxDefaultSearchableFieldDisplayComponent } from './searchable.field.autocomplete.item.component';\nimport { camelCase } from 'change-case-all';\nimport { toSignal } from '@angular/core/rxjs-interop';\n\nexport interface StringValueFieldsFieldProps extends FormlyFieldProps {\n /**\n * Custom input validators.\n */\n readonly textInputValidator?: ValidatorFn | ValidatorFn[];\n}\n\nexport interface SearchableValueFieldsFieldProps<T, M = unknown, H extends PrimativeKey = PrimativeKey> extends FormlyFieldProps, StringValueFieldsFieldProps {\n /**\n * Whether or not to allow string values to be used directly, or if values can only be chosen from searching.\n */\n readonly allowStringValues?: boolean;\n /**\n * Whether or not to set/get values as an array or a single value. If set false, multiSelect is ignored.\n */\n readonly asArrayValue?: boolean;\n /**\n * Optional conversion function. If provided, allowStringValues is considered true.\n */\n readonly convertStringValue?: (text: string) => T;\n /**\n * Used for hashing display values and omitting repeat values.\n *\n * If hashForValue is not provided, the value's value will be used as is.\n */\n readonly hashForValue?: SearchableValueFieldHashFn<T, H>;\n /**\n * Performs a search.\n */\n readonly search: SearchableValueFieldStringSearchFn<T, M>;\n /**\n * Whether or not to allow searches on empty text. Is false by default.\n */\n readonly searchOnEmptyText?: boolean;\n /**\n * Default injected config to use for display values.\n */\n readonly display?: Partial<DbxInjectionComponentConfig>;\n /**\n * Used for building a display value given the input.\n */\n readonly displayForValue: SearchableValueFieldDisplayFn<T, M>;\n /**\n * Whether or not to use the anchor field on value elements.\n *\n * This has no default effect if a component class is provided.\n */\n readonly useAnchor?: boolean;\n /**\n * Used for retrieving an anchor value for values that have no anchor value set.\n *\n * Only used when useAnchor is true.\n */\n readonly anchorForValue?: SearchableValueFieldAnchorFn<T, M>;\n /**\n * Whether or not to show \"Clear\" in the autcomplete list.\n */\n readonly showClearValue?: boolean;\n /**\n * Label for the search input.\n *\n * Defaults to \"Search\"\n */\n readonly searchLabel?: string;\n /**\n * (Optional) observable that will trigger the clearing of all cached display values.\n */\n readonly refreshDisplayValues$?: Observable<unknown>;\n}\n\nconst DEFAULT_SEARCH_INPUT_PLACEHOLDER = 'Type to Search';\n\nconst DEFAULT_SEARCHABLE_FIELD_DISPLAY: Partial<DbxInjectionComponentConfig> = {\n componentClass: DbxDefaultSearchableFieldDisplayComponent\n};\n\n/**\n * Abstract searchable field that provides a feature for searching for values, and for displaying values using Observables.\n *\n * Display values are cached for performance.\n */\n@Directive()\nexport abstract class AbstractDbxSearchableValueFieldDirective<T, M = unknown, H extends PrimativeKey = PrimativeKey, C extends SearchableValueFieldsFieldProps<T, M, H> = SearchableValueFieldsFieldProps<T, M, H>> extends FieldType<FieldTypeConfig<C>> implements OnInit, OnDestroy {\n /**\n * Whether or not to set/get values as an array.\n */\n abstract get multiSelect(): boolean;\n\n /**\n * Optional override set by the parent class for whether or not to allow the current value to sync to the input.\n */\n allowSyncValueToInput = false;\n\n /**\n * Default placeholder text to use when searchOnEmptyText is false.\n */\n defaultSearchInputPlaceholder?: Maybe<string> = DEFAULT_SEARCH_INPUT_PLACEHOLDER;\n\n readonly textInput = viewChild<string, ElementRef<HTMLInputElement>>('textInput', { read: ElementRef<HTMLInputElement> });\n\n readonly inputCtrl = new FormControl<string>('');\n\n private readonly _formControlObs = new BehaviorSubject<Maybe<AbstractControl>>(undefined);\n readonly formControl$ = this._formControlObs.pipe(filterMaybe());\n\n private readonly _clearDisplayHashMapSub = new SubscriptionObject();\n private readonly _displayHashMap = new BehaviorSubject<Map<H, ConfiguredSearchableValueFieldDisplayValue<T, M>>>(new Map());\n\n readonly inputValue$: Observable<string> = this.inputCtrl.valueChanges.pipe(\n startWith(this.inputCtrl.value),\n map((x) => x || '')\n );\n\n readonly inputValueString$: Observable<string> = this.inputValue$.pipe(debounceTime(200), distinctUntilChanged());\n\n readonly searchResultsState$: Observable<LoadingState<ConfiguredSearchableValueFieldDisplayValue<T, M>[]>> = this.inputValueString$.pipe(\n switchMap((text) =>\n (text || this.searchOnEmptyText ? this.search(text ?? '') : of([])).pipe(\n switchMap((x) => this.loadDisplayValuesForFieldValues(x)),\n // Return begin loading to setup the loading state.\n startWithBeginLoading()\n )\n ),\n shareReplay(1)\n );\n\n private readonly _singleValueSyncSub = new SubscriptionObject();\n\n readonly searchContext = loadingStateContext({ obs: this.searchResultsState$, showLoadingOnNoValue: false });\n readonly searchResults$: Observable<ConfiguredSearchableValueFieldDisplayValue<T, M>[]> = this.searchResultsState$.pipe(\n map((x) => x?.value ?? []),\n shareReplay(1)\n );\n readonly isLoadingSearchResults$: Observable<boolean> = this.searchResultsState$.pipe(map(isLoadingStateInLoadingState), distinctUntilChanged(), shareReplay(1));\n\n readonly _formControlValue$: Observable<T | T[]> = this.formControl$.pipe(switchMap((control) => control.valueChanges.pipe(startWith(control.value), shareReplay(1))));\n\n readonly values$: Observable<T[]> = this._formControlValue$.pipe(map(convertMaybeToArray), shareReplay(1));\n\n readonly displayValuesState$: Observable<LoadingState<ConfiguredSearchableValueFieldDisplayValue<T, M>[]>> = this.values$.pipe(\n distinctUntilChanged(),\n switchMap((values: T[]) => this.loadDisplayValuesForValues(values)),\n shareReplay(1)\n );\n\n readonly displayValues$: Observable<ConfiguredSearchableValueFieldDisplayValue<T, M>[]> = this.displayValuesState$.pipe(map((x) => x?.value ?? []));\n\n readonly inputValueSignal = toSignal(this.inputValue$);\n readonly searchResultsSignal = toSignal(this.searchResults$);\n readonly displayValuesSignal = toSignal(this.displayValues$);\n\n readonly isLoadingSearchResultsSignal = toSignal(this.isLoadingSearchResults$);\n\n get name(): string {\n return this.field.name ?? camelCase(this.label ?? (this.key as string));\n }\n\n get label(): Maybe<string> {\n return this.props.label;\n }\n\n get readonly(): Maybe<boolean> {\n return this.props.readonly;\n }\n\n get isReadonlyOrDisabled() {\n return this.readonly || this.disabled;\n }\n\n get searchableField(): SearchableValueFieldsFieldProps<T, M, H> {\n return this.props;\n }\n\n get asArrayValue(): boolean {\n return this.searchableField.asArrayValue ?? true;\n }\n\n get pickOnlyOne(): boolean {\n return this.asArrayValue === false || this.multiSelect === false;\n }\n\n get searchOnEmptyText(): boolean {\n return this.searchableField.searchOnEmptyText ?? false;\n }\n\n get searchInputPlaceholder(): string | '' {\n const searchOnEmpty = this.searchOnEmptyText;\n const placeholder = this.searchableField.placeholder;\n const test = placeholder || (searchOnEmpty ? undefined : this.defaultSearchInputPlaceholder) || '';\n return test;\n }\n\n get autocomplete(): string {\n return (this.props.attributes?.['autocomplete'] ?? this.key) as string;\n }\n\n get hashForValue(): SearchableValueFieldHashFn<T, H> {\n return this.searchableField.hashForValue ?? ((x) => x as unknown as H);\n }\n\n get displayForValue(): SearchableValueFieldDisplayFn<T, M> {\n return this.searchableField.displayForValue;\n }\n\n get useAnchor(): Maybe<boolean> {\n return this.searchableField.useAnchor;\n }\n\n get anchorForValue(): Maybe<SearchableValueFieldAnchorFn<T, M>> {\n return this.searchableField.anchorForValue;\n }\n\n get display(): Maybe<Partial<DbxInjectionComponentConfig>> {\n return this.searchableField.display;\n }\n\n get search(): SearchableValueFieldStringSearchFn<T, M> {\n return this.searchableField.search;\n }\n\n get values(): T[] {\n return this._getValueOnFormControl(this.formControl.value) ?? [];\n }\n\n get allowStringValues(): boolean {\n return this.searchableField.allowStringValues ?? Boolean(this.convertStringValue);\n }\n\n get convertStringValue(): Maybe<(text: string) => T> {\n return this.searchableField.convertStringValue;\n }\n\n get showClearValue(): boolean {\n return this.searchableField.showClearValue ?? true;\n }\n\n get searchLabel() {\n return this.searchableField.searchLabel ?? 'Search';\n }\n\n get refreshDisplayValues$() {\n return this.searchableField.refreshDisplayValues$;\n }\n\n loadDisplayValuesForValues(values: T[]): Observable<LoadingState<ConfiguredSearchableValueFieldDisplayValue<T, M>[]>> {\n return this.loadDisplayValuesForFieldValues(values.map((value) => ({ value })));\n }\n\n loadDisplayValuesForFieldValues(values: SearchableValueFieldValue<T, M>[]): Observable<LoadingState<ConfiguredSearchableValueFieldDisplayValue<T, M>[]>> {\n return this.getDisplayValuesForFieldValues(values).pipe(\n map((displayValues: ConfiguredSearchableValueFieldDisplayValue<T, M>[]) => successResult(displayValues)),\n startWithBeginLoading(),\n shareReplay(1)\n );\n }\n\n getDisplayValuesForFieldValues(values: SearchableValueFieldValue<T, M>[]): Observable<ConfiguredSearchableValueFieldDisplayValue<T, M>[]> {\n return this._displayHashMap.pipe(\n mergeMap((displayMap) => {\n const mappingResult = values.map((x) => [x, this.hashForValue(x.value)] as [SearchableValueFieldValue<T, M>, H]).map(([x, hash], i) => [i, hash, x, displayMap.get(hash)] as [number, H, SearchableValueFieldValue<T, M>, ConfiguredSearchableValueFieldDisplayValue<T, M>]);\n\n const {\n //\n included: hasDisplay,\n excluded: needsDisplay\n } = separateValues(mappingResult, (x) => Boolean(x[3]));\n\n let obs: Observable<ConfiguredSearchableValueFieldDisplayValue<T, M>[]>;\n\n if (needsDisplay.length > 0) {\n // Go get the display value.\n const displayValuesObs = this.displayForValue(needsDisplay.map((x) => x[2]));\n const defaultDisplay = mergeDbxInjectionComponentConfigs([DEFAULT_SEARCHABLE_FIELD_DISPLAY, this.display]);\n\n const anchorForValue = this.useAnchor && this.anchorForValue;\n\n obs = displayValuesObs.pipe(\n first(),\n map((displayResults) => {\n // Assign the default component classes to complete configuration.\n (displayResults as Configurable<SearchableValueFieldDisplayValue<T, M>>[]).forEach((x) => {\n if (!x.display) {\n x.display = defaultDisplay;\n } else {\n x.display = mergeDbxInjectionComponentConfigs([defaultDisplay, x.display]);\n }\n\n if (!x.anchor && anchorForValue) {\n x.anchor = anchorForValue(x);\n }\n });\n\n // Create a map to re-join values later.\n const displayResultsMapping: [ConfiguredSearchableValueFieldDisplayValue<T, M>, H][] = (displayResults as ConfiguredSearchableValueFieldDisplayValue<T, M>[]).map((x) => [x, this.hashForValue(x.value)]);\n const valueIndexHashMap = new Map(displayResultsMapping.map(([x, hash]) => [hash, x]));\n\n // Update displayMap. No need to push an update notification.\n displayResultsMapping.forEach(([x, hash]) => displayMap.set(hash, x));\n\n // Zip values back together.\n const newDisplayValues = mappingResult.map((x) => x[3] ?? valueIndexHashMap.get(x[1]));\n\n // Return display values.\n return newDisplayValues;\n })\n );\n } else {\n // If all display values are hashed return that.\n obs = of(hasDisplay.map((x) => x[3]));\n }\n\n return obs;\n })\n );\n }\n\n ngOnInit(): void {\n this._formControlObs.next(this.formControl);\n\n if (this.refreshDisplayValues$ != null) {\n this._clearDisplayHashMapSub.subscription = this.refreshDisplayValues$.subscribe(() => this._displayHashMap.next(new Map()));\n }\n\n if (this.searchableField.textInputValidator) {\n this.inputCtrl.setValidators(this.searchableField.textInputValidator);\n }\n\n if (this.allowSyncValueToInput && this.multiSelect === false) {\n this._singleValueSyncSub.subscription = this.displayValues$.subscribe((x) => {\n if (x[0]) {\n this._syncSingleValue(x[0]);\n }\n });\n }\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._clearDisplayHashMapSub.destroy();\n this._displayHashMap.complete();\n this._singleValueSyncSub.destroy();\n this._formControlObs.complete();\n this.searchContext.destroy();\n }\n\n /**\n * Used to sync the input control with the selected value.\n *\n * Only used when multiSelect is false.\n */\n protected _syncSingleValue(value: SearchableValueFieldDisplayValue<T>): void {\n this.inputCtrl.setValue(value.label);\n }\n\n protected _addWithTextValue(text: string): void {\n if (!this.searchableField.allowStringValues) {\n return;\n }\n\n if (text) {\n text = (text || '').trim();\n this.inputCtrl.setValue(text.trim());\n }\n\n if (!this.inputCtrl.valid) {\n return;\n }\n\n if (text) {\n const value = this.convertStringValue ? this.convertStringValue(text) : (text as unknown as T);\n this.addValue(value);\n }\n }\n\n addWithDisplayValue(displayValue: SearchableValueFieldDisplayValue<T>): void {\n this.addValue(displayValue.value);\n }\n\n removeWithDisplayValue(displayValue: SearchableValueFieldDisplayValue<T>): void {\n this.removeValue(displayValue.value);\n }\n\n _tryAddCurrentInputValue(): boolean {\n let addedValue = false;\n\n if (this.allowStringValues) {\n const value = this.inputCtrl.value || '';\n\n if ((value || '').trim()) {\n this._addWithTextValue(value);\n addedValue = true;\n }\n }\n\n return addedValue;\n }\n\n addValue(value: T): void {\n const textInput = this.textInput();\n\n if (textInput) {\n textInput.nativeElement.value = '';\n }\n\n this.inputCtrl.setValue(null);\n this.setValues([...this.values, value]);\n }\n\n removeValue(value: T): void {\n let values;\n\n if (this.hashForValue) {\n const hashToFilter = this.hashForValue(value);\n values = this.values.filter((x) => this.hashForValue(x) !== hashToFilter);\n } else {\n values = this.values.filter((x) => x !== value);\n }\n\n this.setValues(values);\n }\n\n clearValues(): void {\n this.setValues([]);\n }\n\n setValues(values: T[]): void {\n // Use to filter non-unique values.\n if (this.hashForValue) {\n values = filterUniqueValues(values, this.hashForValue);\n }\n\n if (this.pickOnlyOne) {\n values = [lastValue(values)].filter((x) => x != null);\n }\n\n this._setValueOnFormControl(values);\n }\n\n // MARK: Internal\n protected _getValueOnFormControl(valueOnFormControl: ArrayOrValue<T>): T[] {\n const value: T[] = valueOnFormControl != null ? asArray(valueOnFormControl) : []; // Always return an array.\n return value;\n }\n\n protected _setValueOnFormControl(values: T[]): void {\n let newValue: T | T[] = values;\n\n if (!this.asArrayValue) {\n newValue = [values[0]].filter((x) => x != null)[0];\n }\n\n this.formControl.setValue(newValue);\n this.formControl.markAsDirty();\n this.formControl.markAsTouched();\n }\n}\n","import { SubscriptionObject } from '@dereekb/rxjs';\nimport { Subject } from 'rxjs';\nimport { ChangeDetectionStrategy, Component, OnDestroy, OnInit } from '@angular/core';\nimport { MatAutocompleteModule, MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';\nimport { MatChipInputEvent, MatChipsModule } from '@angular/material/chips';\nimport { AbstractDbxSearchableValueFieldDirective, SearchableValueFieldsFieldProps } from './searchable.field.directive';\nimport { COMMA, ENTER } from '@angular/cdk/keycodes';\nimport { skipUntilTimeElapsedAfterLastEmission } from '@dereekb/date';\nimport { PrimativeKey } from '@dereekb/util';\nimport { SearchableValueFieldDisplayValue } from './searchable';\nimport { MatIconModule } from '@angular/material/icon';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { DbxLoadingModule } from '@dereekb/dbx-web';\nimport { DbxSearchableFieldAutocompleteItemComponent } from './searchable.field.autocomplete.item.component';\nimport { MatOptionModule } from '@angular/material/core';\n\nexport interface SearchableChipValueFieldsFieldProps<T, M = unknown, H extends PrimativeKey = PrimativeKey> extends SearchableValueFieldsFieldProps<T, M, H> {\n /**\n * Whether or not to allow multiple items to be selected.\n */\n readonly multiSelect?: boolean;\n}\n\n@Component({\n templateUrl: 'searchable.chip.field.component.html',\n imports: [MatChipsModule, MatIconModule, FormsModule, ReactiveFormsModule, DbxLoadingModule, MatAutocompleteModule, MatOptionModule, DbxSearchableFieldAutocompleteItemComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxSearchableChipFieldComponent<T, M = unknown, H extends PrimativeKey = PrimativeKey> extends AbstractDbxSearchableValueFieldDirective<T, M, H, SearchableChipValueFieldsFieldProps<T, M, H>> implements OnInit, OnDestroy {\n override get multiSelect(): boolean {\n return this.props.multiSelect ?? true;\n }\n\n private readonly _blur = new Subject<void>();\n private readonly _blurSub = new SubscriptionObject();\n\n readonly separatorKeysCodes: number[] = [ENTER, COMMA];\n\n selected(event: MatAutocompleteSelectedEvent): void {\n this.addWithDisplayValue(event.option.value);\n }\n\n tabPressedOnInput(event: KeyboardEvent): boolean {\n if (event?.key?.toLowerCase() === 'tab') {\n if (this._tryAddCurrentInputValue()) {\n event.preventDefault();\n event.stopImmediatePropagation();\n return false;\n }\n }\n\n return true;\n }\n\n addChip(event: MatChipInputEvent): void {\n const text = event.value ?? this.inputCtrl.value;\n return this._addWithTextValue(text);\n }\n\n protected override _syncSingleValue(value: SearchableValueFieldDisplayValue<T>): void {\n // Do nothing\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n\n // Only try and add the text item as a value if a value wasn't just added (for example, clicking a value).\n this._blurSub.subscription = this._blur.pipe(skipUntilTimeElapsedAfterLastEmission(this.values$, 100)).subscribe(() => {\n this._tryAddCurrentInputValue();\n });\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._blur.complete();\n this._blurSub.destroy();\n }\n\n onBlur(): void {\n this._blur.next();\n }\n}\n","<div class=\"dbx-searchable-field\">\n <!-- View -->\n <mat-chip-grid [required]=\"required\" [disabled]=\"readonly\" #chipList>\n @for (displayValue of displayValuesSignal(); track displayValue.value) {\n <mat-chip-row [removable]=\"true\" (removed)=\"removeWithDisplayValue(displayValue)\">\n @if (displayValue.icon) {\n <mat-icon matChipAvatar>{{ displayValue.icon }}</mat-icon>\n }\n <span class=\"dbx-chip-label\">{{ displayValue.label }}</span>\n @if (displayValue.sublabel) {\n <span class=\"dbx-chip-sublabel\">{{ displayValue.sublabel }}</span>\n }\n @if (!readonly) {\n <mat-icon matChipRemove>cancel</mat-icon>\n }\n </mat-chip-row>\n }\n <input #textInput [name]=\"name\" [placeholder]=\"searchInputPlaceholder\" [formControl]=\"inputCtrl\" [matAutocomplete]=\"auto\" autocomplete=\"{{ autocomplete }}\" [matAutocompleteDisabled]=\"readonly\" [matChipInputFor]=\"chipList\" (keydown)=\"tabPressedOnInput($event)\" [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\" (matChipInputTokenEnd)=\"addChip($event)\" (blur)=\"onBlur()\" />\n </mat-chip-grid>\n <div class=\"searchable-field-form-loading\">\n <dbx-loading [linear]=\"true\" [context]=\"searchContext\"></dbx-loading>\n </div>\n</div>\n\n<!-- Autocomplete -->\n<mat-autocomplete class=\"dbx-searchable-text-field-autocomplete\" #auto=\"matAutocomplete\" (optionSelected)=\"selected($event)\">\n @for (displayValue of searchResultsSignal(); track displayValue.value) {\n <mat-option [value]=\"displayValue\">\n <dbx-searchable-field-autocomplete-item [displayValue]=\"displayValue\"></dbx-searchable-field-autocomplete-item>\n </mat-option>\n }\n</mat-autocomplete>\n","import { arrayToMap, type Maybe, type PrimativeKey, separateValues } from '@dereekb/util';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type Observable, of, switchMap, map } from 'rxjs';\nimport { type LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig, type DescriptionFieldConfig, type MaterialFormFieldConfig } from '../../field';\nimport { type SearchableValueFieldDisplayFn, type SearchableValueFieldDisplayValue, type SearchableValueFieldValue } from './searchable';\nimport { type SearchableChipValueFieldsFieldProps } from './searchable.chip.field.component';\nimport { type SearchableTextValueFieldsFieldProps } from './searchable.text.field.component';\n\n/**\n * Used to create a SearchableValueFieldDisplayFn function that will retrieve the metadata for items that are missing their metadata so they can be displayed properly.\n *\n * @param param0\n * @returns\n */\nexport function makeMetaFilterSearchableFieldValueDisplayFn<T extends string | number = string | number, M = unknown>({ loadMetaForValues, makeDisplayForValues }: { loadMetaForValues: (values: SearchableValueFieldValue<T, M>[]) => Observable<SearchableValueFieldValue<T, M>[]>; makeDisplayForValues: (values: SearchableValueFieldValue<T, M>[]) => Observable<SearchableValueFieldDisplayValue<T, M>[]> }): SearchableValueFieldDisplayFn<T, M> {\n return (values: SearchableValueFieldValue<T, M>[]) => {\n const { included: loaded, excluded: needLoading } = separateValues(values, (x) => Boolean(x.meta));\n let allValues: Observable<SearchableValueFieldValue<T, M>[]>;\n\n if (needLoading.length > 0) {\n const loadingResult = loadMetaForValues(needLoading);\n allValues = loadingResult.pipe(\n map((result) => {\n const resultMap: Map<Maybe<T>, SearchableValueFieldValue<T, M>> = arrayToMap(result, (x) => x.value);\n\n const mergedWithLoad = needLoading.map((x) => {\n const id = x.value;\n const loadedItem = resultMap.get(id);\n const anchor = x.anchor ?? loadedItem?.anchor;\n const meta: Maybe<M> = loadedItem?.meta;\n\n return {\n ...x,\n anchor,\n meta\n };\n });\n\n return mergedWithLoad;\n }),\n map((result) => [...loaded, ...result])\n );\n } else {\n allValues = of(loaded);\n }\n\n return allValues.pipe(switchMap(makeDisplayForValues));\n };\n}\n\n// MARK: Chips\nexport type StringSearchableChipFieldConfig<M = unknown> = Omit<SearchableChipFieldConfig<string, M>, 'allowStringValues'>;\n\nexport function searchableStringChipField<M = unknown>(config: StringSearchableChipFieldConfig<M>): FormlyFieldConfig {\n return searchableChipField({\n ...config,\n allowStringValues: true\n });\n}\n\nexport interface SearchableChipFieldConfig<T = unknown, M = unknown, H extends PrimativeKey = PrimativeKey> extends LabeledFieldConfig, DescriptionFieldConfig, MaterialFormFieldConfig, SearchableChipValueFieldsFieldProps<T, M, H> {}\n\nexport function searchableChipField<T, M = unknown, H extends PrimativeKey = PrimativeKey>(config: SearchableChipFieldConfig<T, M, H>): FormlyFieldConfig {\n const { key, placeholder, materialFormField } = config;\n return formlyField({\n key,\n type: 'searchablechipfield',\n ...propsAndConfigForFieldConfig(config, {\n ...materialFormField,\n ...config,\n placeholder: placeholder ?? 'Add...',\n autocomplete: false\n })\n });\n}\n\n// MARK: Text\nexport interface SearchableTextFieldConfig<T = unknown, M = unknown, H extends PrimativeKey = PrimativeKey> extends LabeledFieldConfig, DescriptionFieldConfig, MaterialFormFieldConfig, SearchableTextValueFieldsFieldProps<T, M, H> {}\n\nexport function searchableTextField<T, M = unknown, H extends PrimativeKey = PrimativeKey>(config: SearchableTextFieldConfig<T, M, H>): FormlyFieldConfig {\n const { key, materialFormField } = config;\n return formlyField({\n key,\n type: 'searchabletextfield',\n ...propsAndConfigForFieldConfig(config, {\n ...materialFormField,\n ...config,\n autocomplete: false\n })\n });\n}\n","import { ChangeDetectionStrategy, Component, computed, OnDestroy, OnInit } from '@angular/core';\nimport { MatAutocompleteModule, MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';\nimport { AbstractDbxSearchableValueFieldDirective, SearchableValueFieldsFieldProps } from './searchable.field.directive';\nimport { map, shareReplay } from 'rxjs';\nimport { PrimativeKey } from '@dereekb/util';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatIconModule } from '@angular/material/icon';\nimport { DbxLoadingModule } from '@dereekb/dbx-web';\nimport { DbxSearchableFieldAutocompleteItemComponent } from './searchable.field.autocomplete.item.component';\nimport { NgClass } from '@angular/common';\nimport { MatInput } from '@angular/material/input';\nimport { MatOptionModule } from '@angular/material/core';\nimport { SearchableValueFieldDisplayValue } from './searchable';\n\nexport interface SearchableTextValueFieldsFieldProps<T, M = unknown, H extends PrimativeKey = PrimativeKey> extends SearchableValueFieldsFieldProps<T, M, H> {\n readonly showSelectedValue?: boolean;\n}\n\n/**\n * Display component for selecting a single item/value.\n */\n@Component({\n templateUrl: 'searchable.text.field.component.html',\n imports: [FormsModule, MatInput, NgClass, ReactiveFormsModule, DbxLoadingModule, MatOptionModule, MatAutocompleteModule, MatChipsModule, MatIconModule, DbxSearchableFieldAutocompleteItemComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxSearchableTextFieldComponent<T, M = unknown, H extends PrimativeKey = PrimativeKey> extends AbstractDbxSearchableValueFieldDirective<T, M, H, SearchableTextValueFieldsFieldProps<T, M, H>> implements OnInit, OnDestroy {\n override allowSyncValueToInput = true;\n\n readonly selectedDisplayValue$ = this.displayValues$.pipe(\n map((x) => x[0]),\n shareReplay(1)\n );\n\n readonly selectedDisplayValueSignal = toSignal(this.selectedDisplayValue$);\n readonly hasValueSignal = computed(() => Boolean(this.selectedDisplayValueSignal()));\n readonly showSelectedDisplayValueSignal = computed(() => this.showSelectedValue && this.hasValueSignal());\n\n override get searchableField(): SearchableTextValueFieldsFieldProps<T, M, H> {\n return this.props;\n }\n\n get showSelectedValue() {\n return this.searchableField.showSelectedValue ?? !this.allowStringValues; // Show the selected value only if string values are allowed.\n }\n\n get multiSelect() {\n return false;\n }\n\n /*\n private _clearInputSub = new SubscriptionObject();\n\n override ngOnInit(): void {\n super.ngOnInit();\n\n this._clearInputSub.subscription = this.inputValue$.pipe(skipWhile((x) => !x)).subscribe((x) => {\n if (!x) {\n // this.clearValues();\n }\n });\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._clearInputSub.destroy();\n }\n */\n\n selected(event: MatAutocompleteSelectedEvent): void {\n const value = event.option.value as SearchableValueFieldDisplayValue<T> | { _ignore?: true } | { _clear?: true };\n\n console.log('selected', value);\n\n if ((value as any)._clear) {\n this.clearValues();\n } else if (!(value as any)._ignore) {\n this.addWithDisplayValue(value as SearchableValueFieldDisplayValue<T>);\n }\n }\n}\n","<div class=\"dbx-searchable-text-field\" [ngClass]=\"{ 'dbx-searchable-text-field-has-value': hasValueSignal(), 'dbx-searchable-text-field-show-value': showSelectedValue }\">\n <!-- Result View -->\n @if (showSelectedDisplayValueSignal()) {\n <div class=\"dbx-searchable-text-field-value mat-option mat-option-text\">\n <dbx-searchable-field-autocomplete-item [displayValue]=\"selectedDisplayValueSignal()!\"></dbx-searchable-field-autocomplete-item>\n </div>\n }\n <div class=\"dbx-searchable-text-field-input\">\n @if (searchLabel) {\n <div class=\"dbx-label\">{{ searchLabel }}</div>\n }\n <!-- View -->\n <input type=\"search\" [name]=\"name\" matInput #textInput [placeholder]=\"searchInputPlaceholder\" [formControl]=\"inputCtrl\" [matAutocomplete]=\"auto\" [matAutocompleteDisabled]=\"readonly || disabled\" autocomplete=\"{{ autocomplete }}\" />\n <div class=\"searchable-field-form-loading\">\n <dbx-loading [linear]=\"true\" [context]=\"searchContext\"></dbx-loading>\n </div>\n </div>\n</div>\n\n<!-- Autocomplete -->\n<mat-autocomplete class=\"dbx-searchable-text-field-autocomplete\" #auto (optionSelected)=\"selected($event)\">\n @for (displayValue of searchResultsSignal(); track displayValue.value) {\n <mat-option [value]=\"displayValue\">\n <dbx-searchable-field-autocomplete-item [displayValue]=\"displayValue\"></dbx-searchable-field-autocomplete-item>\n </mat-option>\n }\n <!-- If No Results -->\n @if (searchResultsSignal()?.length === 0) {\n @if (!isLoadingSearchResultsSignal()) {\n <mat-option value=\"\" disabled>\n <p class=\"dbx-clear-hint text-center\">No results found.</p>\n </mat-option>\n } @else {\n <mat-option value=\"\" disabled>\n <p class=\"dbx-clear-hint text-center\">Loading...</p>\n </mat-option>\n }\n }\n <!-- Add/Pick String Value -->\n @if (allowStringValues && inputValueSignal()) {\n <mat-option [value]=\"{ value: inputValueSignal() }\">\n <p class=\"dbx-clear-hint text-center\">\"{{ inputValueSignal() }}\"</p>\n </mat-option>\n }\n <!-- Show clear value -->\n @if (showClearValue && hasValueSignal()) {\n <mat-option value=\"\">\n <p class=\"dbx-clear-hint text-center\">Clear</p>\n </mat-option>\n }\n</mat-autocomplete>\n","import { NgModule } from '@angular/core';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxSearchableChipFieldComponent } from './searchable.chip.field.component';\nimport { DbxDefaultSearchableFieldDisplayComponent, DbxSearchableFieldAutocompleteItemComponent } from './searchable.field.autocomplete.item.component';\nimport { DbxSearchableTextFieldComponent } from './searchable.text.field.component';\n\nconst importsAndExports = [DbxSearchableChipFieldComponent, DbxSearchableTextFieldComponent, DbxSearchableFieldAutocompleteItemComponent, DbxDefaultSearchableFieldDisplayComponent];\n\n@NgModule({\n imports: [\n ...importsAndExports,\n FormlyModule.forChild({\n types: [\n { name: 'searchablechipfield', component: DbxSearchableChipFieldComponent, wrappers: ['form-field'] },\n { name: 'searchabletextfield', component: DbxSearchableTextFieldComponent, wrappers: ['form-field'] }\n ]\n })\n ],\n exports: importsAndExports\n})\nexport class DbxFormFormlySearchableFieldModule {}\n","import { of } from 'rxjs';\nimport { type LabeledFieldConfig } from '../../field';\nimport { type SearchableValueFieldValue } from './searchable';\nimport { searchableChipField } from './searchable.field';\nimport { type StringValueFieldsFieldProps } from './searchable.field.directive';\n\nexport interface ChipTextFieldConfig extends LabeledFieldConfig, StringValueFieldsFieldProps {\n caseSensitive?: boolean;\n}\n\nexport function chipTextField(config: ChipTextFieldConfig) {\n const convertStringValue = config.caseSensitive ? (x: string) => x : (x: string) => x?.toLowerCase();\n\n return searchableChipField({\n search: () => of([]), // no search by default\n ...config,\n allowStringValues: true,\n convertStringValue,\n displayForValue: (values: SearchableValueFieldValue<string>[]) => {\n return of(values.map((x) => ({ ...x, label: x.value })));\n }\n });\n}\n","import { filterMaybe, LoadingState, isLoadingStateWithDefinedValue, isLoadingStateLoading, LoadingStateWithDefinedValue, startWithBeginLoading, SubscriptionObject, successResult, beginLoading, mapLoadingStateValueWithOperator, loadingStateContext, WorkUsingContext, valueFromFinishedLoadingState } from '@dereekb/rxjs';\nimport { ChangeDetectionStrategy, Component, ElementRef, OnDestroy, OnInit, viewChild } from '@angular/core';\nimport { distinctUntilChanged, map, switchMap, shareReplay, startWith, mergeMap, scan, BehaviorSubject, tap, first, Observable, combineLatest, of } from 'rxjs';\nimport { addToSetCopy, asArray, convertMaybeToArray, filterMaybeArrayValues, lastValue, makeValuesGroupMap, Maybe, mergeArrays, PrimativeKey, separateValues, setContainsAllValues, setsAreEquivalent, sortByStringFunction } from '@dereekb/util';\nimport { FieldType, FormlyFieldProps } from '@ngx-formly/material/form-field';\nimport { FieldTypeConfig } from '@ngx-formly/core';\nimport { SourceSelectValueMetaLoader, SourceSelectMetaValueReader, SourceSelectOpenFunction, SourceSelectLoadSourcesFunction, SourceSelectLoadSource, SourceSelectLoadSourceLoadingState, SourceSelectDisplayValue, SourceSelectValue, SourceSelectDisplayFunction, SourceSelectDisplayValueGroup, SourceSelectValueGroup, SourceSelectOptions, SourceSelectOpenSourceResult } from './sourceselect';\nimport { AbstractControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { MatOptgroup, MatOption, MatSelect } from '@angular/material/select';\nimport { DbxActionModule, DbxButtonComponent, DbxButtonSpacerDirective, DbxLoadingComponent } from '@dereekb/dbx-web';\n\nexport interface SourceSelectFieldProps<T extends PrimativeKey = PrimativeKey, M = unknown> extends FormlyFieldProps {\n /**\n * Function to open the source and request values.\n */\n readonly openSource?: SourceSelectOpenFunction<M>;\n /**\n * Loads the sources to display entries from.\n */\n readonly loadSources?: SourceSelectLoadSourcesFunction<M>;\n /**\n * Reads the value from a meta value.\n */\n readonly valueReader: SourceSelectMetaValueReader<T, M>;\n /**\n * Loads metadata for the input values.\n */\n readonly metaLoader: SourceSelectValueMetaLoader<T, M>;\n /**\n * Used for building a display value given the input.\n */\n readonly displayForValue: SourceSelectDisplayFunction<T, M>;\n /**\n * Select button icon\n */\n readonly selectButtonIcon?: string;\n /**\n * Whether or not the selection is as an array.\n */\n readonly multiple?: boolean;\n /**\n * (Optional) observable that will trigger the clearing of all cached display values.\n */\n readonly refreshDisplayValues$?: Observable<unknown>;\n}\n\ninterface SelectFieldOpenSourceMap<T extends PrimativeKey = PrimativeKey, M = unknown> {\n readonly values: SourceSelectValue<T, M>[];\n readonly valuesSet: Set<T>;\n}\n\n/**\n * Component that displays a select view (multi or not)\n */\n@Component({\n selector: 'dbx-form-sourceselectfield',\n templateUrl: 'sourceselect.field.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatSelect, MatOption, FormsModule, ReactiveFormsModule, DbxButtonComponent, MatOptgroup, DbxButtonSpacerDirective, DbxActionModule, DbxLoadingComponent],\n standalone: true\n})\nexport class DbxFormSourceSelectFieldComponent<T extends PrimativeKey = PrimativeKey, M = unknown> extends FieldType<FieldTypeConfig<SourceSelectFieldProps<T, M>>> implements OnInit, OnDestroy {\n private readonly _cacheMetaSub = new SubscriptionObject();\n private readonly _clearDisplayHashMapSub = new SubscriptionObject();\n private readonly _valueMetaHashMap = new BehaviorSubject<Map<T, SourceSelectValue<T, M>>>(new Map());\n private readonly _displayHashMap = new BehaviorSubject<Map<T, SourceSelectDisplayValue<T, M>>>(new Map());\n\n private readonly _formControlObs = new BehaviorSubject<Maybe<AbstractControl<T[]>>>(undefined);\n private readonly _fromOpenSource = new BehaviorSubject<SelectFieldOpenSourceMap<T, M>>({ values: [], valuesSet: new Set() });\n private readonly _loadSources = new BehaviorSubject<Maybe<Observable<SourceSelectLoadSource<M>[]>>>(undefined);\n\n readonly buttonElement = viewChild<string, ElementRef<HTMLElement>>('button', { read: ElementRef<HTMLElement> });\n\n readonly formControl$ = this._formControlObs.pipe(filterMaybe());\n\n readonly currentFormControlValue$ = this.formControl$.pipe(\n switchMap((control) => control.valueChanges.pipe(startWith(control.value))),\n shareReplay(1)\n );\n\n readonly values$: Observable<T[]> = this.currentFormControlValue$.pipe(map(convertMaybeToArray), shareReplay(1));\n\n readonly allValuesEverSelected$: Observable<T[]> = this.values$.pipe(\n scan((acc, values) => {\n let result: Set<T> = acc;\n\n if (!setContainsAllValues(acc, values)) {\n result = addToSetCopy(acc, values);\n }\n\n return result;\n }, new Set<T>()),\n distinctUntilChanged(),\n map((x) => Array.from(x)),\n shareReplay(1)\n );\n\n readonly sourceSelectValuesFromValuesState$: Observable<LoadingState<SourceSelectValue<T, M>[]>> = this.allValuesEverSelected$.pipe(\n distinctUntilChanged(),\n switchMap((values: T[]) => this.loadSourceSelectValueForValues(values)),\n shareReplay(1)\n );\n\n readonly loadSources$: Observable<LoadingState<SourceSelectValueGroup<T, M>[]>> = this._loadSources.pipe(\n filterMaybe(),\n switchMap((loadSource) => {\n const { valueReader } = this;\n\n return loadSource.pipe(\n switchMap((sources: SourceSelectLoadSource<M>[]) => {\n const sourceObs: Observable<SourceSelectLoadSourceLoadingState<M>>[] = sources.map((x) => x.meta.pipe(map((metaState) => ({ ...metaState, label: x.label }))));\n\n if (sourceObs.length === 0) {\n return of(successResult([]));\n } else {\n return combineLatest(sourceObs).pipe(\n map((x) => {\n const statesWithValues = x.filter((y) => isLoadingStateWithDefinedValue(y));\n const loading = x.findIndex(isLoadingStateLoading) !== -1;\n const value: SourceSelectValueGroup<T, M>[] = statesWithValues.map((y) => {\n const group: SourceSelectValueGroup<T, M> = {\n label: y.label,\n values: (y.value as M[]).map((meta) => ({ meta, value: valueReader(meta) }))\n };\n\n return group;\n });\n\n return {\n loading,\n value\n };\n })\n );\n }\n })\n );\n })\n );\n\n readonly fromOpenSource$: Observable<SourceSelectValueGroup<T, M>> = this._fromOpenSource.pipe(\n distinctUntilChanged((a, b) => setsAreEquivalent(a.valuesSet, b.valuesSet)),\n map((x) => {\n const group: SourceSelectValueGroup<T, M> = {\n label: '',\n values: x.values\n };\n\n return group;\n }),\n shareReplay(1)\n );\n\n readonly valueGroupsFromSourcesState$: Observable<LoadingStateWithDefinedValue<SourceSelectValueGroup<T, M>[]>> = combineLatest([this.fromOpenSource$, this.loadSources$]).pipe(\n map(([fromOpenSourceGroup, loadSources]) => {\n const loadSourcesValue = loadSources.value ?? [];\n const value: SourceSelectValueGroup<T, M>[] = [fromOpenSourceGroup, ...loadSourcesValue];\n\n const result: LoadingStateWithDefinedValue<SourceSelectValueGroup<T, M>[]> = {\n loading: loadSources.loading,\n value\n };\n\n return result;\n }),\n shareReplay(1)\n );\n\n readonly allValueGroupsState$: Observable<LoadingState<SourceSelectValueGroup<T, M>[]>> = this.sourceSelectValuesFromValuesState$.pipe(\n switchMap((sourceSelectValuesFromValues: LoadingState<SourceSelectValue<T, M>[]>) => {\n if (isLoadingStateWithDefinedValue(sourceSelectValuesFromValues)) {\n const valuesFromValuesGroup: SourceSelectValueGroup<T, M> = {\n label: '',\n values: sourceSelectValuesFromValues.value\n };\n\n return this.valueGroupsFromSourcesState$.pipe(\n map((sourcesState) => {\n const allGroups: SourceSelectValueGroup<T, M>[] = [valuesFromValuesGroup, ...sourcesState.value];\n\n const result: LoadingState<SourceSelectValueGroup<T, M>[]> = {\n loading: sourceSelectValuesFromValues.loading || sourcesState.loading,\n value: allGroups\n };\n\n return result;\n })\n );\n } else {\n return of(beginLoading<SourceSelectValueGroup<T, M>[]>({}));\n }\n }),\n shareReplay(1)\n );\n\n readonly allOptionGroupsState$: Observable<LoadingState<SourceSelectDisplayValueGroup<T, M>[]>> = this.allValueGroupsState$.pipe(\n mapLoadingStateValueWithOperator(\n switchMap((groups: SourceSelectValueGroup<T, M>[]) => {\n const allGroupsReducedByLabel = makeValuesGroupMap(groups, (x) => x.label) as Map<string, SourceSelectValueGroup<T, M>[]>;\n\n const valuesEncountered = new Set<T>();\n const allUniqueValues: SourceSelectValue<T, M>[] = [];\n\n const simplifiedValuesGroups: SourceSelectValueGroup<T, M>[] = [];\n\n // sort to put the blank label first\n Array.from(allGroupsReducedByLabel.entries())\n .sort(sortByStringFunction((x) => x[0]))\n .forEach(([label, groups]) => {\n const values: SourceSelectValue<T, M>[] = [];\n\n groups.forEach((group) => {\n group.values.forEach((selectValue) => {\n if (!valuesEncountered.has(selectValue.value)) {\n values.push(selectValue);\n allUniqueValues.push(selectValue);\n valuesEncountered.add(selectValue.value);\n }\n });\n });\n\n if (values.length > 0) {\n simplifiedValuesGroups.push({\n label,\n values\n });\n }\n });\n\n const obs = this.getDisplayValuesForSelectValues(allUniqueValues).pipe(\n map((displayValues) => {\n const displayValuesMap = new Map(displayValues.map((x) => [x.value, x]));\n\n const displayGroups: SourceSelectDisplayValueGroup<T, M>[] = simplifiedValuesGroups.map((valueGroup) => {\n const values = filterMaybeArrayValues(valueGroup.values.map((x) => displayValuesMap.get(x.value)));\n\n return {\n label: valueGroup.label,\n values\n };\n });\n\n return displayGroups;\n })\n );\n\n return obs;\n })\n ),\n shareReplay(1)\n );\n\n readonly allOptionGroups$: Observable<SourceSelectDisplayValueGroup<T, M>[]> = this.allOptionGroupsState$.pipe(\n valueFromFinishedLoadingState(),\n map((x) => x ?? []),\n shareReplay(1)\n );\n\n readonly options$: Observable<SourceSelectOptions<T, M>> = this.allOptionGroups$.pipe(\n map((x) => {\n const { included: groupedValues, excluded: nonGroupedGroup } = separateValues(x, (y) => Boolean(y.label));\n\n const result: SourceSelectOptions<T, M> = {\n nonGroupedValues: nonGroupedGroup[0]?.values ?? [],\n groupedValues\n };\n\n return result;\n }),\n shareReplay(1)\n );\n\n readonly nonGroupedValues$ = this.options$.pipe(map((x) => x.nonGroupedValues));\n readonly groupedOptions$ = this.options$.pipe(map((x) => x.groupedValues));\n\n readonly nonGroupedValuesSignal = toSignal(this.nonGroupedValues$);\n readonly groupedOptionsSignal = toSignal(this.groupedOptions$);\n\n get sourceSelectField(): SourceSelectFieldProps<T, M> {\n return this.props;\n }\n\n get openSource() {\n return this.props.openSource;\n }\n\n get showOpenSourceButton() {\n return Boolean(this.openSource);\n }\n\n get loadSources() {\n return this.props.loadSources;\n }\n\n get valueReader() {\n return this.props.valueReader;\n }\n\n get metaLoader() {\n return this.props.metaLoader;\n }\n\n get displayForValue(): SourceSelectDisplayFunction<T, M> {\n return this.props.displayForValue;\n }\n\n get selectButtonIcon() {\n return this.props.selectButtonIcon ?? 'add';\n }\n\n get multiple() {\n return this.props.multiple || false;\n }\n\n get refreshDisplayValues$() {\n return this.props.refreshDisplayValues$;\n }\n\n loadSourceSelectValueForValues(values: T[]): Observable<LoadingState<SourceSelectValue<T, M>[]>> {\n return this.getSourceSelectValueForValues(values).pipe(\n map((sourceSelectValues: SourceSelectValue<T, M>[]) => successResult(sourceSelectValues)),\n startWithBeginLoading(),\n shareReplay(1)\n );\n }\n\n getSourceSelectValueForValues(values: T[]): Observable<SourceSelectValue<T, M>[]> {\n const { valueReader } = this;\n\n return this._valueMetaHashMap.pipe(\n mergeMap((metaMap) => {\n const mappingResult = values.map((hash, i) => [i, hash, metaMap.get(hash)] as [number, T, SourceSelectValue<T, M>]);\n\n const {\n //\n included: hasMeta,\n excluded: needsMeta\n } = separateValues(mappingResult, (x) => Boolean(x[2]));\n\n let obs: Observable<SourceSelectValue<T, M>[]>;\n\n if (needsMeta.length > 0) {\n // Go get the meta value.\n const metaValuesObs = this.metaLoader(needsMeta.map((x) => x[1]));\n\n obs = metaValuesObs.pipe(\n first(),\n map((metaResults) => {\n const metaResultsMapping: SourceSelectValue<T, M>[] = metaResults.map((meta) => ({ meta, value: valueReader(meta) }));\n const valueIndexHashMap = new Map(metaResultsMapping.map((x) => [x.value, x]));\n\n // Update metaMap. No need to push an update notification.\n metaResultsMapping.forEach((x) => metaMap.set(x.value, x));\n\n // Zip values back together.\n const newDisplayValues = mappingResult.map((x) => x[2] ?? valueIndexHashMap.get(x[1]));\n\n // Return display values.\n return newDisplayValues;\n })\n );\n } else {\n // If all display values are hashed return them\n obs = of(hasMeta.map((x) => x[2]));\n }\n\n return obs;\n })\n );\n }\n\n loadDisplayValuesForSelectValues(values: SourceSelectValue<T, M>[]): Observable<LoadingState<SourceSelectDisplayValue<T, M>[]>> {\n return this.getDisplayValuesForSelectValues(values).pipe(\n map((displayValues: SourceSelectDisplayValue<T, M>[]) => successResult(displayValues)),\n startWithBeginLoading(),\n shareReplay(1)\n );\n }\n\n getDisplayValuesForSelectValues(values: SourceSelectValue<T, M>[]): Observable<SourceSelectDisplayValue<T, M>[]> {\n return this._displayHashMap.pipe(\n mergeMap((metaMap) => {\n const mappingResult = values.map((x) => [x, x.value] as [SourceSelectValue<T, M>, T]).map(([x, hash], i) => [i, hash, x, metaMap.get(hash)] as [number, T, SourceSelectValue<T, M>, SourceSelectDisplayValue<T, M>]);\n\n const hasDisplay = mappingResult.filter((x) => Boolean(x[3]));\n const needsDisplay = mappingResult.filter((x) => !x[3]);\n let obs: Observable<SourceSelectDisplayValue<T, M>[]>;\n\n if (needsDisplay.length > 0) {\n // Go get the display value.\n const displayValuesObs = this.displayForValue(needsDisplay.map((x) => x[2]));\n\n obs = displayValuesObs.pipe(\n first(),\n map((displayResults) => {\n const displayResultsMapping: [SourceSelectDisplayValue<T, M>, T][] = (displayResults as SourceSelectDisplayValue<T, M>[]).map((x) => [x, x.value]);\n const valueIndexHashMap = new Map(displayResultsMapping.map(([x, hash]) => [hash, x]));\n\n // Update metaMap. No need to push an update notification.\n displayResultsMapping.forEach(([x, hash]) => metaMap.set(hash, x));\n\n // Zip values back together.\n const newDisplayValues = mappingResult.map((x) => x[3] ?? valueIndexHashMap.get(x[1]));\n\n // Return display values.\n return newDisplayValues;\n })\n );\n } else {\n // If all display values are hashed return that.\n obs = of(hasDisplay.map((x) => x[3]));\n }\n\n return obs;\n })\n );\n }\n\n readonly context = loadingStateContext({ obs: this.allOptionGroupsState$ });\n\n ngOnInit(): void {\n const { loadSources } = this;\n\n this._loadSources.next(loadSources?.() || of([]));\n\n if (this.refreshDisplayValues$ != null) {\n this._clearDisplayHashMapSub.subscription = this.refreshDisplayValues$.subscribe(() => this._displayHashMap.next(new Map()));\n }\n\n this._formControlObs.next(this.formControl);\n\n // copy all values from the sources into the values hash map to prevent reloading\n this._cacheMetaSub.subscription = this.valueGroupsFromSourcesState$.subscribe((x) => {\n const hashMap = this._valueMetaHashMap.value;\n x.value.forEach((x) => x.values.forEach((y) => hashMap.set(y.value, y)));\n });\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._cacheMetaSub.destroy();\n this._clearDisplayHashMapSub.destroy();\n this._valueMetaHashMap.complete();\n this._displayHashMap.complete();\n this._formControlObs.complete();\n this._fromOpenSource.complete();\n this._loadSources.complete();\n this.context.destroy();\n }\n\n readonly handleSelectOptions: WorkUsingContext<unknown> = (_, context) => {\n const { openSource } = this;\n const origin = this.buttonElement();\n\n if (openSource && origin) {\n const sourceObs = openSource({ origin });\n context.startWorkingWithObservable(\n sourceObs.pipe(\n first(),\n tap((result: SourceSelectOpenSourceResult<M>) => {\n const valuesToAdd = mergeArrays([result.select, result.options]);\n\n if (valuesToAdd.length) {\n this.addToOpenSourceMap(valuesToAdd);\n }\n\n if (result.set) {\n this.setCurrentValue(result.set.map((x) => this.valueReader(x)));\n } else if (result.select) {\n this.addToCurrentValue(result.select.map((x) => this.valueReader(x)));\n }\n })\n )\n );\n } else {\n context.reject();\n }\n };\n\n private addToOpenSourceMap(input: M[]) {\n const { valueReader } = this;\n const { values: meta, valuesSet: initialValues } = this._fromOpenSource.value;\n\n const newMetaFromInput: SourceSelectValue<T, M>[] = [];\n const valuesSet = new Set(initialValues);\n\n input.forEach((x) => {\n const value = valueReader(x);\n\n if (!valuesSet.has(value)) {\n newMetaFromInput.push({ meta: x, value });\n valuesSet.add(value);\n }\n });\n\n if (newMetaFromInput.length > 0) {\n this._fromOpenSource.next({\n values: [...meta, ...newMetaFromInput],\n valuesSet: valuesSet\n });\n }\n }\n\n private addToCurrentValue(values: T[]) {\n const currentValue = asArray(this.formControl.value);\n const newValueArray = [...currentValue, ...values];\n this.setCurrentValue(newValueArray);\n }\n\n private setCurrentValue(newValueArray: T[]) {\n const value = this.multiple ? newValueArray : lastValue(newValueArray); // pick last value, as the last value added is the newest value.\n this.formControl.setValue(value);\n this.formControl.markAsDirty();\n this.formControl.markAsTouched();\n }\n}\n","<div class=\"dbx-source-select-field\">\n <div class=\"dbx-source-select-field-content\">\n <mat-select class=\"dbx-source-select-field-select\" [id]=\"id\" [formControl]=\"formControl\" [multiple]=\"props.multiple\">\n @for (value of nonGroupedValuesSignal(); track value.value) {\n <mat-option [value]=\"value.value\">\n {{ value.label }}\n </mat-option>\n }\n @for (optionGroup of groupedOptionsSignal(); track optionGroup.label) {\n <mat-optgroup [label]=\"optionGroup.label\">\n @for (value of optionGroup.values; track value.value) {\n <mat-option [value]=\"value.value\">\n {{ value.label }}\n </mat-option>\n }\n </mat-optgroup>\n }\n </mat-select>\n @if (showOpenSourceButton) {\n <dbx-button-spacer></dbx-button-spacer>\n <dbx-action dbxActionValue [dbxActionHandler]=\"handleSelectOptions\" class=\"dbx-source-select-field-button\">\n <dbx-button #button dbxActionButton [fab]=\"true\" [iconOnly]=\"true\" [icon]=\"selectButtonIcon\"></dbx-button>\n </dbx-action>\n }\n </div>\n <dbx-loading class=\"dbx-source-select-field-loading\" [linear]=\"true\" [context]=\"context\"></dbx-loading>\n</div>\n","import { type PrimativeKey } from '@dereekb/util';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig, type DescriptionFieldConfig, type MaterialFormFieldConfig } from '../../field';\nimport { type SourceSelectFieldProps } from './sourceselect.field.component';\n\n// MARK: Text\nexport interface SourceSelectFieldConfig<T extends PrimativeKey = PrimativeKey, M = unknown> extends LabeledFieldConfig, DescriptionFieldConfig, MaterialFormFieldConfig, SourceSelectFieldProps<T, M> {}\n\nexport function sourceSelectField<T extends PrimativeKey = PrimativeKey, M = unknown>(config: SourceSelectFieldConfig<T, M>): FormlyFieldConfig {\n const { key, materialFormField } = config;\n return formlyField({\n key,\n type: 'sourceselectfield',\n ...propsAndConfigForFieldConfig(config, {\n ...materialFormField,\n ...config,\n autocomplete: false\n })\n });\n}\n","import { NgModule } from '@angular/core';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxFormSourceSelectFieldComponent } from './sourceselect.field.component';\n\n@NgModule({\n imports: [\n DbxFormSourceSelectFieldComponent,\n FormlyModule.forChild({\n types: [{ name: 'sourceselectfield', component: DbxFormSourceSelectFieldComponent, wrappers: ['form-field'] }]\n })\n ],\n exports: [DbxFormSourceSelectFieldComponent]\n})\nexport class DbxFormFormlySourceSelectModule {}\n","import { asObservable, type ObservableOrValue } from '@dereekb/rxjs';\nimport { convertMaybeToArray, firstValue, type LabeledValue, type Maybe } from '@dereekb/util';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { map } from 'rxjs';\nimport { type DescriptionFieldConfig, formlyField, type FormlyValueParser, type LabeledFieldConfig, type MaterialFormFieldConfig, propsAndConfigForFieldConfig } from '../field';\n\nexport interface ValueSelectionOptionWithValue<T> extends LabeledValue<T> {\n disabled?: boolean;\n}\n\nexport interface ValueSelectionOptionClear {\n label?: string;\n clear: true;\n}\n\nexport type ValueSelectionOption<T> = ValueSelectionOptionWithValue<T> | ValueSelectionOptionClear;\n\nexport interface ValueSelectionFieldConfig<T> extends LabeledFieldConfig, DescriptionFieldConfig, MaterialFormFieldConfig {\n /**\n * Whether or not to use the native select.\n *\n * Be sure to import FormlyMatNativeSelectModule.\n */\n readonly native?: boolean;\n /**\n * Whether or not to add a clear option to the input values.\n */\n readonly addClearOption?: string | boolean;\n /**\n * Values to select from.\n */\n readonly options: ObservableOrValue<ValueSelectionOption<T>[]>;\n /**\n * Allow selecting multiple values and return an array.\n */\n readonly multiple?: boolean;\n /**\n * The select all option configuration.\n */\n readonly selectAllOption?: true | string;\n}\n\nexport function valueSelectionField<T>(config: ValueSelectionFieldConfig<T>): FormlyFieldConfig {\n const { key, native = false, addClearOption = false, selectAllOption: inputSelectAllOption, options: inputOptions, materialFormField } = config;\n let selectAllOptionConfig: Maybe<{ selectAllOption: string }>;\n\n if (inputSelectAllOption) {\n selectAllOptionConfig = {\n selectAllOption: typeof inputSelectAllOption === 'boolean' ? 'Select All' : (inputSelectAllOption as string)\n };\n }\n\n const options = addClearOption ? asObservable(inputOptions).pipe(map(addValueSelectionOptionFunction(typeof addClearOption === 'string' ? addClearOption : undefined))) : inputOptions;\n let parsers: FormlyValueParser[] | undefined = undefined;\n\n parsers = config.multiple !== true ? [firstValue] : [convertMaybeToArray];\n\n return formlyField({\n key,\n type: native ? 'native-select' : 'select',\n ...propsAndConfigForFieldConfig(config, {\n ...materialFormField,\n options,\n multiple: config.multiple,\n ...selectAllOptionConfig\n }),\n parsers\n });\n}\n\nexport function addValueSelectionOptionFunction<T>(label?: string | undefined): (options: ValueSelectionOption<T>[]) => ValueSelectionOption<T>[] {\n return (options: ValueSelectionOption<T>[]) => {\n const hasClear = options.findIndex((x) => (x as ValueSelectionOptionClear).clear) !== -1;\n\n if (hasClear) {\n return options;\n } else {\n return [{ label, clear: true }, ...options];\n }\n };\n}\n","import { NgModule } from '@angular/core';\nimport { DbxFormFormlyPickableFieldModule } from './pickable/pickable.field.module';\nimport { DbxFormFormlySearchableFieldModule } from './searchable/searchable.field.module';\nimport { DbxFormFormlyDbxListFieldModule } from './list/list.field.module';\nimport { DbxFormFormlySourceSelectModule } from './sourceselect/sourceselect.field.module';\n\nconst importsAndExports = [DbxFormFormlyDbxListFieldModule, DbxFormFormlyPickableFieldModule, DbxFormFormlySearchableFieldModule, DbxFormFormlySourceSelectModule];\n\n/**\n * @deprecated import the modules directly instead\n *\n * @see DbxFormFormlyDbxListFieldModule\n * @see DbxFormFormlyPickableFieldModule\n * @see DbxFormFormlySearchableFieldModule\n * @see DbxFormFormlySourceSelectModule\n */\n@NgModule({\n imports: importsAndExports,\n exports: importsAndExports\n})\nexport class DbxFormFormlySelectionModule {}\n","import { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { CompactContextStore, mapCompactModeObs } from '@dereekb/dbx-web';\nimport { ChangeDetectionStrategy, Component, OnDestroy, OnInit, inject } from '@angular/core';\nimport { FieldTypeConfig, FormlyFieldProps } from '@ngx-formly/core';\nimport { FieldType } from '@ngx-formly/material';\nimport { Editor, NgxEditorModule } from 'ngx-editor';\nimport { debounceTime, filter } from 'rxjs';\nimport { filterMaybe, SubscriptionObject } from '@dereekb/rxjs';\nimport { type Maybe } from '@dereekb/util';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { NgClass } from '@angular/common';\n\nexport type TextEditorComponentFieldProps = FormlyFieldProps;\n\n@Component({\n template: `\n <div class=\"dbx-texteditor-field\" [ngClass]=\"compactClassSignal()\" [formGroup]=\"formGroup\">\n @if (label) {\n <span class=\"dbx-label\">{{ label }}</span>\n }\n <div class=\"dbx-texteditor-field-input\">\n <ngx-editor [editor]=\"editor\" outputFormat=\"html\" [placeholder]=\"placeholder\" [formControlName]=\"formGroupName\"></ngx-editor>\n </div>\n <div class=\"dbx-texteditor-field-menu\">\n <ngx-editor-menu [editor]=\"editor\"></ngx-editor-menu>\n </div>\n @if (description) {\n <div class=\"dbx-form-description\">{{ description }}</div>\n }\n </div>\n `,\n imports: [NgClass, NgxEditorModule, FormsModule, ReactiveFormsModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxTextEditorFieldComponent<T extends TextEditorComponentFieldProps = TextEditorComponentFieldProps> extends FieldType<FieldTypeConfig<T>> implements OnInit, OnDestroy {\n private readonly _compactContextStore = inject(CompactContextStore, { optional: true });\n\n private _editor!: Editor;\n private readonly _sub = new SubscriptionObject();\n\n readonly compactClass$ = mapCompactModeObs(this._compactContextStore?.mode$, {\n compact: 'dbx-texteditor-field-compact'\n }).pipe(filterMaybe());\n\n readonly compactClassSignal = toSignal(this.compactClass$, { initialValue: '' });\n\n get formGroupName(): string {\n return this.field.key as string;\n }\n\n get formGroup(): FormGroup {\n return this.form as FormGroup;\n }\n\n get editor(): Editor {\n return this._editor;\n }\n\n get label(): Maybe<string> {\n return this.field.props?.label;\n }\n\n get description(): Maybe<string> {\n return this.props.description;\n }\n\n ngOnInit(): void {\n this._editor = new Editor({});\n\n // TODO: Sync disabled state too\n\n // TODO: Sync the value periodically while not focused too\n\n // Watch for value changes every second and update the pristine level.\n this._sub.subscription = this.editor.valueChanges\n .pipe(\n debounceTime(50),\n filter(() => this.editor.view.hasFocus())\n )\n .subscribe(() => {\n this.formControl.updateValueAndValidity();\n this.formControl.markAsDirty();\n });\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n\n if (this._editor != null) {\n this._editor.destroy();\n }\n\n this._sub.destroy();\n }\n}\n","import { NgModule } from '@angular/core';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxTextEditorFieldComponent } from './texteditor.field.component';\n\nconst importsAndExports = [DbxTextEditorFieldComponent];\n\n@NgModule({\n imports: [\n ...importsAndExports,\n FormlyModule.forChild({\n types: [{ name: 'texteditor', component: DbxTextEditorFieldComponent }]\n })\n ],\n exports: importsAndExports\n})\nexport class DbxFormFormlyTextEditorFieldModule {}\n","import { type DescriptionFieldConfig, type MaterialFormFieldConfig, type LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig } from './../field';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type TextFieldLengthConfig } from '../value/text/text.field';\n\nexport interface TextEditorFieldConfig extends LabeledFieldConfig, DescriptionFieldConfig, TextFieldLengthConfig, MaterialFormFieldConfig {}\n\nexport function textEditorField(config: TextEditorFieldConfig): FormlyFieldConfig {\n const { key, minLength, maxLength, materialFormField } = config;\n const fieldConfig: FormlyFieldConfig = formlyField({\n key,\n type: 'texteditor',\n defaultValue: '', // Set to always get a string as a result.\n modelOptions: {\n // https://formly.dev/examples/validation/async-validation-update-on\n // Set to trigger value update on blurs with the form. However, the value is set internally too.\n updateOn: 'blur'\n },\n ...propsAndConfigForFieldConfig(config, {\n ...materialFormField,\n minLength,\n maxLength\n })\n });\n\n return fieldConfig;\n}\n","import { CdkDragDrop, DragDropModule } from '@angular/cdk/drag-drop';\nimport { Component, ChangeDetectionStrategy } from '@angular/core';\nimport { asDecisionFunction, cachedGetter, DecisionFunction, FactoryWithRequiredInput, Getter, getValueFromGetter, IndexRef, makeGetter, type Maybe } from '@dereekb/util';\nimport { FieldArrayTypeConfig, FieldArrayType, FormlyFieldConfig, FormlyFieldProps, FormlyModule } from '@ngx-formly/core';\nimport { DbxBarDirective, DbxButtonComponent, DbxButtonSpacerDirective, DbxSubSectionComponent } from '@dereekb/dbx-web';\nimport { MatIconModule } from '@angular/material/icon';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\n\nexport interface DbxFormRepeatArrayPair<T = unknown> extends IndexRef {\n readonly value?: T | undefined;\n}\n\nexport interface DbxFormRepeatArrayFieldConfigPair<T = unknown> extends Partial<DbxFormRepeatArrayPair<T>> {\n readonly fieldConfig: FormlyFieldConfig;\n}\n\nexport type DbxFormRepeatArrayAddTemplateFunction<T> = FactoryWithRequiredInput<Partial<Maybe<T>>, number>;\n\nexport interface DbxFormRepeatArrayConfig<T = unknown> extends Pick<FormlyFieldProps, 'maxLength' | 'label' | 'description'> {\n readonly labelForField?: string | FactoryWithRequiredInput<string, DbxFormRepeatArrayFieldConfigPair<T>>;\n /**\n * Text for the add button.\n */\n readonly addText?: string;\n /**\n * Optional template function to create a new template when using the add button.\n */\n readonly addTemplate?: DbxFormRepeatArrayAddTemplateFunction<T>;\n /**\n * Text for the duplicate button.\n */\n readonly duplicateText?: string;\n /**\n * Text for the remove button.\n */\n readonly removeText?: string;\n /**\n * Whethe or not to disable rearranging items.\n *\n * False by default.\n */\n readonly disableRearrange?: boolean;\n /**\n * Wether or not to show the add button.\n *\n * True by default.\n */\n readonly allowAdd?: boolean;\n /**\n * Whether or not to allow duplicateing items. Can optionally pass a decision function that decides whether or not a specific item can be removed.\n */\n readonly allowDuplicate?: boolean | DecisionFunction<DbxFormRepeatArrayPair<T>>;\n /**\n * Whether or not to allow removing items. Can optionally pass a decision function that decides whether or not a specific item can be removed.\n */\n readonly allowRemove?: boolean | DecisionFunction<DbxFormRepeatArrayPair<T>>;\n /**\n * Adds the duplicate to the end of the values\n */\n readonly addDuplicateToEnd?: boolean;\n}\n\n@Component({\n template: `\n <div class=\"dbx-form-repeat-array\">\n <dbx-subsection [header]=\"label\" [hint]=\"description\">\n <!-- Fields -->\n <div class=\"dbx-form-repeat-array-fields\" cdkDropList [cdkDropListDisabled]=\"disableRearrange\" (cdkDropListDropped)=\"drop($event)\">\n @for (field of field.fieldGroup; track field.key; let i = $index; let last = $last) {\n <div class=\"dbx-form-repeat-array-field\" cdkDrag cdkDragLockAxis=\"y\">\n <div class=\"dbx-form-repeat-array-drag-placeholder\" *cdkDragPlaceholder></div>\n <dbx-bar class=\"dbx-form-repeat-array-bar dbx-bar-fixed-height\">\n @if (!disableRearrange) {\n <button class=\"dbx-form-repeat-array-drag-button\" cdkDragHandle mat-stroked-button><mat-icon>drag_handle</mat-icon></button>\n <dbx-button-spacer></dbx-button-spacer>\n }\n <h4>\n <span class=\"repeat-array-number\">{{ i + 1 }}</span>\n <span>{{ labelForItem(field, i) }}</span>\n </h4>\n <span class=\"dbx-spacer\"></span>\n @if (allowDuplicate(i)) {\n <dbx-button [stroked]=\"true\" [text]=\"duplicateText\" (buttonClick)=\"duplicate(i)\"></dbx-button>\n <dbx-button-spacer></dbx-button-spacer>\n }\n @if (allowRemove(i)) {\n <dbx-button color=\"warn\" [stroked]=\"true\" [text]=\"removeText\" (buttonClick)=\"remove(i)\"></dbx-button>\n }\n </dbx-bar>\n <formly-field class=\"dbx-form-repeat-array-field-content\" [field]=\"field\"></formly-field>\n </div>\n }\n </div>\n <!-- Add Button -->\n <div class=\"dbx-form-repeat-array-footer\">\n @if (allowAdd) {\n <dbx-button [raised]=\"true\" [disabled]=\"addItemDisabled\" [text]=\"addText\" (buttonClick)=\"addClicked()\"></dbx-button>\n }\n </div>\n </dbx-subsection>\n </div>\n `,\n imports: [DbxSubSectionComponent, DbxBarDirective, DbxButtonComponent, FormlyModule, DragDropModule, MatIconModule, DbxButtonSpacerDirective, MatFormFieldModule, FormsModule, ReactiveFormsModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFormRepeatArrayTypeComponent<T = unknown> extends FieldArrayType<FieldArrayTypeConfig<DbxFormRepeatArrayConfig>> {\n private readonly _labelForField = cachedGetter(() => {\n const input = this.repeatArrayField.labelForField;\n\n if (typeof input === 'function') {\n return input;\n } else {\n return makeGetter(input ?? '');\n }\n });\n\n private readonly _allowRemove: Getter<DecisionFunction<DbxFormRepeatArrayPair<T>>> = cachedGetter(() => {\n return asDecisionFunction(this.field.props.allowRemove, true);\n });\n\n private readonly _allowDuplicate: Getter<DecisionFunction<DbxFormRepeatArrayPair<T>>> = cachedGetter(() => {\n return asDecisionFunction(this.field.props.allowDuplicate || false, false);\n });\n\n get repeatArrayField(): DbxFormRepeatArrayConfig {\n return this.field.props;\n }\n\n get label(): string {\n return this.field.props.label ?? (this.field.key as string);\n }\n\n get description(): Maybe<string> {\n return this.field.props.description;\n }\n\n get duplicateText(): string {\n return this.repeatArrayField.addText ?? 'Duplicate';\n }\n\n get addText(): string {\n return this.repeatArrayField.addText ?? 'Add';\n }\n\n get addTemplate() {\n return this.repeatArrayField.addTemplate;\n }\n\n get removeText(): string {\n return this.repeatArrayField.removeText ?? 'Remove';\n }\n\n get max(): Maybe<number> {\n return this.field.props.maxLength;\n }\n\n get count(): number {\n return this.field.fieldGroup?.length ?? 0;\n }\n\n get disableRearrange(): boolean {\n return Boolean(this.field.props.disableRearrange);\n }\n\n get allowAdd(): boolean {\n return this.field.props.allowAdd ?? true;\n }\n\n get addDuplicateToEnd(): boolean {\n return this.field.props.addDuplicateToEnd ?? false;\n }\n\n allowRemove(i: number) {\n const array: unknown[] = this.model;\n const value = array[i] as T | undefined;\n return this._allowRemove()({\n i,\n value\n });\n }\n\n allowDuplicate(i: number) {\n const array: unknown[] = this.model;\n const value = array[i] as T;\n return this._allowDuplicate()({\n i,\n value\n });\n }\n\n get addItemDisabled() {\n return !this.canAddItem;\n }\n\n get canAddItem(): boolean {\n const max = this.max;\n\n if (max == null) {\n return true;\n } else {\n return this.count < max;\n }\n }\n\n /**\n * Moves the target index up one value.\n *\n * @param index\n */\n moveUp(index: number) {\n if (index === 0) {\n return;\n }\n\n this.swapIndexes(index, index - 1);\n }\n\n moveDown(index: number) {\n this.swapIndexes(index, index + 1);\n }\n\n addClicked() {\n const addTemplate = this.addTemplate;\n const template = addTemplate ? addTemplate(this.count) : undefined;\n this.add(undefined, template);\n }\n\n duplicate(index: number) {\n const array: unknown[] = this.model;\n const targetValue = array[index];\n\n if (!targetValue) {\n return;\n }\n\n const targetIndex = this.addDuplicateToEnd ? array.length : index;\n this.add(targetIndex, targetValue, { markAsDirty: true });\n }\n\n swapIndexes(currentIndex: number, targetIndex: number) {\n const array: unknown[] = this.model;\n const targetValue = array[currentIndex];\n\n if (!targetValue) {\n return;\n }\n\n this.remove(currentIndex);\n this.add(targetIndex, targetValue, { markAsDirty: true });\n this.formControl.markAsTouched();\n }\n\n drop(event: CdkDragDrop<unknown>) {\n this.swapIndexes(event.previousIndex, event.currentIndex);\n }\n\n labelForItem(fieldConfig: FormlyFieldConfig, i: number): string {\n const array: unknown[] = this.model;\n const value = array[i] as T;\n\n return getValueFromGetter(this._labelForField(), {\n i,\n value,\n fieldConfig\n });\n }\n}\n","import { NgModule } from '@angular/core';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxFormRepeatArrayTypeComponent } from './array.field.component';\n\nconst importsAndExports = [DbxFormRepeatArrayTypeComponent];\n\n@NgModule({\n imports: [\n ...importsAndExports,\n FormlyModule.forChild({\n types: [{ name: 'repeatarray', component: DbxFormRepeatArrayTypeComponent }]\n })\n ],\n exports: importsAndExports\n})\nexport class DbxFormFormlyArrayFieldModule {}\n","import { type ArrayOrValue, asArray } from '@dereekb/util';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type FieldConfig, formlyField, propsAndConfigForFieldConfig } from '../../field';\nimport { type DbxFormRepeatArrayConfig } from './array.field.component';\n\nexport interface RepeatArrayFieldConfig<T = unknown> extends DbxFormRepeatArrayConfig<T>, FieldConfig {\n repeatFieldGroup: ArrayOrValue<FormlyFieldConfig>;\n}\n\nexport function repeatArrayField<T = unknown>(config: RepeatArrayFieldConfig<T>) {\n const { key, label, description, repeatFieldGroup, maxLength, addText, addTemplate, removeText, duplicateText, labelForField, disableRearrange, allowAdd, allowRemove, allowDuplicate, addDuplicateToEnd } = config;\n\n return formlyField({\n key,\n type: 'repeatarray',\n ...propsAndConfigForFieldConfig(config, {\n label,\n description,\n maxLength,\n labelForField,\n addText,\n addTemplate,\n removeText,\n duplicateText,\n disableRearrange,\n allowAdd,\n allowRemove,\n allowDuplicate,\n addDuplicateToEnd\n }),\n fieldArray: {\n fieldGroup: asArray(repeatFieldGroup)\n }\n });\n}\n","import { NgModule } from '@angular/core';\nimport { FormlyMaterialModule } from '@ngx-formly/material';\nimport { FormlyMatCheckboxModule } from '@ngx-formly/material/checkbox';\nimport { FormlyMatToggleModule } from '@ngx-formly/material/toggle';\n\nconst importsAndExports = [FormlyMaterialModule, FormlyMatCheckboxModule, FormlyMatToggleModule];\n\n@NgModule({\n imports: importsAndExports,\n exports: importsAndExports\n})\nexport class DbxFormFormlyBooleanFieldModule {}\n","import { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type LabeledFieldConfig, formlyField, type DefaultValueFieldConfig, type DescriptionFieldConfig, propsAndConfigForFieldConfig, type MaterialFormFieldConfig } from '../../field';\nimport { AUTO_TOUCH_WRAPPER_KEY, STYLE_WRAPPER_KEY } from '../../wrapper/wrapper.key';\n\nexport interface ToggleFieldConfig extends Omit<LabeledFieldConfig, 'placeholder' | 'autocomplete'>, DefaultValueFieldConfig<boolean>, DescriptionFieldConfig, MaterialFormFieldConfig {}\n\nexport function toggleField(config: ToggleFieldConfig): FormlyFieldConfig {\n const { key, defaultValue, materialFormField } = config;\n\n const classGetter = 'dbx-mat-form-toggle-field-wrapper';\n return formlyField({\n key,\n type: 'toggle',\n wrappers: [AUTO_TOUCH_WRAPPER_KEY, STYLE_WRAPPER_KEY, 'form-field'], // NOTE: Must specify form-field if other wrapper specified, otherwise it will not be used.\n defaultValue: defaultValue ?? false,\n ...propsAndConfigForFieldConfig(config, {\n classGetter,\n ...materialFormField\n })\n });\n}\n\nexport interface CheckboxFieldConfig extends LabeledFieldConfig, DefaultValueFieldConfig<boolean>, DescriptionFieldConfig, MaterialFormFieldConfig {}\n\nexport function checkboxField(config: CheckboxFieldConfig): FormlyFieldConfig {\n const { key, defaultValue, materialFormField } = config;\n\n const classGetter = 'dbx-mat-form-checkbox-field-wrapper';\n return formlyField({\n key,\n type: 'checkbox',\n wrappers: [STYLE_WRAPPER_KEY, 'form-field'],\n defaultValue: defaultValue ?? false,\n ...propsAndConfigForFieldConfig(config, {\n classGetter,\n ...materialFormField\n })\n });\n}\n\n/*\nexport function acceptTermsField({ key = 'accept', label = 'Accept Terms', description = 'In order to proceed, please accept terms', required = true }\n : Partial<FieldConfigWithDescription>): FormlyFieldConfig {\n return {\n key,\n type: 'checkbox',\n props: {\n label,\n description,\n pattern: 'true',\n required\n },\n validation: {\n messages: {\n pattern: 'Please accept the terms',\n },\n },\n } as FormlyFieldConfig;\n}\n*/\n","import { type Getter, type GetterOrValue, type LogicalDate, type Maybe, type ReadableTimeString, asGetter, getValueFromGetter } from '@dereekb/util';\n\n/**\n * A pair of either a logical date or a time string.\n */\nexport interface DateTimePresetValue {\n /**\n * Logical date to provide.\n */\n logicalDate?: Maybe<LogicalDate>;\n /**\n * Time string value. Ignored if logical date is provided.\n */\n timeString?: Maybe<ReadableTimeString>;\n}\n\n/**\n * Configuration for a DateTimePreset\n */\nexport interface DateTimePresetConfiguration {\n /**\n * Label\n */\n label: GetterOrValue<string>;\n /**\n * Whether or not the value should be retrieved each time or can be cached.\n *\n * Only relevant if a getter is used.\n */\n dynamic?: boolean;\n /**\n * Logical time to provide.\n */\n logicalDate?: Maybe<GetterOrValue<LogicalDate>>;\n /**\n * Time string to return. Ignored if logicalDate is provided.\n */\n timeString?: Maybe<GetterOrValue<ReadableTimeString>>;\n}\n\n/**\n * A label and value getter.\n */\nexport interface DateTimePreset {\n /**\n * Getter for the label\n */\n label: Getter<string>;\n /**\n * Getter for the value\n */\n value: Getter<DateTimePresetValue>;\n}\n\n/**\n * Creates a DateTimePreset from a DateTimePresetConfiguration\n *\n * @param config\n */\nexport function dateTimePreset(config: DateTimePresetConfiguration): DateTimePreset {\n let value: Getter<DateTimePresetValue>;\n\n if (config.logicalDate) {\n value = () => ({ logicalDate: getValueFromGetter(config.logicalDate) });\n } else if (config.timeString) {\n value = () => ({ timeString: getValueFromGetter(config.timeString) });\n } else {\n value = () => ({ logicalDate: 'now' });\n }\n\n if (!config.dynamic) {\n value = asGetter(value()); // get/calculate the value now and return it if not dynamic\n }\n\n return {\n label: asGetter(config.label),\n value\n };\n}\n","import { BehaviorSubject } from 'rxjs';\nimport { DateTimePresetConfiguration } from './datetime';\nimport { Injectable, InjectionToken, inject } from '@angular/core';\nimport { type Maybe } from '@dereekb/util';\n\nexport const DBX_DATE_TIME_FIELD_MENU_PRESETS_TOKEN = new InjectionToken('DbxDateTimeFieldMenuPresetsServicePresets');\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DbxDateTimeFieldMenuPresetsService {\n private readonly _configurations = new BehaviorSubject<DateTimePresetConfiguration[]>(inject<Maybe<DateTimePresetConfiguration[]>>(DBX_DATE_TIME_FIELD_MENU_PRESETS_TOKEN, { optional: true }) ?? []);\n\n readonly configurations$ = this._configurations.asObservable();\n\n get configurations(): DateTimePresetConfiguration[] {\n return this._configurations.value;\n }\n\n set configurations(configurations: DateTimePresetConfiguration[]) {\n this._configurations.next(configurations);\n }\n}\n","import { type DateTimezoneUtcNormalInstance, parseISO8601DayStringToDate, toJsDate, formatToISO8601DayStringForSystem, formatToISO8601DateString, isSameDateHoursAndMinutes, type DateRangeWithDateOrStringValue, parseJsDateString } from '@dereekb/date';\nimport { type ISO8601DayString, type Maybe, dateFromMinuteOfDay, dateToMinuteOfDay } from '@dereekb/util';\n\nexport enum DbxDateTimeValueMode {\n /**\n * Value is returned/parsed as a Date.\n */\n DATE = 0,\n /**\n * Value is returned/parsed as an ISO8601DateString\n */\n DATE_STRING = 1,\n /**\n * Value is returned/parsed as an ISO8601DayString, relative to the current timezone.\n */\n DAY_STRING = 2,\n /**\n * Value is returned/parsed as a Unix timestamp, relative to the current timezone.\n */\n UNIX_TIMESTAMP = 3,\n /**\n * Value is returned/parsed as a minute of the day, relative to the current timezone.\n */\n MINUTE_OF_DAY = 4,\n /**\n * Value is returned/parsed as a minute of the day, relative to the system timezone.\n */\n SYSTEM_MINUTE_OF_DAY = 5\n}\n\nexport function dbxDateTimeInputValueParseFactory(mode: DbxDateTimeValueMode, timezoneInstance: Maybe<DateTimezoneUtcNormalInstance>): (date: Maybe<Date | string | number>) => Maybe<Date> {\n let factory: (date: Maybe<Date | string | number>) => Maybe<Date>;\n let useTimezoneInstance = true;\n\n switch (mode) {\n case DbxDateTimeValueMode.DAY_STRING:\n factory = (x) => {\n let result: Maybe<Date>;\n\n switch (typeof x) {\n case 'string':\n result = parseISO8601DayStringToDate(x);\n break;\n case 'number':\n result = new Date(x);\n break;\n default:\n result = x;\n break;\n }\n\n return result;\n };\n useTimezoneInstance = false; // day strings do not use timezones\n break;\n case DbxDateTimeValueMode.SYSTEM_MINUTE_OF_DAY:\n case DbxDateTimeValueMode.MINUTE_OF_DAY:\n factory = (x) => {\n let result: Maybe<Date>;\n\n switch (typeof x) {\n case 'number':\n result = dateFromMinuteOfDay(x);\n break;\n case 'string':\n result = parseJsDateString(x);\n break;\n default:\n result = x;\n break;\n }\n\n return result;\n };\n\n if (mode === DbxDateTimeValueMode.SYSTEM_MINUTE_OF_DAY) {\n useTimezoneInstance = false;\n }\n\n break;\n case DbxDateTimeValueMode.UNIX_TIMESTAMP:\n case DbxDateTimeValueMode.DATE_STRING:\n case DbxDateTimeValueMode.DATE:\n default:\n factory = (x) => (x != null ? toJsDate(x as Date | string | number) : x);\n break;\n }\n\n if (timezoneInstance && useTimezoneInstance) {\n const originalFactory = factory;\n\n factory = (input) => {\n const date = originalFactory(input);\n const result = date ? timezoneInstance.systemDateToTargetDate(date) : date;\n return result;\n };\n }\n\n return factory;\n}\n\nexport function dbxDateTimeOutputValueFactory(mode: DbxDateTimeValueMode, timezoneInstance: Maybe<DateTimezoneUtcNormalInstance>): (date: Maybe<Date>) => Maybe<Date | string | number> {\n let factory: (date: Maybe<Date>) => Maybe<Date | string | number>;\n let useTimezoneInstance = true;\n\n switch (mode) {\n case DbxDateTimeValueMode.DAY_STRING:\n factory = (x) => (x != null ? formatToISO8601DayStringForSystem(x) : x);\n useTimezoneInstance = false; // day strings do not use timezones\n break;\n case DbxDateTimeValueMode.DATE_STRING:\n factory = (x) => (x != null ? formatToISO8601DateString(x) : x);\n break;\n case DbxDateTimeValueMode.UNIX_TIMESTAMP:\n factory = (x) => (x != null ? x.getTime() : x);\n break;\n case DbxDateTimeValueMode.SYSTEM_MINUTE_OF_DAY:\n case DbxDateTimeValueMode.MINUTE_OF_DAY:\n factory = (x) => (x != null ? dateToMinuteOfDay(x) : x);\n\n if (mode === DbxDateTimeValueMode.SYSTEM_MINUTE_OF_DAY) {\n useTimezoneInstance = false;\n }\n break;\n case DbxDateTimeValueMode.DATE:\n default:\n factory = (x) => x;\n break;\n }\n\n if (timezoneInstance && useTimezoneInstance) {\n const originalFactory = factory;\n\n factory = (input) => {\n const date = input ? timezoneInstance.targetDateToSystemDate(input) : input;\n const result = originalFactory(date);\n return result;\n };\n }\n\n return factory;\n}\n\nexport function dbxDateTimeIsSameDateTimeFieldValue(a: Maybe<Date | ISO8601DayString | number>, b: Maybe<Date | ISO8601DayString | number>) {\n const typeofA = typeof a;\n return a && b ? (typeofA === 'string' || typeofA === 'number' ? a === b : isSameDateHoursAndMinutes(a as Date, b as Date)) : a == b;\n}\n\nexport function dbxDateRangeIsSameDateRangeFieldValue(a: Maybe<DateRangeWithDateOrStringValue>, b: Maybe<DateRangeWithDateOrStringValue>) {\n return a && b ? dbxDateTimeIsSameDateTimeFieldValue(a.start, b.start) && dbxDateTimeIsSameDateTimeFieldValue(a.end, b.end) : a == b;\n}\n","import { type Maybe, type ReadableTimeString, type ArrayOrValue, type ISO8601DateString, asArray, filterMaybeArrayValues, type DecisionFunction, type Milliseconds, type TimezoneString, type LogicalDate, type DateOrDayString, isISO8601DayStringStart, type MapFunction, mapIdentityFunction, MinuteOfDay, UnixDateTimeNumber, ISO8601DayString } from '@dereekb/util';\nimport { dateFromLogicalDate, DateTimeMinuteConfig, DateTimeMinuteInstance, guessCurrentTimezone, readableTimeStringToDate, toLocalReadableTimeString, utcDayForDate, safeToJsDate, findMinDate, findMaxDate, isSameDateHoursAndMinutes, getTimezoneAbbreviation, isSameDateDay, dateTimezoneUtcNormal, DateTimezoneUtcNormalInstance, toJsDayDate, isSameDate, dateTimeMinuteWholeDayDecisionFunction, dateTimeMinuteDecisionFunction } from '@dereekb/date';\nimport { switchMap, shareReplay, map, startWith, tap, first, distinctUntilChanged, debounceTime, throttleTime, BehaviorSubject, Observable, combineLatest, Subject, merge, interval, of, combineLatestWith, filter, skip } from 'rxjs';\nimport { ChangeDetectionStrategy, Component, OnDestroy, OnInit, inject } from '@angular/core';\nimport { AbstractControl, FormControl, Validators, FormGroup, ValidationErrors, ReactiveFormsModule, FormsModule } from '@angular/forms';\nimport { FieldType } from '@ngx-formly/material';\nimport { FieldTypeConfig, FormlyFieldProps } from '@ngx-formly/core';\nimport { MatDatepickerInputEvent, MatDatepickerModule } from '@angular/material/datepicker';\nimport { addMinutes, startOfDay, addDays } from 'date-fns';\nimport { asObservableFromGetter, filterMaybe, ObservableOrValueGetter, skipFirstMaybe, SubscriptionObject, switchMapMaybeDefault, switchMapFilterMaybe } from '@dereekb/rxjs';\nimport { DateTimePreset, DateTimePresetConfiguration, dateTimePreset } from './datetime';\nimport { DbxDateTimeFieldMenuPresetsService } from './datetime.field.service';\nimport { DbxDateTimeValueMode, dbxDateTimeInputValueParseFactory, dbxDateTimeIsSameDateTimeFieldValue, dbxDateTimeOutputValueFactory } from './date.value';\nimport { FormControlPath, streamValueFromControl } from '../../../../form/form.angular.util';\nimport { toggleDisableFormControl } from '../../../../form/form';\nimport { ErrorStateMatcher } from '@angular/material/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\nimport { DatePipe, NgClass, NgTemplateOutlet } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatError, MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { DateDistancePipe, GetValuePipe, TimeDistancePipe } from '@dereekb/dbx-core';\nimport { MatDividerModule } from '@angular/material/divider';\n\nexport enum DbxDateTimeFieldTimeMode {\n /**\n * Time is required.\n */\n REQUIRED = 'required',\n /**\n * Time is optional.\n */\n OPTIONAL = 'optional',\n /**\n * Time is permenantly off.\n */\n NONE = 'none'\n}\n\nexport type DbxDateTimePickerConfiguration = Omit<DateTimeMinuteConfig, 'date'>;\n\nexport type DbxDateTimeFieldSyncType = 'before' | 'after';\n\nexport interface DbxDateTimeFieldSyncField {\n /**\n * Field key/path to sync with/against.\n */\n readonly syncWith: string;\n /**\n * How to sync against the other field.\n */\n readonly syncType: DbxDateTimeFieldSyncType;\n}\n\n/**\n * Configuration for the time date field that has a reference and optional map function to map the value.\n */\nexport interface DbxDateTimeFieldTimeDateConfig<I = unknown> {\n readonly path: FormControlPath;\n readonly mapValue?: MapFunction<I, Maybe<DateOrDayString>>;\n}\n\nexport function isDbxDateTimeFieldTimeDateConfig(input: unknown): input is DbxDateTimeFieldTimeDateConfig {\n return input != null && typeof input === 'object' && typeof (input as DbxDateTimeFieldTimeDateConfig).path === 'string';\n}\n\nexport interface DbxDateTimeFieldProps extends FormlyFieldProps {\n /**\n * Custom date label.\n *\n * Defaults to Date\n */\n readonly dateLabel?: string;\n\n /**\n * Custom time label.\n *\n * Defaults to Time\n */\n readonly timeLabel?: string;\n\n /**\n * Label to use for the date hint for \"All Day\". Defaults to \"All Day\".\n */\n readonly allDayLabel?: string;\n\n /**\n * Label to use for the date hint for \"At\". Defaults to \"At\".\n */\n readonly atTimeLabel?: string;\n\n /**\n * Value mode.\n *\n * Defaults to DATE\n */\n readonly valueMode?: DbxDateTimeValueMode;\n\n /**\n * Whether or not the date is hidden, and automatically uses today/input date.\n */\n readonly timeOnly?: boolean;\n\n /**\n * Only applicable when timeOnly is false.\n *\n * Whether or not to always show the date input even when there is only a single date that can be selected.\n *\n * Defaults to true.\n */\n readonly alwaysShowDateInput?: boolean;\n\n /**\n * Whether or not to autofill the date when time is picked.\n *\n * Defaults to false.\n */\n readonly autofillDateWhenTimeIsPicked?: boolean;\n\n /**\n * Whether or not the time can be added/removed optionally.\n *\n * This is ignored if timeOnly is specified.\n */\n readonly timeMode?: DbxDateTimeFieldTimeMode;\n\n /**\n * Other form control for enabling/disabling whether or not it is a full day.\n *\n * This field is only used if time is optional.\n *\n * When time is off, the field is set to true.\n */\n readonly fullDayFieldName?: string;\n\n /**\n * Whether or not to pass the date value as a UTC date, or a date in the current timezone.\n */\n readonly fullDayInUTC?: boolean;\n\n /**\n * Whether or not ot hide the date hint info content.\n *\n * False by default\n */\n readonly hideDateHint?: boolean;\n\n /**\n * Whether or not to hide the date/calendar picker.\n */\n readonly hideDatePicker?: boolean;\n\n /**\n * Custom picker configuration\n */\n readonly pickerConfig?: ObservableOrValueGetter<DbxDateTimePickerConfiguration>;\n\n /**\n * Used for syncing with one or more fields with a Date value.\n */\n readonly getSyncFieldsObs?: () => Observable<ArrayOrValue<DbxDateTimeFieldSyncField>>;\n\n /**\n * (Optional) The input timezone to default to.\n *\n * Ignored if fullDayInUTC is true.\n */\n readonly timezone?: Maybe<ObservableOrValueGetter<Maybe<TimezoneString>>>;\n\n /**\n * (Optional) The date to apply the time to.\n *\n * The timezone abbrviation will also use this date when using the time-only mode.\n */\n readonly timeDate?: Maybe<ObservableOrValueGetter<Maybe<DbxDateTimeFieldTimeDateConfig | FormControlPath | DateOrDayString>>>;\n\n /**\n * Whether or not to display the timezone. True by default.\n */\n readonly showTimezone?: Maybe<boolean>;\n\n /**\n * Custom presets to show in the dropdown.\n */\n readonly presets?: ObservableOrValueGetter<DateTimePresetConfiguration[]>;\n\n /**\n * The time in ms to prevent output from going out when the input value changes.\n */\n readonly inputOutputDebounceTime?: Milliseconds;\n\n /**\n * Whether or not to display the clear date button. True by default.\n */\n readonly showClearButton?: Maybe<boolean>;\n\n /**\n * The number of minutes to add/subtract when using the arrow keys.\n */\n readonly minuteStep?: Maybe<number>;\n}\n\nexport interface DbxDateTimeFieldSyncParsedField extends Pick<DbxDateTimeFieldSyncField, 'syncType'> {\n readonly control: AbstractControl<Maybe<Date | ISO8601DateString>>;\n}\n\nexport function syncConfigValueObs(parseConfigsObs: Observable<DbxDateTimeFieldSyncParsedField[]>, type: DbxDateTimeFieldSyncType): Observable<Date | null> {\n return parseConfigsObs.pipe(\n switchMap((x) => {\n const config = x.find((y) => y.syncType === type);\n let result: Observable<Date | null>;\n\n if (config) {\n const { control } = config;\n result = control.valueChanges.pipe(\n startWith(control.value),\n map((x) => safeToJsDate(x) ?? null)\n );\n } else {\n result = of(null);\n }\n\n return result;\n }),\n distinctUntilChanged(),\n shareReplay(1)\n );\n}\n\nconst TIME_OUTPUT_THROTTLE_TIME: Milliseconds = 10;\n\n/**\n * Error code used when the selected date is not in the schedule.\n */\nexport const DBX_DATE_TIME_FIELD_DATE_NOT_IN_SCHEDULE_ERROR = 'dateTimeFieldDateNotInSchedule';\n\n/**\n * Error code used when the selected time/time input is not in the limited range.\n */\nexport const DBX_DATE_TIME_FIELD_TIME_NOT_IN_RANGE_ERROR = 'dateTimeFieldTimeNotInRange';\n\n@Component({\n templateUrl: 'datetime.field.component.html',\n imports: [FlexLayoutModule, NgTemplateOutlet, MatButtonModule, NgClass, MatError, MatFormFieldModule, MatDatepickerModule, MatInputModule, FormsModule, ReactiveFormsModule, MatIconModule, MatMenuModule, MatFormFieldModule, GetValuePipe, DatePipe, DateDistancePipe, TimeDistancePipe, MatDividerModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxDateTimeFieldComponent extends FieldType<FieldTypeConfig<DbxDateTimeFieldProps>> implements OnInit, OnDestroy {\n private readonly dbxDateTimeFieldConfigService = inject(DbxDateTimeFieldMenuPresetsService);\n\n private readonly _sub = new SubscriptionObject();\n private readonly _valueSub = new SubscriptionObject();\n private readonly _autoFillDateSync = new SubscriptionObject();\n\n private readonly _config = new BehaviorSubject<Maybe<Observable<DbxDateTimePickerConfiguration>>>(undefined);\n readonly latestConfig$ = this._config.pipe(switchMapMaybeDefault(), distinctUntilChanged(), shareReplay(1));\n\n private readonly _syncConfigObs = new BehaviorSubject<Maybe<Observable<ArrayOrValue<DbxDateTimeFieldSyncField>>>>(undefined);\n\n private readonly _defaultTimezone = new BehaviorSubject<Maybe<Observable<Maybe<TimezoneString>>>>(undefined);\n private readonly _timeDate = new BehaviorSubject<Maybe<Observable<Maybe<DbxDateTimeFieldTimeDateConfig | FormControlPath | DateOrDayString>>>>(undefined);\n private readonly _presets = new BehaviorSubject<Observable<DateTimePresetConfiguration[]>>(of([]));\n\n /**\n * Alternative/backup full day control if not defined in the Formly form.\n */\n private readonly _fullDayInputCtrl = new FormControl(false);\n private readonly _fullDayControlObs = new BehaviorSubject<Maybe<AbstractControl<boolean>>>(undefined);\n readonly fullDayControl$ = this._fullDayControlObs.pipe(filterMaybe());\n\n private readonly _offset = new BehaviorSubject<number>(0);\n private readonly _formControlObs = new BehaviorSubject<Maybe<AbstractControl<Maybe<Date>>>>(undefined);\n readonly formControl$ = this._formControlObs.pipe(filterMaybe());\n\n private readonly _cleared = new Subject<void>();\n private readonly _updateTime = new Subject<void>();\n\n private readonly _resyncTimeInputSub = new SubscriptionObject();\n private readonly _resyncTimeInput = new Subject<void>();\n\n readonly timeErrorStateMatcher: ErrorStateMatcher = {\n isErrorState: (control: AbstractControl | null, form) => {\n if (control) {\n return (control.invalid && (control.dirty || control.touched)) || this.errorStateMatcher.isErrorState(this.formControl, form);\n } else {\n return false;\n }\n }\n };\n\n readonly resyncTimeInput$ = this._resyncTimeInput.pipe(debounceTime(200), shareReplay(1));\n\n private readonly _configUpdateTimeSync = new SubscriptionObject(\n this.latestConfig$.pipe(skip(1)).subscribe((x) => {\n this._updateTime.next();\n })\n );\n\n readonly timezone$: Observable<Maybe<TimezoneString>> = this._defaultTimezone.pipe(switchMapMaybeDefault(), distinctUntilChanged()).pipe(\n map((defaultTimezone) => {\n return defaultTimezone ?? guessCurrentTimezone();\n }),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly timezoneInstance$: Observable<Maybe<DateTimezoneUtcNormalInstance>> = this.timezone$.pipe(\n map((timezone) => (timezone ? dateTimezoneUtcNormal({ timezone }) : undefined)),\n shareReplay(1)\n );\n\n readonly timeDate$: Observable<Maybe<Date>> = this._timeDate.pipe(\n switchMapMaybeDefault(),\n switchMap((x) => {\n let obs: Observable<Maybe<Date>>;\n\n if (x) {\n // if the string is not a date string, then treat it as a path\n if ((typeof x === 'string' && !isISO8601DayStringStart(x)) || isDbxDateTimeFieldTimeDateConfig(x)) {\n const { path, mapValue }: DbxDateTimeFieldTimeDateConfig = typeof x === 'string' ? { path: x } : x;\n obs =\n streamValueFromControl<DateOrDayString>(this.form, path)?.pipe(\n map(mapValue ?? mapIdentityFunction()),\n map((x) => (x ? toJsDayDate(x) : undefined))\n ) ?? of(undefined);\n } else {\n obs = of(toJsDayDate(x));\n }\n } else {\n obs = of(undefined);\n }\n\n return obs;\n }),\n distinctUntilChanged(isSameDateDay),\n shareReplay(1)\n );\n\n readonly valueInSystemTimezone$: Observable<Maybe<Date>> = this.formControl$.pipe(\n map((control) => control.valueChanges.pipe(startWith<Maybe<Date | ISO8601DayString | MinuteOfDay | UnixDateTimeNumber>>(control.value), shareReplay(1))),\n combineLatestWith(this.timezoneInstance$),\n switchMap(([x, timezoneInstance]) => {\n return x.pipe(map(dbxDateTimeInputValueParseFactory(this.valueMode, timezoneInstance)));\n }),\n throttleTime(20, undefined, { leading: true, trailing: true }), // throttle incoming values and timezone changes\n distinctUntilChanged(isSameDateHoursAndMinutes),\n shareReplay(1)\n );\n\n readonly refreshInteral$ = interval(10 * 1000);\n\n /**\n * Used to trigger/display visual updates (specifically on timeDistance, etc.).\n */\n readonly displayValue$ = this.refreshInteral$.pipe(\n // every 10 seconds, refresh w/interval\n startWith(0),\n map(() => new Date().getMinutes()),\n distinctUntilChanged(),\n switchMap(() => this.valueInSystemTimezone$),\n shareReplay(1)\n );\n\n readonly timeString$: Observable<ReadableTimeString | ''> = this.valueInSystemTimezone$.pipe(\n map((x) => (x ? toLocalReadableTimeString(x) : '')),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly dateInputCtrl = new FormControl<Maybe<Date>>(null, {\n validators: []\n });\n\n readonly timeInputCtrl = new FormControl<Maybe<ReadableTimeString>>(null, {\n validators: [Validators.pattern(/^(now)$|^([0-9]|(0[0-9])|(1[0-9])|(2[0-3]))(:)?([0-5][0-9])?(\\s)?([apAP][Mm])?(\\\\s)*$/)]\n });\n\n get dateLabel(): string {\n return this.props.dateLabel ?? 'Date';\n }\n\n get timeLabel(): string {\n return this.props.timeLabel ?? 'Time';\n }\n\n get allDayLabel(): string {\n return this.props.allDayLabel ?? 'All Day';\n }\n\n get atTimeLabel(): string {\n return this.props.atTimeLabel ?? 'At';\n }\n\n get dateOnly(): boolean {\n return this.timeMode === DbxDateTimeFieldTimeMode.NONE;\n }\n\n get dateTimeField(): DbxDateTimeFieldProps {\n return this.field.props;\n }\n\n get timeOnly(): Maybe<boolean> {\n const timeValuesOnly = this.valueMode === DbxDateTimeValueMode.MINUTE_OF_DAY;\n\n if (timeValuesOnly) {\n return true;\n } else {\n return this.dateTimeField.timeOnly;\n }\n }\n\n get alwaysShowDateInput(): boolean {\n return this.props.alwaysShowDateInput ?? true;\n }\n\n get autofillDateWhenTimeIsPicked(): boolean {\n return this.props.autofillDateWhenTimeIsPicked ?? this.alwaysShowDateInput === false;\n }\n\n get showDateInput(): boolean {\n return !this.timeOnly;\n }\n\n get valueMode(): DbxDateTimeValueMode {\n return this.field.props.valueMode ?? DbxDateTimeValueMode.DATE;\n }\n\n get timeMode(): DbxDateTimeFieldTimeMode {\n const dateValuesOnly = this.valueMode === DbxDateTimeValueMode.DAY_STRING;\n\n if (dateValuesOnly) {\n return DbxDateTimeFieldTimeMode.NONE;\n } else {\n return this.timeOnly ? DbxDateTimeFieldTimeMode.REQUIRED : (this.dateTimeField.timeMode ?? DbxDateTimeFieldTimeMode.REQUIRED);\n }\n }\n\n get isDateRequired(): boolean {\n return this.props.required ?? false;\n }\n\n get isTimeRequired(): boolean {\n return this.isDateRequired && this.timeMode === DbxDateTimeFieldTimeMode.REQUIRED;\n }\n\n get description(): Maybe<string> {\n return this.field.props.description;\n }\n\n get hideDateHint(): boolean {\n return this.field.props.hideDateHint ?? false;\n }\n\n get hideDatePicker(): boolean {\n return this.field.props.hideDatePicker ?? false;\n }\n\n get timezone() {\n return this.field.props.timezone;\n }\n\n get timeDate() {\n return this.field.props.timeDate;\n }\n\n get showTimezone() {\n return this.field.props.showTimezone ?? true;\n }\n\n get presets() {\n return this.field.props.presets;\n }\n\n get showClearButton() {\n return this.field.props.showClearButton;\n }\n\n get minuteStep() {\n return this.field.props.minuteStep ?? this.field.props.step ?? 5;\n }\n\n readonly fullDay$: Observable<boolean> = this.fullDayControl$.pipe(\n switchMap((control) => control.valueChanges.pipe(startWith(control.value))),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly showTimeInput$: Observable<boolean> = this.fullDay$.pipe(map((x) => !x && this.timeMode !== DbxDateTimeFieldTimeMode.NONE));\n\n readonly showAddTime$ = this.showTimeInput$.pipe(\n map((x) => !x && this.timeMode === DbxDateTimeFieldTimeMode.OPTIONAL),\n shareReplay(1)\n );\n\n readonly currentDate$ = this.dateInputCtrl.valueChanges.pipe(startWith(this.dateInputCtrl.value), shareReplay(1));\n readonly date$ = this.currentDate$.pipe(filterMaybe(), shareReplay(1));\n\n readonly timezoneAbbreviation$ = combineLatest([this.currentDate$, this.timezone$, this.timeDate$]).pipe(\n map(([date, timezone, timeDate]) => getTimezoneAbbreviation(timezone, timeDate ?? date ?? new Date())),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly dateValue$: Observable<Maybe<Date>> = merge(this.date$, this.valueInSystemTimezone$.pipe(skipFirstMaybe())).pipe(\n map((x: Maybe<Date>) => (x ? startOfDay(x) : null)),\n distinctUntilChanged<Maybe<Date>>(isSameDateDay),\n shareReplay(1)\n );\n\n readonly timeInput$: Observable<ReadableTimeString> = this._updateTime.pipe(\n debounceTime(5),\n map(() => this.timeInputCtrl.value || ''),\n distinctUntilChanged()\n );\n\n readonly syncConfigObs$ = this._syncConfigObs.pipe(switchMapMaybeDefault(), shareReplay(1));\n\n readonly parsedSyncConfigs$: Observable<DbxDateTimeFieldSyncParsedField[]> = this.syncConfigObs$.pipe(\n map((x) => {\n let parsed: DbxDateTimeFieldSyncParsedField[];\n\n if (x) {\n parsed = filterMaybeArrayValues(\n asArray(x).map((y) => {\n const control = this.form.get(y.syncWith);\n\n if (control) {\n return {\n control,\n ...y\n };\n } else {\n return undefined;\n }\n })\n );\n } else {\n parsed = [];\n }\n\n return parsed;\n }),\n shareReplay(1)\n );\n\n readonly syncConfigBeforeValue$: Observable<Date | null> = syncConfigValueObs(this.parsedSyncConfigs$, 'before');\n readonly syncConfigAfterValue$: Observable<Date | null> = syncConfigValueObs(this.parsedSyncConfigs$, 'after');\n\n readonly isTimeCleared$ = combineLatest([this.currentDate$, this._timeDate.pipe(startWith(null))]).pipe(\n switchMap(([date, time]) => {\n const isTimeCleared = Boolean(!date && !time);\n return this._cleared.pipe(\n map(() => true),\n startWith(isTimeCleared)\n );\n }),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n protected readonly _rawDateTimeDateValue$: Observable<Maybe<Date>> = this._config.pipe(\n first(),\n switchMap(() => (this.timeOnly ? of(null) : this.dateValue$))\n );\n protected readonly _rawDateTimeTimeValue$: Observable<Maybe<ReadableTimeString>> = this.timeInput$.pipe(startWith(null));\n\n readonly rawDateTime$: Observable<Maybe<Date>> = combineLatest([this._rawDateTimeDateValue$, this._rawDateTimeTimeValue$, this.fullDay$, this.timeDate$, this.isTimeCleared$]).pipe(\n map(([date, timeString, fullDay, timeDate, isTimeCleared]) => {\n let result: Maybe<Date>;\n\n if (!isTimeCleared) {\n if (!date || this.timeOnly) {\n date = timeDate ?? new Date(); // use the time date, or default to the current day\n }\n\n if (date) {\n if (fullDay) {\n if (this.dateTimeField.fullDayInUTC) {\n result = utcDayForDate(date);\n } else {\n result = startOfDay(date);\n }\n } else if (timeString) {\n result =\n readableTimeStringToDate(timeString, {\n date,\n useSystemTimezone: true\n }) ?? date;\n } else if (!this.timeOnly) {\n if (this.timeMode !== DbxDateTimeFieldTimeMode.REQUIRED) {\n // only autofill the date if the time is marked as required (and the time string is empty)\n result = date;\n }\n }\n }\n }\n\n return result;\n }),\n distinctUntilChanged(isSameDateHoursAndMinutes),\n shareReplay(1)\n );\n\n readonly dateTimePickerConfig$: Observable<Maybe<DbxDateTimePickerConfiguration>> = combineLatest([this._config.pipe(switchMapFilterMaybe()), this.syncConfigBeforeValue$, this.syncConfigAfterValue$]).pipe(\n map(([x, dateInputMin, dateInputMax]) => {\n let result: Maybe<DbxDateTimePickerConfiguration> = x;\n\n if (dateInputMin != null || dateInputMax != null) {\n const { min: limitMin, max: limitMax } = x?.limits ?? {};\n const min = findMinDate([dateInputMin, dateFromLogicalDate(limitMin)]);\n const max = findMaxDate([dateInputMax, dateFromLogicalDate(limitMax)]);\n\n result = {\n ...x,\n limits: {\n ...x?.limits,\n min,\n max\n }\n };\n }\n\n return result;\n }),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly dateInputMin$: Observable<Date | null> = this.dateTimePickerConfig$.pipe(\n map((x) => (x?.limits?.min ?? null) as Date | null),\n distinctUntilChanged<Date | null>(isSameDate),\n shareReplay(1)\n );\n\n readonly dateInputMax$: Observable<Date | null> = this.dateTimePickerConfig$.pipe(\n map((x) => (x?.limits?.max ?? null) as Date | null),\n distinctUntilChanged<Date | null>(isSameDate),\n shareReplay(1)\n );\n\n /**\n * Whether or not there is a limited min/max date range applied/available.\n */\n readonly hasRestrictedDateRange$: Observable<boolean> = combineLatest([this.dateInputMin$, this.dateInputMax$]).pipe(\n map(([a, b]) => Boolean(a || b)),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly dateMinAndMaxIsSameDay$: Observable<boolean> = combineLatest([this.dateInputMin$, this.dateInputMax$]).pipe(\n map(([a, b]) => Boolean(a && b) && isSameDateDay(a, b)),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly pickerFilter$: Observable<DecisionFunction<Date | null>> = this.dateTimePickerConfig$.pipe(\n distinctUntilChanged(),\n map((x) => {\n if (x) {\n const filter = dateTimeMinuteWholeDayDecisionFunction(x, false);\n return (x: Date | null) => (x != null ? filter(x) : true);\n } else {\n return () => true;\n }\n }),\n shareReplay(1)\n );\n\n readonly defaultPickerFilter: DecisionFunction<Date | null> = () => true;\n\n readonly timeOutput$: Observable<Maybe<Date>> = combineLatest([this.rawDateTime$, this._offset, this.dateTimePickerConfig$]).pipe(\n throttleTime(TIME_OUTPUT_THROTTLE_TIME, undefined, { leading: false, trailing: true }),\n distinctUntilChanged((current, next) => current[0] === next[0] && next[1] === 0 && current[2] === next[2]),\n tap(([, stepsOffset]) => (stepsOffset ? this._offset.next(0) : 0)),\n map(([date, stepsOffset, config]) => {\n if (date != null) {\n const instance = new DateTimeMinuteInstance({\n date,\n ...config,\n roundDownToMinute: true\n });\n\n // only clamp when the steps offset is set\n if (stepsOffset) {\n date = instance.clamp(date);\n\n const minutes = stepsOffset * this.minuteStep;\n\n if (minutes != 0) {\n date = addMinutes(date, minutes);\n date = instance.clamp(date); // clamp the date again\n }\n }\n }\n\n return date;\n }),\n distinctUntilChanged(isSameDateHoursAndMinutes),\n shareReplay(1)\n );\n\n readonly dateTimePickerInstance$ = this.dateTimePickerConfig$.pipe(\n map((config) => {\n return new DateTimeMinuteInstance({\n ...config,\n roundDownToMinute: true\n });\n }),\n shareReplay(1)\n );\n\n readonly hasEmptyDisplayValue$ = this.displayValue$.pipe(\n map((x) => !x),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly allPresets$: Observable<DateTimePreset[]> = this._presets.pipe(\n switchMapFilterMaybe(),\n map((x: DateTimePresetConfiguration[]) => x.map(dateTimePreset)),\n shareReplay(1)\n );\n\n readonly _presetsPickerFilter$ = this.dateTimePickerConfig$.pipe(\n map((config) => {\n if (config) {\n const filter = dateTimeMinuteDecisionFunction(config); // filter that the date must be in the given range\n return (x: Date | null) => (x != null ? filter(x) : true);\n } else {\n return () => true;\n }\n })\n );\n\n readonly presets$: Observable<DateTimePreset[]> = combineLatest([this.allPresets$, this.fullDay$]).pipe(\n switchMap(([x, fullDay]) => {\n let result: Observable<DateTimePreset[]>;\n\n if (this.timeOnly) {\n result = of(x); // do not filter based on the date\n } else if (fullDay) {\n result = of([]);\n } else {\n result = combineLatest([this._rawDateTimeDateValue$.pipe(throttleTime(1000, undefined, { leading: true, trailing: true })), this._presetsPickerFilter$]).pipe(\n map(([selectedDate, isAllowedDate]) => {\n const allowedPresets: DateTimePreset[] = [];\n\n if (selectedDate) {\n // iterate each preset and check if it is allowed\n x.forEach((preset) => {\n const value = preset.value();\n let presetDate: Maybe<Date>;\n\n if (value.logicalDate) {\n presetDate = dateFromLogicalDate(value.logicalDate);\n } else if (value.timeString) {\n presetDate = readableTimeStringToDate(value.timeString, {\n date: selectedDate,\n useSystemTimezone: true\n });\n }\n\n // the computed date should be within the allowed range\n if (presetDate && isAllowedDate(presetDate)) {\n allowedPresets.push(preset);\n }\n });\n }\n\n return allowedPresets;\n })\n );\n }\n\n return result;\n }),\n shareReplay(1)\n );\n\n readonly showClearButton$: Observable<boolean> = this.hasEmptyDisplayValue$.pipe(\n map((x) => Boolean(this.showClearButton && !x)),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly canAutofillDateWithOnlyAvailableDate$: Observable<boolean> = this.dateMinAndMaxIsSameDay$;\n\n readonly showDateInput$: Observable<boolean> = this.dateMinAndMaxIsSameDay$.pipe(\n map((dateMinAndMaxIsSameDay) => {\n return this.showDateInput && (this.alwaysShowDateInput || !dateMinAndMaxIsSameDay);\n }),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly currentErrorMessage$ = this.formControl$.pipe(\n switchMap((formControl) =>\n formControl.statusChanges.pipe(\n filter((x) => x === 'INVALID' || x === 'VALID'),\n map((x) => {\n let currentErrorMessage: string | undefined;\n\n if (x === 'INVALID') {\n if (this.formControl.hasError('required')) {\n currentErrorMessage = 'Date is required';\n } else if (this.formControl.hasError(DBX_DATE_TIME_FIELD_DATE_NOT_IN_SCHEDULE_ERROR)) {\n currentErrorMessage = 'Date does not fall on an available dates in schedule.';\n } else if (this.formControl.hasError(DBX_DATE_TIME_FIELD_TIME_NOT_IN_RANGE_ERROR)) {\n currentErrorMessage = 'Time is not valid for the given date.';\n } else {\n currentErrorMessage = 'The given date and time is invalid.';\n }\n }\n\n return currentErrorMessage;\n })\n )\n ),\n startWith(undefined),\n shareReplay(1)\n );\n\n readonly hasError$ = this.currentErrorMessage$.pipe(\n map((x) => Boolean(x)),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly dateValueSignal = toSignal(this.dateValue$);\n readonly displayValueSignal = toSignal(this.displayValue$);\n readonly pickerFilterSignal = toSignal(this.pickerFilter$, { initialValue: this.defaultPickerFilter });\n readonly dateInputMinSignal = toSignal(this.dateInputMin$, { initialValue: null });\n readonly dateInputMaxSignal = toSignal(this.dateInputMax$, { initialValue: null });\n readonly showDateInputSignal = toSignal(this.showDateInput$);\n readonly showTimeInputSignal = toSignal(this.showTimeInput$);\n readonly showAddTimeSignal = toSignal(this.showAddTime$);\n readonly fullDaySignal = toSignal(this.fullDay$);\n readonly timezoneAbbreviationSignal = toSignal(this.timezoneAbbreviation$);\n readonly hasEmptyDisplayValueSignal = toSignal(this.hasEmptyDisplayValue$);\n readonly currentErrorMessageSignal = toSignal(this.currentErrorMessage$);\n readonly showClearButtonSignal = toSignal(this.showClearButton$);\n readonly presetsSignal = toSignal(this.presets$);\n readonly hasErrorSignal = toSignal(this.hasError$);\n\n ngOnInit(): void {\n this._formControlObs.next(this.formControl);\n\n const inputPickerConfig = this.dateTimeField.pickerConfig;\n this._config.next(inputPickerConfig ? asObservableFromGetter(inputPickerConfig) : of({}));\n this._syncConfigObs.next(this.dateTimeField.getSyncFieldsObs?.());\n\n this._sub.subscription = this.valueInSystemTimezone$\n .pipe(\n combineLatestWith(this.timezoneInstance$.pipe(map((timezoneInstance) => dbxDateTimeOutputValueFactory(this.valueMode, timezoneInstance)))),\n throttleTime(TIME_OUTPUT_THROTTLE_TIME, undefined, { leading: false, trailing: true }),\n switchMap(([currentValue, valueFactory]) => {\n return this.timeOutput$.pipe(\n throttleTime(TIME_OUTPUT_THROTTLE_TIME * 2, undefined, { leading: false, trailing: true }),\n skipFirstMaybe(),\n distinctUntilChanged(isSameDateHoursAndMinutes),\n map((x) => valueFactory(x)),\n filter((x) => !dbxDateTimeIsSameDateTimeFieldValue(x, currentValue))\n );\n })\n )\n .subscribe((value) => {\n this.formControl.setValue(value);\n this.formControl.markAsDirty();\n this.formControl.markAsTouched();\n });\n\n let hasSetMidnightFromInput = false;\n\n /*\n this._valueSub.subscription = this.timeString$.subscribe((x) => {\n this.setTime(x);\n });\n */\n\n if (this.autofillDateWhenTimeIsPicked) {\n this._autoFillDateSync.subscription = this.canAutofillDateWithOnlyAvailableDate$\n .pipe(\n switchMap((canAutofill) => {\n if (canAutofill) {\n // when the time updates the first time, set the current min date\n return this._updateTime.pipe(\n debounceTime(200),\n switchMap((x) => this.dateInputMin$),\n filterMaybe()\n );\n } else {\n return of(null); // don't show anything\n }\n })\n )\n .subscribe((autoDate) => {\n if (autoDate != null) {\n this.dateInputCtrl.setValue(autoDate);\n }\n });\n }\n\n this._valueSub.subscription = this.valueInSystemTimezone$\n .pipe(\n map((x) => (x ? isSameDate(x, startOfDay(x)) : false)),\n distinctUntilChanged(),\n switchMap((isInputValueAtMidnight) => {\n hasSetMidnightFromInput = false;\n return this.timeString$.pipe(\n // skip(1),\n map((timeString) => [timeString, isInputValueAtMidnight] as [string, boolean])\n );\n })\n )\n .subscribe(([x, isInputValueAtMidnight]) => {\n // Skip events where the timeInput value is cleared, unless the input value is at midnight and we've already processed it being at midnight\n if (!this.timeInputCtrl.value && x === '12:00AM' && (!isInputValueAtMidnight || (isInputValueAtMidnight && hasSetMidnightFromInput))) {\n return;\n }\n\n // update the has set flag\n if (x === '12:00AM' && isInputValueAtMidnight) {\n hasSetMidnightFromInput = true;\n }\n\n this.setTime(x);\n });\n\n // Set default timezone if provided.\n if (this.timezone && !this.dateTimeField.fullDayInUTC) {\n this._defaultTimezone.next(asObservableFromGetter(this.timezone));\n }\n\n this._timeDate.next(asObservableFromGetter(this.timeDate));\n\n // Watch for disabled changes so we can propogate them properly.\n this.formControl.registerOnDisabledChange((isDisabled) => {\n toggleDisableFormControl(this.dateInputCtrl, isDisabled);\n toggleDisableFormControl(this.timeInputCtrl, isDisabled);\n });\n\n const isFullDayField = this.dateTimeField.fullDayFieldName;\n let fullDayFieldCtrl: Maybe<AbstractControl>;\n\n if (isFullDayField) {\n fullDayFieldCtrl = this.form.get(isFullDayField);\n }\n\n if (!fullDayFieldCtrl) {\n const isFullDay = this.timeMode === DbxDateTimeFieldTimeMode.NONE;\n this._fullDayInputCtrl.setValue(isFullDay);\n\n // Set the control in the form too if the name is defined.\n if (isFullDayField) {\n (this.form as FormGroup).addControl(isFullDayField, this._fullDayInputCtrl);\n }\n\n fullDayFieldCtrl = this._fullDayInputCtrl;\n }\n\n this._fullDayControlObs.next(fullDayFieldCtrl);\n\n switch (this.timeMode) {\n case DbxDateTimeFieldTimeMode.OPTIONAL:\n break;\n case DbxDateTimeFieldTimeMode.NONE:\n this.removeTime();\n break;\n case DbxDateTimeFieldTimeMode.REQUIRED:\n this.addTime();\n break;\n }\n\n if (this.presets != null) {\n this._presets.next(asObservableFromGetter(this.presets));\n } else {\n this._presets.next(this.dbxDateTimeFieldConfigService.configurations$);\n }\n\n this._resyncTimeInputSub.subscription = this.resyncTimeInput$.pipe(switchMap((x) => combineLatest([this.currentDate$, this.timeString$]).pipe(first()))).subscribe(([currentDate, timeString]) => {\n // only resync when the current date is set, otherwise do not change the time string.\n // This helps in cases where the user picks a time first and we don't want it to be cleared.\n if (currentDate != null) {\n this.timeInputCtrl.setValue(timeString, { emitEvent: false });\n }\n });\n\n // add validators/errors for the form\n this.formControl.addAsyncValidators([\n (x) => {\n const formValue = x.value as Maybe<Date>;\n let obs: Observable<ValidationErrors>;\n\n if (formValue != null) {\n obs = combineLatest([this.timezoneInstance$, this.dateTimePickerInstance$]).pipe(\n map(([timezoneInstance, x]) => {\n // the form value is going to be in the output form, so we need to parse it back to the \"input\" date before evaluating it\n const formValueInSystemTimezone = dbxDateTimeInputValueParseFactory(this.valueMode, timezoneInstance)(formValue);\n\n let errors: ValidationErrors = {\n ...this.timeInputCtrl.errors\n };\n\n if (formValueInSystemTimezone) {\n if (x.dateIsInSchedule(formValueInSystemTimezone)) {\n if (!x.isInValidRange(formValueInSystemTimezone)) {\n errors = {\n [DBX_DATE_TIME_FIELD_TIME_NOT_IN_RANGE_ERROR]: true\n };\n }\n } else {\n errors = {\n [DBX_DATE_TIME_FIELD_DATE_NOT_IN_SCHEDULE_ERROR]: true\n };\n }\n }\n\n return errors;\n }),\n first()\n );\n } else {\n obs = of({});\n }\n\n return obs;\n }\n ]);\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._sub.destroy();\n this._valueSub.destroy();\n this._config.complete();\n this._configUpdateTimeSync.destroy();\n this._defaultTimezone.complete();\n this._resyncTimeInputSub.destroy();\n this._autoFillDateSync.destroy();\n this._timeDate.complete();\n this._presets.complete();\n this._fullDayControlObs.complete();\n this._offset.complete();\n this._formControlObs.complete();\n this._updateTime.complete();\n this._cleared.complete();\n this._resyncTimeInput.complete();\n this._syncConfigObs.complete();\n }\n\n selectPreset(preset: DateTimePreset): void {\n const value = preset.value();\n\n if (value.logicalDate) {\n this.setLogicalTime(value.logicalDate);\n } else if (value.timeString) {\n this.setTime(value.timeString);\n }\n }\n\n datePicked(event: MatDatepickerInputEvent<Date>): void {\n const date = event.value;\n\n if (date) {\n this.setDateInputValue(date);\n }\n }\n\n setLogicalTime(time: LogicalDate): void {\n const date = dateFromLogicalDate(time);\n\n if (date) {\n this.setTimeFromDate(date);\n }\n }\n\n setDateInputValue(date: Date) {\n this.dateInputCtrl.setValue(date);\n this._updateTime.next();\n }\n\n setTimeFromDate(timeDate: Date): void {\n const timeString = toLocalReadableTimeString(timeDate);\n this.setTime(timeString);\n }\n\n setTime(time: ReadableTimeString): void {\n if (this.timeInputCtrl.value !== time) {\n this.timeInputCtrl.setValue(time);\n this._offset.next(0);\n this._updateTime.next();\n }\n }\n\n keydownOnDateInput(event: KeyboardEvent): void {\n let direction = 0;\n\n switch (event.key?.toLowerCase()) {\n case 'arrowup':\n direction = 1;\n break;\n case 'arrowdown':\n direction = -1;\n break;\n }\n\n let offset = 1;\n\n if (event.ctrlKey && event.shiftKey) {\n offset = 365;\n } else if (event.ctrlKey) {\n offset = 30;\n } else if (event.shiftKey) {\n offset = 7;\n }\n\n if (direction !== 0) {\n combineLatest([this.date$, this.dateTimePickerConfig$])\n .pipe(first())\n .subscribe(([date, config]) => {\n const newDate = startOfDay(addDays(date, offset * direction));\n const instance = new DateTimeMinuteInstance({\n date: newDate,\n ...config\n });\n\n const nextDate = instance.isInSchedule(newDate) ? newDate : instance.findNextAvailableDayInSchedule(newDate, direction === 1 ? 'future' : 'past');\n\n if (nextDate != null) {\n this.setDateInputValue(instance.clampToLimit(nextDate));\n }\n });\n }\n }\n\n keydownOnTimeInput(event: KeyboardEvent): void {\n let direction = 0;\n\n switch (event.key?.toLowerCase()) {\n case 'arrowup':\n direction = 1;\n break;\n case 'arrowdown':\n direction = -1;\n break;\n }\n\n let offset = 1;\n\n if (event.altKey && event.shiftKey) {\n offset = 300;\n } else if (event.altKey) {\n offset = 60;\n } else if (event.shiftKey) {\n offset = 5;\n }\n\n if (direction !== 0) {\n this._offset.next(this._offset.value + offset * direction);\n this._updateTime.next();\n }\n }\n\n focusTime(): void {\n // do nothing\n }\n\n focusOutTime(): void {\n // only refresh when there is not a pattern error\n if (!this.timeInputCtrl.hasError('pattern')) {\n this._updateTime.next();\n this._resyncTimeInput.next();\n }\n }\n\n addTime(): void {\n this.setFullDay(false);\n }\n\n removeTime(): void {\n this.setFullDay(true);\n }\n\n setFullDay(fullDay: boolean): void {\n this.fullDayControl$.pipe(first()).subscribe((x) => {\n x.setValue(fullDay);\n });\n }\n\n clearValue(): void {\n this._cleared.next();\n }\n}\n","<div class=\"dbx-datetime-field\" fxLayout=\"row wrap\" fxLayout.xs=\"column wrap\" fxLayoutGap=\"6px grid\" fxLayoutAlign=\"space-evenly stretch\">\n <!-- Date -->\n @if (showDateInputSignal()) {\n <div class=\"dbx-datetime-row\" fxFlex.lt-sm=\"100\" [fxFlex]=\"dateOnly ? '100' : '50'\">\n <ng-container [ngTemplateOutlet]=\"dateInputTemplate\"></ng-container>\n </div>\n }\n <!-- Time -->\n @if (showTimeInputSignal() || showAddTimeSignal()) {\n <!-- Only show flex if there is content to be displayed. -->\n <div class=\"dbx-datetime-row\" fxFlex.lt-sm=\"100\" [fxFlex]=\"showDateInputSignal() ? '50' : '100'\">\n @if (showTimeInputSignal()) {\n <ng-container [ngTemplateOutlet]=\"timeMenuAndInputTemplate\"></ng-container>\n }\n @if (showAddTimeSignal()) {\n <div class=\"add-time-button-wrapper\">\n <button mat-button class=\"mat-datepicker-button-highlight dbx-button-spacer add-time-button\" ngClass.lt-sm=\"add-time-button-full\" (click)=\"addTime()\">\n <mat-icon>timer</mat-icon>\n Add Time\n </button>\n </div>\n }\n </div>\n }\n <!-- Date Hint -->\n @switch (hasErrorSignal()) {\n @case (false) {\n @if (!hideDateHint) {\n <div class=\"dbx-datetime-row dbx-datetime-hint-row\" fxFlex=\"100\">\n <div class=\"dbx-hint\">\n @switch (hasEmptyDisplayValueSignal()) {\n @case (true) {\n <span class=\"dbx-small\">No date/time set</span>\n }\n @case (false) {\n @switch (fullDaySignal()) {\n @case (true) {\n <small>\n <b class=\"dbx-ok\">{{ allDayLabel }}</b>\n {{ displayValueSignal() | date: 'fullDate' }} {{ timezoneAbbreviationSignal() }} ({{ displayValueSignal() | dateDistance }})\n </small>\n }\n @case (false) {\n <small>\n @if (displayValueSignal()) {\n <b class=\"dbx-ok\">{{ atTimeLabel }}</b>\n {{ displayValueSignal() | date: 'medium' }} {{ timezoneAbbreviationSignal() }} ({{ displayValueSignal() | timeDistance }})\n }\n </small>\n }\n }\n }\n }\n </div>\n </div>\n }\n }\n @case (true) {\n @if (currentErrorMessageSignal()) {\n <mat-error>{{ currentErrorMessageSignal() }}</mat-error>\n }\n }\n }\n</div>\n\n<!-- Date Input Template -->\n<ng-template #dateInputTemplate>\n <mat-form-field class=\"dbx-datetime-row-field\">\n <mat-label>{{ dateLabel }}</mat-label>\n <input #dateInput matInput [disabled]=\"disabled\" [required]=\"isDateRequired\" [min]=\"dateInputMinSignal()\" [max]=\"dateInputMaxSignal()\" [matDatepicker]=\"picker\" [matDatepickerFilter]=\"pickerFilterSignal()\" (dateChange)=\"datePicked($event)\" [value]=\"dateValueSignal()\" (keydown)=\"keydownOnDateInput($event)\" />\n <mat-datepicker #picker></mat-datepicker>\n @if (!hideDatePicker) {\n <button matPrefix class=\"dbx-datetime-row-button\" mat-icon-button (click)=\"picker.open()\" [disabled]=\"disabled\">\n <mat-icon>calendar_today</mat-icon>\n </button>\n }\n @if (showClearButtonSignal()) {\n <button matSuffix class=\"dbx-datetime-clear-button\" mat-icon-button aria-label=\"clears the date and time menu\" [disabled]=\"disabled\" (click)=\"clearValue()\">\n <mat-icon>clear</mat-icon>\n </button>\n }\n @if (!showTimeInputSignal()) {\n <span matTextSuffix>\n <ng-container [ngTemplateOutlet]=\"timezoneSuffixTemplate\"></ng-container>\n </span>\n }\n </mat-form-field>\n</ng-template>\n\n<!-- Time Menu/Input Template -->\n<ng-template #timeMenuAndInputTemplate>\n <mat-menu #timemenu=\"matMenu\">\n @if (timeMode === 'optional') {\n <button mat-menu-item (click)=\"removeTime()\">\n <span>Remove Time</span>\n </button>\n <mat-divider></mat-divider>\n }\n @for (preset of presetsSignal(); track preset) {\n <button mat-menu-item (click)=\"selectPreset(preset)\">{{ preset.label | getValue }}</button>\n }\n </mat-menu>\n <mat-form-field class=\"dbx-datetime-row-field\">\n <mat-label>{{ timeLabel }}</mat-label>\n <input #timeInput [errorStateMatcher]=\"timeErrorStateMatcher\" matInput [required]=\"isTimeRequired\" [formControl]=\"timeInputCtrl\" (focus)=\"focusTime()\" (focusout)=\"focusOutTime()\" (keydown)=\"keydownOnTimeInput($event)\" />\n <button matPrefix class=\"dbx-datetime-row-button\" mat-icon-button [matMenuTriggerFor]=\"timemenu\" aria-label=\"opens the time menu\" [disabled]=\"disabled\">\n <mat-icon>timer</mat-icon>\n </button>\n <span matTextSuffix>\n <ng-container [ngTemplateOutlet]=\"timezoneSuffixTemplate\"></ng-container>\n </span>\n @if (timeInputCtrl.hasError('pattern')) {\n <mat-error>The input time is not recognizable.</mat-error>\n }\n </mat-form-field>\n</ng-template>\n\n<!-- Timezone Suffix -->\n<ng-template #timezoneSuffixTemplate>\n @if (showTimezone) {\n <span class=\"dbx-datetime-timezone dbx-faint\">{{ timezoneAbbreviationSignal() }}</span>\n }\n</ng-template>\n","import { type Maybe, type DecisionFunction, type Milliseconds, type TimezoneString, type DateMonth, type DayOfMonth, type YearNumber, isMonthDaySlashDate, MS_IN_MINUTE } from '@dereekb/util';\nimport { guessCurrentTimezone, DateTimezoneUtcNormalInstance, dateTimezoneUtcNormal, DateRangeInput, DateRange, isSameDateDayRange, DateRangeWithDateOrStringValue, DateTimeMinuteConfig, dateRange, isDateInDateRange, clampDateRangeToDateRange, isSameDateRange, isSameDateDay, limitDateTimeInstance, dateTimeMinuteWholeDayDecisionFunction } from '@dereekb/date';\nimport { switchMap, shareReplay, map, startWith, distinctUntilChanged, debounceTime, throttleTime, BehaviorSubject, Observable, Subject, of, combineLatestWith, filter, combineLatest, scan, first, timer } from 'rxjs';\nimport { ChangeDetectionStrategy, Component, ElementRef, Injectable, OnDestroy, OnInit, forwardRef, inject, signal, viewChild } from '@angular/core';\nimport { AbstractControl, FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { FieldType } from '@ngx-formly/material';\nimport { FieldTypeConfig, FormlyFieldProps } from '@ngx-formly/core';\nimport { MatDateRangeSelectionStrategy, MAT_DATE_RANGE_SELECTION_STRATEGY, DateRange as DatePickerDateRange, MatCalendar, MatDatepickerModule } from '@angular/material/datepicker';\nimport { asObservableFromGetter, filterMaybe, ObservableOrValueGetter, skipFirstMaybe, SubscriptionObject, switchMapMaybeDefault } from '@dereekb/rxjs';\nimport { DbxDateTimeValueMode, dbxDateRangeIsSameDateRangeFieldValue, dbxDateTimeInputValueParseFactory, dbxDateTimeOutputValueFactory } from './date.value';\nimport { DateTimePresetConfiguration } from './datetime';\nimport { DbxDateTimeFieldMenuPresetsService } from './datetime.field.service';\nimport { DateAdapter } from '@angular/material/core';\nimport { isBefore } from 'date-fns';\nimport { MatError, MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { NgClass } from '@angular/common';\n\nexport type DbxFixedDateRangeDateRangeInput = Omit<DateRangeInput, 'date'>;\n\nexport type DbxFixedDateRangePickerConfiguration = Omit<DateTimeMinuteConfig, 'date'>;\n\nexport type DbxFixedDateRangeSelectionMode = 'single' | 'normal' | 'arbitrary' | 'arbitrary_quick';\nexport type DbxFixedDateRangePicking = 'start' | 'end';\n\nexport interface DbxFixedDateRangeFieldProps extends FormlyFieldProps {\n /**\n * Date range input to build the date range.\n */\n readonly dateRangeInput: ObservableOrValueGetter<DbxFixedDateRangeDateRangeInput>;\n\n /**\n * Selection mode to use when picking dates on the calendar.\n */\n readonly selectionMode?: Maybe<ObservableOrValueGetter<DbxFixedDateRangeSelectionMode>>;\n\n /**\n * Value mode for the dates in the output DateRange.\n *\n * Defaults to DATE\n */\n readonly valueMode?: DbxDateTimeValueMode;\n\n /**\n * Whether or not to pass the date value as a UTC date, or a date in the current timezone.\n */\n readonly fullDayInUTC?: boolean;\n\n /**\n * Custom picker configuration\n */\n readonly pickerConfig?: ObservableOrValueGetter<DbxFixedDateRangePickerConfiguration>;\n\n /**\n * (Optional) The input timezone to default to.\n *\n * Ignored if fullDayInUTC is true.\n */\n readonly timezone?: Maybe<ObservableOrValueGetter<Maybe<TimezoneString>>>;\n\n /**\n * Whether or not to display the timezone. True by default.\n */\n readonly showTimezone?: boolean;\n\n /**\n * Custom presets to show in the dropdown.\n */\n readonly presets?: ObservableOrValueGetter<DateTimePresetConfiguration[]>;\n\n /**\n * Whether or not to show the range input. Defaults to true.\n */\n readonly showRangeInput?: boolean;\n}\n\nfunction dbxFixedDateRangeInputValueFactory(mode: DbxDateTimeValueMode, timezoneInstance: Maybe<DateTimezoneUtcNormalInstance>): (input: Maybe<DateRangeWithDateOrStringValue>) => Maybe<DateRange> {\n const dateInputTransformer = dbxDateTimeInputValueParseFactory(mode, timezoneInstance);\n\n return (y) => {\n let result: Maybe<DateRange>;\n\n if (y) {\n result = {\n start: dateInputTransformer(y.start) as Date,\n end: dateInputTransformer(y.end) as Date\n };\n }\n\n return result;\n };\n}\n\nfunction dbxFixedDateRangeOutputValueFactory(mode: DbxDateTimeValueMode, timezoneInstance: Maybe<DateTimezoneUtcNormalInstance>): (date: Maybe<DateRange>) => Maybe<DateRangeWithDateOrStringValue> {\n const dateOutputTransformer = dbxDateTimeOutputValueFactory(mode, timezoneInstance);\n\n return (y) => {\n let result: Maybe<DateRange>;\n\n if (y) {\n result = {\n start: dateOutputTransformer(y.start) as Date,\n end: dateOutputTransformer(y.end) as Date\n };\n }\n\n return result;\n };\n}\n\nconst TIME_OUTPUT_THROTTLE_TIME: Milliseconds = 10;\n\nexport type FixedDateRangeScanType = 'start' | 'end' | 'startRepeat';\n\nexport interface FixedDateRangeScan {\n /**\n * Picked the start or end of the range on the last pick.\n */\n readonly lastPickType?: Maybe<FixedDateRangeScanType>;\n /**\n * The latest date passed, if applicable.\n */\n readonly lastDateRange?: Maybe<Partial<DateRange>>;\n /**\n * The generated boundary range.\n */\n readonly boundary?: DateRange;\n /**\n * New Date Range\n */\n readonly range?: DateRange;\n}\n\ntype SelectedDateEventType = 'calendar' | 'input';\n\ninterface SelectedDateEvent {\n readonly type: SelectedDateEventType;\n readonly range?: Maybe<Partial<DateRange>>;\n}\n\n@Component({\n templateUrl: 'fixeddaterange.field.component.html',\n providers: [\n {\n provide: MAT_DATE_RANGE_SELECTION_STRATEGY,\n useClass: forwardRef(() => DbxFixedDateRangeFieldSelectionStrategy)\n }\n ],\n imports: [MatDatepickerModule, MatFormFieldModule, FormsModule, ReactiveFormsModule, MatInputModule, MatError, NgClass],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFixedDateRangeFieldComponent extends FieldType<FieldTypeConfig<DbxFixedDateRangeFieldProps>> implements OnInit, OnDestroy {\n private readonly dbxDateTimeFieldMenuPresetsService = inject(DbxDateTimeFieldMenuPresetsService);\n\n readonly calendar = viewChild.required<MatCalendar<Date>>(MatCalendar);\n readonly startDateInputElement = viewChild<string, ElementRef>('startDateInput', { read: ElementRef });\n readonly endDateInputElement = viewChild<string, ElementRef>('endDateInput', { read: ElementRef });\n\n readonly currentDateRangeInputSignal = signal<Maybe<DbxFixedDateRangeDateRangeInput>>(undefined);\n readonly currentSelectionModeSignal = signal<DbxFixedDateRangeSelectionMode>('single');\n\n private readonly _sub = new SubscriptionObject();\n\n private readonly _inputRangeFormSub = new SubscriptionObject();\n private readonly _inputRangeFormValueSub = new SubscriptionObject();\n\n private readonly _dateRangeInputSub = new SubscriptionObject();\n private readonly _currentSelectionModeSub = new SubscriptionObject();\n private readonly _latestBoundarySub = new SubscriptionObject();\n private readonly _disableEndSub = new SubscriptionObject();\n private readonly _activeDateSub = new SubscriptionObject();\n\n private readonly _config = new BehaviorSubject<Maybe<Observable<DbxFixedDateRangePickerConfiguration>>>(undefined);\n private readonly _selectionMode = new BehaviorSubject<Maybe<Observable<DbxFixedDateRangeSelectionMode>>>(undefined);\n private readonly _dateRangeInput = new BehaviorSubject<Maybe<Observable<DbxFixedDateRangeDateRangeInput>>>(undefined);\n\n private readonly _timezone = new BehaviorSubject<Maybe<Observable<Maybe<TimezoneString>>>>(undefined);\n private readonly _presets = new BehaviorSubject<Observable<DateTimePresetConfiguration[]>>(of([]));\n\n private readonly _selectionEvent = new Subject<SelectedDateEvent>();\n readonly selectedDateRange$: Observable<Maybe<Partial<DateRange>>> = this._selectionEvent.pipe(map((x) => x.range));\n\n private readonly _formControlObs = new BehaviorSubject<Maybe<AbstractControl<Maybe<DateRange>>>>(undefined);\n readonly formControl$ = this._formControlObs.pipe(filterMaybe());\n\n readonly config$: Observable<DbxFixedDateRangePickerConfiguration> = this._config.pipe(\n filterMaybe(),\n switchMap((x) => x),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly limitDateTimeInstance$ = this.config$.pipe(map(limitDateTimeInstance), shareReplay(1));\n\n readonly selectionMode$: Observable<DbxFixedDateRangeSelectionMode> = this._selectionMode.pipe(\n switchMapMaybeDefault<DbxFixedDateRangeSelectionMode>('single'),\n map((x) => x ?? 'single'),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly dateRangeInput$ = this._dateRangeInput.pipe(switchMapMaybeDefault(), shareReplay(1));\n\n readonly timezone$: Observable<Maybe<TimezoneString>> = this._timezone.pipe(switchMapMaybeDefault(), distinctUntilChanged()).pipe(\n map((defaultTimezone) => {\n return defaultTimezone ?? guessCurrentTimezone();\n }),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly timezoneInstance$: Observable<Maybe<DateTimezoneUtcNormalInstance>> = this.timezone$.pipe(\n map((timezone) => (timezone ? dateTimezoneUtcNormal({ timezone }) : undefined)),\n shareReplay(1)\n );\n\n readonly valueInSystemTimezone$: Observable<Maybe<DateRange>> = this.formControl$.pipe(\n map((control) => control.valueChanges.pipe(startWith<Maybe<DateRangeWithDateOrStringValue>>(control.value), shareReplay(1))),\n combineLatestWith(this.timezoneInstance$),\n switchMap(([x, timezoneInstance]) => {\n return x.pipe(map(dbxFixedDateRangeInputValueFactory(this.valueMode, timezoneInstance)));\n }),\n throttleTime(20, undefined, { leading: false, trailing: true }), // throttle incoming values and timezone changes\n distinctUntilChanged<Maybe<DateRange>>(isSameDateDayRange),\n shareReplay(1)\n );\n\n dateRangeSelectionForMode(mode: DbxFixedDateRangeSelectionMode) {\n const result: Observable<Maybe<DateRange>> = combineLatest([this.dateRangeInput$, this.limitDateTimeInstance$]).pipe(\n switchMap(([dateRangeInput, limitInstance]) => {\n const hasDateRangeConfiguration = Boolean(dateRangeInput);\n const minMaxClamp = (dateRange: DateRange) => limitInstance.clampDateRange(dateRange);\n\n if (mode === 'single') {\n // only use the start date.\n return this.selectedDateRange$.pipe(\n distinctUntilChanged(isSameDateDayRange),\n map((inputDateRange) => {\n const date = inputDateRange?.start;\n return date ? (minMaxClamp(dateRange({ ...dateRangeInput, date } as DateRangeInput)) as DateRange) : null;\n })\n );\n } else {\n // take the first date, then wait unless the date is outside of the range.\n return this.selectedDateRange$.pipe(\n scan((acc: FixedDateRangeScan, nextDateRange: Maybe<Partial<DateRange>>) => {\n let result: FixedDateRangeScan;\n let pickType: Maybe<FixedDateRangeScanType> = 'start';\n\n if (nextDateRange && nextDateRange.start != null) {\n const { start: startOrNextDate, end } = nextDateRange;\n const potentialBoundary = dateRange({ ...dateRangeInput, date: startOrNextDate } as DateRangeInput);\n\n // only comes through when passed by the text inputs\n if (startOrNextDate && end) {\n const range = clampDateRangeToDateRange(nextDateRange, potentialBoundary) as DateRange;\n result = {\n lastDateRange: nextDateRange,\n boundary: range,\n range\n };\n\n // for normal mode we want to protect against \"start\" being input, then the output being passed,\n // and then the next click being treated as another \"start\" instead of an \"end\".\n if (mode === 'normal' && acc.lastPickType === 'start' && isSameDateDay(startOrNextDate, end)) {\n if (isSameDateDay(startOrNextDate, acc.lastDateRange?.start)) {\n pickType = 'startRepeat';\n }\n }\n } else {\n let range: Maybe<DateRange> = undefined;\n let boundary: Maybe<DateRange> = potentialBoundary;\n\n if (mode === 'normal') {\n if (!hasDateRangeConfiguration) {\n // if there is no configured range/boundary, then just set the pick type based on the last type\n boundary = undefined;\n pickType = acc.lastPickType === 'start' ? 'end' : 'start';\n } else if (acc.lastPickType === 'startRepeat') {\n pickType = 'end';\n } else {\n // if the pick is outside the boundary, then consider it a start pick type.\n pickType = acc.lastPickType === 'start' && acc.boundary && isDateInDateRange(startOrNextDate, acc.boundary) ? 'end' : 'start';\n }\n\n // react based on how this\n switch (pickType) {\n case 'end':\n const lastStart = acc.lastDateRange?.start as Date;\n\n let boundaryToCheck: DateRange;\n const selectionIsBeforePreviousSelection = !lastStart || isBefore(startOrNextDate, lastStart);\n\n let nextStart: Date;\n let nextEnd: Date;\n\n if (selectionIsBeforePreviousSelection) {\n nextStart = startOrNextDate;\n nextEnd = lastStart;\n boundaryToCheck = potentialBoundary;\n } else {\n nextStart = lastStart;\n nextEnd = startOrNextDate;\n boundaryToCheck = dateRange({ ...dateRangeInput, date: nextStart } as DateRangeInput);\n }\n\n // Recalculate the boundary using the next start date. If it is outside the selectable range, then it becomes a \"start\" pick type.\n if (isBefore(boundaryToCheck.end, nextEnd)) {\n // TODO: Allow changing the behavior to fill the entire range instead of just resetting it entirely\n\n nextStart = startOrNextDate;\n nextEnd = startOrNextDate;\n pickType = 'start';\n boundary = boundaryToCheck;\n } else {\n boundary = range;\n }\n\n // if we're picking the end then set the range.\n range = {\n start: nextStart,\n end: nextEnd\n };\n break;\n case 'start':\n // retain the boundary as potential boundary, and set our new range from the single date.\n range = {\n start: startOrNextDate as Date,\n end: startOrNextDate as Date\n };\n break;\n }\n } else if (acc.boundary && isDateInDateRange(startOrNextDate, acc.boundary)) {\n // if in the date range, uses the pick as the last date.\n range = {\n start: acc.boundary.start,\n end: startOrNextDate\n };\n\n if (mode === 'arbitrary_quick') {\n // modify boundary to match range\n if (isSameDateRange(acc.range, range) && isSameDateDay(range.end, startOrNextDate)) {\n // if we clicked on the end range, then expand the boundary again to the full range.\n range = dateRange({ ...dateRangeInput, date: range.start } as DateRangeInput);\n boundary = range;\n } else {\n boundary = range;\n }\n } else {\n // retain same boundary\n boundary = acc.boundary;\n }\n } else if (mode === 'arbitrary_quick') {\n range = potentialBoundary;\n }\n\n result = {\n lastDateRange: nextDateRange,\n boundary,\n range\n };\n }\n } else {\n result = {\n lastDateRange: nextDateRange\n };\n }\n\n if (result) {\n result = {\n lastPickType: pickType,\n lastDateRange: result.lastDateRange,\n boundary: result.boundary ? (minMaxClamp(result.boundary) as DateRange) : undefined,\n range: result.range ? (minMaxClamp(result.range) as DateRange) : undefined\n };\n }\n\n return result;\n }, {}),\n filter((x) => !x.lastDateRange || x.range != null), // pass through null/date clearings or ranges\n map((x) => x.range ?? null) // return the range\n );\n }\n })\n );\n\n return result;\n }\n\n readonly fullBoundary$: Observable<Maybe<DateRange>> = this.dateRangeSelectionForMode('single').pipe(shareReplay(1));\n readonly latestBoundary$: Observable<Maybe<DateRange>> = this.selectionMode$.pipe(\n switchMap((mode) => {\n if (mode === 'arbitrary_quick') {\n // in arbitrary_quick mode, the latest value is the boundary, since we always set the value immediately.\n return this.valueInSystemTimezone$;\n } else {\n return this.fullBoundary$;\n }\n })\n );\n\n /**\n * Focuses on the date any time the selection event from the picker occured, otherwise use the system value\n */\n readonly calendarFocusDate$: Observable<Date> = this._selectionEvent.pipe(startWith(null)).pipe(\n switchMap((selectionEvent) => {\n if (selectionEvent && selectionEvent.type === 'calendar' && selectionEvent.range?.start) {\n return of(selectionEvent.range.start);\n } else {\n return this.fullBoundary$.pipe(\n first(),\n map((fullBoundary) => {\n return fullBoundary?.start ?? selectionEvent?.range?.start;\n })\n );\n }\n }),\n filterMaybe(),\n shareReplay(1)\n );\n\n readonly dateRangeSelection$: Observable<Maybe<DateRange>> = this.selectionMode$.pipe(switchMap((mode) => this.dateRangeSelectionForMode(mode)));\n\n readonly calendarSelection$: Observable<DatePickerDateRange<Date> | null> = this.valueInSystemTimezone$.pipe(\n map((x) => (x ? new DatePickerDateRange<Date>(x.start, x.end) : null)),\n shareReplay(1)\n );\n\n readonly endDisabled$ = this.selectionMode$.pipe(\n map((x) => x === 'single'),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly inputRangeForm = new FormGroup({\n start: new FormControl<Maybe<Date>>(null),\n end: new FormControl<Maybe<Date>>(null)\n });\n\n get fixedDateRangeField(): DbxFixedDateRangeFieldProps {\n return this.field.props;\n }\n\n get selectionMode() {\n return this.field.props.selectionMode;\n }\n\n get valueMode(): DbxDateTimeValueMode {\n return this.field.props.valueMode ?? DbxDateTimeValueMode.DATE;\n }\n\n get description(): Maybe<string> {\n return this.field.props.description;\n }\n\n get timezone() {\n return this.field.props.timezone;\n }\n\n get showTimezone() {\n return this.field.props.showTimezone ?? true;\n }\n\n get presets() {\n return this.field.props.presets;\n }\n\n get showRangeInput() {\n return this.field.props.showRangeInput ?? true;\n }\n\n readonly minMaxRange$ = this.limitDateTimeInstance$.pipe(\n combineLatestWith(timer(MS_IN_MINUTE)), // refresh every minute\n map(([x]) => x.dateRange()),\n distinctUntilChanged(isSameDateDayRange),\n shareReplay(1)\n );\n\n readonly min$ = this.minMaxRange$.pipe(\n map((x) => x?.start ?? null),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly max$ = this.minMaxRange$.pipe(\n map((x) => x?.end ?? null),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly pickerFilter$: Observable<DecisionFunction<Date | null>> = this.config$.pipe(\n distinctUntilChanged(),\n map((x) => {\n if (x) {\n const filter = dateTimeMinuteWholeDayDecisionFunction(x, false);\n return (x: Date | null) => (x != null ? filter(x) : true);\n } else {\n return () => true;\n }\n }),\n shareReplay(1)\n );\n\n readonly defaultPickerFilter: DecisionFunction<Date | null> = () => true;\n\n readonly minDateSignal = toSignal(this.min$, { initialValue: null });\n readonly maxDateSignal = toSignal(this.max$, { initialValue: null });\n readonly endDisabledSignal = toSignal(this.endDisabled$);\n readonly latestBoundarySignal = toSignal(this.latestBoundary$);\n readonly calendarSelectionSignal = toSignal(this.calendarSelection$, { initialValue: null });\n readonly pickerFilterSignal = toSignal(this.pickerFilter$, { initialValue: this.defaultPickerFilter });\n\n ngOnInit(): void {\n this._formControlObs.next(this.formControl);\n\n const dateRangeSelection = this.dateRangeSelection$.pipe(shareReplay(1));\n\n const setInputFormValue = (value: Maybe<DateRange>) => {\n if (!isSameDateDayRange(value, this.inputRangeForm.value as Partial<DateRange>)) {\n this.inputRangeForm.setValue({\n start: value?.start ?? null,\n end: value?.end ?? null\n });\n }\n };\n\n this._sub.subscription = this.valueInSystemTimezone$\n .pipe(\n combineLatestWith(this.timezoneInstance$.pipe(map((timezoneInstance) => dbxFixedDateRangeOutputValueFactory(this.valueMode, timezoneInstance)))),\n throttleTime(TIME_OUTPUT_THROTTLE_TIME, undefined, { leading: false, trailing: true }),\n switchMap(([currentValue, valueFactory]) => {\n return dateRangeSelection.pipe(\n skipFirstMaybe(),\n distinctUntilChanged<Maybe<DateRange>>(isSameDateDayRange),\n map((x) => [x, currentValue, valueFactory] as [typeof x, typeof currentValue, typeof valueFactory])\n );\n })\n )\n .subscribe(([rawValue, currentValue, valueFactory]) => {\n const value = rawValue ? valueFactory(rawValue) : null;\n const isSameRange = dbxDateRangeIsSameDateRangeFieldValue(value, currentValue);\n\n if (!isSameRange) {\n this.formControl.setValue(value);\n this.formControl.markAsDirty();\n this.formControl.markAsTouched();\n } else if (rawValue != null) {\n // update the input text again\n setInputFormValue(rawValue);\n }\n });\n\n if (this.selectionMode) {\n this._selectionMode.next(asObservableFromGetter(this.selectionMode));\n }\n\n this._currentSelectionModeSub.subscription = this.selectionMode$.subscribe((x) => this.currentSelectionModeSignal.set(x));\n this._dateRangeInputSub.subscription = this.dateRangeInput$.subscribe((x) => this.currentDateRangeInputSignal.set(x));\n\n this._inputRangeFormSub.subscription = this.valueInSystemTimezone$.subscribe((x: Maybe<DateRange>) => {\n setInputFormValue(x);\n });\n\n if (this.showRangeInput) {\n this._inputRangeFormValueSub.subscription = this.valueInSystemTimezone$\n .pipe(\n throttleTime(100), // throttle to prevent the value from changing too fast\n switchMap(() => {\n return this.inputRangeForm.valueChanges.pipe(\n debounceTime(500),\n filter(() => {\n const startString = this.startDateInputElement()?.nativeElement?.value;\n let valid = isMonthDaySlashDate(startString);\n\n if (valid && this.currentSelectionModeSignal() !== 'single') {\n const endString = this.endDateInputElement()?.nativeElement?.value;\n valid = isMonthDaySlashDate(endString);\n }\n\n return valid; // must be a valid text input\n }),\n map((x) => x as Maybe<Partial<DateRange>>)\n );\n }),\n distinctUntilChanged(isSameDateRange)\n )\n .subscribe((x: Maybe<Partial<DateRange>>) => {\n const currentSelectionMode = this.currentSelectionModeSignal();\n\n if (currentSelectionMode === 'single') {\n this.setDateRange(x?.start ? { start: x.start } : null, 'input');\n } else {\n let rangeToSet: Maybe<Partial<DateRange>> = x;\n\n const latestBoundary = this.latestBoundarySignal();\n\n if (currentSelectionMode === 'arbitrary_quick' && latestBoundary && x?.start && x?.end) {\n if (!isDateInDateRange(x.start, latestBoundary)) {\n // if the end date it outside of the current range (i.e. a range was typed in only to the start date) then set the end to the boundary end\n const boundary = dateRange({ ...this.currentDateRangeInputSignal(), date: x.start } as DateRangeInput);\n rangeToSet = { start: x.start, end: boundary.end };\n }\n }\n\n this.setDateRange(rangeToSet, 'input');\n }\n });\n }\n\n this._dateRangeInput.next(asObservableFromGetter(this.fixedDateRangeField.dateRangeInput));\n\n this._disableEndSub.subscription = this.endDisabled$.subscribe((disabled) => {\n const end = this.inputRangeForm.get('end');\n\n if (end) {\n if (disabled) {\n end.disable();\n } else {\n end.enable();\n }\n }\n });\n\n const inputPickerConfig = this.fixedDateRangeField.pickerConfig;\n this._config.next(inputPickerConfig ? asObservableFromGetter(inputPickerConfig) : undefined);\n\n // Set default timezone if provided.\n if (this.timezone && !this.fixedDateRangeField.fullDayInUTC) {\n this._timezone.next(asObservableFromGetter(this.timezone));\n }\n\n // Watch for disabled changes so we can propogate them properly.\n this.formControl.registerOnDisabledChange((disabled) => {\n if (disabled) {\n this.inputRangeForm.disable();\n } else {\n this.inputRangeForm.enable();\n\n this.endDisabled$.pipe(first()).subscribe((disabled) => {\n const end = this.inputRangeForm.get('end');\n\n if (end) {\n if (disabled) {\n end.disable();\n } else {\n end.enable();\n }\n }\n });\n }\n });\n\n if (this.presets != null) {\n this._presets.next(asObservableFromGetter(this.presets));\n } else {\n this._presets.next(this.dbxDateTimeFieldMenuPresetsService.configurations$);\n }\n\n this._activeDateSub.subscription = this.calendarFocusDate$.subscribe((x) => {\n this.calendar().activeDate = x;\n });\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._sub.destroy();\n this._inputRangeFormSub.destroy();\n this._inputRangeFormValueSub.destroy();\n this._dateRangeInputSub.destroy();\n this._currentSelectionModeSub.destroy();\n this._latestBoundarySub.destroy();\n this._disableEndSub.destroy();\n this._activeDateSub.destroy();\n this._config.complete();\n this._selectionMode.complete();\n this._dateRangeInput.complete();\n this._timezone.complete();\n this._presets.complete();\n this._selectionEvent.complete();\n this._formControlObs.complete();\n }\n\n selectedChange(date: Maybe<Date>): void {\n this.setDateRange(date ? { start: date } : null, 'calendar');\n }\n\n setDateRange(range: Maybe<Partial<DateRange>>, type: SelectedDateEventType) {\n this._selectionEvent.next({ type, range });\n }\n\n _createDateRange(date: Maybe<Date>): Maybe<DateRange> {\n return date ? dateRange({ ...this.currentDateRangeInputSignal(), date } as DateRangeInput) : undefined;\n }\n}\n\n@Injectable()\nexport class DbxFixedDateRangeFieldSelectionStrategy<D> implements MatDateRangeSelectionStrategy<D> {\n private readonly _dateAdapter = inject(DateAdapter<D>);\n readonly dbxFixedDateRangeFieldComponent = inject(DbxFixedDateRangeFieldComponent);\n\n selectionFinished(date: D | null, currentRange: DatePickerDateRange<D>, event: Event): DatePickerDateRange<D> {\n // unused\n return currentRange;\n }\n\n createPreview(activeDate: D | null, currentRange: DatePickerDateRange<D>, event: Event): DatePickerDateRange<D> {\n const { currentSelectionModeSignal, latestBoundarySignal } = this.dbxFixedDateRangeFieldComponent;\n const currentSelectionMode = currentSelectionModeSignal();\n\n if (activeDate != null && currentSelectionMode !== 'single') {\n const latestBoundary = latestBoundarySignal();\n const date = this.dateFromAdapterDate(activeDate);\n\n if (latestBoundary && (currentSelectionMode === 'normal' || isDateInDateRange(date, latestBoundary))) {\n const exampleDateRange = this._createDateRange(latestBoundary);\n return exampleDateRange;\n }\n }\n\n return this._createDateRangeWithDate(activeDate);\n }\n\n private _createDateRangeWithDate(input: D | null): DatePickerDateRange<D> {\n let dateRange: Maybe<DateRange>;\n\n if (input) {\n const date = this.dateFromAdapterDate(input);\n dateRange = this.dbxFixedDateRangeFieldComponent._createDateRange(date);\n }\n\n return this._createDateRange(dateRange);\n }\n\n private _createDateRange(input: Maybe<DateRange>): DatePickerDateRange<D> {\n if (input) {\n return new DatePickerDateRange<D>(this.adapterDateFromDate(input.start), this.adapterDateFromDate(input.end));\n } else {\n return new DatePickerDateRange<D>(null, null);\n }\n }\n\n dateFromAdapterDate(input: D) {\n const day: DayOfMonth = this._dateAdapter.getDate(input);\n const monthIndex: DateMonth = this._dateAdapter.getMonth(input);\n const year: YearNumber = this._dateAdapter.getYear(input);\n return new Date(year, monthIndex, day);\n }\n\n adapterDateFromDate(date: Date): D {\n const day: DayOfMonth = date.getDate();\n const monthIndex: DateMonth = date.getMonth();\n const year: YearNumber = date.getFullYear();\n\n return this._dateAdapter.createDate(year, monthIndex, day);\n }\n}\n","<div class=\"dbx-fixeddaterange-field\">\n <mat-calendar #calendarView [selected]=\"calendarSelectionSignal()\" [dateFilter]=\"pickerFilterSignal()\" [minDate]=\"minDateSignal()\" [maxDate]=\"maxDateSignal()\" (selectedChange)=\"selectedChange($event)\"></mat-calendar>\n <mat-form-field class=\"dbx-fixeddaterange-field-input\" appearance=\"fill\">\n @if (showRangeInput) {\n <mat-date-range-input [formGroup]=\"inputRangeForm\">\n <input #startDateInput matStartDate formControlName=\"start\" placeholder=\"Start date\" />\n <input #endDateInput [ngClass]=\"endDisabledSignal() ? 'dbx-fixeddaterange-field-input-end' : ''\" [attr.tabindex]=\"endDisabledSignal() ? -1 : 0\" matEndDate formControlName=\"end\" placeholder=\"End date\" />\n </mat-date-range-input>\n }\n </mat-form-field>\n @if (formControl.hasError('required')) {\n <mat-error>Date range is required</mat-error>\n }\n</div>\n","import { NgModule } from '@angular/core';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxDateTimeFieldComponent } from './datetime.field.component';\nimport { DbxFormFormlyWrapperModule } from '../../wrapper/wrapper.module';\nimport { DbxFixedDateRangeFieldComponent } from './fixeddaterange.field.component';\n\nconst importsAndExports = [DbxDateTimeFieldComponent, DbxFixedDateRangeFieldComponent, DbxFormFormlyWrapperModule];\n\n@NgModule({\n imports: [\n ...importsAndExports,\n FormlyModule.forChild({\n types: [\n //\n { name: 'datetime', component: DbxDateTimeFieldComponent, wrappers: ['style', 'form-field'] },\n { name: 'fixeddaterange', component: DbxFixedDateRangeFieldComponent, wrappers: ['style', 'form-field'] }\n ]\n })\n ],\n exports: importsAndExports\n})\nexport class DbxFormFormlyDateFieldModule {}\n","import { type DbxFormStyleWrapperConfig } from './style.wrapper.component';\nimport { type DbxFlexWrapperConfig } from './flex.wrapper.component';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type DbxFormToggleWrapperConfig } from './toggle.wrapper.component';\nimport { type DbxFormSectionConfig } from './section.wrapper.component';\nimport { type DbxFormSubsectionConfig } from './subsection.wrapper.component';\nimport { type DbxFormInfoConfig } from './info.wrapper.component';\nimport { type DbxFormExpandWrapperConfig } from './expand.wrapper.component';\nimport { type DbxFlexSize } from '@dereekb/dbx-web';\nimport { type DbxFormWorkingWrapperConfig } from './working.wrapper.component';\nimport { AUTO_TOUCH_WRAPPER_KEY, EXPAND_WRAPPER_KEY, TOGGLE_WRAPPER_KEY, SECTION_WRAPPER_KEY, SUBSECTION_WRAPPER_KEY, INFO_WRAPPER_KEY, STYLE_WRAPPER_KEY, WORKING_WRAPPER_KEY } from './wrapper.key';\n\nexport type WrapperFormlyFieldConfig<P, C extends FormlyFieldConfig> = FormlyFieldConfig<P> & {\n wrappers: string[];\n props: P;\n fieldGroup: [C];\n};\n\nexport function addWrapperToFormlyFieldConfig<C extends FormlyFieldConfig, P extends object>(fieldConfig: C, wrapperKey: string, wrapperProps: P): WrapperFormlyFieldConfig<P, C> {\n return {\n wrappers: [wrapperKey],\n props: wrapperProps,\n fieldGroup: [fieldConfig]\n };\n}\n\nexport function autoTouchWrapper<T extends object, C extends FormlyFieldConfig>(fieldConfig: C, autoTouchWrapper: DbxFormExpandWrapperConfig<T> = {}) {\n return addWrapperToFormlyFieldConfig<C, DbxFormExpandWrapperConfig<T>>(fieldConfig, AUTO_TOUCH_WRAPPER_KEY, autoTouchWrapper);\n}\n\nexport function expandWrapper<T extends object, C extends FormlyFieldConfig>(fieldConfig: C, expandWrapper: DbxFormExpandWrapperConfig<T> = {}) {\n return addWrapperToFormlyFieldConfig<C, DbxFormExpandWrapperConfig<T>>(fieldConfig, EXPAND_WRAPPER_KEY, expandWrapper);\n}\n\nexport function toggleWrapper<C extends FormlyFieldConfig>(fieldConfig: C, toggleWrapper: DbxFormToggleWrapperConfig = {}) {\n return addWrapperToFormlyFieldConfig<C, DbxFormToggleWrapperConfig>(fieldConfig, TOGGLE_WRAPPER_KEY, toggleWrapper);\n}\n\nexport function sectionWrapper<C extends FormlyFieldConfig>(fieldConfig: C, sectionWrapper: DbxFormSectionConfig = {}) {\n return addWrapperToFormlyFieldConfig<C, DbxFormSectionConfig>(fieldConfig, SECTION_WRAPPER_KEY, sectionWrapper);\n}\n\nexport function subsectionWrapper<C extends FormlyFieldConfig>(fieldConfig: C, subsectionWrapper: DbxFormSubsectionConfig = {}) {\n return addWrapperToFormlyFieldConfig<C, DbxFormSubsectionConfig>(fieldConfig, SUBSECTION_WRAPPER_KEY, subsectionWrapper);\n}\n\nexport function infoWrapper<C extends FormlyFieldConfig>(fieldConfig: C, infoWrapper: DbxFormInfoConfig) {\n return addWrapperToFormlyFieldConfig<C, DbxFormInfoConfig>(fieldConfig, INFO_WRAPPER_KEY, infoWrapper);\n}\n\nexport function styleWrapper<C extends FormlyFieldConfig>(fieldConfig: C, styleWrapper: DbxFormStyleWrapperConfig) {\n return addWrapperToFormlyFieldConfig<C, DbxFormStyleWrapperConfig>(fieldConfig, STYLE_WRAPPER_KEY, styleWrapper);\n}\n\nexport function workingWrapper<C extends FormlyFieldConfig>(fieldConfig: C, workingWrapper: DbxFormWorkingWrapperConfig = {}) {\n return addWrapperToFormlyFieldConfig<C, DbxFormWorkingWrapperConfig>(fieldConfig, WORKING_WRAPPER_KEY, workingWrapper);\n}\n\nexport interface DbxFlexLayoutWrapperGroupFieldConfig {\n field: FormlyFieldConfig;\n /**\n * Flex space sizing for the field. If undefined it will default to the provided default size.\n */\n size?: DbxFlexSize;\n}\n\nexport interface DbxFlexLayoutWrapperGroupFieldConfigDefaults extends DbxFlexWrapperConfig, Omit<DbxFlexLayoutWrapperGroupFieldConfig, 'field'> {}\n\nexport function checkIsFieldFlexLayoutGroupFieldConfig(input: FormlyFieldConfig | DbxFlexLayoutWrapperGroupFieldConfig): input is DbxFlexLayoutWrapperGroupFieldConfig {\n if ((input as DbxFlexLayoutWrapperGroupFieldConfig).field != null) {\n return true;\n } else {\n return false;\n }\n}\n\nexport function flexLayoutWrapper(fieldConfigs: (FormlyFieldConfig | DbxFlexLayoutWrapperGroupFieldConfig)[], { relative, breakpoint, breakToColumn, size: defaultSize = 2 }: DbxFlexLayoutWrapperGroupFieldConfigDefaults = {}): FormlyFieldConfig<DbxFlexWrapperConfig> {\n return {\n wrappers: ['flex'],\n fieldGroupClassName: 'dbx-flex-group',\n // fieldGroupClassName: 'field-layout-group',\n props: {\n breakpoint,\n breakToColumn,\n relative\n },\n fieldGroup: fieldConfigs.map((inputConfig) => {\n const fieldConfig: DbxFlexLayoutWrapperGroupFieldConfig = checkIsFieldFlexLayoutGroupFieldConfig(inputConfig)\n ? inputConfig\n : {\n field: inputConfig\n };\n\n const { field, size = defaultSize } = fieldConfig;\n const className = `dbx-flex-${size}`;\n\n return {\n ...field,\n className\n };\n })\n };\n}\n\n// TODO: Add addon wrapper/extension from this demo:\n// https://formly.dev/docs/examples/other/material-prefix-suffix\n\n/*\nexport interface NumberFieldAddon {\n readonly text?: Maybe<string>;\n readonly icon?: Maybe<string>;\n}\n \nreadonly addonLeft?: Maybe<NumberFieldAddon>;\nreadonly addonRight?: Maybe<NumberFieldAddon>;\n*/\n","import { type Observable, of } from 'rxjs';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig, type DescriptionFieldConfig, type MaterialFormFieldConfig } from '../../field';\nimport { type DbxDateTimeFieldProps, DbxDateTimeFieldTimeMode, type DbxDateTimePickerConfiguration } from './datetime.field.component';\nimport { flexLayoutWrapper } from '../../wrapper/wrapper';\nimport { type Maybe } from '@dereekb/util';\nimport { type DbxFixedDateRangeFieldProps } from './fixeddaterange.field.component';\n\nexport interface DateTimeFieldConfig extends LabeledFieldConfig, DescriptionFieldConfig, DbxDateTimeFieldProps, MaterialFormFieldConfig {}\nexport type TimeFieldConfig = Omit<DateTimeFieldConfig, 'showDate' | 'timeOnly'>;\n\nexport const TAKE_NEXT_UPCOMING_TIME_CONFIG_OBS: () => Observable<DbxDateTimePickerConfiguration> = () =>\n of({\n takeNextUpcomingTime: true,\n roundDownToMinute: true\n });\n\n/**\n * Same as DateTime field but with the Date input hidden by default.\n */\nexport function timeOnlyField(config: Partial<TimeFieldConfig> = {}): FormlyFieldConfig {\n return dateTimeField({\n ...config,\n timeMode: DbxDateTimeFieldTimeMode.REQUIRED,\n timeOnly: true\n });\n}\n\nexport function dateTimeField(config: Partial<DateTimeFieldConfig> = {}) {\n const { key = 'date', showClearButton, dateLabel, timeLabel, allDayLabel, atTimeLabel, timeDate, timezone, minuteStep, showTimezone, timeMode = DbxDateTimeFieldTimeMode.REQUIRED, valueMode, alwaysShowDateInput, autofillDateWhenTimeIsPicked, fullDayInUTC, fullDayFieldName, pickerConfig, getSyncFieldsObs, hideDatePicker, hideDateHint, timeOnly = false, presets, materialFormField } = config;\n\n const classGetter = 'dbx-mat-form-field-disable-underline dbx-mat-form-date-time-field-wrapper';\n const fieldConfig: FormlyFieldConfig<DbxDateTimeFieldProps> = formlyField({\n key,\n type: 'datetime',\n ...propsAndConfigForFieldConfig(config, {\n ...materialFormField,\n showClearButton,\n classGetter,\n dateLabel,\n timeLabel,\n allDayLabel,\n atTimeLabel,\n valueMode,\n timeOnly,\n presets,\n minuteStep,\n timeMode: timeOnly ? DbxDateTimeFieldTimeMode.REQUIRED : timeMode,\n alwaysShowDateInput,\n autofillDateWhenTimeIsPicked,\n timezone,\n timeDate,\n showTimezone,\n fullDayFieldName,\n fullDayInUTC,\n hideDatePicker,\n hideDateHint,\n pickerConfig,\n getSyncFieldsObs\n })\n });\n\n return fieldConfig;\n}\n\nexport type DateDateRangeFieldDateConfig = Omit<DateTimeFieldConfig, 'dateLabel' | 'timeOnly' | 'timeMode' | 'getSyncFieldsObs'>;\n\nexport interface DateDateRangeFieldConfig extends Pick<DateTimeFieldConfig, 'timeDate' | 'timezone' | 'showTimezone' | 'presets' | 'valueMode' | 'minuteStep'> {\n required?: boolean;\n start?: Partial<DateDateRangeFieldDateConfig>;\n end?: Partial<DateDateRangeFieldDateConfig>;\n}\n\nexport function dateRangeField(config: DateDateRangeFieldConfig = {}): FormlyFieldConfig {\n const { required: inputRequired, start, end, timeDate, timezone, showTimezone, presets, valueMode, minuteStep } = config;\n const required = inputRequired ?? start?.required ?? false;\n\n const startFieldKey = start?.key ?? 'start';\n const endFieldKey = end?.key ?? 'end';\n\n const startField = dateTimeField({\n dateLabel: 'Start',\n timeMode: DbxDateTimeFieldTimeMode.NONE,\n getSyncFieldsObs: () => of([{ syncWith: endFieldKey, syncType: 'after' }]),\n presets,\n allDayLabel: '',\n timeDate,\n timezone,\n showTimezone,\n valueMode,\n minuteStep,\n ...start,\n required,\n key: startFieldKey\n });\n\n const endField = dateTimeField({\n dateLabel: 'End',\n timeMode: DbxDateTimeFieldTimeMode.NONE,\n getSyncFieldsObs: () => of([{ syncWith: startFieldKey, syncType: 'before' }]),\n presets,\n allDayLabel: '',\n timeDate,\n timezone,\n showTimezone,\n valueMode,\n minuteStep,\n ...end,\n required,\n key: endFieldKey\n });\n\n return {\n key: undefined,\n fieldGroup: [flexLayoutWrapper([startField, endField], { relative: true, breakToColumn: true, breakpoint: 'large' })]\n };\n}\n\nexport type DateTimeRangeFieldTimeConfig = Omit<DateDateRangeFieldDateConfig, 'allDayLabel' | 'fullDayFieldName' | 'fullDayInUTC'>;\n\nexport interface DateDateTimeRangeFieldConfig extends Pick<DateTimeFieldConfig, 'timeDate' | 'timezone' | 'showTimezone' | 'presets' | 'valueMode' | 'minuteStep'> {\n required?: boolean;\n start?: Partial<DateTimeRangeFieldTimeConfig>;\n end?: Partial<DateTimeRangeFieldTimeConfig>;\n}\n\nexport function dateTimeRangeField(inputConfig: DateDateTimeRangeFieldConfig = {}): FormlyFieldConfig {\n const { required = false, start: inputStart, end: inputEnd, timezone, timeDate, showTimezone, presets, valueMode, minuteStep } = inputConfig;\n\n function dateTimeRangeFieldConfig(config: Maybe<Partial<DateTimeRangeFieldTimeConfig>>): Partial<DateTimeFieldConfig> {\n return {\n valueMode,\n minuteStep,\n ...config,\n required,\n timeMode: DbxDateTimeFieldTimeMode.REQUIRED,\n getSyncFieldsObs: undefined,\n timeOnly: true,\n hideDateHint: true\n };\n }\n\n const startKey = inputStart?.key ?? 'start';\n const endKey = inputEnd?.key ?? 'end';\n\n const start: Partial<DateTimeFieldConfig> = {\n label: 'Start Time',\n ...dateTimeRangeFieldConfig(inputStart),\n key: startKey\n };\n\n const end: Partial<DateTimeFieldConfig> = {\n label: 'End Time',\n ...dateTimeRangeFieldConfig(inputEnd),\n key: endKey\n };\n\n const config = {\n timezone,\n timeDate,\n showTimezone,\n presets,\n start,\n end\n };\n\n return dateRangeField(config);\n}\n\n// MARK: FixedDateRange\nexport interface FixedDateRangeFieldConfig extends LabeledFieldConfig, DescriptionFieldConfig, DbxFixedDateRangeFieldProps, MaterialFormFieldConfig {}\n\nexport function fixedDateRangeField(config: Partial<FixedDateRangeFieldConfig> = {}) {\n const { key = 'dateRange', dateRangeInput, pickerConfig, timezone, selectionMode, showTimezone, valueMode, fullDayInUTC, presets, showRangeInput, materialFormField } = config;\n\n const classGetter = 'dbx-mat-form-field-disable-underline dbx-form-fixed-date-range-field-wrapper';\n const fieldConfig: FormlyFieldConfig<DbxDateTimeFieldProps> = formlyField({\n key,\n type: 'fixeddaterange',\n ...propsAndConfigForFieldConfig(config, {\n ...materialFormField,\n classGetter,\n dateRangeInput,\n pickerConfig,\n valueMode,\n presets,\n timezone,\n selectionMode,\n showTimezone,\n fullDayInUTC,\n showRangeInput\n })\n });\n\n return fieldConfig;\n}\n","import { type DateTimePresetConfiguration } from './datetime';\n\nexport const DEFAULT_DATE_TIME_FIELD_MENU_PRESETS_PRESETS: DateTimePresetConfiguration[] = [\n {\n label: '6:00AM',\n timeString: '6:00AM'\n },\n {\n label: '8:00AM',\n timeString: '8:00AM'\n },\n {\n label: '10:00AM',\n timeString: '10:00AM'\n },\n {\n label: 'Noon',\n timeString: '12:00PM'\n },\n {\n label: '2:00PM',\n timeString: '2:00PM'\n },\n {\n label: '5:00PM',\n timeString: '5:00PM'\n },\n {\n label: 'Midnight',\n timeString: '12:00AM'\n }\n];\n","import { type AbstractControl, type ValidationErrors, type ValidatorFn } from '@angular/forms';\n\nexport function isTruthy(): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const value: boolean | undefined = control.value;\n\n if (!value) {\n return {\n isTruthy: value\n };\n }\n\n return {};\n };\n}\n","import { Validators, type ValidatorFn } from '@angular/forms';\nimport { HAS_WEBSITE_DOMAIN_NAME_REGEX } from '@dereekb/util';\n\nexport function isDomain(): ValidatorFn {\n return Validators.pattern(HAS_WEBSITE_DOMAIN_NAME_REGEX);\n}\n","import { type AbstractControl, type ValidatorFn } from '@angular/forms';\nimport { type KeyValueTupleFilter, allObjectsAreEqual, type EqualityComparatorFunction, KeyValueTypleValueFilter, type ObjectMap, valuesFromPOJO } from '@dereekb/util';\n\nexport const FIELD_VALUES_ARE_EQUAL_VALIDATION_KEY = 'fieldValuesAreEqual';\n\nexport interface FieldValuesAreEqualValidatorConfig<T extends object = object> {\n /**\n * Keys of the value to match on.\n *\n * If none are defined, then all fields from the control are matched.\n */\n keysFilter?: (keyof T)[];\n\n /**\n * Full filter to use, if defined.\n */\n valuesFilter?: KeyValueTupleFilter<T>;\n\n /**\n * Optional equivalence comparator.\n */\n isEqual?: EqualityComparatorFunction<T>;\n\n /**\n * Custom message for this validator.\n */\n message?: string;\n}\n\n/**\n * Validator for validating all values within an object.\n *\n * This is useful for validating a control group where two or more values are expected to be the same, such as a password and a password verification field.\n *\n * @param config\n * @returns\n */\nexport function fieldValuesAreEqualValidator<T extends object = object>(config: FieldValuesAreEqualValidatorConfig<T> = {}): ValidatorFn {\n const { keysFilter, valuesFilter: inputValuesFilter, isEqual = (a, b) => a === b, message = 'Field values are not equal.' } = config;\n\n const valuesFilter: KeyValueTupleFilter<T, keyof T> = inputValuesFilter ?? {\n valueFilter: KeyValueTypleValueFilter.NONE, // keep all values. Null/undefined should be processed.\n keysFilter\n };\n\n return (control: AbstractControl) => {\n const object: ObjectMap<T> = control.value;\n const values: T[] = valuesFromPOJO(object as T, valuesFilter);\n const isValid = allObjectsAreEqual(values, isEqual);\n\n if (isValid) {\n return null;\n } else {\n return {\n [FIELD_VALUES_ARE_EQUAL_VALIDATION_KEY]: { message }\n };\n }\n };\n}\n","import { type AbstractControl, type ValidationErrors, type ValidatorFn, Validators } from '@angular/forms';\nimport { isNumberDivisibleBy, nearestDivisibleValues } from '@dereekb/util';\n\n/**\n * Merges the use of the min and max validator.\n *\n * @param min\n * @param max\n * @returns\n */\nexport function isInRange(min: number = Number.MIN_SAFE_INTEGER, max: number = Number.MAX_SAFE_INTEGER): ValidatorFn {\n const minFn = Validators.min(min);\n const maxFn = Validators.max(max);\n\n return (control: AbstractControl): ValidationErrors | null => {\n const minError = minFn(control);\n const maxError = maxFn(control);\n\n let errors: ValidationErrors | null = null;\n\n if (minError || maxError) {\n errors = {\n ...minError,\n ...maxError\n };\n }\n\n return errors;\n };\n}\n\nexport const IS_DIVISIBLE_BY_VALIDATION_KEY = 'isDivisibleBy';\n\nexport interface IsDivisibleByError {\n value: number;\n nearest: number;\n divisor: number;\n message: string;\n}\n\n/**\n * Angular Form ValidationFn for checking isDivisibleBy the input divisor.\n *\n * @param divisor\n * @returns\n */\nexport function isDivisibleBy(divisor: number): ValidatorFn {\n if (divisor === 0) {\n throw new Error('Divisior must be greater than zero.');\n }\n\n return (control: AbstractControl): ValidationErrors | null => {\n const value: number | undefined = control.value;\n\n if (value != null && !isNumberDivisibleBy(value, divisor)) {\n const nearest = nearestDivisibleValues(value, divisor);\n return {\n [IS_DIVISIBLE_BY_VALIDATION_KEY]: {\n value,\n divisor,\n nearest,\n message: `Number must by divisible by ${divisor}. The two nearest valid values are ${nearest.nearestFloor} and ${nearest.nearestCeil}.`\n }\n };\n }\n\n return {};\n };\n}\n","import { first, switchMap, map, type Observable, of, catchError } from 'rxjs';\nimport { type AbstractControl, type AsyncValidatorFn } from '@angular/forms';\nimport { asyncPusherCache } from '@dereekb/rxjs';\n\nexport const FIELD_VALUE_IS_AVAILABLE_VALIDATION_KEY = 'fieldValueIsAvailable';\nexport const FIELD_VALUE_IS_AVAILABLE_ERROR_VALIDATION_KEY = 'fieldValueIsAvailableError';\n\nexport type FieldValueIsAvailableValidatorFunction<T> = (value: T) => Observable<boolean>;\n\nexport interface FieldValueIsAvailableValidatorConfig<T> {\n /**\n * How long to wait in between value changes.\n */\n throttle?: number;\n\n /**\n * Returns an observable that checks whether or not the value is currently available.\n *\n * @param value\n */\n readonly checkValueIsAvailable: FieldValueIsAvailableValidatorFunction<T>;\n\n /**\n * Custom message for this validator.\n */\n message?: string;\n}\n\n/**\n * Validator for validating all values within an object.\n *\n * This is useful for validating a control group where two or more values are expected to be the same, such as a password and a password verification field.\n *\n * @param config\n * @returns\n */\nexport function fieldValueIsAvailableValidator<T>(config: FieldValueIsAvailableValidatorConfig<T>): AsyncValidatorFn {\n const { throttle = 400, checkValueIsAvailable, message = 'This value is not available.' } = config;\n\n const pusher = asyncPusherCache<T>({\n throttle\n });\n\n return (control: AbstractControl) =>\n pusher(control.valueChanges)(control.value as T).pipe(\n switchMap((x) => checkValueIsAvailable(x)),\n map((isAvailable) => {\n if (isAvailable) {\n return null;\n } else {\n return {\n [FIELD_VALUE_IS_AVAILABLE_VALIDATION_KEY]: { message }\n };\n }\n }),\n catchError(() =>\n of({\n [FIELD_VALUE_IS_AVAILABLE_ERROR_VALIDATION_KEY]: { message: 'An error occured.' }\n })\n ),\n first()\n );\n}\n","import { type AbstractControl, type ValidationErrors, type ValidatorFn } from '@angular/forms';\nimport { e164PhoneNumberExtensionPair, isE164PhoneNumber as isE164PhoneNumberFunction, isValidPhoneExtensionNumber } from '@dereekb/util';\nimport { INVALID_PHONE_NUMBER_EXTENSION_MESSAGE, INVALID_PHONE_NUMBER_MESSAGE } from '../formly/config/validation';\n\n/**\n * Angular Form ValidationFn for checking isE164PhoneNumber the input divisor.\n *\n * @param divisor\n * @returns\n */\nexport function isE164PhoneNumber(allowExtension: boolean): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const value: string | undefined = control.value;\n\n if (value != null && !isE164PhoneNumberFunction(value, allowExtension)) {\n return {\n [INVALID_PHONE_NUMBER_MESSAGE.name]: true\n };\n }\n\n return {};\n };\n}\n\n/**\n * Angular Form ValidationFn for checking the input is a valid phone extension. Empty values return true.\n *\n * @param divisor\n * @returns\n */\nexport function isPhoneExtension(): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const value: string | number | undefined = control.value;\n\n if (value != null) {\n const asString = value.toString();\n\n if (asString.length > 0 && !isValidPhoneExtensionNumber(asString)) {\n return {\n [INVALID_PHONE_NUMBER_EXTENSION_MESSAGE.name]: true\n };\n }\n }\n\n return {};\n };\n}\n\nexport function isE164PhoneNumberWithValidExtension(): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const value: string | undefined = control.value;\n\n if (value != null) {\n if (isE164PhoneNumberFunction(value, true)) {\n const pair = e164PhoneNumberExtensionPair(value);\n\n if (pair.extension && !isValidPhoneExtensionNumber(pair.extension)) {\n return {\n [INVALID_PHONE_NUMBER_EXTENSION_MESSAGE.name]: true\n };\n }\n } else {\n return {\n [INVALID_PHONE_NUMBER_MESSAGE.name]: true\n };\n }\n }\n\n return {};\n };\n}\n","import { type AbstractControl, type ValidationErrors, type ValidatorFn } from '@angular/forms';\nimport { type ArrayOrValue, type Maybe, type WebsiteDomain, type WebsiteUrlDetails, asArray, isWebsiteUrlWithPrefix, websiteUrlDetails } from '@dereekb/util';\n\nexport const IS_NOT_WEBSITE_URL_VALIDATION_KEY = 'isNotWebsiteUrl';\nexport const IS_NOT_WEBSITE_URL_WITH_PREFIX_VALIDATION_KEY = 'isNotWebsiteUrlWithPrefix';\nexport const IS_NOT_WEBSITE_URL_WITH_EXPECTED_DOMAIN_VALIDATION_KEY = 'isNotWebsiteUrlWithExpectedDomain';\n\nexport interface IsNotWebsiteUrlErrorData {\n readonly value: string;\n readonly isPrefixRequired: boolean;\n readonly message: string;\n}\n\nexport interface IsWebsiteUrlValidatorConfig {\n /**\n * Whether or not to require an http/https prefix.\n *\n * Defaults to true.\n */\n readonly requirePrefix?: Maybe<boolean>;\n /**\n * Valid domains to accept.\n *\n * Defaults to undefined.\n */\n readonly validDomains?: Maybe<ArrayOrValue<WebsiteDomain>>;\n}\n\n/**\n * Angular Form ValidationFn for checking isDivisibleBy the input divisor.\n *\n * @param divisor\n * @returns\n */\nexport function isWebsiteUrlValidator(config?: IsWebsiteUrlValidatorConfig): ValidatorFn {\n const { requirePrefix, validDomains: inputValidDomains } = config ?? {};\n const isPrefixRequired = requirePrefix ?? true;\n const validDomains = asArray(inputValidDomains);\n const validDomainsSet = new Set(validDomains);\n const validateDomains = validDomainsSet.size > 0;\n\n const validateWebsiteValue: (details: WebsiteUrlDetails) => ValidationErrors | null = isPrefixRequired\n ? (details: WebsiteUrlDetails) => {\n return isWebsiteUrlWithPrefix(details.input)\n ? null\n : {\n [IS_NOT_WEBSITE_URL_WITH_PREFIX_VALIDATION_KEY]: {\n value: details.input,\n isPrefixRequired,\n message: `Value is not a website url with an http/https prefix.`\n }\n };\n }\n : (details: WebsiteUrlDetails) => {\n return details.isWebsiteUrl\n ? null\n : {\n [IS_NOT_WEBSITE_URL_VALIDATION_KEY]: {\n value: details.input,\n isPrefixRequired,\n message: `Value is not a valid website url.`\n }\n };\n };\n\n const validateWebsiteDomain: (details: WebsiteUrlDetails) => ValidationErrors | null = (details: WebsiteUrlDetails) => {\n let pass = validDomainsSet.size === 0 ? true : false;\n\n if (details.hasWebsiteDomain && validateDomains) {\n pass = validDomainsSet.has(details.domain);\n }\n\n return pass\n ? null\n : {\n [IS_NOT_WEBSITE_URL_WITH_EXPECTED_DOMAIN_VALIDATION_KEY]: {\n value: details.input,\n isPrefixRequired,\n validDomains,\n message: `Value is not a website url with one of the expected domains: ${validDomains.join(', ')}.`\n }\n };\n };\n\n return (control: AbstractControl): ValidationErrors | null => {\n const value: string | undefined = control.value;\n\n if (value != null) {\n const details = websiteUrlDetails(value);\n\n return {\n ...validateWebsiteValue(details),\n ...validateWebsiteDomain(details)\n };\n }\n\n return {};\n };\n}\n","import { type ValidatorFn } from '@angular/forms';\nimport { concatArrays, type TransformNumberFunctionConfigRef, transformNumberFunction, mapMaybeFunction, DOLLAR_AMOUNT_PRECISION } from '@dereekb/util';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { isDivisibleBy } from '../../../../validator';\nimport { type AttributesFieldConfig, type LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig, type DescriptionFieldConfig, validatorsForFieldConfig, type FieldConfigParsersRef, type FormlyValueParser, type MaterialFormFieldConfig } from '../../field';\n\n// MARK: Number Field\nexport interface NumberFieldNumberConfig {\n readonly min?: number;\n readonly max?: number;\n readonly step?: number;\n readonly enforceStep?: boolean;\n}\n\nexport type NumberFieldInputType = 'number';\n\nexport interface NumberFieldConfig extends LabeledFieldConfig, DescriptionFieldConfig, NumberFieldNumberConfig, AttributesFieldConfig, Partial<TransformNumberFunctionConfigRef>, MaterialFormFieldConfig {\n readonly inputType?: NumberFieldInputType;\n}\n\nexport function numberFieldTransformParser(config: Partial<FieldConfigParsersRef> & Partial<TransformNumberFunctionConfigRef>) {\n const { parsers: inputParsers, transform } = config;\n let parsers: FormlyValueParser[] | undefined;\n\n if (inputParsers) {\n parsers = inputParsers;\n }\n\n if (transform) {\n const transformParser: FormlyValueParser = mapMaybeFunction(transformNumberFunction(transform));\n parsers = concatArrays([transformParser], parsers);\n }\n\n return parsers;\n}\n\nexport function numberField(config: NumberFieldConfig): FormlyFieldConfig {\n const { key, min, max, step, enforceStep, inputType: type = 'number', materialFormField } = config;\n const parsers = numberFieldTransformParser(config);\n\n const validators: ValidatorFn[] = [];\n\n if (step && enforceStep) {\n validators.push(isDivisibleBy(step));\n }\n\n return formlyField({\n key,\n type: 'input',\n ...propsAndConfigForFieldConfig(config, {\n ...materialFormField,\n type,\n min,\n max,\n step\n }),\n ...validatorsForFieldConfig({\n validators\n }),\n parsers\n });\n}\n\n// MARK: Number Slider\nexport interface NumberSliderFieldConfig extends NumberFieldConfig {\n /**\n * Max value. Required for the slider.\n */\n readonly max: number;\n /**\n * Whether or not to show the thumb label while sliding. Defaults to true.\n */\n readonly thumbLabel?: boolean;\n /**\n * Whether or not to invert the selection line.\n */\n readonly invertSelectionColoring?: boolean;\n /**\n * Tick interval. If not provided defaults to the step value, if provided. If false, the ticks are disabled.\n *\n * The tick interval is the number of \"steps\" to show between ticks.\n *\n * For example, a tick interval of 5 show a tick every 5 steps. If steps are 10, it will show a tick at every number divisible by 50 (5 * 10).\n */\n readonly tickInterval?: false | number;\n /**\n * Custom display with function for the thumbLabel.\n */\n readonly displayWith?: (value: number) => string;\n}\n\nexport function numberSliderField(config: NumberSliderFieldConfig): FormlyFieldConfig {\n const { key, min, max, step, enforceStep, inputType: type = 'number', materialFormField, thumbLabel: inputThumbLabel, tickInterval: inputTickInterval, invertSelectionColoring: invertedSelectionColoring = false, displayWith } = config;\n const parsers = numberFieldTransformParser(config);\n\n const validators: ValidatorFn[] = [];\n let tickIntervalFromSteps: number | undefined;\n\n if (step) {\n tickIntervalFromSteps = 1;\n\n if (enforceStep) {\n validators.push(isDivisibleBy(step));\n }\n }\n\n const tickInterval: number | undefined = inputTickInterval === false ? undefined : (inputTickInterval ?? tickIntervalFromSteps ?? undefined);\n return formlyField({\n key,\n type: 'slider',\n ...propsAndConfigForFieldConfig(config, {\n ...materialFormField,\n type,\n min,\n max,\n step,\n inverted: invertedSelectionColoring,\n thumbLabel: inputThumbLabel ?? true,\n showTickMarks: Boolean(tickInterval),\n tickInterval,\n displayWith\n }),\n ...validatorsForFieldConfig({\n validators\n }),\n parsers\n });\n}\n\n// MARK: Dollar Amount Field\nexport type DollarAmountFieldConfig = Omit<NumberFieldConfig, 'roundToStep' | 'precision'>;\n\nexport function dollarAmountField(config: DollarAmountFieldConfig) {\n return numberField({ ...config, transform: { ...config.transform, precision: config.transform?.precision ?? DOLLAR_AMOUNT_PRECISION } }); // TODO: Add wrapper addon, addonLeft: { text: '$' }\n}\n","import { FormlyMaterialModule } from '@ngx-formly/material';\nimport { FormlyMatSliderModule } from '@ngx-formly/material/slider';\nimport { NgModule } from '@angular/core';\n\nconst importsAndExports = [FormlyMaterialModule, FormlyMatSliderModule];\n\n@NgModule({\n imports: importsAndExports,\n exports: importsAndExports\n})\nexport class DbxFormFormlyNumberFieldModule {}\n","import { Component, OnInit, OnDestroy, ChangeDetectionStrategy } from '@angular/core';\nimport { FieldType } from '@ngx-formly/material'; // extend FieldType from Material, not core!\nimport { FieldTypeConfig, FormlyFieldProps } from '@ngx-formly/core';\nimport { isPhoneExtension } from '../../../../validator/phone';\nimport { E164PhoneNumber, E164PhoneNumberExtensionPair, Maybe, e164PhoneNumberExtensionPair, e164PhoneNumberFromE164PhoneNumberExtensionPair, objectHasNoKeys } from '@dereekb/util';\nimport { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { SubscriptionObject } from '@dereekb/rxjs';\nimport { combineLatest, distinctUntilChanged, map, startWith } from 'rxjs';\nimport { CommonModule } from '@angular/common';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\nimport { FormlyMatFormFieldModule } from '@ngx-formly/material/form-field';\nimport { NgxMatIntlTelInputComponent } from 'ngx-mat-intl-tel-input';\n\nexport interface InternationalPhoneFormlyFieldProps extends FormlyFieldProps {\n readonly preferredCountries?: Maybe<string[]>;\n readonly onlyCountries?: Maybe<string[]>;\n /**\n * Whether or not to allow adding an extension. False by default.\n */\n readonly allowExtension?: boolean;\n}\n\nexport const DEFAULT_PREFERRED_COUNTRIES = ['us'];\n\n@Component({\n templateUrl: 'phone.field.component.html',\n imports: [CommonModule, MatInputModule, MatFormFieldModule, FormsModule, ReactiveFormsModule, MatIconModule, FlexLayoutModule, FormlyMatFormFieldModule, NgxMatIntlTelInputComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxPhoneFieldComponent extends FieldType<FieldTypeConfig<InternationalPhoneFormlyFieldProps>> implements OnInit, OnDestroy {\n readonly inputSync = new SubscriptionObject();\n readonly outputSync = new SubscriptionObject();\n readonly extensionErrorSync = new SubscriptionObject();\n readonly phoneErrorSync = new SubscriptionObject();\n\n readonly phoneCtrl = new FormControl<string>('');\n readonly extensionCtrl = new FormControl<string>('', {\n validators: [isPhoneExtension()]\n });\n\n readonly inputFormGroup = new FormGroup({\n phone: this.phoneCtrl,\n extension: this.extensionCtrl\n });\n\n get preferredCountries(): string[] {\n return this.props.preferredCountries ?? DEFAULT_PREFERRED_COUNTRIES;\n }\n\n get onlyCountries(): string[] {\n return this.props.onlyCountries ?? [];\n }\n\n get allowExtension(): boolean {\n return this.props.allowExtension ?? false;\n }\n\n ngOnInit(): void {\n this.inputSync.subscription = this.formControl.valueChanges.pipe(startWith(this.formControl.value), distinctUntilChanged()).subscribe((inputValue) => {\n let phone: Maybe<string>;\n let extension: Maybe<string>;\n\n if (inputValue) {\n const pair = e164PhoneNumberExtensionPair(inputValue);\n phone = pair.number;\n extension = pair.extension;\n }\n\n // do not clear/reset if phone is undefined and the phone value is currently null\n if (phone || (!phone && this.phoneCtrl.value !== null)) {\n this.phoneCtrl.setValue(phone || '');\n this.extensionCtrl.setValue(extension || '');\n }\n });\n\n this.outputSync.subscription = combineLatest([this.phoneCtrl.valueChanges.pipe(distinctUntilChanged()), this.extensionCtrl.valueChanges.pipe(startWith(this.extensionCtrl.value), distinctUntilChanged())])\n .pipe(\n map(([phone, extension]) => {\n if (phone) {\n if (this.allowExtension) {\n return e164PhoneNumberFromE164PhoneNumberExtensionPair({\n number: phone as E164PhoneNumber,\n extension\n } as E164PhoneNumberExtensionPair);\n } else {\n return phone;\n }\n } else {\n return undefined;\n }\n }),\n distinctUntilChanged()\n )\n .subscribe((x) => {\n this.formControl.setValue(x);\n });\n\n /*\n * The phoneCtrl's errors are being used to drive the error matcher for this. Sync any invalid states with errors to phoneCtrl.\n * PhoneCtrl updates when the input is updated so it works.\n */\n this.extensionErrorSync.subscription = this.extensionCtrl.statusChanges.subscribe((x) => {\n if (x === 'INVALID') {\n this.phoneCtrl.setErrors(this.formControl.errors, { emitEvent: true });\n }\n });\n\n // sync any phoneCtrl errors with the errors of the form control.\n this.phoneErrorSync.subscription = this.inputFormGroup.statusChanges.subscribe((x) => {\n const errors = { ...this.phoneCtrl.errors, ...this.extensionCtrl.errors };\n this.formControl.setErrors(objectHasNoKeys(errors) ? null : errors, { emitEvent: true });\n });\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this.inputSync.destroy();\n this.outputSync.destroy();\n this.extensionErrorSync.destroy();\n this.phoneErrorSync.destroy();\n }\n}\n","<div class=\"dbx-form-phone-field\" [formGroup]=\"inputFormGroup\">\n <ngx-mat-intl-tel-input class=\"dbx-form-phone-field-phone-content\" [required]=\"required\" [preferredCountries]=\"preferredCountries\" [enablePlaceholder]=\"false\" name=\"phone\" [formControl]=\"phoneCtrl\"></ngx-mat-intl-tel-input>\n @if (allowExtension) {\n <div class=\"dbx-form-phone-field-extension-content\">\n <span class=\"dbx-hint dbx-button-spacer\">Ext.</span>\n <input class=\"dbx-form-phone-field-extension-input\" placeholder=\"123\" minlength=\"0\" maxlength=\"6\" #extensionInput [formControl]=\"extensionCtrl\" />\n </div>\n }\n</div>\n","import { NgModule } from '@angular/core';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxPhoneFieldComponent } from './phone.field.component';\n\nconst importsAndExports = [DbxPhoneFieldComponent];\n\n@NgModule({\n imports: [\n ...importsAndExports,\n FormlyModule.forChild({\n types: [{ name: 'intphone', component: DbxPhoneFieldComponent, wrappers: ['form-field'] }]\n })\n ],\n exports: importsAndExports\n})\nexport class DbxFormFormlyPhoneFieldModule {}\n","import { concatArrays, mapMaybeFunction, transformStringFunction, type TransformStringFunctionConfig, type TransformStringFunctionConfigRef } from '@dereekb/util';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type AttributesFieldConfig, type LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig, type DescriptionFieldConfig, type FormlyValueParser, type FieldConfigParsersRef, type MaterialFormFieldConfig } from '../../field';\n\nexport interface TextFieldLengthConfig {\n minLength?: number;\n maxLength?: number;\n}\n\nexport interface TextFieldPatternConfig {\n pattern?: string | RegExp;\n}\n\nexport type TextFieldInputType = 'text' | 'password' | 'email';\n\nexport interface TextFieldConfig extends LabeledFieldConfig, DescriptionFieldConfig, TextFieldPatternConfig, TextFieldLengthConfig, AttributesFieldConfig, Partial<TransformStringFunctionConfigRef>, MaterialFormFieldConfig {\n inputType?: TextFieldInputType;\n transform?: TransformStringFunctionConfig;\n}\n\nexport function textFieldTransformParser(config: Partial<FieldConfigParsersRef> & Partial<TransformStringFunctionConfigRef>) {\n const { parsers: inputParsers, transform } = config;\n let parsers: FormlyValueParser[] | undefined;\n\n if (inputParsers) {\n parsers = inputParsers;\n }\n\n if (transform) {\n const transformParser: FormlyValueParser = mapMaybeFunction(transformStringFunction(transform));\n parsers = concatArrays([transformParser], parsers);\n }\n\n return parsers;\n}\n\nexport function textField(config: TextFieldConfig): FormlyFieldConfig {\n const { transform, key, pattern, minLength, maxLength, inputType: type = 'text', materialFormField } = config;\n const parsers = textFieldTransformParser(config);\n\n return formlyField({\n key,\n type: 'input',\n ...propsAndConfigForFieldConfig(config, {\n ...materialFormField,\n type,\n minLength,\n maxLength,\n pattern\n }),\n parsers\n });\n}\n\nexport interface TextAreaFieldConfig extends LabeledFieldConfig, DescriptionFieldConfig, TextFieldPatternConfig, TextFieldLengthConfig, AttributesFieldConfig, Partial<TransformStringFunctionConfigRef>, MaterialFormFieldConfig {\n rows?: number;\n}\n\nexport function textAreaField(config: TextAreaFieldConfig): FormlyFieldConfig {\n const { key, rows = 3, pattern, minLength, maxLength, materialFormField } = config;\n const parsers = textFieldTransformParser(config);\n\n return formlyField({\n key,\n type: 'textarea',\n ...propsAndConfigForFieldConfig(config, {\n ...materialFormField,\n rows,\n minLength,\n maxLength,\n pattern\n }),\n parsers\n });\n}\n","import { type DbxFormSectionConfig } from '../../wrapper/section.wrapper.component';\nimport { sectionWrapper, flexLayoutWrapper } from '../../wrapper/wrapper';\nimport { textField, type TextFieldConfig } from '../text/text.field';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig, validatorsForFieldConfig } from '../../field';\nimport { type InternationalPhoneFormlyFieldProps } from './phone.field.component';\nimport { repeatArrayField, type RepeatArrayFieldConfig } from '../array/array.field';\nimport { isE164PhoneNumber } from '../../../../validator/phone';\n\nexport interface InternationalPhoneFieldConfig extends LabeledFieldConfig, InternationalPhoneFormlyFieldProps {}\n\nexport function phoneField(config: Partial<InternationalPhoneFieldConfig> = {}): FormlyFieldConfig<InternationalPhoneFormlyFieldProps> {\n const { key = 'phone', label = 'Phone Number', preferredCountries, onlyCountries, allowExtension: inputAllowExtension } = config;\n const allowExtension = inputAllowExtension ?? false;\n\n const fieldConfig = formlyField({\n key,\n type: 'intphone',\n ...propsAndConfigForFieldConfig(config, {\n label,\n allowExtension,\n preferredCountries,\n onlyCountries\n }),\n ...validatorsForFieldConfig({\n validators: [isE164PhoneNumber(allowExtension)]\n })\n });\n\n return fieldConfig;\n}\n\nexport interface WrappedPhoneAndLabelFieldConfig {\n phoneField?: Partial<InternationalPhoneFieldConfig>;\n labelField?: TextFieldConfig;\n}\n\n/**\n * Puts a phone and\n * @param param0\n * @returns\n */\nexport function wrappedPhoneAndLabelField({ phoneField: phone, labelField: label }: WrappedPhoneAndLabelFieldConfig = {}): FormlyFieldConfig {\n return flexLayoutWrapper(\n [\n {\n field: phoneField(phone),\n size: 2\n },\n {\n field: textField({\n key: 'label',\n label: 'Label',\n autocomplete: 'phone-label',\n ...label\n }),\n size: 4\n }\n ],\n { relative: true }\n );\n}\n\nexport interface PhoneAndLabelFieldSectionConfig extends DbxFormSectionConfig, WrappedPhoneAndLabelFieldConfig {\n key?: string;\n}\n\nexport function phoneAndLabelSectionField({ key, header = 'Phone Number', hint, phoneField, labelField }: PhoneAndLabelFieldSectionConfig = {}): FormlyFieldConfig {\n return sectionWrapper(\n {\n key,\n fieldGroup: [wrappedPhoneAndLabelField({ phoneField, labelField })]\n },\n {\n header,\n hint\n }\n );\n}\n\nexport interface PhoneListFieldConfig extends Omit<RepeatArrayFieldConfig, 'repeatFieldGroup'> {\n phoneAndLabel?: WrappedPhoneAndLabelFieldConfig;\n repeatFieldGroup?: FormlyFieldConfig[];\n}\n\nexport function phoneListField(repeatConfig: Partial<PhoneListFieldConfig> = {}): FormlyFieldConfig {\n const { key = 'phones', label = 'Phone Numbers', addText = 'Add Phone Number', removeText = 'Remove Phone Number', repeatFieldGroup, phoneAndLabel } = repeatConfig;\n\n return repeatArrayField({\n ...repeatConfig,\n key,\n label,\n addText,\n removeText,\n repeatFieldGroup: repeatFieldGroup ?? [wrappedPhoneAndLabelField(phoneAndLabel)]\n });\n}\n","import { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { Validators, type AbstractControl } from '@angular/forms';\nimport { type TextFieldConfig, textField } from './text.field';\nimport { type LabeledFieldConfig, type DescriptionFieldConfig, validatorsForFieldConfig } from '../../field';\nimport { LAT_LNG_PATTERN, US_STATE_CODE_STRING_REGEX, ZIP_CODE_STRING_REGEX } from '@dereekb/util';\nimport { ADDRESS_CITY_MAX_LENGTH, ADDRESS_STATE_CODE_MAX_LENGTH, ADDRESS_STATE_MAX_LENGTH, ADDRESS_COUNTRY_MAX_LENGTH, ADDRESS_ZIP_MAX_LENGTH } from '@dereekb/model';\n\nexport const PHONE_LABEL_MAX_LENGTH = 100;\n\nexport const LABEL_STRING_MAX_LENGTH = 100;\nexport const SEARCH_STRING_MAX_LENGTH = 100;\n\n// MARK: Name Field\nexport function nameField(config: Partial<TextFieldConfig> = {}): FormlyFieldConfig {\n const { key = 'name', label = 'Name', placeholder = 'John Doe', required = false, minLength, maxLength, attributes } = config;\n\n return textField({\n ...config,\n key,\n label,\n placeholder,\n required,\n minLength,\n maxLength,\n attributes\n });\n}\n\n// MARK: Email Field\nexport interface EmailFieldConfig extends Partial<LabeledFieldConfig>, DescriptionFieldConfig {\n readonly rows?: number;\n}\n\nexport function emailField(config: EmailFieldConfig = {}): FormlyFieldConfig {\n const { key = 'email', label = 'Email Address', placeholder = 'you@example.com' } = config;\n const emailFieldConfig = textField({\n ...config,\n key,\n label,\n placeholder,\n inputType: 'email'\n });\n\n emailFieldConfig.validators = {\n email: {\n expression: (c: AbstractControl) => !Validators.email(c),\n message: () => `Not a valid email address.`\n }\n };\n\n return emailFieldConfig;\n}\n\n// MARK: City Field\nexport type CityFieldConfig = Partial<TextFieldConfig>;\n\nexport function cityField(config: CityFieldConfig = {}): FormlyFieldConfig {\n const { key = 'city', placeholder = '', label = 'City', autocomplete = 'city', maxLength = ADDRESS_CITY_MAX_LENGTH, required = false } = config;\n return textField({\n ...config,\n key,\n placeholder,\n label,\n autocomplete,\n required,\n maxLength\n });\n}\n\n// MARK: State Field\nexport interface StateFieldConfig extends Partial<TextFieldConfig> {\n readonly asCode?: boolean;\n}\n\nexport function stateField(config: StateFieldConfig = {}): FormlyFieldConfig {\n const { asCode = false, pattern = asCode ? US_STATE_CODE_STRING_REGEX : undefined, key = 'state', placeholder = '', label = 'State', autocomplete = 'state', maxLength = asCode ? ADDRESS_STATE_CODE_MAX_LENGTH : ADDRESS_STATE_MAX_LENGTH, transform, required = false } = config;\n return textField({\n ...config,\n key,\n placeholder,\n label,\n pattern,\n autocomplete,\n required,\n maxLength,\n transform: {\n ...transform,\n toUppercase: asCode || transform?.toUppercase\n }\n });\n}\n\n// MARK: Country Field\nexport type CountryFieldConfig = Partial<TextFieldConfig>;\n\nexport function countryField(config: CountryFieldConfig = {}): FormlyFieldConfig {\n const { key = 'country', placeholder = '', label = 'Country', autocomplete = 'country', maxLength = ADDRESS_COUNTRY_MAX_LENGTH, required = false } = config;\n return textField({\n ...config,\n key,\n placeholder,\n label,\n autocomplete,\n required,\n maxLength\n });\n}\n\n// MARK: Zip Code Field\nexport type ZipCodeFieldConfig = Partial<TextFieldConfig>;\n\nexport function zipCodeField(config: ZipCodeFieldConfig = {}): FormlyFieldConfig {\n const { key = 'zip', placeholder = '', label = 'Zip Code', autocomplete = 'postal-code', pattern = ZIP_CODE_STRING_REGEX, maxLength = ADDRESS_ZIP_MAX_LENGTH, required = false } = config;\n return textField({\n ...config,\n key,\n placeholder,\n label,\n pattern,\n autocomplete,\n required,\n maxLength\n });\n}\n\n// MARK: LatLng Text Field\nexport const DEFAULT_LAT_LNG_TEXT_FIELD_PLACEHOLDER = '12.345,-67.8910';\nexport const DEFAULT_LAT_LNG_TEXT_FIELD_PATTERN_MESSAGE = `Invalid/unknown coordinates`;\n\nexport function latLngTextField({ key = 'latLng' }: Partial<TextFieldConfig> = {}): FormlyFieldConfig {\n const field = {\n ...textField({\n key,\n label: 'Coordinates',\n placeholder: DEFAULT_LAT_LNG_TEXT_FIELD_PLACEHOLDER,\n pattern: LAT_LNG_PATTERN,\n autocomplete: false\n }),\n ...validatorsForFieldConfig({\n messages: {\n pattern: DEFAULT_LAT_LNG_TEXT_FIELD_PATTERN_MESSAGE\n }\n })\n };\n\n return field;\n}\n","import { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { textField, type TextFieldConfig } from './text.field';\nimport { cityField, type CityFieldConfig, countryField, type CountryFieldConfig, stateField, type StateFieldConfig, zipCodeField, type ZipCodeFieldConfig } from './text.additional.field';\nimport { flexLayoutWrapper, sectionWrapper } from '../../wrapper/wrapper';\nimport { type FieldConfig } from '../../field';\nimport { repeatArrayField } from '../array/array.field';\nimport { type DbxFormSectionConfig } from '../../wrapper/section.wrapper.component';\nimport { ADDRESS_LINE_MAX_LENGTH } from '@dereekb/model';\n\n// MARK: Address Config\nexport interface AddressFormlyFieldsConfig {\n readonly line1Field?: CityFieldConfig;\n readonly line2Field?: CityFieldConfig;\n readonly cityField?: CityFieldConfig;\n readonly stateField?: StateFieldConfig;\n readonly zipCodeField?: ZipCodeFieldConfig;\n readonly countryField?: CountryFieldConfig;\n /**\n * Whether or not to make required fields required.\n *\n * True by default.\n */\n readonly required?: boolean;\n /**\n * Whether or not to include the second address line.\n *\n * True by default.\n */\n readonly includeLine2?: boolean;\n /**\n * Whether or not to include the country.\n *\n * True by default.\n */\n readonly includeCountry?: boolean;\n}\n\nexport interface AddressLineFieldConfig extends Partial<TextFieldConfig> {\n readonly line?: 0 | 1 | 2;\n}\n\nexport function addressLineField(config: AddressLineFieldConfig = {}): FormlyFieldConfig {\n const { line = 1 } = config;\n const lineCode = Math.max(1, line); // minimum of line 1\n\n const { key = `line${lineCode}`, placeholder = '', label = line ? `Line ${line}` : 'Street', autocomplete = `address-line${lineCode}`, maxLength = ADDRESS_LINE_MAX_LENGTH, required = false } = config;\n return textField({\n ...config,\n key,\n placeholder,\n label,\n autocomplete,\n required,\n maxLength\n });\n}\n\nexport function addressFormlyFields(config: AddressFormlyFieldsConfig = {}): FormlyFieldConfig[] {\n const { required = true, includeLine2 = true, includeCountry = true } = config;\n\n const singleLineFields = [\n {\n field: cityField({ required, ...config.cityField })\n },\n {\n field: stateField({ required, ...config.stateField })\n },\n {\n field: zipCodeField({ required, ...config.zipCodeField })\n }\n ];\n\n if (includeCountry) {\n singleLineFields.push({\n field: countryField({ required, ...config.countryField })\n });\n }\n\n let lines: FormlyFieldConfig[];\n\n if (includeLine2) {\n lines = [addressLineField({ required, ...config.line1Field, line: 1 }), addressLineField({ ...config.line2Field, line: 2 })];\n } else {\n lines = [addressLineField({ required, ...config.line1Field, line: 0 })];\n }\n\n return [...lines, flexLayoutWrapper(singleLineFields, { size: 1, relative: true })];\n}\n\n// MARK: Address\nexport interface AddressFieldConfig extends Readonly<FieldConfig>, DbxFormSectionConfig, AddressFormlyFieldsConfig {}\n\nexport function addressField(config: Partial<AddressFieldConfig> = {}): FormlyFieldConfig {\n const { key = 'address', header = 'Address', hint, required = false } = config;\n\n return sectionWrapper(\n {\n ...config,\n key,\n fieldGroup: addressFormlyFields(config),\n required\n },\n {\n ...config,\n header,\n hint\n }\n );\n}\n\n// MARK: Address List\nexport interface AddressListFieldConfig extends Readonly<FieldConfig>, AddressFormlyFieldsConfig {\n readonly maxAddresses?: number;\n}\n\nexport function addressListField(config: Partial<AddressListFieldConfig> = {}): FormlyFieldConfig {\n const { key = 'addresses', required = false, maxAddresses = 6 } = config;\n return repeatArrayField({\n key,\n required,\n label: 'Addresses',\n labelForField: 'Address',\n addText: 'Add Address',\n removeText: 'Remove Address',\n maxLength: maxAddresses,\n repeatFieldGroup: addressFormlyFields(config)\n });\n}\n","import { FormlyMaterialModule } from '@ngx-formly/material';\nimport { NgModule } from '@angular/core';\nimport { DbxFormFormlyWrapperModule } from '../../wrapper/wrapper.module';\nimport { FormlyMatInputModule } from '@ngx-formly/material/input';\nimport { DbxFormFormlyArrayFieldModule } from '../array/array.field.module';\n\nconst importsAndExports = [DbxFormFormlyArrayFieldModule, FormlyMaterialModule, FormlyMatInputModule, DbxFormFormlyWrapperModule];\n\n@NgModule({\n imports: importsAndExports,\n exports: importsAndExports\n})\nexport class DbxFormFormlyTextFieldModule {}\n","import { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type LabeledFieldConfig, formlyField } from '../field';\n\nexport type HiddenFieldConfig = Pick<LabeledFieldConfig, 'key' | 'required'>;\n\nexport function hiddenField({ key, required = false }: HiddenFieldConfig): FormlyFieldConfig {\n return formlyField({\n key,\n props: { required }\n });\n}\n","import { NgModule } from '@angular/core';\nimport { DbxFormFormlyArrayFieldModule } from './array/array.field.module';\nimport { DbxFormFormlyPhoneFieldModule } from './phone/phone.field.module';\nimport { DbxFormFormlyDateFieldModule } from './date/date.field.module';\nimport { DbxFormFormlyTextFieldModule } from './text/text.field.module';\nimport { DbxFormFormlyNumberFieldModule } from './number/number.field.module';\nimport { DbxFormFormlyBooleanFieldModule } from './boolean/boolean.field.module';\n\nconst importsAndExports = [DbxFormFormlyArrayFieldModule, DbxFormFormlyBooleanFieldModule, DbxFormFormlyDateFieldModule, DbxFormFormlyPhoneFieldModule, DbxFormFormlyNumberFieldModule, DbxFormFormlyTextFieldModule];\n\n/**\n * @deprecated import the modules directly\n *\n * @see DbxFormFormlyArrayFieldModule\n * @see DbxFormFormlyDateFieldModule\n * @see DbxFormFormlyPhoneFieldModule\n * @see DbxFormFormlyNumberFieldModule\n * @see DbxFormFormlyTextFieldModule\n */\n@NgModule({\n imports: importsAndExports,\n exports: importsAndExports\n})\nexport class DbxFormFormlyValueModule {}\n","import { DbxFormFormlyTextEditorFieldModule } from './texteditor/texteditor.field.module';\nimport { NgModule } from '@angular/core';\nimport { DbxFormFormlyChecklistItemFieldModule } from './checklist/checklist.item.field.module';\nimport { DbxFormFormlyComponentFieldModule } from './component/component.field.module';\nimport { DbxFormFormlySelectionModule } from './selection/selection.module';\nimport { DbxFormFormlyWrapperModule } from './wrapper/wrapper.module';\nimport { DbxFormFormlyValueModule } from './value/value.module';\n\nconst importsAndExports = [DbxFormFormlyChecklistItemFieldModule, DbxFormFormlyComponentFieldModule, DbxFormFormlySelectionModule, DbxFormFormlyTextEditorFieldModule, DbxFormFormlyValueModule, DbxFormFormlyWrapperModule];\n\n@NgModule({\n imports: importsAndExports,\n exports: importsAndExports\n})\nexport class DbxFormFormlyFieldModule {}\n","import { SubscriptionObject, filterMaybe, MaybeObservableOrValue, maybeValueFromObservableOrValue } from '@dereekb/rxjs';\nimport { Observable, shareReplay, distinctUntilChanged } from 'rxjs';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { OnInit, OnDestroy, Directive, inject, input, effect } from '@angular/core';\nimport { DbxFormlyContext } from './formly.context';\nimport { type Maybe } from '@dereekb/util';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { DbxFormDisabledKey } from '../form/form';\n\n/**\n * Abstract component for wrapping a DbxFormlyContext.\n *\n * The implementing component should use provideFormlyContext() to provide the DbxFormlyContext specific to this directive. The context is injected using only self.\n */\n@Directive()\nexport abstract class AbstractFormlyFormDirective<T> implements OnDestroy {\n readonly context = inject(DbxFormlyContext<T>, { self: true });\n\n readonly disabled = input<boolean>(false);\n private readonly _setDisabledOnContext = effect(() => this.context.setDisabled(undefined, this.disabled()));\n\n ngOnDestroy(): void {\n this._setDisabledOnContext.destroy();\n }\n\n // Utility Functions\n getValue(): Observable<T> {\n return this.context.getValue();\n }\n\n setValue(value: Partial<T>): void {\n this.context.setValue(value);\n }\n\n resetForm(): void {\n this.context.resetForm();\n }\n\n clearValue(): void {\n this.setValue({});\n }\n\n setDisabled(key?: DbxFormDisabledKey, disabled?: boolean): void {\n this.context.setDisabled(key, disabled);\n }\n}\n\n/**\n * Abstract component for wrapping a form.\n */\n@Directive()\nexport abstract class AbstractSyncFormlyFormDirective<T> extends AbstractFormlyFormDirective<T> implements OnInit, OnDestroy {\n abstract fields: FormlyFieldConfig[];\n\n ngOnInit(): void {\n this.context.fields = this.fields;\n }\n}\n\n/**\n * Abstract component for wrapping an asyncrhronously-configured form.\n */\n@Directive()\nexport abstract class AbstractAsyncFormlyFormDirective<T> extends AbstractFormlyFormDirective<T> implements OnInit, OnDestroy {\n /**\n * Used to provide fields to the context.\n */\n abstract readonly fields$: Observable<Maybe<FormlyFieldConfig[]>>;\n\n private readonly _fieldsSub = new SubscriptionObject();\n\n ngOnInit(): void {\n this._fieldsSub.subscription = this.fields$.pipe(distinctUntilChanged()).subscribe((fields) => {\n this.context.fields = fields;\n });\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._fieldsSub.destroy();\n }\n}\n\n@Directive()\nexport abstract class AbstractConfigAsyncFormlyFormDirective<T, C> extends AbstractAsyncFormlyFormDirective<T> implements OnInit, OnDestroy {\n readonly config = input<MaybeObservableOrValue<C>>(undefined);\n\n readonly currentConfig$ = toObservable(this.config).pipe(maybeValueFromObservableOrValue());\n readonly config$ = this.currentConfig$.pipe(filterMaybe(), shareReplay(1));\n}\n","import { type Maybe } from '@dereekb/util';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type MaterialFormFieldConfig, textField } from '../field';\n\nexport interface DbxFormSearchFormFieldsValue {\n readonly search: string;\n}\n\nexport interface DbxFormSearchFormFieldsConfig extends MaterialFormFieldConfig {\n readonly label?: string;\n readonly placeholder?: string;\n}\n\nexport function dbxFormSearchFormFields(config: Maybe<DbxFormSearchFormFieldsConfig>): FormlyFieldConfig[] {\n const { label, placeholder = 'Search', materialFormField } = config || {};\n\n return [\n textField({\n key: 'search',\n label,\n placeholder,\n autocomplete: false,\n materialFormField: {\n ...materialFormField,\n hideLabel: !label\n }\n })\n ];\n}\n","import { NgModule } from '@angular/core';\nimport { provideFormlyContext } from './formly.context';\nimport { DbxFormlyComponent } from './formly.form.component';\n\n/**\n * Default template for a view that extends AbstractFormlyFormDirective.\n */\nexport const DBX_FORMLY_FORM_COMPONENT_TEMPLATE = `<dbx-formly></dbx-formly>`;\n\n/**\n * Default providers for a view that extends AbstractFormlyFormDirective.\n */\nexport const dbxFormlyFormComponentProviders = provideFormlyContext;\n\nconst dbxFormlyFormComponentImports = [DbxFormlyComponent];\n\n/**\n * Default imports module for a view that extends AbstractFormlyFormDirective.\n */\n@NgModule({\n imports: dbxFormlyFormComponentImports,\n exports: dbxFormlyFormComponentImports\n})\nexport class DbxFormlyFormComponentImportsModule {}\n","import { Component, OnDestroy, output } from '@angular/core';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { map, Observable } from 'rxjs';\nimport { AbstractConfigAsyncFormlyFormDirective } from '../formly.directive';\nimport { dbxFormSearchFormFields, DbxFormSearchFormFieldsConfig, DbxFormSearchFormFieldsValue } from './form.form';\nimport { DbxFormlyFormComponentImportsModule, dbxFormlyFormComponentProviders } from '../formly.component.template';\nimport { DbxFormValueChangeDirective } from '../../form/io/form.change.directive';\n\n@Component({\n selector: 'dbx-form-search-form',\n template: `\n <dbx-formly (dbxFormValueChange)=\"searchChanged($event)\"></dbx-formly>\n `,\n providers: dbxFormlyFormComponentProviders(),\n imports: [DbxFormlyFormComponentImportsModule, DbxFormValueChangeDirective],\n standalone: true,\n host: {\n class: 'd-block dbx-form-search-form'\n }\n})\nexport class DbxFormSearchFormComponent extends AbstractConfigAsyncFormlyFormDirective<DbxFormSearchFormFieldsValue, DbxFormSearchFormFieldsConfig> implements OnDestroy {\n readonly search = output<string>();\n\n readonly fields$: Observable<FormlyFieldConfig[]> = this.currentConfig$.pipe(map(dbxFormSearchFormFields));\n\n searchChanged(value: DbxFormSearchFormFieldsValue) {\n this.search.emit(value.search ?? '');\n }\n}\n","import { NgModule } from '@angular/core';\nimport { DbxFormSearchFormComponent } from './search.form.component';\n\nconst importsAndExports = [DbxFormSearchFormComponent];\n\n/**\n * @deprecated import DbxFormSearchFormComponent directly instead.\n */\n@NgModule({\n imports: importsAndExports,\n exports: importsAndExports\n})\nexport class DbxFormFormlyFormModule {}\n","import { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type FieldValueIsAvailableValidatorConfig, fieldValueIsAvailableValidator } from '../../validator/available';\nimport { textField, type TextFieldConfig } from '../field/value/text/text.field';\nimport { workingWrapper } from '../field/wrapper/wrapper';\n\nexport interface TextAvailableFieldConfig extends TextFieldConfig, Omit<FieldValueIsAvailableValidatorConfig<string>, 'message'> {\n readonly isNotAvailableErrorMessage?: string;\n}\n\nexport function textIsAvailableField(config: TextAvailableFieldConfig): FormlyFieldConfig {\n const field = textField(config);\n\n field.asyncValidators = {\n validation: [\n {\n expression: fieldValueIsAvailableValidator({\n ...config,\n message: config?.isNotAvailableErrorMessage\n })\n }\n ]\n };\n\n return workingWrapper(field, {});\n}\n","import { NgModule } from '@angular/core';\nimport { DbxFormFormlyTextFieldModule } from '../field/value/text/text.field.module';\nimport { DbxFormFormlyWrapperModule } from '../field/wrapper/wrapper.module';\n\nconst importsAndExports = [DbxFormFormlyTextFieldModule, DbxFormFormlyWrapperModule];\n\n@NgModule({\n imports: importsAndExports,\n exports: importsAndExports\n})\nexport class DbxFormTextAvailableFieldModule {}\n","import { type TextFieldConfig, textField } from '../field/value/text/text.field';\nimport { type EmailFieldConfig, emailField } from '../field/value/text/text.additional.field';\nimport { fieldValuesAreEqualValidator } from '../../validator/field';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { capitalizeFirstLetter, type Maybe } from '@dereekb/util';\n\n/**\n * Convenience interface for the password parameters configuration for a TextPasswordField.\n */\nexport type TextPasswordFieldPasswordParameters = Partial<Pick<TextFieldConfig, 'maxLength' | 'minLength' | 'pattern'>>;\n\n/**\n * textPasswordField() configuration.\n */\nexport interface TextPasswordFieldConfig extends Omit<TextFieldConfig, 'inputType' | 'key'>, Partial<Pick<TextFieldConfig, 'key' | 'materialFormField'>> {}\n\n/**\n * Configured simple text password field.\n *\n * @param config\n * @returns\n */\nexport function textPasswordField(config?: TextPasswordFieldConfig): FormlyFieldConfig {\n return textField({\n key: 'password',\n ...config,\n label: config?.label ?? 'Password',\n inputType: 'password',\n required: true\n });\n}\n\n/**\n * Configured verify field for a password.\n *\n * @param config\n * @returns\n */\nexport function textVerifyPasswordField(config?: TextPasswordFieldConfig): FormlyFieldConfig {\n return textPasswordField({\n key: 'verifyPassword',\n label: 'Verify Password',\n ...config,\n required: true\n });\n}\n\nexport interface TextPasswordWithVerifyFieldConfig {\n readonly password?: TextPasswordFieldConfig;\n readonly verifyPassword?: TextPasswordFieldConfig;\n}\n\nexport function textPasswordWithVerifyFieldGroup(config: TextPasswordWithVerifyFieldConfig): FormlyFieldConfig {\n const passwordFieldConfig = textPasswordField(config.password);\n const verifyPasswordFieldKey = config.verifyPassword?.key ?? `verify${capitalizeFirstLetter(String(passwordFieldConfig.key))}`;\n const verifyPasswordField = textVerifyPasswordField({\n ...config.password,\n ...config.verifyPassword,\n label: config.verifyPassword?.label ?? `Verify ${passwordFieldConfig.props?.label}`,\n key: verifyPasswordFieldKey\n });\n\n const validators = {\n validation: [\n {\n errorPath: verifyPasswordFieldKey,\n expression: fieldValuesAreEqualValidator({ keysFilter: [passwordFieldConfig.key, verifyPasswordField.key] as string[], message: 'The passwords do not match.' })\n }\n ]\n };\n\n const groupFieldConfig: FormlyFieldConfig = {\n validators,\n fieldGroup: [passwordFieldConfig, verifyPasswordField]\n };\n\n return groupFieldConfig;\n}\n\nexport interface UsernameLoginFieldUsernameConfig {\n readonly email?: Omit<EmailFieldConfig, 'key'>;\n readonly username?: Omit<TextFieldConfig, 'key'>;\n}\n\nexport type UsernameLoginFieldUsernameConfigInput = 'email' | 'username' | UsernameLoginFieldUsernameConfig;\n\n/**\n * usernamePasswordLoginFields() configuration.\n */\nexport interface UsernameLoginFieldsConfig {\n readonly username: UsernameLoginFieldUsernameConfigInput;\n readonly password?: TextPasswordFieldConfig;\n readonly verifyPassword?: Maybe<boolean | TextPasswordFieldConfig>;\n}\n\n/**\n * Value type exported by usernameLoginFields()\n */\nexport interface DefaultUsernameLoginFieldsValue extends DefaultUsernameLoginFieldValue {\n readonly password: string;\n readonly verifyPassword?: string;\n}\n\n/**\n * Template for login field that takes in a username and password.\n *\n * @param param0\n * @returns\n */\nexport function usernamePasswordLoginFields({ username, password, verifyPassword }: UsernameLoginFieldsConfig): FormlyFieldConfig[] {\n const usernameField = usernameLoginField(username);\n const passwordField = verifyPassword ? textPasswordWithVerifyFieldGroup({ password, verifyPassword: verifyPassword === true ? undefined : verifyPassword }) : textPasswordField(password);\n\n return [usernameField, passwordField];\n}\n\n/**\n * Value type exported by usernameLoginField()\n */\nexport interface DefaultUsernameLoginFieldValue {\n readonly username: string;\n}\n\nexport function usernameLoginField(username: UsernameLoginFieldUsernameConfigInput): FormlyFieldConfig {\n let usernameField: FormlyFieldConfig;\n let usernameFieldConfig: UsernameLoginFieldUsernameConfig = username as UsernameLoginFieldUsernameConfig;\n\n const defaultUsernameFieldConfig = { key: 'username', required: true };\n\n if (typeof username === 'string') {\n if (username === 'email') {\n usernameFieldConfig = {\n email: defaultUsernameFieldConfig\n };\n } else {\n usernameFieldConfig = {\n username: defaultUsernameFieldConfig\n };\n }\n }\n\n if (usernameFieldConfig.email) {\n usernameField = emailField({ ...usernameFieldConfig.email, ...defaultUsernameFieldConfig });\n } else {\n usernameField = textField({ ...usernameFieldConfig.username, ...defaultUsernameFieldConfig });\n }\n\n return usernameField;\n}\n","import { NgModule } from '@angular/core';\nimport { DbxFormFormlyTextFieldModule } from '../field/value/text/text.field.module';\n\nconst importsAndExports = [DbxFormFormlyTextFieldModule];\n\n@NgModule({\n imports: importsAndExports,\n exports: importsAndExports\n})\nexport class DbxFormLoginFieldModule {}\n","import { type TimezoneString } from '@dereekb/util';\nimport { allTimezoneInfos, searchTimezoneInfos, type TimezoneInfo, timezoneInfoForSystem } from '@dereekb/date';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type Observable, of } from 'rxjs';\nimport { type SearchableValueFieldStringSearchFn, type SearchableValueFieldValue, type SearchableValueFieldDisplayFn, type SearchableValueFieldDisplayValue } from '../field/selection/searchable';\nimport { searchableTextField, type SearchableTextFieldConfig } from '../field/selection/searchable/searchable.field';\n\nexport type TestStringSearchFunction = (text: string) => string[];\n\nexport function timezoneStringSearchFunction(): SearchableValueFieldStringSearchFn<string, TimezoneInfo> {\n const timezoneInfos = allTimezoneInfos();\n\n return (search: string) => {\n let searchResults;\n\n if (search.length === 0) {\n searchResults = [timezoneInfoForSystem()].concat(timezoneInfos);\n } else {\n searchResults = searchTimezoneInfos(search, timezoneInfos);\n }\n\n return of(searchResults.map((meta) => ({ value: meta.timezone, meta })));\n };\n}\n\nexport const DISPLAY_FOR_TIMEZONE_STRING_VALUE: SearchableValueFieldDisplayFn<string, TimezoneInfo> = (values: SearchableValueFieldValue<string, TimezoneInfo>[]) => {\n const timezoneInfos = allTimezoneInfos();\n\n const displayValues: SearchableValueFieldDisplayValue<string, TimezoneInfo>[] = values.map((x) => {\n const meta = x.meta ?? timezoneInfos.find((y) => x.value === y.timezone); // attempt to find the metadata in the timeInfos if it isn't provided.\n return { ...x, label: x.value, sublabel: meta?.abbreviation ?? 'Unknown' };\n });\n\n const obs: Observable<SearchableValueFieldDisplayValue<string, TimezoneInfo>[]> = of(displayValues);\n return obs;\n};\n\n/**\n * textPasswordField() configuration.\n */\nexport interface TimezoneStringFieldConfig extends Omit<SearchableTextFieldConfig<TimezoneString, TimezoneInfo>, 'inputType' | 'searchOnEmptyText' | 'search' | 'displayForValue' | 'key'>, Partial<Pick<SearchableTextFieldConfig<TimezoneString, TimezoneInfo>, 'key' | 'materialFormField'>> {}\n\n/**\n * Template for a searchable text field for a timezone.\n *\n * @param param0\n * @returns\n */\nexport function timezoneStringField(config: TimezoneStringFieldConfig = {}): FormlyFieldConfig {\n return searchableTextField({\n key: 'timezone',\n label: 'Timezone',\n asArrayValue: false,\n required: false,\n ...config,\n searchOnEmptyText: true,\n allowStringValues: false,\n showClearValue: true,\n search: timezoneStringSearchFunction(),\n displayForValue: DISPLAY_FOR_TIMEZONE_STRING_VALUE\n });\n}\n","import { NgModule } from '@angular/core';\nimport { DbxFormFormlySearchableFieldModule } from '../field/selection/searchable/searchable.field.module';\n\nconst importsAndExports = [DbxFormFormlySearchableFieldModule];\n\n@NgModule({\n imports: importsAndExports,\n exports: importsAndExports\n})\nexport class DbxFormTimezoneStringFieldModule {}\n","import { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type TextFieldConfig, textField } from '../field/value/text';\nimport { validatorsForFieldConfig } from '../field/field';\nimport { type ValidatorFn } from '@angular/forms';\nimport { isWebsiteUrlValidator, type IsWebsiteUrlValidatorConfig } from '../../validator/website';\n\n/**\n * websiteUrlField() configuration.\n */\nexport interface WebsiteUrlFieldConfig extends Omit<TextFieldConfig, 'inputType' | 'key'>, Partial<Pick<TextFieldConfig, 'key' | 'materialFormField'>>, IsWebsiteUrlValidatorConfig {}\n\n/**\n * Configured simple text password field.\n *\n * @param config\n * @returns\n */\nexport function websiteUrlField(config?: WebsiteUrlFieldConfig): FormlyFieldConfig {\n const validators: ValidatorFn[] = [isWebsiteUrlValidator(config)];\n\n const field = {\n ...textField({\n key: 'website',\n ...config,\n label: config?.label ?? 'Website Url',\n inputType: 'text'\n }),\n ...validatorsForFieldConfig({\n validators\n })\n };\n\n return field;\n}\n","import { FormlyFieldConfig } from '@ngx-formly/core';\nimport { Directive, OnDestroy, input } from '@angular/core';\nimport { provideFormlyContext } from './formly.context';\nimport { AbstractAsyncFormlyFormDirective } from './formly.directive';\nimport { type Maybe } from '@dereekb/util';\nimport { toObservable } from '@angular/core/rxjs-interop';\n\n/**\n * Provides an DbxFormlyContext and has an input for fields.\n */\n@Directive({\n selector: '[dbxFormlyFields]',\n providers: provideFormlyContext(),\n standalone: true\n})\nexport class DbxFormlyFieldsContextDirective<T = unknown> extends AbstractAsyncFormlyFormDirective<T> implements OnDestroy {\n readonly fields = input<Maybe<FormlyFieldConfig[]>>(undefined, { alias: 'dbxFormlyFields' });\n readonly fields$ = toObservable(this.fields);\n}\n","import { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { DbxFormlyComponent } from './formly.form.component';\nimport { FormlyMatToggleModule } from '@ngx-formly/material/toggle';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxFormlyFieldsContextDirective } from './formly.context.directive';\n\n/**\n * @deprecated\n */\n@NgModule({\n imports: [DbxFormlyComponent, DbxFormlyFieldsContextDirective, CommonModule, FormsModule, ReactiveFormsModule, FormlyModule, FormlyMatToggleModule],\n exports: [\n // Modules (?)\n FormsModule,\n ReactiveFormsModule,\n // Directives\n DbxFormlyComponent,\n DbxFormlyFieldsContextDirective\n ]\n})\nexport class DbxFormlyModule {}\n","import { importProvidersFrom } from '@angular/core';\nimport { DbxFormFormlyValueModule, DbxFormFormlyBooleanFieldModule, DbxFormFormlySelectionModule, DbxFormFormlyTextEditorFieldModule, DbxFormFormlyWrapperModule } from './field';\nimport { FormlyMaterialModule } from '@ngx-formly/material';\nimport { FormlyModule } from '@ngx-formly/core';\n\nexport function provideDbxFormFormlyFieldDeclarations() {\n return importProvidersFrom([DbxFormFormlyValueModule, DbxFormFormlyBooleanFieldModule, DbxFormFormlySelectionModule, DbxFormFormlyTextEditorFieldModule, DbxFormFormlyWrapperModule, FormlyModule, FormlyMaterialModule]);\n}\n","import { Directive } from '@angular/core';\n\n/**\n * Provides vertical spacing after a form.\n */\n@Directive({\n selector: 'dbx-form-spacer,[dbxFormSpacer],.dbx-form-spacer',\n host: {\n class: 'd-block dbx-form-spacer'\n },\n standalone: true\n})\nexport class DbxFormSpacerDirective {}\n","import { NgModule } from '@angular/core';\nimport { DbxFormSpacerDirective } from './form.spacer.directive';\n\nconst importsAndExports = [DbxFormSpacerDirective];\n\n/**\n * @deprecated import DbxFormSpacerDirective directly instead.\n */\n@NgModule({\n imports: importsAndExports,\n exports: importsAndExports\n})\nexport class DbxFormLayoutModule {}\n","import { NgModule } from '@angular/core';\nimport { DbxFormlyModule } from './formly/formly.module';\nimport { DbxFormModule } from './form/form.module';\nimport { DbxFormFormlyFieldModule } from './formly/field/form.field.module';\nimport { DbxFormFormlyFormModule } from './formly/form/form.form.module';\n\n@NgModule({\n exports: [DbxFormModule, DbxFormlyModule, DbxFormFormlyFieldModule, DbxFormFormlyFormModule]\n})\nexport class DbxFormExtensionModule {}\n","import { type EnvironmentProviders, makeEnvironmentProviders, type Provider } from '@angular/core';\nimport { provideDateFnsAdapter } from '@angular/material-date-fns-adapter';\nimport { MAT_DATE_LOCALE } from '@angular/material/core';\nimport { MAT_FORM_FIELD_DEFAULT_OPTIONS } from '@angular/material/form-field';\nimport { enUS } from 'date-fns/locale';\nimport { type DateTimePresetConfiguration, DBX_DATE_TIME_FIELD_MENU_PRESETS_TOKEN, DEFAULT_DATE_TIME_FIELD_MENU_PRESETS_PRESETS } from './formly';\nimport { type Maybe } from '@dereekb/util';\n\nexport interface ProvideDbxFormConfigurationConfig {\n readonly provideDateAdapter?: boolean;\n readonly defaultDateTimePresets?: Maybe<DateTimePresetConfiguration[]>;\n}\n\nexport function provideDbxFormConfiguration(config?: ProvideDbxFormConfigurationConfig): EnvironmentProviders {\n const { provideDateAdapter, defaultDateTimePresets } = config ?? {};\n\n const providers: Provider[] = [\n {\n provide: MAT_FORM_FIELD_DEFAULT_OPTIONS,\n useValue: {\n subscriptSizing: 'dynamic',\n floatLabel: 'always',\n appearance: 'outline'\n }\n },\n {\n provide: DBX_DATE_TIME_FIELD_MENU_PRESETS_TOKEN,\n useValue: defaultDateTimePresets ?? DEFAULT_DATE_TIME_FIELD_MENU_PRESETS_PRESETS\n }\n ];\n\n if (provideDateAdapter !== false) {\n providers.push(provideDateFnsAdapter());\n providers.push({\n provide: MAT_DATE_LOCALE,\n useValue: enUS\n });\n }\n\n return makeEnvironmentProviders(providers);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i1","importsAndExports","FieldType","i3","i4","i6","TIME_OUTPUT_THROTTLE_TIME","i5","i7","i10","DatePickerDateRange","isE164PhoneNumberFunction"],"mappings":"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"}
1
+ {"version":3,"file":"dereekb-dbx-form.mjs","sources":["../../../../packages/dbx-form/src/lib/form/form.ts","../../../../packages/dbx-form/src/lib/form/action/form.action.directive.ts","../../../../packages/dbx-form/src/lib/form/action/transition/form.action.transition.safety.directive.ts","../../../../packages/dbx-form/src/lib/formly/formly.context.ts","../../../../packages/dbx-form/src/lib/formly/formly.form.component.ts","../../../../packages/dbx-form/src/lib/form/io/form.input.directive.ts","../../../../packages/dbx-form/src/lib/form/action/form.action.dialog.component.ts","../../../../packages/dbx-form/src/lib/form/io/form.loading.directive.ts","../../../../packages/dbx-form/src/lib/form/io/form.change.directive.ts","../../../../packages/dbx-form/src/lib/form/form.angular.util.ts","../../../../packages/dbx-form/src/lib/form/form.module.ts","../../../../packages/dbx-form/src/lib/formly/config/validation.ts","../../../../packages/dbx-form/src/lib/formly/field/checklist/checklist.item.field.content.default.component.ts","../../../../packages/dbx-form/src/lib/formly/field/checklist/checklist.item.field.component.ts","../../../../packages/dbx-form/src/lib/formly/field/checklist/checklist.item.field.component.html","../../../../packages/dbx-form/src/lib/formly/field/wrapper/info.wrapper.component.ts","../../../../packages/dbx-form/src/lib/formly/field/wrapper/section.wrapper.component.ts","../../../../packages/dbx-form/src/lib/formly/field/wrapper/flex.wrapper.component.ts","../../../../packages/dbx-form/src/lib/formly/field/wrapper/subsection.wrapper.component.ts","../../../../packages/dbx-form/src/lib/formly/field/wrapper/expand.wrapper.delegate.ts","../../../../packages/dbx-form/src/lib/formly/field/wrapper/expand.wrapper.component.ts","../../../../packages/dbx-form/src/lib/formly/field/wrapper/autotouch.wrapper.component.ts","../../../../packages/dbx-form/src/lib/formly/field/wrapper/toggle.wrapper.component.ts","../../../../packages/dbx-form/src/lib/formly/field/wrapper/style.wrapper.component.ts","../../../../packages/dbx-form/src/lib/formly/field/wrapper/working.wrapper.component.ts","../../../../packages/dbx-form/src/lib/formly/field/wrapper/wrapper.key.ts","../../../../packages/dbx-form/src/lib/formly/field/wrapper/wrapper.module.ts","../../../../packages/dbx-form/src/lib/formly/field/checklist/checklist.item.field.module.ts","../../../../packages/dbx-form/src/lib/formly/field/field.ts","../../../../packages/dbx-form/src/lib/formly/field/checklist/checklist.item.field.ts","../../../../packages/dbx-form/src/lib/formly/field/checklist/checklist.field.ts","../../../../packages/dbx-form/src/lib/formly/field/component/component.field.component.ts","../../../../packages/dbx-form/src/lib/formly/field/component/component.field.module.ts","../../../../packages/dbx-form/src/lib/formly/field/component/component.field.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/list/list.field.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/list/list.field.component.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/list/list.field.component.html","../../../../packages/dbx-form/src/lib/formly/field/selection/list/list.field.module.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/pickable/pickable.field.directive.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/pickable/pickable.chip.field.component.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/pickable/pickable.chip.field.component.html","../../../../packages/dbx-form/src/lib/formly/field/selection/pickable/pickable.list.field.component.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/pickable/pickable.list.field.component.html","../../../../packages/dbx-form/src/lib/formly/field/selection/pickable/pickable.field.module.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/pickable/pickable.field.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/pickable/pickable.util.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/searchable/searchable.field.autocomplete.item.component.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/searchable/searchable.field.directive.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/searchable/searchable.chip.field.component.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/searchable/searchable.chip.field.component.html","../../../../packages/dbx-form/src/lib/formly/field/selection/searchable/searchable.field.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/searchable/searchable.text.field.component.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/searchable/searchable.text.field.component.html","../../../../packages/dbx-form/src/lib/formly/field/selection/searchable/searchable.field.module.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/searchable/text.chip.field.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/sourceselect/sourceselect.field.component.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/sourceselect/sourceselect.field.component.html","../../../../packages/dbx-form/src/lib/formly/field/selection/sourceselect/sourceselect.field.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/sourceselect/sourceselect.field.module.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/selection.field.ts","../../../../packages/dbx-form/src/lib/formly/field/texteditor/texteditor.field.component.ts","../../../../packages/dbx-form/src/lib/formly/field/texteditor/texteditor.field.module.ts","../../../../packages/dbx-form/src/lib/formly/field/texteditor/texteditor.field.ts","../../../../packages/dbx-form/src/lib/formly/field/value/array/array.field.component.ts","../../../../packages/dbx-form/src/lib/formly/field/value/array/array.field.module.ts","../../../../packages/dbx-form/src/lib/formly/field/value/array/array.field.ts","../../../../packages/dbx-form/src/lib/formly/field/value/boolean/boolean.field.module.ts","../../../../packages/dbx-form/src/lib/formly/field/value/boolean/boolean.field.ts","../../../../packages/dbx-form/src/lib/formly/field/value/date/datetime.ts","../../../../packages/dbx-form/src/lib/formly/field/value/date/datetime.field.service.ts","../../../../packages/dbx-form/src/lib/formly/field/value/date/date.value.ts","../../../../packages/dbx-form/src/lib/formly/field/value/date/datetime.field.component.ts","../../../../packages/dbx-form/src/lib/formly/field/value/date/datetime.field.component.html","../../../../packages/dbx-form/src/lib/formly/field/value/date/fixeddaterange.field.component.ts","../../../../packages/dbx-form/src/lib/formly/field/value/date/fixeddaterange.field.component.html","../../../../packages/dbx-form/src/lib/formly/field/value/date/date.field.module.ts","../../../../packages/dbx-form/src/lib/formly/field/wrapper/wrapper.ts","../../../../packages/dbx-form/src/lib/formly/field/value/date/datetime.field.ts","../../../../packages/dbx-form/src/lib/formly/field/value/date/datetime.preset.ts","../../../../packages/dbx-form/src/lib/validator/boolean.ts","../../../../packages/dbx-form/src/lib/validator/email.ts","../../../../packages/dbx-form/src/lib/validator/field.ts","../../../../packages/dbx-form/src/lib/validator/number.ts","../../../../packages/dbx-form/src/lib/validator/available.ts","../../../../packages/dbx-form/src/lib/validator/phone.ts","../../../../packages/dbx-form/src/lib/validator/website.ts","../../../../packages/dbx-form/src/lib/formly/field/value/number/number.field.ts","../../../../packages/dbx-form/src/lib/formly/field/value/number/number.field.module.ts","../../../../packages/dbx-form/src/lib/formly/field/value/phone/phone.field.component.ts","../../../../packages/dbx-form/src/lib/formly/field/value/phone/phone.field.component.html","../../../../packages/dbx-form/src/lib/formly/field/value/phone/phone.field.module.ts","../../../../packages/dbx-form/src/lib/formly/field/value/text/text.field.ts","../../../../packages/dbx-form/src/lib/formly/field/value/phone/phone.field.ts","../../../../packages/dbx-form/src/lib/formly/field/value/text/text.additional.field.ts","../../../../packages/dbx-form/src/lib/formly/field/value/text/text.address.field.ts","../../../../packages/dbx-form/src/lib/formly/field/value/text/text.field.module.ts","../../../../packages/dbx-form/src/lib/formly/field/value/hidden.field.ts","../../../../packages/dbx-form/src/lib/formly/field/form.field.module.ts","../../../../packages/dbx-form/src/lib/formly/form/form.form.ts","../../../../packages/dbx-form/src/lib/formly/formly.directive.ts","../../../../packages/dbx-form/src/lib/formly/formly.component.template.ts","../../../../packages/dbx-form/src/lib/formly/form/search.form.component.ts","../../../../packages/dbx-form/src/lib/formly/template/available.ts","../../../../packages/dbx-form/src/lib/formly/template/available.module.ts","../../../../packages/dbx-form/src/lib/formly/template/login.ts","../../../../packages/dbx-form/src/lib/formly/template/login.module.ts","../../../../packages/dbx-form/src/lib/formly/template/timezone.ts","../../../../packages/dbx-form/src/lib/formly/template/timezone.module.ts","../../../../packages/dbx-form/src/lib/formly/template/website.ts","../../../../packages/dbx-form/src/lib/formly/formly.context.directive.ts","../../../../packages/dbx-form/src/lib/formly/formly.providers.ts","../../../../packages/dbx-form/src/lib/layout/form.spacer.directive.ts","../../../../packages/dbx-form/src/lib/form.module.ts","../../../../packages/dbx-form/src/lib/form.providers.ts","../../../../packages/dbx-form/src/dereekb-dbx-form.ts"],"sourcesContent":["import { forwardRef, type Provider, type Type } from '@angular/core';\nimport { type Observable } from 'rxjs';\nimport { type LockSet } from '@dereekb/rxjs';\nimport { type BooleanStringKeyArray, type Maybe } from '@dereekb/util';\nimport { type AbstractControl, type FormControlStatus } from '@angular/forms';\n\n/**\n * Current state of a DbxForm\n */\nexport enum DbxFormState {\n /**\n * Form is not finished initializing.\n */\n INITIALIZING = -1,\n /**\n * Form is initialized but has not yet used.\n */\n RESET = 0,\n /**\n * Form has been used.\n */\n USED = 1\n}\n\n/**\n * Unique key for disabling/enabling.\n */\nexport type DbxFormDisabledKey = string;\n\nexport const DEFAULT_FORM_DISABLED_KEY = 'dbx_form_disabled';\n\nexport interface DbxFormStateRef {\n readonly state: DbxFormState;\n}\n\n/**\n * DbxForm stream event\n */\nexport interface DbxFormEvent extends DbxFormStateRef {\n readonly isComplete: boolean;\n readonly status: FormControlStatus;\n readonly pristine?: boolean;\n readonly untouched?: boolean;\n readonly lastResetAt?: Date;\n readonly changesCount?: number;\n /**\n * Whether or not the form is disabled.\n */\n readonly isDisabled?: boolean;\n /**\n * Current disabled state keys.\n */\n readonly disabled?: BooleanStringKeyArray;\n}\n\n/**\n * Form that has an event stream, value, and state items.\n */\nexport abstract class DbxForm<T = unknown> {\n abstract readonly stream$: Observable<DbxFormEvent>;\n\n /**\n * Returns an observable that returns the current state of the form.\n */\n abstract getValue(): Observable<T>;\n\n /**\n * Returns an observable that returns the current disabled keys.\n */\n abstract getDisabled(): Observable<BooleanStringKeyArray>;\n}\n\nexport abstract class DbxMutableForm<T = unknown> extends DbxForm<T> {\n /**\n * LockSet for the form.\n */\n abstract readonly lockSet?: LockSet;\n\n /**\n * Sets the initial value of the form, and resets the form.\n *\n * @param value\n */\n abstract setValue(value: Maybe<Partial<T>>): void;\n\n /**\n * Resets the form to the initial value.\n */\n abstract resetForm(): void;\n\n /**\n * Disables the form\n *\n * @param disabled\n */\n abstract setDisabled(key?: DbxFormDisabledKey, disabled?: boolean): void;\n\n /**\n * Force the form to update itself as if it was changed.\n */\n abstract forceFormUpdate(): void;\n}\n\nexport function provideDbxForm<S extends DbxForm>(sourceType: Type<S>): Provider[] {\n return [{ provide: DbxForm, useExisting: forwardRef(() => sourceType) }];\n}\n\nexport function provideDbxMutableForm<S extends DbxMutableForm>(sourceType: Type<S>): Provider[] {\n return [...provideDbxForm(sourceType), { provide: DbxMutableForm, useExisting: forwardRef(() => sourceType) }];\n}\n\nexport function toggleDisableFormControl(form: AbstractControl<any>, isDisabled: boolean, config?: Parameters<AbstractControl['disable']>[0]) {\n if (isDisabled) {\n form.disable(config);\n } else {\n form.enable(config);\n }\n}\n","import { Directive, OnInit, inject, input } from '@angular/core';\nimport { addSeconds, isPast } from 'date-fns';\nimport { Observable, of, combineLatest, exhaustMap, catchError, delay, filter, first, map, switchMap, distinctUntilChanged, shareReplay } from 'rxjs';\nimport { DbxActionContextStoreSourceInstance, DbxActionValueGetterResult, cleanLockSet } from '@dereekb/dbx-core';\nimport { SubscriptionObject, IsModifiedFunction, IsValidFunction, ObservableOrValue, asObservable, IsEqualFunction, makeIsModifiedFunctionObservable } from '@dereekb/rxjs';\nimport { DbxFormState, DbxMutableForm } from '../../form/form';\nimport { IsModified, IsValid, MapFunction, Maybe } from '@dereekb/util';\nimport { toObservable } from '@angular/core/rxjs-interop';\n\nexport const APP_ACTION_FORM_DISABLED_KEY = 'dbx_action_form';\n\nexport type DbxActionFormMapValueFunction<T, O> = MapFunction<T, ObservableOrValue<DbxActionValueGetterResult<O>>>;\n\n/**\n * Used with an action to bind a form to an action as it's value source.\n *\n * If the form has errors when the action is trigger, it will reject the action.\n *\n * If the source is not considered modified, the trigger will be ignored.\n */\n@Directive({\n selector: '[dbxActionForm]',\n standalone: true\n})\nexport class DbxActionFormDirective<T = object, O = T> implements OnInit {\n readonly form = inject(DbxMutableForm<T>, { host: true });\n readonly source = inject(DbxActionContextStoreSourceInstance<O, unknown>);\n\n readonly lockSet = cleanLockSet({\n onDestroy: () => {\n this.source.enable(APP_ACTION_FORM_DISABLED_KEY);\n },\n onLockSetDestroy: () => {\n this._triggeredSub.destroy();\n this._isCompleteSub.destroy();\n this._isWorkingSub.destroy();\n this.form.setDisabled(APP_ACTION_FORM_DISABLED_KEY, false);\n }\n });\n\n /**\n * Whether or not to disable the form while the action is working.\n *\n * Defaults to true.\n */\n readonly dbxActionFormDisabledOnWorking = input<Maybe<boolean>>(true);\n\n /**\n * Optional validator that checks whether or not the value is\n * ready to send before the context store is marked enabled.\n */\n readonly dbxActionFormIsValid = input<Maybe<IsValidFunction<T>>>();\n\n /**\n * Optional function that checks whether or not the value is still the same/equal.\n */\n readonly dbxActionFormIsEqual = input<Maybe<IsEqualFunction<T>>>();\n\n /**\n * Optional function that checks whether or not the value has been modified.\n *\n * If dbxActionFormIsEqual is provided, this will be ignored.\n */\n readonly dbxActionFormIsModified = input<Maybe<IsModifiedFunction<T>>>();\n\n /**\n * Optional function that maps the form's value to the source's value.\n */\n readonly dbxActionFormMapValue = input<Maybe<DbxActionFormMapValueFunction<T, O>>>();\n\n readonly dbxActionFormDisabledOnWorking$ = toObservable(this.dbxActionFormDisabledOnWorking);\n\n readonly isValidFunction$ = toObservable(this.dbxActionFormIsValid).pipe(\n map((x) => x ?? (() => of(true))),\n shareReplay(1)\n );\n readonly isModifiedFunction$: Observable<IsModifiedFunction<T>> = makeIsModifiedFunctionObservable({\n isModified: toObservable(this.dbxActionFormIsModified),\n isEqual: toObservable(this.dbxActionFormIsEqual)\n }).pipe(shareReplay(1));\n\n readonly mapValueFunction$: Observable<Maybe<DbxActionFormMapValueFunction<T, O>>> = toObservable(this.dbxActionFormMapValue);\n\n private readonly _triggeredSub = new SubscriptionObject();\n private readonly _isCompleteSub = new SubscriptionObject();\n private readonly _isWorkingSub = new SubscriptionObject();\n\n constructor() {\n if (this.form.lockSet) {\n this.lockSet.addChildLockSet(this.form.lockSet, 'form');\n }\n\n this.lockSet.addChildLockSet(this.source.lockSet, 'source');\n }\n\n ngOnInit(): void {\n // Pass data from the form to the source when triggered.\n this._triggeredSub.subscription = this.source.triggered$\n .pipe(\n switchMap(() =>\n this.form.stream$.pipe(\n first(),\n exhaustMap((stream) => {\n const { isComplete } = stream;\n const doNothing = {}; // nothing, form not complete\n\n let obs: Observable<DbxActionValueGetterResult<O>>;\n\n if (isComplete) {\n obs = this.form.getValue().pipe(\n first(),\n exhaustMap((value) =>\n this.preCheckReadyValue(value).pipe(\n first(),\n switchMap((canContinue) => {\n if (canContinue) {\n return this.readyValue(value).pipe(first());\n } else {\n return of(doNothing);\n }\n }),\n catchError((error) => of({ reject: error }))\n )\n )\n );\n } else {\n obs = of(doNothing);\n }\n\n return obs;\n })\n )\n )\n )\n .subscribe((result: DbxActionValueGetterResult<O>) => {\n if (result.reject) {\n this.source.reject(result.reject);\n } else if (result.value != null) {\n this.source.readyValue(result.value);\n } else {\n // value isn't ready\n }\n });\n\n // Update the enabled/disabled state\n this._isCompleteSub.subscription = this.form.stream$\n .pipe(\n delay(0),\n filter((x) => x.state !== DbxFormState.INITIALIZING),\n switchMap((event) => {\n return this.form.getValue().pipe(\n first(),\n exhaustMap((value) => {\n // Use both changes count and whether or not something was in the past to guage whether or not the item has been touched.\n // Angular Form's untouched is whether or not focus has been lost but we can still receive value updates.\n // More than a certain amount of updates implies that it is being typed into/used.\n // 3 changes and 2 seconds are arbitrary values derived from guesses about any slow/late changes that may come from external directives for setup.\n const isProbablyTouched = !event.untouched || ((event.changesCount ?? 0) > 3 && isPast(addSeconds(event.lastResetAt ?? new Date(), 2)));\n\n // create overrides\n const returnFalseFunction = () => of(false);\n\n const runIsValidCheck = event.isComplete;\n const isValidFunction: Maybe<IsValidFunction<T>> = runIsValidCheck ? undefined : returnFalseFunction;\n\n const isConsideredModified = event.pristine === false && isProbablyTouched;\n const isModifiedFunction: Maybe<IsModifiedFunction<T>> = isConsideredModified ? undefined : returnFalseFunction;\n\n return this.checkIsValidAndIsModified(value, { isValidFunction, isModifiedFunction }).pipe(\n map(([valid, modified]: [boolean, boolean]) => ({ valid, modified, value, event })),\n first()\n );\n })\n );\n })\n )\n .subscribe(({ valid, modified /*, value, event */ }) => {\n // console.log('x: ', value, event, valid, modified);\n\n // Update Modified State\n this.source.setIsModified(modified);\n\n // Disable if the form is not yet complete/valid.\n this.source.enable(APP_ACTION_FORM_DISABLED_KEY, valid);\n });\n\n // Watch the working state and disable form while working\n this._isWorkingSub.subscription = combineLatest([this.source.isWorking$, this.dbxActionFormDisabledOnWorking$])\n .pipe(\n map(([isWorking, disableFormWhileWorking]: [boolean, Maybe<boolean>]) => disableFormWhileWorking !== false && isWorking),\n distinctUntilChanged()\n )\n .subscribe((disable) => {\n this.form.setDisabled(APP_ACTION_FORM_DISABLED_KEY, disable);\n });\n }\n\n checkIsValidAndIsModified(value: T, overrides?: CheckValidAndModifiedOverrides<T>): Observable<[IsValid, IsModified]> {\n const { isModifiedFunction: overrideIsModifiedFunction, isValidFunction: overrideIsValidFunction } = overrides ?? {};\n const isValidFunctionObs = overrideIsValidFunction != null ? of(overrideIsValidFunction) : this.isValidFunction$;\n const isModifiedFunctionObs = overrideIsModifiedFunction != null ? of(overrideIsModifiedFunction) : this.isModifiedFunction$;\n\n return combineLatest([isValidFunctionObs, isModifiedFunctionObs]).pipe(\n switchMap(([isValid, isModified]) => {\n return combineLatest([isValid(value), isModified(value)]).pipe(map(([valid, modified]) => [valid, modified] as [boolean, boolean]));\n })\n );\n }\n\n protected preCheckReadyValue(value: T): Observable<[IsValid, IsModified]> {\n return this.checkIsValidAndIsModified(value);\n }\n\n protected readyValue(value: T): Observable<DbxActionValueGetterResult<O>> {\n return this.mapValueFunction$.pipe(\n switchMap((mapFunction) => {\n if (mapFunction) {\n return asObservable(mapFunction(value));\n } else {\n return of({ value: value as unknown as O });\n }\n })\n );\n }\n}\n\ninterface CheckValidAndModifiedOverrides<T> {\n isModifiedFunction?: Maybe<IsModifiedFunction<T>>;\n isValidFunction?: Maybe<IsValidFunction<T>>;\n}\n","import { Directive, effect, inject, input } from '@angular/core';\nimport { HookResult, Transition } from '@uirouter/core';\nimport { DbxActionTransitionSafetyType, DbxActionTransitionSafetyDirective } from '@dereekb/dbx-web';\nimport { DbxActionFormDirective } from '../form.action.directive';\n\n/**\n * Extension of DbxActionTransitionSafetyDirective that forces the form to update first.\n *\n * NOTE: Only works with UIRouter\n */\n@Directive({\n selector: '[dbxActionFormSafety]',\n standalone: true\n})\nexport class DbxActionFormSafetyDirective<T, O> extends DbxActionTransitionSafetyDirective<T, O> {\n readonly dbxActionForm = inject(DbxActionFormDirective<T>, { host: true });\n readonly dbxActionFormSafety = input<DbxActionTransitionSafetyType>('auto');\n\n protected readonly _dbxActionFormSafetyUpdateEffect = effect(() => this._safetyType.next(this.dbxActionFormSafety()));\n\n protected override _handleOnBeforeTransition(transition: Transition): HookResult {\n this.dbxActionForm.form.forceFormUpdate();\n return super._handleOnBeforeTransition(transition);\n }\n}\n","import { Injectable, OnDestroy, Provider } from '@angular/core';\nimport { BehaviorSubject, Observable, of, switchMap, shareReplay, distinctUntilChanged } from 'rxjs';\nimport { DbxForm, DbxFormDisabledKey, DbxFormEvent, DbxFormState, DbxMutableForm, DEFAULT_FORM_DISABLED_KEY, provideDbxMutableForm } from '../form/form';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { LockSet, filterMaybe } from '@dereekb/rxjs';\nimport { BooleanStringKeyArray, BooleanStringKeyArrayUtility, Destroyable, type Maybe } from '@dereekb/util';\n\nexport interface DbxFormlyInitialize<T> {\n fields: Observable<FormlyFieldConfig[]>;\n initialDisabled: BooleanStringKeyArray;\n initialValue: Maybe<Partial<T>>;\n}\n\n/**\n * DbxFormlyContext delegate.\n *\n * This is usually the component or element that contains the form itself.\n */\nexport interface DbxFormlyContextDelegate<T = unknown> extends Omit<DbxMutableForm<T>, 'lockSet'> {\n readonly stream$: Observable<DbxFormEvent>;\n init(initialize: DbxFormlyInitialize<T>): void;\n}\n\n/**\n * Allows a directive to provide a formly context and form.\n */\nexport function provideFormlyContext(): Provider[] {\n return [DbxFormlyContext, ...provideDbxMutableForm(DbxFormlyContext)];\n}\n\n/**\n * DbxForm Instance that registers a delegate and manages the state of that form/delegate.\n */\n@Injectable()\nexport class DbxFormlyContext<T = unknown> implements DbxForm<T>, Destroyable, OnDestroy {\n private static INITIAL_STATE: DbxFormEvent = { isComplete: false, state: DbxFormState.INITIALIZING, status: 'PENDING' };\n\n readonly lockSet = new LockSet();\n\n private readonly _fields = new BehaviorSubject<Maybe<FormlyFieldConfig[]>>(undefined);\n private readonly _initialValue = new BehaviorSubject<Maybe<Partial<T>>>(undefined);\n private readonly _disabled = new BehaviorSubject<BooleanStringKeyArray>(undefined);\n private readonly _delegate = new BehaviorSubject<Maybe<DbxFormlyContextDelegate<T>>>(undefined);\n\n readonly fields$ = this._fields.pipe(filterMaybe(), shareReplay(1));\n readonly disabled$ = this._disabled.pipe(filterMaybe(), shareReplay(1));\n readonly stream$: Observable<DbxFormEvent> = this._delegate.pipe(\n distinctUntilChanged(),\n switchMap((x) => (x ? x.stream$ : of(DbxFormlyContext.INITIAL_STATE))),\n shareReplay(1)\n );\n\n ngOnDestroy(): void {\n this.destroy();\n }\n\n destroy(): void {\n this.lockSet.destroyOnNextUnlock(() => {\n this._fields.complete();\n this._initialValue.complete();\n this._disabled.complete();\n this._delegate.complete();\n });\n }\n\n setDelegate(delegate?: DbxFormlyContextDelegate<T>): void {\n if (delegate !== this._delegate.value) {\n if (delegate != null) {\n delegate.init({\n fields: this.fields$,\n initialDisabled: this.disabled,\n initialValue: this._initialValue.value\n });\n }\n\n this._delegate.next(delegate);\n }\n }\n\n clearDelegate(delegate: DbxFormlyContextDelegate<T>): void {\n if (delegate === this._delegate.value) {\n this.setDelegate(undefined);\n }\n }\n\n get fields(): Maybe<FormlyFieldConfig[]> {\n return this._fields.value;\n }\n\n set fields(fields: Maybe<FormlyFieldConfig[]>) {\n this._fields.next(fields);\n }\n\n // MARK: FormComponent\n getValue(): Observable<T> {\n return this._delegate.pipe(\n filterMaybe(),\n switchMap((x) => x.getValue()),\n shareReplay(1)\n );\n }\n\n setValue(value: Partial<T>): void {\n this._initialValue.next(value);\n\n if (this._delegate.value) {\n this._delegate.value.setValue(value);\n }\n }\n\n isDisabled(): boolean {\n return BooleanStringKeyArrayUtility.isTrue(this.disabled);\n }\n\n get disabled(): BooleanStringKeyArray {\n return this._disabled.value;\n }\n\n getDisabled(): Observable<BooleanStringKeyArray> {\n return this._disabled.asObservable();\n }\n\n setDisabled(key?: DbxFormDisabledKey, disabled = true): void {\n const nextDisabled = BooleanStringKeyArrayUtility.set(this.disabled, key ?? DEFAULT_FORM_DISABLED_KEY, disabled);\n this._disabled.next(nextDisabled);\n\n if (this._delegate.value) {\n this._delegate.value.setDisabled(key, disabled);\n }\n }\n\n resetForm(): void {\n if (this._delegate.value) {\n this._delegate.value.resetForm();\n }\n }\n\n forceFormUpdate(): void {\n if (this._delegate.value) {\n this._delegate.value.forceFormUpdate();\n }\n }\n}\n","import { ChangeDetectionStrategy, Component, OnInit, computed, inject, signal, viewChild } from '@angular/core';\nimport { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { FormlyFieldConfig, FormlyForm, FormlyFormOptions, FormlyModule } from '@ngx-formly/core';\nimport { distinctUntilChanged, map, throttleTime, startWith, BehaviorSubject, Observable, Subject, switchMap, shareReplay, of, scan, filter, timer, first, merge, delay } from 'rxjs';\nimport { cleanWithLockSet } from '@dereekb/dbx-core';\nimport { DbxForm, DbxFormDisabledKey, DbxFormEvent, DbxFormState, DEFAULT_FORM_DISABLED_KEY, provideDbxMutableForm, toggleDisableFormControl } from '../form/form';\nimport { DbxFormlyContext, DbxFormlyContextDelegate, DbxFormlyInitialize } from './formly.context';\nimport { scanCount, switchMapFilterMaybe, SubscriptionObject } from '@dereekb/rxjs';\nimport { BooleanStringKeyArray, BooleanStringKeyArrayUtility, iterablesAreSetEquivalent, type Maybe } from '@dereekb/util';\nimport { toSignal } from '@angular/core/rxjs-interop';\n\nexport interface DbxFormlyFormState {\n changesSinceLastResetCount: number;\n isFormValid: boolean;\n isFormDisabled: boolean;\n}\n\n/**\n * Used for rending a form from a DbxFormlyContext.\n */\n@Component({\n selector: 'dbx-formly',\n exportAs: 'formly',\n template: `\n <form [formGroup]=\"form\" class=\"dbx-formly\">\n <formly-form [form]=\"form\" [options]=\"options\" [fields]=\"fieldsSignal()\" [model]=\"modelSignal()\"></formly-form>\n </form>\n `,\n host: {\n class: 'dbx-formly'\n },\n providers: provideDbxMutableForm(DbxFormlyComponent),\n imports: [FormsModule, ReactiveFormsModule, FormlyModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFormlyComponent<T> implements DbxForm, DbxFormlyContextDelegate<T>, OnInit {\n private readonly _dbxFormlyContext = inject(DbxFormlyContext<T>);\n\n readonly formlyForm = viewChild(FormlyForm);\n\n private readonly _fields = new BehaviorSubject<Maybe<Observable<FormlyFieldConfig[]>>>(undefined);\n private readonly _events = new BehaviorSubject<DbxFormEvent>({ isComplete: false, state: DbxFormState.INITIALIZING, status: 'PENDING' });\n private readonly _disabled = new BehaviorSubject<BooleanStringKeyArray>(undefined);\n\n private readonly _reset = new BehaviorSubject<Date>(new Date());\n private readonly _forceUpdate = new Subject<void>();\n\n private readonly _disabledSub = new SubscriptionObject();\n private readonly _enforceDisabledSub = new SubscriptionObject();\n\n readonly form = new FormGroup({});\n readonly modelSignal = signal<T>({} as T);\n\n readonly options: FormlyFormOptions = {};\n\n readonly fields$ = this._fields.pipe(switchMapFilterMaybe(), distinctUntilChanged(), shareReplay(1));\n\n readonly stream$: Observable<DbxFormEvent> = this._reset.pipe(\n switchMap((lastResetAt) =>\n this.form.valueChanges.pipe(\n startWith(0),\n distinctUntilChanged(),\n throttleTime(50, undefined, { leading: true, trailing: true }),\n scanCount(-1),\n // update on validation changes too. Does not count towards changes since last reset.\n switchMap((changesSinceLastReset) => this.form.statusChanges.pipe(startWith(this.form.status), distinctUntilChanged()).pipe(map(() => changesSinceLastReset))),\n map((changesSinceLastResetCount: number) => ({\n changesSinceLastResetCount,\n isFormValid: this.form.status !== 'PENDING' && this.form.valid,\n isFormDisabled: this.form.disabled\n })),\n scan(\n (acc: DbxFormlyFormState, next: DbxFormlyFormState) => {\n // Pass forward valid if next was a disabled change/check, which changes angular form's isValid value.\n // If it was valid prior, then it should be valid now, unless we just reset, in which case it might not be valid.\n const valid = next.isFormValid || (next.isFormDisabled && acc.isFormValid && acc.changesSinceLastResetCount > 0);\n\n return {\n changesSinceLastResetCount: next.changesSinceLastResetCount,\n isFormValid: valid,\n isFormDisabled: next.isFormDisabled\n };\n },\n {\n changesSinceLastResetCount: 0,\n isFormValid: false,\n isFormDisabled: false\n }\n ),\n switchMap(({ changesSinceLastResetCount, isFormValid, isFormDisabled }) => {\n const nextState = () => {\n const isReset = changesSinceLastResetCount <= 1; // first emission after reset is the first value.\n const complete = isFormValid;\n\n const nextState: DbxFormEvent = {\n isComplete: complete,\n state: isReset ? DbxFormState.RESET : DbxFormState.USED,\n status: this.form.status,\n untouched: this.form.untouched,\n pristine: this.form.pristine,\n changesCount: changesSinceLastResetCount,\n lastResetAt,\n disabled: this.disabled,\n isDisabled: isFormDisabled\n };\n\n return nextState;\n };\n\n const state = nextState();\n\n if (isFormValid && this.form.untouched) {\n return timer(150, 200).pipe(\n // every 200 ms check if the form is now marked touched, then push a new state\n filter(() => this.form.touched),\n map(() => nextState()),\n // only push the new state once\n first(),\n // send the first value immediately\n startWith(state)\n );\n } else {\n return of(state);\n }\n })\n )\n ),\n shareReplay(1)\n );\n\n private readonly _fieldsSignal = toSignal(this.fields$, { initialValue: undefined });\n\n readonly fieldsSignal = computed(() => this._fieldsSignal() ?? []);\n\n constructor() {\n cleanWithLockSet(this._dbxFormlyContext.lockSet, () => {\n this._dbxFormlyContext.clearDelegate(this);\n this._events.complete();\n this._fields.complete();\n this._reset.complete();\n this._forceUpdate.complete();\n this._disabled.complete();\n this._disabledSub.destroy();\n this._enforceDisabledSub.destroy();\n });\n }\n\n ngOnInit(): void {\n this._dbxFormlyContext.setDelegate(this);\n\n const resyncDisabledState = () => {\n const isDisabled = BooleanStringKeyArrayUtility.isTrue(this._disabled.value);\n let change = false;\n\n if (this.form.disabled !== isDisabled) {\n toggleDisableFormControl(this.form, isDisabled, { emitEvent: true });\n change = true;\n }\n\n return change;\n };\n\n this._disabledSub.subscription = this._disabled.pipe(distinctUntilChanged(iterablesAreSetEquivalent)).subscribe(() => {\n resyncDisabledState();\n });\n\n // NOTE: Form sometimes becomes undisabled somewhere/somehow. Re-enforce the disabled state where necessary.\n this._enforceDisabledSub.subscription = merge([\n this._reset.pipe(\n map(() => 'RESET'),\n delay(50)\n ),\n this.form.statusChanges.pipe(throttleTime(50, undefined, { leading: true, trailing: true }))\n ]).subscribe((change) => {\n resyncDisabledState();\n });\n }\n\n // MARK: Delegate\n init(initialize: DbxFormlyInitialize<T>): void {\n this._fields.next(initialize.fields);\n this._disabled.next(initialize.initialDisabled);\n }\n\n getValue(): Observable<T> {\n return of(this.form.value as T);\n }\n\n setValue(value: T): void {\n this.modelSignal.set(structuredClone(value) as T);\n\n if (this.options.updateInitialValue) {\n this.options.updateInitialValue();\n this.options.resetModel?.();\n }\n\n // Re-mark as untouched and pristine.\n this.form.markAsUntouched();\n this.form.markAsPristine();\n\n // After updating the value, if the form is still untouched mark it as pristine again.\n // Sometimes the values get marked as changed and break pristine before a user has time to interact.\n setTimeout(() => {\n if (this.form.untouched) {\n this.form.markAsPristine();\n }\n }, 500);\n\n // ping reset\n this.resetForm();\n }\n\n resetForm(): void {\n if (this.options.resetModel) {\n this.options.resetModel();\n }\n\n this._reset.next(new Date());\n }\n\n get isDisabled(): boolean {\n return BooleanStringKeyArrayUtility.isTrue(this.disabled);\n }\n\n get disabled(): BooleanStringKeyArray {\n return this._disabled.value;\n }\n\n getDisabled(): Observable<BooleanStringKeyArray> {\n return this._disabled.asObservable();\n }\n\n setDisabled(key?: DbxFormDisabledKey, disabled = true): void {\n const next = BooleanStringKeyArrayUtility.set(this.disabled, key ?? DEFAULT_FORM_DISABLED_KEY, disabled);\n this._disabled.next(next);\n }\n\n // MARK: Update\n forceFormUpdate(): void {\n this._forceUpdate.next();\n }\n}\n","import { distinctUntilChanged, filter, map, switchMap, combineLatest, Observable, EMPTY, exhaustMap, takeUntil, Subject, tap, shareReplay, throttleTime, Subscription } from 'rxjs';\nimport { Directive, effect, inject, input } from '@angular/core';\nimport { DbxFormState, DbxFormStateRef, DbxMutableForm } from '../form';\nimport { type Maybe } from '@dereekb/util';\nimport { asObservable, ObservableOrValue, cleanup, errorOnEmissionsInPeriod } from '@dereekb/rxjs';\nimport { cleanSubscription } from '@dereekb/dbx-core';\n\nexport function dbxFormSourceObservable<T>(form: DbxMutableForm, inputObs: ObservableOrValue<T>, modeObs: Observable<DbxFormSourceDirectiveMode>): Observable<T> {\n return dbxFormSourceObservableFromStream(form.stream$, inputObs, modeObs);\n}\n\nexport function dbxFormSourceObservableFromStream<T>(streamObs: Observable<DbxFormStateRef>, inputObs: ObservableOrValue<T>, modeObs: ObservableOrValue<DbxFormSourceDirectiveMode>): Observable<T> {\n const value$ = asObservable(inputObs).pipe(shareReplay(1)); // catch/share the latest emission\n\n const state$ = streamObs.pipe(\n map((x) => x.state),\n distinctUntilChanged()\n );\n\n const mode$ = asObservable(modeObs).pipe(distinctUntilChanged());\n\n return combineLatest([mode$, value$]).pipe(\n map((x) => x[0]),\n distinctUntilChanged(),\n switchMap((mode: DbxFormSourceDirectiveMode) => {\n if (mode === 'reset') {\n // reset only\n return state$.pipe(\n exhaustMap((state: DbxFormState) => {\n if (state === DbxFormState.RESET) {\n let firstValueSent = false;\n const doneSubject = new Subject();\n\n return combineLatest([value$, state$]).pipe(\n map(([value, state]) => {\n if (!firstValueSent || state === DbxFormState.RESET) {\n return [value, true] as [T, boolean]; // always forward the first value.\n } else {\n return [value, false] as [T, boolean];\n }\n }),\n tap(([_, send]) => {\n firstValueSent = true;\n if (!send) {\n doneSubject.next(undefined);\n }\n }),\n filter(([_, send]) => send),\n map(([value, _]) => value),\n takeUntil(doneSubject),\n cleanup(() => {\n doneSubject.complete();\n })\n );\n } else {\n return EMPTY;\n }\n })\n );\n } else {\n // pass any updated value while not initializing.\n return state$.pipe(\n map((x) => x === DbxFormState.INITIALIZING),\n distinctUntilChanged(),\n switchMap((initializing: boolean) => {\n if (initializing) {\n return EMPTY;\n } else {\n let valueObs = value$;\n\n if (mode === 'always') {\n valueObs = valueObs.pipe(\n throttleTime(10, undefined, { leading: true, trailing: true }),\n errorOnEmissionsInPeriod({\n period: 1000,\n maxEmissionsPerPeriod: 50,\n onError: () => {\n console.error('dbxFormSourceObservableFromStream: Error thrown due to too many emissions. There may be an unintentional loop being triggered by dbxFormSource. Typically this can occur in cases where the dbxFormSource directive is used at the same time as dbxFormValueChange directive and the same value is being pushed.');\n }\n })\n );\n }\n\n return valueObs;\n }\n })\n );\n }\n })\n );\n}\n\n/**\n * DbxFormSourceDirective modes that define when to copy data from the source.\n *\n * - reset: only copy data when the form is reset.\n * - always: always copy data when the data observable emits a value. Has a throttle of 20ms to prevent too many emissions. If emissions occur in a manner that appears to be a loop (more than 30 emissions in 1 second), then an error is thrown and warning printed to the console.\n * - every: equal to always, but has no throttle or error message warning.\n */\nexport type DbxFormSourceDirectiveMode = 'reset' | 'always' | 'every';\n\n/**\n * Used with a FormComponent to set the value based on the input value.\n */\n@Directive({\n selector: '[dbxFormSource]',\n standalone: true\n})\nexport class DbxFormSourceDirective<T = unknown> {\n readonly form = inject(DbxMutableForm<T>, { host: true });\n\n readonly dbxFormSourceMode = input<Maybe<DbxFormSourceDirectiveMode>>();\n readonly dbxFormSource = input<Maybe<ObservableOrValue<Maybe<Partial<T>>>>>();\n\n protected readonly _effectSub = cleanSubscription();\n protected readonly _setFormSourceObservableEffect = effect(() => {\n const formSource = this.dbxFormSource();\n const mode: DbxFormSourceDirectiveMode = this.dbxFormSourceMode() ?? 'reset';\n\n let subscription: Maybe<Subscription>;\n\n if (formSource) {\n subscription = dbxFormSourceObservableFromStream(this.form.stream$, formSource, mode).subscribe((x) => {\n this.form.setValue(x);\n });\n }\n\n this._effectSub.setSub(subscription);\n });\n}\n","import { Component, inject, OnInit } from '@angular/core';\nimport { AbstractDialogDirective, DbxDialogContentDirective, DbxDialogContentCloseComponent, DbxActionModule, DbxButtonModule, DbxButtonStyle } from '@dereekb/dbx-web';\nimport { MatDialog, MatDialogConfig, MatDialogRef } from '@angular/material/dialog';\nimport { Maybe } from '@dereekb/util';\nimport { asObservableFromGetter, MaybeObservableOrValueGetter, ObservableOrValueGetter, WorkUsingContext } from '@dereekb/rxjs';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { distinctUntilChanged } from 'rxjs';\nimport { cleanSubscription, DbxButtonDisplay } from '@dereekb/dbx-core';\nimport { DbxFormlyContext, provideFormlyContext } from '../../formly/formly.context';\nimport { DbxFormlyComponent } from '../../formly/formly.form.component';\nimport { DbxFormSourceDirective } from '../io/form.input.directive';\nimport { DbxActionFormDirective } from './form.action.directive';\n\nexport interface DbxFormActionDialogComponentButtonConfig extends DbxButtonDisplay, DbxButtonStyle {}\n\nexport interface DbxFormActionDialogComponentConfig<O> {\n /**\n * Header text for the dialog.\n */\n readonly header: string;\n /**\n * Used for retrieving the fields to display in the dialog.\n */\n readonly fields: ObservableOrValueGetter<FormlyFieldConfig[]>;\n /**\n * Initial value for the form.\n */\n readonly initialValue?: MaybeObservableOrValueGetter<O>;\n /**\n * Text/Icon for the submit button.\n */\n readonly submitButtonConfig?: DbxFormActionDialogComponentButtonConfig;\n /**\n * Dialog-specific configuration\n */\n readonly dialog?: Omit<MatDialogConfig, 'data'>;\n}\n\n/**\n *\n */\n@Component({\n template: `\n <dbx-dialog-content dbxAction [dbxActionHandler]=\"handleSubmitValue\" class=\"dbx-dialog-content-with-header\">\n <h3 class=\"dbx-dialog-content-header\">{{ header }}</h3>\n <dbx-dialog-content-close (close)=\"close()\"></dbx-dialog-content-close>\n <div>\n <dbx-formly dbxActionForm [dbxFormSource]=\"initialValue$\"></dbx-formly>\n <dbx-button dbxActionButton [buttonDisplay]=\"submitButtonConfig\" [buttonStyle]=\"submitButtonConfig\" [raised]=\"true\"></dbx-button>\n </div>\n </dbx-dialog-content>\n `,\n standalone: true,\n providers: [provideFormlyContext()],\n imports: [DbxDialogContentDirective, DbxActionModule, DbxButtonModule, DbxDialogContentCloseComponent, DbxFormlyComponent, DbxFormSourceDirective, DbxActionFormDirective, DbxFormlyComponent]\n})\nexport class DbxFormActionDialogComponent<O> extends AbstractDialogDirective<O, DbxFormActionDialogComponentConfig<O>> implements OnInit {\n private readonly _fieldsSub = cleanSubscription();\n\n readonly context = inject(DbxFormlyContext<O>, { self: true });\n readonly fields$ = asObservableFromGetter(this.data.fields);\n readonly initialValue$ = asObservableFromGetter(this.data.initialValue);\n\n readonly header = this.data.header;\n\n readonly submitButtonConfig = {\n text: 'Submit',\n ...this.data.submitButtonConfig\n };\n\n ngOnInit(): void {\n this._fieldsSub.setSub(\n this.fields$.pipe(distinctUntilChanged()).subscribe((fields) => {\n this.context.fields = fields;\n })\n );\n }\n\n readonly handleSubmitValue: WorkUsingContext<O> = (value, context) => {\n context.success();\n this.close(value);\n };\n\n static openDialogWithForm<O>(matDialog: MatDialog, config: DbxFormActionDialogComponentConfig<O>): MatDialogRef<DbxFormActionDialogComponent<O>, Maybe<O>> {\n const dialogRef = matDialog.open(DbxFormActionDialogComponent<O>, {\n width: '90vw',\n maxHeight: '300px',\n maxWidth: '600px',\n ...config.dialog,\n data: config\n });\n\n return dialogRef;\n }\n}\n","import { Observable } from 'rxjs';\nimport { Directive, inject, input } from '@angular/core';\nimport { cleanSubscription } from '@dereekb/dbx-core';\nimport { DbxMutableForm } from '../../form/form';\nimport { LoadingState, MaybeObservableOrValue, filterMaybe, maybeValueFromObservableOrValue, valueFromFinishedLoadingState } from '@dereekb/rxjs';\nimport { dbxFormSourceObservableFromStream, DbxFormSourceDirectiveMode } from './form.input.directive';\nimport { Maybe } from '@dereekb/util';\nimport { toObservable } from '@angular/core/rxjs-interop';\n\nconst DEFAULT_DBX_FORM_LOADING_SOURCE_DIRECTIVE_MODE: DbxFormSourceDirectiveMode = 'reset';\n\n/**\n * Used with a FormComponent to set the value from a LoadingState when the value is available.\n *\n * Only passes non-null values from the source.\n */\n@Directive({\n selector: '[dbxFormLoadingSource]',\n standalone: true\n})\nexport class DbxFormLoadingSourceDirective<T extends object = object> {\n readonly form = inject(DbxMutableForm<T>, { host: true });\n\n readonly dbxFormLoadingSourceMode = input<DbxFormSourceDirectiveMode, Maybe<DbxFormSourceDirectiveMode>>(DEFAULT_DBX_FORM_LOADING_SOURCE_DIRECTIVE_MODE, { transform: (x) => x ?? DEFAULT_DBX_FORM_LOADING_SOURCE_DIRECTIVE_MODE });\n readonly dbxFormLoadingSource = input<MaybeObservableOrValue<LoadingState<T>>>();\n\n readonly mode$ = toObservable(this.dbxFormLoadingSourceMode);\n readonly source$: Observable<Maybe<T>> = toObservable(this.dbxFormLoadingSource).pipe(maybeValueFromObservableOrValue(), filterMaybe(), valueFromFinishedLoadingState());\n\n constructor() {\n cleanSubscription(\n dbxFormSourceObservableFromStream(this.form.stream$, this.source$, this.mode$).subscribe((x) => {\n this.form.setValue(x);\n })\n );\n }\n}\n","import { Directive, OnInit, inject, output } from '@angular/core';\nimport { cleanSubscription } from '@dereekb/dbx-core';\nimport { type Maybe } from '@dereekb/util';\nimport { first, mergeMap, delay, map } from 'rxjs';\nimport { DbxForm } from '../form';\n\n/**\n * Used to see form value changes.\n *\n * Emits undefined when the form is incomplete, and the value when the form is complete.\n */\n@Directive({\n selector: '[dbxFormValueChange]',\n standalone: true\n})\nexport class DbxFormValueChangeDirective<T> implements OnInit {\n readonly form = inject(DbxForm<T>, { host: true });\n\n readonly dbxFormValueChange = output<Maybe<T>>();\n\n protected readonly _sub = cleanSubscription();\n\n ngOnInit(): void {\n // specifically call within ngOnInit to ensure first emission occurs after the form is initialized.\n this._sub.setSub(\n this.form.stream$\n .pipe(\n mergeMap((x) =>\n this.form.getValue().pipe(\n first(),\n map((value) => ({ isComplete: x.isComplete, value }))\n )\n ),\n delay(0)\n )\n .subscribe(({ isComplete, value }) => {\n if (isComplete) {\n this.dbxFormValueChange.emit(value);\n } else {\n this.dbxFormValueChange.emit(undefined);\n }\n })\n );\n }\n}\n","import { type AbstractControl } from '@angular/forms';\nimport { type Maybe } from '@dereekb/util';\nimport { type Observable, startWith } from 'rxjs';\n\n/**\n * A FormGroup/AbstractControl path to a specific control.\n */\nexport type FormControlPath = string;\n\n/**\n * Streams a value from the input control at the given path. If no path is specified, streams the value from the control.\n *\n * @param fromControl\n * @param path\n * @returns\n */\nexport function streamValueFromControl<T>(fromControl: AbstractControl, path?: FormControlPath): Maybe<Observable<T>> {\n const control = path ? fromControl.get(path) : fromControl;\n return control?.valueChanges.pipe(startWith(control.value));\n}\n","import { NgModule } from '@angular/core';\n\n@NgModule({\n exports: []\n})\nexport class DbxFormModule {}\n","import { type FieldTypeConfig } from '@ngx-formly/core';\nimport { type ValidationMessageOption } from '../type';\n\nexport function minLengthValidationMessage(err: unknown, field: FieldTypeConfig) {\n return `Should have atleast ${field.props.minLength} characters.`;\n}\n\nexport function maxLengthValidationMessage(err: unknown, field: FieldTypeConfig) {\n return `This value should be less than ${field.props.maxLength} characters.`;\n}\n\nexport function minValidationMessage(err: unknown, field: FieldTypeConfig) {\n return `This value should be more than or equal to ${field.props.min}.`;\n}\n\nexport function maxValidationMessage(err: unknown, field: FieldTypeConfig) {\n return `This value should be less than or equal to ${field.props.max}.`;\n}\n\nexport const REQUIRED_VALIDATION_MESSAGE = { name: 'required', message: 'This field is required.' };\nexport const MIN_LENGTH_VALIDATION_MESSAGE = { name: 'minLength', message: minLengthValidationMessage } as ValidationMessageOption;\nexport const MAX_LENGTH_VALIDATION_MESSAGE = { name: 'maxLength', message: maxLengthValidationMessage } as ValidationMessageOption;\nexport const MIN_VALIDATION_MESSAGE = { name: 'min', message: minValidationMessage } as ValidationMessageOption;\nexport const MAX_VALIDATION_MESSAGE = { name: 'max', message: maxValidationMessage } as ValidationMessageOption;\nexport const INVALID_PHONE_NUMBER_MESSAGE = { name: 'validatePhoneNumber', message: 'This is not a valid phone number.' };\nexport const INVALID_PHONE_NUMBER_EXTENSION_MESSAGE = { name: 'validatePhoneNumberExtension', message: 'This is not a valid phone number extension.' };\n\nexport function defaultValidationMessages(): ValidationMessageOption[] {\n return [REQUIRED_VALIDATION_MESSAGE, MIN_LENGTH_VALIDATION_MESSAGE, MAX_LENGTH_VALIDATION_MESSAGE, MIN_VALIDATION_MESSAGE, MAX_VALIDATION_MESSAGE, INVALID_PHONE_NUMBER_MESSAGE, INVALID_PHONE_NUMBER_EXTENSION_MESSAGE];\n}\n","import { ChangeDetectionStrategy, Component, signal } from '@angular/core';\nimport { ChecklistItemDisplayContent, ChecklistItemFieldDisplayComponent } from './checklist.item';\nimport { type Maybe } from '@dereekb/util';\n\n// MARK: Default\n@Component({\n template: `\n @if (displayContentSignal()) {\n <div class=\"dbx-default-checklist-item-field\">\n @if (displayContentSignal()?.label) {\n <div class=\"item-label\">{{ displayContentSignal()?.label }}</div>\n }\n @if (displayContentSignal()?.sublabel) {\n <div class=\"item-sublabel\">{{ displayContentSignal()?.sublabel }}</div>\n }\n @if (displayContentSignal()?.description) {\n <div class=\"dbx-hint item-description\">{{ displayContentSignal()?.description }}</div>\n }\n </div>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: []\n})\nexport class DbxDefaultChecklistItemFieldDisplayComponent<T = unknown> implements ChecklistItemFieldDisplayComponent<T> {\n readonly _displayContentSignal = signal<Maybe<ChecklistItemDisplayContent<T>>>(undefined);\n readonly displayContentSignal = this._displayContentSignal.asReadonly();\n\n setDisplayContent(displayContent: ChecklistItemDisplayContent<T>): void {\n this._displayContentSignal.set(displayContent);\n }\n}\n","import { ChangeDetectionStrategy, Component, OnInit, Type, inject, signal } from '@angular/core';\nimport { DbxInjectionComponentConfig, DbxInjectionComponent, cleanSubscription } from '@dereekb/dbx-core';\nimport { switchMapFilterMaybe } from '@dereekb/rxjs';\nimport { shareReplay, distinctUntilChanged, map, Observable } from 'rxjs';\nimport { ValidationErrors, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { FieldType, FieldTypeConfig, FormlyFieldProps } from '@ngx-formly/core';\nimport { ChecklistItemFieldDisplayComponent, ChecklistItemDisplayContent } from './checklist.item';\nimport { DbxDefaultChecklistItemFieldDisplayComponent } from './checklist.item.field.content.default.component';\nimport { type Maybe } from '@dereekb/util';\nimport { toSignal, toObservable } from '@angular/core/rxjs-interop';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatRippleModule } from '@angular/material/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { DbxAnchorComponent } from '@dereekb/dbx-web';\n\n@Component({\n selector: 'dbx-checklist-item-content-component',\n template: `\n <dbx-injection [config]=\"config\"></dbx-injection>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [DbxInjectionComponent]\n})\nexport class DbxChecklistItemContentComponent<T = unknown> {\n readonly checklistItemFieldComponent = inject(DbxChecklistItemFieldComponent<T>);\n\n readonly config: DbxInjectionComponentConfig<ChecklistItemFieldDisplayComponent<T>> = {\n componentClass: this.checklistItemFieldComponent.componentClass,\n init: (instance) => {\n cleanSubscription(\n this.checklistItemFieldComponent.displayContent$.subscribe((content: ChecklistItemDisplayContent<T>) => {\n instance.setDisplayContent(content);\n })\n );\n }\n };\n}\n\nexport interface DbxChecklistItemFieldProps<T = unknown> extends FormlyFieldProps {\n /**\n * Observable used to retrieve content to display for the item.\n */\n readonly displayContent: Observable<ChecklistItemDisplayContent<T>>;\n /**\n * Custom component class to use by default.\n */\n readonly componentClass?: Type<ChecklistItemFieldDisplayComponent<T>>;\n}\n\n@Component({\n templateUrl: 'checklist.item.field.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [ReactiveFormsModule, MatCheckboxModule, DbxAnchorComponent, MatRippleModule, MatIconModule, DbxChecklistItemContentComponent]\n})\nexport class DbxChecklistItemFieldComponent<T = unknown> extends FieldType<FieldTypeConfig<DbxChecklistItemFieldProps<T>>> implements OnInit {\n private readonly _displayContentObs = signal<Maybe<Observable<ChecklistItemDisplayContent<T>>>>(undefined);\n\n readonly displayContent$: Observable<ChecklistItemDisplayContent<T>> = toObservable(this._displayContentObs).pipe(switchMapFilterMaybe(), distinctUntilChanged(), shareReplay(1));\n\n readonly anchor$ = this.displayContent$.pipe(\n map((x: ChecklistItemDisplayContent<T>) => x.anchor),\n shareReplay(1)\n );\n\n readonly rippleDisabled$ = this.displayContent$.pipe(\n map((x: ChecklistItemDisplayContent<T>) => x.ripple === false || (x.ripple !== true && !x.anchor)),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly anchorSignal = toSignal(this.anchor$);\n readonly rippleDisabledSignal = toSignal(this.rippleDisabled$, { initialValue: false });\n\n get formGroup(): FormGroup {\n return this.form as FormGroup;\n }\n\n get formControlName(): string {\n return this.key as string;\n }\n\n get label(): Maybe<string> {\n return this.props.label;\n }\n\n get description(): Maybe<string> {\n return this.props.description;\n }\n\n get required(): Maybe<boolean> {\n return this.props.required;\n }\n\n get checklistField(): DbxChecklistItemFieldProps<T> {\n return this.props;\n }\n\n get errors(): Maybe<ValidationErrors> {\n return this.field.formControl?.errors;\n }\n\n get componentClass(): Type<ChecklistItemFieldDisplayComponent<T>> {\n return this.checklistField.componentClass ?? DbxDefaultChecklistItemFieldDisplayComponent;\n }\n\n ngOnInit() {\n // field prop is finally available here\n this._displayContentObs.set(this.checklistField.displayContent);\n }\n}\n","<div class=\"dbx-checklist-item-wrapper\" [formGroup]=\"formGroup\">\n @if (label) {\n <div class=\"dbx-checklist-item-label\">{{ label }}</div>\n }\n <div class=\"dbx-checklist-item\">\n <div class=\"dbx-checklist-item-check\">\n <mat-checkbox [formControlName]=\"formControlName\"></mat-checkbox>\n </div>\n <div class=\"dbx-checklist-item-content-wrapper\">\n <dbx-anchor [block]=\"true\" [anchor]=\"anchorSignal()\">\n <div class=\"dbx-checklist-item-content\" matRipple [matRippleDisabled]=\"rippleDisabledSignal()\">\n <dbx-checklist-item-content-component></dbx-checklist-item-content-component>\n <span class=\"spacer\"></span>\n @if (!rippleDisabledSignal()) {\n <mat-icon>navigate_next</mat-icon>\n }\n </div>\n </dbx-anchor>\n </div>\n </div>\n @if (description) {\n <div class=\"dbx-hint\">{{ description }}</div>\n }\n</div>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { FieldWrapper, FormlyFieldConfig, FormlyFieldProps } from '@ngx-formly/core';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\n\nexport interface DbxFormInfoConfig extends FormlyFieldProps {\n readonly onInfoClick: () => void;\n}\n\n@Component({\n template: `\n <div class=\"dbx-form-info-wrapper dbx-flex-bar\">\n <div class=\"dbx-form-info-wrapper-content dbx-flex-grow\">\n <ng-container #fieldComponent></ng-container>\n </div>\n <div class=\"dbx-form-info-wrapper-info dbx-flex-noshrink dbx-flex-column dbx-flex-center\">\n <button mat-icon-button [attr.aria-label]=\"'show info button for ' + (to.label || 'section')\" (click)=\"onInfoClick()\">\n <mat-icon>info</mat-icon>\n </button>\n </div>\n </div>\n `,\n imports: [MatIconButton, MatIconModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFormInfoWrapperComponent extends FieldWrapper<FormlyFieldConfig<DbxFormInfoConfig>> {\n get infoWrapper(): DbxFormInfoConfig {\n return this.props;\n }\n\n onInfoClick(): void {\n this.infoWrapper.onInfoClick();\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { DbxSectionHeaderConfig, DbxSectionLayoutModule } from '@dereekb/dbx-web';\nimport { type Maybe } from '@dereekb/util';\nimport { FieldWrapper, FormlyFieldConfig } from '@ngx-formly/core';\n\nexport type DbxFormSectionConfig = DbxSectionHeaderConfig;\n\n@Component({\n selector: 'dbx-form-section-wrapper',\n template: `\n <dbx-section [headerConfig]=\"headerConfig\">\n <ng-container #fieldComponent></ng-container>\n </dbx-section>\n `,\n imports: [DbxSectionLayoutModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFormSectionWrapperComponent extends FieldWrapper<FormlyFieldConfig<DbxFormSectionConfig>> {\n get headerConfig(): Maybe<DbxSectionHeaderConfig> {\n return this.props;\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { DbxFlexGroupDirective, ScreenMediaWidthType } from '@dereekb/dbx-web';\nimport { FieldWrapper, FormlyFieldConfig } from '@ngx-formly/core';\n\nexport interface DbxFlexWrapperConfig {\n /**\n * Breakpoint based on the screen width.\n */\n readonly breakpoint?: ScreenMediaWidthType;\n /**\n * Whether or not to use relative sizing.\n */\n readonly relative?: boolean;\n /**\n * Whether or not to break to a new column when the breakpoint is reached.\n */\n readonly breakToColumn?: boolean;\n}\n\n@Component({\n template: `\n <div class=\"dbx-form-flex-section\" dbxFlexGroup [content]=\"false\" [relative]=\"relative\" [breakpoint]=\"breakpoint\" [breakToColumn]=\"breakToColumn\">\n <ng-container #fieldComponent></ng-container>\n </div>\n `,\n imports: [DbxFlexGroupDirective],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFormFlexWrapperComponent extends FieldWrapper<FormlyFieldConfig<DbxFlexWrapperConfig>> {\n get flexWrapper(): DbxFlexWrapperConfig {\n return this.props;\n }\n\n get breakpoint() {\n return this.flexWrapper.breakpoint;\n }\n\n get relative() {\n return this.flexWrapper.relative ?? false;\n }\n\n get breakToColumn() {\n return this.flexWrapper.breakToColumn ?? false;\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { DbxSectionHeaderConfig, DbxSubSectionComponent } from '@dereekb/dbx-web';\nimport { type Maybe } from '@dereekb/util';\nimport { FieldTypeConfig, FieldWrapper } from '@ngx-formly/core';\n\nexport type DbxFormSubsectionConfig = DbxSectionHeaderConfig;\n\n@Component({\n selector: 'dbx-form-subsection-wrapper',\n template: `\n <dbx-subsection [headerConfig]=\"headerConfig\">\n <ng-container #fieldComponent></ng-container>\n </dbx-subsection>\n `,\n imports: [DbxSubSectionComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFormSubsectionWrapperComponent extends FieldWrapper<FieldTypeConfig<DbxFormSubsectionConfig>> {\n get headerConfig(): Maybe<DbxSectionHeaderConfig> {\n return this.props;\n }\n}\n","import { Maybe, objectIsEmpty } from '@dereekb/util';\nimport { FieldWrapper, FormlyFieldProps, FormlyFieldConfig } from '@ngx-formly/core';\nimport { map, shareReplay, startWith, switchMap, BehaviorSubject, of, distinctUntilChanged } from 'rxjs';\nimport { Directive, OnDestroy, OnInit } from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\nimport { filterMaybe } from '@dereekb/rxjs';\nimport { toSignal } from '@angular/core/rxjs-interop';\n\nexport interface AbstractFormExpandSectionConfig<T extends object = object> extends Pick<FormlyFieldProps, 'label'> {\n expandLabel?: string;\n /**\n * Optional function to use for checking value existence.\n */\n hasValueFn?: (value: T) => boolean;\n}\n\nexport const DEFAULT_HAS_VALUE_FN = (x: object) => !objectIsEmpty(x);\n\n@Directive()\nexport class AbstractFormExpandSectionWrapperDirective<T extends object = object, S extends AbstractFormExpandSectionConfig<T> = AbstractFormExpandSectionConfig<T>> extends FieldWrapper<FormlyFieldConfig<S>> implements OnInit, OnDestroy {\n protected readonly _formControlObs = new BehaviorSubject<Maybe<AbstractControl>>(undefined);\n protected readonly _toggleOpen = new BehaviorSubject<Maybe<boolean>>(undefined);\n\n readonly formControl$ = this._formControlObs.pipe(filterMaybe());\n\n readonly show$ = this._toggleOpen.pipe(\n switchMap((toggleOpen: Maybe<boolean>) => {\n if (toggleOpen != null) {\n return of(toggleOpen);\n } else {\n return this.hasValue$;\n }\n }),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly hasValue$ = this.formControl$.pipe(\n switchMap((x) =>\n x.valueChanges.pipe(\n startWith(x.value),\n map((value) => {\n return this.hasValueFn(value);\n }),\n shareReplay(1)\n )\n )\n );\n\n readonly showSignal = toSignal(this.show$, { initialValue: false });\n readonly hasValueSignal = toSignal(this.hasValue$, { initialValue: false });\n\n get expandSection(): S {\n return this.props;\n }\n\n get hasValueFn(): (value: T) => boolean {\n return this.expandSection.hasValueFn ?? (DEFAULT_HAS_VALUE_FN as (value: T) => boolean);\n }\n\n get expandLabel(): Maybe<string> {\n let label: Maybe<string> = this.expandSection.expandLabel ?? this.field.props?.label;\n\n if (label == null) {\n const firstFieldGroup = this.field.fieldGroup?.[0];\n\n if (firstFieldGroup) {\n label = firstFieldGroup.props?.label ?? (firstFieldGroup.key as string);\n }\n }\n\n return label;\n }\n\n open(): void {\n this._toggleOpen.next(true);\n }\n\n ngOnInit(): void {\n this._formControlObs.next(this.formControl);\n }\n\n ngOnDestroy(): void {\n this._toggleOpen.complete();\n this._formControlObs.complete();\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { AbstractFormExpandSectionWrapperDirective, AbstractFormExpandSectionConfig } from './expand.wrapper.delegate';\n\nexport type DbxFormExpandWrapperButtonType = 'button' | 'text';\n\nexport interface DbxFormExpandWrapperConfig<T extends object = object> extends AbstractFormExpandSectionConfig<T> {\n readonly buttonType?: DbxFormExpandWrapperButtonType;\n}\n\n/**\n * Section that is expandable by a button until a value is set, or the button is pressed.\n */\n@Component({\n template: `\n @if (showSignal()) {\n <ng-container #fieldComponent></ng-container>\n } @else {\n <span class=\"dbx-form-expand-wrapper-button\" (click)=\"open()\">{{ expandLabel }}</span>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFormExpandWrapperComponent<T extends object = object> extends AbstractFormExpandSectionWrapperDirective<T, DbxFormExpandWrapperConfig<T>> {\n get buttonType(): DbxFormExpandWrapperButtonType {\n return this.expandSection.buttonType ?? 'button';\n }\n}\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\nimport { FieldTypeConfig, FieldWrapper } from '@ngx-formly/core';\nimport { delay } from 'rxjs';\n\n/**\n * Wrapper than sets the field to \"touched\" when the value changes and the field is not pristine.\n */\n@Component({\n template: `\n <ng-container #fieldComponent></ng-container>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class AutoTouchFieldWrapperComponent extends FieldWrapper<FieldTypeConfig> implements OnInit {\n ngOnInit(): void {\n this.formControl.valueChanges.pipe(delay(200)).subscribe(() => {\n if (!this.formControl.pristine && this.formControl.untouched) {\n this.formControl.markAsTouched();\n this.formControl.updateValueAndValidity();\n }\n });\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { type Maybe } from '@dereekb/util';\nimport { first, shareReplay, switchMap, Observable, of } from 'rxjs';\nimport { AbstractFormExpandSectionConfig, AbstractFormExpandSectionWrapperDirective } from './expand.wrapper.delegate';\nimport { MatSlideToggle } from '@angular/material/slide-toggle';\nimport { toSignal } from '@angular/core/rxjs-interop';\n\nexport interface DbxFormToggleWrapperConfig<T extends object = object> extends AbstractFormExpandSectionConfig<T> {\n toggleLabelObs?: (open: Maybe<boolean>) => Observable<string>;\n}\n\n/**\n * Section that can be expanded by a button until a value is set, or the button is pressed.\n */\n@Component({\n template: `\n <div class=\"dbx-form-toggle-wrapper\">\n <div class=\"dbx-form-toggle-wrapper-toggle\">\n <mat-slide-toggle [checked]=\"showSignal()\" (toggleChange)=\"onToggleChange()\">{{ slideLabelSignal() }}</mat-slide-toggle>\n </div>\n @if (showSignal()) {\n <ng-container #fieldComponent></ng-container>\n }\n </div>\n `,\n imports: [MatSlideToggle],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFormToggleWrapperComponent<T extends object = object> extends AbstractFormExpandSectionWrapperDirective<T, DbxFormToggleWrapperConfig> {\n readonly slideLabel$ = this._toggleOpen.pipe(\n switchMap((x) => {\n if (this.expandSection?.toggleLabelObs) {\n return this.expandSection?.toggleLabelObs(x);\n } else {\n return of(this.expandLabel);\n }\n }),\n shareReplay(1)\n );\n\n readonly slideLabelSignal = toSignal(this.slideLabel$, { initialValue: '' });\n\n onToggleChange(): void {\n this.show$.pipe(first()).subscribe((show) => {\n this._toggleOpen.next(!show);\n });\n }\n}\n","import { NgClass, NgStyle } from '@angular/common';\nimport { OnInit, OnDestroy, Component, ChangeDetectionStrategy } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { asObservable, ObservableOrValue, switchMapMaybeDefault } from '@dereekb/rxjs';\nimport { type Maybe } from '@dereekb/util';\nimport { FieldWrapper, FormlyFieldConfig } from '@ngx-formly/core';\nimport { BehaviorSubject, Observable, shareReplay } from 'rxjs';\n\nexport type DbxFormStyleObject = { [styleClass: string]: any };\n\nexport interface DbxFormStyleWrapperConfig {\n styleGetter?: Maybe<ObservableOrValue<DbxFormStyleObject>>;\n classGetter?: Maybe<ObservableOrValue<string>>;\n}\n\n@Component({\n template: `\n <div class=\"dbx-form-style-wrapper\" [ngClass]=\"classSignal()\" [ngStyle]=\"styleSignal()\">\n <ng-container #fieldComponent></ng-container>\n </div>\n `,\n imports: [NgClass, NgStyle],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFormStyleWrapperComponent extends FieldWrapper<FormlyFieldConfig<DbxFormStyleWrapperConfig>> implements OnInit, OnDestroy {\n private readonly _style = new BehaviorSubject<Maybe<Observable<DbxFormStyleObject>>>(undefined);\n private readonly _class = new BehaviorSubject<Maybe<Observable<string>>>(undefined);\n\n readonly style$ = this._style.pipe(switchMapMaybeDefault({}), shareReplay(1));\n readonly class$ = this._class.pipe(switchMapMaybeDefault(''), shareReplay(1));\n\n readonly styleSignal = toSignal(this.style$);\n readonly classSignal = toSignal(this.class$);\n\n get styleGetter(): Maybe<ObservableOrValue<DbxFormStyleObject>> {\n return this.props.styleGetter;\n }\n\n get classGetter(): Maybe<ObservableOrValue<string>> {\n return this.props.classGetter;\n }\n\n ngOnInit(): void {\n if (this.styleGetter) {\n this._style.next(asObservable(this.styleGetter));\n }\n\n if (this.classGetter) {\n this._class.next(asObservable(this.classGetter));\n }\n }\n\n ngOnDestroy(): void {\n this._style.complete();\n this._class.complete();\n }\n}\n","import { OnInit, OnDestroy, Component, ChangeDetectionStrategy } from '@angular/core';\nimport { DbxLoadingComponent } from '@dereekb/dbx-web';\nimport { SimpleLoadingContext, SubscriptionObject } from '@dereekb/rxjs';\nimport { FieldWrapper, FormlyFieldConfig } from '@ngx-formly/core';\n\n/**\n * No configurable value for now.\n */\nexport type DbxFormWorkingWrapperConfig = object;\n\n/**\n * Adds a loading bar to help signify asynchronous work is occuring.\n *\n * By default shows loading during asynchronous validation of a field (FormControl status is \"PENDING\")\n */\n@Component({\n template: `\n <div class=\"dbx-form-working-wrapper\">\n <ng-container #fieldComponent></ng-container>\n <dbx-loading [linear]=\"true\" [context]=\"workingContext\"></dbx-loading>\n </div>\n `,\n imports: [DbxLoadingComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFormWorkingWrapperComponent extends FieldWrapper<FormlyFieldConfig<DbxFormWorkingWrapperConfig>> implements OnInit, OnDestroy {\n readonly sub = new SubscriptionObject();\n readonly workingContext = new SimpleLoadingContext(false);\n\n ngOnInit(): void {\n this.sub.subscription = this.formControl?.statusChanges.subscribe({\n next: (x) => this.workingContext.setLoading(x === 'PENDING')\n });\n }\n\n ngOnDestroy(): void {\n this.workingContext.destroy();\n this.sub.destroy();\n }\n}\n","export const AUTO_TOUCH_WRAPPER_KEY = 'autotouch';\nexport const TOGGLE_WRAPPER_KEY = 'toggle';\nexport const SECTION_WRAPPER_KEY = 'section';\nexport const SUBSECTION_WRAPPER_KEY = 'subsection';\nexport const INFO_WRAPPER_KEY = 'info';\nexport const FLEX_WRAPPER_KEY = 'flex';\nexport const STYLE_WRAPPER_KEY = 'style';\nexport const WORKING_WRAPPER_KEY = 'working';\nexport const EXPAND_WRAPPER_KEY = 'expand';\n","import { NgModule } from '@angular/core';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxFormInfoWrapperComponent } from './info.wrapper.component';\nimport { DbxFormSectionWrapperComponent } from './section.wrapper.component';\nimport { DbxFormFlexWrapperComponent } from './flex.wrapper.component';\nimport { DbxFormSubsectionWrapperComponent } from './subsection.wrapper.component';\nimport { DbxFormExpandWrapperComponent } from './expand.wrapper.component';\nimport { AutoTouchFieldWrapperComponent } from './autotouch.wrapper.component';\nimport { DbxFormToggleWrapperComponent } from './toggle.wrapper.component';\nimport { DbxFormStyleWrapperComponent } from './style.wrapper.component';\nimport { DbxFormWorkingWrapperComponent } from './working.wrapper.component';\nimport { AUTO_TOUCH_WRAPPER_KEY, EXPAND_WRAPPER_KEY, FLEX_WRAPPER_KEY, INFO_WRAPPER_KEY, SECTION_WRAPPER_KEY, STYLE_WRAPPER_KEY, SUBSECTION_WRAPPER_KEY, TOGGLE_WRAPPER_KEY, WORKING_WRAPPER_KEY } from './wrapper.key';\nimport { FormlyMaterialModule } from '@ngx-formly/material';\n\nconst importsAndExports = [\n AutoTouchFieldWrapperComponent,\n DbxFormSectionWrapperComponent,\n DbxFormSubsectionWrapperComponent,\n DbxFormInfoWrapperComponent,\n DbxFormExpandWrapperComponent,\n DbxFormToggleWrapperComponent,\n DbxFormFlexWrapperComponent,\n DbxFormStyleWrapperComponent,\n DbxFormWorkingWrapperComponent,\n // Formly\n FormlyModule,\n FormlyMaterialModule\n];\n\n@NgModule({\n imports: [\n ...importsAndExports,\n FormlyModule.forChild({\n wrappers: [\n { name: AUTO_TOUCH_WRAPPER_KEY, component: AutoTouchFieldWrapperComponent },\n { name: EXPAND_WRAPPER_KEY, component: DbxFormExpandWrapperComponent },\n { name: TOGGLE_WRAPPER_KEY, component: DbxFormToggleWrapperComponent },\n { name: SECTION_WRAPPER_KEY, component: DbxFormSectionWrapperComponent },\n { name: SUBSECTION_WRAPPER_KEY, component: DbxFormSubsectionWrapperComponent },\n { name: INFO_WRAPPER_KEY, component: DbxFormInfoWrapperComponent },\n { name: FLEX_WRAPPER_KEY, component: DbxFormFlexWrapperComponent },\n { name: STYLE_WRAPPER_KEY, component: DbxFormStyleWrapperComponent },\n { name: WORKING_WRAPPER_KEY, component: DbxFormWorkingWrapperComponent }\n ]\n })\n ],\n exports: importsAndExports\n})\nexport class DbxFormFormlyWrapperModule {}\n","import { NgModule } from '@angular/core';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxFormFormlyWrapperModule } from '../wrapper/wrapper.module';\nimport { DbxChecklistItemContentComponent, DbxChecklistItemFieldComponent } from './checklist.item.field.component';\nimport { DbxDefaultChecklistItemFieldDisplayComponent } from './checklist.item.field.content.default.component';\n\nconst importsAndExports = [DbxChecklistItemFieldComponent, DbxChecklistItemContentComponent, DbxDefaultChecklistItemFieldDisplayComponent];\n\n@NgModule({\n imports: [\n ...importsAndExports,\n DbxFormFormlyWrapperModule,\n FormlyModule.forChild({\n types: [{ name: 'checklistitem', component: DbxChecklistItemFieldComponent }]\n })\n ],\n exports: importsAndExports\n})\nexport class DbxFormFormlyChecklistItemFieldModule {}\n","import { type AsyncValidatorFn, type ValidatorFn } from '@angular/forms';\nimport { mergeObjects, filterFromPOJO, mergeObjectsFunction, filterFromPOJOFunction, type FilterKeyValueTuplesInput, type GeneralFilterFromPOJOFunction, type ArrayOrValue, type Maybe, asArray, objectHasNoKeys, type MapFunction } from '@dereekb/util';\nimport { type FormlyFieldConfig, type FormlyFieldProps } from '@ngx-formly/core';\nimport { type ValidationMessageOption } from '../type';\nimport { type FormlyFieldProps as MaterialFormlyFormFieldProps } from '@ngx-formly/material/form-field';\n\nexport type FormlyValueParser<I = any, O = any> = MapFunction<I, O>;\n\nexport interface FieldConfigParsersRef {\n parsers: FormlyValueParser[];\n}\n\nexport interface FieldConfig extends Pick<FormlyFieldConfig, 'expressions' | 'parsers'>, Partial<FieldConfigParsersRef> {\n key: string;\n required?: boolean;\n readonly?: boolean;\n}\n\nexport interface FieldConfigWithParsers {\n parsers?: FormlyValueParser[];\n}\n\nexport type DisableAutocompleteForField = false;\n\nexport interface LabeledFieldConfig extends FieldConfig {\n key: string;\n label?: string;\n placeholder?: string;\n required?: boolean;\n readonly?: boolean;\n /**\n * Sets the autocomplete values.\n */\n autocomplete?: string | DisableAutocompleteForField;\n}\n\nexport interface DefaultValueFieldConfig<T = unknown> {\n defaultValue?: T;\n}\n\nexport interface AttributesFieldConfig {\n attributes?: {\n [key: string]: string | number;\n };\n}\n\nexport interface DescriptionFieldConfig {\n description?: string;\n}\n\nexport type PartialPotentialFieldConfig = Partial<FieldConfig> & Partial<LabeledFieldConfig> & Partial<AttributesFieldConfig> & Partial<DescriptionFieldConfig>;\n\n/**\n * Validates the configuration on the input field.\n */\nexport function formlyField<T extends FormlyFieldConfig = FormlyFieldConfig>(fieldConfig: T): T {\n if (!fieldConfig.key) {\n console.error(fieldConfig);\n throw new Error(`Field had a null key.`);\n }\n\n return fieldConfig;\n}\n\n/**\n * Creates an object with propers, expressions, and parsers properly configured from the input FieldConfig.\n *\n * @param fieldConfig\n * @param override\n * @returns\n */\nexport function propsAndConfigForFieldConfig<O extends object = object>(fieldConfig: Partial<FieldConfig> & Partial<LabeledFieldConfig> & Partial<AttributesFieldConfig> & Partial<DescriptionFieldConfig>, override?: PartialPotentialFieldConfig & O) {\n const { expressions, parsers } = fieldConfig;\n const props = propsValueForFieldConfig(fieldConfig, override);\n\n return {\n props,\n expressions,\n parsers\n };\n}\n\nexport const partialPotentialFieldConfigKeys: (keyof PartialPotentialFieldConfig)[] = ['label', 'placeholder', 'required', 'readonly', 'description', 'autocomplete'];\nexport const partialPotentialFieldConfigKeysFilter: FilterKeyValueTuplesInput<PartialPotentialFieldConfig> = {\n keysFilter: partialPotentialFieldConfigKeys\n};\n\nexport const mergePropsValueObjects = mergeObjectsFunction<PartialPotentialFieldConfig>(partialPotentialFieldConfigKeysFilter);\n\nexport const filterPartialPotentialFieldConfigValuesFromObject = filterFromPOJOFunction<PartialPotentialFieldConfig>({\n filter: partialPotentialFieldConfigKeysFilter\n}) as GeneralFilterFromPOJOFunction<PartialPotentialFieldConfig>;\n\nexport function propsValueForFieldConfig<T extends FormlyFieldProps, O extends object = object>(fieldConfig: PartialPotentialFieldConfig, override?: PartialPotentialFieldConfig & O): Partial<T> & O {\n const { label, placeholder, required, readonly, description, autocomplete } = mergePropsValueObjects([fieldConfig, override]);\n const attributes = mergeObjects([fieldConfig.attributes, override?.attributes]);\n\n const result = filterFromPOJO({\n ...override,\n label,\n placeholder,\n required,\n readonly,\n description,\n attributes\n }) as T & O;\n\n // Apply autocomplete\n if (autocomplete != null) {\n if (autocomplete === false) {\n result.attributes = {\n ...result.attributes,\n ...disableFormlyFieldAutofillAttributes()\n };\n } else {\n (\n result.attributes as {\n [key: string]: string | number;\n }\n )['autocomplete'] = autocomplete;\n }\n }\n\n return result;\n}\n\n/**\n * Returns configuration for a formlyField that will disable autofill/autocomplete for a field.\n */\nexport function disableFormlyFieldAutofillAttributes(): { name: string; autocomplete: string } {\n // https://stackoverflow.com/questions/15738259/disabling-chrome-autofill\n return {\n name: 'password',\n autocomplete: 'off'\n };\n}\n\nexport type FormlyMessageProperties = {\n [messageProperties: string]: ValidationMessageOption['message'];\n};\n\nexport interface ValidatorsForFieldConfigInput {\n validators?: ArrayOrValue<ValidatorFn>;\n asyncValidators?: ArrayOrValue<AsyncValidatorFn>;\n messages?: Maybe<FormlyMessageProperties>;\n}\n\nexport type ValidatorsForFieldConfig = {\n validation?: {\n messages?: FormlyMessageProperties;\n };\n validators?: {\n validation: ValidatorFn[];\n };\n asyncValidators?: {\n validation: AsyncValidatorFn[];\n };\n};\n\nexport function validatorsForFieldConfig(input: ValidatorsForFieldConfigInput): Maybe<ValidatorsForFieldConfig> {\n const validators: ValidatorFn[] = asArray(input.validators);\n const asyncValidators: AsyncValidatorFn[] = asArray(input.asyncValidators);\n const messages: Maybe<FormlyMessageProperties> = input.messages;\n let config: Maybe<ValidatorsForFieldConfig>;\n\n if (messages || validators.length || asyncValidators.length) {\n config = {};\n\n if (validators.length) {\n config.validators = {\n validation: validators\n };\n }\n\n if (asyncValidators.length) {\n config.validators = {\n validation: asyncValidators\n };\n }\n\n if (messages && !objectHasNoKeys(messages)) {\n config.validation = {\n messages\n };\n }\n }\n\n return config;\n}\n\n// MARK: Material\nexport interface MaterialFormFieldConfig {\n readonly materialFormField?: Partial<Pick<MaterialFormlyFormFieldProps, 'prefix' | 'suffix' | 'hideLabel' | 'hideRequiredMarker' | 'hideFieldUnderline' | 'floatLabel' | 'appearance' | 'color' | 'hintStart' | 'hintEnd'>>;\n}\n","import { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig } from '../field';\nimport { type DbxChecklistItemFieldProps } from './checklist.item.field.component';\n\nexport interface ChecklistItemFieldConfig<T = unknown> extends LabeledFieldConfig, DbxChecklistItemFieldProps<T> {}\nexport type ChecklistItemFieldBuilderInput<T = unknown> = Partial<ChecklistItemFieldConfig<T>> & Pick<ChecklistItemFieldConfig<T>, 'key' | 'displayContent'>;\n\nexport function checklistItemField<T = unknown>(config: ChecklistItemFieldBuilderInput<T>): FormlyFieldConfig<DbxChecklistItemFieldProps<T>> {\n const { key, displayContent, componentClass } = config;\n\n const fieldConfig = formlyField({\n key,\n type: 'checklistitem',\n ...propsAndConfigForFieldConfig(config, {\n displayContent,\n componentClass\n })\n });\n\n return fieldConfig;\n}\n","import { type Observable, combineLatest, map, shareReplay } from 'rxjs';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type ChecklistItemDisplayContent } from './checklist.item';\nimport { type Configurable, type KeyValueTransformMap, addPlusPrefixToNumber, type Maybe } from '@dereekb/util';\nimport { checklistItemField, type ChecklistItemFieldBuilderInput } from './checklist.item.field';\n\nexport type ChecklistItemFieldDataSetFieldKey<D> = keyof D & string;\nexport type ChecklistItemFieldDataSetFieldValueForKey<D, K extends keyof D = keyof D> = D[K];\nexport type ChecklistType<D> = KeyValueTransformMap<D, boolean>;\n\nexport type ChecklistItemFieldDataSetBuilderInput<D, T> = { key: ChecklistItemFieldDataSetFieldKey<D> } & ChecklistItemFieldBuilderInput<T>;\n\nexport interface ChecklistItemFieldDataSetItem<D, T extends ChecklistType<D>> {\n /**\n * Key for the field.\n */\n readonly key: ChecklistItemFieldDataSetFieldKey<T>;\n /**\n * Base field configuration to use.\n */\n readonly field: ChecklistItemFieldBuilderInput<T>;\n}\n\n/**\n * Used for building a set of configurations for a data-type object that has as second object that is used as a checklist.\n */\nexport class ChecklistItemFieldDataSetBuilder<D extends object, C extends ChecklistType<D> = ChecklistType<D>> {\n private readonly _fields = new Map<ChecklistItemFieldDataSetFieldKey<C>, ChecklistItemFieldDataSetItem<D, ChecklistType<D>>>();\n\n readonly dataObs$: Observable<D>;\n\n constructor(dataObs: Observable<D>) {\n this.dataObs$ = dataObs;\n }\n\n /**\n * Merges the input config with existing configuration.\n *\n * The displayContentObs, if provided, will merge with the existing observable and the two objects merged.\n */\n merge<T>(key: ChecklistItemFieldDataSetFieldKey<D>, config: Partial<ChecklistItemFieldBuilderInput<T>>) {\n const currentField = this._assertFieldExists(key).field;\n const mergedConfig: Configurable<ChecklistItemFieldDataSetBuilderInput<D, T>> = {\n ...currentField,\n ...config,\n key\n } as any;\n\n if (currentField.displayContent && config.displayContent) {\n mergedConfig.displayContent = combineLatest([currentField.displayContent, config.displayContent]).pipe(\n map(([a, b]) => {\n const result = {\n ...a,\n ...b\n };\n\n // console.log('A and b: ', a, b, result);\n return result;\n }),\n shareReplay(1)\n );\n }\n\n // console.log('Merged: ', mergedConfig);\n\n this.field(mergedConfig);\n }\n\n override<T>(key: ChecklistItemFieldDataSetFieldKey<D>, config: Partial<ChecklistItemFieldBuilderInput<T>>) {\n const currentField = this._assertFieldExists(key);\n\n this.field({\n ...currentField.field,\n ...config,\n key\n });\n }\n\n _assertFieldExists(key: ChecklistItemFieldDataSetFieldKey<D>): ChecklistItemFieldDataSetItem<D, any> {\n const currentField = this._fields.get(key);\n\n if (!currentField) {\n throw new Error(`Expected field with key \"${key}\" for override() but was unavailable.`);\n }\n\n return currentField;\n }\n\n showValueFieldArrayCount<T extends ChecklistItemFieldDataSetFieldValueForKey<D> & Array<unknown>>(key: ChecklistItemFieldDataSetFieldKey<D>, config?: Partial<ChecklistItemFieldDataSetBuilderInput<D, T>>) {\n return this.field({\n displayContent: this.contentWithDisplayValueFromData(key, (x: T) => addPlusPrefixToNumber(x?.length)),\n ...config,\n key\n });\n }\n\n showValueField<T extends ChecklistItemFieldDataSetFieldValueForKey<D> = ChecklistItemFieldDataSetFieldValueForKey<D>>(key: ChecklistItemFieldDataSetFieldKey<D>, config?: Partial<ChecklistItemFieldDataSetBuilderInput<D, T>>, labelFn: (value: T) => Maybe<string> = (x: T) => (x as unknown as object | number | string)?.toString()) {\n return this.field({\n displayContent: this.contentWithDisplayValueFromData(key, labelFn),\n ...config,\n key\n });\n }\n\n field<T>(config: ChecklistItemFieldDataSetBuilderInput<D, T>) {\n const key = config.key;\n\n const field: ChecklistItemFieldDataSetItem<D, ChecklistType<D>> = {\n key,\n field: config as unknown as ChecklistItemFieldBuilderInput<ChecklistType<D>>\n };\n\n this._fields.set(key, field);\n }\n\n // MARK: Build/Finish\n build(): FormlyFieldConfig[] {\n return Array.from(this._fields.values()).map(({ field }) => {\n return checklistItemField(field);\n });\n }\n\n // MARK: Utility\n customContentFromData<T extends ChecklistItemFieldDataSetFieldValueForKey<D> = ChecklistItemFieldDataSetFieldValueForKey<D>>(mapFn: (data: D) => ChecklistItemDisplayContent<T>): Observable<ChecklistItemDisplayContent<T>> {\n return this.dataObs$.pipe(map(mapFn));\n }\n\n contentWithValueFromData<K extends keyof D = keyof D, T extends ChecklistItemFieldDataSetFieldValueForKey<D> = ChecklistItemFieldDataSetFieldValueForKey<D>>(key: K, contentFn?: (value: T) => ChecklistItemDisplayContent<T>): Observable<ChecklistItemDisplayContent<T>> {\n return this.customContentFromData((data) => {\n const meta = data[key] as unknown as T;\n const content = contentFn?.(meta);\n\n return {\n meta,\n ...content\n };\n });\n }\n\n contentWithDisplayValueFromData<T extends ChecklistItemFieldDataSetFieldValueForKey<D> = ChecklistItemFieldDataSetFieldValueForKey<D>>(key: ChecklistItemFieldDataSetFieldKey<D>, labelFn: (value: T) => Maybe<string> = (x: T) => (x as unknown as object | number | string)?.toString()): Observable<ChecklistItemDisplayContent<T>> {\n function sanitizeLabel(label: Maybe<string>): string {\n return label ?? 'N/A';\n }\n\n return this.contentWithValueFromData(key, (value: T) => ({ label: sanitizeLabel(labelFn(value)) }));\n }\n}\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\nimport { DbxInjectionComponent, DbxInjectionComponentConfig } from '@dereekb/dbx-core';\nimport { FieldType, FormlyFieldConfig } from '@ngx-formly/core';\n\nexport type DbxFormComponentFieldConfig<T> = DbxInjectionComponentConfig<T>;\n\nexport interface DbxFormComponentFormlyFieldConfig<T = unknown> extends FormlyFieldConfig {\n componentField: DbxFormComponentFieldConfig<T>;\n}\n\n@Component({\n template: `\n <div class=\"dbx-form-component\" dbx-injection [config]=\"config\"></div>\n `,\n imports: [DbxInjectionComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFormComponentFieldComponent<T = unknown> extends FieldType<DbxFormComponentFormlyFieldConfig<T>> {\n get config(): DbxInjectionComponentConfig<T> {\n return this.field.componentField;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxFormComponentFieldComponent } from './component.field.component';\n\nconst importsAndExports = [DbxFormComponentFieldComponent];\n\n@NgModule({\n imports: [\n ...importsAndExports,\n FormlyModule.forChild({\n types: [{ name: 'component', component: DbxFormComponentFieldComponent }]\n })\n ],\n exports: importsAndExports\n})\nexport class DbxFormFormlyComponentFieldModule {}\n","import { type DbxFormComponentFieldConfig, type DbxFormComponentFormlyFieldConfig } from './component.field.component';\n\nexport type ComponentFieldConfig<T = unknown> = DbxFormComponentFieldConfig<T>;\n\nexport function componentField<T = unknown>(config: ComponentFieldConfig<T>): DbxFormComponentFormlyFieldConfig<T> {\n return {\n type: 'component',\n componentField: config\n };\n}\n","import { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig } from '../../field';\nimport { type DbxItemListFieldProps } from './list.field.component';\nimport { type AbstractDbxSelectionListWrapperDirective } from '@dereekb/dbx-web';\nimport { type PrimativeKey } from '@dereekb/util';\n\nexport interface DbxListFieldConfig<T = unknown, C extends AbstractDbxSelectionListWrapperDirective<T> = AbstractDbxSelectionListWrapperDirective<T>, K extends PrimativeKey = PrimativeKey> extends LabeledFieldConfig, DbxItemListFieldProps<T, C, K> {}\n\nexport function dbxListField<T = unknown, C extends AbstractDbxSelectionListWrapperDirective<T> = AbstractDbxSelectionListWrapperDirective<T>, K extends PrimativeKey = PrimativeKey>(config: DbxListFieldConfig<T, C, K>): FormlyFieldConfig {\n const { key, listComponentClass, readKey, state$, loadMore } = config;\n return formlyField({\n key,\n type: 'dbxlistfield',\n ...propsAndConfigForFieldConfig(config, {\n listComponentClass,\n readKey,\n state$,\n loadMore\n })\n });\n}\n","import { ChangeDetectionStrategy, Component, OnDestroy, OnInit, Type } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { AbstractControl } from '@angular/forms';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { DbxInjectionComponent, DbxInjectionComponentConfig } from '@dereekb/dbx-core';\nimport { AbstractDbxSelectionListWrapperDirective, ListSelectionState, DbxValueListItemDecisionFunction, dbxValueListItemDecisionFunction, DbxListModifierModule } from '@dereekb/dbx-web';\nimport { distinctUntilHasDifferentValues, filterMaybe, ListLoadingState, SubscriptionObject, switchMapFilterMaybe } from '@dereekb/rxjs';\nimport { convertMaybeToArray, hasDifferentValues, isSelectedDecisionFunctionFactory, Maybe, PrimativeKey, ReadKeyFunction, readKeysFrom } from '@dereekb/util';\nimport { FormlyFieldProps, FieldType, FieldTypeConfig } from '@ngx-formly/core';\nimport { map, Observable, shareReplay, BehaviorSubject, startWith, switchMap } from 'rxjs';\n\nexport interface DbxItemListFieldProps<T = unknown, C extends AbstractDbxSelectionListWrapperDirective<T> = AbstractDbxSelectionListWrapperDirective<T>, K extends PrimativeKey = PrimativeKey> extends Pick<FormlyFieldProps, 'label' | 'description'> {\n /**\n * List to render components from\n */\n readonly listComponentClass: Observable<Type<C>>;\n /**\n * Read key function to read the identifier from the input\n */\n readonly readKey: ReadKeyFunction<T, K>;\n /**\n * Observable that provides the items to select.\n */\n readonly state$: Observable<ListLoadingState<T>>;\n /**\n * Function that signals to load more items.\n */\n readonly loadMore?: () => void;\n}\n\n/**\n * Used for picking items by identifier from a DbxList component.\n */\n@Component({\n templateUrl: 'list.field.component.html',\n imports: [DbxListModifierModule, DbxInjectionComponent, MatDividerModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxItemListFieldComponent<T = unknown, C extends AbstractDbxSelectionListWrapperDirective<T> = AbstractDbxSelectionListWrapperDirective<T>, K extends PrimativeKey = PrimativeKey> extends FieldType<FieldTypeConfig<DbxItemListFieldProps<T, C, K>>> implements OnInit, OnDestroy {\n private readonly _selectionEventSub = new SubscriptionObject();\n private readonly _loadMoreSub = new SubscriptionObject();\n\n private readonly _formControlObs = new BehaviorSubject<Maybe<AbstractControl>>(undefined);\n readonly formControl$ = this._formControlObs.pipe(filterMaybe());\n\n readonly _formControlValue$: Observable<Maybe<K[]>> = this.formControl$.pipe(switchMap((control) => control.valueChanges.pipe(startWith(control.value), shareReplay(1))));\n readonly values$: Observable<K[]> = this._formControlValue$.pipe(map(convertMaybeToArray), shareReplay(1));\n\n private readonly _listComponentClassObs = new BehaviorSubject<Maybe<Observable<Type<C>>>>(undefined);\n readonly listComponentClass$ = this._listComponentClassObs.pipe(switchMapFilterMaybe());\n\n readonly config$: Observable<DbxInjectionComponentConfig<C>> = this.listComponentClass$.pipe(\n map((componentClass) => {\n const loadMore = this.loadMore;\n const config: DbxInjectionComponentConfig<C> = {\n componentClass,\n init: (listView) => {\n listView.setSelectionMode('select'); // always enable select\n listView.setState(this.field.props.state$);\n\n if (loadMore != null) {\n this._loadMoreSub.subscription = listView.loadMore.subscribe(() => loadMore());\n }\n\n // set subscription\n this._selectionEventSub.subscription = listView.selectionChange.subscribe((x) => this.updateForSelection(x));\n }\n };\n\n return config;\n })\n );\n\n readonly isSelectedModifierFunction$: Observable<DbxValueListItemDecisionFunction<T>> = this.values$.pipe(\n distinctUntilHasDifferentValues(),\n map((values) => {\n return dbxValueListItemDecisionFunction(isSelectedDecisionFunctionFactory({ readKey: this.readKey })(values));\n }),\n shareReplay(1)\n );\n\n readonly configSignal = toSignal(this.config$);\n readonly isSelectedModifierFunctionSignal = toSignal(this.isSelectedModifierFunction$);\n\n get label() {\n return this.field.props.label;\n }\n\n get description() {\n return this.field.props.description;\n }\n\n get listComponentClass() {\n return this.field.props.listComponentClass;\n }\n\n get readKey() {\n return this.field.props.readKey;\n }\n\n get loadMore() {\n return this.field.props.loadMore;\n }\n\n ngOnInit(): void {\n this._formControlObs.next(this.formControl);\n this._listComponentClassObs.next(this.listComponentClass);\n }\n\n ngOnDestroy(): void {\n this._formControlObs.complete();\n this._selectionEventSub.destroy();\n this._listComponentClassObs.complete();\n }\n\n updateForSelection(list: ListSelectionState<T>) {\n const items = list.items.filter((x) => x.selected).map((x) => x.itemValue);\n const values = readKeysFrom(this.readKey, items);\n this.setValues(values);\n }\n\n setValues(values: Maybe<K[]>): void {\n const currentValues = this.formControl.value;\n\n if (currentValues == null || hasDifferentValues(currentValues, values)) {\n this.formControl.setValue(values);\n this.formControl.markAsDirty();\n this.formControl.markAsTouched();\n }\n }\n}\n","<div class=\"dbx-list-item-field\" dbxListItemModifier [dbxListItemIsSelectedModifier]=\"isSelectedModifierFunctionSignal()\">\n @if (label) {\n <span class=\"dbx-label dbx-label-padded\">{{ label }}</span>\n }\n <div class=\"dbx-list-item-field-content\">\n <dbx-injection [config]=\"configSignal()\"></dbx-injection>\n </div>\n <mat-divider></mat-divider>\n @if (description) {\n <div class=\"dbx-form-description\">{{ description }}</div>\n }\n</div>\n","import { NgModule } from '@angular/core';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxItemListFieldComponent } from './list.field.component';\n\nconst importsAndExports = [DbxItemListFieldComponent];\n\n@NgModule({\n imports: [\n ...importsAndExports,\n FormlyModule.forChild({\n types: [{ name: 'dbxlistfield', component: DbxItemListFieldComponent }]\n })\n ],\n exports: importsAndExports\n})\nexport class DbxFormFormlyDbxListFieldModule {}\n","import { DbxInjectionComponentConfig } from '@dereekb/dbx-core';\nimport { LoadingState, successResult, mapLoadingStateResults, filterMaybe, mapIsListLoadingStateWithEmptyValue, startWithBeginLoading, SubscriptionObject, listLoadingStateContext } from '@dereekb/rxjs';\nimport { PrimativeKey, convertMaybeToArray, makeValuesGroupMap, Maybe, ArrayOrValue, separateValues, filterUniqueValues, Configurable } from '@dereekb/util';\nimport { Directive, OnDestroy, OnInit, viewChild } from '@angular/core';\nimport { FormControl, AbstractControl } from '@angular/forms';\nimport { MatInput } from '@angular/material/input';\nimport { FieldTypeConfig, FormlyFieldProps } from '@ngx-formly/core';\nimport { FieldType } from '@ngx-formly/material';\nimport { BehaviorSubject, combineLatest, Observable, of, filter, map, debounceTime, distinctUntilChanged, switchMap, startWith, shareReplay, mergeMap, first, delay } from 'rxjs';\nimport { PickableValueFieldDisplayFunction, PickableValueFieldDisplayValue, PickableValueFieldFilterFunction, PickableValueFieldHashFunction, PickableValueFieldLoadValuesFunction, PickableValueFieldValue } from './pickable';\nimport { DbxValueListItem } from '@dereekb/dbx-web';\nimport { camelCase } from 'change-case-all';\nimport { toSignal } from '@angular/core/rxjs-interop';\n\n/**\n * Wraps the selected state with the items.\n */\nexport type PickableItemFieldItem<T, M = unknown> = DbxValueListItem<PickableValueFieldDisplayValue<T, M>>;\n\nexport type PickableItemFieldItemSortFn<T, M = unknown> = (items: PickableItemFieldItem<T, M>[]) => PickableItemFieldItem<T, M>[];\n\nexport interface PickableValueFieldsFieldProps<T, M = unknown, H extends PrimativeKey = PrimativeKey> extends FormlyFieldProps {\n /**\n * Loads all pickable values.\n */\n readonly loadValues: PickableValueFieldLoadValuesFunction<T, M>;\n /**\n * Used for building a display value given the input.\n */\n readonly displayForValue: PickableValueFieldDisplayFunction<T, M>;\n /**\n * Used for hashing display values and omitting repeat values.\n *\n * If hashForValue is not provided, the value's value will be used as is.\n */\n readonly hashForValue?: PickableValueFieldHashFunction<T, H>;\n /**\n * Used for filtering values via the search text.\n */\n readonly filterValues?: PickableValueFieldFilterFunction<T, M>;\n /**\n * Used for sorting the items before they are displayed.\n *\n * Should only be used to sort values.\n */\n readonly sortItems?: PickableItemFieldItemSortFn<T, M>;\n /**\n * Whether or not to allow multiple items to be selected.\n */\n readonly multiSelect?: boolean;\n /**\n * Whether or not to set/get values as an array or a single value. If set false, multiSelect is ignored.\n */\n readonly asArrayValue?: boolean;\n /**\n * Whether or not to show the text filter. True by default if filterValues is provided.\n */\n readonly showTextFilter?: boolean;\n /**\n * Whether or not to skip the filter function when the input is empty.\n *\n * True by default.\n */\n readonly skipFilterFnOnEmpty?: boolean;\n /**\n * Filter Label\n */\n readonly filterLabel?: string;\n /**\n * The maximum number of values that can be picked\n */\n readonly maxPicks?: number;\n /**\n * Optional description/hint to display.\n */\n readonly description?: string;\n /**\n * Footer Display\n */\n readonly footerConfig?: DbxInjectionComponentConfig;\n /**\n * Changes the selection mode of the list to \"view\" mode on disabled, hiding the selection boxes.\n */\n readonly changeSelectionModeToViewOnDisabled?: boolean;\n /**\n * (Optional) observable that will trigger the clearing of all cached display values.\n */\n readonly refreshDisplayValues$?: Observable<unknown>;\n}\n\n/**\n * Displayed value with the computed hash.\n */\nexport interface PickableValueFieldDisplayValueWithHash<T, M = unknown, H extends PrimativeKey = PrimativeKey> extends PickableValueFieldDisplayValue<T, M> {\n _hash: H;\n}\n\n/**\n * Used for picking pre-set values using items as the presentation.\n */\n@Directive()\nexport class AbstractDbxPickableItemFieldDirective<T, M = unknown, H extends PrimativeKey = PrimativeKey> extends FieldType<FieldTypeConfig<PickableValueFieldsFieldProps<T, M, H>>> implements OnInit, OnDestroy {\n readonly filterMatInput = viewChild<string, MatInput>('matInput', { read: MatInput });\n\n readonly inputCtrl = new FormControl('');\n\n private readonly _formControlObs = new BehaviorSubject<Maybe<AbstractControl>>(undefined);\n readonly formControl$ = this._formControlObs.pipe(filterMaybe());\n\n private readonly _clearDisplayHashMapSub = new SubscriptionObject();\n private readonly _displayHashMap = new BehaviorSubject<Map<H, PickableValueFieldDisplayValue<T, M>>>(new Map());\n\n readonly filterInputValue$: Observable<Maybe<string>> = this.inputCtrl.valueChanges.pipe(startWith(undefined));\n readonly filterInputValueString$: Observable<Maybe<string>> = this.filterInputValue$.pipe(debounceTime(200), distinctUntilChanged(), shareReplay(1));\n\n readonly loadResultsDisplayValuesState$: Observable<LoadingState<PickableValueFieldDisplayValueWithHash<T, M, H>[]>> = this.formControl$.pipe(\n first(),\n switchMap(() =>\n this.loadValuesFn().pipe(\n switchMap((x) => this.loadDisplayValuesForFieldValues(x)),\n startWithBeginLoading()\n )\n ),\n shareReplay(1)\n );\n\n readonly _formControlValue$: Observable<T | T[]> = this.formControl$.pipe(switchMap((control) => control.valueChanges.pipe(startWith(control.value), shareReplay(1))));\n\n readonly loadResultsDisplayValues$: Observable<PickableValueFieldDisplayValueWithHash<T, M, H>[]> = this.loadResultsDisplayValuesState$.pipe(map((x) => x?.value ?? []));\n\n /**\n * Current values in the form control.\n */\n readonly values$: Observable<T[]> = this._formControlValue$.pipe(map(convertMaybeToArray), shareReplay(1));\n\n /**\n * Current values with their display value.\n */\n readonly displayValuesState$: Observable<LoadingState<PickableValueFieldDisplayValueWithHash<T, M, H>[]>> = combineLatest([this.loadResultsDisplayValues$, this.values$]).pipe(\n switchMap(([displayValues, currentValues]) => {\n const displayValuesMap = makeValuesGroupMap(displayValues, (x) => this.hashForValue(x.value));\n const valuesNotInDisplayMap: T[] = [];\n\n currentValues.forEach((x) => {\n const key = this.hashForValue(x);\n const displayValue: Maybe<PickableValueFieldDisplayValueWithHash<T, M, H>> = displayValuesMap.get(key)?.[0];\n\n if (!displayValue) {\n valuesNotInDisplayMap.push(x);\n }\n });\n\n if (valuesNotInDisplayMap.length) {\n return this.loadDisplayValuesForValues(valuesNotInDisplayMap).pipe(\n map((x) =>\n mapLoadingStateResults(x, {\n mapValue: (loadedValues: Configurable<PickableValueFieldDisplayValueWithHash<T, M, H>>[]) => {\n loadedValues.forEach((x) => (x.isUnknown = x.isUnknown ?? true)); // Assign unknown flag.\n return [...displayValues, ...loadedValues];\n }\n })\n )\n );\n } else {\n return of(successResult(displayValues));\n }\n })\n );\n\n /**\n * Results to be displayed if filtered.\n */\n readonly filteredSearchResultsState$: Observable<LoadingState<PickableValueFieldDisplayValueWithHash<T, M, H>[]>> = this.loadResultsDisplayValues$.pipe(\n switchMap((values) =>\n this.filterInputValueString$.pipe(\n switchMap((text) =>\n combineLatest([this._filterValues(text, values), this.displayValuesState$]).pipe(\n map(([values, displayState]) =>\n mapLoadingStateResults(displayState, {\n mapValue: (displayValues: PickableValueFieldDisplayValueWithHash<T, M, H>[]) => {\n const valueHashSet = new Set(values.map((x) => this.hashForValue(x)));\n return displayValues.filter((x) => !x.isUnknown && valueHashSet.has(x._hash));\n }\n })\n ),\n startWithBeginLoading()\n )\n )\n )\n ),\n shareReplay(1)\n );\n\n readonly filteredSearchResults$: Observable<PickableValueFieldDisplayValueWithHash<T, M, H>[]> = this.filteredSearchResultsState$.pipe(\n map((x) => x?.value),\n filterMaybe(),\n shareReplay(1)\n );\n\n readonly items$: Observable<PickableItemFieldItem<T, M>[]> = combineLatest([this.filteredSearchResults$, this.values$]).pipe(\n map(([displayValues, values]) => {\n const selectedHashValuesSet = new Set(values.map((x) => this.hashForValue(x)));\n let items: PickableItemFieldItem<T, M>[] = displayValues.map((x) => ({ itemValue: x, selected: selectedHashValuesSet.has(x._hash) }));\n\n if (this.sortItems) {\n items = this.sortItems(items);\n }\n\n return items;\n }),\n shareReplay(1)\n );\n\n readonly itemsLoadingState$: Observable<LoadingState<PickableItemFieldItem<T>[]>> = this.loadResultsDisplayValues$.pipe(\n switchMap(() =>\n this.items$.pipe(\n first(),\n map((x) => successResult(x)),\n startWithBeginLoading(),\n shareReplay(1)\n )\n )\n );\n\n /**\n * Context used for managing the loading of items, or when the current results change.\n */\n readonly context = listLoadingStateContext({ obs: this.itemsLoadingState$, showLoadingOnNoValue: false });\n\n readonly filterItemsLoadingState$: Observable<LoadingState<PickableItemFieldItem<T>[]>> = this.items$.pipe(\n map((x) => successResult(x)),\n startWithBeginLoading(),\n shareReplay(1)\n );\n\n readonly noItemsAvailable$ = this.filterItemsLoadingState$.pipe(mapIsListLoadingStateWithEmptyValue(), distinctUntilChanged());\n\n /**\n * Context used for searching/filtering.\n */\n readonly filterResultsContext = listLoadingStateContext({ obs: this.filteredSearchResultsState$, showLoadingOnNoValue: true });\n\n readonly itemsSignal = toSignal(this.items$);\n readonly noItemsAvailableSignal = toSignal(this.noItemsAvailable$);\n\n get readonly(): Maybe<boolean> {\n return this.props.readonly;\n }\n\n get isReadonlyOrDisabled() {\n return this.readonly || this.disabled;\n }\n\n get pickableField(): PickableValueFieldsFieldProps<T, M, H> {\n return this.props;\n }\n\n get multiSelect(): boolean {\n return this.pickableField.multiSelect ?? true;\n }\n\n get asArrayValue(): boolean {\n return this.pickableField.asArrayValue ?? true;\n }\n\n get pickOnlyOne(): boolean {\n return this.asArrayValue === false || this.multiSelect === false;\n }\n\n get filterLabel(): Maybe<string> {\n return this.pickableField.filterLabel;\n }\n\n get name(): string {\n return this.field.name ?? camelCase(this.label ?? (this.key as string));\n }\n\n get label(): Maybe<string> {\n return this.props.label;\n }\n\n get autocomplete(): string {\n return (this.props.attributes?.['autocomplete'] ?? this.key) as string;\n }\n\n get changeSelectionModeToViewOnDisabled(): boolean {\n return this.pickableField.changeSelectionModeToViewOnDisabled ?? false;\n }\n\n get sortItems(): Maybe<PickableItemFieldItemSortFn<T, M>> {\n return this.pickableField.sortItems;\n }\n\n get hashForValue(): PickableValueFieldHashFunction<T, H> {\n return this.pickableField.hashForValue ?? ((x) => x as unknown as H);\n }\n\n get displayForValue(): PickableValueFieldDisplayFunction<T, M> {\n return this.pickableField.displayForValue;\n }\n\n get showFilterInput(): boolean {\n return Boolean(this.pickableField.filterValues);\n }\n\n get filterValuesFn(): PickableValueFieldFilterFunction<T, M> {\n return this.pickableField.filterValues ?? ((_, x) => of(x.map((y) => y.value)));\n }\n\n get skipFilterFnOnEmpty(): boolean {\n return this.pickableField.skipFilterFnOnEmpty ?? true;\n }\n\n get _filterValues(): PickableValueFieldFilterFunction<T, M> {\n let fn: PickableValueFieldFilterFunction<T, M>;\n\n if (this.skipFilterFnOnEmpty) {\n fn = (filterText: Maybe<string>, values: PickableValueFieldDisplayValue<T, M>[]): Observable<T[]> => {\n let result: Observable<T[]>;\n\n if (filterText) {\n result = this.filterValuesFn(filterText, values);\n } else {\n result = of(values.map((x) => x.value));\n }\n\n return result;\n };\n } else {\n fn = this.filterValuesFn;\n }\n\n return fn;\n }\n\n get showTextFilter(): boolean {\n return this.pickableField.showTextFilter ?? Boolean(this.pickableField.filterValues);\n }\n\n get loadValuesFn(): PickableValueFieldLoadValuesFunction<T, M> {\n return this.pickableField.loadValues;\n }\n\n get values(): T[] {\n return this._getValueOnFormControl(this.formControl.value) ?? [];\n }\n\n get footerConfig(): Maybe<DbxInjectionComponentConfig> {\n return this.pickableField.footerConfig;\n }\n\n get refreshDisplayValues$() {\n return this.pickableField.refreshDisplayValues$;\n }\n\n loadDisplayValuesForValues(values: T[]): Observable<LoadingState<PickableValueFieldDisplayValueWithHash<T, M, H>[]>> {\n return this.loadDisplayValuesForFieldValues(values.map((value) => ({ value })));\n }\n\n loadDisplayValuesForFieldValues(values: PickableValueFieldValue<T, M>[]): Observable<LoadingState<PickableValueFieldDisplayValueWithHash<T, M, H>[]>> {\n return this.getDisplayValuesForFieldValues(values).pipe(\n map((displayValues: PickableValueFieldDisplayValueWithHash<T, M, H>[]) => successResult(displayValues)),\n startWithBeginLoading(),\n shareReplay(1)\n );\n }\n\n getDisplayValuesForFieldValues(values: PickableValueFieldValue<T, M>[]): Observable<PickableValueFieldDisplayValueWithHash<T, M, H>[]> {\n return this._displayHashMap.pipe(\n mergeMap((displayMap) => {\n const mappingResult = values.map((x) => [x, this.hashForValue(x.value)] as [PickableValueFieldValue<T, M>, H]).map(([x, hash], i) => [i, hash, x, displayMap.get(hash)] as [number, H, PickableValueFieldValue<T, M>, PickableValueFieldDisplayValueWithHash<T, M, H>]);\n\n const {\n //\n included: hasDisplay,\n excluded: needsDisplay\n } = separateValues(mappingResult, (x) => Boolean(x[3]));\n\n if (needsDisplay.length > 0) {\n // Go get the display value.\n const displayValuesObs = this.displayForValue(needsDisplay.map((x) => x[2]));\n\n return displayValuesObs.pipe(\n first(),\n map((displayResults) => {\n const displayResultsWithHash: PickableValueFieldDisplayValueWithHash<T, M, H>[] = displayResults.map((x) => {\n (x as PickableValueFieldDisplayValueWithHash<T, M, H>)._hash = this.hashForValue(x.value);\n return x as PickableValueFieldDisplayValueWithHash<T, M, H>;\n });\n\n // Create a map to re-join values later.\n const displayResultsMapping: [PickableValueFieldDisplayValueWithHash<T, M, H>, H][] = displayResultsWithHash.map((x) => [x, x._hash]);\n const valueIndexHashMap = new Map(displayResultsMapping.map(([x, hash]) => [hash, x]));\n\n // Update displayMap. No need to push an update notification.\n displayResultsMapping.forEach(([x, hash]) => displayMap.set(hash, x));\n\n // Zip values back together.\n const newDisplayValues = mappingResult.map((x) => x[3] ?? valueIndexHashMap.get(x[1]));\n\n // Return display values.\n return newDisplayValues;\n })\n );\n } else {\n // If all display values are hashed return that.\n return of(hasDisplay.map((x) => x[3])) as Observable<PickableValueFieldDisplayValueWithHash<T, M, H>[]>;\n }\n })\n );\n }\n\n ngOnInit(): void {\n this._formControlObs.next(this.formControl);\n\n if (this.refreshDisplayValues$ != null) {\n this._clearDisplayHashMapSub.subscription = this.refreshDisplayValues$.subscribe(() => this._displayHashMap.next(new Map()));\n }\n\n // Focus after finished loading for the first time.\n this.context.loading$\n .pipe(\n delay(10),\n filter((x) => x),\n first()\n )\n .subscribe(() => {\n this.filterMatInput()?.focus();\n });\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._displayHashMap.complete();\n this._formControlObs.complete();\n this._clearDisplayHashMapSub.destroy();\n this.filterResultsContext.destroy();\n }\n\n protected _getValueOnFormControl(valueOnFormControl: ArrayOrValue<T>): T[] {\n const value: T[] = valueOnFormControl != null ? ([] as T[]).concat(valueOnFormControl) : []; // Always return an array.\n return value;\n }\n\n addValue(value: T): void {\n let newValues: T[];\n\n if (this.pickOnlyOne) {\n newValues = [value];\n } else {\n newValues = [...this.values, value];\n }\n\n this.setValues(newValues);\n }\n\n removeValue(value: T): void {\n const hashToFilter = this.hashForValue(value);\n const values = this.values.filter((x) => this.hashForValue(x) !== hashToFilter);\n this.setValues(values);\n }\n\n setValues(values: T[]): void {\n // Use to filter non-unique values.\n if (this.hashForValue) {\n values = filterUniqueValues(values, this.hashForValue);\n }\n\n if (this.pickOnlyOne) {\n values = [values[0]].filter((x) => x != null);\n }\n\n this._setValueOnFormControl(values);\n }\n\n // MARK: Internal\n protected _setValueOnFormControl(values: T[]): void {\n let newValue: T | T[] = values;\n\n if (!this.asArrayValue) {\n newValue = [values[0]].filter((x) => x != null)[0];\n }\n\n this.formControl.setValue(newValue);\n this.formControl.markAsTouched();\n this.formControl.markAsDirty();\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { AbstractDbxPickableItemFieldDirective, PickableItemFieldItem } from './pickable.field.directive';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { DbxLoadingComponent } from '@dereekb/dbx-web';\nimport { MatDivider } from '@angular/material/divider';\nimport { DbxInjectionComponent } from '@dereekb/dbx-core';\nimport { MatInputModule } from '@angular/material/input';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\n\n/**\n * Used for picking pre-set values using chips as the presentation.\n */\n@Component({\n templateUrl: 'pickable.chip.field.component.html',\n imports: [MatChipsModule, NgTemplateOutlet, FormsModule, ReactiveFormsModule, MatIconModule, MatInputModule, DbxLoadingComponent, MatDivider, DbxInjectionComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxPickableChipListFieldComponent<T> extends AbstractDbxPickableItemFieldDirective<T> {\n itemClicked(item: PickableItemFieldItem<T>): void {\n if (!item.disabled && !this.isReadonlyOrDisabled) {\n if (item.selected) {\n this.removeValue(item.itemValue.value);\n } else {\n this.addValue(item.itemValue.value);\n }\n }\n }\n}\n","<div class=\"dbx-pickable-item-field\">\n <dbx-loading [context]=\"context\" [linear]=\"true\">\n @if (showFilterInput) {\n <ng-container *ngTemplateOutlet=\"filterTemplate\"></ng-container>\n }\n <!-- Content -->\n <div class=\"dbx-pickable-item-field-chips\">\n <mat-chip-listbox [multiple]=\"multiSelect\" [required]=\"required\" [selectable]=\"!isReadonlyOrDisabled\" [disabled]=\"readonly\" #chipList>\n @for (item of itemsSignal(); track item.itemValue.value) {\n <mat-chip-option (click)=\"itemClicked(item)\" [selected]=\"item.selected\" [disabled]=\"isReadonlyOrDisabled || item.disabled\">\n @if (item.itemValue.icon) {\n <mat-icon matChipAvatar>{{ item.itemValue.icon }}</mat-icon>\n }\n <span class=\"dbx-chip-label\">{{ item.itemValue.label }}</span>\n @if (item.itemValue.sublabel) {\n <span class=\"dbx-chip-sublabel\">{{ item.itemValue.sublabel }}</span>\n }\n </mat-chip-option>\n }\n </mat-chip-listbox>\n <dbx-injection [config]=\"footerConfig\"></dbx-injection>\n </div>\n </dbx-loading>\n</div>\n\n<!-- Filter Input -->\n<ng-template #filterTemplate>\n <div class=\"dbx-pickable-item-field-filter\">\n <div class=\"dbx-label\">{{ filterLabel }}</div>\n <input [name]=\"name\" autocomplete=\"{{ autocomplete }}\" #filterMatInput=\"matInput\" matInput [placeholder]=\"placeholder\" [formControl]=\"inputCtrl\" />\n <mat-divider></mat-divider>\n <dbx-loading [linear]=\"true\" [context]=\"filterResultsContext\"></dbx-loading>\n <!-- No items found. -->\n @if (noItemsAvailableSignal()) {\n <p class=\"dbx-label\">No items match this filter.</p>\n }\n </div>\n</ng-template>\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { DbxInjectionComponent, DbxInjectionComponentConfig } from '@dereekb/dbx-core';\nimport { AbstractDbxSelectionListWrapperDirective, provideDbxListView, AbstractDbxSelectionListViewDirective, AbstractDbxValueListViewItemComponent, ListSelectionState, addConfigToValueListItems, DbxListSelectionMode, provideDbxListViewWrapper, DbxLoadingComponent, DbxSelectionValueListViewContentComponent, DEFAULT_LIST_WRAPPER_COMPONENT_CONFIGURATION_TEMPLATE, DbxListWrapperComponentImportsModule } from '@dereekb/dbx-web';\nimport { type Maybe } from '@dereekb/util';\nimport { map, shareReplay } from 'rxjs';\nimport { PickableValueFieldDisplayValue } from './pickable';\nimport { AbstractDbxPickableItemFieldDirective, PickableItemFieldItem } from './pickable.field.directive';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatDivider } from '@angular/material/divider';\nimport { MatInputModule } from '@angular/material/input';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { toSignal } from '@angular/core/rxjs-interop';\n\n// MARK: Selection List\n@Component({\n selector: 'dbx-form-pickable-item-field-item-list',\n template: DEFAULT_LIST_WRAPPER_COMPONENT_CONFIGURATION_TEMPLATE,\n imports: [DbxListWrapperComponentImportsModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: provideDbxListViewWrapper(DbxPickableListFieldItemListComponent),\n standalone: true\n})\nexport class DbxPickableListFieldItemListComponent<T> extends AbstractDbxSelectionListWrapperDirective<PickableItemFieldItem<T>> {\n constructor() {\n super({\n componentClass: DbxPickableListFieldItemListViewComponent\n });\n }\n}\n\n/**\n * NOTE: Values input are PickableItemFieldItem<T>, but output values are PickableValueFieldDisplayValue<T>.\n */\n@Component({\n template: `\n <dbx-selection-list-view-content [multiple]=\"multiple\" [selectionMode]=\"selectionMode\" [items]=\"itemsSignal()\"></dbx-selection-list-view-content>\n `,\n providers: provideDbxListView(DbxPickableListFieldItemListViewComponent),\n imports: [DbxSelectionValueListViewContentComponent],\n standalone: true\n})\nexport class DbxPickableListFieldItemListViewComponent<T> extends AbstractDbxSelectionListViewDirective<any> {\n readonly dbxPickableListFieldComponent = inject(DbxPickableListFieldComponent<T>);\n\n // TODO: any belongs here for now, but item list typings need to be updated.\n\n readonly config: DbxInjectionComponentConfig = {\n componentClass: DbxPickableListFieldItemListViewItemComponent\n };\n\n get multiple(): boolean {\n return !this.dbxPickableListFieldComponent.pickOnlyOne;\n }\n\n get selectionMode(): Maybe<DbxListSelectionMode> {\n let selectionMode: Maybe<DbxListSelectionMode> = 'select';\n\n if (this.dbxPickableListFieldComponent.disabled && this.dbxPickableListFieldComponent.changeSelectionModeToViewOnDisabled) {\n selectionMode = 'view';\n }\n\n return selectionMode;\n }\n\n readonly items$ = this.values$.pipe(\n // NOTE: This causes the \"value\" to be a PickableValueFieldDisplayValue<T>, which means we emit PickableValueFieldDisplayValue<T> to DbxPickableListFieldComponent.\n map((x) => addConfigToValueListItems(this.config, x)),\n shareReplay(1)\n );\n\n readonly itemsSignal = toSignal(this.items$);\n}\n\n@Component({\n template: `\n <div class=\"dbx-default-pickable-item-field-list-item dbx-flex-bar\">\n @if (icon) {\n <mat-icon class=\"dbx-icon-spacer\">{{ icon }}</mat-icon>\n }\n <span class=\"dbx-chip-label\">{{ label }}</span>\n @if (sublabel) {\n <span class=\"dbx-chip-sublabel\">({{ sublabel }})</span>\n }\n </div>\n `,\n imports: [MatIconModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxPickableListFieldItemListViewItemComponent<T> extends AbstractDbxValueListViewItemComponent<PickableValueFieldDisplayValue<T>> {\n readonly label = this.itemValue.label;\n readonly sublabel = this.itemValue.sublabel;\n readonly icon = this.itemValue.icon;\n}\n\n// List Field Component\n/**\n * Used for picking pre-set values using a selection list as the presentation.\n */\n@Component({\n templateUrl: 'pickable.list.field.component.html',\n imports: [DbxPickableListFieldItemListComponent, NgTemplateOutlet, FormsModule, ReactiveFormsModule, MatInputModule, MatDivider, DbxLoadingComponent, DbxInjectionComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxPickableListFieldComponent<T> extends AbstractDbxPickableItemFieldDirective<T> {\n onSelectionChange(event: unknown) {\n const items = (event as ListSelectionState<PickableValueFieldDisplayValue<T>>).items;\n const values = items.map((x) => x.itemValue.value);\n this.setValues(values);\n }\n}\n","<div class=\"dbx-pickable-item-field\">\n <dbx-loading [context]=\"context\">\n @if (showFilterInput) {\n <ng-container *ngTemplateOutlet=\"filterTemplate\"></ng-container>\n }\n <!-- Content -->\n <div class=\"dbx-pickable-item-field-list\">\n <div class=\"dbx-pickable-item-field-list-content\">\n <dbx-form-pickable-item-field-item-list [disabled]=\"isReadonlyOrDisabled\" [state]=\"filterItemsLoadingState$\" (selectionChange)=\"onSelectionChange($event)\"></dbx-form-pickable-item-field-item-list>\n </div>\n <dbx-injection [config]=\"footerConfig\"></dbx-injection>\n </div>\n </dbx-loading>\n</div>\n\n<!-- Filter Input -->\n<ng-template #filterTemplate>\n <div class=\"dbx-pickable-item-field-filter\">\n <div class=\"dbx-label\">{{ filterLabel }}</div>\n <input [name]=\"name\" autocomplete=\"{{ autocomplete }}\" #filterMatInput=\"matInput\" matInput [placeholder]=\"placeholder\" [formControl]=\"inputCtrl\" />\n <mat-divider></mat-divider>\n <dbx-loading [linear]=\"true\" [context]=\"filterResultsContext\"></dbx-loading>\n <!-- No items found. -->\n @if (noItemsAvailableSignal()) {\n <p class=\"dbx-label\">No items match this filter.</p>\n }\n </div>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxPickableChipListFieldComponent } from './pickable.chip.field.component';\nimport { DbxPickableListFieldComponent, DbxPickableListFieldItemListComponent, DbxPickableListFieldItemListViewComponent, DbxPickableListFieldItemListViewItemComponent } from './pickable.list.field.component';\n\nconst importsAndExports = [DbxPickableChipListFieldComponent, DbxPickableListFieldComponent, DbxPickableListFieldItemListComponent, DbxPickableListFieldItemListViewComponent, DbxPickableListFieldItemListViewItemComponent];\n\n@NgModule({\n imports: [\n ...importsAndExports,\n FormlyModule.forChild({\n types: [\n { name: 'pickablechipfield', component: DbxPickableChipListFieldComponent, wrappers: ['form-field'] },\n { name: 'pickablelistfield', component: DbxPickableListFieldComponent, wrappers: ['form-field'] }\n ]\n })\n ],\n exports: importsAndExports\n})\nexport class DbxFormFormlyPickableFieldModule {}\n","import { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig, type MaterialFormFieldConfig } from '../../field';\nimport { PickableItemFieldItem, type PickableValueFieldsFieldProps } from './pickable.field.directive';\nexport { PickableItemFieldItem };\n\nexport interface PickableItemFieldConfig<T = unknown, M = unknown> extends LabeledFieldConfig, PickableValueFieldsFieldProps<T, M>, MaterialFormFieldConfig {}\n\nexport function pickableItemChipField<T = unknown, M = unknown>(config: PickableItemFieldConfig<T, M>): FormlyFieldConfig {\n const { key, materialFormField } = config;\n return formlyField({\n key,\n type: 'pickablechipfield',\n ...propsAndConfigForFieldConfig(config, {\n ...materialFormField,\n ...config,\n autocomplete: false\n })\n });\n}\n\nexport function pickableItemListField<T = unknown, M = unknown>(config: PickableItemFieldConfig<T, M>): FormlyFieldConfig {\n const { key, materialFormField } = config;\n return formlyField({\n key,\n type: 'pickablelistfield',\n ...propsAndConfigForFieldConfig(config, {\n ...materialFormField,\n ...config,\n autocomplete: false\n })\n });\n}\n","import { caseInsensitiveFilterByIndexOfDecisionFactory, type LabeledValue, type Maybe, type SearchStringFilterFunction, searchStringFilterFunction, sortByStringFunction } from '@dereekb/util';\nimport { type Observable, of } from 'rxjs';\nimport { type PickableValueFieldDisplayValue, type PickableValueFieldValue } from './pickable';\nimport { type PickableItemFieldItem, type PickableValueFieldsFieldProps } from './pickable.field.directive';\n\nexport const filterPickableItemFieldValuesByLabelFilterFunction: SearchStringFilterFunction<PickableValueFieldDisplayValue<any>> = searchStringFilterFunction({\n readStrings: (x) => [x.label],\n decisionFactory: caseInsensitiveFilterByIndexOfDecisionFactory\n});\n\nexport function filterPickableItemFieldValuesByLabel<T>(filterText: Maybe<string>, values: PickableValueFieldDisplayValue<T>[]): Observable<T[]> {\n let filteredValues: PickableValueFieldDisplayValue<T>[];\n\n if (filterText) {\n filteredValues = filterPickableItemFieldValuesByLabelFilterFunction(filterText, values);\n } else {\n filteredValues = values;\n }\n\n return of(filteredValues.map((x) => x.value));\n}\n\nexport const sortPickableItemsByLabelStringFunction = sortByStringFunction<PickableItemFieldItem<any>>((x) => x.itemValue.label);\n\nexport function sortPickableItemsByLabel<T>(chips: PickableItemFieldItem<T>[]): PickableItemFieldItem<T>[] {\n return chips.sort(sortPickableItemsByLabelStringFunction);\n}\n\n// MARK: PickableValueFieldValuesConfigForStaticLabeledValues\nexport type PickableValueFieldValuesConfigForStaticLabeledValues<T, M extends LabeledValue<T>> = Pick<PickableValueFieldsFieldProps<T, M>, 'loadValues' | 'displayForValue' | 'filterValues'>;\n\nexport interface PickableValueFieldValuesConfigForStaticLabeledValuesConfig<T, M extends LabeledValue<T>> {\n readonly allOptions: M[];\n readonly unknownOptionLabel?: string;\n}\n\nexport function pickableValueFieldValuesConfigForStaticLabeledValues<T, M extends LabeledValue<T>>(input: M[] | PickableValueFieldValuesConfigForStaticLabeledValuesConfig<T, M>): PickableValueFieldValuesConfigForStaticLabeledValues<T, M> {\n const config = Array.isArray(input) ? { allOptions: input } : input;\n const { allOptions, unknownOptionLabel = 'UNKNOWN' } = config;\n const values: PickableValueFieldValue<T, M>[] = allOptions.map((meta) => ({ value: meta.value, meta }));\n const optionsMap = new Map(allOptions.map((x) => [x.value, x]));\n\n return {\n loadValues: () => of(values),\n filterValues: filterPickableItemFieldValuesByLabel, // auto filter by label\n displayForValue: (values: PickableValueFieldValue<T, M>[]) =>\n of(\n values.map((x) => {\n const meta = x.meta ?? optionsMap.get(x.value);\n return { ...x, meta, label: meta?.label ?? unknownOptionLabel };\n })\n )\n };\n}\n","import { ChangeDetectionStrategy, Component, computed, Directive, inject, InjectionToken, input } from '@angular/core';\nimport { ConfiguredSearchableValueFieldDisplayValue } from './searchable';\nimport { mergeArraysIntoArray } from '@dereekb/util';\nimport { DbxInjectionComponent, DbxInjectionComponentConfig } from '@dereekb/dbx-core';\nimport { DbxAnchorComponent } from '@dereekb/dbx-web';\nimport { MatIconModule } from '@angular/material/icon';\n\nexport const DBX_SEARCHABLE_FIELD_COMPONENT_DATA_TOKEN = new InjectionToken('DbxSearchableField');\n\n@Component({\n selector: 'dbx-searchable-field-autocomplete-item',\n template: `\n <dbx-anchor [block]=\"true\" [anchor]=\"anchorSignal()\">\n <dbx-injection [config]=\"configSignal()\"></dbx-injection>\n </dbx-anchor>\n `,\n imports: [DbxAnchorComponent, DbxInjectionComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxSearchableFieldAutocompleteItemComponent<T> {\n readonly displayValue = input.required<ConfiguredSearchableValueFieldDisplayValue<T>>();\n\n readonly configSignal = computed(() => {\n const displayValue = this.displayValue();\n const config: DbxInjectionComponentConfig = {\n ...displayValue.display,\n providers: mergeArraysIntoArray(\n [\n {\n provide: DBX_SEARCHABLE_FIELD_COMPONENT_DATA_TOKEN,\n useValue: displayValue\n }\n ],\n displayValue.display.providers\n )\n };\n\n return config;\n });\n\n readonly anchorSignal = computed(() => this.displayValue().anchor);\n}\n\n// MARK: Default\n@Directive()\nexport abstract class AbstractDbxSearchableFieldDisplayDirective<T> {\n readonly displayValue = inject<ConfiguredSearchableValueFieldDisplayValue<T>>(DBX_SEARCHABLE_FIELD_COMPONENT_DATA_TOKEN);\n}\n\n@Component({\n selector: 'dbx-default-searchable-field-display',\n template: `\n <div class=\"dbx-default-searchable-field-display dbx-flex-bar\">\n @if (icon) {\n <mat-icon class=\"dbx-icon-spacer\">{{ icon }}</mat-icon>\n }\n <span class=\"dbx-chip-label\">{{ displayValue.label }}</span>\n @if (displayValue.sublabel) {\n <span class=\"dbx-chip-sublabel\">({{ displayValue.sublabel }})</span>\n }\n </div>\n `,\n imports: [MatIconModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxDefaultSearchableFieldDisplayComponent<T> extends AbstractDbxSearchableFieldDisplayDirective<T> {\n readonly icon = this.displayValue.icon;\n}\n","import { ArrayOrValue, Maybe, convertMaybeToArray, lastValue, PrimativeKey, separateValues, asArray, filterUniqueValues, Configurable } from '@dereekb/util';\nimport { DbxInjectionComponentConfig, mergeDbxInjectionComponentConfigs } from '@dereekb/dbx-core';\nimport { filterMaybe, SubscriptionObject, LoadingState, successResult, startWithBeginLoading, isLoadingStateInLoadingState, listLoadingStateContext } from '@dereekb/rxjs';\nimport { Directive, ElementRef, OnDestroy, OnInit, viewChild } from '@angular/core';\nimport { AbstractControl, FormControl, ValidatorFn } from '@angular/forms';\nimport { FieldTypeConfig, FormlyFieldProps } from '@ngx-formly/core';\nimport { FieldType } from '@ngx-formly/material';\nimport { debounceTime, distinctUntilChanged, first, map, mergeMap, shareReplay, startWith, switchMap, BehaviorSubject, of, Observable } from 'rxjs';\nimport { SearchableValueFieldHashFn, SearchableValueFieldStringSearchFn, SearchableValueFieldDisplayFn, SearchableValueFieldDisplayValue, SearchableValueFieldValue, SearchableValueFieldAnchorFn, ConfiguredSearchableValueFieldDisplayValue } from './searchable';\nimport { DbxDefaultSearchableFieldDisplayComponent } from './searchable.field.autocomplete.item.component';\nimport { camelCase } from 'change-case-all';\nimport { toSignal } from '@angular/core/rxjs-interop';\n\nexport interface StringValueFieldsFieldProps extends FormlyFieldProps {\n /**\n * Custom input validators.\n */\n readonly textInputValidator?: ValidatorFn | ValidatorFn[];\n}\n\nexport interface SearchableValueFieldsFieldProps<T, M = unknown, H extends PrimativeKey = PrimativeKey> extends FormlyFieldProps, StringValueFieldsFieldProps {\n /**\n * Whether or not to allow string values to be used directly, or if values can only be chosen from searching.\n */\n readonly allowStringValues?: boolean;\n /**\n * Whether or not to set/get values as an array or a single value. If set false, multiSelect is ignored.\n */\n readonly asArrayValue?: boolean;\n /**\n * Optional conversion function. If provided, allowStringValues is considered true.\n */\n readonly convertStringValue?: (text: string) => T;\n /**\n * Used for hashing display values and omitting repeat values.\n *\n * If hashForValue is not provided, the value's value will be used as is.\n */\n readonly hashForValue?: SearchableValueFieldHashFn<T, H>;\n /**\n * Performs a search.\n */\n readonly search: SearchableValueFieldStringSearchFn<T, M>;\n /**\n * Whether or not to allow searches on empty text. Is false by default.\n */\n readonly searchOnEmptyText?: boolean;\n /**\n * Default injected config to use for display values.\n */\n readonly display?: Partial<DbxInjectionComponentConfig>;\n /**\n * Used for building a display value given the input.\n */\n readonly displayForValue: SearchableValueFieldDisplayFn<T, M>;\n /**\n * Whether or not to use the anchor field on value elements.\n *\n * This has no default effect if a component class is provided.\n */\n readonly useAnchor?: boolean;\n /**\n * Used for retrieving an anchor value for values that have no anchor value set.\n *\n * Only used when useAnchor is true.\n */\n readonly anchorForValue?: SearchableValueFieldAnchorFn<T, M>;\n /**\n * Whether or not to show \"Clear\" in the autcomplete list.\n */\n readonly showClearValue?: boolean;\n /**\n * Label for the search input.\n *\n * Defaults to \"Search\"\n */\n readonly searchLabel?: string;\n /**\n * (Optional) observable that will trigger the clearing of all cached display values.\n */\n readonly refreshDisplayValues$?: Observable<unknown>;\n}\n\nconst DEFAULT_SEARCH_INPUT_PLACEHOLDER = 'Type to Search';\n\nconst DEFAULT_SEARCHABLE_FIELD_DISPLAY: Partial<DbxInjectionComponentConfig> = {\n componentClass: DbxDefaultSearchableFieldDisplayComponent\n};\n\n/**\n * Abstract searchable field that provides a feature for searching for values, and for displaying values using Observables.\n *\n * Display values are cached for performance.\n */\n@Directive()\nexport abstract class AbstractDbxSearchableValueFieldDirective<T, M = unknown, H extends PrimativeKey = PrimativeKey, C extends SearchableValueFieldsFieldProps<T, M, H> = SearchableValueFieldsFieldProps<T, M, H>> extends FieldType<FieldTypeConfig<C>> implements OnInit, OnDestroy {\n /**\n * Whether or not to set/get values as an array.\n */\n abstract get multiSelect(): boolean;\n\n /**\n * Optional override set by the parent class for whether or not to allow the current value to sync to the input.\n */\n allowSyncValueToInput = false;\n\n /**\n * Default placeholder text to use when searchOnEmptyText is false.\n */\n defaultSearchInputPlaceholder?: Maybe<string> = DEFAULT_SEARCH_INPUT_PLACEHOLDER;\n\n readonly textInput = viewChild<string, ElementRef<HTMLInputElement>>('textInput', { read: ElementRef<HTMLInputElement> });\n\n readonly inputCtrl = new FormControl<string>('');\n\n private readonly _formControlObs = new BehaviorSubject<Maybe<AbstractControl>>(undefined);\n readonly formControl$ = this._formControlObs.pipe(filterMaybe());\n\n private readonly _clearDisplayHashMapSub = new SubscriptionObject();\n private readonly _displayHashMap = new BehaviorSubject<Map<H, ConfiguredSearchableValueFieldDisplayValue<T, M>>>(new Map());\n\n readonly inputValue$: Observable<string> = this.inputCtrl.valueChanges.pipe(\n startWith(this.inputCtrl.value),\n map((x) => x || '')\n );\n\n readonly inputValueString$: Observable<string> = this.inputValue$.pipe(debounceTime(200), distinctUntilChanged());\n\n readonly searchResultsState$: Observable<LoadingState<ConfiguredSearchableValueFieldDisplayValue<T, M>[]>> = this.inputValueString$.pipe(\n switchMap((text) =>\n (text || this.searchOnEmptyText ? this.search(text ?? '') : of([])).pipe(\n switchMap((x) => this.loadDisplayValuesForFieldValues(x)),\n // Return begin loading to setup the loading state.\n startWithBeginLoading()\n )\n ),\n shareReplay(1)\n );\n\n private readonly _singleValueSyncSub = new SubscriptionObject();\n\n readonly searchContext = listLoadingStateContext({ obs: this.searchResultsState$, showLoadingOnNoValue: false });\n readonly searchResults$: Observable<ConfiguredSearchableValueFieldDisplayValue<T, M>[]> = this.searchResultsState$.pipe(\n map((x) => x?.value ?? []),\n shareReplay(1)\n );\n readonly isLoadingSearchResults$: Observable<boolean> = this.searchResultsState$.pipe(map(isLoadingStateInLoadingState), distinctUntilChanged(), shareReplay(1));\n\n readonly _formControlValue$: Observable<T | T[]> = this.formControl$.pipe(switchMap((control) => control.valueChanges.pipe(startWith(control.value), shareReplay(1))));\n\n readonly values$: Observable<T[]> = this._formControlValue$.pipe(map(convertMaybeToArray), shareReplay(1));\n\n readonly displayValuesState$: Observable<LoadingState<ConfiguredSearchableValueFieldDisplayValue<T, M>[]>> = this.values$.pipe(\n distinctUntilChanged(),\n switchMap((values: T[]) => this.loadDisplayValuesForValues(values)),\n shareReplay(1)\n );\n\n readonly displayValues$: Observable<ConfiguredSearchableValueFieldDisplayValue<T, M>[]> = this.displayValuesState$.pipe(map((x) => x?.value ?? []));\n\n readonly inputValueSignal = toSignal(this.inputValue$);\n readonly searchResultsSignal = toSignal(this.searchResults$);\n readonly displayValuesSignal = toSignal(this.displayValues$);\n\n readonly isLoadingSearchResultsSignal = toSignal(this.isLoadingSearchResults$);\n\n get name(): string {\n return this.field.name ?? camelCase(this.label ?? (this.key as string));\n }\n\n get label(): Maybe<string> {\n return this.props.label;\n }\n\n get readonly(): Maybe<boolean> {\n return this.props.readonly;\n }\n\n get isReadonlyOrDisabled() {\n return this.readonly || this.disabled;\n }\n\n get searchableField(): SearchableValueFieldsFieldProps<T, M, H> {\n return this.props;\n }\n\n get asArrayValue(): boolean {\n return this.searchableField.asArrayValue ?? true;\n }\n\n get pickOnlyOne(): boolean {\n return this.asArrayValue === false || this.multiSelect === false;\n }\n\n get searchOnEmptyText(): boolean {\n return this.searchableField.searchOnEmptyText ?? false;\n }\n\n get searchInputPlaceholder(): string | '' {\n const searchOnEmpty = this.searchOnEmptyText;\n const placeholder = this.searchableField.placeholder;\n const test = placeholder || (searchOnEmpty ? undefined : this.defaultSearchInputPlaceholder) || '';\n return test;\n }\n\n get autocomplete(): string {\n return (this.props.attributes?.['autocomplete'] ?? this.key) as string;\n }\n\n get hashForValue(): SearchableValueFieldHashFn<T, H> {\n return this.searchableField.hashForValue ?? ((x) => x as unknown as H);\n }\n\n get displayForValue(): SearchableValueFieldDisplayFn<T, M> {\n return this.searchableField.displayForValue;\n }\n\n get useAnchor(): Maybe<boolean> {\n return this.searchableField.useAnchor;\n }\n\n get anchorForValue(): Maybe<SearchableValueFieldAnchorFn<T, M>> {\n return this.searchableField.anchorForValue;\n }\n\n get display(): Maybe<Partial<DbxInjectionComponentConfig>> {\n return this.searchableField.display;\n }\n\n get search(): SearchableValueFieldStringSearchFn<T, M> {\n return this.searchableField.search;\n }\n\n get values(): T[] {\n return this._getValueOnFormControl(this.formControl.value) ?? [];\n }\n\n get allowStringValues(): boolean {\n return this.searchableField.allowStringValues ?? Boolean(this.convertStringValue);\n }\n\n get convertStringValue(): Maybe<(text: string) => T> {\n return this.searchableField.convertStringValue;\n }\n\n get showClearValue(): boolean {\n return this.searchableField.showClearValue ?? true;\n }\n\n get searchLabel() {\n return this.searchableField.searchLabel ?? 'Search';\n }\n\n get refreshDisplayValues$() {\n return this.searchableField.refreshDisplayValues$;\n }\n\n loadDisplayValuesForValues(values: T[]): Observable<LoadingState<ConfiguredSearchableValueFieldDisplayValue<T, M>[]>> {\n return this.loadDisplayValuesForFieldValues(values.map((value) => ({ value })));\n }\n\n loadDisplayValuesForFieldValues(values: SearchableValueFieldValue<T, M>[]): Observable<LoadingState<ConfiguredSearchableValueFieldDisplayValue<T, M>[]>> {\n return this.getDisplayValuesForFieldValues(values).pipe(\n map((displayValues: ConfiguredSearchableValueFieldDisplayValue<T, M>[]) => successResult(displayValues)),\n startWithBeginLoading(),\n shareReplay(1)\n );\n }\n\n getDisplayValuesForFieldValues(values: SearchableValueFieldValue<T, M>[]): Observable<ConfiguredSearchableValueFieldDisplayValue<T, M>[]> {\n return this._displayHashMap.pipe(\n mergeMap((displayMap) => {\n const mappingResult = values.map((x) => [x, this.hashForValue(x.value)] as [SearchableValueFieldValue<T, M>, H]).map(([x, hash], i) => [i, hash, x, displayMap.get(hash)] as [number, H, SearchableValueFieldValue<T, M>, ConfiguredSearchableValueFieldDisplayValue<T, M>]);\n\n const {\n //\n included: hasDisplay,\n excluded: needsDisplay\n } = separateValues(mappingResult, (x) => Boolean(x[3]));\n\n let obs: Observable<ConfiguredSearchableValueFieldDisplayValue<T, M>[]>;\n\n if (needsDisplay.length > 0) {\n // Go get the display value.\n const displayValuesObs = this.displayForValue(needsDisplay.map((x) => x[2]));\n const defaultDisplay = mergeDbxInjectionComponentConfigs([DEFAULT_SEARCHABLE_FIELD_DISPLAY, this.display]);\n\n const anchorForValue = this.useAnchor && this.anchorForValue;\n\n obs = displayValuesObs.pipe(\n first(),\n map((displayResults) => {\n // Assign the default component classes to complete configuration.\n (displayResults as Configurable<SearchableValueFieldDisplayValue<T, M>>[]).forEach((x) => {\n if (!x.display) {\n x.display = defaultDisplay;\n } else {\n x.display = mergeDbxInjectionComponentConfigs([defaultDisplay, x.display]);\n }\n\n if (!x.anchor && anchorForValue) {\n x.anchor = anchorForValue(x);\n }\n });\n\n // Create a map to re-join values later.\n const displayResultsMapping: [ConfiguredSearchableValueFieldDisplayValue<T, M>, H][] = (displayResults as ConfiguredSearchableValueFieldDisplayValue<T, M>[]).map((x) => [x, this.hashForValue(x.value)]);\n const valueIndexHashMap = new Map(displayResultsMapping.map(([x, hash]) => [hash, x]));\n\n // Update displayMap. No need to push an update notification.\n displayResultsMapping.forEach(([x, hash]) => displayMap.set(hash, x));\n\n // Zip values back together.\n const newDisplayValues = mappingResult.map((x) => x[3] ?? valueIndexHashMap.get(x[1]));\n\n // Return display values.\n return newDisplayValues;\n })\n );\n } else {\n // If all display values are hashed return that.\n obs = of(hasDisplay.map((x) => x[3]));\n }\n\n return obs;\n })\n );\n }\n\n ngOnInit(): void {\n this._formControlObs.next(this.formControl);\n\n if (this.refreshDisplayValues$ != null) {\n this._clearDisplayHashMapSub.subscription = this.refreshDisplayValues$.subscribe(() => this._displayHashMap.next(new Map()));\n }\n\n if (this.searchableField.textInputValidator) {\n this.inputCtrl.setValidators(this.searchableField.textInputValidator);\n }\n\n if (this.allowSyncValueToInput && this.multiSelect === false) {\n this._singleValueSyncSub.subscription = this.displayValues$.subscribe((x) => {\n if (x[0]) {\n this._syncSingleValue(x[0]);\n }\n });\n }\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._clearDisplayHashMapSub.destroy();\n this._displayHashMap.complete();\n this._singleValueSyncSub.destroy();\n this._formControlObs.complete();\n this.searchContext.destroy();\n }\n\n /**\n * Used to sync the input control with the selected value.\n *\n * Only used when multiSelect is false.\n */\n protected _syncSingleValue(value: SearchableValueFieldDisplayValue<T>): void {\n this.inputCtrl.setValue(value.label);\n }\n\n protected _addWithTextValue(text: string): void {\n if (!this.searchableField.allowStringValues) {\n return;\n }\n\n if (text) {\n text = (text || '').trim();\n this.inputCtrl.setValue(text.trim());\n }\n\n if (!this.inputCtrl.valid) {\n return;\n }\n\n if (text) {\n const value = this.convertStringValue ? this.convertStringValue(text) : (text as unknown as T);\n this.addValue(value);\n }\n }\n\n addWithDisplayValue(displayValue: SearchableValueFieldDisplayValue<T>): void {\n this.addValue(displayValue.value);\n }\n\n removeWithDisplayValue(displayValue: SearchableValueFieldDisplayValue<T>): void {\n this.removeValue(displayValue.value);\n }\n\n _tryAddCurrentInputValue(): boolean {\n let addedValue = false;\n\n if (this.allowStringValues) {\n const value = this.inputCtrl.value || '';\n\n if ((value || '').trim()) {\n this._addWithTextValue(value);\n addedValue = true;\n }\n }\n\n return addedValue;\n }\n\n addValue(value: T): void {\n const textInput = this.textInput();\n\n if (textInput) {\n textInput.nativeElement.value = '';\n }\n\n this.inputCtrl.setValue(null);\n this.setValues([...this.values, value]);\n }\n\n removeValue(value: T): void {\n let values;\n\n if (this.hashForValue) {\n const hashToFilter = this.hashForValue(value);\n values = this.values.filter((x) => this.hashForValue(x) !== hashToFilter);\n } else {\n values = this.values.filter((x) => x !== value);\n }\n\n this.setValues(values);\n }\n\n clearValues(): void {\n this.setValues([]);\n }\n\n setValues(values: T[]): void {\n // Use to filter non-unique values.\n if (this.hashForValue) {\n values = filterUniqueValues(values, this.hashForValue);\n }\n\n if (this.pickOnlyOne) {\n values = [lastValue(values)].filter((x) => x != null);\n }\n\n this._setValueOnFormControl(values);\n }\n\n // MARK: Internal\n protected _getValueOnFormControl(valueOnFormControl: ArrayOrValue<T>): T[] {\n const value: T[] = valueOnFormControl != null ? asArray(valueOnFormControl) : []; // Always return an array.\n return value;\n }\n\n protected _setValueOnFormControl(values: T[]): void {\n let newValue: T | T[] = values;\n\n if (!this.asArrayValue) {\n newValue = [values[0]].filter((x) => x != null)[0];\n }\n\n this.formControl.setValue(newValue);\n this.formControl.markAsDirty();\n this.formControl.markAsTouched();\n }\n}\n","import { SubscriptionObject, skipUntilTimeElapsedAfterLastEmission } from '@dereekb/rxjs';\nimport { Subject } from 'rxjs';\nimport { ChangeDetectionStrategy, Component, OnDestroy, OnInit } from '@angular/core';\nimport { MatAutocompleteModule, MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';\nimport { MatChipInputEvent, MatChipsModule } from '@angular/material/chips';\nimport { AbstractDbxSearchableValueFieldDirective, SearchableValueFieldsFieldProps } from './searchable.field.directive';\nimport { COMMA, ENTER } from '@angular/cdk/keycodes';\nimport { PrimativeKey } from '@dereekb/util';\nimport { SearchableValueFieldDisplayValue } from './searchable';\nimport { MatIconModule } from '@angular/material/icon';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { DbxLoadingModule } from '@dereekb/dbx-web';\nimport { DbxSearchableFieldAutocompleteItemComponent } from './searchable.field.autocomplete.item.component';\nimport { MatOptionModule } from '@angular/material/core';\n\nexport interface SearchableChipValueFieldsFieldProps<T, M = unknown, H extends PrimativeKey = PrimativeKey> extends SearchableValueFieldsFieldProps<T, M, H> {\n /**\n * Whether or not to allow multiple items to be selected.\n */\n readonly multiSelect?: boolean;\n}\n\n@Component({\n templateUrl: 'searchable.chip.field.component.html',\n imports: [MatChipsModule, MatIconModule, FormsModule, ReactiveFormsModule, DbxLoadingModule, MatAutocompleteModule, MatOptionModule, DbxSearchableFieldAutocompleteItemComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxSearchableChipFieldComponent<T, M = unknown, H extends PrimativeKey = PrimativeKey> extends AbstractDbxSearchableValueFieldDirective<T, M, H, SearchableChipValueFieldsFieldProps<T, M, H>> implements OnInit, OnDestroy {\n override get multiSelect(): boolean {\n return this.props.multiSelect ?? true;\n }\n\n private readonly _blur = new Subject<void>();\n private readonly _blurSub = new SubscriptionObject();\n\n readonly separatorKeysCodes: number[] = [ENTER, COMMA];\n\n selected(event: MatAutocompleteSelectedEvent): void {\n this.addWithDisplayValue(event.option.value);\n }\n\n tabPressedOnInput(event: KeyboardEvent): boolean {\n if (event?.key?.toLowerCase() === 'tab') {\n if (this._tryAddCurrentInputValue()) {\n event.preventDefault();\n event.stopImmediatePropagation();\n return false;\n }\n }\n\n return true;\n }\n\n addChip(event: MatChipInputEvent): void {\n const text = event.value ?? this.inputCtrl.value;\n return this._addWithTextValue(text);\n }\n\n protected override _syncSingleValue(value: SearchableValueFieldDisplayValue<T>): void {\n // Do nothing\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n\n // Only try and add the text item as a value if a value wasn't just added (for example, clicking a value).\n this._blurSub.subscription = this._blur.pipe(skipUntilTimeElapsedAfterLastEmission(this.values$, 100)).subscribe(() => {\n this._tryAddCurrentInputValue();\n });\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._blur.complete();\n this._blurSub.destroy();\n }\n\n onBlur(): void {\n this._blur.next();\n }\n}\n","<div class=\"dbx-searchable-field\">\n <!-- View -->\n <mat-chip-grid [required]=\"required\" [disabled]=\"readonly\" #chipList>\n @for (displayValue of displayValuesSignal(); track displayValue.value) {\n <mat-chip-row [removable]=\"true\" (removed)=\"removeWithDisplayValue(displayValue)\">\n @if (displayValue.icon) {\n <mat-icon matChipAvatar>{{ displayValue.icon }}</mat-icon>\n }\n <span class=\"dbx-chip-label\">{{ displayValue.label }}</span>\n @if (displayValue.sublabel) {\n <span class=\"dbx-chip-sublabel\">{{ displayValue.sublabel }}</span>\n }\n @if (!readonly) {\n <mat-icon matChipRemove>cancel</mat-icon>\n }\n </mat-chip-row>\n }\n <input #textInput [name]=\"name\" [placeholder]=\"searchInputPlaceholder\" [formControl]=\"inputCtrl\" [matAutocomplete]=\"auto\" autocomplete=\"{{ autocomplete }}\" [matAutocompleteDisabled]=\"readonly\" [matChipInputFor]=\"chipList\" (keydown)=\"tabPressedOnInput($event)\" [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\" (matChipInputTokenEnd)=\"addChip($event)\" (blur)=\"onBlur()\" />\n </mat-chip-grid>\n <div class=\"searchable-field-form-loading\">\n <dbx-loading [linear]=\"true\" [context]=\"searchContext\"></dbx-loading>\n </div>\n</div>\n\n<!-- Autocomplete -->\n<mat-autocomplete class=\"dbx-searchable-text-field-autocomplete\" #auto=\"matAutocomplete\" (optionSelected)=\"selected($event)\">\n @for (displayValue of searchResultsSignal(); track displayValue.value) {\n <mat-option [value]=\"displayValue\">\n <dbx-searchable-field-autocomplete-item [displayValue]=\"displayValue\"></dbx-searchable-field-autocomplete-item>\n </mat-option>\n }\n</mat-autocomplete>\n","import { arrayToMap, type Maybe, type PrimativeKey, separateValues } from '@dereekb/util';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type Observable, of, switchMap, map } from 'rxjs';\nimport { type LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig, type DescriptionFieldConfig, type MaterialFormFieldConfig } from '../../field';\nimport { type SearchableValueFieldDisplayFn, type SearchableValueFieldDisplayValue, type SearchableValueFieldValue } from './searchable';\nimport { type SearchableChipValueFieldsFieldProps } from './searchable.chip.field.component';\nimport { type SearchableTextValueFieldsFieldProps } from './searchable.text.field.component';\n\n/**\n * Used to create a SearchableValueFieldDisplayFn function that will retrieve the metadata for items that are missing their metadata so they can be displayed properly.\n *\n * @param param0\n * @returns\n */\nexport function makeMetaFilterSearchableFieldValueDisplayFn<T extends string | number = string | number, M = unknown>({ loadMetaForValues, makeDisplayForValues }: { loadMetaForValues: (values: SearchableValueFieldValue<T, M>[]) => Observable<SearchableValueFieldValue<T, M>[]>; makeDisplayForValues: (values: SearchableValueFieldValue<T, M>[]) => Observable<SearchableValueFieldDisplayValue<T, M>[]> }): SearchableValueFieldDisplayFn<T, M> {\n return (values: SearchableValueFieldValue<T, M>[]) => {\n const { included: loaded, excluded: needLoading } = separateValues(values, (x) => Boolean(x.meta));\n let allValues: Observable<SearchableValueFieldValue<T, M>[]>;\n\n if (needLoading.length > 0) {\n const loadingResult = loadMetaForValues(needLoading);\n allValues = loadingResult.pipe(\n map((result) => {\n const resultMap: Map<Maybe<T>, SearchableValueFieldValue<T, M>> = arrayToMap(result, (x) => x.value);\n\n const mergedWithLoad = needLoading.map((x) => {\n const id = x.value;\n const loadedItem = resultMap.get(id);\n const anchor = x.anchor ?? loadedItem?.anchor;\n const meta: Maybe<M> = loadedItem?.meta;\n\n return {\n ...x,\n anchor,\n meta\n };\n });\n\n return mergedWithLoad;\n }),\n map((result) => [...loaded, ...result])\n );\n } else {\n allValues = of(loaded);\n }\n\n return allValues.pipe(switchMap(makeDisplayForValues));\n };\n}\n\n// MARK: Chips\nexport type StringSearchableChipFieldConfig<M = unknown> = Omit<SearchableChipFieldConfig<string, M>, 'allowStringValues'>;\n\nexport function searchableStringChipField<M = unknown>(config: StringSearchableChipFieldConfig<M>): FormlyFieldConfig {\n return searchableChipField({\n ...config,\n allowStringValues: true\n });\n}\n\nexport interface SearchableChipFieldConfig<T = unknown, M = unknown, H extends PrimativeKey = PrimativeKey> extends LabeledFieldConfig, DescriptionFieldConfig, MaterialFormFieldConfig, SearchableChipValueFieldsFieldProps<T, M, H> {}\n\nexport function searchableChipField<T, M = unknown, H extends PrimativeKey = PrimativeKey>(config: SearchableChipFieldConfig<T, M, H>): FormlyFieldConfig {\n const { key, placeholder, materialFormField } = config;\n return formlyField({\n key,\n type: 'searchablechipfield',\n ...propsAndConfigForFieldConfig(config, {\n ...materialFormField,\n ...config,\n placeholder: placeholder ?? 'Add...',\n autocomplete: false\n })\n });\n}\n\n// MARK: Text\nexport interface SearchableTextFieldConfig<T = unknown, M = unknown, H extends PrimativeKey = PrimativeKey> extends LabeledFieldConfig, DescriptionFieldConfig, MaterialFormFieldConfig, SearchableTextValueFieldsFieldProps<T, M, H> {}\n\nexport function searchableTextField<T, M = unknown, H extends PrimativeKey = PrimativeKey>(config: SearchableTextFieldConfig<T, M, H>): FormlyFieldConfig {\n const { key, materialFormField } = config;\n return formlyField({\n key,\n type: 'searchabletextfield',\n ...propsAndConfigForFieldConfig(config, {\n ...materialFormField,\n ...config,\n autocomplete: false\n })\n });\n}\n","import { ChangeDetectionStrategy, Component, computed, OnDestroy, OnInit } from '@angular/core';\nimport { MatAutocompleteModule, MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';\nimport { AbstractDbxSearchableValueFieldDirective, SearchableValueFieldsFieldProps } from './searchable.field.directive';\nimport { map, shareReplay } from 'rxjs';\nimport { PrimativeKey } from '@dereekb/util';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatIconModule } from '@angular/material/icon';\nimport { DbxLoadingModule } from '@dereekb/dbx-web';\nimport { DbxSearchableFieldAutocompleteItemComponent } from './searchable.field.autocomplete.item.component';\nimport { NgClass } from '@angular/common';\nimport { MatInput } from '@angular/material/input';\nimport { MatOptionModule } from '@angular/material/core';\nimport { SearchableValueFieldDisplayValue } from './searchable';\n\nexport interface SearchableTextValueFieldsFieldProps<T, M = unknown, H extends PrimativeKey = PrimativeKey> extends SearchableValueFieldsFieldProps<T, M, H> {\n readonly showSelectedValue?: boolean;\n}\n\n/**\n * Display component for selecting a single item/value.\n */\n@Component({\n templateUrl: 'searchable.text.field.component.html',\n imports: [FormsModule, MatInput, NgClass, ReactiveFormsModule, DbxLoadingModule, MatOptionModule, MatAutocompleteModule, MatChipsModule, MatIconModule, DbxSearchableFieldAutocompleteItemComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxSearchableTextFieldComponent<T, M = unknown, H extends PrimativeKey = PrimativeKey> extends AbstractDbxSearchableValueFieldDirective<T, M, H, SearchableTextValueFieldsFieldProps<T, M, H>> implements OnInit, OnDestroy {\n override allowSyncValueToInput = true;\n\n readonly selectedDisplayValue$ = this.displayValues$.pipe(\n map((x) => x[0]),\n shareReplay(1)\n );\n\n readonly selectedDisplayValueSignal = toSignal(this.selectedDisplayValue$);\n readonly hasValueSignal = computed(() => Boolean(this.selectedDisplayValueSignal()));\n readonly showSelectedDisplayValueSignal = computed(() => this.showSelectedValue && this.hasValueSignal());\n\n override get searchableField(): SearchableTextValueFieldsFieldProps<T, M, H> {\n return this.props;\n }\n\n get showSelectedValue() {\n return this.searchableField.showSelectedValue ?? !this.allowStringValues; // Show the selected value only if string values are allowed.\n }\n\n get multiSelect() {\n return false;\n }\n\n /*\n private _clearInputSub = new SubscriptionObject();\n\n override ngOnInit(): void {\n super.ngOnInit();\n\n this._clearInputSub.subscription = this.inputValue$.pipe(skipWhile((x) => !x)).subscribe((x) => {\n if (!x) {\n // this.clearValues();\n }\n });\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._clearInputSub.destroy();\n }\n */\n\n selected(event: MatAutocompleteSelectedEvent): void {\n const value = event.option.value as SearchableValueFieldDisplayValue<T> | { _ignore?: true } | { _clear?: true };\n\n console.log('selected', value);\n\n if ((value as any)._clear) {\n this.clearValues();\n } else if (!(value as any)._ignore) {\n this.addWithDisplayValue(value as SearchableValueFieldDisplayValue<T>);\n }\n }\n}\n","<div class=\"dbx-searchable-text-field\" [ngClass]=\"{ 'dbx-searchable-text-field-has-value': hasValueSignal(), 'dbx-searchable-text-field-show-value': showSelectedValue }\">\n <!-- Result View -->\n @if (showSelectedDisplayValueSignal()) {\n <div class=\"dbx-searchable-text-field-value mat-option mat-option-text\">\n <dbx-searchable-field-autocomplete-item [displayValue]=\"selectedDisplayValueSignal()!\"></dbx-searchable-field-autocomplete-item>\n </div>\n }\n <div class=\"dbx-searchable-text-field-input\">\n @if (searchLabel) {\n <div class=\"dbx-label\">{{ searchLabel }}</div>\n }\n <!-- View -->\n <input type=\"search\" [name]=\"name\" matInput #textInput [placeholder]=\"searchInputPlaceholder\" [formControl]=\"inputCtrl\" [matAutocomplete]=\"auto\" [matAutocompleteDisabled]=\"readonly || disabled\" autocomplete=\"{{ autocomplete }}\" />\n <div class=\"searchable-field-form-loading\">\n <dbx-loading [linear]=\"true\" [context]=\"searchContext\"></dbx-loading>\n </div>\n </div>\n</div>\n\n<!-- Autocomplete -->\n<mat-autocomplete class=\"dbx-searchable-text-field-autocomplete\" #auto (optionSelected)=\"selected($event)\">\n @for (displayValue of searchResultsSignal(); track displayValue.value) {\n <mat-option [value]=\"displayValue\">\n <dbx-searchable-field-autocomplete-item [displayValue]=\"displayValue\"></dbx-searchable-field-autocomplete-item>\n </mat-option>\n }\n <!-- If No Results -->\n @if (searchResultsSignal()?.length === 0) {\n @if (!isLoadingSearchResultsSignal()) {\n <mat-option value=\"\" disabled>\n <p class=\"dbx-clear-hint text-center\">No results found.</p>\n </mat-option>\n } @else {\n <mat-option value=\"\" disabled>\n <p class=\"dbx-clear-hint text-center\">Loading...</p>\n </mat-option>\n }\n }\n <!-- Add/Pick String Value -->\n @if (allowStringValues && inputValueSignal()) {\n <mat-option [value]=\"{ value: inputValueSignal() }\">\n <p class=\"dbx-clear-hint text-center\">\"{{ inputValueSignal() }}\"</p>\n </mat-option>\n }\n <!-- Show clear value -->\n @if (showClearValue && hasValueSignal()) {\n <mat-option value=\"\">\n <p class=\"dbx-clear-hint text-center\">Clear</p>\n </mat-option>\n }\n</mat-autocomplete>\n","import { NgModule } from '@angular/core';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxSearchableChipFieldComponent } from './searchable.chip.field.component';\nimport { DbxDefaultSearchableFieldDisplayComponent, DbxSearchableFieldAutocompleteItemComponent } from './searchable.field.autocomplete.item.component';\nimport { DbxSearchableTextFieldComponent } from './searchable.text.field.component';\n\nconst importsAndExports = [DbxSearchableChipFieldComponent, DbxSearchableTextFieldComponent, DbxSearchableFieldAutocompleteItemComponent, DbxDefaultSearchableFieldDisplayComponent];\n\n@NgModule({\n imports: [\n ...importsAndExports,\n FormlyModule.forChild({\n types: [\n { name: 'searchablechipfield', component: DbxSearchableChipFieldComponent, wrappers: ['form-field'] },\n { name: 'searchabletextfield', component: DbxSearchableTextFieldComponent, wrappers: ['form-field'] }\n ]\n })\n ],\n exports: importsAndExports\n})\nexport class DbxFormFormlySearchableFieldModule {}\n","import { of } from 'rxjs';\nimport { type LabeledFieldConfig } from '../../field';\nimport { type SearchableValueFieldValue } from './searchable';\nimport { searchableChipField } from './searchable.field';\nimport { type StringValueFieldsFieldProps } from './searchable.field.directive';\n\nexport interface ChipTextFieldConfig extends LabeledFieldConfig, StringValueFieldsFieldProps {\n caseSensitive?: boolean;\n}\n\nexport function chipTextField(config: ChipTextFieldConfig) {\n const convertStringValue = config.caseSensitive ? (x: string) => x : (x: string) => x?.toLowerCase();\n\n return searchableChipField({\n search: () => of([]), // no search by default\n ...config,\n allowStringValues: true,\n convertStringValue,\n displayForValue: (values: SearchableValueFieldValue<string>[]) => {\n return of(values.map((x) => ({ ...x, label: x.value })));\n }\n });\n}\n","import { filterMaybe, LoadingState, isLoadingStateWithDefinedValue, isLoadingStateLoading, LoadingStateWithDefinedValue, startWithBeginLoading, SubscriptionObject, successResult, beginLoading, mapLoadingStateValueWithOperator, loadingStateContext, WorkUsingContext, valueFromFinishedLoadingState } from '@dereekb/rxjs';\nimport { ChangeDetectionStrategy, Component, ElementRef, OnDestroy, OnInit, viewChild } from '@angular/core';\nimport { distinctUntilChanged, map, switchMap, shareReplay, startWith, mergeMap, scan, BehaviorSubject, tap, first, Observable, combineLatest, of } from 'rxjs';\nimport { addToSetCopy, asArray, convertMaybeToArray, filterMaybeArrayValues, lastValue, makeValuesGroupMap, Maybe, mergeArrays, PrimativeKey, separateValues, setContainsAllValues, setsAreEquivalent, sortByStringFunction } from '@dereekb/util';\nimport { FieldType, FormlyFieldProps } from '@ngx-formly/material/form-field';\nimport { FieldTypeConfig } from '@ngx-formly/core';\nimport { SourceSelectValueMetaLoader, SourceSelectMetaValueReader, SourceSelectOpenFunction, SourceSelectLoadSourcesFunction, SourceSelectLoadSource, SourceSelectLoadSourceLoadingState, SourceSelectDisplayValue, SourceSelectValue, SourceSelectDisplayFunction, SourceSelectDisplayValueGroup, SourceSelectValueGroup, SourceSelectOptions, SourceSelectOpenSourceResult } from './sourceselect';\nimport { AbstractControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { MatOptgroup, MatOption, MatSelect } from '@angular/material/select';\nimport { DbxActionModule, DbxButtonComponent, DbxButtonSpacerDirective, DbxLoadingComponent } from '@dereekb/dbx-web';\n\nexport interface SourceSelectFieldProps<T extends PrimativeKey = PrimativeKey, M = unknown> extends FormlyFieldProps {\n /**\n * Function to open the source and request values.\n */\n readonly openSource?: SourceSelectOpenFunction<M>;\n /**\n * Loads the sources to display entries from.\n */\n readonly loadSources?: SourceSelectLoadSourcesFunction<M>;\n /**\n * Reads the value from a meta value.\n */\n readonly valueReader: SourceSelectMetaValueReader<T, M>;\n /**\n * Loads metadata for the input values.\n */\n readonly metaLoader: SourceSelectValueMetaLoader<T, M>;\n /**\n * Used for building a display value given the input.\n */\n readonly displayForValue: SourceSelectDisplayFunction<T, M>;\n /**\n * Select button icon\n */\n readonly selectButtonIcon?: string;\n /**\n * Whether or not the selection is as an array.\n */\n readonly multiple?: boolean;\n /**\n * (Optional) observable that will trigger the clearing of all cached display values.\n */\n readonly refreshDisplayValues$?: Observable<unknown>;\n}\n\ninterface SelectFieldOpenSourceMap<T extends PrimativeKey = PrimativeKey, M = unknown> {\n readonly values: SourceSelectValue<T, M>[];\n readonly valuesSet: Set<T>;\n}\n\n/**\n * Component that displays a select view (multi or not)\n */\n@Component({\n selector: 'dbx-form-sourceselectfield',\n templateUrl: 'sourceselect.field.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatSelect, MatOption, FormsModule, ReactiveFormsModule, DbxButtonComponent, MatOptgroup, DbxButtonSpacerDirective, DbxActionModule, DbxLoadingComponent],\n standalone: true\n})\nexport class DbxFormSourceSelectFieldComponent<T extends PrimativeKey = PrimativeKey, M = unknown> extends FieldType<FieldTypeConfig<SourceSelectFieldProps<T, M>>> implements OnInit, OnDestroy {\n private readonly _cacheMetaSub = new SubscriptionObject();\n private readonly _clearDisplayHashMapSub = new SubscriptionObject();\n private readonly _valueMetaHashMap = new BehaviorSubject<Map<T, SourceSelectValue<T, M>>>(new Map());\n private readonly _displayHashMap = new BehaviorSubject<Map<T, SourceSelectDisplayValue<T, M>>>(new Map());\n\n private readonly _formControlObs = new BehaviorSubject<Maybe<AbstractControl<T[]>>>(undefined);\n private readonly _fromOpenSource = new BehaviorSubject<SelectFieldOpenSourceMap<T, M>>({ values: [], valuesSet: new Set() });\n private readonly _loadSources = new BehaviorSubject<Maybe<Observable<SourceSelectLoadSource<M>[]>>>(undefined);\n\n readonly buttonElement = viewChild<string, ElementRef<HTMLElement>>('button', { read: ElementRef<HTMLElement> });\n\n readonly formControl$ = this._formControlObs.pipe(filterMaybe());\n\n readonly currentFormControlValue$ = this.formControl$.pipe(\n switchMap((control) => control.valueChanges.pipe(startWith(control.value))),\n shareReplay(1)\n );\n\n readonly values$: Observable<T[]> = this.currentFormControlValue$.pipe(map(convertMaybeToArray), shareReplay(1));\n\n readonly allValuesEverSelected$: Observable<T[]> = this.values$.pipe(\n scan((acc, values) => {\n let result: Set<T> = acc;\n\n if (!setContainsAllValues(acc, values)) {\n result = addToSetCopy(acc, values);\n }\n\n return result;\n }, new Set<T>()),\n distinctUntilChanged(),\n map((x) => Array.from(x)),\n shareReplay(1)\n );\n\n readonly sourceSelectValuesFromValuesState$: Observable<LoadingState<SourceSelectValue<T, M>[]>> = this.allValuesEverSelected$.pipe(\n distinctUntilChanged(),\n switchMap((values: T[]) => this.loadSourceSelectValueForValues(values)),\n shareReplay(1)\n );\n\n readonly loadSources$: Observable<LoadingState<SourceSelectValueGroup<T, M>[]>> = this._loadSources.pipe(\n filterMaybe(),\n switchMap((loadSource) => {\n const { valueReader } = this;\n\n return loadSource.pipe(\n switchMap((sources: SourceSelectLoadSource<M>[]) => {\n const sourceObs: Observable<SourceSelectLoadSourceLoadingState<M>>[] = sources.map((x) => x.meta.pipe(map((metaState) => ({ ...metaState, label: x.label }))));\n\n if (sourceObs.length === 0) {\n return of(successResult([]));\n } else {\n return combineLatest(sourceObs).pipe(\n map((x) => {\n const statesWithValues = x.filter((y) => isLoadingStateWithDefinedValue(y));\n const loading = x.findIndex(isLoadingStateLoading) !== -1;\n const value: SourceSelectValueGroup<T, M>[] = statesWithValues.map((y) => {\n const group: SourceSelectValueGroup<T, M> = {\n label: y.label,\n values: (y.value as M[]).map((meta) => ({ meta, value: valueReader(meta) }))\n };\n\n return group;\n });\n\n return {\n loading,\n value\n };\n })\n );\n }\n })\n );\n })\n );\n\n readonly fromOpenSource$: Observable<SourceSelectValueGroup<T, M>> = this._fromOpenSource.pipe(\n distinctUntilChanged((a, b) => setsAreEquivalent(a.valuesSet, b.valuesSet)),\n map((x) => {\n const group: SourceSelectValueGroup<T, M> = {\n label: '',\n values: x.values\n };\n\n return group;\n }),\n shareReplay(1)\n );\n\n readonly valueGroupsFromSourcesState$: Observable<LoadingStateWithDefinedValue<SourceSelectValueGroup<T, M>[]>> = combineLatest([this.fromOpenSource$, this.loadSources$]).pipe(\n map(([fromOpenSourceGroup, loadSources]) => {\n const loadSourcesValue = loadSources.value ?? [];\n const value: SourceSelectValueGroup<T, M>[] = [fromOpenSourceGroup, ...loadSourcesValue];\n\n const result: LoadingStateWithDefinedValue<SourceSelectValueGroup<T, M>[]> = {\n loading: loadSources.loading,\n value\n };\n\n return result;\n }),\n shareReplay(1)\n );\n\n readonly allValueGroupsState$: Observable<LoadingState<SourceSelectValueGroup<T, M>[]>> = this.sourceSelectValuesFromValuesState$.pipe(\n switchMap((sourceSelectValuesFromValues: LoadingState<SourceSelectValue<T, M>[]>) => {\n if (isLoadingStateWithDefinedValue(sourceSelectValuesFromValues)) {\n const valuesFromValuesGroup: SourceSelectValueGroup<T, M> = {\n label: '',\n values: sourceSelectValuesFromValues.value\n };\n\n return this.valueGroupsFromSourcesState$.pipe(\n map((sourcesState) => {\n const allGroups: SourceSelectValueGroup<T, M>[] = [valuesFromValuesGroup, ...sourcesState.value];\n\n const result: LoadingState<SourceSelectValueGroup<T, M>[]> = {\n loading: sourceSelectValuesFromValues.loading || sourcesState.loading,\n value: allGroups\n };\n\n return result;\n })\n );\n } else {\n return of(beginLoading<SourceSelectValueGroup<T, M>[]>({}));\n }\n }),\n shareReplay(1)\n );\n\n readonly allOptionGroupsState$: Observable<LoadingState<SourceSelectDisplayValueGroup<T, M>[]>> = this.allValueGroupsState$.pipe(\n mapLoadingStateValueWithOperator(\n switchMap((groups: SourceSelectValueGroup<T, M>[]) => {\n const allGroupsReducedByLabel = makeValuesGroupMap(groups, (x) => x.label) as Map<string, SourceSelectValueGroup<T, M>[]>;\n\n const valuesEncountered = new Set<T>();\n const allUniqueValues: SourceSelectValue<T, M>[] = [];\n\n const simplifiedValuesGroups: SourceSelectValueGroup<T, M>[] = [];\n\n // sort to put the blank label first\n Array.from(allGroupsReducedByLabel.entries())\n .sort(sortByStringFunction((x) => x[0]))\n .forEach(([label, groups]) => {\n const values: SourceSelectValue<T, M>[] = [];\n\n groups.forEach((group) => {\n group.values.forEach((selectValue) => {\n if (!valuesEncountered.has(selectValue.value)) {\n values.push(selectValue);\n allUniqueValues.push(selectValue);\n valuesEncountered.add(selectValue.value);\n }\n });\n });\n\n if (values.length > 0) {\n simplifiedValuesGroups.push({\n label,\n values\n });\n }\n });\n\n const obs = this.getDisplayValuesForSelectValues(allUniqueValues).pipe(\n map((displayValues) => {\n const displayValuesMap = new Map(displayValues.map((x) => [x.value, x]));\n\n const displayGroups: SourceSelectDisplayValueGroup<T, M>[] = simplifiedValuesGroups.map((valueGroup) => {\n const values = filterMaybeArrayValues(valueGroup.values.map((x) => displayValuesMap.get(x.value)));\n\n return {\n label: valueGroup.label,\n values\n };\n });\n\n return displayGroups;\n })\n );\n\n return obs;\n })\n ),\n shareReplay(1)\n );\n\n readonly allOptionGroups$: Observable<SourceSelectDisplayValueGroup<T, M>[]> = this.allOptionGroupsState$.pipe(\n valueFromFinishedLoadingState(),\n map((x) => x ?? []),\n shareReplay(1)\n );\n\n readonly options$: Observable<SourceSelectOptions<T, M>> = this.allOptionGroups$.pipe(\n map((x) => {\n const { included: groupedValues, excluded: nonGroupedGroup } = separateValues(x, (y) => Boolean(y.label));\n\n const result: SourceSelectOptions<T, M> = {\n nonGroupedValues: nonGroupedGroup[0]?.values ?? [],\n groupedValues\n };\n\n return result;\n }),\n shareReplay(1)\n );\n\n readonly nonGroupedValues$ = this.options$.pipe(map((x) => x.nonGroupedValues));\n readonly groupedOptions$ = this.options$.pipe(map((x) => x.groupedValues));\n\n readonly nonGroupedValuesSignal = toSignal(this.nonGroupedValues$);\n readonly groupedOptionsSignal = toSignal(this.groupedOptions$);\n\n get sourceSelectField(): SourceSelectFieldProps<T, M> {\n return this.props;\n }\n\n get openSource() {\n return this.props.openSource;\n }\n\n get showOpenSourceButton() {\n return Boolean(this.openSource);\n }\n\n get loadSources() {\n return this.props.loadSources;\n }\n\n get valueReader() {\n return this.props.valueReader;\n }\n\n get metaLoader() {\n return this.props.metaLoader;\n }\n\n get displayForValue(): SourceSelectDisplayFunction<T, M> {\n return this.props.displayForValue;\n }\n\n get selectButtonIcon() {\n return this.props.selectButtonIcon ?? 'add';\n }\n\n get multiple() {\n return this.props.multiple || false;\n }\n\n get refreshDisplayValues$() {\n return this.props.refreshDisplayValues$;\n }\n\n loadSourceSelectValueForValues(values: T[]): Observable<LoadingState<SourceSelectValue<T, M>[]>> {\n return this.getSourceSelectValueForValues(values).pipe(\n map((sourceSelectValues: SourceSelectValue<T, M>[]) => successResult(sourceSelectValues)),\n startWithBeginLoading(),\n shareReplay(1)\n );\n }\n\n getSourceSelectValueForValues(values: T[]): Observable<SourceSelectValue<T, M>[]> {\n const { valueReader } = this;\n\n return this._valueMetaHashMap.pipe(\n mergeMap((metaMap) => {\n const mappingResult = values.map((hash, i) => [i, hash, metaMap.get(hash)] as [number, T, SourceSelectValue<T, M>]);\n\n const {\n //\n included: hasMeta,\n excluded: needsMeta\n } = separateValues(mappingResult, (x) => Boolean(x[2]));\n\n let obs: Observable<SourceSelectValue<T, M>[]>;\n\n if (needsMeta.length > 0) {\n // Go get the meta value.\n const metaValuesObs = this.metaLoader(needsMeta.map((x) => x[1]));\n\n obs = metaValuesObs.pipe(\n first(),\n map((metaResults) => {\n const metaResultsMapping: SourceSelectValue<T, M>[] = metaResults.map((meta) => ({ meta, value: valueReader(meta) }));\n const valueIndexHashMap = new Map(metaResultsMapping.map((x) => [x.value, x]));\n\n // Update metaMap. No need to push an update notification.\n metaResultsMapping.forEach((x) => metaMap.set(x.value, x));\n\n // Zip values back together.\n const newDisplayValues = mappingResult.map((x) => x[2] ?? valueIndexHashMap.get(x[1]));\n\n // Return display values.\n return newDisplayValues;\n })\n );\n } else {\n // If all display values are hashed return them\n obs = of(hasMeta.map((x) => x[2]));\n }\n\n return obs;\n })\n );\n }\n\n loadDisplayValuesForSelectValues(values: SourceSelectValue<T, M>[]): Observable<LoadingState<SourceSelectDisplayValue<T, M>[]>> {\n return this.getDisplayValuesForSelectValues(values).pipe(\n map((displayValues: SourceSelectDisplayValue<T, M>[]) => successResult(displayValues)),\n startWithBeginLoading(),\n shareReplay(1)\n );\n }\n\n getDisplayValuesForSelectValues(values: SourceSelectValue<T, M>[]): Observable<SourceSelectDisplayValue<T, M>[]> {\n return this._displayHashMap.pipe(\n mergeMap((metaMap) => {\n const mappingResult = values.map((x) => [x, x.value] as [SourceSelectValue<T, M>, T]).map(([x, hash], i) => [i, hash, x, metaMap.get(hash)] as [number, T, SourceSelectValue<T, M>, SourceSelectDisplayValue<T, M>]);\n\n const hasDisplay = mappingResult.filter((x) => Boolean(x[3]));\n const needsDisplay = mappingResult.filter((x) => !x[3]);\n let obs: Observable<SourceSelectDisplayValue<T, M>[]>;\n\n if (needsDisplay.length > 0) {\n // Go get the display value.\n const displayValuesObs = this.displayForValue(needsDisplay.map((x) => x[2]));\n\n obs = displayValuesObs.pipe(\n first(),\n map((displayResults) => {\n const displayResultsMapping: [SourceSelectDisplayValue<T, M>, T][] = (displayResults as SourceSelectDisplayValue<T, M>[]).map((x) => [x, x.value]);\n const valueIndexHashMap = new Map(displayResultsMapping.map(([x, hash]) => [hash, x]));\n\n // Update metaMap. No need to push an update notification.\n displayResultsMapping.forEach(([x, hash]) => metaMap.set(hash, x));\n\n // Zip values back together.\n const newDisplayValues = mappingResult.map((x) => x[3] ?? valueIndexHashMap.get(x[1]));\n\n // Return display values.\n return newDisplayValues;\n })\n );\n } else {\n // If all display values are hashed return that.\n obs = of(hasDisplay.map((x) => x[3]));\n }\n\n return obs;\n })\n );\n }\n\n readonly context = loadingStateContext({ obs: this.allOptionGroupsState$ });\n\n ngOnInit(): void {\n const { loadSources } = this;\n\n this._loadSources.next(loadSources?.() || of([]));\n\n if (this.refreshDisplayValues$ != null) {\n this._clearDisplayHashMapSub.subscription = this.refreshDisplayValues$.subscribe(() => this._displayHashMap.next(new Map()));\n }\n\n this._formControlObs.next(this.formControl);\n\n // copy all values from the sources into the values hash map to prevent reloading\n this._cacheMetaSub.subscription = this.valueGroupsFromSourcesState$.subscribe((x) => {\n const hashMap = this._valueMetaHashMap.value;\n x.value.forEach((x) => x.values.forEach((y) => hashMap.set(y.value, y)));\n });\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._cacheMetaSub.destroy();\n this._clearDisplayHashMapSub.destroy();\n this._valueMetaHashMap.complete();\n this._displayHashMap.complete();\n this._formControlObs.complete();\n this._fromOpenSource.complete();\n this._loadSources.complete();\n this.context.destroy();\n }\n\n readonly handleSelectOptions: WorkUsingContext<unknown> = (_, context) => {\n const { openSource } = this;\n const origin = this.buttonElement();\n\n if (openSource && origin) {\n const sourceObs = openSource({ origin });\n context.startWorkingWithObservable(\n sourceObs.pipe(\n first(),\n tap((result: SourceSelectOpenSourceResult<M>) => {\n const valuesToAdd = mergeArrays([result.select, result.options]);\n\n if (valuesToAdd.length) {\n this.addToOpenSourceMap(valuesToAdd);\n }\n\n if (result.set) {\n this.setCurrentValue(result.set.map((x) => this.valueReader(x)));\n } else if (result.select) {\n this.addToCurrentValue(result.select.map((x) => this.valueReader(x)));\n }\n })\n )\n );\n } else {\n context.reject();\n }\n };\n\n private addToOpenSourceMap(input: M[]) {\n const { valueReader } = this;\n const { values: meta, valuesSet: initialValues } = this._fromOpenSource.value;\n\n const newMetaFromInput: SourceSelectValue<T, M>[] = [];\n const valuesSet = new Set(initialValues);\n\n input.forEach((x) => {\n const value = valueReader(x);\n\n if (!valuesSet.has(value)) {\n newMetaFromInput.push({ meta: x, value });\n valuesSet.add(value);\n }\n });\n\n if (newMetaFromInput.length > 0) {\n this._fromOpenSource.next({\n values: [...meta, ...newMetaFromInput],\n valuesSet: valuesSet\n });\n }\n }\n\n private addToCurrentValue(values: T[]) {\n const currentValue = asArray(this.formControl.value);\n const newValueArray = [...currentValue, ...values];\n this.setCurrentValue(newValueArray);\n }\n\n private setCurrentValue(newValueArray: T[]) {\n const value = this.multiple ? newValueArray : lastValue(newValueArray); // pick last value, as the last value added is the newest value.\n this.formControl.setValue(value);\n this.formControl.markAsDirty();\n this.formControl.markAsTouched();\n }\n}\n","<div class=\"dbx-source-select-field\">\n <div class=\"dbx-source-select-field-content\">\n <mat-select class=\"dbx-source-select-field-select\" [id]=\"id\" [formControl]=\"formControl\" [multiple]=\"props.multiple\">\n @for (value of nonGroupedValuesSignal(); track value.value) {\n <mat-option [value]=\"value.value\">\n {{ value.label }}\n </mat-option>\n }\n @for (optionGroup of groupedOptionsSignal(); track optionGroup.label) {\n <mat-optgroup [label]=\"optionGroup.label\">\n @for (value of optionGroup.values; track value.value) {\n <mat-option [value]=\"value.value\">\n {{ value.label }}\n </mat-option>\n }\n </mat-optgroup>\n }\n </mat-select>\n @if (showOpenSourceButton) {\n <dbx-button-spacer></dbx-button-spacer>\n <dbx-action dbxActionValue [dbxActionHandler]=\"handleSelectOptions\" class=\"dbx-source-select-field-button\">\n <dbx-button #button dbxActionButton [fab]=\"true\" [iconOnly]=\"true\" [icon]=\"selectButtonIcon\"></dbx-button>\n </dbx-action>\n }\n </div>\n <dbx-loading class=\"dbx-source-select-field-loading\" [linear]=\"true\" [context]=\"context\"></dbx-loading>\n</div>\n","import { type PrimativeKey } from '@dereekb/util';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig, type DescriptionFieldConfig, type MaterialFormFieldConfig } from '../../field';\nimport { type SourceSelectFieldProps } from './sourceselect.field.component';\n\n// MARK: Text\nexport interface SourceSelectFieldConfig<T extends PrimativeKey = PrimativeKey, M = unknown> extends LabeledFieldConfig, DescriptionFieldConfig, MaterialFormFieldConfig, SourceSelectFieldProps<T, M> {}\n\nexport function sourceSelectField<T extends PrimativeKey = PrimativeKey, M = unknown>(config: SourceSelectFieldConfig<T, M>): FormlyFieldConfig {\n const { key, materialFormField } = config;\n return formlyField({\n key,\n type: 'sourceselectfield',\n ...propsAndConfigForFieldConfig(config, {\n ...materialFormField,\n ...config,\n autocomplete: false\n })\n });\n}\n","import { NgModule } from '@angular/core';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxFormSourceSelectFieldComponent } from './sourceselect.field.component';\n\n@NgModule({\n imports: [\n DbxFormSourceSelectFieldComponent,\n FormlyModule.forChild({\n types: [{ name: 'sourceselectfield', component: DbxFormSourceSelectFieldComponent, wrappers: ['form-field'] }]\n })\n ],\n exports: [DbxFormSourceSelectFieldComponent]\n})\nexport class DbxFormFormlySourceSelectModule {}\n","import { asObservable, type ObservableOrValue } from '@dereekb/rxjs';\nimport { convertMaybeToArray, firstValue, type LabeledValue, type Maybe } from '@dereekb/util';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { map } from 'rxjs';\nimport { type DescriptionFieldConfig, formlyField, type FormlyValueParser, type LabeledFieldConfig, type MaterialFormFieldConfig, propsAndConfigForFieldConfig } from '../field';\n\nexport interface ValueSelectionOptionWithValue<T> extends LabeledValue<T> {\n disabled?: boolean;\n}\n\nexport interface ValueSelectionOptionClear {\n label?: string;\n clear: true;\n}\n\nexport type ValueSelectionOption<T> = ValueSelectionOptionWithValue<T> | ValueSelectionOptionClear;\n\nexport interface ValueSelectionFieldConfig<T> extends LabeledFieldConfig, DescriptionFieldConfig, MaterialFormFieldConfig {\n /**\n * Whether or not to use the native select.\n *\n * Be sure to import FormlyMatNativeSelectModule.\n */\n readonly native?: boolean;\n /**\n * Whether or not to add a clear option to the input values.\n */\n readonly addClearOption?: string | boolean;\n /**\n * Values to select from.\n */\n readonly options: ObservableOrValue<ValueSelectionOption<T>[]>;\n /**\n * Allow selecting multiple values and return an array.\n */\n readonly multiple?: boolean;\n /**\n * The select all option configuration.\n */\n readonly selectAllOption?: true | string;\n}\n\nexport function valueSelectionField<T>(config: ValueSelectionFieldConfig<T>): FormlyFieldConfig {\n const { key, native = false, addClearOption = false, selectAllOption: inputSelectAllOption, options: inputOptions, materialFormField } = config;\n let selectAllOptionConfig: Maybe<{ selectAllOption: string }>;\n\n if (inputSelectAllOption) {\n selectAllOptionConfig = {\n selectAllOption: typeof inputSelectAllOption === 'boolean' ? 'Select All' : (inputSelectAllOption as string)\n };\n }\n\n const options = addClearOption ? asObservable(inputOptions).pipe(map(addValueSelectionOptionFunction(typeof addClearOption === 'string' ? addClearOption : undefined))) : inputOptions;\n let parsers: FormlyValueParser[] | undefined = undefined;\n\n parsers = config.multiple !== true ? [firstValue] : [convertMaybeToArray];\n\n return formlyField({\n key,\n type: native ? 'native-select' : 'select',\n ...propsAndConfigForFieldConfig(config, {\n ...materialFormField,\n options,\n multiple: config.multiple,\n ...selectAllOptionConfig\n }),\n parsers\n });\n}\n\nexport function addValueSelectionOptionFunction<T>(label?: string | undefined): (options: ValueSelectionOption<T>[]) => ValueSelectionOption<T>[] {\n return (options: ValueSelectionOption<T>[]) => {\n const hasClear = options.findIndex((x) => (x as ValueSelectionOptionClear).clear) !== -1;\n\n if (hasClear) {\n return options;\n } else {\n return [{ label, clear: true }, ...options];\n }\n };\n}\n","import { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { CompactContextStore, mapCompactModeObs } from '@dereekb/dbx-web';\nimport { ChangeDetectionStrategy, Component, OnDestroy, OnInit, inject } from '@angular/core';\nimport { FieldTypeConfig, FormlyFieldProps } from '@ngx-formly/core';\nimport { FieldType } from '@ngx-formly/material';\nimport { Editor, NgxEditorModule } from '@bobbyquantum/ngx-editor';\nimport { debounceTime, filter } from 'rxjs';\nimport { filterMaybe, SubscriptionObject } from '@dereekb/rxjs';\nimport { type Maybe } from '@dereekb/util';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { NgClass } from '@angular/common';\n\nexport type TextEditorComponentFieldProps = FormlyFieldProps;\n\n@Component({\n template: `\n <div class=\"dbx-texteditor-field\" [ngClass]=\"compactClassSignal()\" [formGroup]=\"formGroup\">\n @if (label) {\n <span class=\"dbx-label\">{{ label }}</span>\n }\n <div class=\"dbx-texteditor-field-input\">\n <ngx-editor [editor]=\"editor\" outputFormat=\"html\" [placeholder]=\"placeholder\" [formControlName]=\"formGroupName\"></ngx-editor>\n </div>\n <div class=\"dbx-texteditor-field-menu\">\n <ngx-editor-menu [editor]=\"editor\"></ngx-editor-menu>\n </div>\n @if (description) {\n <div class=\"dbx-form-description\">{{ description }}</div>\n }\n </div>\n `,\n imports: [NgClass, NgxEditorModule, FormsModule, ReactiveFormsModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxTextEditorFieldComponent<T extends TextEditorComponentFieldProps = TextEditorComponentFieldProps> extends FieldType<FieldTypeConfig<T>> implements OnInit, OnDestroy {\n private readonly _compactContextStore = inject(CompactContextStore, { optional: true });\n\n private _editor!: Editor;\n private readonly _sub = new SubscriptionObject();\n\n readonly compactClass$ = mapCompactModeObs(this._compactContextStore?.mode$, {\n compact: 'dbx-texteditor-field-compact'\n }).pipe(filterMaybe());\n\n readonly compactClassSignal = toSignal(this.compactClass$, { initialValue: '' });\n\n get formGroupName(): string {\n return this.field.key as string;\n }\n\n get formGroup(): FormGroup {\n return this.form as FormGroup;\n }\n\n get editor(): Editor {\n return this._editor;\n }\n\n get label(): Maybe<string> {\n return this.field.props?.label;\n }\n\n get description(): Maybe<string> {\n return this.props.description;\n }\n\n ngOnInit(): void {\n this._editor = new Editor({});\n\n // TODO: Sync disabled state too\n\n // TODO: Sync the value periodically while not focused too\n\n // Watch for value changes every second and update the pristine level.\n this._sub.subscription = this.editor.valueChanges\n .pipe(\n debounceTime(50),\n filter(() => this.editor.view.hasFocus())\n )\n .subscribe(() => {\n this.formControl.updateValueAndValidity();\n this.formControl.markAsDirty();\n });\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n\n if (this._editor != null) {\n this._editor.destroy();\n }\n\n this._sub.destroy();\n }\n}\n","import { NgModule } from '@angular/core';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxTextEditorFieldComponent } from './texteditor.field.component';\n\nconst importsAndExports = [DbxTextEditorFieldComponent];\n\n@NgModule({\n imports: [\n ...importsAndExports,\n FormlyModule.forChild({\n types: [{ name: 'texteditor', component: DbxTextEditorFieldComponent }]\n })\n ],\n exports: importsAndExports\n})\nexport class DbxFormFormlyTextEditorFieldModule {}\n","import { type DescriptionFieldConfig, type MaterialFormFieldConfig, type LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig } from './../field';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type TextFieldLengthConfig } from '../value/text/text.field';\n\nexport interface TextEditorFieldConfig extends LabeledFieldConfig, DescriptionFieldConfig, TextFieldLengthConfig, MaterialFormFieldConfig {}\n\nexport function textEditorField(config: TextEditorFieldConfig): FormlyFieldConfig {\n const { key, minLength, maxLength, materialFormField } = config;\n const fieldConfig: FormlyFieldConfig = formlyField({\n key,\n type: 'texteditor',\n defaultValue: '', // Set to always get a string as a result.\n modelOptions: {\n // https://formly.dev/examples/validation/async-validation-update-on\n // Set to trigger value update on blurs with the form. However, the value is set internally too.\n updateOn: 'blur'\n },\n ...propsAndConfigForFieldConfig(config, {\n ...materialFormField,\n minLength,\n maxLength\n })\n });\n\n return fieldConfig;\n}\n","import { CdkDragDrop, DragDropModule } from '@angular/cdk/drag-drop';\nimport { Component, ChangeDetectionStrategy } from '@angular/core';\nimport { asDecisionFunction, cachedGetter, DecisionFunction, FactoryWithRequiredInput, Getter, getValueFromGetter, IndexRef, makeGetter, type Maybe } from '@dereekb/util';\nimport { FieldArrayTypeConfig, FieldArrayType, FormlyFieldConfig, FormlyFieldProps, FormlyModule } from '@ngx-formly/core';\nimport { DbxBarDirective, DbxButtonComponent, DbxButtonSpacerDirective, DbxSubSectionComponent } from '@dereekb/dbx-web';\nimport { MatIconModule } from '@angular/material/icon';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\n\nexport interface DbxFormRepeatArrayPair<T = unknown> extends IndexRef {\n readonly value?: T | undefined;\n}\n\nexport interface DbxFormRepeatArrayFieldConfigPair<T = unknown> extends Partial<DbxFormRepeatArrayPair<T>> {\n readonly fieldConfig: FormlyFieldConfig;\n}\n\nexport type DbxFormRepeatArrayAddTemplateFunction<T> = FactoryWithRequiredInput<Partial<Maybe<T>>, number>;\n\nexport interface DbxFormRepeatArrayConfig<T = unknown> extends Pick<FormlyFieldProps, 'maxLength' | 'label' | 'description'> {\n readonly labelForField?: string | FactoryWithRequiredInput<string, DbxFormRepeatArrayFieldConfigPair<T>>;\n /**\n * Text for the add button.\n */\n readonly addText?: string;\n /**\n * Optional template function to create a new template when using the add button.\n */\n readonly addTemplate?: DbxFormRepeatArrayAddTemplateFunction<T>;\n /**\n * Text for the duplicate button.\n */\n readonly duplicateText?: string;\n /**\n * Text for the remove button.\n */\n readonly removeText?: string;\n /**\n * Whethe or not to disable rearranging items.\n *\n * False by default.\n */\n readonly disableRearrange?: boolean;\n /**\n * Wether or not to show the add button.\n *\n * True by default.\n */\n readonly allowAdd?: boolean;\n /**\n * Whether or not to allow duplicateing items. Can optionally pass a decision function that decides whether or not a specific item can be removed.\n */\n readonly allowDuplicate?: boolean | DecisionFunction<DbxFormRepeatArrayPair<T>>;\n /**\n * Whether or not to allow removing items. Can optionally pass a decision function that decides whether or not a specific item can be removed.\n */\n readonly allowRemove?: boolean | DecisionFunction<DbxFormRepeatArrayPair<T>>;\n /**\n * Adds the duplicate to the end of the values\n */\n readonly addDuplicateToEnd?: boolean;\n}\n\n@Component({\n template: `\n <div class=\"dbx-form-repeat-array\">\n <dbx-subsection [header]=\"label\" [hint]=\"description\">\n <!-- Fields -->\n <div class=\"dbx-form-repeat-array-fields\" cdkDropList [cdkDropListDisabled]=\"disableRearrange\" (cdkDropListDropped)=\"drop($event)\">\n @for (field of field.fieldGroup; track field.key; let i = $index; let last = $last) {\n <div class=\"dbx-form-repeat-array-field\" cdkDrag cdkDragLockAxis=\"y\">\n <div class=\"dbx-form-repeat-array-drag-placeholder\" *cdkDragPlaceholder></div>\n <dbx-bar class=\"dbx-form-repeat-array-bar dbx-bar-fixed-height\">\n @if (!disableRearrange) {\n <button class=\"dbx-form-repeat-array-drag-button\" cdkDragHandle mat-stroked-button><mat-icon>drag_handle</mat-icon></button>\n <dbx-button-spacer></dbx-button-spacer>\n }\n <h4>\n <span class=\"repeat-array-number\">{{ i + 1 }}</span>\n <span>{{ labelForItem(field, i) }}</span>\n </h4>\n <span class=\"dbx-spacer\"></span>\n @if (allowDuplicate(i)) {\n <dbx-button [stroked]=\"true\" [text]=\"duplicateText\" (buttonClick)=\"duplicate(i)\"></dbx-button>\n <dbx-button-spacer></dbx-button-spacer>\n }\n @if (allowRemove(i)) {\n <dbx-button color=\"warn\" [stroked]=\"true\" [text]=\"removeText\" (buttonClick)=\"remove(i)\"></dbx-button>\n }\n </dbx-bar>\n <formly-field class=\"dbx-form-repeat-array-field-content\" [field]=\"field\"></formly-field>\n </div>\n }\n </div>\n <!-- Add Button -->\n <div class=\"dbx-form-repeat-array-footer\">\n @if (allowAdd) {\n <dbx-button [raised]=\"true\" [disabled]=\"addItemDisabled\" [text]=\"addText\" (buttonClick)=\"addClicked()\"></dbx-button>\n }\n </div>\n </dbx-subsection>\n </div>\n `,\n imports: [DbxSubSectionComponent, DbxBarDirective, DbxButtonComponent, FormlyModule, DragDropModule, MatIconModule, DbxButtonSpacerDirective, MatFormFieldModule, FormsModule, ReactiveFormsModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFormRepeatArrayTypeComponent<T = unknown> extends FieldArrayType<FieldArrayTypeConfig<DbxFormRepeatArrayConfig>> {\n private readonly _labelForField = cachedGetter(() => {\n const input = this.repeatArrayField.labelForField;\n\n if (typeof input === 'function') {\n return input;\n } else {\n return makeGetter(input ?? '');\n }\n });\n\n private readonly _allowRemove: Getter<DecisionFunction<DbxFormRepeatArrayPair<T>>> = cachedGetter(() => {\n return asDecisionFunction(this.field.props.allowRemove, true);\n });\n\n private readonly _allowDuplicate: Getter<DecisionFunction<DbxFormRepeatArrayPair<T>>> = cachedGetter(() => {\n return asDecisionFunction(this.field.props.allowDuplicate || false, false);\n });\n\n get repeatArrayField(): DbxFormRepeatArrayConfig {\n return this.field.props;\n }\n\n get label(): string {\n return this.field.props.label ?? (this.field.key as string);\n }\n\n get description(): Maybe<string> {\n return this.field.props.description;\n }\n\n get duplicateText(): string {\n return this.repeatArrayField.addText ?? 'Duplicate';\n }\n\n get addText(): string {\n return this.repeatArrayField.addText ?? 'Add';\n }\n\n get addTemplate() {\n return this.repeatArrayField.addTemplate;\n }\n\n get removeText(): string {\n return this.repeatArrayField.removeText ?? 'Remove';\n }\n\n get max(): Maybe<number> {\n return this.field.props.maxLength;\n }\n\n get count(): number {\n return this.field.fieldGroup?.length ?? 0;\n }\n\n get disableRearrange(): boolean {\n return Boolean(this.field.props.disableRearrange);\n }\n\n get allowAdd(): boolean {\n return this.field.props.allowAdd ?? true;\n }\n\n get addDuplicateToEnd(): boolean {\n return this.field.props.addDuplicateToEnd ?? false;\n }\n\n allowRemove(i: number) {\n const array: unknown[] = this.model;\n const value = array[i] as T | undefined;\n return this._allowRemove()({\n i,\n value\n });\n }\n\n allowDuplicate(i: number) {\n const array: unknown[] = this.model;\n const value = array[i] as T;\n return this._allowDuplicate()({\n i,\n value\n });\n }\n\n get addItemDisabled() {\n return !this.canAddItem;\n }\n\n get canAddItem(): boolean {\n const max = this.max;\n\n if (max == null) {\n return true;\n } else {\n return this.count < max;\n }\n }\n\n /**\n * Moves the target index up one value.\n *\n * @param index\n */\n moveUp(index: number) {\n if (index === 0) {\n return;\n }\n\n this.swapIndexes(index, index - 1);\n }\n\n moveDown(index: number) {\n this.swapIndexes(index, index + 1);\n }\n\n addClicked() {\n const addTemplate = this.addTemplate;\n const template = addTemplate ? addTemplate(this.count) : undefined;\n this.add(undefined, template);\n }\n\n duplicate(index: number) {\n const array: unknown[] = this.model;\n const targetValue = array[index];\n\n if (!targetValue) {\n return;\n }\n\n const targetIndex = this.addDuplicateToEnd ? array.length : index;\n this.add(targetIndex, targetValue, { markAsDirty: true });\n }\n\n swapIndexes(currentIndex: number, targetIndex: number) {\n const array: unknown[] = this.model;\n const targetValue = array[currentIndex];\n\n if (!targetValue) {\n return;\n }\n\n this.remove(currentIndex);\n this.add(targetIndex, targetValue, { markAsDirty: true });\n this.formControl.markAsTouched();\n }\n\n drop(event: CdkDragDrop<unknown>) {\n this.swapIndexes(event.previousIndex, event.currentIndex);\n }\n\n labelForItem(fieldConfig: FormlyFieldConfig, i: number): string {\n const array: unknown[] = this.model;\n const value = array[i] as T;\n\n return getValueFromGetter(this._labelForField(), {\n i,\n value,\n fieldConfig\n });\n }\n}\n","import { NgModule } from '@angular/core';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxFormRepeatArrayTypeComponent } from './array.field.component';\n\nconst importsAndExports = [DbxFormRepeatArrayTypeComponent];\n\n@NgModule({\n imports: [\n ...importsAndExports,\n FormlyModule.forChild({\n types: [{ name: 'repeatarray', component: DbxFormRepeatArrayTypeComponent }]\n })\n ],\n exports: importsAndExports\n})\nexport class DbxFormFormlyArrayFieldModule {}\n","import { type ArrayOrValue, asArray } from '@dereekb/util';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type FieldConfig, formlyField, propsAndConfigForFieldConfig } from '../../field';\nimport { type DbxFormRepeatArrayConfig } from './array.field.component';\n\nexport interface RepeatArrayFieldConfig<T = unknown> extends DbxFormRepeatArrayConfig<T>, FieldConfig {\n repeatFieldGroup: ArrayOrValue<FormlyFieldConfig>;\n}\n\nexport function repeatArrayField<T = unknown>(config: RepeatArrayFieldConfig<T>) {\n const { key, label, description, repeatFieldGroup, maxLength, addText, addTemplate, removeText, duplicateText, labelForField, disableRearrange, allowAdd, allowRemove, allowDuplicate, addDuplicateToEnd } = config;\n\n return formlyField({\n key,\n type: 'repeatarray',\n ...propsAndConfigForFieldConfig(config, {\n label,\n description,\n maxLength,\n labelForField,\n addText,\n addTemplate,\n removeText,\n duplicateText,\n disableRearrange,\n allowAdd,\n allowRemove,\n allowDuplicate,\n addDuplicateToEnd\n }),\n fieldArray: {\n fieldGroup: asArray(repeatFieldGroup)\n }\n });\n}\n","import { NgModule } from '@angular/core';\nimport { FormlyMaterialModule } from '@ngx-formly/material';\nimport { FormlyMatCheckboxModule } from '@ngx-formly/material/checkbox';\nimport { FormlyMatToggleModule } from '@ngx-formly/material/toggle';\n\nconst importsAndExports = [FormlyMaterialModule, FormlyMatCheckboxModule, FormlyMatToggleModule];\n\n@NgModule({\n imports: importsAndExports,\n exports: importsAndExports\n})\nexport class DbxFormFormlyBooleanFieldModule {}\n","import { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type LabeledFieldConfig, formlyField, type DefaultValueFieldConfig, type DescriptionFieldConfig, propsAndConfigForFieldConfig, type MaterialFormFieldConfig } from '../../field';\nimport { AUTO_TOUCH_WRAPPER_KEY, STYLE_WRAPPER_KEY } from '../../wrapper/wrapper.key';\n\nexport interface ToggleFieldConfig extends Omit<LabeledFieldConfig, 'placeholder' | 'autocomplete'>, DefaultValueFieldConfig<boolean>, DescriptionFieldConfig, MaterialFormFieldConfig {}\n\nexport function toggleField(config: ToggleFieldConfig): FormlyFieldConfig {\n const { key, defaultValue, materialFormField } = config;\n\n const classGetter = 'dbx-mat-form-toggle-field-wrapper';\n return formlyField({\n key,\n type: 'toggle',\n wrappers: [AUTO_TOUCH_WRAPPER_KEY, STYLE_WRAPPER_KEY, 'form-field'], // NOTE: Must specify form-field if other wrapper specified, otherwise it will not be used.\n defaultValue: defaultValue ?? false,\n ...propsAndConfigForFieldConfig(config, {\n classGetter,\n ...materialFormField\n })\n });\n}\n\nexport interface CheckboxFieldConfig extends LabeledFieldConfig, DefaultValueFieldConfig<boolean>, DescriptionFieldConfig, MaterialFormFieldConfig {}\n\nexport function checkboxField(config: CheckboxFieldConfig): FormlyFieldConfig {\n const { key, defaultValue, materialFormField } = config;\n\n const classGetter = 'dbx-mat-form-checkbox-field-wrapper';\n return formlyField({\n key,\n type: 'checkbox',\n wrappers: [STYLE_WRAPPER_KEY, 'form-field'],\n defaultValue: defaultValue ?? false,\n ...propsAndConfigForFieldConfig(config, {\n classGetter,\n ...materialFormField\n })\n });\n}\n\n/*\nexport function acceptTermsField({ key = 'accept', label = 'Accept Terms', description = 'In order to proceed, please accept terms', required = true }\n : Partial<FieldConfigWithDescription>): FormlyFieldConfig {\n return {\n key,\n type: 'checkbox',\n props: {\n label,\n description,\n pattern: 'true',\n required\n },\n validation: {\n messages: {\n pattern: 'Please accept the terms',\n },\n },\n } as FormlyFieldConfig;\n}\n*/\n","import { type Getter, type GetterOrValue, type LogicalDate, type Maybe, type ReadableTimeString, asGetter, getValueFromGetter } from '@dereekb/util';\n\n/**\n * A pair of either a logical date or a time string.\n */\nexport interface DateTimePresetValue {\n /**\n * Logical date to provide.\n */\n logicalDate?: Maybe<LogicalDate>;\n /**\n * Time string value. Ignored if logical date is provided.\n */\n timeString?: Maybe<ReadableTimeString>;\n}\n\n/**\n * Configuration for a DateTimePreset\n */\nexport interface DateTimePresetConfiguration {\n /**\n * Label\n */\n label: GetterOrValue<string>;\n /**\n * Whether or not the value should be retrieved each time or can be cached.\n *\n * Only relevant if a getter is used.\n */\n dynamic?: boolean;\n /**\n * Logical time to provide.\n */\n logicalDate?: Maybe<GetterOrValue<LogicalDate>>;\n /**\n * Time string to return. Ignored if logicalDate is provided.\n */\n timeString?: Maybe<GetterOrValue<ReadableTimeString>>;\n}\n\n/**\n * A label and value getter.\n */\nexport interface DateTimePreset {\n /**\n * Getter for the label\n */\n label: Getter<string>;\n /**\n * Getter for the value\n */\n value: Getter<DateTimePresetValue>;\n}\n\n/**\n * Creates a DateTimePreset from a DateTimePresetConfiguration\n *\n * @param config\n */\nexport function dateTimePreset(config: DateTimePresetConfiguration): DateTimePreset {\n let value: Getter<DateTimePresetValue>;\n\n if (config.logicalDate) {\n value = () => ({ logicalDate: getValueFromGetter(config.logicalDate) });\n } else if (config.timeString) {\n value = () => ({ timeString: getValueFromGetter(config.timeString) });\n } else {\n value = () => ({ logicalDate: 'now' });\n }\n\n if (!config.dynamic) {\n value = asGetter(value()); // get/calculate the value now and return it if not dynamic\n }\n\n return {\n label: asGetter(config.label),\n value\n };\n}\n","import { BehaviorSubject } from 'rxjs';\nimport { DateTimePresetConfiguration } from './datetime';\nimport { Injectable, InjectionToken, inject } from '@angular/core';\nimport { type Maybe } from '@dereekb/util';\n\nexport const DBX_DATE_TIME_FIELD_MENU_PRESETS_TOKEN = new InjectionToken('DbxDateTimeFieldMenuPresetsServicePresets');\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DbxDateTimeFieldMenuPresetsService {\n private readonly _configurations = new BehaviorSubject<DateTimePresetConfiguration[]>(inject<Maybe<DateTimePresetConfiguration[]>>(DBX_DATE_TIME_FIELD_MENU_PRESETS_TOKEN, { optional: true }) ?? []);\n\n readonly configurations$ = this._configurations.asObservable();\n\n get configurations(): DateTimePresetConfiguration[] {\n return this._configurations.value;\n }\n\n set configurations(configurations: DateTimePresetConfiguration[]) {\n this._configurations.next(configurations);\n }\n}\n","import { type DateTimezoneUtcNormalInstance, parseISO8601DayStringToDate, toJsDate, formatToISO8601DayStringForSystem, formatToISO8601DateString, isSameDateHoursAndMinutes, type DateRangeWithDateOrStringValue, parseJsDateString } from '@dereekb/date';\nimport { type ISO8601DayString, type Maybe, dateFromMinuteOfDay, dateToMinuteOfDay } from '@dereekb/util';\n\nexport enum DbxDateTimeValueMode {\n /**\n * Value is returned/parsed as a Date.\n */\n DATE = 0,\n /**\n * Value is returned/parsed as an ISO8601DateString\n */\n DATE_STRING = 1,\n /**\n * Value is returned/parsed as an ISO8601DayString, relative to the current timezone.\n */\n DAY_STRING = 2,\n /**\n * Value is returned/parsed as a Unix timestamp, relative to the current timezone.\n */\n UNIX_TIMESTAMP = 3,\n /**\n * Value is returned/parsed as a minute of the day, relative to the current timezone.\n */\n MINUTE_OF_DAY = 4,\n /**\n * Value is returned/parsed as a minute of the day, relative to the system timezone.\n */\n SYSTEM_MINUTE_OF_DAY = 5\n}\n\nexport function dbxDateTimeInputValueParseFactory(mode: DbxDateTimeValueMode, timezoneInstance: Maybe<DateTimezoneUtcNormalInstance>): (date: Maybe<Date | string | number>) => Maybe<Date> {\n let factory: (date: Maybe<Date | string | number>) => Maybe<Date>;\n let useTimezoneInstance = true;\n\n switch (mode) {\n case DbxDateTimeValueMode.DAY_STRING:\n factory = (x) => {\n let result: Maybe<Date>;\n\n switch (typeof x) {\n case 'string':\n result = parseISO8601DayStringToDate(x);\n break;\n case 'number':\n result = new Date(x);\n break;\n default:\n result = x;\n break;\n }\n\n return result;\n };\n useTimezoneInstance = false; // day strings do not use timezones\n break;\n case DbxDateTimeValueMode.SYSTEM_MINUTE_OF_DAY:\n case DbxDateTimeValueMode.MINUTE_OF_DAY:\n factory = (x) => {\n let result: Maybe<Date>;\n\n switch (typeof x) {\n case 'number':\n result = dateFromMinuteOfDay(x);\n break;\n case 'string':\n result = parseJsDateString(x);\n break;\n default:\n result = x;\n break;\n }\n\n return result;\n };\n\n if (mode === DbxDateTimeValueMode.SYSTEM_MINUTE_OF_DAY) {\n useTimezoneInstance = false;\n }\n\n break;\n case DbxDateTimeValueMode.UNIX_TIMESTAMP:\n case DbxDateTimeValueMode.DATE_STRING:\n case DbxDateTimeValueMode.DATE:\n default:\n factory = (x) => (x != null ? toJsDate(x as Date | string | number) : x);\n break;\n }\n\n if (timezoneInstance && useTimezoneInstance) {\n const originalFactory = factory;\n\n factory = (input) => {\n const date = originalFactory(input);\n const result = date ? timezoneInstance.systemDateToTargetDate(date) : date;\n return result;\n };\n }\n\n return factory;\n}\n\nexport function dbxDateTimeOutputValueFactory(mode: DbxDateTimeValueMode, timezoneInstance: Maybe<DateTimezoneUtcNormalInstance>): (date: Maybe<Date>) => Maybe<Date | string | number> {\n let factory: (date: Maybe<Date>) => Maybe<Date | string | number>;\n let useTimezoneInstance = true;\n\n switch (mode) {\n case DbxDateTimeValueMode.DAY_STRING:\n factory = (x) => (x != null ? formatToISO8601DayStringForSystem(x) : x);\n useTimezoneInstance = false; // day strings do not use timezones\n break;\n case DbxDateTimeValueMode.DATE_STRING:\n factory = (x) => (x != null ? formatToISO8601DateString(x) : x);\n break;\n case DbxDateTimeValueMode.UNIX_TIMESTAMP:\n factory = (x) => (x != null ? x.getTime() : x);\n break;\n case DbxDateTimeValueMode.SYSTEM_MINUTE_OF_DAY:\n case DbxDateTimeValueMode.MINUTE_OF_DAY:\n factory = (x) => (x != null ? dateToMinuteOfDay(x) : x);\n\n if (mode === DbxDateTimeValueMode.SYSTEM_MINUTE_OF_DAY) {\n useTimezoneInstance = false;\n }\n break;\n case DbxDateTimeValueMode.DATE:\n default:\n factory = (x) => x;\n break;\n }\n\n if (timezoneInstance && useTimezoneInstance) {\n const originalFactory = factory;\n\n factory = (input) => {\n const date = input ? timezoneInstance.targetDateToSystemDate(input) : input;\n const result = originalFactory(date);\n return result;\n };\n }\n\n return factory;\n}\n\nexport function dbxDateTimeIsSameDateTimeFieldValue(a: Maybe<Date | ISO8601DayString | number>, b: Maybe<Date | ISO8601DayString | number>) {\n const typeofA = typeof a;\n return a && b ? (typeofA === 'string' || typeofA === 'number' ? a === b : isSameDateHoursAndMinutes(a as Date, b as Date)) : a == b;\n}\n\nexport function dbxDateRangeIsSameDateRangeFieldValue(a: Maybe<DateRangeWithDateOrStringValue>, b: Maybe<DateRangeWithDateOrStringValue>) {\n return a && b ? dbxDateTimeIsSameDateTimeFieldValue(a.start, b.start) && dbxDateTimeIsSameDateTimeFieldValue(a.end, b.end) : a == b;\n}\n","import { type Maybe, type ReadableTimeString, type ArrayOrValue, type ISO8601DateString, asArray, filterMaybeArrayValues, type DecisionFunction, type Milliseconds, type TimezoneString, type LogicalDate, type DateOrDayString, isISO8601DayStringStart, type MapFunction, mapIdentityFunction, MinuteOfDay, UnixDateTimeMillisecondsNumber, ISO8601DayString } from '@dereekb/util';\nimport { dateFromLogicalDate, DateTimeMinuteConfig, DateTimeMinuteInstance, guessCurrentTimezone, readableTimeStringToDate, toLocalReadableTimeString, utcDayForDate, safeToJsDate, findMinDate, findMaxDate, isSameDateHoursAndMinutes, getTimezoneAbbreviation, isSameDateDay, dateTimezoneUtcNormal, DateTimezoneUtcNormalInstance, toJsDayDate, isSameDate, dateTimeMinuteWholeDayDecisionFunction, dateTimeMinuteDecisionFunction } from '@dereekb/date';\nimport { switchMap, shareReplay, map, startWith, tap, first, distinctUntilChanged, debounceTime, throttleTime, BehaviorSubject, Observable, combineLatest, Subject, merge, interval, of, combineLatestWith, filter, skip } from 'rxjs';\nimport { ChangeDetectionStrategy, Component, OnDestroy, OnInit, inject } from '@angular/core';\nimport { AbstractControl, FormControl, Validators, FormGroup, ValidationErrors, ReactiveFormsModule, FormsModule } from '@angular/forms';\nimport { FieldType } from '@ngx-formly/material';\nimport { FieldTypeConfig, FormlyFieldProps } from '@ngx-formly/core';\nimport { MatDatepickerInputEvent, MatDatepickerModule } from '@angular/material/datepicker';\nimport { addMinutes, startOfDay, addDays } from 'date-fns';\nimport { asObservableFromGetter, filterMaybe, ObservableOrValueGetter, SubscriptionObject, switchMapMaybeDefault, switchMapFilterMaybe, skipAllInitialMaybe } from '@dereekb/rxjs';\nimport { DateTimePreset, DateTimePresetConfiguration, dateTimePreset } from './datetime';\nimport { DbxDateTimeFieldMenuPresetsService } from './datetime.field.service';\nimport { DbxDateTimeValueMode, dbxDateTimeInputValueParseFactory, dbxDateTimeIsSameDateTimeFieldValue, dbxDateTimeOutputValueFactory } from './date.value';\nimport { FormControlPath, streamValueFromControl } from '../../../../form/form.angular.util';\nimport { toggleDisableFormControl } from '../../../../form/form';\nimport { ErrorStateMatcher } from '@angular/material/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\nimport { DatePipe, NgTemplateOutlet } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatError, MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { DateDistancePipe, GetValuePipe, TimeDistancePipe } from '@dereekb/dbx-core';\nimport { MatDividerModule } from '@angular/material/divider';\n\nexport enum DbxDateTimeFieldTimeMode {\n /**\n * Time is required.\n */\n REQUIRED = 'required',\n /**\n * Time is optional.\n */\n OPTIONAL = 'optional',\n /**\n * Time is permenantly off.\n */\n NONE = 'none'\n}\n\nexport type DbxDateTimePickerConfiguration = Omit<DateTimeMinuteConfig, 'date'>;\n\nexport type DbxDateTimeFieldSyncType = 'before' | 'after';\n\nexport interface DbxDateTimeFieldSyncField {\n /**\n * Field key/path to sync with/against.\n */\n readonly syncWith: string;\n /**\n * How to sync against the other field.\n */\n readonly syncType: DbxDateTimeFieldSyncType;\n}\n\n/**\n * Configuration for the time date field that has a reference and optional map function to map the value.\n */\nexport interface DbxDateTimeFieldTimeDateConfig<I = unknown> {\n readonly path: FormControlPath;\n readonly mapValue?: MapFunction<I, Maybe<DateOrDayString>>;\n}\n\nexport function isDbxDateTimeFieldTimeDateConfig(input: unknown): input is DbxDateTimeFieldTimeDateConfig {\n return input != null && typeof input === 'object' && typeof (input as DbxDateTimeFieldTimeDateConfig).path === 'string';\n}\n\nexport interface DbxDateTimeFieldProps extends FormlyFieldProps {\n /**\n * Custom date label.\n *\n * Defaults to Date\n */\n readonly dateLabel?: string;\n\n /**\n * Custom time label.\n *\n * Defaults to Time\n */\n readonly timeLabel?: string;\n\n /**\n * Label to use for the date hint for \"All Day\". Defaults to \"All Day\".\n */\n readonly allDayLabel?: string;\n\n /**\n * Label to use for the date hint for \"At\". Defaults to \"At\".\n */\n readonly atTimeLabel?: string;\n\n /**\n * Value mode.\n *\n * Defaults to DATE\n */\n readonly valueMode?: DbxDateTimeValueMode;\n\n /**\n * Whether or not the date is hidden, and automatically uses today/input date.\n */\n readonly timeOnly?: boolean;\n\n /**\n * Only applicable when timeOnly is false.\n *\n * Whether or not to always show the date input even when there is only a single date that can be selected.\n *\n * Defaults to true.\n */\n readonly alwaysShowDateInput?: boolean;\n\n /**\n * Whether or not to autofill the date when time is picked.\n *\n * Defaults to false.\n */\n readonly autofillDateWhenTimeIsPicked?: boolean;\n\n /**\n * Whether or not the time can be added/removed optionally.\n *\n * This is ignored if timeOnly is specified.\n */\n readonly timeMode?: DbxDateTimeFieldTimeMode;\n\n /**\n * Other form control for enabling/disabling whether or not it is a full day.\n *\n * This field is only used if time is optional.\n *\n * When time is off, the field is set to true.\n */\n readonly fullDayFieldName?: string;\n\n /**\n * Whether or not to pass the date value as a UTC date, or a date in the current timezone.\n */\n readonly fullDayInUTC?: boolean;\n\n /**\n * Whether or not ot hide the date hint info content.\n *\n * False by default\n */\n readonly hideDateHint?: boolean;\n\n /**\n * Whether or not to hide the date/calendar picker.\n */\n readonly hideDatePicker?: boolean;\n\n /**\n * Custom picker configuration\n */\n readonly pickerConfig?: ObservableOrValueGetter<DbxDateTimePickerConfiguration>;\n\n /**\n * Used for syncing with one or more fields with a Date value.\n */\n readonly getSyncFieldsObs?: () => Observable<ArrayOrValue<DbxDateTimeFieldSyncField>>;\n\n /**\n * (Optional) The input timezone to default to.\n *\n * Ignored if fullDayInUTC is true.\n */\n readonly timezone?: Maybe<ObservableOrValueGetter<Maybe<TimezoneString>>>;\n\n /**\n * (Optional) The date to apply the time to.\n *\n * The timezone abbrviation will also use this date when using the time-only mode.\n */\n readonly timeDate?: Maybe<ObservableOrValueGetter<Maybe<DbxDateTimeFieldTimeDateConfig | FormControlPath | DateOrDayString>>>;\n\n /**\n * Whether or not to display the timezone. True by default.\n */\n readonly showTimezone?: Maybe<boolean>;\n\n /**\n * Custom presets to show in the dropdown.\n */\n readonly presets?: ObservableOrValueGetter<DateTimePresetConfiguration[]>;\n\n /**\n * The time in ms to prevent output from going out when the input value changes.\n */\n readonly inputOutputDebounceTime?: Milliseconds;\n\n /**\n * Whether or not to display the clear date button. True by default.\n */\n readonly showClearButton?: Maybe<boolean>;\n\n /**\n * The number of minutes to add/subtract when using the arrow keys.\n */\n readonly minuteStep?: Maybe<number>;\n}\n\nexport interface DbxDateTimeFieldSyncParsedField extends Pick<DbxDateTimeFieldSyncField, 'syncType'> {\n readonly control: AbstractControl<Maybe<Date | ISO8601DateString>>;\n}\n\nexport function syncConfigValueObs(parseConfigsObs: Observable<DbxDateTimeFieldSyncParsedField[]>, type: DbxDateTimeFieldSyncType): Observable<Date | null> {\n return parseConfigsObs.pipe(\n switchMap((x) => {\n const config = x.find((y) => y.syncType === type);\n let result: Observable<Date | null>;\n\n if (config) {\n const { control } = config;\n result = control.valueChanges.pipe(\n startWith(control.value),\n map((x) => safeToJsDate(x) ?? null)\n );\n } else {\n result = of(null);\n }\n\n return result;\n }),\n distinctUntilChanged(),\n shareReplay(1)\n );\n}\n\nconst TIME_OUTPUT_THROTTLE_TIME: Milliseconds = 10;\n\n/**\n * Error code used when the selected date is not in the schedule.\n */\nexport const DBX_DATE_TIME_FIELD_DATE_NOT_IN_SCHEDULE_ERROR = 'dateTimeFieldDateNotInSchedule';\n\n/**\n * Error code used when the selected time/time input is not in the limited range.\n */\nexport const DBX_DATE_TIME_FIELD_TIME_NOT_IN_RANGE_ERROR = 'dateTimeFieldTimeNotInRange';\n\n@Component({\n templateUrl: 'datetime.field.component.html',\n imports: [FlexLayoutModule, NgTemplateOutlet, MatButtonModule, MatError, MatFormFieldModule, MatDatepickerModule, MatInputModule, FormsModule, ReactiveFormsModule, MatIconModule, MatMenuModule, MatFormFieldModule, GetValuePipe, DatePipe, DateDistancePipe, TimeDistancePipe, MatDividerModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxDateTimeFieldComponent extends FieldType<FieldTypeConfig<DbxDateTimeFieldProps>> implements OnInit, OnDestroy {\n private readonly dbxDateTimeFieldConfigService = inject(DbxDateTimeFieldMenuPresetsService);\n\n private readonly _sub = new SubscriptionObject();\n private readonly _valueSub = new SubscriptionObject();\n private readonly _autoFillDateSync = new SubscriptionObject();\n\n private readonly _config = new BehaviorSubject<Maybe<Observable<DbxDateTimePickerConfiguration>>>(undefined);\n readonly latestConfig$ = this._config.pipe(switchMapMaybeDefault(), distinctUntilChanged(), shareReplay(1));\n\n private readonly _syncConfigObs = new BehaviorSubject<Maybe<Observable<ArrayOrValue<DbxDateTimeFieldSyncField>>>>(undefined);\n\n private readonly _defaultTimezone = new BehaviorSubject<Maybe<Observable<Maybe<TimezoneString>>>>(undefined);\n private readonly _timeDate = new BehaviorSubject<Maybe<Observable<Maybe<DbxDateTimeFieldTimeDateConfig | FormControlPath | DateOrDayString>>>>(undefined);\n private readonly _presets = new BehaviorSubject<Observable<DateTimePresetConfiguration[]>>(of([]));\n\n /**\n * Alternative/backup full day control if not defined in the Formly form.\n */\n private readonly _fullDayInputCtrl = new FormControl(false);\n private readonly _fullDayControlObs = new BehaviorSubject<Maybe<AbstractControl<boolean>>>(undefined);\n readonly fullDayControl$ = this._fullDayControlObs.pipe(filterMaybe());\n\n private readonly _offset = new BehaviorSubject<number>(0);\n private readonly _formControlObs = new BehaviorSubject<Maybe<AbstractControl<Maybe<Date>>>>(undefined);\n readonly formControl$ = this._formControlObs.pipe(filterMaybe());\n\n private readonly _cleared = new Subject<void>();\n private readonly _updateTime = new Subject<void>();\n\n private readonly _resyncTimeInputSub = new SubscriptionObject();\n private readonly _resyncTimeInput = new Subject<void>();\n\n readonly timeErrorStateMatcher: ErrorStateMatcher = {\n isErrorState: (control: AbstractControl | null, form) => {\n if (control) {\n return (control.invalid && (control.dirty || control.touched)) || this.errorStateMatcher.isErrorState(this.formControl, form);\n } else {\n return false;\n }\n }\n };\n\n readonly resyncTimeInput$ = this._resyncTimeInput.pipe(debounceTime(200), shareReplay(1));\n\n private readonly _configUpdateTimeSync = new SubscriptionObject(\n this.latestConfig$.pipe(skip(1)).subscribe((x) => {\n this._updateTime.next();\n })\n );\n\n readonly timezone$: Observable<Maybe<TimezoneString>> = this._defaultTimezone.pipe(switchMapMaybeDefault(), distinctUntilChanged()).pipe(\n map((defaultTimezone) => {\n return defaultTimezone ?? guessCurrentTimezone();\n }),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly timezoneInstance$: Observable<Maybe<DateTimezoneUtcNormalInstance>> = this.timezone$.pipe(\n map((timezone) => (timezone ? dateTimezoneUtcNormal({ timezone }) : undefined)),\n shareReplay(1)\n );\n\n readonly timeDate$: Observable<Maybe<Date>> = this._timeDate.pipe(\n switchMapMaybeDefault(),\n switchMap((x) => {\n let obs: Observable<Maybe<Date>>;\n\n if (x) {\n // if the string is not a date string, then treat it as a path\n if ((typeof x === 'string' && !isISO8601DayStringStart(x)) || isDbxDateTimeFieldTimeDateConfig(x)) {\n const { path, mapValue }: DbxDateTimeFieldTimeDateConfig = typeof x === 'string' ? { path: x } : x;\n obs =\n streamValueFromControl<DateOrDayString>(this.form, path)?.pipe(\n map(mapValue ?? mapIdentityFunction()),\n map((x) => (x ? toJsDayDate(x) : undefined))\n ) ?? of(undefined);\n } else {\n obs = of(toJsDayDate(x));\n }\n } else {\n obs = of(undefined);\n }\n\n return obs;\n }),\n distinctUntilChanged(isSameDateDay),\n shareReplay(1)\n );\n\n readonly valueInSystemTimezone$: Observable<Maybe<Date>> = this.formControl$.pipe(\n map((control) => control.valueChanges.pipe(startWith<Maybe<Date | ISO8601DayString | MinuteOfDay | UnixDateTimeMillisecondsNumber>>(control.value), shareReplay(1))),\n combineLatestWith(this.timezoneInstance$),\n switchMap(([x, timezoneInstance]) => {\n return x.pipe(map(dbxDateTimeInputValueParseFactory(this.valueMode, timezoneInstance)));\n }),\n throttleTime(20, undefined, { leading: true, trailing: true }), // throttle incoming values and timezone changes\n distinctUntilChanged(isSameDateHoursAndMinutes),\n shareReplay(1)\n );\n\n readonly refreshInteral$ = interval(10 * 1000);\n\n /**\n * Used to trigger/display visual updates (specifically on timeDistance, etc.).\n */\n readonly displayValue$ = this.refreshInteral$.pipe(\n // every 10 seconds, refresh w/interval\n startWith(0),\n map(() => new Date().getMinutes()),\n distinctUntilChanged(),\n switchMap(() => this.valueInSystemTimezone$),\n shareReplay(1)\n );\n\n readonly timeString$: Observable<ReadableTimeString | ''> = this.valueInSystemTimezone$.pipe(\n map((x) => (x ? toLocalReadableTimeString(x) : '')),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly dateInputCtrl = new FormControl<Maybe<Date>>(null, {\n validators: []\n });\n\n readonly timeInputCtrl = new FormControl<Maybe<ReadableTimeString>>(null, {\n validators: [Validators.pattern(/^(now)$|^([0-9]|(0[0-9])|(1[0-9])|(2[0-3]))(:)?([0-5][0-9])?(\\s)?([apAP][Mm])?(\\\\s)*$/)]\n });\n\n get dateLabel(): string {\n return this.props.dateLabel ?? 'Date';\n }\n\n get timeLabel(): string {\n return this.props.timeLabel ?? 'Time';\n }\n\n get allDayLabel(): string {\n return this.props.allDayLabel ?? 'All Day';\n }\n\n get atTimeLabel(): string {\n return this.props.atTimeLabel ?? 'At';\n }\n\n get dateOnly(): boolean {\n return this.timeMode === DbxDateTimeFieldTimeMode.NONE;\n }\n\n get dateTimeField(): DbxDateTimeFieldProps {\n return this.field.props;\n }\n\n get timeOnly(): Maybe<boolean> {\n const timeValuesOnly = this.valueMode === DbxDateTimeValueMode.MINUTE_OF_DAY;\n\n if (timeValuesOnly) {\n return true;\n } else {\n return this.dateTimeField.timeOnly;\n }\n }\n\n get alwaysShowDateInput(): boolean {\n return this.props.alwaysShowDateInput ?? true;\n }\n\n get autofillDateWhenTimeIsPicked(): boolean {\n return this.props.autofillDateWhenTimeIsPicked ?? this.alwaysShowDateInput === false;\n }\n\n get showDateInput(): boolean {\n return !this.timeOnly;\n }\n\n get valueMode(): DbxDateTimeValueMode {\n return this.field.props.valueMode ?? DbxDateTimeValueMode.DATE;\n }\n\n get timeMode(): DbxDateTimeFieldTimeMode {\n const dateValuesOnly = this.valueMode === DbxDateTimeValueMode.DAY_STRING;\n\n if (dateValuesOnly) {\n return DbxDateTimeFieldTimeMode.NONE;\n } else {\n return this.timeOnly ? DbxDateTimeFieldTimeMode.REQUIRED : (this.dateTimeField.timeMode ?? DbxDateTimeFieldTimeMode.REQUIRED);\n }\n }\n\n get isDateRequired(): boolean {\n return this.props.required ?? false;\n }\n\n get isTimeRequired(): boolean {\n return this.isDateRequired && this.timeMode === DbxDateTimeFieldTimeMode.REQUIRED;\n }\n\n get description(): Maybe<string> {\n return this.field.props.description;\n }\n\n get hideDateHint(): boolean {\n return this.field.props.hideDateHint ?? false;\n }\n\n get hideDatePicker(): boolean {\n return this.field.props.hideDatePicker ?? false;\n }\n\n get timezone() {\n return this.field.props.timezone;\n }\n\n get timeDate() {\n return this.field.props.timeDate;\n }\n\n get showTimezone() {\n return this.field.props.showTimezone ?? true;\n }\n\n get presets() {\n return this.field.props.presets;\n }\n\n get showClearButton() {\n return this.field.props.showClearButton;\n }\n\n get minuteStep() {\n return this.field.props.minuteStep ?? this.field.props.step ?? 5;\n }\n\n readonly fullDay$: Observable<boolean> = this.fullDayControl$.pipe(\n switchMap((control) => control.valueChanges.pipe(startWith(control.value))),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly showTimeInput$: Observable<boolean> = this.fullDay$.pipe(map((x) => !x && this.timeMode !== DbxDateTimeFieldTimeMode.NONE));\n\n readonly showAddTime$ = this.showTimeInput$.pipe(\n map((x) => !x && this.timeMode === DbxDateTimeFieldTimeMode.OPTIONAL),\n shareReplay(1)\n );\n\n readonly currentDate$ = this.dateInputCtrl.valueChanges.pipe(startWith(this.dateInputCtrl.value), shareReplay(1));\n readonly date$ = this.currentDate$.pipe(filterMaybe(), shareReplay(1));\n\n readonly timezoneAbbreviation$ = combineLatest([this.currentDate$, this.timezone$, this.timeDate$]).pipe(\n map(([date, timezone, timeDate]) => getTimezoneAbbreviation(timezone, timeDate ?? date ?? new Date())),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly dateValue$: Observable<Maybe<Date>> = merge(this.date$, this.valueInSystemTimezone$.pipe(skipAllInitialMaybe())).pipe(\n map((x: Maybe<Date>) => (x ? startOfDay(x) : null)),\n distinctUntilChanged<Maybe<Date>>(isSameDateDay),\n shareReplay(1)\n );\n\n readonly timeInput$: Observable<ReadableTimeString> = this._updateTime.pipe(\n debounceTime(5),\n map(() => this.timeInputCtrl.value || ''),\n distinctUntilChanged()\n );\n\n readonly syncConfigObs$ = this._syncConfigObs.pipe(switchMapMaybeDefault(), shareReplay(1));\n\n readonly parsedSyncConfigs$: Observable<DbxDateTimeFieldSyncParsedField[]> = this.syncConfigObs$.pipe(\n map((x) => {\n let parsed: DbxDateTimeFieldSyncParsedField[];\n\n if (x) {\n parsed = filterMaybeArrayValues(\n asArray(x).map((y) => {\n const control = this.form.get(y.syncWith);\n\n if (control) {\n return {\n control,\n ...y\n };\n } else {\n return undefined;\n }\n })\n );\n } else {\n parsed = [];\n }\n\n return parsed;\n }),\n shareReplay(1)\n );\n\n readonly syncConfigBeforeValue$: Observable<Date | null> = syncConfigValueObs(this.parsedSyncConfigs$, 'before');\n readonly syncConfigAfterValue$: Observable<Date | null> = syncConfigValueObs(this.parsedSyncConfigs$, 'after');\n\n readonly isTimeCleared$ = combineLatest([this.currentDate$, this._timeDate.pipe(startWith(null))]).pipe(\n switchMap(([date, time]) => {\n const isTimeCleared = Boolean(!date && !time);\n return this._cleared.pipe(\n map(() => true),\n startWith(isTimeCleared)\n );\n }),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n protected readonly _rawDateTimeDateValue$: Observable<Maybe<Date>> = this._config.pipe(\n first(),\n switchMap(() => (this.timeOnly ? of(null) : this.dateValue$))\n );\n protected readonly _rawDateTimeTimeValue$: Observable<Maybe<ReadableTimeString>> = this.timeInput$.pipe(startWith(null));\n\n readonly rawDateTime$: Observable<Maybe<Date>> = combineLatest([this._rawDateTimeDateValue$, this._rawDateTimeTimeValue$, this.fullDay$, this.timeDate$, this.isTimeCleared$]).pipe(\n map(([date, timeString, fullDay, timeDate, isTimeCleared]) => {\n let result: Maybe<Date>;\n\n if (!isTimeCleared) {\n if (!date || this.timeOnly) {\n date = timeDate ?? new Date(); // use the time date, or default to the current day\n }\n\n if (date) {\n if (fullDay) {\n if (this.dateTimeField.fullDayInUTC) {\n result = utcDayForDate(date);\n } else {\n result = startOfDay(date);\n }\n } else if (timeString) {\n result =\n readableTimeStringToDate(timeString, {\n date,\n useSystemTimezone: true\n }) ?? date;\n } else if (!this.timeOnly) {\n if (this.timeMode !== DbxDateTimeFieldTimeMode.REQUIRED) {\n // only autofill the date if the time is marked as required (and the time string is empty)\n result = date;\n }\n }\n }\n }\n\n return result;\n }),\n distinctUntilChanged(isSameDateHoursAndMinutes),\n shareReplay(1)\n );\n\n readonly dateTimePickerConfig$: Observable<Maybe<DbxDateTimePickerConfiguration>> = combineLatest([this._config.pipe(switchMapFilterMaybe()), this.syncConfigBeforeValue$, this.syncConfigAfterValue$]).pipe(\n map(([x, dateInputMin, dateInputMax]) => {\n let result: Maybe<DbxDateTimePickerConfiguration> = x;\n\n if (dateInputMin != null || dateInputMax != null) {\n const { min: limitMin, max: limitMax } = x?.limits ?? {};\n const min = findMinDate([dateInputMin, dateFromLogicalDate(limitMin)]);\n const max = findMaxDate([dateInputMax, dateFromLogicalDate(limitMax)]);\n\n result = {\n ...x,\n limits: {\n ...x?.limits,\n min,\n max\n }\n };\n }\n\n return result;\n }),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly dateInputMin$: Observable<Date | null> = this.dateTimePickerConfig$.pipe(\n map((x) => (x?.limits?.min ?? null) as Date | null),\n distinctUntilChanged<Date | null>(isSameDate),\n shareReplay(1)\n );\n\n readonly dateInputMax$: Observable<Date | null> = this.dateTimePickerConfig$.pipe(\n map((x) => (x?.limits?.max ?? null) as Date | null),\n distinctUntilChanged<Date | null>(isSameDate),\n shareReplay(1)\n );\n\n /**\n * Whether or not there is a limited min/max date range applied/available.\n */\n readonly hasRestrictedDateRange$: Observable<boolean> = combineLatest([this.dateInputMin$, this.dateInputMax$]).pipe(\n map(([a, b]) => Boolean(a || b)),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly dateMinAndMaxIsSameDay$: Observable<boolean> = combineLatest([this.dateInputMin$, this.dateInputMax$]).pipe(\n map(([a, b]) => Boolean(a && b) && isSameDateDay(a, b)),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly pickerFilter$: Observable<DecisionFunction<Date | null>> = this.dateTimePickerConfig$.pipe(\n distinctUntilChanged(),\n map((x) => {\n if (x) {\n const filter = dateTimeMinuteWholeDayDecisionFunction(x, false);\n return (x: Date | null) => (x != null ? filter(x) : true);\n } else {\n return () => true;\n }\n }),\n shareReplay(1)\n );\n\n readonly defaultPickerFilter: DecisionFunction<Date | null> = () => true;\n\n readonly timeOutput$: Observable<Maybe<Date>> = combineLatest([this.rawDateTime$, this._offset, this.dateTimePickerConfig$]).pipe(\n throttleTime(TIME_OUTPUT_THROTTLE_TIME, undefined, { leading: false, trailing: true }),\n distinctUntilChanged((current, next) => current[0] === next[0] && next[1] === 0 && current[2] === next[2]),\n tap(([, stepsOffset]) => (stepsOffset ? this._offset.next(0) : 0)),\n map(([date, stepsOffset, config]) => {\n if (date != null) {\n const instance = new DateTimeMinuteInstance({\n date,\n ...config,\n roundDownToMinute: true\n });\n\n // only clamp when the steps offset is set\n if (stepsOffset) {\n date = instance.clamp(date);\n\n const minutes = stepsOffset * this.minuteStep;\n\n if (minutes != 0) {\n date = addMinutes(date, minutes);\n date = instance.clamp(date); // clamp the date again\n }\n }\n }\n\n return date;\n }),\n distinctUntilChanged(isSameDateHoursAndMinutes),\n shareReplay(1)\n );\n\n readonly dateTimePickerInstance$ = this.dateTimePickerConfig$.pipe(\n map((config) => {\n return new DateTimeMinuteInstance({\n ...config,\n roundDownToMinute: true\n });\n }),\n shareReplay(1)\n );\n\n readonly hasEmptyDisplayValue$ = this.displayValue$.pipe(\n map((x) => !x),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly allPresets$: Observable<DateTimePreset[]> = this._presets.pipe(\n switchMapFilterMaybe(),\n map((x: DateTimePresetConfiguration[]) => x.map(dateTimePreset)),\n shareReplay(1)\n );\n\n readonly _presetsPickerFilter$ = this.dateTimePickerConfig$.pipe(\n map((config) => {\n if (config) {\n const filter = dateTimeMinuteDecisionFunction(config); // filter that the date must be in the given range\n return (x: Date | null) => (x != null ? filter(x) : true);\n } else {\n return () => true;\n }\n })\n );\n\n readonly presets$: Observable<DateTimePreset[]> = combineLatest([this.allPresets$, this.fullDay$]).pipe(\n switchMap(([x, fullDay]) => {\n let result: Observable<DateTimePreset[]>;\n\n if (this.timeOnly) {\n result = of(x); // do not filter based on the date\n } else if (fullDay) {\n result = of([]);\n } else {\n result = combineLatest([this._rawDateTimeDateValue$.pipe(throttleTime(1000, undefined, { leading: true, trailing: true })), this._presetsPickerFilter$]).pipe(\n map(([selectedDate, isAllowedDate]) => {\n const allowedPresets: DateTimePreset[] = [];\n\n if (selectedDate) {\n // iterate each preset and check if it is allowed\n x.forEach((preset) => {\n const value = preset.value();\n let presetDate: Maybe<Date>;\n\n if (value.logicalDate) {\n presetDate = dateFromLogicalDate(value.logicalDate);\n } else if (value.timeString) {\n presetDate = readableTimeStringToDate(value.timeString, {\n date: selectedDate,\n useSystemTimezone: true\n });\n }\n\n // the computed date should be within the allowed range\n if (presetDate && isAllowedDate(presetDate)) {\n allowedPresets.push(preset);\n }\n });\n }\n\n return allowedPresets;\n })\n );\n }\n\n return result;\n }),\n shareReplay(1)\n );\n\n readonly showClearButton$: Observable<boolean> = this.hasEmptyDisplayValue$.pipe(\n map((x) => Boolean(this.showClearButton && !x)),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly canAutofillDateWithOnlyAvailableDate$: Observable<boolean> = this.dateMinAndMaxIsSameDay$;\n\n readonly showDateInput$: Observable<boolean> = this.dateMinAndMaxIsSameDay$.pipe(\n map((dateMinAndMaxIsSameDay) => {\n return this.showDateInput && (this.alwaysShowDateInput || !dateMinAndMaxIsSameDay);\n }),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly currentErrorMessage$ = this.formControl$.pipe(\n switchMap((formControl) =>\n formControl.statusChanges.pipe(\n filter((x) => x === 'INVALID' || x === 'VALID'),\n map((x) => {\n let currentErrorMessage: string | undefined;\n\n if (x === 'INVALID') {\n if (this.formControl.hasError('required')) {\n currentErrorMessage = 'Date is required';\n } else if (this.formControl.hasError(DBX_DATE_TIME_FIELD_DATE_NOT_IN_SCHEDULE_ERROR)) {\n currentErrorMessage = 'Date does not fall on an available dates in schedule.';\n } else if (this.formControl.hasError(DBX_DATE_TIME_FIELD_TIME_NOT_IN_RANGE_ERROR)) {\n currentErrorMessage = 'Time is not valid for the given date.';\n } else {\n currentErrorMessage = 'The given date and time is invalid.';\n }\n }\n\n return currentErrorMessage;\n })\n )\n ),\n startWith(undefined),\n shareReplay(1)\n );\n\n readonly hasError$ = this.currentErrorMessage$.pipe(\n map((x) => Boolean(x)),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly dateValueSignal = toSignal(this.dateValue$);\n readonly displayValueSignal = toSignal(this.displayValue$);\n readonly pickerFilterSignal = toSignal(this.pickerFilter$, { initialValue: this.defaultPickerFilter });\n readonly dateInputMinSignal = toSignal(this.dateInputMin$, { initialValue: null });\n readonly dateInputMaxSignal = toSignal(this.dateInputMax$, { initialValue: null });\n readonly showDateInputSignal = toSignal(this.showDateInput$);\n readonly showTimeInputSignal = toSignal(this.showTimeInput$);\n readonly showAddTimeSignal = toSignal(this.showAddTime$);\n readonly fullDaySignal = toSignal(this.fullDay$);\n readonly timezoneAbbreviationSignal = toSignal(this.timezoneAbbreviation$);\n readonly hasEmptyDisplayValueSignal = toSignal(this.hasEmptyDisplayValue$);\n readonly currentErrorMessageSignal = toSignal(this.currentErrorMessage$);\n readonly showClearButtonSignal = toSignal(this.showClearButton$);\n readonly presetsSignal = toSignal(this.presets$);\n readonly hasErrorSignal = toSignal(this.hasError$);\n\n ngOnInit(): void {\n this._formControlObs.next(this.formControl);\n\n const inputPickerConfig = this.dateTimeField.pickerConfig;\n this._config.next(inputPickerConfig ? asObservableFromGetter(inputPickerConfig) : of({}));\n this._syncConfigObs.next(this.dateTimeField.getSyncFieldsObs?.());\n\n this._sub.subscription = this.valueInSystemTimezone$\n .pipe(\n combineLatestWith(this.timezoneInstance$.pipe(map((timezoneInstance) => dbxDateTimeOutputValueFactory(this.valueMode, timezoneInstance)))),\n throttleTime(TIME_OUTPUT_THROTTLE_TIME, undefined, { leading: false, trailing: true }),\n switchMap(([currentValue, valueFactory]) => {\n return this.timeOutput$.pipe(\n throttleTime(TIME_OUTPUT_THROTTLE_TIME * 2, undefined, { leading: false, trailing: true }),\n skipAllInitialMaybe(),\n distinctUntilChanged(isSameDateHoursAndMinutes),\n map((x) => valueFactory(x)),\n filter((x) => !dbxDateTimeIsSameDateTimeFieldValue(x, currentValue))\n );\n })\n )\n .subscribe((value) => {\n this.formControl.setValue(value);\n this.formControl.markAsDirty();\n this.formControl.markAsTouched();\n });\n\n let hasSetMidnightFromInput = false;\n\n /*\n this._valueSub.subscription = this.timeString$.subscribe((x) => {\n this.setTime(x);\n });\n */\n\n if (this.autofillDateWhenTimeIsPicked) {\n this._autoFillDateSync.subscription = this.canAutofillDateWithOnlyAvailableDate$\n .pipe(\n switchMap((canAutofill) => {\n if (canAutofill) {\n // when the time updates the first time, set the current min date\n return this._updateTime.pipe(\n debounceTime(200),\n switchMap((x) => this.dateInputMin$),\n filterMaybe()\n );\n } else {\n return of(null); // don't show anything\n }\n })\n )\n .subscribe((autoDate) => {\n if (autoDate != null) {\n this.dateInputCtrl.setValue(autoDate);\n }\n });\n }\n\n this._valueSub.subscription = this.valueInSystemTimezone$\n .pipe(\n map((x) => (x ? isSameDate(x, startOfDay(x)) : false)),\n distinctUntilChanged(),\n switchMap((isInputValueAtMidnight) => {\n hasSetMidnightFromInput = false;\n return this.timeString$.pipe(\n // skip(1),\n map((timeString) => [timeString, isInputValueAtMidnight] as [string, boolean])\n );\n })\n )\n .subscribe(([x, isInputValueAtMidnight]) => {\n // Skip events where the timeInput value is cleared, unless the input value is at midnight and we've already processed it being at midnight\n if (!this.timeInputCtrl.value && x === '12:00AM' && (!isInputValueAtMidnight || (isInputValueAtMidnight && hasSetMidnightFromInput))) {\n return;\n }\n\n // update the has set flag\n if (x === '12:00AM' && isInputValueAtMidnight) {\n hasSetMidnightFromInput = true;\n }\n\n this.setTime(x);\n });\n\n // Set default timezone if provided.\n if (this.timezone && !this.dateTimeField.fullDayInUTC) {\n this._defaultTimezone.next(asObservableFromGetter(this.timezone));\n }\n\n this._timeDate.next(asObservableFromGetter(this.timeDate));\n\n // Watch for disabled changes so we can propogate them properly.\n this.formControl.registerOnDisabledChange((isDisabled) => {\n toggleDisableFormControl(this.dateInputCtrl, isDisabled);\n toggleDisableFormControl(this.timeInputCtrl, isDisabled);\n });\n\n const isFullDayField = this.dateTimeField.fullDayFieldName;\n let fullDayFieldCtrl: Maybe<AbstractControl>;\n\n if (isFullDayField) {\n fullDayFieldCtrl = this.form.get(isFullDayField);\n }\n\n if (!fullDayFieldCtrl) {\n const isFullDay = this.timeMode === DbxDateTimeFieldTimeMode.NONE;\n this._fullDayInputCtrl.setValue(isFullDay);\n\n // Set the control in the form too if the name is defined.\n if (isFullDayField) {\n (this.form as FormGroup).addControl(isFullDayField, this._fullDayInputCtrl);\n }\n\n fullDayFieldCtrl = this._fullDayInputCtrl;\n }\n\n this._fullDayControlObs.next(fullDayFieldCtrl);\n\n switch (this.timeMode) {\n case DbxDateTimeFieldTimeMode.OPTIONAL:\n break;\n case DbxDateTimeFieldTimeMode.NONE:\n this.removeTime();\n break;\n case DbxDateTimeFieldTimeMode.REQUIRED:\n this.addTime();\n break;\n }\n\n if (this.presets != null) {\n this._presets.next(asObservableFromGetter(this.presets));\n } else {\n this._presets.next(this.dbxDateTimeFieldConfigService.configurations$);\n }\n\n this._resyncTimeInputSub.subscription = this.resyncTimeInput$.pipe(switchMap((x) => combineLatest([this.currentDate$, this.timeString$]).pipe(first()))).subscribe(([currentDate, timeString]) => {\n // only resync when the current date is set, otherwise do not change the time string.\n // This helps in cases where the user picks a time first and we don't want it to be cleared.\n if (currentDate != null) {\n this.timeInputCtrl.setValue(timeString, { emitEvent: false });\n }\n });\n\n // add validators/errors for the form\n this.formControl.addAsyncValidators([\n (x) => {\n const formValue = x.value as Maybe<Date>;\n let obs: Observable<ValidationErrors>;\n\n if (formValue != null) {\n obs = combineLatest([this.timezoneInstance$, this.dateTimePickerInstance$]).pipe(\n map(([timezoneInstance, x]) => {\n // the form value is going to be in the output form, so we need to parse it back to the \"input\" date before evaluating it\n const formValueInSystemTimezone = dbxDateTimeInputValueParseFactory(this.valueMode, timezoneInstance)(formValue);\n\n let errors: ValidationErrors = {\n ...this.timeInputCtrl.errors\n };\n\n if (formValueInSystemTimezone) {\n if (x.dateIsInSchedule(formValueInSystemTimezone)) {\n if (!x.isInValidRange(formValueInSystemTimezone)) {\n errors = {\n [DBX_DATE_TIME_FIELD_TIME_NOT_IN_RANGE_ERROR]: true\n };\n }\n } else {\n errors = {\n [DBX_DATE_TIME_FIELD_DATE_NOT_IN_SCHEDULE_ERROR]: true\n };\n }\n }\n\n return errors;\n }),\n first()\n );\n } else {\n obs = of({});\n }\n\n return obs;\n }\n ]);\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._sub.destroy();\n this._valueSub.destroy();\n this._config.complete();\n this._configUpdateTimeSync.destroy();\n this._defaultTimezone.complete();\n this._resyncTimeInputSub.destroy();\n this._autoFillDateSync.destroy();\n this._timeDate.complete();\n this._presets.complete();\n this._fullDayControlObs.complete();\n this._offset.complete();\n this._formControlObs.complete();\n this._updateTime.complete();\n this._cleared.complete();\n this._resyncTimeInput.complete();\n this._syncConfigObs.complete();\n }\n\n selectPreset(preset: DateTimePreset): void {\n const value = preset.value();\n\n if (value.logicalDate) {\n this.setLogicalTime(value.logicalDate);\n } else if (value.timeString) {\n this.setTime(value.timeString);\n }\n }\n\n datePicked(event: MatDatepickerInputEvent<Date>): void {\n const date = event.value;\n\n if (date) {\n this.setDateInputValue(date);\n }\n }\n\n setLogicalTime(time: LogicalDate): void {\n const date = dateFromLogicalDate(time);\n\n if (date) {\n this.setTimeFromDate(date);\n }\n }\n\n setDateInputValue(date: Date) {\n this.dateInputCtrl.setValue(date);\n this._updateTime.next();\n }\n\n setTimeFromDate(timeDate: Date): void {\n const timeString = toLocalReadableTimeString(timeDate);\n this.setTime(timeString);\n }\n\n setTime(time: ReadableTimeString): void {\n if (this.timeInputCtrl.value !== time) {\n this.timeInputCtrl.setValue(time);\n this._offset.next(0);\n this._updateTime.next();\n }\n }\n\n keydownOnDateInput(event: KeyboardEvent): void {\n let direction = 0;\n\n switch (event.key?.toLowerCase()) {\n case 'arrowup':\n direction = 1;\n break;\n case 'arrowdown':\n direction = -1;\n break;\n }\n\n let offset = 1;\n\n if (event.ctrlKey && event.shiftKey) {\n offset = 365;\n } else if (event.ctrlKey) {\n offset = 30;\n } else if (event.shiftKey) {\n offset = 7;\n }\n\n if (direction !== 0) {\n combineLatest([this.date$, this.dateTimePickerConfig$])\n .pipe(first())\n .subscribe(([date, config]) => {\n const newDate = startOfDay(addDays(date, offset * direction));\n const instance = new DateTimeMinuteInstance({\n date: newDate,\n ...config\n });\n\n const nextDate = instance.isInSchedule(newDate) ? newDate : instance.findNextAvailableDayInSchedule(newDate, direction === 1 ? 'future' : 'past');\n\n if (nextDate != null) {\n this.setDateInputValue(instance.clampToLimit(nextDate));\n }\n });\n }\n }\n\n keydownOnTimeInput(event: KeyboardEvent): void {\n let direction = 0;\n\n switch (event.key?.toLowerCase()) {\n case 'arrowup':\n direction = 1;\n break;\n case 'arrowdown':\n direction = -1;\n break;\n }\n\n let offset = 1;\n\n if (event.altKey && event.shiftKey) {\n offset = 300;\n } else if (event.altKey) {\n offset = 60;\n } else if (event.shiftKey) {\n offset = 5;\n }\n\n if (direction !== 0) {\n this._offset.next(this._offset.value + offset * direction);\n this._updateTime.next();\n }\n }\n\n focusTime(): void {\n // do nothing\n }\n\n focusOutTime(): void {\n // only refresh when there is not a pattern error\n if (!this.timeInputCtrl.hasError('pattern')) {\n this._updateTime.next();\n this._resyncTimeInput.next();\n }\n }\n\n addTime(): void {\n this.setFullDay(false);\n }\n\n removeTime(): void {\n this.setFullDay(true);\n }\n\n setFullDay(fullDay: boolean): void {\n this.fullDayControl$.pipe(first()).subscribe((x) => {\n x.setValue(fullDay);\n });\n }\n\n clearValue(): void {\n this._cleared.next();\n }\n}\n","<div class=\"dbx-datetime-field\" fxLayout=\"row wrap\" fxLayout.xs=\"column wrap\" fxLayoutGap=\"6px grid\" fxLayoutAlign=\"space-evenly stretch\">\n <!-- Date -->\n @if (showDateInputSignal()) {\n <div class=\"dbx-datetime-row\" fxFlex.lt-sm=\"100\" [fxFlex]=\"dateOnly ? '100' : '50'\">\n <ng-container [ngTemplateOutlet]=\"dateInputTemplate\"></ng-container>\n </div>\n }\n <!-- Time -->\n @if (showTimeInputSignal() || showAddTimeSignal()) {\n <!-- Only show flex if there is content to be displayed. -->\n <div class=\"dbx-datetime-row\" fxFlex.lt-sm=\"100\" [fxFlex]=\"showDateInputSignal() ? '50' : '100'\">\n @if (showTimeInputSignal()) {\n <ng-container [ngTemplateOutlet]=\"timeMenuAndInputTemplate\"></ng-container>\n }\n @if (showAddTimeSignal()) {\n <div class=\"add-time-button-wrapper\">\n <button mat-button class=\"mat-datepicker-button-highlight dbx-button-spacer add-time-button\" ngClass.lt-sm=\"add-time-button-full\" (click)=\"addTime()\">\n <mat-icon>timer</mat-icon>\n Add Time\n </button>\n </div>\n }\n </div>\n }\n <!-- Date Hint -->\n @switch (hasErrorSignal()) {\n @case (false) {\n @if (!hideDateHint) {\n <div class=\"dbx-datetime-row dbx-datetime-hint-row\" fxFlex=\"100\">\n <div class=\"dbx-hint\">\n @switch (hasEmptyDisplayValueSignal()) {\n @case (true) {\n <span class=\"dbx-small\">No date/time set</span>\n }\n @case (false) {\n @switch (fullDaySignal()) {\n @case (true) {\n <small>\n <b class=\"dbx-ok\">{{ allDayLabel }}</b>\n {{ displayValueSignal() | date: 'fullDate' }} {{ timezoneAbbreviationSignal() }} ({{ displayValueSignal() | dateDistance }})\n </small>\n }\n @case (false) {\n <small>\n @if (displayValueSignal()) {\n <b class=\"dbx-ok\">{{ atTimeLabel }}</b>\n {{ displayValueSignal() | date: 'medium' }} {{ timezoneAbbreviationSignal() }} ({{ displayValueSignal() | timeDistance }})\n }\n </small>\n }\n }\n }\n }\n </div>\n </div>\n }\n }\n @case (true) {\n @if (currentErrorMessageSignal()) {\n <mat-error>{{ currentErrorMessageSignal() }}</mat-error>\n }\n }\n }\n</div>\n\n<!-- Date Input Template -->\n<ng-template #dateInputTemplate>\n <mat-form-field class=\"dbx-datetime-row-field\">\n <mat-label>{{ dateLabel }}</mat-label>\n <input #dateInput matInput [disabled]=\"disabled\" [required]=\"isDateRequired\" [min]=\"dateInputMinSignal()\" [max]=\"dateInputMaxSignal()\" [matDatepicker]=\"picker\" [matDatepickerFilter]=\"pickerFilterSignal()\" (dateChange)=\"datePicked($event)\" [value]=\"dateValueSignal()\" (keydown)=\"keydownOnDateInput($event)\" />\n <mat-datepicker #picker></mat-datepicker>\n @if (!hideDatePicker) {\n <button matPrefix class=\"dbx-datetime-row-button\" mat-icon-button (click)=\"picker.open()\" [disabled]=\"disabled\">\n <mat-icon>calendar_today</mat-icon>\n </button>\n }\n @if (showClearButtonSignal()) {\n <button matSuffix class=\"dbx-datetime-clear-button\" mat-icon-button aria-label=\"clears the date and time menu\" [disabled]=\"disabled\" (click)=\"clearValue()\">\n <mat-icon>clear</mat-icon>\n </button>\n }\n @if (!showTimeInputSignal()) {\n <span matTextSuffix>\n <ng-container [ngTemplateOutlet]=\"timezoneSuffixTemplate\"></ng-container>\n </span>\n }\n </mat-form-field>\n</ng-template>\n\n<!-- Time Menu/Input Template -->\n<ng-template #timeMenuAndInputTemplate>\n <mat-menu #timemenu=\"matMenu\">\n @if (timeMode === 'optional') {\n <button mat-menu-item (click)=\"removeTime()\">\n <span>Remove Time</span>\n </button>\n <mat-divider></mat-divider>\n }\n @for (preset of presetsSignal(); track preset) {\n <button mat-menu-item (click)=\"selectPreset(preset)\">{{ preset.label | getValue }}</button>\n }\n </mat-menu>\n <mat-form-field class=\"dbx-datetime-row-field\">\n <mat-label>{{ timeLabel }}</mat-label>\n <input #timeInput [errorStateMatcher]=\"timeErrorStateMatcher\" matInput [required]=\"isTimeRequired\" [formControl]=\"timeInputCtrl\" (focus)=\"focusTime()\" (focusout)=\"focusOutTime()\" (keydown)=\"keydownOnTimeInput($event)\" />\n <button matPrefix class=\"dbx-datetime-row-button\" mat-icon-button [matMenuTriggerFor]=\"timemenu\" aria-label=\"opens the time menu\" [disabled]=\"disabled\">\n <mat-icon>timer</mat-icon>\n </button>\n <span matTextSuffix>\n <ng-container [ngTemplateOutlet]=\"timezoneSuffixTemplate\"></ng-container>\n </span>\n @if (timeInputCtrl.hasError('pattern')) {\n <mat-error>The input time is not recognizable.</mat-error>\n }\n </mat-form-field>\n</ng-template>\n\n<!-- Timezone Suffix -->\n<ng-template #timezoneSuffixTemplate>\n @if (showTimezone) {\n <span class=\"dbx-datetime-timezone dbx-faint\">{{ timezoneAbbreviationSignal() }}</span>\n }\n</ng-template>\n","import { type Maybe, type DecisionFunction, type Milliseconds, type TimezoneString, type DateMonth, type DayOfMonth, type YearNumber, isMonthDaySlashDate, MS_IN_MINUTE } from '@dereekb/util';\nimport { guessCurrentTimezone, DateTimezoneUtcNormalInstance, dateTimezoneUtcNormal, DateRangeInput, DateRange, isSameDateDayRange, DateRangeWithDateOrStringValue, DateTimeMinuteConfig, dateRange, isDateInDateRange, clampDateRangeToDateRange, isSameDateRange, isSameDateDay, limitDateTimeInstance, dateTimeMinuteWholeDayDecisionFunction } from '@dereekb/date';\nimport { switchMap, shareReplay, map, startWith, distinctUntilChanged, debounceTime, throttleTime, BehaviorSubject, Observable, Subject, of, combineLatestWith, filter, combineLatest, scan, first, timer } from 'rxjs';\nimport { ChangeDetectionStrategy, Component, ElementRef, Injectable, OnDestroy, OnInit, forwardRef, inject, signal, viewChild } from '@angular/core';\nimport { AbstractControl, FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { FieldType } from '@ngx-formly/material';\nimport { FieldTypeConfig, FormlyFieldProps } from '@ngx-formly/core';\nimport { MatDateRangeSelectionStrategy, MAT_DATE_RANGE_SELECTION_STRATEGY, DateRange as DatePickerDateRange, MatCalendar, MatDatepickerModule } from '@angular/material/datepicker';\nimport { asObservableFromGetter, filterMaybe, ObservableOrValueGetter, skipAllInitialMaybe, SubscriptionObject, switchMapMaybeDefault } from '@dereekb/rxjs';\nimport { DbxDateTimeValueMode, dbxDateRangeIsSameDateRangeFieldValue, dbxDateTimeInputValueParseFactory, dbxDateTimeOutputValueFactory } from './date.value';\nimport { DateTimePresetConfiguration } from './datetime';\nimport { DbxDateTimeFieldMenuPresetsService } from './datetime.field.service';\nimport { DateAdapter } from '@angular/material/core';\nimport { isBefore } from 'date-fns';\nimport { MatError, MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { NgClass } from '@angular/common';\n\nexport type DbxFixedDateRangeDateRangeInput = Omit<DateRangeInput, 'date'>;\n\nexport type DbxFixedDateRangePickerConfiguration = Omit<DateTimeMinuteConfig, 'date'>;\n\nexport type DbxFixedDateRangeSelectionMode = 'single' | 'normal' | 'arbitrary' | 'arbitrary_quick';\nexport type DbxFixedDateRangePicking = 'start' | 'end';\n\nexport interface DbxFixedDateRangeFieldProps extends FormlyFieldProps {\n /**\n * Date range input to build the date range.\n */\n readonly dateRangeInput: ObservableOrValueGetter<DbxFixedDateRangeDateRangeInput>;\n\n /**\n * Selection mode to use when picking dates on the calendar.\n */\n readonly selectionMode?: Maybe<ObservableOrValueGetter<DbxFixedDateRangeSelectionMode>>;\n\n /**\n * Value mode for the dates in the output DateRange.\n *\n * Defaults to DATE\n */\n readonly valueMode?: DbxDateTimeValueMode;\n\n /**\n * Whether or not to pass the date value as a UTC date, or a date in the current timezone.\n */\n readonly fullDayInUTC?: boolean;\n\n /**\n * Custom picker configuration\n */\n readonly pickerConfig?: ObservableOrValueGetter<DbxFixedDateRangePickerConfiguration>;\n\n /**\n * (Optional) The input timezone to default to.\n *\n * Ignored if fullDayInUTC is true.\n */\n readonly timezone?: Maybe<ObservableOrValueGetter<Maybe<TimezoneString>>>;\n\n /**\n * Whether or not to display the timezone. True by default.\n */\n readonly showTimezone?: boolean;\n\n /**\n * Custom presets to show in the dropdown.\n */\n readonly presets?: ObservableOrValueGetter<DateTimePresetConfiguration[]>;\n\n /**\n * Whether or not to show the range input. Defaults to true.\n */\n readonly showRangeInput?: boolean;\n}\n\nfunction dbxFixedDateRangeInputValueFactory(mode: DbxDateTimeValueMode, timezoneInstance: Maybe<DateTimezoneUtcNormalInstance>): (input: Maybe<DateRangeWithDateOrStringValue>) => Maybe<DateRange> {\n const dateInputTransformer = dbxDateTimeInputValueParseFactory(mode, timezoneInstance);\n\n return (y) => {\n let result: Maybe<DateRange>;\n\n if (y) {\n result = {\n start: dateInputTransformer(y.start) as Date,\n end: dateInputTransformer(y.end) as Date\n };\n }\n\n return result;\n };\n}\n\nfunction dbxFixedDateRangeOutputValueFactory(mode: DbxDateTimeValueMode, timezoneInstance: Maybe<DateTimezoneUtcNormalInstance>): (date: Maybe<DateRange>) => Maybe<DateRangeWithDateOrStringValue> {\n const dateOutputTransformer = dbxDateTimeOutputValueFactory(mode, timezoneInstance);\n\n return (y) => {\n let result: Maybe<DateRange>;\n\n if (y) {\n result = {\n start: dateOutputTransformer(y.start) as Date,\n end: dateOutputTransformer(y.end) as Date\n };\n }\n\n return result;\n };\n}\n\nconst TIME_OUTPUT_THROTTLE_TIME: Milliseconds = 10;\n\nexport type FixedDateRangeScanType = 'start' | 'end' | 'startRepeat';\n\nexport interface FixedDateRangeScan {\n /**\n * Picked the start or end of the range on the last pick.\n */\n readonly lastPickType?: Maybe<FixedDateRangeScanType>;\n /**\n * The latest date passed, if applicable.\n */\n readonly lastDateRange?: Maybe<Partial<DateRange>>;\n /**\n * The generated boundary range.\n */\n readonly boundary?: DateRange;\n /**\n * New Date Range\n */\n readonly range?: DateRange;\n}\n\ntype SelectedDateEventType = 'calendar' | 'input';\n\ninterface SelectedDateEvent {\n readonly type: SelectedDateEventType;\n readonly range?: Maybe<Partial<DateRange>>;\n}\n\n@Component({\n templateUrl: 'fixeddaterange.field.component.html',\n providers: [\n {\n provide: MAT_DATE_RANGE_SELECTION_STRATEGY,\n useClass: forwardRef(() => DbxFixedDateRangeFieldSelectionStrategy)\n }\n ],\n imports: [MatDatepickerModule, MatFormFieldModule, FormsModule, ReactiveFormsModule, MatInputModule, MatError, NgClass],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFixedDateRangeFieldComponent extends FieldType<FieldTypeConfig<DbxFixedDateRangeFieldProps>> implements OnInit, OnDestroy {\n private readonly dbxDateTimeFieldMenuPresetsService = inject(DbxDateTimeFieldMenuPresetsService);\n\n readonly calendar = viewChild.required<MatCalendar<Date>>(MatCalendar);\n readonly startDateInputElement = viewChild<string, ElementRef>('startDateInput', { read: ElementRef });\n readonly endDateInputElement = viewChild<string, ElementRef>('endDateInput', { read: ElementRef });\n\n readonly currentDateRangeInputSignal = signal<Maybe<DbxFixedDateRangeDateRangeInput>>(undefined);\n readonly currentSelectionModeSignal = signal<DbxFixedDateRangeSelectionMode>('single');\n\n private readonly _sub = new SubscriptionObject();\n\n private readonly _inputRangeFormSub = new SubscriptionObject();\n private readonly _inputRangeFormValueSub = new SubscriptionObject();\n\n private readonly _dateRangeInputSub = new SubscriptionObject();\n private readonly _currentSelectionModeSub = new SubscriptionObject();\n private readonly _latestBoundarySub = new SubscriptionObject();\n private readonly _disableEndSub = new SubscriptionObject();\n private readonly _activeDateSub = new SubscriptionObject();\n\n private readonly _config = new BehaviorSubject<Maybe<Observable<DbxFixedDateRangePickerConfiguration>>>(undefined);\n private readonly _selectionMode = new BehaviorSubject<Maybe<Observable<DbxFixedDateRangeSelectionMode>>>(undefined);\n private readonly _dateRangeInput = new BehaviorSubject<Maybe<Observable<DbxFixedDateRangeDateRangeInput>>>(undefined);\n\n private readonly _timezone = new BehaviorSubject<Maybe<Observable<Maybe<TimezoneString>>>>(undefined);\n private readonly _presets = new BehaviorSubject<Observable<DateTimePresetConfiguration[]>>(of([]));\n\n private readonly _selectionEvent = new Subject<SelectedDateEvent>();\n readonly selectedDateRange$: Observable<Maybe<Partial<DateRange>>> = this._selectionEvent.pipe(map((x) => x.range));\n\n private readonly _formControlObs = new BehaviorSubject<Maybe<AbstractControl<Maybe<DateRange>>>>(undefined);\n readonly formControl$ = this._formControlObs.pipe(filterMaybe());\n\n readonly config$: Observable<DbxFixedDateRangePickerConfiguration> = this._config.pipe(\n filterMaybe(),\n switchMap((x) => x),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly limitDateTimeInstance$ = this.config$.pipe(map(limitDateTimeInstance), shareReplay(1));\n\n readonly selectionMode$: Observable<DbxFixedDateRangeSelectionMode> = this._selectionMode.pipe(\n switchMapMaybeDefault<DbxFixedDateRangeSelectionMode>('single'),\n map((x) => x ?? 'single'),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly dateRangeInput$ = this._dateRangeInput.pipe(switchMapMaybeDefault(), shareReplay(1));\n\n readonly timezone$: Observable<Maybe<TimezoneString>> = this._timezone.pipe(switchMapMaybeDefault(), distinctUntilChanged()).pipe(\n map((defaultTimezone) => {\n return defaultTimezone ?? guessCurrentTimezone();\n }),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly timezoneInstance$: Observable<Maybe<DateTimezoneUtcNormalInstance>> = this.timezone$.pipe(\n map((timezone) => (timezone ? dateTimezoneUtcNormal({ timezone }) : undefined)),\n shareReplay(1)\n );\n\n readonly valueInSystemTimezone$: Observable<Maybe<DateRange>> = this.formControl$.pipe(\n map((control) => control.valueChanges.pipe(startWith<Maybe<DateRangeWithDateOrStringValue>>(control.value), shareReplay(1))),\n combineLatestWith(this.timezoneInstance$),\n switchMap(([x, timezoneInstance]) => {\n return x.pipe(map(dbxFixedDateRangeInputValueFactory(this.valueMode, timezoneInstance)));\n }),\n throttleTime(20, undefined, { leading: false, trailing: true }), // throttle incoming values and timezone changes\n distinctUntilChanged<Maybe<DateRange>>(isSameDateDayRange),\n shareReplay(1)\n );\n\n dateRangeSelectionForMode(mode: DbxFixedDateRangeSelectionMode) {\n const result: Observable<Maybe<DateRange>> = combineLatest([this.dateRangeInput$, this.limitDateTimeInstance$]).pipe(\n switchMap(([dateRangeInput, limitInstance]) => {\n const hasDateRangeConfiguration = Boolean(dateRangeInput);\n const minMaxClamp = (dateRange: DateRange) => limitInstance.clampDateRange(dateRange);\n\n if (mode === 'single') {\n // only use the start date.\n return this.selectedDateRange$.pipe(\n distinctUntilChanged(isSameDateDayRange),\n map((inputDateRange) => {\n const date = inputDateRange?.start;\n return date ? (minMaxClamp(dateRange({ ...dateRangeInput, date } as DateRangeInput)) as DateRange) : null;\n })\n );\n } else {\n // take the first date, then wait unless the date is outside of the range.\n return this.selectedDateRange$.pipe(\n scan((acc: FixedDateRangeScan, nextDateRange: Maybe<Partial<DateRange>>) => {\n let result: FixedDateRangeScan;\n let pickType: Maybe<FixedDateRangeScanType> = 'start';\n\n if (nextDateRange && nextDateRange.start != null) {\n const { start: startOrNextDate, end } = nextDateRange;\n const potentialBoundary = dateRange({ ...dateRangeInput, date: startOrNextDate } as DateRangeInput);\n\n // only comes through when passed by the text inputs\n if (startOrNextDate && end) {\n const range = clampDateRangeToDateRange(nextDateRange, potentialBoundary) as DateRange;\n result = {\n lastDateRange: nextDateRange,\n boundary: range,\n range\n };\n\n // for normal mode we want to protect against \"start\" being input, then the output being passed,\n // and then the next click being treated as another \"start\" instead of an \"end\".\n if (mode === 'normal' && acc.lastPickType === 'start' && isSameDateDay(startOrNextDate, end)) {\n if (isSameDateDay(startOrNextDate, acc.lastDateRange?.start)) {\n pickType = 'startRepeat';\n }\n }\n } else {\n let range: Maybe<DateRange> = undefined;\n let boundary: Maybe<DateRange> = potentialBoundary;\n\n if (mode === 'normal') {\n if (!hasDateRangeConfiguration) {\n // if there is no configured range/boundary, then just set the pick type based on the last type\n boundary = undefined;\n pickType = acc.lastPickType === 'start' ? 'end' : 'start';\n } else if (acc.lastPickType === 'startRepeat') {\n pickType = 'end';\n } else {\n // if the pick is outside the boundary, then consider it a start pick type.\n pickType = acc.lastPickType === 'start' && acc.boundary && isDateInDateRange(startOrNextDate, acc.boundary) ? 'end' : 'start';\n }\n\n // react based on how this\n switch (pickType) {\n case 'end':\n const lastStart = acc.lastDateRange?.start as Date;\n\n let boundaryToCheck: DateRange;\n const selectionIsBeforePreviousSelection = !lastStart || isBefore(startOrNextDate, lastStart);\n\n let nextStart: Date;\n let nextEnd: Date;\n\n if (selectionIsBeforePreviousSelection) {\n nextStart = startOrNextDate;\n nextEnd = lastStart;\n boundaryToCheck = potentialBoundary;\n } else {\n nextStart = lastStart;\n nextEnd = startOrNextDate;\n boundaryToCheck = dateRange({ ...dateRangeInput, date: nextStart } as DateRangeInput);\n }\n\n // Recalculate the boundary using the next start date. If it is outside the selectable range, then it becomes a \"start\" pick type.\n if (isBefore(boundaryToCheck.end, nextEnd)) {\n // TODO: Allow changing the behavior to fill the entire range instead of just resetting it entirely\n\n nextStart = startOrNextDate;\n nextEnd = startOrNextDate;\n pickType = 'start';\n boundary = boundaryToCheck;\n } else {\n boundary = range;\n }\n\n // if we're picking the end then set the range.\n range = {\n start: nextStart,\n end: nextEnd\n };\n break;\n case 'start':\n // retain the boundary as potential boundary, and set our new range from the single date.\n range = {\n start: startOrNextDate as Date,\n end: startOrNextDate as Date\n };\n break;\n }\n } else if (acc.boundary && isDateInDateRange(startOrNextDate, acc.boundary)) {\n // if in the date range, uses the pick as the last date.\n range = {\n start: acc.boundary.start,\n end: startOrNextDate\n };\n\n if (mode === 'arbitrary_quick') {\n // modify boundary to match range\n if (isSameDateRange(acc.range, range) && isSameDateDay(range.end, startOrNextDate)) {\n // if we clicked on the end range, then expand the boundary again to the full range.\n range = dateRange({ ...dateRangeInput, date: range.start } as DateRangeInput);\n boundary = range;\n } else {\n boundary = range;\n }\n } else {\n // retain same boundary\n boundary = acc.boundary;\n }\n } else if (mode === 'arbitrary_quick') {\n range = potentialBoundary;\n }\n\n result = {\n lastDateRange: nextDateRange,\n boundary,\n range\n };\n }\n } else {\n result = {\n lastDateRange: nextDateRange\n };\n }\n\n if (result) {\n result = {\n lastPickType: pickType,\n lastDateRange: result.lastDateRange,\n boundary: result.boundary ? (minMaxClamp(result.boundary) as DateRange) : undefined,\n range: result.range ? (minMaxClamp(result.range) as DateRange) : undefined\n };\n }\n\n return result;\n }, {}),\n filter((x) => !x.lastDateRange || x.range != null), // pass through null/date clearings or ranges\n map((x) => x.range ?? null) // return the range\n );\n }\n })\n );\n\n return result;\n }\n\n readonly fullBoundary$: Observable<Maybe<DateRange>> = this.dateRangeSelectionForMode('single').pipe(shareReplay(1));\n readonly latestBoundary$: Observable<Maybe<DateRange>> = this.selectionMode$.pipe(\n switchMap((mode) => {\n if (mode === 'arbitrary_quick') {\n // in arbitrary_quick mode, the latest value is the boundary, since we always set the value immediately.\n return this.valueInSystemTimezone$;\n } else {\n return this.fullBoundary$;\n }\n })\n );\n\n /**\n * Focuses on the date any time the selection event from the picker occured, otherwise use the system value\n */\n readonly calendarFocusDate$: Observable<Date> = this._selectionEvent.pipe(startWith(null)).pipe(\n switchMap((selectionEvent) => {\n if (selectionEvent && selectionEvent.type === 'calendar' && selectionEvent.range?.start) {\n return of(selectionEvent.range.start);\n } else {\n return this.fullBoundary$.pipe(\n first(),\n map((fullBoundary) => {\n return fullBoundary?.start ?? selectionEvent?.range?.start;\n })\n );\n }\n }),\n filterMaybe(),\n shareReplay(1)\n );\n\n readonly dateRangeSelection$: Observable<Maybe<DateRange>> = this.selectionMode$.pipe(switchMap((mode) => this.dateRangeSelectionForMode(mode)));\n\n readonly calendarSelection$: Observable<DatePickerDateRange<Date> | null> = this.valueInSystemTimezone$.pipe(\n map((x) => (x ? new DatePickerDateRange<Date>(x.start, x.end) : null)),\n shareReplay(1)\n );\n\n readonly endDisabled$ = this.selectionMode$.pipe(\n map((x) => x === 'single'),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly inputRangeForm = new FormGroup({\n start: new FormControl<Maybe<Date>>(null),\n end: new FormControl<Maybe<Date>>(null)\n });\n\n get fixedDateRangeField(): DbxFixedDateRangeFieldProps {\n return this.field.props;\n }\n\n get selectionMode() {\n return this.field.props.selectionMode;\n }\n\n get valueMode(): DbxDateTimeValueMode {\n return this.field.props.valueMode ?? DbxDateTimeValueMode.DATE;\n }\n\n get description(): Maybe<string> {\n return this.field.props.description;\n }\n\n get timezone() {\n return this.field.props.timezone;\n }\n\n get showTimezone() {\n return this.field.props.showTimezone ?? true;\n }\n\n get presets() {\n return this.field.props.presets;\n }\n\n get showRangeInput() {\n return this.field.props.showRangeInput ?? true;\n }\n\n readonly minMaxRange$ = this.limitDateTimeInstance$.pipe(\n combineLatestWith(timer(MS_IN_MINUTE)), // refresh every minute\n map(([x]) => x.dateRange()),\n distinctUntilChanged(isSameDateDayRange),\n shareReplay(1)\n );\n\n readonly min$ = this.minMaxRange$.pipe(\n map((x) => x?.start ?? null),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly max$ = this.minMaxRange$.pipe(\n map((x) => x?.end ?? null),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly pickerFilter$: Observable<DecisionFunction<Date | null>> = this.config$.pipe(\n distinctUntilChanged(),\n map((x) => {\n if (x) {\n const filter = dateTimeMinuteWholeDayDecisionFunction(x, false);\n return (x: Date | null) => (x != null ? filter(x) : true);\n } else {\n return () => true;\n }\n }),\n shareReplay(1)\n );\n\n readonly defaultPickerFilter: DecisionFunction<Date | null> = () => true;\n\n readonly minDateSignal = toSignal(this.min$, { initialValue: null });\n readonly maxDateSignal = toSignal(this.max$, { initialValue: null });\n readonly endDisabledSignal = toSignal(this.endDisabled$);\n readonly latestBoundarySignal = toSignal(this.latestBoundary$);\n readonly calendarSelectionSignal = toSignal(this.calendarSelection$, { initialValue: null });\n readonly pickerFilterSignal = toSignal(this.pickerFilter$, { initialValue: this.defaultPickerFilter });\n\n ngOnInit(): void {\n this._formControlObs.next(this.formControl);\n\n const dateRangeSelection = this.dateRangeSelection$.pipe(shareReplay(1));\n\n const setInputFormValue = (value: Maybe<DateRange>) => {\n if (!isSameDateDayRange(value, this.inputRangeForm.value as Partial<DateRange>)) {\n this.inputRangeForm.setValue({\n start: value?.start ?? null,\n end: value?.end ?? null\n });\n }\n };\n\n this._sub.subscription = this.valueInSystemTimezone$\n .pipe(\n combineLatestWith(this.timezoneInstance$.pipe(map((timezoneInstance) => dbxFixedDateRangeOutputValueFactory(this.valueMode, timezoneInstance)))),\n throttleTime(TIME_OUTPUT_THROTTLE_TIME, undefined, { leading: false, trailing: true }),\n switchMap(([currentValue, valueFactory]) => {\n return dateRangeSelection.pipe(\n skipAllInitialMaybe(),\n distinctUntilChanged<Maybe<DateRange>>(isSameDateDayRange),\n map((x) => [x, currentValue, valueFactory] as [typeof x, typeof currentValue, typeof valueFactory])\n );\n })\n )\n .subscribe(([rawValue, currentValue, valueFactory]) => {\n const value = rawValue ? valueFactory(rawValue) : null;\n const isSameRange = dbxDateRangeIsSameDateRangeFieldValue(value, currentValue);\n\n if (!isSameRange) {\n this.formControl.setValue(value);\n this.formControl.markAsDirty();\n this.formControl.markAsTouched();\n } else if (rawValue != null) {\n // update the input text again\n setInputFormValue(rawValue);\n }\n });\n\n if (this.selectionMode) {\n this._selectionMode.next(asObservableFromGetter(this.selectionMode));\n }\n\n this._currentSelectionModeSub.subscription = this.selectionMode$.subscribe((x) => this.currentSelectionModeSignal.set(x));\n this._dateRangeInputSub.subscription = this.dateRangeInput$.subscribe((x) => this.currentDateRangeInputSignal.set(x));\n\n this._inputRangeFormSub.subscription = this.valueInSystemTimezone$.subscribe((x: Maybe<DateRange>) => {\n setInputFormValue(x);\n });\n\n if (this.showRangeInput) {\n this._inputRangeFormValueSub.subscription = this.valueInSystemTimezone$\n .pipe(\n throttleTime(100), // throttle to prevent the value from changing too fast\n switchMap(() => {\n return this.inputRangeForm.valueChanges.pipe(\n debounceTime(500),\n filter(() => {\n const startString = this.startDateInputElement()?.nativeElement?.value;\n let valid = isMonthDaySlashDate(startString);\n\n if (valid && this.currentSelectionModeSignal() !== 'single') {\n const endString = this.endDateInputElement()?.nativeElement?.value;\n valid = isMonthDaySlashDate(endString);\n }\n\n return valid; // must be a valid text input\n }),\n map((x) => x as Maybe<Partial<DateRange>>)\n );\n }),\n distinctUntilChanged(isSameDateRange)\n )\n .subscribe((x: Maybe<Partial<DateRange>>) => {\n const currentSelectionMode = this.currentSelectionModeSignal();\n\n if (currentSelectionMode === 'single') {\n this.setDateRange(x?.start ? { start: x.start } : null, 'input');\n } else {\n let rangeToSet: Maybe<Partial<DateRange>> = x;\n\n const latestBoundary = this.latestBoundarySignal();\n\n if (currentSelectionMode === 'arbitrary_quick' && latestBoundary && x?.start && x?.end) {\n if (!isDateInDateRange(x.start, latestBoundary)) {\n // if the end date it outside of the current range (i.e. a range was typed in only to the start date) then set the end to the boundary end\n const boundary = dateRange({ ...this.currentDateRangeInputSignal(), date: x.start } as DateRangeInput);\n rangeToSet = { start: x.start, end: boundary.end };\n }\n }\n\n this.setDateRange(rangeToSet, 'input');\n }\n });\n }\n\n this._dateRangeInput.next(asObservableFromGetter(this.fixedDateRangeField.dateRangeInput));\n\n this._disableEndSub.subscription = this.endDisabled$.subscribe((disabled) => {\n const end = this.inputRangeForm.get('end');\n\n if (end) {\n if (disabled) {\n end.disable();\n } else {\n end.enable();\n }\n }\n });\n\n const inputPickerConfig = this.fixedDateRangeField.pickerConfig;\n this._config.next(inputPickerConfig ? asObservableFromGetter(inputPickerConfig) : undefined);\n\n // Set default timezone if provided.\n if (this.timezone && !this.fixedDateRangeField.fullDayInUTC) {\n this._timezone.next(asObservableFromGetter(this.timezone));\n }\n\n // Watch for disabled changes so we can propogate them properly.\n this.formControl.registerOnDisabledChange((disabled) => {\n if (disabled) {\n this.inputRangeForm.disable();\n } else {\n this.inputRangeForm.enable();\n\n this.endDisabled$.pipe(first()).subscribe((disabled) => {\n const end = this.inputRangeForm.get('end');\n\n if (end) {\n if (disabled) {\n end.disable();\n } else {\n end.enable();\n }\n }\n });\n }\n });\n\n if (this.presets != null) {\n this._presets.next(asObservableFromGetter(this.presets));\n } else {\n this._presets.next(this.dbxDateTimeFieldMenuPresetsService.configurations$);\n }\n\n this._activeDateSub.subscription = this.calendarFocusDate$.subscribe((x) => {\n this.calendar().activeDate = x;\n });\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._sub.destroy();\n this._inputRangeFormSub.destroy();\n this._inputRangeFormValueSub.destroy();\n this._dateRangeInputSub.destroy();\n this._currentSelectionModeSub.destroy();\n this._latestBoundarySub.destroy();\n this._disableEndSub.destroy();\n this._activeDateSub.destroy();\n this._config.complete();\n this._selectionMode.complete();\n this._dateRangeInput.complete();\n this._timezone.complete();\n this._presets.complete();\n this._selectionEvent.complete();\n this._formControlObs.complete();\n }\n\n selectedChange(date: Maybe<Date>): void {\n this.setDateRange(date ? { start: date } : null, 'calendar');\n }\n\n setDateRange(range: Maybe<Partial<DateRange>>, type: SelectedDateEventType) {\n this._selectionEvent.next({ type, range });\n }\n\n _createDateRange(date: Maybe<Date>): Maybe<DateRange> {\n return date ? dateRange({ ...this.currentDateRangeInputSignal(), date } as DateRangeInput) : undefined;\n }\n}\n\n@Injectable()\nexport class DbxFixedDateRangeFieldSelectionStrategy<D> implements MatDateRangeSelectionStrategy<D> {\n private readonly _dateAdapter = inject(DateAdapter<D>);\n readonly dbxFixedDateRangeFieldComponent = inject(DbxFixedDateRangeFieldComponent);\n\n selectionFinished(date: D | null, currentRange: DatePickerDateRange<D>, event: Event): DatePickerDateRange<D> {\n // unused\n return currentRange;\n }\n\n createPreview(activeDate: D | null, currentRange: DatePickerDateRange<D>, event: Event): DatePickerDateRange<D> {\n const { currentSelectionModeSignal, latestBoundarySignal } = this.dbxFixedDateRangeFieldComponent;\n const currentSelectionMode = currentSelectionModeSignal();\n\n if (activeDate != null && currentSelectionMode !== 'single') {\n const latestBoundary = latestBoundarySignal();\n const date = this.dateFromAdapterDate(activeDate);\n\n if (latestBoundary && (currentSelectionMode === 'normal' || isDateInDateRange(date, latestBoundary))) {\n const exampleDateRange = this._createDateRange(latestBoundary);\n return exampleDateRange;\n }\n }\n\n return this._createDateRangeWithDate(activeDate);\n }\n\n private _createDateRangeWithDate(input: D | null): DatePickerDateRange<D> {\n let dateRange: Maybe<DateRange>;\n\n if (input) {\n const date = this.dateFromAdapterDate(input);\n dateRange = this.dbxFixedDateRangeFieldComponent._createDateRange(date);\n }\n\n return this._createDateRange(dateRange);\n }\n\n private _createDateRange(input: Maybe<DateRange>): DatePickerDateRange<D> {\n if (input) {\n return new DatePickerDateRange<D>(this.adapterDateFromDate(input.start), this.adapterDateFromDate(input.end));\n } else {\n return new DatePickerDateRange<D>(null, null);\n }\n }\n\n dateFromAdapterDate(input: D) {\n const day: DayOfMonth = this._dateAdapter.getDate(input);\n const monthIndex: DateMonth = this._dateAdapter.getMonth(input);\n const year: YearNumber = this._dateAdapter.getYear(input);\n return new Date(year, monthIndex, day);\n }\n\n adapterDateFromDate(date: Date): D {\n const day: DayOfMonth = date.getDate();\n const monthIndex: DateMonth = date.getMonth();\n const year: YearNumber = date.getFullYear();\n\n return this._dateAdapter.createDate(year, monthIndex, day);\n }\n}\n","<div class=\"dbx-fixeddaterange-field\">\n <mat-calendar #calendarView [selected]=\"calendarSelectionSignal()\" [dateFilter]=\"pickerFilterSignal()\" [minDate]=\"minDateSignal()\" [maxDate]=\"maxDateSignal()\" (selectedChange)=\"selectedChange($event)\"></mat-calendar>\n <mat-form-field class=\"dbx-fixeddaterange-field-input\" appearance=\"fill\">\n @if (showRangeInput) {\n <mat-date-range-input [formGroup]=\"inputRangeForm\">\n <input #startDateInput matStartDate formControlName=\"start\" placeholder=\"Start date\" />\n <input #endDateInput [ngClass]=\"endDisabledSignal() ? 'dbx-fixeddaterange-field-input-end' : ''\" [attr.tabindex]=\"endDisabledSignal() ? -1 : 0\" matEndDate formControlName=\"end\" placeholder=\"End date\" />\n </mat-date-range-input>\n }\n </mat-form-field>\n @if (formControl.hasError('required')) {\n <mat-error>Date range is required</mat-error>\n }\n</div>\n","import { NgModule } from '@angular/core';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxDateTimeFieldComponent } from './datetime.field.component';\nimport { DbxFormFormlyWrapperModule } from '../../wrapper/wrapper.module';\nimport { DbxFixedDateRangeFieldComponent } from './fixeddaterange.field.component';\n\nconst importsAndExports = [DbxDateTimeFieldComponent, DbxFixedDateRangeFieldComponent, DbxFormFormlyWrapperModule];\n\n@NgModule({\n imports: [\n ...importsAndExports,\n FormlyModule.forChild({\n types: [\n //\n { name: 'datetime', component: DbxDateTimeFieldComponent, wrappers: ['style', 'form-field'] },\n { name: 'fixeddaterange', component: DbxFixedDateRangeFieldComponent, wrappers: ['style', 'form-field'] }\n ]\n })\n ],\n exports: importsAndExports\n})\nexport class DbxFormFormlyDateFieldModule {}\n","import { type DbxFormStyleWrapperConfig } from './style.wrapper.component';\nimport { type DbxFlexWrapperConfig } from './flex.wrapper.component';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type DbxFormToggleWrapperConfig } from './toggle.wrapper.component';\nimport { type DbxFormSectionConfig } from './section.wrapper.component';\nimport { type DbxFormSubsectionConfig } from './subsection.wrapper.component';\nimport { type DbxFormInfoConfig } from './info.wrapper.component';\nimport { type DbxFormExpandWrapperConfig } from './expand.wrapper.component';\nimport { type DbxFlexSize } from '@dereekb/dbx-web';\nimport { type DbxFormWorkingWrapperConfig } from './working.wrapper.component';\nimport { AUTO_TOUCH_WRAPPER_KEY, EXPAND_WRAPPER_KEY, TOGGLE_WRAPPER_KEY, SECTION_WRAPPER_KEY, SUBSECTION_WRAPPER_KEY, INFO_WRAPPER_KEY, STYLE_WRAPPER_KEY, WORKING_WRAPPER_KEY } from './wrapper.key';\n\nexport type WrapperFormlyFieldConfig<P, C extends FormlyFieldConfig> = FormlyFieldConfig<P> & {\n wrappers: string[];\n props: P;\n fieldGroup: [C];\n};\n\nexport function addWrapperToFormlyFieldConfig<C extends FormlyFieldConfig, P extends object>(fieldConfig: C, wrapperKey: string, wrapperProps: P): WrapperFormlyFieldConfig<P, C> {\n return {\n wrappers: [wrapperKey],\n props: wrapperProps,\n fieldGroup: [fieldConfig]\n };\n}\n\nexport function autoTouchWrapper<T extends object, C extends FormlyFieldConfig>(fieldConfig: C, autoTouchWrapper: DbxFormExpandWrapperConfig<T> = {}) {\n return addWrapperToFormlyFieldConfig<C, DbxFormExpandWrapperConfig<T>>(fieldConfig, AUTO_TOUCH_WRAPPER_KEY, autoTouchWrapper);\n}\n\nexport function expandWrapper<T extends object, C extends FormlyFieldConfig>(fieldConfig: C, expandWrapper: DbxFormExpandWrapperConfig<T> = {}) {\n return addWrapperToFormlyFieldConfig<C, DbxFormExpandWrapperConfig<T>>(fieldConfig, EXPAND_WRAPPER_KEY, expandWrapper);\n}\n\nexport function toggleWrapper<C extends FormlyFieldConfig>(fieldConfig: C, toggleWrapper: DbxFormToggleWrapperConfig = {}) {\n return addWrapperToFormlyFieldConfig<C, DbxFormToggleWrapperConfig>(fieldConfig, TOGGLE_WRAPPER_KEY, toggleWrapper);\n}\n\nexport function sectionWrapper<C extends FormlyFieldConfig>(fieldConfig: C, sectionWrapper: DbxFormSectionConfig = {}) {\n return addWrapperToFormlyFieldConfig<C, DbxFormSectionConfig>(fieldConfig, SECTION_WRAPPER_KEY, sectionWrapper);\n}\n\nexport function subsectionWrapper<C extends FormlyFieldConfig>(fieldConfig: C, subsectionWrapper: DbxFormSubsectionConfig = {}) {\n return addWrapperToFormlyFieldConfig<C, DbxFormSubsectionConfig>(fieldConfig, SUBSECTION_WRAPPER_KEY, subsectionWrapper);\n}\n\nexport function infoWrapper<C extends FormlyFieldConfig>(fieldConfig: C, infoWrapper: DbxFormInfoConfig) {\n return addWrapperToFormlyFieldConfig<C, DbxFormInfoConfig>(fieldConfig, INFO_WRAPPER_KEY, infoWrapper);\n}\n\nexport function styleWrapper<C extends FormlyFieldConfig>(fieldConfig: C, styleWrapper: DbxFormStyleWrapperConfig) {\n return addWrapperToFormlyFieldConfig<C, DbxFormStyleWrapperConfig>(fieldConfig, STYLE_WRAPPER_KEY, styleWrapper);\n}\n\nexport function workingWrapper<C extends FormlyFieldConfig>(fieldConfig: C, workingWrapper: DbxFormWorkingWrapperConfig = {}) {\n return addWrapperToFormlyFieldConfig<C, DbxFormWorkingWrapperConfig>(fieldConfig, WORKING_WRAPPER_KEY, workingWrapper);\n}\n\nexport interface DbxFlexLayoutWrapperGroupFieldConfig {\n field: FormlyFieldConfig;\n /**\n * Flex space sizing for the field. If undefined it will default to the provided default size.\n */\n size?: DbxFlexSize;\n}\n\nexport interface DbxFlexLayoutWrapperGroupFieldConfigDefaults extends DbxFlexWrapperConfig, Omit<DbxFlexLayoutWrapperGroupFieldConfig, 'field'> {}\n\nexport function checkIsFieldFlexLayoutGroupFieldConfig(input: FormlyFieldConfig | DbxFlexLayoutWrapperGroupFieldConfig): input is DbxFlexLayoutWrapperGroupFieldConfig {\n if ((input as DbxFlexLayoutWrapperGroupFieldConfig).field != null) {\n return true;\n } else {\n return false;\n }\n}\n\nexport function flexLayoutWrapper(fieldConfigs: (FormlyFieldConfig | DbxFlexLayoutWrapperGroupFieldConfig)[], { relative, breakpoint, breakToColumn, size: defaultSize = 2 }: DbxFlexLayoutWrapperGroupFieldConfigDefaults = {}): FormlyFieldConfig<DbxFlexWrapperConfig> {\n return {\n wrappers: ['flex'],\n fieldGroupClassName: 'dbx-flex-group',\n // fieldGroupClassName: 'field-layout-group',\n props: {\n breakpoint,\n breakToColumn,\n relative\n },\n fieldGroup: fieldConfigs.map((inputConfig) => {\n const fieldConfig: DbxFlexLayoutWrapperGroupFieldConfig = checkIsFieldFlexLayoutGroupFieldConfig(inputConfig)\n ? inputConfig\n : {\n field: inputConfig\n };\n\n const { field, size = defaultSize } = fieldConfig;\n const className = `dbx-flex-${size}`;\n\n return {\n ...field,\n className\n };\n })\n };\n}\n\n// TODO: Add addon wrapper/extension from this demo:\n// https://formly.dev/docs/examples/other/material-prefix-suffix\n\n/*\nexport interface NumberFieldAddon {\n readonly text?: Maybe<string>;\n readonly icon?: Maybe<string>;\n}\n \nreadonly addonLeft?: Maybe<NumberFieldAddon>;\nreadonly addonRight?: Maybe<NumberFieldAddon>;\n*/\n","import { type Observable, of } from 'rxjs';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig, type DescriptionFieldConfig, type MaterialFormFieldConfig } from '../../field';\nimport { type DbxDateTimeFieldProps, DbxDateTimeFieldTimeMode, type DbxDateTimePickerConfiguration } from './datetime.field.component';\nimport { flexLayoutWrapper } from '../../wrapper/wrapper';\nimport { type Maybe } from '@dereekb/util';\nimport { type DbxFixedDateRangeFieldProps } from './fixeddaterange.field.component';\n\nexport interface DateTimeFieldConfig extends LabeledFieldConfig, DescriptionFieldConfig, DbxDateTimeFieldProps, MaterialFormFieldConfig {}\nexport type TimeFieldConfig = Omit<DateTimeFieldConfig, 'showDate' | 'timeOnly'>;\n\nexport const TAKE_NEXT_UPCOMING_TIME_CONFIG_OBS: () => Observable<DbxDateTimePickerConfiguration> = () =>\n of({\n takeNextUpcomingTime: true,\n roundDownToMinute: true\n });\n\n/**\n * Same as DateTime field but with the Date input hidden by default.\n */\nexport function timeOnlyField(config: Partial<TimeFieldConfig> = {}): FormlyFieldConfig {\n return dateTimeField({\n ...config,\n timeMode: DbxDateTimeFieldTimeMode.REQUIRED,\n timeOnly: true\n });\n}\n\nexport function dateTimeField(config: Partial<DateTimeFieldConfig> = {}) {\n const { key = 'date', showClearButton, dateLabel, timeLabel, allDayLabel, atTimeLabel, timeDate, timezone, minuteStep, showTimezone, timeMode = DbxDateTimeFieldTimeMode.REQUIRED, valueMode, alwaysShowDateInput, autofillDateWhenTimeIsPicked, fullDayInUTC, fullDayFieldName, pickerConfig, getSyncFieldsObs, hideDatePicker, hideDateHint, timeOnly = false, presets, materialFormField } = config;\n\n const classGetter = 'dbx-mat-form-field-disable-underline dbx-mat-form-date-time-field-wrapper';\n const fieldConfig: FormlyFieldConfig<DbxDateTimeFieldProps> = formlyField({\n key,\n type: 'datetime',\n ...propsAndConfigForFieldConfig(config, {\n ...materialFormField,\n showClearButton,\n classGetter,\n dateLabel,\n timeLabel,\n allDayLabel,\n atTimeLabel,\n valueMode,\n timeOnly,\n presets,\n minuteStep,\n timeMode: timeOnly ? DbxDateTimeFieldTimeMode.REQUIRED : timeMode,\n alwaysShowDateInput,\n autofillDateWhenTimeIsPicked,\n timezone,\n timeDate,\n showTimezone,\n fullDayFieldName,\n fullDayInUTC,\n hideDatePicker,\n hideDateHint,\n pickerConfig,\n getSyncFieldsObs\n })\n });\n\n return fieldConfig;\n}\n\nexport type DateDateRangeFieldDateConfig = Omit<DateTimeFieldConfig, 'dateLabel' | 'timeOnly' | 'timeMode' | 'getSyncFieldsObs'>;\n\nexport interface DateDateRangeFieldConfig extends Pick<DateTimeFieldConfig, 'timeDate' | 'timezone' | 'showTimezone' | 'presets' | 'valueMode' | 'minuteStep'> {\n required?: boolean;\n start?: Partial<DateDateRangeFieldDateConfig>;\n end?: Partial<DateDateRangeFieldDateConfig>;\n}\n\nexport function dateRangeField(config: DateDateRangeFieldConfig = {}): FormlyFieldConfig {\n const { required: inputRequired, start, end, timeDate, timezone, showTimezone, presets, valueMode, minuteStep } = config;\n const required = inputRequired ?? start?.required ?? false;\n\n const startFieldKey = start?.key ?? 'start';\n const endFieldKey = end?.key ?? 'end';\n\n const startField = dateTimeField({\n dateLabel: 'Start',\n timeMode: DbxDateTimeFieldTimeMode.NONE,\n getSyncFieldsObs: () => of([{ syncWith: endFieldKey, syncType: 'after' }]),\n presets,\n allDayLabel: '',\n timeDate,\n timezone,\n showTimezone,\n valueMode,\n minuteStep,\n ...start,\n required,\n key: startFieldKey\n });\n\n const endField = dateTimeField({\n dateLabel: 'End',\n timeMode: DbxDateTimeFieldTimeMode.NONE,\n getSyncFieldsObs: () => of([{ syncWith: startFieldKey, syncType: 'before' }]),\n presets,\n allDayLabel: '',\n timeDate,\n timezone,\n showTimezone,\n valueMode,\n minuteStep,\n ...end,\n required,\n key: endFieldKey\n });\n\n return {\n key: undefined,\n fieldGroup: [flexLayoutWrapper([startField, endField], { relative: true, breakToColumn: true, breakpoint: 'large' })]\n };\n}\n\nexport type DateTimeRangeFieldTimeConfig = Omit<DateDateRangeFieldDateConfig, 'allDayLabel' | 'fullDayFieldName' | 'fullDayInUTC'>;\n\nexport interface DateDateTimeRangeFieldConfig extends Pick<DateTimeFieldConfig, 'timeDate' | 'timezone' | 'showTimezone' | 'presets' | 'valueMode' | 'minuteStep'> {\n required?: boolean;\n start?: Partial<DateTimeRangeFieldTimeConfig>;\n end?: Partial<DateTimeRangeFieldTimeConfig>;\n}\n\nexport function dateTimeRangeField(inputConfig: DateDateTimeRangeFieldConfig = {}): FormlyFieldConfig {\n const { required = false, start: inputStart, end: inputEnd, timezone, timeDate, showTimezone, presets, valueMode, minuteStep } = inputConfig;\n\n function dateTimeRangeFieldConfig(config: Maybe<Partial<DateTimeRangeFieldTimeConfig>>): Partial<DateTimeFieldConfig> {\n return {\n valueMode,\n minuteStep,\n ...config,\n required,\n timeMode: DbxDateTimeFieldTimeMode.REQUIRED,\n getSyncFieldsObs: undefined,\n timeOnly: true,\n hideDateHint: true\n };\n }\n\n const startKey = inputStart?.key ?? 'start';\n const endKey = inputEnd?.key ?? 'end';\n\n const start: Partial<DateTimeFieldConfig> = {\n label: 'Start Time',\n ...dateTimeRangeFieldConfig(inputStart),\n key: startKey\n };\n\n const end: Partial<DateTimeFieldConfig> = {\n label: 'End Time',\n ...dateTimeRangeFieldConfig(inputEnd),\n key: endKey\n };\n\n const config = {\n timezone,\n timeDate,\n showTimezone,\n presets,\n start,\n end\n };\n\n return dateRangeField(config);\n}\n\n// MARK: FixedDateRange\nexport interface FixedDateRangeFieldConfig extends LabeledFieldConfig, DescriptionFieldConfig, DbxFixedDateRangeFieldProps, MaterialFormFieldConfig {}\n\nexport function fixedDateRangeField(config: Partial<FixedDateRangeFieldConfig> = {}) {\n const { key = 'dateRange', dateRangeInput, pickerConfig, timezone, selectionMode, showTimezone, valueMode, fullDayInUTC, presets, showRangeInput, materialFormField } = config;\n\n const classGetter = 'dbx-mat-form-field-disable-underline dbx-form-fixed-date-range-field-wrapper';\n const fieldConfig: FormlyFieldConfig<DbxDateTimeFieldProps> = formlyField({\n key,\n type: 'fixeddaterange',\n ...propsAndConfigForFieldConfig(config, {\n ...materialFormField,\n classGetter,\n dateRangeInput,\n pickerConfig,\n valueMode,\n presets,\n timezone,\n selectionMode,\n showTimezone,\n fullDayInUTC,\n showRangeInput\n })\n });\n\n return fieldConfig;\n}\n","import { type DateTimePresetConfiguration } from './datetime';\n\nexport const DEFAULT_DATE_TIME_FIELD_MENU_PRESETS_PRESETS: DateTimePresetConfiguration[] = [\n {\n label: '6:00AM',\n timeString: '6:00AM'\n },\n {\n label: '8:00AM',\n timeString: '8:00AM'\n },\n {\n label: '10:00AM',\n timeString: '10:00AM'\n },\n {\n label: 'Noon',\n timeString: '12:00PM'\n },\n {\n label: '2:00PM',\n timeString: '2:00PM'\n },\n {\n label: '5:00PM',\n timeString: '5:00PM'\n },\n {\n label: 'Midnight',\n timeString: '12:00AM'\n }\n];\n","import { type AbstractControl, type ValidationErrors, type ValidatorFn } from '@angular/forms';\n\nexport function isTruthy(): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const value: boolean | undefined = control.value;\n\n if (!value) {\n return {\n isTruthy: value\n };\n }\n\n return {};\n };\n}\n","import { Validators, type ValidatorFn } from '@angular/forms';\nimport { HAS_WEBSITE_DOMAIN_NAME_REGEX } from '@dereekb/util';\n\nexport function isDomain(): ValidatorFn {\n return Validators.pattern(HAS_WEBSITE_DOMAIN_NAME_REGEX);\n}\n","import { type AbstractControl, type ValidatorFn } from '@angular/forms';\nimport { type KeyValueTupleFilter, allObjectsAreEqual, type EqualityComparatorFunction, KeyValueTypleValueFilter, type ObjectMap, valuesFromPOJO } from '@dereekb/util';\n\nexport const FIELD_VALUES_ARE_EQUAL_VALIDATION_KEY = 'fieldValuesAreEqual';\n\nexport interface FieldValuesAreEqualValidatorConfig<T extends object = object> {\n /**\n * Keys of the value to match on.\n *\n * If none are defined, then all fields from the control are matched.\n */\n keysFilter?: (keyof T)[];\n\n /**\n * Full filter to use, if defined.\n */\n valuesFilter?: KeyValueTupleFilter<T>;\n\n /**\n * Optional equivalence comparator.\n */\n isEqual?: EqualityComparatorFunction<T>;\n\n /**\n * Custom message for this validator.\n */\n message?: string;\n}\n\n/**\n * Validator for validating all values within an object.\n *\n * This is useful for validating a control group where two or more values are expected to be the same, such as a password and a password verification field.\n *\n * @param config\n * @returns\n */\nexport function fieldValuesAreEqualValidator<T extends object = object>(config: FieldValuesAreEqualValidatorConfig<T> = {}): ValidatorFn {\n const { keysFilter, valuesFilter: inputValuesFilter, isEqual = (a, b) => a === b, message = 'Field values are not equal.' } = config;\n\n const valuesFilter: KeyValueTupleFilter<T, keyof T> = inputValuesFilter ?? {\n valueFilter: KeyValueTypleValueFilter.NONE, // keep all values. Null/undefined should be processed.\n keysFilter\n };\n\n return (control: AbstractControl) => {\n const object: ObjectMap<T> = control.value;\n const values: T[] = valuesFromPOJO(object as T, valuesFilter);\n const isValid = allObjectsAreEqual(values, isEqual);\n\n if (isValid) {\n return null;\n } else {\n return {\n [FIELD_VALUES_ARE_EQUAL_VALIDATION_KEY]: { message }\n };\n }\n };\n}\n","import { type AbstractControl, type ValidationErrors, type ValidatorFn, Validators } from '@angular/forms';\nimport { isNumberDivisibleBy, nearestDivisibleValues } from '@dereekb/util';\n\n/**\n * Merges the use of the min and max validator.\n *\n * @param min\n * @param max\n * @returns\n */\nexport function isInRange(min: number = Number.MIN_SAFE_INTEGER, max: number = Number.MAX_SAFE_INTEGER): ValidatorFn {\n const minFn = Validators.min(min);\n const maxFn = Validators.max(max);\n\n return (control: AbstractControl): ValidationErrors | null => {\n const minError = minFn(control);\n const maxError = maxFn(control);\n\n let errors: ValidationErrors | null = null;\n\n if (minError || maxError) {\n errors = {\n ...minError,\n ...maxError\n };\n }\n\n return errors;\n };\n}\n\nexport const IS_DIVISIBLE_BY_VALIDATION_KEY = 'isDivisibleBy';\n\nexport interface IsDivisibleByError {\n value: number;\n nearest: number;\n divisor: number;\n message: string;\n}\n\n/**\n * Angular Form ValidationFn for checking isDivisibleBy the input divisor.\n *\n * @param divisor\n * @returns\n */\nexport function isDivisibleBy(divisor: number): ValidatorFn {\n if (divisor === 0) {\n throw new Error('Divisior must be greater than zero.');\n }\n\n return (control: AbstractControl): ValidationErrors | null => {\n const value: number | undefined = control.value;\n\n if (value != null && !isNumberDivisibleBy(value, divisor)) {\n const nearest = nearestDivisibleValues(value, divisor);\n return {\n [IS_DIVISIBLE_BY_VALIDATION_KEY]: {\n value,\n divisor,\n nearest,\n message: `Number must by divisible by ${divisor}. The two nearest valid values are ${nearest.nearestFloor} and ${nearest.nearestCeil}.`\n }\n };\n }\n\n return {};\n };\n}\n","import { first, switchMap, map, type Observable, of, catchError } from 'rxjs';\nimport { type AbstractControl, type AsyncValidatorFn } from '@angular/forms';\nimport { asyncPusherCache } from '@dereekb/rxjs';\n\nexport const FIELD_VALUE_IS_AVAILABLE_VALIDATION_KEY = 'fieldValueIsAvailable';\nexport const FIELD_VALUE_IS_AVAILABLE_ERROR_VALIDATION_KEY = 'fieldValueIsAvailableError';\n\nexport type FieldValueIsAvailableValidatorFunction<T> = (value: T) => Observable<boolean>;\n\nexport interface FieldValueIsAvailableValidatorConfig<T> {\n /**\n * How long to wait in between value changes.\n */\n throttle?: number;\n\n /**\n * Returns an observable that checks whether or not the value is currently available.\n *\n * @param value\n */\n readonly checkValueIsAvailable: FieldValueIsAvailableValidatorFunction<T>;\n\n /**\n * Custom message for this validator.\n */\n message?: string;\n}\n\n/**\n * Validator for validating all values within an object.\n *\n * This is useful for validating a control group where two or more values are expected to be the same, such as a password and a password verification field.\n *\n * @param config\n * @returns\n */\nexport function fieldValueIsAvailableValidator<T>(config: FieldValueIsAvailableValidatorConfig<T>): AsyncValidatorFn {\n const { throttle = 400, checkValueIsAvailable, message = 'This value is not available.' } = config;\n\n const pusher = asyncPusherCache<T>({\n throttle\n });\n\n return (control: AbstractControl) =>\n pusher(control.valueChanges)(control.value as T).pipe(\n switchMap((x) => checkValueIsAvailable(x)),\n map((isAvailable) => {\n if (isAvailable) {\n return null;\n } else {\n return {\n [FIELD_VALUE_IS_AVAILABLE_VALIDATION_KEY]: { message }\n };\n }\n }),\n catchError(() =>\n of({\n [FIELD_VALUE_IS_AVAILABLE_ERROR_VALIDATION_KEY]: { message: 'An error occured.' }\n })\n ),\n first()\n );\n}\n","import { type AbstractControl, type ValidationErrors, type ValidatorFn } from '@angular/forms';\nimport { e164PhoneNumberExtensionPair, isE164PhoneNumber as isE164PhoneNumberFunction, isValidPhoneExtensionNumber } from '@dereekb/util';\nimport { INVALID_PHONE_NUMBER_EXTENSION_MESSAGE, INVALID_PHONE_NUMBER_MESSAGE } from '../formly/config/validation';\n\n/**\n * Angular Form ValidationFn for checking isE164PhoneNumber the input divisor.\n *\n * @param divisor\n * @returns\n */\nexport function isE164PhoneNumber(allowExtension: boolean): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const value: string | undefined = control.value;\n\n if (value != null && !isE164PhoneNumberFunction(value, allowExtension)) {\n return {\n [INVALID_PHONE_NUMBER_MESSAGE.name]: true\n };\n }\n\n return {};\n };\n}\n\n/**\n * Angular Form ValidationFn for checking the input is a valid phone extension. Empty values return true.\n *\n * @param divisor\n * @returns\n */\nexport function isPhoneExtension(): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const value: string | number | undefined = control.value;\n\n if (value != null) {\n const asString = value.toString();\n\n if (asString.length > 0 && !isValidPhoneExtensionNumber(asString)) {\n return {\n [INVALID_PHONE_NUMBER_EXTENSION_MESSAGE.name]: true\n };\n }\n }\n\n return {};\n };\n}\n\nexport function isE164PhoneNumberWithValidExtension(): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const value: string | undefined = control.value;\n\n if (value != null) {\n if (isE164PhoneNumberFunction(value, true)) {\n const pair = e164PhoneNumberExtensionPair(value);\n\n if (pair.extension && !isValidPhoneExtensionNumber(pair.extension)) {\n return {\n [INVALID_PHONE_NUMBER_EXTENSION_MESSAGE.name]: true\n };\n }\n } else {\n return {\n [INVALID_PHONE_NUMBER_MESSAGE.name]: true\n };\n }\n }\n\n return {};\n };\n}\n","import { type AbstractControl, type ValidationErrors, type ValidatorFn } from '@angular/forms';\nimport { type ArrayOrValue, type Maybe, type WebsiteDomain, type WebsiteUrlDetails, asArray, isWebsiteUrlWithPrefix, websiteUrlDetails } from '@dereekb/util';\n\nexport const IS_NOT_WEBSITE_URL_VALIDATION_KEY = 'isNotWebsiteUrl';\nexport const IS_NOT_WEBSITE_URL_WITH_PREFIX_VALIDATION_KEY = 'isNotWebsiteUrlWithPrefix';\nexport const IS_NOT_WEBSITE_URL_WITH_EXPECTED_DOMAIN_VALIDATION_KEY = 'isNotWebsiteUrlWithExpectedDomain';\n\nexport interface IsNotWebsiteUrlErrorData {\n readonly value: string;\n readonly isPrefixRequired: boolean;\n readonly message: string;\n}\n\nexport interface IsWebsiteUrlValidatorConfig {\n /**\n * Whether or not to require an http/https prefix.\n *\n * Defaults to true.\n */\n readonly requirePrefix?: Maybe<boolean>;\n /**\n * Valid domains to accept.\n *\n * Defaults to undefined.\n */\n readonly validDomains?: Maybe<ArrayOrValue<WebsiteDomain>>;\n}\n\n/**\n * Angular Form ValidationFn for checking isDivisibleBy the input divisor.\n *\n * @param divisor\n * @returns\n */\nexport function isWebsiteUrlValidator(config?: IsWebsiteUrlValidatorConfig): ValidatorFn {\n const { requirePrefix, validDomains: inputValidDomains } = config ?? {};\n const isPrefixRequired = requirePrefix ?? true;\n const validDomains = asArray(inputValidDomains);\n const validDomainsSet = new Set(validDomains);\n const validateDomains = validDomainsSet.size > 0;\n\n const validateWebsiteValue: (details: WebsiteUrlDetails) => ValidationErrors | null = isPrefixRequired\n ? (details: WebsiteUrlDetails) => {\n return isWebsiteUrlWithPrefix(details.input)\n ? null\n : {\n [IS_NOT_WEBSITE_URL_WITH_PREFIX_VALIDATION_KEY]: {\n value: details.input,\n isPrefixRequired,\n message: `Value is not a website url with an http/https prefix.`\n }\n };\n }\n : (details: WebsiteUrlDetails) => {\n return details.isWebsiteUrl\n ? null\n : {\n [IS_NOT_WEBSITE_URL_VALIDATION_KEY]: {\n value: details.input,\n isPrefixRequired,\n message: `Value is not a valid website url.`\n }\n };\n };\n\n const validateWebsiteDomain: (details: WebsiteUrlDetails) => ValidationErrors | null = (details: WebsiteUrlDetails) => {\n let pass = validDomainsSet.size === 0 ? true : false;\n\n if (details.hasWebsiteDomain && validateDomains) {\n pass = validDomainsSet.has(details.domain);\n }\n\n return pass\n ? null\n : {\n [IS_NOT_WEBSITE_URL_WITH_EXPECTED_DOMAIN_VALIDATION_KEY]: {\n value: details.input,\n isPrefixRequired,\n validDomains,\n message: `Value is not a website url with one of the expected domains: ${validDomains.join(', ')}.`\n }\n };\n };\n\n return (control: AbstractControl): ValidationErrors | null => {\n const value: string | undefined = control.value;\n\n if (value != null) {\n const details = websiteUrlDetails(value);\n\n return {\n ...validateWebsiteValue(details),\n ...validateWebsiteDomain(details)\n };\n }\n\n return {};\n };\n}\n","import { type ValidatorFn } from '@angular/forms';\nimport { concatArrays, type TransformNumberFunctionConfigRef, transformNumberFunction, mapMaybeFunction, DOLLAR_AMOUNT_PRECISION } from '@dereekb/util';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { isDivisibleBy } from '../../../../validator';\nimport { type AttributesFieldConfig, type LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig, type DescriptionFieldConfig, validatorsForFieldConfig, type FieldConfigParsersRef, type FormlyValueParser, type MaterialFormFieldConfig } from '../../field';\n\n// MARK: Number Field\nexport interface NumberFieldNumberConfig {\n readonly min?: number;\n readonly max?: number;\n readonly step?: number;\n readonly enforceStep?: boolean;\n}\n\nexport type NumberFieldInputType = 'number';\n\nexport interface NumberFieldConfig extends LabeledFieldConfig, DescriptionFieldConfig, NumberFieldNumberConfig, AttributesFieldConfig, Partial<TransformNumberFunctionConfigRef>, MaterialFormFieldConfig {\n readonly inputType?: NumberFieldInputType;\n}\n\nexport function numberFieldTransformParser(config: Partial<FieldConfigParsersRef> & Partial<TransformNumberFunctionConfigRef>) {\n const { parsers: inputParsers, transform } = config;\n let parsers: FormlyValueParser[] | undefined;\n\n if (inputParsers) {\n parsers = inputParsers;\n }\n\n if (transform) {\n const transformParser: FormlyValueParser = mapMaybeFunction(transformNumberFunction(transform));\n parsers = concatArrays([transformParser], parsers);\n }\n\n return parsers;\n}\n\nexport function numberField(config: NumberFieldConfig): FormlyFieldConfig {\n const { key, min, max, step, enforceStep, inputType: type = 'number', materialFormField } = config;\n const parsers = numberFieldTransformParser(config);\n\n const validators: ValidatorFn[] = [];\n\n if (step && enforceStep) {\n validators.push(isDivisibleBy(step));\n }\n\n return formlyField({\n key,\n type: 'input',\n ...propsAndConfigForFieldConfig(config, {\n ...materialFormField,\n type,\n min,\n max,\n step\n }),\n ...validatorsForFieldConfig({\n validators\n }),\n parsers\n });\n}\n\n// MARK: Number Slider\nexport interface NumberSliderFieldConfig extends NumberFieldConfig {\n /**\n * Max value. Required for the slider.\n */\n readonly max: number;\n /**\n * Whether or not to show the thumb label while sliding.\n *\n * Defaults to true.\n *\n * Corresponds to \"discrete\" in Material.\n */\n readonly thumbLabel?: boolean;\n /**\n * Whether or not to invert the selection line.\n */\n readonly invertSelectionColoring?: boolean;\n /**\n * Tick interval. If not provided defaults to the step value, if provided. If false, the ticks are disabled.\n *\n * The tick interval is the number of \"steps\" to show between ticks.\n *\n * For example, a tick interval of 5 show a tick every 5 steps. If steps are 10, it will show a tick at every number divisible by 50 (5 * 10).\n */\n readonly tickInterval?: false | number;\n /**\n * Custom display with function for the thumbLabel.\n */\n readonly displayWith?: (value: number) => string;\n}\n\nexport function numberSliderField(config: NumberSliderFieldConfig): FormlyFieldConfig {\n const { key, min, max, step, enforceStep, inputType: type = 'number', materialFormField, thumbLabel: inputThumbLabel, tickInterval: inputTickInterval, invertSelectionColoring: invertedSelectionColoring = false, displayWith } = config;\n const parsers = numberFieldTransformParser(config);\n\n const validators: ValidatorFn[] = [];\n let tickIntervalFromSteps: number | undefined;\n\n if (step) {\n tickIntervalFromSteps = 1;\n\n if (enforceStep) {\n validators.push(isDivisibleBy(step));\n }\n }\n\n const tickInterval: number | undefined = inputTickInterval === false ? undefined : (inputTickInterval ?? tickIntervalFromSteps ?? undefined);\n return formlyField({\n key,\n type: 'slider',\n ...propsAndConfigForFieldConfig(config, {\n ...materialFormField,\n type,\n min,\n max,\n step,\n inverted: invertedSelectionColoring,\n discrete: inputThumbLabel ?? true,\n showTickMarks: Boolean(tickInterval),\n tickInterval,\n displayWith\n }),\n ...validatorsForFieldConfig({\n validators\n }),\n parsers\n });\n}\n\n// MARK: Dollar Amount Field\nexport type DollarAmountFieldConfig = Omit<NumberFieldConfig, 'roundToStep' | 'precision'>;\n\nexport function dollarAmountField(config: DollarAmountFieldConfig) {\n return numberField({ ...config, transform: { ...config.transform, precision: config.transform?.precision ?? DOLLAR_AMOUNT_PRECISION } }); // TODO: Add wrapper addon, addonLeft: { text: '$' }\n}\n","import { FormlyMaterialModule } from '@ngx-formly/material';\nimport { FormlyMatSliderModule } from '@ngx-formly/material/slider';\nimport { NgModule } from '@angular/core';\n\nconst importsAndExports = [FormlyMaterialModule, FormlyMatSliderModule];\n\n@NgModule({\n imports: importsAndExports,\n exports: importsAndExports\n})\nexport class DbxFormFormlyNumberFieldModule {}\n","import { Component, OnInit, OnDestroy, ChangeDetectionStrategy } from '@angular/core';\nimport { FieldType } from '@ngx-formly/material'; // extend FieldType from Material, not core!\nimport { FieldTypeConfig, FormlyFieldProps } from '@ngx-formly/core';\nimport { isPhoneExtension } from '../../../../validator/phone';\nimport { E164PhoneNumber, E164PhoneNumberExtensionPair, Maybe, e164PhoneNumberExtensionPair, e164PhoneNumberFromE164PhoneNumberExtensionPair, objectHasNoKeys } from '@dereekb/util';\nimport { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { SubscriptionObject } from '@dereekb/rxjs';\nimport { combineLatest, distinctUntilChanged, map, startWith } from 'rxjs';\nimport { CommonModule } from '@angular/common';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\nimport { FormlyMatFormFieldModule } from '@ngx-formly/material/form-field';\nimport { NgxMatInputTelComponent } from 'ngx-mat-input-tel';\n\nexport interface InternationalPhoneFormlyFieldProps extends FormlyFieldProps {\n readonly preferredCountries?: Maybe<string[]>;\n readonly onlyCountries?: Maybe<string[]>;\n /**\n * Whether or not to enable the search feature. True by default.\n */\n readonly enableSearch?: boolean;\n /**\n * Whether or not to allow adding an extension. False by default.\n */\n readonly allowExtension?: boolean;\n}\n\nexport const DEFAULT_PREFERRED_COUNTRIES = ['us'];\n\n@Component({\n templateUrl: 'phone.field.component.html',\n imports: [CommonModule, MatInputModule, MatFormFieldModule, FormsModule, ReactiveFormsModule, MatIconModule, FlexLayoutModule, FormlyMatFormFieldModule, NgxMatInputTelComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxPhoneFieldComponent extends FieldType<FieldTypeConfig<InternationalPhoneFormlyFieldProps>> implements OnInit, OnDestroy {\n readonly inputSync = new SubscriptionObject();\n readonly outputSync = new SubscriptionObject();\n readonly extensionErrorSync = new SubscriptionObject();\n readonly phoneErrorSync = new SubscriptionObject();\n\n readonly phoneCtrl = new FormControl<string>('');\n readonly extensionCtrl = new FormControl<string>('', {\n validators: [isPhoneExtension()]\n });\n\n readonly inputFormGroup = new FormGroup({\n phone: this.phoneCtrl,\n extension: this.extensionCtrl\n });\n\n get enableSearch(): boolean {\n return this.props.enableSearch ?? true;\n }\n\n get preferredCountries(): string[] {\n return this.props.preferredCountries ?? DEFAULT_PREFERRED_COUNTRIES;\n }\n\n get onlyCountries(): string[] {\n return this.props.onlyCountries ?? [];\n }\n\n get allowExtension(): boolean {\n return this.props.allowExtension ?? false;\n }\n\n ngOnInit(): void {\n this.inputSync.subscription = this.formControl.valueChanges.pipe(startWith(this.formControl.value), distinctUntilChanged()).subscribe((inputValue) => {\n let phone: Maybe<string>;\n let extension: Maybe<string>;\n\n if (inputValue) {\n const pair = e164PhoneNumberExtensionPair(inputValue);\n phone = pair.number;\n extension = pair.extension;\n }\n\n // do not clear/reset if phone is undefined and the phone value is currently null\n if (phone || (!phone && this.phoneCtrl.value !== null)) {\n this.phoneCtrl.setValue(phone || '');\n this.extensionCtrl.setValue(extension || '');\n }\n });\n\n this.outputSync.subscription = combineLatest([this.phoneCtrl.valueChanges.pipe(distinctUntilChanged()), this.extensionCtrl.valueChanges.pipe(startWith(this.extensionCtrl.value), distinctUntilChanged())])\n .pipe(\n map(([phone, extension]) => {\n if (phone) {\n if (this.allowExtension) {\n return e164PhoneNumberFromE164PhoneNumberExtensionPair({\n number: phone as E164PhoneNumber,\n extension\n } as E164PhoneNumberExtensionPair);\n } else {\n return phone;\n }\n } else {\n return undefined;\n }\n }),\n distinctUntilChanged()\n )\n .subscribe((x) => {\n this.formControl.setValue(x);\n });\n\n /*\n * The phoneCtrl's errors are being used to drive the error matcher for this. Sync any invalid states with errors to phoneCtrl.\n * PhoneCtrl updates when the input is updated so it works.\n */\n this.extensionErrorSync.subscription = this.extensionCtrl.statusChanges.subscribe((x) => {\n if (x === 'INVALID') {\n this.phoneCtrl.setErrors(this.formControl.errors, { emitEvent: true });\n }\n });\n\n // sync any phoneCtrl errors with the errors of the form control.\n this.phoneErrorSync.subscription = this.inputFormGroup.statusChanges.subscribe((x) => {\n const errors = { ...this.phoneCtrl.errors, ...this.extensionCtrl.errors };\n this.formControl.setErrors(objectHasNoKeys(errors) ? null : errors, { emitEvent: true });\n });\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this.inputSync.destroy();\n this.outputSync.destroy();\n this.extensionErrorSync.destroy();\n this.phoneErrorSync.destroy();\n }\n}\n","<div class=\"dbx-form-phone-field\" [formGroup]=\"inputFormGroup\">\n <ngx-mat-input-tel name=\"phone\" class=\"dbx-form-phone-field-phone-content\" [required]=\"required\" [enableSearch]=\"enableSearch\" [preferredCountries]=\"preferredCountries\" [enablePlaceholder]=\"false\" [formControl]=\"phoneCtrl\"></ngx-mat-input-tel>\n @if (allowExtension) {\n <div class=\"dbx-form-phone-field-extension-content\">\n <span class=\"dbx-hint dbx-button-spacer\">Ext.</span>\n <input name=\"phone-extension\" class=\"dbx-form-phone-field-extension-input\" placeholder=\"123\" minlength=\"0\" maxlength=\"6\" #extensionInput [formControl]=\"extensionCtrl\" />\n </div>\n }\n</div>\n","import { NgModule } from '@angular/core';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxPhoneFieldComponent } from './phone.field.component';\n\nconst importsAndExports = [DbxPhoneFieldComponent];\n\n@NgModule({\n imports: [\n ...importsAndExports,\n FormlyModule.forChild({\n types: [{ name: 'intphone', component: DbxPhoneFieldComponent, wrappers: ['form-field'] }]\n })\n ],\n exports: importsAndExports\n})\nexport class DbxFormFormlyPhoneFieldModule {}\n","import { concatArrays, mapMaybeFunction, transformStringFunction, type TransformStringFunctionConfig, type TransformStringFunctionConfigRef } from '@dereekb/util';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type AttributesFieldConfig, type LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig, type DescriptionFieldConfig, type FormlyValueParser, type FieldConfigParsersRef, type MaterialFormFieldConfig } from '../../field';\n\nexport interface TextFieldLengthConfig {\n minLength?: number;\n maxLength?: number;\n}\n\nexport interface TextFieldPatternConfig {\n pattern?: string | RegExp;\n}\n\nexport type TextFieldInputType = 'text' | 'password' | 'email';\n\nexport interface TextFieldConfig extends LabeledFieldConfig, DescriptionFieldConfig, TextFieldPatternConfig, TextFieldLengthConfig, AttributesFieldConfig, Partial<TransformStringFunctionConfigRef>, MaterialFormFieldConfig {\n inputType?: TextFieldInputType;\n transform?: TransformStringFunctionConfig;\n}\n\nexport function textFieldTransformParser(config: Partial<FieldConfigParsersRef> & Partial<TransformStringFunctionConfigRef>) {\n const { parsers: inputParsers, transform } = config;\n let parsers: FormlyValueParser[] | undefined;\n\n if (inputParsers) {\n parsers = inputParsers;\n }\n\n if (transform) {\n const transformParser: FormlyValueParser = mapMaybeFunction(transformStringFunction(transform));\n parsers = concatArrays([transformParser], parsers);\n }\n\n return parsers;\n}\n\nexport function textField(config: TextFieldConfig): FormlyFieldConfig {\n const { transform, key, pattern, minLength, maxLength, inputType: type = 'text', materialFormField } = config;\n const parsers = textFieldTransformParser(config);\n\n return formlyField({\n key,\n type: 'input',\n ...propsAndConfigForFieldConfig(config, {\n ...materialFormField,\n type,\n minLength,\n maxLength,\n pattern\n }),\n parsers\n });\n}\n\nexport interface TextAreaFieldConfig extends LabeledFieldConfig, DescriptionFieldConfig, TextFieldPatternConfig, TextFieldLengthConfig, AttributesFieldConfig, Partial<TransformStringFunctionConfigRef>, MaterialFormFieldConfig {\n rows?: number;\n}\n\nexport function textAreaField(config: TextAreaFieldConfig): FormlyFieldConfig {\n const { key, rows = 3, pattern, minLength, maxLength, materialFormField } = config;\n const parsers = textFieldTransformParser(config);\n\n return formlyField({\n key,\n type: 'textarea',\n ...propsAndConfigForFieldConfig(config, {\n ...materialFormField,\n rows,\n minLength,\n maxLength,\n pattern\n }),\n parsers\n });\n}\n","import { type DbxFormSectionConfig } from '../../wrapper/section.wrapper.component';\nimport { sectionWrapper, flexLayoutWrapper } from '../../wrapper/wrapper';\nimport { textField, type TextFieldConfig } from '../text/text.field';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig, validatorsForFieldConfig } from '../../field';\nimport { type InternationalPhoneFormlyFieldProps } from './phone.field.component';\nimport { repeatArrayField, type RepeatArrayFieldConfig } from '../array/array.field';\nimport { isE164PhoneNumber } from '../../../../validator/phone';\n\nexport interface InternationalPhoneFieldConfig extends LabeledFieldConfig, InternationalPhoneFormlyFieldProps {}\n\nexport function phoneField(config: Partial<InternationalPhoneFieldConfig> = {}): FormlyFieldConfig<InternationalPhoneFormlyFieldProps> {\n const { key = 'phone', label = 'Phone Number', preferredCountries, enableSearch, onlyCountries, allowExtension: inputAllowExtension } = config;\n const allowExtension = inputAllowExtension ?? false;\n\n const fieldConfig = formlyField({\n key,\n type: 'intphone',\n ...propsAndConfigForFieldConfig(config, {\n label,\n preferredCountries,\n onlyCountries,\n enableSearch,\n allowExtension\n }),\n ...validatorsForFieldConfig({\n validators: [isE164PhoneNumber(allowExtension)]\n })\n });\n\n return fieldConfig;\n}\n\nexport interface WrappedPhoneAndLabelFieldConfig {\n readonly phoneField?: Partial<InternationalPhoneFieldConfig>;\n readonly labelField?: TextFieldConfig;\n}\n\n/**\n * Puts a phone and\n * @param param0\n * @returns\n */\nexport function wrappedPhoneAndLabelField({ phoneField: phone, labelField: label }: WrappedPhoneAndLabelFieldConfig = {}): FormlyFieldConfig {\n return flexLayoutWrapper(\n [\n {\n field: phoneField(phone),\n size: 2\n },\n {\n field: textField({\n key: 'label',\n label: 'Label',\n autocomplete: 'phone-label',\n ...label\n }),\n size: 4\n }\n ],\n { relative: true }\n );\n}\n\nexport interface PhoneAndLabelFieldSectionConfig extends DbxFormSectionConfig, WrappedPhoneAndLabelFieldConfig {\n readonly key?: string;\n}\n\nexport function phoneAndLabelSectionField({ key, header = 'Phone Number', hint, phoneField, labelField }: PhoneAndLabelFieldSectionConfig = {}): FormlyFieldConfig {\n return sectionWrapper(\n {\n key,\n fieldGroup: [wrappedPhoneAndLabelField({ phoneField, labelField })]\n },\n {\n header,\n hint\n }\n );\n}\n\nexport interface PhoneListFieldConfig extends Omit<RepeatArrayFieldConfig, 'repeatFieldGroup'> {\n phoneAndLabel?: WrappedPhoneAndLabelFieldConfig;\n repeatFieldGroup?: FormlyFieldConfig[];\n}\n\nexport function phoneListField(repeatConfig: Partial<PhoneListFieldConfig> = {}): FormlyFieldConfig {\n const { key = 'phones', label = 'Phone Numbers', addText = 'Add Phone Number', removeText = 'Remove Phone Number', repeatFieldGroup, phoneAndLabel } = repeatConfig;\n\n return repeatArrayField({\n ...repeatConfig,\n key,\n label,\n addText,\n removeText,\n repeatFieldGroup: repeatFieldGroup ?? [wrappedPhoneAndLabelField(phoneAndLabel)]\n });\n}\n","import { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { Validators, type AbstractControl } from '@angular/forms';\nimport { type TextFieldConfig, textField } from './text.field';\nimport { type LabeledFieldConfig, type DescriptionFieldConfig, validatorsForFieldConfig } from '../../field';\nimport { LAT_LNG_PATTERN, US_STATE_CODE_STRING_REGEX, ZIP_CODE_STRING_REGEX } from '@dereekb/util';\nimport { ADDRESS_CITY_MAX_LENGTH, ADDRESS_STATE_CODE_MAX_LENGTH, ADDRESS_STATE_MAX_LENGTH, ADDRESS_COUNTRY_MAX_LENGTH, ADDRESS_ZIP_MAX_LENGTH } from '@dereekb/model';\n\nexport const PHONE_LABEL_MAX_LENGTH = 100;\n\nexport const LABEL_STRING_MAX_LENGTH = 100;\nexport const SEARCH_STRING_MAX_LENGTH = 100;\n\n// MARK: Name Field\nexport function nameField(config: Partial<TextFieldConfig> = {}): FormlyFieldConfig {\n const { key = 'name', label = 'Name', placeholder = 'John Doe', required = false, minLength, maxLength, attributes } = config;\n\n return textField({\n ...config,\n key,\n label,\n placeholder,\n required,\n minLength,\n maxLength,\n attributes\n });\n}\n\n// MARK: Email Field\nexport interface EmailFieldConfig extends Partial<LabeledFieldConfig>, DescriptionFieldConfig {\n readonly rows?: number;\n}\n\nexport function emailField(config: EmailFieldConfig = {}): FormlyFieldConfig {\n const { key = 'email', label = 'Email Address', placeholder = 'you@example.com' } = config;\n const emailFieldConfig = textField({\n ...config,\n key,\n label,\n placeholder,\n inputType: 'email'\n });\n\n emailFieldConfig.validators = {\n email: {\n expression: (c: AbstractControl) => !Validators.email(c),\n message: () => `Not a valid email address.`\n }\n };\n\n return emailFieldConfig;\n}\n\n// MARK: City Field\nexport type CityFieldConfig = Partial<TextFieldConfig>;\n\nexport function cityField(config: CityFieldConfig = {}): FormlyFieldConfig {\n const { key = 'city', placeholder = '', label = 'City', autocomplete = 'city', maxLength = ADDRESS_CITY_MAX_LENGTH, required = false } = config;\n return textField({\n ...config,\n key,\n placeholder,\n label,\n autocomplete,\n required,\n maxLength\n });\n}\n\n// MARK: State Field\nexport interface StateFieldConfig extends Partial<TextFieldConfig> {\n readonly asCode?: boolean;\n}\n\nexport function stateField(config: StateFieldConfig = {}): FormlyFieldConfig {\n const { asCode = false, pattern = asCode ? US_STATE_CODE_STRING_REGEX : undefined, key = 'state', placeholder = '', label = 'State', autocomplete = 'state', maxLength = asCode ? ADDRESS_STATE_CODE_MAX_LENGTH : ADDRESS_STATE_MAX_LENGTH, transform, required = false } = config;\n return textField({\n ...config,\n key,\n placeholder,\n label,\n pattern,\n autocomplete,\n required,\n maxLength,\n transform: {\n ...transform,\n toUppercase: asCode || transform?.toUppercase\n }\n });\n}\n\n// MARK: Country Field\nexport type CountryFieldConfig = Partial<TextFieldConfig>;\n\nexport function countryField(config: CountryFieldConfig = {}): FormlyFieldConfig {\n const { key = 'country', placeholder = '', label = 'Country', autocomplete = 'country', maxLength = ADDRESS_COUNTRY_MAX_LENGTH, required = false } = config;\n return textField({\n ...config,\n key,\n placeholder,\n label,\n autocomplete,\n required,\n maxLength\n });\n}\n\n// MARK: Zip Code Field\nexport type ZipCodeFieldConfig = Partial<TextFieldConfig>;\n\nexport function zipCodeField(config: ZipCodeFieldConfig = {}): FormlyFieldConfig {\n const { key = 'zip', placeholder = '', label = 'Zip Code', autocomplete = 'postal-code', pattern = ZIP_CODE_STRING_REGEX, maxLength = ADDRESS_ZIP_MAX_LENGTH, required = false } = config;\n return textField({\n ...config,\n key,\n placeholder,\n label,\n pattern,\n autocomplete,\n required,\n maxLength\n });\n}\n\n// MARK: LatLng Text Field\nexport const DEFAULT_LAT_LNG_TEXT_FIELD_PLACEHOLDER = '12.345,-67.8910';\nexport const DEFAULT_LAT_LNG_TEXT_FIELD_PATTERN_MESSAGE = `Invalid/unknown coordinates`;\n\nexport function latLngTextField({ key = 'latLng' }: Partial<TextFieldConfig> = {}): FormlyFieldConfig {\n const field = {\n ...textField({\n key,\n label: 'Coordinates',\n placeholder: DEFAULT_LAT_LNG_TEXT_FIELD_PLACEHOLDER,\n pattern: LAT_LNG_PATTERN,\n autocomplete: false\n }),\n ...validatorsForFieldConfig({\n messages: {\n pattern: DEFAULT_LAT_LNG_TEXT_FIELD_PATTERN_MESSAGE\n }\n })\n };\n\n return field;\n}\n","import { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { textField, type TextFieldConfig } from './text.field';\nimport { cityField, type CityFieldConfig, countryField, type CountryFieldConfig, stateField, type StateFieldConfig, zipCodeField, type ZipCodeFieldConfig } from './text.additional.field';\nimport { flexLayoutWrapper, sectionWrapper } from '../../wrapper/wrapper';\nimport { type FieldConfig } from '../../field';\nimport { repeatArrayField } from '../array/array.field';\nimport { type DbxFormSectionConfig } from '../../wrapper/section.wrapper.component';\nimport { ADDRESS_LINE_MAX_LENGTH } from '@dereekb/model';\n\n// MARK: Address Config\nexport interface AddressFormlyFieldsConfig {\n readonly line1Field?: CityFieldConfig;\n readonly line2Field?: CityFieldConfig;\n readonly cityField?: CityFieldConfig;\n readonly stateField?: StateFieldConfig;\n readonly zipCodeField?: ZipCodeFieldConfig;\n readonly countryField?: CountryFieldConfig;\n /**\n * Whether or not to make required fields required.\n *\n * True by default.\n */\n readonly required?: boolean;\n /**\n * Whether or not to include the second address line.\n *\n * True by default.\n */\n readonly includeLine2?: boolean;\n /**\n * Whether or not to include the country.\n *\n * True by default.\n */\n readonly includeCountry?: boolean;\n}\n\nexport interface AddressLineFieldConfig extends Partial<TextFieldConfig> {\n readonly line?: 0 | 1 | 2;\n}\n\nexport function addressLineField(config: AddressLineFieldConfig = {}): FormlyFieldConfig {\n const { line = 1 } = config;\n const lineCode = Math.max(1, line); // minimum of line 1\n\n const { key = `line${lineCode}`, placeholder = '', label = line ? `Line ${line}` : 'Street', autocomplete = `address-line${lineCode}`, maxLength = ADDRESS_LINE_MAX_LENGTH, required = false } = config;\n return textField({\n ...config,\n key,\n placeholder,\n label,\n autocomplete,\n required,\n maxLength\n });\n}\n\nexport function addressFormlyFields(config: AddressFormlyFieldsConfig = {}): FormlyFieldConfig[] {\n const { required = true, includeLine2 = true, includeCountry = true } = config;\n\n const singleLineFields = [\n {\n field: cityField({ required, ...config.cityField })\n },\n {\n field: stateField({ required, ...config.stateField })\n },\n {\n field: zipCodeField({ required, ...config.zipCodeField })\n }\n ];\n\n if (includeCountry) {\n singleLineFields.push({\n field: countryField({ required, ...config.countryField })\n });\n }\n\n let lines: FormlyFieldConfig[];\n\n if (includeLine2) {\n lines = [addressLineField({ required, ...config.line1Field, line: 1 }), addressLineField({ ...config.line2Field, line: 2 })];\n } else {\n lines = [addressLineField({ required, ...config.line1Field, line: 0 })];\n }\n\n return [...lines, flexLayoutWrapper(singleLineFields, { size: 1, relative: true })];\n}\n\n// MARK: Address\nexport interface AddressFieldConfig extends Readonly<FieldConfig>, DbxFormSectionConfig, AddressFormlyFieldsConfig {}\n\nexport function addressField(config: Partial<AddressFieldConfig> = {}): FormlyFieldConfig {\n const { key = 'address', header = 'Address', hint, required = false } = config;\n\n return sectionWrapper(\n {\n ...config,\n key,\n fieldGroup: addressFormlyFields(config),\n required\n },\n {\n ...config,\n header,\n hint\n }\n );\n}\n\n// MARK: Address List\nexport interface AddressListFieldConfig extends Readonly<FieldConfig>, AddressFormlyFieldsConfig {\n readonly maxAddresses?: number;\n}\n\nexport function addressListField(config: Partial<AddressListFieldConfig> = {}): FormlyFieldConfig {\n const { key = 'addresses', required = false, maxAddresses = 6 } = config;\n return repeatArrayField({\n key,\n required,\n label: 'Addresses',\n labelForField: 'Address',\n addText: 'Add Address',\n removeText: 'Remove Address',\n maxLength: maxAddresses,\n repeatFieldGroup: addressFormlyFields(config)\n });\n}\n","import { FormlyMaterialModule } from '@ngx-formly/material';\nimport { NgModule } from '@angular/core';\nimport { DbxFormFormlyWrapperModule } from '../../wrapper/wrapper.module';\nimport { FormlyMatInputModule } from '@ngx-formly/material/input';\nimport { DbxFormFormlyArrayFieldModule } from '../array/array.field.module';\n\nconst importsAndExports = [DbxFormFormlyArrayFieldModule, FormlyMaterialModule, FormlyMatInputModule, DbxFormFormlyWrapperModule];\n\n@NgModule({\n imports: importsAndExports,\n exports: importsAndExports\n})\nexport class DbxFormFormlyTextFieldModule {}\n","import { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type LabeledFieldConfig, formlyField } from '../field';\n\nexport type HiddenFieldConfig = Pick<LabeledFieldConfig, 'key' | 'required'>;\n\nexport function hiddenField({ key, required = false }: HiddenFieldConfig): FormlyFieldConfig {\n return formlyField({\n key,\n props: { required }\n });\n}\n","import { DbxFormFormlyTextEditorFieldModule } from './texteditor/texteditor.field.module';\nimport { NgModule } from '@angular/core';\nimport { DbxFormFormlyChecklistItemFieldModule } from './checklist/checklist.item.field.module';\nimport { DbxFormFormlyComponentFieldModule } from './component/component.field.module';\nimport { DbxFormFormlyWrapperModule } from './wrapper/wrapper.module';\n\nconst importsAndExports = [DbxFormFormlyChecklistItemFieldModule, DbxFormFormlyComponentFieldModule, DbxFormFormlyTextEditorFieldModule, DbxFormFormlyWrapperModule];\n\n@NgModule({\n imports: importsAndExports,\n exports: importsAndExports\n})\nexport class DbxFormFormlyFieldModule {}\n","import { type Maybe } from '@dereekb/util';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type MaterialFormFieldConfig, textField } from '../field';\n\nexport interface DbxFormSearchFormFieldsValue {\n readonly search: string;\n}\n\nexport interface DbxFormSearchFormFieldsConfig extends MaterialFormFieldConfig {\n readonly label?: string;\n readonly placeholder?: string;\n}\n\nexport function dbxFormSearchFormFields(config: Maybe<DbxFormSearchFormFieldsConfig>): FormlyFieldConfig[] {\n const { label, placeholder = 'Search', materialFormField } = config || {};\n\n return [\n textField({\n key: 'search',\n label,\n placeholder,\n autocomplete: false,\n materialFormField: {\n ...materialFormField,\n hideLabel: !label\n }\n })\n ];\n}\n","import { filterMaybe, MaybeObservableOrValue, maybeValueFromObservableOrValue } from '@dereekb/rxjs';\nimport { Observable, shareReplay, distinctUntilChanged } from 'rxjs';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { OnInit, Directive, inject, input, effect } from '@angular/core';\nimport { DbxFormlyContext } from './formly.context';\nimport { type Maybe } from '@dereekb/util';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { DbxFormDisabledKey } from '../form/form';\nimport { cleanSubscription } from '@dereekb/dbx-core';\n\n/**\n * Abstract component for wrapping a DbxFormlyContext.\n *\n * The implementing component should use provideFormlyContext() to provide the DbxFormlyContext specific to this directive. The context is injected using only self.\n */\n@Directive()\nexport abstract class AbstractFormlyFormDirective<T> {\n readonly context = inject(DbxFormlyContext<T>, { self: true });\n\n readonly disabled = input<boolean>(false);\n\n protected readonly _disabledEffect = effect(() => this.context.setDisabled(undefined, this.disabled()));\n\n // Utility Functions\n getValue(): Observable<T> {\n return this.context.getValue();\n }\n\n setValue(value: Partial<T>): void {\n this.context.setValue(value);\n }\n\n resetForm(): void {\n this.context.resetForm();\n }\n\n clearValue(): void {\n this.setValue({});\n }\n\n setDisabled(key?: DbxFormDisabledKey, disabled?: boolean): void {\n this.context.setDisabled(key, disabled);\n }\n}\n\n/**\n * Abstract component for wrapping a form.\n */\n@Directive()\nexport abstract class AbstractSyncFormlyFormDirective<T> extends AbstractFormlyFormDirective<T> implements OnInit {\n abstract fields: FormlyFieldConfig[];\n\n ngOnInit(): void {\n this.context.fields = this.fields;\n }\n}\n\n/**\n * Abstract component for wrapping an asyncrhronously-configured form.\n */\n@Directive()\nexport abstract class AbstractAsyncFormlyFormDirective<T> extends AbstractFormlyFormDirective<T> implements OnInit {\n /**\n * Used to provide fields to the context.\n */\n abstract readonly fields$: Observable<Maybe<FormlyFieldConfig[]>>;\n\n protected readonly _fieldSub = cleanSubscription();\n\n ngOnInit(): void {\n // fields$ is only available after initialization.\n this._fieldSub.setSub(\n this.fields$.pipe(distinctUntilChanged()).subscribe((fields) => {\n this.context.fields = fields;\n })\n );\n }\n}\n\n@Directive()\nexport abstract class AbstractConfigAsyncFormlyFormDirective<T, C> extends AbstractAsyncFormlyFormDirective<T> {\n readonly config = input<MaybeObservableOrValue<C>>(undefined);\n\n readonly currentConfig$ = toObservable(this.config).pipe(maybeValueFromObservableOrValue());\n readonly config$ = this.currentConfig$.pipe(filterMaybe(), shareReplay(1));\n}\n","import { NgModule } from '@angular/core';\nimport { provideFormlyContext } from './formly.context';\nimport { DbxFormlyComponent } from './formly.form.component';\n\n/**\n * Default template for a view that extends AbstractFormlyFormDirective.\n */\nexport const DBX_FORMLY_FORM_COMPONENT_TEMPLATE = `<dbx-formly></dbx-formly>`;\n\n/**\n * Default providers for a view that extends AbstractFormlyFormDirective.\n */\nexport const dbxFormlyFormComponentProviders = provideFormlyContext;\n\nconst dbxFormlyFormComponentImports = [DbxFormlyComponent];\n\n/**\n * Default imports module for a view that extends AbstractFormlyFormDirective.\n */\n@NgModule({\n imports: dbxFormlyFormComponentImports,\n exports: dbxFormlyFormComponentImports\n})\nexport class DbxFormlyFormComponentImportsModule {}\n","import { Component, output } from '@angular/core';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { map, Observable } from 'rxjs';\nimport { AbstractConfigAsyncFormlyFormDirective } from '../formly.directive';\nimport { dbxFormSearchFormFields, DbxFormSearchFormFieldsConfig, DbxFormSearchFormFieldsValue } from './form.form';\nimport { DbxFormlyFormComponentImportsModule, dbxFormlyFormComponentProviders } from '../formly.component.template';\nimport { DbxFormValueChangeDirective } from '../../form/io/form.change.directive';\n\n@Component({\n selector: 'dbx-form-search-form',\n template: `\n <dbx-formly (dbxFormValueChange)=\"searchChanged($event)\"></dbx-formly>\n `,\n providers: dbxFormlyFormComponentProviders(),\n imports: [DbxFormlyFormComponentImportsModule, DbxFormValueChangeDirective],\n standalone: true,\n host: {\n class: 'd-block dbx-form-search-form'\n }\n})\nexport class DbxFormSearchFormComponent extends AbstractConfigAsyncFormlyFormDirective<DbxFormSearchFormFieldsValue, DbxFormSearchFormFieldsConfig> {\n readonly search = output<string>();\n\n readonly fields$: Observable<FormlyFieldConfig[]> = this.currentConfig$.pipe(map(dbxFormSearchFormFields));\n\n searchChanged(value: DbxFormSearchFormFieldsValue) {\n this.search.emit(value.search ?? '');\n }\n}\n","import { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type FieldValueIsAvailableValidatorConfig, fieldValueIsAvailableValidator } from '../../validator/available';\nimport { textField, type TextFieldConfig } from '../field/value/text/text.field';\nimport { workingWrapper } from '../field/wrapper/wrapper';\n\nexport interface TextAvailableFieldConfig extends TextFieldConfig, Omit<FieldValueIsAvailableValidatorConfig<string>, 'message'> {\n readonly isNotAvailableErrorMessage?: string;\n}\n\nexport function textIsAvailableField(config: TextAvailableFieldConfig): FormlyFieldConfig {\n const field = textField(config);\n\n field.asyncValidators = {\n validation: [\n {\n expression: fieldValueIsAvailableValidator({\n ...config,\n message: config?.isNotAvailableErrorMessage\n })\n }\n ]\n };\n\n return workingWrapper(field, {});\n}\n","import { NgModule } from '@angular/core';\nimport { DbxFormFormlyTextFieldModule } from '../field/value/text/text.field.module';\nimport { DbxFormFormlyWrapperModule } from '../field/wrapper/wrapper.module';\n\nconst importsAndExports = [DbxFormFormlyTextFieldModule, DbxFormFormlyWrapperModule];\n\n@NgModule({\n imports: importsAndExports,\n exports: importsAndExports\n})\nexport class DbxFormTextAvailableFieldModule {}\n","import { type TextFieldConfig, textField } from '../field/value/text/text.field';\nimport { type EmailFieldConfig, emailField } from '../field/value/text/text.additional.field';\nimport { fieldValuesAreEqualValidator } from '../../validator/field';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { capitalizeFirstLetter, type Maybe } from '@dereekb/util';\n\n/**\n * Convenience interface for the password parameters configuration for a TextPasswordField.\n */\nexport type TextPasswordFieldPasswordParameters = Partial<Pick<TextFieldConfig, 'maxLength' | 'minLength' | 'pattern'>>;\n\n/**\n * textPasswordField() configuration.\n */\nexport interface TextPasswordFieldConfig extends Omit<TextFieldConfig, 'inputType' | 'key'>, Partial<Pick<TextFieldConfig, 'key' | 'materialFormField'>> {}\n\n/**\n * Configured simple text password field.\n *\n * @param config\n * @returns\n */\nexport function textPasswordField(config?: TextPasswordFieldConfig): FormlyFieldConfig {\n return textField({\n key: 'password',\n ...config,\n label: config?.label ?? 'Password',\n inputType: 'password',\n required: true\n });\n}\n\n/**\n * Configured verify field for a password.\n *\n * @param config\n * @returns\n */\nexport function textVerifyPasswordField(config?: TextPasswordFieldConfig): FormlyFieldConfig {\n return textPasswordField({\n key: 'verifyPassword',\n label: 'Verify Password',\n ...config,\n required: true\n });\n}\n\nexport interface TextPasswordWithVerifyFieldConfig {\n readonly password?: TextPasswordFieldConfig;\n readonly verifyPassword?: TextPasswordFieldConfig;\n}\n\nexport function textPasswordWithVerifyFieldGroup(config: TextPasswordWithVerifyFieldConfig): FormlyFieldConfig {\n const passwordFieldConfig = textPasswordField(config.password);\n const verifyPasswordFieldKey = config.verifyPassword?.key ?? `verify${capitalizeFirstLetter(String(passwordFieldConfig.key))}`;\n const verifyPasswordField = textVerifyPasswordField({\n ...config.password,\n ...config.verifyPassword,\n label: config.verifyPassword?.label ?? `Verify ${passwordFieldConfig.props?.label}`,\n key: verifyPasswordFieldKey\n });\n\n const validators = {\n validation: [\n {\n errorPath: verifyPasswordFieldKey,\n expression: fieldValuesAreEqualValidator({ keysFilter: [passwordFieldConfig.key, verifyPasswordField.key] as string[], message: 'The passwords do not match.' })\n }\n ]\n };\n\n const groupFieldConfig: FormlyFieldConfig = {\n validators,\n fieldGroup: [passwordFieldConfig, verifyPasswordField]\n };\n\n return groupFieldConfig;\n}\n\nexport interface UsernameLoginFieldUsernameConfig {\n readonly email?: Omit<EmailFieldConfig, 'key'>;\n readonly username?: Omit<TextFieldConfig, 'key'>;\n}\n\nexport type UsernameLoginFieldUsernameConfigInput = 'email' | 'username' | UsernameLoginFieldUsernameConfig;\n\n/**\n * usernamePasswordLoginFields() configuration.\n */\nexport interface UsernameLoginFieldsConfig {\n readonly username: UsernameLoginFieldUsernameConfigInput;\n readonly password?: TextPasswordFieldConfig;\n readonly verifyPassword?: Maybe<boolean | TextPasswordFieldConfig>;\n}\n\n/**\n * Value type exported by usernameLoginFields()\n */\nexport interface DefaultUsernameLoginFieldsValue extends DefaultUsernameLoginFieldValue {\n readonly password: string;\n readonly verifyPassword?: string;\n}\n\n/**\n * Template for login field that takes in a username and password.\n *\n * @param param0\n * @returns\n */\nexport function usernamePasswordLoginFields({ username, password, verifyPassword }: UsernameLoginFieldsConfig): FormlyFieldConfig[] {\n const usernameField = usernameLoginField(username);\n const passwordField = verifyPassword ? textPasswordWithVerifyFieldGroup({ password, verifyPassword: verifyPassword === true ? undefined : verifyPassword }) : textPasswordField(password);\n\n return [usernameField, passwordField];\n}\n\n/**\n * Value type exported by usernameLoginField()\n */\nexport interface DefaultUsernameLoginFieldValue {\n readonly username: string;\n}\n\nexport function usernameLoginField(username: UsernameLoginFieldUsernameConfigInput): FormlyFieldConfig {\n let usernameField: FormlyFieldConfig;\n let usernameFieldConfig: UsernameLoginFieldUsernameConfig = username as UsernameLoginFieldUsernameConfig;\n\n const defaultUsernameFieldConfig = { key: 'username', required: true };\n\n if (typeof username === 'string') {\n if (username === 'email') {\n usernameFieldConfig = {\n email: defaultUsernameFieldConfig\n };\n } else {\n usernameFieldConfig = {\n username: defaultUsernameFieldConfig\n };\n }\n }\n\n if (usernameFieldConfig.email) {\n usernameField = emailField({ ...usernameFieldConfig.email, ...defaultUsernameFieldConfig });\n } else {\n usernameField = textField({ ...usernameFieldConfig.username, ...defaultUsernameFieldConfig });\n }\n\n return usernameField;\n}\n","import { NgModule } from '@angular/core';\nimport { DbxFormFormlyTextFieldModule } from '../field/value/text/text.field.module';\n\nconst importsAndExports = [DbxFormFormlyTextFieldModule];\n\n@NgModule({\n imports: importsAndExports,\n exports: importsAndExports\n})\nexport class DbxFormLoginFieldModule {}\n","import { type TimezoneString } from '@dereekb/util';\nimport { allTimezoneInfos, searchTimezoneInfos, type TimezoneInfo, timezoneInfoForSystem } from '@dereekb/date';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type Observable, of } from 'rxjs';\nimport { type SearchableValueFieldStringSearchFn, type SearchableValueFieldValue, type SearchableValueFieldDisplayFn, type SearchableValueFieldDisplayValue } from '../field/selection/searchable';\nimport { searchableTextField, type SearchableTextFieldConfig } from '../field/selection/searchable/searchable.field';\n\nexport type TestStringSearchFunction = (text: string) => string[];\n\nexport function timezoneStringSearchFunction(): SearchableValueFieldStringSearchFn<string, TimezoneInfo> {\n const timezoneInfos = allTimezoneInfos();\n\n return (search: string) => {\n let searchResults;\n\n if (search.length === 0) {\n searchResults = [timezoneInfoForSystem()].concat(timezoneInfos);\n } else {\n searchResults = searchTimezoneInfos(search, timezoneInfos);\n }\n\n return of(searchResults.map((meta) => ({ value: meta.timezone, meta })));\n };\n}\n\nexport const DISPLAY_FOR_TIMEZONE_STRING_VALUE: SearchableValueFieldDisplayFn<string, TimezoneInfo> = (values: SearchableValueFieldValue<string, TimezoneInfo>[]) => {\n const timezoneInfos = allTimezoneInfos();\n\n const displayValues: SearchableValueFieldDisplayValue<string, TimezoneInfo>[] = values.map((x) => {\n const meta = x.meta ?? timezoneInfos.find((y) => x.value === y.timezone); // attempt to find the metadata in the timeInfos if it isn't provided.\n return { ...x, label: x.value, sublabel: meta?.abbreviation ?? 'Unknown' };\n });\n\n const obs: Observable<SearchableValueFieldDisplayValue<string, TimezoneInfo>[]> = of(displayValues);\n return obs;\n};\n\n/**\n * textPasswordField() configuration.\n */\nexport interface TimezoneStringFieldConfig extends Omit<SearchableTextFieldConfig<TimezoneString, TimezoneInfo>, 'inputType' | 'searchOnEmptyText' | 'search' | 'displayForValue' | 'key'>, Partial<Pick<SearchableTextFieldConfig<TimezoneString, TimezoneInfo>, 'key' | 'materialFormField'>> {}\n\n/**\n * Template for a searchable text field for a timezone.\n *\n * @param param0\n * @returns\n */\nexport function timezoneStringField(config: TimezoneStringFieldConfig = {}): FormlyFieldConfig {\n return searchableTextField({\n key: 'timezone',\n label: 'Timezone',\n asArrayValue: false,\n required: false,\n ...config,\n searchOnEmptyText: true,\n allowStringValues: false,\n showClearValue: true,\n search: timezoneStringSearchFunction(),\n displayForValue: DISPLAY_FOR_TIMEZONE_STRING_VALUE\n });\n}\n","import { NgModule } from '@angular/core';\nimport { DbxFormFormlySearchableFieldModule } from '../field/selection/searchable/searchable.field.module';\n\nconst importsAndExports = [DbxFormFormlySearchableFieldModule];\n\n@NgModule({\n imports: importsAndExports,\n exports: importsAndExports\n})\nexport class DbxFormTimezoneStringFieldModule {}\n","import { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type TextFieldConfig, textField } from '../field/value/text';\nimport { validatorsForFieldConfig } from '../field/field';\nimport { type ValidatorFn } from '@angular/forms';\nimport { isWebsiteUrlValidator, type IsWebsiteUrlValidatorConfig } from '../../validator/website';\n\n/**\n * websiteUrlField() configuration.\n */\nexport interface WebsiteUrlFieldConfig extends Omit<TextFieldConfig, 'inputType' | 'key'>, Partial<Pick<TextFieldConfig, 'key' | 'materialFormField'>>, IsWebsiteUrlValidatorConfig {}\n\n/**\n * Configured simple text password field.\n *\n * @param config\n * @returns\n */\nexport function websiteUrlField(config?: WebsiteUrlFieldConfig): FormlyFieldConfig {\n const validators: ValidatorFn[] = [isWebsiteUrlValidator(config)];\n\n const field = {\n ...textField({\n key: 'website',\n ...config,\n label: config?.label ?? 'Website Url',\n inputType: 'text'\n }),\n ...validatorsForFieldConfig({\n validators\n })\n };\n\n return field;\n}\n","import { FormlyFieldConfig } from '@ngx-formly/core';\nimport { Directive, input } from '@angular/core';\nimport { provideFormlyContext } from './formly.context';\nimport { AbstractAsyncFormlyFormDirective } from './formly.directive';\nimport { type Maybe } from '@dereekb/util';\nimport { toObservable } from '@angular/core/rxjs-interop';\n\n/**\n * Provides an DbxFormlyContext and has an input for fields.\n */\n@Directive({\n selector: '[dbxFormlyFields]',\n providers: provideFormlyContext(),\n standalone: true\n})\nexport class DbxFormlyFieldsContextDirective<T = unknown> extends AbstractAsyncFormlyFormDirective<T> {\n readonly fields = input<Maybe<FormlyFieldConfig[]>>(undefined, { alias: 'dbxFormlyFields' });\n readonly fields$ = toObservable(this.fields);\n}\n","import { importProvidersFrom } from '@angular/core';\nimport { DbxFormFormlyArrayFieldModule, DbxFormFormlyBooleanFieldModule, DbxFormFormlyDateFieldModule, DbxFormFormlyDbxListFieldModule, DbxFormFormlyNumberFieldModule, DbxFormFormlyPhoneFieldModule, DbxFormFormlyPickableFieldModule, DbxFormFormlySearchableFieldModule, DbxFormFormlySourceSelectModule, DbxFormFormlyTextEditorFieldModule, DbxFormFormlyTextFieldModule, DbxFormFormlyWrapperModule } from './field';\nimport { FormlyMaterialModule } from '@ngx-formly/material';\nimport { FormlyModule } from '@ngx-formly/core';\n\nexport function provideDbxFormFormlyFieldDeclarations() {\n return importProvidersFrom([DbxFormFormlyArrayFieldModule, DbxFormFormlyBooleanFieldModule, DbxFormFormlyDateFieldModule, DbxFormFormlyDbxListFieldModule, DbxFormFormlyNumberFieldModule, DbxFormFormlyPhoneFieldModule, DbxFormFormlyPickableFieldModule, DbxFormFormlySearchableFieldModule, DbxFormFormlySourceSelectModule, DbxFormFormlyTextEditorFieldModule, DbxFormFormlyTextFieldModule, DbxFormFormlyWrapperModule, FormlyModule, FormlyMaterialModule]);\n}\n","import { Directive } from '@angular/core';\n\n/**\n * Provides vertical spacing after a form.\n */\n@Directive({\n selector: 'dbx-form-spacer,[dbxFormSpacer],.dbx-form-spacer',\n host: {\n class: 'd-block dbx-form-spacer'\n },\n standalone: true\n})\nexport class DbxFormSpacerDirective {}\n","import { NgModule } from '@angular/core';\nimport { DbxFormModule } from './form/form.module';\nimport { DbxFormFormlyFieldModule } from './formly/field/form.field.module';\n\n@NgModule({\n exports: [DbxFormModule, DbxFormFormlyFieldModule]\n})\nexport class DbxFormExtensionModule {}\n","import { type EnvironmentProviders, makeEnvironmentProviders, type Provider } from '@angular/core';\nimport { provideDateFnsAdapter } from '@angular/material-date-fns-adapter';\nimport { MAT_DATE_LOCALE } from '@angular/material/core';\nimport { MAT_FORM_FIELD_DEFAULT_OPTIONS } from '@angular/material/form-field';\nimport { enUS } from 'date-fns/locale';\nimport { type DateTimePresetConfiguration, DBX_DATE_TIME_FIELD_MENU_PRESETS_TOKEN, DEFAULT_DATE_TIME_FIELD_MENU_PRESETS_PRESETS } from './formly';\nimport { type Maybe } from '@dereekb/util';\n\nexport interface ProvideDbxFormConfigurationConfig {\n readonly provideDateAdapter?: boolean;\n readonly defaultDateTimePresets?: Maybe<DateTimePresetConfiguration[]>;\n}\n\nexport function provideDbxFormConfiguration(config?: ProvideDbxFormConfigurationConfig): EnvironmentProviders {\n const { provideDateAdapter, defaultDateTimePresets } = config ?? {};\n\n const providers: Provider[] = [\n {\n provide: MAT_FORM_FIELD_DEFAULT_OPTIONS,\n useValue: {\n subscriptSizing: 'dynamic',\n floatLabel: 'always',\n appearance: 'outline'\n }\n },\n {\n provide: DBX_DATE_TIME_FIELD_MENU_PRESETS_TOKEN,\n useValue: defaultDateTimePresets ?? DEFAULT_DATE_TIME_FIELD_MENU_PRESETS_PRESETS\n }\n ];\n\n if (provideDateAdapter !== false) {\n providers.push(provideDateFnsAdapter());\n providers.push({\n provide: MAT_DATE_LOCALE,\n useValue: enUS\n });\n }\n\n return makeEnvironmentProviders(providers);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i1","importsAndExports","FieldType","i3","i4","TIME_OUTPUT_THROTTLE_TIME","i5","i6","i9","DatePickerDateRange","isE164PhoneNumberFunction"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA;;AAEG;IACS;AAAZ,CAAA,UAAY,YAAY,EAAA;AACtB;;AAEG;AACH,IAAA,YAAA,CAAA,YAAA,CAAA,cAAA,CAAA,GAAA,CAAA,CAAA,CAAA,GAAA,cAAiB;AACjB;;AAEG;AACH,IAAA,YAAA,CAAA,YAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAS;AACT;;AAEG;AACH,IAAA,YAAA,CAAA,YAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ;AACV,CAAC,EAbW,YAAY,KAAZ,YAAY,GAAA,EAAA,CAAA,CAAA;AAoBjB,MAAM,yBAAyB,GAAG;AA0BzC;;AAEG;MACmB,OAAO,CAAA;AAY5B;AAEK,MAAgB,cAA4B,SAAQ,OAAU,CAAA;AA6BnE;AAEK,SAAU,cAAc,CAAoB,UAAmB,EAAA;AACnE,IAAA,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,UAAU,CAAC,EAAE,CAAC;AAC1E;AAEM,SAAU,qBAAqB,CAA2B,UAAmB,EAAA;IACjF,OAAO,CAAC,GAAG,cAAc,CAAC,UAAU,CAAC,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,UAAU,CAAC,EAAE,CAAC;AAChH;SAEgB,wBAAwB,CAAC,IAA0B,EAAE,UAAmB,EAAE,MAAkD,EAAA;IAC1I,IAAI,UAAU,EAAE;AACd,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IACtB;SAAO;AACL,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IACrB;AACF;;AC5GO,MAAM,4BAA4B,GAAG;AAI5C;;;;;;AAMG;MAKU,sBAAsB,CAAA;AACxB,IAAA,IAAI,GAAG,MAAM,EAAC,cAAiB,GAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAChD,IAAA,MAAM,GAAG,MAAM,EAAC,mCAA+C,EAAC;IAEhE,OAAO,GAAG,YAAY,CAAC;QAC9B,SAAS,EAAE,MAAK;AACd,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,4BAA4B,CAAC;QAClD,CAAC;QACD,gBAAgB,EAAE,MAAK;AACrB,YAAA,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE;AAC5B,YAAA,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;AAC7B,YAAA,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE;YAC5B,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,4BAA4B,EAAE,KAAK,CAAC;QAC5D;AACD,KAAA,CAAC;AAEF;;;;AAIG;AACM,IAAA,8BAA8B,GAAG,KAAK,CAAiB,IAAI,0EAAC;AAErE;;;AAGG;IACM,oBAAoB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,sBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAA6B;AAElE;;AAEG;IACM,oBAAoB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,sBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAA6B;AAElE;;;;AAIG;IACM,uBAAuB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,yBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAgC;AAExE;;AAEG;IACM,qBAAqB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,uBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAA8C;AAE3E,IAAA,+BAA+B,GAAG,YAAY,CAAC,IAAI,CAAC,8BAA8B,CAAC;AAEnF,IAAA,gBAAgB,GAAG,YAAY,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,IAAI,CACtE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EACjC,WAAW,CAAC,CAAC,CAAC,CACf;IACQ,mBAAmB,GAAsC,gCAAgC,CAAC;AACjG,QAAA,UAAU,EAAE,YAAY,CAAC,IAAI,CAAC,uBAAuB,CAAC;AACtD,QAAA,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,oBAAoB;KAChD,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAEd,IAAA,iBAAiB,GAA2D,YAAY,CAAC,IAAI,CAAC,qBAAqB,CAAC;AAE5G,IAAA,aAAa,GAAG,IAAI,kBAAkB,EAAE;AACxC,IAAA,cAAc,GAAG,IAAI,kBAAkB,EAAE;AACzC,IAAA,aAAa,GAAG,IAAI,kBAAkB,EAAE;AAEzD,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACrB,YAAA,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;QACzD;AAEA,QAAA,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC;IAC7D;IAEA,QAAQ,GAAA;;QAEN,IAAI,CAAC,aAAa,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC;aAC3C,IAAI,CACH,SAAS,CAAC,MACR,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CACpB,KAAK,EAAE,EACP,UAAU,CAAC,CAAC,MAAM,KAAI;AACpB,YAAA,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM;AAC7B,YAAA,MAAM,SAAS,GAAG,EAAE,CAAC;AAErB,YAAA,IAAI,GAA8C;YAElD,IAAI,UAAU,EAAE;AACd,gBAAA,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAC7B,KAAK,EAAE,EACP,UAAU,CAAC,CAAC,KAAK,KACf,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,IAAI,CACjC,KAAK,EAAE,EACP,SAAS,CAAC,CAAC,WAAW,KAAI;oBACxB,IAAI,WAAW,EAAE;AACf,wBAAA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;oBAC7C;yBAAO;AACL,wBAAA,OAAO,EAAE,CAAC,SAAS,CAAC;oBACtB;gBACF,CAAC,CAAC,EACF,UAAU,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAC7C,CACF,CACF;YACH;iBAAO;AACL,gBAAA,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC;YACrB;AAEA,YAAA,OAAO,GAAG;QACZ,CAAC,CAAC,CACH,CACF;AAEF,aAAA,SAAS,CAAC,CAAC,MAAqC,KAAI;AACnD,YAAA,IAAI,MAAM,CAAC,MAAM,EAAE;gBACjB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;YACnC;AAAO,iBAAA,IAAI,MAAM,CAAC,KAAK,IAAI,IAAI,EAAE;gBAC/B,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC;YACtC;iBAAO;;YAEP;AACF,QAAA,CAAC,CAAC;;QAGJ,IAAI,CAAC,cAAc,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC;aAC1C,IAAI,CACH,KAAK,CAAC,CAAC,CAAC,EACR,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,YAAY,CAAC,EACpD,SAAS,CAAC,CAAC,KAAK,KAAI;AAClB,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAC9B,KAAK,EAAE,EACP,UAAU,CAAC,CAAC,KAAK,KAAI;;;;;AAKnB,gBAAA,MAAM,iBAAiB,GAAG,CAAC,KAAK,CAAC,SAAS,KAAK,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,WAAW,IAAI,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;;gBAGvI,MAAM,mBAAmB,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC;AAE3C,gBAAA,MAAM,eAAe,GAAG,KAAK,CAAC,UAAU;gBACxC,MAAM,eAAe,GAA8B,eAAe,GAAG,SAAS,GAAG,mBAAmB;gBAEpG,MAAM,oBAAoB,GAAG,KAAK,CAAC,QAAQ,KAAK,KAAK,IAAI,iBAAiB;gBAC1E,MAAM,kBAAkB,GAAiC,oBAAoB,GAAG,SAAS,GAAG,mBAAmB;AAE/G,gBAAA,OAAO,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE,EAAE,eAAe,EAAE,kBAAkB,EAAE,CAAC,CAAC,IAAI,CACxF,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAqB,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,EACnF,KAAK,EAAE,CACR;YACH,CAAC,CAAC,CACH;AACH,QAAA,CAAC,CAAC;aAEH,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,sBAAsB,KAAI;;;AAIrD,YAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC;;YAGnC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,4BAA4B,EAAE,KAAK,CAAC;AACzD,QAAA,CAAC,CAAC;;AAGJ,QAAA,IAAI,CAAC,aAAa,CAAC,YAAY,GAAG,aAAa,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,+BAA+B,CAAC;aAC3G,IAAI,CACH,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,uBAAuB,CAA4B,KAAK,uBAAuB,KAAK,KAAK,IAAI,SAAS,CAAC,EACxH,oBAAoB,EAAE;AAEvB,aAAA,SAAS,CAAC,CAAC,OAAO,KAAI;YACrB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,4BAA4B,EAAE,OAAO,CAAC;AAC9D,QAAA,CAAC,CAAC;IACN;IAEA,yBAAyB,CAAC,KAAQ,EAAE,SAA6C,EAAA;AAC/E,QAAA,MAAM,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,eAAe,EAAE,uBAAuB,EAAE,GAAG,SAAS,IAAI,EAAE;AACpH,QAAA,MAAM,kBAAkB,GAAG,uBAAuB,IAAI,IAAI,GAAG,EAAE,CAAC,uBAAuB,CAAC,GAAG,IAAI,CAAC,gBAAgB;AAChH,QAAA,MAAM,qBAAqB,GAAG,0BAA0B,IAAI,IAAI,GAAG,EAAE,CAAC,0BAA0B,CAAC,GAAG,IAAI,CAAC,mBAAmB;QAE5H,OAAO,aAAa,CAAC,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,CAAC,CAAC,IAAI,CACpE,SAAS,CAAC,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC,KAAI;AAClC,YAAA,OAAO,aAAa,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAuB,CAAC,CAAC;QACrI,CAAC,CAAC,CACH;IACH;AAEU,IAAA,kBAAkB,CAAC,KAAQ,EAAA;AACnC,QAAA,OAAO,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC;IAC9C;AAEU,IAAA,UAAU,CAAC,KAAQ,EAAA;QAC3B,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAChC,SAAS,CAAC,CAAC,WAAW,KAAI;YACxB,IAAI,WAAW,EAAE;AACf,gBAAA,OAAO,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YACzC;iBAAO;gBACL,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,KAAqB,EAAE,CAAC;YAC7C;QACF,CAAC,CAAC,CACH;IACH;uGAvMW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,8BAAA,EAAA,EAAA,iBAAA,EAAA,gCAAA,EAAA,UAAA,EAAA,gCAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,uBAAA,EAAA,EAAA,iBAAA,EAAA,yBAAA,EAAA,UAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAJlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,UAAU,EAAE;AACb,iBAAA;;;AClBD;;;;AAIG;AAKG,MAAO,4BAAmC,SAAQ,kCAAwC,CAAA;AACrF,IAAA,aAAa,GAAG,MAAM,EAAC,sBAAyB,GAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACjE,IAAA,mBAAmB,GAAG,KAAK,CAAgC,MAAM,+DAAC;AAExD,IAAA,gCAAgC,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,4EAAC;AAElG,IAAA,yBAAyB,CAAC,UAAsB,EAAA;AACjE,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,EAAE;AACzC,QAAA,OAAO,KAAK,CAAC,yBAAyB,CAAC,UAAU,CAAC;IACpD;uGATW,4BAA4B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA5B,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAA5B,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAJxC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACUD;;AAEG;SACa,oBAAoB,GAAA;IAClC,OAAO,CAAC,gBAAgB,EAAE,GAAG,qBAAqB,CAAC,gBAAgB,CAAC,CAAC;AACvE;AAEA;;AAEG;MAEU,gBAAgB,CAAA;AACnB,IAAA,OAAO,aAAa,GAAiB,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE;AAE9G,IAAA,OAAO,GAAG,IAAI,OAAO,EAAE;AAEf,IAAA,OAAO,GAAG,IAAI,eAAe,CAA6B,SAAS,CAAC;AACpE,IAAA,aAAa,GAAG,IAAI,eAAe,CAAoB,SAAS,CAAC;AACjE,IAAA,SAAS,GAAG,IAAI,eAAe,CAAwB,SAAS,CAAC;AACjE,IAAA,SAAS,GAAG,IAAI,eAAe,CAAqC,SAAS,CAAC;AAEtF,IAAA,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;AAC1D,IAAA,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;AAC9D,IAAA,OAAO,GAA6B,IAAI,CAAC,SAAS,CAAC,IAAI,CAC9D,oBAAoB,EAAE,EACtB,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,GAAG,EAAE,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,CAAC,EACtE,WAAW,CAAC,CAAC,CAAC,CACf;IAED,WAAW,GAAA;QACT,IAAI,CAAC,OAAO,EAAE;IAChB;IAEA,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,MAAK;AACpC,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;AACvB,YAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;AAC7B,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;AACzB,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;AAC3B,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,WAAW,CAAC,QAAsC,EAAA;QAChD,IAAI,QAAQ,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AACrC,YAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;gBACpB,QAAQ,CAAC,IAAI,CAAC;oBACZ,MAAM,EAAE,IAAI,CAAC,OAAO;oBACpB,eAAe,EAAE,IAAI,CAAC,QAAQ;AAC9B,oBAAA,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC;AAClC,iBAAA,CAAC;YACJ;AAEA,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC/B;IACF;AAEA,IAAA,aAAa,CAAC,QAAqC,EAAA;QACjD,IAAI,QAAQ,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AACrC,YAAA,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC;QAC7B;IACF;AAEA,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK;IAC3B;IAEA,IAAI,MAAM,CAAC,MAAkC,EAAA;AAC3C,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;IAC3B;;IAGA,QAAQ,GAAA;QACN,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CACxB,WAAW,EAAE,EACb,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,EAC9B,WAAW,CAAC,CAAC,CAAC,CACf;IACH;AAEA,IAAA,QAAQ,CAAC,KAAiB,EAAA;AACxB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;AAE9B,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;YACxB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;QACtC;IACF;IAEA,UAAU,GAAA;QACR,OAAO,4BAA4B,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC3D;AAEA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK;IAC7B;IAEA,WAAW,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;IACtC;AAEA,IAAA,WAAW,CAAC,GAAwB,EAAE,QAAQ,GAAG,IAAI,EAAA;AACnD,QAAA,MAAM,YAAY,GAAG,4BAA4B,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,yBAAyB,EAAE,QAAQ,CAAC;AAChH,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC;AAEjC,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;YACxB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,QAAQ,CAAC;QACjD;IACF;IAEA,SAAS,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AACxB,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE;QAClC;IACF;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AACxB,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,eAAe,EAAE;QACxC;IACF;uGA3GW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAAhB,gBAAgB,EAAA,CAAA;;2FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B;;;AChBD;;AAEG;MAiBU,kBAAkB,CAAA;AACZ,IAAA,iBAAiB,GAAG,MAAM,EAAC,gBAAmB,EAAC;AAEvD,IAAA,UAAU,GAAG,SAAS,CAAC,UAAU,sDAAC;AAE1B,IAAA,OAAO,GAAG,IAAI,eAAe,CAAyC,SAAS,CAAC;IAChF,OAAO,GAAG,IAAI,eAAe,CAAe,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AACvH,IAAA,SAAS,GAAG,IAAI,eAAe,CAAwB,SAAS,CAAC;IAEjE,MAAM,GAAG,IAAI,eAAe,CAAO,IAAI,IAAI,EAAE,CAAC;AAC9C,IAAA,YAAY,GAAG,IAAI,OAAO,EAAQ;AAElC,IAAA,YAAY,GAAG,IAAI,kBAAkB,EAAE;AACvC,IAAA,mBAAmB,GAAG,IAAI,kBAAkB,EAAE;AAEtD,IAAA,IAAI,GAAG,IAAI,SAAS,CAAC,EAAE,CAAC;AACxB,IAAA,WAAW,GAAG,MAAM,CAAI,EAAO,uDAAC;IAEhC,OAAO,GAAsB,EAAE;AAE/B,IAAA,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,oBAAoB,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IAE3F,OAAO,GAA6B,IAAI,CAAC,MAAM,CAAC,IAAI,CAC3D,SAAS,CAAC,CAAC,WAAW,KACpB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CACzB,SAAS,CAAC,CAAC,CAAC,EACZ,oBAAoB,EAAE,EACtB,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAC9D,SAAS,CAAC,CAAC,CAAC,CAAC;;IAEb,SAAS,CAAC,CAAC,qBAAqB,KAAK,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,oBAAoB,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,qBAAqB,CAAC,CAAC,CAAC,EAC9J,GAAG,CAAC,CAAC,0BAAkC,MAAM;QAC3C,0BAA0B;AAC1B,QAAA,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK;AAC9D,QAAA,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC;KAC3B,CAAC,CAAC,EACH,IAAI,CACF,CAAC,GAAuB,EAAE,IAAwB,KAAI;;;QAGpD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,cAAc,IAAI,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,0BAA0B,GAAG,CAAC,CAAC;QAEhH,OAAO;YACL,0BAA0B,EAAE,IAAI,CAAC,0BAA0B;AAC3D,YAAA,WAAW,EAAE,KAAK;YAClB,cAAc,EAAE,IAAI,CAAC;SACtB;AACH,IAAA,CAAC,EACD;AACE,QAAA,0BAA0B,EAAE,CAAC;AAC7B,QAAA,WAAW,EAAE,KAAK;AAClB,QAAA,cAAc,EAAE;AACjB,KAAA,CACF,EACD,SAAS,CAAC,CAAC,EAAE,0BAA0B,EAAE,WAAW,EAAE,cAAc,EAAE,KAAI;QACxE,MAAM,SAAS,GAAG,MAAK;AACrB,YAAA,MAAM,OAAO,GAAG,0BAA0B,IAAI,CAAC,CAAC;YAChD,MAAM,QAAQ,GAAG,WAAW;AAE5B,YAAA,MAAM,SAAS,GAAiB;AAC9B,gBAAA,UAAU,EAAE,QAAQ;AACpB,gBAAA,KAAK,EAAE,OAAO,GAAG,YAAY,CAAC,KAAK,GAAG,YAAY,CAAC,IAAI;AACvD,gBAAA,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM;AACxB,gBAAA,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS;AAC9B,gBAAA,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ;AAC5B,gBAAA,YAAY,EAAE,0BAA0B;gBACxC,WAAW;gBACX,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,gBAAA,UAAU,EAAE;aACb;AAED,YAAA,OAAO,SAAS;AAClB,QAAA,CAAC;AAED,QAAA,MAAM,KAAK,GAAG,SAAS,EAAE;QAEzB,IAAI,WAAW,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACtC,YAAA,OAAO,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,IAAI;;AAEzB,YAAA,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAC/B,GAAG,CAAC,MAAM,SAAS,EAAE,CAAC;;AAEtB,YAAA,KAAK,EAAE;;AAEP,YAAA,SAAS,CAAC,KAAK,CAAC,CACjB;QACH;aAAO;AACL,YAAA,OAAO,EAAE,CAAC,KAAK,CAAC;QAClB;IACF,CAAC,CAAC,CACH,CACF,EACD,WAAW,CAAC,CAAC,CAAC,CACf;AAEgB,IAAA,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;AAE3E,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE,wDAAC;AAElE,IAAA,WAAA,GAAA;QACE,gBAAgB,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAK;AACpD,YAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,IAAI,CAAC;AAC1C,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;AACvB,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;AACvB,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;AACtB,YAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;AAC5B,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;AACzB,YAAA,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;AAC3B,YAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE;AACpC,QAAA,CAAC,CAAC;IACJ;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,IAAI,CAAC;QAExC,MAAM,mBAAmB,GAAG,MAAK;AAC/B,YAAA,MAAM,UAAU,GAAG,4BAA4B,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;YAC5E,IAAI,MAAM,GAAG,KAAK;YAElB,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,UAAU,EAAE;AACrC,gBAAA,wBAAwB,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;gBACpE,MAAM,GAAG,IAAI;YACf;AAEA,YAAA,OAAO,MAAM;AACf,QAAA,CAAC;QAED,IAAI,CAAC,YAAY,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,oBAAoB,CAAC,yBAAyB,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;AACnH,YAAA,mBAAmB,EAAE;AACvB,QAAA,CAAC,CAAC;;AAGF,QAAA,IAAI,CAAC,mBAAmB,CAAC,YAAY,GAAG,KAAK,CAAC;AAC5C,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,GAAG,CAAC,MAAM,OAAO,CAAC,EAClB,KAAK,CAAC,EAAE,CAAC,CACV;YACD,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC5F,SAAA,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;AACtB,YAAA,mBAAmB,EAAE;AACvB,QAAA,CAAC,CAAC;IACJ;;AAGA,IAAA,IAAI,CAAC,UAAkC,EAAA;QACrC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QACpC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC;IACjD;IAEA,QAAQ,GAAA;QACN,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAU,CAAC;IACjC;AAEA,IAAA,QAAQ,CAAC,KAAQ,EAAA;QACf,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,CAAM,CAAC;AAEjD,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE;AACnC,YAAA,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE;AACjC,YAAA,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI;QAC7B;;AAGA,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;AAC3B,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;;;QAI1B,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACvB,gBAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YAC5B;QACF,CAAC,EAAE,GAAG,CAAC;;QAGP,IAAI,CAAC,SAAS,EAAE;IAClB;IAEA,SAAS,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;AAC3B,YAAA,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;QAC3B;QAEA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;IAC9B;AAEA,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,4BAA4B,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC3D;AAEA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK;IAC7B;IAEA,WAAW,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;IACtC;AAEA,IAAA,WAAW,CAAC,GAAwB,EAAE,QAAQ,GAAG,IAAI,EAAA;AACnD,QAAA,MAAM,IAAI,GAAG,4BAA4B,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,yBAAyB,EAAE,QAAQ,CAAC;AACxG,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;IAC3B;;IAGA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;IAC1B;uGA7MW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,iGALlB,qBAAqB,CAAC,kBAAkB,CAAC,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAQpB,UAAU,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAhBhC;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAKS,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,sGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAI7C,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAhB9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,YAAY;AACtB,oBAAA,QAAQ,EAAE,QAAQ;AAClB,oBAAA,QAAQ,EAAE;;;;AAIT,EAAA,CAAA;AACD,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE;AACR,qBAAA;oBACD,SAAS,EAAE,qBAAqB,CAAA,kBAAA,CAAoB;AACpD,oBAAA,OAAO,EAAE,CAAC,WAAW,EAAE,mBAAmB,EAAE,YAAY,CAAC;oBACzD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,UAAU,EAAE;AACb,iBAAA;sHAIiC,UAAU,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;SChC5B,uBAAuB,CAAI,IAAoB,EAAE,QAA8B,EAAE,OAA+C,EAAA;IAC9I,OAAO,iCAAiC,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC;AAC3E;SAEgB,iCAAiC,CAAI,SAAsC,EAAE,QAA8B,EAAE,OAAsD,EAAA;AACjL,IAAA,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAE3D,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAC3B,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,EACnB,oBAAoB,EAAE,CACvB;AAED,IAAA,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAEhE,IAAA,OAAO,aAAa,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CACxC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAChB,oBAAoB,EAAE,EACtB,SAAS,CAAC,CAAC,IAAgC,KAAI;AAC7C,QAAA,IAAI,IAAI,KAAK,OAAO,EAAE;;YAEpB,OAAO,MAAM,CAAC,IAAI,CAChB,UAAU,CAAC,CAAC,KAAmB,KAAI;AACjC,gBAAA,IAAI,KAAK,KAAK,YAAY,CAAC,KAAK,EAAE;oBAChC,IAAI,cAAc,GAAG,KAAK;AAC1B,oBAAA,MAAM,WAAW,GAAG,IAAI,OAAO,EAAE;oBAEjC,OAAO,aAAa,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CACzC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,KAAI;wBACrB,IAAI,CAAC,cAAc,IAAI,KAAK,KAAK,YAAY,CAAC,KAAK,EAAE;AACnD,4BAAA,OAAO,CAAC,KAAK,EAAE,IAAI,CAAiB,CAAC;wBACvC;6BAAO;AACL,4BAAA,OAAO,CAAC,KAAK,EAAE,KAAK,CAAiB;wBACvC;oBACF,CAAC,CAAC,EACF,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAI;wBAChB,cAAc,GAAG,IAAI;wBACrB,IAAI,CAAC,IAAI,EAAE;AACT,4BAAA,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;wBAC7B;AACF,oBAAA,CAAC,CAAC,EACF,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC,EAC3B,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,EAC1B,SAAS,CAAC,WAAW,CAAC,EACtB,OAAO,CAAC,MAAK;wBACX,WAAW,CAAC,QAAQ,EAAE;oBACxB,CAAC,CAAC,CACH;gBACH;qBAAO;AACL,oBAAA,OAAO,KAAK;gBACd;YACF,CAAC,CAAC,CACH;QACH;aAAO;;YAEL,OAAO,MAAM,CAAC,IAAI,CAChB,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,YAAY,CAAC,YAAY,CAAC,EAC3C,oBAAoB,EAAE,EACtB,SAAS,CAAC,CAAC,YAAqB,KAAI;gBAClC,IAAI,YAAY,EAAE;AAChB,oBAAA,OAAO,KAAK;gBACd;qBAAO;oBACL,IAAI,QAAQ,GAAG,MAAM;AAErB,oBAAA,IAAI,IAAI,KAAK,QAAQ,EAAE;wBACrB,QAAQ,GAAG,QAAQ,CAAC,IAAI,CACtB,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAC9D,wBAAwB,CAAC;AACvB,4BAAA,MAAM,EAAE,IAAI;AACZ,4BAAA,qBAAqB,EAAE,EAAE;4BACzB,OAAO,EAAE,MAAK;AACZ,gCAAA,OAAO,CAAC,KAAK,CAAC,kTAAkT,CAAC;4BACnU;AACD,yBAAA,CAAC,CACH;oBACH;AAEA,oBAAA,OAAO,QAAQ;gBACjB;YACF,CAAC,CAAC,CACH;QACH;IACF,CAAC,CAAC,CACH;AACH;AAWA;;AAEG;MAKU,sBAAsB,CAAA;AACxB,IAAA,IAAI,GAAG,MAAM,EAAC,cAAiB,GAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAEhD,iBAAiB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAqC;IAC9D,aAAa,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,eAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAA+C;IAE1D,UAAU,GAAG,iBAAiB,EAAE;AAChC,IAAA,8BAA8B,GAAG,MAAM,CAAC,MAAK;AAC9D,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE;QACvC,MAAM,IAAI,GAA+B,IAAI,CAAC,iBAAiB,EAAE,IAAI,OAAO;AAE5E,QAAA,IAAI,YAAiC;QAErC,IAAI,UAAU,EAAE;AACd,YAAA,YAAY,GAAG,iCAAiC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;AACpG,gBAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AACvB,YAAA,CAAC,CAAC;QACJ;AAEA,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC;AACtC,IAAA,CAAC,0EAAC;uGApBS,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAJlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACrED;;AAEG;AAgBG,MAAO,4BAAgC,SAAQ,uBAAiE,CAAA;IACnG,UAAU,GAAG,iBAAiB,EAAE;AAExC,IAAA,OAAO,GAAG,MAAM,EAAC,gBAAmB,GAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACrD,OAAO,GAAG,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;IAClD,aAAa,GAAG,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;AAE9D,IAAA,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM;AAEzB,IAAA,kBAAkB,GAAG;AAC5B,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,GAAG,IAAI,CAAC,IAAI,CAAC;KACd;IAED,QAAQ,GAAA;QACN,IAAI,CAAC,UAAU,CAAC,MAAM,CACpB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;AAC7D,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM;QAC9B,CAAC,CAAC,CACH;IACH;AAES,IAAA,iBAAiB,GAAwB,CAAC,KAAK,EAAE,OAAO,KAAI;QACnE,OAAO,CAAC,OAAO,EAAE;AACjB,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AACnB,IAAA,CAAC;AAED,IAAA,OAAO,kBAAkB,CAAI,SAAoB,EAAE,MAA6C,EAAA;QAC9F,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,EAAC,4BAA+B,GAAE;AAChE,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,SAAS,EAAE,OAAO;AAClB,YAAA,QAAQ,EAAE,OAAO;YACjB,GAAG,MAAM,CAAC,MAAM;AAChB,YAAA,IAAI,EAAE;AACP,SAAA,CAAC;AAEF,QAAA,OAAO,SAAS;IAClB;uGArCW,4BAA4B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA5B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,SAAA,EAH5B,CAAC,oBAAoB,EAAE,CAAC,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAXzB;;;;;;;;;AAST,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAGS,yBAAyB,EAAA,QAAA,EAAA,2DAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,CAAA,QAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,aAAA,EAAA,OAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,OAAA,EAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,EAAA,KAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,8BAA8B,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,kBAAkB,EAAA,QAAA,EAAA,YAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,sBAAsB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,sBAAsB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,gCAAA,EAAA,sBAAA,EAAA,sBAAA,EAAA,yBAAA,EAAA,uBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAE9J,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAfxC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE;;;;;;;;;AAST,EAAA,CAAA;AACD,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,SAAS,EAAE,CAAC,oBAAoB,EAAE,CAAC;AACnC,oBAAA,OAAO,EAAE,CAAC,yBAAyB,EAAE,eAAe,EAAE,eAAe,EAAE,8BAA8B,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,kBAAkB;AAC9L,iBAAA;;;AC9CD,MAAM,8CAA8C,GAA+B,OAAO;AAE1F;;;;AAIG;MAKU,6BAA6B,CAAA;AAC/B,IAAA,IAAI,GAAG,MAAM,EAAC,cAAiB,GAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAEhD,IAAA,wBAAwB,GAAG,KAAK,CAAgE,8CAA8C,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,0BAAA,EAAA,GAAA,EAAA,CAAA,EAAI,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,8CAA8C,GAAG;IAC1N,oBAAoB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,sBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAA2C;AAEvE,IAAA,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,wBAAwB,CAAC;AACnD,IAAA,OAAO,GAAyB,YAAY,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,+BAA+B,EAAE,EAAE,WAAW,EAAE,EAAE,6BAA6B,EAAE,CAAC;AAExK,IAAA,WAAA,GAAA;QACE,iBAAiB,CACf,iCAAiC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;AAC7F,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QACvB,CAAC,CAAC,CACH;IACH;uGAfW,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA7B,6BAA6B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,EAAA,wBAAA,EAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,UAAA,EAAA,0BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAA7B,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAJzC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,wBAAwB;AAClC,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACbD;;;;AAIG;MAKU,2BAA2B,CAAA;AAC7B,IAAA,IAAI,GAAG,MAAM,EAAC,OAAU,GAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAEzC,kBAAkB,GAAG,MAAM,EAAY;IAE7B,IAAI,GAAG,iBAAiB,EAAE;IAE7C,QAAQ,GAAA;;QAEN,IAAI,CAAC,IAAI,CAAC,MAAM,CACd,IAAI,CAAC,IAAI,CAAC;aACP,IAAI,CACH,QAAQ,CAAC,CAAC,CAAC,KACT,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CACvB,KAAK,EAAE,EACP,GAAG,CAAC,CAAC,KAAK,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC,CACtD,CACF,EACD,KAAK,CAAC,CAAC,CAAC;aAET,SAAS,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,KAAI;YACnC,IAAI,UAAU,EAAE;AACd,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC;YACrC;iBAAO;AACL,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC;YACzC;QACF,CAAC,CAAC,CACL;IACH;uGA5BW,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,OAAA,EAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAJvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACLD;;;;;;AAMG;AACG,SAAU,sBAAsB,CAAI,WAA4B,EAAE,IAAsB,EAAA;AAC5F,IAAA,MAAM,OAAO,GAAG,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,WAAW;AAC1D,IAAA,OAAO,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC7D;;MCda,aAAa,CAAA;uGAAb,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;wGAAb,aAAa,EAAA,CAAA;wGAAb,aAAa,EAAA,CAAA;;2FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;AACV,iBAAA;;;ACDK,SAAU,0BAA0B,CAAC,GAAY,EAAE,KAAsB,EAAA;AAC7E,IAAA,OAAO,uBAAuB,KAAK,CAAC,KAAK,CAAC,SAAS,cAAc;AACnE;AAEM,SAAU,0BAA0B,CAAC,GAAY,EAAE,KAAsB,EAAA;AAC7E,IAAA,OAAO,kCAAkC,KAAK,CAAC,KAAK,CAAC,SAAS,cAAc;AAC9E;AAEM,SAAU,oBAAoB,CAAC,GAAY,EAAE,KAAsB,EAAA;AACvE,IAAA,OAAO,8CAA8C,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG;AACzE;AAEM,SAAU,oBAAoB,CAAC,GAAY,EAAE,KAAsB,EAAA;AACvE,IAAA,OAAO,8CAA8C,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG;AACzE;AAEO,MAAM,2BAA2B,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,yBAAyB;AAC1F,MAAM,6BAA6B,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,0BAA0B;AAC9F,MAAM,6BAA6B,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,0BAA0B;AAC9F,MAAM,sBAAsB,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,oBAAoB;AAC3E,MAAM,sBAAsB,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,oBAAoB;AAC3E,MAAM,4BAA4B,GAAG,EAAE,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,mCAAmC;AAChH,MAAM,sCAAsC,GAAG,EAAE,IAAI,EAAE,8BAA8B,EAAE,OAAO,EAAE,6CAA6C;SAEpI,yBAAyB,GAAA;AACvC,IAAA,OAAO,CAAC,2BAA2B,EAAE,6BAA6B,EAAE,6BAA6B,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,4BAA4B,EAAE,sCAAsC,CAAC;AAC1N;;ACzBA;MAqBa,4CAA4C,CAAA;AAC9C,IAAA,qBAAqB,GAAG,MAAM,CAAwC,SAAS,iEAAC;AAChF,IAAA,oBAAoB,GAAG,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE;AAEvE,IAAA,iBAAiB,CAAC,cAA8C,EAAA;AAC9D,QAAA,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,cAAc,CAAC;IAChD;uGANW,4CAA4C,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA5C,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,4CAA4C,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAnB7C;;;;;;;;;;;;;;AAcT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAKU,4CAA4C,EAAA,UAAA,EAAA,CAAA;kBApBxD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;AAcT,EAAA,CAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE;AACV,iBAAA;;;MCAY,gCAAgC,CAAA;AAClC,IAAA,2BAA2B,GAAG,MAAM,EAAC,8BAAiC,EAAC;AAEvE,IAAA,MAAM,GAAuE;AACpF,QAAA,cAAc,EAAE,IAAI,CAAC,2BAA2B,CAAC,cAAc;AAC/D,QAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,YAAA,iBAAiB,CACf,IAAI,CAAC,2BAA2B,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,OAAuC,KAAI;AACrG,gBAAA,QAAQ,CAAC,iBAAiB,CAAC,OAAO,CAAC;YACrC,CAAC,CAAC,CACH;QACH;KACD;uGAZU,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gCAAgC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAPjC;;AAET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAGS,qBAAqB,EAAA,QAAA,EAAA,gDAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAEpB,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAT5C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sCAAsC;AAChD,oBAAA,QAAQ,EAAE;;AAET,EAAA,CAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,qBAAqB;AAChC,iBAAA;;AAiCK,MAAO,8BAA4C,SAAQ,SAAyD,CAAA;AACvG,IAAA,kBAAkB,GAAG,MAAM,CAAoD,SAAS,8DAAC;IAEjG,eAAe,GAA+C,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,oBAAoB,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IAExK,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAC1C,GAAG,CAAC,CAAC,CAAiC,KAAK,CAAC,CAAC,MAAM,CAAC,EACpD,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAClD,GAAG,CAAC,CAAC,CAAiC,KAAK,CAAC,CAAC,MAAM,KAAK,KAAK,KAAK,CAAC,CAAC,MAAM,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAClG,oBAAoB,EAAE,EACtB,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;AACrC,IAAA,oBAAoB,GAAG,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;AAEvF,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,IAAiB;IAC/B;AAEA,IAAA,IAAI,eAAe,GAAA;QACjB,OAAO,IAAI,CAAC,GAAa;IAC3B;AAEA,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK;IACzB;AAEA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW;IAC/B;AAEA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ;IAC5B;AAEA,IAAA,IAAI,cAAc,GAAA;QAChB,OAAO,IAAI,CAAC,KAAK;IACnB;AAEA,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,MAAM;IACvC;AAEA,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,cAAc,IAAI,4CAA4C;IAC3F;IAEA,QAAQ,GAAA;;QAEN,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC;IACjE;uGAtDW,8BAA8B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA9B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,8BAA8B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECxD3C,66BAwBA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED8BY,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,sGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,WAAA,EAAA,IAAA,EAAA,UAAA,EAAA,eAAA,EAAA,MAAA,EAAA,OAAA,EAAA,eAAA,EAAA,UAAA,EAAA,OAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,kBAAkB,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,kBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,sLA9BzF,gCAAgC,EAAA,QAAA,EAAA,sCAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAgChC,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAN1C,SAAS;AAES,YAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,UAAA,EACnC,IAAI,EAAA,OAAA,EACP,CAAC,mBAAmB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,eAAe,EAAE,aAAa,EAAE,gCAAgC,CAAC,EAAA,QAAA,EAAA,66BAAA,EAAA;;;AE5BnI,MAAO,2BAA4B,SAAQ,YAAkD,CAAA;AACjG,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,KAAK;IACnB;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;IAChC;uGAPW,2BAA2B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAhB5B;;;;;;;;;;;GAWT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACS,aAAa,sKAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAI3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAjBvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE;;;;;;;;;;;AAWT,EAAA,CAAA;AACD,oBAAA,OAAO,EAAE,CAAC,aAAa,EAAE,aAAa,CAAC;oBACvC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACPK,MAAO,8BAA+B,SAAQ,YAAqD,CAAA;AACvG,IAAA,IAAI,YAAY,GAAA;QACd,OAAO,IAAI,CAAC,KAAK;IACnB;uGAHW,8BAA8B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA9B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,8BAA8B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAT/B;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACS,sBAAsB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIrB,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAX1C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,0BAA0B;AACpC,oBAAA,QAAQ,EAAE;;;;AAIT,EAAA,CAAA;oBACD,OAAO,EAAE,CAAC,sBAAsB,CAAC;oBACjC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACYK,MAAO,2BAA4B,SAAQ,YAAqD,CAAA;AACpG,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,KAAK;IACnB;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU;IACpC;AAEA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,IAAI,KAAK;IAC3C;AAEA,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,aAAa,IAAI,KAAK;IAChD;uGAfW,2BAA2B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAT5B;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACS,qBAAqB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,eAAA,EAAA,UAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIpB,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAVvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE;;;;AAIT,EAAA,CAAA;oBACD,OAAO,EAAE,CAAC,qBAAqB,CAAC;oBAChC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACVK,MAAO,iCAAkC,SAAQ,YAAsD,CAAA;AAC3G,IAAA,IAAI,YAAY,GAAA;QACd,OAAO,IAAI,CAAC,KAAK;IACnB;uGAHW,iCAAiC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iCAAiC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EATlC;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACS,sBAAsB,EAAA,QAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIrB,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAX7C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,6BAA6B;AACvC,oBAAA,QAAQ,EAAE;;;;AAIT,EAAA,CAAA;oBACD,OAAO,EAAE,CAAC,sBAAsB,CAAC;oBACjC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACDM,MAAM,oBAAoB,GAAG,CAAC,CAAS,KAAK,CAAC,aAAa,CAAC,CAAC;AAG7D,MAAO,yCAAwJ,SAAQ,YAAkC,CAAA;AAC1L,IAAA,eAAe,GAAG,IAAI,eAAe,CAAyB,SAAS,CAAC;AACxE,IAAA,WAAW,GAAG,IAAI,eAAe,CAAiB,SAAS,CAAC;IAEtE,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AAEvD,IAAA,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CACpC,SAAS,CAAC,CAAC,UAA0B,KAAI;AACvC,QAAA,IAAI,UAAU,IAAI,IAAI,EAAE;AACtB,YAAA,OAAO,EAAE,CAAC,UAAU,CAAC;QACvB;aAAO;YACL,OAAO,IAAI,CAAC,SAAS;QACvB;IACF,CAAC,CAAC,EACF,oBAAoB,EAAE,EACtB,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CACzC,SAAS,CAAC,CAAC,CAAC,KACV,CAAC,CAAC,YAAY,CAAC,IAAI,CACjB,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,EAClB,GAAG,CAAC,CAAC,KAAK,KAAI;AACZ,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;IAC/B,CAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACf,CACF,CACF;AAEQ,IAAA,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;AAC1D,IAAA,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;AAE3E,IAAA,IAAI,aAAa,GAAA;QACf,OAAO,IAAI,CAAC,KAAK;IACnB;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,IAAK,oBAA8C;IACzF;AAEA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,IAAI,KAAK,GAAkB,IAAI,CAAC,aAAa,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK;AAEpF,QAAA,IAAI,KAAK,IAAI,IAAI,EAAE;YACjB,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC;YAElD,IAAI,eAAe,EAAE;gBACnB,KAAK,GAAG,eAAe,CAAC,KAAK,EAAE,KAAK,IAAK,eAAe,CAAC,GAAc;YACzE;QACF;AAEA,QAAA,OAAO,KAAK;IACd;IAEA,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;IAC7B;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;IAC7C;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;AAC3B,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE;IACjC;uGAlEW,yCAAyC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAzC,yCAAyC,EAAA,YAAA,EAAA,IAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAzC,yCAAyC,EAAA,UAAA,EAAA,CAAA;kBADrD;;;ACTD;;AAEG;AAYG,MAAO,6BAAyD,SAAQ,yCAA2E,CAAA;AACvJ,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,IAAI,QAAQ;IAClD;uGAHW,6BAA6B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA7B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,6BAA6B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAV9B;;;;;;AAMT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIU,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAXzC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE;;;;;;AAMT,EAAA,CAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,UAAU,EAAE;AACb,iBAAA;;;AClBD;;AAEG;AAQG,MAAO,8BAA+B,SAAQ,YAA6B,CAAA;IAC/E,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;AAC5D,YAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE;AAC5D,gBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE;AAChC,gBAAA,IAAI,CAAC,WAAW,CAAC,sBAAsB,EAAE;YAC3C;AACF,QAAA,CAAC,CAAC;IACJ;uGARW,8BAA8B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA9B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,8BAA8B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAN/B;;AAET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIU,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAP1C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE;;AAET,EAAA,CAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACFD;;AAEG;AAgBG,MAAO,6BAAyD,SAAQ,yCAAwE,CAAA;AAC3I,IAAA,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAC1C,SAAS,CAAC,CAAC,CAAC,KAAI;AACd,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,cAAc,EAAE;YACtC,OAAO,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC,CAAC;QAC9C;aAAO;AACL,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC;QAC7B;AACF,IAAA,CAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,gBAAgB,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;IAE5E,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;YAC1C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;AAC9B,QAAA,CAAC,CAAC;IACJ;uGAlBW,6BAA6B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA7B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,6BAA6B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAd9B;;;;;;;;;AAST,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACS,cAAc,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,OAAA,EAAA,UAAA,EAAA,eAAA,EAAA,UAAA,EAAA,SAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIb,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAfzC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE;;;;;;;;;AAST,EAAA,CAAA;oBACD,OAAO,EAAE,CAAC,cAAc,CAAC;oBACzB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACHK,MAAO,4BAA6B,SAAQ,YAA0D,CAAA;AACzF,IAAA,MAAM,GAAG,IAAI,eAAe,CAAwC,SAAS,CAAC;AAC9E,IAAA,MAAM,GAAG,IAAI,eAAe,CAA4B,SAAS,CAAC;AAE1E,IAAA,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;AACpE,IAAA,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;AAEpE,IAAA,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;AACnC,IAAA,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;AAE5C,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW;IAC/B;AAEA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW;IAC/B;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAClD;AAEA,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAClD;IACF;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;AACtB,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;IACxB;uGA/BW,4BAA4B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA5B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAT7B;;;;GAIT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACS,OAAO,oFAAE,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIf,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAVxC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE;;;;AAIT,EAAA,CAAA;AACD,oBAAA,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC;oBAC3B,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACdD;;;;AAIG;AAYG,MAAO,8BAA+B,SAAQ,YAA4D,CAAA;AACrG,IAAA,GAAG,GAAG,IAAI,kBAAkB,EAAE;AAC9B,IAAA,cAAc,GAAG,IAAI,oBAAoB,CAAC,KAAK,CAAC;IAEzD,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,SAAS,CAAC;AAChE,YAAA,IAAI,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,KAAK,SAAS;AAC5D,SAAA,CAAC;IACJ;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;AAC7B,QAAA,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;IACpB;uGAbW,8BAA8B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA9B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,8BAA8B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAV/B;;;;;AAKT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACS,mBAAmB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIlB,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAX1C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE;;;;;AAKT,EAAA,CAAA;oBACD,OAAO,EAAE,CAAC,mBAAmB,CAAC;oBAC9B,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACzBM,MAAM,sBAAsB,GAAG,WAAW;AAC1C,MAAM,kBAAkB,GAAG,QAAQ;AACnC,MAAM,mBAAmB,GAAG,SAAS;AACrC,MAAM,sBAAsB,GAAG,YAAY;AAC3C,MAAM,gBAAgB,GAAG,MAAM;AAC/B,MAAM,gBAAgB,GAAG,MAAM;AAC/B,MAAM,iBAAiB,GAAG,OAAO;AACjC,MAAM,mBAAmB,GAAG,SAAS;AACrC,MAAM,kBAAkB,GAAG,QAAQ;;ACM1C,MAAMC,mBAAiB,GAAG;IACxB,8BAA8B;IAC9B,8BAA8B;IAC9B,iCAAiC;IACjC,2BAA2B;IAC3B,6BAA6B;IAC7B,6BAA6B;IAC7B,2BAA2B;IAC3B,4BAA4B;IAC5B,8BAA8B;;IAE9B,YAAY;IACZ;CACD;MAqBY,0BAA0B,CAAA;uGAA1B,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAA1B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,YAjCrC,8BAA8B;YAC9B,8BAA8B;YAC9B,iCAAiC;YACjC,2BAA2B;YAC3B,6BAA6B;YAC7B,6BAA6B;YAC7B,2BAA2B;YAC3B,4BAA4B;YAC5B,8BAA8B;;YAE9B,YAAY;AACZ,YAAA,oBAAoB,gCAXpB,8BAA8B;YAC9B,8BAA8B;YAC9B,iCAAiC;YACjC,2BAA2B;YAC3B,6BAA6B;YAC7B,6BAA6B;YAC7B,2BAA2B;YAC3B,4BAA4B;YAC5B,8BAA8B;;YAE9B,YAAY;YACZ,oBAAoB,CAAA,EAAA,CAAA;AAsBT,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,YAhCrC,8BAA8B;YAC9B,iCAAiC;YACjC,2BAA2B;YAE3B,6BAA6B;YAG7B,8BAA8B;;YAE9B,YAAY;AACZ,YAAA,oBAAoB,EAMlB,YAAY,CAAC,QAAQ,CAAC;AACpB,gBAAA,QAAQ,EAAE;AACR,oBAAA,EAAE,IAAI,EAAE,sBAAsB,EAAE,SAAS,EAAE,8BAA8B,EAAE;AAC3E,oBAAA,EAAE,IAAI,EAAE,kBAAkB,EAAE,SAAS,EAAE,6BAA6B,EAAE;AACtE,oBAAA,EAAE,IAAI,EAAE,kBAAkB,EAAE,SAAS,EAAE,6BAA6B,EAAE;AACtE,oBAAA,EAAE,IAAI,EAAE,mBAAmB,EAAE,SAAS,EAAE,8BAA8B,EAAE;AACxE,oBAAA,EAAE,IAAI,EAAE,sBAAsB,EAAE,SAAS,EAAE,iCAAiC,EAAE;AAC9E,oBAAA,EAAE,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,2BAA2B,EAAE;AAClE,oBAAA,EAAE,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,2BAA2B,EAAE;AAClE,oBAAA,EAAE,IAAI,EAAE,iBAAiB,EAAE,SAAS,EAAE,4BAA4B,EAAE;AACpE,oBAAA,EAAE,IAAI,EAAE,mBAAmB,EAAE,SAAS,EAAE,8BAA8B;AACvE;aACF,CAAC;;YAnBJ,YAAY;YACZ,oBAAoB,CAAA,EAAA,CAAA;;2FAsBT,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAnBtC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;AACP,wBAAA,GAAGA,mBAAiB;wBACpB,YAAY,CAAC,QAAQ,CAAC;AACpB,4BAAA,QAAQ,EAAE;AACR,gCAAA,EAAE,IAAI,EAAE,sBAAsB,EAAE,SAAS,EAAE,8BAA8B,EAAE;AAC3E,gCAAA,EAAE,IAAI,EAAE,kBAAkB,EAAE,SAAS,EAAE,6BAA6B,EAAE;AACtE,gCAAA,EAAE,IAAI,EAAE,kBAAkB,EAAE,SAAS,EAAE,6BAA6B,EAAE;AACtE,gCAAA,EAAE,IAAI,EAAE,mBAAmB,EAAE,SAAS,EAAE,8BAA8B,EAAE;AACxE,gCAAA,EAAE,IAAI,EAAE,sBAAsB,EAAE,SAAS,EAAE,iCAAiC,EAAE;AAC9E,gCAAA,EAAE,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,2BAA2B,EAAE;AAClE,gCAAA,EAAE,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,2BAA2B,EAAE;AAClE,gCAAA,EAAE,IAAI,EAAE,iBAAiB,EAAE,SAAS,EAAE,4BAA4B,EAAE;AACpE,gCAAA,EAAE,IAAI,EAAE,mBAAmB,EAAE,SAAS,EAAE,8BAA8B;AACvE;yBACF;AACF,qBAAA;AACD,oBAAA,OAAO,EAAEA;AACV,iBAAA;;;ACzCD,MAAMA,mBAAiB,GAAG,CAAC,8BAA8B,EAAE,gCAAgC,EAAE,4CAA4C,CAAC;MAY7H,qCAAqC,CAAA;uGAArC,qCAAqC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAArC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qCAAqC,EAAA,OAAA,EAAA,CAZvB,8BAA8B,EAAE,gCAAgC,EAAE,4CAA4C,EAKrI,0BAA0B,EAAAD,IAAA,CAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CALH,8BAA8B,EAAE,gCAAgC,EAAE,4CAA4C,CAAA,EAAA,CAAA;AAY5H,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qCAAqC,EAAA,OAAA,EAAA,CAZvB,8BAA8B,EAAE,gCAAgC,EAKvF,0BAA0B;YAC1B,YAAY,CAAC,QAAQ,CAAC;gBACpB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,8BAA8B,EAAE;aAC7E,CAAC,CAAA,EAAA,CAAA;;2FAIO,qCAAqC,EAAA,UAAA,EAAA,CAAA;kBAVjD,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;AACP,wBAAA,GAAGC,mBAAiB;wBACpB,0BAA0B;wBAC1B,YAAY,CAAC,QAAQ,CAAC;4BACpB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,8BAA8B,EAAE;yBAC7E;AACF,qBAAA;AACD,oBAAA,OAAO,EAAEA;AACV,iBAAA;;;ACmCD;;AAEG;AACG,SAAU,WAAW,CAAkD,WAAc,EAAA;AACzF,IAAA,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE;AACpB,QAAA,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC;AAC1B,QAAA,MAAM,IAAI,KAAK,CAAC,CAAA,qBAAA,CAAuB,CAAC;IAC1C;AAEA,IAAA,OAAO,WAAW;AACpB;AAEA;;;;;;AAMG;AACG,SAAU,4BAA4B,CAA4B,WAAkI,EAAE,QAA0C,EAAA;AACpP,IAAA,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,WAAW;IAC5C,MAAM,KAAK,GAAG,wBAAwB,CAAC,WAAW,EAAE,QAAQ,CAAC;IAE7D,OAAO;QACL,KAAK;QACL,WAAW;QACX;KACD;AACH;AAEO,MAAM,+BAA+B,GAA0C,CAAC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc;AAC7J,MAAM,qCAAqC,GAA2D;AAC3G,IAAA,UAAU,EAAE;;MAGD,sBAAsB,GAAG,oBAAoB,CAA8B,qCAAqC;AAEtH,MAAM,iDAAiD,GAAG,sBAAsB,CAA8B;AACnH,IAAA,MAAM,EAAE;AACT,CAAA;AAEK,SAAU,wBAAwB,CAAwD,WAAwC,EAAE,QAA0C,EAAA;IAClL,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,sBAAsB,CAAC,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;AAC7H,IAAA,MAAM,UAAU,GAAG,YAAY,CAAC,CAAC,WAAW,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;IAE/E,MAAM,MAAM,GAAG,cAAc,CAAC;AAC5B,QAAA,GAAG,QAAQ;QACX,KAAK;QACL,WAAW;QACX,QAAQ;QACR,QAAQ;QACR,WAAW;QACX;AACD,KAAA,CAAU;;AAGX,IAAA,IAAI,YAAY,IAAI,IAAI,EAAE;AACxB,QAAA,IAAI,YAAY,KAAK,KAAK,EAAE;YAC1B,MAAM,CAAC,UAAU,GAAG;gBAClB,GAAG,MAAM,CAAC,UAAU;AACpB,gBAAA,GAAG,oCAAoC;aACxC;QACH;aAAO;AAEH,YAAA,MAAM,CAAC,UAGR,CAAC,cAAc,CAAC,GAAG,YAAY;QAClC;IACF;AAEA,IAAA,OAAO,MAAM;AACf;AAEA;;AAEG;SACa,oCAAoC,GAAA;;IAElD,OAAO;AACL,QAAA,IAAI,EAAE,UAAU;AAChB,QAAA,YAAY,EAAE;KACf;AACH;AAwBM,SAAU,wBAAwB,CAAC,KAAoC,EAAA;IAC3E,MAAM,UAAU,GAAkB,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC;IAC3D,MAAM,eAAe,GAAuB,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC;AAC1E,IAAA,MAAM,QAAQ,GAAmC,KAAK,CAAC,QAAQ;AAC/D,IAAA,IAAI,MAAuC;IAE3C,IAAI,QAAQ,IAAI,UAAU,CAAC,MAAM,IAAI,eAAe,CAAC,MAAM,EAAE;QAC3D,MAAM,GAAG,EAAE;AAEX,QAAA,IAAI,UAAU,CAAC,MAAM,EAAE;YACrB,MAAM,CAAC,UAAU,GAAG;AAClB,gBAAA,UAAU,EAAE;aACb;QACH;AAEA,QAAA,IAAI,eAAe,CAAC,MAAM,EAAE;YAC1B,MAAM,CAAC,UAAU,GAAG;AAClB,gBAAA,UAAU,EAAE;aACb;QACH;QAEA,IAAI,QAAQ,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE;YAC1C,MAAM,CAAC,UAAU,GAAG;gBAClB;aACD;QACH;IACF;AAEA,IAAA,OAAO,MAAM;AACf;;ACrLM,SAAU,kBAAkB,CAAc,MAAyC,EAAA;IACvF,MAAM,EAAE,GAAG,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,MAAM;IAEtD,MAAM,WAAW,GAAG,WAAW,CAAC;QAC9B,GAAG;AACH,QAAA,IAAI,EAAE,eAAe;QACrB,GAAG,4BAA4B,CAAC,MAAM,EAAE;YACtC,cAAc;YACd;SACD;AACF,KAAA,CAAC;AAEF,IAAA,OAAO,WAAW;AACpB;;ACGA;;AAEG;MACU,gCAAgC,CAAA;AAC1B,IAAA,OAAO,GAAG,IAAI,GAAG,EAA4F;AAErH,IAAA,QAAQ;AAEjB,IAAA,WAAA,CAAY,OAAsB,EAAA;AAChC,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;IACzB;AAEA;;;;AAIG;IACH,KAAK,CAAI,GAAyC,EAAE,MAAkD,EAAA;QACpG,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,KAAK;AACvD,QAAA,MAAM,YAAY,GAA8D;AAC9E,YAAA,GAAG,YAAY;AACf,YAAA,GAAG,MAAM;YACT;SACM;QAER,IAAI,YAAY,CAAC,cAAc,IAAI,MAAM,CAAC,cAAc,EAAE;YACxD,YAAY,CAAC,cAAc,GAAG,aAAa,CAAC,CAAC,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CACpG,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAI;AACb,gBAAA,MAAM,MAAM,GAAG;AACb,oBAAA,GAAG,CAAC;AACJ,oBAAA,GAAG;iBACJ;;AAGD,gBAAA,OAAO,MAAM;AACf,YAAA,CAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACf;QACH;;AAIA,QAAA,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;IAC1B;IAEA,QAAQ,CAAI,GAAyC,EAAE,MAAkD,EAAA;QACvG,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC;QAEjD,IAAI,CAAC,KAAK,CAAC;YACT,GAAG,YAAY,CAAC,KAAK;AACrB,YAAA,GAAG,MAAM;YACT;AACD,SAAA,CAAC;IACJ;AAEA,IAAA,kBAAkB,CAAC,GAAyC,EAAA;QAC1D,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;QAE1C,IAAI,CAAC,YAAY,EAAE;AACjB,YAAA,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,CAAA,qCAAA,CAAuC,CAAC;QACzF;AAEA,QAAA,OAAO,YAAY;IACrB;IAEA,wBAAwB,CAA0E,GAAyC,EAAE,MAA6D,EAAA;QACxM,OAAO,IAAI,CAAC,KAAK,CAAC;AAChB,YAAA,cAAc,EAAE,IAAI,CAAC,+BAA+B,CAAC,GAAG,EAAE,CAAC,CAAI,KAAK,qBAAqB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AACrG,YAAA,GAAG,MAAM;YACT;AACD,SAAA,CAAC;IACJ;AAEA,IAAA,cAAc,CAAwG,GAAyC,EAAE,MAA6D,EAAE,OAAA,GAAuC,CAAC,CAAI,KAAM,CAAyC,EAAE,QAAQ,EAAE,EAAA;QACrU,OAAO,IAAI,CAAC,KAAK,CAAC;YAChB,cAAc,EAAE,IAAI,CAAC,+BAA+B,CAAC,GAAG,EAAE,OAAO,CAAC;AAClE,YAAA,GAAG,MAAM;YACT;AACD,SAAA,CAAC;IACJ;AAEA,IAAA,KAAK,CAAI,MAAmD,EAAA;AAC1D,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG;AAEtB,QAAA,MAAM,KAAK,GAAuD;YAChE,GAAG;AACH,YAAA,KAAK,EAAE;SACR;QAED,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;IAC9B;;IAGA,KAAK,GAAA;AACH,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAI;AACzD,YAAA,OAAO,kBAAkB,CAAC,KAAK,CAAC;AAClC,QAAA,CAAC,CAAC;IACJ;;AAGA,IAAA,qBAAqB,CAAwG,KAAkD,EAAA;QAC7K,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACvC;IAEA,wBAAwB,CAAqI,GAAM,EAAE,SAAwD,EAAA;AAC3N,QAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,CAAC,IAAI,KAAI;AACzC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAiB;AACtC,YAAA,MAAM,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC;YAEjC,OAAO;gBACL,IAAI;AACJ,gBAAA,GAAG;aACJ;AACH,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,+BAA+B,CAAwG,GAAyC,EAAE,OAAA,GAAuC,CAAC,CAAI,KAAM,CAAyC,EAAE,QAAQ,EAAE,EAAA;QACvR,SAAS,aAAa,CAAC,KAAoB,EAAA;YACzC,OAAO,KAAK,IAAI,KAAK;QACvB;QAEA,OAAO,IAAI,CAAC,wBAAwB,CAAC,GAAG,EAAE,CAAC,KAAQ,MAAM,EAAE,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IACrG;AACD;;AChIK,MAAO,8BAA4C,SAAQ,SAA+C,CAAA;AAC9G,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc;IAClC;uGAHW,8BAA8B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA9B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,8BAA8B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAP/B;;AAET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACS,qBAAqB,EAAA,QAAA,EAAA,gDAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIpB,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAR1C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE;;AAET,EAAA,CAAA;oBACD,OAAO,EAAE,CAAC,qBAAqB,CAAC;oBAChC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACbD,MAAMA,mBAAiB,GAAG,CAAC,8BAA8B,CAAC;MAW7C,iCAAiC,CAAA;uGAAjC,iCAAiC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;wGAAjC,iCAAiC,EAAA,OAAA,EAAA,CAXnB,8BAA8B,EAAAD,IAAA,CAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAA9B,8BAA8B,CAAA,EAAA,CAAA;AAW5C,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iCAAiC,YAPvCC,mBAAiB,EACpB,YAAY,CAAC,QAAQ,CAAC;gBACpB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,8BAA8B,EAAE;aACzE,CAAC,CAAA,EAAA,CAAA;;2FAIO,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAT7C,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;AACP,wBAAA,GAAGA,mBAAiB;wBACpB,YAAY,CAAC,QAAQ,CAAC;4BACpB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,8BAA8B,EAAE;yBACzE;AACF,qBAAA;AACD,oBAAA,OAAO,EAAEA;AACV,iBAAA;;;ACVK,SAAU,cAAc,CAAc,MAA+B,EAAA;IACzE,OAAO;AACL,QAAA,IAAI,EAAE,WAAW;AACjB,QAAA,cAAc,EAAE;KACjB;AACH;;ACDM,SAAU,YAAY,CAA0J,MAAmC,EAAA;AACvN,IAAA,MAAM,EAAE,GAAG,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM;AACrE,IAAA,OAAO,WAAW,CAAC;QACjB,GAAG;AACH,QAAA,IAAI,EAAE,cAAc;QACpB,GAAG,4BAA4B,CAAC,MAAM,EAAE;YACtC,kBAAkB;YAClB,OAAO;YACP,MAAM;YACN;SACD;AACF,KAAA,CAAC;AACJ;;ACUA;;AAEG;AAOG,MAAO,yBAAmL,SAAQ,SAA0D,CAAA;AAC/O,IAAA,kBAAkB,GAAG,IAAI,kBAAkB,EAAE;AAC7C,IAAA,YAAY,GAAG,IAAI,kBAAkB,EAAE;AAEvC,IAAA,eAAe,GAAG,IAAI,eAAe,CAAyB,SAAS,CAAC;IAChF,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AAEvD,IAAA,kBAAkB,GAA2B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChK,IAAA,OAAO,GAAoB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;AAEzF,IAAA,sBAAsB,GAAG,IAAI,eAAe,CAA6B,SAAS,CAAC;IAC3F,mBAAmB,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAE9E,IAAA,OAAO,GAA+C,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAC1F,GAAG,CAAC,CAAC,cAAc,KAAI;AACrB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ;AAC9B,QAAA,MAAM,MAAM,GAAmC;YAC7C,cAAc;AACd,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;gBACpC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;AAE1C,gBAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;AACpB,oBAAA,IAAI,CAAC,YAAY,CAAC,YAAY,GAAG,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,QAAQ,EAAE,CAAC;gBAChF;;gBAGA,IAAI,CAAC,kBAAkB,CAAC,YAAY,GAAG,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;YAC9G;SACD;AAED,QAAA,OAAO,MAAM;IACf,CAAC,CAAC,CACH;AAEQ,IAAA,2BAA2B,GAAoD,IAAI,CAAC,OAAO,CAAC,IAAI,CACvG,+BAA+B,EAAE,EACjC,GAAG,CAAC,CAAC,MAAM,KAAI;AACb,QAAA,OAAO,gCAAgC,CAAC,iCAAiC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;AAC/G,IAAA,CAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;AACrC,IAAA,gCAAgC,GAAG,QAAQ,CAAC,IAAI,CAAC,2BAA2B,CAAC;AAEtF,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK;IAC/B;AAEA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW;IACrC;AAEA,IAAA,IAAI,kBAAkB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,kBAAkB;IAC5C;AAEA,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO;IACjC;AAEA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ;IAClC;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;QAC3C,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC;IAC3D;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE;AAC/B,QAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE;AACjC,QAAA,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE;IACxC;AAEA,IAAA,kBAAkB,CAAC,IAA2B,EAAA;AAC5C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC;QAC1E,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;AAChD,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;IACxB;AAEA,IAAA,SAAS,CAAC,MAAkB,EAAA;AAC1B,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK;QAE5C,IAAI,aAAa,IAAI,IAAI,IAAI,kBAAkB,CAAC,aAAa,EAAE,MAAM,CAAC,EAAE;AACtE,YAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC;AACjC,YAAA,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;AAC9B,YAAA,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE;QAClC;IACF;uGA3FW,yBAAyB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,+FCvCtC,ydAYA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDuBY,qBAAqB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,iCAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,MAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,sCAAA,EAAA,QAAA,EAAA,+DAAA,EAAA,MAAA,EAAA,CAAA,+BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,qBAAqB,0HAAE,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAI7D,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBANrC,SAAS;8BAEC,CAAC,qBAAqB,EAAE,qBAAqB,EAAE,gBAAgB,CAAC,EAAA,eAAA,EACxD,uBAAuB,CAAC,MAAM,EAAA,UAAA,EACnC,IAAI,EAAA,QAAA,EAAA,ydAAA,EAAA;;;AEjClB,MAAME,mBAAiB,GAAG,CAAC,yBAAyB,CAAC;MAWxC,+BAA+B,CAAA;uGAA/B,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;wGAA/B,+BAA+B,EAAA,OAAA,EAAA,CAXjB,yBAAyB,EAAAD,IAAA,CAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAzB,yBAAyB,CAAA,EAAA,CAAA;AAWvC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,+BAA+B,YAPrCC,mBAAiB,EACpB,YAAY,CAAC,QAAQ,CAAC;gBACpB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,yBAAyB,EAAE;aACvE,CAAC,CAAA,EAAA,CAAA;;2FAIO,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAT3C,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;AACP,wBAAA,GAAGA,mBAAiB;wBACpB,YAAY,CAAC,QAAQ,CAAC;4BACpB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,yBAAyB,EAAE;yBACvE;AACF,qBAAA;AACD,oBAAA,OAAO,EAAEA;AACV,iBAAA;;;ACmFD;;AAEG;AAEG,MAAO,qCAA6F,SAAQC,WAAkE,CAAA;IACzK,cAAc,GAAG,SAAS,CAAmB,UAAU,2DAAI,IAAI,EAAE,QAAQ,EAAA,CAAG;AAE5E,IAAA,SAAS,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC;AAEvB,IAAA,eAAe,GAAG,IAAI,eAAe,CAAyB,SAAS,CAAC;IAChF,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AAE/C,IAAA,uBAAuB,GAAG,IAAI,kBAAkB,EAAE;IAClD,eAAe,GAAG,IAAI,eAAe,CAA+C,IAAI,GAAG,EAAE,CAAC;AAEtG,IAAA,iBAAiB,GAA8B,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IACrG,uBAAuB,GAA8B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,oBAAoB,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IAE3I,8BAA8B,GAAgF,IAAI,CAAC,YAAY,CAAC,IAAI,CAC3I,KAAK,EAAE,EACP,SAAS,CAAC,MACR,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CACtB,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,+BAA+B,CAAC,CAAC,CAAC,CAAC,EACzD,qBAAqB,EAAE,CACxB,CACF,EACD,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,kBAAkB,GAAwB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE7J,yBAAyB,GAAkE,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;AAExK;;AAEG;AACM,IAAA,OAAO,GAAoB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;AAE1G;;AAEG;IACM,mBAAmB,GAAgF,aAAa,CAAC,CAAC,IAAI,CAAC,yBAAyB,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAC5K,SAAS,CAAC,CAAC,CAAC,aAAa,EAAE,aAAa,CAAC,KAAI;QAC3C,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,aAAa,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC7F,MAAM,qBAAqB,GAAQ,EAAE;AAErC,QAAA,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;YAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;AAChC,YAAA,MAAM,YAAY,GAA2D,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAE3G,IAAI,CAAC,YAAY,EAAE;AACjB,gBAAA,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC;YAC/B;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,qBAAqB,CAAC,MAAM,EAAE;AAChC,YAAA,OAAO,IAAI,CAAC,0BAA0B,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAChE,GAAG,CAAC,CAAC,CAAC,KACJ,sBAAsB,CAAC,CAAC,EAAE;AACxB,gBAAA,QAAQ,EAAE,CAAC,YAA6E,KAAI;oBAC1F,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC;AACjE,oBAAA,OAAO,CAAC,GAAG,aAAa,EAAE,GAAG,YAAY,CAAC;gBAC5C;aACD,CAAC,CACH,CACF;QACH;aAAO;AACL,YAAA,OAAO,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;QACzC;IACF,CAAC,CAAC,CACH;AAED;;AAEG;AACM,IAAA,2BAA2B,GAAgF,IAAI,CAAC,yBAAyB,CAAC,IAAI,CACrJ,SAAS,CAAC,CAAC,MAAM,KACf,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAC/B,SAAS,CAAC,CAAC,IAAI,KACb,aAAa,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAC9E,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,YAAY,CAAC,KACzB,sBAAsB,CAAC,YAAY,EAAE;AACnC,QAAA,QAAQ,EAAE,CAAC,aAAgE,KAAI;YAC7E,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;YACrE,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC/E;AACD,KAAA,CAAC,CACH,EACD,qBAAqB,EAAE,CACxB,CACF,CACF,CACF,EACD,WAAW,CAAC,CAAC,CAAC,CACf;IAEQ,sBAAsB,GAAkE,IAAI,CAAC,2BAA2B,CAAC,IAAI,CACpI,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,EACpB,WAAW,EAAE,EACb,WAAW,CAAC,CAAC,CAAC,CACf;IAEQ,MAAM,GAA8C,aAAa,CAAC,CAAC,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAC1H,GAAG,CAAC,CAAC,CAAC,aAAa,EAAE,MAAM,CAAC,KAAI;QAC9B,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9E,QAAA,IAAI,KAAK,GAAkC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAErI,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QAC/B;AAEA,QAAA,OAAO,KAAK;AACd,IAAA,CAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACf;IAEQ,kBAAkB,GAAyD,IAAI,CAAC,yBAAyB,CAAC,IAAI,CACrH,SAAS,CAAC,MACR,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,KAAK,EAAE,EACP,GAAG,CAAC,CAAC,CAAC,KAAK,aAAa,CAAC,CAAC,CAAC,CAAC,EAC5B,qBAAqB,EAAE,EACvB,WAAW,CAAC,CAAC,CAAC,CACf,CACF,CACF;AAED;;AAEG;AACM,IAAA,OAAO,GAAG,uBAAuB,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,kBAAkB,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAC;AAEhG,IAAA,wBAAwB,GAAyD,IAAI,CAAC,MAAM,CAAC,IAAI,CACxG,GAAG,CAAC,CAAC,CAAC,KAAK,aAAa,CAAC,CAAC,CAAC,CAAC,EAC5B,qBAAqB,EAAE,EACvB,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,iBAAiB,GAAG,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,mCAAmC,EAAE,EAAE,oBAAoB,EAAE,CAAC;AAE9H;;AAEG;AACM,IAAA,oBAAoB,GAAG,uBAAuB,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,2BAA2B,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC;AAErH,IAAA,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;AACnC,IAAA,sBAAsB,GAAG,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC;AAElE,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ;IAC5B;AAEA,IAAA,IAAI,oBAAoB,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ;IACvC;AAEA,IAAA,IAAI,aAAa,GAAA;QACf,OAAO,IAAI,CAAC,KAAK;IACnB;AAEA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,IAAI,IAAI;IAC/C;AAEA,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,IAAI,IAAI;IAChD;AAEA,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,YAAY,KAAK,KAAK,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK;IAClE;AAEA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW;IACvC;AAEA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,IAAK,IAAI,CAAC,GAAc,CAAC;IACzE;AAEA,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK;IACzB;AAEA,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,QAAQ,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,cAAc,CAAC,IAAI,IAAI,CAAC,GAAG;IAC7D;AAEA,IAAA,IAAI,mCAAmC,GAAA;AACrC,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,mCAAmC,IAAI,KAAK;IACxE;AAEA,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS;IACrC;AAEA,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,KAAK,CAAC,CAAC,KAAK,CAAiB,CAAC;IACtE;AAEA,IAAA,IAAI,eAAe,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,eAAe;IAC3C;AAEA,IAAA,IAAI,eAAe,GAAA;QACjB,OAAO,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC;IACjD;AAEA,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IACjF;AAEA,IAAA,IAAI,mBAAmB,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,mBAAmB,IAAI,IAAI;IACvD;AAEA,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,IAAI,EAA0C;AAE9C,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAC5B,YAAA,EAAE,GAAG,CAAC,UAAyB,EAAE,MAA8C,KAAqB;AAClG,gBAAA,IAAI,MAAuB;gBAE3B,IAAI,UAAU,EAAE;oBACd,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,MAAM,CAAC;gBAClD;qBAAO;AACL,oBAAA,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;gBACzC;AAEA,gBAAA,OAAO,MAAM;AACf,YAAA,CAAC;QACH;aAAO;AACL,YAAA,EAAE,GAAG,IAAI,CAAC,cAAc;QAC1B;AAEA,QAAA,OAAO,EAAE;IACX;AAEA,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC;IACtF;AAEA,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU;IACtC;AAEA,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE;IAClE;AAEA,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY;IACxC;AAEA,IAAA,IAAI,qBAAqB,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,qBAAqB;IACjD;AAEA,IAAA,0BAA0B,CAAC,MAAW,EAAA;QACpC,OAAO,IAAI,CAAC,+BAA+B,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACjF;AAEA,IAAA,+BAA+B,CAAC,MAAuC,EAAA;AACrE,QAAA,OAAO,IAAI,CAAC,8BAA8B,CAAC,MAAM,CAAC,CAAC,IAAI,CACrD,GAAG,CAAC,CAAC,aAAgE,KAAK,aAAa,CAAC,aAAa,CAAC,CAAC,EACvG,qBAAqB,EAAE,EACvB,WAAW,CAAC,CAAC,CAAC,CACf;IACH;AAEA,IAAA,8BAA8B,CAAC,MAAuC,EAAA;QACpE,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAC9B,QAAQ,CAAC,CAAC,UAAU,KAAI;YACtB,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAuC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAgG,CAAC;YAEvQ,MAAM;;YAEJ,QAAQ,EAAE,UAAU,EACpB,QAAQ,EAAE,YAAY,EACvB,GAAG,cAAc,CAAC,aAAa,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAEvD,YAAA,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;;gBAE3B,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE5E,gBAAA,OAAO,gBAAgB,CAAC,IAAI,CAC1B,KAAK,EAAE,EACP,GAAG,CAAC,CAAC,cAAc,KAAI;oBACrB,MAAM,sBAAsB,GAAsD,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;wBACxG,CAAqD,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC;AACzF,wBAAA,OAAO,CAAoD;AAC7D,oBAAA,CAAC,CAAC;;AAGF,oBAAA,MAAM,qBAAqB,GAA2D,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;oBACrI,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;;oBAGtF,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;;oBAGrE,MAAM,gBAAgB,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;AAGtF,oBAAA,OAAO,gBAAgB;gBACzB,CAAC,CAAC,CACH;YACH;iBAAO;;AAEL,gBAAA,OAAO,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAkE;YACzG;QACF,CAAC,CAAC,CACH;IACH;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;AAE3C,QAAA,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,EAAE;YACtC,IAAI,CAAC,uBAAuB,CAAC,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;QAC9H;;QAGA,IAAI,CAAC,OAAO,CAAC;AACV,aAAA,IAAI,CACH,KAAK,CAAC,EAAE,CAAC,EACT,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAChB,KAAK,EAAE;aAER,SAAS,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE;AAChC,QAAA,CAAC,CAAC;IACN;IAES,WAAW,GAAA;QAClB,KAAK,CAAC,WAAW,EAAE;AACnB,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE;AAC/B,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE;AAC/B,QAAA,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE;AACtC,QAAA,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE;IACrC;AAEU,IAAA,sBAAsB,CAAC,kBAAmC,EAAA;QAClE,MAAM,KAAK,GAAQ,kBAAkB,IAAI,IAAI,GAAI,EAAU,CAAC,MAAM,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC;AAC5F,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,QAAQ,CAAC,KAAQ,EAAA;AACf,QAAA,IAAI,SAAc;AAElB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,SAAS,GAAG,CAAC,KAAK,CAAC;QACrB;aAAO;YACL,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;QACrC;AAEA,QAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;IAC3B;AAEA,IAAA,WAAW,CAAC,KAAQ,EAAA;QAClB,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC;AAC/E,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;IACxB;AAEA,IAAA,SAAS,CAAC,MAAW,EAAA;;AAEnB,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,MAAM,GAAG,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC;QACxD;AAEA,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;QAC/C;AAEA,QAAA,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC;IACrC;;AAGU,IAAA,sBAAsB,CAAC,MAAW,EAAA;QAC1C,IAAI,QAAQ,GAAY,MAAM;AAE9B,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACtB,QAAQ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;QACpD;AAEA,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACnC,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE;AAChC,QAAA,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;IAChC;uGAjYW,qCAAqC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qCAAqC,qIAC0B,QAAQ,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FADvE,qCAAqC,EAAA,UAAA,EAAA,CAAA;kBADjD;AAEuD,SAAA,CAAA,EAAA,cAAA,EAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,UAAU,EAAA,EAAA,GAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AC3FtF;;AAEG;AAOG,MAAO,iCAAqC,SAAQ,qCAAwC,CAAA;AAChG,IAAA,WAAW,CAAC,IAA8B,EAAA;QACxC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;AAChD,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;YACxC;iBAAO;gBACL,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;YACrC;QACF;IACF;uGATW,iCAAiC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iCAAiC,+FCpB9C,8uDAsCA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDtBY,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,oFAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,mJAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,qLAAE,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,UAAU,uFAAE,qBAAqB,EAAA,QAAA,EAAA,gDAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIxJ,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAN7C,SAAS;8BAEC,CAAC,cAAc,EAAE,gBAAgB,EAAE,WAAW,EAAE,mBAAmB,EAAE,aAAa,EAAE,cAAc,EAAE,mBAAmB,EAAE,UAAU,EAAE,qBAAqB,CAAC,mBACnJ,uBAAuB,CAAC,MAAM,EAAA,UAAA,EACnC,IAAI,EAAA,QAAA,EAAA,8uDAAA,EAAA;;;AEJlB;AASM,MAAO,qCAAyC,SAAQ,wCAAkE,CAAA;AAC9H,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,CAAC;AACJ,YAAA,cAAc,EAAE;AACjB,SAAA,CAAC;IACJ;uGALW,qCAAqC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qCAAqC,qFAHrC,yBAAyB,CAAC,qCAAqC,CAAC,6jBAFjE,oCAAoC,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,eAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAKnC,qCAAqC,EAAA,UAAA,EAAA,CAAA;kBARjD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,wCAAwC;AAClD,oBAAA,QAAQ,EAAE,qDAAqD;oBAC/D,OAAO,EAAE,CAAC,oCAAoC,CAAC;oBAC/C,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,SAAS,EAAE,yBAAyB,CAAA,qCAAA,CAAuC;AAC3E,oBAAA,UAAU,EAAE;AACb,iBAAA;;AASD;;AAEG;AASG,MAAO,yCAA6C,SAAQ,qCAA0C,CAAA;AACjG,IAAA,6BAA6B,GAAG,MAAM,EAAC,6BAAgC,EAAC;;AAIxE,IAAA,MAAM,GAAgC;AAC7C,QAAA,cAAc,EAAE;KACjB;AAED,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,CAAC,IAAI,CAAC,6BAA6B,CAAC,WAAW;IACxD;AAEA,IAAA,IAAI,aAAa,GAAA;QACf,IAAI,aAAa,GAAgC,QAAQ;AAEzD,QAAA,IAAI,IAAI,CAAC,6BAA6B,CAAC,QAAQ,IAAI,IAAI,CAAC,6BAA6B,CAAC,mCAAmC,EAAE;YACzH,aAAa,GAAG,MAAM;QACxB;AAEA,QAAA,OAAO,aAAa;IACtB;AAES,IAAA,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI;;IAEjC,GAAG,CAAC,CAAC,CAAC,KAAK,yBAAyB,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EACrD,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;uGA7BjC,yCAAyC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yCAAyC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,SAAA,EAJzC,kBAAkB,CAAC,yCAAyC,CAAC,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAH9D;;AAET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAES,yCAAyC,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAGxC,yCAAyC,EAAA,UAAA,EAAA,CAAA;kBARrD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE;;AAET,EAAA,CAAA;oBACD,SAAS,EAAE,kBAAkB,CAAA,yCAAA,CAA2C;oBACxE,OAAO,EAAE,CAAC,yCAAyC,CAAC;AACpD,oBAAA,UAAU,EAAE;AACb,iBAAA;;AAiDK,MAAO,6CAAiD,SAAQ,qCAAwE,CAAA;AACnI,IAAA,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK;AAC5B,IAAA,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ;AAClC,IAAA,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI;uGAHxB,6CAA6C,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA7C,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,6CAA6C,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAf9C;;;;;;;;;;AAUT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACS,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIZ,6CAA6C,EAAA,UAAA,EAAA,CAAA;kBAhBzD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE;;;;;;;;;;AAUT,EAAA,CAAA;oBACD,OAAO,EAAE,CAAC,aAAa,CAAC;oBACxB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,UAAU,EAAE;AACb,iBAAA;;AAOD;AACA;;AAEG;AAOG,MAAO,6BAAiC,SAAQ,qCAAwC,CAAA;AAC5F,IAAA,iBAAiB,CAAC,KAAc,EAAA;AAC9B,QAAA,MAAM,KAAK,GAAI,KAA+D,CAAC,KAAK;AACpF,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC;AAClD,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;IACxB;uGALW,6BAA6B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA7B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,6BAA6B,+FC1G1C,0uCA4BA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDLa,qCAAqC,EAAA,QAAA,EAAA,wCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA+EC,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,iNAAE,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,UAAU,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,mBAAmB,mKAAE,qBAAqB,EAAA,QAAA,EAAA,gDAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIhK,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBANzC,SAAS;8BAEC,CAAC,qCAAqC,EAAE,gBAAgB,EAAE,WAAW,EAAE,mBAAmB,EAAE,cAAc,EAAE,UAAU,EAAE,mBAAmB,EAAE,qBAAqB,CAAC,mBAC3J,uBAAuB,CAAC,MAAM,EAAA,UAAA,EACnC,IAAI,EAAA,QAAA,EAAA,0uCAAA,EAAA;;;AEnGlB,MAAMF,mBAAiB,GAAG,CAAC,iCAAiC,EAAE,6BAA6B,EAAE,qCAAqC,EAAE,yCAAyC,EAAE,6CAA6C,CAAC;MAchN,gCAAgC,CAAA;uGAAhC,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAAhC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gCAAgC,YAdlB,iCAAiC,EAAE,6BAA6B,EAAE,qCAAqC,EAAE,yCAAyC,EAAE,6CAA6C,EAAAD,IAAA,CAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAjM,iCAAiC,EAAE,6BAA6B,EAAE,qCAAqC,EAAE,yCAAyC,EAAE,6CAA6C,CAAA,EAAA,CAAA;AAc/M,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gCAAgC,YAVtCC,mBAAiB,EACpB,YAAY,CAAC,QAAQ,CAAC;AACpB,gBAAA,KAAK,EAAE;AACL,oBAAA,EAAE,IAAI,EAAE,mBAAmB,EAAE,SAAS,EAAE,iCAAiC,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE;AACrG,oBAAA,EAAE,IAAI,EAAE,mBAAmB,EAAE,SAAS,EAAE,6BAA6B,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC;AAChG;aACF,CAAC,CAAA,EAAA,CAAA;;2FAIO,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAZ5C,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;AACP,wBAAA,GAAGA,mBAAiB;wBACpB,YAAY,CAAC,QAAQ,CAAC;AACpB,4BAAA,KAAK,EAAE;AACL,gCAAA,EAAE,IAAI,EAAE,mBAAmB,EAAE,SAAS,EAAE,iCAAiC,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE;AACrG,gCAAA,EAAE,IAAI,EAAE,mBAAmB,EAAE,SAAS,EAAE,6BAA6B,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC;AAChG;yBACF;AACF,qBAAA;AACD,oBAAA,OAAO,EAAEA;AACV,iBAAA;;;ACXK,SAAU,qBAAqB,CAA2B,MAAqC,EAAA;AACnG,IAAA,MAAM,EAAE,GAAG,EAAE,iBAAiB,EAAE,GAAG,MAAM;AACzC,IAAA,OAAO,WAAW,CAAC;QACjB,GAAG;AACH,QAAA,IAAI,EAAE,mBAAmB;QACzB,GAAG,4BAA4B,CAAC,MAAM,EAAE;AACtC,YAAA,GAAG,iBAAiB;AACpB,YAAA,GAAG,MAAM;AACT,YAAA,YAAY,EAAE;SACf;AACF,KAAA,CAAC;AACJ;AAEM,SAAU,qBAAqB,CAA2B,MAAqC,EAAA;AACnG,IAAA,MAAM,EAAE,GAAG,EAAE,iBAAiB,EAAE,GAAG,MAAM;AACzC,IAAA,OAAO,WAAW,CAAC;QACjB,GAAG;AACH,QAAA,IAAI,EAAE,mBAAmB;QACzB,GAAG,4BAA4B,CAAC,MAAM,EAAE;AACtC,YAAA,GAAG,iBAAiB;AACpB,YAAA,GAAG,MAAM;AACT,YAAA,YAAY,EAAE;SACf;AACF,KAAA,CAAC;AACJ;;AC1BO,MAAM,kDAAkD,GAAoE,0BAA0B,CAAC;IAC5J,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;AAC7B,IAAA,eAAe,EAAE;AAClB,CAAA;AAEK,SAAU,oCAAoC,CAAI,UAAyB,EAAE,MAA2C,EAAA;AAC5H,IAAA,IAAI,cAAmD;IAEvD,IAAI,UAAU,EAAE;AACd,QAAA,cAAc,GAAG,kDAAkD,CAAC,UAAU,EAAE,MAAM,CAAC;IACzF;SAAO;QACL,cAAc,GAAG,MAAM;IACzB;AAEA,IAAA,OAAO,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;AAC/C;AAEO,MAAM,sCAAsC,GAAG,oBAAoB,CAA6B,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,KAAK;AAEzH,SAAU,wBAAwB,CAAI,KAAiC,EAAA;AAC3E,IAAA,OAAO,KAAK,CAAC,IAAI,CAAC,sCAAsC,CAAC;AAC3D;AAUM,SAAU,oDAAoD,CAA+B,KAA6E,EAAA;IAC9K,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,KAAK;IACnE,MAAM,EAAE,UAAU,EAAE,kBAAkB,GAAG,SAAS,EAAE,GAAG,MAAM;IAC7D,MAAM,MAAM,GAAoC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACvG,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IAE/D,OAAO;AACL,QAAA,UAAU,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC;QAC5B,YAAY,EAAE,oCAAoC;AAClD,QAAA,eAAe,EAAE,CAAC,MAAuC,KACvD,EAAE,CACA,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;AACf,YAAA,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;AAC9C,YAAA,OAAO,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,kBAAkB,EAAE;AACjE,QAAA,CAAC,CAAC;KAEP;AACH;;MC9Ca,yCAAyC,GAAG,IAAI,cAAc,CAAC,oBAAoB;MAanF,2CAA2C,CAAA;AAC7C,IAAA,YAAY,GAAG,KAAK,CAAC,QAAQ,uDAAiD;AAE9E,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AACpC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE;AACxC,QAAA,MAAM,MAAM,GAAgC;YAC1C,GAAG,YAAY,CAAC,OAAO;YACvB,SAAS,EAAE,oBAAoB,CAC7B;AACE,gBAAA;AACE,oBAAA,OAAO,EAAE,yCAAyC;AAClD,oBAAA,QAAQ,EAAE;AACX;AACF,aAAA,EACD,YAAY,CAAC,OAAO,CAAC,SAAS;SAEjC;AAED,QAAA,OAAO,MAAM;AACf,IAAA,CAAC,wDAAC;AAEO,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,wDAAC;uGArBvD,2CAA2C,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA3C,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2CAA2C,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wCAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAT5C;;;;GAIT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACS,kBAAkB,wFAAE,qBAAqB,EAAA,QAAA,EAAA,gDAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIxC,2CAA2C,EAAA,UAAA,EAAA,CAAA;kBAXvD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,wCAAwC;AAClD,oBAAA,QAAQ,EAAE;;;;AAIT,EAAA,CAAA;AACD,oBAAA,OAAO,EAAE,CAAC,kBAAkB,EAAE,qBAAqB,CAAC;oBACpD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,UAAU,EAAE;AACb,iBAAA;;AAyBD;MAEsB,0CAA0C,CAAA;AACrD,IAAA,YAAY,GAAG,MAAM,CAAgD,yCAAyC,CAAC;uGADpG,0CAA0C,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA1C,0CAA0C,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAA1C,0CAA0C,EAAA,UAAA,EAAA,CAAA;kBAD/D;;AAsBK,MAAO,yCAA6C,SAAQ,0CAA6C,CAAA;AACpG,IAAA,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI;uGAD3B,yCAAyC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yCAAyC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAf1C;;;;;;;;;;AAUT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACS,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIZ,yCAAyC,EAAA,UAAA,EAAA,CAAA;kBAjBrD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sCAAsC;AAChD,oBAAA,QAAQ,EAAE;;;;;;;;;;AAUT,EAAA,CAAA;oBACD,OAAO,EAAE,CAAC,aAAa,CAAC;oBACxB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACiBD,MAAM,gCAAgC,GAAG,gBAAgB;AAEzD,MAAM,gCAAgC,GAAyC;AAC7E,IAAA,cAAc,EAAE;CACjB;AAED;;;;AAIG;AAEG,MAAgB,wCAA+L,SAAQE,WAA6B,CAAA;AAMxP;;AAEG;IACH,qBAAqB,GAAG,KAAK;AAE7B;;AAEG;IACH,6BAA6B,GAAmB,gCAAgC;IAEvE,SAAS,GAAG,SAAS,CAAuC,WAAW,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,WAAA,EAAA,GAAA,EAAA,CAAA,EAAI,IAAI,GAAE,UAA4B,CAAA,EAAA,CAAG;AAEhH,IAAA,SAAS,GAAG,IAAI,WAAW,CAAS,EAAE,CAAC;AAE/B,IAAA,eAAe,GAAG,IAAI,eAAe,CAAyB,SAAS,CAAC;IAChF,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AAE/C,IAAA,uBAAuB,GAAG,IAAI,kBAAkB,EAAE;IAClD,eAAe,GAAG,IAAI,eAAe,CAA2D,IAAI,GAAG,EAAE,CAAC;AAElH,IAAA,WAAW,GAAuB,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CACzE,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAC/B,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CACpB;AAEQ,IAAA,iBAAiB,GAAuB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,oBAAoB,EAAE,CAAC;IAExG,mBAAmB,GAAiF,IAAI,CAAC,iBAAiB,CAAC,IAAI,CACtI,SAAS,CAAC,CAAC,IAAI,KACb,CAAC,IAAI,IAAI,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CACtE,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,+BAA+B,CAAC,CAAC,CAAC,CAAC;;IAEzD,qBAAqB,EAAE,CACxB,CACF,EACD,WAAW,CAAC,CAAC,CAAC,CACf;AAEgB,IAAA,mBAAmB,GAAG,IAAI,kBAAkB,EAAE;AAEtD,IAAA,aAAa,GAAG,uBAAuB,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,mBAAmB,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAC;IACvG,cAAc,GAAmE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CACrH,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC,EAC1B,WAAW,CAAC,CAAC,CAAC,CACf;IACQ,uBAAuB,GAAwB,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,4BAA4B,CAAC,EAAE,oBAAoB,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;AAEvJ,IAAA,kBAAkB,GAAwB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE7J,IAAA,OAAO,GAAoB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;AAEjG,IAAA,mBAAmB,GAAiF,IAAI,CAAC,OAAO,CAAC,IAAI,CAC5H,oBAAoB,EAAE,EACtB,SAAS,CAAC,CAAC,MAAW,KAAK,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC,EACnE,WAAW,CAAC,CAAC,CAAC,CACf;IAEQ,cAAc,GAAmE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;AAE1I,IAAA,gBAAgB,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC;AAC7C,IAAA,mBAAmB,GAAG,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC;AACnD,IAAA,mBAAmB,GAAG,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC;AAEnD,IAAA,4BAA4B,GAAG,QAAQ,CAAC,IAAI,CAAC,uBAAuB,CAAC;AAE9E,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,IAAK,IAAI,CAAC,GAAc,CAAC;IACzE;AAEA,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK;IACzB;AAEA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ;IAC5B;AAEA,IAAA,IAAI,oBAAoB,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ;IACvC;AAEA,IAAA,IAAI,eAAe,GAAA;QACjB,OAAO,IAAI,CAAC,KAAK;IACnB;AAEA,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,YAAY,IAAI,IAAI;IAClD;AAEA,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,YAAY,KAAK,KAAK,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK;IAClE;AAEA,IAAA,IAAI,iBAAiB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,iBAAiB,IAAI,KAAK;IACxD;AAEA,IAAA,IAAI,sBAAsB,GAAA;AACxB,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB;AAC5C,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW;AACpD,QAAA,MAAM,IAAI,GAAG,WAAW,KAAK,aAAa,GAAG,SAAS,GAAG,IAAI,CAAC,6BAA6B,CAAC,IAAI,EAAE;AAClG,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,QAAQ,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,cAAc,CAAC,IAAI,IAAI,CAAC,GAAG;IAC7D;AAEA,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,YAAY,KAAK,CAAC,CAAC,KAAK,CAAiB,CAAC;IACxE;AAEA,IAAA,IAAI,eAAe,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,eAAe;IAC7C;AAEA,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS;IACvC;AAEA,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,cAAc;IAC5C;AAEA,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO;IACrC;AAEA,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM;IACpC;AAEA,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE;IAClE;AAEA,IAAA,IAAI,iBAAiB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC;IACnF;AAEA,IAAA,IAAI,kBAAkB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,kBAAkB;IAChD;AAEA,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,cAAc,IAAI,IAAI;IACpD;AAEA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,WAAW,IAAI,QAAQ;IACrD;AAEA,IAAA,IAAI,qBAAqB,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,qBAAqB;IACnD;AAEA,IAAA,0BAA0B,CAAC,MAAW,EAAA;QACpC,OAAO,IAAI,CAAC,+BAA+B,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACjF;AAEA,IAAA,+BAA+B,CAAC,MAAyC,EAAA;AACvE,QAAA,OAAO,IAAI,CAAC,8BAA8B,CAAC,MAAM,CAAC,CAAC,IAAI,CACrD,GAAG,CAAC,CAAC,aAAiE,KAAK,aAAa,CAAC,aAAa,CAAC,CAAC,EACxG,qBAAqB,EAAE,EACvB,WAAW,CAAC,CAAC,CAAC,CACf;IACH;AAEA,IAAA,8BAA8B,CAAC,MAAyC,EAAA;QACtE,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAC9B,QAAQ,CAAC,CAAC,UAAU,KAAI;YACtB,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAyC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAmG,CAAC;YAE5Q,MAAM;;YAEJ,QAAQ,EAAE,UAAU,EACpB,QAAQ,EAAE,YAAY,EACvB,GAAG,cAAc,CAAC,aAAa,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAEvD,YAAA,IAAI,GAAmE;AAEvE,YAAA,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;;gBAE3B,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5E,gBAAA,MAAM,cAAc,GAAG,iCAAiC,CAAC,CAAC,gCAAgC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;gBAE1G,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,cAAc;AAE5D,gBAAA,GAAG,GAAG,gBAAgB,CAAC,IAAI,CACzB,KAAK,EAAE,EACP,GAAG,CAAC,CAAC,cAAc,KAAI;;AAEpB,oBAAA,cAAyE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;AACvF,wBAAA,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE;AACd,4BAAA,CAAC,CAAC,OAAO,GAAG,cAAc;wBAC5B;6BAAO;AACL,4BAAA,CAAC,CAAC,OAAO,GAAG,iCAAiC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;wBAC5E;AAEA,wBAAA,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,cAAc,EAAE;AAC/B,4BAAA,CAAC,CAAC,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC;wBAC9B;AACF,oBAAA,CAAC,CAAC;;oBAGF,MAAM,qBAAqB,GAA6D,cAAqE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;oBACzM,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;;oBAGtF,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;;oBAGrE,MAAM,gBAAgB,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;AAGtF,oBAAA,OAAO,gBAAgB;gBACzB,CAAC,CAAC,CACH;YACH;iBAAO;;AAEL,gBAAA,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACvC;AAEA,YAAA,OAAO,GAAG;QACZ,CAAC,CAAC,CACH;IACH;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;AAE3C,QAAA,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,EAAE;YACtC,IAAI,CAAC,uBAAuB,CAAC,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;QAC9H;AAEA,QAAA,IAAI,IAAI,CAAC,eAAe,CAAC,kBAAkB,EAAE;YAC3C,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC;QACvE;QAEA,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,EAAE;AAC5D,YAAA,IAAI,CAAC,mBAAmB,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;AAC1E,gBAAA,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;oBACR,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7B;AACF,YAAA,CAAC,CAAC;QACJ;IACF;IAES,WAAW,GAAA;QAClB,KAAK,CAAC,WAAW,EAAE;AACnB,QAAA,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE;AACtC,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE;AAC/B,QAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE;AAClC,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE;AAC/B,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE;IAC9B;AAEA;;;;AAIG;AACO,IAAA,gBAAgB,CAAC,KAA0C,EAAA;QACnE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;IACtC;AAEU,IAAA,iBAAiB,CAAC,IAAY,EAAA;AACtC,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE;YAC3C;QACF;QAEA,IAAI,IAAI,EAAE;YACR,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,IAAI,EAAE;YAC1B,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACtC;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;YACzB;QACF;QAEA,IAAI,IAAI,EAAE;AACR,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAI,IAAqB;AAC9F,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QACtB;IACF;AAEA,IAAA,mBAAmB,CAAC,YAAiD,EAAA;AACnE,QAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC;IACnC;AAEA,IAAA,sBAAsB,CAAC,YAAiD,EAAA;AACtE,QAAA,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,KAAK,CAAC;IACtC;IAEA,wBAAwB,GAAA;QACtB,IAAI,UAAU,GAAG,KAAK;AAEtB,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;YAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE;YAExC,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE;AACxB,gBAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;gBAC7B,UAAU,GAAG,IAAI;YACnB;QACF;AAEA,QAAA,OAAO,UAAU;IACnB;AAEA,IAAA,QAAQ,CAAC,KAAQ,EAAA;AACf,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;QAElC,IAAI,SAAS,EAAE;AACb,YAAA,SAAS,CAAC,aAAa,CAAC,KAAK,GAAG,EAAE;QACpC;AAEA,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;AAC7B,QAAA,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACzC;AAEA,IAAA,WAAW,CAAC,KAAQ,EAAA;AAClB,QAAA,IAAI,MAAM;AAEV,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;YAC7C,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC;QAC3E;aAAO;AACL,YAAA,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC;QACjD;AAEA,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;IACxB;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;IACpB;AAEA,IAAA,SAAS,CAAC,MAAW,EAAA;;AAEnB,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,MAAM,GAAG,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC;QACxD;AAEA,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,MAAM,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;QACvD;AAEA,QAAA,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC;IACrC;;AAGU,IAAA,sBAAsB,CAAC,kBAAmC,EAAA;AAClE,QAAA,MAAM,KAAK,GAAQ,kBAAkB,IAAI,IAAI,GAAG,OAAO,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC;AACjF,QAAA,OAAO,KAAK;IACd;AAEU,IAAA,sBAAsB,CAAC,MAAW,EAAA;QAC1C,IAAI,QAAQ,GAAY,MAAM;AAE9B,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACtB,QAAQ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;QACpD;AAEA,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACnC,QAAA,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;AAC9B,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE;IAClC;uGApXoB,wCAAwC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wCAAwC,iIAgB8B,UAAU,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAhBhF,wCAAwC,EAAA,UAAA,EAAA,CAAA;kBAD7D;AAiBsE,SAAA,CAAA,EAAA,cAAA,EAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,WAAW,OAAE,EAAE,IAAI,GAAE,UAA4B,CAAA,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;ACnFpH,MAAO,+BAAuF,SAAQ,wCAA+F,CAAA;AACzM,IAAA,IAAa,WAAW,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,IAAI;IACvC;AAEiB,IAAA,KAAK,GAAG,IAAI,OAAO,EAAQ;AAC3B,IAAA,QAAQ,GAAG,IAAI,kBAAkB,EAAE;AAE3C,IAAA,kBAAkB,GAAa,CAAC,KAAK,EAAE,KAAK,CAAC;AAEtD,IAAA,QAAQ,CAAC,KAAmC,EAAA;QAC1C,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;IAC9C;AAEA,IAAA,iBAAiB,CAAC,KAAoB,EAAA;QACpC,IAAI,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,KAAK,EAAE;AACvC,YAAA,IAAI,IAAI,CAAC,wBAAwB,EAAE,EAAE;gBACnC,KAAK,CAAC,cAAc,EAAE;gBACtB,KAAK,CAAC,wBAAwB,EAAE;AAChC,gBAAA,OAAO,KAAK;YACd;QACF;AAEA,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,OAAO,CAAC,KAAwB,EAAA;QAC9B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK;AAChD,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;IACrC;AAEmB,IAAA,gBAAgB,CAAC,KAA0C,EAAA;;IAE9E;IAES,QAAQ,GAAA;QACf,KAAK,CAAC,QAAQ,EAAE;;QAGhB,IAAI,CAAC,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;YACpH,IAAI,CAAC,wBAAwB,EAAE;AACjC,QAAA,CAAC,CAAC;IACJ;IAES,WAAW,GAAA;QAClB,KAAK,CAAC,WAAW,EAAE;AACnB,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;IACzB;IAEA,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;IACnB;uGApDW,+BAA+B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA/B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,+BAA+B,+FC5B5C,4tDAgCA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDRY,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,UAAA,EAAA,OAAA,EAAA,mBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,uBAAA,EAAA,+BAAA,EAAA,aAAA,EAAA,IAAA,EAAA,UAAA,EAAA,UAAA,EAAA,iCAAA,CAAA,EAAA,OAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,wEAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,iNAAE,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,qBAAqB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,wBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,eAAA,EAAA,OAAA,EAAA,8BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,mDAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,yBAAA,EAAA,4BAAA,EAAA,cAAA,EAAA,yBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,+BAAE,2CAA2C,EAAA,QAAA,EAAA,wCAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIrK,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAN3C,SAAS;8BAEC,CAAC,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,eAAe,EAAE,2CAA2C,CAAC,mBAChK,uBAAuB,CAAC,MAAM,EAAA,UAAA,EACnC,IAAI,EAAA,QAAA,EAAA,4tDAAA,EAAA;;;AElBlB;;;;;AAKG;SACa,2CAA2C,CAA2D,EAAE,iBAAiB,EAAE,oBAAoB,EAAkP,EAAA;IAC/Y,OAAO,CAAC,MAAyC,KAAI;QACnD,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAClG,QAAA,IAAI,SAAwD;AAE5D,QAAA,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;AAC1B,YAAA,MAAM,aAAa,GAAG,iBAAiB,CAAC,WAAW,CAAC;YACpD,SAAS,GAAG,aAAa,CAAC,IAAI,CAC5B,GAAG,CAAC,CAAC,MAAM,KAAI;AACb,gBAAA,MAAM,SAAS,GAAmD,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;gBAEpG,MAAM,cAAc,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;AAC3C,oBAAA,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK;oBAClB,MAAM,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;oBACpC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,UAAU,EAAE,MAAM;AAC7C,oBAAA,MAAM,IAAI,GAAa,UAAU,EAAE,IAAI;oBAEvC,OAAO;AACL,wBAAA,GAAG,CAAC;wBACJ,MAAM;wBACN;qBACD;AACH,gBAAA,CAAC,CAAC;AAEF,gBAAA,OAAO,cAAc;AACvB,YAAA,CAAC,CAAC,EACF,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CACxC;QACH;aAAO;AACL,YAAA,SAAS,GAAG,EAAE,CAAC,MAAM,CAAC;QACxB;QAEA,OAAO,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;AACxD,IAAA,CAAC;AACH;AAKM,SAAU,yBAAyB,CAAc,MAA0C,EAAA;AAC/F,IAAA,OAAO,mBAAmB,CAAC;AACzB,QAAA,GAAG,MAAM;AACT,QAAA,iBAAiB,EAAE;AACpB,KAAA,CAAC;AACJ;AAIM,SAAU,mBAAmB,CAAwD,MAA0C,EAAA;IACnI,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,iBAAiB,EAAE,GAAG,MAAM;AACtD,IAAA,OAAO,WAAW,CAAC;QACjB,GAAG;AACH,QAAA,IAAI,EAAE,qBAAqB;QAC3B,GAAG,4BAA4B,CAAC,MAAM,EAAE;AACtC,YAAA,GAAG,iBAAiB;AACpB,YAAA,GAAG,MAAM;YACT,WAAW,EAAE,WAAW,IAAI,QAAQ;AACpC,YAAA,YAAY,EAAE;SACf;AACF,KAAA,CAAC;AACJ;AAKM,SAAU,mBAAmB,CAAwD,MAA0C,EAAA;AACnI,IAAA,MAAM,EAAE,GAAG,EAAE,iBAAiB,EAAE,GAAG,MAAM;AACzC,IAAA,OAAO,WAAW,CAAC;QACjB,GAAG;AACH,QAAA,IAAI,EAAE,qBAAqB;QAC3B,GAAG,4BAA4B,CAAC,MAAM,EAAE;AACtC,YAAA,GAAG,iBAAiB;AACpB,YAAA,GAAG,MAAM;AACT,YAAA,YAAY,EAAE;SACf;AACF,KAAA,CAAC;AACJ;;ACtEA;;AAEG;AAOG,MAAO,+BAAuF,SAAQ,wCAA+F,CAAA;IAChM,qBAAqB,GAAG,IAAI;IAE5B,qBAAqB,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CACvD,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAChB,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,0BAA0B,GAAG,QAAQ,CAAC,IAAI,CAAC,qBAAqB,CAAC;AACjE,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,0BAA0B,EAAE,CAAC,0DAAC;AAC3E,IAAA,8BAA8B,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,cAAc,EAAE,0EAAC;AAEzG,IAAA,IAAa,eAAe,GAAA;QAC1B,OAAO,IAAI,CAAC,KAAK;IACnB;AAEA,IAAA,IAAI,iBAAiB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;IAC3E;AAEA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,KAAK;IACd;AAEA;;;;;;;;;;;;;;;;;AAiBE;AAEF,IAAA,QAAQ,CAAC,KAAmC,EAAA;AAC1C,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,KAAqF;AAEhH,QAAA,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC;AAE9B,QAAA,IAAK,KAAa,CAAC,MAAM,EAAE;YACzB,IAAI,CAAC,WAAW,EAAE;QACpB;AAAO,aAAA,IAAI,CAAE,KAAa,CAAC,OAAO,EAAE;AAClC,YAAA,IAAI,CAAC,mBAAmB,CAAC,KAA4C,CAAC;QACxE;IACF;uGArDW,+BAA+B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA/B,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7B5C,swEAmDA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED1BY,WAAW,uZAAE,QAAQ,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,iNAAE,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAL,IAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,qBAAqB,urBAAE,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,2CAA2C,EAAA,QAAA,EAAA,wCAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIxL,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAN3C,SAAS;8BAEC,CAAC,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,eAAe,EAAE,qBAAqB,EAAE,cAAc,EAAE,aAAa,EAAE,2CAA2C,CAAC,EAAA,eAAA,EACnL,uBAAuB,CAAC,MAAM,EAAA,UAAA,EACnC,IAAI,EAAA,QAAA,EAAA,swEAAA,EAAA;;;AErBlB,MAAMF,mBAAiB,GAAG,CAAC,+BAA+B,EAAE,+BAA+B,EAAE,2CAA2C,EAAE,yCAAyC,CAAC;MAcvK,kCAAkC,CAAA;uGAAlC,kCAAkC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAAlC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kCAAkC,EAAA,OAAA,EAAA,CAdpB,+BAA+B,EAAE,+BAA+B,EAAE,2CAA2C,EAAE,yCAAyC,EAAAD,IAAA,CAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAxJ,+BAA+B,EAAE,+BAA+B,EAAE,2CAA2C,EAAE,yCAAyC,CAAA,EAAA,CAAA;AActK,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kCAAkC,YAVxCC,mBAAiB,EACpB,YAAY,CAAC,QAAQ,CAAC;AACpB,gBAAA,KAAK,EAAE;AACL,oBAAA,EAAE,IAAI,EAAE,qBAAqB,EAAE,SAAS,EAAE,+BAA+B,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE;AACrG,oBAAA,EAAE,IAAI,EAAE,qBAAqB,EAAE,SAAS,EAAE,+BAA+B,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC;AACpG;aACF,CAAC,CAAA,EAAA,CAAA;;2FAIO,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAZ9C,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;AACP,wBAAA,GAAGA,mBAAiB;wBACpB,YAAY,CAAC,QAAQ,CAAC;AACpB,4BAAA,KAAK,EAAE;AACL,gCAAA,EAAE,IAAI,EAAE,qBAAqB,EAAE,SAAS,EAAE,+BAA+B,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE;AACrG,gCAAA,EAAE,IAAI,EAAE,qBAAqB,EAAE,SAAS,EAAE,+BAA+B,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC;AACpG;yBACF;AACF,qBAAA;AACD,oBAAA,OAAO,EAAEA;AACV,iBAAA;;;ACTK,SAAU,aAAa,CAAC,MAA2B,EAAA;IACvD,MAAM,kBAAkB,GAAG,MAAM,CAAC,aAAa,GAAG,CAAC,CAAS,KAAK,CAAC,GAAG,CAAC,CAAS,KAAK,CAAC,EAAE,WAAW,EAAE;AAEpG,IAAA,OAAO,mBAAmB,CAAC;QACzB,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AACpB,QAAA,GAAG,MAAM;AACT,QAAA,iBAAiB,EAAE,IAAI;QACvB,kBAAkB;AAClB,QAAA,eAAe,EAAE,CAAC,MAA2C,KAAI;YAC/D,OAAO,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC1D;AACD,KAAA,CAAC;AACJ;;AC8BA;;AAEG;AAQG,MAAO,iCAAsF,SAAQC,WAAwD,CAAA;AAChJ,IAAA,aAAa,GAAG,IAAI,kBAAkB,EAAE;AACxC,IAAA,uBAAuB,GAAG,IAAI,kBAAkB,EAAE;IAClD,iBAAiB,GAAG,IAAI,eAAe,CAAkC,IAAI,GAAG,EAAE,CAAC;IACnF,eAAe,GAAG,IAAI,eAAe,CAAyC,IAAI,GAAG,EAAE,CAAC;AAExF,IAAA,eAAe,GAAG,IAAI,eAAe,CAA8B,SAAS,CAAC;AAC7E,IAAA,eAAe,GAAG,IAAI,eAAe,CAAiC,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;AAC3G,IAAA,YAAY,GAAG,IAAI,eAAe,CAAiD,SAAS,CAAC;IAErG,aAAa,GAAG,SAAS,CAAkC,QAAQ,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,eAAA,EAAA,GAAA,EAAA,CAAA,EAAI,IAAI,GAAE,UAAuB,CAAA,EAAA,CAAG;IAEvG,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AAEvD,IAAA,wBAAwB,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CACxD,SAAS,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAC3E,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,OAAO,GAAoB,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;AAEvG,IAAA,sBAAsB,GAAoB,IAAI,CAAC,OAAO,CAAC,IAAI,CAClE,IAAI,CAAC,CAAC,GAAG,EAAE,MAAM,KAAI;QACnB,IAAI,MAAM,GAAW,GAAG;QAExB,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE;AACtC,YAAA,MAAM,GAAG,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC;QACpC;AAEA,QAAA,OAAO,MAAM;AACf,IAAA,CAAC,EAAE,IAAI,GAAG,EAAK,CAAC,EAChB,oBAAoB,EAAE,EACtB,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EACzB,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,kCAAkC,GAAwD,IAAI,CAAC,sBAAsB,CAAC,IAAI,CACjI,oBAAoB,EAAE,EACtB,SAAS,CAAC,CAAC,MAAW,KAAK,IAAI,CAAC,8BAA8B,CAAC,MAAM,CAAC,CAAC,EACvE,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,YAAY,GAA6D,IAAI,CAAC,YAAY,CAAC,IAAI,CACtG,WAAW,EAAE,EACb,SAAS,CAAC,CAAC,UAAU,KAAI;AACvB,QAAA,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI;QAE5B,OAAO,UAAU,CAAC,IAAI,CACpB,SAAS,CAAC,CAAC,OAAoC,KAAI;AACjD,YAAA,MAAM,SAAS,GAAwD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AAE9J,YAAA,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;AAC1B,gBAAA,OAAO,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;YAC9B;iBAAO;AACL,gBAAA,OAAO,aAAa,CAAC,SAAS,CAAC,CAAC,IAAI,CAClC,GAAG,CAAC,CAAC,CAAC,KAAI;AACR,oBAAA,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,8BAA8B,CAAC,CAAC,CAAC,CAAC;oBAC3E,MAAM,OAAO,GAAG,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;oBACzD,MAAM,KAAK,GAAmC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;AACvE,wBAAA,MAAM,KAAK,GAAiC;4BAC1C,KAAK,EAAE,CAAC,CAAC,KAAK;4BACd,MAAM,EAAG,CAAC,CAAC,KAAa,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;yBAC5E;AAED,wBAAA,OAAO,KAAK;AACd,oBAAA,CAAC,CAAC;oBAEF,OAAO;wBACL,OAAO;wBACP;qBACD;gBACH,CAAC,CAAC,CACH;YACH;QACF,CAAC,CAAC,CACH;IACH,CAAC,CAAC,CACH;AAEQ,IAAA,eAAe,GAA6C,IAAI,CAAC,eAAe,CAAC,IAAI,CAC5F,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,iBAAiB,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAC3E,GAAG,CAAC,CAAC,CAAC,KAAI;AACR,QAAA,MAAM,KAAK,GAAiC;AAC1C,YAAA,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,CAAC,CAAC;SACX;AAED,QAAA,OAAO,KAAK;AACd,IAAA,CAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACf;IAEQ,4BAA4B,GAA6E,aAAa,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAC7K,GAAG,CAAC,CAAC,CAAC,mBAAmB,EAAE,WAAW,CAAC,KAAI;AACzC,QAAA,MAAM,gBAAgB,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAChD,MAAM,KAAK,GAAmC,CAAC,mBAAmB,EAAE,GAAG,gBAAgB,CAAC;AAExF,QAAA,MAAM,MAAM,GAAiE;YAC3E,OAAO,EAAE,WAAW,CAAC,OAAO;YAC5B;SACD;AAED,QAAA,OAAO,MAAM;AACf,IAAA,CAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,oBAAoB,GAA6D,IAAI,CAAC,kCAAkC,CAAC,IAAI,CACpI,SAAS,CAAC,CAAC,4BAAqE,KAAI;AAClF,QAAA,IAAI,8BAA8B,CAAC,4BAA4B,CAAC,EAAE;AAChE,YAAA,MAAM,qBAAqB,GAAiC;AAC1D,gBAAA,KAAK,EAAE,EAAE;gBACT,MAAM,EAAE,4BAA4B,CAAC;aACtC;YAED,OAAO,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAC3C,GAAG,CAAC,CAAC,YAAY,KAAI;gBACnB,MAAM,SAAS,GAAmC,CAAC,qBAAqB,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC;AAEhG,gBAAA,MAAM,MAAM,GAAiD;AAC3D,oBAAA,OAAO,EAAE,4BAA4B,CAAC,OAAO,IAAI,YAAY,CAAC,OAAO;AACrE,oBAAA,KAAK,EAAE;iBACR;AAED,gBAAA,OAAO,MAAM;YACf,CAAC,CAAC,CACH;QACH;aAAO;AACL,YAAA,OAAO,EAAE,CAAC,YAAY,CAAiC,EAAE,CAAC,CAAC;QAC7D;AACF,IAAA,CAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,qBAAqB,GAAoE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAC9H,gCAAgC,CAC9B,SAAS,CAAC,CAAC,MAAsC,KAAI;AACnD,QAAA,MAAM,uBAAuB,GAAG,kBAAkB,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAgD;AAEzH,QAAA,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAK;QACtC,MAAM,eAAe,GAA8B,EAAE;QAErD,MAAM,sBAAsB,GAAmC,EAAE;;AAGjE,QAAA,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE;AACzC,aAAA,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;aACtC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAI;YAC3B,MAAM,MAAM,GAA8B,EAAE;AAE5C,YAAA,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;gBACvB,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,KAAI;oBACnC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE;AAC7C,wBAAA,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;AACxB,wBAAA,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC;AACjC,wBAAA,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC;oBAC1C;AACF,gBAAA,CAAC,CAAC;AACJ,YAAA,CAAC,CAAC;AAEF,YAAA,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;gBACrB,sBAAsB,CAAC,IAAI,CAAC;oBAC1B,KAAK;oBACL;AACD,iBAAA,CAAC;YACJ;AACF,QAAA,CAAC,CAAC;AAEJ,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,+BAA+B,CAAC,eAAe,CAAC,CAAC,IAAI,CACpE,GAAG,CAAC,CAAC,aAAa,KAAI;YACpB,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;YAExE,MAAM,aAAa,GAA0C,sBAAsB,CAAC,GAAG,CAAC,CAAC,UAAU,KAAI;gBACrG,MAAM,MAAM,GAAG,sBAAsB,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;gBAElG,OAAO;oBACL,KAAK,EAAE,UAAU,CAAC,KAAK;oBACvB;iBACD;AACH,YAAA,CAAC,CAAC;AAEF,YAAA,OAAO,aAAa;QACtB,CAAC,CAAC,CACH;AAED,QAAA,OAAO,GAAG;IACZ,CAAC,CAAC,CACH,EACD,WAAW,CAAC,CAAC,CAAC,CACf;IAEQ,gBAAgB,GAAsD,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAC5G,6BAA6B,EAAE,EAC/B,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EACnB,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,QAAQ,GAA0C,IAAI,CAAC,gBAAgB,CAAC,IAAI,CACnF,GAAG,CAAC,CAAC,CAAC,KAAI;QACR,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAEzG,QAAA,MAAM,MAAM,GAA8B;YACxC,gBAAgB,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,EAAE;YAClD;SACD;AAED,QAAA,OAAO,MAAM;AACf,IAAA,CAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,gBAAgB,CAAC,CAAC;AACtE,IAAA,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,CAAC;AAEjE,IAAA,sBAAsB,GAAG,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC;AACzD,IAAA,oBAAoB,GAAG,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC;AAE9D,IAAA,IAAI,iBAAiB,GAAA;QACnB,OAAO,IAAI,CAAC,KAAK;IACnB;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU;IAC9B;AAEA,IAAA,IAAI,oBAAoB,GAAA;AACtB,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;IACjC;AAEA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW;IAC/B;AAEA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW;IAC/B;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU;IAC9B;AAEA,IAAA,IAAI,eAAe,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,eAAe;IACnC;AAEA,IAAA,IAAI,gBAAgB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,gBAAgB,IAAI,KAAK;IAC7C;AAEA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK;IACrC;AAEA,IAAA,IAAI,qBAAqB,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,qBAAqB;IACzC;AAEA,IAAA,8BAA8B,CAAC,MAAW,EAAA;AACxC,QAAA,OAAO,IAAI,CAAC,6BAA6B,CAAC,MAAM,CAAC,CAAC,IAAI,CACpD,GAAG,CAAC,CAAC,kBAA6C,KAAK,aAAa,CAAC,kBAAkB,CAAC,CAAC,EACzF,qBAAqB,EAAE,EACvB,WAAW,CAAC,CAAC,CAAC,CACf;IACH;AAEA,IAAA,6BAA6B,CAAC,MAAW,EAAA;AACvC,QAAA,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI;QAE5B,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAChC,QAAQ,CAAC,CAAC,OAAO,KAAI;YACnB,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAyC,CAAC;YAEnH,MAAM;;YAEJ,QAAQ,EAAE,OAAO,EACjB,QAAQ,EAAE,SAAS,EACpB,GAAG,cAAc,CAAC,aAAa,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAEvD,YAAA,IAAI,GAA0C;AAE9C,YAAA,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;;gBAExB,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAEjE,gBAAA,GAAG,GAAG,aAAa,CAAC,IAAI,CACtB,KAAK,EAAE,EACP,GAAG,CAAC,CAAC,WAAW,KAAI;oBAClB,MAAM,kBAAkB,GAA8B,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACrH,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;;AAG9E,oBAAA,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;;oBAG1D,MAAM,gBAAgB,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;AAGtF,oBAAA,OAAO,gBAAgB;gBACzB,CAAC,CAAC,CACH;YACH;iBAAO;;AAEL,gBAAA,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACpC;AAEA,YAAA,OAAO,GAAG;QACZ,CAAC,CAAC,CACH;IACH;AAEA,IAAA,gCAAgC,CAAC,MAAiC,EAAA;AAChE,QAAA,OAAO,IAAI,CAAC,+BAA+B,CAAC,MAAM,CAAC,CAAC,IAAI,CACtD,GAAG,CAAC,CAAC,aAA+C,KAAK,aAAa,CAAC,aAAa,CAAC,CAAC,EACtF,qBAAqB,EAAE,EACvB,WAAW,CAAC,CAAC,CAAC,CACf;IACH;AAEA,IAAA,+BAA+B,CAAC,MAAiC,EAAA;QAC/D,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAC9B,QAAQ,CAAC,CAAC,OAAO,KAAI;YACnB,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAiC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAyE,CAAC;AAEpN,YAAA,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7D,YAAA,MAAM,YAAY,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvD,YAAA,IAAI,GAAiD;AAErD,YAAA,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;;gBAE3B,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE5E,gBAAA,GAAG,GAAG,gBAAgB,CAAC,IAAI,CACzB,KAAK,EAAE,EACP,GAAG,CAAC,CAAC,cAAc,KAAI;AACrB,oBAAA,MAAM,qBAAqB,GAA2C,cAAmD,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;oBAClJ,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;;oBAGtF,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;;oBAGlE,MAAM,gBAAgB,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;AAGtF,oBAAA,OAAO,gBAAgB;gBACzB,CAAC,CAAC,CACH;YACH;iBAAO;;AAEL,gBAAA,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACvC;AAEA,YAAA,OAAO,GAAG;QACZ,CAAC,CAAC,CACH;IACH;IAES,OAAO,GAAG,mBAAmB,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,qBAAqB,EAAE,CAAC;IAE3E,QAAQ,GAAA;AACN,QAAA,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI;AAE5B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;AAEjD,QAAA,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,EAAE;YACtC,IAAI,CAAC,uBAAuB,CAAC,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;QAC9H;QAEA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;;AAG3C,QAAA,IAAI,CAAC,aAAa,CAAC,YAAY,GAAG,IAAI,CAAC,4BAA4B,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;AAClF,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK;AAC5C,YAAA,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AAC1E,QAAA,CAAC,CAAC;IACJ;IAES,WAAW,GAAA;QAClB,KAAK,CAAC,WAAW,EAAE;AACnB,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE;AAC5B,QAAA,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE;AACtC,QAAA,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE;AACjC,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE;AAC/B,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE;AAC/B,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE;AAC/B,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;AAC5B,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;IACxB;AAES,IAAA,mBAAmB,GAA8B,CAAC,CAAC,EAAE,OAAO,KAAI;AACvE,QAAA,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI;AAC3B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE;AAEnC,QAAA,IAAI,UAAU,IAAI,MAAM,EAAE;YACxB,MAAM,SAAS,GAAG,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;AACxC,YAAA,OAAO,CAAC,0BAA0B,CAChC,SAAS,CAAC,IAAI,CACZ,KAAK,EAAE,EACP,GAAG,CAAC,CAAC,MAAuC,KAAI;AAC9C,gBAAA,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;AAEhE,gBAAA,IAAI,WAAW,CAAC,MAAM,EAAE;AACtB,oBAAA,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC;gBACtC;AAEA,gBAAA,IAAI,MAAM,CAAC,GAAG,EAAE;oBACd,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClE;AAAO,qBAAA,IAAI,MAAM,CAAC,MAAM,EAAE;oBACxB,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;gBACvE;YACF,CAAC,CAAC,CACH,CACF;QACH;aAAO;YACL,OAAO,CAAC,MAAM,EAAE;QAClB;AACF,IAAA,CAAC;AAEO,IAAA,kBAAkB,CAAC,KAAU,EAAA;AACnC,QAAA,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI;AAC5B,QAAA,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK;QAE7E,MAAM,gBAAgB,GAA8B,EAAE;AACtD,QAAA,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC;AAExC,QAAA,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;AAClB,YAAA,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC;YAE5B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;gBACzB,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;AACzC,gBAAA,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;YACtB;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/B,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AACxB,gBAAA,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,gBAAgB,CAAC;AACtC,gBAAA,SAAS,EAAE;AACZ,aAAA,CAAC;QACJ;IACF;AAEQ,IAAA,iBAAiB,CAAC,MAAW,EAAA;QACnC,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;QACpD,MAAM,aAAa,GAAG,CAAC,GAAG,YAAY,EAAE,GAAG,MAAM,CAAC;AAClD,QAAA,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC;IACrC;AAEQ,IAAA,eAAe,CAAC,aAAkB,EAAA;AACxC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,GAAG,aAAa,GAAG,SAAS,CAAC,aAAa,CAAC,CAAC;AACvE,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC;AAChC,QAAA,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;AAC9B,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE;IAClC;uGArcW,iCAAiC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAjC,iCAAiC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAU0C,UAAU,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECxElG,0uCA2BA,4CDgCY,SAAS,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,2BAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,YAAA,EAAA,0BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,SAAS,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,sIAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,kBAAkB,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,aAAA,EAAA,OAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,OAAA,EAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,EAAA,KAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,WAAW,mHAAE,wBAAwB,EAAA,QAAA,EAAA,qCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,CAAA,QAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAGtJ,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAP7C,SAAS;+BACE,4BAA4B,EAAA,eAAA,EAErB,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,WAAW,EAAE,wBAAwB,EAAE,eAAe,EAAE,mBAAmB,CAAC,EAAA,UAAA,EACtJ,IAAI,EAAA,QAAA,EAAA,0uCAAA,EAAA;AAYoD,SAAA,CAAA,EAAA,cAAA,EAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,QAAQ,OAAE,EAAE,IAAI,GAAE,UAAuB,CAAA,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEhE3G,SAAU,iBAAiB,CAAqD,MAAqC,EAAA;AACzH,IAAA,MAAM,EAAE,GAAG,EAAE,iBAAiB,EAAE,GAAG,MAAM;AACzC,IAAA,OAAO,WAAW,CAAC;QACjB,GAAG;AACH,QAAA,IAAI,EAAE,mBAAmB;QACzB,GAAG,4BAA4B,CAAC,MAAM,EAAE;AACtC,YAAA,GAAG,iBAAiB;AACpB,YAAA,GAAG,MAAM;AACT,YAAA,YAAY,EAAE;SACf;AACF,KAAA,CAAC;AACJ;;MCNa,+BAA+B,CAAA;uGAA/B,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;wGAA/B,+BAA+B,EAAA,OAAA,EAAA,CAPxC,iCAAiC,EAAAF,IAAA,CAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAKzB,iCAAiC,CAAA,EAAA,CAAA;AAEhC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,+BAA+B,YAPxC,iCAAiC;YACjC,YAAY,CAAC,QAAQ,CAAC;AACpB,gBAAA,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,SAAS,EAAE,iCAAiC,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE;aAC9G,CAAC,CAAA,EAAA,CAAA;;2FAIO,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAT3C,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,iCAAiC;wBACjC,YAAY,CAAC,QAAQ,CAAC;AACpB,4BAAA,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,SAAS,EAAE,iCAAiC,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE;yBAC9G;AACF,qBAAA;oBACD,OAAO,EAAE,CAAC,iCAAiC;AAC5C,iBAAA;;;AC8BK,SAAU,mBAAmB,CAAI,MAAoC,EAAA;IACzE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,KAAK,EAAE,cAAc,GAAG,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,GAAG,MAAM;AAC/I,IAAA,IAAI,qBAAyD;IAE7D,IAAI,oBAAoB,EAAE;AACxB,QAAA,qBAAqB,GAAG;AACtB,YAAA,eAAe,EAAE,OAAO,oBAAoB,KAAK,SAAS,GAAG,YAAY,GAAI;SAC9E;IACH;AAEA,IAAA,MAAM,OAAO,GAAG,cAAc,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,+BAA+B,CAAC,OAAO,cAAc,KAAK,QAAQ,GAAG,cAAc,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,YAAY;IACtL,IAAI,OAAO,GAAoC,SAAS;AAExD,IAAA,OAAO,GAAG,MAAM,CAAC,QAAQ,KAAK,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,mBAAmB,CAAC;AAEzE,IAAA,OAAO,WAAW,CAAC;QACjB,GAAG;QACH,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,QAAQ;QACzC,GAAG,4BAA4B,CAAC,MAAM,EAAE;AACtC,YAAA,GAAG,iBAAiB;YACpB,OAAO;YACP,QAAQ,EAAE,MAAM,CAAC,QAAQ;AACzB,YAAA,GAAG;SACJ,CAAC;QACF;AACD,KAAA,CAAC;AACJ;AAEM,SAAU,+BAA+B,CAAI,KAA0B,EAAA;IAC3E,OAAO,CAAC,OAAkC,KAAI;AAC5C,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,KAAM,CAA+B,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAExF,IAAI,QAAQ,EAAE;AACZ,YAAA,OAAO,OAAO;QAChB;aAAO;AACL,YAAA,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,OAAO,CAAC;QAC7C;AACF,IAAA,CAAC;AACH;;AC7CM,MAAO,2BAAqG,SAAQE,WAA6B,CAAA;IACpI,oBAAoB,GAAG,MAAM,CAAC,mBAAmB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAE/E,IAAA,OAAO;AACE,IAAA,IAAI,GAAG,IAAI,kBAAkB,EAAE;IAEvC,aAAa,GAAG,iBAAiB,CAAC,IAAI,CAAC,oBAAoB,EAAE,KAAK,EAAE;AAC3E,QAAA,OAAO,EAAE;AACV,KAAA,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AAEb,IAAA,kBAAkB,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;AAEhF,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAa;IACjC;AAEA,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,IAAiB;IAC/B;AAEA,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,OAAO;IACrB;AAEA,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK;IAChC;AAEA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW;IAC/B;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,OAAO,GAAG,IAAI,MAAM,CAAC,EAAE,CAAC;;;;QAO7B,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC;aAClC,IAAI,CACH,YAAY,CAAC,EAAE,CAAC,EAChB,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;aAE1C,SAAS,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,WAAW,CAAC,sBAAsB,EAAE;AACzC,YAAA,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;AAChC,QAAA,CAAC,CAAC;IACN;IAES,WAAW,GAAA;QAClB,KAAK,CAAC,WAAW,EAAE;AAEnB,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,EAAE;AACxB,YAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;QACxB;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;IACrB;uGA3DW,2BAA2B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EApB5B;;;;;;;;;;;;;;;AAeT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACS,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,cAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,UAAA,EAAA,QAAA,EAAA,eAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,8SAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIzD,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBArBvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;AAeT,EAAA,CAAA;oBACD,OAAO,EAAE,CAAC,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,mBAAmB,CAAC;oBACrE,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,UAAU,EAAE;AACb,iBAAA;;;AC9BD,MAAME,mBAAiB,GAAG,CAAC,2BAA2B,CAAC;MAW1C,kCAAkC,CAAA;uGAAlC,kCAAkC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;wGAAlC,kCAAkC,EAAA,OAAA,EAAA,CAXpB,2BAA2B,EAAAD,IAAA,CAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAA3B,2BAA2B,CAAA,EAAA,CAAA;AAWzC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kCAAkC,YAPxCC,mBAAiB,EACpB,YAAY,CAAC,QAAQ,CAAC;gBACpB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,2BAA2B,EAAE;aACvE,CAAC,CAAA,EAAA,CAAA;;2FAIO,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAT9C,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;AACP,wBAAA,GAAGA,mBAAiB;wBACpB,YAAY,CAAC,QAAQ,CAAC;4BACpB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,2BAA2B,EAAE;yBACvE;AACF,qBAAA;AACD,oBAAA,OAAO,EAAEA;AACV,iBAAA;;;ACRK,SAAU,eAAe,CAAC,MAA6B,EAAA;IAC3D,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,iBAAiB,EAAE,GAAG,MAAM;IAC/D,MAAM,WAAW,GAAsB,WAAW,CAAC;QACjD,GAAG;AACH,QAAA,IAAI,EAAE,YAAY;QAClB,YAAY,EAAE,EAAE;AAChB,QAAA,YAAY,EAAE;;;AAGZ,YAAA,QAAQ,EAAE;AACX,SAAA;QACD,GAAG,4BAA4B,CAAC,MAAM,EAAE;AACtC,YAAA,GAAG,iBAAiB;YACpB,SAAS;YACT;SACD;AACF,KAAA,CAAC;AAEF,IAAA,OAAO,WAAW;AACpB;;ACkFM,MAAO,+BAA6C,SAAQ,cAA8D,CAAA;AAC7G,IAAA,cAAc,GAAG,YAAY,CAAC,MAAK;AAClD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa;AAEjD,QAAA,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;AAC/B,YAAA,OAAO,KAAK;QACd;aAAO;AACL,YAAA,OAAO,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC;QAChC;AACF,IAAA,CAAC,CAAC;AAEe,IAAA,YAAY,GAAwD,YAAY,CAAC,MAAK;AACrG,QAAA,OAAO,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC;AAC/D,IAAA,CAAC,CAAC;AAEe,IAAA,eAAe,GAAwD,YAAY,CAAC,MAAK;AACxG,QAAA,OAAO,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,IAAI,KAAK,EAAE,KAAK,CAAC;AAC5E,IAAA,CAAC,CAAC;AAEF,IAAA,IAAI,gBAAgB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK;IACzB;AAEA,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,IAAK,IAAI,CAAC,KAAK,CAAC,GAAc;IAC7D;AAEA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW;IACrC;AAEA,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,IAAI,WAAW;IACrD;AAEA,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,IAAI,KAAK;IAC/C;AAEA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,WAAW;IAC1C;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,IAAI,QAAQ;IACrD;AAEA,IAAA,IAAI,GAAG,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS;IACnC;AAEA,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC;IAC3C;AAEA,IAAA,IAAI,gBAAgB,GAAA;QAClB,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC;IACnD;AAEA,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI;IAC1C;AAEA,IAAA,IAAI,iBAAiB,GAAA;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,iBAAiB,IAAI,KAAK;IACpD;AAEA,IAAA,WAAW,CAAC,CAAS,EAAA;AACnB,QAAA,MAAM,KAAK,GAAc,IAAI,CAAC,KAAK;AACnC,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAkB;AACvC,QAAA,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;YACzB,CAAC;YACD;AACD,SAAA,CAAC;IACJ;AAEA,IAAA,cAAc,CAAC,CAAS,EAAA;AACtB,QAAA,MAAM,KAAK,GAAc,IAAI,CAAC,KAAK;AACnC,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAM;AAC3B,QAAA,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC;YAC5B,CAAC;YACD;AACD,SAAA,CAAC;IACJ;AAEA,IAAA,IAAI,eAAe,GAAA;AACjB,QAAA,OAAO,CAAC,IAAI,CAAC,UAAU;IACzB;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG;AAEpB,QAAA,IAAI,GAAG,IAAI,IAAI,EAAE;AACf,YAAA,OAAO,IAAI;QACb;aAAO;AACL,YAAA,OAAO,IAAI,CAAC,KAAK,GAAG,GAAG;QACzB;IACF;AAEA;;;;AAIG;AACH,IAAA,MAAM,CAAC,KAAa,EAAA;AAClB,QAAA,IAAI,KAAK,KAAK,CAAC,EAAE;YACf;QACF;QAEA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC;IACpC;AAEA,IAAA,QAAQ,CAAC,KAAa,EAAA;QACpB,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC;IACpC;IAEA,UAAU,GAAA;AACR,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW;AACpC,QAAA,MAAM,QAAQ,GAAG,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,SAAS;AAClE,QAAA,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC;IAC/B;AAEA,IAAA,SAAS,CAAC,KAAa,EAAA;AACrB,QAAA,MAAM,KAAK,GAAc,IAAI,CAAC,KAAK;AACnC,QAAA,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC;QAEhC,IAAI,CAAC,WAAW,EAAE;YAChB;QACF;AAEA,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK;AACjE,QAAA,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,WAAW,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IAC3D;IAEA,WAAW,CAAC,YAAoB,EAAE,WAAmB,EAAA;AACnD,QAAA,MAAM,KAAK,GAAc,IAAI,CAAC,KAAK;AACnC,QAAA,MAAM,WAAW,GAAG,KAAK,CAAC,YAAY,CAAC;QAEvC,IAAI,CAAC,WAAW,EAAE;YAChB;QACF;AAEA,QAAA,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;AACzB,QAAA,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,WAAW,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AACzD,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE;IAClC;AAEA,IAAA,IAAI,CAAC,KAA2B,EAAA;QAC9B,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,YAAY,CAAC;IAC3D;IAEA,YAAY,CAAC,WAA8B,EAAE,CAAS,EAAA;AACpD,QAAA,MAAM,KAAK,GAAc,IAAI,CAAC,KAAK;AACnC,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAM;AAE3B,QAAA,OAAO,kBAAkB,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE;YAC/C,CAAC;YACD,KAAK;YACL;AACD,SAAA,CAAC;IACJ;uGAhKW,+BAA+B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA/B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA3ChC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsCT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACS,sBAAsB,EAAA,QAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,eAAe,gFAAE,kBAAkB,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,aAAA,EAAA,OAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,OAAA,EAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,EAAA,KAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,4BAAA,EAAA,2BAAA,EAAA,0BAAA,EAAA,+BAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,sBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,sLAAE,wBAAwB,EAAA,QAAA,EAAA,qCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,8BAAE,mBAAmB,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIvL,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBA5C3C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsCT,EAAA,CAAA;oBACD,OAAO,EAAE,CAAC,sBAAsB,EAAE,eAAe,EAAE,kBAAkB,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,WAAW,EAAE,mBAAmB,CAAC;oBACnM,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACtGD,MAAME,mBAAiB,GAAG,CAAC,+BAA+B,CAAC;MAW9C,6BAA6B,CAAA;uGAA7B,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;wGAA7B,6BAA6B,EAAA,OAAA,EAAA,CAXf,+BAA+B,EAAAD,IAAA,CAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAA/B,+BAA+B,CAAA,EAAA,CAAA;AAW7C,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,6BAA6B,YAPnCC,mBAAiB,EACpB,YAAY,CAAC,QAAQ,CAAC;gBACpB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,+BAA+B,EAAE;aAC5E,CAAC,CAAA,EAAA,CAAA;;2FAIO,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBATzC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;AACP,wBAAA,GAAGA,mBAAiB;wBACpB,YAAY,CAAC,QAAQ,CAAC;4BACpB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,+BAA+B,EAAE;yBAC5E;AACF,qBAAA;AACD,oBAAA,OAAO,EAAEA;AACV,iBAAA;;;ACLK,SAAU,gBAAgB,CAAc,MAAiC,EAAA;AAC7E,IAAA,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE,iBAAiB,EAAE,GAAG,MAAM;AAEnN,IAAA,OAAO,WAAW,CAAC;QACjB,GAAG;AACH,QAAA,IAAI,EAAE,aAAa;QACnB,GAAG,4BAA4B,CAAC,MAAM,EAAE;YACtC,KAAK;YACL,WAAW;YACX,SAAS;YACT,aAAa;YACb,OAAO;YACP,WAAW;YACX,UAAU;YACV,aAAa;YACb,gBAAgB;YAChB,QAAQ;YACR,WAAW;YACX,cAAc;YACd;SACD,CAAC;AACF,QAAA,UAAU,EAAE;AACV,YAAA,UAAU,EAAE,OAAO,CAAC,gBAAgB;AACrC;AACF,KAAA,CAAC;AACJ;;AC7BA,MAAMA,mBAAiB,GAAG,CAAC,oBAAoB,EAAE,uBAAuB,EAAE,qBAAqB,CAAC;MAMnF,+BAA+B,CAAA;uGAA/B,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;wGAA/B,+BAA+B,EAAA,OAAA,EAAA,CANjB,oBAAoB,EAAE,uBAAuB,EAAE,qBAAqB,CAAA,EAAA,OAAA,EAAA,CAApE,oBAAoB,EAAE,uBAAuB,EAAE,qBAAqB,CAAA,EAAA,CAAA;AAMlF,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,+BAA+B,YAHjCA,mBAAiB,EAHD,oBAAoB,EAAE,uBAAuB,EAAE,qBAAqB,CAAA,EAAA,CAAA;;2FAMlF,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAJ3C,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAEA,mBAAiB;AAC1B,oBAAA,OAAO,EAAEA;AACV,iBAAA;;;ACJK,SAAU,WAAW,CAAC,MAAyB,EAAA;IACnD,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,iBAAiB,EAAE,GAAG,MAAM;IAEvD,MAAM,WAAW,GAAG,mCAAmC;AACvD,IAAA,OAAO,WAAW,CAAC;QACjB,GAAG;AACH,QAAA,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,CAAC,sBAAsB,EAAE,iBAAiB,EAAE,YAAY,CAAC;QACnE,YAAY,EAAE,YAAY,IAAI,KAAK;QACnC,GAAG,4BAA4B,CAAC,MAAM,EAAE;YACtC,WAAW;AACX,YAAA,GAAG;SACJ;AACF,KAAA,CAAC;AACJ;AAIM,SAAU,aAAa,CAAC,MAA2B,EAAA;IACvD,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,iBAAiB,EAAE,GAAG,MAAM;IAEvD,MAAM,WAAW,GAAG,qCAAqC;AACzD,IAAA,OAAO,WAAW,CAAC;QACjB,GAAG;AACH,QAAA,IAAI,EAAE,UAAU;AAChB,QAAA,QAAQ,EAAE,CAAC,iBAAiB,EAAE,YAAY,CAAC;QAC3C,YAAY,EAAE,YAAY,IAAI,KAAK;QACnC,GAAG,4BAA4B,CAAC,MAAM,EAAE;YACtC,WAAW;AACX,YAAA,GAAG;SACJ;AACF,KAAA,CAAC;AACJ;AAEA;;;;;;;;;;;;;;;;;;;AAmBE;;ACLF;;;;AAIG;AACG,SAAU,cAAc,CAAC,MAAmC,EAAA;AAChE,IAAA,IAAI,KAAkC;AAEtC,IAAA,IAAI,MAAM,CAAC,WAAW,EAAE;AACtB,QAAA,KAAK,GAAG,OAAO,EAAE,WAAW,EAAE,kBAAkB,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;IACzE;AAAO,SAAA,IAAI,MAAM,CAAC,UAAU,EAAE;AAC5B,QAAA,KAAK,GAAG,OAAO,EAAE,UAAU,EAAE,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;IACvE;SAAO;QACL,KAAK,GAAG,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;IACxC;AAEA,IAAA,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;QACnB,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAC5B;IAEA,OAAO;AACL,QAAA,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;QAC7B;KACD;AACH;;MCzEa,sCAAsC,GAAG,IAAI,cAAc,CAAC,2CAA2C;MAKvG,kCAAkC,CAAA;AAC5B,IAAA,eAAe,GAAG,IAAI,eAAe,CAAgC,MAAM,CAAuC,sCAAsC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;AAE5L,IAAA,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;AAE9D,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK;IACnC;IAEA,IAAI,cAAc,CAAC,cAA6C,EAAA;AAC9D,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC;IAC3C;uGAXW,kCAAkC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAlC,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kCAAkC,cAFjC,MAAM,EAAA,CAAA;;2FAEP,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAH9C,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ICNW;AAAZ,CAAA,UAAY,oBAAoB,EAAA;AAC9B;;AAEG;AACH,IAAA,oBAAA,CAAA,oBAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ;AACR;;AAEG;AACH,IAAA,oBAAA,CAAA,oBAAA,CAAA,aAAA,CAAA,GAAA,CAAA,CAAA,GAAA,aAAe;AACf;;AAEG;AACH,IAAA,oBAAA,CAAA,oBAAA,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,GAAA,YAAc;AACd;;AAEG;AACH,IAAA,oBAAA,CAAA,oBAAA,CAAA,gBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,gBAAkB;AAClB;;AAEG;AACH,IAAA,oBAAA,CAAA,oBAAA,CAAA,eAAA,CAAA,GAAA,CAAA,CAAA,GAAA,eAAiB;AACjB;;AAEG;AACH,IAAA,oBAAA,CAAA,oBAAA,CAAA,sBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,sBAAwB;AAC1B,CAAC,EAzBW,oBAAoB,KAApB,oBAAoB,GAAA,EAAA,CAAA,CAAA;AA2B1B,SAAU,iCAAiC,CAAC,IAA0B,EAAE,gBAAsD,EAAA;AAClI,IAAA,IAAI,OAA6D;IACjE,IAAI,mBAAmB,GAAG,IAAI;IAE9B,QAAQ,IAAI;QACV,KAAK,oBAAoB,CAAC,UAAU;AAClC,YAAA,OAAO,GAAG,CAAC,CAAC,KAAI;AACd,gBAAA,IAAI,MAAmB;gBAEvB,QAAQ,OAAO,CAAC;AACd,oBAAA,KAAK,QAAQ;AACX,wBAAA,MAAM,GAAG,2BAA2B,CAAC,CAAC,CAAC;wBACvC;AACF,oBAAA,KAAK,QAAQ;AACX,wBAAA,MAAM,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC;wBACpB;AACF,oBAAA;wBACE,MAAM,GAAG,CAAC;wBACV;;AAGJ,gBAAA,OAAO,MAAM;AACf,YAAA,CAAC;AACD,YAAA,mBAAmB,GAAG,KAAK,CAAC;YAC5B;QACF,KAAK,oBAAoB,CAAC,oBAAoB;QAC9C,KAAK,oBAAoB,CAAC,aAAa;AACrC,YAAA,OAAO,GAAG,CAAC,CAAC,KAAI;AACd,gBAAA,IAAI,MAAmB;gBAEvB,QAAQ,OAAO,CAAC;AACd,oBAAA,KAAK,QAAQ;AACX,wBAAA,MAAM,GAAG,mBAAmB,CAAC,CAAC,CAAC;wBAC/B;AACF,oBAAA,KAAK,QAAQ;AACX,wBAAA,MAAM,GAAG,iBAAiB,CAAC,CAAC,CAAC;wBAC7B;AACF,oBAAA;wBACE,MAAM,GAAG,CAAC;wBACV;;AAGJ,gBAAA,OAAO,MAAM;AACf,YAAA,CAAC;AAED,YAAA,IAAI,IAAI,KAAK,oBAAoB,CAAC,oBAAoB,EAAE;gBACtD,mBAAmB,GAAG,KAAK;YAC7B;YAEA;QACF,KAAK,oBAAoB,CAAC,cAAc;QACxC,KAAK,oBAAoB,CAAC,WAAW;QACrC,KAAK,oBAAoB,CAAC,IAAI;AAC9B,QAAA;YACE,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,QAAQ,CAAC,CAA2B,CAAC,GAAG,CAAC,CAAC;YACxE;;AAGJ,IAAA,IAAI,gBAAgB,IAAI,mBAAmB,EAAE;QAC3C,MAAM,eAAe,GAAG,OAAO;AAE/B,QAAA,OAAO,GAAG,CAAC,KAAK,KAAI;AAClB,YAAA,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC;AACnC,YAAA,MAAM,MAAM,GAAG,IAAI,GAAG,gBAAgB,CAAC,sBAAsB,CAAC,IAAI,CAAC,GAAG,IAAI;AAC1E,YAAA,OAAO,MAAM;AACf,QAAA,CAAC;IACH;AAEA,IAAA,OAAO,OAAO;AAChB;AAEM,SAAU,6BAA6B,CAAC,IAA0B,EAAE,gBAAsD,EAAA;AAC9H,IAAA,IAAI,OAA6D;IACjE,IAAI,mBAAmB,GAAG,IAAI;IAE9B,QAAQ,IAAI;QACV,KAAK,oBAAoB,CAAC,UAAU;YAClC,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,iCAAiC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACvE,YAAA,mBAAmB,GAAG,KAAK,CAAC;YAC5B;QACF,KAAK,oBAAoB,CAAC,WAAW;YACnC,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,yBAAyB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAC/D;QACF,KAAK,oBAAoB,CAAC,cAAc;YACtC,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAC9C;QACF,KAAK,oBAAoB,CAAC,oBAAoB;QAC9C,KAAK,oBAAoB,CAAC,aAAa;YACrC,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAEvD,YAAA,IAAI,IAAI,KAAK,oBAAoB,CAAC,oBAAoB,EAAE;gBACtD,mBAAmB,GAAG,KAAK;YAC7B;YACA;QACF,KAAK,oBAAoB,CAAC,IAAI;AAC9B,QAAA;AACE,YAAA,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC;YAClB;;AAGJ,IAAA,IAAI,gBAAgB,IAAI,mBAAmB,EAAE;QAC3C,MAAM,eAAe,GAAG,OAAO;AAE/B,QAAA,OAAO,GAAG,CAAC,KAAK,KAAI;AAClB,YAAA,MAAM,IAAI,GAAG,KAAK,GAAG,gBAAgB,CAAC,sBAAsB,CAAC,KAAK,CAAC,GAAG,KAAK;AAC3E,YAAA,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC;AACpC,YAAA,OAAO,MAAM;AACf,QAAA,CAAC;IACH;AAEA,IAAA,OAAO,OAAO;AAChB;AAEM,SAAU,mCAAmC,CAAC,CAA0C,EAAE,CAA0C,EAAA;AACxI,IAAA,MAAM,OAAO,GAAG,OAAO,CAAC;AACxB,IAAA,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,QAAQ,GAAG,CAAC,KAAK,CAAC,GAAG,yBAAyB,CAAC,CAAS,EAAE,CAAS,CAAC,IAAI,CAAC,IAAI,CAAC;AACrI;AAEM,SAAU,qCAAqC,CAAC,CAAwC,EAAE,CAAwC,EAAA;AACtI,IAAA,OAAO,CAAC,IAAI,CAAC,GAAG,mCAAmC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,mCAAmC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;AACrI;;IC3HY;AAAZ,CAAA,UAAY,wBAAwB,EAAA;AAClC;;AAEG;AACH,IAAA,wBAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB;;AAEG;AACH,IAAA,wBAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB;;AAEG;AACH,IAAA,wBAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACf,CAAC,EAbW,wBAAwB,KAAxB,wBAAwB,GAAA,EAAA,CAAA,CAAA;AAsC9B,SAAU,gCAAgC,CAAC,KAAc,EAAA;AAC7D,IAAA,OAAO,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAQ,KAAwC,CAAC,IAAI,KAAK,QAAQ;AACzH;AA8IM,SAAU,kBAAkB,CAAC,eAA8D,EAAE,IAA8B,EAAA;IAC/H,OAAO,eAAe,CAAC,IAAI,CACzB,SAAS,CAAC,CAAC,CAAC,KAAI;AACd,QAAA,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC;AACjD,QAAA,IAAI,MAA+B;QAEnC,IAAI,MAAM,EAAE;AACV,YAAA,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM;AAC1B,YAAA,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CAChC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,EACxB,GAAG,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CACpC;QACH;aAAO;AACL,YAAA,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC;QACnB;AAEA,QAAA,OAAO,MAAM;IACf,CAAC,CAAC,EACF,oBAAoB,EAAE,EACtB,WAAW,CAAC,CAAC,CAAC,CACf;AACH;AAEA,MAAMI,2BAAyB,GAAiB,EAAE;AAElD;;AAEG;AACI,MAAM,8CAA8C,GAAG;AAE9D;;AAEG;AACI,MAAM,2CAA2C,GAAG;AAQrD,MAAO,yBAA0B,SAAQH,WAAiD,CAAA;AAC7E,IAAA,6BAA6B,GAAG,MAAM,CAAC,kCAAkC,CAAC;AAE1E,IAAA,IAAI,GAAG,IAAI,kBAAkB,EAAE;AAC/B,IAAA,SAAS,GAAG,IAAI,kBAAkB,EAAE;AACpC,IAAA,iBAAiB,GAAG,IAAI,kBAAkB,EAAE;AAE5C,IAAA,OAAO,GAAG,IAAI,eAAe,CAAoD,SAAS,CAAC;AACnG,IAAA,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,oBAAoB,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;AAE1F,IAAA,cAAc,GAAG,IAAI,eAAe,CAA6D,SAAS,CAAC;AAE3G,IAAA,gBAAgB,GAAG,IAAI,eAAe,CAA2C,SAAS,CAAC;AAC3F,IAAA,SAAS,GAAG,IAAI,eAAe,CAA+F,SAAS,CAAC;IACxI,QAAQ,GAAG,IAAI,eAAe,CAA4C,EAAE,CAAC,EAAE,CAAC,CAAC;AAElG;;AAEG;AACc,IAAA,iBAAiB,GAAG,IAAI,WAAW,CAAC,KAAK,CAAC;AAC1C,IAAA,kBAAkB,GAAG,IAAI,eAAe,CAAkC,SAAS,CAAC;IAC5F,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AAErD,IAAA,OAAO,GAAG,IAAI,eAAe,CAAS,CAAC,CAAC;AACxC,IAAA,eAAe,GAAG,IAAI,eAAe,CAAsC,SAAS,CAAC;IAC7F,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AAE/C,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ;AAC9B,IAAA,WAAW,GAAG,IAAI,OAAO,EAAQ;AAEjC,IAAA,mBAAmB,GAAG,IAAI,kBAAkB,EAAE;AAC9C,IAAA,gBAAgB,GAAG,IAAI,OAAO,EAAQ;AAE9C,IAAA,qBAAqB,GAAsB;AAClD,QAAA,YAAY,EAAE,CAAC,OAA+B,EAAE,IAAI,KAAI;YACtD,IAAI,OAAO,EAAE;AACX,gBAAA,OAAO,CAAC,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC;YAC/H;iBAAO;AACL,gBAAA,OAAO,KAAK;YACd;QACF;KACD;AAEQ,IAAA,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IAExE,qBAAqB,GAAG,IAAI,kBAAkB,CAC7D,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;AAC/C,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;IACzB,CAAC,CAAC,CACH;IAEQ,SAAS,GAAsC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,oBAAoB,EAAE,CAAC,CAAC,IAAI,CACtI,GAAG,CAAC,CAAC,eAAe,KAAI;AACtB,QAAA,OAAO,eAAe,IAAI,oBAAoB,EAAE;IAClD,CAAC,CAAC,EACF,oBAAoB,EAAE,EACtB,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,iBAAiB,GAAqD,IAAI,CAAC,SAAS,CAAC,IAAI,CAChG,GAAG,CAAC,CAAC,QAAQ,MAAM,QAAQ,GAAG,qBAAqB,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,EAC/E,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,SAAS,GAA4B,IAAI,CAAC,SAAS,CAAC,IAAI,CAC/D,qBAAqB,EAAE,EACvB,SAAS,CAAC,CAAC,CAAC,KAAI;AACd,QAAA,IAAI,GAA4B;QAEhC,IAAI,CAAC,EAAE;;AAEL,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,KAAK,gCAAgC,CAAC,CAAC,CAAC,EAAE;gBACjG,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAmC,OAAO,CAAC,KAAK,QAAQ,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC;gBAClG,GAAG;oBACD,sBAAsB,CAAkB,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,CAC5D,GAAG,CAAC,QAAQ,IAAI,mBAAmB,EAAE,CAAC,EACtC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAC7C,IAAI,EAAE,CAAC,SAAS,CAAC;YACtB;iBAAO;gBACL,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YAC1B;QACF;aAAO;AACL,YAAA,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC;QACrB;AAEA,QAAA,OAAO,GAAG;AACZ,IAAA,CAAC,CAAC,EACF,oBAAoB,CAAC,aAAa,CAAC,EACnC,WAAW,CAAC,CAAC,CAAC,CACf;IAEQ,sBAAsB,GAA4B,IAAI,CAAC,YAAY,CAAC,IAAI,CAC/E,GAAG,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAgF,OAAO,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EACpK,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,CAAC,EACzC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,gBAAgB,CAAC,KAAI;AAClC,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,iCAAiC,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAC;AACzF,IAAA,CAAC,CAAC,EACF,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC9D,oBAAoB,CAAC,yBAAyB,CAAC,EAC/C,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,eAAe,GAAG,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC;AAE9C;;AAEG;AACM,IAAA,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI;;AAEhD,IAAA,SAAS,CAAC,CAAC,CAAC,EACZ,GAAG,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC,EAClC,oBAAoB,EAAE,EACtB,SAAS,CAAC,MAAM,IAAI,CAAC,sBAAsB,CAAC,EAC5C,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,WAAW,GAAwC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAC1F,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,yBAAyB,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EACnD,oBAAoB,EAAE,EACtB,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,aAAa,GAAG,IAAI,WAAW,CAAc,IAAI,EAAE;AAC1D,QAAA,UAAU,EAAE;AACb,KAAA,CAAC;AAEO,IAAA,aAAa,GAAG,IAAI,WAAW,CAA4B,IAAI,EAAE;QACxE,UAAU,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,uFAAuF,CAAC;AACzH,KAAA,CAAC;AAEF,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,MAAM;IACvC;AAEA,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,MAAM;IACvC;AAEA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,SAAS;IAC5C;AAEA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,IAAI;IACvC;AAEA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,QAAQ,KAAK,wBAAwB,CAAC,IAAI;IACxD;AAEA,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK;IACzB;AAEA,IAAA,IAAI,QAAQ,GAAA;QACV,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,KAAK,oBAAoB,CAAC,aAAa;QAE5E,IAAI,cAAc,EAAE;AAClB,YAAA,OAAO,IAAI;QACb;aAAO;AACL,YAAA,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ;QACpC;IACF;AAEA,IAAA,IAAI,mBAAmB,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,mBAAmB,IAAI,IAAI;IAC/C;AAEA,IAAA,IAAI,4BAA4B,GAAA;QAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,4BAA4B,IAAI,IAAI,CAAC,mBAAmB,KAAK,KAAK;IACtF;AAEA,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,CAAC,IAAI,CAAC,QAAQ;IACvB;AAEA,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,IAAI,oBAAoB,CAAC,IAAI;IAChE;AAEA,IAAA,IAAI,QAAQ,GAAA;QACV,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,KAAK,oBAAoB,CAAC,UAAU;QAEzE,IAAI,cAAc,EAAE;YAClB,OAAO,wBAAwB,CAAC,IAAI;QACtC;aAAO;YACL,OAAO,IAAI,CAAC,QAAQ,GAAG,wBAAwB,CAAC,QAAQ,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,IAAI,wBAAwB,CAAC,QAAQ,CAAC;QAC/H;IACF;AAEA,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK;IACrC;AAEA,IAAA,IAAI,cAAc,GAAA;QAChB,OAAO,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,QAAQ,KAAK,wBAAwB,CAAC,QAAQ;IACnF;AAEA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW;IACrC;AAEA,IAAA,IAAI,YAAY,GAAA;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,IAAI,KAAK;IAC/C;AAEA,IAAA,IAAI,cAAc,GAAA;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,IAAI,KAAK;IACjD;AAEA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ;IAClC;AAEA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ;IAClC;AAEA,IAAA,IAAI,YAAY,GAAA;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,IAAI,IAAI;IAC9C;AAEA,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO;IACjC;AAEA,IAAA,IAAI,eAAe,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe;IACzC;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;IAClE;AAES,IAAA,QAAQ,GAAwB,IAAI,CAAC,eAAe,CAAC,IAAI,CAChE,SAAS,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAC3E,oBAAoB,EAAE,EACtB,WAAW,CAAC,CAAC,CAAC,CACf;IAEQ,cAAc,GAAwB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,KAAK,wBAAwB,CAAC,IAAI,CAAC,CAAC;AAE3H,IAAA,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAC9C,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,KAAK,wBAAwB,CAAC,QAAQ,CAAC,EACrE,WAAW,CAAC,CAAC,CAAC,CACf;IAEQ,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;AACxG,IAAA,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IAE7D,qBAAqB,GAAG,aAAa,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CACtG,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,KAAK,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,EACtG,oBAAoB,EAAE,EACtB,WAAW,CAAC,CAAC,CAAC,CACf;IAEQ,UAAU,GAA4B,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC,IAAI,CAC5H,GAAG,CAAC,CAAC,CAAc,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EACnD,oBAAoB,CAAc,aAAa,CAAC,EAChD,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,UAAU,GAAmC,IAAI,CAAC,WAAW,CAAC,IAAI,CACzE,YAAY,CAAC,CAAC,CAAC,EACf,GAAG,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,IAAI,EAAE,CAAC,EACzC,oBAAoB,EAAE,CACvB;AAEQ,IAAA,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;AAElF,IAAA,kBAAkB,GAAkD,IAAI,CAAC,cAAc,CAAC,IAAI,CACnG,GAAG,CAAC,CAAC,CAAC,KAAI;AACR,QAAA,IAAI,MAAyC;QAE7C,IAAI,CAAC,EAAE;AACL,YAAA,MAAM,GAAG,sBAAsB,CAC7B,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;AACnB,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;gBAEzC,IAAI,OAAO,EAAE;oBACX,OAAO;wBACL,OAAO;AACP,wBAAA,GAAG;qBACJ;gBACH;qBAAO;AACL,oBAAA,OAAO,SAAS;gBAClB;YACF,CAAC,CAAC,CACH;QACH;aAAO;YACL,MAAM,GAAG,EAAE;QACb;AAEA,QAAA,OAAO,MAAM;AACf,IAAA,CAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACf;IAEQ,sBAAsB,GAA4B,kBAAkB,CAAC,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAC;IACvG,qBAAqB,GAA4B,kBAAkB,CAAC,IAAI,CAAC,kBAAkB,EAAE,OAAO,CAAC;AAErG,IAAA,cAAc,GAAG,aAAa,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CACrG,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,KAAI;QACzB,MAAM,aAAa,GAAG,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC;AAC7C,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CACvB,GAAG,CAAC,MAAM,IAAI,CAAC,EACf,SAAS,CAAC,aAAa,CAAC,CACzB;IACH,CAAC,CAAC,EACF,oBAAoB,EAAE,EACtB,WAAW,CAAC,CAAC,CAAC,CACf;AAEkB,IAAA,sBAAsB,GAA4B,IAAI,CAAC,OAAO,CAAC,IAAI,CACpF,KAAK,EAAE,EACP,SAAS,CAAC,OAAO,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAC9D;AACkB,IAAA,sBAAsB,GAA0C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAE/G,IAAA,YAAY,GAA4B,aAAa,CAAC,CAAC,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CACjL,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,CAAC,KAAI;AAC3D,QAAA,IAAI,MAAmB;QAEvB,IAAI,CAAC,aAAa,EAAE;AAClB,YAAA,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE;gBAC1B,IAAI,GAAG,QAAQ,IAAI,IAAI,IAAI,EAAE,CAAC;YAChC;YAEA,IAAI,IAAI,EAAE;gBACR,IAAI,OAAO,EAAE;AACX,oBAAA,IAAI,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;AACnC,wBAAA,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC;oBAC9B;yBAAO;AACL,wBAAA,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC;oBAC3B;gBACF;qBAAO,IAAI,UAAU,EAAE;oBACrB,MAAM;wBACJ,wBAAwB,CAAC,UAAU,EAAE;4BACnC,IAAI;AACJ,4BAAA,iBAAiB,EAAE;yBACpB,CAAC,IAAI,IAAI;gBACd;AAAO,qBAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;oBACzB,IAAI,IAAI,CAAC,QAAQ,KAAK,wBAAwB,CAAC,QAAQ,EAAE;;wBAEvD,MAAM,GAAG,IAAI;oBACf;gBACF;YACF;QACF;AAEA,QAAA,OAAO,MAAM;AACf,IAAA,CAAC,CAAC,EACF,oBAAoB,CAAC,yBAAyB,CAAC,EAC/C,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,qBAAqB,GAAsD,aAAa,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,EAAE,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAC1M,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,YAAY,CAAC,KAAI;QACtC,IAAI,MAAM,GAA0C,CAAC;QAErD,IAAI,YAAY,IAAI,IAAI,IAAI,YAAY,IAAI,IAAI,EAAE;AAChD,YAAA,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,CAAC,EAAE,MAAM,IAAI,EAAE;AACxD,YAAA,MAAM,GAAG,GAAG,WAAW,CAAC,CAAC,YAAY,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC;AACtE,YAAA,MAAM,GAAG,GAAG,WAAW,CAAC,CAAC,YAAY,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC;AAEtE,YAAA,MAAM,GAAG;AACP,gBAAA,GAAG,CAAC;AACJ,gBAAA,MAAM,EAAE;oBACN,GAAG,CAAC,EAAE,MAAM;oBACZ,GAAG;oBACH;AACD;aACF;QACH;AAEA,QAAA,OAAO,MAAM;IACf,CAAC,CAAC,EACF,oBAAoB,EAAE,EACtB,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,aAAa,GAA4B,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAC/E,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,IAAI,CAAgB,CAAC,EACnD,oBAAoB,CAAc,UAAU,CAAC,EAC7C,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,aAAa,GAA4B,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAC/E,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,IAAI,CAAgB,CAAC,EACnD,oBAAoB,CAAc,UAAU,CAAC,EAC7C,WAAW,CAAC,CAAC,CAAC,CACf;AAED;;AAEG;AACM,IAAA,uBAAuB,GAAwB,aAAa,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAClH,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAChC,oBAAoB,EAAE,EACtB,WAAW,CAAC,CAAC,CAAC,CACf;IAEQ,uBAAuB,GAAwB,aAAa,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAClH,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EACvD,oBAAoB,EAAE,EACtB,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,aAAa,GAA8C,IAAI,CAAC,qBAAqB,CAAC,IAAI,CACjG,oBAAoB,EAAE,EACtB,GAAG,CAAC,CAAC,CAAC,KAAI;QACR,IAAI,CAAC,EAAE;YACL,MAAM,MAAM,GAAG,sCAAsC,CAAC,CAAC,EAAE,KAAK,CAAC;YAC/D,OAAO,CAAC,CAAc,MAAM,CAAC,IAAI,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QAC3D;aAAO;AACL,YAAA,OAAO,MAAM,IAAI;QACnB;AACF,IAAA,CAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,mBAAmB,GAAkC,MAAM,IAAI;IAE/D,WAAW,GAA4B,aAAa,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAC/H,YAAY,CAACG,2BAAyB,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EACtF,oBAAoB,CAAC,CAAC,OAAO,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,EAC1G,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAClE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,KAAI;AAClC,QAAA,IAAI,IAAI,IAAI,IAAI,EAAE;AAChB,YAAA,MAAM,QAAQ,GAAG,IAAI,sBAAsB,CAAC;gBAC1C,IAAI;AACJ,gBAAA,GAAG,MAAM;AACT,gBAAA,iBAAiB,EAAE;AACpB,aAAA,CAAC;;YAGF,IAAI,WAAW,EAAE;AACf,gBAAA,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;AAE3B,gBAAA,MAAM,OAAO,GAAG,WAAW,GAAG,IAAI,CAAC,UAAU;AAE7C,gBAAA,IAAI,OAAO,IAAI,CAAC,EAAE;AAChB,oBAAA,IAAI,GAAG,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC;oBAChC,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC9B;YACF;QACF;AAEA,QAAA,OAAO,IAAI;AACb,IAAA,CAAC,CAAC,EACF,oBAAoB,CAAC,yBAAyB,CAAC,EAC/C,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,uBAAuB,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAChE,GAAG,CAAC,CAAC,MAAM,KAAI;QACb,OAAO,IAAI,sBAAsB,CAAC;AAChC,YAAA,GAAG,MAAM;AACT,YAAA,iBAAiB,EAAE;AACpB,SAAA,CAAC;AACJ,IAAA,CAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACf;IAEQ,qBAAqB,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CACtD,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EACd,oBAAoB,EAAE,EACtB,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,WAAW,GAAiC,IAAI,CAAC,QAAQ,CAAC,IAAI,CACrE,oBAAoB,EAAE,EACtB,GAAG,CAAC,CAAC,CAAgC,KAAK,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,EAChE,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAC9D,GAAG,CAAC,CAAC,MAAM,KAAI;QACb,IAAI,MAAM,EAAE;YACV,MAAM,MAAM,GAAG,8BAA8B,CAAC,MAAM,CAAC,CAAC;YACtD,OAAO,CAAC,CAAc,MAAM,CAAC,IAAI,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QAC3D;aAAO;AACL,YAAA,OAAO,MAAM,IAAI;QACnB;IACF,CAAC,CAAC,CACH;IAEQ,QAAQ,GAAiC,aAAa,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CACrG,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,KAAI;AACzB,QAAA,IAAI,MAAoC;AAExC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QACjB;aAAO,IAAI,OAAO,EAAE;AAClB,YAAA,MAAM,GAAG,EAAE,CAAC,EAAE,CAAC;QACjB;aAAO;YACL,MAAM,GAAG,aAAa,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAC3J,GAAG,CAAC,CAAC,CAAC,YAAY,EAAE,aAAa,CAAC,KAAI;gBACpC,MAAM,cAAc,GAAqB,EAAE;gBAE3C,IAAI,YAAY,EAAE;;AAEhB,oBAAA,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;AACnB,wBAAA,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE;AAC5B,wBAAA,IAAI,UAAuB;AAE3B,wBAAA,IAAI,KAAK,CAAC,WAAW,EAAE;AACrB,4BAAA,UAAU,GAAG,mBAAmB,CAAC,KAAK,CAAC,WAAW,CAAC;wBACrD;AAAO,6BAAA,IAAI,KAAK,CAAC,UAAU,EAAE;AAC3B,4BAAA,UAAU,GAAG,wBAAwB,CAAC,KAAK,CAAC,UAAU,EAAE;AACtD,gCAAA,IAAI,EAAE,YAAY;AAClB,gCAAA,iBAAiB,EAAE;AACpB,6BAAA,CAAC;wBACJ;;AAGA,wBAAA,IAAI,UAAU,IAAI,aAAa,CAAC,UAAU,CAAC,EAAE;AAC3C,4BAAA,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC;wBAC7B;AACF,oBAAA,CAAC,CAAC;gBACJ;AAEA,gBAAA,OAAO,cAAc;YACvB,CAAC,CAAC,CACH;QACH;AAEA,QAAA,OAAO,MAAM;AACf,IAAA,CAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,gBAAgB,GAAwB,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAC9E,GAAG,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,CAAC,CAAC,CAAC,EAC/C,oBAAoB,EAAE,EACtB,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,qCAAqC,GAAwB,IAAI,CAAC,uBAAuB;AAEzF,IAAA,cAAc,GAAwB,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAC9E,GAAG,CAAC,CAAC,sBAAsB,KAAI;AAC7B,QAAA,OAAO,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC,mBAAmB,IAAI,CAAC,sBAAsB,CAAC;IACpF,CAAC,CAAC,EACF,oBAAoB,EAAE,EACtB,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,oBAAoB,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CACpD,SAAS,CAAC,CAAC,WAAW,KACpB,WAAW,CAAC,aAAa,CAAC,IAAI,CAC5B,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,OAAO,CAAC,EAC/C,GAAG,CAAC,CAAC,CAAC,KAAI;AACR,QAAA,IAAI,mBAAuC;AAE3C,QAAA,IAAI,CAAC,KAAK,SAAS,EAAE;YACnB,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;gBACzC,mBAAmB,GAAG,kBAAkB;YAC1C;iBAAO,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,8CAA8C,CAAC,EAAE;gBACpF,mBAAmB,GAAG,uDAAuD;YAC/E;iBAAO,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,2CAA2C,CAAC,EAAE;gBACjF,mBAAmB,GAAG,uCAAuC;YAC/D;iBAAO;gBACL,mBAAmB,GAAG,qCAAqC;YAC7D;QACF;AAEA,QAAA,OAAO,mBAAmB;AAC5B,IAAA,CAAC,CAAC,CACH,CACF,EACD,SAAS,CAAC,SAAS,CAAC,EACpB,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CACjD,GAAG,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,EACtB,oBAAoB,EAAE,EACtB,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,eAAe,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;AAC3C,IAAA,kBAAkB,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC;AACjD,IAAA,kBAAkB,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,YAAY,EAAE,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC7F,IAAA,kBAAkB,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;AACzE,IAAA,kBAAkB,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;AACzE,IAAA,mBAAmB,GAAG,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC;AACnD,IAAA,mBAAmB,GAAG,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC;AACnD,IAAA,iBAAiB,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;AAC/C,IAAA,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;AACvC,IAAA,0BAA0B,GAAG,QAAQ,CAAC,IAAI,CAAC,qBAAqB,CAAC;AACjE,IAAA,0BAA0B,GAAG,QAAQ,CAAC,IAAI,CAAC,qBAAqB,CAAC;AACjE,IAAA,yBAAyB,GAAG,QAAQ,CAAC,IAAI,CAAC,oBAAoB,CAAC;AAC/D,IAAA,qBAAqB,GAAG,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC;AACvD,IAAA,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;AACvC,IAAA,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;IAElD,QAAQ,GAAA;QACN,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;AAE3C,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY;QACzD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,GAAG,sBAAsB,CAAC,iBAAiB,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;AACzF,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,gBAAgB,IAAI,CAAC;AAEjE,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;aAC3B,IAAI,CACH,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,gBAAgB,KAAK,6BAA6B,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAC1I,YAAY,CAACA,2BAAyB,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EACtF,SAAS,CAAC,CAAC,CAAC,YAAY,EAAE,YAAY,CAAC,KAAI;AACzC,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAC1B,YAAY,CAACA,2BAAyB,GAAG,CAAC,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAC1F,mBAAmB,EAAE,EACrB,oBAAoB,CAAC,yBAAyB,CAAC,EAC/C,GAAG,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC,EAC3B,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CACrE;AACH,QAAA,CAAC,CAAC;AAEH,aAAA,SAAS,CAAC,CAAC,KAAK,KAAI;AACnB,YAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC;AAChC,YAAA,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;AAC9B,YAAA,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE;AAClC,QAAA,CAAC,CAAC;QAEJ,IAAI,uBAAuB,GAAG,KAAK;AAEnC;;;;AAIE;AAEF,QAAA,IAAI,IAAI,CAAC,4BAA4B,EAAE;AACrC,YAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,GAAG,IAAI,CAAC;AACxC,iBAAA,IAAI,CACH,SAAS,CAAC,CAAC,WAAW,KAAI;gBACxB,IAAI,WAAW,EAAE;;oBAEf,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAC1B,YAAY,CAAC,GAAG,CAAC,EACjB,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,aAAa,CAAC,EACpC,WAAW,EAAE,CACd;gBACH;qBAAO;AACL,oBAAA,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;gBAClB;AACF,YAAA,CAAC,CAAC;AAEH,iBAAA,SAAS,CAAC,CAAC,QAAQ,KAAI;AACtB,gBAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;AACpB,oBAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBACvC;AACF,YAAA,CAAC,CAAC;QACN;AAEA,QAAA,IAAI,CAAC,SAAS,CAAC,YAAY,GAAG,IAAI,CAAC;AAChC,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EACtD,oBAAoB,EAAE,EACtB,SAAS,CAAC,CAAC,sBAAsB,KAAI;YACnC,uBAAuB,GAAG,KAAK;AAC/B,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI;;AAE1B,YAAA,GAAG,CAAC,CAAC,UAAU,KAAK,CAAC,UAAU,EAAE,sBAAsB,CAAsB,CAAC,CAC/E;AACH,QAAA,CAAC,CAAC;aAEH,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,sBAAsB,CAAC,KAAI;;YAEzC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC,KAAK,SAAS,KAAK,CAAC,sBAAsB,KAAK,sBAAsB,IAAI,uBAAuB,CAAC,CAAC,EAAE;gBACpI;YACF;;AAGA,YAAA,IAAI,CAAC,KAAK,SAAS,IAAI,sBAAsB,EAAE;gBAC7C,uBAAuB,GAAG,IAAI;YAChC;AAEA,YAAA,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AACjB,QAAA,CAAC,CAAC;;QAGJ,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;AACrD,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnE;AAEA,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;;QAG1D,IAAI,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC,UAAU,KAAI;AACvD,YAAA,wBAAwB,CAAC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC;AACxD,YAAA,wBAAwB,CAAC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC;AAC1D,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,gBAAgB;AAC1D,QAAA,IAAI,gBAAwC;QAE5C,IAAI,cAAc,EAAE;YAClB,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC;QAClD;QAEA,IAAI,CAAC,gBAAgB,EAAE;YACrB,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,KAAK,wBAAwB,CAAC,IAAI;AACjE,YAAA,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,SAAS,CAAC;;YAG1C,IAAI,cAAc,EAAE;gBACjB,IAAI,CAAC,IAAkB,CAAC,UAAU,CAAC,cAAc,EAAE,IAAI,CAAC,iBAAiB,CAAC;YAC7E;AAEA,YAAA,gBAAgB,GAAG,IAAI,CAAC,iBAAiB;QAC3C;AAEA,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,gBAAgB,CAAC;AAE9C,QAAA,QAAQ,IAAI,CAAC,QAAQ;YACnB,KAAK,wBAAwB,CAAC,QAAQ;gBACpC;YACF,KAAK,wBAAwB,CAAC,IAAI;gBAChC,IAAI,CAAC,UAAU,EAAE;gBACjB;YACF,KAAK,wBAAwB,CAAC,QAAQ;gBACpC,IAAI,CAAC,OAAO,EAAE;gBACd;;AAGJ,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,EAAE;AACxB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1D;aAAO;YACL,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAAC,eAAe,CAAC;QACxE;QAEA,IAAI,CAAC,mBAAmB,CAAC,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,aAAa,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,EAAE,UAAU,CAAC,KAAI;;;AAG/L,YAAA,IAAI,WAAW,IAAI,IAAI,EAAE;AACvB,gBAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;YAC/D;AACF,QAAA,CAAC,CAAC;;AAGF,QAAA,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC;YAClC,CAAC,CAAC,KAAI;AACJ,gBAAA,MAAM,SAAS,GAAG,CAAC,CAAC,KAAoB;AACxC,gBAAA,IAAI,GAAiC;AAErC,gBAAA,IAAI,SAAS,IAAI,IAAI,EAAE;oBACrB,GAAG,GAAG,aAAa,CAAC,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,IAAI,CAC9E,GAAG,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,KAAI;;AAE5B,wBAAA,MAAM,yBAAyB,GAAG,iCAAiC,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC,SAAS,CAAC;AAEhH,wBAAA,IAAI,MAAM,GAAqB;AAC7B,4BAAA,GAAG,IAAI,CAAC,aAAa,CAAC;yBACvB;wBAED,IAAI,yBAAyB,EAAE;AAC7B,4BAAA,IAAI,CAAC,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,EAAE;gCACjD,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,yBAAyB,CAAC,EAAE;AAChD,oCAAA,MAAM,GAAG;wCACP,CAAC,2CAA2C,GAAG;qCAChD;gCACH;4BACF;iCAAO;AACL,gCAAA,MAAM,GAAG;oCACP,CAAC,8CAA8C,GAAG;iCACnD;4BACH;wBACF;AAEA,wBAAA,OAAO,MAAM;AACf,oBAAA,CAAC,CAAC,EACF,KAAK,EAAE,CACR;gBACH;qBAAO;AACL,oBAAA,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC;gBACd;AAEA,gBAAA,OAAO,GAAG;YACZ;AACD,SAAA,CAAC;IACJ;IAES,WAAW,GAAA;QAClB,KAAK,CAAC,WAAW,EAAE;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACnB,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;AACxB,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;AACvB,QAAA,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE;AACpC,QAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE;AAChC,QAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE;AAClC,QAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE;AAChC,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;AACzB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;AACxB,QAAA,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE;AAClC,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;AACvB,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE;AAC/B,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;AAC3B,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;AACxB,QAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE;AAChC,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;IAChC;AAEA,IAAA,YAAY,CAAC,MAAsB,EAAA;AACjC,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE;AAE5B,QAAA,IAAI,KAAK,CAAC,WAAW,EAAE;AACrB,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,WAAW,CAAC;QACxC;AAAO,aAAA,IAAI,KAAK,CAAC,UAAU,EAAE;AAC3B,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC;QAChC;IACF;AAEA,IAAA,UAAU,CAAC,KAAoC,EAAA;AAC7C,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK;QAExB,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;QAC9B;IACF;AAEA,IAAA,cAAc,CAAC,IAAiB,EAAA;AAC9B,QAAA,MAAM,IAAI,GAAG,mBAAmB,CAAC,IAAI,CAAC;QAEtC,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;QAC5B;IACF;AAEA,IAAA,iBAAiB,CAAC,IAAU,EAAA;AAC1B,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC;AACjC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;IACzB;AAEA,IAAA,eAAe,CAAC,QAAc,EAAA;AAC5B,QAAA,MAAM,UAAU,GAAG,yBAAyB,CAAC,QAAQ,CAAC;AACtD,QAAA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;IAC1B;AAEA,IAAA,OAAO,CAAC,IAAwB,EAAA;QAC9B,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,KAAK,IAAI,EAAE;AACrC,YAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC;AACjC,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AACpB,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;QACzB;IACF;AAEA,IAAA,kBAAkB,CAAC,KAAoB,EAAA;QACrC,IAAI,SAAS,GAAG,CAAC;AAEjB,QAAA,QAAQ,KAAK,CAAC,GAAG,EAAE,WAAW,EAAE;AAC9B,YAAA,KAAK,SAAS;gBACZ,SAAS,GAAG,CAAC;gBACb;AACF,YAAA,KAAK,WAAW;gBACd,SAAS,GAAG,CAAC,CAAC;gBACd;;QAGJ,IAAI,MAAM,GAAG,CAAC;QAEd,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE;YACnC,MAAM,GAAG,GAAG;QACd;AAAO,aAAA,IAAI,KAAK,CAAC,OAAO,EAAE;YACxB,MAAM,GAAG,EAAE;QACb;AAAO,aAAA,IAAI,KAAK,CAAC,QAAQ,EAAE;YACzB,MAAM,GAAG,CAAC;QACZ;AAEA,QAAA,IAAI,SAAS,KAAK,CAAC,EAAE;YACnB,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,qBAAqB,CAAC;iBACnD,IAAI,CAAC,KAAK,EAAE;iBACZ,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,KAAI;AAC5B,gBAAA,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAC7D,gBAAA,MAAM,QAAQ,GAAG,IAAI,sBAAsB,CAAC;AAC1C,oBAAA,IAAI,EAAE,OAAO;AACb,oBAAA,GAAG;AACJ,iBAAA,CAAC;AAEF,gBAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,QAAQ,CAAC,8BAA8B,CAAC,OAAO,EAAE,SAAS,KAAK,CAAC,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEjJ,gBAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;oBACpB,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;gBACzD;AACF,YAAA,CAAC,CAAC;QACN;IACF;AAEA,IAAA,kBAAkB,CAAC,KAAoB,EAAA;QACrC,IAAI,SAAS,GAAG,CAAC;AAEjB,QAAA,QAAQ,KAAK,CAAC,GAAG,EAAE,WAAW,EAAE;AAC9B,YAAA,KAAK,SAAS;gBACZ,SAAS,GAAG,CAAC;gBACb;AACF,YAAA,KAAK,WAAW;gBACd,SAAS,GAAG,CAAC,CAAC;gBACd;;QAGJ,IAAI,MAAM,GAAG,CAAC;QAEd,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE;YAClC,MAAM,GAAG,GAAG;QACd;AAAO,aAAA,IAAI,KAAK,CAAC,MAAM,EAAE;YACvB,MAAM,GAAG,EAAE;QACb;AAAO,aAAA,IAAI,KAAK,CAAC,QAAQ,EAAE;YACzB,MAAM,GAAG,CAAC;QACZ;AAEA,QAAA,IAAI,SAAS,KAAK,CAAC,EAAE;AACnB,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,MAAM,GAAG,SAAS,CAAC;AAC1D,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;QACzB;IACF;IAEA,SAAS,GAAA;;IAET;IAEA,YAAY,GAAA;;QAEV,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;AAC3C,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;AACvB,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE;QAC9B;IACF;IAEA,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;IACxB;IAEA,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;IACvB;AAEA,IAAA,UAAU,CAAC,OAAgB,EAAA;AACzB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;AACjD,YAAA,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;AACrB,QAAA,CAAC,CAAC;IACJ;IAEA,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;IACtB;uGAh7BW,yBAAyB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1PtC,kvKA2HA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED2HY,gBAAgB,81FAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,iOAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,QAAQ,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,KAAA,EAAA,KAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,qLAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,4BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAkF,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAA5E,YAAY,EAAA,IAAA,EAAA,UAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,QAAQ,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,gBAAgB,gDAAE,gBAAgB,EAAA,IAAA,EAAA,cAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIrQ,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBANrC,SAAS;AAEC,YAAA,IAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,eAAe,EAAE,QAAQ,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,cAAc,EAAE,WAAW,EAAE,mBAAmB,EAAE,aAAa,EAAE,aAAa,EAAE,kBAAkB,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,EAAA,eAAA,EAClR,uBAAuB,CAAC,MAAM,cACnC,IAAI,EAAA,QAAA,EAAA,kvKAAA,EAAA;;;AE3KlB,SAAS,kCAAkC,CAAC,IAA0B,EAAE,gBAAsD,EAAA;IAC5H,MAAM,oBAAoB,GAAG,iCAAiC,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAEtF,OAAO,CAAC,CAAC,KAAI;AACX,QAAA,IAAI,MAAwB;QAE5B,IAAI,CAAC,EAAE;AACL,YAAA,MAAM,GAAG;AACP,gBAAA,KAAK,EAAE,oBAAoB,CAAC,CAAC,CAAC,KAAK,CAAS;AAC5C,gBAAA,GAAG,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG;aAChC;QACH;AAEA,QAAA,OAAO,MAAM;AACf,IAAA,CAAC;AACH;AAEA,SAAS,mCAAmC,CAAC,IAA0B,EAAE,gBAAsD,EAAA;IAC7H,MAAM,qBAAqB,GAAG,6BAA6B,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAEnF,OAAO,CAAC,CAAC,KAAI;AACX,QAAA,IAAI,MAAwB;QAE5B,IAAI,CAAC,EAAE;AACL,YAAA,MAAM,GAAG;AACP,gBAAA,KAAK,EAAE,qBAAqB,CAAC,CAAC,CAAC,KAAK,CAAS;AAC7C,gBAAA,GAAG,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAAG;aACjC;QACH;AAEA,QAAA,OAAO,MAAM;AACf,IAAA,CAAC;AACH;AAEA,MAAM,yBAAyB,GAAiB,EAAE;AA0C5C,MAAO,+BAAgC,SAAQN,WAAuD,CAAA;AACzF,IAAA,kCAAkC,GAAG,MAAM,CAAC,kCAAkC,CAAC;AAEvF,IAAA,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAoB,WAAW,CAAC;IAC7D,qBAAqB,GAAG,SAAS,CAAqB,gBAAgB,kEAAI,IAAI,EAAE,UAAU,EAAA,CAAG;IAC7F,mBAAmB,GAAG,SAAS,CAAqB,cAAc,gEAAI,IAAI,EAAE,UAAU,EAAA,CAAG;AAEzF,IAAA,2BAA2B,GAAG,MAAM,CAAyC,SAAS,uEAAC;AACvF,IAAA,0BAA0B,GAAG,MAAM,CAAiC,QAAQ,sEAAC;AAErE,IAAA,IAAI,GAAG,IAAI,kBAAkB,EAAE;AAE/B,IAAA,kBAAkB,GAAG,IAAI,kBAAkB,EAAE;AAC7C,IAAA,uBAAuB,GAAG,IAAI,kBAAkB,EAAE;AAElD,IAAA,kBAAkB,GAAG,IAAI,kBAAkB,EAAE;AAC7C,IAAA,wBAAwB,GAAG,IAAI,kBAAkB,EAAE;AACnD,IAAA,kBAAkB,GAAG,IAAI,kBAAkB,EAAE;AAC7C,IAAA,cAAc,GAAG,IAAI,kBAAkB,EAAE;AACzC,IAAA,cAAc,GAAG,IAAI,kBAAkB,EAAE;AAEzC,IAAA,OAAO,GAAG,IAAI,eAAe,CAA0D,SAAS,CAAC;AACjG,IAAA,cAAc,GAAG,IAAI,eAAe,CAAoD,SAAS,CAAC;AAClG,IAAA,eAAe,GAAG,IAAI,eAAe,CAAqD,SAAS,CAAC;AAEpG,IAAA,SAAS,GAAG,IAAI,eAAe,CAA2C,SAAS,CAAC;IACpF,QAAQ,GAAG,IAAI,eAAe,CAA4C,EAAE,CAAC,EAAE,CAAC,CAAC;AAEjF,IAAA,eAAe,GAAG,IAAI,OAAO,EAAqB;AAC1D,IAAA,kBAAkB,GAA0C,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;AAElG,IAAA,eAAe,GAAG,IAAI,eAAe,CAA2C,SAAS,CAAC;IAClG,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AAEvD,IAAA,OAAO,GAAqD,IAAI,CAAC,OAAO,CAAC,IAAI,CACpF,WAAW,EAAE,EACb,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EACnB,oBAAoB,EAAE,EACtB,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,sBAAsB,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;AAEtF,IAAA,cAAc,GAA+C,IAAI,CAAC,cAAc,CAAC,IAAI,CAC5F,qBAAqB,CAAiC,QAAQ,CAAC,EAC/D,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,EACzB,oBAAoB,EAAE,EACtB,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IAEpF,SAAS,GAAsC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,oBAAoB,EAAE,CAAC,CAAC,IAAI,CAC/H,GAAG,CAAC,CAAC,eAAe,KAAI;AACtB,QAAA,OAAO,eAAe,IAAI,oBAAoB,EAAE;IAClD,CAAC,CAAC,EACF,oBAAoB,EAAE,EACtB,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,iBAAiB,GAAqD,IAAI,CAAC,SAAS,CAAC,IAAI,CAChG,GAAG,CAAC,CAAC,QAAQ,MAAM,QAAQ,GAAG,qBAAqB,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,EAC/E,WAAW,CAAC,CAAC,CAAC,CACf;IAEQ,sBAAsB,GAAiC,IAAI,CAAC,YAAY,CAAC,IAAI,CACpF,GAAG,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAwC,OAAO,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAC5H,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,CAAC,EACzC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,gBAAgB,CAAC,KAAI;AAClC,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,kCAAkC,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAC;AAC1F,IAAA,CAAC,CAAC,EACF,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC/D,oBAAoB,CAAmB,kBAAkB,CAAC,EAC1D,WAAW,CAAC,CAAC,CAAC,CACf;AAED,IAAA,yBAAyB,CAAC,IAAoC,EAAA;QAC5D,MAAM,MAAM,GAAiC,aAAa,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,IAAI,CAClH,SAAS,CAAC,CAAC,CAAC,cAAc,EAAE,aAAa,CAAC,KAAI;AAC5C,YAAA,MAAM,yBAAyB,GAAG,OAAO,CAAC,cAAc,CAAC;AACzD,YAAA,MAAM,WAAW,GAAG,CAAC,SAAoB,KAAK,aAAa,CAAC,cAAc,CAAC,SAAS,CAAC;AAErF,YAAA,IAAI,IAAI,KAAK,QAAQ,EAAE;;AAErB,gBAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CACjC,oBAAoB,CAAC,kBAAkB,CAAC,EACxC,GAAG,CAAC,CAAC,cAAc,KAAI;AACrB,oBAAA,MAAM,IAAI,GAAG,cAAc,EAAE,KAAK;oBAClC,OAAO,IAAI,GAAI,WAAW,CAAC,SAAS,CAAC,EAAE,GAAG,cAAc,EAAE,IAAI,EAAoB,CAAC,CAAe,GAAG,IAAI;gBAC3G,CAAC,CAAC,CACH;YACH;iBAAO;;AAEL,gBAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CACjC,IAAI,CAAC,CAAC,GAAuB,EAAE,aAAwC,KAAI;AACzE,oBAAA,IAAI,MAA0B;oBAC9B,IAAI,QAAQ,GAAkC,OAAO;oBAErD,IAAI,aAAa,IAAI,aAAa,CAAC,KAAK,IAAI,IAAI,EAAE;wBAChD,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,GAAG,aAAa;AACrD,wBAAA,MAAM,iBAAiB,GAAG,SAAS,CAAC,EAAE,GAAG,cAAc,EAAE,IAAI,EAAE,eAAe,EAAoB,CAAC;;AAGnG,wBAAA,IAAI,eAAe,IAAI,GAAG,EAAE;4BAC1B,MAAM,KAAK,GAAG,yBAAyB,CAAC,aAAa,EAAE,iBAAiB,CAAc;AACtF,4BAAA,MAAM,GAAG;AACP,gCAAA,aAAa,EAAE,aAAa;AAC5B,gCAAA,QAAQ,EAAE,KAAK;gCACf;6BACD;;;AAID,4BAAA,IAAI,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,YAAY,KAAK,OAAO,IAAI,aAAa,CAAC,eAAe,EAAE,GAAG,CAAC,EAAE;gCAC5F,IAAI,aAAa,CAAC,eAAe,EAAE,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC,EAAE;oCAC5D,QAAQ,GAAG,aAAa;gCAC1B;4BACF;wBACF;6BAAO;4BACL,IAAI,KAAK,GAAqB,SAAS;4BACvC,IAAI,QAAQ,GAAqB,iBAAiB;AAElD,4BAAA,IAAI,IAAI,KAAK,QAAQ,EAAE;gCACrB,IAAI,CAAC,yBAAyB,EAAE;;oCAE9B,QAAQ,GAAG,SAAS;AACpB,oCAAA,QAAQ,GAAG,GAAG,CAAC,YAAY,KAAK,OAAO,GAAG,KAAK,GAAG,OAAO;gCAC3D;AAAO,qCAAA,IAAI,GAAG,CAAC,YAAY,KAAK,aAAa,EAAE;oCAC7C,QAAQ,GAAG,KAAK;gCAClB;qCAAO;;oCAEL,QAAQ,GAAG,GAAG,CAAC,YAAY,KAAK,OAAO,IAAI,GAAG,CAAC,QAAQ,IAAI,iBAAiB,CAAC,eAAe,EAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,KAAK,GAAG,OAAO;gCAC/H;;gCAGA,QAAQ,QAAQ;AACd,oCAAA,KAAK,KAAK;AACR,wCAAA,MAAM,SAAS,GAAG,GAAG,CAAC,aAAa,EAAE,KAAa;AAElD,wCAAA,IAAI,eAA0B;wCAC9B,MAAM,kCAAkC,GAAG,CAAC,SAAS,IAAI,QAAQ,CAAC,eAAe,EAAE,SAAS,CAAC;AAE7F,wCAAA,IAAI,SAAe;AACnB,wCAAA,IAAI,OAAa;wCAEjB,IAAI,kCAAkC,EAAE;4CACtC,SAAS,GAAG,eAAe;4CAC3B,OAAO,GAAG,SAAS;4CACnB,eAAe,GAAG,iBAAiB;wCACrC;6CAAO;4CACL,SAAS,GAAG,SAAS;4CACrB,OAAO,GAAG,eAAe;AACzB,4CAAA,eAAe,GAAG,SAAS,CAAC,EAAE,GAAG,cAAc,EAAE,IAAI,EAAE,SAAS,EAAoB,CAAC;wCACvF;;wCAGA,IAAI,QAAQ,CAAC,eAAe,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE;;4CAG1C,SAAS,GAAG,eAAe;4CAC3B,OAAO,GAAG,eAAe;4CACzB,QAAQ,GAAG,OAAO;4CAClB,QAAQ,GAAG,eAAe;wCAC5B;6CAAO;4CACL,QAAQ,GAAG,KAAK;wCAClB;;AAGA,wCAAA,KAAK,GAAG;AACN,4CAAA,KAAK,EAAE,SAAS;AAChB,4CAAA,GAAG,EAAE;yCACN;wCACD;AACF,oCAAA,KAAK,OAAO;;AAEV,wCAAA,KAAK,GAAG;AACN,4CAAA,KAAK,EAAE,eAAuB;AAC9B,4CAAA,GAAG,EAAE;yCACN;wCACD;;4BAEN;AAAO,iCAAA,IAAI,GAAG,CAAC,QAAQ,IAAI,iBAAiB,CAAC,eAAe,EAAE,GAAG,CAAC,QAAQ,CAAC,EAAE;;AAE3E,gCAAA,KAAK,GAAG;AACN,oCAAA,KAAK,EAAE,GAAG,CAAC,QAAQ,CAAC,KAAK;AACzB,oCAAA,GAAG,EAAE;iCACN;AAED,gCAAA,IAAI,IAAI,KAAK,iBAAiB,EAAE;;AAE9B,oCAAA,IAAI,eAAe,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,eAAe,CAAC,EAAE;;AAElF,wCAAA,KAAK,GAAG,SAAS,CAAC,EAAE,GAAG,cAAc,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAoB,CAAC;wCAC7E,QAAQ,GAAG,KAAK;oCAClB;yCAAO;wCACL,QAAQ,GAAG,KAAK;oCAClB;gCACF;qCAAO;;AAEL,oCAAA,QAAQ,GAAG,GAAG,CAAC,QAAQ;gCACzB;4BACF;AAAO,iCAAA,IAAI,IAAI,KAAK,iBAAiB,EAAE;gCACrC,KAAK,GAAG,iBAAiB;4BAC3B;AAEA,4BAAA,MAAM,GAAG;AACP,gCAAA,aAAa,EAAE,aAAa;gCAC5B,QAAQ;gCACR;6BACD;wBACH;oBACF;yBAAO;AACL,wBAAA,MAAM,GAAG;AACP,4BAAA,aAAa,EAAE;yBAChB;oBACH;oBAEA,IAAI,MAAM,EAAE;AACV,wBAAA,MAAM,GAAG;AACP,4BAAA,YAAY,EAAE,QAAQ;4BACtB,aAAa,EAAE,MAAM,CAAC,aAAa;AACnC,4BAAA,QAAQ,EAAE,MAAM,CAAC,QAAQ,GAAI,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAe,GAAG,SAAS;AACnF,4BAAA,KAAK,EAAE,MAAM,CAAC,KAAK,GAAI,WAAW,CAAC,MAAM,CAAC,KAAK,CAAe,GAAG;yBAClE;oBACH;AAEA,oBAAA,OAAO,MAAM;gBACf,CAAC,EAAE,EAAE,CAAC,EACN,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC;AAClD,gBAAA,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC;iBAC5B;YACH;QACF,CAAC,CAAC,CACH;AAED,QAAA,OAAO,MAAM;IACf;AAES,IAAA,aAAa,GAAiC,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAC3G,IAAA,eAAe,GAAiC,IAAI,CAAC,cAAc,CAAC,IAAI,CAC/E,SAAS,CAAC,CAAC,IAAI,KAAI;AACjB,QAAA,IAAI,IAAI,KAAK,iBAAiB,EAAE;;YAE9B,OAAO,IAAI,CAAC,sBAAsB;QACpC;aAAO;YACL,OAAO,IAAI,CAAC,aAAa;QAC3B;IACF,CAAC,CAAC,CACH;AAED;;AAEG;IACM,kBAAkB,GAAqB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAC7F,SAAS,CAAC,CAAC,cAAc,KAAI;AAC3B,QAAA,IAAI,cAAc,IAAI,cAAc,CAAC,IAAI,KAAK,UAAU,IAAI,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE;YACvF,OAAO,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC;QACvC;aAAO;AACL,YAAA,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAC5B,KAAK,EAAE,EACP,GAAG,CAAC,CAAC,YAAY,KAAI;gBACnB,OAAO,YAAY,EAAE,KAAK,IAAI,cAAc,EAAE,KAAK,EAAE,KAAK;YAC5D,CAAC,CAAC,CACH;QACH;IACF,CAAC,CAAC,EACF,WAAW,EAAE,EACb,WAAW,CAAC,CAAC,CAAC,CACf;IAEQ,mBAAmB,GAAiC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC;AAEvI,IAAA,kBAAkB,GAAiD,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAC1G,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,IAAIO,SAAmB,CAAO,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,EACtE,WAAW,CAAC,CAAC,CAAC,CACf;IAEQ,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAC9C,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAC,EAC1B,oBAAoB,EAAE,EACtB,WAAW,CAAC,CAAC,CAAC,CACf;IAEQ,cAAc,GAAG,IAAI,SAAS,CAAC;AACtC,QAAA,KAAK,EAAE,IAAI,WAAW,CAAc,IAAI,CAAC;AACzC,QAAA,GAAG,EAAE,IAAI,WAAW,CAAc,IAAI;AACvC,KAAA,CAAC;AAEF,IAAA,IAAI,mBAAmB,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK;IACzB;AAEA,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa;IACvC;AAEA,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,IAAI,oBAAoB,CAAC,IAAI;IAChE;AAEA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW;IACrC;AAEA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ;IAClC;AAEA,IAAA,IAAI,YAAY,GAAA;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,IAAI,IAAI;IAC9C;AAEA,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO;IACjC;AAEA,IAAA,IAAI,cAAc,GAAA;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,IAAI,IAAI;IAChD;AAES,IAAA,YAAY,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CACtD,iBAAiB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACtC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,CAAC,EAC3B,oBAAoB,CAAC,kBAAkB,CAAC,EACxC,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CACpC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC,EAC5B,oBAAoB,EAAE,EACtB,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CACpC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,EAC1B,oBAAoB,EAAE,EACtB,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,aAAa,GAA8C,IAAI,CAAC,OAAO,CAAC,IAAI,CACnF,oBAAoB,EAAE,EACtB,GAAG,CAAC,CAAC,CAAC,KAAI;QACR,IAAI,CAAC,EAAE;YACL,MAAM,MAAM,GAAG,sCAAsC,CAAC,CAAC,EAAE,KAAK,CAAC;YAC/D,OAAO,CAAC,CAAc,MAAM,CAAC,IAAI,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QAC3D;aAAO;AACL,YAAA,OAAO,MAAM,IAAI;QACnB;AACF,IAAA,CAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,mBAAmB,GAAkC,MAAM,IAAI;AAE/D,IAAA,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;AAC3D,IAAA,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;AAC3D,IAAA,iBAAiB,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;AAC/C,IAAA,oBAAoB,GAAG,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC;AACrD,IAAA,uBAAuB,GAAG,QAAQ,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;AACnF,IAAA,kBAAkB,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,YAAY,EAAE,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAEtG,QAAQ,GAAA;QACN,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;AAE3C,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAExE,QAAA,MAAM,iBAAiB,GAAG,CAAC,KAAuB,KAAI;AACpD,YAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,KAA2B,CAAC,EAAE;AAC/E,gBAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;AAC3B,oBAAA,KAAK,EAAE,KAAK,EAAE,KAAK,IAAI,IAAI;AAC3B,oBAAA,GAAG,EAAE,KAAK,EAAE,GAAG,IAAI;AACpB,iBAAA,CAAC;YACJ;AACF,QAAA,CAAC;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;aAC3B,IAAI,CACH,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,gBAAgB,KAAK,mCAAmC,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAChJ,YAAY,CAAC,yBAAyB,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EACtF,SAAS,CAAC,CAAC,CAAC,YAAY,EAAE,YAAY,CAAC,KAAI;AACzC,YAAA,OAAO,kBAAkB,CAAC,IAAI,CAC5B,mBAAmB,EAAE,EACrB,oBAAoB,CAAmB,kBAAkB,CAAC,EAC1D,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,EAAE,YAAY,CAAyD,CAAC,CACpG;AACH,QAAA,CAAC,CAAC;aAEH,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,YAAY,EAAE,YAAY,CAAC,KAAI;AACpD,YAAA,MAAM,KAAK,GAAG,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC,GAAG,IAAI;YACtD,MAAM,WAAW,GAAG,qCAAqC,CAAC,KAAK,EAAE,YAAY,CAAC;YAE9E,IAAI,CAAC,WAAW,EAAE;AAChB,gBAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC;AAChC,gBAAA,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;AAC9B,gBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE;YAClC;AAAO,iBAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;;gBAE3B,iBAAiB,CAAC,QAAQ,CAAC;YAC7B;AACF,QAAA,CAAC,CAAC;AAEJ,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACtE;QAEA,IAAI,CAAC,wBAAwB,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACzH,IAAI,CAAC,kBAAkB,CAAC,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAErH,QAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,GAAG,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC,CAAmB,KAAI;YACnG,iBAAiB,CAAC,CAAC,CAAC;AACtB,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,IAAI,CAAC,uBAAuB,CAAC,YAAY,GAAG,IAAI,CAAC;AAC9C,iBAAA,IAAI,CACH,YAAY,CAAC,GAAG,CAAC;YACjB,SAAS,CAAC,MAAK;AACb,gBAAA,OAAO,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,CAC1C,YAAY,CAAC,GAAG,CAAC,EACjB,MAAM,CAAC,MAAK;oBACV,MAAM,WAAW,GAAG,IAAI,CAAC,qBAAqB,EAAE,EAAE,aAAa,EAAE,KAAK;AACtE,oBAAA,IAAI,KAAK,GAAG,mBAAmB,CAAC,WAAW,CAAC;oBAE5C,IAAI,KAAK,IAAI,IAAI,CAAC,0BAA0B,EAAE,KAAK,QAAQ,EAAE;wBAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,EAAE,EAAE,aAAa,EAAE,KAAK;AAClE,wBAAA,KAAK,GAAG,mBAAmB,CAAC,SAAS,CAAC;oBACxC;oBAEA,OAAO,KAAK,CAAC;AACf,gBAAA,CAAC,CAAC,EACF,GAAG,CAAC,CAAC,CAAC,KAAK,CAA8B,CAAC,CAC3C;AACH,YAAA,CAAC,CAAC,EACF,oBAAoB,CAAC,eAAe,CAAC;AAEtC,iBAAA,SAAS,CAAC,CAAC,CAA4B,KAAI;AAC1C,gBAAA,MAAM,oBAAoB,GAAG,IAAI,CAAC,0BAA0B,EAAE;AAE9D,gBAAA,IAAI,oBAAoB,KAAK,QAAQ,EAAE;oBACrC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,IAAI,EAAE,OAAO,CAAC;gBAClE;qBAAO;oBACL,IAAI,UAAU,GAA8B,CAAC;AAE7C,oBAAA,MAAM,cAAc,GAAG,IAAI,CAAC,oBAAoB,EAAE;AAElD,oBAAA,IAAI,oBAAoB,KAAK,iBAAiB,IAAI,cAAc,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,GAAG,EAAE;wBACtF,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,KAAK,EAAE,cAAc,CAAC,EAAE;;AAE/C,4BAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC,2BAA2B,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,EAAoB,CAAC;AACtG,4BAAA,UAAU,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE;wBACpD;oBACF;AAEA,oBAAA,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC;gBACxC;AACF,YAAA,CAAC,CAAC;QACN;AAEA,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC;AAE1F,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,QAAQ,KAAI;YAC1E,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;YAE1C,IAAI,GAAG,EAAE;gBACP,IAAI,QAAQ,EAAE;oBACZ,GAAG,CAAC,OAAO,EAAE;gBACf;qBAAO;oBACL,GAAG,CAAC,MAAM,EAAE;gBACd;YACF;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,mBAAmB,CAAC,YAAY;AAC/D,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,GAAG,sBAAsB,CAAC,iBAAiB,CAAC,GAAG,SAAS,CAAC;;QAG5F,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE;AAC3D,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5D;;QAGA,IAAI,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC,QAAQ,KAAI;YACrD,IAAI,QAAQ,EAAE;AACZ,gBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;YAC/B;iBAAO;AACL,gBAAA,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;AAE5B,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,KAAI;oBACrD,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;oBAE1C,IAAI,GAAG,EAAE;wBACP,IAAI,QAAQ,EAAE;4BACZ,GAAG,CAAC,OAAO,EAAE;wBACf;6BAAO;4BACL,GAAG,CAAC,MAAM,EAAE;wBACd;oBACF;AACF,gBAAA,CAAC,CAAC;YACJ;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,EAAE;AACxB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1D;aAAO;YACL,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,kCAAkC,CAAC,eAAe,CAAC;QAC7E;AAEA,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;AACzE,YAAA,IAAI,CAAC,QAAQ,EAAE,CAAC,UAAU,GAAG,CAAC;AAChC,QAAA,CAAC,CAAC;IACJ;IAES,WAAW,GAAA;QAClB,KAAK,CAAC,WAAW,EAAE;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACnB,QAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE;AACjC,QAAA,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE;AACtC,QAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE;AACjC,QAAA,IAAI,CAAC,wBAAwB,CAAC,OAAO,EAAE;AACvC,QAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE;AACjC,QAAA,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;AAC7B,QAAA,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;AAC7B,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;AACvB,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;AAC9B,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE;AAC/B,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;AACzB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;AACxB,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE;AAC/B,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE;IACjC;AAEA,IAAA,cAAc,CAAC,IAAiB,EAAA;AAC9B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,UAAU,CAAC;IAC9D;IAEA,YAAY,CAAC,KAAgC,EAAE,IAA2B,EAAA;QACxE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IAC5C;AAEA,IAAA,gBAAgB,CAAC,IAAiB,EAAA;QAChC,OAAO,IAAI,GAAG,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC,2BAA2B,EAAE,EAAE,IAAI,EAAoB,CAAC,GAAG,SAAS;IACxG;uGA7hBW,+BAA+B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA/B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,SAAA,EAV/B;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iCAAiC;AAC1C,gBAAA,QAAQ,EAAE,UAAU,CAAC,MAAM,uCAAuC;AACnE;AACF,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAQyD,WAAW,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,uBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EACoB,UAAU,8HACd,UAAU,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC9JjG,o6BAcA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDuIY,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAT,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,EAAA,YAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,yBAAA,EAAA,uBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,YAAA,EAAA,KAAA,EAAA,KAAA,EAAA,UAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,kBAAkB,sUAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,sGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,cAAc,+BAAY,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAI3G,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAZ3C,SAAS;AAEG,YAAA,IAAA,EAAA,CAAA,EAAA,SAAA,EAAA;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iCAAiC;AAC1C,4BAAA,QAAQ,EAAE,UAAU,CAAC,MAAM,uCAAuC;AACnE;qBACF,EAAA,OAAA,EACQ,CAAC,mBAAmB,EAAE,kBAAkB,EAAE,WAAW,EAAE,mBAAmB,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAA,eAAA,EACtG,uBAAuB,CAAC,MAAM,cACnC,IAAI,EAAA,QAAA,EAAA,o6BAAA,EAAA;AAK0C,SAAA,CAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAAA,WAAW,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,qBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CACN,gBAAgB,EAAA,EAAA,GAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,mBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CACxC,cAAc,EAAA,EAAA,GAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;MA4hBtF,uCAAuC,CAAA;AACjC,IAAA,YAAY,GAAG,MAAM,EAAC,WAAc,EAAC;AAC7C,IAAA,+BAA+B,GAAG,MAAM,CAAC,+BAA+B,CAAC;AAElF,IAAA,iBAAiB,CAAC,IAAc,EAAE,YAAoC,EAAE,KAAY,EAAA;;AAElF,QAAA,OAAO,YAAY;IACrB;AAEA,IAAA,aAAa,CAAC,UAAoB,EAAE,YAAoC,EAAE,KAAY,EAAA;QACpF,MAAM,EAAE,0BAA0B,EAAE,oBAAoB,EAAE,GAAG,IAAI,CAAC,+BAA+B;AACjG,QAAA,MAAM,oBAAoB,GAAG,0BAA0B,EAAE;QAEzD,IAAI,UAAU,IAAI,IAAI,IAAI,oBAAoB,KAAK,QAAQ,EAAE;AAC3D,YAAA,MAAM,cAAc,GAAG,oBAAoB,EAAE;YAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC;AAEjD,YAAA,IAAI,cAAc,KAAK,oBAAoB,KAAK,QAAQ,IAAI,iBAAiB,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,EAAE;gBACpG,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC;AAC9D,gBAAA,OAAO,gBAAgB;YACzB;QACF;AAEA,QAAA,OAAO,IAAI,CAAC,wBAAwB,CAAC,UAAU,CAAC;IAClD;AAEQ,IAAA,wBAAwB,CAAC,KAAe,EAAA;AAC9C,QAAA,IAAI,SAA2B;QAE/B,IAAI,KAAK,EAAE;YACT,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;YAC5C,SAAS,GAAG,IAAI,CAAC,+BAA+B,CAAC,gBAAgB,CAAC,IAAI,CAAC;QACzE;AAEA,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;IACzC;AAEQ,IAAA,gBAAgB,CAAC,KAAuB,EAAA;QAC9C,IAAI,KAAK,EAAE;YACT,OAAO,IAAIM,SAAmB,CAAI,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/G;aAAO;AACL,YAAA,OAAO,IAAIA,SAAmB,CAAI,IAAI,EAAE,IAAI,CAAC;QAC/C;IACF;AAEA,IAAA,mBAAmB,CAAC,KAAQ,EAAA;QAC1B,MAAM,GAAG,GAAe,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC;QACxD,MAAM,UAAU,GAAc,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC/D,MAAM,IAAI,GAAe,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC;QACzD,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC;IACxC;AAEA,IAAA,mBAAmB,CAAC,IAAU,EAAA;AAC5B,QAAA,MAAM,GAAG,GAAe,IAAI,CAAC,OAAO,EAAE;AACtC,QAAA,MAAM,UAAU,GAAc,IAAI,CAAC,QAAQ,EAAE;AAC7C,QAAA,MAAM,IAAI,GAAe,IAAI,CAAC,WAAW,EAAE;AAE3C,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC;IAC5D;uGA1DW,uCAAuC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAAvC,uCAAuC,EAAA,CAAA;;2FAAvC,uCAAuC,EAAA,UAAA,EAAA,CAAA;kBADnD;;;AEnrBD,MAAMR,mBAAiB,GAAG,CAAC,yBAAyB,EAAE,+BAA+B,EAAE,0BAA0B,CAAC;MAerG,4BAA4B,CAAA;uGAA5B,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;wGAA5B,4BAA4B,EAAA,OAAA,EAAA,CAfd,yBAAyB,EAAE,+BAA+B,EAAE,0BAA0B,EAAAD,IAAA,CAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAtF,yBAAyB,EAAE,+BAA+B,EAAE,0BAA0B,CAAA,EAAA,CAAA;AAepG,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,4BAA4B,YAXlCC,mBAAiB,EACpB,YAAY,CAAC,QAAQ,CAAC;AACpB,gBAAA,KAAK,EAAE;;AAEL,oBAAA,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,yBAAyB,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,EAAE;AAC7F,oBAAA,EAAE,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,+BAA+B,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC;AACxG;AACF,aAAA,CAAC,EAXiF,0BAA0B,CAAA,EAAA,CAAA;;2FAepG,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAbxC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;AACP,wBAAA,GAAGA,mBAAiB;wBACpB,YAAY,CAAC,QAAQ,CAAC;AACpB,4BAAA,KAAK,EAAE;;AAEL,gCAAA,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,yBAAyB,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,EAAE;AAC7F,gCAAA,EAAE,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,+BAA+B,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC;AACxG;yBACF;AACF,qBAAA;AACD,oBAAA,OAAO,EAAEA;AACV,iBAAA;;;SCFe,6BAA6B,CAAgD,WAAc,EAAE,UAAkB,EAAE,YAAe,EAAA;IAC9I,OAAO;QACL,QAAQ,EAAE,CAAC,UAAU,CAAC;AACtB,QAAA,KAAK,EAAE,YAAY;QACnB,UAAU,EAAE,CAAC,WAAW;KACzB;AACH;SAEgB,gBAAgB,CAAgD,WAAc,EAAE,mBAAkD,EAAE,EAAA;IAClJ,OAAO,6BAA6B,CAAmC,WAAW,EAAE,sBAAsB,EAAE,gBAAgB,CAAC;AAC/H;SAEgB,aAAa,CAAgD,WAAc,EAAE,gBAA+C,EAAE,EAAA;IAC5I,OAAO,6BAA6B,CAAmC,WAAW,EAAE,kBAAkB,EAAE,aAAa,CAAC;AACxH;SAEgB,aAAa,CAA8B,WAAc,EAAE,gBAA4C,EAAE,EAAA;IACvH,OAAO,6BAA6B,CAAgC,WAAW,EAAE,kBAAkB,EAAE,aAAa,CAAC;AACrH;SAEgB,cAAc,CAA8B,WAAc,EAAE,iBAAuC,EAAE,EAAA;IACnH,OAAO,6BAA6B,CAA0B,WAAW,EAAE,mBAAmB,EAAE,cAAc,CAAC;AACjH;SAEgB,iBAAiB,CAA8B,WAAc,EAAE,oBAA6C,EAAE,EAAA;IAC5H,OAAO,6BAA6B,CAA6B,WAAW,EAAE,sBAAsB,EAAE,iBAAiB,CAAC;AAC1H;AAEM,SAAU,WAAW,CAA8B,WAAc,EAAE,WAA8B,EAAA;IACrG,OAAO,6BAA6B,CAAuB,WAAW,EAAE,gBAAgB,EAAE,WAAW,CAAC;AACxG;AAEM,SAAU,YAAY,CAA8B,WAAc,EAAE,YAAuC,EAAA;IAC/G,OAAO,6BAA6B,CAA+B,WAAW,EAAE,iBAAiB,EAAE,YAAY,CAAC;AAClH;SAEgB,cAAc,CAA8B,WAAc,EAAE,iBAA8C,EAAE,EAAA;IAC1H,OAAO,6BAA6B,CAAiC,WAAW,EAAE,mBAAmB,EAAE,cAAc,CAAC;AACxH;AAYM,SAAU,sCAAsC,CAAC,KAA+D,EAAA;AACpH,IAAA,IAAK,KAA8C,CAAC,KAAK,IAAI,IAAI,EAAE;AACjE,QAAA,OAAO,IAAI;IACb;SAAO;AACL,QAAA,OAAO,KAAK;IACd;AACF;SAEgB,iBAAiB,CAAC,YAA0E,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,IAAI,EAAE,WAAW,GAAG,CAAC,KAAmD,EAAE,EAAA;IAC7N,OAAO;QACL,QAAQ,EAAE,CAAC,MAAM,CAAC;AAClB,QAAA,mBAAmB,EAAE,gBAAgB;;AAErC,QAAA,KAAK,EAAE;YACL,UAAU;YACV,aAAa;YACb;AACD,SAAA;QACD,UAAU,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,KAAI;AAC3C,YAAA,MAAM,WAAW,GAAyC,sCAAsC,CAAC,WAAW;AAC1G,kBAAE;AACF,kBAAE;AACE,oBAAA,KAAK,EAAE;iBACR;YAEL,MAAM,EAAE,KAAK,EAAE,IAAI,GAAG,WAAW,EAAE,GAAG,WAAW;AACjD,YAAA,MAAM,SAAS,GAAG,CAAA,SAAA,EAAY,IAAI,EAAE;YAEpC,OAAO;AACL,gBAAA,GAAG,KAAK;gBACR;aACD;AACH,QAAA,CAAC;KACF;AACH;AAEA;AACA;AAEA;;;;;;;;AAQE;;MCxGW,kCAAkC,GAAqD,MAClG,EAAE,CAAC;AACD,IAAA,oBAAoB,EAAE,IAAI;AAC1B,IAAA,iBAAiB,EAAE;AACpB,CAAA;AAEH;;AAEG;AACG,SAAU,aAAa,CAAC,MAAA,GAAmC,EAAE,EAAA;AACjE,IAAA,OAAO,aAAa,CAAC;AACnB,QAAA,GAAG,MAAM;QACT,QAAQ,EAAE,wBAAwB,CAAC,QAAQ;AAC3C,QAAA,QAAQ,EAAE;AACX,KAAA,CAAC;AACJ;AAEM,SAAU,aAAa,CAAC,MAAA,GAAuC,EAAE,EAAA;IACrE,MAAM,EAAE,GAAG,GAAG,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,GAAG,wBAAwB,CAAC,QAAQ,EAAE,SAAS,EAAE,mBAAmB,EAAE,4BAA4B,EAAE,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,YAAY,EAAE,QAAQ,GAAG,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,GAAG,MAAM;IAEtY,MAAM,WAAW,GAAG,2EAA2E;IAC/F,MAAM,WAAW,GAA6C,WAAW,CAAC;QACxE,GAAG;AACH,QAAA,IAAI,EAAE,UAAU;QAChB,GAAG,4BAA4B,CAAC,MAAM,EAAE;AACtC,YAAA,GAAG,iBAAiB;YACpB,eAAe;YACf,WAAW;YACX,SAAS;YACT,SAAS;YACT,WAAW;YACX,WAAW;YACX,SAAS;YACT,QAAQ;YACR,OAAO;YACP,UAAU;YACV,QAAQ,EAAE,QAAQ,GAAG,wBAAwB,CAAC,QAAQ,GAAG,QAAQ;YACjE,mBAAmB;YACnB,4BAA4B;YAC5B,QAAQ;YACR,QAAQ;YACR,YAAY;YACZ,gBAAgB;YAChB,YAAY;YACZ,cAAc;YACd,YAAY;YACZ,YAAY;YACZ;SACD;AACF,KAAA,CAAC;AAEF,IAAA,OAAO,WAAW;AACpB;AAUM,SAAU,cAAc,CAAC,MAAA,GAAmC,EAAE,EAAA;IAClE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,MAAM;IACxH,MAAM,QAAQ,GAAG,aAAa,IAAI,KAAK,EAAE,QAAQ,IAAI,KAAK;AAE1D,IAAA,MAAM,aAAa,GAAG,KAAK,EAAE,GAAG,IAAI,OAAO;AAC3C,IAAA,MAAM,WAAW,GAAG,GAAG,EAAE,GAAG,IAAI,KAAK;IAErC,MAAM,UAAU,GAAG,aAAa,CAAC;AAC/B,QAAA,SAAS,EAAE,OAAO;QAClB,QAAQ,EAAE,wBAAwB,CAAC,IAAI;AACvC,QAAA,gBAAgB,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QAC1E,OAAO;AACP,QAAA,WAAW,EAAE,EAAE;QACf,QAAQ;QACR,QAAQ;QACR,YAAY;QACZ,SAAS;QACT,UAAU;AACV,QAAA,GAAG,KAAK;QACR,QAAQ;AACR,QAAA,GAAG,EAAE;AACN,KAAA,CAAC;IAEF,MAAM,QAAQ,GAAG,aAAa,CAAC;AAC7B,QAAA,SAAS,EAAE,KAAK;QAChB,QAAQ,EAAE,wBAAwB,CAAC,IAAI;AACvC,QAAA,gBAAgB,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC7E,OAAO;AACP,QAAA,WAAW,EAAE,EAAE;QACf,QAAQ;QACR,QAAQ;QACR,YAAY;QACZ,SAAS;QACT,UAAU;AACV,QAAA,GAAG,GAAG;QACN,QAAQ;AACR,QAAA,GAAG,EAAE;AACN,KAAA,CAAC;IAEF,OAAO;AACL,QAAA,GAAG,EAAE,SAAS;QACd,UAAU,EAAE,CAAC,iBAAiB,CAAC,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;KACrH;AACH;AAUM,SAAU,kBAAkB,CAAC,WAAA,GAA4C,EAAE,EAAA;IAC/E,MAAM,EAAE,QAAQ,GAAG,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,WAAW;IAE5I,SAAS,wBAAwB,CAAC,MAAoD,EAAA;QACpF,OAAO;YACL,SAAS;YACT,UAAU;AACV,YAAA,GAAG,MAAM;YACT,QAAQ;YACR,QAAQ,EAAE,wBAAwB,CAAC,QAAQ;AAC3C,YAAA,gBAAgB,EAAE,SAAS;AAC3B,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,YAAY,EAAE;SACf;IACH;AAEA,IAAA,MAAM,QAAQ,GAAG,UAAU,EAAE,GAAG,IAAI,OAAO;AAC3C,IAAA,MAAM,MAAM,GAAG,QAAQ,EAAE,GAAG,IAAI,KAAK;AAErC,IAAA,MAAM,KAAK,GAAiC;AAC1C,QAAA,KAAK,EAAE,YAAY;QACnB,GAAG,wBAAwB,CAAC,UAAU,CAAC;AACvC,QAAA,GAAG,EAAE;KACN;AAED,IAAA,MAAM,GAAG,GAAiC;AACxC,QAAA,KAAK,EAAE,UAAU;QACjB,GAAG,wBAAwB,CAAC,QAAQ,CAAC;AACrC,QAAA,GAAG,EAAE;KACN;AAED,IAAA,MAAM,MAAM,GAAG;QACb,QAAQ;QACR,QAAQ;QACR,YAAY;QACZ,OAAO;QACP,KAAK;QACL;KACD;AAED,IAAA,OAAO,cAAc,CAAC,MAAM,CAAC;AAC/B;AAKM,SAAU,mBAAmB,CAAC,MAAA,GAA6C,EAAE,EAAA;IACjF,MAAM,EAAE,GAAG,GAAG,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,GAAG,MAAM;IAE9K,MAAM,WAAW,GAAG,8EAA8E;IAClG,MAAM,WAAW,GAA6C,WAAW,CAAC;QACxE,GAAG;AACH,QAAA,IAAI,EAAE,gBAAgB;QACtB,GAAG,4BAA4B,CAAC,MAAM,EAAE;AACtC,YAAA,GAAG,iBAAiB;YACpB,WAAW;YACX,cAAc;YACd,YAAY;YACZ,SAAS;YACT,OAAO;YACP,QAAQ;YACR,aAAa;YACb,YAAY;YACZ,YAAY;YACZ;SACD;AACF,KAAA,CAAC;AAEF,IAAA,OAAO,WAAW;AACpB;;ACjMO,MAAM,4CAA4C,GAAkC;AACzF,IAAA;AACE,QAAA,KAAK,EAAE,QAAQ;AACf,QAAA,UAAU,EAAE;AACb,KAAA;AACD,IAAA;AACE,QAAA,KAAK,EAAE,QAAQ;AACf,QAAA,UAAU,EAAE;AACb,KAAA;AACD,IAAA;AACE,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,UAAU,EAAE;AACb,KAAA;AACD,IAAA;AACE,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,UAAU,EAAE;AACb,KAAA;AACD,IAAA;AACE,QAAA,KAAK,EAAE,QAAQ;AACf,QAAA,UAAU,EAAE;AACb,KAAA;AACD,IAAA;AACE,QAAA,KAAK,EAAE,QAAQ;AACf,QAAA,UAAU,EAAE;AACb,KAAA;AACD,IAAA;AACE,QAAA,KAAK,EAAE,UAAU;AACjB,QAAA,UAAU,EAAE;AACb;;;SC5Ba,QAAQ,GAAA;IACtB,OAAO,CAAC,OAAwB,KAA6B;AAC3D,QAAA,MAAM,KAAK,GAAwB,OAAO,CAAC,KAAK;QAEhD,IAAI,CAAC,KAAK,EAAE;YACV,OAAO;AACL,gBAAA,QAAQ,EAAE;aACX;QACH;AAEA,QAAA,OAAO,EAAE;AACX,IAAA,CAAC;AACH;;SCXgB,QAAQ,GAAA;AACtB,IAAA,OAAO,UAAU,CAAC,OAAO,CAAC,6BAA6B,CAAC;AAC1D;;ACFO,MAAM,qCAAqC,GAAG;AA0BrD;;;;;;;AAOG;AACG,SAAU,4BAA4B,CAA4B,MAAA,GAAgD,EAAE,EAAA;IACxH,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,iBAAiB,EAAE,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,6BAA6B,EAAE,GAAG,MAAM;IAEpI,MAAM,YAAY,GAAoC,iBAAiB,IAAI;AACzE,QAAA,WAAW,EAAE,wBAAwB,CAAC,IAAI;QAC1C;KACD;IAED,OAAO,CAAC,OAAwB,KAAI;AAClC,QAAA,MAAM,MAAM,GAAiB,OAAO,CAAC,KAAK;QAC1C,MAAM,MAAM,GAAQ,cAAc,CAAC,MAAW,EAAE,YAAY,CAAC;QAC7D,MAAM,OAAO,GAAG,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC;QAEnD,IAAI,OAAO,EAAE;AACX,YAAA,OAAO,IAAI;QACb;aAAO;YACL,OAAO;AACL,gBAAA,CAAC,qCAAqC,GAAG,EAAE,OAAO;aACnD;QACH;AACF,IAAA,CAAC;AACH;;ACvDA;;;;;;AAMG;AACG,SAAU,SAAS,CAAC,GAAA,GAAc,MAAM,CAAC,gBAAgB,EAAE,GAAA,GAAc,MAAM,CAAC,gBAAgB,EAAA;IACpG,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;IACjC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;IAEjC,OAAO,CAAC,OAAwB,KAA6B;AAC3D,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC;AAC/B,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC;QAE/B,IAAI,MAAM,GAA4B,IAAI;AAE1C,QAAA,IAAI,QAAQ,IAAI,QAAQ,EAAE;AACxB,YAAA,MAAM,GAAG;AACP,gBAAA,GAAG,QAAQ;AACX,gBAAA,GAAG;aACJ;QACH;AAEA,QAAA,OAAO,MAAM;AACf,IAAA,CAAC;AACH;AAEO,MAAM,8BAA8B,GAAG;AAS9C;;;;;AAKG;AACG,SAAU,aAAa,CAAC,OAAe,EAAA;AAC3C,IAAA,IAAI,OAAO,KAAK,CAAC,EAAE;AACjB,QAAA,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC;IACxD;IAEA,OAAO,CAAC,OAAwB,KAA6B;AAC3D,QAAA,MAAM,KAAK,GAAuB,OAAO,CAAC,KAAK;AAE/C,QAAA,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE;YACzD,MAAM,OAAO,GAAG,sBAAsB,CAAC,KAAK,EAAE,OAAO,CAAC;YACtD,OAAO;gBACL,CAAC,8BAA8B,GAAG;oBAChC,KAAK;oBACL,OAAO;oBACP,OAAO;oBACP,OAAO,EAAE,CAAA,4BAAA,EAA+B,OAAO,CAAA,mCAAA,EAAsC,OAAO,CAAC,YAAY,CAAA,KAAA,EAAQ,OAAO,CAAC,WAAW,CAAA,CAAA;AACrI;aACF;QACH;AAEA,QAAA,OAAO,EAAE;AACX,IAAA,CAAC;AACH;;AChEO,MAAM,uCAAuC,GAAG;AAChD,MAAM,6CAA6C,GAAG;AAuB7D;;;;;;;AAOG;AACG,SAAU,8BAA8B,CAAI,MAA+C,EAAA;AAC/F,IAAA,MAAM,EAAE,QAAQ,GAAG,GAAG,EAAE,qBAAqB,EAAE,OAAO,GAAG,8BAA8B,EAAE,GAAG,MAAM;IAElG,MAAM,MAAM,GAAG,gBAAgB,CAAI;QACjC;AACD,KAAA,CAAC;AAEF,IAAA,OAAO,CAAC,OAAwB,KAC9B,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,KAAU,CAAC,CAAC,IAAI,CACnD,SAAS,CAAC,CAAC,CAAC,KAAK,qBAAqB,CAAC,CAAC,CAAC,CAAC,EAC1C,GAAG,CAAC,CAAC,WAAW,KAAI;QAClB,IAAI,WAAW,EAAE;AACf,YAAA,OAAO,IAAI;QACb;aAAO;YACL,OAAO;AACL,gBAAA,CAAC,uCAAuC,GAAG,EAAE,OAAO;aACrD;QACH;IACF,CAAC,CAAC,EACF,UAAU,CAAC,MACT,EAAE,CAAC;AACD,QAAA,CAAC,6CAA6C,GAAG,EAAE,OAAO,EAAE,mBAAmB;AAChF,KAAA,CAAC,CACH,EACD,KAAK,EAAE,CACR;AACL;;AC1DA;;;;;AAKG;AACG,SAAU,iBAAiB,CAAC,cAAuB,EAAA;IACvD,OAAO,CAAC,OAAwB,KAA6B;AAC3D,QAAA,MAAM,KAAK,GAAuB,OAAO,CAAC,KAAK;AAE/C,QAAA,IAAI,KAAK,IAAI,IAAI,IAAI,CAACS,mBAAyB,CAAC,KAAK,EAAE,cAAc,CAAC,EAAE;YACtE,OAAO;AACL,gBAAA,CAAC,4BAA4B,CAAC,IAAI,GAAG;aACtC;QACH;AAEA,QAAA,OAAO,EAAE;AACX,IAAA,CAAC;AACH;AAEA;;;;;AAKG;SACa,gBAAgB,GAAA;IAC9B,OAAO,CAAC,OAAwB,KAA6B;AAC3D,QAAA,MAAM,KAAK,GAAgC,OAAO,CAAC,KAAK;AAExD,QAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACjB,YAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAE;AAEjC,YAAA,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,2BAA2B,CAAC,QAAQ,CAAC,EAAE;gBACjE,OAAO;AACL,oBAAA,CAAC,sCAAsC,CAAC,IAAI,GAAG;iBAChD;YACH;QACF;AAEA,QAAA,OAAO,EAAE;AACX,IAAA,CAAC;AACH;SAEgB,mCAAmC,GAAA;IACjD,OAAO,CAAC,OAAwB,KAA6B;AAC3D,QAAA,MAAM,KAAK,GAAuB,OAAO,CAAC,KAAK;AAE/C,QAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACjB,YAAA,IAAIA,mBAAyB,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE;AAC1C,gBAAA,MAAM,IAAI,GAAG,4BAA4B,CAAC,KAAK,CAAC;AAEhD,gBAAA,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;oBAClE,OAAO;AACL,wBAAA,CAAC,sCAAsC,CAAC,IAAI,GAAG;qBAChD;gBACH;YACF;iBAAO;gBACL,OAAO;AACL,oBAAA,CAAC,4BAA4B,CAAC,IAAI,GAAG;iBACtC;YACH;QACF;AAEA,QAAA,OAAO,EAAE;AACX,IAAA,CAAC;AACH;;ACnEO,MAAM,iCAAiC,GAAG;AAC1C,MAAM,6CAA6C,GAAG;AACtD,MAAM,sDAAsD,GAAG;AAuBtE;;;;;AAKG;AACG,SAAU,qBAAqB,CAAC,MAAoC,EAAA;IACxE,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,iBAAiB,EAAE,GAAG,MAAM,IAAI,EAAE;AACvE,IAAA,MAAM,gBAAgB,GAAG,aAAa,IAAI,IAAI;AAC9C,IAAA,MAAM,YAAY,GAAG,OAAO,CAAC,iBAAiB,CAAC;AAC/C,IAAA,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC;AAC7C,IAAA,MAAM,eAAe,GAAG,eAAe,CAAC,IAAI,GAAG,CAAC;IAEhD,MAAM,oBAAoB,GAA4D;AACpF,UAAE,CAAC,OAA0B,KAAI;AAC7B,YAAA,OAAO,sBAAsB,CAAC,OAAO,CAAC,KAAK;AACzC,kBAAE;AACF,kBAAE;oBACE,CAAC,6CAA6C,GAAG;wBAC/C,KAAK,EAAE,OAAO,CAAC,KAAK;wBACpB,gBAAgB;AAChB,wBAAA,OAAO,EAAE,CAAA,qDAAA;AACV;iBACF;QACP;AACF,UAAE,CAAC,OAA0B,KAAI;YAC7B,OAAO,OAAO,CAAC;AACb,kBAAE;AACF,kBAAE;oBACE,CAAC,iCAAiC,GAAG;wBACnC,KAAK,EAAE,OAAO,CAAC,KAAK;wBACpB,gBAAgB;AAChB,wBAAA,OAAO,EAAE,CAAA,iCAAA;AACV;iBACF;AACP,QAAA,CAAC;AAEL,IAAA,MAAM,qBAAqB,GAA4D,CAAC,OAA0B,KAAI;AACpH,QAAA,IAAI,IAAI,GAAG,eAAe,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,GAAG,KAAK;AAEpD,QAAA,IAAI,OAAO,CAAC,gBAAgB,IAAI,eAAe,EAAE;YAC/C,IAAI,GAAG,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;QAC5C;AAEA,QAAA,OAAO;AACL,cAAE;AACF,cAAE;gBACE,CAAC,sDAAsD,GAAG;oBACxD,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,gBAAgB;oBAChB,YAAY;oBACZ,OAAO,EAAE,gEAAgE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAA;AACjG;aACF;AACP,IAAA,CAAC;IAED,OAAO,CAAC,OAAwB,KAA6B;AAC3D,QAAA,MAAM,KAAK,GAAuB,OAAO,CAAC,KAAK;AAE/C,QAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACjB,YAAA,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,CAAC;YAExC,OAAO;gBACL,GAAG,oBAAoB,CAAC,OAAO,CAAC;gBAChC,GAAG,qBAAqB,CAAC,OAAO;aACjC;QACH;AAEA,QAAA,OAAO,EAAE;AACX,IAAA,CAAC;AACH;;AC9EM,SAAU,0BAA0B,CAAC,MAAkF,EAAA;IAC3H,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,MAAM;AACnD,IAAA,IAAI,OAAwC;IAE5C,IAAI,YAAY,EAAE;QAChB,OAAO,GAAG,YAAY;IACxB;IAEA,IAAI,SAAS,EAAE;QACb,MAAM,eAAe,GAAsB,gBAAgB,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;QAC/F,OAAO,GAAG,YAAY,CAAC,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACpD;AAEA,IAAA,OAAO,OAAO;AAChB;AAEM,SAAU,WAAW,CAAC,MAAyB,EAAA;IACnD,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,GAAG,QAAQ,EAAE,iBAAiB,EAAE,GAAG,MAAM;AAClG,IAAA,MAAM,OAAO,GAAG,0BAA0B,CAAC,MAAM,CAAC;IAElD,MAAM,UAAU,GAAkB,EAAE;AAEpC,IAAA,IAAI,IAAI,IAAI,WAAW,EAAE;QACvB,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IACtC;AAEA,IAAA,OAAO,WAAW,CAAC;QACjB,GAAG;AACH,QAAA,IAAI,EAAE,OAAO;QACb,GAAG,4BAA4B,CAAC,MAAM,EAAE;AACtC,YAAA,GAAG,iBAAiB;YACpB,IAAI;YACJ,GAAG;YACH,GAAG;YACH;SACD,CAAC;AACF,QAAA,GAAG,wBAAwB,CAAC;YAC1B;SACD,CAAC;QACF;AACD,KAAA,CAAC;AACJ;AAkCM,SAAU,iBAAiB,CAAC,MAA+B,EAAA;AAC/D,IAAA,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,GAAG,QAAQ,EAAE,iBAAiB,EAAE,UAAU,EAAE,eAAe,EAAE,YAAY,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,yBAAyB,GAAG,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM;AACzO,IAAA,MAAM,OAAO,GAAG,0BAA0B,CAAC,MAAM,CAAC;IAElD,MAAM,UAAU,GAAkB,EAAE;AACpC,IAAA,IAAI,qBAAyC;IAE7C,IAAI,IAAI,EAAE;QACR,qBAAqB,GAAG,CAAC;QAEzB,IAAI,WAAW,EAAE;YACf,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACtC;IACF;AAEA,IAAA,MAAM,YAAY,GAAuB,iBAAiB,KAAK,KAAK,GAAG,SAAS,IAAI,iBAAiB,IAAI,qBAAqB,IAAI,SAAS,CAAC;AAC5I,IAAA,OAAO,WAAW,CAAC;QACjB,GAAG;AACH,QAAA,IAAI,EAAE,QAAQ;QACd,GAAG,4BAA4B,CAAC,MAAM,EAAE;AACtC,YAAA,GAAG,iBAAiB;YACpB,IAAI;YACJ,GAAG;YACH,GAAG;YACH,IAAI;AACJ,YAAA,QAAQ,EAAE,yBAAyB;YACnC,QAAQ,EAAE,eAAe,IAAI,IAAI;AACjC,YAAA,aAAa,EAAE,OAAO,CAAC,YAAY,CAAC;YACpC,YAAY;YACZ;SACD,CAAC;AACF,QAAA,GAAG,wBAAwB,CAAC;YAC1B;SACD,CAAC;QACF;AACD,KAAA,CAAC;AACJ;AAKM,SAAU,iBAAiB,CAAC,MAA+B,EAAA;AAC/D,IAAA,OAAO,WAAW,CAAC,EAAE,GAAG,MAAM,EAAE,SAAS,EAAE,EAAE,GAAG,MAAM,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,SAAS,IAAI,uBAAuB,EAAE,EAAE,CAAC,CAAC;AAC3I;;ACtIA,MAAMT,mBAAiB,GAAG,CAAC,oBAAoB,EAAE,qBAAqB,CAAC;MAM1D,8BAA8B,CAAA;uGAA9B,8BAA8B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAA9B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,8BAA8B,YANhB,oBAAoB,EAAE,qBAAqB,CAAA,EAAA,OAAA,EAAA,CAA3C,oBAAoB,EAAE,qBAAqB,CAAA,EAAA,CAAA;AAMzD,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,8BAA8B,EAAA,OAAA,EAAA,CAHhCA,mBAAiB,EAHD,oBAAoB,EAAE,qBAAqB,CAAA,EAAA,CAAA;;2FAMzD,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAJ1C,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAEA,mBAAiB;AAC1B,oBAAA,OAAO,EAAEA;AACV,iBAAA;;;ACoBM,MAAM,2BAA2B,GAAG,CAAC,IAAI;AAQ1C,MAAO,sBAAuB,SAAQC,WAA8D,CAAA;AAC/F,IAAA,SAAS,GAAG,IAAI,kBAAkB,EAAE;AACpC,IAAA,UAAU,GAAG,IAAI,kBAAkB,EAAE;AACrC,IAAA,kBAAkB,GAAG,IAAI,kBAAkB,EAAE;AAC7C,IAAA,cAAc,GAAG,IAAI,kBAAkB,EAAE;AAEzC,IAAA,SAAS,GAAG,IAAI,WAAW,CAAS,EAAE,CAAC;AACvC,IAAA,aAAa,GAAG,IAAI,WAAW,CAAS,EAAE,EAAE;AACnD,QAAA,UAAU,EAAE,CAAC,gBAAgB,EAAE;AAChC,KAAA,CAAC;IAEO,cAAc,GAAG,IAAI,SAAS,CAAC;QACtC,KAAK,EAAE,IAAI,CAAC,SAAS;QACrB,SAAS,EAAE,IAAI,CAAC;AACjB,KAAA,CAAC;AAEF,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,IAAI;IACxC;AAEA,IAAA,IAAI,kBAAkB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,kBAAkB,IAAI,2BAA2B;IACrE;AAEA,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,EAAE;IACvC;AAEA,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,KAAK;IAC3C;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,SAAS,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,oBAAoB,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,KAAI;AACnJ,YAAA,IAAI,KAAoB;AACxB,YAAA,IAAI,SAAwB;YAE5B,IAAI,UAAU,EAAE;AACd,gBAAA,MAAM,IAAI,GAAG,4BAA4B,CAAC,UAAU,CAAC;AACrD,gBAAA,KAAK,GAAG,IAAI,CAAC,MAAM;AACnB,gBAAA,SAAS,GAAG,IAAI,CAAC,SAAS;YAC5B;;AAGA,YAAA,IAAI,KAAK,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,KAAK,IAAI,CAAC,EAAE;gBACtD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;gBACpC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,IAAI,EAAE,CAAC;YAC9C;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,UAAU,CAAC,YAAY,GAAG,aAAa,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,oBAAoB,EAAE,CAAC,CAAC;aACvM,IAAI,CACH,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,KAAI;YACzB,IAAI,KAAK,EAAE;AACT,gBAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,oBAAA,OAAO,+CAA+C,CAAC;AACrD,wBAAA,MAAM,EAAE,KAAwB;wBAChC;AAC+B,qBAAA,CAAC;gBACpC;qBAAO;AACL,oBAAA,OAAO,KAAK;gBACd;YACF;iBAAO;AACL,gBAAA,OAAO,SAAS;YAClB;AACF,QAAA,CAAC,CAAC,EACF,oBAAoB,EAAE;AAEvB,aAAA,SAAS,CAAC,CAAC,CAAC,KAAI;AACf,YAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC9B,QAAA,CAAC,CAAC;AAEJ;;;AAGG;AACH,QAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;AACtF,YAAA,IAAI,CAAC,KAAK,SAAS,EAAE;AACnB,gBAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;YACxE;AACF,QAAA,CAAC,CAAC;;AAGF,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;AACnF,YAAA,MAAM,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;YACzE,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAC1F,QAAA,CAAC,CAAC;IACJ;IAES,WAAW,GAAA;QAClB,KAAK,CAAC,WAAW,EAAE;AACnB,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;AACxB,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;AACzB,QAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE;AACjC,QAAA,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;IAC/B;uGA/FW,sBAAsB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,+FCrCnC,srBASA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDwBY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,cAAc,8BAAE,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,sGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,4EAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,4EAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,kWAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,wBAAwB,+BAAE,uBAAuB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,WAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,MAAA,EAAA,aAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,QAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIrK,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBANlC,SAAS;8BAEC,CAAC,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,WAAW,EAAE,mBAAmB,EAAE,aAAa,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,uBAAuB,CAAC,mBAChK,uBAAuB,CAAC,MAAM,EAAA,UAAA,EACnC,IAAI,EAAA,QAAA,EAAA,srBAAA,EAAA;;;AE/BlB,MAAMD,mBAAiB,GAAG,CAAC,sBAAsB,CAAC;MAWrC,6BAA6B,CAAA;uGAA7B,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;wGAA7B,6BAA6B,EAAA,OAAA,EAAA,CAXf,sBAAsB,EAAAD,IAAA,CAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAtB,sBAAsB,CAAA,EAAA,CAAA;AAWpC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,6BAA6B,YAPnCC,mBAAiB,EACpB,YAAY,CAAC,QAAQ,CAAC;AACpB,gBAAA,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,sBAAsB,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE;aAC1F,CAAC,CAAA,EAAA,CAAA;;2FAIO,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBATzC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;AACP,wBAAA,GAAGA,mBAAiB;wBACpB,YAAY,CAAC,QAAQ,CAAC;AACpB,4BAAA,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,sBAAsB,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE;yBAC1F;AACF,qBAAA;AACD,oBAAA,OAAO,EAAEA;AACV,iBAAA;;;ACMK,SAAU,wBAAwB,CAAC,MAAkF,EAAA;IACzH,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,MAAM;AACnD,IAAA,IAAI,OAAwC;IAE5C,IAAI,YAAY,EAAE;QAChB,OAAO,GAAG,YAAY;IACxB;IAEA,IAAI,SAAS,EAAE;QACb,MAAM,eAAe,GAAsB,gBAAgB,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;QAC/F,OAAO,GAAG,YAAY,CAAC,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACpD;AAEA,IAAA,OAAO,OAAO;AAChB;AAEM,SAAU,SAAS,CAAC,MAAuB,EAAA;IAC/C,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,GAAG,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM;AAC7G,IAAA,MAAM,OAAO,GAAG,wBAAwB,CAAC,MAAM,CAAC;AAEhD,IAAA,OAAO,WAAW,CAAC;QACjB,GAAG;AACH,QAAA,IAAI,EAAE,OAAO;QACb,GAAG,4BAA4B,CAAC,MAAM,EAAE;AACtC,YAAA,GAAG,iBAAiB;YACpB,IAAI;YACJ,SAAS;YACT,SAAS;YACT;SACD,CAAC;QACF;AACD,KAAA,CAAC;AACJ;AAMM,SAAU,aAAa,CAAC,MAA2B,EAAA;AACvD,IAAA,MAAM,EAAE,GAAG,EAAE,IAAI,GAAG,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,iBAAiB,EAAE,GAAG,MAAM;AAClF,IAAA,MAAM,OAAO,GAAG,wBAAwB,CAAC,MAAM,CAAC;AAEhD,IAAA,OAAO,WAAW,CAAC;QACjB,GAAG;AACH,QAAA,IAAI,EAAE,UAAU;QAChB,GAAG,4BAA4B,CAAC,MAAM,EAAE;AACtC,YAAA,GAAG,iBAAiB;YACpB,IAAI;YACJ,SAAS;YACT,SAAS;YACT;SACD,CAAC;QACF;AACD,KAAA,CAAC;AACJ;;AC/DM,SAAU,UAAU,CAAC,MAAA,GAAiD,EAAE,EAAA;IAC5E,MAAM,EAAE,GAAG,GAAG,OAAO,EAAE,KAAK,GAAG,cAAc,EAAE,kBAAkB,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,mBAAmB,EAAE,GAAG,MAAM;AAC9I,IAAA,MAAM,cAAc,GAAG,mBAAmB,IAAI,KAAK;IAEnD,MAAM,WAAW,GAAG,WAAW,CAAC;QAC9B,GAAG;AACH,QAAA,IAAI,EAAE,UAAU;QAChB,GAAG,4BAA4B,CAAC,MAAM,EAAE;YACtC,KAAK;YACL,kBAAkB;YAClB,aAAa;YACb,YAAY;YACZ;SACD,CAAC;AACF,QAAA,GAAG,wBAAwB,CAAC;AAC1B,YAAA,UAAU,EAAE,CAAC,iBAAiB,CAAC,cAAc,CAAC;SAC/C;AACF,KAAA,CAAC;AAEF,IAAA,OAAO,WAAW;AACpB;AAOA;;;;AAIG;AACG,SAAU,yBAAyB,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAA,GAAsC,EAAE,EAAA;AACtH,IAAA,OAAO,iBAAiB,CACtB;AACE,QAAA;AACE,YAAA,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC;AACxB,YAAA,IAAI,EAAE;AACP,SAAA;AACD,QAAA;YACE,KAAK,EAAE,SAAS,CAAC;AACf,gBAAA,GAAG,EAAE,OAAO;AACZ,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,YAAY,EAAE,aAAa;AAC3B,gBAAA,GAAG;aACJ,CAAC;AACF,YAAA,IAAI,EAAE;AACP;AACF,KAAA,EACD,EAAE,QAAQ,EAAE,IAAI,EAAE,CACnB;AACH;SAMgB,yBAAyB,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,cAAc,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,KAAsC,EAAE,EAAA;AAC5I,IAAA,OAAO,cAAc,CACnB;QACE,GAAG;QACH,UAAU,EAAE,CAAC,yBAAyB,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC;KACnE,EACD;QACE,MAAM;QACN;AACD,KAAA,CACF;AACH;AAOM,SAAU,cAAc,CAAC,YAAA,GAA8C,EAAE,EAAA;IAC7E,MAAM,EAAE,GAAG,GAAG,QAAQ,EAAE,KAAK,GAAG,eAAe,EAAE,OAAO,GAAG,kBAAkB,EAAE,UAAU,GAAG,qBAAqB,EAAE,gBAAgB,EAAE,aAAa,EAAE,GAAG,YAAY;AAEnK,IAAA,OAAO,gBAAgB,CAAC;AACtB,QAAA,GAAG,YAAY;QACf,GAAG;QACH,KAAK;QACL,OAAO;QACP,UAAU;QACV,gBAAgB,EAAE,gBAAgB,IAAI,CAAC,yBAAyB,CAAC,aAAa,CAAC;AAChF,KAAA,CAAC;AACJ;;AC1FO,MAAM,sBAAsB,GAAG;AAE/B,MAAM,uBAAuB,GAAG;AAChC,MAAM,wBAAwB,GAAG;AAExC;AACM,SAAU,SAAS,CAAC,MAAA,GAAmC,EAAE,EAAA;IAC7D,MAAM,EAAE,GAAG,GAAG,MAAM,EAAE,KAAK,GAAG,MAAM,EAAE,WAAW,GAAG,UAAU,EAAE,QAAQ,GAAG,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,MAAM;AAE7H,IAAA,OAAO,SAAS,CAAC;AACf,QAAA,GAAG,MAAM;QACT,GAAG;QACH,KAAK;QACL,WAAW;QACX,QAAQ;QACR,SAAS;QACT,SAAS;QACT;AACD,KAAA,CAAC;AACJ;AAOM,SAAU,UAAU,CAAC,MAAA,GAA2B,EAAE,EAAA;AACtD,IAAA,MAAM,EAAE,GAAG,GAAG,OAAO,EAAE,KAAK,GAAG,eAAe,EAAE,WAAW,GAAG,iBAAiB,EAAE,GAAG,MAAM;IAC1F,MAAM,gBAAgB,GAAG,SAAS,CAAC;AACjC,QAAA,GAAG,MAAM;QACT,GAAG;QACH,KAAK;QACL,WAAW;AACX,QAAA,SAAS,EAAE;AACZ,KAAA,CAAC;IAEF,gBAAgB,CAAC,UAAU,GAAG;AAC5B,QAAA,KAAK,EAAE;AACL,YAAA,UAAU,EAAE,CAAC,CAAkB,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;AACxD,YAAA,OAAO,EAAE,MAAM,CAAA,0BAAA;AAChB;KACF;AAED,IAAA,OAAO,gBAAgB;AACzB;AAKM,SAAU,SAAS,CAAC,MAAA,GAA0B,EAAE,EAAA;IACpD,MAAM,EAAE,GAAG,GAAG,MAAM,EAAE,WAAW,GAAG,EAAE,EAAE,KAAK,GAAG,MAAM,EAAE,YAAY,GAAG,MAAM,EAAE,SAAS,GAAG,uBAAuB,EAAE,QAAQ,GAAG,KAAK,EAAE,GAAG,MAAM;AAC/I,IAAA,OAAO,SAAS,CAAC;AACf,QAAA,GAAG,MAAM;QACT,GAAG;QACH,WAAW;QACX,KAAK;QACL,YAAY;QACZ,QAAQ;QACR;AACD,KAAA,CAAC;AACJ;AAOM,SAAU,UAAU,CAAC,MAAA,GAA2B,EAAE,EAAA;IACtD,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,0BAA0B,GAAG,SAAS,EAAE,GAAG,GAAG,OAAO,EAAE,WAAW,GAAG,EAAE,EAAE,KAAK,GAAG,OAAO,EAAE,YAAY,GAAG,OAAO,EAAE,SAAS,GAAG,MAAM,GAAG,6BAA6B,GAAG,wBAAwB,EAAE,SAAS,EAAE,QAAQ,GAAG,KAAK,EAAE,GAAG,MAAM;AAClR,IAAA,OAAO,SAAS,CAAC;AACf,QAAA,GAAG,MAAM;QACT,GAAG;QACH,WAAW;QACX,KAAK;QACL,OAAO;QACP,YAAY;QACZ,QAAQ;QACR,SAAS;AACT,QAAA,SAAS,EAAE;AACT,YAAA,GAAG,SAAS;AACZ,YAAA,WAAW,EAAE,MAAM,IAAI,SAAS,EAAE;AACnC;AACF,KAAA,CAAC;AACJ;AAKM,SAAU,YAAY,CAAC,MAAA,GAA6B,EAAE,EAAA;IAC1D,MAAM,EAAE,GAAG,GAAG,SAAS,EAAE,WAAW,GAAG,EAAE,EAAE,KAAK,GAAG,SAAS,EAAE,YAAY,GAAG,SAAS,EAAE,SAAS,GAAG,0BAA0B,EAAE,QAAQ,GAAG,KAAK,EAAE,GAAG,MAAM;AAC3J,IAAA,OAAO,SAAS,CAAC;AACf,QAAA,GAAG,MAAM;QACT,GAAG;QACH,WAAW;QACX,KAAK;QACL,YAAY;QACZ,QAAQ;QACR;AACD,KAAA,CAAC;AACJ;AAKM,SAAU,YAAY,CAAC,MAAA,GAA6B,EAAE,EAAA;AAC1D,IAAA,MAAM,EAAE,GAAG,GAAG,KAAK,EAAE,WAAW,GAAG,EAAE,EAAE,KAAK,GAAG,UAAU,EAAE,YAAY,GAAG,aAAa,EAAE,OAAO,GAAG,qBAAqB,EAAE,SAAS,GAAG,sBAAsB,EAAE,QAAQ,GAAG,KAAK,EAAE,GAAG,MAAM;AACzL,IAAA,OAAO,SAAS,CAAC;AACf,QAAA,GAAG,MAAM;QACT,GAAG;QACH,WAAW;QACX,KAAK;QACL,OAAO;QACP,YAAY;QACZ,QAAQ;QACR;AACD,KAAA,CAAC;AACJ;AAEA;AACO,MAAM,sCAAsC,GAAG;AAC/C,MAAM,0CAA0C,GAAG;AAEpD,SAAU,eAAe,CAAC,EAAE,GAAG,GAAG,QAAQ,KAA+B,EAAE,EAAA;AAC/E,IAAA,MAAM,KAAK,GAAG;AACZ,QAAA,GAAG,SAAS,CAAC;YACX,GAAG;AACH,YAAA,KAAK,EAAE,aAAa;AACpB,YAAA,WAAW,EAAE,sCAAsC;AACnD,YAAA,OAAO,EAAE,eAAe;AACxB,YAAA,YAAY,EAAE;SACf,CAAC;AACF,QAAA,GAAG,wBAAwB,CAAC;AAC1B,YAAA,QAAQ,EAAE;AACR,gBAAA,OAAO,EAAE;AACV;SACF;KACF;AAED,IAAA,OAAO,KAAK;AACd;;ACzGM,SAAU,gBAAgB,CAAC,MAAA,GAAiC,EAAE,EAAA;AAClE,IAAA,MAAM,EAAE,IAAI,GAAG,CAAC,EAAE,GAAG,MAAM;AAC3B,IAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAEnC,IAAA,MAAM,EAAE,GAAG,GAAG,OAAO,QAAQ,CAAA,CAAE,EAAE,WAAW,GAAG,EAAE,EAAE,KAAK,GAAG,IAAI,GAAG,QAAQ,IAAI,CAAA,CAAE,GAAG,QAAQ,EAAE,YAAY,GAAG,CAAA,YAAA,EAAe,QAAQ,CAAA,CAAE,EAAE,SAAS,GAAG,uBAAuB,EAAE,QAAQ,GAAG,KAAK,EAAE,GAAG,MAAM;AACvM,IAAA,OAAO,SAAS,CAAC;AACf,QAAA,GAAG,MAAM;QACT,GAAG;QACH,WAAW;QACX,KAAK;QACL,YAAY;QACZ,QAAQ;QACR;AACD,KAAA,CAAC;AACJ;AAEM,SAAU,mBAAmB,CAAC,MAAA,GAAoC,EAAE,EAAA;AACxE,IAAA,MAAM,EAAE,QAAQ,GAAG,IAAI,EAAE,YAAY,GAAG,IAAI,EAAE,cAAc,GAAG,IAAI,EAAE,GAAG,MAAM;AAE9E,IAAA,MAAM,gBAAgB,GAAG;AACvB,QAAA;YACE,KAAK,EAAE,SAAS,CAAC,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC,SAAS,EAAE;AACnD,SAAA;AACD,QAAA;YACE,KAAK,EAAE,UAAU,CAAC,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE;AACrD,SAAA;AACD,QAAA;YACE,KAAK,EAAE,YAAY,CAAC,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC,YAAY,EAAE;AACzD;KACF;IAED,IAAI,cAAc,EAAE;QAClB,gBAAgB,CAAC,IAAI,CAAC;YACpB,KAAK,EAAE,YAAY,CAAC,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC,YAAY,EAAE;AACzD,SAAA,CAAC;IACJ;AAEA,IAAA,IAAI,KAA0B;IAE9B,IAAI,YAAY,EAAE;AAChB,QAAA,KAAK,GAAG,CAAC,gBAAgB,CAAC,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,gBAAgB,CAAC,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9H;SAAO;AACL,QAAA,KAAK,GAAG,CAAC,gBAAgB,CAAC,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IACzE;AAEA,IAAA,OAAO,CAAC,GAAG,KAAK,EAAE,iBAAiB,CAAC,gBAAgB,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AACrF;AAKM,SAAU,YAAY,CAAC,MAAA,GAAsC,EAAE,EAAA;AACnE,IAAA,MAAM,EAAE,GAAG,GAAG,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,QAAQ,GAAG,KAAK,EAAE,GAAG,MAAM;AAE9E,IAAA,OAAO,cAAc,CACnB;AACE,QAAA,GAAG,MAAM;QACT,GAAG;AACH,QAAA,UAAU,EAAE,mBAAmB,CAAC,MAAM,CAAC;QACvC;KACD,EACD;AACE,QAAA,GAAG,MAAM;QACT,MAAM;QACN;AACD,KAAA,CACF;AACH;AAOM,SAAU,gBAAgB,CAAC,MAAA,GAA0C,EAAE,EAAA;AAC3E,IAAA,MAAM,EAAE,GAAG,GAAG,WAAW,EAAE,QAAQ,GAAG,KAAK,EAAE,YAAY,GAAG,CAAC,EAAE,GAAG,MAAM;AACxE,IAAA,OAAO,gBAAgB,CAAC;QACtB,GAAG;QACH,QAAQ;AACR,QAAA,KAAK,EAAE,WAAW;AAClB,QAAA,aAAa,EAAE,SAAS;AACxB,QAAA,OAAO,EAAE,aAAa;AACtB,QAAA,UAAU,EAAE,gBAAgB;AAC5B,QAAA,SAAS,EAAE,YAAY;AACvB,QAAA,gBAAgB,EAAE,mBAAmB,CAAC,MAAM;AAC7C,KAAA,CAAC;AACJ;;ACzHA,MAAMA,mBAAiB,GAAG,CAAC,6BAA6B,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,0BAA0B,CAAC;MAMpH,4BAA4B,CAAA;uGAA5B,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAA5B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,4BAA4B,EAAA,OAAA,EAAA,CANd,6BAA6B,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,0BAA0B,CAAA,EAAA,OAAA,EAAA,CAArG,6BAA6B,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,0BAA0B,CAAA,EAAA,CAAA;wGAMnH,4BAA4B,EAAA,OAAA,EAAA,CAH9BA,mBAAiB,EAHD,6BAA6B,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,0BAA0B,CAAA,EAAA,CAAA;;2FAMnH,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAJxC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAEA,mBAAiB;AAC1B,oBAAA,OAAO,EAAEA;AACV,iBAAA;;;ACNK,SAAU,WAAW,CAAC,EAAE,GAAG,EAAE,QAAQ,GAAG,KAAK,EAAqB,EAAA;AACtE,IAAA,OAAO,WAAW,CAAC;QACjB,GAAG;QACH,KAAK,EAAE,EAAE,QAAQ;AAClB,KAAA,CAAC;AACJ;;ACJA,MAAMA,mBAAiB,GAAG,CAAC,qCAAqC,EAAE,iCAAiC,EAAE,kCAAkC,EAAE,0BAA0B,CAAC;MAMvJ,wBAAwB,CAAA;uGAAxB,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,OAAA,EAAA,CANV,qCAAqC,EAAE,iCAAiC,EAAE,kCAAkC,EAAE,0BAA0B,CAAA,EAAA,OAAA,EAAA,CAAxI,qCAAqC,EAAE,iCAAiC,EAAE,kCAAkC,EAAE,0BAA0B,CAAA,EAAA,CAAA;wGAMtJ,wBAAwB,EAAA,OAAA,EAAA,CAH1BA,mBAAiB,EAHD,qCAAqC,EAAE,iCAAiC,EAAE,kCAAkC,EAAE,0BAA0B,CAAA,EAAA,CAAA;;2FAMtJ,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAJpC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAEA,mBAAiB;AAC1B,oBAAA,OAAO,EAAEA;AACV,iBAAA;;;ACEK,SAAU,uBAAuB,CAAC,MAA4C,EAAA;AAClF,IAAA,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,QAAQ,EAAE,iBAAiB,EAAE,GAAG,MAAM,IAAI,EAAE;IAEzE,OAAO;AACL,QAAA,SAAS,CAAC;AACR,YAAA,GAAG,EAAE,QAAQ;YACb,KAAK;YACL,WAAW;AACX,YAAA,YAAY,EAAE,KAAK;AACnB,YAAA,iBAAiB,EAAE;AACjB,gBAAA,GAAG,iBAAiB;gBACpB,SAAS,EAAE,CAAC;AACb;SACF;KACF;AACH;;AClBA;;;;AAIG;MAEmB,2BAA2B,CAAA;AACtC,IAAA,OAAO,GAAG,MAAM,EAAC,gBAAmB,GAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAErD,IAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,oDAAC;IAEtB,eAAe,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,2DAAC;;IAGvG,QAAQ,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;IAChC;AAEA,IAAA,QAAQ,CAAC,KAAiB,EAAA;AACxB,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;IAC9B;IAEA,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;IAC1B;IAEA,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;IACnB;IAEA,WAAW,CAAC,GAAwB,EAAE,QAAkB,EAAA;QACtD,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,QAAQ,CAAC;IACzC;uGA1BoB,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBADhD;;AA8BD;;AAEG;AAEG,MAAgB,+BAAmC,SAAQ,2BAA8B,CAAA;IAG7F,QAAQ,GAAA;QACN,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;IACnC;uGALoB,+BAA+B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA/B,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAA/B,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBADpD;;AASD;;AAEG;AAEG,MAAgB,gCAAoC,SAAQ,2BAA8B,CAAA;IAM3E,SAAS,GAAG,iBAAiB,EAAE;IAElD,QAAQ,GAAA;;QAEN,IAAI,CAAC,SAAS,CAAC,MAAM,CACnB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;AAC7D,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM;QAC9B,CAAC,CAAC,CACH;IACH;uGAfoB,gCAAgC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAhC,gCAAgC,EAAA,YAAA,EAAA,IAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAhC,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBADrD;;AAoBK,MAAgB,sCAA6C,SAAQ,gCAAmC,CAAA;AACnG,IAAA,MAAM,GAAG,KAAK,CAA4B,SAAS,kDAAC;AAEpD,IAAA,cAAc,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,+BAA+B,EAAE,CAAC;AAClF,IAAA,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;uGAJtD,sCAAsC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAtC,sCAAsC,EAAA,YAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAtC,sCAAsC,EAAA,UAAA,EAAA,CAAA;kBAD3D;;;AC3ED;;AAEG;AACI,MAAM,kCAAkC,GAAG;AAElD;;AAEG;AACI,MAAM,+BAA+B,GAAG;AAE/C,MAAM,6BAA6B,GAAG,CAAC,kBAAkB,CAAC;AAE1D;;AAEG;MAKU,mCAAmC,CAAA;uGAAnC,mCAAmC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;wGAAnC,mCAAmC,EAAA,OAAA,EAAA,CATT,kBAAkB,CAAA,EAAA,OAAA,EAAA,CAAlB,kBAAkB,CAAA,EAAA,CAAA;AAS5C,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mCAAmC,YAHrC,6BAA6B,CAAA,EAAA,CAAA;;2FAG3B,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAJ/C,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,6BAA6B;AACtC,oBAAA,OAAO,EAAE;AACV,iBAAA;;;ACFK,MAAO,0BAA2B,SAAQ,sCAAmG,CAAA;IACxI,MAAM,GAAG,MAAM,EAAU;AAEzB,IAAA,OAAO,GAAoC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;AAE1G,IAAA,aAAa,CAAC,KAAmC,EAAA;QAC/C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;IACtC;uGAPW,0BAA0B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,8BAAA,EAAA,EAAA,SAAA,EAP1B,+BAA+B,EAAE,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAHlC;;GAET,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAES,mCAAmC,8HAAE,2BAA2B,EAAA,QAAA,EAAA,sBAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAM/D,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAZtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,QAAQ,EAAE;;AAET,EAAA,CAAA;oBACD,SAAS,EAAE,+BAA+B,EAAE;AAC5C,oBAAA,OAAO,EAAE,CAAC,mCAAmC,EAAE,2BAA2B,CAAC;AAC3E,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE;AACR;AACF,iBAAA;;;ACVK,SAAU,oBAAoB,CAAC,MAAgC,EAAA;AACnE,IAAA,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC;IAE/B,KAAK,CAAC,eAAe,GAAG;AACtB,QAAA,UAAU,EAAE;AACV,YAAA;gBACE,UAAU,EAAE,8BAA8B,CAAC;AACzC,oBAAA,GAAG,MAAM;oBACT,OAAO,EAAE,MAAM,EAAE;iBAClB;AACF;AACF;KACF;AAED,IAAA,OAAO,cAAc,CAAC,KAAK,EAAE,EAAE,CAAC;AAClC;;ACpBA,MAAMA,mBAAiB,GAAG,CAAC,4BAA4B,EAAE,0BAA0B,CAAC;MAMvE,+BAA+B,CAAA;uGAA/B,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAA/B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,+BAA+B,YANjB,4BAA4B,EAAE,0BAA0B,CAAA,EAAA,OAAA,EAAA,CAAxD,4BAA4B,EAAE,0BAA0B,CAAA,EAAA,CAAA;AAMtE,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,+BAA+B,EAAA,OAAA,EAAA,CAHjCA,mBAAiB,EAHD,4BAA4B,EAAE,0BAA0B,CAAA,EAAA,CAAA;;2FAMtE,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAJ3C,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAEA,mBAAiB;AAC1B,oBAAA,OAAO,EAAEA;AACV,iBAAA;;;ACOD;;;;;AAKG;AACG,SAAU,iBAAiB,CAAC,MAAgC,EAAA;AAChE,IAAA,OAAO,SAAS,CAAC;AACf,QAAA,GAAG,EAAE,UAAU;AACf,QAAA,GAAG,MAAM;AACT,QAAA,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,UAAU;AAClC,QAAA,SAAS,EAAE,UAAU;AACrB,QAAA,QAAQ,EAAE;AACX,KAAA,CAAC;AACJ;AAEA;;;;;AAKG;AACG,SAAU,uBAAuB,CAAC,MAAgC,EAAA;AACtE,IAAA,OAAO,iBAAiB,CAAC;AACvB,QAAA,GAAG,EAAE,gBAAgB;AACrB,QAAA,KAAK,EAAE,iBAAiB;AACxB,QAAA,GAAG,MAAM;AACT,QAAA,QAAQ,EAAE;AACX,KAAA,CAAC;AACJ;AAOM,SAAU,gCAAgC,CAAC,MAAyC,EAAA;IACxF,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC9D,IAAA,MAAM,sBAAsB,GAAG,MAAM,CAAC,cAAc,EAAE,GAAG,IAAI,CAAA,MAAA,EAAS,qBAAqB,CAAC,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,EAAE;IAC9H,MAAM,mBAAmB,GAAG,uBAAuB,CAAC;QAClD,GAAG,MAAM,CAAC,QAAQ;QAClB,GAAG,MAAM,CAAC,cAAc;AACxB,QAAA,KAAK,EAAE,MAAM,CAAC,cAAc,EAAE,KAAK,IAAI,CAAA,OAAA,EAAU,mBAAmB,CAAC,KAAK,EAAE,KAAK,CAAA,CAAE;AACnF,QAAA,GAAG,EAAE;AACN,KAAA,CAAC;AAEF,IAAA,MAAM,UAAU,GAAG;AACjB,QAAA,UAAU,EAAE;AACV,YAAA;AACE,gBAAA,SAAS,EAAE,sBAAsB;gBACjC,UAAU,EAAE,4BAA4B,CAAC,EAAE,UAAU,EAAE,CAAC,mBAAmB,CAAC,GAAG,EAAE,mBAAmB,CAAC,GAAG,CAAa,EAAE,OAAO,EAAE,6BAA6B,EAAE;AAChK;AACF;KACF;AAED,IAAA,MAAM,gBAAgB,GAAsB;QAC1C,UAAU;AACV,QAAA,UAAU,EAAE,CAAC,mBAAmB,EAAE,mBAAmB;KACtD;AAED,IAAA,OAAO,gBAAgB;AACzB;AA0BA;;;;;AAKG;AACG,SAAU,2BAA2B,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAA6B,EAAA;AAC3G,IAAA,MAAM,aAAa,GAAG,kBAAkB,CAAC,QAAQ,CAAC;AAClD,IAAA,MAAM,aAAa,GAAG,cAAc,GAAG,gCAAgC,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,cAAc,KAAK,IAAI,GAAG,SAAS,GAAG,cAAc,EAAE,CAAC,GAAG,iBAAiB,CAAC,QAAQ,CAAC;AAEzL,IAAA,OAAO,CAAC,aAAa,EAAE,aAAa,CAAC;AACvC;AASM,SAAU,kBAAkB,CAAC,QAA+C,EAAA;AAChF,IAAA,IAAI,aAAgC;IACpC,IAAI,mBAAmB,GAAqC,QAA4C;IAExG,MAAM,0BAA0B,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE;AAEtE,IAAA,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;AAChC,QAAA,IAAI,QAAQ,KAAK,OAAO,EAAE;AACxB,YAAA,mBAAmB,GAAG;AACpB,gBAAA,KAAK,EAAE;aACR;QACH;aAAO;AACL,YAAA,mBAAmB,GAAG;AACpB,gBAAA,QAAQ,EAAE;aACX;QACH;IACF;AAEA,IAAA,IAAI,mBAAmB,CAAC,KAAK,EAAE;AAC7B,QAAA,aAAa,GAAG,UAAU,CAAC,EAAE,GAAG,mBAAmB,CAAC,KAAK,EAAE,GAAG,0BAA0B,EAAE,CAAC;IAC7F;SAAO;AACL,QAAA,aAAa,GAAG,SAAS,CAAC,EAAE,GAAG,mBAAmB,CAAC,QAAQ,EAAE,GAAG,0BAA0B,EAAE,CAAC;IAC/F;AAEA,IAAA,OAAO,aAAa;AACtB;;ACjJA,MAAMA,mBAAiB,GAAG,CAAC,4BAA4B,CAAC;MAM3C,uBAAuB,CAAA;uGAAvB,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;wGAAvB,uBAAuB,EAAA,OAAA,EAAA,CANT,4BAA4B,CAAA,EAAA,OAAA,EAAA,CAA5B,4BAA4B,CAAA,EAAA,CAAA;wGAM1C,uBAAuB,EAAA,OAAA,EAAA,CAHzBA,mBAAiB,EAHD,4BAA4B,CAAA,EAAA,CAAA;;2FAM1C,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAJnC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAEA,mBAAiB;AAC1B,oBAAA,OAAO,EAAEA;AACV,iBAAA;;;SCCe,4BAA4B,GAAA;AAC1C,IAAA,MAAM,aAAa,GAAG,gBAAgB,EAAE;IAExC,OAAO,CAAC,MAAc,KAAI;AACxB,QAAA,IAAI,aAAa;AAEjB,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;YACvB,aAAa,GAAG,CAAC,qBAAqB,EAAE,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC;QACjE;aAAO;AACL,YAAA,aAAa,GAAG,mBAAmB,CAAC,MAAM,EAAE,aAAa,CAAC;QAC5D;QAEA,OAAO,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAC1E,IAAA,CAAC;AACH;AAEO,MAAM,iCAAiC,GAAwD,CAAC,MAAyD,KAAI;AAClK,IAAA,MAAM,aAAa,GAAG,gBAAgB,EAAE;IAExC,MAAM,aAAa,GAA6D,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;QAC/F,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC;AACzE,QAAA,OAAO,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,IAAI,SAAS,EAAE;AAC5E,IAAA,CAAC,CAAC;AAEF,IAAA,MAAM,GAAG,GAAyE,EAAE,CAAC,aAAa,CAAC;AACnG,IAAA,OAAO,GAAG;AACZ;AAOA;;;;;AAKG;AACG,SAAU,mBAAmB,CAAC,MAAA,GAAoC,EAAE,EAAA;AACxE,IAAA,OAAO,mBAAmB,CAAC;AACzB,QAAA,GAAG,EAAE,UAAU;AACf,QAAA,KAAK,EAAE,UAAU;AACjB,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,GAAG,MAAM;AACT,QAAA,iBAAiB,EAAE,IAAI;AACvB,QAAA,iBAAiB,EAAE,KAAK;AACxB,QAAA,cAAc,EAAE,IAAI;QACpB,MAAM,EAAE,4BAA4B,EAAE;AACtC,QAAA,eAAe,EAAE;AAClB,KAAA,CAAC;AACJ;;AC1DA,MAAM,iBAAiB,GAAG,CAAC,kCAAkC,CAAC;MAMjD,gCAAgC,CAAA;uGAAhC,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;wGAAhC,gCAAgC,EAAA,OAAA,EAAA,CANlB,kCAAkC,CAAA,EAAA,OAAA,EAAA,CAAlC,kCAAkC,CAAA,EAAA,CAAA;wGAMhD,gCAAgC,EAAA,OAAA,EAAA,CAHlC,iBAAiB,EAHD,kCAAkC,CAAA,EAAA,CAAA;;2FAMhD,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAJ5C,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,iBAAiB;AAC1B,oBAAA,OAAO,EAAE;AACV,iBAAA;;;ACGD;;;;;AAKG;AACG,SAAU,eAAe,CAAC,MAA8B,EAAA;IAC5D,MAAM,UAAU,GAAkB,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;AAEjE,IAAA,MAAM,KAAK,GAAG;AACZ,QAAA,GAAG,SAAS,CAAC;AACX,YAAA,GAAG,EAAE,SAAS;AACd,YAAA,GAAG,MAAM;AACT,YAAA,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,aAAa;AACrC,YAAA,SAAS,EAAE;SACZ,CAAC;AACF,QAAA,GAAG,wBAAwB,CAAC;YAC1B;SACD;KACF;AAED,IAAA,OAAO,KAAK;AACd;;AC1BA;;AAEG;AAMG,MAAO,+BAA6C,SAAQ,gCAAmC,CAAA;IAC1F,MAAM,GAAG,KAAK,CAA6B,SAAS,mDAAI,KAAK,EAAE,iBAAiB,EAAA,CAAG;AACnF,IAAA,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;uGAFjC,+BAA+B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA/B,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EAH/B,oBAAoB,EAAE,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAGtB,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAL3C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;oBAC7B,SAAS,EAAE,oBAAoB,EAAE;AACjC,oBAAA,UAAU,EAAE;AACb,iBAAA;;;SCTe,qCAAqC,GAAA;AACnD,IAAA,OAAO,mBAAmB,CAAC,CAAC,6BAA6B,EAAE,+BAA+B,EAAE,4BAA4B,EAAE,+BAA+B,EAAE,8BAA8B,EAAE,6BAA6B,EAAE,gCAAgC,EAAE,kCAAkC,EAAE,+BAA+B,EAAE,kCAAkC,EAAE,4BAA4B,EAAE,0BAA0B,EAAE,YAAY,EAAE,oBAAoB,CAAC,CAAC;AACrc;;ACLA;;AAEG;MAQU,sBAAsB,CAAA;uGAAtB,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kDAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,yBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAPlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kDAAkD;AAC5D,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE;AACR,qBAAA;AACD,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCJY,sBAAsB,CAAA;uGAAtB,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;wGAAtB,sBAAsB,EAAA,OAAA,EAAA,CAFvB,aAAa,EAAE,wBAAwB,CAAA,EAAA,CAAA;wGAEtC,sBAAsB,EAAA,OAAA,EAAA,CAFvB,aAAa,EAAE,wBAAwB,CAAA,EAAA,CAAA;;2FAEtC,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAHlC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,CAAC,aAAa,EAAE,wBAAwB;AAClD,iBAAA;;;ACOK,SAAU,2BAA2B,CAAC,MAA0C,EAAA;IACpF,MAAM,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,GAAG,MAAM,IAAI,EAAE;AAEnE,IAAA,MAAM,SAAS,GAAe;AAC5B,QAAA;AACE,YAAA,OAAO,EAAE,8BAA8B;AACvC,YAAA,QAAQ,EAAE;AACR,gBAAA,eAAe,EAAE,SAAS;AAC1B,gBAAA,UAAU,EAAE,QAAQ;AACpB,gBAAA,UAAU,EAAE;AACb;AACF,SAAA;AACD,QAAA;AACE,YAAA,OAAO,EAAE,sCAAsC;YAC/C,QAAQ,EAAE,sBAAsB,IAAI;AACrC;KACF;AAED,IAAA,IAAI,kBAAkB,KAAK,KAAK,EAAE;AAChC,QAAA,SAAS,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;QACvC,SAAS,CAAC,IAAI,CAAC;AACb,YAAA,OAAO,EAAE,eAAe;AACxB,YAAA,QAAQ,EAAE;AACX,SAAA,CAAC;IACJ;AAEA,IAAA,OAAO,wBAAwB,CAAC,SAAS,CAAC;AAC5C;;ACxCA;;AAEG;;;;"}