arengibook 3.1.4-main → 3.1.5-itemWithTooltip

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 (2) hide show
  1. package/dist/index.js +1394 -203
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -13488,7 +13488,7 @@ var LOCALES = {
13488
13488
  var css_248z$6 = "@charset \"UTF-8\";\n@keyframes fadeIn {\n from {\n opacity: 0;\n transform: scale(0.85);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n}\n@keyframes toastSlideIn {\n from {\n opacity: 0;\n transform: translateX(40px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n}\n@keyframes toastIconPop {\n 0% {\n transform: scale(0);\n opacity: 0;\n }\n 60% {\n transform: scale(1.2);\n opacity: 1;\n }\n 100% {\n transform: scale(1);\n }\n}\n@keyframes toastTextSlide {\n from {\n opacity: 0;\n transform: translateY(6px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n/* Force une largeur à 100% de l'input Calendar */\n.datepicker-fullwidth {\n width: 100%;\n}\n\n.datepicker-fullwidth > .dp-input-wrapper {\n width: 100%;\n}\n.datepicker-fullwidth > .dp-input-wrapper > .p-calendar {\n width: 100%;\n}\n\n.dp-input-wrapper {\n position: relative;\n display: inline-flex;\n}\n.dp-input-wrapper .dp-clear-btn {\n position: absolute;\n right: 7px;\n top: 50%;\n transform: translateY(-50%);\n background: none;\n border: none;\n cursor: pointer;\n padding: 2.8px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: #b0b8c4;\n z-index: 1;\n border-radius: 50%;\n line-height: 1;\n}\n.dp-input-wrapper .dp-clear-btn:hover {\n color: #1a1e26;\n background-color: rgba(0, 0, 0, 0.06);\n}\n.dp-input-wrapper .dp-clear-btn .pi {\n font-size: 9.1px;\n}\n\n/* Application du mixin field sur l'input du Calendar */\n.p-calendar > .p-inputtext {\n font-family: \"Roboto\", sans-serif;\n min-height: 40px;\n padding: 0 12px;\n background: #ffffff;\n border: 1.5px solid #e0e3e8;\n border-radius: 7px;\n color: #1a1e26;\n outline: none;\n transition: border-color 180ms cubic-bezier(0.4, 0, 0.2, 1), box-shadow 180ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n.p-calendar > .p-inputtext:hover:not(:focus):not(:focus-within):not([disabled]):not(.is-disabled) {\n border-color: #c8cdd6;\n}\n.p-calendar > .p-inputtext:focus, .p-calendar > .p-inputtext:focus-within, .p-calendar > .p-inputtext.is-open {\n border-color: #3f3f3f;\n box-shadow: 0 0 0 3px rgba(0, 0, 0, 0.1);\n}\n.p-calendar > .p-inputtext[disabled], .p-calendar > .p-inputtext.is-disabled {\n opacity: 0.45;\n cursor: not-allowed;\n pointer-events: none;\n}\n.p-calendar > .p-inputtext[readonly], .p-calendar > .p-inputtext.is-readonly {\n background: #f4f5f6;\n cursor: default;\n box-shadow: none;\n}\n.p-calendar > .p-inputtext[readonly]:hover, .p-calendar > .p-inputtext.is-readonly:hover {\n border-color: #e0e3e8;\n}\n.p-calendar > .p-inputtext.is-error {\n border-color: #dc2626;\n box-shadow: 0 0 0 3px rgba(220, 38, 38, 0.15);\n}\n.p-calendar > .p-inputtext.is-success {\n border-color: #15803d;\n box-shadow: 0 0 0 3px rgba(21, 128, 61, 0.12);\n}\n.p-calendar > .p-inputtext:hover {\n border-color: #c8cdd6 !important;\n}\n.p-calendar > .p-inputtext:focus, .p-calendar > .p-inputtext.p-focus {\n border-color: #3f3f3f !important;\n box-shadow: 0 0 0 3px rgba(0, 0, 0, 0.1) !important;\n outline: none;\n}\n\n/* Panel invisible jusqu'au repositionnement (évite le flash position basse → haute) */\n.datepickerbook:not(.dp-ready) {\n visibility: hidden !important;\n}\n\n/* Neutralise les styles hérités */\n.datepickerbook table,\n.datepickerbook tbody,\n.datepickerbook tr,\n.datepickerbook td,\n.datepickerbook th {\n background-color: unset !important;\n color: inherit !important;\n border: none;\n}\n\n/* Restaure les couleurs et l'entete du calendrier */\n.datepickerbook .p-datepicker {\n background-color: #ffffff !important;\n color: #1a1e26 !important;\n border-radius: 7px;\n box-shadow: 0 0 8px rgba(0, 0, 0, 0.1);\n}\n\n.datepickerbook .datepicker-custom-header {\n display: flex;\n flex-direction: column;\n gap: 7px;\n padding: 7px 10.5px;\n}\n\n.datepickerbook .datepicker-spinner {\n display: flex;\n flex-direction: column;\n align-items: center;\n font-size: 11.9px;\n}\n\n.datepickerbook .dp-label {\n margin: 3.5px 0;\n font-weight: 500;\n}\n\n.p-datepicker .p-datepicker-title,\n.p-datepicker .p-datepicker-prev,\n.p-datepicker .p-datepicker-next {\n display: none !important;\n}\n\n.datepickerbook .p-datepicker-header {\n justify-content: center;\n}\n\n.datepickerbook .dp-popup {\n position: absolute;\n top: 100%;\n margin-top: 3.5px;\n background: #ffffff;\n border: 1px solid #e0e3e8;\n border-radius: 4px;\n padding: 3.5px;\n z-index: 10;\n}\n\n.datepickerbook .dp-popup-months,\n.datepickerbook .dp-popup-years {\n display: grid;\n grid-template-columns: repeat(3, auto);\n gap: 3.5px;\n}\n\n.datepickerbook .dp-popup-item {\n border: none;\n background: transparent;\n padding: 2.1px 5.6px;\n cursor: pointer;\n font-size: 11.2px;\n}\n\n.datepickerbook .dp-popup-item:hover {\n background: #f4f5f6;\n}\n\n/*.datepickerbook .dp-header-top {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 10.5px;\n}*/\n.datepickerbook .dp-header-part {\n display: flex;\n align-items: center;\n gap: 3.5px;\n}\n\n.datepickerbook .dp-label-button {\n border: none;\n background: transparent;\n cursor: pointer;\n font-weight: 800;\n font-size: 16px;\n margin: 3.5px 0;\n}\n\n.datepickerbook.dp-monthyear-mode .dp-monthyear-header {\n padding-bottom: 3.5px;\n}\n\n.datepickerbook {\n display: flex;\n align-items: center;\n gap: 7px;\n margin-bottom: 3.5px;\n}\n\n.datepickerbook .dp-back-button {\n border: none;\n background: transparent;\n cursor: pointer;\n font-size: 12.6px;\n}\n\n.datepickerbook .dp-title {\n font-weight: 600;\n font-size: 12.6px;\n}\n\n/* Colonnes mois / années */\n.datepickerbook .dp-header-lists {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 7px;\n}\n\n.datepickerbook .dp-month-list,\n.datepickerbook .dp-year-list {\n padding-right: 3.5px;\n display: flex;\n flex-direction: column;\n gap: 2.1px;\n}\n\n.datepickerbook .dp-list-item:hover {\n background: #f4f5f6;\n}\n\n.p-datepicker-header.datepicker-custom-header.dp-monthyear-header {\n margin: auto;\n}\n\n/*.p-monthpicker*/\n.p-datepicker.dp-monthyear-mode {\n box-shadow: none !important;\n border-radius: 0px;\n}\n.p-datepicker.dp-monthyear-mode .dp-header-top-alt {\n display: none !important;\n}\n\n.p-datepicker-monthpicker.dp-monthyear-mode {\n box-shadow: none !important;\n border-radius: 0px;\n}\n.p-datepicker-monthpicker.dp-monthyear-mode .dp-header-top-alt {\n display: none !important;\n}\n\n.p-datepicker {\n width: 331px !important;\n min-width: 331px !important;\n max-width: 331px !important;\n}\n.p-datepicker .dp-arrow {\n border: none;\n background-color: transparent;\n color: #b0b8c4;\n cursor: pointer;\n transition: color 180ms cubic-bezier(0.4, 0, 0.2, 1), background-color 180ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n.p-datepicker .dp-arrow:hover {\n color: #3f3f3f;\n background-color: rgba(63, 63, 63, 0.08);\n}\n.p-datepicker.dp-year-only {\n box-shadow: none !important;\n width: auto !important;\n min-width: unset !important;\n max-width: unset !important;\n}\n.p-datepicker.dp-year-only .dp-header-top-alt {\n display: none !important;\n}\n.p-datepicker.dp-year-only .dp-monthyear-header {\n width: 205px;\n min-width: 205px;\n max-width: 205px;\n}\n.p-datepicker.dp-year-only .dp-monthyear-header .dp-year-container {\n width: 100%;\n}\n.p-datepicker.dp-year-only .dp-year-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: space-between;\n}\n.p-datepicker.dp-year-only .dp-year-container .dp-arrow-container {\n width: 100%;\n border-top: 1px solid #e0e3e8;\n height: 51px;\n display: flex;\n align-items: center;\n}\n.p-datepicker.dp-year-only .dp-year-container .dp-arrow-container .dp-arrow-up {\n border-right: 1px solid #e0e3e8;\n border-radius: 0px 0px 0px 5px !important;\n}\n.p-datepicker.dp-year-only .dp-year-container .dp-arrow-container .dp-arrow-down {\n border-radius: 0px 0px 5px 0px !important;\n}\n.p-datepicker.dp-year-only .dp-year-container .dp-arrow-container .dp-arrow-year {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 49%;\n border-radius: 0px;\n flex: 1;\n}\n.p-datepicker.dp-year-only .dp-year-container .dp-arrow-container .dp-arrow-year:hover {\n background-color: rgba(63, 63, 63, 0.08);\n}\n.p-datepicker.dp-year-only .dp-year-container .dp-year-list {\n width: 100%;\n gap: 0px;\n padding: 0px;\n}\n.p-datepicker.dp-year-only .dp-year-container .dp-list-item-active {\n width: 100%;\n color: #ffffff !important;\n background-color: #3f3f3f !important;\n border-bottom: 1px solid #3f3f3f !important;\n font-weight: 600;\n}\n.p-datepicker.dp-year-only .dp-year-container .dp-list-item {\n background-color: transparent;\n border: none;\n color: #1a1e26;\n transition: 0s !important;\n height: 25px;\n font-size: 16px;\n border-radius: 0px;\n border-bottom: 1px solid #e0e3e8;\n width: 100%;\n}\n.p-datepicker.dp-year-only .dp-year-container .dp-list-item:not(.dp-list-item-big) {\n padding: 3px 10px !important;\n}\n.p-datepicker.dp-year-only .dp-year-container .dp-list-item:not(.dp-list-item-big):hover {\n background-color: rgba(63, 63, 63, 0.08) !important;\n color: #3f3f3f;\n}\n.p-datepicker.dp-year-only .dp-year-container .dp-list-item {\n padding: 3px 10px;\n transition: background 180ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n.dp-monthyear-mode .p-datepicker-group, .p-datepicker-monthpicker .p-datepicker-group, .dp-year-only .p-datepicker-group {\n padding: 0px !important;\n border: 0px solid transparent !important;\n}\n.dp-monthyear-mode .dp-monthyear-header, .p-datepicker-monthpicker .dp-monthyear-header, .dp-year-only .dp-monthyear-header {\n justify-content: flex-start;\n gap: 0;\n background: #ffffff;\n border: 1px solid rgba(255, 255, 255, 0.33);\n border-radius: 8px;\n position: absolute;\n top: 0;\n left: 0;\n padding: 0px !important;\n width: 331px;\n min-width: 331px;\n max-width: 331px;\n}\n.dp-monthyear-mode .dp-header-top-alt, .p-datepicker-monthpicker .dp-header-top-alt, .dp-year-only .dp-header-top-alt {\n width: 100%;\n height: 50px !important;\n display: flex;\n align-items: center;\n justify-content: space-between;\n border-bottom: 1px solid #e0e3e8;\n}\n.dp-monthyear-mode .dp-header-top-alt .dp-header-top-alt-part:first-child, .p-datepicker-monthpicker .dp-header-top-alt .dp-header-top-alt-part:first-child, .dp-year-only .dp-header-top-alt .dp-header-top-alt-part:first-child {\n border-right: 1px solid #e0e3e8;\n}\n.dp-monthyear-mode .dp-header-top-alt .dp-header-top-alt-part, .p-datepicker-monthpicker .dp-header-top-alt .dp-header-top-alt-part, .dp-year-only .dp-header-top-alt .dp-header-top-alt-part {\n width: 49%;\n height: 50px;\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n font-weight: 600;\n color: #1a1e26;\n font-size: 16px;\n text-transform: capitalize;\n}\n.dp-monthyear-mode .p-datepicker-calendar-container, .p-datepicker-monthpicker .p-datepicker-calendar-container, .dp-year-only .p-datepicker-calendar-container {\n display: none;\n}\n.dp-monthyear-mode .dp-actions, .p-datepicker-monthpicker .dp-actions, .dp-year-only .dp-actions {\n width: 100%;\n background-color: #ffffff;\n display: flex;\n align-items: center;\n justify-content: space-between;\n border-radius: 0px 0px 5px 5px;\n padding: 0px 10px 10px 10px;\n}\n.dp-monthyear-mode .dp-actions .p-button:first-child, .p-datepicker-monthpicker .dp-actions .p-button:first-child, .dp-year-only .dp-actions .p-button:first-child {\n border: 0px solid transparent;\n color: #3f3f3f;\n}\n.dp-monthyear-mode .dp-actions .p-button:last-child, .p-datepicker-monthpicker .dp-actions .p-button:last-child, .dp-year-only .dp-actions .p-button:last-child {\n background-color: #ffffff;\n border: 1px solid #3f3f3f;\n color: #3f3f3f;\n}\n.dp-monthyear-mode .dp-actions .p-button:last-child:hover, .p-datepicker-monthpicker .dp-actions .p-button:last-child:hover, .dp-year-only .dp-actions .p-button:last-child:hover {\n background-color: #3f3f3f;\n color: #ffffff;\n}\n.dp-monthyear-mode .dp-actions .p-button, .p-datepicker-monthpicker .dp-actions .p-button, .dp-year-only .dp-actions .p-button {\n padding: 10px 15px;\n}\n.dp-monthyear-mode .dp-actions .p-button .p-button-icon, .p-datepicker-monthpicker .dp-actions .p-button .p-button-icon, .dp-year-only .dp-actions .p-button .p-button-icon {\n display: none;\n}\n.dp-monthyear-mode .dp-header-lists, .p-datepicker-monthpicker .dp-header-lists, .dp-year-only .dp-header-lists {\n width: calc(100% - 20px);\n height: 300px;\n display: flex;\n align-items: flex-start;\n gap: initial;\n padding: 0px;\n margin: 10px;\n}\n.dp-monthyear-mode .dp-month-list, .p-datepicker-monthpicker .dp-month-list, .dp-year-only .dp-month-list {\n transition: none !important;\n border: 1px solid #e0e3e8;\n margin: 0px 10px 0px 0px !important;\n gap: 0px;\n}\n.dp-monthyear-mode .dp-month-list .dp-list-item-active, .p-datepicker-monthpicker .dp-month-list .dp-list-item-active, .dp-year-only .dp-month-list .dp-list-item-active {\n width: 100%;\n color: #ffffff !important;\n background-color: #3f3f3f !important;\n border-bottom: 1px solid #3f3f3f !important;\n font-weight: 600;\n}\n.dp-monthyear-mode .dp-month-list .dp-list-item, .p-datepicker-monthpicker .dp-month-list .dp-list-item, .dp-year-only .dp-month-list .dp-list-item {\n border: none;\n height: 25px;\n background-color: transparent;\n font-size: 16px;\n text-transform: capitalize;\n border-radius: 0px;\n margin: 0px;\n padding: 3px;\n width: calc(100% - 0px);\n border-bottom: 1px solid #e0e3e8;\n}\n.dp-monthyear-mode .dp-month-list .dp-list-item:hover, .p-datepicker-monthpicker .dp-month-list .dp-list-item:hover, .dp-year-only .dp-month-list .dp-list-item:hover {\n background-color: rgba(63, 63, 63, 0.08);\n}\n.dp-monthyear-mode .dp-month-list .dp-list-item:last-child, .p-datepicker-monthpicker .dp-month-list .dp-list-item:last-child, .dp-year-only .dp-month-list .dp-list-item:last-child {\n border: none;\n}\n.dp-monthyear-mode .dp-year-container, .p-datepicker-monthpicker .dp-year-container, .dp-year-only .dp-year-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: space-between;\n border: 1px solid #e0e3e8;\n}\n.dp-monthyear-mode .dp-year-container .dp-arrow-container, .p-datepicker-monthpicker .dp-year-container .dp-arrow-container, .dp-year-only .dp-year-container .dp-arrow-container {\n width: 100%;\n border-top: 1px solid #e0e3e8;\n height: 51px;\n display: flex;\n align-items: center;\n}\n.dp-monthyear-mode .dp-year-container .dp-arrow-container .dp-arrow-up, .p-datepicker-monthpicker .dp-year-container .dp-arrow-container .dp-arrow-up, .dp-year-only .dp-year-container .dp-arrow-container .dp-arrow-up {\n border-right: 1px solid #e0e3e8;\n}\n.dp-monthyear-mode .dp-year-container .dp-arrow-container .dp-arrow-year, .p-datepicker-monthpicker .dp-year-container .dp-arrow-container .dp-arrow-year, .dp-year-only .dp-year-container .dp-arrow-container .dp-arrow-year {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 49%;\n border-radius: 0px;\n flex: 1;\n}\n.dp-monthyear-mode .dp-year-container .dp-year-list, .p-datepicker-monthpicker .dp-year-container .dp-year-list, .dp-year-only .dp-year-container .dp-year-list {\n width: 100%;\n gap: 0px;\n padding: 0px;\n}\n.dp-monthyear-mode .dp-year-container .dp-list-item-active, .p-datepicker-monthpicker .dp-year-container .dp-list-item-active, .dp-year-only .dp-year-container .dp-list-item-active {\n width: 100%;\n color: #ffffff !important;\n background-color: #3f3f3f !important;\n border-bottom: 1px solid #3f3f3f !important;\n font-weight: 600;\n}\n.dp-monthyear-mode .dp-year-container .dp-list-item, .p-datepicker-monthpicker .dp-year-container .dp-list-item, .dp-year-only .dp-year-container .dp-list-item {\n background-color: transparent;\n border: none;\n color: #1a1e26;\n transition: 0s !important;\n height: 25px;\n font-size: 16px;\n border-radius: 0px;\n border-bottom: 1px solid #e0e3e8;\n width: 100%;\n padding: 3px 10px;\n}\n.dp-monthyear-mode .dp-year-container .dp-list-item:not(.dp-list-item-big), .p-datepicker-monthpicker .dp-year-container .dp-list-item:not(.dp-list-item-big), .dp-year-only .dp-year-container .dp-list-item:not(.dp-list-item-big) {\n padding: 3px 10px !important;\n}\n.dp-monthyear-mode .dp-year-container .dp-list-item:not(.dp-list-item-big):hover, .p-datepicker-monthpicker .dp-year-container .dp-list-item:not(.dp-list-item-big):hover, .dp-year-only .dp-year-container .dp-list-item:not(.dp-list-item-big):hover {\n background-color: rgba(63, 63, 63, 0.08) !important;\n color: #3f3f3f;\n}\n.dp-monthyear-mode .dp-month-list, .dp-monthyear-mode .dp-year-container, .p-datepicker-monthpicker .dp-month-list, .p-datepicker-monthpicker .dp-year-container, .dp-year-only .dp-month-list, .dp-year-only .dp-year-container {\n width: 49%;\n flex: 1;\n margin: 0px;\n background-color: transparent;\n padding: 0px;\n height: 100%;\n}\n.dp-monthyear-mode .dp-month-list .dp-list-item, .dp-monthyear-mode .dp-year-container .dp-list-item, .p-datepicker-monthpicker .dp-month-list .dp-list-item, .p-datepicker-monthpicker .dp-year-container .dp-list-item, .dp-year-only .dp-month-list .dp-list-item, .dp-year-only .dp-year-container .dp-list-item {\n cursor: pointer;\n}\n.dp-monthyear-mode .dp-month-list .dp-list-item:hover, .dp-monthyear-mode .dp-year-container .dp-list-item:hover, .p-datepicker-monthpicker .dp-month-list .dp-list-item:hover, .p-datepicker-monthpicker .dp-year-container .dp-list-item:hover, .dp-year-only .dp-month-list .dp-list-item:hover, .dp-year-only .dp-year-container .dp-list-item:hover {\n color: #3f3f3f;\n border-bottom: 1px solid rgba(63, 63, 63, 0.08);\n}\n.dp-monthyear-mode .dp-month-list:hover, .dp-monthyear-mode .dp-year-container:hover, .p-datepicker-monthpicker .dp-month-list:hover, .p-datepicker-monthpicker .dp-year-container:hover, .dp-year-only .dp-month-list:hover, .dp-year-only .dp-year-container:hover {\n background-color: rgba(255, 255, 255, 0.31);\n}\n\n.p-datepicker {\n padding: 0px;\n background-color: #ffffff;\n box-shadow: 1px 2px 26px rgba(0, 0, 0, 0.21);\n width: 321px;\n}\n.p-datepicker .p-datepicker-group-container {\n width: 100%;\n}\n.p-datepicker .p-datepicker-group {\n background: #ffffff;\n border-radius: 8px;\n padding-bottom: 1px;\n}\n.p-datepicker .p-datepicker-header {\n padding: 0px;\n /*position: fixed;\n left: 0;*/\n height: 50px;\n}\n.p-datepicker .p-datepicker-header .datepicker-custom-header {\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: space-between;\n}\n.p-datepicker .p-datepicker-header .datepicker-custom-header .dp-header-top {\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: space-between;\n border-bottom: 1px solid #e0e3e8;\n}\n.p-datepicker .p-datepicker-header .datepicker-custom-header .dp-header-top .dp-header-month {\n border-right: 1px solid #e0e3e8;\n}\n.p-datepicker .p-datepicker-header .datepicker-custom-header .dp-header-top .dp-header-month .dp-arrow-left {\n border-radius: 7px 0px 0px 0px;\n}\n.p-datepicker .p-datepicker-header .datepicker-custom-header .dp-header-top .dp-header-year .dp-arrow-right {\n border-radius: 0px 7px 0px 0px;\n}\n.p-datepicker .p-datepicker-header .datepicker-custom-header .dp-header-top .dp-header-part {\n width: 49%;\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.p-datepicker .p-datepicker-header .datepicker-custom-header .dp-header-top .dp-header-part .dp-arrow {\n width: 30px;\n height: 49px;\n min-width: 30px;\n min-height: 49px;\n max-width: 30px;\n max-height: 49px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.p-datepicker .p-datepicker-header .datepicker-custom-header .dp-header-top .dp-header-part .dp-arrow:hover {\n background-color: rgba(63, 63, 63, 0.08);\n color: #3f3f3f;\n}\n.p-datepicker .p-datepicker-header .datepicker-custom-header .dp-header-top .dp-header-part .dp-label-button {\n width: calc(100% - 60px);\n display: flex;\n align-items: center;\n justify-content: center;\n height: 50px;\n margin: 0px;\n text-transform: capitalize;\n color: #3f3f3f;\n}\n.p-datepicker .p-datepicker-header .datepicker-custom-header .dp-header-top .dp-header-part .dp-label-button:hover {\n background-color: rgba(63, 63, 63, 0.08);\n font-weight: 800;\n}\n.p-datepicker .p-datepicker-header .datepicker-custom-header .dp-header-top .dp-header-part:hover {\n background-color: rgba(255, 255, 255, 0.31);\n}\n.p-datepicker .p-datepicker-calendar-container {\n padding: 10px;\n /* margin-top: 50px;*/\n}\n.p-datepicker .p-datepicker-calendar-container .p-datepicker-calendar {\n margin: 0px;\n}\n.p-datepicker .p-datepicker-calendar-container .p-datepicker-calendar thead tr th {\n padding: 2px;\n}\n.p-datepicker .p-datepicker-calendar-container .p-datepicker-calendar thead tr th span {\n color: #1a1e26;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.p-datepicker .p-datepicker-calendar-container .p-datepicker-calendar tbody tr .p-datepicker-today {\n background-color: transparent;\n}\n.p-datepicker .p-datepicker-calendar-container .p-datepicker-calendar tbody tr .p-datepicker-today span {\n background-color: transparent;\n font-weight: 600;\n color: #3f3f3f;\n border: 1px solid #3f3f3f;\n text-decoration: underline;\n}\n.p-datepicker .p-datepicker-calendar-container .p-datepicker-calendar tbody tr td {\n padding: 0px;\n border: 1px solid #f4f5f6;\n}\n.p-datepicker .p-datepicker-calendar-container .p-datepicker-calendar tbody tr td .p-highlight {\n color: #ffffff !important;\n background-color: #3f3f3f !important;\n box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.31);\n font-weight: 600;\n}\n.p-datepicker .p-datepicker-calendar-container .p-datepicker-calendar tbody tr td .p-disabled {\n opacity: 0.3;\n cursor: not-allowed;\n background-color: transparent !important;\n font-size: 12px;\n}\n.p-datepicker .p-datepicker-calendar-container .p-datepicker-calendar tbody tr td span {\n margin: 0;\n width: 100%;\n border-radius: 0px;\n}\n.p-datepicker .p-datepicker-calendar-container .p-datepicker-calendar tbody tr td span:hover {\n background-color: rgba(63, 63, 63, 0.08) !important;\n color: #3f3f3f;\n box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.31);\n}\n\n/* WRAPPER GLOBAL */\n.dp-monthyear-header {\n width: 360px;\n background: #ffffff;\n border-radius: 18px;\n padding: 24px 26px;\n box-shadow: 0 8px 26px rgba(0, 0, 0, 0.1);\n display: flex;\n flex-direction: column;\n font-family: Inter, sans-serif;\n gap: 22px;\n}\n\n/* TITRE */\n.dp-header-top-alt .dp-title {\n font-size: 21.7px;\n font-weight: 700;\n text-align: center;\n color: #1a1e26;\n margin-bottom: 2px;\n}\n\n/* HOVER ANNÉES */\n.datepickerbook .dp-year-list .dp-list-item:hover {\n background: rgba(63, 63, 63, 0.15);\n}\n\n.dp-month-list .dp-list-item-active {\n background: #ffffff;\n font-weight: 600;\n}\n\n/* Centrage parfait */\n.dp-year-list {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n padding: 0;\n}\n\n/* Année normale */\n.dp-year-list .dp-list-item {\n font-size: 16.8px;\n color: #b0b8c4;\n padding: 4px 0;\n cursor: pointer;\n transition: 180ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n.dp-year-list .dp-list-item:hover {\n color: #1a1e26;\n}\n\n/* FLECHES */\n.dp-arrow-up,\n.dp-arrow-down {\n font-size: 21px;\n color: #1a1e26;\n padding: 6px;\n border: none;\n background: none;\n cursor: pointer;\n margin: 4px 0;\n}\n\n/* ACTIONS BAS – GROS BOUTONS */\n.dp-actions {\n display: flex;\n justify-content: center;\n gap: 20px;\n padding-top: 5px;\n padding-bottom: 10px;\n}\n\n/* TITRE MOIS ANNEE */\n.dp-header-top {\n margin: auto;\n}\n\n/*DATEPICKER MENSUEL CUSTOMISE*/\n.p-monthpicker {\n display: none !important;\n margin: auto;\n}\n\n.datepickerbook .p-datepicker-header {\n border: none !important;\n border-bottom: none !important;\n box-shadow: none !important;\n background: transparent !important;\n}\n\n.datepickerbook.p-datepicker {\n padding: 0 !important;\n margin: 0 !important;\n}\n\n/*DATEPICKER ANNUEL CUSTOMISE*/\n.p-yearpicker {\n display: none !important;\n}\n\n.datepickerbook .p-datepicker-footer {\n margin-bottom: 20px;\n}\n\n.dp-error-message {\n color: red !important;\n font-style: italic !important;\n display: block !important;\n width: 100% !important;\n max-width: 100% !important;\n white-space: normal !important;\n word-break: break-word !important;\n overflow-wrap: break-word !important;\n line-height: 1.4 !important;\n font-size: 12.25px !important;\n margin-top: 2px !important;\n float: none !important;\n position: static !important;\n}";
13489
13489
  styleInject(css_248z$6);
13490
13490
 
13491
- var _excluded$4 = ["value", "onChange", "placeholder", "dateFormat", "displayMask", "view", "invalid", "errorMessage", "disabled", "locale", "showTime", "showIcon", "icon", "iconBgButton", "iconPos", "name", "id", "fullWidth", "inputProps", "onBlur", "onSelect", "onClick", "showClear", "reopenOnClick", "invalidDateMessage", "onPanelShow", "onPanelHide"];
13491
+ var _excluded$5 = ["value", "onChange", "placeholder", "dateFormat", "displayMask", "view", "invalid", "errorMessage", "disabled", "locale", "showTime", "showIcon", "icon", "iconBgButton", "iconPos", "name", "id", "fullWidth", "inputProps", "onBlur", "onSelect", "onClick", "showClear", "reopenOnClick", "invalidDateMessage", "onPanelShow", "onPanelHide"];
13492
13492
  var normalizeDate = function normalizeDate(v) {
13493
13493
  if (!v) return null;
13494
13494
  return v instanceof Date ? v : new Date(v);
@@ -13542,7 +13542,7 @@ var DatePicker = function DatePicker(_ref) {
13542
13542
  _ref.invalidDateMessage;
13543
13543
  var onPanelShow = _ref.onPanelShow,
13544
13544
  onPanelHide = _ref.onPanelHide,
13545
- rest = _objectWithoutProperties$1(_ref, _excluded$4);
13545
+ rest = _objectWithoutProperties$1(_ref, _excluded$5);
13546
13546
  var _useState = useState(function () {
13547
13547
  return normalizeDate(value);
13548
13548
  }),
@@ -33444,7 +33444,7 @@ var HeaderCell = /*#__PURE__*/React.memo(function (props) {
33444
33444
  });
33445
33445
  HeaderCell.displayName = 'HeaderCell';
33446
33446
 
33447
- var _excluded$3 = ["unstyled", "__TYPE", "ptOptions"];
33447
+ var _excluded$4 = ["unstyled", "__TYPE", "ptOptions"];
33448
33448
  function ownKeys$1$4(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
33449
33449
  function _objectSpread$1$4(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1$4(Object(t), true).forEach(function (r) { _defineProperty$7(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1$4(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
33450
33450
  var TableHeader = /*#__PURE__*/React.memo(function (props) {
@@ -33675,7 +33675,7 @@ var TableHeader = /*#__PURE__*/React.memo(function (props) {
33675
33675
  unstyled = _RowBase$getProps.unstyled;
33676
33676
  _RowBase$getProps.__TYPE;
33677
33677
  _RowBase$getProps.ptOptions;
33678
- var rest = _objectWithoutProperties(_RowBase$getProps, _excluded$3);
33678
+ var rest = _objectWithoutProperties(_RowBase$getProps, _excluded$4);
33679
33679
  var headerRowProps = mergeProps({
33680
33680
  role: 'row'
33681
33681
  }, unstyled ? _objectSpread$1$4({
@@ -37016,8 +37016,13 @@ var PopupPresets = {
37016
37016
  }
37017
37017
  };
37018
37018
 
37019
+ var css_248z$5 = "@charset \"UTF-8\";\n@keyframes fadeIn {\n from {\n opacity: 0;\n transform: scale(0.85);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n}\n@keyframes toastSlideIn {\n from {\n opacity: 0;\n transform: translateX(40px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n}\n@keyframes toastIconPop {\n 0% {\n transform: scale(0);\n opacity: 0;\n }\n 60% {\n transform: scale(1.2);\n opacity: 1;\n }\n 100% {\n transform: scale(1);\n }\n}\n@keyframes toastTextSlide {\n from {\n opacity: 0;\n transform: translateY(6px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n.dropdownbook.p-dropdown-panel {\n z-index: 999999 !important;\n}\n\n.p-tooltip {\n z-index: 1000000 !important;\n}\n\n.dropdown-tooltip-item {\n position: relative;\n width: 100%;\n cursor: pointer;\n}\n\n/* ===== ItemWithTooltip : deux colonnes (libellé à gauche / picto i à l'extrême droite) ===== */\n/* PrimeReact enveloppe le template dans un span inline (.p-dropdown-item-label)\n qui empêche l'item de s'étirer sur toute la largeur du panel */\n.p-dropdown-item .p-dropdown-item-label:has(.dropdown-item-two-cols) {\n display: block;\n width: 100%;\n}\n\n.p-dropdown-items .p-dropdown-item:has(.dropdown-item-two-cols) {\n padding-right: 10px;\n}\n\n.dropdown-item-two-cols {\n display: flex !important;\n align-items: center;\n justify-content: space-between;\n width: 100% !important;\n max-width: none !important;\n}\n\n.dropdown-item-info-icon {\n font-size: 14px;\n color: #6b7280;\n}\n\n/* Application du mixin field sur le wrapper du Dropdown */\n.dropdown-container .p-dropdown {\n font-family: \"Roboto\", sans-serif;\n min-height: 40px;\n padding: 0 12px;\n background: #ffffff;\n border: 1.5px solid #e0e3e8;\n border-radius: 7px;\n color: #1a1e26;\n outline: none;\n transition: border-color 180ms cubic-bezier(0.4, 0, 0.2, 1), box-shadow 180ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n.dropdown-container .p-dropdown:hover:not(:focus):not(:focus-within):not([disabled]):not(.is-disabled) {\n border-color: #c8cdd6;\n}\n.dropdown-container .p-dropdown:focus, .dropdown-container .p-dropdown:focus-within, .dropdown-container .p-dropdown.is-open {\n border-color: #3f3f3f;\n box-shadow: 0 0 0 3px rgba(0, 0, 0, 0.1);\n}\n.dropdown-container .p-dropdown[disabled], .dropdown-container .p-dropdown.is-disabled {\n opacity: 0.45;\n cursor: not-allowed;\n pointer-events: none;\n}\n.dropdown-container .p-dropdown[readonly], .dropdown-container .p-dropdown.is-readonly {\n background: #f4f5f6;\n cursor: default;\n box-shadow: none;\n}\n.dropdown-container .p-dropdown[readonly]:hover, .dropdown-container .p-dropdown.is-readonly:hover {\n border-color: #e0e3e8;\n}\n.dropdown-container .p-dropdown.is-error {\n border-color: #dc2626;\n box-shadow: 0 0 0 3px rgba(220, 38, 38, 0.15);\n}\n.dropdown-container .p-dropdown.is-success {\n border-color: #15803d;\n box-shadow: 0 0 0 3px rgba(21, 128, 61, 0.12);\n}\n.dropdown-container .p-dropdown {\n padding: 0;\n display: flex;\n align-items: center;\n}\n\n.dd-search-row {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n border-bottom: 1px solid #e0e3e8;\n}\n.dd-search-row [class*=-filter-container] {\n flex: 1;\n min-width: 0;\n position: relative;\n}\n.dd-search-row [class*=-filter-container] .p-inputtext {\n width: 100%;\n height: 32px;\n padding: 0 24.5px 0 12px;\n font-size: 14px;\n box-sizing: border-box;\n}\n.dd-search-row [class*=-filter-container] [class*=-filter-icon] {\n right: 10.5px;\n color: #b0b8c4;\n}\n\n.dd-sort-btn {\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border: 1px solid #e0e3e8;\n border-radius: 7px;\n background: #ffffff;\n cursor: pointer;\n color: #b0b8c4;\n font-size: 14px;\n transition: background 180ms cubic-bezier(0.4, 0, 0.2, 1), color 180ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n.dd-sort-btn:hover {\n background: #f4f5f6;\n color: #1a1e26;\n}\n\n.dropdownbook .p-dropdown-header:has(.dd-search-row) {\n padding: 0;\n}\n\n/* ===== Badge couleur dans les items ===== */\n.dd-color-badge {\n display: inline-flex;\n align-items: center;\n gap: 7px;\n padding: 4px 10px;\n border-radius: 14px;\n font-size: 12.25px;\n font-family: \"Roboto\", sans-serif;\n white-space: nowrap;\n cursor: default;\n transition: background-color 180ms cubic-bezier(0.4, 0, 0.2, 1);\n background-color: #f4f5f6;\n color: #1a1e26;\n border: 1px solid #e0e3e8;\n border-color: var(--badge-color, #e0e3e8);\n background-color: color-mix(in srgb, var(--badge-color, #f4f5f6) 50%, transparent);\n}\n.dd-color-badge.is-selected {\n background-color: var(--badge-color, #f4f5f6);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);\n}\n\n.p-dropdown-item:hover .dd-color-badge {\n background-color: var(--badge-color) !important;\n}\n\n/* ===== Override PrimeReact default item colors ===== */\n.dropdownbook .p-dropdown-items .p-dropdown-item:not(.p-highlight):hover {\n background: #f4f5f6 !important;\n color: #1a1e26 !important;\n}\n.dropdownbook .p-dropdown-items .p-dropdown-item.p-highlight {\n background: rgba(63, 63, 63, 0.08) !important;\n color: #1a1e26 !important;\n}\n.dropdownbook .p-dropdown-items .p-dropdown-item.p-highlight.p-focus {\n background: rgba(63, 63, 63, 0.12) !important;\n color: #1a1e26 !important;\n}\n.dropdownbook .p-dropdown-items .p-dropdown-item.p-focus {\n background: #f4f5f6 !important;\n color: #1a1e26 !important;\n}\n\n/* ===== Override PrimeReact filter input focus ===== */\n.dropdownbook .p-dropdown-filter.p-inputtext:hover {\n border-color: #c8cdd6 !important;\n}\n.dropdownbook .p-dropdown-filter.p-inputtext:focus, .dropdownbook .p-dropdown-filter.p-inputtext.p-focus {\n border-color: #3f3f3f !important;\n box-shadow: 0 0 0 3px rgba(0, 0, 0, 0.1) !important;\n outline: none;\n}";
37020
+ styleInject(css_248z$5);
37021
+
37022
+ var _excluded$3 = ["style", "className"],
37023
+ _excluded2$2 = ["class"];
37019
37024
  var DropdownSelectMetaAsync = function DropdownSelectMetaAsync(_ref) {
37020
- var _window$Translator, _window$Translator2;
37025
+ var _computedOptions$, _window$Translator, _window$Translator2;
37021
37026
  var value = _ref.value,
37022
37027
  options = _ref.options,
37023
37028
  _ref$placeholder = _ref.placeholder,
@@ -37028,6 +37033,7 @@ var DropdownSelectMetaAsync = function DropdownSelectMetaAsync(_ref) {
37028
37033
  optionLabel = _ref$optionLabel === void 0 ? 'label' : _ref$optionLabel,
37029
37034
  _ref$optionValue = _ref.optionValue,
37030
37035
  optionValue = _ref$optionValue === void 0 ? 'value' : _ref$optionValue,
37036
+ optionsUrl = _ref.optionsUrl,
37031
37037
  _ref$invalid = _ref.invalid,
37032
37038
  invalid = _ref$invalid === void 0 ? false : _ref$invalid,
37033
37039
  _ref$errorMessage = _ref.errorMessage,
@@ -37039,7 +37045,7 @@ var DropdownSelectMetaAsync = function DropdownSelectMetaAsync(_ref) {
37039
37045
  _ref$editable = _ref.editable,
37040
37046
  editable = _ref$editable === void 0 ? false : _ref$editable,
37041
37047
  _ref$filter = _ref.filter,
37042
- filter = _ref$filter === void 0 ? filter : _ref$filter,
37048
+ filter = _ref$filter === void 0 ? false : _ref$filter,
37043
37049
  _ref$selectMetaConfig = _ref.selectMetaConfig,
37044
37050
  selectMetaConfig = _ref$selectMetaConfig === void 0 ? {
37045
37051
  labelStyle: null,
@@ -37048,7 +37054,79 @@ var DropdownSelectMetaAsync = function DropdownSelectMetaAsync(_ref) {
37048
37054
  _ref$objValue = _ref.objValue,
37049
37055
  objValue = _ref$objValue === void 0 ? null : _ref$objValue,
37050
37056
  _ref$required = _ref.required,
37051
- required = _ref$required === void 0 ? false : _ref$required;
37057
+ required = _ref$required === void 0 ? false : _ref$required,
37058
+ _ref$attr = _ref.attr,
37059
+ attr = _ref$attr === void 0 ? {} : _ref$attr,
37060
+ _ref$choice_attr = _ref.choice_attr,
37061
+ choice_attr = _ref$choice_attr === void 0 ? function () {
37062
+ return {};
37063
+ } : _ref$choice_attr,
37064
+ _ref$optionClassname = _ref.optionClassname,
37065
+ optionClassname = _ref$optionClassname === void 0 ? null : _ref$optionClassname,
37066
+ _ref$valueClassname = _ref.valueClassname,
37067
+ valueClassname = _ref$valueClassname === void 0 ? null : _ref$valueClassname,
37068
+ _ref$isGroupedOption = _ref.isGroupedOption,
37069
+ isGroupedOption = _ref$isGroupedOption === void 0 ? false : _ref$isGroupedOption,
37070
+ _ref$showTooltipGroup = _ref.showTooltipGroup,
37071
+ showTooltipGroup = _ref$showTooltipGroup === void 0 ? false : _ref$showTooltipGroup,
37072
+ _ref$prevTextShowTool = _ref.prevTextShowTooltip,
37073
+ prevTextShowTooltip = _ref$prevTextShowTool === void 0 ? null : _ref$prevTextShowTool,
37074
+ onSearch = _ref.onSearch,
37075
+ _ref$readOnly = _ref.readOnly,
37076
+ readOnly = _ref$readOnly === void 0 ? false : _ref$readOnly,
37077
+ _ref$loading = _ref.loading,
37078
+ externalLoading = _ref$loading === void 0 ? false : _ref$loading,
37079
+ status = _ref.status,
37080
+ _ref$optionStyle = _ref.optionStyle,
37081
+ optionStyle = _ref$optionStyle === void 0 ? {
37082
+ maxWidth: '250px',
37083
+ overflow: 'hidden',
37084
+ textOverflow: 'ellipsis',
37085
+ whiteSpace: 'nowrap'
37086
+ } : _ref$optionStyle,
37087
+ _ref$showClear = _ref.showClear,
37088
+ showClear = _ref$showClear === void 0 ? true : _ref$showClear,
37089
+ _ref$groupedItemTempl = _ref.groupedItemTemplateConfig,
37090
+ groupedItemTemplateConfig = _ref$groupedItemTempl === void 0 ? {
37091
+ showIcon: false,
37092
+ iconKey: 'icon',
37093
+ showImage: false,
37094
+ imageKey: 'image',
37095
+ imageStyle: null,
37096
+ labelStyle: null,
37097
+ generalIcon: null,
37098
+ generalImage: null
37099
+ } : _ref$groupedItemTempl;
37100
+ _ref.isSelectMeta;
37101
+ var hasInfoLine = _ref.hasInfoLine,
37102
+ InfoLineValue = _ref.InfoLineValue,
37103
+ _ref$selectConfig = _ref.selectConfig,
37104
+ selectConfig = _ref$selectConfig === void 0 ? {
37105
+ labelStyle: null,
37106
+ generalIcon: null
37107
+ } : _ref$selectConfig,
37108
+ withIcon = _ref.withIcon,
37109
+ withColor = _ref.withColor,
37110
+ _ref$truncateAt = _ref.truncateAt,
37111
+ truncateAt = _ref$truncateAt === void 0 ? null : _ref$truncateAt;
37112
+ _ref.virtualScroll;
37113
+ var virtualScrollerOptions = _ref.virtualScrollerOptions,
37114
+ _ref$enableItemToolti = _ref.enableItemTooltip,
37115
+ enableItemTooltip = _ref$enableItemToolti === void 0 ? false : _ref$enableItemToolti,
37116
+ _ref$enableItemLink = _ref.enableItemLink,
37117
+ enableItemLink = _ref$enableItemLink === void 0 ? false : _ref$enableItemLink,
37118
+ _ref$openOnHover = _ref.openOnHover,
37119
+ openOnHover = _ref$openOnHover === void 0 ? false : _ref$openOnHover,
37120
+ _ref$itemsCheckedToTh = _ref.itemsCheckedToTheTop,
37121
+ itemsCheckedToTheTop = _ref$itemsCheckedToTh === void 0 ? false : _ref$itemsCheckedToTh,
37122
+ _ref$enableSorting = _ref.enableSorting,
37123
+ enableSorting = _ref$enableSorting === void 0 ? false : _ref$enableSorting,
37124
+ _ref$enableSecondaryL = _ref.enableSecondaryLabel,
37125
+ enableSecondaryLabel = _ref$enableSecondaryL === void 0 ? false : _ref$enableSecondaryL,
37126
+ _ref$secondaryLabelKe = _ref.secondaryLabelKey,
37127
+ secondaryLabelKey = _ref$secondaryLabelKe === void 0 ? 'profession' : _ref$secondaryLabelKe,
37128
+ _ref$subItem = _ref.subItem,
37129
+ subItem = _ref$subItem === void 0 ? false : _ref$subItem;
37052
37130
  var _useState = useState(null),
37053
37131
  _useState2 = _slicedToArray$d(_useState, 2),
37054
37132
  optionSelected = _useState2[0],
@@ -37066,6 +37144,7 @@ var DropdownSelectMetaAsync = function DropdownSelectMetaAsync(_ref) {
37066
37144
  inputValue = _useState8[0],
37067
37145
  setInputValue = _useState8[1];
37068
37146
  var dropdownRef = useRef(null);
37147
+ var dropdownComposantRef = useRef(null);
37069
37148
  useRef(null);
37070
37149
  var clickedFromList = useRef(false);
37071
37150
  var _useState9 = useState(''),
@@ -37076,15 +37155,74 @@ var DropdownSelectMetaAsync = function DropdownSelectMetaAsync(_ref) {
37076
37155
  _useState10 = _slicedToArray$d(_useState1, 2),
37077
37156
  showRequiredError = _useState10[0],
37078
37157
  setShowRequiredError = _useState10[1];
37158
+ var _useState11 = useState(0),
37159
+ _useState12 = _slicedToArray$d(_useState11, 2),
37160
+ tooltipKey = _useState12[0],
37161
+ setTooltipKey = _useState12[1];
37162
+ var _useState13 = useState(null),
37163
+ _useState14 = _slicedToArray$d(_useState13, 2),
37164
+ sortOrder = _useState14[0],
37165
+ setSortOrder = _useState14[1];
37166
+ var _useState15 = useState(false),
37167
+ _useState16 = _slicedToArray$d(_useState15, 2),
37168
+ isDropdownOpen = _useState16[0],
37169
+ setIsDropdownOpen = _useState16[1];
37170
+ var _useState17 = useState(''),
37171
+ _useState18 = _slicedToArray$d(_useState17, 2),
37172
+ selectedGroupLabel = _useState18[0],
37173
+ setSelectedGroupLabel = _useState18[1];
37079
37174
 
37080
37175
  // 🔹 Lazy loading
37081
- var _useState11 = useState(false),
37082
- _useState12 = _slicedToArray$d(_useState11, 2),
37083
- loading = _useState12[0],
37084
- setLoading = _useState12[1];
37176
+ var _useState19 = useState(false),
37177
+ _useState20 = _slicedToArray$d(_useState19, 2),
37178
+ loading = _useState20[0],
37179
+ setLoading = _useState20[1];
37085
37180
  var loadLazyTimeout = useRef();
37086
- useRef(1);
37087
- useRef('');
37181
+ var currentPageRef = useRef(1);
37182
+ var hasMoreRef = useRef(true);
37183
+ var isLoadingRef = useRef(false);
37184
+ var searchTermRef = useRef('');
37185
+ var loadedOptionsRef = useRef([]);
37186
+ var updateLoadedOptions = function updateLoadedOptions(opts) {
37187
+ loadedOptionsRef.current = opts;
37188
+ setLoadedOptions(opts);
37189
+ };
37190
+ var inverseColor = function inverseColor(hexColor) {
37191
+ var r = parseInt(hexColor.substr(1, 2), 16);
37192
+ var g = parseInt(hexColor.substr(3, 2), 16);
37193
+ var b = parseInt(hexColor.substr(5, 2), 16);
37194
+ var luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255;
37195
+ return luminance > 0.18 ? '#000000' : '#FFFFFF';
37196
+ };
37197
+ var truncateLabel = function truncateLabel(label) {
37198
+ if (!label || typeof label !== 'string') return label;
37199
+ if (!truncateAt || label.length <= truncateAt) return label;
37200
+ return label.slice(0, truncateAt) + '…';
37201
+ };
37202
+
37203
+ // PrimeReact 10 ignore la prop `escape` : sa Tooltip écrit toujours via
37204
+ // createTextNode. Un MutationObserver rescande les `.p-tooltip-text` pour
37205
+ // convertir le texte contenant du HTML en innerHTML rendu.
37206
+ useEffect(function () {
37207
+ if (!enableItemTooltip) return undefined;
37208
+ var rewrite = function rewrite() {
37209
+ document.querySelectorAll('.p-tooltip .p-tooltip-text').forEach(function (el) {
37210
+ var raw = el.textContent;
37211
+ if (raw && /<[a-z][\s\S]*>/i.test(raw) && el.innerHTML !== raw) {
37212
+ el.innerHTML = raw;
37213
+ }
37214
+ });
37215
+ };
37216
+ var observer = new MutationObserver(rewrite);
37217
+ observer.observe(document.body, {
37218
+ childList: true,
37219
+ subtree: true,
37220
+ characterData: true
37221
+ });
37222
+ return function () {
37223
+ return observer.disconnect();
37224
+ };
37225
+ }, [enableItemTooltip]);
37088
37226
  var optionTemplate = function optionTemplate(option) {
37089
37227
  var _ref2 = selectMetaConfig || {},
37090
37228
  labelStyle = _ref2.labelStyle,
@@ -37092,17 +37230,115 @@ var DropdownSelectMetaAsync = function DropdownSelectMetaAsync(_ref) {
37092
37230
  var styleLabel = {
37093
37231
  marginLeft: '10px'
37094
37232
  };
37095
- return /*#__PURE__*/React__default.createElement("div", {
37233
+ var tooltipProps = enableItemTooltip ? {
37234
+ 'data-pr-tooltip': (option === null || option === void 0 ? void 0 : option.tooltip) || (option === null || option === void 0 ? void 0 : option.description),
37235
+ 'data-pr-position': 'right'
37236
+ } : {};
37237
+ var tooltipContent = (option === null || option === void 0 ? void 0 : option.tooltip) || (option === null || option === void 0 ? void 0 : option.description);
37238
+ var hasTooltip = Boolean(enableItemTooltip && tooltipContent);
37239
+ var infoIcon = hasTooltip ? /*#__PURE__*/React__default.createElement("i", {
37240
+ className: "pi pi-info-circle dropdown-item-info-icon"
37241
+ }) : null;
37242
+ var secondaryLabel = enableSecondaryLabel ? option === null || option === void 0 ? void 0 : option[secondaryLabelKey] : null;
37243
+ var isLink = enableItemLink && (option === null || option === void 0 ? void 0 : option.link);
37244
+ var handleLinkClick = function handleLinkClick(e) {
37245
+ if (isLink) {
37246
+ e.preventDefault();
37247
+ e.stopPropagation();
37248
+ window.open(option.link, '_blank', 'noopener,noreferrer');
37249
+ }
37250
+ };
37251
+ var optionAttrs = typeof choice_attr === 'function' ? choice_attr(option) : {};
37252
+ var attrStyle = optionAttrs.style,
37253
+ attrClassName = optionAttrs.className,
37254
+ restAttrs = _objectWithoutProperties$1(optionAttrs, _excluded$3);
37255
+ var className = "flex align-items-center dropdown-tooltip-item ".concat(attrClassName || optionClassname || '').trim();
37256
+ if (hasTooltip) {
37257
+ // Deux colonnes : libellé à l'extrême gauche, picto "i" à l'extrême droite.
37258
+ // Le tooltip est porté par l'item entier et pointe sur le picto.
37259
+ return /*#__PURE__*/React__default.createElement("div", _extends$J({}, tooltipProps, restAttrs, {
37260
+ onClick: function onClick() {
37261
+ clickedFromList.current = true;
37262
+ },
37263
+ className: "".concat(className, " dropdown-item-two-cols").trim(),
37264
+ style: _objectSpread2({
37265
+ display: 'flex',
37266
+ alignItems: 'center',
37267
+ gap: '0.5rem',
37268
+ fontSize: '14px',
37269
+ maxWidth: 'none',
37270
+ overflow: 'hidden',
37271
+ textOverflow: 'ellipsis',
37272
+ whiteSpace: 'nowrap',
37273
+ width: '100%',
37274
+ justifyContent: 'space-between'
37275
+ }, attrStyle)
37276
+ }), /*#__PURE__*/React__default.createElement("div", {
37277
+ className: "dropdown-item-label-col",
37278
+ style: {
37279
+ display: 'flex',
37280
+ alignItems: 'center',
37281
+ gap: '0.5rem',
37282
+ minWidth: 0,
37283
+ overflow: 'hidden',
37284
+ textOverflow: 'ellipsis',
37285
+ whiteSpace: 'nowrap'
37286
+ }
37287
+ }, option === null || option === void 0 ? void 0 : option[optionLabel]), /*#__PURE__*/React__default.createElement("div", {
37288
+ className: "dropdown-item-info-col",
37289
+ style: {
37290
+ flexShrink: 0,
37291
+ display: 'flex',
37292
+ alignItems: 'center',
37293
+ marginLeft: '8px'
37294
+ }
37295
+ }, infoIcon));
37296
+ }
37297
+ if (withIcon || withColor) {
37298
+ var _ref3 = selectConfig || {},
37299
+ cfgLabelStyle = _ref3.labelStyle,
37300
+ cfgGeneralIcon = _ref3.generalIcon;
37301
+ return /*#__PURE__*/React__default.createElement("div", _extends$J({}, tooltipProps, restAttrs, {
37302
+ onClick: function onClick() {
37303
+ clickedFromList.current = true;
37304
+ },
37305
+ className: className,
37306
+ style: _objectSpread2(_objectSpread2({
37307
+ fontSize: '14px',
37308
+ display: 'flex',
37309
+ alignItems: 'center',
37310
+ gap: '8px'
37311
+ }, optionStyle), attrStyle)
37312
+ }), withIcon && cfgGeneralIcon && /*#__PURE__*/React__default.createElement("i", {
37313
+ style: {
37314
+ color: option === null || option === void 0 ? void 0 : option.color
37315
+ },
37316
+ className: cfgGeneralIcon
37317
+ }), withColor && option !== null && option !== void 0 && option.color ? /*#__PURE__*/React__default.createElement("span", {
37318
+ className: "dd-color-badge".concat(optionSelected === (option === null || option === void 0 ? void 0 : option[optionValue]) ? ' is-selected' : ''),
37319
+ style: {
37320
+ '--badge-color': option.color,
37321
+ color: inverseColor(option.color)
37322
+ }
37323
+ }, option === null || option === void 0 ? void 0 : option[optionLabel]) : /*#__PURE__*/React__default.createElement("span", {
37324
+ style: _objectSpread2(_objectSpread2({}, cfgLabelStyle), subItem ? {
37325
+ flex: 1
37326
+ } : {})
37327
+ }, option === null || option === void 0 ? void 0 : option[optionLabel]));
37328
+ }
37329
+ return /*#__PURE__*/React__default.createElement("div", _extends$J({}, tooltipProps, restAttrs, {
37096
37330
  onClick: function onClick() {
37097
37331
  clickedFromList.current = true;
37098
37332
  },
37099
- className: "flex align-items-center",
37100
- style: {
37333
+ className: className,
37334
+ style: _objectSpread2({
37101
37335
  padding: '6px 10px',
37102
37336
  height: 'auto'
37103
- }
37104
- }, /*#__PURE__*/React__default.createElement("div", {
37105
- style: _objectSpread2({
37337
+ }, attrStyle)
37338
+ }), /*#__PURE__*/React__default.createElement("div", {
37339
+ style: _objectSpread2(_objectSpread2({}, subItem ? {
37340
+ flex: 1
37341
+ } : {}), {}, {
37106
37342
  fontSize: '15px',
37107
37343
  fontWeight: 'bold'
37108
37344
  }, labelStyle)
@@ -37113,9 +37349,185 @@ var DropdownSelectMetaAsync = function DropdownSelectMetaAsync(_ref) {
37113
37349
  className: generalIcon
37114
37350
  }), /*#__PURE__*/React__default.createElement("span", {
37115
37351
  style: styleLabel
37116
- }, option === null || option === void 0 ? void 0 : option[optionLabel])));
37352
+ }, option === null || option === void 0 ? void 0 : option[optionLabel]), secondaryLabel && /*#__PURE__*/React__default.createElement("div", {
37353
+ onClick: isLink ? handleLinkClick : undefined,
37354
+ onMouseDown: isLink ? function (e) {
37355
+ return e.stopPropagation();
37356
+ } : undefined,
37357
+ style: {
37358
+ cursor: isLink ? 'pointer' : 'default',
37359
+ marginTop: '2px',
37360
+ width: 'fit-content'
37361
+ }
37362
+ }, /*#__PURE__*/React__default.createElement("small", {
37363
+ style: {
37364
+ opacity: 0.75,
37365
+ fontSize: '12px',
37366
+ textDecoration: isLink ? 'underline' : 'none',
37367
+ color: isLink ? '#3b82f6' : 'inherit',
37368
+ fontWeight: 'normal'
37369
+ }
37370
+ }, /*#__PURE__*/React__default.createElement("span", {
37371
+ style: subItem ? {} : {
37372
+ marginLeft: '10px'
37373
+ }
37374
+ }, secondaryLabel)))));
37375
+ };
37376
+ var groupedItemTemplate = function groupedItemTemplate(option) {
37377
+ var _ref4 = groupedItemTemplateConfig || {},
37378
+ showImage = _ref4.showImage,
37379
+ imageKey = _ref4.imageKey,
37380
+ imageStyle = _ref4.imageStyle,
37381
+ showIcon = _ref4.showIcon,
37382
+ iconKey = _ref4.iconKey,
37383
+ labelStyle = _ref4.labelStyle,
37384
+ generalIcon = _ref4.generalIcon,
37385
+ generalImage = _ref4.generalImage;
37386
+ var icon = option.value && option.value[iconKey];
37387
+ var styleLabel = generalIcon || showImage && option[imageKey] || showIcon && icon ? {
37388
+ marginLeft: '10px'
37389
+ } : {};
37390
+ if (option.group) {
37391
+ return /*#__PURE__*/React__default.createElement("div", {
37392
+ className: "flex align-items-center"
37393
+ }, /*#__PURE__*/React__default.createElement("div", {
37394
+ style: _objectSpread2({
37395
+ fontSize: '15px',
37396
+ fontWeight: 'bold'
37397
+ }, labelStyle)
37398
+ }, generalIcon && /*#__PURE__*/React__default.createElement("i", {
37399
+ className: generalIcon,
37400
+ style: _objectSpread2({
37401
+ fontSize: '15px',
37402
+ fontWeight: 'bold'
37403
+ }, labelStyle)
37404
+ }), generalImage && /*#__PURE__*/React__default.createElement("img", {
37405
+ alt: "General",
37406
+ src: generalImage,
37407
+ style: imageStyle || {
37408
+ width: '18px',
37409
+ marginRight: '0.5rem'
37410
+ },
37411
+ className: "mr-2"
37412
+ }), showImage && option[imageKey] && /*#__PURE__*/React__default.createElement("img", {
37413
+ alt: option.label,
37414
+ src: option[imageKey],
37415
+ style: imageStyle || {
37416
+ width: '18px',
37417
+ marginRight: '0.5rem'
37418
+ },
37419
+ className: "mr-2"
37420
+ }), showIcon && icon && /*#__PURE__*/React__default.createElement("i", {
37421
+ className: "mr-2 ".concat(icon),
37422
+ style: _objectSpread2({
37423
+ fontSize: '15px',
37424
+ fontWeight: 'bold'
37425
+ }, labelStyle)
37426
+ }), /*#__PURE__*/React__default.createElement("span", {
37427
+ style: styleLabel
37428
+ }, option.label)));
37429
+ }
37430
+ return null;
37117
37431
  };
37118
- var isInvalidEffective = invalid || showRequiredError;
37432
+ var panelFooterTemplate = function panelFooterTemplate() {
37433
+ if (InfoLineValue) {
37434
+ return /*#__PURE__*/React__default.createElement("div", {
37435
+ style: {
37436
+ padding: '8px'
37437
+ }
37438
+ }, /*#__PURE__*/React__default.createElement("b", null, InfoLineValue));
37439
+ }
37440
+ };
37441
+ var isInvalidEffective = invalid || status === 'error' || showRequiredError;
37442
+
37443
+ // 🔹 Chargement des options depuis une URL (même contrat que MultiSelectMetaAsync)
37444
+ var fetchOptionsFromUrl = /*#__PURE__*/function () {
37445
+ var _ref5 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
37446
+ var search,
37447
+ _ref6,
37448
+ _ref6$page,
37449
+ page,
37450
+ length,
37451
+ start,
37452
+ queryParams,
37453
+ response,
37454
+ responseJSON,
37455
+ dataAjax,
37456
+ mappedOptions,
37457
+ hasMore,
37458
+ _args = arguments,
37459
+ _t;
37460
+ return _regenerator().w(function (_context) {
37461
+ while (1) switch (_context.n) {
37462
+ case 0:
37463
+ search = _args.length > 0 && _args[0] !== undefined ? _args[0] : '';
37464
+ _ref6 = _args.length > 2 && _args[2] !== undefined ? _args[2] : {}, _ref6$page = _ref6.page, page = _ref6$page === void 0 ? 1 : _ref6$page;
37465
+ _context.p = 1;
37466
+ length = 25;
37467
+ start = (page - 1) * length;
37468
+ queryParams = new URLSearchParams();
37469
+ if (search) queryParams.append('search[value]', search);
37470
+ queryParams.append('start', start);
37471
+ queryParams.append('length', length);
37472
+ _context.n = 2;
37473
+ return fetch("".concat(optionsUrl, "?").concat(queryParams.toString()));
37474
+ case 2:
37475
+ response = _context.v;
37476
+ if (response.ok) {
37477
+ _context.n = 4;
37478
+ break;
37479
+ }
37480
+ if (!(response.status === 404)) {
37481
+ _context.n = 3;
37482
+ break;
37483
+ }
37484
+ hasMoreRef.current = false;
37485
+ return _context.a(2, {
37486
+ options: [],
37487
+ hasMore: false
37488
+ });
37489
+ case 3:
37490
+ throw new Error("Erreur HTTP: ".concat(response.status));
37491
+ case 4:
37492
+ _context.n = 5;
37493
+ return response.json();
37494
+ case 5:
37495
+ responseJSON = _context.v;
37496
+ dataAjax = responseJSON.data || [];
37497
+ mappedOptions = dataAjax.map(function (opt) {
37498
+ if (opt.hasOwnProperty('color') && opt.color !== null && opt.color.length > 0) {
37499
+ opt.color = opt.color.toLowerCase();
37500
+ } else {
37501
+ delete opt.color;
37502
+ }
37503
+ opt.label = opt.nom !== undefined && opt.nom !== null ? opt.nom : opt.label;
37504
+ opt.value = opt.id;
37505
+ return opt;
37506
+ });
37507
+ hasMore = start + dataAjax.length < responseJSON.recordsTotal;
37508
+ return _context.a(2, {
37509
+ options: mappedOptions,
37510
+ hasMore: hasMore,
37511
+ additional: {
37512
+ page: page + 1
37513
+ }
37514
+ });
37515
+ case 6:
37516
+ _context.p = 6;
37517
+ _t = _context.v;
37518
+ console.error("Erreur lors de la récupération des options :", _t);
37519
+ return _context.a(2, {
37520
+ options: [],
37521
+ hasMore: false
37522
+ });
37523
+ }
37524
+ }, _callee, null, [[1, 6]]);
37525
+ }));
37526
+ return function fetchOptionsFromUrl() {
37527
+ return _ref5.apply(this, arguments);
37528
+ };
37529
+ }();
37530
+ var loadOptions = typeof options === 'function' ? options : fetchOptionsFromUrl;
37119
37531
  var style = {
37120
37532
  border: isInvalidEffective ? '1px solid red' : '1px solid #ccc',
37121
37533
  width: '100%',
@@ -37126,36 +37538,38 @@ var DropdownSelectMetaAsync = function DropdownSelectMetaAsync(_ref) {
37126
37538
  }, [optionSelected]);
37127
37539
  useEffect(function () {
37128
37540
  setOptionSelected(objValue ? objValue === null || objValue === void 0 ? void 0 : objValue[optionValue] : value !== null && value !== void 0 ? value : null);
37541
+ currentPageRef.current = 1;
37542
+ hasMoreRef.current = true;
37543
+ isLoadingRef.current = false;
37129
37544
  var loadInitialOptions = /*#__PURE__*/function () {
37130
- var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
37131
- var result, _result$options, exists;
37132
- return _regenerator().w(function (_context) {
37133
- while (1) switch (_context.n) {
37545
+ var _ref7 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {
37546
+ var result, initialOpts, exists;
37547
+ return _regenerator().w(function (_context2) {
37548
+ while (1) switch (_context2.n) {
37134
37549
  case 0:
37135
- _context.n = 1;
37136
- return options('', [], {
37550
+ _context2.n = 1;
37551
+ return loadOptions('', [], {
37137
37552
  page: 1
37138
37553
  });
37139
37554
  case 1:
37140
- result = _context.v;
37141
- setLoadedOptions((result === null || result === void 0 ? void 0 : result.options) || []);
37555
+ result = _context2.v;
37556
+ hasMoreRef.current = (result === null || result === void 0 ? void 0 : result.hasMore) !== false;
37557
+ initialOpts = (result === null || result === void 0 ? void 0 : result.options) || [];
37142
37558
  if (objValue) {
37143
- exists = result === null || result === void 0 || (_result$options = result.options) === null || _result$options === void 0 ? void 0 : _result$options.some(function (opt) {
37559
+ exists = initialOpts.some(function (opt) {
37144
37560
  return opt[optionValue] === objValue[optionValue];
37145
37561
  });
37146
- if (!exists) {
37147
- setLoadedOptions(function (prev) {
37148
- return [].concat(_toConsumableArray$a(prev), [objValue]);
37149
- });
37150
- }
37562
+ updateLoadedOptions(exists ? initialOpts : [].concat(_toConsumableArray$a(initialOpts), [objValue]));
37563
+ } else {
37564
+ updateLoadedOptions(initialOpts);
37151
37565
  }
37152
37566
  case 2:
37153
- return _context.a(2);
37567
+ return _context2.a(2);
37154
37568
  }
37155
- }, _callee);
37569
+ }, _callee2);
37156
37570
  }));
37157
37571
  return function loadInitialOptions() {
37158
- return _ref3.apply(this, arguments);
37572
+ return _ref7.apply(this, arguments);
37159
37573
  };
37160
37574
  }();
37161
37575
  loadInitialOptions();
@@ -37163,7 +37577,7 @@ var DropdownSelectMetaAsync = function DropdownSelectMetaAsync(_ref) {
37163
37577
  return function () {
37164
37578
  document.removeEventListener('mousedown', handleClickOutside);
37165
37579
  };
37166
- }, [options, objValue, value]);
37580
+ }, [options, optionsUrl, objValue, value]);
37167
37581
  var handleClickOutside = function handleClickOutside(event) {
37168
37582
  if (dropdownRef.current && !dropdownRef.current.contains(event.target)) {
37169
37583
  setIsEditing(false);
@@ -37181,7 +37595,39 @@ var DropdownSelectMetaAsync = function DropdownSelectMetaAsync(_ref) {
37181
37595
  }
37182
37596
  };
37183
37597
  }, [dropdownRef.current]);
37598
+ useEffect(function () {
37599
+ if (enableItemTooltip) {
37600
+ setTooltipKey(function (prevKey) {
37601
+ return prevKey + 1;
37602
+ });
37603
+ }
37604
+ }, [loadedOptions, enableItemTooltip, optionSelected]);
37605
+ var getSelectedGroupLabel = function getSelectedGroupLabel(selectedValue) {
37606
+ if (!isGroupedOption || !selectedValue) return '';
37607
+ var _iterator = _createForOfIteratorHelper$7(loadedOptions),
37608
+ _step;
37609
+ try {
37610
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
37611
+ var group = _step.value;
37612
+ if (showTooltipGroup && group.items && group.items.some(function (item) {
37613
+ return item.value === selectedValue;
37614
+ })) {
37615
+ if (prevTextShowTooltip) return prevTextShowTooltip + ' ' + group.label;
37616
+ return group.label;
37617
+ }
37618
+ }
37619
+ } catch (err) {
37620
+ _iterator.e(err);
37621
+ } finally {
37622
+ _iterator.f();
37623
+ }
37624
+ return '';
37625
+ };
37626
+ useEffect(function () {
37627
+ if (optionSelected) setSelectedGroupLabel(getSelectedGroupLabel(optionSelected));
37628
+ }, [optionSelected, loadedOptions]);
37184
37629
  var handleChange = function handleChange(e) {
37630
+ if (readOnly) return;
37185
37631
  setOptionSelected(e.value);
37186
37632
  if (clickedFromList.current) {
37187
37633
  var _selected$optionLabel;
@@ -37192,69 +37638,92 @@ var DropdownSelectMetaAsync = function DropdownSelectMetaAsync(_ref) {
37192
37638
  setInputValue((_selected$optionLabel = selected === null || selected === void 0 ? void 0 : selected[optionLabel]) !== null && _selected$optionLabel !== void 0 ? _selected$optionLabel : '');
37193
37639
  }
37194
37640
  clickedFromList.current = false;
37195
- if (onChange) onChange(e.value);
37641
+ if (typeof onChange === 'function') {
37642
+ onChange(e.value);
37643
+ } else if (typeof onChange === 'string' && typeof window[onChange] === 'function') {
37644
+ window[onChange](e.value);
37645
+ }
37196
37646
  };
37197
37647
  var handleClear = function handleClear() {
37198
37648
  setOptionSelected(null);
37199
37649
  setInputValue('');
37200
- if (onChange) onChange(null);
37201
- options('', [], {
37650
+ if (typeof onChange === 'function') {
37651
+ onChange(null);
37652
+ } else if (typeof onChange === 'string' && typeof window[onChange] === 'function') {
37653
+ window[onChange](null);
37654
+ }
37655
+ searchTermRef.current = '';
37656
+ currentPageRef.current = 1;
37657
+ hasMoreRef.current = true;
37658
+ isLoadingRef.current = false;
37659
+ loadOptions('', [], {
37202
37660
  page: 1
37203
37661
  }).then(function (result) {
37204
- setLoadedOptions((result === null || result === void 0 ? void 0 : result.options) || []);
37662
+ hasMoreRef.current = (result === null || result === void 0 ? void 0 : result.hasMore) !== false;
37663
+ updateLoadedOptions((result === null || result === void 0 ? void 0 : result.options) || []);
37205
37664
  });
37206
37665
  };
37207
37666
  var handleInputChange = /*#__PURE__*/function () {
37208
- var _ref4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(e) {
37209
- var search, result, _result$options2, _result, filteredOptions;
37210
- return _regenerator().w(function (_context2) {
37211
- while (1) switch (_context2.n) {
37667
+ var _ref8 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(e) {
37668
+ var search, result, _result$options, _result, filteredOptions;
37669
+ return _regenerator().w(function (_context3) {
37670
+ while (1) switch (_context3.n) {
37212
37671
  case 0:
37213
37672
  search = e.target.value;
37214
37673
  setInputValue(search);
37674
+ if (typeof onSearch === 'function') onSearch(search);
37675
+ searchTermRef.current = search;
37676
+ currentPageRef.current = 1;
37677
+ hasMoreRef.current = true;
37678
+ isLoadingRef.current = false;
37215
37679
  if (search) {
37216
- _context2.n = 2;
37680
+ _context3.n = 2;
37217
37681
  break;
37218
37682
  }
37219
- _context2.n = 1;
37220
- return options('', [], {
37683
+ _context3.n = 1;
37684
+ return loadOptions('', [], {
37221
37685
  page: 1
37222
37686
  });
37223
37687
  case 1:
37224
- result = _context2.v;
37225
- setLoadedOptions((result === null || result === void 0 ? void 0 : result.options) || []);
37226
- _context2.n = 4;
37688
+ result = _context3.v;
37689
+ hasMoreRef.current = (result === null || result === void 0 ? void 0 : result.hasMore) !== false;
37690
+ updateLoadedOptions((result === null || result === void 0 ? void 0 : result.options) || []);
37691
+ _context3.n = 4;
37227
37692
  break;
37228
37693
  case 2:
37229
- _context2.n = 3;
37230
- return options(search, [], {
37694
+ _context3.n = 3;
37695
+ return loadOptions(search, [], {
37231
37696
  page: 1
37232
37697
  });
37233
37698
  case 3:
37234
- _result = _context2.v;
37235
- filteredOptions = (_result === null || _result === void 0 || (_result$options2 = _result.options) === null || _result$options2 === void 0 ? void 0 : _result$options2.filter(function (opt) {
37699
+ _result = _context3.v;
37700
+ hasMoreRef.current = (_result === null || _result === void 0 ? void 0 : _result.hasMore) !== false;
37701
+ filteredOptions = (_result === null || _result === void 0 || (_result$options = _result.options) === null || _result$options === void 0 ? void 0 : _result$options.filter(function (opt) {
37236
37702
  return opt[optionLabel].toLowerCase().includes(search.toLowerCase());
37237
37703
  })) || [];
37238
- setLoadedOptions(filteredOptions);
37704
+ updateLoadedOptions(filteredOptions);
37239
37705
  case 4:
37240
- return _context2.a(2);
37706
+ return _context3.a(2);
37241
37707
  }
37242
- }, _callee2);
37708
+ }, _callee3);
37243
37709
  }));
37244
37710
  return function handleInputChange(_x) {
37245
- return _ref4.apply(this, arguments);
37711
+ return _ref8.apply(this, arguments);
37246
37712
  };
37247
37713
  }();
37714
+ var handleMouseEnter = function handleMouseEnter() {
37715
+ var _dropdownComposantRef;
37716
+ if (!openOnHover || disabled || readOnly) return;
37717
+ (_dropdownComposantRef = dropdownComposantRef.current) === null || _dropdownComposantRef === void 0 || _dropdownComposantRef.show();
37718
+ };
37719
+ var handleMouseLeave = function handleMouseLeave() {
37720
+ var _dropdownComposantRef2;
37721
+ if (!openOnHover) return;
37722
+ (_dropdownComposantRef2 = dropdownComposantRef.current) === null || _dropdownComposantRef2 === void 0 || _dropdownComposantRef2.hide();
37723
+ };
37248
37724
  var selectedOption = loadedOptions.find(function (opt) {
37249
37725
  return opt[optionValue] === optionSelected;
37250
37726
  });
37251
- var inverseColor = function inverseColor(hexColor) {
37252
- var r = parseInt(hexColor.substr(1, 2), 16);
37253
- var g = parseInt(hexColor.substr(3, 2), 16);
37254
- var b = parseInt(hexColor.substr(5, 2), 16);
37255
- var luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255;
37256
- return luminance > 0.18 ? '#000000' : '#FFFFFF';
37257
- };
37258
37727
  var valueTemplate = function valueTemplate() {
37259
37728
  if (isEditing) return null;
37260
37729
  if (!selectedOption) return /*#__PURE__*/React__default.createElement("span", {
@@ -37262,7 +37731,42 @@ var DropdownSelectMetaAsync = function DropdownSelectMetaAsync(_ref) {
37262
37731
  color: '#aaa'
37263
37732
  }
37264
37733
  }, placeholder);
37265
- return /*#__PURE__*/React__default.createElement("span", {
37734
+ var valueTooltip = enableItemTooltip ? (selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.tooltip) || (selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.description) || (selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption[optionLabel]) : null;
37735
+ var valueTooltipAttrs = valueTooltip ? {
37736
+ 'data-pr-tooltip': valueTooltip,
37737
+ 'data-pr-position': 'top'
37738
+ } : {};
37739
+ if (withIcon || withColor) {
37740
+ var _ref9 = selectConfig || {},
37741
+ labelStyle = _ref9.labelStyle,
37742
+ generalIcon = _ref9.generalIcon;
37743
+ return /*#__PURE__*/React__default.createElement("div", {
37744
+ style: _objectSpread2({
37745
+ display: 'flex',
37746
+ alignItems: 'center',
37747
+ gap: '8px',
37748
+ fontFamily: 'Arial',
37749
+ fontSize: '14px'
37750
+ }, valueStyle)
37751
+ }, withIcon && generalIcon && /*#__PURE__*/React__default.createElement("i", {
37752
+ style: {
37753
+ color: selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.color
37754
+ },
37755
+ className: generalIcon
37756
+ }), withColor && selectedOption !== null && selectedOption !== void 0 && selectedOption.color ? /*#__PURE__*/React__default.createElement("span", {
37757
+ className: "dd-color-badge is-selected",
37758
+ style: {
37759
+ '--badge-color': selectedOption.color,
37760
+ color: inverseColor(selectedOption.color)
37761
+ }
37762
+ }, truncateLabel(selectedOption[optionLabel])) : /*#__PURE__*/React__default.createElement("span", {
37763
+ className: valueClassname,
37764
+ style: labelStyle
37765
+ }, truncateLabel(selectedOption[optionLabel])));
37766
+ }
37767
+ return /*#__PURE__*/React__default.createElement("span", _extends$J({
37768
+ className: "".concat(valueClassname || '').concat(valueTooltip ? ' dropdown-tooltip-trigger' : '').trim() || undefined,
37769
+ title: valueTooltip ? undefined : selectedOption[optionLabel],
37266
37770
  style: _objectSpread2({
37267
37771
  backgroundColor: selectedOption !== null && selectedOption !== void 0 && selectedOption.color ? selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.color : '#FFFFFF',
37268
37772
  color: selectedOption !== null && selectedOption !== void 0 && selectedOption.color ? inverseColor(selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.color) : '#FFFFFF',
@@ -37273,41 +37777,53 @@ var DropdownSelectMetaAsync = function DropdownSelectMetaAsync(_ref) {
37273
37777
  display: 'inline-block',
37274
37778
  fontFamily: 'Arial'
37275
37779
  }, valueStyle)
37276
- }, selectedOption[optionLabel]);
37780
+ }, valueTooltipAttrs), truncateLabel(selectedOption[optionLabel]));
37277
37781
  };
37278
37782
 
37279
- // 🔹 Fonction de lazy loading (simulation d’un backend)
37783
+ // 🔹 Lazy loading paginé au scroll (même logique que MultiSelectMetaAsync)
37280
37784
  var onLazyLoad = function onLazyLoad(event) {
37281
37785
  setLoading(true);
37282
- if (loadLazyTimeout.current) {
37283
- clearTimeout(loadLazyTimeout.current);
37284
- }
37285
- loadLazyTimeout.current = setTimeout(function () {
37286
- var first = event.first,
37287
- last = event.last;
37288
- var _items = _toConsumableArray$a(loadedOptions);
37289
- for (var i = first; i < last; i++) {
37290
- if (!_items[i]) {
37291
- _items[i] = _defineProperty$g(_defineProperty$g({}, optionLabel, "Option #".concat(i)), optionValue, i);
37292
- }
37293
- }
37294
- setLoadedOptions(_items);
37295
- setLoading(false);
37296
- var virtualscroll1 = document.querySelector('.p-virtualscroller.p-dropdown-items-wrapper');
37297
- if (virtualscroll1) {
37298
- virtualscroll1.style.height = "auto";
37299
- }
37300
- var hiddenSelectDiv = document.querySelector('.p-hidden-accessible.p-dropdown-hidden-select');
37301
- if (hiddenSelectDiv) {
37302
- var nextEl = hiddenSelectDiv.nextElementSibling;
37303
- if (nextEl && nextEl.tagName === 'INPUT' && nextEl.value && nextEl.value.trim() !== '') {
37304
- var virtualscroll = document.querySelector('.p-virtualscroller.p-dropdown-items-wrapper');
37305
- if (virtualscroll) {
37306
- virtualscroll.style.height = 'auto';
37307
- }
37786
+ if (event.last < loadedOptionsRef.current.length - 1 || !hasMoreRef.current) {
37787
+ setTimeout(function () {
37788
+ return setLoading(false);
37789
+ }, 0);
37790
+ return;
37791
+ }
37792
+ if (isLoadingRef.current) return;
37793
+ isLoadingRef.current = true;
37794
+ if (loadLazyTimeout.current) clearTimeout(loadLazyTimeout.current);
37795
+ loadLazyTimeout.current = setTimeout(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4() {
37796
+ var nextPage, result, newOptions;
37797
+ return _regenerator().w(function (_context4) {
37798
+ while (1) switch (_context4.n) {
37799
+ case 0:
37800
+ nextPage = currentPageRef.current + 1;
37801
+ _context4.n = 1;
37802
+ return loadOptions(searchTermRef.current, [], {
37803
+ page: nextPage
37804
+ });
37805
+ case 1:
37806
+ result = _context4.v;
37807
+ newOptions = (result === null || result === void 0 ? void 0 : result.options) || [];
37808
+ if (!(newOptions.length === 0)) {
37809
+ _context4.n = 2;
37810
+ break;
37811
+ }
37812
+ hasMoreRef.current = false;
37813
+ isLoadingRef.current = false;
37814
+ setLoading(false);
37815
+ return _context4.a(2);
37816
+ case 2:
37817
+ updateLoadedOptions([].concat(_toConsumableArray$a(loadedOptionsRef.current), _toConsumableArray$a(newOptions)));
37818
+ hasMoreRef.current = (result === null || result === void 0 ? void 0 : result.hasMore) !== false;
37819
+ currentPageRef.current = nextPage;
37820
+ isLoadingRef.current = false;
37821
+ setLoading(false);
37822
+ case 3:
37823
+ return _context4.a(2);
37308
37824
  }
37309
- }
37310
- }, Math.random() * 1000 + 250);
37825
+ }, _callee4);
37826
+ })), 500);
37311
37827
  };
37312
37828
  useEffect(function () {
37313
37829
  var handleAnyClick = function handleAnyClick(e) {
@@ -37334,20 +37850,105 @@ var DropdownSelectMetaAsync = function DropdownSelectMetaAsync(_ref) {
37334
37850
  return document.removeEventListener('click', handleAnyClick);
37335
37851
  };
37336
37852
  }, []);
37337
- return /*#__PURE__*/React__default.createElement("div", {
37338
- ref: dropdownRef,
37339
- className: "flex flex-col gap-1",
37340
- onClick: isInvalidEffective || disabled ? null : function () {
37853
+
37854
+ // 🔹 Options calculées (réordonnancement + tri, comme Dropdown)
37855
+ var smartSort = function smartSort(opts, order, labelKey) {
37856
+ if (!order) return opts;
37857
+ var dir = order === 'desc' ? 1 : -1;
37858
+ return _toConsumableArray$a(opts).sort(function (a, b) {
37859
+ var _a$labelKey, _b$labelKey;
37860
+ var aLabel = String((_a$labelKey = a === null || a === void 0 ? void 0 : a[labelKey]) !== null && _a$labelKey !== void 0 ? _a$labelKey : '').trim();
37861
+ var bLabel = String((_b$labelKey = b === null || b === void 0 ? void 0 : b[labelKey]) !== null && _b$labelKey !== void 0 ? _b$labelKey : '').trim();
37862
+ return dir * aLabel.localeCompare(bLabel, 'fr', {
37863
+ sensitivity: 'base',
37864
+ numeric: true
37865
+ });
37866
+ });
37867
+ };
37868
+ var computedOptions = useMemo(function () {
37869
+ var opts = loadedOptions;
37870
+ if (itemsCheckedToTheTop && optionSelected) {
37871
+ var selected = opts.find(function (opt) {
37872
+ return (opt === null || opt === void 0 ? void 0 : opt[optionValue]) === optionSelected;
37873
+ });
37874
+ if (selected) {
37875
+ opts = [selected].concat(_toConsumableArray$a(opts.filter(function (opt) {
37876
+ return (opt === null || opt === void 0 ? void 0 : opt[optionValue]) !== optionSelected;
37877
+ })));
37878
+ }
37879
+ }
37880
+ if (enableSorting) {
37881
+ opts = smartSort(opts, sortOrder, optionLabel);
37882
+ }
37883
+ return opts;
37884
+ }, [loadedOptions, itemsCheckedToTheTop, optionSelected, enableSorting, sortOrder, optionValue, optionLabel]);
37885
+ var toggleSortOrder = function toggleSortOrder() {
37886
+ setSortOrder(function (prev) {
37887
+ if (prev === null) return 'desc';
37888
+ if (prev === 'desc') return 'asc';
37889
+ return null;
37890
+ });
37891
+ requestAnimationFrame(function () {
37892
+ var _dropdownComposantRef3;
37893
+ (_dropdownComposantRef3 = dropdownComposantRef.current) === null || _dropdownComposantRef3 === void 0 || _dropdownComposantRef3.show();
37894
+ });
37895
+ };
37896
+ var customFilterTemplate = function customFilterTemplate(opts) {
37897
+ if (!enableSorting) return opts.element;
37898
+ return /*#__PURE__*/React__default.createElement("div", {
37899
+ className: "dd-search-row"
37900
+ }, opts.element, /*#__PURE__*/React__default.createElement("button", {
37901
+ type: "button",
37902
+ className: "dd-sort-btn",
37903
+ onClick: function onClick(e) {
37904
+ e.stopPropagation();
37905
+ toggleSortOrder();
37906
+ }
37907
+ }, /*#__PURE__*/React__default.createElement("i", {
37908
+ className: sortOrder === 'desc' ? 'pi pi-sort-amount-down' : sortOrder === 'asc' ? 'pi pi-sort-amount-up-alt' : 'pi pi-sort-alt'
37909
+ })));
37910
+ };
37911
+ var mergedClassName = "flex flex-col gap-1 ".concat(attr["class"] || '').trim();
37912
+ attr["class"];
37913
+ var cleanAttr = _objectWithoutProperties$1(attr, _excluded2$2);
37914
+ return /*#__PURE__*/React__default.createElement("div", _extends$J({
37915
+ ref: dropdownRef
37916
+ }, cleanAttr, {
37917
+ className: mergedClassName,
37918
+ style: {
37919
+ width: '100%'
37920
+ },
37921
+ onMouseEnter: handleMouseEnter,
37922
+ onMouseLeave: handleMouseLeave,
37923
+ onClick: isInvalidEffective || disabled || readOnly ? null : function () {
37341
37924
  return setIsEditing(editable);
37342
37925
  }
37343
- }, /*#__PURE__*/React__default.createElement(Dropdown$1, {
37344
- options: loadedOptions,
37926
+ }), enableItemTooltip && /*#__PURE__*/React__default.createElement(Tooltip$1, {
37927
+ key: tooltipKey,
37928
+ target: ".dropdown-tooltip-item, .dropdown-tooltip-trigger",
37929
+ appendTo: document.body,
37930
+ position: "right",
37931
+ autoHide: false,
37932
+ hideDelay: 150,
37933
+ style: {
37934
+ zIndex: 9999999
37935
+ }
37936
+ }), /*#__PURE__*/React__default.createElement(Dropdown$1, _extends$J({
37937
+ ref: dropdownComposantRef,
37938
+ options: computedOptions,
37345
37939
  onChange: handleChange,
37940
+ onClick: function onClick(e) {
37941
+ if (readOnly) {
37942
+ e.preventDefault();
37943
+ e.stopPropagation();
37944
+ }
37945
+ },
37346
37946
  filter: filter,
37947
+ filterTemplate: filter ? customFilterTemplate : undefined,
37347
37948
  placeholder: placeholder === "" || placeholder === null ? ' ' : placeholder,
37348
37949
  optionLabel: optionLabel,
37349
37950
  optionValue: optionValue,
37350
- showClear: true,
37951
+ showClear: showClear,
37351
37952
  disabled: disabled,
37352
37953
  editable: isEditing,
37353
37954
  onFocus: function onFocus() {
@@ -37365,16 +37966,38 @@ var DropdownSelectMetaAsync = function DropdownSelectMetaAsync(_ref) {
37365
37966
  },
37366
37967
  dropdownMode: "current",
37367
37968
  itemTemplate: optionTemplate,
37368
- valueTemplate: valueTemplate,
37369
- virtualScrollerOptions: {
37969
+ valueTemplate: valueTemplate
37970
+ }, hasInfoLine && {
37971
+ panelFooterTemplate: panelFooterTemplate
37972
+ }, {
37973
+ optionGroupTemplate: isGroupedOption ? groupedItemTemplate : null
37974
+ }, isGroupedOption && computedOptions.length > 0 && Array.isArray((_computedOptions$ = computedOptions[0]) === null || _computedOptions$ === void 0 ? void 0 : _computedOptions$.items) && {
37975
+ optionGroupLabel: 'label',
37976
+ optionGroupChildren: 'items'
37977
+ }, {
37978
+ onShow: function onShow() {
37979
+ if (isGroupedOption && showTooltipGroup) setIsDropdownOpen(true);
37980
+ if (enableItemTooltip) setTooltipKey(function (k) {
37981
+ return k + 1;
37982
+ });
37983
+ },
37984
+ onHide: function onHide() {
37985
+ if (isGroupedOption && showTooltipGroup) setIsDropdownOpen(false);
37986
+ },
37987
+ emptyMessage: externalLoading ? 'Chargement…' : 'Aucune option disponible',
37988
+ virtualScrollerOptions: _objectSpread2({
37370
37989
  lazy: true,
37371
37990
  onLazyLoad: onLazyLoad,
37372
37991
  itemSize: 38,
37373
37992
  showLoader: true,
37374
- loading: loading,
37993
+ loading: loading || externalLoading,
37375
37994
  delay: 25
37376
- },
37377
- className: "w-full md:w-14rem"
37995
+ }, virtualScrollerOptions),
37996
+ className: "w-full"
37997
+ })), !isDropdownOpen && selectedGroupLabel && isGroupedOption && /*#__PURE__*/React__default.createElement(Tooltip$1, {
37998
+ target: ".p-dropdown-label.p-inputtext",
37999
+ content: selectedGroupLabel,
38000
+ position: "top"
37378
38001
  }), name && /*#__PURE__*/React__default.createElement("input", {
37379
38002
  type: "hidden",
37380
38003
  name: name,
@@ -37411,9 +38034,6 @@ var DropdownSelectMetaAsync = function DropdownSelectMetaAsync(_ref) {
37411
38034
  }, errorMessage || (showRequiredError ? ((_window$Translator = window.Translator) === null || _window$Translator === void 0 ? void 0 : _window$Translator.trans('error.required')) || 'Veuillez renseigner ce champ' : ((_window$Translator2 = window.Translator) === null || _window$Translator2 === void 0 ? void 0 : _window$Translator2.trans('error.invalid_selection')) || 'Sélection invalide'))));
37412
38035
  };
37413
38036
 
37414
- var css_248z$5 = "@keyframes fadeIn {\n from {\n opacity: 0;\n transform: scale(0.85);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n}\n@keyframes toastSlideIn {\n from {\n opacity: 0;\n transform: translateX(40px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n}\n@keyframes toastIconPop {\n 0% {\n transform: scale(0);\n opacity: 0;\n }\n 60% {\n transform: scale(1.2);\n opacity: 1;\n }\n 100% {\n transform: scale(1);\n }\n}\n@keyframes toastTextSlide {\n from {\n opacity: 0;\n transform: translateY(6px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n.dropdownbook.p-dropdown-panel {\n z-index: 999999 !important;\n}\n\n.p-tooltip {\n z-index: 1000000 !important;\n}\n\n.dropdown-tooltip-item {\n position: relative;\n width: 100%;\n cursor: pointer;\n}\n\n/* Application du mixin field sur le wrapper du Dropdown */\n.dropdown-container .p-dropdown {\n font-family: \"Roboto\", sans-serif;\n min-height: 40px;\n padding: 0 12px;\n background: #ffffff;\n border: 1.5px solid #e0e3e8;\n border-radius: 7px;\n color: #1a1e26;\n outline: none;\n transition: border-color 180ms cubic-bezier(0.4, 0, 0.2, 1), box-shadow 180ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n.dropdown-container .p-dropdown:hover:not(:focus):not(:focus-within):not([disabled]):not(.is-disabled) {\n border-color: #c8cdd6;\n}\n.dropdown-container .p-dropdown:focus, .dropdown-container .p-dropdown:focus-within, .dropdown-container .p-dropdown.is-open {\n border-color: #3f3f3f;\n box-shadow: 0 0 0 3px rgba(0, 0, 0, 0.1);\n}\n.dropdown-container .p-dropdown[disabled], .dropdown-container .p-dropdown.is-disabled {\n opacity: 0.45;\n cursor: not-allowed;\n pointer-events: none;\n}\n.dropdown-container .p-dropdown[readonly], .dropdown-container .p-dropdown.is-readonly {\n background: #f4f5f6;\n cursor: default;\n box-shadow: none;\n}\n.dropdown-container .p-dropdown[readonly]:hover, .dropdown-container .p-dropdown.is-readonly:hover {\n border-color: #e0e3e8;\n}\n.dropdown-container .p-dropdown.is-error {\n border-color: #dc2626;\n box-shadow: 0 0 0 3px rgba(220, 38, 38, 0.15);\n}\n.dropdown-container .p-dropdown.is-success {\n border-color: #15803d;\n box-shadow: 0 0 0 3px rgba(21, 128, 61, 0.12);\n}\n.dropdown-container .p-dropdown {\n padding: 0;\n display: flex;\n align-items: center;\n}\n\n.dd-search-row {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n border-bottom: 1px solid #e0e3e8;\n}\n.dd-search-row [class*=-filter-container] {\n flex: 1;\n min-width: 0;\n position: relative;\n}\n.dd-search-row [class*=-filter-container] .p-inputtext {\n width: 100%;\n height: 32px;\n padding: 0 24.5px 0 12px;\n font-size: 14px;\n box-sizing: border-box;\n}\n.dd-search-row [class*=-filter-container] [class*=-filter-icon] {\n right: 10.5px;\n color: #b0b8c4;\n}\n\n.dd-sort-btn {\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border: 1px solid #e0e3e8;\n border-radius: 7px;\n background: #ffffff;\n cursor: pointer;\n color: #b0b8c4;\n font-size: 14px;\n transition: background 180ms cubic-bezier(0.4, 0, 0.2, 1), color 180ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n.dd-sort-btn:hover {\n background: #f4f5f6;\n color: #1a1e26;\n}\n\n.dropdownbook .p-dropdown-header:has(.dd-search-row) {\n padding: 0;\n}\n\n/* ===== Badge couleur dans les items ===== */\n.dd-color-badge {\n display: inline-flex;\n align-items: center;\n gap: 7px;\n padding: 4px 10px;\n border-radius: 14px;\n font-size: 12.25px;\n font-family: \"Roboto\", sans-serif;\n white-space: nowrap;\n cursor: default;\n transition: background-color 180ms cubic-bezier(0.4, 0, 0.2, 1);\n background-color: #f4f5f6;\n color: #1a1e26;\n border: 1px solid #e0e3e8;\n border-color: var(--badge-color, #e0e3e8);\n background-color: color-mix(in srgb, var(--badge-color, #f4f5f6) 50%, transparent);\n}\n.dd-color-badge.is-selected {\n background-color: var(--badge-color, #f4f5f6);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);\n}\n\n.p-dropdown-item:hover .dd-color-badge {\n background-color: var(--badge-color) !important;\n}\n\n/* ===== Override PrimeReact default item colors ===== */\n.dropdownbook .p-dropdown-items .p-dropdown-item:not(.p-highlight):hover {\n background: #f4f5f6 !important;\n color: #1a1e26 !important;\n}\n.dropdownbook .p-dropdown-items .p-dropdown-item.p-highlight {\n background: rgba(63, 63, 63, 0.08) !important;\n color: #1a1e26 !important;\n}\n.dropdownbook .p-dropdown-items .p-dropdown-item.p-highlight.p-focus {\n background: rgba(63, 63, 63, 0.12) !important;\n color: #1a1e26 !important;\n}\n.dropdownbook .p-dropdown-items .p-dropdown-item.p-focus {\n background: #f4f5f6 !important;\n color: #1a1e26 !important;\n}\n\n/* ===== Override PrimeReact filter input focus ===== */\n.dropdownbook .p-dropdown-filter.p-inputtext:hover {\n border-color: #c8cdd6 !important;\n}\n.dropdownbook .p-dropdown-filter.p-inputtext:focus, .dropdownbook .p-dropdown-filter.p-inputtext.p-focus {\n border-color: #3f3f3f !important;\n box-shadow: 0 0 0 3px rgba(0, 0, 0, 0.1) !important;\n outline: none;\n}";
37415
- styleInject(css_248z$5);
37416
-
37417
38037
  var _excluded$2 = ["class"],
37418
38038
  _excluded2$1 = ["style", "className"];
37419
38039
  var Dropdown = function Dropdown(props) {
@@ -37519,10 +38139,11 @@ var Dropdown = function Dropdown(props) {
37519
38139
  _props$subItem = props.subItem,
37520
38140
  subItem = _props$subItem === void 0 ? false : _props$subItem,
37521
38141
  _props$required = props.required,
37522
- required = _props$required === void 0 ? false : _props$required;
38142
+ required = _props$required === void 0 ? false : _props$required,
38143
+ optionsUrl = props.optionsUrl;
37523
38144
 
37524
38145
  // --- Async delegation ---
37525
- var isAsyncOptions = typeof options === 'function';
38146
+ var isAsyncOptions = typeof options === 'function' || optionsUrl;
37526
38147
  if (isAsyncOptions) {
37527
38148
  return /*#__PURE__*/React__default.createElement(DropdownSelectMetaAsync, props);
37528
38149
  }
@@ -37628,7 +38249,7 @@ var Dropdown = function Dropdown(props) {
37628
38249
  return prevKey + 1;
37629
38250
  });
37630
38251
  }
37631
- }, [options, enableItemTooltip]);
38252
+ }, [options, enableItemTooltip, optionSelected]);
37632
38253
 
37633
38254
  // --- Helpers ---
37634
38255
  var getSelectedGroupLabel = function getSelectedGroupLabel(selectedValue) {
@@ -37665,6 +38286,34 @@ var Dropdown = function Dropdown(props) {
37665
38286
  return label.slice(0, truncateAt) + '…';
37666
38287
  };
37667
38288
 
38289
+ // --- Tooltip HTML support ---
38290
+ // PrimeReact 10 ignore la prop `escape` : sa Tooltip écrit toujours via
38291
+ // createTextNode. Un MutationObserver global rescande les `.p-tooltip-text`
38292
+ // pour convertir le texte contenant du HTML en innerHTML rendu.
38293
+ // On l'installe une seule fois côté document.body, indépendamment du montage
38294
+ // des composants — car onShow ne se déclenche pas lors du changement de
38295
+ // cible pendant que le tooltip est déjà visible.
38296
+ useEffect(function () {
38297
+ if (!enableItemTooltip) return undefined;
38298
+ var rewrite = function rewrite() {
38299
+ document.querySelectorAll('.p-tooltip .p-tooltip-text').forEach(function (el) {
38300
+ var raw = el.textContent;
38301
+ if (raw && /<[a-z][\s\S]*>/i.test(raw) && el.innerHTML !== raw) {
38302
+ el.innerHTML = raw;
38303
+ }
38304
+ });
38305
+ };
38306
+ var observer = new MutationObserver(rewrite);
38307
+ observer.observe(document.body, {
38308
+ childList: true,
38309
+ subtree: true,
38310
+ characterData: true
38311
+ });
38312
+ return function () {
38313
+ return observer.disconnect();
38314
+ };
38315
+ }, [enableItemTooltip]);
38316
+
37668
38317
  // --- Event handlers ---
37669
38318
  var handleShow = function handleShow() {
37670
38319
  return setIsDropdownOpen(true);
@@ -37712,6 +38361,11 @@ var Dropdown = function Dropdown(props) {
37712
38361
  } : {
37713
38362
  className: 'dropdown-tooltip-item'
37714
38363
  };
38364
+ var tooltipContent = option.tooltip || option.description;
38365
+ var hasTooltip = Boolean(enableItemTooltip && tooltipContent);
38366
+ var infoIcon = hasTooltip ? /*#__PURE__*/React__default.createElement("i", {
38367
+ className: "pi pi-info-circle dropdown-item-info-icon"
38368
+ }) : null;
37715
38369
  var secondaryLabel = enableSecondaryLabel ? option === null || option === void 0 ? void 0 : option[secondaryLabelKey] : null;
37716
38370
  var isLink = enableItemLink && option.link;
37717
38371
  var handleLinkClick = function handleLinkClick(e) {
@@ -37791,10 +38445,7 @@ var Dropdown = function Dropdown(props) {
37791
38445
  optionAttrs.style;
37792
38446
  optionAttrs.className;
37793
38447
  var restAttrs = _objectWithoutProperties$1(optionAttrs, _excluded2$1);
37794
- return /*#__PURE__*/React__default.createElement("div", _extends$J({}, tooltipProps, restAttrs, {
37795
- className: className,
37796
- style: _style
37797
- }), imgUrl && /*#__PURE__*/React__default.createElement("img", {
38448
+ var labelContent = /*#__PURE__*/React__default.createElement(React__default.Fragment, null, imgUrl && /*#__PURE__*/React__default.createElement("img", {
37798
38449
  src: imgUrl,
37799
38450
  alt: "",
37800
38451
  style: {
@@ -37845,6 +38496,42 @@ var Dropdown = function Dropdown(props) {
37845
38496
  marginLeft: '10px'
37846
38497
  }
37847
38498
  }, secondaryLabel)))) : option[optionLabel]);
38499
+ if (hasTooltip) {
38500
+ // Deux colonnes : libellé à l'extrême gauche, picto "i" à l'extrême droite.
38501
+ // Le tooltip est porté par l'item entier (survol de toute la ligne) et,
38502
+ // en position "right" sur un item pleine largeur, il pointe sur le picto.
38503
+ return /*#__PURE__*/React__default.createElement("div", _extends$J({}, tooltipProps, restAttrs, {
38504
+ className: "".concat(className, " dropdown-item-two-cols"),
38505
+ style: _objectSpread2(_objectSpread2({}, _style), {}, {
38506
+ width: '100%',
38507
+ maxWidth: 'none',
38508
+ justifyContent: 'space-between'
38509
+ })
38510
+ }), /*#__PURE__*/React__default.createElement("div", {
38511
+ className: "dropdown-item-label-col",
38512
+ style: {
38513
+ display: 'flex',
38514
+ alignItems: 'center',
38515
+ gap: '0.5rem',
38516
+ minWidth: 0,
38517
+ overflow: 'hidden',
38518
+ textOverflow: 'ellipsis',
38519
+ whiteSpace: 'nowrap'
38520
+ }
38521
+ }, labelContent), /*#__PURE__*/React__default.createElement("div", {
38522
+ className: "dropdown-item-info-col",
38523
+ style: {
38524
+ flexShrink: 0,
38525
+ display: 'flex',
38526
+ alignItems: 'center',
38527
+ marginLeft: '8px'
38528
+ }
38529
+ }, infoIcon));
38530
+ }
38531
+ return /*#__PURE__*/React__default.createElement("div", _extends$J({}, tooltipProps, restAttrs, {
38532
+ className: className,
38533
+ style: _style
38534
+ }), labelContent);
37848
38535
  }
37849
38536
  var _ref2 = selectMetaConfig || {},
37850
38537
  labelStyle = _ref2.labelStyle,
@@ -37917,6 +38604,11 @@ var Dropdown = function Dropdown(props) {
37917
38604
  }, secondaryLabel)))));
37918
38605
  };
37919
38606
  var valueTemplate = function valueTemplate(option) {
38607
+ var valueTooltip = enableItemTooltip ? (option === null || option === void 0 ? void 0 : option.tooltip) || (option === null || option === void 0 ? void 0 : option.description) || (option === null || option === void 0 ? void 0 : option[optionLabel]) : null;
38608
+ var valueTooltipAttrs = valueTooltip ? {
38609
+ 'data-pr-tooltip': valueTooltip,
38610
+ 'data-pr-position': 'top'
38611
+ } : {};
37920
38612
  if (isSelectMeta) {
37921
38613
  if (!isEditing) {
37922
38614
  var iconColor = option !== null && option !== void 0 && option.color ? inverseColor(option === null || option === void 0 ? void 0 : option.color) : '#000000';
@@ -37986,9 +38678,10 @@ var Dropdown = function Dropdown(props) {
37986
38678
  fontSize: '14px'
37987
38679
  }, valueStyle)
37988
38680
  };
37989
- return imgUrl ? /*#__PURE__*/React__default.createElement("div", {
37990
- style: _style2
37991
- }, /*#__PURE__*/React__default.createElement("img", {
38681
+ return imgUrl ? /*#__PURE__*/React__default.createElement("div", _extends$J({
38682
+ style: _style2,
38683
+ className: valueTooltip ? 'dropdown-tooltip-trigger' : undefined
38684
+ }, valueTooltipAttrs), /*#__PURE__*/React__default.createElement("img", {
37992
38685
  src: imgUrl,
37993
38686
  alt: "",
37994
38687
  style: {
@@ -37996,15 +38689,15 @@ var Dropdown = function Dropdown(props) {
37996
38689
  height: '18px',
37997
38690
  objectFit: 'contain'
37998
38691
  }
37999
- }), /*#__PURE__*/React__default.createElement("span", null, option === null || option === void 0 ? void 0 : option[optionLabel])) : /*#__PURE__*/React__default.createElement("span", {
38000
- className: attrs.className,
38692
+ }), /*#__PURE__*/React__default.createElement("span", null, option === null || option === void 0 ? void 0 : option[optionLabel])) : /*#__PURE__*/React__default.createElement("span", _extends$J({
38693
+ className: "".concat(attrs.className || '').concat(valueTooltip ? ' dropdown-tooltip-trigger' : '').trim() || undefined,
38001
38694
  style: _objectSpread2(_objectSpread2(_objectSpread2({}, attrs.style), optionStyle), {}, {
38002
38695
  whiteSpace: 'nowrap',
38003
38696
  overflow: 'hidden',
38004
38697
  textOverflow: 'ellipsis'
38005
38698
  }),
38006
- title: option === null || option === void 0 ? void 0 : option[optionLabel]
38007
- }, truncateLabel(option === null || option === void 0 ? void 0 : option[optionLabel]) || placeholder);
38699
+ title: valueTooltip ? undefined : option === null || option === void 0 ? void 0 : option[optionLabel]
38700
+ }, valueTooltipAttrs), truncateLabel(option === null || option === void 0 ? void 0 : option[optionLabel]) || placeholder);
38008
38701
  }
38009
38702
  };
38010
38703
  var groupedItemTemplate = function groupedItemTemplate(option) {
@@ -38149,9 +38842,11 @@ var Dropdown = function Dropdown(props) {
38149
38842
  }
38150
38843
  }, enableItemTooltip && /*#__PURE__*/React__default.createElement(Tooltip$1, {
38151
38844
  key: tooltipKey,
38152
- target: ".dropdown-tooltip-item",
38845
+ target: ".dropdown-tooltip-item, .dropdown-tooltip-trigger",
38153
38846
  appendTo: document.body,
38154
38847
  position: "right",
38848
+ autoHide: false,
38849
+ hideDelay: 150,
38155
38850
  style: {
38156
38851
  zIndex: 9999999
38157
38852
  }
@@ -38659,15 +39354,19 @@ var DropdownPresets = {
38659
39354
  options: [{
38660
39355
  label: 'Option A',
38661
39356
  value: 'a',
38662
- tooltip: 'Information spécifique pour l’option A'
39357
+ tooltip: '<b>Option A</b> — <i>information</i> spécifique.<br/>Prise en charge du <u>HTML</u>.'
38663
39358
  }, {
38664
39359
  label: 'Option B',
38665
39360
  value: 'b',
38666
- tooltip: 'Détail complémentaire lié à l’option B'
39361
+ tooltip: '<span style="color:#3b82f6">Détail</span> complémentaire pour <b>B</b>'
38667
39362
  }, {
38668
39363
  label: 'Option C',
38669
39364
  value: 'c',
38670
- tooltip: 'Contexte métier propre à cette option'
39365
+ tooltip: 'Contexte métier :<ul style="margin:4px 0 0 16px;padding:0"><li>Point 1</li><li>Point 2</li></ul>'
39366
+ }, {
39367
+ label: 'Option D',
39368
+ value: 'd',
39369
+ tooltip: 'Documentation : <a href="https://example.com" target="_blank" rel="noopener" style="color:#60a5fa;text-decoration:underline">ouvrir la doc</a>'
38671
39370
  }],
38672
39371
  filter: true,
38673
39372
  enableSorting: true
@@ -41015,7 +41714,7 @@ var Badge = /*#__PURE__*/React.memo(/*#__PURE__*/React.forwardRef(function (inPr
41015
41714
  }));
41016
41715
  Badge.displayName = 'Badge';
41017
41716
 
41018
- var css_248z$4 = "@charset \"UTF-8\";\n@keyframes fadeIn {\n from {\n opacity: 0;\n transform: scale(0.85);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n}\n@keyframes toastSlideIn {\n from {\n opacity: 0;\n transform: translateX(40px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n}\n@keyframes toastIconPop {\n 0% {\n transform: scale(0);\n opacity: 0;\n }\n 60% {\n transform: scale(1.2);\n opacity: 1;\n }\n 100% {\n transform: scale(1);\n }\n}\n@keyframes toastTextSlide {\n from {\n opacity: 0;\n transform: translateY(6px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n.multiselect-container {\n position: relative;\n display: inline-block;\n}\n\n/* Application du mixin field sur le wrapper du MultiSelect */\n.multiselect-container .p-multiselect {\n font-family: \"Roboto\", sans-serif;\n min-height: 40px;\n padding: 0 12px;\n background: #ffffff;\n border: 1.5px solid #e0e3e8;\n border-radius: 7px;\n color: #1a1e26;\n outline: none;\n transition: border-color 180ms cubic-bezier(0.4, 0, 0.2, 1), box-shadow 180ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n.multiselect-container .p-multiselect:hover:not(:focus):not(:focus-within):not([disabled]):not(.is-disabled) {\n border-color: #c8cdd6;\n}\n.multiselect-container .p-multiselect:focus, .multiselect-container .p-multiselect:focus-within, .multiselect-container .p-multiselect.is-open {\n border-color: #3f3f3f;\n box-shadow: 0 0 0 3px rgba(0, 0, 0, 0.1);\n}\n.multiselect-container .p-multiselect[disabled], .multiselect-container .p-multiselect.is-disabled {\n opacity: 0.45;\n cursor: not-allowed;\n pointer-events: none;\n}\n.multiselect-container .p-multiselect[readonly], .multiselect-container .p-multiselect.is-readonly {\n background: #f4f5f6;\n cursor: default;\n box-shadow: none;\n}\n.multiselect-container .p-multiselect[readonly]:hover, .multiselect-container .p-multiselect.is-readonly:hover {\n border-color: #e0e3e8;\n}\n.multiselect-container .p-multiselect.is-error {\n border-color: #dc2626;\n box-shadow: 0 0 0 3px rgba(220, 38, 38, 0.15);\n}\n.multiselect-container .p-multiselect.is-success {\n border-color: #15803d;\n box-shadow: 0 0 0 3px rgba(21, 128, 61, 0.12);\n}\n.multiselect-container .p-multiselect {\n padding: 0;\n display: flex;\n align-items: center;\n height: 40px;\n overflow: hidden;\n}\n.multiselect-container .p-multiselect .p-multiselect-trigger {\n border-left: 1px solid #cccccc;\n}\n\n.selected-options-tooltip {\n position: absolute;\n background-color: #ffffff;\n border: 1px solid #e0e3e8;\n border-radius: 4px;\n padding: 8px;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n z-index: 1000;\n width: 400px;\n top: 100%;\n left: 0;\n}\n\n.selected-options-tooltip div {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.multiselect-tooltip-item {\n width: 100%;\n cursor: pointer;\n}\n\n/* ===== Checkbox hiding (replaces inline <style> tags) ===== */\n.ms-no-checkbox .p-multiselect-items .p-multiselect-item .p-checkbox {\n display: none !important;\n}\n\n.ms-no-checkbox .p-multiselect-items .p-multiselect-item {\n padding-left: 14px !important;\n align-items: center;\n}\n\n/* ===== Custom panel header ===== */\n.ms-panel-header {\n padding: 0;\n}\n\n.ms-search-row {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n border-bottom: 1px solid #e0e3e8;\n}\n.ms-search-row [class*=-filter-container] {\n flex: 1;\n min-width: 0;\n position: relative;\n}\n.ms-search-row [class*=-filter-container] .p-inputtext {\n width: 100%;\n height: 32px;\n padding: 0 24.5px 0 12px;\n font-size: 14px;\n box-sizing: border-box;\n}\n.ms-search-row [class*=-filter-container] [class*=-filter-icon] {\n right: 10.5px;\n color: #b0b8c4;\n}\n\n.ms-sort-btn {\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border: 1px solid #e0e3e8;\n border-radius: 7px;\n background: #ffffff;\n cursor: pointer;\n color: #b0b8c4;\n font-size: 14px;\n transition: background 180ms cubic-bezier(0.4, 0, 0.2, 1), color 180ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n.ms-sort-btn:hover {\n background: #f4f5f6;\n color: #1a1e26;\n}\n\n.ms-selectall-row {\n display: flex;\n align-items: center;\n padding: 10px 12px;\n border-bottom: 1px solid #e0e3e8;\n}\n.ms-selectall-row > div:first-child {\n width: 16px !important;\n height: 16px !important;\n margin-right: 8px;\n display: flex;\n align-items: center;\n}\n.ms-selectall-row > div:first-child .ms-group-checkbox {\n width: 16px;\n height: 16px;\n min-width: 16px;\n min-height: 16px;\n}\n\n.ms-selectall-row .p-checkbox {\n margin-right: 0;\n}\n\n.ms-selectall-label {\n font-size: 14px;\n color: #1a1e26;\n}\n\n.ms-counter {\n font-size: 13px;\n color: #b0b8c4;\n margin-left: auto;\n white-space: nowrap;\n}\n\n/* ===== Custom panel footer ===== */\n.ms-panel-footer {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 8px;\n padding: 8px 12px;\n border-top: 1px solid #e0e3e8;\n}\n\n.ms-cancel-btn {\n background: none;\n border: none;\n cursor: pointer;\n color: #b0b8c4;\n font-size: 14px;\n padding: 6px 12px;\n transition: color 180ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n.ms-cancel-btn:hover {\n color: #1a1e26;\n}\n\n.ms-apply-btn {\n background: #3f3f3f;\n color: #ffffff;\n border: none;\n border-radius: 4px;\n padding: 6px 16px;\n cursor: pointer;\n font-size: 14px;\n transition: background 180ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n.ms-apply-btn:hover {\n background: #1a1e26;\n}\n\n/* ===== Group header ===== */\n.ms-group-header {\n display: flex;\n align-items: center;\n width: 100%;\n padding: 4px 0;\n user-select: none;\n}\n\n.ms-group-checkbox {\n width: 16px;\n height: 16px;\n min-width: 16px;\n min-height: 16px;\n border: 1.5px solid #e0e3e8;\n border-radius: 3px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background: #ffffff;\n color: #ffffff;\n font-size: 10px;\n cursor: pointer;\n transition: all 180ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n.ms-group-checkbox.checked, .ms-group-checkbox.p-highlight {\n background-color: #3f3f3f;\n border-color: #3f3f3f;\n}\n.ms-group-checkbox.partial {\n background: linear-gradient(to top right, #3f3f3f 50%, transparent 50%);\n border-color: #3f3f3f;\n}\n.ms-group-checkbox {\n margin-right: 8px;\n}\n\n.ms-group-label {\n font-weight: bold;\n font-size: 14px;\n flex: 1;\n min-width: 0;\n}\n\n.ms-group-collapse-btn {\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border: 1px solid #e0e3e8;\n border-radius: 7px;\n background: #ffffff;\n cursor: pointer;\n color: #b0b8c4;\n font-size: 14px;\n transition: background 180ms cubic-bezier(0.4, 0, 0.2, 1), color 180ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n.ms-group-collapse-btn:hover {\n background: #f4f5f6;\n color: #1a1e26;\n}\n.ms-group-collapse-btn {\n width: 20px;\n height: 20px;\n border-color: #b0b8c4;\n font-size: 10px;\n font-weight: bold;\n margin-left: 8px;\n}\n\n/* ===== Checkbox PrimeReact — ISO avec ms-group-checkbox ===== */\n.p-checkbox-input {\n display: none;\n}\n\n/* Checkbox PrimeReact — items + select all */\n.p-checkbox {\n display: flex;\n align-items: center;\n margin-right: 8px;\n}\n\n.p-multiselect-item {\n display: flex;\n align-items: center;\n padding: 6px 12px !important;\n font-family: \"Roboto\", sans-serif;\n font-weight: 400 !important;\n}\n.p-multiselect-item > span:not([class]) {\n flex: 1;\n min-width: 0;\n}\n\n.ms-selectall-row {\n display: flex;\n align-items: center;\n}\n\n.p-checkbox .p-checkbox-box {\n width: 16px !important;\n height: 16px !important;\n min-width: 16px;\n min-height: 16px;\n border: 1.5px solid #e0e3e8;\n border-radius: 3px;\n background: #ffffff;\n transition: all 180ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n.p-checkbox .p-checkbox-box svg {\n color: #ffffff;\n width: 10px;\n height: 10px;\n}\n\n.p-checkbox.p-highlight .p-checkbox-box {\n background-color: #3f3f3f !important;\n border-color: #3f3f3f !important;\n}\n.p-checkbox.p-highlight .p-checkbox-box svg {\n color: #ffffff;\n}\n\n/* ===== Tokens (chips de valeurs sélectionnées) — chevauchement ===== */\n/* Label container — prend tout l'espace disponible */\n.p-multiselect .p-multiselect-label-container {\n flex: 1 !important;\n min-width: 0 !important;\n overflow: hidden !important;\n}\n\n/* Tokens en ligne, remplissent tout le container */\n.p-multiselect .p-multiselect-label {\n overflow: hidden !important;\n white-space: nowrap !important;\n width: 100% !important;\n display: flex !important;\n align-items: center;\n gap: 0px !important;\n flex-wrap: nowrap !important;\n}\n.p-multiselect .p-multiselect-label .p-multiselect-token {\n position: relative;\n margin-right: 0 !important;\n margin-left: 0 !important;\n flex-shrink: 1;\n min-width: 25%;\n transition: transform 180ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n.p-multiselect .p-multiselect-label .p-multiselect-token .p-multiselect-token-label {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n display: block;\n}\n.p-multiselect .p-multiselect-label .p-multiselect-token .p-multiselect-token-icon {\n min-width: 14px;\n min-height: 14px;\n flex-shrink: 0;\n}\n.p-multiselect .p-multiselect-label .p-multiselect-token:not(:first-child) {\n margin-left: -20px !important;\n}\n.p-multiselect .p-multiselect-label .p-multiselect-token:nth-child(1) {\n z-index: 1;\n}\n.p-multiselect .p-multiselect-label .p-multiselect-token:nth-child(2) {\n z-index: 2;\n}\n.p-multiselect .p-multiselect-label .p-multiselect-token:nth-child(3) {\n z-index: 3;\n}\n.p-multiselect .p-multiselect-label .p-multiselect-token:nth-child(4) {\n z-index: 4;\n}\n.p-multiselect .p-multiselect-label .p-multiselect-token:nth-child(5) {\n z-index: 5;\n}\n.p-multiselect .p-multiselect-label .p-multiselect-token:nth-child(6) {\n z-index: 6;\n}\n.p-multiselect .p-multiselect-label .p-multiselect-token:nth-child(7) {\n z-index: 7;\n}\n.p-multiselect .p-multiselect-label .p-multiselect-token:nth-child(8) {\n z-index: 8;\n}\n.p-multiselect .p-multiselect-label .p-multiselect-token:nth-child(9) {\n z-index: 9;\n}\n.p-multiselect .p-multiselect-label .p-multiselect-token:nth-child(10) {\n z-index: 10;\n}\n.p-multiselect .p-multiselect-label .p-multiselect-token:hover {\n z-index: 100 !important;\n transform: translateY(-2px);\n box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2);\n}\n\n.p-multiselect-token {\n animation: fadeIn 180ms cubic-bezier(0.4, 0, 0.2, 1) both;\n display: inline-flex;\n align-items: center;\n gap: 2px;\n padding: 4px 4px 4px 8px;\n border-radius: 14px;\n font-size: 12.25px;\n font-family: \"Roboto\", sans-serif;\n font-weight: normal;\n font-style: normal;\n white-space: nowrap;\n border: 1px solid var(--badge-color, #e0e3e8);\n background-color: var(--badge-color, #f4f5f6);\n color: inherit;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n transition: transform 180ms cubic-bezier(0.4, 0, 0.2, 1), box-shadow 180ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n.p-multiselect-token .p-multiselect-token-label {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.p-multiselect-token .p-multiselect-token-icon {\n cursor: pointer;\n min-width: 12px;\n min-height: 12px;\n width: 12px;\n height: 12px;\n flex-shrink: 0;\n border-radius: 100%;\n padding: 0;\n margin-left: 0 !important;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background-color 180ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n.p-multiselect-token .p-multiselect-token-icon svg {\n width: 8px;\n height: 8px;\n min-width: 8px;\n min-height: 8px;\n}\n.p-multiselect-token .p-multiselect-token-icon:hover {\n background-color: #ffffff;\n}\n\n/* ===== Badge compteur (> maxSelectedLabels) ===== */\n.ms-counter-badge {\n display: inline-flex;\n align-items: center;\n gap: 5.6px;\n padding: 0;\n font-size: 11.2px;\n font-family: \"Roboto\", sans-serif;\n font-weight: 500;\n white-space: nowrap;\n background: none;\n color: #b0b8c4;\n border: none;\n transition: color 180ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n.ms-counter-badge:hover {\n color: #1a1e26;\n}\n.ms-counter-badge > span:not([class]) {\n color: #1a1e26;\n}\n\n.ms-counter-dots {\n display: flex;\n align-items: center;\n flex-shrink: 0;\n}\n.ms-counter-dots .ms-counter-dot {\n animation: fadeIn 180ms cubic-bezier(0.4, 0, 0.2, 1) both;\n width: 20px;\n height: 20px;\n min-width: 20px;\n border-radius: 100%;\n background-color: #e0e3e8;\n border: 1.5px solid #ffffff;\n display: block;\n cursor: pointer;\n position: relative;\n z-index: 1;\n transform: scale(1);\n transition: transform 180ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n.ms-counter-dots .ms-counter-dot:not(:first-child) {\n margin-left: -5px;\n}\n.ms-counter-dots .ms-counter-dot:hover {\n transform: scale(1.35);\n z-index: 100 !important;\n}\n.ms-counter-dots .ms-counter-dot:nth-child(1) {\n animation-delay: 40ms;\n}\n.ms-counter-dots .ms-counter-dot:nth-child(2) {\n animation-delay: 80ms;\n}\n.ms-counter-dots .ms-counter-dot:nth-child(3) {\n animation-delay: 120ms;\n}\n.ms-counter-dots .ms-counter-dot:nth-child(4) {\n animation-delay: 160ms;\n}\n.ms-counter-dots .ms-counter-dot:nth-child(5) {\n animation-delay: 200ms;\n}\n.ms-counter-dots .ms-counter-dot:nth-child(6) {\n animation-delay: 240ms;\n}\n.ms-counter-dots .ms-counter-dot:nth-child(7) {\n animation-delay: 280ms;\n}\n.ms-counter-dots .ms-counter-dot:nth-child(8) {\n animation-delay: 320ms;\n}\n.ms-counter-dots .ms-counter-dot:nth-child(9) {\n animation-delay: 360ms;\n}\n.ms-counter-dots .ms-counter-dot:nth-child(10) {\n animation-delay: 400ms;\n}\n.ms-counter-dots .ms-counter-dot:nth-child(11) {\n animation-delay: 440ms;\n}\n.ms-counter-dots .ms-counter-dot:nth-child(12) {\n animation-delay: 480ms;\n}\n.ms-counter-dots .ms-counter-dot:nth-child(13) {\n animation-delay: 520ms;\n}\n.ms-counter-dots .ms-counter-dot:nth-child(14) {\n animation-delay: 560ms;\n}\n.ms-counter-dots .ms-counter-dot:nth-child(15) {\n animation-delay: 600ms;\n}\n.ms-counter-dots .ms-counter-dot:nth-child(16) {\n animation-delay: 640ms;\n}\n.ms-counter-dots .ms-counter-dot:nth-child(17) {\n animation-delay: 680ms;\n}\n.ms-counter-dots .ms-counter-dot:nth-child(18) {\n animation-delay: 720ms;\n}\n.ms-counter-dots .ms-counter-dot:nth-child(19) {\n animation-delay: 760ms;\n}\n.ms-counter-dots .ms-counter-dot:nth-child(20) {\n animation-delay: 800ms;\n}\n\n.ms-counter-label {\n cursor: pointer;\n flex: 1;\n min-width: 0;\n display: flex;\n align-items: center;\n}\n\n.ms-counter-end {\n display: flex;\n align-items: center;\n gap: 4px;\n flex-shrink: 0;\n margin-left: auto;\n}\n\n.ms-counter-count {\n font-size: 11.2px;\n font-weight: 600;\n color: #1a1e26;\n}\n\n/* Tooltip custom avec dots colorés */\n.ms-counter-tooltip {\n display: flex;\n flex-direction: column;\n gap: 4px;\n padding: 2px 0;\n}\n\n.ms-counter-tooltip-row {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n font-family: \"Roboto\", sans-serif;\n white-space: nowrap;\n}\n\n.ms-counter-tooltip-dot {\n width: 8px;\n height: 8px;\n min-width: 8px;\n border-radius: 100%;\n background-color: #e0e3e8;\n flex-shrink: 0;\n}\n\n.ms-counter-clear-icon {\n cursor: pointer;\n font-size: 10px;\n min-width: 16px;\n min-height: 16px;\n width: 16px;\n height: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: #b0b8c4;\n border-radius: 100%;\n transition: color 180ms cubic-bezier(0.4, 0, 0.2, 1), background-color 180ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n.ms-counter-clear-icon:hover {\n color: #1a1e26;\n background-color: rgba(0, 0, 0, 0.06);\n}\n\n.p-multiselect-token-label {\n font-size: 12.25px !important;\n overflow: hidden !important;\n text-overflow: ellipsis !important;\n}\n\n/* Un seul token → on autorise les ... si ça dépasse */\n.p-multiselect-token:only-child .p-multiselect-token-label {\n text-overflow: ellipsis !important;\n}\n\n/* ===== Badge couleur dans les items ===== */\n.ms-color-badge {\n display: inline-flex;\n align-items: center;\n gap: 7px;\n padding: 4px 10px;\n border-radius: 14px;\n font-size: 12.25px;\n font-family: \"Roboto\", sans-serif;\n white-space: nowrap;\n cursor: default;\n transition: background-color 180ms cubic-bezier(0.4, 0, 0.2, 1);\n background-color: #f4f5f6;\n color: #1a1e26;\n border: 1px solid #e0e3e8;\n border-color: var(--badge-color, #e0e3e8);\n background-color: color-mix(in srgb, var(--badge-color, #f4f5f6) 50%, transparent);\n}\n.ms-color-badge.is-selected {\n background-color: var(--badge-color, #f4f5f6);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);\n}\n.ms-color-badge {\n cursor: pointer;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n display: block;\n transition: background-color 180ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n.p-multiselect-item:hover .ms-color-badge {\n background-color: var(--badge-color) !important;\n}\n\n/* ===== Groupes — header + indentation enfants ===== */\n.p-multiselect-item-group {\n font-size: 14px;\n font-weight: 600;\n padding: 8px 12px !important;\n position: sticky;\n top: 0;\n z-index: 5;\n background-color: #ffffff !important;\n border-bottom: 1px solid #e0e3e8;\n}\n\n/* Items enfants décalés quand il y a des groupes */\n.p-multiselect-item-group ~ .p-multiselect-item {\n padding-left: 28px !important;\n}\n\n/* ===== Override PrimeReact default item colors ===== */\n.p-multiselect-items .p-multiselect-item:not(.p-highlight):hover {\n background: #f4f5f6 !important;\n color: #1a1e26 !important;\n}\n.p-multiselect-items .p-multiselect-item.p-highlight {\n background: rgba(63, 63, 63, 0.08) !important;\n color: #1a1e26 !important;\n}\n.p-multiselect-items .p-multiselect-item.p-highlight.p-focus {\n background: rgba(63, 63, 63, 0.12) !important;\n color: #1a1e26 !important;\n}\n.p-multiselect-items .p-multiselect-item.p-focus {\n background: #f4f5f6 !important;\n color: #1a1e26 !important;\n}\n\n/* ===== Override PrimeReact filter input focus ===== */\n.p-multiselect-filter.p-inputtext:hover {\n border-color: #c8cdd6 !important;\n}\n.p-multiselect-filter.p-inputtext:focus, .p-multiselect-filter.p-inputtext.p-focus {\n border-color: #3f3f3f !important;\n box-shadow: 0 0 0 3px rgba(0, 0, 0, 0.1) !important;\n outline: none;\n}";
41717
+ var css_248z$4 = "@charset \"UTF-8\";\n@keyframes fadeIn {\n from {\n opacity: 0;\n transform: scale(0.85);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n}\n@keyframes toastSlideIn {\n from {\n opacity: 0;\n transform: translateX(40px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n}\n@keyframes toastIconPop {\n 0% {\n transform: scale(0);\n opacity: 0;\n }\n 60% {\n transform: scale(1.2);\n opacity: 1;\n }\n 100% {\n transform: scale(1);\n }\n}\n@keyframes toastTextSlide {\n from {\n opacity: 0;\n transform: translateY(6px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n.multiselect-container {\n position: relative;\n display: inline-block;\n}\n\n/* Application du mixin field sur le wrapper du MultiSelect */\n.multiselect-container .p-multiselect {\n font-family: \"Roboto\", sans-serif;\n min-height: 40px;\n padding: 0 12px;\n background: #ffffff;\n border: 1.5px solid #e0e3e8;\n border-radius: 7px;\n color: #1a1e26;\n outline: none;\n transition: border-color 180ms cubic-bezier(0.4, 0, 0.2, 1), box-shadow 180ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n.multiselect-container .p-multiselect:hover:not(:focus):not(:focus-within):not([disabled]):not(.is-disabled) {\n border-color: #c8cdd6;\n}\n.multiselect-container .p-multiselect:focus, .multiselect-container .p-multiselect:focus-within, .multiselect-container .p-multiselect.is-open {\n border-color: #3f3f3f;\n box-shadow: 0 0 0 3px rgba(0, 0, 0, 0.1);\n}\n.multiselect-container .p-multiselect[disabled], .multiselect-container .p-multiselect.is-disabled {\n opacity: 0.45;\n cursor: not-allowed;\n pointer-events: none;\n}\n.multiselect-container .p-multiselect[readonly], .multiselect-container .p-multiselect.is-readonly {\n background: #f4f5f6;\n cursor: default;\n box-shadow: none;\n}\n.multiselect-container .p-multiselect[readonly]:hover, .multiselect-container .p-multiselect.is-readonly:hover {\n border-color: #e0e3e8;\n}\n.multiselect-container .p-multiselect.is-error {\n border-color: #dc2626;\n box-shadow: 0 0 0 3px rgba(220, 38, 38, 0.15);\n}\n.multiselect-container .p-multiselect.is-success {\n border-color: #15803d;\n box-shadow: 0 0 0 3px rgba(21, 128, 61, 0.12);\n}\n.multiselect-container .p-multiselect {\n padding: 0;\n display: flex;\n align-items: center;\n height: 40px;\n overflow: hidden;\n}\n.multiselect-container .p-multiselect .p-multiselect-trigger {\n border-left: 1px solid #cccccc;\n}\n\n.selected-options-tooltip {\n position: absolute;\n background-color: #ffffff;\n border: 1px solid #e0e3e8;\n border-radius: 4px;\n padding: 8px;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n z-index: 1000;\n width: 400px;\n top: 100%;\n left: 0;\n}\n\n.selected-options-tooltip div {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.multiselect-tooltip-item {\n width: 100%;\n cursor: pointer;\n}\n\n/* ===== ItemWithTooltip : picto info à l'extrême droite de l'item ===== */\n/* PrimeReact enveloppe le template dans un <span> sans classe ; on force ce span\n à s'étirer sur toute la largeur restante pour que le picto touche le bord droit. */\n.p-multiselect-panel .p-multiselect-item > span {\n flex: 1 1 auto;\n min-width: 0;\n display: block;\n width: 100%;\n}\n\n.multiselect-item-info-icon {\n font-size: 14px;\n color: #6b7280;\n}\n\n/* ===== Checkbox hiding (replaces inline <style> tags) ===== */\n.ms-no-checkbox .p-multiselect-items .p-multiselect-item .p-checkbox {\n display: none !important;\n}\n\n.ms-no-checkbox .p-multiselect-items .p-multiselect-item {\n padding-left: 14px !important;\n align-items: center;\n}\n\n/* ===== Custom panel header ===== */\n.ms-panel-header {\n padding: 0;\n}\n\n.ms-search-row {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n border-bottom: 1px solid #e0e3e8;\n}\n.ms-search-row [class*=-filter-container] {\n flex: 1;\n min-width: 0;\n position: relative;\n}\n.ms-search-row [class*=-filter-container] .p-inputtext {\n width: 100%;\n height: 32px;\n padding: 0 24.5px 0 12px;\n font-size: 14px;\n box-sizing: border-box;\n}\n.ms-search-row [class*=-filter-container] [class*=-filter-icon] {\n right: 10.5px;\n color: #b0b8c4;\n}\n\n.ms-sort-btn {\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border: 1px solid #e0e3e8;\n border-radius: 7px;\n background: #ffffff;\n cursor: pointer;\n color: #b0b8c4;\n font-size: 14px;\n transition: background 180ms cubic-bezier(0.4, 0, 0.2, 1), color 180ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n.ms-sort-btn:hover {\n background: #f4f5f6;\n color: #1a1e26;\n}\n\n.ms-selectall-row {\n display: flex;\n align-items: center;\n padding: 10px 12px;\n border-bottom: 1px solid #e0e3e8;\n}\n.ms-selectall-row > div:first-child {\n width: 16px !important;\n height: 16px !important;\n margin-right: 8px;\n display: flex;\n align-items: center;\n}\n.ms-selectall-row > div:first-child .ms-group-checkbox {\n width: 16px;\n height: 16px;\n min-width: 16px;\n min-height: 16px;\n}\n\n.ms-selectall-row .p-checkbox {\n margin-right: 0;\n}\n\n.ms-selectall-label {\n font-size: 14px;\n color: #1a1e26;\n}\n\n.ms-counter {\n font-size: 13px;\n color: #b0b8c4;\n margin-left: auto;\n white-space: nowrap;\n}\n\n/* ===== Custom panel footer ===== */\n.ms-panel-footer {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 8px;\n padding: 8px 12px;\n border-top: 1px solid #e0e3e8;\n}\n\n.ms-cancel-btn {\n background: none;\n border: none;\n cursor: pointer;\n color: #b0b8c4;\n font-size: 14px;\n padding: 6px 12px;\n transition: color 180ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n.ms-cancel-btn:hover {\n color: #1a1e26;\n}\n\n.ms-apply-btn {\n background: #3f3f3f;\n color: #ffffff;\n border: none;\n border-radius: 4px;\n padding: 6px 16px;\n cursor: pointer;\n font-size: 14px;\n transition: background 180ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n.ms-apply-btn:hover {\n background: #1a1e26;\n}\n\n/* ===== Group header ===== */\n.ms-group-header {\n display: flex;\n align-items: center;\n width: 100%;\n padding: 4px 0;\n user-select: none;\n}\n\n.ms-group-checkbox {\n width: 16px;\n height: 16px;\n min-width: 16px;\n min-height: 16px;\n border: 1.5px solid #e0e3e8;\n border-radius: 3px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background: #ffffff;\n color: #ffffff;\n font-size: 10px;\n cursor: pointer;\n transition: all 180ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n.ms-group-checkbox.checked, .ms-group-checkbox.p-highlight {\n background-color: #3f3f3f;\n border-color: #3f3f3f;\n}\n.ms-group-checkbox.partial {\n background: linear-gradient(to top right, #3f3f3f 50%, transparent 50%);\n border-color: #3f3f3f;\n}\n.ms-group-checkbox {\n margin-right: 8px;\n}\n\n.ms-group-label {\n font-weight: bold;\n font-size: 14px;\n flex: 1;\n min-width: 0;\n}\n\n.ms-group-collapse-btn {\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border: 1px solid #e0e3e8;\n border-radius: 7px;\n background: #ffffff;\n cursor: pointer;\n color: #b0b8c4;\n font-size: 14px;\n transition: background 180ms cubic-bezier(0.4, 0, 0.2, 1), color 180ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n.ms-group-collapse-btn:hover {\n background: #f4f5f6;\n color: #1a1e26;\n}\n.ms-group-collapse-btn {\n width: 20px;\n height: 20px;\n border-color: #b0b8c4;\n font-size: 10px;\n font-weight: bold;\n margin-left: 8px;\n}\n\n/* ===== Checkbox PrimeReact — ISO avec ms-group-checkbox ===== */\n.p-checkbox-input {\n display: none;\n}\n\n/* Checkbox PrimeReact — items + select all */\n.p-checkbox {\n display: flex;\n align-items: center;\n margin-right: 8px;\n}\n\n.p-multiselect-item {\n display: flex;\n align-items: center;\n padding: 6px 12px !important;\n font-family: \"Roboto\", sans-serif;\n font-weight: 400 !important;\n}\n.p-multiselect-item > span:not([class]) {\n flex: 1;\n min-width: 0;\n}\n\n.ms-selectall-row {\n display: flex;\n align-items: center;\n}\n\n.p-checkbox .p-checkbox-box {\n width: 16px !important;\n height: 16px !important;\n min-width: 16px;\n min-height: 16px;\n border: 1.5px solid #e0e3e8;\n border-radius: 3px;\n background: #ffffff;\n transition: all 180ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n.p-checkbox .p-checkbox-box svg {\n color: #ffffff;\n width: 10px;\n height: 10px;\n}\n\n.p-checkbox.p-highlight .p-checkbox-box {\n background-color: #3f3f3f !important;\n border-color: #3f3f3f !important;\n}\n.p-checkbox.p-highlight .p-checkbox-box svg {\n color: #ffffff;\n}\n\n/* ===== Tokens (chips de valeurs sélectionnées) — chevauchement ===== */\n/* Label container — prend tout l'espace disponible */\n.p-multiselect .p-multiselect-label-container {\n flex: 1 !important;\n min-width: 0 !important;\n overflow: hidden !important;\n}\n\n/* Tokens en ligne, remplissent tout le container */\n.p-multiselect .p-multiselect-label {\n overflow: hidden !important;\n white-space: nowrap !important;\n width: 100% !important;\n display: flex !important;\n align-items: center;\n gap: 0px !important;\n flex-wrap: nowrap !important;\n}\n.p-multiselect .p-multiselect-label .p-multiselect-token {\n position: relative;\n margin-right: 0 !important;\n margin-left: 0 !important;\n flex-shrink: 1;\n min-width: 25%;\n transition: transform 180ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n.p-multiselect .p-multiselect-label .p-multiselect-token .p-multiselect-token-label {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n display: block;\n}\n.p-multiselect .p-multiselect-label .p-multiselect-token .p-multiselect-token-icon {\n min-width: 14px;\n min-height: 14px;\n flex-shrink: 0;\n}\n.p-multiselect .p-multiselect-label .p-multiselect-token:not(:first-child) {\n margin-left: -20px !important;\n}\n.p-multiselect .p-multiselect-label .p-multiselect-token:nth-child(1) {\n z-index: 1;\n}\n.p-multiselect .p-multiselect-label .p-multiselect-token:nth-child(2) {\n z-index: 2;\n}\n.p-multiselect .p-multiselect-label .p-multiselect-token:nth-child(3) {\n z-index: 3;\n}\n.p-multiselect .p-multiselect-label .p-multiselect-token:nth-child(4) {\n z-index: 4;\n}\n.p-multiselect .p-multiselect-label .p-multiselect-token:nth-child(5) {\n z-index: 5;\n}\n.p-multiselect .p-multiselect-label .p-multiselect-token:nth-child(6) {\n z-index: 6;\n}\n.p-multiselect .p-multiselect-label .p-multiselect-token:nth-child(7) {\n z-index: 7;\n}\n.p-multiselect .p-multiselect-label .p-multiselect-token:nth-child(8) {\n z-index: 8;\n}\n.p-multiselect .p-multiselect-label .p-multiselect-token:nth-child(9) {\n z-index: 9;\n}\n.p-multiselect .p-multiselect-label .p-multiselect-token:nth-child(10) {\n z-index: 10;\n}\n.p-multiselect .p-multiselect-label .p-multiselect-token:hover {\n z-index: 100 !important;\n transform: translateY(-2px);\n box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2);\n}\n\n.p-multiselect-token {\n animation: fadeIn 180ms cubic-bezier(0.4, 0, 0.2, 1) both;\n display: inline-flex;\n align-items: center;\n gap: 2px;\n padding: 4px 4px 4px 8px;\n border-radius: 14px;\n font-size: 12.25px;\n font-family: \"Roboto\", sans-serif;\n font-weight: normal;\n font-style: normal;\n white-space: nowrap;\n border: 1px solid var(--badge-color, #e0e3e8);\n background-color: var(--badge-color, #f4f5f6);\n color: inherit;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n transition: transform 180ms cubic-bezier(0.4, 0, 0.2, 1), box-shadow 180ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n.p-multiselect-token .p-multiselect-token-label {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.p-multiselect-token .p-multiselect-token-icon {\n cursor: pointer;\n min-width: 12px;\n min-height: 12px;\n width: 12px;\n height: 12px;\n flex-shrink: 0;\n border-radius: 100%;\n padding: 0;\n margin-left: 0 !important;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background-color 180ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n.p-multiselect-token .p-multiselect-token-icon svg {\n width: 8px;\n height: 8px;\n min-width: 8px;\n min-height: 8px;\n}\n.p-multiselect-token .p-multiselect-token-icon:hover {\n background-color: #ffffff;\n}\n\n/* ===== Badge compteur (> maxSelectedLabels) ===== */\n.ms-counter-badge {\n display: inline-flex;\n align-items: center;\n gap: 5.6px;\n padding: 0;\n font-size: 11.2px;\n font-family: \"Roboto\", sans-serif;\n font-weight: 500;\n white-space: nowrap;\n background: none;\n color: #b0b8c4;\n border: none;\n transition: color 180ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n.ms-counter-badge:hover {\n color: #1a1e26;\n}\n.ms-counter-badge > span:not([class]) {\n color: #1a1e26;\n}\n\n.ms-counter-dots {\n display: flex;\n align-items: center;\n flex-shrink: 0;\n}\n.ms-counter-dots .ms-counter-dot {\n animation: fadeIn 180ms cubic-bezier(0.4, 0, 0.2, 1) both;\n width: 20px;\n height: 20px;\n min-width: 20px;\n border-radius: 100%;\n background-color: #e0e3e8;\n border: 1.5px solid #ffffff;\n display: block;\n cursor: pointer;\n position: relative;\n z-index: 1;\n transform: scale(1);\n transition: transform 180ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n.ms-counter-dots .ms-counter-dot:not(:first-child) {\n margin-left: -5px;\n}\n.ms-counter-dots .ms-counter-dot:hover {\n transform: scale(1.35);\n z-index: 100 !important;\n}\n.ms-counter-dots .ms-counter-dot:nth-child(1) {\n animation-delay: 40ms;\n}\n.ms-counter-dots .ms-counter-dot:nth-child(2) {\n animation-delay: 80ms;\n}\n.ms-counter-dots .ms-counter-dot:nth-child(3) {\n animation-delay: 120ms;\n}\n.ms-counter-dots .ms-counter-dot:nth-child(4) {\n animation-delay: 160ms;\n}\n.ms-counter-dots .ms-counter-dot:nth-child(5) {\n animation-delay: 200ms;\n}\n.ms-counter-dots .ms-counter-dot:nth-child(6) {\n animation-delay: 240ms;\n}\n.ms-counter-dots .ms-counter-dot:nth-child(7) {\n animation-delay: 280ms;\n}\n.ms-counter-dots .ms-counter-dot:nth-child(8) {\n animation-delay: 320ms;\n}\n.ms-counter-dots .ms-counter-dot:nth-child(9) {\n animation-delay: 360ms;\n}\n.ms-counter-dots .ms-counter-dot:nth-child(10) {\n animation-delay: 400ms;\n}\n.ms-counter-dots .ms-counter-dot:nth-child(11) {\n animation-delay: 440ms;\n}\n.ms-counter-dots .ms-counter-dot:nth-child(12) {\n animation-delay: 480ms;\n}\n.ms-counter-dots .ms-counter-dot:nth-child(13) {\n animation-delay: 520ms;\n}\n.ms-counter-dots .ms-counter-dot:nth-child(14) {\n animation-delay: 560ms;\n}\n.ms-counter-dots .ms-counter-dot:nth-child(15) {\n animation-delay: 600ms;\n}\n.ms-counter-dots .ms-counter-dot:nth-child(16) {\n animation-delay: 640ms;\n}\n.ms-counter-dots .ms-counter-dot:nth-child(17) {\n animation-delay: 680ms;\n}\n.ms-counter-dots .ms-counter-dot:nth-child(18) {\n animation-delay: 720ms;\n}\n.ms-counter-dots .ms-counter-dot:nth-child(19) {\n animation-delay: 760ms;\n}\n.ms-counter-dots .ms-counter-dot:nth-child(20) {\n animation-delay: 800ms;\n}\n\n.ms-counter-label {\n cursor: pointer;\n flex: 1;\n min-width: 0;\n display: flex;\n align-items: center;\n}\n\n.ms-counter-end {\n display: flex;\n align-items: center;\n gap: 4px;\n flex-shrink: 0;\n margin-left: auto;\n}\n\n.ms-counter-count {\n font-size: 11.2px;\n font-weight: 600;\n color: #1a1e26;\n}\n\n/* Tooltip custom avec dots colorés */\n.ms-counter-tooltip {\n display: flex;\n flex-direction: column;\n gap: 4px;\n padding: 2px 0;\n}\n\n.ms-counter-tooltip-row {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n font-family: \"Roboto\", sans-serif;\n white-space: nowrap;\n}\n\n.ms-counter-tooltip-dot {\n width: 8px;\n height: 8px;\n min-width: 8px;\n border-radius: 100%;\n background-color: #e0e3e8;\n flex-shrink: 0;\n}\n\n.ms-counter-clear-icon {\n cursor: pointer;\n font-size: 10px;\n min-width: 16px;\n min-height: 16px;\n width: 16px;\n height: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: #b0b8c4;\n border-radius: 100%;\n transition: color 180ms cubic-bezier(0.4, 0, 0.2, 1), background-color 180ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n.ms-counter-clear-icon:hover {\n color: #1a1e26;\n background-color: rgba(0, 0, 0, 0.06);\n}\n\n.p-multiselect-token-label {\n font-size: 12.25px !important;\n overflow: hidden !important;\n text-overflow: ellipsis !important;\n}\n\n/* Un seul token → on autorise les ... si ça dépasse */\n.p-multiselect-token:only-child .p-multiselect-token-label {\n text-overflow: ellipsis !important;\n}\n\n/* ===== Badge couleur dans les items ===== */\n.ms-color-badge {\n display: inline-flex;\n align-items: center;\n gap: 7px;\n padding: 4px 10px;\n border-radius: 14px;\n font-size: 12.25px;\n font-family: \"Roboto\", sans-serif;\n white-space: nowrap;\n cursor: default;\n transition: background-color 180ms cubic-bezier(0.4, 0, 0.2, 1);\n background-color: #f4f5f6;\n color: #1a1e26;\n border: 1px solid #e0e3e8;\n border-color: var(--badge-color, #e0e3e8);\n background-color: color-mix(in srgb, var(--badge-color, #f4f5f6) 50%, transparent);\n}\n.ms-color-badge.is-selected {\n background-color: var(--badge-color, #f4f5f6);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);\n}\n.ms-color-badge {\n cursor: pointer;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n display: block;\n transition: background-color 180ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n.p-multiselect-item:hover .ms-color-badge {\n background-color: var(--badge-color) !important;\n}\n\n/* ===== Groupes — header + indentation enfants ===== */\n.p-multiselect-item-group {\n font-size: 14px;\n font-weight: 600;\n padding: 8px 12px !important;\n position: sticky;\n top: 0;\n z-index: 5;\n background-color: #ffffff !important;\n border-bottom: 1px solid #e0e3e8;\n}\n\n/* Items enfants décalés quand il y a des groupes */\n.p-multiselect-item-group ~ .p-multiselect-item {\n padding-left: 28px !important;\n}\n\n/* ===== Override PrimeReact default item colors ===== */\n.p-multiselect-items .p-multiselect-item:not(.p-highlight):hover {\n background: #f4f5f6 !important;\n color: #1a1e26 !important;\n}\n.p-multiselect-items .p-multiselect-item.p-highlight {\n background: rgba(63, 63, 63, 0.08) !important;\n color: #1a1e26 !important;\n}\n.p-multiselect-items .p-multiselect-item.p-highlight.p-focus {\n background: rgba(63, 63, 63, 0.12) !important;\n color: #1a1e26 !important;\n}\n.p-multiselect-items .p-multiselect-item.p-focus {\n background: #f4f5f6 !important;\n color: #1a1e26 !important;\n}\n\n/* ===== Override PrimeReact filter input focus ===== */\n.p-multiselect-filter.p-inputtext:hover {\n border-color: #c8cdd6 !important;\n}\n.p-multiselect-filter.p-inputtext:focus, .p-multiselect-filter.p-inputtext.p-focus {\n border-color: #3f3f3f !important;\n box-shadow: 0 0 0 3px rgba(0, 0, 0, 0.1) !important;\n outline: none;\n}";
41019
41718
  styleInject(css_248z$4);
41020
41719
 
41021
41720
  var MultiSelectMetaAsync = function MultiSelectMetaAsync(_ref) {
@@ -41115,6 +41814,10 @@ var MultiSelectMetaAsync = function MultiSelectMetaAsync(_ref) {
41115
41814
  valueToapply = _ref.valueToapply,
41116
41815
  _ref$closeIcon = _ref.closeIcon,
41117
41816
  closeIcon = _ref$closeIcon === void 0 ? null : _ref$closeIcon,
41817
+ _ref$cancelLabel = _ref.cancelLabel,
41818
+ cancelLabel = _ref$cancelLabel === void 0 ? 'Annuler' : _ref$cancelLabel,
41819
+ _ref$applyLabel = _ref.applyLabel,
41820
+ applyLabel = _ref$applyLabel === void 0 ? 'Appliquer' : _ref$applyLabel,
41118
41821
  onHide = _ref.onHide;
41119
41822
  _ref.withSearch;
41120
41823
  _ref.renderValue;
@@ -41324,9 +42027,16 @@ var MultiSelectMetaAsync = function MultiSelectMetaAsync(_ref) {
41324
42027
  _context2.n = 5;
41325
42028
  break;
41326
42029
  case 4:
41327
- result = {
41328
- options: []
41329
- };
42030
+ if (Array.isArray(options)) {
42031
+ result = {
42032
+ options: options,
42033
+ hasMore: false
42034
+ };
42035
+ } else {
42036
+ result = {
42037
+ options: []
42038
+ };
42039
+ }
41330
42040
  case 5:
41331
42041
  hasMoreRef.current = ((_result = result) === null || _result === void 0 ? void 0 : _result.hasMore) !== false;
41332
42042
  initialOpts = _flattenOptions(((_result2 = result) === null || _result2 === void 0 ? void 0 : _result2.options) || []);
@@ -41394,7 +42104,7 @@ var MultiSelectMetaAsync = function MultiSelectMetaAsync(_ref) {
41394
42104
  if (enableItemTooltip) setTooltipKey(function (k) {
41395
42105
  return k + 1;
41396
42106
  });
41397
- }, [loadedOptions, enableItemTooltip]);
42107
+ }, [loadedOptions, enableItemTooltip, selectedOptions]);
41398
42108
  var onLazyLoad = function onLazyLoad(event) {
41399
42109
  if (isOptionsArray) return;
41400
42110
  setLoading(true);
@@ -41479,6 +42189,30 @@ var MultiSelectMetaAsync = function MultiSelectMetaAsync(_ref) {
41479
42189
  var getKey = function getKey(v) {
41480
42190
  return v && _typeof$g(v) === 'object' ? v[optionValue] : v;
41481
42191
  };
42192
+
42193
+ // PrimeReact 10 ignore la prop `escape` : sa Tooltip écrit toujours via
42194
+ // createTextNode. Un MutationObserver rescande les `.p-tooltip-text` pour
42195
+ // convertir le texte contenant du HTML en innerHTML rendu.
42196
+ useEffect(function () {
42197
+ if (!enableItemTooltip) return undefined;
42198
+ var rewrite = function rewrite() {
42199
+ document.querySelectorAll('.p-tooltip .p-tooltip-text').forEach(function (el) {
42200
+ var raw = el.textContent;
42201
+ if (raw && /<[a-z][\s\S]*>/i.test(raw) && el.innerHTML !== raw) {
42202
+ el.innerHTML = raw;
42203
+ }
42204
+ });
42205
+ };
42206
+ var observer = new MutationObserver(rewrite);
42207
+ observer.observe(document.body, {
42208
+ childList: true,
42209
+ subtree: true,
42210
+ characterData: true
42211
+ });
42212
+ return function () {
42213
+ return observer.disconnect();
42214
+ };
42215
+ }, [enableItemTooltip]);
41482
42216
  var inverseColor = function inverseColor(hexColor) {
41483
42217
  if (!hexColor || !hexColor.startsWith('#')) return '#000000';
41484
42218
  var hex = hexColor;
@@ -41671,6 +42405,11 @@ var MultiSelectMetaAsync = function MultiSelectMetaAsync(_ref) {
41671
42405
  } : {
41672
42406
  className: 'multiselect-tooltip-item'
41673
42407
  };
42408
+ var tooltipContent = option.tooltip || option.description;
42409
+ var hasTooltip = Boolean(enableItemTooltip && tooltipContent);
42410
+ var infoIcon = hasTooltip ? /*#__PURE__*/React__default.createElement("i", {
42411
+ className: "pi pi-info-circle multiselect-item-info-icon"
42412
+ }) : null;
41674
42413
  var secondaryLabel = enableSecondaryLabel ? option === null || option === void 0 ? void 0 : option[secondaryLabelKey] : null;
41675
42414
  var isLink = enableItemLink && option.link;
41676
42415
  var handleLinkClick = function handleLinkClick(e) {
@@ -41716,6 +42455,41 @@ var MultiSelectMetaAsync = function MultiSelectMetaAsync(_ref) {
41716
42455
  marginLeft: '10px'
41717
42456
  }
41718
42457
  }, secondaryLabel)));
42458
+ if (hasTooltip) {
42459
+ // Deux colonnes : libellé à l'extrême gauche, picto "i" à l'extrême droite.
42460
+ // Le tooltip est porté par l'item entier et pointe sur le picto.
42461
+ return /*#__PURE__*/React__default.createElement("div", _extends$J({}, tooltipProps, {
42462
+ style: {
42463
+ display: 'flex',
42464
+ alignItems: 'center',
42465
+ gap: '0.5rem',
42466
+ fontSize: '14px',
42467
+ maxWidth: 'none',
42468
+ overflow: 'hidden',
42469
+ textOverflow: 'ellipsis',
42470
+ whiteSpace: 'nowrap',
42471
+ width: '100%',
42472
+ justifyContent: 'space-between'
42473
+ }
42474
+ }), /*#__PURE__*/React__default.createElement("div", {
42475
+ style: {
42476
+ display: 'flex',
42477
+ alignItems: 'center',
42478
+ gap: '0.5rem',
42479
+ minWidth: 0,
42480
+ overflow: 'hidden',
42481
+ textOverflow: 'ellipsis',
42482
+ whiteSpace: 'nowrap'
42483
+ }
42484
+ }, option[optionLabel]), /*#__PURE__*/React__default.createElement("div", {
42485
+ style: {
42486
+ flexShrink: 0,
42487
+ display: 'flex',
42488
+ alignItems: 'center',
42489
+ marginLeft: '8px'
42490
+ }
42491
+ }, infoIcon));
42492
+ }
41719
42493
  if (isSelectMeta) {
41720
42494
  var _ref7 = selectMetaConfig || {},
41721
42495
  labelStyle = _ref7.labelStyle,
@@ -41779,6 +42553,7 @@ var MultiSelectMetaAsync = function MultiSelectMetaAsync(_ref) {
41779
42553
  }, /*#__PURE__*/React__default.createElement("div", tooltipProps, option[optionLabel]), secondaryLabelNode);
41780
42554
  };
41781
42555
  var selectedItemTemplate = function selectedItemTemplate(paramValue) {
42556
+ var _selectedOption3, _selectedOption4, _selectedOption5;
41782
42557
  if (paramValue == null) return null;
41783
42558
  if (truncateAt) {
41784
42559
  var index = (selectedOptions || []).indexOf(paramValue);
@@ -41792,11 +42567,16 @@ var MultiSelectMetaAsync = function MultiSelectMetaAsync(_ref) {
41792
42567
  return o[optionValue] === paramValue;
41793
42568
  });
41794
42569
  if (!opt) return null;
41795
- return /*#__PURE__*/React__default.createElement("span", {
42570
+ var _optTooltip = enableItemTooltip ? opt.tooltip || opt.description || opt[optionLabel] : null;
42571
+ return /*#__PURE__*/React__default.createElement("span", _extends$J({
41796
42572
  style: _objectSpread2({
41797
42573
  marginRight: '6px'
41798
- }, valueStyle)
41799
- }, opt[optionLabel]);
42574
+ }, valueStyle),
42575
+ className: _optTooltip ? 'multiselect-selected-tooltip-trigger' : undefined
42576
+ }, _optTooltip ? {
42577
+ 'data-pr-tooltip': _optTooltip,
42578
+ 'data-pr-position': 'top'
42579
+ } : {}), opt[optionLabel]);
41800
42580
  }
41801
42581
  if (index === truncateAt) return /*#__PURE__*/React__default.createElement("span", {
41802
42582
  style: {
@@ -41867,11 +42647,16 @@ var MultiSelectMetaAsync = function MultiSelectMetaAsync(_ref) {
41867
42647
  color: objMatch.color !== undefined ? objMatch.color : selectedOption.color
41868
42648
  });
41869
42649
  var isLast = (selectedOptions || [])[(selectedOptions || []).length - 1] === paramValue;
41870
- return /*#__PURE__*/React__default.createElement("span", {
42650
+ var optTooltip = enableItemTooltip ? ((_selectedOption3 = selectedOption) === null || _selectedOption3 === void 0 ? void 0 : _selectedOption3.tooltip) || ((_selectedOption4 = selectedOption) === null || _selectedOption4 === void 0 ? void 0 : _selectedOption4.description) || ((_selectedOption5 = selectedOption) === null || _selectedOption5 === void 0 ? void 0 : _selectedOption5[optionLabel]) : null;
42651
+ return /*#__PURE__*/React__default.createElement("span", _extends$J({
41871
42652
  style: _objectSpread2({
41872
42653
  marginRight: '4px'
41873
- }, valueStyle)
41874
- }, selectedOption[optionLabel], !isLast && /*#__PURE__*/React__default.createElement("span", {
42654
+ }, valueStyle),
42655
+ className: optTooltip ? 'multiselect-selected-tooltip-trigger' : undefined
42656
+ }, optTooltip ? {
42657
+ 'data-pr-tooltip': optTooltip,
42658
+ 'data-pr-position': 'top'
42659
+ } : {}), selectedOption[optionLabel], !isLast && /*#__PURE__*/React__default.createElement("span", {
41875
42660
  style: {
41876
42661
  opacity: 0.8
41877
42662
  }
@@ -41972,7 +42757,7 @@ var MultiSelectMetaAsync = function MultiSelectMetaAsync(_ref) {
41972
42757
  var _multiSelectRef$curre4;
41973
42758
  return (_multiSelectRef$curre4 = multiSelectRef.current) === null || _multiSelectRef$curre4 === void 0 ? void 0 : _multiSelectRef$curre4.hide();
41974
42759
  }
41975
- }, "Annuler"), /*#__PURE__*/React__default.createElement("button", {
42760
+ }, cancelLabel), /*#__PURE__*/React__default.createElement("button", {
41976
42761
  type: "button",
41977
42762
  className: "ms-apply-btn",
41978
42763
  onClick: function onClick() {
@@ -41980,7 +42765,7 @@ var MultiSelectMetaAsync = function MultiSelectMetaAsync(_ref) {
41980
42765
  handleApply();
41981
42766
  (_multiSelectRef$curre5 = multiSelectRef.current) === null || _multiSelectRef$curre5 === void 0 || _multiSelectRef$curre5.hide();
41982
42767
  }
41983
- }, "Appliquer"));
42768
+ }, applyLabel));
41984
42769
  }
41985
42770
  if (hasInfoLine) {
41986
42771
  var length = selectedOptions ? selectedOptions.length : 0;
@@ -42100,9 +42885,11 @@ var MultiSelectMetaAsync = function MultiSelectMetaAsync(_ref) {
42100
42885
  }
42101
42886
  }, enableItemTooltip && /*#__PURE__*/React__default.createElement(Tooltip$1, {
42102
42887
  key: tooltipKey,
42103
- target: ".multiselect-tooltip-item",
42888
+ target: ".multiselect-tooltip-item, .multiselect-tooltip-trigger, .multiselect-selected-tooltip-trigger",
42104
42889
  appendTo: document.body,
42105
42890
  position: "top",
42891
+ autoHide: false,
42892
+ hideDelay: 150,
42106
42893
  style: {
42107
42894
  zIndex: '9999999'
42108
42895
  }
@@ -42425,7 +43212,11 @@ var MultiSelect = function MultiSelect(props) {
42425
43212
  maxVisibleCounter = props.maxVisibleCounter;
42426
43213
  props.maxVisibleChips;
42427
43214
  var _props$closeIcon = props.closeIcon,
42428
- closeIcon = _props$closeIcon === void 0 ? null : _props$closeIcon;
43215
+ closeIcon = _props$closeIcon === void 0 ? null : _props$closeIcon,
43216
+ _props$cancelLabel = props.cancelLabel,
43217
+ cancelLabel = _props$cancelLabel === void 0 ? 'Annuler' : _props$cancelLabel,
43218
+ _props$applyLabel = props.applyLabel,
43219
+ applyLabel = _props$applyLabel === void 0 ? 'Appliquer' : _props$applyLabel;
42429
43220
  props.withSearch;
42430
43221
  var hasInfoLine = props.hasInfoLine,
42431
43222
  _props$withIcon = props.withIcon,
@@ -42691,6 +43482,11 @@ var MultiSelect = function MultiSelect(props) {
42691
43482
  } : {
42692
43483
  className: 'multiselect-tooltip-item'
42693
43484
  };
43485
+ var tooltipContent = option.tooltip || option.description;
43486
+ var hasTooltip = Boolean(enableItemTooltip && tooltipContent);
43487
+ var infoIcon = hasTooltip ? /*#__PURE__*/React__default.createElement("i", {
43488
+ className: "pi pi-info-circle multiselect-item-info-icon"
43489
+ }) : null;
42694
43490
  var secondaryLabel = enableSecondaryLabel ? option === null || option === void 0 ? void 0 : option[secondaryLabelKey] : null;
42695
43491
  var isLink = enableItemLink && option.link;
42696
43492
  var handleLinkClick = function handleLinkClick(e) {
@@ -42761,6 +43557,41 @@ var MultiSelect = function MultiSelect(props) {
42761
43557
  }
42762
43558
  }, secondaryLabel)))));
42763
43559
  }
43560
+ if (hasTooltip) {
43561
+ // Deux colonnes : libellé à l'extrême gauche, picto "i" à l'extrême droite.
43562
+ // Le tooltip est porté par l'item entier et pointe sur le picto.
43563
+ return /*#__PURE__*/React__default.createElement("div", _extends$J({}, tooltipProps, {
43564
+ style: {
43565
+ display: 'flex',
43566
+ alignItems: 'center',
43567
+ gap: '0.5rem',
43568
+ fontSize: '14px',
43569
+ maxWidth: 'none',
43570
+ overflow: 'hidden',
43571
+ textOverflow: 'ellipsis',
43572
+ whiteSpace: 'nowrap',
43573
+ width: '100%',
43574
+ justifyContent: 'space-between'
43575
+ }
43576
+ }), /*#__PURE__*/React__default.createElement("div", {
43577
+ style: {
43578
+ display: 'flex',
43579
+ alignItems: 'center',
43580
+ gap: '0.5rem',
43581
+ minWidth: 0,
43582
+ overflow: 'hidden',
43583
+ textOverflow: 'ellipsis',
43584
+ whiteSpace: 'nowrap'
43585
+ }
43586
+ }, option[optionLabel]), /*#__PURE__*/React__default.createElement("div", {
43587
+ style: {
43588
+ flexShrink: 0,
43589
+ display: 'flex',
43590
+ alignItems: 'center',
43591
+ marginLeft: '8px'
43592
+ }
43593
+ }, infoIcon));
43594
+ }
42764
43595
  if (withColor || withIcon) {
42765
43596
  var _ref2 = selectConfig || {},
42766
43597
  _labelStyle = _ref2.labelStyle,
@@ -42818,14 +43649,7 @@ var MultiSelect = function MultiSelect(props) {
42818
43649
  }
42819
43650
  }, secondaryLabel)));
42820
43651
  }
42821
- return /*#__PURE__*/React__default.createElement("div", {
42822
- style: _objectSpread2({
42823
- fontFamily: 'Arial',
42824
- fontSize: '14px',
42825
- display: 'flex',
42826
- flexDirection: 'column'
42827
- }, optionStyle)
42828
- }, /*#__PURE__*/React__default.createElement("div", tooltipProps, option[optionLabel]), secondaryLabel && /*#__PURE__*/React__default.createElement("div", {
43652
+ var secondaryContent = secondaryLabel ? /*#__PURE__*/React__default.createElement("div", {
42829
43653
  className: "secondary-link-zone",
42830
43654
  onClick: isLink ? handleLinkClick : undefined,
42831
43655
  onMouseDown: isLink ? function (e) {
@@ -42860,7 +43684,15 @@ var MultiSelect = function MultiSelect(props) {
42860
43684
  style: subItem ? {} : {
42861
43685
  marginLeft: '10px'
42862
43686
  }
42863
- }, secondaryLabel))));
43687
+ }, secondaryLabel))) : null;
43688
+ return /*#__PURE__*/React__default.createElement("div", {
43689
+ style: _objectSpread2({
43690
+ fontFamily: 'Arial',
43691
+ fontSize: '14px',
43692
+ display: 'flex',
43693
+ flexDirection: 'column'
43694
+ }, optionStyle)
43695
+ }, /*#__PURE__*/React__default.createElement("div", tooltipProps, option[optionLabel]), secondaryContent);
42864
43696
  };
42865
43697
  var inverseColor = function inverseColor(hexColor) {
42866
43698
  var r = parseInt(hexColor === null || hexColor === void 0 ? void 0 : hexColor.substr(1, 2), 16);
@@ -42878,6 +43710,31 @@ var MultiSelect = function MultiSelect(props) {
42878
43710
  window[onChange](ids);
42879
43711
  }
42880
43712
  };
43713
+
43714
+ // PrimeReact 10 ignore la prop `escape` : sa Tooltip écrit toujours via
43715
+ // createTextNode. Un MutationObserver rescande les `.p-tooltip-text` pour
43716
+ // convertir le texte contenant du HTML en innerHTML rendu — nécessaire car
43717
+ // le tooltip est réutilisé (pas de callback à chaque changement de cible).
43718
+ useEffect(function () {
43719
+ if (!enableItemTooltip) return undefined;
43720
+ var rewrite = function rewrite() {
43721
+ document.querySelectorAll('.p-tooltip .p-tooltip-text').forEach(function (el) {
43722
+ var raw = el.textContent;
43723
+ if (raw && /<[a-z][\s\S]*>/i.test(raw) && el.innerHTML !== raw) {
43724
+ el.innerHTML = raw;
43725
+ }
43726
+ });
43727
+ };
43728
+ var observer = new MutationObserver(rewrite);
43729
+ observer.observe(document.body, {
43730
+ childList: true,
43731
+ subtree: true,
43732
+ characterData: true
43733
+ });
43734
+ return function () {
43735
+ return observer.disconnect();
43736
+ };
43737
+ }, [enableItemTooltip]);
42881
43738
  var handleChange = function handleChange(e) {
42882
43739
  if (disabled || effectiveReadOnly) return;
42883
43740
  var ids = Array.isArray(e.value) ? e.value : [e.value];
@@ -42920,11 +43777,16 @@ var MultiSelect = function MultiSelect(props) {
42920
43777
  return o.value === option;
42921
43778
  });
42922
43779
  if (!_opt) return null;
42923
- return /*#__PURE__*/React__default.createElement("span", {
43780
+ var _optTooltip = enableItemTooltip ? _opt.tooltip || _opt.description || _opt[optionLabel] : null;
43781
+ return /*#__PURE__*/React__default.createElement("span", _extends$J({
42924
43782
  style: _objectSpread2({
42925
43783
  marginRight: '6px'
42926
- }, valueStyle)
42927
- }, _opt[optionLabel]);
43784
+ }, valueStyle),
43785
+ className: _optTooltip ? 'multiselect-selected-tooltip-trigger' : undefined
43786
+ }, _optTooltip ? {
43787
+ 'data-pr-tooltip': _optTooltip,
43788
+ 'data-pr-position': 'top'
43789
+ } : {}), _opt[optionLabel]);
42928
43790
  }
42929
43791
  if (index === truncateAt) {
42930
43792
  return /*#__PURE__*/React__default.createElement("span", {
@@ -42976,11 +43838,16 @@ var MultiSelect = function MultiSelect(props) {
42976
43838
  var _selectedOption = flatOptions.find(function (opt) {
42977
43839
  return opt.value === option;
42978
43840
  });
42979
- return /*#__PURE__*/React__default.createElement("span", {
43841
+ var _optTooltip2 = enableItemTooltip ? (_selectedOption === null || _selectedOption === void 0 ? void 0 : _selectedOption.tooltip) || (_selectedOption === null || _selectedOption === void 0 ? void 0 : _selectedOption.description) || (_selectedOption === null || _selectedOption === void 0 ? void 0 : _selectedOption[optionLabel]) || option : null;
43842
+ return /*#__PURE__*/React__default.createElement("span", _extends$J({
42980
43843
  style: {
42981
43844
  marginRight: '4px'
42982
- }
42983
- }, _selectedOption ? "".concat(_selectedOption.label) : "".concat(option), !isLast && /*#__PURE__*/React__default.createElement("span", {
43845
+ },
43846
+ className: _optTooltip2 ? 'multiselect-selected-tooltip-trigger' : undefined
43847
+ }, _optTooltip2 ? {
43848
+ 'data-pr-tooltip': _optTooltip2,
43849
+ 'data-pr-position': 'top'
43850
+ } : {}), _selectedOption ? "".concat(_selectedOption.label) : "".concat(option), !isLast && /*#__PURE__*/React__default.createElement("span", {
42984
43851
  style: {
42985
43852
  opacity: 0.8
42986
43853
  }
@@ -42992,11 +43859,16 @@ var MultiSelect = function MultiSelect(props) {
42992
43859
  return o.value === option;
42993
43860
  });
42994
43861
  if (!opt) return null;
42995
- return /*#__PURE__*/React__default.createElement("span", {
43862
+ var optTooltip = enableItemTooltip ? opt.tooltip || opt.description || opt[optionLabel] : null;
43863
+ return /*#__PURE__*/React__default.createElement("span", _extends$J({
42996
43864
  style: _objectSpread2({
42997
43865
  marginRight: '4px'
42998
- }, valueStyle)
42999
- }, opt[optionLabel], !isLast && /*#__PURE__*/React__default.createElement("span", {
43866
+ }, valueStyle),
43867
+ className: optTooltip ? 'multiselect-selected-tooltip-trigger' : undefined
43868
+ }, optTooltip ? {
43869
+ 'data-pr-tooltip': optTooltip,
43870
+ 'data-pr-position': 'top'
43871
+ } : {}), opt[optionLabel], !isLast && /*#__PURE__*/React__default.createElement("span", {
43000
43872
  style: {
43001
43873
  opacity: 0.8
43002
43874
  }
@@ -43058,21 +43930,6 @@ var MultiSelect = function MultiSelect(props) {
43058
43930
  }
43059
43931
  }, isCollapsed ? '+' : "\u2212"));
43060
43932
  };
43061
- var getSelectedOptionsTooltipText = function getSelectedOptionsTooltipText() {
43062
- if (selectedOptions.length === 0) return "Aucune option sélectionnée";
43063
- return selectedOptions.map(function (opt) {
43064
- if (typeof opt === 'string' || typeof opt === 'number') {
43065
- var selectedOption = flatOptions.find(function (o) {
43066
- return o.value === opt || o[optionValue] === opt;
43067
- });
43068
- return selectedOption ? selectedOption[optionLabel] : String(opt);
43069
- }
43070
- if (_typeof$g(opt) === 'object' && opt !== null) {
43071
- return opt[optionLabel];
43072
- }
43073
- return String(opt);
43074
- }).join('\n');
43075
- };
43076
43933
  var BADGE_SIZES = {
43077
43934
  small: {
43078
43935
  fontSize: '10px',
@@ -43270,7 +44127,7 @@ var MultiSelect = function MultiSelect(props) {
43270
44127
  var _multiSelectRef$curre4;
43271
44128
  return (_multiSelectRef$curre4 = multiSelectRef.current) === null || _multiSelectRef$curre4 === void 0 ? void 0 : _multiSelectRef$curre4.hide();
43272
44129
  }
43273
- }, "Annuler"), /*#__PURE__*/React__default.createElement("button", {
44130
+ }, cancelLabel), /*#__PURE__*/React__default.createElement("button", {
43274
44131
  type: "button",
43275
44132
  className: "ms-apply-btn",
43276
44133
  onClick: function onClick() {
@@ -43278,7 +44135,7 @@ var MultiSelect = function MultiSelect(props) {
43278
44135
  handleApply();
43279
44136
  (_multiSelectRef$curre5 = multiSelectRef.current) === null || _multiSelectRef$curre5 === void 0 || _multiSelectRef$curre5.hide();
43280
44137
  }
43281
- }, "Appliquer"));
44138
+ }, applyLabel));
43282
44139
  }
43283
44140
  if (hasInfoLine) {
43284
44141
  var length = selectedOptions ? selectedOptions.length : 0;
@@ -43294,7 +44151,7 @@ var MultiSelect = function MultiSelect(props) {
43294
44151
  return prevKey + 1;
43295
44152
  });
43296
44153
  }
43297
- }, [options, enableItemTooltip]);
44154
+ }, [options, enableItemTooltip, selectedOptions]);
43298
44155
 
43299
44156
  // Ajouter cette logique dans le composant
43300
44157
  useEffect(function () {
@@ -43330,9 +44187,11 @@ var MultiSelect = function MultiSelect(props) {
43330
44187
  }
43331
44188
  }, enableItemTooltip && /*#__PURE__*/React__default.createElement(Tooltip$1, {
43332
44189
  key: tooltipKey,
43333
- target: ".multiselect-tooltip-item",
44190
+ target: ".multiselect-tooltip-item, .multiselect-tooltip-trigger, .multiselect-selected-tooltip-trigger",
43334
44191
  appendTo: document.body,
43335
44192
  position: "top",
44193
+ autoHide: false,
44194
+ hideDelay: 150,
43336
44195
  style: {
43337
44196
  zIndex: '9999999'
43338
44197
  }
@@ -43359,10 +44218,6 @@ var MultiSelect = function MultiSelect(props) {
43359
44218
  zIndex: 9999999
43360
44219
  }
43361
44220
  }), /*#__PURE__*/React__default.createElement("div", {
43362
- "data-pr-tooltip": enableItemTooltip ? getSelectedOptionsTooltipText() : null,
43363
- "data-pr-position": "right",
43364
- "data-pr-at": "right+5 top",
43365
- "data-pr-my": "left center-2",
43366
44221
  ref: containerRef,
43367
44222
  className: "multiselect-container custom-target-icon",
43368
44223
  style: {
@@ -44076,17 +44931,27 @@ var MultiSelectPresets = {
44076
44931
  options: [{
44077
44932
  label: 'Option 1',
44078
44933
  value: '1',
44079
- tooltip: 'Information spécifique à l’option 1'
44934
+ tooltip: '<b>Option 1</b> — <i>information</i> spécifique.<br/>Prise en charge du <u>HTML</u>.'
44080
44935
  }, {
44081
44936
  label: 'Option 2',
44082
- value: '2',
44083
- tooltip: 'Détail complémentaire pour l’option 2'
44937
+ value: '2'
44938
+ // tooltip: '<span style="color:#3b82f6">Détail</span> complémentaire pour <b>l’option 2</b>',
44084
44939
  }, {
44085
44940
  label: 'Option 3',
44086
44941
  value: '3',
44087
- tooltip: 'Contexte métier propre à cette option'
44942
+ tooltip: 'Contexte métier :<ul style="margin:4px 0 0 16px;padding:0"><li>Point 1</li><li>Point 2</li></ul>'
44943
+ }, {
44944
+ label: 'Option 4',
44945
+ value: '4',
44946
+ tooltip: 'Documentation : <a href="https://example.com" target="_blank" rel="noopener" style="color:#60a5fa;text-decoration:underline">ouvrir la doc</a>'
44088
44947
  }],
44089
- enableItemTooltip: true
44948
+ enableItemTooltip: true,
44949
+ cancelLabel: 'Fermer',
44950
+ applyLabel: 'Appliquer',
44951
+ onApply: function onApply(values) {
44952
+ // eslint-disable-next-line no-console
44953
+ console.log('Selection appliquée :', values);
44954
+ }
44090
44955
  },
44091
44956
  ItemWithLink: {
44092
44957
  placeholder: 'Choisissez une option',
@@ -44371,6 +45236,61 @@ var MultiSelectMetaAsyncPresets = {
44371
45236
  displayCounter: true,
44372
45237
  maxVisibleCounter: 1
44373
45238
  },
45239
+ ItemWithTooltip: {
45240
+ placeholder: 'Survolez une option',
45241
+ options: [{
45242
+ label: 'Option 1',
45243
+ value: '1',
45244
+ tooltip: '<b>Option 1</b> — <i>information</i> spécifique.<br/>Prise en charge du <u>HTML</u>.'
45245
+ }, {
45246
+ label: 'Option 2',
45247
+ value: '2',
45248
+ tooltip: '<span style="color:#3b82f6">Détail</span> complémentaire pour <b>l’option 2</b>'
45249
+ }, {
45250
+ label: 'Option 3',
45251
+ value: '3',
45252
+ tooltip: 'Contexte métier :<ul style="margin:4px 0 0 16px;padding:0"><li>Point 1</li><li>Point 2</li></ul>'
45253
+ }, {
45254
+ label: 'Option 4',
45255
+ value: '4',
45256
+ tooltip: '<b>Cas particuliers</b><br/><small>Utilisation limitée</small>'
45257
+ }, {
45258
+ label: 'Option 5',
45259
+ value: '5',
45260
+ tooltip: 'Réservée aux <b style="color:#ef4444">administrateurs</b>'
45261
+ }, {
45262
+ label: 'Option 6',
45263
+ value: '6',
45264
+ tooltip: '<i>Recommandée</i> pour la <b>production</b>'
45265
+ }, {
45266
+ label: 'Option 7',
45267
+ value: '7',
45268
+ tooltip: 'Compatible avec les <u>anciens systèmes</u>'
45269
+ }, {
45270
+ label: 'Option 8',
45271
+ value: '8',
45272
+ tooltip: 'Optimisée pour les <b>grandes volumétries</b><br/>&gt; 10 M lignes'
45273
+ }, {
45274
+ label: 'Option 9',
45275
+ value: '9',
45276
+ tooltip: 'Nécessite des <span style="color:#f59e0b">droits étendus</span>'
45277
+ }, {
45278
+ label: 'Option 10',
45279
+ value: '10',
45280
+ tooltip: '<b style="color:#ef4444">⚠ À utiliser avec précaution</b>'
45281
+ }, {
45282
+ label: 'Option 11',
45283
+ value: '11',
45284
+ tooltip: 'Documentation : <a href="https://example.com" target="_blank" rel="noopener" style="color:#60a5fa;text-decoration:underline">ouvrir la doc</a>'
45285
+ }],
45286
+ enableItemTooltip: true,
45287
+ cancelLabel: 'Fermer',
45288
+ applyLabel: 'Appliquer',
45289
+ onApply: function onApply(values) {
45290
+ // eslint-disable-next-line no-console
45291
+ console.log('Selection appliquée :', values);
45292
+ }
45293
+ },
44374
45294
  SearchAjaxLoading: {
44375
45295
  placeholder: 'Rechercher (Ajax)…',
44376
45296
  filter: true,
@@ -44436,24 +45356,160 @@ var createFakeOptions = function createFakeOptions(start, length) {
44436
45356
  }
44437
45357
  return options;
44438
45358
  };
45359
+ var mockPeople = [{
45360
+ label: 'Alice Martin',
45361
+ value: 1,
45362
+ color: '#ff9900',
45363
+ profession: 'Développeuse',
45364
+ tooltip: 'Alice Martin — Développeuse',
45365
+ link: 'https://example.com'
45366
+ }, {
45367
+ label: 'Bruno Lefèvre',
45368
+ value: 2,
45369
+ color: '#3b82f6',
45370
+ profession: 'Chef de projet',
45371
+ tooltip: 'Bruno Lefèvre — Chef de projet',
45372
+ link: 'https://example.com'
45373
+ }, {
45374
+ label: 'Chloé Dubois',
45375
+ value: 3,
45376
+ color: '#10b981',
45377
+ profession: 'Designer',
45378
+ tooltip: 'Chloé Dubois — Designer',
45379
+ link: 'https://example.com'
45380
+ }, {
45381
+ label: 'David Morel',
45382
+ value: 4,
45383
+ color: '#8b5cf6',
45384
+ profession: 'Data analyst',
45385
+ tooltip: 'David Morel — Data analyst',
45386
+ link: 'https://example.com'
45387
+ }, {
45388
+ label: 'Emma Roux',
45389
+ value: 5,
45390
+ color: '#ec4899',
45391
+ profession: 'Product owner',
45392
+ tooltip: 'Emma Roux — Product owner',
45393
+ link: 'https://example.com'
45394
+ }, {
45395
+ label: 'Farid Benali',
45396
+ value: 6,
45397
+ color: '#f59e0b',
45398
+ profession: 'DevOps',
45399
+ tooltip: 'Farid Benali — DevOps',
45400
+ link: 'https://example.com'
45401
+ }, {
45402
+ label: 'Gaëlle Simon',
45403
+ value: 7,
45404
+ color: '#ef4444',
45405
+ profession: 'QA engineer',
45406
+ tooltip: 'Gaëlle Simon — QA engineer',
45407
+ link: 'https://example.com'
45408
+ }, {
45409
+ label: 'Hugo Bernard',
45410
+ value: 8,
45411
+ color: '#10b981',
45412
+ profession: 'Développeur',
45413
+ tooltip: 'Hugo Bernard — Développeur',
45414
+ link: 'https://example.com'
45415
+ }];
45416
+ var asyncPeople = /*#__PURE__*/function () {
45417
+ var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
45418
+ var search,
45419
+ _ref2,
45420
+ _ref2$page,
45421
+ page,
45422
+ filtered,
45423
+ pageSize,
45424
+ start,
45425
+ _args = arguments;
45426
+ return _regenerator().w(function (_context) {
45427
+ while (1) switch (_context.n) {
45428
+ case 0:
45429
+ search = _args.length > 0 && _args[0] !== undefined ? _args[0] : '';
45430
+ _ref2 = _args.length > 2 && _args[2] !== undefined ? _args[2] : {}, _ref2$page = _ref2.page, page = _ref2$page === void 0 ? 1 : _ref2$page;
45431
+ _context.n = 1;
45432
+ return simulateNetworkDelay();
45433
+ case 1:
45434
+ filtered = search ? mockPeople.filter(function (opt) {
45435
+ return opt.label.toLowerCase().includes(search.toLowerCase());
45436
+ }) : mockPeople;
45437
+ pageSize = 30;
45438
+ start = (page - 1) * pageSize;
45439
+ return _context.a(2, {
45440
+ options: filtered.slice(start, start + pageSize),
45441
+ hasMore: start + pageSize < filtered.length,
45442
+ additional: {
45443
+ page: page + 1
45444
+ }
45445
+ });
45446
+ }
45447
+ }, _callee);
45448
+ }));
45449
+ return function asyncPeople() {
45450
+ return _ref.apply(this, arguments);
45451
+ };
45452
+ }();
45453
+ var mockPeopleHtmlTooltips = mockPeople.map(function (p) {
45454
+ return _objectSpread2(_objectSpread2({}, p), {}, {
45455
+ tooltip: "<b>".concat(p.label, "</b> \u2014 <i>").concat(p.profession, "</i><br/>Contact : <a href=\"mailto:").concat(p.label.split(' ')[0].toLowerCase(), "@arengi.fr\" style=\"color:#60a5fa;text-decoration:underline\">").concat(p.label.split(' ')[0].toLowerCase(), "@arengi.fr</a><br/>Doc : <a href=\"https://example.com\" target=\"_blank\" rel=\"noopener\" style=\"color:#60a5fa;text-decoration:underline\">ouvrir la doc</a>")
45456
+ });
45457
+ });
45458
+ var asyncPeopleHtmlTooltip = /*#__PURE__*/function () {
45459
+ var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {
45460
+ var search,
45461
+ _ref4,
45462
+ _ref4$page,
45463
+ page,
45464
+ filtered,
45465
+ pageSize,
45466
+ start,
45467
+ _args2 = arguments;
45468
+ return _regenerator().w(function (_context2) {
45469
+ while (1) switch (_context2.n) {
45470
+ case 0:
45471
+ search = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : '';
45472
+ _ref4 = _args2.length > 2 && _args2[2] !== undefined ? _args2[2] : {}, _ref4$page = _ref4.page, page = _ref4$page === void 0 ? 1 : _ref4$page;
45473
+ _context2.n = 1;
45474
+ return simulateNetworkDelay();
45475
+ case 1:
45476
+ filtered = search ? mockPeopleHtmlTooltips.filter(function (opt) {
45477
+ return opt.label.toLowerCase().includes(search.toLowerCase());
45478
+ }) : mockPeopleHtmlTooltips;
45479
+ pageSize = 30;
45480
+ start = (page - 1) * pageSize;
45481
+ return _context2.a(2, {
45482
+ options: filtered.slice(start, start + pageSize),
45483
+ hasMore: start + pageSize < filtered.length,
45484
+ additional: {
45485
+ page: page + 1
45486
+ }
45487
+ });
45488
+ }
45489
+ }, _callee2);
45490
+ }));
45491
+ return function asyncPeopleHtmlTooltip() {
45492
+ return _ref3.apply(this, arguments);
45493
+ };
45494
+ }();
44439
45495
  var DropdownSelectMetaAsyncPresets = {
44440
45496
  SelectMetaAsync: {
44441
45497
  options: function () {
44442
- var _options = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
45498
+ var _options = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {
44443
45499
  var search,
44444
- _ref,
45500
+ _ref5,
44445
45501
  page,
44446
45502
  allOptions,
44447
45503
  filtered,
44448
45504
  pageSize,
44449
45505
  start,
44450
- _args = arguments;
44451
- return _regenerator().w(function (_context) {
44452
- while (1) switch (_context.n) {
45506
+ _args3 = arguments;
45507
+ return _regenerator().w(function (_context3) {
45508
+ while (1) switch (_context3.n) {
44453
45509
  case 0:
44454
- search = _args.length > 0 && _args[0] !== undefined ? _args[0] : '';
44455
- _ref = _args.length > 2 ? _args[2] : undefined, page = _ref.page;
44456
- _context.n = 1;
45510
+ search = _args3.length > 0 && _args3[0] !== undefined ? _args3[0] : '';
45511
+ _ref5 = _args3.length > 2 ? _args3[2] : undefined, page = _ref5.page;
45512
+ _context3.n = 1;
44457
45513
  return simulateNetworkDelay();
44458
45514
  case 1:
44459
45515
  allOptions = createFakeOptions(0, 100);
@@ -44462,7 +45518,7 @@ var DropdownSelectMetaAsyncPresets = {
44462
45518
  });
44463
45519
  pageSize = 30;
44464
45520
  start = (page - 1) * pageSize;
44465
- return _context.a(2, {
45521
+ return _context3.a(2, {
44466
45522
  options: filtered.slice(start, start + pageSize),
44467
45523
  hasMore: start + pageSize < filtered.length,
44468
45524
  additional: {
@@ -44470,7 +45526,7 @@ var DropdownSelectMetaAsyncPresets = {
44470
45526
  }
44471
45527
  });
44472
45528
  }
44473
- }, _callee);
45529
+ }, _callee3);
44474
45530
  }));
44475
45531
  function options() {
44476
45532
  return _options.apply(this, arguments);
@@ -44492,6 +45548,141 @@ var DropdownSelectMetaAsyncPresets = {
44492
45548
  fontSize: '14px',
44493
45549
  fontFamily: 'Arial'
44494
45550
  }
45551
+ },
45552
+ Base: {
45553
+ options: asyncPeople,
45554
+ value: null,
45555
+ placeholder: 'Sélectionnez une option',
45556
+ editable: true,
45557
+ filter: false,
45558
+ showClear: true,
45559
+ valueStyle: {
45560
+ backgroundColor: 'transparent',
45561
+ color: 'inherit',
45562
+ padding: '0',
45563
+ borderRadius: '0',
45564
+ boxShadow: 'none',
45565
+ fontFamily: 'inherit'
45566
+ }
45567
+ },
45568
+ AsyncOptions: {
45569
+ options: asyncPeople,
45570
+ value: 3,
45571
+ placeholder: 'Sélectionnez une option',
45572
+ editable: true,
45573
+ showClear: true,
45574
+ selectMetaConfig: {
45575
+ labelStyle: {
45576
+ fontWeight: 'bold'
45577
+ },
45578
+ generalIcon: 'pi pi-tag'
45579
+ }
45580
+ },
45581
+ SearchAjaxLoading: {
45582
+ // En prod : optionsUrl: '/api/options' (pagination start/length, recherche search[value])
45583
+ options: asyncPeople,
45584
+ placeholder: 'Rechercher (Ajax)…',
45585
+ filter: true,
45586
+ showClear: true
45587
+ },
45588
+ Sorting: {
45589
+ options: asyncPeople,
45590
+ placeholder: 'Tri A→Z / Z→A',
45591
+ filter: true,
45592
+ enableSorting: true,
45593
+ showClear: true
45594
+ },
45595
+ ItemsCheckedToTheTop: {
45596
+ options: asyncPeople,
45597
+ value: 5,
45598
+ placeholder: 'Sélection remontée en haut',
45599
+ itemsCheckedToTheTop: true,
45600
+ showClear: true
45601
+ },
45602
+ OpenOnHover: {
45603
+ options: asyncPeople,
45604
+ placeholder: 'Ouverture au survol',
45605
+ openOnHover: true
45606
+ },
45607
+ ItemWithTooltip: {
45608
+ options: asyncPeopleHtmlTooltip,
45609
+ placeholder: 'Tooltip sur les options',
45610
+ enableItemTooltip: true
45611
+ },
45612
+ ItemWithSecondaryLabel: {
45613
+ options: asyncPeople,
45614
+ placeholder: 'Label secondaire',
45615
+ enableSecondaryLabel: true,
45616
+ secondaryLabelKey: 'profession'
45617
+ },
45618
+ ItemWithLink: {
45619
+ options: asyncPeople,
45620
+ placeholder: 'Lien sur le label secondaire',
45621
+ enableSecondaryLabel: true,
45622
+ secondaryLabelKey: 'profession',
45623
+ enableItemLink: true
45624
+ },
45625
+ Badge: {
45626
+ options: asyncPeople,
45627
+ value: 2,
45628
+ placeholder: 'Badges colorés',
45629
+ withColor: true,
45630
+ selectConfig: {
45631
+ labelStyle: null,
45632
+ generalIcon: null
45633
+ }
45634
+ },
45635
+ WithIcon: {
45636
+ options: asyncPeople,
45637
+ value: 1,
45638
+ placeholder: 'Icône devant chaque option',
45639
+ withIcon: true,
45640
+ selectConfig: {
45641
+ labelStyle: {
45642
+ fontWeight: '400'
45643
+ },
45644
+ generalIcon: 'pi pi-user'
45645
+ }
45646
+ },
45647
+ Truncate: {
45648
+ options: asyncPeople,
45649
+ value: 2,
45650
+ placeholder: 'Label tronqué',
45651
+ truncateAt: 8,
45652
+ valueStyle: {
45653
+ backgroundColor: 'transparent',
45654
+ color: 'inherit',
45655
+ padding: '0',
45656
+ borderRadius: '0',
45657
+ boxShadow: 'none',
45658
+ fontFamily: 'inherit'
45659
+ }
45660
+ },
45661
+ ReadOnly: {
45662
+ options: asyncPeople,
45663
+ value: 4,
45664
+ readOnly: true,
45665
+ showClear: false
45666
+ },
45667
+ Disabled: {
45668
+ options: asyncPeople,
45669
+ value: 4,
45670
+ disabled: true
45671
+ },
45672
+ Required: {
45673
+ options: asyncPeople,
45674
+ value: null,
45675
+ placeholder: 'Sélection obligatoire',
45676
+ required: true,
45677
+ name: 'monchamp',
45678
+ status: 'error',
45679
+ errorMessage: 'Une option doit être sélectionnée'
45680
+ },
45681
+ InfoLine: {
45682
+ options: asyncPeople,
45683
+ placeholder: 'Avec pied de panel',
45684
+ hasInfoLine: true,
45685
+ InfoLineValue: '8 utilisateurs disponibles'
44495
45686
  }
44496
45687
  };
44497
45688