@roadtrip/components 3.17.0 → 3.18.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 (325) hide show
  1. package/dist/cjs/loader.cjs.js +1 -1
  2. package/dist/cjs/road-accordion.cjs.entry.js +1 -1
  3. package/dist/cjs/road-accordion.cjs.entry.js.map +1 -1
  4. package/dist/cjs/road-autocomplete.cjs.entry.js +1 -1
  5. package/dist/cjs/road-autocomplete.cjs.entry.js.map +1 -1
  6. package/dist/cjs/road-badge_14.cjs.entry.js +40 -8
  7. package/dist/cjs/road-badge_14.cjs.entry.js.map +1 -1
  8. package/dist/cjs/road-banner.cjs.entry.js +1 -1
  9. package/dist/cjs/road-banner.cjs.entry.js.map +1 -1
  10. package/dist/cjs/road-button-floating.cjs.entry.js +1 -1
  11. package/dist/cjs/road-button-floating.cjs.entry.js.map +1 -1
  12. package/dist/cjs/road-card.cjs.entry.js +1 -1
  13. package/dist/cjs/road-card.cjs.entry.js.map +1 -1
  14. package/dist/cjs/road-carousel.cjs.entry.js +30 -118
  15. package/dist/cjs/road-carousel.cjs.entry.js.map +1 -1
  16. package/dist/cjs/road-chip.cjs.entry.js +2 -2
  17. package/dist/cjs/road-chip.cjs.entry.js.map +1 -1
  18. package/dist/cjs/road-collapse.cjs.entry.js +1 -1
  19. package/dist/cjs/road-collapse.cjs.entry.js.map +1 -1
  20. package/dist/cjs/road-dialog.cjs.entry.js +2 -2
  21. package/dist/cjs/road-dialog.cjs.entry.js.map +1 -1
  22. package/dist/cjs/road-dropdown.cjs.entry.js +4 -4
  23. package/dist/cjs/road-dropdown.cjs.entry.js.map +1 -1
  24. package/dist/cjs/road-global-navigation.cjs.entry.js +1 -1
  25. package/dist/cjs/road-global-navigation.cjs.entry.js.map +1 -1
  26. package/dist/cjs/road-illustration.cjs.entry.js +1 -1
  27. package/dist/cjs/road-illustration.cjs.entry.js.map +1 -1
  28. package/dist/cjs/road-modal.cjs.entry.js +1 -1
  29. package/dist/cjs/road-modal.cjs.entry.js.map +1 -1
  30. package/dist/cjs/road-navbar-item.cjs.entry.js +1 -1
  31. package/dist/cjs/road-navbar-item.cjs.entry.js.map +1 -1
  32. package/dist/cjs/road-navbar.cjs.entry.js +1 -1
  33. package/dist/cjs/road-navbar.cjs.entry.js.map +1 -1
  34. package/dist/cjs/road-phone-number-input.cjs.entry.js +41 -5
  35. package/dist/cjs/road-phone-number-input.cjs.entry.js.map +1 -1
  36. package/dist/cjs/road-plate-number.cjs.entry.js +2 -2
  37. package/dist/cjs/road-plate-number.cjs.entry.js.map +1 -1
  38. package/dist/cjs/road-profil-dropdown.cjs.entry.js +10 -1
  39. package/dist/cjs/road-profil-dropdown.cjs.entry.js.map +1 -1
  40. package/dist/cjs/road-progress-indicator-vertical.cjs.entry.js +2 -2
  41. package/dist/cjs/road-progress-indicator-vertical.cjs.entry.js.map +1 -1
  42. package/dist/cjs/road-progress-tracker.cjs.entry.js +2 -2
  43. package/dist/cjs/road-progress-tracker.cjs.entry.js.map +1 -1
  44. package/dist/cjs/road-progress.cjs.entry.js +1 -1
  45. package/dist/cjs/road-progress.cjs.entry.js.map +1 -1
  46. package/dist/cjs/road-range.cjs.entry.js +26 -2
  47. package/dist/cjs/road-range.cjs.entry.js.map +1 -1
  48. package/dist/cjs/road-segmented-button.cjs.entry.js +1 -1
  49. package/dist/cjs/road-segmented-button.cjs.entry.js.map +1 -1
  50. package/dist/cjs/road-select-filter.cjs.entry.js +34 -4
  51. package/dist/cjs/road-select-filter.cjs.entry.js.map +1 -1
  52. package/dist/cjs/road-select.cjs.entry.js +1 -1
  53. package/dist/cjs/road-select.cjs.entry.js.map +1 -1
  54. package/dist/cjs/road-textarea.cjs.entry.js +1 -1
  55. package/dist/cjs/road-textarea.cjs.entry.js.map +1 -1
  56. package/dist/cjs/road-tooltip.cjs.entry.js +1 -1
  57. package/dist/cjs/road-tooltip.cjs.entry.js.map +1 -1
  58. package/dist/cjs/roadtrip.cjs.js +1 -1
  59. package/dist/collection/components/accordion/accordion.css +4 -0
  60. package/dist/collection/components/accordion/accordion.stories.js +1 -1
  61. package/dist/collection/components/alert/alert.stories.js +1 -1
  62. package/dist/collection/components/autocomplete/autocomplete.js +1 -1
  63. package/dist/collection/components/autocomplete/autocomplete.js.map +1 -1
  64. package/dist/collection/components/autocomplete/autocomplete.stories.js +2 -2
  65. package/dist/collection/components/avatar/avatar.stories.js +1 -1
  66. package/dist/collection/components/badge/badge.stories.js +2 -2
  67. package/dist/collection/components/banner/banner.js +1 -1
  68. package/dist/collection/components/banner/banner.js.map +1 -1
  69. package/dist/collection/components/button/button.stories.js +6 -6
  70. package/dist/collection/components/button-floating/button-floating.css +0 -4
  71. package/dist/collection/components/button-floating/button-floating.stories.js +2 -2
  72. package/dist/collection/components/card/card.css +4 -0
  73. package/dist/collection/components/card/card.stories.js +4 -4
  74. package/dist/collection/components/carousel/carousel.css +4 -1
  75. package/dist/collection/components/carousel/carousel.js +93 -250
  76. package/dist/collection/components/carousel/carousel.js.map +1 -1
  77. package/dist/collection/components/chip/chip.css +2 -2
  78. package/dist/collection/components/chip/chip.js +1 -1
  79. package/dist/collection/components/chip/chip.js.map +1 -1
  80. package/dist/collection/components/chip/chip.stories.js +26 -1
  81. package/dist/collection/components/collapse/collapse.css +4 -0
  82. package/dist/collection/components/collapse/collapse.stories.js +8 -8
  83. package/dist/collection/components/counter/counter.css +5 -0
  84. package/dist/collection/components/counter/counter.js +19 -1
  85. package/dist/collection/components/counter/counter.js.map +1 -1
  86. package/dist/collection/components/dialog/dialog.js +2 -2
  87. package/dist/collection/components/dialog/dialog.js.map +1 -1
  88. package/dist/collection/components/drawer/drawer.js +1 -1
  89. package/dist/collection/components/drawer/drawer.js.map +1 -1
  90. package/dist/collection/components/drawer/drawer.stories.js +2 -2
  91. package/dist/collection/components/dropdown/dropdown.css +9 -4
  92. package/dist/collection/components/dropdown/dropdown.js +3 -3
  93. package/dist/collection/components/dropdown/dropdown.js.map +1 -1
  94. package/dist/collection/components/dropdown/dropdown.stories.js +4 -4
  95. package/dist/collection/components/global-navigation/global-navigation.js +1 -1
  96. package/dist/collection/components/global-navigation/global-navigation.js.map +1 -1
  97. package/dist/collection/components/global-navigation/global-navigation.stories.js +39 -39
  98. package/dist/collection/components/icon/icon.stories.js +44 -43
  99. package/dist/collection/components/illustration/illustration.js +1 -1
  100. package/dist/collection/components/illustration/illustration.js.map +1 -1
  101. package/dist/collection/components/input/input.css +8 -2
  102. package/dist/collection/components/input/input.js +16 -2
  103. package/dist/collection/components/input/input.js.map +1 -1
  104. package/dist/collection/components/input-group/input-group.js +1 -1
  105. package/dist/collection/components/input-group/input-group.js.map +1 -1
  106. package/dist/collection/components/input-group/input-group.stories.js +4 -4
  107. package/dist/collection/components/item/item.stories.js +9 -9
  108. package/dist/collection/components/list/list.stories.js +8 -8
  109. package/dist/collection/components/modal/modal.js +1 -1
  110. package/dist/collection/components/modal/modal.js.map +1 -1
  111. package/dist/collection/components/navbar/navbar.js +1 -1
  112. package/dist/collection/components/navbar/navbar.js.map +1 -1
  113. package/dist/collection/components/navbar/navbar.stories.js +84 -63
  114. package/dist/collection/components/navbar-item/navbar-item.js +1 -1
  115. package/dist/collection/components/navbar-item/navbar-item.js.map +1 -1
  116. package/dist/collection/components/patterns/link.stories.js +2 -2
  117. package/dist/collection/components/phone-number-input/phone-number-input.css +0 -1
  118. package/dist/collection/components/phone-number-input/phone-number-input.js +40 -4
  119. package/dist/collection/components/phone-number-input/phone-number-input.js.map +1 -1
  120. package/dist/collection/components/plate-number/plate-number.css +1 -1
  121. package/dist/collection/components/plate-number/plate-number.js +1 -1
  122. package/dist/collection/components/plate-number/plate-number.js.map +1 -1
  123. package/dist/collection/components/profil-dropdown/profil-dropdown.css +8 -0
  124. package/dist/collection/components/profil-dropdown/profil-dropdown.js +18 -0
  125. package/dist/collection/components/profil-dropdown/profil-dropdown.js.map +1 -1
  126. package/dist/collection/components/profil-dropdown/profil-dropdown.stories.js +4 -4
  127. package/dist/collection/components/progress/progress.js +1 -1
  128. package/dist/collection/components/progress/progress.js.map +1 -1
  129. package/dist/collection/components/progress-indicator-vertical/progress-indicator-vertical.css +5 -0
  130. package/dist/collection/components/progress-indicator-vertical/progress-indicator-vertical.js +1 -1
  131. package/dist/collection/components/progress-indicator-vertical/progress-indicator-vertical.js.map +1 -1
  132. package/dist/collection/components/progress-indicator-vertical/progress-indicator-vertical.stories.js +20 -20
  133. package/dist/collection/components/progress-tracker/progress-tracker.css +4 -0
  134. package/dist/collection/components/progress-tracker/progress-tracker.js +1 -1
  135. package/dist/collection/components/progress-tracker/progress-tracker.js.map +1 -1
  136. package/dist/collection/components/range/range.css +17 -2
  137. package/dist/collection/components/range/range.js +41 -2
  138. package/dist/collection/components/range/range.js.map +1 -1
  139. package/dist/collection/components/segmented-button/segmented-button.js +1 -1
  140. package/dist/collection/components/segmented-button/segmented-button.js.map +1 -1
  141. package/dist/collection/components/select/select.css +1 -1
  142. package/dist/collection/components/select-filter/select-filter.css +5 -0
  143. package/dist/collection/components/select-filter/select-filter.js +43 -9
  144. package/dist/collection/components/select-filter/select-filter.js.map +1 -1
  145. package/dist/collection/components/select-filter/select-filter.stories.js +8 -8
  146. package/dist/collection/components/tabs/tabs.stories.js +5 -5
  147. package/dist/collection/components/textarea/textarea.css +2 -2
  148. package/dist/collection/components/toolbar/toolbar.css +0 -2
  149. package/dist/collection/components/toolbar/toolbar.stories.js +8 -8
  150. package/dist/collection/components/tooltip/tooltip.js +1 -1
  151. package/dist/collection/components/tooltip/tooltip.js.map +1 -1
  152. package/dist/collection/components/tooltip/tooltip.stories.js +3 -3
  153. package/dist/esm/{index-891decf5.js → index-7a0158a4.js} +2 -2
  154. package/dist/esm/{index-891decf5.js.map → index-7a0158a4.js.map} +1 -1
  155. package/dist/esm/loader.js +1 -1
  156. package/dist/esm/road-accordion.entry.js +2 -2
  157. package/dist/esm/road-accordion.entry.js.map +1 -1
  158. package/dist/esm/road-autocomplete.entry.js +1 -1
  159. package/dist/esm/road-autocomplete.entry.js.map +1 -1
  160. package/dist/esm/road-badge_14.entry.js +41 -9
  161. package/dist/esm/road-badge_14.entry.js.map +1 -1
  162. package/dist/esm/road-banner.entry.js +2 -2
  163. package/dist/esm/road-banner.entry.js.map +1 -1
  164. package/dist/esm/road-button-floating.entry.js +1 -1
  165. package/dist/esm/road-button-floating.entry.js.map +1 -1
  166. package/dist/esm/road-card.entry.js +1 -1
  167. package/dist/esm/road-card.entry.js.map +1 -1
  168. package/dist/esm/road-carousel.entry.js +31 -119
  169. package/dist/esm/road-carousel.entry.js.map +1 -1
  170. package/dist/esm/road-checkbox.entry.js +1 -1
  171. package/dist/esm/road-chip.entry.js +3 -3
  172. package/dist/esm/road-chip.entry.js.map +1 -1
  173. package/dist/esm/road-collapse.entry.js +1 -1
  174. package/dist/esm/road-collapse.entry.js.map +1 -1
  175. package/dist/esm/road-dialog.entry.js +3 -3
  176. package/dist/esm/road-dialog.entry.js.map +1 -1
  177. package/dist/esm/road-dropdown.entry.js +4 -4
  178. package/dist/esm/road-dropdown.entry.js.map +1 -1
  179. package/dist/esm/road-global-navigation.entry.js +1 -1
  180. package/dist/esm/road-global-navigation.entry.js.map +1 -1
  181. package/dist/esm/road-illustration.entry.js +1 -1
  182. package/dist/esm/road-illustration.entry.js.map +1 -1
  183. package/dist/esm/road-modal.entry.js +2 -2
  184. package/dist/esm/road-modal.entry.js.map +1 -1
  185. package/dist/esm/road-navbar-item.entry.js +1 -1
  186. package/dist/esm/road-navbar-item.entry.js.map +1 -1
  187. package/dist/esm/road-navbar.entry.js +1 -1
  188. package/dist/esm/road-navbar.entry.js.map +1 -1
  189. package/dist/esm/road-phone-number-input.entry.js +41 -5
  190. package/dist/esm/road-phone-number-input.entry.js.map +1 -1
  191. package/dist/esm/road-plate-number.entry.js +3 -3
  192. package/dist/esm/road-plate-number.entry.js.map +1 -1
  193. package/dist/esm/road-profil-dropdown.entry.js +11 -2
  194. package/dist/esm/road-profil-dropdown.entry.js.map +1 -1
  195. package/dist/esm/road-progress-indicator-vertical.entry.js +2 -2
  196. package/dist/esm/road-progress-indicator-vertical.entry.js.map +1 -1
  197. package/dist/esm/road-progress-tracker.entry.js +2 -2
  198. package/dist/esm/road-progress-tracker.entry.js.map +1 -1
  199. package/dist/esm/road-progress.entry.js +1 -1
  200. package/dist/esm/road-progress.entry.js.map +1 -1
  201. package/dist/esm/road-range.entry.js +28 -4
  202. package/dist/esm/road-range.entry.js.map +1 -1
  203. package/dist/esm/road-rating.entry.js +1 -1
  204. package/dist/esm/road-segmented-button.entry.js +1 -1
  205. package/dist/esm/road-segmented-button.entry.js.map +1 -1
  206. package/dist/esm/road-select-filter.entry.js +34 -4
  207. package/dist/esm/road-select-filter.entry.js.map +1 -1
  208. package/dist/esm/road-select.entry.js +1 -1
  209. package/dist/esm/road-select.entry.js.map +1 -1
  210. package/dist/esm/road-textarea.entry.js +1 -1
  211. package/dist/esm/road-textarea.entry.js.map +1 -1
  212. package/dist/esm/road-toast.entry.js +1 -1
  213. package/dist/esm/road-tooltip.entry.js +1 -1
  214. package/dist/esm/road-tooltip.entry.js.map +1 -1
  215. package/dist/esm/roadtrip.js +1 -1
  216. package/dist/html.html-data.json +3 -3
  217. package/dist/roadtrip/p-054acf61.entry.js +2 -0
  218. package/dist/roadtrip/p-054acf61.entry.js.map +1 -0
  219. package/dist/roadtrip/{p-ea28a425.entry.js → p-08b0be1b.entry.js} +2 -2
  220. package/dist/roadtrip/p-08b0be1b.entry.js.map +1 -0
  221. package/dist/roadtrip/{p-1a761fc0.entry.js → p-0fd454dc.entry.js} +2 -2
  222. package/dist/roadtrip/p-0fd454dc.entry.js.map +1 -0
  223. package/dist/roadtrip/{p-60e25858.entry.js → p-14ecc91e.entry.js} +2 -2
  224. package/dist/roadtrip/{p-60e25858.entry.js.map → p-14ecc91e.entry.js.map} +1 -1
  225. package/dist/roadtrip/{p-82919e58.entry.js → p-16c934bc.entry.js} +2 -2
  226. package/dist/roadtrip/p-17ae87b0.entry.js +2 -0
  227. package/dist/roadtrip/p-17ae87b0.entry.js.map +1 -0
  228. package/dist/roadtrip/{p-6e3e0b40.entry.js → p-18967429.entry.js} +2 -2
  229. package/dist/roadtrip/{p-6e3e0b40.entry.js.map → p-18967429.entry.js.map} +1 -1
  230. package/dist/roadtrip/p-27d2770a.entry.js +2 -0
  231. package/dist/roadtrip/p-27d2770a.entry.js.map +1 -0
  232. package/dist/roadtrip/{p-4f47f4f7.entry.js → p-31cf9b61.entry.js} +2 -2
  233. package/dist/roadtrip/p-31cf9b61.entry.js.map +1 -0
  234. package/dist/roadtrip/{p-dcb280e3.entry.js → p-3bce3bdc.entry.js} +2 -2
  235. package/dist/roadtrip/p-3bce3bdc.entry.js.map +1 -0
  236. package/dist/roadtrip/p-4a2f2612.entry.js +2 -0
  237. package/dist/roadtrip/p-4a2f2612.entry.js.map +1 -0
  238. package/dist/roadtrip/p-5203acea.entry.js +2 -0
  239. package/dist/roadtrip/p-5203acea.entry.js.map +1 -0
  240. package/dist/roadtrip/{p-a73ef7de.entry.js → p-61d87e64.entry.js} +2 -2
  241. package/dist/roadtrip/{p-a73ef7de.entry.js.map → p-61d87e64.entry.js.map} +1 -1
  242. package/dist/roadtrip/p-6ad5091d.entry.js +2 -0
  243. package/dist/roadtrip/p-6ad5091d.entry.js.map +1 -0
  244. package/dist/roadtrip/{p-2c132382.entry.js → p-72b3b34a.entry.js} +2 -2
  245. package/dist/roadtrip/p-72b3b34a.entry.js.map +1 -0
  246. package/dist/roadtrip/p-7a14e5b7.entry.js +2 -0
  247. package/dist/roadtrip/p-7a14e5b7.entry.js.map +1 -0
  248. package/dist/roadtrip/{p-c3c92152.entry.js → p-7f1d9286.entry.js} +2 -2
  249. package/dist/roadtrip/p-7f1d9286.entry.js.map +1 -0
  250. package/dist/roadtrip/p-9a929988.entry.js +2 -0
  251. package/dist/roadtrip/p-9a929988.entry.js.map +1 -0
  252. package/dist/roadtrip/{p-336aa5f6.entry.js → p-9ff79904.entry.js} +2 -2
  253. package/dist/roadtrip/{p-336aa5f6.entry.js.map → p-9ff79904.entry.js.map} +1 -1
  254. package/dist/roadtrip/p-a5eee655.entry.js +2 -0
  255. package/dist/roadtrip/{p-40daa53b.entry.js.map → p-a5eee655.entry.js.map} +1 -1
  256. package/dist/roadtrip/{p-73fe2357.js → p-ac7a8bca.js} +2 -2
  257. package/dist/roadtrip/{p-6177bb46.entry.js → p-b510e552.entry.js} +2 -2
  258. package/dist/roadtrip/{p-6177bb46.entry.js.map → p-b510e552.entry.js.map} +1 -1
  259. package/dist/roadtrip/{p-46cccafc.entry.js → p-c096723c.entry.js} +2 -2
  260. package/dist/roadtrip/{p-46cccafc.entry.js.map → p-c096723c.entry.js.map} +1 -1
  261. package/dist/roadtrip/p-c7866ae4.entry.js +2 -0
  262. package/dist/roadtrip/p-c7866ae4.entry.js.map +1 -0
  263. package/dist/roadtrip/p-cdefa79c.entry.js +2 -0
  264. package/dist/roadtrip/p-cdefa79c.entry.js.map +1 -0
  265. package/dist/roadtrip/{p-cbc00bfb.entry.js → p-cfc0a3a7.entry.js} +2 -2
  266. package/dist/roadtrip/p-dcbaee2f.entry.js +2 -0
  267. package/dist/roadtrip/p-dcbaee2f.entry.js.map +1 -0
  268. package/dist/roadtrip/{p-7048f786.entry.js → p-dcbb0d20.entry.js} +2 -2
  269. package/dist/roadtrip/p-dcbb0d20.entry.js.map +1 -0
  270. package/dist/roadtrip/{p-414a2791.entry.js → p-e8c9c816.entry.js} +2 -2
  271. package/dist/roadtrip/{p-f5cce766.entry.js → p-ebd19369.entry.js} +2 -2
  272. package/dist/roadtrip/{p-f5cce766.entry.js.map → p-ebd19369.entry.js.map} +1 -1
  273. package/dist/roadtrip/p-f7b4f1fa.entry.js +2 -0
  274. package/dist/roadtrip/p-f7b4f1fa.entry.js.map +1 -0
  275. package/dist/roadtrip/p-f90af0e1.entry.js +2 -0
  276. package/dist/roadtrip/p-f90af0e1.entry.js.map +1 -0
  277. package/dist/roadtrip/roadtrip.esm.js +1 -1
  278. package/dist/roadtrip/roadtrip.esm.js.map +1 -1
  279. package/dist/types/components/carousel/carousel.d.ts +1 -131
  280. package/dist/types/components/counter/counter.d.ts +1 -0
  281. package/dist/types/components/phone-number-input/phone-number-input.d.ts +1 -0
  282. package/dist/types/components/profil-dropdown/profil-dropdown.d.ts +2 -0
  283. package/dist/types/components/range/range.d.ts +3 -0
  284. package/dist/types/components/select-filter/select-filter.d.ts +16 -4
  285. package/dist/types/components.d.ts +4 -128
  286. package/hydrate/index.js +216 -175
  287. package/package.json +1 -1
  288. package/dist/roadtrip/p-1a761fc0.entry.js.map +0 -1
  289. package/dist/roadtrip/p-2b5974fc.entry.js +0 -2
  290. package/dist/roadtrip/p-2b5974fc.entry.js.map +0 -1
  291. package/dist/roadtrip/p-2c132382.entry.js.map +0 -1
  292. package/dist/roadtrip/p-2c8a6854.entry.js +0 -2
  293. package/dist/roadtrip/p-2c8a6854.entry.js.map +0 -1
  294. package/dist/roadtrip/p-2e25c08d.entry.js +0 -2
  295. package/dist/roadtrip/p-2e25c08d.entry.js.map +0 -1
  296. package/dist/roadtrip/p-33002e9d.entry.js +0 -2
  297. package/dist/roadtrip/p-33002e9d.entry.js.map +0 -1
  298. package/dist/roadtrip/p-372fcb4d.entry.js +0 -2
  299. package/dist/roadtrip/p-372fcb4d.entry.js.map +0 -1
  300. package/dist/roadtrip/p-40daa53b.entry.js +0 -2
  301. package/dist/roadtrip/p-4f47f4f7.entry.js.map +0 -1
  302. package/dist/roadtrip/p-5053b01a.entry.js +0 -2
  303. package/dist/roadtrip/p-5053b01a.entry.js.map +0 -1
  304. package/dist/roadtrip/p-7048f786.entry.js.map +0 -1
  305. package/dist/roadtrip/p-9bef58e1.entry.js +0 -2
  306. package/dist/roadtrip/p-9bef58e1.entry.js.map +0 -1
  307. package/dist/roadtrip/p-a44a569a.entry.js +0 -2
  308. package/dist/roadtrip/p-a44a569a.entry.js.map +0 -1
  309. package/dist/roadtrip/p-acbc0a14.entry.js +0 -2
  310. package/dist/roadtrip/p-acbc0a14.entry.js.map +0 -1
  311. package/dist/roadtrip/p-b2e7bfcb.entry.js +0 -2
  312. package/dist/roadtrip/p-b2e7bfcb.entry.js.map +0 -1
  313. package/dist/roadtrip/p-c3c92152.entry.js.map +0 -1
  314. package/dist/roadtrip/p-dcb280e3.entry.js.map +0 -1
  315. package/dist/roadtrip/p-e2149bdf.entry.js +0 -2
  316. package/dist/roadtrip/p-e2149bdf.entry.js.map +0 -1
  317. package/dist/roadtrip/p-ea28a425.entry.js.map +0 -1
  318. package/dist/roadtrip/p-ee7aaee5.entry.js +0 -2
  319. package/dist/roadtrip/p-ee7aaee5.entry.js.map +0 -1
  320. package/dist/roadtrip/p-faba450c.entry.js +0 -2
  321. package/dist/roadtrip/p-faba450c.entry.js.map +0 -1
  322. /package/dist/roadtrip/{p-82919e58.entry.js.map → p-16c934bc.entry.js.map} +0 -0
  323. /package/dist/roadtrip/{p-73fe2357.js.map → p-ac7a8bca.js.map} +0 -0
  324. /package/dist/roadtrip/{p-cbc00bfb.entry.js.map → p-cfc0a3a7.entry.js.map} +0 -0
  325. /package/dist/roadtrip/{p-414a2791.entry.js.map → p-e8c9c816.entry.js.map} +0 -0
