diff --git a/.changeset/beige-suits-jam.md b/.changeset/beige-suits-jam.md
new file mode 100644
index 00000000000..5dbfa0044da
--- /dev/null
+++ b/.changeset/beige-suits-jam.md
@@ -0,0 +1,5 @@
+---
+'@itwin/itwinui-react': major
+---
+
+The dependencies on `@itwin/itwinui-css` and `@itwin/itwinui-variable` have been removed. This means `@itwin/itwinui-react` will bring its own stylesheet.
diff --git a/.changeset/loud-adults-deny.md b/.changeset/loud-adults-deny.md
new file mode 100644
index 00000000000..2583012d5b8
--- /dev/null
+++ b/.changeset/loud-adults-deny.md
@@ -0,0 +1,5 @@
+---
+'@itwin/itwinui-react': major
+---
+
+All elements have had their class names changed to prevent conflict with older versions. It is strongly recommended to switch these internal classes with your own classes or data attributes.
diff --git a/.changeset/ninety-phones-deny.md b/.changeset/ninety-phones-deny.md
new file mode 100644
index 00000000000..46f1036a246
--- /dev/null
+++ b/.changeset/ninety-phones-deny.md
@@ -0,0 +1,5 @@
+---
+'@itwin/itwinui-css': major
+---
+
+`border-box` will now be set for _all_ elements under `iui-root`.
diff --git a/.changeset/smart-guests-play.md b/.changeset/smart-guests-play.md
index a86cd693f2a..9326460c888 100644
--- a/.changeset/smart-guests-play.md
+++ b/.changeset/smart-guests-play.md
@@ -3,4 +3,4 @@
'@itwin/itwinui-css': major
---
-Instead of cloning passed icons to set classes on them, the classes will now be set on a wrapping element. Affected components: `Header`, `Select`, `MenuItem`, `RadioTile`, `Tabs`, `ToggleSwitch`, `TreeNode`, `InputContainer` (and all input variants).
+Instead of cloning passed icons to set classes on them, the classes will now be set on a wrapping element. Affected components: `Header`, `Select`, `MenuItem`, `RadioTile`, `Tabs`, `Tile`, `ToggleSwitch`, `TreeNode`, `InputContainer` (and all input variants).
diff --git a/.changeset/twelve-olives-roll.md b/.changeset/twelve-olives-roll.md
new file mode 100644
index 00000000000..ee84129715b
--- /dev/null
+++ b/.changeset/twelve-olives-roll.md
@@ -0,0 +1,5 @@
+---
+'@itwin/itwinui-variables': minor
+---
+
+All selectors have been wrapped with `:where` to nullify specificity.
diff --git a/apps/storybook/.storybook/StoryWithDecorator.jsx b/apps/storybook/.storybook/StoryWithDecorator.jsx
index 17855b7dbe6..28c623c0081 100644
--- a/apps/storybook/.storybook/StoryWithDecorator.jsx
+++ b/apps/storybook/.storybook/StoryWithDecorator.jsx
@@ -20,6 +20,7 @@ export default function StoryWithDecorator(Story, context) {
theme={theme}
themeOptions={{ highContrast, applyBackground: false }}
style={{ background }}
+ className='story-wrapper'
>
diff --git a/apps/storybook/.storybook/preview-body.html b/apps/storybook/.storybook/preview-body.html
index 437351d0279..709957e9c30 100644
--- a/apps/storybook/.storybook/preview-body.html
+++ b/apps/storybook/.storybook/preview-body.html
@@ -2,7 +2,7 @@
html, body {
padding: 0 !important;
}
- .iui-root {
+ .story-wrapper {
padding: 1rem;
height: 100svh;
}
diff --git a/apps/storybook/.storybook/preview.js b/apps/storybook/.storybook/preview.js
index 9043d3b169b..239e967298b 100644
--- a/apps/storybook/.storybook/preview.js
+++ b/apps/storybook/.storybook/preview.js
@@ -12,7 +12,6 @@ const prefersDark = window.matchMedia?.('(prefers-color-scheme: dark)').matches;
export default {
parameters: {
darkMode: {
- classTarget: '.iui-root',
dark: { ...themes.dark, ...darkTheme },
light: { ...themes.light, ...lightTheme },
},
diff --git a/apps/storybook/cypress-visual-screenshots/baseline/Alert.test.ts-Sticky.png b/apps/storybook/cypress-visual-screenshots/baseline/Alert.test.ts-Sticky.png
index 9f8d5643ff3..a57bad06c22 100755
Binary files a/apps/storybook/cypress-visual-screenshots/baseline/Alert.test.ts-Sticky.png and b/apps/storybook/cypress-visual-screenshots/baseline/Alert.test.ts-Sticky.png differ
diff --git a/apps/storybook/cypress-visual-screenshots/baseline/Breadcrumbs.test.ts-Overflow.png b/apps/storybook/cypress-visual-screenshots/baseline/Breadcrumbs.test.ts-Overflow.png
old mode 100755
new mode 100644
index b6f8ee98182..ef2dfad1297
Binary files a/apps/storybook/cypress-visual-screenshots/baseline/Breadcrumbs.test.ts-Overflow.png and b/apps/storybook/cypress-visual-screenshots/baseline/Breadcrumbs.test.ts-Overflow.png differ
diff --git a/apps/storybook/cypress-visual-screenshots/baseline/ButtonGroup.test.ts-Overflow.png b/apps/storybook/cypress-visual-screenshots/baseline/ButtonGroup.test.ts-Overflow.png
index 691bb416f86..c6cff7b5d67 100755
Binary files a/apps/storybook/cypress-visual-screenshots/baseline/ButtonGroup.test.ts-Overflow.png and b/apps/storybook/cypress-visual-screenshots/baseline/ButtonGroup.test.ts-Overflow.png differ
diff --git a/apps/storybook/cypress-visual-screenshots/baseline/Dialog.test.ts-Draggable Relative To Container.png b/apps/storybook/cypress-visual-screenshots/baseline/Dialog.test.ts-Draggable Relative To Container.png
index d53edd2f0b7..979155290c3 100755
Binary files a/apps/storybook/cypress-visual-screenshots/baseline/Dialog.test.ts-Draggable Relative To Container.png and b/apps/storybook/cypress-visual-screenshots/baseline/Dialog.test.ts-Draggable Relative To Container.png differ
diff --git a/apps/storybook/cypress-visual-screenshots/baseline/Header.test.ts-Slim.png b/apps/storybook/cypress-visual-screenshots/baseline/Header.test.ts-Slim.png
index ba406f81d37..14c8e774ded 100755
Binary files a/apps/storybook/cypress-visual-screenshots/baseline/Header.test.ts-Slim.png and b/apps/storybook/cypress-visual-screenshots/baseline/Header.test.ts-Slim.png differ
diff --git a/apps/storybook/cypress-visual-screenshots/baseline/Tabs.test.ts-Horizontal Overflow (Scroll end).png b/apps/storybook/cypress-visual-screenshots/baseline/Tabs.test.ts-Horizontal Overflow (Scroll end).png
index 088ed1583d7..8060382982e 100755
Binary files a/apps/storybook/cypress-visual-screenshots/baseline/Tabs.test.ts-Horizontal Overflow (Scroll end).png and b/apps/storybook/cypress-visual-screenshots/baseline/Tabs.test.ts-Horizontal Overflow (Scroll end).png differ
diff --git a/apps/storybook/cypress-visual-screenshots/baseline/Tabs.test.ts-Horizontal Overflow (Scroll start).png b/apps/storybook/cypress-visual-screenshots/baseline/Tabs.test.ts-Horizontal Overflow (Scroll start).png
index f5ed85d661e..cebab3de5b6 100755
Binary files a/apps/storybook/cypress-visual-screenshots/baseline/Tabs.test.ts-Horizontal Overflow (Scroll start).png and b/apps/storybook/cypress-visual-screenshots/baseline/Tabs.test.ts-Horizontal Overflow (Scroll start).png differ
diff --git a/apps/storybook/cypress-visual-screenshots/baseline/Tabs.test.ts-Horizontal Overflow.png b/apps/storybook/cypress-visual-screenshots/baseline/Tabs.test.ts-Horizontal Overflow.png
index 051c8ad39df..4812a4a879a 100755
Binary files a/apps/storybook/cypress-visual-screenshots/baseline/Tabs.test.ts-Horizontal Overflow.png and b/apps/storybook/cypress-visual-screenshots/baseline/Tabs.test.ts-Horizontal Overflow.png differ
diff --git a/apps/storybook/cypress-visual-screenshots/baseline/Tabs.test.ts-Vertical Overflow.png b/apps/storybook/cypress-visual-screenshots/baseline/Tabs.test.ts-Vertical Overflow.png
index cabfad43336..470ecfded38 100755
Binary files a/apps/storybook/cypress-visual-screenshots/baseline/Tabs.test.ts-Vertical Overflow.png and b/apps/storybook/cypress-visual-screenshots/baseline/Tabs.test.ts-Vertical Overflow.png differ
diff --git a/apps/storybook/src/AvatarGroup.test.ts b/apps/storybook/src/AvatarGroup.test.ts
index 29a6f8b2651..ed05fa41345 100644
--- a/apps/storybook/src/AvatarGroup.test.ts
+++ b/apps/storybook/src/AvatarGroup.test.ts
@@ -18,7 +18,7 @@ describe('AvatarGroup', () => {
cy.visit('iframe', { qs: { id } });
if (testName.includes('Tooltip')) {
- cy.get('.iui-avatar-count').trigger('mouseenter'); // trigger tooltip
+ cy.get('abbr').contains('3').parent().trigger('mouseenter');
}
cy.compareSnapshot(testName);
diff --git a/apps/storybook/src/Breadcrumbs.test.ts b/apps/storybook/src/Breadcrumbs.test.ts
index 23106829bf2..21fe76d6d0b 100644
--- a/apps/storybook/src/Breadcrumbs.test.ts
+++ b/apps/storybook/src/Breadcrumbs.test.ts
@@ -19,10 +19,6 @@ describe('Breadcrumbs', () => {
const id = Cypress.storyId(storyPath, testName);
cy.visit('iframe', { qs: { id } });
- if (testName === 'Custom Overflow Back Button') {
- cy.get('.iui-button').eq(1).trigger('mouseenter');
- }
-
cy.compareSnapshot(testName);
});
});
diff --git a/apps/storybook/src/ColorPicker.test.ts b/apps/storybook/src/ColorPicker.test.ts
index e3d84dc6fdf..3b97dd5712f 100644
--- a/apps/storybook/src/ColorPicker.test.ts
+++ b/apps/storybook/src/ColorPicker.test.ts
@@ -10,7 +10,9 @@ describe('ColorPicker', () => {
it(testName, function () {
const id = Cypress.storyId(storyPath, testName);
cy.visit('iframe', { qs: { id } });
- cy.get('.iui-button').first().click();
+ cy.get('#storybook-root').within(() => {
+ cy.get('button').first().click();
+ });
cy.compareSnapshot(testName);
});
});
diff --git a/apps/storybook/src/ComboBox.test.ts b/apps/storybook/src/ComboBox.test.ts
index 49b48281fa3..1d12164bd77 100644
--- a/apps/storybook/src/ComboBox.test.ts
+++ b/apps/storybook/src/ComboBox.test.ts
@@ -24,7 +24,7 @@ describe('ComboBox', () => {
cy.compareSnapshot(`${testName} (Closed)`);
cy.get('input').focus();
if (testName === 'Multiple Select') {
- cy.get('.iui-list-item').then((els) => {
+ cy.get('[role=option]').then((els) => {
const items = Array.from(els, (el) => el);
items[3].click();
});
diff --git a/apps/storybook/src/Dialog.test.ts b/apps/storybook/src/Dialog.test.ts
index 261af9ffbd7..4dd91356b8c 100644
--- a/apps/storybook/src/Dialog.test.ts
+++ b/apps/storybook/src/Dialog.test.ts
@@ -16,7 +16,9 @@ describe('Dialog', () => {
it(testName, function () {
const id = Cypress.storyId(storyPath, testName);
cy.visit('iframe', { qs: { id } });
- cy.get('.iui-button').first().click();
+ cy.get('#storybook-root').within(() => {
+ cy.get('button').first().click();
+ });
cy.compareSnapshot(testName);
});
});
diff --git a/apps/storybook/src/DropdownButton.test.ts b/apps/storybook/src/DropdownButton.test.ts
index 457aafd799c..da2dbb97f60 100644
--- a/apps/storybook/src/DropdownButton.test.ts
+++ b/apps/storybook/src/DropdownButton.test.ts
@@ -11,7 +11,9 @@ describe('DropdownButton', () => {
const id = Cypress.storyId(storyPath, testName);
cy.visit('iframe', { qs: { id } });
cy.compareSnapshot(`${testName} (Closed)`);
- cy.get('.iui-button').click();
+ cy.get('#storybook-root').within(() => {
+ cy.get('button').click();
+ });
cy.compareSnapshot(`${testName} (Open)`);
});
});
diff --git a/apps/storybook/src/DropdownMenu.test.ts b/apps/storybook/src/DropdownMenu.test.ts
index a034efd2420..bf313becd1a 100644
--- a/apps/storybook/src/DropdownMenu.test.ts
+++ b/apps/storybook/src/DropdownMenu.test.ts
@@ -19,10 +19,12 @@ describe('DropdownMenu', () => {
const id = Cypress.storyId(storyPath, testName);
cy.visit('iframe', { qs: { id } });
cy.compareSnapshot(`${testName} (Closed)`);
- cy.get('.iui-button').click();
+ cy.get('#storybook-root').within(() => {
+ cy.get('button').first().click();
+ });
if (testName === 'Submenu') {
- cy.get('.iui-list-item').last().trigger('mouseenter');
+ cy.get('li[aria-expanded=false]').trigger('mouseenter');
}
cy.compareSnapshot(`${testName} (Open)`);
diff --git a/apps/storybook/src/ExpandableBlock.test.ts b/apps/storybook/src/ExpandableBlock.test.ts
index 910c28cbd79..10d9a5484e9 100644
--- a/apps/storybook/src/ExpandableBlock.test.ts
+++ b/apps/storybook/src/ExpandableBlock.test.ts
@@ -20,7 +20,7 @@ describe('ExpandableBlock', () => {
cy.visit('iframe', { qs: { id } });
cy.compareSnapshot(`${testName} (Closed)`);
if (testName !== 'Disabled') {
- cy.get('.iui-header').first().click();
+ cy.get('[role=button]').first().click();
cy.compareSnapshot(`${testName} (Open)`);
}
});
diff --git a/apps/storybook/src/FileUpload.test.ts b/apps/storybook/src/FileUpload.test.ts
index f91e267ebb6..3b687ed5429 100644
--- a/apps/storybook/src/FileUpload.test.ts
+++ b/apps/storybook/src/FileUpload.test.ts
@@ -20,7 +20,7 @@ describe('FileUpload', () => {
testName === 'Default File Upload Card' ||
testName === 'Custom File Upload Card'
) {
- cy.get('.iui-visually-hidden').selectFile(
+ cy.get('input').selectFile(
{
contents: Cypress.Buffer.from('file contents'),
fileName: 'file.txt',
diff --git a/apps/storybook/src/Flex.stories.tsx b/apps/storybook/src/Flex.stories.tsx
index 385c09bdea8..c5fa073dea8 100644
--- a/apps/storybook/src/Flex.stories.tsx
+++ b/apps/storybook/src/Flex.stories.tsx
@@ -65,11 +65,11 @@ export default {