Base UI is a library of high-quality, accessible, unstyled React
components for design systems and web apps.
@@ -26,7 +26,7 @@ export default function ExampleAccordion() {
-
+
Head to the “Quick start” guide in the docs. If you’ve used unstyled
libraries before, you’ll feel right at home.
@@ -41,7 +41,7 @@ export default function ExampleAccordion() {
-
+
Of course! Base UI is free and open source.
diff --git a/docs/src/app/new/(content)/components/alert-dialog/demos/hero/css-modules/index.module.css b/docs/src/app/new/(content)/components/alert-dialog/demos/hero/css-modules/index.module.css
index 91f4db5eb1..446a7cfd98 100644
--- a/docs/src/app/new/(content)/components/alert-dialog/demos/hero/css-modules/index.module.css
+++ b/docs/src/app/new/(content)/components/alert-dialog/demos/hero/css-modules/index.module.css
@@ -42,8 +42,8 @@
opacity: 0.7;
}
- &[data-entering],
- &[data-exiting] {
+ &[data-starting-style],
+ &[data-ending-style] {
opacity: 0;
}
}
@@ -65,8 +65,8 @@
outline: 0;
transition: all 150ms;
- &[data-entering],
- &[data-exiting] {
+ &[data-starting-style],
+ &[data-ending-style] {
opacity: 0;
transform: translate(-50%, -50%) scale(0.9);
}
diff --git a/docs/src/app/new/(content)/components/alert-dialog/demos/hero/tailwind/index.tsx b/docs/src/app/new/(content)/components/alert-dialog/demos/hero/tailwind/index.tsx
index 46aa816b02..3e93a60b7f 100644
--- a/docs/src/app/new/(content)/components/alert-dialog/demos/hero/tailwind/index.tsx
+++ b/docs/src/app/new/(content)/components/alert-dialog/demos/hero/tailwind/index.tsx
@@ -7,8 +7,8 @@ export default function ExampleAlertDialog() {
Discard draft
-
-
+
+
Discard draft?
diff --git a/docs/src/app/new/(content)/components/dialog/demos/hero/css-modules/index.module.css b/docs/src/app/new/(content)/components/dialog/demos/hero/css-modules/index.module.css
index bad9b0459f..d70bbef41a 100644
--- a/docs/src/app/new/(content)/components/dialog/demos/hero/css-modules/index.module.css
+++ b/docs/src/app/new/(content)/components/dialog/demos/hero/css-modules/index.module.css
@@ -38,8 +38,8 @@
opacity: 0.7;
}
- &[data-entering],
- &[data-exiting] {
+ &[data-starting-style],
+ &[data-ending-style] {
opacity: 0;
}
}
@@ -61,8 +61,8 @@
outline: 0;
transition: all 150ms;
- &[data-entering],
- &[data-exiting] {
+ &[data-starting-style],
+ &[data-ending-style] {
opacity: 0;
transform: translate(-50%, -50%) scale(0.9);
}
diff --git a/docs/src/app/new/(content)/components/dialog/demos/hero/tailwind/index.tsx b/docs/src/app/new/(content)/components/dialog/demos/hero/tailwind/index.tsx
index 8912b5c348..67390a3e11 100644
--- a/docs/src/app/new/(content)/components/dialog/demos/hero/tailwind/index.tsx
+++ b/docs/src/app/new/(content)/components/dialog/demos/hero/tailwind/index.tsx
@@ -7,8 +7,8 @@ export default function ExampleDialog() {
View notifications
-
-
+
+
Your notifications
diff --git a/docs/src/components/MobileNav.css b/docs/src/components/MobileNav.css
index 1d7e65d95d..20fa701e86 100644
--- a/docs/src/components/MobileNav.css
+++ b/docs/src/components/MobileNav.css
@@ -15,14 +15,14 @@
background-image: linear-gradient(to bottom, transparent, rgb(0 0 0 / 25%) 6rem);
}
- &[data-entering],
- &[data-exiting] {
+ &[data-starting-style],
+ &[data-ending-style] {
-webkit-backdrop-filter: blur(0px);
backdrop-filter: blur(0px);
opacity: 0;
}
- &[data-exiting] {
+ &[data-ending-style] {
transition-duration: 250ms;
transition-timing-function: var(--ease-in-slow);
}
@@ -43,13 +43,13 @@
transition-property: transform, filter;
transition-timing-function: var(--ease-out-fast);
- &[data-entering],
- &[data-exiting] {
+ &[data-starting-style],
+ &[data-ending-style] {
transform: translateY(100dvh);
filter: blur(1px);
}
- &[data-exiting] {
+ &[data-ending-style] {
/* Delay the blur transition so it doesn't feel unfocused until halway out */
transition-delay: 0ms, 125ms;
transition-duration: 250ms;
diff --git a/docs/src/components/Popup.css b/docs/src/components/Popup.css
index ca300121e5..b7132c149b 100644
--- a/docs/src/components/Popup.css
+++ b/docs/src/components/Popup.css
@@ -23,15 +23,15 @@
transition-property: opacity, transform;
transition-timing-function: var(--ease-out-fast);
- &[data-entering],
- &[data-exiting] {
+ &[data-starting-style],
+ &[data-ending-style] {
opacity: 0;
@media (prefers-reduced-motion: no-preference) {
transform: scale(0.98);
}
}
- &[data-exiting] {
+ &[data-ending-style] {
transition-timing-function: var(--ease-in-slow);
}
}
diff --git a/packages/react/src/accordion/item/styleHooks.ts b/packages/react/src/accordion/item/styleHooks.ts
index 8f4cbbd5e7..7ea86251af 100644
--- a/packages/react/src/accordion/item/styleHooks.ts
+++ b/packages/react/src/accordion/item/styleHooks.ts
@@ -9,10 +9,10 @@ export const accordionStyleHookMapping: CustomStyleHookMapping {
if (value === 'entering') {
- return { 'data-entering': '' } as Record;
+ return { 'data-starting-style': '' } as Record;
}
if (value === 'exiting') {
- return { 'data-exiting': '' };
+ return { 'data-ending-style': '' };
}
return null;
},
diff --git a/packages/react/src/alert-dialog/backdrop/AlertDialogBackdrop.tsx b/packages/react/src/alert-dialog/backdrop/AlertDialogBackdrop.tsx
index d18ec77f0b..0cd2cff9f0 100644
--- a/packages/react/src/alert-dialog/backdrop/AlertDialogBackdrop.tsx
+++ b/packages/react/src/alert-dialog/backdrop/AlertDialogBackdrop.tsx
@@ -14,10 +14,10 @@ const customStyleHookMapping: CustomStyleHookMapping
...baseMapping,
transitionStatus: (value) => {
if (value === 'entering') {
- return { 'data-entering': '' } as Record;
+ return { 'data-starting-style': '' } as Record;
}
if (value === 'exiting') {
- return { 'data-exiting': '' };
+ return { 'data-ending-style': '' };
}
return null;
},
diff --git a/packages/react/src/alert-dialog/popup/AlertDialogPopup.tsx b/packages/react/src/alert-dialog/popup/AlertDialogPopup.tsx
index 4178776774..93ce52ff4b 100644
--- a/packages/react/src/alert-dialog/popup/AlertDialogPopup.tsx
+++ b/packages/react/src/alert-dialog/popup/AlertDialogPopup.tsx
@@ -18,10 +18,10 @@ const customStyleHookMapping: CustomStyleHookMapping = {
nestedOpenDialogCount: (value) => ({ 'data-nested-dialogs': value.toString() }),
transitionStatus: (value) => {
if (value === 'entering') {
- return { 'data-entering': '' } as Record;
+ return { 'data-starting-style': '' } as Record;
}
if (value === 'exiting') {
- return { 'data-exiting': '' };
+ return { 'data-ending-style': '' };
}
return null;
},
diff --git a/packages/react/src/collapsible/root/styleHooks.ts b/packages/react/src/collapsible/root/styleHooks.ts
index 4f04971ecf..1529cadd23 100644
--- a/packages/react/src/collapsible/root/styleHooks.ts
+++ b/packages/react/src/collapsible/root/styleHooks.ts
@@ -6,10 +6,10 @@ export const collapsibleStyleHookMapping: CustomStyleHookMapping {
if (value === 'entering') {
- return { 'data-entering': '' } as Record;
+ return { 'data-starting-style': '' } as Record;
}
if (value === 'exiting') {
- return { 'data-exiting': '' };
+ return { 'data-ending-style': '' };
}
return null;
},
diff --git a/packages/react/src/dialog/backdrop/DialogBackdrop.tsx b/packages/react/src/dialog/backdrop/DialogBackdrop.tsx
index e35fd1d56a..b8e82ae6b1 100644
--- a/packages/react/src/dialog/backdrop/DialogBackdrop.tsx
+++ b/packages/react/src/dialog/backdrop/DialogBackdrop.tsx
@@ -14,10 +14,10 @@ const customStyleHookMapping: CustomStyleHookMapping = {
...baseMapping,
transitionStatus: (value) => {
if (value === 'entering') {
- return { 'data-entering': '' } as Record;
+ return { 'data-starting-style': '' } as Record;
}
if (value === 'exiting') {
- return { 'data-exiting': '' };
+ return { 'data-ending-style': '' };
}
return null;
},
diff --git a/packages/react/src/dialog/popup/DialogPopup.tsx b/packages/react/src/dialog/popup/DialogPopup.tsx
index 363350debb..23e83792d8 100644
--- a/packages/react/src/dialog/popup/DialogPopup.tsx
+++ b/packages/react/src/dialog/popup/DialogPopup.tsx
@@ -18,10 +18,10 @@ const customStyleHookMapping: CustomStyleHookMapping = {
nestedOpenDialogCount: (value) => ({ 'data-nested-dialogs': value.toString() }),
transitionStatus: (value) => {
if (value === 'entering') {
- return { 'data-entering': '' } as Record;
+ return { 'data-starting-style': '' } as Record;
}
if (value === 'exiting') {
- return { 'data-exiting': '' };
+ return { 'data-ending-style': '' };
}
return null;
},
diff --git a/packages/react/src/dialog/root/DialogRoot.test.tsx b/packages/react/src/dialog/root/DialogRoot.test.tsx
index a6f4732ba5..30655d3f6a 100644
--- a/packages/react/src/dialog/root/DialogRoot.test.tsx
+++ b/packages/react/src/dialog/root/DialogRoot.test.tsx
@@ -99,7 +99,7 @@ describe('', () => {
opacity: 1;
}
- .animation-test-popup[data-exiting] {
+ .animation-test-popup[data-ending-style] {
animation: test-anim 50ms;
}
`;
diff --git a/packages/react/src/menu/popup/MenuPopup.tsx b/packages/react/src/menu/popup/MenuPopup.tsx
index ae0a8650ff..7313a1cdd7 100644
--- a/packages/react/src/menu/popup/MenuPopup.tsx
+++ b/packages/react/src/menu/popup/MenuPopup.tsx
@@ -16,10 +16,10 @@ const customStyleHookMapping: CustomStyleHookMapping = {
...baseMapping,
transitionStatus(value) {
if (value === 'entering') {
- return { 'data-entering': '' } as Record;
+ return { 'data-starting-style': '' } as Record;
}
if (value === 'exiting') {
- return { 'data-exiting': '' };
+ return { 'data-ending-style': '' };
}
return null;
},
diff --git a/packages/react/src/menu/root/MenuRoot.test.tsx b/packages/react/src/menu/root/MenuRoot.test.tsx
index 0ae05fa6e6..d8829346dc 100644
--- a/packages/react/src/menu/root/MenuRoot.test.tsx
+++ b/packages/react/src/menu/root/MenuRoot.test.tsx
@@ -743,7 +743,7 @@ describe('', () => {
opacity: 1;
}
- .animation-test-popup[data-exiting] {
+ .animation-test-popup[data-ending-style] {
animation: test-anim 50ms;
}
`;
diff --git a/packages/react/src/popover/backdrop/PopoverBackdrop.tsx b/packages/react/src/popover/backdrop/PopoverBackdrop.tsx
index 3913681f67..47814a6c6f 100644
--- a/packages/react/src/popover/backdrop/PopoverBackdrop.tsx
+++ b/packages/react/src/popover/backdrop/PopoverBackdrop.tsx
@@ -15,10 +15,10 @@ const customStyleHookMapping: CustomStyleHookMapping = {
...baseMapping,
transitionStatus(value) {
if (value === 'entering') {
- return { 'data-entering': '' } as Record;
+ return { 'data-starting-style': '' } as Record;
}
if (value === 'exiting') {
- return { 'data-exiting': '' };
+ return { 'data-ending-style': '' };
}
return null;
},
diff --git a/packages/react/src/popover/popup/PopoverPopup.tsx b/packages/react/src/popover/popup/PopoverPopup.tsx
index 95c862e493..21b687c813 100644
--- a/packages/react/src/popover/popup/PopoverPopup.tsx
+++ b/packages/react/src/popover/popup/PopoverPopup.tsx
@@ -19,10 +19,10 @@ const customStyleHookMapping: CustomStyleHookMapping = {
...baseMapping,
transitionStatus(value) {
if (value === 'entering') {
- return { 'data-entering': '' } as Record;
+ return { 'data-starting-style': '' } as Record;
}
if (value === 'exiting') {
- return { 'data-exiting': '' };
+ return { 'data-ending-style': '' };
}
return null;
},
diff --git a/packages/react/src/popover/root/PopoverRoot.test.tsx b/packages/react/src/popover/root/PopoverRoot.test.tsx
index 063072e4e0..a824e15bd3 100644
--- a/packages/react/src/popover/root/PopoverRoot.test.tsx
+++ b/packages/react/src/popover/root/PopoverRoot.test.tsx
@@ -231,7 +231,7 @@ describe('', () => {
opacity: 1;
}
- .animation-test-popup[data-exiting] {
+ .animation-test-popup[data-ending-style] {
animation: test-anim 50ms;
}
`;
diff --git a/packages/react/src/preview-card/backdrop/PreviewCardBackdrop.tsx b/packages/react/src/preview-card/backdrop/PreviewCardBackdrop.tsx
index a31a0da04e..a00c6303a3 100644
--- a/packages/react/src/preview-card/backdrop/PreviewCardBackdrop.tsx
+++ b/packages/react/src/preview-card/backdrop/PreviewCardBackdrop.tsx
@@ -15,10 +15,10 @@ const customStyleHookMapping: CustomStyleHookMapping
...baseMapping,
transitionStatus(value) {
if (value === 'entering') {
- return { 'data-entering': '' } as Record;
+ return { 'data-starting-style': '' } as Record;
}
if (value === 'exiting') {
- return { 'data-exiting': '' };
+ return { 'data-ending-style': '' };
}
return null;
},
diff --git a/packages/react/src/preview-card/popup/PreviewCardPopup.tsx b/packages/react/src/preview-card/popup/PreviewCardPopup.tsx
index 09c791ec4e..1f2a3cc63e 100644
--- a/packages/react/src/preview-card/popup/PreviewCardPopup.tsx
+++ b/packages/react/src/preview-card/popup/PreviewCardPopup.tsx
@@ -16,10 +16,10 @@ const customStyleHookMapping: CustomStyleHookMapping = {
...baseMapping,
transitionStatus(value) {
if (value === 'entering') {
- return { 'data-entering': '' } as Record;
+ return { 'data-starting-style': '' } as Record;
}
if (value === 'exiting') {
- return { 'data-exiting': '' };
+ return { 'data-ending-style': '' };
}
return null;
},
diff --git a/packages/react/src/preview-card/root/PreviewCardRoot.test.tsx b/packages/react/src/preview-card/root/PreviewCardRoot.test.tsx
index 51cf7679fb..0ce3806600 100644
--- a/packages/react/src/preview-card/root/PreviewCardRoot.test.tsx
+++ b/packages/react/src/preview-card/root/PreviewCardRoot.test.tsx
@@ -204,7 +204,7 @@ describe('', () => {
opacity: 1;
}
- .animation-test-popup[data-exiting] {
+ .animation-test-popup[data-ending-style] {
animation: test-anim 50ms;
}
`;
diff --git a/packages/react/src/select/backdrop/SelectBackdrop.tsx b/packages/react/src/select/backdrop/SelectBackdrop.tsx
index 6613d93a4f..b534053500 100644
--- a/packages/react/src/select/backdrop/SelectBackdrop.tsx
+++ b/packages/react/src/select/backdrop/SelectBackdrop.tsx
@@ -15,11 +15,11 @@ const customStyleHookMapping: CustomStyleHookMapping = {
...popupOpenStateMapping,
transitionStatus(value): Record | null {
if (value === 'entering') {
- return { 'data-entering': '' };
+ return { 'data-starting-style': '' };
}
if (value === 'exiting') {
- return { 'data-exiting': '' };
+ return { 'data-ending-style': '' };
}
return null;
diff --git a/packages/react/src/select/popup/SelectPopup.tsx b/packages/react/src/select/popup/SelectPopup.tsx
index 3474f7ca91..34f0b44780 100644
--- a/packages/react/src/select/popup/SelectPopup.tsx
+++ b/packages/react/src/select/popup/SelectPopup.tsx
@@ -16,11 +16,11 @@ const customStyleHookMapping: CustomStyleHookMapping = {
...popupOpenStateMapping,
transitionStatus(value): Record | null {
if (value === 'entering') {
- return { 'data-entering': '' };
+ return { 'data-starting-style': '' };
}
if (value === 'exiting') {
- return { 'data-exiting': '' };
+ return { 'data-ending-style': '' };
}
return null;
diff --git a/packages/react/src/select/root/SelectRoot.test.tsx b/packages/react/src/select/root/SelectRoot.test.tsx
index 642d5f40a0..e075158085 100644
--- a/packages/react/src/select/root/SelectRoot.test.tsx
+++ b/packages/react/src/select/root/SelectRoot.test.tsx
@@ -252,7 +252,7 @@ describe('', () => {
opacity: 1;
}
- .animation-test-popup[data-exiting] {
+ .animation-test-popup[data-ending-style] {
animation: test-anim 50ms;
}
`;
diff --git a/packages/react/src/tooltip/popup/TooltipPopup.tsx b/packages/react/src/tooltip/popup/TooltipPopup.tsx
index 46605ba558..3dfc3376ae 100644
--- a/packages/react/src/tooltip/popup/TooltipPopup.tsx
+++ b/packages/react/src/tooltip/popup/TooltipPopup.tsx
@@ -15,10 +15,10 @@ const customStyleHookMapping: CustomStyleHookMapping = {
...baseMapping,
transitionStatus(value) {
if (value === 'entering') {
- return { 'data-entering': '' } as Record;
+ return { 'data-starting-style': '' } as Record;
}
if (value === 'exiting') {
- return { 'data-exiting': '' };
+ return { 'data-ending-style': '' };
}
return null;
},