@@ -36,16 +36,16 @@ export default {
36
36
  },
37
37
  args: {
38
38
  ' ': `
39
- <road-profil-dropdown is-open="false" class="m-24 d-none d-xl-block">
39
+ <road-profil-dropdown is-open="false" class="m-24 d-none d-xl-block" role="menuitem">
40
40
  <road-list slot="list">
41
- <road-item button="" style="--border-radius: 0; --min-height: 2.5rem; --inner-padding: 0;">
42
- <road-icon slot="start" name="edit-outline" size="md"></road-icon>
41
+ <road-item button="" style="--border-radius: 0; --min-height: 2.5rem; --inner-padding: 0;" class="border-0">
42
+ <road-icon slot="start" name="edit-outline" size="md" aria-hidden="true"></road-icon>
43
43
  <road-label style="font-size: 0.75rem">
44
44
  Edit profile
45
45
  </road-label>
46
46
  </road-item>
47
- <road-item button="" style="--border-radius: 0; --min-height: 2.5rem; --inner-padding: 0;">
48
- <road-icon slot="start" name="log-out-outline" size="md"></road-icon>
47
+ <road-item button="" style="--border-radius: 0; --min-height: 2.5rem; --inner-padding: 0;" class="border-0">
48
+ <road-icon slot="start" name="log-out-outline" size="md" aria-hidden="true"></road-icon>
49
49
  <road-label style="font-size: 0.75rem">
50
50
  Log out
51
51
  </road-label>
@@ -57,62 +57,62 @@ export default {
57
57
  <road-label slot="email">email</road-label>
58
58
  </road-profil-dropdown>
59
59
 
60
- <road-navbar-item tab="tab-home">
60
+ <road-navbar-item tab="tab-home" aria-label="Home" role="menuitem">
61
61
  <road-tooltip content="Home" position="right" trigger="hover" contentalign="center">
62
- <road-icon name="navigation-home-outline"></road-icon>
62
+ <road-icon name="navigation-home-outline" aria-hidden="true" aria-hidden="true"></road-icon>
63
63
  <road-label class="font-weight-bold">Home</road-label>
64
64
  </road-tooltip>
65
65
  </road-navbar-item>
66
66
 
67
- <road-navbar-item tab="tab-search">
67
+ <road-navbar-item tab="tab-search" aria-label="Search" role="menuitem">
68
68
  <road-tooltip content="Search" position="right" trigger="hover" contentalign="center">
69
- <road-icon name="search"></road-icon>
69
+ <road-icon name="search" aria-hidden="true" aria-hidden="true"></road-icon>
70
70
  <road-label class="font-weight-bold">Search</road-label>
71
71
  </road-tooltip>
72
72
  </road-navbar-item>
73
73
 
74
- <road-navbar-item tab="tab-catalog">
74
+ <road-navbar-item tab="tab-print" role="menuitem">
75
75
  <road-tooltip content="Print" position="right" trigger="hover" contentalign="center">
76
- <road-icon name="print-outline"></road-icon>
76
+ <road-icon name="print-outline" aria-hidden="true" aria-hidden="true"></road-icon>
77
77
  <road-label class="font-weight-bold">Print</road-label>
78
78
  </road-tooltip>
79
79
  </road-navbar-item>
80
80
 
81
- <road-navbar-item tab="tab-notification" class="d-none d-xl-flex">
81
+ <road-navbar-item tab="tab-notification" class="d-none d-xl-flex" role="menuitem">
82
82
  <road-tooltip content="Notifications" position="right" trigger="hover" contentalign="center">
83
- <road-icon name="alert-notification-outline"></road-icon>
83
+ <road-icon name="alert-notification-outline" aria-hidden="true" aria-hidden="true"></road-icon>
84
84
  <road-label class="font-weight-bold">Notifications</road-label>
85
85
  </road-tooltip>
86
86
  </road-navbar-item>
87
87
 
88
- <road-navbar-item tab="tab-scan" class="d-none d-xl-flex">
88
+ <road-navbar-item tab="tab-scan" class="d-none d-xl-flex" aria-label="Scan" role="menuitem">
89
89
  <road-tooltip content="Scan" position="right" trigger="hover" contentalign="center">
90
- <road-icon name="scan"></road-icon>
90
+ <road-icon name="scan" aria-hidden="true" aria-hidden="true"></road-icon>
91
91
  <road-label class="font-weight-bold">Scan</road-label>
92
92
  </road-tooltip>
93
93
  </road-navbar-item>
94
94
 
95
- <road-navbar-item tab="tab-catalogue" class="d-none d-xl-flex">
95
+ <road-navbar-item tab="tab-catalogue" class="d-none d-xl-flex" role="menuitem">
96
96
  <road-tooltip content="Catalog" position="right" trigger="hover" contentalign="center">
97
- <road-icon name="file-catalog"></road-icon>
97
+ <road-icon name="file-catalog" aria-hidden="true" aria-hidden="true"></road-icon>
98
98
  <road-label class="font-weight-bold">Catalogue</road-label>
99
99
  </road-tootltip>
100
100
  </road-navbar-item>
101
101
 
102
- <road-navbar-item tab="tab-diag" class="d-none d-xl-flex">
102
+ <road-navbar-item tab="tab-diag" class="d-none d-xl-flex" role="menuitem">
103
103
  <road-tooltip content="Diagnostic" position="right" trigger="hover" contentalign="center">
104
- <road-icon name="Diagnostic"></road-icon>
104
+ <road-icon name="Diagnostic" aria-hidden="true" aria-hidden="true"></road-icon>
105
105
  <road-label class="font-weight-bold">Diagnostic</road-label>
106
106
  </road-tooltip>
107
107
  </road-navbar-item>
108
108
 
109
- <road-navbar-item tab="tab-menu" class="d-block d-xl-none tab-menu">
110
- <road-icon name="navigation-menu"></road-icon>
109
+ <road-navbar-item tab="tab-menu" class="d-block d-xl-none tab-menu" role="menuitem">
110
+ <road-icon name="navigation-menu" aria-hidden="true"></road-icon>
111
111
  <road-label>Menu</road-label>
112
112
  </road-navbar-item>
113
113
 
114
- <road-drawer is-open="false" position="right" drawer-width="480" drawer-title="Menu" class="d-xl-none drawer-menu">
115
- <road-item class="mb-16 text-left bg-light profil">
114
+ <road-drawer is-open="false" position="right" drawer-width="480" drawer-title="Menu" class="d-xl-none drawer-menu" tabindex="0" role="menuitem">
115
+ <road-item class="mb-16 text-left bg-light profil" tabindex="0" button="true">
116
116
  <road-avatar slot="start" class="mr-16">
117
117
  <road-img src="https://images.unsplash.com/photo-1527980965255-d3b416303d12?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=800&q=80" alt="avatar"></road-img>
118
118
  </road-avatar>
@@ -121,26 +121,26 @@ export default {
121
121
  <p class="text-medium text-truncate m-0">Email</p>
122
122
  </road-label>
123
123
 
124
- <road-icon slot="end" name="edit-outline" size="sm" class="mr-8"></road-icon>
124
+ <road-icon slot="end" name="edit-outline" size="sm" class="mr-8" aria-hidden="true"></road-icon>
125
125
  </road-item>
126
126
 
127
- <road-item class="bg-white">
128
- <road-icon name="scan"></road-icon>
127
+ <road-item class="bg-white border-0" button="true">
128
+ <road-icon name="scan" aria-hidden="true"></road-icon>
129
129
  Scan
130
130
  </road-item>
131
131
 
132
- <road-item class="bg-white">
133
- <road-icon name="file-catalog"></road-icon>
132
+ <road-item class="bg-white border-0" button="true">
133
+ <road-icon name="file-catalog" aria-hidden="true"></road-icon>
134
134
  Catalogue
135
135
  </road-item>
136
136
 
137
- <road-item class="bg-white">
138
- <road-icon name="Diagnostic"></road-icon>
137
+ <road-item class="bg-white border-0" button="true">
138
+ <road-icon name="Diagnostic" aria-hidden="true"></road-icon>
139
139
  Diagnostic
140
140
  </road-item>
141
141
 
142
- <road-item class="bg-white border-top ">
143
- <road-icon name="log-out"></road-icon>
142
+ <road-item class="bg-white border-top border-0" button="true">
143
+ <road-icon name="log-out" aria-hidden="true"></road-icon>
144
144
  Log out
145
145
  </road-item>
146
146
 
@@ -162,13 +162,34 @@ export default {
162
162
  </road-drawer>
163
163
 
164
164
  <script>
165
- document.querySelector('.tab-menu').addEventListener('click', () => {
166
- document.querySelector('.drawer-menu').setAttribute('is-open', 'true');
167
- });
168
-
169
- document.querySelector('.profil').addEventListener('click', () => {
170
- document.querySelector('.drawer-menu2').setAttribute('is-open', 'true');
171
- });
165
+ // Fonction pour gérer l'activation de la touche "Enter" ou "Space"
166
+ function handleKeydown(event, element) {
167
+ if (event.key === 'Enter' || event.key === ' ') {
168
+ event.preventDefault();
169
+ element.setAttribute('is-open', 'true');
170
+ }
171
+ }
172
+
173
+ // Gestionnaire de clic et clavier pour le menu principal
174
+ const tabMenu = document.querySelector('.tab-menu');
175
+ tabMenu.setAttribute('tabindex', '0'); // Rendre focusable
176
+ tabMenu.addEventListener('click', () => {
177
+ document.querySelector('.drawer-menu').setAttribute('is-open', 'true');
178
+ });
179
+ tabMenu.addEventListener('keydown', (event) => {
180
+ handleKeydown(event, document.querySelector('.drawer-menu'));
181
+ });
182
+
183
+ // Gestionnaire de clic et clavier pour le menu du profil
184
+ const profil = document.querySelector('.profil');
185
+ profil.setAttribute('tabindex', '0'); // Rendre focusable
186
+ profil.addEventListener('click', () => {
187
+ document.querySelector('.drawer-menu2').setAttribute('is-open', 'true');
188
+ });
189
+ profil.addEventListener('keydown', (event) => {
190
+ handleKeydown(event, document.querySelector('.drawer-menu2'));
191
+ });
192
+
172
193
 
173
194
  </script>`,
174
195
  },
