;
- @Element() hostElement!: HTMLIxGroupElement;
-
@State() itemSelected = false;
+ @State() dropdownTriggerRef: HTMLElement;
+ @State() slotSize = this.groupItems.length;
+ @State() footerVisible = false;
+
+ private observer: MutationObserver;
get dropdownItems() {
return Array.from(
@@ -94,41 +100,7 @@ export class Group {
}
get groupContent() {
- return this.hostElement.querySelector('.group-content');
- }
-
- get footer() {
- return this.hostElement.querySelector('.footer');
- }
-
- @State() dropdownTriggerRef: HTMLElement;
-
- @State() slotSize = this.groupItems.length;
-
- constructor() {}
-
- @Listen('keydown', {
- target: 'window',
- })
- async onKeyDown(event: KeyboardEvent) {
- const targetElement = event.target as HTMLElement;
-
- if (!this.hostElement.contains(targetElement)) {
- return;
- }
-
- if (event.code === 'Enter' || event.code === 'NumpadEnter') {
- if (targetElement.classList.contains('group-header')) {
- if (this.suppressHeaderSelection) {
- this.collapsed = !this.collapsed;
- } else {
- this.selected = !this.selected;
- }
- } else if (targetElement.matches('ix-group-item')) {
- const groupItem = targetElement as HTMLIxGroupItemElement;
- groupItem.selected = !groupItem.selected;
- }
- }
+ return this.hostElement.shadowRoot.querySelector('.group-content');
}
private onExpandClick(event: Event) {
@@ -169,6 +141,16 @@ export class Group {
}
}
+ private onSlotChange() {
+ const slot = this.hostElement.shadowRoot.querySelector(
+ 'slot[name="footer"]'
+ );
+
+ if (slot) {
+ this.footerVisible = hasSlottedElements(slot);
+ }
+ }
+
componentWillRender() {
this.groupItems.forEach((item, index) => {
if (this.selected === true) {
@@ -179,19 +161,9 @@ export class Group {
}
item.selected = index === this.index;
item.index = index;
- item.classList.remove('last');
- if (!this.footer?.children.length && index === this.slotSize - 1) {
- item.classList.add('last');
- }
});
-
- if (this.footer?.childElementCount > 1) {
- this.groupContent.appendChild(this.footer);
- }
}
- private observer: MutationObserver;
-
componentDidLoad() {
this.observer = createMutationObserver(() => {
this.slotSize = this.groupItems.length;
@@ -268,19 +240,26 @@ export class Group {
-
-
-
-
+ {!this.collapsed ? (
+
+
+
+ this.onSlotChange()}
+ >
+
+
+ ) : null}
);
diff --git a/packages/core/src/components/utils/shadow-dom.ts b/packages/core/src/components/utils/shadow-dom.ts
index 9e8998c08a1..c8aa56719ca 100644
--- a/packages/core/src/components/utils/shadow-dom.ts
+++ b/packages/core/src/components/utils/shadow-dom.ts
@@ -12,3 +12,11 @@ export function closestElement(selector: string, el: any) {
closestElement(selector, (el.getRootNode() as any).host)
);
}
+
+export function getSlottedElements(slot: any) {
+ return slot.assignedElements({ flatten: true });
+}
+
+export function hasSlottedElements(slot: any) {
+ return slot.assignedElements({ flatten: true }).length !== 0;
+}
diff --git a/packages/core/src/tests/group/group.e2e.ts b/packages/core/src/tests/group/group.e2e.ts
index 0538dc4c14d..08f28f07b5d 100644
--- a/packages/core/src/tests/group/group.e2e.ts
+++ b/packages/core/src/tests/group/group.e2e.ts
@@ -13,17 +13,13 @@ import { regressionTest } from '@utils/test';
regressionTest.describe('group', () => {
regressionTest('basic', async ({ page }) => {
await page.goto('group/basic');
- expect(await page.screenshot({ fullPage: true })).toMatchSnapshot({
- maxDiffPixelRatio: 0.05,
- });
+ expect(await page.screenshot({ fullPage: true })).toMatchSnapshot();
});
regressionTest('with context menu', async ({ page }) => {
await page.goto('group/context-menu');
await page.locator('ix-icon-button').click();
- expect(await page.screenshot({ fullPage: true })).toMatchSnapshot({
- maxDiffPixelRatio: 0.05,
- });
+ expect(await page.screenshot({ fullPage: true })).toMatchSnapshot();
});
regressionTest('selected', async ({ page }) => {
@@ -37,10 +33,8 @@ regressionTest.describe('group', () => {
await page.goto('group/basic');
await page.locator('.btn-expand-header .glyph').click();
await page.locator('text=Example text 1').first().click();
- await page.locator('text=Example text 1').first().hover();
+ await page.locator('text=Example text 2').first().hover();
expect(await page.screenshot({ fullPage: true })).toMatchSnapshot();
});
-
- // ix-icon-button
});
diff --git a/packages/core/src/tests/group/group.e2e.ts-snapshots/group-basic-1-chromium---theme-classic-dark-linux.png b/packages/core/src/tests/group/group.e2e.ts-snapshots/group-basic-1-chromium---theme-classic-dark-linux.png
index 5a373349905..bfcc5540d9d 100644
Binary files a/packages/core/src/tests/group/group.e2e.ts-snapshots/group-basic-1-chromium---theme-classic-dark-linux.png and b/packages/core/src/tests/group/group.e2e.ts-snapshots/group-basic-1-chromium---theme-classic-dark-linux.png differ
diff --git a/packages/core/src/tests/group/group.e2e.ts-snapshots/group-basic-1-chromium---theme-classic-light-linux.png b/packages/core/src/tests/group/group.e2e.ts-snapshots/group-basic-1-chromium---theme-classic-light-linux.png
index b145bcd474d..b02b6e0f652 100644
Binary files a/packages/core/src/tests/group/group.e2e.ts-snapshots/group-basic-1-chromium---theme-classic-light-linux.png and b/packages/core/src/tests/group/group.e2e.ts-snapshots/group-basic-1-chromium---theme-classic-light-linux.png differ
diff --git a/packages/core/src/tests/group/group.e2e.ts-snapshots/group-item-selected-1-chromium---theme-classic-dark-linux.png b/packages/core/src/tests/group/group.e2e.ts-snapshots/group-item-selected-1-chromium---theme-classic-dark-linux.png
index 7610dbedb7b..170f7e97d78 100644
Binary files a/packages/core/src/tests/group/group.e2e.ts-snapshots/group-item-selected-1-chromium---theme-classic-dark-linux.png and b/packages/core/src/tests/group/group.e2e.ts-snapshots/group-item-selected-1-chromium---theme-classic-dark-linux.png differ
diff --git a/packages/core/src/tests/group/group.e2e.ts-snapshots/group-item-selected-1-chromium---theme-classic-light-linux.png b/packages/core/src/tests/group/group.e2e.ts-snapshots/group-item-selected-1-chromium---theme-classic-light-linux.png
index 4ab55eca54c..2768a82ec24 100644
Binary files a/packages/core/src/tests/group/group.e2e.ts-snapshots/group-item-selected-1-chromium---theme-classic-light-linux.png and b/packages/core/src/tests/group/group.e2e.ts-snapshots/group-item-selected-1-chromium---theme-classic-light-linux.png differ
diff --git a/packages/core/src/tests/group/group.e2e.ts-snapshots/group-with-context-menu-1-chromium---theme-classic-dark-linux.png b/packages/core/src/tests/group/group.e2e.ts-snapshots/group-with-context-menu-1-chromium---theme-classic-dark-linux.png
index 829e9550105..6b8b015df3a 100644
Binary files a/packages/core/src/tests/group/group.e2e.ts-snapshots/group-with-context-menu-1-chromium---theme-classic-dark-linux.png and b/packages/core/src/tests/group/group.e2e.ts-snapshots/group-with-context-menu-1-chromium---theme-classic-dark-linux.png differ
diff --git a/packages/core/src/tests/group/group.e2e.ts-snapshots/group-with-context-menu-1-chromium---theme-classic-light-linux.png b/packages/core/src/tests/group/group.e2e.ts-snapshots/group-with-context-menu-1-chromium---theme-classic-light-linux.png
index 6b59d04ee28..df3380d8e6c 100644
Binary files a/packages/core/src/tests/group/group.e2e.ts-snapshots/group-with-context-menu-1-chromium---theme-classic-light-linux.png and b/packages/core/src/tests/group/group.e2e.ts-snapshots/group-with-context-menu-1-chromium---theme-classic-light-linux.png differ
diff --git a/packages/core/stencil.config.ts b/packages/core/stencil.config.ts
index cc00dd59d5e..02e3e727f57 100644
--- a/packages/core/stencil.config.ts
+++ b/packages/core/stencil.config.ts
@@ -87,7 +87,7 @@ export const config: Config = {
components: ['ix-flip-tile', 'ix-flip-tile-content'],
},
{
- components: ['ix-group', 'ix-group-dropdown-item', 'ix-group-item'],
+ components: ['ix-group', 'ix-group-item'],
},
{
components: ['ix-icon'],
diff --git a/packages/documentation/docs/controls/group.md b/packages/documentation/docs/controls/group.md
index 7c6b23068cc..f3041d10525 100644
--- a/packages/documentation/docs/controls/group.md
+++ b/packages/documentation/docs/controls/group.md
@@ -6,9 +6,6 @@ import Events from './../auto-generated/ix-group/events.md';
import ItemProps from './../auto-generated/ix-group-item/props.md';
import ItemEvents from './../auto-generated/ix-group-item/events.md';
-import DropdownItemProps from './../auto-generated/ix-group-dropdown-item/props.md';
-import DropdownItemEvents from './../auto-generated/ix-group-dropdown-item/events.md';
-
import SourceGroup from './../auto-generated/previews/web-component/group.md'
import SourceGroupSuppressed from './../auto-generated/previews/web-component/group-header-suppressed.md'
import SourceGroupCustomEntry from './../auto-generated/previews/web-component/group-custom-entry.md'
@@ -106,13 +103,3 @@ frameworks={{
### Events
-
-## Properties (ix-group-dropdown-item)
-
-### Props
-
-
-
-### Events
-
-
diff --git a/packages/react/src/components.ts b/packages/react/src/components.ts
index 2df4b70a45d..cc83a3eb089 100644
--- a/packages/react/src/components.ts
+++ b/packages/react/src/components.ts
@@ -45,7 +45,6 @@ export const IxFlipTile = /*@__PURE__*/createReactComponent('ix-flip-tile-content');
export const IxGroup = /*@__PURE__*/createReactComponent('ix-group');
export const IxGroupContextMenu = /*@__PURE__*/createReactComponent('ix-group-context-menu');
-export const IxGroupDropdownItem = /*@__PURE__*/createReactComponent('ix-group-dropdown-item');
export const IxGroupItem = /*@__PURE__*/createReactComponent('ix-group-item');
export const IxIcon = /*@__PURE__*/createReactComponent('ix-icon');
export const IxIconButton = /*@__PURE__*/createReactComponent('ix-icon-button');
diff --git a/packages/vue/src/components.ts b/packages/vue/src/components.ts
index 80a15f31ccb..01e88490108 100644
--- a/packages/vue/src/components.ts
+++ b/packages/vue/src/components.ts
@@ -340,12 +340,6 @@ export const IxGroup = /*@__PURE__*/ defineContainer('ix-group', un
export const IxGroupContextMenu = /*@__PURE__*/ defineContainer('ix-group-context-menu', undefined);
-export const IxGroupDropdownItem = /*@__PURE__*/ defineContainer('ix-group-dropdown-item', undefined, [
- 'label',
- 'icon'
-]);
-
-
export const IxGroupItem = /*@__PURE__*/ defineContainer('ix-group-item', undefined, [
'icon',
'text',