cats-data-grid 0.0.1 → 0.0.5

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 (354) hide show
  1. package/README.md +63 -63
  2. package/ng-package.json +20 -0
  3. package/package.json +4 -15
  4. package/src/lib/assets/images/check-white.svg +3 -0
  5. package/src/lib/assets/images/filter-icon.svg +1 -0
  6. package/src/lib/assets/images/gripper.svg +8 -0
  7. package/src/lib/assets/images/minus-blue.svg +3 -0
  8. package/src/lib/assets/images/pin.svg +4 -0
  9. package/src/lib/assets/images/t-arrow-down.svg +4 -0
  10. package/src/lib/assets/images/t-arrow-up.svg +4 -0
  11. package/src/lib/assets/images/t-choose-column.svg +3 -0
  12. package/src/lib/assets/images/t-data-pipeline.svg +13 -0
  13. package/src/lib/assets/images/t-filter-applied.svg +4 -0
  14. package/src/lib/assets/images/t-filter.svg +3 -0
  15. package/src/lib/assets/images/t-gripper.svg +8 -0
  16. package/src/lib/assets/images/t-group-by-name.svg +3 -0
  17. package/src/lib/assets/images/t-more-vertical.svg +5 -0
  18. package/src/lib/assets/images/t-move.svg +15 -0
  19. package/src/lib/assets/images/t-x.svg +4 -0
  20. package/src/lib/cats-data-grid.component.html +1389 -0
  21. package/src/lib/cats-data-grid.component.scss +736 -0
  22. package/src/lib/cats-data-grid.component.ts +1756 -0
  23. package/src/lib/common-components/common-calendar/common-calendar.component.html +228 -0
  24. package/src/lib/common-components/common-calendar/common-calendar.component.scss +279 -0
  25. package/src/lib/common-components/common-calendar/common-calendar.component.spec.ts +23 -0
  26. package/src/lib/common-components/common-calendar/common-calendar.component.ts +606 -0
  27. package/src/lib/common-components/common-input/common-input.component.html +36 -0
  28. package/src/lib/common-components/common-input/common-input.component.scss +3 -0
  29. package/src/lib/common-components/common-input/common-input.component.spec.ts +23 -0
  30. package/src/lib/common-components/common-input/common-input.component.ts +51 -0
  31. package/src/lib/directives/adaptive-position.directive.ts +192 -0
  32. package/src/lib/directives/outside-click.directive.ts +32 -0
  33. package/src/lib/directives/renderer-parser.directive.ts +51 -0
  34. package/src/lib/pipes/add-class.pipe.ts +18 -0
  35. package/src/lib/renderers/common-renderer/common-renderer.component.html +129 -0
  36. package/src/lib/renderers/common-renderer/common-renderer.component.scss +256 -0
  37. package/src/lib/renderers/common-renderer/common-renderer.component.spec.ts +23 -0
  38. package/src/lib/renderers/common-renderer/common-renderer.component.ts +302 -0
  39. package/src/lib/services/cats-data-grid.service.spec.ts +16 -0
  40. package/src/lib/services/cats-data-grid.service.ts +9 -0
  41. package/{styles → src/lib/styles}/_index.scss +3 -3
  42. package/{styles → src/lib/styles}/base/_fonts.scss +74 -74
  43. package/{styles → src/lib/styles}/base/_index.scss +1 -1
  44. package/{styles → src/lib/styles}/base/_reset.scss +60 -60
  45. package/src/lib/styles/component/_form.scss +371 -0
  46. package/{styles → src/lib/styles}/component/_index.scss +1 -1
  47. package/{styles → src/lib/styles}/sass-utils/_function.scss +14 -14
  48. package/{styles → src/lib/styles}/sass-utils/_index.scss +3 -3
  49. package/{styles → src/lib/styles}/sass-utils/_mixin.scss +87 -56
  50. package/src/lib/styles/sass-utils/_variable.scss +77 -0
  51. package/src/public-api.ts +7 -0
  52. package/tsconfig.lib.json +15 -0
  53. package/tsconfig.lib.prod.json +11 -0
  54. package/tsconfig.spec.json +15 -0
  55. package/fesm2022/cats-data-grid.mjs +0 -530
  56. package/fesm2022/cats-data-grid.mjs.map +0 -1
  57. package/index.d.ts +0 -5
  58. package/lib/cats-data-grid.component.d.ts +0 -148
  59. package/lib/directives/outside-click.directive.d.ts +0 -10
  60. package/lib/directives/renderer-parser.directive.d.ts +0 -15
  61. package/lib/pipes/add-class.pipe.d.ts +0 -7
  62. package/lib/services/cats-data-grid.service.d.ts +0 -6
  63. package/public-api.d.ts +0 -2
  64. package/styles/component/_form.scss +0 -246
  65. package/styles/sass-utils/_variable.scss +0 -66
  66. /package/{assets → src/lib/assets}/images/activity.svg +0 -0
  67. /package/{assets → src/lib/assets}/images/airplay.svg +0 -0
  68. /package/{assets → src/lib/assets}/images/alert-circle.svg +0 -0
  69. /package/{assets → src/lib/assets}/images/alert-octagon.svg +0 -0
  70. /package/{assets → src/lib/assets}/images/alert-triangle.svg +0 -0
  71. /package/{assets → src/lib/assets}/images/align-center.svg +0 -0
  72. /package/{assets → src/lib/assets}/images/align-justify.svg +0 -0
  73. /package/{assets → src/lib/assets}/images/align-left.svg +0 -0
  74. /package/{assets → src/lib/assets}/images/align-right.svg +0 -0
  75. /package/{assets → src/lib/assets}/images/anchor.svg +0 -0
  76. /package/{assets → src/lib/assets}/images/aperture.svg +0 -0
  77. /package/{assets → src/lib/assets}/images/archive.svg +0 -0
  78. /package/{assets → src/lib/assets}/images/arrow-down-circle.svg +0 -0
  79. /package/{assets → src/lib/assets}/images/arrow-down-left.svg +0 -0
  80. /package/{assets → src/lib/assets}/images/arrow-down-right.svg +0 -0
  81. /package/{assets → src/lib/assets}/images/arrow-down.svg +0 -0
  82. /package/{assets → src/lib/assets}/images/arrow-left-circle.svg +0 -0
  83. /package/{assets → src/lib/assets}/images/arrow-left.svg +0 -0
  84. /package/{assets → src/lib/assets}/images/arrow-right-circle.svg +0 -0
  85. /package/{assets → src/lib/assets}/images/arrow-right.svg +0 -0
  86. /package/{assets → src/lib/assets}/images/arrow-up-circle.svg +0 -0
  87. /package/{assets → src/lib/assets}/images/arrow-up-left.svg +0 -0
  88. /package/{assets → src/lib/assets}/images/arrow-up-right.svg +0 -0
  89. /package/{assets → src/lib/assets}/images/arrow-up.svg +0 -0
  90. /package/{assets → src/lib/assets}/images/at-sign.svg +0 -0
  91. /package/{assets → src/lib/assets}/images/award.svg +0 -0
  92. /package/{assets → src/lib/assets}/images/bar-chart-2.svg +0 -0
  93. /package/{assets → src/lib/assets}/images/bar-chart.svg +0 -0
  94. /package/{assets → src/lib/assets}/images/battery-charging.svg +0 -0
  95. /package/{assets → src/lib/assets}/images/battery.svg +0 -0
  96. /package/{assets → src/lib/assets}/images/bell-off.svg +0 -0
  97. /package/{assets → src/lib/assets}/images/bell.svg +0 -0
  98. /package/{assets → src/lib/assets}/images/bluetooth.svg +0 -0
  99. /package/{assets → src/lib/assets}/images/bold.svg +0 -0
  100. /package/{assets → src/lib/assets}/images/book-open.svg +0 -0
  101. /package/{assets → src/lib/assets}/images/book.svg +0 -0
  102. /package/{assets → src/lib/assets}/images/bookmark.svg +0 -0
  103. /package/{assets → src/lib/assets}/images/box.svg +0 -0
  104. /package/{assets → src/lib/assets}/images/briefcase.svg +0 -0
  105. /package/{assets → src/lib/assets}/images/calendar.svg +0 -0
  106. /package/{assets → src/lib/assets}/images/camera-off.svg +0 -0
  107. /package/{assets → src/lib/assets}/images/camera.svg +0 -0
  108. /package/{assets → src/lib/assets}/images/cast.svg +0 -0
  109. /package/{assets → src/lib/assets}/images/check-circle.svg +0 -0
  110. /package/{assets → src/lib/assets}/images/check-square.svg +0 -0
  111. /package/{assets → src/lib/assets}/images/check.svg +0 -0
  112. /package/{assets → src/lib/assets}/images/chevron-down.svg +0 -0
  113. /package/{assets → src/lib/assets}/images/chevron-left.svg +0 -0
  114. /package/{assets → src/lib/assets}/images/chevron-right.svg +0 -0
  115. /package/{assets → src/lib/assets}/images/chevron-up.svg +0 -0
  116. /package/{assets → src/lib/assets}/images/chevrons-down.svg +0 -0
  117. /package/{assets → src/lib/assets}/images/chevrons-left.svg +0 -0
  118. /package/{assets → src/lib/assets}/images/chevrons-right.svg +0 -0
  119. /package/{assets → src/lib/assets}/images/chevrons-up.svg +0 -0
  120. /package/{assets → src/lib/assets}/images/chrome.svg +0 -0
  121. /package/{assets → src/lib/assets}/images/circle.svg +0 -0
  122. /package/{assets → src/lib/assets}/images/clipboard.svg +0 -0
  123. /package/{assets → src/lib/assets}/images/clock.svg +0 -0
  124. /package/{assets → src/lib/assets}/images/cloud-drizzle.svg +0 -0
  125. /package/{assets → src/lib/assets}/images/cloud-lightning.svg +0 -0
  126. /package/{assets → src/lib/assets}/images/cloud-off.svg +0 -0
  127. /package/{assets → src/lib/assets}/images/cloud-rain.svg +0 -0
  128. /package/{assets → src/lib/assets}/images/cloud-snow.svg +0 -0
  129. /package/{assets → src/lib/assets}/images/cloud.svg +0 -0
  130. /package/{assets → src/lib/assets}/images/code.svg +0 -0
  131. /package/{assets → src/lib/assets}/images/codepen.svg +0 -0
  132. /package/{assets → src/lib/assets}/images/codesandbox.svg +0 -0
  133. /package/{assets → src/lib/assets}/images/coffee.svg +0 -0
  134. /package/{assets → src/lib/assets}/images/columns.svg +0 -0
  135. /package/{assets → src/lib/assets}/images/command.svg +0 -0
  136. /package/{assets → src/lib/assets}/images/compass.svg +0 -0
  137. /package/{assets → src/lib/assets}/images/copy.svg +0 -0
  138. /package/{assets → src/lib/assets}/images/corner-down-left.svg +0 -0
  139. /package/{assets → src/lib/assets}/images/corner-down-right.svg +0 -0
  140. /package/{assets → src/lib/assets}/images/corner-left-down.svg +0 -0
  141. /package/{assets → src/lib/assets}/images/corner-left-up.svg +0 -0
  142. /package/{assets → src/lib/assets}/images/corner-right-down.svg +0 -0
  143. /package/{assets → src/lib/assets}/images/corner-right-up.svg +0 -0
  144. /package/{assets → src/lib/assets}/images/corner-up-left.svg +0 -0
  145. /package/{assets → src/lib/assets}/images/corner-up-right.svg +0 -0
  146. /package/{assets → src/lib/assets}/images/cpu.svg +0 -0
  147. /package/{assets → src/lib/assets}/images/credit-card.svg +0 -0
  148. /package/{assets → src/lib/assets}/images/crop.svg +0 -0
  149. /package/{assets → src/lib/assets}/images/crosshair.svg +0 -0
  150. /package/{assets → src/lib/assets}/images/database.svg +0 -0
  151. /package/{assets → src/lib/assets}/images/delete.svg +0 -0
  152. /package/{assets → src/lib/assets}/images/disc.svg +0 -0
  153. /package/{assets → src/lib/assets}/images/divide-circle.svg +0 -0
  154. /package/{assets → src/lib/assets}/images/divide-square.svg +0 -0
  155. /package/{assets → src/lib/assets}/images/divide.svg +0 -0
  156. /package/{assets → src/lib/assets}/images/dollar-sign.svg +0 -0
  157. /package/{assets → src/lib/assets}/images/download-cloud.svg +0 -0
  158. /package/{assets → src/lib/assets}/images/download.svg +0 -0
  159. /package/{assets → src/lib/assets}/images/dribbble.svg +0 -0
  160. /package/{assets → src/lib/assets}/images/droplet.svg +0 -0
  161. /package/{assets → src/lib/assets}/images/edit-2.svg +0 -0
  162. /package/{assets → src/lib/assets}/images/edit-3.svg +0 -0
  163. /package/{assets → src/lib/assets}/images/edit.svg +0 -0
  164. /package/{assets → src/lib/assets}/images/external-link.svg +0 -0
  165. /package/{assets → src/lib/assets}/images/eye-off.svg +0 -0
  166. /package/{assets → src/lib/assets}/images/eye.svg +0 -0
  167. /package/{assets → src/lib/assets}/images/facebook.svg +0 -0
  168. /package/{assets → src/lib/assets}/images/fast-forward.svg +0 -0
  169. /package/{assets → src/lib/assets}/images/feather.svg +0 -0
  170. /package/{assets → src/lib/assets}/images/figma.svg +0 -0
  171. /package/{assets → src/lib/assets}/images/file-minus.svg +0 -0
  172. /package/{assets → src/lib/assets}/images/file-plus.svg +0 -0
  173. /package/{assets → src/lib/assets}/images/file-text.svg +0 -0
  174. /package/{assets → src/lib/assets}/images/file.svg +0 -0
  175. /package/{assets → src/lib/assets}/images/film.svg +0 -0
  176. /package/{assets → src/lib/assets}/images/filter.svg +0 -0
  177. /package/{assets → src/lib/assets}/images/flag.svg +0 -0
  178. /package/{assets → src/lib/assets}/images/folder-minus.svg +0 -0
  179. /package/{assets → src/lib/assets}/images/folder-plus.svg +0 -0
  180. /package/{assets → src/lib/assets}/images/folder.svg +0 -0
  181. /package/{assets → src/lib/assets}/images/framer.svg +0 -0
  182. /package/{assets → src/lib/assets}/images/frown.svg +0 -0
  183. /package/{assets → src/lib/assets}/images/gift.svg +0 -0
  184. /package/{assets → src/lib/assets}/images/git-branch.svg +0 -0
  185. /package/{assets → src/lib/assets}/images/git-commit.svg +0 -0
  186. /package/{assets → src/lib/assets}/images/git-merge.svg +0 -0
  187. /package/{assets → src/lib/assets}/images/git-pull-request.svg +0 -0
  188. /package/{assets → src/lib/assets}/images/github.svg +0 -0
  189. /package/{assets → src/lib/assets}/images/gitlab.svg +0 -0
  190. /package/{assets → src/lib/assets}/images/globe.svg +0 -0
  191. /package/{assets → src/lib/assets}/images/grid.svg +0 -0
  192. /package/{assets → src/lib/assets}/images/hard-drive.svg +0 -0
  193. /package/{assets → src/lib/assets}/images/hash.svg +0 -0
  194. /package/{assets → src/lib/assets}/images/headphones.svg +0 -0
  195. /package/{assets → src/lib/assets}/images/heart.svg +0 -0
  196. /package/{assets → src/lib/assets}/images/help-circle.svg +0 -0
  197. /package/{assets → src/lib/assets}/images/hexagon.svg +0 -0
  198. /package/{assets → src/lib/assets}/images/home.svg +0 -0
  199. /package/{assets → src/lib/assets}/images/image.svg +0 -0
  200. /package/{assets → src/lib/assets}/images/inbox.svg +0 -0
  201. /package/{assets → src/lib/assets}/images/info.svg +0 -0
  202. /package/{assets → src/lib/assets}/images/instagram.svg +0 -0
  203. /package/{assets → src/lib/assets}/images/italic.svg +0 -0
  204. /package/{assets → src/lib/assets}/images/key.svg +0 -0
  205. /package/{assets → src/lib/assets}/images/layers.svg +0 -0
  206. /package/{assets → src/lib/assets}/images/layout.svg +0 -0
  207. /package/{assets → src/lib/assets}/images/life-buoy.svg +0 -0
  208. /package/{assets → src/lib/assets}/images/link-2.svg +0 -0
  209. /package/{assets → src/lib/assets}/images/link.svg +0 -0
  210. /package/{assets → src/lib/assets}/images/linkedin.svg +0 -0
  211. /package/{assets → src/lib/assets}/images/list.svg +0 -0
  212. /package/{assets → src/lib/assets}/images/loader.svg +0 -0
  213. /package/{assets → src/lib/assets}/images/lock.svg +0 -0
  214. /package/{assets → src/lib/assets}/images/log-in.svg +0 -0
  215. /package/{assets → src/lib/assets}/images/log-out.svg +0 -0
  216. /package/{assets → src/lib/assets}/images/mail.svg +0 -0
  217. /package/{assets → src/lib/assets}/images/map-pin.svg +0 -0
  218. /package/{assets → src/lib/assets}/images/map.svg +0 -0
  219. /package/{assets → src/lib/assets}/images/maximize-2.svg +0 -0
  220. /package/{assets → src/lib/assets}/images/maximize.svg +0 -0
  221. /package/{assets → src/lib/assets}/images/meh.svg +0 -0
  222. /package/{assets → src/lib/assets}/images/menu.svg +0 -0
  223. /package/{assets → src/lib/assets}/images/message-circle.svg +0 -0
  224. /package/{assets → src/lib/assets}/images/message-square.svg +0 -0
  225. /package/{assets → src/lib/assets}/images/mic-off.svg +0 -0
  226. /package/{assets → src/lib/assets}/images/mic.svg +0 -0
  227. /package/{assets → src/lib/assets}/images/minimize-2.svg +0 -0
  228. /package/{assets → src/lib/assets}/images/minimize.svg +0 -0
  229. /package/{assets → src/lib/assets}/images/minus-circle.svg +0 -0
  230. /package/{assets → src/lib/assets}/images/minus-square.svg +0 -0
  231. /package/{assets → src/lib/assets}/images/minus.svg +0 -0
  232. /package/{assets → src/lib/assets}/images/monitor.svg +0 -0
  233. /package/{assets → src/lib/assets}/images/moon.svg +0 -0
  234. /package/{assets → src/lib/assets}/images/more-horizontal.svg +0 -0
  235. /package/{assets → src/lib/assets}/images/more-vertical.svg +0 -0
  236. /package/{assets → src/lib/assets}/images/mouse-pointer.svg +0 -0
  237. /package/{assets → src/lib/assets}/images/move.svg +0 -0
  238. /package/{assets → src/lib/assets}/images/music.svg +0 -0
  239. /package/{assets → src/lib/assets}/images/navigation-2.svg +0 -0
  240. /package/{assets → src/lib/assets}/images/navigation.svg +0 -0
  241. /package/{assets → src/lib/assets}/images/octagon.svg +0 -0
  242. /package/{assets → src/lib/assets}/images/package.svg +0 -0
  243. /package/{assets → src/lib/assets}/images/paperclip.svg +0 -0
  244. /package/{assets → src/lib/assets}/images/pause-circle.svg +0 -0
  245. /package/{assets → src/lib/assets}/images/pause.svg +0 -0
  246. /package/{assets → src/lib/assets}/images/pen-tool.svg +0 -0
  247. /package/{assets → src/lib/assets}/images/percent.svg +0 -0
  248. /package/{assets → src/lib/assets}/images/phone-call.svg +0 -0
  249. /package/{assets → src/lib/assets}/images/phone-forwarded.svg +0 -0
  250. /package/{assets → src/lib/assets}/images/phone-incoming.svg +0 -0
  251. /package/{assets → src/lib/assets}/images/phone-missed.svg +0 -0
  252. /package/{assets → src/lib/assets}/images/phone-off.svg +0 -0
  253. /package/{assets → src/lib/assets}/images/phone-outgoing.svg +0 -0
  254. /package/{assets → src/lib/assets}/images/phone.svg +0 -0
  255. /package/{assets → src/lib/assets}/images/pie-chart.svg +0 -0
  256. /package/{assets → src/lib/assets}/images/play-circle.svg +0 -0
  257. /package/{assets → src/lib/assets}/images/play.svg +0 -0
  258. /package/{assets → src/lib/assets}/images/plus-circle.svg +0 -0
  259. /package/{assets → src/lib/assets}/images/plus-square.svg +0 -0
  260. /package/{assets → src/lib/assets}/images/plus.svg +0 -0
  261. /package/{assets → src/lib/assets}/images/pocket.svg +0 -0
  262. /package/{assets → src/lib/assets}/images/power.svg +0 -0
  263. /package/{assets → src/lib/assets}/images/printer.svg +0 -0
  264. /package/{assets → src/lib/assets}/images/radio.svg +0 -0
  265. /package/{assets → src/lib/assets}/images/refresh-ccw.svg +0 -0
  266. /package/{assets → src/lib/assets}/images/refresh-cw.svg +0 -0
  267. /package/{assets → src/lib/assets}/images/repeat.svg +0 -0
  268. /package/{assets → src/lib/assets}/images/rewind.svg +0 -0
  269. /package/{assets → src/lib/assets}/images/rotate-ccw.svg +0 -0
  270. /package/{assets → src/lib/assets}/images/rotate-cw.svg +0 -0
  271. /package/{assets → src/lib/assets}/images/rss.svg +0 -0
  272. /package/{assets → src/lib/assets}/images/save.svg +0 -0
  273. /package/{assets → src/lib/assets}/images/scissors.svg +0 -0
  274. /package/{assets → src/lib/assets}/images/search.svg +0 -0
  275. /package/{assets → src/lib/assets}/images/send.svg +0 -0
  276. /package/{assets → src/lib/assets}/images/server.svg +0 -0
  277. /package/{assets → src/lib/assets}/images/settings.svg +0 -0
  278. /package/{assets → src/lib/assets}/images/share-2.svg +0 -0
  279. /package/{assets → src/lib/assets}/images/share.svg +0 -0
  280. /package/{assets → src/lib/assets}/images/shield-off.svg +0 -0
  281. /package/{assets → src/lib/assets}/images/shield.svg +0 -0
  282. /package/{assets → src/lib/assets}/images/shopping-bag.svg +0 -0
  283. /package/{assets → src/lib/assets}/images/shopping-cart.svg +0 -0
  284. /package/{assets → src/lib/assets}/images/shuffle.svg +0 -0
  285. /package/{assets → src/lib/assets}/images/sidebar.svg +0 -0
  286. /package/{assets → src/lib/assets}/images/skip-back.svg +0 -0
  287. /package/{assets → src/lib/assets}/images/skip-forward.svg +0 -0
  288. /package/{assets → src/lib/assets}/images/slack.svg +0 -0
  289. /package/{assets → src/lib/assets}/images/slash.svg +0 -0
  290. /package/{assets → src/lib/assets}/images/sliders.svg +0 -0
  291. /package/{assets → src/lib/assets}/images/smartphone.svg +0 -0
  292. /package/{assets → src/lib/assets}/images/smile.svg +0 -0
  293. /package/{assets → src/lib/assets}/images/sort_down.svg +0 -0
  294. /package/{assets → src/lib/assets}/images/sort_up.svg +0 -0
  295. /package/{assets → src/lib/assets}/images/speaker.svg +0 -0
  296. /package/{assets → src/lib/assets}/images/square.svg +0 -0
  297. /package/{assets → src/lib/assets}/images/star.svg +0 -0
  298. /package/{assets → src/lib/assets}/images/stop-circle.svg +0 -0
  299. /package/{assets → src/lib/assets}/images/sun.svg +0 -0
  300. /package/{assets → src/lib/assets}/images/sunrise.svg +0 -0
  301. /package/{assets → src/lib/assets}/images/sunset.svg +0 -0
  302. /package/{assets → src/lib/assets}/images/table.svg +0 -0
  303. /package/{assets → src/lib/assets}/images/tablet.svg +0 -0
  304. /package/{assets → src/lib/assets}/images/tag.svg +0 -0
  305. /package/{assets → src/lib/assets}/images/target.svg +0 -0
  306. /package/{assets → src/lib/assets}/images/terminal.svg +0 -0
  307. /package/{assets → src/lib/assets}/images/thermometer.svg +0 -0
  308. /package/{assets → src/lib/assets}/images/thumbs-down.svg +0 -0
  309. /package/{assets → src/lib/assets}/images/thumbs-up.svg +0 -0
  310. /package/{assets → src/lib/assets}/images/toggle-left.svg +0 -0
  311. /package/{assets → src/lib/assets}/images/toggle-right.svg +0 -0
  312. /package/{assets → src/lib/assets}/images/tool.svg +0 -0
  313. /package/{assets → src/lib/assets}/images/trash-2.svg +0 -0
  314. /package/{assets → src/lib/assets}/images/trash.svg +0 -0
  315. /package/{assets → src/lib/assets}/images/trello.svg +0 -0
  316. /package/{assets → src/lib/assets}/images/trending-down.svg +0 -0
  317. /package/{assets → src/lib/assets}/images/trending-up.svg +0 -0
  318. /package/{assets → src/lib/assets}/images/triangle.svg +0 -0
  319. /package/{assets → src/lib/assets}/images/truck.svg +0 -0
  320. /package/{assets → src/lib/assets}/images/tv.svg +0 -0
  321. /package/{assets → src/lib/assets}/images/twitch.svg +0 -0
  322. /package/{assets → src/lib/assets}/images/twitter.svg +0 -0
  323. /package/{assets → src/lib/assets}/images/type.svg +0 -0
  324. /package/{assets → src/lib/assets}/images/umbrella.svg +0 -0
  325. /package/{assets → src/lib/assets}/images/underline.svg +0 -0
  326. /package/{assets → src/lib/assets}/images/unlock.svg +0 -0
  327. /package/{assets → src/lib/assets}/images/upload-cloud.svg +0 -0
  328. /package/{assets → src/lib/assets}/images/upload.svg +0 -0
  329. /package/{assets → src/lib/assets}/images/user-check.svg +0 -0
  330. /package/{assets → src/lib/assets}/images/user-minus.svg +0 -0
  331. /package/{assets → src/lib/assets}/images/user-plus.svg +0 -0
  332. /package/{assets → src/lib/assets}/images/user-x.svg +0 -0
  333. /package/{assets → src/lib/assets}/images/user.svg +0 -0
  334. /package/{assets → src/lib/assets}/images/users.svg +0 -0
  335. /package/{assets → src/lib/assets}/images/video-off.svg +0 -0
  336. /package/{assets → src/lib/assets}/images/video.svg +0 -0
  337. /package/{assets → src/lib/assets}/images/voicemail.svg +0 -0
  338. /package/{assets → src/lib/assets}/images/volume-1.svg +0 -0
  339. /package/{assets → src/lib/assets}/images/volume-2.svg +0 -0
  340. /package/{assets → src/lib/assets}/images/volume-x.svg +0 -0
  341. /package/{assets → src/lib/assets}/images/volume.svg +0 -0
  342. /package/{assets → src/lib/assets}/images/watch.svg +0 -0
  343. /package/{assets → src/lib/assets}/images/wifi-off.svg +0 -0
  344. /package/{assets → src/lib/assets}/images/wifi.svg +0 -0
  345. /package/{assets → src/lib/assets}/images/wind.svg +0 -0
  346. /package/{assets → src/lib/assets}/images/x-circle.svg +0 -0
  347. /package/{assets → src/lib/assets}/images/x-octagon.svg +0 -0
  348. /package/{assets → src/lib/assets}/images/x-square.svg +0 -0
  349. /package/{assets → src/lib/assets}/images/x.svg +0 -0
  350. /package/{assets → src/lib/assets}/images/youtube.svg +0 -0
  351. /package/{assets → src/lib/assets}/images/zap-off.svg +0 -0
  352. /package/{assets → src/lib/assets}/images/zap.svg +0 -0
  353. /package/{assets → src/lib/assets}/images/zoom-in.svg +0 -0
  354. /package/{assets → src/lib/assets}/images/zoom-out.svg +0 -0
