arengibook 3.1.312-main → 3.1.314-main

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 +827 -122
  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 = "@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}";
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,43 @@ 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
37181
  useRef(1);
37087
37182
  useRef('');
37183
+ var inverseColor = function inverseColor(hexColor) {
37184
+ var r = parseInt(hexColor.substr(1, 2), 16);
37185
+ var g = parseInt(hexColor.substr(3, 2), 16);
37186
+ var b = parseInt(hexColor.substr(5, 2), 16);
37187
+ var luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255;
37188
+ return luminance > 0.18 ? '#000000' : '#FFFFFF';
37189
+ };
37190
+ var truncateLabel = function truncateLabel(label) {
37191
+ if (!label || typeof label !== 'string') return label;
37192
+ if (!truncateAt || label.length <= truncateAt) return label;
37193
+ return label.slice(0, truncateAt) + '…';
37194
+ };
37088
37195
  var optionTemplate = function optionTemplate(option) {
37089
37196
  var _ref2 = selectMetaConfig || {},
37090
37197
  labelStyle = _ref2.labelStyle,
@@ -37092,17 +37199,69 @@ var DropdownSelectMetaAsync = function DropdownSelectMetaAsync(_ref) {
37092
37199
  var styleLabel = {
37093
37200
  marginLeft: '10px'
37094
37201
  };
37095
- return /*#__PURE__*/React__default.createElement("div", {
37202
+ var tooltipProps = enableItemTooltip ? {
37203
+ 'data-pr-tooltip': (option === null || option === void 0 ? void 0 : option.tooltip) || (option === null || option === void 0 ? void 0 : option.description),
37204
+ 'data-pr-position': 'right'
37205
+ } : {};
37206
+ var secondaryLabel = enableSecondaryLabel ? option === null || option === void 0 ? void 0 : option[secondaryLabelKey] : null;
37207
+ var isLink = enableItemLink && (option === null || option === void 0 ? void 0 : option.link);
37208
+ var handleLinkClick = function handleLinkClick(e) {
37209
+ if (isLink) {
37210
+ e.preventDefault();
37211
+ e.stopPropagation();
37212
+ window.open(option.link, '_blank', 'noopener,noreferrer');
37213
+ }
37214
+ };
37215
+ var optionAttrs = typeof choice_attr === 'function' ? choice_attr(option) : {};
37216
+ var attrStyle = optionAttrs.style,
37217
+ attrClassName = optionAttrs.className,
37218
+ restAttrs = _objectWithoutProperties$1(optionAttrs, _excluded$3);
37219
+ var className = "flex align-items-center dropdown-tooltip-item ".concat(attrClassName || optionClassname || '').trim();
37220
+ if (withIcon || withColor) {
37221
+ var _ref3 = selectConfig || {},
37222
+ cfgLabelStyle = _ref3.labelStyle,
37223
+ cfgGeneralIcon = _ref3.generalIcon;
37224
+ return /*#__PURE__*/React__default.createElement("div", _extends$J({}, tooltipProps, restAttrs, {
37225
+ onClick: function onClick() {
37226
+ clickedFromList.current = true;
37227
+ },
37228
+ className: className,
37229
+ style: _objectSpread2(_objectSpread2({
37230
+ fontSize: '14px',
37231
+ display: 'flex',
37232
+ alignItems: 'center',
37233
+ gap: '8px'
37234
+ }, optionStyle), attrStyle)
37235
+ }), withIcon && cfgGeneralIcon && /*#__PURE__*/React__default.createElement("i", {
37236
+ style: {
37237
+ color: option === null || option === void 0 ? void 0 : option.color
37238
+ },
37239
+ className: cfgGeneralIcon
37240
+ }), withColor && option !== null && option !== void 0 && option.color ? /*#__PURE__*/React__default.createElement("span", {
37241
+ className: "dd-color-badge".concat(optionSelected === (option === null || option === void 0 ? void 0 : option[optionValue]) ? ' is-selected' : ''),
37242
+ style: {
37243
+ '--badge-color': option.color,
37244
+ color: inverseColor(option.color)
37245
+ }
37246
+ }, option === null || option === void 0 ? void 0 : option[optionLabel]) : /*#__PURE__*/React__default.createElement("span", {
37247
+ style: _objectSpread2(_objectSpread2({}, cfgLabelStyle), subItem ? {
37248
+ flex: 1
37249
+ } : {})
37250
+ }, option === null || option === void 0 ? void 0 : option[optionLabel]));
37251
+ }
37252
+ return /*#__PURE__*/React__default.createElement("div", _extends$J({}, tooltipProps, restAttrs, {
37096
37253
  onClick: function onClick() {
37097
37254
  clickedFromList.current = true;
37098
37255
  },
37099
- className: "flex align-items-center",
37100
- style: {
37256
+ className: className,
37257
+ style: _objectSpread2({
37101
37258
  padding: '6px 10px',
37102
37259
  height: 'auto'
37103
- }
37104
- }, /*#__PURE__*/React__default.createElement("div", {
37105
- style: _objectSpread2({
37260
+ }, attrStyle)
37261
+ }), /*#__PURE__*/React__default.createElement("div", {
37262
+ style: _objectSpread2(_objectSpread2({}, subItem ? {
37263
+ flex: 1
37264
+ } : {}), {}, {
37106
37265
  fontSize: '15px',
37107
37266
  fontWeight: 'bold'
37108
37267
  }, labelStyle)
@@ -37113,9 +37272,184 @@ var DropdownSelectMetaAsync = function DropdownSelectMetaAsync(_ref) {
37113
37272
  className: generalIcon
37114
37273
  }), /*#__PURE__*/React__default.createElement("span", {
37115
37274
  style: styleLabel
37116
- }, option === null || option === void 0 ? void 0 : option[optionLabel])));
37275
+ }, option === null || option === void 0 ? void 0 : option[optionLabel]), secondaryLabel && /*#__PURE__*/React__default.createElement("div", {
37276
+ onClick: isLink ? handleLinkClick : undefined,
37277
+ onMouseDown: isLink ? function (e) {
37278
+ return e.stopPropagation();
37279
+ } : undefined,
37280
+ style: {
37281
+ cursor: isLink ? 'pointer' : 'default',
37282
+ marginTop: '2px',
37283
+ width: 'fit-content'
37284
+ }
37285
+ }, /*#__PURE__*/React__default.createElement("small", {
37286
+ style: {
37287
+ opacity: 0.75,
37288
+ fontSize: '12px',
37289
+ textDecoration: isLink ? 'underline' : 'none',
37290
+ color: isLink ? '#3b82f6' : 'inherit',
37291
+ fontWeight: 'normal'
37292
+ }
37293
+ }, /*#__PURE__*/React__default.createElement("span", {
37294
+ style: subItem ? {} : {
37295
+ marginLeft: '10px'
37296
+ }
37297
+ }, secondaryLabel)))));
37298
+ };
37299
+ var groupedItemTemplate = function groupedItemTemplate(option) {
37300
+ var _ref4 = groupedItemTemplateConfig || {},
37301
+ showImage = _ref4.showImage,
37302
+ imageKey = _ref4.imageKey,
37303
+ imageStyle = _ref4.imageStyle,
37304
+ showIcon = _ref4.showIcon,
37305
+ iconKey = _ref4.iconKey,
37306
+ labelStyle = _ref4.labelStyle,
37307
+ generalIcon = _ref4.generalIcon,
37308
+ generalImage = _ref4.generalImage;
37309
+ var icon = option.value && option.value[iconKey];
37310
+ var styleLabel = generalIcon || showImage && option[imageKey] || showIcon && icon ? {
37311
+ marginLeft: '10px'
37312
+ } : {};
37313
+ if (option.group) {
37314
+ return /*#__PURE__*/React__default.createElement("div", {
37315
+ className: "flex align-items-center"
37316
+ }, /*#__PURE__*/React__default.createElement("div", {
37317
+ style: _objectSpread2({
37318
+ fontSize: '15px',
37319
+ fontWeight: 'bold'
37320
+ }, labelStyle)
37321
+ }, generalIcon && /*#__PURE__*/React__default.createElement("i", {
37322
+ className: generalIcon,
37323
+ style: _objectSpread2({
37324
+ fontSize: '15px',
37325
+ fontWeight: 'bold'
37326
+ }, labelStyle)
37327
+ }), generalImage && /*#__PURE__*/React__default.createElement("img", {
37328
+ alt: "General",
37329
+ src: generalImage,
37330
+ style: imageStyle || {
37331
+ width: '18px',
37332
+ marginRight: '0.5rem'
37333
+ },
37334
+ className: "mr-2"
37335
+ }), showImage && option[imageKey] && /*#__PURE__*/React__default.createElement("img", {
37336
+ alt: option.label,
37337
+ src: option[imageKey],
37338
+ style: imageStyle || {
37339
+ width: '18px',
37340
+ marginRight: '0.5rem'
37341
+ },
37342
+ className: "mr-2"
37343
+ }), showIcon && icon && /*#__PURE__*/React__default.createElement("i", {
37344
+ className: "mr-2 ".concat(icon),
37345
+ style: _objectSpread2({
37346
+ fontSize: '15px',
37347
+ fontWeight: 'bold'
37348
+ }, labelStyle)
37349
+ }), /*#__PURE__*/React__default.createElement("span", {
37350
+ style: styleLabel
37351
+ }, option.label)));
37352
+ }
37353
+ return null;
37117
37354
  };
37118
- var isInvalidEffective = invalid || showRequiredError;
37355
+ var panelFooterTemplate = function panelFooterTemplate() {
37356
+ if (InfoLineValue) {
37357
+ return /*#__PURE__*/React__default.createElement("div", {
37358
+ style: {
37359
+ padding: '8px'
37360
+ }
37361
+ }, /*#__PURE__*/React__default.createElement("b", null, InfoLineValue));
37362
+ }
37363
+ };
37364
+ var isInvalidEffective = invalid || status === 'error' || showRequiredError;
37365
+
37366
+ // 🔹 Chargement des options depuis une URL (même contrat que MultiSelectMetaAsync)
37367
+ var fetchOptionsFromUrl = /*#__PURE__*/function () {
37368
+ var _ref5 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
37369
+ var search,
37370
+ _ref6,
37371
+ _ref6$page,
37372
+ page,
37373
+ length,
37374
+ start,
37375
+ queryParams,
37376
+ response,
37377
+ responseJSON,
37378
+ dataAjax,
37379
+ mappedOptions,
37380
+ hasMore,
37381
+ _args = arguments,
37382
+ _t;
37383
+ return _regenerator().w(function (_context) {
37384
+ while (1) switch (_context.n) {
37385
+ case 0:
37386
+ search = _args.length > 0 && _args[0] !== undefined ? _args[0] : '';
37387
+ _ref6 = _args.length > 2 && _args[2] !== undefined ? _args[2] : {}, _ref6$page = _ref6.page, page = _ref6$page === void 0 ? 1 : _ref6$page;
37388
+ _context.p = 1;
37389
+ length = 25;
37390
+ start = (page - 1) * length;
37391
+ queryParams = new URLSearchParams();
37392
+ if (search) queryParams.append('search[value]', search);
37393
+ queryParams.append('start', start);
37394
+ queryParams.append('length', length);
37395
+ _context.n = 2;
37396
+ return fetch("".concat(optionsUrl, "?").concat(queryParams.toString()));
37397
+ case 2:
37398
+ response = _context.v;
37399
+ if (response.ok) {
37400
+ _context.n = 4;
37401
+ break;
37402
+ }
37403
+ if (!(response.status === 404)) {
37404
+ _context.n = 3;
37405
+ break;
37406
+ }
37407
+ return _context.a(2, {
37408
+ options: [],
37409
+ hasMore: false
37410
+ });
37411
+ case 3:
37412
+ throw new Error("Erreur HTTP: ".concat(response.status));
37413
+ case 4:
37414
+ _context.n = 5;
37415
+ return response.json();
37416
+ case 5:
37417
+ responseJSON = _context.v;
37418
+ dataAjax = responseJSON.data || [];
37419
+ mappedOptions = dataAjax.map(function (opt) {
37420
+ if (opt.hasOwnProperty('color') && opt.color !== null && opt.color.length > 0) {
37421
+ opt.color = opt.color.toLowerCase();
37422
+ } else {
37423
+ delete opt.color;
37424
+ }
37425
+ opt.label = opt.nom !== undefined && opt.nom !== null ? opt.nom : opt.label;
37426
+ opt.value = opt.id;
37427
+ return opt;
37428
+ });
37429
+ hasMore = start + dataAjax.length < responseJSON.recordsTotal;
37430
+ return _context.a(2, {
37431
+ options: mappedOptions,
37432
+ hasMore: hasMore,
37433
+ additional: {
37434
+ page: page + 1
37435
+ }
37436
+ });
37437
+ case 6:
37438
+ _context.p = 6;
37439
+ _t = _context.v;
37440
+ console.error("Erreur lors de la récupération des options :", _t);
37441
+ return _context.a(2, {
37442
+ options: [],
37443
+ hasMore: false
37444
+ });
37445
+ }
37446
+ }, _callee, null, [[1, 6]]);
37447
+ }));
37448
+ return function fetchOptionsFromUrl() {
37449
+ return _ref5.apply(this, arguments);
37450
+ };
37451
+ }();
37452
+ var loadOptions = typeof options === 'function' ? options : fetchOptionsFromUrl;
37119
37453
  var style = {
37120
37454
  border: isInvalidEffective ? '1px solid red' : '1px solid #ccc',
37121
37455
  width: '100%',
@@ -37127,17 +37461,17 @@ var DropdownSelectMetaAsync = function DropdownSelectMetaAsync(_ref) {
37127
37461
  useEffect(function () {
37128
37462
  setOptionSelected(objValue ? objValue === null || objValue === void 0 ? void 0 : objValue[optionValue] : value !== null && value !== void 0 ? value : null);
37129
37463
  var loadInitialOptions = /*#__PURE__*/function () {
37130
- var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
37464
+ var _ref7 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {
37131
37465
  var result, _result$options, exists;
37132
- return _regenerator().w(function (_context) {
37133
- while (1) switch (_context.n) {
37466
+ return _regenerator().w(function (_context2) {
37467
+ while (1) switch (_context2.n) {
37134
37468
  case 0:
37135
- _context.n = 1;
37136
- return options('', [], {
37469
+ _context2.n = 1;
37470
+ return loadOptions('', [], {
37137
37471
  page: 1
37138
37472
  });
37139
37473
  case 1:
37140
- result = _context.v;
37474
+ result = _context2.v;
37141
37475
  setLoadedOptions((result === null || result === void 0 ? void 0 : result.options) || []);
37142
37476
  if (objValue) {
37143
37477
  exists = result === null || result === void 0 || (_result$options = result.options) === null || _result$options === void 0 ? void 0 : _result$options.some(function (opt) {
@@ -37150,12 +37484,12 @@ var DropdownSelectMetaAsync = function DropdownSelectMetaAsync(_ref) {
37150
37484
  }
37151
37485
  }
37152
37486
  case 2:
37153
- return _context.a(2);
37487
+ return _context2.a(2);
37154
37488
  }
37155
- }, _callee);
37489
+ }, _callee2);
37156
37490
  }));
37157
37491
  return function loadInitialOptions() {
37158
- return _ref3.apply(this, arguments);
37492
+ return _ref7.apply(this, arguments);
37159
37493
  };
37160
37494
  }();
37161
37495
  loadInitialOptions();
@@ -37163,7 +37497,7 @@ var DropdownSelectMetaAsync = function DropdownSelectMetaAsync(_ref) {
37163
37497
  return function () {
37164
37498
  document.removeEventListener('mousedown', handleClickOutside);
37165
37499
  };
37166
- }, [options, objValue, value]);
37500
+ }, [options, optionsUrl, objValue, value]);
37167
37501
  var handleClickOutside = function handleClickOutside(event) {
37168
37502
  if (dropdownRef.current && !dropdownRef.current.contains(event.target)) {
37169
37503
  setIsEditing(false);
@@ -37181,7 +37515,39 @@ var DropdownSelectMetaAsync = function DropdownSelectMetaAsync(_ref) {
37181
37515
  }
37182
37516
  };
37183
37517
  }, [dropdownRef.current]);
37518
+ useEffect(function () {
37519
+ if (enableItemTooltip) {
37520
+ setTooltipKey(function (prevKey) {
37521
+ return prevKey + 1;
37522
+ });
37523
+ }
37524
+ }, [loadedOptions, enableItemTooltip]);
37525
+ var getSelectedGroupLabel = function getSelectedGroupLabel(selectedValue) {
37526
+ if (!isGroupedOption || !selectedValue) return '';
37527
+ var _iterator = _createForOfIteratorHelper$7(loadedOptions),
37528
+ _step;
37529
+ try {
37530
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
37531
+ var group = _step.value;
37532
+ if (showTooltipGroup && group.items && group.items.some(function (item) {
37533
+ return item.value === selectedValue;
37534
+ })) {
37535
+ if (prevTextShowTooltip) return prevTextShowTooltip + ' ' + group.label;
37536
+ return group.label;
37537
+ }
37538
+ }
37539
+ } catch (err) {
37540
+ _iterator.e(err);
37541
+ } finally {
37542
+ _iterator.f();
37543
+ }
37544
+ return '';
37545
+ };
37546
+ useEffect(function () {
37547
+ if (optionSelected) setSelectedGroupLabel(getSelectedGroupLabel(optionSelected));
37548
+ }, [optionSelected, loadedOptions]);
37184
37549
  var handleChange = function handleChange(e) {
37550
+ if (readOnly) return;
37185
37551
  setOptionSelected(e.value);
37186
37552
  if (clickedFromList.current) {
37187
37553
  var _selected$optionLabel;
@@ -37192,69 +37558,81 @@ var DropdownSelectMetaAsync = function DropdownSelectMetaAsync(_ref) {
37192
37558
  setInputValue((_selected$optionLabel = selected === null || selected === void 0 ? void 0 : selected[optionLabel]) !== null && _selected$optionLabel !== void 0 ? _selected$optionLabel : '');
37193
37559
  }
37194
37560
  clickedFromList.current = false;
37195
- if (onChange) onChange(e.value);
37561
+ if (typeof onChange === 'function') {
37562
+ onChange(e.value);
37563
+ } else if (typeof onChange === 'string' && typeof window[onChange] === 'function') {
37564
+ window[onChange](e.value);
37565
+ }
37196
37566
  };
37197
37567
  var handleClear = function handleClear() {
37198
37568
  setOptionSelected(null);
37199
37569
  setInputValue('');
37200
- if (onChange) onChange(null);
37201
- options('', [], {
37570
+ if (typeof onChange === 'function') {
37571
+ onChange(null);
37572
+ } else if (typeof onChange === 'string' && typeof window[onChange] === 'function') {
37573
+ window[onChange](null);
37574
+ }
37575
+ loadOptions('', [], {
37202
37576
  page: 1
37203
37577
  }).then(function (result) {
37204
37578
  setLoadedOptions((result === null || result === void 0 ? void 0 : result.options) || []);
37205
37579
  });
37206
37580
  };
37207
37581
  var handleInputChange = /*#__PURE__*/function () {
37208
- var _ref4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(e) {
37582
+ var _ref8 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(e) {
37209
37583
  var search, result, _result$options2, _result, filteredOptions;
37210
- return _regenerator().w(function (_context2) {
37211
- while (1) switch (_context2.n) {
37584
+ return _regenerator().w(function (_context3) {
37585
+ while (1) switch (_context3.n) {
37212
37586
  case 0:
37213
37587
  search = e.target.value;
37214
37588
  setInputValue(search);
37589
+ if (typeof onSearch === 'function') onSearch(search);
37215
37590
  if (search) {
37216
- _context2.n = 2;
37591
+ _context3.n = 2;
37217
37592
  break;
37218
37593
  }
37219
- _context2.n = 1;
37220
- return options('', [], {
37594
+ _context3.n = 1;
37595
+ return loadOptions('', [], {
37221
37596
  page: 1
37222
37597
  });
37223
37598
  case 1:
37224
- result = _context2.v;
37599
+ result = _context3.v;
37225
37600
  setLoadedOptions((result === null || result === void 0 ? void 0 : result.options) || []);
37226
- _context2.n = 4;
37601
+ _context3.n = 4;
37227
37602
  break;
37228
37603
  case 2:
37229
- _context2.n = 3;
37230
- return options(search, [], {
37604
+ _context3.n = 3;
37605
+ return loadOptions(search, [], {
37231
37606
  page: 1
37232
37607
  });
37233
37608
  case 3:
37234
- _result = _context2.v;
37609
+ _result = _context3.v;
37235
37610
  filteredOptions = (_result === null || _result === void 0 || (_result$options2 = _result.options) === null || _result$options2 === void 0 ? void 0 : _result$options2.filter(function (opt) {
37236
37611
  return opt[optionLabel].toLowerCase().includes(search.toLowerCase());
37237
37612
  })) || [];
37238
37613
  setLoadedOptions(filteredOptions);
37239
37614
  case 4:
37240
- return _context2.a(2);
37615
+ return _context3.a(2);
37241
37616
  }
37242
- }, _callee2);
37617
+ }, _callee3);
37243
37618
  }));
37244
37619
  return function handleInputChange(_x) {
37245
- return _ref4.apply(this, arguments);
37620
+ return _ref8.apply(this, arguments);
37246
37621
  };
37247
37622
  }();
37623
+ var handleMouseEnter = function handleMouseEnter() {
37624
+ var _dropdownComposantRef;
37625
+ if (!openOnHover || disabled || readOnly) return;
37626
+ (_dropdownComposantRef = dropdownComposantRef.current) === null || _dropdownComposantRef === void 0 || _dropdownComposantRef.show();
37627
+ };
37628
+ var handleMouseLeave = function handleMouseLeave() {
37629
+ var _dropdownComposantRef2;
37630
+ if (!openOnHover) return;
37631
+ (_dropdownComposantRef2 = dropdownComposantRef.current) === null || _dropdownComposantRef2 === void 0 || _dropdownComposantRef2.hide();
37632
+ };
37248
37633
  var selectedOption = loadedOptions.find(function (opt) {
37249
37634
  return opt[optionValue] === optionSelected;
37250
37635
  });
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
37636
  var valueTemplate = function valueTemplate() {
37259
37637
  if (isEditing) return null;
37260
37638
  if (!selectedOption) return /*#__PURE__*/React__default.createElement("span", {
@@ -37262,7 +37640,37 @@ var DropdownSelectMetaAsync = function DropdownSelectMetaAsync(_ref) {
37262
37640
  color: '#aaa'
37263
37641
  }
37264
37642
  }, placeholder);
37643
+ if (withIcon || withColor) {
37644
+ var _ref9 = selectConfig || {},
37645
+ labelStyle = _ref9.labelStyle,
37646
+ generalIcon = _ref9.generalIcon;
37647
+ return /*#__PURE__*/React__default.createElement("div", {
37648
+ style: _objectSpread2({
37649
+ display: 'flex',
37650
+ alignItems: 'center',
37651
+ gap: '8px',
37652
+ fontFamily: 'Arial',
37653
+ fontSize: '14px'
37654
+ }, valueStyle)
37655
+ }, withIcon && generalIcon && /*#__PURE__*/React__default.createElement("i", {
37656
+ style: {
37657
+ color: selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.color
37658
+ },
37659
+ className: generalIcon
37660
+ }), withColor && selectedOption !== null && selectedOption !== void 0 && selectedOption.color ? /*#__PURE__*/React__default.createElement("span", {
37661
+ className: "dd-color-badge is-selected",
37662
+ style: {
37663
+ '--badge-color': selectedOption.color,
37664
+ color: inverseColor(selectedOption.color)
37665
+ }
37666
+ }, truncateLabel(selectedOption[optionLabel])) : /*#__PURE__*/React__default.createElement("span", {
37667
+ className: valueClassname,
37668
+ style: labelStyle
37669
+ }, truncateLabel(selectedOption[optionLabel])));
37670
+ }
37265
37671
  return /*#__PURE__*/React__default.createElement("span", {
37672
+ className: valueClassname,
37673
+ title: selectedOption[optionLabel],
37266
37674
  style: _objectSpread2({
37267
37675
  backgroundColor: selectedOption !== null && selectedOption !== void 0 && selectedOption.color ? selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.color : '#FFFFFF',
37268
37676
  color: selectedOption !== null && selectedOption !== void 0 && selectedOption.color ? inverseColor(selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.color) : '#FFFFFF',
@@ -37273,7 +37681,7 @@ var DropdownSelectMetaAsync = function DropdownSelectMetaAsync(_ref) {
37273
37681
  display: 'inline-block',
37274
37682
  fontFamily: 'Arial'
37275
37683
  }, valueStyle)
37276
- }, selectedOption[optionLabel]);
37684
+ }, truncateLabel(selectedOption[optionLabel]));
37277
37685
  };
37278
37686
 
37279
37687
  // 🔹 Fonction de lazy loading (simulation d’un backend)
@@ -37334,20 +37742,103 @@ var DropdownSelectMetaAsync = function DropdownSelectMetaAsync(_ref) {
37334
37742
  return document.removeEventListener('click', handleAnyClick);
37335
37743
  };
37336
37744
  }, []);
37337
- return /*#__PURE__*/React__default.createElement("div", {
37338
- ref: dropdownRef,
37339
- className: "flex flex-col gap-1",
37340
- onClick: isInvalidEffective || disabled ? null : function () {
37745
+
37746
+ // 🔹 Options calculées (réordonnancement + tri, comme Dropdown)
37747
+ var smartSort = function smartSort(opts, order, labelKey) {
37748
+ if (!order) return opts;
37749
+ var dir = order === 'desc' ? 1 : -1;
37750
+ return _toConsumableArray$a(opts).sort(function (a, b) {
37751
+ var _a$labelKey, _b$labelKey;
37752
+ var aLabel = String((_a$labelKey = a === null || a === void 0 ? void 0 : a[labelKey]) !== null && _a$labelKey !== void 0 ? _a$labelKey : '').trim();
37753
+ var bLabel = String((_b$labelKey = b === null || b === void 0 ? void 0 : b[labelKey]) !== null && _b$labelKey !== void 0 ? _b$labelKey : '').trim();
37754
+ return dir * aLabel.localeCompare(bLabel, 'fr', {
37755
+ sensitivity: 'base',
37756
+ numeric: true
37757
+ });
37758
+ });
37759
+ };
37760
+ var computedOptions = useMemo(function () {
37761
+ var opts = loadedOptions;
37762
+ if (itemsCheckedToTheTop && optionSelected) {
37763
+ var selected = opts.find(function (opt) {
37764
+ return (opt === null || opt === void 0 ? void 0 : opt[optionValue]) === optionSelected;
37765
+ });
37766
+ if (selected) {
37767
+ opts = [selected].concat(_toConsumableArray$a(opts.filter(function (opt) {
37768
+ return (opt === null || opt === void 0 ? void 0 : opt[optionValue]) !== optionSelected;
37769
+ })));
37770
+ }
37771
+ }
37772
+ if (enableSorting) {
37773
+ opts = smartSort(opts, sortOrder, optionLabel);
37774
+ }
37775
+ return opts;
37776
+ }, [loadedOptions, itemsCheckedToTheTop, optionSelected, enableSorting, sortOrder, optionValue, optionLabel]);
37777
+ var toggleSortOrder = function toggleSortOrder() {
37778
+ setSortOrder(function (prev) {
37779
+ if (prev === null) return 'desc';
37780
+ if (prev === 'desc') return 'asc';
37781
+ return null;
37782
+ });
37783
+ requestAnimationFrame(function () {
37784
+ var _dropdownComposantRef3;
37785
+ (_dropdownComposantRef3 = dropdownComposantRef.current) === null || _dropdownComposantRef3 === void 0 || _dropdownComposantRef3.show();
37786
+ });
37787
+ };
37788
+ var customFilterTemplate = function customFilterTemplate(opts) {
37789
+ if (!enableSorting) return opts.element;
37790
+ return /*#__PURE__*/React__default.createElement("div", {
37791
+ className: "dd-search-row"
37792
+ }, opts.element, /*#__PURE__*/React__default.createElement("button", {
37793
+ type: "button",
37794
+ className: "dd-sort-btn",
37795
+ onClick: function onClick(e) {
37796
+ e.stopPropagation();
37797
+ toggleSortOrder();
37798
+ }
37799
+ }, /*#__PURE__*/React__default.createElement("i", {
37800
+ className: sortOrder === 'desc' ? 'pi pi-sort-amount-down' : sortOrder === 'asc' ? 'pi pi-sort-amount-up-alt' : 'pi pi-sort-alt'
37801
+ })));
37802
+ };
37803
+ var mergedClassName = "flex flex-col gap-1 ".concat(attr["class"] || '').trim();
37804
+ attr["class"];
37805
+ var cleanAttr = _objectWithoutProperties$1(attr, _excluded2$2);
37806
+ return /*#__PURE__*/React__default.createElement("div", _extends$J({
37807
+ ref: dropdownRef
37808
+ }, cleanAttr, {
37809
+ className: mergedClassName,
37810
+ style: {
37811
+ width: '100%'
37812
+ },
37813
+ onMouseEnter: handleMouseEnter,
37814
+ onMouseLeave: handleMouseLeave,
37815
+ onClick: isInvalidEffective || disabled || readOnly ? null : function () {
37341
37816
  return setIsEditing(editable);
37342
37817
  }
37343
- }, /*#__PURE__*/React__default.createElement(Dropdown$1, {
37344
- options: loadedOptions,
37818
+ }), enableItemTooltip && /*#__PURE__*/React__default.createElement(Tooltip$1, {
37819
+ key: tooltipKey,
37820
+ target: ".dropdown-tooltip-item",
37821
+ appendTo: document.body,
37822
+ position: "right",
37823
+ style: {
37824
+ zIndex: 9999999
37825
+ }
37826
+ }), /*#__PURE__*/React__default.createElement(Dropdown$1, _extends$J({
37827
+ ref: dropdownComposantRef,
37828
+ options: computedOptions,
37345
37829
  onChange: handleChange,
37830
+ onClick: function onClick(e) {
37831
+ if (readOnly) {
37832
+ e.preventDefault();
37833
+ e.stopPropagation();
37834
+ }
37835
+ },
37346
37836
  filter: filter,
37837
+ filterTemplate: filter ? customFilterTemplate : undefined,
37347
37838
  placeholder: placeholder === "" || placeholder === null ? ' ' : placeholder,
37348
37839
  optionLabel: optionLabel,
37349
37840
  optionValue: optionValue,
37350
- showClear: true,
37841
+ showClear: showClear,
37351
37842
  disabled: disabled,
37352
37843
  editable: isEditing,
37353
37844
  onFocus: function onFocus() {
@@ -37365,16 +37856,38 @@ var DropdownSelectMetaAsync = function DropdownSelectMetaAsync(_ref) {
37365
37856
  },
37366
37857
  dropdownMode: "current",
37367
37858
  itemTemplate: optionTemplate,
37368
- valueTemplate: valueTemplate,
37369
- virtualScrollerOptions: {
37859
+ valueTemplate: valueTemplate
37860
+ }, hasInfoLine && {
37861
+ panelFooterTemplate: panelFooterTemplate
37862
+ }, {
37863
+ optionGroupTemplate: isGroupedOption ? groupedItemTemplate : null
37864
+ }, isGroupedOption && computedOptions.length > 0 && Array.isArray((_computedOptions$ = computedOptions[0]) === null || _computedOptions$ === void 0 ? void 0 : _computedOptions$.items) && {
37865
+ optionGroupLabel: 'label',
37866
+ optionGroupChildren: 'items'
37867
+ }, {
37868
+ onShow: function onShow() {
37869
+ if (isGroupedOption && showTooltipGroup) setIsDropdownOpen(true);
37870
+ if (enableItemTooltip) setTooltipKey(function (k) {
37871
+ return k + 1;
37872
+ });
37873
+ },
37874
+ onHide: function onHide() {
37875
+ if (isGroupedOption && showTooltipGroup) setIsDropdownOpen(false);
37876
+ },
37877
+ emptyMessage: externalLoading ? 'Chargement…' : 'Aucune option disponible',
37878
+ virtualScrollerOptions: _objectSpread2({
37370
37879
  lazy: true,
37371
37880
  onLazyLoad: onLazyLoad,
37372
37881
  itemSize: 38,
37373
37882
  showLoader: true,
37374
- loading: loading,
37883
+ loading: loading || externalLoading,
37375
37884
  delay: 25
37376
- },
37377
- className: "w-full md:w-14rem"
37885
+ }, virtualScrollerOptions),
37886
+ className: "w-full"
37887
+ })), !isDropdownOpen && selectedGroupLabel && isGroupedOption && /*#__PURE__*/React__default.createElement(Tooltip$1, {
37888
+ target: ".p-dropdown-label.p-inputtext",
37889
+ content: selectedGroupLabel,
37890
+ position: "top"
37378
37891
  }), name && /*#__PURE__*/React__default.createElement("input", {
37379
37892
  type: "hidden",
37380
37893
  name: name,
@@ -37411,9 +37924,6 @@ var DropdownSelectMetaAsync = function DropdownSelectMetaAsync(_ref) {
37411
37924
  }, 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
37925
  };
37413
37926
 
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
37927
  var _excluded$2 = ["class"],
37418
37928
  _excluded2$1 = ["style", "className"];
37419
37929
  var Dropdown = function Dropdown(props) {
@@ -37519,10 +38029,11 @@ var Dropdown = function Dropdown(props) {
37519
38029
  _props$subItem = props.subItem,
37520
38030
  subItem = _props$subItem === void 0 ? false : _props$subItem,
37521
38031
  _props$required = props.required,
37522
- required = _props$required === void 0 ? false : _props$required;
38032
+ required = _props$required === void 0 ? false : _props$required,
38033
+ optionsUrl = props.optionsUrl;
37523
38034
 
37524
38035
  // --- Async delegation ---
37525
- var isAsyncOptions = typeof options === 'function';
38036
+ var isAsyncOptions = typeof options === 'function' || optionsUrl;
37526
38037
  if (isAsyncOptions) {
37527
38038
  return /*#__PURE__*/React__default.createElement(DropdownSelectMetaAsync, props);
37528
38039
  }
@@ -44436,24 +44947,118 @@ var createFakeOptions = function createFakeOptions(start, length) {
44436
44947
  }
44437
44948
  return options;
44438
44949
  };
44950
+ var mockPeople = [{
44951
+ label: 'Alice Martin',
44952
+ value: 1,
44953
+ color: '#ff9900',
44954
+ profession: 'Développeuse',
44955
+ tooltip: 'Alice Martin — Développeuse',
44956
+ link: 'https://example.com'
44957
+ }, {
44958
+ label: 'Bruno Lefèvre',
44959
+ value: 2,
44960
+ color: '#3b82f6',
44961
+ profession: 'Chef de projet',
44962
+ tooltip: 'Bruno Lefèvre — Chef de projet',
44963
+ link: 'https://example.com'
44964
+ }, {
44965
+ label: 'Chloé Dubois',
44966
+ value: 3,
44967
+ color: '#10b981',
44968
+ profession: 'Designer',
44969
+ tooltip: 'Chloé Dubois — Designer',
44970
+ link: 'https://example.com'
44971
+ }, {
44972
+ label: 'David Morel',
44973
+ value: 4,
44974
+ color: '#8b5cf6',
44975
+ profession: 'Data analyst',
44976
+ tooltip: 'David Morel — Data analyst',
44977
+ link: 'https://example.com'
44978
+ }, {
44979
+ label: 'Emma Roux',
44980
+ value: 5,
44981
+ color: '#ec4899',
44982
+ profession: 'Product owner',
44983
+ tooltip: 'Emma Roux — Product owner',
44984
+ link: 'https://example.com'
44985
+ }, {
44986
+ label: 'Farid Benali',
44987
+ value: 6,
44988
+ color: '#f59e0b',
44989
+ profession: 'DevOps',
44990
+ tooltip: 'Farid Benali — DevOps',
44991
+ link: 'https://example.com'
44992
+ }, {
44993
+ label: 'Gaëlle Simon',
44994
+ value: 7,
44995
+ color: '#ef4444',
44996
+ profession: 'QA engineer',
44997
+ tooltip: 'Gaëlle Simon — QA engineer',
44998
+ link: 'https://example.com'
44999
+ }, {
45000
+ label: 'Hugo Bernard',
45001
+ value: 8,
45002
+ color: '#10b981',
45003
+ profession: 'Développeur',
45004
+ tooltip: 'Hugo Bernard — Développeur',
45005
+ link: 'https://example.com'
45006
+ }];
45007
+ var asyncPeople = /*#__PURE__*/function () {
45008
+ var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
45009
+ var search,
45010
+ _ref2,
45011
+ _ref2$page,
45012
+ page,
45013
+ filtered,
45014
+ pageSize,
45015
+ start,
45016
+ _args = arguments;
45017
+ return _regenerator().w(function (_context) {
45018
+ while (1) switch (_context.n) {
45019
+ case 0:
45020
+ search = _args.length > 0 && _args[0] !== undefined ? _args[0] : '';
45021
+ _ref2 = _args.length > 2 && _args[2] !== undefined ? _args[2] : {}, _ref2$page = _ref2.page, page = _ref2$page === void 0 ? 1 : _ref2$page;
45022
+ _context.n = 1;
45023
+ return simulateNetworkDelay();
45024
+ case 1:
45025
+ filtered = search ? mockPeople.filter(function (opt) {
45026
+ return opt.label.toLowerCase().includes(search.toLowerCase());
45027
+ }) : mockPeople;
45028
+ pageSize = 30;
45029
+ start = (page - 1) * pageSize;
45030
+ return _context.a(2, {
45031
+ options: filtered.slice(start, start + pageSize),
45032
+ hasMore: start + pageSize < filtered.length,
45033
+ additional: {
45034
+ page: page + 1
45035
+ }
45036
+ });
45037
+ }
45038
+ }, _callee);
45039
+ }));
45040
+ return function asyncPeople() {
45041
+ return _ref.apply(this, arguments);
45042
+ };
45043
+ }();
44439
45044
  var DropdownSelectMetaAsyncPresets = {
44440
45045
  SelectMetaAsync: {
44441
45046
  options: function () {
44442
- var _options = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
45047
+ var _options = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {
44443
45048
  var search,
44444
- _ref,
45049
+ _ref3,
44445
45050
  page,
44446
45051
  allOptions,
44447
45052
  filtered,
44448
45053
  pageSize,
44449
45054
  start,
44450
- _args = arguments;
44451
- return _regenerator().w(function (_context) {
44452
- while (1) switch (_context.n) {
45055
+ _args2 = arguments;
45056
+ return _regenerator().w(function (_context2) {
45057
+ while (1) switch (_context2.n) {
44453
45058
  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;
45059
+ search = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : '';
45060
+ _ref3 = _args2.length > 2 ? _args2[2] : undefined, page = _ref3.page;
45061
+ _context2.n = 1;
44457
45062
  return simulateNetworkDelay();
44458
45063
  case 1:
44459
45064
  allOptions = createFakeOptions(0, 100);
@@ -44462,7 +45067,7 @@ var DropdownSelectMetaAsyncPresets = {
44462
45067
  });
44463
45068
  pageSize = 30;
44464
45069
  start = (page - 1) * pageSize;
44465
- return _context.a(2, {
45070
+ return _context2.a(2, {
44466
45071
  options: filtered.slice(start, start + pageSize),
44467
45072
  hasMore: start + pageSize < filtered.length,
44468
45073
  additional: {
@@ -44470,7 +45075,7 @@ var DropdownSelectMetaAsyncPresets = {
44470
45075
  }
44471
45076
  });
44472
45077
  }
44473
- }, _callee);
45078
+ }, _callee2);
44474
45079
  }));
44475
45080
  function options() {
44476
45081
  return _options.apply(this, arguments);
@@ -44492,6 +45097,141 @@ var DropdownSelectMetaAsyncPresets = {
44492
45097
  fontSize: '14px',
44493
45098
  fontFamily: 'Arial'
44494
45099
  }
45100
+ },
45101
+ Base: {
45102
+ options: asyncPeople,
45103
+ value: null,
45104
+ placeholder: 'Sélectionnez une option',
45105
+ editable: true,
45106
+ filter: false,
45107
+ showClear: true,
45108
+ valueStyle: {
45109
+ backgroundColor: 'transparent',
45110
+ color: 'inherit',
45111
+ padding: '0',
45112
+ borderRadius: '0',
45113
+ boxShadow: 'none',
45114
+ fontFamily: 'inherit'
45115
+ }
45116
+ },
45117
+ AsyncOptions: {
45118
+ options: asyncPeople,
45119
+ value: 3,
45120
+ placeholder: 'Sélectionnez une option',
45121
+ editable: true,
45122
+ showClear: true,
45123
+ selectMetaConfig: {
45124
+ labelStyle: {
45125
+ fontWeight: 'bold'
45126
+ },
45127
+ generalIcon: 'pi pi-tag'
45128
+ }
45129
+ },
45130
+ SearchAjaxLoading: {
45131
+ // En prod : optionsUrl: '/api/options' (pagination start/length, recherche search[value])
45132
+ options: asyncPeople,
45133
+ placeholder: 'Rechercher (Ajax)…',
45134
+ filter: true,
45135
+ showClear: true
45136
+ },
45137
+ Sorting: {
45138
+ options: asyncPeople,
45139
+ placeholder: 'Tri A→Z / Z→A',
45140
+ filter: true,
45141
+ enableSorting: true,
45142
+ showClear: true
45143
+ },
45144
+ ItemsCheckedToTheTop: {
45145
+ options: asyncPeople,
45146
+ value: 5,
45147
+ placeholder: 'Sélection remontée en haut',
45148
+ itemsCheckedToTheTop: true,
45149
+ showClear: true
45150
+ },
45151
+ OpenOnHover: {
45152
+ options: asyncPeople,
45153
+ placeholder: 'Ouverture au survol',
45154
+ openOnHover: true
45155
+ },
45156
+ ItemWithTooltip: {
45157
+ options: asyncPeople,
45158
+ placeholder: 'Tooltip sur les options',
45159
+ enableItemTooltip: true
45160
+ },
45161
+ ItemWithSecondaryLabel: {
45162
+ options: asyncPeople,
45163
+ placeholder: 'Label secondaire',
45164
+ enableSecondaryLabel: true,
45165
+ secondaryLabelKey: 'profession'
45166
+ },
45167
+ ItemWithLink: {
45168
+ options: asyncPeople,
45169
+ placeholder: 'Lien sur le label secondaire',
45170
+ enableSecondaryLabel: true,
45171
+ secondaryLabelKey: 'profession',
45172
+ enableItemLink: true
45173
+ },
45174
+ Badge: {
45175
+ options: asyncPeople,
45176
+ value: 2,
45177
+ placeholder: 'Badges colorés',
45178
+ withColor: true,
45179
+ selectConfig: {
45180
+ labelStyle: null,
45181
+ generalIcon: null
45182
+ }
45183
+ },
45184
+ WithIcon: {
45185
+ options: asyncPeople,
45186
+ value: 1,
45187
+ placeholder: 'Icône devant chaque option',
45188
+ withIcon: true,
45189
+ selectConfig: {
45190
+ labelStyle: {
45191
+ fontWeight: '400'
45192
+ },
45193
+ generalIcon: 'pi pi-user'
45194
+ }
45195
+ },
45196
+ Truncate: {
45197
+ options: asyncPeople,
45198
+ value: 2,
45199
+ placeholder: 'Label tronqué',
45200
+ truncateAt: 8,
45201
+ valueStyle: {
45202
+ backgroundColor: 'transparent',
45203
+ color: 'inherit',
45204
+ padding: '0',
45205
+ borderRadius: '0',
45206
+ boxShadow: 'none',
45207
+ fontFamily: 'inherit'
45208
+ }
45209
+ },
45210
+ ReadOnly: {
45211
+ options: asyncPeople,
45212
+ value: 4,
45213
+ readOnly: true,
45214
+ showClear: false
45215
+ },
45216
+ Disabled: {
45217
+ options: asyncPeople,
45218
+ value: 4,
45219
+ disabled: true
45220
+ },
45221
+ Required: {
45222
+ options: asyncPeople,
45223
+ value: null,
45224
+ placeholder: 'Sélection obligatoire',
45225
+ required: true,
45226
+ name: 'monchamp',
45227
+ status: 'error',
45228
+ errorMessage: 'Une option doit être sélectionnée'
45229
+ },
45230
+ InfoLine: {
45231
+ options: asyncPeople,
45232
+ placeholder: 'Avec pied de panel',
45233
+ hasInfoLine: true,
45234
+ InfoLineValue: '8 utilisateurs disponibles'
44495
45235
  }
44496
45236
  };
44497
45237
 
@@ -55744,41 +56484,12 @@ var Table$1 = function Table(_ref13) {
55744
56484
  locked = _useState32[0],
55745
56485
  setLocked = _useState32[1];
55746
56486
  var effectiveEditable = lockable ? editable && !locked : editable;
55747
-
55748
- // Construit l'attributeData complet d'une ligne : une entrée par colonne
55749
- // qui déclare attributeData, disponible dès le chargement (avant toute édition).
55750
- var buildAttributeData = useCallback(function () {
55751
- var result = {};
55752
- columns.forEach(function (col) {
55753
- if (col.attributeData !== undefined) result[col.field] = col.attributeData;
55754
- });
55755
- return result;
55756
- }, [columns]);
55757
-
55758
- // Enrichit chaque ligne avec l'attributeData de toutes les colonnes.
55759
- // Comme les mises à jour font toujours { ...row, [field]: newVal },
55760
- // l'attributeData posé ici est préservé à travers toutes les éditions.
55761
- var enrichRows = useCallback(function (rows) {
55762
- var attributeData = buildAttributeData();
55763
- if (!Object.keys(attributeData).length) return rows;
55764
- return rows.map(function (row) {
55765
- return _objectSpread2(_objectSpread2({}, row), {}, {
55766
- attributeData: attributeData
55767
- });
55768
- });
55769
- }, [buildAttributeData]);
55770
- var _useState33 = useState(function () {
55771
- return enrichRows(value);
55772
- }),
56487
+ var _useState33 = useState(value),
55773
56488
  _useState34 = _slicedToArray$d(_useState33, 2),
55774
56489
  data = _useState34[0],
55775
56490
  setData = _useState34[1];
55776
- // Dépendre uniquement de `value` : enrichRows change de référence si `columns`
55777
- // est recréé par le parent à chaque rendu, ce qui re-synchroniserait la data
55778
- // et écraserait les éditions en cours.
55779
- // eslint-disable-next-line react-hooks/exhaustive-deps
55780
56491
  useEffect(function () {
55781
- setData(enrichRows(value));
56492
+ setData(value);
55782
56493
  }, [value]);
55783
56494
  var onCellChangeRef = useRef(onCellChange);
55784
56495
  useEffect(function () {
@@ -55822,8 +56533,7 @@ var Table$1 = function Table(_ref13) {
55822
56533
  var handleAddRow = useCallback(function () {
55823
56534
  // id temporaire négatif pour éviter les collisions avec les id BDD positifs
55824
56535
  var newRow = {
55825
- id: -Date.now(),
55826
- attributeData: buildAttributeData()
56536
+ id: -Date.now()
55827
56537
  };
55828
56538
  columns.forEach(function (col) {
55829
56539
  switch (col.type) {
@@ -55842,7 +56552,7 @@ var Table$1 = function Table(_ref13) {
55842
56552
  onAdd === null || onAdd === void 0 || onAdd(newRow, updated);
55843
56553
  return updated;
55844
56554
  });
55845
- }, [columns, onChange, onAdd, buildAttributeData]);
56555
+ }, [columns, onChange, onAdd]);
55846
56556
  var _useState37 = useState({}),
55847
56557
  _useState38 = _slicedToArray$d(_useState37, 2),
55848
56558
  editingRows = _useState38[0],
@@ -56966,6 +57676,7 @@ var Table$1 = function Table(_ref13) {
56966
57676
  rowData: rowData,
56967
57677
  col: col,
56968
57678
  editable: colEditable,
57679
+ isRowEditing: !!editingRows[rowData.id],
56969
57680
  onSave: function onSave(v) {
56970
57681
  var _onCellChangeRef$curr2;
56971
57682
  var enrichedFields = _defineProperty$g({}, col.field, v);
@@ -56996,7 +57707,6 @@ var Table$1 = function Table(_ref13) {
56996
57707
  newValue: v
56997
57708
  });
56998
57709
  },
56999
- isRowEditing: !!editingRows[rowData.id],
57000
57710
  renderDisplay: displayFn !== null && displayFn !== void 0 ? displayFn : function (rd) {
57001
57711
  var _rd$col$field;
57002
57712
  return (_rd$col$field = rd[col.field]) !== null && _rd$col$field !== void 0 ? _rd$col$field : '';
@@ -58160,12 +58870,7 @@ var columnsTyped = [
58160
58870
  header: 'Inscription',
58161
58871
  type: 'date',
58162
58872
  editable: true,
58163
- dbDateFormat: 'MMMM/y',
58164
- attributeData: {
58165
- 'data-value': 'bonjour',
58166
- 'data-tata': 'hello',
58167
- 'data-tab': []
58168
- }
58873
+ dbDateFormat: 'MMMM/y'
58169
58874
  }, {
58170
58875
  field: 'dateNaissance',
58171
58876
  header: 'Naissance',
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "arengibook",
3
3
  "private": false,
4
- "version": "3.1.312-main",
4
+ "version": "3.1.314-main",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",
7
7
  "exports": {