@bravobit/bb-foundation 0.26.3 → 0.28.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 (384) hide show
  1. package/auth/lib/auth.service.d.ts +2 -2
  2. package/auth/lib/directives/authenticated.directive.d.ts +1 -1
  3. package/collections/lib/components/collections-pager/collections-pager.component.d.ts +1 -1
  4. package/collections/lib/components/collections-viewer/collections-viewer.component.d.ts +1 -1
  5. package/controls/lib/checkbox/checkbox/checkbox.component.d.ts +1 -1
  6. package/controls/lib/checkbox/checkbox-group/checkbox-group.component.d.ts +1 -1
  7. package/controls/lib/control-error/control-error/control-error.component.d.ts +1 -1
  8. package/controls/lib/form-control/form-control/form-control.component.d.ts +1 -1
  9. package/controls/lib/form-control/form-control-addon/form-control-addon.component.d.ts +1 -1
  10. package/controls/lib/form-control/form-control-input.directive.d.ts +1 -1
  11. package/controls/lib/radio/radio-button/radio-button.component.d.ts +1 -1
  12. package/controls/lib/radio/radio-group/radio-group.component.d.ts +1 -1
  13. package/controls/lib/toggle/toggle/toggle.component.d.ts +1 -1
  14. package/controls/lib/toggle/toggle-group/toggle-group.component.d.ts +1 -1
  15. package/dashboard/lib/dashboard/dashboard.component.d.ts +1 -1
  16. package/dashboard/lib/dashboard-menu/dashboard-menu.component.d.ts +1 -1
  17. package/dashboard/lib/dashboard-menu-item/dashboard-menu-item.component.d.ts +1 -1
  18. package/dashboard/lib/dashboard-sidebar-group/dashboard-sidebar-group.component.d.ts +1 -1
  19. package/dashboard/lib/dashboard-sidebar-item/dashboard-sidebar-item.component.d.ts +1 -1
  20. package/dialog/lib/dialog-modal/dialog-modal.component.d.ts +1 -1
  21. package/elements/lib/avatar/avatar.component.d.ts +1 -1
  22. package/elements/lib/button/button.component.d.ts +2 -2
  23. package/elements/lib/checkbox/checkbox.component.d.ts +1 -1
  24. package/elements/lib/date-picker/date-picker.component.d.ts +1 -1
  25. package/elements/lib/directives/input.directive.d.ts +2 -2
  26. package/elements/lib/dropdown/dropdown.component.d.ts +1 -1
  27. package/elements/lib/file-picker/file-picker.component.d.ts +2 -2
  28. package/elements/lib/form-control/form-control.component.d.ts +1 -1
  29. package/elements/lib/form-error/form-error.component.d.ts +1 -1
  30. package/elements/lib/form-group/form-group.component.d.ts +1 -1
  31. package/elements/lib/icon/icon.component.d.ts +1 -1
  32. package/elements/lib/image-picker/image-picker.component.d.ts +1 -1
  33. package/elements/lib/spinner/spinner.component.d.ts +1 -1
  34. package/{esm2020 → esm2022}/auth/lib/auth.interceptor.mjs +4 -4
  35. package/{esm2020 → esm2022}/auth/lib/auth.module.mjs +5 -5
  36. package/esm2022/auth/lib/auth.service.mjs +269 -0
  37. package/{esm2020 → esm2022}/auth/lib/directives/authenticated.directive.mjs +4 -4
  38. package/{esm2020 → esm2022}/auth/lib/guards/anonymous.guard.mjs +4 -4
  39. package/{esm2020 → esm2022}/auth/lib/guards/authenticated.guard.mjs +4 -4
  40. package/{esm2020 → esm2022}/collections/lib/collections.module.mjs +21 -21
  41. package/{esm2020 → esm2022}/collections/lib/components/collections-pager/collections-pager.component.mjs +4 -4
  42. package/{esm2020 → esm2022}/collections/lib/components/collections-viewer/collections-viewer.component.mjs +4 -4
  43. package/{esm2020 → esm2022}/collections/lib/components/collections.directive.mjs +13 -13
  44. package/{esm2020 → esm2022}/controls/lib/checkbox/checkbox/checkbox.component.mjs +6 -6
  45. package/{esm2020 → esm2022}/controls/lib/checkbox/checkbox-group/checkbox-group.component.mjs +4 -4
  46. package/{esm2020 → esm2022}/controls/lib/checkbox/checkbox.module.mjs +5 -5
  47. package/{esm2020 → esm2022}/controls/lib/control-error/control-error/control-error.component.mjs +4 -4
  48. package/{esm2020 → esm2022}/controls/lib/control-error/control-error-submit.directive.mjs +4 -4
  49. package/{esm2020 → esm2022}/controls/lib/control-error/control-error.module.mjs +5 -5
  50. package/{esm2020 → esm2022}/controls/lib/controls.module.mjs +21 -21
  51. package/{esm2020 → esm2022}/controls/lib/form-control/form-control/form-control.component.mjs +4 -4
  52. package/{esm2020 → esm2022}/controls/lib/form-control/form-control-addon/form-control-addon.component.mjs +4 -4
  53. package/{esm2020 → esm2022}/controls/lib/form-control/form-control-input.directive.mjs +4 -4
  54. package/{esm2020 → esm2022}/controls/lib/form-control/form-control.module.mjs +9 -9
  55. package/{esm2020 → esm2022}/controls/lib/radio/radio-button/radio-button.component.mjs +4 -4
  56. package/{esm2020 → esm2022}/controls/lib/radio/radio-group/radio-group.component.mjs +6 -6
  57. package/{esm2020 → esm2022}/controls/lib/radio/radio.module.mjs +5 -5
  58. package/{esm2020 → esm2022}/controls/lib/toggle/toggle/toggle.component.mjs +6 -6
  59. package/{esm2020 → esm2022}/controls/lib/toggle/toggle-group/toggle-group.component.mjs +4 -4
  60. package/{esm2020 → esm2022}/controls/lib/toggle/toggle.module.mjs +5 -5
  61. package/{esm2020 → esm2022}/dashboard/lib/dashboard/dashboard.component.mjs +4 -4
  62. package/{esm2020 → esm2022}/dashboard/lib/dashboard-header/dashboard-header.component.mjs +4 -4
  63. package/{esm2020 → esm2022}/dashboard/lib/dashboard-menu/dashboard-menu.component.mjs +4 -4
  64. package/{esm2020 → esm2022}/dashboard/lib/dashboard-menu-item/dashboard-menu-item.component.mjs +4 -4
  65. package/{esm2020 → esm2022}/dashboard/lib/dashboard-sidebar/dashboard-sidebar.component.mjs +4 -4
  66. package/{esm2020 → esm2022}/dashboard/lib/dashboard-sidebar-group/dashboard-sidebar-group.component.mjs +4 -4
  67. package/{esm2020 → esm2022}/dashboard/lib/dashboard-sidebar-item/dashboard-sidebar-item.component.mjs +4 -4
  68. package/{esm2020 → esm2022}/dashboard/lib/dashboard.module.mjs +17 -17
  69. package/{esm2020 → esm2022}/dialog/lib/dialog-actions/dialog-actions.component.mjs +4 -4
  70. package/{esm2020 → esm2022}/dialog/lib/dialog-confirm/dialog-confirm.component.mjs +4 -4
  71. package/{esm2020 → esm2022}/dialog/lib/dialog-container/dialog-container.component.mjs +4 -4
  72. package/{esm2020 → esm2022}/dialog/lib/dialog-header/dialog-header.component.mjs +4 -4
  73. package/{esm2020 → esm2022}/dialog/lib/dialog-link/dialog-link.component.mjs +4 -4
  74. package/{esm2020 → esm2022}/dialog/lib/dialog-modal/dialog-modal.component.mjs +4 -4
  75. package/{esm2020 → esm2022}/dialog/lib/dialog-overlay/dialog-overlay.component.mjs +4 -4
  76. package/{esm2020 → esm2022}/dialog/lib/dialog.insertion.mjs +4 -4
  77. package/{esm2020 → esm2022}/dialog/lib/dialog.module.mjs +20 -20
  78. package/{esm2020 → esm2022}/dialog/lib/dialog.service.mjs +4 -4
  79. package/{esm2020 → esm2022}/elements/lib/avatar/avatar.component.mjs +4 -4
  80. package/{esm2020 → esm2022}/elements/lib/button/button.component.mjs +7 -7
  81. package/{esm2020 → esm2022}/elements/lib/checkbox/checkbox.component.mjs +6 -6
  82. package/esm2022/elements/lib/date-picker/date-picker.component.mjs +307 -0
  83. package/{esm2020 → esm2022}/elements/lib/directives/addon.directive.mjs +7 -7
  84. package/{esm2020 → esm2022}/elements/lib/directives/form-submit.directive.mjs +4 -4
  85. package/{esm2020 → esm2022}/elements/lib/directives/form-submitter.directive.mjs +4 -4
  86. package/{esm2020 → esm2022}/elements/lib/directives/input.directive.mjs +7 -7
  87. package/esm2022/elements/lib/dropdown/dropdown.component.mjs +100 -0
  88. package/{esm2020 → esm2022}/elements/lib/elements.module.mjs +65 -65
  89. package/esm2022/elements/lib/file-picker/file-picker.component.mjs +236 -0
  90. package/{esm2020 → esm2022}/elements/lib/form-control/form-control.component.mjs +4 -4
  91. package/{esm2020 → esm2022}/elements/lib/form-error/form-error.component.mjs +4 -4
  92. package/{esm2020 → esm2022}/elements/lib/form-group/form-group.component.mjs +4 -4
  93. package/{esm2020 → esm2022}/elements/lib/icon/icon.component.mjs +4 -4
  94. package/{esm2020 → esm2022}/elements/lib/image-picker/image-picker.component.mjs +4 -4
  95. package/{esm2020 → esm2022}/elements/lib/pipes/file-image.pipe.mjs +4 -4
  96. package/{esm2020 → esm2022}/elements/lib/pipes/file-size.pipe.mjs +4 -4
  97. package/{esm2020 → esm2022}/elements/lib/pipes/relative-time.pipe.mjs +4 -4
  98. package/{esm2020 → esm2022}/elements/lib/spinner/spinner.component.mjs +4 -4
  99. package/{esm2020 → esm2022}/elements/lib/tag/tag.component.mjs +4 -4
  100. package/esm2022/http/lib/classes/http.config.mjs +28 -0
  101. package/{esm2020 → esm2022}/http/lib/http.interfaces.mjs +1 -1
  102. package/{esm2020 → esm2022}/http/lib/http.module.mjs +5 -5
  103. package/esm2022/http/lib/interceptors/base-url.interceptor.mjs +64 -0
  104. package/{esm2020 → esm2022}/http/lib/interceptors/error.interceptor.mjs +4 -4
  105. package/{esm2020 → esm2022}/lib/core/services/clipboard.service.mjs +4 -4
  106. package/{esm2020 → esm2022}/lib/core/services/exif.service.mjs +4 -4
  107. package/{esm2020 → esm2022}/lib/core/services/file-loader.service.mjs +4 -4
  108. package/{esm2020 → esm2022}/lib/core/services/image-converter.service.mjs +4 -4
  109. package/{esm2020 → esm2022}/lib/core/services/languages.service.mjs +4 -4
  110. package/{esm2020 → esm2022}/lib/core/services/network.service.mjs +4 -4
  111. package/{esm2020 → esm2022}/lib/core/services/patch.service.mjs +4 -4
  112. package/{esm2020 → esm2022}/localize/lib/localize.module.mjs +9 -9
  113. package/{esm2020 → esm2022}/localize/lib/localize.pipe.mjs +4 -4
  114. package/{esm2020 → esm2022}/localize/lib/localize.service.mjs +4 -4
  115. package/{esm2020 → esm2022}/localize/lib/transforms/interpolate.transform.mjs +2 -3
  116. package/{esm2020 → esm2022}/localize/lib/transforms/reference.transform.mjs +2 -3
  117. package/{esm2020 → esm2022}/localize/lib/views/localize-string/localize-string.component.mjs +4 -4
  118. package/{esm2020 → esm2022}/localize/lib/views/localize-template.directive.mjs +4 -4
  119. package/{esm2020 → esm2022}/masking/lib/directives/currency-mask.directive.mjs +4 -4
  120. package/{esm2020 → esm2022}/masking/lib/directives/date-mask.directive.mjs +4 -4
  121. package/{esm2020 → esm2022}/masking/lib/directives/input-mask.directive.mjs +4 -4
  122. package/{esm2020 → esm2022}/masking/lib/masking.module.mjs +9 -9
  123. package/{esm2020 → esm2022}/masking/lib/masking.service.mjs +4 -4
  124. package/{esm2020 → esm2022}/notifications/lib/notifications-item/notifications-item.component.mjs +4 -4
  125. package/{esm2020 → esm2022}/notifications/lib/notifications-list/notifications-list.component.mjs +4 -4
  126. package/{esm2020 → esm2022}/notifications/lib/notifications.module.mjs +5 -5
  127. package/{esm2020 → esm2022}/notifications/lib/notifications.service.mjs +4 -4
  128. package/{esm2020 → esm2022}/permissions/lib/directives/permission.directive.mjs +4 -4
  129. package/{esm2020 → esm2022}/permissions/lib/guards/permission.guard.mjs +4 -4
  130. package/{esm2020 → esm2022}/permissions/lib/permissions.module.mjs +5 -5
  131. package/{esm2020 → esm2022}/permissions/lib/permissions.service.mjs +4 -4
  132. package/{esm2020 → esm2022}/recaptcha/lib/recaptcha/recaptcha.component.mjs +10 -10
  133. package/{esm2020 → esm2022}/recaptcha/lib/recaptcha-loader.service.mjs +4 -4
  134. package/{esm2020 → esm2022}/recaptcha/lib/recaptcha.module.mjs +5 -5
  135. package/{esm2020 → esm2022}/storage/lib/storage.service.mjs +4 -4
  136. package/{esm2020 → esm2022}/table/lib/components/table/table.component.mjs +10 -10
  137. package/{esm2020 → esm2022}/table/lib/components/table-cell/table-cell.component.mjs +4 -4
  138. package/{esm2020 → esm2022}/table/lib/components/table-header-cell/table-header-cell.component.mjs +4 -4
  139. package/{esm2020 → esm2022}/table/lib/components/table-pager/table-pager.component.mjs +6 -6
  140. package/{esm2020 → esm2022}/table/lib/table.module.mjs +15 -15
  141. package/{esm2020 → esm2022}/theming/lib/theming.directive.mjs +4 -4
  142. package/{esm2020 → esm2022}/theming/lib/theming.module.mjs +5 -5
  143. package/{esm2020 → esm2022}/tooltip/lib/tooltip-container/tooltip-container.component.mjs +4 -4
  144. package/{esm2020 → esm2022}/tooltip/lib/tooltip.directive.mjs +4 -4
  145. package/{esm2020 → esm2022}/tooltip/lib/tooltip.module.mjs +8 -8
  146. package/{esm2020 → esm2022}/utils/lib/directives/autosize.directive.mjs +4 -4
  147. package/{esm2020 → esm2022}/utils/lib/directives/focus-trap.directive.mjs +4 -4
  148. package/{esm2020 → esm2022}/utils/lib/directives/focus.directive.mjs +4 -4
  149. package/{esm2020 → esm2022}/utils/lib/directives/template.directive.mjs +4 -4
  150. package/{esm2020 → esm2022}/utils/lib/utils.module.mjs +11 -11
  151. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-auth.mjs +21 -22
  152. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-auth.mjs.map +1 -1
  153. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-collections.mjs +38 -38
  154. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-collections.mjs.map +1 -1
  155. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-controls.mjs +83 -83
  156. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-controls.mjs.map +1 -1
  157. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-dashboard.mjs +37 -37
  158. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-dashboard.mjs.map +1 -1
  159. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-dialog.mjs +46 -46
  160. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-dialog.mjs.map +1 -1
  161. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-elements.mjs +185 -185
  162. package/fesm2022/bravobit-bb-foundation-elements.mjs.map +1 -0
  163. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-http.mjs +37 -23
  164. package/fesm2022/bravobit-bb-foundation-http.mjs.map +1 -0
  165. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-localize.mjs +20 -20
  166. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-localize.mjs.map +1 -1
  167. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-masking.mjs +20 -20
  168. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-masking.mjs.map +1 -1
  169. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-notifications.mjs +13 -13
  170. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-notifications.mjs.map +1 -1
  171. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-permissions.mjs +13 -13
  172. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-permissions.mjs.map +1 -1
  173. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-recaptcha.mjs +16 -16
  174. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-recaptcha.mjs.map +1 -1
  175. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-storage.mjs +3 -3
  176. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-storage.mjs.map +1 -1
  177. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-table.mjs +34 -34
  178. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-table.mjs.map +1 -1
  179. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-theming.mjs +7 -7
  180. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-theming.mjs.map +1 -1
  181. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-tooltip.mjs +13 -13
  182. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-tooltip.mjs.map +1 -1
  183. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-utils.mjs +22 -22
  184. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-utils.mjs.map +1 -1
  185. package/{fesm2020 → fesm2022}/bravobit-bb-foundation.mjs +21 -21
  186. package/{fesm2020 → fesm2022}/bravobit-bb-foundation.mjs.map +1 -1
  187. package/http/lib/classes/http.config.d.ts +2 -2
  188. package/http/lib/http.interfaces.d.ts +9 -4
  189. package/http/lib/interceptors/base-url.interceptor.d.ts +3 -1
  190. package/localize/lib/views/localize-string/localize-string.component.d.ts +1 -1
  191. package/localize/lib/views/localize-template.directive.d.ts +1 -1
  192. package/masking/lib/directives/currency-mask.directive.d.ts +1 -1
  193. package/masking/lib/directives/date-mask.directive.d.ts +1 -1
  194. package/masking/lib/directives/input-mask.directive.d.ts +1 -1
  195. package/notifications/lib/notifications-item/notifications-item.component.d.ts +1 -1
  196. package/package.json +64 -106
  197. package/permissions/lib/directives/permission.directive.d.ts +1 -1
  198. package/recaptcha/lib/recaptcha/recaptcha.component.d.ts +1 -1
  199. package/table/lib/components/table/table.component.d.ts +1 -1
  200. package/table/lib/components/table-header-cell/table-header-cell.component.d.ts +1 -1
  201. package/table/lib/components/table-pager/table-pager.component.d.ts +1 -1
  202. package/theming/lib/theming.directive.d.ts +1 -1
  203. package/tooltip/lib/tooltip.directive.d.ts +1 -1
  204. package/utils/lib/directives/autosize.directive.d.ts +1 -1
  205. package/utils/lib/directives/template.directive.d.ts +1 -1
  206. package/esm2020/auth/lib/auth.service.mjs +0 -270
  207. package/esm2020/elements/lib/date-picker/date-picker.component.mjs +0 -307
  208. package/esm2020/elements/lib/dropdown/dropdown.component.mjs +0 -100
  209. package/esm2020/elements/lib/file-picker/file-picker.component.mjs +0 -236
  210. package/esm2020/http/lib/classes/http.config.mjs +0 -28
  211. package/esm2020/http/lib/interceptors/base-url.interceptor.mjs +0 -50
  212. package/fesm2015/bravobit-bb-foundation-auth.mjs +0 -851
  213. package/fesm2015/bravobit-bb-foundation-auth.mjs.map +0 -1
  214. package/fesm2015/bravobit-bb-foundation-collections.mjs +0 -474
  215. package/fesm2015/bravobit-bb-foundation-collections.mjs.map +0 -1
  216. package/fesm2015/bravobit-bb-foundation-controls.mjs +0 -1217
  217. package/fesm2015/bravobit-bb-foundation-controls.mjs.map +0 -1
  218. package/fesm2015/bravobit-bb-foundation-dashboard.mjs +0 -417
  219. package/fesm2015/bravobit-bb-foundation-dashboard.mjs.map +0 -1
  220. package/fesm2015/bravobit-bb-foundation-dialog.mjs +0 -512
  221. package/fesm2015/bravobit-bb-foundation-dialog.mjs.map +0 -1
  222. package/fesm2015/bravobit-bb-foundation-elements.mjs +0 -1883
  223. package/fesm2015/bravobit-bb-foundation-elements.mjs.map +0 -1
  224. package/fesm2015/bravobit-bb-foundation-http.mjs +0 -176
  225. package/fesm2015/bravobit-bb-foundation-http.mjs.map +0 -1
  226. package/fesm2015/bravobit-bb-foundation-localize.mjs +0 -835
  227. package/fesm2015/bravobit-bb-foundation-localize.mjs.map +0 -1
  228. package/fesm2015/bravobit-bb-foundation-masking.mjs +0 -334
  229. package/fesm2015/bravobit-bb-foundation-masking.mjs.map +0 -1
  230. package/fesm2015/bravobit-bb-foundation-notifications.mjs +0 -357
  231. package/fesm2015/bravobit-bb-foundation-notifications.mjs.map +0 -1
  232. package/fesm2015/bravobit-bb-foundation-permissions.mjs +0 -310
  233. package/fesm2015/bravobit-bb-foundation-permissions.mjs.map +0 -1
  234. package/fesm2015/bravobit-bb-foundation-recaptcha.mjs +0 -349
  235. package/fesm2015/bravobit-bb-foundation-recaptcha.mjs.map +0 -1
  236. package/fesm2015/bravobit-bb-foundation-rxjs.mjs +0 -22
  237. package/fesm2015/bravobit-bb-foundation-rxjs.mjs.map +0 -1
  238. package/fesm2015/bravobit-bb-foundation-storage.mjs +0 -418
  239. package/fesm2015/bravobit-bb-foundation-storage.mjs.map +0 -1
  240. package/fesm2015/bravobit-bb-foundation-table.mjs +0 -613
  241. package/fesm2015/bravobit-bb-foundation-table.mjs.map +0 -1
  242. package/fesm2015/bravobit-bb-foundation-theming.mjs +0 -382
  243. package/fesm2015/bravobit-bb-foundation-theming.mjs.map +0 -1
  244. package/fesm2015/bravobit-bb-foundation-tooltip.mjs +0 -210
  245. package/fesm2015/bravobit-bb-foundation-tooltip.mjs.map +0 -1
  246. package/fesm2015/bravobit-bb-foundation-utils.mjs +0 -246
  247. package/fesm2015/bravobit-bb-foundation-utils.mjs.map +0 -1
  248. package/fesm2015/bravobit-bb-foundation.mjs +0 -929
  249. package/fesm2015/bravobit-bb-foundation.mjs.map +0 -1
  250. package/fesm2020/bravobit-bb-foundation-elements.mjs.map +0 -1
  251. package/fesm2020/bravobit-bb-foundation-http.mjs.map +0 -1
  252. /package/{esm2020 → esm2022}/auth/bravobit-bb-foundation-auth.mjs +0 -0
  253. /package/{esm2020 → esm2022}/auth/lib/auth.session.mjs +0 -0
  254. /package/{esm2020 → esm2022}/auth/lib/directives/abstract.directive.mjs +0 -0
  255. /package/{esm2020 → esm2022}/auth/lib/helpers/jwt.helper.mjs +0 -0
  256. /package/{esm2020 → esm2022}/auth/lib/interfaces/config.interface.mjs +0 -0
  257. /package/{esm2020 → esm2022}/auth/lib/interfaces/provider.interface.mjs +0 -0
  258. /package/{esm2020 → esm2022}/auth/lib/interfaces/token.interface.mjs +0 -0
  259. /package/{esm2020 → esm2022}/auth/lib/providers/email.provider.mjs +0 -0
  260. /package/{esm2020 → esm2022}/auth/lib/providers/verify.provider.mjs +0 -0
  261. /package/{esm2020 → esm2022}/auth/lib/tokens/use-authorization.token.mjs +0 -0
  262. /package/{esm2020 → esm2022}/auth/public_api.mjs +0 -0
  263. /package/{esm2020 → esm2022}/bravobit-bb-foundation.mjs +0 -0
  264. /package/{esm2020 → esm2022}/collections/bravobit-bb-foundation-collections.mjs +0 -0
  265. /package/{esm2020 → esm2022}/collections/lib/collection.mjs +0 -0
  266. /package/{esm2020 → esm2022}/collections/lib/interfaces/collection.interface.mjs +0 -0
  267. /package/{esm2020 → esm2022}/collections/lib/providers/api-collection.provider.mjs +0 -0
  268. /package/{esm2020 → esm2022}/collections/lib/providers/collection.provider.mjs +0 -0
  269. /package/{esm2020 → esm2022}/collections/lib/providers/local-collection.provider.mjs +0 -0
  270. /package/{esm2020 → esm2022}/collections/public_api.mjs +0 -0
  271. /package/{esm2020 → esm2022}/controls/bravobit-bb-foundation-controls.mjs +0 -0
  272. /package/{esm2020 → esm2022}/controls/lib/control-error/control-error/control-error.animation.mjs +0 -0
  273. /package/{esm2020 → esm2022}/controls/lib/control-error/control-error.defaults.mjs +0 -0
  274. /package/{esm2020 → esm2022}/controls/lib/control-error/control-error.interface.mjs +0 -0
  275. /package/{esm2020 → esm2022}/controls/lib/control-error/control-error.utils.mjs +0 -0
  276. /package/{esm2020 → esm2022}/controls/lib/controls.interfaces.mjs +0 -0
  277. /package/{esm2020 → esm2022}/controls/public_api.mjs +0 -0
  278. /package/{esm2020 → esm2022}/dashboard/bravobit-bb-foundation-dashboard.mjs +0 -0
  279. /package/{esm2020 → esm2022}/dashboard/public_api.mjs +0 -0
  280. /package/{esm2020 → esm2022}/dialog/bravobit-bb-foundation-dialog.mjs +0 -0
  281. /package/{esm2020 → esm2022}/dialog/lib/dialog-container/dialog-container.animations.mjs +0 -0
  282. /package/{esm2020 → esm2022}/dialog/lib/dialog-overlay/dialog-overlay.animations.mjs +0 -0
  283. /package/{esm2020 → esm2022}/dialog/lib/dialog.interfaces.mjs +0 -0
  284. /package/{esm2020 → esm2022}/dialog/lib/dialog.ref.mjs +0 -0
  285. /package/{esm2020 → esm2022}/dialog/public_api.mjs +0 -0
  286. /package/{esm2020 → esm2022}/elements/bravobit-bb-foundation-elements.mjs +0 -0
  287. /package/{esm2020 → esm2022}/elements/lib/elements.interfaces.mjs +0 -0
  288. /package/{esm2020 → esm2022}/elements/public_api.mjs +0 -0
  289. /package/{esm2020 → esm2022}/http/bravobit-bb-foundation-http.mjs +0 -0
  290. /package/{esm2020 → esm2022}/http/lib/classes/http.error.mjs +0 -0
  291. /package/{esm2020 → esm2022}/http/public_api.mjs +0 -0
  292. /package/{esm2020 → esm2022}/lib/core/functions/date.utils.mjs +0 -0
  293. /package/{esm2020 → esm2022}/lib/core/functions/password.utils.mjs +0 -0
  294. /package/{esm2020 → esm2022}/lib/core/miscellaneous/regex.mjs +0 -0
  295. /package/{esm2020 → esm2022}/lib/core/miscellaneous/validator.mjs +0 -0
  296. /package/{esm2020 → esm2022}/lib/core/mixins/can-disable.mjs +0 -0
  297. /package/{esm2020 → esm2022}/lib/core/mixins/can-hide-errors.mjs +0 -0
  298. /package/{esm2020 → esm2022}/lib/core/mixins/can-load.mjs +0 -0
  299. /package/{esm2020 → esm2022}/lib/core/mixins/constructor.mjs +0 -0
  300. /package/{esm2020 → esm2022}/lib/core/mixins/has-error.mjs +0 -0
  301. /package/{esm2020 → esm2022}/lib/core/mixins/is-focused.mjs +0 -0
  302. /package/{esm2020 → esm2022}/lib/core/mixins/is-grouped.mjs +0 -0
  303. /package/{esm2020 → esm2022}/lib/core/mixins/is-readonly.mjs +0 -0
  304. /package/{esm2020 → esm2022}/lib/core/mixins/is-required.mjs +0 -0
  305. /package/{esm2020 → esm2022}/lib/core/tokens/accept-language.token.mjs +0 -0
  306. /package/{esm2020 → esm2022}/lib/core/tokens/base-url.token.mjs +0 -0
  307. /package/{esm2020 → esm2022}/lib/core/tokens/cookie.token.mjs +0 -0
  308. /package/{esm2020 → esm2022}/lib/core/tokens/location.token.mjs +0 -0
  309. /package/{esm2020 → esm2022}/lib/core/tokens/navigator.token.mjs +0 -0
  310. /package/{esm2020 → esm2022}/lib/core/tokens/window.token.mjs +0 -0
  311. /package/{esm2020 → esm2022}/localize/bravobit-bb-foundation-localize.mjs +0 -0
  312. /package/{esm2020 → esm2022}/localize/lib/dictionary/dictionary.class.mjs +0 -0
  313. /package/{esm2020 → esm2022}/localize/lib/dictionary/dictionary.context.mjs +0 -0
  314. /package/{esm2020 → esm2022}/localize/lib/dictionary/dictionary.data.mjs +0 -0
  315. /package/{esm2020 → esm2022}/localize/lib/functions/date.function.mjs +0 -0
  316. /package/{esm2020 → esm2022}/localize/lib/functions/lowercase.function.mjs +0 -0
  317. /package/{esm2020 → esm2022}/localize/lib/functions/uppercase.function.mjs +0 -0
  318. /package/{esm2020 → esm2022}/localize/lib/handlers/missing.handler.mjs +0 -0
  319. /package/{esm2020 → esm2022}/localize/lib/interfaces/config.interfaces.mjs +0 -0
  320. /package/{esm2020 → esm2022}/localize/lib/interfaces/functions.interfaces.mjs +0 -0
  321. /package/{esm2020 → esm2022}/localize/lib/interfaces/handlers.interfaces.mjs +0 -0
  322. /package/{esm2020 → esm2022}/localize/lib/interfaces/options.interfaces.mjs +0 -0
  323. /package/{esm2020 → esm2022}/localize/lib/interfaces/transforms.interfaces.mjs +0 -0
  324. /package/{esm2020 → esm2022}/localize/lib/locale.token.mjs +0 -0
  325. /package/{esm2020 → esm2022}/localize/lib/localizations/dutch.localization.mjs +0 -0
  326. /package/{esm2020 → esm2022}/localize/lib/localizations/english.localization.mjs +0 -0
  327. /package/{esm2020 → esm2022}/localize/lib/transforms/abstract.transform.mjs +0 -0
  328. /package/{esm2020 → esm2022}/localize/public_api.mjs +0 -0
  329. /package/{esm2020 → esm2022}/masking/bravobit-bb-foundation-masking.mjs +0 -0
  330. /package/{esm2020 → esm2022}/masking/lib/input-mask.interface.mjs +0 -0
  331. /package/{esm2020 → esm2022}/masking/public_api.mjs +0 -0
  332. /package/{esm2020 → esm2022}/notifications/bravobit-bb-foundation-notifications.mjs +0 -0
  333. /package/{esm2020 → esm2022}/notifications/lib/notifications.animations.mjs +0 -0
  334. /package/{esm2020 → esm2022}/notifications/lib/notifications.interfaces.mjs +0 -0
  335. /package/{esm2020 → esm2022}/notifications/public_api.mjs +0 -0
  336. /package/{esm2020 → esm2022}/permissions/bravobit-bb-foundation-permissions.mjs +0 -0
  337. /package/{esm2020 → esm2022}/permissions/lib/handlers/abstract.handler.mjs +0 -0
  338. /package/{esm2020 → esm2022}/permissions/lib/handlers/local.handler.mjs +0 -0
  339. /package/{esm2020 → esm2022}/permissions/lib/permissions.interface.mjs +0 -0
  340. /package/{esm2020 → esm2022}/permissions/public_api.mjs +0 -0
  341. /package/{esm2020 → esm2022}/public_api.mjs +0 -0
  342. /package/{esm2020 → esm2022}/recaptcha/bravobit-bb-foundation-recaptcha.mjs +0 -0
  343. /package/{esm2020 → esm2022}/recaptcha/lib/recaptcha.interface.mjs +0 -0
  344. /package/{esm2020 → esm2022}/recaptcha/public_api.mjs +0 -0
  345. /package/{esm2020 → esm2022}/rxjs/bravobit-bb-foundation-rxjs.mjs +0 -0
  346. /package/{esm2020 → esm2022}/rxjs/lib/observables/get-control-value.observable.mjs +0 -0
  347. /package/{esm2020 → esm2022}/rxjs/lib/operators/combine-latest-map.operator.mjs +0 -0
  348. /package/{esm2020 → esm2022}/rxjs/lib/operators/filter-nil.operator.mjs +0 -0
  349. /package/{esm2020 → esm2022}/rxjs/public_api.mjs +0 -0
  350. /package/{esm2020 → esm2022}/storage/bravobit-bb-foundation-storage.mjs +0 -0
  351. /package/{esm2020 → esm2022}/storage/lib/interfaces/attributes.interface.mjs +0 -0
  352. /package/{esm2020 → esm2022}/storage/lib/interfaces/memory.interface.mjs +0 -0
  353. /package/{esm2020 → esm2022}/storage/lib/interfaces/strategy.interface.mjs +0 -0
  354. /package/{esm2020 → esm2022}/storage/lib/strategies/cookie-storage.strategy.mjs +0 -0
  355. /package/{esm2020 → esm2022}/storage/lib/strategies/memory-storage.strategy.mjs +0 -0
  356. /package/{esm2020 → esm2022}/storage/lib/strategies/polyfill-storage.strategy.mjs +0 -0
  357. /package/{esm2020 → esm2022}/storage/public_api.mjs +0 -0
  358. /package/{esm2020 → esm2022}/table/bravobit-bb-foundation-table.mjs +0 -0
  359. /package/{esm2020 → esm2022}/table/lib/data/datasource.data.mjs +0 -0
  360. /package/{esm2020 → esm2022}/table/lib/data/generic.data.mjs +0 -0
  361. /package/{esm2020 → esm2022}/table/lib/interfaces/datasource.interface.mjs +0 -0
  362. /package/{esm2020 → esm2022}/table/lib/interfaces/table.interfaces.mjs +0 -0
  363. /package/{esm2020 → esm2022}/table/public_api.mjs +0 -0
  364. /package/{esm2020 → esm2022}/theming/bravobit-bb-foundation-theming.mjs +0 -0
  365. /package/{esm2020 → esm2022}/theming/lib/themes/checkbox-group.theme.mjs +0 -0
  366. /package/{esm2020 → esm2022}/theming/lib/themes/checkbox.theme.mjs +0 -0
  367. /package/{esm2020 → esm2022}/theming/lib/themes/control-error.theme.mjs +0 -0
  368. /package/{esm2020 → esm2022}/theming/lib/themes/form-control-addon.theme.mjs +0 -0
  369. /package/{esm2020 → esm2022}/theming/lib/themes/form-control.theme.mjs +0 -0
  370. /package/{esm2020 → esm2022}/theming/lib/themes/radio-button.theme.mjs +0 -0
  371. /package/{esm2020 → esm2022}/theming/lib/themes/radio-group.theme.mjs +0 -0
  372. /package/{esm2020 → esm2022}/theming/lib/themes/toggle-group.theme.mjs +0 -0
  373. /package/{esm2020 → esm2022}/theming/lib/themes/toggle.theme.mjs +0 -0
  374. /package/{esm2020 → esm2022}/theming/lib/theming.data.mjs +0 -0
  375. /package/{esm2020 → esm2022}/theming/lib/theming.interface.mjs +0 -0
  376. /package/{esm2020 → esm2022}/theming/lib/utils/theming.variable.mjs +0 -0
  377. /package/{esm2020 → esm2022}/theming/public_api.mjs +0 -0
  378. /package/{esm2020 → esm2022}/tooltip/bravobit-bb-foundation-tooltip.mjs +0 -0
  379. /package/{esm2020 → esm2022}/tooltip/lib/tooltip.interfaces.mjs +0 -0
  380. /package/{esm2020 → esm2022}/tooltip/public_api.mjs +0 -0
  381. /package/{esm2020 → esm2022}/utils/bravobit-bb-foundation-utils.mjs +0 -0
  382. /package/{esm2020 → esm2022}/utils/public_api.mjs +0 -0
  383. /package/{fesm2020 → fesm2022}/bravobit-bb-foundation-rxjs.mjs +0 -0
  384. /package/{fesm2020 → fesm2022}/bravobit-bb-foundation-rxjs.mjs.map +0 -0
