allaw-ui 5.4.4 → 5.4.6

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.
@@ -3,7 +3,7 @@ import "./Breadcrumb.css";
3
3
  export interface BreadcrumbItem {
4
4
  key: number;
5
5
  label: string;
6
- link: string;
6
+ link?: string;
7
7
  }
8
8
  export interface BreadcrumbProps {
9
9
  items: BreadcrumbItem[];
@@ -6,7 +6,8 @@ var Breadcrumb = function (_a) {
6
6
  return (React.createElement("nav", { className: "breadcrumb" }, items.map(function (item, index) { return (React.createElement(React.Fragment, { key: item.key },
7
7
  index > 0 && (React.createElement("span", { className: "breadcrumb-separator" },
8
8
  React.createElement("i", { className: "allaw-icon-chevron-right" }))),
9
- React.createElement("a", { href: item.link, className: "breadcrumb-link" },
10
- React.createElement(TinyInfo, { variant: "medium14", color: index === items.length - 1 ? "dark-grey" : "mid-grey", text: item.label, align: "left" })))); })));
9
+ item.link ? (React.createElement("a", { href: item.link, className: "breadcrumb-link" },
10
+ React.createElement(TinyInfo, { variant: "medium14", color: index === items.length - 1 ? "dark-grey" : "mid-grey", text: item.label, align: "left" }))) : (React.createElement("span", { className: "breadcrumb-link" },
11
+ React.createElement(TinyInfo, { variant: "medium14", color: index === items.length - 1 ? "dark-grey" : "mid-grey", text: item.label, align: "left" }))))); })));
11
12
  };
12
13
  export default Breadcrumb;
@@ -200,6 +200,42 @@ var ProSwitchModal = function (_a) {
200
200
  var selectedPros = pros.filter(function (p) { return newSelected.includes(p.proUserId); });
201
201
  onSelect(selectedPros);
202
202
  };
203
+ // Sélectionner tous les pros filtrés
204
+ var handleSelectAll = function () {
205
+ if (!onSelect || mode !== "multiple")
206
+ return;
207
+ var allFilteredIds = sortedAndFilteredPros.map(function (p) { return p.proUserId; });
208
+ var allFilteredPros = pros.filter(function (p) {
209
+ return allFilteredIds.includes(p.proUserId);
210
+ });
211
+ onSelect(allFilteredPros);
212
+ };
213
+ // Désélectionner tous les pros filtrés (en gardant au moins un sélectionné)
214
+ var handleDeselectAll = function () {
215
+ if (!onSelect || mode !== "multiple")
216
+ return;
217
+ var allFilteredIds = sortedAndFilteredPros.map(function (p) { return p.proUserId; });
218
+ // Désélectionner tous les pros filtrés, mais garder au moins un pro sélectionné au total
219
+ var remainingSelected = selected.filter(function (id) { return !allFilteredIds.includes(id); });
220
+ if (remainingSelected.length === 0 && pros.length > 0) {
221
+ // Si on désélectionne tout, garder le premier pro de la liste complète (pas filtré)
222
+ var firstPro = pros[0];
223
+ if (firstPro) {
224
+ onSelect([firstPro]);
225
+ }
226
+ }
227
+ else if (remainingSelected.length > 0) {
228
+ // Garder les pros non filtrés qui étaient sélectionnés
229
+ var remainingPros = pros.filter(function (p) {
230
+ return remainingSelected.includes(p.proUserId);
231
+ });
232
+ onSelect(remainingPros);
233
+ }
234
+ };
235
+ // Vérifier si tous les pros filtrés sont sélectionnés
236
+ var allFilteredSelected = mode === "multiple" &&
237
+ sortedAndFilteredPros.length > 0 &&
238
+ sortedAndFilteredPros.every(function (p) { return selected.includes(p.proUserId); });
203
239
  // Validation en mode multiple
