@roadtrip/components 3.23.1 → 3.25.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 (191) hide show
  1. package/assets/assets.svg +1 -0
  2. package/assets/index.d.ts +7 -0
  3. package/assets/index.js +1 -0
  4. package/dist/assets/assets.svg +1 -0
  5. package/dist/assets/index.d.ts +7 -0
  6. package/dist/assets/index.js +1 -0
  7. package/dist/cjs/index-12592729.js +4 -0
  8. package/dist/cjs/index.cjs.js +2 -0
  9. package/dist/cjs/index.cjs.js.map +1 -1
  10. package/dist/cjs/loader.cjs.js +1 -1
  11. package/dist/cjs/road-accordion.cjs.entry.js +1 -1
  12. package/dist/cjs/road-accordion.cjs.entry.js.map +1 -1
  13. package/dist/cjs/road-asset.cjs.entry.js +167 -0
  14. package/dist/cjs/road-asset.cjs.entry.js.map +1 -0
  15. package/dist/cjs/road-avatar.cjs.entry.js +1 -1
  16. package/dist/cjs/road-avatar.cjs.entry.js.map +1 -1
  17. package/dist/cjs/road-badge_14.cjs.entry.js +44 -7
  18. package/dist/cjs/road-badge_14.cjs.entry.js.map +1 -1
  19. package/dist/cjs/road-chip.cjs.entry.js +1 -1
  20. package/dist/cjs/road-chip.cjs.entry.js.map +1 -1
  21. package/dist/cjs/road-dropdown.cjs.entry.js +1 -1
  22. package/dist/cjs/road-dropdown.cjs.entry.js.map +1 -1
  23. package/dist/cjs/road-navbar.cjs.entry.js +1 -1
  24. package/dist/cjs/road-navbar.cjs.entry.js.map +1 -1
  25. package/dist/cjs/road-plate-number.cjs.entry.js +1 -1
  26. package/dist/cjs/road-plate-number.cjs.entry.js.map +1 -1
  27. package/dist/cjs/road-segmented-button.cjs.entry.js +1 -1
  28. package/dist/cjs/road-segmented-button.cjs.entry.js.map +1 -1
  29. package/dist/cjs/road-select.cjs.entry.js +1 -1
  30. package/dist/cjs/road-select.cjs.entry.js.map +1 -1
  31. package/dist/cjs/road-tab-button.cjs.entry.js +1 -1
  32. package/dist/cjs/road-tab-button.cjs.entry.js.map +1 -1
  33. package/dist/cjs/road-textarea.cjs.entry.js +1 -1
  34. package/dist/cjs/road-textarea.cjs.entry.js.map +1 -1
  35. package/dist/cjs/road-tooltip.cjs.entry.js +14 -2
  36. package/dist/cjs/road-tooltip.cjs.entry.js.map +1 -1
  37. package/dist/cjs/roadtrip.cjs.js +1 -1
  38. package/dist/cjs/utils-5483e9fa.js +82 -0
  39. package/dist/cjs/utils-5483e9fa.js.map +1 -0
  40. package/dist/collection/collection-manifest.json +1 -0
  41. package/dist/collection/components/accordion/accordion.css +4 -7
  42. package/dist/collection/components/accordion/accordion.stories.js +10 -2
  43. package/dist/collection/components/asset/asset.css +22 -0
  44. package/dist/collection/components/asset/asset.js +231 -0
  45. package/dist/collection/components/asset/asset.js.map +1 -0
  46. package/dist/collection/components/asset/asset.stories.js +42 -0
  47. package/dist/collection/components/asset/request.js +33 -0
  48. package/dist/collection/components/asset/request.js.map +1 -0
  49. package/dist/collection/components/asset/svg/ecomobiliste-baseline-fr.svg +9 -0
  50. package/dist/collection/components/asset/svg/ecomobiliste-es.svg +22 -0
  51. package/dist/collection/components/asset/svg/ecomobiliste-fr.svg +9 -0
  52. package/dist/collection/components/asset/svg/ecomobiliste-inverse-baseline-fr.svg +9 -0
  53. package/dist/collection/components/asset/svg/ecomobiliste-inverse-es.svg +22 -0
  54. package/dist/collection/components/asset/svg/ecomobiliste-inverse-fr.svg +9 -0
  55. package/dist/collection/components/asset/svg/ecomobiliste-inverse-it.svg +21 -0
  56. package/dist/collection/components/asset/svg/ecomobiliste-it.svg +21 -0
  57. package/dist/collection/components/asset/utils.js +73 -0
  58. package/dist/collection/components/asset/utils.js.map +1 -0
  59. package/dist/collection/components/asset/validate.js +44 -0
  60. package/dist/collection/components/asset/validate.js.map +1 -0
  61. package/dist/collection/components/avatar/avatar.css +5 -2
  62. package/dist/collection/components/button/button.css +5 -3
  63. package/dist/collection/components/chip/chip.css +2 -0
  64. package/dist/collection/components/counter/counter.css +0 -5
  65. package/dist/collection/components/counter/counter.js +11 -1
  66. package/dist/collection/components/counter/counter.js.map +1 -1
  67. package/dist/collection/components/drawer/drawer.js +63 -2
  68. package/dist/collection/components/drawer/drawer.js.map +1 -1
  69. package/dist/collection/components/drawer/drawer.stories.js +9 -1
  70. package/dist/collection/components/dropdown/dropdown.css +5 -4
  71. package/dist/collection/components/global-navigation/global-navigation.stories.js +4 -4
  72. package/dist/collection/components/input/input.css +2 -2
  73. package/dist/collection/components/navbar/navbar.css +2 -2
  74. package/dist/collection/components/navbar/navbar.stories.js +1 -1
  75. package/dist/collection/components/plate-number/plate-number.css +1 -3
  76. package/dist/collection/components/segmented-button/segmented-button.css +1 -1
  77. package/dist/collection/components/select/select.css +0 -5
  78. package/dist/collection/components/tab-button/tab-button.css +7 -1
  79. package/dist/collection/components/textarea/textarea.css +0 -1
  80. package/dist/collection/components/toolbar/toolbar.css +3 -3
  81. package/dist/collection/components/tooltip/tooltip.css +7 -2
  82. package/dist/collection/components/tooltip/tooltip.js +14 -2
  83. package/dist/collection/components/tooltip/tooltip.js.map +1 -1
  84. package/dist/collection/components/tooltip/tooltip.stories.js +2 -2
  85. package/dist/collection/index.js +1 -0
  86. package/dist/collection/index.js.map +1 -1
  87. package/dist/esm/index-52302079.js +4 -0
  88. package/dist/esm/index.js +1 -0
  89. package/dist/esm/index.js.map +1 -1
  90. package/dist/esm/loader.js +1 -1
  91. package/dist/esm/road-accordion.entry.js +1 -1
  92. package/dist/esm/road-accordion.entry.js.map +1 -1
  93. package/dist/esm/road-asset.entry.js +163 -0
  94. package/dist/esm/road-asset.entry.js.map +1 -0
  95. package/dist/esm/road-avatar.entry.js +1 -1
  96. package/dist/esm/road-avatar.entry.js.map +1 -1
  97. package/dist/esm/road-badge_14.entry.js +44 -7
  98. package/dist/esm/road-badge_14.entry.js.map +1 -1
  99. package/dist/esm/road-chip.entry.js +1 -1
  100. package/dist/esm/road-chip.entry.js.map +1 -1
  101. package/dist/esm/road-dropdown.entry.js +1 -1
  102. package/dist/esm/road-dropdown.entry.js.map +1 -1
  103. package/dist/esm/road-navbar.entry.js +1 -1
  104. package/dist/esm/road-navbar.entry.js.map +1 -1
  105. package/dist/esm/road-plate-number.entry.js +1 -1
  106. package/dist/esm/road-plate-number.entry.js.map +1 -1
  107. package/dist/esm/road-segmented-button.entry.js +1 -1
  108. package/dist/esm/road-segmented-button.entry.js.map +1 -1
  109. package/dist/esm/road-select.entry.js +1 -1
  110. package/dist/esm/road-select.entry.js.map +1 -1
  111. package/dist/esm/road-tab-button.entry.js +1 -1
  112. package/dist/esm/road-tab-button.entry.js.map +1 -1
  113. package/dist/esm/road-textarea.entry.js +1 -1
  114. package/dist/esm/road-textarea.entry.js.map +1 -1
  115. package/dist/esm/road-tooltip.entry.js +14 -2
  116. package/dist/esm/road-tooltip.entry.js.map +1 -1
  117. package/dist/esm/roadtrip.js +1 -1
  118. package/dist/esm/utils-158dc960.js +77 -0
  119. package/dist/esm/utils-158dc960.js.map +1 -0
  120. package/dist/html.html-data.json +52 -1
  121. package/dist/roadtrip/index.esm.js +1 -1
  122. package/dist/roadtrip/p-10903095.entry.js +2 -0
  123. package/dist/roadtrip/p-10903095.entry.js.map +1 -0
  124. package/dist/roadtrip/p-4111f5f2.entry.js +2 -0
  125. package/dist/roadtrip/p-4111f5f2.entry.js.map +1 -0
  126. package/dist/roadtrip/p-48fad2ec.entry.js +2 -0
  127. package/dist/roadtrip/p-48fad2ec.entry.js.map +1 -0
  128. package/dist/roadtrip/{p-31cf9b61.entry.js → p-548b3e44.entry.js} +2 -2
  129. package/dist/roadtrip/{p-31cf9b61.entry.js.map → p-548b3e44.entry.js.map} +1 -1
  130. package/dist/roadtrip/p-631eca8b.entry.js +2 -0
  131. package/dist/roadtrip/p-631eca8b.entry.js.map +1 -0
  132. package/dist/roadtrip/p-6ff5ec7c.entry.js +2 -0
  133. package/dist/roadtrip/p-6ff5ec7c.entry.js.map +1 -0
  134. package/dist/roadtrip/p-73f81e81.entry.js +2 -0
  135. package/dist/roadtrip/p-73f81e81.entry.js.map +1 -0
  136. package/dist/roadtrip/p-98cd42c5.entry.js +2 -0
  137. package/dist/roadtrip/p-98cd42c5.entry.js.map +1 -0
  138. package/dist/roadtrip/p-a0cde368.entry.js +2 -0
  139. package/dist/roadtrip/p-a0cde368.entry.js.map +1 -0
  140. package/dist/roadtrip/p-a77727f2.entry.js +2 -0
  141. package/dist/roadtrip/p-a77727f2.entry.js.map +1 -0
  142. package/dist/roadtrip/p-c0f80d9b.js +2 -0
  143. package/dist/roadtrip/p-c0f80d9b.js.map +1 -0
  144. package/dist/roadtrip/p-d9c73068.entry.js +2 -0
  145. package/dist/roadtrip/{p-0c4ae774.entry.js.map → p-d9c73068.entry.js.map} +1 -1
  146. package/dist/roadtrip/p-f0a7c904.entry.js +2 -0
  147. package/dist/roadtrip/p-f0a7c904.entry.js.map +1 -0
  148. package/dist/roadtrip/p-fc41f5e6.entry.js +2 -0
  149. package/dist/roadtrip/p-fc41f5e6.entry.js.map +1 -0
  150. package/dist/roadtrip/roadtrip.css +1 -1
  151. package/dist/roadtrip/roadtrip.esm.js +1 -1
  152. package/dist/roadtrip/roadtrip.esm.js.map +1 -1
  153. package/dist/roadtrip/svg/ecomobiliste-baseline-fr.svg +9 -0
  154. package/dist/roadtrip/svg/ecomobiliste-es.svg +22 -0
  155. package/dist/roadtrip/svg/ecomobiliste-fr.svg +9 -0
  156. package/dist/roadtrip/svg/ecomobiliste-inverse-baseline-fr.svg +9 -0
  157. package/dist/roadtrip/svg/ecomobiliste-inverse-es.svg +22 -0
  158. package/dist/roadtrip/svg/ecomobiliste-inverse-fr.svg +9 -0
  159. package/dist/roadtrip/svg/ecomobiliste-inverse-it.svg +21 -0
  160. package/dist/roadtrip/svg/ecomobiliste-it.svg +21 -0
  161. package/dist/types/components/asset/asset.d.ts +44 -0
  162. package/dist/types/components/asset/request.d.ts +2 -0
  163. package/dist/types/components/asset/utils.d.ts +11 -0
  164. package/dist/types/components/asset/validate.d.ts +2 -0
  165. package/dist/types/components/drawer/drawer.d.ts +12 -0
  166. package/dist/types/components/tooltip/tooltip.d.ts +3 -1
  167. package/dist/types/components.d.ts +87 -2
  168. package/dist/types/index.d.ts +1 -0
  169. package/hydrate/index.js +179 -19
  170. package/package.json +2 -1
  171. package/dist/roadtrip/p-08b0be1b.entry.js +0 -2
  172. package/dist/roadtrip/p-08b0be1b.entry.js.map +0 -1
  173. package/dist/roadtrip/p-0c4ae774.entry.js +0 -2
  174. package/dist/roadtrip/p-14ecc91e.entry.js +0 -2
  175. package/dist/roadtrip/p-14ecc91e.entry.js.map +0 -1
  176. package/dist/roadtrip/p-38099006.entry.js +0 -2
  177. package/dist/roadtrip/p-38099006.entry.js.map +0 -1
  178. package/dist/roadtrip/p-3c2da24f.entry.js +0 -2
  179. package/dist/roadtrip/p-3c2da24f.entry.js.map +0 -1
  180. package/dist/roadtrip/p-4001ab77.entry.js +0 -2
  181. package/dist/roadtrip/p-4001ab77.entry.js.map +0 -1
  182. package/dist/roadtrip/p-78e9bbd5.entry.js +0 -2
  183. package/dist/roadtrip/p-78e9bbd5.entry.js.map +0 -1
  184. package/dist/roadtrip/p-91455bc9.entry.js +0 -2
  185. package/dist/roadtrip/p-91455bc9.entry.js.map +0 -1
  186. package/dist/roadtrip/p-b09c076d.entry.js +0 -2
  187. package/dist/roadtrip/p-b09c076d.entry.js.map +0 -1
  188. package/dist/roadtrip/p-c653d32d.entry.js +0 -2
  189. package/dist/roadtrip/p-c653d32d.entry.js.map +0 -1
  190. package/dist/roadtrip/p-cfa6e719.entry.js +0 -2
  191. package/dist/roadtrip/p-cfa6e719.entry.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/components/asset/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,UAAkB,EAAE,EAAE;EACpD,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;EAC1C,GAAG,CAAC,SAAS,GAAG,UAAU,CAAC;EAE3B,oDAAoD;EACpD,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;IACnD,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE;MACtD,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;KACpC;GACF;EAED,gCAAgC;EAChC,MAAM,MAAM,GAAG,GAAG,CAAC,iBAAiB,CAAC;EACrC,IAAI,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE;IACrD,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IACpD,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,QAAQ,GAAG,aAAa,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAEhE,8BAA8B;IAC9B,6CAA6C;IAC7C,uBAAuB;IACvB,IAAI,OAAO,CAAC,MAAa,CAAC,EAAE;MAC1B,OAAO,GAAG,CAAC,SAAS,CAAC;KACtB;GACF;EACD,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,GAAgB,EAAE,EAAE;EAC1C,IAAI,GAAG,CAAC,QAAQ,KAAK,CAAC,EAAE;IACtB,IAAI,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,QAAQ,EAAE;MAC3C,OAAO,KAAK,CAAC;KACd;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;MAC9C,MAAM,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;MACpC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;QACvD,OAAO,KAAK,CAAC;OACd;KACF;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;MAC9C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAQ,CAAC,EAAE;QACtC,OAAO,KAAK,CAAC;OACd;KACF;GACF;EACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC","sourcesContent":["import { isStr } from './utils';\n\nexport const validateContent = (svgContent: string) => {\n const div = document.createElement('div');\n div.innerHTML = svgContent;\n\n // setup this way to ensure it works on our buddy IE\n for (let i = div.childNodes.length - 1; i >= 0; i--) {\n if (div.childNodes[i].nodeName.toLowerCase() !== 'svg') {\n div.removeChild(div.childNodes[i]);\n }\n }\n\n // must only have 1 root element\n const svgElm = div.firstElementChild;\n if (svgElm && svgElm.nodeName.toLowerCase() === 'svg') {\n const svgClass = svgElm.getAttribute('class') || '';\n svgElm.setAttribute('class', (svgClass + ' s-ion-icon').trim());\n\n // root element must be an svg\n // lets double check we've got valid elements\n // do not allow scripts\n if (isValid(svgElm as any)) {\n return div.innerHTML;\n }\n }\n return '';\n};\n\nexport const isValid = (elm: HTMLElement) => {\n if (elm.nodeType === 1) {\n if (elm.nodeName.toLowerCase() === 'script') {\n return false;\n }\n\n for (let i = 0; i < elm.attributes.length; i++) {\n const val = elm.attributes[i].value;\n if (isStr(val) && val.toLowerCase().indexOf('on') === 0) {\n return false;\n }\n }\n\n for (let i = 0; i < elm.childNodes.length; i++) {\n if (!isValid(elm.childNodes[i] as any)) {\n return false;\n }\n }\n }\n return true;\n};\n"]}
@@ -33,10 +33,13 @@
33
33
  transition: box-shadow 0.5s;
34
34
  }