@@ -188,13 +209,13 @@ Selected.args = {
188
209
  <road-profil-dropdown is-open="false" class="m-24 d-none d-xl-block">
189
210
  <road-list slot="list">
190
211
  <road-item button="" style="--border-radius: 0; --min-height: 2.5rem; --inner-padding: 0;">
191
- <road-icon slot="start" name="edit-outline" size="md"></road-icon>
212
+ <road-icon slot="start" name="edit-outline" size="md" aria-hidden="true"></road-icon>
192
213
  <road-label style="font-size: 0.75rem">
193
214
  Edit profile
194
215
  </road-label>
195
216
  </road-item>
196
217
  <road-item button="" style="--border-radius: 0; --min-height: 2.5rem; --inner-padding: 0;">
197
- <road-icon slot="start" name="log-out-outline" size="md"></road-icon>
218
+ <road-icon slot="start" name="log-out-outline" size="md" aria-hidden="true"></road-icon>
198
219
  <road-label style="font-size: 0.75rem">
199
220
  Log out
200
221
  </road-label>
@@ -204,37 +225,37 @@ Selected.args = {
204
225
  <road-img slot="avatarItem" src="https://images.unsplash.com/photo-1527980965255-d3b416303d12?ixlib=rb-1.2.1&amp;ixid=eyJhcHBfaWQiOjEyMDd9&amp;auto=format&amp;fit=crop&amp;w=800&amp;q=80" alt="avatar" title="Person name"></road-img>
205
226
  </road-profil-dropdown>
206
227
 
207
- <road-navbar-item tab="tab-home" selected="true">
228
+ <road-navbar-item tab="tab-home" selected="true" aria-label="Home" role="menuitem">
208
229
  <road-tooltip content="Home" position="right" trigger="hover" contentalign="center">
209
- <road-icon name="navigation-home-outline"></road-icon>
230
+ <road-icon name="navigation-home-outline" aria-hidden="true"></road-icon>
210
231
  <road-label class="font-weight-bold">Home</road-label>
211
232
  </road-tooltip>
212
233
  </road-navbar-item>
213
234
 
214
- <road-navbar-item tab="tab-search">
235
+ <road-navbar-item tab="tab-search" aria-label="Search" role="menuitem">
215
236
  <road-tooltip content="Search" position="right" trigger="hover" contentalign="center">
216
- <road-icon name="search"></road-icon>
237
+ <road-icon name="search" aria-hidden="true"></road-icon>
217
238
  <road-label class="font-weight-bold">Search</road-label>
218
239
  </road-tooltip>
219
240
  </road-navbar-item>
220
241
 
221
- <road-navbar-item tab="tab-catalog">
242
+ <road-navbar-item tab="tab-print" role="menuitem">
222
243
  <road-tooltip content="Print" position="right" trigger="hover" contentalign="center">
223
- <road-icon name="print-outline"></road-icon>
244
+ <road-icon name="print-outline" aria-hidden="true"></road-icon>
224
245
  <road-label class="font-weight-bold">Print</road-label>
225
246
  </road-tooltip>
226
247
  </road-navbar-item>
227
248
 
228
- <road-navbar-item tab="tab-catalogue" class="d-none d-xl-flex">
249
+ <road-navbar-item tab="tab-catalogue" class="d-none d-xl-flex" role="menuitem">
229
250
  <road-tooltip content="Catalogue" position="right" trigger="hover" contentalign="center">
230
- <road-icon name="file-catalog"></road-icon>
251
+ <road-icon name="file-catalog" aria-hidden="true"></road-icon>
231
252
  <road-label class="font-weight-bold">Catalogue</road-label>
232
253
  </road-tooltip>
233
254
  </road-navbar-item>
234
255
 
235
- <road-navbar-item tab="tab-scan" class="d-none d-xl-flex">
256
+ <road-navbar-item tab="tab-scan" class="d-none d-xl-flex" aria-label="Scan" role="menuitem">
236
257
  <road-tooltip content="Scan" position="right" trigger="hover" contentalign="center">
237
- <road-icon name="scan"></road-icon>
258
+ <road-icon name="scan" aria-hidden="true"></road-icon>
238
259
  <road-label class="font-weight-bold">Scan</road-label>
239
260
  </road-tooltip>
240
261
  </road-navbar-item>`,
@@ -246,13 +267,13 @@ withNotifications.args = {
246
267
  <road-profil-dropdown is-open="false" class="m-24 d-none d-xl-block">
247
268
  <road-list slot="list">
248
269
  <road-item button="" style="--border-radius: 0; --min-height: 2.5rem; --inner-padding: 0;">
249
- <road-icon slot="start" name="edit-outline" size="md"></road-icon>
270
+ <road-icon slot="start" name="edit-outline" size="md" aria-hidden="true"></road-icon>
250
271
  <road-label style="font-size: 0.75rem">
251
272
  Edit profile
252
273
  </road-label>
253
274
  </road-item>
254
275
  <road-item button="" style="--border-radius: 0; --min-height: 2.5rem; --inner-padding: 0;">
255
- <road-icon slot="start" name="log-out-outline" size="md"></road-icon>
276
+ <road-icon slot="start" name="log-out-outline" size="md" aria-hidden="true"></road-icon>
256
277
  <road-label style="font-size: 0.75rem">
257
278
  Log out
258
279
  </road-label>
@@ -262,38 +283,38 @@ withNotifications.args = {
262
283
  <road-img slot="avatarItem" src="https://images.unsplash.com/photo-1527980965255-d3b416303d12?ixlib=rb-1.2.1&amp;ixid=eyJhcHBfaWQiOjEyMDd9&amp;auto=format&amp;fit=crop&amp;w=800&amp;q=80" alt="avatar" title="Person name"></road-img>
263
284
  </road-profil-dropdown>
264
285
 
265
- <road-navbar-item tab="tab-home" selected="true">
286
+ <road-navbar-item tab="tab-home" selected="true" aria-label="Home" role="menuitem">
266
287
  <road-tooltip content="Home" position="right" trigger="hover" contentalign="center">
267
- <road-icon name="navigation-home-outline"></road-icon>
288
+ <road-icon name="navigation-home-outline" aria-hidden="true"></road-icon>
268
289
  <road-label class="font-weight-bold" style="font-size:0.75rem;">Home</road-label>
269
290
  </road-tooltip>
270
291
  </road-navbar-item>
271
292
 
272
- <road-navbar-item tab="tab-search">
293
+ <road-navbar-item tab="tab-search" aria-label="Search" role="menuitem">
273
294
  <road-tooltip content="Search" position="right" trigger="hover" contentalign="center">
274
- <road-icon name="search"></road-icon>
295
+ <road-icon name="search" aria-hidden="true"></road-icon>
275
296
  <road-label class="font-weight-bold" style="font-size:0.75rem;">Search</road-label>
276
297
  </road-tooltip>
277
298
  </road-navbar-item>
278
299
 
279
- <road-navbar-item tab="tab-catalog">
300
+ <road-navbar-item tab="tab-catalog" aria-label="Catalog" role="menuitem">
280
301
  <road-tooltip content="Scan" position="right" trigger="hover" contentalign="center">
281
- <road-icon name="print-outline"></road-icon>
302
+ <road-icon name="print-outline" aria-hidden="true"></road-icon>
282
303
  <road-label class="font-weight-bold" style="font-size:0.75rem;">Scan</road-label>
283
304
  </road-tooltip>
284
305
  <road-badge>3</road-badge>
285
306
  </road-navbar-item>
286
307
 
287
- <road-navbar-item tab="tab-catalogue" class="d-none d-xl-flex">
308
+ <road-navbar-item tab="tab-catalogue" class="d-none d-xl-flex" aria-label="Catalog" role="menuitem">
288
309
  <road-tooltip content="Catalog" position="right" trigger="hover" contentalign="center">
289
- <road-icon name="file-catalog"></road-icon>
310
+ <road-icon name="file-catalog" aria-hidden="true"></road-icon>
290
311
  <road-label class="font-weight-bold" style="font-size:0.75rem;">Catalog</road-label>
291
312
  </road-tooltip>
292
313
  </road-navbar-item>
293
314
 
294
- <road-navbar-item tab="tab-scan" class="d-none d-xl-flex">
315
+ <road-navbar-item tab="tab-scan" class="d-none d-xl-flex" aria-label="Scan" role="menuitem">
295
316
  <road-tooltip content="Scan" position="right" trigger="hover" contentalign="center">
296
- <road-icon name="scan"></road-icon>
317
+ <road-icon name="scan" aria-hidden="true"></road-icon>
297
318
  <road-label class="font-weight-bold" style="font-size:0.75rem;">Scan</road-label>
298
319
  </road-tooltip>
299
320
  </road-navbar-item>`,
@@ -52,7 +52,7 @@ export class NavbarItem {
52
52
  rel,
53
53
  target,
54
54
  };
55
- return (h(Host, { onClick: this.onClick, onKeyup: this.onKeyUp, role: "tab", tabindex: "0", "aria-selected": selected ? 'true' : null, id: tab !== undefined ? `navbar-item-${tab}` : null, disabled: disabled, class: {
55
+ return (h(Host, { onClick: this.onClick, onKeyup: this.onKeyUp, role: "menu", tabindex: "0", "aria-selected": selected ? 'true' : null, id: tab !== undefined ? `navbar-item-${tab}` : null, disabled: disabled, class: {
56
56
  'navbar-item': true,
57
57
  'tab-selected': selected,
58
58
  'tab-disabled': disabled,
@@ -1 +1 @@
1
- {"version":3,"file":"navbar-item.js","sourceRoot":"","sources":["../../../src/components/navbar-item/navbar-item.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAgB,MAAM,EAAE,MAAM,eAAe,CAAC;AAE/F;;;;GAIG;AAOH,MAAM,OAAO,UAAU;;IAiFb,YAAO,GAAG,CAAC,EAAiB,EAAE,EAAE;MACtC,IAAI,EAAE,CAAC,GAAG,KAAK,OAAO,IAAI,EAAE,CAAC,GAAG,KAAK,GAAG,EAAE;QACxC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;OACpB;IACH,CAAC,CAAC;IAEM,YAAO,GAAG,CAAC,EAAS,EAAE,EAAE;MAC9B,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACrB,CAAC,CAAC;oBAlFiB,KAAK;;;;oBAyBY,KAAK;;;;EAyBzC,eAAe,CAAC,EAAe;IAC7B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC;EAC7C,CAAC;EAEO,SAAS,CAAC,EAAyB;IACzC,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,EAAE;MAC1B,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;QAClB,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;UAC5B,GAAG,EAAE,IAAI,CAAC,GAAG;UACb,IAAI,EAAE,IAAI,CAAC,IAAI;UACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAC,CAAC;QACH,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;UAC5B,GAAG,EAAE,IAAI,CAAC,GAAG;UACb,IAAI,EAAE,IAAI,CAAC,IAAI;UACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAC,CAAC;OACJ;MACD,IAAG,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;QAC1B,EAAE,CAAC,cAAc,EAAE,CAAC;OACrB;KACF;EACH,CAAC;EAYD,MAAM;IACJ,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;IAC5D,MAAM,KAAK,GAAG;MACZ,QAAQ,EAAE,IAAI,CAAC,QAAQ;MACvB,IAAI;MACJ,GAAG;MACH,MAAM;KACP,CAAC;IAEF,OAAO,CACL,EAAC,IAAI,IACH,OAAO,EAAE,IAAI,CAAC,OAAO,EACrB,OAAO,EAAE,IAAI,CAAC,OAAO,EACrB,IAAI,EAAC,KAAK,EACV,QAAQ,EAAC,GAAG,mBACG,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EACvC,EAAE,EAAE,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,eAAe,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,EACnD,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE;QACL,aAAa,EAAE,IAAI;QACnB,cAAc,EAAE,QAAQ;QACxB,cAAc,EAAE,QAAQ;OACzB;MAED,yBAAO,KAAK,IAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,KAAK,EAAC,eAAe,EAAC,IAAI,EAAC,QAAQ;QAC7D,YAAM,KAAK,EAAC,cAAc;UACxB,eAAO,CACF,CACL,CACC,CACR,CAAC;EACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAEF","sourcesContent":["import { Component, Host, h, Element, Prop, Event, EventEmitter, Listen } from '@stencil/core';\n\n/**\n * @slot - Content of the item, it should be road-icon and road-label elements.\n *\n * @part native - The native HTML anchor element that wraps all child elements.\n */\n\n@Component({\n tag: 'road-navbar-item',\n styleUrl: 'navbar-item.css',\n shadow: true,\n})\nexport class NavbarItem {\n\n @Element() el!: HTMLRoadNavbarItemElement;\n\n /**\n * If `true`, the user cannot interact with the tab button.\n */\n @Prop() disabled = false;\n\n /**\n * This attribute instructs browsers to download a URL instead of navigating to\n * it, so the user will be prompted to save it as a local file. If the attribute\n * has a value, it is used as the pre-filled file name in the Save prompt\n * (the user can still change the file name if they want).\n */\n @Prop() download: string | undefined;\n\n /**\n * Contains a URL or a URL fragment that the hyperlink points to.\n * If this property is set, an anchor tag will be rendered.\n */\n @Prop() href: string | undefined;\n\n /**\n * Specifies the relationship of the target object to the link object.\n * The value is a space-separated list of [link types](https://developer.mozilla.org/en-US/docs/Web/HTML/Link_types).\n */\n @Prop() rel: string | undefined;\n\n /**\n * The selected tab component\n */\n @Prop({ mutable: true }) selected = false;\n\n /**\n * A tab id must be provided for each `road-tab`. It's used internally to reference\n * the selected tab.\n */\n @Prop() tab?: string;\n\n /**\n * Specifies where to display the linked URL.\n * Only applies when an `href` is provided.\n * Special keywords: `\"_blank\"`, `\"_self\"`, `\"_parent\"`, `\"_top\"`.\n */\n @Prop() target: string | undefined;\n\n /**\n * Emitted when the tab bar is clicked\n * @internal\n */\n @Event() roadnavbaritemclick!: EventEmitter;\n /** @internal */\n @Event() roadNavbarItemClick!: EventEmitter;\n\n @Listen('roadNavbarChanged', { target: 'window' })\n @Listen('roadnavbarchanged', { target: 'window' })\n onNavbarChanged(ev: CustomEvent) {\n this.selected = this.tab === ev.detail.tab;\n }\n\n private selectTab(ev: Event | KeyboardEvent) {\n if (this.tab !== undefined) {\n if (!this.disabled) {\n this.roadnavbaritemclick.emit({\n tab: this.tab,\n href: this.href,\n selected: this.selected,\n });\n this.roadNavbarItemClick.emit({\n tab: this.tab,\n href: this.href,\n selected: this.selected,\n });\n }\n if(this.href === undefined) {\n ev.preventDefault();\n }\n }\n }\n\n private onKeyUp = (ev: KeyboardEvent) => {\n if (ev.key === 'Enter' || ev.key === ' ') {\n this.selectTab(ev);\n }\n };\n\n private onClick = (ev: Event) => {\n this.selectTab(ev);\n };\n\n render() {\n const { href, rel, target, selected, tab, disabled } = this;\n const attrs = {\n download: this.download,\n href,\n rel,\n target,\n };\n\n return (\n <Host\n onClick={this.onClick}\n onKeyup={this.onKeyUp}\n role=\"tab\"\n tabindex=\"0\"\n aria-selected={selected ? 'true' : null}\n id={tab !== undefined ? `navbar-item-${tab}` : null}\n disabled={disabled}\n class={{\n 'navbar-item': true,\n 'tab-selected': selected,\n 'tab-disabled': disabled,\n }}\n >\n <a {...attrs} tabIndex={-1} class=\"button-native\" part=\"native\">\n <span class=\"button-inner\">\n <slot/>\n </span>\n </a>\n </Host>\n );\n }\n\n}\n"]}
1
+ {"version":3,"file":"navbar-item.js","sourceRoot":"","sources":["../../../src/components/navbar-item/navbar-item.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAgB,MAAM,EAAE,MAAM,eAAe,CAAC;AAE/F;;;;GAIG;AAOH,MAAM,OAAO,UAAU;;IAiFb,YAAO,GAAG,CAAC,EAAiB,EAAE,EAAE;MACtC,IAAI,EAAE,CAAC,GAAG,KAAK,OAAO,IAAI,EAAE,CAAC,GAAG,KAAK,GAAG,EAAE;QACxC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;OACpB;IACH,CAAC,CAAC;IAEM,YAAO,GAAG,CAAC,EAAS,EAAE,EAAE;MAC9B,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACrB,CAAC,CAAC;oBAlFiB,KAAK;;;;oBAyBY,KAAK;;;;EAyBzC,eAAe,CAAC,EAAe;IAC7B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC;EAC7C,CAAC;EAEO,SAAS,CAAC,EAAyB;IACzC,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,EAAE;MAC1B,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;QAClB,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;UAC5B,GAAG,EAAE,IAAI,CAAC,GAAG;UACb,IAAI,EAAE,IAAI,CAAC,IAAI;UACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAC,CAAC;QACH,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;UAC5B,GAAG,EAAE,IAAI,CAAC,GAAG;UACb,IAAI,EAAE,IAAI,CAAC,IAAI;UACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAC,CAAC;OACJ;MACD,IAAG,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;QAC1B,EAAE,CAAC,cAAc,EAAE,CAAC;OACrB;KACF;EACH,CAAC;EAYD,MAAM;IACJ,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;IAC5D,MAAM,KAAK,GAAG;MACZ,QAAQ,EAAE,IAAI,CAAC,QAAQ;MACvB,IAAI;MACJ,GAAG;MACH,MAAM;KACP,CAAC;IAEF,OAAO,CACL,EAAC,IAAI,IACH,OAAO,EAAE,IAAI,CAAC,OAAO,EACrB,OAAO,EAAE,IAAI,CAAC,OAAO,EACrB,IAAI,EAAC,MAAM,EACX,QAAQ,EAAC,GAAG,mBACG,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EACvC,EAAE,EAAE,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,eAAe,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,EACnD,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE;QACL,aAAa,EAAE,IAAI;QACnB,cAAc,EAAE,QAAQ;QACxB,cAAc,EAAE,QAAQ;OACzB;MAED,yBAAO,KAAK,IAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,KAAK,EAAC,eAAe,EAAC,IAAI,EAAC,QAAQ;QAC7D,YAAM,KAAK,EAAC,cAAc;UACxB,eAAO,CACF,CACL,CACC,CACR,CAAC;EACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAEF","sourcesContent":["import { Component, Host, h, Element, Prop, Event, EventEmitter, Listen } from '@stencil/core';\n\n/**\n * @slot - Content of the item, it should be road-icon and road-label elements.\n *\n * @part native - The native HTML anchor element that wraps all child elements.\n */\n\n@Component({\n tag: 'road-navbar-item',\n styleUrl: 'navbar-item.css',\n shadow: true,\n})\nexport class NavbarItem {\n\n @Element() el!: HTMLRoadNavbarItemElement;\n\n /**\n * If `true`, the user cannot interact with the tab button.\n */\n @Prop() disabled = false;\n\n /**\n * This attribute instructs browsers to download a URL instead of navigating to\n * it, so the user will be prompted to save it as a local file. If the attribute\n * has a value, it is used as the pre-filled file name in the Save prompt\n * (the user can still change the file name if they want).\n */\n @Prop() download: string | undefined;\n\n /**\n * Contains a URL or a URL fragment that the hyperlink points to.\n * If this property is set, an anchor tag will be rendered.\n */\n @Prop() href: string | undefined;\n\n /**\n * Specifies the relationship of the target object to the link object.\n * The value is a space-separated list of [link types](https://developer.mozilla.org/en-US/docs/Web/HTML/Link_types).\n */\n @Prop() rel: string | undefined;\n\n /**\n * The selected tab component\n */\n @Prop({ mutable: true }) selected = false;\n\n /**\n * A tab id must be provided for each `road-tab`. It's used internally to reference\n * the selected tab.\n */\n @Prop() tab?: string;\n\n /**\n * Specifies where to display the linked URL.\n * Only applies when an `href` is provided.\n * Special keywords: `\"_blank\"`, `\"_self\"`, `\"_parent\"`, `\"_top\"`.\n */\n @Prop() target: string | undefined;\n\n /**\n * Emitted when the tab bar is clicked\n * @internal\n */\n @Event() roadnavbaritemclick!: EventEmitter;\n /** @internal */\n @Event() roadNavbarItemClick!: EventEmitter;\n\n @Listen('roadNavbarChanged', { target: 'window' })\n @Listen('roadnavbarchanged', { target: 'window' })\n onNavbarChanged(ev: CustomEvent) {\n this.selected = this.tab === ev.detail.tab;\n }\n\n private selectTab(ev: Event | KeyboardEvent) {\n if (this.tab !== undefined) {\n if (!this.disabled) {\n this.roadnavbaritemclick.emit({\n tab: this.tab,\n href: this.href,\n selected: this.selected,\n });\n this.roadNavbarItemClick.emit({\n tab: this.tab,\n href: this.href,\n selected: this.selected,\n });\n }\n if(this.href === undefined) {\n ev.preventDefault();\n }\n }\n }\n\n private onKeyUp = (ev: KeyboardEvent) => {\n if (ev.key === 'Enter' || ev.key === ' ') {\n this.selectTab(ev);\n }\n };\n\n private onClick = (ev: Event) => {\n this.selectTab(ev);\n };\n\n render() {\n const { href, rel, target, selected, tab, disabled } = this;\n const attrs = {\n download: this.download,\n href,\n rel,\n target,\n };\n\n return (\n <Host\n onClick={this.onClick}\n onKeyup={this.onKeyUp}\n role=\"menu\"\n tabindex=\"0\"\n aria-selected={selected ? 'true' : null}\n id={tab !== undefined ? `navbar-item-${tab}` : null}\n disabled={disabled}\n class={{\n 'navbar-item': true,\n 'tab-selected': selected,\n 'tab-disabled': disabled,\n }}\n >\n <a {...attrs} tabIndex={-1} class=\"button-native\" part=\"native\">\n <span class=\"button-inner\">\n <slot/>\n </span>\n </a>\n </Host>\n );\n }\n\n}\n"]}
@@ -10,7 +10,7 @@ export const Playground = () => html`
10
10
  <br><br>
11
11
 
12
12
  <a class="link d-inline-flex align-items-center" href="#">
13
- <road-icon size="sm" class="mr-4" name="edit-pen"></road-icon>
13
+ <road-icon size="sm" class="mr-4" name="edit-pen" role="img"></road-icon>
14
14
  Link
15
15
  </a>
16
16
 
@@ -18,7 +18,7 @@ export const Playground = () => html`
18
18
 
19
19
  <a class="link d-inline-flex align-items-center" href="#">
20
20
  Link
21
- <road-icon size="sm" class="mr-4" name="arrow"></road-icon>
21
+ <road-icon size="sm" class="mr-4" name="arrow" role="img"></road-icon>
22
22
  </a>
23
23
  `;
24
24
 
@@ -95,7 +95,6 @@
95
95
 
96
96
  .form-select-area:not(:disabled):focus {
97
97
  border-color: var(--road-input-outline-variant);
98
- outline: 0;
99
98
  }
100
99
 
101
100
  /**
@@ -43,8 +43,44 @@ export class RoadPhoneNumberInput {
43
43
  }
44
44
  // On user input
45
45
  handleInput(event) {
46
- this.phoneNumber = event.detail.value;
47
- this.createAndDispatchPhoneData();
46
+ // Récupérer la valeur saisie
47
+ const inputValue = event.detail.value || '';
48
+ // Vérifier si la valeur contient uniquement des chiffres ou le symbole "+"
49
+ const containsOnlyNumbersAndPlus = /^[0-9+]*$/.test(inputValue);
50
+ // Vérifier si la valeur contient des lettres
51
+ const containsLetters = /[a-zA-Z]/.test(inputValue);
52
+ // Vérifier si la valeur commence par un chiffre
53
+ const startsWithNumber = /^[0-9]/.test(inputValue);
54
+ // Si la valeur contient des lettres, ne pas la mettre à jour
55
+ if (containsLetters) {
56
+ // Réinitialiser la valeur du champ de saisie à son état précédent
57
+ const inputElement = this.el.querySelector('#phone-number');
58
+ if (inputElement) {
59
+ inputElement.value = this.phoneNumber;
60
+ }
61
+ }
62
+ else if (containsOnlyNumbersAndPlus && !startsWithNumber) {
63
+ // Si la valeur contient des chiffres ou le symbole "+" mais ne commence pas par un chiffre, mettre à jour la valeur
64
+ this.phoneNumber = inputValue;
65
+ this.createAndDispatchPhoneData();
66
+ }
67
+ }
68
+ // On user key up
69
+ handleKeyUp(event) {
70
+ // Récupérer la valeur saisie
71
+ const inputValue = event.target.value || '';
72
+ // Vérifier si la valeur contient uniquement des chiffres ou le symbole "+"
73
+ const containsOnlyNumbersAndPlus = /^[0-9+]*$/.test(inputValue);
74
+ // Si la valeur ne contient pas uniquement des chiffres ou le symbole "+", réinitialiser le champ de saisie à son état précédent
75
+ if (!containsOnlyNumbersAndPlus) {
76
+ // Réinitialiser la valeur du champ de saisie à son état précédent
77
+ event.target.value = this.phoneNumber;
78
+ }
79
+ else {
80
+ // Si la valeur contient uniquement des chiffres ou le symbole "+", mettre à jour la valeur du numéro de téléphone
81
+ this.phoneNumber = inputValue;
82
+ this.createAndDispatchPhoneData();
83
+ }
48
84
  }
49
85
  // On user select
50
86
  handleSelect(event) {
@@ -135,7 +171,7 @@ export class RoadPhoneNumberInput {
135
171
  }
136
172
  placeErrorMessage() {
137
173
  this.waitForElementToExist('.invalid-feedback').then((messError) => {
138
- messError.style.display = "block";
174
+ messError.style.display = "flex";
139
175
  messError.style.marginTop = "-0.5rem";
140
176
  const phoneNumberInput = this.el;
141
177
  phoneNumberInput.appendChild(messError);
@@ -164,7 +200,7 @@ export class RoadPhoneNumberInput {
164
200
  const valueId = selectId + '-value';
165
201
  const isInvalidClass = this.errorMessage.length ? 'is-invalid' : '';
166
202
  const isErrorClass = this.errorMessage.length ? 'is-error' : '';
167
- return (h(Host, null, h("road-input-group", null, h("div", { class: `road-phone-input-select ${isErrorClass}`, slot: "prepend" }, h("select", { id: 'phone-number-input', class: `form-select-area has-value ${isInvalidClass}`, "aria-disabled": this.disabled ? 'true' : null, disabled: this.disabled, onChange: (event) => this.handleSelect(event) }, this.countryOptions && this.countryOptions.map(option => (h("option", { value: option.value, disabled: option.disabled, selected: option.selected }, option.label)))), h("label", { class: "form-select-area-label", id: labelId, htmlFor: selectId }, this.codeLabel), h("label", { class: "form-select-area-value", id: valueId, htmlFor: selectId }, "+", this.selectedCountryCode)), h("road-input", { id: "phone-number", sizes: "xl", label: this.phoneLabel, value: this.phoneValue, onRoadChange: (event) => this.handleInput(event), required: this.required, error: this.errorMessage }))));
203
+ return (h(Host, null, h("road-input-group", null, h("div", { class: `road-phone-input-select ${isErrorClass}`, slot: "prepend" }, h("select", { id: 'phone-number-input', class: `form-select-area has-value ${isInvalidClass}`, "aria-disabled": this.disabled ? 'true' : null, disabled: this.disabled, onChange: (event) => this.handleSelect(event), "aria-label": this.codeLabel, tabIndex: this.disabled ? -1 : 0 }, this.countryOptions && this.countryOptions.map(option => (h("option", { value: option.value, disabled: option.disabled, selected: option.selected }, option.label)))), h("label", { class: "form-select-area-label", id: labelId, htmlFor: selectId }, this.codeLabel), h("label", { class: "form-select-area-value", id: valueId, htmlFor: selectId }, "+", this.selectedCountryCode)), h("road-input", { id: "phone-number", sizes: "xl", label: this.phoneLabel, value: this.phoneValue, onRoadChange: (event) => this.handleInput(event), required: this.required, error: this.errorMessage, onKeyUp: (event) => this.handleKeyUp(event), tabIndex: 0 }))));
168
204
  }
169
205
  static get is() { return "road-phone-number-input"; }
170
206
  static get encapsulation() { return "scoped"; }
@@ -1 +1 @@
1
- {"version":3,"file":"phone-number-input.js","sourceRoot":"","sources":["../../../src/components/phone-number-input/phone-number-input.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Prop, Element, Host, State, h, Event, EventEmitter, Watch } from '@stencil/core';\nimport {\n PhoneNumberFormat,\n PhoneNumberType,\n PhoneNumberUtil,\n} from 'google-libphonenumber';\nimport { CountryOption, CountryType, PhoneReturnType, ReturnObject } from './interfaces';\nimport { RoadInputCustomEvent } from '../../components';\n\nlet selectIds = 0;\n\n@Component({\n tag: 'road-phone-number-input',\n styleUrl: 'phone-number-input.css',\n scoped: true,\n})\nexport class RoadPhoneNumberInput {\n\n /** Computed phone data */\n @Event() roadPhoneNumberInput!: EventEmitter<{\n isError: boolean;\n phone: {\n numberType: string;\n countryCode: string;\n nationalNumber: string;\n code: string;\n internationalNumber: string;\n };\n }>;\n\n @Element() el!: HTMLRoadPhoneNumberInputElement;\n\n /** Disable both fields */\n @Prop() disabled: boolean = false;\n\n /** List of countries displayed in the country selection. Countries will be automatically sorted by alphabetical order (see format in example) */\n @Prop() countryData: CountryType[] = [];\n\n /** Used to display countries with the right language */\n @Prop() language: string = 'fr';\n\n /** Country selection placeHolder */\n @Prop() codeLabel: string = '';\n\n /** Phone input placeHolder */\n @Prop() phoneLabel: string = '';\n\n /** Value displayed in the phone input */\n @Prop() phoneValue?: string;\n\n /** Selected country code */\n @Prop() countryCode?: string;\n\n /** Error message (displayed only if ther is a message) */\n @Prop() errorMessage: string = '';\n\n /** Add a star in the phone input */\n @Prop() required = false;\n\n @State() selectedCountry: string = this.countryData[0].countryCode;\n @State() selectedCountryCode: string = this.countryData[0].phoneCode;\n @State() phoneNumber: string = '';\n @State() countryOptions: CountryOption[] = [];\n @State() returnObject: ReturnObject = {\n isError: false,\n phone: this.resetPhoneUtilData(),\n };\n\n @Watch('errorMessage')\n updateMessagePosition() {\n this.placeErrorMessage();\n }\n\n // On component load\n componentWillLoad() {\n this.placeErrorMessage();\n let fromSelect = false;\n\n if (this.phoneValue) {\n this.phoneNumber = this.phoneValue;\n }\n\n if (this.countryCode) {\n this.selectedCountry = this.countryCode;\n if (this.getPhoneCodeFromCountryCode(this.countryCode)) {\n this.updateSelectedCountryCode(this.getPhoneCodeFromCountryCode(this.countryCode)!);\n fromSelect = true;\n }\n }\n\n this.updateCountryOptions();\n this.createAndDispatchPhoneData(fromSelect);\n }\n\n // On user input\n handleInput(event: RoadInputCustomEvent<{\n value: string | null | undefined;\n }>) {\n this.phoneNumber = event.detail.value!;\n this.createAndDispatchPhoneData();\n }\n\n // On user select\n handleSelect(event: Event) {\n const select = event.target as HTMLSelectElement | null;\n if (select) {\n this.updateSelectedCountry(select.value);\n this.updateSelectedCountryCode(this.getPhoneCodeFromCountryCode(this.selectedCountry)!);\n }\n this.createAndDispatchPhoneData(true);\n this.updateCountryOptions();\n }\n\n createAndDispatchPhoneData(fromSelect?: boolean) {\n // Init phone util\n const phoneUtil = PhoneNumberUtil.getInstance();\n const PNF = PhoneNumberFormat;\n\n // Reset the return object data\n this.returnObject.phone = this.resetPhoneUtilData();\n\n const tmpCountry = this.selectedCountry.length ? this.selectedCountry : this.countryData[0].countryCode;\n\n try {\n const parsedPhoneNumber = phoneUtil.parse(this.phoneNumber, tmpCountry);\n this.returnObject.isError = !phoneUtil.isValidNumber(parsedPhoneNumber) && !this.isEmptyPhoneNumber();\n this.returnObject.phone.nationalNumber = phoneUtil.format(parsedPhoneNumber, PNF.NATIONAL);\n this.returnObject.phone.internationalNumber = phoneUtil.format(parsedPhoneNumber, PNF.INTERNATIONAL);\n\n // Set the country code values depending on the event origin\n if (phoneUtil.getRegionCodeForNumber(parsedPhoneNumber)) {\n if (fromSelect) {\n this.returnObject.isError = !(\n phoneUtil.isValidNumber(parsedPhoneNumber) &&\n phoneUtil.isValidNumberForRegion(parsedPhoneNumber, this.selectedCountry) &&\n !this.isEmptyPhoneNumber()\n );\n } else {\n this.updateSelectedCountryCode(parsedPhoneNumber.getCountryCode()!.toString());\n this.updateSelectedCountry(phoneUtil.getRegionCodeForNumber(parsedPhoneNumber)!);\n\n this.returnObject.phone.countryCode = this.selectedCountry;\n this.returnObject.phone.code = this.selectedCountryCode;\n }\n this.updateCountryOptions();\n }\n\n const phoneType = Object.entries(PhoneNumberType).find(entry => entry[1] === phoneUtil.getNumberType(parsedPhoneNumber))!;\n this.returnObject.phone.numberType = phoneType[0];\n } catch {} finally {\n this.roadPhoneNumberInput.emit(this.returnObject);\n }\n }\n\n // utils\n\n updateSelectedCountryCode(countryCode: string) {\n this.selectedCountryCode = countryCode;\n }\n\n updateSelectedCountry(value: string) {\n this.selectedCountry = value;\n }\n\n resetPhoneUtilData(): PhoneReturnType {\n return {\n numberType: 'UNKNOWN',\n countryCode: this.selectedCountry,\n code: this.selectedCountryCode,\n nationalNumber: this.phoneNumber,\n internationalNumber: this.phoneNumber,\n };\n }\n\n isEmptyPhoneNumber(): boolean {\n return !this.phoneNumber.length;\n }\n\n getPhoneCodeFromCountryCode(countryCode: string): string | undefined {\n return this.countryData.find(country => country.countryCode === countryCode)?.phoneCode;\n }\n\n updateCountryOptions() {\n const validLanguage = this.countryData[0].translations[this.language] ? this.language : 'fr';\n this.countryOptions = [\n ...this.countryData\n .sort((a, b) => a.translations[validLanguage].localeCompare(b.translations[validLanguage]))\n .map(country => ({\n value: country.countryCode,\n label: `${country.translations[validLanguage]} (+${country.phoneCode})`,\n selected: country.countryCode === this.selectedCountry,\n disabled: false,\n })\n ),\n {\n value: '',\n label: '--',\n selected: this.countryData.every((country) => country.countryCode !== this.selectedCountry),\n disabled: true,\n },\n ];\n }\n\n placeErrorMessage() {\n this.waitForElementToExist('.invalid-feedback').then((messError: HTMLElement) => {\n messError.style.display = \"block\";\n messError.style.marginTop = \"-0.5rem\";\n const phoneNumberInput = (this.el as HTMLRoadPhoneNumberInputElement);\n phoneNumberInput.appendChild(messError);\n });\n }\n\n waitForElementToExist(selector: string): Promise<HTMLElement> {\n return new Promise(resolve => {\n if (document.querySelector(selector)) {\n return resolve(document.querySelector(selector) as HTMLElement);\n }\n\n const observer = new MutationObserver(() => {\n if (document.querySelector(selector)) {\n resolve(document.querySelector(selector) as HTMLElement);\n observer.disconnect();\n }\n });\n\n observer.observe(document.body, {\n subtree: true,\n childList: true,\n });\n });\n }\n\n render() {\n const selectId = `road-select-${selectIds++}`;\n const labelId = selectId + '-label';\n const valueId = selectId + '-value';\n const isInvalidClass = this.errorMessage.length ? 'is-invalid' : '';\n const isErrorClass = this.errorMessage.length ? 'is-error' : '';\n\n return (\n <Host>\n <road-input-group>\n <div class={`road-phone-input-select ${isErrorClass}`} slot=\"prepend\">\n <select\n id='phone-number-input'\n class={`form-select-area has-value ${isInvalidClass}`}\n aria-disabled={this.disabled ? 'true' : null}\n disabled={this.disabled}\n onChange={(event) => this.handleSelect(event)}\n >\n {this.countryOptions && this.countryOptions.map(option => (\n <option value={option.value} disabled={option.disabled} selected={option.selected}>{option.label}</option>\n ))}\n </select>\n <label class=\"form-select-area-label\" id={labelId} htmlFor={selectId}>{this.codeLabel}</label>\n <label class=\"form-select-area-value\" id={valueId} htmlFor={selectId}>+{this.selectedCountryCode}</label>\n </div>\n <road-input\n id=\"phone-number\"\n sizes=\"xl\"\n label={this.phoneLabel}\n value={this.phoneValue}\n onRoadChange={(event) => this.handleInput(event)}\n required={this.required}\n error={this.errorMessage}\n >\n </road-input>\n </road-input-group>\n </Host>\n );\n }\n}\n\n\n"]}
1
+ {"version":3,"file":"phone-number-input.js","sourceRoot":"","sources":["../../../src/components/phone-number-input/phone-number-input.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Prop, Element, Host, State, h, Event, EventEmitter, Watch } from '@stencil/core';\nimport {\n PhoneNumberFormat,\n PhoneNumberType,\n PhoneNumberUtil,\n} from 'google-libphonenumber';\nimport { CountryOption, CountryType, PhoneReturnType, ReturnObject } from './interfaces';\nimport { RoadInputCustomEvent } from '../../components';\n\nlet selectIds = 0;\n\n@Component({\n tag: 'road-phone-number-input',\n styleUrl: 'phone-number-input.css',\n scoped: true,\n})\nexport class RoadPhoneNumberInput {\n\n /** Computed phone data */\n @Event() roadPhoneNumberInput!: EventEmitter<{\n isError: boolean;\n phone: {\n numberType: string;\n countryCode: string;\n nationalNumber: string;\n code: string;\n internationalNumber: string;\n };\n }>;\n\n @Element() el!: HTMLRoadPhoneNumberInputElement;\n\n /** Disable both fields */\n @Prop() disabled: boolean = false;\n\n /** List of countries displayed in the country selection. Countries will be automatically sorted by alphabetical order (see format in example) */\n @Prop() countryData: CountryType[] = [];\n\n /** Used to display countries with the right language */\n @Prop() language: string = 'fr';\n\n /** Country selection placeHolder */\n @Prop() codeLabel: string = '';\n\n /** Phone input placeHolder */\n @Prop() phoneLabel: string = '';\n\n /** Value displayed in the phone input */\n @Prop() phoneValue?: string;\n\n /** Selected country code */\n @Prop() countryCode?: string;\n\n /** Error message (displayed only if ther is a message) */\n @Prop() errorMessage: string = '';\n\n /** Add a star in the phone input */\n @Prop() required = false;\n\n @State() selectedCountry: string = this.countryData[0].countryCode;\n @State() selectedCountryCode: string = this.countryData[0].phoneCode;\n @State() phoneNumber: string = '';\n @State() countryOptions: CountryOption[] = [];\n @State() returnObject: ReturnObject = {\n isError: false,\n phone: this.resetPhoneUtilData(),\n };\n\n @Watch('errorMessage')\n updateMessagePosition() {\n this.placeErrorMessage();\n }\n\n // On component load\n componentWillLoad() {\n this.placeErrorMessage();\n let fromSelect = false;\n\n if (this.phoneValue) {\n this.phoneNumber = this.phoneValue;\n }\n\n if (this.countryCode) {\n this.selectedCountry = this.countryCode;\n if (this.getPhoneCodeFromCountryCode(this.countryCode)) {\n this.updateSelectedCountryCode(this.getPhoneCodeFromCountryCode(this.countryCode)!);\n fromSelect = true;\n }\n }\n\n this.updateCountryOptions();\n this.createAndDispatchPhoneData(fromSelect);\n }\n\n// On user input\nhandleInput(event: RoadInputCustomEvent<{\n value: string | null | undefined;\n}>) {\n // Récupérer la valeur saisie\n const inputValue = event.detail.value || '';\n\n // Vérifier si la valeur contient uniquement des chiffres ou le symbole \"+\"\n const containsOnlyNumbersAndPlus = /^[0-9+]*$/.test(inputValue);\n\n // Vérifier si la valeur contient des lettres\n const containsLetters = /[a-zA-Z]/.test(inputValue);\n\n // Vérifier si la valeur commence par un chiffre\n const startsWithNumber = /^[0-9]/.test(inputValue);\n\n // Si la valeur contient des lettres, ne pas la mettre à jour\n if (containsLetters) {\n // Réinitialiser la valeur du champ de saisie à son état précédent\n const inputElement = this.el.querySelector('#phone-number') as HTMLRoadInputElement;\n if (inputElement) {\n inputElement.value = this.phoneNumber;\n }\n } else if (containsOnlyNumbersAndPlus && !startsWithNumber) {\n // Si la valeur contient des chiffres ou le symbole \"+\" mais ne commence pas par un chiffre, mettre à jour la valeur\n this.phoneNumber = inputValue;\n this.createAndDispatchPhoneData();\n }\n}\n\n// On user key up\nhandleKeyUp(event: KeyboardEvent) {\n // Récupérer la valeur saisie\n const inputValue = (event.target as HTMLInputElement).value || '';\n\n // Vérifier si la valeur contient uniquement des chiffres ou le symbole \"+\"\n const containsOnlyNumbersAndPlus = /^[0-9+]*$/.test(inputValue);\n\n // Si la valeur ne contient pas uniquement des chiffres ou le symbole \"+\", réinitialiser le champ de saisie à son état précédent\n if (!containsOnlyNumbersAndPlus) {\n // Réinitialiser la valeur du champ de saisie à son état précédent\n (event.target as HTMLInputElement).value = this.phoneNumber;\n } else {\n // Si la valeur contient uniquement des chiffres ou le symbole \"+\", mettre à jour la valeur du numéro de téléphone\n this.phoneNumber = inputValue;\n this.createAndDispatchPhoneData();\n }\n}\n\n\n\n // On user select\n handleSelect(event: Event) {\n const select = event.target as HTMLSelectElement | null;\n if (select) {\n this.updateSelectedCountry(select.value);\n this.updateSelectedCountryCode(this.getPhoneCodeFromCountryCode(this.selectedCountry)!);\n }\n this.createAndDispatchPhoneData(true);\n this.updateCountryOptions();\n }\n\n createAndDispatchPhoneData(fromSelect?: boolean) {\n // Init phone util\n const phoneUtil = PhoneNumberUtil.getInstance();\n const PNF = PhoneNumberFormat;\n\n // Reset the return object data\n this.returnObject.phone = this.resetPhoneUtilData();\n\n const tmpCountry = this.selectedCountry.length ? this.selectedCountry : this.countryData[0].countryCode;\n\n try {\n const parsedPhoneNumber = phoneUtil.parse(this.phoneNumber, tmpCountry);\n this.returnObject.isError = !phoneUtil.isValidNumber(parsedPhoneNumber) && !this.isEmptyPhoneNumber();\n this.returnObject.phone.nationalNumber = phoneUtil.format(parsedPhoneNumber, PNF.NATIONAL);\n this.returnObject.phone.internationalNumber = phoneUtil.format(parsedPhoneNumber, PNF.INTERNATIONAL);\n\n // Set the country code values depending on the event origin\n if (phoneUtil.getRegionCodeForNumber(parsedPhoneNumber)) {\n if (fromSelect) {\n this.returnObject.isError = !(\n phoneUtil.isValidNumber(parsedPhoneNumber) &&\n phoneUtil.isValidNumberForRegion(parsedPhoneNumber, this.selectedCountry) &&\n !this.isEmptyPhoneNumber()\n );\n } else {\n this.updateSelectedCountryCode(parsedPhoneNumber.getCountryCode()!.toString());\n this.updateSelectedCountry(phoneUtil.getRegionCodeForNumber(parsedPhoneNumber)!);\n\n this.returnObject.phone.countryCode = this.selectedCountry;\n this.returnObject.phone.code = this.selectedCountryCode;\n }\n this.updateCountryOptions();\n }\n\n const phoneType = Object.entries(PhoneNumberType).find(entry => entry[1] === phoneUtil.getNumberType(parsedPhoneNumber))!;\n this.returnObject.phone.numberType = phoneType[0];\n } catch {} finally {\n this.roadPhoneNumberInput.emit(this.returnObject);\n }\n }\n\n // utils\n\n updateSelectedCountryCode(countryCode: string) {\n this.selectedCountryCode = countryCode;\n }\n\n updateSelectedCountry(value: string) {\n this.selectedCountry = value;\n }\n\n resetPhoneUtilData(): PhoneReturnType {\n return {\n numberType: 'UNKNOWN',\n countryCode: this.selectedCountry,\n code: this.selectedCountryCode,\n nationalNumber: this.phoneNumber,\n internationalNumber: this.phoneNumber,\n };\n }\n\n isEmptyPhoneNumber(): boolean {\n return !this.phoneNumber.length;\n }\n\n getPhoneCodeFromCountryCode(countryCode: string): string | undefined {\n return this.countryData.find(country => country.countryCode === countryCode)?.phoneCode;\n }\n\n updateCountryOptions() {\n const validLanguage = this.countryData[0].translations[this.language] ? this.language : 'fr';\n this.countryOptions = [\n ...this.countryData\n .sort((a, b) => a.translations[validLanguage].localeCompare(b.translations[validLanguage]))\n .map(country => ({\n value: country.countryCode,\n label: `${country.translations[validLanguage]} (+${country.phoneCode})`,\n selected: country.countryCode === this.selectedCountry,\n disabled: false,\n })\n ),\n {\n value: '',\n label: '--',\n selected: this.countryData.every((country) => country.countryCode !== this.selectedCountry),\n disabled: true,\n },\n ];\n }\n\n placeErrorMessage() {\n this.waitForElementToExist('.invalid-feedback').then((messError: HTMLElement) => {\n messError.style.display = \"flex\";\n messError.style.marginTop = \"-0.5rem\";\n const phoneNumberInput = (this.el as HTMLRoadPhoneNumberInputElement);\n phoneNumberInput.appendChild(messError);\n });\n }\n\n waitForElementToExist(selector: string): Promise<HTMLElement> {\n return new Promise(resolve => {\n if (document.querySelector(selector)) {\n return resolve(document.querySelector(selector) as HTMLElement);\n }\n\n const observer = new MutationObserver(() => {\n if (document.querySelector(selector)) {\n resolve(document.querySelector(selector) as HTMLElement);\n observer.disconnect();\n }\n });\n\n observer.observe(document.body, {\n subtree: true,\n childList: true,\n });\n });\n }\n\n render() {\n const selectId = `road-select-${selectIds++}`;\n const labelId = selectId + '-label';\n const valueId = selectId + '-value';\n const isInvalidClass = this.errorMessage.length ? 'is-invalid' : '';\n const isErrorClass = this.errorMessage.length ? 'is-error' : '';\n\n return (\n <Host>\n <road-input-group>\n <div class={`road-phone-input-select ${isErrorClass}`} slot=\"prepend\">\n <select\n id='phone-number-input'\n class={`form-select-area has-value ${isInvalidClass}`}\n aria-disabled={this.disabled ? 'true' : null}\n disabled={this.disabled}\n onChange={(event) => this.handleSelect(event)}\n aria-label={this.codeLabel}\n tabIndex={this.disabled ? -1 : 0}\n >\n {this.countryOptions && this.countryOptions.map(option => (\n <option value={option.value} disabled={option.disabled} selected={option.selected}>{option.label}</option>\n ))}\n </select>\n <label class=\"form-select-area-label\" id={labelId} htmlFor={selectId}>{this.codeLabel}</label>\n <label class=\"form-select-area-value\" id={valueId} htmlFor={selectId}>+{this.selectedCountryCode}</label>\n </div>\n <road-input\n id=\"phone-number\"\n sizes=\"xl\"\n label={this.phoneLabel}\n value={this.phoneValue}\n onRoadChange={(event) => this.handleInput(event)}\n required={this.required}\n error={this.errorMessage}\n onKeyUp={(event) => this.handleKeyUp(event)} // Lier la fonction handleKeyUp à l'événement onKeyUp\n tabIndex={0}\n >\n </road-input>\n </road-input-group>\n </Host>\n );\n }\n}\n\n\n"]}
@@ -94,7 +94,7 @@
94
94
  }
95
95
 
96
96
  .plate-number-input::placeholder {
97
- color: var(--road-on-surface-extra-weak);
97
+ color: var(--road-on-surface-weak);
98
98
  opacity: 1;
99
99
  }
100
100
 
@@ -82,7 +82,7 @@ export class PlateNumber {
82
82
  render() {
83
83
  const value = this.getValue();
84
84
  const motorbikeClass = this.motorbike ? 'motorbike-plate' : '';
85
- return (h("road-input-group", { class: `plate-number plate-number-${this.country.toLowerCase()} ${motorbikeClass}` }, h("label", { slot: "prepend", class: "input-group-prepend" }, h("div", { class: "plate-number-start" }, h("road-icon", { class: "plate-number-icon", icon: licensePlateStarEu }), h("div", { class: "plate-number-location" }, this.countries
85
+ return (h("road-input-group", { class: `plate-number plate-number-${this.country.toLowerCase()} ${motorbikeClass}` }, h("label", { slot: "prepend", class: "input-group-prepend" }, h("div", { class: "plate-number-start" }, h("road-icon", { class: "plate-number-icon", icon: licensePlateStarEu }), h("div", { class: "plate-number-location", "aria-label": this.country, role: "img" }, this.countries
86
86
  .filter(item => item.country === this.country)[0].letter))), this.motorbike
87
87
  ? (h("textarea", { class: "form-control plate-number-input mb-0", disabled: this.disabled, placeholder: this.placeholder != null ? this.placeholder : this.countries.filter(item => item.country === this.country)[0].placeholder, readOnly: this.readonly, maxlength: "9", rows: 2, onInput: this.onInput, onBlur: this.onBlur, onFocus: this.onFocus }))
88
88
  : (h("input", { class: "plate-number-input mb-0", disabled: this.disabled, placeholder: this.placeholder != null ? this.placeholder : this.countries.filter(item => item.country === this.country)[0].placeholder, readOnly: this.readonly, value: value, onInput: this.onInput, onBlur: this.onBlur, onFocus: this.onFocus })), h("label", { slot: "append", class: "input-group-append" }, h("div", { class: "plate-number-end" }))));
@@ -1 +1 @@
1
- {"version":3,"file":"plate-number.js","sourceRoot":"","sources":["../../../src/components/plate-number/plate-number.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, h, Prop, Event, EventEmitter, Watch } from '@stencil/core';\nimport { licensePlateStarEu } from '../../../icons';\n\n@Component({\n tag: 'road-plate-number',\n styleUrl: 'plate-number.css',\n scoped: true,\n})\nexport class PlateNumber {\n\n private countries = [\n {\n country: 'FR',\n letter: 'F',\n placeholder: 'AT-857-YY',\n },\n {\n country: 'BE',\n letter: 'B',\n placeholder: '1-AAA-001',\n },\n {\n country: 'IT',\n letter: 'I',\n placeholder: 'AT 814TX',\n },\n {\n country: 'ES',\n letter: 'E',\n placeholder: '9512 HVY',\n },\n {\n country: 'PT',\n letter: 'P',\n placeholder: '13 24 PZ',\n },\n {\n country: 'PL',\n letter: 'PL',\n placeholder: 'GD 921KF',\n },\n {\n country: 'AT',\n letter: 'A',\n placeholder: 'FF 10 FF',\n },\n {\n country: 'DE',\n letter: 'D',\n placeholder: 'RA KL 8136',\n }\n ];\n\n /**\n * country of the plate\n */\n @Prop() country: 'FR' | 'BE' | 'IT' | 'ES' | 'PT' | 'PL' | 'AT' | 'DE' = 'FR';\n\n /**\n * If `true`, the user cannot interact with the input.\n */\n @Prop() disabled = false;\n\n /**\n * overwrite the default placeholder\n */\n @Prop() placeholder?: string;\n\n /**\n * If `true`, the user cannot modify the value.\n */\n @Prop() readonly = false;\n\n /**\n * The value of the input.\n */\n @Prop({ mutable: true }) value?: string | number | null = '';\n\n /**\n * Enable motorbike display\n */\n @Prop() motorbike?: boolean;\n\n /**\n * Update the native input element when the value changes\n */\n @Watch('value')\n protected valueChanged() {\n this.roadchange.emit({ value: this.value == null ? this.value : this.value.toString() });\n this.roadChange.emit({ value: this.value == null ? this.value : this.value.toString() });\n }\n\n /**\n * Emitted when a keyboard input occurred.\n */\n @Event() roadinput!: EventEmitter<KeyboardEvent>;\n /** @internal */\n @Event() roadInput!: EventEmitter<KeyboardEvent>;\n\n /**\n * Emitted when the value has changed.\n */\n @Event() roadchange!: EventEmitter<{\n value: string | undefined | null;\n }>;\n /** @internal */\n @Event() roadChange!: EventEmitter<{\n value: string | undefined | null;\n }>;\n\n /**\n * Emitted when the input loses focus.\n */\n @Event() roadblur!: EventEmitter<void>;\n /** @internal */\n @Event() roadBlur!: EventEmitter<void>;\n\n /**\n * Emitted when the input has focus.\n */\n @Event() roadfocus!: EventEmitter<void>;\n /** @internal */\n @Event() roadFocus!: EventEmitter<void>;\n\n private getValue(): string {\n return typeof this.value === 'number'\n ? this.value.toString()\n : (this.value || '').toString();\n }\n\n private onInput = (ev: Event) => {\n const input = ev.target as HTMLInputElement | null;\n if (input) {\n input.value = input.value.toUpperCase() || \"\";\n }\n this.roadinput.emit(ev as KeyboardEvent);\n this.roadInput.emit(ev as KeyboardEvent);\n };\n\n private onBlur = () => {\n this.roadblur.emit();\n this.roadBlur.emit();\n };\n\n private onFocus = () => {\n this.roadfocus.emit();\n this.roadFocus.emit();\n };\n\n render() {\n const value = this.getValue();\n const motorbikeClass = this.motorbike ? 'motorbike-plate' : '';\n\n return (\n <road-input-group class={`plate-number plate-number-${this.country.toLowerCase()} ${motorbikeClass}`}>\n <label slot=\"prepend\" class=\"input-group-prepend\">\n <div class=\"plate-number-start\">\n <road-icon class=\"plate-number-icon\" icon={licensePlateStarEu}></road-icon>\n <div class=\"plate-number-location\">\n {this.countries\n .filter(item => item.country === this.country)[0].letter}\n </div>\n </div>\n </label>\n {this.motorbike\n ? (\n <textarea\n class=\"form-control plate-number-input mb-0\"\n disabled={this.disabled}\n placeholder={this.placeholder != null ? this.placeholder : this.countries.filter(item => item.country === this.country)[0].placeholder}\n readOnly={this.readonly}\n maxlength=\"9\"\n rows={2}\n onInput={this.onInput}\n onBlur={this.onBlur}\n onFocus={this.onFocus}\n >\n </textarea>\n )\n : (\n <input\n class=\"plate-number-input mb-0\"\n disabled={this.disabled}\n placeholder={this.placeholder != null ? this.placeholder : this.countries.filter(item => item.country === this.country)[0].placeholder}\n readOnly={this.readonly}\n value={value}\n onInput={this.onInput}\n onBlur={this.onBlur}\n onFocus={this.onFocus}\n />\n )}\n <label slot=\"append\" class=\"input-group-append\">\n <div class=\"plate-number-end\"></div>\n </label>\n </road-input-group>\n );\n }\n\n}"]}
1
+ {"version":3,"file":"plate-number.js","sourceRoot":"","sources":["../../../src/components/plate-number/plate-number.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, h, Prop, Event, EventEmitter, Watch } from '@stencil/core';\nimport { licensePlateStarEu } from '../../../icons';\n\n@Component({\n tag: 'road-plate-number',\n styleUrl: 'plate-number.css',\n scoped: true,\n})\nexport class PlateNumber {\n\n private countries = [\n {\n country: 'FR',\n letter: 'F',\n placeholder: 'AT-857-YY',\n },\n {\n country: 'BE',\n letter: 'B',\n placeholder: '1-AAA-001',\n },\n {\n country: 'IT',\n letter: 'I',\n placeholder: 'AT 814TX',\n },\n {\n country: 'ES',\n letter: 'E',\n placeholder: '9512 HVY',\n },\n {\n country: 'PT',\n letter: 'P',\n placeholder: '13 24 PZ',\n },\n {\n country: 'PL',\n letter: 'PL',\n placeholder: 'GD 921KF',\n },\n {\n country: 'AT',\n letter: 'A',\n placeholder: 'FF 10 FF',\n },\n {\n country: 'DE',\n letter: 'D',\n placeholder: 'RA KL 8136',\n }\n ];\n\n /**\n * country of the plate\n */\n @Prop() country: 'FR' | 'BE' | 'IT' | 'ES' | 'PT' | 'PL' | 'AT' | 'DE' = 'FR';\n\n /**\n * If `true`, the user cannot interact with the input.\n */\n @Prop() disabled = false;\n\n /**\n * overwrite the default placeholder\n */\n @Prop() placeholder?: string;\n\n /**\n * If `true`, the user cannot modify the value.\n */\n @Prop() readonly = false;\n\n /**\n * The value of the input.\n */\n @Prop({ mutable: true }) value?: string | number | null = '';\n\n /**\n * Enable motorbike display\n */\n @Prop() motorbike?: boolean;\n\n /**\n * Update the native input element when the value changes\n */\n @Watch('value')\n protected valueChanged() {\n this.roadchange.emit({ value: this.value == null ? this.value : this.value.toString() });\n this.roadChange.emit({ value: this.value == null ? this.value : this.value.toString() });\n }\n\n /**\n * Emitted when a keyboard input occurred.\n */\n @Event() roadinput!: EventEmitter<KeyboardEvent>;\n /** @internal */\n @Event() roadInput!: EventEmitter<KeyboardEvent>;\n\n /**\n * Emitted when the value has changed.\n */\n @Event() roadchange!: EventEmitter<{\n value: string | undefined | null;\n }>;\n /** @internal */\n @Event() roadChange!: EventEmitter<{\n value: string | undefined | null;\n }>;\n\n /**\n * Emitted when the input loses focus.\n */\n @Event() roadblur!: EventEmitter<void>;\n /** @internal */\n @Event() roadBlur!: EventEmitter<void>;\n\n /**\n * Emitted when the input has focus.\n */\n @Event() roadfocus!: EventEmitter<void>;\n /** @internal */\n @Event() roadFocus!: EventEmitter<void>;\n\n private getValue(): string {\n return typeof this.value === 'number'\n ? this.value.toString()\n : (this.value || '').toString();\n }\n\n private onInput = (ev: Event) => {\n const input = ev.target as HTMLInputElement | null;\n if (input) {\n input.value = input.value.toUpperCase() || \"\";\n }\n this.roadinput.emit(ev as KeyboardEvent);\n this.roadInput.emit(ev as KeyboardEvent);\n };\n\n private onBlur = () => {\n this.roadblur.emit();\n this.roadBlur.emit();\n };\n\n private onFocus = () => {\n this.roadfocus.emit();\n this.roadFocus.emit();\n };\n\n render() {\n const value = this.getValue();\n const motorbikeClass = this.motorbike ? 'motorbike-plate' : '';\n\n return (\n <road-input-group class={`plate-number plate-number-${this.country.toLowerCase()} ${motorbikeClass}`}>\n <label slot=\"prepend\" class=\"input-group-prepend\">\n <div class=\"plate-number-start\">\n <road-icon class=\"plate-number-icon\" icon={licensePlateStarEu}></road-icon>\n <div class=\"plate-number-location\" aria-label={this.country} role=\"img\">\n {this.countries\n .filter(item => item.country === this.country)[0].letter}\n </div>\n </div>\n </label>\n {this.motorbike\n ? (\n <textarea\n class=\"form-control plate-number-input mb-0\"\n disabled={this.disabled}\n placeholder={this.placeholder != null ? this.placeholder : this.countries.filter(item => item.country === this.country)[0].placeholder}\n readOnly={this.readonly}\n maxlength=\"9\"\n rows={2}\n onInput={this.onInput}\n onBlur={this.onBlur}\n onFocus={this.onFocus}\n >\n </textarea>\n )\n : (\n <input\n class=\"plate-number-input mb-0\"\n disabled={this.disabled}\n placeholder={this.placeholder != null ? this.placeholder : this.countries.filter(item => item.country === this.country)[0].placeholder}\n readOnly={this.readonly}\n value={value}\n onInput={this.onInput}\n onBlur={this.onBlur}\n onFocus={this.onFocus}\n />\n )}\n <label slot=\"append\" class=\"input-group-append\">\n <div class=\"plate-number-end\"></div>\n </label>\n </road-input-group>\n );\n }\n\n}"]}