@@ -1,307 +0,0 @@
1
- import { mixinDisabled, mixinError, mixinGrouped, mixinHideErrors, mixinReadonly, mixinRequired } from '@bravobit/bb-foundation';
2
- import { ChangeDetectionStrategy, Component, EventEmitter, forwardRef, Inject, Input, Output, ViewEncapsulation } from '@angular/core';
3
- import { FormControl, FormGroup, NG_VALIDATORS, NG_VALUE_ACCESSOR, Validators } from '@angular/forms';
4
- import { BehaviorSubject, combineLatest, Subscription } from 'rxjs';
5
- import { distinctUntilChanged, map, startWith, tap } from 'rxjs/operators';
6
- import { LOCALIZE_ID } from '@bravobit/bb-foundation/localize';
7
- import { formatDate } from '@angular/common';
8
- import * as i0 from "@angular/core";
9
- import * as i1 from "@angular/common";
10
- import * as i2 from "@angular/forms";
11
- import * as i3 from "@bravobit/bb-foundation/utils";
12
- import * as i4 from "../form-error/form-error.component";
13
- import * as i5 from "../directives/form-submit.directive";
14
- import * as i6 from "../directives/input.directive";
15
- import * as i7 from "../form-control/form-control.component";
16
- import * as i8 from "rxjs";
17
- class BbDatePickerBase {
18
- }
19
- const BbFilePickerMixinBase = mixinRequired(mixinReadonly(mixinDisabled(mixinGrouped(mixinError(mixinHideErrors(BbDatePickerBase))))));
20
- export class BbDatePicker extends BbFilePickerMixinBase {
21
- set years(value) {
22
- this.parseYears(value);
23
- }
24
- get value() {
25
- return this.formToDateString(this.form?.value);
26
- }
27
- set value(value) {
28
- this.parseDateStringInForm(value);
29
- this.valueChange.emit(this.value);
30
- }
31
- constructor(_localizeId) {
32
- super();
33
- this._localizeId = _localizeId;
34
- // Readonly data.
35
- this._yearRegex = /^(10|[1-9][0-9])\d{2}$/; // Note: 1000 - 9999
36
- // Inputs.
37
- this.label = null;
38
- this.hint = null;
39
- this.dayPlaceholder = 'dd';
40
- this.monthPlaceholder = 'mm';
41
- this.yearPlaceholder = 'yyyy';
42
- this.trackByValue = (_, item) => item?.value;
43
- this.years$ = new BehaviorSubject(null);
44
- this.valueChange = new EventEmitter();
45
- // Subscriptions.
46
- this._subscription = new Subscription();
47
- this.onTouchedCallback = () => {
48
- };
49
- this.onChangeCallback = () => {
50
- };
51
- this.formToDateString = ({ year, month, day }) => {
52
- if (this.form?.invalid) {
53
- return null;
54
- }
55
- const prefixedMonth = this.padString(`${month}`, 2, '0');
56
- const prefixedDay = this.padString(`${day}`, 2, '0');
57
- return [year, prefixedMonth, prefixedDay].join('-');
58
- };
59
- this.parseYearFormat = (value) => {
60
- // Transform the value to a definitive string.
61
- const yearString = `${value}`;
62
- const currentFullYear = new Date().getFullYear();
63
- // Handle default "current" syntax.
64
- if (yearString === 'current') {
65
- return currentFullYear;
66
- }
67
- // Handle "current + {amount}" syntax.
68
- if (/^current\s?\+\s?\d+$/.test(yearString)) {
69
- const amount = Number(yearString?.split('+')?.[1]?.trim()) ?? 0;
70
- return currentFullYear + amount;
71
- }
72
- // Handle "current - {amount}" syntax.
73
- if (/^current\s?-\s?\d+$/.test(yearString)) {
74
- const amount = Number(yearString?.split('-')?.[1]?.trim()) ?? 0;
75
- return currentFullYear - amount;
76
- }
77
- // Handling the default number case.
78
- if (/^[0-9]{4}$/.test(yearString)) {
79
- return Number(yearString);
80
- }
81
- // We could not parse it.
82
- return null;
83
- };
84
- this.getDaysInMonth = (month = null, year = null) => {
85
- if (this.form?.invalid || month === null || year === null) {
86
- return 31;
87
- }
88
- const parsedYear = parseInt(year, 10);
89
- return new Date(parsedYear, month, 0).getDate();
90
- };
91
- this.isValidDateString = (value) => {
92
- return typeof value === 'string' && /^[0-9]{4}-[0-9]{2}-[0-9]{2}$/.test(value);
93
- };
94
- this.padString = (value, maxLength, fillString = '0') => {
95
- const count = maxLength - value.length;
96
- for (let index = 0; index < count; index++) {
97
- value = `${fillString}${value}`;
98
- }
99
- return value;
100
- };
101
- }
102
- ngOnInit() {
103
- this.composeForm();
104
- this.getData();
105
- this.handleChanges();
106
- }
107
- ngOnDestroy() {
108
- this._subscription?.unsubscribe();
109
- }
110
- writeValue(value) {
111
- this.parseDateStringInForm(value);
112
- }
113
- registerOnChange(method) {
114
- this.onChangeCallback = method;
115
- }
116
- registerOnTouched(method) {
117
- this.onTouchedCallback = method;
118
- }
119
- setDisabledState(isDisabled) {
120
- this.disabled = isDisabled;
121
- if (this.disabled) {
122
- this.form?.disable();
123
- }
124
- else {
125
- this.form?.enable();
126
- }
127
- }
128
- onErrorChange(error) {
129
- this.error = !!error;
130
- }
131
- validate({ value }) {
132
- if (value === null || value === undefined) {
133
- return null;
134
- }
135
- const data = this.parseDateString(value);
136
- const date = new Date(data?.year, data?.month - 1, data?.day);
137
- const maxDays = this.getDaysInMonth(data?.month, `${data?.year}`);
138
- const isInvalidDate = date.toString() === 'Invalid Date';
139
- const exceededMaxDays = data?.day > maxDays;
140
- return (isInvalidDate || exceededMaxDays) && {
141
- invalidDate: true
142
- };
143
- }
144
- handleChanges() {
145
- const dateOrNull$ = this.form.valueChanges.pipe(map(value => this.formToDateString(value)), distinctUntilChanged());
146
- const subscription = dateOrNull$.subscribe(() => {
147
- this.valueChange.emit(this.value);
148
- this.onChangeCallback(this.value);
149
- });
150
- this._subscription.add(subscription);
151
- }
152
- getData() {
153
- const years$ = this.years$.asObservable();
154
- const months$ = this.getMonthData();
155
- const days$ = this.getDayData();
156
- this.data$ = combineLatest([years$, months$, days$]).pipe(map(([years, months, days]) => ({ years, months, days })), tap(data => this.verifyListData(data?.days?.length, data?.years)));
157
- }
158
- verifyListData(maxDays, years) {
159
- const dayControl = this.form.get('day');
160
- if (dayControl?.value !== null && dayControl?.value > maxDays) {
161
- dayControl.patchValue(maxDays);
162
- }
163
- const yearControl = this.form.get('year');
164
- if (years !== null && yearControl?.value !== null && this._yearRegex.test(yearControl?.value)) {
165
- const selectedYear = Number(yearControl?.value);
166
- const firstYear = Math.min(...years);
167
- const lastYear = Math.max(...years);
168
- if (selectedYear < firstYear || selectedYear > lastYear) {
169
- Promise.resolve().then(() => yearControl.patchValue(null));
170
- }
171
- }
172
- }
173
- getDayData() {
174
- const count$ = this.form.valueChanges.pipe(startWith(this.form?.value), map(({ month, year }) => this.getDaysInMonth(month, year)), distinctUntilChanged());
175
- return count$.pipe(map(count => Array(count).fill(0).map((_, index) => ({
176
- label: `${index + 1}`,
177
- value: index + 1
178
- }))));
179
- }
180
- getMonthData() {
181
- return this._localizeId.pipe(map(locale => {
182
- return Array(12).fill(0).map((_, month) => {
183
- const date = new Date(2000, month, 1);
184
- const label = formatDate(date, 'LLLL', locale);
185
- return { label, value: month + 1 };
186
- });
187
- }));
188
- }
189
- composeForm() {
190
- const { required, pattern, minLength, maxLength } = Validators;
191
- const yearPattern = pattern(this._yearRegex);
192
- const yearValidators = [required, yearPattern, minLength(4), maxLength(4)];
193
- this.form = new FormGroup({
194
- day: new FormControl(null, required),
195
- month: new FormControl(null, required),
196
- year: new FormControl(null, yearValidators)
197
- });
198
- }
199
- parseDateStringInForm(value) {
200
- // If the date string was not a valid format, reset the form.
201
- if (!this.isValidDateString(value)) {
202
- if (value !== null) {
203
- this.form?.reset({ year: null, month: null, day: null }, { emitEvent: false });
204
- }
205
- return;
206
- }
207
- // Parse the date string and save in the form.
208
- const data = this.parseDateString(value);
209
- const year = data?.year !== null && data?.year !== undefined
210
- ? this.padString(`${data?.year}`, 4, '0')
211
- : null;
212
- const formData = { ...(data ?? {}), year };
213
- this.form?.patchValue(formData, { emitEvent: false });
214
- }
215
- parseDateString(value) {
216
- if (!this.isValidDateString(value)) {
217
- return null;
218
- }
219
- // Parse the date string.
220
- const [year, month, day] = value?.split('-');
221
- return {
222
- day: day ? parseInt(day, 10) : null,
223
- month: month ? parseInt(month, 10) : null,
224
- year: year ? parseInt(year, 10) : null
225
- };
226
- }
227
- parseYears(values) {
228
- if (!values) {
229
- return this.years$.next(null);
230
- }
231
- // Parse the values to years (in numbers).
232
- const [first, last] = values;
233
- const firstYear = this.parseYearFormat(first);
234
- const lastYear = this.parseYearFormat(last);
235
- // Check cases in where we cannot parse.
236
- if (firstYear === null || lastYear === null) {
237
- return this.years$.next(null);
238
- }
239
- const difference = firstYear - lastYear;
240
- const absoluteDifference = Math.abs(difference) + 1;
241
- // Create an array with years.
242
- const years = Array(absoluteDifference)
243
- .fill(0)
244
- .map((_, index) => difference < 0 ? (firstYear + index) : (firstYear - index));
245
- // Validate we have one or more years.
246
- if (years?.length <= 0) {
247
- return this.years$.next(null);
248
- }
249
- // Push the years.
250
- return this.years$.next(years);
251
- }
252
- }
253
- BbDatePicker.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: BbDatePicker, deps: [{ token: LOCALIZE_ID }], target: i0.ɵɵFactoryTarget.Component });
254
- BbDatePicker.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: BbDatePicker, selector: "bb-date-picker", inputs: { required: "required", readonly: "readonly", disabled: "disabled", grouped: "grouped", hideErrors: "hideErrors", label: "label", hint: "hint", dayPlaceholder: "dayPlaceholder", monthPlaceholder: "monthPlaceholder", yearPlaceholder: "yearPlaceholder", years: "years", value: "value" }, outputs: { valueChange: "valueChange" }, host: { properties: { "class.required": "required", "class.readonly": "readonly", "class.disabled": "disabled", "class.grouped": "grouped", "class.error": "error" }, classAttribute: "bb-date-picker" }, providers: [
255
- {
256
- provide: NG_VALUE_ACCESSOR,
257
- useExisting: forwardRef(() => BbDatePicker),
258
- multi: true
259
- },
260
- {
261
- provide: NG_VALIDATORS,
262
- useExisting: BbDatePicker,
263
- multi: true
264
- }
265
- ], usesInheritance: true, ngImport: i0, template: "<!-- Label of the date picker. -->\n<label *ngIf=\"label as labelContent\"\n class=\"bb-date-picker-label\">\n <ng-template [bbTemplate]=\"labelContent\">\n {{ labelContent }}\n </ng-template>\n</label>\n\n<!-- The form containing the year/month/day fields. -->\n<form *ngIf=\"data$ | async as data\"\n [formGroup]=\"form\"\n class=\"bb-date-picker-container\"\n novalidate>\n <div class=\"bb-date-picker-item\">\n <bb-form-control hideErrors>\n <select [class.has-value]=\"!!form?.get('day')?.value\"\n bbInput\n autocomplete=\"off\"\n formControlName=\"day\">\n <option [ngValue]=\"null\">{{ dayPlaceholder }}</option>\n <option *ngFor=\"let day of data?.days; trackBy: trackByValue\"\n [ngValue]=\"day?.value\">\n {{ day?.label }}\n </option>\n </select>\n </bb-form-control>\n </div>\n <div class=\"bb-date-picker-item\">\n <bb-form-control hideErrors>\n <select [class.has-value]=\"!!form?.get('month')?.value\"\n bbInput\n autocomplete=\"off\"\n formControlName=\"month\">\n <option [ngValue]=\"null\">{{ monthPlaceholder }}</option>\n <option *ngFor=\"let month of data?.months; trackBy: trackByValue\"\n [ngValue]=\"month?.value\">\n {{ month?.label }}\n </option>\n </select>\n </bb-form-control>\n </div>\n <div class=\"bb-date-picker-item\">\n <bb-form-control hideErrors>\n <select *ngIf=\"data?.years?.length > 0; else defaultYearInputTemplate\"\n [class.has-value]=\"!!form?.get('year')?.value\"\n bbInput\n autocomplete=\"off\"\n formControlName=\"year\">\n <option [ngValue]=\"null\">{{ yearPlaceholder }}</option>\n <option *ngFor=\"let year of data?.years\"\n [value]=\"year\">\n {{ year }}\n </option>\n </select>\n\n <ng-template #defaultYearInputTemplate>\n <input [placeholder]=\"yearPlaceholder\"\n bbInput\n type=\"text\"\n inputmode=\"numeric\"\n minlength=\"4\"\n maxlength=\"4\"\n pattern=\"^[0-9]{4}$\"\n formControlName=\"year\"\n autocomplete=\"off\">\n </ng-template>\n </bb-form-control>\n </div>\n</form>\n\n<!-- The date picker error. -->\n<bb-form-error *ngIf=\"!hideErrors\"\n (errorChange)=\"onErrorChange($event)\">\n</bb-form-error>\n\n<!-- The date picker hint. -->\n<p *ngIf=\"hint as hintContent\"\n class=\"bb-date-picker-hint\">\n <ng-template [bbTemplate]=\"hintContent\">\n {{ hintContent }}\n </ng-template>\n</p>\n", styles: [".bb-date-picker{display:block}.bb-date-picker.required>.bb-date-picker-label:after{content:\"*\";color:#c23934;font-size:12px;line-height:1.5}.bb-date-picker.readonly{pointer-events:none}.bb-date-picker.readonly .bb-form-control-container{cursor:default;border:1px dotted #bdc4c9;background-color:#f9f9f9!important}.bb-date-picker.readonly .bb-form-control-container>select:disabled{opacity:1}.bb-date-picker.grouped{margin-bottom:20px}.bb-date-picker.error>.bb-date-picker-label{color:#c23934}.bb-date-picker.error .bb-form-control-container{border:1px solid #962b26;background-color:#c2393440!important;box-shadow:inset 0 3px #b7bcc233,0 6px 6px -6px #0000001a,0 0 0 3px #c2393466!important}.bb-date-picker-label{color:#000;display:block;font-size:16px;font-weight:500;margin-bottom:4px}.bb-date-picker-container{display:flex}.bb-date-picker-item{flex:1}.bb-date-picker-item>bb-form-control.focused{z-index:1;position:relative}.bb-date-picker-item>.bb-form-control>.bb-form-control-container>select>option:first-child{color:#d2d2d2}.bb-date-picker-item>.bb-form-control>.bb-form-control-container>select:not(.has-value){color:#d2d2d2}.bb-date-picker-item>.bb-form-control>.bb-form-control-container>select:not(.has-value)>option:not(:first-child){color:#000}.bb-date-picker-item:not(:first-child):not(:last-child) .bb-form-control-container{border-radius:0!important}.bb-date-picker-item:first-child .bb-form-control-container{border-right:none!important;border-top-right-radius:0!important;border-bottom-right-radius:0!important}.bb-date-picker-item:last-child .bb-form-control-container{border-left:none!important;border-top-left-radius:0!important;border-bottom-left-radius:0!important}.bb-date-picker-hint{display:block;color:#738694;font-size:13px;margin-top:4px;pointer-events:all}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { kind: "directive", type: i2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i2.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i3.BbTemplate, selector: "[bbTemplate]", inputs: ["bbTemplate"] }, { kind: "component", type: i4.BbFormError, selector: "bb-form-error", inputs: ["control"], outputs: ["errorChange"] }, { kind: "directive", type: i5.BbFormSubmit, selector: "form", exportAs: ["bbForm"] }, { kind: "directive", type: i6.BbInput, selector: "input[bbInput], textarea[bbInput]", inputs: ["readonly"] }, { kind: "directive", type: i6.BbSelect, selector: "select[bbInput]", inputs: ["disabled", "required"] }, { kind: "component", type: i7.BbFormControl, selector: "bb-form-control", inputs: ["grouped", "hideErrors", "label", "hint"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
266
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: BbDatePicker, decorators: [{
267
- type: Component,
268
- args: [{ selector: 'bb-date-picker', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [
269
- {
270
- provide: NG_VALUE_ACCESSOR,
271
- useExisting: forwardRef(() => BbDatePicker),
272
- multi: true
273
- },
274
- {
275
- provide: NG_VALIDATORS,
276
- useExisting: BbDatePicker,
277
- multi: true
278
- }
279
- ], host: {
280
- 'class': 'bb-date-picker',
281
- '[class.required]': 'required',
282
- '[class.readonly]': 'readonly',
283
- '[class.disabled]': 'disabled',
284
- '[class.grouped]': 'grouped',
285
- '[class.error]': 'error'
286
- }, inputs: ['required', 'readonly', 'disabled', 'grouped', 'hideErrors'], preserveWhitespaces: false, template: "<!-- Label of the date picker. -->\n<label *ngIf=\"label as labelContent\"\n class=\"bb-date-picker-label\">\n <ng-template [bbTemplate]=\"labelContent\">\n {{ labelContent }}\n </ng-template>\n</label>\n\n<!-- The form containing the year/month/day fields. -->\n<form *ngIf=\"data$ | async as data\"\n [formGroup]=\"form\"\n class=\"bb-date-picker-container\"\n novalidate>\n <div class=\"bb-date-picker-item\">\n <bb-form-control hideErrors>\n <select [class.has-value]=\"!!form?.get('day')?.value\"\n bbInput\n autocomplete=\"off\"\n formControlName=\"day\">\n <option [ngValue]=\"null\">{{ dayPlaceholder }}</option>\n <option *ngFor=\"let day of data?.days; trackBy: trackByValue\"\n [ngValue]=\"day?.value\">\n {{ day?.label }}\n </option>\n </select>\n </bb-form-control>\n </div>\n <div class=\"bb-date-picker-item\">\n <bb-form-control hideErrors>\n <select [class.has-value]=\"!!form?.get('month')?.value\"\n bbInput\n autocomplete=\"off\"\n formControlName=\"month\">\n <option [ngValue]=\"null\">{{ monthPlaceholder }}</option>\n <option *ngFor=\"let month of data?.months; trackBy: trackByValue\"\n [ngValue]=\"month?.value\">\n {{ month?.label }}\n </option>\n </select>\n </bb-form-control>\n </div>\n <div class=\"bb-date-picker-item\">\n <bb-form-control hideErrors>\n <select *ngIf=\"data?.years?.length > 0; else defaultYearInputTemplate\"\n [class.has-value]=\"!!form?.get('year')?.value\"\n bbInput\n autocomplete=\"off\"\n formControlName=\"year\">\n <option [ngValue]=\"null\">{{ yearPlaceholder }}</option>\n <option *ngFor=\"let year of data?.years\"\n [value]=\"year\">\n {{ year }}\n </option>\n </select>\n\n <ng-template #defaultYearInputTemplate>\n <input [placeholder]=\"yearPlaceholder\"\n bbInput\n type=\"text\"\n inputmode=\"numeric\"\n minlength=\"4\"\n maxlength=\"4\"\n pattern=\"^[0-9]{4}$\"\n formControlName=\"year\"\n autocomplete=\"off\">\n </ng-template>\n </bb-form-control>\n </div>\n</form>\n\n<!-- The date picker error. -->\n<bb-form-error *ngIf=\"!hideErrors\"\n (errorChange)=\"onErrorChange($event)\">\n</bb-form-error>\n\n<!-- The date picker hint. -->\n<p *ngIf=\"hint as hintContent\"\n class=\"bb-date-picker-hint\">\n <ng-template [bbTemplate]=\"hintContent\">\n {{ hintContent }}\n </ng-template>\n</p>\n", styles: [".bb-date-picker{display:block}.bb-date-picker.required>.bb-date-picker-label:after{content:\"*\";color:#c23934;font-size:12px;line-height:1.5}.bb-date-picker.readonly{pointer-events:none}.bb-date-picker.readonly .bb-form-control-container{cursor:default;border:1px dotted #bdc4c9;background-color:#f9f9f9!important}.bb-date-picker.readonly .bb-form-control-container>select:disabled{opacity:1}.bb-date-picker.grouped{margin-bottom:20px}.bb-date-picker.error>.bb-date-picker-label{color:#c23934}.bb-date-picker.error .bb-form-control-container{border:1px solid #962b26;background-color:#c2393440!important;box-shadow:inset 0 3px #b7bcc233,0 6px 6px -6px #0000001a,0 0 0 3px #c2393466!important}.bb-date-picker-label{color:#000;display:block;font-size:16px;font-weight:500;margin-bottom:4px}.bb-date-picker-container{display:flex}.bb-date-picker-item{flex:1}.bb-date-picker-item>bb-form-control.focused{z-index:1;position:relative}.bb-date-picker-item>.bb-form-control>.bb-form-control-container>select>option:first-child{color:#d2d2d2}.bb-date-picker-item>.bb-form-control>.bb-form-control-container>select:not(.has-value){color:#d2d2d2}.bb-date-picker-item>.bb-form-control>.bb-form-control-container>select:not(.has-value)>option:not(:first-child){color:#000}.bb-date-picker-item:not(:first-child):not(:last-child) .bb-form-control-container{border-radius:0!important}.bb-date-picker-item:first-child .bb-form-control-container{border-right:none!important;border-top-right-radius:0!important;border-bottom-right-radius:0!important}.bb-date-picker-item:last-child .bb-form-control-container{border-left:none!important;border-top-left-radius:0!important;border-bottom-left-radius:0!important}.bb-date-picker-hint{display:block;color:#738694;font-size:13px;margin-top:4px;pointer-events:all}\n"] }]
287
- }], ctorParameters: function () { return [{ type: i8.Observable, decorators: [{
288
- type: Inject,
289
- args: [LOCALIZE_ID]
290
- }] }]; }, propDecorators: { label: [{
291
- type: Input
292
- }], hint: [{
293
- type: Input
294
- }], dayPlaceholder: [{
295
- type: Input
296
- }], monthPlaceholder: [{
297
- type: Input
298
- }], yearPlaceholder: [{
299
- type: Input
300
- }], years: [{
301
- type: Input
302
- }], value: [{
303
- type: Input
304
- }], valueChange: [{
305
- type: Output
306
- }] } });
307
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmItZm91bmRhdGlvbi9lbGVtZW50cy9zcmMvbGliL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JiLWZvdW5kYXRpb24vZWxlbWVudHMvc3JjL2xpYi9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBYUgsYUFBYSxFQUNiLFVBQVUsRUFDVixZQUFZLEVBQ1osZUFBZSxFQUNmLGFBQWEsRUFDYixhQUFhLEVBQ2hCLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUdMLE1BQU0sRUFFTixpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVILFdBQVcsRUFDWCxTQUFTLEVBQ1QsYUFBYSxFQUNiLGlCQUFpQixFQUNqQixVQUFVLEVBQ2IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBYyxZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDOUUsT0FBTyxFQUFDLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQzdELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7Ozs7OztBQUUzQyxNQUFNLGdCQUFnQjtDQUNyQjtBQUVELE1BQU0scUJBQXFCLEdBT3JCLGFBQWEsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLFlB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QUM5QixrQkFBa0IsRUFBRSxVQUFVO3dCQUM5QixrQkFBa0IsRUFBRSxVQUFVO3dCQUM5QixpQkFBaUIsRUFBRSxTQUFTO3dCQUM1QixlQUFlLEVBQUUsT0FBTztxQkFDM0IsVUFDTyxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxZQUFZLENBQUMsdUJBQ2hELEtBQUs7OzBCQThDYixNQUFNOzJCQUFDLFdBQVc7NENBdEN0QixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBR0YsS0FBSztzQkFEUixLQUFLO2dCQXNCRixLQUFLO3NCQURSLEtBQUs7Z0JBTUksV0FBVztzQkFBcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2FuRGlzYWJsZSxcbiAgICBDYW5EaXNhYmxlQ29uc3RydWN0b3IsXG4gICAgQ2FuSGlkZUVycm9ycyxcbiAgICBDYW5IaWRlRXJyb3JzQ29uc3RydWN0b3IsXG4gICAgSGFzRXJyb3IsXG4gICAgSGFzRXJyb3JDb25zdHJ1Y3RvcixcbiAgICBJc0dyb3VwZWQsXG4gICAgSXNHcm91cGVkQ29uc3RydWN0b3IsXG4gICAgSXNSZWFkb25seSxcbiAgICBJc1JlYWRvbmx5Q29uc3RydWN0b3IsXG4gICAgSXNSZXF1aXJlZCxcbiAgICBJc1JlcXVpcmVkQ29uc3RydWN0b3IsXG4gICAgbWl4aW5EaXNhYmxlZCxcbiAgICBtaXhpbkVycm9yLFxuICAgIG1peGluR3JvdXBlZCxcbiAgICBtaXhpbkhpZGVFcnJvcnMsXG4gICAgbWl4aW5SZWFkb25seSxcbiAgICBtaXhpblJlcXVpcmVkXG59IGZyb20gJ0BicmF2b2JpdC9iYi1mb3VuZGF0aW9uJztcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gICAgRm9ybUNvbnRyb2wsXG4gICAgRm9ybUdyb3VwLFxuICAgIE5HX1ZBTElEQVRPUlMsXG4gICAgTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgVmFsaWRhdG9yc1xufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgc3RhcnRXaXRoLCB0YXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7TE9DQUxJWkVfSUR9IGZyb20gJ0BicmF2b2JpdC9iYi1mb3VuZGF0aW9uL2xvY2FsaXplJztcbmltcG9ydCB7Zm9ybWF0RGF0ZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuY2xhc3MgQmJEYXRlUGlja2VyQmFzZSB7XG59XG5cbmNvbnN0IEJiRmlsZVBpY2tlck1peGluQmFzZTogSXNSZXF1aXJlZENvbnN0cnVjdG9yXG4gICAgJiBJc1JlYWRvbmx5Q29uc3RydWN0b3JcbiAgICAmIENhbkRpc2FibGVDb25zdHJ1Y3RvclxuICAgICYgSXNHcm91cGVkQ29uc3RydWN0b3JcbiAgICAmIEhhc0Vycm9yQ29uc3RydWN0b3JcbiAgICAmIENhbkhpZGVFcnJvcnNDb25zdHJ1Y3RvclxuICAgICYgdHlwZW9mIEJiRGF0ZVBpY2tlckJhc2VcbiAgICA9IG1peGluUmVxdWlyZWQobWl4aW5SZWFkb25seShtaXhpbkRpc2FibGVkKG1peGluR3JvdXBlZChtaXhpbkVycm9yKG1peGluSGlkZUVycm9ycyhCYkRhdGVQaWNrZXJCYXNlKSkpKSkpO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2JiLWRhdGUtcGlja2VyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZGF0ZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2RhdGUtcGlja2VyLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBCYkRhdGVQaWNrZXIpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBCYkRhdGVQaWNrZXIsXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9XG4gICAgXSxcbiAgICBob3N0OiB7XG4gICAgICAgICdjbGFzcyc6ICdiYi1kYXRlLXBpY2tlcicsXG4gICAgICAgICdbY2xhc3MucmVxdWlyZWRdJzogJ3JlcXVpcmVkJyxcbiAgICAgICAgJ1tjbGFzcy5yZWFkb25seV0nOiAncmVhZG9ubHknLFxuICAgICAgICAnW2NsYXNzLmRpc2FibGVkXSc6ICdkaXNhYmxlZCcsXG4gICAgICAgICdbY2xhc3MuZ3JvdXBlZF0nOiAnZ3JvdXBlZCcsXG4gICAgICAgICdbY2xhc3MuZXJyb3JdJzogJ2Vycm9yJ1xuICAgIH0sXG4gICAgaW5wdXRzOiBbJ3JlcXVpcmVkJywgJ3JlYWRvbmx5JywgJ2Rpc2FibGVkJywgJ2dyb3VwZWQnLCAnaGlkZUVycm9ycyddLFxuICAgIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlXG59KVxuZXhwb3J0IGNsYXNzIEJiRGF0ZVBpY2tlciBleHRlbmRzIEJiRmlsZVBpY2tlck1peGluQmFzZSBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkluaXQsIE9uRGVzdHJveSwgSXNSZXF1aXJlZCwgSXNSZWFkb25seSwgQ2FuRGlzYWJsZSwgSXNHcm91cGVkLCBIYXNFcnJvciwgQ2FuSGlkZUVycm9ycyB7XG5cbiAgICAvLyBSZWFkb25seSBkYXRhLlxuICAgIHJlYWRvbmx5IF95ZWFyUmVnZXggPSAvXigxMHxbMS05XVswLTldKVxcZHsyfSQvOyAvLyBOb3RlOiAxMDAwIC0gOTk5OVxuXG4gICAgLy8gSW5wdXRzLlxuICAgIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCA9IG51bGw7XG4gICAgQElucHV0KCkgaGludDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PiB8IG51bGwgPSBudWxsO1xuICAgIEBJbnB1dCgpIGRheVBsYWNlaG9sZGVyOiBzdHJpbmcgfCBudWxsID0gJ2RkJztcbiAgICBASW5wdXQoKSBtb250aFBsYWNlaG9sZGVyOiBzdHJpbmcgfCBudWxsID0gJ21tJztcbiAgICBASW5wdXQoKSB5ZWFyUGxhY2Vob2xkZXI6IHN0cmluZyB8IG51bGwgPSAneXl5eSc7XG5cbiAgICBASW5wdXQoKVxuICAgIHNldCB5ZWFycyh2YWx1ZTogW3N0cmluZyB8IG51bWJlciwgc3RyaW5nIHwgbnVtYmVyXSB8IG51bGwpIHtcbiAgICAgICAgdGhpcy5wYXJzZVllYXJzKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBGb3Jtcy5cbiAgICBmb3JtOiBGb3JtR3JvdXA7XG4gICAgdHJhY2tCeVZhbHVlID0gKF8sIGl0ZW0pID0+IGl0ZW0/LnZhbHVlO1xuXG4gICAgLy8gRGF0YS5cbiAgICBkYXRhJDogT2JzZXJ2YWJsZTx7XG4gICAgICAgIGRheXM/OiB7IGxhYmVsOiBzdHJpbmcsIHZhbHVlOiBudW1iZXIgfVtdLFxuICAgICAgICBtb250aHM/OiB7IGxhYmVsOiBzdHJpbmcsIHZhbHVlOiBudW1iZXIgfVtdLFxuICAgICAgICB5ZWFycz86IG51bWJlcltdIHwgbnVsbFxuICAgIH0+O1xuICAgIHllYXJzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyW10gfCBudWxsPihudWxsKTtcblxuICAgIGdldCB2YWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybVRvRGF0ZVN0cmluZyh0aGlzLmZvcm0/LnZhbHVlKTtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIHNldCB2YWx1ZSh2YWx1ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgICAgICB0aGlzLnBhcnNlRGF0ZVN0cmluZ0luRm9ybSh2YWx1ZSk7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcbiAgICB9XG5cbiAgICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZyB8IG51bGw+KCk7XG5cbiAgICAvLyBTdWJzY3JpcHRpb25zLlxuICAgIHByaXZhdGUgX3N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoTE9DQUxJWkVfSUQpIHByaXZhdGUgX2xvY2FsaXplSWQ6IE9ic2VydmFibGU8c3RyaW5nPikge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmNvbXBvc2VGb3JtKCk7XG4gICAgICAgIHRoaXMuZ2V0RGF0YSgpO1xuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHdyaXRlVmFsdWUodmFsdWU6IHN0cmluZyB8IG51bGwpIHtcbiAgICAgICAgdGhpcy5wYXJzZURhdGVTdHJpbmdJbkZvcm0odmFsdWUpO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyT25DaGFuZ2UobWV0aG9kOiAoXzogc3RyaW5nIHwgbnVsbCkgPT4gdm9pZCkge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sgPSBtZXRob2Q7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQobWV0aG9kOiAoKSA9PiB2b2lkKSB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkQ2FsbGJhY2sgPSBtZXRob2Q7XG4gICAgfVxuXG4gICAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuXG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm0/LmRpc2FibGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybT8uZW5hYmxlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblRvdWNoZWRDYWxsYmFjazogKCkgPT4gdm9pZCA9ICgpID0+IHtcbiAgICB9O1xuXG4gICAgb25DaGFuZ2VDYWxsYmFjazogKF86IHN0cmluZyB8IG51bGwpID0+IHZvaWQgPSAoKSA9PiB7XG4gICAgfTtcblxuICAgIG9uRXJyb3JDaGFuZ2UoZXJyb3I6IHsgdG9rZW46IHN0cmluZywgZGF0YT86IGFueSB9IHwgbnVsbCkge1xuICAgICAgICB0aGlzLmVycm9yID0gISFlcnJvcjtcbiAgICB9XG5cbiAgICB2YWxpZGF0ZSh7dmFsdWV9OiBGb3JtQ29udHJvbDxzdHJpbmc+KSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLnBhcnNlRGF0ZVN0cmluZyh2YWx1ZSk7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShkYXRhPy55ZWFyLCBkYXRhPy5tb250aCAtIDEsIGRhdGE/LmRheSk7XG5cbiAgICAgICAgY29uc3QgbWF4RGF5cyA9IHRoaXMuZ2V0RGF5c0luTW9udGgoZGF0YT8ubW9udGgsIGAke2RhdGE/LnllYXJ9YCk7XG5cbiAgICAgICAgY29uc3QgaXNJbnZhbGlkRGF0ZSA9IGRhdGUudG9TdHJpbmcoKSA9PT0gJ0ludmFsaWQgRGF0ZSc7XG4gICAgICAgIGNvbnN0IGV4Y2VlZGVkTWF4RGF5cyA9IGRhdGE/LmRheSA+IG1heERheXM7XG5cbiAgICAgICAgcmV0dXJuIChpc0ludmFsaWREYXRlIHx8IGV4Y2VlZGVkTWF4RGF5cykgJiYge1xuICAgICAgICAgICAgaW52YWxpZERhdGU6IHRydWVcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZUNoYW5nZXMoKSB7XG4gICAgICAgIGNvbnN0IGRhdGVPck51bGwkID0gdGhpcy5mb3JtLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgbWFwKHZhbHVlID0+IHRoaXMuZm9ybVRvRGF0ZVN0cmluZyh2YWx1ZSkpLFxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IGRhdGVPck51bGwkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sodGhpcy52YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKHN1YnNjcmlwdGlvbik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREYXRhKCkge1xuICAgICAgICBjb25zdCB5ZWFycyQgPSB0aGlzLnllYXJzJC5hc09ic2VydmFibGUoKTtcbiAgICAgICAgY29uc3QgbW9udGhzJCA9IHRoaXMuZ2V0TW9udGhEYXRhKCk7XG4gICAgICAgIGNvbnN0IGRheXMkID0gdGhpcy5nZXREYXlEYXRhKCk7XG5cbiAgICAgICAgdGhpcy5kYXRhJCA9IGNvbWJpbmVMYXRlc3QoW3llYXJzJCwgbW9udGhzJCwgZGF5cyRdKS5waXBlKFxuICAgICAgICAgICAgbWFwKChbeWVhcnMsIG1vbnRocywgZGF5c10pID0+ICh7eWVhcnMsIG1vbnRocywgZGF5c30pKSxcbiAgICAgICAgICAgIHRhcChkYXRhID0+IHRoaXMudmVyaWZ5TGlzdERhdGEoZGF0YT8uZGF5cz8ubGVuZ3RoLCBkYXRhPy55ZWFycykpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2ZXJpZnlMaXN0RGF0YShtYXhEYXlzOiBudW1iZXIsIHllYXJzOiBudW1iZXJbXSB8IG51bGwpIHtcbiAgICAgICAgY29uc3QgZGF5Q29udHJvbCA9IHRoaXMuZm9ybS5nZXQoJ2RheScpO1xuICAgICAgICBpZiAoZGF5Q29udHJvbD8udmFsdWUgIT09IG51bGwgJiYgZGF5Q29udHJvbD8udmFsdWUgPiBtYXhEYXlzKSB7XG4gICAgICAgICAgICBkYXlDb250cm9sLnBhdGNoVmFsdWUobWF4RGF5cyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB5ZWFyQ29udHJvbCA9IHRoaXMuZm9ybS5nZXQoJ3llYXInKTtcbiAgICAgICAgaWYgKHllYXJzICE9PSBudWxsICYmIHllYXJDb250cm9sPy52YWx1ZSAhPT0gbnVsbCAmJiB0aGlzLl95ZWFyUmVnZXgudGVzdCh5ZWFyQ29udHJvbD8udmFsdWUpKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZFllYXIgPSBOdW1iZXIoeWVhckNvbnRyb2w/LnZhbHVlKTtcblxuICAgICAgICAgICAgY29uc3QgZmlyc3RZZWFyID0gTWF0aC5taW4oLi4ueWVhcnMpO1xuICAgICAgICAgICAgY29uc3QgbGFzdFllYXIgPSBNYXRoLm1heCguLi55ZWFycyk7XG5cbiAgICAgICAgICAgIGlmIChzZWxlY3RlZFllYXIgPCBmaXJzdFllYXIgfHwgc2VsZWN0ZWRZZWFyID4gbGFzdFllYXIpIHtcbiAgICAgICAgICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHllYXJDb250cm9sLnBhdGNoVmFsdWUobnVsbCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREYXlEYXRhKCkge1xuICAgICAgICBjb25zdCBjb3VudCQgPSB0aGlzLmZvcm0udmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICBzdGFydFdpdGgodGhpcy5mb3JtPy52YWx1ZSBhcyBvYmplY3QpLFxuICAgICAgICAgICAgbWFwKCh7bW9udGgsIHllYXJ9KSA9PiB0aGlzLmdldERheXNJbk1vbnRoKG1vbnRoLCB5ZWFyKSksXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIGNvdW50JC5waXBlKFxuICAgICAgICAgICAgbWFwKGNvdW50ID0+IEFycmF5KGNvdW50KS5maWxsKDApLm1hcCgoXywgaW5kZXgpID0+ICh7XG4gICAgICAgICAgICAgICAgbGFiZWw6IGAke2luZGV4ICsgMX1gLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBpbmRleCArIDFcbiAgICAgICAgICAgIH0pKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE1vbnRoRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsaXplSWQucGlwZShcbiAgICAgICAgICAgIG1hcChsb2NhbGUgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBBcnJheSgxMikuZmlsbCgwKS5tYXAoKF8sIG1vbnRoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgyMDAwLCBtb250aCwgMSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gZm9ybWF0RGF0ZShkYXRlLCAnTExMTCcsIGxvY2FsZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7bGFiZWwsIHZhbHVlOiBtb250aCArIDF9O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbXBvc2VGb3JtKCkge1xuICAgICAgICBjb25zdCB7cmVxdWlyZWQsIHBhdHRlcm4sIG1pbkxlbmd0aCwgbWF4TGVuZ3RofSA9IFZhbGlkYXRvcnM7XG4gICAgICAgIGNvbnN0IHllYXJQYXR0ZXJuID0gcGF0dGVybih0aGlzLl95ZWFyUmVnZXgpO1xuICAgICAgICBjb25zdCB5ZWFyVmFsaWRhdG9ycyA9IFtyZXF1aXJlZCwgeWVhclBhdHRlcm4sIG1pbkxlbmd0aCg0KSwgbWF4TGVuZ3RoKDQpXTtcblxuICAgICAgICB0aGlzLmZvcm0gPSBuZXcgRm9ybUdyb3VwKHtcbiAgICAgICAgICAgIGRheTogbmV3IEZvcm1Db250cm9sPG51bWJlcj4obnVsbCwgcmVxdWlyZWQpLFxuICAgICAgICAgICAgbW9udGg6IG5ldyBGb3JtQ29udHJvbDxudW1iZXI+KG51bGwsIHJlcXVpcmVkKSxcbiAgICAgICAgICAgIHllYXI6IG5ldyBGb3JtQ29udHJvbDxudW1iZXI+KG51bGwsIHllYXJWYWxpZGF0b3JzKVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBhcnNlRGF0ZVN0cmluZ0luRm9ybSh2YWx1ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgICAgICAvLyBJZiB0aGUgZGF0ZSBzdHJpbmcgd2FzIG5vdCBhIHZhbGlkIGZvcm1hdCwgcmVzZXQgdGhlIGZvcm0uXG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkRGF0ZVN0cmluZyh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybT8ucmVzZXQoe3llYXI6IG51bGwsIG1vbnRoOiBudWxsLCBkYXk6IG51bGx9LCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUGFyc2UgdGhlIGRhdGUgc3RyaW5nIGFuZCBzYXZlIGluIHRoZSBmb3JtLlxuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5wYXJzZURhdGVTdHJpbmcodmFsdWUpO1xuICAgICAgICBjb25zdCB5ZWFyID0gZGF0YT8ueWVhciAhPT0gbnVsbCAmJiBkYXRhPy55ZWFyICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gdGhpcy5wYWRTdHJpbmcoYCR7ZGF0YT8ueWVhcn1gLCA0LCAnMCcpXG4gICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIGNvbnN0IGZvcm1EYXRhID0gey4uLihkYXRhID8/IHt9KSwgeWVhcn07XG5cbiAgICAgICAgdGhpcy5mb3JtPy5wYXRjaFZhbHVlKGZvcm1EYXRhLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGFyc2VEYXRlU3RyaW5nKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWREYXRlU3RyaW5nKHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQYXJzZSB0aGUgZGF0ZSBzdHJpbmcuXG4gICAgICAgIGNvbnN0IFt5ZWFyLCBtb250aCwgZGF5XSA9IHZhbHVlPy5zcGxpdCgnLScpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXk6IGRheSA/IHBhcnNlSW50KGRheSwgMTApIDogbnVsbCxcbiAgICAgICAgICAgIG1vbnRoOiBtb250aCA/IHBhcnNlSW50KG1vbnRoLCAxMCkgOiBudWxsLFxuICAgICAgICAgICAgeWVhcjogeWVhciA/IHBhcnNlSW50KHllYXIsIDEwKSA6IG51bGxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBhcnNlWWVhcnModmFsdWVzOiBbc3RyaW5nIHwgbnVtYmVyLCBzdHJpbmcgfCBudW1iZXJdIHwgbnVsbCkge1xuICAgICAgICBpZiAoIXZhbHVlcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMueWVhcnMkLm5leHQobnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQYXJzZSB0aGUgdmFsdWVzIHRvIHllYXJzIChpbiBudW1iZXJzKS5cbiAgICAgICAgY29uc3QgW2ZpcnN0LCBsYXN0XSA9IHZhbHVlcztcbiAgICAgICAgY29uc3QgZmlyc3RZZWFyID0gdGhpcy5wYXJzZVllYXJGb3JtYXQoZmlyc3QpO1xuICAgICAgICBjb25zdCBsYXN0WWVhciA9IHRoaXMucGFyc2VZZWFyRm9ybWF0KGxhc3QpO1xuXG4gICAgICAgIC8vIENoZWNrIGNhc2VzIGluIHdoZXJlIHdlIGNhbm5vdCBwYXJzZS5cbiAgICAgICAgaWYgKGZpcnN0WWVhciA9PT0gbnVsbCB8fCBsYXN0WWVhciA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMueWVhcnMkLm5leHQobnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkaWZmZXJlbmNlID0gZmlyc3RZZWFyIC0gbGFzdFllYXI7XG4gICAgICAgIGNvbnN0IGFic29sdXRlRGlmZmVyZW5jZSA9IE1hdGguYWJzKGRpZmZlcmVuY2UpICsgMTtcblxuICAgICAgICAvLyBDcmVhdGUgYW4gYXJyYXkgd2l0aCB5ZWFycy5cbiAgICAgICAgY29uc3QgeWVhcnMgPSBBcnJheShhYnNvbHV0ZURpZmZlcmVuY2UpXG4gICAgICAgICAgICAuZmlsbCgwKVxuICAgICAgICAgICAgLm1hcCgoXywgaW5kZXgpID0+IGRpZmZlcmVuY2UgPCAwID8gKGZpcnN0WWVhciArIGluZGV4KSA6IChmaXJzdFllYXIgLSBpbmRleCkpO1xuXG4gICAgICAgIC8vIFZhbGlkYXRlIHdlIGhhdmUgb25lIG9yIG1vcmUgeWVhcnMuXG4gICAgICAgIGlmICh5ZWFycz8ubGVuZ3RoIDw9IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnllYXJzJC5uZXh0KG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHVzaCB0aGUgeWVhcnMuXG4gICAgICAgIHJldHVybiB0aGlzLnllYXJzJC5uZXh0KHllYXJzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZvcm1Ub0RhdGVTdHJpbmcgPSAoe3llYXIsIG1vbnRoLCBkYXl9KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmZvcm0/LmludmFsaWQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcHJlZml4ZWRNb250aCA9IHRoaXMucGFkU3RyaW5nKGAke21vbnRofWAsIDIsICcwJyk7XG4gICAgICAgIGNvbnN0IHByZWZpeGVkRGF5ID0gdGhpcy5wYWRTdHJpbmcoYCR7ZGF5fWAsIDIsICcwJyk7XG5cbiAgICAgICAgcmV0dXJuIFt5ZWFyLCBwcmVmaXhlZE1vbnRoLCBwcmVmaXhlZERheV0uam9pbignLScpO1xuICAgIH07XG5cbiAgICBwcml2YXRlIHBhcnNlWWVhckZvcm1hdCA9ICh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG4gICAgICAgIC8vIFRyYW5zZm9ybSB0aGUgdmFsdWUgdG8gYSBkZWZpbml0aXZlIHN0cmluZy5cbiAgICAgICAgY29uc3QgeWVhclN0cmluZyA9IGAke3ZhbHVlfWA7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRGdWxsWWVhciA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcblxuICAgICAgICAvLyBIYW5kbGUgZGVmYXVsdCBcImN1cnJlbnRcIiBzeW50YXguXG4gICAgICAgIGlmICh5ZWFyU3RyaW5nID09PSAnY3VycmVudCcpIHtcbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50RnVsbFllYXI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBIYW5kbGUgXCJjdXJyZW50ICsge2Ftb3VudH1cIiBzeW50YXguXG4gICAgICAgIGlmICgvXmN1cnJlbnRcXHM/XFwrXFxzP1xcZCskLy50ZXN0KHllYXJTdHJpbmcpKSB7XG4gICAgICAgICAgICBjb25zdCBhbW91bnQgPSBOdW1iZXIoeWVhclN0cmluZz8uc3BsaXQoJysnKT8uWzFdPy50cmltKCkpID8/IDA7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudEZ1bGxZZWFyICsgYW1vdW50O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGFuZGxlIFwiY3VycmVudCAtIHthbW91bnR9XCIgc3ludGF4LlxuICAgICAgICBpZiAoL15jdXJyZW50XFxzPy1cXHM/XFxkKyQvLnRlc3QoeWVhclN0cmluZykpIHtcbiAgICAgICAgICAgIGNvbnN0IGFtb3VudCA9IE51bWJlcih5ZWFyU3RyaW5nPy5zcGxpdCgnLScpPy5bMV0/LnRyaW0oKSkgPz8gMDtcbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50RnVsbFllYXIgLSBhbW91bnQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBIYW5kbGluZyB0aGUgZGVmYXVsdCBudW1iZXIgY2FzZS5cbiAgICAgICAgaWYgKC9eWzAtOV17NH0kLy50ZXN0KHllYXJTdHJpbmcpKSB7XG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyKHllYXJTdHJpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gV2UgY291bGQgbm90IHBhcnNlIGl0LlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBnZXREYXlzSW5Nb250aCA9IChtb250aDogbnVtYmVyIHwgbnVsbCA9IG51bGwsIHllYXI6IHN0cmluZyB8IG51bGwgPSBudWxsKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmZvcm0/LmludmFsaWQgfHwgbW9udGggPT09IG51bGwgfHwgeWVhciA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIDMxO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyc2VkWWVhciA9IHBhcnNlSW50KHllYXIsIDEwKTtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHBhcnNlZFllYXIsIG1vbnRoLCAwKS5nZXREYXRlKCk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgaXNWYWxpZERhdGVTdHJpbmcgPSAodmFsdWU6IHVua25vd24pID0+IHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgL15bMC05XXs0fS1bMC05XXsyfS1bMC05XXsyfSQvLnRlc3QodmFsdWUpO1xuICAgIH07XG5cbiAgICBwcml2YXRlIHBhZFN0cmluZyA9ICh2YWx1ZTogc3RyaW5nLCBtYXhMZW5ndGg6IG51bWJlciwgZmlsbFN0cmluZzogc3RyaW5nID0gJzAnKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvdW50ID0gbWF4TGVuZ3RoIC0gdmFsdWUubGVuZ3RoO1xuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgY291bnQ7IGluZGV4KyspIHtcbiAgICAgICAgICAgIHZhbHVlID0gYCR7ZmlsbFN0cmluZ30ke3ZhbHVlfWA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfTtcblxufVxuIiwiPCEtLSBMYWJlbCBvZiB0aGUgZGF0ZSBwaWNrZXIuIC0tPlxuPGxhYmVsICpuZ0lmPVwibGFiZWwgYXMgbGFiZWxDb250ZW50XCJcbiAgICAgICBjbGFzcz1cImJiLWRhdGUtcGlja2VyLWxhYmVsXCI+XG4gICAgPG5nLXRlbXBsYXRlIFtiYlRlbXBsYXRlXT1cImxhYmVsQ29udGVudFwiPlxuICAgICAgICB7eyBsYWJlbENvbnRlbnQgfX1cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9sYWJlbD5cblxuPCEtLSBUaGUgZm9ybSBjb250YWluaW5nIHRoZSB5ZWFyL21vbnRoL2RheSBmaWVsZHMuIC0tPlxuPGZvcm0gKm5nSWY9XCJkYXRhJCB8IGFzeW5jIGFzIGRhdGFcIlxuICAgICAgW2Zvcm1Hcm91cF09XCJmb3JtXCJcbiAgICAgIGNsYXNzPVwiYmItZGF0ZS1waWNrZXItY29udGFpbmVyXCJcbiAgICAgIG5vdmFsaWRhdGU+XG4gICAgPGRpdiBjbGFzcz1cImJiLWRhdGUtcGlja2VyLWl0ZW1cIj5cbiAgICAgICAgPGJiLWZvcm0tY29udHJvbCBoaWRlRXJyb3JzPlxuICAgICAgICAgICAgPHNlbGVjdCBbY2xhc3MuaGFzLXZhbHVlXT1cIiEhZm9ybT8uZ2V0KCdkYXknKT8udmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICBiYklucHV0XG4gICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImRheVwiPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwibnVsbFwiPnt7IGRheVBsYWNlaG9sZGVyIH19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgZGF5IG9mIGRhdGE/LmRheXM7IHRyYWNrQnk6IHRyYWNrQnlWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdWYWx1ZV09XCJkYXk/LnZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGRheT8ubGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICA8L2JiLWZvcm0tY29udHJvbD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiYmItZGF0ZS1waWNrZXItaXRlbVwiPlxuICAgICAgICA8YmItZm9ybS1jb250cm9sIGhpZGVFcnJvcnM+XG4gICAgICAgICAgICA8c2VsZWN0IFtjbGFzcy5oYXMtdmFsdWVdPVwiISFmb3JtPy5nZXQoJ21vbnRoJyk/LnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgYmJJbnB1dFxuICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJtb250aFwiPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwibnVsbFwiPnt7IG1vbnRoUGxhY2Vob2xkZXIgfX08L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBtb250aCBvZiBkYXRhPy5tb250aHM7IHRyYWNrQnk6IHRyYWNrQnlWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdWYWx1ZV09XCJtb250aD8udmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgbW9udGg/LmxhYmVsIH19XG4gICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgPC9iYi1mb3JtLWNvbnRyb2w+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImJiLWRhdGUtcGlja2VyLWl0ZW1cIj5cbiAgICAgICAgPGJiLWZvcm0tY29udHJvbCBoaWRlRXJyb3JzPlxuICAgICAgICAgICAgPHNlbGVjdCAqbmdJZj1cImRhdGE/LnllYXJzPy5sZW5ndGggPiAwOyBlbHNlIGRlZmF1bHRZZWFySW5wdXRUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5oYXMtdmFsdWVdPVwiISFmb3JtPy5nZXQoJ3llYXInKT8udmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICBiYklucHV0XG4gICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInllYXJcIj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cIm51bGxcIj57eyB5ZWFyUGxhY2Vob2xkZXIgfX08L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCB5ZWFyIG9mIGRhdGE/LnllYXJzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ5ZWFyXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IHllYXIgfX1cbiAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRZZWFySW5wdXRUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8aW5wdXQgW3BsYWNlaG9sZGVyXT1cInllYXJQbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgIGJiSW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICBpbnB1dG1vZGU9XCJudW1lcmljXCJcbiAgICAgICAgICAgICAgICAgICAgICAgbWlubGVuZ3RoPVwiNFwiXG4gICAgICAgICAgICAgICAgICAgICAgIG1heGxlbmd0aD1cIjRcIlxuICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPVwiXlswLTldezR9JFwiXG4gICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInllYXJcIlxuICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvYmItZm9ybS1jb250cm9sPlxuICAgIDwvZGl2PlxuPC9mb3JtPlxuXG48IS0tIFRoZSBkYXRlIHBpY2tlciBlcnJvci4gLS0+XG48YmItZm9ybS1lcnJvciAqbmdJZj1cIiFoaWRlRXJyb3JzXCJcbiAgICAgICAgICAgICAgIChlcnJvckNoYW5nZSk9XCJvbkVycm9yQ2hhbmdlKCRldmVudClcIj5cbjwvYmItZm9ybS1lcnJvcj5cblxuPCEtLSBUaGUgZGF0ZSBwaWNrZXIgaGludC4gLS0+XG48cCAqbmdJZj1cImhpbnQgYXMgaGludENvbnRlbnRcIlxuICAgY2xhc3M9XCJiYi1kYXRlLXBpY2tlci1oaW50XCI+XG4gICAgPG5nLXRlbXBsYXRlIFtiYlRlbXBsYXRlXT1cImhpbnRDb250ZW50XCI+XG4gICAgICAgIHt7IGhpbnRDb250ZW50IH19XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvcD5cbiJdfQ==
@@ -1,100 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, Directive, Host, HostListener, Input, Optional, ViewEncapsulation } from '@angular/core';
2
- import { animate, style, transition, trigger } from '@angular/animations';
3
- import { BehaviorSubject } from 'rxjs';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@angular/common";
6
- export class BbDropdown {
7
- constructor(_elementRef) {
8
- this._elementRef = _elementRef;
9
- // State.
10
- this.visible$ = new BehaviorSubject(false);
11
- }
12
- toggle() {
13
- return this.visible$.next(!this.visible$.getValue());
14
- }
15
- close() {
16
- return this.visible$.next(false);
17
- }
18
- onDocumentClick(target) {
19
- if (!target) {
20
- return;
21
- }
22
- if (this._elementRef?.nativeElement?.contains(target)) {
23
- return;
24
- }
25
- return this.close();
26
- }
27
- }
28
- BbDropdown.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: BbDropdown, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
29
- BbDropdown.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: BbDropdown, selector: "bb-dropdown", host: { listeners: { "document:click": "onDocumentClick($event.target)" }, classAttribute: "bb-dropdown" }, ngImport: i0, template: "<button (click)=\"toggle()\"\n [class.opened]=\"visible$ | async\"\n type=\"button\">\n <ng-content></ng-content>\n</button>\n\n<div *ngIf=\"visible$ | async\"\n [@dropdownMenuAnimation]=\"true\"\n class=\"bb-dropdown-menu\"\n role=\"list\">\n <ng-content select=\"[bbDropdownItem], hr\"></ng-content>\n</div>\n", styles: [".bb-dropdown{position:relative;display:inline-block}.bb-dropdown.right>.bb-dropdown-menu{right:0;left:auto;transform-origin:top right}.bb-dropdown-menu{left:0;top:100%;padding:0;z-index:10;display:block;margin:10px 0 0;border-radius:4px;position:absolute;list-style-type:none;background-color:#fff;border:1px solid #cccccc;transform-origin:top left;box-shadow:0 0 6px #0000001a}.bb-dropdown-menu:after{width:0;top:-5px;height:0;right:5px;content:\"\";position:absolute;border-style:solid;border-width:0 10px 5px 10px;border-color:transparent transparent #d9d9d9 transparent}.bb-dropdown-menu>hr{margin:0;height:1px;border:none;background-color:#ccc}.bb-dropdown-item{width:100%;border:none;line-height:1;display:block;cursor:pointer;text-align:left;font-weight:500;-webkit-user-select:none;user-select:none;padding:12px 20px;white-space:nowrap;text-decoration:none;color:#676767!important;background-color:transparent;transition:background-color .25s cubic-bezier(0,0,.2,1)}.bb-dropdown-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.bb-dropdown-item:hover{background-color:#f6f6f6}.bb-dropdown-item:focus{box-shadow:0 0 0 3px #dce0e980}.bb-dropdown-item:active{background-color:#f0f0f0}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], animations: [
30
- trigger('dropdownMenuAnimation', [
31
- transition(':enter', [
32
- // 1. Set the initial state.
33
- style({ opacity: 0, transform: 'scale(0.9)' }),
34
- // 2. Start the animation to show the item.
35
- animate('80ms cubic-bezier(0, 0, .2, 1)', style({ opacity: 1, transform: 'scale(1)' }))
36
- ]),
37
- transition(':leave', [
38
- // 1. Set the initial state.
39
- style({ opacity: 1, transform: 'scale(1)' }),
40
- // 2. Start the animation to hide the item.
41
- animate('80ms cubic-bezier(0, 0, .2, 1)', style({ opacity: 0, transform: 'scale(0.9)' }))
42
- ])
43
- ])
44
- ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
45
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: BbDropdown, decorators: [{
46
- type: Component,
47
- args: [{ selector: 'bb-dropdown', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: { 'class': 'bb-dropdown' }, preserveWhitespaces: false, animations: [
48
- trigger('dropdownMenuAnimation', [
49
- transition(':enter', [
50
- // 1. Set the initial state.
51
- style({ opacity: 0, transform: 'scale(0.9)' }),
52
- // 2. Start the animation to show the item.
53
- animate('80ms cubic-bezier(0, 0, .2, 1)', style({ opacity: 1, transform: 'scale(1)' }))
54
- ]),
55
- transition(':leave', [
56
- // 1. Set the initial state.
57
- style({ opacity: 1, transform: 'scale(1)' }),
58
- // 2. Start the animation to hide the item.
59
- animate('80ms cubic-bezier(0, 0, .2, 1)', style({ opacity: 0, transform: 'scale(0.9)' }))
60
- ])
61
- ])
62
- ], template: "<button (click)=\"toggle()\"\n [class.opened]=\"visible$ | async\"\n type=\"button\">\n <ng-content></ng-content>\n</button>\n\n<div *ngIf=\"visible$ | async\"\n [@dropdownMenuAnimation]=\"true\"\n class=\"bb-dropdown-menu\"\n role=\"list\">\n <ng-content select=\"[bbDropdownItem], hr\"></ng-content>\n</div>\n", styles: [".bb-dropdown{position:relative;display:inline-block}.bb-dropdown.right>.bb-dropdown-menu{right:0;left:auto;transform-origin:top right}.bb-dropdown-menu{left:0;top:100%;padding:0;z-index:10;display:block;margin:10px 0 0;border-radius:4px;position:absolute;list-style-type:none;background-color:#fff;border:1px solid #cccccc;transform-origin:top left;box-shadow:0 0 6px #0000001a}.bb-dropdown-menu:after{width:0;top:-5px;height:0;right:5px;content:\"\";position:absolute;border-style:solid;border-width:0 10px 5px 10px;border-color:transparent transparent #d9d9d9 transparent}.bb-dropdown-menu>hr{margin:0;height:1px;border:none;background-color:#ccc}.bb-dropdown-item{width:100%;border:none;line-height:1;display:block;cursor:pointer;text-align:left;font-weight:500;-webkit-user-select:none;user-select:none;padding:12px 20px;white-space:nowrap;text-decoration:none;color:#676767!important;background-color:transparent;transition:background-color .25s cubic-bezier(0,0,.2,1)}.bb-dropdown-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.bb-dropdown-item:hover{background-color:#f6f6f6}.bb-dropdown-item:focus{box-shadow:0 0 0 3px #dce0e980}.bb-dropdown-item:active{background-color:#f0f0f0}\n"] }]
63
- }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { onDocumentClick: [{
64
- type: HostListener,
65
- args: ['document:click', ['$event.target']]
66
- }] } });
67
- export class BbDropdownItem {
68
- constructor(_parent) {
69
- this._parent = _parent;
70
- // Inputs.
71
- this.closeOnClick = true;
72
- }
73
- onClick() {
74
- if (!this.closeOnClick) {
75
- return;
76
- }
77
- this._parent?.close();
78
- }
79
- }
80
- BbDropdownItem.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: BbDropdownItem, deps: [{ token: BbDropdown, host: true, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
81
- BbDropdownItem.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.8", type: BbDropdownItem, selector: "[bbDropdownItem]", inputs: { closeOnClick: "closeOnClick" }, host: { listeners: { "click": "onClick()" }, classAttribute: "bb-dropdown-item" }, ngImport: i0 });
82
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: BbDropdownItem, decorators: [{
83
- type: Directive,
84
- args: [{
85
- selector: '[bbDropdownItem]',
86
- host: {
87
- 'class': 'bb-dropdown-item'
88
- }
89
- }]
90
- }], ctorParameters: function () { return [{ type: BbDropdown, decorators: [{
91
- type: Optional
92
- }, {
93
- type: Host
94
- }] }]; }, propDecorators: { closeOnClick: [{
95
- type: Input
96
- }], onClick: [{
97
- type: HostListener,
98
- args: ['click']
99
- }] } });
100
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmItZm91bmRhdGlvbi9lbGVtZW50cy9zcmMvbGliL2Ryb3Bkb3duL2Ryb3Bkb3duLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JiLWZvdW5kYXRpb24vZWxlbWVudHMvc3JjL2xpYi9kcm9wZG93bi9kcm9wZG93bi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxTQUFTLEVBRVQsSUFBSSxFQUNKLFlBQVksRUFDWixLQUFLLEVBQ0wsUUFBUSxFQUNSLGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDeEUsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLE1BQU0sQ0FBQzs7O0FBNEJyQyxNQUFNLE9BQU8sVUFBVTtJQUtuQixZQUFvQixXQUF1QjtRQUF2QixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUgzQyxTQUFTO1FBQ1QsYUFBUSxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBRy9DLENBQUM7SUFFRCxNQUFNO1FBQ0YsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsS0FBSztRQUNELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUdELGVBQWUsQ0FBQyxNQUFtQjtRQUMvQixJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTztTQUNWO1FBRUQsSUFBSSxJ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b3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgRGlyZWN0aXZlLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSG9zdCxcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5wdXQsXG4gICAgT3B0aW9uYWwsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge2FuaW1hdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0fSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdiYi1kcm9wZG93bicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2Ryb3Bkb3duLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9kcm9wZG93bi5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgaG9zdDogeydjbGFzcyc6ICdiYi1kcm9wZG93bid9LFxuICAgIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlLFxuICAgIGFuaW1hdGlvbnM6IFtcbiAgICAgICAgdHJpZ2dlcignZHJvcGRvd25NZW51QW5pbWF0aW9uJywgW1xuICAgICAgICAgICAgdHJhbnNpdGlvbignOmVudGVyJywgW1xuICAgICAgICAgICAgICAgIC8vIDEuIFNldCB0aGUgaW5pdGlhbCBzdGF0ZS5cbiAgICAgICAgICAgICAgICBzdHlsZSh7b3BhY2l0eTogMCwgdHJhbnNmb3JtOiAnc2NhbGUoMC45KSd9KSxcbiAgICAgICAgICAgICAgICAvLyAyLiBTdGFydCB0aGUgYW5pbWF0aW9uIHRvIHNob3cgdGhlIGl0ZW0uXG4gICAgICAgICAgICAgICAgYW5pbWF0ZSgnODBtcyBjdWJpYy1iZXppZXIoMCwgMCwgLjIsIDEpJywgc3R5bGUoe29wYWNpdHk6IDEsIHRyYW5zZm9ybTogJ3NjYWxlKDEpJ30pKVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCc6bGVhdmUnLCBbXG4gICAgICAgICAgICAgICAgLy8gMS4gU2V0IHRoZSBpbml0aWFsIHN0YXRlLlxuICAgICAgICAgICAgICAgIHN0eWxlKHtvcGFjaXR5OiAxLCB0cmFuc2Zvcm06ICdzY2FsZSgxKSd9KSxcbiAgICAgICAgICAgICAgICAvLyAyLiBTdGFydCB0aGUgYW5pbWF0aW9uIHRvIGhpZGUgdGhlIGl0ZW0uXG4gICAgICAgICAgICAgICAgYW5pbWF0ZSgnODBtcyBjdWJpYy1iZXppZXIoMCwgMCwgLjIsIDEpJywgc3R5bGUoe29wYWNpdHk6IDAsIHRyYW5zZm9ybTogJ3NjYWxlKDAuOSknfSkpXG4gICAgICAgICAgICBdKVxuICAgICAgICBdKVxuICAgIF1cblxufSlcbmV4cG9ydCBjbGFzcyBCYkRyb3Bkb3duIHtcblxuICAgIC8vIFN0YXRlLlxuICAgIHZpc2libGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7XG4gICAgfVxuXG4gICAgdG9nZ2xlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52aXNpYmxlJC5uZXh0KCF0aGlzLnZpc2libGUkLmdldFZhbHVlKCkpO1xuICAgIH1cblxuICAgIGNsb3NlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52aXNpYmxlJC5uZXh0KGZhbHNlKTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50LnRhcmdldCddKVxuICAgIG9uRG9jdW1lbnRDbGljayh0YXJnZXQ6IEhUTUxFbGVtZW50KSB7XG4gICAgICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudD8uY29udGFpbnModGFyZ2V0KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuY2xvc2UoKTtcbiAgICB9XG5cbn1cblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbYmJEcm9wZG93bkl0ZW1dJyxcbiAgICBob3N0OiB7XG4gICAgICAgICdjbGFzcyc6ICdiYi1kcm9wZG93bi1pdGVtJ1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgQmJEcm9wZG93bkl0ZW0ge1xuXG4gICAgLy8gSW5wdXRzLlxuICAgIEBJbnB1dCgpIGNsb3NlT25DbGljazogYm9vbGVhbiA9IHRydWU7XG5cbiAgICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBASG9zdCgpIHByaXZhdGUgX3BhcmVudD86IEJiRHJvcGRvd24pIHtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdjbGljaycpXG4gICAgb25DbGljaygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlT25DbGljaykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcGFyZW50Py5jbG9zZSgpO1xuICAgIH1cblxufVxuIiwiPGJ1dHRvbiAoY2xpY2spPVwidG9nZ2xlKClcIlxuICAgICAgICBbY2xhc3Mub3BlbmVkXT1cInZpc2libGUkIHwgYXN5bmNcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCI+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9idXR0b24+XG5cbjxkaXYgKm5nSWY9XCJ2aXNpYmxlJCB8IGFzeW5jXCJcbiAgICAgW0Bkcm9wZG93bk1lbnVBbmltYXRpb25dPVwidHJ1ZVwiXG4gICAgIGNsYXNzPVwiYmItZHJvcGRvd24tbWVudVwiXG4gICAgIHJvbGU9XCJsaXN0XCI+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2JiRHJvcGRvd25JdGVtXSwgaHJcIj48L25nLWNvbnRlbnQ+XG48L2Rpdj5cbiJdfQ==