@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.
- package/assets/assets.svg +1 -0
- package/assets/index.d.ts +7 -0
- package/assets/index.js +1 -0
- package/dist/assets/assets.svg +1 -0
- package/dist/assets/index.d.ts +7 -0
- package/dist/assets/index.js +1 -0
- package/dist/cjs/index-12592729.js +4 -0
- package/dist/cjs/index.cjs.js +2 -0
- package/dist/cjs/index.cjs.js.map +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/road-accordion.cjs.entry.js +1 -1
- package/dist/cjs/road-accordion.cjs.entry.js.map +1 -1
- package/dist/cjs/road-asset.cjs.entry.js +167 -0
- package/dist/cjs/road-asset.cjs.entry.js.map +1 -0
- package/dist/cjs/road-avatar.cjs.entry.js +1 -1
- package/dist/cjs/road-avatar.cjs.entry.js.map +1 -1
- package/dist/cjs/road-badge_14.cjs.entry.js +44 -7
- package/dist/cjs/road-badge_14.cjs.entry.js.map +1 -1
- package/dist/cjs/road-chip.cjs.entry.js +1 -1
- package/dist/cjs/road-chip.cjs.entry.js.map +1 -1
- package/dist/cjs/road-dropdown.cjs.entry.js +1 -1
- package/dist/cjs/road-dropdown.cjs.entry.js.map +1 -1
- package/dist/cjs/road-navbar.cjs.entry.js +1 -1
- package/dist/cjs/road-navbar.cjs.entry.js.map +1 -1
- package/dist/cjs/road-plate-number.cjs.entry.js +1 -1
- package/dist/cjs/road-plate-number.cjs.entry.js.map +1 -1
- package/dist/cjs/road-segmented-button.cjs.entry.js +1 -1
- package/dist/cjs/road-segmented-button.cjs.entry.js.map +1 -1
- package/dist/cjs/road-select.cjs.entry.js +1 -1
- package/dist/cjs/road-select.cjs.entry.js.map +1 -1
- package/dist/cjs/road-tab-button.cjs.entry.js +1 -1
- package/dist/cjs/road-tab-button.cjs.entry.js.map +1 -1
- package/dist/cjs/road-textarea.cjs.entry.js +1 -1
- package/dist/cjs/road-textarea.cjs.entry.js.map +1 -1
- package/dist/cjs/road-tooltip.cjs.entry.js +14 -2
- package/dist/cjs/road-tooltip.cjs.entry.js.map +1 -1
- package/dist/cjs/roadtrip.cjs.js +1 -1
- package/dist/cjs/utils-5483e9fa.js +82 -0
- package/dist/cjs/utils-5483e9fa.js.map +1 -0
- package/dist/collection/collection-manifest.json +1 -0
- package/dist/collection/components/accordion/accordion.css +4 -7
- package/dist/collection/components/accordion/accordion.stories.js +10 -2
- package/dist/collection/components/asset/asset.css +22 -0
- package/dist/collection/components/asset/asset.js +231 -0
- package/dist/collection/components/asset/asset.js.map +1 -0
- package/dist/collection/components/asset/asset.stories.js +42 -0
- package/dist/collection/components/asset/request.js +33 -0
- package/dist/collection/components/asset/request.js.map +1 -0
- package/dist/collection/components/asset/svg/ecomobiliste-baseline-fr.svg +9 -0
- package/dist/collection/components/asset/svg/ecomobiliste-es.svg +22 -0
- package/dist/collection/components/asset/svg/ecomobiliste-fr.svg +9 -0
- package/dist/collection/components/asset/svg/ecomobiliste-inverse-baseline-fr.svg +9 -0
- package/dist/collection/components/asset/svg/ecomobiliste-inverse-es.svg +22 -0
- package/dist/collection/components/asset/svg/ecomobiliste-inverse-fr.svg +9 -0
- package/dist/collection/components/asset/svg/ecomobiliste-inverse-it.svg +21 -0
- package/dist/collection/components/asset/svg/ecomobiliste-it.svg +21 -0
- package/dist/collection/components/asset/utils.js +73 -0
- package/dist/collection/components/asset/utils.js.map +1 -0
- package/dist/collection/components/asset/validate.js +44 -0
- package/dist/collection/components/asset/validate.js.map +1 -0
- package/dist/collection/components/avatar/avatar.css +5 -2
- package/dist/collection/components/button/button.css +5 -3
- package/dist/collection/components/chip/chip.css +2 -0
- package/dist/collection/components/counter/counter.css +0 -5
- package/dist/collection/components/counter/counter.js +11 -1
- package/dist/collection/components/counter/counter.js.map +1 -1
- package/dist/collection/components/drawer/drawer.js +63 -2
- package/dist/collection/components/drawer/drawer.js.map +1 -1
- package/dist/collection/components/drawer/drawer.stories.js +9 -1
- package/dist/collection/components/dropdown/dropdown.css +5 -4
- package/dist/collection/components/global-navigation/global-navigation.stories.js +4 -4
- package/dist/collection/components/input/input.css +2 -2
- package/dist/collection/components/navbar/navbar.css +2 -2
- package/dist/collection/components/navbar/navbar.stories.js +1 -1
- package/dist/collection/components/plate-number/plate-number.css +1 -3
- package/dist/collection/components/segmented-button/segmented-button.css +1 -1
- package/dist/collection/components/select/select.css +0 -5
- package/dist/collection/components/tab-button/tab-button.css +7 -1
- package/dist/collection/components/textarea/textarea.css +0 -1
- package/dist/collection/components/toolbar/toolbar.css +3 -3
- package/dist/collection/components/tooltip/tooltip.css +7 -2
- package/dist/collection/components/tooltip/tooltip.js +14 -2
- package/dist/collection/components/tooltip/tooltip.js.map +1 -1
- package/dist/collection/components/tooltip/tooltip.stories.js +2 -2
- package/dist/collection/index.js +1 -0
- package/dist/collection/index.js.map +1 -1
- package/dist/esm/index-52302079.js +4 -0
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/road-accordion.entry.js +1 -1
- package/dist/esm/road-accordion.entry.js.map +1 -1
- package/dist/esm/road-asset.entry.js +163 -0
- package/dist/esm/road-asset.entry.js.map +1 -0
- package/dist/esm/road-avatar.entry.js +1 -1
- package/dist/esm/road-avatar.entry.js.map +1 -1
- package/dist/esm/road-badge_14.entry.js +44 -7
- package/dist/esm/road-badge_14.entry.js.map +1 -1
- package/dist/esm/road-chip.entry.js +1 -1
- package/dist/esm/road-chip.entry.js.map +1 -1
- package/dist/esm/road-dropdown.entry.js +1 -1
- package/dist/esm/road-dropdown.entry.js.map +1 -1
- package/dist/esm/road-navbar.entry.js +1 -1
- package/dist/esm/road-navbar.entry.js.map +1 -1
- package/dist/esm/road-plate-number.entry.js +1 -1
- package/dist/esm/road-plate-number.entry.js.map +1 -1
- package/dist/esm/road-segmented-button.entry.js +1 -1
- package/dist/esm/road-segmented-button.entry.js.map +1 -1
- package/dist/esm/road-select.entry.js +1 -1
- package/dist/esm/road-select.entry.js.map +1 -1
- package/dist/esm/road-tab-button.entry.js +1 -1
- package/dist/esm/road-tab-button.entry.js.map +1 -1
- package/dist/esm/road-textarea.entry.js +1 -1
- package/dist/esm/road-textarea.entry.js.map +1 -1
- package/dist/esm/road-tooltip.entry.js +14 -2
- package/dist/esm/road-tooltip.entry.js.map +1 -1
- package/dist/esm/roadtrip.js +1 -1
- package/dist/esm/utils-158dc960.js +77 -0
- package/dist/esm/utils-158dc960.js.map +1 -0
- package/dist/html.html-data.json +52 -1
- package/dist/roadtrip/index.esm.js +1 -1
- package/dist/roadtrip/p-10903095.entry.js +2 -0
- package/dist/roadtrip/p-10903095.entry.js.map +1 -0
- package/dist/roadtrip/p-4111f5f2.entry.js +2 -0
- package/dist/roadtrip/p-4111f5f2.entry.js.map +1 -0
- package/dist/roadtrip/p-48fad2ec.entry.js +2 -0
- package/dist/roadtrip/p-48fad2ec.entry.js.map +1 -0
- package/dist/roadtrip/{p-31cf9b61.entry.js → p-548b3e44.entry.js} +2 -2
- package/dist/roadtrip/{p-31cf9b61.entry.js.map → p-548b3e44.entry.js.map} +1 -1
- package/dist/roadtrip/p-631eca8b.entry.js +2 -0
- package/dist/roadtrip/p-631eca8b.entry.js.map +1 -0
- package/dist/roadtrip/p-6ff5ec7c.entry.js +2 -0
- package/dist/roadtrip/p-6ff5ec7c.entry.js.map +1 -0
- package/dist/roadtrip/p-73f81e81.entry.js +2 -0
- package/dist/roadtrip/p-73f81e81.entry.js.map +1 -0
- package/dist/roadtrip/p-98cd42c5.entry.js +2 -0
- package/dist/roadtrip/p-98cd42c5.entry.js.map +1 -0
- package/dist/roadtrip/p-a0cde368.entry.js +2 -0
- package/dist/roadtrip/p-a0cde368.entry.js.map +1 -0
- package/dist/roadtrip/p-a77727f2.entry.js +2 -0
- package/dist/roadtrip/p-a77727f2.entry.js.map +1 -0
- package/dist/roadtrip/p-c0f80d9b.js +2 -0
- package/dist/roadtrip/p-c0f80d9b.js.map +1 -0
- package/dist/roadtrip/p-d9c73068.entry.js +2 -0
- package/dist/roadtrip/{p-0c4ae774.entry.js.map → p-d9c73068.entry.js.map} +1 -1
- package/dist/roadtrip/p-f0a7c904.entry.js +2 -0
- package/dist/roadtrip/p-f0a7c904.entry.js.map +1 -0
- package/dist/roadtrip/p-fc41f5e6.entry.js +2 -0
- package/dist/roadtrip/p-fc41f5e6.entry.js.map +1 -0
- package/dist/roadtrip/roadtrip.css +1 -1
- package/dist/roadtrip/roadtrip.esm.js +1 -1
- package/dist/roadtrip/roadtrip.esm.js.map +1 -1
- package/dist/roadtrip/svg/ecomobiliste-baseline-fr.svg +9 -0
- package/dist/roadtrip/svg/ecomobiliste-es.svg +22 -0
- package/dist/roadtrip/svg/ecomobiliste-fr.svg +9 -0
- package/dist/roadtrip/svg/ecomobiliste-inverse-baseline-fr.svg +9 -0
- package/dist/roadtrip/svg/ecomobiliste-inverse-es.svg +22 -0
- package/dist/roadtrip/svg/ecomobiliste-inverse-fr.svg +9 -0
- package/dist/roadtrip/svg/ecomobiliste-inverse-it.svg +21 -0
- package/dist/roadtrip/svg/ecomobiliste-it.svg +21 -0
- package/dist/types/components/asset/asset.d.ts +44 -0
- package/dist/types/components/asset/request.d.ts +2 -0
- package/dist/types/components/asset/utils.d.ts +11 -0
- package/dist/types/components/asset/validate.d.ts +2 -0
- package/dist/types/components/drawer/drawer.d.ts +12 -0
- package/dist/types/components/tooltip/tooltip.d.ts +3 -1
- package/dist/types/components.d.ts +87 -2
- package/dist/types/index.d.ts +1 -0
- package/hydrate/index.js +179 -19
- package/package.json +2 -1
- package/dist/roadtrip/p-08b0be1b.entry.js +0 -2
- package/dist/roadtrip/p-08b0be1b.entry.js.map +0 -1
- package/dist/roadtrip/p-0c4ae774.entry.js +0 -2
- package/dist/roadtrip/p-14ecc91e.entry.js +0 -2
- package/dist/roadtrip/p-14ecc91e.entry.js.map +0 -1
- package/dist/roadtrip/p-38099006.entry.js +0 -2
- package/dist/roadtrip/p-38099006.entry.js.map +0 -1
- package/dist/roadtrip/p-3c2da24f.entry.js +0 -2
- package/dist/roadtrip/p-3c2da24f.entry.js.map +0 -1
- package/dist/roadtrip/p-4001ab77.entry.js +0 -2
- package/dist/roadtrip/p-4001ab77.entry.js.map +0 -1
- package/dist/roadtrip/p-78e9bbd5.entry.js +0 -2
- package/dist/roadtrip/p-78e9bbd5.entry.js.map +0 -1
- package/dist/roadtrip/p-91455bc9.entry.js +0 -2
- package/dist/roadtrip/p-91455bc9.entry.js.map +0 -1
- package/dist/roadtrip/p-b09c076d.entry.js +0 -2
- package/dist/roadtrip/p-b09c076d.entry.js.map +0 -1
- package/dist/roadtrip/p-c653d32d.entry.js +0 -2
- package/dist/roadtrip/p-c653d32d.entry.js.map +0 -1
- package/dist/roadtrip/p-cfa6e719.entry.js +0 -2
- 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
|
-
|
|
42
|
+
outline: auto;
|
|
40
43
|
}
|
|
41
44
|
|
|
42
45
|
|
|
@@ -65,9 +65,11 @@
|
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
:host(.focus-visible) {
|
|
68
|
-
|
|
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-
|
|
222
|
+
border-color: var(--road-button-tertiary-outline);
|
|
221
223
|
}
|
|
222
224
|
|
|
223
225
|
:host(.btn-outline-primary) ::slotted(road-icon) {
|
|
@@ -93,7 +93,17 @@ export class Counter {
|
|
|
93
93
|
this.onValueChange(this.value);
|
|
94
94
|
}
|
|
95
95
|
componentDidLoad() {
|
|
96
|
-
|
|
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":
|
|
95
|
-
const closeIconElement = this.hasCloseIcon ? h("button", { type: "button", class: "drawer-close", onClick: this.onClick, "aria-label":
|
|
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-
|
|
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
|
-
|
|
134
|
-
outline: 0;
|
|
132
|
+
outline: auto;
|
|
135
133
|
}
|
|
136
134
|
|
|
137
135
|
/* MOTORBIKE
|
|
@@ -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
|
-
-
|
|
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
|
|
|
@@ -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:
|
|
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:
|
|
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,
|
|
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,
|