From d36d5334e59783ffd1196f474ac84e1fd442baab Mon Sep 17 00:00:00 2001 From: AnnMarueW Date: Wed, 4 Feb 2026 11:43:12 -0800 Subject: [PATCH 1/3] Handle Moment Y year token in format conversion --- components/dash-core-components/src/utils/calendar/helpers.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/components/dash-core-components/src/utils/calendar/helpers.ts b/components/dash-core-components/src/utils/calendar/helpers.ts index 82b085eb70..7fb7ea89d9 100644 --- a/components/dash-core-components/src/utils/calendar/helpers.ts +++ b/components/dash-core-components/src/utils/calendar/helpers.ts @@ -35,6 +35,7 @@ function convertFormatTokens(momentFormat: string): string { .replace(/Do/g, 'do') // Ordinal day: 1st, 2nd, 3rd .replace(/YYYY/g, 'yyyy') // 4-digit year .replace(/YY/g, 'yy') // 2-digit year + .replace(/Y/g, 'y') // Year (numeric, variable length) .replace(/DD/g, 'dd') // Day of month with leading zero .replace(/D/g, 'd') // Day of month .replace(/X/g, 't'); // Unix timestamp (seconds) From b493cabfaf02501ea7a8e7d5eab802c7b3b7e8aa Mon Sep 17 00:00:00 2001 From: AnnMarueW Date: Wed, 4 Feb 2026 11:48:46 -0800 Subject: [PATCH 2/3] Fix hover state on empty datepicker cells --- .../dash-core-components/src/components/css/datepickers.css | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/components/dash-core-components/src/components/css/datepickers.css b/components/dash-core-components/src/components/css/datepickers.css index 45f89ecc01..3ba6842ce5 100644 --- a/components/dash-core-components/src/components/css/datepickers.css +++ b/components/dash-core-components/src/components/css/datepickers.css @@ -298,3 +298,8 @@ width: 20px; height: 20px; } + +.dash-datepicker-calendar-padding { + pointer-events: none; + background: transparent; +} From b918836bfb009fa31e94815f3d9b2af349014f06 Mon Sep 17 00:00:00 2001 From: AnnMarueW Date: Fri, 13 Feb 2026 09:20:23 -0800 Subject: [PATCH 3/3] Fixed some tests --- .../tests/integration/calendar/test_portal.py | 11 +++++++++-- .../tests/integration/misc/test_popover_visibility.py | 6 +++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/components/dash-core-components/tests/integration/calendar/test_portal.py b/components/dash-core-components/tests/integration/calendar/test_portal.py index fb629550ae..56cb099e3c 100644 --- a/components/dash-core-components/tests/integration/calendar/test_portal.py +++ b/components/dash-core-components/tests/integration/calendar/test_portal.py @@ -22,7 +22,12 @@ def click_everything_in_datepicker(datepicker_id, dash_dcc): popover = dash_dcc.find_element(".dash-datepicker-content") interactive_elements = [] - interactive_elements.extend(popover.find_elements(By.CSS_SELECTOR, "td")) + interactive_elements.extend( + popover.find_elements( + By.CSS_SELECTOR, "td:not(.dash-datepicker-calendar-padding)" + ) + ) + interactive_elements.extend(popover.find_elements(By.CSS_SELECTOR, "input")) buttons = reversed( @@ -36,7 +41,9 @@ def click_everything_in_datepicker(datepicker_id, dash_dcc): sleep(0.05) except Exception as e: print(e) - assert not e, f"Unable to click on {el.tag_name})" + assert ( + not e + ), f"Unable to click on {el.tag_name} {el.get_attribute('class')})" def test_dppt000_datepicker_single_default(dash_dcc): diff --git a/components/dash-core-components/tests/integration/misc/test_popover_visibility.py b/components/dash-core-components/tests/integration/misc/test_popover_visibility.py index 34b310f197..3857921545 100644 --- a/components/dash-core-components/tests/integration/misc/test_popover_visibility.py +++ b/components/dash-core-components/tests/integration/misc/test_popover_visibility.py @@ -19,7 +19,11 @@ def click_everything_in_datepicker(datepicker_id, dash_dcc): popover = dash_dcc.find_element(".dash-datepicker-content") interactive_elements = [] - interactive_elements.extend(popover.find_elements(By.CSS_SELECTOR, "td")) + interactive_elements.extend( + popover.find_elements( + By.CSS_SELECTOR, "td:not(.dash-datepicker-calendar-padding)" + ) + ) interactive_elements.extend(popover.find_elements(By.CSS_SELECTOR, "button")) interactive_elements.extend(popover.find_elements(By.CSS_SELECTOR, "input")) for el in interactive_elements: