Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
317 commits
Select commit Hold shift + click to select a range
9a94315
rc version bump
KoolADE85 Sep 22, 2025
574d550
Improve test reliability
KoolADE85 Sep 22, 2025
31807a1
Merge pull request #3447 from plotly/release/v4.0.0rc1
KoolADE85 Sep 22, 2025
09e5504
fix bug and add test for slider steps
KoolADE85 Sep 23, 2025
9166dad
support localizations in dropdown component
KoolADE85 Sep 24, 2025
47ce558
Fix responsive option labels in dropdown
KoolADE85 Sep 24, 2025
a9b6683
Remove min-width constraint on range slider input
jasonpnp Sep 24, 2025
e8b7322
Fix slider padding and range input styling
jasonpnp Sep 24, 2025
d512910
Add fallback values to CSS variables
jasonpnp Sep 24, 2025
bcf9b10
Fix accessibility issues in dropdown
KoolADE85 Sep 24, 2025
0b77015
Update changelog
KoolADE85 Sep 24, 2025
e16cec0
Fix input focus state
KoolADE85 Sep 25, 2025
8438007
refactor checklist portion of dropdown into its own optionlist; imple…
KoolADE85 Sep 26, 2025
c5be31f
Remove duplicated code and give some types more generic names
KoolADE85 Sep 26, 2025
d689206
Fix missing persistence
KoolADE85 Sep 26, 2025
88391b4
fix test
KoolADE85 Sep 26, 2025
628966f
Implement RadioItems and condense types
KoolADE85 Sep 26, 2025
7c826eb
code review feedback
KoolADE85 Sep 29, 2025
6177cff
Merge pull request #3453 from plotly/feature/dcc-refactor-checklist
KoolADE85 Sep 29, 2025
8525f67
Merge branch 'v4' into v4-styling
KoolADE85 Sep 29, 2025
5a649c4
empty commit for ci
KoolADE85 Sep 29, 2025
acde803
fix tests that started failing due to adjusted slider input widths
KoolADE85 Sep 29, 2025
ff61bcd
Revert "Add fallback values to CSS variables"
KoolADE85 Sep 29, 2025
e9423f6
Merge branch 'v4' into bugfix/dcc-redesign-bugfixes
KoolADE85 Sep 29, 2025
47da621
Modify multi=False dropdowns to show selected item at the top
KoolADE85 Oct 1, 2025
043cb5a
fix further accessibility issues with inputs & dropdown
KoolADE85 Oct 1, 2025
ab0f0b9
move slider className to top of component
KoolADE85 Oct 2, 2025
4720ce8
fix tests
KoolADE85 Oct 2, 2025
7f5c5c3
Add CSS variables for shadows
KoolADE85 Oct 2, 2025
292ece8
rename localizations to labels
KoolADE85 Oct 2, 2025
a2c28b7
rename test spec
KoolADE85 Oct 2, 2025
efe899b
Merge branch 'v4' into feature/dcc-refactor-textarea-tooltip
KoolADE85 Oct 2, 2025
24d08bb
Merge branch 'bugfix/dcc-redesign-bugfixes' into feature/dcc-refactor…
KoolADE85 Oct 2, 2025
5716339
Update components/dash-core-components/src/types.ts
KoolADE85 Oct 3, 2025
e0e3a60
refactor tooltip
KoolADE85 Oct 3, 2025
bd7ab02
Merge pull request #3448 from plotly/v4-styling
KoolADE85 Oct 3, 2025
62c7191
Merge branch 'v4' into bugfix/dcc-redesign-bugfixes
KoolADE85 Oct 3, 2025
50ed7c4
rename prop in changelog
KoolADE85 Oct 3, 2025
c504929
empty commit for ci
KoolADE85 Oct 3, 2025
afb1f5c
fix flaky test
KoolADE85 Oct 3, 2025
391f0c8
Merge pull request #3459 from plotly/bugfix/dcc-redesign-bugfixes
KoolADE85 Oct 3, 2025
896322f
Refactor Loading component as typescript
KoolADE85 Oct 3, 2025
6bb0f4a
Merge branch 'v4' into feature/dcc-refactor-textarea-tooltip
KoolADE85 Oct 3, 2025
3a8942e
Merge branch 'v4' into feature/dcc-redesign-dropdown-sorting
KoolADE85 Oct 3, 2025
7697442
fix test
KoolADE85 Oct 3, 2025
b6f6745
make children optional
KoolADE85 Oct 3, 2025
0deace3
empty commit for ci
KoolADE85 Oct 3, 2025
f90b1f5
fix test reliability
KoolADE85 Oct 3, 2025
7eebb4e
Merge pull request #3469 from plotly/feature/dcc-redesign-dropdown-so…
KoolADE85 Oct 6, 2025
5d40e68
Merge branch 'v4' into feature/dcc-refactor-textarea-tooltip
KoolADE85 Oct 6, 2025
37ba4d9
Merge branch 'v4' into feature/dcc-refactor-loading
KoolADE85 Oct 6, 2025
2a11585
ensure dropdown popover renders within the Dash app
KoolADE85 Oct 6, 2025
58847e0
Fix edge cases around text input in slider inputs
KoolADE85 Oct 6, 2025
427723d
Refactor Tabs component
KoolADE85 Oct 7, 2025
2dc4dfd
empty commit for ci
KoolADE85 Oct 7, 2025
4b66809
Merge pull request #3467 from plotly/feature/dcc-refactor-loading
KoolADE85 Oct 7, 2025
07542a7
Merge branch 'v4' into feature/dcc-refactor-textarea-tooltip
KoolADE85 Oct 7, 2025
e8ff7aa
Remove "string" as possible option for some props
KoolADE85 Oct 7, 2025
df1fd9d
Merge remote-tracking branch 'refs/remotes/origin/feature/dcc-refacto…
KoolADE85 Oct 7, 2025
7b4d1bc
Add support for `reverse` in sliders
KoolADE85 Oct 8, 2025
142e22a
Merge branch 'bugfix/dcc-redesign-bugfixes' into v4-merge
KoolADE85 Oct 8, 2025
54a895a
version bump
KoolADE85 Oct 8, 2025
e17c3ca
Fix issue when dropdown is placed in flexbox
KoolADE85 Oct 8, 2025
bfe970b
Merge branch 'v4' into bugfix/dcc-redesign-bugfixes
KoolADE85 Oct 8, 2025
504c65d
Merge pull request #3472 from plotly/bugfix/dcc-redesign-bugfixes
KoolADE85 Oct 9, 2025
3c99ae7
Merge branch 'v4' into feature/dcc-refactor-textarea-tooltip
KoolADE85 Oct 9, 2025
0fbd86a
Refactor Tab component
KoolADE85 Oct 10, 2025
b8b7e72
empty commit for ci
KoolADE85 Oct 10, 2025
b189e2c
empty commit for ci
KoolADE85 Oct 10, 2025
87b396e
Merge pull request #3468 from plotly/feature/dcc-refactor-textarea-to…
KoolADE85 Oct 10, 2025
fd60d16
Merge branch 'v4' into feature/dcc-refactor-tabs
KoolADE85 Oct 10, 2025
850cb36
improve typing
KoolADE85 Oct 10, 2025
8bf816c
Merge branch 'v4' into v4.0.0rc2
KoolADE85 Oct 10, 2025
b5c4430
add changelog notes
KoolADE85 Oct 10, 2025
a301989
Merge pull request #3477 from plotly/v4.0.0rc2
KoolADE85 Oct 10, 2025
7a25fa9
feat: Add folder upload support to dcc.Upload component
LeticiaBN Oct 14, 2025
e71fe27
Merge branch 'v4' into feature/dcc-refactor-tabs
KoolADE85 Oct 16, 2025
e8800d6
Fix issue with auto-expanding flex tabs
KoolADE85 Oct 16, 2025
5ff94d2
fix typescript error & css
KoolADE85 Oct 17, 2025
67cc824
update changelog
KoolADE85 Oct 17, 2025
082a4c1
Remove useless string replace
KoolADE85 Oct 17, 2025
5883399
Revert "Remove useless string replace"
KoolADE85 Oct 17, 2025
bb74ebc
Remove useless string replace
KoolADE85 Oct 17, 2025
0fab9a1
fix typescript testing issue
KoolADE85 Oct 17, 2025
6cefd88
a different approach for TS compile issues
KoolADE85 Oct 17, 2025
577158a
fix browser size in tests
KoolADE85 Oct 17, 2025
dd6c4af
memoize classnames
KoolADE85 Oct 20, 2025
42a38ac
Merge branch 'dev' into v4
KoolADE85 Oct 20, 2025
a78763a
Merge branch 'v4' into feature/dcc-refactor-tabs
KoolADE85 Oct 20, 2025
2075e5b
Refactor how classNameis composed in tabs
KoolADE85 Oct 23, 2025
8bbd5f9
Merge pull request #3484 from plotly/feature/dcc-refactor-tabs
KoolADE85 Oct 24, 2025
ef1063c
Implement DatePickerSingle
KoolADE85 Oct 17, 2025
bf30769
Implement DatePickerRange
KoolADE85 Nov 3, 2025
eeaea3c
Code cleanup
KoolADE85 Nov 4, 2025
ecf7331
Implement focus management
KoolADE85 Nov 6, 2025
b4e33ab
Merge branch 'v4' into feature/dcc-refactor-datepicker
KoolADE85 Nov 7, 2025
bedc7e9
Merge remote-tracking branch 'origin' into feature/dcc-refactor-datep…
KoolADE85 Nov 7, 2025
7261852
Merge branch 'dev' into v4
KoolADE85 Nov 7, 2025
1462ce7
Merge branch 'v4' into feature/dcc-refactor-datepicker
KoolADE85 Nov 7, 2025
75fd1fe
Self review cleanup
KoolADE85 Nov 7, 2025
5593786
Remove old react.js component
KoolADE85 Nov 7, 2025
6088094
empty commit for ci
KoolADE85 Nov 7, 2025
ec6efd1
fix webpack optimization error due to import
KoolADE85 Nov 7, 2025
f2512b9
feat: Implement folder upload with multiple=True (addresses review fe…
LeticiaBN Nov 9, 2025
8d77e5f
Merge branch 'dev' into feat/add-folder-upload-support
LeticiaBN Nov 9, 2025
1a041f5
Merge remote-tracking branch 'origin/dev' into feat/add-folder-upload…
LeticiaBN Nov 9, 2025
2004c71
style: Fix linting issues with black formatter
LeticiaBN Nov 9, 2025
a4d0d09
Fix end_date persistence bug
KoolADE85 Nov 10, 2025
ccf27a0
fix flaky test
KoolADE85 Nov 10, 2025
e11a33d
css style fixes and replace useEffect
KoolADE85 Nov 13, 2025
25ffeb3
replace moment.js with date-fns
KoolADE85 Nov 17, 2025
79f120d
organize imports
KoolADE85 Nov 17, 2025
bbcedf1
Fix bug where too many marks could be rendered on slider
KoolADE85 Nov 18, 2025
2ec6d1a
Add className and styling for slider markers that fall outside the se…
KoolADE85 Nov 18, 2025
4c94bd4
empty commit for ci
KoolADE85 Nov 18, 2025
7891aa4
Remove hard-coded commas from selected value
KoolADE85 Nov 18, 2025
ca654e4
prevent dropdown height from exceeding viewport height
KoolADE85 Nov 18, 2025
baff046
wrap checkboxes in a <span> and make them respond to Enter key
KoolADE85 Nov 18, 2025
d973776
empty commit for ci
KoolADE85 Nov 18, 2025
6d08b99
remove set_trace
KoolADE85 Nov 18, 2025
1760ae8
support localization in date-fns implementation
KoolADE85 Nov 19, 2025
ab88a95
Fix CI
KoolADE85 Nov 20, 2025
7991ee6
Merge branch 'dev' into v4
KoolADE85 Nov 20, 2025
7c11689
Merge branch 'v4' into feature/dcc-refactor-datepicker
KoolADE85 Nov 20, 2025
80c7cae
fix build error introduced by merge
KoolADE85 Nov 20, 2025
8d6da89
Merge branch 'v4' into feature/dcc-refactor-datepicker
KoolADE85 Nov 20, 2025
647f427
fix build error introduced by merge
KoolADE85 Nov 20, 2025
7205f1d
fix build error introduced by merge
KoolADE85 Nov 20, 2025
f86ac93
fix build error introduced by merge
KoolADE85 Nov 20, 2025
26d7e45
Merge branch 'v4' into feature/dcc-refactor-datepicker
KoolADE85 Nov 20, 2025
cd54ead
fix build error introduced by merge
KoolADE85 Nov 20, 2025
c43cb2a
Merge branch 'v4' into bugfix/slider-bugfixes
KoolADE85 Nov 20, 2025
20828e7
Merge branch 'v4' into bugfix/dropdown-bugfixes
KoolADE85 Nov 20, 2025
dd7b06b
fix test
KoolADE85 Nov 20, 2025
0ab715f
fix test
KoolADE85 Nov 20, 2025
e692726
Further mark density bugfixes
KoolADE85 Nov 20, 2025
f9f6763
fix tests
KoolADE85 Nov 20, 2025
6d1c5e4
attempt to fix flaky test
KoolADE85 Nov 20, 2025
35b6065
css update
KoolADE85 Nov 24, 2025
d475f28
Merge pull request #3515 from plotly/bugfix/slider-bugfixes
KoolADE85 Nov 24, 2025
2e9f9f0
Merge branch 'v4' into bugfix/dropdown-bugfixes
KoolADE85 Nov 24, 2025
cf1669f
Merge pull request #3516 from plotly/bugfix/dropdown-bugfixes
KoolADE85 Nov 24, 2025
c6e6db1
Merge branch 'v4' into feature/dcc-refactor-datepicker
KoolADE85 Nov 24, 2025
d05bd8d
Make selected text colour consistent across components
KoolADE85 Nov 24, 2025
7b42d70
bump version
KoolADE85 Nov 25, 2025
4cd08ce
Fix bug that prevented dates from being updated externally
KoolADE85 Nov 25, 2025
90af5ae
Merge branch 'feature/dcc-refactor-datepicker' into release/dcc-rc3
KoolADE85 Nov 26, 2025
2c7aa93
update changelog
KoolADE85 Nov 26, 2025
2b87cb1
Merge pull request #3495 from plotly/feature/dcc-refactor-datepicker
KoolADE85 Nov 27, 2025
d0720a0
Merge branch 'v4' into release/dcc-rc3
KoolADE85 Nov 27, 2025
7dd9b34
Merge branch 'dev' into v4
KoolADE85 Nov 27, 2025
985d27f
Merge branch 'v4' into release/dcc-rc3
KoolADE85 Nov 27, 2025
cfdad70
update package-lock
KoolADE85 Nov 27, 2025
0e2b59a
Merge pull request #3527 from plotly/release/dcc-rc3
KoolADE85 Nov 27, 2025
07c4b12
add missing version bump
KoolADE85 Nov 27, 2025
6497a63
Make targetable tooltips interactive
AnnMarieW Nov 30, 2025
aaf54a1
Make targetable tooltips interactive
AnnMarieW Nov 30, 2025
0a15809
Fix Radix popovers not positioned correctly in certain DDK or Embedde…
KoolADE85 Dec 1, 2025
4ca5936
Fix default autoComplete in Input component; move type info into `typ…
KoolADE85 Dec 2, 2025
4c77e12
fix jest tests locally
KoolADE85 Dec 2, 2025
2dd3531
Change default width of Input to be 100%
KoolADE85 Dec 2, 2025
6949a14
Simplify responsive & resizing inputs in sliders
KoolADE85 Dec 2, 2025
492e70f
Fix hardcoded colours used in tabs
KoolADE85 Dec 2, 2025
566107b
Fix logic issue found in tests
KoolADE85 Dec 2, 2025
e15fd5f
Bump to rc4
KoolADE85 Dec 3, 2025
c0729a2
Fix CSS selector could incorrectly apply to dropdown triggers
KoolADE85 Dec 3, 2025
36d4286
Restore missing docstring for `id` prop in all components
KoolADE85 Dec 3, 2025
66cfbe0
Remove calendar icon from datepickers
KoolADE85 Dec 3, 2025
1597ee6
Fix clearable button does not call setProps
KoolADE85 Dec 3, 2025
b7839e6
Replace checkboxes with radio items for single-select dropdowns
KoolADE85 Dec 3, 2025
40ed846
fix datepicker start_date too long
KoolADE85 Dec 3, 2025
eb1fb5b
fix focus bug when selecting with keyboard, and add integration test …
KoolADE85 Dec 3, 2025
44be432
Support Enter key in single-select dropdowns (even though radio items…
KoolADE85 Dec 3, 2025
ca3d3cd
empty commit for ci
KoolADE85 Dec 4, 2025
6d48e26
Add dcc.Button
KoolADE85 Dec 4, 2025
c00509d
Add test for button
KoolADE85 Dec 4, 2025
cc21d09
Merge pull request #3532 from plotly/bugfix/rc3-feedback
KoolADE85 Dec 4, 2025
42a76df
Add changelog entry
KoolADE85 Dec 4, 2025
098ea68
Merge pull request #3536 from plotly/feature/dcc-button
KoolADE85 Dec 4, 2025
49fde0d
Merge branch 'v4' into release/4.0.0rc4
KoolADE85 Dec 4, 2025
ded313d
update changelog
KoolADE85 Dec 4, 2025
d25052e
Merge pull request #3537 from plotly/release/4.0.0rc4
KoolADE85 Dec 5, 2025
8947b1f
feat: Add enable_folder_selection prop to Upload component
LeticiaBN Dec 7, 2025
79ddc16
Ensure all components inherit their font and size from the page
KoolADE85 Dec 10, 2025
39388ad
Fix increment/decrement buttons could break on initial render
KoolADE85 Dec 10, 2025
6806977
Fix vertical align on checkboxes and radio items
KoolADE85 Dec 10, 2025
fb16d27
Remove radio items from single-select dropdowns while keeping them in…
KoolADE85 Dec 10, 2025
a53be61
Fix font, size, and colour issues in dropdown
KoolADE85 Dec 10, 2025
adc06e7
Inherit font size in datepicker input
KoolADE85 Dec 10, 2025
d8a3ab4
Ensure focus states have an outline in addition to a border
KoolADE85 Dec 11, 2025
4b3e367
Tweak width & visibility of slider inputs at various font sizes & sli…
KoolADE85 Dec 11, 2025
bdc971e
Fix wcag color contrast on weak text; apply this to dropdown
KoolADE85 Dec 11, 2025
2f8a738
Fix keyboard quirks in certain edge cases with dropdown component
KoolADE85 Dec 11, 2025
047432e
Ensure datepicker focuses on calendar when opened; use fixed width fo…
KoolADE85 Dec 15, 2025
0bcb008
change default calendar focus when using keyboard; remove border radi…
KoolADE85 Dec 15, 2025
0c4eb51
improved calculation of how to display calendar months
KoolADE85 Dec 15, 2025
20378e4
Fix test expectation
KoolADE85 Dec 15, 2025
3dc7097
Merge branch 'bugfix/rc4-feedback' into bugfix/datepicker-feedback
KoolADE85 Dec 15, 2025
6c40591
Merge pull request #3543 from plotly/bugfix/rc4-feedback
KoolADE85 Dec 15, 2025
e895020
Merge branch 'v4' into bugfix/datepicker-feedback
KoolADE85 Dec 15, 2025
670cd51
Merge pull request #3544 from plotly/bugfix/datepicker-feedback
KoolADE85 Dec 16, 2025
c39a718
Update integration tests for enable_folder_selection API
LeticiaBN Dec 16, 2025
ca5515e
Merge branch 'v4' into feat/add-folder-upload-support
KoolADE85 Dec 16, 2025
cc8726a
Bump version to rc5
KoolADE85 Dec 16, 2025
9e5d7c5
Merge pull request #3481 from lfelipediniz/feat/add-folder-upload-sup…
KoolADE85 Dec 16, 2025
4b1ea8e
Merge branch 'v4' into release/4.0.0rc5
KoolADE85 Dec 16, 2025
3fc9906
format test file with black
KoolADE85 Dec 16, 2025
d76d25b
Use CSS variable for background color
KoolADE85 Dec 17, 2025
feab86a
Merge branch 'v4' into v4-update-tooltip
AnnMarieW Dec 17, 2025
58d63de
Prevent popovers from rendering clipped outside of Dash app (embedded…
KoolADE85 Dec 17, 2025
a4da2fc
Merge pull request #3530 from AnnMarieW/v4-update-tooltip
KoolADE85 Dec 17, 2025
b2594be
Merge pull request #3547 from plotly/release/4.0.0rc5
KoolADE85 Dec 17, 2025
92e24fa
Restore radix default fixed position in popovers
KoolADE85 Dec 22, 2025
681a379
Contain scrolling within dropdown popover
KoolADE85 Dec 22, 2025
95f098f
Fix floating point precision bug in input steppers
KoolADE85 Dec 22, 2025
c9dbad0
Add missing implementation for `with_portal` and `with_full_screen_po…
KoolADE85 Dec 30, 2025
eca3197
Fix test
KoolADE85 Dec 30, 2025
ff87463
Merge branch 'bugfix/rc5-feedback' into feature/datepicker-portals
KoolADE85 Dec 30, 2025
b56ea72
Fix test
KoolADE85 Dec 30, 2025
5f3f08d
Merge branch 'bugfix/rc5-feedback' into feature/datepicker-portals
KoolADE85 Dec 30, 2025
5f76332
Fix test
KoolADE85 Dec 30, 2025
384787a
Merge branch 'bugfix/rc5-feedback' into feature/datepicker-portals
KoolADE85 Dec 30, 2025
d51ac09
Merge pull request #3553 from plotly/feature/datepicker-portals
KoolADE85 Jan 6, 2026
6cb27f4
Merge pull request #3554 from plotly/bugfix/rc5-feedback
KoolADE85 Jan 6, 2026
6ebe074
bump version
KoolADE85 Jan 6, 2026
84cd2aa
Remove space in css variable (which broke the CSS variable link)
emilhe Jan 7, 2026
f045832
Fix CSS for inputs on disabled sliders
KoolADE85 Jan 7, 2026
56db2f8
Fix incorrect CSS variable name
KoolADE85 Jan 7, 2026
3b584ac
Merge pull request #3562 from emilhe/v4_fix_input_stepper_css
KoolADE85 Jan 12, 2026
58428cb
Merge branch 'v4' into release/4.0.0rc6
KoolADE85 Jan 12, 2026
60c53e1
empty commit for ci
KoolADE85 Jan 12, 2026
7cc17cf
Merge pull request #3561 from plotly/release/4.0.0rc6
KoolADE85 Jan 12, 2026
2cde066
Fix CHANGELOG entry
KoolADE85 Jan 16, 2026
44f1766
Add prop to disable inputs on sliders
KoolADE85 Jan 16, 2026
3b3ff44
Improve styles for calendar dates outside the active month
KoolADE85 Jan 16, 2026
2ec81cc
add changelog entry
KoolADE85 Jan 16, 2026
ba52734
Change calendar portals to render at root of page
KoolADE85 Jan 20, 2026
9e3a7a9
empty commit for ci
KoolADE85 Jan 21, 2026
9050cf0
empty commit for ci
KoolADE85 Jan 21, 2026
8406cf9
empty commit for ci
KoolADE85 Jan 21, 2026
0a61954
fix sporadically failing test
KoolADE85 Jan 21, 2026
8027fd3
Fix css capture for portals in range datepickers
KoolADE85 Jan 26, 2026
df7fb1b
Merge remote-tracking branch 'origin' into v4-merge-dev
KoolADE85 Jan 27, 2026
5b9beeb
Merge branch 'v4' into bugfix/rc6-feedback
KoolADE85 Jan 27, 2026
674624b
Merge pull request #3571 from plotly/bugfix/rc6-feedback
KoolADE85 Jan 27, 2026
0847726
Remove RC tag and update changelog
KoolADE85 Jan 27, 2026
3b661bc
add release date to changelog
KoolADE85 Feb 3, 2026
5620664
Merge pull request #3591 from plotly/release/v4
KoolADE85 Feb 3, 2026
48ef3e0
Fix package-lock.json
KoolADE85 Feb 3, 2026
91017b8
remove unused css rule
KoolADE85 Feb 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ orbs:
percy: percy/agent@0.1.3
browser-tools: circleci/browser-tools@1.5.1


jobs:
artifacts:
docker:
Expand Down Expand Up @@ -158,8 +157,8 @@ jobs:
python -m venv venv && . venv/Scripts/activate
pip install --no-cache-dir --upgrade -e .[ci,dev] --progress-bar off
- run:
command: |
nvm install 18 && nvm use 18
command: |
nvm install 18 && nvm use 18
- run:
name: npm prereqs
command: |
Expand Down Expand Up @@ -318,6 +317,8 @@ jobs:
command: |
. venv/bin/activate && rm -rf components/dash-core-components/dash_core_components
cd components/dash-core-components
npm ci
npm run test:jest
TESTFILES=$(circleci tests glob "tests/integration/**/test_*.py" | circleci tests split --split-by=timings)
pytest --headless --nopercyfinalize --junitxml=test-reports/junit_intg.xml --junitprefix="components.dash-core-components" ${TESTFILES}
- store_artifacts:
Expand Down
8 changes: 8 additions & 0 deletions .envrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# Check for common virtual environment directories from .gitignore patterns
# and automatically activate one with direnv, if available.
for venv_dir in .venv .env venv env .venv* env* ENV; do
if [ -d "$venv_dir" ] && [ -f "$venv_dir/bin/activate" ]; then
source "$venv_dir/bin/activate"
break
fi
done
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,10 @@ describe('Test Typescript component metadata generation', () => {
`${componentName} element JSX.Element`,
testTypeFactory('element', 'node')
);
test(
`${componentName} dash_component DashComponent`,
testTypeFactory("dash_component", "node"),
);
test(
`${componentName} boolean type`,
testTypeFactory('a_bool', 'bool')
Expand Down Expand Up @@ -197,6 +201,28 @@ describe('Test Typescript component metadata generation', () => {
expect(propType.value.value[0].name).toBe('string');
expect(propType.value.value[1].name).toBe('shape');
});
test('Union of primitives and arrays of primitives', () => {
const propType = R.path(
propPath('TypeScriptComponent', 'array_primitive_mix').concat(
'type'
),
metadata
);
expect(propType.name).toBe('union');
expect(propType.value.length).toBe(4);
expect(propType.value[0].name).toBe('string');
expect(propType.value[1].name).toBe('number');
expect(propType.value[2].name).toBe('bool');
expect(propType.value[3].name).toBe('arrayOf');

// Verify that the array element type is a union of string, number, and boolean
const arrayElementType = propType.value[3].value;
expect(arrayElementType.name).toBe('union');
expect(arrayElementType.value.length).toBe(3);
expect(arrayElementType.value[0].name).toBe('string');
expect(arrayElementType.value[1].name).toBe('number');
expect(arrayElementType.value[2].name).toBe('bool');
});
test('Obj properties', () => {
const propType = R.path(
propPath('TypeScriptComponent', 'obj').concat('type', 'value'),
Expand Down Expand Up @@ -289,6 +315,40 @@ describe('Test Typescript component metadata generation', () => {
expect(propType.value[1].value).toBe('small');
}
)

test(
'union of boolean and literal values', () => {
const propType = R.path(
propPath('TypeScriptComponent', 'boolean_enum').concat(
'type'
),
metadata
);
expect(propType.name).toBe('union');
expect(propType.value.length).toBe(3);
expect(propType.value[0].name).toBe('bool');
expect(propType.value[1].name).toBe('literal');
expect(propType.value[2].name).toBe('literal');
expect(propType.value[0].value).toBe(undefined);
expect(propType.value[1].value).toBe('small');
expect(propType.value[2].value).toBe('large');
}
)

test(
'union of duplicated types', () => {
const propType = R.path(
propPath('TypeScriptComponent', 'duplicated_enum').concat(
'type'
),
metadata
);
expect(propType.name).toBe('union');
expect(propType.value.length).toBe(2);
expect(propType.value[0].name).toBe('number');
expect(propType.value[1].name).toBe('bool');
}
)
});

describe('Test component comments', () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ const TypeScriptComponent = ({
bool_default = true,
null_default = null,
obj_default = { a: 'a', b: 3 },
array_primitive_mix = 1,
...props
}: TypescriptComponentProps) => {
return <div id={id}>{required_string}</div>;
Expand Down
16 changes: 15 additions & 1 deletion @plotly/dash-generator-test-component-typescript/src/props.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
// Needs to export types if not in a d.ts file or if any import is present in the d.ts
import React from 'react';

type DashComponent = {
props: string;
namespace: string;
children?: [];
}


type Nested = {
nested: Nested;
Expand Down Expand Up @@ -29,8 +35,14 @@ export type TypescriptComponentProps = {
union?: number | string;
union_shape?: {a: string} | string;
array_union_shape?: ({a: string} | string)[];
array_primitive_mix?:
| string
| number
| (string | number | boolean)[]
| boolean;
element?: JSX.Element;
array_elements?: JSX.Element[];
dash_component?: DashComponent;

string_default?: string;
number_default?: number;
Expand All @@ -48,7 +60,9 @@ export type TypescriptComponentProps = {
object_of_string?: {[k: string]: string};
object_of_components?: {[k: string]: JSX.Element};
ignored_prop?: {ignore: {me: string}};
union_enum?: number | 'small' | 'large'
union_enum?: number | 'small' | 'large';
boolean_enum?: boolean | 'small' | 'large';
duplicated_enum?: boolean | number | number;
};

export type WrappedHTMLProps = {
Expand Down
70 changes: 68 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,73 @@
All notable changes to `dash` will be documented in this file.
This project adheres to [Semantic Versioning](https://semver.org/).

## [UNRELEASED]
## [4.0.0] - 2026-02-03

## Added
- Finalize all redesigned dash core components
- Add a prop to sliders, `allow_direct_input`, that can be used to disable the inputs rendered with sliders.
- Improve CSS styles in calendar when looking at selected dates outside the current calendar month (`show_outside_days=True`)

## [4.0.0rc6] - 2026-01-07

## Added
- Restored missing implementation for `with_portal` and `with_full_screen_portal` in datepickers

## Changed
- Bugfixes for feedback received in `rc5`: notably, popovers are `position: fixed` once again.

## [4.0.0rc5] - 2025-12-16

## Added
- [#3464](https://github.com/plotly/dash/issues/3464) Add folder upload functionality to `dcc.Upload` component. When `multiple=True`, users can now select and upload entire folders in addition to individual files. The folder hierarchy is preserved in filenames (e.g., `folder/subfolder/file.txt`). Files within folders are filtered according to the `accept` prop. Folder support is available in Chrome, Edge, and Opera; other browsers gracefully fall back to file-only mode. The uploaded files use the same output API as multiple file uploads.

## Changed
- Bugfixes for feedback received in `rc4`

## [4.0.0rc4] - 2025-12-04

## Added
- New `dcc.Button` component that mirrors `html.Button` but with default styles applied

## [4.0.0rc3] - 2025-11-27
- Modernized `dcc.Tabs`
- Modernized `dcc.DatePickerSingle` and `dcc.DatePickerRange`
- DatePicker calendars can now accept translations as an external script, either with Dash's `external_scripts` or from the assets folder. See [documentation](https://date-fns.org/v4.1.0/docs/CDN) for the underlying library that supports this.

## Changed
- `dcc.Tab` now accepts a `width` prop which can be a pixel or percentage width for an individual tab.
- `dcc.Tab` can accept other Dash Components for its label, in addition to a simple string.

## [4.0.0rc2] - 2025-10-10

## Added
- [3468](https://github.com/plotly/dash/pull/3468) Modernize dcc.TextArea & dcc.Tooltip
- [3467](https://github.com/plotly/dash/pull/3467) Modernize dcc.Loading
- [3453](https://github.com/plotly/dash/pull/3453) Modernize dcc.Checklist & dcc.RadioItems

## Changed

- Various tweaks and bugfixes to issues reported in `4.0.0rc1`

- Dropdown API changes
* default value of optionHeight is now 'auto' which supports text wrapping of lengthy text on small screens; you can still specify a numeric pixel height if desired
* new `labels` prop to customize strings used within the component
* default value for closeOnSelect is now `True` for single-select dropdowns and `False` for multi-select

- Slider API changes
* default value of `step` is now only set to `1` if the `min` and `max` props are both integers. Otherwise, it will be dynamically computed according to the available space for the slider

## [4.0.0rc1] - 2025-09-22

## Added
- [#3440](https://github.com/plotly/dash/pull/3440) Modernize dcc.Dropdown

## [4.0.0rc0] - 2025-09-11
- [#3398](https://github.com/plotly/dash/pull/3398) Modernize dcc.Input
- [#3414](https://github.com/plotly/dash/pull/3414) Modernize dcc.Slider


## [3.4.0] - 2026-01-19

## Added

Expand Down Expand Up @@ -33,7 +99,7 @@ This project adheres to [Semantic Versioning](https://semver.org/).
- [#3347](https://github.com/plotly/dash/pull/3347) Added 'api_endpoint' to `callback` to expose api endpoints at the provided path for use to be executed directly without dash.
- [#3445](https://github.com/plotly/dash/pull/3445) Added API to reverse direction of slider component.
- [#3460](https://github.com/plotly/dash/pull/3460) Add `/health` endpoint for server monitoring and health checks.
- [#3465](https://github.com/plotly/dash/pull/3465) Plotly cloud integrations, add devtool API, placeholder plotly cloud CLI & publish button, `dash[cloud]` extra dependencies.
- [#3465](https://github.com/plotly/dash/pull/3465) Plotly cloud integrations, add devtool API, placeholder plotly cloud CLI & publish button, `dash[cloud]` extra dependencies.

## Fixed
- [#3490](https://github.com/plotly/dash/pull/3490) Fix stack overflow when circular callbacks are displayed on the devtool callback
Expand Down
13 changes: 13 additions & 0 deletions components/dash-core-components/.eslintrc
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,19 @@
"jasmine": true,
"node": true
},
"overrides": [
{
"files": ["*.ts", "*.tsx"],
"parser": "@typescript-eslint/parser",
"plugins": ["@typescript-eslint"],
"extends": [
"plugin:@typescript-eslint/recommended"
],
"rules": {
// You can add TypeScript-specific rules here
}
}
],
"plugins": [
"react",
"import"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,11 @@
"namespace": "dash",
"dynamic": True,
},
{
"dev_package_path": "dcc/proptypes.js",
"dev_only": True,
"namespace": "dash",
},
]
)

Expand Down
37 changes: 37 additions & 0 deletions components/dash-core-components/jest.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
module.exports = {
preset: 'ts-jest',
testEnvironment: 'jsdom',
roots: ['<rootDir>/tests'],
testMatch: ['**/__tests__/**/*.{ts,tsx}', '**/?(*.)+(spec|test).{ts,tsx}'],
transform: {
'^.+\\.(ts|tsx)$': [
'ts-jest',
{
tsconfig: {
jsx: 'react',
esModuleInterop: true,
allowSyntheticDefaultImports: true,
types: ['jest', '@testing-library/jest-dom'],
},
},
],
'^.+\\.js$': [
'ts-jest',
{
tsconfig: {
allowJs: true,
},
},
],
},
collectCoverageFrom: ['src/**/*.{ts,tsx}', '!src/**/*.d.ts'],
moduleNameMapper: {
'^@/(.*)$': '<rootDir>/src/$1',
'\\.(css|less|scss|sass)$': 'identity-obj-proxy',
},
setupFilesAfterEnv: ['<rootDir>/jest.setup.js'],
// Disable caching to ensure TypeScript type changes are always picked up
cache: false,
// Limit workers in CI to prevent out-of-memory errors
maxWorkers: 2,
};
11 changes: 11 additions & 0 deletions components/dash-core-components/jest.setup.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
// Jest setup file
// This file is loaded before every test file
import '@testing-library/jest-dom';

// Mock window.dash_component_api for components that use Dash context
global.window = global.window || {};
global.window.dash_component_api = {
useDashContext: () => ({
useLoading: () => false,
}),
};
Loading