arengibook 3.1.4-datepicker → 3.1.6-datepicker

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 +92 -44
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -13257,16 +13257,13 @@ var DatePicker = function DatePicker(_ref) {
13257
13257
  var skipYearReposition = useRef(false);
13258
13258
  var inputRef = useRef(null);
13259
13259
  var calendarRef = useRef(null);
13260
- var _useState13 = useState(null),
13260
+ var _useState13 = useState(false),
13261
13261
  _useState14 = _slicedToArray$9(_useState13, 2);
13262
13262
  _useState14[0];
13263
13263
  _useState14[1];
13264
- var _useState15 = useState(false),
13265
- _useState16 = _slicedToArray$9(_useState15, 2),
13266
- isScrolling = _useState16[0];
13267
- _useState16[1];
13268
- var wheelCooldown = false;
13264
+ var wheelCooldown = useRef(false);
13269
13265
  var scrollListenersRef = useRef([]);
13266
+ var panelWheelListenerRef = useRef(null);
13270
13267
  var panelVisibleRef = useRef(false);
13271
13268
  useEffect(function () {
13272
13269
  setStory(datePickerStorie(dateFormat));
@@ -13400,17 +13397,20 @@ var DatePicker = function DatePicker(_ref) {
13400
13397
  }
13401
13398
  }, [valeur]);
13402
13399
  addLocale(localLanguage, LOCALES[localLanguage]);
13400
+ var changeYear = function changeYear(delta) {
13401
+ setViewDate(function (prev) {
13402
+ var base = prev || new Date();
13403
+ var next = new Date(base.getTime());
13404
+ next.setFullYear(next.getFullYear() + delta);
13405
+ return next;
13406
+ });
13407
+ };
13403
13408
  var headerTemplate = function headerTemplate() {
13404
13409
  var current = viewDate || new Date();
13405
13410
  var monthIndex = current.getMonth();
13406
13411
  var year = current.getFullYear();
13407
13412
  var localeConfig = LOCALES[localLanguage] || {};
13408
13413
  var monthNames = localeConfig.monthNames || ['Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre'];
13409
- Array.from({
13410
- length: 21
13411
- }, function (_, i) {
13412
- return year - 10 + i;
13413
- });
13414
13414
  var changeMonth = function changeMonth(delta) {
13415
13415
  setViewDate(function (prev) {
13416
13416
  var base = prev || new Date();
@@ -13419,40 +13419,9 @@ var DatePicker = function DatePicker(_ref) {
13419
13419
  return next;
13420
13420
  });
13421
13421
  };
13422
- var changeYear = function changeYear(delta) {
13423
- setViewDate(function (prev) {
13424
- var base = prev || new Date();
13425
- var next = new Date(base.getTime());
13426
- next.setFullYear(next.getFullYear() + delta);
13427
- return next;
13428
- });
13429
- };
13430
13422
  var handleArrowMouseDown = function handleArrowMouseDown(delta) {
13431
- changeYear(delta); // On change l'année de ±1, pas de ±2
13423
+ changeYear(delta);
13432
13424
  };
13433
- useEffect(function () {
13434
- var yearContainerSingle = document.querySelector('.dp-year-container');
13435
- var handleWheel = function handleWheel(e) {
13436
- e.preventDefault();
13437
- if (wheelCooldown) return;
13438
- var delta = Math.sign(e.deltaY);
13439
- changeYear(delta);
13440
- wheelCooldown = true;
13441
- setTimeout(function () {
13442
- wheelCooldown = false;
13443
- }, 120); // durée idéale après tests
13444
- };
13445
- if (yearContainerSingle) {
13446
- yearContainerSingle.addEventListener('wheel', handleWheel, {
13447
- passive: false
13448
- });
13449
- }
13450
- return function () {
13451
- if (yearContainerSingle) {
13452
- yearContainerSingle.removeEventListener('wheel', handleWheel);
13453
- }
13454
- };
13455
- }, [changeYear, isScrolling]);
13456
13425
  var setMonthFromList = function setMonthFromList(index) {
13457
13426
  setViewDate(function (prev) {
13458
13427
  var base = prev || new Date();
@@ -13735,11 +13704,55 @@ var DatePicker = function DatePicker(_ref) {
13735
13704
  var _calendarRef$current2;
13736
13705
  var currentOverlay = (_calendarRef$current2 = calendarRef.current) === null || _calendarRef$current2 === void 0 ? void 0 : _calendarRef$current2.getOverlay();
13737
13706
  if (!currentOverlay) return;
13707
+
13708
+ // Attache un listener wheel sur tout le panel overlay.
13709
+ // En mode mois/année ou année seule (.dp-monthyear-header présent),
13710
+ // bloque toute propagation du wheel vers les conteneurs parents
13711
+ // (popups, pages) et délègue le scroll d'années si la cible est
13712
+ // dans .dp-year-container.
13713
+ var panelWheelHandler = function panelWheelHandler(e) {
13714
+ var isMonthYearMode = currentOverlay.querySelector('.dp-monthyear-header');
13715
+ if (!isMonthYearMode) return;
13716
+ e.preventDefault();
13717
+ e.stopPropagation();
13718
+ var yearContainer = currentOverlay.querySelector('.dp-year-container');
13719
+ if (yearContainer && yearContainer.contains(e.target)) {
13720
+ if (wheelCooldown.current) return;
13721
+ changeYear(Math.sign(e.deltaY));
13722
+ wheelCooldown.current = true;
13723
+ setTimeout(function () {
13724
+ wheelCooldown.current = false;
13725
+ }, 120);
13726
+ }
13727
+ };
13728
+ currentOverlay.addEventListener('wheel', panelWheelHandler, {
13729
+ passive: false
13730
+ });
13731
+ panelWheelListenerRef.current = {
13732
+ overlay: currentOverlay,
13733
+ handler: panelWheelHandler
13734
+ };
13738
13735
  var customContent = currentOverlay.querySelector('.dp-monthyear-header');
13739
13736
  if (customContent) {
13740
- currentOverlay.style.minHeight = customContent.offsetHeight + 'px';
13737
+ // Ajout de 80px pour simuler une fenêtre plus haute aux yeux de
13738
+ // DomHandler.absolutePosition, ce qui abaisse le seuil de bascule
13739
+ // vers le haut. Cela compense les boutons Annuler/Valider qui sont
13740
+ // masqués en mode month mais occupent de l'espace hors viewport.
13741
+ currentOverlay.style.minHeight = customContent.offsetHeight + 80 + 'px';
13741
13742
  }
13743
+ var extraHeight = 80;
13742
13744
  repositionPanel();
13745
+ if (customContent) {
13746
+ currentOverlay.style.minHeight = '';
13747
+ var input = inputRef.current;
13748
+ if (input) {
13749
+ var overlayTop = parseFloat(currentOverlay.style.top) || 0;
13750
+ var inputTop = input.getBoundingClientRect().top + window.scrollY;
13751
+ if (overlayTop < inputTop) {
13752
+ currentOverlay.style.top = overlayTop + extraHeight + 'px';
13753
+ }
13754
+ }
13755
+ }
13743
13756
  setPanelReady(true);
13744
13757
  }, 0);
13745
13758
  };
@@ -13747,6 +13760,13 @@ var DatePicker = function DatePicker(_ref) {
13747
13760
  var _calendarRef$current3;
13748
13761
  panelVisibleRef.current = false;
13749
13762
  cleanupScrollListeners();
13763
+ if (panelWheelListenerRef.current) {
13764
+ var _panelWheelListenerRe = panelWheelListenerRef.current,
13765
+ _overlay = _panelWheelListenerRe.overlay,
13766
+ handler = _panelWheelListenerRe.handler;
13767
+ _overlay.removeEventListener('wheel', handler);
13768
+ panelWheelListenerRef.current = null;
13769
+ }
13750
13770
  var overlay = (_calendarRef$current3 = calendarRef.current) === null || _calendarRef$current3 === void 0 ? void 0 : _calendarRef$current3.getOverlay();
13751
13771
  if (overlay) {
13752
13772
  overlay.style.minHeight = '';
@@ -13758,6 +13778,34 @@ var DatePicker = function DatePicker(_ref) {
13758
13778
  cleanupScrollListeners();
13759
13779
  };
13760
13780
  }, []);
13781
+
13782
+ // Reposition quand on bascule en mode monthYear depuis le mode date (panel déjà ouvert).
13783
+ // Même logique que dans handleShow : gonfle minHeight, repositionne, puis corrige le top.
13784
+ useEffect(function () {
13785
+ if (mode !== 'monthYear' || !panelVisibleRef.current) return;
13786
+ var extraHeight = 80;
13787
+ setTimeout(function () {
13788
+ var _calendarRef$current4;
13789
+ var overlay = (_calendarRef$current4 = calendarRef.current) === null || _calendarRef$current4 === void 0 ? void 0 : _calendarRef$current4.getOverlay();
13790
+ if (!overlay) return;
13791
+ var customContent = overlay.querySelector('.dp-monthyear-header');
13792
+ if (customContent) {
13793
+ overlay.style.minHeight = customContent.offsetHeight + extraHeight + 'px';
13794
+ }
13795
+ repositionPanel();
13796
+ if (customContent) {
13797
+ overlay.style.minHeight = '';
13798
+ var input = inputRef.current;
13799
+ if (input) {
13800
+ var overlayTop = parseFloat(overlay.style.top) || 0;
13801
+ var inputTop = input.getBoundingClientRect().top + window.scrollY;
13802
+ if (overlayTop < inputTop) {
13803
+ overlay.style.top = overlayTop + extraHeight + 'px';
13804
+ }
13805
+ }
13806
+ }
13807
+ }, 0);
13808
+ }, [mode]);
13761
13809
  var panelClassName = "datepickerbook" + (mode === "monthYear" ? " dp-monthyear-mode" : "") + (story === "year" ? " dp-year-only" : "") + (panelReady ? " dp-ready" : "");
13762
13810
  return /*#__PURE__*/React__default.createElement("div", {
13763
13811
  className: fullWidth ? "datepicker-fullwidth flex flex-col gap-1" : "flex flex-col gap-1"
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "arengibook",
3
3
  "private": false,
4
- "version": "3.1.4-datepicker",
4
+ "version": "3.1.6-datepicker",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",
7
7
  "exports": {