@@ -0,0 +1,606 @@
1
+ import { CommonModule, DatePipe } from '@angular/common';
2
+ import {
3
+ ChangeDetectorRef,
4
+ Component,
5
+ EventEmitter,
6
+ Input,
7
+ OnChanges,
8
+ OnInit,
9
+ Output,
10
+ SimpleChanges,
11
+ } from '@angular/core';
12
+ import { OutsideClickDirective } from '../../directives/outside-click.directive';
13
+ import {
14
+ AbstractControl,
15
+ NG_VALIDATORS,
16
+ NG_VALUE_ACCESSOR,
17
+ ValidationErrors,
18
+ } from '@angular/forms';
19
+ import { AdaptivePositionDirective } from "../../directives/adaptive-position.directive";
20
+
21
+ export interface DateConfig {
22
+ selectionMode: 'single' | 'range';
23
+ enableTime?: boolean;
24
+ }
25
+ export interface IRange {
26
+ value: Date;
27
+ label: string;
28
+ }
29
+
30
+ @Component({
31
+ selector: 'lib-common-calendar',
32
+
33
+ imports: [CommonModule, OutsideClickDirective, AdaptivePositionDirective],
34
+ templateUrl: './common-calendar.component.html',
35
+ styleUrl: './common-calendar.component.scss',
36
+ providers: [
37
+ {
38
+ provide: NG_VALUE_ACCESSOR,
39
+ useExisting: CommonCalendarComponent,
40
+ multi: true,
41
+ },
42
+ DatePipe,
43
+ ],
44
+ })
45
+ export class CommonCalendarComponent implements OnInit, OnChanges {
46
+ @Output() dateTimeSelected = new EventEmitter<any>();
47
+ @Input() dateConfig!: DateConfig;
48
+ @Input() minDate?: string;
49
+ @Input() maxDate?: string;
50
+ @Input() preSelectedValue: any;
51
+ selectedDateTime: any;
52
+ currentDate = new Date();
53
+ currentMonth = this.currentDate.getMonth();
54
+ currentYear = this.currentDate.getFullYear();
55
+ selectedDate: number | null = null;
56
+ selectedTime: string | null = null;
57
+ calendar: number[][] = [];
58
+ timeSlots: IRange[] = [];
59
+ rangeStart: number | null = null;
60
+ rangeEnd: number | null = null;
61
+ selectedMonth: any;
62
+ selectedYear: any;
63
+ control!: AbstractControl<any, any>;
64
+ disableControl: boolean = false;
65
+ date: any = '';
66
+ calendarView: string = 'defaultView';
67
+ yearRange: number[] = [];
68
+ daysInMonth: any[] = [];
69
+ selectedDay: number = 0;
70
+ selectedStartDate: any;
71
+ selectedEndDate: any;
72
+ isOpen: boolean = false;
73
+ showYearSelector = false;
74
+ monthRange: any = {
75
+ '0': 'JAN',
76
+ '01': 'FEB',
77
+ '02': 'MAR',
78
+ '03': 'APR',
79
+ '04': 'MAY',
80
+ '05': 'JUN',
81
+ '06': 'JUL',
82
+ '07': 'AUG',
83
+ '08': 'SEP',
84
+ '09': 'OCT',
85
+ '10': 'NOV',
86
+ '11': 'DEC',
87
+ };
88
+ constructor(
89
+ // @Inject(LOCALE_ID) private locale: string,
90
+ private cd: ChangeDetectorRef,
91
+ private datePipe: DatePipe
92
+ ) {}
93
+ ngOnChanges(_changes: SimpleChanges): void {
94
+ if (!_changes['selectedDateTime']?.currentValue) {
95
+ this.selectedDateTime = [];
96
+ } else {
97
+ this.writeValue(this.control?.value);
98
+ }
99
+ }
100
+ ngOnInit(): void {
101
+ this.generateYearRange();
102
+ // this.generateCalendar();
103
+ this.generateTimeRanges();
104
+ if (this.preSelectedValue) {
105
+ this.initializeCalendar();
106
+ }
107
+ }
108
+
109
+ private onTouchedCallback: () => void = () => {};
110
+ private onChangeCallback: (_: any) => void = () => {};
111
+ writeValue(value: any): void {
112
+ if (value) {
113
+ this.selectedDateTime = value;
114
+ this.onChangeCallback(value);
115
+ this.cd.markForCheck();
116
+ }
117
+ }
118
+
119
+ registerOnChange(fn: any): void {
120
+ this.onChangeCallback = fn;
121
+ }
122
+ registerOnTouched(fn: any): void {
123
+ this.onTouchedCallback = fn;
124
+ }
125
+
126
+ setDisabledState(isDisabled: boolean): void {
127
+ if (this.control) {
128
+ isDisabled ? this.control.disable() : this.control.enable();
129
+ }
130
+ }
131
+ /**
132
+ * @description Validates date time picker component
133
+ * @author Shiva Kant
134
+ * @param control
135
+ * @returns validate
136
+ */
137
+ validate(control: AbstractControl): ValidationErrors | null {
138
+ this.control = control;
139
+ const selected = this.date ? new Date(this.date) : null;
140
+
141
+ // Check required manually
142
+ const isRequired =
143
+ control.validator && control.validator(control)?.['required'];
144
+
145
+ if (
146
+ (isRequired || control.hasError('required')) &&
147
+ (!this.date || !this.selectedDay)
148
+ ) {
149
+ return { required: true };
150
+ } else if (this.minDate && selected && selected < new Date(this.minDate)) {
151
+ return { minDate: true };
152
+ } else if (this.maxDate && selected && selected > new Date(this.maxDate)) {
153
+ return { maxDate: true };
154
+ }
155
+
156
+ return null;
157
+ }
158
+ /**
159
+ * @description method to toggleCalendar
160
+ * @author Shiva Kant
161
+ */
162
+ toggleCalendar(): void {
163
+ this.isOpen = !this.isOpen;
164
+ if (this.date && this.isOpen) {
165
+ this.currentDate = new Date(this.date);
166
+ this.selectedDay = this.currentDate.getDate();
167
+ }
168
+ this.calendarView = 'defaultView';
169
+ this.generateCalendar();
170
+ if (this.isOpen) {
171
+ let ele = document.getElementsByClassName('calendar-footer');
172
+ setTimeout(() => {
173
+ ele[0]?.scrollIntoView();
174
+ });
175
+ }
176
+ }
177
+
178
+ /**
179
+ * @description Closes calendar
180
+ * @author Shiva Kant
181
+ */
182
+ closeCalendar(): void {
183
+ this.isOpen = false;
184
+ this.calendarView = 'defaultView';
185
+ }
186
+ /**
187
+ * @description Method to Gets month year
188
+ * @author Shiva Kant
189
+ * @returns month year
190
+ */
191
+ getMonthYear(): { month: string; year: string } {
192
+ return {
193
+ month: this.currentDate.toLocaleString('default', {
194
+ month: 'long',
195
+ }),
196
+ year: this.currentDate.toLocaleString('default', {
197
+ year: 'numeric',
198
+ }),
199
+ };
200
+ }
201
+
202
+ /**
203
+ * @description Method to Updates current year month
204
+ * @author Shiva Kant
205
+ */
206
+ updateCurrentYearMonth(): void {
207
+ this.currentYear = this.currentDate.getFullYear();
208
+ this.currentMonth = this.currentDate.getMonth();
209
+ }
210
+
211
+ /**
212
+ * @description Method to Selects year
213
+ * @author Shiva Kant
214
+ * @param year
215
+ */
216
+ selectYear(year: number): void {
217
+ this.currentDate.setFullYear(year);
218
+ this.updateCurrentYearMonth();
219
+ this.showYearSelector = false;
220
+ this.calendarView = 'defaultView';
221
+ this.selectedDay = 0;
222
+ this.generateCalendar();
223
+ }
224
+
225
+ /**
226
+ * @description Method to Selects month
227
+ * @author Shiva Kant
228
+ * @param month
229
+ */
230
+ selectMonth(month: any): void {
231
+ this.currentDate.setMonth(month);
232
+ this.updateCurrentYearMonth();
233
+ this.calendarView = 'defaultView';
234
+ this.selectedDay = 0;
235
+ this.generateCalendar();
236
+ }
237
+
238
+ /**
239
+ * @description Method to Previous year range
240
+ * @author Shiva Kant
241
+ */
242
+ previousYearRange(): void {
243
+ this.yearRange = this.yearRange.map((year) => year - 18);
244
+ }
245
+
246
+ /**
247
+ * @description Method to Next year range
248
+ * @author Shiva Kant
249
+ */
250
+ nextYearRange(): void {
251
+ this.yearRange = this.yearRange.map((year) => year + 18);
252
+ }
253
+
254
+ /**
255
+ * @description Method to Toggles year selector
256
+ * @author Shiva Kant
257
+ */
258
+ toggleYearSelector(): void {
259
+ this.showYearSelector = !this.showYearSelector;
260
+ this.generateYearRange();
261
+ }
262
+ /**
263
+ * @description Method to Generates year range
264
+ * @author Shiva Kant
265
+ */
266
+ generateYearRange(): void {
267
+ const currentYear = this.currentDate.getFullYear();
268
+ const startYear = currentYear - (currentYear % 20);
269
+ this.yearRange = Array.from({ length: 18 }, (_, i) => startYear + i);
270
+ }
271
+ /**
272
+ * @description Method to Determines whether date selectable is
273
+ * @author Shiva Kant
274
+ * @param date
275
+ * @returns true if date selectable
276
+ */
277
+ isDateSelectable(date: Date): boolean {
278
+ const min = this.minDate ? new Date(this.minDate) : null;
279
+ const max = this.maxDate ? new Date(this.maxDate) : null;
280
+ if (min && date < min) return false;
281
+ if (max && date > max) return false;
282
+ return true;
283
+ }
284
+ /**
285
+ * @description Method to Determines whether day disabled is
286
+ * @author Shiva Kant
287
+ * @param day
288
+ * @returns true if day disabled
289
+ */
290
+ isDayDisabled(day: number): boolean {
291
+ const date = new Date(
292
+ this.currentDate.getFullYear(),
293
+ this.currentDate.getMonth(),
294
+ day
295
+ );
296
+ return !this.isDateSelectable(date);
297
+ }
298
+ /**
299
+ * @description Method to Generates calendar
300
+ * @author Shiva Kant
301
+ */
302
+ generateCalendar(): void {
303
+ const year = this.currentDate.getFullYear();
304
+ const month = this.currentDate.getMonth();
305
+
306
+ const firstDayOfMonth = new Date(year, month, 1);
307
+ const firstWeekDay = (firstDayOfMonth.getDay() + 6) % 7; // Convert Sunday (0) to 6, Monday is 0
308
+
309
+ const daysInCurrentMonth = new Date(year, month + 1, 0).getDate();
310
+ const daysInPreviousMonth = new Date(year, month, 0).getDate();
311
+
312
+ const totalCells = 42; // 6 rows of 7 days
313
+ const calendarDays: { day: number; date: Date; isCurrentMonth: boolean }[] =
314
+ [];
315
+
316
+ // Fill previous month days
317
+ for (let i = firstWeekDay - 1; i >= 0; i--) {
318
+ const day = daysInPreviousMonth - i;
319
+ const date = new Date(year, month - 1, day);
320
+ calendarDays.push({ day, date, isCurrentMonth: false });
321
+ }
322
+
323
+ // Fill current month days
324
+ for (let day = 1; day <= daysInCurrentMonth; day++) {
325
+ const date = new Date(year, month, day);
326
+ calendarDays.push({ day, date, isCurrentMonth: true });
327
+ }
328
+
329
+ // Fill next month days
330
+ const remaining = totalCells - calendarDays.length;
331
+ for (let day = 1; day <= remaining; day++) {
332
+ const date = new Date(year, month + 1, day);
333
+ calendarDays.push({ day, date, isCurrentMonth: false });
334
+ }
335
+
336
+ this.daysInMonth = calendarDays;
337
+ }
338
+
339
+ /**
340
+ * @description Method to Previous month
341
+ * @author Shiva Kant
342
+ */
343
+ previousMonth(): void {
344
+ this.currentDate.setMonth(this.currentDate.getMonth() - 1);
345
+ this.updateCurrentYearMonth();
346
+ this.selectedDay = 0;
347
+ this.generateCalendar();
348
+ }
349
+
350
+ /**
351
+ * @description Method to Next month
352
+ * @author Shiva Kant
353
+ */
354
+ nextMonth(): void {
355
+ this.currentDate.setMonth(this.currentDate.getMonth() + 1);
356
+ this.updateCurrentYearMonth();
357
+ this.selectedDay = 0;
358
+ this.generateCalendar();
359
+ }
360
+
361
+ /**
362
+ * @description Method to Initializes calendar when preSelectedValue date
363
+ * @author Shiva Kant
364
+ * @returns calendar
365
+ */
366
+ initializeCalendar(): void {
367
+ if (!this.preSelectedValue) return;
368
+
369
+ // Case 1: Single date (string or Date)
370
+ if (
371
+ typeof this.preSelectedValue === 'string' ||
372
+ this.preSelectedValue instanceof Date
373
+ ) {
374
+ const date = new Date(this.preSelectedValue);
375
+ this.selectedDate = date.getDate();
376
+ this.selectedMonth = date.getMonth();
377
+ this.selectedYear = date.getFullYear();
378
+ this.selectedTime = this.formatTime(date);
379
+
380
+ // Update current view to show the month/year
381
+ this.currentDate = new Date(
382
+ this.selectedYear,
383
+ this.selectedMonth,
384
+ this.selectedDate
385
+ );
386
+ this.generateCalendar();
387
+ }
388
+
389
+ // Case 2: Range of dates
390
+ else if (this.preSelectedValue.start && this.preSelectedValue.end) {
391
+ const startDate = new Date(this.preSelectedValue.start);
392
+ const endDate = new Date(this.preSelectedValue.end);
393
+
394
+ // Patch component state
395
+ this.rangeStart = startDate.getDate();
396
+ this.rangeEnd = endDate.getDate();
397
+
398
+ this.selectedStartDate = startDate;
399
+ this.selectedEndDate = endDate;
400
+
401
+ this.selectedMonth = startDate.getMonth();
402
+ this.selectedYear = startDate.getFullYear();
403
+
404
+ // Set the current calendar view to the start month/year
405
+ this.currentDate = new Date(this.selectedYear, this.selectedMonth, 1);
406
+ this.generateCalendar();
407
+
408
+ // Optional: If your calendar requires a single selectedTime for range, you could pick start or end
409
+ this.selectedTime = this.formatTime(startDate);
410
+
411
+ // Emit initial range value
412
+ this.emitDateTime();
413
+ }
414
+ }
415
+
416
+ /**
417
+ * @description Method to Selects date
418
+ * @author Shiva Kant
419
+ * @param date
420
+ */
421
+ selectDate(date: number): void {
422
+ const selectedFullDate = new Date(
423
+ this.currentYear,
424
+ this.currentMonth,
425
+ date
426
+ );
427
+ selectedFullDate.setHours(0, 0, 0, 0);
428
+
429
+ this.selectedMonth = this.currentMonth;
430
+ this.selectedYear = this.currentYear;
431
+
432
+ if (this.dateConfig.selectionMode === 'single') {
433
+ this.selectedDate = date;
434
+ this.rangeStart = null;
435
+ this.rangeEnd = null;
436
+ } else {
437
+ if (!this.rangeStart || this.rangeEnd) {
438
+ this.rangeStart = date;
439
+ this.rangeEnd = null;
440
+ } else {
441
+ this.rangeEnd = date < this.rangeStart ? this.rangeStart : date;
442
+ this.rangeStart = date < this.rangeStart ? date : this.rangeStart;
443
+ }
444
+ }
445
+
446
+ this.emitDateTime();
447
+ }
448
+
449
+ /**
450
+ * @description Method to Selects time
451
+ * @author Shiva Kant
452
+ * @param time
453
+ */
454
+ selectTime(time: string): void {
455
+ this.selectedTime = time;
456
+ this.emitDateTime();
457
+ }
458
+ /**
459
+ * @description Method to Determines whether selected date is
460
+ * @author Shiva Kant
461
+ * @param date
462
+ * @returns
463
+ */
464
+ isSelectedDate(date: number, month: number, year: number): boolean {
465
+ if (this.dateConfig.selectionMode === 'single') {
466
+ // Check if the day, month, and year match
467
+ return (
468
+ this.selectedDate === date &&
469
+ this.selectedMonth === month &&
470
+ this.selectedYear === year
471
+ );
472
+ } else if (this.dateConfig.selectionMode === 'range') {
473
+ // Range selection checks, ensuring both start and end dates are within the same month and year
474
+ return !!(
475
+ (this.rangeStart &&
476
+ this.rangeStart === date &&
477
+ this.selectedMonth === month &&
478
+ this.selectedYear === year) ||
479
+ (this.rangeEnd &&
480
+ this.rangeEnd === date &&
481
+ this.selectedMonth === month &&
482
+ this.selectedYear === year) ||
483
+ (this.rangeStart &&
484
+ this.rangeEnd &&
485
+ date > this.rangeStart &&
486
+ date < this.rangeEnd &&
487
+ this.selectedMonth === month &&
488
+ this.selectedYear === year)
489
+ );
490
+ }
491
+ return false;
492
+ }
493
+
494
+ /**
495
+ * @description Method to Generates time ranges
496
+ * @author Shiva Kant
497
+ */
498
+ generateTimeRanges(): void {
499
+ const startTime = new Date();
500
+ startTime.setHours(0, 0, 0, 0);
501
+ this.timeSlots = Array.from({ length: 48 }, (_, i) => {
502
+ const time = new Date(startTime.getTime() + i * 30 * 60 * 1000);
503
+ return { value: time, label: this.formatTime(time) };
504
+ });
505
+ }
506
+
507
+ /**
508
+ * @description Method to Formats time
509
+ * @author Shiva Kant
510
+ * @param date
511
+ * @returns time
512
+ */
513
+ formatTime(date: Date): string {
514
+ return date.toLocaleTimeString('en-US', {
515
+ hour: '2-digit',
516
+ minute: '2-digit',
517
+ hour12: true,
518
+ });
519
+ }
520
+ /**
521
+ * @description Method to Formats date time
522
+ * @author Shiva Kant
523
+ * @param fullDate
524
+ * @param selectedTime
525
+ * @returns date time
526
+ */
527
+ formatDateTime(fullDate: Date, selectedTime: string | null): string {
528
+ const date = new Date(fullDate);
529
+
530
+ if (!selectedTime) {
531
+ // Only date formatting when time not required
532
+ return this.datePipe.transform(date, 'MM/dd/yyyy')!;
533
+ }
534
+
535
+ const [time, period] = selectedTime.split(' ');
536
+ let [hours, minutes] = time.split(':').map(Number);
537
+
538
+ // Convert 12-hour → 24-hour
539
+ if (period === 'PM' && hours !== 12) hours += 12;
540
+ if (period === 'AM' && hours === 12) hours = 0;
541
+
542
+ date.setHours(hours, minutes, 0, 0);
543
+
544
+ return this.datePipe.transform(date, 'yyyy/MM/dd hh:mm a')!;
545
+ }
546
+
547
+ /**
548
+ * @description Method to Emits date time
549
+ * @author Shiva Kant
550
+ * @returns date time
551
+ */
552
+ emitDateTime(): void {
553
+ if (this.dateConfig.enableTime && !this.selectedTime) {
554
+ return; // wait until user selects time
555
+ }
556
+ if (this.dateConfig.selectionMode === 'single') {
557
+ if (!this.selectedDate) return;
558
+
559
+ const fullDate = new Date(
560
+ this.currentYear,
561
+ this.currentMonth,
562
+ this.selectedDate
563
+ );
564
+
565
+ this.selectedDateTime = this.formatDateTime(
566
+ fullDate || '',
567
+ this.dateConfig.enableTime ? this.selectedTime : null
568
+ );
569
+
570
+ this.writeValue(this.selectedDateTime);
571
+ this.date = this.selectedDate;
572
+ this.dateTimeSelected.emit(this.selectedDateTime);
573
+ this.closeCalendar();
574
+ return;
575
+ }
576
+ if (this.dateConfig.selectionMode === 'range') {
577
+ if (!this.rangeStart || !this.rangeEnd) return;
578
+
579
+ const startDate = new Date(
580
+ this.currentYear,
581
+ this.currentMonth,
582
+ this.rangeStart
583
+ );
584
+ const endDate = new Date(
585
+ this.currentYear,
586
+ this.currentMonth,
587
+ this.rangeEnd
588
+ );
589
+
590
+ const startDateTime = this.formatDateTime(
591
+ startDate,
592
+ this.dateConfig.enableTime ? this.selectedTime : null
593
+ );
594
+ const endDateTime = this.formatDateTime(
595
+ endDate,
596
+ this.dateConfig.enableTime ? this.selectedTime : null
597
+ );
598
+
599
+ const rangeResult = { start: startDateTime, end: endDateTime };
600
+
601
+ this.writeValue(rangeResult);
602
+ this.dateTimeSelected.emit(rangeResult);
603
+ this.closeCalendar();
604
+ }
605
+ }
606
+ }
@@ -0,0 +1,36 @@
1
+ <!-- dropdown -->
2
+ @if(elementType === 'dropdown'){
3
+ <div class="text_filter_section">
4
+ <div class="single_select_dropdown" (click)="toggleDropdown()">
5
+ <div class="left_details">
6
+ <span class="placeholderColor textTruncate">
7
+ {{ selectedLabel }}
8
+ </span>
9
+ </div>
10
+
11
+ <span class="arrow_icon">
12
+ <img
13
+ src="images/chevron-up.svg"
14
+ [ngClass]="{ 'd-none': !showDropdown }"
15
+ />
16
+ <img
17
+ src="images/chevron-down.svg"
18
+ [ngClass]="{ 'd-none': showDropdown }"
19
+ />
20
+ </span>
21
+ </div>
22
+
23
+ @if (showDropdown) {
24
+ <div class="dropdown_list" id="table_scroll">
25
+ <ul>
26
+ @for (option of options; track option.value) {
27
+ <li (click)="selectOption(option)">
28
+ <span class="textTruncate">{{ option.label }}</span>
29
+ </li>
30
+ }
31
+ </ul>
32
+ </div>
33
+ }
34
+ </div>
35
+
36
+ }
@@ -0,0 +1,3 @@
1
+ .d-none {
2
+ display: none;
3
+ }
@@ -0,0 +1,23 @@
1
+ import { ComponentFixture, TestBed } from '@angular/core/testing';
2
+
3
+ import { CommonInputComponent } from './common-input.component';
4
+
5
+ describe('CommonInputComponent', () => {
6
+ let component: CommonInputComponent;
7
+ let fixture: ComponentFixture<CommonInputComponent>;
8
+
9
+ beforeEach(async () => {
10
+ await TestBed.configureTestingModule({
11
+ imports: [CommonInputComponent]
12
+ })
13
+ .compileComponents();
14
+
15
+ fixture = TestBed.createComponent(CommonInputComponent);
16
+ component = fixture.componentInstance;
17
+ fixture.detectChanges();
18
+ });
19
+
20
+ it('should create', () => {
21
+ expect(component).toBeTruthy();
22
+ });
23
+ });