@spw-ds/spw-stencil-library 1.2.4 → 1.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (212) hide show
  1. package/dist/cjs/loader.cjs.js +1 -1
  2. package/dist/cjs/spw-button.spw-loading.entry.cjs.js.map +1 -1
  3. package/dist/cjs/spw-button_2.cjs.entry.js +1 -1
  4. package/dist/cjs/spw-button_2.cjs.entry.js.map +1 -1
  5. package/dist/cjs/spw-custom-select.cjs.entry.js +43 -7
  6. package/dist/cjs/spw-custom-select.cjs.entry.js.map +1 -1
  7. package/dist/cjs/spw-custom-select.entry.cjs.js.map +1 -1
  8. package/dist/cjs/spw-date-picker.cjs.entry.js +48 -28
  9. package/dist/cjs/spw-date-picker.cjs.entry.js.map +1 -1
  10. package/dist/cjs/spw-date-picker.entry.cjs.js.map +1 -1
  11. package/dist/cjs/spw-field-label.spw-group.spw-icon.spw-link.spw-separator.spw-theme-provider.entry.cjs.js.map +1 -1
  12. package/dist/cjs/spw-field-label_6.cjs.entry.js +1 -1
  13. package/dist/cjs/spw-field-label_6.cjs.entry.js.map +1 -1
  14. package/dist/cjs/spw-pagination.cjs.entry.js +26 -16
  15. package/dist/cjs/spw-pagination.cjs.entry.js.map +1 -1
  16. package/dist/cjs/spw-pagination.entry.cjs.js.map +1 -1
  17. package/dist/cjs/spw-search-field.cjs.entry.js +12 -2
  18. package/dist/cjs/spw-search-field.cjs.entry.js.map +1 -1
  19. package/dist/cjs/spw-search-field.entry.cjs.js.map +1 -1
  20. package/dist/cjs/spw-select.cjs.entry.js +3 -1
  21. package/dist/cjs/spw-select.cjs.entry.js.map +1 -1
  22. package/dist/cjs/spw-select.entry.cjs.js.map +1 -1
  23. package/dist/cjs/spw-stencil-library.cjs.js +1 -1
  24. package/dist/cjs/spw-table-cell.cjs.entry.js +23 -2
  25. package/dist/cjs/spw-table-cell.cjs.entry.js.map +1 -1
  26. package/dist/cjs/spw-table-cell.entry.cjs.js.map +1 -1
  27. package/dist/cjs/spw-table-footer.cjs.entry.js +1 -1
  28. package/dist/cjs/spw-table-footer.cjs.entry.js.map +1 -1
  29. package/dist/cjs/spw-table-footer.entry.cjs.js.map +1 -1
  30. package/dist/cjs/spw-table-header.cjs.entry.js +33 -3
  31. package/dist/cjs/spw-table-header.cjs.entry.js.map +1 -1
  32. package/dist/cjs/spw-table-header.entry.cjs.js.map +1 -1
  33. package/dist/cjs/spw-table-row.cjs.entry.js +34 -2
  34. package/dist/cjs/spw-table-row.cjs.entry.js.map +1 -1
  35. package/dist/cjs/spw-table-row.entry.cjs.js.map +1 -1
  36. package/dist/cjs/spw-table.cjs.entry.js +26 -3
  37. package/dist/cjs/spw-table.cjs.entry.js.map +1 -1
  38. package/dist/cjs/spw-table.entry.cjs.js.map +1 -1
  39. package/dist/cjs/utils-D_vNTY6w.js.map +1 -1
  40. package/dist/collection/components/spw-button/spw-button.css +1 -1
  41. package/dist/collection/components/spw-custom-select/spw-custom-select.css +1 -1
  42. package/dist/collection/components/spw-custom-select/spw-custom-select.js +42 -6
  43. package/dist/collection/components/spw-custom-select/spw-custom-select.js.map +1 -1
  44. package/dist/collection/components/spw-date-picker/spw-date-picker.js +48 -28
  45. package/dist/collection/components/spw-date-picker/spw-date-picker.js.map +1 -1
  46. package/dist/collection/components/spw-link/spw-link.css +1 -1
  47. package/dist/collection/components/spw-pagination/spw-pagination.css +1 -1
  48. package/dist/collection/components/spw-pagination/spw-pagination.js +54 -13
  49. package/dist/collection/components/spw-pagination/spw-pagination.js.map +1 -1
  50. package/dist/collection/components/spw-search-field/spw-search-field.js +50 -2
  51. package/dist/collection/components/spw-search-field/spw-search-field.js.map +1 -1
  52. package/dist/collection/components/spw-select/spw-select.js +3 -1
  53. package/dist/collection/components/spw-select/spw-select.js.map +1 -1
  54. package/dist/collection/components/spw-table/spw-table-cell/spw-table-cell.css +1 -1
  55. package/dist/collection/components/spw-table/spw-table-cell/spw-table-cell.js +82 -1
  56. package/dist/collection/components/spw-table/spw-table-cell/spw-table-cell.js.map +1 -1
  57. package/dist/collection/components/spw-table/spw-table-footer/spw-table-footer.css +1 -1
  58. package/dist/collection/components/spw-table/spw-table-header/spw-table-header.css +1 -1
  59. package/dist/collection/components/spw-table/spw-table-header/spw-table-header.js +92 -2
  60. package/dist/collection/components/spw-table/spw-table-header/spw-table-header.js.map +1 -1
  61. package/dist/collection/components/spw-table/spw-table-row/spw-table-row.css +1 -1
  62. package/dist/collection/components/spw-table/spw-table-row/spw-table-row.js +66 -1
  63. package/dist/collection/components/spw-table/spw-table-row/spw-table-row.js.map +1 -1
  64. package/dist/collection/components/spw-table/spw-table.js +27 -2
  65. package/dist/collection/components/spw-table/spw-table.js.map +1 -1
  66. package/dist/collection/stories/organisms/spw-footer/spw-footer.stories.js +1 -1
  67. package/dist/collection/stories/organisms/spw-footer/spw-footer.stories.js.map +1 -1
  68. package/dist/collection/utils/utils.js +47 -48
  69. package/dist/collection/utils/utils.js.map +1 -1
  70. package/dist/components/{p-du-Bai6S.js → p-B2toBmC2.js} +32 -21
  71. package/dist/components/p-B2toBmC2.js.map +1 -0
  72. package/dist/components/p-BBi01mKM.js.map +1 -1
  73. package/dist/components/{p-AjhBdYbk.js → p-DjyPtAVX.js} +3 -3
  74. package/dist/components/p-DjyPtAVX.js.map +1 -0
  75. package/dist/components/{p-CNNUoO2J.js → p-qROlK2WR.js} +3 -3
  76. package/dist/components/p-qROlK2WR.js.map +1 -0
  77. package/dist/components/spw-breadcrumb-item.js +1 -1
  78. package/dist/components/spw-button.js +1 -1
  79. package/dist/components/spw-cookies.js +1 -1
  80. package/dist/components/spw-custom-select.js +43 -7
  81. package/dist/components/spw-custom-select.js.map +1 -1
  82. package/dist/components/spw-date-picker.js +48 -28
  83. package/dist/components/spw-date-picker.js.map +1 -1
  84. package/dist/components/spw-file-upload.js +1 -1
  85. package/dist/components/spw-header-lang.js +1 -1
  86. package/dist/components/spw-header.js +1 -1
  87. package/dist/components/spw-iodda.js +1 -1
  88. package/dist/components/spw-link.js +1 -1
  89. package/dist/components/spw-message.js +1 -1
  90. package/dist/components/spw-pagination.js +1 -1
  91. package/dist/components/spw-search-field.js +15 -4
  92. package/dist/components/spw-search-field.js.map +1 -1
  93. package/dist/components/spw-select.js +3 -1
  94. package/dist/components/spw-select.js.map +1 -1
  95. package/dist/components/spw-table-cell.js +26 -2
  96. package/dist/components/spw-table-cell.js.map +1 -1
  97. package/dist/components/spw-table-footer.js +1 -1
  98. package/dist/components/spw-table-footer.js.map +1 -1
  99. package/dist/components/spw-table-header.js +37 -4
  100. package/dist/components/spw-table-header.js.map +1 -1
  101. package/dist/components/spw-table-row.js +39 -3
  102. package/dist/components/spw-table-row.js.map +1 -1
  103. package/dist/components/spw-table.js +28 -4
  104. package/dist/components/spw-table.js.map +1 -1
  105. package/dist/components_json.json +268 -12
  106. package/dist/components_vscode.json +3088 -0
  107. package/dist/esm/loader.js +1 -1
  108. package/dist/esm/spw-button.spw-loading.entry.js.map +1 -1
  109. package/dist/esm/spw-button_2.entry.js +1 -1
  110. package/dist/esm/spw-button_2.entry.js.map +1 -1
  111. package/dist/esm/spw-custom-select.entry.js +43 -7
  112. package/dist/esm/spw-custom-select.entry.js.map +1 -1
  113. package/dist/esm/spw-date-picker.entry.js +48 -28
  114. package/dist/esm/spw-date-picker.entry.js.map +1 -1
  115. package/dist/esm/spw-field-label.spw-group.spw-icon.spw-link.spw-separator.spw-theme-provider.entry.js.map +1 -1
  116. package/dist/esm/spw-field-label_6.entry.js +1 -1
  117. package/dist/esm/spw-field-label_6.entry.js.map +1 -1
  118. package/dist/esm/spw-pagination.entry.js +26 -16
  119. package/dist/esm/spw-pagination.entry.js.map +1 -1
  120. package/dist/esm/spw-search-field.entry.js +13 -3
  121. package/dist/esm/spw-search-field.entry.js.map +1 -1
  122. package/dist/esm/spw-select.entry.js +3 -1
  123. package/dist/esm/spw-select.entry.js.map +1 -1
  124. package/dist/esm/spw-stencil-library.js +1 -1
  125. package/dist/esm/spw-table-cell.entry.js +23 -2
  126. package/dist/esm/spw-table-cell.entry.js.map +1 -1
  127. package/dist/esm/spw-table-footer.entry.js +1 -1
  128. package/dist/esm/spw-table-footer.entry.js.map +1 -1
  129. package/dist/esm/spw-table-header.entry.js +33 -3
  130. package/dist/esm/spw-table-header.entry.js.map +1 -1
  131. package/dist/esm/spw-table-row.entry.js +35 -3
  132. package/dist/esm/spw-table-row.entry.js.map +1 -1
  133. package/dist/esm/spw-table.entry.js +26 -3
  134. package/dist/esm/spw-table.entry.js.map +1 -1
  135. package/dist/esm/utils-BBi01mKM.js.map +1 -1
  136. package/dist/spw-stencil-library/p-0f69442e.entry.js +2 -0
  137. package/dist/spw-stencil-library/p-0f69442e.entry.js.map +1 -0
  138. package/dist/spw-stencil-library/p-14722019.entry.js +2 -0
  139. package/dist/spw-stencil-library/p-14722019.entry.js.map +1 -0
  140. package/dist/spw-stencil-library/{p-b1de48f3.entry.js → p-152525de.entry.js} +2 -2
  141. package/dist/spw-stencil-library/p-152525de.entry.js.map +1 -0
  142. package/dist/spw-stencil-library/p-2ad00dfc.entry.js +2 -0
  143. package/dist/spw-stencil-library/p-2ad00dfc.entry.js.map +1 -0
  144. package/dist/spw-stencil-library/p-4a273848.entry.js +2 -0
  145. package/dist/spw-stencil-library/p-4a273848.entry.js.map +1 -0
  146. package/dist/spw-stencil-library/{p-31793077.entry.js → p-5632f307.entry.js} +2 -2
  147. package/dist/spw-stencil-library/p-5632f307.entry.js.map +1 -0
  148. package/dist/spw-stencil-library/p-5e43e2ed.entry.js +2 -0
  149. package/dist/spw-stencil-library/p-5e43e2ed.entry.js.map +1 -0
  150. package/dist/spw-stencil-library/p-92583499.entry.js +2 -0
  151. package/dist/spw-stencil-library/p-92583499.entry.js.map +1 -0
  152. package/dist/spw-stencil-library/p-9d760073.entry.js +2 -0
  153. package/dist/spw-stencil-library/p-9d760073.entry.js.map +1 -0
  154. package/dist/spw-stencil-library/p-9e8a779e.entry.js +2 -0
  155. package/dist/spw-stencil-library/p-9e8a779e.entry.js.map +1 -0
  156. package/dist/spw-stencil-library/p-BBi01mKM.js.map +1 -1
  157. package/dist/spw-stencil-library/p-c4e4cfd4.entry.js +2 -0
  158. package/dist/spw-stencil-library/p-c4e4cfd4.entry.js.map +1 -0
  159. package/dist/spw-stencil-library/{p-f7760a47.entry.js → p-fcc5884a.entry.js} +2 -2
  160. package/dist/spw-stencil-library/p-fcc5884a.entry.js.map +1 -0
  161. package/dist/spw-stencil-library/spw-button.spw-loading.entry.esm.js.map +1 -1
  162. package/dist/spw-stencil-library/spw-custom-select.entry.esm.js.map +1 -1
  163. package/dist/spw-stencil-library/spw-date-picker.entry.esm.js.map +1 -1
  164. package/dist/spw-stencil-library/spw-field-label.spw-group.spw-icon.spw-link.spw-separator.spw-theme-provider.entry.esm.js.map +1 -1
  165. package/dist/spw-stencil-library/spw-pagination.entry.esm.js.map +1 -1
  166. package/dist/spw-stencil-library/spw-search-field.entry.esm.js.map +1 -1
  167. package/dist/spw-stencil-library/spw-select.entry.esm.js.map +1 -1
  168. package/dist/spw-stencil-library/spw-stencil-library.esm.js +1 -1
  169. package/dist/spw-stencil-library/spw-table-cell.entry.esm.js.map +1 -1
  170. package/dist/spw-stencil-library/spw-table-footer.entry.esm.js.map +1 -1
  171. package/dist/spw-stencil-library/spw-table-header.entry.esm.js.map +1 -1
  172. package/dist/spw-stencil-library/spw-table-row.entry.esm.js.map +1 -1
  173. package/dist/spw-stencil-library/spw-table.entry.esm.js.map +1 -1
  174. package/dist/stats.json +611 -150
  175. package/dist/types/components/spw-custom-select/spw-custom-select.d.ts +3 -0
  176. package/dist/types/components/spw-date-picker/spw-date-picker.d.ts +1 -0
  177. package/dist/types/components/spw-pagination/spw-pagination.d.ts +4 -1
  178. package/dist/types/components/spw-search-field/spw-search-field.d.ts +5 -0
  179. package/dist/types/components/spw-select/spw-select.d.ts +1 -0
  180. package/dist/types/components/spw-table/spw-table-cell/spw-table-cell.d.ts +6 -0
  181. package/dist/types/components/spw-table/spw-table-header/spw-table-header.d.ts +6 -0
  182. package/dist/types/components/spw-table/spw-table-row/spw-table-row.d.ts +8 -0
  183. package/dist/types/components/spw-table/spw-table.d.ts +2 -0
  184. package/dist/types/components.d.ts +83 -0
  185. package/dist/types/utils/utils.d.ts +2 -1
  186. package/hydrate/index.js +265 -72
  187. package/hydrate/index.mjs +265 -72
  188. package/package.json +1 -1
  189. package/dist/components/p-AjhBdYbk.js.map +0 -1
  190. package/dist/components/p-CNNUoO2J.js.map +0 -1
  191. package/dist/components/p-du-Bai6S.js.map +0 -1
  192. package/dist/spw-stencil-library/p-22f972ca.entry.js +0 -2
  193. package/dist/spw-stencil-library/p-22f972ca.entry.js.map +0 -1
  194. package/dist/spw-stencil-library/p-2c28684f.entry.js +0 -2
  195. package/dist/spw-stencil-library/p-2c28684f.entry.js.map +0 -1
  196. package/dist/spw-stencil-library/p-31793077.entry.js.map +0 -1
  197. package/dist/spw-stencil-library/p-4c21a696.entry.js +0 -2
  198. package/dist/spw-stencil-library/p-4c21a696.entry.js.map +0 -1
  199. package/dist/spw-stencil-library/p-572188ac.entry.js +0 -2
  200. package/dist/spw-stencil-library/p-572188ac.entry.js.map +0 -1
  201. package/dist/spw-stencil-library/p-823b60ae.entry.js +0 -2
  202. package/dist/spw-stencil-library/p-823b60ae.entry.js.map +0 -1
  203. package/dist/spw-stencil-library/p-b1de48f3.entry.js.map +0 -1
  204. package/dist/spw-stencil-library/p-d115a739.entry.js +0 -2
  205. package/dist/spw-stencil-library/p-d115a739.entry.js.map +0 -1
  206. package/dist/spw-stencil-library/p-d2258e0a.entry.js +0 -2
  207. package/dist/spw-stencil-library/p-d2258e0a.entry.js.map +0 -1
  208. package/dist/spw-stencil-library/p-ecec4588.entry.js +0 -2
  209. package/dist/spw-stencil-library/p-ecec4588.entry.js.map +0 -1
  210. package/dist/spw-stencil-library/p-f5caed11.entry.js +0 -2
  211. package/dist/spw-stencil-library/p-f5caed11.entry.js.map +0 -1
  212. package/dist/spw-stencil-library/p-f7760a47.entry.js.map +0 -1
