From ee71c133584058986d540b11ae60b397883ab1f5 Mon Sep 17 00:00:00 2001 From: anastasiia_glushkova Date: Fri, 21 Aug 2026 16:59:11 +0200 Subject: [PATCH 1/3] feat(core): disable render property for cat-select option --- .../cat-select-demo/cat-select-demo.tsx | 3 +- ...-for-multiple-select-1-chromium-darwin.png | Bin 0 -> 8090 bytes ...on-for-single-select-1-chromium-darwin.png | Bin 0 -> 7677 bytes .../components/cat-select/cat-select.e2e.tsx | 31 ++++++ .../cat-select/cat-select.screenshot.tsx | 52 ++++++++++ .../src/components/cat-select/cat-select.scss | 13 +++ .../components/cat-select/cat-select.spec.tsx | 92 +++++++++++++++++- core/src/components/cat-select/cat-select.tsx | 65 ++++++++++--- 8 files changed, 238 insertions(+), 18 deletions(-) create mode 100644 core/src/components/cat-select/__screenshots__/cat-select.screenshot.tsx/cat-select-screenshot-renders-disabled-option-for-multiple-select-1-chromium-darwin.png create mode 100644 core/src/components/cat-select/__screenshots__/cat-select.screenshot.tsx/cat-select-screenshot-renders-disabled-option-for-single-select-1-chromium-darwin.png create mode 100644 core/src/components/cat-select/cat-select.screenshot.tsx diff --git a/core/src/components/cat-select-demo/cat-select-demo.tsx b/core/src/components/cat-select-demo/cat-select-demo.tsx index 3bc392681..156ceb750 100644 --- a/core/src/components/cat-select-demo/cat-select-demo.tsx +++ b/core/src/components/cat-select-demo/cat-select-demo.tsx @@ -294,7 +294,8 @@ export class CatSelectTest { avatar: { src: `https://picsum.photos/id/${Math.floor(Math.random() * 100)}/200`, round: true - } + }, + disabled: country.id === '2' }) }; } diff --git a/core/src/components/cat-select/__screenshots__/cat-select.screenshot.tsx/cat-select-screenshot-renders-disabled-option-for-multiple-select-1-chromium-darwin.png b/core/src/components/cat-select/__screenshots__/cat-select.screenshot.tsx/cat-select-screenshot-renders-disabled-option-for-multiple-select-1-chromium-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..5b9c2050a243ca94e2e6fd688b33f96a6d7567fe GIT binary patch literal 8090 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 m+i$%8)f5e7L8^A literal 0 HcmV?d00001 diff --git a/core/src/components/cat-select/__screenshots__/cat-select.screenshot.tsx/cat-select-screenshot-renders-disabled-option-for-single-select-1-chromium-darwin.png b/core/src/components/cat-select/__screenshots__/cat-select.screenshot.tsx/cat-select-screenshot-renders-disabled-option-for-single-select-1-chromium-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..990381fd307dcabe41a807d8e350a8578f17b6a9 GIT binary patch literal 7677 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 literal 0 HcmV?d00001 diff --git a/core/src/components/cat-select/cat-select.e2e.tsx b/core/src/components/cat-select/cat-select.e2e.tsx index b2847a50b..4f9491f43 100644 --- a/core/src/components/cat-select/cat-select.e2e.tsx +++ b/core/src/components/cat-select/cat-select.e2e.tsx @@ -1,5 +1,6 @@ import { describe, it, expect } from 'vitest'; import { render, waitForStable, h } from '@stencil/vitest'; +import { userEvent } from '@vitest/browser/context'; import { of } from 'rxjs'; describe('cat-select', () => { @@ -27,4 +28,34 @@ describe('cat-select', () => { await waitForStable(root); expect(changeSpy).not.toHaveReceivedEvent(); }); + + it('should not select a disabled option when clicked', async () => { + const { root, spyOnEvent } = await render(); + const changeSpy = spyOnEvent('catChange'); + (root as HTMLCatSelectElement).connect({ + resolve: () => of([]), + retrieve: () => + of({ + content: [ + { id: 'option1', label: 'Option 1', disabled: true }, + { id: 'option2', label: 'Option 2' } + ], + last: true + }), + render: (item: { label: string; disabled?: boolean }) => ({ label: item.label, disabled: item.disabled }) + }); + await waitForStable(root); + + await userEvent.click(root.shadowRoot!.querySelector('.select-wrapper')!); + await waitForStable(root); + + const disabledOption = root.shadowRoot!.querySelector( + '.select-option-disabled .select-option-single' + )!; + await userEvent.click(disabledOption, { force: true }); + await waitForStable(root); + + expect(changeSpy).not.toHaveReceivedEvent(); + expect((root as HTMLCatSelectElement).value).toBeFalsy(); + }); }); diff --git a/core/src/components/cat-select/cat-select.screenshot.tsx b/core/src/components/cat-select/cat-select.screenshot.tsx new file mode 100644 index 000000000..fc14ae6ec --- /dev/null +++ b/core/src/components/cat-select/cat-select.screenshot.tsx @@ -0,0 +1,52 @@ +import { describe, it, expect } from 'vitest'; +import { render, h, waitForStable } from '@stencil/vitest'; +import { userEvent } from '@vitest/browser/context'; +import { objectArrayConnector } from './connectors'; + +describe('cat-select screenshot', () => { + it('renders disabled option for single select', async () => { + const { root } = await render( +
+ +
+ ); + + const select = root.querySelector('cat-select') as HTMLCatSelectElement; + await select.connect( + objectArrayConnector([ + { id: 'option1', label: 'Option 1' }, + { id: 'option2', label: 'Option 2', disabled: true }, + { id: 'option3', label: 'Option 3' } + ]) + ); + await waitForStable(select); + + await userEvent.click(select.shadowRoot!.querySelector('.select-wrapper')!); + await waitForStable(select); + + await expect(root).toMatchScreenshot(); + }); + + it('renders disabled option for multiple select', async () => { + const { root } = await render( +
+ +
+ ); + + const select = root.querySelector('cat-select') as HTMLCatSelectElement; + await select.connect( + objectArrayConnector([ + { id: 'option1', label: 'Option 1' }, + { id: 'option2', label: 'Option 2', disabled: true }, + { id: 'option3', label: 'Option 3' } + ]) + ); + await waitForStable(select); + + await userEvent.click(select.shadowRoot!.querySelector('.select-wrapper')!); + await waitForStable(select); + + await expect(root).toMatchScreenshot(); + }); +}); diff --git a/core/src/components/cat-select/cat-select.scss b/core/src/components/cat-select/cat-select.scss index 6c2c7864d..f588292bd 100644 --- a/core/src/components/cat-select/cat-select.scss +++ b/core/src/components/cat-select/cat-select.scss @@ -253,6 +253,19 @@ cat-spinner { background-color: cat-token('color.theme.secondary.bg', 0.05); } +.select-option-disabled { + color: cat-token('color.ui.font.muted'); + + &:hover { + background-color: transparent; + } + + .select-option-single { + cursor: not-allowed; + pointer-events: none; + } +} + .select-option-active { outline: 2px solid cat-token('color.ui.border.focus'); outline-offset: -2px; diff --git a/core/src/components/cat-select/cat-select.spec.tsx b/core/src/components/cat-select/cat-select.spec.tsx index fafdc515b..da11f79f3 100644 --- a/core/src/components/cat-select/cat-select.spec.tsx +++ b/core/src/components/cat-select/cat-select.spec.tsx @@ -31,7 +31,7 @@ vi.mock('@floating-ui/dom', () => ({ })); import './cat-select'; -import { stringArrayConnector } from './connectors'; +import { objectArrayConnector, stringArrayConnector } from './connectors'; import { of, Subject } from 'rxjs'; describe('cat-select', () => { @@ -403,4 +403,94 @@ describe('cat-select', () => { }); }); }); + + describe('disabled options', () => { + it('should not select a disabled option on click in single-select mode', async () => { + const { root, waitForChanges, instance } = await render(); + await instance.connect( + objectArrayConnector([ + { id: 'option1', label: 'Option 1', disabled: true }, + { id: 'option2', label: 'Option 2' } + ]) + ); + + const trigger = root?.shadowRoot?.querySelector('.select-wrapper'); + trigger?.dispatchEvent(new MouseEvent('click', { bubbles: true })); + await waitForChanges(); + + const disabledOption = root?.shadowRoot?.querySelector( + '.select-option-disabled .select-option-single' + ); + disabledOption?.dispatchEvent(new MouseEvent('click', { bubbles: true })); + await waitForChanges(); + + expect(instance['state'].selection).toHaveLength(0); + }); + + it('should mark a disabled option with select-option-disabled class and aria-disabled', async () => { + const { root, waitForChanges, instance } = await render(); + await instance.connect( + objectArrayConnector([ + { id: 'option1', label: 'Option 1', disabled: true }, + { id: 'option2', label: 'Option 2' } + ]) + ); + + const trigger = root?.shadowRoot?.querySelector('.select-wrapper'); + trigger?.dispatchEvent(new MouseEvent('click', { bubbles: true })); + await waitForChanges(); + + const options = root?.shadowRoot?.querySelectorAll('li.select-option'); + expect(options?.[0].classList.contains('select-option-disabled')).toBe(true); + expect(options?.[0].getAttribute('aria-disabled')).toBe('true'); + expect(options?.[1].classList.contains('select-option-disabled')).toBe(false); + expect(options?.[1].hasAttribute('aria-disabled')).toBe(false); + }); + + it('should not toggle a disabled option in multiple-select mode', async () => { + const { root, waitForChanges, instance } = await render(); + await instance.connect( + objectArrayConnector([ + { id: 'option1', label: 'Option 1', disabled: true }, + { id: 'option2', label: 'Option 2' } + ]) + ); + + const trigger = root?.shadowRoot?.querySelector('.select-wrapper'); + trigger?.dispatchEvent(new MouseEvent('click', { bubbles: true })); + await waitForChanges(); + + const checkbox = root?.shadowRoot?.querySelector('cat-checkbox'); + expect(checkbox?.getAttribute('disabled')).not.toBeNull(); + + instance['toggle']({ item: { id: 'option1' }, render: { label: 'Option 1', disabled: true } }); + await waitForChanges(); + + expect(instance['state'].selection).toHaveLength(0); + }); + + it('should skip disabled options when navigating with arrow keys', async () => { + const { instance, waitForChanges } = await render(); + await instance.connect( + objectArrayConnector([ + { id: 'option1', label: 'Option 1' }, + { id: 'option2', label: 'Option 2', disabled: true }, + { id: 'option3', label: 'Option 3' } + ]) + ); + + instance['show'](); + await waitForChanges(); + instance['patchState']({ activeOptionIndex: 0 }); + + instance['onArrowKeyDown']({ + key: 'ArrowDown', + preventDefault: vi.fn(), + stopPropagation: vi.fn() + } as unknown as KeyboardEvent); + await waitForChanges(); + + expect(instance['state'].activeOptionIndex).toBe(2); + }); + }); }); diff --git a/core/src/components/cat-select/cat-select.tsx b/core/src/components/cat-select/cat-select.tsx index 542adf2ec..ce988ccea 100644 --- a/core/src/components/cat-select/cat-select.tsx +++ b/core/src/components/cat-select/cat-select.tsx @@ -35,6 +35,8 @@ export interface Page { export interface RenderInfo { label: string; description?: string; + /** Marks the option as disabled, preventing it from being selected or focused via keyboard navigation. */ + disabled?: boolean; avatar?: { src?: string; round?: boolean; @@ -872,6 +874,7 @@ export class CatSelect { private get optionsList() { return this.state.options.map((item, i) => { const isTagOption = this.tags && item.item.id === `select-${this.id}-option-tag`; + const isOptionDisabled = !!item.render.disabled; const isOptionSelected = this.isSelected(item.item.id) || (this.tags && this.isTagSelected(item.render.label)); @@ -886,15 +889,17 @@ export class CatSelect { return (
  • {this.multiple ? ( this.input?.focus()} @@ -931,7 +936,12 @@ export class CatSelect { 'select-option-active': this.state.activeOptionIndex === i }} onFocus={() => this.input?.focus()} - onClick={() => (isTagOption ? this.createTag(item.render.label) : this.select(item))} + onClick={() => { + if (isOptionDisabled) { + return; + } + isTagOption ? this.createTag(item.render.label) : this.select(item); + }} tabIndex={-1} > {item.render.avatar ? ( @@ -1033,6 +1043,9 @@ export class CatSelect { } private select(item: { item: Item; render: RenderInfo }) { + if (item.render.disabled) { + return; + } if (!this.isSelected(item.item.id)) { let newSelection; if (this.multiple) { @@ -1071,6 +1084,9 @@ export class CatSelect { } private toggle(item: { item: Item; render: RenderInfo }) { + if (item.render.disabled) { + return; + } this.isSelected(item.item.id) ? this.deselect(item.item.id) : this.tags && this.isTagSelected(item.render.label) @@ -1194,24 +1210,28 @@ export class CatSelect { this.input?.focus(); switch (event.key) { - case 'ArrowDown': + case 'ArrowDown': { preventDefault = true; - this.state.isOpen - ? this.patchState({ - activeOptionIndex: Math.min(this.state.activeOptionIndex + 1, this.state.options.length - 1), - activeSelectionIndex: -1 - }) - : this.show(); + if (this.state.isOpen) { + const nextIndex = this.findEnabledOptionIndex(1); + if (nextIndex < this.state.options.length) { + this.patchState({ activeOptionIndex: nextIndex, activeSelectionIndex: -1 }); + } + } else { + this.show(); + } break; - case 'ArrowUp': + } + case 'ArrowUp': { preventDefault = true; - this.state.activeOptionIndex >= 0 - ? this.patchState({ - activeOptionIndex: Math.max(this.state.activeOptionIndex - 1, -1), - activeSelectionIndex: -1 - }) - : this.hide(); + if (this.state.activeOptionIndex >= 0) { + const prevIndex = Math.max(this.findEnabledOptionIndex(-1), -1); + this.patchState({ activeOptionIndex: prevIndex, activeSelectionIndex: -1 }); + } else { + this.hide(); + } break; + } case 'ArrowLeft': if (this.input?.selectionStart === 0) { preventDefault = true; @@ -1241,6 +1261,19 @@ export class CatSelect { } } + /** + * Finds the next option index relative to `activeOptionIndex`, moving in `direction`, that is not disabled. + * Returns an out-of-bounds index (< 0 or >= options.length) if no enabled option is found. + */ + private findEnabledOptionIndex(direction: 1 | -1): number { + const options = this.state.options; + let index = this.state.activeOptionIndex + direction; + while (index >= 0 && index < options.length && options[index].render.disabled) { + index += direction; + } + return index; + } + private get tagTextHelp() { return this.tagHint && !this.isTagSelected(this.state.term) ? ' (' + this.tagHint + ')' : ''; } From 0fc531d20a3005fd93b8930dd7f865c0deade8a9 Mon Sep 17 00:00:00 2001 From: anastasiia_glushkova Date: Fri, 21 Aug 2026 17:02:14 +0200 Subject: [PATCH 2/3] feat(core): prettier --- .../cat-select/cat-select.screenshot.tsx | 44 +++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/core/src/components/cat-select/cat-select.screenshot.tsx b/core/src/components/cat-select/cat-select.screenshot.tsx index fc14ae6ec..62fa4eae8 100644 --- a/core/src/components/cat-select/cat-select.screenshot.tsx +++ b/core/src/components/cat-select/cat-select.screenshot.tsx @@ -27,26 +27,26 @@ describe('cat-select screenshot', () => { await expect(root).toMatchScreenshot(); }); - it('renders disabled option for multiple select', async () => { - const { root } = await render( -
    - -
    - ); - - const select = root.querySelector('cat-select') as HTMLCatSelectElement; - await select.connect( - objectArrayConnector([ - { id: 'option1', label: 'Option 1' }, - { id: 'option2', label: 'Option 2', disabled: true }, - { id: 'option3', label: 'Option 3' } - ]) - ); - await waitForStable(select); - - await userEvent.click(select.shadowRoot!.querySelector('.select-wrapper')!); - await waitForStable(select); - - await expect(root).toMatchScreenshot(); - }); + it('renders disabled option for multiple select', async () => { + const { root } = await render( +
    + +
    + ); + + const select = root.querySelector('cat-select') as HTMLCatSelectElement; + await select.connect( + objectArrayConnector([ + { id: 'option1', label: 'Option 1' }, + { id: 'option2', label: 'Option 2', disabled: true }, + { id: 'option3', label: 'Option 3' } + ]) + ); + await waitForStable(select); + + await userEvent.click(select.shadowRoot!.querySelector('.select-wrapper')!); + await waitForStable(select); + + await expect(root).toMatchScreenshot(); + }); }); From 61d1f896e7b7fba05c9a8a943bfd036fb8a4b4c1 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Fri, 21 Aug 2026 15:06:51 +0000 Subject: [PATCH 3/3] chore: update reference screenshots --- ...tion-for-multiple-select-1-chromium-linux.png | Bin 0 -> 7234 bytes ...option-for-single-select-1-chromium-linux.png | Bin 0 -> 6805 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 core/src/components/cat-select/__screenshots__/cat-select.screenshot.tsx/cat-select-screenshot-renders-disabled-option-for-multiple-select-1-chromium-linux.png create mode 100644 core/src/components/cat-select/__screenshots__/cat-select.screenshot.tsx/cat-select-screenshot-renders-disabled-option-for-single-select-1-chromium-linux.png diff --git a/core/src/components/cat-select/__screenshots__/cat-select.screenshot.tsx/cat-select-screenshot-renders-disabled-option-for-multiple-select-1-chromium-linux.png b/core/src/components/cat-select/__screenshots__/cat-select.screenshot.tsx/cat-select-screenshot-renders-disabled-option-for-multiple-select-1-chromium-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..0d35fae9c28276f56f96d4e214fd9853ad74495e GIT binary patch literal 7234 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 I<$EFj0SnmL#{d8T literal 0 HcmV?d00001