carriera-intern 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (597) hide show
  1. package/.cursor/rules/icons.mdc +7 -0
  2. package/.editorconfig +17 -0
  3. package/.vscode/extensions.json +4 -0
  4. package/.vscode/launch.json +20 -0
  5. package/.vscode/tasks.json +42 -0
  6. package/README.md +59 -0
  7. package/angular.json +94 -0
  8. package/carriera-intern@0.0.0 +0 -0
  9. package/package.json +61 -0
  10. package/projects/carriera-intern-components/.storybook/main.ts +12 -0
  11. package/projects/carriera-intern-components/.storybook/preview-head.html +13 -0
  12. package/projects/carriera-intern-components/.storybook/preview.ts +54 -0
  13. package/projects/carriera-intern-components/.storybook/tsconfig.doc.json +10 -0
  14. package/projects/carriera-intern-components/.storybook/tsconfig.json +11 -0
  15. package/projects/carriera-intern-components/.storybook/typings.d.ts +4 -0
  16. package/projects/carriera-intern-components/README.md +63 -0
  17. package/projects/carriera-intern-components/ng-package.json +14 -0
  18. package/projects/carriera-intern-components/package.json +14 -0
  19. package/projects/carriera-intern-components/public/assets/animations/animation-document-update.json +1 -0
  20. package/projects/carriera-intern-components/public/assets/animations/animation-image.json +1 -0
  21. package/projects/carriera-intern-components/public/assets/animations/animation-logo.json +1 -0
  22. package/projects/carriera-intern-components/public/assets/animations/animation-media.json +1 -0
  23. package/projects/carriera-intern-components/public/assets/cdl.png +0 -0
  24. package/projects/carriera-intern-components/public/assets/exampledoc.png +0 -0
  25. package/projects/carriera-intern-components/public/assets/examplelargeview.png +0 -0
  26. package/projects/carriera-intern-components/public/assets/icons/Thumb-active.svg +3 -0
  27. package/projects/carriera-intern-components/public/assets/icons/Thumb.svg +3 -0
  28. package/projects/carriera-intern-components/public/assets/icons/arrows/cai-arrow-primary-up.svg +3 -0
  29. package/projects/carriera-intern-components/public/assets/icons/arrows/cai-arrow-secondary-down.svg +3 -0
  30. package/projects/carriera-intern-components/public/assets/icons/arrows/cai-arrow-secondary-left.svg +3 -0
  31. package/projects/carriera-intern-components/public/assets/icons/arrows/cai-arrow-secondary-right.svg +3 -0
  32. package/projects/carriera-intern-components/public/assets/icons/banks/ic_bank_bbt.svg +5 -0
  33. package/projects/carriera-intern-components/public/assets/icons/banks/ic_bank_bmo_harris.svg +13 -0
  34. package/projects/carriera-intern-components/public/assets/icons/banks/ic_bank_capital_one.svg +11 -0
  35. package/projects/carriera-intern-components/public/assets/icons/banks/ic_bank_chase.svg +11 -0
  36. package/projects/carriera-intern-components/public/assets/icons/banks/ic_bank_chime.svg +10 -0
  37. package/projects/carriera-intern-components/public/assets/icons/banks/ic_bank_citi.svg +8 -0
  38. package/projects/carriera-intern-components/public/assets/icons/banks/ic_bank_fifth_third.svg +14 -0
  39. package/projects/carriera-intern-components/public/assets/icons/banks/ic_bank_green_dot.svg +17 -0
  40. package/projects/carriera-intern-components/public/assets/icons/banks/ic_bank_mb_financial.svg +5 -0
  41. package/projects/carriera-intern-components/public/assets/icons/banks/ic_bank_meta.svg +11 -0
  42. package/projects/carriera-intern-components/public/assets/icons/banks/ic_bank_navi_federal.svg +14 -0
  43. package/projects/carriera-intern-components/public/assets/icons/banks/ic_bank_of_america.svg +5 -0
  44. package/projects/carriera-intern-components/public/assets/icons/banks/ic_bank_pnc.svg +10 -0
  45. package/projects/carriera-intern-components/public/assets/icons/banks/ic_bank_regions.svg +14 -0
  46. package/projects/carriera-intern-components/public/assets/icons/banks/ic_bank_renasant.svg +14 -0
  47. package/projects/carriera-intern-components/public/assets/icons/banks/ic_bank_tcf.svg +11 -0
  48. package/projects/carriera-intern-components/public/assets/icons/banks/ic_bank_truist.svg +3 -0
  49. package/projects/carriera-intern-components/public/assets/icons/banks/ic_bank_us.svg +4 -0
  50. package/projects/carriera-intern-components/public/assets/icons/banks/ic_bank_wells_fargo.svg +3 -0
  51. package/projects/carriera-intern-components/public/assets/icons/cai-color.svg +3 -0
  52. package/projects/carriera-intern-components/public/assets/icons/cai-drop-zone-focus.svg +48 -0
  53. package/projects/carriera-intern-components/public/assets/icons/cai-edit.svg +4 -0
  54. package/projects/carriera-intern-components/public/assets/icons/cai-edit2.svg +3 -0
  55. package/projects/carriera-intern-components/public/assets/icons/cai-expand.svg +3 -0
  56. package/projects/carriera-intern-components/public/assets/icons/cai-gps.svg +3 -0
  57. package/projects/carriera-intern-components/public/assets/icons/cai-illustration-dark.svg +4 -0
  58. package/projects/carriera-intern-components/public/assets/icons/cai-illustration-drop-zone-cover.svg +34 -0
  59. package/projects/carriera-intern-components/public/assets/icons/cai-illustration-drop-zone-profile.svg +58 -0
  60. package/projects/carriera-intern-components/public/assets/icons/cai-illustration-drop-zone-video.svg +41 -0
  61. package/projects/carriera-intern-components/public/assets/icons/cai-illustration-drop-zone.svg +43 -0
  62. package/projects/carriera-intern-components/public/assets/icons/cai-illustration.svg +18 -0
  63. package/projects/carriera-intern-components/public/assets/icons/cai-loader.svg +3 -0
  64. package/projects/carriera-intern-components/public/assets/icons/cai-search.svg +3 -0
  65. package/projects/carriera-intern-components/public/assets/icons/cai-violation-hazmat.svg +3 -0
  66. package/projects/carriera-intern-components/public/assets/icons/fuel-contact/cai-contact.svg +3 -0
  67. package/projects/carriera-intern-components/public/assets/icons/fuel-contact/cai-count.svg +3 -0
  68. package/projects/carriera-intern-components/public/assets/icons/fuel-contact/cai-fuel-card.svg +3 -0
  69. package/projects/carriera-intern-components/public/assets/icons/fuel-contact/cai-people.svg +3 -0
  70. package/projects/carriera-intern-components/public/assets/icons/fuel-contact/cai-share.svg +3 -0
  71. package/projects/carriera-intern-components/public/assets/icons/fuel-contact/cai-user-2.svg +3 -0
  72. package/projects/carriera-intern-components/public/assets/icons/general/cai-address.svg +3 -0
  73. package/projects/carriera-intern-components/public/assets/icons/general/cai-checkmark.svg +3 -0
  74. package/projects/carriera-intern-components/public/assets/icons/general/cai-date.svg +3 -0
  75. package/projects/carriera-intern-components/public/assets/icons/general/cai-email.svg +3 -0
  76. package/projects/carriera-intern-components/public/assets/icons/general/cai-fax.svg +5 -0
  77. package/projects/carriera-intern-components/public/assets/icons/general/cai-label.svg +3 -0
  78. package/projects/carriera-intern-components/public/assets/icons/general/cai-money-additional.svg +3 -0
  79. package/projects/carriera-intern-components/public/assets/icons/general/cai-money.svg +3 -0
  80. package/projects/carriera-intern-components/public/assets/icons/general/cai-phone-extension.svg +3 -0
  81. package/projects/carriera-intern-components/public/assets/icons/general/cai-phone.svg +3 -0
  82. package/projects/carriera-intern-components/public/assets/icons/general/cai-sort-by.svg +3 -0
  83. package/projects/carriera-intern-components/public/assets/icons/general/cai-sort-descending.svg +4 -0
  84. package/projects/carriera-intern-components/public/assets/icons/general/cai-website.svg +3 -0
  85. package/projects/carriera-intern-components/public/assets/icons/hazardous/ic_corrosive_8.svg +6 -0
  86. package/projects/carriera-intern-components/public/assets/icons/hazardous/ic_dangerous_when_wet_4.svg +4 -0
  87. package/projects/carriera-intern-components/public/assets/icons/hazardous/ic_explosives_1_1.svg +6 -0
  88. package/projects/carriera-intern-components/public/assets/icons/hazardous/ic_explosives_1_2.svg +6 -0
  89. package/projects/carriera-intern-components/public/assets/icons/hazardous/ic_explosives_1_3.svg +6 -0
  90. package/projects/carriera-intern-components/public/assets/icons/hazardous/ic_explosives_1_4.svg +6 -0
  91. package/projects/carriera-intern-components/public/assets/icons/hazardous/ic_explosives_1_5.svg +6 -0
  92. package/projects/carriera-intern-components/public/assets/icons/hazardous/ic_explosives_1_6.svg +6 -0
  93. package/projects/carriera-intern-components/public/assets/icons/hazardous/ic_flammable_3.svg +4 -0
  94. package/projects/carriera-intern-components/public/assets/icons/hazardous/ic_flammable_gas_2.svg +4 -0
  95. package/projects/carriera-intern-components/public/assets/icons/hazardous/ic_flammable_solid_4.svg +5 -0
  96. package/projects/carriera-intern-components/public/assets/icons/hazardous/ic_inhalation_hazzard_2.svg +5 -0
  97. package/projects/carriera-intern-components/public/assets/icons/hazardous/ic_inhalation_hazzard_6.svg +5 -0
  98. package/projects/carriera-intern-components/public/assets/icons/hazardous/ic_organic_peroxide_5_2.svg +7 -0
  99. package/projects/carriera-intern-components/public/assets/icons/hazardous/ic_oxidizer_5_1.svg +6 -0
  100. package/projects/carriera-intern-components/public/assets/icons/hazardous/ic_oxygen_non_flam_gas_2.svg +6 -0
  101. package/projects/carriera-intern-components/public/assets/icons/hazardous/ic_radioactive_7.svg +5 -0
  102. package/projects/carriera-intern-components/public/assets/icons/hazardous/ic_spontaneously_combustible_4.svg +5 -0
  103. package/projects/carriera-intern-components/public/assets/icons/integration/cai-efs.svg +4 -0
  104. package/projects/carriera-intern-components/public/assets/icons/interaction/cai-cancel.svg +3 -0
  105. package/projects/carriera-intern-components/public/assets/icons/interaction/cai-copy.svg +3 -0
  106. package/projects/carriera-intern-components/public/assets/icons/interaction/cai-dislike.svg +3 -0
  107. package/projects/carriera-intern-components/public/assets/icons/interaction/cai-drag.svg +3 -0
  108. package/projects/carriera-intern-components/public/assets/icons/interaction/cai-favorite.svg +3 -0
  109. package/projects/carriera-intern-components/public/assets/icons/interaction/cai-like.svg +3 -0
  110. package/projects/carriera-intern-components/public/assets/icons/interaction/cai-minus.svg +3 -0
  111. package/projects/carriera-intern-components/public/assets/icons/interaction/cai-password-hidden.svg +3 -0
  112. package/projects/carriera-intern-components/public/assets/icons/interaction/cai-password-key.svg +3 -0
  113. package/projects/carriera-intern-components/public/assets/icons/interaction/cai-password-shown.svg +3 -0
  114. package/projects/carriera-intern-components/public/assets/icons/interaction/cai-plus.svg +3 -0
  115. package/projects/carriera-intern-components/public/assets/icons/interaction/cai_time.svg +3 -0
  116. package/projects/carriera-intern-components/public/assets/icons/interaction/cai_x.svg +4 -0
  117. package/projects/carriera-intern-components/public/assets/icons/load/cai-driver.svg +3 -0
  118. package/projects/carriera-intern-components/public/assets/icons/load/cai-load.svg +5 -0
  119. package/projects/carriera-intern-components/public/assets/icons/load/cai-ltl-single.svg +3 -0
  120. package/projects/carriera-intern-components/public/assets/icons/load/cai-parking.svg +3 -0
  121. package/projects/carriera-intern-components/public/assets/icons/load/cai-weight.svg +3 -0
  122. package/projects/carriera-intern-components/public/assets/icons/makes/trailers/ic_trailer_atro.svg +6 -0
  123. package/projects/carriera-intern-components/public/assets/icons/makes/trailers/ic_trailer_beall.svg +7 -0
  124. package/projects/carriera-intern-components/public/assets/icons/makes/trailers/ic_trailer_bedard.svg +8 -0
  125. package/projects/carriera-intern-components/public/assets/icons/makes/trailers/ic_trailer_butler.svg +7 -0
  126. package/projects/carriera-intern-components/public/assets/icons/makes/trailers/ic_trailer_de_lucio.svg +17 -0
  127. package/projects/carriera-intern-components/public/assets/icons/makes/trailers/ic_trailer_dorsey.svg +3 -0
  128. package/projects/carriera-intern-components/public/assets/icons/makes/trailers/ic_trailer_east.svg +3 -0
  129. package/projects/carriera-intern-components/public/assets/icons/makes/trailers/ic_trailer_fontaine.svg +3 -0
  130. package/projects/carriera-intern-components/public/assets/icons/makes/trailers/ic_trailer_fruehauf.svg +3 -0
  131. package/projects/carriera-intern-components/public/assets/icons/makes/trailers/ic_trailer_gallegos.svg +3 -0
  132. package/projects/carriera-intern-components/public/assets/icons/makes/trailers/ic_trailer_great_dane.svg +3 -0
  133. package/projects/carriera-intern-components/public/assets/icons/makes/trailers/ic_trailer_heil.svg +6 -0
  134. package/projects/carriera-intern-components/public/assets/icons/makes/trailers/ic_trailer_hudson.svg +3 -0
  135. package/projects/carriera-intern-components/public/assets/icons/makes/trailers/ic_trailer_hyndai.svg +3 -0
  136. package/projects/carriera-intern-components/public/assets/icons/makes/trailers/ic_trailer_kaufman.svg +3 -0
  137. package/projects/carriera-intern-components/public/assets/icons/makes/trailers/ic_trailer_mac.svg +3 -0
  138. package/projects/carriera-intern-components/public/assets/icons/makes/trailers/ic_trailer_manac.svg +3 -0
  139. package/projects/carriera-intern-components/public/assets/icons/makes/trailers/ic_trailer_polar.svg +3 -0
  140. package/projects/carriera-intern-components/public/assets/icons/makes/trailers/ic_trailer_ravens.svg +3 -0
  141. package/projects/carriera-intern-components/public/assets/icons/makes/trailers/ic_trailer_reitnouer.svg +12 -0
  142. package/projects/carriera-intern-components/public/assets/icons/makes/trailers/ic_trailer_strick.svg +3 -0
  143. package/projects/carriera-intern-components/public/assets/icons/makes/trailers/ic_trailer_timpte.svg +8 -0
  144. package/projects/carriera-intern-components/public/assets/icons/makes/trailers/ic_trailer_trail_king.svg +7 -0
  145. package/projects/carriera-intern-components/public/assets/icons/makes/trailers/ic_trailer_transcraft.svg +12 -0
  146. package/projects/carriera-intern-components/public/assets/icons/makes/trailers/ic_trailer_tremcar.svg +10 -0
  147. package/projects/carriera-intern-components/public/assets/icons/makes/trailers/ic_trailer_tytal.svg +3 -0
  148. package/projects/carriera-intern-components/public/assets/icons/makes/trailers/ic_trailer_utility.svg +3 -0
  149. package/projects/carriera-intern-components/public/assets/icons/makes/trailers/ic_trailer_vanguard.svg +3 -0
  150. package/projects/carriera-intern-components/public/assets/icons/makes/trailers/ic_trailer_vantage.svg +3 -0
  151. package/projects/carriera-intern-components/public/assets/icons/makes/trailers/ic_trailer_wabash.svg +3 -0
  152. package/projects/carriera-intern-components/public/assets/icons/makes/trailers/ic_trailer_walinga.svg +8 -0
  153. package/projects/carriera-intern-components/public/assets/icons/makes/trailers/ic_trailer_wilson.svg +3 -0
  154. package/projects/carriera-intern-components/public/assets/icons/makes/trucks/ic_truck_chevrolet.svg +3 -0
  155. package/projects/carriera-intern-components/public/assets/icons/makes/trucks/ic_truck_ford.svg +3 -0
  156. package/projects/carriera-intern-components/public/assets/icons/makes/trucks/ic_truck_freightliner.svg +3 -0
  157. package/projects/carriera-intern-components/public/assets/icons/makes/trucks/ic_truck_gmc.svg +3 -0
  158. package/projects/carriera-intern-components/public/assets/icons/makes/trucks/ic_truck_hino.svg +3 -0
  159. package/projects/carriera-intern-components/public/assets/icons/makes/trucks/ic_truck_international.svg +3 -0
  160. package/projects/carriera-intern-components/public/assets/icons/makes/trucks/ic_truck_isuzu.svg +3 -0
  161. package/projects/carriera-intern-components/public/assets/icons/makes/trucks/ic_truck_kenworth.svg +3 -0
  162. package/projects/carriera-intern-components/public/assets/icons/makes/trucks/ic_truck_mack.svg +3 -0
  163. package/projects/carriera-intern-components/public/assets/icons/makes/trucks/ic_truck_peterbilt.svg +3 -0
  164. package/projects/carriera-intern-components/public/assets/icons/makes/trucks/ic_truck_volvo.svg +3 -0
  165. package/projects/carriera-intern-components/public/assets/icons/makes/trucks/ic_truck_western_star.svg +3 -0
  166. package/projects/carriera-intern-components/public/assets/icons/menu/cai-delete.svg +4 -0
  167. package/projects/carriera-intern-components/public/assets/icons/menu/cai-download.svg +3 -0
  168. package/projects/carriera-intern-components/public/assets/icons/menu/cai-reset.svg +3 -0
  169. package/projects/carriera-intern-components/public/assets/icons/pm/cai-pm-base.svg +3 -0
  170. package/projects/carriera-intern-components/public/assets/icons/pm/trailer/cai-pm-general.svg +3 -0
  171. package/projects/carriera-intern-components/public/assets/icons/pm/trailer/cai-pm-pto-pump.svg +5 -0
  172. package/projects/carriera-intern-components/public/assets/icons/pm/trailer/cai-repair-reefer.svg +3 -0
  173. package/projects/carriera-intern-components/public/assets/icons/pm/truck/cai-pm-air-filter.svg +5 -0
  174. package/projects/carriera-intern-components/public/assets/icons/pm/truck/cai-pm-alignment.svg +5 -0
  175. package/projects/carriera-intern-components/public/assets/icons/pm/truck/cai-pm-battery.svg +3 -0
  176. package/projects/carriera-intern-components/public/assets/icons/pm/truck/cai-pm-belts.svg +5 -0
  177. package/projects/carriera-intern-components/public/assets/icons/pm/truck/cai-pm-brake-chamber.svg +3 -0
  178. package/projects/carriera-intern-components/public/assets/icons/pm/truck/cai-pm-engine-oil-filter.svg +4 -0
  179. package/projects/carriera-intern-components/public/assets/icons/pm/truck/cai-pm-engine-tune-up.svg +3 -0
  180. package/projects/carriera-intern-components/public/assets/icons/pm/truck/cai-pm-radiator.svg +3 -0
  181. package/projects/carriera-intern-components/public/assets/icons/pm/truck/cai-pm-transmission-fluid.svg +4 -0
  182. package/projects/carriera-intern-components/public/assets/icons/pm/truck/cai-pm-turbo.svg +3 -0
  183. package/projects/carriera-intern-components/public/assets/icons/states/ca/cai-ca-ab.svg +3 -0
  184. package/projects/carriera-intern-components/public/assets/icons/states/ca/cai-ca-bc.svg +35 -0
  185. package/projects/carriera-intern-components/public/assets/icons/states/ca/cai-ca-mb.svg +3 -0
  186. package/projects/carriera-intern-components/public/assets/icons/states/ca/cai-ca-nb.svg +7 -0
  187. package/projects/carriera-intern-components/public/assets/icons/states/ca/cai-ca-nl.svg +4 -0
  188. package/projects/carriera-intern-components/public/assets/icons/states/ca/cai-ca-ns.svg +6 -0
  189. package/projects/carriera-intern-components/public/assets/icons/states/ca/cai-ca-on.svg +7 -0
  190. package/projects/carriera-intern-components/public/assets/icons/states/ca/cai-ca-pe.svg +3 -0
  191. package/projects/carriera-intern-components/public/assets/icons/states/ca/cai-ca-qc.svg +4 -0
  192. package/projects/carriera-intern-components/public/assets/icons/states/ca/cai-ca-sk.svg +3 -0
  193. package/projects/carriera-intern-components/public/assets/icons/states/ca/cai-ca-yt.svg +3 -0
  194. package/projects/carriera-intern-components/public/assets/icons/states/us/cai-us-ak.svg +14 -0
  195. package/projects/carriera-intern-components/public/assets/icons/states/us/cai-us-al.svg +3 -0
  196. package/projects/carriera-intern-components/public/assets/icons/states/us/cai-us-ar.svg +3 -0
  197. package/projects/carriera-intern-components/public/assets/icons/states/us/cai-us-az.svg +3 -0
  198. package/projects/carriera-intern-components/public/assets/icons/states/us/cai-us-ca.svg +3 -0
  199. package/projects/carriera-intern-components/public/assets/icons/states/us/cai-us-co.svg +3 -0
  200. package/projects/carriera-intern-components/public/assets/icons/states/us/cai-us-ct.svg +3 -0
  201. package/projects/carriera-intern-components/public/assets/icons/states/us/cai-us-de.svg +3 -0
  202. package/projects/carriera-intern-components/public/assets/icons/states/us/cai-us-fl.svg +3 -0
  203. package/projects/carriera-intern-components/public/assets/icons/states/us/cai-us-ga.svg +3 -0
  204. package/projects/carriera-intern-components/public/assets/icons/states/us/cai-us-hi.svg +10 -0
  205. package/projects/carriera-intern-components/public/assets/icons/states/us/cai-us-ia.svg +3 -0
  206. package/projects/carriera-intern-components/public/assets/icons/states/us/cai-us-id.svg +3 -0
  207. package/projects/carriera-intern-components/public/assets/icons/states/us/cai-us-il.svg +3 -0
  208. package/projects/carriera-intern-components/public/assets/icons/states/us/cai-us-in.svg +3 -0
  209. package/projects/carriera-intern-components/public/assets/icons/states/us/cai-us-ks.svg +3 -0
  210. package/projects/carriera-intern-components/public/assets/icons/states/us/cai-us-ky.svg +3 -0
  211. package/projects/carriera-intern-components/public/assets/icons/states/us/cai-us-la.svg +4 -0
  212. package/projects/carriera-intern-components/public/assets/icons/states/us/cai-us-ma.svg +7 -0
  213. package/projects/carriera-intern-components/public/assets/icons/states/us/cai-us-md.svg +7 -0
  214. package/projects/carriera-intern-components/public/assets/icons/states/us/cai-us-me.svg +9 -0
  215. package/projects/carriera-intern-components/public/assets/icons/states/us/cai-us-mi.svg +11 -0
  216. package/projects/carriera-intern-components/public/assets/icons/states/us/cai-us-mn.svg +4 -0
  217. package/projects/carriera-intern-components/public/assets/icons/states/us/cai-us-mo.svg +3 -0
  218. package/projects/carriera-intern-components/public/assets/icons/states/us/cai-us-ms.svg +3 -0
  219. package/projects/carriera-intern-components/public/assets/icons/states/us/cai-us-mt.svg +3 -0
  220. package/projects/carriera-intern-components/public/assets/icons/states/us/cai-us-nc.svg +3 -0
  221. package/projects/carriera-intern-components/public/assets/icons/states/us/cai-us-nd.svg +3 -0
  222. package/projects/carriera-intern-components/public/assets/icons/states/us/cai-us-ne.svg +3 -0
  223. package/projects/carriera-intern-components/public/assets/icons/states/us/cai-us-nh.svg +3 -0
  224. package/projects/carriera-intern-components/public/assets/icons/states/us/cai-us-nj.svg +5 -0
  225. package/projects/carriera-intern-components/public/assets/icons/states/us/cai-us-nm.svg +3 -0
  226. package/projects/carriera-intern-components/public/assets/icons/states/us/cai-us-nv.svg +3 -0
  227. package/projects/carriera-intern-components/public/assets/icons/states/us/cai-us-ny.svg +4 -0
  228. package/projects/carriera-intern-components/public/assets/icons/states/us/cai-us-oh.svg +4 -0
  229. package/projects/carriera-intern-components/public/assets/icons/states/us/cai-us-ok.svg +3 -0
  230. package/projects/carriera-intern-components/public/assets/icons/states/us/cai-us-or.svg +3 -0
  231. package/projects/carriera-intern-components/public/assets/icons/states/us/cai-us-pa.svg +3 -0
  232. package/projects/carriera-intern-components/public/assets/icons/states/us/cai-us-ri.svg +8 -0
  233. package/projects/carriera-intern-components/public/assets/icons/states/us/cai-us-sc.svg +3 -0
  234. package/projects/carriera-intern-components/public/assets/icons/states/us/cai-us-sd.svg +3 -0
  235. package/projects/carriera-intern-components/public/assets/icons/states/us/cai-us-tn.svg +3 -0
  236. package/projects/carriera-intern-components/public/assets/icons/states/us/cai-us-tx.svg +3 -0
  237. package/projects/carriera-intern-components/public/assets/icons/states/us/cai-us-ut.svg +3 -0
  238. package/projects/carriera-intern-components/public/assets/icons/states/us/cai-us-va.svg +4 -0
  239. package/projects/carriera-intern-components/public/assets/icons/states/us/cai-us-vt.svg +7 -0
  240. package/projects/carriera-intern-components/public/assets/icons/states/us/cai-us-wa.svg +15 -0
  241. package/projects/carriera-intern-components/public/assets/icons/states/us/cai-us-wi.svg +4 -0
  242. package/projects/carriera-intern-components/public/assets/icons/states/us/cai-us-wv.svg +3 -0
  243. package/projects/carriera-intern-components/public/assets/icons/states/us/cai-us-wy.svg +3 -0
  244. package/projects/carriera-intern-components/public/assets/icons/status/cai-status-warning-lite.svg +3 -0
  245. package/projects/carriera-intern-components/public/assets/icons/status/cai-status-warning.svg +3 -0
  246. package/projects/carriera-intern-components/public/assets/icons/trailers/ic_trailer_bottom-dump.svg +5 -0
  247. package/projects/carriera-intern-components/public/assets/icons/trailers/ic_trailer_carhauler-stinger.svg +5 -0
  248. package/projects/carriera-intern-components/public/assets/icons/trailers/ic_trailer_carhauler.svg +5 -0
  249. package/projects/carriera-intern-components/public/assets/icons/trailers/ic_trailer_chassis.svg +5 -0
  250. package/projects/carriera-intern-components/public/assets/icons/trailers/ic_trailer_conestoga.svg +13 -0
  251. package/projects/carriera-intern-components/public/assets/icons/trailers/ic_trailer_container.svg +6 -0
  252. package/projects/carriera-intern-components/public/assets/icons/trailers/ic_trailer_dryvan.svg +5 -0
  253. package/projects/carriera-intern-components/public/assets/icons/trailers/ic_trailer_end-dump.svg +5 -0
  254. package/projects/carriera-intern-components/public/assets/icons/trailers/ic_trailer_flatbed.svg +5 -0
  255. package/projects/carriera-intern-components/public/assets/icons/trailers/ic_trailer_hopper.svg +6 -0
  256. package/projects/carriera-intern-components/public/assets/icons/trailers/ic_trailer_low-boy.svg +6 -0
  257. package/projects/carriera-intern-components/public/assets/icons/trailers/ic_trailer_reefer.svg +5 -0
  258. package/projects/carriera-intern-components/public/assets/icons/trailers/ic_trailer_side-kit.svg +6 -0
  259. package/projects/carriera-intern-components/public/assets/icons/trailers/ic_trailer_step-deck.svg +7 -0
  260. package/projects/carriera-intern-components/public/assets/icons/trailers/ic_trailer_tanker-pneumatic.svg +5 -0
  261. package/projects/carriera-intern-components/public/assets/icons/trailers/ic_trailer_tanker.svg +5 -0
  262. package/projects/carriera-intern-components/public/assets/icons/trucks/ic_truck_box-truck.svg +7 -0
  263. package/projects/carriera-intern-components/public/assets/icons/trucks/ic_truck_car-hauler.svg +7 -0
  264. package/projects/carriera-intern-components/public/assets/icons/trucks/ic_truck_cargo-van.svg +5 -0
  265. package/projects/carriera-intern-components/public/assets/icons/trucks/ic_truck_cement.svg +8 -0
  266. package/projects/carriera-intern-components/public/assets/icons/trucks/ic_truck_dump.svg +8 -0
  267. package/projects/carriera-intern-components/public/assets/icons/trucks/ic_truck_garbage.svg +10 -0
  268. package/projects/carriera-intern-components/public/assets/icons/trucks/ic_truck_reefer.svg +6 -0
  269. package/projects/carriera-intern-components/public/assets/icons/trucks/ic_truck_semi-truck.svg +8 -0
  270. package/projects/carriera-intern-components/public/assets/icons/trucks/ic_truck_semi-wSleeper.svg +8 -0
  271. package/projects/carriera-intern-components/public/assets/icons/trucks/ic_truck_spotter.svg +6 -0
  272. package/projects/carriera-intern-components/public/assets/icons/trucks/ic_truck_tow-truck.svg +8 -0
  273. package/projects/carriera-intern-components/public/assets/invexample.png +0 -0
  274. package/projects/carriera-intern-components/public/assets/invoice.png +0 -0
  275. package/projects/carriera-intern-components/public/assets/json/icons.json +985 -0
  276. package/projects/carriera-intern-components/public/assets/truck.png +0 -0
  277. package/projects/carriera-intern-components/public/favicon.ico +0 -0
  278. package/projects/carriera-intern-components/src/Changelog.mdx +285 -0
  279. package/projects/carriera-intern-components/src/Icons.mdx +279 -0
  280. package/projects/carriera-intern-components/src/app/app.config.ts +26 -0
  281. package/projects/carriera-intern-components/src/app/components/avatar/avatar.component.html +28 -0
  282. package/projects/carriera-intern-components/src/app/components/avatar/avatar.component.scss +414 -0
  283. package/projects/carriera-intern-components/src/app/components/avatar/avatar.component.spec.ts +23 -0
  284. package/projects/carriera-intern-components/src/app/components/avatar/avatar.component.ts +66 -0
  285. package/projects/carriera-intern-components/src/app/components/avatar/avatar.stories.ts +787 -0
  286. package/projects/carriera-intern-components/src/app/components/avatar/models/avatar.model.ts +52 -0
  287. package/projects/carriera-intern-components/src/app/components/avatar/models/index.ts +1 -0
  288. package/projects/carriera-intern-components/src/app/components/avatar/pipes/avatar-classes.pipe.ts +98 -0
  289. package/projects/carriera-intern-components/src/app/components/avatar/pipes/index.ts +2 -0
  290. package/projects/carriera-intern-components/src/app/components/avatar/pipes/initials.pipe.ts +31 -0
  291. package/projects/carriera-intern-components/src/app/components/content-driven-co/content-driven-co.component.css +0 -0
  292. package/projects/carriera-intern-components/src/app/components/content-driven-co/content-driven-co.component.html +10 -0
  293. package/projects/carriera-intern-components/src/app/components/content-driven-co/content-driven-co.component.spec.ts +23 -0
  294. package/projects/carriera-intern-components/src/app/components/content-driven-co/content-driven-co.component.ts +25 -0
  295. package/projects/carriera-intern-components/src/app/components/content-driven-co/content-driven-co.stories.ts +65 -0
  296. package/projects/carriera-intern-components/src/app/components/copy/copy.component.html +66 -0
  297. package/projects/carriera-intern-components/src/app/components/copy/copy.component.scss +103 -0
  298. package/projects/carriera-intern-components/src/app/components/copy/copy.component.spec.ts +22 -0
  299. package/projects/carriera-intern-components/src/app/components/copy/copy.component.ts +57 -0
  300. package/projects/carriera-intern-components/src/app/components/copy/stories/copy.stories.ts +170 -0
  301. package/projects/carriera-intern-components/src/app/components/counter/counter.component.html +33 -0
  302. package/projects/carriera-intern-components/src/app/components/counter/counter.component.scss +197 -0
  303. package/projects/carriera-intern-components/src/app/components/counter/counter.component.spec.ts +22 -0
  304. package/projects/carriera-intern-components/src/app/components/counter/counter.component.ts +219 -0
  305. package/projects/carriera-intern-components/src/app/components/counter/counter.stories.ts +65 -0
  306. package/projects/carriera-intern-components/src/app/components/dispatch-dropdown/dispatch-dropdown.component.html +223 -0
  307. package/projects/carriera-intern-components/src/app/components/dispatch-dropdown/dispatch-dropdown.component.scss +792 -0
  308. package/projects/carriera-intern-components/src/app/components/dispatch-dropdown/dispatch-dropdown.component.spec.ts +23 -0
  309. package/projects/carriera-intern-components/src/app/components/dispatch-dropdown/dispatch-dropdown.component.ts +323 -0
  310. package/projects/carriera-intern-components/src/app/components/dispatch-dropdown/dispatch-dropdown.stories.ts +409 -0
  311. package/projects/carriera-intern-components/src/app/components/dispatch-dropdown/helpers/dispatch-dropdown.helper.ts +248 -0
  312. package/projects/carriera-intern-components/src/app/components/dispatch-dropdown/interfaces/dispatch-dropdown-config.interface.ts +10 -0
  313. package/projects/carriera-intern-components/src/app/components/dispatch-dropdown/interfaces/dispatch-dropdown-option.interface.ts +4 -0
  314. package/projects/carriera-intern-components/src/app/components/dispatch-dropdown/interfaces/index.ts +2 -0
  315. package/projects/carriera-intern-components/src/app/components/dispatch-dropdown/mock/parking-data.json +1550 -0
  316. package/projects/carriera-intern-components/src/app/components/dispatch-dropdown/pipes/dispatch-search-filter.pipe.ts +26 -0
  317. package/projects/carriera-intern-components/src/app/components/dispatch-location/dispatch-location.component.html +76 -0
  318. package/projects/carriera-intern-components/src/app/components/dispatch-location/dispatch-location.component.scss +141 -0
  319. package/projects/carriera-intern-components/src/app/components/dispatch-location/dispatch-location.component.spec.ts +22 -0
  320. package/projects/carriera-intern-components/src/app/components/dispatch-location/dispatch-location.component.ts +268 -0
  321. package/projects/carriera-intern-components/src/app/components/dispatch-location/dispatch-location.stories.ts +184 -0
  322. package/projects/carriera-intern-components/src/app/components/dispatch-location/interfaces/index.ts +1 -0
  323. package/projects/carriera-intern-components/src/app/components/dispatch-location/interfaces/last-status-data.interface.ts +6 -0
  324. package/projects/carriera-intern-components/src/app/components/dispatch-location/pipes/last-status-format.pipe.ts +35 -0
  325. package/projects/carriera-intern-components/src/app/components/document-preview/document-preview.component.html +229 -0
  326. package/projects/carriera-intern-components/src/app/components/document-preview/document-preview.component.scss +1115 -0
  327. package/projects/carriera-intern-components/src/app/components/document-preview/document-preview.component.spec.ts +23 -0
  328. package/projects/carriera-intern-components/src/app/components/document-preview/document-preview.component.ts +277 -0
  329. package/projects/carriera-intern-components/src/app/components/document-preview/document-preview.stories.ts +256 -0
  330. package/projects/carriera-intern-components/src/app/components/document-preview/interfaces/document-tag.interface.ts +4 -0
  331. package/projects/carriera-intern-components/src/app/components/document-preview/interfaces/index.ts +1 -0
  332. package/projects/carriera-intern-components/src/app/components/document-preview/utils/config/button-actions.config.ts +30 -0
  333. package/projects/carriera-intern-components/src/app/components/document-preview/utils/config/index.ts +1 -0
  334. package/projects/carriera-intern-components/src/app/components/drop-zone/drop-zone.component.html +376 -0
  335. package/projects/carriera-intern-components/src/app/components/drop-zone/drop-zone.component.scss +9 -0
  336. package/projects/carriera-intern-components/src/app/components/drop-zone/drop-zone.component.spec.ts +22 -0
  337. package/projects/carriera-intern-components/src/app/components/drop-zone/drop-zone.component.ts +1272 -0
  338. package/projects/carriera-intern-components/src/app/components/drop-zone/drop-zone.stories.ts +1253 -0
  339. package/projects/carriera-intern-components/src/app/components/drop-zone/enums/drop-zone-labels.enum.ts +0 -0
  340. package/projects/carriera-intern-components/src/app/components/drop-zone/enums/drop-zone-variant.enum.ts +7 -0
  341. package/projects/carriera-intern-components/src/app/components/drop-zone/enums/index.ts +1 -0
  342. package/projects/carriera-intern-components/src/app/components/drop-zone/models/app-file.model.ts +28 -0
  343. package/projects/carriera-intern-components/src/app/components/drop-zone/models/file.response.ts +10 -0
  344. package/projects/carriera-intern-components/src/app/components/drop-zone/models/index.ts +2 -0
  345. package/projects/carriera-intern-components/src/app/components/drop-zone/pipes/drag-mode-animation.pipe.ts +40 -0
  346. package/projects/carriera-intern-components/src/app/components/drop-zone/utils/helpers/drop-zone-documents.helper.ts +67 -0
  347. package/projects/carriera-intern-components/src/app/components/drop-zone/utils/helpers/index.ts +1 -0
  348. package/projects/carriera-intern-components/src/app/components/drop-zone/utils/styles/drop-zone-cropper.scss +202 -0
  349. package/projects/carriera-intern-components/src/app/components/drop-zone/utils/styles/drop-zone-documents.scss +166 -0
  350. package/projects/carriera-intern-components/src/app/components/drop-zone/utils/styles/drop-zone-drag-mode.scss +107 -0
  351. package/projects/carriera-intern-components/src/app/components/drop-zone/utils/styles/drop-zone-images.scss +106 -0
  352. package/projects/carriera-intern-components/src/app/components/drop-zone/utils/styles/drop-zone-layout.scss +208 -0
  353. package/projects/carriera-intern-components/src/app/components/drop-zone/utils/styles/drop-zone-states.scss +183 -0
  354. package/projects/carriera-intern-components/src/app/components/drop-zone/utils/styles/drop-zone-variations.scss +189 -0
  355. package/projects/carriera-intern-components/src/app/components/input/directives/helpers/index.ts +1 -0
  356. package/projects/carriera-intern-components/src/app/components/input/directives/helpers/mask.helper.ts +52 -0
  357. package/projects/carriera-intern-components/src/app/components/input/directives/mask.directive.spec.ts +13 -0
  358. package/projects/carriera-intern-components/src/app/components/input/directives/mask.directive.ts +274 -0
  359. package/projects/carriera-intern-components/src/app/components/input/directives/number-format.directive.spec.ts +13 -0
  360. package/projects/carriera-intern-components/src/app/components/input/directives/number-format.directive.ts +442 -0
  361. package/projects/carriera-intern-components/src/app/components/input/directives/password.directive.spec.ts +13 -0
  362. package/projects/carriera-intern-components/src/app/components/input/directives/password.directive.ts +282 -0
  363. package/projects/carriera-intern-components/src/app/components/input/input.component.html +2669 -0
  364. package/projects/carriera-intern-components/src/app/components/input/input.component.scss +3000 -0
  365. package/projects/carriera-intern-components/src/app/components/input/input.component.spec.ts +23 -0
  366. package/projects/carriera-intern-components/src/app/components/input/input.component.ts +1486 -0
  367. package/projects/carriera-intern-components/src/app/components/input/mock/banks.json +249 -0
  368. package/projects/carriera-intern-components/src/app/components/input/mock/basic.json +42 -0
  369. package/projects/carriera-intern-components/src/app/components/input/mock/brokers.json +544 -0
  370. package/projects/carriera-intern-components/src/app/components/input/mock/colors.json +95 -0
  371. package/projects/carriera-intern-components/src/app/components/input/mock/commodities.json +12 -0
  372. package/projects/carriera-intern-components/src/app/components/input/mock/contacts.json +117 -0
  373. package/projects/carriera-intern-components/src/app/components/input/mock/dispatchers.json +83 -0
  374. package/projects/carriera-intern-components/src/app/components/input/mock/dispatches.json +4188 -0
  375. package/projects/carriera-intern-components/src/app/components/input/mock/fuel-list-dropdown.json +968 -0
  376. package/projects/carriera-intern-components/src/app/components/input/mock/fuel-transaction.json +78 -0
  377. package/projects/carriera-intern-components/src/app/components/input/mock/fuelcard.json +472 -0
  378. package/projects/carriera-intern-components/src/app/components/input/mock/hazardous.json +166 -0
  379. package/projects/carriera-intern-components/src/app/components/input/mock/labelColors.json +81 -0
  380. package/projects/carriera-intern-components/src/app/components/input/mock/labels.json +169 -0
  381. package/projects/carriera-intern-components/src/app/components/input/mock/new-load-modal-res.json +1148 -0
  382. package/projects/carriera-intern-components/src/app/components/input/mock/noboard.json +1665 -0
  383. package/projects/carriera-intern-components/src/app/components/input/mock/owner.json +209 -0
  384. package/projects/carriera-intern-components/src/app/components/input/mock/pm.json +112 -0
  385. package/projects/carriera-intern-components/src/app/components/input/mock/shipper.json +1192 -0
  386. package/projects/carriera-intern-components/src/app/components/input/mock/split-driver.json +99 -0
  387. package/projects/carriera-intern-components/src/app/components/input/mock/split-trailer.json +79 -0
  388. package/projects/carriera-intern-components/src/app/components/input/mock/split-truck.json +49 -0
  389. package/projects/carriera-intern-components/src/app/components/input/mock/states.json +605 -0
  390. package/projects/carriera-intern-components/src/app/components/input/mock/toll.json +106 -0
  391. package/projects/carriera-intern-components/src/app/components/input/mock/trailermakes.json +196 -0
  392. package/projects/carriera-intern-components/src/app/components/input/mock/truck_trailer.json +184 -0
  393. package/projects/carriera-intern-components/src/app/components/input/mock/truckmakes.json +76 -0
  394. package/projects/carriera-intern-components/src/app/components/input/models/dropdown.model.ts +376 -0
  395. package/projects/carriera-intern-components/src/app/components/input/models/index.ts +2 -0
  396. package/projects/carriera-intern-components/src/app/components/input/models/input.model.ts +227 -0
  397. package/projects/carriera-intern-components/src/app/components/input/pipes/broker-progress.pipe.ts +36 -0
  398. package/projects/carriera-intern-components/src/app/components/input/pipes/clear-tooltip.pipe.ts +38 -0
  399. package/projects/carriera-intern-components/src/app/components/input/pipes/error-message.pipe.ts +54 -0
  400. package/projects/carriera-intern-components/src/app/components/input/pipes/highlight-search.pipe.ts +42 -0
  401. package/projects/carriera-intern-components/src/app/components/input/pipes/index.ts +6 -0
  402. package/projects/carriera-intern-components/src/app/components/input/pipes/input-class.pipe.ts +109 -0
  403. package/projects/carriera-intern-components/src/app/components/input/pipes/remap-pm-icons.pipe.ts +49 -0
  404. package/projects/carriera-intern-components/src/app/components/input/stories/Documentation.mdx +190 -0
  405. package/projects/carriera-intern-components/src/app/components/input/stories/dropdown-options.ts +80 -0
  406. package/projects/carriera-intern-components/src/app/components/input/stories/dropdown.stories.ts +376 -0
  407. package/projects/carriera-intern-components/src/app/components/input/stories/input-dropdown.stories.ts +405 -0
  408. package/projects/carriera-intern-components/src/app/components/input/stories/input-inverse.stories.ts +232 -0
  409. package/projects/carriera-intern-components/src/app/components/input/stories/input-load.stories.ts +150 -0
  410. package/projects/carriera-intern-components/src/app/components/input/stories/input-placeholder.stories.ts +225 -0
  411. package/projects/carriera-intern-components/src/app/components/input/stories/input-subcontent.stories.ts +264 -0
  412. package/projects/carriera-intern-components/src/app/components/input/stories/input-table.stories.ts +211 -0
  413. package/projects/carriera-intern-components/src/app/components/input/stories/input.stories.ts +1159 -0
  414. package/projects/carriera-intern-components/src/app/components/input/stories/modal.stories.ts +162 -0
  415. package/projects/carriera-intern-components/src/app/components/input/utilities/constants/cast.constants.ts +91 -0
  416. package/projects/carriera-intern-components/src/app/components/input/utilities/constants/index.ts +1 -0
  417. package/projects/carriera-intern-components/src/app/components/input/utilities/helpers/index.ts +2 -0
  418. package/projects/carriera-intern-components/src/app/components/input/utilities/helpers/input.helper.ts +985 -0
  419. package/projects/carriera-intern-components/src/app/components/input/utilities/helpers/keyboard-navigation.helper.ts +402 -0
  420. package/projects/carriera-intern-components/src/app/components/input/utilities/index.ts +2 -0
  421. package/projects/carriera-intern-components/src/app/components/input-address/enums/input-address-layers-string.enum.ts +4 -0
  422. package/projects/carriera-intern-components/src/app/components/input-address/enums/input-address-type-string.enum.ts +7 -0
  423. package/projects/carriera-intern-components/src/app/components/input-address/input-address.component.html +13 -0
  424. package/projects/carriera-intern-components/src/app/components/input-address/input-address.component.scss +0 -0
  425. package/projects/carriera-intern-components/src/app/components/input-address/input-address.component.spec.ts +22 -0
  426. package/projects/carriera-intern-components/src/app/components/input-address/input-address.component.ts +509 -0
  427. package/projects/carriera-intern-components/src/app/components/input-address/models/address-data.model.ts +22 -0
  428. package/projects/carriera-intern-components/src/app/components/input-address/models/address-list.model.ts +6 -0
  429. package/projects/carriera-intern-components/src/app/components/input-address/models/long-lat.model.ts +4 -0
  430. package/projects/carriera-intern-components/src/app/components/input-address/models/sent-address-data.model.ts +25 -0
  431. package/projects/carriera-intern-components/src/app/components/input-address/stories/address.stories.ts +181 -0
  432. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/cai-input-datetime-picker.component.html +180 -0
  433. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/cai-input-datetime-picker.component.scss +862 -0
  434. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/cai-input-datetime-picker.component.ts +1559 -0
  435. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/cai-input-datetime-picker.stories.ts +507 -0
  436. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/cai-custom-datetime-pickers.component.html +134 -0
  437. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/cai-custom-datetime-pickers.component.scss +0 -0
  438. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/cai-custom-datetime-pickers.component.spec.ts +24 -0
  439. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/cai-custom-datetime-pickers.component.ts +331 -0
  440. 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 +190 -0
  441. 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
  442. 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 +26 -0
  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.ts +234 -0
  444. 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 +23 -0
  445. 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
  446. 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 +26 -0
  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.ts +60 -0
  448. 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 +27 -0
  449. 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
  450. 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 +26 -0
  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.ts +187 -0
  452. 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 +68 -0
  453. 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
  454. 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 +26 -0
  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.ts +163 -0
  456. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/config/cai-input.config.ts +193 -0
  457. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/config/index.ts +1 -0
  458. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/enums/calendar-left-string.enum.ts +5 -0
  459. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/enums/calendar-list-preview-string.enum.ts +4 -0
  460. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/enums/calendar-main-string.enum.ts +5 -0
  461. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/enums/calendar-scroll-type-string.enum.ts +4 -0
  462. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/enums/calendar-string.enum.ts +6 -0
  463. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/enums/calendar-type-string.enum.ts +3 -0
  464. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/enums/config.enum.ts +7 -0
  465. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/models/scroll-change.model.ts +6 -0
  466. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/models/scroll-type.model.ts +8 -0
  467. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/pipes/calendar-months.pipe.ts +23 -0
  468. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/services/calendar-datetime-picker.service.ts +35 -0
  469. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/strategy/calendar-strategy.ts +120 -0
  470. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/components/cai-custom-datetime-pickers/utils/constants/custom-datetime-pickers.constants.ts +48 -0
  471. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/enums/input-config-name-string.enum.ts +7 -0
  472. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/interfaces/index.ts +1 -0
  473. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/interfaces/input-datetime.interface.ts +11 -0
  474. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/models/index.ts +5 -0
  475. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/models/label-color.model.ts +11 -0
  476. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/pipes/input-clear-class.pipe.ts +105 -0
  477. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/pipes/input-date-time-container-class.pipe.ts +66 -0
  478. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/pipes/input-dropdown-arrow-class.pipe.ts +68 -0
  479. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/pipes/input-placeholder-icon.class.pipe.ts +68 -0
  480. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/pipes/show-clear.pipe.ts +20 -0
  481. package/projects/carriera-intern-components/src/app/components/input-datetime-picker/scss/ca-input.colors.scss +287 -0
  482. package/projects/carriera-intern-components/src/app/components/list-contact-dropdown/list-contact-dropdown.component.html +194 -0
  483. package/projects/carriera-intern-components/src/app/components/list-contact-dropdown/list-contact-dropdown.component.scss +613 -0
  484. package/projects/carriera-intern-components/src/app/components/list-contact-dropdown/list-contact-dropdown.component.spec.ts +22 -0
  485. package/projects/carriera-intern-components/src/app/components/list-contact-dropdown/list-contact-dropdown.component.ts +208 -0
  486. package/projects/carriera-intern-components/src/app/components/list-contact-dropdown/list-contact-dropdown.stories.ts +52 -0
  487. package/projects/carriera-intern-components/src/app/components/list-contact-dropdown/mock/brokerContacts.json +74 -0
  488. package/projects/carriera-intern-components/src/app/components/list-contact-dropdown/models/contact.interface.ts +23 -0
  489. package/projects/carriera-intern-components/src/app/components/list-contact-dropdown/pipes/contact-count.pipe.ts +14 -0
  490. package/projects/carriera-intern-components/src/app/components/list-contact-dropdown/pipes/contacts-height.pipe.ts +34 -0
  491. package/projects/carriera-intern-components/src/app/components/list-contact-dropdown/pipes/departments-height.pipe.ts +57 -0
  492. package/projects/carriera-intern-components/src/app/components/list-contact-dropdown/pipes/map-contacts.pipe.ts +51 -0
  493. package/projects/carriera-intern-components/src/app/components/pm/mock/repair-pm.json +2743 -0
  494. package/projects/carriera-intern-components/src/app/components/pm/pm.component.html +82 -0
  495. package/projects/carriera-intern-components/src/app/components/pm/pm.component.scss +260 -0
  496. package/projects/carriera-intern-components/src/app/components/pm/pm.component.spec.ts +23 -0
  497. package/projects/carriera-intern-components/src/app/components/pm/pm.component.ts +207 -0
  498. package/projects/carriera-intern-components/src/app/components/pm/pm.stories.ts +104 -0
  499. package/projects/carriera-intern-components/src/app/components/rating_review/enums/filter-type.enum.ts +7 -0
  500. package/projects/carriera-intern-components/src/app/components/rating_review/enums/review-type.enum.ts +5 -0
  501. package/projects/carriera-intern-components/src/app/components/rating_review/pipes/date-formating.pipe.spec.ts +8 -0
  502. package/projects/carriera-intern-components/src/app/components/rating_review/pipes/date-formating.pipe.ts +42 -0
  503. package/projects/carriera-intern-components/src/app/components/rating_review/rating-review/rating-review/rating-review.component.html +57 -0
  504. package/projects/carriera-intern-components/src/app/components/rating_review/rating-review/rating-review/rating-review.component.scss +94 -0
  505. package/projects/carriera-intern-components/src/app/components/rating_review/rating-review/rating-review/rating-review.component.spec.ts +23 -0
  506. package/projects/carriera-intern-components/src/app/components/rating_review/rating-review/rating-review/rating-review.component.ts +105 -0
  507. package/projects/carriera-intern-components/src/app/components/rating_review/rating-review/rating-review/rating-review.stories.ts +451 -0
  508. package/projects/carriera-intern-components/src/app/components/rating_review/review-modal/review-modal.component.html +236 -0
  509. package/projects/carriera-intern-components/src/app/components/rating_review/review-modal/review-modal.component.scss +564 -0
  510. package/projects/carriera-intern-components/src/app/components/rating_review/review-modal/review-modal.component.ts +360 -0
  511. package/projects/carriera-intern-components/src/app/components/rating_review/single-review/single-review.component.html +321 -0
  512. package/projects/carriera-intern-components/src/app/components/rating_review/single-review/single-review.component.scss +887 -0
  513. package/projects/carriera-intern-components/src/app/components/rating_review/single-review/single-review.component.ts +159 -0
  514. package/projects/carriera-intern-components/src/app/components/selected-location-field/interfaces/index.ts +1 -0
  515. package/projects/carriera-intern-components/src/app/components/selected-location-field/interfaces/selected-business-field.interface.ts +11 -0
  516. package/projects/carriera-intern-components/src/app/components/selected-location-field/selected-business-field.component.html +100 -0
  517. package/projects/carriera-intern-components/src/app/components/selected-location-field/selected-business-field.component.scss +239 -0
  518. package/projects/carriera-intern-components/src/app/components/selected-location-field/selected-business-field.component.spec.ts +22 -0
  519. package/projects/carriera-intern-components/src/app/components/selected-location-field/selected-business-field.component.ts +28 -0
  520. package/projects/carriera-intern-components/src/app/components/selected-location-field/selected-business-field.stories.ts +132 -0
  521. package/projects/carriera-intern-components/src/app/components/signature/signature.component.html +63 -0
  522. package/projects/carriera-intern-components/src/app/components/signature/signature.component.scss +229 -0
  523. package/projects/carriera-intern-components/src/app/components/signature/signature.component.spec.ts +23 -0
  524. package/projects/carriera-intern-components/src/app/components/signature/signature.component.ts +102 -0
  525. package/projects/carriera-intern-components/src/app/components/signature/signature.stories.ts +32 -0
  526. package/projects/carriera-intern-components/src/app/components/sticky-scrollbar/enums/index.ts +1 -0
  527. package/projects/carriera-intern-components/src/app/components/sticky-scrollbar/enums/scroll-state.enum.ts +6 -0
  528. package/projects/carriera-intern-components/src/app/components/sticky-scrollbar/sticky-scrollbar.component.html +29 -0
  529. package/projects/carriera-intern-components/src/app/components/sticky-scrollbar/sticky-scrollbar.component.scss +106 -0
  530. package/projects/carriera-intern-components/src/app/components/sticky-scrollbar/sticky-scrollbar.component.spec.ts +23 -0
  531. package/projects/carriera-intern-components/src/app/components/sticky-scrollbar/sticky-scrollbar.component.ts +458 -0
  532. package/projects/carriera-intern-components/src/app/components/sticky-scrollbar/sticky-scrollbar.stories.ts +343 -0
  533. package/projects/carriera-intern-components/src/app/components/tab-option-dropdown/interfaces/index.ts +2 -0
  534. package/projects/carriera-intern-components/src/app/components/tab-option-dropdown/interfaces/tab-option-config.interface.ts +4 -0
  535. package/projects/carriera-intern-components/src/app/components/tab-option-dropdown/interfaces/tab-option.interface.ts +4 -0
  536. package/projects/carriera-intern-components/src/app/components/tab-option-dropdown/pipes/index.ts +1 -0
  537. package/projects/carriera-intern-components/src/app/components/tab-option-dropdown/pipes/tab-search-filter.pipe.ts +20 -0
  538. package/projects/carriera-intern-components/src/app/components/tab-option-dropdown/tab-option-dropdown.component.html +66 -0
  539. package/projects/carriera-intern-components/src/app/components/tab-option-dropdown/tab-option-dropdown.component.scss +441 -0
  540. package/projects/carriera-intern-components/src/app/components/tab-option-dropdown/tab-option-dropdown.component.spec.ts +22 -0
  541. package/projects/carriera-intern-components/src/app/components/tab-option-dropdown/tab-option-dropdown.component.ts +105 -0
  542. package/projects/carriera-intern-components/src/app/components/tab-option-dropdown/tab-option.stories.ts +93 -0
  543. package/projects/carriera-intern-components/src/app/components/text-area/interfaces/index.ts +1 -0
  544. package/projects/carriera-intern-components/src/app/components/text-area/interfaces/text-area.interface.ts +4 -0
  545. package/projects/carriera-intern-components/src/app/components/text-area/text-area.component.html +29 -0
  546. package/projects/carriera-intern-components/src/app/components/text-area/text-area.component.scss +294 -0
  547. package/projects/carriera-intern-components/src/app/components/text-area/text-area.component.spec.ts +23 -0
  548. package/projects/carriera-intern-components/src/app/components/text-area/text-area.component.ts +213 -0
  549. package/projects/carriera-intern-components/src/app/components/text-area/text-area.stories.ts +90 -0
  550. package/projects/carriera-intern-components/src/app/components/toolbar-dropdown/interfaces/index.ts +1 -0
  551. package/projects/carriera-intern-components/src/app/components/toolbar-dropdown/interfaces/interval-dropdown-option.interface.ts +10 -0
  552. package/projects/carriera-intern-components/src/app/components/toolbar-dropdown/interval-dropdown.component.html +98 -0
  553. package/projects/carriera-intern-components/src/app/components/toolbar-dropdown/interval-dropdown.component.scss +437 -0
  554. package/projects/carriera-intern-components/src/app/components/toolbar-dropdown/interval-dropdown.component.spec.ts +22 -0
  555. package/projects/carriera-intern-components/src/app/components/toolbar-dropdown/interval-dropdown.component.ts +160 -0
  556. package/projects/carriera-intern-components/src/app/components/toolbar-dropdown/interval-dropdown.stories.ts +77 -0
  557. package/projects/carriera-intern-components/src/app/components/toolbar-dropdown/pipes/dropdown-filter-input-config.pipe.ts +52 -0
  558. package/projects/carriera-intern-components/src/app/components/toolbar-dropdown/utils/helpers/interval-dropdown.helper.ts +193 -0
  559. package/projects/carriera-intern-components/src/app/directives/hover-svg-directives.ts +49 -0
  560. package/projects/carriera-intern-components/src/app/directives/index.ts +3 -0
  561. package/projects/carriera-intern-components/src/app/directives/infinite-scroll.directive.ts +64 -0
  562. package/projects/carriera-intern-components/src/app/directives/intersection-observer.directive.ts +50 -0
  563. package/projects/carriera-intern-components/src/app/enums/alignment.enum.ts +4 -0
  564. package/projects/carriera-intern-components/src/app/enums/general-actions.enum.ts +71 -0
  565. package/projects/carriera-intern-components/src/app/enums/index.ts +3 -0
  566. package/projects/carriera-intern-components/src/app/enums/string-placeholder.enum.ts +3 -0
  567. package/projects/carriera-intern-components/src/app/models/pm.model.ts +11 -0
  568. package/projects/carriera-intern-components/src/app/models/review.model.ts +29 -0
  569. package/projects/carriera-intern-components/src/app/models/truck.model.ts +5 -0
  570. package/projects/carriera-intern-components/src/app/pipes/bytes-to-human-readable.pipe.spec.ts +8 -0
  571. package/projects/carriera-intern-components/src/app/pipes/bytes-to-human-readable.pipe.ts +29 -0
  572. package/projects/carriera-intern-components/src/app/pipes/currency.pipe.spec.ts +8 -0
  573. package/projects/carriera-intern-components/src/app/pipes/currency.pipe.ts +61 -0
  574. package/projects/carriera-intern-components/src/app/pipes/number-format.pipe.spec.ts +8 -0
  575. package/projects/carriera-intern-components/src/app/pipes/number-format.pipe.ts +30 -0
  576. package/projects/carriera-intern-components/src/app/services/document.service.spec.ts +16 -0
  577. package/projects/carriera-intern-components/src/app/services/document.service.ts +168 -0
  578. package/projects/carriera-intern-components/src/app/utils/autofill-validators.ts +32 -0
  579. package/projects/carriera-intern-components/src/app/utils/constants/index.ts +1 -0
  580. package/projects/carriera-intern-components/src/app/utils/constants/input-character-sets.constants.ts +142 -0
  581. package/projects/carriera-intern-components/src/app/utils/index.ts +2 -0
  582. package/projects/carriera-intern-components/src/app/validators/custom-validators.ts +45 -0
  583. package/projects/carriera-intern-components/src/public-api.ts +31 -0
  584. package/projects/carriera-intern-components/src/styles/README.md +59 -0
  585. package/projects/carriera-intern-components/src/styles/_variables.scss +301 -0
  586. package/projects/carriera-intern-components/src/styles/cropper.scss +39 -0
  587. package/projects/carriera-intern-components/src/styles/custompickers.scss +827 -0
  588. package/projects/carriera-intern-components/src/styles/popover.scss +224 -0
  589. package/projects/carriera-intern-components/src/styles/review_variables.scss +45 -0
  590. package/projects/carriera-intern-components/src/styles/tooltip.scss +119 -0
  591. package/projects/carriera-intern-components/src/styles/utility/colors.scss +265 -0
  592. package/projects/carriera-intern-components/src/styles/utility/utilities.scss +17 -0
  593. package/projects/carriera-intern-components/src/styles.scss +43 -0
  594. package/projects/carriera-intern-components/tsconfig.lib.json +15 -0
  595. package/projects/carriera-intern-components/tsconfig.lib.prod.json +11 -0
  596. package/projects/carriera-intern-components/tsconfig.spec.json +15 -0
  597. package/tsconfig.json +33 -0
