homebridge-eufy-security 2.1.2 → 2.1.3

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 (351) hide show
  1. package/.angular/cache/13.3.8/angular-webpack/5c469ae2ec9b3e3444d34d56e7c70f3aa2560d00/0.pack +0 -0
  2. package/.angular/cache/13.3.8/angular-webpack/5c469ae2ec9b3e3444d34d56e7c70f3aa2560d00/index.pack +0 -0
  3. package/.angular/cache/13.3.8/babel-webpack/002b767f336bba4a19522b7001fdc9b0.json +1 -0
  4. package/.angular/cache/13.3.8/babel-webpack/01030dc9cf6ace516c5e21a11a51e514.json +1 -0
  5. package/.angular/cache/13.3.8/babel-webpack/016384ad7d62e5dbc2ee70c28b77bd33.json +1 -0
  6. package/.angular/cache/13.3.8/babel-webpack/031cd7cdf7943a415e924a9bd8128beb.json +1 -0
  7. package/.angular/cache/13.3.8/babel-webpack/052db9656c92d22373c12ebe3e254dd4.json +1 -0
  8. package/.angular/cache/13.3.8/babel-webpack/0531356196812f38430f56879f62470e.json +1 -0
  9. package/.angular/cache/13.3.8/babel-webpack/05725b64be0203c8d738c859f49ff405.json +1 -0
  10. package/.angular/cache/13.3.8/babel-webpack/062f6b5564c03c877d5ca52593b3b84b.json +1 -0
  11. package/.angular/cache/13.3.8/babel-webpack/065481f4d76a32e7e22e45cbaaf7825f.json +1 -0
  12. package/.angular/cache/13.3.8/babel-webpack/0666a98d8aab522670ce30753fd2f458.json +1 -0
  13. package/.angular/cache/13.3.8/babel-webpack/06dae47ab777cda8f0450790afc70025.json +1 -0
  14. package/.angular/cache/13.3.8/babel-webpack/07327b5d1e655671ee9b925dd372d49b.json +1 -0
  15. package/.angular/cache/13.3.8/babel-webpack/08004e90d212fca2a295493a98f3ba77.json +1 -0
  16. package/.angular/cache/13.3.8/babel-webpack/08774f00ef3c205e99175c2b9da49f2b.json +1 -0
  17. package/.angular/cache/13.3.8/babel-webpack/0af00780c4947ca8fd33e0b65cb5ea72.json +1 -0
  18. package/.angular/cache/13.3.8/babel-webpack/0af971038ef69574cca173d8fe2103ec.json +1 -0
  19. package/.angular/cache/13.3.8/babel-webpack/0b0b779faf1c39010031922b0e26ea0e.json +1 -0
  20. package/.angular/cache/13.3.8/babel-webpack/0cc5f5c0d0699ac0e44f99d1e88cd4c3.json +1 -0
  21. package/.angular/cache/13.3.8/babel-webpack/0ea0dd52ab9118e6d87a54ddc6b131ed.json +1 -0
  22. package/.angular/cache/13.3.8/babel-webpack/100429b5082c9f5b148d923f63be053b.json +1 -0
  23. package/.angular/cache/13.3.8/babel-webpack/10a1421cf7b46f7b3a45fb4d8219fe91.json +1 -0
  24. package/.angular/cache/13.3.8/babel-webpack/11e1f133849ff16a3097bdfe6fe5ee13.json +1 -0
  25. package/.angular/cache/13.3.8/babel-webpack/1270c1ff7a60022a1aa57342495267a1.json +1 -0
  26. package/.angular/cache/13.3.8/babel-webpack/132c8edfd0cd38acf02806ab58e8e342.json +1 -0
  27. package/.angular/cache/13.3.8/babel-webpack/13efa114bcdf71c8d1dd6e357fc96b38.json +1 -0
  28. package/.angular/cache/13.3.8/babel-webpack/14cc9c26f157ea0ed289c80aa16f84f4.json +1 -0
  29. package/.angular/cache/13.3.8/babel-webpack/153924e34aecb770553db2728af5931e.json +1 -0
  30. package/.angular/cache/13.3.8/babel-webpack/1550d75086d96874e41f3a9d370731f4.json +1 -0
  31. package/.angular/cache/13.3.8/babel-webpack/1a7f6499cefe53a91f2f8667d50cdbca.json +1 -0
  32. package/.angular/cache/13.3.8/babel-webpack/1a8288e5abb45e773ad1a85443bc5657.json +1 -0
  33. package/.angular/cache/13.3.8/babel-webpack/1b8dee5bab79ed93f24f0d6da8092510.json +1 -0
  34. package/.angular/cache/13.3.8/babel-webpack/1bd605fdf506ed9a0ff60978ef2df4b9.json +1 -0
  35. package/.angular/cache/13.3.8/babel-webpack/1bf109ad03caa833e13e667c1d9f2e47.json +1 -0
  36. package/.angular/cache/13.3.8/babel-webpack/1c9227ff67ce23ac82a282e3fb06c095.json +1 -0
  37. package/.angular/cache/13.3.8/babel-webpack/1cfe39783d86ba5c07e5614b1ec404f7.json +1 -0
  38. package/.angular/cache/13.3.8/babel-webpack/1dbc0980fd50e2f2fafa29f1763d1fe1.json +1 -0
  39. package/.angular/cache/13.3.8/babel-webpack/1dfb517adcaf071e8bd2ab77a28b1d35.json +1 -0
  40. package/.angular/cache/13.3.8/babel-webpack/2280aeda8abc7b63f49942444aec136f.json +1 -0
  41. package/.angular/cache/13.3.8/babel-webpack/23ff81c6e504d78e456e195f76a3621b.json +1 -0
  42. package/.angular/cache/13.3.8/babel-webpack/2532da45d53ab9d70eb682a31552950b.json +1 -0
  43. package/.angular/cache/13.3.8/babel-webpack/25647909666a00be07bf38169e041be2.json +1 -0
  44. package/.angular/cache/13.3.8/babel-webpack/258ce5624159326d68ae8aee3732119b.json +1 -0
  45. package/.angular/cache/13.3.8/babel-webpack/25cc498a9011bfe34a0c1febeae89e16.json +1 -0
  46. package/.angular/cache/13.3.8/babel-webpack/261a759a77de28fa767c29524940d6cc.json +1 -0
  47. package/.angular/cache/13.3.8/babel-webpack/26269fd9cae4fe30738831979db08c38.json +1 -0
  48. package/.angular/cache/13.3.8/babel-webpack/270221a53faa5e3c9061a0e8af50bb86.json +1 -0
  49. package/.angular/cache/13.3.8/babel-webpack/27d4bf45f79956b092b163ad19cf9e89.json +1 -0
  50. package/.angular/cache/13.3.8/babel-webpack/29a8da37097e6c923af711271baec17c.json +1 -0
  51. package/.angular/cache/13.3.8/babel-webpack/2d054cedefc8ff37848a2616550b8aaf.json +1 -0
  52. package/.angular/cache/13.3.8/babel-webpack/2d4670a3c225024b10ab496350f7aee3.json +1 -0
  53. package/.angular/cache/13.3.8/babel-webpack/2d7e93363c9300593386133460b237f8.json +1 -0
  54. package/.angular/cache/13.3.8/babel-webpack/2eef96834e778035a7937b18ea6143fc.json +1 -0
  55. package/.angular/cache/13.3.8/babel-webpack/2f1dba70cd0bdc43524b8b7a65bacb29.json +1 -0
  56. package/.angular/cache/13.3.8/babel-webpack/2fb65b04240fcce5b926c609f2400529.json +1 -0
  57. package/.angular/cache/13.3.8/babel-webpack/2ff9789499e2786f623bf0db087e88d1.json +1 -0
  58. package/.angular/cache/13.3.8/babel-webpack/30448d7918d0317a2c085755868cf6ca.json +1 -0
  59. package/.angular/cache/13.3.8/babel-webpack/30d576b2a16732c44ce6053b6aa974e9.json +1 -0
  60. package/.angular/cache/13.3.8/babel-webpack/325abc3f4c36271afbbcefde8586dfb9.json +1 -0
  61. package/.angular/cache/13.3.8/babel-webpack/32ce9fee8ef079a8a53d503a4d7261e5.json +1 -0
  62. package/.angular/cache/13.3.8/babel-webpack/34415e07a1f080036d319f9b2c38f651.json +1 -0
  63. package/.angular/cache/13.3.8/babel-webpack/344e62d8fa5508cbe60258b031745896.json +1 -0
  64. package/.angular/cache/13.3.8/babel-webpack/34cb39d1ff500829727fee82bfd1f6b7.json +1 -0
  65. package/.angular/cache/13.3.8/babel-webpack/34d4df2bd91b606a2d05b63a3f91cd67.json +1 -0
  66. package/.angular/cache/13.3.8/babel-webpack/371e1540688780cd53699c01d3cbb3d7.json +1 -0
  67. package/.angular/cache/13.3.8/babel-webpack/3798287f8a756c447af5d2c202139966.json +1 -0
  68. package/.angular/cache/13.3.8/babel-webpack/37cc822bd5240b358dc56fb6a8f72cab.json +1 -0
  69. package/.angular/cache/13.3.8/babel-webpack/37cf9e3961050209da17e3643f9b96a2.json +1 -0
  70. package/.angular/cache/13.3.8/babel-webpack/393adeab7f49f0dc13085c23473fa88c.json +1 -0
  71. package/.angular/cache/13.3.8/babel-webpack/3a4cd0895f382899b668066a8493f3ce.json +1 -0
  72. package/.angular/cache/13.3.8/babel-webpack/3b2a3070b835723a9b1595e7d1a07359.json +1 -0
  73. package/.angular/cache/13.3.8/babel-webpack/3ba824534546af066a817fa0a3f400d3.json +1 -0
  74. package/.angular/cache/13.3.8/babel-webpack/3c0153bae74856d5b87a9d550c21a9eb.json +1 -0
  75. package/.angular/cache/13.3.8/babel-webpack/3c98b4603069d16c8d5574f7e887d943.json +1 -0
  76. package/.angular/cache/13.3.8/babel-webpack/3d0f141c3d5a487cc999dfd4e46c7e76.json +1 -0
  77. package/.angular/cache/13.3.8/babel-webpack/3da8a56fc5b1a180258bfc49d495dd0a.json +1 -0
  78. package/.angular/cache/13.3.8/babel-webpack/3dec37f90ad593c5e046d12e3fd83212.json +1 -0
  79. package/.angular/cache/13.3.8/babel-webpack/3e9091097711fd6166dbe75a30a2a4b9.json +1 -0
  80. package/.angular/cache/13.3.8/babel-webpack/3ef8f2b32f318f0bb4d6741b36153c18.json +1 -0
  81. package/.angular/cache/13.3.8/babel-webpack/3faa2db6dd6b37bf84cf23df280ae371.json +1 -0
  82. package/.angular/cache/13.3.8/babel-webpack/401cf04b9635bf4287fae7d54ac85e10.json +1 -0
  83. package/.angular/cache/13.3.8/babel-webpack/4143509c8fef21f44cadcd1ea2f332d8.json +1 -0
  84. package/.angular/cache/13.3.8/babel-webpack/41e9bedcdebbf887933887ca4cf22c2a.json +1 -0
  85. package/.angular/cache/13.3.8/babel-webpack/422cb89a641d38c1d5501c23b7c016a8.json +1 -0
  86. package/.angular/cache/13.3.8/babel-webpack/42a45fce70dece14c2bf55a986045606.json +1 -0
  87. package/.angular/cache/13.3.8/babel-webpack/42ecb9d49401cbdc4351b2ba7bfd1665.json +1 -0
  88. package/.angular/cache/13.3.8/babel-webpack/44f114c3483c720ec820b3feb1d59d05.json +1 -0
  89. package/.angular/cache/13.3.8/babel-webpack/44fda3bdb9741b14b6c76f839d37b7ad.json +1 -0
  90. package/.angular/cache/13.3.8/babel-webpack/464348a2dc9f5a7801e593b16b322bf5.json +1 -0
  91. package/.angular/cache/13.3.8/babel-webpack/4649f81af11ab967f112df339ff5769d.json +1 -0
  92. package/.angular/cache/13.3.8/babel-webpack/465fcc59e903556ea77850f0f79a8471.json +1 -0
  93. package/.angular/cache/13.3.8/babel-webpack/468b6d85983ecc7c976b7fdbe1c3cded.json +1 -0
  94. package/.angular/cache/13.3.8/babel-webpack/47173d576132855887972723e24015cd.json +1 -0
  95. package/.angular/cache/13.3.8/babel-webpack/4829478c5a8b97334cdec2218b002975.json +1 -0
  96. package/.angular/cache/13.3.8/babel-webpack/484d86bf741b6c5e6081efd4394c19c0.json +1 -0
  97. package/.angular/cache/13.3.8/babel-webpack/489f8f732e234c7ac2ec3e006bc677c0.json +1 -0
  98. package/.angular/cache/13.3.8/babel-webpack/48b0ff30bcd8bf1a1241fa9ba2e2a721.json +1 -0
  99. package/.angular/cache/13.3.8/babel-webpack/4984f233d58a807c95d77c58760bb8d1.json +1 -0
  100. package/.angular/cache/13.3.8/babel-webpack/49968fac28967061f8ba0773544aa4d4.json +1 -0
  101. package/.angular/cache/13.3.8/babel-webpack/49f24e3c6e037b60aaa97dca0732729e.json +1 -0
  102. package/.angular/cache/13.3.8/babel-webpack/49fa7418f40089c10022436e32588e26.json +1 -0
  103. package/.angular/cache/13.3.8/babel-webpack/4b4c45724ccac31a75716db793d78301.json +1 -0
  104. package/.angular/cache/13.3.8/babel-webpack/4c0e3dde3a954173292d3507ae8d8800.json +1 -0
  105. package/.angular/cache/13.3.8/babel-webpack/4c4a47266dbbd98ce6017fc2c4c16ab3.json +1 -0
  106. package/.angular/cache/13.3.8/babel-webpack/4c96fba9bc62fb6f1c63003516298f1c.json +1 -0
  107. package/.angular/cache/13.3.8/babel-webpack/4cca923dd39b1b68e675cb8d3e950a52.json +1 -0
  108. package/.angular/cache/13.3.8/babel-webpack/4daf0fe84bb8cae6a38a04196ec98cc4.json +1 -0
  109. package/.angular/cache/13.3.8/babel-webpack/4df0a5af25e9de5468e7ba40b7fee3bf.json +1 -0
  110. package/.angular/cache/13.3.8/babel-webpack/4e3522f06633365908c6a755ee4f7ae2.json +1 -0
  111. package/.angular/cache/13.3.8/babel-webpack/4fe2c18c7438dcc8d3bd1923274e2436.json +1 -0
  112. package/.angular/cache/13.3.8/babel-webpack/5009f4f03e78e7231475ebacb4d3cb2b.json +1 -0
  113. package/.angular/cache/13.3.8/babel-webpack/5033d4f94ec879440ab69ce7414f6486.json +1 -0
  114. package/.angular/cache/13.3.8/babel-webpack/5033f8defd60862ef0fe3cb41f2a927d.json +1 -0
  115. package/.angular/cache/13.3.8/babel-webpack/50a24abc129121eab5bcc4e0e7013ba9.json +1 -0
  116. package/.angular/cache/13.3.8/babel-webpack/51b3ec1d8e0a6bc69d42eaf0f1daeccb.json +1 -0
  117. package/.angular/cache/13.3.8/babel-webpack/51ca9e5390150126951cf0e49ed0f2fe.json +1 -0
  118. package/.angular/cache/13.3.8/babel-webpack/5345701941753864dbc3d6a2a1d4a015.json +1 -0
  119. package/.angular/cache/13.3.8/babel-webpack/53a8d17b51367157500e522b7c6d8197.json +1 -0
  120. package/.angular/cache/13.3.8/babel-webpack/54f97adf03da9afd3a08ddfaf49eab08.json +1 -0
  121. package/.angular/cache/13.3.8/babel-webpack/5504faf61da3e420003d77c44633c4e4.json +1 -0
  122. package/.angular/cache/13.3.8/babel-webpack/5563340c9e848ed24018ba313024fd8a.json +1 -0
  123. package/.angular/cache/13.3.8/babel-webpack/55bc0b6328492e14e699699ca9262bfe.json +1 -0
  124. package/.angular/cache/13.3.8/babel-webpack/5714c49932c371c6da63af63a01bddfc.json +1 -0
  125. package/.angular/cache/13.3.8/babel-webpack/57168bffb5e0bdca5ac4cf7f7ad84c16.json +1 -0
  126. package/.angular/cache/13.3.8/babel-webpack/57fbd00776674a76b440117bbe06a06b.json +1 -0
  127. package/.angular/cache/13.3.8/babel-webpack/5a077e69c799caf22d23efae17cf1e2d.json +1 -0
  128. package/.angular/cache/13.3.8/babel-webpack/5aac8614496f60c990efe8f74fdde586.json +1 -0
  129. package/.angular/cache/13.3.8/babel-webpack/5ab6a0ec43a189cdfe1e3ec22227730a.json +1 -0
  130. package/.angular/cache/13.3.8/babel-webpack/5c48bf55a0b28ef23d9a4576b5140e1d.json +1 -0
  131. package/.angular/cache/13.3.8/babel-webpack/5cd0b3cf17233c2754f8c98f1fda3e6c.json +1 -0
  132. package/.angular/cache/13.3.8/babel-webpack/5d4f879a80a4d6e46d0d8bcef1330395.json +1 -0
  133. package/.angular/cache/13.3.8/babel-webpack/5f9209a5cb234d569edc9200c749e2e0.json +1 -0
  134. package/.angular/cache/13.3.8/babel-webpack/6144ffa2c0dbc83bf8d9803a0a62491f.json +1 -0
  135. package/.angular/cache/13.3.8/babel-webpack/620fd3110133f761d0b7931d2f26b9a3.json +1 -0
  136. package/.angular/cache/13.3.8/babel-webpack/626979296b5ad1d3e1d0239c4393cc8b.json +1 -0
  137. package/.angular/cache/13.3.8/babel-webpack/627c2de9e10f88ad60b4ecd050dc9e87.json +1 -0
  138. package/.angular/cache/13.3.8/babel-webpack/62e89a7b9a089e888beaf0e58074cc3d.json +1 -0
  139. package/.angular/cache/13.3.8/babel-webpack/63d96b6b85ee5b164ad31fa4f62a4c37.json +1 -0
  140. package/.angular/cache/13.3.8/babel-webpack/63fa8926e36f9a08b3edd4612120d091.json +1 -0
  141. package/.angular/cache/13.3.8/babel-webpack/6461bbfdc47be7c54acdceb1e912bd1f.json +1 -0
  142. package/.angular/cache/13.3.8/babel-webpack/6571b553a64d8710e2d993fb3c17d791.json +1 -0
  143. package/.angular/cache/13.3.8/babel-webpack/659a925ca3b85535e82d6e8e3bd8321f.json +1 -0
  144. package/.angular/cache/13.3.8/babel-webpack/667e152369048e521dc578dbfe705afd.json +1 -0
  145. package/.angular/cache/13.3.8/babel-webpack/67c2867db19110bc07d468a31663b082.json +1 -0
  146. package/.angular/cache/13.3.8/babel-webpack/6915cdb3b410d12086de37baa1b80a13.json +1 -0
  147. package/.angular/cache/13.3.8/babel-webpack/69f6c96e258b8f5cbaa6ef8a0968ea8d.json +1 -0
  148. package/.angular/cache/13.3.8/babel-webpack/6ab4d8e3aa8e69681619e3dcfa7c2b1f.json +1 -0
  149. package/.angular/cache/13.3.8/babel-webpack/6b5fe499289b5a30c0d55d5b26d405d9.json +1 -0
  150. package/.angular/cache/13.3.8/babel-webpack/6bd846c9cb2fa982d31fb84286711398.json +1 -0
  151. package/.angular/cache/13.3.8/babel-webpack/6c0d66bfaa813d1decfd38bb748f1629.json +1 -0
  152. package/.angular/cache/13.3.8/babel-webpack/6c6837527a1673b4a16b4641ca2443c2.json +1 -0
  153. package/.angular/cache/13.3.8/babel-webpack/6e5845a65dd2f18c67922fc986035589.json +1 -0
  154. package/.angular/cache/13.3.8/babel-webpack/6f9d93a23559c2592f58781802cdbfad.json +1 -0
  155. package/.angular/cache/13.3.8/babel-webpack/6fdcb04b6b486092a35f2a562b470132.json +1 -0
  156. package/.angular/cache/13.3.8/babel-webpack/6fe9064763ddc74eb2e60b19bdcd348a.json +1 -0
  157. package/.angular/cache/13.3.8/babel-webpack/706c71f4c0a758cd7eb5422a0556cd8d.json +1 -0
  158. package/.angular/cache/13.3.8/babel-webpack/708bbfec6aaa490c1ee1a4a2db0c9dce.json +1 -0
  159. package/.angular/cache/13.3.8/babel-webpack/72d1926b6da79407ac2307aa242b7441.json +1 -0
  160. package/.angular/cache/13.3.8/babel-webpack/741fd2072a66ddffb835ab604c7b2348.json +1 -0
  161. package/.angular/cache/13.3.8/babel-webpack/74dfdb01aede70196bb29e3b8ef656da.json +1 -0
  162. package/.angular/cache/13.3.8/babel-webpack/75b409f8a1b798089336a83c230990a7.json +1 -0
  163. package/.angular/cache/13.3.8/babel-webpack/769f290e0375c736b7c71d24a0116679.json +1 -0
  164. package/.angular/cache/13.3.8/babel-webpack/76ddbf24cc7c413441a3d9591e8bb7d9.json +1 -0
  165. package/.angular/cache/13.3.8/babel-webpack/77751a54089601bdd7607b5509d66e23.json +1 -0
  166. package/.angular/cache/13.3.8/babel-webpack/77ce825c7716d5316a0f16c42452a87b.json +1 -0
  167. package/.angular/cache/13.3.8/babel-webpack/78be25a27f5b0e5db1fde15164e5dbcc.json +1 -0
  168. package/.angular/cache/13.3.8/babel-webpack/78ee5111123bf9926f2196ef82161ab3.json +1 -0
  169. package/.angular/cache/13.3.8/babel-webpack/79279197a3876a629e83e4a210b9b4d1.json +1 -0
  170. package/.angular/cache/13.3.8/babel-webpack/7977f6f82cf1646ae7e8be3a9362dc45.json +1 -0
  171. package/.angular/cache/13.3.8/babel-webpack/7a408d4d78bda49400eebbaf10a41695.json +1 -0
  172. package/.angular/cache/13.3.8/babel-webpack/7bb709bbff1e7f63cabf9ebf6424812a.json +1 -0
  173. package/.angular/cache/13.3.8/babel-webpack/7cb455299ee59fd075819074454baad8.json +1 -0
  174. package/.angular/cache/13.3.8/babel-webpack/7d9bc884038ee3ce50b86af6c49a172c.json +1 -0
  175. package/.angular/cache/13.3.8/babel-webpack/7f2a10f1c76f0ccbc31fb4dbfc83cf79.json +1 -0
  176. package/.angular/cache/13.3.8/babel-webpack/8003eeff572554d1ecf833627e8013b5.json +1 -0
  177. package/.angular/cache/13.3.8/babel-webpack/810a0190c65ff4a7163712fff1ce5589.json +1 -0
  178. package/.angular/cache/13.3.8/babel-webpack/81a9bc9d5a78eb9336fda4a4b51a9db1.json +1 -0
  179. package/.angular/cache/13.3.8/babel-webpack/825a38018882116e97529b92d3e971bb.json +1 -0
  180. package/.angular/cache/13.3.8/babel-webpack/827322420b0bf4e571321c200204f131.json +1 -0
  181. package/.angular/cache/13.3.8/babel-webpack/83baf9ca4e3395d2d5e5b924c74b5d69.json +1 -0
  182. package/.angular/cache/13.3.8/babel-webpack/83f118a093bfed771c90b2be60915ec2.json +1 -0
  183. package/.angular/cache/13.3.8/babel-webpack/86f90bd133cc14bd5e56f0799ddf9078.json +1 -0
  184. package/.angular/cache/13.3.8/babel-webpack/87851d6e26a3d008e043f7dfe633fed6.json +1 -0
  185. package/.angular/cache/13.3.8/babel-webpack/87b764acce5c285ebc92c67a512be949.json +1 -0
  186. package/.angular/cache/13.3.8/babel-webpack/886449f9f291fa3749aa80e90b3b9baa.json +1 -0
  187. package/.angular/cache/13.3.8/babel-webpack/8996307ea201cc088e8ae52c3147034e.json +1 -0
  188. package/.angular/cache/13.3.8/babel-webpack/8ad06ced1b426df27f86e698e23cd7bc.json +1 -0
  189. package/.angular/cache/13.3.8/babel-webpack/8b72b92a68c0aa36907479d54f6054ff.json +1 -0
  190. package/.angular/cache/13.3.8/babel-webpack/8b87157fd8f1fd92951de100c4338217.json +1 -0
  191. package/.angular/cache/13.3.8/babel-webpack/8d9f1796f742e95e3cfca5b9d522de84.json +1 -0
  192. package/.angular/cache/13.3.8/babel-webpack/8f69db7fd3359e9a1bd0697ba8267a8c.json +1 -0
  193. package/.angular/cache/13.3.8/babel-webpack/8f7d13df8bb26b1cf12a1a66af10a642.json +1 -0
  194. package/.angular/cache/13.3.8/babel-webpack/8ff6cb151e5ed105330f8dd6869861e2.json +1 -0
  195. package/.angular/cache/13.3.8/babel-webpack/905811c589a08ff992dd16401158f01d.json +1 -0
  196. package/.angular/cache/13.3.8/babel-webpack/91bfe0227693f3f6a28b93f16ce90aba.json +1 -0
  197. package/.angular/cache/13.3.8/babel-webpack/92e32b8e0b7d6cfa56e253e9949b28b5.json +1 -0
  198. package/.angular/cache/13.3.8/babel-webpack/93022f8c3568cc0763b7bad0ee433b8b.json +1 -0
  199. package/.angular/cache/13.3.8/babel-webpack/938bb3acf3bd6d51461354f14ba81282.json +1 -0
  200. package/.angular/cache/13.3.8/babel-webpack/9400d7ebd38390b019c049d6c636db71.json +1 -0
  201. package/.angular/cache/13.3.8/babel-webpack/947f408ca8e3872a9cfa4163c2c284c8.json +1 -0
  202. package/.angular/cache/13.3.8/babel-webpack/95f4a24c39887555c0e1d85b1979bcf6.json +1 -0
  203. package/.angular/cache/13.3.8/babel-webpack/9617d48f11c90169d8297e26a46c26d7.json +1 -0
  204. package/.angular/cache/13.3.8/babel-webpack/98ba64e212e975e34df2fcc90d0caf6e.json +1 -0
  205. package/.angular/cache/13.3.8/babel-webpack/9ad5a1f9a21e742680cf3cb1818861ad.json +1 -0
  206. package/.angular/cache/13.3.8/babel-webpack/9c2c51a3a60e6d9f9165b003e76d401a.json +1 -0
  207. package/.angular/cache/13.3.8/babel-webpack/9caf482a8cafdd62827fb068390c19d2.json +1 -0
  208. package/.angular/cache/13.3.8/babel-webpack/9cdd3dce1fca0a68c50c30c3b154784e.json +1 -0
  209. package/.angular/cache/13.3.8/babel-webpack/9dd9f9069a5a9d39bff4ba3aebf3aacd.json +1 -0
  210. package/.angular/cache/13.3.8/babel-webpack/9e04c25c398c9641b70773472b91e9f4.json +1 -0
  211. package/.angular/cache/13.3.8/babel-webpack/9e67ca1c65c2b233d408cb44f808ab1f.json +1 -0
  212. package/.angular/cache/13.3.8/babel-webpack/a06a5557d63854b094d704445b9cbba0.json +1 -0
  213. package/.angular/cache/13.3.8/babel-webpack/a0cba8d6bad5dbf6e2cd9c1dce6a6d8c.json +1 -0
  214. package/.angular/cache/13.3.8/babel-webpack/a17ae6b26968359520d47b0650868869.json +1 -0
  215. package/.angular/cache/13.3.8/babel-webpack/a19e2c547578cfc1624d80296e6cc6e9.json +1 -0
  216. package/.angular/cache/13.3.8/babel-webpack/a3cc87818516e8313e437b957c96de27.json +1 -0
  217. package/.angular/cache/13.3.8/babel-webpack/a63c7a2e141525144e120979dfab330e.json +1 -0
  218. package/.angular/cache/13.3.8/babel-webpack/a77291233507e897c763cd5708171f2c.json +1 -0
  219. package/.angular/cache/13.3.8/babel-webpack/a9d0e9a36e846d7722eb6cbf86cf0eab.json +1 -0
  220. package/.angular/cache/13.3.8/babel-webpack/aa8d07367b1673dc078e853d9f54bd4f.json +1 -0
  221. package/.angular/cache/13.3.8/babel-webpack/aaa7865da0ed6c92e751d36c340f0412.json +1 -0
  222. package/.angular/cache/13.3.8/babel-webpack/ab14fddae15293d3e96649edb59ab6ee.json +1 -0
  223. package/.angular/cache/13.3.8/babel-webpack/ab5001b86bfe76ad7eabaa3bb03ee91c.json +1 -0
  224. package/.angular/cache/13.3.8/babel-webpack/ac115cfdb4ae57d5be899b6109d5c66d.json +1 -0
  225. package/.angular/cache/13.3.8/babel-webpack/ad5fd8e37c0ee6ec03716556349bcd7c.json +1 -0
  226. package/.angular/cache/13.3.8/babel-webpack/af15b0ed03ff515cf83a61a8f8ba8114.json +1 -0
  227. package/.angular/cache/13.3.8/babel-webpack/afd65bb5d81dd8ed61398e262960e379.json +1 -0
  228. package/.angular/cache/13.3.8/babel-webpack/b088264162bac1b5481bed0300f6aa8c.json +1 -0
  229. package/.angular/cache/13.3.8/babel-webpack/b10dbba09a3bfc69ebac1af564d03ab0.json +1 -0
  230. package/.angular/cache/13.3.8/babel-webpack/b11cb6660865c10be2d7a63cb962fb22.json +1 -0
  231. package/.angular/cache/13.3.8/babel-webpack/b2f5da40326881237ded1223a9e2b91e.json +1 -0
  232. package/.angular/cache/13.3.8/babel-webpack/b308ff5fbdb2e0d0962a00b3fdb4bba3.json +1 -0
  233. package/.angular/cache/13.3.8/babel-webpack/b4a250ad486dbf53468ea3f79f1aa56e.json +1 -0
  234. package/.angular/cache/13.3.8/babel-webpack/b4dc46a9366a3638f5263324f76d1257.json +1 -0
  235. package/.angular/cache/13.3.8/babel-webpack/b5214ad5a0cd4b989daa7cf3b2c81788.json +1 -0
  236. package/.angular/cache/13.3.8/babel-webpack/b54ab58104a20cf6abd4a7ade0cb5efe.json +1 -0
  237. package/.angular/cache/13.3.8/babel-webpack/b67b8d5d0e99959f9b731f548adc8bfa.json +1 -0
  238. package/.angular/cache/13.3.8/babel-webpack/b6b67c74aff89c2642a888b7375ab497.json +1 -0
  239. package/.angular/cache/13.3.8/babel-webpack/b78bf462c67d0084c64d890dd61e44a5.json +1 -0
  240. package/.angular/cache/13.3.8/babel-webpack/b7b45e6f3d9017ec4d9a9505ec6b1032.json +1 -0
  241. package/.angular/cache/13.3.8/babel-webpack/b902ae2d3307471e3f109cafebff941b.json +1 -0
  242. package/.angular/cache/13.3.8/babel-webpack/ba20ff82523086fc151c328e0fdc4e4e.json +1 -0
  243. package/.angular/cache/13.3.8/babel-webpack/bb5667c873411096eeb80085b1ca161e.json +1 -0
  244. package/.angular/cache/13.3.8/babel-webpack/bb58549725b01927dafeb42503c665a8.json +1 -0
  245. package/.angular/cache/13.3.8/babel-webpack/bb95ba87259582460ac5794209b3da28.json +1 -0
  246. package/.angular/cache/13.3.8/babel-webpack/bbb58b2daf454bd0a76ec382e06b07b0.json +1 -0
  247. package/.angular/cache/13.3.8/babel-webpack/bc4011f3189c2f439af86f17561ec9ce.json +1 -0
  248. package/.angular/cache/13.3.8/babel-webpack/bcbfbc473b03621491e4aba8e3148afc.json +1 -0
  249. package/.angular/cache/13.3.8/babel-webpack/bdf02e15e2b0f2252eec6075bfe0656b.json +1 -0
  250. package/.angular/cache/13.3.8/babel-webpack/bf69385e02b170469c07539aa0e90b86.json +1 -0
  251. package/.angular/cache/13.3.8/babel-webpack/bffbc2e7cd917a26abe867f247a50355.json +1 -0
  252. package/.angular/cache/13.3.8/babel-webpack/c01e2106240c1038b3f131aaacdf3127.json +1 -0
  253. package/.angular/cache/13.3.8/babel-webpack/c03b6674aa649f98a7f74af2be55e968.json +1 -0
  254. package/.angular/cache/13.3.8/babel-webpack/c12caf9d4638d85c0f0f11c0cc1f60f8.json +1 -0
  255. package/.angular/cache/13.3.8/babel-webpack/c151b4d148d17e99d9078e817b5cbed7.json +1 -0
  256. package/.angular/cache/13.3.8/babel-webpack/c21157f72fa81b896cfc69398590ffcd.json +1 -0
  257. package/.angular/cache/13.3.8/babel-webpack/c3d1530cf1bdc0040772700037b47739.json +1 -0
  258. package/.angular/cache/13.3.8/babel-webpack/c3e6c41249e1d8472be77446873e1863.json +1 -0
  259. package/.angular/cache/13.3.8/babel-webpack/c4118a992fb6bea0691521256e115d01.json +1 -0
  260. package/.angular/cache/13.3.8/babel-webpack/c42938d588314e5b841269e3b53d04b6.json +1 -0
  261. package/.angular/cache/13.3.8/babel-webpack/c4334ab9356f466b6056f380ab481291.json +1 -0
  262. package/.angular/cache/13.3.8/babel-webpack/c45c0e77d8f42cf281137812403551db.json +1 -0
  263. package/.angular/cache/13.3.8/babel-webpack/c527cc7cf1eaafe2ef74a5b64bc41bca.json +1 -0
  264. package/.angular/cache/13.3.8/babel-webpack/c5e17599d9c6b12eb0529b7431b1196f.json +1 -0
  265. package/.angular/cache/13.3.8/babel-webpack/c5f513e2805dbebd48256ec6d3d095a8.json +1 -0
  266. package/.angular/cache/13.3.8/babel-webpack/c6d1565e62b101ed183b3f447b21e774.json +1 -0
  267. package/.angular/cache/13.3.8/babel-webpack/c71837e43e0372efdecc0e3b9578f599.json +1 -0
  268. package/.angular/cache/13.3.8/babel-webpack/c926a68c65f1f4e1cb91c6d9136d43a3.json +1 -0
  269. package/.angular/cache/13.3.8/babel-webpack/c933131ed6ab617ba88b8dcf1c32f88d.json +1 -0
  270. package/.angular/cache/13.3.8/babel-webpack/caf3200b607bc0d82b1e238a1fa92e3e.json +1 -0
  271. package/.angular/cache/13.3.8/babel-webpack/cb5688b77172c4f2464646fb48434431.json +1 -0
  272. package/.angular/cache/13.3.8/babel-webpack/cc7c1b7d60e30e27fc3ac384ca5790c3.json +1 -0
  273. package/.angular/cache/13.3.8/babel-webpack/ccf739c4cd78fe256f7fe4c3d8ecb5a6.json +1 -0
  274. package/.angular/cache/13.3.8/babel-webpack/cd7be29a67ce0a719a6bba6b756c968c.json +1 -0
  275. package/.angular/cache/13.3.8/babel-webpack/cdf324523d7093bd7d83db7315f1e53d.json +1 -0
  276. package/.angular/cache/13.3.8/babel-webpack/ce55f0ec957ad17390ca1626b0fa54dc.json +1 -0
  277. package/.angular/cache/13.3.8/babel-webpack/ce83a29846bd4d7c9363952117125cd8.json +1 -0
  278. package/.angular/cache/13.3.8/babel-webpack/ce87faab295452b86a55b10f3328e88e.json +1 -0
  279. package/.angular/cache/13.3.8/babel-webpack/cee8ad61bbb1c8501799c125130713e2.json +1 -0
  280. package/.angular/cache/13.3.8/babel-webpack/cf725e286e3156c367900f91bb6fe0f4.json +1 -0
  281. package/.angular/cache/13.3.8/babel-webpack/d00e50c8700890444ea390a517892393.json +1 -0
  282. package/.angular/cache/13.3.8/babel-webpack/d13e22c859c1503702dce6b3d2bdb825.json +1 -0
  283. package/.angular/cache/13.3.8/babel-webpack/d296e6e39d7b1da9a2730657c6b9a8a8.json +1 -0
  284. package/.angular/cache/13.3.8/babel-webpack/d382ecfa087acfe724fe1d27b8aade26.json +1 -0
  285. package/.angular/cache/13.3.8/babel-webpack/d4b1b33e1be5887d55716f5de6c8619e.json +1 -0
  286. package/.angular/cache/13.3.8/babel-webpack/d66d388dd8029afedacbb3bf5eea9f2a.json +1 -0
  287. package/.angular/cache/13.3.8/babel-webpack/d670c34e6297a533c9f989c256fa904e.json +1 -0
  288. package/.angular/cache/13.3.8/babel-webpack/d6ea2139d4e7ebde4fb5d9ca685f6156.json +1 -0
  289. package/.angular/cache/13.3.8/babel-webpack/d97f611e91ff2e958d4bd563d5577d4c.json +1 -0
  290. package/.angular/cache/13.3.8/babel-webpack/db0e61ea8a2bf6305dc6436ced7873bd.json +1 -0
  291. package/.angular/cache/13.3.8/babel-webpack/db2764d8627cf6541a57cdc803977954.json +1 -0
  292. package/.angular/cache/13.3.8/babel-webpack/dc2f0c3883ddba73b7610bad5d3e5a7c.json +1 -0
  293. package/.angular/cache/13.3.8/babel-webpack/dcba1c12c2235201507746f191aaae34.json +1 -0
  294. package/.angular/cache/13.3.8/babel-webpack/dd132f3f48c7788bd78bb61cd39389c0.json +1 -0
  295. package/.angular/cache/13.3.8/babel-webpack/dd14d17f6181a4e509f4b1af92e01189.json +1 -0
  296. package/.angular/cache/13.3.8/babel-webpack/dd9efed6889cb2f2c9dcae0ac34cfd3b.json +1 -0
  297. package/.angular/cache/13.3.8/babel-webpack/de5be13a077040d81a6be92739ac9424.json +1 -0
  298. package/.angular/cache/13.3.8/babel-webpack/df3e709dc4474fbc4a1ffba664469834.json +1 -0
  299. package/.angular/cache/13.3.8/babel-webpack/df6c6ef53d881b53b959a9395f172cb5.json +1 -0
  300. package/.angular/cache/13.3.8/babel-webpack/dfddd41dde86972d7d471f6655361e6b.json +1 -0
  301. package/.angular/cache/13.3.8/babel-webpack/e11abe9c0fa21ad541612d9d18926c83.json +1 -0
  302. package/.angular/cache/13.3.8/babel-webpack/e177a98234698cea48aaeb7a5c3d62d9.json +1 -0
  303. package/.angular/cache/13.3.8/babel-webpack/e2bb776bc5c66c1b7cb2d8710f0075bd.json +1 -0
  304. package/.angular/cache/13.3.8/babel-webpack/e332faec2bafe37908a0aa88a1ac1aa5.json +1 -0
  305. package/.angular/cache/13.3.8/babel-webpack/e4d51765fc0d4ef65d8e4283090bc08f.json +1 -0
  306. package/.angular/cache/13.3.8/babel-webpack/e50b91f0d84ab2adfede57f92162e129.json +1 -0
  307. package/.angular/cache/13.3.8/babel-webpack/e65a6f02a72fab74ab88d8cea6fb91a4.json +1 -0
  308. package/.angular/cache/13.3.8/babel-webpack/e68b59f5f6e55f9bed2db51b554a6d9b.json +1 -0
  309. package/.angular/cache/13.3.8/babel-webpack/e6d1b308346f3e288e57688424c071f9.json +1 -0
  310. package/.angular/cache/13.3.8/babel-webpack/e72efbcdf47558156e4c4c5c03ad9922.json +1 -0
  311. package/.angular/cache/13.3.8/babel-webpack/e74d56fbbec5a1cee2fe5efc42f42482.json +1 -0
  312. package/.angular/cache/13.3.8/babel-webpack/e7afea9fd4aa90dc195b45e7eafa08ed.json +1 -0
  313. package/.angular/cache/13.3.8/babel-webpack/e8538d1514392ef4bd9f4175e3859b64.json +1 -0
  314. package/.angular/cache/13.3.8/babel-webpack/e92299f62ba1e277c1f0febcc42f6f6c.json +1 -0
  315. package/.angular/cache/13.3.8/babel-webpack/e9ce2aceaa98de9c401e914987675185.json +1 -0
  316. package/.angular/cache/13.3.8/babel-webpack/eaf2f107db46caef610605458d470dd6.json +1 -0
  317. package/.angular/cache/13.3.8/babel-webpack/ebe9fcdfddc0049f2a3539bdf372182a.json +1 -0
  318. package/.angular/cache/13.3.8/babel-webpack/ebf00c7d547a3fd380303a0677afd6fd.json +1 -0
  319. package/.angular/cache/13.3.8/babel-webpack/ec62a0272ab85622ae90a9ded37faac6.json +1 -0
  320. package/.angular/cache/13.3.8/babel-webpack/ec6ec0a385bca5a0af84b0764b68f2eb.json +1 -0
  321. package/.angular/cache/13.3.8/babel-webpack/ed25182b670a7ef1f75cffc990301abd.json +1 -0
  322. package/.angular/cache/13.3.8/babel-webpack/ed859e0eb8c893c50d86dc06f044e2f2.json +1 -0
  323. package/.angular/cache/13.3.8/babel-webpack/eddb54479fc84d9a7fb12de46687ccbb.json +1 -0
  324. package/.angular/cache/13.3.8/babel-webpack/efa7bcb095fd93cacda7678eab41687b.json +1 -0
  325. package/.angular/cache/13.3.8/babel-webpack/efc0dedea79d75441c21fd90de356e24.json +1 -0
  326. package/.angular/cache/13.3.8/babel-webpack/f0af07e622f23258c8ca1e7c5bfec120.json +1 -0
  327. package/.angular/cache/13.3.8/babel-webpack/f0c44de2465dcbd9e88c8a03509d0256.json +1 -0
  328. package/.angular/cache/13.3.8/babel-webpack/f1162e154ed889f4a293300795d69259.json +1 -0
  329. package/.angular/cache/13.3.8/babel-webpack/f177c4de766e451f4beff650f84ecb5a.json +1 -0
  330. package/.angular/cache/13.3.8/babel-webpack/f25518eac9526bb125e8e70536d9873e.json +1 -0
  331. package/.angular/cache/13.3.8/babel-webpack/f2c1dc64b41106092be1791fec494ac9.json +1 -0
  332. package/.angular/cache/13.3.8/babel-webpack/f34ab63ab5b8337d0023eab174e66515.json +1 -0
  333. package/.angular/cache/13.3.8/babel-webpack/f3811f682513cc105b9f7980bf5465ca.json +1 -0
  334. package/.angular/cache/13.3.8/babel-webpack/f46796dc6bf3d6d7c3611e8d607bdcda.json +1 -0
  335. package/.angular/cache/13.3.8/babel-webpack/f48109d62480024bdc089c7318d3d104.json +1 -0
  336. package/.angular/cache/13.3.8/babel-webpack/f50dbb569f9e2a941366366e228b7e7b.json +1 -0
  337. package/.angular/cache/13.3.8/babel-webpack/f56763c4978e4735e2b8fabbd1774db6.json +1 -0
  338. package/.angular/cache/13.3.8/babel-webpack/f6abd512586dde031ecd5b3305daaf95.json +1 -0
  339. package/.angular/cache/13.3.8/babel-webpack/f70e5c60d842462753b2f323debb32e4.json +1 -0
  340. package/.angular/cache/13.3.8/babel-webpack/f7a848e3fc241a5c78b17669a7bd1fa7.json +1 -0
  341. package/.angular/cache/13.3.8/babel-webpack/fa2e761077559ae9ecc7e380ec7f3aef.json +1 -0
  342. package/.angular/cache/13.3.8/babel-webpack/fa5305b0e1d7ebfd40cfa6b317c98780.json +1 -0
  343. package/.angular/cache/13.3.8/babel-webpack/fa53f4380f7b2ff4417f9785ac323634.json +1 -0
  344. package/.angular/cache/13.3.8/babel-webpack/fa5ce8a874423e1be3adde2dab6bd603.json +1 -0
  345. package/.angular/cache/13.3.8/babel-webpack/fddb68d0661d96a618e00d6674ca7dad.json +1 -0
  346. package/.angular/cache/13.3.8/babel-webpack/fe890ed50c86989a4ac3c56913c146bc.json +1 -0
  347. package/CHANGELOG.md +12 -0
  348. package/homebridge-ui/public/index.html +1 -1
  349. package/homebridge-ui/public/main.ef1d40566bd2fdc0.js +1 -0
  350. package/package.json +1 -1
  351. package/homebridge-ui/public/main.ece8fc9a34c8f89b.js +0 -1
@@ -0,0 +1 @@
1
+ {"ast":null,"code":"import * as i0 from '@angular/core';\nimport { Injectable, Directive, EventEmitter, Input, Output, ContentChildren, Component, ViewEncapsulation, Optional, Host, NgModule, ChangeDetectionStrategy, forwardRef, PLATFORM_ID, Inject, LOCALE_ID, ElementRef, ViewChild, ContentChild, TemplateRef, Injector, Attribute, ViewChildren, HostBinding, InjectionToken } from '@angular/core';\nimport * as i2 from '@angular/common';\nimport { CommonModule, isPlatformBrowser, getLocaleMonthNames, FormStyle, TranslationWidth, getLocaleDayNames, formatDate, DOCUMENT, getLocaleDayPeriods } from '@angular/common';\nimport { Observable, EMPTY, of, Subject, fromEvent, timer, race, BehaviorSubject, combineLatest, NEVER, zip, merge } from 'rxjs';\nimport { endWith, takeUntil, filter, take, map, startWith, distinctUntilChanged, switchMap, tap, withLatestFrom, delay, mergeMap, skip, share, finalize } from 'rxjs/operators';\nimport * as i3 from '@angular/forms';\nimport { NG_VALUE_ACCESSOR, NG_VALIDATORS, FormsModule } from '@angular/forms';\nimport { flip, preventOverflow, arrow, createPopperLite, offset } from '@popperjs/core';\n\nfunction NgbAccordion_ng_template_0_ng_template_2_Template(rf, ctx) {}\n\nfunction NgbAccordion_ng_template_0_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"button\", 3);\n i0.ɵɵtext(1);\n i0.ɵɵtemplate(2, NgbAccordion_ng_template_0_ng_template_2_Template, 0, 0, \"ng-template\", 4);\n i0.ɵɵelementEnd();\n }\n\n if (rf & 2) {\n const panel_r3 = ctx.$implicit;\n i0.ɵɵproperty(\"ngbPanelToggle\", panel_r3);\n i0.ɵɵadvance(1);\n i0.ɵɵtextInterpolate1(\" \", panel_r3.title, \"\");\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngTemplateOutlet\", panel_r3.titleTpl == null ? null : panel_r3.titleTpl.templateRef);\n }\n}\n\nfunction NgbAccordion_ng_template_2_ng_template_2_Template(rf, ctx) {}\n\nfunction NgbAccordion_ng_template_2_div_3_ng_template_2_Template(rf, ctx) {}\n\nfunction NgbAccordion_ng_template_2_div_3_Template(rf, ctx) {\n if (rf & 1) {\n const _r11 = i0.ɵɵgetCurrentView();\n\n i0.ɵɵelementStart(0, \"div\", 8);\n i0.ɵɵlistener(\"ngbRef\", function NgbAccordion_ng_template_2_div_3_Template_div_ngbRef_0_listener($event) {\n i0.ɵɵrestoreView(_r11);\n const panel_r5 = i0.ɵɵnextContext().$implicit;\n return panel_r5.panelDiv = $event;\n });\n i0.ɵɵelementStart(1, \"div\", 9);\n i0.ɵɵtemplate(2, NgbAccordion_ng_template_2_div_3_ng_template_2_Template, 0, 0, \"ng-template\", 4);\n i0.ɵɵelementEnd()();\n }\n\n if (rf & 2) {\n const panel_r5 = i0.ɵɵnextContext().$implicit;\n i0.ɵɵpropertyInterpolate(\"id\", panel_r5.id);\n i0.ɵɵattribute(\"aria-labelledby\", panel_r5.id + \"-header\");\n i0.ɵɵadvance(2);\n i0.ɵɵproperty(\"ngTemplateOutlet\", (panel_r5.contentTpl == null ? null : panel_r5.contentTpl.templateRef) || null);\n }\n}\n\nconst _c0 = function (a0, a1) {\n return {\n $implicit: a0,\n opened: a1\n };\n};\n\nfunction NgbAccordion_ng_template_2_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\")(1, \"div\", 5);\n i0.ɵɵtemplate(2, NgbAccordion_ng_template_2_ng_template_2_Template, 0, 0, \"ng-template\", 6);\n i0.ɵɵelementEnd();\n i0.ɵɵtemplate(3, NgbAccordion_ng_template_2_div_3_Template, 3, 3, \"div\", 7);\n i0.ɵɵelementEnd();\n }\n\n if (rf & 2) {\n const panel_r5 = ctx.$implicit;\n const ctx_r2 = i0.ɵɵnextContext();\n\n const _r0 = i0.ɵɵreference(1);\n\n i0.ɵɵclassMap(\"accordion-item \" + (panel_r5.cardClass || \"\"));\n i0.ɵɵadvance(1);\n i0.ɵɵclassMap(\"accordion-header \" + (panel_r5.type ? \"bg-\" + panel_r5.type : ctx_r2.type ? \"bg-\" + ctx_r2.type : \"\"));\n i0.ɵɵpropertyInterpolate1(\"id\", \"\", panel_r5.id, \"-header\");\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngTemplateOutlet\", (panel_r5.headerTpl == null ? null : panel_r5.headerTpl.templateRef) || _r0)(\"ngTemplateOutletContext\", i0.ɵɵpureFunction2(8, _c0, panel_r5, panel_r5.isOpen));\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngIf\", !ctx_r2.destroyOnHide || panel_r5.isOpen || panel_r5.transitionRunning);\n }\n}\n\nfunction NgbAlert_button_1_Template(rf, ctx) {\n if (rf & 1) {\n const _r2 = i0.ɵɵgetCurrentView();\n\n i0.ɵɵelementStart(0, \"button\", 1);\n i0.ɵɵlistener(\"click\", function NgbAlert_button_1_Template_button_click_0_listener() {\n i0.ɵɵrestoreView(_r2);\n const ctx_r1 = i0.ɵɵnextContext();\n return ctx_r1.close();\n });\n i0.ɵɵelementEnd();\n }\n}\n\nconst _c3 = [\"*\"];\n\nfunction NgbCarousel_button_1_Template(rf, ctx) {\n if (rf & 1) {\n const _r6 = i0.ɵɵgetCurrentView();\n\n i0.ɵɵelementStart(0, \"button\", 6);\n i0.ɵɵlistener(\"click\", function NgbCarousel_button_1_Template_button_click_0_listener() {\n const restoredCtx = i0.ɵɵrestoreView(_r6);\n const slide_r4 = restoredCtx.$implicit;\n const ctx_r5 = i0.ɵɵnextContext();\n ctx_r5.focus();\n return ctx_r5.select(slide_r4.id, ctx_r5.NgbSlideEventSource.INDICATOR);\n });\n i0.ɵɵelementEnd();\n }\n\n if (rf & 2) {\n const slide_r4 = ctx.$implicit;\n const ctx_r0 = i0.ɵɵnextContext();\n i0.ɵɵclassProp(\"active\", slide_r4.id === ctx_r0.activeId);\n i0.ɵɵattribute(\"aria-labelledby\", \"slide-\" + slide_r4.id)(\"aria-controls\", \"slide-\" + slide_r4.id)(\"aria-selected\", slide_r4.id === ctx_r0.activeId);\n }\n}\n\nfunction NgbCarousel_div_3_ng_template_3_Template(rf, ctx) {}\n\nfunction NgbCarousel_div_3_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 7)(1, \"span\", 8);\n i0.ɵɵi18n(2, 9);\n i0.ɵɵelementEnd();\n i0.ɵɵtemplate(3, NgbCarousel_div_3_ng_template_3_Template, 0, 0, \"ng-template\", 10);\n i0.ɵɵelementEnd();\n }\n\n if (rf & 2) {\n const slide_r7 = ctx.$implicit;\n const i_r8 = ctx.index;\n const c_r9 = ctx.count;\n i0.ɵɵproperty(\"id\", \"slide-\" + slide_r7.id);\n i0.ɵɵadvance(2);\n i0.ɵɵi18nExp(i_r8 + 1)(c_r9);\n i0.ɵɵi18nApply(2);\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngTemplateOutlet\", slide_r7.tplRef);\n }\n}\n\nfunction NgbCarousel_button_4_Template(rf, ctx) {\n if (rf & 1) {\n const _r12 = i0.ɵɵgetCurrentView();\n\n i0.ɵɵelementStart(0, \"button\", 11);\n i0.ɵɵlistener(\"click\", function NgbCarousel_button_4_Template_button_click_0_listener() {\n i0.ɵɵrestoreView(_r12);\n const ctx_r11 = i0.ɵɵnextContext();\n return ctx_r11.arrowLeft();\n });\n i0.ɵɵelement(1, \"span\", 12);\n i0.ɵɵelementStart(2, \"span\", 8);\n i0.ɵɵi18n(3, 13);\n i0.ɵɵelementEnd()();\n }\n}\n\nfunction NgbCarousel_button_5_Template(rf, ctx) {\n if (rf & 1) {\n const _r14 = i0.ɵɵgetCurrentView();\n\n i0.ɵɵelementStart(0, \"button\", 14);\n i0.ɵɵlistener(\"click\", function NgbCarousel_button_5_Template_button_click_0_listener() {\n i0.ɵɵrestoreView(_r14);\n const ctx_r13 = i0.ɵɵnextContext();\n return ctx_r13.arrowRight();\n });\n i0.ɵɵelement(1, \"span\", 15);\n i0.ɵɵelementStart(2, \"span\", 8);\n i0.ɵɵi18n(3, 16);\n i0.ɵɵelementEnd()();\n }\n}\n\nconst _c10 = [\"ngbDatepickerDayView\", \"\"];\nconst _c11 = [\"month\"];\nconst _c12 = [\"year\"];\n\nfunction NgbDatepickerNavigationSelect_option_2_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"option\", 5);\n i0.ɵɵtext(1);\n i0.ɵɵelementEnd();\n }\n\n if (rf & 2) {\n const m_r4 = ctx.$implicit;\n const ctx_r1 = i0.ɵɵnextContext();\n i0.ɵɵproperty(\"value\", m_r4);\n i0.ɵɵattribute(\"aria-label\", ctx_r1.i18n.getMonthFullName(m_r4, ctx_r1.date == null ? null : ctx_r1.date.year));\n i0.ɵɵadvance(1);\n i0.ɵɵtextInterpolate(ctx_r1.i18n.getMonthShortName(m_r4, ctx_r1.date == null ? null : ctx_r1.date.year));\n }\n}\n\nfunction NgbDatepickerNavigationSelect_option_5_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"option\", 5);\n i0.ɵɵtext(1);\n i0.ɵɵelementEnd();\n }\n\n if (rf & 2) {\n const y_r5 = ctx.$implicit;\n const ctx_r3 = i0.ɵɵnextContext();\n i0.ɵɵproperty(\"value\", y_r5);\n i0.ɵɵadvance(1);\n i0.ɵɵtextInterpolate(ctx_r3.i18n.getYearNumerals(y_r5));\n }\n}\n\nfunction NgbDatepickerNavigation_ngb_datepicker_navigation_select_3_Template(rf, ctx) {\n if (rf & 1) {\n const _r3 = i0.ɵɵgetCurrentView();\n\n i0.ɵɵelementStart(0, \"ngb-datepicker-navigation-select\", 7);\n i0.ɵɵlistener(\"select\", function NgbDatepickerNavigation_ngb_datepicker_navigation_select_3_Template_ngb_datepicker_navigation_select_select_0_listener($event) {\n i0.ɵɵrestoreView(_r3);\n const ctx_r2 = i0.ɵɵnextContext();\n return ctx_r2.select.emit($event);\n });\n i0.ɵɵelementEnd();\n }\n\n if (rf & 2) {\n const ctx_r0 = i0.ɵɵnextContext();\n i0.ɵɵproperty(\"date\", ctx_r0.date)(\"disabled\", ctx_r0.disabled)(\"months\", ctx_r0.selectBoxes.months)(\"years\", ctx_r0.selectBoxes.years);\n }\n}\n\nfunction NgbDatepickerNavigation_4_ng_template_0_div_0_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelement(0, \"div\", 0);\n }\n}\n\nfunction NgbDatepickerNavigation_4_ng_template_0_div_3_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelement(0, \"div\", 0);\n }\n}\n\nfunction NgbDatepickerNavigation_4_ng_template_0_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtemplate(0, NgbDatepickerNavigation_4_ng_template_0_div_0_Template, 1, 0, \"div\", 9);\n i0.ɵɵelementStart(1, \"div\", 10);\n i0.ɵɵtext(2);\n i0.ɵɵelementEnd();\n i0.ɵɵtemplate(3, NgbDatepickerNavigation_4_ng_template_0_div_3_Template, 1, 0, \"div\", 9);\n }\n\n if (rf & 2) {\n const month_r5 = ctx.$implicit;\n const i_r6 = ctx.index;\n const ctx_r4 = i0.ɵɵnextContext(2);\n i0.ɵɵproperty(\"ngIf\", i_r6 > 0);\n i0.ɵɵadvance(2);\n i0.ɵɵtextInterpolate1(\" \", ctx_r4.i18n.getMonthLabel(month_r5.firstDate), \" \");\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngIf\", i_r6 !== ctx_r4.months.length - 1);\n }\n}\n\nfunction NgbDatepickerNavigation_4_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtemplate(0, NgbDatepickerNavigation_4_ng_template_0_Template, 4, 3, \"ng-template\", 8);\n }\n\n if (rf & 2) {\n const ctx_r1 = i0.ɵɵnextContext();\n i0.ɵɵproperty(\"ngForOf\", ctx_r1.months);\n }\n}\n\nconst _c29 = [\"defaultDayTemplate\"];\nconst _c30 = [\"content\"];\n\nfunction NgbDatepicker_ng_template_0_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelement(0, \"div\", 7);\n }\n\n if (rf & 2) {\n const date_r8 = ctx.date;\n const currentMonth_r9 = ctx.currentMonth;\n const selected_r10 = ctx.selected;\n const disabled_r11 = ctx.disabled;\n const focused_r12 = ctx.focused;\n i0.ɵɵproperty(\"date\", date_r8)(\"currentMonth\", currentMonth_r9)(\"selected\", selected_r10)(\"disabled\", disabled_r11)(\"focused\", focused_r12);\n }\n}\n\nfunction NgbDatepicker_ng_template_2_div_0_div_1_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 12);\n i0.ɵɵtext(1);\n i0.ɵɵelementEnd();\n }\n\n if (rf & 2) {\n const month_r14 = i0.ɵɵnextContext().$implicit;\n const ctx_r16 = i0.ɵɵnextContext(2);\n i0.ɵɵadvance(1);\n i0.ɵɵtextInterpolate1(\" \", ctx_r16.i18n.getMonthLabel(month_r14.firstDate), \" \");\n }\n}\n\nfunction NgbDatepicker_ng_template_2_div_0_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 9);\n i0.ɵɵtemplate(1, NgbDatepicker_ng_template_2_div_0_div_1_Template, 2, 1, \"div\", 10);\n i0.ɵɵelement(2, \"ngb-datepicker-month\", 11);\n i0.ɵɵelementEnd();\n }\n\n if (rf & 2) {\n const month_r14 = ctx.$implicit;\n const ctx_r13 = i0.ɵɵnextContext(2);\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngIf\", ctx_r13.navigation === \"none\" || ctx_r13.displayMonths > 1 && ctx_r13.navigation === \"select\");\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"month\", month_r14.firstDate);\n }\n}\n\nfunction NgbDatepicker_ng_template_2_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtemplate(0, NgbDatepicker_ng_template_2_div_0_Template, 3, 2, \"div\", 8);\n }\n\n if (rf & 2) {\n const ctx_r3 = i0.ɵɵnextContext();\n i0.ɵɵproperty(\"ngForOf\", ctx_r3.model.months);\n }\n}\n\nfunction NgbDatepicker_ngb_datepicker_navigation_5_Template(rf, ctx) {\n if (rf & 1) {\n const _r19 = i0.ɵɵgetCurrentView();\n\n i0.ɵɵelementStart(0, \"ngb-datepicker-navigation\", 13);\n i0.ɵɵlistener(\"navigate\", function NgbDatepicker_ngb_datepicker_navigation_5_Template_ngb_datepicker_navigation_navigate_0_listener($event) {\n i0.ɵɵrestoreView(_r19);\n const ctx_r18 = i0.ɵɵnextContext();\n return ctx_r18.onNavigateEvent($event);\n })(\"select\", function NgbDatepicker_ngb_datepicker_navigation_5_Template_ngb_datepicker_navigation_select_0_listener($event) {\n i0.ɵɵrestoreView(_r19);\n const ctx_r20 = i0.ɵɵnextContext();\n return ctx_r20.onNavigateDateSelect($event);\n });\n i0.ɵɵelementEnd();\n }\n\n if (rf & 2) {\n const ctx_r4 = i0.ɵɵnextContext();\n i0.ɵɵproperty(\"date\", ctx_r4.model.firstDate)(\"months\", ctx_r4.model.months)(\"disabled\", ctx_r4.model.disabled)(\"showSelect\", ctx_r4.model.navigation === \"select\")(\"prevDisabled\", ctx_r4.model.prevDisabled)(\"nextDisabled\", ctx_r4.model.nextDisabled)(\"selectBoxes\", ctx_r4.model.selectBoxes);\n }\n}\n\nfunction NgbDatepicker_ng_template_8_Template(rf, ctx) {}\n\nfunction NgbDatepicker_ng_template_9_Template(rf, ctx) {}\n\nfunction NgbDatepickerMonth_div_0_div_1_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 5);\n i0.ɵɵtext(1);\n i0.ɵɵelementEnd();\n }\n\n if (rf & 2) {\n const ctx_r2 = i0.ɵɵnextContext(2);\n i0.ɵɵadvance(1);\n i0.ɵɵtextInterpolate(ctx_r2.i18n.getWeekLabel());\n }\n}\n\nfunction NgbDatepickerMonth_div_0_div_2_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 6);\n i0.ɵɵtext(1);\n i0.ɵɵelementEnd();\n }\n\n if (rf & 2) {\n const weekday_r4 = ctx.$implicit;\n i0.ɵɵadvance(1);\n i0.ɵɵtextInterpolate(weekday_r4);\n }\n}\n\nfunction NgbDatepickerMonth_div_0_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 2);\n i0.ɵɵtemplate(1, NgbDatepickerMonth_div_0_div_1_Template, 2, 1, \"div\", 3);\n i0.ɵɵtemplate(2, NgbDatepickerMonth_div_0_div_2_Template, 2, 1, \"div\", 4);\n i0.ɵɵelementEnd();\n }\n\n if (rf & 2) {\n const ctx_r0 = i0.ɵɵnextContext();\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngIf\", ctx_r0.datepicker.showWeekNumbers);\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngForOf\", ctx_r0.viewModel.weekdays);\n }\n}\n\nfunction NgbDatepickerMonth_ng_template_1_div_0_div_1_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 11);\n i0.ɵɵtext(1);\n i0.ɵɵelementEnd();\n }\n\n if (rf & 2) {\n const week_r5 = i0.ɵɵnextContext(2).$implicit;\n const ctx_r7 = i0.ɵɵnextContext();\n i0.ɵɵadvance(1);\n i0.ɵɵtextInterpolate(ctx_r7.i18n.getWeekNumerals(week_r5.number));\n }\n}\n\nfunction NgbDatepickerMonth_ng_template_1_div_0_div_2_ng_template_1_ng_template_0_Template(rf, ctx) {}\n\nfunction NgbDatepickerMonth_ng_template_1_div_0_div_2_ng_template_1_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtemplate(0, NgbDatepickerMonth_ng_template_1_div_0_div_2_ng_template_1_ng_template_0_Template, 0, 0, \"ng-template\", 14);\n }\n\n if (rf & 2) {\n const day_r10 = i0.ɵɵnextContext().$implicit;\n const ctx_r11 = i0.ɵɵnextContext(3);\n i0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r11.datepicker.dayTemplate)(\"ngTemplateOutletContext\", day_r10.context);\n }\n}\n\nfunction NgbDatepickerMonth_ng_template_1_div_0_div_2_Template(rf, ctx) {\n if (rf & 1) {\n const _r15 = i0.ɵɵgetCurrentView();\n\n i0.ɵɵelementStart(0, \"div\", 12);\n i0.ɵɵlistener(\"click\", function NgbDatepickerMonth_ng_template_1_div_0_div_2_Template_div_click_0_listener($event) {\n const restoredCtx = i0.ɵɵrestoreView(_r15);\n const day_r10 = restoredCtx.$implicit;\n const ctx_r14 = i0.ɵɵnextContext(3);\n ctx_r14.doSelect(day_r10);\n return $event.preventDefault();\n });\n i0.ɵɵtemplate(1, NgbDatepickerMonth_ng_template_1_div_0_div_2_ng_template_1_Template, 1, 2, \"ng-template\", 13);\n i0.ɵɵelementEnd();\n }\n\n if (rf & 2) {\n const day_r10 = ctx.$implicit;\n i0.ɵɵclassProp(\"disabled\", day_r10.context.disabled)(\"hidden\", day_r10.hidden)(\"ngb-dp-today\", day_r10.context.today);\n i0.ɵɵproperty(\"tabindex\", day_r10.tabindex);\n i0.ɵɵattribute(\"aria-label\", day_r10.ariaLabel);\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngIf\", !day_r10.hidden);\n }\n}\n\nfunction NgbDatepickerMonth_ng_template_1_div_0_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 8);\n i0.ɵɵtemplate(1, NgbDatepickerMonth_ng_template_1_div_0_div_1_Template, 2, 1, \"div\", 9);\n i0.ɵɵtemplate(2, NgbDatepickerMonth_ng_template_1_div_0_div_2_Template, 2, 9, \"div\", 10);\n i0.ɵɵelementEnd();\n }\n\n if (rf & 2) {\n const week_r5 = i0.ɵɵnextContext().$implicit;\n const ctx_r6 = i0.ɵɵnextContext();\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngIf\", ctx_r6.datepicker.showWeekNumbers);\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngForOf\", week_r5.days);\n }\n}\n\nfunction NgbDatepickerMonth_ng_template_1_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtemplate(0, NgbDatepickerMonth_ng_template_1_div_0_Template, 3, 2, \"div\", 7);\n }\n\n if (rf & 2) {\n const week_r5 = ctx.$implicit;\n i0.ɵɵproperty(\"ngIf\", !week_r5.collapsed);\n }\n}\n\nconst _c31 = [\"dialog\"];\nconst _c32 = [\"ngbNavOutlet\", \"\"];\n\nfunction NgbNavOutlet_ng_template_0_div_0_ng_template_1_Template(rf, ctx) {}\n\nconst _c33 = function (a0) {\n return {\n $implicit: a0\n };\n};\n\nfunction NgbNavOutlet_ng_template_0_div_0_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 2);\n i0.ɵɵtemplate(1, NgbNavOutlet_ng_template_0_div_0_ng_template_1_Template, 0, 0, \"ng-template\", 3);\n i0.ɵɵelementEnd();\n }\n\n if (rf & 2) {\n const item_r1 = i0.ɵɵnextContext().$implicit;\n const ctx_r2 = i0.ɵɵnextContext();\n i0.ɵɵproperty(\"item\", item_r1)(\"nav\", ctx_r2.nav)(\"role\", ctx_r2.paneRole);\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngTemplateOutlet\", (item_r1.contentTpl == null ? null : item_r1.contentTpl.templateRef) || null)(\"ngTemplateOutletContext\", i0.ɵɵpureFunction1(5, _c33, item_r1.active || ctx_r2.isPanelTransitioning(item_r1)));\n }\n}\n\nfunction NgbNavOutlet_ng_template_0_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtemplate(0, NgbNavOutlet_ng_template_0_div_0_Template, 2, 7, \"div\", 1);\n }\n\n if (rf & 2) {\n const item_r1 = ctx.$implicit;\n const ctx_r0 = i0.ɵɵnextContext();\n i0.ɵɵproperty(\"ngIf\", item_r1.isPanelInDom() || ctx_r0.isPanelTransitioning(item_r1));\n }\n}\n\nfunction NgbPagination_ng_template_0_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"span\", 9);\n i0.ɵɵi18n(1, 10);\n i0.ɵɵelementEnd();\n }\n}\n\nfunction NgbPagination_ng_template_2_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"span\", 9);\n i0.ɵɵi18n(1, 11);\n i0.ɵɵelementEnd();\n }\n}\n\nfunction NgbPagination_ng_template_4_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"span\", 9);\n i0.ɵɵi18n(1, 12);\n i0.ɵɵelementEnd();\n }\n}\n\nfunction NgbPagination_ng_template_6_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"span\", 9);\n i0.ɵɵi18n(1, 13);\n i0.ɵɵelementEnd();\n }\n}\n\nfunction NgbPagination_ng_template_8_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtext(0, \"...\");\n }\n}\n\nfunction NgbPagination_ng_template_10_span_1_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"span\", 15);\n i0.ɵɵtext(1, \"(current)\");\n i0.ɵɵelementEnd();\n }\n}\n\nfunction NgbPagination_ng_template_10_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtext(0);\n i0.ɵɵtemplate(1, NgbPagination_ng_template_10_span_1_Template, 2, 0, \"span\", 14);\n }\n\n if (rf & 2) {\n const page_r19 = ctx.$implicit;\n const currentPage_r20 = ctx.currentPage;\n i0.ɵɵtextInterpolate1(\" \", page_r19, \" \");\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngIf\", page_r19 === currentPage_r20);\n }\n}\n\nfunction NgbPagination_ng_template_12_li_0_a_1_ng_template_1_Template(rf, ctx) {}\n\nconst _c42 = function (a1) {\n return {\n disabled: true,\n currentPage: a1\n };\n};\n\nfunction NgbPagination_ng_template_12_li_0_a_1_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"a\", 20);\n i0.ɵɵtemplate(1, NgbPagination_ng_template_12_li_0_a_1_ng_template_1_Template, 0, 0, \"ng-template\", 8);\n i0.ɵɵelementEnd();\n }\n\n if (rf & 2) {\n const page_r22 = i0.ɵɵnextContext(2).$implicit;\n const ctx_r27 = i0.ɵɵnextContext();\n\n const _r8 = i0.ɵɵreference(9);\n\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngTemplateOutlet\", (ctx_r27.tplEllipsis == null ? null : ctx_r27.tplEllipsis.templateRef) || _r8)(\"ngTemplateOutletContext\", i0.ɵɵpureFunction1(2, _c42, page_r22));\n }\n}\n\nfunction NgbPagination_ng_template_12_li_0_a_2_ng_template_1_Template(rf, ctx) {}\n\nconst _c43 = function (a0, a1, a2) {\n return {\n disabled: a0,\n $implicit: a1,\n currentPage: a2\n };\n};\n\nfunction NgbPagination_ng_template_12_li_0_a_2_Template(rf, ctx) {\n if (rf & 1) {\n const _r34 = i0.ɵɵgetCurrentView();\n\n i0.ɵɵelementStart(0, \"a\", 21);\n i0.ɵɵlistener(\"click\", function NgbPagination_ng_template_12_li_0_a_2_Template_a_click_0_listener($event) {\n i0.ɵɵrestoreView(_r34);\n const pageNumber_r26 = i0.ɵɵnextContext().$implicit;\n const ctx_r32 = i0.ɵɵnextContext(2);\n ctx_r32.selectPage(pageNumber_r26);\n return $event.preventDefault();\n });\n i0.ɵɵtemplate(1, NgbPagination_ng_template_12_li_0_a_2_ng_template_1_Template, 0, 0, \"ng-template\", 8);\n i0.ɵɵelementEnd();\n }\n\n if (rf & 2) {\n const pageNumber_r26 = i0.ɵɵnextContext().$implicit;\n const ctx_r35 = i0.ɵɵnextContext();\n const disabled_r24 = ctx_r35.disabled;\n const page_r22 = ctx_r35.$implicit;\n const ctx_r28 = i0.ɵɵnextContext();\n\n const _r10 = i0.ɵɵreference(11);\n\n i0.ɵɵattribute(\"tabindex\", disabled_r24 ? \"-1\" : null)(\"aria-disabled\", disabled_r24 ? \"true\" : null);\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngTemplateOutlet\", (ctx_r28.tplNumber == null ? null : ctx_r28.tplNumber.templateRef) || _r10)(\"ngTemplateOutletContext\", i0.ɵɵpureFunction3(4, _c43, disabled_r24, pageNumber_r26, page_r22));\n }\n}\n\nfunction NgbPagination_ng_template_12_li_0_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"li\", 17);\n i0.ɵɵtemplate(1, NgbPagination_ng_template_12_li_0_a_1_Template, 2, 4, \"a\", 18);\n i0.ɵɵtemplate(2, NgbPagination_ng_template_12_li_0_a_2_Template, 2, 8, \"a\", 19);\n i0.ɵɵelementEnd();\n }\n\n if (rf & 2) {\n const pageNumber_r26 = ctx.$implicit;\n const ctx_r37 = i0.ɵɵnextContext();\n const page_r22 = ctx_r37.$implicit;\n const disabled_r24 = ctx_r37.disabled;\n const ctx_r25 = i0.ɵɵnextContext();\n i0.ɵɵclassProp(\"active\", pageNumber_r26 === page_r22)(\"disabled\", ctx_r25.isEllipsis(pageNumber_r26) || disabled_r24);\n i0.ɵɵattribute(\"aria-current\", pageNumber_r26 === page_r22 ? \"page\" : null);\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngIf\", ctx_r25.isEllipsis(pageNumber_r26));\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngIf\", !ctx_r25.isEllipsis(pageNumber_r26));\n }\n}\n\nfunction NgbPagination_ng_template_12_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtemplate(0, NgbPagination_ng_template_12_li_0_Template, 3, 7, \"li\", 16);\n }\n\n if (rf & 2) {\n const pages_r23 = ctx.pages;\n i0.ɵɵproperty(\"ngForOf\", pages_r23);\n }\n}\n\nfunction NgbPagination_li_15_ng_template_2_Template(rf, ctx) {}\n\nconst _c46 = function (a0, a1) {\n return {\n disabled: a0,\n currentPage: a1\n };\n};\n\nfunction NgbPagination_li_15_Template(rf, ctx) {\n if (rf & 1) {\n const _r40 = i0.ɵɵgetCurrentView();\n\n i0.ɵɵelementStart(0, \"li\", 17)(1, \"a\", 22);\n i0.ɵɵlistener(\"click\", function NgbPagination_li_15_Template_a_click_1_listener($event) {\n i0.ɵɵrestoreView(_r40);\n const ctx_r39 = i0.ɵɵnextContext();\n ctx_r39.selectPage(1);\n return $event.preventDefault();\n });\n i0.ɵɵtemplate(2, NgbPagination_li_15_ng_template_2_Template, 0, 0, \"ng-template\", 8);\n i0.ɵɵelementEnd()();\n }\n\n if (rf & 2) {\n const ctx_r14 = i0.ɵɵnextContext();\n\n const _r0 = i0.ɵɵreference(1);\n\n i0.ɵɵclassProp(\"disabled\", ctx_r14.previousDisabled());\n i0.ɵɵadvance(1);\n i0.ɵɵattribute(\"tabindex\", ctx_r14.previousDisabled() ? \"-1\" : null)(\"aria-disabled\", ctx_r14.previousDisabled() ? \"true\" : null);\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngTemplateOutlet\", (ctx_r14.tplFirst == null ? null : ctx_r14.tplFirst.templateRef) || _r0)(\"ngTemplateOutletContext\", i0.ɵɵpureFunction2(6, _c46, ctx_r14.previousDisabled(), ctx_r14.page));\n }\n}\n\nfunction NgbPagination_li_16_ng_template_2_Template(rf, ctx) {}\n\nconst _c49 = function (a0) {\n return {\n disabled: a0\n };\n};\n\nfunction NgbPagination_li_16_Template(rf, ctx) {\n if (rf & 1) {\n const _r43 = i0.ɵɵgetCurrentView();\n\n i0.ɵɵelementStart(0, \"li\", 17)(1, \"a\", 23);\n i0.ɵɵlistener(\"click\", function NgbPagination_li_16_Template_a_click_1_listener($event) {\n i0.ɵɵrestoreView(_r43);\n const ctx_r42 = i0.ɵɵnextContext();\n ctx_r42.selectPage(ctx_r42.page - 1);\n return $event.preventDefault();\n });\n i0.ɵɵtemplate(2, NgbPagination_li_16_ng_template_2_Template, 0, 0, \"ng-template\", 8);\n i0.ɵɵelementEnd()();\n }\n\n if (rf & 2) {\n const ctx_r15 = i0.ɵɵnextContext();\n\n const _r2 = i0.ɵɵreference(3);\n\n i0.ɵɵclassProp(\"disabled\", ctx_r15.previousDisabled());\n i0.ɵɵadvance(1);\n i0.ɵɵattribute(\"tabindex\", ctx_r15.previousDisabled() ? \"-1\" : null)(\"aria-disabled\", ctx_r15.previousDisabled() ? \"true\" : null);\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngTemplateOutlet\", (ctx_r15.tplPrevious == null ? null : ctx_r15.tplPrevious.templateRef) || _r2)(\"ngTemplateOutletContext\", i0.ɵɵpureFunction1(6, _c49, ctx_r15.previousDisabled()));\n }\n}\n\nfunction NgbPagination_ng_template_17_Template(rf, ctx) {}\n\nfunction NgbPagination_li_18_ng_template_2_Template(rf, ctx) {}\n\nfunction NgbPagination_li_18_Template(rf, ctx) {\n if (rf & 1) {\n const _r46 = i0.ɵɵgetCurrentView();\n\n i0.ɵɵelementStart(0, \"li\", 17)(1, \"a\", 24);\n i0.ɵɵlistener(\"click\", function NgbPagination_li_18_Template_a_click_1_listener($event) {\n i0.ɵɵrestoreView(_r46);\n const ctx_r45 = i0.ɵɵnextContext();\n ctx_r45.selectPage(ctx_r45.page + 1);\n return $event.preventDefault();\n });\n i0.ɵɵtemplate(2, NgbPagination_li_18_ng_template_2_Template, 0, 0, \"ng-template\", 8);\n i0.ɵɵelementEnd()();\n }\n\n if (rf & 2) {\n const ctx_r17 = i0.ɵɵnextContext();\n\n const _r4 = i0.ɵɵreference(5);\n\n i0.ɵɵclassProp(\"disabled\", ctx_r17.nextDisabled());\n i0.ɵɵadvance(1);\n i0.ɵɵattribute(\"tabindex\", ctx_r17.nextDisabled() ? \"-1\" : null)(\"aria-disabled\", ctx_r17.nextDisabled() ? \"true\" : null);\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngTemplateOutlet\", (ctx_r17.tplNext == null ? null : ctx_r17.tplNext.templateRef) || _r4)(\"ngTemplateOutletContext\", i0.ɵɵpureFunction2(6, _c46, ctx_r17.nextDisabled(), ctx_r17.page));\n }\n}\n\nfunction NgbPagination_li_19_ng_template_2_Template(rf, ctx) {}\n\nfunction NgbPagination_li_19_Template(rf, ctx) {\n if (rf & 1) {\n const _r49 = i0.ɵɵgetCurrentView();\n\n i0.ɵɵelementStart(0, \"li\", 17)(1, \"a\", 25);\n i0.ɵɵlistener(\"click\", function NgbPagination_li_19_Template_a_click_1_listener($event) {\n i0.ɵɵrestoreView(_r49);\n const ctx_r48 = i0.ɵɵnextContext();\n ctx_r48.selectPage(ctx_r48.pageCount);\n return $event.preventDefault();\n });\n i0.ɵɵtemplate(2, NgbPagination_li_19_ng_template_2_Template, 0, 0, \"ng-template\", 8);\n i0.ɵɵelementEnd()();\n }\n\n if (rf & 2) {\n const ctx_r18 = i0.ɵɵnextContext();\n\n const _r6 = i0.ɵɵreference(7);\n\n i0.ɵɵclassProp(\"disabled\", ctx_r18.nextDisabled());\n i0.ɵɵadvance(1);\n i0.ɵɵattribute(\"tabindex\", ctx_r18.nextDisabled() ? \"-1\" : null)(\"aria-disabled\", ctx_r18.nextDisabled() ? \"true\" : null);\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngTemplateOutlet\", (ctx_r18.tplLast == null ? null : ctx_r18.tplLast.templateRef) || _r6)(\"ngTemplateOutletContext\", i0.ɵɵpureFunction2(6, _c46, ctx_r18.nextDisabled(), ctx_r18.page));\n }\n}\n\nconst _c54 = function (a0, a1, a2) {\n return {\n $implicit: a0,\n pages: a1,\n disabled: a2\n };\n};\n\nfunction NgbPopoverWindow_h3_1_ng_template_1_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtext(0);\n }\n\n if (rf & 2) {\n const ctx_r2 = i0.ɵɵnextContext(2);\n i0.ɵɵtextInterpolate(ctx_r2.title);\n }\n}\n\nfunction NgbPopoverWindow_h3_1_ng_template_3_Template(rf, ctx) {}\n\nfunction NgbPopoverWindow_h3_1_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"h3\", 3);\n i0.ɵɵtemplate(1, NgbPopoverWindow_h3_1_ng_template_1_Template, 1, 1, \"ng-template\", null, 4, i0.ɵɵtemplateRefExtractor);\n i0.ɵɵtemplate(3, NgbPopoverWindow_h3_1_ng_template_3_Template, 0, 0, \"ng-template\", 5);\n i0.ɵɵelementEnd();\n }\n\n if (rf & 2) {\n const _r1 = i0.ɵɵreference(2);\n\n const ctx_r0 = i0.ɵɵnextContext();\n i0.ɵɵadvance(3);\n i0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r0.isTitleTemplate() ? ctx_r0.title : _r1)(\"ngTemplateOutletContext\", ctx_r0.context);\n }\n}\n\nfunction NgbProgressbar_span_1_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"span\");\n i0.ɵɵi18n(1, 2);\n i0.ɵɵpipe(2, \"percent\");\n i0.ɵɵelementEnd();\n }\n\n if (rf & 2) {\n const ctx_r0 = i0.ɵɵnextContext();\n i0.ɵɵadvance(2);\n i0.ɵɵi18nExp(i0.ɵɵpipeBind1(2, 1, ctx_r0.getValue() / ctx_r0.max));\n i0.ɵɵi18nApply(1);\n }\n}\n\nfunction NgbRating_ng_template_0_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtext(0);\n }\n\n if (rf & 2) {\n const fill_r3 = ctx.fill;\n i0.ɵɵtextInterpolate(fill_r3 === 100 ? \"\\u2605\" : \"\\u2606\");\n }\n}\n\nfunction NgbRating_ng_template_2_ng_template_3_Template(rf, ctx) {}\n\nfunction NgbRating_ng_template_2_Template(rf, ctx) {\n if (rf & 1) {\n const _r7 = i0.ɵɵgetCurrentView();\n\n i0.ɵɵelementStart(0, \"span\", 2);\n i0.ɵɵtext(1);\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(2, \"span\", 3);\n i0.ɵɵlistener(\"mouseenter\", function NgbRating_ng_template_2_Template_span_mouseenter_2_listener() {\n const restoredCtx = i0.ɵɵrestoreView(_r7);\n const index_r4 = restoredCtx.index;\n const ctx_r6 = i0.ɵɵnextContext();\n return ctx_r6.enter(index_r4 + 1);\n })(\"click\", function NgbRating_ng_template_2_Template_span_click_2_listener() {\n const restoredCtx = i0.ɵɵrestoreView(_r7);\n const index_r4 = restoredCtx.index;\n const ctx_r8 = i0.ɵɵnextContext();\n return ctx_r8.handleClick(index_r4 + 1);\n });\n i0.ɵɵtemplate(3, NgbRating_ng_template_2_ng_template_3_Template, 0, 0, \"ng-template\", 4);\n i0.ɵɵelementEnd();\n }\n\n if (rf & 2) {\n const index_r4 = ctx.index;\n const ctx_r2 = i0.ɵɵnextContext();\n\n const _r0 = i0.ɵɵreference(1);\n\n i0.ɵɵadvance(1);\n i0.ɵɵtextInterpolate1(\"(\", index_r4 < ctx_r2.nextRate ? \"*\" : \" \", \")\");\n i0.ɵɵadvance(1);\n i0.ɵɵstyleProp(\"cursor\", ctx_r2.isInteractive() ? \"pointer\" : \"default\");\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r2.starTemplate || ctx_r2.starTemplateFromContent || _r0)(\"ngTemplateOutletContext\", ctx_r2.contexts[index_r4]);\n }\n}\n\nfunction NgbTimepicker_button_3_Template(rf, ctx) {\n if (rf & 1) {\n const _r9 = i0.ɵɵgetCurrentView();\n\n i0.ɵɵelementStart(0, \"button\", 11);\n i0.ɵɵlistener(\"click\", function NgbTimepicker_button_3_Template_button_click_0_listener() {\n i0.ɵɵrestoreView(_r9);\n const ctx_r8 = i0.ɵɵnextContext();\n return ctx_r8.changeHour(ctx_r8.hourStep);\n });\n i0.ɵɵelement(1, \"span\", 12);\n i0.ɵɵelementStart(2, \"span\", 13);\n i0.ɵɵi18n(3, 14);\n i0.ɵɵelementEnd()();\n }\n\n if (rf & 2) {\n const ctx_r0 = i0.ɵɵnextContext();\n i0.ɵɵclassProp(\"btn-sm\", ctx_r0.isSmallSize)(\"btn-lg\", ctx_r0.isLargeSize)(\"disabled\", ctx_r0.disabled);\n i0.ɵɵproperty(\"disabled\", ctx_r0.disabled);\n }\n}\n\nfunction NgbTimepicker_button_5_Template(rf, ctx) {\n if (rf & 1) {\n const _r11 = i0.ɵɵgetCurrentView();\n\n i0.ɵɵelementStart(0, \"button\", 11);\n i0.ɵɵlistener(\"click\", function NgbTimepicker_button_5_Template_button_click_0_listener() {\n i0.ɵɵrestoreView(_r11);\n const ctx_r10 = i0.ɵɵnextContext();\n return ctx_r10.changeHour(-ctx_r10.hourStep);\n });\n i0.ɵɵelement(1, \"span\", 15);\n i0.ɵɵelementStart(2, \"span\", 13);\n i0.ɵɵi18n(3, 16);\n i0.ɵɵelementEnd()();\n }\n\n if (rf & 2) {\n const ctx_r1 = i0.ɵɵnextContext();\n i0.ɵɵclassProp(\"btn-sm\", ctx_r1.isSmallSize)(\"btn-lg\", ctx_r1.isLargeSize)(\"disabled\", ctx_r1.disabled);\n i0.ɵɵproperty(\"disabled\", ctx_r1.disabled);\n }\n}\n\nfunction NgbTimepicker_button_9_Template(rf, ctx) {\n if (rf & 1) {\n const _r13 = i0.ɵɵgetCurrentView();\n\n i0.ɵɵelementStart(0, \"button\", 11);\n i0.ɵɵlistener(\"click\", function NgbTimepicker_button_9_Template_button_click_0_listener() {\n i0.ɵɵrestoreView(_r13);\n const ctx_r12 = i0.ɵɵnextContext();\n return ctx_r12.changeMinute(ctx_r12.minuteStep);\n });\n i0.ɵɵelement(1, \"span\", 12);\n i0.ɵɵelementStart(2, \"span\", 13);\n i0.ɵɵi18n(3, 17);\n i0.ɵɵelementEnd()();\n }\n\n if (rf & 2) {\n const ctx_r2 = i0.ɵɵnextContext();\n i0.ɵɵclassProp(\"btn-sm\", ctx_r2.isSmallSize)(\"btn-lg\", ctx_r2.isLargeSize)(\"disabled\", ctx_r2.disabled);\n i0.ɵɵproperty(\"disabled\", ctx_r2.disabled);\n }\n}\n\nfunction NgbTimepicker_button_11_Template(rf, ctx) {\n if (rf & 1) {\n const _r15 = i0.ɵɵgetCurrentView();\n\n i0.ɵɵelementStart(0, \"button\", 11);\n i0.ɵɵlistener(\"click\", function NgbTimepicker_button_11_Template_button_click_0_listener() {\n i0.ɵɵrestoreView(_r15);\n const ctx_r14 = i0.ɵɵnextContext();\n return ctx_r14.changeMinute(-ctx_r14.minuteStep);\n });\n i0.ɵɵelement(1, \"span\", 15);\n i0.ɵɵelementStart(2, \"span\", 13);\n i0.ɵɵi18n(3, 18);\n i0.ɵɵelementEnd()();\n }\n\n if (rf & 2) {\n const ctx_r3 = i0.ɵɵnextContext();\n i0.ɵɵclassProp(\"btn-sm\", ctx_r3.isSmallSize)(\"btn-lg\", ctx_r3.isLargeSize)(\"disabled\", ctx_r3.disabled);\n i0.ɵɵproperty(\"disabled\", ctx_r3.disabled);\n }\n}\n\nfunction NgbTimepicker_div_12_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 5);\n i0.ɵɵtext(1, \":\");\n i0.ɵɵelementEnd();\n }\n}\n\nfunction NgbTimepicker_div_13_button_1_Template(rf, ctx) {\n if (rf & 1) {\n const _r19 = i0.ɵɵgetCurrentView();\n\n i0.ɵɵelementStart(0, \"button\", 11);\n i0.ɵɵlistener(\"click\", function NgbTimepicker_div_13_button_1_Template_button_click_0_listener() {\n i0.ɵɵrestoreView(_r19);\n const ctx_r18 = i0.ɵɵnextContext(2);\n return ctx_r18.changeSecond(ctx_r18.secondStep);\n });\n i0.ɵɵelement(1, \"span\", 12);\n i0.ɵɵelementStart(2, \"span\", 13);\n i0.ɵɵi18n(3, 21);\n i0.ɵɵelementEnd()();\n }\n\n if (rf & 2) {\n const ctx_r16 = i0.ɵɵnextContext(2);\n i0.ɵɵclassProp(\"btn-sm\", ctx_r16.isSmallSize)(\"btn-lg\", ctx_r16.isLargeSize)(\"disabled\", ctx_r16.disabled);\n i0.ɵɵproperty(\"disabled\", ctx_r16.disabled);\n }\n}\n\nfunction NgbTimepicker_div_13_button_3_Template(rf, ctx) {\n if (rf & 1) {\n const _r21 = i0.ɵɵgetCurrentView();\n\n i0.ɵɵelementStart(0, \"button\", 11);\n i0.ɵɵlistener(\"click\", function NgbTimepicker_div_13_button_3_Template_button_click_0_listener() {\n i0.ɵɵrestoreView(_r21);\n const ctx_r20 = i0.ɵɵnextContext(2);\n return ctx_r20.changeSecond(-ctx_r20.secondStep);\n });\n i0.ɵɵelement(1, \"span\", 15);\n i0.ɵɵelementStart(2, \"span\", 13);\n i0.ɵɵi18n(3, 22);\n i0.ɵɵelementEnd()();\n }\n\n if (rf & 2) {\n const ctx_r17 = i0.ɵɵnextContext(2);\n i0.ɵɵclassProp(\"btn-sm\", ctx_r17.isSmallSize)(\"btn-lg\", ctx_r17.isLargeSize)(\"disabled\", ctx_r17.disabled);\n i0.ɵɵproperty(\"disabled\", ctx_r17.disabled);\n }\n}\n\nfunction NgbTimepicker_div_13_Template(rf, ctx) {\n if (rf & 1) {\n const _r23 = i0.ɵɵgetCurrentView();\n\n i0.ɵɵelementStart(0, \"div\", 19);\n i0.ɵɵtemplate(1, NgbTimepicker_div_13_button_1_Template, 4, 7, \"button\", 3);\n i0.ɵɵelementStart(2, \"input\", 20);\n i0.ɵɵlistener(\"change\", function NgbTimepicker_div_13_Template_input_change_2_listener($event) {\n i0.ɵɵrestoreView(_r23);\n const ctx_r22 = i0.ɵɵnextContext();\n return ctx_r22.updateSecond($event.target.value);\n })(\"blur\", function NgbTimepicker_div_13_Template_input_blur_2_listener() {\n i0.ɵɵrestoreView(_r23);\n const ctx_r24 = i0.ɵɵnextContext();\n return ctx_r24.handleBlur();\n })(\"input\", function NgbTimepicker_div_13_Template_input_input_2_listener($event) {\n i0.ɵɵrestoreView(_r23);\n const ctx_r25 = i0.ɵɵnextContext();\n return ctx_r25.formatInput($event.target);\n })(\"keydown.ArrowUp\", function NgbTimepicker_div_13_Template_input_keydown_ArrowUp_2_listener($event) {\n i0.ɵɵrestoreView(_r23);\n const ctx_r26 = i0.ɵɵnextContext();\n ctx_r26.changeSecond(ctx_r26.secondStep);\n return $event.preventDefault();\n })(\"keydown.ArrowDown\", function NgbTimepicker_div_13_Template_input_keydown_ArrowDown_2_listener($event) {\n i0.ɵɵrestoreView(_r23);\n const ctx_r27 = i0.ɵɵnextContext();\n ctx_r27.changeSecond(-ctx_r27.secondStep);\n return $event.preventDefault();\n });\n i0.ɵɵelementEnd();\n i0.ɵɵtemplate(3, NgbTimepicker_div_13_button_3_Template, 4, 7, \"button\", 3);\n i0.ɵɵelementEnd();\n }\n\n if (rf & 2) {\n const ctx_r5 = i0.ɵɵnextContext();\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngIf\", ctx_r5.spinners);\n i0.ɵɵadvance(1);\n i0.ɵɵclassProp(\"form-control-sm\", ctx_r5.isSmallSize)(\"form-control-lg\", ctx_r5.isLargeSize);\n i0.ɵɵproperty(\"value\", ctx_r5.formatMinSec(ctx_r5.model == null ? null : ctx_r5.model.second))(\"readOnly\", ctx_r5.readonlyInputs)(\"disabled\", ctx_r5.disabled);\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngIf\", ctx_r5.spinners);\n }\n}\n\nfunction NgbTimepicker_div_14_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelement(0, \"div\", 5);\n }\n}\n\nfunction NgbTimepicker_div_15_ng_container_2_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementContainerStart(0);\n i0.ɵɵi18n(1, 27);\n i0.ɵɵelementContainerEnd();\n }\n\n if (rf & 2) {\n const ctx_r28 = i0.ɵɵnextContext(2);\n i0.ɵɵadvance(1);\n i0.ɵɵi18nExp(ctx_r28.i18n.getAfternoonPeriod());\n i0.ɵɵi18nApply(1);\n }\n}\n\nfunction NgbTimepicker_div_15_ng_template_3_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵi18n(0, 28);\n }\n\n if (rf & 2) {\n const ctx_r30 = i0.ɵɵnextContext(2);\n i0.ɵɵi18nExp(ctx_r30.i18n.getMorningPeriod());\n i0.ɵɵi18nApply(0);\n }\n}\n\nfunction NgbTimepicker_div_15_Template(rf, ctx) {\n if (rf & 1) {\n const _r32 = i0.ɵɵgetCurrentView();\n\n i0.ɵɵelementStart(0, \"div\", 23)(1, \"button\", 24);\n i0.ɵɵlistener(\"click\", function NgbTimepicker_div_15_Template_button_click_1_listener() {\n i0.ɵɵrestoreView(_r32);\n const ctx_r31 = i0.ɵɵnextContext();\n return ctx_r31.toggleMeridian();\n });\n i0.ɵɵtemplate(2, NgbTimepicker_div_15_ng_container_2_Template, 2, 1, \"ng-container\", 25);\n i0.ɵɵtemplate(3, NgbTimepicker_div_15_ng_template_3_Template, 1, 1, \"ng-template\", null, 26, i0.ɵɵtemplateRefExtractor);\n i0.ɵɵelementEnd()();\n }\n\n if (rf & 2) {\n const _r29 = i0.ɵɵreference(4);\n\n const ctx_r7 = i0.ɵɵnextContext();\n i0.ɵɵadvance(1);\n i0.ɵɵclassProp(\"btn-sm\", ctx_r7.isSmallSize)(\"btn-lg\", ctx_r7.isLargeSize)(\"disabled\", ctx_r7.disabled);\n i0.ɵɵproperty(\"disabled\", ctx_r7.disabled);\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngIf\", ctx_r7.model && ctx_r7.model.hour >= 12)(\"ngIfElse\", _r29);\n }\n}\n\nfunction NgbToast_ng_template_0_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"strong\", 3);\n i0.ɵɵtext(1);\n i0.ɵɵelementEnd();\n }\n\n if (rf & 2) {\n const ctx_r1 = i0.ɵɵnextContext();\n i0.ɵɵadvance(1);\n i0.ɵɵtextInterpolate(ctx_r1.header);\n }\n}\n\nfunction NgbToast_ng_template_2_ng_template_1_Template(rf, ctx) {}\n\nfunction NgbToast_ng_template_2_Template(rf, ctx) {\n if (rf & 1) {\n const _r5 = i0.ɵɵgetCurrentView();\n\n i0.ɵɵelementStart(0, \"div\", 4);\n i0.ɵɵtemplate(1, NgbToast_ng_template_2_ng_template_1_Template, 0, 0, \"ng-template\", 5);\n i0.ɵɵelementStart(2, \"button\", 6);\n i0.ɵɵlistener(\"click\", function NgbToast_ng_template_2_Template_button_click_2_listener() {\n i0.ɵɵrestoreView(_r5);\n const ctx_r4 = i0.ɵɵnextContext();\n return ctx_r4.hide();\n });\n i0.ɵɵelementEnd()();\n }\n\n if (rf & 2) {\n const ctx_r2 = i0.ɵɵnextContext();\n\n const _r0 = i0.ɵɵreference(1);\n\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r2.contentHeaderTpl || _r0);\n }\n}\n\nfunction NgbHighlight_ng_template_0_span_0_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"span\");\n i0.ɵɵtext(1);\n i0.ɵɵelementEnd();\n }\n\n if (rf & 2) {\n const part_r1 = i0.ɵɵnextContext().$implicit;\n const ctx_r3 = i0.ɵɵnextContext();\n i0.ɵɵclassMap(ctx_r3.highlightClass);\n i0.ɵɵadvance(1);\n i0.ɵɵtextInterpolate(part_r1);\n }\n}\n\nfunction NgbHighlight_ng_template_0_ng_template_1_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtext(0);\n }\n\n if (rf & 2) {\n const part_r1 = i0.ɵɵnextContext().$implicit;\n i0.ɵɵtextInterpolate(part_r1);\n }\n}\n\nfunction NgbHighlight_ng_template_0_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtemplate(0, NgbHighlight_ng_template_0_span_0_Template, 2, 3, \"span\", 1);\n i0.ɵɵtemplate(1, NgbHighlight_ng_template_0_ng_template_1_Template, 1, 1, \"ng-template\", null, 2, i0.ɵɵtemplateRefExtractor);\n }\n\n if (rf & 2) {\n const isOdd_r2 = ctx.odd;\n\n const _r4 = i0.ɵɵreference(2);\n\n i0.ɵɵproperty(\"ngIf\", isOdd_r2)(\"ngIfElse\", _r4);\n }\n}\n\nfunction NgbTypeaheadWindow_ng_template_0_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelement(0, \"ngb-highlight\", 2);\n }\n\n if (rf & 2) {\n const result_r3 = ctx.result;\n const term_r4 = ctx.term;\n const formatter_r5 = ctx.formatter;\n i0.ɵɵproperty(\"result\", formatter_r5(result_r3))(\"term\", term_r4);\n }\n}\n\nfunction NgbTypeaheadWindow_ng_template_2_ng_template_1_Template(rf, ctx) {}\n\nconst _c87 = function (a0, a1, a2) {\n return {\n result: a0,\n term: a1,\n formatter: a2\n };\n};\n\nfunction NgbTypeaheadWindow_ng_template_2_Template(rf, ctx) {\n if (rf & 1) {\n const _r10 = i0.ɵɵgetCurrentView();\n\n i0.ɵɵelementStart(0, \"button\", 3);\n i0.ɵɵlistener(\"mouseenter\", function NgbTypeaheadWindow_ng_template_2_Template_button_mouseenter_0_listener() {\n const restoredCtx = i0.ɵɵrestoreView(_r10);\n const idx_r7 = restoredCtx.index;\n const ctx_r9 = i0.ɵɵnextContext();\n return ctx_r9.markActive(idx_r7);\n })(\"click\", function NgbTypeaheadWindow_ng_template_2_Template_button_click_0_listener() {\n const restoredCtx = i0.ɵɵrestoreView(_r10);\n const result_r6 = restoredCtx.$implicit;\n const ctx_r11 = i0.ɵɵnextContext();\n return ctx_r11.select(result_r6);\n });\n i0.ɵɵtemplate(1, NgbTypeaheadWindow_ng_template_2_ng_template_1_Template, 0, 0, \"ng-template\", 4);\n i0.ɵɵelementEnd();\n }\n\n if (rf & 2) {\n const result_r6 = ctx.$implicit;\n const idx_r7 = ctx.index;\n const ctx_r2 = i0.ɵɵnextContext();\n\n const _r0 = i0.ɵɵreference(1);\n\n i0.ɵɵclassProp(\"active\", idx_r7 === ctx_r2.activeIdx);\n i0.ɵɵproperty(\"id\", ctx_r2.id + \"-\" + idx_r7);\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r2.resultTemplate || _r0)(\"ngTemplateOutletContext\", i0.ɵɵpureFunction3(5, _c87, result_r6, ctx_r2.term, ctx_r2.formatter));\n }\n}\n\nfunction toInteger(value) {\n return parseInt(`${value}`, 10);\n}\n\nfunction toString(value) {\n return value !== undefined && value !== null ? `${value}` : '';\n}\n\nfunction getValueInRange(value, max, min = 0) {\n return Math.max(Math.min(value, max), min);\n}\n\nfunction isString(value) {\n return typeof value === 'string';\n}\n\nfunction isNumber(value) {\n return !isNaN(toInteger(value));\n}\n\nfunction isInteger(value) {\n return typeof value === 'number' && isFinite(value) && Math.floor(value) === value;\n}\n\nfunction isDefined(value) {\n return value !== undefined && value !== null;\n}\n\nfunction isPromise(v) {\n return v && v.then;\n}\n\nfunction padNumber(value) {\n if (isNumber(value)) {\n return `0${value}`.slice(-2);\n } else {\n return '';\n }\n}\n\nfunction regExpEscape(text) {\n return text.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n}\n\nfunction hasClassName(element, className) {\n return element && element.className && element.className.split && element.className.split(/\\s+/).indexOf(className) >= 0;\n}\n\nfunction closest(element, selector) {\n if (!selector) {\n return null;\n }\n /*\n * In certain browsers (e.g. Edge 44.18362.449.0) HTMLDocument does\n * not support `Element.prototype.closest`. To emulate the correct behaviour\n * we return null when the method is missing.\n *\n * Note that in evergreen browsers `closest(document.documentElement, 'html')`\n * will return the document element whilst in Edge null will be returned. This\n * compromise was deemed good enough.\n */\n\n\n if (typeof element.closest === 'undefined') {\n return null;\n }\n\n return element.closest(selector);\n}\n/**\n * Force a browser reflow\n * @param element element where to apply the reflow\n */\n\n\nfunction reflow(element) {\n return (element || document.body).getBoundingClientRect();\n}\n/**\n * Creates an observable where all callbacks are executed inside a given zone\n *\n * @param zone\n */\n\n\nfunction runInZone(zone) {\n return source => {\n return new Observable(observer => {\n const next = value => zone.run(() => observer.next(value));\n\n const error = e => zone.run(() => observer.error(e));\n\n const complete = () => zone.run(() => observer.complete());\n\n return source.subscribe({\n next,\n error,\n complete\n });\n });\n };\n}\n\nfunction removeAccents(str) {\n return str.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '');\n}\n\nfunction getTransitionDurationMs(element) {\n const {\n transitionDelay,\n transitionDuration\n } = window.getComputedStyle(element);\n const transitionDelaySec = parseFloat(transitionDelay);\n const transitionDurationSec = parseFloat(transitionDuration);\n return (transitionDelaySec + transitionDurationSec) * 1000;\n}\n\nconst environment = {\n animation: true,\n transitionTimerDelayMs: 5\n};\n\nconst noopFn = () => {};\n\nconst {\n transitionTimerDelayMs\n} = environment;\nconst runningTransitions = new Map();\n\nconst ngbRunTransition = (zone, element, startFn, options) => {\n // Getting initial context from options\n let context = options.context || {}; // Checking if there are already running transitions on the given element.\n\n const running = runningTransitions.get(element);\n\n if (running) {\n switch (options.runningTransition) {\n // If there is one running and we want for it to 'continue' to run, we have to cancel the new one.\n // We're not emitting any values, but simply completing the observable (EMPTY).\n case 'continue':\n return EMPTY;\n // If there is one running and we want for it to 'stop', we have to complete the running one.\n // We're simply completing the running one and not emitting any values and merging newly provided context\n // with the one coming from currently running transition.\n\n case 'stop':\n zone.run(() => running.transition$.complete());\n context = Object.assign(running.context, context);\n runningTransitions.delete(element);\n }\n } // Running the start function\n\n\n const endFn = startFn(element, options.animation, context) || noopFn; // If 'prefer-reduced-motion' is enabled, the 'transition' will be set to 'none'.\n // If animations are disabled, we have to emit a value and complete the observable\n // In this case we have to call the end function, but can finish immediately by emitting a value,\n // completing the observable and executing end functions synchronously.\n\n if (!options.animation || window.getComputedStyle(element).transitionProperty === 'none') {\n zone.run(() => endFn());\n return of(undefined).pipe(runInZone(zone));\n } // Starting a new transition\n\n\n const transition$ = new Subject();\n const finishTransition$ = new Subject();\n const stop$ = transition$.pipe(endWith(true));\n runningTransitions.set(element, {\n transition$,\n complete: () => {\n finishTransition$.next();\n finishTransition$.complete();\n },\n context\n });\n const transitionDurationMs = getTransitionDurationMs(element); // 1. We have to both listen for the 'transitionend' event and have a 'just-in-case' timer,\n // because 'transitionend' event might not be fired in some browsers, if the transitioning\n // element becomes invisible (ex. when scrolling, making browser tab inactive, etc.). The timer\n // guarantees, that we'll release the DOM element and complete 'ngbRunTransition'.\n // 2. We need to filter transition end events, because they might bubble from shorter transitions\n // on inner DOM elements. We're only interested in the transition on the 'element' itself.\n\n zone.runOutsideAngular(() => {\n const transitionEnd$ = fromEvent(element, 'transitionend').pipe(takeUntil(stop$), filter(({\n target\n }) => target === element));\n const timer$ = timer(transitionDurationMs + transitionTimerDelayMs).pipe(takeUntil(stop$));\n race(timer$, transitionEnd$, finishTransition$).pipe(takeUntil(stop$)).subscribe(() => {\n runningTransitions.delete(element);\n zone.run(() => {\n endFn();\n transition$.next();\n transition$.complete();\n });\n });\n });\n return transition$.asObservable();\n};\n\nconst ngbCompleteTransition = element => {\n var _a;\n\n (_a = runningTransitions.get(element)) === null || _a === void 0 ? void 0 : _a.complete();\n};\n\nfunction measureCollapsingElementHeightPx(element) {\n // SSR fix for without injecting the PlatformId\n if (typeof navigator === 'undefined') {\n return '0px';\n }\n\n const {\n classList\n } = element;\n const hasShownClass = classList.contains('show');\n\n if (!hasShownClass) {\n classList.add('show');\n }\n\n element.style.height = '';\n const height = element.getBoundingClientRect().height + 'px';\n\n if (!hasShownClass) {\n classList.remove('show');\n }\n\n return height;\n}\n\nconst ngbCollapsingTransition = (element, animation, context) => {\n let {\n direction,\n maxHeight\n } = context;\n const {\n classList\n } = element;\n\n function setInitialClasses() {\n classList.add('collapse');\n\n if (direction === 'show') {\n classList.add('show');\n } else {\n classList.remove('show');\n }\n } // without animations we just need to set initial classes\n\n\n if (!animation) {\n setInitialClasses();\n return;\n } // No maxHeight -> running the transition for the first time\n\n\n if (!maxHeight) {\n maxHeight = measureCollapsingElementHeightPx(element);\n context.maxHeight = maxHeight; // Fix the height before starting the animation\n\n element.style.height = direction !== 'show' ? maxHeight : '0px';\n classList.remove('collapse');\n classList.remove('collapsing');\n classList.remove('show');\n reflow(element); // Start the animation\n\n classList.add('collapsing');\n } // Start or revert the animation\n\n\n element.style.height = direction === 'show' ? maxHeight : '0px';\n return () => {\n setInitialClasses();\n classList.remove('collapsing');\n element.style.height = '';\n };\n};\n/**\n * Global ng-bootstrap config\n *\n * @since 8.0.0\n */\n\n\nlet NgbConfig = /*#__PURE__*/(() => {\n class NgbConfig {\n constructor() {\n this.animation = environment.animation;\n }\n\n }\n\n NgbConfig.ɵfac = function NgbConfig_Factory(t) {\n return new (t || NgbConfig)();\n };\n\n NgbConfig.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbConfig,\n factory: NgbConfig.ɵfac,\n providedIn: 'root'\n });\n return NgbConfig;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A configuration service for the [NgbAccordion](#/components/accordion/api#NgbAccordion) component.\n *\n * You can inject this service, typically in your root component, and customize its properties\n * to provide default values for all accordions used in the application.\n */\n\n\nlet NgbAccordionConfig = /*#__PURE__*/(() => {\n class NgbAccordionConfig {\n constructor(_ngbConfig) {\n this._ngbConfig = _ngbConfig;\n this.closeOthers = false;\n }\n\n get animation() {\n return this._animation === undefined ? this._ngbConfig.animation : this._animation;\n }\n\n set animation(animation) {\n this._animation = animation;\n }\n\n }\n\n NgbAccordionConfig.ɵfac = function NgbAccordionConfig_Factory(t) {\n return new (t || NgbAccordionConfig)(i0.ɵɵinject(NgbConfig));\n };\n\n NgbAccordionConfig.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbAccordionConfig,\n factory: NgbAccordionConfig.ɵfac,\n providedIn: 'root'\n });\n return NgbAccordionConfig;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nlet nextId$4 = 0;\n/**\n * A directive that wraps an accordion panel header with any HTML markup and a toggling button\n * marked with [`NgbPanelToggle`](#/components/accordion/api#NgbPanelToggle).\n * See the [header customization demo](#/components/accordion/examples#header) for more details.\n *\n * You can also use [`NgbPanelTitle`](#/components/accordion/api#NgbPanelTitle) to customize only the panel title.\n *\n * @since 4.1.0\n */\n\nlet NgbPanelHeader = /*#__PURE__*/(() => {\n class NgbPanelHeader {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n\n }\n\n NgbPanelHeader.ɵfac = function NgbPanelHeader_Factory(t) {\n return new (t || NgbPanelHeader)(i0.ɵɵdirectiveInject(i0.TemplateRef));\n };\n\n NgbPanelHeader.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbPanelHeader,\n selectors: [[\"ng-template\", \"ngbPanelHeader\", \"\"]]\n });\n return NgbPanelHeader;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A directive that wraps only the panel title with HTML markup inside.\n *\n * You can also use [`NgbPanelHeader`](#/components/accordion/api#NgbPanelHeader) to customize the full panel header.\n */\n\n\nlet NgbPanelTitle = /*#__PURE__*/(() => {\n class NgbPanelTitle {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n\n }\n\n NgbPanelTitle.ɵfac = function NgbPanelTitle_Factory(t) {\n return new (t || NgbPanelTitle)(i0.ɵɵdirectiveInject(i0.TemplateRef));\n };\n\n NgbPanelTitle.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbPanelTitle,\n selectors: [[\"ng-template\", \"ngbPanelTitle\", \"\"]]\n });\n return NgbPanelTitle;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A directive that wraps the accordion panel content.\n */\n\n\nlet NgbPanelContent = /*#__PURE__*/(() => {\n class NgbPanelContent {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n\n }\n\n NgbPanelContent.ɵfac = function NgbPanelContent_Factory(t) {\n return new (t || NgbPanelContent)(i0.ɵɵdirectiveInject(i0.TemplateRef));\n };\n\n NgbPanelContent.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbPanelContent,\n selectors: [[\"ng-template\", \"ngbPanelContent\", \"\"]]\n });\n return NgbPanelContent;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A directive that wraps an individual accordion panel with title and collapsible content.\n */\n\n\nlet NgbPanel = /*#__PURE__*/(() => {\n class NgbPanel {\n constructor() {\n /**\n * If `true`, the panel is disabled an can't be toggled.\n */\n this.disabled = false;\n /**\n * An optional id for the panel that must be unique on the page.\n *\n * If not provided, it will be auto-generated in the `ngb-panel-xxx` format.\n */\n\n this.id = `ngb-panel-${nextId$4++}`;\n this.isOpen = false;\n /* A flag to specified that the transition panel classes have been initialized */\n\n this.initClassDone = false;\n /* A flag to specified if the panel is currently being animated, to ensure its presence in the dom */\n\n this.transitionRunning = false;\n /**\n * An event emitted when the panel is shown, after the transition. It has no payload.\n *\n * @since 8.0.0\n */\n\n this.shown = new EventEmitter();\n /**\n * An event emitted when the panel is hidden, after the transition. It has no payload.\n *\n * @since 8.0.0\n */\n\n this.hidden = new EventEmitter();\n }\n\n ngAfterContentChecked() {\n // We are using @ContentChildren instead of @ContentChild as in the Angular version being used\n // only @ContentChildren allows us to specify the {descendants: false} option.\n // Without {descendants: false} we are hitting bugs described in:\n // https://github.com/ng-bootstrap/ng-bootstrap/issues/2240\n this.titleTpl = this.titleTpls.first;\n this.headerTpl = this.headerTpls.first;\n this.contentTpl = this.contentTpls.first;\n }\n\n }\n\n NgbPanel.ɵfac = function NgbPanel_Factory(t) {\n return new (t || NgbPanel)();\n };\n\n NgbPanel.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbPanel,\n selectors: [[\"ngb-panel\"]],\n contentQueries: function NgbPanel_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, NgbPanelTitle, 4);\n i0.ɵɵcontentQuery(dirIndex, NgbPanelHeader, 4);\n i0.ɵɵcontentQuery(dirIndex, NgbPanelContent, 4);\n }\n\n if (rf & 2) {\n let _t;\n\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.titleTpls = _t);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.headerTpls = _t);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.contentTpls = _t);\n }\n },\n inputs: {\n disabled: \"disabled\",\n id: \"id\",\n title: \"title\",\n type: \"type\",\n cardClass: \"cardClass\"\n },\n outputs: {\n shown: \"shown\",\n hidden: \"hidden\"\n }\n });\n return NgbPanel;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nlet NgbRefDirective = /*#__PURE__*/(() => {\n class NgbRefDirective {\n constructor(_El) {\n this._El = _El;\n this.ngbRef = new EventEmitter();\n }\n\n ngOnInit() {\n this.ngbRef.emit(this._El.nativeElement);\n }\n\n ngOnDestroy() {\n this.ngbRef.emit(null);\n }\n\n }\n\n NgbRefDirective.ɵfac = function NgbRefDirective_Factory(t) {\n return new (t || NgbRefDirective)(i0.ɵɵdirectiveInject(i0.ElementRef));\n };\n\n NgbRefDirective.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbRefDirective,\n selectors: [[\"\", \"ngbRef\", \"\"]],\n outputs: {\n ngbRef: \"ngbRef\"\n }\n });\n return NgbRefDirective;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Accordion is a collection of collapsible panels (bootstrap cards).\n *\n * It can ensure only one panel is opened at a time and allows to customize panel\n * headers.\n */\n\n\nlet NgbAccordion = /*#__PURE__*/(() => {\n class NgbAccordion {\n constructor(config, _ngZone, _changeDetector) {\n this._ngZone = _ngZone;\n this._changeDetector = _changeDetector;\n /**\n * An array or comma separated strings of panel ids that should be opened **initially**.\n *\n * For subsequent changes use methods like `expand()`, `collapse()`, etc. and\n * the `(panelChange)` event.\n */\n\n this.activeIds = [];\n /**\n * If `true`, panel content will be detached from DOM and not simply hidden when the panel is collapsed.\n */\n\n this.destroyOnHide = true;\n /**\n * Event emitted right before the panel toggle happens.\n *\n * See [NgbPanelChangeEvent](#/components/accordion/api#NgbPanelChangeEvent) for payload details.\n */\n\n this.panelChange = new EventEmitter();\n /**\n * An event emitted when the expanding animation is finished on the panel. The payload is the panel id.\n *\n * @since 8.0.0\n */\n\n this.shown = new EventEmitter();\n /**\n * An event emitted when the collapsing animation is finished on the panel, and before the panel element is removed.\n * The payload is the panel id.\n *\n * @since 8.0.0\n */\n\n this.hidden = new EventEmitter();\n this.animation = config.animation;\n this.type = config.type;\n this.closeOtherPanels = config.closeOthers;\n }\n /**\n * Checks if a panel with a given id is expanded.\n */\n\n\n isExpanded(panelId) {\n return this.activeIds.indexOf(panelId) > -1;\n }\n /**\n * Expands a panel with a given id.\n *\n * Has no effect if the panel is already expanded or disabled.\n */\n\n\n expand(panelId) {\n this._changeOpenState(this._findPanelById(panelId), true);\n }\n /**\n * Expands all panels, if `[closeOthers]` is `false`.\n *\n * If `[closeOthers]` is `true`, it will expand the first panel, unless there is already a panel opened.\n */\n\n\n expandAll() {\n if (this.closeOtherPanels) {\n if (this.activeIds.length === 0 && this.panels.length) {\n this._changeOpenState(this.panels.first, true);\n }\n } else {\n this.panels.forEach(panel => this._changeOpenState(panel, true));\n }\n }\n /**\n * Collapses a panel with the given id.\n *\n * Has no effect if the panel is already collapsed or disabled.\n */\n\n\n collapse(panelId) {\n this._changeOpenState(this._findPanelById(panelId), false);\n }\n /**\n * Collapses all opened panels.\n */\n\n\n collapseAll() {\n this.panels.forEach(panel => {\n this._changeOpenState(panel, false);\n });\n }\n /**\n * Toggles a panel with the given id.\n *\n * Has no effect if the panel is disabled.\n */\n\n\n toggle(panelId) {\n const panel = this._findPanelById(panelId);\n\n if (panel) {\n this._changeOpenState(panel, !panel.isOpen);\n }\n }\n\n ngAfterContentChecked() {\n // active id updates\n if (isString(this.activeIds)) {\n this.activeIds = this.activeIds.split(/\\s*,\\s*/);\n } // update panels open states\n\n\n this.panels.forEach(panel => {\n panel.isOpen = !panel.disabled && this.activeIds.indexOf(panel.id) > -1;\n }); // closeOthers updates\n\n if (this.activeIds.length > 1 && this.closeOtherPanels) {\n this._closeOthers(this.activeIds[0], false);\n\n this._updateActiveIds();\n } // Setup the initial classes here\n\n\n this._ngZone.onStable.pipe(take(1)).subscribe(() => {\n this.panels.forEach(panel => {\n const panelElement = panel.panelDiv;\n\n if (panelElement) {\n if (!panel.initClassDone) {\n panel.initClassDone = true;\n ngbRunTransition(this._ngZone, panelElement, ngbCollapsingTransition, {\n animation: false,\n runningTransition: 'continue',\n context: {\n direction: panel.isOpen ? 'show' : 'hide'\n }\n });\n }\n } else {\n // Classes must be initialized next time it will be in the dom\n panel.initClassDone = false;\n }\n });\n });\n }\n\n _changeOpenState(panel, nextState) {\n if (panel != null && !panel.disabled && panel.isOpen !== nextState) {\n let defaultPrevented = false;\n this.panelChange.emit({\n panelId: panel.id,\n nextState: nextState,\n preventDefault: () => {\n defaultPrevented = true;\n }\n });\n\n if (!defaultPrevented) {\n panel.isOpen = nextState;\n panel.transitionRunning = true;\n\n if (nextState && this.closeOtherPanels) {\n this._closeOthers(panel.id);\n }\n\n this._updateActiveIds();\n\n this._runTransitions(this.animation);\n }\n }\n }\n\n _closeOthers(panelId, enableTransition = true) {\n this.panels.forEach(panel => {\n if (panel.id !== panelId && panel.isOpen) {\n panel.isOpen = false;\n panel.transitionRunning = enableTransition;\n }\n });\n }\n\n _findPanelById(panelId) {\n return this.panels.find(p => p.id === panelId) || null;\n }\n\n _updateActiveIds() {\n this.activeIds = this.panels.filter(panel => panel.isOpen && !panel.disabled).map(panel => panel.id);\n }\n\n _runTransitions(animation) {\n // detectChanges is performed to ensure that all panels are in the dom (via transitionRunning = true)\n // before starting the animation\n this._changeDetector.detectChanges();\n\n this.panels.forEach(panel => {\n // When panel.transitionRunning is true, the transition needs to be started OR reversed,\n // The direction (show or hide) is choosen by each panel.isOpen state\n if (panel.transitionRunning) {\n const panelElement = panel.panelDiv;\n ngbRunTransition(this._ngZone, panelElement, ngbCollapsingTransition, {\n animation,\n runningTransition: 'stop',\n context: {\n direction: panel.isOpen ? 'show' : 'hide'\n }\n }).subscribe(() => {\n panel.transitionRunning = false;\n const {\n id\n } = panel;\n\n if (panel.isOpen) {\n panel.shown.emit();\n this.shown.emit(id);\n } else {\n panel.hidden.emit();\n this.hidden.emit(id);\n }\n });\n }\n });\n }\n\n }\n\n NgbAccordion.ɵfac = function NgbAccordion_Factory(t) {\n return new (t || NgbAccordion)(i0.ɵɵdirectiveInject(NgbAccordionConfig), i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef));\n };\n\n NgbAccordion.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: NgbAccordion,\n selectors: [[\"ngb-accordion\"]],\n contentQueries: function NgbAccordion_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, NgbPanel, 4);\n }\n\n if (rf & 2) {\n let _t;\n\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.panels = _t);\n }\n },\n hostAttrs: [\"role\", \"tablist\", 1, \"accordion\"],\n hostVars: 1,\n hostBindings: function NgbAccordion_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵattribute(\"aria-multiselectable\", !ctx.closeOtherPanels);\n }\n },\n inputs: {\n animation: \"animation\",\n activeIds: \"activeIds\",\n closeOtherPanels: [\"closeOthers\", \"closeOtherPanels\"],\n destroyOnHide: \"destroyOnHide\",\n type: \"type\"\n },\n outputs: {\n panelChange: \"panelChange\",\n shown: \"shown\",\n hidden: \"hidden\"\n },\n exportAs: [\"ngbAccordion\"],\n decls: 3,\n vars: 1,\n consts: [[\"ngbPanelHeader\", \"\"], [\"t\", \"\"], [\"ngFor\", \"\", 3, \"ngForOf\"], [1, \"accordion-button\", 3, \"ngbPanelToggle\"], [3, \"ngTemplateOutlet\"], [\"role\", \"tab\", 3, \"id\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"], [\"role\", \"tabpanel\", 3, \"id\", \"ngbRef\", 4, \"ngIf\"], [\"role\", \"tabpanel\", 3, \"id\", \"ngbRef\"], [1, \"accordion-body\"]],\n template: function NgbAccordion_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtemplate(0, NgbAccordion_ng_template_0_Template, 3, 3, \"ng-template\", 0, 1, i0.ɵɵtemplateRefExtractor);\n i0.ɵɵtemplate(2, NgbAccordion_ng_template_2_Template, 4, 11, \"ng-template\", 2);\n }\n\n if (rf & 2) {\n i0.ɵɵadvance(2);\n i0.ɵɵproperty(\"ngForOf\", ctx.panels);\n }\n },\n directives: function () {\n return [NgbPanelHeader, NgbPanelToggle, i2.NgTemplateOutlet, i2.NgForOf, i2.NgIf, NgbRefDirective];\n },\n encapsulation: 2\n });\n return NgbAccordion;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A directive to put on a button that toggles panel opening and closing.\n *\n * To be used inside the [`NgbPanelHeader`](#/components/accordion/api#NgbPanelHeader)\n *\n * @since 4.1.0\n */\n\n\nlet NgbPanelToggle = /*#__PURE__*/(() => {\n class NgbPanelToggle {\n constructor(accordion, panel) {\n this.accordion = accordion;\n this.panel = panel;\n }\n\n set ngbPanelToggle(panel) {\n if (panel) {\n this.panel = panel;\n }\n }\n\n }\n\n NgbPanelToggle.ɵfac = function NgbPanelToggle_Factory(t) {\n return new (t || NgbPanelToggle)(i0.ɵɵdirectiveInject(NgbAccordion), i0.ɵɵdirectiveInject(NgbPanel, 9));\n };\n\n NgbPanelToggle.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbPanelToggle,\n selectors: [[\"button\", \"ngbPanelToggle\", \"\"]],\n hostAttrs: [\"type\", \"button\"],\n hostVars: 5,\n hostBindings: function NgbPanelToggle_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"click\", function NgbPanelToggle_click_HostBindingHandler() {\n return ctx.accordion.toggle(ctx.panel.id);\n });\n }\n\n if (rf & 2) {\n i0.ɵɵhostProperty(\"disabled\", ctx.panel.disabled);\n i0.ɵɵattribute(\"aria-expanded\", ctx.panel.isOpen)(\"aria-controls\", ctx.panel.id);\n i0.ɵɵclassProp(\"collapsed\", !ctx.panel.isOpen);\n }\n },\n inputs: {\n ngbPanelToggle: \"ngbPanelToggle\"\n }\n });\n return NgbPanelToggle;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nconst NGB_ACCORDION_DIRECTIVES = [NgbAccordion, NgbPanel, NgbPanelTitle, NgbPanelContent, NgbPanelHeader, NgbPanelToggle];\nlet NgbAccordionModule = /*#__PURE__*/(() => {\n class NgbAccordionModule {}\n\n NgbAccordionModule.ɵfac = function NgbAccordionModule_Factory(t) {\n return new (t || NgbAccordionModule)();\n };\n\n NgbAccordionModule.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: NgbAccordionModule\n });\n NgbAccordionModule.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [[CommonModule]]\n });\n return NgbAccordionModule;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nconst ngbAlertFadingTransition = ({\n classList\n}) => {\n classList.remove('show');\n};\n/**\n * A configuration service for the [NgbAlert](#/components/alert/api#NgbAlert) component.\n *\n * You can inject this service, typically in your root component, and customize its properties\n * to provide default values for all alerts used in the application.\n */\n\n\nlet NgbAlertConfig = /*#__PURE__*/(() => {\n class NgbAlertConfig {\n constructor(_ngbConfig) {\n this._ngbConfig = _ngbConfig;\n this.dismissible = true;\n this.type = 'warning';\n }\n\n get animation() {\n return this._animation === undefined ? this._ngbConfig.animation : this._animation;\n }\n\n set animation(animation) {\n this._animation = animation;\n }\n\n }\n\n NgbAlertConfig.ɵfac = function NgbAlertConfig_Factory(t) {\n return new (t || NgbAlertConfig)(i0.ɵɵinject(NgbConfig));\n };\n\n NgbAlertConfig.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbAlertConfig,\n factory: NgbAlertConfig.ɵfac,\n providedIn: 'root'\n });\n return NgbAlertConfig;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Alert is a component to provide contextual feedback messages for user.\n *\n * It supports several alert types and can be dismissed.\n */\n\n\nlet NgbAlert = /*#__PURE__*/(() => {\n class NgbAlert {\n constructor(config, _renderer, _element, _zone) {\n this._renderer = _renderer;\n this._element = _element;\n this._zone = _zone;\n /**\n * An event emitted when the close button is clicked. It has no payload and only relevant for dismissible alerts.\n *\n * @since 8.0.0\n */\n\n this.closed = new EventEmitter();\n this.dismissible = config.dismissible;\n this.type = config.type;\n this.animation = config.animation;\n }\n /**\n * Triggers alert closing programmatically (same as clicking on the close button (×)).\n *\n * The returned observable will emit and be completed once the closing transition has finished.\n * If the animations are turned off this happens synchronously.\n *\n * Alternatively you could listen or subscribe to the `(closed)` output\n *\n * @since 8.0.0\n */\n\n\n close() {\n const transition = ngbRunTransition(this._zone, this._element.nativeElement, ngbAlertFadingTransition, {\n animation: this.animation,\n runningTransition: 'continue'\n });\n transition.subscribe(() => this.closed.emit());\n return transition;\n }\n\n ngOnChanges(changes) {\n const typeChange = changes['type'];\n\n if (typeChange && !typeChange.firstChange) {\n this._renderer.removeClass(this._element.nativeElement, `alert-${typeChange.previousValue}`);\n\n this._renderer.addClass(this._element.nativeElement, `alert-${typeChange.currentValue}`);\n }\n }\n\n ngOnInit() {\n this._renderer.addClass(this._element.nativeElement, `alert-${this.type}`);\n }\n\n }\n\n NgbAlert.ɵfac = function NgbAlert_Factory(t) {\n return new (t || NgbAlert)(i0.ɵɵdirectiveInject(NgbAlertConfig), i0.ɵɵdirectiveInject(i0.Renderer2), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.NgZone));\n };\n\n NgbAlert.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: NgbAlert,\n selectors: [[\"ngb-alert\"]],\n hostAttrs: [\"role\", \"alert\", 1, \"alert\", \"show\"],\n hostVars: 4,\n hostBindings: function NgbAlert_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵclassProp(\"fade\", ctx.animation)(\"alert-dismissible\", ctx.dismissible);\n }\n },\n inputs: {\n animation: \"animation\",\n dismissible: \"dismissible\",\n type: \"type\"\n },\n outputs: {\n closed: \"closed\"\n },\n exportAs: [\"ngbAlert\"],\n features: [i0.ɵɵNgOnChangesFeature],\n ngContentSelectors: _c3,\n decls: 2,\n vars: 1,\n consts: function () {\n let i18n_1;\n\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS_2 = goog.getMsg(\"Close\");\n i18n_1 = MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS_2;\n } else {\n i18n_1 = $localize`:@@ngb.alert.close:Close`;\n }\n\n return [[\"type\", \"button\", \"class\", \"btn-close\", \"aria-label\", i18n_1, 3, \"click\", 4, \"ngIf\"], [\"type\", \"button\", \"aria-label\", i18n_1, 1, \"btn-close\", 3, \"click\"]];\n },\n template: function NgbAlert_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵprojection(0);\n i0.ɵɵtemplate(1, NgbAlert_button_1_Template, 1, 0, \"button\", 0);\n }\n\n if (rf & 2) {\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngIf\", ctx.dismissible);\n }\n },\n directives: [i2.NgIf],\n styles: [\"ngb-alert{display:block}\\n\"],\n encapsulation: 2,\n changeDetection: 0\n });\n return NgbAlert;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nlet NgbAlertModule = /*#__PURE__*/(() => {\n class NgbAlertModule {}\n\n NgbAlertModule.ɵfac = function NgbAlertModule_Factory(t) {\n return new (t || NgbAlertModule)();\n };\n\n NgbAlertModule.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: NgbAlertModule\n });\n NgbAlertModule.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [[CommonModule]]\n });\n return NgbAlertModule;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/* eslint-disable */\n\n/**\n * @deprecated 12.0.0 Please use native Angular code instead\n */\n\n\nlet NgbButtonLabel = /*#__PURE__*/(() => {\n class NgbButtonLabel {}\n\n NgbButtonLabel.ɵfac = function NgbButtonLabel_Factory(t) {\n return new (t || NgbButtonLabel)();\n };\n\n NgbButtonLabel.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbButtonLabel,\n selectors: [[\"\", \"ngbButtonLabel\", \"\"]],\n hostVars: 8,\n hostBindings: function NgbButtonLabel_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵclassProp(\"btn\", true)(\"active\", ctx.active)(\"disabled\", ctx.disabled)(\"focus\", ctx.focused);\n }\n }\n });\n return NgbButtonLabel;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/* eslint-disable */\n\n/**\n * Allows to easily create Bootstrap-style checkbox buttons.\n *\n * Integrates with forms, so the value of a checked button is bound to the underlying form control\n * either in a reactive or template-driven way.\n *\n * @deprecated 12.0.0 Please use native Angular code instead\n */\n\n\nlet NgbCheckBox = /*#__PURE__*/(() => {\n class NgbCheckBox {\n constructor(_label, _cd) {\n this._label = _label;\n this._cd = _cd;\n /**\n * If `true`, the checkbox button will be disabled\n */\n\n this.disabled = false;\n /**\n * The form control value when the checkbox is checked.\n */\n\n this.valueChecked = true;\n /**\n * The form control value when the checkbox is unchecked.\n */\n\n this.valueUnChecked = false;\n\n this.onChange = _ => {};\n\n this.onTouched = () => {};\n }\n\n set focused(isFocused) {\n this._label.focused = isFocused;\n\n if (!isFocused) {\n this.onTouched();\n }\n }\n\n onInputChange($event) {\n const modelToPropagate = $event.target.checked ? this.valueChecked : this.valueUnChecked;\n this.onChange(modelToPropagate);\n this.onTouched();\n this.writeValue(modelToPropagate);\n }\n\n registerOnChange(fn) {\n this.onChange = fn;\n }\n\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n this._label.disabled = isDisabled;\n }\n\n writeValue(value) {\n this.checked = value === this.valueChecked;\n this._label.active = this.checked; // label won't be updated, if it is inside the OnPush component when [ngModel] changes\n\n this._cd.markForCheck();\n }\n\n }\n\n NgbCheckBox.ɵfac = function NgbCheckBox_Factory(t) {\n return new (t || NgbCheckBox)(i0.ɵɵdirectiveInject(NgbButtonLabel), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef));\n };\n\n NgbCheckBox.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbCheckBox,\n selectors: [[\"\", \"ngbButton\", \"\", \"type\", \"checkbox\"]],\n hostVars: 2,\n hostBindings: function NgbCheckBox_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"change\", function NgbCheckBox_change_HostBindingHandler($event) {\n return ctx.onInputChange($event);\n })(\"focus\", function NgbCheckBox_focus_HostBindingHandler() {\n return ctx.focused = true;\n })(\"blur\", function NgbCheckBox_blur_HostBindingHandler() {\n return ctx.focused = false;\n });\n }\n\n if (rf & 2) {\n i0.ɵɵhostProperty(\"checked\", ctx.checked)(\"disabled\", ctx.disabled);\n }\n },\n inputs: {\n disabled: \"disabled\",\n valueChecked: \"valueChecked\",\n valueUnChecked: \"valueUnChecked\"\n },\n features: [i0.ɵɵProvidersFeature([{\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgbCheckBox),\n multi: true\n }])]\n });\n return NgbCheckBox;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/* eslint-disable */\n\n\nlet nextId$3 = 0;\n/**\n * Allows to easily create Bootstrap-style radio buttons.\n *\n * Integrates with forms, so the value of a checked button is bound to the underlying form control\n * either in a reactive or template-driven way.\n *\n * @deprecated 12.0.0 Please use native Angular code instead\n */\n\nlet NgbRadioGroup = /*#__PURE__*/(() => {\n class NgbRadioGroup {\n constructor() {\n this._radios = new Set();\n this._value = null;\n /**\n * Name of the radio group applied to radio input elements.\n *\n * Will be applied to all radio input elements inside the group,\n * unless [`NgbRadio`](#/components/buttons/api#NgbRadio)'s specify names themselves.\n *\n * If not provided, will be generated in the `ngb-radio-xx` format.\n */\n\n this.name = `ngb-radio-${nextId$3++}`;\n\n this.onChange = _ => {};\n\n this.onTouched = () => {};\n }\n\n get disabled() {\n return this._disabled;\n }\n\n set disabled(isDisabled) {\n this.setDisabledState(isDisabled);\n }\n\n onRadioChange(radio) {\n this.writeValue(radio.value);\n this.onChange(radio.value);\n }\n\n onRadioValueUpdate() {\n this._updateRadiosValue();\n }\n\n register(radio) {\n this._radios.add(radio);\n }\n\n registerOnChange(fn) {\n this.onChange = fn;\n }\n\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled) {\n this._disabled = isDisabled;\n\n this._updateRadiosDisabled();\n }\n\n unregister(radio) {\n this._radios.delete(radio);\n }\n\n writeValue(value) {\n this._value = value;\n\n this._updateRadiosValue();\n }\n\n _updateRadiosValue() {\n this._radios.forEach(radio => radio.updateValue(this._value));\n }\n\n _updateRadiosDisabled() {\n this._radios.forEach(radio => radio.updateDisabled());\n }\n\n }\n\n NgbRadioGroup.ɵfac = function NgbRadioGroup_Factory(t) {\n return new (t || NgbRadioGroup)();\n };\n\n NgbRadioGroup.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbRadioGroup,\n selectors: [[\"\", \"ngbRadioGroup\", \"\"]],\n hostAttrs: [\"role\", \"radiogroup\"],\n inputs: {\n name: \"name\"\n },\n features: [i0.ɵɵProvidersFeature([{\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgbRadioGroup),\n multi: true\n }])]\n });\n return NgbRadioGroup;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A directive that marks an input of type \"radio\" as a part of the\n * [`NgbRadioGroup`](#/components/buttons/api#NgbRadioGroup).\n *\n * @deprecated 12.0.0 Please use native Angular code instead\n */\n\n\nlet NgbRadio = /*#__PURE__*/(() => {\n class NgbRadio {\n constructor(_group, _label, _renderer, _element, _cd) {\n this._group = _group;\n this._label = _label;\n this._renderer = _renderer;\n this._element = _element;\n this._cd = _cd;\n this._value = null;\n\n this._group.register(this);\n\n this.updateDisabled();\n }\n /**\n * The form control value when current radio button is checked.\n */\n\n\n set value(value) {\n this._value = value;\n const stringValue = value ? value.toString() : '';\n\n this._renderer.setProperty(this._element.nativeElement, 'value', stringValue);\n\n this._group.onRadioValueUpdate();\n }\n /**\n * If `true`, current radio button will be disabled.\n */\n\n\n set disabled(isDisabled) {\n this._disabled = isDisabled !== false;\n this.updateDisabled();\n }\n\n set focused(isFocused) {\n if (this._label) {\n this._label.focused = isFocused;\n }\n\n if (!isFocused) {\n this._group.onTouched();\n }\n }\n\n get checked() {\n return this._checked;\n }\n\n get disabled() {\n return this._group.disabled || this._disabled;\n }\n\n get value() {\n return this._value;\n }\n\n get nameAttr() {\n return this.name || this._group.name;\n }\n\n ngOnDestroy() {\n this._group.unregister(this);\n }\n\n onChange() {\n this._group.onRadioChange(this);\n }\n\n updateValue(value) {\n // label won't be updated, if it is inside the OnPush component when [ngModel] changes\n if (this.value !== value) {\n this._cd.markForCheck();\n }\n\n this._checked = this.value === value;\n this._label.active = this._checked;\n }\n\n updateDisabled() {\n this._label.disabled = this.disabled;\n }\n\n }\n\n NgbRadio.ɵfac = function NgbRadio_Factory(t) {\n return new (t || NgbRadio)(i0.ɵɵdirectiveInject(NgbRadioGroup), i0.ɵɵdirectiveInject(NgbButtonLabel), i0.ɵɵdirectiveInject(i0.Renderer2), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef));\n };\n\n NgbRadio.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbRadio,\n selectors: [[\"\", \"ngbButton\", \"\", \"type\", \"radio\"]],\n hostVars: 3,\n hostBindings: function NgbRadio_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"change\", function NgbRadio_change_HostBindingHandler() {\n return ctx.onChange();\n })(\"focus\", function NgbRadio_focus_HostBindingHandler() {\n return ctx.focused = true;\n })(\"blur\", function NgbRadio_blur_HostBindingHandler() {\n return ctx.focused = false;\n });\n }\n\n if (rf & 2) {\n i0.ɵɵhostProperty(\"checked\", ctx.checked)(\"disabled\", ctx.disabled)(\"name\", ctx.nameAttr);\n }\n },\n inputs: {\n name: \"name\",\n value: \"value\",\n disabled: \"disabled\"\n }\n });\n return NgbRadio;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/* eslint-disable */\n\n\nconst NGB_BUTTON_DIRECTIVES = [NgbButtonLabel, NgbCheckBox, NgbRadioGroup, NgbRadio];\n/**\n * @deprecated 12.0.0 Please use native Angular code instead\n */\n\nlet NgbButtonsModule = /*#__PURE__*/(() => {\n class NgbButtonsModule {}\n\n NgbButtonsModule.ɵfac = function NgbButtonsModule_Factory(t) {\n return new (t || NgbButtonsModule)();\n };\n\n NgbButtonsModule.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: NgbButtonsModule\n });\n NgbButtonsModule.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({});\n return NgbButtonsModule;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Defines the carousel slide transition direction.\n */\n\n\nvar NgbSlideEventDirection = /*#__PURE__*/(() => {\n (function (NgbSlideEventDirection) {\n NgbSlideEventDirection[\"START\"] = \"start\";\n NgbSlideEventDirection[\"END\"] = \"end\";\n })(NgbSlideEventDirection || (NgbSlideEventDirection = {}));\n\n return NgbSlideEventDirection;\n})();\n\nconst isBeingAnimated = ({\n classList\n}) => {\n return classList.contains('carousel-item-start') || classList.contains('carousel-item-end');\n};\n\nconst removeDirectionClasses = classList => {\n classList.remove('carousel-item-start');\n classList.remove('carousel-item-end');\n};\n\nconst removeClasses = classList => {\n removeDirectionClasses(classList);\n classList.remove('carousel-item-prev');\n classList.remove('carousel-item-next');\n};\n\nconst ngbCarouselTransitionIn = (element, animation, {\n direction\n}) => {\n const {\n classList\n } = element;\n\n if (!animation) {\n removeDirectionClasses(classList);\n removeClasses(classList);\n classList.add('active');\n return;\n }\n\n if (isBeingAnimated(element)) {\n // Revert the transition\n removeDirectionClasses(classList);\n } else {\n // For the 'in' transition, a 'pre-class' is applied to the element to ensure its visibility\n classList.add('carousel-item-' + (direction === NgbSlideEventDirection.START ? 'next' : 'prev'));\n reflow(element);\n classList.add('carousel-item-' + direction);\n }\n\n return () => {\n removeClasses(classList);\n classList.add('active');\n };\n};\n\nconst ngbCarouselTransitionOut = (element, animation, {\n direction\n}) => {\n const {\n classList\n } = element;\n\n if (!animation) {\n removeDirectionClasses(classList);\n removeClasses(classList);\n classList.remove('active');\n return;\n } // direction is left or right, depending on the way the slide goes out.\n\n\n if (isBeingAnimated(element)) {\n // Revert the transition\n removeDirectionClasses(classList);\n } else {\n classList.add('carousel-item-' + direction);\n }\n\n return () => {\n removeClasses(classList);\n classList.remove('active');\n };\n};\n/**\n * A configuration service for the [NgbCarousel](#/components/carousel/api#NgbCarousel) component.\n *\n * You can inject this service, typically in your root component, and customize its properties\n * to provide default values for all carousels used in the application.\n */\n\n\nlet NgbCarouselConfig = /*#__PURE__*/(() => {\n class NgbCarouselConfig {\n constructor(_ngbConfig) {\n this._ngbConfig = _ngbConfig;\n this.interval = 5000;\n this.wrap = true;\n this.keyboard = true;\n this.pauseOnHover = true;\n this.pauseOnFocus = true;\n this.showNavigationArrows = true;\n this.showNavigationIndicators = true;\n }\n\n get animation() {\n return this._animation === undefined ? this._ngbConfig.animation : this._animation;\n }\n\n set animation(animation) {\n this._animation = animation;\n }\n\n }\n\n NgbCarouselConfig.ɵfac = function NgbCarouselConfig_Factory(t) {\n return new (t || NgbCarouselConfig)(i0.ɵɵinject(NgbConfig));\n };\n\n NgbCarouselConfig.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbCarouselConfig,\n factory: NgbCarouselConfig.ɵfac,\n providedIn: 'root'\n });\n return NgbCarouselConfig;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nlet nextId$2 = 0;\n/**\n * A directive that wraps the individual carousel slide.\n */\n\nlet NgbSlide = /*#__PURE__*/(() => {\n class NgbSlide {\n constructor(tplRef) {\n this.tplRef = tplRef;\n /**\n * Slide id that must be unique for the entire document.\n *\n * If not provided, will be generated in the `ngb-slide-xx` format.\n */\n\n this.id = `ngb-slide-${nextId$2++}`;\n /**\n * An event emitted when the slide transition is finished\n *\n * @since 8.0.0\n */\n\n this.slid = new EventEmitter();\n }\n\n }\n\n NgbSlide.ɵfac = function NgbSlide_Factory(t) {\n return new (t || NgbSlide)(i0.ɵɵdirectiveInject(i0.TemplateRef));\n };\n\n NgbSlide.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbSlide,\n selectors: [[\"ng-template\", \"ngbSlide\", \"\"]],\n inputs: {\n id: \"id\"\n },\n outputs: {\n slid: \"slid\"\n }\n });\n return NgbSlide;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Carousel is a component to easily create and control slideshows.\n *\n * Allows to set intervals, change the way user interacts with the slides and provides a programmatic API.\n */\n\n\nlet NgbCarousel = /*#__PURE__*/(() => {\n class NgbCarousel {\n constructor(config, _platformId, _ngZone, _cd, _container) {\n this._platformId = _platformId;\n this._ngZone = _ngZone;\n this._cd = _cd;\n this._container = _container;\n this.NgbSlideEventSource = NgbSlideEventSource;\n this._destroy$ = new Subject();\n this._interval$ = new BehaviorSubject(0);\n this._mouseHover$ = new BehaviorSubject(false);\n this._focused$ = new BehaviorSubject(false);\n this._pauseOnHover$ = new BehaviorSubject(false);\n this._pauseOnFocus$ = new BehaviorSubject(false);\n this._pause$ = new BehaviorSubject(false);\n this._wrap$ = new BehaviorSubject(false);\n /**\n * An event emitted just before the slide transition starts.\n *\n * See [`NgbSlideEvent`](#/components/carousel/api#NgbSlideEvent) for payload details.\n */\n\n this.slide = new EventEmitter();\n /**\n * An event emitted right after the slide transition is completed.\n *\n * See [`NgbSlideEvent`](#/components/carousel/api#NgbSlideEvent) for payload details.\n *\n * @since 8.0.0\n */\n\n this.slid = new EventEmitter();\n /*\n * Keep the ids of the panels currently transitionning\n * in order to allow only the transition revertion\n */\n\n this._transitionIds = null;\n this.animation = config.animation;\n this.interval = config.interval;\n this.wrap = config.wrap;\n this.keyboard = config.keyboard;\n this.pauseOnHover = config.pauseOnHover;\n this.pauseOnFocus = config.pauseOnFocus;\n this.showNavigationArrows = config.showNavigationArrows;\n this.showNavigationIndicators = config.showNavigationIndicators;\n }\n /**\n * Time in milliseconds before the next slide is shown.\n */\n\n\n set interval(value) {\n this._interval$.next(value);\n }\n\n get interval() {\n return this._interval$.value;\n }\n /**\n * If `true`, will 'wrap' the carousel by switching from the last slide back to the first.\n */\n\n\n set wrap(value) {\n this._wrap$.next(value);\n }\n\n get wrap() {\n return this._wrap$.value;\n }\n /**\n * If `true`, will pause slide switching when mouse cursor hovers the slide.\n *\n * @since 2.2.0\n */\n\n\n set pauseOnHover(value) {\n this._pauseOnHover$.next(value);\n }\n\n get pauseOnHover() {\n return this._pauseOnHover$.value;\n }\n /**\n * If `true`, will pause slide switching when the focus is inside the carousel.\n */\n\n\n set pauseOnFocus(value) {\n this._pauseOnFocus$.next(value);\n }\n\n get pauseOnFocus() {\n return this._pauseOnFocus$.value;\n }\n\n set mouseHover(value) {\n this._mouseHover$.next(value);\n }\n\n get mouseHover() {\n return this._mouseHover$.value;\n }\n\n set focused(value) {\n this._focused$.next(value);\n }\n\n get focused() {\n return this._focused$.value;\n }\n\n arrowLeft() {\n this.focus();\n this.prev(NgbSlideEventSource.ARROW_LEFT);\n }\n\n arrowRight() {\n this.focus();\n this.next(NgbSlideEventSource.ARROW_RIGHT);\n }\n\n ngAfterContentInit() {\n // setInterval() doesn't play well with SSR and protractor,\n // so we should run it in the browser and outside Angular\n if (isPlatformBrowser(this._platformId)) {\n this._ngZone.runOutsideAngular(() => {\n const hasNextSlide$ = combineLatest([this.slide.pipe(map(slideEvent => slideEvent.current), startWith(this.activeId)), this._wrap$, this.slides.changes.pipe(startWith(null))]).pipe(map(([currentSlideId, wrap]) => {\n const slideArr = this.slides.toArray();\n\n const currentSlideIdx = this._getSlideIdxById(currentSlideId);\n\n return wrap ? slideArr.length > 1 : currentSlideIdx < slideArr.length - 1;\n }), distinctUntilChanged());\n combineLatest([this._pause$, this._pauseOnHover$, this._mouseHover$, this._pauseOnFocus$, this._focused$, this._interval$, hasNextSlide$]).pipe(map(([pause, pauseOnHover, mouseHover, pauseOnFocus, focused, interval, hasNextSlide]) => pause || pauseOnHover && mouseHover || pauseOnFocus && focused || !hasNextSlide ? 0 : interval), distinctUntilChanged(), switchMap(interval => interval > 0 ? timer(interval, interval) : NEVER), takeUntil(this._destroy$)).subscribe(() => this._ngZone.run(() => this.next(NgbSlideEventSource.TIMER)));\n });\n }\n\n this.slides.changes.pipe(takeUntil(this._destroy$)).subscribe(() => {\n var _a;\n\n (_a = this._transitionIds) === null || _a === void 0 ? void 0 : _a.forEach(id => ngbCompleteTransition(this._getSlideElement(id)));\n this._transitionIds = null;\n\n this._cd.markForCheck(); // The following code need to be done asynchronously, after the dom becomes stable,\n // otherwise all changes will be undone.\n\n\n this._ngZone.onStable.pipe(take(1)).subscribe(() => {\n for (const {\n id\n } of this.slides) {\n const element = this._getSlideElement(id);\n\n if (id === this.activeId) {\n element.classList.add('active');\n } else {\n element.classList.remove('active');\n }\n }\n });\n });\n }\n\n ngAfterContentChecked() {\n let activeSlide = this._getSlideById(this.activeId);\n\n this.activeId = activeSlide ? activeSlide.id : this.slides.length ? this.slides.first.id : '';\n }\n\n ngAfterViewInit() {\n // Initialize the 'active' class (not managed by the template)\n if (this.activeId) {\n const element = this._getSlideElement(this.activeId);\n\n if (element) {\n element.classList.add('active');\n }\n }\n }\n\n ngOnDestroy() {\n this._destroy$.next();\n }\n /**\n * Navigates to a slide with the specified identifier.\n */\n\n\n select(slideId, source) {\n this._cycleToSelected(slideId, this._getSlideEventDirection(this.activeId, slideId), source);\n }\n /**\n * Navigates to the previous slide.\n */\n\n\n prev(source) {\n this._cycleToSelected(this._getPrevSlide(this.activeId), NgbSlideEventDirection.END, source);\n }\n /**\n * Navigates to the next slide.\n */\n\n\n next(source) {\n this._cycleToSelected(this._getNextSlide(this.activeId), NgbSlideEventDirection.START, source);\n }\n /**\n * Pauses cycling through the slides.\n */\n\n\n pause() {\n this._pause$.next(true);\n }\n /**\n * Restarts cycling through the slides from start to end.\n */\n\n\n cycle() {\n this._pause$.next(false);\n }\n /**\n * Set the focus on the carousel.\n */\n\n\n focus() {\n this._container.nativeElement.focus();\n }\n\n _cycleToSelected(slideIdx, direction, source) {\n const transitionIds = this._transitionIds;\n\n if (transitionIds && (transitionIds[0] !== slideIdx || transitionIds[1] !== this.activeId)) {\n // Revert prevented\n return;\n }\n\n let selectedSlide = this._getSlideById(slideIdx);\n\n if (selectedSlide && selectedSlide.id !== this.activeId) {\n this._transitionIds = [this.activeId, slideIdx];\n this.slide.emit({\n prev: this.activeId,\n current: selectedSlide.id,\n direction: direction,\n paused: this._pause$.value,\n source\n });\n const options = {\n animation: this.animation,\n runningTransition: 'stop',\n context: {\n direction\n }\n };\n const transitions = [];\n\n const activeSlide = this._getSlideById(this.activeId);\n\n if (activeSlide) {\n const activeSlideTransition = ngbRunTransition(this._ngZone, this._getSlideElement(activeSlide.id), ngbCarouselTransitionOut, options);\n activeSlideTransition.subscribe(() => {\n activeSlide.slid.emit({\n isShown: false,\n direction,\n source\n });\n });\n transitions.push(activeSlideTransition);\n }\n\n const previousId = this.activeId;\n this.activeId = selectedSlide.id;\n\n const nextSlide = this._getSlideById(this.activeId);\n\n const transition = ngbRunTransition(this._ngZone, this._getSlideElement(selectedSlide.id), ngbCarouselTransitionIn, options);\n transition.subscribe(() => {\n nextSlide === null || nextSlide === void 0 ? void 0 : nextSlide.slid.emit({\n isShown: true,\n direction,\n source\n });\n });\n transitions.push(transition);\n zip(...transitions).pipe(take(1)).subscribe(() => {\n this._transitionIds = null;\n this.slid.emit({\n prev: previousId,\n current: selectedSlide.id,\n direction: direction,\n paused: this._pause$.value,\n source\n });\n });\n } // we get here after the interval fires or any external API call like next(), prev() or select()\n\n\n this._cd.markForCheck();\n }\n\n _getSlideEventDirection(currentActiveSlideId, nextActiveSlideId) {\n const currentActiveSlideIdx = this._getSlideIdxById(currentActiveSlideId);\n\n const nextActiveSlideIdx = this._getSlideIdxById(nextActiveSlideId);\n\n return currentActiveSlideIdx > nextActiveSlideIdx ? NgbSlideEventDirection.END : NgbSlideEventDirection.START;\n }\n\n _getSlideById(slideId) {\n return this.slides.find(slide => slide.id === slideId) || null;\n }\n\n _getSlideIdxById(slideId) {\n const slide = this._getSlideById(slideId);\n\n return slide != null ? this.slides.toArray().indexOf(slide) : -1;\n }\n\n _getNextSlide(currentSlideId) {\n const slideArr = this.slides.toArray();\n\n const currentSlideIdx = this._getSlideIdxById(currentSlideId);\n\n const isLastSlide = currentSlideIdx === slideArr.length - 1;\n return isLastSlide ? this.wrap ? slideArr[0].id : slideArr[slideArr.length - 1].id : slideArr[currentSlideIdx + 1].id;\n }\n\n _getPrevSlide(currentSlideId) {\n const slideArr = this.slides.toArray();\n\n const currentSlideIdx = this._getSlideIdxById(currentSlideId);\n\n const isFirstSlide = currentSlideIdx === 0;\n return isFirstSlide ? this.wrap ? slideArr[slideArr.length - 1].id : slideArr[0].id : slideArr[currentSlideIdx - 1].id;\n }\n\n _getSlideElement(slideId) {\n return this._container.nativeElement.querySelector(`#slide-${slideId}`);\n }\n\n }\n\n NgbCarousel.ɵfac = function NgbCarousel_Factory(t) {\n return new (t || NgbCarousel)(i0.ɵɵdirectiveInject(NgbCarouselConfig), i0.ɵɵdirectiveInject(PLATFORM_ID), i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i0.ElementRef));\n };\n\n NgbCarousel.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: NgbCarousel,\n selectors: [[\"ngb-carousel\"]],\n contentQueries: function NgbCarousel_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, NgbSlide, 4);\n }\n\n if (rf & 2) {\n let _t;\n\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.slides = _t);\n }\n },\n hostAttrs: [\"tabIndex\", \"0\", 1, \"carousel\", \"slide\"],\n hostVars: 3,\n hostBindings: function NgbCarousel_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"keydown.arrowLeft\", function NgbCarousel_keydown_arrowLeft_HostBindingHandler() {\n return ctx.keyboard && ctx.arrowLeft();\n })(\"keydown.arrowRight\", function NgbCarousel_keydown_arrowRight_HostBindingHandler() {\n return ctx.keyboard && ctx.arrowRight();\n })(\"mouseenter\", function NgbCarousel_mouseenter_HostBindingHandler() {\n return ctx.mouseHover = true;\n })(\"mouseleave\", function NgbCarousel_mouseleave_HostBindingHandler() {\n return ctx.mouseHover = false;\n })(\"focusin\", function NgbCarousel_focusin_HostBindingHandler() {\n return ctx.focused = true;\n })(\"focusout\", function NgbCarousel_focusout_HostBindingHandler() {\n return ctx.focused = false;\n });\n }\n\n if (rf & 2) {\n i0.ɵɵattribute(\"aria-activedescendant\", \"slide-\" + ctx.activeId);\n i0.ɵɵstyleProp(\"display\", \"block\");\n }\n },\n inputs: {\n animation: \"animation\",\n activeId: \"activeId\",\n interval: \"interval\",\n wrap: \"wrap\",\n keyboard: \"keyboard\",\n pauseOnHover: \"pauseOnHover\",\n pauseOnFocus: \"pauseOnFocus\",\n showNavigationArrows: \"showNavigationArrows\",\n showNavigationIndicators: \"showNavigationIndicators\"\n },\n outputs: {\n slide: \"slide\",\n slid: \"slid\"\n },\n exportAs: [\"ngbCarousel\"],\n decls: 6,\n vars: 6,\n consts: function () {\n let i18n_4;\n\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc Currently selected slide number read by screen reader\n */\n const MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS__5 = goog.getMsg(\" Slide {$interpolation} of {$interpolation_1} \", {\n \"interpolation\": \"\\uFFFD0\\uFFFD\",\n \"interpolation_1\": \"\\uFFFD1\\uFFFD\"\n });\n i18n_4 = MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS__5;\n } else {\n i18n_4 = $localize`:Currently selected slide number read by screen reader@@ngb.carousel.slide-number: Slide ${\"\\uFFFD0\\uFFFD\"}:INTERPOLATION: of ${\"\\uFFFD1\\uFFFD\"}:INTERPOLATION_1: `;\n }\n\n let i18n_6;\n\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS__7 = goog.getMsg(\"Previous\");\n i18n_6 = MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS__7;\n } else {\n i18n_6 = $localize`:@@ngb.carousel.previous:Previous`;\n }\n\n let i18n_8;\n\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS__9 = goog.getMsg(\"Next\");\n i18n_8 = MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS__9;\n } else {\n i18n_8 = $localize`:@@ngb.carousel.next:Next`;\n }\n\n return [[\"role\", \"tablist\", 1, \"carousel-indicators\"], [\"type\", \"button\", \"data-bs-target\", \"\", \"role\", \"tab\", 3, \"active\", \"click\", 4, \"ngFor\", \"ngForOf\"], [1, \"carousel-inner\"], [\"class\", \"carousel-item\", \"role\", \"tabpanel\", 3, \"id\", 4, \"ngFor\", \"ngForOf\"], [\"class\", \"carousel-control-prev\", \"type\", \"button\", 3, \"click\", 4, \"ngIf\"], [\"class\", \"carousel-control-next\", \"type\", \"button\", 3, \"click\", 4, \"ngIf\"], [\"type\", \"button\", \"data-bs-target\", \"\", \"role\", \"tab\", 3, \"click\"], [\"role\", \"tabpanel\", 1, \"carousel-item\", 3, \"id\"], [1, \"visually-hidden\"], i18n_4, [3, \"ngTemplateOutlet\"], [\"type\", \"button\", 1, \"carousel-control-prev\", 3, \"click\"], [\"aria-hidden\", \"true\", 1, \"carousel-control-prev-icon\"], i18n_6, [\"type\", \"button\", 1, \"carousel-control-next\", 3, \"click\"], [\"aria-hidden\", \"true\", 1, \"carousel-control-next-icon\"], i18n_8];\n },\n template: function NgbCarousel_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 0);\n i0.ɵɵtemplate(1, NgbCarousel_button_1_Template, 1, 5, \"button\", 1);\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(2, \"div\", 2);\n i0.ɵɵtemplate(3, NgbCarousel_div_3_Template, 4, 4, \"div\", 3);\n i0.ɵɵelementEnd();\n i0.ɵɵtemplate(4, NgbCarousel_button_4_Template, 4, 0, \"button\", 4);\n i0.ɵɵtemplate(5, NgbCarousel_button_5_Template, 4, 0, \"button\", 5);\n }\n\n if (rf & 2) {\n i0.ɵɵclassProp(\"visually-hidden\", !ctx.showNavigationIndicators);\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngForOf\", ctx.slides);\n i0.ɵɵadvance(2);\n i0.ɵɵproperty(\"ngForOf\", ctx.slides);\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngIf\", ctx.showNavigationArrows);\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngIf\", ctx.showNavigationArrows);\n }\n },\n directives: [i2.NgForOf, i2.NgTemplateOutlet, i2.NgIf],\n encapsulation: 2,\n changeDetection: 0\n });\n return NgbCarousel;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nvar NgbSlideEventSource = /*#__PURE__*/(() => {\n (function (NgbSlideEventSource) {\n NgbSlideEventSource[\"TIMER\"] = \"timer\";\n NgbSlideEventSource[\"ARROW_LEFT\"] = \"arrowLeft\";\n NgbSlideEventSource[\"ARROW_RIGHT\"] = \"arrowRight\";\n NgbSlideEventSource[\"INDICATOR\"] = \"indicator\";\n })(NgbSlideEventSource || (NgbSlideEventSource = {}));\n\n return NgbSlideEventSource;\n})();\nconst NGB_CAROUSEL_DIRECTIVES = [NgbCarousel, NgbSlide];\nlet NgbCarouselModule = /*#__PURE__*/(() => {\n class NgbCarouselModule {}\n\n NgbCarouselModule.ɵfac = function NgbCarouselModule_Factory(t) {\n return new (t || NgbCarouselModule)();\n };\n\n NgbCarouselModule.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: NgbCarouselModule\n });\n NgbCarouselModule.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [[CommonModule]]\n });\n return NgbCarouselModule;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A configuration service for the [NgbCollapse](#/components/collapse/api#NgbCollapse) component.\n *\n * You can inject this service, typically in your root component, and customize its properties\n * to provide default values for all collapses used in the application.\n */\n\n\nlet NgbCollapseConfig = /*#__PURE__*/(() => {\n class NgbCollapseConfig {\n constructor(_ngbConfig) {\n this._ngbConfig = _ngbConfig;\n }\n\n get animation() {\n return this._animation === undefined ? this._ngbConfig.animation : this._animation;\n }\n\n set animation(animation) {\n this._animation = animation;\n }\n\n }\n\n NgbCollapseConfig.ɵfac = function NgbCollapseConfig_Factory(t) {\n return new (t || NgbCollapseConfig)(i0.ɵɵinject(NgbConfig));\n };\n\n NgbCollapseConfig.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbCollapseConfig,\n factory: NgbCollapseConfig.ɵfac,\n providedIn: 'root'\n });\n return NgbCollapseConfig;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A directive to provide a simple way of hiding and showing elements on the page.\n */\n\n\nlet NgbCollapse = /*#__PURE__*/(() => {\n class NgbCollapse {\n constructor(_element, config, _zone) {\n this._element = _element;\n this._zone = _zone;\n /**\n * If `true`, will collapse the element or show it otherwise.\n */\n\n this.collapsed = false;\n this.ngbCollapseChange = new EventEmitter();\n /**\n * An event emitted when the collapse element is shown, after the transition. It has no payload.\n *\n * @since 8.0.0\n */\n\n this.shown = new EventEmitter();\n /**\n * An event emitted when the collapse element is hidden, after the transition. It has no payload.\n *\n * @since 8.0.0\n */\n\n this.hidden = new EventEmitter();\n this.animation = config.animation;\n }\n\n ngOnInit() {\n this._runTransition(this.collapsed, false);\n }\n\n ngOnChanges({\n collapsed\n }) {\n if (!collapsed.firstChange) {\n this._runTransitionWithEvents(this.collapsed, this.animation);\n }\n }\n /**\n * Triggers collapsing programmatically.\n *\n * If there is a collapsing transition running already, it will be reversed.\n * If the animations are turned off this happens synchronously.\n *\n * @since 8.0.0\n */\n\n\n toggle(open = this.collapsed) {\n this.collapsed = !open;\n this.ngbCollapseChange.next(this.collapsed);\n\n this._runTransitionWithEvents(this.collapsed, this.animation);\n }\n\n _runTransition(collapsed, animation) {\n return ngbRunTransition(this._zone, this._element.nativeElement, ngbCollapsingTransition, {\n animation,\n runningTransition: 'stop',\n context: {\n direction: collapsed ? 'hide' : 'show'\n }\n });\n }\n\n _runTransitionWithEvents(collapsed, animation) {\n this._runTransition(collapsed, animation).subscribe(() => {\n if (collapsed) {\n this.hidden.emit();\n } else {\n this.shown.emit();\n }\n });\n }\n\n }\n\n NgbCollapse.ɵfac = function NgbCollapse_Factory(t) {\n return new (t || NgbCollapse)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(NgbCollapseConfig), i0.ɵɵdirectiveInject(i0.NgZone));\n };\n\n NgbCollapse.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbCollapse,\n selectors: [[\"\", \"ngbCollapse\", \"\"]],\n inputs: {\n animation: \"animation\",\n collapsed: [\"ngbCollapse\", \"collapsed\"]\n },\n outputs: {\n ngbCollapseChange: \"ngbCollapseChange\",\n shown: \"shown\",\n hidden: \"hidden\"\n },\n exportAs: [\"ngbCollapse\"],\n features: [i0.ɵɵNgOnChangesFeature]\n });\n return NgbCollapse;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nlet NgbCollapseModule = /*#__PURE__*/(() => {\n class NgbCollapseModule {}\n\n NgbCollapseModule.ɵfac = function NgbCollapseModule_Factory(t) {\n return new (t || NgbCollapseModule)();\n };\n\n NgbCollapseModule.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: NgbCollapseModule\n });\n NgbCollapseModule.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({});\n return NgbCollapseModule;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A simple class that represents a date that datepicker also uses internally.\n *\n * It is the implementation of the `NgbDateStruct` interface that adds some convenience methods,\n * like `.equals()`, `.before()`, etc.\n *\n * All datepicker APIs consume `NgbDateStruct`, but return `NgbDate`.\n *\n * In many cases it is simpler to manipulate these objects together with\n * [`NgbCalendar`](#/components/datepicker/api#NgbCalendar) than native JS Dates.\n *\n * See the [date format overview](#/components/datepicker/overview#date-model) for more details.\n *\n * @since 3.0.0\n */\n\n\nclass NgbDate {\n constructor(year, month, day) {\n this.year = isInteger(year) ? year : null;\n this.month = isInteger(month) ? month : null;\n this.day = isInteger(day) ? day : null;\n }\n /**\n * A **static method** that creates a new date object from the `NgbDateStruct`,\n *\n * ex. `NgbDate.from({year: 2000, month: 5, day: 1})`.\n *\n * If the `date` is already of `NgbDate` type, the method will return the same object.\n */\n\n\n static from(date) {\n if (date instanceof NgbDate) {\n return date;\n }\n\n return date ? new NgbDate(date.year, date.month, date.day) : null;\n }\n /**\n * Checks if the current date is equal to another date.\n */\n\n\n equals(other) {\n return other != null && this.year === other.year && this.month === other.month && this.day === other.day;\n }\n /**\n * Checks if the current date is before another date.\n */\n\n\n before(other) {\n if (!other) {\n return false;\n }\n\n if (this.year === other.year) {\n if (this.month === other.month) {\n return this.day === other.day ? false : this.day < other.day;\n } else {\n return this.month < other.month;\n }\n } else {\n return this.year < other.year;\n }\n }\n /**\n * Checks if the current date is after another date.\n */\n\n\n after(other) {\n if (!other) {\n return false;\n }\n\n if (this.year === other.year) {\n if (this.month === other.month) {\n return this.day === other.day ? false : this.day > other.day;\n } else {\n return this.month > other.month;\n }\n } else {\n return this.year > other.year;\n }\n }\n\n}\n\nfunction isChangedDate(prev, next) {\n return !dateComparator(prev, next);\n}\n\nfunction isChangedMonth(prev, next) {\n return !prev && !next ? false : !prev || !next ? true : prev.year !== next.year || prev.month !== next.month;\n}\n\nfunction dateComparator(prev, next) {\n return !prev && !next || !!prev && !!next && prev.equals(next);\n}\n\nfunction checkMinBeforeMax(minDate, maxDate) {\n if (maxDate && minDate && maxDate.before(minDate)) {\n throw new Error(`'maxDate' ${maxDate} should be greater than 'minDate' ${minDate}`);\n }\n}\n\nfunction checkDateInRange(date, minDate, maxDate) {\n if (date && minDate && date.before(minDate)) {\n return minDate;\n }\n\n if (date && maxDate && date.after(maxDate)) {\n return maxDate;\n }\n\n return date || null;\n}\n\nfunction isDateSelectable(date, state) {\n const {\n minDate,\n maxDate,\n disabled,\n markDisabled\n } = state; // clang-format off\n\n return !(date === null || date === undefined || disabled || markDisabled && markDisabled(date, {\n year: date.year,\n month: date.month\n }) || minDate && date.before(minDate) || maxDate && date.after(maxDate)); // clang-format on\n}\n\nfunction generateSelectBoxMonths(calendar, date, minDate, maxDate) {\n if (!date) {\n return [];\n }\n\n let months = calendar.getMonths(date.year);\n\n if (minDate && date.year === minDate.year) {\n const index = months.findIndex(month => month === minDate.month);\n months = months.slice(index);\n }\n\n if (maxDate && date.year === maxDate.year) {\n const index = months.findIndex(month => month === maxDate.month);\n months = months.slice(0, index + 1);\n }\n\n return months;\n}\n\nfunction generateSelectBoxYears(date, minDate, maxDate) {\n if (!date) {\n return [];\n }\n\n const start = minDate ? Math.max(minDate.year, date.year - 500) : date.year - 10;\n const end = maxDate ? Math.min(maxDate.year, date.year + 500) : date.year + 10;\n const length = end - start + 1;\n const numbers = Array(length);\n\n for (let i = 0; i < length; i++) {\n numbers[i] = start + i;\n }\n\n return numbers;\n}\n\nfunction nextMonthDisabled(calendar, date, maxDate) {\n const nextDate = Object.assign(calendar.getNext(date, 'm'), {\n day: 1\n });\n return maxDate != null && nextDate.after(maxDate);\n}\n\nfunction prevMonthDisabled(calendar, date, minDate) {\n const prevDate = Object.assign(calendar.getPrev(date, 'm'), {\n day: 1\n });\n return minDate != null && (prevDate.year === minDate.year && prevDate.month < minDate.month || prevDate.year < minDate.year && minDate.month === 1);\n}\n\nfunction buildMonths(calendar, date, state, i18n, force) {\n const {\n displayMonths,\n months\n } = state; // move old months to a temporary array\n\n const monthsToReuse = months.splice(0, months.length); // generate new first dates, nullify or reuse months\n\n const firstDates = Array.from({\n length: displayMonths\n }, (_, i) => {\n const firstDate = Object.assign(calendar.getNext(date, 'm', i), {\n day: 1\n });\n months[i] = null;\n\n if (!force) {\n const reusedIndex = monthsToReuse.findIndex(month => month.firstDate.equals(firstDate)); // move reused month back to months\n\n if (reusedIndex !== -1) {\n months[i] = monthsToReuse.splice(reusedIndex, 1)[0];\n }\n }\n\n return firstDate;\n }); // rebuild nullified months\n\n firstDates.forEach((firstDate, i) => {\n if (months[i] === null) {\n months[i] = buildMonth(calendar, firstDate, state, i18n, monthsToReuse.shift() || {});\n }\n });\n return months;\n}\n\nfunction buildMonth(calendar, date, state, i18n, month = {}) {\n const {\n dayTemplateData,\n minDate,\n maxDate,\n firstDayOfWeek,\n markDisabled,\n outsideDays,\n weekdayWidth,\n weekdaysVisible\n } = state;\n const calendarToday = calendar.getToday();\n month.firstDate = null;\n month.lastDate = null;\n month.number = date.month;\n month.year = date.year;\n month.weeks = month.weeks || [];\n month.weekdays = month.weekdays || [];\n date = getFirstViewDate(calendar, date, firstDayOfWeek); // clearing weekdays, if not visible\n\n if (!weekdaysVisible) {\n month.weekdays.length = 0;\n } // month has weeks\n\n\n for (let week = 0; week < calendar.getWeeksPerMonth(); week++) {\n let weekObject = month.weeks[week];\n\n if (!weekObject) {\n weekObject = month.weeks[week] = {\n number: 0,\n days: [],\n collapsed: true\n };\n }\n\n const days = weekObject.days; // week has days\n\n for (let day = 0; day < calendar.getDaysPerWeek(); day++) {\n if (week === 0 && weekdaysVisible) {\n month.weekdays[day] = i18n.getWeekdayLabel(calendar.getWeekday(date), weekdayWidth);\n }\n\n const newDate = new NgbDate(date.year, date.month, date.day);\n const nextDate = calendar.getNext(newDate);\n const ariaLabel = i18n.getDayAriaLabel(newDate); // marking date as disabled\n\n let disabled = !!(minDate && newDate.before(minDate) || maxDate && newDate.after(maxDate));\n\n if (!disabled && markDisabled) {\n disabled = markDisabled(newDate, {\n month: month.number,\n year: month.year\n });\n } // today\n\n\n let today = newDate.equals(calendarToday); // adding user-provided data to the context\n\n let contextUserData = dayTemplateData ? dayTemplateData(newDate, {\n month: month.number,\n year: month.year\n }) : undefined; // saving first date of the month\n\n if (month.firstDate === null && newDate.month === month.number) {\n month.firstDate = newDate;\n } // saving last date of the month\n\n\n if (newDate.month === month.number && nextDate.month !== month.number) {\n month.lastDate = newDate;\n }\n\n let dayObject = days[day];\n\n if (!dayObject) {\n dayObject = days[day] = {};\n }\n\n dayObject.date = newDate;\n dayObject.context = Object.assign(dayObject.context || {}, {\n $implicit: newDate,\n date: newDate,\n data: contextUserData,\n currentMonth: month.number,\n currentYear: month.year,\n disabled,\n focused: false,\n selected: false,\n today\n });\n dayObject.tabindex = -1;\n dayObject.ariaLabel = ariaLabel;\n dayObject.hidden = false;\n date = nextDate;\n }\n\n weekObject.number = calendar.getWeekNumber(days.map(day => day.date), firstDayOfWeek); // marking week as collapsed\n\n weekObject.collapsed = outsideDays === 'collapsed' && days[0].date.month !== month.number && days[days.length - 1].date.month !== month.number;\n }\n\n return month;\n}\n\nfunction getFirstViewDate(calendar, date, firstDayOfWeek) {\n const daysPerWeek = calendar.getDaysPerWeek();\n const firstMonthDate = new NgbDate(date.year, date.month, 1);\n const dayOfWeek = calendar.getWeekday(firstMonthDate) % daysPerWeek;\n return calendar.getPrev(firstMonthDate, 'd', (daysPerWeek + dayOfWeek - firstDayOfWeek) % daysPerWeek);\n}\n\nfunction fromJSDate(jsDate) {\n return new NgbDate(jsDate.getFullYear(), jsDate.getMonth() + 1, jsDate.getDate());\n}\n\nfunction toJSDate(date) {\n const jsDate = new Date(date.year, date.month - 1, date.day, 12); // this is done avoid 30 -> 1930 conversion\n\n if (!isNaN(jsDate.getTime())) {\n jsDate.setFullYear(date.year);\n }\n\n return jsDate;\n}\n\nfunction NGB_DATEPICKER_CALENDAR_FACTORY() {\n return new NgbCalendarGregorian();\n}\n/**\n * A service that represents the calendar used by the datepicker.\n *\n * The default implementation uses the Gregorian calendar. You can inject it in your own\n * implementations if necessary to simplify `NgbDate` calculations.\n */\n\n\nlet NgbCalendar = /*#__PURE__*/(() => {\n class NgbCalendar {}\n\n NgbCalendar.ɵfac = function NgbCalendar_Factory(t) {\n return new (t || NgbCalendar)();\n };\n\n NgbCalendar.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbCalendar,\n factory: function () {\n return NGB_DATEPICKER_CALENDAR_FACTORY();\n },\n providedIn: 'root'\n });\n return NgbCalendar;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nlet NgbCalendarGregorian = /*#__PURE__*/(() => {\n class NgbCalendarGregorian extends NgbCalendar {\n getDaysPerWeek() {\n return 7;\n }\n\n getMonths() {\n return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];\n }\n\n getWeeksPerMonth() {\n return 6;\n }\n\n getNext(date, period = 'd', number = 1) {\n let jsDate = toJSDate(date);\n let checkMonth = true;\n let expectedMonth = jsDate.getMonth();\n\n switch (period) {\n case 'y':\n jsDate.setFullYear(jsDate.getFullYear() + number);\n break;\n\n case 'm':\n expectedMonth += number;\n jsDate.setMonth(expectedMonth);\n expectedMonth = expectedMonth % 12;\n\n if (expectedMonth < 0) {\n expectedMonth = expectedMonth + 12;\n }\n\n break;\n\n case 'd':\n jsDate.setDate(jsDate.getDate() + number);\n checkMonth = false;\n break;\n\n default:\n return date;\n }\n\n if (checkMonth && jsDate.getMonth() !== expectedMonth) {\n // this means the destination month has less days than the initial month\n // let's go back to the end of the previous month:\n jsDate.setDate(0);\n }\n\n return fromJSDate(jsDate);\n }\n\n getPrev(date, period = 'd', number = 1) {\n return this.getNext(date, period, -number);\n }\n\n getWeekday(date) {\n let jsDate = toJSDate(date);\n let day = jsDate.getDay(); // in JS Date Sun=0, in ISO 8601 Sun=7\n\n return day === 0 ? 7 : day;\n }\n\n getWeekNumber(week, firstDayOfWeek) {\n // in JS Date Sun=0, in ISO 8601 Sun=7\n if (firstDayOfWeek === 7) {\n firstDayOfWeek = 0;\n }\n\n const thursdayIndex = (4 + 7 - firstDayOfWeek) % 7;\n let date = week[thursdayIndex];\n const jsDate = toJSDate(date);\n jsDate.setDate(jsDate.getDate() + 4 - (jsDate.getDay() || 7)); // Thursday\n\n const time = jsDate.getTime();\n jsDate.setMonth(0); // Compare with Jan 1\n\n jsDate.setDate(1);\n return Math.floor(Math.round((time - jsDate.getTime()) / 86400000) / 7) + 1;\n }\n\n getToday() {\n return fromJSDate(new Date());\n }\n\n isValid(date) {\n if (!date || !isInteger(date.year) || !isInteger(date.month) || !isInteger(date.day)) {\n return false;\n } // year 0 doesn't exist in Gregorian calendar\n\n\n if (date.year === 0) {\n return false;\n }\n\n const jsDate = toJSDate(date);\n return !isNaN(jsDate.getTime()) && jsDate.getFullYear() === date.year && jsDate.getMonth() + 1 === date.month && jsDate.getDate() === date.day;\n }\n\n }\n\n NgbCalendarGregorian.ɵfac = /* @__PURE__ */function () {\n let ɵNgbCalendarGregorian_BaseFactory;\n return function NgbCalendarGregorian_Factory(t) {\n return (ɵNgbCalendarGregorian_BaseFactory || (ɵNgbCalendarGregorian_BaseFactory = i0.ɵɵgetInheritedFactory(NgbCalendarGregorian)))(t || NgbCalendarGregorian);\n };\n }();\n\n NgbCalendarGregorian.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbCalendarGregorian,\n factory: NgbCalendarGregorian.ɵfac\n });\n return NgbCalendarGregorian;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nfunction NGB_DATEPICKER_18N_FACTORY(locale) {\n return new NgbDatepickerI18nDefault(locale);\n}\n/**\n * A service supplying i18n data to the datepicker component.\n *\n * The default implementation of this service uses the Angular locale and registered locale data for\n * weekdays and month names (as explained in the Angular i18n guide).\n *\n * It also provides a way to i18n data that depends on calendar calculations, like aria labels, day, week and year\n * numerals. For other static labels the datepicker uses the default Angular i18n.\n *\n * See the [i18n demo](#/components/datepicker/examples#i18n) and\n * [Hebrew calendar demo](#/components/datepicker/calendars#hebrew) on how to extend this class and define\n * a custom provider for i18n.\n */\n\n\nlet NgbDatepickerI18n = /*#__PURE__*/(() => {\n class NgbDatepickerI18n {\n /**\n * Returns the text label to display above the day view.\n *\n * @since 9.1.0\n */\n getMonthLabel(date) {\n return `${this.getMonthFullName(date.month, date.year)} ${this.getYearNumerals(date.year)}`;\n }\n /**\n * Returns the textual representation of a day that is rendered in a day cell.\n *\n * @since 3.0.0\n */\n\n\n getDayNumerals(date) {\n return `${date.day}`;\n }\n /**\n * Returns the textual representation of a week number rendered by datepicker.\n *\n * @since 3.0.0\n */\n\n\n getWeekNumerals(weekNumber) {\n return `${weekNumber}`;\n }\n /**\n * Returns the textual representation of a year that is rendered in the datepicker year select box.\n *\n * @since 3.0.0\n */\n\n\n getYearNumerals(year) {\n return `${year}`;\n }\n /**\n * Returns the week label to display in the heading of the month view.\n *\n * @since 9.1.0\n */\n\n\n getWeekLabel() {\n return '';\n }\n\n }\n\n NgbDatepickerI18n.ɵfac = function NgbDatepickerI18n_Factory(t) {\n return new (t || NgbDatepickerI18n)();\n };\n\n NgbDatepickerI18n.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbDatepickerI18n,\n factory: function NgbDatepickerI18n_Factory(t) {\n let r = null;\n\n if (t) {\n r = new t();\n } else {\n r = NGB_DATEPICKER_18N_FACTORY(i0.ɵɵinject(LOCALE_ID));\n }\n\n return r;\n },\n providedIn: 'root'\n });\n return NgbDatepickerI18n;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A service providing default implementation for the datepicker i18n.\n * It can be used as a base implementation if necessary.\n *\n * @since 9.1.0\n */\n\n\nlet NgbDatepickerI18nDefault = /*#__PURE__*/(() => {\n class NgbDatepickerI18nDefault extends NgbDatepickerI18n {\n constructor(_locale) {\n super();\n this._locale = _locale;\n this._monthsShort = getLocaleMonthNames(_locale, FormStyle.Standalone, TranslationWidth.Abbreviated);\n this._monthsFull = getLocaleMonthNames(_locale, FormStyle.Standalone, TranslationWidth.Wide);\n }\n\n getWeekdayLabel(weekday, width) {\n const weekdaysStartingOnSunday = getLocaleDayNames(this._locale, FormStyle.Standalone, width === undefined ? TranslationWidth.Short : width);\n const weekdays = weekdaysStartingOnSunday.map((day, index) => weekdaysStartingOnSunday[(index + 1) % 7]);\n return weekdays[weekday - 1] || '';\n }\n\n getMonthShortName(month) {\n return this._monthsShort[month - 1] || '';\n }\n\n getMonthFullName(month) {\n return this._monthsFull[month - 1] || '';\n }\n\n getDayAriaLabel(date) {\n const jsDate = new Date(date.year, date.month - 1, date.day);\n return formatDate(jsDate, 'fullDate', this._locale);\n }\n\n }\n\n NgbDatepickerI18nDefault.ɵfac = function NgbDatepickerI18nDefault_Factory(t) {\n return new (t || NgbDatepickerI18nDefault)(i0.ɵɵinject(LOCALE_ID));\n };\n\n NgbDatepickerI18nDefault.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbDatepickerI18nDefault,\n factory: NgbDatepickerI18nDefault.ɵfac\n });\n return NgbDatepickerI18nDefault;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nlet NgbDatepickerService = /*#__PURE__*/(() => {\n class NgbDatepickerService {\n constructor(_calendar, _i18n) {\n this._calendar = _calendar;\n this._i18n = _i18n;\n this._VALIDATORS = {\n dayTemplateData: dayTemplateData => {\n if (this._state.dayTemplateData !== dayTemplateData) {\n return {\n dayTemplateData\n };\n }\n },\n displayMonths: displayMonths => {\n displayMonths = toInteger(displayMonths);\n\n if (isInteger(displayMonths) && displayMonths > 0 && this._state.displayMonths !== displayMonths) {\n return {\n displayMonths\n };\n }\n },\n disabled: disabled => {\n if (this._state.disabled !== disabled) {\n return {\n disabled\n };\n }\n },\n firstDayOfWeek: firstDayOfWeek => {\n firstDayOfWeek = toInteger(firstDayOfWeek);\n\n if (isInteger(firstDayOfWeek) && firstDayOfWeek >= 0 && this._state.firstDayOfWeek !== firstDayOfWeek) {\n return {\n firstDayOfWeek\n };\n }\n },\n focusVisible: focusVisible => {\n if (this._state.focusVisible !== focusVisible && !this._state.disabled) {\n return {\n focusVisible\n };\n }\n },\n markDisabled: markDisabled => {\n if (this._state.markDisabled !== markDisabled) {\n return {\n markDisabled\n };\n }\n },\n maxDate: date => {\n const maxDate = this.toValidDate(date, null);\n\n if (isChangedDate(this._state.maxDate, maxDate)) {\n return {\n maxDate\n };\n }\n },\n minDate: date => {\n const minDate = this.toValidDate(date, null);\n\n if (isChangedDate(this._state.minDate, minDate)) {\n return {\n minDate\n };\n }\n },\n navigation: navigation => {\n if (this._state.navigation !== navigation) {\n return {\n navigation\n };\n }\n },\n outsideDays: outsideDays => {\n if (this._state.outsideDays !== outsideDays) {\n return {\n outsideDays\n };\n }\n },\n weekdays: weekdays => {\n const weekdayWidth = weekdays === true || weekdays === false ? TranslationWidth.Short : weekdays;\n const weekdaysVisible = weekdays === true || weekdays === false ? weekdays : true;\n\n if (this._state.weekdayWidth !== weekdayWidth || this._state.weekdaysVisible !== weekdaysVisible) {\n return {\n weekdayWidth,\n weekdaysVisible\n };\n }\n }\n };\n this._model$ = new Subject();\n this._dateSelect$ = new Subject();\n this._state = {\n dayTemplateData: null,\n markDisabled: null,\n maxDate: null,\n minDate: null,\n disabled: false,\n displayMonths: 1,\n firstDate: null,\n firstDayOfWeek: 1,\n lastDate: null,\n focusDate: null,\n focusVisible: false,\n months: [],\n navigation: 'select',\n outsideDays: 'visible',\n prevDisabled: false,\n nextDisabled: false,\n selectedDate: null,\n selectBoxes: {\n years: [],\n months: []\n },\n weekdayWidth: TranslationWidth.Short,\n weekdaysVisible: true\n };\n }\n\n get model$() {\n return this._model$.pipe(filter(model => model.months.length > 0));\n }\n\n get dateSelect$() {\n return this._dateSelect$.pipe(filter(date => date !== null));\n }\n\n set(options) {\n let patch = Object.keys(options).map(key => this._VALIDATORS[key](options[key])).reduce((obj, part) => Object.assign(Object.assign({}, obj), part), {});\n\n if (Object.keys(patch).length > 0) {\n this._nextState(patch);\n }\n }\n\n focus(date) {\n const focusedDate = this.toValidDate(date, null);\n\n if (focusedDate != null && !this._state.disabled && isChangedDate(this._state.focusDate, focusedDate)) {\n this._nextState({\n focusDate: date\n });\n }\n }\n\n focusSelect() {\n if (isDateSelectable(this._state.focusDate, this._state)) {\n this.select(this._state.focusDate, {\n emitEvent: true\n });\n }\n }\n\n open(date) {\n const firstDate = this.toValidDate(date, this._calendar.getToday());\n\n if (firstDate != null && !this._state.disabled && (!this._state.firstDate || isChangedMonth(this._state.firstDate, firstDate))) {\n this._nextState({\n firstDate\n });\n }\n }\n\n select(date, options = {}) {\n const selectedDate = this.toValidDate(date, null);\n\n if (selectedDate != null && !this._state.disabled) {\n if (isChangedDate(this._state.selectedDate, selectedDate)) {\n this._nextState({\n selectedDate\n });\n }\n\n if (options.emitEvent && isDateSelectable(selectedDate, this._state)) {\n this._dateSelect$.next(selectedDate);\n }\n }\n }\n\n toValidDate(date, defaultValue) {\n const ngbDate = NgbDate.from(date);\n\n if (defaultValue === undefined) {\n defaultValue = this._calendar.getToday();\n }\n\n return this._calendar.isValid(ngbDate) ? ngbDate : defaultValue;\n }\n\n getMonth(struct) {\n for (let month of this._state.months) {\n if (struct.month === month.number && struct.year === month.year) {\n return month;\n }\n }\n\n throw new Error(`month ${struct.month} of year ${struct.year} not found`);\n }\n\n _nextState(patch) {\n const newState = this._updateState(patch);\n\n this._patchContexts(newState);\n\n this._state = newState;\n\n this._model$.next(this._state);\n }\n\n _patchContexts(state) {\n const {\n months,\n displayMonths,\n selectedDate,\n focusDate,\n focusVisible,\n disabled,\n outsideDays\n } = state;\n state.months.forEach(month => {\n month.weeks.forEach(week => {\n week.days.forEach(day => {\n // patch focus flag\n if (focusDate) {\n day.context.focused = focusDate.equals(day.date) && focusVisible;\n } // calculating tabindex\n\n\n day.tabindex = !disabled && focusDate && day.date.equals(focusDate) && focusDate.month === month.number ? 0 : -1; // override context disabled\n\n if (disabled === true) {\n day.context.disabled = true;\n } // patch selection flag\n\n\n if (selectedDate !== undefined) {\n day.context.selected = selectedDate !== null && selectedDate.equals(day.date);\n } // visibility\n\n\n if (month.number !== day.date.month) {\n day.hidden = outsideDays === 'hidden' || outsideDays === 'collapsed' || displayMonths > 1 && day.date.after(months[0].firstDate) && day.date.before(months[displayMonths - 1].lastDate);\n }\n });\n });\n });\n }\n\n _updateState(patch) {\n // patching fields\n const state = Object.assign({}, this._state, patch);\n let startDate = state.firstDate; // min/max dates changed\n\n if ('minDate' in patch || 'maxDate' in patch) {\n checkMinBeforeMax(state.minDate, state.maxDate);\n state.focusDate = checkDateInRange(state.focusDate, state.minDate, state.maxDate);\n state.firstDate = checkDateInRange(state.firstDate, state.minDate, state.maxDate);\n startDate = state.focusDate;\n } // disabled\n\n\n if ('disabled' in patch) {\n state.focusVisible = false;\n } // initial rebuild via 'select()'\n\n\n if ('selectedDate' in patch && this._state.months.length === 0) {\n startDate = state.selectedDate;\n } // terminate early if only focus visibility was changed\n\n\n if ('focusVisible' in patch) {\n return state;\n } // focus date changed\n\n\n if ('focusDate' in patch) {\n state.focusDate = checkDateInRange(state.focusDate, state.minDate, state.maxDate);\n startDate = state.focusDate; // nothing to rebuild if only focus changed and it is still visible\n\n if (state.months.length !== 0 && state.focusDate && !state.focusDate.before(state.firstDate) && !state.focusDate.after(state.lastDate)) {\n return state;\n }\n } // first date changed\n\n\n if ('firstDate' in patch) {\n state.firstDate = checkDateInRange(state.firstDate, state.minDate, state.maxDate);\n startDate = state.firstDate;\n } // rebuilding months\n\n\n if (startDate) {\n const forceRebuild = 'dayTemplateData' in patch || 'firstDayOfWeek' in patch || 'markDisabled' in patch || 'minDate' in patch || 'maxDate' in patch || 'disabled' in patch || 'outsideDays' in patch || 'weekdaysVisible' in patch;\n const months = buildMonths(this._calendar, startDate, state, this._i18n, forceRebuild); // updating months and boundary dates\n\n state.months = months;\n state.firstDate = months[0].firstDate;\n state.lastDate = months[months.length - 1].lastDate; // reset selected date if 'markDisabled' returns true\n\n if ('selectedDate' in patch && !isDateSelectable(state.selectedDate, state)) {\n state.selectedDate = null;\n } // adjusting focus after months were built\n\n\n if ('firstDate' in patch) {\n if (!state.focusDate || state.focusDate.before(state.firstDate) || state.focusDate.after(state.lastDate)) {\n state.focusDate = startDate;\n }\n } // adjusting months/years for the select box navigation\n\n\n const yearChanged = !this._state.firstDate || this._state.firstDate.year !== state.firstDate.year;\n const monthChanged = !this._state.firstDate || this._state.firstDate.month !== state.firstDate.month;\n\n if (state.navigation === 'select') {\n // years -> boundaries (min/max were changed)\n if ('minDate' in patch || 'maxDate' in patch || state.selectBoxes.years.length === 0 || yearChanged) {\n state.selectBoxes.years = generateSelectBoxYears(state.firstDate, state.minDate, state.maxDate);\n } // months -> when current year or boundaries change\n\n\n if ('minDate' in patch || 'maxDate' in patch || state.selectBoxes.months.length === 0 || yearChanged) {\n state.selectBoxes.months = generateSelectBoxMonths(this._calendar, state.firstDate, state.minDate, state.maxDate);\n }\n } else {\n state.selectBoxes = {\n years: [],\n months: []\n };\n } // updating navigation arrows -> boundaries change (min/max) or month/year changes\n\n\n if ((state.navigation === 'arrows' || state.navigation === 'select') && (monthChanged || yearChanged || 'minDate' in patch || 'maxDate' in patch || 'disabled' in patch)) {\n state.prevDisabled = state.disabled || prevMonthDisabled(this._calendar, state.firstDate, state.minDate);\n state.nextDisabled = state.disabled || nextMonthDisabled(this._calendar, state.lastDate, state.maxDate);\n }\n }\n\n return state;\n }\n\n }\n\n NgbDatepickerService.ɵfac = function NgbDatepickerService_Factory(t) {\n return new (t || NgbDatepickerService)(i0.ɵɵinject(NgbCalendar), i0.ɵɵinject(NgbDatepickerI18n));\n };\n\n NgbDatepickerService.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbDatepickerService,\n factory: NgbDatepickerService.ɵfac\n });\n return NgbDatepickerService;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})(); // clang-format on\n\n\nvar NavigationEvent = /*#__PURE__*/(() => {\n (function (NavigationEvent) {\n NavigationEvent[NavigationEvent[\"PREV\"] = 0] = \"PREV\";\n NavigationEvent[NavigationEvent[\"NEXT\"] = 1] = \"NEXT\";\n })(NavigationEvent || (NavigationEvent = {}));\n\n return NavigationEvent;\n})();\n\n/**\n * A configuration service for the [`NgbDatepicker`](#/components/datepicker/api#NgbDatepicker) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the datepickers used in the application.\n */\nlet NgbDatepickerConfig = /*#__PURE__*/(() => {\n class NgbDatepickerConfig {\n constructor() {\n this.displayMonths = 1;\n this.firstDayOfWeek = 1;\n this.navigation = 'select';\n this.outsideDays = 'visible';\n this.showWeekNumbers = false;\n this.weekdays = TranslationWidth.Short;\n }\n\n }\n\n NgbDatepickerConfig.ɵfac = function NgbDatepickerConfig_Factory(t) {\n return new (t || NgbDatepickerConfig)();\n };\n\n NgbDatepickerConfig.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbDatepickerConfig,\n factory: NgbDatepickerConfig.ɵfac,\n providedIn: 'root'\n });\n return NgbDatepickerConfig;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nfunction NGB_DATEPICKER_DATE_ADAPTER_FACTORY() {\n return new NgbDateStructAdapter();\n}\n/**\n * An abstract service that does the conversion between the internal datepicker `NgbDateStruct` model and\n * any provided user date model `D`, ex. a string, a native date, etc.\n *\n * The adapter is used **only** for conversion when binding datepicker to a form control,\n * ex. `[(ngModel)]=\"userDateModel\"`. Here `userDateModel` can be of any type.\n *\n * The default datepicker implementation assumes we use `NgbDateStruct` as a user model.\n *\n * See the [date format overview](#/components/datepicker/overview#date-model) for more details\n * and the [custom adapter demo](#/components/datepicker/examples#adapter) for an example.\n */\n\n\nlet NgbDateAdapter = /*#__PURE__*/(() => {\n class NgbDateAdapter {}\n\n NgbDateAdapter.ɵfac = function NgbDateAdapter_Factory(t) {\n return new (t || NgbDateAdapter)();\n };\n\n NgbDateAdapter.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbDateAdapter,\n factory: function () {\n return NGB_DATEPICKER_DATE_ADAPTER_FACTORY();\n },\n providedIn: 'root'\n });\n return NgbDateAdapter;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nlet NgbDateStructAdapter = /*#__PURE__*/(() => {\n class NgbDateStructAdapter extends NgbDateAdapter {\n /**\n * Converts a NgbDateStruct value into NgbDateStruct value\n */\n fromModel(date) {\n return date && isInteger(date.year) && isInteger(date.month) && isInteger(date.day) ? {\n year: date.year,\n month: date.month,\n day: date.day\n } : null;\n }\n /**\n * Converts a NgbDateStruct value into NgbDateStruct value\n */\n\n\n toModel(date) {\n return date && isInteger(date.year) && isInteger(date.month) && isInteger(date.day) ? {\n year: date.year,\n month: date.month,\n day: date.day\n } : null;\n }\n\n }\n\n NgbDateStructAdapter.ɵfac = /* @__PURE__ */function () {\n let ɵNgbDateStructAdapter_BaseFactory;\n return function NgbDateStructAdapter_Factory(t) {\n return (ɵNgbDateStructAdapter_BaseFactory || (ɵNgbDateStructAdapter_BaseFactory = i0.ɵɵgetInheritedFactory(NgbDateStructAdapter)))(t || NgbDateStructAdapter);\n };\n }();\n\n NgbDateStructAdapter.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbDateStructAdapter,\n factory: NgbDateStructAdapter.ɵfac\n });\n return NgbDateStructAdapter;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nlet NgbDatepickerDayView = /*#__PURE__*/(() => {\n class NgbDatepickerDayView {\n constructor(i18n) {\n this.i18n = i18n;\n }\n\n isMuted() {\n return !this.selected && (this.date.month !== this.currentMonth || this.disabled);\n }\n\n }\n\n NgbDatepickerDayView.ɵfac = function NgbDatepickerDayView_Factory(t) {\n return new (t || NgbDatepickerDayView)(i0.ɵɵdirectiveInject(NgbDatepickerI18n));\n };\n\n NgbDatepickerDayView.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: NgbDatepickerDayView,\n selectors: [[\"\", \"ngbDatepickerDayView\", \"\"]],\n hostAttrs: [1, \"btn-light\"],\n hostVars: 10,\n hostBindings: function NgbDatepickerDayView_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵclassProp(\"bg-primary\", ctx.selected)(\"text-white\", ctx.selected)(\"text-muted\", ctx.isMuted())(\"outside\", ctx.isMuted())(\"active\", ctx.focused);\n }\n },\n inputs: {\n currentMonth: \"currentMonth\",\n date: \"date\",\n disabled: \"disabled\",\n focused: \"focused\",\n selected: \"selected\"\n },\n attrs: _c10,\n decls: 1,\n vars: 1,\n template: function NgbDatepickerDayView_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtext(0);\n }\n\n if (rf & 2) {\n i0.ɵɵtextInterpolate(ctx.i18n.getDayNumerals(ctx.date));\n }\n },\n styles: [\"[ngbDatepickerDayView]{text-align:center;width:2rem;height:2rem;line-height:2rem;border-radius:.25rem;background:transparent}[ngbDatepickerDayView].outside{opacity:.5}\\n\"],\n encapsulation: 2,\n changeDetection: 0\n });\n return NgbDatepickerDayView;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nlet NgbDatepickerNavigationSelect = /*#__PURE__*/(() => {\n class NgbDatepickerNavigationSelect {\n constructor(i18n, _renderer) {\n this.i18n = i18n;\n this._renderer = _renderer;\n this.select = new EventEmitter();\n this._month = -1;\n this._year = -1;\n }\n\n changeMonth(month) {\n this.select.emit(new NgbDate(this.date.year, toInteger(month), 1));\n }\n\n changeYear(year) {\n this.select.emit(new NgbDate(toInteger(year), this.date.month, 1));\n }\n\n ngAfterViewChecked() {\n if (this.date) {\n if (this.date.month !== this._month) {\n this._month = this.date.month;\n\n this._renderer.setProperty(this.monthSelect.nativeElement, 'value', this._month);\n }\n\n if (this.date.year !== this._year) {\n this._year = this.date.year;\n\n this._renderer.setProperty(this.yearSelect.nativeElement, 'value', this._year);\n }\n }\n }\n\n }\n\n NgbDatepickerNavigationSelect.ɵfac = function NgbDatepickerNavigationSelect_Factory(t) {\n return new (t || NgbDatepickerNavigationSelect)(i0.ɵɵdirectiveInject(NgbDatepickerI18n), i0.ɵɵdirectiveInject(i0.Renderer2));\n };\n\n NgbDatepickerNavigationSelect.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: NgbDatepickerNavigationSelect,\n selectors: [[\"ngb-datepicker-navigation-select\"]],\n viewQuery: function NgbDatepickerNavigationSelect_Query(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵviewQuery(_c11, 7, ElementRef);\n i0.ɵɵviewQuery(_c12, 7, ElementRef);\n }\n\n if (rf & 2) {\n let _t;\n\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.monthSelect = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.yearSelect = _t.first);\n }\n },\n inputs: {\n date: \"date\",\n disabled: \"disabled\",\n months: \"months\",\n years: \"years\"\n },\n outputs: {\n select: \"select\"\n },\n decls: 6,\n vars: 4,\n consts: function () {\n let i18n_13;\n\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS_14 = goog.getMsg(\"Select month\");\n i18n_13 = MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS_14;\n } else {\n i18n_13 = $localize`:@@ngb.datepicker.select-month:Select month`;\n }\n\n let i18n_15;\n\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS_16 = goog.getMsg(\"Select month\");\n i18n_15 = MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS_16;\n } else {\n i18n_15 = $localize`:@@ngb.datepicker.select-month:Select month`;\n }\n\n let i18n_17;\n\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS_18 = goog.getMsg(\"Select year\");\n i18n_17 = MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS_18;\n } else {\n i18n_17 = $localize`:@@ngb.datepicker.select-year:Select year`;\n }\n\n let i18n_19;\n\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS_20 = goog.getMsg(\"Select year\");\n i18n_19 = MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS_20;\n } else {\n i18n_19 = $localize`:@@ngb.datepicker.select-year:Select year`;\n }\n\n return [[\"aria-label\", i18n_13, \"title\", i18n_15, 1, \"form-select\", 3, \"disabled\", \"change\"], [\"month\", \"\"], [3, \"value\", 4, \"ngFor\", \"ngForOf\"], [\"aria-label\", i18n_17, \"title\", i18n_19, 1, \"form-select\", 3, \"disabled\", \"change\"], [\"year\", \"\"], [3, \"value\"]];\n },\n template: function NgbDatepickerNavigationSelect_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"select\", 0, 1);\n i0.ɵɵlistener(\"change\", function NgbDatepickerNavigationSelect_Template_select_change_0_listener($event) {\n return ctx.changeMonth($event.target.value);\n });\n i0.ɵɵtemplate(2, NgbDatepickerNavigationSelect_option_2_Template, 2, 3, \"option\", 2);\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(3, \"select\", 3, 4);\n i0.ɵɵlistener(\"change\", function NgbDatepickerNavigationSelect_Template_select_change_3_listener($event) {\n return ctx.changeYear($event.target.value);\n });\n i0.ɵɵtemplate(5, NgbDatepickerNavigationSelect_option_5_Template, 2, 2, \"option\", 2);\n i0.ɵɵelementEnd();\n }\n\n if (rf & 2) {\n i0.ɵɵproperty(\"disabled\", ctx.disabled);\n i0.ɵɵadvance(2);\n i0.ɵɵproperty(\"ngForOf\", ctx.months);\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"disabled\", ctx.disabled);\n i0.ɵɵadvance(2);\n i0.ɵɵproperty(\"ngForOf\", ctx.years);\n }\n },\n directives: [i2.NgForOf, i3.NgSelectOption, i3.ɵNgSelectMultipleOption],\n styles: [\"ngb-datepicker-navigation-select>.form-select{flex:1 1 auto;padding:0 .5rem;font-size:.875rem;height:1.85rem}ngb-datepicker-navigation-select>.form-select:focus{z-index:1}ngb-datepicker-navigation-select>.form-select::-ms-value{background-color:transparent!important}\\n\"],\n encapsulation: 2,\n changeDetection: 0\n });\n return NgbDatepickerNavigationSelect;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nlet NgbDatepickerNavigation = /*#__PURE__*/(() => {\n class NgbDatepickerNavigation {\n constructor(i18n) {\n this.i18n = i18n;\n this.navigation = NavigationEvent;\n this.months = [];\n this.navigate = new EventEmitter();\n this.select = new EventEmitter();\n }\n\n onClickPrev(event) {\n event.currentTarget.focus();\n this.navigate.emit(this.navigation.PREV);\n }\n\n onClickNext(event) {\n event.currentTarget.focus();\n this.navigate.emit(this.navigation.NEXT);\n }\n\n }\n\n NgbDatepickerNavigation.ɵfac = function NgbDatepickerNavigation_Factory(t) {\n return new (t || NgbDatepickerNavigation)(i0.ɵɵdirectiveInject(NgbDatepickerI18n));\n };\n\n NgbDatepickerNavigation.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: NgbDatepickerNavigation,\n selectors: [[\"ngb-datepicker-navigation\"]],\n inputs: {\n date: \"date\",\n disabled: \"disabled\",\n months: \"months\",\n showSelect: \"showSelect\",\n prevDisabled: \"prevDisabled\",\n nextDisabled: \"nextDisabled\",\n selectBoxes: \"selectBoxes\"\n },\n outputs: {\n navigate: \"navigate\",\n select: \"select\"\n },\n decls: 8,\n vars: 4,\n consts: function () {\n let i18n_21;\n\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS_22 = goog.getMsg(\"Previous month\");\n i18n_21 = MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS_22;\n } else {\n i18n_21 = $localize`:@@ngb.datepicker.previous-month:Previous month`;\n }\n\n let i18n_23;\n\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS_24 = goog.getMsg(\"Previous month\");\n i18n_23 = MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS_24;\n } else {\n i18n_23 = $localize`:@@ngb.datepicker.previous-month:Previous month`;\n }\n\n let i18n_25;\n\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS_26 = goog.getMsg(\"Next month\");\n i18n_25 = MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS_26;\n } else {\n i18n_25 = $localize`:@@ngb.datepicker.next-month:Next month`;\n }\n\n let i18n_27;\n\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS_28 = goog.getMsg(\"Next month\");\n i18n_27 = MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS_28;\n } else {\n i18n_27 = $localize`:@@ngb.datepicker.next-month:Next month`;\n }\n\n return [[1, \"ngb-dp-arrow\"], [\"type\", \"button\", \"aria-label\", i18n_21, \"title\", i18n_23, 1, \"btn\", \"btn-link\", \"ngb-dp-arrow-btn\", 3, \"disabled\", \"click\"], [1, \"ngb-dp-navigation-chevron\"], [\"class\", \"ngb-dp-navigation-select\", 3, \"date\", \"disabled\", \"months\", \"years\", \"select\", 4, \"ngIf\"], [4, \"ngIf\"], [1, \"ngb-dp-arrow\", \"right\"], [\"type\", \"button\", \"aria-label\", i18n_25, \"title\", i18n_27, 1, \"btn\", \"btn-link\", \"ngb-dp-arrow-btn\", 3, \"disabled\", \"click\"], [1, \"ngb-dp-navigation-select\", 3, \"date\", \"disabled\", \"months\", \"years\", \"select\"], [\"ngFor\", \"\", 3, \"ngForOf\"], [\"class\", \"ngb-dp-arrow\", 4, \"ngIf\"], [1, \"ngb-dp-month-name\"]];\n },\n template: function NgbDatepickerNavigation_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 0)(1, \"button\", 1);\n i0.ɵɵlistener(\"click\", function NgbDatepickerNavigation_Template_button_click_1_listener($event) {\n return ctx.onClickPrev($event);\n });\n i0.ɵɵelement(2, \"span\", 2);\n i0.ɵɵelementEnd()();\n i0.ɵɵtemplate(3, NgbDatepickerNavigation_ngb_datepicker_navigation_select_3_Template, 1, 4, \"ngb-datepicker-navigation-select\", 3);\n i0.ɵɵtemplate(4, NgbDatepickerNavigation_4_Template, 1, 1, null, 4);\n i0.ɵɵelementStart(5, \"div\", 5)(6, \"button\", 6);\n i0.ɵɵlistener(\"click\", function NgbDatepickerNavigation_Template_button_click_6_listener($event) {\n return ctx.onClickNext($event);\n });\n i0.ɵɵelement(7, \"span\", 2);\n i0.ɵɵelementEnd()();\n }\n\n if (rf & 2) {\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"disabled\", ctx.prevDisabled);\n i0.ɵɵadvance(2);\n i0.ɵɵproperty(\"ngIf\", ctx.showSelect);\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngIf\", !ctx.showSelect);\n i0.ɵɵadvance(2);\n i0.ɵɵproperty(\"disabled\", ctx.nextDisabled);\n }\n },\n directives: [NgbDatepickerNavigationSelect, i2.NgIf, i2.NgForOf],\n styles: [\"ngb-datepicker-navigation{display:flex;align-items:center}.ngb-dp-navigation-chevron{border-style:solid;border-width:.2em .2em 0 0;display:inline-block;width:.75em;height:.75em;margin-left:.25em;margin-right:.15em;transform:rotate(-135deg)}.ngb-dp-arrow{display:flex;flex:1 1 auto;padding-right:0;padding-left:0;margin:0;width:2rem;height:2rem}.ngb-dp-arrow.right{justify-content:flex-end}.ngb-dp-arrow.right .ngb-dp-navigation-chevron{transform:rotate(45deg);margin-left:.15em;margin-right:.25em}.ngb-dp-arrow-btn{padding:0 .25rem;margin:0 .5rem;border:none;background-color:transparent;z-index:1}.ngb-dp-arrow-btn:focus{outline-width:1px;outline-style:auto}@media all and (-ms-high-contrast: none),(-ms-high-contrast: active){.ngb-dp-arrow-btn:focus{outline-style:solid}}.ngb-dp-month-name{font-size:larger;height:2rem;line-height:2rem;text-align:center}.ngb-dp-navigation-select{display:flex;flex:1 1 9rem}\\n\"],\n encapsulation: 2,\n changeDetection: 0\n });\n return NgbDatepickerNavigation;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nvar Key = /*#__PURE__*/(() => {\n (function (Key) {\n Key[Key[\"Tab\"] = 9] = \"Tab\";\n Key[Key[\"Enter\"] = 13] = \"Enter\";\n Key[Key[\"Escape\"] = 27] = \"Escape\";\n Key[Key[\"Space\"] = 32] = \"Space\";\n Key[Key[\"PageUp\"] = 33] = \"PageUp\";\n Key[Key[\"PageDown\"] = 34] = \"PageDown\";\n Key[Key[\"End\"] = 35] = \"End\";\n Key[Key[\"Home\"] = 36] = \"Home\";\n Key[Key[\"ArrowLeft\"] = 37] = \"ArrowLeft\";\n Key[Key[\"ArrowUp\"] = 38] = \"ArrowUp\";\n Key[Key[\"ArrowRight\"] = 39] = \"ArrowRight\";\n Key[Key[\"ArrowDown\"] = 40] = \"ArrowDown\";\n })(Key || (Key = {}));\n\n return Key;\n})();\n\n/**\n * A service that represents the keyboard navigation.\n *\n * Default keyboard shortcuts [are documented in the overview](#/components/datepicker/overview#keyboard-shortcuts)\n *\n * @since 5.2.0\n */\nlet NgbDatepickerKeyboardService = /*#__PURE__*/(() => {\n class NgbDatepickerKeyboardService {\n /**\n * Processes a keyboard event.\n */\n processKey(event, datepicker) {\n const {\n state,\n calendar\n } = datepicker;\n /* eslint-disable-next-line deprecation/deprecation */\n\n switch (event.which) {\n case Key.PageUp:\n datepicker.focusDate(calendar.getPrev(state.focusedDate, event.shiftKey ? 'y' : 'm', 1));\n break;\n\n case Key.PageDown:\n datepicker.focusDate(calendar.getNext(state.focusedDate, event.shiftKey ? 'y' : 'm', 1));\n break;\n\n case Key.End:\n datepicker.focusDate(event.shiftKey ? state.maxDate : state.lastDate);\n break;\n\n case Key.Home:\n datepicker.focusDate(event.shiftKey ? state.minDate : state.firstDate);\n break;\n\n case Key.ArrowLeft:\n datepicker.focusDate(calendar.getPrev(state.focusedDate, 'd', 1));\n break;\n\n case Key.ArrowUp:\n datepicker.focusDate(calendar.getPrev(state.focusedDate, 'd', calendar.getDaysPerWeek()));\n break;\n\n case Key.ArrowRight:\n datepicker.focusDate(calendar.getNext(state.focusedDate, 'd', 1));\n break;\n\n case Key.ArrowDown:\n datepicker.focusDate(calendar.getNext(state.focusedDate, 'd', calendar.getDaysPerWeek()));\n break;\n\n case Key.Enter:\n case Key.Space:\n datepicker.focusSelect();\n break;\n\n default:\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n }\n\n }\n\n NgbDatepickerKeyboardService.ɵfac = function NgbDatepickerKeyboardService_Factory(t) {\n return new (t || NgbDatepickerKeyboardService)();\n };\n\n NgbDatepickerKeyboardService.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbDatepickerKeyboardService,\n factory: NgbDatepickerKeyboardService.ɵfac,\n providedIn: 'root'\n });\n return NgbDatepickerKeyboardService;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A directive that marks the content template that customizes the way datepicker months are displayed\n *\n * @since 5.3.0\n */\n\n\nlet NgbDatepickerContent = /*#__PURE__*/(() => {\n class NgbDatepickerContent {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n\n }\n\n NgbDatepickerContent.ɵfac = function NgbDatepickerContent_Factory(t) {\n return new (t || NgbDatepickerContent)(i0.ɵɵdirectiveInject(i0.TemplateRef));\n };\n\n NgbDatepickerContent.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbDatepickerContent,\n selectors: [[\"ng-template\", \"ngbDatepickerContent\", \"\"]]\n });\n return NgbDatepickerContent;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A highly configurable component that helps you with selecting calendar dates.\n *\n * `NgbDatepicker` is meant to be displayed inline on a page or put inside a popup.\n */\n\n\nlet NgbDatepicker = /*#__PURE__*/(() => {\n class NgbDatepicker {\n constructor(_service, _calendar, i18n, config, cd, _elementRef, _ngbDateAdapter, _ngZone) {\n this._service = _service;\n this._calendar = _calendar;\n this.i18n = i18n;\n this._elementRef = _elementRef;\n this._ngbDateAdapter = _ngbDateAdapter;\n this._ngZone = _ngZone;\n this._controlValue = null;\n this._destroyed$ = new Subject();\n this._publicState = {};\n /**\n * An event emitted right before the navigation happens and displayed month changes.\n *\n * See [`NgbDatepickerNavigateEvent`](#/components/datepicker/api#NgbDatepickerNavigateEvent) for the payload info.\n */\n\n this.navigate = new EventEmitter();\n /**\n * An event emitted when user selects a date using keyboard or mouse.\n *\n * The payload of the event is currently selected `NgbDate`.\n *\n * @since 5.2.0\n */\n\n this.dateSelect = new EventEmitter();\n\n this.onChange = _ => {};\n\n this.onTouched = () => {};\n\n ['dayTemplate', 'dayTemplateData', 'displayMonths', 'firstDayOfWeek', 'footerTemplate', 'markDisabled', 'minDate', 'maxDate', 'navigation', 'outsideDays', 'showWeekNumbers', 'startDate', 'weekdays'].forEach(input => this[input] = config[input]);\n\n _service.dateSelect$.pipe(takeUntil(this._destroyed$)).subscribe(date => {\n this.dateSelect.emit(date);\n });\n\n _service.model$.pipe(takeUntil(this._destroyed$)).subscribe(model => {\n const newDate = model.firstDate;\n const oldDate = this.model ? this.model.firstDate : null; // update public state\n\n this._publicState = {\n maxDate: model.maxDate,\n minDate: model.minDate,\n firstDate: model.firstDate,\n lastDate: model.lastDate,\n focusedDate: model.focusDate,\n months: model.months.map(viewModel => viewModel.firstDate)\n };\n let navigationPrevented = false; // emitting navigation event if the first month changes\n\n if (!newDate.equals(oldDate)) {\n this.navigate.emit({\n current: oldDate ? {\n year: oldDate.year,\n month: oldDate.month\n } : null,\n next: {\n year: newDate.year,\n month: newDate.month\n },\n preventDefault: () => navigationPrevented = true\n }); // can't prevent the very first navigation\n\n if (navigationPrevented && oldDate !== null) {\n this._service.open(oldDate);\n\n return;\n }\n }\n\n const newSelectedDate = model.selectedDate;\n const newFocusedDate = model.focusDate;\n const oldFocusedDate = this.model ? this.model.focusDate : null;\n this.model = model; // handling selection change\n\n if (isChangedDate(newSelectedDate, this._controlValue)) {\n this._controlValue = newSelectedDate;\n this.onTouched();\n this.onChange(this._ngbDateAdapter.toModel(newSelectedDate));\n } // handling focus change\n\n\n if (isChangedDate(newFocusedDate, oldFocusedDate) && oldFocusedDate && model.focusVisible) {\n this.focus();\n }\n\n cd.markForCheck();\n });\n }\n /**\n * Returns the readonly public state of the datepicker\n *\n * @since 5.2.0\n */\n\n\n get state() {\n return this._publicState;\n }\n /**\n * Returns the calendar service used in the specific datepicker instance.\n *\n * @since 5.3.0\n */\n\n\n get calendar() {\n return this._calendar;\n }\n /**\n * Focuses on given date.\n */\n\n\n focusDate(date) {\n this._service.focus(NgbDate.from(date));\n }\n /**\n * Selects focused date.\n */\n\n\n focusSelect() {\n this._service.focusSelect();\n }\n\n focus() {\n this._ngZone.onStable.asObservable().pipe(take(1)).subscribe(() => {\n const elementToFocus = this._elementRef.nativeElement.querySelector('div.ngb-dp-day[tabindex=\"0\"]');\n\n if (elementToFocus) {\n elementToFocus.focus();\n }\n });\n }\n /**\n * Navigates to the provided date.\n *\n * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec.\n * If nothing or invalid date provided calendar will open current month.\n *\n * Use the `[startDate]` input as an alternative.\n */\n\n\n navigateTo(date) {\n this._service.open(NgbDate.from(date ? date.day ? date : Object.assign(Object.assign({}, date), {\n day: 1\n }) : null));\n }\n\n ngAfterViewInit() {\n this._ngZone.runOutsideAngular(() => {\n const focusIns$ = fromEvent(this._contentEl.nativeElement, 'focusin');\n const focusOuts$ = fromEvent(this._contentEl.nativeElement, 'focusout');\n const {\n nativeElement\n } = this._elementRef; // we're changing 'focusVisible' only when entering or leaving months view\n // and ignoring all focus events where both 'target' and 'related' target are day cells\n\n merge(focusIns$, focusOuts$).pipe(filter(({\n target,\n relatedTarget\n }) => !(hasClassName(target, 'ngb-dp-day') && hasClassName(relatedTarget, 'ngb-dp-day') && nativeElement.contains(target) && nativeElement.contains(relatedTarget))), takeUntil(this._destroyed$)).subscribe(({\n type\n }) => this._ngZone.run(() => this._service.set({\n focusVisible: type === 'focusin'\n })));\n });\n }\n\n ngOnDestroy() {\n this._destroyed$.next();\n }\n\n ngOnInit() {\n if (this.model === undefined) {\n const inputs = {};\n ['dayTemplateData', 'displayMonths', 'markDisabled', 'firstDayOfWeek', 'navigation', 'minDate', 'maxDate', 'outsideDays', 'weekdays'].forEach(name => inputs[name] = this[name]);\n\n this._service.set(inputs);\n\n this.navigateTo(this.startDate);\n }\n\n if (!this.dayTemplate) {\n this.dayTemplate = this._defaultDayTemplate;\n }\n }\n\n ngOnChanges(changes) {\n const inputs = {};\n ['dayTemplateData', 'displayMonths', 'markDisabled', 'firstDayOfWeek', 'navigation', 'minDate', 'maxDate', 'outsideDays', 'weekdays'].filter(name => name in changes).forEach(name => inputs[name] = this[name]);\n\n this._service.set(inputs);\n\n if ('startDate' in changes) {\n const {\n currentValue,\n previousValue\n } = changes.startDate;\n\n if (isChangedMonth(previousValue, currentValue)) {\n this.navigateTo(this.startDate);\n }\n }\n }\n\n onDateSelect(date) {\n this._service.focus(date);\n\n this._service.select(date, {\n emitEvent: true\n });\n }\n\n onNavigateDateSelect(date) {\n this._service.open(date);\n }\n\n onNavigateEvent(event) {\n switch (event) {\n case NavigationEvent.PREV:\n this._service.open(this._calendar.getPrev(this.model.firstDate, 'm', 1));\n\n break;\n\n case NavigationEvent.NEXT:\n this._service.open(this._calendar.getNext(this.model.firstDate, 'm', 1));\n\n break;\n }\n }\n\n registerOnChange(fn) {\n this.onChange = fn;\n }\n\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n\n setDisabledState(disabled) {\n this._service.set({\n disabled\n });\n }\n\n writeValue(value) {\n this._controlValue = NgbDate.from(this._ngbDateAdapter.fromModel(value));\n\n this._service.select(this._controlValue);\n }\n\n }\n\n NgbDatepicker.ɵfac = function NgbDatepicker_Factory(t) {\n return new (t || NgbDatepicker)(i0.ɵɵdirectiveInject(NgbDatepickerService), i0.ɵɵdirectiveInject(NgbCalendar), i0.ɵɵdirectiveInject(NgbDatepickerI18n), i0.ɵɵdirectiveInject(NgbDatepickerConfig), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(NgbDateAdapter), i0.ɵɵdirectiveInject(i0.NgZone));\n };\n\n NgbDatepicker.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: NgbDatepicker,\n selectors: [[\"ngb-datepicker\"]],\n contentQueries: function NgbDatepicker_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, NgbDatepickerContent, 7);\n }\n\n if (rf & 2) {\n let _t;\n\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.contentTemplate = _t.first);\n }\n },\n viewQuery: function NgbDatepicker_Query(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵviewQuery(_c29, 7);\n i0.ɵɵviewQuery(_c30, 7);\n }\n\n if (rf & 2) {\n let _t;\n\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._defaultDayTemplate = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._contentEl = _t.first);\n }\n },\n inputs: {\n dayTemplate: \"dayTemplate\",\n dayTemplateData: \"dayTemplateData\",\n displayMonths: \"displayMonths\",\n firstDayOfWeek: \"firstDayOfWeek\",\n footerTemplate: \"footerTemplate\",\n markDisabled: \"markDisabled\",\n maxDate: \"maxDate\",\n minDate: \"minDate\",\n navigation: \"navigation\",\n outsideDays: \"outsideDays\",\n showWeekNumbers: \"showWeekNumbers\",\n startDate: \"startDate\",\n weekdays: \"weekdays\"\n },\n outputs: {\n navigate: \"navigate\",\n dateSelect: \"dateSelect\"\n },\n exportAs: [\"ngbDatepicker\"],\n features: [i0.ɵɵProvidersFeature([{\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgbDatepicker),\n multi: true\n }, NgbDatepickerService]), i0.ɵɵNgOnChangesFeature],\n decls: 10,\n vars: 5,\n consts: [[\"defaultDayTemplate\", \"\"], [\"defaultContentTemplate\", \"\"], [1, \"ngb-dp-header\"], [3, \"date\", \"months\", \"disabled\", \"showSelect\", \"prevDisabled\", \"nextDisabled\", \"selectBoxes\", \"navigate\", \"select\", 4, \"ngIf\"], [1, \"ngb-dp-content\"], [\"content\", \"\"], [3, \"ngTemplateOutlet\"], [\"ngbDatepickerDayView\", \"\", 3, \"date\", \"currentMonth\", \"selected\", \"disabled\", \"focused\"], [\"class\", \"ngb-dp-month\", 4, \"ngFor\", \"ngForOf\"], [1, \"ngb-dp-month\"], [\"class\", \"ngb-dp-month-name\", 4, \"ngIf\"], [3, \"month\"], [1, \"ngb-dp-month-name\"], [3, \"date\", \"months\", \"disabled\", \"showSelect\", \"prevDisabled\", \"nextDisabled\", \"selectBoxes\", \"navigate\", \"select\"]],\n template: function NgbDatepicker_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtemplate(0, NgbDatepicker_ng_template_0_Template, 1, 5, \"ng-template\", null, 0, i0.ɵɵtemplateRefExtractor);\n i0.ɵɵtemplate(2, NgbDatepicker_ng_template_2_Template, 1, 1, \"ng-template\", null, 1, i0.ɵɵtemplateRefExtractor);\n i0.ɵɵelementStart(4, \"div\", 2);\n i0.ɵɵtemplate(5, NgbDatepicker_ngb_datepicker_navigation_5_Template, 1, 7, \"ngb-datepicker-navigation\", 3);\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(6, \"div\", 4, 5);\n i0.ɵɵtemplate(8, NgbDatepicker_ng_template_8_Template, 0, 0, \"ng-template\", 6);\n i0.ɵɵelementEnd();\n i0.ɵɵtemplate(9, NgbDatepicker_ng_template_9_Template, 0, 0, \"ng-template\", 6);\n }\n\n if (rf & 2) {\n const _r2 = i0.ɵɵreference(3);\n\n i0.ɵɵadvance(5);\n i0.ɵɵproperty(\"ngIf\", ctx.navigation !== \"none\");\n i0.ɵɵadvance(1);\n i0.ɵɵclassProp(\"ngb-dp-months\", !ctx.contentTemplate);\n i0.ɵɵadvance(2);\n i0.ɵɵproperty(\"ngTemplateOutlet\", (ctx.contentTemplate == null ? null : ctx.contentTemplate.templateRef) || _r2);\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngTemplateOutlet\", ctx.footerTemplate);\n }\n },\n directives: function () {\n return [NgbDatepickerDayView, NgbDatepickerMonth, NgbDatepickerNavigation, i2.NgForOf, i2.NgIf, i2.NgTemplateOutlet];\n },\n styles: [\"ngb-datepicker{border:1px solid #dfdfdf;border-radius:.25rem;display:inline-block}ngb-datepicker-month{pointer-events:auto}ngb-datepicker.dropdown-menu{padding:0}.ngb-dp-body{z-index:1055}.ngb-dp-header{border-bottom:0;border-radius:.25rem .25rem 0 0;padding-top:.25rem;background-color:#f8f9fa;background-color:var(--bs-light)}.ngb-dp-months{display:flex}.ngb-dp-month{pointer-events:none}.ngb-dp-month-name{font-size:larger;height:2rem;line-height:2rem;text-align:center;background-color:#f8f9fa;background-color:var(--bs-light)}.ngb-dp-month+.ngb-dp-month .ngb-dp-month-name,.ngb-dp-month+.ngb-dp-month .ngb-dp-week{padding-left:1rem}.ngb-dp-month:last-child .ngb-dp-week{padding-right:.25rem}.ngb-dp-month:first-child .ngb-dp-week{padding-left:.25rem}.ngb-dp-month .ngb-dp-week:last-child{padding-bottom:.25rem}\\n\"],\n encapsulation: 2,\n changeDetection: 0\n });\n return NgbDatepicker;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A component that renders one month including all the days, weekdays and week numbers. Can be used inside\n * the `<ng-template ngbDatepickerMonths></ng-template>` when you want to customize months layout.\n *\n * For a usage example, see [custom month layout demo](#/components/datepicker/examples#custommonth)\n *\n * @since 5.3.0\n */\n\n\nlet NgbDatepickerMonth = /*#__PURE__*/(() => {\n class NgbDatepickerMonth {\n constructor(i18n, datepicker, _keyboardService, _service) {\n this.i18n = i18n;\n this.datepicker = datepicker;\n this._keyboardService = _keyboardService;\n this._service = _service;\n }\n /**\n * The first date of month to be rendered.\n *\n * This month must one of the months present in the\n * [datepicker state](#/components/datepicker/api#NgbDatepickerState).\n */\n\n\n set month(month) {\n this.viewModel = this._service.getMonth(month);\n }\n\n onKeyDown(event) {\n this._keyboardService.processKey(event, this.datepicker);\n }\n\n doSelect(day) {\n if (!day.context.disabled && !day.hidden) {\n this.datepicker.onDateSelect(day.date);\n }\n }\n\n }\n\n NgbDatepickerMonth.ɵfac = function NgbDatepickerMonth_Factory(t) {\n return new (t || NgbDatepickerMonth)(i0.ɵɵdirectiveInject(NgbDatepickerI18n), i0.ɵɵdirectiveInject(NgbDatepicker), i0.ɵɵdirectiveInject(NgbDatepickerKeyboardService), i0.ɵɵdirectiveInject(NgbDatepickerService));\n };\n\n NgbDatepickerMonth.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: NgbDatepickerMonth,\n selectors: [[\"ngb-datepicker-month\"]],\n hostAttrs: [\"role\", \"grid\"],\n hostBindings: function NgbDatepickerMonth_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"keydown\", function NgbDatepickerMonth_keydown_HostBindingHandler($event) {\n return ctx.onKeyDown($event);\n });\n }\n },\n inputs: {\n month: \"month\"\n },\n decls: 2,\n vars: 2,\n consts: [[\"class\", \"ngb-dp-week ngb-dp-weekdays\", \"role\", \"row\", 4, \"ngIf\"], [\"ngFor\", \"\", 3, \"ngForOf\"], [\"role\", \"row\", 1, \"ngb-dp-week\", \"ngb-dp-weekdays\"], [\"class\", \"ngb-dp-weekday ngb-dp-showweek small\", 4, \"ngIf\"], [\"class\", \"ngb-dp-weekday small\", \"role\", \"columnheader\", 4, \"ngFor\", \"ngForOf\"], [1, \"ngb-dp-weekday\", \"ngb-dp-showweek\", \"small\"], [\"role\", \"columnheader\", 1, \"ngb-dp-weekday\", \"small\"], [\"class\", \"ngb-dp-week\", \"role\", \"row\", 4, \"ngIf\"], [\"role\", \"row\", 1, \"ngb-dp-week\"], [\"class\", \"ngb-dp-week-number small text-muted\", 4, \"ngIf\"], [\"class\", \"ngb-dp-day\", \"role\", \"gridcell\", 3, \"disabled\", \"tabindex\", \"hidden\", \"ngb-dp-today\", \"click\", 4, \"ngFor\", \"ngForOf\"], [1, \"ngb-dp-week-number\", \"small\", \"text-muted\"], [\"role\", \"gridcell\", 1, \"ngb-dp-day\", 3, \"tabindex\", \"click\"], [3, \"ngIf\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"]],\n template: function NgbDatepickerMonth_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtemplate(0, NgbDatepickerMonth_div_0_Template, 3, 2, \"div\", 0);\n i0.ɵɵtemplate(1, NgbDatepickerMonth_ng_template_1_Template, 1, 1, \"ng-template\", 1);\n }\n\n if (rf & 2) {\n i0.ɵɵproperty(\"ngIf\", ctx.viewModel.weekdays.length > 0);\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngForOf\", ctx.viewModel.weeks);\n }\n },\n directives: [i2.NgIf, i2.NgForOf, i2.NgTemplateOutlet],\n styles: [\"ngb-datepicker-month{display:block}.ngb-dp-weekday,.ngb-dp-week-number{line-height:2rem;text-align:center;font-style:italic}.ngb-dp-weekday{color:#0dcaf0;color:var(--bs-info)}.ngb-dp-week{border-radius:.25rem;display:flex}.ngb-dp-weekdays{border-bottom:1px solid rgba(0,0,0,.125);border-radius:0;background-color:#f8f9fa;background-color:var(--bs-light)}.ngb-dp-day,.ngb-dp-weekday,.ngb-dp-week-number{width:2rem;height:2rem}.ngb-dp-day{cursor:pointer}.ngb-dp-day.disabled,.ngb-dp-day.hidden{cursor:default;pointer-events:none}.ngb-dp-day[tabindex=\\\"0\\\"]{z-index:1}\\n\"],\n encapsulation: 2\n });\n return NgbDatepickerMonth;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nconst isContainedIn = (element, array) => array ? array.some(item => item.contains(element)) : false;\n\nconst matchesSelectorIfAny = (element, selector) => !selector || closest(element, selector) != null; // we have to add a more significant delay to avoid re-opening when handling (click) on a toggling element\n// TODO: use proper Angular platform detection when NgbAutoClose becomes a service and we can inject PLATFORM_ID\n\n\nconst isMobile = (() => {\n const isIOS = () => /iPad|iPhone|iPod/.test(navigator.userAgent) || /Macintosh/.test(navigator.userAgent) && navigator.maxTouchPoints && navigator.maxTouchPoints > 2;\n\n const isAndroid = () => /Android/.test(navigator.userAgent);\n\n return typeof navigator !== 'undefined' ? !!navigator.userAgent && (isIOS() || isAndroid()) : false;\n})(); // setting 'ngbAutoClose' synchronously on mobile results in immediate popup closing\n// when tapping on the triggering element\n\n\nconst wrapAsyncForMobile = fn => isMobile ? () => setTimeout(() => fn(), 100) : fn;\n\nfunction ngbAutoClose(zone, document, type, close, closed$, insideElements, ignoreElements, insideSelector) {\n // closing on ESC and outside clicks\n if (type) {\n zone.runOutsideAngular(wrapAsyncForMobile(() => {\n const shouldCloseOnClick = event => {\n const element = event.target;\n\n if (event.button === 2 || isContainedIn(element, ignoreElements)) {\n return false;\n }\n\n if (type === 'inside') {\n return isContainedIn(element, insideElements) && matchesSelectorIfAny(element, insideSelector);\n } else if (type === 'outside') {\n return !isContainedIn(element, insideElements);\n } else\n /* if (type === true) */\n {\n return matchesSelectorIfAny(element, insideSelector) || !isContainedIn(element, insideElements);\n }\n };\n\n const escapes$ = fromEvent(document, 'keydown').pipe(takeUntil(closed$),\n /* eslint-disable-next-line deprecation/deprecation */\n filter(e => e.which === Key.Escape), tap(e => e.preventDefault())); // we have to pre-calculate 'shouldCloseOnClick' on 'mousedown',\n // because on 'mouseup' DOM nodes might be detached\n\n const mouseDowns$ = fromEvent(document, 'mousedown').pipe(map(shouldCloseOnClick), takeUntil(closed$));\n const closeableClicks$ = fromEvent(document, 'mouseup').pipe(withLatestFrom(mouseDowns$), filter(([_, shouldClose]) => shouldClose), delay(0), takeUntil(closed$));\n race([escapes$.pipe(map(_ => 0\n /* ESCAPE */\n )), closeableClicks$.pipe(map(_ => 1\n /* CLICK */\n ))]).subscribe(source => zone.run(() => close(source)));\n }));\n }\n}\n\nconst FOCUSABLE_ELEMENTS_SELECTOR = ['a[href]', 'button:not([disabled])', 'input:not([disabled]):not([type=\"hidden\"])', 'select:not([disabled])', 'textarea:not([disabled])', '[contenteditable]', '[tabindex]:not([tabindex=\"-1\"])'].join(', ');\n/**\n * Returns first and last focusable elements inside of a given element based on specific CSS selector\n */\n\nfunction getFocusableBoundaryElements(element) {\n const list = Array.from(element.querySelectorAll(FOCUSABLE_ELEMENTS_SELECTOR)).filter(el => el.tabIndex !== -1);\n return [list[0], list[list.length - 1]];\n}\n/**\n * Function that enforces browser focus to be trapped inside a DOM element.\n *\n * Works only for clicks inside the element and navigation with 'Tab', ignoring clicks outside of the element\n *\n * @param zone Angular zone\n * @param element The element around which focus will be trapped inside\n * @param stopFocusTrap$ The observable stream. When completed the focus trap will clean up listeners\n * and free internal resources\n * @param refocusOnClick Put the focus back to the last focused element whenever a click occurs on element (default to\n * false)\n */\n\n\nconst ngbFocusTrap = (zone, element, stopFocusTrap$, refocusOnClick = false) => {\n zone.runOutsideAngular(() => {\n // last focused element\n const lastFocusedElement$ = fromEvent(element, 'focusin').pipe(takeUntil(stopFocusTrap$), map(e => e.target)); // 'tab' / 'shift+tab' stream\n\n fromEvent(element, 'keydown').pipe(takeUntil(stopFocusTrap$),\n /* eslint-disable-next-line deprecation/deprecation */\n filter(e => e.which === Key.Tab), withLatestFrom(lastFocusedElement$)).subscribe(([tabEvent, focusedElement]) => {\n const [first, last] = getFocusableBoundaryElements(element);\n\n if ((focusedElement === first || focusedElement === element) && tabEvent.shiftKey) {\n last.focus();\n tabEvent.preventDefault();\n }\n\n if (focusedElement === last && !tabEvent.shiftKey) {\n first.focus();\n tabEvent.preventDefault();\n }\n }); // inside click\n\n if (refocusOnClick) {\n fromEvent(element, 'click').pipe(takeUntil(stopFocusTrap$), withLatestFrom(lastFocusedElement$), map(arr => arr[1])).subscribe(lastFocusedElement => lastFocusedElement.focus());\n }\n });\n};\n\nconst placementSeparator = /\\s+/;\nconst spacesRegExp = / +/gi;\nconst startPrimaryPlacement = /^start/;\nconst endPrimaryPlacement = /^end/;\nconst startSecondaryPlacement = /-(top|left)$/;\nconst endSecondaryPlacement = /-(bottom|right)$/;\n\nfunction getPopperClassPlacement(placement) {\n const newPlacement = placement.replace(startPrimaryPlacement, 'left').replace(endPrimaryPlacement, 'right').replace(startSecondaryPlacement, '-start').replace(endSecondaryPlacement, '-end');\n return newPlacement;\n}\n\nconst popperStartPrimaryPlacement = /^left/;\nconst popperEndPrimaryPlacement = /^right/;\nconst popperStartSecondaryPlacement = /^start/;\nconst popperEndSecondaryPlacement = /^end/;\n\nfunction getBootstrapBaseClassPlacement(baseClass, placement) {\n let [primary, secondary] = placement.split('-');\n const newPrimary = primary.replace(popperStartPrimaryPlacement, 'start').replace(popperEndPrimaryPlacement, 'end');\n let classnames = [newPrimary];\n\n if (secondary) {\n let newSecondary = secondary;\n\n if (primary === 'left' || primary === 'right') {\n newSecondary = newSecondary.replace(popperStartSecondaryPlacement, 'top').replace(popperEndSecondaryPlacement, 'bottom');\n }\n\n classnames.push(`${newPrimary}-${newSecondary}`);\n }\n\n if (baseClass) {\n classnames = classnames.map(classname => `${baseClass}-${classname}`);\n }\n\n return classnames.join(' ');\n}\n/*\n * Accept the placement array and applies the appropriate placement dependent on the viewport.\n * Returns the applied placement.\n * In case of auto placement, placements are selected in order\n * 'top', 'bottom', 'start', 'end',\n * 'top-start', 'top-end',\n * 'bottom-start', 'bottom-end',\n * 'start-top', 'start-bottom',\n * 'end-top', 'end-bottom'.\n * */\n\n\nfunction getPopperOptions({\n placement,\n baseClass\n}) {\n let placementVals = Array.isArray(placement) ? placement : placement.split(placementSeparator); // No need to consider left and right here, as start and end are enough, and it is used for 'auto' placement only\n\n const allowedPlacements = ['top', 'bottom', 'start', 'end', 'top-start', 'top-end', 'bottom-start', 'bottom-end', 'start-top', 'start-bottom', 'end-top', 'end-bottom']; // replace auto placement with other placements\n\n let hasAuto = placementVals.findIndex(val => val === 'auto');\n\n if (hasAuto >= 0) {\n allowedPlacements.forEach(function (obj) {\n if (placementVals.find(val => val.search('^' + obj) !== -1) == null) {\n placementVals.splice(hasAuto++, 1, obj);\n }\n });\n }\n\n const popperPlacements = placementVals.map(_placement => {\n return getPopperClassPlacement(_placement);\n });\n let mainPlacement = popperPlacements.shift();\n const bsModifier = {\n name: 'bootstrapClasses',\n enabled: !!baseClass,\n phase: 'write',\n\n fn({\n state\n }) {\n const bsClassRegExp = new RegExp(baseClass + '(-[a-z]+)*', 'gi');\n const popperElement = state.elements.popper;\n const popperPlacement = state.placement;\n let className = popperElement.className; // Remove old bootstrap classes\n\n className = className.replace(bsClassRegExp, ''); // Add current placements\n\n className += ` ${getBootstrapBaseClassPlacement(baseClass, popperPlacement)}`; // Remove multiple spaces\n\n className = className.trim().replace(spacesRegExp, ' '); // Reassign\n\n popperElement.className = className;\n }\n\n };\n return {\n placement: mainPlacement,\n modifiers: [bsModifier, flip, preventOverflow, arrow, {\n enabled: true,\n name: 'flip',\n options: {\n fallbackPlacements: popperPlacements\n }\n }, {\n enabled: true,\n name: 'preventOverflow',\n phase: 'main',\n fn: function () {}\n }]\n };\n}\n\nfunction noop(arg) {\n return arg;\n}\n\nfunction ngbPositioning() {\n let popperInstance = null;\n return {\n createPopper(positioningOption) {\n if (!popperInstance) {\n const updatePopperOptions = positioningOption.updatePopperOptions || noop;\n let popperOptions = updatePopperOptions(getPopperOptions(positioningOption));\n popperInstance = createPopperLite(positioningOption.hostElement, positioningOption.targetElement, popperOptions);\n }\n },\n\n update() {\n if (popperInstance) {\n popperInstance.update();\n }\n },\n\n setOptions(positioningOption) {\n if (popperInstance) {\n const updatePopperOptions = positioningOption.updatePopperOptions || noop;\n let popperOptions = updatePopperOptions(getPopperOptions(positioningOption));\n popperInstance.setOptions(popperOptions);\n }\n },\n\n destroy() {\n if (popperInstance) {\n popperInstance.destroy();\n popperInstance = null;\n }\n }\n\n };\n}\n/**\n * A configuration service for the [`NgbDatepickerInput`](#/components/datepicker/api#NgbDatepicker) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the datepicker inputs used in the application.\n *\n * @since 5.2.0\n */\n\n\nlet NgbInputDatepickerConfig = /*#__PURE__*/(() => {\n class NgbInputDatepickerConfig extends NgbDatepickerConfig {\n constructor() {\n super(...arguments);\n this.autoClose = true;\n this.placement = ['bottom-start', 'bottom-end', 'top-start', 'top-end'];\n this.restoreFocus = true;\n }\n\n }\n\n NgbInputDatepickerConfig.ɵfac = /* @__PURE__ */function () {\n let ɵNgbInputDatepickerConfig_BaseFactory;\n return function NgbInputDatepickerConfig_Factory(t) {\n return (ɵNgbInputDatepickerConfig_BaseFactory || (ɵNgbInputDatepickerConfig_BaseFactory = i0.ɵɵgetInheritedFactory(NgbInputDatepickerConfig)))(t || NgbInputDatepickerConfig);\n };\n }();\n\n NgbInputDatepickerConfig.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbInputDatepickerConfig,\n factory: NgbInputDatepickerConfig.ɵfac,\n providedIn: 'root'\n });\n return NgbInputDatepickerConfig;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nfunction addPopperOffset(offset$1) {\n return options => {\n options.modifiers.push(offset, {\n name: 'offset',\n options: {\n offset: () => offset$1\n }\n });\n return options;\n };\n}\n\nfunction NGB_DATEPICKER_PARSER_FORMATTER_FACTORY() {\n return new NgbDateISOParserFormatter();\n}\n/**\n * An abstract service for parsing and formatting dates for the\n * [`NgbInputDatepicker`](#/components/datepicker/api#NgbInputDatepicker) directive.\n * Converts between the internal `NgbDateStruct` model presentation and a `string` that is displayed in the\n * input element.\n *\n * When user types something in the input this service attempts to parse it into a `NgbDateStruct` object.\n * And vice versa, when users selects a date in the calendar with the mouse, it must be displayed as a `string`\n * in the input.\n *\n * Default implementation uses the ISO 8601 format, but you can provide another implementation via DI\n * to use an alternative string format or a custom parsing logic.\n *\n * See the [date format overview](#/components/datepicker/overview#date-model) for more details.\n */\n\n\nlet NgbDateParserFormatter = /*#__PURE__*/(() => {\n class NgbDateParserFormatter {}\n\n NgbDateParserFormatter.ɵfac = function NgbDateParserFormatter_Factory(t) {\n return new (t || NgbDateParserFormatter)();\n };\n\n NgbDateParserFormatter.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbDateParserFormatter,\n factory: function () {\n return NGB_DATEPICKER_PARSER_FORMATTER_FACTORY();\n },\n providedIn: 'root'\n });\n return NgbDateParserFormatter;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nlet NgbDateISOParserFormatter = /*#__PURE__*/(() => {\n class NgbDateISOParserFormatter extends NgbDateParserFormatter {\n parse(value) {\n if (value != null) {\n const dateParts = value.trim().split('-');\n\n if (dateParts.length === 1 && isNumber(dateParts[0])) {\n return {\n year: toInteger(dateParts[0]),\n month: null,\n day: null\n };\n } else if (dateParts.length === 2 && isNumber(dateParts[0]) && isNumber(dateParts[1])) {\n return {\n year: toInteger(dateParts[0]),\n month: toInteger(dateParts[1]),\n day: null\n };\n } else if (dateParts.length === 3 && isNumber(dateParts[0]) && isNumber(dateParts[1]) && isNumber(dateParts[2])) {\n return {\n year: toInteger(dateParts[0]),\n month: toInteger(dateParts[1]),\n day: toInteger(dateParts[2])\n };\n }\n }\n\n return null;\n }\n\n format(date) {\n return date ? `${date.year}-${isNumber(date.month) ? padNumber(date.month) : ''}-${isNumber(date.day) ? padNumber(date.day) : ''}` : '';\n }\n\n }\n\n NgbDateISOParserFormatter.ɵfac = /* @__PURE__ */function () {\n let ɵNgbDateISOParserFormatter_BaseFactory;\n return function NgbDateISOParserFormatter_Factory(t) {\n return (ɵNgbDateISOParserFormatter_BaseFactory || (ɵNgbDateISOParserFormatter_BaseFactory = i0.ɵɵgetInheritedFactory(NgbDateISOParserFormatter)))(t || NgbDateISOParserFormatter);\n };\n }();\n\n NgbDateISOParserFormatter.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbDateISOParserFormatter,\n factory: NgbDateISOParserFormatter.ɵfac\n });\n return NgbDateISOParserFormatter;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A directive that allows to stick a datepicker popup to an input field.\n *\n * Manages interaction with the input field itself, does value formatting and provides forms integration.\n */\n\n\nlet NgbInputDatepicker = /*#__PURE__*/(() => {\n class NgbInputDatepicker {\n constructor(_parserFormatter, _elRef, _vcRef, _renderer, _ngZone, _calendar, _dateAdapter, _document, _changeDetector, config) {\n this._parserFormatter = _parserFormatter;\n this._elRef = _elRef;\n this._vcRef = _vcRef;\n this._renderer = _renderer;\n this._ngZone = _ngZone;\n this._calendar = _calendar;\n this._dateAdapter = _dateAdapter;\n this._document = _document;\n this._changeDetector = _changeDetector;\n this._cRef = null;\n this._disabled = false;\n this._elWithFocus = null;\n this._model = null;\n this._positioning = ngbPositioning();\n this._destroyCloseHandlers$ = new Subject();\n /**\n * An event emitted when user selects a date using keyboard or mouse.\n *\n * The payload of the event is currently selected `NgbDate`.\n *\n * @since 1.1.1\n */\n\n this.dateSelect = new EventEmitter();\n /**\n * Event emitted right after the navigation happens and displayed month changes.\n *\n * See [`NgbDatepickerNavigateEvent`](#/components/datepicker/api#NgbDatepickerNavigateEvent) for the payload info.\n */\n\n this.navigate = new EventEmitter();\n /**\n * An event fired after closing datepicker window.\n *\n * @since 4.2.0\n */\n\n this.closed = new EventEmitter();\n\n this._onChange = _ => {};\n\n this._onTouched = () => {};\n\n this._validatorChange = () => {};\n\n ['autoClose', 'container', 'positionTarget', 'placement'].forEach(input => this[input] = config[input]);\n }\n\n get disabled() {\n return this._disabled;\n }\n\n set disabled(value) {\n this._disabled = value === '' || value && value !== 'false';\n\n if (this.isOpen()) {\n this._cRef.instance.setDisabledState(this._disabled);\n }\n }\n\n registerOnChange(fn) {\n this._onChange = fn;\n }\n\n registerOnTouched(fn) {\n this._onTouched = fn;\n }\n\n registerOnValidatorChange(fn) {\n this._validatorChange = fn;\n }\n\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n }\n\n validate(c) {\n const {\n value\n } = c;\n\n if (value != null) {\n const ngbDate = this._fromDateStruct(this._dateAdapter.fromModel(value));\n\n if (!ngbDate) {\n return {\n 'ngbDate': {\n invalid: value\n }\n };\n }\n\n if (this.minDate && ngbDate.before(NgbDate.from(this.minDate))) {\n return {\n 'ngbDate': {\n minDate: {\n minDate: this.minDate,\n actual: value\n }\n }\n };\n }\n\n if (this.maxDate && ngbDate.after(NgbDate.from(this.maxDate))) {\n return {\n 'ngbDate': {\n maxDate: {\n maxDate: this.maxDate,\n actual: value\n }\n }\n };\n }\n }\n\n return null;\n }\n\n writeValue(value) {\n this._model = this._fromDateStruct(this._dateAdapter.fromModel(value));\n\n this._writeModelValue(this._model);\n }\n\n manualDateChange(value, updateView = false) {\n const inputValueChanged = value !== this._inputValue;\n\n if (inputValueChanged) {\n this._inputValue = value;\n this._model = this._fromDateStruct(this._parserFormatter.parse(value));\n }\n\n if (inputValueChanged || !updateView) {\n this._onChange(this._model ? this._dateAdapter.toModel(this._model) : value === '' ? null : value);\n }\n\n if (updateView && this._model) {\n this._writeModelValue(this._model);\n }\n }\n\n isOpen() {\n return !!this._cRef;\n }\n /**\n * Opens the datepicker popup.\n *\n * If the related form control contains a valid date, the corresponding month will be opened.\n */\n\n\n open() {\n if (!this.isOpen()) {\n this._cRef = this._vcRef.createComponent(NgbDatepicker);\n\n this._applyPopupStyling(this._cRef.location.nativeElement);\n\n this._applyDatepickerInputs(this._cRef.instance);\n\n this._subscribeForDatepickerOutputs(this._cRef.instance);\n\n this._cRef.instance.ngOnInit();\n\n this._cRef.instance.writeValue(this._dateAdapter.toModel(this._model)); // date selection event handling\n\n\n this._cRef.instance.registerOnChange(selectedDate => {\n this.writeValue(selectedDate);\n\n this._onChange(selectedDate);\n\n this._onTouched();\n });\n\n this._cRef.changeDetectorRef.detectChanges();\n\n this._cRef.instance.setDisabledState(this.disabled);\n\n if (this.container === 'body') {\n this._document.querySelector(this.container).appendChild(this._cRef.location.nativeElement);\n } // focus handling\n\n\n this._elWithFocus = this._document.activeElement;\n ngbFocusTrap(this._ngZone, this._cRef.location.nativeElement, this.closed, true);\n setTimeout(() => {\n var _a;\n\n return (_a = this._cRef) === null || _a === void 0 ? void 0 : _a.instance.focus();\n });\n let hostElement;\n\n if (isString(this.positionTarget)) {\n hostElement = this._document.querySelector(this.positionTarget);\n } else if (this.positionTarget instanceof HTMLElement) {\n hostElement = this.positionTarget;\n } else {\n hostElement = this._elRef.nativeElement;\n } // Setting up popper and scheduling updates when zone is stable\n\n\n this._ngZone.runOutsideAngular(() => {\n if (this._cRef) {\n this._positioning.createPopper({\n hostElement,\n targetElement: this._cRef.location.nativeElement,\n placement: this.placement,\n appendToBody: this.container === 'body',\n updatePopperOptions: addPopperOffset([0, 2])\n });\n\n this._zoneSubscription = this._ngZone.onStable.subscribe(() => this._positioning.update());\n }\n });\n\n if (this.positionTarget && !hostElement) {\n throw new Error('ngbDatepicker could not find element declared in [positionTarget] to position against.');\n }\n\n this._setCloseHandlers();\n }\n }\n /**\n * Closes the datepicker popup.\n */\n\n\n close() {\n var _a;\n\n if (this.isOpen()) {\n this._vcRef.remove(this._vcRef.indexOf(this._cRef.hostView));\n\n this._cRef = null;\n\n this._positioning.destroy();\n\n (_a = this._zoneSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();\n\n this._destroyCloseHandlers$.next();\n\n this.closed.emit();\n\n this._changeDetector.markForCheck(); // restore focus\n\n\n let elementToFocus = this._elWithFocus;\n\n if (isString(this.restoreFocus)) {\n elementToFocus = this._document.querySelector(this.restoreFocus);\n } else if (this.restoreFocus !== undefined) {\n elementToFocus = this.restoreFocus;\n } // in IE document.activeElement can contain an object without 'focus()' sometimes\n\n\n if (elementToFocus && elementToFocus['focus']) {\n elementToFocus.focus();\n } else {\n this._document.body.focus();\n }\n }\n }\n /**\n * Toggles the datepicker popup.\n */\n\n\n toggle() {\n if (this.isOpen()) {\n this.close();\n } else {\n this.open();\n }\n }\n /**\n * Navigates to the provided date.\n *\n * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec.\n * If nothing or invalid date provided calendar will open current month.\n *\n * Use the `[startDate]` input as an alternative.\n */\n\n\n navigateTo(date) {\n if (this.isOpen()) {\n this._cRef.instance.navigateTo(date);\n }\n }\n\n onBlur() {\n this._onTouched();\n }\n\n onFocus() {\n this._elWithFocus = this._elRef.nativeElement;\n }\n\n ngOnChanges(changes) {\n if (changes['minDate'] || changes['maxDate']) {\n this._validatorChange();\n\n if (this.isOpen()) {\n if (changes['minDate']) {\n this._cRef.instance.minDate = this.minDate;\n }\n\n if (changes['maxDate']) {\n this._cRef.instance.maxDate = this.maxDate;\n }\n\n this._cRef.instance.ngOnChanges(changes);\n }\n }\n\n if (changes['datepickerClass']) {\n const {\n currentValue,\n previousValue\n } = changes['datepickerClass'];\n\n this._applyPopupClass(currentValue, previousValue);\n }\n\n if (changes['autoClose'] && this.isOpen()) {\n this._setCloseHandlers();\n }\n }\n\n ngOnDestroy() {\n this.close();\n }\n\n _applyDatepickerInputs(datepickerInstance) {\n ['dayTemplate', 'dayTemplateData', 'displayMonths', 'firstDayOfWeek', 'footerTemplate', 'markDisabled', 'minDate', 'maxDate', 'navigation', 'outsideDays', 'showNavigation', 'showWeekNumbers', 'weekdays'].forEach(optionName => {\n if (this[optionName] !== undefined) {\n datepickerInstance[optionName] = this[optionName];\n }\n });\n datepickerInstance.startDate = this.startDate || this._model;\n }\n\n _applyPopupClass(newClass, oldClass) {\n var _a;\n\n const popupEl = (_a = this._cRef) === null || _a === void 0 ? void 0 : _a.location.nativeElement;\n\n if (popupEl) {\n if (newClass) {\n this._renderer.addClass(popupEl, newClass);\n }\n\n if (oldClass) {\n this._renderer.removeClass(popupEl, oldClass);\n }\n }\n }\n\n _applyPopupStyling(nativeElement) {\n this._renderer.addClass(nativeElement, 'dropdown-menu');\n\n this._renderer.addClass(nativeElement, 'show');\n\n if (this.container === 'body') {\n this._renderer.addClass(nativeElement, 'ngb-dp-body');\n }\n\n this._applyPopupClass(this.datepickerClass);\n }\n\n _subscribeForDatepickerOutputs(datepickerInstance) {\n datepickerInstance.navigate.subscribe(navigateEvent => this.navigate.emit(navigateEvent));\n datepickerInstance.dateSelect.subscribe(date => {\n this.dateSelect.emit(date);\n\n if (this.autoClose === true || this.autoClose === 'inside') {\n this.close();\n }\n });\n }\n\n _writeModelValue(model) {\n const value = this._parserFormatter.format(model);\n\n this._inputValue = value;\n\n this._renderer.setProperty(this._elRef.nativeElement, 'value', value);\n\n if (this.isOpen()) {\n this._cRef.instance.writeValue(this._dateAdapter.toModel(model));\n\n this._onTouched();\n }\n }\n\n _fromDateStruct(date) {\n const ngbDate = date ? new NgbDate(date.year, date.month, date.day) : null;\n return this._calendar.isValid(ngbDate) ? ngbDate : null;\n }\n\n _setCloseHandlers() {\n this._destroyCloseHandlers$.next();\n\n ngbAutoClose(this._ngZone, this._document, this.autoClose, () => this.close(), this._destroyCloseHandlers$, [], [this._elRef.nativeElement, this._cRef.location.nativeElement]);\n }\n\n }\n\n NgbInputDatepicker.ɵfac = function NgbInputDatepicker_Factory(t) {\n return new (t || NgbInputDatepicker)(i0.ɵɵdirectiveInject(NgbDateParserFormatter), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(i0.Renderer2), i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(NgbCalendar), i0.ɵɵdirectiveInject(NgbDateAdapter), i0.ɵɵdirectiveInject(DOCUMENT), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(NgbInputDatepickerConfig));\n };\n\n NgbInputDatepicker.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbInputDatepicker,\n selectors: [[\"input\", \"ngbDatepicker\", \"\"]],\n hostVars: 1,\n hostBindings: function NgbInputDatepicker_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"input\", function NgbInputDatepicker_input_HostBindingHandler($event) {\n return ctx.manualDateChange($event.target.value);\n })(\"change\", function NgbInputDatepicker_change_HostBindingHandler($event) {\n return ctx.manualDateChange($event.target.value, true);\n })(\"focus\", function NgbInputDatepicker_focus_HostBindingHandler() {\n return ctx.onFocus();\n })(\"blur\", function NgbInputDatepicker_blur_HostBindingHandler() {\n return ctx.onBlur();\n });\n }\n\n if (rf & 2) {\n i0.ɵɵhostProperty(\"disabled\", ctx.disabled);\n }\n },\n inputs: {\n autoClose: \"autoClose\",\n datepickerClass: \"datepickerClass\",\n dayTemplate: \"dayTemplate\",\n dayTemplateData: \"dayTemplateData\",\n displayMonths: \"displayMonths\",\n firstDayOfWeek: \"firstDayOfWeek\",\n footerTemplate: \"footerTemplate\",\n markDisabled: \"markDisabled\",\n minDate: \"minDate\",\n maxDate: \"maxDate\",\n navigation: \"navigation\",\n outsideDays: \"outsideDays\",\n placement: \"placement\",\n restoreFocus: \"restoreFocus\",\n showWeekNumbers: \"showWeekNumbers\",\n startDate: \"startDate\",\n container: \"container\",\n positionTarget: \"positionTarget\",\n weekdays: \"weekdays\",\n disabled: \"disabled\"\n },\n outputs: {\n dateSelect: \"dateSelect\",\n navigate: \"navigate\",\n closed: \"closed\"\n },\n exportAs: [\"ngbDatepicker\"],\n features: [i0.ɵɵProvidersFeature([{\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgbInputDatepicker),\n multi: true\n }, {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => NgbInputDatepicker),\n multi: true\n }, {\n provide: NgbDatepickerConfig,\n useExisting: NgbInputDatepickerConfig\n }]), i0.ɵɵNgOnChangesFeature]\n });\n return NgbInputDatepicker;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nlet NgbCalendarHijri = /*#__PURE__*/(() => {\n class NgbCalendarHijri extends NgbCalendar {\n getDaysPerWeek() {\n return 7;\n }\n\n getMonths() {\n return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];\n }\n\n getWeeksPerMonth() {\n return 6;\n }\n\n getNext(date, period = 'd', number = 1) {\n date = new NgbDate(date.year, date.month, date.day);\n\n switch (period) {\n case 'y':\n date = this._setYear(date, date.year + number);\n date.month = 1;\n date.day = 1;\n return date;\n\n case 'm':\n date = this._setMonth(date, date.month + number);\n date.day = 1;\n return date;\n\n case 'd':\n return this._setDay(date, date.day + number);\n\n default:\n return date;\n }\n }\n\n getPrev(date, period = 'd', number = 1) {\n return this.getNext(date, period, -number);\n }\n\n getWeekday(date) {\n const day = this.toGregorian(date).getDay(); // in JS Date Sun=0, in ISO 8601 Sun=7\n\n return day === 0 ? 7 : day;\n }\n\n getWeekNumber(week, firstDayOfWeek) {\n // in JS Date Sun=0, in ISO 8601 Sun=7\n if (firstDayOfWeek === 7) {\n firstDayOfWeek = 0;\n }\n\n const thursdayIndex = (4 + 7 - firstDayOfWeek) % 7;\n const date = week[thursdayIndex];\n const jsDate = this.toGregorian(date);\n jsDate.setDate(jsDate.getDate() + 4 - (jsDate.getDay() || 7)); // Thursday\n\n const time = jsDate.getTime();\n const MuhDate = this.toGregorian(new NgbDate(date.year, 1, 1)); // Compare with Muharram 1\n\n return Math.floor(Math.round((time - MuhDate.getTime()) / 86400000) / 7) + 1;\n }\n\n getToday() {\n return this.fromGregorian(new Date());\n }\n\n isValid(date) {\n return date != null && isNumber(date.year) && isNumber(date.month) && isNumber(date.day) && !isNaN(this.toGregorian(date).getTime());\n }\n\n _setDay(date, day) {\n day = +day;\n let mDays = this.getDaysPerMonth(date.month, date.year);\n\n if (day <= 0) {\n while (day <= 0) {\n date = this._setMonth(date, date.month - 1);\n mDays = this.getDaysPerMonth(date.month, date.year);\n day += mDays;\n }\n } else if (day > mDays) {\n while (day > mDays) {\n day -= mDays;\n date = this._setMonth(date, date.month + 1);\n mDays = this.getDaysPerMonth(date.month, date.year);\n }\n }\n\n date.day = day;\n return date;\n }\n\n _setMonth(date, month) {\n month = +month;\n date.year = date.year + Math.floor((month - 1) / 12);\n date.month = Math.floor(((month - 1) % 12 + 12) % 12) + 1;\n return date;\n }\n\n _setYear(date, year) {\n date.year = +year;\n return date;\n }\n\n }\n\n NgbCalendarHijri.ɵfac = /* @__PURE__ */function () {\n let ɵNgbCalendarHijri_BaseFactory;\n return function NgbCalendarHijri_Factory(t) {\n return (ɵNgbCalendarHijri_BaseFactory || (ɵNgbCalendarHijri_BaseFactory = i0.ɵɵgetInheritedFactory(NgbCalendarHijri)))(t || NgbCalendarHijri);\n };\n }();\n\n NgbCalendarHijri.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbCalendarHijri,\n factory: NgbCalendarHijri.ɵfac\n });\n return NgbCalendarHijri;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Checks if islamic year is a leap year\n */\n\n\nfunction isIslamicLeapYear(hYear) {\n return (14 + 11 * hYear) % 30 < 11;\n}\n/**\n * Checks if gregorian years is a leap year\n */\n\n\nfunction isGregorianLeapYear$1(gDate) {\n const year = gDate.getFullYear();\n return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;\n}\n/**\n * Returns the start of Hijri Month.\n * `hMonth` is 0 for Muharram, 1 for Safar, etc.\n * `hYear` is any Hijri hYear.\n */\n\n\nfunction getIslamicMonthStart(hYear, hMonth) {\n return Math.ceil(29.5 * hMonth) + (hYear - 1) * 354 + Math.floor((3 + 11 * hYear) / 30.0);\n}\n/**\n * Returns the start of Hijri year.\n * `year` is any Hijri year.\n */\n\n\nfunction getIslamicYearStart(year) {\n return (year - 1) * 354 + Math.floor((3 + 11 * year) / 30.0);\n}\n\nfunction mod$1(a, b) {\n return a - b * Math.floor(a / b);\n}\n/**\n * The civil calendar is one type of Hijri calendars used in islamic countries.\n * Uses a fixed cycle of alternating 29- and 30-day months,\n * with a leap day added to the last month of 11 out of every 30 years.\n * http://cldr.unicode.org/development/development-process/design-proposals/islamic-calendar-types\n * All the calculations here are based on the equations from \"Calendrical Calculations\" By Edward M. Reingold, Nachum\n * Dershowitz.\n */\n\n\nconst GREGORIAN_EPOCH$1 = 1721425.5;\nconst ISLAMIC_EPOCH = 1948439.5;\nlet NgbCalendarIslamicCivil = /*#__PURE__*/(() => {\n class NgbCalendarIslamicCivil extends NgbCalendarHijri {\n /**\n * Returns the equivalent islamic(civil) date value for a give input Gregorian date.\n * `gDate` is a JS Date to be converted to Hijri.\n */\n fromGregorian(gDate) {\n const gYear = gDate.getFullYear(),\n gMonth = gDate.getMonth(),\n gDay = gDate.getDate();\n let julianDay = GREGORIAN_EPOCH$1 - 1 + 365 * (gYear - 1) + Math.floor((gYear - 1) / 4) + -Math.floor((gYear - 1) / 100) + Math.floor((gYear - 1) / 400) + Math.floor((367 * (gMonth + 1) - 362) / 12 + (gMonth + 1 <= 2 ? 0 : isGregorianLeapYear$1(gDate) ? -1 : -2) + gDay);\n julianDay = Math.floor(julianDay) + 0.5;\n const days = julianDay - ISLAMIC_EPOCH;\n const hYear = Math.floor((30 * days + 10646) / 10631.0);\n let hMonth = Math.ceil((days - 29 - getIslamicYearStart(hYear)) / 29.5);\n hMonth = Math.min(hMonth, 11);\n const hDay = Math.ceil(days - getIslamicMonthStart(hYear, hMonth)) + 1;\n return new NgbDate(hYear, hMonth + 1, hDay);\n }\n /**\n * Returns the equivalent JS date value for a give input islamic(civil) date.\n * `hDate` is an islamic(civil) date to be converted to Gregorian.\n */\n\n\n toGregorian(hDate) {\n const hYear = hDate.year;\n const hMonth = hDate.month - 1;\n const hDay = hDate.day;\n const julianDay = hDay + Math.ceil(29.5 * hMonth) + (hYear - 1) * 354 + Math.floor((3 + 11 * hYear) / 30) + ISLAMIC_EPOCH - 1;\n const wjd = Math.floor(julianDay - 0.5) + 0.5,\n depoch = wjd - GREGORIAN_EPOCH$1,\n quadricent = Math.floor(depoch / 146097),\n dqc = mod$1(depoch, 146097),\n cent = Math.floor(dqc / 36524),\n dcent = mod$1(dqc, 36524),\n quad = Math.floor(dcent / 1461),\n dquad = mod$1(dcent, 1461),\n yindex = Math.floor(dquad / 365);\n let year = quadricent * 400 + cent * 100 + quad * 4 + yindex;\n\n if (!(cent === 4 || yindex === 4)) {\n year++;\n }\n\n const gYearStart = GREGORIAN_EPOCH$1 + 365 * (year - 1) + Math.floor((year - 1) / 4) - Math.floor((year - 1) / 100) + Math.floor((year - 1) / 400);\n const yearday = wjd - gYearStart;\n const tjd = GREGORIAN_EPOCH$1 - 1 + 365 * (year - 1) + Math.floor((year - 1) / 4) - Math.floor((year - 1) / 100) + Math.floor((year - 1) / 400) + Math.floor(739 / 12 + (isGregorianLeapYear$1(new Date(year, 3, 1)) ? -1 : -2) + 1);\n const leapadj = wjd < tjd ? 0 : isGregorianLeapYear$1(new Date(year, 3, 1)) ? 1 : 2;\n const month = Math.floor(((yearday + leapadj) * 12 + 373) / 367);\n const tjd2 = GREGORIAN_EPOCH$1 - 1 + 365 * (year - 1) + Math.floor((year - 1) / 4) - Math.floor((year - 1) / 100) + Math.floor((year - 1) / 400) + Math.floor((367 * month - 362) / 12 + (month <= 2 ? 0 : isGregorianLeapYear$1(new Date(year, month - 1, 1)) ? -1 : -2) + 1);\n const day = wjd - tjd2 + 1;\n return new Date(year, month - 1, day);\n }\n /**\n * Returns the number of days in a specific Hijri month.\n * `month` is 1 for Muharram, 2 for Safar, etc.\n * `year` is any Hijri year.\n */\n\n\n getDaysPerMonth(month, year) {\n year = year + Math.floor(month / 13);\n month = (month - 1) % 12 + 1;\n let length = 29 + month % 2;\n\n if (month === 12 && isIslamicLeapYear(year)) {\n length++;\n }\n\n return length;\n }\n\n }\n\n NgbCalendarIslamicCivil.ɵfac = /* @__PURE__ */function () {\n let ɵNgbCalendarIslamicCivil_BaseFactory;\n return function NgbCalendarIslamicCivil_Factory(t) {\n return (ɵNgbCalendarIslamicCivil_BaseFactory || (ɵNgbCalendarIslamicCivil_BaseFactory = i0.ɵɵgetInheritedFactory(NgbCalendarIslamicCivil)))(t || NgbCalendarIslamicCivil);\n };\n }();\n\n NgbCalendarIslamicCivil.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbCalendarIslamicCivil,\n factory: NgbCalendarIslamicCivil.ɵfac\n });\n return NgbCalendarIslamicCivil;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Umalqura calendar is one type of Hijri calendars used in islamic countries.\n * This Calendar is used by Saudi Arabia for administrative purpose.\n * Unlike tabular calendars, the algorithm involves astronomical calculation, but it's still deterministic.\n * http://cldr.unicode.org/development/development-process/design-proposals/islamic-calendar-types\n */\n\n\nconst GREGORIAN_FIRST_DATE = new Date(1882, 10, 12);\nconst GREGORIAN_LAST_DATE = new Date(2174, 10, 25);\nconst HIJRI_BEGIN = 1300;\nconst HIJRI_END = 1600;\nconst ONE_DAY = 1000 * 60 * 60 * 24;\nconst MONTH_LENGTH = [// 1300-1304\n'101010101010', '110101010100', '111011001001', '011011010100', '011011101010', // 1305-1309\n'001101101100', '101010101101', '010101010101', '011010101001', '011110010010', // 1310-1314\n'101110101001', '010111010100', '101011011010', '010101011100', '110100101101', // 1315-1319\n'011010010101', '011101001010', '101101010100', '101101101010', '010110101101', // 1320-1324\n'010010101110', '101001001111', '010100010111', '011010001011', '011010100101', // 1325-1329\n'101011010101', '001011010110', '100101011011', '010010011101', '101001001101', // 1330-1334\n'110100100110', '110110010101', '010110101100', '100110110110', '001010111010', // 1335-1339\n'101001011011', '010100101011', '101010010101', '011011001010', '101011101001', // 1340-1344\n'001011110100', '100101110110', '001010110110', '100101010110', '101011001010', // 1345-1349\n'101110100100', '101111010010', '010111011001', '001011011100', '100101101101', // 1350-1354\n'010101001101', '101010100101', '101101010010', '101110100101', '010110110100', // 1355-1359\n'100110110110', '010101010111', '001010010111', '010101001011', '011010100011', // 1360-1364\n'011101010010', '101101100101', '010101101010', '101010101011', '010100101011', // 1365-1369\n'110010010101', '110101001010', '110110100101', '010111001010', '101011010110', // 1370-1374\n'100101010111', '010010101011', '100101001011', '101010100101', '101101010010', // 1375-1379\n'101101101010', '010101110101', '001001110110', '100010110111', '010001011011', // 1380-1384\n'010101010101', '010110101001', '010110110100', '100111011010', '010011011101', // 1385-1389\n'001001101110', '100100110110', '101010101010', '110101010100', '110110110010', // 1390-1394\n'010111010101', '001011011010', '100101011011', '010010101011', '101001010101', // 1395-1399\n'101101001001', '101101100100', '101101110001', '010110110100', '101010110101', // 1400-1404\n'101001010101', '110100100101', '111010010010', '111011001001', '011011010100', // 1405-1409\n'101011101001', '100101101011', '010010101011', '101010010011', '110101001001', // 1410-1414\n'110110100100', '110110110010', '101010111001', '010010111010', '101001011011', // 1415-1419\n'010100101011', '101010010101', '101100101010', '101101010101', '010101011100', // 1420-1424\n'010010111101', '001000111101', '100100011101', '101010010101', '101101001010', // 1425-1429\n'101101011010', '010101101101', '001010110110', '100100111011', '010010011011', // 1430-1434\n'011001010101', '011010101001', '011101010100', '101101101010', '010101101100', // 1435-1439\n'101010101101', '010101010101', '101100101001', '101110010010', '101110101001', // 1440-1444\n'010111010100', '101011011010', '010101011010', '101010101011', '010110010101', // 1445-1449\n'011101001001', '011101100100', '101110101010', '010110110101', '001010110110', // 1450-1454\n'101001010110', '111001001101', '101100100101', '101101010010', '101101101010', // 1455-1459\n'010110101101', '001010101110', '100100101111', '010010010111', '011001001011', // 1460-1464\n'011010100101', '011010101100', '101011010110', '010101011101', '010010011101', // 1465-1469\n'101001001101', '110100010110', '110110010101', '010110101010', '010110110101', // 1470-1474\n'001011011010', '100101011011', '010010101101', '010110010101', '011011001010', // 1475-1479\n'011011100100', '101011101010', '010011110101', '001010110110', '100101010110', // 1480-1484\n'101010101010', '101101010100', '101111010010', '010111011001', '001011101010', // 1485-1489\n'100101101101', '010010101101', '101010010101', '101101001010', '101110100101', // 1490-1494\n'010110110010', '100110110101', '010011010110', '101010010111', '010101000111', // 1495-1499\n'011010010011', '011101001001', '101101010101', '010101101010', '101001101011', // 1500-1504\n'010100101011', '101010001011', '110101000110', '110110100011', '010111001010', // 1505-1509\n'101011010110', '010011011011', '001001101011', '100101001011', '101010100101', // 1510-1514\n'101101010010', '101101101001', '010101110101', '000101110110', '100010110111', // 1515-1519\n'001001011011', '010100101011', '010101100101', '010110110100', '100111011010', // 1520-1524\n'010011101101', '000101101101', '100010110110', '101010100110', '110101010010', // 1525-1529\n'110110101001', '010111010100', '101011011010', '100101011011', '010010101011', // 1530-1534\n'011001010011', '011100101001', '011101100010', '101110101001', '010110110010', // 1535-1539\n'101010110101', '010101010101', '101100100101', '110110010010', '111011001001', // 1540-1544\n'011011010010', '101011101001', '010101101011', '010010101011', '101001010101', // 1545-1549\n'110100101001', '110101010100', '110110101010', '100110110101', '010010111010', // 1550-1554\n'101000111011', '010010011011', '101001001101', '101010101010', '101011010101', // 1555-1559\n'001011011010', '100101011101', '010001011110', '101000101110', '110010011010', // 1560-1564\n'110101010101', '011010110010', '011010111001', '010010111010', '101001011101', // 1565-1569\n'010100101101', '101010010101', '101101010010', '101110101000', '101110110100', // 1570-1574\n'010110111001', '001011011010', '100101011010', '101101001010', '110110100100', // 1575-1579\n'111011010001', '011011101000', '101101101010', '010101101101', '010100110101', // 1580-1584\n'011010010101', '110101001010', '110110101000', '110111010100', '011011011010', // 1585-1589\n'010101011011', '001010011101', '011000101011', '101100010101', '101101001010', // 1590-1594\n'101110010101', '010110101010', '101010101110', '100100101110', '110010001111', // 1595-1599\n'010100100111', '011010010101', '011010101010', '101011010110', '010101011101', // 1600\n'001010011101'];\n\nfunction getDaysDiff(date1, date2) {\n // Ignores the time part in date1 and date2:\n const time1 = Date.UTC(date1.getFullYear(), date1.getMonth(), date1.getDate());\n const time2 = Date.UTC(date2.getFullYear(), date2.getMonth(), date2.getDate());\n const diff = Math.abs(time1 - time2);\n return Math.round(diff / ONE_DAY);\n}\n\nlet NgbCalendarIslamicUmalqura = /*#__PURE__*/(() => {\n class NgbCalendarIslamicUmalqura extends NgbCalendarIslamicCivil {\n /**\n * Returns the equivalent islamic(Umalqura) date value for a give input Gregorian date.\n * `gdate` is s JS Date to be converted to Hijri.\n */\n fromGregorian(gDate) {\n let hDay = 1,\n hMonth = 0,\n hYear = 1300;\n let daysDiff = getDaysDiff(gDate, GREGORIAN_FIRST_DATE);\n\n if (gDate.getTime() - GREGORIAN_FIRST_DATE.getTime() >= 0 && gDate.getTime() - GREGORIAN_LAST_DATE.getTime() <= 0) {\n let year = 1300;\n\n for (let i = 0; i < MONTH_LENGTH.length; i++, year++) {\n for (let j = 0; j < 12; j++) {\n let numOfDays = +MONTH_LENGTH[i][j] + 29;\n\n if (daysDiff <= numOfDays) {\n hDay = daysDiff + 1;\n\n if (hDay > numOfDays) {\n hDay = 1;\n j++;\n }\n\n if (j > 11) {\n j = 0;\n year++;\n }\n\n hMonth = j;\n hYear = year;\n return new NgbDate(hYear, hMonth + 1, hDay);\n }\n\n daysDiff = daysDiff - numOfDays;\n }\n }\n\n return null;\n } else {\n return super.fromGregorian(gDate);\n }\n }\n /**\n * Converts the current Hijri date to Gregorian.\n */\n\n\n toGregorian(hDate) {\n const hYear = hDate.year;\n const hMonth = hDate.month - 1;\n const hDay = hDate.day;\n let gDate = new Date(GREGORIAN_FIRST_DATE);\n let dayDiff = hDay - 1;\n\n if (hYear >= HIJRI_BEGIN && hYear <= HIJRI_END) {\n for (let y = 0; y < hYear - HIJRI_BEGIN; y++) {\n for (let m = 0; m < 12; m++) {\n dayDiff += +MONTH_LENGTH[y][m] + 29;\n }\n }\n\n for (let m = 0; m < hMonth; m++) {\n dayDiff += +MONTH_LENGTH[hYear - HIJRI_BEGIN][m] + 29;\n }\n\n gDate.setDate(GREGORIAN_FIRST_DATE.getDate() + dayDiff);\n } else {\n gDate = super.toGregorian(hDate);\n }\n\n return gDate;\n }\n /**\n * Returns the number of days in a specific Hijri hMonth.\n * `hMonth` is 1 for Muharram, 2 for Safar, etc.\n * `hYear` is any Hijri hYear.\n */\n\n\n getDaysPerMonth(hMonth, hYear) {\n if (hYear >= HIJRI_BEGIN && hYear <= HIJRI_END) {\n const pos = hYear - HIJRI_BEGIN;\n return +MONTH_LENGTH[pos][hMonth - 1] + 29;\n }\n\n return super.getDaysPerMonth(hMonth, hYear);\n }\n\n }\n\n NgbCalendarIslamicUmalqura.ɵfac = /* @__PURE__ */function () {\n let ɵNgbCalendarIslamicUmalqura_BaseFactory;\n return function NgbCalendarIslamicUmalqura_Factory(t) {\n return (ɵNgbCalendarIslamicUmalqura_BaseFactory || (ɵNgbCalendarIslamicUmalqura_BaseFactory = i0.ɵɵgetInheritedFactory(NgbCalendarIslamicUmalqura)))(t || NgbCalendarIslamicUmalqura);\n };\n }();\n\n NgbCalendarIslamicUmalqura.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbCalendarIslamicUmalqura,\n factory: NgbCalendarIslamicUmalqura.ɵfac\n });\n return NgbCalendarIslamicUmalqura;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Returns the equivalent JS date value for a give input Jalali date.\n * `jalaliDate` is an Jalali date to be converted to Gregorian.\n */\n\n\nfunction toGregorian$2(jalaliDate) {\n let jdn = jalaliToJulian(jalaliDate.year, jalaliDate.month, jalaliDate.day);\n let date = julianToGregorian(jdn);\n date.setHours(6, 30, 3, 200);\n return date;\n}\n/**\n * Returns the equivalent jalali date value for a give input Gregorian date.\n * `gdate` is a JS Date to be converted to jalali.\n * utc to local\n */\n\n\nfunction fromGregorian$2(gdate) {\n let g2d = gregorianToJulian(gdate.getFullYear(), gdate.getMonth() + 1, gdate.getDate());\n return julianToJalali(g2d);\n}\n\nfunction setJalaliYear(date, yearValue) {\n date.year = +yearValue;\n return date;\n}\n\nfunction setJalaliMonth(date, month) {\n month = +month;\n date.year = date.year + Math.floor((month - 1) / 12);\n date.month = Math.floor(((month - 1) % 12 + 12) % 12) + 1;\n return date;\n}\n\nfunction setJalaliDay(date, day) {\n let mDays = getDaysPerMonth(date.month, date.year);\n\n if (day <= 0) {\n while (day <= 0) {\n date = setJalaliMonth(date, date.month - 1);\n mDays = getDaysPerMonth(date.month, date.year);\n day += mDays;\n }\n } else if (day > mDays) {\n while (day > mDays) {\n day -= mDays;\n date = setJalaliMonth(date, date.month + 1);\n mDays = getDaysPerMonth(date.month, date.year);\n }\n }\n\n date.day = day;\n return date;\n}\n\nfunction mod(a, b) {\n return a - b * Math.floor(a / b);\n}\n\nfunction div(a, b) {\n return Math.trunc(a / b);\n}\n/*\n This function determines if the Jalali (Persian) year is\n leap (366-day long) or is the common year (365 days), and\n finds the day in March (Gregorian calendar) of the first\n day of the Jalali year (jalaliYear).\n @param jalaliYear Jalali calendar year (-61 to 3177)\n @return\n leap: number of years since the last leap year (0 to 4)\n gYear: Gregorian year of the beginning of Jalali year\n march: the March day of Farvardin the 1st (1st day of jalaliYear)\n @see: http://www.astro.uni.torun.pl/~kb/Papers/EMP/PersianC-EMP.htm\n @see: http://www.fourmilab.ch/documents/calendar/\n */\n\n\nfunction jalCal(jalaliYear) {\n // Jalali years starting the 33-year rule.\n let breaks = [-61, 9, 38, 199, 426, 686, 756, 818, 1111, 1181, 1210, 1635, 2060, 2097, 2192, 2262, 2324, 2394, 2456, 3178];\n const breaksLength = breaks.length;\n const gYear = jalaliYear + 621;\n let leapJ = -14;\n let jp = breaks[0];\n\n if (jalaliYear < jp || jalaliYear >= breaks[breaksLength - 1]) {\n throw new Error('Invalid Jalali year ' + jalaliYear);\n } // Find the limiting years for the Jalali year jalaliYear.\n\n\n let jump;\n\n for (let i = 1; i < breaksLength; i += 1) {\n const jm = breaks[i];\n jump = jm - jp;\n\n if (jalaliYear < jm) {\n break;\n }\n\n leapJ = leapJ + div(jump, 33) * 8 + div(mod(jump, 33), 4);\n jp = jm;\n }\n\n let n = jalaliYear - jp; // Find the number of leap years from AD 621 to the beginning\n // of the current Jalali year in the Persian calendar.\n\n leapJ = leapJ + div(n, 33) * 8 + div(mod(n, 33) + 3, 4);\n\n if (mod(jump, 33) === 4 && jump - n === 4) {\n leapJ += 1;\n } // And the same in the Gregorian calendar (until the year gYear).\n\n\n const leapG = div(gYear, 4) - div((div(gYear, 100) + 1) * 3, 4) - 150; // Determine the Gregorian date of Farvardin the 1st.\n\n const march = 20 + leapJ - leapG; // Find how many years have passed since the last leap year.\n\n if (jump - n < 6) {\n n = n - jump + div(jump + 4, 33) * 33;\n }\n\n let leap = mod(mod(n + 1, 33) - 1, 4);\n\n if (leap === -1) {\n leap = 4;\n }\n\n return {\n leap: leap,\n gy: gYear,\n march: march\n };\n}\n/*\n Calculates Gregorian and Julian calendar dates from the Julian Day number\n (jdn) for the period since jdn=-34839655 (i.e. the year -100100 of both\n calendars) to some millions years ahead of the present.\n @param jdn Julian Day number\n @return\n gYear: Calendar year (years BC numbered 0, -1, -2, ...)\n gMonth: Calendar month (1 to 12)\n gDay: Calendar day of the month M (1 to 28/29/30/31)\n */\n\n\nfunction julianToGregorian(julianDayNumber) {\n let j = 4 * julianDayNumber + 139361631;\n j = j + div(div(4 * julianDayNumber + 183187720, 146097) * 3, 4) * 4 - 3908;\n const i = div(mod(j, 1461), 4) * 5 + 308;\n const gDay = div(mod(i, 153), 5) + 1;\n const gMonth = mod(div(i, 153), 12) + 1;\n const gYear = div(j, 1461) - 100100 + div(8 - gMonth, 6);\n return new Date(gYear, gMonth - 1, gDay);\n}\n/*\n Converts a date of the Jalali calendar to the Julian Day number.\n @param jy Jalali year (1 to 3100)\n @param jm Jalali month (1 to 12)\n @param jd Jalali day (1 to 29/31)\n @return Julian Day number\n */\n\n\nfunction gregorianToJulian(gy, gm, gd) {\n let d = div((gy + div(gm - 8, 6) + 100100) * 1461, 4) + div(153 * mod(gm + 9, 12) + 2, 5) + gd - 34840408;\n d = d - div(div(gy + 100100 + div(gm - 8, 6), 100) * 3, 4) + 752;\n return d;\n}\n/*\n Converts the Julian Day number to a date in the Jalali calendar.\n @param julianDayNumber Julian Day number\n @return\n jalaliYear: Jalali year (1 to 3100)\n jalaliMonth: Jalali month (1 to 12)\n jalaliDay: Jalali day (1 to 29/31)\n */\n\n\nfunction julianToJalali(julianDayNumber) {\n let gy = julianToGregorian(julianDayNumber).getFullYear() // Calculate Gregorian year (gy).\n ,\n jalaliYear = gy - 621,\n r = jalCal(jalaliYear),\n gregorianDay = gregorianToJulian(gy, 3, r.march),\n jalaliDay,\n jalaliMonth,\n numberOfDays; // Find number of days that passed since 1 Farvardin.\n\n numberOfDays = julianDayNumber - gregorianDay;\n\n if (numberOfDays >= 0) {\n if (numberOfDays <= 185) {\n // The first 6 months.\n jalaliMonth = 1 + div(numberOfDays, 31);\n jalaliDay = mod(numberOfDays, 31) + 1;\n return new NgbDate(jalaliYear, jalaliMonth, jalaliDay);\n } else {\n // The remaining months.\n numberOfDays -= 186;\n }\n } else {\n // Previous Jalali year.\n jalaliYear -= 1;\n numberOfDays += 179;\n\n if (r.leap === 1) {\n numberOfDays += 1;\n }\n }\n\n jalaliMonth = 7 + div(numberOfDays, 30);\n jalaliDay = mod(numberOfDays, 30) + 1;\n return new NgbDate(jalaliYear, jalaliMonth, jalaliDay);\n}\n/*\n Converts a date of the Jalali calendar to the Julian Day number.\n @param jYear Jalali year (1 to 3100)\n @param jMonth Jalali month (1 to 12)\n @param jDay Jalali day (1 to 29/31)\n @return Julian Day number\n */\n\n\nfunction jalaliToJulian(jYear, jMonth, jDay) {\n let r = jalCal(jYear);\n return gregorianToJulian(r.gy, 3, r.march) + (jMonth - 1) * 31 - div(jMonth, 7) * (jMonth - 7) + jDay - 1;\n}\n/**\n * Returns the number of days in a specific jalali month.\n */\n\n\nfunction getDaysPerMonth(month, year) {\n if (month <= 6) {\n return 31;\n }\n\n if (month <= 11) {\n return 30;\n }\n\n if (jalCal(year).leap === 0) {\n return 30;\n }\n\n return 29;\n}\n\nlet NgbCalendarPersian = /*#__PURE__*/(() => {\n class NgbCalendarPersian extends NgbCalendar {\n getDaysPerWeek() {\n return 7;\n }\n\n getMonths() {\n return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];\n }\n\n getWeeksPerMonth() {\n return 6;\n }\n\n getNext(date, period = 'd', number = 1) {\n date = new NgbDate(date.year, date.month, date.day);\n\n switch (period) {\n case 'y':\n date = setJalaliYear(date, date.year + number);\n date.month = 1;\n date.day = 1;\n return date;\n\n case 'm':\n date = setJalaliMonth(date, date.month + number);\n date.day = 1;\n return date;\n\n case 'd':\n return setJalaliDay(date, date.day + number);\n\n default:\n return date;\n }\n }\n\n getPrev(date, period = 'd', number = 1) {\n return this.getNext(date, period, -number);\n }\n\n getWeekday(date) {\n const day = toGregorian$2(date).getDay(); // in JS Date Sun=0, in ISO 8601 Sun=7\n\n return day === 0 ? 7 : day;\n }\n\n getWeekNumber(week, firstDayOfWeek) {\n // in JS Date Sun=0, in ISO 8601 Sun=7\n if (firstDayOfWeek === 7) {\n firstDayOfWeek = 0;\n }\n\n const thursdayIndex = (4 + 7 - firstDayOfWeek) % 7;\n const date = week[thursdayIndex];\n const jsDate = toGregorian$2(date);\n jsDate.setDate(jsDate.getDate() + 4 - (jsDate.getDay() || 7)); // Thursday\n\n const time = jsDate.getTime();\n const startDate = toGregorian$2(new NgbDate(date.year, 1, 1));\n return Math.floor(Math.round((time - startDate.getTime()) / 86400000) / 7) + 1;\n }\n\n getToday() {\n return fromGregorian$2(new Date());\n }\n\n isValid(date) {\n return date != null && isInteger(date.year) && isInteger(date.month) && isInteger(date.day) && !isNaN(toGregorian$2(date).getTime());\n }\n\n }\n\n NgbCalendarPersian.ɵfac = /* @__PURE__ */function () {\n let ɵNgbCalendarPersian_BaseFactory;\n return function NgbCalendarPersian_Factory(t) {\n return (ɵNgbCalendarPersian_BaseFactory || (ɵNgbCalendarPersian_BaseFactory = i0.ɵɵgetInheritedFactory(NgbCalendarPersian)))(t || NgbCalendarPersian);\n };\n }();\n\n NgbCalendarPersian.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbCalendarPersian,\n factory: NgbCalendarPersian.ɵfac\n });\n return NgbCalendarPersian;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nconst PARTS_PER_HOUR = 1080;\nconst PARTS_PER_DAY = 24 * PARTS_PER_HOUR;\nconst PARTS_FRACTIONAL_MONTH = 12 * PARTS_PER_HOUR + 793;\nconst PARTS_PER_MONTH = 29 * PARTS_PER_DAY + PARTS_FRACTIONAL_MONTH;\nconst BAHARAD = 11 * PARTS_PER_HOUR + 204;\nconst HEBREW_DAY_ON_JAN_1_1970 = 2092591;\nconst GREGORIAN_EPOCH = 1721425.5;\n\nfunction isGregorianLeapYear(year) {\n return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;\n}\n\nfunction numberOfFirstDayInYear(year) {\n let monthsBeforeYear = Math.floor((235 * year - 234) / 19);\n let fractionalMonthsBeforeYear = monthsBeforeYear * PARTS_FRACTIONAL_MONTH + BAHARAD;\n let dayNumber = monthsBeforeYear * 29 + Math.floor(fractionalMonthsBeforeYear / PARTS_PER_DAY);\n let timeOfDay = fractionalMonthsBeforeYear % PARTS_PER_DAY;\n let dayOfWeek = dayNumber % 7; // 0 == Monday\n\n if (dayOfWeek === 2 || dayOfWeek === 4 || dayOfWeek === 6) {\n dayNumber++;\n dayOfWeek = dayNumber % 7;\n }\n\n if (dayOfWeek === 1 && timeOfDay > 15 * PARTS_PER_HOUR + 204 && !isHebrewLeapYear(year)) {\n dayNumber += 2;\n } else if (dayOfWeek === 0 && timeOfDay > 21 * PARTS_PER_HOUR + 589 && isHebrewLeapYear(year - 1)) {\n dayNumber++;\n }\n\n return dayNumber;\n}\n\nfunction getDaysInGregorianMonth(month, year) {\n let days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n\n if (isGregorianLeapYear(year)) {\n days[1]++;\n }\n\n return days[month - 1];\n}\n\nfunction getHebrewMonths(year) {\n return isHebrewLeapYear(year) ? 13 : 12;\n}\n/**\n * Returns the number of days in a specific Hebrew year.\n * `year` is any Hebrew year.\n */\n\n\nfunction getDaysInHebrewYear(year) {\n return numberOfFirstDayInYear(year + 1) - numberOfFirstDayInYear(year);\n}\n\nfunction isHebrewLeapYear(year) {\n if (year != null) {\n let b = (year * 12 + 17) % 19;\n return b >= (b < 0 ? -7 : 12);\n }\n\n return false;\n}\n/**\n * Returns the number of days in a specific Hebrew month.\n * `month` is 1 for Nisan, 2 for Iyar etc. Note: Hebrew leap year contains 13 months.\n * `year` is any Hebrew year.\n */\n\n\nfunction getDaysInHebrewMonth(month, year) {\n let yearLength = numberOfFirstDayInYear(year + 1) - numberOfFirstDayInYear(year);\n let yearType = (yearLength <= 380 ? yearLength : yearLength - 30) - 353;\n let leapYear = isHebrewLeapYear(year);\n let daysInMonth = leapYear ? [30, 29, 29, 29, 30, 30, 29, 30, 29, 30, 29, 30, 29] : [30, 29, 29, 29, 30, 29, 30, 29, 30, 29, 30, 29];\n\n if (yearType > 0) {\n daysInMonth[2]++; // Kislev gets an extra day in normal or complete years.\n }\n\n if (yearType > 1) {\n daysInMonth[1]++; // Heshvan gets an extra day in complete years only.\n }\n\n return daysInMonth[month - 1];\n}\n\nfunction getDayNumberInHebrewYear(date) {\n let numberOfDay = 0;\n\n for (let i = 1; i < date.month; i++) {\n numberOfDay += getDaysInHebrewMonth(i, date.year);\n }\n\n return numberOfDay + date.day;\n}\n\nfunction setHebrewMonth(date, val) {\n let after = val >= 0;\n\n if (!after) {\n val = -val;\n }\n\n while (val > 0) {\n if (after) {\n if (val > getHebrewMonths(date.year) - date.month) {\n val -= getHebrewMonths(date.year) - date.month + 1;\n date.year++;\n date.month = 1;\n } else {\n date.month += val;\n val = 0;\n }\n } else {\n if (val >= date.month) {\n date.year--;\n val -= date.month;\n date.month = getHebrewMonths(date.year);\n } else {\n date.month -= val;\n val = 0;\n }\n }\n }\n\n return date;\n}\n\nfunction setHebrewDay(date, val) {\n let after = val >= 0;\n\n if (!after) {\n val = -val;\n }\n\n while (val > 0) {\n if (after) {\n if (val > getDaysInHebrewYear(date.year) - getDayNumberInHebrewYear(date)) {\n val -= getDaysInHebrewYear(date.year) - getDayNumberInHebrewYear(date) + 1;\n date.year++;\n date.month = 1;\n date.day = 1;\n } else if (val > getDaysInHebrewMonth(date.month, date.year) - date.day) {\n val -= getDaysInHebrewMonth(date.month, date.year) - date.day + 1;\n date.month++;\n date.day = 1;\n } else {\n date.day += val;\n val = 0;\n }\n } else {\n if (val >= date.day) {\n val -= date.day;\n date.month--;\n\n if (date.month === 0) {\n date.year--;\n date.month = getHebrewMonths(date.year);\n }\n\n date.day = getDaysInHebrewMonth(date.month, date.year);\n } else {\n date.day -= val;\n val = 0;\n }\n }\n }\n\n return date;\n}\n/**\n * Returns the equivalent Hebrew date value for a give input Gregorian date.\n * `gdate` is a JS Date to be converted to Hebrew date.\n */\n\n\nfunction fromGregorian$1(gdate) {\n const date = new Date(gdate);\n const gYear = date.getFullYear(),\n gMonth = date.getMonth(),\n gDay = date.getDate();\n let julianDay = GREGORIAN_EPOCH - 1 + 365 * (gYear - 1) + Math.floor((gYear - 1) / 4) - Math.floor((gYear - 1) / 100) + Math.floor((gYear - 1) / 400) + Math.floor((367 * (gMonth + 1) - 362) / 12 + (gMonth + 1 <= 2 ? 0 : isGregorianLeapYear(gYear) ? -1 : -2) + gDay);\n julianDay = Math.floor(julianDay + 0.5);\n let daysSinceHebEpoch = julianDay - 347997;\n let monthsSinceHebEpoch = Math.floor(daysSinceHebEpoch * PARTS_PER_DAY / PARTS_PER_MONTH);\n let hYear = Math.floor((monthsSinceHebEpoch * 19 + 234) / 235) + 1;\n let firstDayOfThisYear = numberOfFirstDayInYear(hYear);\n let dayOfYear = daysSinceHebEpoch - firstDayOfThisYear;\n\n while (dayOfYear < 1) {\n hYear--;\n firstDayOfThisYear = numberOfFirstDayInYear(hYear);\n dayOfYear = daysSinceHebEpoch - firstDayOfThisYear;\n }\n\n let hMonth = 1;\n let hDay = dayOfYear;\n\n while (hDay > getDaysInHebrewMonth(hMonth, hYear)) {\n hDay -= getDaysInHebrewMonth(hMonth, hYear);\n hMonth++;\n }\n\n return new NgbDate(hYear, hMonth, hDay);\n}\n/**\n * Returns the equivalent JS date value for a given Hebrew date.\n * `hebrewDate` is an Hebrew date to be converted to Gregorian.\n */\n\n\nfunction toGregorian$1(hebrewDate) {\n const hYear = hebrewDate.year;\n const hMonth = hebrewDate.month;\n const hDay = hebrewDate.day;\n let days = numberOfFirstDayInYear(hYear);\n\n for (let i = 1; i < hMonth; i++) {\n days += getDaysInHebrewMonth(i, hYear);\n }\n\n days += hDay;\n let diffDays = days - HEBREW_DAY_ON_JAN_1_1970;\n let after = diffDays >= 0;\n\n if (!after) {\n diffDays = -diffDays;\n }\n\n let gYear = 1970;\n let gMonth = 1;\n let gDay = 1;\n\n while (diffDays > 0) {\n if (after) {\n if (diffDays >= (isGregorianLeapYear(gYear) ? 366 : 365)) {\n diffDays -= isGregorianLeapYear(gYear) ? 366 : 365;\n gYear++;\n } else if (diffDays >= getDaysInGregorianMonth(gMonth, gYear)) {\n diffDays -= getDaysInGregorianMonth(gMonth, gYear);\n gMonth++;\n } else {\n gDay += diffDays;\n diffDays = 0;\n }\n } else {\n if (diffDays >= (isGregorianLeapYear(gYear - 1) ? 366 : 365)) {\n diffDays -= isGregorianLeapYear(gYear - 1) ? 366 : 365;\n gYear--;\n } else {\n if (gMonth > 1) {\n gMonth--;\n } else {\n gMonth = 12;\n gYear--;\n }\n\n if (diffDays >= getDaysInGregorianMonth(gMonth, gYear)) {\n diffDays -= getDaysInGregorianMonth(gMonth, gYear);\n } else {\n gDay = getDaysInGregorianMonth(gMonth, gYear) - diffDays + 1;\n diffDays = 0;\n }\n }\n }\n }\n\n return new Date(gYear, gMonth - 1, gDay);\n}\n\nfunction hebrewNumerals(numerals) {\n if (!numerals) {\n return '';\n }\n\n const hArray0_9 = ['', '\\u05d0', '\\u05d1', '\\u05d2', '\\u05d3', '\\u05d4', '\\u05d5', '\\u05d6', '\\u05d7', '\\u05d8'];\n const hArray10_19 = ['\\u05d9', '\\u05d9\\u05d0', '\\u05d9\\u05d1', '\\u05d9\\u05d2', '\\u05d9\\u05d3', '\\u05d8\\u05d5', '\\u05d8\\u05d6', '\\u05d9\\u05d6', '\\u05d9\\u05d7', '\\u05d9\\u05d8'];\n const hArray20_90 = ['', '', '\\u05db', '\\u05dc', '\\u05de', '\\u05e0', '\\u05e1', '\\u05e2', '\\u05e4', '\\u05e6'];\n const hArray100_900 = ['', '\\u05e7', '\\u05e8', '\\u05e9', '\\u05ea', '\\u05ea\\u05e7', '\\u05ea\\u05e8', '\\u05ea\\u05e9', '\\u05ea\\u05ea', '\\u05ea\\u05ea\\u05e7'];\n const hArray1000_9000 = ['', '\\u05d0', '\\u05d1', '\\u05d1\\u05d0', '\\u05d1\\u05d1', '\\u05d4', '\\u05d4\\u05d0', '\\u05d4\\u05d1', '\\u05d4\\u05d1\\u05d0', '\\u05d4\\u05d1\\u05d1'];\n const geresh = '\\u05f3',\n gershaim = '\\u05f4';\n let mem = 0;\n let result = [];\n let step = 0;\n\n while (numerals > 0) {\n let m = numerals % 10;\n\n if (step === 0) {\n mem = m;\n } else if (step === 1) {\n if (m !== 1) {\n result.unshift(hArray20_90[m], hArray0_9[mem]);\n } else {\n result.unshift(hArray10_19[mem]);\n }\n } else if (step === 2) {\n result.unshift(hArray100_900[m]);\n } else {\n if (m !== 5) {\n result.unshift(hArray1000_9000[m], geresh, ' ');\n }\n\n break;\n }\n\n numerals = Math.floor(numerals / 10);\n\n if (step === 0 && numerals === 0) {\n result.unshift(hArray0_9[m]);\n }\n\n step++;\n }\n\n result = result.join('').split('');\n\n if (result.length === 1) {\n result.push(geresh);\n } else if (result.length > 1) {\n result.splice(result.length - 1, 0, gershaim);\n }\n\n return result.join('');\n}\n/**\n * @since 3.2.0\n */\n\n\nlet NgbCalendarHebrew = /*#__PURE__*/(() => {\n class NgbCalendarHebrew extends NgbCalendar {\n getDaysPerWeek() {\n return 7;\n }\n\n getMonths(year) {\n if (year && isHebrewLeapYear(year)) {\n return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13];\n } else {\n return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];\n }\n }\n\n getWeeksPerMonth() {\n return 6;\n }\n\n isValid(date) {\n if (date != null) {\n let b = isNumber(date.year) && isNumber(date.month) && isNumber(date.day);\n b = b && date.month > 0 && date.month <= (isHebrewLeapYear(date.year) ? 13 : 12);\n b = b && date.day > 0 && date.day <= getDaysInHebrewMonth(date.month, date.year);\n return b && !isNaN(toGregorian$1(date).getTime());\n }\n\n return false;\n }\n\n getNext(date, period = 'd', number = 1) {\n date = new NgbDate(date.year, date.month, date.day);\n\n switch (period) {\n case 'y':\n date.year += number;\n date.month = 1;\n date.day = 1;\n return date;\n\n case 'm':\n date = setHebrewMonth(date, number);\n date.day = 1;\n return date;\n\n case 'd':\n return setHebrewDay(date, number);\n\n default:\n return date;\n }\n }\n\n getPrev(date, period = 'd', number = 1) {\n return this.getNext(date, period, -number);\n }\n\n getWeekday(date) {\n const day = toGregorian$1(date).getDay(); // in JS Date Sun=0, in ISO 8601 Sun=7\n\n return day === 0 ? 7 : day;\n }\n\n getWeekNumber(week, firstDayOfWeek) {\n const date = week[week.length - 1];\n return Math.ceil(getDayNumberInHebrewYear(date) / 7);\n }\n\n getToday() {\n return fromGregorian$1(new Date());\n }\n /**\n * @since 3.4.0\n */\n\n\n toGregorian(date) {\n return fromJSDate(toGregorian$1(date));\n }\n /**\n * @since 3.4.0\n */\n\n\n fromGregorian(date) {\n return fromGregorian$1(toJSDate(date));\n }\n\n }\n\n NgbCalendarHebrew.ɵfac = /* @__PURE__ */function () {\n let ɵNgbCalendarHebrew_BaseFactory;\n return function NgbCalendarHebrew_Factory(t) {\n return (ɵNgbCalendarHebrew_BaseFactory || (ɵNgbCalendarHebrew_BaseFactory = i0.ɵɵgetInheritedFactory(NgbCalendarHebrew)))(t || NgbCalendarHebrew);\n };\n }();\n\n NgbCalendarHebrew.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbCalendarHebrew,\n factory: NgbCalendarHebrew.ɵfac\n });\n return NgbCalendarHebrew;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nconst WEEKDAYS = ['שני', 'שלישי', 'רביעי', 'חמישי', 'שישי', 'שבת', 'ראשון'];\nconst MONTHS = ['תשרי', 'חשון', 'כסלו', 'טבת', 'שבט', 'אדר', 'ניסן', 'אייר', 'סיון', 'תמוז', 'אב', 'אלול'];\nconst MONTHS_LEAP = ['תשרי', 'חשון', 'כסלו', 'טבת', 'שבט', 'אדר א׳', 'אדר ב׳', 'ניסן', 'אייר', 'סיון', 'תמוז', 'אב', 'אלול'];\n/**\n * @since 3.2.0\n */\n\nlet NgbDatepickerI18nHebrew = /*#__PURE__*/(() => {\n class NgbDatepickerI18nHebrew extends NgbDatepickerI18n {\n getMonthShortName(month, year) {\n return this.getMonthFullName(month, year);\n }\n\n getMonthFullName(month, year) {\n return isHebrewLeapYear(year) ? MONTHS_LEAP[month - 1] || '' : MONTHS[month - 1] || '';\n }\n\n getWeekdayLabel(weekday, width) {\n return WEEKDAYS[weekday - 1] || '';\n }\n\n getDayAriaLabel(date) {\n return `${hebrewNumerals(date.day)} ${this.getMonthFullName(date.month, date.year)} ${hebrewNumerals(date.year)}`;\n }\n\n getDayNumerals(date) {\n return hebrewNumerals(date.day);\n }\n\n getWeekNumerals(weekNumber) {\n return hebrewNumerals(weekNumber);\n }\n\n getYearNumerals(year) {\n return hebrewNumerals(year);\n }\n\n }\n\n NgbDatepickerI18nHebrew.ɵfac = /* @__PURE__ */function () {\n let ɵNgbDatepickerI18nHebrew_BaseFactory;\n return function NgbDatepickerI18nHebrew_Factory(t) {\n return (ɵNgbDatepickerI18nHebrew_BaseFactory || (ɵNgbDatepickerI18nHebrew_BaseFactory = i0.ɵɵgetInheritedFactory(NgbDatepickerI18nHebrew)))(t || NgbDatepickerI18nHebrew);\n };\n }();\n\n NgbDatepickerI18nHebrew.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbDatepickerI18nHebrew,\n factory: NgbDatepickerI18nHebrew.ɵfac\n });\n return NgbDatepickerI18nHebrew;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Returns the equivalent JS date value for a give input Buddhist date.\n * `date` is an Buddhist date to be converted to Gregorian.\n */\n\n\nfunction toGregorian(date) {\n return new Date(date.year - 543, date.month - 1, date.day);\n}\n/**\n * Returns the equivalent Buddhist date value for a give input Gregorian date.\n * `gdate` is a JS Date to be converted to Buddhist.\n * utc to local\n */\n\n\nfunction fromGregorian(gdate) {\n return new NgbDate(gdate.getFullYear() + 543, gdate.getMonth() + 1, gdate.getDate());\n}\n/**\n * @since 9.1.0\n */\n\n\nlet NgbCalendarBuddhist = /*#__PURE__*/(() => {\n class NgbCalendarBuddhist extends NgbCalendarGregorian {\n getToday() {\n return fromGregorian(new Date());\n }\n\n getNext(date, period = 'd', number = 1) {\n let jsDate = toGregorian(date);\n let checkMonth = true;\n let expectedMonth = jsDate.getMonth();\n\n switch (period) {\n case 'y':\n jsDate.setFullYear(jsDate.getFullYear() + number);\n break;\n\n case 'm':\n expectedMonth += number;\n jsDate.setMonth(expectedMonth);\n expectedMonth = expectedMonth % 12;\n\n if (expectedMonth < 0) {\n expectedMonth = expectedMonth + 12;\n }\n\n break;\n\n case 'd':\n jsDate.setDate(jsDate.getDate() + number);\n checkMonth = false;\n break;\n\n default:\n return date;\n }\n\n if (checkMonth && jsDate.getMonth() !== expectedMonth) {\n // this means the destination month has less days than the initial month\n // let's go back to the end of the previous month:\n jsDate.setDate(0);\n }\n\n return fromGregorian(jsDate);\n }\n\n getPrev(date, period = 'd', number = 1) {\n return this.getNext(date, period, -number);\n }\n\n getWeekday(date) {\n let jsDate = toGregorian(date);\n let day = jsDate.getDay(); // in JS Date Sun=0, in ISO 8601 Sun=7\n\n return day === 0 ? 7 : day;\n }\n\n getWeekNumber(week, firstDayOfWeek) {\n // in JS Date Sun=0, in ISO 8601 Sun=7\n if (firstDayOfWeek === 7) {\n firstDayOfWeek = 0;\n }\n\n const thursdayIndex = (4 + 7 - firstDayOfWeek) % 7;\n let date = week[thursdayIndex];\n const jsDate = toGregorian(date);\n jsDate.setDate(jsDate.getDate() + 4 - (jsDate.getDay() || 7)); // Thursday\n\n const time = jsDate.getTime();\n jsDate.setMonth(0); // Compare with Jan 1\n\n jsDate.setDate(1);\n return Math.floor(Math.round((time - jsDate.getTime()) / 86400000) / 7) + 1;\n }\n\n isValid(date) {\n if (!date || !isInteger(date.year) || !isInteger(date.month) || !isInteger(date.day)) {\n return false;\n } // year 0 doesn't exist in Gregorian calendar\n\n\n if (date.year === 0) {\n return false;\n }\n\n const jsDate = toGregorian(date);\n return !isNaN(jsDate.getTime()) && jsDate.getFullYear() === date.year - 543 && jsDate.getMonth() + 1 === date.month && jsDate.getDate() === date.day;\n }\n\n }\n\n NgbCalendarBuddhist.ɵfac = /* @__PURE__ */function () {\n let ɵNgbCalendarBuddhist_BaseFactory;\n return function NgbCalendarBuddhist_Factory(t) {\n return (ɵNgbCalendarBuddhist_BaseFactory || (ɵNgbCalendarBuddhist_BaseFactory = i0.ɵɵgetInheritedFactory(NgbCalendarBuddhist)))(t || NgbCalendarBuddhist);\n };\n }();\n\n NgbCalendarBuddhist.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbCalendarBuddhist,\n factory: NgbCalendarBuddhist.ɵfac\n });\n return NgbCalendarBuddhist;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * [`NgbDateAdapter`](#/components/datepicker/api#NgbDateAdapter) implementation that uses\n * native javascript dates as a user date model.\n */\n\n\nlet NgbDateNativeAdapter = /*#__PURE__*/(() => {\n class NgbDateNativeAdapter extends NgbDateAdapter {\n /**\n * Converts a native `Date` to a `NgbDateStruct`.\n */\n fromModel(date) {\n return date instanceof Date && !isNaN(date.getTime()) ? this._fromNativeDate(date) : null;\n }\n /**\n * Converts a `NgbDateStruct` to a native `Date`.\n */\n\n\n toModel(date) {\n return date && isInteger(date.year) && isInteger(date.month) && isInteger(date.day) ? this._toNativeDate(date) : null;\n }\n\n _fromNativeDate(date) {\n return {\n year: date.getFullYear(),\n month: date.getMonth() + 1,\n day: date.getDate()\n };\n }\n\n _toNativeDate(date) {\n const jsDate = new Date(date.year, date.month - 1, date.day, 12); // avoid 30 -> 1930 conversion\n\n jsDate.setFullYear(date.year);\n return jsDate;\n }\n\n }\n\n NgbDateNativeAdapter.ɵfac = /* @__PURE__ */function () {\n let ɵNgbDateNativeAdapter_BaseFactory;\n return function NgbDateNativeAdapter_Factory(t) {\n return (ɵNgbDateNativeAdapter_BaseFactory || (ɵNgbDateNativeAdapter_BaseFactory = i0.ɵɵgetInheritedFactory(NgbDateNativeAdapter)))(t || NgbDateNativeAdapter);\n };\n }();\n\n NgbDateNativeAdapter.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbDateNativeAdapter,\n factory: NgbDateNativeAdapter.ɵfac\n });\n return NgbDateNativeAdapter;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Same as [`NgbDateNativeAdapter`](#/components/datepicker/api#NgbDateNativeAdapter), but with UTC dates.\n *\n * @since 3.2.0\n */\n\n\nlet NgbDateNativeUTCAdapter = /*#__PURE__*/(() => {\n class NgbDateNativeUTCAdapter extends NgbDateNativeAdapter {\n _fromNativeDate(date) {\n return {\n year: date.getUTCFullYear(),\n month: date.getUTCMonth() + 1,\n day: date.getUTCDate()\n };\n }\n\n _toNativeDate(date) {\n const jsDate = new Date(Date.UTC(date.year, date.month - 1, date.day)); // avoid 30 -> 1930 conversion\n\n jsDate.setUTCFullYear(date.year);\n return jsDate;\n }\n\n }\n\n NgbDateNativeUTCAdapter.ɵfac = /* @__PURE__ */function () {\n let ɵNgbDateNativeUTCAdapter_BaseFactory;\n return function NgbDateNativeUTCAdapter_Factory(t) {\n return (ɵNgbDateNativeUTCAdapter_BaseFactory || (ɵNgbDateNativeUTCAdapter_BaseFactory = i0.ɵɵgetInheritedFactory(NgbDateNativeUTCAdapter)))(t || NgbDateNativeUTCAdapter);\n };\n }();\n\n NgbDateNativeUTCAdapter.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbDateNativeUTCAdapter,\n factory: NgbDateNativeUTCAdapter.ɵfac\n });\n return NgbDateNativeUTCAdapter;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nlet NgbDatepickerModule = /*#__PURE__*/(() => {\n class NgbDatepickerModule {}\n\n NgbDatepickerModule.ɵfac = function NgbDatepickerModule_Factory(t) {\n return new (t || NgbDatepickerModule)();\n };\n\n NgbDatepickerModule.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: NgbDatepickerModule\n });\n NgbDatepickerModule.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [[CommonModule, FormsModule]]\n });\n return NgbDatepickerModule;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A configuration service for the [`NgbDropdown`](#/components/dropdown/api#NgbDropdown) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the dropdowns used in the application.\n */\n\n\nlet NgbDropdownConfig = /*#__PURE__*/(() => {\n class NgbDropdownConfig {\n constructor() {\n this.autoClose = true;\n this.placement = ['bottom-start', 'bottom-end', 'top-start', 'top-end'];\n }\n\n }\n\n NgbDropdownConfig.ɵfac = function NgbDropdownConfig_Factory(t) {\n return new (t || NgbDropdownConfig)();\n };\n\n NgbDropdownConfig.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbDropdownConfig,\n factory: NgbDropdownConfig.ɵfac,\n providedIn: 'root'\n });\n return NgbDropdownConfig;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nlet NgbNavbar = /*#__PURE__*/(() => {\n class NgbNavbar {}\n\n NgbNavbar.ɵfac = function NgbNavbar_Factory(t) {\n return new (t || NgbNavbar)();\n };\n\n NgbNavbar.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbNavbar,\n selectors: [[\"\", 8, \"navbar\"]]\n });\n return NgbNavbar;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A directive you should put on a dropdown item to enable keyboard navigation.\n * Arrow keys will move focus between items marked with this directive.\n *\n * @since 4.1.0\n */\n\n\nlet NgbDropdownItem = /*#__PURE__*/(() => {\n class NgbDropdownItem {\n constructor(elementRef, _renderer) {\n this.elementRef = elementRef;\n this._renderer = _renderer;\n this._disabled = false;\n }\n\n set disabled(value) {\n this._disabled = value === '' || value === true; // accept an empty attribute as true\n // note: we don't use a host binding for disabled because when used on links, it fails because links don't have a\n // disabled property\n // setting the property using the renderer, OTOH, works fine in both cases.\n\n this._renderer.setProperty(this.elementRef.nativeElement, 'disabled', this._disabled);\n }\n\n get disabled() {\n return this._disabled;\n }\n\n }\n\n NgbDropdownItem.ɵfac = function NgbDropdownItem_Factory(t) {\n return new (t || NgbDropdownItem)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.Renderer2));\n };\n\n NgbDropdownItem.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbDropdownItem,\n selectors: [[\"\", \"ngbDropdownItem\", \"\"]],\n hostAttrs: [1, \"dropdown-item\"],\n hostVars: 3,\n hostBindings: function NgbDropdownItem_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵhostProperty(\"tabIndex\", ctx.disabled ? -1 : 0);\n i0.ɵɵclassProp(\"disabled\", ctx.disabled);\n }\n },\n inputs: {\n disabled: \"disabled\"\n }\n });\n return NgbDropdownItem;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A directive that wraps dropdown menu content and dropdown items.\n */\n\n\nlet NgbDropdownMenu = /*#__PURE__*/(() => {\n class NgbDropdownMenu {\n constructor(dropdown, _elementRef) {\n this.dropdown = dropdown;\n this.placement = 'bottom';\n this.isOpen = false;\n this.nativeElement = _elementRef.nativeElement;\n }\n\n }\n\n NgbDropdownMenu.ɵfac = function NgbDropdownMenu_Factory(t) {\n return new (t || NgbDropdownMenu)(i0.ɵɵdirectiveInject(forwardRef(() => NgbDropdown)), i0.ɵɵdirectiveInject(i0.ElementRef));\n };\n\n NgbDropdownMenu.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbDropdownMenu,\n selectors: [[\"\", \"ngbDropdownMenu\", \"\"]],\n contentQueries: function NgbDropdownMenu_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, NgbDropdownItem, 4);\n }\n\n if (rf & 2) {\n let _t;\n\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.menuItems = _t);\n }\n },\n hostVars: 4,\n hostBindings: function NgbDropdownMenu_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"keydown.ArrowUp\", function NgbDropdownMenu_keydown_ArrowUp_HostBindingHandler($event) {\n return ctx.dropdown.onKeyDown($event);\n })(\"keydown.ArrowDown\", function NgbDropdownMenu_keydown_ArrowDown_HostBindingHandler($event) {\n return ctx.dropdown.onKeyDown($event);\n })(\"keydown.Home\", function NgbDropdownMenu_keydown_Home_HostBindingHandler($event) {\n return ctx.dropdown.onKeyDown($event);\n })(\"keydown.End\", function NgbDropdownMenu_keydown_End_HostBindingHandler($event) {\n return ctx.dropdown.onKeyDown($event);\n })(\"keydown.Enter\", function NgbDropdownMenu_keydown_Enter_HostBindingHandler($event) {\n return ctx.dropdown.onKeyDown($event);\n })(\"keydown.Space\", function NgbDropdownMenu_keydown_Space_HostBindingHandler($event) {\n return ctx.dropdown.onKeyDown($event);\n })(\"keydown.Tab\", function NgbDropdownMenu_keydown_Tab_HostBindingHandler($event) {\n return ctx.dropdown.onKeyDown($event);\n })(\"keydown.Shift.Tab\", function NgbDropdownMenu_keydown_Shift_Tab_HostBindingHandler($event) {\n return ctx.dropdown.onKeyDown($event);\n });\n }\n\n if (rf & 2) {\n i0.ɵɵclassProp(\"dropdown-menu\", true)(\"show\", ctx.dropdown.isOpen());\n }\n }\n });\n return NgbDropdownMenu;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A directive to mark an element to which dropdown menu will be anchored.\n *\n * This is a simple version of the `NgbDropdownToggle` directive.\n * It plays the same role, but doesn't listen to click events to toggle dropdown menu thus enabling support\n * for events other than click.\n *\n * @since 1.1.0\n */\n\n\nlet NgbDropdownAnchor = /*#__PURE__*/(() => {\n class NgbDropdownAnchor {\n constructor(dropdown, _elementRef) {\n this.dropdown = dropdown;\n this.nativeElement = _elementRef.nativeElement;\n }\n\n }\n\n NgbDropdownAnchor.ɵfac = function NgbDropdownAnchor_Factory(t) {\n return new (t || NgbDropdownAnchor)(i0.ɵɵdirectiveInject(forwardRef(() => NgbDropdown)), i0.ɵɵdirectiveInject(i0.ElementRef));\n };\n\n NgbDropdownAnchor.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbDropdownAnchor,\n selectors: [[\"\", \"ngbDropdownAnchor\", \"\"]],\n hostAttrs: [1, \"dropdown-toggle\"],\n hostVars: 1,\n hostBindings: function NgbDropdownAnchor_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵattribute(\"aria-expanded\", ctx.dropdown.isOpen());\n }\n }\n });\n return NgbDropdownAnchor;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A directive to mark an element that will toggle dropdown via the `click` event.\n *\n * You can also use `NgbDropdownAnchor` as an alternative.\n */\n\n\nlet NgbDropdownToggle = /*#__PURE__*/(() => {\n class NgbDropdownToggle extends NgbDropdownAnchor {\n constructor(dropdown, elementRef) {\n super(dropdown, elementRef);\n }\n\n }\n\n NgbDropdownToggle.ɵfac = function NgbDropdownToggle_Factory(t) {\n return new (t || NgbDropdownToggle)(i0.ɵɵdirectiveInject(forwardRef(() => NgbDropdown)), i0.ɵɵdirectiveInject(i0.ElementRef));\n };\n\n NgbDropdownToggle.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbDropdownToggle,\n selectors: [[\"\", \"ngbDropdownToggle\", \"\"]],\n hostAttrs: [1, \"dropdown-toggle\"],\n hostVars: 1,\n hostBindings: function NgbDropdownToggle_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"click\", function NgbDropdownToggle_click_HostBindingHandler() {\n return ctx.dropdown.toggle();\n })(\"keydown.ArrowUp\", function NgbDropdownToggle_keydown_ArrowUp_HostBindingHandler($event) {\n return ctx.dropdown.onKeyDown($event);\n })(\"keydown.ArrowDown\", function NgbDropdownToggle_keydown_ArrowDown_HostBindingHandler($event) {\n return ctx.dropdown.onKeyDown($event);\n })(\"keydown.Home\", function NgbDropdownToggle_keydown_Home_HostBindingHandler($event) {\n return ctx.dropdown.onKeyDown($event);\n })(\"keydown.End\", function NgbDropdownToggle_keydown_End_HostBindingHandler($event) {\n return ctx.dropdown.onKeyDown($event);\n })(\"keydown.Tab\", function NgbDropdownToggle_keydown_Tab_HostBindingHandler($event) {\n return ctx.dropdown.onKeyDown($event);\n })(\"keydown.Shift.Tab\", function NgbDropdownToggle_keydown_Shift_Tab_HostBindingHandler($event) {\n return ctx.dropdown.onKeyDown($event);\n });\n }\n\n if (rf & 2) {\n i0.ɵɵattribute(\"aria-expanded\", ctx.dropdown.isOpen());\n }\n },\n features: [i0.ɵɵProvidersFeature([{\n provide: NgbDropdownAnchor,\n useExisting: forwardRef(() => NgbDropdownToggle)\n }]), i0.ɵɵInheritDefinitionFeature]\n });\n return NgbDropdownToggle;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A directive that provides contextual overlays for displaying lists of links and more.\n */\n\n\nlet NgbDropdown = /*#__PURE__*/(() => {\n class NgbDropdown {\n constructor(_changeDetector, config, _document, _ngZone, _elementRef, _renderer, ngbNavbar) {\n this._changeDetector = _changeDetector;\n this._document = _document;\n this._ngZone = _ngZone;\n this._elementRef = _elementRef;\n this._renderer = _renderer;\n this._destroyCloseHandlers$ = new Subject();\n this._bodyContainer = null;\n this._positioning = ngbPositioning();\n /**\n * Defines whether or not the dropdown menu is opened initially.\n */\n\n this._open = false;\n /**\n * An event fired when the dropdown is opened or closed.\n *\n * The event payload is a `boolean`:\n * * `true` - the dropdown was opened\n * * `false` - the dropdown was closed\n */\n\n this.openChange = new EventEmitter();\n this.placement = config.placement;\n this.container = config.container;\n this.autoClose = config.autoClose;\n this.display = ngbNavbar ? 'static' : 'dynamic';\n }\n\n ngAfterContentInit() {\n this._ngZone.onStable.pipe(take(1)).subscribe(() => {\n this._applyPlacementClasses();\n\n if (this._open) {\n this._setCloseHandlers();\n }\n });\n }\n\n ngOnChanges(changes) {\n if (changes.container && this._open) {\n this._applyContainer(this.container);\n }\n\n if (changes.placement && !changes.placement.firstChange) {\n this._positioning.setOptions({\n hostElement: this._anchor.nativeElement,\n targetElement: this._bodyContainer || this._menu.nativeElement,\n placement: this.placement,\n appendToBody: this.container === 'body'\n });\n\n this._applyPlacementClasses();\n }\n\n if (changes.dropdownClass) {\n const {\n currentValue,\n previousValue\n } = changes.dropdownClass;\n\n this._applyCustomDropdownClass(currentValue, previousValue);\n }\n\n if (changes.autoClose && this._open) {\n this.autoClose = changes.autoClose.currentValue;\n\n this._setCloseHandlers();\n }\n }\n /**\n * Checks if the dropdown menu is open.\n */\n\n\n isOpen() {\n return this._open;\n }\n /**\n * Opens the dropdown menu.\n */\n\n\n open() {\n if (!this._open) {\n this._open = true;\n\n this._applyContainer(this.container);\n\n this.openChange.emit(true);\n\n this._setCloseHandlers();\n\n if (this._anchor) {\n this._anchor.nativeElement.focus();\n\n if (this.display === 'dynamic') {\n this._ngZone.runOutsideAngular(() => {\n this._positioning.createPopper({\n hostElement: this._anchor.nativeElement,\n targetElement: this._bodyContainer || this._menu.nativeElement,\n placement: this.placement,\n appendToBody: this.container === 'body',\n updatePopperOptions: addPopperOffset([0, 2])\n });\n\n this._applyPlacementClasses();\n\n this._zoneSubscription = this._ngZone.onStable.subscribe(() => this._positionMenu());\n });\n }\n }\n }\n }\n\n _setCloseHandlers() {\n this._destroyCloseHandlers$.next(); // destroy any existing close handlers\n\n\n ngbAutoClose(this._ngZone, this._document, this.autoClose, source => {\n this.close();\n\n if (source === 0\n /* ESCAPE */\n ) {\n this._anchor.nativeElement.focus();\n }\n }, this._destroyCloseHandlers$, this._menu ? [this._menu.nativeElement] : [], this._anchor ? [this._anchor.nativeElement] : [], '.dropdown-item,.dropdown-divider');\n }\n /**\n * Closes the dropdown menu.\n */\n\n\n close() {\n var _a;\n\n if (this._open) {\n this._open = false;\n\n this._resetContainer();\n\n this._positioning.destroy();\n\n (_a = this._zoneSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();\n\n this._destroyCloseHandlers$.next();\n\n this.openChange.emit(false);\n\n this._changeDetector.markForCheck();\n }\n }\n /**\n * Toggles the dropdown menu.\n */\n\n\n toggle() {\n if (this.isOpen()) {\n this.close();\n } else {\n this.open();\n }\n }\n\n ngOnDestroy() {\n this.close();\n }\n\n onKeyDown(event) {\n /* eslint-disable-next-line deprecation/deprecation */\n const key = event.which;\n\n const itemElements = this._getMenuElements();\n\n let position = -1;\n let itemElement = null;\n\n const isEventFromToggle = this._isEventFromToggle(event);\n\n if (!isEventFromToggle && itemElements.length) {\n itemElements.forEach((item, index) => {\n if (item.contains(event.target)) {\n itemElement = item;\n }\n\n if (item === this._document.activeElement) {\n position = index;\n }\n });\n } // closing on Enter / Space\n\n\n if (key === Key.Space || key === Key.Enter) {\n if (itemElement && (this.autoClose === true || this.autoClose === 'inside')) {\n // Item is either a button or a link, so click will be triggered by the browser on Enter or Space.\n // So we have to register a one-time click handler that will fire after any user defined click handlers\n // to close the dropdown\n fromEvent(itemElement, 'click').pipe(take(1)).subscribe(() => this.close());\n }\n\n return;\n }\n\n if (key === Key.Tab) {\n if (event.target && this.isOpen() && this.autoClose) {\n if (this._anchor.nativeElement === event.target) {\n if (this.container === 'body' && !event.shiftKey) {\n /* This case is special: user is using [Tab] from the anchor/toggle.\n User expects the next focusable element in the dropdown menu to get focus.\n But the menu is not a sibling to anchor/toggle, it is at the end of the body.\n Trick is to synchronously focus the menu element, and let the [keydown.Tab] go\n so that browser will focus the proper element (first one focusable in the menu) */\n this._renderer.setAttribute(this._menu.nativeElement, 'tabindex', '0');\n\n this._menu.nativeElement.focus();\n\n this._renderer.removeAttribute(this._menu.nativeElement, 'tabindex');\n } else if (event.shiftKey) {\n this.close();\n }\n\n return;\n } else if (this.container === 'body') {\n const focusableElements = this._menu.nativeElement.querySelectorAll(FOCUSABLE_ELEMENTS_SELECTOR);\n\n if (event.shiftKey && event.target === focusableElements[0]) {\n this._anchor.nativeElement.focus();\n\n event.preventDefault();\n } else if (!event.shiftKey && event.target === focusableElements[focusableElements.length - 1]) {\n this._anchor.nativeElement.focus();\n\n this.close();\n }\n } else {\n fromEvent(event.target, 'focusout').pipe(take(1)).subscribe(({\n relatedTarget\n }) => {\n if (!this._elementRef.nativeElement.contains(relatedTarget)) {\n this.close();\n }\n });\n }\n }\n\n return;\n } // opening / navigating\n\n\n if (isEventFromToggle || itemElement) {\n this.open();\n\n if (itemElements.length) {\n switch (key) {\n case Key.ArrowDown:\n position = Math.min(position + 1, itemElements.length - 1);\n break;\n\n case Key.ArrowUp:\n if (this._isDropup() && position === -1) {\n position = itemElements.length - 1;\n break;\n }\n\n position = Math.max(position - 1, 0);\n break;\n\n case Key.Home:\n position = 0;\n break;\n\n case Key.End:\n position = itemElements.length - 1;\n break;\n }\n\n itemElements[position].focus();\n }\n\n event.preventDefault();\n }\n }\n\n _isDropup() {\n return this._elementRef.nativeElement.classList.contains('dropup');\n }\n\n _isEventFromToggle(event) {\n return this._anchor.nativeElement.contains(event.target);\n }\n\n _getMenuElements() {\n const menu = this._menu;\n\n if (menu == null) {\n return [];\n }\n\n return menu.menuItems.filter(item => !item.disabled).map(item => item.elementRef.nativeElement);\n }\n\n _positionMenu() {\n const menu = this._menu;\n\n if (this.isOpen() && menu) {\n if (this.display === 'dynamic') {\n this._positioning.update();\n\n this._applyPlacementClasses();\n } else {\n this._applyPlacementClasses(this._getFirstPlacement(this.placement));\n }\n }\n }\n\n _getFirstPlacement(placement) {\n return Array.isArray(placement) ? placement[0] : placement.split(' ')[0];\n }\n\n _resetContainer() {\n const renderer = this._renderer;\n\n if (this._menu) {\n const dropdownElement = this._elementRef.nativeElement;\n const dropdownMenuElement = this._menu.nativeElement;\n renderer.appendChild(dropdownElement, dropdownMenuElement);\n }\n\n if (this._bodyContainer) {\n renderer.removeChild(this._document.body, this._bodyContainer);\n this._bodyContainer = null;\n }\n }\n\n _applyContainer(container = null) {\n this._resetContainer();\n\n if (container === 'body') {\n const renderer = this._renderer;\n const dropdownMenuElement = this._menu.nativeElement;\n const bodyContainer = this._bodyContainer = this._bodyContainer || renderer.createElement('div'); // Override some styles to have the positioning working\n\n renderer.setStyle(bodyContainer, 'position', 'absolute');\n renderer.setStyle(dropdownMenuElement, 'position', 'static');\n renderer.setStyle(bodyContainer, 'z-index', '1055');\n renderer.appendChild(bodyContainer, dropdownMenuElement);\n renderer.appendChild(this._document.body, bodyContainer);\n }\n\n this._applyCustomDropdownClass(this.dropdownClass);\n }\n\n _applyCustomDropdownClass(newClass, oldClass) {\n const targetElement = this.container === 'body' ? this._bodyContainer : this._elementRef.nativeElement;\n\n if (targetElement) {\n if (oldClass) {\n this._renderer.removeClass(targetElement, oldClass);\n }\n\n if (newClass) {\n this._renderer.addClass(targetElement, newClass);\n }\n }\n }\n\n _applyPlacementClasses(placement) {\n const menu = this._menu;\n\n if (menu) {\n if (!placement) {\n placement = this._getFirstPlacement(this.placement);\n }\n\n const renderer = this._renderer;\n const dropdownElement = this._elementRef.nativeElement; // remove the current placement classes\n\n renderer.removeClass(dropdownElement, 'dropup');\n renderer.removeClass(dropdownElement, 'dropdown');\n const {\n nativeElement\n } = menu;\n\n if (this.display === 'static') {\n menu.placement = null;\n renderer.setAttribute(nativeElement, 'data-bs-popper', 'static');\n } else {\n menu.placement = placement;\n renderer.removeAttribute(nativeElement, 'data-bs-popper');\n }\n /*\n * apply the new placement\n * in case of top use up-arrow or down-arrow otherwise\n */\n\n\n const dropdownClass = placement.search('^top') !== -1 ? 'dropup' : 'dropdown';\n renderer.addClass(dropdownElement, dropdownClass);\n const bodyContainer = this._bodyContainer;\n\n if (bodyContainer) {\n renderer.removeClass(bodyContainer, 'dropup');\n renderer.removeClass(bodyContainer, 'dropdown');\n renderer.addClass(bodyContainer, dropdownClass);\n }\n }\n }\n\n }\n\n NgbDropdown.ɵfac = function NgbDropdown_Factory(t) {\n return new (t || NgbDropdown)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(NgbDropdownConfig), i0.ɵɵdirectiveInject(DOCUMENT), i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.Renderer2), i0.ɵɵdirectiveInject(NgbNavbar, 8));\n };\n\n NgbDropdown.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbDropdown,\n selectors: [[\"\", \"ngbDropdown\", \"\"]],\n contentQueries: function NgbDropdown_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, NgbDropdownMenu, 5);\n i0.ɵɵcontentQuery(dirIndex, NgbDropdownAnchor, 5);\n }\n\n if (rf & 2) {\n let _t;\n\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._menu = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._anchor = _t.first);\n }\n },\n hostVars: 2,\n hostBindings: function NgbDropdown_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵclassProp(\"show\", ctx.isOpen());\n }\n },\n inputs: {\n autoClose: \"autoClose\",\n dropdownClass: \"dropdownClass\",\n _open: [\"open\", \"_open\"],\n placement: \"placement\",\n container: \"container\",\n display: \"display\"\n },\n outputs: {\n openChange: \"openChange\"\n },\n exportAs: [\"ngbDropdown\"],\n features: [i0.ɵɵNgOnChangesFeature]\n });\n return NgbDropdown;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nconst NGB_DROPDOWN_DIRECTIVES = [NgbDropdown, NgbDropdownAnchor, NgbDropdownToggle, NgbDropdownMenu, NgbDropdownItem, NgbNavbar];\nlet NgbDropdownModule = /*#__PURE__*/(() => {\n class NgbDropdownModule {}\n\n NgbDropdownModule.ɵfac = function NgbDropdownModule_Factory(t) {\n return new (t || NgbDropdownModule)();\n };\n\n NgbDropdownModule.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: NgbDropdownModule\n });\n NgbDropdownModule.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({});\n return NgbDropdownModule;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nclass ContentRef {\n constructor(nodes, viewRef, componentRef) {\n this.nodes = nodes;\n this.viewRef = viewRef;\n this.componentRef = componentRef;\n }\n\n}\n\nclass PopupService {\n constructor(_type, _injector, _viewContainerRef, _renderer, _ngZone, _applicationRef) {\n this._type = _type;\n this._injector = _injector;\n this._viewContainerRef = _viewContainerRef;\n this._renderer = _renderer;\n this._ngZone = _ngZone;\n this._applicationRef = _applicationRef;\n this._windowRef = null;\n this._contentRef = null;\n }\n\n open(content, context, animation = false) {\n if (!this._windowRef) {\n this._contentRef = this._getContentRef(content, context);\n this._windowRef = this._viewContainerRef.createComponent(this._type, {\n index: this._viewContainerRef.length,\n injector: this._injector,\n projectableNodes: this._contentRef.nodes\n });\n }\n\n const {\n nativeElement\n } = this._windowRef.location;\n\n const transition$ = this._ngZone.onStable.pipe(take(1), mergeMap(() => ngbRunTransition(this._ngZone, nativeElement, ({\n classList\n }) => classList.add('show'), {\n animation,\n runningTransition: 'continue'\n })));\n\n return {\n windowRef: this._windowRef,\n transition$\n };\n }\n\n close(animation = false) {\n if (!this._windowRef) {\n return of(undefined);\n }\n\n return ngbRunTransition(this._ngZone, this._windowRef.location.nativeElement, ({\n classList\n }) => classList.remove('show'), {\n animation,\n runningTransition: 'stop'\n }).pipe(tap(() => {\n var _a;\n\n if (this._windowRef) {\n // this is required because of the container='body' option\n this._viewContainerRef.remove(this._viewContainerRef.indexOf(this._windowRef.hostView));\n\n this._windowRef = null;\n }\n\n if ((_a = this._contentRef) === null || _a === void 0 ? void 0 : _a.viewRef) {\n this._applicationRef.detachView(this._contentRef.viewRef);\n\n this._contentRef.viewRef.destroy();\n\n this._contentRef = null;\n }\n }));\n }\n\n _getContentRef(content, context) {\n if (!content) {\n return new ContentRef([]);\n } else if (content instanceof TemplateRef) {\n const viewRef = content.createEmbeddedView(context);\n\n this._applicationRef.attachView(viewRef);\n\n return new ContentRef([viewRef.rootNodes], viewRef);\n } else {\n return new ContentRef([[this._renderer.createText(`${content}`)]]);\n }\n }\n\n}\n\nlet NgbModalBackdrop = /*#__PURE__*/(() => {\n class NgbModalBackdrop {\n constructor(_el, _zone) {\n this._el = _el;\n this._zone = _zone;\n }\n\n ngOnInit() {\n this._zone.onStable.asObservable().pipe(take(1)).subscribe(() => {\n ngbRunTransition(this._zone, this._el.nativeElement, (element, animation) => {\n if (animation) {\n reflow(element);\n }\n\n element.classList.add('show');\n }, {\n animation: this.animation,\n runningTransition: 'continue'\n });\n });\n }\n\n hide() {\n return ngbRunTransition(this._zone, this._el.nativeElement, ({\n classList\n }) => classList.remove('show'), {\n animation: this.animation,\n runningTransition: 'stop'\n });\n }\n\n }\n\n NgbModalBackdrop.ɵfac = function NgbModalBackdrop_Factory(t) {\n return new (t || NgbModalBackdrop)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.NgZone));\n };\n\n NgbModalBackdrop.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: NgbModalBackdrop,\n selectors: [[\"ngb-modal-backdrop\"]],\n hostAttrs: [2, \"z-index\", \"1055\"],\n hostVars: 6,\n hostBindings: function NgbModalBackdrop_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵclassMap(\"modal-backdrop\" + (ctx.backdropClass ? \" \" + ctx.backdropClass : \"\"));\n i0.ɵɵclassProp(\"show\", !ctx.animation)(\"fade\", ctx.animation);\n }\n },\n inputs: {\n animation: \"animation\",\n backdropClass: \"backdropClass\"\n },\n decls: 0,\n vars: 0,\n template: function NgbModalBackdrop_Template(rf, ctx) {},\n encapsulation: 2\n });\n return NgbModalBackdrop;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A reference to the currently opened (active) modal.\n *\n * Instances of this class can be injected into your component passed as modal content.\n * So you can `.close()` or `.dismiss()` the modal window from your component.\n */\n\n\nclass NgbActiveModal {\n /**\n * Closes the modal with an optional `result` value.\n *\n * The `NgbModalRef.result` promise will be resolved with the provided value.\n */\n close(result) {}\n /**\n * Dismisses the modal with an optional `reason` value.\n *\n * The `NgbModalRef.result` promise will be rejected with the provided value.\n */\n\n\n dismiss(reason) {}\n\n}\n/**\n * A reference to the newly opened modal returned by the `NgbModal.open()` method.\n */\n\n\nclass NgbModalRef {\n constructor(_windowCmptRef, _contentRef, _backdropCmptRef, _beforeDismiss) {\n this._windowCmptRef = _windowCmptRef;\n this._contentRef = _contentRef;\n this._backdropCmptRef = _backdropCmptRef;\n this._beforeDismiss = _beforeDismiss;\n this._closed = new Subject();\n this._dismissed = new Subject();\n this._hidden = new Subject();\n\n _windowCmptRef.instance.dismissEvent.subscribe(reason => {\n this.dismiss(reason);\n });\n\n this.result = new Promise((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n this.result.then(null, () => {});\n }\n /**\n * The instance of a component used for the modal content.\n *\n * When a `TemplateRef` is used as the content or when the modal is closed, will return `undefined`.\n */\n\n\n get componentInstance() {\n if (this._contentRef && this._contentRef.componentRef) {\n return this._contentRef.componentRef.instance;\n }\n }\n /**\n * The observable that emits when the modal is closed via the `.close()` method.\n *\n * It will emit the result passed to the `.close()` method.\n *\n * @since 8.0.0\n */\n\n\n get closed() {\n return this._closed.asObservable().pipe(takeUntil(this._hidden));\n }\n /**\n * The observable that emits when the modal is dismissed via the `.dismiss()` method.\n *\n * It will emit the reason passed to the `.dismissed()` method by the user, or one of the internal\n * reasons like backdrop click or ESC key press.\n *\n * @since 8.0.0\n */\n\n\n get dismissed() {\n return this._dismissed.asObservable().pipe(takeUntil(this._hidden));\n }\n /**\n * The observable that emits when both modal window and backdrop are closed and animations were finished.\n * At this point modal and backdrop elements will be removed from the DOM tree.\n *\n * This observable will be completed after emitting.\n *\n * @since 8.0.0\n */\n\n\n get hidden() {\n return this._hidden.asObservable();\n }\n /**\n * The observable that emits when modal is fully visible and animation was finished.\n * Modal DOM element is always available synchronously after calling 'modal.open()' service.\n *\n * This observable will be completed after emitting.\n * It will not emit, if modal is closed before open animation is finished.\n *\n * @since 8.0.0\n */\n\n\n get shown() {\n return this._windowCmptRef.instance.shown.asObservable();\n }\n /**\n * Closes the modal with an optional `result` value.\n *\n * The `NgbMobalRef.result` promise will be resolved with the provided value.\n */\n\n\n close(result) {\n if (this._windowCmptRef) {\n this._closed.next(result);\n\n this._resolve(result);\n\n this._removeModalElements();\n }\n }\n\n _dismiss(reason) {\n this._dismissed.next(reason);\n\n this._reject(reason);\n\n this._removeModalElements();\n }\n /**\n * Dismisses the modal with an optional `reason` value.\n *\n * The `NgbModalRef.result` promise will be rejected with the provided value.\n */\n\n\n dismiss(reason) {\n if (this._windowCmptRef) {\n if (!this._beforeDismiss) {\n this._dismiss(reason);\n } else {\n const dismiss = this._beforeDismiss();\n\n if (isPromise(dismiss)) {\n dismiss.then(result => {\n if (result !== false) {\n this._dismiss(reason);\n }\n }, () => {});\n } else if (dismiss !== false) {\n this._dismiss(reason);\n }\n }\n }\n }\n\n _removeModalElements() {\n const windowTransition$ = this._windowCmptRef.instance.hide();\n\n const backdropTransition$ = this._backdropCmptRef ? this._backdropCmptRef.instance.hide() : of(undefined); // hiding window\n\n windowTransition$.subscribe(() => {\n const {\n nativeElement\n } = this._windowCmptRef.location;\n nativeElement.parentNode.removeChild(nativeElement);\n\n this._windowCmptRef.destroy();\n\n if (this._contentRef && this._contentRef.viewRef) {\n this._contentRef.viewRef.destroy();\n }\n\n this._windowCmptRef = null;\n this._contentRef = null;\n }); // hiding backdrop\n\n backdropTransition$.subscribe(() => {\n if (this._backdropCmptRef) {\n const {\n nativeElement\n } = this._backdropCmptRef.location;\n nativeElement.parentNode.removeChild(nativeElement);\n\n this._backdropCmptRef.destroy();\n\n this._backdropCmptRef = null;\n }\n }); // all done\n\n zip(windowTransition$, backdropTransition$).subscribe(() => {\n this._hidden.next();\n\n this._hidden.complete();\n });\n }\n\n}\n\nvar ModalDismissReasons = /*#__PURE__*/(() => {\n (function (ModalDismissReasons) {\n ModalDismissReasons[ModalDismissReasons[\"BACKDROP_CLICK\"] = 0] = \"BACKDROP_CLICK\";\n ModalDismissReasons[ModalDismissReasons[\"ESC\"] = 1] = \"ESC\";\n })(ModalDismissReasons || (ModalDismissReasons = {}));\n\n return ModalDismissReasons;\n})();\nlet NgbModalWindow = /*#__PURE__*/(() => {\n class NgbModalWindow {\n constructor(_document, _elRef, _zone) {\n this._document = _document;\n this._elRef = _elRef;\n this._zone = _zone;\n this._closed$ = new Subject();\n this._elWithFocus = null; // element that is focused prior to modal opening\n\n this.backdrop = true;\n this.keyboard = true;\n this.dismissEvent = new EventEmitter();\n this.shown = new Subject();\n this.hidden = new Subject();\n }\n\n get fullscreenClass() {\n return this.fullscreen === true ? ' modal-fullscreen' : isString(this.fullscreen) ? ` modal-fullscreen-${this.fullscreen}-down` : '';\n }\n\n dismiss(reason) {\n this.dismissEvent.emit(reason);\n }\n\n ngOnInit() {\n this._elWithFocus = this._document.activeElement;\n\n this._zone.onStable.asObservable().pipe(take(1)).subscribe(() => {\n this._show();\n });\n }\n\n ngOnDestroy() {\n this._disableEventHandling();\n }\n\n hide() {\n const {\n nativeElement\n } = this._elRef;\n const context = {\n animation: this.animation,\n runningTransition: 'stop'\n };\n const windowTransition$ = ngbRunTransition(this._zone, nativeElement, () => nativeElement.classList.remove('show'), context);\n const dialogTransition$ = ngbRunTransition(this._zone, this._dialogEl.nativeElement, () => {}, context);\n const transitions$ = zip(windowTransition$, dialogTransition$);\n transitions$.subscribe(() => {\n this.hidden.next();\n this.hidden.complete();\n });\n\n this._disableEventHandling();\n\n this._restoreFocus();\n\n return transitions$;\n }\n\n _show() {\n const context = {\n animation: this.animation,\n runningTransition: 'continue'\n };\n const windowTransition$ = ngbRunTransition(this._zone, this._elRef.nativeElement, (element, animation) => {\n if (animation) {\n reflow(element);\n }\n\n element.classList.add('show');\n }, context);\n const dialogTransition$ = ngbRunTransition(this._zone, this._dialogEl.nativeElement, () => {}, context);\n zip(windowTransition$, dialogTransition$).subscribe(() => {\n this.shown.next();\n this.shown.complete();\n });\n\n this._enableEventHandling();\n\n this._setFocus();\n }\n\n _enableEventHandling() {\n const {\n nativeElement\n } = this._elRef;\n\n this._zone.runOutsideAngular(() => {\n fromEvent(nativeElement, 'keydown').pipe(takeUntil(this._closed$),\n /* eslint-disable-next-line deprecation/deprecation */\n filter(e => e.which === Key.Escape)).subscribe(event => {\n if (this.keyboard) {\n requestAnimationFrame(() => {\n if (!event.defaultPrevented) {\n this._zone.run(() => this.dismiss(ModalDismissReasons.ESC));\n }\n });\n } else if (this.backdrop === 'static') {\n this._bumpBackdrop();\n }\n }); // We're listening to 'mousedown' and 'mouseup' to prevent modal from closing when pressing the mouse\n // inside the modal dialog and releasing it outside\n\n let preventClose = false;\n fromEvent(this._dialogEl.nativeElement, 'mousedown').pipe(takeUntil(this._closed$), tap(() => preventClose = false), switchMap(() => fromEvent(nativeElement, 'mouseup').pipe(takeUntil(this._closed$), take(1))), filter(({\n target\n }) => nativeElement === target)).subscribe(() => {\n preventClose = true;\n }); // We're listening to 'click' to dismiss modal on modal window click, except when:\n // 1. clicking on modal dialog itself\n // 2. closing was prevented by mousedown/up handlers\n // 3. clicking on scrollbar when the viewport is too small and modal doesn't fit (click is not triggered at all)\n\n fromEvent(nativeElement, 'click').pipe(takeUntil(this._closed$)).subscribe(({\n target\n }) => {\n if (nativeElement === target) {\n if (this.backdrop === 'static') {\n this._bumpBackdrop();\n } else if (this.backdrop === true && !preventClose) {\n this._zone.run(() => this.dismiss(ModalDismissReasons.BACKDROP_CLICK));\n }\n }\n\n preventClose = false;\n });\n });\n }\n\n _disableEventHandling() {\n this._closed$.next();\n }\n\n _setFocus() {\n const {\n nativeElement\n } = this._elRef;\n\n if (!nativeElement.contains(document.activeElement)) {\n const autoFocusable = nativeElement.querySelector(`[ngbAutofocus]`);\n const firstFocusable = getFocusableBoundaryElements(nativeElement)[0];\n const elementToFocus = autoFocusable || firstFocusable || nativeElement;\n elementToFocus.focus();\n }\n }\n\n _restoreFocus() {\n const body = this._document.body;\n const elWithFocus = this._elWithFocus;\n let elementToFocus;\n\n if (elWithFocus && elWithFocus['focus'] && body.contains(elWithFocus)) {\n elementToFocus = elWithFocus;\n } else {\n elementToFocus = body;\n }\n\n this._zone.runOutsideAngular(() => {\n setTimeout(() => elementToFocus.focus());\n this._elWithFocus = null;\n });\n }\n\n _bumpBackdrop() {\n if (this.backdrop === 'static') {\n ngbRunTransition(this._zone, this._elRef.nativeElement, ({\n classList\n }) => {\n classList.add('modal-static');\n return () => classList.remove('modal-static');\n }, {\n animation: this.animation,\n runningTransition: 'continue'\n });\n }\n }\n\n }\n\n NgbModalWindow.ɵfac = function NgbModalWindow_Factory(t) {\n return new (t || NgbModalWindow)(i0.ɵɵdirectiveInject(DOCUMENT), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.NgZone));\n };\n\n NgbModalWindow.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: NgbModalWindow,\n selectors: [[\"ngb-modal-window\"]],\n viewQuery: function NgbModalWindow_Query(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵviewQuery(_c31, 7);\n }\n\n if (rf & 2) {\n let _t;\n\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._dialogEl = _t.first);\n }\n },\n hostAttrs: [\"role\", \"dialog\", \"tabindex\", \"-1\"],\n hostVars: 7,\n hostBindings: function NgbModalWindow_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵattribute(\"aria-modal\", true)(\"aria-labelledby\", ctx.ariaLabelledBy)(\"aria-describedby\", ctx.ariaDescribedBy);\n i0.ɵɵclassMap(\"modal d-block\" + (ctx.windowClass ? \" \" + ctx.windowClass : \"\"));\n i0.ɵɵclassProp(\"fade\", ctx.animation);\n }\n },\n inputs: {\n animation: \"animation\",\n ariaLabelledBy: \"ariaLabelledBy\",\n ariaDescribedBy: \"ariaDescribedBy\",\n backdrop: \"backdrop\",\n centered: \"centered\",\n fullscreen: \"fullscreen\",\n keyboard: \"keyboard\",\n scrollable: \"scrollable\",\n size: \"size\",\n windowClass: \"windowClass\",\n modalDialogClass: \"modalDialogClass\"\n },\n outputs: {\n dismissEvent: \"dismiss\"\n },\n ngContentSelectors: _c3,\n decls: 4,\n vars: 2,\n consts: [[\"role\", \"document\"], [\"dialog\", \"\"], [1, \"modal-content\"]],\n template: function NgbModalWindow_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵelementStart(0, \"div\", 0, 1)(2, \"div\", 2);\n i0.ɵɵprojection(3);\n i0.ɵɵelementEnd()();\n }\n\n if (rf & 2) {\n i0.ɵɵclassMap(\"modal-dialog\" + (ctx.size ? \" modal-\" + ctx.size : \"\") + (ctx.centered ? \" modal-dialog-centered\" : \"\") + ctx.fullscreenClass + (ctx.scrollable ? \" modal-dialog-scrollable\" : \"\") + (ctx.modalDialogClass ? \" \" + ctx.modalDialogClass : \"\"));\n }\n },\n styles: [\"ngb-modal-window .component-host-scrollable{display:flex;flex-direction:column;overflow:hidden}\\n\"],\n encapsulation: 2\n });\n return NgbModalWindow;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Utility to handle the scrollbar.\n *\n * It allows to hide the scrollbar and compensate the lack of a vertical scrollbar\n * by adding an equivalent padding on the right of the body, and to revert this change.\n */\n\n\nlet ScrollBar = /*#__PURE__*/(() => {\n class ScrollBar {\n constructor(_document) {\n this._document = _document;\n }\n /**\n * To be called to hide a potential vertical scrollbar:\n * - if a scrollbar is there and has a width greater than 0, adds some compensation\n * padding to the body to keep the same layout as when the scrollbar is there\n * - adds overflow: hidden\n *\n * @return a callback used to revert the change\n */\n\n\n hide() {\n const scrollbarWidth = Math.abs(window.innerWidth - this._document.documentElement.clientWidth);\n const body = this._document.body;\n const bodyStyle = body.style;\n const {\n overflow,\n paddingRight\n } = bodyStyle;\n\n if (scrollbarWidth > 0) {\n const actualPadding = parseFloat(window.getComputedStyle(body).paddingRight);\n bodyStyle.paddingRight = `${actualPadding + scrollbarWidth}px`;\n }\n\n bodyStyle.overflow = 'hidden';\n return () => {\n if (scrollbarWidth > 0) {\n bodyStyle.paddingRight = paddingRight;\n }\n\n bodyStyle.overflow = overflow;\n };\n }\n\n }\n\n ScrollBar.ɵfac = function ScrollBar_Factory(t) {\n return new (t || ScrollBar)(i0.ɵɵinject(DOCUMENT));\n };\n\n ScrollBar.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: ScrollBar,\n factory: ScrollBar.ɵfac,\n providedIn: 'root'\n });\n return ScrollBar;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nlet NgbModalStack = /*#__PURE__*/(() => {\n class NgbModalStack {\n constructor(_applicationRef, _injector, _document, _scrollBar, _rendererFactory, _ngZone) {\n this._applicationRef = _applicationRef;\n this._injector = _injector;\n this._document = _document;\n this._scrollBar = _scrollBar;\n this._rendererFactory = _rendererFactory;\n this._ngZone = _ngZone;\n this._activeWindowCmptHasChanged = new Subject();\n this._ariaHiddenValues = new Map();\n this._scrollBarRestoreFn = null;\n this._backdropAttributes = ['animation', 'backdropClass'];\n this._modalRefs = [];\n this._windowAttributes = ['animation', 'ariaLabelledBy', 'ariaDescribedBy', 'backdrop', 'centered', 'fullscreen', 'keyboard', 'scrollable', 'size', 'windowClass', 'modalDialogClass'];\n this._windowCmpts = [];\n this._activeInstances = new EventEmitter(); // Trap focus on active WindowCmpt\n\n this._activeWindowCmptHasChanged.subscribe(() => {\n if (this._windowCmpts.length) {\n const activeWindowCmpt = this._windowCmpts[this._windowCmpts.length - 1];\n ngbFocusTrap(this._ngZone, activeWindowCmpt.location.nativeElement, this._activeWindowCmptHasChanged);\n\n this._revertAriaHidden();\n\n this._setAriaHidden(activeWindowCmpt.location.nativeElement);\n }\n });\n }\n\n _restoreScrollBar() {\n const scrollBarRestoreFn = this._scrollBarRestoreFn;\n\n if (scrollBarRestoreFn) {\n this._scrollBarRestoreFn = null;\n scrollBarRestoreFn();\n }\n }\n\n _hideScrollBar() {\n if (!this._scrollBarRestoreFn) {\n this._scrollBarRestoreFn = this._scrollBar.hide();\n }\n }\n\n open(moduleCFR, contentInjector, content, options) {\n const containerEl = options.container instanceof HTMLElement ? options.container : isDefined(options.container) ? this._document.querySelector(options.container) : this._document.body;\n\n const renderer = this._rendererFactory.createRenderer(null, null);\n\n if (!containerEl) {\n throw new Error(`The specified modal container \"${options.container || 'body'}\" was not found in the DOM.`);\n }\n\n this._hideScrollBar();\n\n const activeModal = new NgbActiveModal();\n\n const contentRef = this._getContentRef(moduleCFR, options.injector || contentInjector, content, activeModal, options);\n\n let backdropCmptRef = options.backdrop !== false ? this._attachBackdrop(moduleCFR, containerEl) : undefined;\n\n let windowCmptRef = this._attachWindowComponent(moduleCFR, containerEl, contentRef);\n\n let ngbModalRef = new NgbModalRef(windowCmptRef, contentRef, backdropCmptRef, options.beforeDismiss);\n\n this._registerModalRef(ngbModalRef);\n\n this._registerWindowCmpt(windowCmptRef); // We have to cleanup DOM after the last modal when BOTH 'hidden' was emitted and 'result' promise was resolved:\n // - with animations OFF, 'hidden' emits synchronously, then 'result' is resolved asynchronously\n // - with animations ON, 'result' is resolved asynchronously, then 'hidden' emits asynchronously\n\n\n ngbModalRef.hidden.pipe(take(1)).subscribe(() => Promise.resolve(true).then(() => {\n if (!this._modalRefs.length) {\n renderer.removeClass(this._document.body, 'modal-open');\n\n this._restoreScrollBar();\n\n this._revertAriaHidden();\n }\n }));\n\n activeModal.close = result => {\n ngbModalRef.close(result);\n };\n\n activeModal.dismiss = reason => {\n ngbModalRef.dismiss(reason);\n };\n\n this._applyWindowOptions(windowCmptRef.instance, options);\n\n if (this._modalRefs.length === 1) {\n renderer.addClass(this._document.body, 'modal-open');\n }\n\n if (backdropCmptRef && backdropCmptRef.instance) {\n this._applyBackdropOptions(backdropCmptRef.instance, options);\n\n backdropCmptRef.changeDetectorRef.detectChanges();\n }\n\n windowCmptRef.changeDetectorRef.detectChanges();\n return ngbModalRef;\n }\n\n get activeInstances() {\n return this._activeInstances;\n }\n\n dismissAll(reason) {\n this._modalRefs.forEach(ngbModalRef => ngbModalRef.dismiss(reason));\n }\n\n hasOpenModals() {\n return this._modalRefs.length > 0;\n }\n\n _attachBackdrop(moduleCFR, containerEl) {\n let backdropFactory = moduleCFR.resolveComponentFactory(NgbModalBackdrop);\n let backdropCmptRef = backdropFactory.create(this._injector);\n\n this._applicationRef.attachView(backdropCmptRef.hostView);\n\n containerEl.appendChild(backdropCmptRef.location.nativeElement);\n return backdropCmptRef;\n }\n\n _attachWindowComponent(moduleCFR, containerEl, contentRef) {\n let windowFactory = moduleCFR.resolveComponentFactory(NgbModalWindow);\n let windowCmptRef = windowFactory.create(this._injector, contentRef.nodes);\n\n this._applicationRef.attachView(windowCmptRef.hostView);\n\n containerEl.appendChild(windowCmptRef.location.nativeElement);\n return windowCmptRef;\n }\n\n _applyWindowOptions(windowInstance, options) {\n this._windowAttributes.forEach(optionName => {\n if (isDefined(options[optionName])) {\n windowInstance[optionName] = options[optionName];\n }\n });\n }\n\n _applyBackdropOptions(backdropInstance, options) {\n this._backdropAttributes.forEach(optionName => {\n if (isDefined(options[optionName])) {\n backdropInstance[optionName] = options[optionName];\n }\n });\n }\n\n _getContentRef(moduleCFR, contentInjector, content, activeModal, options) {\n if (!content) {\n return new ContentRef([]);\n } else if (content instanceof TemplateRef) {\n return this._createFromTemplateRef(content, activeModal);\n } else if (isString(content)) {\n return this._createFromString(content);\n } else {\n return this._createFromComponent(moduleCFR, contentInjector, content, activeModal, options);\n }\n }\n\n _createFromTemplateRef(content, activeModal) {\n const context = {\n $implicit: activeModal,\n\n close(result) {\n activeModal.close(result);\n },\n\n dismiss(reason) {\n activeModal.dismiss(reason);\n }\n\n };\n const viewRef = content.createEmbeddedView(context);\n\n this._applicationRef.attachView(viewRef);\n\n return new ContentRef([viewRef.rootNodes], viewRef);\n }\n\n _createFromString(content) {\n const component = this._document.createTextNode(`${content}`);\n\n return new ContentRef([[component]]);\n }\n\n _createFromComponent(moduleCFR, contentInjector, content, context, options) {\n const contentCmptFactory = moduleCFR.resolveComponentFactory(content);\n const modalContentInjector = Injector.create({\n providers: [{\n provide: NgbActiveModal,\n useValue: context\n }],\n parent: contentInjector\n });\n const componentRef = contentCmptFactory.create(modalContentInjector);\n const componentNativeEl = componentRef.location.nativeElement;\n\n if (options.scrollable) {\n componentNativeEl.classList.add('component-host-scrollable');\n }\n\n this._applicationRef.attachView(componentRef.hostView); // FIXME: we should here get rid of the component nativeElement\n // and use `[Array.from(componentNativeEl.childNodes)]` instead and remove the above CSS class.\n\n\n return new ContentRef([[componentNativeEl]], componentRef.hostView, componentRef);\n }\n\n _setAriaHidden(element) {\n const parent = element.parentElement;\n\n if (parent && element !== this._document.body) {\n Array.from(parent.children).forEach(sibling => {\n if (sibling !== element && sibling.nodeName !== 'SCRIPT') {\n this._ariaHiddenValues.set(sibling, sibling.getAttribute('aria-hidden'));\n\n sibling.setAttribute('aria-hidden', 'true');\n }\n });\n\n this._setAriaHidden(parent);\n }\n }\n\n _revertAriaHidden() {\n this._ariaHiddenValues.forEach((value, element) => {\n if (value) {\n element.setAttribute('aria-hidden', value);\n } else {\n element.removeAttribute('aria-hidden');\n }\n });\n\n this._ariaHiddenValues.clear();\n }\n\n _registerModalRef(ngbModalRef) {\n const unregisterModalRef = () => {\n const index = this._modalRefs.indexOf(ngbModalRef);\n\n if (index > -1) {\n this._modalRefs.splice(index, 1);\n\n this._activeInstances.emit(this._modalRefs);\n }\n };\n\n this._modalRefs.push(ngbModalRef);\n\n this._activeInstances.emit(this._modalRefs);\n\n ngbModalRef.result.then(unregisterModalRef, unregisterModalRef);\n }\n\n _registerWindowCmpt(ngbWindowCmpt) {\n this._windowCmpts.push(ngbWindowCmpt);\n\n this._activeWindowCmptHasChanged.next();\n\n ngbWindowCmpt.onDestroy(() => {\n const index = this._windowCmpts.indexOf(ngbWindowCmpt);\n\n if (index > -1) {\n this._windowCmpts.splice(index, 1);\n\n this._activeWindowCmptHasChanged.next();\n }\n });\n }\n\n }\n\n NgbModalStack.ɵfac = function NgbModalStack_Factory(t) {\n return new (t || NgbModalStack)(i0.ɵɵinject(i0.ApplicationRef), i0.ɵɵinject(i0.Injector), i0.ɵɵinject(DOCUMENT), i0.ɵɵinject(ScrollBar), i0.ɵɵinject(i0.RendererFactory2), i0.ɵɵinject(i0.NgZone));\n };\n\n NgbModalStack.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbModalStack,\n factory: NgbModalStack.ɵfac,\n providedIn: 'root'\n });\n return NgbModalStack;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A configuration service for the [`NgbModal`](#/components/modal/api#NgbModal) service.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all modals used in the application.\n*\n* @since 3.1.0\n*/\n\n\nlet NgbModalConfig = /*#__PURE__*/(() => {\n class NgbModalConfig {\n constructor(_ngbConfig) {\n this._ngbConfig = _ngbConfig;\n this.backdrop = true;\n this.fullscreen = false;\n this.keyboard = true;\n }\n\n get animation() {\n return this._animation === undefined ? this._ngbConfig.animation : this._animation;\n }\n\n set animation(animation) {\n this._animation = animation;\n }\n\n }\n\n NgbModalConfig.ɵfac = function NgbModalConfig_Factory(t) {\n return new (t || NgbModalConfig)(i0.ɵɵinject(NgbConfig));\n };\n\n NgbModalConfig.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbModalConfig,\n factory: NgbModalConfig.ɵfac,\n providedIn: 'root'\n });\n return NgbModalConfig;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A service for opening modal windows.\n *\n * Creating a modal is straightforward: create a component or a template and pass it as an argument to\n * the `.open()` method.\n */\n\n\nlet NgbModal = /*#__PURE__*/(() => {\n class NgbModal {\n constructor(_moduleCFR, _injector, _modalStack, _config) {\n this._moduleCFR = _moduleCFR;\n this._injector = _injector;\n this._modalStack = _modalStack;\n this._config = _config;\n }\n /**\n * Opens a new modal window with the specified content and supplied options.\n *\n * Content can be provided as a `TemplateRef` or a component type. If you pass a component type as content,\n * then instances of those components can be injected with an instance of the `NgbActiveModal` class. You can then\n * use `NgbActiveModal` methods to close / dismiss modals from \"inside\" of your component.\n *\n * Also see the [`NgbModalOptions`](#/components/modal/api#NgbModalOptions) for the list of supported options.\n */\n\n\n open(content, options = {}) {\n const combinedOptions = Object.assign(Object.assign(Object.assign({}, this._config), {\n animation: this._config.animation\n }), options);\n return this._modalStack.open(this._moduleCFR, this._injector, content, combinedOptions);\n }\n /**\n * Returns an observable that holds the active modal instances.\n */\n\n\n get activeInstances() {\n return this._modalStack.activeInstances;\n }\n /**\n * Dismisses all currently displayed modal windows with the supplied reason.\n *\n * @since 3.1.0\n */\n\n\n dismissAll(reason) {\n this._modalStack.dismissAll(reason);\n }\n /**\n * Indicates if there are currently any open modal windows in the application.\n *\n * @since 3.3.0\n */\n\n\n hasOpenModals() {\n return this._modalStack.hasOpenModals();\n }\n\n }\n\n NgbModal.ɵfac = function NgbModal_Factory(t) {\n return new (t || NgbModal)(i0.ɵɵinject(i0.ComponentFactoryResolver), i0.ɵɵinject(i0.Injector), i0.ɵɵinject(NgbModalStack), i0.ɵɵinject(NgbModalConfig));\n };\n\n NgbModal.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbModal,\n factory: NgbModal.ɵfac,\n providedIn: 'root'\n });\n return NgbModal;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nlet NgbModalModule = /*#__PURE__*/(() => {\n class NgbModalModule {}\n\n NgbModalModule.ɵfac = function NgbModalModule_Factory(t) {\n return new (t || NgbModalModule)();\n };\n\n NgbModalModule.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: NgbModalModule\n });\n NgbModalModule.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n providers: [NgbModal]\n });\n return NgbModalModule;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A configuration service for the [`NgbNav`](#/components/nav/api#NgbNav) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the navs used in the application.\n *\n * @since 5.2.0\n */\n\n\nlet NgbNavConfig = /*#__PURE__*/(() => {\n class NgbNavConfig {\n constructor(_ngbConfig) {\n this._ngbConfig = _ngbConfig;\n this.destroyOnHide = true;\n this.orientation = 'horizontal';\n this.roles = 'tablist';\n this.keyboard = false;\n }\n\n get animation() {\n return this._animation === undefined ? this._ngbConfig.animation : this._animation;\n }\n\n set animation(animation) {\n this._animation = animation;\n }\n\n }\n\n NgbNavConfig.ɵfac = function NgbNavConfig_Factory(t) {\n return new (t || NgbNavConfig)(i0.ɵɵinject(NgbConfig));\n };\n\n NgbNavConfig.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbNavConfig,\n factory: NgbNavConfig.ɵfac,\n providedIn: 'root'\n });\n return NgbNavConfig;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nconst isValidNavId = id => isDefined(id) && id !== '';\n\nlet navCounter = 0;\n/**\n * This directive must be used to wrap content to be displayed in the nav.\n *\n * @since 5.2.0\n */\n\nlet NgbNavContent = /*#__PURE__*/(() => {\n class NgbNavContent {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n\n }\n\n NgbNavContent.ɵfac = function NgbNavContent_Factory(t) {\n return new (t || NgbNavContent)(i0.ɵɵdirectiveInject(i0.TemplateRef));\n };\n\n NgbNavContent.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbNavContent,\n selectors: [[\"ng-template\", \"ngbNavContent\", \"\"]]\n });\n return NgbNavContent;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * The directive used to group nav link and related nav content. As well as set nav identifier and some options.\n *\n * @since 5.2.0\n */\n\n\nlet NgbNavItem = /*#__PURE__*/(() => {\n class NgbNavItem {\n constructor(nav, elementRef) {\n this.elementRef = elementRef;\n /**\n * If `true`, the current nav item is disabled and can't be toggled by user.\n *\n * Nevertheless disabled nav can be selected programmatically via the `.select()` method and the `[activeId]` binding.\n */\n\n this.disabled = false;\n /**\n * An event emitted when the fade in transition is finished on the related nav content\n *\n * @since 8.0.0\n */\n\n this.shown = new EventEmitter();\n /**\n * An event emitted when the fade out transition is finished on the related nav content\n *\n * @since 8.0.0\n */\n\n this.hidden = new EventEmitter(); // TODO: cf https://github.com/angular/angular/issues/30106\n\n this._nav = nav;\n }\n\n ngAfterContentChecked() {\n // We are using @ContentChildren instead of @ContentChild as in the Angular version being used\n // only @ContentChildren allows us to specify the {descendants: false} option.\n // Without {descendants: false} we are hitting bugs described in:\n // https://github.com/ng-bootstrap/ng-bootstrap/issues/2240\n this.contentTpl = this.contentTpls.first;\n }\n\n ngOnInit() {\n if (!isDefined(this.domId)) {\n this.domId = `ngb-nav-${navCounter++}`;\n }\n }\n\n get active() {\n return this._nav.activeId === this.id;\n }\n\n get id() {\n return isValidNavId(this._id) ? this._id : this.domId;\n }\n\n get panelDomId() {\n return `${this.domId}-panel`;\n }\n\n isPanelInDom() {\n return (isDefined(this.destroyOnHide) ? !this.destroyOnHide : !this._nav.destroyOnHide) || this.active;\n }\n\n }\n\n NgbNavItem.ɵfac = function NgbNavItem_Factory(t) {\n return new (t || NgbNavItem)(i0.ɵɵdirectiveInject(forwardRef(() => NgbNav)), i0.ɵɵdirectiveInject(i0.ElementRef));\n };\n\n NgbNavItem.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbNavItem,\n selectors: [[\"\", \"ngbNavItem\", \"\"]],\n contentQueries: function NgbNavItem_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, NgbNavContent, 4);\n }\n\n if (rf & 2) {\n let _t;\n\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.contentTpls = _t);\n }\n },\n hostVars: 2,\n hostBindings: function NgbNavItem_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵclassProp(\"nav-item\", true);\n }\n },\n inputs: {\n destroyOnHide: \"destroyOnHide\",\n disabled: \"disabled\",\n domId: \"domId\",\n _id: [\"ngbNavItem\", \"_id\"]\n },\n outputs: {\n shown: \"shown\",\n hidden: \"hidden\"\n },\n exportAs: [\"ngbNavItem\"]\n });\n return NgbNavItem;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A nav directive that helps with implementing tabbed navigation components.\n *\n * @since 5.2.0\n */\n\n\nlet NgbNav = /*#__PURE__*/(() => {\n class NgbNav {\n constructor(role, config, _cd, _document) {\n this.role = role;\n this._cd = _cd;\n this._document = _document;\n /**\n * The event emitted after the active nav changes\n * The payload of the event is the newly active nav id\n *\n * If you want to prevent nav change, you should use `(navChange)` event\n */\n\n this.activeIdChange = new EventEmitter();\n /**\n * An event emitted when the fade in transition is finished for one of the items.\n *\n * Payload of the event is the nav id that was just shown.\n *\n * @since 8.0.0\n */\n\n this.shown = new EventEmitter();\n /**\n * An event emitted when the fade out transition is finished for one of the items.\n *\n * Payload of the event is the nav id that was just hidden.\n *\n * @since 8.0.0\n */\n\n this.hidden = new EventEmitter();\n this.destroy$ = new Subject();\n this.navItemChange$ = new Subject();\n /**\n * The nav change event emitted right before the nav change happens on user click.\n *\n * This event won't be emitted if nav is changed programmatically via `[activeId]` or `.select()`.\n *\n * See [`NgbNavChangeEvent`](#/components/nav/api#NgbNavChangeEvent) for payload details.\n */\n\n this.navChange = new EventEmitter();\n this.animation = config.animation;\n this.destroyOnHide = config.destroyOnHide;\n this.orientation = config.orientation;\n this.roles = config.roles;\n this.keyboard = config.keyboard;\n }\n\n click(item) {\n if (!item.disabled) {\n this._updateActiveId(item.id);\n }\n }\n\n onKeyDown(event) {\n if (this.roles !== 'tablist' || !this.keyboard) {\n return;\n }\n /* eslint-disable-next-line deprecation/deprecation */\n\n\n const key = event.which;\n const enabledLinks = this.links.filter(link => !link.navItem.disabled);\n const {\n length\n } = enabledLinks;\n let position = -1;\n enabledLinks.forEach((link, index) => {\n if (link.elRef.nativeElement === this._document.activeElement) {\n position = index;\n }\n });\n\n if (length) {\n switch (key) {\n case Key.ArrowLeft:\n if (this.orientation === 'vertical') {\n return;\n }\n\n position = (position - 1 + length) % length;\n break;\n\n case Key.ArrowRight:\n if (this.orientation === 'vertical') {\n return;\n }\n\n position = (position + 1) % length;\n break;\n\n case Key.ArrowDown:\n if (this.orientation === 'horizontal') {\n return;\n }\n\n position = (position + 1) % length;\n break;\n\n case Key.ArrowUp:\n if (this.orientation === 'horizontal') {\n return;\n }\n\n position = (position - 1 + length) % length;\n break;\n\n case Key.Home:\n position = 0;\n break;\n\n case Key.End:\n position = length - 1;\n break;\n }\n\n if (this.keyboard === 'changeWithArrows') {\n this.select(enabledLinks[position].navItem.id);\n }\n\n enabledLinks[position].elRef.nativeElement.focus();\n event.preventDefault();\n }\n }\n /**\n * Selects the nav with the given id and shows its associated pane.\n * Any other nav that was previously selected becomes unselected and its associated pane is hidden.\n */\n\n\n select(id) {\n this._updateActiveId(id, false);\n }\n\n ngAfterContentInit() {\n if (!isDefined(this.activeId)) {\n const nextId = this.items.first ? this.items.first.id : null;\n\n if (isValidNavId(nextId)) {\n this._updateActiveId(nextId, false);\n\n this._cd.detectChanges();\n }\n }\n\n this.items.changes.pipe(takeUntil(this.destroy$)).subscribe(() => this._notifyItemChanged(this.activeId));\n }\n\n ngOnChanges({\n activeId\n }) {\n if (activeId && !activeId.firstChange) {\n this._notifyItemChanged(activeId.currentValue);\n }\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n }\n\n _updateActiveId(nextId, emitNavChange = true) {\n if (this.activeId !== nextId) {\n let defaultPrevented = false;\n\n if (emitNavChange) {\n this.navChange.emit({\n activeId: this.activeId,\n nextId,\n preventDefault: () => {\n defaultPrevented = true;\n }\n });\n }\n\n if (!defaultPrevented) {\n this.activeId = nextId;\n this.activeIdChange.emit(nextId);\n\n this._notifyItemChanged(nextId);\n }\n }\n }\n\n _notifyItemChanged(nextItemId) {\n this.navItemChange$.next(this._getItemById(nextItemId));\n }\n\n _getItemById(itemId) {\n return this.items && this.items.find(item => item.id === itemId) || null;\n }\n\n }\n\n NgbNav.ɵfac = function NgbNav_Factory(t) {\n return new (t || NgbNav)(i0.ɵɵinjectAttribute('role'), i0.ɵɵdirectiveInject(NgbNavConfig), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(DOCUMENT));\n };\n\n NgbNav.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbNav,\n selectors: [[\"\", \"ngbNav\", \"\"]],\n contentQueries: function NgbNav_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, NgbNavItem, 4);\n i0.ɵɵcontentQuery(dirIndex, NgbNavLink, 5);\n }\n\n if (rf & 2) {\n let _t;\n\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.items = _t);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.links = _t);\n }\n },\n hostVars: 6,\n hostBindings: function NgbNav_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"keydown.arrowLeft\", function NgbNav_keydown_arrowLeft_HostBindingHandler($event) {\n return ctx.onKeyDown($event);\n })(\"keydown.arrowRight\", function NgbNav_keydown_arrowRight_HostBindingHandler($event) {\n return ctx.onKeyDown($event);\n })(\"keydown.arrowDown\", function NgbNav_keydown_arrowDown_HostBindingHandler($event) {\n return ctx.onKeyDown($event);\n })(\"keydown.arrowUp\", function NgbNav_keydown_arrowUp_HostBindingHandler($event) {\n return ctx.onKeyDown($event);\n })(\"keydown.Home\", function NgbNav_keydown_Home_HostBindingHandler($event) {\n return ctx.onKeyDown($event);\n })(\"keydown.End\", function NgbNav_keydown_End_HostBindingHandler($event) {\n return ctx.onKeyDown($event);\n });\n }\n\n if (rf & 2) {\n i0.ɵɵattribute(\"aria-orientation\", ctx.orientation === \"vertical\" && ctx.roles === \"tablist\" ? \"vertical\" : undefined)(\"role\", ctx.role ? ctx.role : ctx.roles ? \"tablist\" : undefined);\n i0.ɵɵclassProp(\"nav\", true)(\"flex-column\", ctx.orientation === \"vertical\");\n }\n },\n inputs: {\n activeId: \"activeId\",\n animation: \"animation\",\n destroyOnHide: \"destroyOnHide\",\n orientation: \"orientation\",\n roles: \"roles\",\n keyboard: \"keyboard\"\n },\n outputs: {\n activeIdChange: \"activeIdChange\",\n shown: \"shown\",\n hidden: \"hidden\",\n navChange: \"navChange\"\n },\n exportAs: [\"ngbNav\"],\n features: [i0.ɵɵNgOnChangesFeature]\n });\n return NgbNav;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A directive to put on the nav link.\n *\n * @since 5.2.0\n */\n\n\nlet NgbNavLink = /*#__PURE__*/(() => {\n class NgbNavLink {\n constructor(role, navItem, nav, elRef) {\n this.role = role;\n this.navItem = navItem;\n this.nav = nav;\n this.elRef = elRef;\n }\n\n hasNavItemClass() {\n // with alternative markup we have to add `.nav-item` class, because `ngbNavItem` is on the ng-container\n return this.navItem.elementRef.nativeElement.nodeType === Node.COMMENT_NODE;\n }\n\n }\n\n NgbNavLink.ɵfac = function NgbNavLink_Factory(t) {\n return new (t || NgbNavLink)(i0.ɵɵinjectAttribute('role'), i0.ɵɵdirectiveInject(NgbNavItem), i0.ɵɵdirectiveInject(NgbNav), i0.ɵɵdirectiveInject(i0.ElementRef));\n };\n\n NgbNavLink.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbNavLink,\n selectors: [[\"a\", \"ngbNavLink\", \"\"]],\n hostAttrs: [\"href\", \"\"],\n hostVars: 14,\n hostBindings: function NgbNavLink_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"click\", function NgbNavLink_click_HostBindingHandler($event) {\n ctx.nav.click(ctx.navItem);\n return $event.preventDefault();\n });\n }\n\n if (rf & 2) {\n i0.ɵɵhostProperty(\"id\", ctx.navItem.domId);\n i0.ɵɵattribute(\"role\", ctx.role ? ctx.role : ctx.nav.roles ? \"tab\" : undefined)(\"tabindex\", ctx.navItem.disabled ? -1 : undefined)(\"aria-controls\", ctx.navItem.isPanelInDom() ? ctx.navItem.panelDomId : null)(\"aria-selected\", ctx.navItem.active)(\"aria-disabled\", ctx.navItem.disabled);\n i0.ɵɵclassProp(\"nav-link\", true)(\"nav-item\", ctx.hasNavItemClass())(\"active\", ctx.navItem.active)(\"disabled\", ctx.navItem.disabled);\n }\n }\n });\n return NgbNavLink;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nconst ngbNavFadeOutTransition = ({\n classList\n}) => {\n classList.remove('show');\n return () => classList.remove('active');\n};\n\nconst ngbNavFadeInTransition = (element, animation) => {\n if (animation) {\n reflow(element);\n }\n\n element.classList.add('show');\n};\n\nlet NgbNavPane = /*#__PURE__*/(() => {\n class NgbNavPane {\n constructor(elRef) {\n this.elRef = elRef;\n }\n\n }\n\n NgbNavPane.ɵfac = function NgbNavPane_Factory(t) {\n return new (t || NgbNavPane)(i0.ɵɵdirectiveInject(i0.ElementRef));\n };\n\n NgbNavPane.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbNavPane,\n selectors: [[\"\", \"ngbNavPane\", \"\"]],\n hostAttrs: [1, \"tab-pane\"],\n hostVars: 5,\n hostBindings: function NgbNavPane_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵhostProperty(\"id\", ctx.item.panelDomId);\n i0.ɵɵattribute(\"role\", ctx.role ? ctx.role : ctx.nav.roles ? \"tabpanel\" : undefined)(\"aria-labelledby\", ctx.item.domId);\n i0.ɵɵclassProp(\"fade\", ctx.nav.animation);\n }\n },\n inputs: {\n item: \"item\",\n nav: \"nav\",\n role: \"role\"\n }\n });\n return NgbNavPane;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * The outlet where currently active nav content will be displayed.\n *\n * @since 5.2.0\n */\n\n\nlet NgbNavOutlet = /*#__PURE__*/(() => {\n class NgbNavOutlet {\n constructor(_cd, _ngZone) {\n this._cd = _cd;\n this._ngZone = _ngZone;\n this._activePane = null;\n }\n\n isPanelTransitioning(item) {\n var _a;\n\n return ((_a = this._activePane) === null || _a === void 0 ? void 0 : _a.item) === item;\n }\n\n ngAfterViewInit() {\n var _a; // initial display\n\n\n this._updateActivePane(); // this will be emitted for all 3 types of nav changes: .select(), [activeId] or (click)\n\n\n this.nav.navItemChange$.pipe(takeUntil(this.nav.destroy$), startWith(((_a = this._activePane) === null || _a === void 0 ? void 0 : _a.item) || null), distinctUntilChanged(), skip(1)).subscribe(nextItem => {\n const options = {\n animation: this.nav.animation,\n runningTransition: 'stop'\n }; // next panel we're switching to will only appear in DOM after the change detection is done\n // and `this._panes` will be updated\n\n this._cd.detectChanges(); // fading out\n\n\n if (this._activePane) {\n ngbRunTransition(this._ngZone, this._activePane.elRef.nativeElement, ngbNavFadeOutTransition, options).subscribe(() => {\n var _a;\n\n const activeItem = (_a = this._activePane) === null || _a === void 0 ? void 0 : _a.item;\n this._activePane = this._getPaneForItem(nextItem); // mark for check when transition finishes as outlet or parent containers might be OnPush\n // without this the panes that have \"faded out\" will stay in DOM\n\n this._cd.markForCheck(); // fading in\n\n\n if (this._activePane) {\n // we have to add the '.active' class before running the transition,\n // because it should be in place before `ngbRunTransition` does `reflow()`\n this._activePane.elRef.nativeElement.classList.add('active');\n\n ngbRunTransition(this._ngZone, this._activePane.elRef.nativeElement, ngbNavFadeInTransition, options).subscribe(() => {\n if (nextItem) {\n nextItem.shown.emit();\n this.nav.shown.emit(nextItem.id);\n }\n });\n }\n\n if (activeItem) {\n activeItem.hidden.emit();\n this.nav.hidden.emit(activeItem.id);\n }\n });\n } else {\n this._updateActivePane();\n }\n });\n }\n\n _updateActivePane() {\n var _a, _b;\n\n this._activePane = this._getActivePane();\n (_a = this._activePane) === null || _a === void 0 ? void 0 : _a.elRef.nativeElement.classList.add('show');\n (_b = this._activePane) === null || _b === void 0 ? void 0 : _b.elRef.nativeElement.classList.add('active');\n }\n\n _getPaneForItem(item) {\n return this._panes && this._panes.find(pane => pane.item === item) || null;\n }\n\n _getActivePane() {\n return this._panes && this._panes.find(pane => pane.item.active) || null;\n }\n\n }\n\n NgbNavOutlet.ɵfac = function NgbNavOutlet_Factory(t) {\n return new (t || NgbNavOutlet)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i0.NgZone));\n };\n\n NgbNavOutlet.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: NgbNavOutlet,\n selectors: [[\"\", \"ngbNavOutlet\", \"\"]],\n viewQuery: function NgbNavOutlet_Query(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵviewQuery(NgbNavPane, 5);\n }\n\n if (rf & 2) {\n let _t;\n\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._panes = _t);\n }\n },\n hostVars: 2,\n hostBindings: function NgbNavOutlet_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵclassProp(\"tab-content\", true);\n }\n },\n inputs: {\n paneRole: \"paneRole\",\n nav: [\"ngbNavOutlet\", \"nav\"]\n },\n attrs: _c32,\n decls: 1,\n vars: 1,\n consts: [[\"ngFor\", \"\", 3, \"ngForOf\"], [\"ngbNavPane\", \"\", 3, \"item\", \"nav\", \"role\", 4, \"ngIf\"], [\"ngbNavPane\", \"\", 3, \"item\", \"nav\", \"role\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"]],\n template: function NgbNavOutlet_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtemplate(0, NgbNavOutlet_ng_template_0_Template, 1, 1, \"ng-template\", 0);\n }\n\n if (rf & 2) {\n i0.ɵɵproperty(\"ngForOf\", ctx.nav.items);\n }\n },\n directives: [i2.NgForOf, i2.NgIf, NgbNavPane, i2.NgTemplateOutlet],\n encapsulation: 2,\n changeDetection: 0\n });\n return NgbNavOutlet;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nconst NGB_NAV_DIRECTIVES = [NgbNavContent, NgbNav, NgbNavItem, NgbNavLink, NgbNavOutlet, NgbNavPane];\nlet NgbNavModule = /*#__PURE__*/(() => {\n class NgbNavModule {}\n\n NgbNavModule.ɵfac = function NgbNavModule_Factory(t) {\n return new (t || NgbNavModule)();\n };\n\n NgbNavModule.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: NgbNavModule\n });\n NgbNavModule.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [[CommonModule]]\n });\n return NgbNavModule;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A configuration service for the [`NgbPagination`](#/components/pagination/api#NgbPagination) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the paginations used in the application.\n */\n\n\nlet NgbPaginationConfig = /*#__PURE__*/(() => {\n class NgbPaginationConfig {\n constructor() {\n this.disabled = false;\n this.boundaryLinks = false;\n this.directionLinks = true;\n this.ellipses = true;\n this.maxSize = 0;\n this.pageSize = 10;\n this.rotate = false;\n }\n\n }\n\n NgbPaginationConfig.ɵfac = function NgbPaginationConfig_Factory(t) {\n return new (t || NgbPaginationConfig)();\n };\n\n NgbPaginationConfig.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbPaginationConfig,\n factory: NgbPaginationConfig.ɵfac,\n providedIn: 'root'\n });\n return NgbPaginationConfig;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A directive to match the 'ellipsis' link template\n *\n * @since 4.1.0\n */\n\n\nlet NgbPaginationEllipsis = /*#__PURE__*/(() => {\n class NgbPaginationEllipsis {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n\n }\n\n NgbPaginationEllipsis.ɵfac = function NgbPaginationEllipsis_Factory(t) {\n return new (t || NgbPaginationEllipsis)(i0.ɵɵdirectiveInject(i0.TemplateRef));\n };\n\n NgbPaginationEllipsis.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbPaginationEllipsis,\n selectors: [[\"ng-template\", \"ngbPaginationEllipsis\", \"\"]]\n });\n return NgbPaginationEllipsis;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A directive to match the 'first' link template\n *\n * @since 4.1.0\n */\n\n\nlet NgbPaginationFirst = /*#__PURE__*/(() => {\n class NgbPaginationFirst {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n\n }\n\n NgbPaginationFirst.ɵfac = function NgbPaginationFirst_Factory(t) {\n return new (t || NgbPaginationFirst)(i0.ɵɵdirectiveInject(i0.TemplateRef));\n };\n\n NgbPaginationFirst.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbPaginationFirst,\n selectors: [[\"ng-template\", \"ngbPaginationFirst\", \"\"]]\n });\n return NgbPaginationFirst;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A directive to match the 'last' link template\n *\n * @since 4.1.0\n */\n\n\nlet NgbPaginationLast = /*#__PURE__*/(() => {\n class NgbPaginationLast {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n\n }\n\n NgbPaginationLast.ɵfac = function NgbPaginationLast_Factory(t) {\n return new (t || NgbPaginationLast)(i0.ɵɵdirectiveInject(i0.TemplateRef));\n };\n\n NgbPaginationLast.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbPaginationLast,\n selectors: [[\"ng-template\", \"ngbPaginationLast\", \"\"]]\n });\n return NgbPaginationLast;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A directive to match the 'next' link template\n *\n * @since 4.1.0\n */\n\n\nlet NgbPaginationNext = /*#__PURE__*/(() => {\n class NgbPaginationNext {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n\n }\n\n NgbPaginationNext.ɵfac = function NgbPaginationNext_Factory(t) {\n return new (t || NgbPaginationNext)(i0.ɵɵdirectiveInject(i0.TemplateRef));\n };\n\n NgbPaginationNext.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbPaginationNext,\n selectors: [[\"ng-template\", \"ngbPaginationNext\", \"\"]]\n });\n return NgbPaginationNext;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A directive to match the page 'number' link template\n *\n * @since 4.1.0\n */\n\n\nlet NgbPaginationNumber = /*#__PURE__*/(() => {\n class NgbPaginationNumber {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n\n }\n\n NgbPaginationNumber.ɵfac = function NgbPaginationNumber_Factory(t) {\n return new (t || NgbPaginationNumber)(i0.ɵɵdirectiveInject(i0.TemplateRef));\n };\n\n NgbPaginationNumber.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbPaginationNumber,\n selectors: [[\"ng-template\", \"ngbPaginationNumber\", \"\"]]\n });\n return NgbPaginationNumber;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A directive to match the 'previous' link template\n *\n * @since 4.1.0\n */\n\n\nlet NgbPaginationPrevious = /*#__PURE__*/(() => {\n class NgbPaginationPrevious {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n\n }\n\n NgbPaginationPrevious.ɵfac = function NgbPaginationPrevious_Factory(t) {\n return new (t || NgbPaginationPrevious)(i0.ɵɵdirectiveInject(i0.TemplateRef));\n };\n\n NgbPaginationPrevious.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbPaginationPrevious,\n selectors: [[\"ng-template\", \"ngbPaginationPrevious\", \"\"]]\n });\n return NgbPaginationPrevious;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A directive to match the 'pages' whole content\n *\n * @since 9.1.0\n */\n\n\nlet NgbPaginationPages = /*#__PURE__*/(() => {\n class NgbPaginationPages {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n\n }\n\n NgbPaginationPages.ɵfac = function NgbPaginationPages_Factory(t) {\n return new (t || NgbPaginationPages)(i0.ɵɵdirectiveInject(i0.TemplateRef));\n };\n\n NgbPaginationPages.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbPaginationPages,\n selectors: [[\"ng-template\", \"ngbPaginationPages\", \"\"]]\n });\n return NgbPaginationPages;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A component that displays page numbers and allows to customize them in several ways.\n */\n\n\nlet NgbPagination = /*#__PURE__*/(() => {\n class NgbPagination {\n constructor(config) {\n this.pageCount = 0;\n this.pages = [];\n /**\n * The current page.\n *\n * Page numbers start with `1`.\n */\n\n this.page = 1;\n /**\n * An event fired when the page is changed. Will fire only if collection size is set and all values are valid.\n *\n * Event payload is the number of the newly selected page.\n *\n * Page numbers start with `1`.\n */\n\n this.pageChange = new EventEmitter(true);\n this.disabled = config.disabled;\n this.boundaryLinks = config.boundaryLinks;\n this.directionLinks = config.directionLinks;\n this.ellipses = config.ellipses;\n this.maxSize = config.maxSize;\n this.pageSize = config.pageSize;\n this.rotate = config.rotate;\n this.size = config.size;\n }\n\n hasPrevious() {\n return this.page > 1;\n }\n\n hasNext() {\n return this.page < this.pageCount;\n }\n\n nextDisabled() {\n return !this.hasNext() || this.disabled;\n }\n\n previousDisabled() {\n return !this.hasPrevious() || this.disabled;\n }\n\n selectPage(pageNumber) {\n this._updatePages(pageNumber);\n }\n\n ngOnChanges(changes) {\n this._updatePages(this.page);\n }\n\n isEllipsis(pageNumber) {\n return pageNumber === -1;\n }\n /**\n * Appends ellipses and first/last page number to the displayed pages\n */\n\n\n _applyEllipses(start, end) {\n if (this.ellipses) {\n if (start > 0) {\n // The first page will always be included. If the displayed range\n // starts after the third page, then add ellipsis. But if the range\n // starts on the third page, then add the second page instead of\n // an ellipsis, because the ellipsis would only hide a single page.\n if (start > 2) {\n this.pages.unshift(-1);\n } else if (start === 2) {\n this.pages.unshift(2);\n }\n\n this.pages.unshift(1);\n }\n\n if (end < this.pageCount) {\n // The last page will always be included. If the displayed range\n // ends before the third-last page, then add ellipsis. But if the range\n // ends on third-last page, then add the second-last page instead of\n // an ellipsis, because the ellipsis would only hide a single page.\n if (end < this.pageCount - 2) {\n this.pages.push(-1);\n } else if (end === this.pageCount - 2) {\n this.pages.push(this.pageCount - 1);\n }\n\n this.pages.push(this.pageCount);\n }\n }\n }\n /**\n * Rotates page numbers based on maxSize items visible.\n * Currently selected page stays in the middle:\n *\n * Ex. for selected page = 6:\n * [5,*6*,7] for maxSize = 3\n * [4,5,*6*,7] for maxSize = 4\n */\n\n\n _applyRotation() {\n let start = 0;\n let end = this.pageCount;\n let leftOffset = Math.floor(this.maxSize / 2);\n let rightOffset = this.maxSize % 2 === 0 ? leftOffset - 1 : leftOffset;\n\n if (this.page <= leftOffset) {\n // very beginning, no rotation -> [0..maxSize]\n end = this.maxSize;\n } else if (this.pageCount - this.page < leftOffset) {\n // very end, no rotation -> [len-maxSize..len]\n start = this.pageCount - this.maxSize;\n } else {\n // rotate\n start = this.page - leftOffset - 1;\n end = this.page + rightOffset;\n }\n\n return [start, end];\n }\n /**\n * Paginates page numbers based on maxSize items per page.\n */\n\n\n _applyPagination() {\n let page = Math.ceil(this.page / this.maxSize) - 1;\n let start = page * this.maxSize;\n let end = start + this.maxSize;\n return [start, end];\n }\n\n _setPageInRange(newPageNo) {\n const prevPageNo = this.page;\n this.page = getValueInRange(newPageNo, this.pageCount, 1);\n\n if (this.page !== prevPageNo && isNumber(this.collectionSize)) {\n this.pageChange.emit(this.page);\n }\n }\n\n _updatePages(newPage) {\n this.pageCount = Math.ceil(this.collectionSize / this.pageSize);\n\n if (!isNumber(this.pageCount)) {\n this.pageCount = 0;\n } // fill-in model needed to render pages\n\n\n this.pages.length = 0;\n\n for (let i = 1; i <= this.pageCount; i++) {\n this.pages.push(i);\n } // set page within 1..max range\n\n\n this._setPageInRange(newPage); // apply maxSize if necessary\n\n\n if (this.maxSize > 0 && this.pageCount > this.maxSize) {\n let start = 0;\n let end = this.pageCount; // either paginating or rotating page numbers\n\n if (this.rotate) {\n [start, end] = this._applyRotation();\n } else {\n [start, end] = this._applyPagination();\n }\n\n this.pages = this.pages.slice(start, end); // adding ellipses\n\n this._applyEllipses(start, end);\n }\n }\n\n }\n\n NgbPagination.ɵfac = function NgbPagination_Factory(t) {\n return new (t || NgbPagination)(i0.ɵɵdirectiveInject(NgbPaginationConfig));\n };\n\n NgbPagination.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: NgbPagination,\n selectors: [[\"ngb-pagination\"]],\n contentQueries: function NgbPagination_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, NgbPaginationEllipsis, 5);\n i0.ɵɵcontentQuery(dirIndex, NgbPaginationFirst, 5);\n i0.ɵɵcontentQuery(dirIndex, NgbPaginationLast, 5);\n i0.ɵɵcontentQuery(dirIndex, NgbPaginationNext, 5);\n i0.ɵɵcontentQuery(dirIndex, NgbPaginationNumber, 5);\n i0.ɵɵcontentQuery(dirIndex, NgbPaginationPrevious, 5);\n i0.ɵɵcontentQuery(dirIndex, NgbPaginationPages, 5);\n }\n\n if (rf & 2) {\n let _t;\n\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.tplEllipsis = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.tplFirst = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.tplLast = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.tplNext = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.tplNumber = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.tplPrevious = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.tplPages = _t.first);\n }\n },\n hostAttrs: [\"role\", \"navigation\"],\n inputs: {\n disabled: \"disabled\",\n boundaryLinks: \"boundaryLinks\",\n directionLinks: \"directionLinks\",\n ellipses: \"ellipses\",\n rotate: \"rotate\",\n collectionSize: \"collectionSize\",\n maxSize: \"maxSize\",\n page: \"page\",\n pageSize: \"pageSize\",\n size: \"size\"\n },\n outputs: {\n pageChange: \"pageChange\"\n },\n features: [i0.ɵɵNgOnChangesFeature],\n decls: 20,\n vars: 12,\n consts: function () {\n let i18n_34;\n\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS__35 = goog.getMsg(\"\\xAB\\xAB\");\n i18n_34 = MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS__35;\n } else {\n i18n_34 = $localize`:@@ngb.pagination.first:««`;\n }\n\n let i18n_36;\n\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS__37 = goog.getMsg(\"\\xAB\");\n i18n_36 = MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS__37;\n } else {\n i18n_36 = $localize`:@@ngb.pagination.previous:«`;\n }\n\n let i18n_38;\n\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS__39 = goog.getMsg(\"\\xBB\");\n i18n_38 = MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS__39;\n } else {\n i18n_38 = $localize`:@@ngb.pagination.next:»`;\n }\n\n let i18n_40;\n\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS__41 = goog.getMsg(\"\\xBB\\xBB\");\n i18n_40 = MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS__41;\n } else {\n i18n_40 = $localize`:@@ngb.pagination.last:»»`;\n }\n\n let i18n_44;\n\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS__45 = goog.getMsg(\"First\");\n i18n_44 = MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS__45;\n } else {\n i18n_44 = $localize`:@@ngb.pagination.first-aria:First`;\n }\n\n let i18n_47;\n\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS__48 = goog.getMsg(\"Previous\");\n i18n_47 = MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS__48;\n } else {\n i18n_47 = $localize`:@@ngb.pagination.previous-aria:Previous`;\n }\n\n let i18n_50;\n\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS__51 = goog.getMsg(\"Next\");\n i18n_50 = MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS__51;\n } else {\n i18n_50 = $localize`:@@ngb.pagination.next-aria:Next`;\n }\n\n let i18n_52;\n\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS__53 = goog.getMsg(\"Last\");\n i18n_52 = MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS__53;\n } else {\n i18n_52 = $localize`:@@ngb.pagination.last-aria:Last`;\n }\n\n return [[\"first\", \"\"], [\"previous\", \"\"], [\"next\", \"\"], [\"last\", \"\"], [\"ellipsis\", \"\"], [\"defaultNumber\", \"\"], [\"defaultPages\", \"\"], [\"class\", \"page-item\", 3, \"disabled\", 4, \"ngIf\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"], [\"aria-hidden\", \"true\"], i18n_34, i18n_36, i18n_38, i18n_40, [\"class\", \"visually-hidden\", 4, \"ngIf\"], [1, \"visually-hidden\"], [\"class\", \"page-item\", 3, \"active\", \"disabled\", 4, \"ngFor\", \"ngForOf\"], [1, \"page-item\"], [\"class\", \"page-link\", \"tabindex\", \"-1\", \"aria-disabled\", \"true\", 4, \"ngIf\"], [\"class\", \"page-link\", \"href\", \"\", 3, \"click\", 4, \"ngIf\"], [\"tabindex\", \"-1\", \"aria-disabled\", \"true\", 1, \"page-link\"], [\"href\", \"\", 1, \"page-link\", 3, \"click\"], [\"aria-label\", i18n_44, \"href\", \"\", 1, \"page-link\", 3, \"click\"], [\"aria-label\", i18n_47, \"href\", \"\", 1, \"page-link\", 3, \"click\"], [\"aria-label\", i18n_50, \"href\", \"\", 1, \"page-link\", 3, \"click\"], [\"aria-label\", i18n_52, \"href\", \"\", 1, \"page-link\", 3, \"click\"]];\n },\n template: function NgbPagination_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtemplate(0, NgbPagination_ng_template_0_Template, 2, 0, \"ng-template\", null, 0, i0.ɵɵtemplateRefExtractor);\n i0.ɵɵtemplate(2, NgbPagination_ng_template_2_Template, 2, 0, \"ng-template\", null, 1, i0.ɵɵtemplateRefExtractor);\n i0.ɵɵtemplate(4, NgbPagination_ng_template_4_Template, 2, 0, \"ng-template\", null, 2, i0.ɵɵtemplateRefExtractor);\n i0.ɵɵtemplate(6, NgbPagination_ng_template_6_Template, 2, 0, \"ng-template\", null, 3, i0.ɵɵtemplateRefExtractor);\n i0.ɵɵtemplate(8, NgbPagination_ng_template_8_Template, 1, 0, \"ng-template\", null, 4, i0.ɵɵtemplateRefExtractor);\n i0.ɵɵtemplate(10, NgbPagination_ng_template_10_Template, 2, 2, \"ng-template\", null, 5, i0.ɵɵtemplateRefExtractor);\n i0.ɵɵtemplate(12, NgbPagination_ng_template_12_Template, 1, 1, \"ng-template\", null, 6, i0.ɵɵtemplateRefExtractor);\n i0.ɵɵelementStart(14, \"ul\");\n i0.ɵɵtemplate(15, NgbPagination_li_15_Template, 3, 9, \"li\", 7);\n i0.ɵɵtemplate(16, NgbPagination_li_16_Template, 3, 8, \"li\", 7);\n i0.ɵɵtemplate(17, NgbPagination_ng_template_17_Template, 0, 0, \"ng-template\", 8);\n i0.ɵɵtemplate(18, NgbPagination_li_18_Template, 3, 9, \"li\", 7);\n i0.ɵɵtemplate(19, NgbPagination_li_19_Template, 3, 9, \"li\", 7);\n i0.ɵɵelementEnd();\n }\n\n if (rf & 2) {\n const _r12 = i0.ɵɵreference(13);\n\n i0.ɵɵadvance(14);\n i0.ɵɵclassMap(\"pagination\" + (ctx.size ? \" pagination-\" + ctx.size : \"\"));\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngIf\", ctx.boundaryLinks);\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngIf\", ctx.directionLinks);\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngTemplateOutlet\", (ctx.tplPages == null ? null : ctx.tplPages.templateRef) || _r12)(\"ngTemplateOutletContext\", i0.ɵɵpureFunction3(8, _c54, ctx.page, ctx.pages, ctx.disabled));\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngIf\", ctx.directionLinks);\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngIf\", ctx.boundaryLinks);\n }\n },\n directives: [i2.NgIf, i2.NgForOf, i2.NgTemplateOutlet],\n encapsulation: 2,\n changeDetection: 0\n });\n return NgbPagination;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nconst DIRECTIVES = [NgbPagination, NgbPaginationEllipsis, NgbPaginationFirst, NgbPaginationLast, NgbPaginationNext, NgbPaginationNumber, NgbPaginationPrevious, NgbPaginationPages];\nlet NgbPaginationModule = /*#__PURE__*/(() => {\n class NgbPaginationModule {}\n\n NgbPaginationModule.ɵfac = function NgbPaginationModule_Factory(t) {\n return new (t || NgbPaginationModule)();\n };\n\n NgbPaginationModule.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: NgbPaginationModule\n });\n NgbPaginationModule.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [[CommonModule]]\n });\n return NgbPaginationModule;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nclass Trigger {\n constructor(open, close) {\n this.open = open;\n this.close = close;\n\n if (!close) {\n this.close = open;\n }\n }\n\n isManual() {\n return this.open === 'manual' || this.close === 'manual';\n }\n\n}\n\nconst DEFAULT_ALIASES = {\n 'hover': ['mouseenter', 'mouseleave'],\n 'focus': ['focusin', 'focusout']\n};\n\nfunction parseTriggers(triggers, aliases = DEFAULT_ALIASES) {\n const trimmedTriggers = (triggers || '').trim();\n\n if (trimmedTriggers.length === 0) {\n return [];\n }\n\n const parsedTriggers = trimmedTriggers.split(/\\s+/).map(trigger => trigger.split(':')).map(triggerPair => {\n let alias = aliases[triggerPair[0]] || triggerPair;\n return new Trigger(alias[0], alias[1]);\n });\n const manualTriggers = parsedTriggers.filter(triggerPair => triggerPair.isManual());\n\n if (manualTriggers.length > 1) {\n throw 'Triggers parse error: only one manual trigger is allowed';\n }\n\n if (manualTriggers.length === 1 && parsedTriggers.length > 1) {\n throw 'Triggers parse error: manual trigger can\\'t be mixed with other triggers';\n }\n\n return parsedTriggers;\n}\n\nfunction observeTriggers(renderer, nativeElement, triggers, isOpenedFn) {\n return new Observable(subscriber => {\n const listeners = [];\n\n const openFn = () => subscriber.next(true);\n\n const closeFn = () => subscriber.next(false);\n\n const toggleFn = () => subscriber.next(!isOpenedFn());\n\n triggers.forEach(trigger => {\n if (trigger.open === trigger.close) {\n listeners.push(renderer.listen(nativeElement, trigger.open, toggleFn));\n } else {\n listeners.push(renderer.listen(nativeElement, trigger.open, openFn), renderer.listen(nativeElement, trigger.close, closeFn));\n }\n });\n return () => {\n listeners.forEach(unsubscribeFn => unsubscribeFn());\n };\n });\n}\n\nconst delayOrNoop = time => time > 0 ? delay(time) : a => a;\n\nfunction triggerDelay(openDelay, closeDelay, isOpenedFn) {\n return input$ => {\n let pending = null;\n const filteredInput$ = input$.pipe(map(open => ({\n open\n })), filter(event => {\n const currentlyOpen = isOpenedFn();\n\n if (currentlyOpen !== event.open && (!pending || pending.open === currentlyOpen)) {\n pending = event;\n return true;\n }\n\n if (pending && pending.open !== event.open) {\n pending = null;\n }\n\n return false;\n }), share());\n const delayedOpen$ = filteredInput$.pipe(filter(event => event.open), delayOrNoop(openDelay));\n const delayedClose$ = filteredInput$.pipe(filter(event => !event.open), delayOrNoop(closeDelay));\n return merge(delayedOpen$, delayedClose$).pipe(filter(event => {\n if (event === pending) {\n pending = null;\n return event.open !== isOpenedFn();\n }\n\n return false;\n }), map(event => event.open));\n };\n}\n\nfunction listenToTriggers(renderer, nativeElement, triggers, isOpenedFn, openFn, closeFn, openDelay = 0, closeDelay = 0) {\n const parsedTriggers = parseTriggers(triggers);\n\n if (parsedTriggers.length === 1 && parsedTriggers[0].isManual()) {\n return () => {};\n }\n\n const subscription = observeTriggers(renderer, nativeElement, parsedTriggers, isOpenedFn).pipe(triggerDelay(openDelay, closeDelay, isOpenedFn)).subscribe(open => open ? openFn() : closeFn());\n return () => subscription.unsubscribe();\n}\n/**\n * A configuration service for the [`NgbPopover`](#/components/popover/api#NgbPopover) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the popovers used in the application.\n */\n\n\nlet NgbPopoverConfig = /*#__PURE__*/(() => {\n class NgbPopoverConfig {\n constructor(_ngbConfig) {\n this._ngbConfig = _ngbConfig;\n this.autoClose = true;\n this.placement = 'auto';\n this.triggers = 'click';\n this.disablePopover = false;\n this.openDelay = 0;\n this.closeDelay = 0;\n }\n\n get animation() {\n return this._animation === undefined ? this._ngbConfig.animation : this._animation;\n }\n\n set animation(animation) {\n this._animation = animation;\n }\n\n }\n\n NgbPopoverConfig.ɵfac = function NgbPopoverConfig_Factory(t) {\n return new (t || NgbPopoverConfig)(i0.ɵɵinject(NgbConfig));\n };\n\n NgbPopoverConfig.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbPopoverConfig,\n factory: NgbPopoverConfig.ɵfac,\n providedIn: 'root'\n });\n return NgbPopoverConfig;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nlet nextId$1 = 0;\nlet NgbPopoverWindow = /*#__PURE__*/(() => {\n class NgbPopoverWindow {\n isTitleTemplate() {\n return this.title instanceof TemplateRef;\n }\n\n }\n\n NgbPopoverWindow.ɵfac = function NgbPopoverWindow_Factory(t) {\n return new (t || NgbPopoverWindow)();\n };\n\n NgbPopoverWindow.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: NgbPopoverWindow,\n selectors: [[\"ngb-popover-window\"]],\n hostAttrs: [\"role\", \"tooltip\"],\n hostVars: 5,\n hostBindings: function NgbPopoverWindow_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵhostProperty(\"id\", ctx.id);\n i0.ɵɵclassMap(\"popover\" + (ctx.popoverClass ? \" \" + ctx.popoverClass : \"\"));\n i0.ɵɵclassProp(\"fade\", ctx.animation);\n }\n },\n inputs: {\n animation: \"animation\",\n title: \"title\",\n id: \"id\",\n popoverClass: \"popoverClass\",\n context: \"context\"\n },\n ngContentSelectors: _c3,\n decls: 4,\n vars: 1,\n consts: [[\"data-popper-arrow\", \"\", 1, \"popover-arrow\"], [\"class\", \"popover-header\", 4, \"ngIf\"], [1, \"popover-body\"], [1, \"popover-header\"], [\"simpleTitle\", \"\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"]],\n template: function NgbPopoverWindow_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵelement(0, \"div\", 0);\n i0.ɵɵtemplate(1, NgbPopoverWindow_h3_1_Template, 4, 2, \"h3\", 1);\n i0.ɵɵelementStart(2, \"div\", 2);\n i0.ɵɵprojection(3);\n i0.ɵɵelementEnd();\n }\n\n if (rf & 2) {\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngIf\", ctx.title);\n }\n },\n directives: [i2.NgIf, i2.NgTemplateOutlet],\n encapsulation: 2,\n changeDetection: 0\n });\n return NgbPopoverWindow;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A lightweight and extensible directive for fancy popover creation.\n */\n\n\nlet NgbPopover = /*#__PURE__*/(() => {\n class NgbPopover {\n constructor(_elementRef, _renderer, injector, viewContainerRef, config, _ngZone, _document, _changeDetector, applicationRef) {\n this._elementRef = _elementRef;\n this._renderer = _renderer;\n this._ngZone = _ngZone;\n this._document = _document;\n this._changeDetector = _changeDetector;\n /**\n * An event emitted when the popover opening animation has finished. Contains no payload.\n */\n\n this.shown = new EventEmitter();\n /**\n * An event emitted when the popover closing animation has finished. Contains no payload.\n *\n * At this point popover is not in the DOM anymore.\n */\n\n this.hidden = new EventEmitter();\n this._ngbPopoverWindowId = `ngb-popover-${nextId$1++}`;\n this._windowRef = null;\n this._positioning = ngbPositioning();\n this.animation = config.animation;\n this.autoClose = config.autoClose;\n this.placement = config.placement;\n this.triggers = config.triggers;\n this.container = config.container;\n this.disablePopover = config.disablePopover;\n this.popoverClass = config.popoverClass;\n this.openDelay = config.openDelay;\n this.closeDelay = config.closeDelay;\n this._popupService = new PopupService(NgbPopoverWindow, injector, viewContainerRef, _renderer, this._ngZone, applicationRef);\n }\n\n _isDisabled() {\n if (this.disablePopover) {\n return true;\n }\n\n if (!this.ngbPopover && !this.popoverTitle) {\n return true;\n }\n\n return false;\n }\n /**\n * Opens the popover.\n *\n * This is considered to be a \"manual\" triggering.\n * The `context` is an optional value to be injected into the popover template when it is created.\n */\n\n\n open(context) {\n if (!this._windowRef && !this._isDisabled()) {\n // this type assertion is safe because otherwise _isDisabled would return true\n const {\n windowRef,\n transition$\n } = this._popupService.open(this.ngbPopover, context, this.animation);\n\n this._windowRef = windowRef;\n this._windowRef.instance.animation = this.animation;\n this._windowRef.instance.title = this.popoverTitle;\n this._windowRef.instance.context = context;\n this._windowRef.instance.popoverClass = this.popoverClass;\n this._windowRef.instance.id = this._ngbPopoverWindowId;\n\n this._renderer.setAttribute(this._elementRef.nativeElement, 'aria-describedby', this._ngbPopoverWindowId);\n\n if (this.container === 'body') {\n this._document.querySelector(this.container).appendChild(this._windowRef.location.nativeElement);\n } // We need to detect changes, because we don't know where .open() might be called from.\n // Ex. opening popover from one of lifecycle hooks that run after the CD\n // (say from ngAfterViewInit) will result in 'ExpressionHasChanged' exception\n\n\n this._windowRef.changeDetectorRef.detectChanges(); // We need to mark for check, because popover won't work inside the OnPush component.\n // Ex. when we use expression like `{{ popover.isOpen() : 'opened' : 'closed' }}`\n // inside the template of an OnPush component and we change the popover from\n // open -> closed, the expression in question won't be updated unless we explicitly\n // mark the parent component to be checked.\n\n\n this._windowRef.changeDetectorRef.markForCheck(); // Setting up popper and scheduling updates when zone is stable\n\n\n this._ngZone.runOutsideAngular(() => {\n this._positioning.createPopper({\n hostElement: this._elementRef.nativeElement,\n targetElement: this._windowRef.location.nativeElement,\n placement: this.placement,\n appendToBody: this.container === 'body',\n baseClass: 'bs-popover',\n updatePopperOptions: addPopperOffset([0, 8])\n });\n\n Promise.resolve().then(() => {\n // This update is required for correct arrow placement\n this._positioning.update();\n\n this._zoneSubscription = this._ngZone.onStable.subscribe(() => this._positioning.update());\n });\n });\n\n ngbAutoClose(this._ngZone, this._document, this.autoClose, () => this.close(), this.hidden, [this._windowRef.location.nativeElement]);\n transition$.subscribe(() => this.shown.emit());\n }\n }\n /**\n * Closes the popover.\n *\n * This is considered to be a \"manual\" triggering of the popover.\n */\n\n\n close(animation = this.animation) {\n if (this._windowRef) {\n this._renderer.removeAttribute(this._elementRef.nativeElement, 'aria-describedby');\n\n this._popupService.close(animation).subscribe(() => {\n var _a;\n\n this._windowRef = null;\n\n this._positioning.destroy();\n\n (_a = this._zoneSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();\n this.hidden.emit();\n\n this._changeDetector.markForCheck();\n });\n }\n }\n /**\n * Toggles the popover.\n *\n * This is considered to be a \"manual\" triggering of the popover.\n */\n\n\n toggle() {\n if (this._windowRef) {\n this.close();\n } else {\n this.open();\n }\n }\n /**\n * Returns `true`, if the popover is currently shown.\n */\n\n\n isOpen() {\n return this._windowRef != null;\n }\n\n ngOnInit() {\n this._unregisterListenersFn = listenToTriggers(this._renderer, this._elementRef.nativeElement, this.triggers, this.isOpen.bind(this), this.open.bind(this), this.close.bind(this), +this.openDelay, +this.closeDelay);\n }\n\n ngOnChanges({\n ngbPopover,\n popoverTitle,\n disablePopover,\n popoverClass\n }) {\n if (popoverClass && this.isOpen()) {\n this._windowRef.instance.popoverClass = popoverClass.currentValue;\n } // close popover if title and content become empty, or disablePopover set to true\n\n\n if ((ngbPopover || popoverTitle || disablePopover) && this._isDisabled()) {\n this.close();\n }\n }\n\n ngOnDestroy() {\n var _a;\n\n this.close(false); // This check is needed as it might happen that ngOnDestroy is called before ngOnInit\n // under certain conditions, see: https://github.com/ng-bootstrap/ng-bootstrap/issues/2199\n\n (_a = this._unregisterListenersFn) === null || _a === void 0 ? void 0 : _a.call(this);\n }\n\n }\n\n NgbPopover.ɵfac = function NgbPopover_Factory(t) {\n return new (t || NgbPopover)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.Renderer2), i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(NgbPopoverConfig), i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(DOCUMENT), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i0.ApplicationRef));\n };\n\n NgbPopover.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbPopover,\n selectors: [[\"\", \"ngbPopover\", \"\"]],\n inputs: {\n animation: \"animation\",\n autoClose: \"autoClose\",\n ngbPopover: \"ngbPopover\",\n popoverTitle: \"popoverTitle\",\n placement: \"placement\",\n triggers: \"triggers\",\n container: \"container\",\n disablePopover: \"disablePopover\",\n popoverClass: \"popoverClass\",\n openDelay: \"openDelay\",\n closeDelay: \"closeDelay\"\n },\n outputs: {\n shown: \"shown\",\n hidden: \"hidden\"\n },\n exportAs: [\"ngbPopover\"],\n features: [i0.ɵɵNgOnChangesFeature]\n });\n return NgbPopover;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nlet NgbPopoverModule = /*#__PURE__*/(() => {\n class NgbPopoverModule {}\n\n NgbPopoverModule.ɵfac = function NgbPopoverModule_Factory(t) {\n return new (t || NgbPopoverModule)();\n };\n\n NgbPopoverModule.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: NgbPopoverModule\n });\n NgbPopoverModule.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [[CommonModule]]\n });\n return NgbPopoverModule;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A configuration service for the [`NgbProgressbar`](#/components/progressbar/api#NgbProgressbar) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the progress bars used in the application.\n */\n\n\nlet NgbProgressbarConfig = /*#__PURE__*/(() => {\n class NgbProgressbarConfig {\n constructor() {\n this.max = 100;\n this.animated = false;\n this.striped = false;\n this.showValue = false;\n }\n\n }\n\n NgbProgressbarConfig.ɵfac = function NgbProgressbarConfig_Factory(t) {\n return new (t || NgbProgressbarConfig)();\n };\n\n NgbProgressbarConfig.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbProgressbarConfig,\n factory: NgbProgressbarConfig.ɵfac,\n providedIn: 'root'\n });\n return NgbProgressbarConfig;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A directive that provides feedback on the progress of a workflow or an action.\n */\n\n\nlet NgbProgressbar = /*#__PURE__*/(() => {\n class NgbProgressbar {\n constructor(config) {\n /**\n * The current value for the progress bar.\n *\n * Should be in the `[0, max]` range.\n */\n this.value = 0;\n this.max = config.max;\n this.animated = config.animated;\n this.striped = config.striped;\n this.textType = config.textType;\n this.type = config.type;\n this.showValue = config.showValue;\n this.height = config.height;\n }\n /**\n * The maximal value to be displayed in the progress bar.\n *\n * Should be a positive number. Will default to 100 otherwise.\n */\n\n\n set max(max) {\n this._max = !isNumber(max) || max <= 0 ? 100 : max;\n }\n\n get max() {\n return this._max;\n }\n\n getValue() {\n return getValueInRange(this.value, this.max);\n }\n\n getPercentValue() {\n return 100 * this.getValue() / this.max;\n }\n\n }\n\n NgbProgressbar.ɵfac = function NgbProgressbar_Factory(t) {\n return new (t || NgbProgressbar)(i0.ɵɵdirectiveInject(NgbProgressbarConfig));\n };\n\n NgbProgressbar.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: NgbProgressbar,\n selectors: [[\"ngb-progressbar\"]],\n hostAttrs: [1, \"progress\"],\n hostVars: 2,\n hostBindings: function NgbProgressbar_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵstyleProp(\"height\", ctx.height);\n }\n },\n inputs: {\n max: \"max\",\n animated: \"animated\",\n striped: \"striped\",\n showValue: \"showValue\",\n textType: \"textType\",\n type: \"type\",\n value: \"value\",\n height: \"height\"\n },\n ngContentSelectors: _c3,\n decls: 3,\n vars: 11,\n consts: function () {\n let i18n_55;\n\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS__56 = goog.getMsg(\"{$interpolation}\", {\n \"interpolation\": \"\\uFFFD0\\uFFFD\"\n });\n i18n_55 = MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS__56;\n } else {\n i18n_55 = $localize`:@@ngb.progressbar.value:${\"\\uFFFD0\\uFFFD\"}:INTERPOLATION:`;\n }\n\n return [[\"role\", \"progressbar\", \"aria-valuemin\", \"0\"], [4, \"ngIf\"], i18n_55];\n },\n template: function NgbProgressbar_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵelementStart(0, \"div\", 0);\n i0.ɵɵtemplate(1, NgbProgressbar_span_1_Template, 3, 3, \"span\", 1);\n i0.ɵɵprojection(2);\n i0.ɵɵelementEnd();\n }\n\n if (rf & 2) {\n i0.ɵɵclassMapInterpolate4(\"progress-bar\", ctx.type ? \" bg-\" + ctx.type : \"\", \"\", ctx.textType ? \" text-\" + ctx.textType : \"\", \"\\n \", ctx.animated ? \" progress-bar-animated\" : \"\", \"\", ctx.striped ? \" progress-bar-striped\" : \"\", \"\");\n i0.ɵɵstyleProp(\"width\", ctx.getPercentValue(), \"%\");\n i0.ɵɵattribute(\"aria-valuenow\", ctx.getValue())(\"aria-valuemax\", ctx.max);\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngIf\", ctx.showValue);\n }\n },\n directives: [i2.NgIf],\n pipes: [i2.PercentPipe],\n encapsulation: 2,\n changeDetection: 0\n });\n return NgbProgressbar;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nlet NgbProgressbarModule = /*#__PURE__*/(() => {\n class NgbProgressbarModule {}\n\n NgbProgressbarModule.ɵfac = function NgbProgressbarModule_Factory(t) {\n return new (t || NgbProgressbarModule)();\n };\n\n NgbProgressbarModule.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: NgbProgressbarModule\n });\n NgbProgressbarModule.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [[CommonModule]]\n });\n return NgbProgressbarModule;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A configuration service for the [`NgbRating`](#/components/rating/api#NgbRating) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the ratings used in the application.\n */\n\n\nlet NgbRatingConfig = /*#__PURE__*/(() => {\n class NgbRatingConfig {\n constructor() {\n this.max = 10;\n this.readonly = false;\n this.resettable = false;\n }\n\n }\n\n NgbRatingConfig.ɵfac = function NgbRatingConfig_Factory(t) {\n return new (t || NgbRatingConfig)();\n };\n\n NgbRatingConfig.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbRatingConfig,\n factory: NgbRatingConfig.ɵfac,\n providedIn: 'root'\n });\n return NgbRatingConfig;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A directive that helps visualising and interacting with a star rating bar.\n */\n\n\nlet NgbRating = /*#__PURE__*/(() => {\n class NgbRating {\n constructor(config, _changeDetectorRef) {\n this._changeDetectorRef = _changeDetectorRef;\n this.contexts = [];\n this.disabled = false;\n /**\n * An event emitted when the user is hovering over a given rating.\n *\n * Event payload equals to the rating being hovered over.\n */\n\n this.hover = new EventEmitter();\n /**\n * An event emitted when the user stops hovering over a given rating.\n *\n * Event payload equals to the rating of the last item being hovered over.\n */\n\n this.leave = new EventEmitter();\n /**\n * An event emitted when the rating is changed.\n *\n * Event payload equals to the newly selected rating.\n */\n\n this.rateChange = new EventEmitter(true);\n\n this.onChange = _ => {};\n\n this.onTouched = () => {};\n\n this.max = config.max;\n this.readonly = config.readonly;\n }\n\n ariaValueText() {\n return `${this.nextRate} out of ${this.max}`;\n }\n\n isInteractive() {\n return !this.readonly && !this.disabled;\n }\n\n enter(value) {\n if (this.isInteractive()) {\n this._updateState(value);\n }\n\n this.hover.emit(value);\n }\n\n handleBlur() {\n this.onTouched();\n }\n\n handleClick(value) {\n if (this.isInteractive()) {\n this.update(this.resettable && this.rate === value ? 0 : value);\n }\n }\n\n handleKeyDown(event) {\n /* eslint-disable-next-line deprecation/deprecation */\n switch (event.which) {\n case Key.ArrowDown:\n case Key.ArrowLeft:\n this.update(this.rate - 1);\n break;\n\n case Key.ArrowUp:\n case Key.ArrowRight:\n this.update(this.rate + 1);\n break;\n\n case Key.Home:\n this.update(0);\n break;\n\n case Key.End:\n this.update(this.max);\n break;\n\n default:\n return;\n } // note 'return' in default case\n\n\n event.preventDefault();\n }\n\n ngOnChanges(changes) {\n if (changes['rate']) {\n this.update(this.rate);\n }\n\n if (changes['max']) {\n this._updateMax();\n }\n }\n\n ngOnInit() {\n this._setupContexts();\n\n this._updateState(this.rate);\n }\n\n registerOnChange(fn) {\n this.onChange = fn;\n }\n\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n\n reset() {\n this.leave.emit(this.nextRate);\n\n this._updateState(this.rate);\n }\n\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n }\n\n update(value, internalChange = true) {\n const newRate = getValueInRange(value, this.max, 0);\n\n if (this.isInteractive() && this.rate !== newRate) {\n this.rate = newRate;\n this.rateChange.emit(this.rate);\n }\n\n if (internalChange) {\n this.onChange(this.rate);\n this.onTouched();\n }\n\n this._updateState(this.rate);\n }\n\n writeValue(value) {\n this.update(value, false);\n\n this._changeDetectorRef.markForCheck();\n }\n\n _updateState(nextValue) {\n this.nextRate = nextValue;\n this.contexts.forEach((context, index) => context.fill = Math.round(getValueInRange(nextValue - index, 1, 0) * 100));\n }\n\n _updateMax() {\n if (this.max > 0) {\n this._setupContexts();\n\n this.update(this.rate);\n }\n }\n\n _setupContexts() {\n this.contexts = Array.from({\n length: this.max\n }, (v, k) => ({\n fill: 0,\n index: k\n }));\n }\n\n }\n\n NgbRating.ɵfac = function NgbRating_Factory(t) {\n return new (t || NgbRating)(i0.ɵɵdirectiveInject(NgbRatingConfig), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef));\n };\n\n NgbRating.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: NgbRating,\n selectors: [[\"ngb-rating\"]],\n contentQueries: function NgbRating_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, TemplateRef, 5);\n }\n\n if (rf & 2) {\n let _t;\n\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.starTemplateFromContent = _t.first);\n }\n },\n hostAttrs: [\"role\", \"slider\", \"aria-valuemin\", \"0\", 1, \"d-inline-flex\"],\n hostVars: 5,\n hostBindings: function NgbRating_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"blur\", function NgbRating_blur_HostBindingHandler() {\n return ctx.handleBlur();\n })(\"keydown\", function NgbRating_keydown_HostBindingHandler($event) {\n return ctx.handleKeyDown($event);\n })(\"mouseleave\", function NgbRating_mouseleave_HostBindingHandler() {\n return ctx.reset();\n });\n }\n\n if (rf & 2) {\n i0.ɵɵhostProperty(\"tabindex\", ctx.disabled ? -1 : 0);\n i0.ɵɵattribute(\"aria-valuemax\", ctx.max)(\"aria-valuenow\", ctx.nextRate)(\"aria-valuetext\", ctx.ariaValueText())(\"aria-disabled\", ctx.readonly ? true : null);\n }\n },\n inputs: {\n max: \"max\",\n rate: \"rate\",\n readonly: \"readonly\",\n resettable: \"resettable\",\n starTemplate: \"starTemplate\"\n },\n outputs: {\n hover: \"hover\",\n leave: \"leave\",\n rateChange: \"rateChange\"\n },\n features: [i0.ɵɵProvidersFeature([{\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgbRating),\n multi: true\n }]), i0.ɵɵNgOnChangesFeature],\n decls: 3,\n vars: 1,\n consts: [[\"t\", \"\"], [\"ngFor\", \"\", 3, \"ngForOf\"], [1, \"visually-hidden\"], [3, \"mouseenter\", \"click\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"]],\n template: function NgbRating_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtemplate(0, NgbRating_ng_template_0_Template, 1, 1, \"ng-template\", null, 0, i0.ɵɵtemplateRefExtractor);\n i0.ɵɵtemplate(2, NgbRating_ng_template_2_Template, 4, 5, \"ng-template\", 1);\n }\n\n if (rf & 2) {\n i0.ɵɵadvance(2);\n i0.ɵɵproperty(\"ngForOf\", ctx.contexts);\n }\n },\n directives: [i2.NgForOf, i2.NgTemplateOutlet],\n encapsulation: 2,\n changeDetection: 0\n });\n return NgbRating;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nlet NgbRatingModule = /*#__PURE__*/(() => {\n class NgbRatingModule {}\n\n NgbRatingModule.ɵfac = function NgbRatingModule_Factory(t) {\n return new (t || NgbRatingModule)();\n };\n\n NgbRatingModule.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: NgbRatingModule\n });\n NgbRatingModule.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [[CommonModule]]\n });\n return NgbRatingModule;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nclass NgbTime {\n constructor(hour, minute, second) {\n this.hour = toInteger(hour);\n this.minute = toInteger(minute);\n this.second = toInteger(second);\n }\n\n changeHour(step = 1) {\n this.updateHour((isNaN(this.hour) ? 0 : this.hour) + step);\n }\n\n updateHour(hour) {\n if (isNumber(hour)) {\n this.hour = (hour < 0 ? 24 + hour : hour) % 24;\n } else {\n this.hour = NaN;\n }\n }\n\n changeMinute(step = 1) {\n this.updateMinute((isNaN(this.minute) ? 0 : this.minute) + step);\n }\n\n updateMinute(minute) {\n if (isNumber(minute)) {\n this.minute = minute % 60 < 0 ? 60 + minute % 60 : minute % 60;\n this.changeHour(Math.floor(minute / 60));\n } else {\n this.minute = NaN;\n }\n }\n\n changeSecond(step = 1) {\n this.updateSecond((isNaN(this.second) ? 0 : this.second) + step);\n }\n\n updateSecond(second) {\n if (isNumber(second)) {\n this.second = second < 0 ? 60 + second % 60 : second % 60;\n this.changeMinute(Math.floor(second / 60));\n } else {\n this.second = NaN;\n }\n }\n\n isValid(checkSecs = true) {\n return isNumber(this.hour) && isNumber(this.minute) && (checkSecs ? isNumber(this.second) : true);\n }\n\n toString() {\n return `${this.hour || 0}:${this.minute || 0}:${this.second || 0}`;\n }\n\n}\n/**\n * A configuration service for the [`NgbTimepicker`](#/components/timepicker/api#NgbTimepicker) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the timepickers used in the application.\n */\n\n\nlet NgbTimepickerConfig = /*#__PURE__*/(() => {\n class NgbTimepickerConfig {\n constructor() {\n this.meridian = false;\n this.spinners = true;\n this.seconds = false;\n this.hourStep = 1;\n this.minuteStep = 1;\n this.secondStep = 1;\n this.disabled = false;\n this.readonlyInputs = false;\n this.size = 'medium';\n }\n\n }\n\n NgbTimepickerConfig.ɵfac = function NgbTimepickerConfig_Factory(t) {\n return new (t || NgbTimepickerConfig)();\n };\n\n NgbTimepickerConfig.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbTimepickerConfig,\n factory: NgbTimepickerConfig.ɵfac,\n providedIn: 'root'\n });\n return NgbTimepickerConfig;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nfunction NGB_DATEPICKER_TIME_ADAPTER_FACTORY() {\n return new NgbTimeStructAdapter();\n}\n/**\n * An abstract service that does the conversion between the internal timepicker `NgbTimeStruct` model and\n * any provided user time model `T`, ex. a string, a native date, etc.\n *\n * The adapter is used **only** for conversion when binding timepicker to a form control,\n * ex. `[(ngModel)]=\"userTimeModel\"`. Here `userTimeModel` can be of any type.\n *\n * The default timepicker implementation assumes we use `NgbTimeStruct` as a user model.\n *\n * See the [custom time adapter demo](#/components/timepicker/examples#adapter) for an example.\n *\n * @since 2.2.0\n */\n\n\nlet NgbTimeAdapter = /*#__PURE__*/(() => {\n class NgbTimeAdapter {}\n\n NgbTimeAdapter.ɵfac = function NgbTimeAdapter_Factory(t) {\n return new (t || NgbTimeAdapter)();\n };\n\n NgbTimeAdapter.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbTimeAdapter,\n factory: function () {\n return NGB_DATEPICKER_TIME_ADAPTER_FACTORY();\n },\n providedIn: 'root'\n });\n return NgbTimeAdapter;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nlet NgbTimeStructAdapter = /*#__PURE__*/(() => {\n class NgbTimeStructAdapter extends NgbTimeAdapter {\n /**\n * Converts a NgbTimeStruct value into NgbTimeStruct value\n */\n fromModel(time) {\n return time && isInteger(time.hour) && isInteger(time.minute) ? {\n hour: time.hour,\n minute: time.minute,\n second: isInteger(time.second) ? time.second : null\n } : null;\n }\n /**\n * Converts a NgbTimeStruct value into NgbTimeStruct value\n */\n\n\n toModel(time) {\n return time && isInteger(time.hour) && isInteger(time.minute) ? {\n hour: time.hour,\n minute: time.minute,\n second: isInteger(time.second) ? time.second : null\n } : null;\n }\n\n }\n\n NgbTimeStructAdapter.ɵfac = /* @__PURE__ */function () {\n let ɵNgbTimeStructAdapter_BaseFactory;\n return function NgbTimeStructAdapter_Factory(t) {\n return (ɵNgbTimeStructAdapter_BaseFactory || (ɵNgbTimeStructAdapter_BaseFactory = i0.ɵɵgetInheritedFactory(NgbTimeStructAdapter)))(t || NgbTimeStructAdapter);\n };\n }();\n\n NgbTimeStructAdapter.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbTimeStructAdapter,\n factory: NgbTimeStructAdapter.ɵfac\n });\n return NgbTimeStructAdapter;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nfunction NGB_TIMEPICKER_I18N_FACTORY(locale) {\n return new NgbTimepickerI18nDefault(locale);\n}\n/**\n * Type of the service supplying day periods (for example, 'AM' and 'PM') to NgbTimepicker component.\n * The default implementation of this service honors the Angular locale, and uses the registered locale data,\n * as explained in the Angular i18n guide.\n */\n\n\nlet NgbTimepickerI18n = /*#__PURE__*/(() => {\n class NgbTimepickerI18n {}\n\n NgbTimepickerI18n.ɵfac = function NgbTimepickerI18n_Factory(t) {\n return new (t || NgbTimepickerI18n)();\n };\n\n NgbTimepickerI18n.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbTimepickerI18n,\n factory: function NgbTimepickerI18n_Factory(t) {\n let r = null;\n\n if (t) {\n r = new t();\n } else {\n r = NGB_TIMEPICKER_I18N_FACTORY(i0.ɵɵinject(LOCALE_ID));\n }\n\n return r;\n },\n providedIn: 'root'\n });\n return NgbTimepickerI18n;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nlet NgbTimepickerI18nDefault = /*#__PURE__*/(() => {\n class NgbTimepickerI18nDefault extends NgbTimepickerI18n {\n constructor(locale) {\n super();\n this._periods = getLocaleDayPeriods(locale, FormStyle.Standalone, TranslationWidth.Narrow);\n }\n\n getMorningPeriod() {\n return this._periods[0];\n }\n\n getAfternoonPeriod() {\n return this._periods[1];\n }\n\n }\n\n NgbTimepickerI18nDefault.ɵfac = function NgbTimepickerI18nDefault_Factory(t) {\n return new (t || NgbTimepickerI18nDefault)(i0.ɵɵinject(LOCALE_ID));\n };\n\n NgbTimepickerI18nDefault.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbTimepickerI18nDefault,\n factory: NgbTimepickerI18nDefault.ɵfac\n });\n return NgbTimepickerI18nDefault;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nconst FILTER_REGEX = /[^0-9]/g;\n/**\n * A directive that helps with wth picking hours, minutes and seconds.\n */\n\nlet NgbTimepicker = /*#__PURE__*/(() => {\n class NgbTimepicker {\n constructor(_config, _ngbTimeAdapter, _cd, i18n) {\n this._config = _config;\n this._ngbTimeAdapter = _ngbTimeAdapter;\n this._cd = _cd;\n this.i18n = i18n;\n\n this.onChange = _ => {};\n\n this.onTouched = () => {};\n\n this.meridian = _config.meridian;\n this.spinners = _config.spinners;\n this.seconds = _config.seconds;\n this.hourStep = _config.hourStep;\n this.minuteStep = _config.minuteStep;\n this.secondStep = _config.secondStep;\n this.disabled = _config.disabled;\n this.readonlyInputs = _config.readonlyInputs;\n this.size = _config.size;\n }\n /**\n * The number of hours to add/subtract when clicking hour spinners.\n */\n\n\n set hourStep(step) {\n this._hourStep = isInteger(step) ? step : this._config.hourStep;\n }\n\n get hourStep() {\n return this._hourStep;\n }\n /**\n * The number of minutes to add/subtract when clicking minute spinners.\n */\n\n\n set minuteStep(step) {\n this._minuteStep = isInteger(step) ? step : this._config.minuteStep;\n }\n\n get minuteStep() {\n return this._minuteStep;\n }\n /**\n * The number of seconds to add/subtract when clicking second spinners.\n */\n\n\n set secondStep(step) {\n this._secondStep = isInteger(step) ? step : this._config.secondStep;\n }\n\n get secondStep() {\n return this._secondStep;\n }\n\n writeValue(value) {\n const structValue = this._ngbTimeAdapter.fromModel(value);\n\n this.model = structValue ? new NgbTime(structValue.hour, structValue.minute, structValue.second) : new NgbTime();\n\n if (!this.seconds && (!structValue || !isNumber(structValue.second))) {\n this.model.second = 0;\n }\n\n this._cd.markForCheck();\n }\n\n registerOnChange(fn) {\n this.onChange = fn;\n }\n\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n }\n\n changeHour(step) {\n this.model.changeHour(step);\n this.propagateModelChange();\n }\n\n changeMinute(step) {\n this.model.changeMinute(step);\n this.propagateModelChange();\n }\n\n changeSecond(step) {\n this.model.changeSecond(step);\n this.propagateModelChange();\n }\n\n updateHour(newVal) {\n const isPM = this.model.hour >= 12;\n const enteredHour = toInteger(newVal);\n\n if (this.meridian && (isPM && enteredHour < 12 || !isPM && enteredHour === 12)) {\n this.model.updateHour(enteredHour + 12);\n } else {\n this.model.updateHour(enteredHour);\n }\n\n this.propagateModelChange();\n }\n\n updateMinute(newVal) {\n this.model.updateMinute(toInteger(newVal));\n this.propagateModelChange();\n }\n\n updateSecond(newVal) {\n this.model.updateSecond(toInteger(newVal));\n this.propagateModelChange();\n }\n\n toggleMeridian() {\n if (this.meridian) {\n this.changeHour(12);\n }\n }\n\n formatInput(input) {\n input.value = input.value.replace(FILTER_REGEX, '');\n }\n\n formatHour(value) {\n if (isNumber(value)) {\n if (this.meridian) {\n return padNumber(value % 12 === 0 ? 12 : value % 12);\n } else {\n return padNumber(value % 24);\n }\n } else {\n return padNumber(NaN);\n }\n }\n\n formatMinSec(value) {\n return padNumber(isNumber(value) ? value : NaN);\n }\n\n handleBlur() {\n this.onTouched();\n }\n\n get isSmallSize() {\n return this.size === 'small';\n }\n\n get isLargeSize() {\n return this.size === 'large';\n }\n\n ngOnChanges(changes) {\n if (changes['seconds'] && !this.seconds && this.model && !isNumber(this.model.second)) {\n this.model.second = 0;\n this.propagateModelChange(false);\n }\n }\n\n propagateModelChange(touched = true) {\n if (touched) {\n this.onTouched();\n }\n\n if (this.model.isValid(this.seconds)) {\n this.onChange(this._ngbTimeAdapter.toModel({\n hour: this.model.hour,\n minute: this.model.minute,\n second: this.model.second\n }));\n } else {\n this.onChange(this._ngbTimeAdapter.toModel(null));\n }\n }\n\n }\n\n NgbTimepicker.ɵfac = function NgbTimepicker_Factory(t) {\n return new (t || NgbTimepicker)(i0.ɵɵdirectiveInject(NgbTimepickerConfig), i0.ɵɵdirectiveInject(NgbTimeAdapter), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(NgbTimepickerI18n));\n };\n\n NgbTimepicker.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: NgbTimepicker,\n selectors: [[\"ngb-timepicker\"]],\n inputs: {\n meridian: \"meridian\",\n spinners: \"spinners\",\n seconds: \"seconds\",\n hourStep: \"hourStep\",\n minuteStep: \"minuteStep\",\n secondStep: \"secondStep\",\n readonlyInputs: \"readonlyInputs\",\n size: \"size\"\n },\n features: [i0.ɵɵProvidersFeature([{\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgbTimepicker),\n multi: true\n }]), i0.ɵɵNgOnChangesFeature],\n decls: 16,\n vars: 25,\n consts: function () {\n let i18n_57;\n\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS_58 = goog.getMsg(\"HH\");\n i18n_57 = MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS_58;\n } else {\n i18n_57 = $localize`:@@ngb.timepicker.HH:HH`;\n }\n\n let i18n_59;\n\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS_60 = goog.getMsg(\"Hours\");\n i18n_59 = MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS_60;\n } else {\n i18n_59 = $localize`:@@ngb.timepicker.hours:Hours`;\n }\n\n let i18n_61;\n\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS_62 = goog.getMsg(\"MM\");\n i18n_61 = MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS_62;\n } else {\n i18n_61 = $localize`:@@ngb.timepicker.MM:MM`;\n }\n\n let i18n_63;\n\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS_64 = goog.getMsg(\"Minutes\");\n i18n_63 = MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS_64;\n } else {\n i18n_63 = $localize`:@@ngb.timepicker.minutes:Minutes`;\n }\n\n let i18n_65;\n\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS__66 = goog.getMsg(\"Increment hours\");\n i18n_65 = MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS__66;\n } else {\n i18n_65 = $localize`:@@ngb.timepicker.increment-hours:Increment hours`;\n }\n\n let i18n_67;\n\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS__68 = goog.getMsg(\"Decrement hours\");\n i18n_67 = MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS__68;\n } else {\n i18n_67 = $localize`:@@ngb.timepicker.decrement-hours:Decrement hours`;\n }\n\n let i18n_69;\n\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS__70 = goog.getMsg(\"Increment minutes\");\n i18n_69 = MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS__70;\n } else {\n i18n_69 = $localize`:@@ngb.timepicker.increment-minutes:Increment minutes`;\n }\n\n let i18n_71;\n\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS__72 = goog.getMsg(\"Decrement minutes\");\n i18n_71 = MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS__72;\n } else {\n i18n_71 = $localize`:@@ngb.timepicker.decrement-minutes:Decrement minutes`;\n }\n\n let i18n_73;\n\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS__74 = goog.getMsg(\"SS\");\n i18n_73 = MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS__74;\n } else {\n i18n_73 = $localize`:@@ngb.timepicker.SS:SS`;\n }\n\n let i18n_75;\n\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS__76 = goog.getMsg(\"Seconds\");\n i18n_75 = MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS__76;\n } else {\n i18n_75 = $localize`:@@ngb.timepicker.seconds:Seconds`;\n }\n\n let i18n_77;\n\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS___78 = goog.getMsg(\"Increment seconds\");\n i18n_77 = MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS___78;\n } else {\n i18n_77 = $localize`:@@ngb.timepicker.increment-seconds:Increment seconds`;\n }\n\n let i18n_79;\n\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS___80 = goog.getMsg(\"Decrement seconds\");\n i18n_79 = MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS___80;\n } else {\n i18n_79 = $localize`:@@ngb.timepicker.decrement-seconds:Decrement seconds`;\n }\n\n let i18n_81;\n\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS___82 = goog.getMsg(\"{$interpolation}\", {\n \"interpolation\": \"\\uFFFD0\\uFFFD\"\n });\n i18n_81 = MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS___82;\n } else {\n i18n_81 = $localize`:@@ngb.timepicker.PM:${\"\\uFFFD0\\uFFFD\"}:INTERPOLATION:`;\n }\n\n let i18n_83;\n\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS___84 = goog.getMsg(\"{$interpolation}\", {\n \"interpolation\": \"\\uFFFD0\\uFFFD\"\n });\n i18n_83 = MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS___84;\n } else {\n i18n_83 = $localize`:@@ngb.timepicker.AM:${\"\\uFFFD0\\uFFFD\"}:INTERPOLATION:`;\n }\n\n return [[3, \"disabled\"], [1, \"ngb-tp\"], [1, \"ngb-tp-input-container\", \"ngb-tp-hour\"], [\"tabindex\", \"-1\", \"type\", \"button\", \"class\", \"btn btn-link\", 3, \"btn-sm\", \"btn-lg\", \"disabled\", \"click\", 4, \"ngIf\"], [\"type\", \"text\", \"maxlength\", \"2\", \"inputmode\", \"numeric\", \"placeholder\", i18n_57, \"aria-label\", i18n_59, 1, \"ngb-tp-input\", \"form-control\", 3, \"value\", \"readOnly\", \"disabled\", \"change\", \"blur\", \"input\", \"keydown.ArrowUp\", \"keydown.ArrowDown\"], [1, \"ngb-tp-spacer\"], [1, \"ngb-tp-input-container\", \"ngb-tp-minute\"], [\"type\", \"text\", \"maxlength\", \"2\", \"inputmode\", \"numeric\", \"placeholder\", i18n_61, \"aria-label\", i18n_63, 1, \"ngb-tp-input\", \"form-control\", 3, \"value\", \"readOnly\", \"disabled\", \"change\", \"blur\", \"input\", \"keydown.ArrowUp\", \"keydown.ArrowDown\"], [\"class\", \"ngb-tp-spacer\", 4, \"ngIf\"], [\"class\", \"ngb-tp-input-container ngb-tp-second\", 4, \"ngIf\"], [\"class\", \"ngb-tp-meridian\", 4, \"ngIf\"], [\"tabindex\", \"-1\", \"type\", \"button\", 1, \"btn\", \"btn-link\", 3, \"disabled\", \"click\"], [1, \"chevron\", \"ngb-tp-chevron\"], [1, \"visually-hidden\"], i18n_65, [1, \"chevron\", \"ngb-tp-chevron\", \"bottom\"], i18n_67, i18n_69, i18n_71, [1, \"ngb-tp-input-container\", \"ngb-tp-second\"], [\"type\", \"text\", \"maxlength\", \"2\", \"inputmode\", \"numeric\", \"placeholder\", i18n_73, \"aria-label\", i18n_75, 1, \"ngb-tp-input\", \"form-control\", 3, \"value\", \"readOnly\", \"disabled\", \"change\", \"blur\", \"input\", \"keydown.ArrowUp\", \"keydown.ArrowDown\"], i18n_77, i18n_79, [1, \"ngb-tp-meridian\"], [\"type\", \"button\", 1, \"btn\", \"btn-outline-primary\", 3, \"disabled\", \"click\"], [4, \"ngIf\", \"ngIfElse\"], [\"am\", \"\"], i18n_81, i18n_83];\n },\n template: function NgbTimepicker_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"fieldset\", 0)(1, \"div\", 1)(2, \"div\", 2);\n i0.ɵɵtemplate(3, NgbTimepicker_button_3_Template, 4, 7, \"button\", 3);\n i0.ɵɵelementStart(4, \"input\", 4);\n i0.ɵɵlistener(\"change\", function NgbTimepicker_Template_input_change_4_listener($event) {\n return ctx.updateHour($event.target.value);\n })(\"blur\", function NgbTimepicker_Template_input_blur_4_listener() {\n return ctx.handleBlur();\n })(\"input\", function NgbTimepicker_Template_input_input_4_listener($event) {\n return ctx.formatInput($event.target);\n })(\"keydown.ArrowUp\", function NgbTimepicker_Template_input_keydown_ArrowUp_4_listener($event) {\n ctx.changeHour(ctx.hourStep);\n return $event.preventDefault();\n })(\"keydown.ArrowDown\", function NgbTimepicker_Template_input_keydown_ArrowDown_4_listener($event) {\n ctx.changeHour(-ctx.hourStep);\n return $event.preventDefault();\n });\n i0.ɵɵelementEnd();\n i0.ɵɵtemplate(5, NgbTimepicker_button_5_Template, 4, 7, \"button\", 3);\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(6, \"div\", 5);\n i0.ɵɵtext(7, \":\");\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(8, \"div\", 6);\n i0.ɵɵtemplate(9, NgbTimepicker_button_9_Template, 4, 7, \"button\", 3);\n i0.ɵɵelementStart(10, \"input\", 7);\n i0.ɵɵlistener(\"change\", function NgbTimepicker_Template_input_change_10_listener($event) {\n return ctx.updateMinute($event.target.value);\n })(\"blur\", function NgbTimepicker_Template_input_blur_10_listener() {\n return ctx.handleBlur();\n })(\"input\", function NgbTimepicker_Template_input_input_10_listener($event) {\n return ctx.formatInput($event.target);\n })(\"keydown.ArrowUp\", function NgbTimepicker_Template_input_keydown_ArrowUp_10_listener($event) {\n ctx.changeMinute(ctx.minuteStep);\n return $event.preventDefault();\n })(\"keydown.ArrowDown\", function NgbTimepicker_Template_input_keydown_ArrowDown_10_listener($event) {\n ctx.changeMinute(-ctx.minuteStep);\n return $event.preventDefault();\n });\n i0.ɵɵelementEnd();\n i0.ɵɵtemplate(11, NgbTimepicker_button_11_Template, 4, 7, \"button\", 3);\n i0.ɵɵelementEnd();\n i0.ɵɵtemplate(12, NgbTimepicker_div_12_Template, 2, 0, \"div\", 8);\n i0.ɵɵtemplate(13, NgbTimepicker_div_13_Template, 4, 9, \"div\", 9);\n i0.ɵɵtemplate(14, NgbTimepicker_div_14_Template, 1, 0, \"div\", 8);\n i0.ɵɵtemplate(15, NgbTimepicker_div_15_Template, 5, 9, \"div\", 10);\n i0.ɵɵelementEnd()();\n }\n\n if (rf & 2) {\n i0.ɵɵclassProp(\"disabled\", ctx.disabled);\n i0.ɵɵproperty(\"disabled\", ctx.disabled);\n i0.ɵɵadvance(3);\n i0.ɵɵproperty(\"ngIf\", ctx.spinners);\n i0.ɵɵadvance(1);\n i0.ɵɵclassProp(\"form-control-sm\", ctx.isSmallSize)(\"form-control-lg\", ctx.isLargeSize);\n i0.ɵɵproperty(\"value\", ctx.formatHour(ctx.model == null ? null : ctx.model.hour))(\"readOnly\", ctx.readonlyInputs)(\"disabled\", ctx.disabled);\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngIf\", ctx.spinners);\n i0.ɵɵadvance(4);\n i0.ɵɵproperty(\"ngIf\", ctx.spinners);\n i0.ɵɵadvance(1);\n i0.ɵɵclassProp(\"form-control-sm\", ctx.isSmallSize)(\"form-control-lg\", ctx.isLargeSize);\n i0.ɵɵproperty(\"value\", ctx.formatMinSec(ctx.model == null ? null : ctx.model.minute))(\"readOnly\", ctx.readonlyInputs)(\"disabled\", ctx.disabled);\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngIf\", ctx.spinners);\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngIf\", ctx.seconds);\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngIf\", ctx.seconds);\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngIf\", ctx.meridian);\n i0.ɵɵadvance(1);\n i0.ɵɵproperty(\"ngIf\", ctx.meridian);\n }\n },\n directives: [i2.NgIf],\n styles: [\"ngb-timepicker{font-size:1rem}.ngb-tp{display:flex;align-items:center}.ngb-tp-input-container{width:4em}.ngb-tp-chevron:before{border-style:solid;border-width:.29em .29em 0 0;content:\\\"\\\";display:inline-block;height:.69em;left:.05em;position:relative;top:.15em;transform:rotate(-45deg);vertical-align:middle;width:.69em}.ngb-tp-chevron.bottom:before{top:-.3em;transform:rotate(135deg)}.ngb-tp-input{text-align:center}.ngb-tp-hour,.ngb-tp-minute,.ngb-tp-second,.ngb-tp-meridian{display:flex;flex-direction:column;align-items:center;justify-content:space-around}.ngb-tp-spacer{width:1em;text-align:center}\\n\"],\n encapsulation: 2\n });\n return NgbTimepicker;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nlet NgbTimepickerModule = /*#__PURE__*/(() => {\n class NgbTimepickerModule {}\n\n NgbTimepickerModule.ɵfac = function NgbTimepickerModule_Factory(t) {\n return new (t || NgbTimepickerModule)();\n };\n\n NgbTimepickerModule.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: NgbTimepickerModule\n });\n NgbTimepickerModule.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [[CommonModule]]\n });\n return NgbTimepickerModule;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nconst ngbToastFadeInTransition = (element, animation) => {\n const {\n classList\n } = element;\n\n if (!animation) {\n classList.add('show');\n return;\n }\n\n classList.remove('hide');\n reflow(element);\n classList.add('showing');\n return () => {\n classList.remove('showing');\n classList.add('show');\n };\n};\n\nconst ngbToastFadeOutTransition = ({\n classList\n}) => {\n classList.remove('show');\n return () => {\n classList.add('hide');\n };\n};\n/**\n * Configuration service for the NgbToast component. You can inject this service, typically in your root component,\n * and customize the values of its properties in order to provide default values for all the toasts used in the\n * application.\n *\n * @since 5.0.0\n */\n\n\nlet NgbToastConfig = /*#__PURE__*/(() => {\n class NgbToastConfig {\n constructor(_ngbConfig) {\n this._ngbConfig = _ngbConfig;\n this.autohide = true;\n this.delay = 5000;\n this.ariaLive = 'polite';\n }\n\n get animation() {\n return this._animation === undefined ? this._ngbConfig.animation : this._animation;\n }\n\n set animation(animation) {\n this._animation = animation;\n }\n\n }\n\n NgbToastConfig.ɵfac = function NgbToastConfig_Factory(t) {\n return new (t || NgbToastConfig)(i0.ɵɵinject(NgbConfig));\n };\n\n NgbToastConfig.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbToastConfig,\n factory: NgbToastConfig.ɵfac,\n providedIn: 'root'\n });\n return NgbToastConfig;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * This directive allows the usage of HTML markup or other directives\n * inside of the toast's header.\n *\n * @since 5.0.0\n */\n\n\nlet NgbToastHeader = /*#__PURE__*/(() => {\n class NgbToastHeader {}\n\n NgbToastHeader.ɵfac = function NgbToastHeader_Factory(t) {\n return new (t || NgbToastHeader)();\n };\n\n NgbToastHeader.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbToastHeader,\n selectors: [[\"\", \"ngbToastHeader\", \"\"]]\n });\n return NgbToastHeader;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Toasts provide feedback messages as notifications to the user.\n * Goal is to mimic the push notifications available both on mobile and desktop operating systems.\n *\n * @since 5.0.0\n */\n\n\nlet NgbToast = /*#__PURE__*/(() => {\n class NgbToast {\n constructor(ariaLive, config, _zone, _element) {\n this.ariaLive = ariaLive;\n this._zone = _zone;\n this._element = _element;\n /**\n * A template like `<ng-template ngbToastHeader></ng-template>` can be\n * used in the projected content to allow markup usage.\n */\n\n this.contentHeaderTpl = null;\n /**\n * An event fired after the animation triggered by calling `.show()` method has finished.\n *\n * @since 8.0.0\n */\n\n this.shown = new EventEmitter();\n /**\n * An event fired after the animation triggered by calling `.hide()` method has finished.\n *\n * It can only occur in 2 different scenarios:\n * - `autohide` timeout fires\n * - user clicks on a closing cross\n *\n * Additionally this output is purely informative. The toast won't be removed from DOM automatically, it's up\n * to the user to take care of that.\n *\n * @since 8.0.0\n */\n\n this.hidden = new EventEmitter();\n\n if (this.ariaLive == null) {\n this.ariaLive = config.ariaLive;\n }\n\n this.delay = config.delay;\n this.autohide = config.autohide;\n this.animation = config.animation;\n }\n\n ngAfterContentInit() {\n this._zone.onStable.asObservable().pipe(take(1)).subscribe(() => {\n this._init();\n\n this.show();\n });\n }\n\n ngOnChanges(changes) {\n if ('autohide' in changes) {\n this._clearTimeout();\n\n this._init();\n }\n }\n /**\n * Triggers toast closing programmatically.\n *\n * The returned observable will emit and be completed once the closing transition has finished.\n * If the animations are turned off this happens synchronously.\n *\n * Alternatively you could listen or subscribe to the `(hidden)` output\n *\n * @since 8.0.0\n */\n\n\n hide() {\n this._clearTimeout();\n\n const transition = ngbRunTransition(this._zone, this._element.nativeElement, ngbToastFadeOutTransition, {\n animation: this.animation,\n runningTransition: 'stop'\n });\n transition.subscribe(() => {\n this.hidden.emit();\n });\n return transition;\n }\n /**\n * Triggers toast opening programmatically.\n *\n * The returned observable will emit and be completed once the opening transition has finished.\n * If the animations are turned off this happens synchronously.\n *\n * Alternatively you could listen or subscribe to the `(shown)` output\n *\n * @since 8.0.0\n */\n\n\n show() {\n const transition = ngbRunTransition(this._zone, this._element.nativeElement, ngbToastFadeInTransition, {\n animation: this.animation,\n runningTransition: 'continue'\n });\n transition.subscribe(() => {\n this.shown.emit();\n });\n return transition;\n }\n\n _init() {\n if (this.autohide && !this._timeoutID) {\n this._timeoutID = setTimeout(() => this.hide(), this.delay);\n }\n }\n\n _clearTimeout() {\n if (this._timeoutID) {\n clearTimeout(this._timeoutID);\n this._timeoutID = null;\n }\n }\n\n }\n\n NgbToast.ɵfac = function NgbToast_Factory(t) {\n return new (t || NgbToast)(i0.ɵɵinjectAttribute('aria-live'), i0.ɵɵdirectiveInject(NgbToastConfig), i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(i0.ElementRef));\n };\n\n NgbToast.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: NgbToast,\n selectors: [[\"ngb-toast\"]],\n contentQueries: function NgbToast_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, NgbToastHeader, 7, TemplateRef);\n }\n\n if (rf & 2) {\n let _t;\n\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.contentHeaderTpl = _t.first);\n }\n },\n hostAttrs: [\"role\", \"alert\", \"aria-atomic\", \"true\", 1, \"toast\"],\n hostVars: 3,\n hostBindings: function NgbToast_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵattribute(\"aria-live\", ctx.ariaLive);\n i0.ɵɵclassProp(\"fade\", ctx.animation);\n }\n },\n inputs: {\n animation: \"animation\",\n delay: \"delay\",\n autohide: \"autohide\",\n header: \"header\"\n },\n outputs: {\n shown: \"shown\",\n hidden: \"hidden\"\n },\n exportAs: [\"ngbToast\"],\n features: [i0.ɵɵNgOnChangesFeature],\n ngContentSelectors: _c3,\n decls: 5,\n vars: 1,\n consts: function () {\n let i18n_85;\n\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS__86 = goog.getMsg(\"Close\");\n i18n_85 = MSG__USERS_RENE_DEV_EUFY_PLUGIN_PUBLISH_PLUGIN_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2015_NG_BOOTSTRAP_MJS__86;\n } else {\n i18n_85 = $localize`:@@ngb.toast.close-aria:Close`;\n }\n\n return [[\"headerTpl\", \"\"], [3, \"ngIf\"], [1, \"toast-body\"], [1, \"me-auto\"], [1, \"toast-header\"], [3, \"ngTemplateOutlet\"], [\"type\", \"button\", \"aria-label\", i18n_85, 1, \"btn-close\", 3, \"click\"]];\n },\n template: function NgbToast_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵtemplate(0, NgbToast_ng_template_0_Template, 2, 1, \"ng-template\", null, 0, i0.ɵɵtemplateRefExtractor);\n i0.ɵɵtemplate(2, NgbToast_ng_template_2_Template, 3, 1, \"ng-template\", 1);\n i0.ɵɵelementStart(3, \"div\", 2);\n i0.ɵɵprojection(4);\n i0.ɵɵelementEnd();\n }\n\n if (rf & 2) {\n i0.ɵɵadvance(2);\n i0.ɵɵproperty(\"ngIf\", ctx.contentHeaderTpl || ctx.header);\n }\n },\n directives: [i2.NgIf, i2.NgTemplateOutlet],\n styles: [\"ngb-toast{display:block}ngb-toast .toast-header .close{margin-left:auto;margin-bottom:.25rem}\\n\"],\n encapsulation: 2\n });\n return NgbToast;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nlet NgbToastModule = /*#__PURE__*/(() => {\n class NgbToastModule {}\n\n NgbToastModule.ɵfac = function NgbToastModule_Factory(t) {\n return new (t || NgbToastModule)();\n };\n\n NgbToastModule.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: NgbToastModule\n });\n NgbToastModule.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [[CommonModule]]\n });\n return NgbToastModule;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A configuration service for the [`NgbTooltip`](#/components/tooltip/api#NgbTooltip) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the tooltips used in the application.\n */\n\n\nlet NgbTooltipConfig = /*#__PURE__*/(() => {\n class NgbTooltipConfig {\n constructor(_ngbConfig) {\n this._ngbConfig = _ngbConfig;\n this.autoClose = true;\n this.placement = 'auto';\n this.triggers = 'hover focus';\n this.disableTooltip = false;\n this.openDelay = 0;\n this.closeDelay = 0;\n }\n\n get animation() {\n return this._animation === undefined ? this._ngbConfig.animation : this._animation;\n }\n\n set animation(animation) {\n this._animation = animation;\n }\n\n }\n\n NgbTooltipConfig.ɵfac = function NgbTooltipConfig_Factory(t) {\n return new (t || NgbTooltipConfig)(i0.ɵɵinject(NgbConfig));\n };\n\n NgbTooltipConfig.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbTooltipConfig,\n factory: NgbTooltipConfig.ɵfac,\n providedIn: 'root'\n });\n return NgbTooltipConfig;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nlet nextId = 0;\nlet NgbTooltipWindow = /*#__PURE__*/(() => {\n class NgbTooltipWindow {}\n\n NgbTooltipWindow.ɵfac = function NgbTooltipWindow_Factory(t) {\n return new (t || NgbTooltipWindow)();\n };\n\n NgbTooltipWindow.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: NgbTooltipWindow,\n selectors: [[\"ngb-tooltip-window\"]],\n hostAttrs: [\"role\", \"tooltip\"],\n hostVars: 5,\n hostBindings: function NgbTooltipWindow_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵhostProperty(\"id\", ctx.id);\n i0.ɵɵclassMap(\"tooltip\" + (ctx.tooltipClass ? \" \" + ctx.tooltipClass : \"\"));\n i0.ɵɵclassProp(\"fade\", ctx.animation);\n }\n },\n inputs: {\n animation: \"animation\",\n id: \"id\",\n tooltipClass: \"tooltipClass\"\n },\n ngContentSelectors: _c3,\n decls: 3,\n vars: 0,\n consts: [[\"data-popper-arrow\", \"\", 1, \"tooltip-arrow\"], [1, \"tooltip-inner\"]],\n template: function NgbTooltipWindow_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵelement(0, \"div\", 0);\n i0.ɵɵelementStart(1, \"div\", 1);\n i0.ɵɵprojection(2);\n i0.ɵɵelementEnd();\n }\n },\n encapsulation: 2,\n changeDetection: 0\n });\n return NgbTooltipWindow;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A lightweight and extensible directive for fancy tooltip creation.\n */\n\n\nlet NgbTooltip = /*#__PURE__*/(() => {\n class NgbTooltip {\n constructor(_elementRef, _renderer, injector, viewContainerRef, config, _ngZone, _document, _changeDetector, applicationRef) {\n this._elementRef = _elementRef;\n this._renderer = _renderer;\n this._ngZone = _ngZone;\n this._document = _document;\n this._changeDetector = _changeDetector;\n /**\n * An event emitted when the tooltip opening animation has finished. Contains no payload.\n */\n\n this.shown = new EventEmitter();\n /**\n * An event emitted when the tooltip closing animation has finished. Contains no payload.\n */\n\n this.hidden = new EventEmitter();\n this._ngbTooltipWindowId = `ngb-tooltip-${nextId++}`;\n this._windowRef = null;\n this._positioning = ngbPositioning();\n this.animation = config.animation;\n this.autoClose = config.autoClose;\n this.placement = config.placement;\n this.triggers = config.triggers;\n this.container = config.container;\n this.disableTooltip = config.disableTooltip;\n this.tooltipClass = config.tooltipClass;\n this.openDelay = config.openDelay;\n this.closeDelay = config.closeDelay;\n this._popupService = new PopupService(NgbTooltipWindow, injector, viewContainerRef, _renderer, this._ngZone, applicationRef);\n }\n /**\n * The string content or a `TemplateRef` for the content to be displayed in the tooltip.\n *\n * If the content if falsy, the tooltip won't open.\n */\n\n\n set ngbTooltip(value) {\n this._ngbTooltip = value;\n\n if (!value && this._windowRef) {\n this.close();\n }\n }\n\n get ngbTooltip() {\n return this._ngbTooltip;\n }\n /**\n * Opens the tooltip.\n *\n * This is considered to be a \"manual\" triggering.\n * The `context` is an optional value to be injected into the tooltip template when it is created.\n */\n\n\n open(context) {\n if (!this._windowRef && this._ngbTooltip && !this.disableTooltip) {\n const {\n windowRef,\n transition$\n } = this._popupService.open(this._ngbTooltip, context, this.animation);\n\n this._windowRef = windowRef;\n this._windowRef.instance.animation = this.animation;\n this._windowRef.instance.tooltipClass = this.tooltipClass;\n this._windowRef.instance.id = this._ngbTooltipWindowId;\n\n this._renderer.setAttribute(this._elementRef.nativeElement, 'aria-describedby', this._ngbTooltipWindowId);\n\n if (this.container === 'body') {\n this._document.querySelector(this.container).appendChild(this._windowRef.location.nativeElement);\n } // We need to detect changes, because we don't know where .open() might be called from.\n // Ex. opening tooltip from one of lifecycle hooks that run after the CD\n // (say from ngAfterViewInit) will result in 'ExpressionHasChanged' exception\n\n\n this._windowRef.changeDetectorRef.detectChanges(); // We need to mark for check, because tooltip won't work inside the OnPush component.\n // Ex. when we use expression like `{{ tooltip.isOpen() : 'opened' : 'closed' }}`\n // inside the template of an OnPush component and we change the tooltip from\n // open -> closed, the expression in question won't be updated unless we explicitly\n // mark the parent component to be checked.\n\n\n this._windowRef.changeDetectorRef.markForCheck(); // Setting up popper and scheduling updates when zone is stable\n\n\n this._ngZone.runOutsideAngular(() => {\n this._positioning.createPopper({\n hostElement: this._elementRef.nativeElement,\n targetElement: this._windowRef.location.nativeElement,\n placement: this.placement,\n appendToBody: this.container === 'body',\n baseClass: 'bs-tooltip'\n });\n\n Promise.resolve().then(() => {\n // This update is required for correct arrow placement\n this._positioning.update();\n\n this._zoneSubscription = this._ngZone.onStable.subscribe(() => this._positioning.update());\n });\n });\n\n ngbAutoClose(this._ngZone, this._document, this.autoClose, () => this.close(), this.hidden, [this._windowRef.location.nativeElement]);\n transition$.subscribe(() => this.shown.emit());\n }\n }\n /**\n * Closes the tooltip.\n *\n * This is considered to be a \"manual\" triggering of the tooltip.\n */\n\n\n close(animation = this.animation) {\n if (this._windowRef != null) {\n this._renderer.removeAttribute(this._elementRef.nativeElement, 'aria-describedby');\n\n this._popupService.close(animation).subscribe(() => {\n var _a;\n\n this._windowRef = null;\n\n this._positioning.destroy();\n\n (_a = this._zoneSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();\n this.hidden.emit();\n\n this._changeDetector.markForCheck();\n });\n }\n }\n /**\n * Toggles the tooltip.\n *\n * This is considered to be a \"manual\" triggering of the tooltip.\n */\n\n\n toggle() {\n if (this._windowRef) {\n this.close();\n } else {\n this.open();\n }\n }\n /**\n * Returns `true`, if the popover is currently shown.\n */\n\n\n isOpen() {\n return this._windowRef != null;\n }\n\n ngOnInit() {\n this._unregisterListenersFn = listenToTriggers(this._renderer, this._elementRef.nativeElement, this.triggers, this.isOpen.bind(this), this.open.bind(this), this.close.bind(this), +this.openDelay, +this.closeDelay);\n }\n\n ngOnChanges({\n tooltipClass\n }) {\n if (tooltipClass && this.isOpen()) {\n this._windowRef.instance.tooltipClass = tooltipClass.currentValue;\n }\n }\n\n ngOnDestroy() {\n var _a;\n\n this.close(false); // This check is needed as it might happen that ngOnDestroy is called before ngOnInit\n // under certain conditions, see: https://github.com/ng-bootstrap/ng-bootstrap/issues/2199\n\n (_a = this._unregisterListenersFn) === null || _a === void 0 ? void 0 : _a.call(this);\n }\n\n }\n\n NgbTooltip.ɵfac = function NgbTooltip_Factory(t) {\n return new (t || NgbTooltip)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.Renderer2), i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(NgbTooltipConfig), i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(DOCUMENT), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i0.ApplicationRef));\n };\n\n NgbTooltip.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbTooltip,\n selectors: [[\"\", \"ngbTooltip\", \"\"]],\n inputs: {\n animation: \"animation\",\n autoClose: \"autoClose\",\n placement: \"placement\",\n triggers: \"triggers\",\n container: \"container\",\n disableTooltip: \"disableTooltip\",\n tooltipClass: \"tooltipClass\",\n openDelay: \"openDelay\",\n closeDelay: \"closeDelay\",\n ngbTooltip: \"ngbTooltip\"\n },\n outputs: {\n shown: \"shown\",\n hidden: \"hidden\"\n },\n exportAs: [\"ngbTooltip\"],\n features: [i0.ɵɵNgOnChangesFeature]\n });\n return NgbTooltip;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nlet NgbTooltipModule = /*#__PURE__*/(() => {\n class NgbTooltipModule {}\n\n NgbTooltipModule.ɵfac = function NgbTooltipModule_Factory(t) {\n return new (t || NgbTooltipModule)();\n };\n\n NgbTooltipModule.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: NgbTooltipModule\n });\n NgbTooltipModule.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({});\n return NgbTooltipModule;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A component that helps with text highlighting.\n *\n * If splits the `result` text into parts that contain the searched `term` and generates the HTML markup to simplify\n * highlighting:\n *\n * Ex. `result=\"Alaska\"` and `term=\"as\"` will produce `Al<span class=\"ngb-highlight\">as</span>ka`.\n */\n\n\nlet NgbHighlight = /*#__PURE__*/(() => {\n class NgbHighlight {\n constructor() {\n /**\n * The CSS class for `<span>` elements wrapping the `term` inside the `result`.\n */\n this.highlightClass = 'ngb-highlight';\n /**\n * Boolean option to determine if the highlighting should be sensitive to accents or not.\n *\n * This feature is only available for browsers that implement the `String.normalize` function\n * (typically not Internet Explorer).\n * If you want to use this feature in a browser that does not implement `String.normalize`,\n * you will have to include a polyfill in your application (`unorm` for example).\n *\n * @since 9.1.0\n */\n\n this.accentSensitive = true;\n }\n\n ngOnChanges(changes) {\n if (!this.accentSensitive && !String.prototype.normalize) {\n console.warn('The `accentSensitive` input in `ngb-highlight` cannot be set to `false` in a browser ' + 'that does not implement the `String.normalize` function. ' + 'You will have to include a polyfill in your application to use this feature in the current browser.');\n this.accentSensitive = true;\n }\n\n const result = toString(this.result);\n const terms = Array.isArray(this.term) ? this.term : [this.term];\n\n const prepareTerm = term => this.accentSensitive ? term : removeAccents(term);\n\n const escapedTerms = terms.map(term => regExpEscape(prepareTerm(toString(term)))).filter(term => term);\n const toSplit = this.accentSensitive ? result : removeAccents(result);\n const parts = escapedTerms.length ? toSplit.split(new RegExp(`(${escapedTerms.join('|')})`, 'gmi')) : [result];\n\n if (this.accentSensitive) {\n this.parts = parts;\n } else {\n let offset = 0;\n this.parts = parts.map(part => result.substring(offset, offset += part.length));\n }\n }\n\n }\n\n NgbHighlight.ɵfac = function NgbHighlight_Factory(t) {\n return new (t || NgbHighlight)();\n };\n\n NgbHighlight.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: NgbHighlight,\n selectors: [[\"ngb-highlight\"]],\n inputs: {\n highlightClass: \"highlightClass\",\n result: \"result\",\n term: \"term\",\n accentSensitive: \"accentSensitive\"\n },\n features: [i0.ɵɵNgOnChangesFeature],\n decls: 1,\n vars: 1,\n consts: [[\"ngFor\", \"\", 3, \"ngForOf\"], [3, \"class\", 4, \"ngIf\", \"ngIfElse\"], [\"even\", \"\"]],\n template: function NgbHighlight_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtemplate(0, NgbHighlight_ng_template_0_Template, 3, 2, \"ng-template\", 0);\n }\n\n if (rf & 2) {\n i0.ɵɵproperty(\"ngForOf\", ctx.parts);\n }\n },\n directives: [i2.NgForOf, i2.NgIf],\n styles: [\".ngb-highlight{font-weight:700}\\n\"],\n encapsulation: 2,\n changeDetection: 0\n });\n return NgbHighlight;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nlet NgbTypeaheadWindow = /*#__PURE__*/(() => {\n class NgbTypeaheadWindow {\n constructor() {\n this.activeIdx = 0;\n /**\n * Flag indicating if the first row should be active initially\n */\n\n this.focusFirst = true;\n /**\n * A function used to format a given result before display. This function should return a formatted string without any\n * HTML markup\n */\n\n this.formatter = toString;\n /**\n * Event raised when user selects a particular result row\n */\n\n this.selectEvent = new EventEmitter();\n this.activeChangeEvent = new EventEmitter();\n }\n\n hasActive() {\n return this.activeIdx > -1 && this.activeIdx < this.results.length;\n }\n\n getActive() {\n return this.results[this.activeIdx];\n }\n\n markActive(activeIdx) {\n this.activeIdx = activeIdx;\n\n this._activeChanged();\n }\n\n next() {\n if (this.activeIdx === this.results.length - 1) {\n this.activeIdx = this.focusFirst ? (this.activeIdx + 1) % this.results.length : -1;\n } else {\n this.activeIdx++;\n }\n\n this._activeChanged();\n }\n\n prev() {\n if (this.activeIdx < 0) {\n this.activeIdx = this.results.length - 1;\n } else if (this.activeIdx === 0) {\n this.activeIdx = this.focusFirst ? this.results.length - 1 : -1;\n } else {\n this.activeIdx--;\n }\n\n this._activeChanged();\n }\n\n resetActive() {\n this.activeIdx = this.focusFirst ? 0 : -1;\n\n this._activeChanged();\n }\n\n select(item) {\n this.selectEvent.emit(item);\n }\n\n ngOnInit() {\n this.resetActive();\n }\n\n _activeChanged() {\n this.activeChangeEvent.emit(this.activeIdx >= 0 ? this.id + '-' + this.activeIdx : undefined);\n }\n\n }\n\n NgbTypeaheadWindow.ɵfac = function NgbTypeaheadWindow_Factory(t) {\n return new (t || NgbTypeaheadWindow)();\n };\n\n NgbTypeaheadWindow.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: NgbTypeaheadWindow,\n selectors: [[\"ngb-typeahead-window\"]],\n hostAttrs: [\"role\", \"listbox\"],\n hostVars: 3,\n hostBindings: function NgbTypeaheadWindow_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"mousedown\", function NgbTypeaheadWindow_mousedown_HostBindingHandler($event) {\n return $event.preventDefault();\n });\n }\n\n if (rf & 2) {\n i0.ɵɵhostProperty(\"id\", ctx.id);\n i0.ɵɵclassMap(\"dropdown-menu show\" + (ctx.popupClass ? \" \" + ctx.popupClass : \"\"));\n }\n },\n inputs: {\n id: \"id\",\n focusFirst: \"focusFirst\",\n results: \"results\",\n term: \"term\",\n formatter: \"formatter\",\n resultTemplate: \"resultTemplate\",\n popupClass: \"popupClass\"\n },\n outputs: {\n selectEvent: \"select\",\n activeChangeEvent: \"activeChange\"\n },\n exportAs: [\"ngbTypeaheadWindow\"],\n decls: 3,\n vars: 1,\n consts: [[\"rt\", \"\"], [\"ngFor\", \"\", 3, \"ngForOf\"], [3, \"result\", \"term\"], [\"type\", \"button\", \"role\", \"option\", 1, \"dropdown-item\", 3, \"id\", \"mouseenter\", \"click\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"]],\n template: function NgbTypeaheadWindow_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtemplate(0, NgbTypeaheadWindow_ng_template_0_Template, 1, 2, \"ng-template\", null, 0, i0.ɵɵtemplateRefExtractor);\n i0.ɵɵtemplate(2, NgbTypeaheadWindow_ng_template_2_Template, 2, 9, \"ng-template\", 1);\n }\n\n if (rf & 2) {\n i0.ɵɵadvance(2);\n i0.ɵɵproperty(\"ngForOf\", ctx.results);\n }\n },\n directives: [NgbHighlight, i2.NgForOf, i2.NgTemplateOutlet],\n encapsulation: 2\n });\n return NgbTypeaheadWindow;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A configuration service for the [`NgbTypeahead`](#/components/typeahead/api#NgbTypeahead) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the typeaheads used in the application.\n */\n\n\nlet NgbTypeaheadConfig = /*#__PURE__*/(() => {\n class NgbTypeaheadConfig {\n constructor() {\n this.editable = true;\n this.focusFirst = true;\n this.showHint = false;\n this.placement = ['bottom-start', 'bottom-end', 'top-start', 'top-end'];\n }\n\n }\n\n NgbTypeaheadConfig.ɵfac = function NgbTypeaheadConfig_Factory(t) {\n return new (t || NgbTypeaheadConfig)();\n };\n\n NgbTypeaheadConfig.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbTypeaheadConfig,\n factory: NgbTypeaheadConfig.ɵfac,\n providedIn: 'root'\n });\n return NgbTypeaheadConfig;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nconst ARIA_LIVE_DELAY = new InjectionToken('live announcer delay', {\n providedIn: 'root',\n factory: ARIA_LIVE_DELAY_FACTORY\n});\n\nfunction ARIA_LIVE_DELAY_FACTORY() {\n return 100;\n}\n\nfunction getLiveElement(document, lazyCreate = false) {\n let element = document.body.querySelector('#ngb-live');\n\n if (element == null && lazyCreate) {\n element = document.createElement('div');\n element.setAttribute('id', 'ngb-live');\n element.setAttribute('aria-live', 'polite');\n element.setAttribute('aria-atomic', 'true');\n element.classList.add('visually-hidden');\n document.body.appendChild(element);\n }\n\n return element;\n}\n\nlet Live = /*#__PURE__*/(() => {\n class Live {\n constructor(_document, _delay) {\n this._document = _document;\n this._delay = _delay;\n }\n\n ngOnDestroy() {\n const element = getLiveElement(this._document);\n\n if (element) {\n // if exists, it will always be attached to the <body>\n element.parentElement.removeChild(element);\n }\n }\n\n say(message) {\n const element = getLiveElement(this._document, true);\n const delay = this._delay;\n\n if (element != null) {\n element.textContent = '';\n\n const setText = () => element.textContent = message;\n\n if (delay === null) {\n setText();\n } else {\n setTimeout(setText, delay);\n }\n }\n }\n\n }\n\n Live.ɵfac = function Live_Factory(t) {\n return new (t || Live)(i0.ɵɵinject(DOCUMENT), i0.ɵɵinject(ARIA_LIVE_DELAY));\n };\n\n Live.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: Live,\n factory: Live.ɵfac,\n providedIn: 'root'\n });\n return Live;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nlet nextWindowId = 0;\n/**\n * A directive providing a simple way of creating powerful typeaheads from any text input.\n */\n\nlet NgbTypeahead = /*#__PURE__*/(() => {\n class NgbTypeahead {\n constructor(_elementRef, viewContainerRef, _renderer, injector, config, ngZone, _live, _document, _ngZone, _changeDetector, applicationRef) {\n this._elementRef = _elementRef;\n this._renderer = _renderer;\n this._live = _live;\n this._document = _document;\n this._ngZone = _ngZone;\n this._changeDetector = _changeDetector;\n this._subscription = null;\n this._closed$ = new Subject();\n this._inputValueBackup = null;\n this._windowRef = null;\n this._positioning = ngbPositioning();\n /**\n * The value for the `autocomplete` attribute for the `<input>` element.\n *\n * Defaults to `\"off\"` to disable the native browser autocomplete, but you can override it if necessary.\n *\n * @since 2.1.0\n */\n\n this.autocomplete = 'off';\n /**\n * The preferred placement of the typeahead, among the [possible values](#/guides/positioning#api).\n *\n * The default order of preference is `\"bottom-start bottom-end top-start top-end\"`\n *\n * Please see the [positioning overview](#/positioning) for more details.\n */\n\n this.placement = 'bottom-start';\n /**\n * An event emitted right before an item is selected from the result list.\n *\n * Event payload is of type [`NgbTypeaheadSelectItemEvent`](#/components/typeahead/api#NgbTypeaheadSelectItemEvent).\n */\n\n this.selectItem = new EventEmitter();\n this.activeDescendant = null;\n this.popupId = `ngb-typeahead-${nextWindowId++}`;\n\n this._onTouched = () => {};\n\n this._onChange = _ => {};\n\n this.container = config.container;\n this.editable = config.editable;\n this.focusFirst = config.focusFirst;\n this.showHint = config.showHint;\n this.placement = config.placement;\n this._valueChanges = fromEvent(_elementRef.nativeElement, 'input').pipe(map($event => $event.target.value));\n this._resubscribeTypeahead = new BehaviorSubject(null);\n this._popupService = new PopupService(NgbTypeaheadWindow, injector, viewContainerRef, _renderer, this._ngZone, applicationRef);\n }\n\n ngOnInit() {\n this._subscribeToUserInput();\n }\n\n ngOnChanges({\n ngbTypeahead\n }) {\n if (ngbTypeahead && !ngbTypeahead.firstChange) {\n this._unsubscribeFromUserInput();\n\n this._subscribeToUserInput();\n }\n }\n\n ngOnDestroy() {\n this._closePopup();\n\n this._unsubscribeFromUserInput();\n }\n\n registerOnChange(fn) {\n this._onChange = fn;\n }\n\n registerOnTouched(fn) {\n this._onTouched = fn;\n }\n\n writeValue(value) {\n this._writeInputValue(this._formatItemForInput(value));\n\n if (this.showHint) {\n this._inputValueBackup = value;\n }\n }\n\n setDisabledState(isDisabled) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n /**\n * Dismisses typeahead popup window\n */\n\n\n dismissPopup() {\n if (this.isPopupOpen()) {\n this._resubscribeTypeahead.next(null);\n\n this._closePopup();\n\n if (this.showHint && this._inputValueBackup !== null) {\n this._writeInputValue(this._inputValueBackup);\n }\n\n this._changeDetector.markForCheck();\n }\n }\n /**\n * Returns true if the typeahead popup window is displayed\n */\n\n\n isPopupOpen() {\n return this._windowRef != null;\n }\n\n handleBlur() {\n this._resubscribeTypeahead.next(null);\n\n this._onTouched();\n }\n\n handleKeyDown(event) {\n if (!this.isPopupOpen()) {\n return;\n }\n /* eslint-disable-next-line deprecation/deprecation */\n\n\n switch (event.which) {\n case Key.ArrowDown:\n event.preventDefault();\n\n this._windowRef.instance.next();\n\n this._showHint();\n\n break;\n\n case Key.ArrowUp:\n event.preventDefault();\n\n this._windowRef.instance.prev();\n\n this._showHint();\n\n break;\n\n case Key.Enter:\n case Key.Tab:\n {\n const result = this._windowRef.instance.getActive();\n\n if (isDefined(result)) {\n event.preventDefault();\n event.stopPropagation();\n\n this._selectResult(result);\n }\n\n this._closePopup();\n\n break;\n }\n }\n }\n\n _openPopup() {\n if (!this.isPopupOpen()) {\n this._inputValueBackup = this._elementRef.nativeElement.value;\n\n const {\n windowRef\n } = this._popupService.open();\n\n this._windowRef = windowRef;\n this._windowRef.instance.id = this.popupId;\n\n this._windowRef.instance.selectEvent.subscribe(result => this._selectResultClosePopup(result));\n\n this._windowRef.instance.activeChangeEvent.subscribe(activeId => this.activeDescendant = activeId);\n\n this._windowRef.instance.popupClass = this.popupClass;\n\n if (this.container === 'body') {\n this._renderer.setStyle(this._windowRef.location.nativeElement, 'z-index', '1055');\n\n this._document.querySelector(this.container).appendChild(this._windowRef.location.nativeElement);\n }\n\n this._changeDetector.markForCheck(); // Setting up popper and scheduling updates when zone is stable\n\n\n this._ngZone.runOutsideAngular(() => {\n if (this._windowRef) {\n this._positioning.createPopper({\n hostElement: this._elementRef.nativeElement,\n targetElement: this._windowRef.location.nativeElement,\n placement: this.placement,\n appendToBody: this.container === 'body',\n updatePopperOptions: addPopperOffset([0, 2])\n });\n\n this._zoneSubscription = this._ngZone.onStable.subscribe(() => this._positioning.update());\n }\n });\n\n ngbAutoClose(this._ngZone, this._document, 'outside', () => this.dismissPopup(), this._closed$, [this._elementRef.nativeElement, this._windowRef.location.nativeElement]);\n }\n }\n\n _closePopup() {\n this._popupService.close().subscribe(() => {\n var _a;\n\n this._positioning.destroy();\n\n (_a = this._zoneSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();\n\n this._closed$.next();\n\n this._windowRef = null;\n this.activeDescendant = null;\n });\n }\n\n _selectResult(result) {\n let defaultPrevented = false;\n this.selectItem.emit({\n item: result,\n preventDefault: () => {\n defaultPrevented = true;\n }\n });\n\n this._resubscribeTypeahead.next(null);\n\n if (!defaultPrevented) {\n this.writeValue(result);\n\n this._onChange(result);\n }\n }\n\n _selectResultClosePopup(result) {\n this._selectResult(result);\n\n this._closePopup();\n }\n\n _showHint() {\n var _a;\n\n if (this.showHint && ((_a = this._windowRef) === null || _a === void 0 ? void 0 : _a.instance.hasActive()) && this._inputValueBackup != null) {\n const userInputLowerCase = this._inputValueBackup.toLowerCase();\n\n const formattedVal = this._formatItemForInput(this._windowRef.instance.getActive());\n\n if (userInputLowerCase === formattedVal.substr(0, this._inputValueBackup.length).toLowerCase()) {\n this._writeInputValue(this._inputValueBackup + formattedVal.substr(this._inputValueBackup.length));\n\n this._elementRef.nativeElement['setSelectionRange'].apply(this._elementRef.nativeElement, [this._inputValueBackup.length, formattedVal.length]);\n } else {\n this._writeInputValue(formattedVal);\n }\n }\n }\n\n _formatItemForInput(item) {\n return item != null && this.inputFormatter ? this.inputFormatter(item) : toString(item);\n }\n\n _writeInputValue(value) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'value', toString(value));\n }\n\n _subscribeToUserInput() {\n const results$ = this._valueChanges.pipe(tap(value => {\n this._inputValueBackup = this.showHint ? value : null;\n\n this._onChange(this.editable ? value : undefined);\n }), this.ngbTypeahead ? this.ngbTypeahead : () => of([]));\n\n this._subscription = this._resubscribeTypeahead.pipe(switchMap(() => results$)).subscribe(results => {\n if (!results || results.length === 0) {\n this._closePopup();\n } else {\n this._openPopup();\n\n this._windowRef.instance.focusFirst = this.focusFirst;\n this._windowRef.instance.results = results;\n this._windowRef.instance.term = this._elementRef.nativeElement.value;\n\n if (this.resultFormatter) {\n this._windowRef.instance.formatter = this.resultFormatter;\n }\n\n if (this.resultTemplate) {\n this._windowRef.instance.resultTemplate = this.resultTemplate;\n }\n\n this._windowRef.instance.resetActive(); // The observable stream we are subscribing to might have async steps\n // and if a component containing typeahead is using the OnPush strategy\n // the change detection turn wouldn't be invoked automatically.\n\n\n this._windowRef.changeDetectorRef.detectChanges();\n\n this._showHint();\n } // live announcer\n\n\n const count = results ? results.length : 0;\n\n this._live.say(count === 0 ? 'No results available' : `${count} result${count === 1 ? '' : 's'} available`);\n });\n }\n\n _unsubscribeFromUserInput() {\n if (this._subscription) {\n this._subscription.unsubscribe();\n }\n\n this._subscription = null;\n }\n\n }\n\n NgbTypeahead.ɵfac = function NgbTypeahead_Factory(t) {\n return new (t || NgbTypeahead)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(i0.Renderer2), i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(NgbTypeaheadConfig), i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(Live), i0.ɵɵdirectiveInject(DOCUMENT), i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i0.ApplicationRef));\n };\n\n NgbTypeahead.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbTypeahead,\n selectors: [[\"input\", \"ngbTypeahead\", \"\"]],\n hostAttrs: [\"autocapitalize\", \"off\", \"autocorrect\", \"off\", \"role\", \"combobox\", \"aria-multiline\", \"false\"],\n hostVars: 7,\n hostBindings: function NgbTypeahead_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"blur\", function NgbTypeahead_blur_HostBindingHandler() {\n return ctx.handleBlur();\n })(\"keydown\", function NgbTypeahead_keydown_HostBindingHandler($event) {\n return ctx.handleKeyDown($event);\n });\n }\n\n if (rf & 2) {\n i0.ɵɵhostProperty(\"autocomplete\", ctx.autocomplete);\n i0.ɵɵattribute(\"aria-autocomplete\", ctx.showHint ? \"both\" : \"list\")(\"aria-activedescendant\", ctx.activeDescendant)(\"aria-owns\", ctx.isPopupOpen() ? ctx.popupId : null)(\"aria-expanded\", ctx.isPopupOpen());\n i0.ɵɵclassProp(\"open\", ctx.isPopupOpen());\n }\n },\n inputs: {\n autocomplete: \"autocomplete\",\n container: \"container\",\n editable: \"editable\",\n focusFirst: \"focusFirst\",\n inputFormatter: \"inputFormatter\",\n ngbTypeahead: \"ngbTypeahead\",\n resultFormatter: \"resultFormatter\",\n resultTemplate: \"resultTemplate\",\n showHint: \"showHint\",\n placement: \"placement\",\n popupClass: \"popupClass\"\n },\n outputs: {\n selectItem: \"selectItem\"\n },\n exportAs: [\"ngbTypeahead\"],\n features: [i0.ɵɵProvidersFeature([{\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgbTypeahead),\n multi: true\n }]), i0.ɵɵNgOnChangesFeature]\n });\n return NgbTypeahead;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nlet NgbTypeaheadModule = /*#__PURE__*/(() => {\n class NgbTypeaheadModule {}\n\n NgbTypeaheadModule.ɵfac = function NgbTypeaheadModule_Factory(t) {\n return new (t || NgbTypeaheadModule)();\n };\n\n NgbTypeaheadModule.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: NgbTypeaheadModule\n });\n NgbTypeaheadModule.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [[CommonModule]]\n });\n return NgbTypeaheadModule;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nvar OffcanvasDismissReasons = /*#__PURE__*/(() => {\n (function (OffcanvasDismissReasons) {\n OffcanvasDismissReasons[OffcanvasDismissReasons[\"BACKDROP_CLICK\"] = 0] = \"BACKDROP_CLICK\";\n OffcanvasDismissReasons[OffcanvasDismissReasons[\"ESC\"] = 1] = \"ESC\";\n })(OffcanvasDismissReasons || (OffcanvasDismissReasons = {}));\n\n return OffcanvasDismissReasons;\n})();\nlet NgbOffcanvasBackdrop = /*#__PURE__*/(() => {\n class NgbOffcanvasBackdrop {\n constructor(_el, _zone) {\n this._el = _el;\n this._zone = _zone;\n this.dismissEvent = new EventEmitter();\n }\n\n ngOnInit() {\n this._zone.onStable.asObservable().pipe(take(1)).subscribe(() => {\n ngbRunTransition(this._zone, this._el.nativeElement, (element, animation) => {\n if (animation) {\n reflow(element);\n }\n\n element.classList.add('show');\n }, {\n animation: this.animation,\n runningTransition: 'continue'\n });\n });\n }\n\n hide() {\n return ngbRunTransition(this._zone, this._el.nativeElement, ({\n classList\n }) => classList.remove('show'), {\n animation: this.animation,\n runningTransition: 'stop'\n });\n }\n\n dismiss() {\n this.dismissEvent.emit(OffcanvasDismissReasons.BACKDROP_CLICK);\n }\n\n }\n\n NgbOffcanvasBackdrop.ɵfac = function NgbOffcanvasBackdrop_Factory(t) {\n return new (t || NgbOffcanvasBackdrop)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.NgZone));\n };\n\n NgbOffcanvasBackdrop.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: NgbOffcanvasBackdrop,\n selectors: [[\"ngb-offcanvas-backdrop\"]],\n hostVars: 6,\n hostBindings: function NgbOffcanvasBackdrop_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"mousedown\", function NgbOffcanvasBackdrop_mousedown_HostBindingHandler() {\n return ctx.dismiss();\n });\n }\n\n if (rf & 2) {\n i0.ɵɵclassMap(\"offcanvas-backdrop\" + (ctx.backdropClass ? \" \" + ctx.backdropClass : \"\"));\n i0.ɵɵclassProp(\"show\", !ctx.animation)(\"fade\", ctx.animation);\n }\n },\n inputs: {\n animation: \"animation\",\n backdropClass: \"backdropClass\"\n },\n outputs: {\n dismissEvent: \"dismiss\"\n },\n decls: 0,\n vars: 0,\n template: function NgbOffcanvasBackdrop_Template(rf, ctx) {},\n encapsulation: 2\n });\n return NgbOffcanvasBackdrop;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nlet NgbOffcanvasPanel = /*#__PURE__*/(() => {\n class NgbOffcanvasPanel {\n constructor(_document, _elRef, _zone) {\n this._document = _document;\n this._elRef = _elRef;\n this._zone = _zone;\n this._closed$ = new Subject();\n this._elWithFocus = null; // element that is focused prior to offcanvas opening\n\n this.keyboard = true;\n this.position = 'start';\n this.dismissEvent = new EventEmitter();\n this.shown = new Subject();\n this.hidden = new Subject();\n }\n\n dismiss(reason) {\n this.dismissEvent.emit(reason);\n }\n\n ngOnInit() {\n this._elWithFocus = this._document.activeElement;\n\n this._zone.onStable.asObservable().pipe(take(1)).subscribe(() => {\n this._show();\n });\n }\n\n ngOnDestroy() {\n this._disableEventHandling();\n }\n\n hide() {\n const {\n nativeElement\n } = this._elRef;\n const context = {\n animation: this.animation,\n runningTransition: 'stop'\n }; // TODO when we target Bootstrap 5.2+, the style.visibility handling can be removed, because Bootstrap has improved\n // its CSS\n\n const offcanvasTransition$ = ngbRunTransition(this._zone, this._elRef.nativeElement, element => {\n nativeElement.classList.remove('show');\n return () => element.style.visibility = 'hidden';\n }, context);\n offcanvasTransition$.subscribe(() => {\n this.hidden.next();\n this.hidden.complete();\n });\n\n this._disableEventHandling();\n\n this._restoreFocus();\n\n return offcanvasTransition$;\n }\n\n _show() {\n const context = {\n animation: this.animation,\n runningTransition: 'continue'\n }; // TODO when we target Bootstrap 5.2+, the style.visibility handling can be removed, because Bootstrap has improved\n // its CSS\n\n const offcanvasTransition$ = ngbRunTransition(this._zone, this._elRef.nativeElement, (element, animation) => {\n if (animation) {\n reflow(element);\n }\n\n element.classList.add('show');\n element.style.visibility = 'visible';\n }, context);\n offcanvasTransition$.subscribe(() => {\n this.shown.next();\n this.shown.complete();\n });\n\n this._enableEventHandling();\n\n this._setFocus();\n }\n\n _enableEventHandling() {\n const {\n nativeElement\n } = this._elRef;\n\n this._zone.runOutsideAngular(() => {\n fromEvent(nativeElement, 'keydown').pipe(takeUntil(this._closed$),\n /* eslint-disable-next-line deprecation/deprecation */\n filter(e => e.which === Key.Escape)).subscribe(event => {\n if (this.keyboard) {\n requestAnimationFrame(() => {\n if (!event.defaultPrevented) {\n this._zone.run(() => this.dismiss(OffcanvasDismissReasons.ESC));\n }\n });\n }\n });\n });\n }\n\n _disableEventHandling() {\n this._closed$.next();\n }\n\n _setFocus() {\n const {\n nativeElement\n } = this._elRef;\n\n if (!nativeElement.contains(document.activeElement)) {\n const autoFocusable = nativeElement.querySelector(`[ngbAutofocus]`);\n const firstFocusable = getFocusableBoundaryElements(nativeElement)[0];\n const elementToFocus = autoFocusable || firstFocusable || nativeElement;\n elementToFocus.focus();\n }\n }\n\n _restoreFocus() {\n const body = this._document.body;\n const elWithFocus = this._elWithFocus;\n let elementToFocus;\n\n if (elWithFocus && elWithFocus['focus'] && body.contains(elWithFocus)) {\n elementToFocus = elWithFocus;\n } else {\n elementToFocus = body;\n }\n\n this._zone.runOutsideAngular(() => {\n setTimeout(() => elementToFocus.focus());\n this._elWithFocus = null;\n });\n }\n\n }\n\n NgbOffcanvasPanel.ɵfac = function NgbOffcanvasPanel_Factory(t) {\n return new (t || NgbOffcanvasPanel)(i0.ɵɵdirectiveInject(DOCUMENT), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.NgZone));\n };\n\n NgbOffcanvasPanel.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: NgbOffcanvasPanel,\n selectors: [[\"ngb-offcanvas-panel\"]],\n hostAttrs: [\"role\", \"dialog\", \"tabindex\", \"-1\"],\n hostVars: 5,\n hostBindings: function NgbOffcanvasPanel_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵattribute(\"aria-modal\", true)(\"aria-labelledby\", ctx.ariaLabelledBy)(\"aria-describedby\", ctx.ariaDescribedBy);\n i0.ɵɵclassMap(\"offcanvas offcanvas-\" + ctx.position + (ctx.panelClass ? \" \" + ctx.panelClass : \"\"));\n }\n },\n inputs: {\n animation: \"animation\",\n ariaLabelledBy: \"ariaLabelledBy\",\n ariaDescribedBy: \"ariaDescribedBy\",\n keyboard: \"keyboard\",\n panelClass: \"panelClass\",\n position: \"position\"\n },\n outputs: {\n dismissEvent: \"dismiss\"\n },\n ngContentSelectors: _c3,\n decls: 1,\n vars: 0,\n template: function NgbOffcanvasPanel_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵprojection(0);\n }\n },\n encapsulation: 2\n });\n return NgbOffcanvasPanel;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A reference to the currently opened (active) offcanvas.\n *\n * Instances of this class can be injected into your component passed as offcanvas content.\n * So you can `.close()` or `.dismiss()` the offcanvas window from your component.\n *\n * @since 12.1.0\n */\n\n\nclass NgbActiveOffcanvas {\n /**\n * Closes the offcanvas with an optional `result` value.\n *\n * The `NgbOffcanvasRef.result` promise will be resolved with the provided value.\n */\n close(result) {}\n /**\n * Dismisses the offcanvas with an optional `reason` value.\n *\n * The `NgbOffcanvasRef.result` promise will be rejected with the provided value.\n */\n\n\n dismiss(reason) {}\n\n}\n/**\n * A reference to the newly opened offcanvas returned by the `NgbOffcanvas.open()` method.\n *\n * @since 12.1.0\n */\n\n\nclass NgbOffcanvasRef {\n constructor(_panelCmptRef, _contentRef, _backdropCmptRef, _beforeDismiss) {\n this._panelCmptRef = _panelCmptRef;\n this._contentRef = _contentRef;\n this._backdropCmptRef = _backdropCmptRef;\n this._beforeDismiss = _beforeDismiss;\n this._closed = new Subject();\n this._dismissed = new Subject();\n this._hidden = new Subject();\n\n _panelCmptRef.instance.dismissEvent.subscribe(reason => {\n this.dismiss(reason);\n });\n\n if (_backdropCmptRef) {\n _backdropCmptRef.instance.dismissEvent.subscribe(reason => {\n this.dismiss(reason);\n });\n }\n\n this.result = new Promise((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n this.result.then(null, () => {});\n }\n /**\n * The instance of a component used for the offcanvas content.\n *\n * When a `TemplateRef` is used as the content or when the offcanvas is closed, will return `undefined`.\n */\n\n\n get componentInstance() {\n if (this._contentRef && this._contentRef.componentRef) {\n return this._contentRef.componentRef.instance;\n }\n }\n /**\n * The observable that emits when the offcanvas is closed via the `.close()` method.\n *\n * It will emit the result passed to the `.close()` method.\n */\n\n\n get closed() {\n return this._closed.asObservable().pipe(takeUntil(this._hidden));\n }\n /**\n * The observable that emits when the offcanvas is dismissed via the `.dismiss()` method.\n *\n * It will emit the reason passed to the `.dismissed()` method by the user, or one of the internal\n * reasons like backdrop click or ESC key press.\n */\n\n\n get dismissed() {\n return this._dismissed.asObservable().pipe(takeUntil(this._hidden));\n }\n /**\n * The observable that emits when both offcanvas window and backdrop are closed and animations were finished.\n * At this point offcanvas and backdrop elements will be removed from the DOM tree.\n *\n * This observable will be completed after emitting.\n */\n\n\n get hidden() {\n return this._hidden.asObservable();\n }\n /**\n * The observable that emits when offcanvas is fully visible and animation was finished.\n * The offcanvas DOM element is always available synchronously after calling 'offcanvas.open()' service.\n *\n * This observable will be completed after emitting.\n * It will not emit, if offcanvas is closed before open animation is finished.\n */\n\n\n get shown() {\n return this._panelCmptRef.instance.shown.asObservable();\n }\n /**\n * Closes the offcanvas with an optional `result` value.\n *\n * The `NgbMobalRef.result` promise will be resolved with the provided value.\n */\n\n\n close(result) {\n if (this._panelCmptRef) {\n this._closed.next(result);\n\n this._resolve(result);\n\n this._removeOffcanvasElements();\n }\n }\n\n _dismiss(reason) {\n this._dismissed.next(reason);\n\n this._reject(reason);\n\n this._removeOffcanvasElements();\n }\n /**\n * Dismisses the offcanvas with an optional `reason` value.\n *\n * The `NgbOffcanvasRef.result` promise will be rejected with the provided value.\n */\n\n\n dismiss(reason) {\n if (this._panelCmptRef) {\n if (!this._beforeDismiss) {\n this._dismiss(reason);\n } else {\n const dismiss = this._beforeDismiss();\n\n if (isPromise(dismiss)) {\n dismiss.then(result => {\n if (result !== false) {\n this._dismiss(reason);\n }\n }, () => {});\n } else if (dismiss !== false) {\n this._dismiss(reason);\n }\n }\n }\n }\n\n _removeOffcanvasElements() {\n const panelTransition$ = this._panelCmptRef.instance.hide();\n\n const backdropTransition$ = this._backdropCmptRef ? this._backdropCmptRef.instance.hide() : of(undefined); // hiding panel\n\n panelTransition$.subscribe(() => {\n const {\n nativeElement\n } = this._panelCmptRef.location;\n nativeElement.parentNode.removeChild(nativeElement);\n\n this._panelCmptRef.destroy();\n\n if (this._contentRef && this._contentRef.viewRef) {\n this._contentRef.viewRef.destroy();\n }\n\n this._panelCmptRef = null;\n this._contentRef = null;\n }); // hiding backdrop\n\n backdropTransition$.subscribe(() => {\n if (this._backdropCmptRef) {\n const {\n nativeElement\n } = this._backdropCmptRef.location;\n nativeElement.parentNode.removeChild(nativeElement);\n\n this._backdropCmptRef.destroy();\n\n this._backdropCmptRef = null;\n }\n }); // all done\n\n zip(panelTransition$, backdropTransition$).subscribe(() => {\n this._hidden.next();\n\n this._hidden.complete();\n });\n }\n\n}\n\nlet NgbOffcanvasStack = /*#__PURE__*/(() => {\n class NgbOffcanvasStack {\n constructor(_applicationRef, _injector, _document, _scrollBar, _ngZone) {\n this._applicationRef = _applicationRef;\n this._injector = _injector;\n this._document = _document;\n this._scrollBar = _scrollBar;\n this._ngZone = _ngZone;\n this._activePanelCmptHasChanged = new Subject();\n this._scrollBarRestoreFn = null;\n this._backdropAttributes = ['animation', 'backdropClass'];\n this._panelAttributes = ['animation', 'ariaDescribedBy', 'ariaLabelledBy', 'keyboard', 'panelClass', 'position'];\n this._activeInstance = new EventEmitter(); // Trap focus on active PanelCmpt\n\n this._activePanelCmptHasChanged.subscribe(() => {\n if (this._panelCmpt) {\n ngbFocusTrap(this._ngZone, this._panelCmpt.location.nativeElement, this._activePanelCmptHasChanged);\n }\n });\n }\n\n _restoreScrollBar() {\n const scrollBarRestoreFn = this._scrollBarRestoreFn;\n\n if (scrollBarRestoreFn) {\n this._scrollBarRestoreFn = null;\n scrollBarRestoreFn();\n }\n }\n\n _hideScrollBar() {\n if (!this._scrollBarRestoreFn) {\n this._scrollBarRestoreFn = this._scrollBar.hide();\n }\n }\n\n open(moduleCFR, contentInjector, content, options) {\n const containerEl = options.container instanceof HTMLElement ? options.container : isDefined(options.container) ? this._document.querySelector(options.container) : this._document.body;\n\n if (!containerEl) {\n throw new Error(`The specified offcanvas container \"${options.container || 'body'}\" was not found in the DOM.`);\n }\n\n if (!options.scroll) {\n this._hideScrollBar();\n }\n\n const activeOffcanvas = new NgbActiveOffcanvas();\n\n const contentRef = this._getContentRef(moduleCFR, options.injector || contentInjector, content, activeOffcanvas);\n\n let backdropCmptRef = options.backdrop !== false ? this._attachBackdrop(moduleCFR, containerEl) : undefined;\n\n let panelCmptRef = this._attachWindowComponent(moduleCFR, containerEl, contentRef);\n\n let ngbOffcanvasRef = new NgbOffcanvasRef(panelCmptRef, contentRef, backdropCmptRef, options.beforeDismiss);\n\n this._registerOffcanvasRef(ngbOffcanvasRef);\n\n this._registerPanelCmpt(panelCmptRef);\n\n ngbOffcanvasRef.hidden.pipe(finalize(() => this._restoreScrollBar())).subscribe();\n\n activeOffcanvas.close = result => {\n ngbOffcanvasRef.close(result);\n };\n\n activeOffcanvas.dismiss = reason => {\n ngbOffcanvasRef.dismiss(reason);\n };\n\n this._applyPanelOptions(panelCmptRef.instance, options);\n\n if (backdropCmptRef && backdropCmptRef.instance) {\n this._applyBackdropOptions(backdropCmptRef.instance, options);\n\n backdropCmptRef.changeDetectorRef.detectChanges();\n }\n\n panelCmptRef.changeDetectorRef.detectChanges();\n return ngbOffcanvasRef;\n }\n\n get activeInstance() {\n return this._activeInstance;\n }\n\n dismiss(reason) {\n var _a;\n\n (_a = this._offcanvasRef) === null || _a === void 0 ? void 0 : _a.dismiss(reason);\n }\n\n hasOpenOffcanvas() {\n return !!this._offcanvasRef;\n }\n\n _attachBackdrop(moduleCFR, containerEl) {\n let backdropFactory = moduleCFR.resolveComponentFactory(NgbOffcanvasBackdrop);\n let backdropCmptRef = backdropFactory.create(this._injector);\n\n this._applicationRef.attachView(backdropCmptRef.hostView);\n\n containerEl.appendChild(backdropCmptRef.location.nativeElement);\n return backdropCmptRef;\n }\n\n _attachWindowComponent(moduleCFR, containerEl, contentRef) {\n let panelFactory = moduleCFR.resolveComponentFactory(NgbOffcanvasPanel);\n let panelCmptRef = panelFactory.create(this._injector, contentRef.nodes);\n\n this._applicationRef.attachView(panelCmptRef.hostView);\n\n containerEl.appendChild(panelCmptRef.location.nativeElement);\n return panelCmptRef;\n }\n\n _applyPanelOptions(windowInstance, options) {\n this._panelAttributes.forEach(optionName => {\n if (isDefined(options[optionName])) {\n windowInstance[optionName] = options[optionName];\n }\n });\n }\n\n _applyBackdropOptions(backdropInstance, options) {\n this._backdropAttributes.forEach(optionName => {\n if (isDefined(options[optionName])) {\n backdropInstance[optionName] = options[optionName];\n }\n });\n }\n\n _getContentRef(moduleCFR, contentInjector, content, activeOffcanvas) {\n if (!content) {\n return new ContentRef([]);\n } else if (content instanceof TemplateRef) {\n return this._createFromTemplateRef(content, activeOffcanvas);\n } else if (isString(content)) {\n return this._createFromString(content);\n } else {\n return this._createFromComponent(moduleCFR, contentInjector, content, activeOffcanvas);\n }\n }\n\n _createFromTemplateRef(content, activeOffcanvas) {\n const context = {\n $implicit: activeOffcanvas,\n\n close(result) {\n activeOffcanvas.close(result);\n },\n\n dismiss(reason) {\n activeOffcanvas.dismiss(reason);\n }\n\n };\n const viewRef = content.createEmbeddedView(context);\n\n this._applicationRef.attachView(viewRef);\n\n return new ContentRef([viewRef.rootNodes], viewRef);\n }\n\n _createFromString(content) {\n const component = this._document.createTextNode(`${content}`);\n\n return new ContentRef([[component]]);\n }\n\n _createFromComponent(moduleCFR, contentInjector, content, context) {\n const contentCmptFactory = moduleCFR.resolveComponentFactory(content);\n const offcanvasContentInjector = Injector.create({\n providers: [{\n provide: NgbActiveOffcanvas,\n useValue: context\n }],\n parent: contentInjector\n });\n const componentRef = contentCmptFactory.create(offcanvasContentInjector);\n const componentNativeEl = componentRef.location.nativeElement;\n\n this._applicationRef.attachView(componentRef.hostView);\n\n return new ContentRef([[componentNativeEl]], componentRef.hostView, componentRef);\n }\n\n _registerOffcanvasRef(ngbOffcanvasRef) {\n const unregisterOffcanvasRef = () => {\n this._offcanvasRef = undefined;\n\n this._activeInstance.emit(this._offcanvasRef);\n };\n\n this._offcanvasRef = ngbOffcanvasRef;\n\n this._activeInstance.emit(this._offcanvasRef);\n\n ngbOffcanvasRef.result.then(unregisterOffcanvasRef, unregisterOffcanvasRef);\n }\n\n _registerPanelCmpt(ngbPanelCmpt) {\n this._panelCmpt = ngbPanelCmpt;\n\n this._activePanelCmptHasChanged.next();\n\n ngbPanelCmpt.onDestroy(() => {\n this._panelCmpt = undefined;\n\n this._activePanelCmptHasChanged.next();\n });\n }\n\n }\n\n NgbOffcanvasStack.ɵfac = function NgbOffcanvasStack_Factory(t) {\n return new (t || NgbOffcanvasStack)(i0.ɵɵinject(i0.ApplicationRef), i0.ɵɵinject(i0.Injector), i0.ɵɵinject(DOCUMENT), i0.ɵɵinject(ScrollBar), i0.ɵɵinject(i0.NgZone));\n };\n\n NgbOffcanvasStack.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbOffcanvasStack,\n factory: NgbOffcanvasStack.ɵfac,\n providedIn: 'root'\n });\n return NgbOffcanvasStack;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A configuration service for the [`NgbOffcanvas`](#/components/offcanvas/api#NgbOffcanvas) service.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all offcanvases used in the application.\n *\n * @since 12.1.0\n */\n\n\nlet NgbOffcanvasConfig = /*#__PURE__*/(() => {\n class NgbOffcanvasConfig {\n constructor(_ngbConfig) {\n this._ngbConfig = _ngbConfig;\n this.backdrop = true;\n this.keyboard = true;\n this.position = 'start';\n this.scroll = false;\n }\n\n get animation() {\n return this._animation === undefined ? this._ngbConfig.animation : this._animation;\n }\n\n set animation(animation) {\n this._animation = animation;\n }\n\n }\n\n NgbOffcanvasConfig.ɵfac = function NgbOffcanvasConfig_Factory(t) {\n return new (t || NgbOffcanvasConfig)(i0.ɵɵinject(NgbConfig));\n };\n\n NgbOffcanvasConfig.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbOffcanvasConfig,\n factory: NgbOffcanvasConfig.ɵfac,\n providedIn: 'root'\n });\n return NgbOffcanvasConfig;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A service for opening an offcanvas.\n *\n * Creating an offcanvas is straightforward: create a component or a template and pass it as an argument to\n * the `.open()` method.\n *\n * @since 12.1.0\n */\n\n\nlet NgbOffcanvas = /*#__PURE__*/(() => {\n class NgbOffcanvas {\n constructor(_moduleCFR, _injector, _offcanvasStack, _config) {\n this._moduleCFR = _moduleCFR;\n this._injector = _injector;\n this._offcanvasStack = _offcanvasStack;\n this._config = _config;\n }\n /**\n * Opens a new offcanvas panel with the specified content and supplied options.\n *\n * Content can be provided as a `TemplateRef` or a component type. If you pass a component type as content,\n * then instances of those components can be injected with an instance of the `NgbActiveOffcanvas` class. You can then\n * use `NgbActiveOffcanvas` methods to close / dismiss offcanvas from \"inside\" of your component.\n *\n * Also see the [`NgbOffcanvasOptions`](#/components/offcanvas/api#NgbOffcanvasOptions) for the list of supported\n * options.\n */\n\n\n open(content, options = {}) {\n const combinedOptions = Object.assign(Object.assign(Object.assign({}, this._config), {\n animation: this._config.animation\n }), options);\n return this._offcanvasStack.open(this._moduleCFR, this._injector, content, combinedOptions);\n }\n /**\n * Returns an observable that holds the active offcanvas instance.\n */\n\n\n get activeInstance() {\n return this._offcanvasStack.activeInstance;\n }\n /**\n * Dismisses the currently displayed offcanvas with the supplied reason.\n */\n\n\n dismiss(reason) {\n this._offcanvasStack.dismiss(reason);\n }\n /**\n * Indicates if there is currently an open offcanvas in the application.\n */\n\n\n hasOpenOffcanvas() {\n return this._offcanvasStack.hasOpenOffcanvas();\n }\n\n }\n\n NgbOffcanvas.ɵfac = function NgbOffcanvas_Factory(t) {\n return new (t || NgbOffcanvas)(i0.ɵɵinject(i0.ComponentFactoryResolver), i0.ɵɵinject(i0.Injector), i0.ɵɵinject(NgbOffcanvasStack), i0.ɵɵinject(NgbOffcanvasConfig));\n };\n\n NgbOffcanvas.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbOffcanvas,\n factory: NgbOffcanvas.ɵfac,\n providedIn: 'root'\n });\n return NgbOffcanvas;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nlet NgbOffcanvasModule = /*#__PURE__*/(() => {\n class NgbOffcanvasModule {}\n\n NgbOffcanvasModule.ɵfac = function NgbOffcanvasModule_Factory(t) {\n return new (t || NgbOffcanvasModule)();\n };\n\n NgbOffcanvasModule.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: NgbOffcanvasModule\n });\n NgbOffcanvasModule.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({});\n return NgbOffcanvasModule;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\nconst NGB_MODULES = [\n/* eslint-disable-next-line deprecation/deprecation */\nNgbAccordionModule, NgbAlertModule, NgbButtonsModule, NgbCarouselModule, NgbCollapseModule, NgbDatepickerModule, NgbDropdownModule, NgbModalModule, NgbNavModule, NgbOffcanvasModule, NgbPaginationModule, NgbPopoverModule, NgbProgressbarModule, NgbRatingModule, NgbTimepickerModule, NgbToastModule, NgbTooltipModule, NgbTypeaheadModule];\nlet NgbModule = /*#__PURE__*/(() => {\n class NgbModule {}\n\n NgbModule.ɵfac = function NgbModule_Factory(t) {\n return new (t || NgbModule)();\n };\n\n NgbModule.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: NgbModule\n });\n NgbModule.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [NGB_MODULES,\n /* eslint-disable-next-line deprecation/deprecation */\n NgbAccordionModule, NgbAlertModule, NgbButtonsModule, NgbCarouselModule, NgbCollapseModule, NgbDatepickerModule, NgbDropdownModule, NgbModalModule, NgbNavModule, NgbOffcanvasModule, NgbPaginationModule, NgbPopoverModule, NgbProgressbarModule, NgbRatingModule, NgbTimepickerModule, NgbToastModule, NgbTooltipModule, NgbTypeaheadModule]\n });\n return NgbModule;\n})();\n\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Generated bundle index. Do not edit.\n */\n\n\nexport { ModalDismissReasons, NgbAccordion, NgbAccordionConfig, NgbAccordionModule, NgbActiveModal, NgbActiveOffcanvas, NgbAlert, NgbAlertConfig, NgbAlertModule, NgbButtonLabel, NgbButtonsModule, NgbCalendar, NgbCalendarBuddhist, NgbCalendarGregorian, NgbCalendarHebrew, NgbCalendarIslamicCivil, NgbCalendarIslamicUmalqura, NgbCalendarPersian, NgbCarousel, NgbCarouselConfig, NgbCarouselModule, NgbCheckBox, NgbCollapse, NgbCollapseConfig, NgbCollapseModule, NgbConfig, NgbDate, NgbDateAdapter, NgbDateNativeAdapter, NgbDateNativeUTCAdapter, NgbDateParserFormatter, NgbDatepicker, NgbDatepickerConfig, NgbDatepickerContent, NgbDatepickerI18n, NgbDatepickerI18nDefault, NgbDatepickerI18nHebrew, NgbDatepickerKeyboardService, NgbDatepickerModule, NgbDatepickerMonth, NgbDropdown, NgbDropdownAnchor, NgbDropdownConfig, NgbDropdownItem, NgbDropdownMenu, NgbDropdownModule, NgbDropdownToggle, NgbHighlight, NgbInputDatepicker, NgbInputDatepickerConfig, NgbModal, NgbModalConfig, NgbModalModule, NgbModalRef, NgbModule, NgbNav, NgbNavConfig, NgbNavContent, NgbNavItem, NgbNavLink, NgbNavModule, NgbNavOutlet, NgbNavPane, NgbNavbar, NgbOffcanvas, NgbOffcanvasConfig, NgbOffcanvasModule, NgbOffcanvasRef, NgbPagination, NgbPaginationConfig, NgbPaginationEllipsis, NgbPaginationFirst, NgbPaginationLast, NgbPaginationModule, NgbPaginationNext, NgbPaginationNumber, NgbPaginationPages, NgbPaginationPrevious, NgbPanel, NgbPanelContent, NgbPanelHeader, NgbPanelTitle, NgbPanelToggle, NgbPopover, NgbPopoverConfig, NgbPopoverModule, NgbProgressbar, NgbProgressbarConfig, NgbProgressbarModule, NgbRadio, NgbRadioGroup, NgbRating, NgbRatingConfig, NgbRatingModule, NgbSlide, NgbSlideEventDirection, NgbSlideEventSource, NgbTimeAdapter, NgbTimepicker, NgbTimepickerConfig, NgbTimepickerI18n, NgbTimepickerModule, NgbToast, NgbToastConfig, NgbToastHeader, NgbToastModule, NgbTooltip, NgbTooltipConfig, NgbTooltipModule, NgbTypeahead, NgbTypeaheadConfig, NgbTypeaheadModule, OffcanvasDismissReasons }; //# sourceMappingURL=ng-bootstrap.mjs.map","map":null,"metadata":{},"sourceType":"module"}