Repository: mui/base-ui Branch: master Commit: 350b6b19a32e Files: 2622 Total size: 9.3 MB Directory structure: gitextract_kkoivwn8/ ├── .browserslistrc ├── .circleci/ │ └── config.yml ├── .editorconfig ├── .gitattributes ├── .github/ │ ├── CODEOWNERS │ ├── ISSUE_TEMPLATE/ │ │ ├── 1.bug.md │ │ ├── 2.feature-request.md │ │ ├── 3.get-help.md │ │ └── 4.docs-feedback.md │ ├── PULL_REQUEST_TEMPLATE.md │ ├── codeql/ │ │ └── codeql-config.yml │ ├── dependabot.yml │ └── workflows/ │ ├── check-if-pr-has-label.yml │ ├── ci.yml │ ├── codeql.yml │ ├── ensure-triage-label.yml │ ├── fixed-issue.yml │ ├── maintenance.yml │ ├── mark-duplicate.yml │ ├── new-issue-triage.yml │ ├── no-response.yml │ ├── publish.yml │ ├── scorecards.yml │ ├── support-stackoverflow.yml │ └── vale-action.yml ├── .gitignore ├── .lintignore ├── .markdownlint-cli2.mjs ├── .npmrc ├── .vale.ini ├── .vscode/ │ ├── extensions.json │ └── settings.json ├── AGENTS.md ├── CHANGELOG.md ├── CHANGELOG.old.md ├── CLAUDE.md ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── SECURITY.md ├── babel.config.mjs ├── docs/ │ ├── README.md │ ├── next.config.mjs │ ├── package.json │ ├── postcss.config.js │ ├── public/ │ │ ├── _headers │ │ ├── _redirects │ │ └── robots.txt │ ├── reference/ │ │ └── generated/ │ │ ├── accordion-header.json │ │ ├── accordion-item.json │ │ ├── accordion-panel.json │ │ ├── accordion-root.json │ │ ├── accordion-trigger.json │ │ ├── alert-dialog-backdrop.json │ │ ├── alert-dialog-close.json │ │ ├── alert-dialog-description.json │ │ ├── alert-dialog-popup.json │ │ ├── alert-dialog-portal.json │ │ ├── alert-dialog-root.json │ │ ├── alert-dialog-title.json │ │ ├── alert-dialog-trigger.json │ │ ├── alert-dialog-viewport.json │ │ ├── autocomplete-root.json │ │ ├── autocomplete-value.json │ │ ├── avatar-fallback.json │ │ ├── avatar-image.json │ │ ├── avatar-root.json │ │ ├── button.json │ │ ├── calendar-day-button.json │ │ ├── calendar-day-grid-body.json │ │ ├── calendar-day-grid-cell.json │ │ ├── calendar-day-grid-header-cell.json │ │ ├── calendar-day-grid-header-row.json │ │ ├── calendar-day-grid-header.json │ │ ├── calendar-day-grid-row.json │ │ ├── calendar-day-grid.json │ │ ├── calendar-decrement-month.json │ │ ├── calendar-increment-month.json │ │ ├── calendar-root.json │ │ ├── calendar-viewport.json │ │ ├── checkbox-group.json │ │ ├── checkbox-indicator.json │ │ ├── checkbox-root.json │ │ ├── collapsible-panel.json │ │ ├── collapsible-root.json │ │ ├── collapsible-trigger.json │ │ ├── combobox-arrow.json │ │ ├── combobox-backdrop.json │ │ ├── combobox-chip-remove.json │ │ ├── combobox-chip.json │ │ ├── combobox-chips.json │ │ ├── combobox-clear.json │ │ ├── combobox-collection.json │ │ ├── combobox-empty.json │ │ ├── combobox-group-label.json │ │ ├── combobox-group.json │ │ ├── combobox-icon.json │ │ ├── combobox-input-group.json │ │ ├── combobox-input.json │ │ ├── combobox-item-indicator.json │ │ ├── combobox-item.json │ │ ├── combobox-label.json │ │ ├── combobox-list.json │ │ ├── combobox-popup.json │ │ ├── combobox-portal.json │ │ ├── combobox-positioner.json │ │ ├── combobox-root.json │ │ ├── combobox-row.json │ │ ├── combobox-status.json │ │ ├── combobox-trigger.json │ │ ├── combobox-value.json │ │ ├── context-menu-root.json │ │ ├── context-menu-trigger.json │ │ ├── csp-provider.json │ │ ├── dialog-backdrop.json │ │ ├── dialog-close.json │ │ ├── dialog-description.json │ │ ├── dialog-popup.json │ │ ├── dialog-portal.json │ │ ├── dialog-root.json │ │ ├── dialog-title.json │ │ ├── dialog-trigger.json │ │ ├── dialog-viewport.json │ │ ├── direction-provider.json │ │ ├── drawer-backdrop.json │ │ ├── drawer-close.json │ │ ├── drawer-content.json │ │ ├── drawer-description.json │ │ ├── drawer-indent-background.json │ │ ├── drawer-indent.json │ │ ├── drawer-popup.json │ │ ├── drawer-portal.json │ │ ├── drawer-provider.json │ │ ├── drawer-root.json │ │ ├── drawer-swipe-area.json │ │ ├── drawer-title.json │ │ ├── drawer-trigger.json │ │ ├── drawer-viewport.json │ │ ├── field-control.json │ │ ├── field-description.json │ │ ├── field-error.json │ │ ├── field-item.json │ │ ├── field-label.json │ │ ├── field-root.json │ │ ├── field-validity.json │ │ ├── fieldset-legend.json │ │ ├── fieldset-root.json │ │ ├── form.json │ │ ├── group-collection-provider.json │ │ ├── input.json │ │ ├── localization-provider.json │ │ ├── menu-arrow.json │ │ ├── menu-backdrop.json │ │ ├── menu-checkbox-item-indicator.json │ │ ├── menu-checkbox-item.json │ │ ├── menu-group-label.json │ │ ├── menu-group.json │ │ ├── menu-item.json │ │ ├── menu-link-item.json │ │ ├── menu-popup.json │ │ ├── menu-portal.json │ │ ├── menu-positioner.json │ │ ├── menu-radio-group.json │ │ ├── menu-radio-item-indicator.json │ │ ├── menu-radio-item.json │ │ ├── menu-root.json │ │ ├── menu-submenu-root.json │ │ ├── menu-submenu-trigger.json │ │ ├── menu-trigger.json │ │ ├── menu-viewport.json │ │ ├── menubar.json │ │ ├── merge-props-n.json │ │ ├── merge-props.json │ │ ├── meter-indicator.json │ │ ├── meter-label.json │ │ ├── meter-root.json │ │ ├── meter-track.json │ │ ├── meter-value.json │ │ ├── navigation-menu-arrow.json │ │ ├── navigation-menu-backdrop.json │ │ ├── navigation-menu-content.json │ │ ├── navigation-menu-icon.json │ │ ├── navigation-menu-item.json │ │ ├── navigation-menu-link.json │ │ ├── navigation-menu-list.json │ │ ├── navigation-menu-popup.json │ │ ├── navigation-menu-portal.json │ │ ├── navigation-menu-positioner.json │ │ ├── navigation-menu-root.json │ │ ├── navigation-menu-trigger.json │ │ ├── navigation-menu-viewport.json │ │ ├── number-field-decrement.json │ │ ├── number-field-group.json │ │ ├── number-field-increment.json │ │ ├── number-field-input.json │ │ ├── number-field-root.json │ │ ├── number-field-scrub-area-cursor.json │ │ ├── number-field-scrub-area.json │ │ ├── popover-arrow.json │ │ ├── popover-backdrop.json │ │ ├── popover-close.json │ │ ├── popover-description.json │ │ ├── popover-popup.json │ │ ├── popover-portal.json │ │ ├── popover-positioner.json │ │ ├── popover-root.json │ │ ├── popover-title.json │ │ ├── popover-trigger.json │ │ ├── popover-viewport.json │ │ ├── preview-card-arrow.json │ │ ├── preview-card-backdrop.json │ │ ├── preview-card-popup.json │ │ ├── preview-card-portal.json │ │ ├── preview-card-positioner.json │ │ ├── preview-card-root.json │ │ ├── preview-card-trigger.json │ │ ├── preview-card-viewport.json │ │ ├── progress-indicator.json │ │ ├── progress-label.json │ │ ├── progress-root.json │ │ ├── progress-track.json │ │ ├── progress-value.json │ │ ├── radio-group.json │ │ ├── radio-indicator.json │ │ ├── radio-root.json │ │ ├── scroll-area-content.json │ │ ├── scroll-area-corner.json │ │ ├── scroll-area-root.json │ │ ├── scroll-area-scrollbar.json │ │ ├── scroll-area-thumb.json │ │ ├── scroll-area-viewport.json │ │ ├── select-arrow.json │ │ ├── select-backdrop.json │ │ ├── select-group-label.json │ │ ├── select-group.json │ │ ├── select-icon.json │ │ ├── select-item-indicator.json │ │ ├── select-item-text.json │ │ ├── select-item.json │ │ ├── select-label.json │ │ ├── select-list.json │ │ ├── select-popup.json │ │ ├── select-portal.json │ │ ├── select-positioner.json │ │ ├── select-root.json │ │ ├── select-scroll-down-arrow.json │ │ ├── select-scroll-up-arrow.json │ │ ├── select-trigger.json │ │ ├── select-value.json │ │ ├── separator.json │ │ ├── slider-control.json │ │ ├── slider-indicator.json │ │ ├── slider-label.json │ │ ├── slider-root.json │ │ ├── slider-thumb.json │ │ ├── slider-track.json │ │ ├── slider-value.json │ │ ├── switch-root.json │ │ ├── switch-thumb.json │ │ ├── tabs-indicator.json │ │ ├── tabs-list.json │ │ ├── tabs-panel.json │ │ ├── tabs-root.json │ │ ├── tabs-tab.json │ │ ├── temporal-adapter-provider.json │ │ ├── toast-action.json │ │ ├── toast-arrow.json │ │ ├── toast-close.json │ │ ├── toast-content.json │ │ ├── toast-description.json │ │ ├── toast-portal.json │ │ ├── toast-positioner.json │ │ ├── toast-provider.json │ │ ├── toast-root.json │ │ ├── toast-title.json │ │ ├── toast-viewport.json │ │ ├── toggle-group.json │ │ ├── toggle.json │ │ ├── toolbar-button.json │ │ ├── toolbar-group.json │ │ ├── toolbar-input.json │ │ ├── toolbar-link.json │ │ ├── toolbar-root.json │ │ ├── toolbar-separator.json │ │ ├── tooltip-arrow.json │ │ ├── tooltip-popup.json │ │ ├── tooltip-portal.json │ │ ├── tooltip-positioner.json │ │ ├── tooltip-provider.json │ │ ├── tooltip-root.json │ │ ├── tooltip-trigger.json │ │ ├── tooltip-viewport.json │ │ └── use-render.json │ ├── scripts/ │ │ ├── generateLlmTxt/ │ │ │ ├── __snapshots__/ │ │ │ │ └── mdxToMarkdown.test.mjs.snap │ │ │ ├── demoProcessor.mjs │ │ │ ├── index.mjs │ │ │ ├── mdxNodeHelpers.mjs │ │ │ ├── mdxToMarkdown.mjs │ │ │ ├── mdxToMarkdown.test.mjs │ │ │ ├── propsReferenceTableProcessor.mjs │ │ │ ├── referenceProcessor.mjs │ │ │ ├── releaseTimelineProcessor.mjs │ │ │ └── resolver.mjs │ │ ├── playground.template.tsx │ │ ├── rehypeExtractLinkUrls.mts │ │ └── reportBrokenLinks.mts │ ├── src/ │ │ ├── app/ │ │ │ ├── (docs)/ │ │ │ │ ├── layout.css │ │ │ │ ├── layout.tsx │ │ │ │ ├── production-error/ │ │ │ │ │ ├── ErrorCode.tsx │ │ │ │ │ ├── ErrorDisplay.tsx │ │ │ │ │ └── page.mdx │ │ │ │ └── react/ │ │ │ │ ├── components/ │ │ │ │ │ ├── accordion/ │ │ │ │ │ │ ├── demos/ │ │ │ │ │ │ │ ├── _index.module.css │ │ │ │ │ │ │ ├── hero/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ └── multiple/ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── alert-dialog/ │ │ │ │ │ │ ├── demos/ │ │ │ │ │ │ │ ├── _index.module.css │ │ │ │ │ │ │ ├── detached-triggers-controlled/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── detached-triggers-simple/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ └── hero/ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── autocomplete/ │ │ │ │ │ │ ├── demos/ │ │ │ │ │ │ │ ├── async/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── auto-highlight/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── command-palette/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── fuzzy-matching/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── grid/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── grouped/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── hero/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── inline/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── limit/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ └── virtualized/ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── avatar/ │ │ │ │ │ │ ├── demos/ │ │ │ │ │ │ │ └── hero/ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── button/ │ │ │ │ │ │ ├── demos/ │ │ │ │ │ │ │ ├── hero/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ └── loading/ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── calendar/ │ │ │ │ │ │ ├── demos/ │ │ │ │ │ │ │ ├── animation/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ ├── animation-motion/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ ├── calendar.module.css │ │ │ │ │ │ │ ├── hero/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ ├── lazy-loading/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ ├── timezone/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ ├── timezone-display/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ ├── unavailable-dates/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ ├── validation/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ ├── week-numbers/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ └── year-month-select/ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── checkbox/ │ │ │ │ │ │ ├── demos/ │ │ │ │ │ │ │ └── hero/ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── checkbox-group/ │ │ │ │ │ │ ├── demos/ │ │ │ │ │ │ │ ├── hero/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── nested/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ └── parent/ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── collapsible/ │ │ │ │ │ │ ├── demos/ │ │ │ │ │ │ │ └── hero/ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── combobox/ │ │ │ │ │ │ ├── demos/ │ │ │ │ │ │ │ ├── async-multiple/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── async-single/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── creatable/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── grouped/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── hero/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── input-inside-popup/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── multiple/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ └── virtualized/ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── context-menu/ │ │ │ │ │ │ ├── demos/ │ │ │ │ │ │ │ ├── hero/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ └── submenu/ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── dialog/ │ │ │ │ │ │ ├── demos/ │ │ │ │ │ │ │ ├── _index.module.css │ │ │ │ │ │ │ ├── close-confirmation/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── detached-triggers-controlled/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── detached-triggers-simple/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── hero/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── inside-scroll/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── nested/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── outside-scroll/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ └── uncontained/ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── drawer/ │ │ │ │ │ │ ├── demos/ │ │ │ │ │ │ │ ├── hero/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── indent-provider/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── mobile-nav/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── nested/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── non-modal/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── position/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── snap-points/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── swipe-area/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ └── uncontained/ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── field/ │ │ │ │ │ │ ├── demos/ │ │ │ │ │ │ │ └── hero/ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── fieldset/ │ │ │ │ │ │ ├── demos/ │ │ │ │ │ │ │ └── hero/ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── form/ │ │ │ │ │ │ ├── demos/ │ │ │ │ │ │ │ ├── form-action/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── hero/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ └── zod/ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── input/ │ │ │ │ │ │ ├── demos/ │ │ │ │ │ │ │ └── hero/ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── menu/ │ │ │ │ │ │ ├── demos/ │ │ │ │ │ │ │ ├── _index.module.css │ │ │ │ │ │ │ ├── checkbox-items/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── detached-triggers-controlled/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── detached-triggers-full/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── detached-triggers-simple/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── group-labels/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── hero/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── open-on-hover/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── radio-items/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ └── submenu/ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── menubar/ │ │ │ │ │ │ ├── demos/ │ │ │ │ │ │ │ └── hero/ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── meter/ │ │ │ │ │ │ ├── demos/ │ │ │ │ │ │ │ └── hero/ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── navigation-menu/ │ │ │ │ │ │ ├── demos/ │ │ │ │ │ │ │ ├── hero/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── nested/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ └── nested-inline/ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── data.ts │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── number-field/ │ │ │ │ │ │ ├── demos/ │ │ │ │ │ │ │ └── hero/ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── page.mdx │ │ │ │ │ ├── popover/ │ │ │ │ │ │ ├── demos/ │ │ │ │ │ │ │ ├── _index.module.css │ │ │ │ │ │ │ ├── detached-triggers-controlled/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── detached-triggers-full/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── detached-triggers-simple/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── hero/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── icons-tw.tsx │ │ │ │ │ │ │ └── open-on-hover/ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── preview-card/ │ │ │ │ │ │ ├── demos/ │ │ │ │ │ │ │ ├── detached-triggers-controlled/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── detached-triggers-full/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── detached-triggers-simple/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── hero/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ └── index.module.css │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── progress/ │ │ │ │ │ │ ├── demos/ │ │ │ │ │ │ │ └── hero/ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── radio/ │ │ │ │ │ │ ├── demos/ │ │ │ │ │ │ │ └── hero/ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── scroll-area/ │ │ │ │ │ │ ├── demos/ │ │ │ │ │ │ │ ├── both/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── hero/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ └── scroll-fade/ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── select/ │ │ │ │ │ │ ├── demos/ │ │ │ │ │ │ │ ├── grouped/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── hero/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── multiple/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ └── object-values/ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── separator/ │ │ │ │ │ │ ├── demos/ │ │ │ │ │ │ │ └── hero/ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── slider/ │ │ │ │ │ │ ├── demos/ │ │ │ │ │ │ │ ├── edge-alignment/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── hero/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── range-slider/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ └── vertical/ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── switch/ │ │ │ │ │ │ ├── demos/ │ │ │ │ │ │ │ └── hero/ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── tabs/ │ │ │ │ │ │ ├── demos/ │ │ │ │ │ │ │ └── hero/ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── toast/ │ │ │ │ │ │ ├── demos/ │ │ │ │ │ │ │ ├── anchored/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── custom/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ ├── hero/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── position/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── promise/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ ├── undo/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ └── varying-heights/ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── toggle/ │ │ │ │ │ │ ├── demos/ │ │ │ │ │ │ │ └── hero/ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── toggle-group/ │ │ │ │ │ │ ├── demos/ │ │ │ │ │ │ │ ├── hero/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ └── multiple/ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── toolbar/ │ │ │ │ │ │ ├── demos/ │ │ │ │ │ │ │ └── hero/ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── page.mdx │ │ │ │ │ └── tooltip/ │ │ │ │ │ ├── demos/ │ │ │ │ │ │ ├── detached-triggers-controlled/ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── detached-triggers-full/ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── detached-triggers-simple/ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── hero/ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── icons-tw.tsx │ │ │ │ │ │ └── index.module.css │ │ │ │ │ └── page.mdx │ │ │ │ ├── handbook/ │ │ │ │ │ ├── animation/ │ │ │ │ │ │ ├── demos/ │ │ │ │ │ │ │ ├── animated-popover-motion-keep-mounted-false/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ ├── animated-popover-motion-keep-mounted-true/ │ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ └── animated-select-motion/ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── composition/ │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── customization/ │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── forms/ │ │ │ │ │ │ ├── demos/ │ │ │ │ │ │ │ ├── components/ │ │ │ │ │ │ │ │ ├── autocomplete.tsx │ │ │ │ │ │ │ │ ├── button.tsx │ │ │ │ │ │ │ │ ├── checkbox-group.tsx │ │ │ │ │ │ │ │ ├── checkbox.tsx │ │ │ │ │ │ │ │ ├── combobox.tsx │ │ │ │ │ │ │ │ ├── field.tsx │ │ │ │ │ │ │ │ ├── fieldset.tsx │ │ │ │ │ │ │ │ ├── form.tsx │ │ │ │ │ │ │ │ ├── number-field.tsx │ │ │ │ │ │ │ │ ├── radio-group.tsx │ │ │ │ │ │ │ │ ├── radio.tsx │ │ │ │ │ │ │ │ ├── select.tsx │ │ │ │ │ │ │ │ ├── slider.tsx │ │ │ │ │ │ │ │ ├── switch.tsx │ │ │ │ │ │ │ │ └── toast.tsx │ │ │ │ │ │ │ ├── hero/ │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── react-hook-form/ │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ └── tanstack-form/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── page.mdx │ │ │ │ │ ├── styling/ │ │ │ │ │ │ └── page.mdx │ │ │ │ │ └── typescript/ │ │ │ │ │ └── page.mdx │ │ │ │ ├── overview/ │ │ │ │ │ ├── about/ │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── accessibility/ │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── page.mdx │ │ │ │ │ ├── quick-start/ │ │ │ │ │ │ └── page.mdx │ │ │ │ │ └── releases/ │ │ │ │ │ ├── page.mdx │ │ │ │ │ ├── v1-0-0/ │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── v1-0-0-alpha-4/ │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── v1-0-0-alpha-5/ │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── v1-0-0-alpha-6/ │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── v1-0-0-alpha-7/ │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── v1-0-0-alpha-8/ │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── v1-0-0-beta-0/ │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── v1-0-0-beta-1/ │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── v1-0-0-beta-2/ │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── v1-0-0-beta-3/ │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── v1-0-0-beta-4/ │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── v1-0-0-beta-5/ │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── v1-0-0-beta-6/ │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── v1-0-0-beta-7/ │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── v1-0-0-rc-0/ │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── v1-0-0-rc-1/ │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── v1-0-0-rc-2/ │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── v1-1-0/ │ │ │ │ │ │ └── page.mdx │ │ │ │ │ ├── v1-2-0/ │ │ │ │ │ │ └── page.mdx │ │ │ │ │ └── v1-3-0/ │ │ │ │ │ └── page.mdx │ │ │ │ ├── page.mdx │ │ │ │ └── utils/ │ │ │ │ ├── csp-provider/ │ │ │ │ │ └── page.mdx │ │ │ │ ├── direction-provider/ │ │ │ │ │ ├── demos/ │ │ │ │ │ │ └── hero/ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── tailwind/ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ └── page.mdx │ │ │ │ ├── localization-provider/ │ │ │ │ │ ├── calendar.module.css │ │ │ │ │ ├── demos/ │ │ │ │ │ │ ├── hero/ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── nesting/ │ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ └── start-of-week/ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── page.mdx │ │ │ │ ├── merge-props/ │ │ │ │ │ ├── demos/ │ │ │ │ │ │ └── prevent-base-ui-handler/ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── page.mdx │ │ │ │ ├── page.mdx │ │ │ │ └── use-render/ │ │ │ │ ├── demos/ │ │ │ │ │ ├── render/ │ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── render-callback/ │ │ │ │ │ ├── css-modules/ │ │ │ │ │ │ ├── index.module.css │ │ │ │ │ │ └── index.tsx │ │ │ │ │ └── index.ts │ │ │ │ └── page.mdx │ │ │ ├── (private)/ │ │ │ │ ├── docs-theme/ │ │ │ │ │ ├── page.module.css │ │ │ │ │ └── page.tsx │ │ │ │ ├── experiments/ │ │ │ │ │ ├── [...slug]/ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── _components/ │ │ │ │ │ │ ├── Button.module.css │ │ │ │ │ │ ├── Button.tsx │ │ │ │ │ │ ├── EditPanel.tsx │ │ │ │ │ │ ├── ExperimentRoot.module.css │ │ │ │ │ │ ├── ExperimentRoot.tsx │ │ │ │ │ │ ├── ExperimentsList.module.css │ │ │ │ │ │ ├── ExperimentsList.tsx │ │ │ │ │ │ ├── HideSidebar.tsx │ │ │ │ │ │ ├── Input.module.css │ │ │ │ │ │ ├── Input.tsx │ │ │ │ │ │ ├── SandboxLink.tsx │ │ │ │ │ │ ├── Select.module.css │ │ │ │ │ │ ├── Select.tsx │ │ │ │ │ │ ├── SettingsPanel.module.css │ │ │ │ │ │ ├── SettingsPanel.tsx │ │ │ │ │ │ ├── ShowSidebar.module.css │ │ │ │ │ │ ├── ShowSidebar.tsx │ │ │ │ │ │ ├── Sidebar.module.css │ │ │ │ │ │ ├── Sidebar.tsx │ │ │ │ │ │ ├── Switch.module.css │ │ │ │ │ │ ├── Switch.tsx │ │ │ │ │ │ ├── Tooltip.module.css │ │ │ │ │ │ └── Tooltip.tsx │ │ │ │ │ ├── accordion/ │ │ │ │ │ │ ├── animations.module.css │ │ │ │ │ │ ├── animations.tsx │ │ │ │ │ │ ├── horizontal.module.css │ │ │ │ │ │ ├── horizontal.tsx │ │ │ │ │ │ ├── transitions.module.css │ │ │ │ │ │ └── transitions.tsx │ │ │ │ │ ├── anchor-positioning.module.css │ │ │ │ │ ├── anchor-positioning.tsx │ │ │ │ │ ├── anchor-side-animations.module.css │ │ │ │ │ ├── anchor-side-animations.tsx │ │ │ │ │ ├── calendar/ │ │ │ │ │ │ ├── calendar-basic.tsx │ │ │ │ │ │ ├── calendar-timezone.tsx │ │ │ │ │ │ ├── calendar-two-months.tsx │ │ │ │ │ │ ├── calendar-unavailable-dates.tsx │ │ │ │ │ │ ├── calendar-validation.tsx │ │ │ │ │ │ └── calendar.module.css │ │ │ │ │ ├── collapsible/ │ │ │ │ │ │ ├── _icons.tsx │ │ │ │ │ │ ├── animate-presence.tsx │ │ │ │ │ │ ├── animations.module.css │ │ │ │ │ │ ├── animations.tsx │ │ │ │ │ │ ├── collapsible.module.css │ │ │ │ │ │ ├── motion.module.css │ │ │ │ │ │ ├── plain.tsx │ │ │ │ │ │ ├── transitions.module.css │ │ │ │ │ │ └── transitions.tsx │ │ │ │ │ ├── combobox/ │ │ │ │ │ │ ├── creatable-tags.module.css │ │ │ │ │ │ ├── creatable-tags.tsx │ │ │ │ │ │ ├── dialog-combobox-multiple.tsx │ │ │ │ │ │ ├── dialog-combobox.module.css │ │ │ │ │ │ ├── dialog-combobox.tsx │ │ │ │ │ │ ├── priority-combobox.module.css │ │ │ │ │ │ └── priority-combobox.tsx │ │ │ │ │ ├── combobox-composition.module.css │ │ │ │ │ ├── combobox-composition.tsx │ │ │ │ │ ├── combobox-perf.module.css │ │ │ │ │ ├── combobox-perf.tsx │ │ │ │ │ ├── context-menu.module.css │ │ │ │ │ ├── context-menu.tsx │ │ │ │ │ ├── dialog/ │ │ │ │ │ │ ├── dialog.module.css │ │ │ │ │ │ ├── dialogs.tsx │ │ │ │ │ │ ├── nested.module.css │ │ │ │ │ │ └── nested.tsx │ │ │ │ │ ├── drawer/ │ │ │ │ │ │ ├── cross-axis-scroll.module.css │ │ │ │ │ │ ├── cross-axis-scroll.tsx │ │ │ │ │ │ ├── drawer-controlled-opening.tsx │ │ │ │ │ │ └── touch-ignore.tsx │ │ │ │ │ ├── drawer-slider.module.css │ │ │ │ │ ├── drawer-slider.tsx │ │ │ │ │ ├── forms/ │ │ │ │ │ │ ├── _icons.tsx │ │ │ │ │ │ ├── autofill.module.css │ │ │ │ │ │ ├── autofill.tsx │ │ │ │ │ │ ├── button-controls.tsx │ │ │ │ │ │ ├── form.module.css │ │ │ │ │ │ ├── form.tsx │ │ │ │ │ │ └── rhf.tsx │ │ │ │ │ ├── layout.css │ │ │ │ │ ├── layout.tsx │ │ │ │ │ ├── long-select.module.css │ │ │ │ │ ├── long-select.tsx │ │ │ │ │ ├── menu/ │ │ │ │ │ │ ├── complex-nesting.tsx │ │ │ │ │ │ ├── menu-anchor-el.tsx │ │ │ │ │ │ ├── menu-anchor-ref.tsx │ │ │ │ │ │ ├── menu-disabled-items.tsx │ │ │ │ │ │ ├── menu-fully-featured.tsx │ │ │ │ │ │ ├── menu-horizontal.module.css │ │ │ │ │ │ ├── menu-horizontal.tsx │ │ │ │ │ │ ├── menu-nested.module.css │ │ │ │ │ │ ├── menu-nested.tsx │ │ │ │ │ │ ├── menu-submenus.tsx │ │ │ │ │ │ ├── menu.module.css │ │ │ │ │ │ ├── nested-detached-triggers.module.css │ │ │ │ │ │ ├── nested-detached-triggers.tsx │ │ │ │ │ │ ├── perf-contained.tsx │ │ │ │ │ │ ├── perf-detached.tsx │ │ │ │ │ │ ├── pointer-events-scope.module.css │ │ │ │ │ │ ├── pointer-events-scope.tsx │ │ │ │ │ │ ├── triggers.module.css │ │ │ │ │ │ └── triggers.tsx │ │ │ │ │ ├── menubar.module.css │ │ │ │ │ ├── menubar.tsx │ │ │ │ │ ├── meter.module.css │ │ │ │ │ ├── meter.tsx │ │ │ │ │ ├── mobile-scroll-lock.module.css │ │ │ │ │ ├── mobile-scroll-lock.tsx │ │ │ │ │ ├── modality.module.css │ │ │ │ │ ├── modality.tsx │ │ │ │ │ ├── motion.tsx │ │ │ │ │ ├── navigation-menu-popups.tsx │ │ │ │ │ ├── navigation-menu.module.css │ │ │ │ │ ├── navigation-menu.tsx │ │ │ │ │ ├── page.tsx │ │ │ │ │ ├── perf/ │ │ │ │ │ │ ├── contained-triggers.tsx │ │ │ │ │ │ ├── detached-triggers.tsx │ │ │ │ │ │ ├── perf.module.css │ │ │ │ │ │ ├── radix-triggers.tsx │ │ │ │ │ │ └── utils/ │ │ │ │ │ │ └── benchmark.tsx │ │ │ │ │ ├── popover/ │ │ │ │ │ │ ├── calendar-shared.ts │ │ │ │ │ │ ├── calendar.module.css │ │ │ │ │ │ ├── calendar.tsx │ │ │ │ │ │ ├── dynamic-size.module.css │ │ │ │ │ │ ├── dynamic-size.tsx │ │ │ │ │ │ ├── nested-open-on-hover.module.css │ │ │ │ │ │ ├── nested-open-on-hover.tsx │ │ │ │ │ │ ├── popovers.module.css │ │ │ │ │ │ ├── popovers.tsx │ │ │ │ │ │ ├── vertical-shared.ts │ │ │ │ │ │ ├── vertical.module.css │ │ │ │ │ │ └── vertical.tsx │ │ │ │ │ ├── popup-tabbing.module.css │ │ │ │ │ ├── popup-tabbing.tsx │ │ │ │ │ ├── popups/ │ │ │ │ │ │ ├── popups-in-popups.module.css │ │ │ │ │ │ ├── popups-in-popups.tsx │ │ │ │ │ │ ├── popups-transform-origin.module.css │ │ │ │ │ │ └── popups-transform-origin.tsx │ │ │ │ │ ├── preview-card/ │ │ │ │ │ │ ├── nested.module.css │ │ │ │ │ │ ├── nested.tsx │ │ │ │ │ │ ├── triggers.module.css │ │ │ │ │ │ └── triggers.tsx │ │ │ │ │ ├── rtl.module.css │ │ │ │ │ ├── rtl.tsx │ │ │ │ │ ├── scroll-area/ │ │ │ │ │ │ ├── inside-menu.module.css │ │ │ │ │ │ ├── inside-menu.tsx │ │ │ │ │ │ ├── inside-select.module.css │ │ │ │ │ │ ├── inside-select.tsx │ │ │ │ │ │ ├── scroll-area-inset.module.css │ │ │ │ │ │ ├── scroll-area-inset.tsx │ │ │ │ │ │ ├── scroll-area-slight.module.css │ │ │ │ │ │ ├── scroll-area-slight.tsx │ │ │ │ │ │ ├── scroll-area.module.css │ │ │ │ │ │ ├── scroll-area.tsx │ │ │ │ │ │ └── tabs-scroll-area.tsx │ │ │ │ │ ├── scroll-lock.tsx │ │ │ │ │ ├── select-perf.module.css │ │ │ │ │ ├── select-perf.tsx │ │ │ │ │ ├── slider/ │ │ │ │ │ │ ├── inset.module.css │ │ │ │ │ │ ├── inset.tsx │ │ │ │ │ │ ├── slider.module.css │ │ │ │ │ │ ├── slider.tsx │ │ │ │ │ │ ├── small.module.css │ │ │ │ │ │ └── vertical.module.css │ │ │ │ │ ├── storeWithControlledValues.module.css │ │ │ │ │ ├── storeWithControlledValues.tsx │ │ │ │ │ ├── tabs-animations.module.css │ │ │ │ │ ├── tabs-animations.tsx │ │ │ │ │ ├── tabs-overflow.module.css │ │ │ │ │ ├── tabs-overflow.tsx │ │ │ │ │ ├── tabs.module.css │ │ │ │ │ ├── tabs.tsx │ │ │ │ │ ├── toast.module.css │ │ │ │ │ ├── toast.tsx │ │ │ │ │ ├── toggle-group.tsx │ │ │ │ │ ├── toggle.module.css │ │ │ │ │ ├── toolbar/ │ │ │ │ │ │ ├── _icons.tsx │ │ │ │ │ │ ├── basic.tsx │ │ │ │ │ │ ├── slider.module.css │ │ │ │ │ │ ├── text-editor.tsx │ │ │ │ │ │ ├── toolbar.module.css │ │ │ │ │ │ ├── triggers.module.css │ │ │ │ │ │ └── triggers.tsx │ │ │ │ │ ├── tooltip/ │ │ │ │ │ │ ├── disabled.module.css │ │ │ │ │ │ ├── disabled.tsx │ │ │ │ │ │ ├── prevent-open.module.css │ │ │ │ │ │ ├── prevent-open.tsx │ │ │ │ │ │ ├── tooltips.module.css │ │ │ │ │ │ ├── tooltips.tsx │ │ │ │ │ │ ├── transitions.module.css │ │ │ │ │ │ └── transitions.tsx │ │ │ │ │ ├── transition-attrs.module.css │ │ │ │ │ └── transition-attrs.tsx │ │ │ │ ├── hydration-repro/ │ │ │ │ │ └── page.tsx │ │ │ │ ├── layout.css │ │ │ │ ├── layout.tsx │ │ │ │ └── playground/ │ │ │ │ └── [slug]/ │ │ │ │ └── page.tsx │ │ │ ├── (website)/ │ │ │ │ ├── careers/ │ │ │ │ │ └── design-engineer/ │ │ │ │ │ └── page.tsx │ │ │ │ ├── css/ │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── Accordion.css │ │ │ │ │ │ ├── Body.css │ │ │ │ │ │ ├── BulletList.css │ │ │ │ │ │ ├── Button.css │ │ │ │ │ │ ├── Figure.css │ │ │ │ │ │ ├── Icon.css │ │ │ │ │ │ ├── Key.css │ │ │ │ │ │ ├── Link.css │ │ │ │ │ │ ├── List.css │ │ │ │ │ │ ├── Menu.css │ │ │ │ │ │ ├── Popup.css │ │ │ │ │ │ ├── Separator.css │ │ │ │ │ │ └── Text.css │ │ │ │ │ ├── index.css │ │ │ │ │ └── theme.css │ │ │ │ ├── icons/ │ │ │ │ │ ├── MinusIcon.tsx │ │ │ │ │ └── PlusIcon.tsx │ │ │ │ ├── layout.tsx │ │ │ │ ├── logos/ │ │ │ │ │ ├── GitHub.tsx │ │ │ │ │ ├── HighlightAI.tsx │ │ │ │ │ ├── Interfere.tsx │ │ │ │ │ ├── Operate.tsx │ │ │ │ │ ├── Paper.tsx │ │ │ │ │ ├── Unsplash.tsx │ │ │ │ │ └── Zed.tsx │ │ │ │ └── page.tsx │ │ │ ├── global-not-found.tsx │ │ │ └── sitemap/ │ │ │ └── index.ts │ │ ├── blocks/ │ │ │ ├── Demo/ │ │ │ │ ├── DemoContext.ts │ │ │ │ ├── DemoPlayground.tsx │ │ │ │ ├── DemoRoot.tsx │ │ │ │ ├── DemoSourceBrowser.tsx │ │ │ │ ├── DemoSourceCopy.tsx │ │ │ │ ├── index.ts │ │ │ │ └── types.ts │ │ │ ├── GoogleAnalyticsProvider.tsx │ │ │ ├── GoogleTagManager.tsx │ │ │ ├── PackageManagerSnippet/ │ │ │ │ ├── PackageManagerSnippetCode.tsx │ │ │ │ ├── PackageManagerSnippetProvider.tsx │ │ │ │ ├── PackageManagerSnippetRoot.tsx │ │ │ │ └── index.ts │ │ │ ├── README.txt │ │ │ └── createCodeSandbox/ │ │ │ ├── CreateReactApp.ts │ │ │ ├── addHiddenInput.ts │ │ │ ├── createCodeSandbox.ts │ │ │ ├── createStackBlitzProject.ts │ │ │ ├── flattenRelativeImports.ts │ │ │ ├── packDemo.test.ts │ │ │ └── packDemo.ts │ │ ├── components/ │ │ │ ├── Accordion.css │ │ │ ├── Accordion.tsx │ │ │ ├── Code.css │ │ │ ├── Code.tsx │ │ │ ├── CodeBlock.css │ │ │ ├── CodeBlock.tsx │ │ │ ├── Demo/ │ │ │ │ ├── CodeHighlighting.css │ │ │ │ ├── Demo.css │ │ │ │ ├── Demo.tsx │ │ │ │ ├── DemoCodeBlock.tsx │ │ │ │ ├── DemoErrorFallback.tsx │ │ │ │ ├── DemoFileSelector.tsx │ │ │ │ ├── DemoPlayground.tsx │ │ │ │ ├── DemoVariantSelector.tsx │ │ │ │ └── DemoVariantSelectorProvider.tsx │ │ │ ├── DescriptionList.css │ │ │ ├── DescriptionList.tsx │ │ │ ├── DocsProviders.tsx │ │ │ ├── GhostButton.css │ │ │ ├── GhostButton.tsx │ │ │ ├── GoogleAnalytics.tsx │ │ │ ├── Header.css │ │ │ ├── Header.tsx │ │ │ ├── HeadingLink.css │ │ │ ├── HeadingLink.tsx │ │ │ ├── InstallationBlock.css │ │ │ ├── InstallationBlock.tsx │ │ │ ├── Kbd/ │ │ │ │ ├── Kbd.css │ │ │ │ ├── Kbd.tsx │ │ │ │ └── rehypeKbd.mjs │ │ │ ├── Link.css │ │ │ ├── Link.tsx │ │ │ ├── Logo.tsx │ │ │ ├── Menu.css │ │ │ ├── Menu.tsx │ │ │ ├── MobileNav.css │ │ │ ├── MobileNav.tsx │ │ │ ├── Popup.css │ │ │ ├── Popup.tsx │ │ │ ├── QuickNav/ │ │ │ │ ├── QuickNav.css │ │ │ │ ├── QuickNav.tsx │ │ │ │ ├── rehypeConcatHeadings.mjs │ │ │ │ ├── rehypeQuickNav.mjs │ │ │ │ └── rehypeSlug.mjs │ │ │ ├── ReferenceTable/ │ │ │ │ ├── AttributesReferenceTable.tsx │ │ │ │ ├── CssVariablesReferenceTable.tsx │ │ │ │ ├── ParametersReferenceTable.tsx │ │ │ │ ├── ReferenceAccordion.tsx │ │ │ │ ├── ReferenceTable.css │ │ │ │ ├── ReferenceTableTooltip.css │ │ │ │ ├── ReferenceTableTooltip.tsx │ │ │ │ ├── ReturnValueReferenceTable.tsx │ │ │ │ ├── referenceUtils.mjs │ │ │ │ ├── rehypeReference.mjs │ │ │ │ └── types.ts │ │ │ ├── ReleaseTimeline/ │ │ │ │ ├── ReleaseTimeline.css │ │ │ │ ├── ReleaseTimeline.tsx │ │ │ │ └── index.tsx │ │ │ ├── ScrollArea.css │ │ │ ├── ScrollArea.tsx │ │ │ ├── Search/ │ │ │ │ ├── Search.tsx │ │ │ │ ├── SearchBar.css │ │ │ │ ├── SearchBar.tsx │ │ │ │ └── index.ts │ │ │ ├── Select.css │ │ │ ├── Select.tsx │ │ │ ├── SideNav.css │ │ │ ├── SideNav.tsx │ │ │ ├── SkipNav.css │ │ │ ├── SkipNav.tsx │ │ │ ├── Subtitle/ │ │ │ │ ├── MarkdownLink.css │ │ │ │ ├── MarkdownLink.tsx │ │ │ │ ├── Subtitle.css │ │ │ │ ├── Subtitle.tsx │ │ │ │ └── rehypeSubtitle.mjs │ │ │ ├── Table.css │ │ │ ├── Table.tsx │ │ │ ├── TableCode.css │ │ │ └── TableCode.tsx │ │ ├── css/ │ │ │ ├── README.md │ │ │ ├── custom-media.css │ │ │ ├── fonts/ │ │ │ │ └── index.css │ │ │ ├── index.css │ │ │ ├── mdx-components.css │ │ │ ├── theme-redesign.css │ │ │ └── utilities/ │ │ │ ├── align-items.css │ │ │ ├── box-sizing.css │ │ │ ├── display.css │ │ │ ├── flex-direction.css │ │ │ ├── flex-wrap.css │ │ │ ├── font-weight.css │ │ │ ├── gap.css │ │ │ ├── grid-auto-rows.css │ │ │ ├── grid-column-end.css │ │ │ ├── grid-column-start.css │ │ │ ├── grid-template-columns.css │ │ │ ├── height.css │ │ │ ├── index.css │ │ │ ├── justify-content.css │ │ │ ├── left.css │ │ │ ├── margin.css │ │ │ ├── outline.css │ │ │ ├── padding.css │ │ │ ├── position.css │ │ │ ├── scroll-margin-top.css │ │ │ ├── text-align.css │ │ │ ├── top.css │ │ │ ├── visibility.css │ │ │ ├── white-space.css │ │ │ └── width.css │ │ ├── data/ │ │ │ └── releases.ts │ │ ├── demo-data/ │ │ │ └── theme/ │ │ │ ├── css-modules/ │ │ │ │ ├── index.ts │ │ │ │ └── theme.css │ │ │ └── index.ts │ │ ├── error-codes.json │ │ ├── icons/ │ │ │ ├── ArrowRightIcon.tsx │ │ │ ├── CheckIcon.tsx │ │ │ ├── ChevronDownIcon.tsx │ │ │ ├── CopyIcon.tsx │ │ │ ├── ExternalLinkIcon.tsx │ │ │ ├── GitHubIcon.tsx │ │ │ ├── MarkdownIcon.tsx │ │ │ ├── MoreVertIcon.tsx │ │ │ ├── NpmIcon.tsx │ │ │ └── ThickCheckIcon.tsx │ │ ├── mdx/ │ │ │ ├── createHast.mjs │ │ │ ├── createMdxComponent.ts │ │ │ └── createMdxElement.mjs │ │ ├── mdx-components.tsx │ │ ├── syntax-highlighting/ │ │ │ ├── index.css │ │ │ ├── index.mjs │ │ │ ├── index.ts │ │ │ ├── rehypeEmptyLines.mjs │ │ │ ├── rehypeInlineCode.mjs │ │ │ ├── rehypeJsxExpressions.mjs │ │ │ └── rehypePrettierIgnore.mjs │ │ └── utils/ │ │ ├── camelToSentenceCase.ts │ │ ├── createDemo.ts │ │ ├── demoExportOptions.test.ts │ │ ├── demoExportOptions.ts │ │ ├── getChildrenText.ts │ │ ├── getGitHubDemoUrl.test.ts │ │ ├── getGitHubDemoUrl.ts │ │ └── observeScrollableInner.ts │ ├── tsconfig.json │ ├── types.d.ts │ └── vitest.config.mts ├── eslint.config.mjs ├── examples/ │ ├── tanstack-start-tailwind-css/ │ │ ├── .devcontainer/ │ │ │ └── devcontainer.json │ │ ├── .gitignore │ │ ├── .prettierignore │ │ ├── .vscode/ │ │ │ └── settings.json │ │ ├── README.md │ │ ├── eslint.config.js │ │ ├── package.json │ │ ├── prettier.config.js │ │ ├── public/ │ │ │ ├── manifest.json │ │ │ └── robots.txt │ │ ├── src/ │ │ │ ├── components/ │ │ │ │ ├── button.tsx │ │ │ │ ├── combobox.tsx │ │ │ │ ├── dialog.tsx │ │ │ │ ├── input.tsx │ │ │ │ ├── link.tsx │ │ │ │ ├── menu.tsx │ │ │ │ ├── navigation-menu.tsx │ │ │ │ ├── popover.tsx │ │ │ │ ├── switch.tsx │ │ │ │ └── toggle.tsx │ │ │ ├── routeTree.gen.ts │ │ │ ├── router.tsx │ │ │ ├── routes/ │ │ │ │ ├── __root.tsx │ │ │ │ ├── combobox-server-fn.tsx │ │ │ │ └── index.tsx │ │ │ └── styles.css │ │ ├── tsconfig.json │ │ └── vite.config.ts │ └── vite-css/ │ ├── .gitignore │ ├── README.md │ ├── eslint.config.js │ ├── index.html │ ├── package.json │ ├── src/ │ │ ├── App.css │ │ ├── App.tsx │ │ ├── index.css │ │ ├── main.tsx │ │ ├── vite-env.d.ts │ │ └── widgets/ │ │ ├── Switch.module.css │ │ └── Switch.tsx │ ├── tsconfig.app.json │ ├── tsconfig.json │ ├── tsconfig.node.json │ └── vite.config.ts ├── greptile.json ├── lerna.json ├── netlify/ │ └── functions/ │ └── deploy-succeeded.js ├── netlify.toml ├── nx.json ├── package.json ├── packages/ │ ├── react/ │ │ ├── .npmignore │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── accordion/ │ │ │ │ ├── header/ │ │ │ │ │ ├── AccordionHeader.test.tsx │ │ │ │ │ ├── AccordionHeader.tsx │ │ │ │ │ └── AccordionHeaderDataAttributes.ts │ │ │ │ ├── index.parts.ts │ │ │ │ ├── index.ts │ │ │ │ ├── item/ │ │ │ │ │ ├── AccordionItem.test.tsx │ │ │ │ │ ├── AccordionItem.tsx │ │ │ │ │ ├── AccordionItemContext.ts │ │ │ │ │ ├── AccordionItemDataAttributes.ts │ │ │ │ │ └── stateAttributesMapping.ts │ │ │ │ ├── panel/ │ │ │ │ │ ├── AccordionPanel.test.tsx │ │ │ │ │ ├── AccordionPanel.tsx │ │ │ │ │ ├── AccordionPanelCssVars.ts │ │ │ │ │ └── AccordionPanelDataAttributes.ts │ │ │ │ ├── root/ │ │ │ │ │ ├── AccordionRoot.spec.tsx │ │ │ │ │ ├── AccordionRoot.test.tsx │ │ │ │ │ ├── AccordionRoot.tsx │ │ │ │ │ ├── AccordionRootContext.ts │ │ │ │ │ └── AccordionRootDataAttributes.ts │ │ │ │ └── trigger/ │ │ │ │ ├── AccordionTrigger.test.tsx │ │ │ │ ├── AccordionTrigger.tsx │ │ │ │ └── AccordionTriggerDataAttributes.ts │ │ │ ├── alert-dialog/ │ │ │ │ ├── handle.ts │ │ │ │ ├── index.parts.ts │ │ │ │ ├── index.ts │ │ │ │ └── root/ │ │ │ │ ├── AlertDialogRoot.spec.tsx │ │ │ │ ├── AlertDialogRoot.test.tsx │ │ │ │ └── AlertDialogRoot.tsx │ │ │ ├── autocomplete/ │ │ │ │ ├── index.parts.ts │ │ │ │ ├── index.ts │ │ │ │ ├── item/ │ │ │ │ │ └── AutocompleteItem.test.tsx │ │ │ │ ├── root/ │ │ │ │ │ ├── AutocompleteRoot.spec.tsx │ │ │ │ │ ├── AutocompleteRoot.test.tsx │ │ │ │ │ └── AutocompleteRoot.tsx │ │ │ │ └── value/ │ │ │ │ ├── AutocompleteValue.test.tsx │ │ │ │ └── AutocompleteValue.tsx │ │ │ ├── avatar/ │ │ │ │ ├── fallback/ │ │ │ │ │ ├── AvatarFallback.test.tsx │ │ │ │ │ └── AvatarFallback.tsx │ │ │ │ ├── image/ │ │ │ │ │ ├── AvatarImage.test.tsx │ │ │ │ │ ├── AvatarImage.tsx │ │ │ │ │ ├── AvatarImageDataAttributes.ts │ │ │ │ │ └── useImageLoadingStatus.ts │ │ │ │ ├── index.parts.ts │ │ │ │ ├── index.ts │ │ │ │ └── root/ │ │ │ │ ├── AvatarRoot.test.tsx │ │ │ │ ├── AvatarRoot.tsx │ │ │ │ ├── AvatarRootContext.ts │ │ │ │ └── stateAttributesMapping.ts │ │ │ ├── button/ │ │ │ │ ├── Button.spec.tsx │ │ │ │ ├── Button.test.tsx │ │ │ │ ├── Button.tsx │ │ │ │ ├── ButtonDataAttributes.tsx │ │ │ │ └── index.ts │ │ │ ├── calendar/ │ │ │ │ ├── day-button/ │ │ │ │ │ ├── CalendarDayButton.test.tsx │ │ │ │ │ ├── CalendarDayButton.tsx │ │ │ │ │ └── CalendarDayButtonDataAttributes.ts │ │ │ │ ├── day-grid/ │ │ │ │ │ ├── CalendarDayGrid.test.tsx │ │ │ │ │ └── CalendarDayGrid.tsx │ │ │ │ ├── day-grid-body/ │ │ │ │ │ ├── CalendarDayGridBody.keyboard.test.tsx │ │ │ │ │ ├── CalendarDayGridBody.test.tsx │ │ │ │ │ ├── CalendarDayGridBody.tsx │ │ │ │ │ ├── SharedCalendarDayGridBodyContext.ts │ │ │ │ │ └── useSharedCalendarDayGridBody.ts │ │ │ │ ├── day-grid-cell/ │ │ │ │ │ ├── CalendarDayGridCell.test.tsx │ │ │ │ │ ├── CalendarDayGridCell.tsx │ │ │ │ │ ├── SharedCalendarDayGridCellContext.ts │ │ │ │ │ └── useSharedCalendarDayGridCell.ts │ │ │ │ ├── day-grid-header/ │ │ │ │ │ ├── CalendarDayGridHeader.test.tsx │ │ │ │ │ └── CalendarDayGridHeader.tsx │ │ │ │ ├── day-grid-header-cell/ │ │ │ │ │ ├── CalendarDayGridHeaderCell.test.tsx │ │ │ │ │ └── CalendarDayGridHeaderCell.tsx │ │ │ │ ├── day-grid-header-row/ │ │ │ │ │ ├── CalendarDayGridHeaderRow.test.tsx │ │ │ │ │ └── CalendarDayGridHeaderRow.tsx │ │ │ │ ├── day-grid-row/ │ │ │ │ │ ├── CalendarDayGridRow.tsx │ │ │ │ │ └── CalendarDayRow.test.tsx │ │ │ │ ├── decrement-month/ │ │ │ │ │ ├── CalendarDecrementMonth.test.tsx │ │ │ │ │ ├── CalendarDecrementMonth.tsx │ │ │ │ │ └── CalendarDecrementMonthDataAttributes.ts │ │ │ │ ├── increment-month/ │ │ │ │ │ ├── CalendarIncrementMonth.test.tsx │ │ │ │ │ ├── CalendarIncrementMonth.tsx │ │ │ │ │ └── CalendarIncrementMonthDataAttributes.ts │ │ │ │ ├── index.parts.ts │ │ │ │ ├── index.ts │ │ │ │ ├── root/ │ │ │ │ │ ├── CalendarRoot.test.tsx │ │ │ │ │ ├── CalendarRoot.tsx │ │ │ │ │ ├── CalendarRootDataAttributes.ts │ │ │ │ │ └── SharedCalendarRootContext.ts │ │ │ │ ├── store/ │ │ │ │ │ ├── SharedCalendarState.ts │ │ │ │ │ ├── SharedCalendarStore.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── selectors.ts │ │ │ │ │ └── test/ │ │ │ │ │ ├── value.SharedCalendarStore.test.ts │ │ │ │ │ └── visibleDate.SharedCalendarStore.test.ts │ │ │ │ ├── use-context/ │ │ │ │ │ └── CalendarContext.ts │ │ │ │ ├── use-day-list/ │ │ │ │ │ ├── getDayList.ts │ │ │ │ │ └── useCalendarDayList.ts │ │ │ │ ├── use-week-list/ │ │ │ │ │ ├── getWeekList.ts │ │ │ │ │ └── useCalendarWeekList.ts │ │ │ │ ├── utils/ │ │ │ │ │ ├── computeMonthDayGrid.ts │ │ │ │ │ └── useCalendarMonthButton.ts │ │ │ │ └── viewport/ │ │ │ │ ├── CalendarViewport.tsx │ │ │ │ └── CalendarViewportDataAttributes.ts │ │ │ ├── checkbox/ │ │ │ │ ├── index.parts.ts │ │ │ │ ├── index.ts │ │ │ │ ├── indicator/ │ │ │ │ │ ├── CheckboxIndicator.test.tsx │ │ │ │ │ ├── CheckboxIndicator.tsx │ │ │ │ │ └── CheckboxIndicatorDataAttributes.ts │ │ │ │ ├── root/ │ │ │ │ │ ├── CheckboxRoot.test.tsx │ │ │ │ │ ├── CheckboxRoot.tsx │ │ │ │ │ ├── CheckboxRootContext.ts │ │ │ │ │ └── CheckboxRootDataAttributes.ts │ │ │ │ └── utils/ │ │ │ │ └── useStateAttributesMapping.ts │ │ │ ├── checkbox-group/ │ │ │ │ ├── CheckboxGroup.test.tsx │ │ │ │ ├── CheckboxGroup.tsx │ │ │ │ ├── CheckboxGroupContext.ts │ │ │ │ ├── CheckboxGroupDataAttributes.ts │ │ │ │ ├── index.parts.ts │ │ │ │ ├── index.ts │ │ │ │ ├── useCheckboxGroupParent.test.tsx │ │ │ │ └── useCheckboxGroupParent.ts │ │ │ ├── collapsible/ │ │ │ │ ├── index.parts.ts │ │ │ │ ├── index.ts │ │ │ │ ├── panel/ │ │ │ │ │ ├── CollapsiblePanel.test.tsx │ │ │ │ │ ├── CollapsiblePanel.tsx │ │ │ │ │ ├── CollapsiblePanelCssVars.ts │ │ │ │ │ ├── CollapsiblePanelDataAttributes.ts │ │ │ │ │ └── useCollapsiblePanel.ts │ │ │ │ ├── root/ │ │ │ │ │ ├── CollapsibleRoot.test.tsx │ │ │ │ │ ├── CollapsibleRoot.tsx │ │ │ │ │ ├── CollapsibleRootContext.ts │ │ │ │ │ ├── stateAttributesMapping.ts │ │ │ │ │ └── useCollapsibleRoot.ts │ │ │ │ └── trigger/ │ │ │ │ ├── CollapsibleTrigger.test.tsx │ │ │ │ ├── CollapsibleTrigger.tsx │ │ │ │ └── CollapsibleTriggerDataAttributes.ts │ │ │ ├── combobox/ │ │ │ │ ├── arrow/ │ │ │ │ │ ├── ComboboxArrow.test.tsx │ │ │ │ │ ├── ComboboxArrow.tsx │ │ │ │ │ └── ComboboxArrowDataAttributes.ts │ │ │ │ ├── backdrop/ │ │ │ │ │ ├── ComboboxBackdrop.test.tsx │ │ │ │ │ ├── ComboboxBackdrop.tsx │ │ │ │ │ └── ComboboxBackdropDataAttributes.ts │ │ │ │ ├── chip/ │ │ │ │ │ ├── ComboboxChip.test.tsx │ │ │ │ │ ├── ComboboxChip.tsx │ │ │ │ │ └── ComboboxChipContext.ts │ │ │ │ ├── chip-remove/ │ │ │ │ │ ├── ComboboxChipRemove.test.tsx │ │ │ │ │ └── ComboboxChipRemove.tsx │ │ │ │ ├── chips/ │ │ │ │ │ ├── ComboboxChips.test.tsx │ │ │ │ │ ├── ComboboxChips.tsx │ │ │ │ │ └── ComboboxChipsContext.ts │ │ │ │ ├── clear/ │ │ │ │ │ ├── ComboboxClear.test.tsx │ │ │ │ │ ├── ComboboxClear.tsx │ │ │ │ │ └── ComboboxClearDataAtributes.ts │ │ │ │ ├── collection/ │ │ │ │ │ ├── ComboboxCollection.test.tsx │ │ │ │ │ ├── ComboboxCollection.tsx │ │ │ │ │ └── GroupCollectionContext.tsx │ │ │ │ ├── empty/ │ │ │ │ │ ├── ComboboxEmpty.test.tsx │ │ │ │ │ └── ComboboxEmpty.tsx │ │ │ │ ├── group/ │ │ │ │ │ ├── ComboboxGroup.test.tsx │ │ │ │ │ ├── ComboboxGroup.tsx │ │ │ │ │ └── ComboboxGroupContext.ts │ │ │ │ ├── group-label/ │ │ │ │ │ ├── ComboboxGroupLabel.test.tsx │ │ │ │ │ └── ComboboxGroupLabel.tsx │ │ │ │ ├── icon/ │ │ │ │ │ ├── ComboboxIcon.test.tsx │ │ │ │ │ └── ComboboxIcon.tsx │ │ │ │ ├── index.parts.ts │ │ │ │ ├── index.ts │ │ │ │ ├── input/ │ │ │ │ │ ├── ComboboxInput.test.tsx │ │ │ │ │ ├── ComboboxInput.tsx │ │ │ │ │ └── ComboboxInputDataAttributes.ts │ │ │ │ ├── input-group/ │ │ │ │ │ ├── ComboboxInputGroup.test.tsx │ │ │ │ │ ├── ComboboxInputGroup.tsx │ │ │ │ │ └── ComboboxInputGroupDataAttributes.ts │ │ │ │ ├── item/ │ │ │ │ │ ├── ComboboxItem.test.tsx │ │ │ │ │ ├── ComboboxItem.tsx │ │ │ │ │ ├── ComboboxItemContext.ts │ │ │ │ │ └── ComboboxItemDataAttributes.ts │ │ │ │ ├── item-indicator/ │ │ │ │ │ ├── ComboboxItemIndicator.test.tsx │ │ │ │ │ ├── ComboboxItemIndicator.tsx │ │ │ │ │ └── ComboboxItemIndicatorDataAttributes.ts │ │ │ │ ├── label/ │ │ │ │ │ ├── ComboboxLabel.test.tsx │ │ │ │ │ └── ComboboxLabel.tsx │ │ │ │ ├── list/ │ │ │ │ │ ├── ComboboxList.test.tsx │ │ │ │ │ └── ComboboxList.tsx │ │ │ │ ├── popup/ │ │ │ │ │ ├── ComboboxPopup.test.tsx │ │ │ │ │ ├── ComboboxPopup.tsx │ │ │ │ │ └── ComboboxPopupDataAttributes.ts │ │ │ │ ├── portal/ │ │ │ │ │ ├── ComboboxPortal.test.tsx │ │ │ │ │ ├── ComboboxPortal.tsx │ │ │ │ │ └── ComboboxPortalContext.tsx │ │ │ │ ├── positioner/ │ │ │ │ │ ├── ComboboxPositioner.test.tsx │ │ │ │ │ ├── ComboboxPositioner.tsx │ │ │ │ │ ├── ComboboxPositionerContext.tsx │ │ │ │ │ ├── ComboboxPositionerCssVars.ts │ │ │ │ │ └── ComboboxPositionerDataAttributes.ts │ │ │ │ ├── root/ │ │ │ │ │ ├── AriaCombobox.tsx │ │ │ │ │ ├── ComboboxRoot.spec.tsx │ │ │ │ │ ├── ComboboxRoot.test.tsx │ │ │ │ │ ├── ComboboxRoot.tsx │ │ │ │ │ ├── ComboboxRootContext.tsx │ │ │ │ │ └── utils/ │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── useFilter.ts │ │ │ │ │ └── useFilteredItems.ts │ │ │ │ ├── row/ │ │ │ │ │ ├── ComboboxRow.tsx │ │ │ │ │ └── ComboboxRowContext.ts │ │ │ │ ├── status/ │ │ │ │ │ ├── ComboboxStatus.test.tsx │ │ │ │ │ └── ComboboxStatus.tsx │ │ │ │ ├── store.ts │ │ │ │ ├── trigger/ │ │ │ │ │ ├── ComboboxTrigger.test.tsx │ │ │ │ │ ├── ComboboxTrigger.tsx │ │ │ │ │ └── ComboboxTriggerDataAttributes.ts │ │ │ │ ├── utils/ │ │ │ │ │ ├── ComboboxInternalDismissButton.tsx │ │ │ │ │ ├── handleInputPress.ts │ │ │ │ │ └── stateAttributesMapping.ts │ │ │ │ └── value/ │ │ │ │ ├── ComboboxValue.test.tsx │ │ │ │ └── ComboboxValue.tsx │ │ │ ├── composite/ │ │ │ │ ├── composite.ts │ │ │ │ ├── constants.ts │ │ │ │ ├── item/ │ │ │ │ │ ├── CompositeItem.tsx │ │ │ │ │ └── useCompositeItem.ts │ │ │ │ ├── list/ │ │ │ │ │ ├── CompositeList.test.tsx │ │ │ │ │ ├── CompositeList.tsx │ │ │ │ │ ├── CompositeListContext.ts │ │ │ │ │ └── useCompositeListItem.ts │ │ │ │ └── root/ │ │ │ │ ├── CompositeRoot.test.tsx │ │ │ │ ├── CompositeRoot.tsx │ │ │ │ ├── CompositeRootContext.ts │ │ │ │ └── useCompositeRoot.ts │ │ │ ├── context-menu/ │ │ │ │ ├── index.parts.ts │ │ │ │ ├── index.ts │ │ │ │ ├── root/ │ │ │ │ │ ├── ContextMenuRoot.non-mac.test.tsx │ │ │ │ │ ├── ContextMenuRoot.test.tsx │ │ │ │ │ ├── ContextMenuRoot.tsx │ │ │ │ │ └── ContextMenuRootContext.ts │ │ │ │ └── trigger/ │ │ │ │ ├── ContextMenuTrigger.test.tsx │ │ │ │ ├── ContextMenuTrigger.tsx │ │ │ │ └── ContextMenuTriggerDataAttributes.ts │ │ │ ├── csp-provider/ │ │ │ │ ├── CSPContext.tsx │ │ │ │ ├── CSPProvider.test.tsx │ │ │ │ ├── CSPProvider.tsx │ │ │ │ ├── index.parts.ts │ │ │ │ └── index.ts │ │ │ ├── dialog/ │ │ │ │ ├── backdrop/ │ │ │ │ │ ├── DialogBackdrop.test.tsx │ │ │ │ │ ├── DialogBackdrop.tsx │ │ │ │ │ └── DialogBackdropDataAttributes.ts │ │ │ │ ├── close/ │ │ │ │ │ ├── DialogClose.test.tsx │ │ │ │ │ ├── DialogClose.tsx │ │ │ │ │ └── DialogCloseDataAttributes.ts │ │ │ │ ├── description/ │ │ │ │ │ ├── DialogDescription.test.tsx │ │ │ │ │ └── DialogDescription.tsx │ │ │ │ ├── index.parts.ts │ │ │ │ ├── index.ts │ │ │ │ ├── popup/ │ │ │ │ │ ├── DialogPopup.test.tsx │ │ │ │ │ ├── DialogPopup.tsx │ │ │ │ │ ├── DialogPopupCssVars.ts │ │ │ │ │ └── DialogPopupDataAttributes.ts │ │ │ │ ├── portal/ │ │ │ │ │ ├── DialogPortal.test.tsx │ │ │ │ │ ├── DialogPortal.tsx │ │ │ │ │ └── DialogPortalContext.ts │ │ │ │ ├── root/ │ │ │ │ │ ├── DialogRoot.detached-triggers.test.tsx │ │ │ │ │ ├── DialogRoot.spec.tsx │ │ │ │ │ ├── DialogRoot.test.tsx │ │ │ │ │ ├── DialogRoot.tsx │ │ │ │ │ ├── DialogRootContext.ts │ │ │ │ │ └── useDialogRoot.ts │ │ │ │ ├── store/ │ │ │ │ │ ├── DialogHandle.ts │ │ │ │ │ └── DialogStore.ts │ │ │ │ ├── title/ │ │ │ │ │ ├── DialogTitle.test.tsx │ │ │ │ │ └── DialogTitle.tsx │ │ │ │ ├── trigger/ │ │ │ │ │ ├── DialogTrigger.test.tsx │ │ │ │ │ ├── DialogTrigger.tsx │ │ │ │ │ └── DialogTriggerDataAttributes.ts │ │ │ │ └── viewport/ │ │ │ │ ├── DialogViewport.test.tsx │ │ │ │ ├── DialogViewport.tsx │ │ │ │ └── DialogViewportDataAttributes.ts │ │ │ ├── direction-provider/ │ │ │ │ ├── DirectionContext.tsx │ │ │ │ ├── DirectionProvider.tsx │ │ │ │ ├── index.parts.ts │ │ │ │ └── index.ts │ │ │ ├── drawer/ │ │ │ │ ├── backdrop/ │ │ │ │ │ ├── DrawerBackdrop.tsx │ │ │ │ │ ├── DrawerBackdropCssVars.ts │ │ │ │ │ └── DrawerBackdropDataAttributes.ts │ │ │ │ ├── close/ │ │ │ │ │ └── DrawerClose.tsx │ │ │ │ ├── content/ │ │ │ │ │ ├── DrawerContent.test.tsx │ │ │ │ │ ├── DrawerContent.tsx │ │ │ │ │ └── DrawerContentDataAttributes.ts │ │ │ │ ├── description/ │ │ │ │ │ └── DrawerDescription.tsx │ │ │ │ ├── indent/ │ │ │ │ │ ├── DrawerIndent.test.tsx │ │ │ │ │ └── DrawerIndent.tsx │ │ │ │ ├── indent-background/ │ │ │ │ │ ├── DrawerIndentBackground.test.tsx │ │ │ │ │ └── DrawerIndentBackground.tsx │ │ │ │ ├── index.parts.ts │ │ │ │ ├── index.ts │ │ │ │ ├── popup/ │ │ │ │ │ ├── DrawerPopup.test.tsx │ │ │ │ │ ├── DrawerPopup.tsx │ │ │ │ │ ├── DrawerPopupCssVars.ts │ │ │ │ │ └── DrawerPopupDataAttributes.ts │ │ │ │ ├── portal/ │ │ │ │ │ └── DrawerPortal.tsx │ │ │ │ ├── provider/ │ │ │ │ │ ├── DrawerProvider.tsx │ │ │ │ │ └── DrawerProviderContext.ts │ │ │ │ ├── root/ │ │ │ │ │ ├── DrawerRoot.spec.tsx │ │ │ │ │ ├── DrawerRoot.test.tsx │ │ │ │ │ ├── DrawerRoot.tsx │ │ │ │ │ ├── DrawerRootContext.ts │ │ │ │ │ └── useDrawerSnapPoints.ts │ │ │ │ ├── swipe-area/ │ │ │ │ │ ├── DrawerSwipeArea.test.tsx │ │ │ │ │ ├── DrawerSwipeArea.tsx │ │ │ │ │ └── DrawerSwipeAreaDataAttributes.ts │ │ │ │ ├── title/ │ │ │ │ │ └── DrawerTitle.tsx │ │ │ │ ├── trigger/ │ │ │ │ │ └── DrawerTrigger.tsx │ │ │ │ └── viewport/ │ │ │ │ ├── DrawerViewport.test.tsx │ │ │ │ ├── DrawerViewport.tsx │ │ │ │ ├── DrawerViewportContext.tsx │ │ │ │ └── DrawerViewportDataAttributes.ts │ │ │ ├── field/ │ │ │ │ ├── control/ │ │ │ │ │ ├── FieldControl.spec.tsx │ │ │ │ │ ├── FieldControl.test.tsx │ │ │ │ │ ├── FieldControl.tsx │ │ │ │ │ └── FieldControlDataAttributes.ts │ │ │ │ ├── description/ │ │ │ │ │ ├── FieldDescription.test.tsx │ │ │ │ │ ├── FieldDescription.tsx │ │ │ │ │ └── FieldDescriptionDataAttributes.ts │ │ │ │ ├── error/ │ │ │ │ │ ├── FieldError.test.tsx │ │ │ │ │ ├── FieldError.tsx │ │ │ │ │ └── FieldErrorDataAttributes.ts │ │ │ │ ├── index.parts.ts │ │ │ │ ├── index.ts │ │ │ │ ├── item/ │ │ │ │ │ ├── FieldItem.test.tsx │ │ │ │ │ ├── FieldItem.tsx │ │ │ │ │ └── FieldItemContext.ts │ │ │ │ ├── label/ │ │ │ │ │ ├── FieldLabel.test.tsx │ │ │ │ │ ├── FieldLabel.tsx │ │ │ │ │ └── FieldLabelDataAttributes.ts │ │ │ │ ├── root/ │ │ │ │ │ ├── FieldRoot.test.tsx │ │ │ │ │ ├── FieldRoot.tsx │ │ │ │ │ ├── FieldRootContext.ts │ │ │ │ │ ├── FieldRootDataAttributes.ts │ │ │ │ │ └── useFieldValidation.ts │ │ │ │ ├── useField.ts │ │ │ │ ├── utils/ │ │ │ │ │ ├── constants.ts │ │ │ │ │ └── getCombinedFieldValidityData.ts │ │ │ │ └── validity/ │ │ │ │ ├── FieldValidity.test.tsx │ │ │ │ └── FieldValidity.tsx │ │ │ ├── fieldset/ │ │ │ │ ├── index.parts.ts │ │ │ │ ├── index.ts │ │ │ │ ├── legend/ │ │ │ │ │ ├── FieldsetLegend.test.tsx │ │ │ │ │ └── FieldsetLegend.tsx │ │ │ │ └── root/ │ │ │ │ ├── FieldsetRoot.test.tsx │ │ │ │ ├── FieldsetRoot.tsx │ │ │ │ └── FieldsetRootContext.ts │ │ │ ├── floating-ui-react/ │ │ │ │ ├── components/ │ │ │ │ │ ├── FloatingDelayGroup.test.tsx │ │ │ │ │ ├── FloatingDelayGroup.tsx │ │ │ │ │ ├── FloatingFocusManager.test.tsx │ │ │ │ │ ├── FloatingFocusManager.tsx │ │ │ │ │ ├── FloatingPortal.test.tsx │ │ │ │ │ ├── FloatingPortal.tsx │ │ │ │ │ ├── FloatingRootStore.ts │ │ │ │ │ ├── FloatingTree.tsx │ │ │ │ │ └── FloatingTreeStore.ts │ │ │ │ ├── hooks/ │ │ │ │ │ ├── useClick.ts │ │ │ │ │ ├── useClientPoint.test.tsx │ │ │ │ │ ├── useClientPoint.ts │ │ │ │ │ ├── useDismiss.test.tsx │ │ │ │ │ ├── useDismiss.ts │ │ │ │ │ ├── useFloating.ts │ │ │ │ │ ├── useFloatingRootContext.ts │ │ │ │ │ ├── useFocus.ts │ │ │ │ │ ├── useHover.test.tsx │ │ │ │ │ ├── useHover.ts │ │ │ │ │ ├── useHoverFloatingInteraction.ts │ │ │ │ │ ├── useHoverInteractionSharedState.ts │ │ │ │ │ ├── useHoverReferenceInteraction.test.tsx │ │ │ │ │ ├── useHoverReferenceInteraction.ts │ │ │ │ │ ├── useHoverShared.ts │ │ │ │ │ ├── useInteractions.test.tsx │ │ │ │ │ ├── useInteractions.ts │ │ │ │ │ ├── useListNavigation.test.tsx │ │ │ │ │ ├── useListNavigation.ts │ │ │ │ │ ├── useRole.ts │ │ │ │ │ ├── useSyncedFloatingRootContext.ts │ │ │ │ │ ├── useTypeahead.test.tsx │ │ │ │ │ └── useTypeahead.ts │ │ │ │ ├── index.ts │ │ │ │ ├── middleware/ │ │ │ │ │ └── arrow.ts │ │ │ │ ├── safePolygon.test.ts │ │ │ │ ├── safePolygon.ts │ │ │ │ ├── types.ts │ │ │ │ ├── utils/ │ │ │ │ │ ├── composite.ts │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── createAttribute.ts │ │ │ │ │ ├── createEventEmitter.ts │ │ │ │ │ ├── element.ts │ │ │ │ │ ├── enqueueFocus.ts │ │ │ │ │ ├── event.ts │ │ │ │ │ ├── getEmptyRootContext.ts │ │ │ │ │ ├── markOthers.test.ts │ │ │ │ │ ├── markOthers.ts │ │ │ │ │ ├── nodes.test.ts │ │ │ │ │ ├── nodes.ts │ │ │ │ │ └── tabbable.ts │ │ │ │ └── utils.ts │ │ │ ├── form/ │ │ │ │ ├── Form.spec.tsx │ │ │ │ ├── Form.test.tsx │ │ │ │ ├── Form.tsx │ │ │ │ ├── FormContext.ts │ │ │ │ └── index.ts │ │ │ ├── global.d.ts │ │ │ ├── index.test.ts │ │ │ ├── index.ts │ │ │ ├── input/ │ │ │ │ ├── Input.spec.tsx │ │ │ │ ├── Input.test.tsx │ │ │ │ ├── Input.tsx │ │ │ │ ├── InputDataAttributes.ts │ │ │ │ └── index.ts │ │ │ ├── labelable-provider/ │ │ │ │ ├── LabelableContext.ts │ │ │ │ ├── LabelableProvider.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── useAriaLabelledBy.ts │ │ │ │ ├── useLabel.ts │ │ │ │ └── useLabelableId.ts │ │ │ ├── localization-provider/ │ │ │ │ ├── LocalizationContext.ts │ │ │ │ ├── LocalizationProvider.tsx │ │ │ │ └── index.ts │ │ │ ├── menu/ │ │ │ │ ├── arrow/ │ │ │ │ │ ├── MenuArrow.test.tsx │ │ │ │ │ ├── MenuArrow.tsx │ │ │ │ │ └── MenuArrowDataAttributes.ts │ │ │ │ ├── backdrop/ │ │ │ │ │ ├── MenuBackdrop.test.tsx │ │ │ │ │ ├── MenuBackdrop.tsx │ │ │ │ │ └── MenuBackdropDataAttributes.ts │ │ │ │ ├── checkbox-item/ │ │ │ │ │ ├── MenuCheckboxItem.test.tsx │ │ │ │ │ ├── MenuCheckboxItem.tsx │ │ │ │ │ ├── MenuCheckboxItemContext.ts │ │ │ │ │ └── MenuCheckboxItemDataAttributes.ts │ │ │ │ ├── checkbox-item-indicator/ │ │ │ │ │ ├── MenuCheckboxItemIndicator.test.tsx │ │ │ │ │ ├── MenuCheckboxItemIndicator.tsx │ │ │ │ │ └── MenuCheckboxItemIndicatorDataAttributes.ts │ │ │ │ ├── group/ │ │ │ │ │ ├── MenuGroup.test.tsx │ │ │ │ │ ├── MenuGroup.tsx │ │ │ │ │ └── MenuGroupContext.ts │ │ │ │ ├── group-label/ │ │ │ │ │ ├── MenuGroupLabel.test.tsx │ │ │ │ │ └── MenuGroupLabel.tsx │ │ │ │ ├── index.parts.ts │ │ │ │ ├── index.ts │ │ │ │ ├── item/ │ │ │ │ │ ├── MenuItem.test.tsx │ │ │ │ │ ├── MenuItem.tsx │ │ │ │ │ ├── MenuItemDataAttributes.ts │ │ │ │ │ ├── useMenuItem.ts │ │ │ │ │ └── useMenuItemCommonProps.ts │ │ │ │ ├── link-item/ │ │ │ │ │ ├── MenuLinkItem.test.tsx │ │ │ │ │ ├── MenuLinkItem.tsx │ │ │ │ │ └── MenuLinkItemDataAttributes.ts │ │ │ │ ├── popup/ │ │ │ │ │ ├── MenuPopup.test.tsx │ │ │ │ │ ├── MenuPopup.tsx │ │ │ │ │ └── MenuPopupDataAttributes.ts │ │ │ │ ├── portal/ │ │ │ │ │ ├── MenuPortal.test.tsx │ │ │ │ │ ├── MenuPortal.tsx │ │ │ │ │ └── MenuPortalContext.ts │ │ │ │ ├── positioner/ │ │ │ │ │ ├── MenuPositioner.spec.tsx │ │ │ │ │ ├── MenuPositioner.test.tsx │ │ │ │ │ ├── MenuPositioner.tsx │ │ │ │ │ ├── MenuPositionerContext.ts │ │ │ │ │ ├── MenuPositionerCssVars.ts │ │ │ │ │ └── MenuPositionerDataAttributes.ts │ │ │ │ ├── radio-group/ │ │ │ │ │ ├── MenuRadioGroup.test.tsx │ │ │ │ │ ├── MenuRadioGroup.tsx │ │ │ │ │ └── MenuRadioGroupContext.ts │ │ │ │ ├── radio-item/ │ │ │ │ │ ├── MenuRadioItem.test.tsx │ │ │ │ │ ├── MenuRadioItem.tsx │ │ │ │ │ ├── MenuRadioItemContext.ts │ │ │ │ │ └── MenuRadioItemDataAttributes.ts │ │ │ │ ├── radio-item-indicator/ │ │ │ │ │ ├── MenuRadioItemIndicator.test.tsx │ │ │ │ │ ├── MenuRadioItemIndicator.tsx │ │ │ │ │ └── MenuRadioItemIndicatorDataAttributes.ts │ │ │ │ ├── root/ │ │ │ │ │ ├── MenuRoot.detached-triggers.test.tsx │ │ │ │ │ ├── MenuRoot.test.tsx │ │ │ │ │ ├── MenuRoot.tsx │ │ │ │ │ └── MenuRootContext.ts │ │ │ │ ├── store/ │ │ │ │ │ ├── MenuHandle.ts │ │ │ │ │ └── MenuStore.ts │ │ │ │ ├── submenu-root/ │ │ │ │ │ ├── MenuSubmenuRoot.tsx │ │ │ │ │ └── MenuSubmenuRootContext.ts │ │ │ │ ├── submenu-trigger/ │ │ │ │ │ ├── MenuSubmenuTrigger.test.tsx │ │ │ │ │ ├── MenuSubmenuTrigger.tsx │ │ │ │ │ └── MenuSubmenuTriggerDataAttributes.ts │ │ │ │ ├── trigger/ │ │ │ │ │ ├── MenuTrigger.test.tsx │ │ │ │ │ ├── MenuTrigger.tsx │ │ │ │ │ └── MenuTriggerDataAttributes.ts │ │ │ │ ├── utils/ │ │ │ │ │ ├── findRootOwnerId.ts │ │ │ │ │ ├── stateAttributesMapping.ts │ │ │ │ │ └── types.ts │ │ │ │ └── viewport/ │ │ │ │ ├── MenuViewport.test.tsx │ │ │ │ ├── MenuViewport.tsx │ │ │ │ ├── MenuViewportCssVars.ts │ │ │ │ └── MenuViewportDataAttributes.ts │ │ │ ├── menubar/ │ │ │ │ ├── Menubar.test.tsx │ │ │ │ ├── Menubar.tsx │ │ │ │ ├── MenubarContext.ts │ │ │ │ ├── MenubarDataAttributes.ts │ │ │ │ └── index.ts │ │ │ ├── merge-props/ │ │ │ │ ├── index.ts │ │ │ │ ├── mergeProps.test.ts │ │ │ │ └── mergeProps.ts │ │ │ ├── meter/ │ │ │ │ ├── index.parts.ts │ │ │ │ ├── index.ts │ │ │ │ ├── indicator/ │ │ │ │ │ ├── MeterIndicator.test.tsx │ │ │ │ │ └── MeterIndicator.tsx │ │ │ │ ├── label/ │ │ │ │ │ ├── MeterLabel.test.tsx │ │ │ │ │ └── MeterLabel.tsx │ │ │ │ ├── root/ │ │ │ │ │ ├── MeterRoot.test.tsx │ │ │ │ │ ├── MeterRoot.tsx │ │ │ │ │ └── MeterRootContext.ts │ │ │ │ ├── track/ │ │ │ │ │ ├── MeterTrack.test.tsx │ │ │ │ │ └── MeterTrack.tsx │ │ │ │ └── value/ │ │ │ │ ├── MeterValue.test.tsx │ │ │ │ └── MeterValue.tsx │ │ │ ├── navigation-menu/ │ │ │ │ ├── arrow/ │ │ │ │ │ ├── NavigationMenuArrow.test.tsx │ │ │ │ │ ├── NavigationMenuArrow.tsx │ │ │ │ │ └── NavigationMenuArrowDataAttributes.ts │ │ │ │ ├── backdrop/ │ │ │ │ │ ├── NavigationMenuBackdrop.test.tsx │ │ │ │ │ ├── NavigationMenuBackdrop.tsx │ │ │ │ │ └── NavigationMenuBackdropDataAttributes.ts │ │ │ │ ├── content/ │ │ │ │ │ ├── NavigationMenuContent.test.tsx │ │ │ │ │ ├── NavigationMenuContent.tsx │ │ │ │ │ └── NavigationMenuContentDataAttributes.ts │ │ │ │ ├── icon/ │ │ │ │ │ ├── NavigationMenuIcon.test.tsx │ │ │ │ │ └── NavigationMenuIcon.tsx │ │ │ │ ├── index.parts.ts │ │ │ │ ├── index.ts │ │ │ │ ├── item/ │ │ │ │ │ ├── NavigationMenuItem.test.tsx │ │ │ │ │ ├── NavigationMenuItem.tsx │ │ │ │ │ └── NavigationMenuItemContext.ts │ │ │ │ ├── link/ │ │ │ │ │ ├── NavigationMenuLink.test.tsx │ │ │ │ │ ├── NavigationMenuLink.tsx │ │ │ │ │ └── NavigationMenuLinkDataAttributes.ts │ │ │ │ ├── list/ │ │ │ │ │ ├── NavigationMenuDismissContext.ts │ │ │ │ │ ├── NavigationMenuList.test.tsx │ │ │ │ │ └── NavigationMenuList.tsx │ │ │ │ ├── popup/ │ │ │ │ │ ├── NavigationMenuPopup.test.tsx │ │ │ │ │ ├── NavigationMenuPopup.tsx │ │ │ │ │ ├── NavigationMenuPopupCssVars.ts │ │ │ │ │ └── NavigationMenuPopupDataAttributes.ts │ │ │ │ ├── portal/ │ │ │ │ │ ├── NavigationMenuPortal.test.tsx │ │ │ │ │ ├── NavigationMenuPortal.tsx │ │ │ │ │ └── NavigationMenuPortalContext.ts │ │ │ │ ├── positioner/ │ │ │ │ │ ├── NavigationMenuPositioner.test.tsx │ │ │ │ │ ├── NavigationMenuPositioner.tsx │ │ │ │ │ ├── NavigationMenuPositionerContext.ts │ │ │ │ │ ├── NavigationMenuPositionerCssVars.ts │ │ │ │ │ └── NavigationMenuPositionerDataAttributes.ts │ │ │ │ ├── root/ │ │ │ │ │ ├── NavigationMenuRoot.spec.tsx │ │ │ │ │ ├── NavigationMenuRoot.test.tsx │ │ │ │ │ ├── NavigationMenuRoot.tsx │ │ │ │ │ ├── NavigationMenuRoot.webkit.test.tsx │ │ │ │ │ └── NavigationMenuRootContext.ts │ │ │ │ ├── trigger/ │ │ │ │ │ ├── NavigationMenuTrigger.test.tsx │ │ │ │ │ ├── NavigationMenuTrigger.tsx │ │ │ │ │ └── NavigationMenuTriggerDataAttributes.ts │ │ │ │ ├── utils/ │ │ │ │ │ ├── constants.ts │ │ │ │ │ └── isOutsideMenuEvent.ts │ │ │ │ └── viewport/ │ │ │ │ ├── NavigationMenuViewport.test.tsx │ │ │ │ └── NavigationMenuViewport.tsx │ │ │ ├── number-field/ │ │ │ │ ├── decrement/ │ │ │ │ │ ├── NumberFieldDecrement.test.tsx │ │ │ │ │ ├── NumberFieldDecrement.tsx │ │ │ │ │ └── NumberFieldDecrementDataAttributes.ts │ │ │ │ ├── group/ │ │ │ │ │ ├── NumberFieldGroup.test.tsx │ │ │ │ │ ├── NumberFieldGroup.tsx │ │ │ │ │ └── NumberFieldGroupDataAttributes.ts │ │ │ │ ├── increment/ │ │ │ │ │ ├── NumberFieldIncrement.test.tsx │ │ │ │ │ ├── NumberFieldIncrement.tsx │ │ │ │ │ └── NumberFieldIncrementDataAttributes.ts │ │ │ │ ├── index.parts.ts │ │ │ │ ├── index.ts │ │ │ │ ├── input/ │ │ │ │ │ ├── NumberFieldInput.test.tsx │ │ │ │ │ ├── NumberFieldInput.tsx │ │ │ │ │ └── NumberFieldInputDataAttributes.ts │ │ │ │ ├── root/ │ │ │ │ │ ├── NumberFieldRoot.spec.tsx │ │ │ │ │ ├── NumberFieldRoot.test.tsx │ │ │ │ │ ├── NumberFieldRoot.tsx │ │ │ │ │ ├── NumberFieldRootContext.ts │ │ │ │ │ ├── NumberFieldRootDataAttributes.ts │ │ │ │ │ └── useNumberFieldButton.ts │ │ │ │ ├── scrub-area/ │ │ │ │ │ ├── NumberFieldScrubArea.test.tsx │ │ │ │ │ ├── NumberFieldScrubArea.tsx │ │ │ │ │ ├── NumberFieldScrubAreaContext.ts │ │ │ │ │ └── NumberFieldScrubAreaDataAttributes.ts │ │ │ │ ├── scrub-area-cursor/ │ │ │ │ │ ├── NumberFieldScrubAreaCursor.test.tsx │ │ │ │ │ ├── NumberFieldScrubAreaCursor.tsx │ │ │ │ │ └── NumberFieldScrubAreaCursorDataAttributes.ts │ │ │ │ └── utils/ │ │ │ │ ├── constants.ts │ │ │ │ ├── getViewportRect.ts │ │ │ │ ├── parse.test.ts │ │ │ │ ├── parse.ts │ │ │ │ ├── stateAttributesMapping.ts │ │ │ │ ├── subscribeToVisualViewportResize.ts │ │ │ │ ├── types.ts │ │ │ │ ├── validate.test.ts │ │ │ │ └── validate.ts │ │ │ ├── popover/ │ │ │ │ ├── arrow/ │ │ │ │ │ ├── PopoverArrow.test.tsx │ │ │ │ │ ├── PopoverArrow.tsx │ │ │ │ │ └── PopoverArrowDataAttributes.ts │ │ │ │ ├── backdrop/ │ │ │ │ │ ├── PopoverBackdrop.test.tsx │ │ │ │ │ ├── PopoverBackdrop.tsx │ │ │ │ │ └── PopoverBackdropDataAttributes.ts │ │ │ │ ├── close/ │ │ │ │ │ ├── PopoverClose.test.tsx │ │ │ │ │ └── PopoverClose.tsx │ │ │ │ ├── description/ │ │ │ │ │ ├── PopoverDescription.test.tsx │ │ │ │ │ └── PopoverDescription.tsx │ │ │ │ ├── index.parts.ts │ │ │ │ ├── index.ts │ │ │ │ ├── popup/ │ │ │ │ │ ├── PopoverPopup.test.tsx │ │ │ │ │ ├── PopoverPopup.tsx │ │ │ │ │ ├── PopoverPopupCssVars.ts │ │ │ │ │ └── PopoverPopupDataAttributes.ts │ │ │ │ ├── portal/ │ │ │ │ │ ├── PopoverPortal.test.tsx │ │ │ │ │ ├── PopoverPortal.tsx │ │ │ │ │ └── PopoverPortalContext.ts │ │ │ │ ├── positioner/ │ │ │ │ │ ├── PopoverPositioner.spec.tsx │ │ │ │ │ ├── PopoverPositioner.test.tsx │ │ │ │ │ ├── PopoverPositioner.tsx │ │ │ │ │ ├── PopoverPositionerContext.ts │ │ │ │ │ ├── PopoverPositionerCssVars.ts │ │ │ │ │ └── PopoverPositionerDataAttributes.ts │ │ │ │ ├── root/ │ │ │ │ │ ├── PopoverRoot.detached-triggers.test.tsx │ │ │ │ │ ├── PopoverRoot.spec.tsx │ │ │ │ │ ├── PopoverRoot.test.tsx │ │ │ │ │ ├── PopoverRoot.tsx │ │ │ │ │ └── PopoverRootContext.ts │ │ │ │ ├── store/ │ │ │ │ │ ├── PopoverHandle.ts │ │ │ │ │ └── PopoverStore.ts │ │ │ │ ├── title/ │ │ │ │ │ ├── PopoverTitle.test.tsx │ │ │ │ │ └── PopoverTitle.tsx │ │ │ │ ├── trigger/ │ │ │ │ │ ├── PopoverTrigger.test.tsx │ │ │ │ │ ├── PopoverTrigger.tsx │ │ │ │ │ └── PopoverTriggerDataAttributes.ts │ │ │ │ ├── utils/ │ │ │ │ │ └── constants.ts │ │ │ │ └── viewport/ │ │ │ │ ├── PopoverViewport.test.tsx │ │ │ │ ├── PopoverViewport.tsx │ │ │ │ ├── PopoverViewportCssVars.ts │ │ │ │ └── PopoverViewportDataAttributes.ts │ │ │ ├── preview-card/ │ │ │ │ ├── arrow/ │ │ │ │ │ ├── PreviewCardArrow.test.tsx │ │ │ │ │ ├── PreviewCardArrow.tsx │ │ │ │ │ └── PreviewCardArrowDataAttributes.ts │ │ │ │ ├── backdrop/ │ │ │ │ │ ├── PreviewCardBackdrop.test.tsx │ │ │ │ │ ├── PreviewCardBackdrop.tsx │ │ │ │ │ └── PreviewCardBackdropDataAttributes.ts │ │ │ │ ├── index.parts.ts │ │ │ │ ├── index.ts │ │ │ │ ├── popup/ │ │ │ │ │ ├── PreviewCardPopup.test.tsx │ │ │ │ │ ├── PreviewCardPopup.tsx │ │ │ │ │ └── PreviewCardPopupDataAttributes.ts │ │ │ │ ├── portal/ │ │ │ │ │ ├── PreviewCardPortal.test.tsx │ │ │ │ │ ├── PreviewCardPortal.tsx │ │ │ │ │ └── PreviewCardPortalContext.ts │ │ │ │ ├── positioner/ │ │ │ │ │ ├── PreviewCardPositioner.spec.tsx │ │ │ │ │ ├── PreviewCardPositioner.test.tsx │ │ │ │ │ ├── PreviewCardPositioner.tsx │ │ │ │ │ ├── PreviewCardPositionerContext.ts │ │ │ │ │ ├── PreviewCardPositionerCssVars.ts │ │ │ │ │ └── PreviewCardPositionerDataAttributes.ts │ │ │ │ ├── root/ │ │ │ │ │ ├── PreviewCardContext.ts │ │ │ │ │ ├── PreviewCardRoot.detached-triggers.test.tsx │ │ │ │ │ ├── PreviewCardRoot.spec.tsx │ │ │ │ │ ├── PreviewCardRoot.test.tsx │ │ │ │ │ └── PreviewCardRoot.tsx │ │ │ │ ├── store/ │ │ │ │ │ ├── PreviewCardHandle.ts │ │ │ │ │ └── PreviewCardStore.ts │ │ │ │ ├── trigger/ │ │ │ │ │ ├── PreviewCardTrigger.test.tsx │ │ │ │ │ ├── PreviewCardTrigger.tsx │ │ │ │ │ └── PreviewCardTriggerDataAttributes.ts │ │ │ │ ├── utils/ │ │ │ │ │ └── constants.ts │ │ │ │ └── viewport/ │ │ │ │ ├── PreviewCardViewport.test.tsx │ │ │ │ ├── PreviewCardViewport.tsx │ │ │ │ ├── PreviewCardViewportCssVars.ts │ │ │ │ └── PreviewCardViewportDataAttributes.ts │ │ │ ├── progress/ │ │ │ │ ├── index.parts.ts │ │ │ │ ├── index.ts │ │ │ │ ├── indicator/ │ │ │ │ │ ├── ProgressIndicator.test.tsx │ │ │ │ │ ├── ProgressIndicator.tsx │ │ │ │ │ └── ProgressIndicatorDataAttributes.ts │ │ │ │ ├── label/ │ │ │ │ │ ├── ProgressLabel.test.tsx │ │ │ │ │ ├── ProgressLabel.tsx │ │ │ │ │ └── ProgressLabelDataAttributes.ts │ │ │ │ ├── root/ │ │ │ │ │ ├── ProgressRoot.test.tsx │ │ │ │ │ ├── ProgressRoot.tsx │ │ │ │ │ ├── ProgressRootContext.tsx │ │ │ │ │ ├── ProgressRootDataAttributes.ts │ │ │ │ │ └── stateAttributesMapping.ts │ │ │ │ ├── track/ │ │ │ │ │ ├── ProgressTrack.test.tsx │ │ │ │ │ ├── ProgressTrack.tsx │ │ │ │ │ └── ProgressTrackDataAttributes.ts │ │ │ │ └── value/ │ │ │ │ ├── ProgressValue.test.tsx │ │ │ │ ├── ProgressValue.tsx │ │ │ │ └── ProgressValueDataAttributes.ts │ │ │ ├── radio/ │ │ │ │ ├── index.parts.ts │ │ │ │ ├── index.ts │ │ │ │ ├── indicator/ │ │ │ │ │ ├── RadioIndicator.test.tsx │ │ │ │ │ ├── RadioIndicator.tsx │ │ │ │ │ └── RadioIndicatorDataAttributes.ts │ │ │ │ ├── root/ │ │ │ │ │ ├── RadioRoot.spec.tsx │ │ │ │ │ ├── RadioRoot.test.tsx │ │ │ │ │ ├── RadioRoot.tsx │ │ │ │ │ ├── RadioRootContext.ts │ │ │ │ │ └── RadioRootDataAttributes.ts │ │ │ │ └── utils/ │ │ │ │ └── stateAttributesMapping.ts │ │ │ ├── radio-group/ │ │ │ │ ├── RadioGroup.spec.tsx │ │ │ │ ├── RadioGroup.test.tsx │ │ │ │ ├── RadioGroup.tsx │ │ │ │ ├── RadioGroupContext.ts │ │ │ │ ├── RadioGroupDataAttributes.ts │ │ │ │ └── index.ts │ │ │ ├── scroll-area/ │ │ │ │ ├── constants.ts │ │ │ │ ├── content/ │ │ │ │ │ ├── ScrollAreaContent.test.tsx │ │ │ │ │ └── ScrollAreaContent.tsx │ │ │ │ ├── corner/ │ │ │ │ │ ├── ScrollAreaCorner.test.tsx │ │ │ │ │ └── ScrollAreaCorner.tsx │ │ │ │ ├── index.parts.ts │ │ │ │ ├── index.ts │ │ │ │ ├── root/ │ │ │ │ │ ├── ScrollAreaRoot.test.tsx │ │ │ │ │ ├── ScrollAreaRoot.tsx │ │ │ │ │ ├── ScrollAreaRootContext.ts │ │ │ │ │ ├── ScrollAreaRootCssVars.ts │ │ │ │ │ ├── ScrollAreaRootDataAttributes.ts │ │ │ │ │ └── stateAttributes.ts │ │ │ │ ├── scrollbar/ │ │ │ │ │ ├── ScrollAreaScrollbar.test.tsx │ │ │ │ │ ├── ScrollAreaScrollbar.tsx │ │ │ │ │ ├── ScrollAreaScrollbarContext.ts │ │ │ │ │ ├── ScrollAreaScrollbarCssVars.ts │ │ │ │ │ └── ScrollAreaScrollbarDataAttributes.ts │ │ │ │ ├── thumb/ │ │ │ │ │ ├── ScrollAreaThumb.test.tsx │ │ │ │ │ ├── ScrollAreaThumb.tsx │ │ │ │ │ └── ScrollAreaThumbDataAttributes.ts │ │ │ │ ├── utils/ │ │ │ │ │ ├── getOffset.ts │ │ │ │ │ ├── scrollEdges.test.ts │ │ │ │ │ └── scrollEdges.ts │ │ │ │ └── viewport/ │ │ │ │ ├── ScrollAreaViewport.test.tsx │ │ │ │ ├── ScrollAreaViewport.tsx │ │ │ │ ├── ScrollAreaViewportContext.ts │ │ │ │ ├── ScrollAreaViewportCssVars.ts │ │ │ │ └── ScrollAreaViewportDataAttributes.ts │ │ │ ├── select/ │ │ │ │ ├── arrow/ │ │ │ │ │ ├── SelectArrow.test.tsx │ │ │ │ │ ├── SelectArrow.tsx │ │ │ │ │ └── SelectArrowDataAttributes.ts │ │ │ │ ├── backdrop/ │ │ │ │ │ ├── SelectBackdrop.test.tsx │ │ │ │ │ ├── SelectBackdrop.tsx │ │ │ │ │ └── SelectBackdropDataAttributes.ts │ │ │ │ ├── group/ │ │ │ │ │ ├── SelectGroup.test.tsx │ │ │ │ │ ├── SelectGroup.tsx │ │ │ │ │ └── SelectGroupContext.ts │ │ │ │ ├── group-label/ │ │ │ │ │ ├── SelectGroupLabel.test.tsx │ │ │ │ │ └── SelectGroupLabel.tsx │ │ │ │ ├── icon/ │ │ │ │ │ ├── SelectIcon.test.tsx │ │ │ │ │ ├── SelectIcon.tsx │ │ │ │ │ └── SelectIconDataAttributes.ts │ │ │ │ ├── index.parts.ts │ │ │ │ ├── index.ts │ │ │ │ ├── item/ │ │ │ │ │ ├── SelectItem.test.tsx │ │ │ │ │ ├── SelectItem.tsx │ │ │ │ │ ├── SelectItemContext.ts │ │ │ │ │ └── SelectItemDataAttributes.ts │ │ │ │ ├── item-indicator/ │ │ │ │ │ ├── SelectItemIndicator.test.tsx │ │ │ │ │ ├── SelectItemIndicator.tsx │ │ │ │ │ └── SelectItemIndicatorDataAttributes.ts │ │ │ │ ├── item-text/ │ │ │ │ │ ├── SelectItemText.test.tsx │ │ │ │ │ └── SelectItemText.tsx │ │ │ │ ├── label/ │ │ │ │ │ ├── SelectLabel.test.tsx │ │ │ │ │ └── SelectLabel.tsx │ │ │ │ ├── list/ │ │ │ │ │ ├── SelectList.test.tsx │ │ │ │ │ └── SelectList.tsx │ │ │ │ ├── popup/ │ │ │ │ │ ├── SelectPopup.test.tsx │ │ │ │ │ ├── SelectPopup.tsx │ │ │ │ │ ├── SelectPopupDataAttributes.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── portal/ │ │ │ │ │ ├── SelectPortal.test.tsx │ │ │ │ │ ├── SelectPortal.tsx │ │ │ │ │ └── SelectPortalContext.ts │ │ │ │ ├── positioner/ │ │ │ │ │ ├── SelectPositioner.spec.tsx │ │ │ │ │ ├── SelectPositioner.test.tsx │ │ │ │ │ ├── SelectPositioner.tsx │ │ │ │ │ ├── SelectPositionerContext.ts │ │ │ │ │ ├── SelectPositionerCssVars.ts │ │ │ │ │ └── SelectPositionerDataAttributes.ts │ │ │ │ ├── root/ │ │ │ │ │ ├── SelectRoot.spec.tsx │ │ │ │ │ ├── SelectRoot.test.tsx │ │ │ │ │ ├── SelectRoot.tsx │ │ │ │ │ └── SelectRootContext.ts │ │ │ │ ├── scroll-arrow/ │ │ │ │ │ └── SelectScrollArrow.tsx │ │ │ │ ├── scroll-down-arrow/ │ │ │ │ │ ├── SelectScrollDownArrow.test.tsx │ │ │ │ │ ├── SelectScrollDownArrow.tsx │ │ │ │ │ └── SelectScrollDownArrowDataAttributes.ts │ │ │ │ ├── scroll-up-arrow/ │ │ │ │ │ ├── SelectScrollUpArrow.test.tsx │ │ │ │ │ ├── SelectScrollUpArrow.tsx │ │ │ │ │ └── SelectScrollUpArrowDataAttributes.ts │ │ │ │ ├── store.ts │ │ │ │ ├── trigger/ │ │ │ │ │ ├── SelectTrigger.test.tsx │ │ │ │ │ ├── SelectTrigger.tsx │ │ │ │ │ └── SelectTriggerDataAttributes.ts │ │ │ │ └── value/ │ │ │ │ ├── SelectValue.test.tsx │ │ │ │ ├── SelectValue.tsx │ │ │ │ └── SelectValueDataAttributes.ts │ │ │ ├── separator/ │ │ │ │ ├── Separator.test.tsx │ │ │ │ ├── Separator.tsx │ │ │ │ └── index.ts │ │ │ ├── slider/ │ │ │ │ ├── control/ │ │ │ │ │ ├── SliderControl.test.tsx │ │ │ │ │ ├── SliderControl.tsx │ │ │ │ │ └── SliderControlDataAttributes.ts │ │ │ │ ├── index.parts.ts │ │ │ │ ├── index.ts │ │ │ │ ├── indicator/ │ │ │ │ │ ├── SliderIndicator.test.tsx │ │ │ │ │ ├── SliderIndicator.tsx │ │ │ │ │ └── SliderIndicatorDataAttributes.ts │ │ │ │ ├── label/ │ │ │ │ │ ├── SliderLabel.test.tsx │ │ │ │ │ └── SliderLabel.tsx │ │ │ │ ├── root/ │ │ │ │ │ ├── SliderRoot.spec.tsx │ │ │ │ │ ├── SliderRoot.test.tsx │ │ │ │ │ ├── SliderRoot.tsx │ │ │ │ │ ├── SliderRootContext.ts │ │ │ │ │ ├── SliderRootDataAttributes.ts │ │ │ │ │ └── stateAttributesMapping.ts │ │ │ │ ├── thumb/ │ │ │ │ │ ├── SliderThumb.test.tsx │ │ │ │ │ ├── SliderThumb.tsx │ │ │ │ │ ├── SliderThumbDataAttributes.ts │ │ │ │ │ ├── prehydrationScript.min.ts │ │ │ │ │ └── prehydrationScript.template.js │ │ │ │ ├── track/ │ │ │ │ │ ├── SliderTrack.test.tsx │ │ │ │ │ ├── SliderTrack.tsx │ │ │ │ │ └── SliderTrackDataAttributes.ts │ │ │ │ ├── utils/ │ │ │ │ │ ├── asc.ts │ │ │ │ │ ├── getMidpoint.ts │ │ │ │ │ ├── getPushedThumbValues.test.ts │ │ │ │ │ ├── getPushedThumbValues.ts │ │ │ │ │ ├── getSliderValue.ts │ │ │ │ │ ├── replaceArrayItemAtIndex.ts │ │ │ │ │ ├── resolveThumbCollision.test.ts │ │ │ │ │ ├── resolveThumbCollision.ts │ │ │ │ │ ├── roundValueToStep.ts │ │ │ │ │ ├── test-utils.ts │ │ │ │ │ ├── validateMinimumDistance.ts │ │ │ │ │ └── valueArrayToPercentages.ts │ │ │ │ └── value/ │ │ │ │ ├── SliderValue.test.tsx │ │ │ │ ├── SliderValue.tsx │ │ │ │ └── SliderValueDataAttributes.ts │ │ │ ├── switch/ │ │ │ │ ├── index.parts.ts │ │ │ │ ├── index.ts │ │ │ │ ├── root/ │ │ │ │ │ ├── SwitchRoot.test.tsx │ │ │ │ │ ├── SwitchRoot.tsx │ │ │ │ │ ├── SwitchRootContext.ts │ │ │ │ │ └── SwitchRootDataAttributes.ts │ │ │ │ ├── stateAttributesMapping.ts │ │ │ │ └── thumb/ │ │ │ │ ├── SwitchThumb.test.tsx │ │ │ │ ├── SwitchThumb.tsx │ │ │ │ └── SwitchThumbDataAttributes.ts │ │ │ ├── tabs/ │ │ │ │ ├── index.parts.ts │ │ │ │ ├── index.ts │ │ │ │ ├── indicator/ │ │ │ │ │ ├── TabsIndicator.test.tsx │ │ │ │ │ ├── TabsIndicator.tsx │ │ │ │ │ ├── TabsIndicatorCssVars.ts │ │ │ │ │ ├── TabsIndicatorDataAttributes.ts │ │ │ │ │ ├── prehydrationScript.min.ts │ │ │ │ │ └── prehydrationScript.template.js │ │ │ │ ├── list/ │ │ │ │ │ ├── TabsList.test.tsx │ │ │ │ │ ├── TabsList.tsx │ │ │ │ │ ├── TabsListContext.ts │ │ │ │ │ └── TabsListDataAttributes.ts │ │ │ │ ├── panel/ │ │ │ │ │ ├── TabsPanel.test.tsx │ │ │ │ │ ├── TabsPanel.tsx │ │ │ │ │ └── TabsPanelDataAttributes.ts │ │ │ │ ├── root/ │ │ │ │ │ ├── TabsRoot.test.tsx │ │ │ │ │ ├── TabsRoot.tsx │ │ │ │ │ ├── TabsRootContext.ts │ │ │ │ │ ├── TabsRootDataAttributes.ts │ │ │ │ │ └── stateAttributesMapping.ts │ │ │ │ └── tab/ │ │ │ │ ├── TabsTab.test.tsx │ │ │ │ ├── TabsTab.tsx │ │ │ │ └── TabsTabDataAttributes.ts │ │ │ ├── temporal-adapter-date-fns/ │ │ │ │ ├── TemporalAdapterDateFns.test.ts │ │ │ │ ├── TemporalAdapterDateFns.ts │ │ │ │ └── index.ts │ │ │ ├── temporal-adapter-luxon/ │ │ │ │ ├── TemporalAdapterLuxon.test.ts │ │ │ │ ├── TemporalAdapterLuxon.ts │ │ │ │ └── index.ts │ │ │ ├── temporal-adapter-provider/ │ │ │ │ ├── TemporalAdapterContext.ts │ │ │ │ ├── TemporalAdapterProvider.tsx │ │ │ │ └── index.ts │ │ │ ├── toast/ │ │ │ │ ├── action/ │ │ │ │ │ ├── ToastAction.test.tsx │ │ │ │ │ ├── ToastAction.tsx │ │ │ │ │ └── ToastActionDataAttributes.ts │ │ │ │ ├── arrow/ │ │ │ │ │ ├── ToastArrow.test.tsx │ │ │ │ │ ├── ToastArrow.tsx │ │ │ │ │ └── ToastArrowDataAttributes.ts │ │ │ │ ├── close/ │ │ │ │ │ ├── ToastClose.test.tsx │ │ │ │ │ ├── ToastClose.tsx │ │ │ │ │ └── ToastCloseDataAttributes.ts │ │ │ │ ├── content/ │ │ │ │ │ ├── ToastContent.tsx │ │ │ │ │ └── ToastContentDataAttributes.ts │ │ │ │ ├── createToastManager.spec.tsx │ │ │ │ ├── createToastManager.test.tsx │ │ │ │ ├── createToastManager.ts │ │ │ │ ├── description/ │ │ │ │ │ ├── ToastDescription.test.tsx │ │ │ │ │ ├── ToastDescription.tsx │ │ │ │ │ └── ToastDescriptionDataAttributes.ts │ │ │ │ ├── index.parts.ts │ │ │ │ ├── index.ts │ │ │ │ ├── portal/ │ │ │ │ │ ├── ToastPortal.test.tsx │ │ │ │ │ └── ToastPortal.tsx │ │ │ │ ├── positioner/ │ │ │ │ │ ├── ToastPositioner.test.tsx │ │ │ │ │ ├── ToastPositioner.tsx │ │ │ │ │ ├── ToastPositionerContext.ts │ │ │ │ │ ├── ToastPositionerCssVars.ts │ │ │ │ │ └── ToastPositionerDataAttributes.ts │ │ │ │ ├── provider/ │ │ │ │ │ ├── ToastProvider.tsx │ │ │ │ │ └── ToastProviderContext.ts │ │ │ │ ├── root/ │ │ │ │ │ ├── ToastRoot.test.tsx │ │ │ │ │ ├── ToastRoot.tsx │ │ │ │ │ ├── ToastRootContext.ts │ │ │ │ │ ├── ToastRootCssVars.ts │ │ │ │ │ └── ToastRootDataAttributes.ts │ │ │ │ ├── store.ts │ │ │ │ ├── title/ │ │ │ │ │ ├── ToastTitle.test.tsx │ │ │ │ │ ├── ToastTitle.tsx │ │ │ │ │ └── ToastTitleDataAttributes.ts │ │ │ │ ├── useToastManager.spec.tsx │ │ │ │ ├── useToastManager.test.tsx │ │ │ │ ├── useToastManager.ts │ │ │ │ ├── utils/ │ │ │ │ │ ├── focusVisible.ts │ │ │ │ │ ├── resolvePromiseOptions.ts │ │ │ │ │ └── test-utils.tsx │ │ │ │ └── viewport/ │ │ │ │ ├── ToastViewport.test.tsx │ │ │ │ ├── ToastViewport.tsx │ │ │ │ ├── ToastViewportCssVars.ts │ │ │ │ └── ToastViewportDataAttributes.ts │ │ │ ├── toggle/ │ │ │ │ ├── Toggle.test.tsx │ │ │ │ ├── Toggle.tsx │ │ │ │ ├── ToggleDataAttributes.ts │ │ │ │ └── index.ts │ │ │ ├── toggle-group/ │ │ │ │ ├── ToggleGroup.spec.tsx │ │ │ │ ├── ToggleGroup.test.tsx │ │ │ │ ├── ToggleGroup.tsx │ │ │ │ ├── ToggleGroupContext.ts │ │ │ │ ├── ToggleGroupDataAttributes.ts │ │ │ │ └── index.ts │ │ │ ├── toolbar/ │ │ │ │ ├── button/ │ │ │ │ │ ├── ToolbarButton.test.tsx │ │ │ │ │ ├── ToolbarButton.tsx │ │ │ │ │ └── ToolbarButtonDataAttributes.ts │ │ │ │ ├── group/ │ │ │ │ │ ├── ToolbarGroup.test.tsx │ │ │ │ │ ├── ToolbarGroup.tsx │ │ │ │ │ ├── ToolbarGroupContext.ts │ │ │ │ │ └── ToolbarGroupDataAttributes.ts │ │ │ │ ├── index.parts.ts │ │ │ │ ├── index.ts │ │ │ │ ├── input/ │ │ │ │ │ ├── ToolbarInput.test.tsx │ │ │ │ │ ├── ToolbarInput.tsx │ │ │ │ │ └── ToolbarInputDataAttributes.ts │ │ │ │ ├── link/ │ │ │ │ │ ├── ToolbarLink.test.tsx │ │ │ │ │ ├── ToolbarLink.tsx │ │ │ │ │ └── ToolbarLinkDataAttributes.ts │ │ │ │ ├── root/ │ │ │ │ │ ├── ToolbarRoot.test.tsx │ │ │ │ │ ├── ToolbarRoot.tsx │ │ │ │ │ ├── ToolbarRootContext.ts │ │ │ │ │ └── ToolbarRootDataAttributes.ts │ │ │ │ └── separator/ │ │ │ │ ├── ToolbarSeparator.tsx │ │ │ │ └── ToolbarSeparatorDataAttributes.ts │ │ │ ├── tooltip/ │ │ │ │ ├── arrow/ │ │ │ │ │ ├── TooltipArrow.test.tsx │ │ │ │ │ ├── TooltipArrow.tsx │ │ │ │ │ └── TooltipArrowDataAttributes.ts │ │ │ │ ├── index.parts.ts │ │ │ │ ├── index.ts │ │ │ │ ├── popup/ │ │ │ │ │ ├── TooltipPopup.test.tsx │ │ │ │ │ ├── TooltipPopup.tsx │ │ │ │ │ └── TooltipPopupDataAttributes.ts │ │ │ │ ├── portal/ │ │ │ │ │ ├── TooltipPortal.test.tsx │ │ │ │ │ ├── TooltipPortal.tsx │ │ │ │ │ └── TooltipPortalContext.ts │ │ │ │ ├── positioner/ │ │ │ │ │ ├── TooltipPositioner.spec.tsx │ │ │ │ │ ├── TooltipPositioner.test.tsx │ │ │ │ │ ├── TooltipPositioner.tsx │ │ │ │ │ ├── TooltipPositionerContext.ts │ │ │ │ │ ├── TooltipPositionerCssVars.ts │ │ │ │ │ └── TooltipPositionerDataAttributes.ts │ │ │ │ ├── provider/ │ │ │ │ │ ├── TooltipProvider.test.tsx │ │ │ │ │ ├── TooltipProvider.tsx │ │ │ │ │ └── TooltipProviderContext.ts │ │ │ │ ├── root/ │ │ │ │ │ ├── TooltipRoot.detached-triggers.test.tsx │ │ │ │ │ ├── TooltipRoot.test.tsx │ │ │ │ │ ├── TooltipRoot.tsx │ │ │ │ │ └── TooltipRootContext.ts │ │ │ │ ├── store/ │ │ │ │ │ ├── TooltipHandle.ts │ │ │ │ │ └── TooltipStore.ts │ │ │ │ ├── trigger/ │ │ │ │ │ ├── TooltipTrigger.spec.tsx │ │ │ │ │ ├── TooltipTrigger.test.tsx │ │ │ │ │ ├── TooltipTrigger.tsx │ │ │ │ │ └── TooltipTriggerDataAttributes.ts │ │ │ │ ├── utils/ │ │ │ │ │ └── constants.ts │ │ │ │ └── viewport/ │ │ │ │ ├── TooltipViewport.test.tsx │ │ │ │ ├── TooltipViewport.tsx │ │ │ │ ├── TooltipViewportCssVars.ts │ │ │ │ └── TooltipViewportDataAttributes.ts │ │ │ ├── types/ │ │ │ │ ├── index.ts │ │ │ │ └── temporal/ │ │ │ │ ├── index.ts │ │ │ │ ├── temporal-adapter.ts │ │ │ │ └── temporal.ts │ │ │ ├── unstable-use-media-query/ │ │ │ │ └── index.ts │ │ │ ├── use-button/ │ │ │ │ ├── index.ts │ │ │ │ ├── useButton.test.tsx │ │ │ │ └── useButton.ts │ │ │ ├── use-render/ │ │ │ │ ├── index.ts │ │ │ │ ├── useRender.spec.tsx │ │ │ │ ├── useRender.test.tsx │ │ │ │ └── useRender.ts │ │ │ └── utils/ │ │ │ ├── FloatingPortalLite.tsx │ │ │ ├── FocusGuard.tsx │ │ │ ├── InternalBackdrop.tsx │ │ │ ├── adaptiveOriginMiddleware.ts │ │ │ ├── areArraysEqual.ts │ │ │ ├── clamp.test.ts │ │ │ ├── clamp.ts │ │ │ ├── closePart.tsx │ │ │ ├── collapsibleOpenStateMapping.ts │ │ │ ├── constants.ts │ │ │ ├── createBaseUIEventDetails.spec.ts │ │ │ ├── createBaseUIEventDetails.ts │ │ │ ├── formatNumber.test.ts │ │ │ ├── formatNumber.ts │ │ │ ├── getCssDimensions.ts │ │ │ ├── getDisabledMountTransitionStyles.ts │ │ │ ├── getElementAtPoint.ts │ │ │ ├── getPseudoElementBounds.ts │ │ │ ├── getStateAttributesProps.test.ts │ │ │ ├── getStateAttributesProps.ts │ │ │ ├── hideMiddleware.ts │ │ │ ├── itemEquality.ts │ │ │ ├── noop.ts │ │ │ ├── popupStateMapping.ts │ │ │ ├── popups/ │ │ │ │ ├── index.ts │ │ │ │ ├── popupStoreUtils.test.tsx │ │ │ │ ├── popupStoreUtils.ts │ │ │ │ ├── popupTriggerMap.test.ts │ │ │ │ ├── popupTriggerMap.ts │ │ │ │ └── store.ts │ │ │ ├── reason-parts.ts │ │ │ ├── reasons.ts │ │ │ ├── resolveAriaLabelledBy.ts │ │ │ ├── resolveClassName.ts │ │ │ ├── resolveRef.ts │ │ │ ├── resolveStyle.ts │ │ │ ├── resolveValueLabel.test.ts │ │ │ ├── resolveValueLabel.tsx │ │ │ ├── scrollable.ts │ │ │ ├── serializeValue.ts │ │ │ ├── stateAttributesMapping.ts │ │ │ ├── styles.tsx │ │ │ ├── temporal/ │ │ │ │ ├── date-helpers.ts │ │ │ │ ├── getDateManager.ts │ │ │ │ ├── getInitialReferenceDate.test.ts │ │ │ │ ├── getInitialReferenceDate.ts │ │ │ │ ├── types.ts │ │ │ │ ├── validateDate.test.tsx │ │ │ │ └── validateDate.ts │ │ │ ├── types.ts │ │ │ ├── useAnchorPositioning.ts │ │ │ ├── useAnimationsFinished.ts │ │ │ ├── useBaseUiId.ts │ │ │ ├── useFocusableWhenDisabled.ts │ │ │ ├── useMixedToggleClickHandler.ts │ │ │ ├── useOpenChangeComplete.tsx │ │ │ ├── useOpenInteractionType.ts │ │ │ ├── usePopupAutoResize.ts │ │ │ ├── usePopupViewport.tsx │ │ │ ├── usePressAndHold.ts │ │ │ ├── useRegisteredLabelId.ts │ │ │ ├── useRenderElement.spec.tsx │ │ │ ├── useRenderElement.test.tsx │ │ │ ├── useRenderElement.tsx │ │ │ ├── useSwipeDismiss.test.tsx │ │ │ ├── useSwipeDismiss.ts │ │ │ ├── useTransitionStatus.d.ts │ │ │ ├── useTransitionStatus.ts │ │ │ ├── useValueChanged.ts │ │ │ └── valueToPercent.ts │ │ ├── test/ │ │ │ ├── addVitestMatchers.ts │ │ │ ├── conformanceTests/ │ │ │ │ ├── className.tsx │ │ │ │ ├── propForwarding.tsx │ │ │ │ ├── refForwarding.tsx │ │ │ │ ├── renderProp.tsx │ │ │ │ └── utils.ts │ │ │ ├── createRenderer.ts │ │ │ ├── describeConformance.tsx │ │ │ ├── describeGregorianAdapter/ │ │ │ │ ├── describeGregorianAdapter.ts │ │ │ │ ├── describeGregorianAdapter.types.ts │ │ │ │ ├── describeGregorianAdapter.utils.ts │ │ │ │ ├── index.ts │ │ │ │ ├── testComputations.ts │ │ │ │ ├── testFormats.ts │ │ │ │ └── testLocalization.ts │ │ │ ├── floating-ui-tests/ │ │ │ │ ├── Button.module.css │ │ │ │ ├── Button.tsx │ │ │ │ ├── ComplexGrid.module.css │ │ │ │ ├── ComplexGrid.tsx │ │ │ │ ├── EmojiPicker.module.css │ │ │ │ ├── EmojiPicker.tsx │ │ │ │ ├── Grid.module.css │ │ │ │ ├── Grid.tsx │ │ │ │ ├── ListboxFocus.tsx │ │ │ │ ├── Menu.module.css │ │ │ │ ├── Menu.tsx │ │ │ │ ├── MenuOrientation.module.css │ │ │ │ ├── MenuOrientation.tsx │ │ │ │ ├── Navigation.module.css │ │ │ │ ├── Navigation.tsx │ │ │ │ ├── Popover.module.css │ │ │ │ └── Popover.tsx │ │ │ ├── index.ts │ │ │ ├── popupConformanceTests.tsx │ │ │ ├── temporal.tsx │ │ │ ├── types.d.ts │ │ │ └── wait.ts │ │ ├── tsconfig.build.json │ │ ├── tsconfig.json │ │ ├── tsconfig.test.json │ │ ├── vitest-env.d.ts │ │ └── vitest.config.mts │ └── utils/ │ ├── .npmignore │ ├── CHANGELOG.md │ ├── MAINTAINERS.md │ ├── README.md │ ├── package.json │ ├── src/ │ │ ├── detectBrowser.ts │ │ ├── empty.ts │ │ ├── error.ts │ │ ├── fastHooks.ts │ │ ├── fastObjectShallowCompare.ts │ │ ├── formatErrorMessage.test.ts │ │ ├── formatErrorMessage.ts │ │ ├── generateId.ts │ │ ├── getReactElementRef.test.tsx │ │ ├── getReactElementRef.ts │ │ ├── inertValue.ts │ │ ├── isElementDisabled.ts │ │ ├── isMouseWithinBounds.ts │ │ ├── mergeObjects.ts │ │ ├── owner.ts │ │ ├── reactVersion.ts │ │ ├── safeReact.ts │ │ ├── store/ │ │ │ ├── ReactStore.spec.ts │ │ │ ├── ReactStore.test.tsx │ │ │ ├── ReactStore.ts │ │ │ ├── Store.ts │ │ │ ├── StoreInspector.tsx │ │ │ ├── createSelector.ts │ │ │ ├── index.ts │ │ │ └── useStore.ts │ │ ├── testUtils.ts │ │ ├── useAnimationFrame.ts │ │ ├── useControlled.test.tsx │ │ ├── useControlled.ts │ │ ├── useEnhancedClickHandler.ts │ │ ├── useForcedRerendering.ts │ │ ├── useId.test.tsx │ │ ├── useId.ts │ │ ├── useInterval.ts │ │ ├── useIsoLayoutEffect.ts │ │ ├── useMergedRefs.test.tsx │ │ ├── useMergedRefs.ts │ │ ├── useOnFirstRender.ts │ │ ├── useOnMount.ts │ │ ├── usePreviousValue.test.tsx │ │ ├── usePreviousValue.ts │ │ ├── useRefWithInit.ts │ │ ├── useScrollLock.ts │ │ ├── useStableCallback.ts │ │ ├── useTimeout.ts │ │ ├── useValueAsRef.ts │ │ ├── visuallyHidden.ts │ │ └── warn.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ ├── tsconfig.test.json │ └── vitest.config.mts ├── playground/ │ └── vite-app/ │ ├── .gitignore │ ├── README.md │ ├── index.html │ ├── package.json │ ├── src/ │ │ ├── Home.tsx │ │ ├── experiments/ │ │ │ └── perf/ │ │ │ ├── SettingsPanel.tsx │ │ │ ├── contained-triggers.tsx │ │ │ ├── detached-triggers.tsx │ │ │ ├── perf.module.css │ │ │ ├── radix-triggers.tsx │ │ │ └── utils/ │ │ │ └── benchmark.tsx │ │ ├── index.css │ │ ├── index.tsx │ │ └── routes.tsx │ ├── tsconfig.app.json │ ├── tsconfig.json │ ├── tsconfig.node.json │ └── vite.config.ts ├── pnpm-workspace.yaml ├── prettier.config.mjs ├── renovate.json ├── scripts/ │ ├── README.md │ ├── api-docs-builder/ │ │ ├── package.json │ │ └── src/ │ │ ├── componentHandler.ts │ │ ├── formatter.ts │ │ ├── hookHandler.ts │ │ ├── index.ts │ │ ├── order.json │ │ └── utilityHandler.ts │ ├── changelog.config.mjs │ ├── inlineScripts.mts │ └── tsconfig.json ├── stylelint.config.mjs ├── test/ │ ├── README.md │ ├── bundle-size/ │ │ ├── bundle-size-checker.config.mjs │ │ └── package.json │ ├── e2e/ │ │ ├── README.md │ │ ├── TestViewer.tsx │ │ ├── fixtures/ │ │ │ ├── .gitkeep │ │ │ ├── Radio.module.css │ │ │ ├── Radio.tsx │ │ │ ├── field/ │ │ │ │ └── validate-on-change/ │ │ │ │ ├── Input.module.css │ │ │ │ ├── Input.tsx │ │ │ │ ├── Select.module.css │ │ │ │ └── Select.tsx │ │ │ ├── menu/ │ │ │ │ ├── LinkItemNavigation.module.css │ │ │ │ ├── LinkItemNavigation.tsx │ │ │ │ ├── PageOne.tsx │ │ │ │ ├── PageTwo.tsx │ │ │ │ └── ReactRouterLinkItemNavigation.tsx │ │ │ └── slider/ │ │ │ ├── Inset.module.css │ │ │ ├── Inset.tsx │ │ │ ├── Range.module.css │ │ │ ├── Range.tsx │ │ │ ├── RangeSliderMax.module.css │ │ │ └── RangeSliderMax.tsx │ │ ├── index.html │ │ ├── index.test.ts │ │ ├── main.tsx │ │ ├── postcss.config.js │ │ ├── serve.json │ │ ├── vite.config.mjs │ │ └── vitest.config.mts │ ├── node-resolution/ │ │ ├── index.mjs │ │ └── package.json │ ├── package.json │ ├── public-types/ │ │ ├── autocomplete.tsx │ │ ├── checkbox.tsx │ │ ├── combobox.tsx │ │ ├── index.tsx │ │ ├── menu.tsx │ │ ├── package.json │ │ ├── separator.tsx │ │ ├── toast.tsx │ │ ├── tsconfig.json │ │ └── use-render.tsx │ ├── regressions/ │ │ ├── README.md │ │ ├── TestViewer.tsx │ │ ├── fakeDateSetup.ts │ │ ├── fixtures/ │ │ │ └── .gitkeep │ │ ├── fixtures.ts │ │ ├── index.html │ │ ├── index.test.ts │ │ ├── main.tsx │ │ ├── manual/ │ │ │ └── README.md │ │ ├── postcss.config.js │ │ ├── serve.json │ │ ├── vite.config.mjs │ │ └── vitest.config.mts │ ├── setupVitest.ts │ ├── tsconfig.json │ ├── vite.d.ts │ └── vite.shared.config.mjs ├── tsconfig.base.json ├── tsconfig.json ├── vitest.config.mts └── vitest.shared.mts ================================================ FILE CONTENTS ================================================ ================================================ FILE: .browserslistrc ================================================ # `npx browserslist --mobile-to-desktop "baseline widely available"` when the last major is released. # On update, sync references where "#stable-snapshot" is mentioned in the codebase. [stable] and_chr 141 and_chr 140 and_chr 139 and_chr 138 and_chr 137 and_chr 136 and_chr 135 and_chr 134 and_chr 133 and_chr 132 and_chr 131 and_chr 130 and_chr 129 and_chr 128 and_chr 127 and_chr 126 and_chr 125 and_chr 124 and_chr 123 and_chr 122 and_chr 121 and_chr 120 and_chr 119 and_chr 118 and_chr 117 and_chr 116 and_chr 115 and_chr 114 and_chr 113 and_chr 112 and_chr 111 and_ff 144 and_ff 143 and_ff 142 and_ff 141 and_ff 140 and_ff 139 and_ff 138 and_ff 137 and_ff 136 and_ff 135 and_ff 134 and_ff 133 and_ff 132 and_ff 131 and_ff 130 and_ff 129 and_ff 128 and_ff 127 and_ff 126 and_ff 125 and_ff 124 and_ff 123 and_ff 122 and_ff 121 and_ff 120 and_ff 119 and_ff 118 and_ff 117 and_ff 116 and_ff 115 and_ff 114 and_ff 113 chrome 141 chrome 140 chrome 139 chrome 138 chrome 137 chrome 136 chrome 135 chrome 134 chrome 133 chrome 132 chrome 131 chrome 130 chrome 129 chrome 128 chrome 127 chrome 126 chrome 125 chrome 124 chrome 123 chrome 122 chrome 121 chrome 120 chrome 119 chrome 118 chrome 117 chrome 116 chrome 115 chrome 114 chrome 113 chrome 112 chrome 111 edge 141 edge 140 edge 139 edge 138 edge 137 edge 136 edge 135 edge 134 edge 133 edge 132 edge 131 edge 130 edge 129 edge 128 edge 127 edge 126 edge 125 edge 124 edge 123 edge 122 edge 121 edge 120 edge 119 edge 118 edge 117 edge 116 edge 115 edge 114 edge 113 edge 112 edge 111 firefox 144 firefox 143 firefox 142 firefox 141 firefox 140 firefox 139 firefox 138 firefox 137 firefox 136 firefox 135 firefox 134 firefox 133 firefox 132 firefox 131 firefox 130 firefox 129 firefox 128 firefox 127 firefox 126 firefox 125 firefox 124 firefox 123 firefox 122 firefox 121 firefox 120 firefox 119 firefox 118 firefox 117 firefox 116 firefox 115 firefox 114 firefox 113 ios_saf 26.0 ios_saf 18.5-18.6 ios_saf 18.4 ios_saf 18.3 ios_saf 18.2 ios_saf 18.1 ios_saf 18.0 ios_saf 17.6-17.7 ios_saf 17.5 ios_saf 17.4 ios_saf 17.3 ios_saf 17.2 ios_saf 17.1 ios_saf 17.0 ios_saf 16.6-16.7 ios_saf 16.5 ios_saf 16.4 safari 26.0 safari 18.5-18.6 safari 18.4 safari 18.3 safari 18.2 safari 18.1 safari 18.0 safari 17.6 safari 17.5 safari 17.4 safari 17.3 safari 17.2 safari 17.1 safari 17.0 safari 16.6 safari 16.5 safari 16.4 # snapshot of `npx browserslist "maintained node versions"` # On update check all #stable-snapshot markers [node] node 25.0.0 node 24.10.0 node 22.21.0 node 20.19.0 # same as `node` [coverage] node 25.0.0 node 24.10.0 node 22.21.0 node 20.19.0 # same as `node` [development] node 25.0.0 node 24.10.0 node 22.21.0 node 20.19.0 # same as `node` [test] node 25.0.0 node 24.10.0 node 22.21.0 node 20.19.0 ================================================ FILE: .circleci/config.yml ================================================ version: 2.1 orbs: code-infra: https://raw.githubusercontent.com/mui/mui-public/f544b55fdbbb922b7293365705cf62895b4f5186/.circleci/orbs/code-infra.yml parameters: browserstack-force: description: Whether to force browserstack usage. We have limited resources on browserstack so the pipeline might decide to skip browserstack if this parameter isn't set to true. type: boolean default: false react-version: description: The version of react to be used type: string default: stable workflow: description: The name of the workflow to run type: string default: pipeline default-job: &default-job parameters: react-version: description: The version of react to be used type: string default: << pipeline.parameters.react-version >> resource_class: medium environment: # expose it globally otherwise we have to thread it from each job to the install command BROWSERSTACK_FORCE: << pipeline.parameters.browserstack-force >> COREPACK_ENABLE_DOWNLOAD_PROMPT: '0' working_directory: /tmp/base-ui executor: code-infra/mui-node default-context: &default-context context: - org-global # CircleCI has disabled the cache across forks for security reasons. # Following their official statement, it was a quick solution, they # are working on providing this feature back with appropriate security measures. # https://discuss.circleci.com/t/saving-cache-stopped-working-warning-skipping-this-step-disabled-in-configuration/24423/21 # # restore_repo: &restore_repo # restore_cache: # key: v1-repo-{{ .Branch }}-{{ .Revision }} commands: build-with-compiler: description: 'Build packages with React Compiler' steps: - run: name: Add compiler package command: pnpm -F "./packages/*" add react-compiler-runtime - run: name: Build with compiler command: pnpm -F "./packages/*" build --enableReactCompiler environment: MUI_REACT_COMPILER_MODE: 'infer' jobs: test_unit: <<: *default-job resource_class: large steps: - checkout - code-infra/install-deps: package-overrides: react@<< parameters.react-version >> - run: name: Run tests on JSDOM command: pnpm test:jsdom - store_test_results: path: test-results docs_validate: <<: *default-job steps: - checkout - code-infra/install-deps - run: name: Validate the documentation files command: pnpm docs:validate test_lint: <<: *default-job steps: - checkout - code-infra/install-deps - code-infra/run-linters test_static: <<: *default-job steps: - checkout - code-infra/install-deps - code-infra/check-static-changes - run: name: Generate the documentation command: pnpm docs:api - run: name: '`pnpm docs:api` changes committed?' command: git add -A && git diff --exit-code --staged - run: name: '`pnpm extract-error-codes` changes committed?' command: | pnpm extract-error-codes git add -A && git diff --exit-code --staged - run: name: '`pnpm inline-scripts` changes committed?' command: | pnpm inline-scripts git add -A && git diff --exit-code --staged test_types: <<: *default-job resource_class: 'medium+' steps: - checkout - code-infra/install-deps: package-overrides: react@<< parameters.react-version >> - run: name: Tests TypeScript definitions command: pnpm typescript environment: NODE_OPTIONS: --max-old-space-size=3072 - run: name: Any defect declaration files? command: pnpm code-infra validate-built-types - save_cache: name: Save generated declaration files key: typescript-declaration-files-{{ .Branch }}-{{ .Revision }} paths: # packages with generated declaration files - packages/react/build test_types_next: <<: *default-job resource_class: 'medium+' steps: - checkout - code-infra/install-deps: package-overrides: typescript@next - run: name: Tests TypeScript definitions command: pnpm typescript - restore_cache: name: Restore generated declaration files keys: # We assume that the target branch is `master` and that declaration files are persisted in commit order. # "If there are multiple matches, the most recently generated cache will be used." - typescript-declaration-files-master - run: name: Log defect declaration files command: | # ignore build failures # Fixing these takes some effort that isn't viable to merge in a single PR. # We'll simply monitor them for now. set +e pnpm code-infra validate-built-types exit 0 test_browser: <<: *default-job resource_class: large executor: name: code-infra/mui-node-browser playwright-img-version: v1.58.2-noble steps: - checkout - code-infra/install-deps: package-overrides: react@<< parameters.react-version >> - run: name: Run tests on headless Chromium command: pnpm test:chromium - store_test_results: path: test-results test_regressions: <<: *default-job resource_class: 'medium+' executor: name: code-infra/mui-node-browser playwright-img-version: v1.58.2-noble steps: - checkout - code-infra/install-deps - run: name: Run visual regression tests command: xvfb-run pnpm test:regressions - store_test_results: path: test-results - run: name: Upload screenshots to Argos CI command: pnpm test:argos test_e2e: <<: *default-job executor: name: code-infra/mui-node-browser playwright-img-version: v1.58.2-noble steps: - checkout - code-infra/install-deps - run: name: pnpm test:e2e command: pnpm test:e2e - store_test_results: path: test-results test_package: <<: *default-job resource_class: 'medium+' steps: - checkout - code-infra/install-deps - run: name: Build packages command: pnpm release:build - run: name: Validate type declarations command: pnpm code-infra validate-built-types - run: name: Check public types command: pnpm -r run release:test - run: name: Test Node.js module resolution command: pnpm -F @base-ui/test-node-resolution test - run: name: Verify built packages command: pnpm -r test:package - code-infra/upload-size-snapshot test_unit_compiler: <<: *default-job resource_class: large steps: - checkout - code-infra/install-deps - build-with-compiler - run: name: Run tests on JSDOM command: pnpm test:jsdom environment: MUI_DISABLE_WORKSPACE_ALIASES: 1 - store_test_results: path: test-results test_browser_compiler: <<: *default-job resource_class: large executor: name: code-infra/mui-node-browser playwright-img-version: v1.58.2-noble steps: - checkout - code-infra/install-deps - build-with-compiler - run: name: Run tests on headless Chromium command: pnpm test:chromium environment: MUI_DISABLE_WORKSPACE_ALIASES: 1 - store_test_results: path: test-results workflows: pipeline: when: equal: [pipeline, << pipeline.parameters.workflow >>] jobs: - test_unit: <<: *default-context name: 'JSDOM tests' - test_lint: <<: *default-context name: 'Linting' - test_static: <<: *default-context name: 'Generated files verification' - test_types: <<: *default-context name: 'Typechecking' - test_browser: <<: *default-context name: 'Browser tests' - test_regressions: <<: *default-context name: 'Regression tests' - test_e2e: <<: *default-context name: 'E2E tests' - test_package: <<: *default-context name: 'Package verification' - docs_validate: <<: *default-context name: 'Validating Docs' - test_unit_compiler: <<: *default-context name: 'JSDOM tests (React Compiler)' - test_browser_compiler: <<: *default-context name: 'Browser tests (React Compiler)' react-18: when: equal: [pipeline, << pipeline.parameters.workflow >>] jobs: - test_unit: <<: *default-context name: 'JSDOM tests (React 18)' react-version: '^18' - test_browser: <<: *default-context name: 'Browser tests (React 18)' react-version: '^18' - test_types: <<: *default-context name: 'Typechecking (React 18)' react-version: '^18' typescript-next: triggers: - schedule: cron: '0 0 * * *' filters: branches: only: - master jobs: - test_types_next: <<: *default-context name: 'Typechecking (typescript@next)' ================================================ FILE: .editorconfig ================================================ # EditorConfig is awesome: https://editorconfig.org/ # top-most EditorConfig file root = true # Unix-style newlines with a newline ending every file [*] trim_trailing_whitespace = true indent_style = space indent_size = 2 end_of_line = lf charset = utf-8 insert_final_newline = true max_line_length = 100 ================================================ FILE: .gitattributes ================================================ # Set the default behavior, in case people don't have core.autocrlf set. * text=auto eol=lf # Undo the GitHub's default # https://github.com/github/linguist/blob/96ad1185828f44bb9b774328a584551ee57ed264/lib/linguist/vendor.yml#L177 packages/**/*.d.ts -linguist-vendored ================================================ FILE: .github/CODEOWNERS ================================================ * @atomiks @michaldudak @flaviendelangle /docs/src/ @atomiks @colmtuite @michaldudak @flaviendelangle /packages/react/ @atomiks @colmtuite @michaldudak @flaviendelangle @LukasTy /scripts/ @michaldudak /packages/utils/ @romgrk ================================================ FILE: .github/ISSUE_TEMPLATE/1.bug.md ================================================ --- name: 'Bug report' about: 'File a bug report.' labels: ['status: waiting for maintainer'] --- # Bug report ## Current behavior Provide a clear and concise description of the current behavior you're experiencing. If applicable, provide screenshots and/or videos. ## Expected behavior Provide a clear and concise description of the expected behavior. ## Reproducible example Link to a CodeSandbox, StackBlitz, or other IDE. ## Base UI version For example v1.0.2 ## Which browser are you using? Chrome/Safari/Firefox/Safari iOS etc. ## Which OS are you using? Mac OS/Windows/Other etc. ## Which assistive tech are you using (if applicable)? Voiceover/JAWS etc. ## Additional context Provide any additional context that might help us identify the problem and find a solution. ================================================ FILE: .github/ISSUE_TEMPLATE/2.feature-request.md ================================================ --- name: 'Feature request' about: 'Suggest a new component or an enhancement for an existing component.' labels: ['status: waiting for maintainer'] --- # Feature request ## Summary ## Examples in other libraries ## Motivation ================================================ FILE: .github/ISSUE_TEMPLATE/3.get-help.md ================================================ --- name: 'Get help' about: 'Ask a question.' labels: ['status: waiting for maintainer'] --- # Get help ## Ask a question Before opening an issue, please consider starting a [GitHub Discussion](https://github.com/mui/base-ui/discussions) or asking the community for help in our [Discord](https://base-ui.com/r/discord). ================================================ FILE: .github/ISSUE_TEMPLATE/4.docs-feedback.md ================================================ --- name: 'Docs feedback' about: 'Help us improve Base UI documentation.' labels: ['status: waiting for maintainer'] --- # Docs feedback ## How can we improve Base UI documentation? Provide a clear and concise description of the issue you're experiencing. If applicable, provide screenshots and/or videos. ================================================ FILE: .github/PULL_REQUEST_TEMPLATE.md ================================================ - [ ] I have followed (at least) the [PR section of the contributing guide](https://github.com/mui/base-ui/blob/HEAD/CONTRIBUTING.md#sending-a-pull-request). ================================================ FILE: .github/codeql/codeql-config.yml ================================================ name: CodeQL configuration ================================================ FILE: .github/dependabot.yml ================================================ version: 2 updates: # Enable version updates for npm - package-ecosystem: npm # Look for `package.json` and `lock` files in the `root` directory directory: / schedule: interval: yearly # https://stackoverflow.com/questions/64047526/how-to-get-dependabot-to-trigger-for-security-updates-only open-pull-requests-limit: 0 labels: - dependencies - security ================================================ FILE: .github/workflows/check-if-pr-has-label.yml ================================================ name: Check if PR has label on: pull_request: types: [opened, labeled, unlabeled, synchronize] permissions: {} jobs: test-label-applied: # Tests that label is added on the PR runs-on: ubuntu-latest permissions: contents: read steps: - uses: mnajdova/github-action-required-labels@ca0df9249827e43aa4b4a0d25d9fe3e9b19b0705 # v2.1.0 with: mode: minimum count: 1 labels: '' ================================================ FILE: .github/workflows/ci.yml ================================================ name: CI on: push: branches-ignore: # Renovate branches are always Pull Requests. # We don't need to run CI twice (push+pull_request) - 'renovate/**' - 'dependabot/**' pull_request: permissions: {} jobs: # Tests dev-only scripts across all supported dev environments test-dev: # l10nbot does not affect dev scripts. if: ${{ github.actor != 'l10nbot' }} runs-on: ${{ matrix.os }} strategy: matrix: os: [macos-latest, windows-latest, ubuntu-latest] steps: - run: echo "${{ github.actor }}" - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: # fetch all tags which are required for `pnpm release:changelog` fetch-depth: 0 - name: Set up pnpm uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4.3.0 - name: Use Node.js 22.x uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 with: node-version: '22.18' cache: 'pnpm' # https://github.com/actions/setup-node/blob/main/docs/advanced-usage.md#caching-packages-dependencies - run: pnpm install - run: pnpm release:build - name: Publish packages if: matrix.os == 'ubuntu-latest' uses: mui/mui-public/.github/actions/ci-publish@f544b55fdbbb922b7293365705cf62895b4f5186 with: pr-comment: true ================================================ FILE: .github/workflows/codeql.yml ================================================ name: CodeQL on: schedule: - cron: '0 2 * * *' permissions: {} jobs: analyze: name: Analyze runs-on: ubuntu-latest permissions: actions: read contents: read security-events: write steps: - name: Checkout repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL uses: github/codeql-action/init@0d579ffd059c29b07949a3cce3983f0780820c98 # v4.32.6 with: languages: typescript config-file: ./.github/codeql/codeql-config.yml # If you wish to specify custom queries, you can do so here or in a config file. # By default, queries listed here will override any specified in a config file. # Prefix the list here with "+" to use these queries and those in the config file. # Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs # queries: security-extended,security-and-quality - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@0d579ffd059c29b07949a3cce3983f0780820c98 # v4.32.6 ================================================ FILE: .github/workflows/ensure-triage-label.yml ================================================ name: Ensure triage label is present on: label: types: - deleted issues: types: - opened permissions: {} jobs: label_issues: runs-on: ubuntu-latest permissions: issues: write steps: - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 with: script: | const { data: labels } = await github.rest.issues.listLabelsOnIssue({ issue_number: context.issue.number, owner: context.repo.owner, repo: context.repo.repo, }); if (labels.length <= 0) { await github.rest.issues.addLabels({ issue_number: context.issue.number, owner: context.repo.owner, repo: context.repo.repo, labels: ['status: waiting for maintainer'] }) } ================================================ FILE: .github/workflows/fixed-issue.yml ================================================ name: Comment on fixed issues on: issues: types: [closed] permissions: {} jobs: add-comment: runs-on: ubuntu-latest permissions: issues: write pull-requests: read steps: - name: Get associated PRs id: get-prs uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 with: script: | const issue_number = context.payload.issue.number; console.log(`Processing issue #${issue_number}`); // Use GraphQL to find PRs that close this issue const query = ` query($owner:String!, $repo:String!, $issueNumber:Int!) { repository(owner: $owner, name: $repo) { issue(number: $issueNumber) { timelineItems(last: 100, itemTypes: [CONNECTED_EVENT, CROSS_REFERENCED_EVENT]) { nodes { __typename ... on ConnectedEvent { subject { ... on PullRequest { number merged mergedAt } } } ... on CrossReferencedEvent { source { ... on PullRequest { number merged mergedAt } } } } } } } } `; const variables = { owner: context.repo.owner, repo: context.repo.repo, issueNumber: parseInt(issue_number) }; try { const result = await github.graphql(query, variables); console.log('GraphQL query completed successfully'); // Extract all merged PRs that are linked to this issue const relatedPRs = []; if (result.repository.issue) { const timelineItems = result.repository.issue.timelineItems.nodes; for (const item of timelineItems) { let pr = null; if (item.__typename === 'ConnectedEvent' && item.subject) { pr = item.subject; } else if (item.__typename === 'CrossReferencedEvent' && item.source) { pr = item.source; } if (pr && pr.merged) { relatedPRs.push({ number: pr.number, mergedAt: pr.mergedAt }); } } } // Sort by merge date (newest first) and take the first one relatedPRs.sort((a, b) => new Date(b.mergedAt) - new Date(a.mergedAt)); if (relatedPRs.length === 0) { console.log('No merged PRs found for this issue'); return; } const prNumber = relatedPRs[0].number; console.log(`Found merged PR #${prNumber} associated with issue #${issue_number}`); // Set output for the next step core.setOutput('pr_number', prNumber); core.setOutput('has_pr', 'true'); } catch (error) { console.error('Error fetching related PRs:', error); } - name: Add comment to issue if: steps.get-prs.outputs.has_pr == 'true' uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 with: script: | // Get PR number from the previous step's output const prNumber = '${{ steps.get-prs.outputs.pr_number }}'; const issueNumber = context.payload.issue.number; // Get issue labels const issue = context.payload.issue; const labels = issue.labels.map(label => label.name); // Check if this is a bug/regression or a feature const isNewFeature = labels.some(label => label.includes('new feature')); const typeText = isNewFeature ? 'feature' : 'fix'; const commentBody = `This ${typeText} will be available in the next npm release of Base UI. In the meantime, you can try it out on our Canary release channel: \`\`\`sh npm i https://pkg.pr.new/@base-ui/react@${prNumber} \`\`\``; await github.rest.issues.createComment({ owner: context.repo.owner, repo: context.repo.repo, issue_number: issueNumber, body: commentBody }); console.log(`Added comment to issue #${issueNumber}`); ================================================ FILE: .github/workflows/maintenance.yml ================================================ name: Maintenance on: # So that PRs touching the same files as the push are updated push: branches: - master - next # So that the `dirtyLabel` is removed if conflicts are resolved # Could put too much strain on rate limit # If we hit the rate limit too often remove this event pull_request_target: branches: - master - next types: [synchronize] permissions: {} jobs: main: # l10nbot creates a lot of commits at once which starves CI. # We rely on other pushes to mark these branches as outdated. if: ${{ github.actor != 'l10nbot' }} runs-on: ubuntu-latest permissions: contents: read pull-requests: write steps: - run: echo "${{ github.actor }}" - name: Check if prs are dirty uses: eps1lon/actions-label-merge-conflict@1df065ebe6e3310545d4f4c4e862e43bdca146f0 # v3.0.3 with: dirtyLabel: 'PR: out-of-date' removeOnDirtyLabel: 'PR: ready to ship' repoToken: '${{ secrets.GITHUB_TOKEN }}' retryAfter: 130 retryMax: 10 ================================================ FILE: .github/workflows/mark-duplicate.yml ================================================ name: Mark duplicate on: issue_comment: types: [created] permissions: {} jobs: mark-duplicate: runs-on: ubuntu-latest if: ${{ !github.event.issue.pull_request }} permissions: contents: read issues: write steps: - name: Mark duplicate uses: actions-cool/issues-helper@71b62d7da76e59ff7b193904feb6e77d4dbb2777 # v3.7.6 with: actions: 'mark-duplicate' token: ${{ secrets.GITHUB_TOKEN }} duplicate-labels: 'duplicate' remove-labels: 'status: incomplete,status: waiting for maintainer' close-issue: true ================================================ FILE: .github/workflows/new-issue-triage.yml ================================================ name: New issue triage on: issues: types: - opened permissions: {} jobs: issue_cleanup: name: Clean issue body uses: mui/mui-public/.github/workflows/issues_body-cleanup.yml@f544b55fdbbb922b7293365705cf62895b4f5186 permissions: contents: read issues: write ================================================ FILE: .github/workflows/no-response.yml ================================================ name: No response # `issues`.`closed`, `issue_comment`.`created`, and `scheduled` event types are required for this Action # to work properly. on: issues: types: [closed] issue_comment: types: [created] schedule: # These runs in our repos are spread evenly throughout the day to avoid hitting rate limits. # If you change this schedule, consider changing the remaining repositories as well. # Runs at 9 am, 9 pm - cron: '0 9,21 * * *' permissions: {} jobs: noResponse: runs-on: ubuntu-latest permissions: contents: read issues: write steps: - uses: MBilalShafi/no-response-add-label@8336c12292902f27b931154c34ba4670cb9899a2 with: token: ${{ secrets.GITHUB_TOKEN }} # Number of days of inactivity before an Issue is closed for lack of response daysUntilClose: 7 # Label requiring a response responseRequiredLabel: 'status: waiting for author' # Label to add back when required label is removed optionalFollowupLabel: 'status: waiting for maintainer' # Comment to post when closing an Issue for lack of response. Set to `false` to disable closeComment: > Since the issue is missing key information and has been inactive for 7 days, it has been automatically closed. If you wish to see the issue reopened, please provide the missing information. ================================================ FILE: .github/workflows/publish.yml ================================================ name: Publish packages on: workflow_dispatch: inputs: sha: description: 'Commit SHA to release from' required: true type: string dry-run: description: 'Run in dry-run mode without actually publishing packages' required: false type: boolean default: false github-release: description: 'Create a GitHub release after publishing' required: false type: boolean default: true dist-tag: description: 'npm dist tag to publish to' required: false type: string default: 'latest' permissions: {} jobs: publish: runs-on: ubuntu-latest permissions: contents: write # Required for pushing tags and creating releases id-token: write # Required for provenance environment: name: npm-publish steps: - name: Checkout uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: ref: ${{ inputs.sha }} fetch-depth: 0 # Fetch full history for proper git operations - name: Prepare for publishing uses: mui/mui-public/.github/actions/publish-prepare@f544b55fdbbb922b7293365705cf62895b4f5186 - name: Publish packages env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | # Build common flags ARGS="" if [ "${{ inputs.dry-run }}" = "true" ]; then ARGS="$ARGS --dry-run" fi if [ "${{ inputs.github-release }}" = "true" ]; then ARGS="$ARGS --github-release" fi if [ -n "${{ inputs.dist-tag }}" ]; then ARGS="$ARGS --tag ${{ inputs.dist-tag }}" fi pnpm code-infra publish --ci $ARGS ================================================ FILE: .github/workflows/scorecards.yml ================================================ name: Scorecards supply-chain security on: # Only the default branch is supported. branch_protection_rule: schedule: - cron: '0 2 * * *' permissions: {} jobs: analysis: name: Scorecards analysis runs-on: ubuntu-latest permissions: # Needed to upload the results to code-scanning dashboard. security-events: write # Used to receive a badge. id-token: write # Needs for private repositories. contents: read actions: read steps: - name: Checkout code uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false - name: Run analysis uses: ossf/scorecard-action@4eaacf0543bb3f2c246792bd56e8cdeffafb205a # v2.4.3 with: results_file: results.sarif results_format: sarif # (Optional) Read-only PAT token. Uncomment the `repo_token` line below if: # - you want to enable the Branch-Protection check on a *public* repository, or # - you are installing Scorecards on a *private* repository # To create the PAT, follow the steps in https://github.com/ossf/scorecard-action#authentication-with-pat. repo_token: ${{ secrets.SCORECARD_READ_TOKEN }} # Publish the results for public repositories to enable scorecard badges. For more details, see # https://github.com/ossf/scorecard-action#publishing-results. publish_results: true # Upload the results to GitHub's code scanning dashboard. - name: Upload to code-scanning uses: github/codeql-action/upload-sarif@0d579ffd059c29b07949a3cce3983f0780820c98 # v4.32.6 with: sarif_file: results.sarif ================================================ FILE: .github/workflows/support-stackoverflow.yml ================================================ # Configuration for support-requests - https://github.com/dessant/support-requests name: Support Stack Overflow on: issues: types: [labeled, unlabeled, reopened] permissions: {} jobs: mark-support: runs-on: ubuntu-latest permissions: contents: read issues: write steps: - uses: dessant/support-requests@47d5ea12f6c9e4a081637de9626b7319b415a3bf # v4.0.0 with: github-token: ${{ secrets.GITHUB_TOKEN }} # Label used to mark issues as support requests support-label: 'support: Stack Overflow' # Comment to post on issues marked as support requests. Add a link # to a support page, or set to `false` to disable issue-comment: | 👋 Thanks for using this project! We use GitHub issues exclusively as a bug and feature requests tracker, however, this issue appears to be a support request. For support with Base UI please check out https://base-ui.com/react/overview/about#community. If you have a question on Stack Overflow, you are welcome to link to it here, it might help others. If your issue is subsequently confirmed as a bug, and the report follows the issue template, it can be reopened. close-issue: true lock-issue: false ================================================ FILE: .github/workflows/vale-action.yml ================================================ name: Vale action on: [pull_request] permissions: {} jobs: vale: name: runner / vale runs-on: ubuntu-latest permissions: contents: read pull-requests: write steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Extract Vale version from pnpm-lock.yaml id: vale-version run: | # Extract version from lock file VERSION=$(awk -F"@|'" '/@vvago\/vale@/ {print $4}' pnpm-lock.yaml | head -n1) echo "Extracted Vale version: $VERSION" echo "vale_version=$VERSION" >> $GITHUB_OUTPUT - uses: errata-ai/vale-action@d89dee975228ae261d22c15adcd03578634d429c # v2.1.1 continue-on-error: true # GitHub Action flag needed until https://github.com/errata-ai/vale-action/issues/89 is fixed with: version: ${{ steps.vale-version.outputs.vale_version }} # Errors should be more visible fail_on_error: true # The other reports don't work, not really https://github.com/reviewdog/reviewdog#reporters reporter: github-pr-check # Required, set by GitHub actions automatically: # https://docs.github.com/en/actions/security-guides/automatic-token-authentication#about-the-github_token-secret token: ${{secrets.GITHUB_TOKEN}} ================================================ FILE: .gitignore ================================================ # It is best to ignoring editor and system files in a local .gitignore configuration file. # However, in order to prevent issues, they are ignored here. .DS_STORE .idea # IntelliJ IDEA module file *.iml *.log /.eslintcache /coverage /docs/.env.local /docs/.next /docs/export /docs/src/app/(private)/playground/* !/docs/src/app/(private)/playground/\[slug\] /docs/public/feed/ /docs/reference/temp/* /test/regressions/screenshots # created by netlify dev (to perform local debug) .netlify build build-tests node_modules package-lock.json size-snapshot.json # vale downloaded config .github/styles/ .nx/cache .nx/workspace-data # Remove if you want to pregenerate the docs md files docs/public/llms.txt docs/public/llms-full.txt docs/public/react .cursor/rules/nx-rules.mdc .github/instructions/nx.instructions.md # typescript *.tsbuildinfo next-env.d.ts # Claude .claude/settings.local.json # Testing test-results/ ================================================ FILE: .lintignore ================================================ .git /coverage /docs/next-env.d.ts /docs/.next /docs/export /docs/src/app/(private)/playground/ /packages/react/**/*.min.* build build-tests node_modules pnpm-lock.yaml routeTree.gen.ts ================================================ FILE: .markdownlint-cli2.mjs ================================================ import { createBaseConfig } from '@mui/internal-code-infra/markdownlint'; const baseline = createBaseConfig(); export default { ...baseline, ignores: [...(baseline.ignores ?? []), 'IMPLEMENTATION_SUMMARY.md'], config: { ...baseline.config, MD038: false, // false positives in MDX MD041: false, // false positives in MDX }, }; ================================================ FILE: .npmrc ================================================ enable-pre-post-scripts = true ================================================ FILE: .vale.ini ================================================ # Vale config. More information at https://vale.sh/docs/topics/config/ StylesPath = .github/styles MinAlertLevel = warning # To update mui-vale package: # 1. Go to the docs folder in the material-ui repo # 2. Update/create YAML files # 3. Run `pnpm docs:zipRules` to generate the zip files # 4. You can test locally by replacing the url with the file path of the generated zip Packages = Google, https://github.com/mui/material-ui/raw/HEAD/docs/mui-vale.zip [formats] mdx = md [*.{md,mdx}] # Ignore React component calls TokenIgnores = (<\/?[A-Z].+>) # Ignore code injections that start with {{... BlockIgnores = {{.* BasedOnStyles = MUI # Google errors: Google.GenderBias = YES # No Gender bias # Google warings: Google.FirstPerson = YES # Avoid first-person Google.We = YES # Avoid first-person plural Google.Will = YES # Avoid future tense Google.OxfordComma = YES # Prefer Oxford comma [*.mdx] # MDX doesn't support HTML comments, see https://vale.sh/docs/keys/commentdelimiters. CommentDelimiters = {/*, */} [CHANGELOG*.md] MUI.CorrectReferenceAllCases = NO [IMPLEMENTATION_SUMMARY.md] BasedOnStyles = ================================================ FILE: .vscode/extensions.json ================================================ { "recommendations": [ // Formating "esbenp.prettier-vscode", // Prettier "editorconfig.editorconfig", // EditorConfig // Highlighting "bradlc.vscode-tailwindcss", // Tailwind CSS "unifiedjs.vscode-mdx", // MDX "styled-components.vscode-styled-components", // styled() // Lint "dbaeumer.vscode-eslint", // ESLint "yoavbls.pretty-ts-errors", // TypeScript "stylelint.vscode-stylelint", // Stylelint "davidanson.vscode-markdownlint" // markdownlint ] } ================================================ FILE: .vscode/settings.json ================================================ { "editor.defaultFormatter": "esbenp.prettier-vscode", "files.trimTrailingWhitespace": true, // Root workspace only "grammarly.selectors": [ { "language": "markdown", "scheme": "file" } ] } ================================================ FILE: AGENTS.md ================================================ # Repository Guidelines This repository contains the source code and documentation for Base UI: a headless, unstyled React component library. ## Project structure - Source code for components and private utils is in `packages/react/`. - Source code for public shared utils is in `packages/utils/`. - Experiments are located at `docs/src/app/(private)/experiments/`. Use for creating demos that require manual testing in the browser. - Public documentation is located at `docs/src/app/(docs)/react/`. Alter the docs where necessary when changes must be visible to library users. - When creating public demos on the docs, refer to the `hero` demo for the given component and largely follow its styles (both CSS Modules and Tailwind CSS versions). Other demos may also contain relevant styling. Do not add custom styling beyond the critical layout styles necessary for new demos. ## Code guidelines - Always use the `useTimeout` utility from `@base-ui/utils/useTimeout` instead of `window.setTimeout`, and `useAnimationFrame` from `@base-ui/utils/useAnimationFrame` instead of `requestAnimationFrame`. Search for other example usage in the codebase if unsure how to use them. - Use the `useStableCallback` utility from `@base-ui/utils/useStableCallback` instead of `React.useCallback` if the function is called within an effect or event handler. The utility cannot be used to memoize functions that are called directly in the body of a component (during render), so continue with `React.useCallback` in those scenarios. - Always use the `useIsoLayoutEffect` utility from `@base-ui/utils/useIsoLayoutEffect` instead of `React.useLayoutEffect`. - Avoid duplicating logic where necessary. If two components can share logic (such as event handlers), define the logic/handlers in the parent and share it through a context to the child; use the existing context if it exists. ## Linting, typechecking, and formatting - Do not randomly cast (for example `as any`) if there are no type errors without doing so. Run `pnpm typescript` to verify types. - Ensure your changes pass linting - run `pnpm eslint`. - Ensure your styles pass stylelint - run `pnpm stylelint`. - Ensure your markdown passes markdownlint - run `pnpm markdownlint`. - Ensure your changes are formatted correctly - run `pnpm prettier`. - When you change a public component API (props or JSDoc), run `pnpm docs:api`. ## Testing - If a repository command fails because dependencies are unavailable, run `pnpm i` first and then retry the command. - Run tests in JSDOM env with `pnpm test:jsdom {name} --no-watch` such as `pnpm test:jsdom NumberField --no-watch` or `pnpm test:jsdom parse --no-watch`. - Run tests in Chromium env with `pnpm test:chromium {name} --no-watch` such as `pnpm test:chromium NumberField --no-watch` or `pnpm test:jsdom parse --no-watch`. - Do not call `await flushMicrotasks()` directly after `await render(...)` when there are no interactions or state changes between them; `render` is already awaited, so that immediate flush is unnecessary. - If you made changes to the source code, ensure you verify your changes by running tests (see above), and writing new tests where applicable. If tests require the browser because, for example, they require layout measurements, restrict it to the Chromium env by using `it.skipIf(isJSDOM)` or `describe.skipIf(isJSDOM)` (search other tests for example usage if unsure). - Follow the established conventions in existing tests. Each file/component is tested with the filename `name.test.tsx`. For example, `PopoverRoot.test.tsx` is next to its source file `PopoverRoot.tsx`. - Tests use Vitest APIs only: `expect()`, `vi.fn()`, and `@testing-library/jest-dom` DOM matchers. Do not use Chai- or Sinon-style matcher chains or spies. ## Commit guidelines - Commit messages follow the format `[scope] Imperative summary` (for example `[popover] Fix focus trap`). Choose scopes that mirror package or component names that were changed. - Use `[all components]` scope for changes that broadly affect most components. ## Errors These guidelines apply only to errors thrown by public packages. Every error message must: 1. **Say what happened** - Describe the problem clearly 2. **Say why it's a problem** - Explain the consequence 3. **Point toward how to solve it** - Give actionable guidance Format: - Prefix with `Base UI: ` - Use string concatenation for readability - Include a documentation link when applicable (`https://base-ui.com/...`) ### Error Minifier You MUST run `pnpm extract-error-codes` to update `docs/src/error-codes.json` every time you add or update an error message in an `Error` constructor. **Important:** If the update created a new error code, but the new and original message have the same number of arguments and semantics haven't changed, update the original error in `error-codes.json` instead of creating a new code. ================================================ FILE: CHANGELOG.md ================================================ # Versions ## v1.3.0 _Mar 12, 2026_ ### General Changes - Warn when a component function is rendered directly (#4077) by @atomiks - Reset `openMethod` after close transition (#4128) by @atomiks - Fire Space activation on `keydown` in composite widgets (#4053) by @atomiks - Skip CSS-hidden items during keyboard navigation in composite widgets (#4195) by @atomiks - Optimize hot paths in `useHover` hooks and `safePolygon` (#4199) by @atomiks - Snap `--anchor-width` and `--anchor-height` to device pixel grid (#4082) by @flaviendelangle - Fix outside press dismissal when a component is portaled into a shadow DOM (#4230) by @dmitri-gb - Fix nested hoverable popups (#4206) by @dmitri-gb - Apply `data-base-ui-inert` to highest-level node (#3955) by @atomiks - Fix portable types (#4058) by @cgatian ### Accordion - Add generic `Value` typing (#4138) by @atomiks ### Autocomplete - Respect a `null` `filter` prop (#4117) by @atomiks - Add `InputGroup` part (#3745) by @atomiks ### Avatar - Remove fallback transition logic and prevent premature image display (#4110) by @atomiks ### Button - Avoid checking `disabled` twice in `onKeyDown` and `onKeyUp` (#4132) by @flaviendelangle ### Checkbox - Add automatic `aria-labelledby` support (#4142) by @atomiks ### Combobox - Avoid applying field attributes to input when it is inside popup (#4154) by @atomiks - Preserve inline input on `Enter` when nothing is highlighted (#4235) by @atomiks - Fix ARIA attributes during SSR (#4179) by @atomiks - Fix wrapping in virtualized grid arrow-key navigation (#4164) by @atomiks - Add `InputGroup` part (#3745) by @atomiks - Add support for a visually hidden close button and improve modal focus trapping (#4084) by @atomiks - Add `Label` part (#4167) by @atomiks ### Context Menu - Ignore `mouseup` on non-Mac platforms (#3944) by @atomiks ### Drawer - **Breaking change:** `Drawer` is no longer marked as preview
`Drawer` is now stable and should be imported as `{ Drawer } from '@base-ui/react/drawer'` (#4293) by @atomiks - Fix React 17 support (#4178) by @atomiks - Include border in frontmost height variable (#4202) by @atomiks - Improve touch selection (#4104) by @atomiks - Preserve cross-axis scrolling during touch gestures (#4187) by @atomiks - Prevent swipe dismissal when component is controlled (#4133) by @flaviendelangle - Add `SwipeArea` part (#4102) by @atomiks - Make `data-base-ui-swipe-ignore` explicit for touch interactions (#4295) by @atomiks - Disable inheritance for swipe CSS variables (#4099) by @atomiks ### Field - Fix field validation when `Form` errors or `invalid` prop are present at same time (#4112) by @mj12albert ### Menu - Prevent `pointerleave` from stealing focus from dialogs (#4125) by @atomiks - Optimize `pointer-events` for submenu hover interactions (#4231) by @atomiks - Fix `closeDelay` not being applied to `Menu.SubmenuTrigger` (#4134) by @flaviendelangle - Implement content transitions with `Viewport` (#4060) by @michaldudak ### Meter - Fix label announcements in NVDA (#4200) by @mj12albert ### Navigation Menu - Fix support for nested inline menus (#4198) by @atomiks - Fix close propagation in nested hover menus (#4285) by @atomiks - Close parent menus when nested link with `closeOnClick` is clicked (#4276) by @CiscoFran10 - Fix duplicate `aria-orientation` (#4309) by @atomiks - Fix delayed trigger switches in Safari (#4310) by @atomiks ### Number Field - Fix increment/decrement press `reason` values in `onValueCommitted` (#4259) by @jijiseong ### Popover - Trap focus when `` is rendered inside and `modal` is `true`, and add support for a visually hidden close button (#4084) by @atomiks - Fix nested hoverable popups (#3798) by @flaviendelangle ### Preview Card - Fix nested hoverable popups (#3798) by @flaviendelangle ### Progress - Fix label announcements in NVDA (#4200) by @mj12albert ### Radio Group - Add automatic `aria-labelledby` support (#4142) by @atomiks ### Scroll Area - Fix focus trapping with a non-scrollable viewport (#4220) by @atomiks - Fix thumb size after remounting (#4107) by @atomiks ### Select - Fix hidden input `id` fallback (#4135) by @atomiks - Fix `Value` placeholder not rendering with `Record` items (#4137) by @vcode-sh - Fire `onClick` during drag-to-select (#3969) by @obeattie - Fix `items` type definition for groups (#3884) by @aarongarciah - Fix `alignItemWithTrigger` fallback with browser zoom (#4292) by @atomiks - Add `Label` part (#4167) by @atomiks ### Slider - Add `Label` part (#4167) by @atomiks - Stop committing validation on `touchend` (#4091) by @jijiseong ### Switch - Add automatic `aria-labelledby` support (#4142) by @atomiks ### Tabs - Re-render indicator position on tab resize (#4165) by @atomiks ### Toast - Enable closing all toasts (#3979) by @chuganzy - Prevent duplicate `onClose` calls for ending toasts (#4280) by @chuganzy ### Tooltip - Add `closeOnClick` prop (#4140) by @atomiks All contributors of this release in alphabetical order : @aarongarciah, @atomiks, @cgatian, @chuganzy, @CiscoFran10, @dmitri-gb, @flaviendelangle, @jijiseong, @michaldudak, @mj12albert, @obeattie, @vcode-sh ## v1.2.0 _Feb 12, 2026_ ### General changes - Do not memoize `state` when not needed (#3812) by @flaviendelangle - Support lazy element in `render` prop (#3856) by @oliviertassinari - Replace Firefox deprecated mozInputSource check for virtual click detection (#3942) by @CiscoFran10 - Use `WeakRef` for previously focused elements (#3916) by @atomiks - Fix page scroll jump when input has focus on unmount in Safari (#3925) by @atomiks - Fix flash at origin before positioning completes in Preact (#3975) by @OliverSpeir - Reduce style recalculation with classic scrollbars (#3854) by @mdm317 - Fix event handling in useEnhancedClickHandler (#3981) by @sai6855 ### Autocomplete - Fix filter method's `useMemo` dependency (#3862) by @ZeeshanTamboli - Fix Autocomplete not using its internal filter method when `mode` is `list` (#3936) by @ZeeshanTamboli - Remove unnecessary double stringification of item in filtering logic (#3945) by @ZeeshanTamboli - Add `useFilteredItems` hook (#3732) by @guisehn - Fix popup closing on iOS VoiceOver (#3859) by @atomiks - Remove `aria-readonly` prop from `Clear` and `Popup` components when `readOnly` (#3907) by @markocupic024 ### Avatar - Add transition attributes (#3939) by @atomiks ### Button - Capture component stack for `nativeButton` error message (#3861) by @atomiks ### Checkbox - Cleanup disabled state tracking (#3913) by @atomiks - Preserve modifier key properties in the change event (#3935) by @mj12albert - Allow exit animations on `` when `keepMounted={false}` (#3939) by @atomiks ### Combobox - Fix the type of the ref of the `Icon` part (#3796) by @flaviendelangle - Avoid clearing selected value if item is not present in items array (#3824) by @atomiks - Fix highlight change reason in `ChipRemove` (#3980) by @sai6855 - Keep highlight on last deselect (#3923) by @atomiks - Fix inline filtering after selection in single mode (#3978) by @atomiks - Clear highlight on inline blur when inline (#3973) by @atomiks - Prevent opening popup on autofill change (#3924) by @atomiks - Distinguish `input-press` from `trigger-press` in `onOpenChange` reason (#4015) by @jijiseong - Fix async items while popup is open (#4034) by @atomiks - Prevent `Chip` from receiving focus when `disabled` (#4044) by @jijiseong - Add `useFilteredItems` hook (#3732) by @guisehn - Fix popup closing on iOS VoiceOver (#3859) by @atomiks - Remove `aria-readonly` prop from `Clear` and `Popup` components when `readOnly` (#3907) by @markocupic024 - Fix `onClick` `Item` type (#3964) by @atomiks - Use reactive `domReferenceElement` subscriptions (#4017) by @atomiks - Add `autoComplete` prop for explicit browser autofill support (#4005) by @mattrothenberg - Fix inconsistent isItemEqualToValue argument order (#4056) by @atomiks ### Context Menu - Fix `disabled` prop not working (#3806) by @arturbien - Fix explicit `collisionAvoidance` with `side: 'flip'` not working (#3877) by @obeattie ### Drawer - Create new Drawer / Sheet component (#3680) by @atomiks ### Field - Prevent re-renders when `Field.Control` is uncontrolled (#3820) by @atomiks - Fix autofocus in SSR environments (#3871) by @mj12albert - Fix max update depth loop when using `` (#3931) by @atomiks - Add transition attributes (#3939) by @atomiks ### Input - Fix autofocus in SSR environments (#3871) by @mj12albert - Update ref type to `HTMLElement` (#3866) by @mj12albert ### Menu - Fix `onClick` `Item` type (#3964) by @atomiks - Fix submenu stuck glitch (#3783) by @atomiks - Fix race conditions (#3821) by @atomiks - Add `` part (#3400) by @mj12albert ### Navigation Menu - Fix forwarded ref types (#3775) by @CrawlerCode - Add `keepMounted` prop to `Content` part (#3794) by @atomiks ### Number Field - Fix click handlers on ScrubArea (#3827) by @mj12albert - Remove `event.isTrusted` (#3920) by @atomiks - Stop repeat change at bounds (#3915) by @atomiks - Add `allowOutOfRange` prop (#3919) by @atomiks - Fix pen pointer handling (#3917) by @atomiks - Fix missing field state data attributes (#3909) by @mj12albert ### Popover - Fix missing `aria-owns` element (#3959) by @atomiks - Use reactive `domReferenceElement` subscriptions (#4017) by @atomiks - Fix broken scale transition with detached triggers (#3810) by @michaldudak ### Preview Card - Fix broken scale transition with detached triggers (#3810) by @michaldudak ### Progress - De-duplicate `formatValue` function (#3805) by @sai6855 ### Radio Group - Preserve modifier key properties in the change event (#3935) by @mj12albert - Allow exit animations on `` when `keepMounted={false}` (#3939) by @atomiks - Rely on individual radio hidden inputs (#3826) by @atomiks - Add generic `Value` typing to `Radio` (#4033) by @atomiks ### Scroll Area - Add `data-scrolling` state attribute to `Root` and `Viewport` parts (#3823) by @arturbien - Fix overflow edge rounding (#3888) by @atomiks ### Select - Add `finalFocus` prop (#3785) by @markocupic024 - Fix `alignItemWithTrigger` transform with CSS animations (#3831) by @atomiks - Fix `highlightItemOnHover` not being respected (#3868) by @sarthakmalik0810 - Reset typeahead on external blur (#2618) by @antonfrolovsky - Fix scroll height loop (#3795) by @atomiks - Add `autoComplete` prop for explicit browser autofill support (#4005) by @mattrothenberg - Fix inconsistent isItemEqualToValue argument order (#4056) by @atomiks ### Slider - Fix missing field state data attributes (#3909) by @mj12albert - Fix change event cloning (#3960) by @atomiks ### Switch - Preserve modifier key properties in the change event (#3935) by @mj12albert ### Tabs - Add transition attributes to `` part (#3880) by @atomiks ### Toast - Make `useToastManager` and `createToastManager` generic functions (#3882) by @solastley - Prevent dismissed promise toast from reopening on updates (#4040) by @atomiks - Introduce a store (#3464) by @flaviendelangle ### Toggle - Improve type safety and inference (#3173) by @michaelhazan ### Toggle Group - Type value as string to match Toggle (#3770) by @markocupic024 - Enable `Home`/`End` key navigation (#3971) by @jijiseong - Improve type safety and inference (#3173) by @michaelhazan ### Tooltip - Prevent opening when focusing a disabled Trigger (#3902) by @michaldudak - Fix broken scale transition with detached triggers (#3810) by @michaldudak - Fix disabled prop on Triggers (#4049) by @michaldudak All contributors of this release in alphabetical order : @antonfrolovsky, @arturbien, @atomiks, @CiscoFran10, @CrawlerCode, @flaviendelangle, @guisehn, @jijiseong, @LukasTy, @markocupic024, @mattrothenberg, @mdm317, @michaelhazan, @michaldudak, @mj12albert, @obeattie, @OliverSpeir, @oliviertassinari, @sai6855, @sarthakmalik0810, @solastley, @ZeeshanTamboli ## v1.1.0 _Jan 15, 2026_ ### General changes - Fix `onOpenChangeComplete(true)` timing (#3558) by @atomiks - Fix touch `openMethod` when tapping outside element bounds on Safari (#3541) by @atomiks - Fix visually hidden input styles across form components (#3606) by @atomiks - Fix click and drags outside a nested popup component from closing its parents (#3571) by @atomiks - Fix forwarded ref types (#3638) by @atomiks - Fix detached trigger remounting (#3724) by @atomiks - Include `ref` in `BaseUIComponentProps` (#2813) by @atomiks - Remove duplicated `disabled` prop (#3650) by @seongminn - Allow `actionsRef` to be `null` (#3682) by @mj12albert ### Accordion - Fix keyboard navigation with non-interactive trigger elements (#3684) by @ZeeshanTamboli ### Autocomplete - Add `data-popup-side` and `data-list-empty` state attributes to `` (#3491) by @atomiks - Add `loopFocus` prop (#3592) by @atomiks - Fix hidden input `id` and `required` props (#3640) by @atomiks ### Button - Remove discriminated props union (#3643) by @atomiks ### Checkbox - Fix hidden input `id` and `required` props (#3640) by @atomiks ### Combobox - Add `data-popup-side` and `data-list-empty` state attributes to `` (#3491) by @atomiks - Add `loopFocus` prop (#3592) by @atomiks - Add `toolbar` role to `` to prevent NVDA from entering browse mode (#3647) by @atomiks - Add `placeholder` prop to `` (#3604) by @atomiks - Fix controlled `value` prop when `items` change (#3607) by @atomiks - Fix `multiple` values label resolution in `` (#3314) by @atomiks - Forward root `id` to visible form element (#3722) by @atomiks - Do not trigger Field `onBlur` handlers when opening popup (#3609) by @atomiks ### Context Menu - Avoid creating sibling elements next to trigger (#3645) by @atomiks ### CSP Provider - Add `CSPProvider` (#3553) by @atomiks ### Dialog - Fix `Maximum update depth exceeded` error with Suspense (#3700) by @michaldudak - Fix `` forwardedRef type (#3736) by @ZeeshanTamboli ### Field - Add `actionsRef` prop (#3395) by @mj12albert - Add `nativeLabel` prop to `` (#3723) by @atomiks - Add missing type export (#3702) by @DiegoAndai ### Form - Add `actionsRef` prop (#3395) by @mj12albert ### Menu - Fix focus guard handling (#3654) by @atomiks - Avoid disabling modality on click after hover-open (#3455) by @atomiks ### Menubar - Fix submenu outside-press dismiss on touch (#3556) by @atomiks ### Number Field - Fix Field `data-focused` state (#3563) by @atomiks - Fix hidden input focus on submit (#3581) by @atomiks ### Popover - Fix popup auto resize glitches (#3591) by @atomiks - Fix focus guard handling (#3654) by @atomiks - Prevent disabling focus management when clicking trigger before hover delay completes (#3572) by @atomiks - Refactor popup auto resize logic. It is no longer necessary to specify `--positioner-width`/`--positioner-height` CSS variables on `` when using detached triggers unless the `Viewport` part has been added to the JSX. (#3652) by @atomiks ### Preview Card - Support detached triggers (#3566) by @michaldudak and @atomiks ### Radio Group - Fix `value` type (#3582) by @atomiks - Fix hidden input `id` and `required` props (#3640) by @atomiks ### Scroll Area - Perf improvements (#3536) by @atomiks ### Select - Add `placeholder` prop to `` (#3604) by @atomiks - Fix support for transform animations when `alignItemWithTrigger` is active (#3532) by @atomiks - Fix support for `max-height` popup style when `alignItemWithTrigger` is active (#3573) by @atomiks - Fix `data-filled` state in `multiple` mode (#3608) by @atomiks - Fix highlight being removed on popup mouseout when `highlightItemOnHover` is disabled (#3492) by @atomiks - Fix support for individual transform animations when `alignItemWithTrigger` is active (#3637) by @atomiks - Fix `multiple` values label resolution in `` (#3314) by @atomiks - Forward root `id` to visible form element (#3722) by @atomiks - Do not trigger Field `onBlur` handlers when opening popup (#3609) by @atomiks ### Slider - Fix `onValueCommitted` not called for range sliders (#3600) by @mj12albert ### Switch - Add `value` prop (#3676) by @Grafikart - Fix hidden input `id` and `required` props (#3640) by @atomiks ### Toast - Fix timers not being rescheduled when updated (#3564) by @atomiks ### Tooltip - Fix popup auto resize glitches (#3591) by @atomiks - Fix `trackCursorAxis` handling (#3679) by @atomiks - Refactor popup auto resize logic. It is no longer necessary to specify `--positioner-width`/`--positioner-height` CSS variables on `` when using detached triggers unless the `Viewport` part has been added to the JSX. (#3652) by @atomiks ### mergeProps - Make `mergeProps` public (#3642) by @michaldudak and @LukasTy ### useRender - Export missing types (#3565) by @michaldudak All contributors of this release in alphabetical order: @albertdugba, @atomiks, @brijeshb42, @chuganzy, @colmtuite, @dav-is, @DiegoAndai, @Grafikart, @Janpot, @LukasTy, @michaldudak, @mj12albert, @oliviertassinari, @seongminn, @updbqn, @ZeeshanTamboli ## v1.0.0 _Dec 11, 2025_ ### General changes - **Breaking change:** Rename packages to use the `@base-ui` org.
The package name has changed from `@base-ui-components/react` to `@base-ui/react`. (#3462) by @mnajdova ### Combobox - Respect `itemToStringValue` for `onFormSubmit` (#3441) by @atomiks - Add `null` as an option for the value prop (#3488) by @mnajdova ### Menu - Fix submenu opens with 0 delay (#3459) by @atomiks - Fix focus not returning to trigger on Esc while pointer rests on popup (#3482) by @atomiks - Fix always `null` open method (#3486) by @atomiks - Allow side axis fallback for submenus by default (#3470) by @atomiks ### Navigation Menu - Fix mount transitions on `Positioner` in Firefox (#3424) by @atomiks ### Number Field - Fix multiple scrub area support (#3471) by @atomiks ### Popover - Fix mount transitions on `Positioner` in Firefox (#3424) by @atomiks - Fix skipped viewport transitions (#3453) by @atomiks ### Select - Respect `itemToStringValue` for `onFormSubmit` (#3441) by @atomiks - Add `null` as an option for the value prop (#3488) by @mnajdova ### Tabs - Fix indicator positioning in transformed containers (#3439) by @atomiks - Do not initially select a disabled tab (#3475) by @michaldudak ### Toast - Fix `flushSync` dev error when toast is added (#3443) by @atomiks - Fix `;` emitting `aria-hidden` warning on click (#3469) by @atomiks ### Toggle Group - More permissive towards falsy toggle values (#3477) by @mj12albert ### Tooltip - Fix mount transitions on `Positioner` in Firefox (#3424) by @atomiks - Fix ignored "modal" setting in Popovers experiment (#3474) by @michaldudak - Fix shared tooltip closing with trigger gaps (#3452) by @atomiks - Fix skipped viewport transitions (#3453) by @atomiks All contributors of this release in alphabetical order: @atomiks, @LukasTy, @michaldudak, @mj12albert, @mnajdova, @oliviertassinari, @pondorasti, @romgrk, @ZeeshanTamboli ## v1.0.0-rc.2 _Dec 11, 2025_ This release contains the same code as v1.0.0. Please refer to that version to see the changes. ## v1.0.0-rc.1 _Dec 11, 2025_ This release contains the same code as v1.0.0. Please refer to that version to see the changes. ## v1.0.0-rc.0 _Dec 4, 2025_ ### General changes - Fix missing `'use client'` directives (#3408) by @atomiks ### Autocomplete - Fix `keepHighlight` focus sync (#3399) by @atomiks ### Checkbox - **Breaking change:** Match native unchecked state in form submission.
The Checkbox will not submit the `"off"` value with a form when unchecked anymore, unless the new `uncheckedValue` prop is set. (#3406) by @atomiks ### Collapsible - Remove `render={null}` (#3407) by @mj12albert ### Combobox - **Breaking change:** Removed the `keepHighlight` prop (#3377) by @atomiks ### Dialog - Close when pressing focusable element outside (#3380) by @atomiks - Fix closing after pointer lock exit in Firefox (#3379) by @atomiks ### Menu - Add `highlightItemOnHover` prop (#3377) by @atomiks - Do not import client components from MenuStore (#3409) by @michaldudak ### Number Field - Ensure hidden input participates in form validation (#3374) by @atomiks - Improve symbol replacement logic (#3376) by @atomiks - Fix fractional step snapping (#3375) by @atomiks - Fix parsing numbers with Swiss locale (#3361) by @michaldudak - Fix pointer lock release when soft clicking in Firefox (#3378) by @atomiks ### Popover - Close when pressing focusable element outside (#3380) by @atomiks - Fix modal backdrop on touch (#3383) by @atomiks - Fix popover glitching when flipped (#3364) by @michaldudak ### Select - Add `highlightItemOnHover` prop (#3377) by @atomiks ### Switch - **Breaking change:** Match native off state in form submission.
The Switch will not submit the `"off"` value with a form when unchecked anymore, unless the new `uncheckedValue` prop is set. (#3406) by @atomiks ### Tabs - **Breaking change:** Fix Panel `keepMounted` behavior.
The `value` prop is now required on `` and `` parts. (#3372) by @atomiks ### Toast - Recalculate content height when layout size is fixed (#3359) by @atomiks - Fix multiple swipe directions on same axis (#3392) by @mj12albert ### Tooltip - Improve contained triggers performance (#3385) by @michaldudak All contributors of this release in alphabetical order: @atomiks, @michaldudak, @mj12albert, @oliviertassinari, @pondorasti, @romgrk ## v1.0.0-beta.7 _Nov 27, 2025_ ### General changes - Fix error about `props.ref` access in React <=18 (#3257) by @atomiks - Prefer non-adaptive anchoring position in `` components and fix `autoFocus` scroll jumps (#3250) by @atomiks - Make popups' `data-anchor-hidden` state attribute check for anchor presence in layout (#3267) by @atomiks - Prevent popups from sticking after hover when pressing `<a>` tags inside them (#3318) by @atomiks - Improve performance when detached triggers are used (#3277) - Fix iOS VoiceOver voice control accessibility in non-modal popups (#3340) ### Alert Dialog - Fix trigger registration loop (#3249) by @atomiks - Fix focus restoration when focused element is hidden with CSS (#3313) ### Checkbox Group - Fix `aria-describedby` on checkbox group (#3269) by @mj12albert ### Combobox - Revert overload types to ensure typed wrappers work correctly (#3254) by @atomiks - Fix ignored `filteredItems` instances (#3272) by @atomiks - Fix loop when passing `undefined` to `items` prop (#3348) ### Context Menu - Block mouseup at initial cursor point (#3274) by @atomiks ### Dialog - Fix trigger registration loop (#3249) by @atomiks - Fix focus restoration when focused element is hidden with CSS (#3313) ### Form - Fix cast `ref` type (#3324) by @mj12albert ### Menu - Fix trigger registration loop (#3249) by @atomiks - Do not pass `key` to the rendered element (#3255) by @michaldudak - Fix nested dialog from closing on Shift+Tab (#3346) ### Navigation Menu - Fix Safari 18 issue where `` width may be set to 0 on hover (#3309) by @EmilNordling - Ensure submenu triggers participate in composite list (#3344) by @atomiks ### Number Field - Fix literal space handling with symbols (#3334) by @atomiks ### Popover - Fix trigger registration loop (#3249) by @atomiks - Do not pass `key` to the rendered element (#3255) by @michaldudak - Fix focus restoration when focused element is hidden with CSS (#3313) ### Select - Revert overload types to ensure typed wrappers work correctly (#3254) by @atomiks ### Slider - Fix extra `onValueCommitted` calls (#3312) by @mj12albert - Fix cast `ref` type (#3324) by @mj12albert ### Tooltip - Fix trigger registration loop (#3249) by @atomiks All contributors of this release in alphabetical order: @atomiks, @brijeshb42, @Copilot, @EmilNordling, @michaldudak, @mj12albert, @oliviertassinari, @ZeeshanTamboli ## v1.0.0-beta.6 _Nov 17, 2025_ This is a hotfix release with the following changes: - Fix for rendering of Alert Dialog, Dialog, Menu, Popover, and Tooltip in React Server Components (#3241) by @michaldudak - Fix of the types of the refs in the Checkbox, Switch and Radio components (#3246) by @mnajdova - Fix of the value type error with mergeProps (#3247) by @atomiks ## v1.0.0-beta.5 _Nov 17, 2025_ ### General changes - **Breaking change:** Replace `trackAnchor` with `disableAnchorTracking`.
If you were using `trackAnchor={false}`, be sure to update your usage to `disableAnchorTracking` instead. (#3188) by @mnajdova - **Breaking change:** Rename `loop` to `loopFocus` (#3186) by @mnajdova - Fix type portability (#2912) by @atomiks - Accept a function for the `style` prop (#3038) by @mnajdova - Create portal elements inside React (#2889) by @atomiks - Avoid applying `hidden` attribute to indicator elements when they specify `keepMounted` and are invisible (#3228) by @atomiks - Fix crash in Next.js 16 when accessing `render.props.ref` (#3231) by @atomiks ### Accordion - **Breaking change:** Change `multiple` prop to be false by default and add a demo (#3141) by @mnajdova - Fix flaky exit transition (#3101) by @atomiks ### Alert Dialog - Fix `initialFocus` as function being called on close (#2949) by @atomiks - Support detached triggers (#2974) by @michaldudak - Place `overflow: hidden` on `` for overlay scrollbars by default. Avoids sticky elements shifting if `` has an `overflow` style specified. (#3083) by @atomiks - Add `` part (#2808) by @atomiks ### Autocomplete - **Breaking change:** Refactor `alwaysSubmitOnEnter` to `submitOnItemClick` prop.
If you were using `alwaysSubmitOnEnter`, be sure to update your usage to `submitOnItemClick` instead. (#3018) by @atomiks - Prevent blocking filtering while composing text on Android (#2944) by @atomiks - Add empty state to `List.State` (#2934) by @atomiks - Fix `initialFocus` as function being called on close (#2949) by @atomiks - Add `role="combobox"` to `` if `` is inside Popup (#2973) by @atomiks - Fix stale `onItemHighlighted` data when filtering with `autoHighlight` (#2829) by @atomiks - Add empty and side styling attributes on `` (#2926) by @atomiks - Fix `` component return type for React 17 (#3050) by @atomiks - Support `autoHighlight: "always"`, and add `keepHighlight`, `highlightItemOnHover` props (#2976) by @atomiks - Keep focus on input when pressing list element (#3092) by @atomiks - Allow Esc to bubble if `` is not used (#2935) by @atomiks - Add `dialog` role to popup when input is inside (#3213) by @atomiks ### Button - New `