@@ -0,0 +1,1486 @@
1
+ // Angular
2
+ import {
3
+ AfterViewInit,
4
+ Component,
5
+ computed,
6
+ ElementRef,
7
+ HostListener,
8
+ input,
9
+ OnInit,
10
+ Optional,
11
+ output,
12
+ Self,
13
+ signal,
14
+ ViewChild,
15
+ ChangeDetectorRef,
16
+ } from '@angular/core';
17
+ import {
18
+ ControlValueAccessor,
19
+ NgControl,
20
+ AbstractControl,
21
+ } from '@angular/forms';
22
+ import { NgTemplateOutlet } from '@angular/common';
23
+
24
+ // Pipes
25
+ import { CurrencyPipe } from '../../pipes/currency.pipe';
26
+ import {
27
+ InputClassPipe,
28
+ BrokerProgressPipe,
29
+ ClearTooltipPipe,
30
+ HighlightSearchPipe,
31
+ RemapPmIconsPipe,
32
+ ErrorMessagePipe,
33
+ } from './pipes';
34
+
35
+ // Directives
36
+ import { PasswordDirective } from './directives/password.directive';
37
+ import { NumberFormatDirective } from './directives/number-format.directive';
38
+ import { MaskDirective } from './directives/mask.directive';
39
+
40
+ import { InfiniteScrollDirective } from '../../directives/infinite-scroll.directive';
41
+ import { IntersectionObserverDirective } from '../../directives/intersection-observer.directive';
42
+
43
+ // Bootstrap
44
+ import {
45
+ NgbDropdownModule,
46
+ NgbPopover,
47
+ NgbTooltip,
48
+ } from '@ng-bootstrap/ng-bootstrap';
49
+
50
+ // Models
51
+ import {
52
+ CaiInputConfig,
53
+ DropdownOption,
54
+ DropdownArrays,
55
+ DropdownOptions,
56
+ DropdownKeys,
57
+ DropdownGroups,
58
+ GroupedNavigationState,
59
+ KeyboardNavigationState,
60
+ } from './models';
61
+
62
+ // Components
63
+ import { AvatarComponent } from '../avatar/avatar.component';
64
+ import { SvgIconComponent } from 'angular-svg-icon';
65
+
66
+ // Helpers
67
+ import {
68
+ InputHelper,
69
+ KeyboardNavigationHelper,
70
+ CastableType,
71
+ CastableTypeMap,
72
+ } from './utilities';
73
+
74
+ interface AutofillableFormControl extends AbstractControl {
75
+ _autofilled?: boolean;
76
+ }
77
+
78
+ @Component({
79
+ selector: 'cai-input',
80
+ templateUrl: './input.component.html',
81
+ styleUrl: './input.component.scss',
82
+ imports: [
83
+ // Pipes
84
+ ErrorMessagePipe,
85
+ CurrencyPipe,
86
+ HighlightSearchPipe,
87
+ RemapPmIconsPipe,
88
+ ClearTooltipPipe,
89
+ BrokerProgressPipe,
90
+ InputClassPipe,
91
+
92
+ // Directives
93
+ PasswordDirective,
94
+ NumberFormatDirective,
95
+ MaskDirective,
96
+ InfiniteScrollDirective,
97
+ IntersectionObserverDirective,
98
+
99
+ // Bootstrap
100
+ NgbDropdownModule,
101
+ NgbTooltip,
102
+ NgTemplateOutlet,
103
+
104
+ // Components
105
+ SvgIconComponent,
106
+ AvatarComponent,
107
+ ],
108
+ })
109
+ export class InputComponent
110
+ implements ControlValueAccessor, AfterViewInit, OnInit
111
+ {
112
+ // Refs
113
+ @ViewChild('inputRef') inputRef!: ElementRef<HTMLInputElement>;
114
+ @ViewChild('containerRef') containerRef!: ElementRef<HTMLInputElement>;
115
+ @ViewChild('dropdown') dropdown!: NgbPopover;
116
+ @ViewChild('closeTooltip') closeTooltip!: NgbPopover;
117
+
118
+ // Directive refs
119
+ @ViewChild(PasswordDirective) PasswordDirective!: PasswordDirective;
120
+ @ViewChild(NumberFormatDirective)
121
+ NumberFormatDirective!: NumberFormatDirective;
122
+ @ViewChild(MaskDirective)
123
+ MaskDirective!: MaskDirective;
124
+
125
+ // Inputs
126
+
127
+ id = input<string>('');
128
+
129
+ config = input<CaiInputConfig>({});
130
+
131
+ options = input<DropdownArrays>([]);
132
+
133
+ preselectedOptions = input<DropdownArrays | null>(null);
134
+
135
+ isLoading = input<boolean>(false);
136
+
137
+ hideValidation = input<boolean>(false);
138
+ showNoResults = input<boolean>(true);
139
+
140
+ preselectedUnit = input<string | null>(null); // Subcontent drop
141
+
142
+ unassignedCount = input<number>(0);
143
+
144
+ // Signals
145
+
146
+ openGroup = signal<number | null>(null);
147
+
148
+ isDropdownOpen = signal<boolean>(false);
149
+
150
+ closing = signal<boolean>(false);
151
+
152
+ canTooltipBeVisible = signal<boolean>(false);
153
+ disabled = signal<boolean>(false);
154
+
155
+ value = signal<string>('');
156
+ searchValue = signal<string>('');
157
+
158
+ visible = signal<boolean>(false); // Password visibility
159
+
160
+ selectedOption = signal<DropdownOptions | null>(null);
161
+ multipleSelectedOptions = signal<DropdownOptions[]>([]);
162
+
163
+ focused = signal<boolean>(false);
164
+ hovered = signal<boolean>(false);
165
+
166
+ isAdding = signal<boolean>(false);
167
+ isAutofilled = signal<boolean>(false);
168
+
169
+ isFocusedWithMouseClick = signal<boolean>(false);
170
+
171
+ // Dispatch board signals
172
+ foldedBoards = signal<number[]>([]);
173
+
174
+ randomAutocomplete = signal<string>(this.randomizeAutocomplete());
175
+
176
+ // Grouped: Where 0 for optionIndex is always the group item head
177
+ keyboardNavigationState = signal<KeyboardNavigationState>({
178
+ singleIndex: null,
179
+ groupedNavigationState: null,
180
+ });
181
+
182
+ // Computed signals
183
+
184
+ public isDisabled = computed<boolean>(() => {
185
+ return this.disabled() || !!this.config().disabled;
186
+ });
187
+
188
+ public dropdownOptions = computed<DropdownOptions[]>(() => {
189
+ const options = InputHelper.getSearchedDropdownOptions(
190
+ this.options(),
191
+ this.searchValue() || '',
192
+ this.config().dropdown,
193
+ this.config().search && !this.config().useOutsideSearch,
194
+ this.foldedBoards(),
195
+ this.config().optionLabel,
196
+ this.openGroup(),
197
+ this.isDropdownOpen(),
198
+ );
199
+ return options;
200
+ });
201
+
202
+ // Should apply contentful styles
203
+ public hasText = computed<boolean>(() => {
204
+ return Boolean(
205
+ this.value() ||
206
+ (this.selectedOption() && this.config().dropdown !== 'subcontent') ||
207
+ this.isAutofilled() ||
208
+ !!this.multipleSelectedOptions().length,
209
+ );
210
+ });
211
+
212
+ public containerWidth = signal<number>(0);
213
+
214
+ step = computed(() => {
215
+ const numericValue = parseFloat(this.value() || '0');
216
+ const value = numericValue || 0;
217
+ if (this.config().step === 'automatic') {
218
+ if (value < 20000) return 1000;
219
+ else if (value < 50000) return 5000;
220
+ else if (value < 100000) return 10000;
221
+ else return 20000;
222
+ } else if (this.config().step) return this.config().step as number;
223
+ else {
224
+ return 1;
225
+ }
226
+ });
227
+
228
+ public isGroupedDropdown = computed<boolean>(() => {
229
+ return (
230
+ this.config().dropdown === 'dispatch' ||
231
+ this.config().dropdown === 'ftl-dispatch' ||
232
+ this.config().dropdown === 'fuel-stop-transaction' ||
233
+ // For toll we skip the header items since they are not selectable
234
+ this.config().dropdown === 'toll' ||
235
+ // Won't handle for now since we're delaying split functionality
236
+ this.config().dropdown === 'split-driver' ||
237
+ this.config().dropdown === 'split-truck' ||
238
+ this.config().dropdown === 'split-trailer'
239
+ );
240
+ });
241
+
242
+ // Outputs
243
+ onBlur = output();
244
+ onFocused = output();
245
+ onReset = output();
246
+
247
+ onValueChange = output<string | number | null>();
248
+
249
+ onOptionAdded = output<string>(); // When an option is added
250
+ onAdd = output(); // When add is clicked
251
+
252
+ onSelectionChange = output<DropdownKeys | null>();
253
+ onSelectedObject = output<DropdownOptions | null>();
254
+ onSelectedGroup = output<DropdownGroups | null>();
255
+
256
+ onClear = output();
257
+ onAutofill = output();
258
+ onScrolledToBottom = output();
259
+ onScrolledToBottomGroup = output();
260
+ onSearch = output<string>();
261
+ onValueAdded = output<string | number | null>();
262
+ onRemove = output();
263
+ onHoverRemove = output<boolean>();
264
+
265
+ dropdownPopperOptions = (options: Partial<Record<string, unknown>> = {}) => {
266
+ // const modifiers = (options['modifiers'] as { name?: string; options?: Record<string, unknown> }[] | undefined) ?? [];
267
+ // // Filter out the specific flip modifier with options
268
+ // const flipModifier = modifiers.find((m) => m?.name === 'flip' && m?.options === undefined)
269
+ // const otherModifiers = modifiers.filter((m) => m !== flipModifier);
270
+
271
+ // const newOptions ={
272
+ // ...options,
273
+ // modifiers: [
274
+ // ...otherModifiers,
275
+ // {
276
+ // ...flipModifier,
277
+ // name: 'flip',
278
+ // options: {
279
+ // altBoundary: true,
280
+ // rootBoundary: 'document',
281
+ // padding: 8,
282
+ // },
283
+ // },
284
+ // ],
285
+ // };
286
+ return options;
287
+ };
288
+
289
+ constructor(
290
+ @Optional() @Self() public ngControl: NgControl | null,
291
+ private cdr: ChangeDetectorRef,
292
+ ) {
293
+ if (this.ngControl) {
294
+ this.ngControl.valueAccessor = this;
295
+ }
296
+ }
297
+
298
+ onAutofilled(): void {
299
+ if (!this.config().autocomplete) {
300
+ return;
301
+ }
302
+
303
+ this.onAutofill.emit();
304
+
305
+ const ctrl = this.ngControl?.control as AutofillableFormControl;
306
+ if (!ctrl) return;
307
+
308
+ ctrl._autofilled = true;
309
+ this.isAutofilled.set(true);
310
+ ctrl.setErrors(null);
311
+ ctrl.markAsDirty();
312
+ ctrl.markAsTouched();
313
+ ctrl.updateValueAndValidity({ emitEvent: false });
314
+ this.cdr.detectChanges();
315
+ }
316
+
317
+ clearAutofillFlag(): void {
318
+ const ctrl = this.ngControl?.control as AutofillableFormControl;
319
+ if (ctrl?._autofilled) {
320
+ ctrl._autofilled = false;
321
+ this.isAutofilled.set(false);
322
+ ctrl.updateValueAndValidity({ emitEvent: false });
323
+ }
324
+ }
325
+
326
+ ngOnInit(): void {
327
+ const optionLabel = this.config().optionLabel || 'label';
328
+
329
+ if (
330
+ this.preselectedUnit() &&
331
+ this.options() &&
332
+ this.config().dropdown === 'subcontent'
333
+ ) {
334
+ const option = (this.options() as DropdownOption[])!.find((option) => {
335
+ return (
336
+ option[optionLabel]?.toString().toLowerCase() ===
337
+ this.preselectedUnit()?.toString().toLowerCase()
338
+ );
339
+ });
340
+ if (option) {
341
+ this.selectedOption.set(option);
342
+ }
343
+ }
344
+ }
345
+
346
+ ngAfterViewInit(): void {
347
+ setTimeout(() => {
348
+ this.updateContainerWidth();
349
+ if (this.config().autofocus) {
350
+ this.focus();
351
+ }
352
+
353
+ // Set up autofill detection via animation events
354
+ if (
355
+ this.config().autocomplete &&
356
+ this.config().autocomplete !== 'off' &&
357
+ this.inputRef?.nativeElement
358
+ ) {
359
+ this.setupAutofillDetection();
360
+ }
361
+ }, 0);
362
+ }
363
+
364
+ private setupAutofillDetection(): void {
365
+ if (!this.inputRef?.nativeElement) return;
366
+
367
+ const inputElement = this.inputRef.nativeElement;
368
+
369
+ // Check for autofill using CSS pseudo-class detection
370
+ const checkForAutofill = () => {
371
+ if (this.isAutofilled()) return;
372
+
373
+ // Check if the element matches the -webkit-autofill pseudo-class
374
+ const isAutofilled =
375
+ inputElement.matches(':-webkit-autofill') ||
376
+ inputElement.matches(':-webkit-autofill:hover') ||
377
+ inputElement.matches(':-webkit-autofill:focus') ||
378
+ inputElement.matches(':-webkit-autofill:active');
379
+
380
+ if (isAutofilled) {
381
+ this.onAutofilled();
382
+ }
383
+ };
384
+
385
+ // Periodic checks for autofill
386
+ setTimeout(checkForAutofill, 200);
387
+ setTimeout(checkForAutofill, 500);
388
+ setTimeout(checkForAutofill, 1000);
389
+ }
390
+
391
+ private updateContainerWidth(): void {
392
+ if (this.containerRef?.nativeElement) {
393
+ this.containerWidth.set(this.containerRef.nativeElement.offsetWidth);
394
+ }
395
+ }
396
+
397
+ onInput(event: Event): void {
398
+ // Clear autofill flag when user manually types
399
+ this.clearAutofillFlag();
400
+
401
+ const inputElement = event.target as HTMLInputElement;
402
+ const inputEvent = event as InputEvent;
403
+ const inputData = inputEvent.data;
404
+ const max = this.config().max;
405
+
406
+ // Handle inputs normally for all inputs other than password and number
407
+ if (
408
+ ((this.config().type === 'password' ||
409
+ this.config().type === 'account') &&
410
+ this.config().reveal) ||
411
+ this.config().type === 'number'
412
+ ) {
413
+ return;
414
+ }
415
+
416
+ if (
417
+ inputData &&
418
+ (this.config().disabledCharacters?.length ||
419
+ this.config().enabledCharacters?.length ||
420
+ this.config().spacesAllowed !== undefined)
421
+ ) {
422
+ // Capture cursor position before any modifications
423
+ const cursorPosition = inputElement.selectionStart || 0;
424
+ const beforeCursor = inputElement.value.substring(
425
+ 0,
426
+ cursorPosition - inputData.length,
427
+ );
428
+ const afterCursor = inputElement.value.substring(cursorPosition);
429
+
430
+ let filteredData = inputData;
431
+
432
+ if (this.config().disabledCharacters?.length) {
433
+ filteredData = Array.from(filteredData)
434
+ .filter(
435
+ (char) =>
436
+ !this.config().disabledCharacters?.includes(char?.toLowerCase()),
437
+ )
438
+ .join('');
439
+ }
440
+
441
+ if (this.config().enabledCharacters?.length) {
442
+ filteredData = Array.from(filteredData)
443
+ .filter((char) =>
444
+ this.config().enabledCharacters?.includes(char?.toLowerCase()),
445
+ )
446
+ .join('');
447
+ }
448
+
449
+ if (this.config().spacesAllowed !== undefined) {
450
+ // First, handle space validation (leading spaces and double spaces)
451
+ let processedData = '';
452
+ for (let i = 0; i < filteredData.length; i++) {
453
+ const char = filteredData[i];
454
+ const fullValueSoFar = beforeCursor + processedData;
455
+
456
+ if (char === ' ') {
457
+ if (fullValueSoFar.length === 0) {
458
+ continue;
459
+ }
460
+
461
+ if (fullValueSoFar.endsWith(' ')) {
462
+ continue;
463
+ }
464
+ }
465
+
466
+ processedData += char;
467
+ }
468
+
469
+ const fullValue = beforeCursor + processedData + afterCursor;
470
+ const currentSpaceCount = (fullValue.match(/ /g) || []).length;
471
+
472
+ // Then apply space count limit
473
+ if (currentSpaceCount > this.config().spacesAllowed!) {
474
+ const spacesInProcessedData = (processedData.match(/ /g) || [])
475
+ .length;
476
+ const currentSpacesWithoutProcessed =
477
+ currentSpaceCount - spacesInProcessedData;
478
+ const allowedSpacesInProcessed = Math.max(
479
+ 0,
480
+ this.config().spacesAllowed! - currentSpacesWithoutProcessed,
481
+ );
482
+
483
+ if (allowedSpacesInProcessed === 0) {
484
+ processedData = processedData.replace(/ /g, '');
485
+ } else if (spacesInProcessedData > allowedSpacesInProcessed) {
486
+ const spacesToRemove =
487
+ spacesInProcessedData - allowedSpacesInProcessed;
488
+ let removedCount = 0;
489
+ processedData = Array.from(processedData)
490
+ .filter((char) => {
491
+ if (char === ' ' && removedCount < spacesToRemove) {
492
+ removedCount++;
493
+ return false;
494
+ }
495
+ return true;
496
+ })
497
+ .join('');
498
+ }
499
+ }
500
+
501
+ filteredData = processedData;
502
+ }
503
+
504
+ if (filteredData !== inputData) {
505
+ inputElement.value = beforeCursor + filteredData + afterCursor;
506
+ const newCursorPosition = beforeCursor.length + filteredData.length;
507
+ inputElement.setSelectionRange(newCursorPosition, newCursorPosition);
508
+ }
509
+ }
510
+
511
+ if (max && inputElement.value.length > max) {
512
+ const cursorPosition = inputElement.selectionStart || 0;
513
+ inputElement.value = inputElement.value.slice(0, max);
514
+ // Restore cursor position, capping at max length
515
+ const newCursorPosition = Math.min(cursorPosition, max);
516
+ inputElement.setSelectionRange(newCursorPosition, newCursorPosition);
517
+ }
518
+
519
+ if (this.config().textTransform) {
520
+ const cursorPosition = inputElement.selectionStart || 0;
521
+ let newCursorPosition = cursorPosition;
522
+
523
+ switch (this.config().textTransform) {
524
+ case 'capitalize':
525
+ let words = inputElement.value.split(' ');
526
+ inputElement.value = words
527
+ .map((word) => word.charAt(0).toUpperCase() + word.slice(1))
528
+ .join(' ');
529
+ break;
530
+ case 'uppercase':
531
+ inputElement.value = inputElement.value
532
+ .split('')
533
+ .map((letter) => {
534
+ if (this.config().textTransformExceptions?.includes(letter)) {
535
+ return letter.toLowerCase();
536
+ }
537
+ return letter.toUpperCase();
538
+ })
539
+ .join('');
540
+ break;
541
+ case 'lowercase':
542
+ inputElement.value = inputElement.value.toLowerCase();
543
+ break;
544
+ }
545
+
546
+ // Restore cursor position after text transformation (deferred to allow bulk operations)
547
+ inputElement.setSelectionRange(newCursorPosition, newCursorPosition);
548
+ }
549
+
550
+ this.value.set(inputElement.value);
551
+ this.searchValue.set(inputElement.value);
552
+
553
+ if (
554
+ this.config().search &&
555
+ !this.config().dropdownAutocomplete &&
556
+ !this.isAdding()
557
+ ) {
558
+ this.onSearch.emit(inputElement.value);
559
+ this.onTouched();
560
+
561
+ if (
562
+ this.keyboardNavigationState().singleIndex !== null ||
563
+ this.keyboardNavigationState().groupedNavigationState !== null
564
+ ) {
565
+ this.startKeyboardNavigation();
566
+ }
567
+
568
+ if (!this.dropdown.isOpen()) {
569
+ this.openDropdown();
570
+ }
571
+
572
+ if (this.selectedOption()) {
573
+ this.selectedOption.set(null);
574
+ this.dispatchOnChange(null);
575
+
576
+ this.onSelectionChange.emit(null);
577
+ this.onSelectedObject.emit(null);
578
+ }
579
+ return;
580
+ }
581
+
582
+ if (this.config().dropdownAutocomplete) {
583
+ if (!this.dropdown.isOpen()) {
584
+ this.openDropdown();
585
+ }
586
+ this.startKeyboardNavigation();
587
+ }
588
+
589
+ this.dispatchOnChange(this.value());
590
+ }
591
+
592
+ // Event from password, number format, and mask directives
593
+ @HostListener('realValueChange', ['$event'])
594
+ onRealValueChange(event: CustomEvent): void {
595
+ this.value.set(event.detail);
596
+ this.searchValue.set(event.detail);
597
+
598
+ if (this.config().type === 'number') {
599
+ this.dispatchOnChange(Number(event.detail));
600
+ return;
601
+ }
602
+
603
+ this.dispatchOnChange(event.detail);
604
+ }
605
+
606
+ // ControlValueAccessor methods
607
+ onChange = (_: any) => {};
608
+ onTouched = () => {};
609
+
610
+ dispatchOnChange(value: any): void {
611
+ if (value === undefined || value === null || value === '') {
612
+ this.onChange(null);
613
+ this.onValueChange.emit(null);
614
+ } else {
615
+ this.onChange(value);
616
+ this.onValueChange.emit(value);
617
+ }
618
+
619
+ requestAnimationFrame(() => {
620
+ if (this.config().passwordRequirements) {
621
+ if (this.ngControl?.control?.valid) {
622
+ this.closeDropdown();
623
+ } else {
624
+ this.openDropdown();
625
+ }
626
+ }
627
+ });
628
+ }
629
+
630
+ registerOnChange(fn: any): void {
631
+ this.onChange = fn;
632
+ }
633
+
634
+ registerOnTouched(fn: any): void {
635
+ this.onTouched = fn;
636
+ }
637
+
638
+ setDisabledState(isDisabled: boolean): void {
639
+ this.disabled.set(isDisabled);
640
+ }
641
+
642
+ /**
643
+ * Writes a new value to the element. (ControlValueAccessor)
644
+ */
645
+ writeValue(value: any): void {
646
+ if (value && this.config().textTransform && typeof value === 'string') {
647
+ switch (this.config().textTransform) {
648
+ case 'capitalize':
649
+ let words = value.split(' ');
650
+ value = words
651
+ .map((word) => word.charAt(0).toUpperCase() + word.slice(1))
652
+ .join(' ');
653
+ break;
654
+ case 'uppercase':
655
+ value = value
656
+ .split('')
657
+ .map((letter) => {
658
+ if (this.config().textTransformExceptions?.includes(letter)) {
659
+ return letter.toLowerCase();
660
+ }
661
+ return letter.toUpperCase();
662
+ })
663
+ .join('');
664
+ break;
665
+ case 'lowercase':
666
+ value = value.toLowerCase();
667
+ break;
668
+ }
669
+ }
670
+ this.value.set(value);
671
+ this.searchValue.set(value);
672
+
673
+ const optionValue = this.config().optionValue;
674
+
675
+ requestAnimationFrame(() => {
676
+ if (value || value === 0) {
677
+ this.onTouched();
678
+ } else {
679
+ this.selectedOption.set(null);
680
+ this.setValue();
681
+ return;
682
+ }
683
+
684
+ if (
685
+ !(this.config().dropdown && !this.config().dropdownAutocomplete) ||
686
+ this.config().dropdown === 'subcontent'
687
+ ) {
688
+ this.setValue();
689
+ }
690
+
691
+ if (this.config().dropdownAutocomplete) {
692
+ return;
693
+ }
694
+
695
+ if (!this.options() && !this.preselectedOptions()) {
696
+ return;
697
+ }
698
+
699
+ if (!this.options()?.length && !this.preselectedOptions()?.length) {
700
+ return;
701
+ }
702
+
703
+ const options = !!this.preselectedOptions()?.length
704
+ ? [...this.options(), ...this.preselectedOptions()!]
705
+ : this.options();
706
+
707
+ const { newValue, selectedOption, multipleSelectedOptions } =
708
+ InputHelper.getOptionValue(
709
+ value,
710
+ options,
711
+ optionValue as keyof DropdownOptions,
712
+ this.config(),
713
+ );
714
+
715
+ if (this.config().dropdown !== 'subcontent') {
716
+ this.value.set(newValue || '');
717
+ this.searchValue.set(newValue || '');
718
+ this.selectedOption.set(selectedOption || null);
719
+ this.multipleSelectedOptions.set(multipleSelectedOptions || []);
720
+ }
721
+ });
722
+ }
723
+
724
+ /**
725
+ * Increments the value of a number input by the current step.
726
+ */
727
+ increment(event?: MouseEvent): void {
728
+ const max = this.config().max;
729
+ if (max && Number(this.value()) + this.step() > max) {
730
+ this.value.set(String(max));
731
+ } else {
732
+ this.value.update((v) =>
733
+ String(
734
+ (parseFloat(v) ? parseFloat(v) : this.config().min || 0) +
735
+ this.step(),
736
+ ),
737
+ );
738
+ }
739
+ this.dispatchOnChange(this.value());
740
+ this.setValue();
741
+ this.focus(event);
742
+ }
743
+
744
+ /**
745
+ * Decrements the value of a number input by the current step.
746
+ */
747
+ decrement(event?: MouseEvent): void {
748
+ const min = this.config().min;
749
+ if (min && Number(this.value()) - this.step() < min) {
750
+ this.value.set(String(min));
751
+ } else {
752
+ this.value.update((v) => {
753
+ const currentValue = parseFloat(v) ? parseFloat(v) : 0;
754
+ const nextValue = currentValue - this.step();
755
+ return String(nextValue <= 0 ? 0 : nextValue);
756
+ });
757
+ }
758
+ this.dispatchOnChange(this.value());
759
+ this.setValue();
760
+ this.focus(event);
761
+ }
762
+
763
+ /**
764
+ * Toggles the visibility of the password input.
765
+ * @param event - The MouseEvent that triggered the toggle.
766
+ */
767
+ toggleVisibility(event?: MouseEvent): void {
768
+ if (this.config().type !== 'password' && this.config().type !== 'account') {
769
+ return;
770
+ }
771
+
772
+ if (this.focused() || !this.hasText()) {
773
+ this.focus(event);
774
+ }
775
+ this.visible.update((v) => !v);
776
+ setTimeout(() => this.setValue(), 0);
777
+ }
778
+
779
+ /**
780
+ * Sets the value in the actual HTML input element or updates the
781
+ * "real" value in the associated directive.
782
+ */
783
+ setValue(): void {
784
+ if (!this.inputRef || !this.inputRef.nativeElement) {
785
+ return;
786
+ }
787
+
788
+ let type =
789
+ !!this.config().mask && !this.config().reveal
790
+ ? 'masked'
791
+ : this.config().type;
792
+
793
+ if ((type === 'password' || type === 'account') && !this.config().reveal) {
794
+ type = 'text';
795
+ }
796
+
797
+ switch (type) {
798
+ case 'password':
799
+ if (this.PasswordDirective) {
800
+ this.PasswordDirective.setRealValue(this.value());
801
+ } else {
802
+ this.inputRef.nativeElement.value = this.value();
803
+ }
804
+ break;
805
+ case 'account':
806
+ if (this.PasswordDirective) {
807
+ this.PasswordDirective.setRealValue(this.value());
808
+ } else {
809
+ this.inputRef.nativeElement.value = this.value();
810
+ }
811
+ break;
812
+ case 'number':
813
+ if (this.NumberFormatDirective) {
814
+ this.NumberFormatDirective.setRealValue(this.value());
815
+ } else {
816
+ this.inputRef.nativeElement.value = this.value();
817
+ }
818
+ break;
819
+ case 'masked':
820
+ if (this.MaskDirective) {
821
+ this.MaskDirective.setRealValue(this.value());
822
+ } else {
823
+ this.inputRef.nativeElement.value = this.value();
824
+ }
825
+ break;
826
+ default:
827
+ this.inputRef.nativeElement.value = this.value();
828
+ break;
829
+ }
830
+ }
831
+
832
+ /**
833
+ * Focuses the input element.
834
+ * Prevents the default action of the mouse event to avoid unintended behaviors
835
+ * like double focus or focus loss.
836
+ * @param event - The MouseEvent that initiated the focus action.
837
+ */
838
+ focus(event?: MouseEvent): void {
839
+ this.isFocusedWithMouseClick.set(true);
840
+ if (event?.target === this.inputRef?.nativeElement) {
841
+ return;
842
+ }
843
+ if (event) {
844
+ event.stopPropagation();
845
+ event.preventDefault();
846
+ }
847
+ if (this.inputRef && this.inputRef.nativeElement) {
848
+ this.inputRef.nativeElement.focus();
849
+ }
850
+ }
851
+
852
+ /**
853
+ * Called when the input element receives focus (focus event).
854
+ */
855
+ onFocus(event: FocusEvent): void {
856
+ this.onFocused.emit();
857
+ this.updateContainerWidth();
858
+ this.focused.set(true);
859
+ this.keyboardNavigationState.set({
860
+ singleIndex: null,
861
+ groupedNavigationState: null,
862
+ });
863
+
864
+ if (this.config().dropdown && !this.isAdding()) {
865
+ // Mouse clicked focus should always open the dropdown, but keyboard focus should only open the dropdown if there is no selected option
866
+ if (!this.isFocusedWithMouseClick()) {
867
+ if (!this.selectedOption()) {
868
+ this.startKeyboardNavigation();
869
+ if (!this.config().dropdownAutocomplete) {
870
+ this.openDropdown();
871
+ }
872
+ }
873
+ } else {
874
+ this.openDropdown();
875
+ }
876
+ }
877
+
878
+ if (this.config().passwordRequirements) {
879
+ if (this.ngControl?.control?.invalid) {
880
+ this.openDropdown();
881
+ }
882
+ }
883
+
884
+ this.isFocusedWithMouseClick.set(false);
885
+
886
+ if (!this.config().add && !this.config().search) return;
887
+
888
+ if (this.isAdding()) return;
889
+
890
+ if (this.config().search && !this.config().dropdownAutocomplete) {
891
+ this.value.set('');
892
+ this.searchValue.set('');
893
+ this.inputRef.nativeElement.value = this.value();
894
+ }
895
+ }
896
+
897
+ /**
898
+ * Called when the input element loses focus (blur event).
899
+ */
900
+ dispatchOnBlur(): void {
901
+ this.onBlur.emit();
902
+ this.onTouched();
903
+ this.closeDropdown();
904
+ this.focused.set(false);
905
+ this.isFocusedWithMouseClick.set(false);
906
+
907
+ if (
908
+ !this.config().add &&
909
+ !(this.config().dropdown === 'dispatch') &&
910
+ !this.config().search
911
+ )
912
+ return;
913
+
914
+ if (this.isAdding()) {
915
+ this.isAdding.set(false);
916
+ this.reset();
917
+
918
+ return;
919
+ }
920
+
921
+ requestAnimationFrame(() => {
922
+ if (!this.config().dropdownAutocomplete) {
923
+ this.inputRef.nativeElement.value = '';
924
+ this.value.set('');
925
+ }
926
+ });
927
+ }
928
+
929
+ toggleHovered(value: boolean): void {
930
+ this.hovered.set(value);
931
+ }
932
+
933
+ /**
934
+ * Resets the input field's value to an empty string.
935
+ */
936
+ reset(event?: MouseEvent): void {
937
+ if (this.config().hasRemoveModal) {
938
+ this.closeTooltip.close();
939
+ this.onRemove.emit();
940
+
941
+ return;
942
+ }
943
+
944
+ if (this.config().hasResetButton) {
945
+ this.closeTooltip.close();
946
+ this.onReset.emit();
947
+ return;
948
+ }
949
+
950
+ if (this.isAdding()) this.isAdding.set(false);
951
+
952
+ if (this.config().dropdown === 'multiple') {
953
+ this.multipleSelectedOptions.set([]);
954
+ }
955
+ this.value.set('');
956
+ this.searchValue.set('');
957
+ this.dispatchOnChange(''); // Notify form control of the change
958
+ this.setValue(); // Update the actual input element
959
+
960
+ this.onClear.emit();
961
+ this.onSearch.emit('');
962
+ this.onValueChange.emit('');
963
+ this.selectedOption.set(null);
964
+ this.onSelectionChange.emit(null);
965
+ this.onSelectedObject.emit(null);
966
+
967
+ this.closeTooltip.close();
968
+
969
+ requestAnimationFrame(() => {
970
+ this.updateContainerWidth();
971
+ });
972
+
973
+ if (event) {
974
+ this.focus(event);
975
+ }
976
+ }
977
+
978
+ onClearHover(value: boolean): void {
979
+ this.onHoverRemove.emit(value);
980
+ this.canTooltipBeVisible.set(value);
981
+ }
982
+
983
+ closeDropdown(addNew?: boolean): void {
984
+ this.updateContainerWidth();
985
+
986
+ if (!addNew) {
987
+ this.closing.set(true);
988
+
989
+ setTimeout(() => {
990
+ this.dropdown.close();
991
+ this.isDropdownOpen.set(false);
992
+ this.closing.set(false);
993
+ }, 200);
994
+ } else {
995
+ this.dropdown.close();
996
+ this.isDropdownOpen.set(false);
997
+ this.closing.set(false);
998
+ }
999
+ }
1000
+
1001
+ openDropdown(): void {
1002
+ this.dropdown.open();
1003
+ this.isDropdownOpen.set(true);
1004
+ }
1005
+
1006
+ randomizeAutocomplete(): string {
1007
+ return `${Math.random().toString(36).substring(2, 15)}`;
1008
+ }
1009
+
1010
+ /**
1011
+ * Type guard that checks if a given property exists on an object.
1012
+ * @param obj The object to check.
1013
+ * @param prop The property to check for.
1014
+ * @returns `true` if `prop` exists on `obj`, `false` otherwise.
1015
+ */
1016
+ hasProperty<T extends object>(obj: T, prop: PropertyKey): prop is keyof T {
1017
+ return prop in obj;
1018
+ }
1019
+
1020
+ /**
1021
+ * Stops event propagation to prevent parent popover from closing
1022
+ * @param event - The event to stop
1023
+ */
1024
+ stopEventPropagation(event: Event): void {
1025
+ event.stopPropagation();
1026
+ event.stopImmediatePropagation();
1027
+ }
1028
+
1029
+ handleMultipleSelection(
1030
+ option: DropdownOptions,
1031
+ optionValue: keyof DropdownOptions,
1032
+ ) {
1033
+ if (
1034
+ this.multipleSelectedOptions().some(
1035
+ (selectedOption) => selectedOption.id === option.id,
1036
+ )
1037
+ ) {
1038
+ this.multipleSelectedOptions.update((options) =>
1039
+ options.filter((selectedOption) => selectedOption.id !== option.id),
1040
+ );
1041
+ } else {
1042
+ this.multipleSelectedOptions.update((options) => [...options, option]);
1043
+ }
1044
+
1045
+ this.dispatchOnChange([
1046
+ ...this.multipleSelectedOptions().map((option) => option[optionValue]),
1047
+ ]);
1048
+ }
1049
+
1050
+ /**
1051
+ * Handles when an option is selected from the dropdown.
1052
+ * @param option - The selected option.
1053
+ * @param event - The MouseEvent that initiated the selection action.
1054
+ */
1055
+ handleOption(option: DropdownOptions, event?: MouseEvent) {
1056
+ if (event) {
1057
+ this.stopEventPropagation(event);
1058
+ }
1059
+
1060
+ const optionValue = this.config().optionValue ?? 'id';
1061
+
1062
+ if (optionValue && this.hasProperty(option, optionValue)) {
1063
+ if (
1064
+ this.config().dropdown !== 'subcontent' &&
1065
+ this.config().dropdown !== 'multiple'
1066
+ ) {
1067
+ this.dispatchOnChange(option[optionValue]);
1068
+ }
1069
+
1070
+ if (this.config().dropdown === 'multiple') {
1071
+ this.handleMultipleSelection(option, optionValue);
1072
+ }
1073
+
1074
+ event?.stopPropagation();
1075
+ this.onSelectionChange.emit(option[optionValue]);
1076
+ this.onSelectedObject.emit(option);
1077
+ }
1078
+
1079
+ // Multiple selection dropdown stores the selected options in the selectedOption signal and autocomplete has the value in the value signal
1080
+ if (
1081
+ this.config().dropdown !== 'multiple' &&
1082
+ !this.config().dropdownAutocomplete
1083
+ ) {
1084
+ this.selectedOption.set(option);
1085
+ }
1086
+
1087
+ // Subcontent drop just adds the subcontent as a subcontent
1088
+ if (this.config().dropdown === 'subcontent') {
1089
+ this.closeDropdown();
1090
+ this.focus(event);
1091
+ this.setValue();
1092
+
1093
+ return;
1094
+ }
1095
+
1096
+ // Clear the value for searching and adding etc...
1097
+ if (
1098
+ typeof this.config().dropdown === 'string' ||
1099
+ (this.config().search && !this.config().dropdownAutocomplete) ||
1100
+ this.config().add
1101
+ ) {
1102
+ this.value.set('');
1103
+ } else {
1104
+ this.value.set(
1105
+ (option as DropdownOption)[this.config().optionLabel || 'label'],
1106
+ );
1107
+ }
1108
+
1109
+ this.setValue();
1110
+ this.closeDropdown();
1111
+ }
1112
+
1113
+ // For multiple selection dropdown
1114
+ isSelectedOption(option: DropdownOptions) {
1115
+ if (this.config().dropdown === 'multiple') {
1116
+ return this.multipleSelectedOptions().some(
1117
+ (selectedOption) => selectedOption.id === option.id,
1118
+ );
1119
+ }
1120
+ return this.selectedOption()?.id === option.id;
1121
+ }
1122
+
1123
+ /**
1124
+ * Adds a new option to the dropdown.
1125
+ * @param option - The option to add.
1126
+ */
1127
+ addOption() {
1128
+ const option = this.inputRef.nativeElement.value;
1129
+
1130
+ if (!option) {
1131
+ this.isAdding.set(false);
1132
+ this.reset();
1133
+ }
1134
+
1135
+ if (this.config().isEdit) {
1136
+ this.onOptionAdded.emit(option);
1137
+ return;
1138
+ }
1139
+
1140
+ if (this.config().writeAddValue) {
1141
+ this.value.set(option);
1142
+ this.setValue();
1143
+ this.dispatchOnChange(option);
1144
+ this.onValueAdded.emit(option);
1145
+ this.isAdding.set(false);
1146
+
1147
+ this.selectedOption.set({
1148
+ id: -1,
1149
+ [this.config().optionLabel || 'label']: option,
1150
+ });
1151
+
1152
+ requestAnimationFrame(() => {
1153
+ this.inputRef.nativeElement.blur();
1154
+ });
1155
+ return;
1156
+ }
1157
+
1158
+ this.isAdding.set(false);
1159
+
1160
+ this.value.set('');
1161
+ this.setValue();
1162
+ this.onOptionAdded.emit(option);
1163
+ }
1164
+
1165
+ /**
1166
+ * Handles when the user clicks on the "ADD NEW" button in the dropdown.
1167
+ * It sets the `isAdding` signal to `true`, closes the dropdown, and focuses the input.
1168
+ * @param event - The MouseEvent that initiated the action.
1169
+ */
1170
+ handleAddingOption(event?: MouseEvent) {
1171
+ this.onAdd.emit();
1172
+ this.selectedOption.set(null);
1173
+
1174
+ if (!this.config().add) return;
1175
+
1176
+ // Open modal variant
1177
+ if (
1178
+ this.config().canOpenModal ||
1179
+ (typeof this.config().dropdown === 'string' &&
1180
+ this.config().dropdown !== 'pm' &&
1181
+ this.config().dropdown !== 'bank')
1182
+ ) {
1183
+ this.closeDropdown(true);
1184
+ return;
1185
+ }
1186
+
1187
+ // Adding in input variant
1188
+ this.isAdding.set(true);
1189
+ this.closeDropdown();
1190
+ if (event) this.focus(event);
1191
+ }
1192
+
1193
+ // Dispatch modal
1194
+
1195
+ fold(boardId: number, event?: MouseEvent, group?: DropdownGroups) {
1196
+ if (event) {
1197
+ this.focus(event);
1198
+ }
1199
+
1200
+ if (group) {
1201
+ this.onSelectedGroup.emit(group);
1202
+ }
1203
+
1204
+ // Handle Fuel Stop Transaction - Opening one franchise will close the other
1205
+ if (this.config().dropdown === 'fuel-stop-transaction') {
1206
+ if (!group?.isFranchise) {
1207
+ this.handleOption(group as DropdownOptions);
1208
+ requestAnimationFrame(() => {
1209
+ this.inputRef.nativeElement.blur();
1210
+ });
1211
+ return;
1212
+ }
1213
+
1214
+ if (!group?.count) {
1215
+ return;
1216
+ }
1217
+
1218
+ if (this.openGroup() === boardId) {
1219
+ this.openGroup.set(null);
1220
+ return;
1221
+ }
1222
+
1223
+ this.openGroup.set(boardId);
1224
+
1225
+ return;
1226
+ }
1227
+
1228
+ // Can have many open boards at a time
1229
+ if (this.foldedBoards().includes(boardId)) {
1230
+ this.foldedBoards.update((boards) =>
1231
+ boards.filter((id) => id !== boardId),
1232
+ );
1233
+ return;
1234
+ }
1235
+
1236
+ this.foldedBoards.update((boards) => [...boards, boardId]);
1237
+ }
1238
+
1239
+ // #region Casting methods for template
1240
+
1241
+ /**
1242
+ * Type-safe casting method for templates.
1243
+ * Usage in template: cast(value, 'dispatch') or cast(value, 'broker'), etc.
1244
+ * @param value - The value to cast
1245
+ * @param type - The type string (e.g., 'dispatch', 'broker', 'contact')
1246
+ * @returns The casted value or null
1247
+ */
1248
+ cast<T extends CastableType>(
1249
+ value: unknown,
1250
+ type: T,
1251
+ ): CastableTypeMap[T] | null {
1252
+ return InputHelper.cast(value, type);
1253
+ }
1254
+
1255
+ // #endregion Casting methods for template
1256
+
1257
+ /**
1258
+ * Handles infinite scroll event when dropdown is scrolled to bottom
1259
+ * Emits an event that parent components can listen to for loading more data
1260
+ */
1261
+ onDropdownScrolledToBottom(isGroup?: boolean): void {
1262
+ isGroup
1263
+ ? this.onScrolledToBottomGroup.emit()
1264
+ : this.onScrolledToBottom.emit();
1265
+ }
1266
+
1267
+ onDropdownBackgroundClick(event: MouseEvent): void {
1268
+ if (
1269
+ event.target instanceof HTMLElement &&
1270
+ !event.target.classList.contains('dropdown-menu')
1271
+ ) {
1272
+ return;
1273
+ }
1274
+
1275
+ this.focus(event);
1276
+ event.stopPropagation();
1277
+ }
1278
+
1279
+ onDropdownIconClick(event: MouseEvent): void {
1280
+ if (!this.focused() || !this.dropdown.isOpen()) {
1281
+ this.focus(event);
1282
+ this.openDropdown();
1283
+ return;
1284
+ }
1285
+ this.inputRef.nativeElement.blur();
1286
+ event.stopPropagation();
1287
+ }
1288
+
1289
+ // #region Keyboard Navigation
1290
+
1291
+ acceptSelection(event: KeyboardEvent): void {
1292
+ event.preventDefault();
1293
+ event.stopPropagation();
1294
+
1295
+ const { singleIndex, groupedNavigationState } =
1296
+ this.keyboardNavigationState();
1297
+
1298
+ if (!this.dropdown.isOpen()) {
1299
+ return;
1300
+ }
1301
+
1302
+ // Click on ADD
1303
+ if (
1304
+ this.config().add &&
1305
+ (singleIndex === -1 || groupedNavigationState?.groupIndex === -1)
1306
+ ) {
1307
+ this.handleAddingOption();
1308
+
1309
+ if (!this.config().writeAddValue) {
1310
+ requestAnimationFrame(() => {
1311
+ this.inputRef?.nativeElement.blur();
1312
+ });
1313
+ }
1314
+
1315
+ return;
1316
+ }
1317
+
1318
+ if (this.isGroupedDropdown()) {
1319
+ if (groupedNavigationState?.optionIndex === 0) {
1320
+ const group =
1321
+ this.dropdownOptions()[groupedNavigationState?.groupIndex || 0];
1322
+
1323
+ if (group) {
1324
+ this.fold(group?.id || 0, undefined, group as DropdownGroups);
1325
+ }
1326
+ return;
1327
+ }
1328
+ }
1329
+
1330
+ const option = KeyboardNavigationHelper.getOptionFromFocusedIndex(
1331
+ this.keyboardNavigationState(),
1332
+ this.dropdownOptions(),
1333
+ this.config().dropdown as string,
1334
+ this.isGroupedDropdown(),
1335
+ );
1336
+
1337
+ if (option) {
1338
+ this.handleOption(option);
1339
+
1340
+ requestAnimationFrame(() => {
1341
+ this.inputRef?.nativeElement.blur();
1342
+
1343
+ KeyboardNavigationHelper.focusNextInput(this.inputRef);
1344
+ });
1345
+ }
1346
+ }
1347
+
1348
+ handleArrowKeys(event: KeyboardEvent): void {
1349
+ if (event) {
1350
+ event.preventDefault();
1351
+ event.stopPropagation();
1352
+ }
1353
+
1354
+ if (!this.dropdown.isOpen()) {
1355
+ this.openDropdown();
1356
+ }
1357
+
1358
+ const arrowKeyNavigationState =
1359
+ KeyboardNavigationHelper.getArrowKeyNavigationState(
1360
+ this.keyboardNavigationState(),
1361
+ this.isGroupedDropdown(),
1362
+ this.config().add || false,
1363
+ this.config().dropdown as string,
1364
+ this.dropdownOptions(),
1365
+ event.key,
1366
+ );
1367
+
1368
+ this.setKeyboardNavigationState(
1369
+ arrowKeyNavigationState.singleIndex,
1370
+ arrowKeyNavigationState.groupedNavigationState,
1371
+ );
1372
+
1373
+ KeyboardNavigationHelper.scrollToOption();
1374
+ }
1375
+
1376
+ handleFirstAndLastSelection(event: KeyboardEvent): void {
1377
+ if (event) {
1378
+ event.preventDefault();
1379
+ event.stopPropagation();
1380
+ }
1381
+
1382
+ const firstLastNavigationState =
1383
+ KeyboardNavigationHelper.getFirstLastNavigationState(
1384
+ this.keyboardNavigationState(),
1385
+ this.isGroupedDropdown(),
1386
+ this.config().add || false,
1387
+ this.config().dropdown as string,
1388
+ this.dropdownOptions(),
1389
+ event.key,
1390
+ );
1391
+
1392
+ this.setKeyboardNavigationState(
1393
+ firstLastNavigationState.singleIndex,
1394
+ firstLastNavigationState.groupedNavigationState,
1395
+ );
1396
+
1397
+ KeyboardNavigationHelper.scrollToOption();
1398
+ }
1399
+
1400
+ startKeyboardNavigation(): void {
1401
+ const { singleIndex, groupedNavigationState } =
1402
+ KeyboardNavigationHelper.getInitialKeyboardNavigationState(
1403
+ this.config().dropdown as string,
1404
+ this.isGroupedDropdown(),
1405
+ this.dropdownOptions(),
1406
+ );
1407
+
1408
+ this.setKeyboardNavigationState(singleIndex, groupedNavigationState);
1409
+ }
1410
+
1411
+ setKeyboardNavigationState(
1412
+ singleIndex: number | null,
1413
+ groupedNavigationState: GroupedNavigationState | null,
1414
+ ): void {
1415
+ this.keyboardNavigationState.set({ singleIndex, groupedNavigationState });
1416
+ }
1417
+
1418
+ handleDropdownKeyboardNavigation(event: KeyboardEvent): void {
1419
+ // TODO: Handle multiple selection input
1420
+
1421
+ if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {
1422
+ this.handleArrowKeys(event);
1423
+ }
1424
+
1425
+ if (event.key === 'Home' || event.key === 'End') {
1426
+ this.handleFirstAndLastSelection(event);
1427
+ }
1428
+
1429
+ if (event.key === 'Enter') {
1430
+ this.acceptSelection(event);
1431
+ }
1432
+
1433
+ if (
1434
+ (event.key === 'Delete' || event.key === 'Backspace') &&
1435
+ !this.value() &&
1436
+ !this.isAdding() &&
1437
+ this.selectedOption()
1438
+ ) {
1439
+ this.reset();
1440
+ }
1441
+ }
1442
+
1443
+ handleNumberKeyboardNavigation(event: KeyboardEvent): void {
1444
+ if (event.key === 'ArrowUp') {
1445
+ event.preventDefault();
1446
+ event.stopPropagation();
1447
+ this.increment();
1448
+ }
1449
+
1450
+ if (event.key === 'ArrowDown') {
1451
+ event.preventDefault();
1452
+ event.stopPropagation();
1453
+ this.decrement();
1454
+ }
1455
+ }
1456
+
1457
+ handlePasswordKeyboardNavigation(event: KeyboardEvent): void {
1458
+ if ((event.altKey || event.metaKey) && event.key === 's') {
1459
+ event.preventDefault();
1460
+ event.stopPropagation();
1461
+ this.toggleVisibility();
1462
+ }
1463
+ }
1464
+
1465
+ handleKeydown(event: KeyboardEvent): void {
1466
+ if (event.key === 'Escape') {
1467
+ event.preventDefault();
1468
+ event.stopPropagation();
1469
+ this.inputRef?.nativeElement.blur();
1470
+ }
1471
+
1472
+ if (this.config().dropdown) {
1473
+ this.handleDropdownKeyboardNavigation(event);
1474
+ }
1475
+
1476
+ if (this.config().type === 'number' && !this.config().dropdown) {
1477
+ this.handleNumberKeyboardNavigation(event);
1478
+ }
1479
+
1480
+ if (this.config().type === 'account' || this.config().type === 'password') {
1481
+ this.handlePasswordKeyboardNavigation(event);
1482
+ }
1483
+ }
1484
+
1485
+ // #endregion Keyboard Navigation
1486
+ }