35
35
 
36
- :host(:hover),
36
+ :host(:hover){
37
+ box-shadow: 0 0 0 4px var(--road-primary-80);
38
+ }
39
+
37
40
  :host(.focus-visible),
38
41
  :host(:focus){
39
- box-shadow: 0 0 0 4px var(--road-primary-80);
42
+ outline: auto;
40
43
  }
41
44
 
42
45
 
@@ -65,9 +65,11 @@
65
65
  }
66
66
 
67
67
  :host(.focus-visible) {
68
- outline: 0;
68
+ text-decoration: underline;
69
+ outline: auto;
69
70
  }
70
71
 
72
+
71
73
  /**
72
74
  * Native button
73
75
  */
@@ -98,7 +100,6 @@
98
100
  cursor: pointer;
99
101
  background: transparent;
100
102
  border: none;
101
- outline: 0;
102
103
  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
103
104
  }
104
105
 
@@ -129,6 +130,7 @@
129
130
  :host(.btn-primary:not([disabled]):hover),
130
131
  :host(.btn-primary:not([disabled]).focus-visible) {
131
132
  background: var(--road-button-primary-variant);
133
+ outline: 0;
132
134
  }
133
135
 
134
136
  /**
@@ -217,7 +219,7 @@
217
219
 
218
220
  :host(.btn-outline-primary) {
219
221
  color: var(--road-button-primary);
220
- border-color: var(--road-button-primary);
222
+ border-color: var(--road-button-tertiary-outline);
221
223
  }
222
224
 
223
225
  :host(.btn-outline-primary) ::slotted(road-icon) {
@@ -135,8 +135,10 @@
135
135
 
136
136
  :host(.chip-outline:focus-visible) {
137
137
  border-color: var(--road-outline-variant);
138
+ outline: auto;
138
139
  }
139
140
 
140
141
  :host(.chip-secondary.focus-visible) {
141
142
  background: var(--road-button-primary-variant);
143
+ outline: auto;
142
144
  }
@@ -26,11 +26,6 @@ road-input {
26
26
  --margin-bottom: 0;
27
27
  }
28
28
 
29
- .test{
30
- display: none;
31
- }
32
-
33
-
34
29
  /* BUTTONS
35
30
  -------------------- */