@@ -37,6 +37,11 @@ export class SpwCustomSelect {
37
37
  this.showSuccessIcon = true;
38
38
  /** Affiche une icône de warning si vrai */
39
39
  this.showWarningIcon = true;
40
+ this.handleOtherSelectOpened = (event) => {
41
+ if (event.detail.instance !== this.host && this.isOpen) {
42
+ this.closeDropdown();
43
+ }
44
+ };
40
45
  this.handleClickOutside = (event) => {
41
46
  var _a, _b;
42
47
  if (this.isOpen) {
@@ -101,10 +106,12 @@ export class SpwCustomSelect {
101
106
  }
102
107
  componentDidLoad() {
103
108
  document.addEventListener('click', this.handleClickOutside);
109
+ document.addEventListener('spw-custom-select-opened', this.handleOtherSelectOpened);
104
110
  this.internals.setFormValue(this.getFormValue());
105
111
  }
106
112
  disconnectedCallback() {
107
113
  document.removeEventListener('click', this.handleClickOutside);
114
+ document.removeEventListener('spw-custom-select-opened', this.handleOtherSelectOpened);
108
115
  }
109
116
  parseOptions(newValue) {
110
117
  try {
@@ -112,12 +119,14 @@ export class SpwCustomSelect {
112
119
  this.parsedOptions = newValue.map(option => ({
113
120
  value: option.value,
114
121
  label: option.label,
122
+ disabled: option.disabled || false,
115
123
  }));
116
124
  }
117
125
  else if (typeof newValue === 'string') {
118
126
  this.parsedOptions = JSON.parse(newValue).map(option => ({
119
127
  value: option.value,
120
128
  label: option.label,
129
+ disabled: option.disabled || false,
121
130
  }));
122
131
  }
123
132
  else {
@@ -170,12 +179,24 @@ export class SpwCustomSelect {
170
179
  event.stopPropagation();
171
180
  }
172
181
  this.determineDropdownDirection();
182
+ const wasOpen = this.isOpen;
173
183
  this.isOpen = !this.isOpen;
184
+ if (this.isOpen && !wasOpen) {
185
+ this.notifyOtherSelects();
186
+ }
174
187
  if (!this.isOpen) {
175
188
  this.focusedOptionIndex = null;
176
189
  }
177
190
  }
178
191
  }
192
+ notifyOtherSelects() {
193
+ const event = new CustomEvent('spw-custom-select-opened', {
194
+ detail: { instance: this.host },
195
+ bubbles: true,
196
+ composed: true
197
+ });
198
+ document.dispatchEvent(event);
199
+ }
179
200
  determineDropdownDirection() {
180
201
  const rect = this.selectContainer.getBoundingClientRect();
181
202
  const viewportHeight = window.innerHeight;
@@ -190,6 +211,7 @@ export class SpwCustomSelect {
190
211
  this.determineDropdownDirection();
191
212
  this.isOpen = true;
192
213
  this.focusedOptionIndex = 0;
214
+ this.notifyOtherSelects();
193
215
  }
194
216
  closeDropdown() {
195
217
  this.isOpen = false;
@@ -200,6 +222,10 @@ export class SpwCustomSelect {
200
222
  if (event) {
201
223
  event.stopPropagation();
202
224
  }
225
+ const option = this.parsedOptions.find(opt => String(opt.value) === String(optionValue));
226
+ if (option === null || option === void 0 ? void 0 : option.disabled) {
227
+ return;
228
+ }
203
229
  if (this.multiple) {
204
230
  const index = this.internalValue.findIndex(val => String(val) === String(optionValue));
205
231
  if (index > -1) {
@@ -226,6 +252,7 @@ export class SpwCustomSelect {
226
252
  }
227
253
  }
228
254
  handleKeyDown(event) {
255
+ var _a, _b;
229
256
  if (event.target.classList.contains('spw-custom-select__search-input')) {
230
257
  return;
231
258
  }
@@ -239,7 +266,11 @@ export class SpwCustomSelect {
239
266
  case 'ArrowDown':
240
267
  event.preventDefault();
241
268
  if (this.isOpen) {
242
- this.focusedOptionIndex = this.focusedOptionIndex === null ? 0 : (this.focusedOptionIndex + 1) % this.parsedOptions.length;
269
+ let nextIndex = this.focusedOptionIndex === null ? 0 : (this.focusedOptionIndex + 1) % this.parsedOptions.length;
270
+ while (((_a = this.parsedOptions[nextIndex]) === null || _a === void 0 ? void 0 : _a.disabled) && nextIndex !== this.focusedOptionIndex) {
271
+ nextIndex = (nextIndex + 1) % this.parsedOptions.length;
272
+ }
273
+ this.focusedOptionIndex = nextIndex;
243
274
  }
244
275
  else {
245
276
  this.openDropdownWithKeyboard();
@@ -248,8 +279,11 @@ export class SpwCustomSelect {
248
279
  case 'ArrowUp':
249
280
  event.preventDefault();
250
281
  if (this.isOpen) {
251
- this.focusedOptionIndex =
252
- this.focusedOptionIndex === null ? this.parsedOptions.length - 1 : (this.focusedOptionIndex - 1 + this.parsedOptions.length) % this.parsedOptions.length;
282
+ let prevIndex = this.focusedOptionIndex === null ? this.parsedOptions.length - 1 : (this.focusedOptionIndex - 1 + this.parsedOptions.length) % this.parsedOptions.length;
283
+ while (((_b = this.parsedOptions[prevIndex]) === null || _b === void 0 ? void 0 : _b.disabled) && prevIndex !== this.focusedOptionIndex) {
284
+ prevIndex = (prevIndex - 1 + this.parsedOptions.length) % this.parsedOptions.length;
285
+ }
286
+ this.focusedOptionIndex = prevIndex;
253
287
  }
254
288
  break;
255
289
  case 'Enter':
@@ -328,6 +362,7 @@ export class SpwCustomSelect {
328
362
  this.focusedOptionIndex = 0;
329
363
  if (!this.isOpen) {
330
364
  this.isOpen = true;
365
+ this.notifyOtherSelects();
331
366
  }
332
367
  }
333
368
  isSearchVisible() {
@@ -349,17 +384,18 @@ export class SpwCustomSelect {
349
384
  render() {
350
385
  const filteredOptions = this.getFilteredOptions();
351
386
  const showPlaceholder = this.showPlaceholder();
352
- return (h("div", { key: '1c601a0ca0e05f76e83cc6abee2101d70ac85acc', class: this.elementClass, ref: el => (this.host = el) }, this.label && h("spw-field-label", { key: 'f98dbcdb1f0fa237841a32425f2b8d8874539456', label: this.label, name: this.name, required: this.required }), this.assistiveText && (h("spw-field-message", { key: '24e6c78477f2ffab50a5f21f3e3a4b1cc277f141', class: "spw-tw-mb-2 -spw-tw-mt-1", variant: "hint", showIcon: false }, this.assistiveText)), h("div", { key: 'eb4403fec5ae5e5fe7f7ab66423d3439f205a357', class: "spw-custom-select__wrapper" }, h("div", { key: '4a94938cd3c308132a645748829e077dde0e66be', class: "spw-custom-select__container", id: this.name, ref: el => (this.selectContainer = el), onClick: event => this.toggleDropdown(event), onKeyDown: event => this.handleKeyDown(event), tabindex: this.disabled ? -1 : 0 }, h("div", { key: '74400d409d65ac85334737d3b4a103a956f3ee02', class: "spw-custom-select__selected" }, this.isSearchVisible() && (h("div", { key: 'de36e073a3aa9d2bfc5fc1e8c3dcf19359e84738', class: "spw-custom-select__search" }, h("input", { key: '87101b79c5b37a927cce19846740fda3917e0673', class: "spw-custom-select__search-input", placeholder: "Entrez votre recherche", onInput: event => this.handleSearchInput(event), value: this.searchText }))), showPlaceholder && h("span", { key: '59246ab1acc9e4ce73456c651fa08228aa6cab8e' }, this.placeholder), this.multiple && this.internalValue.length > 0 && (h("div", { key: 'fac04a5fe55d9e103aad0cce359b7604fb29caa4', class: "spw-custom-select__selected-items" }, this.internalValue.map(val => {
387
+ return (h("div", { key: 'a2e9fb9f19b299dfde36cc0562ee8d3e82441aae', class: this.elementClass, ref: el => (this.host = el) }, this.label && h("spw-field-label", { key: '624c8188f2a36b66febcfd7c8a2d22e646490d56', label: this.label, name: this.name, required: this.required }), this.assistiveText && (h("spw-field-message", { key: 'd1e74cf86c8b0de5a18a386ef384d747759b99cc', class: "spw-tw-mb-2 -spw-tw-mt-1", variant: "hint", showIcon: false }, this.assistiveText)), h("div", { key: '0f4ae9ca8c745da16f4a6a8af594e81e04889eb9', class: "spw-custom-select__wrapper" }, h("div", { key: 'ed257c48baa566f4480c161435ab2f1affd91ec0', class: "spw-custom-select__container", id: this.name, ref: el => (this.selectContainer = el), onClick: event => this.toggleDropdown(event), onKeyDown: event => this.handleKeyDown(event), tabindex: this.disabled ? -1 : 0 }, h("div", { key: '5006bc09c045d469089dbeab1fb99fdaadf9ae4b', class: "spw-custom-select__selected" }, this.isSearchVisible() && (h("div", { key: '5ea0a83210326adf2f22d700c0c6de204f8efc4a', class: "spw-custom-select__search" }, h("input", { key: 'c4a23018e53464b65323fae714fe669e6cf510cc', class: "spw-custom-select__search-input", placeholder: "Entrez votre recherche", onInput: event => this.handleSearchInput(event), value: this.searchText }))), showPlaceholder && h("span", { key: 'b35cea32fe067f85a90568a67f64e3723f15d2f9' }, this.placeholder), this.multiple && this.internalValue.length > 0 && (h("div", { key: 'ad42651a8e606cc7abb424f167ec4a9b95562290', class: "spw-custom-select__selected-items" }, this.internalValue.map(val => {
353
388
  var _a;
354
389
  return (h("span", { class: "spw-custom-select__selected-item" }, (_a = this.parsedOptions.find(option => String(option.value) === String(val))) === null || _a === void 0 ? void 0 :
355
390
  _a.label, h("spw-icon", { icon: "fa-times", class: "spw-custom-select__deselect-icon", onClick: event => this.selectOption(val, event) })));
356
- }))), !this.multiple && h("span", { key: '75405b1d4d912c2cd859a1fafd9f31853f61a232' }, this.getSelectedLabels()))), h("div", { key: 'b1194635644b2224d40a83c4067f9f9da35219f1', class: "spw-custom-select__arrow" }, h("spw-icon", { key: '8df5d320d83ce092fc6c9fff6795f3b244f1e8a0', icon: this.isOpen ? 'fa-chevron-up' : 'fa-chevron-down' })), this.isOpen && (h("div", { key: '24917d7da42d1d6993452e4558b9d8850837932b', class: `spw-custom-select__options spw-custom-select__options--${this.dropdownDirection}` }, !!filteredOptions.length && (h("ul", { key: 'ac7320dadb06fe189eb6e03aeaa8ddc21ed04565' }, filteredOptions.map((option, index) => (h("li", { class: {
391
+ }))), !this.multiple && h("span", { key: '6050f92aaa17ef4613559e315f8d1fc95db86638' }, this.getSelectedLabels()))), h("div", { key: 'b0031148a8d7da8d003f0935dfe6e319b8334d3f', class: "spw-custom-select__arrow" }, h("spw-icon", { key: 'd2b3141c4308fe565780794888b763d0bf6ad101', icon: this.isOpen ? 'fa-chevron-up' : 'fa-chevron-down' })), this.isOpen && (h("div", { key: 'ea056a2ec8ef32dac0b12ab4f1b7e232dd3fc609', class: `spw-custom-select__options spw-custom-select__options--${this.dropdownDirection}` }, !!filteredOptions.length && (h("ul", { key: 'fee67a6f3e5f5d4c5d07c9b960f8e07b44974b77' }, filteredOptions.map((option, index) => (h("li", { class: {
357
392
  'spw-custom-select__option': true,
358
393
  'spw-custom-select__option--selected': this.multiple
359
394
  ? this.internalValue.some(val => String(val) === String(option.value))
360
395
  : option.value === this.internalValue,
361
396
  'spw-custom-select__option--focused': index === this.focusedOptionIndex,
362
- }, onClick: () => this.selectOption(option.value) }, this.multiple && (h("spw-checkbox", { onKeyDown: event => this.handleOptionKeyDown(event, option.value), class: "spw-tw-mr-2", checked: this.internalValue.some(val => String(val) === String(option.value)) })), option.label))))), !filteredOptions.length && h("p", { key: 'd03034401172fee26f3c26f65e0c411f5aa62858', class: "spw-custom-select__no-results" }, "Pas de r\u00E9sultats pour cette recherche.")))), this.renderErrorMessage(), this.renderHintMessage(), this.renderSuccessMessage(), this.renderWarningMessage()));
397
+ 'spw-custom-select__option--disabled': option.disabled,
398
+ }, onClick: () => this.selectOption(option.value) }, this.multiple && (h("spw-checkbox", { onKeyDown: event => this.handleOptionKeyDown(event, option.value), class: "spw-tw-mr-2", checked: this.internalValue.some(val => String(val) === String(option.value)), disabled: option.disabled })), option.label))))), !filteredOptions.length && h("p", { key: '31ea5a9e76b448f46bf2dc4009a64e575ad3ed85', class: "spw-custom-select__no-results" }, "Pas de r\u00E9sultats pour cette recherche.")))), this.renderErrorMessage(), this.renderHintMessage(), this.renderSuccessMessage(), this.renderWarningMessage()));
363
399
  }
364
400
  static get is() { return "spw-custom-select"; }
365
401
  static get encapsulation() { return "shadow"; }
@@ -1 +1 @@
1
- {"version":3,"file":"spw-custom-select.js","sourceRoot":"","sources":["../../../src/components/spw-custom-select/spw-custom-select.tsx"],"names":[],"mappings":"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","sourcesContent":["import { AttachInternals, Component, Method, Prop, State, Event, EventEmitter, h, Watch } from '@stencil/core';\n\n@Component({\n tag: 'spw-custom-select',\n styleUrl: 'spw-custom-select.scss',\n formAssociated: true,\n shadow: true,\n})\nexport class SpwCustomSelect {\n private host: HTMLElement;\n private selectContainer: HTMLElement;\n\n /** Événement émis lorsque la valeur sélectionnée change */\n @Event() valueChanged: EventEmitter<(string | number)[] | string | number>;\n\n @State() internalValue: (string | number)[] | string | number;\n @State() isOpen: boolean = false;\n @State() parsedOptions: { value: string | number; label: string }[] = [];\n @State() focusedOptionIndex: number | null = null;\n @State() searchText: string = '';\n @State() dropdownDirection: 'up' | 'down' = 'down';\n @State() hasSelectedValue: boolean = false;\n\n /** Valeur actuelle sélectionnée dans le composant, peut être une chaîne, un nombre ou un tableau */\n @Prop({ mutable: true, reflect: true }) value: (string | number)[] | string | number = [];\n /** Label associé au champ de sélection personnalisé */\n @Prop() label: string = '';\n /** Placeholder à afficher lorsque aucune option n'est sélectionnée */\n @Prop() placeholder: string = 'Sélectionnez une option';\n /** Indique si le champ est désactivé et donc non interactif */\n @Prop() disabled: boolean;\n /** Nom de l'élément dans les formulaires, utilisé pour associer la valeur */\n @Prop() name: string;\n /** Indique si la sélection est obligatoire dans le formulaire */\n @Prop() required: boolean = false;\n /** Chaîne JSON des options disponibles dans le select (valeur et label) */\n @Prop() items: string | any[];\n /** Taille du select, peut être \"large\" ou \"medium\" */\n @Prop() size: 'large' | 'medium' = 'medium';\n /** Permet la sélection multiple si vrai */\n @Prop() multiple: boolean = false;\n /** Active la fonction de recherche dans la liste des items */\n @Prop() isSearch: boolean = false;\n /** Texte d'assistance à afficher sous le champ */\n @Prop() assistiveText?: string;\n /** Message d'erreur à afficher sous le champ */\n @Prop() error?: string = '';\n /** Message d'indication (hint) à afficher sous le champ */\n @Prop() hint?: string = '';\n /** Message de succès à afficher sous le champ */\n @Prop() success?: string = '';\n /** Message de warning à afficher sous le champ */\n @Prop() warning?: string = '';\n /** Affiche une icône d'erreur si vrai */\n @Prop() showErrorIcon?: boolean = true;\n /** Affiche une icône d'indication si vrai */\n @Prop() showHintIcon?: boolean = true;\n /** Affiche une icône de succès si vrai */\n @Prop() showSuccessIcon?: boolean = true;\n /** Affiche une icône de warning si vrai */\n @Prop() showWarningIcon?: boolean = true;\n\n @AttachInternals() internals: ElementInternals;\n\n componentWillLoad() {\n if (this.multiple) {\n if (typeof this.value === 'string') {\n try {\n this.internalValue = JSON.parse(this.value);\n } catch (e) {\n this.internalValue = [];\n }\n } else if (Array.isArray(this.value)) {\n this.internalValue = this.value;\n } else {\n this.internalValue = [];\n }\n } else {\n this.internalValue = this.value as string | number;\n }\n\n if (this.items) {\n this.parseOptions(this.items);\n }\n this.updateSelectedOption();\n }\n\n @Method()\n async resetSelect() {\n if (this.multiple) {\n this.internalValue = [];\n this.value = [];\n } else {\n this.internalValue = '';\n this.value = '';\n }\n this.searchText = '';\n this.focusedOptionIndex = null;\n this.internals.setFormValue(this.getFormValue());\n this.valueChanged.emit(this.internalValue);\n this.updateSelectedOption();\n }\n\n formResetCallback() {\n this.resetSelect();\n }\n\n componentDidLoad() {\n document.addEventListener('click', this.handleClickOutside);\n this.internals.setFormValue(this.getFormValue());\n }\n\n disconnectedCallback() {\n document.removeEventListener('click', this.handleClickOutside);\n }\n\n private handleClickOutside = (event: MouseEvent) => {\n if (this.isOpen) {\n const target = event.composedPath()[0] as Node;\n const isInsideHost = this.host.contains(target);\n const searchField = this.host.shadowRoot?.querySelector('.spw-custom-select__search-input');\n\n const isInsideSearchField = searchField?.contains(target);\n\n if (!isInsideHost && !isInsideSearchField) {\n if (this.multiple) {\n const optionsContainer = this.host.shadowRoot?.querySelector('.spw-custom-select__options');\n if (optionsContainer && optionsContainer.contains(target)) {\n return;\n }\n }\n\n this.closeDropdown();\n }\n }\n };\n\n @Watch('items')\n parseOptions(newValue: string | any[]) {\n try {\n if (Array.isArray(newValue)) {\n this.parsedOptions = newValue.map(option => ({\n value: option.value,\n label: option.label,\n }));\n } else if (typeof newValue === 'string') {\n this.parsedOptions = JSON.parse(newValue).map(option => ({\n value: option.value,\n label: option.label,\n }));\n } else {\n this.parsedOptions = [];\n }\n this.updateSelectedOption();\n } catch (e) {\n this.parsedOptions = [];\n }\n }\n\n @Watch('value')\n valueChangedHandler(newValue: (string | number)[] | string | number) {\n if (this.multiple) {\n this.internalValue = Array.isArray(newValue) ? newValue : [newValue];\n } else {\n this.internalValue = newValue;\n }\n this.updateSelectedOption();\n this.internals.setFormValue(this.getFormValue());\n this.valueChanged.emit(this.internalValue);\n }\n\n private updateSelectedOption() {\n this.internals.setFormValue(this.getFormValue());\n\n if (!this.multiple && this.internalValue !== undefined) {\n this.focusedOptionIndex = this.parsedOptions.findIndex(option => String(option.value) === String(this.internalValue));\n } else if (this.multiple && Array.isArray(this.internalValue)) {\n this.internalValue = (this.internalValue as (string | number)[])\n .filter(val => this.parsedOptions.some(option => String(option.value) === String(val)))\n .sort((a, b) => this.parsedOptions.findIndex(option => String(option.value) === String(a)) - this.parsedOptions.findIndex(option => String(option.value) === String(b)));\n }\n }\n\n @Watch('internalValue')\n internalValueChanged() {\n this.hasSelectedValue = Array.isArray(this.internalValue) ? this.internalValue.length > 0 : Boolean(this.internalValue);\n }\n\n private getFormValue(): string | null {\n if (this.multiple) {\n return Array.isArray(this.internalValue) && this.internalValue.length > 0 ? this.internalValue.map(v => String(v)).join(',') : null;\n }\n return this.internalValue ? String(this.internalValue) : null;\n }\n\n private toggleDropdown(event?: MouseEvent) {\n if (!this.disabled) {\n if (event) {\n const target = event.composedPath()[0] as HTMLElement;\n\n if (target.classList.contains('spw-custom-select__search-input')) {\n return;\n }\n\n event.stopPropagation();\n }\n this.determineDropdownDirection();\n this.isOpen = !this.isOpen;\n if (!this.isOpen) {\n this.focusedOptionIndex = null;\n }\n }\n }\n\n private determineDropdownDirection() {\n const rect = this.selectContainer.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n\n if (rect.bottom + 200 > viewportHeight && rect.top > 200) {\n this.dropdownDirection = 'up';\n } else {\n this.dropdownDirection = 'down';\n }\n }\n\n private openDropdownWithKeyboard() {\n this.determineDropdownDirection();\n this.isOpen = true;\n this.focusedOptionIndex = 0;\n }\n\n private closeDropdown() {\n this.isOpen = false;\n this.focusedOptionIndex = null;\n this.searchText = '';\n }\n\n private selectOption(optionValue: string | number, event?: MouseEvent) {\n if (event) {\n event.stopPropagation();\n }\n\n if (this.multiple) {\n const index = (this.internalValue as (string | number)[]).findIndex(val => String(val) === String(optionValue));\n if (index > -1) {\n this.internalValue = [...(this.internalValue as (string | number)[]).slice(0, index), ...(this.internalValue as (string | number)[]).slice(index + 1)];\n } else {\n this.internalValue = [...(this.internalValue as (string | number)[]), optionValue];\n }\n this.internalValue = (this.internalValue as (string | number)[]).sort(\n (a, b) => this.parsedOptions.findIndex(option => String(option.value) === String(a)) - this.parsedOptions.findIndex(option => String(option.value) === String(b)),\n );\n } else {\n this.internalValue = optionValue;\n this.closeDropdown();\n }\n\n this.value = this.internalValue;\n this.internals.setFormValue(this.getFormValue());\n this.valueChanged.emit(this.internalValue);\n this.updateSelectedOption();\n }\n\n private handleOptionKeyDown(event: KeyboardEvent, optionValue: string | number) {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.selectOption(optionValue);\n }\n }\n\n private handleKeyDown(event: KeyboardEvent) {\n if ((event.target as HTMLElement).classList.contains('spw-custom-select__search-input')) {\n return;\n }\n switch (event.key) {\n case ' ':\n event.preventDefault();\n if (!this.isOpen) {\n this.openDropdownWithKeyboard();\n }\n break;\n case 'ArrowDown':\n event.preventDefault();\n if (this.isOpen) {\n this.focusedOptionIndex = this.focusedOptionIndex === null ? 0 : (this.focusedOptionIndex + 1) % this.parsedOptions.length;\n } else {\n this.openDropdownWithKeyboard();\n }\n break;\n case 'ArrowUp':\n event.preventDefault();\n if (this.isOpen) {\n this.focusedOptionIndex =\n this.focusedOptionIndex === null ? this.parsedOptions.length - 1 : (this.focusedOptionIndex - 1 + this.parsedOptions.length) % this.parsedOptions.length;\n }\n break;\n case 'Enter':\n event.preventDefault();\n if (this.isOpen && this.focusedOptionIndex !== null) {\n this.selectOption(this.parsedOptions[this.focusedOptionIndex].value);\n }\n break;\n case 'Escape':\n if (this.isOpen) {\n this.closeDropdown();\n }\n break;\n }\n }\n\n private renderErrorMessage() {\n if (this.error) {\n return (\n <spw-field-message variant=\"error\" showIcon={this.showErrorIcon}>\n {this.error}\n </spw-field-message>\n );\n }\n }\n\n private renderHintMessage() {\n if (this.hint) {\n return (\n <spw-field-message variant=\"hint\" showIcon={this.showHintIcon}>\n {this.hint}\n </spw-field-message>\n );\n }\n }\n\n private renderWarningMessage() {\n if (this.warning) {\n return (\n <spw-field-message variant=\"warning\" showIcon={this.showWarningIcon}>\n {this.warning}\n </spw-field-message>\n );\n }\n }\n\n private renderSuccessMessage() {\n if (this.success) {\n return (\n <spw-field-message variant=\"success\" showIcon={this.showSuccessIcon}>\n {this.success}\n </spw-field-message>\n );\n }\n }\n\n private get elementClass(): { [className: string]: boolean } {\n return {\n 'spw-custom-select': true,\n [`spw-custom-select--${this.size}`]: true,\n 'spw-custom-select--is-error': !!this.error,\n 'spw-custom-select--disabled': this.disabled,\n 'spw-custom-select--is-opened': this.isOpen,\n 'spw-custom-select--has-value': this.hasSelectedValue,\n 'spw-custom-select--no-value': !this.hasSelectedValue,\n 'spw-custom-select--is-searchable': this.isSearch,\n 'spw-custom-select--not-searchable': !this.isSearch,\n };\n }\n\n private normalizeString(str: string): string {\n return str\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .toLowerCase();\n }\n\n private getSelectedLabels(): string {\n if (this.multiple) {\n return Array.isArray(this.internalValue) && this.internalValue.length > 0\n ? (this.internalValue as (string | number)[])\n .map(val => this.parsedOptions.find(option => String(option.value) === String(val))?.label)\n .filter(Boolean)\n .join(', ')\n : null;\n } else {\n const selectedOption = this.parsedOptions.find(option => String(option.value) === String(this.internalValue));\n return selectedOption ? selectedOption.label : null;\n }\n }\n\n private getFilteredOptions() {\n const normalizedSearchText = this.normalizeString(this.searchText);\n return this.parsedOptions.filter(option => this.normalizeString(option.label).includes(normalizedSearchText));\n }\n\n private handleSearchInput(event: Event) {\n const input = event.target as HTMLInputElement;\n this.searchText = input.value;\n this.focusedOptionIndex = 0;\n\n if (!this.isOpen) {\n this.isOpen = true;\n }\n }\n\n private isSearchVisible(): boolean {\n if (!this.isSearch) return false;\n if (!this.hasSelectedValue && !this.isOpen) return true;\n if (this.isSearch && this.isOpen) return true;\n return this.isOpen;\n }\n\n private showPlaceholder(): boolean {\n if (this.isSearch) return false;\n if (this.hasSelectedValue) return false;\n return true;\n }\n\n render() {\n const filteredOptions = this.getFilteredOptions();\n const showPlaceholder = this.showPlaceholder();\n\n return (\n <div class={this.elementClass} ref={el => (this.host = el as HTMLElement)}>\n {this.label && <spw-field-label label={this.label} name={this.name} required={this.required}></spw-field-label>}\n {this.assistiveText && (\n <spw-field-message class=\"spw-tw-mb-2 -spw-tw-mt-1\" variant=\"hint\" showIcon={false}>\n {this.assistiveText}\n </spw-field-message>\n )}\n <div class=\"spw-custom-select__wrapper\">\n <div\n class=\"spw-custom-select__container\"\n id={this.name}\n ref={el => (this.selectContainer = el as HTMLElement)}\n onClick={event => this.toggleDropdown(event)}\n onKeyDown={event => this.handleKeyDown(event)}\n tabindex={this.disabled ? -1 : 0}\n >\n <div class=\"spw-custom-select__selected\">\n {this.isSearchVisible() && (\n <div class=\"spw-custom-select__search\">\n <input class=\"spw-custom-select__search-input\" placeholder=\"Entrez votre recherche\" onInput={event => this.handleSearchInput(event)} value={this.searchText} />\n </div>\n )}\n {showPlaceholder && <span>{this.placeholder}</span>}\n {this.multiple && (this.internalValue as (string | number)[]).length > 0 && (\n <div class=\"spw-custom-select__selected-items\">\n {(this.internalValue as (string | number)[]).map(val => (\n <span class=\"spw-custom-select__selected-item\">\n {this.parsedOptions.find(option => String(option.value) === String(val))?.label}\n <spw-icon icon=\"fa-times\" class=\"spw-custom-select__deselect-icon\" onClick={event => this.selectOption(val, event)}></spw-icon>\n </span>\n ))}\n </div>\n )}\n {!this.multiple && <span>{this.getSelectedLabels()}</span>}\n </div>\n </div>\n <div class=\"spw-custom-select__arrow\">\n <spw-icon icon={this.isOpen ? 'fa-chevron-up' : 'fa-chevron-down'}></spw-icon>\n </div>\n {this.isOpen && (\n <div class={`spw-custom-select__options spw-custom-select__options--${this.dropdownDirection}`}>\n {!!filteredOptions.length && (\n <ul>\n {filteredOptions.map((option, index) => (\n <li\n class={{\n 'spw-custom-select__option': true,\n 'spw-custom-select__option--selected': this.multiple\n ? (this.internalValue as (string | number)[]).some(val => String(val) === String(option.value))\n : option.value === this.internalValue,\n 'spw-custom-select__option--focused': index === this.focusedOptionIndex,\n }}\n onClick={() => this.selectOption(option.value)}\n >\n {this.multiple && (\n <spw-checkbox\n onKeyDown={event => this.handleOptionKeyDown(event, option.value)}\n class=\"spw-tw-mr-2\"\n checked={(this.internalValue as (string | number)[]).some(val => String(val) === String(option.value))}\n ></spw-checkbox>\n )}\n {option.label}\n </li>\n ))}\n </ul>\n )}\n {!filteredOptions.length && <p class=\"spw-custom-select__no-results\">Pas de résultats pour cette recherche.</p>}\n </div>\n )}\n </div>\n {this.renderErrorMessage()}\n {this.renderHintMessage()}\n {this.renderSuccessMessage()}\n {this.renderWarningMessage()}\n </div>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"spw-custom-select.js","sourceRoot":"","sources":["../../../src/components/spw-custom-select/spw-custom-select.tsx"],"names":[],"mappings":"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","sourcesContent":["import { AttachInternals, Component, Method, Prop, State, Event, EventEmitter, h, Watch } from '@stencil/core';\n\n@Component({\n tag: 'spw-custom-select',\n styleUrl: 'spw-custom-select.scss',\n formAssociated: true,\n shadow: true,\n})\nexport class SpwCustomSelect {\n private host: HTMLElement;\n private selectContainer: HTMLElement;\n\n /** Événement émis lorsque la valeur sélectionnée change */\n @Event() valueChanged: EventEmitter<(string | number)[] | string | number>;\n\n @State() internalValue: (string | number)[] | string | number;\n @State() isOpen: boolean = false;\n @State() parsedOptions: { value: string | number; label: string; disabled?: boolean }[] = [];\n @State() focusedOptionIndex: number | null = null;\n @State() searchText: string = '';\n @State() dropdownDirection: 'up' | 'down' = 'down';\n @State() hasSelectedValue: boolean = false;\n\n /** Valeur actuelle sélectionnée dans le composant, peut être une chaîne, un nombre ou un tableau */\n @Prop({ mutable: true, reflect: true }) value: (string | number)[] | string | number = [];\n /** Label associé au champ de sélection personnalisé */\n @Prop() label: string = '';\n /** Placeholder à afficher lorsque aucune option n'est sélectionnée */\n @Prop() placeholder: string = 'Sélectionnez une option';\n /** Indique si le champ est désactivé et donc non interactif */\n @Prop() disabled: boolean;\n /** Nom de l'élément dans les formulaires, utilisé pour associer la valeur */\n @Prop() name: string;\n /** Indique si la sélection est obligatoire dans le formulaire */\n @Prop() required: boolean = false;\n /** Chaîne JSON des options disponibles dans le select (valeur et label) */\n @Prop() items: string | any[];\n /** Taille du select, peut être \"large\" ou \"medium\" */\n @Prop() size: 'large' | 'medium' = 'medium';\n /** Permet la sélection multiple si vrai */\n @Prop() multiple: boolean = false;\n /** Active la fonction de recherche dans la liste des items */\n @Prop() isSearch: boolean = false;\n /** Texte d'assistance à afficher sous le champ */\n @Prop() assistiveText?: string;\n /** Message d'erreur à afficher sous le champ */\n @Prop() error?: string = '';\n /** Message d'indication (hint) à afficher sous le champ */\n @Prop() hint?: string = '';\n /** Message de succès à afficher sous le champ */\n @Prop() success?: string = '';\n /** Message de warning à afficher sous le champ */\n @Prop() warning?: string = '';\n /** Affiche une icône d'erreur si vrai */\n @Prop() showErrorIcon?: boolean = true;\n /** Affiche une icône d'indication si vrai */\n @Prop() showHintIcon?: boolean = true;\n /** Affiche une icône de succès si vrai */\n @Prop() showSuccessIcon?: boolean = true;\n /** Affiche une icône de warning si vrai */\n @Prop() showWarningIcon?: boolean = true;\n\n @AttachInternals() internals: ElementInternals;\n\n componentWillLoad() {\n if (this.multiple) {\n if (typeof this.value === 'string') {\n try {\n this.internalValue = JSON.parse(this.value);\n } catch (e) {\n this.internalValue = [];\n }\n } else if (Array.isArray(this.value)) {\n this.internalValue = this.value;\n } else {\n this.internalValue = [];\n }\n } else {\n this.internalValue = this.value as string | number;\n }\n\n if (this.items) {\n this.parseOptions(this.items);\n }\n this.updateSelectedOption();\n }\n\n @Method()\n async resetSelect() {\n if (this.multiple) {\n this.internalValue = [];\n this.value = [];\n } else {\n this.internalValue = '';\n this.value = '';\n }\n this.searchText = '';\n this.focusedOptionIndex = null;\n this.internals.setFormValue(this.getFormValue());\n this.valueChanged.emit(this.internalValue);\n this.updateSelectedOption();\n }\n\n formResetCallback() {\n this.resetSelect();\n }\n\n componentDidLoad() {\n document.addEventListener('click', this.handleClickOutside);\n document.addEventListener('spw-custom-select-opened', this.handleOtherSelectOpened);\n this.internals.setFormValue(this.getFormValue());\n }\n\n disconnectedCallback() {\n document.removeEventListener('click', this.handleClickOutside);\n document.removeEventListener('spw-custom-select-opened', this.handleOtherSelectOpened);\n }\n\n private handleOtherSelectOpened = (event: CustomEvent) => {\n if (event.detail.instance !== this.host && this.isOpen) {\n this.closeDropdown();\n }\n };\n\n private handleClickOutside = (event: MouseEvent) => {\n if (this.isOpen) {\n const target = event.composedPath()[0] as Node;\n const isInsideHost = this.host.contains(target);\n const searchField = this.host.shadowRoot?.querySelector('.spw-custom-select__search-input');\n\n const isInsideSearchField = searchField?.contains(target);\n\n if (!isInsideHost && !isInsideSearchField) {\n if (this.multiple) {\n const optionsContainer = this.host.shadowRoot?.querySelector('.spw-custom-select__options');\n if (optionsContainer && optionsContainer.contains(target)) {\n return;\n }\n }\n\n this.closeDropdown();\n }\n }\n };\n\n @Watch('items')\n parseOptions(newValue: string | any[]) {\n try {\n if (Array.isArray(newValue)) {\n this.parsedOptions = newValue.map(option => ({\n value: option.value,\n label: option.label,\n disabled: option.disabled || false,\n }));\n } else if (typeof newValue === 'string') {\n this.parsedOptions = JSON.parse(newValue).map(option => ({\n value: option.value,\n label: option.label,\n disabled: option.disabled || false,\n }));\n } else {\n this.parsedOptions = [];\n }\n this.updateSelectedOption();\n } catch (e) {\n this.parsedOptions = [];\n }\n }\n\n @Watch('value')\n valueChangedHandler(newValue: (string | number)[] | string | number) {\n if (this.multiple) {\n this.internalValue = Array.isArray(newValue) ? newValue : [newValue];\n } else {\n this.internalValue = newValue;\n }\n this.updateSelectedOption();\n this.internals.setFormValue(this.getFormValue());\n this.valueChanged.emit(this.internalValue);\n }\n\n private updateSelectedOption() {\n this.internals.setFormValue(this.getFormValue());\n\n if (!this.multiple && this.internalValue !== undefined) {\n this.focusedOptionIndex = this.parsedOptions.findIndex(option => String(option.value) === String(this.internalValue));\n } else if (this.multiple && Array.isArray(this.internalValue)) {\n this.internalValue = (this.internalValue as (string | number)[])\n .filter(val => this.parsedOptions.some(option => String(option.value) === String(val)))\n .sort((a, b) => this.parsedOptions.findIndex(option => String(option.value) === String(a)) - this.parsedOptions.findIndex(option => String(option.value) === String(b)));\n }\n }\n\n @Watch('internalValue')\n internalValueChanged() {\n this.hasSelectedValue = Array.isArray(this.internalValue) ? this.internalValue.length > 0 : Boolean(this.internalValue);\n }\n\n private getFormValue(): string | null {\n if (this.multiple) {\n return Array.isArray(this.internalValue) && this.internalValue.length > 0 ? this.internalValue.map(v => String(v)).join(',') : null;\n }\n return this.internalValue ? String(this.internalValue) : null;\n }\n\n private toggleDropdown(event?: MouseEvent) {\n if (!this.disabled) {\n if (event) {\n const target = event.composedPath()[0] as HTMLElement;\n\n if (target.classList.contains('spw-custom-select__search-input')) {\n return;\n }\n\n event.stopPropagation();\n }\n this.determineDropdownDirection();\n const wasOpen = this.isOpen;\n this.isOpen = !this.isOpen;\n\n if (this.isOpen && !wasOpen) {\n this.notifyOtherSelects();\n }\n\n if (!this.isOpen) {\n this.focusedOptionIndex = null;\n }\n }\n }\n\n private notifyOtherSelects() {\n const event = new CustomEvent('spw-custom-select-opened', {\n detail: { instance: this.host },\n bubbles: true,\n composed: true\n });\n document.dispatchEvent(event);\n }\n\n private determineDropdownDirection() {\n const rect = this.selectContainer.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n\n if (rect.bottom + 200 > viewportHeight && rect.top > 200) {\n this.dropdownDirection = 'up';\n } else {\n this.dropdownDirection = 'down';\n }\n }\n\n private openDropdownWithKeyboard() {\n this.determineDropdownDirection();\n this.isOpen = true;\n this.focusedOptionIndex = 0;\n this.notifyOtherSelects();\n }\n\n private closeDropdown() {\n this.isOpen = false;\n this.focusedOptionIndex = null;\n this.searchText = '';\n }\n\n private selectOption(optionValue: string | number, event?: MouseEvent) {\n if (event) {\n event.stopPropagation();\n }\n\n const option = this.parsedOptions.find(opt => String(opt.value) === String(optionValue));\n if (option?.disabled) {\n return;\n }\n\n if (this.multiple) {\n const index = (this.internalValue as (string | number)[]).findIndex(val => String(val) === String(optionValue));\n if (index > -1) {\n this.internalValue = [...(this.internalValue as (string | number)[]).slice(0, index), ...(this.internalValue as (string | number)[]).slice(index + 1)];\n } else {\n this.internalValue = [...(this.internalValue as (string | number)[]), optionValue];\n }\n this.internalValue = (this.internalValue as (string | number)[]).sort(\n (a, b) => this.parsedOptions.findIndex(option => String(option.value) === String(a)) - this.parsedOptions.findIndex(option => String(option.value) === String(b)),\n );\n } else {\n this.internalValue = optionValue;\n this.closeDropdown();\n }\n\n this.value = this.internalValue;\n this.internals.setFormValue(this.getFormValue());\n this.valueChanged.emit(this.internalValue);\n this.updateSelectedOption();\n }\n\n private handleOptionKeyDown(event: KeyboardEvent, optionValue: string | number) {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.selectOption(optionValue);\n }\n }\n\n private handleKeyDown(event: KeyboardEvent) {\n if ((event.target as HTMLElement).classList.contains('spw-custom-select__search-input')) {\n return;\n }\n switch (event.key) {\n case ' ':\n event.preventDefault();\n if (!this.isOpen) {\n this.openDropdownWithKeyboard();\n }\n break;\n case 'ArrowDown':\n event.preventDefault();\n if (this.isOpen) {\n let nextIndex = this.focusedOptionIndex === null ? 0 : (this.focusedOptionIndex + 1) % this.parsedOptions.length;\n while (this.parsedOptions[nextIndex]?.disabled && nextIndex !== this.focusedOptionIndex) {\n nextIndex = (nextIndex + 1) % this.parsedOptions.length;\n }\n this.focusedOptionIndex = nextIndex;\n } else {\n this.openDropdownWithKeyboard();\n }\n break;\n case 'ArrowUp':\n event.preventDefault();\n if (this.isOpen) {\n let prevIndex = this.focusedOptionIndex === null ? this.parsedOptions.length - 1 : (this.focusedOptionIndex - 1 + this.parsedOptions.length) % this.parsedOptions.length;\n while (this.parsedOptions[prevIndex]?.disabled && prevIndex !== this.focusedOptionIndex) {\n prevIndex = (prevIndex - 1 + this.parsedOptions.length) % this.parsedOptions.length;\n }\n this.focusedOptionIndex = prevIndex;\n }\n break;\n case 'Enter':\n event.preventDefault();\n if (this.isOpen && this.focusedOptionIndex !== null) {\n this.selectOption(this.parsedOptions[this.focusedOptionIndex].value);\n }\n break;\n case 'Escape':\n if (this.isOpen) {\n this.closeDropdown();\n }\n break;\n }\n }\n\n private renderErrorMessage() {\n if (this.error) {\n return (\n <spw-field-message variant=\"error\" showIcon={this.showErrorIcon}>\n {this.error}\n </spw-field-message>\n );\n }\n }\n\n private renderHintMessage() {\n if (this.hint) {\n return (\n <spw-field-message variant=\"hint\" showIcon={this.showHintIcon}>\n {this.hint}\n </spw-field-message>\n );\n }\n }\n\n private renderWarningMessage() {\n if (this.warning) {\n return (\n <spw-field-message variant=\"warning\" showIcon={this.showWarningIcon}>\n {this.warning}\n </spw-field-message>\n );\n }\n }\n\n private renderSuccessMessage() {\n if (this.success) {\n return (\n <spw-field-message variant=\"success\" showIcon={this.showSuccessIcon}>\n {this.success}\n </spw-field-message>\n );\n }\n }\n\n private get elementClass(): { [className: string]: boolean } {\n return {\n 'spw-custom-select': true,\n [`spw-custom-select--${this.size}`]: true,\n 'spw-custom-select--is-error': !!this.error,\n 'spw-custom-select--disabled': this.disabled,\n 'spw-custom-select--is-opened': this.isOpen,\n 'spw-custom-select--has-value': this.hasSelectedValue,\n 'spw-custom-select--no-value': !this.hasSelectedValue,\n 'spw-custom-select--is-searchable': this.isSearch,\n 'spw-custom-select--not-searchable': !this.isSearch,\n };\n }\n\n private normalizeString(str: string): string {\n return str\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .toLowerCase();\n }\n\n private getSelectedLabels(): string {\n if (this.multiple) {\n return Array.isArray(this.internalValue) && this.internalValue.length > 0\n ? (this.internalValue as (string | number)[])\n .map(val => this.parsedOptions.find(option => String(option.value) === String(val))?.label)\n .filter(Boolean)\n .join(', ')\n : null;\n } else {\n const selectedOption = this.parsedOptions.find(option => String(option.value) === String(this.internalValue));\n return selectedOption ? selectedOption.label : null;\n }\n }\n\n private getFilteredOptions() {\n const normalizedSearchText = this.normalizeString(this.searchText);\n return this.parsedOptions.filter(option => this.normalizeString(option.label).includes(normalizedSearchText));\n }\n\n private handleSearchInput(event: Event) {\n const input = event.target as HTMLInputElement;\n this.searchText = input.value;\n this.focusedOptionIndex = 0;\n\n if (!this.isOpen) {\n this.isOpen = true;\n this.notifyOtherSelects();\n }\n }\n\n private isSearchVisible(): boolean {\n if (!this.isSearch) return false;\n if (!this.hasSelectedValue && !this.isOpen) return true;\n if (this.isSearch && this.isOpen) return true;\n return this.isOpen;\n }\n\n private showPlaceholder(): boolean {\n if (this.isSearch) return false;\n if (this.hasSelectedValue) return false;\n return true;\n }\n\n render() {\n const filteredOptions = this.getFilteredOptions();\n const showPlaceholder = this.showPlaceholder();\n\n return (\n <div class={this.elementClass} ref={el => (this.host = el as HTMLElement)}>\n {this.label && <spw-field-label label={this.label} name={this.name} required={this.required}></spw-field-label>}\n {this.assistiveText && (\n <spw-field-message class=\"spw-tw-mb-2 -spw-tw-mt-1\" variant=\"hint\" showIcon={false}>\n {this.assistiveText}\n </spw-field-message>\n )}\n <div class=\"spw-custom-select__wrapper\">\n <div\n class=\"spw-custom-select__container\"\n id={this.name}\n ref={el => (this.selectContainer = el as HTMLElement)}\n onClick={event => this.toggleDropdown(event)}\n onKeyDown={event => this.handleKeyDown(event)}\n tabindex={this.disabled ? -1 : 0}\n >\n <div class=\"spw-custom-select__selected\">\n {this.isSearchVisible() && (\n <div class=\"spw-custom-select__search\">\n <input class=\"spw-custom-select__search-input\" placeholder=\"Entrez votre recherche\" onInput={event => this.handleSearchInput(event)} value={this.searchText} />\n </div>\n )}\n {showPlaceholder && <span>{this.placeholder}</span>}\n {this.multiple && (this.internalValue as (string | number)[]).length > 0 && (\n <div class=\"spw-custom-select__selected-items\">\n {(this.internalValue as (string | number)[]).map(val => (\n <span class=\"spw-custom-select__selected-item\">\n {this.parsedOptions.find(option => String(option.value) === String(val))?.label}\n <spw-icon icon=\"fa-times\" class=\"spw-custom-select__deselect-icon\" onClick={event => this.selectOption(val, event)}></spw-icon>\n </span>\n ))}\n </div>\n )}\n {!this.multiple && <span>{this.getSelectedLabels()}</span>}\n </div>\n </div>\n <div class=\"spw-custom-select__arrow\">\n <spw-icon icon={this.isOpen ? 'fa-chevron-up' : 'fa-chevron-down'}></spw-icon>\n </div>\n {this.isOpen && (\n <div class={`spw-custom-select__options spw-custom-select__options--${this.dropdownDirection}`}>\n {!!filteredOptions.length && (\n <ul>\n {filteredOptions.map((option, index) => (\n <li\n class={{\n 'spw-custom-select__option': true,\n 'spw-custom-select__option--selected': this.multiple\n ? (this.internalValue as (string | number)[]).some(val => String(val) === String(option.value))\n : option.value === this.internalValue,\n 'spw-custom-select__option--focused': index === this.focusedOptionIndex,\n 'spw-custom-select__option--disabled': option.disabled,\n }}\n onClick={() => this.selectOption(option.value)}\n >\n {this.multiple && (\n <spw-checkbox\n onKeyDown={event => this.handleOptionKeyDown(event, option.value)}\n class=\"spw-tw-mr-2\"\n checked={(this.internalValue as (string | number)[]).some(val => String(val) === String(option.value))}\n disabled={option.disabled}\n ></spw-checkbox>\n )}\n {option.label}\n </li>\n ))}\n </ul>\n )}\n {!filteredOptions.length && <p class=\"spw-custom-select__no-results\">Pas de résultats pour cette recherche.</p>}\n </div>\n )}\n </div>\n {this.renderErrorMessage()}\n {this.renderHintMessage()}\n {this.renderSuccessMessage()}\n {this.renderWarningMessage()}\n </div>\n );\n }\n}\n"]}
@@ -102,8 +102,23 @@ export class SpwDatePicker {
102
102
  this.handleMaskedInput(event);
103
103
  };
104
104
  this.handleInputFocus = () => {
105
- if (!this.disabled && this.datepickerInstance) {
106
- this.datepickerInstance.show();
105
+ if (this.disabled)
106
+ return;
107
+ if (!this.datepickerInstance) {
108
+ this.initializeDatepicker();
109
+ }
110
+ if (this.datepickerInstance && typeof this.datepickerInstance.show === 'function') {
111
+ try {
112
+ this.datepickerInstance.show();
113
+ }
114
+ catch (error) {
115
+ console.warn("Erreur lors de l'ouverture du datepicker, réinitialisation...", error);
116
+ this.datepickerInstance = null;
117
+ this.initializeDatepicker();
118
+ if (this.datepickerInstance && typeof this.datepickerInstance.show === 'function') {
119
+ this.datepickerInstance.show();
120
+ }
121
+ }
107
122
  }
108
123
  };
109
124
  this.handleKeyDown = (ev) => {
@@ -178,21 +193,36 @@ export class SpwDatePicker {
178
193
  this.internalValue = start;
179
194
  this.lastInputValue = this.internalValue;
180
195
  }
196
+ connectedCallback() {
197
+ if (!this.datepickerInstance && this.inputElement) {
198
+ requestAnimationFrame(() => {
199
+ this.initializeDatepicker();
200
+ });
201
+ }
202
+ }
181
203
  componentDidLoad() {
204
+ var _a;
182
205
  this.initializeDatepicker();
183
206
  if (this.value) {
184
207
  const initialDate = new Date(this.value);
185
208
  if (!isNaN(initialDate.getTime())) {
186
- this.datepickerInstance.setDate(initialDate, true);
187
- this.inputElement.value = this.formatDate(initialDate);
188
- this.internalValue = this.formatDate(initialDate);
209
+ (_a = this.datepickerInstance) === null || _a === void 0 ? void 0 : _a.setDate(initialDate, true);
210
+ if (this.inputElement) {
211
+ this.inputElement.value = this.formatDate(initialDate);
212
+ this.internalValue = this.formatDate(initialDate);
213
+ }
189
214
  }
190
215
  }
191
216
  this.internals.setFormValue(this.value ? this.value : null);
192
217
  }
193
218
  disconnectedCallback() {
194
219
  if (this.datepickerInstance && typeof this.datepickerInstance.remove === 'function') {
195
- this.datepickerInstance.remove();
220
+ setTimeout(() => {
221
+ if (!this.el.isConnected && this.datepickerInstance) {
222
+ this.datepickerInstance.remove();
223
+ this.datepickerInstance = null;
224
+ }
225
+ }, 100);
196
226
  }
197
227
  }
198
228
  watchValue(newValue) {
@@ -323,7 +353,6 @@ export class SpwDatePicker {
323
353
  let start = null;
324
354
  let end = null;
325
355
  siblings.forEach(pickerEl => {
326
- // Accéder à l'attribut HTML pour déterminer si c'est le début ou la fin
327
356
  if (pickerEl.hasAttribute('is-start')) {
328
357
  start = pickerEl;
329
358
  }
@@ -343,7 +372,6 @@ export class SpwDatePicker {
343
372
  const startValue = start.value;
344
373
  const endValue = end.value;
345
374
  if (!startValue || !endValue) {
346
- // Pas de range complet, supprimer le highlighting
347
375
  const allDates = this.datepickerInstance.calendar.querySelectorAll('.qs-square');
348
376
  allDates.forEach((dateEl) => {
349
377
  dateEl.classList.remove('spw-date-range-start', 'spw-date-range-end', 'spw-date-range-middle');
@@ -354,34 +382,27 @@ export class SpwDatePicker {
354
382
  const endDate = new Date(endValue);
355
383
  if (isNaN(startDate.getTime()) || isNaN(endDate.getTime()))
356
384
  return;
357
- // Highlighter les dates dans le range
358
385
  const allDates = this.datepickerInstance.calendar.querySelectorAll('.qs-square:not(.qs-empty)');
359
386
  allDates.forEach((dateEl) => {
360
387
  const dateNum = parseInt(dateEl.textContent || '0', 10);
361
388
  if (!dateNum)
362
389
  return;
363
- // Récupérer le mois/année actuellement affiché
364
390
  const currentMonth = this.datepickerInstance.currentMonth;
365
391
  const currentYear = this.datepickerInstance.currentYear;
366
392
  const cellDate = new Date(currentYear, currentMonth, dateNum);
367
- // Normaliser les dates pour comparer uniquement jour/mois/année (sans heures)
368
393
  const cellDateOnly = new Date(cellDate.getFullYear(), cellDate.getMonth(), cellDate.getDate());
369
394
  const startDateOnly = new Date(startDate.getFullYear(), startDate.getMonth(), startDate.getDate());
370
395
  const endDateOnly = new Date(endDate.getFullYear(), endDate.getMonth(), endDate.getDate());
371
- // Vérifier si cette date est dans le range
372
396
  if (cellDateOnly >= startDateOnly && cellDateOnly <= endDateOnly) {
373
397
  if (cellDateOnly.getTime() === startDateOnly.getTime()) {
374
- // Date de début
375
398
  dateEl.classList.add('spw-date-range-start');
376
399
  dateEl.classList.remove('spw-date-range-middle', 'spw-date-range-end');
377
400
  }
378
401
  else if (cellDateOnly.getTime() === endDateOnly.getTime()) {
379
- // Date de fin
380
402
  dateEl.classList.add('spw-date-range-end');
381
403
  dateEl.classList.remove('spw-date-range-middle', 'spw-date-range-start');
382
404
  }
383
405
  else {
384
- // Date au milieu
385
406
  dateEl.classList.add('spw-date-range-middle');
386
407
  dateEl.classList.remove('spw-date-range-start', 'spw-date-range-end');
387
408
  }
@@ -511,8 +532,16 @@ export class SpwDatePicker {
511
532
  }
512
533
  }
513
534
  initializeDatepicker() {
514
- if (!this.inputElement)
515
- return;
535
+ var _a;
536
+ if (!this.inputElement) {
537
+ const shadowInput = (_a = this.el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('input[type="text"]');
538
+ if (shadowInput) {
539
+ this.inputElement = shadowInput;
540
+ }
541
+ else {
542
+ return;
543
+ }
544
+ }
516
545
  const options = {
517
546
  position: this.position,
518
547
  startDay: 1,
@@ -546,11 +575,9 @@ export class SpwDatePicker {
546
575
  this.internals.setFormValue(isoString);
547
576
  this.dateChange.emit({ value: isoString, date: selectedDate });
548
577
  this.updateRangeConstraints();
549
- // Mettre à jour le highlighting visuel du range
550
578
  setTimeout(() => {
551
579
  var _a, _b;
552
580
  this.highlightRangeInCalendar();
553
- // Mettre aussi à jour le highlighting sur l'autre datepicker s'il est ouvert
554
581
  const { start, end } = this.getRangeSiblings();
555
582
  const sibling = this.isStart ? end : start;
556
583
  if (sibling && sibling.isOpen) {
@@ -564,7 +591,6 @@ export class SpwDatePicker {
564
591
  setTimeout(() => {
565
592
  this.setupCalendarNavigation();
566
593
  this.highlightRangeInCalendar();
567
- // Réappliquer plusieurs fois pour contrer js-datepicker
568
594
  setTimeout(() => this.highlightRangeInCalendar(), 50);
569
595
  setTimeout(() => this.highlightRangeInCalendar(), 150);
570
596
  }, 100);
@@ -575,9 +601,6 @@ export class SpwDatePicker {
575
601
  },
576
602
  };
577
603
  if (this.range && this.rangeId) {
578
- // NOTE: On ne définit PAS options.id car js-datepicker applique alors des contraintes
579
- // automatiques qui sont inversées. On gère nous-mêmes les contraintes.
580
- // options.id = this.rangeId;
581
604
  const { start, end } = this.getRangeSiblings();
582
605
  if (this.isStart) {
583
606
  if (end && end.value) {
@@ -603,7 +626,6 @@ export class SpwDatePicker {
603
626
  options.maxDate = new Date(this.maxDate);
604
627
  }
605
628
  if (this.datepickerInstance) {
606
- // js-datepicker utilise remove() pour détruire l'instance
607
629
  if (typeof this.datepickerInstance.remove === 'function') {
608
630
  this.datepickerInstance.remove();
609
631
  }
@@ -619,9 +641,7 @@ export class SpwDatePicker {
619
641
  this.internalValue = formattedDate;
620
642
  this.lastInputValue = formattedDate;
621
643
  }
622
- catch (error) {
623
- // Si la date n'est pas valide avec les contraintes actuelles, on la laisse vide
624
- }
644
+ catch (error) { }
625
645
  }
626
646
  }
627
647
  }
@@ -667,7 +687,7 @@ export class SpwDatePicker {
667
687
  'spw-date-picker__input--open': this.isOpen,
668
688
  };
669
689
  const errorMessage = this.error || this.internalError;
670
- return (h(Host, { key: '657ed1e69aaeb89fe38dd244e5744bf3caf5ca21' }, h("div", { key: 'dc957192b9d4b8c3eb9bd9f055a84c8ac67f6150', class: "spw-date-picker" }, this.label && h("spw-field-label", { key: '34adf8491363afcb0bce2aed2dfb72d4d3655b81', label: this.label, required: this.required }), this.assistiveText && (h("spw-field-message", { key: '098a6382c0558a436b17c605654c1edcb1447408', class: "spw-tw-mb-2 -spw-tw-mt-1", variant: "hint", showIcon: false }, this.assistiveText)), h("div", { key: '9d6684f543f9300f5bc528a6ee6a88d79f19c9fa', class: "spw-date-picker__input-container" }, h("input", { key: '56f8098297fada855c2672f7d3b4d926e7ac2e71', ref: el => (this.inputElement = el), id: this.uniqueId, type: "text", class: inputClass, value: this.internalValue, placeholder: this.placeholder, disabled: this.disabled, required: this.required, onFocus: this.handleInputFocus, onInput: this.handleInputChange, onKeyDown: this.handleKeyDown, "aria-describedby": this.assistiveText || errorMessage ? `${this.uniqueId}-help ${this.uniqueId}-error` : undefined, "aria-invalid": this.hasError }), h("spw-icon", { key: 'c18e7b4405c18d553036c5fd0301aa9bf2403be8', icon: "fa-calendar", class: "spw-date-picker__icon" })), this.error && (h("spw-field-message", { key: '83103ba00956d37bc8369d220f1b80591d840fea', variant: "error", showIcon: this.showErrorIcon }, this.error)), this.hint && (h("spw-field-message", { key: 'fbcb99394e7fac065b25141b14f57247993efb09', variant: "hint", showIcon: this.showHintIcon }, this.hint)), this.success && (h("spw-field-message", { key: 'a0041903b10368ad8f2c9482603868565ab20ee2', variant: "success", showIcon: this.showSuccessIcon }, this.success)), this.warning && (h("spw-field-message", { key: 'd52fdb1f562529df9d9e10f7ee5c92e221a8debe', variant: "warning", showIcon: this.showWarningIcon }, this.warning)))));
690
+ return (h(Host, { key: 'eb66aebb637564da5d4e3c83cfe76d9d61e12e85' }, h("div", { key: '7984062a8d5c11c6876780431ff8bfd93bd935cc', class: "spw-date-picker" }, this.label && h("spw-field-label", { key: '494b6184491b96597c068dccba20a8f7d588b144', label: this.label, required: this.required }), this.assistiveText && (h("spw-field-message", { key: 'cac9fb61d6af9ddfc648a1483812a72fea20ed2b', class: "spw-tw-mb-2 -spw-tw-mt-1", variant: "hint", showIcon: false }, this.assistiveText)), h("div", { key: 'd54d9d938865e6594c7f58f62941a01014503ee5', class: "spw-date-picker__input-container" }, h("input", { key: 'a5495ee8d28f851e40c8139f1f2ced630f19d016', ref: el => (this.inputElement = el), id: this.uniqueId, type: "text", class: inputClass, value: this.internalValue, placeholder: this.placeholder, disabled: this.disabled, required: this.required, onFocus: this.handleInputFocus, onInput: this.handleInputChange, onKeyDown: this.handleKeyDown, "aria-describedby": this.assistiveText || errorMessage ? `${this.uniqueId}-help ${this.uniqueId}-error` : undefined, "aria-invalid": this.hasError }), h("spw-icon", { key: '0737358ffe36b3c05d8a767c7cfdf14832144c85', icon: "fa-calendar", class: "spw-date-picker__icon" })), this.error && (h("spw-field-message", { key: 'da0bf405570f245e40822174b0360537be5de8da', variant: "error", showIcon: this.showErrorIcon }, this.error)), this.hint && (h("spw-field-message", { key: '2f72f9c384714c9687abe5807ce1a42c94247357', variant: "hint", showIcon: this.showHintIcon }, this.hint)), this.success && (h("spw-field-message", { key: 'c6d8902f5c56a696eea582d60f0fc82baade5cf3', variant: "success", showIcon: this.showSuccessIcon }, this.success)), this.warning && (h("spw-field-message", { key: '297c8119472b719c145c10301f4bd37bc6812f35', variant: "warning", showIcon: this.showWarningIcon }, this.warning)))));
671
691
  }
672
692
  static get is() { return "spw-date-picker"; }
673
693
  static get encapsulation() { return "shadow"; }