carriera-intern 0.0.0 → 1.1.76

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 (600) hide show
  1. package/README.md +63 -59
  2. package/fesm2022/carriera-intern.mjs +11245 -0
  3. package/fesm2022/carriera-intern.mjs.map +1 -0
  4. package/index.d.ts +2557 -0
  5. package/package.json +24 -60
  6. package/{projects/carriera-intern-components/public → public}/assets/icons/Thumb-active.svg +3 -3
  7. package/{projects/carriera-intern-components/public → public}/assets/icons/Thumb.svg +3 -3
  8. package/{projects/carriera-intern-components/public → public}/assets/icons/arrows/cai-arrow-primary-up.svg +3 -3
  9. package/{projects/carriera-intern-components/public → public}/assets/icons/arrows/cai-arrow-secondary-down.svg +3 -3
  10. package/{projects/carriera-intern-components/public → public}/assets/icons/arrows/cai-arrow-secondary-left.svg +3 -3
  11. package/{projects/carriera-intern-components/public → public}/assets/icons/arrows/cai-arrow-secondary-right.svg +3 -3
  12. package/{projects/carriera-intern-components/public → public}/assets/icons/banks/ic_bank_bbt.svg +5 -5
  13. package/{projects/carriera-intern-components/public → public}/assets/icons/banks/ic_bank_bmo_harris.svg +13 -13
  14. package/{projects/carriera-intern-components/public → public}/assets/icons/banks/ic_bank_capital_one.svg +11 -11
  15. package/{projects/carriera-intern-components/public → public}/assets/icons/banks/ic_bank_chase.svg +11 -11
  16. package/{projects/carriera-intern-components/public → public}/assets/icons/banks/ic_bank_chime.svg +10 -10
  17. package/{projects/carriera-intern-components/public → public}/assets/icons/banks/ic_bank_citi.svg +8 -8
  18. package/{projects/carriera-intern-components/public → public}/assets/icons/banks/ic_bank_fifth_third.svg +14 -14
  19. package/{projects/carriera-intern-components/public → public}/assets/icons/banks/ic_bank_green_dot.svg +17 -17
  20. package/{projects/carriera-intern-components/public → public}/assets/icons/banks/ic_bank_mb_financial.svg +5 -5
  21. package/{projects/carriera-intern-components/public → public}/assets/icons/banks/ic_bank_meta.svg +11 -11
  22. package/{projects/carriera-intern-components/public → public}/assets/icons/banks/ic_bank_navi_federal.svg +14 -14
  23. package/{projects/carriera-intern-components/public → public}/assets/icons/banks/ic_bank_of_america.svg +5 -5
  24. package/{projects/carriera-intern-components/public → public}/assets/icons/banks/ic_bank_pnc.svg +10 -10
  25. package/{projects/carriera-intern-components/public → public}/assets/icons/banks/ic_bank_regions.svg +14 -14
  26. package/{projects/carriera-intern-components/public → public}/assets/icons/banks/ic_bank_renasant.svg +14 -14
  27. package/{projects/carriera-intern-components/public → public}/assets/icons/banks/ic_bank_tcf.svg +11 -11
  28. package/{projects/carriera-intern-components/public → public}/assets/icons/banks/ic_bank_truist.svg +3 -3
  29. package/{projects/carriera-intern-components/public → public}/assets/icons/banks/ic_bank_us.svg +4 -4
  30. package/{projects/carriera-intern-components/public → public}/assets/icons/banks/ic_bank_wells_fargo.svg +3 -3
  31. package/{projects/carriera-intern-components/public → public}/assets/icons/cai-color.svg +3 -3
  32. package/{projects/carriera-intern-components/public → public}/assets/icons/cai-drop-zone-focus.svg +48 -48
  33. package/{projects/carriera-intern-components/public → public}/assets/icons/cai-edit.svg +4 -4
  34. package/{projects/carriera-intern-components/public → public}/assets/icons/cai-edit2.svg +3 -3
  35. package/{projects/carriera-intern-components/public → public}/assets/icons/cai-expand.svg +3 -3
  36. package/{projects/carriera-intern-components/public → public}/assets/icons/cai-gps.svg +3 -3
  37. package/{projects/carriera-intern-components/public → public}/assets/icons/cai-illustration-dark.svg +4 -4
  38. package/{projects/carriera-intern-components/public → public}/assets/icons/cai-illustration-drop-zone-cover.svg +34 -34
  39. package/{projects/carriera-intern-components/public → public}/assets/icons/cai-illustration-drop-zone-profile.svg +58 -58
  40. package/{projects/carriera-intern-components/public → public}/assets/icons/cai-illustration-drop-zone-video.svg +41 -41
  41. package/{projects/carriera-intern-components/public → public}/assets/icons/cai-illustration-drop-zone.svg +43 -43
  42. package/{projects/carriera-intern-components/public → public}/assets/icons/cai-illustration.svg +18 -18
  43. package/{projects/carriera-intern-components/public → public}/assets/icons/cai-loader.svg +3 -3
  44. package/{projects/carriera-intern-components/public → public}/assets/icons/cai-search.svg +3 -3
  45. package/{projects/carriera-intern-components/public → public}/assets/icons/cai-violation-hazmat.svg +3 -3
  46. package/{projects/carriera-intern-components/public → public}/assets/icons/fuel-contact/cai-contact.svg +3 -3
  47. package/{projects/carriera-intern-components/public → public}/assets/icons/fuel-contact/cai-count.svg +3 -3
  48. package/{projects/carriera-intern-components/public → public}/assets/icons/fuel-contact/cai-fuel-card.svg +3 -3
  49. package/{projects/carriera-intern-components/public → public}/assets/icons/fuel-contact/cai-people.svg +3 -3
  50. package/{projects/carriera-intern-components/public → public}/assets/icons/fuel-contact/cai-share.svg +3 -3
  51. package/{projects/carriera-intern-components/public → public}/assets/icons/fuel-contact/cai-user-2.svg +3 -3
  52. package/{projects/carriera-intern-components/public → public}/assets/icons/general/cai-address.svg +3 -3
  53. package/{projects/carriera-intern-components/public → public}/assets/icons/general/cai-checkmark.svg +3 -3
  54. package/{projects/carriera-intern-components/public → public}/assets/icons/general/cai-date.svg +3 -3
  55. package/{projects/carriera-intern-components/public → public}/assets/icons/general/cai-email.svg +2 -2
  56. package/{projects/carriera-intern-components/public → public}/assets/icons/general/cai-fax.svg +5 -5
  57. package/{projects/carriera-intern-components/public → public}/assets/icons/general/cai-label.svg +3 -3
  58. package/{projects/carriera-intern-components/public → public}/assets/icons/general/cai-money-additional.svg +3 -3
  59. package/{projects/carriera-intern-components/public → public}/assets/icons/general/cai-money.svg +3 -3
  60. package/{projects/carriera-intern-components/public → public}/assets/icons/general/cai-phone-extension.svg +3 -3
  61. package/{projects/carriera-intern-components/public → public}/assets/icons/general/cai-phone.svg +3 -3
  62. package/{projects/carriera-intern-components/public → public}/assets/icons/general/cai-sort-by.svg +3 -3
  63. package/{projects/carriera-intern-components/public → public}/assets/icons/general/cai-sort-descending.svg +4 -4
  64. package/{projects/carriera-intern-components/public → public}/assets/icons/general/cai-website.svg +3 -3
  65. package/{projects/carriera-intern-components/public → public}/assets/icons/hazardous/ic_corrosive_8.svg +6 -6
  66. package/{projects/carriera-intern-components/public → public}/assets/icons/hazardous/ic_dangerous_when_wet_4.svg +4 -4
  67. package/{projects/carriera-intern-components/public → public}/assets/icons/hazardous/ic_explosives_1_1.svg +6 -6
  68. package/{projects/carriera-intern-components/public → public}/assets/icons/hazardous/ic_explosives_1_2.svg +6 -6
  69. package/{projects/carriera-intern-components/public → public}/assets/icons/hazardous/ic_explosives_1_3.svg +6 -6
  70. package/{projects/carriera-intern-components/public → public}/assets/icons/hazardous/ic_explosives_1_4.svg +6 -6
  71. package/{projects/carriera-intern-components/public → public}/assets/icons/hazardous/ic_explosives_1_5.svg +6 -6
  72. package/{projects/carriera-intern-components/public → public}/assets/icons/hazardous/ic_explosives_1_6.svg +6 -6
  73. package/{projects/carriera-intern-components/public → public}/assets/icons/hazardous/ic_flammable_3.svg +4 -4
  74. package/{projects/carriera-intern-components/public → public}/assets/icons/hazardous/ic_flammable_gas_2.svg +4 -4
  75. package/{projects/carriera-intern-components/public → public}/assets/icons/hazardous/ic_flammable_solid_4.svg +5 -5
  76. package/{projects/carriera-intern-components/public → public}/assets/icons/hazardous/ic_inhalation_hazzard_2.svg +5 -5
  77. package/{projects/carriera-intern-components/public → public}/assets/icons/hazardous/ic_inhalation_hazzard_6.svg +5 -5
  78. package/{projects/carriera-intern-components/public → public}/assets/icons/hazardous/ic_organic_peroxide_5_2.svg +7 -7
  79. package/{projects/carriera-intern-components/public → public}/assets/icons/hazardous/ic_oxidizer_5_1.svg +6 -6
  80. package/{projects/carriera-intern-components/public → public}/assets/icons/hazardous/ic_oxygen_non_flam_gas_2.svg +6 -6
  81. package/{projects/carriera-intern-components/public → public}/assets/icons/hazardous/ic_radioactive_7.svg +5 -5
  82. package/{projects/carriera-intern-components/public → public}/assets/icons/hazardous/ic_spontaneously_combustible_4.svg +5 -5
  83. package/{projects/carriera-intern-components/public → public}/assets/icons/integration/cai-efs.svg +4 -4
  84. package/{projects/carriera-intern-components/public → public}/assets/icons/interaction/cai-cancel.svg +3 -3
  85. package/{projects/carriera-intern-components/public → public}/assets/icons/interaction/cai-copy.svg +3 -3
  86. package/{projects/carriera-intern-components/public → public}/assets/icons/interaction/cai-dislike.svg +3 -3
  87. package/{projects/carriera-intern-components/public → public}/assets/icons/interaction/cai-drag.svg +3 -3
  88. package/{projects/carriera-intern-components/public → public}/assets/icons/interaction/cai-favorite.svg +3 -3
  89. package/{projects/carriera-intern-components/public → public}/assets/icons/interaction/cai-like.svg +3 -3
  90. package/{projects/carriera-intern-components/public → public}/assets/icons/interaction/cai-minus.svg +3 -3
  91. package/{projects/carriera-intern-components/public → public}/assets/icons/interaction/cai-password-hidden.svg +3 -3
  92. package/{projects/carriera-intern-components/public → public}/assets/icons/interaction/cai-password-key.svg +3 -3
  93. package/{projects/carriera-intern-components/public → public}/assets/icons/interaction/cai-password-shown.svg +3 -3
  94. package/{projects/carriera-intern-components/public → public}/assets/icons/interaction/cai-plus.svg +3 -3
  95. package/{projects/carriera-intern-components/public → public}/assets/icons/interaction/cai_time.svg +2 -2
  96. package/{projects/carriera-intern-components/public → public}/assets/icons/interaction/cai_x.svg +4 -4
  97. package/{projects/carriera-intern-components/public → public}/assets/icons/load/cai-driver.svg +3 -3
  98. package/{projects/carriera-intern-components/public → public}/assets/icons/load/cai-load.svg +5 -5
  99. package/{projects/carriera-intern-components/public → public}/assets/icons/load/cai-ltl-single.svg +3 -3
  100. package/{projects/carriera-intern-components/public → public}/assets/icons/load/cai-parking.svg +3 -3
  101. package/{projects/carriera-intern-components/public → public}/assets/icons/load/cai-weight.svg +3 -3
  102. package/{projects/carriera-intern-components/public → public}/assets/icons/makes/trailers/ic_trailer_atro.svg +6 -6
  103. package/{projects/carriera-intern-components/public → public}/assets/icons/makes/trailers/ic_trailer_beall.svg +7 -7
  104. package/{projects/carriera-intern-components/public → public}/assets/icons/makes/trailers/ic_trailer_bedard.svg +8 -8
  105. package/{projects/carriera-intern-components/public → public}/assets/icons/makes/trailers/ic_trailer_butler.svg +7 -7
  106. package/{projects/carriera-intern-components/public → public}/assets/icons/makes/trailers/ic_trailer_de_lucio.svg +17 -17
  107. package/{projects/carriera-intern-components/public → public}/assets/icons/makes/trailers/ic_trailer_dorsey.svg +3 -3
  108. package/{projects/carriera-intern-components/public → public}/assets/icons/makes/trailers/ic_trailer_east.svg +3 -3
  109. package/{projects/carriera-intern-components/public → public}/assets/icons/makes/trailers/ic_trailer_fontaine.svg +3 -3
  110. package/{projects/carriera-intern-components/public → public}/assets/icons/makes/trailers/ic_trailer_fruehauf.svg +3 -3
  111. package/{projects/carriera-intern-components/public → public}/assets/icons/makes/trailers/ic_trailer_gallegos.svg +3 -3
  112. package/{projects/carriera-intern-components/public → public}/assets/icons/makes/trailers/ic_trailer_great_dane.svg +3 -3
  113. package/{projects/carriera-intern-components/public → public}/assets/icons/makes/trailers/ic_trailer_heil.svg +6 -6
  114. package/{projects/carriera-intern-components/public → public}/assets/icons/makes/trailers/ic_trailer_hudson.svg +3 -3
  115. package/{projects/carriera-intern-components/public → public}/assets/icons/makes/trailers/ic_trailer_hyndai.svg +3 -3
  116. package/{projects/carriera-intern-components/public → public}/assets/icons/makes/trailers/ic_trailer_kaufman.svg +3 -3
  117. package/{projects/carriera-intern-components/public → public}/assets/icons/makes/trailers/ic_trailer_mac.svg +3 -3
  118. package/{projects/carriera-intern-components/public → public}/assets/icons/makes/trailers/ic_trailer_manac.svg +3 -3
  119. package/{projects/carriera-intern-components/public → public}/assets/icons/makes/trailers/ic_trailer_polar.svg +3 -3
  120. package/{projects/carriera-intern-components/public → public}/assets/icons/makes/trailers/ic_trailer_ravens.svg +3 -3
  121. package/{projects/carriera-intern-components/public → public}/assets/icons/makes/trailers/ic_trailer_reitnouer.svg +12 -12
  122. package/{projects/carriera-intern-components/public → public}/assets/icons/makes/trailers/ic_trailer_strick.svg +3 -3
  123. package/{projects/carriera-intern-components/public → public}/assets/icons/makes/trailers/ic_trailer_timpte.svg +8 -8
  124. package/{projects/carriera-intern-components/public → public}/assets/icons/makes/trailers/ic_trailer_trail_king.svg +7 -7
  125. package/{projects/carriera-intern-components/public → public}/assets/icons/makes/trailers/ic_trailer_transcraft.svg +12 -12
  126. package/{projects/carriera-intern-components/public → public}/assets/icons/makes/trailers/ic_trailer_tremcar.svg +10 -10
  127. package/{projects/carriera-intern-components/public → public}/assets/icons/makes/trailers/ic_trailer_tytal.svg +3 -3
  128. package/{projects/carriera-intern-components/public → public}/assets/icons/makes/trailers/ic_trailer_utility.svg +3 -3
  129. package/{projects/carriera-intern-components/public → public}/assets/icons/makes/trailers/ic_trailer_vanguard.svg +3 -3
  130. package/{projects/carriera-intern-components/public → public}/assets/icons/makes/trailers/ic_trailer_vantage.svg +3 -3
  131. package/{projects/carriera-intern-components/public → public}/assets/icons/makes/trailers/ic_trailer_wabash.svg +3 -3
  132. package/{projects/carriera-intern-components/public → public}/assets/icons/makes/trailers/ic_trailer_walinga.svg +8 -8
  133. package/{projects/carriera-intern-components/public → public}/assets/icons/makes/trailers/ic_trailer_wilson.svg +3 -3
  134. package/{projects/carriera-intern-components/public → public}/assets/icons/makes/trucks/ic_truck_chevrolet.svg +3 -3
  135. package/{projects/carriera-intern-components/public → public}/assets/icons/makes/trucks/ic_truck_ford.svg +3 -3
  136. package/{projects/carriera-intern-components/public → public}/assets/icons/makes/trucks/ic_truck_freightliner.svg +3 -3
  137. package/{projects/carriera-intern-components/public → public}/assets/icons/makes/trucks/ic_truck_gmc.svg +3 -3
  138. package/{projects/carriera-intern-components/public → public}/assets/icons/makes/trucks/ic_truck_hino.svg +3 -3
  139. package/{projects/carriera-intern-components/public → public}/assets/icons/makes/trucks/ic_truck_international.svg +3 -3
  140. package/{projects/carriera-intern-components/public → public}/assets/icons/makes/trucks/ic_truck_isuzu.svg +3 -3
  141. package/{projects/carriera-intern-components/public → public}/assets/icons/makes/trucks/ic_truck_kenworth.svg +3 -3
  142. package/{projects/carriera-intern-components/public → public}/assets/icons/makes/trucks/ic_truck_mack.svg +3 -3
  143. package/{projects/carriera-intern-components/public → public}/assets/icons/makes/trucks/ic_truck_peterbilt.svg +3 -3
  144. package/{projects/carriera-intern-components/public → public}/assets/icons/makes/trucks/ic_truck_volvo.svg +3 -3
  145. package/{projects/carriera-intern-components/public → public}/assets/icons/makes/trucks/ic_truck_western_star.svg +3 -3
  146. package/{projects/carriera-intern-components/public → public}/assets/icons/menu/cai-delete.svg +4 -4
  147. package/{projects/carriera-intern-components/public → public}/assets/icons/menu/cai-download.svg +3 -3
  148. package/{projects/carriera-intern-components/public → public}/assets/icons/menu/cai-reset.svg +3 -3
  149. package/{projects/carriera-intern-components/public → public}/assets/icons/pm/cai-pm-base.svg +3 -3
  150. package/{projects/carriera-intern-components/public → public}/assets/icons/pm/trailer/cai-pm-general.svg +3 -3
  151. package/{projects/carriera-intern-components/public → public}/assets/icons/pm/trailer/cai-pm-pto-pump.svg +5 -5
  152. package/{projects/carriera-intern-components/public → public}/assets/icons/pm/trailer/cai-repair-reefer.svg +3 -3
  153. package/{projects/carriera-intern-components/public → public}/assets/icons/pm/truck/cai-pm-air-filter.svg +5 -5
  154. package/{projects/carriera-intern-components/public → public}/assets/icons/pm/truck/cai-pm-alignment.svg +5 -5
  155. package/{projects/carriera-intern-components/public → public}/assets/icons/pm/truck/cai-pm-battery.svg +3 -3
  156. package/{projects/carriera-intern-components/public → public}/assets/icons/pm/truck/cai-pm-belts.svg +5 -5
  157. package/{projects/carriera-intern-components/public → public}/assets/icons/pm/truck/cai-pm-brake-chamber.svg +3 -3
  158. package/{projects/carriera-intern-components/public → public}/assets/icons/pm/truck/cai-pm-engine-oil-filter.svg +4 -4
  159. package/{projects/carriera-intern-components/public → public}/assets/icons/pm/truck/cai-pm-engine-tune-up.svg +3 -3
  160. package/{projects/carriera-intern-components/public → public}/assets/icons/pm/truck/cai-pm-radiator.svg +3 -3
  161. package/{projects/carriera-intern-components/public → public}/assets/icons/pm/truck/cai-pm-transmission-fluid.svg +4 -4
  162. package/{projects/carriera-intern-components/public → public}/assets/icons/pm/truck/cai-pm-turbo.svg +3 -3
  163. package/{projects/carriera-intern-components/public → public}/assets/icons/states/ca/cai-ca-ab.svg +3 -3
  164. package/{projects/carriera-intern-components/public → public}/assets/icons/states/ca/cai-ca-bc.svg +35 -35
  165. package/{projects/carriera-intern-components/public → public}/assets/icons/states/ca/cai-ca-mb.svg +3 -3
  166. package/{projects/carriera-intern-components/public → public}/assets/icons/states/ca/cai-ca-nb.svg +7 -7
  167. package/{projects/carriera-intern-components/public → public}/assets/icons/states/ca/cai-ca-nl.svg +4 -4
  168. package/{projects/carriera-intern-components/public → public}/assets/icons/states/ca/cai-ca-ns.svg +6 -6
  169. package/{projects/carriera-intern-components/public → public}/assets/icons/states/ca/cai-ca-on.svg +7 -7
  170. package/{projects/carriera-intern-components/public → public}/assets/icons/states/ca/cai-ca-pe.svg +3 -3
  171. package/{projects/carriera-intern-components/public → public}/assets/icons/states/ca/cai-ca-qc.svg +4 -4
  172. package/{projects/carriera-intern-components/public → public}/assets/icons/states/ca/cai-ca-sk.svg +3 -3
  173. package/{projects/carriera-intern-components/public → public}/assets/icons/states/ca/cai-ca-yt.svg +3 -3
  174. package/{projects/carriera-intern-components/public → public}/assets/icons/states/us/cai-us-ak.svg +14 -14
  175. package/{projects/carriera-intern-components/public → public}/assets/icons/states/us/cai-us-al.svg +3 -3
  176. package/{projects/carriera-intern-components/public → public}/assets/icons/states/us/cai-us-ar.svg +3 -3
  177. package/{projects/carriera-intern-components/public → public}/assets/icons/states/us/cai-us-az.svg +3 -3
  178. package/{projects/carriera-intern-components/public → public}/assets/icons/states/us/cai-us-ca.svg +3 -3
  179. package/{projects/carriera-intern-components/public → public}/assets/icons/states/us/cai-us-co.svg +3 -3
  180. package/{projects/carriera-intern-components/public → public}/assets/icons/states/us/cai-us-ct.svg +3 -3
  181. package/{projects/carriera-intern-components/public → public}/assets/icons/states/us/cai-us-de.svg +3 -3
  182. package/{projects/carriera-intern-components/public → public}/assets/icons/states/us/cai-us-fl.svg +3 -3
  183. package/{projects/carriera-intern-components/public → public}/assets/icons/states/us/cai-us-ga.svg +3 -3
  184. package/{projects/carriera-intern-components/public → public}/assets/icons/states/us/cai-us-hi.svg +10 -10
  185. package/{projects/carriera-intern-components/public → public}/assets/icons/states/us/cai-us-ia.svg +3 -3
  186. package/{projects/carriera-intern-components/public → public}/assets/icons/states/us/cai-us-id.svg +3 -3
  187. package/{projects/carriera-intern-components/public → public}/assets/icons/states/us/cai-us-il.svg +3 -3
  188. package/{projects/carriera-intern-components/public → public}/assets/icons/states/us/cai-us-in.svg +3 -3
  189. package/{projects/carriera-intern-components/public → public}/assets/icons/states/us/cai-us-ks.svg +3 -3
  190. package/{projects/carriera-intern-components/public → public}/assets/icons/states/us/cai-us-ky.svg +3 -3
  191. package/{projects/carriera-intern-components/public → public}/assets/icons/states/us/cai-us-la.svg +4 -4
  192. package/{projects/carriera-intern-components/public → public}/assets/icons/states/us/cai-us-ma.svg +7 -7
  193. package/{projects/carriera-intern-components/public → public}/assets/icons/states/us/cai-us-md.svg +7 -7
  194. package/{projects/carriera-intern-components/public → public}/assets/icons/states/us/cai-us-me.svg +9 -9
  195. package/{projects/carriera-intern-components/public → public}/assets/icons/states/us/cai-us-mi.svg +11 -11
  196. package/{projects/carriera-intern-components/public → public}/assets/icons/states/us/cai-us-mn.svg +4 -4
  197. package/{projects/carriera-intern-components/public → public}/assets/icons/states/us/cai-us-mo.svg +3 -3
  198. package/{projects/carriera-intern-components/public → public}/assets/icons/states/us/cai-us-ms.svg +3 -3
  199. package/{projects/carriera-intern-components/public → public}/assets/icons/states/us/cai-us-mt.svg +3 -3
  200. package/{projects/carriera-intern-components/public → public}/assets/icons/states/us/cai-us-nc.svg +3 -3
  201. package/{projects/carriera-intern-components/public → public}/assets/icons/states/us/cai-us-nd.svg +3 -3
  202. package/{projects/carriera-intern-components/public → public}/assets/icons/states/us/cai-us-ne.svg +3 -3
  203. package/{projects/carriera-intern-components/public → public}/assets/icons/states/us/cai-us-nh.svg +3 -3
  204. package/{projects/carriera-intern-components/public → public}/assets/icons/states/us/cai-us-nj.svg +5 -5
  205. package/{projects/carriera-intern-components/public → public}/assets/icons/states/us/cai-us-nm.svg +3 -3
  206. package/{projects/carriera-intern-components/public → public}/assets/icons/states/us/cai-us-nv.svg +3 -3
  207. package/{projects/carriera-intern-components/public → public}/assets/icons/states/us/cai-us-ny.svg +4 -4
  208. package/{projects/carriera-intern-components/public → public}/assets/icons/states/us/cai-us-oh.svg +4 -4
  209. package/{projects/carriera-intern-components/public → public}/assets/icons/states/us/cai-us-ok.svg +3 -3
  210. package/{projects/carriera-intern-components/public → public}/assets/icons/states/us/cai-us-or.svg +3 -3
  211. package/{projects/carriera-intern-components/public → public}/assets/icons/states/us/cai-us-pa.svg +3 -3
  212. package/{projects/carriera-intern-components/public → public}/assets/icons/states/us/cai-us-ri.svg +8 -8
  213. package/{projects/carriera-intern-components/public → public}/assets/icons/states/us/cai-us-sc.svg +3 -3
  214. package/{projects/carriera-intern-components/public → public}/assets/icons/states/us/cai-us-sd.svg +3 -3
  215. package/{projects/carriera-intern-components/public → public}/assets/icons/states/us/cai-us-tn.svg +3 -3
  216. package/{projects/carriera-intern-components/public → public}/assets/icons/states/us/cai-us-tx.svg +3 -3
  217. package/{projects/carriera-intern-components/public → public}/assets/icons/states/us/cai-us-ut.svg +3 -3
  218. package/{projects/carriera-intern-components/public → public}/assets/icons/states/us/cai-us-va.svg +4 -4
  219. package/{projects/carriera-intern-components/public → public}/assets/icons/states/us/cai-us-vt.svg +7 -7
  220. package/{projects/carriera-intern-components/public → public}/assets/icons/states/us/cai-us-wa.svg +15 -15
  221. package/{projects/carriera-intern-components/public → public}/assets/icons/states/us/cai-us-wi.svg +4 -4
  222. package/{projects/carriera-intern-components/public → public}/assets/icons/states/us/cai-us-wv.svg +3 -3
  223. package/{projects/carriera-intern-components/public → public}/assets/icons/states/us/cai-us-wy.svg +3 -3
  224. package/{projects/carriera-intern-components/public → public}/assets/icons/status/cai-status-warning-lite.svg +3 -3
  225. package/{projects/carriera-intern-components/public → public}/assets/icons/status/cai-status-warning.svg +3 -3
  226. package/{projects/carriera-intern-components/public → public}/assets/icons/trailers/ic_trailer_bottom-dump.svg +5 -5
  227. package/{projects/carriera-intern-components/public → public}/assets/icons/trailers/ic_trailer_carhauler-stinger.svg +5 -5
  228. package/{projects/carriera-intern-components/public → public}/assets/icons/trailers/ic_trailer_carhauler.svg +5 -5
  229. package/{projects/carriera-intern-components/public → public}/assets/icons/trailers/ic_trailer_chassis.svg +5 -5
  230. package/{projects/carriera-intern-components/public → public}/assets/icons/trailers/ic_trailer_conestoga.svg +13 -13
  231. package/{projects/carriera-intern-components/public → public}/assets/icons/trailers/ic_trailer_container.svg +6 -6
  232. package/{projects/carriera-intern-components/public → public}/assets/icons/trailers/ic_trailer_dryvan.svg +5 -5
  233. package/{projects/carriera-intern-components/public → public}/assets/icons/trailers/ic_trailer_end-dump.svg +5 -5
  234. package/{projects/carriera-intern-components/public → public}/assets/icons/trailers/ic_trailer_flatbed.svg +5 -5
  235. package/{projects/carriera-intern-components/public → public}/assets/icons/trailers/ic_trailer_hopper.svg +6 -6
  236. package/{projects/carriera-intern-components/public → public}/assets/icons/trailers/ic_trailer_low-boy.svg +6 -6
  237. package/{projects/carriera-intern-components/public → public}/assets/icons/trailers/ic_trailer_reefer.svg +5 -5
  238. package/{projects/carriera-intern-components/public → public}/assets/icons/trailers/ic_trailer_side-kit.svg +6 -6
  239. package/{projects/carriera-intern-components/public → public}/assets/icons/trailers/ic_trailer_step-deck.svg +7 -7
  240. package/{projects/carriera-intern-components/public → public}/assets/icons/trailers/ic_trailer_tanker-pneumatic.svg +5 -5
  241. package/{projects/carriera-intern-components/public → public}/assets/icons/trailers/ic_trailer_tanker.svg +5 -5
  242. package/{projects/carriera-intern-components/public → public}/assets/icons/trucks/ic_truck_box-truck.svg +7 -7
  243. package/{projects/carriera-intern-components/public → public}/assets/icons/trucks/ic_truck_car-hauler.svg +7 -7
  244. package/{projects/carriera-intern-components/public → public}/assets/icons/trucks/ic_truck_cargo-van.svg +5 -5
  245. package/{projects/carriera-intern-components/public → public}/assets/icons/trucks/ic_truck_cement.svg +8 -8
  246. package/{projects/carriera-intern-components/public → public}/assets/icons/trucks/ic_truck_dump.svg +8 -8
  247. package/{projects/carriera-intern-components/public → public}/assets/icons/trucks/ic_truck_garbage.svg +10 -10
  248. package/{projects/carriera-intern-components/public → public}/assets/icons/trucks/ic_truck_reefer.svg +6 -6
  249. package/{projects/carriera-intern-components/public → public}/assets/icons/trucks/ic_truck_semi-truck.svg +8 -8
  250. package/{projects/carriera-intern-components/public → public}/assets/icons/trucks/ic_truck_semi-wSleeper.svg +8 -8
  251. package/{projects/carriera-intern-components/public → public}/assets/icons/trucks/ic_truck_spotter.svg +6 -6
  252. package/{projects/carriera-intern-components/public → public}/assets/icons/trucks/ic_truck_tow-truck.svg +8 -8
  253. package/{projects/carriera-intern-components/public → public}/assets/json/icons.json +985 -985
  254. package/{projects/carriera-intern-components/src → src}/styles/README.md +59 -59
  255. package/{projects/carriera-intern-components/src → src}/styles/_variables.scss +301 -301
  256. package/{projects/carriera-intern-components/src → src}/styles/cropper.scss +39 -39
  257. package/{projects/carriera-intern-components/src → src}/styles/custompickers.scss +827 -827
  258. package/{projects/carriera-intern-components/src → src}/styles/popover.scss +224 -224
  259. package/{projects/carriera-intern-components/src → src}/styles/review_variables.scss +45 -45
  260. package/{projects/carriera-intern-components/src → src}/styles/tooltip.scss +119 -119
  261. package/{projects/carriera-intern-components/src → src}/styles/utility/colors.scss +265 -265
  262. package/{projects/carriera-intern-components/src → src}/styles/utility/utilities.scss +17 -17
  263. package/{projects/carriera-intern-components/src → src}/styles.scss +43 -43
  264. package/.cursor/rules/icons.mdc +0 -7
  265. package/.editorconfig +0 -17
  266. package/.vscode/extensions.json +0 -4
  267. package/.vscode/launch.json +0 -20
  268. package/.vscode/tasks.json +0 -42
  269. package/angular.json +0 -94
  270. package/carriera-intern@0.0.0 +0 -0
  271. package/projects/carriera-intern-components/.storybook/main.ts +0 -12
  272. package/projects/carriera-intern-components/.storybook/preview-head.html +0 -13
  273. package/projects/carriera-intern-components/.storybook/preview.ts +0 -54
  274. package/projects/carriera-intern-components/.storybook/tsconfig.doc.json +0 -10
  275. package/projects/carriera-intern-components/.storybook/tsconfig.json +0 -11
  276. package/projects/carriera-intern-components/.storybook/typings.d.ts +0 -4
  277. package/projects/carriera-intern-components/README.md +0 -63
  278. package/projects/carriera-intern-components/ng-package.json +0 -14
  279. package/projects/carriera-intern-components/package.json +0 -14
  280. package/projects/carriera-intern-components/public/favicon.ico +0 -0
  281. package/projects/carriera-intern-components/src/Changelog.mdx +0 -285
  282. package/projects/carriera-intern-components/src/Icons.mdx +0 -279
  283. package/projects/carriera-intern-components/src/app/app.config.ts +0 -26
  284. package/projects/carriera-intern-components/src/app/components/avatar/avatar.component.html +0 -28
  285. package/projects/carriera-intern-components/src/app/components/avatar/avatar.component.scss +0 -414
  286. package/projects/carriera-intern-components/src/app/components/avatar/avatar.component.spec.ts +0 -23
  287. package/projects/carriera-intern-components/src/app/components/avatar/avatar.component.ts +0 -66
  288. package/projects/carriera-intern-components/src/app/components/avatar/avatar.stories.ts +0 -787
  289. package/projects/carriera-intern-components/src/app/components/avatar/models/avatar.model.ts +0 -52
  290. package/projects/carriera-intern-components/src/app/components/avatar/models/index.ts +0 -1
  291. package/projects/carriera-intern-components/src/app/components/avatar/pipes/avatar-classes.pipe.ts +0 -98
  292. package/projects/carriera-intern-components/src/app/components/avatar/pipes/index.ts +0 -2
  293. package/projects/carriera-intern-components/src/app/components/avatar/pipes/initials.pipe.ts +0 -31
  294. package/projects/carriera-intern-components/src/app/components/content-driven-co/content-driven-co.component.css +0 -0
  295. package/projects/carriera-intern-components/src/app/components/content-driven-co/content-driven-co.component.html +0 -10
  296. package/projects/carriera-intern-components/src/app/components/content-driven-co/content-driven-co.component.spec.ts +0 -23
  297. package/projects/carriera-intern-components/src/app/components/content-driven-co/content-driven-co.component.ts +0 -25
  298. package/projects/carriera-intern-components/src/app/components/content-driven-co/content-driven-co.stories.ts +0 -65
  299. package/projects/carriera-intern-components/src/app/components/copy/copy.component.html +0 -66
  300. package/projects/carriera-intern-components/src/app/components/copy/copy.component.scss +0 -103
  301. package/projects/carriera-intern-components/src/app/components/copy/copy.component.spec.ts +0 -22
  302. package/projects/carriera-intern-components/src/app/components/copy/copy.component.ts +0 -57
  303. package/projects/carriera-intern-components/src/app/components/copy/stories/copy.stories.ts +0 -170
  304. package/projects/carriera-intern-components/src/app/components/counter/counter.component.html +0 -33
  305. package/projects/carriera-intern-components/src/app/components/counter/counter.component.scss +0 -197
  306. package/projects/carriera-intern-components/src/app/components/counter/counter.component.spec.ts +0 -22
  307. package/projects/carriera-intern-components/src/app/components/counter/counter.component.ts +0 -219
  308. package/projects/carriera-intern-components/src/app/components/counter/counter.stories.ts +0 -65
  309. package/projects/carriera-intern-components/src/app/components/dispatch-dropdown/dispatch-dropdown.component.html +0 -223
  310. package/projects/carriera-intern-components/src/app/components/dispatch-dropdown/dispatch-dropdown.component.scss +0 -792
  311. package/projects/carriera-intern-components/src/app/components/dispatch-dropdown/dispatch-dropdown.component.spec.ts +0 -23
  312. package/projects/carriera-intern-components/src/app/components/dispatch-dropdown/dispatch-dropdown.component.ts +0 -323
  313. package/projects/carriera-intern-components/src/app/components/dispatch-dropdown/dispatch-dropdown.stories.ts +0 -409
  314. package/projects/carriera-intern-components/src/app/components/dispatch-dropdown/helpers/dispatch-dropdown.helper.ts +0 -248
  315. package/projects/carriera-intern-components/src/app/components/dispatch-dropdown/interfaces/dispatch-dropdown-config.interface.ts +0 -10
  316. package/projects/carriera-intern-components/src/app/components/dispatch-dropdown/interfaces/dispatch-dropdown-option.interface.ts +0 -4
  317. package/projects/carriera-intern-components/src/app/components/dispatch-dropdown/interfaces/index.ts +0 -2
  318. package/projects/carriera-intern-components/src/app/components/dispatch-dropdown/mock/parking-data.json +0 -1550
  319. package/projects/carriera-intern-components/src/app/components/dispatch-dropdown/pipes/dispatch-search-filter.pipe.ts +0 -26
  320. package/projects/carriera-intern-components/src/app/components/dispatch-location/dispatch-location.component.html +0 -76
  321. package/projects/carriera-intern-components/src/app/components/dispatch-location/dispatch-location.component.scss +0 -141
  322. package/projects/carriera-intern-components/src/app/components/dispatch-location/dispatch-location.component.spec.ts +0 -22
  323. package/projects/carriera-intern-components/src/app/components/dispatch-location/dispatch-location.component.ts +0 -268
  324. package/projects/carriera-intern-components/src/app/components/dispatch-location/dispatch-location.stories.ts +0 -184
  325. package/projects/carriera-intern-components/src/app/components/dispatch-location/interfaces/index.ts +0 -1
  326. package/projects/carriera-intern-components/src/app/components/dispatch-location/interfaces/last-status-data.interface.ts +0 -6
  327. package/projects/carriera-intern-components/src/app/components/dispatch-location/pipes/last-status-format.pipe.ts +0 -35
  328. package/projects/carriera-intern-components/src/app/components/document-preview/document-preview.component.html +0 -229
  329. package/projects/carriera-intern-components/src/app/components/document-preview/document-preview.component.scss +0 -1115
  330. package/projects/carriera-intern-components/src/app/components/document-preview/document-preview.component.spec.ts +0 -23
  331. package/projects/carriera-intern-components/src/app/components/document-preview/document-preview.component.ts +0 -277
  332. package/projects/carriera-intern-components/src/app/components/document-preview/document-preview.stories.ts +0 -256
  333. package/projects/carriera-intern-components/src/app/components/document-preview/interfaces/document-tag.interface.ts +0 -4
  334. package/projects/carriera-intern-components/src/app/components/document-preview/interfaces/index.ts +0 -1
  335. package/projects/carriera-intern-components/src/app/components/document-preview/utils/config/button-actions.config.ts +0 -30
  336. package/projects/carriera-intern-components/src/app/components/document-preview/utils/config/index.ts +0 -1
  337. package/projects/carriera-intern-components/src/app/components/drop-zone/drop-zone.component.html +0 -376
  338. package/projects/carriera-intern-components/src/app/components/drop-zone/drop-zone.component.scss +0 -9
  339. package/projects/carriera-intern-components/src/app/components/drop-zone/drop-zone.component.spec.ts +0 -22
  340. package/projects/carriera-intern-components/src/app/components/drop-zone/drop-zone.component.ts +0 -1272
  341. package/projects/carriera-intern-components/src/app/components/drop-zone/drop-zone.stories.ts +0 -1253
  342. package/projects/carriera-intern-components/src/app/components/drop-zone/enums/drop-zone-labels.enum.ts +0 -0
  343. package/projects/carriera-intern-components/src/app/components/drop-zone/enums/drop-zone-variant.enum.ts +0 -7
  344. package/projects/carriera-intern-components/src/app/components/drop-zone/enums/index.ts +0 -1
  345. package/projects/carriera-intern-components/src/app/components/drop-zone/models/app-file.model.ts +0 -28
  346. package/projects/carriera-intern-components/src/app/components/drop-zone/models/file.response.ts +0 -10
  347. package/projects/carriera-intern-components/src/app/components/drop-zone/models/index.ts +0 -2
  348. package/projects/carriera-intern-components/src/app/components/drop-zone/pipes/drag-mode-animation.pipe.ts +0 -40
  349. package/projects/carriera-intern-components/src/app/components/drop-zone/utils/helpers/drop-zone-documents.helper.ts +0 -67
  350. package/projects/carriera-intern-components/src/app/components/drop-zone/utils/helpers/index.ts +0 -1
  351. package/projects/carriera-intern-components/src/app/components/drop-zone/utils/styles/drop-zone-cropper.scss +0 -202
  352. package/projects/carriera-intern-components/src/app/components/drop-zone/utils/styles/drop-zone-documents.scss +0 -166
  353. package/projects/carriera-intern-components/src/app/components/drop-zone/utils/styles/drop-zone-drag-mode.scss +0 -107
  354. package/projects/carriera-intern-components/src/app/components/drop-zone/utils/styles/drop-zone-images.scss +0 -106
  355. package/projects/carriera-intern-components/src/app/components/drop-zone/utils/styles/drop-zone-layout.scss +0 -208
  356. package/projects/carriera-intern-components/src/app/components/drop-zone/utils/styles/drop-zone-states.scss +0 -183
  357. package/projects/carriera-intern-components/src/app/components/drop-zone/utils/styles/drop-zone-variations.scss +0 -189
  358. package/projects/carriera-intern-components/src/app/components/input/directives/helpers/index.ts +0 -1
  359. package/projects/carriera-intern-components/src/app/components/input/directives/helpers/mask.helper.ts +0 -52
  360. package/projects/carriera-intern-components/src/app/components/input/directives/mask.directive.spec.ts +0 -13
  361. package/projects/carriera-intern-components/src/app/components/input/directives/mask.directive.ts +0 -274
  362. package/projects/carriera-intern-components/src/app/components/input/directives/number-format.directive.spec.ts +0 -13
  363. package/projects/carriera-intern-components/src/app/components/input/directives/number-format.directive.ts +0 -442
  364. package/projects/carriera-intern-components/src/app/components/input/directives/password.directive.spec.ts +0 -13
  365. package/projects/carriera-intern-components/src/app/components/input/directives/password.directive.ts +0 -282
  366. package/projects/carriera-intern-components/src/app/components/input/input.component.html +0 -2669
  367. package/projects/carriera-intern-components/src/app/components/input/input.component.scss +0 -3000
  368. package/projects/carriera-intern-components/src/app/components/input/input.component.spec.ts +0 -23
  369. package/projects/carriera-intern-components/src/app/components/input/input.component.ts +0 -1486
  370. package/projects/carriera-intern-components/src/app/components/input/mock/banks.json +0 -249
  371. package/projects/carriera-intern-components/src/app/components/input/mock/basic.json +0 -42
  372. package/projects/carriera-intern-components/src/app/components/input/mock/brokers.json +0 -544
  373. package/projects/carriera-intern-components/src/app/components/input/mock/colors.json +0 -95
  374. package/projects/carriera-intern-components/src/app/components/input/mock/commodities.json +0 -12
  375. package/projects/carriera-intern-components/src/app/components/input/mock/contacts.json +0 -117
  376. package/projects/carriera-intern-components/src/app/components/input/mock/dispatchers.json +0 -83
  377. package/projects/carriera-intern-components/src/app/components/input/mock/dispatches.json +0 -4188
  378. package/projects/carriera-intern-components/src/app/components/input/mock/fuel-list-dropdown.json +0 -968
  379. package/projects/carriera-intern-components/src/app/components/input/mock/fuel-transaction.json +0 -78
  380. package/projects/carriera-intern-components/src/app/components/input/mock/fuelcard.json +0 -472
  381. package/projects/carriera-intern-components/src/app/components/input/mock/hazardous.json +0 -166
  382. package/projects/carriera-intern-components/src/app/components/input/mock/labelColors.json +0 -81
  383. package/projects/carriera-intern-components/src/app/components/input/mock/labels.json +0 -169
  384. package/projects/carriera-intern-components/src/app/components/input/mock/new-load-modal-res.json +0 -1148
  385. package/projects/carriera-intern-components/src/app/components/input/mock/noboard.json +0 -1665
  386. package/projects/carriera-intern-components/src/app/components/input/mock/owner.json +0 -209
  387. package/projects/carriera-intern-components/src/app/components/input/mock/pm.json +0 -112
  388. package/projects/carriera-intern-components/src/app/components/input/mock/shipper.json +0 -1192
  389. package/projects/carriera-intern-components/src/app/components/input/mock/split-driver.json +0 -99
  390. package/projects/carriera-intern-components/src/app/components/input/mock/split-trailer.json +0 -79
  391. package/projects/carriera-intern-components/src/app/components/input/mock/split-truck.json +0 -49
  392. package/projects/carriera-intern-components/src/app/components/input/mock/states.json +0 -605
  393. package/projects/carriera-intern-components/src/app/components/input/mock/toll.json +0 -106
  394. package/projects/carriera-intern-components/src/app/components/input/mock/trailermakes.json +0 -196
  395. package/projects/carriera-intern-components/src/app/components/input/mock/truck_trailer.json +0 -184
  396. package/projects/carriera-intern-components/src/app/components/input/mock/truckmakes.json +0 -76
  397. package/projects/carriera-intern-components/src/app/components/input/models/dropdown.model.ts +0 -376
  398. package/projects/carriera-intern-components/src/app/components/input/models/index.ts +0 -2
  399. package/projects/carriera-intern-components/src/app/components/input/models/input.model.ts +0 -227
  400. package/projects/carriera-intern-components/src/app/components/input/pipes/broker-progress.pipe.ts +0 -36
  401. package/projects/carriera-intern-components/src/app/components/input/pipes/clear-tooltip.pipe.ts +0 -38
  402. package/projects/carriera-intern-components/src/app/components/input/pipes/error-message.pipe.ts +0 -54
  403. package/projects/carriera-intern-components/src/app/components/input/pipes/highlight-search.pipe.ts +0 -42
  404. package/projects/carriera-intern-components/src/app/components/input/pipes/index.ts +0 -6
  405. package/projects/carriera-intern-components/src/app/components/input/pipes/input-class.pipe.ts +0 -109
  406. package/projects/carriera-intern-components/src/app/components/input/pipes/remap-pm-icons.pipe.ts +0 -49
  407. package/projects/carriera-intern-components/src/app/components/input/stories/Documentation.mdx +0 -190
  408. package/projects/carriera-intern-components/src/app/components/input/stories/dropdown-options.ts +0 -80
  409. package/projects/carriera-intern-components/src/app/components/input/stories/dropdown.stories.ts +0 -376
  410. package/projects/carriera-intern-components/src/app/components/input/stories/input-dropdown.stories.ts +0 -405
  411. package/projects/carriera-intern-components/src/app/components/input/stories/input-inverse.stories.ts +0 -232
  412. package/projects/carriera-intern-components/src/app/components/input/stories/input-load.stories.ts +0 -150
  413. package/projects/carriera-intern-components/src/app/components/input/stories/input-placeholder.stories.ts +0 -225
  414. package/projects/carriera-intern-components/src/app/components/input/stories/input-subcontent.stories.ts +0 -264
  415. package/projects/carriera-intern-components/src/app/components/input/stories/input-table.stories.ts +0 -211
  416. package/projects/carriera-intern-components/src/app/components/input/stories/input.stories.ts +0 -1159
  417. package/projects/carriera-intern-components/src/app/components/input/stories/modal.stories.ts +0 -162
  418. package/projects/carriera-intern-components/src/app/components/input/utilities/constants/cast.constants.ts +0 -91
  419. package/projects/carriera-intern-components/src/app/components/input/utilities/constants/index.ts +0 -1
  420. package/projects/carriera-intern-components/src/app/components/input/utilities/helpers/index.ts +0 -2
  421. package/projects/carriera-intern-components/src/app/components/input/utilities/helpers/input.helper.ts +0 -985
  422. package/projects/carriera-intern-components/src/app/components/input/utilities/helpers/keyboard-navigation.helper.ts +0 -402
  423. package/projects/carriera-intern-components/src/app/components/input/utilities/index.ts +0 -2
  424. package/projects/carriera-intern-components/src/app/components/input-address/enums/input-address-layers-string.enum.ts +0 -4
  425. package/projects/carriera-intern-components/src/app/components/input-address/enums/input-address-type-string.enum.ts +0 -7
  426. package/projects/carriera-intern-components/src/app/components/input-address/input-address.component.html +0 -13
  427. package/projects/carriera-intern-components/src/app/components/input-address/input-address.component.scss +0 -0
  428. package/projects/carriera-intern-components/src/app/components/input-address/input-address.component.spec.ts +0 -22
  429. package/projects/carriera-intern-components/src/app/components/input-address/input-address.component.ts +0 -509
  430. package/projects/carriera-intern-components/src/app/components/input-address/models/address-data.model.ts +0 -22
  431. package/projects/carriera-intern-components/src/app/components/input-address/models/address-list.model.ts +0 -6
  432. package/projects/carriera-intern-components/src/app/components/input-address/models/long-lat.model.ts +0 -4
  433. package/projects/carriera-intern-components/src/app/components/input-address/models/sent-address-data.model.ts +0 -25
  434. package/projects/carriera-intern-components/src/app/components/input-address/stories/address.stories.ts +0 -181
  435. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/cai-input-datetime-picker.component.html +0 -180
  436. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/cai-input-datetime-picker.component.scss +0 -862
  437. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/cai-input-datetime-picker.component.ts +0 -1559
  438. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/cai-input-datetime-picker.stories.ts +0 -507
  439. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/cai-custom-datetime-pickers.component.html +0 -134
  440. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/cai-custom-datetime-pickers.component.scss +0 -0
  441. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/cai-custom-datetime-pickers.component.spec.ts +0 -24
  442. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/cai-custom-datetime-pickers.component.ts +0 -331
  443. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/components/cai-custom-datetime-pickers-calendar-dates-main/cai-custom-datetime-pickers-calendar-dates-main.component.html +0 -190
  444. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/components/cai-custom-datetime-pickers-calendar-dates-main/cai-custom-datetime-pickers-calendar-dates-main.component.scss +0 -0
  445. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/components/cai-custom-datetime-pickers-calendar-dates-main/cai-custom-datetime-pickers-calendar-dates-main.component.spec.ts +0 -26
  446. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/components/cai-custom-datetime-pickers-calendar-dates-main/cai-custom-datetime-pickers-calendar-dates-main.component.ts +0 -234
  447. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/components/cai-custom-datetime-pickers-calendar-days/cai-custom-datetime-pickers-calendar-days.component.html +0 -23
  448. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/components/cai-custom-datetime-pickers-calendar-days/cai-custom-datetime-pickers-calendar-days.component.scss +0 -0
  449. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/components/cai-custom-datetime-pickers-calendar-days/cai-custom-datetime-pickers-calendar-days.component.spec.ts +0 -26
  450. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/components/cai-custom-datetime-pickers-calendar-days/cai-custom-datetime-pickers-calendar-days.component.ts +0 -60
  451. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/components/cai-custom-datetime-pickers-calendar-left/cai-custom-datetime-pickers-calendar-left.component.html +0 -27
  452. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/components/cai-custom-datetime-pickers-calendar-left/cai-custom-datetime-pickers-calendar-left.component.scss +0 -0
  453. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/components/cai-custom-datetime-pickers-calendar-left/cai-custom-datetime-pickers-calendar-left.component.spec.ts +0 -26
  454. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/components/cai-custom-datetime-pickers-calendar-left/cai-custom-datetime-pickers-calendar-left.component.ts +0 -187
  455. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/components/cai-custom-datetime-pickers-date-calendars/cai-custom-datetime-pickers-date-calendars.component.html +0 -68
  456. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/components/cai-custom-datetime-pickers-date-calendars/cai-custom-datetime-pickers-date-calendars.component.scss +0 -0
  457. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/components/cai-custom-datetime-pickers-date-calendars/cai-custom-datetime-pickers-date-calendars.component.spec.ts +0 -26
  458. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/components/cai-custom-datetime-pickers-date-calendars/cai-custom-datetime-pickers-date-calendars.component.ts +0 -163
  459. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/config/cai-input.config.ts +0 -193
  460. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/config/index.ts +0 -1
  461. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/enums/calendar-left-string.enum.ts +0 -5
  462. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/enums/calendar-list-preview-string.enum.ts +0 -4
  463. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/enums/calendar-main-string.enum.ts +0 -5
  464. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/enums/calendar-scroll-type-string.enum.ts +0 -4
  465. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/enums/calendar-string.enum.ts +0 -6
  466. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/enums/calendar-type-string.enum.ts +0 -3
  467. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/enums/config.enum.ts +0 -7
  468. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/models/scroll-change.model.ts +0 -6
  469. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/models/scroll-type.model.ts +0 -8
  470. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/pipes/calendar-months.pipe.ts +0 -23
  471. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/services/calendar-datetime-picker.service.ts +0 -35
  472. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/strategy/calendar-strategy.ts +0 -120
  473. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/utils/constants/custom-datetime-pickers.constants.ts +0 -48
  474. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/enums/input-config-name-string.enum.ts +0 -7
  475. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/interfaces/index.ts +0 -1
  476. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/interfaces/input-datetime.interface.ts +0 -11
  477. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/models/index.ts +0 -5
  478. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/models/label-color.model.ts +0 -11
  479. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/pipes/input-clear-class.pipe.ts +0 -105
  480. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/pipes/input-date-time-container-class.pipe.ts +0 -66
  481. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/pipes/input-dropdown-arrow-class.pipe.ts +0 -68
  482. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/pipes/input-placeholder-icon.class.pipe.ts +0 -68
  483. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/pipes/show-clear.pipe.ts +0 -20
  484. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/scss/ca-input.colors.scss +0 -287
  485. package/projects/carriera-intern-components/src/app/components/list-contact-dropdown/list-contact-dropdown.component.html +0 -194
  486. package/projects/carriera-intern-components/src/app/components/list-contact-dropdown/list-contact-dropdown.component.scss +0 -613
  487. package/projects/carriera-intern-components/src/app/components/list-contact-dropdown/list-contact-dropdown.component.spec.ts +0 -22
  488. package/projects/carriera-intern-components/src/app/components/list-contact-dropdown/list-contact-dropdown.component.ts +0 -208
  489. package/projects/carriera-intern-components/src/app/components/list-contact-dropdown/list-contact-dropdown.stories.ts +0 -52
  490. package/projects/carriera-intern-components/src/app/components/list-contact-dropdown/mock/brokerContacts.json +0 -74
  491. package/projects/carriera-intern-components/src/app/components/list-contact-dropdown/models/contact.interface.ts +0 -23
  492. package/projects/carriera-intern-components/src/app/components/list-contact-dropdown/pipes/contact-count.pipe.ts +0 -14
  493. package/projects/carriera-intern-components/src/app/components/list-contact-dropdown/pipes/contacts-height.pipe.ts +0 -34
  494. package/projects/carriera-intern-components/src/app/components/list-contact-dropdown/pipes/departments-height.pipe.ts +0 -57
  495. package/projects/carriera-intern-components/src/app/components/list-contact-dropdown/pipes/map-contacts.pipe.ts +0 -51
  496. package/projects/carriera-intern-components/src/app/components/pm/mock/repair-pm.json +0 -2743
  497. package/projects/carriera-intern-components/src/app/components/pm/pm.component.html +0 -82
  498. package/projects/carriera-intern-components/src/app/components/pm/pm.component.scss +0 -260
  499. package/projects/carriera-intern-components/src/app/components/pm/pm.component.spec.ts +0 -23
  500. package/projects/carriera-intern-components/src/app/components/pm/pm.component.ts +0 -207
  501. package/projects/carriera-intern-components/src/app/components/pm/pm.stories.ts +0 -104
  502. package/projects/carriera-intern-components/src/app/components/rating_review/enums/filter-type.enum.ts +0 -7
  503. package/projects/carriera-intern-components/src/app/components/rating_review/enums/review-type.enum.ts +0 -5
  504. package/projects/carriera-intern-components/src/app/components/rating_review/pipes/date-formating.pipe.spec.ts +0 -8
  505. package/projects/carriera-intern-components/src/app/components/rating_review/pipes/date-formating.pipe.ts +0 -42
  506. package/projects/carriera-intern-components/src/app/components/rating_review/rating-review/rating-review/rating-review.component.html +0 -57
  507. package/projects/carriera-intern-components/src/app/components/rating_review/rating-review/rating-review/rating-review.component.scss +0 -94
  508. package/projects/carriera-intern-components/src/app/components/rating_review/rating-review/rating-review/rating-review.component.spec.ts +0 -23
  509. package/projects/carriera-intern-components/src/app/components/rating_review/rating-review/rating-review/rating-review.component.ts +0 -105
  510. package/projects/carriera-intern-components/src/app/components/rating_review/rating-review/rating-review/rating-review.stories.ts +0 -451
  511. package/projects/carriera-intern-components/src/app/components/rating_review/review-modal/review-modal.component.html +0 -236
  512. package/projects/carriera-intern-components/src/app/components/rating_review/review-modal/review-modal.component.scss +0 -564
  513. package/projects/carriera-intern-components/src/app/components/rating_review/review-modal/review-modal.component.ts +0 -360
  514. package/projects/carriera-intern-components/src/app/components/rating_review/single-review/single-review.component.html +0 -321
  515. package/projects/carriera-intern-components/src/app/components/rating_review/single-review/single-review.component.scss +0 -887
  516. package/projects/carriera-intern-components/src/app/components/rating_review/single-review/single-review.component.ts +0 -159
  517. package/projects/carriera-intern-components/src/app/components/selected-location-field/interfaces/index.ts +0 -1
  518. package/projects/carriera-intern-components/src/app/components/selected-location-field/interfaces/selected-business-field.interface.ts +0 -11
  519. package/projects/carriera-intern-components/src/app/components/selected-location-field/selected-business-field.component.html +0 -100
  520. package/projects/carriera-intern-components/src/app/components/selected-location-field/selected-business-field.component.scss +0 -239
  521. package/projects/carriera-intern-components/src/app/components/selected-location-field/selected-business-field.component.spec.ts +0 -22
  522. package/projects/carriera-intern-components/src/app/components/selected-location-field/selected-business-field.component.ts +0 -28
  523. package/projects/carriera-intern-components/src/app/components/selected-location-field/selected-business-field.stories.ts +0 -132
  524. package/projects/carriera-intern-components/src/app/components/signature/signature.component.html +0 -63
  525. package/projects/carriera-intern-components/src/app/components/signature/signature.component.scss +0 -229
  526. package/projects/carriera-intern-components/src/app/components/signature/signature.component.spec.ts +0 -23
  527. package/projects/carriera-intern-components/src/app/components/signature/signature.component.ts +0 -102
  528. package/projects/carriera-intern-components/src/app/components/signature/signature.stories.ts +0 -32
  529. package/projects/carriera-intern-components/src/app/components/sticky-scrollbar/enums/index.ts +0 -1
  530. package/projects/carriera-intern-components/src/app/components/sticky-scrollbar/enums/scroll-state.enum.ts +0 -6
  531. package/projects/carriera-intern-components/src/app/components/sticky-scrollbar/sticky-scrollbar.component.html +0 -29
  532. package/projects/carriera-intern-components/src/app/components/sticky-scrollbar/sticky-scrollbar.component.scss +0 -106
  533. package/projects/carriera-intern-components/src/app/components/sticky-scrollbar/sticky-scrollbar.component.spec.ts +0 -23
  534. package/projects/carriera-intern-components/src/app/components/sticky-scrollbar/sticky-scrollbar.component.ts +0 -458
  535. package/projects/carriera-intern-components/src/app/components/sticky-scrollbar/sticky-scrollbar.stories.ts +0 -343
  536. package/projects/carriera-intern-components/src/app/components/tab-option-dropdown/interfaces/index.ts +0 -2
  537. package/projects/carriera-intern-components/src/app/components/tab-option-dropdown/interfaces/tab-option-config.interface.ts +0 -4
  538. package/projects/carriera-intern-components/src/app/components/tab-option-dropdown/interfaces/tab-option.interface.ts +0 -4
  539. package/projects/carriera-intern-components/src/app/components/tab-option-dropdown/pipes/index.ts +0 -1
  540. package/projects/carriera-intern-components/src/app/components/tab-option-dropdown/pipes/tab-search-filter.pipe.ts +0 -20
  541. package/projects/carriera-intern-components/src/app/components/tab-option-dropdown/tab-option-dropdown.component.html +0 -66
  542. package/projects/carriera-intern-components/src/app/components/tab-option-dropdown/tab-option-dropdown.component.scss +0 -441
  543. package/projects/carriera-intern-components/src/app/components/tab-option-dropdown/tab-option-dropdown.component.spec.ts +0 -22
  544. package/projects/carriera-intern-components/src/app/components/tab-option-dropdown/tab-option-dropdown.component.ts +0 -105
  545. package/projects/carriera-intern-components/src/app/components/tab-option-dropdown/tab-option.stories.ts +0 -93
  546. package/projects/carriera-intern-components/src/app/components/text-area/interfaces/index.ts +0 -1
  547. package/projects/carriera-intern-components/src/app/components/text-area/interfaces/text-area.interface.ts +0 -4
  548. package/projects/carriera-intern-components/src/app/components/text-area/text-area.component.html +0 -29
  549. package/projects/carriera-intern-components/src/app/components/text-area/text-area.component.scss +0 -294
  550. package/projects/carriera-intern-components/src/app/components/text-area/text-area.component.spec.ts +0 -23
  551. package/projects/carriera-intern-components/src/app/components/text-area/text-area.component.ts +0 -213
  552. package/projects/carriera-intern-components/src/app/components/text-area/text-area.stories.ts +0 -90
  553. package/projects/carriera-intern-components/src/app/components/toolbar-dropdown/interfaces/index.ts +0 -1
  554. package/projects/carriera-intern-components/src/app/components/toolbar-dropdown/interfaces/interval-dropdown-option.interface.ts +0 -10
  555. package/projects/carriera-intern-components/src/app/components/toolbar-dropdown/interval-dropdown.component.html +0 -98
  556. package/projects/carriera-intern-components/src/app/components/toolbar-dropdown/interval-dropdown.component.scss +0 -437
  557. package/projects/carriera-intern-components/src/app/components/toolbar-dropdown/interval-dropdown.component.spec.ts +0 -22
  558. package/projects/carriera-intern-components/src/app/components/toolbar-dropdown/interval-dropdown.component.ts +0 -160
  559. package/projects/carriera-intern-components/src/app/components/toolbar-dropdown/interval-dropdown.stories.ts +0 -77
  560. package/projects/carriera-intern-components/src/app/components/toolbar-dropdown/pipes/dropdown-filter-input-config.pipe.ts +0 -52
  561. package/projects/carriera-intern-components/src/app/components/toolbar-dropdown/utils/helpers/interval-dropdown.helper.ts +0 -193
  562. package/projects/carriera-intern-components/src/app/directives/hover-svg-directives.ts +0 -49
  563. package/projects/carriera-intern-components/src/app/directives/index.ts +0 -3
  564. package/projects/carriera-intern-components/src/app/directives/infinite-scroll.directive.ts +0 -64
  565. package/projects/carriera-intern-components/src/app/directives/intersection-observer.directive.ts +0 -50
  566. package/projects/carriera-intern-components/src/app/enums/alignment.enum.ts +0 -4
  567. package/projects/carriera-intern-components/src/app/enums/general-actions.enum.ts +0 -71
  568. package/projects/carriera-intern-components/src/app/enums/index.ts +0 -3
  569. package/projects/carriera-intern-components/src/app/enums/string-placeholder.enum.ts +0 -3
  570. package/projects/carriera-intern-components/src/app/models/pm.model.ts +0 -11
  571. package/projects/carriera-intern-components/src/app/models/review.model.ts +0 -29
  572. package/projects/carriera-intern-components/src/app/models/truck.model.ts +0 -5
  573. package/projects/carriera-intern-components/src/app/pipes/bytes-to-human-readable.pipe.spec.ts +0 -8
  574. package/projects/carriera-intern-components/src/app/pipes/bytes-to-human-readable.pipe.ts +0 -29
  575. package/projects/carriera-intern-components/src/app/pipes/currency.pipe.spec.ts +0 -8
  576. package/projects/carriera-intern-components/src/app/pipes/currency.pipe.ts +0 -61
  577. package/projects/carriera-intern-components/src/app/pipes/number-format.pipe.spec.ts +0 -8
  578. package/projects/carriera-intern-components/src/app/pipes/number-format.pipe.ts +0 -30
  579. package/projects/carriera-intern-components/src/app/services/document.service.spec.ts +0 -16
  580. package/projects/carriera-intern-components/src/app/services/document.service.ts +0 -168
  581. package/projects/carriera-intern-components/src/app/utils/autofill-validators.ts +0 -32
  582. package/projects/carriera-intern-components/src/app/utils/constants/index.ts +0 -1
  583. package/projects/carriera-intern-components/src/app/utils/constants/input-character-sets.constants.ts +0 -142
  584. package/projects/carriera-intern-components/src/app/utils/index.ts +0 -2
  585. package/projects/carriera-intern-components/src/app/validators/custom-validators.ts +0 -45
  586. package/projects/carriera-intern-components/src/public-api.ts +0 -31
  587. package/projects/carriera-intern-components/tsconfig.lib.json +0 -15
  588. package/projects/carriera-intern-components/tsconfig.lib.prod.json +0 -11
  589. package/projects/carriera-intern-components/tsconfig.spec.json +0 -15
  590. package/tsconfig.json +0 -33
  591. /package/{projects/carriera-intern-components/public → public}/assets/animations/animation-document-update.json +0 -0
  592. /package/{projects/carriera-intern-components/public → public}/assets/animations/animation-image.json +0 -0
  593. /package/{projects/carriera-intern-components/public → public}/assets/animations/animation-logo.json +0 -0
  594. /package/{projects/carriera-intern-components/public → public}/assets/animations/animation-media.json +0 -0
  595. /package/{projects/carriera-intern-components/public → public}/assets/cdl.png +0 -0
  596. /package/{projects/carriera-intern-components/public → public}/assets/exampledoc.png +0 -0
  597. /package/{projects/carriera-intern-components/public → public}/assets/examplelargeview.png +0 -0
  598. /package/{projects/carriera-intern-components/public → public}/assets/invexample.png +0 -0
  599. /package/{projects/carriera-intern-components/public → public}/assets/invoice.png +0 -0
  600. /package/{projects/carriera-intern-components/public → public}/assets/truck.png +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"carriera-intern.mjs","sources":["../../../projects/carriera-intern-components/src/app/utils/autofill-validators.ts","../../../projects/carriera-intern-components/src/app/utils/constants/input-character-sets.constants.ts","../../../projects/carriera-intern-components/src/app/components/input/models/input.model.ts","../../../projects/carriera-intern-components/src/app/components/input/pipes/remap-pm-icons.pipe.ts","../../../projects/carriera-intern-components/src/app/components/pm/pm.component.ts","../../../projects/carriera-intern-components/src/app/components/pm/pm.component.html","../../../projects/carriera-intern-components/src/app/pipes/currency.pipe.ts","../../../projects/carriera-intern-components/src/app/components/input/pipes/broker-progress.pipe.ts","../../../projects/carriera-intern-components/src/app/components/input/pipes/clear-tooltip.pipe.ts","../../../projects/carriera-intern-components/src/app/pipes/number-format.pipe.ts","../../../projects/carriera-intern-components/src/app/components/input/pipes/error-message.pipe.ts","../../../projects/carriera-intern-components/src/app/components/input/pipes/highlight-search.pipe.ts","../../../projects/carriera-intern-components/src/app/components/input/pipes/input-class.pipe.ts","../../../projects/carriera-intern-components/src/app/components/input/directives/helpers/mask.helper.ts","../../../projects/carriera-intern-components/src/app/components/input/directives/password.directive.ts","../../../projects/carriera-intern-components/src/app/components/input/directives/number-format.directive.ts","../../../projects/carriera-intern-components/src/app/components/input/directives/mask.directive.ts","../../../projects/carriera-intern-components/src/app/directives/infinite-scroll.directive.ts","../../../projects/carriera-intern-components/src/app/directives/intersection-observer.directive.ts","../../../projects/carriera-intern-components/src/app/components/avatar/pipes/avatar-classes.pipe.ts","../../../projects/carriera-intern-components/src/app/components/avatar/pipes/initials.pipe.ts","../../../projects/carriera-intern-components/src/app/components/avatar/avatar.component.ts","../../../projects/carriera-intern-components/src/app/components/avatar/avatar.component.html","../../../projects/carriera-intern-components/src/app/components/input/utilities/helpers/input.helper.ts","../../../projects/carriera-intern-components/src/app/components/input/utilities/helpers/keyboard-navigation.helper.ts","../../../projects/carriera-intern-components/src/app/components/input/input.component.ts","../../../projects/carriera-intern-components/src/app/components/input/input.component.html","../../../projects/carriera-intern-components/src/app/pipes/bytes-to-human-readable.pipe.ts","../../../projects/carriera-intern-components/src/app/components/document-preview/utils/config/button-actions.config.ts","../../../projects/carriera-intern-components/src/app/components/document-preview/document-preview.component.ts","../../../projects/carriera-intern-components/src/app/components/document-preview/document-preview.component.html","../../../projects/carriera-intern-components/src/app/services/document.service.ts","../../../projects/carriera-intern-components/src/app/components/drop-zone/enums/drop-zone-variant.enum.ts","../../../projects/carriera-intern-components/src/app/components/drop-zone/pipes/drag-mode-animation.pipe.ts","../../../projects/carriera-intern-components/src/app/components/drop-zone/utils/helpers/drop-zone-documents.helper.ts","../../../projects/carriera-intern-components/src/app/components/drop-zone/drop-zone.component.ts","../../../projects/carriera-intern-components/src/app/components/drop-zone/drop-zone.component.html","../../../projects/carriera-intern-components/src/app/components/drop-zone/models/app-file.model.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/services/calendar-datetime-picker.service.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/strategy/calendar-strategy.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/utils/constants/custom-datetime-pickers.constants.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/components/cai-custom-datetime-pickers-calendar-days/cai-custom-datetime-pickers-calendar-days.component.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/components/cai-custom-datetime-pickers-calendar-days/cai-custom-datetime-pickers-calendar-days.component.html","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/enums/calendar-main-string.enum.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/enums/calendar-string.enum.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/enums/calendar-list-preview-string.enum.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/components/cai-custom-datetime-pickers-calendar-dates-main/cai-custom-datetime-pickers-calendar-dates-main.component.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/components/cai-custom-datetime-pickers-calendar-dates-main/cai-custom-datetime-pickers-calendar-dates-main.component.html","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/pipes/calendar-months.pipe.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/enums/calendar-left-string.enum.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/components/cai-custom-datetime-pickers-calendar-left/cai-custom-datetime-pickers-calendar-left.component.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/components/cai-custom-datetime-pickers-calendar-left/cai-custom-datetime-pickers-calendar-left.component.html","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/components/cai-custom-datetime-pickers-date-calendars/cai-custom-datetime-pickers-date-calendars.component.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/components/cai-custom-datetime-pickers-date-calendars/cai-custom-datetime-pickers-date-calendars.component.html","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/enums/calendar-type-string.enum.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/enums/calendar-scroll-type-string.enum.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/enums/config.enum.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/cai-custom-datetime-pickers.component.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/cai-custom-datetime-pickers.component.html","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/enums/input-config-name-string.enum.ts","../../../projects/carriera-intern-components/src/app/enums/general-actions.enum.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/cai-input-datetime-picker.component.ts","../../../projects/carriera-intern-components/src/app/components/input-datetime-picker/cai-input-datetime-picker.component.html","../../../projects/carriera-intern-components/src/app/enums/string-placeholder.enum.ts","../../../projects/carriera-intern-components/src/app/enums/alignment.enum.ts","../../../projects/carriera-intern-components/src/app/components/copy/copy.component.ts","../../../projects/carriera-intern-components/src/app/components/copy/copy.component.html","../../../projects/carriera-intern-components/src/app/components/input-address/models/sent-address-data.model.ts","../../../projects/carriera-intern-components/src/app/components/input-address/enums/input-address-layers-string.enum.ts","../../../projects/carriera-intern-components/src/app/components/input-address/enums/input-address-type-string.enum.ts","../../../projects/carriera-intern-components/src/app/components/input-address/input-address.component.ts","../../../projects/carriera-intern-components/src/app/components/input-address/input-address.component.html","../../../projects/carriera-intern-components/src/app/components/selected-location-field/selected-business-field.component.ts","../../../projects/carriera-intern-components/src/app/components/selected-location-field/selected-business-field.component.html","../../../projects/carriera-intern-components/src/app/components/rating_review/enums/review-type.enum.ts","../../../projects/carriera-intern-components/src/app/components/rating_review/pipes/date-formating.pipe.ts","../../../projects/carriera-intern-components/src/app/components/rating_review/single-review/single-review.component.ts","../../../projects/carriera-intern-components/src/app/components/rating_review/single-review/single-review.component.html","../../../projects/carriera-intern-components/src/app/components/rating_review/enums/filter-type.enum.ts","../../../projects/carriera-intern-components/src/app/components/rating_review/review-modal/review-modal.component.ts","../../../projects/carriera-intern-components/src/app/components/rating_review/review-modal/review-modal.component.html","../../../projects/carriera-intern-components/src/app/components/rating_review/rating-review/rating-review/rating-review.component.ts","../../../projects/carriera-intern-components/src/app/components/rating_review/rating-review/rating-review/rating-review.component.html","../../../projects/carriera-intern-components/src/app/components/list-contact-dropdown/pipes/map-contacts.pipe.ts","../../../projects/carriera-intern-components/src/app/components/list-contact-dropdown/pipes/contacts-height.pipe.ts","../../../projects/carriera-intern-components/src/app/components/list-contact-dropdown/pipes/departments-height.pipe.ts","../../../projects/carriera-intern-components/src/app/components/list-contact-dropdown/pipes/contact-count.pipe.ts","../../../projects/carriera-intern-components/src/app/components/list-contact-dropdown/list-contact-dropdown.component.ts","../../../projects/carriera-intern-components/src/app/components/list-contact-dropdown/list-contact-dropdown.component.html","../../../projects/carriera-intern-components/src/app/components/tab-option-dropdown/pipes/tab-search-filter.pipe.ts","../../../projects/carriera-intern-components/src/app/components/tab-option-dropdown/tab-option-dropdown.component.ts","../../../projects/carriera-intern-components/src/app/components/tab-option-dropdown/tab-option-dropdown.component.html","../../../projects/carriera-intern-components/src/app/components/toolbar-dropdown/pipes/dropdown-filter-input-config.pipe.ts","../../../projects/carriera-intern-components/src/app/components/toolbar-dropdown/utils/helpers/interval-dropdown.helper.ts","../../../projects/carriera-intern-components/src/app/components/toolbar-dropdown/interval-dropdown.component.ts","../../../projects/carriera-intern-components/src/app/components/toolbar-dropdown/interval-dropdown.component.html","../../../projects/carriera-intern-components/src/app/components/sticky-scrollbar/enums/scroll-state.enum.ts","../../../projects/carriera-intern-components/src/app/components/sticky-scrollbar/sticky-scrollbar.component.ts","../../../projects/carriera-intern-components/src/app/components/sticky-scrollbar/sticky-scrollbar.component.html","../../../projects/carriera-intern-components/src/app/components/dispatch-dropdown/helpers/dispatch-dropdown.helper.ts","../../../projects/carriera-intern-components/src/app/components/dispatch-dropdown/dispatch-dropdown.component.ts","../../../projects/carriera-intern-components/src/app/components/dispatch-dropdown/dispatch-dropdown.component.html","../../../projects/carriera-intern-components/src/app/components/text-area/text-area.component.ts","../../../projects/carriera-intern-components/src/app/components/text-area/text-area.component.html","../../../projects/carriera-intern-components/src/app/components/dispatch-location/pipes/last-status-format.pipe.ts","../../../projects/carriera-intern-components/src/app/components/dispatch-location/dispatch-location.component.ts","../../../projects/carriera-intern-components/src/app/components/dispatch-location/dispatch-location.component.html","../../../projects/carriera-intern-components/src/app/components/counter/counter.component.ts","../../../projects/carriera-intern-components/src/app/components/counter/counter.component.html","../../../projects/carriera-intern-components/src/public-api.ts","../../../projects/carriera-intern-components/src/carriera-intern.ts"],"sourcesContent":["import {\n AbstractControl,\n ValidatorFn,\n Validators,\n ValidationErrors,\n} from '@angular/forms';\n\n// Autofill interface\ninterface AutofillableFormControl extends AbstractControl {\n _autofilled?: boolean;\n}\n\n// More flexible validator type to handle different AbstractControl versions\ntype FlexibleValidatorFn = (control: any) => ValidationErrors | null;\n\n/**\n * Creates a validator that ignores validation rules when the control is autofilled.\n * This can be used by components to create form controls with autofill support.\n * @param validators - Array of validators to apply when not autofilled\n * @returns A validator function that bypasses validation for autofilled controls\n */\nexport function ignoreWhenAutofilled(\n ...validators: FlexibleValidatorFn[]\n): ValidatorFn {\n const composite = Validators.compose(validators as ValidatorFn[]);\n return (ctrl: AbstractControl): ValidationErrors | null =>\n (ctrl as AutofillableFormControl)._autofilled\n ? null\n : composite\n ? composite(ctrl)\n : null;\n}\n","export const INPUT_CHARACTER_SETS = {\n DIGITS: ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],\n\n FRENCH_LETTERS: [\n 'ç',\n 'é',\n 'â',\n 'ê',\n 'î',\n 'ô',\n 'û',\n 'à',\n 'è',\n 'ì',\n 'ò',\n 'ù',\n 'ë',\n 'ï',\n 'ü',\n 'æ',\n 'œ',\n 'ÿ',\n ],\n\n LETTERS: [\n 'a',\n 'b',\n 'c',\n 'd',\n 'e',\n 'f',\n 'g',\n 'h',\n 'i',\n 'j',\n 'k',\n 'l',\n 'm',\n 'n',\n 'o',\n 'p',\n 'q',\n 'r',\n 's',\n 't',\n 'u',\n 'v',\n 'w',\n 'x',\n 'y',\n 'z',\n ],\n\n // Special characters\n BASIC_PUNCTUATION: ['.', ',', '!', '?', ';', ':'],\n COMMON_SYMBOLS: [\n '@',\n '#',\n '$',\n '%',\n '&',\n '*',\n '+',\n '-',\n '=',\n '_',\n '|',\n '~',\n '`',\n '^',\n '<',\n '>',\n '/',\n '|',\n '~',\n '`',\n '^',\n '<',\n '>',\n '\\\\',\n ],\n BRACKETS: ['(', ')', '[', ']', '{', '}'],\n QUOTES: ['\"', \"'\", '`'],\n WHITESPACE: [' ', '\\t'],\n\n DBA_SPECIAL: [\n '!',\n '#',\n \"'\",\n '$',\n '&',\n '%',\n '(',\n ')',\n '*',\n '+',\n ',',\n '-',\n '.',\n '/',\n ':',\n ';',\n '=',\n '>',\n '?',\n '[',\n ']',\n '\\\\',\n '^',\n ],\n\n get ALPHANUMERIC() {\n return [...this.LETTERS, ...this.DIGITS];\n },\n get ALPHANUMERIC_WITH_SPACES() {\n return [...this.ALPHANUMERIC, ' '];\n },\n\n // Email specific\n EMAIL_SPECIAL: ['@', '.', '-', '_', '+'],\n get EMAIL_CHARACTERS() {\n return [...this.ALPHANUMERIC, ...this.EMAIL_SPECIAL];\n },\n\n get SPECIAL_EXCEPT_NAME_FRIENDLY() {\n const excludeChars = ['.', ',', '-', \"'\", ' '];\n return this.SPECIAL.filter((char) => !excludeChars.includes(char));\n },\n\n get NAME_CHARACTER_EXCLUSIONS() {\n return [...this.SPECIAL_EXCEPT_NAME_FRIENDLY, ...this.DIGITS];\n },\n\n get SPECIAL() {\n return [\n ...this.BASIC_PUNCTUATION,\n ...this.COMMON_SYMBOLS,\n ...this.BRACKETS,\n ...this.QUOTES,\n ];\n },\n} as const;\n","import {\n Bank,\n Broker,\n Contact,\n DepartmentContactsPair,\n Dispatch,\n DispatchBoard,\n Dispatcher,\n DropdownOption,\n Shipper,\n TrailerOption,\n TruckOption,\n Hazardous,\n State,\n Owner,\n FuelCard,\n PMOption,\n ColorOption,\n MakeOption,\n TollOption,\n TollTransponderOption,\n Franchise,\n FuelStopStore,\n Provider,\n SplitDriverBoard,\n SplitTruckBoard,\n SplitTrailerBoard,\n SplitDriver,\n SplitTruck,\n SplitTrailer,\n} from './dropdown.model';\n\nexport interface CaiInputConfig {\n type?: 'text' | 'password' | 'number' | 'account';\n name?: string;\n required?: boolean;\n alignment?: 'left' | 'right';\n inverse?: boolean; // dark mode\n reveal?: number; // Revealed character count from the end of the password\n icon?: string | null; // icon name ex. 'cai-email'\n iconColor?: string; // color code for icons ex. #F89B2E\n dropdown?: boolean | DropdownType; // dropdown menu\n dropdownAutocomplete?: boolean; // dropdown autocomplete functionality\n fullState?: boolean; // full state dropdown functionality\n search?: boolean; // dropdown search functionality\n useOutsideSearch?: boolean; // use outside search functionality\n add?: boolean; // dropdown add new functionality\n subcontent?: string; // ex. months, years, lbs, gallons\n textTransform?: 'capitalize' | 'uppercase' | 'lowercase';\n textTransformExceptions?: string[]; // exception from text transform\n isNumberFormattingDisabled?: boolean;\n textColor?: 'positive';\n isAddress?: boolean; // address dropdown functionality\n\n isEdit?: boolean;\n writeAddValue?: boolean;\n\n placeholderBehavior?: 'dynamic' | 'fade' | 'static' | 'hidden';\n errorBehavior?: 'dynamic' | 'static' | 'floating' | 'hidden';\n\n label?: string; // aria label\n mask?: string; // mask pattern ex. (000) 000-0000\n min?: number; // min value for number inputs\n max?: number; // max value for number inputs or max length for text inputs\n step?: number | 'automatic'; // step value for number inputs\n disableDecimals?: boolean; // disable decimals for number inputs\n prefix?: string; // ex. $\n withButtons?: boolean; // + - buttons\n autocomplete?: string; // autocomplete\n inTable?: boolean;\n disabled?: boolean; // disabled?\n passwordRequirements?: boolean; // password requirements\n canOpenModal?: boolean; // can open modal for add new\n noSeparator?: boolean; // no separator between label and input\n squareAvatar?: boolean; // square avatar\n\n optionValue?: string; // option value (key)\n optionLabel?: string; // option label (key)\n\n removable?: boolean;\n isRemovableWhenDisabled?: boolean;\n autofocus?: boolean;\n size?: (typeof sizes)[number]; // size of the input\n\n customErrors?: CustomError[]; // custom error message\n disabledCharacters?: string[]; // characters that are disabled\n enabledCharacters?: string[]; // characters that are enabled\n spacesAllowed?: number;\n\n placeholderColor?: string;\n\n strikethrough?: boolean; // strikethrough the input\n hasRemoveModal?: boolean; // has remove modal\n hasNoClearButton?: boolean; // has no clear button\n\n hasResetButton?: boolean; // has reset button\n\n placeholder?: string;\n\n hasStroke?: boolean; // has stroke\n}\n\nexport type CustomError = {\n name: string; // name of the error\n message: string | null; // message of the error\n};\n\nexport const DropdownTypes = [\n 'multiple',\n 'dispatch',\n 'ftl-dispatch',\n 'broker',\n 'contact',\n 'shipper',\n 'bank',\n 'dispatcher',\n 'truck',\n 'trailer',\n 'subcontent',\n 'hazardous',\n 'state',\n 'owner',\n 'fuelcard',\n 'pm',\n 'color',\n 'make',\n 'toll',\n 'fuel-stop-transaction',\n 'provider',\n\n // Load Split\n 'split-driver',\n 'split-truck',\n 'split-trailer',\n] as const;\n\nexport const sizes = [\n 22, 26,\n // 34 For later versions when applicant is done\n] as const;\n\nexport type DropdownType = (typeof DropdownTypes)[number];\n\nexport type DropdownArrays =\n | DropdownOption[]\n | Broker[]\n | DispatchBoard[]\n | DepartmentContactsPair[]\n | Shipper[]\n | Dispatch[]\n | Bank[]\n | Dispatcher[]\n | TruckOption[]\n | TrailerOption[]\n | Hazardous[]\n | State[]\n | Owner[]\n | FuelCard[]\n | PMOption[]\n | ColorOption[]\n | MakeOption[]\n | TollOption[]\n | Franchise[]\n | Provider[]\n | SplitDriverBoard[]\n | SplitTruckBoard[]\n | SplitTrailerBoard[];\n\nexport type DropdownOptions =\n | DropdownOption\n | Broker\n | Contact\n | Shipper\n | Dispatch\n | Bank\n | Dispatcher\n | TruckOption\n | TrailerOption\n | Hazardous\n | State\n | Owner\n | FuelCard\n | PMOption\n | ColorOption\n | MakeOption\n | TollTransponderOption\n | FuelStopStore\n | Provider\n | SplitDriver\n | SplitTruck\n | SplitTrailer;\n\nexport type DropdownKeys =\n | DropdownOption[keyof DropdownOption]\n | Dispatch[keyof Dispatch]\n | Broker[keyof Broker]\n | Contact[keyof Contact]\n | Shipper[keyof Shipper]\n | Bank[keyof Bank]\n | Dispatcher[keyof Dispatcher]\n | TruckOption[keyof TruckOption]\n | TrailerOption[keyof TrailerOption]\n | Hazardous[keyof Hazardous]\n | State[keyof State]\n | Owner[keyof Owner]\n | FuelCard[keyof FuelCard]\n | PMOption[keyof PMOption]\n | ColorOption[keyof ColorOption]\n | MakeOption[keyof MakeOption]\n | TollTransponderOption[keyof TollTransponderOption]\n | FuelStopStore[keyof FuelStopStore]\n | Provider[keyof Provider]\n | SplitDriver[keyof SplitDriver]\n | SplitTruck[keyof SplitTruck]\n | SplitTrailer[keyof SplitTrailer];\n\nexport type DropdownGroups = Franchise;\n\nexport type GroupedNavigationState = {\n groupIndex: number | null;\n optionIndex: number | null;\n};\n\nexport type KeyboardNavigationState = {\n singleIndex: number | null;\n groupedNavigationState: GroupedNavigationState | null;\n};\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'remapPmIcons',\n})\nexport class RemapPmIconsPipe implements PipeTransform {\n transform(pm: string | null | undefined): string {\n if (!pm) return 'cai-pm-base';\n\n switch (pm) {\n case 'Reefer Unit':\n return 'cai-repair-reefer';\n case 'Alignment':\n return 'cai-pm-alignment';\n case 'PTO Pump':\n return 'cai-pm-pto-pump';\n case 'Engine Oil & Filter':\n return 'cai-pm-engine-oil-filter';\n case 'Air Filter':\n return 'cai-pm-air-filter';\n case 'Belts':\n return 'cai-pm-belts';\n case 'Transmission Fluid':\n return 'cai-pm-transmission-fluid';\n case 'Engine Tune-Up':\n return 'cai-pm-engine-tune-up';\n case 'Oil Pump':\n return 'cai-pm-engine-oil-filter';\n case 'AC Compressor':\n return 'cai-pm-engine-tune-up';\n case 'Battery':\n return 'cai-pm-battery';\n case 'Turbo':\n return 'cai-pm-turbo';\n case 'Radiator':\n return 'cai-pm-radiator';\n case 'Air Compressor':\n return 'cai-pm-transmission-fluid';\n case 'Fuel Pump':\n return 'cai-pm-belts';\n case 'Water Pump':\n return 'cai-pm-air-filter';\n case 'Brake Chamber':\n return 'cai-pm-brake-chamber';\n default:\n return 'cai-pm-base';\n }\n }\n}\n","import {\n Component,\n input,\n output,\n signal,\n effect,\n Optional,\n Self,\n} from '@angular/core';\n\n// Bootstrap\nimport {\n NgbPopover,\n NgbTooltip,\n NgbTooltipModule,\n} from '@ng-bootstrap/ng-bootstrap';\n\n// Components\nimport { SvgIconComponent } from 'angular-svg-icon';\n\n// Models\nimport { PmItem } from '../../models/pm.model';\n\n// Modules\nimport { ControlValueAccessor, FormsModule, NgControl } from '@angular/forms';\n\n// Pipes\nimport { RemapPmIconsPipe } from '../input/pipes/remap-pm-icons.pipe';\n\n@Component({\n selector: 'cai-pm',\n templateUrl: './pm.component.html',\n styleUrl: './pm.component.scss',\n imports: [\n // Components\n SvgIconComponent,\n\n // Bootstrap\n NgbPopover,\n NgbTooltipModule,\n\n // Modules\n FormsModule,\n\n // Pipes\n RemapPmIconsPipe,\n ],\n})\nexport class PmComponent implements ControlValueAccessor {\n /**\n * List of PM items passed from the parent component.\n * Used to render all available PM options.\n */\n items = input<PmItem[]>([]);\n\n /**\n * Event emitted when the \"Add new\" button is clicked.\n * The parent component can listen to this and perform appropriate actions.\n */\n onAdd = output<void>();\n\n onSelectionChange = output<PmItem | null>();\n\n /**\n * The currently selected PM item.\n * Used to track and display the selected item's title and logo.\n */\n selectedPmItem = signal<PmItem | null>(null);\n\n /**\n * Disabled state for forms integration. Strongly depends on isHidden flag.\n */\n disabled = signal<boolean>(true);\n\n /**\n * Custom tooltip message for PM items.\n */\n customTooltipMessage = input<string>(\"PM\");\n\n /**\n * Custom flag for showing/hiding the PM component.\n */\n isHidden = input<boolean>(true);\n\n /**\n * Holder for incoming value from writeValue to resolve against items.\n */\n private _incomingValue: PmItem | number | string | null | undefined =\n undefined;\n\n // ControlValueAccessor callbacks\n onChange: (value: number | null) => void = () => {};\n onTouched: () => void = () => {};\n\n constructor(@Optional() @Self() public ngControl: NgControl | null) {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n\n // Resolve incoming value when items or value change\n effect(() => {\n const list = this.items();\n const incoming = this._incomingValue;\n if (incoming === undefined) return;\n\n if (incoming === null) {\n this.selectedPmItem.set(null);\n return;\n }\n\n const resolved = list?.find((i) => i.id === incoming) ?? null;\n this.selectedPmItem.set(resolved);\n });\n\n // Update disabled state based on isHidden and reset selection when hidden\n effect(() => {\n const hidden = this.isHidden();\n this.disabled.set(hidden);\n \n // Reset selected item when component becomes hidden\n if (hidden) {\n this.onClear();\n }\n });\n }\n\n /**\n * Boolean signal indicating whether the PM popover is currently visible.\n * Used to apply conditional styling or behavior when the popover is shown or hidden.\n */\n showPmPopover = signal<boolean>(false);\n\n /**\n * Called when the \"Add new\" button is clicked.\n * Emits the `onAdd` event to notify the parent component.\n */\n onAddItem(): void {\n this.onAdd.emit();\n }\n\n /**\n * Opens the tooltip when hovering over a PM item.\n */\n onShowTooltip(tooltip: NgbTooltip) {\n tooltip.open();\n }\n\n /**\n * Closes the tooltip when the mouse leaves a PM item.\n */\n onHideTooltip(tooltip: NgbTooltip) {\n tooltip.close();\n }\n\n /**\n * Called when the PM popover becomes visible.\n */\n onPmShown() {\n this.showPmPopover.set(true);\n }\n\n /**\n * Called when the PM popover is hidden.\n */\n onPmHidden() {\n this.showPmPopover.set(false);\n }\n\n /**\n * Called when a PM item is clicked.\n * Sets the `selectedPmItem` with the clicked item's data.\n */\n onSelectedItem(item: PmItem) {\n this.selectedPmItem.set(item);\n this.onSelectionChange.emit(item);\n this.onChange(item.id ?? null);\n this.onTouched();\n }\n\n /**\n * Clears the selected PM item.\n * Resets id, title and logoName.\n */\n onClear() {\n this.selectedPmItem.set(null);\n this.onSelectionChange.emit(null);\n this.onChange(null);\n this.onTouched();\n }\n\n // ControlValueAccessor implementation\n writeValue(value: number | string | null): void {\n this._incomingValue = value;\n }\n\n registerOnChange(fn: (value: number | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n}\n","@let showPm = showPmPopover() === true;\n<!-- -->\n@let selectedItem = selectedPmItem(); @let isDisabled = disabled();\n<!-- -->\n@let isPmHidden = isHidden();\n\n<ng-template #pmTooltip>\n <span class=\"tooltip-text\">{{\n selectedItem?.title ?? customTooltipMessage()\n }}</span>\n</ng-template>\n<ng-template #pmPopover>\n <div class=\"pm-popover\">\n @if (selectedItem) {\n <div class=\"clear-container\">\n <div class=\"clear\" (click)=\"onClear()\">\n <span>Clear</span>\n <svg-icon class=\"icon icon-sm\" name=\"cai-minus\"></svg-icon>\n </div>\n <div class=\"divider\"></div>\n </div>\n }\n <div class=\"add\" (click)=\"onAddItem()\">\n <span>Add new</span>\n <svg-icon class=\"icon icon-sm\" name=\"cai-plus\"></svg-icon>\n </div>\n @for (item of items(); track item.id) {\n <div\n class=\"pm-item\"\n (click)=\"onSelectedItem(item)\"\n [class.selectedDesign]=\"selectedItem?.title === item.title\"\n >\n <div class=\"icon\">\n <svg-icon\n class=\"pm-item-icon\"\n [name]=\"item.title | remapPmIcons\"\n ></svg-icon>\n </div>\n <span class=\"pm-item-text\">{{ item.title }}</span>\n <svg-icon\n class=\"icon icon-sm checkmark-icon\"\n name=\"cai-checkmark\"\n ></svg-icon>\n </div>\n }\n </div>\n</ng-template>\n\n<div\n class=\"pm-container\"\n #buttonContainer\n [class.pm-icon-selected]=\"!!selectedItem\"\n [class.pm-icon-hidden]=\"isPmHidden\"\n>\n <button\n type=\"button\"\n class=\"icon-container\"\n [class.pm-focus]=\"showPm\"\n [ngbPopover]=\"pmPopover\"\n triggers=\"click\"\n autoClose=\"outside inside\"\n container=\"body\"\n placement=\"bottom-left\"\n popoverClass=\"popover cai-dropdown pm-popover\"\n (shown)=\"onPmShown()\"\n (hidden)=\"onPmHidden()\"\n [disabled]=\"isDisabled\"\n >\n <svg-icon\n [ngbTooltip]=\"pmTooltip\"\n (mouseenter)=\"onShowTooltip(tooltip)\"\n (mouseleave)=\"onHideTooltip(tooltip)\"\n #tooltip=\"ngbTooltip\"\n [triggers]=\"isDisabled ? 'hover' : 'manual'\"\n tooltipClass=\"custom-tooltip\"\n [positionTarget]=\"buttonContainer\"\n placement=\"bottom\"\n [name]=\"selectedItem?.title | remapPmIcons\"\n class=\"pm-icon\"\n ></svg-icon>\n </button>\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * @ngdoc pipe\n * @name currencyPipe\n * @description\n * Formats a given dollar amount into a compact string (e.g., $35.21K, $1.23M).\n *\n * Usage:\n * {{ value | currency }}\n *\n * Example:\n * {{ 35210 | currency }} // outputs: $35.21K\n * {{ 1234567 | currency }} // outputs: $1.23M\n * {{ 999 | currency }} // outputs: $999\n * {{ 1234567890 | currency }} // outputs: $1.23B\n */\n@Pipe({\n name: 'currency',\n})\nexport class CurrencyPipe implements PipeTransform {\n /**\n * Transforms a numeric value into a formatted currency string.\n *\n * @param {number | string} value The dollar amount to format. Can be a number or a string that can be parsed to a number.\n * @returns {string} The formatted currency string, or '$0.00' if the input is invalid.\n */\n transform(value: number | string): string {\n let amount: number;\n if (typeof value === 'string') {\n amount = parseFloat(value);\n } else if (typeof value === 'number') {\n amount = value;\n } else {\n console.error(\n 'Invalid input for currencyPipe: value must be a number or a string convertible to a number.'\n );\n return '$0.00';\n }\n\n if (isNaN(amount)) {\n console.error('Invalid number provided to currencyPipe.');\n return '$0.00';\n }\n\n const suffixes = ['', 'K', 'M', 'B', 'T']; // K = Thousand, M = Million, B = Billion, T = Trillion\n const absAmount = Math.abs(amount);\n\n let suffixIndex = 0;\n let divisor = 1;\n\n while (absAmount >= 1000 * divisor && suffixIndex < suffixes.length - 1) {\n divisor *= 1000;\n suffixIndex++;\n }\n\n let formattedNumber = (amount / divisor).toFixed(2);\n\n return `$${formattedNumber}${suffixes[suffixIndex]}`;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Broker } from '../models';\n\n@Pipe({\n name: 'brokerProgress',\n})\nexport class BrokerProgressPipe implements PipeTransform {\n transform(\n broker: Broker,\n disable?: boolean,\n ): { activePercentageOfPaid: number; status: string | null } {\n let activePercentageOfPaid;\n let status;\n let availableCredit = broker.availableCredit || 0;\n let creditLimit = broker.creditLimit || 0;\n if (broker.availableCredit === 0) {\n activePercentageOfPaid = 100;\n status = disable ? 'disable' : 'high';\n return { activePercentageOfPaid, status };\n } else {\n activePercentageOfPaid = (+availableCredit / +creditLimit) * 100;\n }\n\n if (activePercentageOfPaid >= 0 && activePercentageOfPaid < 30) {\n status = disable ? 'disable' : 'low';\n } else if (activePercentageOfPaid > 30 && activePercentageOfPaid < 60) {\n status = disable ? 'disable' : 'medium';\n } else if (activePercentageOfPaid > 60 && activePercentageOfPaid <= 100) {\n status = disable ? 'disable' : 'high';\n } else {\n status = null;\n }\n\n return { activePercentageOfPaid, status };\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'clearTooltip',\n})\nexport class ClearTooltipPipe implements PipeTransform {\n transform(\n hasText: boolean,\n isAdding: boolean,\n isEdit: boolean,\n placeholderBehavior: string,\n multiple: boolean,\n hasResetButton?: boolean,\n canTooltipBeVisible?: boolean,\n ): string {\n if (!canTooltipBeVisible) {\n return '';\n }\n\n if (hasText && (isAdding || isEdit)) {\n return 'Cancel';\n }\n\n if (placeholderBehavior === 'static') {\n return 'Delete';\n }\n\n if (multiple) {\n return 'Clear All';\n }\n\n if (hasResetButton) {\n return 'Reset';\n }\n\n return 'Clear';\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'numberFormat',\n})\nexport class NumberFormatPipe implements PipeTransform {\n transform(value: string): string {\n if (!value) return '';\n\n if (value.includes('.')) {\n const [integerPart, decimalPart] = value.split('.');\n \n // Cap decimal places to maximum 2\n const cappedDecimalPart = decimalPart ? decimalPart.substring(0, 2) : '';\n \n // Format the integer part with commas\n const formattedInteger = integerPart.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n \n // If there's a decimal part, show it (capped at 2 places)\n if (decimalPart !== undefined) {\n return `${formattedInteger}.${cappedDecimalPart}`;\n }\n \n // If user just typed a decimal point, show it\n return `${formattedInteger}.`;\n }\n\n return value.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ValidationErrors } from '@angular/forms';\nimport { NumberFormatPipe } from '../../../pipes/number-format.pipe';\nimport { CustomError } from '../models/input.model';\n\n@Pipe({\n name: 'errorMessage',\n})\nexport class ErrorMessagePipe implements PipeTransform {\n numberFormatPipe = new NumberFormatPipe();\n\n transform(\n errors: ValidationErrors | null | undefined,\n customErrors?: CustomError[] // custom error messages to be displayed in the input\n ): string[] {\n if (!errors) return [];\n\n // Create a map of custom errors for quick lookup\n const customErrorMap = new Map<string, string | null>();\n if (customErrors) {\n customErrors.forEach((error) => {\n customErrorMap.set(error.name, error.message);\n });\n }\n\n const defaultMessages: Record<string, (value?: any) => string> = {\n required: () => 'Required',\n minlength: (value: any) => `${value.requiredLength} Characters Min`,\n maxlength: (value: any) => `${value.requiredLength} Characters Max`,\n min: (value: any) =>\n `Min ${this.numberFormatPipe.transform(String(value.min))}`,\n max: (value: any) =>\n `Max ${this.numberFormatPipe.transform(String(value.max))}`,\n hasUppercase: () => 'Must contain at least one uppercase letter',\n hasNumber: () => 'Must contain at least one number',\n hasSymbol: () => 'Must contain at least one symbol',\n passwordDontMatch: () => \"Passwords don't match\",\n };\n\n return Object.entries(errors)\n .map(([key, value]) => {\n // Check if there's a custom error for this key\n if (customErrorMap.has(key)) {\n const customMessage = customErrorMap.get(key);\n return customMessage || '';\n }\n\n // Fall back to default message\n const getMessage = defaultMessages[key];\n return getMessage ? getMessage(value) : 'Invalid';\n })\n .filter((message): message is string => message !== null); // Remove null values\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'highlightSearch',\n})\nexport class HighlightSearchPipe implements PipeTransform {\n /**\n * Formats an option for the dropdown by highlighting the search value if it exists in the option.\n * @param option - The option to format.\n * @param searchValue - The value to search and highlight within the option.\n * @returns The formatted option.\n */\n transform(\n option: string,\n searchValue: string | undefined | null,\n forDocuments?: boolean,\n ): string {\n if (\n !searchValue ||\n typeof searchValue !== 'string' ||\n searchValue.trim() === ''\n ) {\n return option;\n }\n\n const escapedSearchValue = searchValue.replace(\n /[.*+?^${}()|[\\]\\\\]/g,\n '\\\\$&',\n );\n\n const regex = new RegExp(escapedSearchValue, 'gi');\n const highlightClass = forDocuments\n ? 'cai-documents-highlight'\n : 'cai-highlight';\n\n if (option.toLowerCase().includes(searchValue.toLowerCase())) {\n return option.replace(regex, `<span class=\"${highlightClass}\">$&</span>`);\n }\n\n return option;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { CaiInputConfig, DropdownOptions } from '../models';\n\nexport interface InputClassContext {\n config: CaiInputConfig;\n hideValidation: boolean;\n isPasswordVisible: boolean;\n isInvalid: boolean;\n isValid: boolean;\n isHovered: boolean;\n hasText: boolean;\n isAdding: boolean;\n selectedOption: DropdownOptions | null;\n}\n\n@Pipe({\n name: 'inputClass',\n})\nexport class InputClassPipe implements PipeTransform {\n transform(\n context: InputClassContext | null | undefined,\n ): Record<string, boolean> {\n if (!context) {\n return {};\n }\n\n const {\n isInvalid,\n isValid,\n isHovered,\n hasText,\n hideValidation,\n config,\n isPasswordVisible,\n isAdding,\n selectedOption,\n } = context;\n\n const {\n isEdit,\n icon,\n type,\n withButtons,\n alignment,\n inverse,\n inTable,\n dropdownAutocomplete,\n add,\n placeholderBehavior,\n errorBehavior,\n removable,\n isRemovableWhenDisabled,\n textColor,\n subcontent,\n isAddress,\n size,\n strikethrough,\n hasNoClearButton,\n } = config;\n const dropdownType = config.dropdown;\n const isPassword = type === 'password' || type === 'account';\n const number = type === 'number';\n\n const hasEndItem =\n dropdownType === 'broker' ||\n dropdownType === 'contact' ||\n dropdownType === 'dispatch' ||\n dropdownType === 'ftl-dispatch' ||\n dropdownType === 'shipper';\n\n return {\n 'has-text': hasText,\n 'is-empty': !hasText,\n hovered: isHovered && dropdownType === 'multiple',\n 'has-error': isInvalid && !isEdit && !hideValidation,\n 'has-valid': isValid && !isEdit && !hideValidation,\n 'has-icon': !!icon,\n 'has-password': isPassword,\n 'has-visible': isPassword && isPasswordVisible,\n 'has-number': number && !!withButtons,\n 'has-right': alignment === 'right',\n inverse: !!inverse,\n 'has-dropdown': !!dropdownType && !dropdownAutocomplete,\n 'is-adding': (add && isAdding) || !!isEdit,\n 'has-ftl-dispatch': dropdownType === 'ftl-dispatch',\n 'has-dispatch': dropdownType === 'dispatch',\n 'fade-placeholder':\n placeholderBehavior === 'fade' ||\n (!!inTable && placeholderBehavior !== 'static'),\n 'static-placeholder': placeholderBehavior === 'static',\n 'floating-error':\n errorBehavior === 'floating' ||\n (!!inTable && placeholderBehavior !== 'static'),\n 'static-error': errorBehavior === 'static',\n 'has-selected': !!selectedOption,\n 'has-end-item': hasEndItem,\n removable: !!removable,\n 'disabled-removable': !!isRemovableWhenDisabled,\n 'in-table': !!inTable,\n 'text-color-positive': textColor === 'positive',\n 'has-multiple-dropdown': dropdownType === 'multiple',\n 'is-address': !!isAddress,\n 'has-subcontent': !!subcontent,\n 'size-22': size === 22,\n strikethrough: !!strikethrough,\n 'no-clear': !!hasNoClearButton,\n };\n }\n}\n","export class MaskHelper {\n static extractUserInput(value: string): string {\n return value.replace(/[^a-zA-Z0-9]/g, '');\n }\n\n static isPlaceholder(char: string): boolean {\n return char === '0' || char === 'a' || char === '*';\n }\n\n static charMatchesPlaceholder(char: string, placeholder: string): boolean {\n if (placeholder === '0') return /^\\d$/.test(char);\n if (placeholder === 'a') return /^[a-zA-Z]$/.test(char);\n if (placeholder === '*') return /^[a-zA-Z0-9]$/.test(char);\n return false;\n }\n\n /**\n * Applies the mask to a given string of user input.\n * @param realValue The clean user input.\n * @param mask The mask pattern.\n * @returns An object with the formatted value and the final real value.\n */\n static applyMask(\n realValue: string,\n mask: string\n ): { formattedValue: string; finalRealValue: string } {\n let formatted = '';\n let realValueIndex = 0;\n let maskIndex = 0;\n let newRealValue = '';\n\n while (realValueIndex < realValue.length && maskIndex < mask.length) {\n const maskChar = mask[maskIndex];\n const realChar = realValue[realValueIndex];\n\n if (this.isPlaceholder(maskChar)) {\n if (this.charMatchesPlaceholder(realChar, maskChar)) {\n formatted += realChar;\n newRealValue += realChar;\n maskIndex++;\n realValueIndex++;\n } else {\n break;\n }\n } else {\n formatted += maskChar;\n maskIndex++;\n }\n }\n return { formattedValue: formatted, finalRealValue: newRealValue };\n }\n}\n","import {\n Directive,\n ElementRef,\n HostListener,\n input,\n OnInit,\n} from '@angular/core';\nimport { MaskHelper } from './helpers';\n\n@Directive({\n selector: '[appPassword]',\n})\nexport class PasswordDirective implements OnInit {\n /**\n * Input property to enable or disable the password masking behavior.\n */\n appPassword = input<boolean>(true);\n\n /**\n * Input property to hide or show the password\n */\n visible = input<boolean>(false);\n\n /**\n * Input property to specify the type of the password\n */\n account = input<boolean>(false);\n\n /**\n * Input property to specify how many characters from the end of the\n * password should be revealed. Defaults to 0 (fully masked).\n */\n reveal = input<number>(0);\n\n appMask = input<string>('');\n\n max = input<number | undefined>(0);\n\n /**\n * Stores the actual, unmasked password value,\n * while the input element displays a masked version.\n */\n private realValue: string = '';\n\n constructor(private el: ElementRef<HTMLInputElement>) {}\n\n /**\n * Lifecycle hook called after Angular initializes the directive's data-bound properties.\n * If password masking is enabled, it sets up the initial masking.\n */\n ngOnInit(): void {\n if (this.appPassword() && this.reveal() > 0) {\n this.setupPasswordMasking();\n }\n }\n\n /**\n * Sets up the initial state for password masking.\n * It reads the initial value from the input (if any) as the `realValue`\n * and then updates the input's display to show the masked version.\n */\n private setupPasswordMasking(): void {\n const input = this.el.nativeElement;\n this.realValue = input.value || ''; // Assume initial value is unmasked or is the real one\n this.updateDisplayValue();\n }\n\n /**\n * HostListener for the 'input' event on the host element.\n * This is the core logic for synchronizing `realValue` with user input\n * on the masked field. It infers changes to `realValue`\n * based on `event.data`, cursor position, and the difference in length\n * between the input's current display value and the previous `realValue`.\n * @param event - The InputEvent object.\n */\n @HostListener('input', ['$event'])\n onInput(event: InputEvent): void {\n if (!this.appPassword() || !this.reveal()) return;\n const input = this.el.nativeElement;\n let cursorPosition = input.selectionStart || 0;\n const displayValue = input.value;\n const lengthDiff = displayValue.length - this.realValue.length;\n let newRealValue = this.realValue;\n\n if (event.data && lengthDiff <= 0) {\n const deletedCount = Math.abs(lengthDiff) + event.data.length;\n const replaceStart = cursorPosition - event.data.length;\n newRealValue =\n this.realValue.slice(0, Math.max(0, replaceStart)) +\n event.data +\n this.realValue.slice(Math.max(0, replaceStart) + deletedCount);\n } else if (lengthDiff > 0) {\n const addedChars =\n event.data ||\n displayValue.slice(cursorPosition - lengthDiff, cursorPosition);\n const insertPosition = cursorPosition - addedChars.length;\n newRealValue =\n this.realValue.slice(0, Math.max(0, insertPosition)) +\n addedChars +\n this.realValue.slice(Math.max(0, insertPosition));\n } else if (lengthDiff < 0) {\n const deletedCount = Math.abs(lengthDiff);\n newRealValue =\n this.realValue.slice(0, cursorPosition) +\n this.realValue.slice(cursorPosition + deletedCount);\n }\n\n // Only enforce numeric input if account() is true\n if (this.account() && !/^\\d*$/.test(newRealValue)) {\n // Revert the input field to the previous masked value and restore cursor\n this.updateDisplayValue();\n this.setCursorPosition(cursorPosition - 1); // Move cursor back\n return;\n }\n\n if (this.max()) {\n if (newRealValue.length > this.max()!) {\n this.updateDisplayValue();\n this.setCursorPosition(cursorPosition - 1); // Move cursor back\n\n return;\n }\n }\n\n if (this.appMask() && this.appMask() !== '') {\n const { formattedValue } = MaskHelper.applyMask(\n MaskHelper.extractUserInput(newRealValue),\n this.appMask()\n );\n cursorPosition =\n cursorPosition + formattedValue.length - newRealValue.length;\n newRealValue = formattedValue;\n }\n\n this.realValue = newRealValue;\n\n this.updateDisplayValue();\n this.setCursorPosition(cursorPosition);\n this.dispatchRealValueChange();\n }\n\n /**\n * HostListener for the 'cut' event.\n * Prevents default cut behavior to operate on `realValue`.\n * It copies the corresponding part of `realValue` to the clipboard\n * and updates `realValue` and the display.\n * @param event - The ClipboardEvent object.\n */\n @HostListener('cut', ['$event'])\n onCut(event: ClipboardEvent): void {\n if (!this.appPassword() || !this.reveal()) return;\n\n const input = this.el.nativeElement;\n const start = input.selectionStart || 0;\n const end = input.selectionEnd || 0;\n\n if (start !== end) {\n // If there's a selection\n event.preventDefault(); // Prevent default cut action\n const cutText = this.realValue.slice(start, end); // Cut from realValue\n event.clipboardData?.setData('text/plain', cutText);\n\n this.realValue =\n this.realValue.slice(0, start) + this.realValue.slice(end);\n\n this.updateDisplayValue();\n this.setCursorPosition(start); // Set cursor to the start of the cut area\n this.dispatchRealValueChange();\n }\n }\n\n /**\n * HostListener for the 'copy' event.\n * Prevents default copy behavior to ensure the unmasked `realValue` segment is copied.\n * @param event - The ClipboardEvent object.\n */\n @HostListener('copy', ['$event'])\n onCopy(event: ClipboardEvent): void {\n if (!this.appPassword() || !this.reveal()) return;\n\n const input = this.el.nativeElement;\n const start = input.selectionStart || 0;\n const end = input.selectionEnd || 0;\n\n if (start !== end) {\n // If there's a selection\n event.preventDefault(); // Prevent default copy action\n const copiedText = this.realValue.slice(start, end); // Copy from realValue\n event.clipboardData?.setData('text/plain', copiedText);\n }\n }\n\n /**\n * Updates the input element's display value with a masked version of `realValue`.\n * Uses '•' for masked characters. Respects the `reveal` input to show\n * a specified number of characters from the end of the password.\n * This method is responsible for creating the visual masking.\n */\n private updateDisplayValue(): void {\n if (!this.appPassword() || !this.reveal()) return;\n if (this.visible()) {\n this.el.nativeElement.value = this.realValue;\n return;\n }\n\n const revealCount = this.reveal();\n const realLength = this.realValue.length;\n let displayValue = '';\n\n if (revealCount > 0 && realLength > revealCount) {\n const actualRevealCount = Math.min(revealCount, realLength);\n // Calculate how many characters to mask\n const maskedCharsCount = realLength - actualRevealCount;\n\n if (maskedCharsCount > 0) {\n // Get the part of the real value that should be revealed\n const revealedPart = this.realValue.slice(maskedCharsCount); // Corrected from slice(realLength - actualRevealCount)\n displayValue = '•'.repeat(maskedCharsCount) + revealedPart;\n } else {\n // If all characters are to be revealed (revealCount >= realLength)\n displayValue = this.realValue;\n }\n } else {\n // Fully mask if revealCount is 0 or realValue is lesser than revealCount\n displayValue = '•'.repeat(realLength);\n }\n\n this.el.nativeElement.value = displayValue;\n }\n\n /**\n * Sets the cursor position within the input field.\n * This is crucial after `updateDisplayValue` changes the entire input value,\n * to maintain a natural cursor behavior for the user.\n * Uses `setTimeout` to ensure the operation occurs after Angular's view update.\n * @param position - The desired cursor position.\n */\n private setCursorPosition(position: number): void {\n const input = this.el.nativeElement;\n // setTimeout ensures this runs after the current browser rendering tick\n setTimeout(() => {\n // Clamp position to be within the bounds of the current display value's length\n const currentLength = input.value.length;\n const newPosition = Math.max(0, Math.min(position, currentLength));\n input.setSelectionRange(newPosition, newPosition);\n }, 0);\n }\n\n /**\n * Dispatches a custom event named 'realValueChange' from the host element.\n * The event's `detail` property contains the unmasked `realValue`.\n * This allows parent components (like your `InputComponent`) to listen for\n * changes to the actual password.\n */\n private dispatchRealValueChange(): void {\n const customEvent = new CustomEvent('realValueChange', {\n bubbles: true, // Allows event to bubble up the DOM\n composed: true, // Allows event to cross Shadow DOM boundaries\n detail: this.realValue,\n });\n this.el.nativeElement.dispatchEvent(customEvent);\n }\n\n /**\n * Public method to get the current unmasked \"real\" password value.\n * @returns The real password value as a string.\n */\n getRealValue(): string {\n return this.realValue;\n }\n\n /**\n * Public method to set the \"real\" password value from outside the directive\n * (e.g., when the parent form control's value is changed programmatically).\n * It updates the internal `realValue` and then refreshes the masked display.\n * @param value - The new real password value to set.\n */\n setRealValue(value: string): void {\n this.realValue = value || '';\n this.updateDisplayValue();\n }\n}\n","import {\n Directive,\n ElementRef,\n HostListener,\n input,\n OnInit,\n} from '@angular/core';\nimport { NumberFormatPipe } from '../../../pipes/number-format.pipe';\n\n@Directive({\n selector: '[appNumberFormat]',\n providers: [NumberFormatPipe],\n})\nexport class NumberFormatDirective implements OnInit {\n /**\n * Input property to enable or disable the number formatting.\n * Defaults to true, meaning formatting is active by default.\n */\n appNumberFormat = input<boolean>(true);\n\n /**\n *\n */\n max = input<number>();\n\n /**\n * Input property to enable or disable the number formatting.\n * Defaults to true, meaning formatting is active by default.\n */\n isNumberFormattingDisabled = input<boolean>(false);\n\n /**\n * Input property to enable or disable the number formatting.\n * Defaults to true, meaning formatting is active by default.\n */\n disableDecimals = input<boolean>(false);\n\n prefix = input<string>('');\n\n /**\n * Stores the unformatted, \"real\" numeric value of the input.\n * This is the value that should be used for calculations or form submissions,\n * as opposed to the formatted display value.\n */\n private realValue: string = '';\n\n constructor(private el: ElementRef<HTMLInputElement>) {}\n\n /**\n * Lifecycle hook that is called after Angular has initialized all data-bound\n * properties of a directive.\n * If number formatting is enabled, it sets up the initial formatting.\n */\n ngOnInit(): void {\n if (this.appNumberFormat()) {\n this.setupNumberFormatting();\n }\n }\n\n /**\n * Initializes the number formatting on the input element.\n * It extracts the initial numeric value from the input's current value\n * and then updates the display with the formatted version.\n */\n private setupNumberFormatting(): void {\n const input = this.el.nativeElement;\n // Extract numeric value from whatever might be in the input initially\n this.realValue = this.extractNumericValue(input.value || '');\n this.updateDisplayValue(); // Format and display it\n }\n\n /**\n * HostListener for the 'input' event on the host element.\n * This triggers whenever the user types or pastes content into the input.\n * It extracts the numeric value from the current input, updates the\n * display with the formatted number, restores the cursor position,\n * and dispatches a 'realValueChange' event with the unformatted numeric value.\n * @param event - The InputEvent object.\n */\n @HostListener('input', ['$event'])\n onInput(event: InputEvent): void {\n if (!this.appNumberFormat()) return; // Do nothing if formatting is disabled\n\n const input = this.el.nativeElement;\n const cursorPosition = input.selectionStart || 0;\n const oldValue = input.value;\n\n this.realValue = this.extractNumericValue(oldValue);\n if (this.max()) {\n const numericValue = Number(this.realValue);\n const maxValue = this.max() || 0;\n if (numericValue > maxValue) {\n // Cap the value at max instead of just removing last character\n this.realValue = maxValue.toString();\n }\n }\n if (this.disableDecimals()) {\n this.realValue = this.realValue.split('.')[0];\n }\n\n this.updateDisplayValue();\n const newValue = input.value;\n const newCursorPos = this.calculateCursorPosition(\n cursorPosition,\n oldValue,\n newValue,\n );\n input.setSelectionRange(newCursorPos, newCursorPos);\n\n this.dispatchRealValueChange(); // Notify parent components of the raw value change\n }\n\n /**\n * HostListener for the 'cut' event.\n * Prevents the default cut behavior to manually handle the value change.\n * It reconstructs the value after the cut, extracts the numeric part,\n * updates the display, sets the cursor, and dispatches the real value.\n * @param event - The ClipboardEvent object.\n */\n @HostListener('cut', ['$event'])\n onCut(event: ClipboardEvent): void {\n if (!this.appNumberFormat()) return;\n\n const input = this.el.nativeElement;\n const start = input.selectionStart || 0;\n const end = input.selectionEnd || 0;\n\n if (start !== end) {\n // If there's a selection\n event.preventDefault(); // Prevent default cut\n const cutText = input.value.slice(start, end);\n event.clipboardData?.setData('text', this.extractNumericValue(cutText)); // Put numeric part on clipboard\n\n // Reconstruct value without the cut part\n const oldValue = input.value;\n const valueAfterCut =\n input.value.slice(0, start) + input.value.slice(end);\n this.realValue = this.extractNumericValue(valueAfterCut);\n\n this.updateDisplayValue();\n const newValue = input.value;\n const newCursorPos = this.calculateCursorPosition(\n start,\n oldValue,\n newValue,\n );\n input.setSelectionRange(newCursorPos, newCursorPos);\n this.dispatchRealValueChange();\n }\n }\n\n /**\n * HostListener for the 'copy' event.\n * Prevents the default copy behavior if there's a selection to ensure\n * that the copied text is the unformatted numeric value of the selection,\n * rather than the potentially formatted display text.\n * @param event - The ClipboardEvent object.\n */\n @HostListener('copy', ['$event'])\n onCopy(event: ClipboardEvent): void {\n if (!this.appNumberFormat()) return;\n\n const input = this.el.nativeElement;\n const start = input.selectionStart || 0;\n const end = input.selectionEnd || 0;\n\n if (start !== end) {\n // If there's a selection\n event.preventDefault(); // Prevent default copy\n const selectedText = input.value.slice(start, end);\n // Copy the underlying numeric value of the selection\n event.clipboardData?.setData(\n 'text',\n this.extractNumericValue(selectedText),\n );\n }\n }\n\n /**\n * HostListener for the 'keydown' event.\n * Filters key presses to allow only digits, a single decimal point,\n * and control keys (Backspace, Arrows, Tab, etc.).\n * This helps maintain a valid numeric input format before the 'input' event fires.\n * @param event - The KeyboardEvent object.\n */\n @HostListener('keydown', ['$event'])\n onKeydown(event: KeyboardEvent): void {\n if (!this.appNumberFormat()) return;\n\n const controlKeys = [\n 'Backspace',\n 'Delete',\n 'ArrowLeft',\n 'ArrowRight',\n 'ArrowUp',\n 'ArrowDown',\n 'Tab',\n 'Enter',\n 'Escape',\n 'Home',\n 'End',\n ];\n\n // Allow control keys, and modifier key combinations (Ctrl+A, Ctrl+C, etc.)\n if (\n controlKeys.includes(event.key) ||\n event.ctrlKey ||\n event.metaKey ||\n event.altKey\n ) {\n return; // Don't prevent default for these\n }\n\n // Allow a single decimal point if not already present in the realValue\n if (\n event.key === '.' &&\n !this.realValue.includes('.') &&\n !this.disableDecimals()\n ) {\n // If the input is empty or realValue is empty, prepend '0' before the decimal\n if (this.realValue === '' || this.realValue === '0') {\n event.preventDefault();\n this.realValue = '0.';\n this.updateDisplayValue();\n this.setCursorToEnd();\n this.dispatchRealValueChange();\n }\n return;\n }\n\n // Check if typing a digit would exceed max\n if (/^\\d$/.test(event.key) && this.max()) {\n const input = this.el.nativeElement;\n const start = input.selectionStart || 0;\n const end = input.selectionEnd || 0;\n const currentValue = input.value;\n\n // Simulate what the value would be after this keypress\n const beforeSelection = currentValue.slice(0, start);\n const afterSelection = currentValue.slice(end);\n const simulatedValue = beforeSelection + event.key + afterSelection;\n\n // Extract numeric value from simulated result\n const simulatedNumericValue = this.extractNumericValue(simulatedValue);\n const simulatedNumber = Number(simulatedNumericValue);\n\n // Prevent if it would exceed max\n if (simulatedNumber > (this.max() || 0)) {\n event.preventDefault();\n return;\n }\n }\n\n // Prevent non-digit keys\n if (!/^\\d$/.test(event.key)) {\n event.preventDefault();\n }\n }\n\n /**\n * Extracts a clean numeric string from a given value.\n * It removes any non-digit characters except for a single decimal point.\n * It also ensures that there's only one decimal point and limits\n * the decimal part to two digits.\n * @param value - The string value to clean.\n * @returns A string representing the extracted numeric value.\n */\n private extractNumericValue(value: string): string {\n // Remove all non-digit characters except for the decimal point\n value = value.toString();\n let cleanValue = value.replace(/[^\\d.]/g, '');\n\n // Handle multiple decimal points: keep only the first one\n const parts = cleanValue.split('.');\n if (parts.length > 1) {\n const integerPart = parts[0];\n const decimalPart = parts.slice(1).join(''); // Join back any subsequent parts\n cleanValue = `${integerPart}.${decimalPart}`;\n }\n\n // Limit decimal part to two digits\n if (cleanValue.includes('.')) {\n const [integerPart, decimalPart] = cleanValue.split('.');\n const cappedDecimalPart = decimalPart ? decimalPart.substring(0, 2) : '';\n cleanValue = `${integerPart}.${cappedDecimalPart}`;\n }\n\n return cleanValue;\n }\n\n /**\n * Updates the input element's display value with the formatted version\n * of the current `realValue`.\n * It uses the `NumberFormatPipe` for formatting.\n */\n private updateDisplayValue(): void {\n const input = this.el.nativeElement;\n let formattedValue = '';\n\n if (this.realValue === '') {\n input.value = '';\n return;\n }\n\n let [integerPart, decimalPart] = this.realValue.split('.');\n\n if (integerPart.length > 1) {\n integerPart = integerPart.replace(/^0+/, '') || '0';\n }\n\n // If number formatting is disabled, skip thousand separators and decimals\n if (this.isNumberFormattingDisabled()) {\n formattedValue = integerPart;\n\n // Still add decimal part if it exists and formatting is not disabled\n if (this.realValue.endsWith('.')) {\n formattedValue = formattedValue + '.';\n } else if (decimalPart !== undefined) {\n formattedValue = formattedValue + '.' + decimalPart;\n }\n } else {\n // Use full formatting with NumberFormatPipe\n const formattedInteger = new NumberFormatPipe().transform(integerPart);\n\n if (this.realValue.endsWith('.')) {\n formattedValue = formattedInteger + '.';\n } else if (decimalPart !== undefined) {\n formattedValue = formattedInteger + '.' + decimalPart;\n } else {\n formattedValue = formattedInteger;\n }\n }\n\n if (this.prefix()) {\n formattedValue = this.prefix() + formattedValue;\n }\n\n input.value = formattedValue;\n }\n\n /**\n * Sets the cursor position to the end of the input field.\n * This is typically called after the input value is reformatted.\n */\n private setCursorToEnd(): void {\n const input = this.el.nativeElement;\n const length = input.value.length;\n input.setSelectionRange(length, length);\n }\n\n /**\n * Calculates the correct cursor position after formatting.\n * Accounts for added or removed thousand separators and prefix.\n * @param oldCursorPos - The cursor position before formatting\n * @param oldValue - The value before formatting\n * @param newValue - The value after formatting\n * @returns The new cursor position\n */\n private calculateCursorPosition(\n oldCursorPos: number,\n oldValue: string,\n newValue: string,\n ): number {\n const prefixLength = this.prefix().length;\n\n // Remove prefix from both values for comparison\n const oldValueWithoutPrefix = oldValue.startsWith(this.prefix())\n ? oldValue.substring(prefixLength)\n : oldValue;\n const newValueWithoutPrefix = newValue.startsWith(this.prefix())\n ? newValue.substring(prefixLength)\n : newValue;\n\n // Adjust cursor position relative to prefix\n let adjustedOldCursorPos = oldCursorPos - prefixLength;\n if (adjustedOldCursorPos < 0) adjustedOldCursorPos = 0;\n\n // Count digits before cursor in old value (excluding prefix)\n const beforeCursor = oldValueWithoutPrefix.substring(\n 0,\n adjustedOldCursorPos,\n );\n const digitsBeforeCursor = (beforeCursor.match(/[\\d.]/g) || []).length;\n\n // Find position in new value where we have the same number of digits\n let digitCount = 0;\n let newCursorPos = prefixLength;\n\n for (let i = 0; i < newValueWithoutPrefix.length; i++) {\n if (/[\\d.]/.test(newValueWithoutPrefix[i])) {\n digitCount++;\n if (digitCount >= digitsBeforeCursor) {\n newCursorPos = prefixLength + i + 1;\n break;\n }\n }\n }\n\n // If we haven't set position yet (edge case), set to end\n if (digitCount < digitsBeforeCursor) {\n newCursorPos = newValue.length;\n }\n\n return newCursorPos;\n }\n\n /**\n * Dispatches a custom event named 'realValueChange' from the host element.\n * The event's `detail` property contains the unformatted `realValue`.\n * This allows parent components or other directives to listen for changes\n * to the underlying numeric value.\n */\n private dispatchRealValueChange(): void {\n let number = Number(this.realValue) + '';\n if (this.realValue === '') number = '';\n const customEvent = new CustomEvent('realValueChange', {\n bubbles: true, // Allows event to bubble up the DOM\n composed: true, // Allows event to cross Shadow DOM boundaries\n detail: number,\n });\n this.el.nativeElement.dispatchEvent(customEvent);\n }\n\n /**\n * Public method to get the current unformatted \"real\" numeric value.\n * @returns The real numeric value as a string.\n */\n getRealValue(): string {\n return this.realValue;\n }\n\n /**\n * Public method to set the \"real\" numeric value from outside the directive.\n * It extracts the numeric part from the provided value and updates the\n * input's display with the formatted version.\n * @param value - The new value to set (can be formatted or unformatted).\n */\n setRealValue(value: string): void {\n this.realValue = this.extractNumericValue(value || '');\n this.updateDisplayValue();\n }\n}\n","import {\n Directive,\n ElementRef,\n HostListener,\n input,\n OnInit,\n} from '@angular/core';\nimport { MaskHelper } from './helpers';\n\n@Directive({\n selector: '[appMask]',\n})\nexport class MaskDirective implements OnInit {\n /**\n * The mask pattern to apply.\n * Placeholders:\n * '0' - Digit (0-9)\n * 'a' - Letter (a-z, A-Z)\n * '*' - Alphanumeric (0-9, a-z, A-Z)\n * @example '(000) 000-0000' for a phone number.\n */\n appMask = input<string>('');\n\n reveal = input<number>(0);\n\n /**\n * Stores the unmasked, \"real\" value of the input, containing only\n * the characters entered by the user that fit the mask placeholders.\n */\n private realValue: string = '';\n\n constructor(private el: ElementRef<HTMLInputElement>) {}\n\n ngOnInit(): void {\n if (this.appMask() && this.el.nativeElement.value) {\n this.formatValue(this.el.nativeElement.value);\n this.setCursorToEnd();\n }\n }\n\n /**\n * HostListener for the 'input' event. This is the primary handler for\n * formatting the value as the user types or pastes.\n */\n @HostListener('input', ['$event'])\n onInput(event: InputEvent): void {\n if (!this.appMask() || this.reveal() !== 0) return;\n const input = this.el.nativeElement;\n const cursorPosition = input.selectionStart || 0;\n const oldValue = input.value;\n\n this.formatValue(input.value);\n const newCursorPos = this.calculateCursorPosition(cursorPosition, oldValue);\n input.setSelectionRange(newCursorPos, newCursorPos);\n //this.dispatchRealValueChange();\n }\n\n /**\n * HostListener for the 'paste' event. It intercepts pasted content,\n * cleans it, and integrates it into the masked value.\n */\n @HostListener('paste', ['$event'])\n onPaste(event: ClipboardEvent): void {\n if (!this.appMask()) return;\n //event.preventDefault();\n //const pastedData = event.clipboardData?.getData('text') || '';\n //this.formatValue(this.realValue + pastedData);\n //this.dispatchRealValueChange();\n }\n\n /**\n * HostListener for the 'copy' event. Ensures that copying a selection\n * from the input copies the unmasked, \"real\" value.\n */\n @HostListener('copy', ['$event'])\n onCopy(event: ClipboardEvent): void {\n if (!this.appMask()) return;\n const selection = this.el.nativeElement.value.substring(\n this.el.nativeElement.selectionStart || 0,\n this.el.nativeElement.selectionEnd || 0,\n );\n if (selection) {\n event.preventDefault();\n const unmaskedSelection = MaskHelper.extractUserInput(selection);\n //event.clipboardData?.setData('text/plain', unmaskedSelection);\n event.clipboardData?.setData('text/plain', selection);\n }\n }\n\n /**\n * HostListener for the 'cut' event. Ensures cutting a selection removes\n * the corresponding part from the real value and reformats the input.\n */\n @HostListener('cut', ['$event'])\n onCut(event: ClipboardEvent): void {\n if (!this.appMask()) return;\n const input = this.el.nativeElement;\n const start = input.selectionStart || 0;\n const end = input.selectionEnd || 0;\n if (start !== end) {\n event.preventDefault();\n const selection = input.value.substring(start, end);\n const unmaskedSelection = MaskHelper.extractUserInput(selection);\n //event.clipboardData?.setData('text/plain', unmaskedSelection);\n event.clipboardData?.setData('text/plain', selection);\n\n const oldValue = input.value;\n const valueBefore = MaskHelper.extractUserInput(\n input.value.substring(0, start),\n );\n const valueAfter = MaskHelper.extractUserInput(\n input.value.substring(end),\n );\n this.formatValue(valueBefore + valueAfter);\n const newCursorPos = this.calculateCursorPosition(start, oldValue);\n input.setSelectionRange(newCursorPos, newCursorPos);\n //this.dispatchRealValueChange();\n }\n }\n\n /**\n * HostListener for the 'keydown' event. It validates key presses against\n * the mask pattern, preventing invalid characters from being entered.\n */\n @HostListener('keydown', ['$event'])\n onKeydown(event: KeyboardEvent): void {\n const mask = this.appMask();\n if (!mask) return;\n\n const controlKeys = [\n 'Backspace',\n 'Delete',\n 'ArrowLeft',\n 'ArrowRight',\n 'Tab',\n 'Enter',\n 'Escape',\n 'Home',\n 'End',\n ];\n if (controlKeys.includes(event.key) || event.metaKey || event.ctrlKey) {\n return;\n }\n\n const placeholders = mask.replace(/[^0a*]/g, '');\n const selectionStart = this.el.nativeElement.selectionStart || 0;\n const selectionEnd = this.el.nativeElement.selectionEnd || 0;\n const hasSelection = selectionStart !== selectionEnd;\n\n // Only prevent input if at capacity AND no text is selected\n if (this.realValue.length >= placeholders.length && !hasSelection) {\n event.preventDefault();\n return;\n }\n\n // Determine which placeholder position to check\n let placeholderIndex: number;\n if (hasSelection) {\n // When there's a selection, check the placeholder at the selection start\n // We need to map the display position to the real value position\n const valueBefore = this.el.nativeElement.value.substring(\n 0,\n selectionStart,\n );\n const realValueBefore = MaskHelper.extractUserInput(valueBefore);\n placeholderIndex = realValueBefore.length;\n } else {\n placeholderIndex = this.realValue.length;\n }\n\n const nextPlaceholder = placeholders[placeholderIndex];\n if (!MaskHelper.charMatchesPlaceholder(event.key, nextPlaceholder)) {\n event.preventDefault();\n }\n }\n\n /**\n * The core formatting logic. It takes a value, extracts the valid user\n * input, applies the mask, updates the display, and dispatches the change.\n * @param value The current value from the input field.\n */\n private formatValue(value: string): void {\n const mask = this.appMask();\n if (!mask) return;\n\n const extractedValue = MaskHelper.extractUserInput(value);\n\n const { formattedValue, finalRealValue } = MaskHelper.applyMask(\n extractedValue,\n mask,\n );\n this.realValue = finalRealValue;\n\n this.el.nativeElement.value = formattedValue;\n }\n\n /**\n * Sets the cursor position to the end of the input field.\n */\n private setCursorToEnd(): void {\n const len = this.el.nativeElement.value.length;\n this.el.nativeElement.setSelectionRange(len, len);\n }\n\n /**\n * Calculates the correct cursor position after formatting.\n * Accounts for mask characters that are automatically inserted.\n * @param oldCursorPos - The cursor position before formatting\n * @param oldValue - The value before formatting\n * @returns The new cursor position\n */\n private calculateCursorPosition(\n oldCursorPos: number,\n oldValue: string,\n ): number {\n const newValue = this.el.nativeElement.value;\n\n // Count user input characters before cursor in old value\n const beforeCursor = oldValue.substring(0, oldCursorPos);\n const userCharsBeforeCursor =\n MaskHelper.extractUserInput(beforeCursor).length;\n\n // Find position in new value where we have the same number of user input characters\n let userCharCount = 0;\n let newCursorPos = 0;\n\n for (let i = 0; i < newValue.length; i++) {\n // Check if this is a user input character (not a mask character)\n const extractedSoFar = MaskHelper.extractUserInput(\n newValue.substring(0, i + 1),\n );\n if (extractedSoFar.length > userCharCount) {\n userCharCount++;\n if (userCharCount > userCharsBeforeCursor) {\n newCursorPos = i;\n break;\n }\n }\n newCursorPos = i + 1;\n }\n\n return newCursorPos;\n }\n\n private dispatchRealValueChange(): void {\n const customEvent = new CustomEvent('realValueChange', {\n bubbles: true,\n composed: true,\n detail: this.realValue,\n });\n this.el.nativeElement.dispatchEvent(customEvent);\n }\n\n /**\n * Public method to get the current unmasked \"real\" value.\n * @returns The real value as a string.\n */\n public getRealValue(): string {\n return this.realValue;\n }\n\n /**\n * Public method to set the \"real\" value from outside the directive.\n * @param value The new value to set.\n */\n public setRealValue(value: string): void {\n if (this.appMask()) {\n this.formatValue(value || '');\n this.setCursorToEnd();\n } else {\n this.el.nativeElement.value = value || '';\n }\n }\n}\n","import {\n Directive,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n Output,\n} from '@angular/core';\n\n@Directive({\n selector: '[caiInfiniteScroll]',\n standalone: true,\n})\nexport class InfiniteScrollDirective {\n @Input() scrollThreshold: number = 100; // Distance from bottom in pixels\n @Input() debounceTime: number = 100; // Debounce time in milliseconds\n @Output() scrolledToBottom = new EventEmitter<void>();\n\n private debounceTimer: ReturnType<typeof setTimeout> | undefined;\n private isLoading = false;\n\n constructor(private elementRef: ElementRef) {}\n\n @HostListener('scroll', ['$event'])\n onScroll(event: Event): void {\n if (this.isLoading) return;\n\n // Clear previous timer\n if (this.debounceTimer) {\n clearTimeout(this.debounceTimer);\n }\n\n // Set debounce timer\n this.debounceTimer = setTimeout(() => {\n this.checkScrollPosition(event);\n }, this.debounceTime);\n }\n\n private checkScrollPosition(event: Event): void {\n const element = event.target as HTMLElement;\n const scrollTop = element.scrollTop;\n const scrollHeight = element.scrollHeight;\n const clientHeight = element.clientHeight;\n\n // Calculate distance from bottom\n const distanceFromBottom = scrollHeight - (scrollTop + clientHeight);\n\n // Check if we're within the threshold distance from bottom\n if (distanceFromBottom <= this.scrollThreshold) {\n this.isLoading = true;\n this.scrolledToBottom.emit();\n\n // Reset loading state after a short delay to prevent rapid firing\n setTimeout(() => {\n this.isLoading = false;\n }, 500);\n }\n }\n\n // Public method to reset loading state (useful when new data is loaded)\n public resetLoadingState(): void {\n this.isLoading = false;\n }\n}\n","import {\n Directive,\n ElementRef,\n EventEmitter,\n Input,\n Output,\n OnInit,\n OnDestroy,\n} from '@angular/core';\n\n@Directive({\n selector: '[caiIntersectionObserver]',\n standalone: true,\n})\nexport class IntersectionObserverDirective implements OnInit, OnDestroy {\n @Input() threshold: number = 0.1; // Percentage of element that must be visible (0.0 to 1.0)\n @Input() rootMargin: string = '0px'; // Margin around the root\n @Output() inView = new EventEmitter<boolean>();\n\n private observer: IntersectionObserver | null = null;\n\n constructor(private elementRef: ElementRef) {}\n\n ngOnInit(): void {\n this.createObserver();\n }\n\n ngOnDestroy(): void {\n if (this.observer) {\n this.observer.disconnect();\n }\n }\n\n private createObserver(): void {\n const options: IntersectionObserverInit = {\n threshold: this.threshold,\n rootMargin: this.rootMargin,\n };\n\n this.observer = new IntersectionObserver((entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n this.inView.emit(true);\n }\n });\n }, options);\n\n this.observer.observe(this.elementRef.nativeElement);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Size } from '../models';\n\ninterface AvatarClassesInput {\n size: Size;\n color?: string | null;\n isOwner?: boolean | null;\n inverse: boolean;\n rounded: boolean;\n customHoverSize?: number;\n hover: boolean;\n}\n\n@Pipe({\n name: 'avatarClasses',\n})\nexport class AvatarClassesPipe implements PipeTransform {\n private readonly colorMap: Record<string, string> = {\n Blue: 'blue',\n Green: 'green',\n Red: 'red',\n Yellow: 'yellow',\n Purple: 'purple',\n Gold: 'gold',\n 'Light Green': 'light-green',\n Orange: 'orange',\n 'Light Blue': 'light-blue',\n Pink: 'pink',\n Brown: 'brown',\n Gray: 'gray',\n Lime: 'lime',\n Navy: 'navy',\n Azure: 'azure',\n Magenta: 'magenta',\n };\n\n private readonly sizeMap: Record<Size, string> = {\n 18: 'xs',\n 22: 'sm',\n 28: 'mod',\n 32: 'md',\n 74: 'lg',\n 160: 'xl',\n };\n\n transform({\n size,\n color,\n isOwner,\n inverse,\n rounded,\n customHoverSize,\n hover,\n }: AvatarClassesInput): string {\n const classes: string[] = [];\n\n // Add owner class\n if (isOwner) {\n classes.push('is-owner');\n }\n\n // Add inverse class\n if (inverse) {\n classes.push('inverse');\n }\n\n // Add rounded class\n if (rounded) {\n classes.push('rounded');\n }\n\n // Add custom hover size class\n if (customHoverSize) {\n classes.push('has-custom-hover-size');\n }\n\n // Add size class\n const sizeClass = this.sizeMap[size];\n if (sizeClass) {\n classes.push(sizeClass);\n }\n\n // Add color class\n if (color) {\n const colorClass = this.colorMap[color];\n if (colorClass) {\n classes.push(colorClass);\n }\n }\n\n // Add hover class\n if (hover) {\n classes.push('hover');\n }\n\n return classes.join(' ');\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'initials',\n})\nexport class InitialsPipe implements PipeTransform {\n transform({\n firstName,\n lastName,\n fullName,\n }: {\n firstName?: string | null;\n lastName?: string | null;\n fullName?: string | null;\n }): string {\n let initials = '';\n if (fullName) {\n initials =\n fullName.split(' ')[0].charAt(0).toUpperCase() +\n fullName.split(' ')[1].charAt(0).toUpperCase();\n } else {\n if (firstName) {\n initials += firstName.charAt(0).toUpperCase();\n }\n if (lastName) {\n initials += lastName.charAt(0).toUpperCase();\n }\n }\n return initials;\n }\n}\n","import { Component, input } from '@angular/core';\n\n// Models\nimport { Driver, Size } from './models';\n\n// Pipes\nimport { AvatarClassesPipe } from './pipes/avatar-classes.pipe';\nimport { InitialsPipe } from './pipes/initials.pipe';\n\n/**\n * Represents a user avatar component.\n */\n@Component({\n selector: 'cai-avatar',\n templateUrl: './avatar.component.html',\n styleUrl: './avatar.component.scss',\n imports: [\n // Pipes\n AvatarClassesPipe,\n InitialsPipe,\n ],\n})\nexport class AvatarComponent {\n /**\n * The driver object containing information to display in the avatar.\n * This input is required.\n * @type {Driver}\n */\n driver = input.required<Driver>();\n\n /**\n * The size of the avatar in pixels.\n * @type {Size}\n */\n size = input<Size>(18);\n\n /**\n * Whether the avatar should be rounded or not.\n * @type {boolean}\n */\n rounded = input<boolean>(false);\n\n /**\n * Whether the owner element should be dark or light\n * @type {boolean}\n */\n inverse = input<boolean>(false);\n\n /**\n * The tooltip to display when hovering over the avatar.\n * @type {string}\n */\n tooltip = input<string | null>(null);\n\n /**\n * The size to apply when hovering over the avatar.\n * @type {number}\n */\n customHoverSize = input<number>();\n\n /**\n * Whether the avatar should be hovered or not.\n * @type {boolean}\n */\n hover = input<boolean>(true);\n}\n","@let firstName = driver()?.firstName; @let lastName = driver()?.lastName;\n@let isOwner = driver()?.owner;\n@let color = driver()?.colorFlag?.name ?? driver()?.avatarColor;\n@let avatarUrl = driver()?.avatarFile?.url ?? driver()?.avatarUrl;\n@let fullName = driver()?.fullName;\n\n<div\n class=\"avatar\"\n [class]=\"\n {\n size: size(),\n color: color,\n isOwner: isOwner,\n inverse: inverse(),\n rounded: rounded(),\n customHoverSize: customHoverSize(),\n hover: hover(),\n } | avatarClasses\n \"\n [style.--hover-size]=\"'calc(' + customHoverSize() + ' / ' + size() + ')'\"\n>\n @if (avatarUrl) {\n <img class=\"avatar-image\" [src]=\"avatarUrl\" />\n }\n <p class=\"avatar-initials\">\n {{ { firstName, lastName, fullName } | initials }}\n </p>\n</div>\n","import {\n Bank,\n Broker,\n ColorOption,\n Contact,\n DepartmentContactsPair,\n Dispatch,\n DispatchBoard,\n Dispatcher,\n DropdownOption,\n Franchise,\n FuelCard,\n FuelStopStore,\n Hazardous,\n MakeOption,\n Owner,\n PMOption,\n Provider,\n Shipper,\n SplitDriverBoard,\n SplitTrailerBoard,\n SplitTruckBoard,\n State,\n TollOption,\n TrailerType,\n TruckType,\n CaiInputConfig,\n DropdownArrays,\n DropdownOptions,\n} from '../../models';\n\nimport { CastableType, CastableTypeMap } from '../constants/cast.constants';\n\nexport class InputHelper {\n static hasProperty<T extends object>(\n obj: T,\n prop: PropertyKey,\n ): prop is keyof T {\n return prop in obj;\n }\n\n static getOptionValue(\n value: string,\n options: DropdownOptions[],\n optionValue: keyof DropdownOptions,\n config: CaiInputConfig,\n ): {\n newValue?: string;\n selectedOption?: DropdownOptions;\n multipleSelectedOptions?: DropdownOptions[];\n } {\n let newValue;\n let selectedOption;\n let multipleSelectedOptions;\n\n switch (config.dropdown) {\n case 'dispatch':\n case 'ftl-dispatch':\n // TODO: Leave only board variant once backend is fixed\n if (this.hasProperty(options[0], 'dispatches')) {\n for (const board of (options as DispatchBoard[])!) {\n const dispatch = board.dispatches.find((dispatch) => {\n if (optionValue && this.hasProperty(dispatch, optionValue)) {\n return dispatch[optionValue]?.toString() === value?.toString();\n } else {\n return dispatch.id?.toString() === value?.toString();\n }\n });\n if (dispatch) {\n selectedOption = dispatch;\n }\n newValue = '';\n }\n } else {\n const dispatch = (options as Dispatch[])!.find((dispatch) => {\n if (optionValue && this.hasProperty(dispatch, optionValue)) {\n return dispatch[optionValue]?.toString() === value?.toString();\n } else {\n return dispatch.id?.toString() === value?.toString();\n }\n });\n if (dispatch) {\n selectedOption = dispatch;\n }\n newValue = '';\n }\n break;\n case 'broker':\n const broker = (options as Broker[])!.find((broker) => {\n if (optionValue && this.hasProperty(broker, optionValue)) {\n return broker[optionValue]?.toString() === value?.toString();\n } else {\n return broker.id?.toString() === value?.toString();\n }\n });\n if (broker) {\n selectedOption = broker;\n }\n newValue = '';\n break;\n case 'contact':\n for (const departmentContactsPair of options as DepartmentContactsPair[]) {\n const contact = departmentContactsPair.contacts?.find((contact) => {\n if (optionValue && this.hasProperty(contact, optionValue)) {\n return contact[optionValue]?.toString() === value?.toString();\n } else {\n return contact.id?.toString() === value?.toString();\n }\n });\n if (contact) {\n selectedOption = contact;\n }\n newValue = '';\n }\n break;\n case 'shipper':\n const shipper = (options as Shipper[])!.find((shipper) => {\n if (optionValue && this.hasProperty(shipper, optionValue)) {\n return shipper[optionValue]?.toString() === value?.toString();\n } else {\n return shipper.id?.toString() === value?.toString();\n }\n });\n if (shipper) {\n selectedOption = shipper;\n }\n newValue = '';\n break;\n case 'bank':\n const bank = (options as Bank[])!.find((bank) => {\n if (optionValue && this.hasProperty(bank, optionValue)) {\n return bank[optionValue]?.toString() === value?.toString();\n } else {\n return bank.id?.toString() === value?.toString();\n }\n });\n if (bank) {\n selectedOption = bank;\n }\n newValue = '';\n break;\n case 'provider':\n const provider = (options as Provider[])!.find((provider) => {\n if (optionValue && this.hasProperty(provider, optionValue)) {\n return provider[optionValue]?.toString() === value?.toString();\n } else {\n return provider.id?.toString() === value?.toString();\n }\n });\n if (provider) {\n selectedOption = provider;\n }\n newValue = '';\n\n break;\n case 'dispatcher':\n const dispatcher = (options as Dispatcher[])!.find((dispatcher) => {\n if (optionValue && this.hasProperty(dispatcher, optionValue)) {\n return dispatcher[optionValue]?.toString() === value?.toString();\n } else {\n return dispatcher.id?.toString() === value?.toString();\n }\n });\n if (dispatcher) {\n selectedOption = dispatcher;\n }\n newValue = '';\n break;\n case 'truck':\n const truck = (options as TruckType[])!.find((truck) => {\n if (optionValue && this.hasProperty(truck, optionValue)) {\n return truck[optionValue]?.toString() === value?.toString();\n } else {\n return truck.id?.toString() === value?.toString();\n }\n });\n if (truck) {\n selectedOption = truck;\n }\n newValue = '';\n break;\n case 'trailer':\n const trailer = (options as TrailerType[])!.find((trailer) => {\n if (optionValue && this.hasProperty(trailer, optionValue)) {\n return trailer[optionValue]?.toString() === value?.toString();\n } else {\n return trailer.id?.toString() === value?.toString();\n }\n });\n if (trailer) {\n selectedOption = trailer;\n }\n newValue = '';\n break;\n case 'hazardous':\n const hazardous = (options as Hazardous[])!.find((hazardous) => {\n if (optionValue && this.hasProperty(hazardous, optionValue)) {\n return hazardous[optionValue]?.toString() === value?.toString();\n } else {\n return hazardous.id?.toString() === value?.toString();\n }\n });\n if (hazardous) {\n selectedOption = hazardous;\n }\n newValue = '';\n break;\n case 'owner':\n const owner = (options as Owner[])!.find((owner) => {\n if (optionValue && this.hasProperty(owner, optionValue)) {\n return owner[optionValue]?.toString() === value?.toString();\n } else {\n return owner.id?.toString() === value?.toString();\n }\n });\n if (owner) {\n selectedOption = owner;\n }\n newValue = '';\n break;\n case 'state':\n const state = (options as State[])!.find((state) => {\n if (optionValue && this.hasProperty(state, optionValue)) {\n return state[optionValue]?.toString() === value?.toString();\n } else {\n return state.id?.toString() === value?.toString();\n }\n });\n if (state) {\n selectedOption = state;\n }\n newValue = '';\n break;\n case 'fuelcard':\n const fuelcard = (options as FuelCard[])!.find((fuelcard) => {\n if (optionValue && this.hasProperty(fuelcard, optionValue)) {\n return fuelcard[optionValue]?.toString() === value?.toString();\n } else {\n return fuelcard.id?.toString() === value?.toString();\n }\n });\n if (fuelcard) {\n selectedOption = fuelcard;\n }\n newValue = '';\n break;\n case 'multiple':\n const multipleOptions = (options as DropdownOption[])!.filter(\n (option) => {\n if (optionValue && this.hasProperty(option, optionValue)) {\n return value.includes(option[optionValue]?.toString() || '');\n } else {\n return value.includes(option.id?.toString() || '');\n }\n },\n );\n\n if (!!multipleOptions.length) {\n multipleSelectedOptions = multipleOptions;\n }\n newValue = '';\n\n break;\n case 'pm':\n const pm = (options as PMOption[])!.find((pm) => {\n if (optionValue && this.hasProperty(pm, optionValue)) {\n return pm[optionValue]?.toString() === value?.toString();\n } else {\n return pm.id?.toString() === value?.toString();\n }\n });\n if (pm) {\n selectedOption = pm;\n }\n newValue = '';\n break;\n case 'make':\n const make = (options as MakeOption[])!.find((make) => {\n if (optionValue && this.hasProperty(make, optionValue)) {\n return make[optionValue]?.toString() === value?.toString();\n } else {\n return make.id?.toString() === value?.toString();\n }\n });\n if (make) {\n selectedOption = make;\n }\n newValue = '';\n break;\n case 'toll':\n (options as TollOption[]).forEach((toll) => {\n const transponder = toll.tollTransponders?.find((transponder) => {\n if (optionValue && this.hasProperty(transponder, optionValue)) {\n return transponder[optionValue]?.toString() === value?.toString();\n } else {\n return transponder.id?.toString() === value?.toString();\n }\n });\n if (transponder) {\n selectedOption = transponder;\n }\n newValue = '';\n });\n\n break;\n case 'color':\n const color = (options as ColorOption[])!.find((color) => {\n if (optionValue && this.hasProperty(color, optionValue)) {\n return color[optionValue]?.toString() === value?.toString();\n } else {\n return color.id?.toString() === value?.toString();\n }\n });\n if (color) {\n selectedOption = color;\n }\n newValue = '';\n break;\n case 'split-driver':\n for (const board of options as SplitDriverBoard[]) {\n const driver = board.drivers?.find((driver) => {\n if (optionValue && this.hasProperty(driver, optionValue)) {\n return driver[optionValue]?.toString() === value?.toString();\n } else {\n return driver.id?.toString() === value?.toString();\n }\n });\n if (driver) {\n selectedOption = driver;\n }\n newValue = '';\n }\n break;\n case 'split-truck':\n for (const board of options as SplitTruckBoard[]) {\n const truck = board.trucks?.find((truck) => {\n if (optionValue && this.hasProperty(truck, optionValue)) {\n return truck[optionValue]?.toString() === value?.toString();\n } else {\n return truck.id?.toString() === value?.toString();\n }\n });\n if (truck) {\n selectedOption = truck;\n }\n newValue = '';\n }\n break;\n case 'split-trailer':\n for (const board of options as SplitTrailerBoard[]) {\n const trailer = board.trailers?.find((trailer) => {\n if (optionValue && this.hasProperty(trailer, optionValue)) {\n return trailer[optionValue]?.toString() === value?.toString();\n } else {\n return trailer.id?.toString() === value?.toString();\n }\n });\n if (trailer) {\n selectedOption = trailer;\n }\n newValue = '';\n }\n break;\n case 'subcontent':\n break;\n case true:\n const option = (options as DropdownOption[])!.find((option) => {\n if (optionValue && this.hasProperty(option, optionValue)) {\n return option[optionValue]?.toString() === value?.toString();\n } else {\n return option.id?.toString() === value?.toString();\n }\n });\n if (option) {\n if (!config.dropdownAutocomplete) {\n selectedOption = option;\n }\n if ((config.search && !config.dropdownAutocomplete) || config.add) {\n newValue = '';\n } else {\n newValue = option[config.optionLabel || 'label']?.toString() || '';\n }\n } else {\n newValue = '';\n }\n break;\n default:\n break;\n }\n\n return {\n newValue,\n selectedOption,\n multipleSelectedOptions,\n };\n }\n\n // Type-safe casting for templates\n static cast<T extends CastableType>(\n value: unknown,\n type: T,\n ): CastableTypeMap[T] | null {\n return value as CastableTypeMap[T];\n }\n\n static getSearchedDropdownOptions(\n options: DropdownArrays,\n value: string | undefined | null,\n type: CaiInputConfig['dropdown'],\n shouldSearch?: boolean,\n foldedBoards?: number[],\n label?: string,\n openGroup?: number | null,\n isOpen?: boolean,\n ): any[] {\n if (!isOpen) {\n return [];\n }\n\n const optionLabel = label || 'label';\n\n if (!Array.isArray(options)) {\n return [];\n }\n\n if (!options.length) {\n return [];\n }\n\n if (typeof value !== 'string') {\n // For fuel-stop-transaction, we still need to process openGroup logic even without search\n if (type === 'fuel-stop-transaction') {\n let franchises = (options as Franchise[]) || [];\n\n // Process each franchise based on openGroup, even without search\n franchises = franchises.map((franchise) => {\n const isOpen = openGroup === franchise.id;\n\n if (!isOpen) {\n // Franchise is closed - show franchise but no stores\n return {\n ...franchise,\n fuelStopStores: [],\n };\n }\n\n // Franchise is open - show franchise with stores\n return franchise;\n });\n\n return franchises as Franchise[];\n }\n\n return options;\n }\n\n const searchValue = value?.trim().toLowerCase();\n\n switch (type) {\n case 'dispatch':\n case 'ftl-dispatch':\n if (!(options as DispatchBoard[]) || !(options as Dispatch[]))\n return [];\n\n // TODO: Leave only board variant once backend is fixed\n let dispatches = (options as DispatchBoard[]) || [];\n\n if (!this.hasProperty(dispatches[0], 'dispatches')) {\n dispatches = [\n {\n dispatcher: 'NOBOARDSVARIANT',\n count: options.length,\n id: 0,\n dispatches: options as Dispatch[],\n teamBoard: false,\n },\n ];\n }\n\n if (!shouldSearch) {\n return dispatches as DispatchBoard[];\n }\n\n if (searchValue) {\n dispatches = dispatches.map((board) => {\n const newBoard = { ...board };\n\n newBoard.dispatches = board.dispatches.filter((dispatch) => {\n const truckIdMatch = dispatch.truck.truckNumber\n ?.toString()\n .toLowerCase()\n .includes(searchValue);\n const trailerIdMatch = dispatch.trailer?.trailerNumber\n ?.toString()\n .toLowerCase()\n .includes(searchValue);\n\n let driverNameMatch = (\n dispatch.driver?.firstName?.toLowerCase() +\n ' ' +\n dispatch.driver?.lastName?.toLowerCase()\n ).includes(searchValue);\n\n if (dispatch.coDriver) {\n driverNameMatch = (\n dispatch.driver.firstName.toLowerCase() +\n ' & ' +\n dispatch.coDriver.firstName.toLowerCase()\n ).includes(searchValue);\n }\n\n return truckIdMatch || trailerIdMatch || driverNameMatch;\n });\n\n return newBoard;\n });\n }\n\n if (foldedBoards?.length && !searchValue) {\n dispatches = dispatches.map((board) => {\n if (foldedBoards.includes(board.id)) {\n const { dispatches, ...rest } = board;\n\n return rest as DispatchBoard;\n }\n return board;\n });\n }\n\n return dispatches as DispatchBoard[];\n case 'broker':\n const brokers = (options as Broker[]) || [];\n\n if (!shouldSearch) {\n return brokers as Broker[];\n }\n\n if (searchValue) {\n return brokers.filter((broker) =>\n (broker.businessName || '').toLowerCase().includes(searchValue),\n );\n }\n return brokers;\n case 'contact':\n const contacts =\n (options as DepartmentContactsPair[])\n .sort((a, b) => (a.department?.id || 0) - (b.department?.id || 0))\n .flatMap((pair) =>\n (pair.contacts || []).map((contact) => ({\n ...contact,\n department: pair.department,\n })),\n ) || [];\n\n if (!shouldSearch) {\n return contacts;\n }\n\n if (searchValue) {\n return contacts?.filter((contact) =>\n (contact?.contactName || '').toLowerCase().includes(searchValue),\n );\n }\n return contacts;\n case 'shipper':\n const shippers = (options as Shipper[]) || [];\n\n if (!shouldSearch) {\n return shippers;\n }\n\n if (searchValue) {\n return shippers.filter((shipper) =>\n (shipper.businessName + ' ' + shipper.address?.address || '')\n .toLowerCase()\n .includes(searchValue),\n );\n }\n return shippers;\n case 'bank':\n const banks = (options as Bank[]) || [];\n\n if (!shouldSearch) {\n return banks;\n }\n\n if (searchValue) {\n return banks.filter((bank) =>\n bank.name?.toLowerCase().includes(searchValue),\n );\n }\n return banks;\n case 'dispatcher':\n const dispatcher = (options as Dispatcher[]) || [];\n\n if (!shouldSearch) {\n return dispatcher;\n }\n\n if (searchValue) {\n return dispatcher.filter((bank) =>\n bank.fullName?.toLowerCase().includes(searchValue),\n );\n }\n return dispatcher;\n case 'truck':\n const trucks = (options as TruckType[]) || [];\n\n if (!shouldSearch) {\n return trucks;\n }\n\n if (searchValue) {\n return trucks.filter((truck) =>\n (truck.name || '').toLowerCase().includes(searchValue),\n );\n }\n return trucks;\n case 'trailer':\n const trailers = (options as TrailerType[]) || [];\n\n if (!shouldSearch) {\n return trailers;\n }\n\n if (searchValue) {\n return trailers.filter((trailer) =>\n (trailer.name || '').toLowerCase().includes(searchValue),\n );\n }\n return trailers;\n case 'hazardous':\n const hazardous = (options as Hazardous[]) || [];\n\n if (!shouldSearch) {\n return hazardous;\n }\n\n if (searchValue) {\n return hazardous.filter((hazardous) =>\n hazardous.description?.toLowerCase().includes(searchValue),\n );\n }\n return hazardous;\n case 'state':\n const states = (options as State[]) || [];\n\n if (!shouldSearch) {\n return states;\n }\n\n if (searchValue) {\n return states.filter((state) =>\n (state?.stateShortName + ' ' + state?.stateName)\n ?.toLowerCase()\n .includes(searchValue),\n );\n }\n return states;\n case 'owner':\n const owners = (options as Owner[]) || [];\n\n if (!shouldSearch) {\n return owners;\n }\n\n if (searchValue) {\n return owners.filter((owner) =>\n (owner.ein?.toLowerCase() || '')\n .concat(' ', owner.name?.toLowerCase() || '')\n .includes(searchValue),\n );\n }\n return owners;\n case 'fuelcard':\n const fuelcards = (options as FuelCard[]) || [];\n\n if (!shouldSearch) {\n return fuelcards;\n }\n\n if (searchValue) {\n return fuelcards.filter((fuelcard) =>\n (fuelcard.number?.toLowerCase() || '')\n .concat(' ', fuelcard.brand?.toLowerCase() || '')\n .concat(' ', fuelcard.account?.toLowerCase() || '')\n .includes(searchValue),\n );\n }\n return fuelcards;\n case 'color':\n const colors = (options as ColorOption[]) || [];\n\n if (!shouldSearch) {\n return colors;\n }\n\n if (searchValue) {\n return colors.filter((color) =>\n color.name?.toLowerCase().includes(searchValue),\n );\n }\n return colors;\n case 'make':\n const makes = (options as MakeOption[]) || [];\n\n if (!shouldSearch) {\n return makes;\n }\n\n if (searchValue) {\n return makes.filter((make) =>\n make.name?.toLowerCase().includes(searchValue),\n );\n }\n return makes;\n case 'toll':\n const tolls = (options as TollOption[]) || [];\n\n if (!shouldSearch) {\n return tolls;\n }\n\n if (searchValue) {\n return tolls.map((toll) => {\n return {\n ...toll,\n tollTransponders: toll.tollTransponders?.filter((transponder) =>\n transponder.name?.toLowerCase().includes(searchValue),\n ),\n };\n });\n }\n return tolls;\n case 'fuel-stop-transaction':\n if (!(options as Franchise[]) || !(options as FuelStopStore[]))\n return [];\n\n let franchises = (options as Franchise[]) || [];\n\n if (!shouldSearch) {\n return franchises as Franchise[];\n }\n\n // Process each franchise: if it's the open one, show stores; if closed, hide stores\n franchises = franchises.map((franchise) => {\n const isOpen = openGroup === franchise.id;\n\n if (!isOpen) {\n // Franchise is closed - show franchise but no stores\n const { fuelStopStores, ...rest } = franchise;\n return rest as Franchise;\n }\n\n // Franchise is open - show franchise with stores\n const newFranchise = { ...franchise };\n\n // If searching and this is the open franchise, filter the stores\n if (searchValue) {\n newFranchise.fuelStopStores = franchise.fuelStopStores?.filter(\n (fuelStopStore) => {\n const storeMatch = fuelStopStore.store\n ?.toString()\n .toLowerCase()\n .includes(searchValue);\n\n const city = fuelStopStore.address?.city ?? '';\n const state = fuelStopStore.address?.stateShortName ?? '';\n const zip = fuelStopStore.address?.zipCode ?? '';\n\n const businessNameMatch = franchise?.businessName\n ?.toString()\n .toLowerCase()\n .includes(searchValue);\n\n const cityStateZipMatch = (\n city +\n (state || zip ? ', ' : '') +\n state +\n ' ' +\n zip\n )\n ?.toLowerCase()\n .trim()\n .includes(searchValue);\n\n return storeMatch || cityStateZipMatch || businessNameMatch;\n },\n );\n }\n\n return newFranchise;\n });\n\n // If searching, filter closed franchises by businessName but always keep the open one\n if (searchValue) {\n franchises = franchises?.filter((franchise) => {\n const isOpen = openGroup === franchise?.id;\n // Always show open franchise, filter closed ones by businessName\n return (\n isOpen ||\n franchise?.businessName?.toLowerCase().includes(searchValue)\n );\n });\n }\n\n return franchises as Franchise[];\n case 'split-driver':\n if (\n !(options as SplitDriverBoard[]) ||\n !(options as SplitDriverBoard[])\n )\n return [];\n\n let splitDriverBoards = (options as SplitDriverBoard[]) || [];\n\n if (!shouldSearch) {\n if (foldedBoards?.length && !searchValue) {\n splitDriverBoards = splitDriverBoards.map((board) => {\n if (foldedBoards.includes(board.id)) {\n const { drivers, ...rest } = board;\n\n return rest as SplitDriverBoard;\n }\n return board;\n });\n }\n\n return splitDriverBoards as SplitDriverBoard[];\n }\n\n if (searchValue) {\n splitDriverBoards = splitDriverBoards.map((board) => {\n const newBoard = { ...board };\n\n newBoard.drivers =\n board.drivers?.filter((driver) => {\n const driverNameMatch = (\n driver.firstName?.toLowerCase() +\n ' ' +\n driver.lastName?.toLowerCase()\n ).includes(searchValue);\n\n return driverNameMatch;\n }) ?? [];\n\n return newBoard;\n });\n }\n\n if (foldedBoards?.length && !searchValue) {\n splitDriverBoards = splitDriverBoards.map((board) => {\n if (foldedBoards.includes(board.id)) {\n const { drivers, ...rest } = board;\n\n return rest as SplitDriverBoard;\n }\n return board;\n });\n }\n\n return splitDriverBoards as SplitDriverBoard[];\n case 'split-truck':\n if (\n !(options as SplitDriverBoard[]) ||\n !(options as SplitDriverBoard[])\n )\n return [];\n\n let splitTruckBoards = (options as SplitTruckBoard[]) || [];\n\n if (!shouldSearch) {\n if (foldedBoards?.length && !searchValue) {\n splitTruckBoards = splitTruckBoards.map((board) => {\n if (foldedBoards.includes(board.id)) {\n const { trucks, ...rest } = board;\n\n return rest as SplitTruckBoard;\n }\n return board;\n });\n }\n\n return splitTruckBoards as SplitTruckBoard[];\n }\n\n if (searchValue) {\n splitTruckBoards = splitTruckBoards.map((board) => {\n const newBoard = { ...board };\n\n newBoard.trucks =\n board.trucks?.filter((truck) => {\n const truckNumberMatch = truck.truckNumber\n ?.toLowerCase()\n .includes(searchValue);\n\n return truckNumberMatch;\n }) ?? [];\n\n return newBoard;\n });\n }\n\n if (foldedBoards?.length && !searchValue) {\n splitTruckBoards = splitTruckBoards.map((board) => {\n if (foldedBoards.includes(board.id)) {\n const { trucks, ...rest } = board;\n\n return rest as SplitTruckBoard;\n }\n return board;\n });\n }\n\n return splitTruckBoards as SplitTruckBoard[];\n case 'split-trailer':\n if (\n !(options as SplitDriverBoard[]) ||\n !(options as SplitDriverBoard[])\n )\n return [];\n\n let splitTrailerBoards = (options as SplitTrailerBoard[]) || [];\n\n if (!shouldSearch) {\n if (foldedBoards?.length && !searchValue) {\n splitTrailerBoards = splitTrailerBoards.map((board) => {\n if (foldedBoards.includes(board.id)) {\n const { trailers, ...rest } = board;\n\n return rest as SplitTrailerBoard;\n }\n return board;\n });\n }\n\n return splitTrailerBoards as SplitTrailerBoard[];\n }\n\n if (searchValue) {\n splitTrailerBoards = splitTrailerBoards.map((board) => {\n const newBoard = { ...board };\n\n newBoard.trailers =\n board?.trailers?.filter((trailer) => {\n const trailerNumberMatch = trailer.trailerNumber\n ?.toLowerCase()\n .includes(searchValue);\n\n return trailerNumberMatch;\n }) ?? [];\n\n return newBoard;\n });\n }\n\n if (foldedBoards?.length && !searchValue) {\n splitTrailerBoards = splitTrailerBoards.map((board) => {\n if (foldedBoards.includes(board.id)) {\n const { trailers, ...rest } = board;\n\n return rest as SplitTrailerBoard;\n }\n return board;\n });\n }\n\n return splitTrailerBoards as SplitTrailerBoard[];\n default:\n const dropdownOptions = options as any[];\n\n if (!shouldSearch) {\n return options;\n }\n\n if (searchValue) {\n return dropdownOptions?.filter((option) =>\n option[optionLabel]?.toLowerCase().includes(searchValue),\n );\n }\n\n return options;\n }\n }\n}\n","import { ElementRef } from '@angular/core';\nimport {\n DropdownOptions,\n GroupedNavigationState,\n KeyboardNavigationState,\n DispatchBoard,\n Franchise,\n TollOption,\n} from '../../models';\n\nexport class KeyboardNavigationHelper {\n static focusNextInput(inputRef: ElementRef): void {\n const focusableElements = document.querySelectorAll(\n 'a[href]:not([tabindex=\"-1\"]), button:not([tabindex=\"-1\"]), input:not([tabindex=\"-1\"]), select:not([tabindex=\"-1\"]), [tabindex]:not([tabindex=\"-1\"]), div.datetime-input-listener',\n );\n const focusableArray = Array.from(focusableElements);\n const currentIndex = focusableArray.indexOf(inputRef.nativeElement);\n\n if (currentIndex > -1) {\n const nextIndex = (currentIndex + 1) % focusableArray.length;\n const nextElement = focusableArray[nextIndex];\n (nextElement as HTMLInputElement).focus();\n }\n }\n\n // TODO: Fix inconsistent scrolling behavior\n static scrollToOption(): void {\n requestAnimationFrame(() => {\n const optionElement = document.querySelector(`.focused`);\n if (optionElement) {\n optionElement.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n inline: 'nearest',\n });\n }\n });\n }\n\n static getGroupCounts(\n dropdownOptions: DropdownOptions[],\n dropdownType: string,\n groupIndex: number,\n ): {\n groupCount: number;\n optionCount: number;\n canSelectHeader: boolean;\n } {\n let counts = {\n groupCount: 0,\n optionCount: 0,\n canSelectHeader: true,\n };\n\n switch (dropdownType) {\n case 'fuel-stop-transaction':\n counts = {\n optionCount:\n (dropdownOptions[groupIndex] as Franchise)?.fuelStopStores\n ?.length || 0,\n groupCount: dropdownOptions.length,\n canSelectHeader: true,\n };\n break;\n\n case 'ftl-dispatch':\n case 'dispatch':\n counts = {\n optionCount:\n (dropdownOptions[groupIndex] as DispatchBoard)?.dispatches\n ?.length || 0,\n groupCount: dropdownOptions.filter(\n (option: DropdownOptions) => (option as DispatchBoard)?.count > 0,\n ).length,\n canSelectHeader:\n (dropdownOptions[0] as DispatchBoard)?.dispatcher !==\n 'NOBOARDSVARIANT',\n };\n\n break;\n\n case 'toll':\n counts = {\n optionCount:\n (dropdownOptions[groupIndex] as TollOption)?.tollTransponders\n ?.length || 0,\n groupCount: dropdownOptions.length,\n canSelectHeader: false,\n };\n break;\n }\n\n return counts;\n }\n\n static handleSingleNavigationDown(\n index: number,\n dropdownOptions: DropdownOptions[],\n ): number | null {\n const lastIndex = dropdownOptions.length - 1;\n if (index < lastIndex) {\n return index + 1;\n } else {\n return lastIndex;\n }\n }\n\n static handleSingleNavigationUp(\n index: number,\n isAdd: boolean,\n ): number | null {\n if (index > (isAdd ? -1 : 0)) {\n return index - 1;\n }\n return index;\n }\n\n static handleGroupedNavigationUp(\n groupIndex: number,\n optionIndex: number,\n dropdownOptions: DropdownOptions[],\n dropdownType: string,\n isAdd: boolean,\n ): GroupedNavigationState | null {\n const previousGroupIndex = groupIndex - 1 >= 0 ? groupIndex - 1 : 0;\n const { optionCount, canSelectHeader } = this.getGroupCounts(\n dropdownOptions,\n dropdownType,\n previousGroupIndex,\n );\n\n let state: GroupedNavigationState = {\n groupIndex: null,\n optionIndex: null,\n };\n\n if (optionIndex > (canSelectHeader ? 0 : 1)) {\n state = {\n groupIndex: groupIndex,\n optionIndex: optionIndex - 1,\n };\n } else if (groupIndex > (isAdd ? -1 : 0)) {\n state = {\n groupIndex: groupIndex - 1,\n optionIndex: optionCount,\n };\n } else {\n state = {\n groupIndex: groupIndex,\n optionIndex: optionIndex,\n };\n }\n\n return state;\n }\n\n static handleGroupedNavigationDown(\n groupIndex: number,\n optionIndex: number,\n dropdownOptions: DropdownOptions[],\n dropdownType: string,\n ): GroupedNavigationState {\n const { optionCount, groupCount, canSelectHeader } = this.getGroupCounts(\n dropdownOptions,\n dropdownType,\n groupIndex,\n );\n\n let state: GroupedNavigationState = {\n groupIndex: null,\n optionIndex: null,\n };\n\n if (optionIndex < optionCount) {\n state = {\n groupIndex: groupIndex,\n optionIndex: optionIndex + 1,\n };\n } else if (groupIndex < groupCount - 1) {\n state = {\n groupIndex: groupIndex + 1,\n optionIndex: canSelectHeader ? 0 : 1,\n };\n } else {\n state = {\n groupIndex,\n optionIndex,\n };\n }\n\n return state;\n }\n\n static getInitialGroupedNavigationState(\n dropdownType: string,\n dropdownOptions?: DropdownOptions[],\n ): GroupedNavigationState {\n if (!dropdownOptions) {\n return {\n groupIndex: 0,\n optionIndex: 0,\n };\n }\n\n const { optionCount } = this.getGroupCounts(\n dropdownOptions,\n dropdownType,\n 0,\n );\n\n const state = {\n groupIndex: 0,\n optionIndex:\n dropdownType === 'fuel-stop-transaction' ? 0 : optionCount ? 1 : 0, // 0 for the group item header 1 for the first item in the group note that fuel stop needs to fetch the stores so we go with the header to start\n };\n\n return state;\n }\n\n static getInitialKeyboardNavigationState(\n dropdownType: string,\n isGroupedDropdown: boolean,\n dropdownOptions?: DropdownOptions[],\n ): KeyboardNavigationState {\n const state = {\n singleIndex: isGroupedDropdown ? null : 0,\n groupedNavigationState: isGroupedDropdown\n ? this.getInitialGroupedNavigationState(dropdownType, dropdownOptions)\n : null,\n };\n\n return state;\n }\n\n static getArrowKeyNavigationState(\n keyboardNavigationState: KeyboardNavigationState,\n isGroupedDropdown: boolean,\n isAdd: boolean,\n dropdownType: string,\n dropdownOptions: DropdownOptions[],\n key: string,\n ): KeyboardNavigationState {\n const { singleIndex, groupedNavigationState } = keyboardNavigationState;\n\n const { groupIndex, optionIndex } = groupedNavigationState || {};\n const index = singleIndex;\n\n if (\n (isGroupedDropdown &&\n keyboardNavigationState.groupedNavigationState === null) ||\n (!isGroupedDropdown && index === null)\n ) {\n return this.getInitialKeyboardNavigationState(\n dropdownType,\n isGroupedDropdown,\n dropdownOptions,\n );\n }\n\n let state: KeyboardNavigationState = {\n singleIndex: null,\n groupedNavigationState: null,\n };\n\n if (key === 'ArrowDown') {\n if (isGroupedDropdown) {\n state = {\n singleIndex: null,\n groupedNavigationState: this.handleGroupedNavigationDown(\n groupIndex || 0,\n optionIndex || 0,\n dropdownOptions,\n dropdownType,\n ),\n };\n } else {\n state = {\n singleIndex: this.handleSingleNavigationDown(\n index || 0,\n dropdownOptions,\n ),\n groupedNavigationState: null,\n };\n }\n }\n\n if (key === 'ArrowUp') {\n if (isGroupedDropdown) {\n state = {\n singleIndex: null,\n groupedNavigationState: this.handleGroupedNavigationUp(\n groupIndex || 0,\n optionIndex || 0,\n dropdownOptions,\n dropdownType,\n isAdd,\n ),\n };\n } else {\n state = {\n singleIndex: this.handleSingleNavigationUp(index || 0, isAdd),\n groupedNavigationState: null,\n };\n }\n }\n\n return state;\n }\n\n static getFirstLastNavigationState(\n keyboardNavigationState: KeyboardNavigationState,\n isGroupedDropdown: boolean,\n isAdd: boolean,\n dropdownType: string,\n dropdownOptions: DropdownOptions[],\n key: string,\n ): KeyboardNavigationState {\n const { groupedNavigationState } = keyboardNavigationState;\n\n if (key === 'Home') {\n if (isGroupedDropdown) {\n return {\n groupedNavigationState: {\n groupIndex: groupedNavigationState?.groupIndex || 0,\n optionIndex: 1,\n },\n singleIndex: null,\n };\n } else {\n return {\n singleIndex: isAdd ? -1 : 0,\n groupedNavigationState: null,\n };\n }\n }\n\n if (key === 'End') {\n if (isGroupedDropdown) {\n const { optionCount } = this.getGroupCounts(\n dropdownOptions,\n dropdownType,\n groupedNavigationState?.groupIndex || 0,\n );\n const lastIndex = optionCount ? optionCount - 1 : 0;\n return {\n groupedNavigationState: {\n groupIndex: groupedNavigationState?.groupIndex || 0,\n optionIndex: lastIndex,\n },\n singleIndex: null,\n };\n } else {\n return {\n singleIndex: dropdownOptions.length - 1,\n groupedNavigationState: null,\n };\n }\n }\n return {\n singleIndex: null,\n groupedNavigationState: null,\n };\n }\n\n static getOptionFromFocusedIndex(\n state: KeyboardNavigationState,\n dropdownOptions: DropdownOptions[],\n dropdownType: string,\n isGroupedDropdown: boolean,\n ) {\n const singleIndex = state.singleIndex || 0;\n const groupedGroupIndex = state.groupedNavigationState?.groupIndex || 0;\n const groupedOptionIndex = state.groupedNavigationState?.optionIndex || 1;\n\n if (!isGroupedDropdown) {\n return dropdownOptions[singleIndex] || null;\n }\n\n let option = null;\n\n // Focused options are 1-indexed, so we need to subtract 1 from the index\n switch (dropdownType) {\n case 'fuel-stop-transaction':\n option =\n (dropdownOptions[groupedGroupIndex] as Franchise)?.fuelStopStores?.[\n groupedOptionIndex - 1\n ] || null;\n break;\n case 'ftl-dispatch':\n case 'dispatch':\n option = (dropdownOptions[groupedGroupIndex] as DispatchBoard)\n ?.dispatches?.[groupedOptionIndex - 1];\n break;\n case 'toll':\n option = (dropdownOptions[groupedGroupIndex] as TollOption)\n ?.tollTransponders?.[groupedOptionIndex - 1];\n break;\n }\n\n return option;\n }\n}\n","// Angular\nimport {\n AfterViewInit,\n Component,\n computed,\n ElementRef,\n HostListener,\n input,\n OnInit,\n Optional,\n output,\n Self,\n signal,\n ViewChild,\n ChangeDetectorRef,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NgControl,\n AbstractControl,\n} from '@angular/forms';\nimport { NgTemplateOutlet } from '@angular/common';\n\n// Pipes\nimport { CurrencyPipe } from '../../pipes/currency.pipe';\nimport {\n InputClassPipe,\n BrokerProgressPipe,\n ClearTooltipPipe,\n HighlightSearchPipe,\n RemapPmIconsPipe,\n ErrorMessagePipe,\n} from './pipes';\n\n// Directives\nimport { PasswordDirective } from './directives/password.directive';\nimport { NumberFormatDirective } from './directives/number-format.directive';\nimport { MaskDirective } from './directives/mask.directive';\n\nimport { InfiniteScrollDirective } from '../../directives/infinite-scroll.directive';\nimport { IntersectionObserverDirective } from '../../directives/intersection-observer.directive';\n\n// Bootstrap\nimport {\n NgbDropdownModule,\n NgbPopover,\n NgbTooltip,\n} from '@ng-bootstrap/ng-bootstrap';\n\n// Models\nimport {\n CaiInputConfig,\n DropdownOption,\n DropdownArrays,\n DropdownOptions,\n DropdownKeys,\n DropdownGroups,\n GroupedNavigationState,\n KeyboardNavigationState,\n} from './models';\n\n// Components\nimport { AvatarComponent } from '../avatar/avatar.component';\nimport { SvgIconComponent } from 'angular-svg-icon';\n\n// Helpers\nimport {\n InputHelper,\n KeyboardNavigationHelper,\n CastableType,\n CastableTypeMap,\n} from './utilities';\n\ninterface AutofillableFormControl extends AbstractControl {\n _autofilled?: boolean;\n}\n\n@Component({\n selector: 'cai-input',\n templateUrl: './input.component.html',\n styleUrl: './input.component.scss',\n imports: [\n // Pipes\n ErrorMessagePipe,\n CurrencyPipe,\n HighlightSearchPipe,\n RemapPmIconsPipe,\n ClearTooltipPipe,\n BrokerProgressPipe,\n InputClassPipe,\n\n // Directives\n PasswordDirective,\n NumberFormatDirective,\n MaskDirective,\n InfiniteScrollDirective,\n IntersectionObserverDirective,\n\n // Bootstrap\n NgbDropdownModule,\n NgbTooltip,\n NgTemplateOutlet,\n\n // Components\n SvgIconComponent,\n AvatarComponent,\n ],\n})\nexport class InputComponent\n implements ControlValueAccessor, AfterViewInit, OnInit\n{\n // Refs\n @ViewChild('inputRef') inputRef!: ElementRef<HTMLInputElement>;\n @ViewChild('containerRef') containerRef!: ElementRef<HTMLInputElement>;\n @ViewChild('dropdown') dropdown!: NgbPopover;\n @ViewChild('closeTooltip') closeTooltip!: NgbPopover;\n\n // Directive refs\n @ViewChild(PasswordDirective) PasswordDirective!: PasswordDirective;\n @ViewChild(NumberFormatDirective)\n NumberFormatDirective!: NumberFormatDirective;\n @ViewChild(MaskDirective)\n MaskDirective!: MaskDirective;\n\n // Inputs\n\n id = input<string>('');\n\n config = input<CaiInputConfig>({});\n\n options = input<DropdownArrays>([]);\n\n preselectedOptions = input<DropdownArrays | null>(null);\n\n isLoading = input<boolean>(false);\n\n hideValidation = input<boolean>(false);\n showNoResults = input<boolean>(true);\n\n preselectedUnit = input<string | null>(null); // Subcontent drop\n\n unassignedCount = input<number>(0);\n\n // Signals\n\n openGroup = signal<number | null>(null);\n\n isDropdownOpen = signal<boolean>(false);\n\n closing = signal<boolean>(false);\n\n canTooltipBeVisible = signal<boolean>(false);\n disabled = signal<boolean>(false);\n\n value = signal<string>('');\n searchValue = signal<string>('');\n\n visible = signal<boolean>(false); // Password visibility\n\n selectedOption = signal<DropdownOptions | null>(null);\n multipleSelectedOptions = signal<DropdownOptions[]>([]);\n\n focused = signal<boolean>(false);\n hovered = signal<boolean>(false);\n\n isAdding = signal<boolean>(false);\n isAutofilled = signal<boolean>(false);\n\n isFocusedWithMouseClick = signal<boolean>(false);\n\n // Dispatch board signals\n foldedBoards = signal<number[]>([]);\n\n randomAutocomplete = signal<string>(this.randomizeAutocomplete());\n\n // Grouped: Where 0 for optionIndex is always the group item head\n keyboardNavigationState = signal<KeyboardNavigationState>({\n singleIndex: null,\n groupedNavigationState: null,\n });\n\n // Computed signals\n\n public isDisabled = computed<boolean>(() => {\n return this.disabled() || !!this.config().disabled;\n });\n\n public dropdownOptions = computed<DropdownOptions[]>(() => {\n const options = InputHelper.getSearchedDropdownOptions(\n this.options(),\n this.searchValue() || '',\n this.config().dropdown,\n this.config().search && !this.config().useOutsideSearch,\n this.foldedBoards(),\n this.config().optionLabel,\n this.openGroup(),\n this.isDropdownOpen(),\n );\n return options;\n });\n\n // Should apply contentful styles\n public hasText = computed<boolean>(() => {\n return Boolean(\n this.value() ||\n (this.selectedOption() && this.config().dropdown !== 'subcontent') ||\n this.isAutofilled() ||\n !!this.multipleSelectedOptions().length,\n );\n });\n\n public containerWidth = signal<number>(0);\n\n step = computed(() => {\n const numericValue = parseFloat(this.value() || '0');\n const value = numericValue || 0;\n if (this.config().step === 'automatic') {\n if (value < 20000) return 1000;\n else if (value < 50000) return 5000;\n else if (value < 100000) return 10000;\n else return 20000;\n } else if (this.config().step) return this.config().step as number;\n else {\n return 1;\n }\n });\n\n public isGroupedDropdown = computed<boolean>(() => {\n return (\n this.config().dropdown === 'dispatch' ||\n this.config().dropdown === 'ftl-dispatch' ||\n this.config().dropdown === 'fuel-stop-transaction' ||\n // For toll we skip the header items since they are not selectable\n this.config().dropdown === 'toll' ||\n // Won't handle for now since we're delaying split functionality\n this.config().dropdown === 'split-driver' ||\n this.config().dropdown === 'split-truck' ||\n this.config().dropdown === 'split-trailer'\n );\n });\n\n // Outputs\n onBlur = output();\n onFocused = output();\n onReset = output();\n\n onValueChange = output<string | number | null>();\n\n onOptionAdded = output<string>(); // When an option is added\n onAdd = output(); // When add is clicked\n\n onSelectionChange = output<DropdownKeys | null>();\n onSelectedObject = output<DropdownOptions | null>();\n onSelectedGroup = output<DropdownGroups | null>();\n\n onClear = output();\n onAutofill = output();\n onScrolledToBottom = output();\n onScrolledToBottomGroup = output();\n onSearch = output<string>();\n onValueAdded = output<string | number | null>();\n onRemove = output();\n onHoverRemove = output<boolean>();\n\n dropdownPopperOptions = (options: Partial<Record<string, unknown>> = {}) => {\n // const modifiers = (options['modifiers'] as { name?: string; options?: Record<string, unknown> }[] | undefined) ?? [];\n // // Filter out the specific flip modifier with options\n // const flipModifier = modifiers.find((m) => m?.name === 'flip' && m?.options === undefined)\n // const otherModifiers = modifiers.filter((m) => m !== flipModifier);\n\n // const newOptions ={\n // ...options,\n // modifiers: [\n // ...otherModifiers,\n // {\n // ...flipModifier,\n // name: 'flip',\n // options: {\n // altBoundary: true,\n // rootBoundary: 'document',\n // padding: 8,\n // },\n // },\n // ],\n // };\n return options;\n };\n\n constructor(\n @Optional() @Self() public ngControl: NgControl | null,\n private cdr: ChangeDetectorRef,\n ) {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n onAutofilled(): void {\n if (!this.config().autocomplete) {\n return;\n }\n\n this.onAutofill.emit();\n\n const ctrl = this.ngControl?.control as AutofillableFormControl;\n if (!ctrl) return;\n\n ctrl._autofilled = true;\n this.isAutofilled.set(true);\n ctrl.setErrors(null);\n ctrl.markAsDirty();\n ctrl.markAsTouched();\n ctrl.updateValueAndValidity({ emitEvent: false });\n this.cdr.detectChanges();\n }\n\n clearAutofillFlag(): void {\n const ctrl = this.ngControl?.control as AutofillableFormControl;\n if (ctrl?._autofilled) {\n ctrl._autofilled = false;\n this.isAutofilled.set(false);\n ctrl.updateValueAndValidity({ emitEvent: false });\n }\n }\n\n ngOnInit(): void {\n const optionLabel = this.config().optionLabel || 'label';\n\n if (\n this.preselectedUnit() &&\n this.options() &&\n this.config().dropdown === 'subcontent'\n ) {\n const option = (this.options() as DropdownOption[])!.find((option) => {\n return (\n option[optionLabel]?.toString().toLowerCase() ===\n this.preselectedUnit()?.toString().toLowerCase()\n );\n });\n if (option) {\n this.selectedOption.set(option);\n }\n }\n }\n\n ngAfterViewInit(): void {\n setTimeout(() => {\n this.updateContainerWidth();\n if (this.config().autofocus) {\n this.focus();\n }\n\n // Set up autofill detection via animation events\n if (\n this.config().autocomplete &&\n this.config().autocomplete !== 'off' &&\n this.inputRef?.nativeElement\n ) {\n this.setupAutofillDetection();\n }\n }, 0);\n }\n\n private setupAutofillDetection(): void {\n if (!this.inputRef?.nativeElement) return;\n\n const inputElement = this.inputRef.nativeElement;\n\n // Check for autofill using CSS pseudo-class detection\n const checkForAutofill = () => {\n if (this.isAutofilled()) return;\n\n // Check if the element matches the -webkit-autofill pseudo-class\n const isAutofilled =\n inputElement.matches(':-webkit-autofill') ||\n inputElement.matches(':-webkit-autofill:hover') ||\n inputElement.matches(':-webkit-autofill:focus') ||\n inputElement.matches(':-webkit-autofill:active');\n\n if (isAutofilled) {\n this.onAutofilled();\n }\n };\n\n // Periodic checks for autofill\n setTimeout(checkForAutofill, 200);\n setTimeout(checkForAutofill, 500);\n setTimeout(checkForAutofill, 1000);\n }\n\n private updateContainerWidth(): void {\n if (this.containerRef?.nativeElement) {\n this.containerWidth.set(this.containerRef.nativeElement.offsetWidth);\n }\n }\n\n onInput(event: Event): void {\n // Clear autofill flag when user manually types\n this.clearAutofillFlag();\n\n const inputElement = event.target as HTMLInputElement;\n const inputEvent = event as InputEvent;\n const inputData = inputEvent.data;\n const max = this.config().max;\n\n // Handle inputs normally for all inputs other than password and number\n if (\n ((this.config().type === 'password' ||\n this.config().type === 'account') &&\n this.config().reveal) ||\n this.config().type === 'number'\n ) {\n return;\n }\n\n if (\n inputData &&\n (this.config().disabledCharacters?.length ||\n this.config().enabledCharacters?.length ||\n this.config().spacesAllowed !== undefined)\n ) {\n // Capture cursor position before any modifications\n const cursorPosition = inputElement.selectionStart || 0;\n const beforeCursor = inputElement.value.substring(\n 0,\n cursorPosition - inputData.length,\n );\n const afterCursor = inputElement.value.substring(cursorPosition);\n\n let filteredData = inputData;\n\n if (this.config().disabledCharacters?.length) {\n filteredData = Array.from(filteredData)\n .filter(\n (char) =>\n !this.config().disabledCharacters?.includes(char?.toLowerCase()),\n )\n .join('');\n }\n\n if (this.config().enabledCharacters?.length) {\n filteredData = Array.from(filteredData)\n .filter((char) =>\n this.config().enabledCharacters?.includes(char?.toLowerCase()),\n )\n .join('');\n }\n\n if (this.config().spacesAllowed !== undefined) {\n // First, handle space validation (leading spaces and double spaces)\n let processedData = '';\n for (let i = 0; i < filteredData.length; i++) {\n const char = filteredData[i];\n const fullValueSoFar = beforeCursor + processedData;\n\n if (char === ' ') {\n if (fullValueSoFar.length === 0) {\n continue;\n }\n\n if (fullValueSoFar.endsWith(' ')) {\n continue;\n }\n }\n\n processedData += char;\n }\n\n const fullValue = beforeCursor + processedData + afterCursor;\n const currentSpaceCount = (fullValue.match(/ /g) || []).length;\n\n // Then apply space count limit\n if (currentSpaceCount > this.config().spacesAllowed!) {\n const spacesInProcessedData = (processedData.match(/ /g) || [])\n .length;\n const currentSpacesWithoutProcessed =\n currentSpaceCount - spacesInProcessedData;\n const allowedSpacesInProcessed = Math.max(\n 0,\n this.config().spacesAllowed! - currentSpacesWithoutProcessed,\n );\n\n if (allowedSpacesInProcessed === 0) {\n processedData = processedData.replace(/ /g, '');\n } else if (spacesInProcessedData > allowedSpacesInProcessed) {\n const spacesToRemove =\n spacesInProcessedData - allowedSpacesInProcessed;\n let removedCount = 0;\n processedData = Array.from(processedData)\n .filter((char) => {\n if (char === ' ' && removedCount < spacesToRemove) {\n removedCount++;\n return false;\n }\n return true;\n })\n .join('');\n }\n }\n\n filteredData = processedData;\n }\n\n if (filteredData !== inputData) {\n inputElement.value = beforeCursor + filteredData + afterCursor;\n const newCursorPosition = beforeCursor.length + filteredData.length;\n inputElement.setSelectionRange(newCursorPosition, newCursorPosition);\n }\n }\n\n if (max && inputElement.value.length > max) {\n const cursorPosition = inputElement.selectionStart || 0;\n inputElement.value = inputElement.value.slice(0, max);\n // Restore cursor position, capping at max length\n const newCursorPosition = Math.min(cursorPosition, max);\n inputElement.setSelectionRange(newCursorPosition, newCursorPosition);\n }\n\n if (this.config().textTransform) {\n const cursorPosition = inputElement.selectionStart || 0;\n let newCursorPosition = cursorPosition;\n\n switch (this.config().textTransform) {\n case 'capitalize':\n let words = inputElement.value.split(' ');\n inputElement.value = words\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ');\n break;\n case 'uppercase':\n inputElement.value = inputElement.value\n .split('')\n .map((letter) => {\n if (this.config().textTransformExceptions?.includes(letter)) {\n return letter.toLowerCase();\n }\n return letter.toUpperCase();\n })\n .join('');\n break;\n case 'lowercase':\n inputElement.value = inputElement.value.toLowerCase();\n break;\n }\n\n // Restore cursor position after text transformation (deferred to allow bulk operations)\n inputElement.setSelectionRange(newCursorPosition, newCursorPosition);\n }\n\n this.value.set(inputElement.value);\n this.searchValue.set(inputElement.value);\n\n if (\n this.config().search &&\n !this.config().dropdownAutocomplete &&\n !this.isAdding()\n ) {\n this.onSearch.emit(inputElement.value);\n this.onTouched();\n\n if (\n this.keyboardNavigationState().singleIndex !== null ||\n this.keyboardNavigationState().groupedNavigationState !== null\n ) {\n this.startKeyboardNavigation();\n }\n\n if (!this.dropdown.isOpen()) {\n this.openDropdown();\n }\n\n if (this.selectedOption()) {\n this.selectedOption.set(null);\n this.dispatchOnChange(null);\n\n this.onSelectionChange.emit(null);\n this.onSelectedObject.emit(null);\n }\n return;\n }\n\n if (this.config().dropdownAutocomplete) {\n if (!this.dropdown.isOpen()) {\n this.openDropdown();\n }\n this.startKeyboardNavigation();\n }\n\n this.dispatchOnChange(this.value());\n }\n\n // Event from password, number format, and mask directives\n @HostListener('realValueChange', ['$event'])\n onRealValueChange(event: CustomEvent): void {\n this.value.set(event.detail);\n this.searchValue.set(event.detail);\n\n if (this.config().type === 'number') {\n this.dispatchOnChange(Number(event.detail));\n return;\n }\n\n this.dispatchOnChange(event.detail);\n }\n\n // ControlValueAccessor methods\n onChange = (_: any) => {};\n onTouched = () => {};\n\n dispatchOnChange(value: any): void {\n if (value === undefined || value === null || value === '') {\n this.onChange(null);\n this.onValueChange.emit(null);\n } else {\n this.onChange(value);\n this.onValueChange.emit(value);\n }\n\n requestAnimationFrame(() => {\n if (this.config().passwordRequirements) {\n if (this.ngControl?.control?.valid) {\n this.closeDropdown();\n } else {\n this.openDropdown();\n }\n }\n });\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n\n /**\n * Writes a new value to the element. (ControlValueAccessor)\n */\n writeValue(value: any): void {\n if (value && this.config().textTransform && typeof value === 'string') {\n switch (this.config().textTransform) {\n case 'capitalize':\n let words = value.split(' ');\n value = words\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ');\n break;\n case 'uppercase':\n value = value\n .split('')\n .map((letter) => {\n if (this.config().textTransformExceptions?.includes(letter)) {\n return letter.toLowerCase();\n }\n return letter.toUpperCase();\n })\n .join('');\n break;\n case 'lowercase':\n value = value.toLowerCase();\n break;\n }\n }\n this.value.set(value);\n this.searchValue.set(value);\n\n const optionValue = this.config().optionValue;\n\n requestAnimationFrame(() => {\n if (value || value === 0) {\n this.onTouched();\n } else {\n this.selectedOption.set(null);\n this.setValue();\n return;\n }\n\n if (\n !(this.config().dropdown && !this.config().dropdownAutocomplete) ||\n this.config().dropdown === 'subcontent'\n ) {\n this.setValue();\n }\n\n if (this.config().dropdownAutocomplete) {\n return;\n }\n\n if (!this.options() && !this.preselectedOptions()) {\n return;\n }\n\n if (!this.options()?.length && !this.preselectedOptions()?.length) {\n return;\n }\n\n const options = !!this.preselectedOptions()?.length\n ? [...this.options(), ...this.preselectedOptions()!]\n : this.options();\n\n const { newValue, selectedOption, multipleSelectedOptions } =\n InputHelper.getOptionValue(\n value,\n options,\n optionValue as keyof DropdownOptions,\n this.config(),\n );\n\n if (this.config().dropdown !== 'subcontent') {\n this.value.set(newValue || '');\n this.searchValue.set(newValue || '');\n this.selectedOption.set(selectedOption || null);\n this.multipleSelectedOptions.set(multipleSelectedOptions || []);\n }\n });\n }\n\n /**\n * Increments the value of a number input by the current step.\n */\n increment(event?: MouseEvent): void {\n const max = this.config().max;\n if (max && Number(this.value()) + this.step() > max) {\n this.value.set(String(max));\n } else {\n this.value.update((v) =>\n String(\n (parseFloat(v) ? parseFloat(v) : this.config().min || 0) +\n this.step(),\n ),\n );\n }\n this.dispatchOnChange(this.value());\n this.setValue();\n this.focus(event);\n }\n\n /**\n * Decrements the value of a number input by the current step.\n */\n decrement(event?: MouseEvent): void {\n const min = this.config().min;\n if (min && Number(this.value()) - this.step() < min) {\n this.value.set(String(min));\n } else {\n this.value.update((v) => {\n const currentValue = parseFloat(v) ? parseFloat(v) : 0;\n const nextValue = currentValue - this.step();\n return String(nextValue <= 0 ? 0 : nextValue);\n });\n }\n this.dispatchOnChange(this.value());\n this.setValue();\n this.focus(event);\n }\n\n /**\n * Toggles the visibility of the password input.\n * @param event - The MouseEvent that triggered the toggle.\n */\n toggleVisibility(event?: MouseEvent): void {\n if (this.config().type !== 'password' && this.config().type !== 'account') {\n return;\n }\n\n if (this.focused() || !this.hasText()) {\n this.focus(event);\n }\n this.visible.update((v) => !v);\n setTimeout(() => this.setValue(), 0);\n }\n\n /**\n * Sets the value in the actual HTML input element or updates the\n * \"real\" value in the associated directive.\n */\n setValue(): void {\n if (!this.inputRef || !this.inputRef.nativeElement) {\n return;\n }\n\n let type =\n !!this.config().mask && !this.config().reveal\n ? 'masked'\n : this.config().type;\n\n if ((type === 'password' || type === 'account') && !this.config().reveal) {\n type = 'text';\n }\n\n switch (type) {\n case 'password':\n if (this.PasswordDirective) {\n this.PasswordDirective.setRealValue(this.value());\n } else {\n this.inputRef.nativeElement.value = this.value();\n }\n break;\n case 'account':\n if (this.PasswordDirective) {\n this.PasswordDirective.setRealValue(this.value());\n } else {\n this.inputRef.nativeElement.value = this.value();\n }\n break;\n case 'number':\n if (this.NumberFormatDirective) {\n this.NumberFormatDirective.setRealValue(this.value());\n } else {\n this.inputRef.nativeElement.value = this.value();\n }\n break;\n case 'masked':\n if (this.MaskDirective) {\n this.MaskDirective.setRealValue(this.value());\n } else {\n this.inputRef.nativeElement.value = this.value();\n }\n break;\n default:\n this.inputRef.nativeElement.value = this.value();\n break;\n }\n }\n\n /**\n * Focuses the input element.\n * Prevents the default action of the mouse event to avoid unintended behaviors\n * like double focus or focus loss.\n * @param event - The MouseEvent that initiated the focus action.\n */\n focus(event?: MouseEvent): void {\n this.isFocusedWithMouseClick.set(true);\n if (event?.target === this.inputRef?.nativeElement) {\n return;\n }\n if (event) {\n event.stopPropagation();\n event.preventDefault();\n }\n if (this.inputRef && this.inputRef.nativeElement) {\n this.inputRef.nativeElement.focus();\n }\n }\n\n /**\n * Called when the input element receives focus (focus event).\n */\n onFocus(event: FocusEvent): void {\n this.onFocused.emit();\n this.updateContainerWidth();\n this.focused.set(true);\n this.keyboardNavigationState.set({\n singleIndex: null,\n groupedNavigationState: null,\n });\n\n if (this.config().dropdown && !this.isAdding()) {\n // Mouse clicked focus should always open the dropdown, but keyboard focus should only open the dropdown if there is no selected option\n if (!this.isFocusedWithMouseClick()) {\n if (!this.selectedOption()) {\n this.startKeyboardNavigation();\n if (!this.config().dropdownAutocomplete) {\n this.openDropdown();\n }\n }\n } else {\n this.openDropdown();\n }\n }\n\n if (this.config().passwordRequirements) {\n if (this.ngControl?.control?.invalid) {\n this.openDropdown();\n }\n }\n\n this.isFocusedWithMouseClick.set(false);\n\n if (!this.config().add && !this.config().search) return;\n\n if (this.isAdding()) return;\n\n if (this.config().search && !this.config().dropdownAutocomplete) {\n this.value.set('');\n this.searchValue.set('');\n this.inputRef.nativeElement.value = this.value();\n }\n }\n\n /**\n * Called when the input element loses focus (blur event).\n */\n dispatchOnBlur(): void {\n this.onBlur.emit();\n this.onTouched();\n this.closeDropdown();\n this.focused.set(false);\n this.isFocusedWithMouseClick.set(false);\n\n if (\n !this.config().add &&\n !(this.config().dropdown === 'dispatch') &&\n !this.config().search\n )\n return;\n\n if (this.isAdding()) {\n this.isAdding.set(false);\n this.reset();\n\n return;\n }\n\n requestAnimationFrame(() => {\n if (!this.config().dropdownAutocomplete) {\n this.inputRef.nativeElement.value = '';\n this.value.set('');\n }\n });\n }\n\n toggleHovered(value: boolean): void {\n this.hovered.set(value);\n }\n\n /**\n * Resets the input field's value to an empty string.\n */\n reset(event?: MouseEvent): void {\n if (this.config().hasRemoveModal) {\n this.closeTooltip.close();\n this.onRemove.emit();\n\n return;\n }\n\n if (this.config().hasResetButton) {\n this.closeTooltip.close();\n this.onReset.emit();\n return;\n }\n\n if (this.isAdding()) this.isAdding.set(false);\n\n if (this.config().dropdown === 'multiple') {\n this.multipleSelectedOptions.set([]);\n }\n this.value.set('');\n this.searchValue.set('');\n this.dispatchOnChange(''); // Notify form control of the change\n this.setValue(); // Update the actual input element\n\n this.onClear.emit();\n this.onSearch.emit('');\n this.onValueChange.emit('');\n this.selectedOption.set(null);\n this.onSelectionChange.emit(null);\n this.onSelectedObject.emit(null);\n\n this.closeTooltip.close();\n\n requestAnimationFrame(() => {\n this.updateContainerWidth();\n });\n\n if (event) {\n this.focus(event);\n }\n }\n\n onClearHover(value: boolean): void {\n this.onHoverRemove.emit(value);\n this.canTooltipBeVisible.set(value);\n }\n\n closeDropdown(addNew?: boolean): void {\n this.updateContainerWidth();\n\n if (!addNew) {\n this.closing.set(true);\n\n setTimeout(() => {\n this.dropdown.close();\n this.isDropdownOpen.set(false);\n this.closing.set(false);\n }, 200);\n } else {\n this.dropdown.close();\n this.isDropdownOpen.set(false);\n this.closing.set(false);\n }\n }\n\n openDropdown(): void {\n this.dropdown.open();\n this.isDropdownOpen.set(true);\n }\n\n randomizeAutocomplete(): string {\n return `${Math.random().toString(36).substring(2, 15)}`;\n }\n\n /**\n * Type guard that checks if a given property exists on an object.\n * @param obj The object to check.\n * @param prop The property to check for.\n * @returns `true` if `prop` exists on `obj`, `false` otherwise.\n */\n hasProperty<T extends object>(obj: T, prop: PropertyKey): prop is keyof T {\n return prop in obj;\n }\n\n /**\n * Stops event propagation to prevent parent popover from closing\n * @param event - The event to stop\n */\n stopEventPropagation(event: Event): void {\n event.stopPropagation();\n event.stopImmediatePropagation();\n }\n\n handleMultipleSelection(\n option: DropdownOptions,\n optionValue: keyof DropdownOptions,\n ) {\n if (\n this.multipleSelectedOptions().some(\n (selectedOption) => selectedOption.id === option.id,\n )\n ) {\n this.multipleSelectedOptions.update((options) =>\n options.filter((selectedOption) => selectedOption.id !== option.id),\n );\n } else {\n this.multipleSelectedOptions.update((options) => [...options, option]);\n }\n\n this.dispatchOnChange([\n ...this.multipleSelectedOptions().map((option) => option[optionValue]),\n ]);\n }\n\n /**\n * Handles when an option is selected from the dropdown.\n * @param option - The selected option.\n * @param event - The MouseEvent that initiated the selection action.\n */\n handleOption(option: DropdownOptions, event?: MouseEvent) {\n if (event) {\n this.stopEventPropagation(event);\n }\n\n const optionValue = this.config().optionValue ?? 'id';\n\n if (optionValue && this.hasProperty(option, optionValue)) {\n if (\n this.config().dropdown !== 'subcontent' &&\n this.config().dropdown !== 'multiple'\n ) {\n this.dispatchOnChange(option[optionValue]);\n }\n\n if (this.config().dropdown === 'multiple') {\n this.handleMultipleSelection(option, optionValue);\n }\n\n event?.stopPropagation();\n this.onSelectionChange.emit(option[optionValue]);\n this.onSelectedObject.emit(option);\n }\n\n // Multiple selection dropdown stores the selected options in the selectedOption signal and autocomplete has the value in the value signal\n if (\n this.config().dropdown !== 'multiple' &&\n !this.config().dropdownAutocomplete\n ) {\n this.selectedOption.set(option);\n }\n\n // Subcontent drop just adds the subcontent as a subcontent\n if (this.config().dropdown === 'subcontent') {\n this.closeDropdown();\n this.focus(event);\n this.setValue();\n\n return;\n }\n\n // Clear the value for searching and adding etc...\n if (\n typeof this.config().dropdown === 'string' ||\n (this.config().search && !this.config().dropdownAutocomplete) ||\n this.config().add\n ) {\n this.value.set('');\n } else {\n this.value.set(\n (option as DropdownOption)[this.config().optionLabel || 'label'],\n );\n }\n\n this.setValue();\n this.closeDropdown();\n }\n\n // For multiple selection dropdown\n isSelectedOption(option: DropdownOptions) {\n if (this.config().dropdown === 'multiple') {\n return this.multipleSelectedOptions().some(\n (selectedOption) => selectedOption.id === option.id,\n );\n }\n return this.selectedOption()?.id === option.id;\n }\n\n /**\n * Adds a new option to the dropdown.\n * @param option - The option to add.\n */\n addOption() {\n const option = this.inputRef.nativeElement.value;\n\n if (!option) {\n this.isAdding.set(false);\n this.reset();\n }\n\n if (this.config().isEdit) {\n this.onOptionAdded.emit(option);\n return;\n }\n\n if (this.config().writeAddValue) {\n this.value.set(option);\n this.setValue();\n this.dispatchOnChange(option);\n this.onValueAdded.emit(option);\n this.isAdding.set(false);\n\n this.selectedOption.set({\n id: -1,\n [this.config().optionLabel || 'label']: option,\n });\n\n requestAnimationFrame(() => {\n this.inputRef.nativeElement.blur();\n });\n return;\n }\n\n this.isAdding.set(false);\n\n this.value.set('');\n this.setValue();\n this.onOptionAdded.emit(option);\n }\n\n /**\n * Handles when the user clicks on the \"ADD NEW\" button in the dropdown.\n * It sets the `isAdding` signal to `true`, closes the dropdown, and focuses the input.\n * @param event - The MouseEvent that initiated the action.\n */\n handleAddingOption(event?: MouseEvent) {\n this.onAdd.emit();\n this.selectedOption.set(null);\n\n if (!this.config().add) return;\n\n // Open modal variant\n if (\n this.config().canOpenModal ||\n (typeof this.config().dropdown === 'string' &&\n this.config().dropdown !== 'pm' &&\n this.config().dropdown !== 'bank')\n ) {\n this.closeDropdown(true);\n return;\n }\n\n // Adding in input variant\n this.isAdding.set(true);\n this.closeDropdown();\n if (event) this.focus(event);\n }\n\n // Dispatch modal\n\n fold(boardId: number, event?: MouseEvent, group?: DropdownGroups) {\n if (event) {\n this.focus(event);\n }\n\n if (group) {\n this.onSelectedGroup.emit(group);\n }\n\n // Handle Fuel Stop Transaction - Opening one franchise will close the other\n if (this.config().dropdown === 'fuel-stop-transaction') {\n if (!group?.isFranchise) {\n this.handleOption(group as DropdownOptions);\n requestAnimationFrame(() => {\n this.inputRef.nativeElement.blur();\n });\n return;\n }\n\n if (!group?.count) {\n return;\n }\n\n if (this.openGroup() === boardId) {\n this.openGroup.set(null);\n return;\n }\n\n this.openGroup.set(boardId);\n\n return;\n }\n\n // Can have many open boards at a time\n if (this.foldedBoards().includes(boardId)) {\n this.foldedBoards.update((boards) =>\n boards.filter((id) => id !== boardId),\n );\n return;\n }\n\n this.foldedBoards.update((boards) => [...boards, boardId]);\n }\n\n // #region Casting methods for template\n\n /**\n * Type-safe casting method for templates.\n * Usage in template: cast(value, 'dispatch') or cast(value, 'broker'), etc.\n * @param value - The value to cast\n * @param type - The type string (e.g., 'dispatch', 'broker', 'contact')\n * @returns The casted value or null\n */\n cast<T extends CastableType>(\n value: unknown,\n type: T,\n ): CastableTypeMap[T] | null {\n return InputHelper.cast(value, type);\n }\n\n // #endregion Casting methods for template\n\n /**\n * Handles infinite scroll event when dropdown is scrolled to bottom\n * Emits an event that parent components can listen to for loading more data\n */\n onDropdownScrolledToBottom(isGroup?: boolean): void {\n isGroup\n ? this.onScrolledToBottomGroup.emit()\n : this.onScrolledToBottom.emit();\n }\n\n onDropdownBackgroundClick(event: MouseEvent): void {\n if (\n event.target instanceof HTMLElement &&\n !event.target.classList.contains('dropdown-menu')\n ) {\n return;\n }\n\n this.focus(event);\n event.stopPropagation();\n }\n\n onDropdownIconClick(event: MouseEvent): void {\n if (!this.focused() || !this.dropdown.isOpen()) {\n this.focus(event);\n this.openDropdown();\n return;\n }\n this.inputRef.nativeElement.blur();\n event.stopPropagation();\n }\n\n // #region Keyboard Navigation\n\n acceptSelection(event: KeyboardEvent): void {\n event.preventDefault();\n event.stopPropagation();\n\n const { singleIndex, groupedNavigationState } =\n this.keyboardNavigationState();\n\n if (!this.dropdown.isOpen()) {\n return;\n }\n\n // Click on ADD\n if (\n this.config().add &&\n (singleIndex === -1 || groupedNavigationState?.groupIndex === -1)\n ) {\n this.handleAddingOption();\n\n if (!this.config().writeAddValue) {\n requestAnimationFrame(() => {\n this.inputRef?.nativeElement.blur();\n });\n }\n\n return;\n }\n\n if (this.isGroupedDropdown()) {\n if (groupedNavigationState?.optionIndex === 0) {\n const group =\n this.dropdownOptions()[groupedNavigationState?.groupIndex || 0];\n\n if (group) {\n this.fold(group?.id || 0, undefined, group as DropdownGroups);\n }\n return;\n }\n }\n\n const option = KeyboardNavigationHelper.getOptionFromFocusedIndex(\n this.keyboardNavigationState(),\n this.dropdownOptions(),\n this.config().dropdown as string,\n this.isGroupedDropdown(),\n );\n\n if (option) {\n this.handleOption(option);\n\n requestAnimationFrame(() => {\n this.inputRef?.nativeElement.blur();\n\n KeyboardNavigationHelper.focusNextInput(this.inputRef);\n });\n }\n }\n\n handleArrowKeys(event: KeyboardEvent): void {\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n if (!this.dropdown.isOpen()) {\n this.openDropdown();\n }\n\n const arrowKeyNavigationState =\n KeyboardNavigationHelper.getArrowKeyNavigationState(\n this.keyboardNavigationState(),\n this.isGroupedDropdown(),\n this.config().add || false,\n this.config().dropdown as string,\n this.dropdownOptions(),\n event.key,\n );\n\n this.setKeyboardNavigationState(\n arrowKeyNavigationState.singleIndex,\n arrowKeyNavigationState.groupedNavigationState,\n );\n\n KeyboardNavigationHelper.scrollToOption();\n }\n\n handleFirstAndLastSelection(event: KeyboardEvent): void {\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n const firstLastNavigationState =\n KeyboardNavigationHelper.getFirstLastNavigationState(\n this.keyboardNavigationState(),\n this.isGroupedDropdown(),\n this.config().add || false,\n this.config().dropdown as string,\n this.dropdownOptions(),\n event.key,\n );\n\n this.setKeyboardNavigationState(\n firstLastNavigationState.singleIndex,\n firstLastNavigationState.groupedNavigationState,\n );\n\n KeyboardNavigationHelper.scrollToOption();\n }\n\n startKeyboardNavigation(): void {\n const { singleIndex, groupedNavigationState } =\n KeyboardNavigationHelper.getInitialKeyboardNavigationState(\n this.config().dropdown as string,\n this.isGroupedDropdown(),\n this.dropdownOptions(),\n );\n\n this.setKeyboardNavigationState(singleIndex, groupedNavigationState);\n }\n\n setKeyboardNavigationState(\n singleIndex: number | null,\n groupedNavigationState: GroupedNavigationState | null,\n ): void {\n this.keyboardNavigationState.set({ singleIndex, groupedNavigationState });\n }\n\n handleDropdownKeyboardNavigation(event: KeyboardEvent): void {\n // TODO: Handle multiple selection input\n\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n this.handleArrowKeys(event);\n }\n\n if (event.key === 'Home' || event.key === 'End') {\n this.handleFirstAndLastSelection(event);\n }\n\n if (event.key === 'Enter') {\n this.acceptSelection(event);\n }\n\n if (\n (event.key === 'Delete' || event.key === 'Backspace') &&\n !this.value() &&\n !this.isAdding() &&\n this.selectedOption()\n ) {\n this.reset();\n }\n }\n\n handleNumberKeyboardNavigation(event: KeyboardEvent): void {\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n event.stopPropagation();\n this.increment();\n }\n\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n event.stopPropagation();\n this.decrement();\n }\n }\n\n handlePasswordKeyboardNavigation(event: KeyboardEvent): void {\n if ((event.altKey || event.metaKey) && event.key === 's') {\n event.preventDefault();\n event.stopPropagation();\n this.toggleVisibility();\n }\n }\n\n handleKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n this.inputRef?.nativeElement.blur();\n }\n\n if (this.config().dropdown) {\n this.handleDropdownKeyboardNavigation(event);\n }\n\n if (this.config().type === 'number' && !this.config().dropdown) {\n this.handleNumberKeyboardNavigation(event);\n }\n\n if (this.config().type === 'account' || this.config().type === 'password') {\n this.handlePasswordKeyboardNavigation(event);\n }\n }\n\n // #endregion Keyboard Navigation\n}\n","<!-- #region Variables -->\n@let valid =\n ngControl?.valid &&\n (ngControl?.touched || ngControl?.dirty) &&\n !isAdding() &&\n !isDisabled();\n@let invalid =\n ngControl?.invalid &&\n (ngControl?.touched || ngControl?.dirty) &&\n !isAdding() &&\n !isDisabled();\n@let subcontent =\n config().subcontent ||\n (config().dropdown === \"subcontent\" &&\n selectedOption() &&\n cast(selectedOption(), \"dropdownOption\")![config().optionLabel || \"label\"]);\n\n@let name = config().name;\n@let password = config().type === \"password\" || config().type === \"account\";\n\n@let optionLabel = this.config().optionLabel || \"label\";\n@let dropdownType = this.config().dropdown;\n\n@let focusedOptionIndex = keyboardNavigationState().singleIndex;\n@let groupedNavigationState = keyboardNavigationState().groupedNavigationState;\n\n@let tooltipClass =\n config().inverse\n ? \"tooltip input-tooltip tooltip-bg-white-700 tooltip-text-black-500\"\n : \"tooltip input-tooltip\";\n\n<!-- #region Multiple selection -->\n@if (config().dropdown === \"multiple\" && !!multipleSelectedOptions().length) {\n <div\n (pointerdown)=\"focus($event)\"\n (mouseenter)=\"toggleHovered(true)\"\n (mouseleave)=\"toggleHovered(false)\"\n class=\"multiple-container\"\n [class]=\"{\n focused: focused(),\n hovered: hovered(),\n }\"\n >\n <label class=\"multiple-label\">{{ name }}</label>\n\n @for (option of multipleSelectedOptions(); track $index) {\n <div class=\"multiple-selected\">\n <p>{{ cast(option, \"dropdownOption\")![optionLabel || \"label\"] }}</p>\n <button\n type=\"button\"\n class=\"\"\n (pointerdown)=\"handleOption(option, $event)\"\n [tabIndex]=\"-1\"\n ngbTooltip=\"Clear\"\n [placement]=\"'top'\"\n [tooltipClass]=\"tooltipClass\"\n [autoClose]=\"true\"\n #closeTooltip=\"ngbTooltip\"\n [container]=\"'body'\"\n >\n <svg-icon\n name=\"cai-cancel\"\n class=\"multiple-remove-button multiple-remove-icon bg-icon\"\n ></svg-icon>\n </button>\n </div>\n }\n </div>\n}\n<!-- #endregion -->\n\n@let hasFloatingError =\n config().errorBehavior === \"floating\" ||\n (!!config().inTable && config().placeholderBehavior !== \"static\");\n\n<div\n class=\"app-input-container\"\n [class]=\"\n {\n config: config(),\n hideValidation: hideValidation(),\n isPasswordVisible: visible(),\n isInvalid: !!invalid,\n isValid: !!valid,\n isHovered: hovered(),\n hasText: hasText(),\n isAdding: isAdding(),\n selectedOption: selectedOption(),\n } | inputClass\n \"\n ngbDropdown\n [autoClose]=\"false\"\n #dropdown=\"ngbDropdown\"\n dropdownClass=\"cai-dropdown\"\n #containerRef\n [ngbTooltip]=\"errorTooltip\"\n [disableTooltip]=\"!hasFloatingError\"\n [container]=\"'body'\"\n [placement]=\"['bottom']\"\n tooltipClass=\"tooltip tooltip-bg-red-500 input-tooltip \"\n (pointerdown)=\"focus($event)\"\n (mouseenter)=\"dropdownType === 'multiple' && toggleHovered(true)\"\n (mouseleave)=\"dropdownType === 'multiple' && toggleHovered(false)\"\n>\n <!-- \n [popperOptions]=\"dropdownPopperOptions\"\n -->\n @if (config().icon && !password && !config().withButtons) {\n <div\n class=\"icon-container\"\n (pointerdown)=\"focus($event)\"\n [class]=\"{\n 'colored-icon': config().iconColor,\n }\"\n [style.--icon-color]=\"config().iconColor || ''\"\n >\n <svg-icon class=\"icon\" [name]=\"config().icon || ''\"></svg-icon>\n @if (!config().noSeparator) {\n <div class=\"separator\"></div>\n }\n </div>\n }\n @if (password) {\n <div class=\"icon-container\" (pointerdown)=\"toggleVisibility($event)\">\n <div\n class=\"password-icons\"\n [ngbTooltip]=\"passwordTooltip\"\n [container]=\"'body'\"\n [tooltipClass]=\"tooltipClass\"\n [autoClose]=\"true\"\n [placement]=\"'top'\"\n [openDelay]=\"600\"\n >\n <svg-icon\n class=\"icon password-key hover-icon\"\n name=\"cai-password-key\"\n ></svg-icon>\n <svg-icon\n class=\"icon password-shown hover-icon\"\n name=\"cai-password-shown\"\n ></svg-icon>\n <svg-icon\n class=\"icon password-hidden hover-icon\"\n name=\"cai-password-hidden\"\n ></svg-icon>\n </div>\n <div class=\"separator\"></div>\n </div>\n }\n\n <input\n class=\"app-input\"\n [tabindex]=\"isDisabled() ? '-1' : '0'\"\n [type]=\"\n password && !config().reveal ? (visible() ? 'text' : 'password') : 'text'\n \"\n [required]=\"config().required\"\n [disabled]=\"isDisabled()\"\n (input)=\"onInput($event)\"\n (blur)=\"dispatchOnBlur()\"\n [id]=\"id()\"\n [attr.aria-label]=\"config().label\"\n [attr.name]=\"\n config().autocomplete ? config().autocomplete : randomAutocomplete()\n \"\n [placeholder]=\"config()?.placeholder || ''\"\n [autocomplete]=\"\n config().autocomplete ? config().autocomplete : randomAutocomplete()\n \"\n #inputRef\n [appPassword]=\"password\"\n [appMask]=\"config().mask || ''\"\n [reveal]=\"config().reveal || 0\"\n [account]=\"config().type === 'account'\"\n [visible]=\"visible()\"\n [appNumberFormat]=\"config().type === 'number'\"\n [isNumberFormattingDisabled]=\"config().isNumberFormattingDisabled || false\"\n [disableDecimals]=\"config().disableDecimals || false\"\n [prefix]=\"config().prefix || ''\"\n [max]=\"config().max\"\n (keydown)=\"handleKeydown($event)\"\n (focus)=\"onFocus($event)\"\n />\n @if (\n !(dropdownType === \"multiple\" && !!multipleSelectedOptions().length) &&\n config().placeholderBehavior !== \"hidden\"\n ) {\n <label\n class=\"app-input-label\"\n [class.placeholder-color]=\"this.config().placeholderColor\"\n [style.--placeholder-color]=\"this.config().placeholderColor || ''\"\n (click)=\"focus($event)\"\n >\n <!-- Truck Trailer Driver Dropdown label -->\n @if (dropdownType === \"dispatch\" || dropdownType === \"ftl-dispatch\") {\n <p class=\"truck-item app-input-name\">Truck</p>\n <p class=\"trailer-item\">Trailer</p>\n <p>Driver</p>\n <p class=\"sub-label\">Rate</p>\n }\n <!-- Split Load -->\n @else if (dropdownType === \"split-driver\") {\n <p class=\"app-input-name\">{{ name }}</p>\n <p class=\"sub-label\">Rate</p>\n } @else if (\n dropdownType === \"split-truck\" || dropdownType === \"split-trailer\"\n ) {\n <p class=\"app-input-name\">{{ name }}</p>\n <p class=\"sub-label\">Location</p>\n }\n <!-- Dropdown variants -->\n @else if (dropdownType === \"broker\") {\n <p class=\"app-input-name\">{{ name }}</p>\n <p class=\"sub-label\">Credit</p>\n } @else if (dropdownType === \"contact\") {\n <p class=\"app-input-name\">{{ name }}</p>\n <p class=\"sub-label\">Phone</p>\n } @else if (dropdownType === \"shipper\") {\n <p class=\"app-input-name\">{{ name }}</p>\n <p class=\"sub-label\">Address</p>\n } @else if (dropdownType === \"owner\") {\n <p class=\"owner-ein app-input-name\">EIN</p>\n <p class=\"app-input-name\">Company Name</p>\n } @else if (dropdownType === \"fuelcard\") {\n <p class=\"fuelcard-number app-input-name\">Card No.</p>\n <p class=\"fuelcard-brand app-input-name\">Provider</p>\n <p class=\"app-input-name\">Nickname</p>\n }\n <!-- Default Dropdown label -->\n @else {\n <span class=\"app-input-name\">{{ name }}</span>\n }\n </label>\n }\n @if (config().type === \"number\" && config().withButtons) {\n <div class=\"number-container\">\n <div class=\"number-buttons\">\n <div class=\"separator\"></div>\n <div\n class=\"plus-button-container\"\n ngbTooltip=\"Add\"\n [tooltipClass]=\"tooltipClass\"\n [container]=\"'body'\"\n [autoClose]=\"true\"\n [openDelay]=\"600\"\n [placement]=\"'top'\"\n (pointerdown)=\"increment($event)\"\n >\n <svg-icon name=\"cai-plus\" class=\"bg-icon plus-icon\"></svg-icon>\n </div>\n <div\n class=\"minus-button-container\"\n ngbTooltip=\"Remove\"\n [placement]=\"'top'\"\n [container]=\"'body'\"\n [tooltipClass]=\"tooltipClass\"\n [autoClose]=\"true\"\n [openDelay]=\"600\"\n (pointerdown)=\"decrement($event)\"\n >\n <svg-icon name=\"cai-minus\" class=\"bg-icon minus-icon\"></svg-icon>\n </div>\n </div>\n </div>\n }\n @if (!config().inTable) {\n @if (!dropdownType) {\n <svg-icon\n name=\"cai-checkmark\"\n class=\"app-input-icon positive-icon\"\n ></svg-icon>\n <svg-icon\n name=\"cai-status-warning\"\n class=\"app-input-icon warning-icon\"\n ></svg-icon>\n }\n }\n\n @if (\n invalid &&\n config().errorBehavior !== \"hidden\" &&\n (ngControl?.errors | errorMessage: config().customErrors)[0] &&\n !(config().inTable && config().placeholderBehavior !== \"static\")\n ) {\n <div class=\"app-input-error\">\n {{ (ngControl?.errors | errorMessage: config().customErrors)[0] }}\n </div>\n }\n\n <!-- Accept button -->\n @if ((config().add && isAdding()) || config().isEdit) {\n <button\n type=\"button\"\n class=\"app-input-icon button-icon accept-button\"\n (pointerdown)=\"addOption()\"\n [tabIndex]=\"-1\"\n ngbTooltip=\"Confirm\"\n [openDelay]=\"600\"\n [placement]=\"'top'\"\n [tooltipClass]=\"tooltipClass\"\n [container]=\"'body'\"\n [autoClose]=\"true\"\n >\n <svg-icon class=\"bg-icon\" name=\"cai-checkmark\"></svg-icon>\n </button>\n }\n\n <!-- Cancel button -->\n <button\n type=\"button\"\n class=\"app-input-icon button-icon cancel-button\"\n (pointerdown)=\"reset($event)\"\n (mouseenter)=\"onClearHover(true)\"\n (mouseleave)=\"onClearHover(false)\"\n [tabIndex]=\"-1\"\n ngbTooltip=\"{{\n hasText()\n | clearTooltip\n : isAdding()\n : config().isEdit || false\n : config().placeholderBehavior || 'dynamic'\n : dropdownType === 'multiple'\n : config().hasResetButton\n : canTooltipBeVisible()\n }}\"\n [openDelay]=\"600\"\n [tooltipClass]=\"tooltipClass\"\n [placement]=\"'top'\"\n [container]=\"'body'\"\n [autoClose]=\"true\"\n #closeTooltip=\"ngbTooltip\"\n >\n @let iconName =\n config().hasResetButton\n ? \"cai-reset\"\n : config().removable\n ? \"cai-delete\"\n : \"cai-cancel\";\n <svg-icon class=\"bg-icon\" [name]=\"iconName\"></svg-icon>\n </button>\n\n <div class=\"dropdown-anchor\" ngbDropdownAnchor></div>\n <!-- Dropdown menu -->\n\n @let hasLoader = isLoading() !== undefined;\n\n @if (hasLoader) {\n <div class=\"loader\" [class.loading]=\"isLoading()\">\n <svg-icon name=\"cai-loader\" class=\"loader-icon\"></svg-icon>\n </div>\n }\n\n @if (dropdownType) {\n @let maxHeight =\n ((dropdownOptions()?.length || (showNoResults() ? 1 : 0)) +\n (config().add ? 1 : 0)) *\n 30 +\n 4;\n\n @let animateDropdown =\n dropdownType !== \"toll\" &&\n dropdownType !== \"fuel-stop-transaction\" &&\n dropdownType !== \"dispatch\" &&\n dropdownType !== \"ftl-dispatch\" &&\n dropdownType !== \"split-driver\" &&\n dropdownType !== \"split-truck\" &&\n dropdownType !== \"split-trailer\";\n\n @let unfilteredHeight =\n dropdownType === \"contact\" || !animateDropdown\n ? 244\n : ((options()?.length || (showNoResults() ? 1 : 0)) +\n (config().add ? 1 : 0)) *\n 30 +\n 4;\n\n <div\n ngbDropdownMenu\n class=\"dropdown-menu input-dropdown-menu\"\n [class]=\"{\n 'hide-dropdown':\n config().dropdownAutocomplete &&\n !dropdownOptions()?.length &&\n !(showNoResults() && value()),\n 'animate-dropdown': animateDropdown,\n 'size-22': config().size === 22,\n 'has-stroke': config().hasStroke,\n }\"\n [class.closing]=\"closing()\"\n [style.--unfiltered-height]=\"\n unfilteredHeight > 244 ? '244px' : unfilteredHeight + 'px'\n \"\n [style.--max-height]=\"maxHeight > 244 ? '244px' : maxHeight + 'px'\"\n [style.width.px]=\"containerWidth()\"\n [tabindex]=\"-1\"\n (pointerdown)=\"onDropdownBackgroundClick($event)\"\n (pointerup)=\"stopEventPropagation($event)\"\n (mouseup)=\"stopEventPropagation($event)\"\n (click)=\"stopEventPropagation($event)\"\n >\n <div\n class=\"dropdown-menu-content\"\n [tabindex]=\"-1\"\n caiInfiniteScroll\n [scrollThreshold]=\"50\"\n (scrolledToBottom)=\"onDropdownScrolledToBottom()\"\n >\n @if (config().add) {\n <button\n class=\"dropdown-item add-new\"\n [class.focused]=\"\n focusedOptionIndex === -1 ||\n groupedNavigationState?.groupIndex === -1\n \"\n (pointerdown)=\"handleAddingOption($event)\"\n >\n <p>ADD NEW</p>\n <svg-icon name=\"cai-plus\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n <ng-container *ngTemplateOutlet=\"dropdownMenuRef\"></ng-container>\n </div>\n </div>\n\n @if (!config().dropdownAutocomplete) {\n <div\n class=\"dropdown-icon-container\"\n [class.open]=\"dropdown.isOpen() && !closing()\"\n (pointerdown)=\"onDropdownIconClick($event)\"\n >\n <svg-icon\n name=\"cai-arrow-secondary-down\"\n class=\"dropdown-icon icon\"\n ></svg-icon>\n </div>\n }\n @let specialDropdown =\n dropdownType === \"dispatch\" ||\n dropdownType === \"ftl-dispatch\" ||\n dropdownType === \"broker\" ||\n dropdownType === \"contact\" ||\n dropdownType === \"shipper\" ||\n dropdownType === \"bank\" ||\n dropdownType === \"dispatcher\" ||\n dropdownType === \"truck\" ||\n dropdownType === \"trailer\" ||\n dropdownType === \"hazardous\" ||\n dropdownType === \"state\" ||\n dropdownType === \"owner\" ||\n dropdownType === \"fuelcard\" ||\n dropdownType === \"pm\" ||\n dropdownType === \"color\" ||\n dropdownType === \"make\" ||\n dropdownType === \"toll\" ||\n dropdownType === \"provider\" ||\n dropdownType === \"split-driver\" ||\n dropdownType === \"split-truck\" ||\n dropdownType === \"split-trailer\";\n <!-- Placeholder -->\n @if (specialDropdown) {\n <ng-container *ngTemplateOutlet=\"selectedOptionRef\"></ng-container>\n } @else if (\n (config().add || config().search) &&\n !inputRef.value &&\n !this.isAdding() &&\n dropdownType !== \"subcontent\"\n ) {\n <div class=\"dropdown-selected\">\n @if (config().placeholderBehavior === \"static\") {\n <p class=\"selected-label-hidden\">\n {{ name + (config().required ? \" *\" : \"\") }}\n </p>\n <p class=\"selected-text\">\n {{\n selectedOption() &&\n cast(selectedOption(), \"dropdownOption\")![\n optionLabel || \"label\"\n ]\n }}\n </p>\n } @else {\n @if (\n selectedOption() &&\n cast(selectedOption(), \"dropdownOption\")![\n optionLabel || \"label\"\n ] === \"Hazardous\"\n ) {\n <svg-icon name=\"cai-violation-hazmat\" class=\"icon\"></svg-icon>\n <p class=\"dropdown-selected-content\">\n {{\n selectedOption() &&\n cast(selectedOption(), \"dropdownOption\")![\n optionLabel || \"label\"\n ]\n }}\n </p>\n } @else {\n <p class=\"dropdown-selected-content\">\n {{\n selectedOption() &&\n cast(selectedOption(), \"dropdownOption\")![\n optionLabel || \"label\"\n ]\n }}\n </p>\n }\n }\n </div>\n }\n } @else if (config().isEdit && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <p class=\"dropdown-selected-content\">{{ name }}</p>\n </div>\n }\n @if (config().passwordRequirements) {\n <div\n class=\"dropdown-menu password-requirement\"\n ngbDropdownMenu\n [style.width.px]=\"containerWidth()\"\n [class.closing]=\"closing()\"\n (pointerup)=\"stopEventPropagation($event)\"\n (mouseup)=\"stopEventPropagation($event)\"\n (click)=\"stopEventPropagation($event)\"\n >\n <ng-container *ngTemplateOutlet=\"passwordRequirementsRef\"></ng-container>\n </div>\n }\n @if (subcontent) {\n <p class=\"subcontent\">\n @if (!(config().alignment === \"right\")) {\n <span class=\"subcontent-hide\"\n >{{\n config().search\n ? selectedOption() &&\n cast(selectedOption(), \"dropdownOption\")![\n optionLabel || \"label\"\n ]\n : inputRef.value\n }}\n </span>\n }\n {{ subcontent }}\n </p>\n }\n</div>\n\n<!-- #region Templates -->\n\n<!-- #region Password requirements -->\n<ng-template #passwordRequirementsRef>\n @let isMinLengthValid =\n !this.ngControl?.errors?.[\"minlength\"] && this.value();\n @let isHasNumberValid =\n !this.ngControl?.errors?.[\"hasNumber\"] && this.value();\n @let isHasSymbolValid =\n !this.ngControl?.errors?.[\"hasSymbol\"] && this.value();\n @let isHasUppercaseValid =\n !this.ngControl?.errors?.[\"hasUppercase\"] && this.value();\n\n <p>Strong Password Requirement</p>\n <ul>\n <li [class.valid]=\"isMinLengthValid\">\n <svg-icon\n [name]=\"isMinLengthValid ? 'cai-checkmark' : 'cai-cancel'\"\n [class]=\"isMinLengthValid ? 'checkmark' : 'cancel'\"\n class=\"icon\"\n ></svg-icon\n ><span>Minimum 8 characters</span>\n </li>\n <li [class.valid]=\"isHasNumberValid\">\n <svg-icon\n class=\"icon\"\n [name]=\"isHasNumberValid ? 'cai-checkmark' : 'cai-cancel'\"\n [class]=\"isHasNumberValid ? 'checkmark' : 'cancel'\"\n ></svg-icon\n ><span>One number</span>\n </li>\n <li [class.valid]=\"isHasSymbolValid\">\n <svg-icon\n class=\"icon\"\n [name]=\"isHasSymbolValid ? 'cai-checkmark' : 'cai-cancel'\"\n [class]=\"isHasSymbolValid ? 'checkmark' : 'cancel'\"\n ></svg-icon\n ><span>One symbol</span>\n </li>\n <li [class.valid]=\"isHasUppercaseValid\">\n <svg-icon\n class=\"icon\"\n [name]=\"isHasUppercaseValid ? 'cai-checkmark' : 'cai-cancel'\"\n [class]=\"isHasUppercaseValid ? 'checkmark' : 'cancel'\"\n ></svg-icon\n ><span>One upper-case letter</span>\n </li>\n </ul>\n</ng-template>\n<!-- #endregion -->\n@let search = config().search;\n\n<ng-template #dropdownMenuRef>\n @switch (dropdownType) {\n @case (\"dispatch\") {\n <ng-container *ngTemplateOutlet=\"dispatchesRef\"></ng-container>\n }\n @case (\"ftl-dispatch\") {\n <ng-container *ngTemplateOutlet=\"ftlDispatchRef\"></ng-container>\n }\n @case (\"broker\") {\n <ng-container *ngTemplateOutlet=\"brokerRef\"></ng-container>\n }\n @case (\"contact\") {\n <ng-container *ngTemplateOutlet=\"contactRef\"></ng-container>\n }\n @case (\"shipper\") {\n <ng-container *ngTemplateOutlet=\"shipperRef\"></ng-container>\n }\n @case (\"bank\") {\n <ng-container *ngTemplateOutlet=\"bankRef\"></ng-container>\n }\n @case (\"dispatcher\") {\n <ng-container *ngTemplateOutlet=\"dispatcherRef\"></ng-container>\n }\n @case (\"trailer\") {\n <ng-container *ngTemplateOutlet=\"trailerRef\"></ng-container>\n }\n @case (\"truck\") {\n <ng-container *ngTemplateOutlet=\"truckRef\"></ng-container>\n }\n @case (\"hazardous\") {\n <ng-container *ngTemplateOutlet=\"hazardousRef\"></ng-container>\n }\n @case (\"state\") {\n <ng-container *ngTemplateOutlet=\"stateRef\"></ng-container>\n }\n @case (\"owner\") {\n <ng-container *ngTemplateOutlet=\"ownerRef\"></ng-container>\n }\n @case (\"fuelcard\") {\n <ng-container *ngTemplateOutlet=\"fuelcardRef\"></ng-container>\n }\n @case (\"pm\") {\n <ng-container *ngTemplateOutlet=\"pmRef\"></ng-container>\n }\n @case (\"multiple\") {\n <ng-container *ngTemplateOutlet=\"multipleRef\"></ng-container>\n }\n @case (\"make\") {\n <ng-container *ngTemplateOutlet=\"makeRef\"></ng-container>\n }\n @case (\"toll\") {\n <ng-container *ngTemplateOutlet=\"tollRef\"></ng-container>\n }\n @case (\"color\") {\n <ng-container *ngTemplateOutlet=\"colorRef\"></ng-container>\n }\n @case (\"fuel-stop-transaction\") {\n <ng-container *ngTemplateOutlet=\"fuelStopTransactionRef\"></ng-container>\n }\n @case (\"provider\") {\n <ng-container *ngTemplateOutlet=\"providerRef\"></ng-container>\n }\n @case (\"split-driver\") {\n <ng-container *ngTemplateOutlet=\"splitDriverRef\"></ng-container>\n }\n @case (\"split-truck\") {\n <ng-container *ngTemplateOutlet=\"splitTruckRef\"></ng-container>\n }\n @case (\"split-trailer\") {\n <ng-container *ngTemplateOutlet=\"splitTrailerRef\"></ng-container>\n }\n @case (\"subcontent\") {\n <ng-container *ngTemplateOutlet=\"dropdownOptionsRef\"></ng-container>\n }\n @default {\n <ng-container *ngTemplateOutlet=\"dropdownOptionsRef\"></ng-container>\n }\n }\n</ng-template>\n\n<ng-template #selectedOptionRef>\n @switch (dropdownType) {\n @case (\"dispatch\") {\n <ng-container *ngTemplateOutlet=\"selectedDispatchRef\"></ng-container>\n }\n @case (\"ftl-dispatch\") {\n <ng-container *ngTemplateOutlet=\"selectedDispatchRef\"></ng-container>\n }\n @case (\"broker\") {\n <ng-container *ngTemplateOutlet=\"selectedBrokerRef\"></ng-container>\n }\n @case (\"contact\") {\n <ng-container *ngTemplateOutlet=\"selectedContactRef\"></ng-container>\n }\n @case (\"shipper\") {\n <ng-container *ngTemplateOutlet=\"selectedShipperRef\"></ng-container>\n }\n @case (\"bank\") {\n <ng-container *ngTemplateOutlet=\"selectedBankRef\"></ng-container>\n }\n @case (\"dispatcher\") {\n <ng-container *ngTemplateOutlet=\"selectedDispatcherRef\"></ng-container>\n }\n @case (\"trailer\") {\n <ng-container *ngTemplateOutlet=\"selectedTrailerRef\"></ng-container>\n }\n @case (\"truck\") {\n <ng-container *ngTemplateOutlet=\"selectedTruckRef\"></ng-container>\n }\n @case (\"hazardous\") {\n <ng-container *ngTemplateOutlet=\"selectedHazardousRef\"></ng-container>\n }\n @case (\"state\") {\n <ng-container *ngTemplateOutlet=\"selectedStateRef\"></ng-container>\n }\n @case (\"owner\") {\n <ng-container *ngTemplateOutlet=\"selectedOwnerRef\"></ng-container>\n }\n @case (\"fuelcard\") {\n <ng-container *ngTemplateOutlet=\"selectedFuelcardRef\"></ng-container>\n }\n @case (\"pm\") {\n <ng-container *ngTemplateOutlet=\"selectedPmRef\"></ng-container>\n }\n @case (\"make\") {\n <ng-container *ngTemplateOutlet=\"selectedMakeRef\"></ng-container>\n }\n @case (\"toll\") {\n <ng-container *ngTemplateOutlet=\"selectedTollRef\"></ng-container>\n }\n @case (\"color\") {\n <ng-container *ngTemplateOutlet=\"selectedColorRef\"></ng-container>\n }\n @case (\"provider\") {\n <ng-container *ngTemplateOutlet=\"selectedProviderRef\"></ng-container>\n }\n @case (\"split-driver\") {\n <ng-container *ngTemplateOutlet=\"selectedSplitDriverRef\"></ng-container>\n }\n @case (\"split-truck\") {\n <ng-container *ngTemplateOutlet=\"selectedSplitTruckRef\"></ng-container>\n }\n @case (\"split-trailer\") {\n <ng-container *ngTemplateOutlet=\"selectedSplitTrailerRef\"></ng-container>\n }\n }\n</ng-template>\n\n<!-- Standard dropdown -->\n<ng-template #dropdownOptionsRef>\n @if (dropdownOptions().length) {\n @for (option of dropdownOptions(); track $index; let index = $index) {\n @let dropdownOption = cast(option, \"dropdownOption\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ dropdownOption.id }}\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'dropdownOption')?.id === dropdownOption.id,\n focused: focusedOptionIndex === index,\n }\"\n (pointerdown)=\"handleOption(dropdownOption, $event)\"\n >\n @if (dropdownOption[optionLabel] === \"Hazardous\") {\n <svg-icon name=\"cai-violation-hazmat\" class=\"icon\"></svg-icon>\n }\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (dropdownOption[optionLabel] | highlightSearch: value())\n : dropdownOption[optionLabel]\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #multipleRef>\n @if (dropdownOptions().length) {\n @for (option of dropdownOptions(); track $index; let index = $index) {\n @let dropdownOption = cast(option, \"dropdownOption\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ dropdownOption.id }}\"\n (pointerdown)=\"handleOption(dropdownOption, $event)\"\n [class]=\"{\n selected: isSelectedOption(dropdownOption),\n focused: focusedOptionIndex === index,\n }\"\n >\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (dropdownOption[optionLabel] | highlightSearch: value())\n : dropdownOption[optionLabel]\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #bankRef>\n @if (dropdownOptions().length) {\n @for (bank of dropdownOptions(); track $index; let index = $index) {\n @let bankOption = cast(bank, \"bank\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ bankOption.id }}\"\n (pointerdown)=\"handleOption(bankOption, $event)\"\n [class]=\"{\n selected: cast(selectedOption(), 'bank')?.id === bankOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n @if (bankOption.logoName) {\n <svg-icon\n class=\"full-icon\"\n [name]=\"bankOption.logoName.slice(0, -4)\"\n ></svg-icon>\n } @else {\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (bankOption.name || '' | highlightSearch: value())\n : bankOption.name\n \"\n ></p>\n }\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #makeRef>\n @if (dropdownOptions().length) {\n @for (make of dropdownOptions(); track $index; let index = $index) {\n @let makeOption = cast(make, \"make\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ makeOption.id }}\"\n (pointerdown)=\"handleOption(makeOption, $event)\"\n [class]=\"{\n selected: cast(selectedOption(), 'make')?.id === makeOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n @if (makeOption.logoName) {\n <svg-icon\n class=\"full-icon\"\n [name]=\"makeOption.logoName.slice(0, -4)\"\n ></svg-icon>\n } @else {\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (makeOption.name || '' | highlightSearch: value())\n : makeOption.name\n \"\n ></p>\n }\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Broker -->\n<ng-template #brokerRef>\n @if (dropdownOptions().length) {\n @for (broker of dropdownOptions(); track $index; let index = $index) {\n @let brokerOption = cast(broker, \"broker\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"broker-{{ brokerOption.id }}\"\n (pointerdown)=\"\n !(brokerOption.dnu || brokerOption.ban) &&\n handleOption(brokerOption, $event)\n \"\n [class]=\"{\n selected: cast(selectedOption(), 'broker')?.id === brokerOption.id,\n focused: focusedOptionIndex === index,\n banned: brokerOption.dnu || brokerOption.ban,\n dnu: brokerOption.dnu,\n }\"\n >\n @if (brokerOption?.dnu || brokerOption?.ban) {\n <svg-icon name=\"cai-minus\" class=\"round-icon\"></svg-icon>\n } @else if (brokerOption?.fraudCheck) {\n <svg-icon\n name=\"cai-status-warning-lite\"\n class=\"icon fraud\"\n ></svg-icon>\n }\n <p\n class=\"dropdown-content\"\n [innerHTML]=\"\n search\n ? (brokerOption.businessName || '' | highlightSearch: value())\n : brokerOption.businessName\n \"\n ></p>\n <div class=\"dropdown-subitem-end\">\n <div class=\"end-item-base\">\n @if (!brokerOption.creditLimit) {\n <p>Unlimited</p>\n } @else {\n <p>{{ brokerOption.availableCredit || 0 | currency }}</p>\n <div\n class=\"progress-bar\"\n [style.--progress]=\"\n (\n brokerOption\n | brokerProgress: brokerOption.dnu || brokerOption.ban\n ).activePercentageOfPaid + '%'\n \"\n [class]=\"\n (\n brokerOption\n | brokerProgress: brokerOption.dnu || brokerOption.ban\n ).status\n \"\n ></div>\n }\n </div>\n <div class=\"end-item-hover\">\n <p>\n {{ brokerOption.loadsCount }} |\n {{ brokerOption.availableCredit || 0 | currency }}\n </p>\n <svg-icon name=\"cai-load\" class=\"icon\"></svg-icon>\n </div>\n </div>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Contact dropdown -->\n<ng-template #contactRef>\n @if (dropdownOptions().length) {\n @for (contact of dropdownOptions(); track $index; let index = $index) {\n @let contactOption = cast(contact, \"contact\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"contact-{{ contact.id }}\"\n (pointerdown)=\"handleOption(contact, $event)\"\n [class]=\"{\n selected: cast(selectedOption(), 'contact')?.id === contact.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <p\n [innerHTML]=\"\n search\n ? (contactOption.contactName || '' | highlightSearch: value())\n : contactOption.contactName\n \"\n ></p>\n <div class=\"dropdown-subitem-end\">\n <div class=\"end-item-base\">\n <p>{{ contactOption.department?.name }}</p>\n </div>\n <div class=\"end-item-hover\">\n <p>\n {{ contactOption.phone }}\n </p>\n </div>\n </div>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Owner dropdown -->\n<ng-template #ownerRef>\n @if (dropdownOptions().length) {\n @for (owner of dropdownOptions(); track $index; let index = $index) {\n @let ownerOption = cast(owner, \"owner\");\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"owner-{{ ownerOption?.id }}\"\n (pointerdown)=\"handleOption(ownerOption!, $event)\"\n [class]=\"{\n selected: cast(selectedOption(), 'owner')?.id === ownerOption?.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <p\n class=\"owner-ein\"\n [innerHTML]=\"\n search\n ? (ownerOption?.ein || '' | highlightSearch: value())\n : ownerOption?.ein\n \"\n ></p>\n <p\n [innerHTML]=\"\n search\n ? (ownerOption?.name || '' | highlightSearch: value())\n : ownerOption?.name\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Fuelcard dropdown -->\n<ng-template #fuelcardRef>\n @if (dropdownOptions().length) {\n @for (fuelcard of dropdownOptions(); track $index; let index = $index) {\n @let fuelcardOption = cast(fuelcard, \"fuelCard\");\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"fuelcard-{{ fuelcardOption?.id }}\"\n (pointerdown)=\"handleOption(fuelcardOption!, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'fuelCard')?.id === fuelcardOption?.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <p\n class=\"fuelcard-number\"\n [innerHTML]=\"\n search\n ? (fuelcardOption?.number || '' | highlightSearch: value())\n : fuelcardOption?.number\n \"\n ></p>\n <p\n class=\"fuelcard-brand\"\n [innerHTML]=\"\n search\n ? (fuelcardOption?.brand || '' | highlightSearch: value())\n : fuelcardOption?.brand\n \"\n ></p>\n <p\n [innerHTML]=\"\n search\n ? (fuelcardOption?.account || '' | highlightSearch: value())\n : fuelcardOption?.account\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Shipper dropdown -->\n<ng-template #shipperRef>\n @if (dropdownOptions().length) {\n @for (shipper of dropdownOptions(); track $index; let index = $index) {\n @let shipperOption = cast(shipper, \"shipper\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"shipper-{{ shipperOption.id }}\"\n (pointerdown)=\"handleOption(shipperOption, $event)\"\n [class]=\"{\n selected: cast(selectedOption(), 'shipper')?.id === shipperOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <p\n class=\"max-w-280 text-truncate\"\n [innerHTML]=\"\n search\n ? (shipperOption.businessName || '' | highlightSearch: value())\n : shipperOption.businessName\n \"\n ></p>\n <div class=\"dropdown-subitem-end\">\n <div class=\"end-item-base\">\n <p\n class=\"max-w-280 text-truncate\"\n [innerHTML]=\"\n search\n ? (shipperOption.address?.address || ''\n | highlightSearch: value())\n : shipperOption.address?.address\n \"\n ></p>\n </div>\n <div class=\"end-item-hover\">\n <p>\n {{ shipperOption.pickupCount }} Pickup |\n {{ shipperOption.deliveryCount }} Delivery\n </p>\n <svg-icon name=\"cai-load\" class=\"icon\"></svg-icon>\n </div>\n </div>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Dispatch dropdown -->\n<ng-template #dispatchesRef>\n @if (dropdownOptions().length) {\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n (pointerdown)=\"reset()\"\n [class]=\"{\n selected: !selectedOption(),\n }\"\n >\n <p>Unassigned</p>\n <div class=\"unassigned-ltl\">\n <p>{{ unassignedCount() }}</p>\n <svg-icon name=\"cai-ltl-single\" class=\"icon-sm\"></svg-icon>\n </div>\n </button>\n @for (\n dispatchBoard of dropdownOptions();\n track dispatchBoard.id;\n let groupIndex = $index\n ) {\n <!-- Temporary variant since BE doesn't support boards -->\n @let dispatchBoardOption = cast(dispatchBoard, \"dispatchBoard\")!;\n\n @let isNoBoardsVariant =\n dispatchBoardOption.dispatcher === \"NOBOARDSVARIANT\";\n @if (dispatchBoardOption.count > 0) {\n @if (!isNoBoardsVariant) {\n @let isGroupFocused =\n groupedNavigationState?.groupIndex === groupIndex &&\n groupedNavigationState?.optionIndex === 0;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item group-item\"\n (pointerdown)=\"fold(dispatchBoardOption.id, $event)\"\n [class]=\"{\n unfolded: dispatchBoardOption.dispatches?.length || 0 > 0,\n focused: isGroupFocused,\n }\"\n >\n <p>\n {{\n dispatchBoardOption.teamBoard\n ? \"Team Board\"\n : dispatchBoardOption.dispatcher\n }}\n </p>\n <p class=\"counter\">{{ dispatchBoardOption.count }}</p>\n <svg-icon\n name=\"cai-arrow-primary-up\"\n class=\"group-icon icon\"\n ></svg-icon>\n </button>\n }\n @if (\n dispatchBoardOption.dispatches &&\n dispatchBoardOption.dispatches.length > 0\n ) {\n @for (\n dispatch of dispatchBoardOption.dispatches;\n track dispatch.id;\n let optionIndex = $index\n ) {\n @let isOptionFocused =\n groupedNavigationState?.groupIndex === groupIndex &&\n groupedNavigationState?.optionIndex === optionIndex + 1;\n <!-- +1 since optionIndex is 0 for the group item header -->\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n (pointerdown)=\"handleOption(dispatch, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'dispatch')?.id === dispatch.id,\n focused: isOptionFocused,\n }\"\n >\n <div class=\"dropdown-subitem truck-item\">\n <svg-icon\n class=\"truck-icon truck-trailer-icon-colors\"\n [class]=\"dispatch.truck.truckType.logoName.slice(0, -4)\"\n [name]=\"dispatch.truck.truckType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p\n class=\"truck-number\"\n [innerHTML]=\"\n dispatch.truck.truckNumber | highlightSearch: value()\n \"\n ></p>\n </div>\n <div class=\"dropdown-subitem trailer-item\">\n @if (dispatch.trailer) {\n <svg-icon\n class=\"trailer-icon truck-trailer-icon-colors\"\n [class]=\"dispatch.trailer.trailerType.logoName.slice(0, -4)\"\n [name]=\"dispatch.trailer.trailerType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p\n class=\"trailer-number\"\n [innerHTML]=\"\n dispatch.trailer.trailerNumber | highlightSearch: value()\n \"\n ></p>\n }\n </div>\n <div class=\"dropdown-subitem\">\n @if (dispatch.coDriver) {\n <svg-icon class=\"dispatch-icon\" name=\"cai-people\"></svg-icon>\n <p\n class=\"driver-name\"\n [innerHTML]=\"\n dispatch.driver.firstName +\n ' & ' +\n dispatch.coDriver.firstName | highlightSearch: value()\n \"\n ></p>\n } @else {\n <cai-avatar\n [driver]=\"dispatch.driver\"\n [size]=\"18\"\n [inverse]=\"true\"\n [hover]=\"false\"\n ></cai-avatar>\n <p\n class=\"driver-name\"\n [innerHTML]=\"\n dispatch.driver.firstName + ' ' + dispatch.driver.lastName\n | highlightSearch: value()\n \"\n ></p>\n }\n </div>\n <div class=\"dropdown-subitem-end\">\n <div class=\"end-item-hover\">\n <p>{{ dispatch.payType }}</p>\n <svg-icon name=\"cai-driver\" class=\"icon-sm\"></svg-icon>\n </div>\n <div class=\"end-item-base dispatch-ltl\">\n <p>{{ dispatch.numberOfSingleLtlLoads }}</p>\n <svg-icon name=\"cai-ltl-single\" class=\"icon-sm\"></svg-icon>\n </div>\n </div>\n </button>\n }\n } @else if (isNoBoardsVariant) {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n }\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- ftl dispatch dropdown -->\n<ng-template #ftlDispatchRef>\n @if (dropdownOptions().length) {\n @for (\n dispatchBoard of dropdownOptions();\n track dispatchBoard.id;\n let groupIndex = $index\n ) {\n @let dispatchBoardOption = cast(dispatchBoard, \"dispatchBoard\")!;\n @let isGroupFocused =\n groupedNavigationState?.groupIndex === groupIndex &&\n groupedNavigationState?.optionIndex === 0;\n @let isNoBoardsVariant =\n dispatchBoardOption.dispatcher === \"NOBOARDSVARIANT\";\n @if (dispatchBoardOption.count > 0) {\n @if (!isNoBoardsVariant) {\n <button\n tabindex=\"-1\"\n class=\"dropdown-item group-item\"\n (pointerdown)=\"fold(dispatchBoardOption.id, $event)\"\n [class]=\"{\n unfolded: dispatchBoardOption.dispatches?.length || 0 > 0,\n focused: isGroupFocused,\n }\"\n >\n <p>\n {{\n dispatchBoardOption.teamBoard\n ? \"Team Board\"\n : dispatchBoardOption.dispatcher\n }}\n </p>\n <p class=\"counter\">{{ dispatchBoardOption.count }}</p>\n <svg-icon\n name=\"cai-arrow-primary-up\"\n class=\"group-icon icon\"\n ></svg-icon>\n </button>\n }\n @if (\n dispatchBoardOption.dispatches &&\n dispatchBoardOption.dispatches.length > 0\n ) {\n @for (\n dispatch of dispatchBoardOption.dispatches;\n track dispatch.id;\n let optionIndex = $index\n ) {\n @let isOptionFocused =\n groupedNavigationState?.groupIndex === groupIndex &&\n groupedNavigationState?.optionIndex === optionIndex + 1;\n <!-- +1 since optionIndex is 0 for the group item header -->\n <button\n class=\"dropdown-item\"\n (pointerdown)=\"handleOption(dispatch, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'dispatch')?.id === dispatch.id,\n focused: isOptionFocused,\n }\"\n >\n <div class=\"dropdown-subitem truck-item\">\n <svg-icon\n class=\"truck-icon truck-trailer-icon-colors\"\n [class]=\"dispatch.truck.truckType.logoName.slice(0, -4)\"\n [name]=\"dispatch.truck.truckType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p\n class=\"truck-number\"\n [innerHTML]=\"\n dispatch.truck.truckNumber | highlightSearch: value()\n \"\n ></p>\n </div>\n <div class=\"dropdown-subitem trailer-item\">\n @if (dispatch.trailer) {\n <svg-icon\n class=\"trailer-icon truck-trailer-icon-colors\"\n [class]=\"dispatch.trailer.trailerType.logoName.slice(0, -4)\"\n [name]=\"dispatch.trailer.trailerType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p\n class=\"trailer-number\"\n [innerHTML]=\"\n dispatch.trailer.trailerNumber | highlightSearch: value()\n \"\n ></p>\n }\n </div>\n <div class=\"dropdown-subitem\">\n @if (dispatch.coDriver) {\n <svg-icon class=\"dispatch-icon\" name=\"cai-people\"></svg-icon>\n <p\n class=\"driver-name\"\n [innerHTML]=\"\n dispatch.driver.firstName +\n ' & ' +\n dispatch.coDriver.firstName | highlightSearch: value()\n \"\n ></p>\n } @else {\n <cai-avatar\n [driver]=\"dispatch.driver\"\n [size]=\"18\"\n [inverse]=\"true\"\n [hover]=\"false\"\n ></cai-avatar>\n <p\n class=\"driver-name\"\n [innerHTML]=\"\n dispatch.driver.firstName + ' ' + dispatch.driver.lastName\n | highlightSearch: value()\n \"\n ></p>\n }\n </div>\n <div class=\"dropdown-subitem-end\">\n <div class=\"end-item-hover\">\n <!-- Load Status -->\n @if (dispatch.status?.statusString) {\n <div\n class=\"dispatch-status\"\n [class]=\"\n 'status-' +\n dispatch.status?.statusString\n ?.toLowerCase()\n ?.replaceAll(' ', '')\n ?.replaceAll('.', '')\n \"\n >\n @if (\n dispatch.status?.statusString?.toLowerCase() ===\n \"repair\"\n ) {\n <p class=\"status-block blue\">D</p>\n <p class=\"status-block green\">L</p>\n }\n {{ dispatch.status?.statusString }}\n @if (\n dispatch.status?.statusString?.toLowerCase() ===\n \"repair\"\n ) {\n <p class=\"status-block green\">P</p>\n <p class=\"status-block orange\">D</p>\n }\n @if (dispatch.status?.statusCheckInNumber) {\n <p class=\"status-block\">\n {{ dispatch.status?.statusCheckInNumber }}\n </p>\n }\n </div>\n <p class=\"dispatch-separator\">|</p>\n }\n <p class=\"dispatch-load-count\">\n <!-- Pending Load Count -->\n <!-- TODO: WAITING ON BE FOR PENDING LOAD COUNT -->\n 0\n </p>\n <svg-icon name=\"cai-load\" class=\"icon-sm\"></svg-icon>\n </div>\n <div class=\"end-item-base\">\n <p>{{ dispatch.payType }}</p>\n <svg-icon name=\"cai-driver\" class=\"icon-sm\"></svg-icon>\n </div>\n </div>\n </button>\n }\n } @else if (isNoBoardsVariant) {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n }\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #splitDriverRef>\n @if (dropdownOptions().length) {\n @for (splitDriverBoard of dropdownOptions(); track splitDriverBoard.id) {\n @let driverBoard = cast(splitDriverBoard, \"splitDriverBoard\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item group-item\"\n (pointerdown)=\"fold(driverBoard.id, $event)\"\n [class]=\"{\n unfolded: (driverBoard.drivers?.length ?? 0) > 0,\n }\"\n >\n <p>\n {{\n driverBoard.isTeamBoard ? \"Team Board\" : driverBoard.dispatcherName\n }}\n </p>\n <!-- TODO: Change to count once BE is fixed -->\n <p class=\"counter\">{{ driverBoard.drivers?.length || 0 }}</p>\n <svg-icon\n name=\"cai-arrow-primary-up\"\n class=\"group-icon icon\"\n ></svg-icon>\n </button>\n @for (driver of driverBoard.drivers || []; track driver.id) {\n @let driverOption = cast(driver, \"splitDriver\")!;\n <button\n class=\"dropdown-item\"\n (pointerdown)=\"handleOption(driverOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'splitDriver')?.id === driverOption.id,\n }\"\n >\n <div class=\"dropdown-subitem\">\n <div class=\"dropdown-avatar\">\n <cai-avatar\n [driver]=\"driverOption\"\n [size]=\"18\"\n [inverse]=\"true\"\n [hover]=\"false\"\n ></cai-avatar>\n </div>\n <p\n class=\"driver-name\"\n [innerHTML]=\"\n driverOption.firstName + ' ' + driverOption.lastName\n | highlightSearch: value()\n \"\n ></p>\n </div>\n <div class=\"dropdown-subitem-end\">\n <div class=\"end-item-hover\">\n @let dispatchStatus =\n driverOption.dispatchStatus?.statusValue?.name;\n @if (dispatchStatus) {\n <div\n class=\"dispatch-status\"\n [class]=\"\n 'status-' +\n dispatchStatus\n ?.toLowerCase()\n ?.replaceAll(' ', '')\n ?.replaceAll('.', '')\n \"\n >\n @if (dispatchStatus?.toLowerCase() === \"repair\") {\n <p class=\"status-block blue\">D</p>\n <p class=\"status-block green\">L</p>\n }\n {{ dispatchStatus }}\n @if (dispatchStatus?.toLowerCase() === \"repair\") {\n <p class=\"status-block green\">P</p>\n <p class=\"status-block orange\">D</p>\n }\n @if (driverOption.dispatchStatus?.statusCheckInNumber) {\n <p class=\"status-block\">\n {{ driverOption.dispatchStatus?.statusCheckInNumber }}\n </p>\n }\n </div>\n <p class=\"dispatch-separator\">|</p>\n }\n <p class=\"dispatch-load-count\">\n {{ driverOption.pendingLoadsCount }}\n </p>\n <svg-icon name=\"cai-load\" class=\"icon-sm\"></svg-icon>\n </div>\n <div class=\"end-item-base\">\n <p>{{ driverOption.payTypeValue }}</p>\n </div>\n </div>\n </button>\n }\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #splitTruckRef>\n @if (dropdownOptions().length) {\n @for (splitTruckBoard of dropdownOptions(); track splitTruckBoard.id) {\n @let truckBoard = cast(splitTruckBoard, \"splitTruckBoard\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item group-item\"\n (pointerdown)=\"fold(truckBoard.id, $event)\"\n [class]=\"{\n unfolded: (truckBoard.trucks?.length ?? 0) > 0,\n }\"\n >\n <p>\n {{\n truckBoard.isTeamBoard ? \"Team Board\" : truckBoard.dispatcherName\n }}\n </p>\n <!-- TODO: Change to count once BE is fixed -->\n <p class=\"counter\">{{ truckBoard.trucks?.length || 0 }}</p>\n <svg-icon\n name=\"cai-arrow-primary-up\"\n class=\"group-icon icon\"\n ></svg-icon>\n </button>\n @for (truck of truckBoard.trucks || []; track truck.id) {\n @let truckOption = cast(truck, \"splitTruck\")!;\n <button\n class=\"dropdown-item\"\n (pointerdown)=\"handleOption(truckOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'splitTruck')?.id === truckOption.id,\n }\"\n >\n <div class=\"dropdown-subitem truck-item\">\n <svg-icon\n class=\"truck-icon\"\n [style.--truck-color]=\"truckOption.color?.code || ''\"\n [name]=\"truckOption.truckType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p\n class=\"truck-number\"\n [innerHTML]=\"truckOption.truckNumber | highlightSearch: value()\"\n ></p>\n </div>\n <div class=\"dropdown-subitem-end\">\n <div class=\"end-item-hover\">\n @let dispatchStatus =\n truckOption.dispatchStatus?.statusValue?.name;\n @if (dispatchStatus) {\n <div\n class=\"dispatch-status\"\n [class]=\"\n 'status-' +\n dispatchStatus\n ?.toLowerCase()\n ?.replaceAll(' ', '')\n ?.replaceAll('.', '')\n \"\n >\n @if (dispatchStatus?.toLowerCase() === \"repair\") {\n <p class=\"status-block blue\">D</p>\n <p class=\"status-block green\">L</p>\n }\n {{ dispatchStatus }}\n @if (dispatchStatus?.toLowerCase() === \"repair\") {\n <p class=\"status-block green\">P</p>\n <p class=\"status-block orange\">D</p>\n }\n @if (truckOption.dispatchStatus?.statusCheckInNumber) {\n <p class=\"status-block\">\n {{ truckOption.dispatchStatus?.statusCheckInNumber }}\n </p>\n }\n </div>\n <p class=\"dispatch-separator\">|</p>\n }\n <p class=\"dispatch-load-count\">\n {{ truckOption.pendingLoadsCount }}\n </p>\n <svg-icon name=\"cai-load\" class=\"icon-sm\"></svg-icon>\n </div>\n <div class=\"end-item-base\">\n @if (\n truckOption.location?.city &&\n truckOption.location?.stateShortName\n ) {\n <p>\n {{ truckOption.location?.city }},\n {{ truckOption.location?.stateShortName }}\n </p>\n }\n </div>\n </div>\n </button>\n }\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #splitTrailerRef>\n @if (dropdownOptions().length) {\n @for (splitTrailerBoard of dropdownOptions(); track splitTrailerBoard.id) {\n @let trailerBoard = cast(splitTrailerBoard, \"splitTrailerBoard\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item group-item\"\n (pointerdown)=\"fold(trailerBoard.id, $event)\"\n [class]=\"{\n unfolded: (trailerBoard.trailers?.length ?? 0) > 0,\n }\"\n >\n <p>\n {{\n trailerBoard.isTeamBoard\n ? \"Team Board\"\n : trailerBoard.dispatcherName\n }}\n </p>\n <!-- TODO: Change to count once BE is fixed -->\n <p class=\"counter\">{{ trailerBoard.trailers?.length || 0 }}</p>\n <svg-icon\n name=\"cai-arrow-primary-up\"\n class=\"group-icon icon\"\n ></svg-icon>\n </button>\n @for (trailer of trailerBoard.trailers || []; track trailer.id) {\n @let trailerOption = cast(trailer, \"splitTrailer\")!;\n <button\n class=\"dropdown-item\"\n (pointerdown)=\"handleOption(trailerOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'splitTrailer')?.id === trailerOption.id,\n }\"\n >\n <div class=\"dropdown-subitem trailer-item\">\n <svg-icon\n class=\"trailer-icon\"\n [style.--trailer-color]=\"trailerOption.color?.code || ''\"\n [name]=\"trailerOption.trailerType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p\n class=\"trailer-number\"\n [innerHTML]=\"\n trailerOption.trailerNumber | highlightSearch: value()\n \"\n ></p>\n </div>\n <div class=\"dropdown-subitem-end\">\n <div class=\"end-item-hover\">\n @let dispatchStatus =\n trailerOption.dispatchStatus?.statusValue?.name;\n @if (dispatchStatus) {\n <div\n class=\"dispatch-status\"\n [class]=\"\n 'status-' +\n dispatchStatus\n ?.toLowerCase()\n ?.replaceAll(' ', '')\n ?.replaceAll('.', '')\n \"\n >\n @if (dispatchStatus?.toLowerCase() === \"repair\") {\n <p class=\"status-block blue\">D</p>\n <p class=\"status-block green\">L</p>\n }\n {{ dispatchStatus }}\n @if (dispatchStatus?.toLowerCase() === \"repair\") {\n <p class=\"status-block green\">P</p>\n <p class=\"status-block orange\">D</p>\n }\n @if (trailerOption.dispatchStatus?.statusCheckInNumber) {\n <p class=\"status-block\">\n {{ trailerOption.dispatchStatus?.statusCheckInNumber }}\n </p>\n }\n </div>\n <p class=\"dispatch-separator\">|</p>\n }\n <p class=\"dispatch-load-count\">\n {{ trailerOption.pendingLoadsCount }}\n </p>\n <svg-icon name=\"cai-load\" class=\"icon-sm\"></svg-icon>\n </div>\n <div class=\"end-item-base\">\n @if (\n trailerOption.location?.city &&\n trailerOption.location?.stateShortName\n ) {\n <p>\n {{ trailerOption.location?.city }},\n {{ trailerOption.location?.stateShortName }}\n </p>\n }\n </div>\n </div>\n </button>\n }\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #tollRef>\n @if (dropdownOptions().length) {\n @for (toll of dropdownOptions(); track $index; let groupIndex = $index) {\n @let tollOption = cast(toll, \"tollOption\")!;\n @let isGroupFocused =\n groupedNavigationState?.groupIndex === groupIndex &&\n groupedNavigationState?.optionIndex === 0;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item group-item pe-none\"\n [class]=\"{\n unfolded: tollOption.tollTransponders?.length || 0 > 0,\n focused: isGroupFocused,\n }\"\n >\n <p>\n {{ tollOption.groupName }}\n </p>\n </button>\n @let tollTransponders = tollOption.tollTransponders || [];\n @for (\n tollTransponder of tollTransponders;\n track tollTransponder.id;\n let optionIndex = $index\n ) {\n @let isOptionFocused =\n groupedNavigationState?.groupIndex === groupIndex &&\n groupedNavigationState?.optionIndex === optionIndex + 1;\n <!-- +1 since optionIndex is 0 for the group item header -->\n <button\n class=\"dropdown-item\"\n (pointerdown)=\"handleOption(tollTransponder, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'tollTransponderOption')?.id ===\n tollTransponder.id,\n focused: isOptionFocused,\n }\"\n >\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (tollTransponder.name || '' | highlightSearch: value())\n : tollTransponder.name\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Dispatcher dropdown -->\n\n<ng-template #dispatcherRef>\n @if (dropdownOptions().length) {\n @for (dispatcher of dropdownOptions(); track $index; let index = $index) {\n @let dispatcherOption = cast(dispatcher, \"dispatcher\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ dispatcherOption.id }}\"\n (pointerdown)=\"handleOption(dispatcherOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'dispatcher')?.id === dispatcherOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <cai-avatar\n [driver]=\"{\n id: dispatcherOption?.id || 0,\n firstName: (dispatcherOption?.fullName || ' ').split(' ')[0] || '',\n lastName: (dispatcherOption?.fullName || ' ').split(' ')[1] || '',\n avatarFile: dispatcherOption?.avatarFile,\n colorFlag: dispatcherOption?.colorFlag,\n }\"\n [rounded]=\"!config().squareAvatar\"\n [hover]=\"false\"\n ></cai-avatar>\n <p\n class=\"dropdown-content-hazardous\"\n [innerHTML]=\"\n search\n ? (dispatcherOption.fullName || '' | highlightSearch: value())\n : dispatcherOption.fullName\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #truckRef>\n @if (dropdownOptions().length) {\n @for (truck of dropdownOptions(); track $index; let index = $index) {\n @let truckOption = cast(truck, \"truckOption\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ truckOption.id }}\"\n (pointerdown)=\"handleOption(truckOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'truckOption')?.id === truckOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (truckOption.name || '' | highlightSearch: value())\n : truckOption.name\n \"\n ></p>\n <svg-icon\n class=\"truck-trailer-option truck-trailer-icon-colors\"\n [class]=\"truckOption.logoName.slice(0, -4)\"\n [name]=\"truckOption.logoName.slice(0, -4)\"\n ></svg-icon>\n <svg-icon\n name=\"cai-checkmark\"\n class=\"dropdown-item-icon no-margin\"\n ></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #trailerRef>\n @if (dropdownOptions().length) {\n @for (truck of dropdownOptions(); track $index; let index = $index) {\n @let trailerOption = cast(truck, \"trailerOption\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ trailerOption.id }}\"\n (pointerdown)=\"handleOption(trailerOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'trailerOption')?.id === trailerOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (trailerOption.name || '' | highlightSearch: value())\n : trailerOption.name\n \"\n ></p>\n\n <svg-icon\n class=\"truck-trailer-option truck-trailer-icon-colors\"\n [class]=\"trailerOption.logoName.slice(0, -4)\"\n [name]=\"trailerOption.logoName.slice(0, -4)\"\n ></svg-icon>\n <svg-icon\n name=\"cai-checkmark\"\n class=\"dropdown-item-icon no-margin\"\n ></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #providerRef>\n @if (dropdownOptions().length) {\n @for (provider of dropdownOptions(); track $index; let index = $index) {\n @let providerOption = cast(provider, \"provider\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ providerOption?.id }}\"\n (pointerdown)=\"handleOption(providerOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'provider')?.id === providerOption?.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <svg-icon\n class=\"full-icon\"\n [name]=\"'cai-' + providerOption?.name?.toLowerCase()\"\n ></svg-icon>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Hazardous dropdown -->\n<ng-template #hazardousRef>\n @if (dropdownOptions().length) {\n @for (hazardous of dropdownOptions(); track $index; let index = $index) {\n @let hazardousOption = cast(hazardous, \"hazardous\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ hazardousOption.id }}\"\n (pointerdown)=\"handleOption(hazardousOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'hazardous')?.id === hazardousOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <svg-icon [name]=\"hazardousOption.logoName?.slice(0, -4)\"></svg-icon>\n <p\n class=\"dropdown-content-hazardous\"\n [innerHTML]=\"\n search\n ? (hazardousOption.description || '' | highlightSearch: value())\n : hazardousOption.description\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #pmRef>\n @if (dropdownOptions().length) {\n @for (pm of dropdownOptions(); track $index; let index = $index) {\n @let pmOption = cast(pm, \"pmOption\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ pmOption.id }}\"\n (pointerdown)=\"handleOption(pmOption, $event)\"\n [class]=\"{\n selected: cast(selectedOption(), 'pmOption')?.id === pmOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <svg-icon\n class=\"icon\"\n [name]=\"pmOption.title | remapPmIcons\"\n ></svg-icon>\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (pmOption.title || '' | highlightSearch: value())\n : pmOption.title\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #colorRef>\n @if (dropdownOptions().length) {\n @for (color of dropdownOptions(); track $index; let index = $index) {\n @let colorOption = cast(color, \"colorOption\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item color-item\"\n id=\"option-{{ colorOption.id }}\"\n (pointerdown)=\"handleOption(colorOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'colorOption')?.id === colorOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <svg-icon\n class=\"icon cai-color\"\n [name]=\"'cai-color'\"\n [style.--color]=\"colorOption?.code\"\n [style.--hover-color]=\"colorOption?.hoverCode\"\n ></svg-icon>\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (colorOption.name || '' | highlightSearch: value())\n : colorOption.name\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #stateRef>\n @if (dropdownOptions().length) {\n @for (state of dropdownOptions(); track $index; let index = $index) {\n @let stateOption = cast(state, \"state\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ stateOption.id }}\"\n (pointerdown)=\"handleOption(stateOption, $event)\"\n [class]=\"{\n selected: cast(selectedOption(), 'state')?.id === stateOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <svg-icon\n class=\"icon\"\n [name]=\"\n 'cai-' +\n stateOption?.countryType?.name?.toLowerCase() +\n '-' +\n stateOption?.stateShortName?.toLowerCase()\n \"\n ></svg-icon>\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (stateOption.stateShortName +\n ' ' +\n (config().fullState\n ? ' (' + stateOption?.stateName + ')'\n : '') || '' | highlightSearch: value())\n : stateOption.stateShortName +\n ' ' +\n (config().fullState ? ' (' + stateOption?.stateName + ')' : '')\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #fuelStopTransactionRef>\n @if (dropdownOptions().length) {\n @for (\n franchise of dropdownOptions();\n track franchise.id;\n let groupIndex = $index\n ) {\n @let isGroupFocused =\n groupedNavigationState?.groupIndex === groupIndex &&\n groupedNavigationState?.optionIndex === 0;\n @let franchiseOption = cast(franchise, \"franchise\")!;\n @if (franchiseOption?.count !== null) {\n <div\n class=\"dropdown-group\"\n [class.no-items]=\"!franchiseOption?.count\"\n [class]=\"{\n active: openGroup() === franchiseOption.id,\n }\"\n [style.--max-height]=\"\n openGroup() === franchiseOption.id\n ? 30 * ((franchiseOption.fuelStopStores?.length || 0) + 1) + 'px'\n : '26px'\n \"\n >\n <button\n tabindex=\"-1\"\n class=\"dropdown-item group-item\"\n (pointerdown)=\"fold(franchiseOption.id, $event, franchiseOption)\"\n [class]=\"{\n unfolded: openGroup() === franchiseOption.id,\n focused: isGroupFocused,\n }\"\n >\n <p\n [innerHTML]=\"\n franchiseOption?.businessName || '' | highlightSearch: value()\n \"\n ></p>\n <p class=\"counter\">{{ franchiseOption.count }}</p>\n <svg-icon\n name=\"cai-arrow-primary-up\"\n class=\"group-icon icon\"\n ></svg-icon>\n </button>\n @if (openGroup() === franchiseOption.id) {\n @if (franchiseOption.fuelStopStores?.length || 0 > 0) {\n @for (\n fuelStopStore of franchiseOption.fuelStopStores;\n track fuelStopStore.id\n ) {\n @let isOptionFocused =\n groupedNavigationState?.groupIndex === groupIndex &&\n groupedNavigationState?.optionIndex === $index + 1;\n <!-- +1 since optionIndex is 0 for the group item header -->\n <button\n tabindex=\"-1\"\n class=\"dropdown-item fuel-stop-transaction-store\"\n [class]=\"{\n focused: isOptionFocused,\n }\"\n (pointerdown)=\"handleOption(fuelStopStore, $event)\"\n >\n <p\n [innerHTML]=\"\n fuelStopStore?.store ?? '' | highlightSearch: value()\n \"\n ></p>\n @let city = fuelStopStore?.address?.city ?? \"\";\n @let state = fuelStopStore?.address?.stateShortName ?? \"\";\n @let zip = fuelStopStore?.address?.zipCode ?? \"\";\n <p\n class=\"fuel-stop-transaction-store-address\"\n [innerHTML]=\"\n city + (state || zip ? ', ' : '') + state + ' ' + zip\n | highlightSearch: value()\n \"\n ></p>\n\n @if (fuelStopStore?.[\"favourite\"]) {\n <svg-icon\n name=\"cai-favorite\"\n class=\"favorite-icon\"\n ></svg-icon>\n }\n </button>\n }\n <!-- Infinite scroll trigger - emits event when item comes into view -->\n <div\n class=\"dropdown-infinite-scroll-item\"\n caiIntersectionObserver\n [threshold]=\"0.1\"\n (inView)=\"onDropdownScrolledToBottom(true)\"\n ></div>\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n }\n </div>\n } @else {\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n [class.focused]=\"\n groupedNavigationState?.groupIndex === groupIndex &&\n groupedNavigationState?.optionIndex === 0\n \"\n (pointerdown)=\"handleOption(franchiseOption, $event)\"\n >\n <p\n class=\"fuel-stop-transaction-nostore\"\n [innerHTML]=\"\n franchiseOption?.businessName || '' | highlightSearch: value()\n \"\n ></p>\n </button>\n }\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- #endregion -->\n\n<!-- #region Selected options -->\n\n<!-- selected dispatch -->\n<ng-template #selectedDispatchRef>\n @let dispatchOption = cast(selectedOption(), \"dispatch\");\n @if (dispatchOption && !inputRef.value && !isAdding()) {\n <div class=\"dropdown-selected\">\n <div class=\"dropdown-subitem truck-item\">\n <svg-icon\n class=\"truck-icon\"\n [name]=\"dispatchOption!.truck.truckType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p class=\"truck-number\">\n {{ dispatchOption!.truck.truckNumber }}\n </p>\n </div>\n <div class=\"dropdown-subitem trailer-item\">\n @if (dispatchOption!.trailer) {\n <svg-icon\n class=\"trailer-icon\"\n [name]=\"\n cast(\n selectedOption(),\n 'dispatch'\n )!.trailer?.trailerType?.logoName?.slice(0, -4)\n \"\n ></svg-icon>\n <p class=\"trailer-number\">\n {{ dispatchOption!.trailer?.trailerNumber }}\n </p>\n }\n </div>\n <div class=\"dropdown-subitem\">\n @if (dispatchOption!.coDriver) {\n <svg-icon class=\"dispatch-icon\" name=\"cai-people\"></svg-icon>\n <p class=\"driver-name\">\n {{\n dispatchOption!.driver.firstName +\n \" & \" +\n dispatchOption!.coDriver?.firstName\n }}\n </p>\n } @else {\n <cai-avatar\n [driver]=\"dispatchOption!.driver\"\n [size]=\"18\"\n [hover]=\"false\"\n ></cai-avatar>\n <p class=\"driver-name\">\n {{\n dispatchOption!.driver.firstName +\n \" \" +\n dispatchOption!.driver.lastName\n }}\n </p>\n }\n </div>\n <p class=\"selected-end-item\">\n {{ dispatchOption!.payType }}\n </p>\n </div>\n } @else {\n @if (!inputRef.value && this.config().dropdown == \"dispatch\") {\n <p class=\"dropdown-selected\">Unassigned</p>\n }\n }\n</ng-template>\n\n<!-- selected broker -->\n<ng-template #selectedBrokerRef>\n @let brokerOption = cast(selectedOption(), \"broker\");\n @if (brokerOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n @if ((brokerOption!.availableCredit || 0) < 0) {\n <svg-icon name=\"cai-status-warning-lite\" class=\"icon fraud\"></svg-icon>\n }\n <p class=\"dropdown-selected-content\">{{ brokerOption!.businessName }}</p>\n <div class=\"selected-end-item\">\n @if (!brokerOption!.creditLimit) {\n <p>Unlimited</p>\n } @else {\n <p>\n {{ brokerOption!.availableCredit || 0 | currency }}\n </p>\n <div\n class=\"progress-bar\"\n [style.--progress]=\"\n (\n brokerOption!\n | brokerProgress: brokerOption!.dnu || brokerOption!.ban\n ).activePercentageOfPaid + '%'\n \"\n [class]=\"\n (\n brokerOption!\n | brokerProgress: brokerOption!.dnu || brokerOption!.ban\n ).status\n \"\n ></div>\n }\n </div>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedContactRef>\n @let contactOption = cast(selectedOption(), \"contact\");\n @if (contactOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <p class=\"dropdown-selected-content\">{{ contactOption?.contactName }}</p>\n <div class=\"selected-end-item\">\n <p>{{ contactOption?.phone }}</p>\n </div>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedShipperRef>\n @let shipperOption = cast(selectedOption(), \"shipper\");\n @if (shipperOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <p class=\"dropdown-selected-content\">{{ shipperOption?.businessName }}</p>\n <div class=\"selected-end-item\">\n <p>{{ shipperOption?.address?.address }}</p>\n </div>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedOwnerRef>\n @let ownerOption = cast(selectedOption(), \"owner\");\n @if (ownerOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <p class=\"owner-ein\">{{ ownerOption?.ein }}</p>\n <p class=\"\">{{ ownerOption?.name }}</p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedFuelcardRef>\n @let fuelcardOption = cast(selectedOption(), \"fuelCard\");\n @if (fuelcardOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <p class=\"fuelcard-number\">\n {{ fuelcardOption?.number }}\n </p>\n <p class=\"fuelcard-brand\">\n {{ fuelcardOption?.brand }}\n </p>\n <p class=\"\">\n {{ fuelcardOption?.account }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedBankRef>\n @let bankOption = cast(selectedOption(), \"bank\");\n @if (bankOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n @if (bankOption?.logoName) {\n <svg-icon\n class=\"option-icon full-size\"\n [name]=\"bankOption?.logoName?.slice(0, -4) || ''\"\n ></svg-icon>\n } @else {\n <p class=\"dropdown-selected-content\">{{ bankOption?.name }}</p>\n }\n </div>\n }\n</ng-template>\n\n<ng-template #selectedProviderRef>\n @let providerOption = cast(selectedOption(), \"provider\");\n @if (providerOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <svg-icon\n class=\"option-icon full-size\"\n [name]=\"'cai-' + providerOption?.name?.toLowerCase()\"\n ></svg-icon>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedMakeRef>\n @let makeOption = cast(selectedOption(), \"make\");\n @if (makeOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n @if (makeOption?.logoName) {\n <svg-icon\n class=\"option-icon full-size\"\n [name]=\"makeOption?.logoName?.slice(0, -4) || ''\"\n ></svg-icon>\n } @else {\n <p class=\"dropdown-selected-content\">{{ makeOption?.name }}</p>\n }\n </div>\n }\n</ng-template>\n\n<ng-template #selectedStateRef>\n @let stateOption = cast(selectedOption(), \"state\");\n @if (stateOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <svg-icon\n class=\"option-icon\"\n [name]=\"\n 'cai-' +\n stateOption?.countryType?.name?.toLowerCase() +\n '-' +\n stateOption?.stateShortName?.toLowerCase()\n \"\n ></svg-icon>\n <p class=\"dropdown-selected-content\">\n {{ stateOption?.stateShortName }}\n {{ config().fullState ? \" (\" + stateOption?.stateName + \")\" : \"\" }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedDispatcherRef>\n @let dispatcherOption = cast(selectedOption(), \"dispatcher\");\n @if (dispatcherOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <cai-avatar\n [driver]=\"{\n id: dispatcherOption?.id || 0,\n firstName: (dispatcherOption?.fullName || ' ').split(' ')[0] || '',\n lastName: (dispatcherOption?.fullName || ' ').split(' ')[1] || '',\n avatarFile: dispatcherOption?.avatarFile,\n colorFlag: dispatcherOption?.colorFlag,\n }\"\n [rounded]=\"!config().squareAvatar\"\n ></cai-avatar>\n <p class=\"dropdown-selected-content\">{{ dispatcherOption?.fullName }}</p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedTruckRef>\n @let truckOption = cast(selectedOption(), \"truckOption\");\n @if (truckOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <svg-icon\n class=\"option-icon\"\n [name]=\"truckOption?.logoName?.slice(0, -4)\"\n ></svg-icon>\n <p class=\"dropdown-selected-content\">{{ truckOption?.name }}</p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedTrailerRef>\n @let trailerOption = cast(selectedOption(), \"trailerOption\");\n @if (trailerOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <svg-icon\n class=\"option-icon\"\n [name]=\"trailerOption?.logoName?.slice(0, -4)\"\n ></svg-icon>\n <p class=\"dropdown-selected-content\">{{ trailerOption?.name }}</p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedHazardousRef>\n @let hazardousOption = cast(selectedOption(), \"hazardous\");\n @if (hazardousOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <svg-icon\n class=\"hazard-icon\"\n [name]=\"hazardousOption?.logoName?.slice(0, -4)\"\n ></svg-icon>\n <p class=\"dropdown-selected-content dropdown-selected-hazardous\">\n {{ hazardousOption?.description }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedPmRef>\n @let pmOption = cast(selectedOption(), \"pmOption\");\n @if (pmOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <svg-icon\n class=\"option-icon\"\n [name]=\"pmOption?.title | remapPmIcons\"\n ></svg-icon>\n <p class=\"dropdown-selected-content\">\n {{ pmOption?.title }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedColorRef>\n @let colorOption = cast(selectedOption(), \"colorOption\");\n @if (colorOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <svg-icon\n class=\"option-icon cai-color\"\n [name]=\"'cai-color'\"\n [style.--color]=\"colorOption?.code\"\n [style.--hover-color]=\"colorOption?.hoverCode\"\n ></svg-icon>\n <p class=\"dropdown-selected-content\">\n {{ colorOption?.name }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedTollRef>\n @let tollOption = cast(selectedOption(), \"tollTransponderOption\");\n @if (tollOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <p class=\"dropdown-selected-content\">\n {{ tollOption?.name }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedSplitDriverRef>\n @let splitDriverOption = cast(selectedOption(), \"splitDriver\");\n @if (splitDriverOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <div class=\"dropdown-selected-content\">\n <div class=\"dropdown-subitem\">\n <cai-avatar [driver]=\"splitDriverOption\" [size]=\"18\"></cai-avatar>\n <p class=\"driver-name\">\n {{ splitDriverOption.firstName + \" \" + splitDriverOption.lastName }}\n </p>\n </div>\n </div>\n\n <p class=\"selected-end-item\">\n {{ splitDriverOption.payTypeValue }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedSplitTruckRef>\n @let splitTruckOption = cast(selectedOption(), \"splitTruck\");\n @if (splitTruckOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <div class=\"dropdown-selected-content\">\n <div class=\"dropdown-subitem trailer-item\">\n <svg-icon\n class=\"trailer-icon\"\n [name]=\"splitTruckOption!.truckType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p class=\"trailer-number\">\n {{ splitTruckOption!.truckNumber }}\n </p>\n </div>\n </div>\n <p class=\"selected-end-item\">\n @if (\n splitTruckOption!.location?.city &&\n splitTruckOption!.location?.stateShortName\n ) {\n {{ splitTruckOption!.location?.city }},\n {{ splitTruckOption!.location?.stateShortName }}\n }\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedSplitTrailerRef>\n @let splitTrailerOption = cast(selectedOption(), \"splitTrailer\");\n @if (splitTrailerOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <div class=\"dropdown-selected-content\">\n <div class=\"dropdown-subitem truck-item\">\n <svg-icon\n class=\"truck-icon\"\n [name]=\"splitTrailerOption!.trailerType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p class=\"truck-number\">\n {{ splitTrailerOption!.trailerNumber }}\n </p>\n </div>\n </div>\n <p class=\"selected-end-item\">\n @if (\n splitTrailerOption!.location?.city &&\n splitTrailerOption!.location?.stateShortName\n ) {\n {{ splitTrailerOption!.location?.city }},\n {{ splitTrailerOption!.location?.stateShortName }}\n }\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #passwordTooltip>\n {{ visible() ? \"Hide\" : \"Show\" }}\n</ng-template>\n\n<ng-template #errorTooltip>\n @if (\n (config().errorBehavior === \"floating\" ||\n (config().errorBehavior === \"static\" && hasText()) ||\n config().inTable) &&\n invalid &&\n !dropdown.isOpen()\n ) {\n {{ (ngControl?.errors | errorMessage: config().customErrors)[0] }}\n }\n</ng-template>\n\n<!-- #endregion -->\n","// src/app/bytes-to-human-readable.pipe.ts\n\nimport { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'bytesToHumanReadable',\n})\nexport class BytesToHumanReadablePipe implements PipeTransform {\n transform(bytes: number | null | undefined, precision: number = 2): string {\n if (bytes === null || bytes === undefined || isNaN(bytes)) {\n return '';\n }\n\n if (bytes === 0) {\n return '0 Bytes';\n }\n\n const units = ['Bytes', 'KB', 'MB', 'GB', 'TB'];\n const i = Math.floor(Math.log(bytes) / Math.log(1024));\n\n const unitIndex = Math.min(i, units.length - 1);\n\n const value = bytes / Math.pow(1024, unitIndex);\n\n const formattedValue = parseFloat(value.toFixed(precision));\n\n return `${formattedValue} ${units[unitIndex]}`;\n }\n}","export class ButtonActionsConfig {\n static actions = [\n {\n key: 'label',\n icon: 'cai-label',\n label: 'Tag',\n tooltipClass: 'tooltip tooltip-m-b-2',\n onClick: null,\n isPopover: true,\n },\n {\n key: 'share',\n icon: 'cai-share',\n label: 'Share',\n tooltipClass: 'tooltip tooltip-m-b-2',\n },\n {\n key: 'download',\n icon: 'cai-download',\n label: 'Download',\n tooltipClass: 'tooltip tooltip-m-b-2',\n },\n {\n key: 'delete',\n icon: 'cai-delete',\n label: 'Delete',\n tooltipClass: 'tooltip tooltip-bg-red-500 tooltip-m-b-2',\n },\n ];\n}\n","import {\n Component,\n EventEmitter,\n Input,\n input,\n OnChanges,\n OnInit,\n Output,\n output,\n signal,\n SimpleChanges,\n} from '@angular/core';\n\n//Components\nimport { SvgIconComponent } from 'angular-svg-icon';\nimport { InputComponent } from '../input/input.component';\n\n//Models\nimport { AppFile } from '../drop-zone/models';\nimport { DocumentTag } from './interfaces';\n\n//Pipes\nimport { BytesToHumanReadablePipe } from '../../pipes/bytes-to-human-readable.pipe';\nimport { HighlightSearchPipe } from '../input/pipes/highlight-search.pipe';\n\n//Bootstrap\nimport { NgbPopoverModule, NgbTooltipModule } from '@ng-bootstrap/ng-bootstrap';\n\n//Modules\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\n\n//Configs\nimport { ButtonActionsConfig } from './utils/config';\n\n/**\n * This component displays a preview of a document, including its name, size,\n * and provides actions to delete, download, and tag the document.\n */\n@Component({\n selector: 'cai-document-preview',\n imports: [\n //Components\n SvgIconComponent,\n InputComponent,\n\n //Forms\n ReactiveFormsModule,\n CommonModule,\n\n //Pipes\n BytesToHumanReadablePipe,\n HighlightSearchPipe,\n //Bootstrap\n NgbPopoverModule,\n NgbTooltipModule,\n ],\n templateUrl: './document-preview.component.html',\n styleUrl: './document-preview.component.scss',\n})\nexport class DocumentPreviewComponent implements OnChanges, OnInit {\n //inputs\n @Input() cdlDetailsMode: boolean = false;\n @Input() multipleDetailsDocs: boolean = false;\n @Input() noTagOption: boolean = false;\n @Input() drawerMode: boolean = false;\n @Input() isCoverDetails: boolean = false;\n @Input() isNewTag: boolean = false;\n @Input() hasExpired: boolean = false;\n @Input() searchText: string | null = null;\n tags = input<DocumentTag[]>([]);\n\n //outputs\n @Output() onFileNameChange = new EventEmitter<{\n fileId?: number;\n newFileName: string;\n }>();\n @Output() onDocumentPreviewClick = new EventEmitter<{ fileId: number }>();\n\n //signals\n public showInput = signal<boolean>(false);\n public showDeleteModal = signal<boolean>(false);\n public isImageLandscape = signal<boolean | null>(null);\n\n public showTag: boolean = false;\n public selectedTag: DocumentTag | null = null;\n\n public inputFormControl = new FormControl();\n\n //Configs\n public buttonActionsConfig = ButtonActionsConfig;\n\n constructor() {}\n\n ngOnInit(): void {\n this.initTag();\n }\n\n ngOnChanges(changes: SimpleChanges): void {}\n\n onButtonActionsClick(key: string) {\n switch (key) {\n case 'delete':\n this.handleDelete();\n break;\n case 'download':\n this.handleDownload();\n break;\n case 'share':\n this.handleShare();\n break;\n }\n }\n\n get tagLabel(): string {\n if (this.isNewTag && this.viewMode() === 'large') {\n return 'New';\n }\n if (this.selectedTag?.tagName) {\n return this.selectedTag.tagName;\n }\n if (this.file().categoryTag && !this.selectedTag) {\n return this.file().categoryTag!;\n }\n if (\n !this.selectedTag &&\n !this.file().categoryTag &&\n this.tags().length > 0\n ) {\n return 'No Tag';\n }\n\n return '';\n }\n\n showFileNameInput(event: Event) {\n event.stopPropagation();\n if (this.inputFormControl.dirty)\n this.inputFormControl.setValue(this.file().fileName);\n this.showInput.set(true);\n }\n\n hideFileNameInput() {\n setTimeout(() => {\n this.showInput.set(false);\n }, 100);\n }\n\n handleEdit(event: any) {\n this.hideFileNameInput();\n\n this.onFileNameChange.emit({\n fileId: this.file().fileId,\n newFileName: event,\n });\n }\n\n /**\n * The application file to be displayed in the preview. This is a required input.\n * @type {InputSignal<AppFile>}\n */\n file = input.required<AppFile>();\n /**\n * /**\n * The view mode in whic the file is displayed. This is a required input.\n * @type {InputSignal<string>}\n */\n viewMode = input.required<string>();\n /**\n * An output event that emits the file name when the delete action is triggered.\n * @type {OutputEmitterRef<string>}\n */\n onDelete = output<string>();\n\n /**\n * An output event that emits the file name when the download action is triggered.\n * @type {OutputEmitterRef<string>}\n */\n onDownload = output<string>();\n\n /**\n * Handles the delete action. Emits the `fileName` of the current `file` via the `onDelete` output.\n */\n handleDelete() {\n this.showDeleteModal.set(true);\n }\n\n /**\n * Cancels the delete operation and hides the confirmation modal.\n */\n cancelDelete() {\n this.showDeleteModal.set(false);\n }\n\n /**\n * Confirms the deletion and emits the `onDelete` event.\n */\n confirmDelete() {\n this.onDelete.emit(this.file().fileName);\n this.showDeleteModal.set(false);\n }\n\n /**\n * Handles the download action. Emits the `fileName` of the current `file` via the `onDownload` output.\n */\n handleDownload() {\n this.onDownload.emit(this.file().fileName);\n }\n\n /**\n * Callback triggered when the tag popover is shown. Used to update internal state.\n */\n onTagShown() {\n this.showTag = true;\n }\n\n /**\n * Callback triggered when the tag popover is hidden. Used to update internal state.\n */\n onTagHidden() {\n this.showTag = false;\n }\n\n /**\n * Emits when a tag is selected or removed for the file.\n * Contains the file name and the selected tag.\n * @type {OutputEmitterRef<{ fileName: string; tag: DocumentTag }>}\n */\n onTagChange = output<{ fileName: string; tag: DocumentTag | null }>();\n\n /**\n * Selects a tag and emits the `onTagChange` output.\n * @param newTag The newly selected tag string.\n */\n getTag(newTag: DocumentTag) {\n this.selectedTag = newTag;\n this.onTagChange.emit({\n fileName: this.file().fileName,\n tag: newTag,\n });\n }\n\n initTag() {\n this.selectedTag =\n this.tags().find((tag) => tag.tagId === this.file().tags?.[0]) || null;\n }\n\n /**\n * Removes the currently selected tag. Does not emit an event — must be called manually.\n */\n removeTag() {\n this.selectedTag = null;\n this.onTagChange.emit({\n fileName: this.file().fileName,\n tag: null,\n });\n }\n\n /**\n * Placeholder for handling document sharing. Currently logs the file name to the console.\n */\n handleShare() {\n //TODO\n }\n\n handleClickOnDocumentPreview(event: Event) {\n const target = event.target;\n if (!(target instanceof Element)) return;\n\n if (\n target.closest('.document-actions, .delete-modal, .document-name, button')\n )\n return;\n\n this.onDocumentPreviewClick.emit({ fileId: this.file().fileId! });\n }\n}\n","@let fileType = file().type; @let fileSize = file().size;\n@let pdf = fileType === \"pdf\";\n@let video = [\"avi\", \"mp4\", \"mov\"].includes(fileType);\n@let image = [\"jpg\", \"png\", \"jpeg\", \"gif\"].includes(fileType);\n@let pageCount = file().pageCount;\n@let imagePreviewUrl = file().imagePreviewUrl;\n@let showTagModal = showTag === true; @let selected = !!this.selectedTag;\n@let largeView = viewMode() === \"large\";\n@let categoryTag = file().categoryTag;\n\n<div\n #document\n class=\"document\"\n [class.noTouch]=\"!largeView && showDeleteModal()\"\n [class.delete-modal-large]=\"largeView && showDeleteModal()\"\n [class.buttonsVisibility]=\"showTagModal\"\n [class.large-view]=\"largeView\"\n [class.cdl-details-mode]=\"cdlDetailsMode\"\n [class.multiple-details-docs]=\"cdlDetailsMode && multipleDetailsDocs\"\n [class.document-portrait]=\"cdlDetailsMode && !isImageLandscape()\"\n [class.document-landscape]=\"cdlDetailsMode && isImageLandscape()\"\n [class.drawerMode]=\"drawerMode\"\n [class.is-cover-details]=\"isCoverDetails\"\n [class.has-expired]=\"hasExpired && !isCoverDetails\"\n [class.has-expired-cover-details]=\"hasExpired && isCoverDetails\"\n (click)=\"handleClickOnDocumentPreview($event)\"\n>\n <div class=\"document-image-container\">\n <img [src]=\"imagePreviewUrl\" class=\"document-image\" draggable=\"false\" />\n <div class=\"badge-tag-container\">\n <div class=\"badges\">\n <span\n [ngClass]=\"{\n 'category-tag': categoryTag && !selected,\n tag: !selected && !categoryTag && !!tags().length && !largeView,\n 'user-tag': selected,\n 'new-tag': isNewTag && largeView,\n }\"\n >\n {{ tagLabel }}\n </span>\n </div>\n <div class=\"badges\" [class.bottomTags]=\"largeView\">\n <p\n class=\"badge file-type\"\n [class]=\"{\n pdf: pdf,\n video: video,\n image: image,\n }\"\n >\n {{ fileType }}\n </p>\n <p class=\"badge page-count\">\n @if (pdf && pageCount) {\n <span>{{ pageCount }} p.</span>\n }\n <span class=\"file-size\"> {{ fileSize | bytesToHumanReadable }}</span>\n </p>\n </div>\n </div>\n @if (showDeleteModal()) {\n <ng-container *ngTemplateOutlet=\"deleteModal\"></ng-container>\n }\n </div>\n <div class=\"document-name\" (click)=\"showFileNameInput($event)\">\n @if (!showInput()) {\n <p\n class=\"file-name\"\n [innerHTML]=\"file().fileName | highlightSearch: searchText : true\"\n ></p>\n }\n @if (showInput()) {\n <div class=\"input\" (click)=\"$event.stopPropagation()\">\n <cai-input\n [formControl]=\"inputFormControl\"\n [config]=\"{\n type: 'text',\n name: file().fileName,\n isEdit: true,\n autofocus: true,\n placeholderBehavior: 'hidden',\n }\"\n (onBlur)=\"hideFileNameInput()\"\n (onClear)=\"hideFileNameInput()\"\n (onOptionAdded)=\"handleEdit($event)\"\n ></cai-input>\n </div>\n }\n </div>\n <div class=\"document-actions\" [class.noTagOption]=\"noTagOption\">\n @if (!largeView) {\n @if (!!tags().length) {\n <div class=\"document-actions-container label\">\n <button\n class=\"document-actions-button\"\n [class.tagIcon]=\"showTagModal\"\n [ngbPopover]=\"tagPopover\"\n popoverClass=\"tagPopover\"\n positionTarget=\"document\"\n autoClose=\"outside inside\"\n container=\"body\"\n [openDelay]=\"20\"\n (shown)=\"onTagShown()\"\n (hidden)=\"onTagHidden()\"\n placement=\"right-top left-top\"\n >\n <svg-icon\n name=\"cai-label\"\n ngbTooltip=\"Tag\"\n [placement]=\"drawerMode ? 'bottom' : 'top'\"\n container=\"body\"\n triggers=\"mouseenter:mouseleave\"\n tooltipClass=\"tooltip tooltip-m-b-2\"\n class=\"icon\"\n ></svg-icon>\n </button>\n </div>\n }\n <div class=\"document-actions-container\">\n <button\n class=\"document-actions-button download\"\n (click)=\"handleDownload()\"\n >\n <svg-icon\n name=\"cai-download\"\n ngbTooltip=\"Download\"\n [placement]=\"drawerMode ? 'bottom' : 'top'\"\n container=\"body\"\n triggers=\"mouseenter:mouseleave\"\n tooltipClass=\"tooltip tooltip-m-b-2\"\n class=\"icon\"\n ></svg-icon>\n </button>\n <button class=\"document-actions-button delete\" (click)=\"handleDelete()\">\n <svg-icon\n name=\"cai-delete\"\n ngbTooltip=\"Delete\"\n [placement]=\"drawerMode ? 'bottom' : 'top'\"\n container=\"body\"\n triggers=\"mouseenter:mouseleave\"\n tooltipClass=\"tooltip tooltip-bg-red-500 tooltip-m-b-2\"\n class=\"icon\"\n ></svg-icon>\n </button>\n </div>\n }\n @if (largeView) {\n <ng-container *ngTemplateOutlet=\"buttonsTemplate\"></ng-container>\n }\n </div>\n</div>\n\n<!-- Tag Popover -->\n<ng-template #tagPopover>\n <div class=\"tag-popover\">\n <div class=\"dropdown-list\">\n @if (selectedTag?.tagId) {\n <div class=\"tag-header\" (click)=\"removeTag()\">\n <div class=\"header\">\n <span class=\"tag-header-text\">REMOVE TAG</span>\n <svg-icon name=\"cai-minus\" class=\"minus-icon\"></svg-icon>\n </div>\n <div class=\"divider\"></div>\n </div>\n }\n <div class=\"tag-list\">\n @for (tag of tags(); track $index) {\n <div\n class=\"tag-item\"\n (click)=\"getTag(tag)\"\n [class.selectedDesign]=\"selectedTag?.tagId === tag.tagId\"\n >\n <span class=\"tag-text\">{{ tag.tagName }}</span>\n <svg-icon name=\"cai-checkmark\" class=\"checkmark-icon\"></svg-icon>\n </div>\n }\n </div>\n </div>\n </div>\n</ng-template>\n\n<!-- Delete Modal -->\n<ng-template #deleteModal>\n <div class=\"delete-modal\">\n <div class=\"delete-header\">\n <span class=\"delete-header-text\"\n >Are you sure you want to delete this file?</span\n >\n </div>\n <div class=\"modal-buttons\">\n <button class=\"delete-button\" (click)=\"confirmDelete()\">Delete</button>\n <button class=\"cancel-button\" (click)=\"cancelDelete()\">Cancel</button>\n </div>\n </div>\n</ng-template>\n\n<!-- Buttons Template -->\n<ng-template #buttonsTemplate>\n <div #buttonsContainer class=\"document-actions-container\">\n @for (action of buttonActionsConfig.actions; track action.key) {\n @let labelKey = action.key === \"label\";\n <button\n class=\"document-actions-button {{ action.key }}\"\n [class.tagIcon]=\"labelKey && showTagModal\"\n [ngbPopover]=\"labelKey ? tagPopover : null\"\n popoverClass=\"labelKey && tagPopover\"\n autoClose=\"outside inside\"\n container=\"body\"\n [positionTarget]=\"labelKey ? buttonsContainer : undefined\"\n [openDelay]=\"20\"\n (shown)=\"onTagShown()\"\n (hidden)=\"onTagHidden()\"\n placement=\"right-top left-top\"\n (click)=\"onButtonActionsClick(action.key)\"\n >\n <svg-icon\n [name]=\"action.icon\"\n [ngbTooltip]=\"action.label\"\n placement=\"left\"\n container=\"body\"\n triggers=\"mouseenter:mouseleave\"\n [tooltipClass]=\"action.tooltipClass\"\n class=\"icon\"\n ></svg-icon>\n </button>\n }\n </div>\n</ng-template>\n","import { Injectable } from '@angular/core';\nimport * as pdfjsLib from 'pdfjs-dist';\nimport { FileExtension } from '../components/drop-zone/models';\n\n// Use unpkg CDN since cdnjs doesn't have PDF.js v5.4.394\npdfjsLib.GlobalWorkerOptions.workerSrc = `https://unpkg.com/pdfjs-dist@${pdfjsLib.version}/build/pdf.worker.min.mjs`;\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DocumentService {\n /**\n * Generates a data URL thumbnail for a given file.\n * Handles PDFs, videos, and images.\n * @param file The file to generate a thumbnail for.\n * @returns A promise that resolves to a data URL string for the thumbnail.\n */\n async generateThumbnail(file: File): Promise<string> {\n const extension: FileExtension = file.name\n .split('.')\n .pop()\n ?.toLowerCase() as FileExtension;\n\n switch (extension) {\n case 'pdf':\n try {\n const thumbnailBlob = await this.generatePdfThumbnail(file);\n return URL.createObjectURL(thumbnailBlob);\n } catch (error) {\n console.error('Error generating PDF thumbnail:', error);\n return '/assets/exampledoc.png';\n }\n case 'mp4':\n case 'mov':\n case 'avi':\n try {\n return await this.generateVideoThumbnail(file);\n } catch (error) {\n console.error('Error generating video thumbnail:', error);\n return '/assets/truck.png';\n }\n case 'jpg':\n case 'jpeg':\n case 'png':\n case 'gif':\n return URL.createObjectURL(file);\n default:\n return '/assets/exampledoc.png';\n }\n }\n\n private generatePdfThumbnail(file: Blob): Promise<Blob> {\n const fileReader = new FileReader();\n return new Promise<Blob>((resolve, reject) => {\n fileReader.onload = async () => {\n const typedArray = new Uint8Array(fileReader.result as ArrayBuffer);\n try {\n const pdf = await pdfjsLib.getDocument(typedArray).promise;\n const page = await pdf.getPage(1);\n const viewport = page.getViewport({ scale: 1 });\n const canvas = document.createElement('canvas');\n const context = canvas.getContext('2d');\n const desiredWidth = 280;\n const scale = desiredWidth / viewport.width;\n const scaledViewport = page.getViewport({ scale });\n canvas.height = scaledViewport.height;\n canvas.width = scaledViewport.width;\n\n if (!context) {\n return reject('Could not get canvas context');\n }\n\n await page.render({\n canvas,\n canvasContext: context,\n viewport: scaledViewport,\n }).promise;\n canvas.toBlob((blob) => {\n if (blob) {\n resolve(blob);\n } else {\n reject('Failed to convert canvas to blob');\n }\n }, 'image/png');\n } catch (error) {\n console.error('Error generating PDF thumbnail:', error);\n reject(error);\n }\n };\n fileReader.onerror = () => {\n console.error('Error reading PDF file:', fileReader.error);\n reject(fileReader.error);\n };\n fileReader.readAsArrayBuffer(file);\n });\n }\n\n private generateVideoThumbnail(file: Blob): Promise<string> {\n return new Promise((resolve, reject) => {\n const video = document.createElement('video');\n const canvas = document.createElement('canvas');\n const context = canvas.getContext('2d');\n\n video.autoplay = true;\n video.muted = true;\n video.src = URL.createObjectURL(file);\n\n video.onloadeddata = () => {\n video.currentTime = Math.min(0.1, video.duration / 2);\n };\n\n video.onseeked = () => {\n const desiredWidth = 280;\n const scale = desiredWidth / video.videoWidth;\n canvas.width = desiredWidth;\n canvas.height = video.videoHeight * scale;\n\n if (context) {\n context.drawImage(video, 0, 0, canvas.width, canvas.height);\n video.pause();\n URL.revokeObjectURL(video.src);\n canvas.toBlob((blob) => {\n if (blob) {\n resolve(URL.createObjectURL(blob));\n } else {\n reject('Failed to convert video thumbnail canvas to blob');\n }\n }, 'image/png');\n } else {\n reject('Could not get canvas context for video thumbnail');\n }\n };\n\n video.onerror = (e) => {\n URL.revokeObjectURL(video.src);\n reject('Error loading video for thumbnail: ' + e);\n };\n });\n }\n\n /**\n * Reads a PDF file and returns the total number of pages.\n *\n * @param file The PDF Blob or File.\n * @returns A promise that resolves to the page count (number).\n * @throws If the file is not a valid PDF or an error occurs during processing.\n */\n async getPdfPageCount(file: Blob): Promise<number> {\n const fileReader = new FileReader();\n\n return new Promise<number>((resolve, reject) => {\n fileReader.onload = async () => {\n const typedArray = new Uint8Array(fileReader.result as ArrayBuffer);\n try {\n const pdf = await pdfjsLib.getDocument(typedArray).promise;\n resolve(pdf.numPages);\n } catch (error) {\n console.error('Error getting PDF page count:', error);\n reject(new Error('Failed to load PDF or get page count.'));\n }\n };\n fileReader.onerror = () => {\n reject(new Error('FileReader error during PDF page count operation.'));\n };\n fileReader.readAsArrayBuffer(file);\n });\n }\n}\n","export enum DropZoneVariant {\n DOCUMENT = 'document',\n VIDEO = 'video',\n PROFILE = 'profile',\n COVER = 'cover',\n LOGO = 'logo',\n}","import { Pipe, PipeTransform } from '@angular/core';\nimport { DropZoneVariant } from '../enums';\n\n@Pipe({\n name: 'dropZoneAnimation',\n})\nexport class DragModeAnimationPipe implements PipeTransform {\n private readonly animationPaths: Record<DropZoneVariant, string> = {\n [DropZoneVariant.DOCUMENT]:\n '/assets/carriera-intern/animations/animation-document-update.json',\n [DropZoneVariant.VIDEO]:\n '/assets/carriera-intern/animations/animation-media.json',\n [DropZoneVariant.PROFILE]:\n '/assets/carriera-intern/animations/animation-image.json',\n [DropZoneVariant.COVER]:\n '/assets/carriera-intern/animations/animation-image.json',\n [DropZoneVariant.LOGO]:\n '/assets/carriera-intern/animations/animation-logo.json',\n };\n\n private readonly svgIconPaths: Record<DropZoneVariant, string> = {\n [DropZoneVariant.LOGO]: 'cai-illustration-drop-zone-cover',\n [DropZoneVariant.COVER]: 'cai-illustration-drop-zone-cover',\n [DropZoneVariant.VIDEO]: 'cai-illustration-drop-zone-video',\n [DropZoneVariant.PROFILE]: 'cai-illustration-drop-zone-profile',\n [DropZoneVariant.DOCUMENT]: 'cai-illustration-drop-zone',\n };\n\n transform(variant?: string, svgIcon: boolean = false): string {\n if (!variant) {\n return '';\n }\n\n if (svgIcon) {\n return this.svgIconPaths[variant as DropZoneVariant] ?? '';\n }\n\n return this.animationPaths[variant as DropZoneVariant] ?? '';\n }\n}\n","import type { AppFile, FileResponse } from '../../models';\n\nexport class DropZoneDocumentsHelper {\n static fileToBase64(file: File | null): Promise<string | null> {\n if (!file) return Promise.resolve(null);\n\n return new Promise<string | null>((resolve, reject) => {\n const reader = new FileReader();\n\n reader.onload = () => {\n const result = reader.result as string | null;\n const base64 = result?.split(',')[1] ?? null;\n resolve(base64);\n };\n\n reader.onerror = () => {\n reject(reader.error ?? new Error('Failed to read file as base64.'));\n };\n\n reader.readAsDataURL(file);\n });\n }\n\n static splitExistingAndNewFiles(\n currentFiles: (FileResponse | AppFile)[],\n existingDocsSource: AppFile[],\n ): FileResponse[] {\n const existingFileIds = existingDocsSource\n .filter((doc) => doc.fileId != null)\n .map((doc) => doc.fileId);\n\n const newFiles = currentFiles.filter(\n (file) => !existingFileIds.includes((file as AppFile).fileId),\n ) as FileResponse[];\n\n return newFiles;\n }\n\n static async fetchFileAsFile(\n fileResponse: FileResponse,\n ): Promise<File | null> {\n if (!fileResponse.url || !fileResponse.fileName) return null;\n\n try {\n const response = await fetch(fileResponse.url);\n const blob = await response.blob();\n return new File([blob], fileResponse.fileName, {\n type: blob.type,\n });\n } catch (error) {\n return null;\n }\n }\n\n static onDownloadAllFiles(docs: AppFile[]): void {\n docs.map((doc) => {\n fetch(doc.imagePreviewUrl!).then((res) => {\n res.blob().then((b) => {\n const a = document.createElement('a');\n a.href = URL.createObjectURL(b);\n a.download = doc.fileName;\n a.click();\n });\n });\n });\n }\n}\n","import {\n Component,\n ElementRef,\n signal,\n ViewChild,\n inject,\n computed,\n input,\n Input,\n Output,\n EventEmitter,\n HostListener,\n OnDestroy,\n AfterViewChecked,\n} from '@angular/core';\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\n\n//components\nimport { SvgIconComponent } from 'angular-svg-icon';\nimport { ImageCropperComponent } from 'ngx-image-cropper';\nimport { DocumentPreviewComponent } from '../document-preview/document-preview.component';\nimport { AvatarComponent } from '../avatar/avatar.component';\nimport { LottieComponent } from 'ngx-lottie';\n\n//models\nimport { AppFile, FileExtension } from './models';\nimport { Driver } from '../avatar/models';\nimport { FileResponse } from './models/file.response';\n\n//modules\nimport { NgbTooltipModule } from '@ng-bootstrap/ng-bootstrap';\nimport { CommonModule } from '@angular/common';\n\n//cropper\nimport {\n ImageCroppedEvent,\n LoadedImage,\n ImageTransform,\n base64ToFile,\n} from 'ngx-image-cropper';\n\n//services\nimport { DocumentService } from '../../services/document.service';\n\n//forms\nimport { FormGroup } from '@angular/forms';\n\n//interfaces\nimport { DocumentTag } from '../document-preview/interfaces';\nimport { AnimationItem } from 'lottie-web';\n\n//enums\nimport { DropZoneVariant } from './enums';\n\n//pipes\nimport { DragModeAnimationPipe } from './pipes/drag-mode-animation.pipe';\n\n//helpers\nimport { DropZoneDocumentsHelper } from './utils/helpers';\n\n/**\n * A component that provides a user interface for file uploading via\n * drag-and-drop or a file input dialog. It displays previews of the\n * selected files in a carousel.\n */\n@Component({\n selector: 'cai-drop-zone',\n imports: [\n // modules\n CommonModule,\n NgbTooltipModule,\n\n // components\n SvgIconComponent,\n DocumentPreviewComponent,\n ImageCropperComponent,\n AvatarComponent,\n LottieComponent,\n\n //pipes\n DragModeAnimationPipe,\n ],\n templateUrl: './drop-zone.component.html',\n styleUrl: './drop-zone.component.scss',\n providers: [],\n})\nexport class DropZoneComponent implements OnDestroy, AfterViewChecked {\n // Signals\n public zoomValue = signal<number>(5.8);\n public smallView = signal<boolean>(false);\n public cropHeight = signal<number>(0);\n public cropWidth = signal<number>(0);\n public showCropper = signal<boolean>(false);\n public isCropperReady = signal<boolean>(false);\n public deletedDocs = signal<number[]>([]);\n public dragMode = signal<boolean>(false);\n public onDragover = signal<boolean>(false);\n public invalidFileSize = signal<boolean>(false);\n public isLoadingSkeleton = signal<boolean>(true);\n public skeletonCount = signal(0);\n public maxCountReached = signal<boolean>(false);\n public carouselIndex = signal(0);\n\n public driver = signal<Driver>({\n id: 0,\n firstName: '',\n lastName: '',\n avatarFile: null,\n avatarColor: 'Blue',\n });\n\n public transform: ImageTransform = {\n scale: this.zoomValue(),\n };\n\n public imageChangedEvent: Event | null = null;\n public croppedImage: SafeUrl | null = '';\n public originalImageWidth: number = 0;\n public originalImageHeight: number = 0;\n private cropperResultFile: File | null = null;\n private cropperPreviewUrl: string | null = null;\n\n private lottieAnimation: AnimationItem | null = null;\n public temporaryImageFile: AppFile | null = null;\n\n public drawerViewportWidth = signal(0);\n private drawerRo: ResizeObserver | null = null;\n private drawerEl: HTMLElement | null = null;\n\n // Inputs\n public crop = input<boolean>(false);\n public size = input<string>();\n public rounded = input<boolean>(false);\n public deletedFileIds = input<number[]>([]);\n public maxCountFiles = input<number>(1);\n public isDetailsSlider = input<boolean>(false);\n public isDrawerMode = input<boolean>(false);\n public isCoverDetails = input<boolean>(false);\n public maxFileSize = input<number>(100); //MB\n public isDocumentsMode = input<boolean>(false);\n public documentsDropZoneOpen = input<boolean>(false);\n public searchText = input<string | null>(null);\n\n @Input()\n set files(value: FileResponse[] | null) {\n this._files = value ?? [];\n\n if (!this._files.length) {\n this.docs.set([]);\n this.isLoadingSkeleton.set(false);\n return;\n }\n\n this.populateDocs(this._files);\n }\n\n get files(): FileResponse[] {\n return this._files;\n }\n\n //enums\n public dropZoneVariant = DropZoneVariant;\n\n //outputs\n @Output() onDeletedFileIds = new EventEmitter<number[]>();\n @Output() onDocsChange = new EventEmitter<AppFile[]>();\n @Output() onDocumentPreviewClick = new EventEmitter<{ fileId: number }>();\n @Output() onDocumentFileNameChange = new EventEmitter<{\n fileId?: number;\n newFileName: string;\n }>();\n @Output() onCropPendingChange = new EventEmitter<boolean>();\n @Output() onDocumentDropZoneOpenChange = new EventEmitter<boolean>();\n\n //views\n @ViewChild('inputRange') inputRange!: ElementRef<HTMLInputElement>;\n @ViewChild('dropZoneContainer') dropZoneContainer!: ElementRef<HTMLElement>;\n @ViewChild('docsViewport') docsViewport?: ElementRef<HTMLElement>;\n\n //variables\n public coverUrl: string = '';\n public profileUrl: string = '';\n public logoUrl: string = '';\n public categoryTag: string | null = null;\n private _files: FileResponse[] = [];\n\n // helpers\n private DropZoneDocumentsHelper = DropZoneDocumentsHelper;\n\n /**\n * A input that holds an FormGroup object that is used to update the form validity when the crop mode is closed.\n */\n\n public parentForm = input<FormGroup | null>(null);\n\n /**\n * A signal that holds an array of `AppFile` objects representing the files\n * that have been selected or dropped by the user.\n \n */\n public variant = input<string>(this.dropZoneVariant.DOCUMENT);\n\n /**\n * Input that holds an array of `DocumentTag` objects representing the tags for the documents.\n */\n public documentTags = input<DocumentTag[]>([]);\n\n /**\n * Injects the DocumentService for file processing tasks like\n * thumbnail generation and PDF page counting.\n * @private\n */\n private documentService = inject(DocumentService);\n\n /**\n * An array of file extensions that should be excluded from the supported list.\n * @defaultValue `[]` (an empty array)\n * @type {FileExtension[]}\n */\n excludedFileTypes = input<FileExtension[]>([]);\n\n /**\n * The base array of all file extensions that are generally allowed.\n * Supported file types will be derived from this list, after excluding\n * any types specified in `excludedFileTypes`.\n *\n * @defaultValue `['avi', 'mov', 'mp4', 'pdf', 'gif', 'png', 'jpg', 'jpeg']`\n * @type {FileExtension[]}\n */\n fileTypes = input<FileExtension[]>([\n 'pdf',\n 'png',\n 'jpg',\n 'jpeg',\n 'gif',\n 'avi',\n 'mov',\n 'mp4',\n ]);\n\n constructor(private sanitizer: DomSanitizer) {}\n\n ngOnInit() {\n this.cropDimensions();\n }\n\n ngOnDestroy() {\n this.clearCropperPreviewUrl();\n this.clearDrawerRo();\n }\n\n ngAfterViewChecked() {\n this.setDrawerRo();\n }\n\n private clampDrawerIndex(): void {\n const maxStart = Math.max(\n 0,\n this.docs().length - this.carouselVisibleCount(),\n );\n if (this.carouselIndex() > maxStart) this.carouselIndex.set(maxStart);\n }\n\n private setDrawerRo(): void {\n if (!this.isDrawerMode()) {\n this.clearDrawerRo();\n this.drawerEl = null;\n return;\n }\n const el = this.docsViewport?.nativeElement;\n if (!el) {\n this.drawerEl = null;\n return;\n }\n if (el !== this.drawerEl) {\n this.drawerEl = el;\n this.drawerViewportWidth.set(el.getBoundingClientRect().width);\n this.clampDrawerIndex();\n this.drawerRo = new ResizeObserver(() => {\n this.drawerViewportWidth.set(\n this.docsViewport!.nativeElement.getBoundingClientRect().width,\n );\n this.clampDrawerIndex();\n });\n this.drawerRo.observe(el);\n }\n }\n\n private clearDrawerRo(): void {\n if (this.drawerRo && this.drawerEl) {\n this.drawerRo.unobserve(this.drawerEl);\n this.drawerRo.disconnect();\n this.drawerRo = null;\n }\n }\n\n emitDocs() {\n this.onDocsChange.emit(this.docs());\n }\n\n animationCreated(animation: AnimationItem) {\n this.lottieAnimation = animation;\n this.lottieAnimation.goToAndStop(0, true);\n }\n\n private playDropAnimation(forward: boolean = true) {\n if (!this.lottieAnimation) {\n return;\n }\n\n const speed = forward ? 1 : 4;\n const endFrame = Math.max(0, this.lottieAnimation.totalFrames ?? 0);\n const currentFrame = Math.round(\n Math.min(Math.max(this.lottieAnimation.currentFrame ?? 0, 0), endFrame),\n );\n\n this.lottieAnimation.setDirection(forward ? 1 : -1);\n this.lottieAnimation.setSpeed(speed);\n this.lottieAnimation.goToAndPlay(\n forward ? 0 : currentFrame || endFrame,\n true,\n );\n }\n\n private stopDropAnimation() {\n if (!this.lottieAnimation) {\n return;\n }\n\n this.lottieAnimation.goToAndStop(0, true);\n }\n\n getTagIds(tags: string[] | null | undefined, generatedByUser: boolean) {\n if (!generatedByUser) {\n this.categoryTag = tags?.[0] ?? null;\n return null;\n }\n\n const tag = this.documentTags().find((tag) => tags?.includes(tag.tagName));\n if (!tag) {\n this.categoryTag = tags?.[0] ?? null;\n return null;\n } else {\n return this.documentTags()\n .filter((tag) => tags?.includes(tag.tagName))\n .map((tag) => tag.tagId);\n }\n }\n\n async populateDocs(currentFiles: FileResponse[] | AppFile[]) {\n if (!currentFiles?.length) {\n this.docs.set([]);\n this.isLoadingSkeleton.set(false);\n return;\n }\n\n this.skeletonCount.set(currentFiles.length);\n\n const filesToProcess =\n this.DropZoneDocumentsHelper.splitExistingAndNewFiles(\n currentFiles,\n this.docs(),\n );\n\n const newlyProcessed = await Promise.all(\n filesToProcess.map(async (fileResp) => {\n if ((fileResp as AppFile).imagePreviewUrl) return fileResp as AppFile;\n\n const fileExtension =\n fileResp.fileName?.split('.').pop()?.toLowerCase() || 'pdf';\n\n let previewUrl = (fileResp as FileResponse)?.url || '';\n let pageCount: number | undefined;\n\n const file = await this.DropZoneDocumentsHelper.fetchFileAsFile(\n fileResp as FileResponse,\n );\n\n const supportedBase64 = ['profile', 'cover', 'logo'].includes(\n this.variant(),\n );\n\n const base64Url =\n supportedBase64 && file\n ? await this.DropZoneDocumentsHelper.fileToBase64(file)\n : null;\n\n if (fileExtension === 'pdf' && file) {\n try {\n const [thumb, pages] = await Promise.all([\n this.documentService.generateThumbnail(file),\n this.documentService.getPdfPageCount(file),\n ]);\n previewUrl = thumb;\n pageCount = pages;\n } catch (error) {\n console.error(`Failed ${fileResp.fileName}:`, error);\n }\n }\n\n return {\n fileName: fileResp.fileName || '',\n baseName: fileResp.fileName?.split('.').slice(0, -1).join('.') || '',\n fileId: fileResp.fileId || 0,\n type: fileExtension as FileExtension,\n size: (fileResp as FileResponse).fileSize || 0,\n imagePreviewUrl: previewUrl,\n file: file,\n pageCount: pageCount,\n tags: this.getTagIds(\n (fileResp as FileResponse).tags || [],\n (fileResp as FileResponse).tagGeneratedByUser ?? false,\n ),\n tagChanged: false,\n fileNameChanged: false,\n categoryTag: this.categoryTag,\n base64Url,\n };\n }),\n );\n\n const validNewFiles = (newlyProcessed.filter(Boolean) as AppFile[]) || [];\n\n if (validNewFiles.length > 0) {\n const updatedDocs = [...this.docs(), ...validNewFiles];\n this.docs.set(updatedDocs);\n this.setImagePreviewUrl(updatedDocs[0]?.imagePreviewUrl || '');\n }\n\n if (this.crop()) {\n this.submitCrop(true);\n }\n\n console.log('this.docs()', this.docs());\n this.isLoadingSkeleton.set(false);\n this.deletedDocs.set(this.deletedFileIds() ?? []);\n }\n\n updateRangeBackground(input: HTMLInputElement) {\n if (!input) return;\n const min = Number(input.min);\n const max = Number(input.max);\n var value;\n value = ((this.zoomValue() - min) / (max - min)) * 100;\n input.style.setProperty('--range-progress', `${value}%`);\n }\n\n cropDimensions() {\n const variant = this.variant();\n const rounded = this.rounded();\n let width = 0;\n let height = 0;\n switch (variant) {\n case 'profile':\n if (rounded) {\n width = 178;\n height = 178;\n } else {\n width = 160;\n height = 178;\n }\n break;\n case 'logo':\n width = 628;\n height = 214;\n break;\n case 'cover':\n width = 267;\n height = 178;\n break;\n }\n\n this.cropWidth.set(width);\n this.cropHeight.set(height);\n }\n\n private setImagePreviewUrl(previewUrl: string) {\n if (!previewUrl) return;\n\n switch (this.variant()) {\n case this.dropZoneVariant.PROFILE: {\n this.profileUrl = previewUrl;\n break;\n }\n case this.dropZoneVariant.COVER: {\n this.coverUrl = previewUrl;\n if (this.size() === '480px') {\n this.smallView.set(true);\n }\n break;\n }\n case this.dropZoneVariant.LOGO: {\n this.logoUrl = previewUrl;\n break;\n }\n default:\n break;\n }\n }\n\n ratioHelper(): number {\n const width = this.cropWidth();\n const height = this.cropHeight();\n\n return width && height ? width / height : 1;\n }\n\n onZoomChange(event: Event) {\n const input = event.target as HTMLInputElement;\n const zoom = Number(input.value);\n this.zoomValue.set(zoom);\n\n this.transform = {\n scale: zoom,\n };\n this.updateRangeBackground(event.target as HTMLInputElement);\n }\n\n fileChangeEvent(event: Event): void {\n this.imageChangedEvent = event;\n this.isCropperReady.set(false);\n const target = event.target as HTMLInputElement;\n const file = target.files?.[0];\n\n this.zoomValue.set(5.8);\n this.transform = { scale: this.zoomValue() };\n\n const fileExtension = file?.name.split('.').pop()?.toLowerCase();\n const isSupportedImage =\n file &&\n file.type.startsWith('image/') &&\n fileExtension &&\n this.supportedFileTypes().includes(fileExtension as FileExtension);\n if (isSupportedImage && this.crop()) {\n this.setInvalid();\n this.showCropper.set(true);\n } else {\n this.showCropper.set(false);\n }\n\n this.zoomValue.set(5.8);\n }\n\n imageCropped(event: ImageCroppedEvent) {\n if (event.base64) {\n const blob = base64ToFile(event.base64);\n this.setCropperFile(this.createFileFromBlob(blob));\n } else if (event.objectUrl) {\n this.setCropperFileFromObjectUrl(event.objectUrl);\n }\n }\n\n private setCropperFile(file: File) {\n this.cropperResultFile = file;\n this.updateCropperPreviewUrl(URL.createObjectURL(file));\n }\n\n private createFileFromBlob(blob: Blob): File {\n const name =\n this.temporaryImageFile?.fileName ??\n this.docs()[this.docs().length - 1]?.fileName ??\n 'cropped-image.png';\n return new File([blob], name, {\n type: blob.type,\n lastModified: Date.now(),\n });\n }\n\n private async setCropperFileFromObjectUrl(objectUrl: string) {\n try {\n const response = await fetch(objectUrl);\n const blob = await response.blob();\n this.setCropperFile(this.createFileFromBlob(blob));\n } catch (error) {\n console.error('Failed to convert objectUrl to File:', error);\n }\n }\n\n private updateCropperPreviewUrl(url: string) {\n if (this.cropperPreviewUrl) {\n URL.revokeObjectURL(this.cropperPreviewUrl);\n }\n this.cropperPreviewUrl = url;\n this.croppedImage = this.sanitizer.bypassSecurityTrustUrl(url);\n }\n\n private clearCropperPreviewUrl() {\n if (this.cropperPreviewUrl) {\n URL.revokeObjectURL(this.cropperPreviewUrl);\n this.cropperPreviewUrl = null;\n this.croppedImage = null;\n }\n }\n\n imageLoaded(image: LoadedImage) {}\n\n cropperReady() {\n this.isCropperReady.set(true);\n if (this.inputRange?.nativeElement) {\n this.updateRangeBackground(this.inputRange.nativeElement);\n }\n }\n\n loadImageFailed() {\n // show message\n }\n\n onTransformChange(event: ImageTransform) {\n const scale = event?.scale as number;\n this.zoomValue.set(scale);\n }\n\n cancelCrop() {\n this.clearInvalid();\n this.isCropperReady.set(false);\n this.showCropper.set(false);\n this.onCropPendingChange.emit(false);\n }\n\n async submitCrop(initial: boolean = false) {\n if (!this.cropperResultFile) {\n this.clearInvalid();\n this.showCropper.set(false);\n this.isCropperReady.set(false);\n return;\n }\n\n const previewUrl = URL.createObjectURL(this.cropperResultFile);\n\n if (this.temporaryImageFile) {\n this.temporaryImageFile.file = this.cropperResultFile;\n this.temporaryImageFile.imagePreviewUrl = previewUrl;\n\n if (['profile', 'cover', 'logo'].includes(this.variant())) {\n this.temporaryImageFile.base64Url =\n await this.DropZoneDocumentsHelper.fileToBase64(\n this.cropperResultFile,\n );\n }\n\n this.docs.set([this.temporaryImageFile]);\n this.setImagePreviewUrl(previewUrl);\n this.clearInvalid();\n this.showCropper.set(false);\n this.isCropperReady.set(false);\n\n if (!initial) this.emitDocs();\n if (previewUrl) {\n this.clearCropperPreviewUrl();\n }\n\n this.temporaryImageFile = null;\n this.cropperResultFile = null;\n this.onCropPendingChange.emit(false);\n\n return;\n }\n\n const lastIndex = this.docs().length - 1;\n\n if (lastIndex >= 0) {\n const updatedDocs = [...this.docs()];\n const lastDoc = { ...updatedDocs[lastIndex] };\n lastDoc.imagePreviewUrl = previewUrl;\n lastDoc.file = this.cropperResultFile;\n updatedDocs[lastIndex] = lastDoc;\n\n this.docs.set(updatedDocs);\n this.clearInvalid();\n\n this.showCropper.set(false);\n }\n\n this.setImagePreviewUrl(previewUrl);\n this.cropDimensions();\n if (!initial) this.emitDocs();\n this.isCropperReady.set(false);\n if (previewUrl) {\n this.clearCropperPreviewUrl();\n }\n this.cropperResultFile = null;\n }\n\n /**\n * A computed signal that derives the list of currently supported file extensions.\n * It filters the base `fileTypes` array, removing any extensions present\n * in the `excludedFileTypes` input.\n */\n supportedFileTypes = computed(() => {\n const excluded = this.excludedFileTypes();\n const types = this.fileTypes();\n\n if (!excluded || excluded.length === 0) {\n return types;\n }\n\n return types.filter((type) => !excluded.includes(type));\n });\n\n /**\n * A signal that holds an array of `AppFile` objects representing the files\n * that have been selected or dropped by the user.\n */\n docs = signal<AppFile[]>([]);\n\n /**\n * A signal that acts as a boolean flag. It is set to `true` when the user\n * attempts to upload a file with an unsupported extension.\n */\n unsupported = signal(false);\n\n /**\n * Handles the 'change' event from the hidden file input. It extracts the\n * selected files and passes them to the `processFiles` method.\n * @param event The `Event` object from the file input element.\n */\n onInput(event: Event) {\n const target = event.target as HTMLInputElement;\n const files = target.files as FileList;\n this.processFiles(files);\n }\n\n onDrop(event: DragEvent) {\n event.preventDefault();\n this.resetDragState();\n const dropZone = this.dropZoneContainer?.nativeElement;\n const isInDropArea =\n dropZone?.contains(event.target as Node) ||\n (this.dragMode() &&\n dropZone?.parentElement?.contains(event.target as Node));\n if (!isInDropArea || this.unsupported()) return;\n const files = event.dataTransfer?.files;\n if (files && files.length > 0) {\n this.processFiles(files);\n }\n }\n\n onDragOver(event: DragEvent) {\n event.preventDefault();\n if (this.unsupported()) return;\n const relatedTarget = event.target as HTMLElement;\n\n if (this.dropZoneContainer?.nativeElement?.contains(relatedTarget)) {\n this.onDragover.set(true);\n } else {\n this.onDragover.set(false);\n }\n }\n\n onDragLeave(event: DragEvent) {\n event.preventDefault();\n\n const relatedTarget = event.relatedTarget as HTMLElement;\n if (\n !relatedTarget ||\n !this.dropZoneContainer?.nativeElement?.contains(relatedTarget)\n ) {\n this.onDragover.set(false);\n this.lottieAnimation?.stop();\n this.playDropAnimation(false);\n } else {\n this.onDragover.set(true);\n }\n }\n\n onDragEnter(event: DragEvent) {\n const dropZone = this.dropZoneContainer?.nativeElement;\n const relatedTarget = event.relatedTarget as Node | null;\n\n if (\n !dropZone ||\n this.unsupported() ||\n (relatedTarget && dropZone.contains(relatedTarget))\n )\n return;\n\n event.preventDefault();\n this.dragMode.set(true);\n this.onDragover.set(false);\n this.playDropAnimation(true);\n }\n\n @HostListener('document:dragenter', ['$event'])\n onDocumentDragEnter(event: DragEvent) {\n if (\n (this.isDocumentsMode() && !this.documentsDropZoneOpen()) ||\n this.unsupported() ||\n (this.variant() === this.dropZoneVariant.LOGO && this.logoUrl) ||\n (this.docs().length === this.maxCountFiles() &&\n this.variant() === this.dropZoneVariant.DOCUMENT)\n )\n return;\n\n this.dragMode.set(true);\n this.onDragover.set(false);\n }\n\n @HostListener('document:dragover', ['$event'])\n onDocumentDragOver(event: DragEvent) {\n const dropZone = this.dropZoneContainer?.nativeElement;\n if (this.dragMode()) {\n event.preventDefault();\n return;\n }\n if (\n (this.isDocumentsMode() && !this.documentsDropZoneOpen()) ||\n dropZone?.contains(event.target as Node) ||\n dropZone?.parentElement?.contains(event.target as Node)\n )\n return;\n if (this.unsupported()) return;\n event.preventDefault();\n event.stopPropagation();\n if (event.dataTransfer) {\n event.dataTransfer.dropEffect = 'none';\n }\n }\n\n @HostListener('document:dragleave', ['$event'])\n onWindowDragLeave(event: DragEvent) {\n if (this.isDocumentsMode() && !this.documentsDropZoneOpen()) {\n return;\n }\n event.preventDefault();\n const relatedTarget = event.relatedTarget as HTMLElement;\n if (!relatedTarget) {\n this.resetDragState();\n }\n }\n\n @HostListener('document:drop', ['$event'])\n onDocumentDrop(event: DragEvent) {\n if (this.isDocumentsMode() && !this.documentsDropZoneOpen()) {\n return;\n }\n const dropZone = this.dropZoneContainer?.nativeElement;\n if (dropZone?.contains(event.target as Node)) {\n this.resetDragState();\n return;\n }\n\n if (\n this.dragMode() &&\n dropZone?.parentElement?.contains(event.target as Node)\n ) {\n this.resetDragState();\n return;\n }\n if (this.dragMode()) {\n event.preventDefault();\n this.resetDragState();\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n if (event.dataTransfer) {\n event.dataTransfer.dropEffect = 'none';\n event.dataTransfer.clearData();\n }\n this.resetDragState();\n }\n\n /**\n * Resets the drag state when drag operation ends.\n */\n private resetDragState() {\n this.dragMode.set(false);\n this.onDragover.set(false);\n this.stopDropAnimation();\n }\n\n skeletonItems = computed(() => Array.from({ length: this.skeletonCount() }));\n\n /**\n * Asynchronously processes a list of files. For each file, it validates\n * the extension against `supportedFileTypes`. If valid, it generates a\n * thumbnail, counts pages for PDFs, creates an `AppFile` object, and adds\n * it to the `docs` signal. If any file is unsupported, the `unsupported`\n * flag is set.\n * @param files The `FileList` object to be processed.\n */\n async processFiles(files: FileList) {\n this.unsupported.set(false);\n this.invalidFileSize.set(false);\n this.inputRef.nativeElement.disabled = false;\n this.maxCountReached.set(false);\n\n const fileArray = Array.from(files);\n const maxSizeBytes = this.maxFileSize() * 1024 * 1024;\n const supportedTypes = this.supportedFileTypes();\n const existingNames = new Set(this.docs().map((d) => d.fileName));\n\n if (\n (this.variant() === this.dropZoneVariant.DOCUMENT ||\n this.variant() === this.dropZoneVariant.VIDEO) &&\n this.docs().length >= this.maxCountFiles()\n ) {\n this.inputRef.nativeElement.disabled = true;\n this.maxCountReached.set(true);\n return;\n }\n\n const toProcess: File[] = [];\n let totalDocsCount = this.docs().length;\n\n for (const file of fileArray) {\n const fileExtension = file.name.split('.').pop()?.toLowerCase();\n\n if (\n !fileExtension ||\n !supportedTypes.includes(fileExtension as FileExtension)\n ) {\n this.unsupported.set(true);\n continue;\n }\n\n if (file.size > maxSizeBytes) {\n this.invalidFileSize.set(true);\n return;\n }\n\n if (totalDocsCount >= this.maxCountFiles()) {\n break;\n }\n\n if (existingNames.has(file.name)) {\n return;\n }\n\n existingNames.add(file.name);\n toProcess.push(file);\n totalDocsCount++;\n }\n\n if (toProcess.length === 0) {\n return;\n }\n\n // Parallel\n const processedFiles = await Promise.all(\n toProcess.map(async (file) => {\n const fileExtension = file.name.split('.').pop()?.toLowerCase() || '';\n let pageCount: number | undefined;\n\n const supportedBase64 = ['profile', 'cover', 'logo'].includes(\n this.variant(),\n );\n const base64Url =\n supportedBase64 && file\n ? await this.DropZoneDocumentsHelper.fileToBase64(file)\n : null;\n\n try {\n const [thumbnail, pages] = await Promise.all([\n this.documentService.generateThumbnail(file),\n fileExtension === 'pdf'\n ? this.documentService.getPdfPageCount(file)\n : Promise.resolve(undefined),\n ]);\n pageCount = pages;\n\n return {\n fileName: file.name,\n baseName: file.name.split('.').slice(0, -1).join('.'),\n type: fileExtension as FileExtension,\n size: file.size,\n imagePreviewUrl: thumbnail,\n file: file,\n pageCount,\n tags: [] as number[] | null,\n tagChanged: false,\n fileNameChanged: false,\n categoryTag: null,\n base64Url,\n } as AppFile;\n } catch (error) {\n console.error(`Failed processing ${file.name}:`, error);\n return null;\n }\n }),\n );\n\n const valid = processedFiles.filter(Boolean) as AppFile[];\n\n if (valid.length === 0) return;\n\n if (['profile', 'cover', 'logo'].includes(this.variant())) {\n this.temporaryImageFile = valid[0];\n } else {\n this.docs.update((docs) => [...docs, ...valid]);\n }\n\n const isSupportedImage =\n valid[0].file?.type.startsWith('image/') &&\n valid[0].type &&\n supportedTypes.includes(valid[0].type as FileExtension);\n\n if (isSupportedImage && this.crop()) {\n const dataTransfer = new DataTransfer();\n dataTransfer.items.add(valid[0].file as File);\n this.inputRef.nativeElement.files = dataTransfer.files;\n const syntheticEvent = {\n target: this.inputRef.nativeElement,\n } as unknown as Event;\n\n this.imageChangedEvent = syntheticEvent;\n this.isCropperReady.set(false);\n this.zoomValue.set(5.8);\n this.transform = { scale: this.zoomValue() };\n this.setInvalid();\n this.showCropper.set(true);\n }\n\n if (!this.crop()) {\n this.emitDocs();\n this.resetInput();\n }\n\n const total = this.docs().length;\n\n if (!this.isDocumentsMode()) {\n const visibleCount = this.carouselVisibleCount();\n const maxStartIndex = Math.max(0, total - visibleCount);\n if (total > visibleCount) {\n this.carouselIndex.set(maxStartIndex);\n } else {\n this.carouselIndex.set(0);\n }\n }\n\n if (\n total === this.maxCountFiles() &&\n this.variant() === this.dropZoneVariant.DOCUMENT\n ) {\n this.inputRef.nativeElement.disabled = true;\n this.maxCountReached.set(true);\n }\n }\n\n /**\n * Handles the download action for a specific file.\n * Note: This is a placeholder and currently only logs the file name.\n * @param fileName The name of the file to be downloaded.\n */\n handleDownload(fileName: string) {\n const fileToDownload = this.docs().find((doc) => doc.fileName === fileName);\n\n if (!fileToDownload || !fileToDownload.file) {\n console.error('File not found or is null');\n return;\n }\n\n const file = fileToDownload.file;\n const url = URL.createObjectURL(file);\n\n const a = document.createElement('a');\n a.href = url;\n a.download = fileToDownload.fileName;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n\n URL.revokeObjectURL(url);\n }\n\n /**\n * A ViewChild reference to the native `<input type='file'>` element.\n * Used to programmatically trigger the file selection dialog.\n */\n @ViewChild('inputRef') inputRef!: ElementRef<HTMLInputElement>;\n\n /**\n * Resets the component's state after an unsupported file type error\n * by setting the `unsupported` signal to `false`.\n */\n cancel() {\n this.unsupported.set(false);\n this.invalidFileSize.set(false);\n this.resetInput();\n }\n\n /**\n * Programmatically triggers a click on the hidden file input element,\n * which opens the system's file selection dialog.\n */\n handleClickToAdd() {\n this.inputRef.nativeElement.click();\n }\n\n /**\n * Deletes a file from the preview list. It filters the `docs` array to\n * remove the specified file and adjusts the carousel position.\n * @param fileName The name of the file to be deleted.\n */\n handleDelete(fileName: string) {\n this.carouselLeft();\n\n const fileIdToDelete = this.docs().find(\n (doc) => doc.fileName === fileName,\n )?.fileId;\n\n if (fileIdToDelete) {\n this.deletedDocs.set([...this.deletedDocs(), fileIdToDelete]);\n\n this.onDeletedFileIds.emit(this.deletedDocs());\n }\n\n this.docs.set(this.docs().filter((doc) => doc.fileName !== fileName));\n this.emitDocs();\n\n if (this.docs().length === 0) {\n this.unsupported.set(false);\n }\n\n if (this.docs().length < this.maxCountFiles()) {\n this.inputRef.nativeElement.disabled = false;\n this.maxCountReached.set(false);\n }\n\n if (this.variant() === this.dropZoneVariant.COVER) {\n this.coverUrl = '';\n this.smallView.set(false);\n }\n if (this.variant() === this.dropZoneVariant.PROFILE) {\n this.profileUrl = '';\n }\n if (this.variant() === this.dropZoneVariant.LOGO) {\n this.logoUrl = '';\n }\n\n this.inputRef.nativeElement.value = '';\n }\n\n // Carousel logic\n\n /**\n * A computed signal that calculates the CSS `translateX` value for the\n * carousel container. This creates the sliding effect based on the\n * `carouselIndex`.\n */\n carouselTransform = computed(() => {\n if (this.isDocumentsMode()) {\n return 'translateX(0)';\n }\n if (this.isDetailsSlider()) {\n const offset = this.carouselIndex() * -100;\n return `translateX(${offset}%)`;\n }\n if (this.isDrawerMode()) {\n const cardWidthWithGap = 194 + 4; // 194px width + 4px gap\n const containerWidth = this.drawerViewportWidth();\n const contentWidth = this.docs().length * cardWidthWithGap;\n\n if (containerWidth <= 0 || contentWidth <= containerWidth) {\n return 'translateX(0)';\n }\n\n const step = cardWidthWithGap;\n const desiredTranslate = step * this.carouselIndex() * -1;\n const maxTranslate = containerWidth - contentWidth;\n\n const clampedTranslate = Math.max(desiredTranslate, maxTranslate);\n return `translateX(${clampedTranslate}px)`;\n }\n const gap = this.size() === '480px' ? 6 : 8;\n const offset = (148 + gap) * this.carouselIndex() * -1;\n return `translateX(${offset}px)`;\n });\n\n /**\n * Navigates the carousel one step to the left by decrementing the\n * `carouselIndex`. The index will not go below 0.\n */\n carouselLeft() {\n this.carouselIndex.update((i) => Math.max(0, i - 1));\n }\n\n /**\n * Navigates the carousel one step to the right by incrementing the\n * `carouselIndex`. The index will not exceed the maximum possible value\n * based on the number of documents.\n */\n carouselRight() {\n const visibleCount = this.carouselVisibleCount();\n const maxIndex = Math.max(0, this.docs().length - visibleCount);\n this.carouselIndex.update((i) => Math.min(maxIndex, i + 1));\n }\n\n carouselVisibleCount(): number {\n if (this.isDetailsSlider()) return 1;\n if (this.isDrawerMode()) {\n const width = this.drawerViewportWidth();\n return width <= 0 ? 1 : Math.max(1, Math.floor((width + 4) / 198));\n }\n return this.size() === '480px' ? 2 : 3;\n }\n\n isCarouselAtEnd(): boolean {\n const maxIndex = Math.max(\n 0,\n this.docs().length - this.carouselVisibleCount(),\n );\n return this.carouselIndex() >= maxIndex;\n }\n\n handleTagChange(event: { fileName: string; tag: DocumentTag | null }) {\n this.docs().forEach((doc) => {\n if (doc.fileName === event.fileName) {\n doc.tags = event?.tag?.tagId ? [event?.tag?.tagId] : [];\n doc.tagChanged = true;\n }\n });\n this.emitDocs();\n }\n\n handleFileNameChange(event: { fileId?: number; newFileName: string }) {\n this.docs().forEach((doc) => {\n if (doc.fileId === event.fileId) {\n doc.fileName = event.newFileName;\n doc.baseName =\n event.newFileName.split('.').slice(0, -1).join('.') ||\n event.newFileName;\n const file = new File([doc.file as BlobPart], event.newFileName, {\n type: doc.file?.type,\n lastModified: Date.now(),\n });\n doc.file = file;\n doc.fileNameChanged = true;\n }\n });\n this.emitDocs();\n this.onDocumentFileNameChange.emit(event);\n }\n\n setInvalid() {\n this.parentForm()?.setErrors({ childInvalid: true });\n this.onCropPendingChange.emit(true);\n }\n\n resetInput() {\n this.inputRef.nativeElement.value = '';\n }\n\n clearInvalid() {\n const { childInvalid, ...rest } = this.parentForm()?.errors ?? {};\n const next = Object.keys(rest).length ? rest : null;\n this.parentForm()?.setErrors(next);\n this.parentForm()?.updateValueAndValidity({\n emitEvent: true,\n onlySelf: true,\n });\n\n // Clear the input value to allow the same file to be selected again\n if (this.inputRef?.nativeElement) {\n this.resetInput();\n }\n }\n\n handleDocumentPreviewClick(event: { fileId: number }) {\n this.onDocumentPreviewClick.emit({ fileId: event.fileId });\n }\n\n downloadAllFiles(): void {\n this.DropZoneDocumentsHelper.onDownloadAllFiles(this.docs());\n }\n\n onCancel(event: Event) {\n event.preventDefault();\n event.stopPropagation();\n this.onDocumentDropZoneOpenChange.emit(false);\n }\n}\n","@let docCount = docs().length; @let cropFile = crop() === true;\n@let showCrop = showCropper() === true;\n@let documentVariant = variant() === dropZoneVariant.DOCUMENT;\n@let videoVariant = variant() === dropZoneVariant.VIDEO;\n@let profileVariant = variant() === dropZoneVariant.PROFILE;\n@let coverVariant = variant() === dropZoneVariant.COVER;\n@let logoVariant = variant() === dropZoneVariant.LOGO;\n@let roundedBorder = rounded() === true; @let coverPreview = coverUrl !== \"\";\n@let profilePreview = profileUrl !== \"\"; @let logoPreview = !!logoUrl;\n@let smallSize = size() === \"480px\";\n@let countFiles = this.maxCountFiles();\n@let largeSize = size() === \"640px\";\n\n@if (isDocumentsMode() && documentsDropZoneOpen() && dragMode()) {\n <div class=\"documents-drag-overlay\"></div>\n}\n\n<div\n class=\"container\"\n [class]=\"{\n smallContainer: smallSize,\n largeContainer: largeSize,\n dragMode: dragMode() && !isDocumentsMode(),\n dragModeDocuments: dragMode() && isDocumentsMode(),\n onDragover: onDragover(),\n logoVar: logoVariant,\n hasCropper: isCropperReady(),\n 'is-details-slider': isDetailsSlider(),\n 'is-drawer-mode': isDrawerMode(),\n isCoverDetails: isCoverDetails(),\n 'is-documents-mode': isDocumentsMode(),\n }\"\n>\n @if (coverVariant && coverPreview) {\n <div class=\"cover-container\">\n <img [src]=\"coverUrl\" class=\"cover-image\" draggable=\"false\" />\n </div>\n }\n @if (profileVariant) {\n @if (!profilePreview) {\n <div class=\"avatar\">\n <cai-avatar\n [driver]=\"driver()\"\n [size]=\"160\"\n [rounded]=\"rounded()\"\n ></cai-avatar>\n </div>\n } @else {\n <div class=\"profile-container\">\n <img\n [class]=\"rounded() ? 'profile-rounded-image' : 'profile-square-image'\"\n [src]=\"profileUrl\"\n draggable=\"false\"\n />\n </div>\n }\n }\n @if (logoVariant && logoPreview) {\n <div class=\"logo-container\" [class.has-logo]=\"!!logoUrl\">\n <img class=\"logo-image\" [src]=\"logoUrl\" draggable=\"false\" />\n </div>\n }\n <!--Image Cropper-->\n @if (cropFile && showCrop) {\n @if (!isCropperReady()) {\n <div class=\"cropper-loader\">\n <div class=\"spinner\"></div>\n </div>\n }\n <div class=\"cropper-overlay\">\n <image-cropper\n #cropper\n class=\"img-cropper\"\n [output]=\"'base64'\"\n [class.logoBorder]=\"logoVariant\"\n [roundCropper]=\"roundedBorder ? true : false\"\n [hideResizeSquares]=\"true\"\n [allowMoveImage]=\"true\"\n [transform]=\"transform\"\n (transformChange)=\"onTransformChange($event)\"\n format=\"png\"\n [aspectRatio]=\"ratioHelper()\"\n [resizeToWidth]=\"cropWidth()\"\n [resizeToHeight]=\"cropHeight()\"\n [containWithinAspectRatio]=\"true\"\n [imageChangedEvent]=\"imageChangedEvent\"\n (imageCropped)=\"imageCropped($event)\"\n (imageLoaded)=\"imageLoaded($event)\"\n (cropperReady)=\"cropperReady()\"\n (loadImageFailed)=\"loadImageFailed()\"\n ></image-cropper>\n @if (isCropperReady()) {\n <div class=\"lower-part\">\n <div class=\"range\">\n <input\n #inputRange\n type=\"range\"\n class=\"custom-range\"\n min=\"1\"\n max=\"10\"\n step=\"0.1\"\n [value]=\"zoomValue()\"\n (input)=\"onZoomChange($event)\"\n />\n </div>\n <div class=\"cropper-buttons\">\n <button class=\"cancel-button\" (click)=\"cancelCrop()\">Cancel</button>\n <button class=\"submit-button\" (click)=\"submitCrop()\">Crop</button>\n </div>\n </div>\n }\n </div>\n }\n <!-- Drop Zone -->\n @if (!isDocumentsMode() || documentsDropZoneOpen()) {\n <div\n #dropZoneContainer\n class=\"drop-zone-container\"\n [class.has-logo]=\"logoVariant && !!logoUrl\"\n (drop)=\"onDrop($event)\"\n (dragover)=\"onDragOver($event)\"\n (dragenter)=\"onDragEnter($event)\"\n (dragleave)=\"onDragLeave($event)\"\n [class]=\"{\n 'more-docs': docCount >= 3 && largeSize,\n 'small-more-docs': docCount >= 2 && smallSize,\n 'max-reached-drop-design':\n (countFiles <= this.docs().length || maxCountReached()) &&\n documentVariant,\n 'max-reached-more-doc':\n (countFiles <= this.docs().length || maxCountReached()) &&\n documentVariant,\n 'max-reached-more-video':\n (countFiles <= this.docs().length || maxCountReached()) &&\n videoVariant,\n 'invalid-file-size': invalidFileSize(),\n unsupported: unsupported() || invalidFileSize(),\n smallView: this.smallView() && !dragMode(),\n }\"\n >\n <!-- Drop Zone -->\n <div class=\"drop-zone\" (click)=\"handleClickToAdd()\">\n @if (dragMode()) {\n <div class=\"drag-icons-container\">\n @if (isDocumentsMode()) {\n <svg-icon\n name=\"cai-drop-zone-focus\"\n class=\"illustration drag-icon-document\"\n ></svg-icon>\n } @else {\n <!-- Animation -->\n <ng-lottie\n [options]=\"{\n path: variant() | dropZoneAnimation,\n loop: false,\n autoplay: false,\n }\"\n (animationCreated)=\"animationCreated($event)\"\n ></ng-lottie>\n }\n </div>\n <div class=\"drop-zone-focus-text\">\n @if (isDocumentsMode()) {\n <p class=\"heading\">DRAG FILES HERE</p>\n } @else if (documentVariant || videoVariant) {\n <p class=\"heading\">\n {{ onDragover() ? \"DROP FILES HERE\" : \"DRAG FILES HERE\" }}\n </p>\n } @else {\n <p class=\"heading\">\n {{ onDragover() ? \"DROP IMAGE HERE\" : \"DRAG IMAGE HERE\" }}\n </p>\n }\n </div>\n } @else {\n @let svgIcon = variant() | dropZoneAnimation: true;\n <svg-icon [name]=\"svgIcon\" class=\"illustration\"></svg-icon>\n @if (\n (countFiles <= this.docs().length || maxCountReached()) &&\n documentVariant\n ) {\n <div class=\"drop-zone-text\">\n <p class=\"heading\">\n <span class=\"line\">MAX COUNT</span>\n <span class=\"line\">REACHED</span>\n </p>\n <p class=\"subtext\">\n <span class=\"line\">{{ countFiles }} FILES </span>\n <span class=\"line\">IMPORTED</span>\n </p>\n </div>\n } @else {\n <div class=\"drop-zone-text\">\n <p class=\"heading\">\n @if (documentVariant || videoVariant) {\n DRAG FILES\n @if (docCount < 1 || isDocumentsMode()) {\n <span>HERE</span>\n }\n } @else if (profileVariant && roundedBorder) {\n DRAG IMAGE\n } @else {\n DRAG IMAGE HERE\n }\n </p>\n @if (!coverPreview && !profilePreview) {\n <p class=\"subtext\">OR CLICK TO ADD</p>\n }\n @if (coverPreview || profilePreview) {\n <p class=\"subtext\">OR CLICK TO REPLACE</p>\n }\n @if (videoVariant) {\n <p class=\"video-subtext\">max file size {{ maxFileSize() }}mb</p>\n }\n </div>\n @if (isDocumentsMode()) {\n <button\n class=\"cancel-button-documents\"\n ngbTooltip=\"Cancel\"\n [placement]=\"'bottom'\"\n container=\"body\"\n triggers=\"mouseenter:mouseleave\"\n tooltipClass=\"tooltip tooltip-m-b-2\"\n >\n <svg-icon\n name=\"cai-cancel\"\n class=\"cancel-icon\"\n (click)=\"onCancel($event)\"\n ></svg-icon>\n </button>\n }\n }\n }\n <input\n type=\"file\"\n aria-hidden=\"true\"\n multiple\n class=\"drop-zone-input\"\n #inputRef\n (input)=\"onInput($event)\"\n (change)=\"fileChangeEvent($event)\"\n />\n </div>\n\n <!-- Drop Zone Error -->\n <div class=\"drop-zone-error\">\n @if (invalidFileSize()) {\n <div class=\"drop-zone-text\">\n <p class=\"heading invalid\">INVALID FILE SIZE</p>\n <p class=\"subtext\">MAX {{ maxFileSize() }} MB</p>\n </div>\n } @else {\n <div class=\"drop-zone-text\">\n <p class=\"heading invalid\">INVALID FILE TYPE</p>\n <p class=\"subtext\">SUPPORTED FORMATS</p>\n </div>\n <div class=\"file-types\">\n @for (type of supportedFileTypes(); track $index) {\n <p\n class=\"badge\"\n [class]=\"{\n pdf: type === 'pdf',\n video: ['avi', 'mp4', 'mov'].includes(type),\n image: ['jpg', 'png', 'jpeg', 'gif'].includes(type),\n }\"\n >\n {{ type }}\n </p>\n }\n </div>\n }\n <button class=\"cancel-button\">\n <svg-icon\n name=\"cai-cancel\"\n class=\"cancel-icon\"\n (click)=\"cancel()\"\n ></svg-icon>\n </button>\n </div>\n </div>\n }\n @if (isLoadingSkeleton()) {\n <!-- Skeleton -->\n <ng-container *ngTemplateOutlet=\"skeletonTemplate\"></ng-container>\n } @else {\n <!-- Carousel -->\n @if (docCount > 0 && (documentVariant || videoVariant)) {\n <div #docsViewport class=\"docs\">\n <div\n class=\"doc-container\"\n [class.documents-container-grid]=\"isDocumentsMode()\"\n [style.transform]=\"isDocumentsMode() ? '' : carouselTransform()\"\n [style.--carousel-index]=\"isDocumentsMode() ? null : carouselIndex()\"\n >\n @for (doc of docs(); track doc.fileId) {\n <cai-document-preview\n [class.doc-visible]=\"\n isDetailsSlider() && $index === carouselIndex()\n \"\n [class.doc-hidden]=\"\n isDetailsSlider() && $index !== carouselIndex()\n \"\n [file]=\"doc\"\n (onDelete)=\"handleDelete($event)\"\n (onDownload)=\"handleDownload($event)\"\n (onTagChange)=\"handleTagChange($event)\"\n class=\"doc\"\n [file]=\"doc\"\n (onDelete)=\"handleDelete($event)\"\n (onDownload)=\"handleDownload($event)\"\n (onTagChange)=\"handleTagChange($event)\"\n (onFileNameChange)=\"handleFileNameChange($event)\"\n (onDocumentPreviewClick)=\"handleDocumentPreviewClick($event)\"\n [tags]=\"documentTags()\"\n [searchText]=\"searchText()\"\n [cdlDetailsMode]=\"isDetailsSlider()\"\n [multipleDetailsDocs]=\"isDetailsSlider() && docCount > 1\"\n [drawerMode]=\"isDrawerMode()\"\n [isCoverDetails]=\"isCoverDetails()\"\n [viewMode]=\"isDocumentsMode() ? 'large' : 'small'\"\n ></cai-document-preview>\n }\n </div>\n @if (docCount >= 3 || (isDetailsSlider() && docCount > 1)) {\n <button\n class=\"carousel-button carousel-left\"\n type=\"button\"\n (click)=\"carouselLeft()\"\n [disabled]=\"carouselIndex() === 0\"\n [style.opacity]=\"carouselIndex() === 0 ? '0' : '1'\"\n >\n <svg-icon name=\"cai-arrow-secondary-left\" class=\"arrow\"></svg-icon>\n </button>\n <button\n class=\"carousel-button carousel-right\"\n type=\"button\"\n (click)=\"carouselRight()\"\n [disabled]=\"isCarouselAtEnd()\"\n [style.opacity]=\"isCarouselAtEnd() ? '0' : '1'\"\n >\n <svg-icon name=\"cai-arrow-secondary-right\" class=\"arrow\"></svg-icon>\n </button>\n }\n @if (isDetailsSlider() && docCount > 1) {\n <div class=\"sliders\">\n @for (doc of docs(); track $index) {\n <div\n class=\"slider-item\"\n (click)=\"carouselIndex.set($index)\"\n [class.active]=\"$index === carouselIndex()\"\n ></div>\n }\n </div>\n }\n </div>\n }\n }\n</div>\n\n<!-- Skeleton Template -->\n\n<ng-template #skeletonTemplate>\n <div\n class=\"skeleton-container\"\n [ngClass]=\"{\n 'documents-container-grid': isDocumentsMode(),\n 'drawer-position': isDrawerMode(),\n }\"\n >\n @for (item of skeletonItems(); track $index) {\n <div class=\"skeleton-item\">\n <div class=\"skeleton-bar\"></div>\n </div>\n }\n </div>\n</ng-template>\n","const supportedFileTypes = [\n 'mp4',\n 'mov',\n 'avi',\n 'pdf',\n 'jpg',\n 'jpeg',\n 'png',\n 'gif',\n] as const;\n\nexport type FileExtension = (typeof supportedFileTypes)[number];\n\nexport interface AppFile {\n fileId?: number;\n fileName: string;\n baseName: string;\n type: FileExtension;\n size: number; // File size in bytes\n imagePreviewUrl?: string;\n pageCount?: number; // PDF Only\n file: File | null;\n tags: number[] | null;\n tagChanged: boolean;\n fileNameChanged: boolean;\n categoryTag: string | null;\n base64Url?: string | null;\n}\n","import { distinctUntilChanged } from \"rxjs/operators\";\nimport { Subject } from \"rxjs\";\nimport { Injectable } from \"@angular/core\";\n\n// models\nimport { ScrollChange } from \"../models/scroll-change.model\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class CalendarDateTimePickerService {\n public index$ = new Subject<ScrollChange>();\n public indexAuto$ = new Subject<number>();\n public scrollToDate = new Subject<string>();\n public dateChanged = new Subject<any>();\n public selectedIndex = 0;\n scrolledIndexChange = this.index$.pipe(distinctUntilChanged());\n scrollToAutoIndex = this.indexAuto$.pipe(distinctUntilChanged());\n private scrolledScroll!: string;\n\n constructor() {}\n\n public set setAutoIndex(number: number) {\n this.selectedIndex = number;\n this.indexAuto$.next(number);\n }\n\n public set scrolledScrollItem(name: string) {\n this.scrolledScroll = name;\n }\n\n public get selectedScroll() {\n return this.scrolledScroll;\n }\n}\n","import {\n CdkVirtualScrollViewport,\n VirtualScrollStrategy,\n} from '@angular/cdk/scrolling';\nimport { Inject, Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { distinctUntilChanged } from 'rxjs/operators';\n\n// services\nimport { CalendarDateTimePickerService } from '../services/calendar-datetime-picker.service';\n\nexport const STARTING_YEAR = new Date().getFullYear() - 90;\n\nexport const RANGE = 100 * 12;\n\nconst BUFFER = 500;\n\n@Injectable()\nexport class CalendarStrategy implements VirtualScrollStrategy {\n constructor(\n private calendarService: CalendarDateTimePickerService,\n @Inject(String) private startedHeight: number,\n @Inject(String) private FULL_SIZE: number,\n @Inject(String) private SCROLL_TYPE: string\n ) {}\n\n private index$ = new Subject<any>();\n scrolledIndexChange = this.index$.pipe(distinctUntilChanged());\n private viewport?: CdkVirtualScrollViewport;\n\n public attach(viewport: CdkVirtualScrollViewport): void {\n this.viewport = viewport;\n this.viewport.setTotalContentSize(this.startedHeight);\n this.updateRenderedRange(this.viewport);\n }\n\n public updateScrollHeights(height: number): void {\n this.viewport?.setTotalContentSize(height);\n this.updateRenderedRange(this.viewport);\n }\n\n public detach(): void {\n this.index$.complete();\n this.viewport = undefined;\n }\n\n public onContentScrolled(): void {\n if (this.viewport) this.updateRenderedRange(this.viewport);\n }\n\n /** These do not matter for this case */\n public onDataLengthChanged(): void {}\n\n public onContentRendered(): void {}\n\n public onRenderedOffsetChanged(): void {}\n\n public scrollToIndex(index: number, behavior: ScrollBehavior): void {\n if (this.viewport)\n this.viewport.scrollToOffset(this.getOffsetForIndex(index), behavior);\n }\n\n public scrollToOffset(offset: number, behavior: ScrollBehavior): void {\n if (this.viewport) this.viewport.scrollToOffset(offset, behavior);\n }\n\n public getOffsetForIndex(index: number): number {\n return this.FULL_SIZE * index;\n }\n\n private getIndexForOffset(offset: number): number {\n return Math.round(offset / this.FULL_SIZE);\n }\n private updateRenderedRange(viewport?: CdkVirtualScrollViewport): void {\n if (!viewport) return;\n\n const offset = viewport.measureScrollOffset();\n\n const { start, end } = viewport.getRenderedRange();\n const viewportSize = 230;\n\n const dataLength = viewport.getDataLength();\n\n const newRange = { start, end };\n const firstVisibleIndex = this.getIndexForOffset(offset);\n\n const startOffsetIndex = this.FULL_SIZE * start;\n\n const startBuffer = offset - startOffsetIndex;\n if (startBuffer < BUFFER && start !== 0) {\n newRange.start = Math.max(0, this.getIndexForOffset(offset - BUFFER * 2));\n newRange.end = Math.min(\n dataLength,\n this.getIndexForOffset(offset + viewportSize + BUFFER)\n );\n } else {\n const endBuffer = this.FULL_SIZE * end - offset - viewportSize;\n\n if (endBuffer < BUFFER && end !== dataLength) {\n newRange.start = Math.max(0, this.getIndexForOffset(offset - BUFFER));\n newRange.end = Math.min(\n dataLength,\n this.getIndexForOffset(offset + viewportSize + BUFFER * 2)\n );\n }\n }\n\n viewport.setRenderedRange(newRange);\n viewport.setRenderedContentOffset(this.getOffsetForIndex(newRange.start));\n\n // Used for update of 2nd scroll that is listening\n if (this.calendarService.selectedScroll === this.SCROLL_TYPE)\n this.index$.next({\n indx: firstVisibleIndex,\n scrollOffset: offset,\n cycleSize: this.FULL_SIZE,\n type: this.SCROLL_TYPE,\n });\n }\n}\n","export class CustomDatetimePickersConstants {\n public static readonly timeMinutes = ['00', '15', '30', '45'];\n public static readonly timeMinutesGapFive = [\n '00',\n '05',\n '10',\n '15',\n '20',\n '25',\n '30',\n '35',\n '40',\n '45',\n '50',\n '55',\n ];\n public static readonly monthNames = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n ];\n public static readonly hourTimes = [\n 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,\n 11,\n ];\n public static readonly defaultScrollTypes = {\n pmAmScroll: 0,\n minutesScroll: 0,\n hourScroll: 8,\n monthScroll: 0,\n dayScroll: 0,\n yearScroll: 0,\n };\n public static readonly timeOfDay = ['AM', 'PM'];\n public static readonly defaultSelectedTime = '12:00 AM';\n public static readonly defaultOutputTypeTime = ['hh', ':', 'mm', ' ', 'AM'];\n public static readonly defaultOutputTypeDate = ['MM', '/', 'DD', '/', 'YY'];\n public static readonly dayOfWeekLetters = ['S', 'M', 'T', 'W', 'T', 'F', 'S'];\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\n@Component({\n selector: 'cai-custom-datetime-picker-calendar-days',\n templateUrl: './cai-custom-datetime-pickers-calendar-days.component.html',\n styleUrls: ['./cai-custom-datetime-pickers-calendar-days.component.scss'],\n imports: [CommonModule, FormsModule],\n})\nexport class CaCustomDateTimePickersCalendarDaysComponent implements OnInit {\n @Input() dateTime!: Date;\n @Input() year!: number;\n @Input() selectedMonth!: string;\n @Input() index!: number;\n @Input() activeMonth!: boolean;\n @Output() selectDay = new EventEmitter();\n public currentYear: number = new Date().getFullYear();\n public currentMonth: number = new Date().getMonth();\n public currentDay: number = new Date().getDate();\n public selectedMonthFromInput!: number;\n public selectedYearFromInput!: number;\n public days: ReadonlyArray<string | number> = [];\n public selectedDay: number = -1;\n public selMonth: number = -1;\n public selectedYear: number = -1;\n\n @Input()\n set month(month: Date) {\n this.selectedMonthFromInput = parseInt(\n ('0' + month.getMonth() + 1).slice(-2)\n );\n this.selectedYearFromInput = month.getFullYear();\n const fillerCount = month.getDay();\n const lastDay = new Date(month.getFullYear(), month.getMonth() + 1, 0);\n const daysCount = lastDay.getDate();\n\n this.days = [\n ...Array.from({ length: fillerCount }).map(() => ''),\n ...Array.from({ length: daysCount }).map((_, i) => i + 1),\n ];\n }\n\n constructor() {}\n\n ngOnInit(): void {\n this.setSelectedDate();\n }\n\n public chooseDay(day: number | string, event: Event): void {\n this.selectDay.emit({ index: this.index, day });\n event?.stopPropagation();\n }\n\n private setSelectedDate(): void {\n this.selectedDay = parseInt(('0' + this.dateTime.getDate()).slice(-2));\n this.selMonth = parseInt(('0' + this.dateTime.getMonth() + 1).slice(-2));\n this.selectedYear = this.dateTime.getFullYear();\n }\n}\n","<div class=\"calendar_days\">\n @for (day of days; let indx = $index; track indx) {\n <div\n (click)=\"day && chooseDay(day, $event)\"\n [ngClass]=\"{\n 'selected_day ta-font-bold':\n day === selectedDay &&\n selectedMonthFromInput === selMonth &&\n selectedYearFromInput === selectedYear,\n }\"\n [class.empty_day]=\"!day\"\n [class.day_in_current_month]=\"activeMonth\"\n [class.current_day]=\"\n day === currentDay &&\n year === currentYear &&\n selectedMonth === currentMonth.toString()\n \"\n class=\"calendar_day ta-font-medium\"\n >\n <span>{{ day }}</span>\n </div>\n }\n</div>\n","export enum CalendarMainStringEnum {\n FULL_SIZE = 182,\n CYCLE_HEIGHT = 100 * (12 * FULL_SIZE) + 50,\n CYCLE_HEIGHT_BY_MONTHS = 100 * FULL_SIZE + 65,\n}\n","export enum CalendarStringEnum {\n AUTO = 'auto',\n LEFT = 'left',\n LIST_PREVIEW = 'listPreview',\n MAIN = 'main'\n}\n","export enum CalendarListPreviewStringEnum {\n FULL_LIST = 'full_list',\n MONTH_LIST = 'month_list',\n}","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n OnDestroy,\n forwardRef,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { Subject, takeUntil } from 'rxjs';\n\n// modules\nimport {\n ScrollingModule,\n VIRTUAL_SCROLL_STRATEGY,\n} from '@angular/cdk/scrolling';\n\n// moment\nimport moment from 'moment';\n\n// services\nimport { CalendarDateTimePickerService } from '../../services/calendar-datetime-picker.service';\n\n// components\nimport { CaCustomDateTimePickersCalendarDaysComponent } from '../cai-custom-datetime-pickers-calendar-days/cai-custom-datetime-pickers-calendar-days.component';\n\n// strategy\nimport {\n CalendarStrategy,\n STARTING_YEAR,\n} from '../../strategy/calendar-strategy';\n\n// enums\nimport { CalendarMainStringEnum } from '../../enums/calendar-main-string.enum';\nimport { CalendarStringEnum } from '../../enums/calendar-string.enum';\nimport { CalendarListPreviewStringEnum } from '../../enums/calendar-list-preview-string.enum';\nimport { CustomDatetimePickersConstants } from '../../utils/constants/custom-datetime-pickers.constants';\n\nfunction factory(dir: CaCustomDateTimePickerCalendarDatesMainComponent) {\n return dir.scrollStrategy;\n}\n\n@Component({\n selector: 'cai-custom-datetime-pickers--calendar-dates-main',\n templateUrl:\n './cai-custom-datetime-pickers-calendar-dates-main.component.html',\n styleUrls: [\n './cai-custom-datetime-pickers-calendar-dates-main.component.scss',\n ],\n imports: [\n CommonModule,\n FormsModule,\n ScrollingModule,\n CaCustomDateTimePickersCalendarDaysComponent,\n ],\n providers: [\n {\n provide: VIRTUAL_SCROLL_STRATEGY,\n useFactory: factory,\n deps: [\n forwardRef(() => CaCustomDateTimePickerCalendarDatesMainComponent),\n ],\n },\n ],\n})\nexport class CaCustomDateTimePickerCalendarDatesMainComponent\n implements OnInit, OnDestroy\n{\n @Input() months!: Date[];\n @Input() dateTime!: Date;\n @Input() currentIndex!: number;\n @Input() currentYearIndex!: number;\n @Input() activeIndex!: number;\n @Input() monthYearsIndx!: string[];\n\n public _listPreview!: string;\n @Input() set listPreview(value: string) {\n this._listPreview = value;\n this.scrollStrategy.updateScrollHeights(\n value === CalendarListPreviewStringEnum.MONTH_LIST\n ? CalendarMainStringEnum.CYCLE_HEIGHT_BY_MONTHS\n : CalendarMainStringEnum.CYCLE_HEIGHT\n );\n }\n @Input() isMonthAndYearOnly!: boolean;\n @Output() setListPreviewToFull: EventEmitter<number> = new EventEmitter();\n @Output() setAutoIndex: EventEmitter<number> = new EventEmitter();\n\n public scrollStrategy!: CalendarStrategy;\n\n private destroy$ = new Subject<void>();\n\n public monthNames = CustomDatetimePickersConstants.monthNames;\n\n public selectedYear!: number;\n public selectedYearFromInput!: number;\n public selMonth!: number;\n public selectedMonth!: string;\n private activeMonth = 0;\n\n constructor(private calendarService: CalendarDateTimePickerService) {\n this.scrollStrategy = new CalendarStrategy(\n this.calendarService,\n CalendarMainStringEnum.CYCLE_HEIGHT,\n CalendarMainStringEnum.FULL_SIZE,\n CalendarStringEnum.MAIN\n );\n }\n\n ngOnInit(): void {\n this.initScrollListeners();\n }\n\n public initScrollListeners(): void {\n this.selMonth = this.dateTime.getMonth();\n this.selectedYearFromInput = this.dateTime.getFullYear();\n //this.selectedYearFromInput = this.months.getFullYear();\n\n this.calendarService.scrollToAutoIndex\n .pipe(takeUntil(this.destroy$))\n .subscribe((indx) => {\n setTimeout(() => {\n this.scrollStrategy.scrollToIndex(indx, CalendarStringEnum.AUTO);\n });\n });\n\n this.calendarService.scrolledIndexChange\n .pipe(takeUntil(this.destroy$))\n .subscribe((res) => {\n if (\n res.type !== CalendarStringEnum.MAIN &&\n this.calendarService.selectedScroll !== CalendarStringEnum.MAIN\n ) {\n const sizeTimes = CalendarMainStringEnum.FULL_SIZE / res.cycleSize;\n const newScrollSize = Math.ceil(sizeTimes * res.scrollOffset);\n this.scrollStrategy.scrollToOffset(\n newScrollSize,\n CalendarStringEnum.AUTO\n );\n }\n });\n\n this.calendarService.scrollToDate\n .pipe(takeUntil(this.destroy$))\n .subscribe((res) => {\n setTimeout(() => {\n if (res) {\n const indx = this.findIndexInMonth(res);\n this.scrollStrategy.scrollToIndex(indx, CalendarStringEnum.AUTO);\n } else {\n this.scrollStrategy.scrollToIndex(\n this.currentIndex,\n CalendarStringEnum.AUTO\n );\n }\n }, 200);\n });\n\n if (this.isMonthAndYearOnly) {\n setTimeout(() => {\n this.scrollStrategy.updateScrollHeights(\n CalendarMainStringEnum.CYCLE_HEIGHT_BY_MONTHS\n );\n\n setTimeout(() => {\n this.scrollStrategy.scrollToIndex(\n this.currentYearIndex,\n CalendarStringEnum.AUTO\n );\n }, 200);\n }, 200);\n }\n }\n\n public findIndexInMonth(date: string): number {\n const selectedDate = new Date(date);\n const indexMonth = (selectedDate.getFullYear() - STARTING_YEAR) * 12;\n const indx = indexMonth + selectedDate.getMonth();\n return indx;\n }\n\n public onMonthChange(data: any): void {\n if (this.months[data.indx]) {\n this.selectedYear = this.months[data.indx].getFullYear();\n this.selectedMonth = this.monthNames[this.months[data.indx].getMonth()];\n this.activeMonth = data.indx;\n this.calendarService.index$.next(data);\n }\n }\n\n public getMonth(index: number): string {\n return CustomDatetimePickersConstants.monthNames[index];\n }\n\n public mouseOverSetItem() {\n this.calendarService.scrolledScrollItem = CalendarStringEnum.MAIN;\n }\n\n public setCalendarListPreview(\n num: number,\n index: number,\n event: Event\n ): void {\n event?.stopPropagation();\n this.selMonth = num;\n\n if (this.isMonthAndYearOnly) {\n this.setAutoIndex.emit(num);\n\n const selectedMonth = this.months[index];\n const new_date = moment(\n new Date(selectedMonth.getFullYear(), num + 1, 0)\n ).format();\n this.calendarService.dateChanged.next(new_date);\n } else {\n this.setListPreviewToFull.emit(num);\n }\n }\n\n public selectDay(data: { day: number; index: number }): void {\n const selectedMonth = this.months[data.index];\n const new_date = moment(\n new Date(selectedMonth.getFullYear(), selectedMonth.getMonth(), data.day)\n ).format();\n this.calendarService.dateChanged.next(new_date);\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","<div (mouseover)=\"mouseOverSetItem()\">\n <cdk-virtual-scroll-viewport\n #monthsScrollRef\n [tabindex]=\"-1\"\n (scrolledIndexChange)=\"onMonthChange($event)\"\n style=\"height: 200px; width: 100%; margin: 0\"\n >\n <ng-container\n *cdkVirtualFor=\"\n let month of months;\n let indx = index;\n templateCacheSize: 10\n \"\n >\n <div\n class=\"calendar_indicator ta-font-bold\"\n [class.full_calendar]=\"_listPreview === 'full_list'\"\n [class.current_year]=\"\n isMonthAndYearOnly\n ? selectedYearFromInput === month.getFullYear()\n : selectedYearFromInput === month.getFullYear() &&\n selMonth === month.getMonth()\n \"\n [tabindex]=\"-1\"\n >\n @if (_listPreview === \"full_list\") {\n <span>{{ getMonth(month.getMonth()) }} </span>\n }\n {{ month.getFullYear() }}\n </div>\n @if (_listPreview === \"full_list\") {\n <div>\n <cai-custom-datetime-picker-calendar-days\n (selectDay)=\"selectDay($event)\"\n [index]=\"indx\"\n [month]=\"month\"\n [selectedMonth]=\"month.getMonth().toString()\"\n [year]=\"selectedYear\"\n [dateTime]=\"dateTime\"\n [activeMonth]=\"\n selectedYearFromInput === month.getFullYear() &&\n selMonth === month.getMonth()\n \"\n ></cai-custom-datetime-picker-calendar-days>\n </div>\n }\n @if (_listPreview === \"month_list\") {\n <div>\n <div\n class=\"month_list\"\n [class.current_year]=\"selectedYearFromInput === month.getFullYear()\"\n >\n <div\n class=\"month_list_item ta-font-medium\"\n (click)=\"setCalendarListPreview(0, indx, $event)\"\n [ngClass]=\"{\n 'current_month ta-font-bold':\n selectedYearFromInput === month.getFullYear() &&\n 0 === selMonth,\n }\"\n >\n JAN\n </div>\n <div\n class=\"month_list_item ta-font-medium\"\n (click)=\"setCalendarListPreview(1, indx, $event)\"\n [ngClass]=\"{\n 'current_month ta-font-bold':\n selectedYearFromInput === month.getFullYear() &&\n 1 === selMonth,\n }\"\n >\n FEB\n </div>\n <div\n class=\"month_list_item ta-font-medium\"\n (click)=\"setCalendarListPreview(2, indx, $event)\"\n [ngClass]=\"{\n 'current_month ta-font-bold':\n selectedYearFromInput === month.getFullYear() &&\n 2 === selMonth,\n }\"\n >\n MAR\n </div>\n <div\n class=\"month_list_item ta-font-medium\"\n (click)=\"setCalendarListPreview(3, indx, $event)\"\n [ngClass]=\"{\n 'current_month ta-font-bold':\n selectedYearFromInput === month.getFullYear() &&\n 3 === selMonth,\n }\"\n >\n APR\n </div>\n <div\n class=\"month_list_item ta-font-medium\"\n (click)=\"setCalendarListPreview(4, indx, $event)\"\n [ngClass]=\"{\n 'current_month ta-font-bold':\n selectedYearFromInput === month.getFullYear() &&\n 4 === selMonth,\n }\"\n >\n MAY\n </div>\n <div\n class=\"month_list_item ta-font-medium\"\n (click)=\"setCalendarListPreview(5, indx, $event)\"\n [ngClass]=\"{\n 'current_month ta-font-bold':\n selectedYearFromInput === month.getFullYear() &&\n 5 === selMonth,\n }\"\n >\n JUN\n </div>\n <div\n class=\"month_list_item ta-font-medium\"\n (click)=\"setCalendarListPreview(6, indx, $event)\"\n [ngClass]=\"{\n 'current_month ta-font-bold':\n selectedYearFromInput === month.getFullYear() &&\n 6 === selMonth,\n }\"\n >\n JUL\n </div>\n <div\n class=\"month_list_item ta-font-medium\"\n (click)=\"setCalendarListPreview(7, indx, $event)\"\n [ngClass]=\"{\n 'current_month ta-font-bold':\n selectedYearFromInput === month.getFullYear() &&\n 7 === selMonth,\n }\"\n >\n AUG\n </div>\n <div\n class=\"month_list_item ta-font-medium\"\n (click)=\"setCalendarListPreview(8, indx, $event)\"\n [ngClass]=\"{\n 'current_month ta-font-bold':\n selectedYearFromInput === month.getFullYear() &&\n 8 === selMonth,\n }\"\n >\n SEP\n </div>\n <div\n class=\"month_list_item ta-font-medium\"\n (click)=\"setCalendarListPreview(9, indx, $event)\"\n [ngClass]=\"{\n 'current_month ta-font-bold':\n selectedYearFromInput === month.getFullYear() &&\n 9 === selMonth,\n }\"\n >\n OCT\n </div>\n <div\n class=\"month_list_item ta-font-medium\"\n (click)=\"setCalendarListPreview(10, indx, $event)\"\n [ngClass]=\"{\n 'current_month ta-font-bold':\n selectedYearFromInput === month.getFullYear() &&\n 10 === selMonth,\n }\"\n >\n NOV\n </div>\n <div\n class=\"month_list_item ta-font-medium\"\n (click)=\"setCalendarListPreview(11, indx, $event)\"\n [ngClass]=\"{\n 'current_month ta-font-bold':\n selectedYearFromInput === month.getFullYear() &&\n 11 === selMonth,\n }\"\n >\n DEC\n </div>\n </div>\n </div>\n }\n </ng-container>\n </cdk-virtual-scroll-viewport>\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { CustomDatetimePickersConstants } from '../utils/constants/custom-datetime-pickers.constants';\nimport { CalendarListPreviewStringEnum } from '../enums/calendar-list-preview-string.enum';\n\n@Pipe({\n name: 'calendarmonths',\n standalone: true,\n})\nexport class CalendarMonthsPipe implements PipeTransform {\n private MONTHS = CustomDatetimePickersConstants.monthNames;\n\n constructor() {}\n\n transform(index: Date, listPreview: string): string {\n if (\n this.MONTHS[index.getMonth()] === 'January' ||\n listPreview === CalendarListPreviewStringEnum.MONTH_LIST\n )\n return `<span class=\"left-year-show\">${index.getFullYear()}</span>`;\n\n return this.MONTHS[index.getMonth()].slice(0, 3);\n }\n}","export enum CalendarLeftStringEnum {\n FULL_SIZE = 22,\n CYCLE_HEIGHT = 100 * (12 * FULL_SIZE) + 265,\n CYCLE_HEIGHT_BY_MONTHS = 100 * FULL_SIZE + 265,\n}\n","import { Component, forwardRef, Input, OnInit, OnDestroy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\nimport { Subject, takeUntil } from 'rxjs';\n\n// services\nimport { CalendarDateTimePickerService } from '../../services/calendar-datetime-picker.service';\n\n// modules\nimport {\n ScrollingModule,\n VIRTUAL_SCROLL_STRATEGY,\n} from '@angular/cdk/scrolling';\n\n// pipes\nimport { CalendarMonthsPipe } from '../../pipes/calendar-months.pipe';\n\n// strategy\nimport {\n CalendarStrategy,\n STARTING_YEAR,\n} from '../../strategy/calendar-strategy';\n\n// enums\nimport { CalendarLeftStringEnum } from '../../enums/calendar-left-string.enum';\nimport { CalendarListPreviewStringEnum } from '../../enums/calendar-list-preview-string.enum';\nimport { CalendarStringEnum } from '../../enums/calendar-string.enum';\n\nfunction factory(dir: CaCustomDateTimePickersCalendarLeftComponent) {\n return dir.scrollStrategy;\n}\n\n@Component({\n selector: 'cai-custom-datetime-pickers-calendar-left',\n templateUrl: './cai-custom-datetime-pickers-calendar-left.component.html',\n styleUrls: ['./cai-custom-datetime-pickers-calendar-left.component.scss'],\n imports: [CommonModule, FormsModule, ScrollingModule, CalendarMonthsPipe],\n providers: [\n {\n provide: VIRTUAL_SCROLL_STRATEGY,\n useFactory: factory,\n deps: [forwardRef(() => CaCustomDateTimePickersCalendarLeftComponent)],\n },\n ],\n})\nexport class CaCustomDateTimePickersCalendarLeftComponent\n implements OnInit, OnDestroy\n{\n @Input() months!: Date[];\n @Input() currentIndex!: number;\n @Input() isMonthAndYearOnly: boolean = false;\n\n public _listPreview!: string;\n @Input() set listPreview(value: string) {\n this._listPreview = value;\n this.scrollStrategy.updateScrollHeights(\n value === CalendarListPreviewStringEnum.MONTH_LIST\n ? CalendarLeftStringEnum.CYCLE_HEIGHT_BY_MONTHS\n : CalendarLeftStringEnum.CYCLE_HEIGHT\n );\n }\n\n public _currentYearIndex: number = 0;\n @Input() set currentYearIndex(value: number) {\n this._currentYearIndex = value;\n if (this.isMonthAndYearOnly && this._currentYearIndex)\n setTimeout(() => {\n this.scrollStrategy.scrollToIndex(\n this._currentYearIndex,\n CalendarStringEnum.AUTO\n );\n }, 200);\n }\n\n public _activeIndex: number = 0;\n @Input() set activeIndex(value: number) {\n this._activeIndex = value;\n if (!this.isMonthAndYearOnly && this._activeIndex)\n setTimeout(() => {\n this.scrollStrategy.scrollToIndex(\n this._activeIndex,\n CalendarStringEnum.AUTO\n );\n }, 200);\n }\n public isHovered!: boolean;\n private isFirstCall: boolean = true;\n\n private destroy$ = new Subject<void>();\n\n constructor(private calendarService: CalendarDateTimePickerService) {\n this.scrollStrategy = new CalendarStrategy(\n this.calendarService,\n CalendarLeftStringEnum.CYCLE_HEIGHT,\n CalendarLeftStringEnum.FULL_SIZE,\n CalendarStringEnum.LEFT\n );\n }\n\n scrollStrategy!: CalendarStrategy;\n\n ngOnInit(): void {\n this.initScrollListeners();\n }\n\n public initScrollListeners(): void {\n this.calendarService.scrollToAutoIndex\n .pipe(takeUntil(this.destroy$))\n .subscribe((indx) => {\n this.scrollStrategy.scrollToIndex(indx, CalendarStringEnum.AUTO);\n });\n\n this.calendarService.scrolledIndexChange\n .pipe(takeUntil(this.destroy$))\n .subscribe((res) => {\n if (\n res.type != CalendarStringEnum.LEFT &&\n this.calendarService.selectedScroll != CalendarStringEnum.LEFT\n ) {\n const sizeTimes = CalendarLeftStringEnum.FULL_SIZE / res.cycleSize;\n const newScrollSize = sizeTimes * res.scrollOffset;\n this.scrollStrategy.scrollToOffset(\n newScrollSize,\n CalendarStringEnum.AUTO\n );\n }\n });\n\n this.calendarService.scrollToDate\n .pipe(takeUntil(this.destroy$))\n .subscribe((res) => {\n setTimeout(() => {\n if (res) {\n const indx = this.findIndexInMonth(res);\n this.scrollStrategy.scrollToIndex(indx, CalendarStringEnum.AUTO);\n } else\n this.scrollStrategy.scrollToIndex(\n this.currentIndex,\n CalendarStringEnum.AUTO\n );\n });\n });\n\n if (this.isMonthAndYearOnly) {\n setTimeout(() => {\n if (this.isFirstCall) {\n this.scrollStrategy.updateScrollHeights(\n CalendarLeftStringEnum.CYCLE_HEIGHT_BY_MONTHS\n );\n\n this.scrollStrategy.scrollToIndex(\n this._currentYearIndex,\n CalendarStringEnum.AUTO\n );\n\n this.isFirstCall = false;\n }\n }, 200);\n }\n }\n\n public findIndexInMonth(date: string): number {\n const selectedDate = new Date(date);\n const indexMonth = (selectedDate.getFullYear() - STARTING_YEAR) * 12;\n const indx = indexMonth + selectedDate.getMonth();\n return indx;\n }\n\n public onScrollChanged(data: any): void {\n this.calendarService.index$.next(data);\n }\n\n public selectMonth(indx: number, event: Event): void {\n event?.stopPropagation();\n this.scrollStrategy.scrollToIndex(indx, CalendarStringEnum.AUTO);\n }\n\n public mouseOverSetItem(): void {\n this.calendarService.scrolledScrollItem = CalendarStringEnum.LEFT;\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","<div (mouseover)=\"mouseOverSetItem()\">\n <cdk-virtual-scroll-viewport\n #leftSideRef\n (scrolledIndexChange)=\"onScrollChanged($event)\"\n style=\"height: 290px; width: 100%; margin: 0\"\n [tabindex]=\"-1\"\n >\n <ng-container\n *cdkVirtualFor=\"\n let month of months;\n let indx = index;\n templateCacheSize: 10\n \"\n >\n <div\n (click)=\"selectMonth(indx, $event)\"\n class=\"month-year-item ta-font-medium\"\n [ngClass]=\"{\n 'current_month_year ta-font-bold': isMonthAndYearOnly\n ? indx === _currentYearIndex\n : indx === _activeIndex,\n }\"\n [innerHTML]=\"month | calendarmonths: _listPreview\"\n ></div>\n </ng-container>\n </cdk-virtual-scroll-viewport>\n</div>\n","import {\n Component,\n Input,\n OnInit,\n Output,\n EventEmitter,\n OnDestroy,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\nimport { Subject, Subscription, takeUntil } from 'rxjs';\n\n// moment\nimport moment from 'moment';\n\n// services\nimport { CalendarDateTimePickerService } from '../../services/calendar-datetime-picker.service';\n\n// constants\nimport { RANGE, STARTING_YEAR } from '../../strategy/calendar-strategy';\nimport { CustomDatetimePickersConstants } from '../../utils/constants/custom-datetime-pickers.constants';\n\n// components\nimport { CaCustomDateTimePickerCalendarDatesMainComponent } from '../cai-custom-datetime-pickers-calendar-dates-main/cai-custom-datetime-pickers-calendar-dates-main.component';\nimport { CaCustomDateTimePickersCalendarLeftComponent } from '../cai-custom-datetime-pickers-calendar-left/cai-custom-datetime-pickers-calendar-left.component';\n\n// enums\nimport { CalendarListPreviewStringEnum } from '../../enums/calendar-list-preview-string.enum';\n\n@Component({\n selector: 'cai-custom-datetime-pickers-date-calendars',\n templateUrl: './cai-custom-datetime-pickers-date-calendars.component.html',\n styleUrls: ['./cai-custom-datetime-pickers-date-calendars.component.scss'],\n imports: [\n CommonModule,\n FormsModule,\n CaCustomDateTimePickerCalendarDatesMainComponent,\n CaCustomDateTimePickersCalendarLeftComponent,\n ],\n})\nexport class CaCustomDateTimePickersDateCalendarsComponent\n implements OnInit, OnDestroy\n{\n @Input() listPreview!: string;\n @Input() dateTime!: Date;\n @Input() isMonthAndYearOnly: boolean = false;\n @Output() setListPreviewValue = new EventEmitter();\n @Output() onRefocusInput = new EventEmitter();\n\n private currentYear: number = new Date().getFullYear();\n private currentMonth: number = new Date().getMonth();\n private activeMonth: number = 0;\n private subscription?: Subscription;\n private destroy$ = new Subject<void>();\n private monthNames: string[] = CustomDatetimePickersConstants.monthNames;\n public dayOfWeekLetters: string[] =\n CustomDatetimePickersConstants.dayOfWeekLetters;\n\n public activeIndex: number = 0;\n public currentIndex!: number;\n public currentYearIndex!: number;\n public monthYearsIndx: string[] = [];\n public months: Date[] = Array.from({ length: RANGE }, (_, i) => {\n const year = STARTING_YEAR + Math.floor(i / 12);\n const month = i % 12;\n if (year === this.currentYear && month === this.currentMonth) {\n this.currentIndex = i;\n this.activeIndex = i;\n }\n const sendDate = new Date(year, month, 1);\n this.monthYearsIndx.push(moment(sendDate).format('MM/DD/YY'));\n return sendDate;\n });\n\n public justYears: Date[] = Array.from({ length: 100 }, (_, i) => {\n const year = STARTING_YEAR + i;\n if (year === this.currentYear) this.currentYearIndex = i;\n\n return new Date(STARTING_YEAR + i, 1, 1);\n });\n\n public selectedYear!: number;\n public selectedMonth!: string;\n\n constructor(private calendarService: CalendarDateTimePickerService) {}\n\n ngOnInit(): void {\n this.initInitalState();\n this.initScrollListener();\n }\n\n public initScrollListener(): void {\n this.calendarService.scrolledIndexChange\n .pipe(takeUntil(this.destroy$))\n .subscribe((res: { indx: number }) => {\n this.activeIndex = res.indx;\n this.onMonthChange(res.indx);\n });\n }\n\n public initInitalState(): void {\n this.selectedMonth = this.monthNames[this.dateTime.getMonth()];\n this.selectedYear = this.dateTime.getFullYear();\n\n if (this.calendarService.selectedIndex)\n this.activeIndex = this.calendarService.selectedIndex;\n\n if (this.isMonthAndYearOnly)\n this.currentYearIndex = this.justYears.findIndex(\n (year) => year.getFullYear() === this.selectedYear,\n );\n }\n\n public onMonthChange(month: number): void {\n this.listPreview === CalendarListPreviewStringEnum.FULL_LIST\n ? (this.selectedYear = this.months[month].getFullYear())\n : (this.selectedYear = this.justYears[month].getFullYear());\n\n this.selectedMonth = this.monthNames[this.months[month].getMonth()];\n this.activeMonth = month;\n }\n\n public getMonth(index: number): string {\n return CustomDatetimePickersConstants.monthNames[index];\n }\n\n public setListPreview(event: Event): void {\n event?.stopPropagation();\n if (this.listPreview === CalendarListPreviewStringEnum.FULL_LIST) {\n this.setListPreviewValue.emit(CalendarListPreviewStringEnum.MONTH_LIST);\n this.calendarService.setAutoIndex = Math.floor(this.activeIndex / 12);\n }\n }\n\n public setListPreviewToFull(num: number): void {\n this.setListPreviewValue.emit(CalendarListPreviewStringEnum.FULL_LIST);\n this.setAutoIndex(num);\n }\n\n public setAutoIndex(num: number): void {\n this.calendarService.setAutoIndex = this.activeIndex * 12 + num;\n }\n\n public selectCurrentDay(event: Event): void {\n event?.stopPropagation();\n const new_date = moment(new Date()).format();\n this.calendarService.dateChanged.next(new_date);\n this.setListPreviewValue.emit(CalendarListPreviewStringEnum.FULL_LIST);\n }\n\n public refocusInput(event: Event): void {\n event?.stopPropagation();\n event?.preventDefault();\n this.onRefocusInput.emit(event);\n }\n\n ngOnDestroy() {\n if (this.subscription) this.subscription.unsubscribe();\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","<div\n class=\"d-flex\"\n (click)=\"$event.stopPropagation()\"\n (pointerdown)=\"refocusInput($event)\"\n (pointerup)=\"$event.stopPropagation()\"\n (touchstart)=\"$event.stopPropagation()\"\n (touchend)=\"$event.stopPropagation()\"\n>\n <div class=\"month-years-size\">\n <div class=\"calendar_border\"></div>\n <cai-custom-datetime-pickers-calendar-left\n [currentIndex]=\"currentIndex\"\n [currentYearIndex]=\"currentYearIndex\"\n [activeIndex]=\"activeIndex\"\n [months]=\"listPreview === 'full_list' ? months : justYears\"\n [listPreview]=\"listPreview\"\n [isMonthAndYearOnly]=\"isMonthAndYearOnly\"\n >\n </cai-custom-datetime-pickers-calendar-left>\n </div>\n <div class=\"full-calendars-list\">\n <div class=\"full_list\">\n <div class=\"calendar_view\">\n <div class=\"calendar_view_head\">\n <div class=\"month_name ta-font-bold\">\n <span (click)=\"setListPreview($event)\" class=\"year_hold\">\n @if (listPreview === \"full_list\") {\n <span>{{ selectedMonth }}</span>\n }\n {{ selectedYear }}\n </span>\n </div>\n <div class=\"today ta-font-bold\" (click)=\"selectCurrentDay($event)\">\n Today\n </div>\n </div>\n <div class=\"calendars_list_view\">\n <div\n class=\"calendar_month_days\"\n [class.hideVisibility]=\"listPreview != 'full_list'\"\n >\n @for (\n dayLetter of dayOfWeekLetters;\n let indx = $index;\n track indx\n ) {\n <div class=\"cal_day ta-font-bold\">\n {{ dayLetter }}\n </div>\n }\n </div>\n <cai-custom-datetime-pickers--calendar-dates-main\n [currentIndex]=\"currentIndex\"\n [currentYearIndex]=\"currentYearIndex\"\n [activeIndex]=\"activeIndex\"\n [monthYearsIndx]=\"monthYearsIndx\"\n [months]=\"listPreview === 'full_list' ? months : justYears\"\n [listPreview]=\"listPreview\"\n [dateTime]=\"dateTime\"\n [isMonthAndYearOnly]=\"isMonthAndYearOnly\"\n (setListPreviewToFull)=\"setListPreviewToFull($event)\"\n (setAutoIndex)=\"setAutoIndex($event)\"\n ></cai-custom-datetime-pickers--calendar-dates-main>\n </div>\n </div>\n </div>\n </div>\n</div>\n","export enum CalendarTypeStringEnum {\n TIME = 'time',\n}\n","export enum CalendarScrollTypeStringEnum {\n HOURS_SCROLL = 'hourScroll',\n PM_AM_SCROLL = 'pmAmScroll',\n}","export enum InputConfigNameStringEnum {\n DATE_PICKER = 'datepicker',\n TIME_PICKER = 'timepicker',\n DATE_PICKER_BANK_CARD = 'datepickerBankCard',\n INPUT_DROPDOWN_BANK_NAME = 'Input Dropdown Bank Name',\n ADDRESS = 'Address'\n } ","import {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnInit,\n Output,\n ViewChild,\n ViewContainerRef,\n OnDestroy,\n AfterViewInit,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\n// moment\nimport moment from 'moment';\n\n// services\nimport { CalendarDateTimePickerService } from './services/calendar-datetime-picker.service';\n\n// components\nimport { CaCustomDateTimePickersDateCalendarsComponent } from './components/cai-custom-datetime-pickers-date-calendars/cai-custom-datetime-pickers-date-calendars.component';\n\n// constants\nimport { CustomDatetimePickersConstants } from './utils/constants/custom-datetime-pickers.constants';\n\n// models\nimport { ScrollType } from './models/scroll-type.model';\n\n// enums\nimport { CalendarTypeStringEnum } from './enums/calendar-type-string.enum';\nimport { CalendarListPreviewStringEnum } from './enums/calendar-list-preview-string.enum';\nimport { CalendarScrollTypeStringEnum } from './enums/calendar-scroll-type-string.enum';\nimport { ICaInput } from './config';\nimport { InputConfigNameStringEnum } from './enums/config.enum';\n\n@Component({\n selector: 'cai-custom-datetime-pickers',\n templateUrl: './cai-custom-datetime-pickers.component.html',\n styleUrls: ['./cai-custom-datetime-pickers.component.scss'],\n imports: [\n CommonModule,\n FormsModule,\n CaCustomDateTimePickersDateCalendarsComponent,\n ],\n})\nexport class CaCustomDatetimePickersComponent\n implements OnInit, OnDestroy, AfterViewInit\n{\n private _dateTime!: Date;\n @Input()\n set dateTime(value: Date) {\n this._dateTime = value;\n // Update time value when dateTime changes\n if (this.hourScroll && this.minutesScroll && this.pmAmScroll) {\n this.setTimeValue();\n }\n }\n get dateTime(): Date {\n return this._dateTime;\n }\n\n @ViewChild('ref', { read: ViewContainerRef }) ref!: ViewContainerRef;\n public _inputConfig!: ICaInput;\n @Input() set inputConfig(config: ICaInput) {\n this._inputConfig = config;\n if (\n this._inputConfig.name === InputConfigNameStringEnum.DATE_PICKER_BANK_CARD\n )\n this.listPreview = CalendarListPreviewStringEnum.MONTH_LIST;\n\n if (this._inputConfig.minutesGapFive)\n this.timeMinutes = CustomDatetimePickersConstants.timeMinutesGapFive;\n else this.timeMinutes = CustomDatetimePickersConstants.timeMinutes;\n }\n\n @Output() closePopover: EventEmitter<Date> = new EventEmitter();\n\n @ViewChild(CaCustomDateTimePickersDateCalendarsComponent)\n dateCalendar!: CaCustomDateTimePickersDateCalendarsComponent;\n @ViewChild('pmAmScroll') pmAmScroll!: ElementRef;\n @ViewChild('minutesScroll') minutesScroll!: ElementRef;\n @ViewChild('hourScroll') hourScroll!: ElementRef;\n\n public selectedDateTime!: string;\n public calendarMainType!: string;\n public outputType!: (string | number)[];\n public currentYear: number = new Date().getFullYear();\n public currentMonth: number = new Date().getMonth();\n public currentDay: number = new Date().getDate();\n public listPreview: string = CalendarListPreviewStringEnum.FULL_LIST;\n public timeMinutes!: string[];\n public monthArray: number[] = new Array(12)\n .fill(0)\n .map((_, indx) => indx + 1);\n public monthDayList: number[] = new Array(31)\n .fill(0)\n .map((_, indx) => indx + 1);\n public yearsList: (string | number)[] = new Array(100)\n .fill(0)\n .map((_, idx) => (idx < 10 ? '0' + idx : idx));\n public scrollTimer!: ReturnType<typeof setTimeout> | number;\n public hoveredItem!: string | null;\n public isInputFocus!: boolean;\n public monthNames: string[] = CustomDatetimePickersConstants.monthNames;\n public hourTimes: number[] = CustomDatetimePickersConstants.hourTimes;\n public scrollTypes: ScrollType =\n CustomDatetimePickersConstants.defaultScrollTypes;\n public selectedTime: string =\n CustomDatetimePickersConstants.defaultSelectedTime;\n public timeOfDay: string[] = CustomDatetimePickersConstants.timeOfDay;\n\n public previousRangeSide!: boolean;\n\n constructor(private calendarService: CalendarDateTimePickerService) {}\n\n @Input()\n set calendarType(calendarType: string) {\n this.calendarMainType = calendarType;\n if (calendarType === CalendarTypeStringEnum.TIME)\n this.outputType = CustomDatetimePickersConstants.defaultOutputTypeTime;\n else this.outputType = CustomDatetimePickersConstants.defaultOutputTypeDate;\n }\n\n @Input()\n set placeholder(placeholder: string) {\n this.selectedDateTime = placeholder;\n }\n\n @Output() onRefocusInput: EventEmitter<Event> = new EventEmitter();\n\n ngOnInit(): void {\n this.initDateChangedListener();\n }\n\n ngAfterViewInit(): void {\n this.setTimeValue();\n this.changeOpened();\n }\n\n public initDateChangedListener(): void {\n this.calendarService.dateChanged.subscribe((date) => {\n if (this.calendarMainType !== CalendarTypeStringEnum.TIME) {\n this.outputType[0] = date[0];\n this.outputType[2] = date[1];\n this.outputType[4] = date[2];\n this.selectedDateTime = this.createStringFromOutput();\n }\n });\n }\n\n public setTimeValue() {\n const dateInputArray = moment(this.dateTime).format('h/mm/A').split('/');\n\n // console.log(dateInputArray, 'this.inputConfig');\n\n setTimeout(() => {\n this.scrollTypes.hourScroll = this.hourTimes.indexOf(\n parseInt(dateInputArray[0]),\n );\n this.scrollTypes.minutesScroll = this.timeMinutes.indexOf(\n dateInputArray[1],\n );\n\n this.scrollTypes.pmAmScroll = dateInputArray[2] === 'AM' ? 0 : 1;\n\n // Update scroll positions if elements exist\n if (this.hourScroll) {\n this.hourScroll.nativeElement.scrollTop =\n this.scrollTypes.hourScroll * 22;\n }\n if (this.minutesScroll) {\n this.minutesScroll.nativeElement.scrollTop =\n this.scrollTypes.minutesScroll * 22;\n }\n if (this.pmAmScroll) {\n this.pmAmScroll.nativeElement.scrollTop =\n this.scrollTypes.pmAmScroll * 22;\n }\n\n // Update the selectedTime display\n this.checkForScrolledType('hourScroll');\n });\n }\n\n public setListPreview(value: string): void {\n this.listPreview = value;\n }\n\n public inputInFocus(): void {\n this.isInputFocus = true;\n }\n\n public inputBlur(): void {\n this.isInputFocus = false;\n }\n\n public refocusInput(event: Event): void {\n event?.stopPropagation();\n event?.preventDefault();\n this.onRefocusInput.emit(event);\n }\n\n public changeOpened(): void {\n // this.isInputFocus = e;\n // if (e) {\n if (this.calendarMainType === CalendarTypeStringEnum.TIME) {\n setTimeout(() => {\n this.hourScroll.nativeElement.scrollTop =\n this.scrollTypes.hourScroll * 22;\n this.minutesScroll.nativeElement.scrollTop =\n this.scrollTypes.minutesScroll * 22;\n this.pmAmScroll.nativeElement.scrollTop =\n this.scrollTypes.pmAmScroll * 22;\n });\n } else {\n let test = `${\n this.dateTime.getMonth() + 1\n }/${this.dateTime.getDate()}/${this.dateTime.getFullYear()}`;\n\n this.calendarService.scrollToDate.next(\n `${\n this.dateTime.getMonth() + 1\n }/${this.dateTime.getDate()}/${this.dateTime.getFullYear()}`,\n );\n }\n }\n\n public setTime(event: Event): void {\n event?.stopPropagation();\n this.outputType[0] = this.hourTimes[this.scrollTypes.hourScroll];\n this.outputType[2] = this.timeMinutes[this.scrollTypes.minutesScroll];\n this.outputType[4] = this.timeOfDay[this.scrollTypes.pmAmScroll];\n\n this.selectedDateTime = this.createStringFromOutput();\n\n let currentDate = moment().format('MM/DD/YYYY');\n\n // this.calendarService.dateChanged.next(\n // new Date(currentDate + ' ' + this.selectedDateTime)\n // );\n\n this.closePopover.emit(new Date(currentDate + ' ' + this.selectedDateTime));\n }\n\n public setDefaultTime(event: Event): void {\n event?.stopPropagation();\n let currentDate = moment().format('MM/DD/YYYY');\n //this.calendarService.dateChanged.next(new Date(currentDate + ' 08:00'));\n\n this.closePopover.emit(new Date(currentDate + ' 08:00'));\n }\n\n public closePopup(event: Event): void {\n event?.stopPropagation();\n this.closePopover.emit();\n }\n\n public createStringFromOutput(): string {\n return this.outputType.join('');\n }\n\n public onScroll(\n event: Event,\n type: keyof ScrollType,\n index: number | null = null,\n ): void {\n const scrolFromTop = Math.floor((event.target as HTMLElement).scrollTop);\n const scrollIndex = index === null ? Math.floor(scrolFromTop / 22) : index;\n const scrollRemaining = scrolFromTop % 22;\n clearInterval(this.scrollTimer);\n this.scrollTimer = setTimeout(() => {\n if (scrollRemaining < 11 && index === null) {\n (event.target as HTMLElement).scrollTop = scrollIndex * 22;\n this.scrollTypes[type] = scrollIndex;\n } else if (index !== null) {\n (<HTMLElement>(<HTMLElement>event.target).parentNode).scrollTop =\n scrollIndex * 22;\n this.scrollTypes[type] = scrollIndex;\n } else {\n (event.target as HTMLElement).scrollTop = (scrollIndex + 1) * 22;\n this.scrollTypes[type] = scrollIndex + 1;\n }\n\n this.checkForScrolledType(type);\n }, 200);\n }\n\n public checkForScrolledType(type: string): void {\n if (type === CalendarScrollTypeStringEnum.HOURS_SCROLL && this.pmAmScroll) {\n if (this.scrollTypes[type] >= 12) {\n this.pmAmScroll.nativeElement.scrollTop = 22;\n this.scrollTypes.pmAmScroll = 1;\n } else {\n this.pmAmScroll.nativeElement.scrollTop = 0;\n this.scrollTypes.pmAmScroll = 0;\n }\n }\n\n if (type === CalendarScrollTypeStringEnum.PM_AM_SCROLL && this.hourScroll) {\n if (this.scrollTypes[type] === 0) {\n if (this.scrollTypes.hourScroll >= 12) {\n this.hourScroll.nativeElement.scrollTop =\n (this.scrollTypes.hourScroll - 12) * 22;\n this.scrollTypes.hourScroll = Math.floor(\n this.scrollTypes.hourScroll - 12,\n );\n }\n } else {\n if (this.scrollTypes.hourScroll < 12) {\n this.hourScroll.nativeElement.scrollTop =\n (this.scrollTypes.hourScroll + 12) * 22;\n this.scrollTypes.hourScroll = Math.floor(\n this.scrollTypes.hourScroll + 12,\n );\n }\n }\n }\n\n this.selectedTime = this.timeMinutes[this.scrollTypes.minutesScroll]\n ? `${this.hourTimes[this.scrollTypes.hourScroll]}:${\n this.timeMinutes[this.scrollTypes.minutesScroll]\n } ${this.timeOfDay[this.scrollTypes.pmAmScroll]}`\n : '';\n }\n\n ngOnDestroy() {\n this.listPreview = CalendarListPreviewStringEnum.FULL_LIST;\n }\n}\n","<div class=\"temp_inp_holder\" (pointerdown)=\"refocusInput($event)\">\n <div>\n <div class=\"pickers_holder dark_picker\">\n @if (calendarMainType === \"date\") {\n <div class=\"date_picker\">\n <cai-custom-datetime-pickers-date-calendars\n [listPreview]=\"listPreview\"\n [dateTime]=\"dateTime\"\n [isMonthAndYearOnly]=\"_inputConfig.name === 'datepickerBankCard'\"\n (setListPreviewValue)=\"setListPreview($event)\"\n (onRefocusInput)=\"refocusInput($event)\"\n ></cai-custom-datetime-pickers-date-calendars>\n </div>\n }\n @if (calendarMainType === \"time\") {\n <div class=\"time_picker\">\n <div class=\"time_picker_head d-flex\">\n <div class=\"selected_time ta-font-bold\">\n {{ selectedTime || (dateTime | date: \"hh:mm aa\") }}\n </div>\n <div class=\"sel_now ta-font-bold\" (click)=\"setDefaultTime($event)\">\n Default\n </div>\n </div>\n <div class=\"time_picker_body\">\n <div class=\"picker_body_head\">\n <div\n class=\"ta-font-bold\"\n [class.active]=\"hoveredItem === 'hours'\"\n >\n Hour\n </div>\n <div\n class=\"ta-font-bold\"\n [class.active]=\"hoveredItem === 'minutes'\"\n >\n Minute\n </div>\n <div\n class=\"ta-font-bold\"\n [class.active]=\"hoveredItem === 'times'\"\n >\n AM/PM\n </div>\n </div>\n <div class=\"picker_body\">\n <div\n #hourScroll\n (mouseout)=\"hoveredItem = null\"\n (mouseover)=\"hoveredItem = 'hours'\"\n (scroll)=\"onScroll($event, 'hourScroll')\"\n class=\"scroll_pickers\"\n [tabindex]=\"-1\"\n >\n @for (hour of hourTimes; let indx = $index; track indx) {\n <div\n class=\"scroll_item ta-font-medium\"\n [ngClass]=\"{\n 'active_item ta-font-bold':\n scrollTypes.hourScroll === indx,\n }\"\n (click)=\"onScroll($event, 'hourScroll', indx)\"\n >\n {{ hour }}\n </div>\n }\n </div>\n <div\n #minutesScroll\n (mouseout)=\"hoveredItem = null\"\n (mouseover)=\"hoveredItem = 'minutes'\"\n (scroll)=\"onScroll($event, 'minutesScroll')\"\n class=\"scroll_pickers\"\n [tabindex]=\"-1\"\n >\n @for (minutes of timeMinutes; let indx = $index; track indx) {\n <div\n class=\"scroll_item ta-font-medium\"\n [ngClass]=\"{\n 'active_item ta-font-bold':\n scrollTypes.minutesScroll === indx,\n }\"\n (click)=\"onScroll($event, 'minutesScroll', indx)\"\n >\n {{ minutes }}\n </div>\n }\n </div>\n <div\n #pmAmScroll\n (mouseout)=\"hoveredItem = null\"\n (mouseover)=\"hoveredItem = 'times'\"\n (scroll)=\"onScroll($event, 'pmAmScroll')\"\n class=\"scroll_pickers\"\n [tabindex]=\"-1\"\n >\n @for (when of timeOfDay; let indx = $index; track indx) {\n <div\n class=\"scroll_item ta-font-medium\"\n [ngClass]=\"{\n 'active_item ta-font-bold':\n scrollTypes.pmAmScroll === indx,\n }\"\n (click)=\"onScroll($event, 'pmAmScroll', indx)\"\n >\n {{ when }}\n </div>\n }\n </div>\n <div class=\"picker_line\">\n <span class=\"border_line\"></span>\n <span class=\"border_line line_2\"></span>\n </div>\n </div>\n <div class=\"picker_buttons\">\n <div\n (click)=\"closePopup($event)\"\n class=\"pick_button ta-font-bold\"\n >\n Cancel\n </div>\n <div\n (click)=\"setTime($event)\"\n class=\"pick_button set_button ta-font-bold\"\n >\n Set\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n</div>\n","export enum InputConfigNameStringEnum {\n DATE_PICKER = 'datepicker',\n TIME_PICKER = 'timepicker',\n DATE_PICKER_BANK_CARD = 'datepickerBankCard',\n INPUT_DROPDOWN_BANK_NAME = 'Input Dropdown Bank Name',\n ADDRESS = 'Address'\n}","export enum eGeneralActions {\n ADD = 'Add',\n ADD_LOWERCASE = 'add',\n ADD_NEW_ITEM = 'Add New Item',\n UPDATE = 'Update',\n UPDATE_LOWERCASE = 'update',\n DELETE = 'Delete',\n DELETE_LOWERCASE = 'delete',\n EDIT = 'Edit',\n EDIT_LOWERCASE = 'edit',\n EDIT_UPPERCASE = 'EDIT',\n\n SAVE = 'Save',\n SAVE_LOWERCASE = 'save',\n CANCEL = 'Cancel',\n CANCEL_LOWERCASE = 'cancel',\n ENTER = 'Enter',\n ESCAPE = 'Escape',\n CONFIRM = 'Confirm',\n CONFIRM_LOWERCASE = 'confirm',\n SET = 'Set',\n SET_LOWERCASE = 'set',\n REMOVE = 'Remove',\n REMOVE_LOWERCASE = 'remove',\n\n SELECT = 'Select',\n SELECT_LOWERCASE = 'select',\n SEARCH = 'Search',\n SEARCH_LOWERCASE = 'search',\n\n SELECT_ALL = 'Select All',\n SELECT_REMAINING = 'Select Remaining',\n CLEAR_SELECTED = 'Clear Selected',\n\n ACTIVATE = 'Activate',\n ACTIVATE_LOWERCASE = 'activate',\n DEACTIVATE = 'deactivate',\n DEACTIVATE_LOWERCASE = 'deactivate',\n\n CLOSE = 'Close',\n CLOSE_LOWERCASE = 'close',\n CLOSE_UPPERCASE = 'CLOSE',\n OPEN = 'Open',\n OPEN_LOWERCASE = 'open',\n\n NEXT = 'Next',\n NEXT_LOWERCASE = 'next',\n PREVIOUS = 'Previous',\n PREVIOUS_LOWERCASE = 'previous',\n\n CLEAR = 'Clear',\n CLEAR_LOWERCASE = 'clear',\n CLEAR_ALL = 'Clear All',\n\n SHOW_MORE = 'show more',\n\n OPEN_MODAL = 'open-modal',\n\n EXPAND = 'Expand',\n EXPAND_LOWERCASE = 'expand',\n EXPAND_UPPERCASE = 'EXPAND',\n\n COLLAPSE = 'Collapse',\n COLLAPSE_LOWERCASE = 'collapse',\n COLLAPSE_UPPERCASE = 'COLLAPSE',\n\n SORT_BY = 'Sort By',\n\n COPY = 'Copy',\n COPIED = 'Copied',\n}\n","import {\n AfterViewInit,\n Component,\n computed,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n Self,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormsModule,\n NgControl,\n ReactiveFormsModule,\n Validators,\n} from '@angular/forms';\nimport { CommonModule } from '@angular/common';\n\n// Imports\nimport moment from 'moment';\nimport { NgbModule, NgbPopover, NgbTooltip } from '@ng-bootstrap/ng-bootstrap';\nimport { Subject, takeUntil } from 'rxjs';\nimport { AngularSvgIconModule } from 'angular-svg-icon';\n\n// Pipes\nimport { ErrorMessagePipe } from '../input/pipes/error-message.pipe';\n\n// Components\nimport { CaCustomDatetimePickersComponent } from './components/cai-custom-datetime-pickers/cai-custom-datetime-pickers.component';\n\n// Enums\nimport { InputConfigNameStringEnum } from './enums/input-config-name-string.enum';\nimport { eGeneralActions } from '../../enums/general-actions.enum';\n\n// Services\nimport { CalendarDateTimePickerService } from './components/cai-custom-datetime-pickers/services/calendar-datetime-picker.service';\n\n// Models\nimport { CaiDateTimeConfig } from './interfaces/input-datetime.interface';\nimport { KeyboardNavigationHelper } from '../input/utilities/helpers/keyboard-navigation.helper';\n\n// Types\nexport type InputChangeValue = string | number | Date;\n\n@Component({\n selector: 'cai-input-datetime-picker',\n templateUrl: './cai-input-datetime-picker.component.html',\n styleUrls: ['./cai-input-datetime-picker.component.scss'],\n imports: [\n // modules\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n AngularSvgIconModule,\n NgbModule,\n // components\n CaCustomDatetimePickersComponent,\n // pipes\n ErrorMessagePipe,\n ],\n providers: [CalendarDateTimePickerService],\n})\nexport class CaiInputDatetimePickerComponent\n implements AfterViewInit, ControlValueAccessor, OnDestroy\n{\n @Input() id: string = '';\n @Input() inputConfig!: CaiDateTimeConfig;\n @Input() formFormat?: string;\n\n @Output('clear') clearInputEvent: EventEmitter<boolean> =\n new EventEmitter<boolean>();\n @Output('blurInput') blurInputEvent: EventEmitter<boolean> =\n new EventEmitter<boolean>();\n\n @ViewChild('dateTimePopover') dateTimePopover!: NgbPopover;\n @ViewChild('t2') t2!: NgbPopover;\n\n public showDateInput: boolean = false;\n public dateTimeInputDate: Date = new Date();\n public dateTimeIntDate: Date = new Date();\n public selectionInput: number = -1;\n\n // Timers\n private dateTimeMainTimer!: ReturnType<typeof setTimeout> | number;\n private focusBlur!: ReturnType<typeof setTimeout> | number;\n private timeoutCleaner!: ReturnType<typeof setTimeout> | number;\n\n private justEnteredDatePicker: boolean = false;\n\n // Component properties\n public eGeneralActions = eGeneralActions;\n public isTouchedInput: boolean = false;\n public isFocusInput: boolean = false;\n public preventBlur: boolean = false;\n public valueAfterWriteValue!: string;\n // Date\n public newInputChanged: boolean = false;\n\n public isDisabled = computed(\n () => this.inputConfig.isDisabled || this.getSuperControl?.disabled,\n );\n\n // Outputs\n @Output() selectLastOneForSelectionEmitter = new EventEmitter<boolean>();\n @Output() selectLastOneAfterMouseUpEmitter = new EventEmitter<boolean>();\n @Output() onDatePasteEmitter = new EventEmitter<ClipboardEvent>();\n @Output() onFocusEmitter = new EventEmitter<FocusEvent>();\n @Output() changeSelectionEmmiter = new EventEmitter<{\n e: KeyboardEvent;\n noPreventDefault: boolean;\n }>();\n @Output() setSelectionEmmiter = new EventEmitter<{\n preventDefault: () => void;\n stopPropagation: () => void;\n target: any;\n }>();\n\n // View Children\n @ViewChild('span1', { static: true }) span1!: ElementRef;\n @ViewChild('span2', { static: true }) span2!: ElementRef;\n @ViewChild('span3', { static: true }) span3!: ElementRef;\n @ViewChild('holder1', { static: true }) holder1!: ElementRef;\n @ViewChild('closeTooltip') closeTooltip!: NgbTooltip;\n\n // Private\n private destroy$: Subject<void> = new Subject<void>();\n\n constructor(\n @Self() public superControl: NgControl,\n private calendarService: CalendarDateTimePickerService,\n ) {\n this.superControl.valueAccessor = this;\n }\n\n ngOnInit(): void {}\n\n // Control Value Accessor\n public registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n public isPopoverShown: boolean = false;\n\n public onChange(_: InputChangeValue): void {}\n\n public onTouched = (): void => {};\n\n public writeValue(obj: InputChangeValue): void {\n if (obj) this.setTimeDateInput(obj, true);\n }\n\n public registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n public blurInput(): void {\n this.isFocusInput = false;\n this.isPopoverShown = false;\n this.t2.close();\n this.onTouched();\n this.blurInputEvent.emit(true);\n // Datepicker\n this.focusBlur = setTimeout(() => {\n this.blurOnDateTime();\n }, 0);\n }\n\n public preventInput(event: Event): void {\n // Prevent any text from appearing in the contenteditable div\n event.preventDefault();\n // Clear any content that might have been added\n if (this.holder1?.nativeElement) {\n this.holder1.nativeElement.textContent = '';\n }\n }\n\n public ngAfterViewInit(): void {\n if (this.valueAfterWriteValue) {\n this.setTimeDateInput(this.valueAfterWriteValue);\n } else {\n this.setTimePickerTime();\n }\n\n this.calendarService.dateChanged\n .pipe(takeUntil(this.destroy$))\n .subscribe((date) => {\n if (!this.inputConfig.isDisabled) {\n this.setTimeDateInput(date);\n this.t2.close();\n }\n });\n }\n\n get getSuperControl() {\n return this.superControl.control;\n }\n\n get isRequired() {\n return this.getSuperControl?.hasValidator(Validators.required);\n }\n\n // 05/05/2025\n public onDatePaste(event: ClipboardEvent): void {\n event.preventDefault();\n\n const pasteText = event.clipboardData?.getData('text')?.trim() as string;\n this.processPastedDate(pasteText);\n }\n\n private processPastedDate(pasteText: string): void {\n // Only process if it's a date picker (not time picker)\n if (\n this.inputConfig.name !== InputConfigNameStringEnum.DATE_PICKER &&\n this.inputConfig.name !==\n InputConfigNameStringEnum.DATE_PICKER_BANK_CARD &&\n this.isFocusInput\n ) {\n return;\n }\n\n // Try to parse mm/dd/yy format first\n const mmddyyRegex = /^(\\d{1,2})\\/(\\d{1,2})\\/(\\d{2,4})$/;\n const match = pasteText.match(mmddyyRegex);\n\n if (match) {\n const [_, month, day, year] = match;\n\n // Convert 2-digit year to 4-digit year\n let fullYear = parseInt(year);\n if (year.length === 2) {\n // Years 00-31 are 2000-2031, years 32-99 are 1932-1999\n fullYear =\n parseInt(year) > 31 ? 1900 + parseInt(year) : 2000 + parseInt(year);\n }\n\n // Create date object (month is 0-indexed in JS)\n const pastedDate = new Date(fullYear, parseInt(month) - 1, parseInt(day));\n\n // Validate the date is valid\n if (\n !isNaN(pastedDate.getTime()) &&\n pastedDate.getMonth() === parseInt(month) - 1 &&\n pastedDate.getDate() === parseInt(day)\n ) {\n this.setTimeDateInput(pastedDate);\n this.selectSpanByTabIndex(this.selectionInput);\n this.t2.close();\n this.blurInputEvent.emit(true);\n }\n }\n }\n\n changeSelection(e: any, noPreventDefault = false): void {\n const isPasting = (e.ctrlKey || e.metaKey) && e.key?.toLowerCase() === 'v';\n\n if (e.key === 'Escape') {\n this.justEnteredDatePicker = false;\n this.holder1.nativeElement.blur();\n return;\n }\n\n if (isPasting) {\n return;\n }\n\n // Tab is 9\n if (\n e.keyCode == 37 ||\n e.keyCode == 38 ||\n e.keyCode == 39 ||\n e.keyCode == 40 ||\n e.keyCode == 8 ||\n e.keyCode == 9 ||\n e.keyCode == 46 ||\n (this.selectionInput == 3 && this.inputConfig.name === 'timepicker')\n ) {\n // Determine the last selectable segment index based on input type\n const lastSegmentIndex =\n this.inputConfig.name === 'datepickerBankCard' ? 1 : 2;\n\n // Check if Tab/Shift+Tab should be allowed to navigate away\n const isTabAtEnd =\n e.keyCode == 9 &&\n !e.shiftKey &&\n this.selectionInput == lastSegmentIndex;\n const isShiftTabAtStart =\n e.keyCode == 9 && e.shiftKey && this.selectionInput == 0;\n const shouldAllowTabNavigation = isTabAtEnd || isShiftTabAtStart;\n\n // Prevent default and stop propagation unless we're allowing tab navigation\n if (!shouldAllowTabNavigation) {\n !e.noPrevent && e.preventDefault();\n e.stopPropagation();\n }\n\n if (e.keyCode == 37) {\n this.selectionInput =\n this.selectionInput <= 0 ? 0 : this.selectionInput - 1;\n this.selectSpanByTabIndex(this.selectionInput, true);\n } else if (e.keyCode == 39 || e.keyCode == 9) {\n if (\n ((this.inputConfig.name === 'datepickerBankCard' &&\n this.selectionInput != 1) ||\n (this.inputConfig.name !== 'datepickerBankCard' &&\n this.selectionInput != 2)) &&\n !e.shiftKey\n ) {\n this.selectionInput = this.selectionInput + 1;\n this.selectSpanByTabIndex(this.selectionInput, true);\n } else if (e.keyCode == 9 && !e.shiftKey) {\n // Tab at the end - reset selection and allow default navigation\n this.selectionInput = -1;\n } else if (e.shiftKey && e.keyCode == 9 && this.selectionInput != 0) {\n if (this.selectionInput == -1) {\n this.selectionInput = 3;\n }\n this.selectionInput = this.selectionInput - 1;\n this.selectSpanByTabIndex(this.selectionInput);\n } else if (e.shiftKey && e.keyCode == 9 && this.selectionInput == 0) {\n // Shift+Tab at the start - reset selection and allow default navigation\n this.selectionInput = -1;\n }\n } else if (e.keyCode == 38) {\n this.setDateTimeModel('up');\n } else if (e.keyCode == 40) {\n this.setDateTimeModel('down');\n } else if (e.keyCode == 8 || e.keyCode == 46) {\n this.handleKeyboardInputs(e, true);\n }\n } else if (!this.isNumber(e)) {\n if (!noPreventDefault) {\n e.preventDefault();\n e.stopPropagation();\n }\n } else {\n if (!noPreventDefault) {\n e.preventDefault();\n e.stopPropagation();\n }\n if (this.selectionInput == -1) {\n this.selectionInput = 0;\n }\n\n this.handleKeyboardInputs(e);\n }\n }\n\n public changeSelectionTwo(\n event: KeyboardEvent,\n noPreventDefault = false,\n ): void {\n if (!noPreventDefault) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n const isNavigationKey = this.isNavigationKey(event);\n const isSpecialTimePickerKey =\n this.selectionInput === 3 &&\n this.inputConfig.name === InputConfigNameStringEnum.TIME_PICKER;\n\n if (isNavigationKey || isSpecialTimePickerKey) {\n event.preventDefault();\n this.handleNavigationKey(event);\n } else if (!this.isNumber(event)) {\n if (!noPreventDefault) event.preventDefault();\n else {\n if (!noPreventDefault) event.preventDefault();\n\n if (this.selectionInput === -1) this.selectionInput = 0;\n this.handleKeyboardInputs(event);\n }\n }\n }\n\n private isNumber(evt: KeyboardEvent): boolean {\n evt = evt ? evt : (window.event as KeyboardEvent);\n let charCode = evt.which ? evt.which : evt.keyCode;\n return (\n (charCode >= 48 && charCode <= 57) || (charCode >= 96 && charCode <= 105)\n );\n }\n\n private isNavigationKey(e: KeyboardEvent): boolean {\n const navigationKeys = [37, 38, 39, 40, 8, 9, 46]; // Arrow keys, Backspace, Tab, Delete\n return navigationKeys.includes(e.keyCode);\n }\n\n public onFocus(event?: FocusEvent): void {\n this.onFocusEmitter.emit(event);\n }\n\n public closePopover(date: Date): void {\n if (date) {\n this.setTimeDateInput(date);\n }\n this.t2?.close();\n this.blurInputEvent.emit(true);\n }\n\n public handleFocusInput(e: Event) {\n const event = e as FocusEvent;\n\n if (!this.isDisabled()) {\n clearTimeout(this.dateTimeMainTimer);\n clearTimeout(this.focusBlur);\n this.showDateInput = true;\n if (\n (this.selectionInput === -1 &&\n (event?.target as HTMLElement)?.nodeName === 'INPUT') ||\n (event?.relatedTarget as HTMLElement)?.nodeName === 'INPUT' ||\n event?.relatedTarget === null\n ) {\n this.preventBlur = true;\n this.holder1.nativeElement.focus();\n this.setSpanSelection(this.holder1.nativeElement);\n this.selectionInput = -1;\n }\n\n this.t2.toggle();\n }\n }\n\n public setSpanSelection(element: Node): void {\n let range: Range;\n let selection: Selection | null;\n\n if (window.getSelection && document.createRange) {\n selection = window.getSelection();\n range = document.createRange();\n range.selectNodeContents(element);\n selection?.removeAllRanges();\n selection?.addRange(range);\n }\n }\n\n public setSelection(event: {\n preventDefault: () => void;\n stopPropagation: () => void;\n target: any;\n }): void {\n const element = event.target;\n\n const selectionInput = parseInt(element.getAttribute('tabindex'));\n\n const currentSelection = window.getSelection();\n\n if (currentSelection && currentSelection.toString().length > 10) {\n this.holder1.nativeElement.focus();\n this.selectionInput = 0;\n this.setSpanSelection(this.holder1.nativeElement);\n clearTimeout(this.dateTimeMainTimer);\n clearTimeout(this.focusBlur);\n return;\n }\n\n clearTimeout(this.dateTimeMainTimer);\n if (element.classList.contains('main')) {\n this.selectionInput = selectionInput;\n this.setSpanSelection(element);\n } else {\n if (this.selectionInput === -1) {\n this.holder1.nativeElement.focus();\n this.selectionInput = 0;\n this.setSpanSelection(this.span1.nativeElement);\n } else {\n event.preventDefault();\n this.selectSpanByTabIndex(this.selectionInput);\n }\n }\n }\n\n // BLUR ON INPUT\n public blurOnDateTime(): void {\n clearTimeout(this.dateTimeMainTimer);\n this.dateTimeMainTimer = setTimeout(() => {\n if (this.inputConfig.name === InputConfigNameStringEnum.DATE_PICKER) {\n if (\n !isNaN(this.span1?.nativeElement.innerHTML) &&\n !isNaN(this.span2?.nativeElement.innerHTML) &&\n !isNaN(this.span3?.nativeElement.innerHTML)\n ) {\n this.calendarService.dateChanged.next(this.dateTimeInputDate);\n\n if (this.justEnteredDatePicker) {\n requestAnimationFrame(() => {\n KeyboardNavigationHelper.focusNextInput(this.holder1);\n });\n }\n this.justEnteredDatePicker = false;\n } else {\n this.span1.nativeElement.innerHTML = 'mm';\n this.span2.nativeElement.innerHTML = 'dd';\n this.span3.nativeElement.innerHTML = 'yy';\n this.dateTimeInputDate = new Date();\n this.showDateInput = false;\n this.clearInput();\n this.justEnteredDatePicker = false;\n }\n } else if (\n this.inputConfig.name ===\n InputConfigNameStringEnum.DATE_PICKER_BANK_CARD\n ) {\n if (\n !isNaN(this.span1.nativeElement.innerHTML) &&\n !isNaN(this.span2.nativeElement.innerHTML)\n ) {\n this.calendarService.dateChanged.next(this.dateTimeInputDate);\n if (this.justEnteredDatePicker) {\n requestAnimationFrame(() => {\n KeyboardNavigationHelper.focusNextInput(this.holder1);\n });\n }\n this.justEnteredDatePicker = false;\n } else {\n this.span1.nativeElement.innerHTML = 'mm';\n this.span2.nativeElement.innerHTML = 'yy';\n this.dateTimeInputDate = new Date();\n this.showDateInput = false;\n this.clearInput();\n this.justEnteredDatePicker = false;\n }\n } else {\n if (\n !isNaN(this.span1.nativeElement.innerHTML) &&\n !isNaN(this.span2.nativeElement.innerHTML)\n ) {\n this.calendarService.dateChanged.next(this.dateTimeInputDate);\n if (this.justEnteredDatePicker) {\n requestAnimationFrame(() => {\n KeyboardNavigationHelper.focusNextInput(this.holder1);\n });\n }\n this.justEnteredDatePicker = false;\n } else {\n this.span1.nativeElement.innerHTML = 'HH';\n this.span2.nativeElement.innerHTML = 'MM';\n this.setTimePickerTime();\n this.showDateInput = false;\n this.clearInput();\n this.justEnteredDatePicker = false;\n }\n }\n\n // Clear the timer reference after it's executed\n this.dateTimeMainTimer = 0;\n this.selectionInput = -1;\n this.newInputChanged = true;\n }, 0);\n }\n\n public onEditableFocus(event: FocusEvent): void {\n if (this.isDisabled()) {\n event.preventDefault();\n event.stopPropagation();\n\n this.holder1.nativeElement.blur();\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n if (this.isFocusInput) return;\n\n this.onPopoverClick();\n }\n\n public onPopoverClick(event?: MouseEvent): void {\n if (this.isDisabled()) return;\n\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n this.isFocusInput = true;\n clearTimeout(this.dateTimeMainTimer);\n clearTimeout(this.focusBlur);\n this.holder1.nativeElement.focus();\n this.selectionInput = -1;\n this.setSpanSelection(this.holder1.nativeElement);\n }\n\n public onPopoverShown(): void {\n this.isPopoverShown = true;\n }\n\n public onPopoverHidden(): void {\n this.isPopoverShown = false;\n }\n\n public setTimeDateInput(date: InputChangeValue, hasValue?: boolean): void {\n let text, dateFormat, timeFormat;\n if (this.inputConfig.name === InputConfigNameStringEnum.DATE_PICKER) {\n text = moment(new Date(date)).format('MM/DD/YY');\n dateFormat = text.split('/');\n } else if (\n this.inputConfig.name === InputConfigNameStringEnum.DATE_PICKER_BANK_CARD\n ) {\n text = moment(new Date(date)).format('MM/DD/YY');\n dateFormat = text.split('/');\n } else {\n date =\n date instanceof Date\n ? date\n : new Date(moment().format('MM/DD/YYYY') + ' ' + date);\n text = moment(new Date(date)).format('HH:mm');\n\n timeFormat = moment(new Date(date)).format('hh/mm/A');\n dateFormat = timeFormat.split('/');\n }\n\n if (this.formFormat) {\n const newFormFormat = moment(new Date(date)).format(this.formFormat);\n this.valueAfterWriteValue = newFormFormat;\n text = newFormFormat;\n }\n\n // When called from writeValue, always store the value to prevent reset in ngAfterViewInit\n if (hasValue && !this.valueAfterWriteValue) {\n this.valueAfterWriteValue = text;\n }\n\n if (!hasValue) {\n this.onChange(text);\n // Mark as touched when user changes the value\n this.markAsTouched();\n }\n this.setIsFocusInput(false);\n\n // HAS TO BE IN TIMEOUT BECAUSE OF ANGULAR STACK\n setTimeout(() => {\n if (this.span1) this.span1.nativeElement.innerHTML = dateFormat[0];\n\n if (this.span2)\n if (\n this.inputConfig.name !==\n InputConfigNameStringEnum.DATE_PICKER_BANK_CARD\n ) {\n this.span2.nativeElement.innerHTML = dateFormat[1];\n this.span3.nativeElement.innerHTML = dateFormat[2];\n } else {\n this.span2.nativeElement.innerHTML = dateFormat[2];\n }\n }, 0);\n\n if (date) {\n this.dateTimeInputDate = new Date(date);\n }\n this.showDateInput = true;\n }\n\n private markAsTouched(): void {\n if (this.getSuperControl && !this.getSuperControl.touched) {\n this.onTouched();\n }\n }\n\n public handleKeyboardInputs(e: KeyboardEvent, isRestart?: boolean): void {\n const spanOneValue: number | undefined =\n isNaN(this.span1.nativeElement.innerHTML) || this.newInputChanged\n ? undefined\n : parseInt(this.span1.nativeElement.innerHTML);\n const span2Value: number | undefined =\n isNaN(this.span2.nativeElement.innerHTML) || this.newInputChanged\n ? undefined\n : parseInt(this.span2.nativeElement.innerHTML);\n\n let span3Value: string | number | undefined;\n\n if (\n this.inputConfig.name !== InputConfigNameStringEnum.DATE_PICKER_BANK_CARD\n ) {\n span3Value =\n isNaN(this.span3.nativeElement.innerHTML) || this.newInputChanged\n ? ''\n : parseInt(this.span3.nativeElement.innerHTML);\n }\n\n this.newInputChanged = false;\n if (this.inputConfig.name === InputConfigNameStringEnum.DATE_PICKER) {\n if (this.selectionInput === 0) {\n if (isRestart) {\n this.span1.nativeElement.innerHTML = 'mm';\n this.selectionInput = 0;\n this.selectSpanByTabIndex(0);\n } else {\n const currentValue = this.span1.nativeElement.innerHTML;\n const isPlaceholder = currentValue === 'mm';\n const hasOneDigit =\n !isPlaceholder &&\n currentValue.length === 2 &&\n currentValue[1] === 'm';\n\n if (isPlaceholder) {\n // First digit: show as \"Xm\"\n const keyValue = e.key;\n\n if (keyValue >= '0' && keyValue <= '9') {\n this.span1.nativeElement.innerHTML = keyValue + 'm';\n\n if (parseInt(keyValue) > 1) {\n // Auto-advance for 2-9 since they can only be single digit months\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setMonth(parseInt(keyValue) - 1),\n );\n this.selectionInput = 1;\n this.selectSpanByTabIndex(1, true);\n } else {\n this.selectionInput = 0;\n this.selectSpanByTabIndex(0);\n }\n this.markAsTouched();\n }\n } else if (hasOneDigit) {\n // Second digit: combine with first digit\n const firstDigit = currentValue[0];\n const final_value = parseInt(firstDigit + e.key);\n\n if (final_value > 12 || final_value === 0) {\n // Invalid, restart with new digit\n this.span1.nativeElement.innerHTML = e.key + 'm';\n if (parseInt(e.key) > 1) {\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setMonth(parseInt(e.key) - 1),\n );\n this.selectionInput = 1;\n this.selectSpanByTabIndex(1, true);\n } else {\n this.selectionInput = 0;\n this.selectSpanByTabIndex(0);\n }\n } else {\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setMonth(final_value - 1),\n );\n\n this.span1.nativeElement.innerHTML = ('0' + final_value).slice(\n -2,\n );\n\n this.selectionInput = 1;\n this.selectSpanByTabIndex(1, true);\n this.markAsTouched();\n }\n } else {\n // Complete value exists, restart\n const keyValue = e.key;\n this.span1.nativeElement.innerHTML = keyValue + 'm';\n\n if (parseInt(keyValue) > 1) {\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setMonth(parseInt(keyValue) - 1),\n );\n this.selectionInput = 1;\n this.selectSpanByTabIndex(1, true);\n } else {\n this.selectionInput = 0;\n this.selectSpanByTabIndex(0);\n }\n this.markAsTouched();\n }\n }\n } else if (this.selectionInput === 1) {\n if (isRestart) {\n this.span2.nativeElement.innerHTML = 'dd';\n this.selectionInput = 0;\n this.selectSpanByTabIndex(0, true);\n } else {\n const currentValue = this.span2.nativeElement.innerHTML;\n const isPlaceholder = currentValue === 'dd';\n const hasOneDigit =\n !isPlaceholder &&\n currentValue.length === 2 &&\n currentValue[1] === 'd';\n\n if (isPlaceholder) {\n // First digit: show as \"Xd\"\n const keyValue = e.key;\n\n if (keyValue >= '0' && keyValue <= '9') {\n this.span2.nativeElement.innerHTML = keyValue + 'd';\n\n if (parseInt(keyValue) > 3) {\n // Auto-advance for 4-9 since they can only be single digit days\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setDate(parseInt(keyValue)),\n );\n this.selectionInput = 2;\n this.selectSpanByTabIndex(2, true);\n } else {\n this.selectSpanByTabIndex(1);\n }\n this.markAsTouched();\n }\n } else if (hasOneDigit) {\n // Second digit: combine with first digit\n const firstDigit = currentValue[0];\n const final_value = parseInt(firstDigit + e.key);\n\n if (final_value > 31 || final_value === 0) {\n // Invalid, restart with new digit\n this.span2.nativeElement.innerHTML = e.key + 'd';\n if (parseInt(e.key) > 3) {\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setDate(parseInt(e.key)),\n );\n this.selectionInput = 2;\n this.selectSpanByTabIndex(2, true);\n } else {\n this.selectSpanByTabIndex(1);\n }\n this.markAsTouched();\n } else {\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setDate(final_value),\n );\n\n this.span2.nativeElement.innerHTML = ('0' + final_value).slice(\n -2,\n );\n\n this.selectionInput = 2;\n this.selectSpanByTabIndex(2, true);\n }\n } else {\n // Complete value exists, restart\n const keyValue = e.key;\n this.span2.nativeElement.innerHTML = keyValue + 'd';\n\n if (parseInt(keyValue) > 3) {\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setDate(parseInt(keyValue)),\n );\n this.selectionInput = 2;\n this.selectSpanByTabIndex(2, true);\n } else {\n this.selectSpanByTabIndex(1);\n }\n this.markAsTouched();\n }\n }\n } else {\n if (isRestart) {\n this.span3.nativeElement.innerHTML = 'yy';\n this.selectionInput = 1;\n this.selectSpanByTabIndex(1, true);\n } else {\n const currentValue = this.span3.nativeElement.innerHTML;\n const isPlaceholder = currentValue === 'yy';\n const hasOneDigit =\n !isPlaceholder &&\n currentValue.length === 2 &&\n currentValue[1] === 'y';\n\n if (isPlaceholder) {\n // First digit: show as \"Xy\"\n const keyValue = e.key;\n this.span3.nativeElement.innerHTML = keyValue + 'y';\n this.selectSpanByTabIndex(2);\n } else if (hasOneDigit) {\n // Second digit: combine with first digit\n const firstDigit = currentValue[0];\n const finalYear = parseInt(firstDigit + e.key);\n\n const finalShowYear =\n finalYear > 31\n ? parseInt(`19${finalYear}`)\n : parseInt(`20${finalYear}`);\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setFullYear(finalShowYear),\n );\n\n this.span3.nativeElement.innerHTML = ('0' + finalYear).slice(-2);\n this.selectSpanByTabIndex(2);\n this.markAsTouched();\n\n this.justEnteredDatePicker = true;\n this.blurOnDateTime();\n } else {\n // Complete value exists, restart\n const keyValue = e.key;\n this.span3.nativeElement.innerHTML = keyValue + 'y';\n this.selectSpanByTabIndex(2);\n }\n }\n }\n } else if (\n this.inputConfig.name === InputConfigNameStringEnum.TIME_PICKER &&\n !this.inputConfig.preventTyping\n ) {\n // Handle time picker keyboard input\n if (this.selectionInput === 0) {\n // Hours input\n if (isRestart) {\n this.span1.nativeElement.innerHTML = 'HH';\n this.selectionInput = 0;\n this.selectSpanByTabIndex(0);\n } else {\n const currentValue = this.span1.nativeElement.innerHTML;\n const isPlaceholder = currentValue === 'HH';\n const hasOneDigit =\n !isPlaceholder &&\n currentValue.length === 2 &&\n currentValue[1] === 'H';\n\n if (isPlaceholder) {\n // First digit: show as \"XH\"\n const keyValue = e.key;\n if (keyValue >= '0' && keyValue <= '9') {\n this.span1.nativeElement.innerHTML = keyValue + 'H';\n\n if (parseInt(`1${keyValue}`) > 12) {\n this.selectionInput = 1;\n this.selectSpanByTabIndex(1, true);\n } else {\n this.selectionInput = 0;\n this.selectSpanByTabIndex(0);\n }\n this.markAsTouched();\n }\n } else if (hasOneDigit) {\n // Second digit: combine with first digit\n const firstDigit = currentValue[0];\n const final_value = parseInt(firstDigit + e.key);\n\n if (final_value > 12 || final_value === 0) {\n this.span1.nativeElement.innerHTML = e.key + 'H';\n this.selectionInput = 1;\n this.selectSpanByTabIndex(1, true);\n } else {\n const currentHour = this.dateTimeInputDate.getHours();\n const isPM = currentHour >= 12;\n const newHour = isPM ? final_value + 12 : final_value;\n\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setHours(newHour),\n );\n\n this.span1.nativeElement.innerHTML = ('0' + final_value).slice(\n -2,\n );\n this.selectionInput = 1;\n this.selectSpanByTabIndex(1, true);\n this.markAsTouched();\n }\n } else {\n // Complete value exists, restart\n const keyValue = e.key;\n this.span1.nativeElement.innerHTML = keyValue + 'H';\n\n if (parseInt(`1${keyValue}`) > 12) {\n this.selectionInput = 1;\n this.selectSpanByTabIndex(1, true);\n } else {\n this.selectionInput = 0;\n this.selectSpanByTabIndex(0);\n }\n this.markAsTouched();\n }\n }\n } else if (this.selectionInput === 1) {\n // Minutes input\n if (isRestart) {\n this.span2.nativeElement.innerHTML = 'MM';\n this.selectionInput = 0;\n this.selectSpanByTabIndex(0, true);\n } else {\n const currentValue = this.span2.nativeElement.innerHTML;\n const isPlaceholder = currentValue === 'MM';\n const hasOneDigit =\n !isPlaceholder &&\n currentValue.length === 2 &&\n currentValue[1] === 'M';\n\n if (isPlaceholder) {\n // First digit: show as \"XM\"\n const keyValue = e.key;\n if (keyValue >= '0' && keyValue <= '9') {\n this.span2.nativeElement.innerHTML = keyValue + 'M';\n\n if (parseInt(keyValue) > 5) {\n this.selectionInput = 2;\n this.selectSpanByTabIndex(2, true);\n } else {\n this.selectSpanByTabIndex(1);\n }\n this.markAsTouched();\n }\n } else if (hasOneDigit) {\n // Second digit: combine with first digit\n const firstDigit = currentValue[0];\n const final_value = parseInt(firstDigit + e.key);\n\n if (final_value > 59) {\n this.span2.nativeElement.innerHTML = e.key + 'M';\n this.selectionInput = 2;\n this.selectSpanByTabIndex(2, true);\n } else {\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setMinutes(final_value),\n );\n\n this.span2.nativeElement.innerHTML = ('0' + final_value).slice(\n -2,\n );\n\n this.selectionInput = 2;\n this.selectSpanByTabIndex(2, true);\n this.markAsTouched();\n }\n } else {\n // Complete value exists, restart\n const keyValue = e.key;\n this.span2.nativeElement.innerHTML = keyValue + 'M';\n\n if (parseInt(keyValue) > 5) {\n this.selectionInput = 2;\n this.selectSpanByTabIndex(2, true);\n } else {\n this.selectSpanByTabIndex(1);\n }\n this.markAsTouched();\n }\n }\n } else if (this.selectionInput === 2) {\n // AM/PM input\n if (isRestart) {\n this.span3.nativeElement.innerHTML = 'AM';\n this.selectionInput = 0;\n this.selectSpanByTabIndex(0, true);\n } else {\n const currentHour = this.dateTimeInputDate.getHours();\n const isPM = e.key.toLowerCase() === 'p';\n\n if (isPM && currentHour < 12) {\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setHours(currentHour + 12),\n );\n this.span3.nativeElement.innerHTML = 'PM';\n } else if (!isPM && currentHour >= 12) {\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setHours(currentHour - 12),\n );\n this.span3.nativeElement.innerHTML = 'AM';\n }\n\n this.selectionInput = 0;\n this.selectSpanByTabIndex(0, true);\n this.markAsTouched();\n this.justEnteredDatePicker = true;\n this.blurOnDateTime();\n }\n }\n } else if (\n this.inputConfig.name === InputConfigNameStringEnum.DATE_PICKER_BANK_CARD\n ) {\n if (!this.selectionInput) {\n if (isRestart) {\n this.span1.nativeElement.innerHTML = 'mm';\n this.selectionInput = 0;\n this.selectSpanByTabIndex(0);\n } else {\n const currentValue = this.span1.nativeElement.innerHTML;\n const isPlaceholder = currentValue === 'mm';\n const hasOneDigit =\n !isPlaceholder &&\n currentValue.length === 2 &&\n currentValue[1] === 'm';\n\n if (isPlaceholder) {\n // First digit: show as \"Xm\"\n const keyValue = e.key;\n\n if (keyValue >= '0' && keyValue <= '9') {\n this.span1.nativeElement.innerHTML = keyValue + 'm';\n\n if (parseInt(keyValue) > 1) {\n // Auto-advance for 2-9 since they can only be single digit months\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setMonth(parseInt(keyValue) - 1),\n );\n this.selectionInput = 1;\n this.selectSpanByTabIndex(1, true);\n } else {\n this.selectSpanByTabIndex(0);\n }\n }\n } else if (hasOneDigit) {\n // Second digit: combine with first digit\n const firstDigit = currentValue[0];\n const final_value = parseInt(firstDigit + e.key);\n\n if (final_value > 12 || final_value === 0) {\n // Invalid, restart with new digit\n this.span1.nativeElement.innerHTML = e.key + 'm';\n if (parseInt(e.key) > 1) {\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setMonth(parseInt(e.key) - 1),\n );\n this.selectionInput = 1;\n this.selectSpanByTabIndex(1, true);\n } else {\n this.selectSpanByTabIndex(0);\n }\n } else {\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setMonth(final_value - 1),\n );\n\n this.span1.nativeElement.innerHTML = ('0' + final_value).slice(\n -2,\n );\n\n this.selectionInput = 1;\n this.selectSpanByTabIndex(1, true);\n }\n } else {\n // Complete value exists, restart\n const keyValue = e.key;\n this.span1.nativeElement.innerHTML = keyValue + 'm';\n\n if (parseInt(keyValue) > 1) {\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setMonth(parseInt(keyValue) - 1),\n );\n this.selectionInput = 1;\n this.selectSpanByTabIndex(1, true);\n } else {\n this.selectSpanByTabIndex(0);\n }\n }\n }\n } else {\n if (isRestart) {\n this.span2.nativeElement.innerHTML = 'yy';\n this.selectionInput = 2;\n this.selectSpanByTabIndex(2, true);\n } else {\n const currentValue = this.span2.nativeElement.innerHTML;\n const isPlaceholder = currentValue === 'yy';\n const hasOneDigit =\n !isPlaceholder &&\n currentValue.length === 2 &&\n currentValue[1] === 'y';\n\n if (isPlaceholder) {\n // First digit: show as \"Xy\"\n const keyValue = e.key;\n this.span2.nativeElement.innerHTML = keyValue + 'y';\n this.selectSpanByTabIndex(1);\n } else if (hasOneDigit) {\n // Second digit: combine with first digit\n const firstDigit = currentValue[0];\n const finalYear = parseInt(firstDigit + e.key);\n\n const finalShowYear =\n finalYear > 31\n ? parseInt(`19${finalYear}`)\n : parseInt(`20${finalYear}`);\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setFullYear(finalShowYear),\n );\n\n this.span2.nativeElement.innerHTML = ('0' + finalYear).slice(-2);\n this.selectSpanByTabIndex(1);\n\n // Validate and update immediately when last field (YY) is completed\n this.justEnteredDatePicker = true;\n this.blurOnDateTime();\n } else {\n // Complete value exists, restart\n const keyValue = e.key;\n this.span2.nativeElement.innerHTML = keyValue + 'y';\n this.selectSpanByTabIndex(1);\n }\n }\n }\n }\n }\n\n selectSpanByTabIndex(indx: number, changeTab?: boolean): void {\n switch (indx) {\n case 0:\n this.setSpanSelection(this.span1.nativeElement);\n break;\n case 1:\n this.setSpanSelection(this.span2.nativeElement);\n break;\n case 2:\n this.setSpanSelection(this.span3.nativeElement);\n break;\n default:\n this.setSpanSelection(this.holder1.nativeElement);\n }\n\n // Ensure the holder1 element stays focused\n this.holder1.nativeElement.focus();\n\n if (changeTab) this.newInputChanged = true;\n }\n\n private handleNavigationKey(event: KeyboardEvent): void {\n switch (event.key) {\n case 'ArrowLeft': // Left arrow\n this.moveSelectionLeft();\n break;\n case 'ArrowRight': // Right arrow\n case 'Tab': // Tab\n this.moveSelectionRightOrTab(event);\n break;\n case 'ArrowUp': // Up arrow\n this.setDateTimeModel('up');\n break;\n case 'ArrowDown': // Down arrow\n this.setDateTimeModel('down');\n break;\n case 'Backspace': // Backspace\n case 'Delete': // Delete\n this.handleKeyboardInputs(event, true);\n break;\n }\n }\n\n private handleDatePickerInput(isUp: boolean, isDatePicker: boolean): void {\n if (this.selectionInput === 0) this.updateMonth(isUp);\n else if (this.selectionInput === 1) this.updateDate(isUp, isDatePicker);\n else this.updateYear(isUp, isDatePicker);\n }\n\n private setDateTimeModel(direction: string): void {\n if (this.selectionInput === -1) this.selectionInput = 0;\n\n const isUp = direction === 'up';\n const isDatePicker =\n this.inputConfig.name === InputConfigNameStringEnum.DATE_PICKER;\n const isBankCardPicker =\n this.inputConfig.name === InputConfigNameStringEnum.DATE_PICKER_BANK_CARD;\n\n if (isDatePicker || isBankCardPicker)\n this.handleDatePickerInput(isUp, isDatePicker);\n else this.handleTimePickerInput(isUp);\n }\n\n private moveSelectionRightOrTab(e: KeyboardEvent): void {\n // Format current field before moving\n this.formatCurrentField();\n\n const isDatepickerBankCard =\n this.inputConfig.name === InputConfigNameStringEnum.DATE_PICKER_BANK_CARD;\n const maxIndex = isDatepickerBankCard ? 1 : 2;\n\n if (this.selectionInput < maxIndex && !e.shiftKey) {\n this.selectionInput += 1;\n this.selectSpanByTabIndex(this.selectionInput, true);\n }\n }\n\n private formatCurrentField(): void {\n if (this.selectionInput === -1) return;\n\n const currentSpan =\n this.selectionInput === 0\n ? this.span1\n : this.selectionInput === 1\n ? this.span2\n : this.span3;\n\n if (!currentSpan) return;\n\n const currentValue = currentSpan.nativeElement.innerHTML;\n const isDatePicker =\n this.inputConfig.name === InputConfigNameStringEnum.DATE_PICKER;\n const isBankCardPicker =\n this.inputConfig.name === InputConfigNameStringEnum.DATE_PICKER_BANK_CARD;\n const isTimePicker =\n this.inputConfig.name === InputConfigNameStringEnum.TIME_PICKER;\n\n // Format month (span1) in date/bank card picker\n if ((isDatePicker || isBankCardPicker) && this.selectionInput === 0) {\n if (currentValue.length === 2 && currentValue[1] === 'm') {\n const digit = currentValue[0];\n const formatted = ('0' + digit).slice(-2);\n currentSpan.nativeElement.innerHTML = formatted;\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setMonth(parseInt(digit) - 1),\n );\n }\n }\n\n // Format day (span2) in date picker\n if (isDatePicker && this.selectionInput === 1) {\n if (currentValue.length === 2 && currentValue[1] === 'd') {\n const digit = currentValue[0];\n const formatted = ('0' + digit).slice(-2);\n currentSpan.nativeElement.innerHTML = formatted;\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setDate(parseInt(digit)),\n );\n }\n }\n\n // Format year (span2 bank card / span3 date picker)\n if (\n (isDatePicker && this.selectionInput === 2) ||\n (isBankCardPicker && this.selectionInput === 1)\n ) {\n if (currentValue.length === 2 && currentValue[1] === 'y') {\n const digit = currentValue[0];\n const formatted = ('0' + digit).slice(-2);\n currentSpan.nativeElement.innerHTML = formatted;\n const fullYear = parseInt(`200${digit}`);\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setFullYear(fullYear),\n );\n }\n }\n\n // Format hours (span1) in time picker\n if (isTimePicker && this.selectionInput === 0) {\n if (currentValue.length === 2 && currentValue[1].toLowerCase() === 'h') {\n const digit = currentValue[0];\n const formatted = ('0' + digit).slice(-2);\n currentSpan.nativeElement.innerHTML = formatted;\n const currentHour = this.dateTimeInputDate.getHours();\n const isPM = currentHour >= 12;\n const newHour = isPM ? parseInt(digit) + 12 : parseInt(digit);\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setHours(newHour),\n );\n }\n }\n\n // Format minutes (span2) in time picker\n if (isTimePicker && this.selectionInput === 1) {\n if (currentValue.length === 2 && currentValue[1].toLowerCase() === 'm') {\n const digit = currentValue[0];\n const formatted = ('0' + digit).slice(-2);\n currentSpan.nativeElement.innerHTML = formatted;\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setMinutes(parseInt(digit)),\n );\n }\n }\n }\n\n public setIsFocusInput(value: boolean): void {\n this.isFocusInput = value;\n }\n\n private moveSelectionLeft(): void {\n // Format current field before moving\n this.formatCurrentField();\n\n if (this.selectionInput > 0) {\n this.selectionInput -= 1;\n this.selectSpanByTabIndex(this.selectionInput, true);\n }\n }\n\n private updateMonth(isUp: boolean): void {\n const monthDelta = isUp ? 1 : -1;\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setMonth(\n this.dateTimeInputDate.getMonth() + monthDelta,\n ),\n );\n\n this.span1.nativeElement.innerHTML = this.padValue(\n this.dateTimeInputDate.getMonth() + 1,\n );\n this.setSpanSelection(this.span1.nativeElement);\n }\n\n private updateDate(isUp: boolean, isDatePicker: boolean): void {\n const dateDelta = isUp ? 1 : -1;\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setDate(\n this.dateTimeInputDate.getDate() + dateDelta,\n ),\n );\n\n const spanElement = isDatePicker\n ? this.span2.nativeElement\n : this.span1.nativeElement;\n spanElement.innerHTML = this.padValue(this.dateTimeInputDate.getDate());\n this.setSpanSelection(spanElement);\n }\n\n private updateYear(isUp: boolean, isDatePicker: boolean): void {\n const yearDelta = isUp ? 1 : -1;\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setFullYear(\n this.dateTimeInputDate.getFullYear() + yearDelta,\n ),\n );\n\n const spanElement = isDatePicker\n ? this.span3.nativeElement\n : this.span2.nativeElement;\n spanElement.innerHTML = this.dateTimeInputDate\n .getFullYear()\n .toString()\n .slice(-2);\n this.setSpanSelection(spanElement);\n }\n\n private padValue(value: number): string {\n return ('0' + value).slice(-2);\n }\n\n private handleTimePickerInput(isUp: boolean): void {\n if (this.selectionInput === 0) this.updateHours(isUp);\n else if (this.selectionInput === 1) this.updateMinutes(isUp);\n else this.toggleAMPM();\n }\n\n private updateHours(isUp: boolean): void {\n const hoursDelta = isUp ? 1 : -1;\n let selectedHours = this.dateTimeInputDate.getHours() + hoursDelta;\n\n // Handle 12-hour format with AM/PM\n if (selectedHours === 0) selectedHours = 12; // 12 AM\n if (selectedHours === -1) selectedHours = 11; // 11 PM\n if (selectedHours === 13) selectedHours = 1; // 1 PM\n if (selectedHours === 25) selectedHours = 1; // 1 AM\n\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setHours(selectedHours),\n );\n\n // Display 12-hour format\n const displayHour = selectedHours > 12 ? selectedHours - 12 : selectedHours;\n this.span1.nativeElement.innerHTML = this.padValue(displayHour);\n this.setSpanSelection(this.span1.nativeElement);\n\n this.span3.nativeElement.innerHTML = selectedHours >= 12 ? 'PM' : 'AM';\n\n this.markAsTouched();\n }\n\n private updateMinutes(isUp: boolean): void {\n const minutesDelta = isUp ? 1 : -1;\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setMinutes(\n this.dateTimeInputDate.getMinutes() + minutesDelta,\n ),\n );\n\n this.span2.nativeElement.innerHTML = this.padValue(\n this.dateTimeInputDate.getMinutes(),\n );\n this.setSpanSelection(this.span2.nativeElement);\n\n this.markAsTouched();\n }\n\n private toggleAMPM(): void {\n this.span3.nativeElement.innerHTML =\n this.span3.nativeElement.innerHTML === 'AM' ? 'PM' : 'AM';\n\n const hoursToAdd = this.span3.nativeElement.innerHTML === 'AM' ? -12 : 12;\n this.dateTimeInputDate = new Date(\n this.dateTimeInputDate.setHours(\n this.dateTimeInputDate.getHours() + hoursToAdd,\n ),\n );\n\n this.setSpanSelection(this.span3.nativeElement);\n\n this.markAsTouched();\n }\n\n public clearInput(event?: Event): void {\n this.clearInputEvent.emit(true);\n this.onChange('');\n this.dateTimeInputDate = new Date();\n this.dateTimeIntDate = new Date();\n this.showDateInput = false;\n this.resetDateTimeInputs();\n this.markAsTouched();\n this.handleCloseTooltip();\n\n if (event) {\n event.stopPropagation();\n }\n }\n\n public resetDateTimeInputs(): void {\n if (this.span1)\n if (this.inputConfig.name === InputConfigNameStringEnum.DATE_PICKER) {\n this.span1.nativeElement.innerHTML = 'mm';\n this.span2.nativeElement.innerHTML = 'dd';\n this.span3.nativeElement.innerHTML = 'yy';\n } else if (\n this.inputConfig.name ===\n InputConfigNameStringEnum.DATE_PICKER_BANK_CARD\n ) {\n this.span1.nativeElement.innerHTML = 'mm';\n this.span2.nativeElement.innerHTML = 'yy';\n } else if (\n this.inputConfig.name === InputConfigNameStringEnum.TIME_PICKER\n ) {\n this.span1.nativeElement.innerHTML = 'HH';\n this.span2.nativeElement.innerHTML = 'MM';\n this.span3.nativeElement.innerHTML = 'AM';\n }\n\n this.setTimePickerTime();\n this.newInputChanged = true;\n this.setIsFocusInput(false);\n this.showDateInput = false;\n }\n\n public setTimePickerTime(): void {\n if (this.inputConfig.name === InputConfigNameStringEnum.TIME_PICKER)\n this.dateTimeInputDate = new Date(\n moment().format('MM/DD/YYYY') +\n (this.inputConfig?.isFromDate ? ' 12:15' : ' 12:00'),\n );\n }\n\n public handleCloseTooltip(): void {\n this.closeTooltip?.close();\n }\n\n public openPopover(event?: MouseEvent): void {\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n this.isFocusInput = true;\n this.holder1.nativeElement.focus();\n this.t2.toggle();\n }\n\n public ngOnDestroy() {\n // Clear all timers\n if (this.dateTimeMainTimer) {\n clearTimeout(this.dateTimeMainTimer);\n }\n if (this.focusBlur) {\n clearTimeout(this.focusBlur);\n }\n if (this.timeoutCleaner) {\n clearTimeout(this.timeoutCleaner);\n }\n\n // Complete the destroy subject to unsubscribe from all observables\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","@let inTable = inputConfig?.inTable; @let inverse = inputConfig?.inverse;\n@let size = inputConfig?.size;\n<!-- -->\n@let invalid =\n getSuperControl?.invalid &&\n (getSuperControl?.touched || getSuperControl?.dirty);\n@let valid = getSuperControl?.valid && getSuperControl?.value;\n@let disabled = getSuperControl?.disabled || inputConfig?.isDisabled;\n@let isBilling = inputConfig?.isBilling;\n@let showClear = !disabled && !inputConfig.hideClear;\n<!-- Date Time Input -->\n<div\n [id]=\"id\"\n class=\"datetime-input-container\"\n [class]=\"{\n 'datetime-valid': valid,\n 'datetime-invalid': invalid,\n 'datetime-disabled': disabled,\n 'datetime-focus': isFocusInput,\n 'datetime-has-text': getSuperControl?.value,\n 'datetime-required': isRequired && !disabled,\n 'datetime-in-table': inTable,\n 'datetime-inverse': inverse,\n 'datetime-billing': isBilling,\n 'datetime-popover-open': t2.isOpen(),\n 'datetime-size-22': size === 22,\n 'datetime-icon-hidden': inputConfig.isIconHidden,\n }\"\n #t2=\"ngbPopover\"\n [ngbPopover]=\"!disabled ? dateTimePopover : null\"\n [placement]=\"['bottom-start', 'top-start']\"\n [triggers]=\"'manual'\"\n [popoverClass]=\"'datetimepopovermain'\"\n [autoClose]=\"'outside'\"\n [container]=\"'body'\"\n (pointerdown)=\"onPopoverClick($event)\"\n (shown)=\"onPopoverShown()\"\n (hidden)=\"onPopoverHidden()\"\n>\n <div class=\"datetime-label\">\n {{ inputConfig.label }}\n </div>\n\n <div\n #holder1\n [tabindex]=\"disabled ? '-1' : '0'\"\n contenteditable=\"true\"\n (keydown)=\"changeSelection($event)\"\n (input)=\"preventInput($event)\"\n (focus)=\"onEditableFocus($event)\"\n (blur)=\"blurInput()\"\n (paste)=\"onDatePaste($event)\"\n class=\"datetime-input-listener\"\n [ngbTooltip]=\"errorTooltip\"\n [container]=\"'body'\"\n [placement]=\"'bottom'\"\n [disableTooltip]=\"isFocusInput\"\n tooltipClass=\"tooltip tooltip-bg-red-500 input-tooltip\"\n ></div>\n\n @if (!inputConfig.isIconHidden) {\n <div class=\"datetime-icon-container\" (pointerdown)=\"openPopover($event)\">\n <svg-icon\n class=\"datetime-icon\"\n [name]=\"\n inputConfig.placeholderIcon === 'date' ? 'cai-date' : 'cai-time'\n \"\n ></svg-icon>\n <div class=\"datetime-separator\"></div>\n </div>\n }\n <div class=\"datetime-input\">\n <span\n #span1\n class=\"main\"\n [ngClass]=\"{\n 'reset-selection-color': !isFocusInput,\n }\"\n [innerHTML]=\"inputConfig.name === 'datepicker' ? 'mm' : 'HH'\"\n ></span>\n <span>\n <div\n class=\"border-picker\"\n [innerHTML]=\"inputConfig.name === 'datepicker' ? '/' : ':'\"\n ></div>\n </span>\n <span\n #span2\n class=\"main\"\n [ngClass]=\"{\n 'reset-selection-color': !isFocusInput,\n }\"\n [innerHTML]=\"inputConfig.name === 'datepicker' ? 'dd' : 'MM'\"\n ></span>\n <span>\n <div\n class=\"border-picker\"\n [innerHTML]=\"inputConfig.name === 'datepicker' ? '/' : ' '\"\n ></div>\n </span>\n <span\n #span3\n class=\"main\"\n [class.time-am-pm]=\"inputConfig.name !== 'datepicker'\"\n [ngClass]=\"{\n 'reset-selection-color': !isFocusInput,\n }\"\n [innerHTML]=\"inputConfig.name === 'datepicker' ? 'yy' : 'AM'\"\n ></span>\n </div>\n\n @if (!disabled) {\n @let tooltipClass =\n inverse\n ? \"tooltip input-tooltip tooltip-bg-white-700 tooltip-text-black-500\"\n : \"tooltip input-tooltip\";\n\n @if (showClear) {\n <button\n class=\"datetime-cancel-button\"\n tabindex=\"-1\"\n ngbTooltip=\"Clear\"\n [openDelay]=\"600\"\n [tooltipClass]=\"tooltipClass\"\n [placement]=\"'top'\"\n [container]=\"'body'\"\n [autoClose]=\"true\"\n #closeTooltip=\"ngbTooltip\"\n (click)=\"clearInput($event)\"\n (pointerdown)=\"handleCloseTooltip()\"\n (mouseleave)=\"handleCloseTooltip()\"\n >\n <svg-icon class=\"datetime-bg-icon\" name=\"cai-cancel\"></svg-icon>\n </button>\n }\n <svg-icon\n class=\"datetime-icon datetime-dropdown-icon\"\n (pointerdown)=\"openPopover($event)\"\n name=\"cai-arrow-secondary-down\"\n ></svg-icon>\n }\n <!-- Error Message -->\n @if (!inTable || isBilling) {\n <div class=\"datetime-error-message\">\n {{\n invalid\n ? (getSuperControl?.errors\n | errorMessage: inputConfig.customErrors)[0]\n : \"\"\n }}\n </div>\n }\n</div>\n\n<!-- Popover for DateTime Pickers -->\n<ng-template #dateTimePopover let-data=\"data\">\n <div\n class=\"datetime-dropdown-holder\"\n [class.datetime-has-stroke]=\"inputConfig.hasStroke\"\n >\n <cai-custom-datetime-pickers\n [calendarType]=\"\n inputConfig.name === 'datepicker' ||\n inputConfig.name === 'datepickerBankCard'\n ? 'date'\n : 'time'\n \"\n [inputConfig]=\"inputConfig\"\n [placeholder]=\"'MM/DD/YY'\"\n [dateTime]=\"dateTimeInputDate\"\n (closePopover)=\"closePopover($event)\"\n ></cai-custom-datetime-pickers>\n </div>\n</ng-template>\n\n<ng-template #errorTooltip>\n @if (inTable && invalid && !isFocusInput) {\n {{ (getSuperControl?.errors | errorMessage: inputConfig.customErrors)[0] }}\n }\n</ng-template>\n","export enum eStringPlaceholder {\n EMPTY = ''\n} ","export enum eAlignment {\n LEFT = 'left',\n RIGHT = 'right',\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, input, signal, ViewChild } from '@angular/core';\n\n// Enums\nimport { eAlignment } from '../../enums';\nimport { eGeneralActions } from '../../enums/general-actions.enum';\n\n// Components\nimport { SvgIconComponent } from 'angular-svg-icon';\nimport { NgbTooltip } from '@ng-bootstrap/ng-bootstrap';\nimport { Clipboard } from '@angular/cdk/clipboard';\n\n@Component({\n selector: 'cai-copy',\n templateUrl: './copy.component.html',\n styleUrl: './copy.component.scss',\n imports: [\n CommonModule,\n NgbTooltip,\n\n // Components\n SvgIconComponent,\n ],\n})\nexport class CopyComponent {\n public value = input<string>();\n public alignment = input<eAlignment>(eAlignment.RIGHT);\n public copyTooltip = input<string>();\n public copyArea = input<'icon' | 'full'>('icon');\n public icon = input<string | null>(null);\n public iconSize = input<number>(12);\n public iconColor = input<string | null>(null);\n public tooltipClass = input<string | null>(null);\n public tooltipPlacement = input<'top' | 'bottom'>('bottom');\n public inverse = input<boolean>(false);\n public hasNoIcon = input<boolean>(false);\n\n public copied = signal<boolean>(false);\n\n // Enums\n public eGeneralActions = eGeneralActions;\n public eAlignment = eAlignment;\n\n constructor(private clipboard: Clipboard) {}\n\n public onCopy(event: MouseEvent) {\n event.stopPropagation();\n this.clipboard.copy(this.value() ?? '');\n this.copied.set(true);\n }\n\n public resetCopied() {\n setTimeout(() => {\n this.copied.set(false);\n }, 200);\n }\n}\n","@let isCopied = !!copied();\n<div\n class=\"copy-container d-flex align-items-center gap-1\"\n [class]=\"{\n 'copy-area-full': copyArea() === 'full',\n 'has-custom-icon': !!icon(),\n inverse: inverse(),\n }\"\n (mouseleave)=\"resetCopied()\"\n (click)=\"copyArea() === 'full' && onCopy($event)\"\n [ngbTooltip]=\"copyArea() === 'full' ? tooltipTemplate : null\"\n [placement]=\"tooltipPlacement()\"\n [container]=\"'body'\"\n [tooltipClass]=\"\n (isCopied\n ? 'tooltip-bg-blue-500 '\n : inverse()\n ? 'tooltip-bg-white-700 tooltip-text-black-500'\n : ' ') +\n ' ' +\n tooltipClass()\n \"\n>\n <div\n class=\"copy-content\"\n [class]=\"{\n 'order-1': alignment() === eAlignment.LEFT,\n 'order-0': alignment() === eAlignment.RIGHT,\n }\"\n >\n <ng-content></ng-content>\n </div>\n @if (!hasNoIcon()) {\n <div\n (click)=\"onCopy($event)\"\n [ngbTooltip]=\"copyArea() === 'icon' ? tooltipTemplate : null\"\n [container]=\"'body'\"\n [tooltipClass]=\"\n isCopied\n ? 'input-tooltip tooltip-bg-blue-500'\n : inverse()\n ? 'input-tooltip tooltip-bg-white-700 tooltip-text-black-500'\n : 'input-tooltip'\n \"\n [placement]=\"tooltipPlacement()\"\n [class]=\"'copy-icon-container ' + iconColor()\"\n [class.active]=\"isCopied\"\n [style.--icon-size]=\"iconSize() + 'px'\"\n >\n <svg-icon\n [name]=\"icon() || ''\"\n [class]=\"'icon transition custom-icon'\"\n ></svg-icon>\n <svg-icon\n [name]=\"'cai-copy'\"\n [class]=\"'icon transition copy-icon'\"\n ></svg-icon>\n </div>\n }\n</div>\n\n@let copyText =\n isCopied ? eGeneralActions.COPIED : (copyTooltip() ?? eGeneralActions.COPY);\n<ng-template #tooltipTemplate>\n {{ copyText }}\n</ng-template>\n","export const AutocompleteSearchLayer = {\n Venue: 'Venue',\n Address: 'Address',\n Street: 'Street',\n Neighbourhood: 'Neighbourhood',\n Borough: 'Borough',\n LocalAdmin: 'LocalAdmin',\n Locality: 'Locality',\n County: 'County',\n MacroCounty: 'MacroCounty',\n Region: 'Region',\n MacroRegion: 'MacroRegion',\n Country: 'Country',\n Coarse: 'Coarse',\n PostalCode: 'PostalCode',\n} as const;\n\nexport type AutocompleteSearchLayer =\n (typeof AutocompleteSearchLayer)[keyof typeof AutocompleteSearchLayer];\n\nexport interface SentAddressData {\n query: string;\n searchLayers: AutocompleteSearchLayer[];\n closedBorder: boolean;\n}\n","export enum InputAddressLayersStringEnum {\n ADDRESS = 'Address',\n LOCALITY = 'Locality',\n}\n","export enum InputAddressTypeStringEnum {\n LONG_ADDRESS = 'longAddress',\n SHORT_ADDRESS = 'shortAddress',\n ROUTING_ADDRESS = 'RoutingAddress',\n CITY_STATE_ZIP = 'CityStateZip',\n STREET_CITY_STATE_ZIP = 'StreetCityStateZip',\n}\n","// Angular\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectorRef,\n Component,\n Input,\n input,\n OnDestroy,\n OnInit,\n output,\n Self,\n signal,\n ViewChild,\n SimpleChanges,\n OnChanges,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormControl,\n FormsModule,\n NgControl,\n ReactiveFormsModule,\n} from '@angular/forms';\n\n// RXJS\nimport {\n catchError,\n debounceTime,\n distinctUntilChanged,\n filter,\n of,\n Subject,\n switchMap,\n takeUntil,\n tap,\n} from 'rxjs';\n\n// Models\nimport { CaiInputConfig } from '../input/models';\n\n// Components\nimport { InputComponent } from '../input/input.component';\nimport { AddressData } from './models/address-data.model';\nimport { AutocompleteSearchLayer } from './models/sent-address-data.model';\nimport { InputAddressLayersStringEnum } from './enums/input-address-layers-string.enum';\nimport { AddressList } from './models/address-list.model';\nimport { InputAddressTypeStringEnum } from './enums/input-address-type-string.enum';\n\n@Component({\n selector: 'cai-input-address',\n templateUrl: './input-address.component.html',\n styleUrl: './input-address.component.scss',\n imports: [\n // Modules\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n // Components\n InputComponent,\n ],\n})\nexport class InputAddressComponent\n implements OnInit, ControlValueAccessor, OnDestroy, OnChanges\n{\n @ViewChild(InputComponent) inputComponent!: InputComponent;\n\n private destroy$ = new Subject<void>();\n private controlSubscription$ = new Subject<void>();\n private baseConfig: CaiInputConfig = {\n type: 'text',\n dropdown: true,\n dropdownAutocomplete: true,\n search: true,\n textTransform: 'capitalize',\n icon: 'cai-address',\n optionLabel: 'name',\n optionValue: 'name',\n isAddress: true,\n useOutsideSearch: true,\n };\n\n id = input<string>('');\n config = input<CaiInputConfig>({});\n type = input<string>('');\n required = input<boolean>(false);\n isInTable = input<boolean>(false);\n isFormLoaded = input<boolean>(false);\n\n @Input() public set activeAddress(value: AddressList | null) {\n if (value) {\n this._activeAddress = value;\n let isValid = true;\n if (this.searchLayers?.[0] === InputAddressLayersStringEnum.ADDRESS) {\n const address = value?.address;\n if (address) isValid = this.checkAddressValidation(address);\n }\n\n if (!value || !isValid) {\n this.getSuperControl?.setErrors({\n ...this.getSuperControl?.errors,\n invalid: true,\n });\n } else {\n const currentErrors = { ...this.getSuperControl?.errors };\n delete currentErrors['invalid'];\n this.getSuperControl?.setErrors(\n Object.keys(currentErrors).length > 0 ? currentErrors : null,\n );\n }\n }\n }\n\n @Input() public set receivedAddressData(value: AddressData | null) {\n if (value) {\n this.currentAddressData = {\n address: value.address!,\n valid: value.address && value.longLat ? true : false,\n longLat: value.longLat,\n isParking: this.isParkingAddressSelected,\n };\n\n if (this.currentAddressData!.valid) {\n const currentErrors = { ...this.getSuperControl?.errors };\n delete currentErrors['invalid'];\n this.getSuperControl?.setErrors(\n Object.keys(currentErrors).length > 0 ? currentErrors : null,\n );\n }\n\n this.selectedAddress.emit(this.currentAddressData!);\n }\n }\n\n @Input() public set receivedAddressList(\n value: { addresses: string[] } | null,\n ) {\n this._receivedAddressList = value;\n\n if (value?.addresses) {\n let parkingAddressesList: any = [];\n this.addressList = value.addresses.map((item: string, indx: number) => {\n const parkingAddress = this._parkingList?.length\n ? this.filterParkingByCity(item)\n : null;\n\n if (parkingAddress?.length)\n parkingAddressesList.push({\n name: item,\n id: indx,\n parkingAddress,\n });\n return {\n name: item,\n id: indx,\n };\n });\n\n this.addressList = [...parkingAddressesList, ...this.addressList];\n }\n }\n\n @Input() public set parkingList(value: any[]) {\n this._parkingList = value;\n }\n\n selectedAddress = output<any>();\n sentAddressData = output<any>();\n sentAddressValue = output<any>();\n onClear = output();\n\n public _receivedAddressList: { addresses: string[] } | null = null;\n public _activeAddress: AddressList | null = null;\n\n //Address data\n private searchLayers!: AutocompleteSearchLayer[];\n public currentAddressData: AddressData | null = null;\n\n public addressList: AddressList[] = [];\n public allowValidation: boolean = false;\n public requestSent: boolean = false;\n public closedBorder: boolean = false;\n public chosenFromDropdown: boolean = false;\n public _parkingList: any[] = [];\n public isParkingAddressSelected: boolean = false;\n\n public inputConfig = signal<CaiInputConfig>({});\n public isLoading = signal<boolean>(false);\n\n constructor(\n @Self() public superControl: NgControl,\n private ref: ChangeDetectorRef,\n ) {\n this.superControl.valueAccessor = this;\n }\n\n writeValue(_: any): void {}\n\n onChange = (_: any) => {};\n onTouched = () => {};\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n get getSuperControl() {\n return this.superControl?.control as FormControl;\n }\n\n ngOnInit(): void {\n this.initializeAddressInput();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['isFormLoaded']?.currentValue) {\n this.initChangesListener();\n }\n }\n\n private initializeAddressInput(): void {\n if (this.type()) {\n this.checkSearchLayers(this.type());\n }\n\n this.baseConfig.required = this.required();\n\n if (this.isInTable()) {\n this.baseConfig.icon = null;\n this.baseConfig.inTable = true;\n }\n\n this.inputConfig.set({\n ...this.baseConfig,\n ...this.config(),\n });\n\n this.initChangesListener();\n }\n\n private getSearchLayers(value: string): AutocompleteSearchLayer[] {\n let searchLayers: AutocompleteSearchLayer[] = [];\n switch (value) {\n case InputAddressTypeStringEnum.LONG_ADDRESS:\n searchLayers = [AutocompleteSearchLayer.Address];\n break;\n case InputAddressTypeStringEnum.SHORT_ADDRESS:\n searchLayers = [AutocompleteSearchLayer.Locality];\n break;\n case InputAddressTypeStringEnum.CITY_STATE_ZIP:\n searchLayers = [\n AutocompleteSearchLayer.Locality,\n AutocompleteSearchLayer.PostalCode,\n ];\n break;\n case InputAddressTypeStringEnum.STREET_CITY_STATE_ZIP:\n searchLayers = [\n AutocompleteSearchLayer.Street,\n AutocompleteSearchLayer.Locality,\n AutocompleteSearchLayer.PostalCode,\n ];\n break;\n }\n return searchLayers;\n }\n\n private getBaseConfigName(value: string): string {\n switch (value) {\n case InputAddressTypeStringEnum.LONG_ADDRESS:\n return 'Address, City, State Zip';\n case InputAddressTypeStringEnum.SHORT_ADDRESS:\n return 'County, State';\n case InputAddressTypeStringEnum.CITY_STATE_ZIP:\n return 'City, State Zip';\n case InputAddressTypeStringEnum.STREET_CITY_STATE_ZIP:\n return 'Street, City, State Zip';\n }\n return '';\n }\n\n private checkSearchLayers(value: string): void {\n this.searchLayers = this.getSearchLayers(value);\n\n this.baseConfig.name = this.getBaseConfigName(value);\n }\n\n private filterParkingByCity(searchString: string): any {\n const formattedSearchString = searchString.trim().replace(/\\s*,\\s*/g, ', ');\n\n const isParking = this._parkingList.filter((parking: any) => {\n const { city, stateShortName, country } = parking.address || {};\n const formattedAddress = `${city}, ${stateShortName}, ${country}`;\n if (formattedAddress === formattedSearchString)\n parking.address.isParking = true;\n return formattedAddress === formattedSearchString;\n });\n\n return isParking;\n }\n\n private checkAddressValidation(address: string): boolean {\n const streetNum = /\\d/;\n\n return streetNum.test(address) ? true : false;\n }\n\n public onBlur(): void {\n if (this.getSuperControl?.value?.length < 3) {\n this.getSuperControl?.setValue('');\n }\n }\n\n public hideValidation() {\n return (\n this.isLoading() ||\n (this.getSuperControl?.value && this.getSuperControl?.value?.length < 3)\n );\n }\n\n public initChangesListener(): void {\n const control = this.getSuperControl;\n\n if (!control || !control.valueChanges) {\n return;\n }\n\n // Unsubscribe from previous form control subscription\n this.controlSubscription$.next();\n\n control.valueChanges\n .pipe(\n distinctUntilChanged(),\n takeUntil(this.controlSubscription$),\n takeUntil(this.destroy$),\n tap((term) => {\n if (!term) {\n this.isLoading.set(false);\n this.addressList = [];\n this.allowValidation = true;\n return;\n }\n\n // If user is typing after selecting from dropdown, clear the selection immediately\n // This ensures validation happens on the FIRST keystroke, not the second\n if (!this.allowValidation) {\n // First keystroke after dropdown selection - clear the active address\n this._activeAddress = null;\n this.requestSent = false;\n const addressData = {\n address: {},\n valid: false,\n longLat: {},\n };\n this.selectedAddress.emit(addressData);\n this.allowValidation = true;\n } else {\n // Subsequent keystrokes - continue clearing if needed\n this.requestSent = false;\n this._activeAddress = null;\n const addressData = {\n address: {},\n valid: false,\n longLat: {},\n };\n this.selectedAddress.emit(addressData);\n }\n }),\n filter((term: string) => {\n if (term?.length >= 3) this.isLoading.set(true);\n return term?.length >= 3;\n }),\n debounceTime(500),\n switchMap((query: string) => {\n const params = {\n query: query,\n searchLayers: this.searchLayers,\n closedBorder: this.closedBorder,\n };\n\n this.sentAddressData.emit(params);\n\n return of(this.receivedAddressList).pipe(\n catchError((error) => {\n return of([]);\n }),\n );\n }),\n catchError((error) => {\n return of(null);\n }),\n )\n .subscribe({\n next: (result) => {\n let isValid = true;\n if (this.searchLayers?.[0] === InputAddressLayersStringEnum.ADDRESS) {\n const address = this._activeAddress?.address;\n if (address) isValid = this.checkAddressValidation(address);\n }\n\n if (!this._activeAddress || !isValid) {\n this.getSuperControl?.setErrors({\n ...this.getSuperControl?.errors,\n invalid: true,\n });\n } else {\n const currentErrors = { ...this.getSuperControl?.errors };\n delete currentErrors['invalid'];\n this.getSuperControl?.setErrors(\n Object.keys(currentErrors).length > 0 ? currentErrors : null,\n );\n }\n\n this.isLoading.set(false);\n this.ref.detectChanges();\n },\n });\n }\n\n public onSelectDropdown(name: string | null): void {\n const address = this.addressList.find((item) => item.name === name);\n this._activeAddress = address\n ? { ...address, address: address?.name }\n : null;\n\n this.isParkingAddressSelected = this._activeAddress?.parkingAddress?.length\n ? true\n : false;\n\n if (address?.name) {\n if (this.searchLayers?.[0] === InputAddressLayersStringEnum.ADDRESS) {\n const isValid = this.checkAddressValidation(address.name);\n this.isLoading.set(false);\n\n if (isValid) {\n this.getAddressData(address.name);\n this.getSuperControl?.setValue(address.name);\n const currentErrors = { ...this.getSuperControl?.errors };\n delete currentErrors['invalid'];\n this.getSuperControl?.setErrors(\n Object.keys(currentErrors).length > 0 ? currentErrors : null,\n );\n // Disable validation after valid selection - re-enables on next user input\n this.allowValidation = false;\n } else {\n this.getSuperControl?.setErrors({\n ...this.getSuperControl?.errors,\n invalid: true,\n });\n }\n } else {\n this.getAddressData(address.name);\n this.getSuperControl?.setValue(address.name);\n const currentErrors = { ...this.getSuperControl?.errors };\n delete currentErrors['invalid'];\n this.getSuperControl?.setErrors(\n Object.keys(currentErrors).length > 0 ? currentErrors : null,\n );\n // Disable validation after valid selection - re-enables on next user input\n this.allowValidation = false;\n }\n } else {\n this.onClearInputEvent();\n this.currentAddressData = null;\n this.addressList = [];\n }\n }\n\n public onClearInputEvent(): void {\n this.isLoading.set(false);\n this.currentAddressData = null;\n this.addressList = [];\n this.getSuperControl?.setValue(null);\n this._activeAddress = null;\n this.chosenFromDropdown = false;\n if (this.config()?.required) {\n setTimeout(() => {\n this.getSuperControl?.setErrors({\n ...this.getSuperControl?.errors,\n required: true,\n });\n }, 300);\n }\n const addressData = {\n address: {},\n valid: false,\n longLat: {},\n };\n this.selectedAddress.emit(addressData);\n }\n\n public getAddressData(address: string): void {\n this.requestSent = true;\n\n this.sentAddressValue.emit(address);\n }\n\n public emitOnClear(): void {\n this.onClear.emit();\n }\n\n ngOnDestroy(): void {\n this.controlSubscription$.next();\n this.controlSubscription$.complete();\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","@let searching = this.getSuperControl?.value?.length >= 3;\n\n<cai-input\n [formControl]=\"getSuperControl\"\n [id]=\"id()\"\n [config]=\"inputConfig()\"\n [options]=\"addressList\"\n (onSelectionChange)=\"onSelectDropdown($event)\"\n [hideValidation]=\"hideValidation()\"\n [showNoResults]=\"searching && !_activeAddress && !isLoading()\"\n [isLoading]=\"isLoading()\"\n (onClear)=\"emitOnClear()\"\n></cai-input>\n","import { Component, input, output } from '@angular/core';\nimport { NgbTooltip } from '@ng-bootstrap/ng-bootstrap';\n\n// Interfaces\nimport { SelectedBusinessField } from './interfaces';\n\n// Components\nimport { CopyComponent } from '../copy/copy.component';\nimport { eAlignment, eGeneralActions } from '../../enums';\nimport { SvgIconComponent } from 'angular-svg-icon';\n\n@Component({\n selector: 'cai-selected-business-field',\n templateUrl: './selected-business-field.component.html',\n styleUrl: './selected-business-field.component.scss',\n imports: [NgbTooltip, CopyComponent, SvgIconComponent],\n})\nexport class SelectedBusinessFieldComponent {\n business = input<SelectedBusinessField>({});\n onAction = output<eGeneralActions>();\n\n public eGeneralActions = eGeneralActions;\n public eAlignment = eAlignment;\n\n public handleAction(action: eGeneralActions) {\n this.onAction.emit(action);\n }\n}\n","@let isDisabled = business().isDisabled; @let email = business().email;\n@let phone = business().phone; @let address = business().address;\n@let name = business().name; @let isFavorite = business().isFavorite;\n@let isRequired = business().isRequired; @let label = business().label;\n\n<div class=\"container\" [class.disabled]=\"isDisabled\">\n <p class=\"label\" [class.required]=\"isRequired\">\n {{ label }}\n </p>\n <div class=\"title-row\">\n <div class=\"d-flex align-items-center gap-1\">\n <p class=\"title\">{{ name }}</p>\n\n @if (isFavorite) {\n <svg-icon [name]=\"'cai-favorite'\" class=\"icon\"></svg-icon>\n }\n </div>\n\n @if (!isDisabled) {\n <div class=\"d-flex align-items-center gap-1\">\n <button\n (click)=\"handleAction(eGeneralActions.EDIT)\"\n [disabled]=\"isDisabled\"\n ngbTooltip=\"Edit\"\n [openDelay]=\"600\"\n tooltipClass=\"tooltip input-tooltip\"\n [placement]=\"'top'\"\n [container]=\"'body'\"\n [autoClose]=\"true\"\n [class]=\"'action-button'\"\n >\n <svg-icon [name]=\"'cai-edit'\" class=\"bg-icon\"></svg-icon>\n </button>\n <button\n (click)=\"handleAction(eGeneralActions.CLEAR)\"\n [disabled]=\"isDisabled\"\n ngbTooltip=\"Cancel\"\n [openDelay]=\"600\"\n tooltipClass=\"tooltip input-tooltip\"\n [placement]=\"'top'\"\n [container]=\"'body'\"\n [autoClose]=\"true\"\n [class]=\"'action-button'\"\n >\n <svg-icon [name]=\"'cai-cancel'\" class=\"bg-icon\"></svg-icon>\n </button>\n </div>\n }\n </div>\n @if (phone || email || address) {\n <div class=\"details-row\">\n @let isDisabledColor = isDisabled ? null : \"blue\";\n @if (phone) {\n <div class=\"detail-container\">\n <cai-copy\n [alignment]=\"eAlignment.LEFT\"\n [value]=\"phone\"\n [copyArea]=\"'full'\"\n [icon]=\"'cai-phone'\"\n [iconSize]=\"14\"\n [iconColor]=\"isDisabledColor\"\n [tooltipClass]=\"'tooltip-m-t-4'\"\n >\n <p class=\"detail\">{{ phone }}</p>\n </cai-copy>\n </div>\n }\n @if (email) {\n <div class=\"detail-container\">\n <cai-copy\n [alignment]=\"eAlignment.LEFT\"\n [value]=\"email\"\n [copyArea]=\"'full'\"\n [icon]=\"'cai-email'\"\n [iconSize]=\"14\"\n [iconColor]=\"isDisabledColor\"\n [tooltipClass]=\"'tooltip-m-t-4'\"\n >\n <p class=\"detail\">{{ email }}</p>\n </cai-copy>\n </div>\n }\n @if (address) {\n <div class=\"detail-container\">\n <cai-copy\n [alignment]=\"eAlignment.LEFT\"\n [value]=\"address\"\n [copyArea]=\"'full'\"\n [icon]=\"'cai-address'\"\n [iconSize]=\"14\"\n [iconColor]=\"isDisabledColor\"\n [tooltipClass]=\"'tooltip-m-t-4'\"\n >\n <p class=\"detail\">{{ address }}</p>\n </cai-copy>\n </div>\n }\n </div>\n }\n</div>\n","export enum ReviewType{\n Modal = \"Modal\",\n Table = \"Table\",\n Details = \"Details\"\n}","import { Pipe, PipeTransform } from '@angular/core';\nimport { DatePipe } from '@angular/common';\n@Pipe({\n name: 'dateFormating'\n})\nexport class DateFormatingPipe implements PipeTransform {\n\n transform(value: Date | string | number): string {\n if (!value) return '';\n\n const date = new Date(value);\n const now = new Date();\n\n const today = new Date(now.getFullYear(), now.getMonth(), now.getDate());\n const yesterday = new Date(today);\n yesterday.setDate(today.getDate() - 1);\n\n const targetDate = new Date(date.getFullYear(), date.getMonth(), date.getDate());\n\n const timeOptions: Intl.DateTimeFormatOptions = {\n hour: '2-digit',\n minute: '2-digit',\n hour12: true\n };\n const timeString = date.toLocaleTimeString([], timeOptions);\n\n if (targetDate.getTime() === today.getTime()) {\n return `Today, ${timeString}`;\n } else if (targetDate.getTime() === yesterday.getTime()) {\n return `Yesterday, ${timeString}`;\n } else {\n const dateOptions: Intl.DateTimeFormatOptions = {\n month: '2-digit',\n day: '2-digit',\n year: '2-digit'\n };\n const dateString = date.toLocaleDateString([], dateOptions);\n return `${dateString}, ${timeString}`;\n }\n }\n \n}\n","import { IReview } from './../../../models/review.model';\nimport {\n Component,\n computed,\n EventEmitter,\n Input,\n input,\n Output,\n signal,\n} from '@angular/core';\nimport { SvgIconComponent } from 'angular-svg-icon';\nimport { AvatarComponent } from '../../avatar/avatar.component';\nimport {\n NgbModule,\n NgbTooltip,\n NgbTooltipModule,\n} from '@ng-bootstrap/ng-bootstrap';\nimport { ReviewType } from '../enums/review-type.enum';\nimport { DateFormatingPipe } from '../pipes/date-formating.pipe';\n\n@Component({\n selector: 'cai-single-review',\n imports: [\n SvgIconComponent,\n AvatarComponent,\n NgbModule,\n NgbTooltipModule,\n ],\n providers: [DateFormatingPipe],\n templateUrl: './single-review.component.html',\n styleUrl: './single-review.component.scss',\n})\nexport class SingleReviewComponent {\n constructor(private dateFormating: DateFormatingPipe) {}\n\n //enum\n public ReviewType = ReviewType;\n\n //signals\n newTime = signal<string>('');\n currentContent = signal<string>('');\n expanded = signal<boolean>(false);\n canExpand = signal<boolean>(true);\n editing = signal<boolean>(false);\n edited = signal<boolean>(false);\n confirmed: boolean = true;\n canceled: boolean = false;\n\n //inputs\n @Input({ required: true }) type!: string;\n @Input({ required: true }) singleReview!: IReview;\n\n //outputs\n @Output() deleteReview = new EventEmitter<number>();\n @Output() onAddedReview = new EventEmitter<{\n review: IReview;\n }>();\n\n @Output() onEditedReview = new EventEmitter<{\n review: IReview;\n edited: boolean;\n }>();\n\n ngOnInit(): void {\n this.currentContent.set(this.singleReview.comment);\n if (this.singleReview.createdAt && this.singleReview.updatedAt === '') {\n const formatted = this.dateFormating.transform(\n this.singleReview.createdAt\n );\n\n this.newTime.set(formatted || '');\n }\n if (this.singleReview.updatedAt) {\n const formatted = this.dateFormating.transform(\n this.singleReview.updatedAt\n );\n this.newTime.set(formatted || '');\n }\n if (this.singleReview.isItCurrentCompanyUser) {\n if (!this.singleReview.comment && !this.singleReview.thumb) {\n this.editing.set(true);\n }\n }\n if (this.singleReview.comment.length > 50) {\n this.canExpand.set(true);\n } else {\n this.canExpand.set(false);\n }\n }\n\n onRate(prop: string): void {\n this.singleReview.thumb = prop;\n }\n\n onEdit(): void {\n this.editing.set(true);\n this.edited.set(true);\n this.singleReview.isEdited = true;\n }\n\n onSaveChanges(): void {\n if (!this.singleReview.thumb && !this.singleReview.comment) return;\n if (this.edited()) this.singleReview.isEdited = true;\n\n const currentTime: Date = new Date();\n const formattedTime = this.dateFormating.transform(currentTime);\n this.newTime.set(formattedTime);\n\n if (this.singleReview.isEdited) {\n this.onEditedReview.emit({\n review: this.singleReview,\n edited: this.edited(),\n });\n } else {\n this.onAddedReview.emit({\n review: this.singleReview,\n });\n }\n this.editing.set(false);\n }\n\n onChangeContent(event: Event): void {\n event.preventDefault();\n const divElement = event.target as HTMLDivElement;\n const newValue = divElement.textContent || '';\n this.singleReview.comment = newValue;\n }\n\n onDelete(): void {\n this.deleteReview.emit(this.singleReview.reviewId);\n }\n\n onExpandToggle(): void {\n this.expanded.set(!this.expanded());\n }\n\n renderedContent = computed(() => {\n const value = this.singleReview.comment?.trim() || '';\n if (this.editing()) return value;\n if (this.expanded()) return value;\n return value.length > 50 ? value.substring(0, 50) + '...' : value;\n });\n\n onCancelReview(): void {\n this.deleteReview.emit();\n }\n\n limitLength(event: KeyboardEvent) {\n const target = event.target as HTMLElement;\n const text = target.innerText || '';\n\n if (\n text.length > 140 &&\n event.key !== 'Backspace' &&\n event.key !== 'Delete'\n )\n event.preventDefault();\n }\n}\n","@let avatarFile = singleReview.companyUser?.avatarFile; @let driver =\navatarFile?.driver; @let companyUser = this.singleReview.companyUser; @let\ncurrentUser = this.singleReview.isItCurrentCompanyUser; @let comment =\nthis.singleReview.comment; @let edited = this.singleReview.isEdited; @let\nactiveLike = this.singleReview.thumb === 'like'; @let activeDislike =\nthis.singleReview.thumb === 'dislike'; @let currentRating =\nthis.singleReview.thumb;\n@let isTable = type === ReviewType.Table;\n@let isDetails = type === ReviewType.Details;\n@let isModal = type === ReviewType.Modal;\n<div\n class=\"review-wrapper\"\n [class]=\"{\n 'not-editing': !editing(),\n 'table-type': isTable,\n 'modal-type': isModal,\n 'details-type': isDetails\n }\"\n (click)=\"onExpandToggle()\"\n>\n @if(isModal){\n <div class=\"upper\">\n <div class class=\"info\">\n <cai-avatar\n [driver]=\"driver!\"\n [size]=\"avatarFile!.size\"\n [rounded]=\"avatarFile!.rounded\"\n ></cai-avatar>\n <span class=\"name\">{{ companyUser?.fullName }}</span>\n @if(currentUser && !editing()){\n <span class=\"personal\">(You)</span>\n\n } @if(!editing() && currentRating){\n <span class=\"dot\">•</span>\n\n <svg-icon\n [name]=\"currentRating === 'like' ? 'cai-like' : 'cai-dislike'\"\n [class.current-rating-like]=\"currentRating === 'like'\"\n [class.current-rating-dislike]=\"currentRating === 'dislike'\"\n ></svg-icon>\n } @if(editing()){\n <span class=\"description\">{{\n !edited ? \"• Posting Publicly\" : \"• Edit Review\"\n }}</span>\n } @if(!editing()){\n <span class=\"edit-time\">{{ newTime() }}</span>\n @if(edited){\n <span class=\"edited\">• Edited</span>\n } }\n </div>\n\n @if(editing()){\n <div class=\"rating\">\n <div\n class=\"svg-group\"\n [ngbTooltip]=\"activeLike ? 'Remove' : 'Like'\"\n triggers=\"mouseenter:mouseleave\"\n tabindex=\"0\"\n tooltipClass=\"tooltip tooltip-m-b-2\"\n placement=\"top\"\n >\n <svg-icon\n name=\"cai-like\"\n class=\"like-icon\"\n (click)=\"onRate('like')\"\n [class.like-active]=\"activeLike\"\n ></svg-icon>\n </div>\n\n <div\n class=\"svg-group\"\n [ngbTooltip]=\"activeDislike ? 'Remove' : 'Dislike'\"\n triggers=\"mouseenter:mouseleave\"\n tabindex=\"0\"\n tooltipClass=\"tooltip tooltip-m-b-2\"\n placement=\"top\"\n >\n <svg-icon\n name=\"cai-dislike\"\n class=\"dislike-icon\"\n (click)=\"onRate('dislike')\"\n [class.dislike-active]=\"activeDislike\"\n >\n </svg-icon>\n </div>\n\n <div class=\"separator\"></div>\n <div\n class=\"svg-group\"\n ngbTooltip=\"Post Review\"\n triggers=\"mouseenter:mouseleave\"\n tabindex=\"0\"\n tooltipClass=\"tooltip tooltip-m-b-2\"\n placement=\"top\"\n >\n <svg-icon\n name=\"cai-checkmark\"\n class=\"checkmark-icon\"\n (click)=\"onSaveChanges()\"\n ></svg-icon>\n </div>\n\n <div\n class=\"svg-group\"\n ngbTooltip=\"Cancel\"\n triggers=\"mouseenter:mouseleave\"\n tabindex=\"0\"\n tooltipClass=\"tooltip tooltip-m-b-2\"\n placement=\"top\"\n >\n <svg-icon\n name=\"cai-cancel\"\n class=\"cancel-icon\"\n (click)=\"onCancelReview()\"\n ></svg-icon>\n </div>\n </div>\n }@else if(currentUser){\n <div class=\"controls\">\n <div\n class=\"svg-group\"\n ngbTooltip=\"Edit Review\"\n triggers=\"mouseenter:mouseleave\"\n tabindex=\"0\"\n tooltipClass=\"tooltip tooltip-m-b-2\"\n placement=\"top\"\n >\n <svg-icon\n name=\"cai-edit\"\n (click)=\"onEdit()\"\n class=\"pencil-icon\"\n ></svg-icon>\n </div>\n <div\n class=\"svg-group\"\n ngbTooltip=\"Delete Review\"\n triggers=\"mouseenter:mouseleave\"\n tabindex=\"0\"\n tooltipClass=\"tooltip tooltip-m-b-2\"\n placement=\"top\"\n >\n <svg-icon\n name=\"cai-delete\"\n class=\"trash-icon\"\n (click)=\"onDelete()\"\n ></svg-icon>\n </div>\n </div>\n }\n </div>\n @if(comment || currentContent() || editing()){\n <div\n class=\"lower\"\n [contentEditable]=\"editing() ? 'true' : 'false'\"\n data-placeholder=\"Share details of your own experience...\"\n (input)=\"onChangeContent($event)\"\n [innerHTML]=\"renderedContent()\"\n (keydown)=\"limitLength($event)\"\n ></div>\n } }@else if(isTable || isDetails) {\n <div class=\"upper\">\n <div class class=\"info\">\n <cai-avatar\n [driver]=\"avatarFile!.driver\"\n [size]=\"avatarFile!.size\"\n [rounded]=\"avatarFile!.rounded\"\n ></cai-avatar>\n <div class=\"column\">\n <div class=\"upper-row\">\n <span class=\"name\">{{ companyUser?.fullName }}</span>\n @if(currentUser && !editing()){\n <span class=\"personal\">(Me)</span>\n\n } @if(!editing()){\n <svg-icon\n [name]=\"\n currentRating === 'like'\n ? 'cai-like'\n : currentRating === 'dislike'\n ? 'cai-dislike'\n : ''\n \"\n [class.current-rating-like]=\"currentRating === 'like'\"\n [class.current-rating-dislike]=\"currentRating === 'dislike'\"\n ></svg-icon>\n }\n </div>\n <div class=\"lower-row\">\n @if(editing()){\n <span class=\"description\">{{\n !edited ? \"Posting Publicly\" : \"Edit Review\"\n }}</span>\n } @if(!editing()){\n <span class=\"edit-time\">{{ newTime() }}</span>\n @if(edited){\n <span class=\"edited\">• Edited</span>\n } }\n </div>\n </div>\n </div>\n\n @if(editing()){\n <div class=\"rating\">\n <div\n class=\"svg-group\"\n [ngbTooltip]=\"activeLike && isDetails ? 'Remove' : activeLike && isTable ? 'Remove Like' : 'Like'\"\n triggers=\"mouseenter:mouseleave\"\n tabindex=\"0\"\n [tooltipClass]=\"isDetails ? 'tooltip tooltip-m-b-2' : 'tooltip tooltip-m-b-2 tooltip-inverse'\"\n placement=\"top\"\n >\n <svg-icon\n name=\"cai-like\"\n class=\"like-icon\"\n (click)=\"onRate('like')\"\n [class.like-active]=\"currentRating === 'like'\"\n ></svg-icon>\n </div>\n\n <div\n class=\"svg-group\"\n [ngbTooltip]=\"activeDislike && isDetails ? 'Remove' : activeDislike && isTable ? 'Remove Dislike' : 'Dislike'\"\n triggers=\"mouseenter:mouseleave\"\n tabindex=\"0\"\n [tooltipClass]=\"isDetails ? 'tooltip tooltip-m-b-2' : 'tooltip tooltip-m-b-2 tooltip-inverse'\"\n placement=\"top\"\n >\n <svg-icon\n name=\"cai-dislike\"\n class=\"dislike-icon\"\n (click)=\"onRate('dislike')\"\n [class.dislike-active]=\"currentRating === 'dislike'\"\n >\n </svg-icon>\n </div>\n\n <div class=\"separator-table\"></div>\n <div\n class=\"svg-group\"\n ngbTooltip=\"Post Review\"\n triggers=\"mouseenter:mouseleave\"\n tabindex=\"0\"\n [tooltipClass]=\"isDetails ? 'tooltip tooltip-m-b-2' : 'tooltip tooltip-m-b-2 tooltip-inverse'\"\n placement=\"top\"\n >\n <svg-icon\n name=\"cai-checkmark\"\n class=\"checkmark-icon\"\n (click)=\"onSaveChanges()\"\n ></svg-icon>\n </div>\n\n <div\n class=\"svg-group\"\n ngbTooltip=\"Cancel\"\n triggers=\"mouseenter:mouseleave\"\n tabindex=\"0\"\n [tooltipClass]=\"isDetails ? 'tooltip tooltip-m-b-2' : 'tooltip tooltip-m-b-2 tooltip-inverse'\"\n placement=\"top\"\n >\n <svg-icon\n name=\"cai-cancel\"\n class=\"cancel-icon\"\n (click)=\"onCancelReview()\"\n ></svg-icon>\n </div>\n </div>\n }@else if(canExpand() && !expanded()){\n <svg-icon name=\"cai-expand\" class=\"expand-icon\" />\n }@else if(canExpand() && !currentUser && expanded()){\n <svg-icon name=\"cai-expand\" class=\"collapse-icon\" />\n } @else if(currentUser){\n <div class=\"controls\">\n <div\n class=\"svg-group\"\n ngbTooltip=\"Edit\"\n triggers=\"mouseenter:mouseleave\"\n tabindex=\"0\"\n [tooltipClass]=\"isDetails ? 'tooltip tooltip-m-b-2' : 'tooltip tooltip-m-b-2 tooltip-inverse'\"\n placement=\"top\"\n >\n <svg-icon\n name=\"cai-edit\"\n (click)=\"onEdit()\"\n class=\"pencil-icon\"\n ></svg-icon>\n </div>\n <div\n class=\"svg-group\"\n ngbTooltip=\"Delete Review\"\n triggers=\"mouseenter:mouseleave\"\n tabindex=\"0\"\n [tooltipClass]=\"isDetails ? 'tooltip tooltip-m-b-2' : 'tooltip tooltip-m-b-2 tooltip-inverse'\"\n placement=\"top\"\n >\n <svg-icon\n name=\"cai-delete\"\n class=\"trash-icon\"\n (click)=\"onDelete()\"\n ></svg-icon>\n </div>\n </div>\n }\n </div>\n @if(comment || currentContent() || editing()){\n <div\n class=\"lower\"\n [contentEditable]=\"editing() ? 'true' : 'false'\"\n data-placeholder=\"Share details of your own experience...\"\n (input)=\"onChangeContent($event)\"\n [innerHTML]=\"renderedContent()\"\n (keydown)=\"limitLength($event)\"\n ></div>\n }}\n</div>\n@if(isTable && currentUser && !editing()){\n<div class=\"bottom-divider-light\"></div>\n}\n@if(currentUser && isDetails){\n<div class=\"bottom-divider-dark\"></div>\n}\n","export enum FilterType{\n LIKES = \"likes\",\n DISLIKES = \"dislikes\",\n REVIEWS = \"reviews\",\n ALL = \"all\",\n RATING = \"rating\"\n}","import { IReview } from './../../../models/review.model';\nimport { InputComponent } from './../../input/input.component';\nimport {\n Component,\n Input,\n input,\n signal,\n OnInit,\n OnChanges,\n SimpleChanges,\n Output,\n EventEmitter,\n} from '@angular/core';\nimport { SvgIconComponent } from 'angular-svg-icon';\nimport { SingleReviewComponent } from '../single-review/single-review.component';\nimport { CommonModule } from '@angular/common';\nimport { NgbTooltipModule } from '@ng-bootstrap/ng-bootstrap';\nimport { ReviewType } from '../enums/review-type.enum';\nimport { FilterType } from '../enums/filter-type.enum';\nimport { Filter } from '../../input-address/stories/address.stories';\n\n@Component({\n selector: 'cai-review-modal',\n standalone: true,\n imports: [\n SvgIconComponent,\n SingleReviewComponent,\n CommonModule,\n NgbTooltipModule,\n InputComponent,\n ],\n templateUrl: './review-modal.component.html',\n styleUrl: './review-modal.component.scss',\n})\nexport class ReviewModalComponent implements OnInit, OnChanges {\n //enums\n public ReviewType = ReviewType;\n public FilterType = FilterType;\n\n ngOnInit(): void {\n this.initializeReviewsData();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['ratingReviews']) {\n this.initializeReviewsData();\n }\n }\n\n @Input() ratingReviews!: IReview[];\n @Input() modaltype!: string;\n @Input() titleInput!: string;\n\n @Output() reviewDeleted = new EventEmitter<void>();\n\n activeLikes = signal<boolean>(false);\n activeDislikes = signal<boolean>(false);\n activeReviews = signal<boolean>(false);\n disabled = signal<boolean>(false);\n addingReview = signal<boolean>(false);\n\n presentReviews: IReview[] = [];\n\n testReview: IReview = {\n ratingId: 5,\n thumb: '',\n reviewId: 5,\n comment: '',\n isEdited: false,\n companyUserId: 5,\n isItCurrentCompanyUser: true,\n createdAt: '',\n updatedAt: '',\n companyUser: {\n id: 5,\n userId: 5,\n fullName: 'James Garcia',\n avatarFile: {\n driver: {\n id: 0,\n firstName: 'James',\n lastName: 'Garcia',\n avatarFile: undefined,\n avatarColor: 'Yellow',\n },\n size: 22,\n rounded: true,\n inverse: false,\n },\n departmentId: 2,\n },\n };\n\n countLikes: number = 0;\n countDislikes: number = 0;\n countReviews: number = 0;\n hasPersonalReview: boolean = false;\n currentActiveFilter: string = FilterType.ALL;\n\n onReturnMost(): string {\n if (this.countLikes > this.countDislikes) {\n return 'likes';\n } else if (this.countDislikes > this.countLikes) {\n return 'dislikes';\n }\n return '';\n }\n\n /**\n * Adds a new empty review to the `presentReviews` list and sets `addingReview` to `true`.\n * This review is marked as \"personal\" and pre-filled with basic user data.\n */\n onAddReview(): void {\n this.addingReview.set(true);\n this.disabled.set(true);\n this.hasPersonalReview = true;\n const newId =\n this.ratingReviews.length > 0\n ? Math.max(...this.ratingReviews.map((r) => r.reviewId)) + 1\n : 1;\n const date = new Date();\n this.testReview = {\n ...this.testReview,\n reviewId: newId,\n comment: '',\n thumb: '',\n isEdited: false,\n createdAt: date.toString(),\n updatedAt: '',\n };\n }\n\n onEditedReview(ev: { review: IReview; edited: boolean }) {\n const index = this.ratingReviews.findIndex(\n (r) => r.reviewId === ev.review.reviewId\n );\n if (index > -1) {\n this.ratingReviews[index] = ev.review;\n this.presentReviews = [...this.ratingReviews];\n this.initializeReviewsData();\n }\n }\n\n onGetReview(ev: { review: IReview }) {\n if (ev.review.isEdited) {\n const index = this.ratingReviews.findIndex(\n (r) => r.reviewId === ev.review.reviewId\n );\n if (index > -1) {\n this.ratingReviews[index] = ev.review;\n }\n } else {\n this.ratingReviews.unshift(ev.review);\n }\n this.addingReview.set(false);\n this.presentReviews = [...this.ratingReviews];\n this.initializeReviewsData();\n }\n\n handleSearch(event: string | number | null) {\n if (!event) {\n this.presentReviews = [...this.ratingReviews];\n return;\n }\n const search = event.toString().toLowerCase().trim();\n\n this.presentReviews = this.ratingReviews.filter(\n (r) =>\n r.companyUser.fullName.toLowerCase().includes(search) ||\n r.comment.toLowerCase().includes(search)\n );\n }\n\n handleClear(event: void) {\n this.presentReviews = [...this.ratingReviews];\n }\n\n /**\n * Initializes review data when the component is initialized or when the `reviews` input changes.\n * It copies the original reviews array, resets counters, calculates new counts, and\n * sets the `disabled` signal if a personal review already exists.\n * @private\n */\n private initializeReviewsData(): void {\n if (this.ratingReviews) {\n this.presentReviews = [...this.ratingReviews];\n this.onCheckPersonal();\n this.resetCounts();\n this.calculateReviewCounts();\n this.disabled.set(\n this.ratingReviews.some((x) => x.isItCurrentCompanyUser === true)\n );\n }\n }\n\n /**\n * Resets the counts for likes, dislikes, and written reviews to zero.\n * @private\n */\n private resetCounts(): void {\n this.countLikes = 0;\n this.countDislikes = 0;\n this.countReviews = 0;\n }\n\n /**\n * Iterates through the `reviews` array and calculates the total number of likes,\n * dislikes, and written reviews (those with a non-empty `value`).\n * @private\n */\n private calculateReviewCounts(): void {\n this.ratingReviews.forEach((review) => {\n if (review.thumb === 'like') {\n this.countLikes++;\n } else if (review.thumb === 'dislike') {\n this.countDislikes++;\n }\n if (review.comment && review.comment.length > 0) {\n this.countReviews++;\n }\n });\n }\n\n onSwitchActive(value: string): void {\n this.currentActiveFilter = value;\n }\n\n /**\n * Changes the displayed reviews in `presentReviews` based on the selected type.\n * It filters the original `reviews` array to show only likes, dislikes,\n * written reviews, or all reviews.\n * @param type The type of reviews to display: 'likes', 'dislikes', 'reviews' (only written), or 'all'.\n */\n onChangePresentReviews(type: FilterType): void {\n this.presentReviews = [];\n switch (type) {\n case FilterType.LIKES:\n this.ratingReviews.forEach((x) => {\n if (x.thumb == 'like') {\n this.presentReviews.push(x);\n }\n });\n break;\n case FilterType.DISLIKES:\n this.ratingReviews.forEach((x) => {\n if (x.thumb == 'dislike') {\n this.presentReviews.push(x);\n }\n });\n break;\n case FilterType.REVIEWS:\n this.onSwitchActive(FilterType.REVIEWS);\n this.ratingReviews.forEach((x) => {\n if (x.comment.length > 0) {\n this.presentReviews.push(x);\n }\n });\n break;\n case FilterType.RATING:\n this.onSwitchActive(FilterType.RATING);\n this.ratingReviews.forEach((x) => {\n if (x.thumb == 'like' || x.thumb == 'dislike') {\n this.presentReviews.push(x);\n }\n });\n break;\n case FilterType.ALL:\n this.onSwitchActive(FilterType.ALL);\n this.presentReviews = [...this.ratingReviews];\n break;\n }\n }\n\n /**\n * Updates the value and edit time of an existing review in the `presentReviews` list.\n * Sets the `edited` flag to `true` for the modified review.\n * @param updatedData An object containing the review's ID, the new text value, and the new edit time.\n */\n onChangeValue(updatedData: {\n id: number;\n value: string;\n newTime: string;\n }): void {\n for (let i = 0; i < this.presentReviews.length; i++) {\n if (this.presentReviews[i].reviewId === updatedData.id) {\n this.presentReviews[i].comment = updatedData.value;\n this.presentReviews[i].updatedAt = updatedData.newTime;\n this.presentReviews[i].isEdited = true;\n break;\n }\n }\n }\n\n /**\n * Initiates the review deletion process.\n * Currently, it logs a message to the console and emits the `reviewDeleted` event.\n * The logic for actual removal from `presentReviews` is commented out.\n * @param id The ID of the review to be deleted.\n */\n onDeleteReview(id: number): void {\n this.ratingReviews = this.ratingReviews.filter(\n (review) => review.reviewId !== id\n );\n this.addingReview.set(false);\n this.hasPersonalReview = false;\n this.disabled.set(false);\n\n this.initializeReviewsData();\n }\n\n onCheckPersonal(): void {\n this.ratingReviews.forEach((x) => {\n if (x.isItCurrentCompanyUser) {\n this.hasPersonalReview = true;\n return;\n }\n });\n }\n\n onSelectFilter(type: FilterType) {\n switch (type) {\n case FilterType.LIKES:\n this.activeDislikes.set(false);\n this.activeReviews.set(false);\n this.activeLikes.set(true);\n this.onChangePresentReviews(FilterType.LIKES);\n break;\n case FilterType.DISLIKES:\n this.activeDislikes.set(true);\n this.activeReviews.set(false);\n this.activeLikes.set(false);\n this.onChangePresentReviews(FilterType.DISLIKES);\n break;\n case FilterType.REVIEWS:\n this.activeDislikes.set(false);\n this.activeReviews.set(true);\n this.activeLikes.set(false);\n this.onChangePresentReviews(FilterType.REVIEWS);\n break;\n }\n }\n\n onCancelFilter(event: MouseEvent, type: FilterType) {\n event.stopPropagation();\n switch (type) {\n case FilterType.LIKES:\n this.activeLikes.set(false);\n this.onChangePresentReviews(FilterType.ALL);\n break;\n case FilterType.DISLIKES:\n this.activeDislikes.set(false);\n this.onChangePresentReviews(FilterType.ALL);\n break;\n case FilterType.REVIEWS:\n this.activeReviews.set(false);\n this.onChangePresentReviews(FilterType.ALL);\n break;\n }\n }\n}\n","@let reviewsLength = presentReviews.length;\n@let isTable = modaltype === ReviewType.Table;\n@let isModal = modaltype === ReviewType.Modal;\n@let isDetails = modaltype === ReviewType.Details;\n\n<div\n [class]=\"{\n 'modal-wrapper': isModal,\n 'table-wrapper': isTable,\n 'details-wrapper': isDetails,\n }\"\n>\n <div class=\"main-window\">\n <!-- FILTER BOX -->\n <div class=\"box\">\n <div class=\"filter\">\n <div class=\"column\">\n <div class=\"rating_review\">\n @if(!isDetails){\n <div class=\"left-side\">\n <p class=\"count-heading\">Rating & Review</p>\n <div class=\"circle\">\n {{ countReviews }}\n </div>\n @if(isModal && reviewsLength > 0){\n <div class=\"y-divider\"></div>\n }\n </div>\n } @if(!isTable){\n <div class=\"counter\">\n <div\n (click)=\"onSelectFilter(FilterType.LIKES)\"\n [class]=\"{\n 'filter-group': true,\n 'active-group': activeLikes(),\n 'non-active-group': !activeLikes(),\n 'empty-state': countLikes === 0\n }\"\n [ngbTooltip]=\"activeLikes() ? 'Remove Filter' : 'Filter Likes'\"\n triggers=\"mouseenter:mouseleave\"\n tabindex=\"0\"\n tooltipClass=\"tooltip tooltip-m-b-2\"\n placement=\"bottom\"\n >\n <svg-icon\n name=\"cai-like\"\n class=\"like-icon\"\n [class.active]=\"activeLikes()\"\n [class.most-likes]=\"onReturnMost() === FilterType.LIKES\"\n ></svg-icon>\n <svg-icon\n name=\"cai-cancel\"\n class=\"cancel-icon\"\n (click)=\"onCancelFilter($event, FilterType.LIKES)\"\n ></svg-icon>\n <span class=\"count\">{{ countLikes }}</span>\n </div>\n <div\n (click)=\"onSelectFilter(FilterType.DISLIKES)\"\n [class]=\"{\n 'filter-group': true,\n 'active-group': activeDislikes(),\n 'non-active-group': !activeDislikes(),\n 'empty-state': countDislikes === 0\n }\"\n [ngbTooltip]=\"\n activeDislikes() ? 'Remove Filter' : 'Filter Dislikes'\n \"\n triggers=\"mouseenter:mouseleave\"\n tabindex=\"0\"\n tooltipClass=\"tooltip tooltip-m-b-2\"\n placement=\"bottom\"\n >\n <svg-icon\n name=\"cai-dislike\"\n [class.active]=\"activeDislikes()\"\n [class.most-dislikes]=\"onReturnMost() === FilterType.DISLIKES\"\n class=\"dislike-icon\"\n ></svg-icon>\n <svg-icon\n name=\"cai-cancel\"\n class=\"cancel-icon\"\n (click)=\"onCancelFilter($event, FilterType.DISLIKES)\"\n ></svg-icon>\n <span class=\"count\">{{ countDislikes }}</span>\n </div>\n <div\n (click)=\"onSelectFilter(FilterType.REVIEWS)\"\n [class]=\"{\n 'filter-group': true,\n 'active-group': activeReviews(),\n 'non-active-group': !activeReviews(),\n 'empty-state': countReviews === 0\n }\"\n [ngbTooltip]=\"\n activeReviews() ? 'Remove Filter' : 'Filter Reviews'\n \"\n triggers=\"mouseenter:mouseleave\"\n tabindex=\"0\"\n tooltipClass=\"tooltip tooltip-m-b-2\"\n placement=\"bottom\"\n >\n <svg-icon\n name=\"cai-edit2\"\n [class.active]=\"activeReviews()\"\n class=\"pencil-icon\"\n ></svg-icon>\n\n <svg-icon\n name=\"cai-cancel\"\n class=\"cancel-icon\"\n (click)=\"onCancelFilter($event, FilterType.REVIEWS)\"\n ></svg-icon>\n\n <span class=\"count\">{{ countReviews }}</span>\n </div>\n </div>\n }\n </div>\n @if(ratingReviews && reviewsLength > 0){\n <div class=\"date-group\">\n <span>Date</span>\n <svg-icon name=\"cai-sort-descending\"></svg-icon>\n </div>\n\n } @if(isModal || isDetails){\n <div\n class=\"filter-group\"\n [ngStyle]=\"{\n display: addingReview() && reviewsLength === 0 ? 'none' : 'flex'\n }\"\n ngbTooltip=\"Add New\"\n triggers=\"mouseenter:mouseleave\"\n tabindex=\"0\"\n tooltipClass=\"tooltip tooltip-m-b-2\"\n placement=\"bottom\"\n >\n <svg-icon\n name=\"cai-plus\"\n class=\"plus-icon\"\n (click)=\"onAddReview()\"\n [class.disabled]=\"disabled()\"\n ></svg-icon>\n </div>\n }\n </div>\n @if(isDetails){\n <div class=\"bottom-divider-light\"></div>\n }\n </div>\n @if(isTable && reviewsLength <= 1){\n <div class=\"x-divider\"></div>\n } @if(isTable && reviewsLength > 0){\n <div class=\"input-container\">\n <cai-input\n id=\"search\"\n formControlName=\"search\"\n [config]=\"{\n type: 'text',\n icon: 'cai-search',\n inverse: true,\n size: 22,\n name: titleInput,\n placeholderBehavior: 'fade',\n placeholderColor: '#AAAAAA',\n }\"\n (onValueChange)=\"handleSearch($event)\"\n (onClear)=\"handleClear($event)\"\n ></cai-input>\n </div>\n <div class=\"btn-filters\">\n <div\n [class.active]=\"currentActiveFilter === FilterType.ALL\"\n (click)=\"onChangePresentReviews(FilterType.ALL)\"\n >\n ALL\n </div>\n <div\n [class.active]=\"currentActiveFilter === FilterType.RATING\"\n (click)=\"onChangePresentReviews(FilterType.RATING)\"\n >\n RATING\n </div>\n <div\n [class.active]=\"currentActiveFilter === FilterType.REVIEWS\"\n (click)=\"onChangePresentReviews(FilterType.REVIEWS)\"\n >\n REVIEW\n </div>\n </div>\n }\n </div>\n\n <!-- MAIN MODAL -->\n <div class=\"reviews-window\">\n @if(isTable && !hasPersonalReview){\n <div class=\"add-review\" (click)=\"onAddReview()\">\n <span>ADD REVIEW</span>\n <div class=\"filter-group\">\n <svg-icon\n name=\"cai-plus\"\n class=\"plus-icon\"\n [class.disabled]=\"disabled()\"\n ></svg-icon>\n </div>\n </div>\n } @if(ratingReviews && reviewsLength == 0 && !addingReview()){\n <div class=\"ilustration\">\n <svg-icon\n [name]=\"\n !isTable\n ? 'cai-illustration'\n : 'cai-illustration-dark'\n \"\n ></svg-icon>\n </div>\n }@else { @if (addingReview()) {\n <cai-single-review\n [type]=\"modaltype\"\n [singleReview]=\"testReview\"\n (deleteReview)=\"onDeleteReview($event)\"\n (onEditedReview)=\"onEditedReview($event)\"\n (onAddedReview)=\"onGetReview($event)\"\n />\n } @for(review of presentReviews; track review.ratingId){\n <cai-single-review\n [type]=\"modaltype\"\n [singleReview]=\"review\"\n (deleteReview)=\"onDeleteReview($event)\"\n (onEditedReview)=\"onEditedReview($event)\"\n (onAddedReview)=\"onGetReview($event)\"\n />\n } }\n </div>\n </div>\n</div>\n","import { Component, Input, signal, SimpleChanges } from '@angular/core';\nimport { ReviewModalComponent } from '../../review-modal/review-modal.component';\nimport { IReview } from '../../../../models/review.model';\nimport { SvgIconComponent } from 'angular-svg-icon';\nimport { SingleReviewComponent } from '../../single-review/single-review.component';\nimport { NgbPopoverModule, NgbTooltipModule } from '@ng-bootstrap/ng-bootstrap';\nimport { FilterType } from '../../enums/filter-type.enum';\n\n@Component({\n selector: 'cai-rating-review',\n imports: [\n ReviewModalComponent,\n SvgIconComponent,\n NgbTooltipModule,\n NgbPopoverModule,\n ],\n templateUrl: './rating-review.component.html',\n styleUrl: './rating-review.component.scss',\n})\nexport class RatingReviewComponent {\n\n public FilterType = FilterType;\n\n ngOnInit(): void {\n this.initializeReviewsData();\n if (this.inCard) {\n this.titleInput = 'Find Title';\n } else {\n this.titleInput = 'Search';\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['reviews']) {\n this.initializeReviewsData();\n }\n }\n\n @Input({ required: true }) ratingReviews!: IReview[];\n @Input() inCard!: boolean;\n @Input({ required: true }) modaltype!: string;\n\n countLikes: number = 0;\n countDislikes: number = 0;\n countReviews: number = 0;\n titleInput: string = '';\n show = signal<boolean>(false);\n\n onReturnMost(): string {\n if (this.countLikes > this.countDislikes) {\n return 'likes';\n } else if (this.countDislikes > this.countLikes) {\n return 'dislikes';\n }\n return '';\n }\n\n /**\n * Initializes review data when the component is initialized or when the `reviews` input changes.\n * It copies the original reviews array, resets counters, calculates new counts, and\n * sets the `disabled` signal if a personal review already exists.\n * @private\n */\n private initializeReviewsData(): void {\n if (this.ratingReviews) {\n this.resetCounts();\n this.calculateReviewCounts();\n }\n }\n\n /**\n * Resets the counts for likes, dislikes, and written reviews to zero.\n * @private\n */\n private resetCounts(): void {\n this.countLikes = 0;\n this.countDislikes = 0;\n this.countReviews = 0;\n }\n\n /**\n * Iterates through the `reviews` array and calculates the total number of likes,\n * dislikes, and written reviews (those with a non-empty `value`).\n * @private\n */\n private calculateReviewCounts(): void {\n this.ratingReviews.forEach((review) => {\n if (review.thumb === 'like') {\n this.countLikes++;\n } else if (review.thumb === 'dislike') {\n this.countDislikes++;\n } else if (review.comment && review.comment.length > 0) {\n this.countReviews++;\n }\n });\n }\n\n handleOpen() {\n this.show.set(true);\n }\n\n handleClose() {\n this.show.set(false);\n }\n}\n","<div\n [class]=\"{\n 'filter-toggle': true,\n active: show()\n }\"\n [ngbPopover]=\"popoverReview\"\n popoverClass=\"tagPopover popover-review\"\n (hidden)=\"handleClose()\"\n container=\"body\"\n placement=\"bottom-start\"\n [autoClose]=\"'outside'\"\n (shown)=\"handleOpen()\"\n>\n <div\n class=\"filter-wrapper\"\n [ngbTooltip]=\"inCard ? 'Show Rating & Review' : 'Show Reviews'\"\n triggers=\"mouseenter:mouseleave\"\n tabindex=\"0\"\n tooltipClass=\"tooltip tooltip-m-b-2\"\n placement=\"bottom\"\n >\n <div\n [class]=\"{\n 'toggle-group': true,\n 'empty-state': countLikes === 0,\n 'most-likes': onReturnMost() === FilterType.LIKES\n }\"\n >\n <svg-icon class=\"like-icon\" name=\"cai-like\" />\n <div class=\"count\">{{ countLikes }}</div>\n </div>\n <div\n [class]=\"{\n 'toggle-group': true,\n 'empty-state': countDislikes === 0,\n 'most-dislikes': onReturnMost() === FilterType.DISLIKES\n }\"\n >\n <svg-icon class=\"dislike-icon\" name=\"cai-dislike\" />\n <div class=\"count\">{{ countDislikes }}</div>\n </div>\n <div\n [class]=\"{\n 'toggle-group': true,\n 'empty-state': countReviews === 0\n }\"\n >\n <svg-icon class=\"edit-icon\" name=\"cai-edit2\" />\n <div class=\"count\">{{ countReviews }}</div>\n </div>\n </div>\n</div>\n<ng-template #popoverReview>\n <div class=\"popover-review\">\n <cai-review-modal [titleInput]=\"titleInput\" [ratingReviews]=\"ratingReviews\" [modaltype]=\"modaltype\" />\n </div>\n</ng-template>\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Contact, ContactList } from '../models/contact.interface';\n\n@Pipe({\n name: 'mapContacts',\n})\nexport class MapContactsPipe implements PipeTransform {\n transform(contacts: Contact[], searchValue: string | null): ContactList[] {\n if (!contacts || contacts.length === 0) {\n return [];\n }\n\n // Filter contacts by name if search value is provided\n let filteredContacts = contacts;\n if (searchValue && searchValue.trim()) {\n const searchTerm = searchValue.toLowerCase().trim();\n filteredContacts = contacts.filter((contact) =>\n contact.contactName?.toLowerCase().includes(searchTerm)\n );\n }\n\n // Group contacts by department\n const departmentMap = new Map<number, ContactList>();\n\n filteredContacts.forEach((contact) => {\n const departmentId = contact.department?.id || 0;\n const departmentName = contact.department?.name || 'No Department';\n\n if (!departmentMap.has(departmentId)) {\n departmentMap.set(departmentId, {\n department: {\n id: departmentId,\n name: departmentName,\n count: 0,\n companyUsers: null,\n },\n contacts: [],\n });\n }\n\n const contactList = departmentMap.get(departmentId)!;\n contactList.contacts?.push(contact);\n contactList.department!.count = (contactList.department!.count || 0) + 1;\n });\n\n // Convert map to array and sort by department name\n return Array.from(departmentMap.values()).sort((a, b) =>\n (a.department?.name || '').localeCompare(b.department?.name || '')\n );\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ContactList } from '../models/contact.interface';\n\n@Pipe({\n name: 'contactsHeight',\n})\nexport class ContactsHeightPipe implements PipeTransform {\n transform(\n departmentId: number,\n contactList: ContactList,\n selectedIds: { departmentId: number; contactId: number[] }[]\n ): number {\n const contactCount = contactList.contacts?.length || 0;\n\n // Get the selected contact IDs for this department\n const selectedContactIds =\n selectedIds.find((entry) => entry.departmentId === departmentId)\n ?.contactId || [];\n\n // Get the visible contact IDs in the current filtered list\n const visibleContactIds =\n contactList.contacts?.map((contact) => contact.id) || [];\n\n // Only count selected contacts that are currently visible in the filtered list\n const visibleSelectedContacts = selectedContactIds.filter((contactId) =>\n visibleContactIds.includes(contactId)\n ).length;\n\n return (\n (contactCount - visibleSelectedContacts) * 30 +\n visibleSelectedContacts * 74\n );\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ContactList } from '../models/contact.interface';\n\n@Pipe({\n name: 'departmentsHeight',\n})\nexport class DepartmentsHeightPipe implements PipeTransform {\n transform(\n contactLists: ContactList[],\n selectedIds: { departmentId: number; contactId: number[] }[]\n ): number {\n let totalHeight = 52;\n\n // Calculate height for each visible department\n contactLists.forEach((contactList) => {\n // Base height for each department (30px) + 1px for the divider\n totalHeight += 31;\n\n // If department is open (has id in selectedIds), add contacts height calculation\n const isDepartmentOpen = selectedIds.some(\n (entry) => entry.departmentId === contactList.department?.id\n );\n\n if (isDepartmentOpen) {\n const contactCount = contactList.contacts?.length || 0;\n\n // Get the selected contact IDs for this department\n const selectedContactIds =\n selectedIds.find(\n (entry) => entry.departmentId === contactList.department?.id\n )?.contactId || [];\n\n // Get the visible contact IDs in the current filtered list\n const visibleContactIds =\n contactList.contacts?.map((contact) => contact.id) || [];\n\n // Only count selected contacts that are currently visible in the filtered list\n const visibleSelectedContacts = selectedContactIds.filter((contactId) =>\n visibleContactIds.includes(contactId)\n ).length;\n\n // Add contacts height calculation (same logic as contacts height pipe)\n const contactsHeight =\n (contactCount - visibleSelectedContacts) * 30 +\n visibleSelectedContacts * 74;\n\n totalHeight += contactsHeight;\n }\n });\n\n if (totalHeight === 52) {\n return 134;\n }\n\n return totalHeight;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ContactList } from '../models/contact.interface';\n\n@Pipe({\n name: 'contactCount',\n})\nexport class ContactCountPipe implements PipeTransform {\n transform(contactList: ContactList[]): number {\n return contactList.reduce(\n (total, list) => total + (list.contacts?.length || 0),\n 0\n );\n }\n}\n","import { Component, input, output, signal, ViewChild } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n FormControl,\n FormGroup,\n FormsModule,\n ReactiveFormsModule,\n UntypedFormGroup,\n} from '@angular/forms';\n\n// Components\nimport { InputComponent } from '../input/input.component';\nimport { SvgIconComponent } from 'angular-svg-icon';\n\n// Bootstrap\nimport {\n NgbPopover,\n NgbDropdownModule,\n NgbPopoverModule,\n NgbTooltip,\n} from '@ng-bootstrap/ng-bootstrap';\n\n// Models\nimport { Contact } from './models/contact.interface';\n\n// Pipes\nimport { MapContactsPipe } from './pipes/map-contacts.pipe';\nimport { HighlightSearchPipe } from '../input/pipes/highlight-search.pipe';\nimport { CopyComponent } from '../copy/copy.component';\nimport { ContactsHeightPipe } from './pipes/contacts-height.pipe';\nimport { DepartmentsHeightPipe } from './pipes/departments-height.pipe';\nimport { ContactCountPipe } from './pipes/contact-count.pipe';\n\n@Component({\n selector: 'cai-list-contact-dropdown',\n templateUrl: './list-contact-dropdown.component.html',\n styleUrl: './list-contact-dropdown.component.scss',\n imports: [\n // Modules\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n\n // Components\n InputComponent,\n SvgIconComponent,\n CopyComponent,\n\n // Bootstrap\n NgbDropdownModule,\n NgbPopoverModule,\n NgbTooltip,\n\n // Pipes\n MapContactsPipe,\n HighlightSearchPipe,\n ContactsHeightPipe,\n DepartmentsHeightPipe,\n ContactCountPipe,\n ],\n})\nexport class ListContactDropdownComponent {\n @ViewChild('dropdown') dropdown!: NgbPopover;\n\n // Inputs\n id = input<string>('');\n contacts = input<Contact[]>([]);\n\n // Outputs\n onAdd = output();\n onDelete = output();\n onEdit = output();\n onOpen = output();\n onClose = output();\n\n closing = signal<boolean>(false);\n open = signal<boolean>(false);\n\n selectedIds = signal<{ departmentId: number; contactId: number[] }[]>([]);\n\n form: UntypedFormGroup = new FormGroup({\n search: new FormControl(''),\n });\n\n selectedContactIds() {\n return this.selectedIds().flatMap((entry) => entry.contactId);\n }\n\n closeDropdown() {\n this.open.set(false);\n this.dropdown?.close();\n this.form.get('search')?.reset();\n this.onClose.emit();\n }\n\n openDropdown() {\n this.open.set(true);\n this.onOpen.emit();\n }\n\n isDepartmentOpen(departmentId: number | null | undefined): boolean {\n if (!departmentId) return false;\n return !!this.selectedIds().find(\n (entry) => entry.departmentId === departmentId\n );\n }\n\n isContactOpen(contactId: number | null | undefined): boolean {\n if (!contactId) return false;\n return !!this.selectedContactIds().find((id) => id === contactId);\n }\n\n handleOpenDropdown() {\n this.openDropdown();\n }\n\n handleCloseDropdown() {\n this.closeDropdown();\n }\n\n emitOnAdd(event: Event) {\n event.stopPropagation();\n this.closeDropdown();\n this.onAdd.emit();\n }\n\n emitOnEdit(event: Event) {\n event.stopPropagation();\n this.closeDropdown();\n this.onEdit.emit();\n }\n\n emitOnDelete(event: Event) {\n event.stopPropagation();\n this.closeDropdown();\n this.onDelete.emit();\n }\n\n handleContactClick(contactId: number) {\n const currentSelected = this.selectedIds();\n const existingEntry = currentSelected.find((entry) =>\n entry.contactId.includes(contactId)\n );\n\n // Find the contact's actual department ID\n const contact = this.contacts().find((c) => c.id === contactId);\n const departmentId = contact?.department?.id || 0;\n\n if (existingEntry) {\n const updatedEntry = {\n ...existingEntry,\n contactId: existingEntry.contactId.filter((id) => id !== contactId),\n };\n\n this.selectedIds.set(\n currentSelected.map((entry) =>\n entry === existingEntry ? updatedEntry : entry\n )\n );\n } else {\n // Check if there's already an entry for this department\n const departmentEntry = currentSelected.find(\n (entry) => entry.departmentId === departmentId\n );\n\n if (departmentEntry) {\n // Add contact to existing department entry\n const updatedDepartmentEntry = {\n ...departmentEntry,\n contactId: [...departmentEntry.contactId, contactId],\n };\n\n this.selectedIds.set(\n currentSelected.map((entry) =>\n entry === departmentEntry ? updatedDepartmentEntry : entry\n )\n );\n }\n }\n }\n\n handleDepartmentClick(departmentId: number) {\n const currentSelected = this.selectedIds();\n const existingEntry = currentSelected.find(\n (entry) => entry.departmentId === departmentId\n );\n\n if (existingEntry) {\n // Remove the department entry and all contacts from this department\n this.selectedIds.set(\n currentSelected.filter((entry) => entry.departmentId !== departmentId)\n );\n } else {\n // Add new department selection\n this.selectedIds.set([\n ...currentSelected,\n { departmentId: departmentId, contactId: [] },\n ]);\n }\n }\n\n handleClick() {\n if (!this.open()) {\n this.open.set(true);\n return;\n }\n }\n}\n","@let contactLists = contacts() | mapContacts: form.get('search')?.value;\n@if(!!contacts().length){\n<div\n class=\"list-item\"\n [class.focus]=\"open()\"\n [ngbPopover]=\"popoverRef\"\n #dropdown=\"ngbPopover\"\n popoverClass=\"cai-dropdown cai-dropdown-popover\"\n container=\"body\"\n placement=\"bottom-start\"\n [positionTarget]=\"anchor\"\n [animation]=\"true\"\n [autoClose]=\"'outside'\"\n (hidden)=\"handleCloseDropdown()\"\n (shown)=\"handleOpenDropdown()\"\n (click)=\"handleClick()\"\n>\n <div\n class=\"container\"\n [ngbTooltip]=\"!open() ? 'View Contacts' : null\"\n tooltipClass=\"tooltip input-tooltip \"\n placement=\"bottom\"\n [openDelay]=\"600\"\n >\n <svg-icon name=\"cai-contact\" class=\"icon\"></svg-icon>\n <p>{{ contacts().length }}</p>\n </div>\n <div #anchor class=\"dropdown-anchor\"></div>\n</div>\n} @let maxHeight = contactLists | departmentsHeight: selectedIds();\n<ng-template #popoverRef>\n <div\n class=\"popover-dropdown-menu\"\n [class]=\"{\n 'animate-dropdown': true,\n }\"\n [class.closing]=\"closing()\"\n [style.--max-height]=\"maxHeight > 306 ? '306px' : maxHeight + 'px'\"\n (click)=\"$event.stopPropagation()\"\n >\n <ng-container *ngTemplateOutlet=\"contactsTemplate\"></ng-container>\n </div>\n</ng-template>\n<ng-template #contactsTemplate>\n <div class=\"header\">\n <div class=\"title\">\n <p class=\"title-text\">CONTACT</p>\n <div class=\"counter\">{{ contactLists | contactCount }}</div>\n </div>\n <div\n class=\"add\"\n ngbTooltip=\"Add New\"\n tooltipClass=\"tooltip input-tooltip tooltip-m-t-4\"\n placement=\"top\"\n [openDelay]=\"600\"\n (click)=\"emitOnAdd($event)\"\n >\n <svg-icon name=\"cai-plus\" class=\"icon\"></svg-icon>\n </div>\n </div>\n <div [formGroup]=\"form\" class=\"search\">\n <cai-input\n id=\"search\"\n formControlName=\"search\"\n [config]=\"{\n type: 'text',\n icon: 'cai-search',\n inverse: true,\n size: 22,\n name: 'Search',\n placeholderBehavior: 'fade',\n placeholderColor: '#AAAAAA', \n }\"\n ></cai-input>\n </div>\n\n @if(contactLists.length > 0){ @for (contactList of contactLists; track\n contactList.department?.id; let isLast = $last) {\n <div\n class=\"department\"\n [class.open]=\"isDepartmentOpen(contactList.department?.id)\"\n (click)=\"handleDepartmentClick(contactList.department?.id || 0)\"\n >\n <div class=\"department-subtitle\">\n <p class=\"subtitle\">\n {{ contactList.department?.name }}\n </p>\n <div class=\"counter\">{{ contactList.department?.count }}</div>\n </div>\n <div class=\"dropdown-icon\">\n <svg-icon name=\"cai-arrow-primary-up\" class=\"icon\"></svg-icon>\n </div>\n </div>\n <div\n class=\"contacts\"\n [class.open]=\"isDepartmentOpen(contactList.department?.id)\"\n [style.--max-height]=\"\n (contactList.department?.id || 0\n | contactsHeight : contactList : selectedIds()) + 'px'\n \"\n >\n @for (contact of contactList.contacts; track contact.id) {\n <ng-container\n *ngTemplateOutlet=\"contactRef; context: { contact }\"\n ></ng-container>\n }\n </div>\n\n @if (!isLast) {\n <div class=\"divider\"></div>\n } } } @else {\n <div class=\"no-results\">\n <p>No Results</p>\n </div>\n }\n</ng-template>\n\n<ng-template #contactRef let-contact=\"contact\">\n <div\n class=\"contact-item\"\n [class.active]=\"isContactOpen(contact?.id)\"\n (click)=\"handleContactClick(contact?.id)\"\n >\n <div class=\"contact-header\">\n <p\n class=\"contact-name text-truncate\"\n [innerHTML]=\"\n contact?.contactName || contact?.fullName\n | highlightSearch : form.get('search')?.value\n \"\n ></p>\n\n <div class=\"contact-actions-container\">\n <div class=\"contact-actions\">\n <div\n class=\"contact-action edit\"\n (click)=\"emitOnEdit($event)\"\n ngbTooltip=\"Edit\"\n tooltipClass=\"tooltip input-tooltip tooltip-bg-white-700 tooltip-text-black-500\"\n placement=\"top\"\n [openDelay]=\"600\"\n [container]=\"'body'\"\n >\n <svg-icon name=\"cai-edit\" class=\"action-icon\"></svg-icon>\n </div>\n\n <div\n class=\"contact-action delete\"\n (click)=\"emitOnDelete($event)\"\n ngbTooltip=\"Delete\"\n tooltipClass=\"tooltip input-tooltip tooltip-bg-red-500\"\n placement=\"top\"\n [openDelay]=\"600\"\n [container]=\"'body'\"\n >\n <svg-icon name=\"cai-delete\" class=\"action-icon\"></svg-icon>\n </div>\n </div>\n\n <div class=\"dropdown-icon\">\n <svg-icon name=\"cai-arrow-primary-up\" class=\"icon\"></svg-icon>\n </div>\n </div>\n </div>\n\n <div class=\"contact-info\">\n <div class=\"info-container\">\n <cai-copy\n [value]=\"\n contact?.phone +\n (contact?.extensionPhone ? ' x' + contact?.extensionPhone : '')\n \"\n [inverse]=\"true\"\n >\n <div class=\"info-item\">\n <svg-icon name=\"cai-phone\" class=\"icon\"></svg-icon>\n <p>{{ contact?.phone }}</p>\n <p class=\"text-black-100\">\n {{ contact?.extensionPhone ? \"x\" + contact?.extensionPhone : \"\" }}\n </p>\n </div>\n </cai-copy>\n </div>\n <div class=\"info-container\">\n <cai-copy [value]=\"contact?.email\" [inverse]=\"true\">\n <div class=\"info-item\">\n <svg-icon name=\"cai-email\" class=\"icon\"></svg-icon>\n <p class=\"email\">{{ contact?.email }}</p>\n </div>\n </cai-copy>\n </div>\n </div>\n </div>\n</ng-template>\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ITabOption } from '../interfaces';\n\n@Pipe({\n name: 'tabSearchFilter',\n})\nexport class TabSearchFilterPipe implements PipeTransform {\n transform(\n options: ITabOption[] | null | undefined,\n searchValue?: string\n ): ITabOption[] {\n if (!options) return [];\n\n if (!searchValue) return options;\n\n return options.filter((option) =>\n option.name?.toLowerCase().includes(searchValue.toLowerCase())\n );\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n ElementRef,\n input,\n OnInit,\n output,\n signal,\n ViewChild,\n} from '@angular/core';\nimport { NgbDropdown, NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap';\nimport { FormsModule } from '@angular/forms';\n\n// Components\nimport { SvgIconComponent } from 'angular-svg-icon';\n\n// Interfaces\nimport { ITabOptionConfig, ITabOption } from './interfaces';\n\n// Pipes\nimport { TabSearchFilterPipe } from './pipes';\nimport { HighlightSearchPipe } from '../input/pipes/highlight-search.pipe';\n\n@Component({\n selector: 'cai-tab-option-dropdown',\n templateUrl: './tab-option-dropdown.component.html',\n styleUrl: './tab-option-dropdown.component.scss',\n imports: [\n CommonModule,\n FormsModule,\n\n // Bootstrap\n NgbDropdownModule,\n SvgIconComponent,\n\n // Pipes\n TabSearchFilterPipe,\n HighlightSearchPipe,\n ],\n})\nexport class TabOptionDropdownComponent {\n @ViewChild('dropdown') dropdown!: NgbDropdown;\n @ViewChild('container') containerRef!: ElementRef<HTMLDivElement>;\n @ViewChild('inputRef') inputRef!: ElementRef<HTMLInputElement>;\n\n selectedOption = input<ITabOption | null>(null);\n count = input<number>(0);\n isLoading = input<boolean>(false);\n options = input<ITabOption[]>([]);\n config = input<ITabOptionConfig>({\n splitPart: 'Top',\n splitPartSide: 'left',\n });\n\n onSelectionChange = output<ITabOption>();\n\n searchValue = signal<string>('');\n\n closing = signal<boolean>(false);\n containerWidth = signal<number>(0);\n\n private updateContainerWidth(): void {\n if (this.containerRef?.nativeElement) {\n this.containerWidth.set(\n this.containerRef?.nativeElement?.offsetWidth ?? 0\n );\n }\n }\n\n private closeDropdown() {\n this.closing.set(true);\n this.searchValue.set('');\n\n setTimeout(() => {\n this.dropdown?.close();\n this.closing.set(false);\n }, 200);\n }\n\n handleFocus() {\n this.updateContainerWidth();\n this.dropdown?.open();\n }\n\n handleClick() {\n if (this.isLoading() || this.dropdown?.isOpen()) return;\n this.inputRef?.nativeElement.focus();\n }\n\n handleBlur() {\n this.closeDropdown();\n }\n\n handleOption(event: MouseEvent, option: ITabOption) {\n event.stopPropagation();\n event.preventDefault();\n\n if (option.id === this.selectedOption()?.id) {\n return;\n }\n\n this.onSelectionChange.emit(option);\n this.inputRef?.nativeElement.blur();\n }\n}\n","@let splitPart = config().splitPart;\n<!-- -->\n@let splitPartSide = config().splitPartSide;\n<!-- -->\n<div\n #container\n class=\"tab-option-dropdown\"\n [class.is-loading]=\"isLoading()\"\n ngbDropdown\n #dropdown=\"ngbDropdown\"\n dropdownClass=\"cai-dropdown\"\n [placement]=\"'bottom'\"\n [autoClose]=\"false\"\n [container]=\"'body'\"\n (click)=\"handleClick()\"\n>\n <div class=\"tab-option-label\">\n <div class=\"tab-option-label-content\">\n <div class=\"cut-part\" [class.split-right]=\"splitPartSide === 'right'\">\n <p>{{ splitPart }}</p>\n </div>\n <p>{{ selectedOption()?.name ?? \"\" }}</p>\n </div>\n <p class=\"counter\">{{ count() }}</p>\n </div>\n <input\n #inputRef\n type=\"text\"\n class=\"tab-option-input\"\n (focus)=\"handleFocus()\"\n (blur)=\"handleBlur()\"\n placeholder=\"\"\n [(ngModel)]=\"searchValue\"\n />\n <svg-icon name=\"cai-arrow-primary-up\" class=\"dropdown-icon\"></svg-icon>\n <div class=\"tab-option-background\"></div>\n <div class=\"dropdown-anchor\" ngbDropdownAnchor></div>\n <!-- -->\n @let dropdownOptions = options() | tabSearchFilter: searchValue();\n <!-- -->\n @let maxHeight = (dropdownOptions.length || 1) * 28 + 6;\n <div\n class=\"dropdown-menu\"\n ngbDropdownMenu\n [style.width.px]=\"containerWidth()\"\n [class.closing]=\"closing()\"\n [style.--max-height]=\"maxHeight > 244 ? '244px' : maxHeight + 'px'\"\n >\n @if (dropdownOptions.length) {\n @for (option of dropdownOptions; track option.id) {\n <div\n class=\"dropdown-item\"\n [class.selected]=\"option.id === selectedOption()?.id\"\n (pointerdown)=\"handleOption($event, option)\"\n >\n <p [innerHTML]=\"option.name | highlightSearch: searchValue()\"></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </div>\n }\n } @else {\n <div class=\"dropdown-item no-results\">\n <p>No results</p>\n </div>\n }\n </div>\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\n\n// interfaces\nimport { CaiDateTimeConfig } from '../../input-datetime-picker/interfaces';\n\n@Pipe({\n name: 'dropdownFilterInputConfig',\n})\nexport class DropdownFilterInputConfigPipe implements PipeTransform {\n transform({ configType }: { configType: string }): CaiDateTimeConfig {\n switch (configType) {\n case 'from':\n return {\n name: 'datepicker',\n type: 'text',\n label: 'From',\n isDropdown: true,\n placeholderIcon: 'date',\n isRequired: true,\n customClass: 'datetimeclass',\n inverse: true,\n size: 22,\n hasStroke: true,\n };\n case 'to':\n return {\n name: 'datepicker',\n type: 'text',\n label: 'To',\n isDropdown: true,\n placeholderIcon: 'date',\n isRequired: true,\n customClass: 'datetimeclass',\n inverse: true,\n size: 22,\n hasStroke: true,\n };\n }\n return {\n name: 'datepicker',\n type: 'text',\n label: 'Date',\n isDropdown: true,\n placeholderIcon: 'date',\n isRequired: true,\n customClass: 'datetimeclass',\n inverse: true,\n size: 22,\n hasStroke: true,\n };\n }\n}\n","import {\n AbstractControl,\n FormControl,\n FormGroup,\n UntypedFormGroup,\n ValidationErrors,\n ValidatorFn,\n Validators,\n} from '@angular/forms';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nexport class IntervalDropdownHelper {\n // Cache validators to avoid recreation\n private static notInFutureValidator: ValidatorFn | null = null;\n private static companyStartValidators = new Map<number, ValidatorFn>();\n\n static createFormGroup(companyDays: number | null): UntypedFormGroup {\n const formGroup = new FormGroup({\n from: new FormControl({ value: null, disabled: false }, [\n Validators.required,\n ]),\n to: new FormControl({ value: null, disabled: false }, [\n Validators.required,\n ]),\n });\n\n // Create destroy subject for proper cleanup\n const destroy$ = new Subject<void>();\n\n // Store destroy subject on form group for cleanup\n (formGroup as any).__destroy$ = destroy$;\n\n if (companyDays) {\n const companyStartDate = new Date();\n companyStartDate.setDate(companyStartDate.getDate() - companyDays);\n\n const notBeforeCompanyStartValidator =\n this.getOrCreateNotBeforeCompanyStartValidator(companyStartDate);\n const notInFutureValidator = this.getOrCreateNotInFutureValidator();\n const toNotBeforeFromValidator =\n this.createToNotBeforeFromValidator(formGroup);\n\n formGroup\n .get('from')\n ?.setValidators([\n Validators.required,\n notBeforeCompanyStartValidator,\n notInFutureValidator,\n ]);\n formGroup\n .get('to')\n ?.setValidators([\n Validators.required,\n notBeforeCompanyStartValidator,\n notInFutureValidator,\n toNotBeforeFromValidator,\n ]);\n } else {\n // Even without company days, still validate against future dates\n const notInFutureValidator = this.getOrCreateNotInFutureValidator();\n const toNotBeforeFromValidator =\n this.createToNotBeforeFromValidator(formGroup);\n\n formGroup\n .get('from')\n ?.setValidators([Validators.required, notInFutureValidator]);\n formGroup\n .get('to')\n ?.setValidators([\n Validators.required,\n notInFutureValidator,\n toNotBeforeFromValidator,\n ]);\n }\n\n // Add cross-field validation: when 'from' changes, re-validate 'to'\n // Use takeUntil to prevent memory leaks\n formGroup\n .get('from')\n ?.valueChanges.pipe(takeUntil(destroy$))\n .subscribe(() => {\n formGroup.get('to')?.updateValueAndValidity();\n });\n\n return formGroup;\n }\n\n /**\n * Cleanup method to prevent memory leaks\n * Call this when the form group is no longer needed\n */\n static destroyFormGroup(formGroup: UntypedFormGroup): void {\n const destroy$ = (formGroup as any).__destroy$;\n if (destroy$) {\n destroy$.next();\n destroy$.complete();\n }\n }\n\n /**\n * Get or create cached not-in-future validator\n */\n private static getOrCreateNotInFutureValidator(): ValidatorFn {\n if (!this.notInFutureValidator) {\n this.notInFutureValidator = this.createNotInFutureValidator();\n }\n return this.notInFutureValidator;\n }\n\n /**\n * Get or create cached company start validator\n */\n private static getOrCreateNotBeforeCompanyStartValidator(\n companyStartDate: Date\n ): ValidatorFn {\n const dateKey = companyStartDate.getTime();\n if (!this.companyStartValidators.has(dateKey)) {\n this.companyStartValidators.set(\n dateKey,\n this.createNotBeforeCompanyStartValidator(companyStartDate)\n );\n }\n return this.companyStartValidators.get(dateKey)!;\n }\n\n /**\n * Clear validator cache (useful for testing or memory management)\n */\n static clearValidatorCache(): void {\n this.notInFutureValidator = null;\n this.companyStartValidators.clear();\n }\n\n private static createNotBeforeCompanyStartValidator(\n companyStartDate: Date\n ): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (!control.value) {\n return null; // Let required validator handle empty values\n }\n\n const selectedDate = new Date(control.value);\n if (selectedDate < companyStartDate) {\n return { beforeCompanyStart: true };\n }\n\n return null;\n };\n }\n\n private static createNotInFutureValidator(): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (!control.value) {\n return null; // Let required validator handle empty values\n }\n\n const selectedDate = new Date(control.value);\n const today = new Date();\n today.setHours(23, 59, 59, 999); // End of today\n\n if (selectedDate > today) {\n return { inFuture: true };\n }\n\n return null;\n };\n }\n\n private static createToNotBeforeFromValidator(\n formGroup: FormGroup\n ): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (!control.value) {\n return null; // Let required validator handle empty values\n }\n\n const fromDate = formGroup.get('from')?.value;\n if (!fromDate) {\n return null; // Wait for from date to be set\n }\n\n const toDate = new Date(control.value);\n const fromDateObj = new Date(fromDate);\n\n if (toDate < fromDateObj) {\n return { toBeforeFrom: true };\n }\n\n return null;\n };\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n ViewChild,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { NgbPopover, NgbPopoverModule } from '@ng-bootstrap/ng-bootstrap';\n\n// Components\nimport { SvgIconComponent } from 'angular-svg-icon';\n\n// Interfaces\nimport { IIntervalDropdownOption } from './interfaces';\nimport {\n FormControl,\n FormGroup,\n FormsModule,\n ReactiveFormsModule,\n UntypedFormGroup,\n Validators,\n} from '@angular/forms';\nimport { CaiInputDatetimePickerComponent } from '../input-datetime-picker/cai-input-datetime-picker.component';\n\n// Pipes\nimport { DropdownFilterInputConfigPipe } from './pipes/dropdown-filter-input-config.pipe';\nimport { IntervalDropdownHelper } from './utils/helpers/interval-dropdown.helper';\n\n@Component({\n selector: 'cai-interval-dropdown',\n templateUrl: './interval-dropdown.component.html',\n styleUrl: './interval-dropdown.component.scss',\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n\n // Pipes\n DropdownFilterInputConfigPipe,\n\n // Components\n CaiInputDatetimePickerComponent,\n SvgIconComponent,\n\n // Bootstrap\n NgbPopoverModule,\n ],\n})\nexport class IntervalDropdownComponent implements AfterViewInit {\n @ViewChild('dropdown') dropdown!: NgbPopover;\n @ViewChild('container') containerRef!: ElementRef<HTMLDivElement>;\n containerWidth = signal<number>(0);\n\n selectedOption = input<IIntervalDropdownOption | null>(null);\n options = input<IIntervalDropdownOption[]>([]);\n companyDays = input<number | null>(null);\n custom = signal<boolean>(false);\n open = signal<boolean>(false);\n\n // Outputs\n onClose = output();\n onOpen = output();\n onSelectionChange = output<IIntervalDropdownOption>();\n\n form: UntypedFormGroup = new FormGroup({});\n\n private updateContainerWidth(): void {\n if (this.containerRef?.nativeElement) {\n this.containerWidth.set(\n this.containerRef?.nativeElement?.offsetWidth ?? 0,\n );\n }\n }\n\n ngAfterViewInit(): void {\n this.form = IntervalDropdownHelper.createFormGroup(this.companyDays());\n this.updateContainerWidth();\n }\n\n handleOpenDropdown() {\n this.updateContainerWidth();\n this.openDropdown();\n }\n\n handleCloseDropdown() {\n this.closeDropdown();\n }\n\n handleClick() {\n if (!this.open()) {\n this.open.set(true);\n return;\n }\n }\n\n closeDropdown() {\n this.open.set(false);\n this.custom.set(false);\n this.form.get('from')?.disable();\n this.form.get('to')?.disable();\n this.dropdown?.close();\n this.onClose.emit();\n }\n\n openDropdown() {\n this.open.set(true);\n this.onOpen.emit();\n }\n\n handleOption(event: MouseEvent, option: IIntervalDropdownOption) {\n event.stopPropagation();\n event.preventDefault();\n\n if (option.name === 'Custom') {\n this.custom.set(true);\n this.form.get('from')?.enable();\n this.form.get('to')?.enable();\n return;\n }\n\n if (option.id === this.selectedOption()?.id) {\n return;\n }\n\n this.onSelectionChange.emit(option);\n this.closeDropdown();\n }\n\n handleClearAll(event: MouseEvent) {\n event.stopPropagation();\n event.preventDefault();\n\n this.form.reset();\n }\n\n handleSet(event: MouseEvent) {\n event.stopPropagation();\n event.preventDefault();\n\n if (!this.form.valid) {\n return;\n }\n\n let option = this.options().find((option) => option.name === 'Custom');\n\n if (option) {\n option = {\n ...option,\n startDate: this.form.get('from')?.value,\n endDate: this.form.get('to')?.value,\n };\n\n this.onSelectionChange.emit(option);\n this.closeDropdown();\n }\n }\n}\n","@let isFormValid = form?.valid;\n<div\n class=\"dropdown-container\"\n [class.focus]=\"open()\"\n [ngbPopover]=\"popoverRef\"\n #container\n #dropdown=\"ngbPopover\"\n popoverClass=\"cai-dropdown cai-dropdown-popover\"\n container=\"body\"\n placement=\"bottom-start\"\n [positionTarget]=\"anchor\"\n [animation]=\"true\"\n [autoClose]=\"'outside'\"\n (hidden)=\"handleCloseDropdown()\"\n (shown)=\"handleOpenDropdown()\"\n (click)=\"handleClick()\"\n>\n <div>{{ custom() ? \"Custom\" : selectedOption()?.name }}</div>\n <svg-icon name=\"cai-arrow-secondary-down\" class=\"dropdown-icon\"></svg-icon>\n <div #anchor class=\"dropdown-anchor\" [class.custom]=\"custom()\"></div>\n</div>\n@let maxHeight = (options()?.length || 1) * 28 + 6;\n<ng-template #popoverRef>\n <div\n class=\"popover-dropdown-menu\"\n [style.--container-width]=\"containerWidth() + 'px'\"\n [style.--max-height]=\"\n custom() ? '124px' : maxHeight > 306 ? '306px' : maxHeight + 'px'\n \"\n [class.custom]=\"custom()\"\n (click)=\"$event.stopPropagation()\"\n >\n <div class=\"options-container\">\n <ng-container *ngTemplateOutlet=\"optionsRef\"></ng-container>\n </div>\n <div class=\"custom-container\">\n <ng-container *ngTemplateOutlet=\"customRef\"></ng-container>\n </div>\n </div>\n</ng-template>\n\n<ng-template #optionsRef>\n @if (options()?.length) {\n @for (option of options(); track option.id) {\n @let isSelected = option.id === selectedOption()?.id;\n @let isCustomSelected = option.name === \"Custom\" && isSelected;\n <div\n class=\"dropdown-item\"\n [class.selected]=\"isSelected\"\n [class.custom-selected]=\"isCustomSelected\"\n (pointerdown)=\"handleOption($event, option)\"\n >\n <p>{{ option.name }}</p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </div>\n }\n } @else {\n <div class=\"dropdown-item no-results\">\n <p>No results</p>\n </div>\n }\n</ng-template>\n\n<ng-template #customRef>\n <div class=\"custom-range-header\">CUSTOM RANGE</div>\n @if (form) {\n <div class=\"custom-range-content\" [formGroup]=\"form\">\n <div class=\"custom-range-content-item\" [class.disabled]=\"!custom()\">\n <cai-input-datetime-picker\n formControlName=\"from\"\n [inputConfig]=\"{ configType: 'from' } | dropdownFilterInputConfig\"\n ></cai-input-datetime-picker>\n </div>\n <div class=\"custom-range-content-item\" [class.disabled]=\"!custom()\">\n <cai-input-datetime-picker\n formControlName=\"to\"\n [inputConfig]=\"{ configType: 'to' } | dropdownFilterInputConfig\"\n ></cai-input-datetime-picker>\n </div>\n </div>\n }\n <div class=\"custom-range-footer\">\n <button\n class=\"custom-range-button clear\"\n [class.valid]=\"isFormValid\"\n (click)=\"handleClearAll($event)\"\n >\n CLEAR ALL\n </button>\n <button\n class=\"custom-range-button set\"\n [class.valid]=\"isFormValid\"\n (click)=\"handleSet($event)\"\n >\n SET\n </button>\n </div>\n</ng-template>\n","export enum eScrollState {\n START = 'start',\n SCROLLING = 'scrolling',\n END = 'end',\n NOT_NEEDED = 'not_needed',\n}\n","// Angular\nimport { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n NgZone,\n Output,\n Renderer2,\n signal,\n ViewChild,\n} from '@angular/core';\n\n// Enums\nimport { eScrollState } from './enums';\nimport { CdkScrollable } from '@angular/cdk/scrolling';\n\n@Component({\n selector: 'ca-sticky-scrollbar',\n templateUrl: './sticky-scrollbar.component.html',\n styleUrl: './sticky-scrollbar.component.scss',\n imports: [CommonModule, CdkScrollable],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class StickyScrollbarComponent implements AfterViewInit {\n @ViewChild('scrollContainer', { static: false })\n scrollContainer!: ElementRef<HTMLDivElement>;\n @ViewChild('scrollThumb', { static: false })\n scrollThumb!: ElementRef<HTMLDivElement>;\n\n /**\n * Input to hide the scrollbar thumb with opacity\n * @default false\n */\n @Input() hideThumb = false;\n\n /**\n * Hide the scrollbar track completely\n */\n @Input()\n set hideTrack(value: boolean) {\n const previousValue = this._hideTrack;\n this._hideTrack = value;\n if (this.isInitialized && previousValue !== value) {\n this.reconcileAlwaysVisibleTracking();\n }\n }\n get hideTrack(): boolean {\n return this._hideTrack;\n }\n private _hideTrack = false;\n\n /**\n * Keep scrollbar fixed at bottom of viewport even when table scrolls out of view\n * @default false\n */\n @Input()\n set alwaysVisible(value: boolean) {\n const previousValue = this._alwaysVisible;\n this._alwaysVisible = value;\n if (this.isInitialized && previousValue !== value) {\n this.reconcileAlwaysVisibleTracking();\n }\n }\n get alwaysVisible(): boolean {\n return this._alwaysVisible;\n }\n private _alwaysVisible = false;\n\n /**\n * Offset for the sticky position from the bottom (in pixels)\n * @default 0\n */\n @Input()\n set stickyOffset(value: number) {\n const previousValue = this._stickyOffset;\n this._stickyOffset = value;\n if (this.isInitialized && previousValue !== value && this.alwaysVisible) {\n this.reconcileAlwaysVisibleTracking(true);\n }\n }\n get stickyOffset(): number {\n return this._stickyOffset;\n }\n private _stickyOffset = 0;\n\n /**\n * Output to emit scroll state changes (start, scrolling, end)\n */\n @Output() scrollStateChange = new EventEmitter<eScrollState>();\n\n private readonly renderer = inject(Renderer2);\n private readonly destroyRef = inject(DestroyRef);\n private readonly ngZone = inject(NgZone);\n private readonly cdr = inject(ChangeDetectorRef);\n\n isDragging = false;\n isContainerInView = signal(true);\n\n private dragStartX = 0;\n private scrollStartLeft = 0;\n private currentScrollState?: eScrollState;\n private intersectionObserver?: IntersectionObserver;\n private removeMouseMoveListener?: () => void;\n private removeMouseUpListener?: () => void;\n private removeMouseLeaveListener?: () => void;\n private removeScrollListener?: () => void;\n private isInitialized = false;\n private lastTrackVisible?: boolean;\n private lastThumbWidth = -1;\n private lastThumbPosition = -1;\n\n ngAfterViewInit(): void {\n this.updateScrollbar();\n this.setupResizeObserver();\n this.setupGlobalMouseListeners();\n this.setupScrollListener();\n\n this.updateScrollState(eScrollState.START);\n\n this.isInitialized = true;\n this.reconcileAlwaysVisibleTracking(true);\n\n this.destroyRef.onDestroy(() => {\n if (this.intersectionObserver) {\n this.intersectionObserver.disconnect();\n }\n this.removeMouseMoveListener?.();\n this.removeMouseUpListener?.();\n this.removeMouseLeaveListener?.();\n this.removeScrollListener?.();\n });\n }\n\n private setupScrollListener(): void {\n // Run scroll handler outside Angular zone to prevent change detection\n this.ngZone.runOutsideAngular(() => {\n const container = this.scrollContainer.nativeElement;\n\n const onScroll = () => this.handleScroll();\n\n container.addEventListener('scroll', onScroll, { passive: true });\n this.removeScrollListener = () =>\n container.removeEventListener('scroll', onScroll);\n });\n }\n\n private handleScroll(): void {\n if (!this.isDragging) {\n this.updateScrollbar();\n }\n }\n\n private setupGlobalMouseListeners(): void {\n // Run outside Angular zone to prevent change detection on every mousemove\n this.ngZone.runOutsideAngular(() => {\n const onMouseMove = (event: MouseEvent) => {\n if (this.isDragging) {\n this.onThumbDrag(event);\n }\n };\n\n const onMouseUp = () => {\n if (this.isDragging) {\n this.onThumbMouseUp();\n }\n };\n\n const onMouseLeave = () => {\n if (this.isDragging) {\n this.onThumbMouseUp();\n }\n };\n\n window.addEventListener('mousemove', onMouseMove, { passive: true });\n window.addEventListener('mouseup', onMouseUp);\n window.addEventListener('mouseleave', onMouseLeave);\n\n this.removeMouseMoveListener = () =>\n window.removeEventListener('mousemove', onMouseMove);\n this.removeMouseUpListener = () =>\n window.removeEventListener('mouseup', onMouseUp);\n this.removeMouseLeaveListener = () =>\n window.removeEventListener('mouseleave', onMouseLeave);\n });\n }\n\n private teardownAlwaysVisibleTracking(): void {\n if (this.intersectionObserver) {\n this.intersectionObserver.disconnect();\n this.intersectionObserver = undefined;\n }\n this.isContainerInView.set(true);\n\n if (!this.scrollContainer?.nativeElement) {\n return;\n }\n const track = this.scrollThumb?.nativeElement?.parentElement;\n if (track) {\n this.renderer.removeClass(track, 'fixed-mode');\n this.renderer.setStyle(track, 'position', 'sticky');\n this.renderer.removeStyle(track, 'left');\n this.renderer.removeStyle(track, 'width');\n }\n }\n\n private reconcileAlwaysVisibleTracking(forceRecreateObserver = false): void {\n if (!this.scrollContainer?.nativeElement) {\n return;\n }\n\n const shouldTrack = this.alwaysVisible && !this.hideTrack;\n const hasObserver = !!this.intersectionObserver;\n\n if (!shouldTrack) {\n this.teardownAlwaysVisibleTracking();\n this.updateScrollbar();\n this.cdr.markForCheck();\n return;\n }\n\n if (hasObserver && forceRecreateObserver) {\n this.teardownAlwaysVisibleTracking();\n }\n\n if (!this.intersectionObserver) {\n this.setupAlwaysVisibleTracking();\n }\n\n this.updateFixedTrackPosition();\n this.updateScrollbar();\n this.cdr.markForCheck();\n }\n\n private updateScrollbar(): void {\n const container = this.scrollContainer.nativeElement;\n\n if (this.hideTrack) {\n const newState = this.calculateScrollState();\n this.updateScrollState(newState);\n return;\n }\n\n const thumb = this.scrollThumb.nativeElement;\n const track = thumb.parentElement;\n\n if (!track) {\n return;\n }\n\n const containerWidth = container.clientWidth;\n const contentWidth = container.scrollWidth;\n const scrollLeft = container.scrollLeft;\n\n const thumbWidth = (containerWidth / contentWidth) * containerWidth;\n const maxScroll = Math.max(contentWidth - containerWidth, 1);\n const maxThumbTravel = containerWidth - thumbWidth;\n const thumbPosition = (scrollLeft / maxScroll) * maxThumbTravel;\n\n const shouldShow = contentWidth > containerWidth;\n if (this.lastTrackVisible !== shouldShow) {\n this.lastTrackVisible = shouldShow;\n this.renderer.setStyle(track, 'opacity', shouldShow ? '1' : '0');\n this.renderer.setStyle(\n track,\n 'pointer-events',\n shouldShow ? 'auto' : 'none',\n );\n }\n\n if (Math.abs(this.lastThumbWidth - thumbWidth) > 0.5) {\n this.lastThumbWidth = thumbWidth;\n this.renderer.setStyle(thumb, 'width', `${thumbWidth}px`);\n }\n\n if (Math.abs(this.lastThumbPosition - thumbPosition) > 0.5) {\n this.lastThumbPosition = thumbPosition;\n this.renderer.setStyle(\n thumb,\n 'transform',\n `translateX(${thumbPosition}px)`,\n );\n }\n\n const newState = this.calculateScrollState();\n this.updateScrollState(newState);\n }\n\n private setupResizeObserver(): void {\n // Run ResizeObserver outside Angular zone\n this.ngZone.runOutsideAngular(() => {\n const resizeObserver = new ResizeObserver(() => {\n this.updateScrollbar();\n });\n\n resizeObserver.observe(this.scrollContainer.nativeElement);\n resizeObserver.observe(\n this.scrollContainer.nativeElement.firstElementChild as Element,\n );\n\n this.destroyRef.onDestroy(() => {\n resizeObserver.disconnect();\n });\n });\n }\n\n private setupAlwaysVisibleTracking(): void {\n // Use IntersectionObserver for optimal performance - no layout thrashing\n const scrollbarTotalHeight = 10;\n const threshold = 10;\n\n // Shrink viewport to detect when scrollbar area is in the \"safe zone\"\n // The scrollbar appears at the bottom of the container, so we need to account for:\n // - threshold from top and bottom edges\n // - scrollbar height\n // - sticky offset\n const rootMarginTop = `-${threshold}px`;\n const rootMarginBottom = `-${scrollbarTotalHeight + threshold + this.stickyOffset}px`;\n const rootMargin = `${rootMarginTop} 0px ${rootMarginBottom} 0px`;\n\n this.intersectionObserver = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n // When the container's bottom edge is in the \"safe zone\" (accounting for rootMargin),\n // isIntersecting will be true\n const newInViewValue = entry.isIntersecting;\n const rect = entry.boundingClientRect;\n\n this.isContainerInView.set(newInViewValue);\n this.updateFixedTrackPosition(rect);\n });\n },\n {\n rootMargin: rootMargin,\n threshold: [0.25, 0.5, 0.75, 0.9, 0.99, 1],\n },\n );\n\n this.intersectionObserver.observe(this.scrollContainer.nativeElement);\n }\n\n private updateFixedTrackPosition(rect?: DOMRect): void {\n if (!this.alwaysVisible || this.hideTrack) {\n return;\n }\n\n const container = this.scrollContainer.nativeElement;\n const track = this.scrollThumb.nativeElement.parentElement;\n\n if (!track) {\n return;\n }\n\n // Only get rect if not provided (avoid duplicate getBoundingClientRect)\n const boundingRect = rect || container.getBoundingClientRect();\n\n if (this.isContainerInView()) {\n this.renderer.removeClass(track, 'fixed-mode');\n this.renderer.setStyle(track, 'position', 'sticky');\n this.renderer.removeStyle(track, 'left');\n this.renderer.removeStyle(track, 'width');\n } else {\n this.renderer.addClass(track, 'fixed-mode');\n this.renderer.setStyle(track, 'position', 'fixed');\n this.renderer.setStyle(track, 'left', `${boundingRect.left}px`);\n this.renderer.setStyle(track, 'width', `${boundingRect.width}px`);\n }\n }\n\n private updateScrollState(newState: eScrollState): void {\n if (this.currentScrollState !== newState) {\n this.currentScrollState = newState;\n this.scrollStateChange.emit(newState);\n }\n }\n\n private calculateScrollState(): eScrollState {\n const container = this.scrollContainer.nativeElement;\n const containerWidth = container.clientWidth;\n const contentWidth = container.scrollWidth;\n const scrollLeft = container.scrollLeft;\n const maxScroll = contentWidth - containerWidth;\n\n if (contentWidth <= containerWidth) {\n return eScrollState.NOT_NEEDED;\n }\n\n if (scrollLeft <= 1) {\n return eScrollState.START;\n }\n\n if (scrollLeft >= maxScroll - 1) {\n return eScrollState.END;\n }\n\n return eScrollState.SCROLLING;\n }\n\n onThumbMouseDown(event: MouseEvent): void {\n event.preventDefault();\n event.stopPropagation();\n\n this.isDragging = true;\n this.dragStartX = event.clientX;\n this.scrollStartLeft = this.scrollContainer.nativeElement.scrollLeft;\n }\n\n private onThumbDrag(event: MouseEvent): void {\n const container = this.scrollContainer.nativeElement;\n const deltaX = event.clientX - this.dragStartX;\n\n const containerWidth = container.clientWidth;\n const contentWidth = container.scrollWidth;\n const scrollDelta = (deltaX / containerWidth) * contentWidth;\n\n container.scrollLeft = this.scrollStartLeft + scrollDelta;\n this.updateScrollbar();\n\n this.updateScrollState(this.calculateScrollState());\n }\n\n public onThumbMouseUp(): void {\n this.isDragging = false;\n // Re-enter zone and trigger change detection for template binding [class.dragging]\n this.ngZone.run(() => this.cdr.markForCheck());\n }\n\n refresh(): void {\n // Use requestAnimationFrame to ensure browser has completed layout\n // before reading dimensions and updating thumb position\n requestAnimationFrame(() => {\n this.updateScrollbar();\n if (this.alwaysVisible) {\n this.updateFixedTrackPosition();\n }\n });\n }\n\n scrollToEnd(): void {\n if (!this.scrollContainer) {\n return;\n }\n\n const container = this.scrollContainer.nativeElement;\n const maxScroll = container.scrollWidth - container.clientWidth;\n\n container.scrollLeft = maxScroll;\n this.updateScrollbar();\n\n this.updateScrollState(this.calculateScrollState());\n }\n}\n","<div class=\"sticky-scrollbar-wrapper\">\n <div\n #scrollContainer\n class=\"sticky-scrollbar-container\"\n cdkScrollable\n tabindex=\"-1\"\n >\n <ng-content></ng-content>\n </div>\n @if (alwaysVisible && !isContainerInView()) {\n <div class=\"sticky-scrollbar-placeholder\"></div>\n }\n <div\n class=\"sticky-scrollbar-track\"\n [class.hidden]=\"hideTrack\"\n [class.always-visible]=\"alwaysVisible\"\n [class.fixed-mode]=\"alwaysVisible && !isContainerInView()\"\n [style.bottom.px]=\"stickyOffset\"\n >\n <div\n #scrollThumb\n class=\"sticky-scrollbar-thumb\"\n [class.dragging]=\"isDragging\"\n [class.hidden-thumb]=\"hideThumb\"\n (mousedown)=\"onThumbMouseDown($event)\"\n (mouseup)=\"onThumbMouseUp()\"\n ></div>\n </div>\n</div>\n","// Interfaces\nimport {\n IDispatchDropdownConfig,\n IDispatchDropdownOption,\n} from '../interfaces';\n\nexport class DispatchDropdownHelper {\n /**\n * Calculate the max height for grouped options dropdown menu\n */\n static calculateGroupMaxHeight(\n groups: Array<{\n highlightedOptions?: unknown[];\n isCollapsed?: boolean;\n }>,\n hasNoAddNew?: boolean,\n ): string {\n const hasNoAddNewFlag = hasNoAddNew ?? false;\n\n // Calculate total count for grouped options\n const groupedCount = groups.length\n ? groups\n .filter((group) => !group.isCollapsed)\n .reduce((total, group) => {\n const count = group.highlightedOptions?.length\n ? group.highlightedOptions.length\n : hasNoAddNewFlag\n ? 1\n : 2;\n return total + count;\n }, 0)\n : 0;\n\n const height =\n 6 +\n (groups.length ? groups.length * 34 - 4 : hasNoAddNewFlag ? 30 : 60) +\n groupedCount * 30;\n\n return height > 244 ? '244px' : `${height}px`;\n }\n\n /**\n * Calculate the max height for regular options dropdown menu\n */\n static calculateMaxHeight(\n optionsLength: number,\n hasNoAddNew?: boolean,\n ): string {\n const hasNoAddNewFlag = hasNoAddNew ?? false;\n const height = 6 + (optionsLength || (hasNoAddNewFlag ? 1 : 2)) * 30;\n return height > 244 ? '244px' : `${height}px`;\n }\n\n /**\n * Filter grouped options based on search value\n * Searches both group labels and option labels\n * Never removes groups - instead sorts by relevancy\n */\n static filterGroupedOptions(\n options: IDispatchDropdownOption[],\n searchValue: string,\n config: IDispatchDropdownConfig,\n ): IDispatchDropdownOption[] {\n const groupLabel = config.groupLabel ?? 'name';\n const groupOptionsKey = config.groupOptions ?? 'options';\n const optionLabel = config.optionLabel ?? 'name';\n\n if (!searchValue) return options;\n\n const lowerSearch = searchValue.toLowerCase();\n\n // Separate groups into relevant and irrelevant\n const relevantGroups: IDispatchDropdownOption[] = [];\n const irrelevantGroups: IDispatchDropdownOption[] = [];\n\n options.forEach((group) => {\n const groupName = group[groupLabel] ?? '';\n const groupOptions = group[groupOptionsKey] ?? [];\n\n // Check if group name matches\n const groupMatches = groupName.toLowerCase().includes(lowerSearch);\n\n // If group matches, include all options and mark as relevant\n if (groupMatches) {\n relevantGroups.push({\n ...group,\n _isRelevant: true,\n });\n return;\n }\n\n // Filter options within the group\n const filteredGroupOptions = groupOptions.filter(\n (option: IDispatchDropdownOption) => {\n const optionText = String(option[optionLabel] ?? '');\n return optionText.toLowerCase().includes(lowerSearch);\n },\n );\n\n // Group is relevant if it has matching options\n if (filteredGroupOptions.length > 0) {\n relevantGroups.push({\n ...group,\n [groupOptionsKey]: filteredGroupOptions,\n _isRelevant: true,\n });\n } else {\n // Keep the group but mark as irrelevant\n irrelevantGroups.push({\n ...group,\n _isRelevant: false,\n });\n }\n });\n\n // Return relevant groups first, then irrelevant groups\n return [...relevantGroups, ...irrelevantGroups];\n }\n\n /**\n * Process filtered options and add highlighting for grouped display\n */\n static processGroupedOptionsWithHighlighting(\n options: IDispatchDropdownOption[],\n searchValue: string,\n collapsedGroups: string[],\n config: IDispatchDropdownConfig,\n ) {\n const groupLabel = config.groupLabel ?? 'name';\n const groupOptionsKey = config.groupOptions ?? 'options';\n const optionLabel = config.optionLabel ?? 'name';\n\n const escapedSearchValue = searchValue\n ? searchValue.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n : '';\n const regex = escapedSearchValue\n ? new RegExp(escapedSearchValue, 'gi')\n : null;\n\n return options.map((group) => {\n const groupName = group[groupLabel] ?? '';\n const groupOptions = group[groupOptionsKey] ?? [];\n const isRelevant = group['_isRelevant'] ?? true;\n\n // Highlight group name if it matches\n const highlightedGroupName =\n regex && groupName.toLowerCase().includes(searchValue.toLowerCase())\n ? groupName.replace(regex, '<span class=\"cai-highlight\">$&</span>')\n : groupName;\n\n // Highlight options\n const highlightedOptions = groupOptions.map(\n (option: IDispatchDropdownOption) => {\n const text = String(option[optionLabel] ?? '');\n const highlighted =\n regex && text.toLowerCase().includes(searchValue.toLowerCase())\n ? text.replace(regex, '<span class=\"cai-highlight\">$&</span>')\n : text;\n\n return {\n ...option,\n highlighted,\n _group: group, // Reference to parent group\n };\n },\n );\n\n // Use the collapsedGroups parameter for collapse state\n const isCollapsed = groupName\n ? collapsedGroups.includes(groupName)\n : false;\n\n return {\n ...group,\n groupName,\n highlightedGroupName,\n highlightedOptions,\n isCollapsed,\n isRelevant, // Pass through for potential UI use\n };\n });\n }\n\n /**\n * Calculate which groups should be collapsed based on search relevancy\n * Returns the updated collapsedGroups array\n */\n static calculateCollapsedGroupsForSearch(\n options: IDispatchDropdownOption[],\n searchValue: string,\n config: IDispatchDropdownConfig,\n ): string[] {\n const groupLabel = config.groupLabel ?? 'name';\n const isSearching = searchValue.trim().length > 0;\n\n if (!isSearching) {\n return [];\n }\n\n const collapsedGroups: string[] = [];\n\n options.forEach((group) => {\n const groupName = group[groupLabel] ?? '';\n const isRelevant = group['_isRelevant'] ?? true;\n\n // Collapse irrelevant groups\n if (!isRelevant && groupName) {\n collapsedGroups.push(groupName);\n }\n });\n\n return collapsedGroups;\n }\n\n /**\n * Add highlighting to options based on search value\n */\n static highlightOptions(\n options: IDispatchDropdownOption[],\n searchValue: string,\n optionLabel: string,\n ) {\n if (!searchValue || searchValue.trim() === '') {\n return options.map((option) => ({\n ...option,\n highlighted: option[optionLabel],\n }));\n }\n\n const escapedSearchValue = searchValue.replace(\n /[.*+?^${}()|[\\]\\\\]/g,\n '\\\\$&',\n );\n const regex = new RegExp(escapedSearchValue, 'gi');\n\n return options.map((option) => {\n const text = option[optionLabel];\n const highlighted = text.toLowerCase().includes(searchValue.toLowerCase())\n ? text.replace(regex, '<span class=\"cai-highlight\">$&</span>')\n : text;\n\n return {\n ...option,\n highlighted,\n };\n });\n }\n}\n","// Components\nimport { CommonModule } from '@angular/common';\nimport {\n Component,\n computed,\n ElementRef,\n input,\n output,\n signal,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n NgbDropdown,\n NgbDropdownModule,\n NgbTooltip,\n} from '@ng-bootstrap/ng-bootstrap';\n\n// Components\nimport { SvgIconComponent } from 'angular-svg-icon';\n\n// Interfaces\nimport { IDispatchDropdownConfig, IDispatchDropdownOption } from './interfaces';\n\n// Helpers\nimport { DispatchDropdownHelper } from './helpers/dispatch-dropdown.helper';\n\n@Component({\n selector: 'cai-dispatch-dropdown',\n templateUrl: './dispatch-dropdown.component.html',\n styleUrl: './dispatch-dropdown.component.scss',\n imports: [\n CommonModule,\n FormsModule,\n\n // Bootstrap\n NgbDropdownModule,\n NgbTooltip,\n\n // Components\n SvgIconComponent,\n ],\n})\nexport class DispatchDropdownComponent {\n @ViewChild('dropdown') dropdown!: NgbDropdown;\n @ViewChild('container') containerRef!: ElementRef<HTMLDivElement>;\n @ViewChild('inputRef') inputRef!: ElementRef<HTMLInputElement>;\n\n selectedOption = input<IDispatchDropdownOption | null>(null);\n options = input<IDispatchDropdownOption[]>([]);\n config = input<IDispatchDropdownConfig>({});\n isEditable = input<boolean>(false);\n\n data = input<unknown | null>(null);\n\n isLocked = input<boolean>(false);\n hasNoRemoveButton = input<boolean>(false);\n isDisabled = input<boolean>(false);\n disabledTooltip = input<string>('');\n\n contentTemplate = input<TemplateRef<unknown> | null>(null);\n optionTemplateLeft = input<TemplateRef<unknown> | null>(null);\n optionTemplateRight = input<TemplateRef<unknown> | null>(null);\n noContentTemplate = input<TemplateRef<unknown> | null>(null);\n\n hideDropdownMenu = input<boolean>(false);\n\n onSelectionChange = output<IDispatchDropdownOption | null>();\n onRemove = output();\n onAddNew = output<number | null>();\n onSearch = output<string>();\n onToggleDropdown = output<boolean>();\n onBlur = output();\n\n searchValue = signal<string>('');\n closing = signal<boolean>(false);\n containerWidth = signal<number>(0);\n dropdownOpen = signal<boolean>(false);\n collapsedGroups = signal<string[]>([]);\n\n private closeTimeout: ReturnType<typeof setTimeout> | null = null;\n\n // Computed height styles for dropdown menu\n groupMaxHeightStyle = computed(() => {\n const groups = this.filteredGroupedOptions();\n const hasNoAddNew = this.config().hasNoAddNew;\n\n return DispatchDropdownHelper.calculateGroupMaxHeight(groups, hasNoAddNew);\n });\n\n maxHeightStyle = computed(() => {\n const hasNoAddNew = this.config().hasNoAddNew;\n const optionsLength = this.highlightedOptions()?.length;\n\n return DispatchDropdownHelper.calculateMaxHeight(\n optionsLength,\n hasNoAddNew,\n );\n });\n\n containerHeightStyle = computed(() => {\n const hasNoAddNew = this.config().hasNoAddNew;\n const optionsLength = this.options()?.length;\n\n return DispatchDropdownHelper.calculateMaxHeight(\n optionsLength,\n hasNoAddNew,\n );\n });\n\n // Computed filtered options - only recalculates when dependencies change\n filteredOptions = computed(() => {\n // Don't compute if dropdown is closed - major performance optimization\n if (!this.dropdownOpen() && !this.closing()) {\n return [];\n }\n\n const options = this.options();\n const searchValue = this.searchValue();\n const config = this.config();\n const hasPagination = config.hasPagination;\n const label = config.optionLabel ?? 'name';\n\n if (!options) return [];\n if (hasPagination) return options;\n\n // Handle grouped options\n if (config.isGrouped) {\n return DispatchDropdownHelper.filterGroupedOptions(\n options,\n searchValue,\n config,\n );\n }\n\n if (!searchValue) return options;\n\n return options.filter((option) =>\n option[label]?.toLowerCase().includes(searchValue.toLowerCase()),\n );\n });\n\n // Computed filtered grouped options - for grouped dropdown display\n filteredGroupedOptions = computed(() => {\n if (!this.config().isGrouped) return [];\n\n const options = this.filteredOptions();\n const config = this.config();\n const searchValue = this.searchValue();\n const collapsedGroups = this.collapsedGroups();\n\n return DispatchDropdownHelper.processGroupedOptionsWithHighlighting(\n options,\n searchValue,\n collapsedGroups,\n config,\n );\n });\n\n // Computed highlighted options - only recalculates when filtered options or search changes\n highlightedOptions = computed(() => {\n // For grouped options, use filteredGroupedOptions instead\n if (this.config().isGrouped) {\n return [];\n }\n\n const options = this.filteredOptions();\n const searchValue = this.searchValue();\n const label = this.config().optionLabel ?? 'name';\n\n return DispatchDropdownHelper.highlightOptions(options, searchValue, label);\n });\n\n private updateContainerWidth(): void {\n if (this.containerRef?.nativeElement) {\n this.containerWidth.set(\n this.containerRef?.nativeElement?.offsetWidth ?? 0,\n );\n }\n }\n\n private closeDropdown() {\n this.closing.set(true);\n this.searchValue.set('');\n this.onSearch.emit('');\n this.dropdownOpen.set(false);\n this.collapsedGroups.set([]);\n this.closeTimeout = setTimeout(() => {\n this.dropdown?.close();\n this.closing.set(false);\n }, 100);\n }\n\n handleOpenChange(event: boolean) {\n this.onToggleDropdown.emit(event);\n\n if (this.isLocked()) {\n return;\n }\n\n this.dropdownOpen.set(event);\n }\n\n handleFocus() {\n this.updateContainerWidth();\n if ((this.isLocked() || !!this.data()) && !this.isEditable()) {\n return;\n }\n\n if (this.closeTimeout) {\n clearTimeout(this.closeTimeout);\n this.closeTimeout = null;\n this.closing.set(false);\n }\n\n this.dropdown?.open();\n this.dropdownOpen.set(true);\n }\n\n handleClick($event?: MouseEvent) {\n if ($event) {\n $event.stopPropagation();\n $event.preventDefault();\n }\n\n if (\n (this.isLocked() || this.dropdownOpen() || this.data()) &&\n !this.isEditable()\n )\n return;\n\n this.inputRef?.nativeElement.focus();\n }\n\n handleBlur() {\n this.onBlur.emit();\n this.closeDropdown();\n }\n\n handleKeydown(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n this.inputRef?.nativeElement.blur();\n }\n }\n\n handleOption(event: MouseEvent, option: IDispatchDropdownOption) {\n event.stopPropagation();\n event.preventDefault();\n\n if (option.id === this.selectedOption()?.id) {\n return;\n }\n\n this.onSelectionChange.emit(option);\n this.inputRef?.nativeElement.blur();\n }\n\n handlePrimaryButtonClick(event: MouseEvent) {\n event.stopPropagation();\n event.preventDefault();\n\n if (this.data() && !this.isEditable()) {\n this.onRemove.emit();\n } else if (!this.dropdownOpen()) {\n this.handleClick();\n } else {\n this.inputRef?.nativeElement.blur();\n }\n }\n\n handleSearch(event: Event) {\n const input = event.target as HTMLInputElement;\n const searchValue = input.value;\n\n this.onSearch.emit(searchValue);\n\n // Handle grouped collapse state\n if (this.config().isGrouped) {\n if (searchValue.trim().length > 0) {\n // When searching, auto-collapse irrelevant groups\n const newCollapsedGroups =\n DispatchDropdownHelper.calculateCollapsedGroupsForSearch(\n this.filteredOptions(),\n searchValue,\n this.config(),\n );\n this.collapsedGroups.set(newCollapsedGroups);\n } else {\n // When search is cleared, uncollapse all groups\n this.collapsedGroups.set([]);\n }\n }\n }\n\n handleAddNew(id: number | null) {\n this.onAddNew.emit(id);\n }\n\n toggleGroup(event: MouseEvent, groupName?: string) {\n event.stopPropagation();\n event.preventDefault();\n\n if (!groupName) {\n return;\n }\n\n this.collapsedGroups.update((current) => {\n if (current.includes(groupName)) {\n return current.filter((name) => name !== groupName);\n } else {\n return [...current, groupName];\n }\n });\n }\n\n stopEventPropagationAndPreventDefault(event: Event) {\n event.stopPropagation();\n event.preventDefault();\n }\n}\n","@let hasNoAdd = config().hasNoAdd ?? false;\n@let hasNoAddNew = config().hasNoAddNew ?? false;\n@let optionLabel = config().optionLabel ?? \"name\";\n@let groupLabel = config().groupLabel ?? \"name\";\n\n<div\n #container\n class=\"dispatch-dropdown\"\n [ngClass]=\"{\n open: dropdownOpen(),\n 'has-data': !!data(),\n 'is-locked': isLocked(),\n 'has-no-remove-button': hasNoRemoveButton(),\n 'has-no-add': hasNoAdd,\n 'has-no-content-template': noContentTemplate(),\n editable: isEditable(),\n }\"\n ngbDropdown\n #dropdown=\"ngbDropdown\"\n dropdownClass=\"cai-dropdown\"\n [autoClose]=\"false\"\n [container]=\"'body'\"\n (pointerdown)=\"handleClick($event)\"\n (openChange)=\"handleOpenChange($event)\"\n>\n <div class=\"main-container\">\n <div class=\"dispatch-template\">\n @if (data()) {\n <ng-container\n *ngTemplateOutlet=\"contentTemplate(); context: { $implicit: data() }\"\n ></ng-container>\n }\n </div>\n\n <div class=\"no-content\">\n @if (noContentTemplate()) {\n <ng-container\n *ngTemplateOutlet=\"\n noContentTemplate();\n context: { $implicit: data() }\n \"\n ></ng-container>\n } @else {\n <span class=\"default-add\">ADD</span>\n }\n </div>\n\n <div class=\"dropdown-input-container\">\n <input\n #inputRef\n type=\"text\"\n class=\"dispatch-dropdown-input\"\n [tabIndex]=\"!!data() || isLocked() ? -1 : 0\"\n (focus)=\"handleFocus()\"\n (blur)=\"handleBlur()\"\n (keydown)=\"handleKeydown($event)\"\n [placeholder]=\"config().placeholder\"\n [(ngModel)]=\"searchValue\"\n (input)=\"handleSearch($event)\"\n />\n </div>\n </div>\n\n @let isButtonLocked =\n isLocked() || (hasNoRemoveButton() && !!data() && !isEditable());\n\n @let buttonTooltip =\n isDisabled()\n ? disabledTooltip()\n : dropdownOpen()\n ? \"Cancel\"\n : data()\n ? \"Remove\"\n : \"\";\n\n @let buttonTooltipClass =\n isDisabled()\n ? \"input-tooltip tooltip-m-t-4\"\n : dropdownOpen() || !data() || isEditable()\n ? \"input-tooltip tooltip-m-t-4 tooltip-bg-white-700 tooltip-text-black-500\"\n : \"input-tooltip tooltip-m-t-4 tooltip-bg-red-500\";\n\n <div class=\"buttons-container\" [class.locked]=\"isButtonLocked\">\n <div\n class=\"primary-button\"\n [class.disabled]=\"isDisabled()\"\n (pointerdown)=\"isDisabled() ? null : handlePrimaryButtonClick($event)\"\n [ngbTooltip]=\"buttonTooltip\"\n [tooltipClass]=\"buttonTooltipClass\"\n [container]=\"'body'\"\n [autoClose]=\"true\"\n [openDelay]=\"600\"\n [placement]=\"'bottom'\"\n >\n <svg-icon name=\"cai-plus\" class=\"primary-button-icon\"></svg-icon>\n </div>\n <div class=\"dragging-indicator\">\n <svg-icon name=\"cai-drag\" class=\"dragging-icon\"></svg-icon>\n </div>\n </div>\n\n <div class=\"dropdown-anchor\" ngbDropdownAnchor></div>\n\n <div\n class=\"dropdown-menu dispatch-dropdown-menu\"\n [class.hide-dropdown]=\"hideDropdownMenu()\"\n #dropdownMenu\n ngbDropdownMenu\n (click)=\"stopEventPropagationAndPreventDefault($event)\"\n (pointerdown)=\"stopEventPropagationAndPreventDefault($event)\"\n [style.width.px]=\"containerWidth()\"\n [class.closing]=\"closing()\"\n [style.--max-height]=\"\n config().isGrouped ? groupMaxHeightStyle() : maxHeightStyle()\n \"\n [style.--container-height]=\"\n config().hasPagination || config().isGrouped\n ? '244px'\n : containerHeightStyle()\n \"\n >\n <div class=\"dropdown-menu-content\">\n <div class=\"dropdown-menu-separator\"></div>\n\n @if (config().isGrouped) {\n <ng-container *ngTemplateOutlet=\"groupedOptionsTemplate\"></ng-container>\n } @else {\n <ng-container *ngTemplateOutlet=\"optionsTemplate\"></ng-container>\n }\n </div>\n </div>\n</div>\n\n<ng-template #optionsTemplate>\n @if (highlightedOptions().length) {\n @for (option of highlightedOptions(); track option?.id ?? $index) {\n <ng-container\n *ngTemplateOutlet=\"dropdownItemTemplate; context: { $implicit: option }\"\n ></ng-container>\n }\n } @else {\n <ng-container *ngTemplateOutlet=\"noResultsTemplate\"></ng-container>\n }\n</ng-template>\n\n<ng-template #groupedOptionsTemplate>\n @if (filteredGroupedOptions().length) {\n @for (group of filteredGroupedOptions(); track group?.id ?? $index) {\n <div class=\"dropdown-group-container\">\n <div\n class=\"dropdown-group-header\"\n [class.collapsed]=\"group.isCollapsed\"\n (pointerdown)=\"toggleGroup($event, group.groupName)\"\n >\n <p class=\"dropdown-group-label\" [innerHTML]=\"group.groupName\"></p>\n <div class=\"header-right\">\n <div class=\"counter\">{{ group.highlightedOptions.length }}</div>\n <svg-icon\n name=\"cai-arrow-primary-up\"\n class=\"dropdown-icon\"\n ></svg-icon>\n </div>\n </div>\n\n @let groupHeight =\n (group.highlightedOptions.length || (config().hasNoAddNew ? 1 : 2)) *\n 30 +\n \"px\";\n <div\n class=\"dropdown-group\"\n [class.collapsed]=\"group.isCollapsed\"\n [style.--group-height]=\"groupHeight\"\n >\n @if (group.highlightedOptions.length) {\n @for (\n option of group.highlightedOptions;\n track option?.id ?? $index\n ) {\n <ng-container\n *ngTemplateOutlet=\"\n dropdownItemTemplate;\n context: { $implicit: option }\n \"\n ></ng-container>\n }\n } @else {\n <ng-container\n *ngTemplateOutlet=\"noResultsTemplate; context: { id: group.id }\"\n ></ng-container>\n }\n </div>\n </div>\n }\n } @else {\n <ng-container\n *ngTemplateOutlet=\"noResultsTemplate; context: { id: null }\"\n ></ng-container>\n }\n</ng-template>\n\n<ng-template #noResultsTemplate let-id=\"id\">\n @if (!hasNoAddNew) {\n <div class=\"dropdown-item add-new\" (pointerdown)=\"handleAddNew(id ?? null)\">\n <p class=\"add-new-text\">ADD NEW</p>\n <svg-icon name=\"cai-plus\" class=\"add-item-icon\"></svg-icon>\n </div>\n }\n <div class=\"dropdown-item no-results\">\n <p>No results</p>\n </div>\n</ng-template>\n\n<ng-template #dropdownItemTemplate let-option>\n <div class=\"dropdown-item\" (pointerdown)=\"handleOption($event, option)\">\n <ng-container\n *ngTemplateOutlet=\"optionTemplateLeft(); context: { $implicit: option }\"\n ></ng-container>\n <p [innerHTML]=\"option.highlighted\"></p>\n <ng-container\n *ngTemplateOutlet=\"optionTemplateRight(); context: { $implicit: option }\"\n ></ng-container>\n </div>\n</ng-template>\n","// Angular\nimport {\n Component,\n ElementRef,\n input,\n Optional,\n output,\n Self,\n signal,\n ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\n\n// Bootstrap\nimport { NgbModule, NgbTooltip } from '@ng-bootstrap/ng-bootstrap';\n\n// Components\nimport { SvgIconComponent } from 'angular-svg-icon';\n\n// Interfaces\nimport { ITextAreaConfig } from './interfaces';\n\n/**\n * This component is a text area component that integrates with Angular forms.\n */\n@Component({\n selector: 'cai-text-area',\n templateUrl: './text-area.component.html',\n styleUrl: './text-area.component.scss',\n imports: [\n // Bootstrap\n NgbModule,\n NgbTooltip,\n // Components\n SvgIconComponent,\n ],\n})\nexport class TextAreaComponent implements ControlValueAccessor {\n // Refs\n @ViewChild('cancelTooltip') cancelTooltip!: NgbTooltip;\n @ViewChild('textArea') textArea!: ElementRef<HTMLTextAreaElement>;\n\n // Inputs\n /**\n * Configuration object for the text area's behavior and appearance.\n */\n config = input<ITextAreaConfig>({});\n\n // Signals\n /**\n * Holds the internal value of the text area.\n */\n value = signal<string>('');\n\n /**\n * Internal signal to track the disabled state of the text area.\n */\n disabled = signal<boolean>(false);\n\n /**\n * A signal that indicates whether the text area is focused.\n */\n focused = signal<boolean>(false);\n\n // Outputs\n onBlur = output();\n onFocused = output();\n onValueChange = output<string | null>();\n onClearEvent = output();\n\n /**\n * Constructor for the TextAreaComponent.\n * It injects NgControl to integrate with Angular's forms API.\n * @param ngControl - Optional NgControl instance for form integration.\n */\n constructor(@Optional() @Self() public ngControl: NgControl | null) {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n // ControlValueAccessor methods\n onChange = (_: any) => {};\n onTouched = () => {};\n\n /**\n * Writes a new value to the element. (ControlValueAccessor)\n */\n writeValue(value: any): void {\n this.value.set(value || '');\n // Use requestAnimationFrame to ensure the view is initialized\n requestAnimationFrame(() => {\n this.setValue();\n });\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n\n /**\n * Handles the native 'input' event from the HTMLTextAreaElement.\n * Updates the component's internal value and notifies Angular forms.\n * @param event - The input event object.\n */\n onInput(event: Event): void {\n const textAreaElement = event.target as HTMLTextAreaElement;\n const max = this.config().max;\n\n if (max && textAreaElement.value.length > max) {\n const cursorPosition = textAreaElement.selectionStart || 0;\n textAreaElement.value = textAreaElement.value.slice(0, max);\n const newCursorPosition = Math.min(cursorPosition, max);\n textAreaElement.setSelectionRange(newCursorPosition, newCursorPosition);\n }\n\n this.value.set(textAreaElement.value);\n this.dispatchOnChange(this.value());\n }\n\n /**\n * Dispatches the onChange event with the provided value.\n * @param value - The value to pass to onChange\n */\n dispatchOnChange(value: any): void {\n if (value === undefined || value === null || value === '') {\n this.onChange(null);\n this.onValueChange.emit(null);\n } else {\n this.onChange(value);\n this.onValueChange.emit(value);\n }\n }\n\n /**\n * Sets the value in the actual HTML text area element.\n */\n setValue(): void {\n if (this.textArea?.nativeElement) {\n this.textArea.nativeElement.value = this.value();\n }\n }\n\n /**\n * Focuses the text area element.\n */\n focus(event?: MouseEvent): void {\n if (event && event.target === this.textArea?.nativeElement) {\n return;\n }\n\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n if (this.textArea?.nativeElement) {\n this.textArea.nativeElement.focus();\n }\n }\n\n /**\n * Called when the text area receives focus.\n */\n onFocus(): void {\n this.onFocused.emit();\n this.focused.set(true);\n }\n\n /**\n * Called when the text area loses focus.\n */\n dispatchOnBlur(): void {\n this.onBlur.emit();\n this.onTouched();\n this.focused.set(false);\n }\n\n /**\n * Resets the text area value to an empty string.\n */\n reset(event?: MouseEvent): void {\n this.value.set('');\n this.dispatchOnChange('');\n this.setValue();\n this.onClearEvent.emit();\n\n if (this.cancelTooltip) {\n this.cancelTooltip.close();\n }\n\n if (event) {\n this.focus(event);\n }\n }\n\n /**\n * Handles the clear button click.\n */\n onClear(event: MouseEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.reset(event);\n }\n}\n","@let name = config().name;\n\n<div class=\"text-area-container\" (pointerdown)=\"focus($event)\">\n <label class=\"label\">{{ name }}</label>\n\n <textarea\n class=\"text-area\"\n placeholder=\"\"\n #textArea\n [disabled]=\"disabled()\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"dispatchOnBlur()\"\n ></textarea>\n <svg-icon name=\"cai-checkmark\" class=\"checkmark-icon\"></svg-icon>\n <button\n class=\"cancel-button\"\n ngbTooltip=\"Cancel\"\n #cancelTooltip=\"ngbTooltip\"\n [openDelay]=\"600\"\n tooltipClass=\"tooltip input-tooltip\"\n [placement]=\"'top'\"\n [container]=\"'body'\"\n [autoClose]=\"true\"\n (click)=\"onClear($event)\"\n >\n <svg-icon [name]=\"'cai-cancel'\" class=\"cancel-icon\"></svg-icon>\n </button>\n</div>\n","// Angular\nimport { Pipe, PipeTransform } from '@angular/core';\n\n// Interfaces\nimport { ILastStatusData } from '../interfaces';\n\n@Pipe({\n name: 'lastStatusFormat',\n})\nexport class LastStatusFormatPipe implements PipeTransform {\n transform(value: ILastStatusData | null | undefined): string {\n if (!value) {\n return '';\n }\n\n const { days, hours, minutes } = value;\n\n // If days and hours are present\n if (days && days > 0) {\n return `${days}d ${hours}h ago`;\n }\n\n // If hours and minutes are present\n if (hours && hours > 0) {\n return `${hours}h ${minutes}m ago`;\n }\n\n // If only minutes are present\n if (minutes && minutes > 0) {\n return `${minutes} min ago`;\n }\n\n return 'Just now';\n }\n}\n","// Angular\nimport {\n Component,\n computed,\n effect,\n Input,\n input,\n OnDestroy,\n OnInit,\n output,\n signal,\n ViewChild,\n} from '@angular/core';\n\n// RXJS\nimport {\n catchError,\n debounceTime,\n distinctUntilChanged,\n filter,\n of,\n Subject,\n takeUntil,\n tap,\n} from 'rxjs';\n\n// Components\nimport { DispatchDropdownComponent } from '../dispatch-dropdown/dispatch-dropdown.component';\nimport { SvgIconComponent } from 'angular-svg-icon';\n\n// Interfaces\nimport { IDispatchDropdownConfig } from '../dispatch-dropdown/interfaces';\nimport { ILastStatusData } from './interfaces';\n\n// Pipes\nimport { LastStatusFormatPipe } from './pipes/last-status-format.pipe';\n\n// Models\nimport {\n AddressData,\n AddressEntity,\n} from '../input-address/models/address-data.model';\nimport { AutocompleteSearchLayer } from '../input-address/models/sent-address-data.model';\nimport { AddressList } from '../input-address/models/address-list.model';\n\n// Enums\nimport { InputAddressLayersStringEnum } from '../input-address/enums/input-address-layers-string.enum';\nimport { NgbTooltip } from '@ng-bootstrap/ng-bootstrap';\n\n@Component({\n selector: 'cai-dispatch-location',\n templateUrl: './dispatch-location.component.html',\n styleUrl: './dispatch-location.component.scss',\n imports: [\n NgbTooltip,\n // Components\n DispatchDropdownComponent,\n SvgIconComponent,\n\n // Pipes\n LastStatusFormatPipe,\n ],\n})\nexport class DispatchLocationComponent implements OnInit, OnDestroy {\n @ViewChild('dispatchDropdown') dispatchDropdown!: DispatchDropdownComponent;\n\n id = input<string>('');\n locationData = input<AddressEntity | null>(null);\n highlightedLocationString = input<string>('');\n lastStatusData = input<ILastStatusData | null>(null);\n isParking = input<boolean>(false);\n isEditable = input<boolean>(false);\n parkingName = input<string>('');\n\n showParkingIcon = computed(() => this.isParking() && !!this.parkingName());\n\n @Input() public set receivedAddressData(value: AddressData | null) {\n if (value) {\n this.currentAddressData = {\n address: value.address,\n valid: value.address && value.longLat ? true : false,\n longLat: value.longLat,\n isParking: this.isParkingAddressSelected,\n };\n\n this.selectedAddress.emit(this.currentAddressData!);\n }\n }\n\n @Input() public set receivedAddressList(\n value: { addresses?: string[] } | null,\n ) {\n if (value?.addresses) {\n let uniqueIdCounter = 0;\n let parkingAddressesList: any = [];\n\n this.addressList = value.addresses.map((item: string) => {\n // Remove ', US' from the end of the name if present\n const formattedName = item.endsWith(', US')\n ? item.slice(0, -4).trim()\n : item;\n\n const parkingAddress = this._parkingList?.length\n ? this.filterParkingByCity(item)\n : null;\n\n if (parkingAddress?.length)\n parkingAddressesList.push({\n name: item,\n formattedName,\n id: uniqueIdCounter++,\n parkingAddress,\n });\n return {\n name: item,\n formattedName,\n id: uniqueIdCounter++,\n };\n });\n\n // Combine parking addresses and regular addresses without deduplication\n this.addressList = [...parkingAddressesList, ...this.addressList];\n this.options = this.addressList;\n this.isLoading.set(false);\n }\n }\n\n @Input() public set parkingList(value: any[]) {\n this._parkingList = value;\n }\n\n // Outputs\n selectedAddress = output<any>();\n sentAddressData = output<any>();\n sentAddressValue = output<any>();\n onClear = output();\n onToggleDropdown = output<boolean>();\n onBlur = output();\n\n // Public Properties\n public config: IDispatchDropdownConfig = {\n hasNoAdd: true,\n hasNoAddNew: true,\n placeholder: '',\n hasPagination: true,\n optionLabel: 'formattedName',\n };\n\n public options: AddressList[] = [];\n public addressList: AddressList[] = [];\n public currentAddressData: AddressData | null = null;\n public isParkingAddressSelected: boolean = false;\n public isLoading = signal<boolean>(false);\n public hideDropdownMenu = signal<boolean>(true);\n\n // Private Properties\n private _parkingList: {\n name: string | null;\n address: AddressEntity;\n }[] = [];\n private searchLayers: AutocompleteSearchLayer[] = [\n InputAddressLayersStringEnum.LOCALITY,\n ];\n private destroy$ = new Subject<void>();\n private searchSubject$ = new Subject<string>();\n\n // Lifecycle Hooks\n ngOnInit(): void {\n this.initSearchListener();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n // Private Methods\n private initSearchListener(): void {\n this.searchSubject$\n .pipe(\n distinctUntilChanged(),\n takeUntil(this.destroy$),\n tap((term) => {\n if (!term) {\n this.isLoading.set(false);\n this.addressList = [];\n this.options = [];\n return;\n }\n }),\n filter((term: string) => {\n if (term?.length >= 3) {\n this.isLoading.set(true);\n this.hideDropdownMenu.set(false);\n } else {\n this.hideDropdownMenu.set(true);\n }\n return term?.length >= 3;\n }),\n debounceTime(300),\n tap((query: string) => {\n const params = {\n query: query,\n searchLayers: this.searchLayers,\n closedBorder: false,\n };\n\n this.sentAddressData.emit(params);\n }),\n catchError((error) => {\n this.isLoading.set(false);\n return of(null);\n }),\n )\n .subscribe();\n }\n\n private filterParkingByCity(searchString: string): any {\n const formattedSearchString = searchString.trim().replace(/\\s*,\\s*/g, ', ');\n\n const isParking = this._parkingList\n .filter((parking: any) => {\n const { city, stateShortName, country } = parking.address || {};\n const formattedAddress = `${city}, ${stateShortName}, ${country}`;\n return formattedAddress === formattedSearchString;\n })\n .map((parking: any) => ({\n ...parking,\n address: {\n ...parking.address,\n isParking: true,\n },\n }));\n\n return isParking;\n }\n\n public focus(): void {\n this.dispatchDropdown.handleClick();\n }\n\n // Public Methods\n handleSearch(event: string) {\n this.searchSubject$.next(event);\n }\n\n handleAddressSelect(selectedOption: any) {\n this.isParkingAddressSelected = false;\n const address = selectedOption;\n\n if (address?.parkingAddress?.length) {\n this.sentAddressValue.emit(address?.parkingAddress[0]?.address?.address);\n this.isParkingAddressSelected = true;\n return;\n }\n\n this.sentAddressValue.emit(address?.name);\n }\n\n handleToggleDropdown(event: boolean) {\n this.hideDropdownMenu.set(event);\n this.onToggleDropdown.emit(event);\n }\n\n handleBlur() {\n this.onBlur.emit();\n }\n}\n","<cai-dispatch-dropdown\n #dispatchDropdown\n [hasNoRemoveButton]=\"true\"\n [isLocked]=\"false\"\n [data]=\"locationData()\"\n [options]=\"options\"\n [config]=\"config\"\n [hideDropdownMenu]=\"hideDropdownMenu()\"\n [optionTemplateRight]=\"rightOptionTemplate\"\n [contentTemplate]=\"contentTemplate\"\n [isEditable]=\"isEditable()\"\n (onSearch)=\"handleSearch($event)\"\n (onSelectionChange)=\"handleAddressSelect($event)\"\n (onToggleDropdown)=\"handleToggleDropdown($event)\"\n (onBlur)=\"handleBlur()\"\n>\n</cai-dispatch-dropdown>\n\n<ng-template #contentTemplate let-data>\n @let city = data?.city;\n @let stateShortName = data?.stateShortName;\n\n @let fullAddress =\n city && stateShortName\n ? city + \", \" + stateShortName\n : city || stateShortName;\n\n <div\n class=\"content-wrapper\"\n [ngbTooltip]=\"isEditable() ? 'Update Location' : null\"\n [tooltipClass]=\"'input-tooltip tooltip-m-t-4'\"\n [container]=\"'body'\"\n [autoClose]=\"true\"\n [openDelay]=\"600\"\n [placement]=\"'bottom'\"\n >\n <div class=\"content-container\">\n <div class=\"address-text-container\">\n <div class=\"address-text\" [innerHTML]=\"highlightedLocationString()\">\n {{ fullAddress }}\n </div>\n </div>\n <div class=\"status-text\">\n <span class=\"last-status-text\">\n {{ lastStatusData() | lastStatusFormat }}\n </span>\n <span class=\"parking-name-text\">\n {{ parkingName() }}\n </span>\n </div>\n </div>\n @if (showParkingIcon()) {\n <div class=\"parking-icon-container\">\n <svg-icon name=\"cai-parking\" class=\"parking-icon\"></svg-icon>\n </div>\n }\n </div>\n</ng-template>\n\n<ng-template #rightOptionTemplate let-option>\n @if (option?.parkingAddress?.length) {\n <div\n class=\"parking-icon-container\"\n [ngbTooltip]=\"option?.parkingAddress?.[0]?.name\"\n [tooltipClass]=\"\n 'input-tooltip tooltip-m-t-4 tooltip-bg-white-700 tooltip-text-black-500'\n \"\n [container]=\"'body'\"\n [autoClose]=\"true\"\n [openDelay]=\"600\"\n [placement]=\"'bottom'\"\n >\n <svg-icon name=\"cai-parking\" class=\"parking-icon\"></svg-icon>\n </div>\n }\n</ng-template>\n","// Angular\nimport {\n Component,\n input,\n signal,\n ViewChild,\n ElementRef,\n Optional,\n Self,\n OnDestroy,\n} from '@angular/core';\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\n\n// Components\nimport { SvgIconComponent } from 'angular-svg-icon';\n\n@Component({\n selector: 'cai-counter',\n templateUrl: './counter.component.html',\n styleUrl: './counter.component.scss',\n imports: [\n // Components\n SvgIconComponent,\n ],\n})\nexport class CounterComponent implements ControlValueAccessor, OnDestroy {\n @ViewChild('inputRef') inputRef!: ElementRef<HTMLInputElement>;\n\n min = input<number | null>(null);\n max = input<number | null>(null);\n\n value = signal<number | null>(null);\n keyPressed = signal<'up' | 'down' | null>(null);\n\n private keyPressedTimeout: ReturnType<typeof setTimeout> | null = null;\n\n // ControlValueAccessor callbacks\n onChange = (_: any) => {};\n onTouched = () => {};\n\n /**\n * Constructor for the CounterComponent.\n * It injects NgControl to integrate with Angular's forms API.\n * If NgControl is present, it sets this component as the value accessor\n * for the form control.\n * @param ngControl - Optional NgControl instance for form integration.\n */\n constructor(@Optional() @Self() public ngControl: NgControl | null) {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n /**\n * Handles input changes from the input element.\n * @param event - The input event.\n */\n onInput(event: Event): void {\n const inputElement = event.target as HTMLInputElement;\n let rawValue = inputElement.value;\n\n // Remove any non-digit characters (including decimal points, negative signs, etc.)\n rawValue = rawValue.replace(/[^\\d]/g, '');\n\n if (rawValue === '' || rawValue === null) {\n this.value.set(0);\n this.onChange(0);\n this.updateInputValue();\n return;\n }\n\n // Parse as integer to ensure whole numbers only\n let numericValue = parseInt(rawValue, 10);\n\n // Ensure positive values only\n if (numericValue < 0) {\n numericValue = 0;\n }\n\n // Apply min/max constraints\n if (this.min() !== null && numericValue < this.min()!) {\n numericValue = this.min()!;\n }\n\n if (this.max() !== null && numericValue > this.max()!) {\n numericValue = this.max()!;\n }\n\n // Update input value to remove leading zeros and non-digits\n inputElement.value = String(numericValue);\n\n this.value.set(numericValue);\n this.onChange(numericValue);\n }\n\n /**\n * Handles blur event on the input element.\n */\n onBlur(): void {\n this.onTouched();\n }\n\n /**\n * Increments or decrements the value.\n * @param step - The amount to increment (positive) or decrement (negative).\n */\n increment(step: number): void {\n const currentValue = this.value() ?? 0;\n let newValue = currentValue + step;\n\n // Apply min/max constraints\n if (this.min() !== null && newValue < this.min()!) {\n newValue = this.min()!;\n }\n\n if (this.max() !== null && newValue > this.max()!) {\n newValue = this.max()!;\n }\n\n this.value.set(newValue);\n this.onChange(newValue);\n this.updateInputValue();\n }\n\n /**\n * Updates the input element's value to match the internal value.\n */\n private updateInputValue(): void {\n requestAnimationFrame(() => {\n if (this.inputRef?.nativeElement) {\n this.inputRef.nativeElement.value =\n this.value() !== null ? String(this.value()) : '';\n }\n });\n }\n\n // ControlValueAccessor implementation\n\n /**\n * Writes a new value to the element.\n * @param value - The new value.\n */\n writeValue(value: any): void {\n const numericValue =\n value !== null && value !== undefined ? Number(value) : null;\n this.value.set(numericValue);\n this.updateInputValue();\n }\n\n /**\n * Registers a callback function that is called when the control's value changes.\n * @param fn - The callback function.\n */\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n /**\n * Registers a callback function that is called when the control is touched.\n * @param fn - The callback function.\n */\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n focus(event: PointerEvent): void {\n if (event.target === this.inputRef?.nativeElement) {\n return;\n }\n event.preventDefault();\n this.inputRef?.nativeElement.focus();\n }\n\n onKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'ArrowUp':\n this.increment(1);\n this.flashKeyPressed('up');\n return;\n\n case 'ArrowDown':\n this.increment(-1);\n this.flashKeyPressed('down');\n return;\n\n case 'Escape':\n event.preventDefault();\n event.stopPropagation();\n this.inputRef?.nativeElement.blur();\n break;\n }\n }\n\n /**\n * Applies a temporary key-pressed class effect to the specified arrow.\n * @param direction - The arrow direction ('up' or 'down').\n */\n private flashKeyPressed(direction: 'up' | 'down'): void {\n // Clear existing timeout if any\n if (this.keyPressedTimeout !== null) {\n clearTimeout(this.keyPressedTimeout);\n }\n\n this.keyPressed.set(direction);\n this.keyPressedTimeout = setTimeout(() => {\n this.keyPressed.set(null);\n this.keyPressedTimeout = null;\n }, 100);\n }\n\n /**\n * Cleanup timeouts when component is destroyed.\n */\n ngOnDestroy(): void {\n if (this.keyPressedTimeout !== null) {\n clearTimeout(this.keyPressedTimeout);\n }\n }\n}\n","<div\n class=\"counter-container\"\n [class.has-value]=\"value()\"\n (pointerdown)=\"focus($event)\"\n>\n <input\n #inputRef\n class=\"input\"\n type=\"text\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n (keydown)=\"onKeydown($event)\"\n />\n\n <div\n class=\"arrows\"\n [class.min]=\"value() === min()\"\n [class.max]=\"value() === max()\"\n >\n <svg-icon\n name=\"cai-arrow-primary-up\"\n class=\"arrow up\"\n [class.key-pressed]=\"keyPressed() === 'up'\"\n (pointerdown)=\"increment(1)\"\n ></svg-icon>\n <svg-icon\n name=\"cai-arrow-primary-up\"\n class=\"arrow down\"\n [class.key-pressed]=\"keyPressed() === 'down'\"\n (pointerdown)=\"increment(-1)\"\n ></svg-icon>\n </div>\n</div>\n","/*\n * Public API Surface of carriera-intern\n */\nexport * from './app/utils';\nexport * from './app/components/input/models';\nexport * from './app/components/pm/pm.component';\nexport * from './app/components/input/input.component';\nexport * from './app/components/drop-zone/drop-zone.component';\nexport * from './app/components/drop-zone/models';\nexport * from './app/components/input-datetime-picker/cai-input-datetime-picker.component';\nexport * from './app/components/input-datetime-picker/components/cai-custom-datetime-pickers/config';\nexport * from './app/components/avatar/avatar.component';\nexport * from './app/components/copy/copy.component';\nexport * from './app/components/input-address/input-address.component';\nexport * from './app/components/selected-location-field/selected-business-field.component';\nexport * from './app/components/input-datetime-picker/interfaces';\nexport * from './app/components/rating_review/review-modal/review-modal.component';\nexport * from './app/components/rating_review/rating-review/rating-review/rating-review.component';\nexport * from './app/components/list-contact-dropdown/list-contact-dropdown.component';\nexport * from './app/components/tab-option-dropdown/tab-option-dropdown.component';\nexport * from './app/components/tab-option-dropdown/interfaces';\nexport * from './app/components/toolbar-dropdown/interval-dropdown.component';\nexport * from './app/components/toolbar-dropdown/interfaces';\nexport * from './app/components/sticky-scrollbar/sticky-scrollbar.component';\nexport * from './app/components/sticky-scrollbar/enums';\nexport * from './app/components/dispatch-dropdown/dispatch-dropdown.component';\nexport * from './app/components/dispatch-dropdown/interfaces';\nexport * from './app/components/text-area/text-area.component';\nexport * from './app/components/text-area/interfaces';\nexport * from './app/components/dispatch-location/dispatch-location.component';\nexport * from './app/components/counter/counter.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i3","i1","i1.CalendarDateTimePickerService","factory","InputConfigNameStringEnum","i2.CalendarDateTimePickerService","i5","distinctUntilChanged","i1.DateFormatingPipe","takeUntil"],"mappings":"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"}