36
31
 
@@ -93,7 +93,17 @@ export class Counter {
93
93
  this.onValueChange(this.value);
94
94
  }
95
95
  componentDidLoad() {
96
- // Cacher le label pour accessibilité
96
+ const buttons = this.el.querySelectorAll('road-button');
97
+ // Ajouter les événements pour chaque road-button
98
+ buttons.forEach((btn) => {
99
+ btn.addEventListener('touchstart', () => {
100
+ btn.style.backgroundColor = 'var(--road-button-tertiary-variant)'; // Appliquer le style hover
101
+ });
102
+ btn.addEventListener('touchend', () => {
103
+ btn.style.backgroundColor = 'var(--road-surface)'; // Supprimer le style hover après touchend
104
+ });
105
+ });
106
+ // Accessibilité : Cacher le label
97
107
  const label = this.el.querySelector('.form-label');
98
108
  const input = this.el.querySelector('.form-control.sc-road-input');
99
109
  if (label) {
@@ -1 +1 @@
1
- {"version":3,"file":"counter.js","sourceRoot":"","sources":["../../../src/components/counter/counter.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, h, Prop, Element, Event, EventEmitter, State, Watch } from '@stencil/core';\n\n@Component({\n tag: 'road-counter',\n styleUrl: 'counter.css',\n scoped: true,\n})\nexport class Counter {\n\n @Element() el!: HTMLRoadCounterElement;\n\n iconCounterLess!: HTMLRoadIconElement;\n\n inputElement!: HTMLRoadInputElement;\n\n @State() leftIconClasses: string = \"\";\n\n @State() rightIconClasses: string = \"\";\n\n @State() isDustbinVisible: boolean = false;\n\n /**\n * The id of counter\n */\n @Prop() inputId: string = `road-counter-${counterIds++}`;\n\n /**\n * The minimum value, which must not be greater than its maximum (max attribute) value.\n */\n @Prop() min: number = 0;\n\n /**\n * The maximum value, which must not be less than its minimum (min attribute) value.\n */\n @Prop() max?: number;\n\n /**\n * Works with the min and max attributes to limit the increments at which a value can be set.\n * Possible values are: `\"any\"` or a positive floating point number.\n */\n @Prop() step?: string;\n\n /**\n * The value of the counter.\n */\n @Prop() value: number = 1;\n\n /**\n * The size of the counter.\n */\n @Prop() size?: 'sm' | 'md' | 'lg' = \"lg\";\n\n /**\n * Set to `true` to add the dustbin icon if the value is equal to the min.\n */\n @Prop() dustbin: boolean = false;\n\n /**\n * Set to `true` to not modify the input field\n */\n @Prop() readonly: boolean = false;\n\n /**\n * Emitted when the plus button is clicked\n */\n @Event() roadIncrease!: EventEmitter<{\n value: number | undefined | null;\n }>;\n\n /**\n * Emitted when the minus button is clicked\n */\n @Event() roadDecrease!: EventEmitter<{\n value: number | undefined | null;\n }>;\n\n /**\n * Emitted when the minus button is clicked\n */\n @Event() roadChange!: EventEmitter<{\n value: number | undefined | null;\n }>;\n\n /**\n * Emitted when the dustbin is clicked\n */\n @Event() roadDustbinClick!: EventEmitter<void>;\n\n @Watch('value')\n private onValueChange(valueInput: number) {\n this.setIsDustbinVisible(valueInput);\n this.setIconsClasses(valueInput);\n }\n\n private setIconsClasses(valueInput?: number) {\n valueInput = valueInput ?? parseInt(this.inputElement.querySelector('input')!.value as string);\n\n this.leftIconClasses = valueInput <= this.min && !this.dustbin ? \"disabled\" : \"\";\n this.rightIconClasses = this.max && valueInput >= this.max ? \"disabled\" : \"\";\n }\n\n private setIsDustbinVisible = (valueInput: number) => {\n if (valueInput > this.min) {\n this.isDustbinVisible = false;\n } else if (this.dustbin) {\n this.isDustbinVisible = true;\n }\n else {\n this.isDustbinVisible = false;\n }\n }\n\n private increase = () => {\n (this.inputElement as unknown as HTMLInputElement).querySelector('input')!.stepUp();\n let valueInput = parseInt(this.inputElement.querySelector('input')!.value as string);\n if(!valueInput) {\n valueInput = this.min\n };\n this.onValueChange(valueInput);\n this.roadIncrease.emit({ value: valueInput });\n };\n\n private decrease = () => {\n if(this.isDustbinVisible){\n this.roadDustbinClick.emit();\n return;\n }\n\n (this.inputElement as unknown as HTMLInputElement).querySelector('input')!.stepDown();\n\n let valueInput = parseInt(this.inputElement.querySelector('input')!.value as string);\n if(!valueInput) {\n valueInput = this.min\n };\n this.onValueChange(valueInput);\n\n this.roadDecrease.emit({ value: valueInput });\n };\n\n private checkValue = (ev: Event) => {\n const input = ev.target as HTMLInputElement;\n const value = input.value && parseInt(input.value)\n\n if (value == null || value === \"\") return;\n\n if (value < this.min) {\n input.value = this.min.toString()\n }\n else if (this.max && value > this.max) {\n input.value = this.max.toString()\n }\n\n this.onValueChange(parseInt(input.value));\n }\n\n private onRoadChange = (ev: Event) => {\n ev.stopPropagation();\n const input = ev.target as HTMLInputElement;\n const value = input.value && parseInt(input.value)\n if (value !== null && value !== \"\") {\n if (value < this.min) {\n this.roadChange.emit({ value: this.min });\n }\n else if (this.max && value > this.max) {\n this.roadChange.emit({ value: this.max });\n }\n else {\n this.roadChange.emit({ value: parseInt(input.value) });\n }\n }\n else {\n this.roadChange.emit({ value: null });\n }\n };\n\n componentWillLoad() {\n this.onValueChange(this.value);\n }\n\n componentDidLoad() {\n // Cacher le label pour accessibilité\n\n const label = this.el.querySelector('.form-label') as HTMLElement;\n const input = this.el.querySelector('.form-control.sc-road-input') as HTMLElement;\n if (label) {\n label.style.clip = 'rect(0 0 0 0)';\n label.style.border = '0';\n label.style.height = '1px';\n label.style.left = '0';\n label.style.margin = '-1px';\n label.style.overflow = 'hidden';\n label.style.padding = '0';\n label.style.position = 'absolute';\n label.style.top = '0';\n label.style.width = '1px';\n\n input.style.padding = '0 1rem 0';\n \n }\n }\n\n render() {\n\n const dataCi = this.isDustbinVisible ? \"road-dustbin\" : \"\";\n\n return (\n <road-input-group\n class={this.size && `counter-${this.size}`}\n >\n <road-button\n slot=\"prepend\"\n size={this.size}\n onClick={this.decrease}\n class={this.leftIconClasses}\n data-cy=\"road-decrease\"\n >\n <road-icon\n name={this.isDustbinVisible ? \"delete-forever\" : \"navigation-add-less\"}\n ref={(el) => this.iconCounterLess = el as HTMLRoadIconElement}\n size={this.size}\n data-cy={dataCi}\n role=\"button\"\n />\n </road-button>\n <road-input\n ref={(el) => this.inputElement = el as HTMLRoadInputElement}\n type=\"number\"\n min={this.min.toString()}\n max={(this.max && this.max.toString()) as string}\n step={this.step}\n value={this.value}\n onRoadChange={this.onRoadChange}\n onKeyUp={this.checkValue}\n data-cy=\"road-input-counter\"\n readonly={this.readonly}\n label=\"Quantité\"\n />\n <road-button\n slot=\"append\"\n size={this.size}\n onClick={this.increase}\n class={this.rightIconClasses}\n data-cy=\"road-increase\"\n >\n <road-icon\n name=\"navigation-add-more\"\n size={this.size}\n role=\"button\"\n />\n </road-button>\n </road-input-group>\n );\n }\n}\n\nlet counterIds = 0;\n"]}
1
+ {"version":3,"file":"counter.js","sourceRoot":"","sources":["../../../src/components/counter/counter.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, h, Prop, Element, Event, EventEmitter, State, Watch } from '@stencil/core';\n\n@Component({\n tag: 'road-counter',\n styleUrl: 'counter.css',\n scoped: true,\n})\nexport class Counter {\n\n @Element() el!: HTMLRoadCounterElement;\n\n iconCounterLess!: HTMLRoadIconElement;\n inputElement!: HTMLRoadInputElement;\n\n @State() leftIconClasses: string = \"\";\n @State() rightIconClasses: string = \"\";\n @State() isDustbinVisible: boolean = false;\n\n /**\n * The id of counter\n */\n @Prop() inputId: string = `road-counter-${counterIds++}`;\n\n /**\n * The minimum value, which must not be greater than its maximum (max attribute) value.\n */\n @Prop() min: number = 0;\n\n /**\n * The maximum value, which must not be less than its minimum (min attribute) value.\n */\n @Prop() max?: number;\n\n /**\n * Works with the min and max attributes to limit the increments at which a value can be set.\n * Possible values are: `\"any\"` or a positive floating point number.\n */\n @Prop() step?: string;\n\n /**\n * The value of the counter.\n */\n @Prop() value: number = 1;\n\n /**\n * The size of the counter.\n */\n @Prop() size?: 'sm' | 'md' | 'lg' = \"lg\";\n\n /**\n * Set to `true` to add the dustbin icon if the value is equal to the min.\n */\n @Prop() dustbin: boolean = false;\n\n /**\n * Set to `true` to not modify the input field\n */\n @Prop() readonly: boolean = false;\n\n /**\n * Emitted when the plus button is clicked\n */\n @Event() roadIncrease!: EventEmitter<{\n value: number | undefined | null;\n }>;\n\n /**\n * Emitted when the minus button is clicked\n */\n @Event() roadDecrease!: EventEmitter<{\n value: number | undefined | null;\n }>;\n\n /**\n * Emitted when the minus button is clicked\n */\n @Event() roadChange!: EventEmitter<{\n value: number | undefined | null;\n }>;\n\n /**\n * Emitted when the dustbin is clicked\n */\n @Event() roadDustbinClick!: EventEmitter<void>;\n\n @Watch('value')\n private onValueChange(valueInput: number) {\n this.setIsDustbinVisible(valueInput);\n this.setIconsClasses(valueInput);\n }\n\n private setIconsClasses(valueInput?: number) {\n valueInput = valueInput ?? parseInt(this.inputElement.querySelector('input')!.value as string);\n\n this.leftIconClasses = valueInput <= this.min && !this.dustbin ? \"disabled\" : \"\";\n this.rightIconClasses = this.max && valueInput >= this.max ? \"disabled\" : \"\";\n }\n\n private setIsDustbinVisible = (valueInput: number) => {\n if (valueInput > this.min) {\n this.isDustbinVisible = false;\n } else if (this.dustbin) {\n this.isDustbinVisible = true;\n }\n else {\n this.isDustbinVisible = false;\n }\n }\n\n private increase = () => {\n (this.inputElement as unknown as HTMLInputElement).querySelector('input')!.stepUp();\n let valueInput = parseInt(this.inputElement.querySelector('input')!.value as string);\n if(!valueInput) {\n valueInput = this.min\n };\n this.onValueChange(valueInput);\n this.roadIncrease.emit({ value: valueInput });\n };\n\n private decrease = () => {\n if(this.isDustbinVisible){\n this.roadDustbinClick.emit();\n return;\n }\n\n (this.inputElement as unknown as HTMLInputElement).querySelector('input')!.stepDown();\n\n let valueInput = parseInt(this.inputElement.querySelector('input')!.value as string);\n if(!valueInput) {\n valueInput = this.min\n };\n this.onValueChange(valueInput);\n\n this.roadDecrease.emit({ value: valueInput });\n };\n\n private checkValue = (ev: Event) => {\n const input = ev.target as HTMLInputElement;\n const value = input.value && parseInt(input.value)\n\n if (value == null || value === \"\") return;\n\n if (value < this.min) {\n input.value = this.min.toString()\n }\n else if (this.max && value > this.max) {\n input.value = this.max.toString()\n }\n\n this.onValueChange(parseInt(input.value));\n }\n\n private onRoadChange = (ev: Event) => {\n ev.stopPropagation();\n const input = ev.target as HTMLInputElement;\n const value = input.value && parseInt(input.value)\n if (value !== null && value !== \"\") {\n if (value < this.min) {\n this.roadChange.emit({ value: this.min });\n }\n else if (this.max && value > this.max) {\n this.roadChange.emit({ value: this.max });\n }\n else {\n this.roadChange.emit({ value: parseInt(input.value) });\n }\n }\n else {\n this.roadChange.emit({ value: null });\n }\n };\n\n componentWillLoad() {\n this.onValueChange(this.value);\n }\n\n componentDidLoad() {\n const buttons = this.el.querySelectorAll('road-button') as NodeListOf<HTMLRoadButtonElement>;\n\n // Ajouter les événements pour chaque road-button\n buttons.forEach((btn) => {\n btn.addEventListener('touchstart', () => {\n btn.style.backgroundColor = 'var(--road-button-tertiary-variant)'; // Appliquer le style hover\n });\n \n btn.addEventListener('touchend', () => {\n btn.style.backgroundColor = 'var(--road-surface)'; // Supprimer le style hover après touchend\n });\n });\n\n // Accessibilité : Cacher le label\n const label = this.el.querySelector('.form-label') as HTMLElement;\n const input = this.el.querySelector('.form-control.sc-road-input') as HTMLElement;\n if (label) {\n label.style.clip = 'rect(0 0 0 0)';\n label.style.border = '0';\n label.style.height = '1px';\n label.style.left = '0';\n label.style.margin = '-1px';\n label.style.overflow = 'hidden';\n label.style.padding = '0';\n label.style.position = 'absolute';\n label.style.top = '0';\n label.style.width = '1px';\n\n input.style.padding = '0 1rem 0';\n \n }\n }\n\n render() {\n\n const dataCi = this.isDustbinVisible ? \"road-dustbin\" : \"\";\n\n return (\n <road-input-group\n class={this.size && `counter-${this.size}`}\n >\n <road-button\n slot=\"prepend\"\n size={this.size}\n onClick={this.decrease}\n class={this.leftIconClasses}\n data-cy=\"road-decrease\"\n >\n <road-icon\n name={this.isDustbinVisible ? \"delete-forever\" : \"navigation-add-less\"}\n ref={(el) => this.iconCounterLess = el as HTMLRoadIconElement}\n size={this.size}\n data-cy={dataCi}\n role=\"button\"\n />\n </road-button>\n <road-input\n ref={(el) => this.inputElement = el as HTMLRoadInputElement}\n type=\"number\"\n min={this.min.toString()}\n max={(this.max && this.max.toString()) as string}\n step={this.step}\n value={this.value}\n onRoadChange={this.onRoadChange}\n onKeyUp={this.checkValue}\n data-cy=\"road-input-counter\"\n readonly={this.readonly}\n label=\"Quantité\"\n />\n <road-button\n slot=\"append\"\n size={this.size}\n onClick={this.increase}\n class={this.rightIconClasses}\n data-cy=\"road-increase\"\n >\n <road-icon\n name=\"navigation-add-more\"\n size={this.size}\n role=\"button\"\n />\n </road-button>\n </road-input-group>\n );\n }\n}\n\nlet counterIds = 0;\n"]}
@@ -35,6 +35,8 @@ export class Drawer {
35
35
  this.backText = undefined;
36
36
  this.drawerTitle = undefined;
37
37
  this.ariaLabel = undefined;
38
+ this.ariaLabelBack = undefined;
39
+ this.ariaLabelClose = undefined;
38
40
  this.hasCloseIcon = true;
39
41
  }
40
42
  /**
@@ -55,9 +57,22 @@ export class Drawer {
55
57
  async back() {
56
58
  this.onBack.emit();
57
59
  }
60
+ // @Watch('isOpen')
61
+ // handleOpen(openValue: boolean) {
62
+ // if(openValue === true) {
63
+ // this.onOpen.emit();
64
+ // } else {
65
+ // this.el.addEventListener('transitionend', () => {
66
+ // this.onClose.emit();
67
+ // this.el.shadowRoot && ((this.el.shadowRoot.querySelector('.drawer-body') as HTMLElement).scrollTop = 0);
68
+ // }, { once: true});
69
+ // }
70
+ // }
58
71
  handleOpen(openValue) {
59
72
  if (openValue === true) {
60
73
  this.onOpen.emit();
74
+ // Focus the first button element after the drawer is opened
75
+ setTimeout(() => this.focusFirstButton(), 50); // Add a slight delay to ensure the element is rendered
61
76
  }
62
77
  else {
63
78
  this.el.addEventListener('transitionend', () => {
@@ -66,6 +81,16 @@ export class Drawer {
66
81
  }, { once: true });
67
82
  }
68
83
  }
84
+ /**
85
+ * Find and focus the first button element in the drawer
86
+ */
87
+ focusFirstButton() {
88
+ var _a;
89
+ const buttonElement = (_a = this.el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('button');
90
+ if (buttonElement) {
91
+ buttonElement.focus(); // Focus the first button element
92
+ }
93
+ }
69
94
  /**
70
95
  * Close the dialog when press Escape key
71
96
  */
@@ -90,9 +115,11 @@ export class Drawer {
90
115
  const drawerIsOpenClass = this.isOpen ? 'drawer-open' : '';
91
116
  const inverseHeaderClass = this.hasInverseHeader ? 'drawer-header-inverse' : '';
92
117
  const ariaLabel = this.ariaLabel !== undefined ? this.ariaLabel : 'drawer';
118
+ const ariaLabelBack = this.ariaLabelBack !== undefined ? this.ariaLabelBack : 'Back';
119
+ const ariaLabelClose = this.ariaLabelClose !== undefined ? this.ariaLabelClose : 'Close';
93
120
  const drawerDelimiterClass = this.drawerTitle !== undefined && !this.hasInverseHeader ? 'drawer-delimiter' : '';
94
- const backIconElement = this.hasBackIcon ? h("button", { type: "button", class: "drawer-action", "aria-label": "Back", onClick: this.onClickBack }, h("road-icon", { icon: navigationChevron, rotate: "180" }), this.backText) : '';
95
- const closeIconElement = this.hasCloseIcon ? h("button", { type: "button", class: "drawer-close", onClick: this.onClick, "aria-label": "Close" }, h("road-icon", { icon: navigationClose, "aria-hidden": "true" })) : '';
121
+ const backIconElement = this.hasBackIcon ? h("button", { type: "button", class: "drawer-action", "aria-label": `${ariaLabelBack}`, onClick: this.onClickBack }, h("road-icon", { icon: navigationChevron, rotate: "180" }), this.backText) : '';
122
+ const closeIconElement = this.hasCloseIcon ? h("button", { type: "button", class: "drawer-close", onClick: this.onClick, "aria-label": `${ariaLabelClose}` }, h("road-icon", { icon: navigationClose, "aria-hidden": "true" })) : '';
96
123
  const drawerWidthValue = this.position === 'bottom' ? '100%' : this.drawerWidth + 'px';
97
124
  return (h(Host, { class: `${drawerIsOpenClass} drawer-${this.position}`, tabindex: "0", role: "dialog", "aria-label": `${ariaLabel}` }, h("div", { class: "drawer-overlay", onClick: this.onClick, tabindex: "-1" }), h("div", { class: "drawer-dialog", style: { maxWidth: `${drawerWidthValue}` }, role: "document", tabindex: "0" }, h("div", { class: "drawer-content" }, h("header", { class: `drawer-header ${inverseHeaderClass} ${drawerDelimiterClass}` }, backIconElement, this.drawerTitle !== undefined ? h("h2", { class: "drawer-title" }, this.drawerTitle) : h("div", { class: "drawer-title" }, h("slot", { name: "title" })), closeIconElement), h("div", { class: "drawer-body" }, h("slot", null)), this.hasFooterContent() && (h("footer", { class: "drawer-footer" }, h("slot", { name: "footer" })))))));
98
125
  }
@@ -251,6 +278,40 @@ export class Drawer {
251
278
  "attribute": "aria-label",
252
279
  "reflect": false
253
280
  },
281
+ "ariaLabelBack": {
282
+ "type": "string",
283
+ "mutable": false,
284
+ "complexType": {
285
+ "original": "string",
286
+ "resolved": "string | undefined",
287
+ "references": {}
288
+ },
289
+ "required": false,
290
+ "optional": true,
291
+ "docs": {
292
+ "tags": [],
293
+ "text": "Aria label of the drawer"
294
+ },
295
+ "attribute": "aria-label-back",
296
+ "reflect": false
297
+ },
298
+ "ariaLabelClose": {
299
+ "type": "string",
300
+ "mutable": false,
301
+ "complexType": {
302
+ "original": "string",
303
+ "resolved": "string | undefined",
304
+ "references": {}
305
+ },
306
+ "required": false,
307
+ "optional": true,
308
+ "docs": {
309
+ "tags": [],
310
+ "text": "Aria label of the drawer"
311
+ },
312
+ "attribute": "aria-label-close",
313
+ "reflect": false
314
+ },
254
315
  "hasCloseIcon": {
255
316
  "type": "boolean",
256
317
  "mutable": false,
@@ -1 +1 @@
1
- {"version":3,"file":"drawer.js","sourceRoot":"","sources":["../../../src/components/drawer/drawer.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Element, Event, EventEmitter, Listen, Method, Prop, h, Host, Watch } from '@stencil/core';\nimport { navigationClose, navigationChevron } from '../../../icons';\n\n/**\n * @slot - Content of the drawer.\n * @slot title - replace the title with a custom title section when `'drawerTitle'` is not set\n * @slot footer - footer of the drawer\n * `<div slot=\"footer\">`\n `<road-button color=\"primary\" outline=\"true\" expand=\"true\">Annuler</road-button>`\n `<road-button color=\"primary\" expand=\"true\" class=\"mb-0\">Valider</road-button>`\n ` </div>`\n */\n\n\n@Component({\n tag: 'road-drawer',\n styleUrl: 'drawer.css',\n shadow: true,\n})\nexport class Drawer {\n\n /**\n * Current reference of the drawer\n */\n @Element() el!: HTMLRoadDrawerElement;\n\n /**\n * Set isOpen property to true to open the drawer\n */\n @Prop({ mutable: true }) isOpen: boolean = false;\n\n /**\n * position of the drawer. e.g. left, right, bottom\n */\n @Prop() position: string = 'left';\n\n /**\n * Width of the drawer\n */\n @Prop() drawerWidth: number = 480;\n\n /**\n * Inverse header colors\n */\n @Prop() hasInverseHeader: boolean = false;\n\n /**\n * Show / hide back icon\n */\n @Prop() hasBackIcon: boolean = false;\n\n /**\n * Show / hide back icon\n */\n @Prop() backText?: string;\n\n /**\n * Title of the drawer in the header bar\n */\n @Prop() drawerTitle?: string;\n\n /**\n * Aria label of the drawer\n */\n @Prop() ariaLabel?: string;\n\n /**\n * Show / hide close icon\n */\n @Prop() hasCloseIcon: boolean = true;\n\n /**\n * Indicate when opening the drawer\n */\n @Event({ eventName: 'open' }) onOpen!: EventEmitter<void>;\n\n /**\n * Indicate when closing the drawer\n */\n @Event({ eventName: 'close' }) onClose!: EventEmitter<void>;\n\n /**\n * Indicate when return to previous state of the drawer content\n */\n @Event({ eventName: 'back' }) onBack!: EventEmitter<void>;\n\n /**\n * Open the drawer\n */\n @Method()\n async open() {\n this.isOpen = true;\n }\n\n /**\n * Close the drawer\n */\n @Method()\n async close() {\n this.isOpen = false;\n }\n\n /**\n * Return to previous state of the drawer content\n */\n @Method()\n async back() {\n this.onBack.emit();\n }\n\n @Watch('isOpen')\n handleOpen(openValue: boolean) {\n if(openValue === true) {\n this.onOpen.emit();\n } else {\n this.el.addEventListener('transitionend', () => {\n this.onClose.emit();\n this.el.shadowRoot && ((this.el.shadowRoot.querySelector('.drawer-body') as HTMLElement).scrollTop = 0);\n }, { once: true});\n }\n }\n\n /**\n * Close the dialog when clicking on the cross or layer\n */\n private onClick = (ev: UIEvent) => {\n ev.stopPropagation();\n ev.preventDefault();\n\n this.close();\n };\n\n /**\n * Close the dialog when clicking on the cross or layer\n */\n private onClickBack = (event: MouseEvent) => {\n event.stopPropagation();\n event.preventDefault();\n\n this.back();\n };\n\n /**\n * Close the dialog when press Escape key\n */\n @Listen('keyup', { target: 'document' })\n onEscape(event: KeyboardEvent) {\n if (event.key === 'Escape' || event.key === \"Esc\") {\n this.close();\n }\n }\n\n /**\n * Call close function when clicking an element with data-dismiss=\"modal\" attribute\n */\n componentDidLoad() {\n this.el.querySelectorAll('[data-dismiss=\"modal\"]').forEach(item => {\n item.addEventListener('click', () => this.close());\n });\n }\n\n private hasFooterContent(): boolean {\n const footerSlot = this.el.querySelector('[slot=\"footer\"]');\n return footerSlot !== null && footerSlot.childElementCount > 0;\n }\n\n render() {\n const drawerIsOpenClass = this.isOpen ? 'drawer-open' : '';\n const inverseHeaderClass = this.hasInverseHeader ? 'drawer-header-inverse' : '';\n const ariaLabel = this.ariaLabel !== undefined ? this.ariaLabel : 'drawer';\n const drawerDelimiterClass = this.drawerTitle !== undefined && !this.hasInverseHeader ? 'drawer-delimiter' : '';\n const backIconElement = this.hasBackIcon ? <button type=\"button\" class=\"drawer-action\" aria-label=\"Back\" onClick={this.onClickBack}><road-icon icon={navigationChevron} rotate=\"180\"></road-icon>{this.backText}</button> : '';\n const closeIconElement = this.hasCloseIcon ? <button type=\"button\" class=\"drawer-close\" onClick={this.onClick} aria-label=\"Close\"><road-icon icon={navigationClose} aria-hidden=\"true\"></road-icon></button> : '';\n const drawerWidthValue = this.position === 'bottom' ? '100%' : this.drawerWidth + 'px';\n\n return (\n <Host class={`${drawerIsOpenClass} drawer-${this.position}`} tabindex=\"0\" role=\"dialog\" aria-label={`${ariaLabel}`}>\n <div class=\"drawer-overlay\" onClick={this.onClick} tabindex=\"-1\"></div>\n <div class=\"drawer-dialog\" style={{ maxWidth: `${drawerWidthValue}` }} role=\"document\" tabindex=\"0\">\n <div class=\"drawer-content\">\n <header class={`drawer-header ${inverseHeaderClass} ${drawerDelimiterClass}`}>\n {backIconElement}\n {this.drawerTitle !== undefined ? <h2 class=\"drawer-title\">{this.drawerTitle}</h2> : <div class=\"drawer-title\"><slot name=\"title\" /></div>}\n {closeIconElement}\n </header>\n <div class=\"drawer-body\">\n <slot/>\n </div>\n {this.hasFooterContent() && (\n <footer class=\"drawer-footer\">\n <slot name=\"footer\"/>\n </footer>\n )}\n </div>\n </div>\n </Host>\n );\n }\n}"]}
1
+ {"version":3,"file":"drawer.js","sourceRoot":"","sources":["../../../src/components/drawer/drawer.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Element, Event, EventEmitter, Listen, Method, Prop, h, Host, Watch } from '@stencil/core';\nimport { navigationClose, navigationChevron } from '../../../icons';\n\n/**\n * @slot - Content of the drawer.\n * @slot title - replace the title with a custom title section when `'drawerTitle'` is not set\n * @slot footer - footer of the drawer\n * `<div slot=\"footer\">`\n `<road-button color=\"primary\" outline=\"true\" expand=\"true\">Annuler</road-button>`\n `<road-button color=\"primary\" expand=\"true\" class=\"mb-0\">Valider</road-button>`\n ` </div>`\n */\n\n\n@Component({\n tag: 'road-drawer',\n styleUrl: 'drawer.css',\n shadow: true,\n})\nexport class Drawer {\n\n /**\n * Current reference of the drawer\n */\n @Element() el!: HTMLRoadDrawerElement;\n\n /**\n * Set isOpen property to true to open the drawer\n */\n @Prop({ mutable: true }) isOpen: boolean = false;\n\n /**\n * position of the drawer. e.g. left, right, bottom\n */\n @Prop() position: string = 'left';\n\n /**\n * Width of the drawer\n */\n @Prop() drawerWidth: number = 480;\n\n /**\n * Inverse header colors\n */\n @Prop() hasInverseHeader: boolean = false;\n\n /**\n * Show / hide back icon\n */\n @Prop() hasBackIcon: boolean = false;\n\n /**\n * Show / hide back icon\n */\n @Prop() backText?: string;\n\n /**\n * Title of the drawer in the header bar\n */\n @Prop() drawerTitle?: string;\n\n /**\n * Aria label of the drawer\n */\n @Prop() ariaLabel?: string;\n\n /**\n * Aria label of the drawer\n */\n @Prop() ariaLabelBack?: string;\n\n /**\n * Aria label of the drawer\n */\n @Prop() ariaLabelClose?: string;\n\n /**\n * Show / hide close icon\n */\n @Prop() hasCloseIcon: boolean = true;\n\n /**\n * Indicate when opening the drawer\n */\n @Event({ eventName: 'open' }) onOpen!: EventEmitter<void>;\n\n /**\n * Indicate when closing the drawer\n */\n @Event({ eventName: 'close' }) onClose!: EventEmitter<void>;\n\n /**\n * Indicate when return to previous state of the drawer content\n */\n @Event({ eventName: 'back' }) onBack!: EventEmitter<void>;\n\n /**\n * Open the drawer\n */\n @Method()\n async open() {\n this.isOpen = true;\n }\n\n /**\n * Close the drawer\n */\n @Method()\n async close() {\n this.isOpen = false;\n }\n\n /**\n * Return to previous state of the drawer content\n */\n @Method()\n async back() {\n this.onBack.emit();\n }\n\n // @Watch('isOpen')\n // handleOpen(openValue: boolean) {\n // if(openValue === true) {\n // this.onOpen.emit();\n // } else {\n // this.el.addEventListener('transitionend', () => {\n // this.onClose.emit();\n // this.el.shadowRoot && ((this.el.shadowRoot.querySelector('.drawer-body') as HTMLElement).scrollTop = 0);\n // }, { once: true});\n // }\n // }\n\n\n @Watch('isOpen')\n handleOpen(openValue: boolean) {\n if(openValue === true) {\n this.onOpen.emit();\n // Focus the first button element after the drawer is opened\n setTimeout(() => this.focusFirstButton(), 50); // Add a slight delay to ensure the element is rendered\n } else {\n this.el.addEventListener('transitionend', () => {\n this.onClose.emit();\n this.el.shadowRoot && ((this.el.shadowRoot.querySelector('.drawer-body') as HTMLElement).scrollTop = 0);\n }, { once: true });\n }\n }\n \n /**\n * Find and focus the first button element in the drawer\n */\n private focusFirstButton() {\n const buttonElement = this.el.shadowRoot?.querySelector('button') as HTMLElement;\n \n if (buttonElement) {\n buttonElement.focus(); // Focus the first button element\n }\n }\n \n\n /**\n * Close the dialog when clicking on the cross or layer\n */\n private onClick = (ev: UIEvent) => {\n ev.stopPropagation();\n ev.preventDefault();\n\n this.close();\n };\n\n /**\n * Close the dialog when clicking on the cross or layer\n */\n private onClickBack = (event: MouseEvent) => {\n event.stopPropagation();\n event.preventDefault();\n\n this.back();\n };\n\n /**\n * Close the dialog when press Escape key\n */\n @Listen('keyup', { target: 'document' })\n onEscape(event: KeyboardEvent) {\n if (event.key === 'Escape' || event.key === \"Esc\") {\n this.close();\n }\n }\n\n /**\n * Call close function when clicking an element with data-dismiss=\"modal\" attribute\n */\n componentDidLoad() {\n this.el.querySelectorAll('[data-dismiss=\"modal\"]').forEach(item => {\n item.addEventListener('click', () => this.close());\n });\n }\n\n private hasFooterContent(): boolean {\n const footerSlot = this.el.querySelector('[slot=\"footer\"]');\n return footerSlot !== null && footerSlot.childElementCount > 0;\n }\n\n render() {\n const drawerIsOpenClass = this.isOpen ? 'drawer-open' : '';\n const inverseHeaderClass = this.hasInverseHeader ? 'drawer-header-inverse' : '';\n const ariaLabel = this.ariaLabel !== undefined ? this.ariaLabel : 'drawer';\n const ariaLabelBack = this.ariaLabelBack !== undefined ? this.ariaLabelBack : 'Back';\n const ariaLabelClose = this.ariaLabelClose !== undefined ? this.ariaLabelClose : 'Close';\n const drawerDelimiterClass = this.drawerTitle !== undefined && !this.hasInverseHeader ? 'drawer-delimiter' : '';\n const backIconElement = this.hasBackIcon ? <button type=\"button\" class=\"drawer-action\" aria-label={`${ariaLabelBack}`} onClick={this.onClickBack}><road-icon icon={navigationChevron} rotate=\"180\"></road-icon>{this.backText}</button> : '';\n const closeIconElement = this.hasCloseIcon ? <button type=\"button\" class=\"drawer-close\" onClick={this.onClick} aria-label={`${ariaLabelClose}`}><road-icon icon={navigationClose} aria-hidden=\"true\"></road-icon></button> : '';\n const drawerWidthValue = this.position === 'bottom' ? '100%' : this.drawerWidth + 'px';\n\n return (\n <Host class={`${drawerIsOpenClass} drawer-${this.position}`} tabindex=\"0\" role=\"dialog\" aria-label={`${ariaLabel}`}>\n <div class=\"drawer-overlay\" onClick={this.onClick} tabindex=\"-1\"></div>\n <div class=\"drawer-dialog\" style={{ maxWidth: `${drawerWidthValue}` }} role=\"document\" tabindex=\"0\">\n <div class=\"drawer-content\">\n <header class={`drawer-header ${inverseHeaderClass} ${drawerDelimiterClass}`}>\n {backIconElement}\n {this.drawerTitle !== undefined ? <h2 class=\"drawer-title\">{this.drawerTitle}</h2> : <div class=\"drawer-title\"><slot name=\"title\" /></div>}\n {closeIconElement}\n </header>\n <div class=\"drawer-body\">\n <slot/>\n </div>\n {this.hasFooterContent() && (\n <footer class=\"drawer-footer\">\n <slot name=\"footer\"/>\n </footer>\n )}\n </div>\n </div>\n </Host>\n );\n }\n}"]}
@@ -58,6 +58,12 @@ export default {
58
58
  'aria-label': {
59
59
  control: 'text',
60
60
  },
61
+ 'aria-label-back': {
62
+ control: 'text',
63
+ },
64
+ 'aria-label-close': {
65
+ control: 'text',
66
+ },
61
67
  ' ': {
62
68
  control: 'text',
63
69
  },
@@ -160,7 +166,7 @@ export default {
160
166
  };
161
167
 
162
168
  const Template = (args) => html`
163
- <road-drawer
169
+ <road-drawer
164
170
  is-open="${ifDefined(args['is-open'])}"
165
171
  position="${ifDefined(args.position)}"
166
172
  has-back-icon="${ifDefined(args['has-back-icon'])}"
@@ -170,6 +176,8 @@ const Template = (args) => html`
170
176
  drawer-width="${ifDefined(args['drawer-width'])}"
171
177
  drawer-title="${ifDefined(args['drawer-title'])}"
172
178
  aria-label="${ifDefined(args['aria-label'])}"
179
+ aria-label-back="${ifDefined(args['aria-label-back'])}"
180
+ aria-label-close="${ifDefined(args['aria-label-close'])}"
173
181
  >
174
182
  ${unsafeHTML(args['title'])}
175
183
  ${unsafeHTML(args[' '])}
@@ -28,7 +28,6 @@
28
28
  display: block;
29
29
  background-color: var(--road-surface);
30
30
  border-radius: 0.25rem;
31
- outline: none;
32
31
  }
33
32
 
34
33
  .dropdown summary:focus,
@@ -137,7 +136,6 @@
137
136
  cursor: pointer;
138
137
  background: var(--road-surface);
139
138
  border: none;
140
- outline: none;
141
139
  }
142
140
 
143
141
  .dropdown-item-border {
@@ -149,9 +147,12 @@
149
147
  * Hover state
150
148
  */
151
149
 
152
- .dropdown-item:hover,
153
- .dropdown-item.focus-visible {
150
+ .dropdown-item:hover {
154
151
  background: var(--road-surface-inverse);
155
152
  }
156
153
 
154
+ .dropdown-item.focus-visible{
155
+ outline: auto;
156
+ }
157
+
157
158
 
@@ -166,22 +166,22 @@ export default {
166
166
  <road-icon slot="end" name="edit-outline" size="sm" class="mr-8"></road-icon>
167
167
  </road-item>
168
168
 
169
- <road-item class="bg-white" button="true">
169
+ <road-item class="bg-white border-0" button="true">
170
170
  <road-icon name="scan"></road-icon>
171
171
  Scan
172
172
  </road-item>
173
173
 
174
- <road-item class="bg-white" button="true">
174
+ <road-item class="bg-white border-0" button="true">
175
175
  <road-icon name="file-catalog"></road-icon>
176
176
  Catalogue
177
177
  </road-item>
178
178
 
179
- <road-item class="bg-white" button="true">
179
+ <road-item class="bg-white border-0" button="true">
180
180
  <road-icon name="Diagnostic"></road-icon>
181
181
  Diagnostic
182
182
  </road-item>
183
183
 
184
- <road-item class="bg-white border-top" button="true">
184
+ <road-item class="bg-white border-left-0 border-right-0 border-bottom-0 border-top" button="true">
185
185
  <road-icon name="log-out"></road-icon>
186
186
  Log out
187
187
  </road-item>
@@ -121,9 +121,9 @@
121
121
  /* stylelint-enable */
122
122
 
123
123
  .form-control:not(:disabled):focus,
124
- .form-control[autofocus] {
124
+ .form-control[autofocus],
125
+ .form-control:focus-visible{
125
126
  border-color: var(--road-input-outline-variant);
126
- outline: 0;
127
127
  }
128
128
 
129
129
  /**
@@ -25,7 +25,7 @@
25
25
  -webkit-user-select: none;
26
26
  user-select: none;
27
27
  background-color: var(--road-surface);
28
- border-top: 1px solid var(--road-outline);
28
+ border-top: 1px solid var(--road-outline-weak);
29
29
  }
30
30
 
31
31
  @media (max-width: 576px) {
@@ -43,7 +43,7 @@
43
43
  width: 104px;
44
44
  height: 100%;
45
45
  border-top: 0;
46
- border-right: 1px solid var(--road-outline);
46
+ border-right: 1px solid var(--road-outline-weak);
47
47
  }
48
48
  }
49
49
 
@@ -139,7 +139,7 @@ export default {
139
139
  Diagnostic
140
140
  </road-item>
141
141
 
142
- <road-item class="bg-white border-top border-0" button="true">
142
+ <road-item class="bg-white border-left-0 border-right-0 border-bottom-0 border-top" button="true">
143
143
  <road-icon name="log-out" aria-hidden="true"></road-icon>
144
144
  Log out
145
145
  </road-item>
@@ -87,7 +87,6 @@
87
87
  background: var(--road-surface);
88
88
  border: 1px solid var(--road-input-outline);
89
89
  border-radius: 0;
90
- outline: 0;
91
90
  box-shadow: none;
92
91
  appearance: none;
93
92
  }
@@ -130,8 +129,7 @@
130
129
  */
131
130
 
132
131
  .plate-number-input:not([readonly]):focus {
133
- border-color: var(--road-input-outline-variant);
134
- outline: 0;
132
+ outline: auto;
135
133
  }
136
134
 
137
135
  /* MOTORBIKE
@@ -82,7 +82,7 @@
82
82
 
83
83
  :host(.focus-visible) {
84
84
  background: var(--road-primary-90);
85
- outline: 0;
85
+ outline: auto;
86
86
  }
87
87
 
88
88
  :host(.tab-selected.focus-visible){
@@ -76,11 +76,6 @@
76
76
  transform: scale(0.625) translateY(-0.625rem);
77
77
  }
78
78
 
79
- .form-select:not(:disabled):focus {
80
- border-color: var(--road-input-outline-variant);
81
- outline: 0;
82
- }
83
-
84
79
  /**
85
80
  * Disabled state
86
81
  */
@@ -69,6 +69,7 @@
69
69
 
70
70
  :host(.focus-visible) {
71
71
  background: var(--tab-background-focused);
72
+ outline: auto;
72
73
  }
73
74
 
74
75
 
@@ -163,9 +164,14 @@
163
164
 
164
165
  :host ::slotted(road-label) {
165
166
  display: -webkit-box;
167
+ max-width: 12.5rem;
168
+ overflow: hidden;
166
169
  font-size: 1rem;
167
- -webkit-line-clamp: 2;
170
+ color: var(--road-on-surface);
171
+ -webkit-line-clamp: 1;
168
172
  -webkit-box-orient: vertical;
173
+ text-align: center;
174
+ text-overflow: ellipsis;
169
175
  white-space: inherit;
170
176
  }
171
177
 
@@ -82,7 +82,6 @@
82
82
 
83
83
  .form-control:not(:disabled):focus {
84
84
  border-color: var(--road-input-outline-variant);
85
- outline: 0;
86
85
  }
87
86
 
88
87
  /**
@@ -16,7 +16,7 @@
16
16
  contain: content;
17
17
  color: var(--road-on-surface);
18
18
  background: var(--road-surface);
19
- border-bottom: 1px solid var(--road-outline);
19
+ border-bottom: 1px solid var(--road-outline-weak);
20
20
  }
21
21
 
22
22
  /* CONTAINER
@@ -110,7 +110,7 @@
110
110
  align-self: auto;
111
111
  font-size: var(--road-font-size-14);
112
112
  font-weight: 400;
113
- border-right: 1px solid var(--road-outline);
113
+ border-right: 1px solid var(--road-outline-weak);
114
114
  border-radius: 0;
115
115
  }
116
116
 
@@ -122,7 +122,7 @@
122
122
 
123
123
  font-size: var(--road-font-size-14);
124
124
  font-weight: 400;
125
- border-left: 1px solid var(--road-outline);
125
+ border-left: 1px solid var(--road-outline-weak);
126
126
  border-radius: 0;
127
127
  }
128
128
 
@@ -16,7 +16,7 @@
16
16
  -------------------- */
17
17
 
18
18
  :host {
19
- --max-width: 100%;
19
+ --max-width: 85vw;
20
20
  --z-index: 1;
21
21
  --width: max-content;
22
22
 
@@ -24,6 +24,11 @@
24
24
  display: inline-block;
25
25
  }
26
26
 
27
+ :host(:hover) {
28
+ cursor: pointer;
29
+ }
30
+
31
+
27
32
  :host([trigger="hover"]) .tooltip {
28
33
  display: none;
29
34
  }
@@ -41,7 +46,7 @@
41
46
  left: 50%;
42
47
  z-index: 1;
43
48
  width: var(--width);
44
- min-width: 6rem;
49
+ min-width: 100%;
45
50
  max-width: var(--max-width);
46
51
  padding: 0.5rem;
47
52
  font-family: var(--road-font);
@@ -21,6 +21,16 @@ export class Tooltip {
21
21
  this.close();
22
22
  }
23
23
  };
24
+ this.onFocus = () => {
25
+ if (this.hasTrigger('focus') || this.hasTrigger('hover')) {
26
+ this.open();
27
+ }
28
+ };
29
+ this.onBlur = () => {
30
+ if (this.hasTrigger('focus') || this.hasTrigger('hover')) {
31
+ this.close();
32
+ }
33
+ };
24
34
  this.tooltipId = `road-tooltip-${++tooltipIds}`;
25
35
  this.content = '';
26
36
  this.position = 'top';
@@ -45,7 +55,9 @@ export class Tooltip {
45
55
  return triggers.includes(triggerType);
46
56
  }
47
57
  render() {
48
- return (h(Host, { onMouseOver: this.onMouseOver, onMouseOut: this.onMouseOut, onClick: this.onClick, "data-tooltip-position": this.position }, h("slot", { "aria-describedby": this.tooltipId }), h("div", { part: "tooltip", id: this.tooltipId, class: {
58
+ return (h(Host, { onMouseOver: this.onMouseOver, onMouseOut: this.onMouseOut, onClick: this.onClick, onFocus: this.onFocus, onBlur: this.onBlur, tabindex: "0" // Makes the element focusable
59
+ ,
60
+ "data-tooltip-position": this.position }, h("slot", { "aria-describedby": this.tooltipId }), h("div", { part: "tooltip", id: this.tooltipId, class: {
49
61
  tooltip: true,
50
62
  'tooltip-open': this.isOpen,
51
63
  }, role: "tooltip", "aria-hidden": !this.isOpen ? 'true' : 'false' }, this.content, h("slot", { name: "tooltip-content" }))));
@@ -166,7 +178,7 @@ export class Tooltip {
166
178
  "optional": false,
167
179
  "docs": {
168
180
  "tags": [],
169
- "text": "Controls how the tooltip is activated. Possible options include `click`, `hover`. Multiple\noptions can be passed by separating them with a space. When manual is used, the tooltip must be activated\nprogrammatically."
181
+ "text": "Controls how the tooltip is activated. Possible options include `click`, `hover`, `focus`. Multiple\noptions can be passed by separating them with a space. When manual is used, the tooltip must be activated\nprogrammatically."
170
182
  },
171
183
  "attribute": "trigger",
172
184
  "reflect": false,