204
240
  var handleValidateSelection = function () {
205
241
  onClosePortal();
@@ -237,8 +273,16 @@ var ProSwitchModal = function (_a) {
237
273
  React.createElement("div", { className: styles.headerReorderLabel }, reorderLabel && (React.createElement(Paragraph, { variant: "medium", color: "mid-grey", text: reorderLabel }))),
238
274
  React.createElement("div", { className: styles.headerReorderActions },
239
275
  React.createElement("button", { className: styles.cancelBtn, onClick: handleCancel, type: "button" }, "Annuler"),
240
- React.createElement("button", { className: styles.validateBtn, onClick: handleValidate, type: "button" }, "Valider")))) : (React.createElement("div", { className: styles.searchContainer },
241
- React.createElement(SearchBar, { value: search, onChange: setSearch, placeholder: "Rechercher...", showClear: true, endIcon: "allaw-icon-search" })))) : (React.createElement("div", { style: { flex: 1 } })),
276
+ React.createElement("button", { className: styles.validateBtn, onClick: handleValidate, type: "button" }, "Valider")))) : (React.createElement(React.Fragment, null,
277
+ React.createElement("div", { className: styles.searchContainer },
278
+ React.createElement(SearchBar, { value: search, onChange: setSearch, placeholder: "Rechercher...", showClear: true, endIcon: "allaw-icon-search" })),
279
+ mode === "multiple" && (React.createElement("button", { className: styles.selectAllBtn, onClick: allFilteredSelected ? handleDeselectAll : handleSelectAll, type: "button", "aria-label": allFilteredSelected
280
+ ? "Tout désélectionner"
281
+ : "Tout sélectionner" }, allFilteredSelected ? "Tout désélectionner" : "Tout sélectionner"))))) : (React.createElement(React.Fragment, null,
282
+ React.createElement("div", { style: { flex: 1 } }),
283
+ mode === "multiple" && !isReorder && (React.createElement("button", { className: styles.selectAllBtn, onClick: allFilteredSelected ? handleDeselectAll : handleSelectAll, type: "button", "aria-label": allFilteredSelected
284
+ ? "Tout désélectionner"
285
+ : "Tout sélectionner" }, allFilteredSelected ? "Tout désélectionner" : "Tout sélectionner")))),
242
286
  pros.length > 4 && (React.createElement("div", { className: styles.buttonContainer, style: { justifyContent: "flex-start" } },
243
287
  React.createElement("div", { className: styles.reorderContainer },
244
288
  React.createElement("button", { className: styles.reorderBtn, onClick: function () { return setIsReorder(function (v) { return !v; }); }, "aria-label": isReorder
@@ -75,6 +75,27 @@
75
75
  transition: background 0.15s;
76
76
  }
77
77
 
78
+ .selectAllBtn {
79
+ padding: 8px 16px;
80
+ border-radius: 8px;
81
+ font-size: 14px;
82
+ font-family: var(--font-open-sans, "Open Sans");
83
+ font-weight: 600;
84
+ color: var(--bleu-allaw, #25beeb);
85
+ background: transparent;
86
+ border: 1px solid var(--bleu-allaw, #25beeb);
87
+ cursor: pointer;
88
+ transition: all 0.15s;
89
+ white-space: nowrap;
90
+ margin-left: 12px;
91
+ }
92
+
93
+ .selectAllBtn:hover {
94
+ background: #f6fcfe;
95
+ color: #1ca6d6;
96
+ border-color: #1ca6d6;
97
+ }
98
+
78
99
  .reorderBtn {
79
100
  margin-right: 8px;
80
101
  }
@@ -288,6 +309,19 @@
288
309
  .grid {
289
310
  gap: 16px 8px;
290
311
  }
312
+ .selectAllBtn {
313
+ font-size: 13px;
314
+ padding: 6px 12px;
315
+ margin-left: 8px;
316
+ }
317
+ }
318
+
319
+ @media (max-width: 480px) {
320
+ .selectAllBtn {
321
+ font-size: 12px;
322
+ padding: 6px 10px;
323
+ margin-left: 6px;
324
+ }
291
325
  }
292
326
 
293
327
  .selectionFooter {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "allaw-ui",
3
- "version": "5.4.4",
3
+ "version": "5.4.6",
4
4
  "description": "Composants UI pour l'application Allaw",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.esm.js",