From c30dabd1fa6a338f1a8be6b8bcfc062cd2a445df Mon Sep 17 00:00:00 2001 From: Nora Simonow Date: Tue, 28 Jul 2026 10:59:44 +0200 Subject: [PATCH 01/42] chore: create component development skill --- .../CONTRACT.md | 211 +++++ .../catalyst-component-development/SKILL.md | 178 ++++ .../stenciljs-component-development/SKILL.md | 866 ++++++++++++++++++ 3 files changed, 1255 insertions(+) create mode 100644 .agents/skills/catalyst-component-development/CONTRACT.md create mode 100644 .agents/skills/catalyst-component-development/SKILL.md create mode 100644 .agents/skills/stenciljs-component-development/SKILL.md diff --git a/.agents/skills/catalyst-component-development/CONTRACT.md b/.agents/skills/catalyst-component-development/CONTRACT.md new file mode 100644 index 00000000..27a43c56 --- /dev/null +++ b/.agents/skills/catalyst-component-development/CONTRACT.md @@ -0,0 +1,211 @@ +# Catalyst Component Contract + +Every rule here is part of the **contract** — the public API surface that +propagates into Angular and all consumer apps the moment it ships. + +--- + +## Props (@Prop) + +- Every prop has a JSDoc comment describing what it does (not what type it is — + TypeScript already says that). +- Boolean props default to `false`. Never default to `true`. +- Use union string literals for enums: `'xs' | 's' | 'm' | 'l' | 'xl'`. + Do not use TypeScript enums — they don't serialize cleanly to HTML attributes. +- Accessibility props use the `a11y-` attribute prefix: + `@Prop({ attribute: 'a11y-label' }) a11yLabel?: string` +- Pass-through props for native element attributes use `nativeAttributes`: + `@Prop() nativeAttributes?: { [key: string]: string }`. Never add a new prop + just to expose a single native attribute — use `nativeAttributes` instead. +- `testId` is a standard prop on every interactive component. It maps to + `data-test` on the native element. Copy the pattern from `cat-button`. +- Props that depend on a breakpoint accept `boolean | Breakpoint`. See + `cat-button`'s `iconOnly` prop for the full pattern including `@Watch` and + `MediaMatcher` teardown. +- Never make a prop `mutable: true` unless there is no alternative. Prefer + emitting an event and letting the parent update the prop. + +## Events (@Event) + +- All event names are prefixed `cat`: `catClick`, `catChange`, `catFocus`, `catBlur`. +- Event payload is typed, never `any`: `EventEmitter`, `EventEmitter`, etc. +- Focus/blur events use `FocusEvent` as payload. Click uses `MouseEvent`. +- Change events on form inputs carry the new value: `EventEmitter`. +- Every event has a JSDoc comment. + +## CSS Parts (@part) + +- Declare every exposed part in the component-level JSDoc with `@part - description`. +- Add `part=""` to the corresponding element in the render output. +- Parts are the official theming extension point. Expose at minimum: + the root interactive element (e.g. `button`, `input`) and any significant + sub-regions consumers might need to target. +- Never expose internal implementation details as parts. Only expose stable, + intentional extension points. + +## Slots + +- Declare named slots in the component JSDoc with `@slot - description`. +- The default slot requires no `@slot` declaration unless its purpose is non-obvious. +- Check `this.hostElement.hasChildNodes()` in `componentWillRender()` to detect + slotted content presence. Store in a `@State` to trigger re-render. + See `cat-button`'s `hasSlottedContent` pattern. + +## Public methods (@Method) + +- All `@Method()` functions are `async` and return `Promise` or a typed Promise. +- Use `do` prefix for imperative actions: `doFocus()`, `doBlur()`, `doClick()`. +- Document with JSDoc including what the method does and any caveats. + +## Shadow DOM + +- Always `shadow: true`. Never `scoped: true` for Catalyst components. +- Use `shadow: { delegatesFocus: true }` for any component that wraps a native + focusable element (`input`, `button`, `a`, `textarea`, `select`). +- `@Element() hostElement!: HTMLElement` — always name it `hostElement`. +- Set `tabIndex` on the host element in `render()` for keyboard-navigable + components. Copy the pattern from `cat-button`: + `this.hostElement.tabIndex = Number(this.hostElement.getAttribute('tabindex')) || 0` + +## SCSS and tokens + +**Imports** — every component SCSS starts with: +```scss +@use 'variables' as *; +@use 'mixins' as *; +``` +Never use `@import`. Never use a relative path to `_variables.tokens.scss` directly. + +**Token accessor** — use `cat-token('dot.separated.path')` for all design tokens: +```scss +color: cat-token('color.ui.font.default'); +border-radius: cat-border-radius('m'); // 'xs'|'s'|'m'|'l'|'xl'|'full'|0 +``` + +**RGB partial tokens** — color tokens resolve to bare RGB partials, not `#hex`. +Wrap them correctly: +```scss +// Direct use (results in rgb(...)): +background: cat-token('color.theme.primary.bg'); + +// With opacity: +background: cat-token('color.theme.primary.bg', 0.5); + +// In CSS custom property chains (avoid wrapping prematurely): +--bg: #{cat-token('color.theme.primary.bg', $wrap: false)}; +background: cat-token-wrap(var(--bg)); +``` + +**Typography** — use mixins, never hardcode font-size or line-height: +```scss +@include cat-body('m'); // body text, medium size +@include cat-body('s'); // body text, small +@include cat-head('l'); // heading, large +``` + +**Available mixins quick-reference:** +| mixin | use | +|---|---| +| `cat-body($size)` | body font-size + line-height + weight | +| `cat-head($size)` | heading font-size + line-height + weight | +| `cat-ellipsis()` / `cat-ellipsis($n)` | single-line / multi-line truncation | +| `cat-break-word` | word-wrap for long strings | +| `cat-visually-hidden` | accessible hide (screen-reader visible) | +| `cat-select(none)` | disable user selection | +| `cat-font-smooth` | antialiasing for filled/inverted text | +| `cat-border-radius($size)` | border-radius from token scale | + +**`:host` display** — set `display` on `:host` to whatever the component needs +(`block`, `inline-block`, `flex`). The bootstrap skeleton in SKILL.md Step 2 +defaults to `block`; change it if the component requires otherwise. + +Use `:host(.)` selectors for consumer-applied variant classes (see +`cat-button`'s `.cat-tab`, `.cat-nav-item` patterns). + +**No hardcoded values** — never write: +- A hex color or `rgb()` — use `cat-token('color.*')` +- A border-radius pixel value — use `cat-border-radius()` +- A transition duration literal — use `cat-token('time.transition.*')` + +## Three test files + +**`cat-.spec.tsx`** — unit test using `@stencil/vitest` + `vitest`. +Tests shadow DOM render output for the default state and key prop combinations. + +```typescript +import { describe, it, expect } from 'vitest'; +import { render } from '@stencil/vitest'; +import { h } from '@stencil/core'; +import './cat-'; + +describe('cat-', () => { + it('renders', async () => { + const { root } = await render( />); + await expect(root.shadowRoot).toEqualHtml(`...`); + }); +}); +``` + +**`cat-.e2e.tsx`** — integration test using `@stencil/vitest`. +Tests hydration and user interactions (clicks, events, keyboard). + +```typescript +import { describe, it, expect } from 'vitest'; +import { render, h } from '@stencil/vitest'; + +describe('cat-', () => { + it('renders', async () => { + const { root } = await render( />); + await expect.element(root).toHaveClass('hydrated'); + }); +}); +``` + +**`cat-.screenshot.tsx`** — visual regression using `@vitest/browser/context`. +Tests all meaningful visual states: default, hover, active, disabled, each +variant/color combination. Use `toMatchScreenshot()`. + +```typescript +import { describe, it, expect, afterEach } from 'vitest'; +import { render, h } from '@stencil/vitest'; +import { page } from '@vitest/browser/context'; + +describe('cat-', () => { + afterEach(async () => { + await page.elementLocator(document.body).hover(); // reset hover state + }); + + it('default', async () => { + const { root } = await render( +
+ /> +
+ ); + await expect(root).toMatchScreenshot(); + }); +}); +``` + +Screenshot tests always wrap the component in a `
`. +Always reset hover state in `afterEach`. + +## Angular binding side-effects + +The Angular output target (`angular/`) is generated by the Stencil build from +`core/`. Never edit files in `angular/` by hand. + +**Breaking contract changes** (require a major version bump): +- Removing a prop +- Renaming a prop +- Changing a prop's type in a non-additive way +- Removing or renaming an event +- Removing a CSS part + +**Non-breaking additions** (minor version bump, handled by release-please): +- New prop with a default value +- New event +- New CSS part +- New slot + +When making a breaking change: flag it in the PR description and in the commit +message with `BREAKING CHANGE:`. diff --git a/.agents/skills/catalyst-component-development/SKILL.md b/.agents/skills/catalyst-component-development/SKILL.md new file mode 100644 index 00000000..4a81b6bc --- /dev/null +++ b/.agents/skills/catalyst-component-development/SKILL.md @@ -0,0 +1,178 @@ +--- +name: catalyst-component-development +description: > + Use when creating a new cat-* component, modifying an existing one, adding or + changing props or events, or touching component styles in + core/src/components/. +--- + +# Catalyst Component Development + +> **Requires:** load the `stenciljs-component-development` skill alongside this +> one. This skill covers Catalyst-specific rules only — Stencil decorator syntax, +> lifecycle methods, and JSX are assumed knowledge from that skill. Both skills +> are available in `.agents/skills/`. + +The **contract** is the leading word for this skill. Every `cat-*` component +exposes a public contract — props, events, CSS parts, slots — that propagates +into Angular bindings and all consumer apps the moment it ships. Work that +respects the contract is safe. Work that breaks it requires a major version bump +across all five packages. Keep this in mind on every decision below. + +--- + +## Entry point + +**Creating a new component** → start at Step 1. +**Modifying an existing component** → skip to Step 3. Steps 1–2 don't apply. + +--- + +## Step 1 — Scaffold the component directory + +Create `core/src/components/cat-/` with exactly these six files: + +``` +cat-/ + cat-.tsx # component implementation + cat-.scss # styles + cat-.spec.tsx # unit test (shadow DOM render assertions) + cat-.e2e.tsx # integration test (hydration, interaction) + cat-.screenshot.tsx # visual regression test (toMatchScreenshot) + readme.md # auto-generated — leave as empty placeholder +``` + +No other files. No `.css`. No subdirectories. No `index.ts`. + +**Naming rules:** +- Tag: `cat-` (kebab-case, always `cat-` prefix) +- Class: `Cat` (PascalCase) +- Files: match the tag exactly + +**Completion criterion:** all six files exist, no extras. + +--- + +## Step 2 — Bootstrap the component skeleton + +Start `.tsx` from this skeleton, preserving member order exactly: + +```typescript +import { Component, Element, Event, EventEmitter, h, Host, Prop, State } from '@stencil/core'; + +/** + * One-sentence description of what this component is for. + * + * @part - Description of each exposed CSS part. + * @slot - Description of each named slot (omit if default slot only). + */ +@Component({ + tag: 'cat-', + styleUrl: 'cat-.scss', + shadow: true +}) +export class Cat { + // 1. Private instance fields + // 2. @Element() hostElement!: HTMLElement; + // 3. @State() (alphabetical) + // 4. @Prop() + immediate @Watch() (alphabetical) + // 5. @Event() (alphabetical) + // 6. Lifecycle methods (natural order) + // 7. @Listen() + // 8. @Method() (alphabetical) + // 9. Private methods + // 10. render() — always last + + render() { + return ( + + + + ); + } +} +``` + +Bootstrap `.scss` with the standard imports and `:host` block: + +```scss +@use 'variables' as *; +@use 'mixins' as *; + +:host { + display: block; +} + +:host([hidden]) { + display: none; +} +``` + +**Completion criterion:** skeleton compiles (`pnpm --filter @haiilo/catalyst build` exits 0). + +--- + +## Step 3 — Implement the contract + +Implement props, events, slots, and methods according to the requirements. Apply +every rule in [CONTRACT.md](CONTRACT.md) while writing. The contract rules are +not optional — each one is a hard constraint, not a suggestion. + +**Completion criterion:** run `pnpm --filter @haiilo/catalyst build`. It must +exit 0 with no TypeScript errors. Every prop and event in the requirements has +an implementation, a JSDoc comment, and a matching entry in the done checklist. + +--- + +## Step 4 — Style with SCSS and tokens + +Write styles in `cat-.scss`. Apply every rule in [CONTRACT.md](CONTRACT.md) +under the SCSS section while writing. + +**Completion criterion:** no hardcoded colors, no hardcoded radii, no hardcoded +transition durations. Every value that has a token uses the token. +Run `pnpm --filter @haiilo/catalyst build` to confirm no SCSS errors. + +--- + +## Step 5 — Write three tests + +Every component requires all three test files. See [CONTRACT.md](CONTRACT.md) +for what belongs in each. + +Run `pnpm --filter @haiilo/catalyst test` and confirm all three files pass. + +**Completion criterion:** spec, e2e, and screenshot tests all pass. Zero skipped tests. + +--- + +## Step 6 — Verify Angular bindings + +Run both builds regardless of whether you think the contract changed: + +1. `pnpm --filter @haiilo/catalyst build` +2. `pnpm --filter @haiilo/catalyst-angular build` + +Inspect `angular/projects/catalyst-components/src/directives/` — any new or +modified props and events must appear in the generated directive. Never edit +files in `angular/` by hand. For breaking change rules see [CONTRACT.md](CONTRACT.md). + +**Completion criterion:** both builds exit 0. Generated directive reflects the +current component contract. + +--- + +## Step 7 — Done checklist + +Before considering the work complete, verify every item: + +- [ ] Six files present, no extras +- [ ] Member order matches the skeleton (props before events, lifecycle before methods, render last) +- [ ] Every public prop and event has a JSDoc comment +- [ ] `@part` declarations in the component JSDoc match every `part="..."` in the render output +- [ ] No hardcoded color, radius, or transition value in SCSS — all via tokens +- [ ] `:host([hidden]) { display: none; }` present in SCSS +- [ ] Three test files pass (`pnpm --filter @haiilo/catalyst test`) +- [ ] Angular build passes (`pnpm --filter @haiilo/catalyst-angular build`) +- [ ] No `as any`, `@ts-ignore`, or empty catch blocks introduced +- [ ] `readme.md` is present (content auto-generated on build; placeholder is fine) diff --git a/.agents/skills/stenciljs-component-development/SKILL.md b/.agents/skills/stenciljs-component-development/SKILL.md new file mode 100644 index 00000000..4765c44b --- /dev/null +++ b/.agents/skills/stenciljs-component-development/SKILL.md @@ -0,0 +1,866 @@ +--- +name: stenciljs-component-development +description: Use when creating or modifying Stencil.js web components. Ensures components follow Stencil best practices, proper decorator usage, lifecycle methods, and TypeScript conventions. +allowed-tools: + - Read + - Write + - Edit + - Bash + - Grep + - Glob +--- + +# Stencil.js - Component Development + +Build scalable, enterprise-ready web components using Stencil.js with TypeScript and Web Component standards. Stencil components are framework-agnostic and can be distributed to React, Angular, Vue, and traditional web applications. + +## Key Concepts + +### Component Structure + +A Stencil component is a TypeScript class decorated with `@Component()`: + +```typescript +import { Component, Prop, State, Event, EventEmitter, Watch, h } from '@stencil/core'; + +@Component({ + tag: 'my-component', + styleUrl: 'my-component.css', + shadow: true, +}) +export class MyComponent { + @Prop() name: string; + @State() isActive: boolean = false; + + render() { + return ( +
+

Hello, {this.name}!

+
+ ); + } +} +``` + +### Component Decorator Options + +```typescript +@Component({ + tag: 'my-component', // Required: Custom element tag name (must contain hyphen) + styleUrl: 'my-component.css', // Single stylesheet + styleUrls: { // Multiple stylesheets for different modes + ios: 'my-component.ios.css', + md: 'my-component.md.css' + }, + shadow: true, // Use Shadow DOM (recommended) + scoped: false, // Scoped CSS without Shadow DOM + assetsDirs: ['assets'], // Asset directories to copy + formAssociated: false, // Form-associated custom element +}) +``` + +## Decorators + +### @Prop() - Component Properties + +Public properties exposed as attributes: + +```typescript +// Basic prop +@Prop() name: string; + +// With default value +@Prop() size: 'small' | 'medium' | 'large' = 'medium'; + +// Mutable prop (can be changed internally) +@Prop({ mutable: true }) value: string; + +// Reflect to attribute (sync prop changes to DOM attribute) +@Prop({ reflect: true }) active: boolean; + +// Attribute name different from property name +@Prop({ attribute: 'data-id' }) dataId: string; +``` + +**Best Practices:** +- Always type your props +- Use JSDoc comments for public API documentation +- Set sensible defaults when appropriate +- Use `reflect: true` sparingly (performance cost) + +### @State() - Internal State + +Private state that triggers re-renders when changed: + +```typescript +@State() isOpen: boolean = false; +@State() items: string[] = []; + +// Updating state triggers re-render +this.isOpen = true; +``` + +**Important:** +- State is internal only, not exposed as attributes +- Mutating arrays/objects directly won't trigger re-render +- Use immutable patterns for complex state + +### @Watch() - Property Change Handlers + +Watch for prop or state changes: + +```typescript +@Prop() value: string; + +@Watch('value') +valueChanged(newValue: string, oldValue: string) { + console.log(`Value changed from ${oldValue} to ${newValue}`); + this.validateValue(newValue); +} + +// Place @Watch() immediately after the prop it watches +@Prop() swipeEnabled: boolean = true; + +@Watch('swipeEnabled') +swipeEnabledChanged(newSwipeEnabled: boolean, oldSwipeEnabled: boolean) { + this.updateState(); +} +``` + +### @Event() - Custom Events + +Emit custom events: + +```typescript +@Event() itemSelected: EventEmitter; +@Event() formSubmit: EventEmitter<{value: string}>; + +handleClick() { + this.itemSelected.emit('item-1'); +} +``` + +**Best Practices:** +- Use descriptive event names +- Type the event payload +- Document event details with JSDoc + +### @Listen() - Event Listeners + +Listen to DOM events: + +```typescript +@Listen('click') +handleClick(event: MouseEvent) { + console.log('Component clicked', event); +} + +@Listen('scroll', { target: 'window' }) +handleScroll(event: Event) { + console.log('Window scrolled'); +} + +@Listen('resize', { target: 'window', passive: true }) +handleResize() { + this.updateDimensions(); +} +``` + +### @Element() - Host Element Reference + +Reference to the host element: + +```typescript +@Element() el: HTMLElement; + +componentDidLoad() { + console.log('Host element:', this.el); + this.el.classList.add('loaded'); +} +``` + +### @Method() - Public Methods + +Expose public async methods: + +```typescript +@Method() +async open(): Promise { + this.isOpen = true; +} + +@Method() +async getValue(): Promise { + return this.value; +} +``` + +**Important:** +- All public methods must be async +- Document with JSDoc for public API + +## Lifecycle Methods + +Lifecycle methods in order of execution: + +```typescript +export class MyComponent { + // 1. Called when component is connected to DOM (can be called multiple times) + connectedCallback() { + console.log('Component connected to DOM'); + } + + // 2. Called once before first render (good for async data loading) + componentWillLoad() { + console.log('Component will load'); + // Can return Promise to delay first render + } + + // 3. Called once after first render + componentDidLoad() { + console.log('Component loaded'); + } + + // 4. Called before every render (after first) + componentWillRender() { + console.log('Component will render'); + } + + // 5. Called after every render (after first) + componentDidRender() { + console.log('Component rendered'); + } + + // 6. Called when component will update (not on first render) + componentWillUpdate() { + console.log('Component will update'); + } + + // 7. Called after component updates (not on first render) + componentDidUpdate() { + console.log('Component updated'); + } + + // 8. Determine if component should re-render + componentShouldUpdate(newVal: any, oldVal: any, propName: string): boolean { + return newVal !== oldVal; + } + + // 9. Called when disconnected from DOM (can be called multiple times) + disconnectedCallback() { + console.log('Component disconnected'); + } +} +``` + +**Lifecycle Best Practices:** +- Use `componentWillLoad()` for async data fetching +- Use `componentDidLoad()` for DOM manipulation +- Use `connectedCallback()` for logic that runs every time element is attached +- Clean up in `disconnectedCallback()` (remove listeners, clear timers) + +## JSX and Rendering + +### render() Method + +The `render()` method returns JSX: + +```typescript +import { h } from '@stencil/core'; + +render() { + return ( +
+

Hello, {this.name}!

+ {this.isActive &&

Active!

} + +
+ ); +} +``` + +### Host Element + +Use `` to set attributes on the host element: + +```typescript +import { Host } from '@stencil/core'; + +render() { + return ( + + + + ); +} +``` + +### Slots + +Use slots for content projection: + +```typescript +render() { + return ( +
+
+ +
+
+ {/* Default slot */} +
+
+ +
+
+ ); +} +``` + +### Conditional Rendering + +```typescript +render() { + return ( +
+ {this.loading ? ( +
Loading...
+ ) : ( +
{this.content}
+ )} + + {this.error &&
{this.error}
} +
+ ); +} +``` + +### Lists + +```typescript +render() { + return ( +
    + {this.items.map(item => ( +
  • + {item.name} +
  • + ))} +
+ ); +} +``` + +## File Structure & Naming + +### Directory Structure + +One component per directory: + +``` +src/ +├── components/ +│ ├── my-button/ +│ │ ├── my-button.tsx # Component implementation +│ │ ├── my-button.css # Styles +│ │ ├── my-button.spec.ts # Unit tests +│ │ ├── my-button.e2e.ts # E2E tests +│ │ └── readme.md # Component documentation +│ ├── my-card/ +│ │ ├── my-card.tsx +│ │ ├── my-card.ios.css # iOS-specific styles +│ │ ├── my-card.md.css # Material Design styles +│ │ └── my-card.css # Base styles +``` + +### Naming Conventions + +- **Tag names**: kebab-case with hyphen (required): `my-component`, `app-header` +- **Component class**: PascalCase: `MyComponent`, `AppHeader` +- **File names**: Match tag name: `my-component.tsx` +- **Props**: camelCase: `firstName`, `isActive` +- **Events**: camelCase: `itemSelected`, `formSubmit` +- **CSS classes**: kebab-case: `button-primary`, `is-active` + +## Code Organization + +Follow this order in component class: + +```typescript +@Component({ + tag: 'my-component', + styleUrl: 'my-component.css', + shadow: true, +}) +export class MyComponent { + // 1. Own Properties (private, not decorated) + private internalValue: number; + someText = 'default'; + + // 2. Reference to host element + @Element() el: HTMLElement; + + // 3. State() variables (alphabetical) + @State() isValidated: boolean; + @State() status = 0; + + // 4. Public Property API - @Prop() (alphabetical) + @Prop() content: string; + @Prop() enabled: boolean; + @Prop() type = 'default'; + + // 5. Prop lifecycle events (@Watch) - immediately after related @Prop + @Prop() value: string; + + @Watch('value') + valueChanged(newValue: string, oldValue: string) { + this.validate(newValue); + } + + // 6. Events section (alphabetical) + @Event() itemSelected: EventEmitter; + @Event() statusChanged: EventEmitter; + + // 7. Component lifecycle events (in natural order) + connectedCallback() {} + disconnectedCallback() {} + componentWillLoad() {} + componentDidLoad() {} + componentShouldUpdate() {} + componentWillRender() {} + componentDidRender() {} + componentWillUpdate() {} + componentDidUpdate() {} + + // 8. Listeners + @Listen('click') + onClick(event: MouseEvent) { + console.log('Clicked'); + } + + // 9. Public methods API (alphabetical) + @Method() + async open(): Promise { + this.isOpen = true; + } + + @Method() + async close(): Promise { + this.isOpen = false; + } + + // 10. Local methods (private business logic) + private validate(value: string): boolean { + return value.length > 0; + } + + private updateState() { + // Internal logic + } + + // 11. render() function (always last) + render() { + return ( + +
+ +
+
+ ); + } +} +``` + +## Best Practices + +### 1. Use TypeScript Strictly + +```typescript +// Good - Fully typed +@Prop() items: Array<{id: string; name: string}>; +@State() count: number = 0; + +// Bad - Any types +@Prop() items: any; +@State() count; +``` + +### 2. Immutable State Updates + +```typescript +// Bad - Direct mutation won't trigger re-render +this.items.push(newItem); + +// Good - Create new array +this.items = [...this.items, newItem]; + +// Bad - Direct object mutation +this.user.name = 'New Name'; + +// Good - Create new object +this.user = { ...this.user, name: 'New Name' }; +``` + +### 3. Use Shadow DOM When Possible + +```typescript +@Component({ + tag: 'my-component', + styleUrl: 'my-component.css', + shadow: true, // Encapsulation and style isolation +}) +``` + +### 4. Document Public API + +```typescript +/** + * The button component for user interactions + */ +@Component({ + tag: 'my-button', +}) +export class MyButton { + /** + * The button label text + */ + @Prop() label: string; + + /** + * Emitted when the button is clicked + */ + @Event() buttonClick: EventEmitter; + + /** + * Opens the button's associated menu + */ + @Method() + async openMenu(): Promise { + // ... + } +} +``` + +### 5. Handle Async Operations Properly + +```typescript +async componentWillLoad() { + try { + this.data = await this.fetchData(); + } catch (error) { + console.error('Failed to load data:', error); + this.error = 'Failed to load'; + } +} +``` + +### 6. Clean Up Resources + +```typescript +private intervalId: number; + +componentDidLoad() { + this.intervalId = window.setInterval(() => { + this.updateTime(); + }, 1000); +} + +disconnectedCallback() { + if (this.intervalId) { + clearInterval(this.intervalId); + } +} +``` + +### 7. Use Functional Components for Simple Cases + +```typescript +import { h, FunctionalComponent } from '@stencil/core'; + +interface IconProps { + name: string; + size?: number; +} + +export const Icon: FunctionalComponent = ({ name, size = 24 }) => ( + + + +); +``` + +## Anti-Patterns + +### ❌ Don't Mutate Props + +```typescript +// Bad +@Prop() value: string; + +handleChange() { + this.value = 'new value'; // Error if not mutable +} + +// Good +@Prop({ mutable: true }) value: string; +// Or better: emit event and let parent handle +@Event() valueChange: EventEmitter; + +handleChange() { + this.valueChange.emit('new value'); +} +``` + +### ❌ Don't Use Constructor for Initialization + +```typescript +// Bad +constructor() { + this.data = this.fetchData(); // Won't work properly +} + +// Good +async componentWillLoad() { + this.data = await this.fetchData(); +} +``` + +### ❌ Don't Access DOM in render() + +```typescript +// Bad +render() { + const width = this.el.offsetWidth; // Can cause issues + return
; +} + +// Good +componentDidLoad() { + this.width = this.el.offsetWidth; +} + +render() { + return
; +} +``` + +### ❌ Don't Forget Keys in Lists + +```typescript +// Bad +render() { + return ( +
    + {this.items.map(item =>
  • {item.name}
  • )} +
+ ); +} + +// Good +render() { + return ( +
    + {this.items.map(item =>
  • {item.name}
  • )} +
+ ); +} +``` + +### ❌ Don't Use Arrow Functions in render() for Handlers + +```typescript +// Bad - Creates new function on every render +render() { + return ; +} + +// Good - Bind in class or use arrow function property +private handleClick = () => { + console.log('Clicked'); +} + +render() { + return ; +} +``` + +## Testing + +### Unit Tests + +```typescript +import { newSpecPage } from '@stencil/core/testing'; +import { MyComponent } from './my-component'; + +describe('my-component', () => { + it('renders', async () => { + const page = await newSpecPage({ + components: [MyComponent], + html: ``, + }); + expect(page.root).toEqualHtml(` + + +
+ Hello, World! +
+
+
+ `); + }); + + it('renders with props', async () => { + const page = await newSpecPage({ + components: [MyComponent], + html: ``, + }); + expect(page.root).toEqualHtml(` + + +
+ Hello, Stencil! +
+
+
+ `); + }); +}); +``` + +### E2E Tests + +```typescript +import { newE2EPage } from '@stencil/core/testing'; + +describe('my-component', () => { + it('renders', async () => { + const page = await newE2EPage(); + await page.setContent(''); + + const element = await page.find('my-component'); + expect(element).toHaveClass('hydrated'); + }); + + it('emits event on click', async () => { + const page = await newE2EPage(); + await page.setContent(''); + + const itemSelected = await page.spyOnEvent('itemSelected'); + const button = await page.find('my-component >>> button'); + await button.click(); + + expect(itemSelected).toHaveReceivedEvent(); + }); +}); +``` + +## Common Patterns + +### Form-Associated Components + +```typescript +@Component({ + tag: 'my-input', + formAssociated: true, +}) +export class MyInput { + @Element() el: HTMLElement; + + private internals: ElementInternals; + + componentWillLoad() { + this.internals = (this.el as any).attachInternals(); + } + + @Prop() value: string = ''; + + @Watch('value') + valueChanged(newValue: string) { + this.internals.setFormValue(newValue); + } +} +``` + +### Loading States + +```typescript +@State() loading: boolean = false; +@State() error: string | null = null; +@State() data: any = null; + +async componentWillLoad() { + await this.loadData(); +} + +private async loadData() { + this.loading = true; + this.error = null; + + try { + this.data = await fetch('/api/data').then(r => r.json()); + } catch (e) { + this.error = 'Failed to load data'; + } finally { + this.loading = false; + } +} + +render() { + if (this.loading) return
Loading...
; + if (this.error) return
{this.error}
; + return
{JSON.stringify(this.data)}
; +} +``` + +### Controlled vs Uncontrolled + +```typescript +// Controlled - value managed by parent +@Prop() value: string; +@Event() valueChange: EventEmitter; + +handleInput(event: Event) { + const value = (event.target as HTMLInputElement).value; + this.valueChange.emit(value); +} + +render() { + return this.handleInput(e)} />; +} + +// Uncontrolled - internal state +@State() internalValue: string = ''; + +handleInput(event: Event) { + this.internalValue = (event.target as HTMLInputElement).value; +} + +render() { + return this.handleInput(e)} />; +} +``` + +## Performance Tips + +1. **Use `componentShouldUpdate()` to prevent unnecessary renders** +2. **Avoid complex computations in render()** +3. **Use `memoize` for expensive calculations** +4. **Lazy load components with `import()`** +5. **Use Shadow DOM for style encapsulation** +6. **Minimize prop changes from parent** +7. **Use event delegation for lists** + +## Related Resources + +- [Stencil.js Official Documentation](https://stenciljs.com/docs/introduction) +- [Stencil Component API](https://stenciljs.com/docs/api) +- [Stencil Style Guide](https://stenciljs.com/docs/style-guide) +- [Web Components Standards](https://developer.mozilla.org/en-US/docs/Web/Web_Components) From 8c56359b70ec87159e45968eb04e5e3e00f307e1 Mon Sep 17 00:00:00 2001 From: Nora Simonow Date: Tue, 28 Jul 2026 11:48:25 +0200 Subject: [PATCH 02/42] chore: create onboarding skill --- .../catalyst-onboarding/COMPONENT-ANATOMY.md | 192 ++++++++++++++++++ .../skills/catalyst-onboarding/GLOSSARY.md | 48 +++++ .../skills/catalyst-onboarding/PR-REVIEW.md | 88 ++++++++ .../catalyst-onboarding/REPO-STRUCTURE.md | 48 +++++ .agents/skills/catalyst-onboarding/SKILL.md | 71 +++++++ .agents/skills/catalyst-onboarding/TOKENS.md | 181 +++++++++++++++++ .../catalyst-onboarding/TROUBLESHOOTING.md | 50 +++++ 7 files changed, 678 insertions(+) create mode 100644 .agents/skills/catalyst-onboarding/COMPONENT-ANATOMY.md create mode 100644 .agents/skills/catalyst-onboarding/GLOSSARY.md create mode 100644 .agents/skills/catalyst-onboarding/PR-REVIEW.md create mode 100644 .agents/skills/catalyst-onboarding/REPO-STRUCTURE.md create mode 100644 .agents/skills/catalyst-onboarding/SKILL.md create mode 100644 .agents/skills/catalyst-onboarding/TOKENS.md create mode 100644 .agents/skills/catalyst-onboarding/TROUBLESHOOTING.md diff --git a/.agents/skills/catalyst-onboarding/COMPONENT-ANATOMY.md b/.agents/skills/catalyst-onboarding/COMPONENT-ANATOMY.md new file mode 100644 index 00000000..970e6318 --- /dev/null +++ b/.agents/skills/catalyst-onboarding/COMPONENT-ANATOMY.md @@ -0,0 +1,192 @@ +# Catalyst Component Anatomy + +## File structure + +Every component lives in `core/src/components/cat-/` with exactly six files: + +``` +cat-/ + cat-.tsx # component implementation + cat-.scss # styles + cat-.spec.tsx # unit test (shadow DOM render assertions) + cat-.e2e.tsx # integration test (hydration, interaction) + cat-.screenshot.tsx # visual regression (toMatchScreenshot) + readme.md # auto-generated on build +``` + +## Decorator map + +| decorator | what it does | +|---|---| +| `@Component` | Registers the custom element. `shadow: true` always. `shadow: { delegatesFocus: true }` for any component wrapping a native focusable element (`input`, `button`, `a`, `textarea`, `select`). | +| `@Element() hostElement!: HTMLElement` | Ref to the outer `` DOM element. Always named `hostElement`. | +| `@Prop()` | Public API. Becomes `@Input()` in Angular, a prop in React. Every prop requires a JSDoc comment. | +| `@State()` | Internal reactive state. Changes trigger re-render. Not visible outside the component. | +| `@Watch('propName')` | Fires when a prop or state changes. Place immediately after the prop it watches. | +| `@Event()` | Declares a custom DOM event emitter. All events prefixed `cat`. Becomes `@Output()` in Angular. | +| `@Listen('event')` | Intercepts a DOM event on the host or a specified target. | +| `@Method()` | Public imperative API. Always `async`, returns `Promise`. | + +## Member order (enforced by convention) + +```typescript +// 1. Private instance fields +// 2. @Element() hostElement +// 3. @State() — alphabetical +// 4. @Prop() + immediate @Watch() — alphabetical +// 5. @Event() — alphabetical +// 6. Lifecycle methods — natural order +// 7. @Listen() +// 8. @Method() — alphabetical +// 9. Private methods +// 10. render() — always last +``` + +Tag name: `cat-*` kebab-case. Class name: `Cat*` PascalCase. +Internal state fields: `_camelCase` prefix. CSS classes: `cat-{tag}-{modifier}`. +Events: `cat*` camelCase (`catClick`, `catChange`, `catBlur`). +Methods: `do*` for native wraps (`doFocus`, `doBlur`), no prefix for state transitions (`open`, `close`). +A11y props: `a11y*` camelCase → `a11y-*` attribute (`a11yLabel` → `a11y-label`). +CSS parts: semantic nouns (`part="button"`, `part="content"`). + +## Key render() patterns + +```tsx +// Host wrapper — sets attributes on the host element + + + + +// CSS parts — exposes shadow internals for consumer styling + +// Consumer: cat-button::part(button) { ... } + +// Spread nativeAttributes — arbitrary passthrough to inner element + + ); +} +``` + +**CSS Parts:** +- Declared in JSDoc: `@part button - The native button element.` +- Applied in render: ` - ); -} -``` +Install browser dependencies when needed: -**CSS Parts:** -- Declared in JSDoc: `@part button - The native button element.` -- Applied in render: ` +
+ ); + } + + private get iconSize(): Size { + const sizes: Record = { xs: 's', s: 's', m: 's', l: 'm', xl: 'l' }; + return sizes[this.size] ?? 's'; + } + + private handleClick() { + if (!this.disabled && !this.active) { + this.catSegmentClick.emit(this.value); + } + } +} diff --git a/core/src/components/cat-segment/readme.md b/core/src/components/cat-segment/readme.md new file mode 100644 index 00000000..b0a7cc9d --- /dev/null +++ b/core/src/components/cat-segment/readme.md @@ -0,0 +1,69 @@ +# cat-segment + + + + + + +## Overview + +A single segment within a cat-segmented-control. + +## Properties + +| Property | Attribute | Description | Type | Default | +| -------------------- | ----------- | ------------------------------------------------------------------ | ----------------------------------------- | ----------- | +| `disabled` | `disabled` | Whether this segment is disabled. | `boolean` | `false` | +| `icon` | `icon` | Icon name to display (same registry as cat-button). | `string \| undefined` | `undefined` | +| `iconOnly` | `icon-only` | When true, hides the label and shows the icon only. Requires icon. | `boolean` | `false` | +| `nativeAttributes` | -- | Spread onto the native button element. | `undefined \| { [key: string]: string; }` | `undefined` | +| `testId` | `test-id` | Renders as data-test on the button element. | `string \| undefined` | `undefined` | +| `value` _(required)_ | `value` | The unique value of this segment within the group. | `string` | `undefined` | + + +## Methods + +### `doBlur() => Promise` + +Removes focus from the segment button. + +#### Returns + +Type: `Promise` + + + +### `doFocus() => Promise` + +Sets focus on the segment button. + +#### Returns + +Type: `Promise` + + + + +## Shadow Parts + +| Part | Description | +| ---------- | -------------------------- | +| `"button"` | The native button element. | + + +## Dependencies + +### Depends on + +- [cat-icon](../cat-icon) + +### Graph +```mermaid +graph TD; + cat-segment --> cat-icon + style cat-segment fill:#f9f,stroke:#333,stroke-width:4px +``` + +---------------------------------------------- + +Made with love in Hamburg, Germany diff --git a/core/src/components/cat-segmented-control/cat-segmented-control.e2e.tsx b/core/src/components/cat-segmented-control/cat-segmented-control.e2e.tsx new file mode 100644 index 00000000..db8d44d5 --- /dev/null +++ b/core/src/components/cat-segmented-control/cat-segmented-control.e2e.tsx @@ -0,0 +1,9 @@ +import { describe, it, expect } from 'vitest'; +import { render, h } from '@stencil/vitest'; + +describe('cat-segmented-control', () => { + it('renders hydrated', async () => { + const { root } = await render(); + await expect.element(root).toHaveClass('hydrated'); + }); +}); diff --git a/core/src/components/cat-segmented-control/cat-segmented-control.scss b/core/src/components/cat-segmented-control/cat-segmented-control.scss new file mode 100644 index 00000000..77d9c575 --- /dev/null +++ b/core/src/components/cat-segmented-control/cat-segmented-control.scss @@ -0,0 +1,19 @@ +@use 'variables' as *; +@use 'mixins' as *; + +:host { + display: inline-flex; +} + +:host([hidden]) { + display: none; +} + +.cat-segmented-control { + display: inline-flex; + align-items: center; + background: cat-token('color.ui.background.muted'); + border-radius: cat-border-radius('l'); + padding: 0.25rem; + gap: 0.25rem; +} diff --git a/core/src/components/cat-segmented-control/cat-segmented-control.spec.tsx b/core/src/components/cat-segmented-control/cat-segmented-control.spec.tsx new file mode 100644 index 00000000..8737913a --- /dev/null +++ b/core/src/components/cat-segmented-control/cat-segmented-control.spec.tsx @@ -0,0 +1,13 @@ +import { describe, it, expect } from 'vitest'; +import { render } from '@stencil/vitest'; +import { h } from '@stencil/core'; +import './cat-segmented-control'; + +describe('cat-segmented-control', () => { + it('renders', async () => { + const { root } = await render(); + await expect(root).toEqualLightHtml(` + + `); + }); +}); diff --git a/core/src/components/cat-segmented-control/cat-segmented-control.tsx b/core/src/components/cat-segmented-control/cat-segmented-control.tsx new file mode 100644 index 00000000..bc2c4e6d --- /dev/null +++ b/core/src/components/cat-segmented-control/cat-segmented-control.tsx @@ -0,0 +1,125 @@ +import { Component, Element, Event, EventEmitter, h, Host, Listen, Prop, Watch } from '@stencil/core'; + +/** + * A segmented control for selecting one option from a mutually-exclusive set. + * + * @part control - The tray wrapper element. + */ +@Component({ + tag: 'cat-segmented-control', + styleUrl: 'cat-segmented-control.scss', + shadow: true +}) +export class CatSegmentedControl { + private segments: HTMLCatSegmentElement[] = []; + private mutationObserver?: MutationObserver; + + @Element() el!: HTMLElement; + + /** + * The value of the currently selected segment. + */ + @Prop({ mutable: true }) value?: string; + + /** + * The size of the control, propagated to all child segments. + */ + @Prop() size: 'xs' | 's' | 'm' | 'l' | 'xl' = 'm'; + + /** + * Whether the entire control is disabled. + */ + @Prop() disabled = false; + + /** + * Accessible label for the group (screen readers only). + */ + @Prop({ attribute: 'a11y-label' }) a11yLabel?: string; + + /** + * Renders as data-test on the root element. + */ + @Prop() testId?: string; + + /** + * Spread onto the root element. + */ + @Prop() nativeAttributes?: { [key: string]: string }; + + /** + * Emitted when the selected segment changes. Payload is the new segment value. + */ + @Event() catChange!: EventEmitter; + + @Watch('value') + onValueChange(newValue?: string) { + this.segments.forEach(s => (s.active = s.value === newValue)); + } + + @Watch('size') + onSizeChange(newSize: CatSegmentedControl['size']) { + this.segments.forEach(s => (s.size = newSize)); + } + + @Watch('disabled') + onDisabledChange(disabled: boolean) { + this.segments.forEach(s => (s.disabled = s.disabled || disabled)); + } + + componentDidLoad() { + this.sync(); + this.mutationObserver = new MutationObserver(mutations => { + if (mutations.some(m => m.target.nodeName === 'CAT-SEGMENT')) { + this.sync(); + } + }); + this.mutationObserver.observe(this.el, { childList: true, attributes: true, subtree: true }); + } + + disconnectedCallback() { + this.mutationObserver?.disconnect(); + } + + @Listen('catSegmentClick') + onSegmentClick(event: CustomEvent) { + this.value = event.detail; + this.catChange.emit(this.value); + } + + @Listen('keydown') + onKeydown(event: KeyboardEvent) { + const keys = ['ArrowRight', 'ArrowDown', 'ArrowLeft', 'ArrowUp']; + if (!keys.includes(event.key)) return; + + const enabled = this.segments.filter(s => !s.disabled); + const idx = enabled.indexOf(document.activeElement as HTMLCatSegmentElement); + const offset = ['ArrowRight', 'ArrowDown'].includes(event.key) ? 1 : -1; + const target = enabled[(idx + offset + enabled.length) % enabled.length]; + target?.doFocus(); + event.preventDefault(); + } + + render() { + return ( + +
+ +
+
+ ); + } + + private sync() { + this.segments = Array.from(this.el.querySelectorAll('cat-segment')); + this.onValueChange(this.value); + this.onSizeChange(this.size); + this.onDisabledChange(this.disabled); + } +} diff --git a/core/src/components/cat-segmented-control/readme.md b/core/src/components/cat-segmented-control/readme.md new file mode 100644 index 00000000..a5e2d444 --- /dev/null +++ b/core/src/components/cat-segmented-control/readme.md @@ -0,0 +1,40 @@ +# cat-segmented-control + + + + + + +## Overview + +A segmented control for selecting one option from a mutually-exclusive set. + +## Properties + +| Property | Attribute | Description | Type | Default | +| ------------------ | ------------ | ---------------------------------------------------------- | ----------------------------------------- | ----------- | +| `a11yLabel` | `a11y-label` | Accessible label for the group (screen readers only). | `string \| undefined` | `undefined` | +| `disabled` | `disabled` | Whether the entire control is disabled. | `boolean` | `false` | +| `nativeAttributes` | -- | Spread onto the root element. | `undefined \| { [key: string]: string; }` | `undefined` | +| `size` | `size` | The size of the control, propagated to all child segments. | `"l" \| "m" \| "s" \| "xl" \| "xs"` | `'m'` | +| `testId` | `test-id` | Renders as data-test on the root element. | `string \| undefined` | `undefined` | +| `value` | `value` | The value of the currently selected segment. | `string \| undefined` | `undefined` | + + +## Events + +| Event | Description | Type | +| ----------- | ---------------------------------------------------------------------------- | --------------------- | +| `catChange` | Emitted when the selected segment changes. Payload is the new segment value. | `CustomEvent` | + + +## Shadow Parts + +| Part | Description | +| ----------- | ------------------------- | +| `"control"` | The tray wrapper element. | + + +---------------------------------------------- + +Made with love in Hamburg, Germany diff --git a/core/src/index.html b/core/src/index.html index 3fbb5657..d988e2d3 100644 --- a/core/src/index.html +++ b/core/src/index.html @@ -1,859 +1,725 @@ - - - - Catalyst | StencilJS - - - - - - + + +
+

Catalyst Web Components

+ + +
+ + + + + +
+ + View on GitHub + + + Join us on Slack + +
+
+ + +
+
+ +
+
+

Alert

+ +

+ Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut + labore et dolore magna aliquyam erat, sed diam voluptua. +

+
+

Color

+ +

Lorem ipsum dolor dolore magna sit amet.

+
+ +

Lorem ipsum dolor dolore magna sit amet.

+
+ +

Lorem ipsum dolor dolore magna sit amet.

+
+ +

Lorem ipsum dolor dolore magna sit amet.

+
+ +

Lorem ipsum dolor dolore magna sit amet.

+
+

Variations

+ +

+ Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut + labore et dolore magna aliquyam erat, sed diam voluptua. +

+
+ +
Lorem ipsum dolor sit amet.
+ Lorem ipsum dolor sit amet, consetetur sadipscing elitr. +
+
- .canvas-fake { - background: #f2f4f7; - border-radius: 0.5rem; - padding: 3.5rem; - } +
+

Avatar

+ +

Variations

+ + + + + +
- section { - flex: 0 1 auto; - padding: 5rem 0; - } +
+

Badge

+ Default + +

Variant

+ Filled + Outlined + +

Color

+ Primary + Secondary + Info + Success + Warning + Danger +
+
+ Primary + Secondary + Info + Success + Warning + Danger + +

Size

+ Size XS + Size S + Size M + Size L + Size XL +
+
+ Size XS + Size S + Size M + Size L + Size XL +
+
+ sdfdsf sdfsdf + sdfdsf sdfsdf + sdfdsf sdfsdf + sdfdsf sdfsdf + sdfdsf sdfsdf + +

Round

+ Round + + +

Pulse

+ Pulse + Pulse + + +

Layout

+ Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut + labore et dolore magna aliquyam erat, sed diam voluptua. + +
- section:not(:last-of-type) { - border-bottom: 1px solid rgba(0, 0, 0, 10%); - } +
+

Button

+ Button + +

Color & Variant

+ Primary + Primary + Primary + Primary +

+ Secondary + Secondary + Secondary + Secondary +

+ Info + Info + Info + Info +

+ Success + Success + Success + Success +

+ Warning + Warning + Warning + Warning +

+ Danger + Danger + Danger + Danger + +

Size

+ Size XS + Size S + Size M + Size L + Size XL + +

Icons

+ Prefix + Suffix + Suffix + +

Icon buttons

+ + + + + + +

Icons (Responsive)

+ xs + s + m + l + xl + +

Links

+ Google + Google (ext.) + +
+ Link 1 + + Link 2 +
- section > h2:not(:first-child), - section > h3:not(:first-child) { - margin-top: 2rem; - } +

Active

+ Primary + Primary + Primary +

+ Secondary + Secondary + + Secondary +

+ Info + Info + Info +

+ Success + Success + Success +

+ Warning + Warning + Warning +

+ Danger + Danger + Danger + +

Disabled

+ Primary + Primary + Primary +

+ Secondary + + Secondary + + Secondary +

+ Info + Info + Info +

+ Success + Success + Success +

+ Warning + Warning + Warning +

+ Danger + Danger + Danger + +

Loading

+ Primary + Primary + Primary +

+ Secondary + Secondary + Secondary +

+ Info + Info + Info +

+ Success + Success + Success +

+ Warning + Warning + Warning +

+ Danger + Danger + Danger + +

Layout

+
+ Lorem ipsum dolor sit amet, consetetur elitr +
+ Lorem ipsum dolor sit amet, consetetur elitr +
+ Block + Block (left) + Block (right) +
+
- section > h2:not(:last-child), - section > h3:not(:last-child) { - margin-bottom: 1rem; - } +
+

Group button

+ +
+ + Left + Middle + Middle1 + Right + + + + Left + Middle + Right + + + + Left + Middle + Right + +
+
- section.typography { - display: flex; - gap: 5rem; - } +
+

Card

- /* Text page stylings */ +
+ +

Lorem ipsum dolor sit amet

+

+ Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut + labore et dolore magna aliquyam erat, sed diam voluptua. +

+

+ At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata + sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed + diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. +

+
+
+

Navigation

+
+ + + +
+
- section.typography .example { - max-width: 600px; - margin: 0 auto; - } +
+

Checkbox

+ + +

State

+ + + + + Set inteterminate true + Set inteterminate false + Set value true + Set value false + - figure img { - max-width: 100%; - } +

Alignment

+ - section.typography aside { - display: flex; - flex-direction: column; - gap: 7rem; - max-width: 450px; - box-sizing: content-box; - padding-right: 5rem; - border-right: 1px solid #ebecf0; - } +

Slots

+ + This is the label + This is another! + +
- .switches { - position: fixed; - bottom: 1rem; - right: 1rem; - display: flex; - flex-direction: column; - gap: 0.5rem; - align-items: end; - } +
+

Divider

+
- .switches cat-button { - width: fit-content; - } - - - -
-

Catalyst Web Components

- - -
- - - - - -
- - View on GitHub - - - Join us on Slack - -
-
+ - -
-

Form

- - - - - - Submit - -
- -
-

Form Group

- - - - - -

Alignment (horizontal)

- - - This is the label - - - - - - - - - - - -

Auto (more required)

- - - - - - -

Auto (more optional)

- - - - - - -

None marker

- - - - - - -

Only mark optional

- - - - - - -

Only mark required

- - - - - - -

Dynamic field added

- - - - - - -
- -
-

Icon

- - -

Color

- - - - -

Size

- - - - - - - -

Ratio

- -
- -
-

Input

- - This is another! - - - Priority Label - - - Loading - -

Types

- - - - - - - - - - - -

Slotted Counter

- - Show any text here - -
- -
-

Datepicker

- - - - Priority Label - Priority Hint - - - - - -

Inline Datepicker (new)

- -

Inline Datepicker

- -

Datetime

- -
-

Nested Datepicker

- - Button -
- - - + +
  • + Saved +
  • +
  • + Files +
  • +
    +
  • Platform
  • +
  • + Administration +
  • +
  • + Analytics +
  • +
  • + Manage hero teaser +
  • +
  • + Reported content +
  • +
    +
  • Settings
  • +
  • + Account +
  • +
  • + Notifications +
  • +
    +
  • Support
  • +
  • + Restart tour +
  • +
  • + Help +
  • +
  • + About +
  • +
    +
  • + Log out +
  • + + + +
    + + + Dropdown inside a card + + Click me + + + + + + Button (keep open) +
    +

    Here is some content.

    + Action +
    +
    + + + Nested dropdown + + +
    + + - -
    -

    Notification

    - Show Notifications - -
    - -
    -

    Pagination

    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - Change event demo (See console) - - -
    - -
    -

    Radio

    - - -

    Group

    - - - - - - -

    State

    - - - - -

    Alignment

    - - -

    Slots

    - - This is the label - This is another! - -
    - -
    -

    Scrollable

    - -

    Lorem ipsum dolor sit amet, consetetur sadipscing elitr.

    -

    Lorem ipsum dolor sit amet, consetetur sadipscing elitr.

    -

    Lorem ipsum dolor sit amet, consetetur sadipscing elitr.

    -

    Lorem ipsum dolor sit amet, consetetur sadipscing elitr.

    -

    Lorem ipsum dolor sit amet, consetetur sadipscing elitr.

    -

    Lorem ipsum dolor sit amet, consetetur sadipscing elitr.

    -

    Lorem ipsum dolor sit amet, consetetur sadipscing elitr.

    -

    Lorem ipsum dolor sit amet, consetetur sadipscing elitr.

    -
    -
    - -
    -

    Select

    - -
    - -
    -

    Skeleton

    - - -

    Effect

    - -
    - -
    - - -

    Variant

    - - - - - -
    - -
    -

    Spinner

    - - -

    Color

    - - - - -

    Size

    - - - - - - -
    - -
    -

    Tabs

    - - - - - -

    Alignment

    - - - - - -
    -
    - - - - - -
    -
    - - - - - - -

    More

    - - - - - - More + + + + Available - - - - - - - - - - - - - - -
    - -
    -

    Tags

    - - -
    - -
    -

    Textarea

    - -

    Slotted Counter

    - - Show any text here - -

    Counter w/o label

    - -
    - -
    -

    Toggle

    - - This is another! - - - - - - - - -
    - -
    -

    Tooltip

    - - Button - - - Button -
    -

    Tooltip

    -

    This is a fancy tooltip
    with some more lines.

    -
    -
    -

    Size

    - -

    Hover Me (S)

    -
    -
    - -

    Hover Me (S round)

    -
    -
    - -

    Hover Me (M)

    -
    -
    - -

    Hover Me (M round)

    -
    -
    - -

    Hover Me (L)

    -
    -
    - -

    Hover Me (L round)

    -
    -

    Round

    - -

    Hover Me (round)

    -
    -

    Async

    - -

    Hover Me (async)

    -
    - -
    + + Saved + +
    + +

    Menu Placement Examples

    +
    + + Bottom start (default) + Item 2 + Item 3 + + + + Bottom end + Item 2 + Item 3 + + + + Top start + Item 2 + Item 3 + +
    + +

    Arrow Navigation Modes

    +
    + + + Arrow Up/Down navigation + Default for dropdown menus + Vertical orientation (ARIA) + Standard menu pattern + + + + + Arrow Left/Right navigation + Ideal for toolbar menus + Horizontal orientation (ARIA) + Alternative menu pattern +
    + + +
    +

    Form

    +
    + + + + + Submit +
    +
    + +
    +

    Form Group

    + + + + + +

    Alignment (horizontal)

    + + + This is the label + + + + + + + + + + + +

    Auto (more required)

    + + + + + + +

    Auto (more optional)

    + + + + + + +

    None marker

    + + + + + + +

    Only mark optional

    + + + + + + +

    Only mark required

    + + + + + + +

    Dynamic field added

    + + + + + -
    -
    + + +
    +

    Icon

    + + +

    Color

    + + + + +

    Size

    + + + + + + + +

    Ratio

    + +
    - - - - - - - -
    - Switch to Source Sans 3 - Use custom theme -
    - - - - + + + + - - -
    - + }); + }); + +
    + diff --git a/react/src/components/stencil-generated/index.ts b/react/src/components/stencil-generated/index.ts index b1632e9a..0f4cdd91 100644 --- a/react/src/components/stencil-generated/index.ts +++ b/react/src/components/stencil-generated/index.ts @@ -28,6 +28,8 @@ export const CatPagination = /*@__PURE__*/createReactComponent('cat-radio'); export const CatRadioGroup = /*@__PURE__*/createReactComponent('cat-radio-group'); export const CatScrollable = /*@__PURE__*/createReactComponent('cat-scrollable'); +export const CatSegment = /*@__PURE__*/createReactComponent('cat-segment'); +export const CatSegmentedControl = /*@__PURE__*/createReactComponent('cat-segmented-control'); export const CatSelect = /*@__PURE__*/createReactComponent('cat-select'); export const CatSelectDemo = /*@__PURE__*/createReactComponent('cat-select-demo'); export const CatSkeleton = /*@__PURE__*/createReactComponent('cat-skeleton'); From 20ace6c57fe790ca731beb8d90354819de119c89 Mon Sep 17 00:00:00 2001 From: Nora Simonow Date: Mon, 10 Aug 2026 08:50:37 +0200 Subject: [PATCH 09/42] chore: fix prettier --- .../components/cat-segment/cat-segment.scss | 7 +- core/src/index.html | 3617 ++++++++--------- 2 files changed, 1807 insertions(+), 1817 deletions(-) diff --git a/core/src/components/cat-segment/cat-segment.scss b/core/src/components/cat-segment/cat-segment.scss index 63fc77d3..089836b4 100644 --- a/core/src/components/cat-segment/cat-segment.scss +++ b/core/src/components/cat-segment/cat-segment.scss @@ -34,9 +34,10 @@ $segment-heights: ( white-space: nowrap; color: cat-token('color.theme.secondary.text'); border-radius: cat-border-radius('l'); - transition: background cat-token('time.transition.s') linear, - box-shadow cat-token('time.transition.s') linear, - color cat-token('time.transition.s') linear; + transition: + background cat-token('time.transition.s') linear, + box-shadow cat-token('time.transition.s') linear, + color cat-token('time.transition.s') linear; &.cat-segment-active { background: cat-token('color.ui.background.surface'); diff --git a/core/src/index.html b/core/src/index.html index d988e2d3..ac1d07b9 100644 --- a/core/src/index.html +++ b/core/src/index.html @@ -1,725 +1,886 @@ - - - - Catalyst | StencilJS - - - - - - - - -
    -

    Catalyst Web Components

    - - -
    - - - - - -
    - - View on GitHub - - - Join us on Slack - -
    -
    - - -
    -
    - -
    -
    -

    Alert

    - -

    - Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut - labore et dolore magna aliquyam erat, sed diam voluptua. -

    -
    -

    Color

    - -

    Lorem ipsum dolor dolore magna sit amet.

    -
    - -

    Lorem ipsum dolor dolore magna sit amet.

    -
    - -

    Lorem ipsum dolor dolore magna sit amet.

    -
    - -

    Lorem ipsum dolor dolore magna sit amet.

    -
    - -

    Lorem ipsum dolor dolore magna sit amet.

    -
    -

    Variations

    - -

    - Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut - labore et dolore magna aliquyam erat, sed diam voluptua. -

    -
    - -
    Lorem ipsum dolor sit amet.
    - Lorem ipsum dolor sit amet, consetetur sadipscing elitr. -
    -
    + + + + Catalyst | StencilJS + + + + + + + + +
    +

    Catalyst Web Components

    + + +
    + + + + + +
    + + View on GitHub + + + Join us on Slack + +
    +
    + + +
    +
    + +
    +
    +

    Alert

    + +

    + Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut + labore et dolore magna aliquyam erat, sed diam voluptua. +

    +
    +

    Color

    + +

    Lorem ipsum dolor dolore magna sit amet.

    +
    + +

    Lorem ipsum dolor dolore magna sit amet.

    +
    + +

    Lorem ipsum dolor dolore magna sit amet.

    +
    + +

    Lorem ipsum dolor dolore magna sit amet.

    +
    + +

    Lorem ipsum dolor dolore magna sit amet.

    +
    +

    Variations

    + +

    + Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut + labore et dolore magna aliquyam erat, sed diam voluptua. +

    +
    + +
    Lorem ipsum dolor sit amet.
    + Lorem ipsum dolor sit amet, consetetur sadipscing elitr. +
    +
    + +
    +

    Avatar

    + +

    Variations

    + + + + + +
    + +
    +

    Badge

    + Default + +

    Variant

    + Filled + Outlined + +

    Color

    + Primary + Secondary + Info + Success + Warning + Danger +
    +
    + Primary + Secondary + Info + Success + Warning + Danger + +

    Size

    + Size XS + Size S + Size M + Size L + Size XL +
    +
    + Size XS + Size S + Size M + Size L + Size XL +
    +
    + sdfdsf sdfsdf + sdfdsf sdfsdf + sdfdsf sdfsdf + sdfdsf sdfsdf + sdfdsf sdfsdf + +

    Round

    + Round + + +

    Pulse

    + Pulse + Pulse + + +

    Layout

    + Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut + labore et dolore magna aliquyam erat, sed diam voluptua. + +
    + +
    +

    Button

    + Button + +

    Color & Variant

    + Primary + Primary + Primary + Primary +

    + Secondary + Secondary + Secondary + Secondary +

    + Info + Info + Info + Info +

    + Success + Success + Success + Success +

    + Warning + Warning + Warning + Warning +

    + Danger + Danger + Danger + Danger + +

    Size

    + Size XS + Size S + Size M + Size L + Size XL + +

    Icons

    + Prefix + Suffix + Suffix + +

    Icon buttons

    + + + + + + +

    Icons (Responsive)

    + xs + s + m + l + xl + +

    Links

    + Google + Google (ext.) + +
    + Link 1 + Link 2 +
    + +

    Active

    + Primary + Primary + Primary +

    + Secondary + Secondary + + Secondary +

    + Info + Info + Info +

    + Success + Success + Success +

    + Warning + Warning + Warning +

    + Danger + Danger + Danger + +

    Disabled

    + Primary + Primary + Primary +

    + Secondary + + Secondary + + Secondary +

    + Info + Info + Info +

    + Success + Success + Success +

    + Warning + Warning + Warning +

    + Danger + Danger + Danger + +

    Loading

    + Primary + Primary + Primary +

    + Secondary + Secondary + Secondary +

    + Info + Info + Info +

    + Success + Success + Success +

    + Warning + Warning + Warning +

    + Danger + Danger + Danger + +

    Layout

    +
    + Lorem ipsum dolor sit amet, consetetur elitr +
    + Lorem ipsum dolor sit amet, consetetur elitr +
    + Block + Block (left) + Block (right) +
    +
    + +
    +

    Group button

    + +
    + + Left + Middle + Middle1 + Right + + + + Left + Middle + Right + + + + Left + Middle + Right + +
    +
    + +
    +

    Card

    + +
    + +

    Lorem ipsum dolor sit amet

    +

    + Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut + labore et dolore magna aliquyam erat, sed diam voluptua. +

    +

    + At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata + sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed + diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. +

    +
    +
    +

    Navigation

    +
    + + + +
    +
    + +
    +

    Checkbox

    + + +

    State

    + + + + + Set inteterminate true + Set inteterminate false + Set value true + Set value false + + +

    Alignment

    + + +

    Slots

    + + This is the label + This is another! + +
    + +
    +

    Divider

    +
    + + + + - - + +
    +

    Form

    +
    + + + + + Submit +
    +
    + +
    +

    Form Group

    + + + + + +

    Alignment (horizontal)

    + + + This is the label + + + + + + + + + + + +

    Auto (more required)

    + + + + + + +

    Auto (more optional)

    + + + + + + +

    None marker

    + + + + + + +

    Only mark optional

    + + + + + + +

    Only mark required

    + + + + + + +

    Dynamic field added

    + + + + + + +
    + +
    +

    Icon

    + + +

    Color

    + + + + +

    Size

    + + + + + + + +

    Ratio

    + +
    + +
    +

    Input

    + + This is another! + + + Priority Label + + + Loading + +

    Types

    + + + + + + + + + + + +

    Slotted Counter

    + + Show any text here + +
    + +
    +

    Datepicker

    + + + + Priority Label + Priority Hint + + + + + +

    Inline Datepicker (new)

    + +

    Inline Datepicker

    + +

    Datetime

    + +
    +

    Nested Datepicker

    + + Button +
    + + +
    - - - - Available + +
    + +
    +

    Notification

    + Show Notifications + +
    + +
    +

    Pagination

    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + Change event demo (See console) + + +
    + +
    +

    Radio

    + + +

    Group

    + + + + + + +

    State

    + + + + +

    Alignment

    + + +

    Slots

    + + This is the label + This is another! + +
    + +
    +

    Scrollable

    + +

    Lorem ipsum dolor sit amet, consetetur sadipscing elitr.

    +

    Lorem ipsum dolor sit amet, consetetur sadipscing elitr.

    +

    Lorem ipsum dolor sit amet, consetetur sadipscing elitr.

    +

    Lorem ipsum dolor sit amet, consetetur sadipscing elitr.

    +

    Lorem ipsum dolor sit amet, consetetur sadipscing elitr.

    +

    Lorem ipsum dolor sit amet, consetetur sadipscing elitr.

    +

    Lorem ipsum dolor sit amet, consetetur sadipscing elitr.

    +

    Lorem ipsum dolor sit amet, consetetur sadipscing elitr.

    +
    +
    + +
    +

    Segmented Control

    + +

    Default

    + + Option 1 + Option 2 + Option 3 with overflowing content + + +

    Sizes

    + + XS Option 1 + XS Option 2 + XS Option 3 + +
    +
    + + S Option 1 + S Option 2 + S Option 3 + +
    +
    + + M Option 1 + M Option 2 + M Option 3 + +
    +
    + + L Option 1 + L Option 2 + L Option 3 + +
    +
    + + XL Option 1 + XL Option 2 + XL Option 3 + + +

    Disabled

    + + Option 1 + Option 2 + Option 3 + +
    +
    + + Option 1 + Option 2 + Option 3 + + +

    Icons

    + + Option 1 + Option 2 + Option 3 + + +

    Icon Only

    + + + + + +
    +
    + + + + + +
    +
    + + + + + +
    +
    + + + + + +
    +
    + + + + + +
    + +
    +

    Select

    + +
    + +
    +

    Skeleton

    + + +

    Effect

    + +
    + +
    + + +

    Variant

    + + + + + +
    + +
    +

    Spinner

    + + +

    Color

    + + + + +

    Size

    + + + + + + +
    + +
    +

    Tabs

    + + + + + +

    Alignment

    + + + + + +
    +
    + + + + + +
    +
    + + + + + + +

    More

    + + + + + + More - - Saved - -
    - -

    Menu Placement Examples

    -
    - - Bottom start (default) - Item 2 - Item 3 - - - - Bottom end - Item 2 - Item 3 - - - - Top start - Item 2 - Item 3 - -
    - -

    Arrow Navigation Modes

    -
    - - - Arrow Up/Down navigation - Default for dropdown menus - Vertical orientation (ARIA) - Standard menu pattern - - - - - Arrow Left/Right navigation - Ideal for toolbar menus - Horizontal orientation (ARIA) - Alternative menu pattern - + + + + + + + + + + + + + + + + +
    +

    Tags

    + + +
    + +
    +

    Textarea

    + +

    Slotted Counter

    + + Show any text here + +

    Counter w/o label

    + +
    + +
    +

    Toggle

    + + This is another! + + + + + + + + +
    + +
    +

    Tooltip

    + + Button + + + Button +
    +

    Tooltip

    +

    This is a fancy tooltip
    with some more lines.

    +
    +
    +

    Size

    + +

    Hover Me (S)

    +
    +
    + +

    Hover Me (S round)

    +
    +
    + +

    Hover Me (M)

    +
    +
    + +

    Hover Me (M round)

    +
    +
    + +

    Hover Me (L)

    +
    +
    + +

    Hover Me (L round)

    +
    +

    Round

    + +

    Hover Me (round)

    +
    +

    Async

    + +

    Hover Me (async)

    +
    + +
    - - -
    -

    Form

    -
    - - - - - Submit -
    -
    - -
    -

    Form Group

    - - - - - -

    Alignment (horizontal)

    - - - This is the label - - - - - - - - - - - -

    Auto (more required)

    - - - - - - -

    Auto (more optional)

    - - - - - - -

    None marker

    - - - - - - -

    Only mark optional

    - - - - - - -

    Only mark required

    - - - - - - -

    Dynamic field added

    - - - - - -
    - -
    -

    Icon

    - - -

    Color

    - - - - -

    Size

    - - - - - - - -

    Ratio

    - -
    - -
    -

    Input

    - - This is another! - - - Priority Label - - - Loading - -

    Types

    - - - - - - - - - - - -

    Slotted Counter

    - - Show any text here - -
    +
    +
    -
    -

    Datepicker

    - - - - Priority Label - Priority Hint - - - - - -

    Inline Datepicker (new)

    - -

    Inline Datepicker

    - -

    Datetime

    - -
    -

    Nested Datepicker

    - - Button -
    - - - + + - -
    -
    - - - - - - - - -
    - Switch to Source Sans 3 - Use custom theme -
    - - - - - - + + -
    - + const theme = document.getElementById('toggleTheme'); + theme.addEventListener('click', function () { + if (body.classList.contains('custom-theme')) { + body.classList.remove('custom-theme'); + theme.innerHTML = 'Use custom theme'; + } else { + body.classList.add('custom-theme'); + theme.innerHTML = 'Use default theme'; + } + }); + + + +
    + From db2b9e5c2fc8fc7c8d59678c23c6198cc9e0dfda Mon Sep 17 00:00:00 2001 From: Nora Simonow Date: Tue, 11 Aug 2026 12:06:56 +0200 Subject: [PATCH 10/42] feat(core): add segmented control screenshot tests --- README.md | 4 +- core/.gitignore | 1 + ...nshot-disabled-group-1-chromium-darwin.png | Bin 0 -> 4470 bytes ...hot-disabled-segment-1-chromium-darwin.png | Bin 0 -> 4922 bytes ...hot-focus-on-segment-1-chromium-darwin.png | Bin 0 -> 5585 bytes ...hot-hover-on-segment-1-chromium-darwin.png | Bin 0 -> 5289 bytes ...l-screenshot-renders-1-chromium-darwin.png | Bin 0 -> 4997 bytes ...-with-active-segment-1-chromium-darwin.png | Bin 0 -> 9220 bytes ...hot-size-l-with-icon-1-chromium-darwin.png | Bin 0 -> 10815 bytes ...ize-l-with-icon-only-1-chromium-darwin.png | Bin 0 -> 3464 bytes ...l-with-text-and-icon-1-chromium-darwin.png | Bin 0 -> 10815 bytes ...-with-active-segment-1-chromium-darwin.png | Bin 0 -> 9705 bytes ...hot-size-m-with-icon-1-chromium-darwin.png | Bin 0 -> 10903 bytes ...ize-m-with-icon-only-1-chromium-darwin.png | Bin 0 -> 2984 bytes ...m-with-text-and-icon-1-chromium-darwin.png | Bin 0 -> 10903 bytes ...-with-active-segment-1-chromium-darwin.png | Bin 0 -> 9830 bytes ...hot-size-s-with-icon-1-chromium-darwin.png | Bin 0 -> 10983 bytes ...ize-s-with-icon-only-1-chromium-darwin.png | Bin 0 -> 2965 bytes ...s-with-text-and-icon-1-chromium-darwin.png | Bin 0 -> 10983 bytes ...-with-active-segment-1-chromium-darwin.png | Bin 0 -> 12366 bytes ...ot-size-xl-with-icon-1-chromium-darwin.png | Bin 0 -> 14224 bytes ...ze-xl-with-icon-only-1-chromium-darwin.png | Bin 0 -> 3966 bytes ...l-with-text-and-icon-1-chromium-darwin.png | Bin 0 -> 14224 bytes ...-with-active-segment-1-chromium-darwin.png | Bin 0 -> 10100 bytes ...ot-size-xs-with-icon-1-chromium-darwin.png | Bin 0 -> 11135 bytes ...ze-xs-with-icon-only-1-chromium-darwin.png | Bin 0 -> 2919 bytes ...s-with-text-and-icon-1-chromium-darwin.png | Bin 0 -> 11135 bytes ...-with-active-segment-1-chromium-darwin.png | Bin 0 -> 5970 bytes ...h-overflowing-labels-1-chromium-darwin.png | Bin 0 -> 9071 bytes .../cat-segmented-control.screenshot.tsx | 179 ++++++++++++++++++ 30 files changed, 182 insertions(+), 2 deletions(-) create mode 100644 core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-disabled-group-1-chromium-darwin.png create mode 100644 core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-disabled-segment-1-chromium-darwin.png create mode 100644 core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-focus-on-segment-1-chromium-darwin.png create mode 100644 core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-hover-on-segment-1-chromium-darwin.png create mode 100644 core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-renders-1-chromium-darwin.png create mode 100644 core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-l-with-active-segment-1-chromium-darwin.png create mode 100644 core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-l-with-icon-1-chromium-darwin.png create mode 100644 core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-l-with-icon-only-1-chromium-darwin.png create mode 100644 core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-l-with-text-and-icon-1-chromium-darwin.png create mode 100644 core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-m-with-active-segment-1-chromium-darwin.png create mode 100644 core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-m-with-icon-1-chromium-darwin.png create mode 100644 core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-m-with-icon-only-1-chromium-darwin.png create mode 100644 core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-m-with-text-and-icon-1-chromium-darwin.png create mode 100644 core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-s-with-active-segment-1-chromium-darwin.png create mode 100644 core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-s-with-icon-1-chromium-darwin.png create mode 100644 core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-s-with-icon-only-1-chromium-darwin.png create mode 100644 core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-s-with-text-and-icon-1-chromium-darwin.png create mode 100644 core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-xl-with-active-segment-1-chromium-darwin.png create mode 100644 core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-xl-with-icon-1-chromium-darwin.png create mode 100644 core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-xl-with-icon-only-1-chromium-darwin.png create mode 100644 core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-xl-with-text-and-icon-1-chromium-darwin.png create mode 100644 core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-xs-with-active-segment-1-chromium-darwin.png create mode 100644 core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-xs-with-icon-1-chromium-darwin.png create mode 100644 core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-xs-with-icon-only-1-chromium-darwin.png create mode 100644 core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-xs-with-text-and-icon-1-chromium-darwin.png create mode 100644 core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-with-active-segment-1-chromium-darwin.png create mode 100644 core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-with-overflowing-labels-1-chromium-darwin.png create mode 100644 core/src/components/cat-segmented-control/cat-segmented-control.screenshot.tsx diff --git a/README.md b/README.md index 8b5a9447..6b029d7c 100644 --- a/README.md +++ b/README.md @@ -117,13 +117,13 @@ Both local and CI reference screenshots are committed to the repository so that Screenshot tests are intentionally excluded from `pnpm run test`. To run them locally: ``` -pnpm run test:screenshot # from core/ +pnpm run test:screenshot # from repo root ``` To update the local (macOS) reference screenshots after an intentional visual change: ``` -pnpm run test:screenshot:update # from core/ +pnpm run test:screenshot:update # from repo root ``` This regenerates the `-darwin` screenshots and commits them alongside your changes. diff --git a/core/.gitignore b/core/.gitignore index 5cd374b7..6e75b111 100644 --- a/core/.gitignore +++ b/core/.gitignore @@ -2,6 +2,7 @@ dist/ www/ loader/ coverage/ +.vitest-attachments/ *~ *.sw[mnpcod] diff --git a/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-disabled-group-1-chromium-darwin.png b/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-disabled-group-1-chromium-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..e7641a6ed45a3f71886c6740e2f9bc0e1938b20b GIT binary patch literal 4470 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 literal 0 HcmV?d00001 diff --git a/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-disabled-segment-1-chromium-darwin.png b/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-disabled-segment-1-chromium-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..26df3ff21c4cd84eb0f7e9223a13c017040f31bf GIT binary patch literal 4922 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 literal 0 HcmV?d00001 diff --git a/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-renders-1-chromium-darwin.png b/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-renders-1-chromium-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..9855eadc1d33b6ffc3cd48552a057e85cf6bc4a3 GIT binary patch literal 4997 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 G{=Wc_Z>k*t literal 0 HcmV?d00001 diff --git a/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-l-with-icon-1-chromium-darwin.png b/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-l-with-icon-1-chromium-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..7254141dbf9d7bc7d4af89a0b57d0a8a923f4de4 GIT binary patch literal 10815 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 literal 0 HcmV?d00001 diff --git a/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-l-with-icon-only-1-chromium-darwin.png b/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-l-with-icon-only-1-chromium-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..9e91c6981547a9b5d9027ad84909e0bc703cb869 GIT binary patch literal 3464 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 F{|4P3kLUmZ literal 0 HcmV?d00001 diff --git a/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-l-with-text-and-icon-1-chromium-darwin.png b/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-l-with-text-and-icon-1-chromium-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..7254141dbf9d7bc7d4af89a0b57d0a8a923f4de4 GIT binary patch literal 10815 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 literal 0 HcmV?d00001 diff --git a/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-m-with-active-segment-1-chromium-darwin.png b/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-m-with-active-segment-1-chromium-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..79d936cc08cfd545d25fa22682479dfbbb2cc716 GIT binary patch literal 9705 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 MSzGC|f>p@>09dP{%m4rY literal 0 HcmV?d00001 diff --git a/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-m-with-icon-1-chromium-darwin.png b/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-m-with-icon-1-chromium-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..5cad833038ba5d3c6e7aeb0538b1bafd599ad95a GIT binary patch literal 10903 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 Rf&Q^e>dHDwrHWP|{{viGIQswq literal 0 HcmV?d00001 diff --git a/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-s-with-icon-1-chromium-darwin.png b/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-s-with-icon-1-chromium-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..cc77e261c0d0d6d3231a5bd698c875c39e326016 GIT binary patch literal 10983 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 KWeTMXKl~4sHi8!b literal 0 HcmV?d00001 diff --git a/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-s-with-icon-only-1-chromium-darwin.png b/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-s-with-icon-only-1-chromium-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..ba9b1a6da4aef6dcb34551238ff9a2bda47fe41b GIT binary patch literal 2965 zcmcgu{Xf&|8<$j6sx8$CMYDN0C1bS?LNeOcLFS7_S(4!p9U~9(e2}M!8Etv0MNXM! zRw`o1W7c*`mJyv4DkS6~jB~H^)AtYfey<-s_vdwA_rv?T?(4eVSK29u6RI24H!3J7 zsN%2~f`WqL0{H(`c|G|4H1hP0g2JXVIE?jwBGybasd5Hp&$ds^kIt`_P^i=<^-`#2 zS=e!{_!_m+D%wu;=s8Y@O}sW??@s=<>ndgaP}(EaQ0avmNM;ri5*bU+O1N41$VW|| zeypxWkiXG`a|uyTScx$Rb>8;ws(6~vTwZbb5gT*Qd5#&>3uDp z0X0Z-H`F<)!hZoT|6@)Sy*u!bu^dFYg1fDCMZ6u~wm!exO>C@T7-DuqKhc7^!2pKj zuNI^>ath#H@5t1PF+X)%J3Kx#c(qVpwJihf% zgtdmg%m?X-O?KN+R6(lt$uxHhy_0DSD3t7dTuBXFsPA{k{eHS4jwv?XHq!69d zm{KY%kB=xgzNZ@|f%p(1cEt4lDLyx}42N;DIApVWcdVHvWFM>fd^1IG!?-$b4gpByi+;LAwgY zvBk~~^OvjIIs*iUUmPvdTmEuoYk4suMLlo_r*}asdZfePw6BkWlY9j@4Fn9wJS0%q z-w zt#h5b8ags}pYSSzfHzkhd(!WDrmH0(cFuR~o&~nq%m|i^!Dy?D73!5NSjwM8Z{?E# zSyb3sbFu%?*yLns=*VPI>rg=crO)kFBB^gt=fuOeP5$L^>Zq|jrf72I>4w6WURU4n#=}TYYQdub9DTzn$H1BF*3x~+pKN~mT78%sDNeD~}e@oGdTab1U`IjwZ zG8r(w0~p_L9_-xrBobAC4*Kw9M&$dadu5xD#gCXy)9VG(Wk&{k<7sMMMGrnEu`~}) zY0vq}Bo~*z>aC`QU9ZZS`f9T^` zpk>a81o19nt9FXm^5myX)Xu6vsq^xS(OtZc&-S0L88;C9;=QIUPki)ghSAFY(W1CD zWQjQxO*TAzN!P}{_-OLW^c`J9-g(oqPUqWy>87poElySyq&5l%jbK&pjv$eZ7V{R3 zKGzOjnCR0&`M-o0d(6VxwO0FuMO2u$GAaj`tIH!l|LtI1=)QTY1?2lS+EZcFi7XmX z5Y_@Iq=+6Lo$IwCxC>(UXj%9l9FtU*g$j*PrcvsDTx{IuZWM;zw_}UqH@~29^ya9OCmf zn#T9K$-$;m;B=pX+6Rm*%f+7>R%jZ?igf7}P2q%5<>*+hkqcD%eS+?&9KPn-DLT34=ej+1DRq%GX zhx9JklJc`8#ul<{La)lnA)H^#+|6X=g>Xzj0Tw@roZ-E&hCV0fM%AYf^9~o-0~R6Q zvS}8k6v6Q{@+SV>fI}W~Y9SARlD|b|ZhYVhG0#?sI`?I*A_}Fk2m18aW==Vd4Nqe$ zUmkyxOmvy(eO$m+mRmwJ%0-UVwjfU$cu6Yc6L2_>Dz;Ro>5^T#{m@c=xE4J-367^D z$6O2$fEta3)eIymJE^6v#oTH@lvPv*9&C?!_>`z-B0l>Vl)RpZXNGx*kQF^9>ox3! zQ8YL#@g@O}Ip)+TI!o>4`)a*kYR`Ec^7%m_128I}dBCBEH0&==N>5hkV-0l5F!;2s za%6XVOnz`NBCR1x&Yqb{vC%$HEZ%08tb3 z_aUke>{G#Ek3-4zce$QAH~`6E!>a&O8aaavk~RYN&>oUAQ5*8uN$!56hC_fGp%Gk5z$ToQ~nM z2|r35`Bo0_S2jkel!3)z&+Fruv+O9ta&ECV+WkZ5DUyYrcstDwz({9nBP-D01iD`? z2CyMEO*vZ|rjOeOVbXNzsecP_Yz7pVK-b3|hav#+7yWl9^t77Mu?P%=!~8P-jpcMO ztVtyRL#|_oED`{Wf4APpfhMnZf4e+n<#?V+Hqq4+O!+J$C#D8w2E9xe}Vi3L3&y7mK;*p6cx0^rSo z2k4+Jq(QG)+3X(uPBEPxqo+e7eMINE#xz)V?Pk*_p*xAc^t@qdEAkc0r;A|Z* J_l}=S{0Gfsj$Z%( literal 0 HcmV?d00001 diff --git a/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-s-with-text-and-icon-1-chromium-darwin.png b/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-s-with-text-and-icon-1-chromium-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..cc77e261c0d0d6d3231a5bd698c875c39e326016 GIT binary patch literal 10983 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 KWeTMXKl~4sHi8!b literal 0 HcmV?d00001 diff --git a/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-xl-with-active-segment-1-chromium-darwin.png b/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-xl-with-active-segment-1-chromium-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..b331e4e3299cb0a407acc57c9433e448b0beb5d3 GIT binary patch literal 12366 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 PxTGYnDpw?H`0l>}`l$o| literal 0 HcmV?d00001 diff --git a/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-xl-with-icon-1-chromium-darwin.png b/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-xl-with-icon-1-chromium-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..dc43c5c7cfe7bc74bb5c5489d9f155a5f3611022 GIT binary patch literal 14224 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 literal 0 HcmV?d00001 diff --git a/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-xl-with-icon-only-1-chromium-darwin.png b/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-xl-with-icon-only-1-chromium-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..b18f92d606014d1bc96732ab4356ca82ce857021 GIT binary patch literal 3966 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 literal 0 HcmV?d00001 diff --git a/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-xl-with-text-and-icon-1-chromium-darwin.png b/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-xl-with-text-and-icon-1-chromium-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..dc43c5c7cfe7bc74bb5c5489d9f155a5f3611022 GIT binary patch literal 14224 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 literal 0 HcmV?d00001 diff --git a/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-xs-with-active-segment-1-chromium-darwin.png b/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-xs-with-active-segment-1-chromium-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..4e2e0496b9f4d1ac7d2f2ef89b0dfa684ea48b19 GIT binary patch literal 10100 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 j^UlB23I1Onx?VU_pfhL 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 literal 0 HcmV?d00001 diff --git a/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-with-overflowing-labels-1-chromium-darwin.png b/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-with-overflowing-labels-1-chromium-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..0fc325fbdc27e8ca0045cb5c46559f5eac82eb17 GIT binary patch literal 9071 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 DHndv{ literal 0 HcmV?d00001 diff --git a/core/src/components/cat-segmented-control/cat-segmented-control.screenshot.tsx b/core/src/components/cat-segmented-control/cat-segmented-control.screenshot.tsx new file mode 100644 index 00000000..79109754 --- /dev/null +++ b/core/src/components/cat-segmented-control/cat-segmented-control.screenshot.tsx @@ -0,0 +1,179 @@ +import { afterEach, beforeEach, describe, expect, it } from 'vitest'; +import { h, render } from '@stencil/vitest'; +import { page, userEvent } from '@vitest/browser/context'; + +describe('cat-segmented-control screenshot', () => { + const SIZES = ['xs', 's', 'm', 'l', 'xl'] as const; + + const WRAPPER_STYLE = { + padding: '20px', + width: '760px', + display: 'inline-block', + backgroundColor: 'white' + }; + + beforeEach(async () => { + await page.viewport(800, 200); + }); + + afterEach(async () => { + // Reset mouse position after each test to prevent hover state leaking into the next test. + await page.elementLocator(document.body).hover(); + }); + + it('renders', async () => { + const { root } = await render( +
    + + Option 1 + Option 2 + Option 3 + +
    + ); + await expect(root).toMatchScreenshot(); + }); + + it('with overflowing labels', async () => { + const { root } = await render( +
    + + Lorem ipsum dolor sit amet consetetur sadipscing elitr + Averylongtextwithoutwhitespace + Short enough + +
    + ); + await expect(root).toMatchScreenshot(); + }); + + it('with active segment', async () => { + const { root } = await render( +
    + + Option 1 + Option 2 + Option 3 + +
    + ); + await expect(root).toMatchScreenshot(); + }); + + it('hover on segment', async () => { + const { root } = await render( +
    + + Option 1 + Option 2 + Option 3 + +
    + ); + + for (const segment of root.querySelectorAll('cat-segment')) { + const button = segment.shadowRoot?.querySelector('button[data-test="two-segment"]'); + if (button) { + await page.elementLocator(button!).hover(); + break; + } + } + + await expect(root).toMatchScreenshot(); + }); + + it('focus on segment', async () => { + const { root } = await render( +
    + + Option 1 + Option 2 + Option 3 + +
    + ); + + // tab twice to focus the second segment (two) + await userEvent.tab(); + await userEvent.tab(); + + await expect(root).toMatchScreenshot(); + }); + + it('disabled group', async () => { + const { root } = await render( +
    + + Option 1 + Option 2 + Option 3 + +
    + ); + + await expect(root).toMatchScreenshot(); + }); + + it('disabled segment', async () => { + const { root } = await render( +
    + + Option 1 + Option 2 + Option 3 + +
    + ); + + await expect(root).toMatchScreenshot(); + }); + + it.each(SIZES)('size %s with active segment', async size => { + const { root } = await render( +
    + + Option 1 (size {size.toLocaleUpperCase()}) + Option 2 (size {size.toLocaleUpperCase()}) + Option 3 (size {size.toLocaleUpperCase()}) + +
    + ); + + await expect(root).toMatchScreenshot(); + }); + + it.each(SIZES)('size %s with text and icon', async size => { + const { root } = await render( +
    + + + Option 1 (size {size.toLocaleUpperCase()}) + + + Option 2 (size {size.toLocaleUpperCase()}) + + + Option 3 (size {size.toLocaleUpperCase()}) + + +
    + ); + + await expect(root).toMatchScreenshot(); + }); + + it.each(SIZES)('size %s with icon only', async size => { + const { root } = await render( +
    + + + + + +
    + ); + + await expect(root).toMatchScreenshot(); + }); + +}); From 97737e06f4427c77a3fbe1f577112383186eca86 Mon Sep 17 00:00:00 2001 From: Nora Simonow Date: Tue, 11 Aug 2026 12:09:19 +0200 Subject: [PATCH 11/42] chore: fix prettier --- .../cat-segmented-control.screenshot.tsx | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/core/src/components/cat-segmented-control/cat-segmented-control.screenshot.tsx b/core/src/components/cat-segmented-control/cat-segmented-control.screenshot.tsx index 79109754..8291feba 100644 --- a/core/src/components/cat-segmented-control/cat-segmented-control.screenshot.tsx +++ b/core/src/components/cat-segmented-control/cat-segmented-control.screenshot.tsx @@ -65,7 +65,9 @@ describe('cat-segmented-control screenshot', () => {
    Option 1 - Option 2 + + Option 2 + Option 3
    @@ -119,7 +121,9 @@ describe('cat-segmented-control screenshot', () => {
    Option 1 - Option 2 + + Option 2 + Option 3
    @@ -175,5 +179,4 @@ describe('cat-segmented-control screenshot', () => { await expect(root).toMatchScreenshot(); }); - }); From c23820e9befde4880bce88513a51e815c1332077 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Tue, 11 Aug 2026 10:14:35 +0000 Subject: [PATCH 12/42] chore: update reference screenshots --- ...reenshot-disabled-group-1-chromium-linux.png | Bin 0 -> 3871 bytes ...enshot-disabled-segment-1-chromium-linux.png | Bin 0 -> 4345 bytes ...enshot-focus-on-segment-1-chromium-linux.png | Bin 0 -> 4913 bytes ...enshot-hover-on-segment-1-chromium-linux.png | Bin 0 -> 4613 bytes ...trol-screenshot-renders-1-chromium-linux.png | Bin 0 -> 4290 bytes ...e-l-with-active-segment-1-chromium-linux.png | Bin 0 -> 8512 bytes ...t-size-l-with-icon-only-1-chromium-linux.png | Bin 0 -> 3464 bytes ...ze-l-with-text-and-icon-1-chromium-linux.png | Bin 0 -> 10085 bytes ...e-m-with-active-segment-1-chromium-linux.png | Bin 0 -> 9026 bytes ...t-size-m-with-icon-only-1-chromium-linux.png | Bin 0 -> 2984 bytes ...ze-m-with-text-and-icon-1-chromium-linux.png | Bin 0 -> 10296 bytes ...e-s-with-active-segment-1-chromium-linux.png | Bin 0 -> 8932 bytes ...t-size-s-with-icon-only-1-chromium-linux.png | Bin 0 -> 2965 bytes ...ze-s-with-text-and-icon-1-chromium-linux.png | Bin 0 -> 10140 bytes ...-xl-with-active-segment-1-chromium-linux.png | Bin 0 -> 11174 bytes ...-size-xl-with-icon-only-1-chromium-linux.png | Bin 0 -> 3966 bytes ...e-xl-with-text-and-icon-1-chromium-linux.png | Bin 0 -> 13087 bytes ...-xs-with-active-segment-1-chromium-linux.png | Bin 0 -> 9488 bytes ...-size-xs-with-icon-only-1-chromium-linux.png | Bin 0 -> 2919 bytes ...e-xs-with-text-and-icon-1-chromium-linux.png | Bin 0 -> 10610 bytes ...hot-with-active-segment-1-chromium-linux.png | Bin 0 -> 5477 bytes ...with-overflowing-labels-1-chromium-linux.png | Bin 0 -> 7638 bytes 22 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-disabled-group-1-chromium-linux.png create mode 100644 core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-disabled-segment-1-chromium-linux.png create mode 100644 core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-focus-on-segment-1-chromium-linux.png create mode 100644 core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-hover-on-segment-1-chromium-linux.png create mode 100644 core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-renders-1-chromium-linux.png create mode 100644 core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-l-with-active-segment-1-chromium-linux.png create mode 100644 core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-l-with-icon-only-1-chromium-linux.png create mode 100644 core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-l-with-text-and-icon-1-chromium-linux.png create mode 100644 core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-m-with-active-segment-1-chromium-linux.png create mode 100644 core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-m-with-icon-only-1-chromium-linux.png create mode 100644 core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-m-with-text-and-icon-1-chromium-linux.png create mode 100644 core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-s-with-active-segment-1-chromium-linux.png create mode 100644 core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-s-with-icon-only-1-chromium-linux.png create mode 100644 core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-s-with-text-and-icon-1-chromium-linux.png create mode 100644 core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-xl-with-active-segment-1-chromium-linux.png create mode 100644 core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-xl-with-icon-only-1-chromium-linux.png create mode 100644 core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-xl-with-text-and-icon-1-chromium-linux.png create mode 100644 core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-xs-with-active-segment-1-chromium-linux.png create mode 100644 core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-xs-with-icon-only-1-chromium-linux.png create mode 100644 core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-xs-with-text-and-icon-1-chromium-linux.png create mode 100644 core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-with-active-segment-1-chromium-linux.png create mode 100644 core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-with-overflowing-labels-1-chromium-linux.png diff --git a/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-disabled-group-1-chromium-linux.png b/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-disabled-group-1-chromium-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..c4dd5d6bb9187fe891f66094be16ab196dffa968 GIT binary patch literal 3871 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 REF-=OK3@LFhP~Je{{o@nFBAX( literal 0 HcmV?d00001 diff --git a/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-disabled-segment-1-chromium-linux.png b/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-disabled-segment-1-chromium-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..abf474da6b110cf9784f5bc727f92a914e0bacfe GIT binary patch literal 4345 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 Lp=Q|~``7;h_6P=r literal 0 HcmV?d00001 diff --git a/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-focus-on-segment-1-chromium-linux.png b/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-focus-on-segment-1-chromium-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..f87e2a368929e7297c9cf499e897db9fcae6323f GIT binary patch literal 4913 zcmc(DXH-*bur^3XN+KO85|oY*YLG}Mp@gbP6_DOhA*c{(Qj}1ng%&_^REh-=K@bE~ zYUuHRN+*y6@X$M<-{ASy`qsMt?z-#VJ3sc?`m|JeQ6a#cH9dwxcm@`dowZ?Vh*(g`KgS{8qKjl2rAc){_a zD_?0F|z&NA7}xMq*4%dzACcAXUU81yh_Dc?%0ZRU=yO zu1HG(GS5EKQ8m)LAl}wxK)J~tobyaeH4W|jdkYezb8b42$d-ZCrF`DR;96kK?rTZSx-vb=<(UU2I71F5kui_vXlcI=#lkl_%(;9BkJG z$*;&=V-)nE+P9J@*DL*sxSk8h=Em(XRcH-G4fADxnNFJ6X8<24$k(M5r~)!8P!DBv zea@^DXb*@Rs-P*!glIW~Ht{qJ_R*vPJsj>er%ZcEXfH$z6QFZ7&7{(i8bLM}ragl| zDxrcje}~_|`8FF#9H53Ws;7|DrI;YvnW-kmqP_a9tW+;~fwDq%_9e;=sWG&(5^DcX zWt&R35lG5{)~62?>oBtZX70Y;M#Qf`QmHvyEw;D-rvGA|fQ->vOsG*PLR+@2i6qrdZ|~ zqvHKd-^io$%|o~@lk3VP?ESKYDBLV$-u6ZZhyKJ!qvjXeO2C5bq9-nKBXSy}cqwgo!Q zeC>AIwI3NnWz3YA`B^fh*xm6lFaYy|RCt&&mO?G7j;2b3EZ}}qbx-F%Cw~ZmXi?Ri zhKc6$EB%q4t8%6amFU8yxpfz*U_42oka6(&_)TtvS>Xp-LQSOg@()Pm*dxMdl$QyqSO)+2}DAB7V2~ zT;7avuJy1$$;ylXb^II#)98d+>or@CJG%FiS7JkKfUS<$nEft^wST;B-PsYyp zP!8sJyjkhmq2PSVj}>x6tygC6T4m|so`GccM<@d2D&K}S$9qp_&ISpmeLuEV>JLe& z0cHOPa<^(PyAv&Mao)4(upO#UMkbe9hexMw8V2mHH{YzrYZ>{vCRgXajI7mYEio}; zdD-^q`>1BZjT*rD%*_T4XmycA8*t2Zp;YTmh+RTff#Ooq$dCTJrT(6&dAR(VF)D?>tvho7~Q8vf3eY;VM!~W z)H%krK;jpuA*DFFG-5u-A3&y5(gV1LwjSI0IdCNItdp*tgYlLly;-z>!4VaW&pHPf z#TXQ*RLjc%h0>#(=mN6Tm(bLK`%b^LRN7^^TSMg>s>ugxkp z)_v@r=vJR?sAx4fbuG1{L!otD+wZ_fHpO(xD^MIXWX4%F@0NT%Q2SMilXG9PlF$8R z%LT3#a(FNFjh6Y4z|H6GV39F=iUH#AT2W7q=#m4^r4K6)gtd9XIjW|~+6}r@**o_8 z{%M8O0q~XK+t25_0Oe3t!fUsd0! zrl#y`VR0=bX7_p5&Mn3C`3&7?{@5Y$cXKjdx`LqKV_H~INFY^qL5xq1}K>f_(a99YN69tSQpgtDbKs(*x?sO120@ZFns6OD{Y zBUbhnz#E4bS?a`nwx^;kJKV#EK6NVY5VQjl>EfD%yX@O%ZpJ5XcDnXj$R)8^gMUs@|6hu;BQL!msATNi`)uTJPi z`7@5EU9YWuLiwJa|a=xe_SL1J#xK~T6&FWfLQTj zs2#dmz0kih*?k=R#_qv)kzGi%A8X=24M}$%p3_JXTlwpYTHI~?tDB=O45eJg51CE& znk3F#Ov13xi{PCl8 znm%}!idJvJU)@?|7LXv)(<|XRLmOGLMQ#aMuR65K`iov!Tv2az(pgoO@I$5vwW~=i zA5hVU3vsy!R&K&}L(ysUATMl@xBhpE$dHtX#=4Ox6z7lX=CxGTNBkg(4Eb38ka{LO zqlgR32dHV`IXnt7cA_Gq>0yS%{n;SVq?(zeuP@s5DOdm7HZK$8R;Q`EU;B^W+fCDY z(EY|+ZN_jP5JR_|ytAGf1&M?_CY08va!Ic(L1wR~n3-WL8T43@j|X+WtV$vk9cS2I zNaSJKWFs$kc;AD>`r>8NZ#v&BxF^i2pCO;UvmS+eJ75*!ccgD8qT(O9u&9PtgkSDp zw+C=G6p2{Qgvwri*~SLdwnY6P4GxwJ=>p=MpMOkWJ@86Q;%mSzawLRY(w6O?${o;d^e)R#EE0yZpC%(r&-e}Bfuk^BSZg7G(sl*B*EbXQ8?%KsT zi{zQ>d7+Vs7(}Am#ZCo`YZ{L9egD$LPtI+Z=8v{~5=h5PIpILi#YS=RH#DK+F!Sz* z=7@ygZIzy&%l#IaCi@95L-eJF*bPA=C4yr2weVpO>^)W^k3JO?apL*cnO`vHu9XDB zUSuR~JXFb0sCgBzC)}UuS&{!W<0*qA)qDfN2{oNOJkSzrOczz;b2uz&3nr+F2!*Ua zPc%3ZetQ_){rzaIdEL>cw&&;;#+h+ z`mn&krZ)2FTo>4`&$Ww|yGW_M5@xZ|JI6;N>67@hTy}-%0r&cOp|sR`>HynAjk;>0 zV(EwHf@hVN0pYSD_)9s0EwlP|2!`#DbO!F)LDl@$5F^2n+T3LWjht;;xcL<9#DZDu zW~)o1%NyM9(q^f+q%I|o>pwTt3ncLl;24SXEJkZs3Pw0Q`}5vzDD;82_D#7es#fAm zu`fi0MADZ2Jv!18{VBWiiHE|sj|S7F!6JD!9*lWs9WQbIz+dHp{xBuDvEzl@-G*=0 zagW;kvIl}u#ERcg(>Q$i+LZ0qCFeDwSMV^>E-WJZhdof8HY>|K^1`|3jc*#uE{@}4 zCws9G^MIELSf^WhsNS<5hX*7BLW(aukTIMWfFUORgj;Qc9_}noh-zYaD{pniO`7>P z`D%hzAu8Vg9KdhaC}?+p=ZH;X?FfOoZK5ahF{?w!!u?&5|KhNfoXnikw z9rNR9nS^skneW$u$q)>JR?!M0&DouWKB1m_q95sWQdzV z3gZ?^-<6?VpJ-G0?82l>7+4C9A2C=o$v+fVI`*XXR**ooykEqzjCa%lq$)xybXCM7 zTRF5>Ugj<;c4rI)R~+DJ=PLbuNRobi-ol_h*@6)LtdT5*Y5m#jP!%EjRI`7sb3@y2 zam-w39-QJoF`n}Ejw1H}?kNjn+pL<-PctVA;8)(aadmfh&Y>vsP%2)$6v%4y)-RI8 zB<3g635WZo~XAP}o}rmN3`@N#imGh+g9;`b!>2J`!)@|Gq)X6%!z>6ODo-AeA$ zg%VP_cZO@`ze{jRz$sM2ZvM@IDUMQqWKxM*z%iKb$ESM(fSFhtUr;?)*+AxfnzO7Xx>;{9P`Y}fY6 zY>aCC$zy$~qyF2T3Gdk8l!_)A7H^=l$GQuqruzaiYwYY(*STR`^FPJsLJp?%bKCKI zq}B8r!UJoW+#sY2^?4pXEG8R&mPjbq%p{aFh~wOT;!d%;3I{`GpyD^%+`Io;3fm@P ze0nqKtfHlL?}AR@GHCeiA(V>T6IA?^CIJ%Y(d77pmmT%=bpD0=a(#)3FqqNys`u}` zJ35jlIry(%yw@-|37X%vyDdwOLOwBGaZd=T;9VXbbXNo)FGUjhj;X#UwFw&cn0~Mv zPon~Io~Y8mIvQ=V!p6_0Rb-8JENlbu(Jy z=uYXDhKi~S-&kM(xK|l#hG9!9UF@S4tSZ?{g~v-pNa~b$X^5Vsf8y>Yh~nj?VD1W{ y`!3Q~D-e~txP||vXLf}Cw`iLGGEqc6p+|N_{?z~Nzf7aT=n#gM@JfBRxc>l`EH%Oa literal 0 HcmV?d00001 diff --git a/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-hover-on-segment-1-chromium-linux.png b/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-hover-on-segment-1-chromium-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..8dc429e1992aa289229d0ddf98760a6979a5f7bd GIT binary patch literal 4613 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 A^Z)<= literal 0 HcmV?d00001 diff --git a/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-l-with-active-segment-1-chromium-linux.png b/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-l-with-active-segment-1-chromium-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..8427deea035c2cca4a520a5fd23badcf7c97e8ea GIT binary patch literal 8512 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 F{|4P3kLUmZ literal 0 HcmV?d00001 diff --git a/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-l-with-text-and-icon-1-chromium-linux.png b/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-l-with-text-and-icon-1-chromium-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..a4ea467f2fd2896bf6ad0c9d85883033f4341d65 GIT binary patch literal 10085 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 literal 0 HcmV?d00001 diff --git a/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-m-with-active-segment-1-chromium-linux.png b/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-m-with-active-segment-1-chromium-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..9096b4b61ec759b83fbcc9635963ad95772c025f GIT binary patch literal 9026 zcmc(F_d8r&^e>T!UV_mEA=)TWV`kKt5Ft9R=$#?zAfgk!3q~iRM@01A4My+Lqn8lT zlj!d8zTf)~+~>LX{&Jo@d!N0^XRozqpY_=h>Z%H)L<~eYI5?z=FXS|FaPFJ}ZFK^C z;Aww^tB8a1h)_{ZR@(#jR|lz&_V278EBiNt@8S2{V(We=M?r%k6>B@&BMIv{Ouq#X zXcz`+2GYn<#bVh|=NzJA??w$2`4#2SG4q zO7~xbm4O8B-yT-EAhU=6$*>V5`QO4q|KAB4ven6WQSSYgKO&ej{>4YiTa#hlkaj^5 zl4oQ25yUBG59NGUH$@|VMON9p1>YJS9*V%LiMU%sIKx!NQ4qnX7RkuELkumFWy?7m zo|Q+~1ygV-*u_vF6EulfyCUXmBvhMglUY191xZ3Ekm(r{rf-{*gQo~sWAkgCho39k z4OMU#P$0lO@uR!3)2oW8M_p-~o75#L>@zhIu@tN7`gVq)vWe8t#~8pYG$OnzaO(XF z_D{fgOH=Zk+?@hyM7aMPpoXfB7^6;r;%tC-yYGLMCpc8ow@VmAbLQvQQ?A~()xCQ^OGm0bVRHSL~4;4 zoQ^?GSw`#+7ywNKFW5y9nYQ>vx(E z_&dPgcNDADLL?zv1%wDu?GI?qTVHqco**(&_=s>VB|DXbsdP?9T7;+@M8(jiRB>GY zQ82~opfCj@(*-bp;qmPdV0OY31AspA10WAQre9^k77w5iZ1V%ahArMyrt}H0bi-gg z)-Ff^U{lN#Ljgr@hn7;#e?M-gCf`mS1;o$XE)ODH1oKo>-2F_vA3=s>Y;s}Z*bqY! zmp;jrp6d%G-4`nJ;zBY?TrLgj-oU@1c9?(>zp8<04Uh|LekSQBH>8ddkqLX%!JLU` za>v3YX0&Of2l5HYj}BTebW&F|kptIJSsz~3i?-b3t%}0ab^H@aO_nq9 zZLOGSvFlBW=$2a~T6t~L#BgM{%um*DIHVpP+RO8ttUiPEoqy5a5x!WSBk?-q8>`pc zQPOZ+Wz_;f`MR2wNJ^*Wq3xH2BPvF_f2RMiC)EropbdR#`SY^U#l^DxbpvPKE^%fxhDUHN+f9uv2u2C_vvmP7a)K- z$o?$ER~$~+A3Gy2J8tKC{FV5cx~*e-RFKu6mMCC;`5C76LN@M8H zRa3=D)Pg9FIXKjtcQJano+oU(YSA{iF-+etTls79b|sk^H`k7N9ui$Vh&+wfz+PYj;5nExUt=+T$n1_W|FhV_5r`ypTv;h zPeD}X-6wj@EJ1V^cfT@q)=(dJ1rEU`O@N%Ko|=^SvlZ>Tsdo9ZgymomX;2(pp}?Q> zf>h)c&DeEX65kxdmgS6zpInCoOL^~CD;aFW%48tb4Tx)adnGvSvQyLXd_ZjO?f%Hy zHGJW+H_^0tj=YQmDUx(6)@Yz(T1q?1M9r&~>+%T`vi?e3cA>A>n9^l*@3JtET zpnFG~#~RE<@hY%AuK=oVgWwuW#V6qWV+n=apXs>65OJUL374p1h0JO8Fp3 z=^nSXgmyPhuQYZVL5!&sN;MY29`E&0;|4(32%SWd~ z+KbE7rbgi1NquU1%Fb5OB+~Q=EP;*dHp^7fq5WrNAWhC7%0d{g?&xT%&gIw|}h{#a=*@}1KTBd_WmPt0kadB=s}`sUb3^D31%H_Luyl1`%kTcmNl97B?Bq>488 zGKNJx^QcU{+*1m@r;^z#ZY^`l2>SYXBau75_7`I0qDWXsfGJUmt%PpQLbT%2;E;M~ zwV;yV!zAB%^o3O7{c6mrGpM-3AgvzQmeb5W=ysyuIWAKQK5oN`Shl{L&j(Ot4!hh0h2z)zjco)*R93L`PlnAd`>()@%;OLuLbJ}U5qUq zUG8YU2D3Q0;vbBn6@JhN!Wm5d5S+uRbWhiLNru6Q^giifYmlk{d-5?sP;M2sxlGhc z*T!Xo%Gk(>*G7>&%0Dhyr- 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 literal 0 HcmV?d00001 diff --git a/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-m-with-icon-only-1-chromium-linux.png b/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-m-with-icon-only-1-chromium-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..9b0fed5714da0ff27ff4d1cdb6af5da098d12c01 GIT binary patch literal 2984 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 literal 0 HcmV?d00001 diff --git a/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-s-with-active-segment-1-chromium-linux.png b/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-s-with-active-segment-1-chromium-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..b50ea1bd03bc414398f4573ec0f378499651c179 GIT binary patch literal 8932 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 literal 0 HcmV?d00001 diff --git a/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-s-with-icon-only-1-chromium-linux.png b/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-s-with-icon-only-1-chromium-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..ba9b1a6da4aef6dcb34551238ff9a2bda47fe41b GIT binary patch literal 2965 zcmcgu{Xf&|8<$j6sx8$CMYDN0C1bS?LNeOcLFS7_S(4!p9U~9(e2}M!8Etv0MNXM! zRw`o1W7c*`mJyv4DkS6~jB~H^)AtYfey<-s_vdwA_rv?T?(4eVSK29u6RI24H!3J7 zsN%2~f`WqL0{H(`c|G|4H1hP0g2JXVIE?jwBGybasd5Hp&$ds^kIt`_P^i=<^-`#2 zS=e!{_!_m+D%wu;=s8Y@O}sW??@s=<>ndgaP}(EaQ0avmNM;ri5*bU+O1N41$VW|| zeypxWkiXG`a|uyTScx$Rb>8;ws(6~vTwZbb5gT*Qd5#&>3uDp z0X0Z-H`F<)!hZoT|6@)Sy*u!bu^dFYg1fDCMZ6u~wm!exO>C@T7-DuqKhc7^!2pKj zuNI^>ath#H@5t1PF+X)%J3Kx#c(qVpwJihf% zgtdmg%m?X-O?KN+R6(lt$uxHhy_0DSD3t7dTuBXFsPA{k{eHS4jwv?XHq!69d zm{KY%kB=xgzNZ@|f%p(1cEt4lDLyx}42N;DIApVWcdVHvWFM>fd^1IG!?-$b4gpByi+;LAwgY zvBk~~^OvjIIs*iUUmPvdTmEuoYk4suMLlo_r*}asdZfePw6BkWlY9j@4Fn9wJS0%q z-w zt#h5b8ags}pYSSzfHzkhd(!WDrmH0(cFuR~o&~nq%m|i^!Dy?D73!5NSjwM8Z{?E# zSyb3sbFu%?*yLns=*VPI>rg=crO)kFBB^gt=fuOeP5$L^>Zq|jrf72I>4w6WURU4n#=}TYYQdub9DTzn$H1BF*3x~+pKN~mT78%sDNeD~}e@oGdTab1U`IjwZ zG8r(w0~p_L9_-xrBobAC4*Kw9M&$dadu5xD#gCXy)9VG(Wk&{k<7sMMMGrnEu`~}) zY0vq}Bo~*z>aC`QU9ZZS`f9T^` zpk>a81o19nt9FXm^5myX)Xu6vsq^xS(OtZc&-S0L88;C9;=QIUPki)ghSAFY(W1CD zWQjQxO*TAzN!P}{_-OLW^c`J9-g(oqPUqWy>87poElySyq&5l%jbK&pjv$eZ7V{R3 zKGzOjnCR0&`M-o0d(6VxwO0FuMO2u$GAaj`tIH!l|LtI1=)QTY1?2lS+EZcFi7XmX z5Y_@Iq=+6Lo$IwCxC>(UXj%9l9FtU*g$j*PrcvsDTx{IuZWM;zw_}UqH@~29^ya9OCmf zn#T9K$-$;m;B=pX+6Rm*%f+7>R%jZ?igf7}P2q%5<>*+hkqcD%eS+?&9KPn-DLT34=ej+1DRq%GX zhx9JklJc`8#ul<{La)lnA)H^#+|6X=g>Xzj0Tw@roZ-E&hCV0fM%AYf^9~o-0~R6Q zvS}8k6v6Q{@+SV>fI}W~Y9SARlD|b|ZhYVhG0#?sI`?I*A_}Fk2m18aW==Vd4Nqe$ zUmkyxOmvy(eO$m+mRmwJ%0-UVwjfU$cu6Yc6L2_>Dz;Ro>5^T#{m@c=xE4J-367^D z$6O2$fEta3)eIymJE^6v#oTH@lvPv*9&C?!_>`z-B0l>Vl)RpZXNGx*kQF^9>ox3! zQ8YL#@g@O}Ip)+TI!o>4`)a*kYR`Ec^7%m_128I}dBCBEH0&==N>5hkV-0l5F!;2s za%6XVOnz`NBCR1x&Yqb{vC%$HEZ%08tb3 z_aUke>{G#Ek3-4zce$QAH~`6E!>a&O8aaavk~RYN&>oUAQ5*8uN$!56hC_fGp%Gk5z$ToQ~nM z2|r35`Bo0_S2jkel!3)z&+Fruv+O9ta&ECV+WkZ5DUyYrcstDwz({9nBP-D01iD`? z2CyMEO*vZ|rjOeOVbXNzsecP_Yz7pVK-b3|hav#+7yWl9^t77Mu?P%=!~8P-jpcMO ztVtyRL#|_oED`{Wf4APpfhMnZf4e+n<#?V+Hqq4+O!+J$C#D8w2E9xe}Vi3L3&y7mK;*p6cx0^rSo z2k4+Jq(QG)+3X(uPBEPxqo+e7eMINE#xz)V?Pk*_p*xAc^t@qdEAkc0r;A|Z* J_l}=S{0Gfsj$Z%( literal 0 HcmV?d00001 diff --git a/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-s-with-text-and-icon-1-chromium-linux.png b/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-s-with-text-and-icon-1-chromium-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..8d2a7613721b4bf08a82f22ed0bcbef6effe67d8 GIT binary patch literal 10140 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 literal 0 HcmV?d00001 diff --git a/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-xl-with-active-segment-1-chromium-linux.png b/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-xl-with-active-segment-1-chromium-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..927965fc150272974982b511812f0f36b291f743 GIT binary patch literal 11174 zcmd6tRa9Kfv*<(kkl+OOV1v7Rf(8!~f(6&W;O+!>O|SvNAd>`_4DOaegFC?`xI?hJ z;rpNSbk=>l>z;>^)w`vttGahr^)Kp;ngTWkImVMGPp}nV%W6J(^7In;Z-I^qe4miX z9zS`)23C}PrR{~Z*N*8newKZBe{ms%eDeO)=BA#-2BA6#&a0S^>{Rk>R||DI%!%by zMd*Z!2FB&j=*dXAr;9HMrRho7o)SlS1w$D)(Y5RAUpk>w`MlQ50U^~|#GmKp9eG== ztvH(Swn`x-UAsSvTHQR;Jl8;{4aJj2r+xl0_~9oMkIt0zzly^D*B1%fTAUpTE5wfz zB+PZKI@>?05^6(^!HtF7`KHEZxy_W6ft)Fh*+;l%nV#oAk8$k3NK(TjaTLtXYV4Q0 zCPo$MoJY}DoUdnI>Qt8NzVK|sF{8h|n zHOlZ{Q&Q$Iyp_N((sk*A;en`;0e%n5Dq5a z`pjW7Ga7}r@<#)M5(hb=^NS@W(?}-|G$P^GOO`M^=#{7+L%7F}rH6LJ3BCBz{Kjyw zIdixB{Za=vp>$-=`iJeVZEoR9Rl+&Ah7xV4O%9-~tcla7iC!=;asqg68m<~b%t1*S zE{*OC7N$f6lpqJxdzgpJ+&U^Ie84LL-eAcrf0%hn+x24|_$dT>-sp!bqN7SjhFZ@F zV%yIZg^dN{L2ZFqZ3Ey|hWnekV~%ptJB!(_g^DP&{ZQ(B<nO1hpi4^t73qoK&Cy!2BCJ2;tRD&tz;FVyChv~&HBm}gY6NH25L-FF;U!o^f zJk%U%nt2$JL+fU-Lh+sfMtKwv zYC8j0MgF&e$&1iSBw$5kW&%rrJS7-!1+D!-)Q7g{w6f+rc+xi}4_ZAmde997$S7U) z=rWI0x+ctC{Oe?|Nl_n{6EHQVFS>}TzAu^$G_UHtH&5E?VB|X9xi&7~kHs6*@j75S z)jMS(_QPi!nb^My4K6P;8zRvNwJ9t4UQ6nF;H5LA%h2G2h`ITDN5XRKn~@7>6%!(v6|^h8Bb1~a5n%L8Jp`KrAf?M2C* zRjDq;*gW>lW;SU(CMPwBP&|uwwzt5&ZKwS5^8o~)cNu4%8|*9_m0WpRusgr$Mk>&h ze4U5T6@`>}H;KEpT>C;_f$txxwTnxZZ<($!x7n5y{kqrd?gjchZQUqTmyRyKFN4xr zTz>6s-s+9yQ-R`W``~eGTX)V>8u~87TrRqPn{hU3RUi6E>ulKUc4!%!xw24e@?F-& zZd_*qoM6W^xaVIQH{2$tcCk=q;NC*W2ld$&Oe^{r?c=H*5F z{Au>9V%Y+gVfZ%BJ$73x$ZV>!>EaahOumv*1M^e>bf!28O${-LFoTr{71!tok zL>aF#ojhS*NKy+@HhIf)u|}Lt8GY+mVd#&>`|*Mt zn;;7Ch}72GC$|A-p411>sNDj*BnM#{t(&5wL$MmfAbG`_)d48=U zHFydoXIFdM|JQbvrR1D@%M%6b*p@RagC{fMX@&d9TxvM}luB&#r>w1;(Z>1P5zfVL z-||`ec#=Y{XKuV16PhnLseWIkg3;=vH9YojQg6WbgNvk0-8fnlt6zQCckqa(HJ<7?u=%)gXGET>T^TNMY5^d9Ku75?r+rdkqa7W$JDfH8Q`s; zfT}wE)HWYstRa7RGB`jpNAzwR6YI+O+s#S_M`+zs9io%JMTar(zE=n%s_0}nBIP?} zp@w|RR9w6T2mXW#qhuF79v*=$*;n~~;{$)+1qgsKO^1fR>vuOz(9Uj(t4QT;Kufsu zDo~QplOpBJk1a_OrTC-#i*v1fG_Z+b-z{%zjtF&pNlzP}qF(W*bqtUW${U3fKX|YnFqQV(G6UCAnn$aQf zrP)HA)#Noof<613@b)Pt;>eafbh7p3BJ@KtYBOTZo+eYdKQh@yT%Aqaz*a;#qaoK|$0qx5~YoIYkc_Z=CTe zlM_LsxCN!&xj+>cyLh{W_#3p|#9;x#>rA37DRWneB{egjgP~X(*K}N|MI{G4s=VQT z-8XYNH(Bo?`!DADK58$2xd1CNh}8>MOT^HCht0~6_AFHn#B`4~tnH;P-yI90Zi{dA zdIit+QK{VBa63uhp6{#VP8yPL#+}xeVyDQsmrTD^HmbrU7@01~yg*PK{X;QeN*Hj+ zE5edV@Kl85pQ;F+tqdfr40oFPyB|%G>?nhlk>hWuqn$u|6azc=*4*W;91~S%pX%-1 z*WX-fB8f=GBgn;w`f9ni_Ui3PCq7ZqY?|QDS3od$Glba*Qj|?R%=(y2i=41+xMor? zNHtw>m0=Qct!>gSewnCwXIzQ3Uo#6{Ir56kMQl9ZCahAh z*k0Ng)umNZ{_bpvRg`Ny#(uSL))#BafD)4~4yK~TL@zb}8#*Tq><+7MTGmizWDc%Xhv;rq6kQQDB=@t_nP(brjuf>CLH z(U@px1|eDsDX%#zV5n*vEXK1@J^~yEKH>z}($v@I&K8p*S*4}765}%P&GhIrKRvO_Wc>YJC4(onzyv=9R!VPyl;^IJdr01x5}tHFZ{nBP zzk;AtQ#XzrJ$tJgS+pigNy2IFK7s?i8^IbpbTP6b7tymF$UT$nCQ^U?6TNb4-(kSP zpzY@F?Lf|zAR`eibe~~=;EsdOO8jLwS!PIvIQ4Kab2Yp`@wKCFE;t?7;L^1pOJ-cv}fqmnlUF(f10rZ-)G1qBr zEAIu`8I+rCsazO16PK?BqD=e^S}@A*M5NJ&+}s(t$08ESL#h9C8<)Ru+mug}F^~X@8DRx5UyGAf>lof7ttdV*?Qj>})0rfoTntLu3u9XRWPx zK8$KpV|dk*s^5Pbp#Bl^DyHYe{&U1`GO$lE@vJ3iA(3;tVs^O9Y(N+4#$^PkRA4pIBd@yof?4v=uNzcym zthkKf&htTI*>j*RH};hGGWV-|L< zSnG|O)gmhU51OR9*#6#l27<~_+EtQM)N@CAf01Yaeb2gm7VPC%wqA(7q-Lp>K(o4j zoL-cs{Z7PkS(FvGYpWzXQl9XCo5zW(+~{>4xfXG^AL~PNRFcIrU8A)%G#!@7K7}is zP!<32-%!m`Tn?xDhu$Gs)ME7D=$p!bVsF7`=(QMM6+_#o`XW^M%**FAyWe4GGGJU^ zuw|TxASUz76_Eu`EG>LR$BDbgS4}El%ZiKAWEcy(*S1QSZT}*->MhtW!j>`VA zd-baJ54*gYK4Moz)oJ2nO^sB&j44cD*q!lkUi6Obn&t0VcFcACUXzd@%3y7WLHZ$A zGs{}RufGbH-Oc^ZxNJ+!-M6;oGWP!K_$~^kMRYZvFM5jdZB6jm145g&wAQ$;*_0*l zm3{|g_U7FF7XO^uF*?FxGbH1C1aqD#al&qo>^V5eyVCK(9FDI`DEy0rAvLG+xfg16 zD~(Z1FDsHo#=JC!i~_vk^S0WJVhzE`*(u@A#!GxcjpJuN2F{-})e67#{V-i&0~(`g z!rhthBqQOj=YHJ%^mv0h(9qsc#{CKyS1LNaaIqA>OqtiE=zFHWGzPd)*)@e&KIKI6 zkd$o*qTaTe3b`3)GC)uL?cVQcij$EfN4fLEVxbEsO^LV0`=$eZ6kA?_%YyJ@tBNq@Sm;!Yn7O;Mo^Kqrn3IrVoI#L5 z(l=Dy*4%tA_Du~4Z9a81BZQnlJ1^6lgXT^Xch^XZ%aZXO?XAEPzh{RxzPkt>V4wW` z+7fFsXsLJxZ+GkYIuDN?+PRYtCHV908A`@c0EcgVge8^ZQj?q5u@9_rd(Z_Q_!iMs zF8s%bdT${^vb5f>R8=(dP;CqE6WX7=ID!$c|AoH58Amj$c2ooN_V{7-Q+ar7tW!h} zcv<1c{oa&0DLo|4p>n2CK0_u9fM>8L$PNAtBh*odbP?ox(*{GsxQu@*GZNBFT0hGm z#)M7qRqqVFm9iS;zHZao(K+aRyux%urAW$)X0rHzm(#?>)TjzX#9d|aBn%hli!gcK z?blB#+Xw4?UWZKem4c}RHEl3_)vhREPV)Auw)IJyL6rI$dE}%w|6mUCfE#(eXC99v zEh8u@EG(u!=UnypSX1&O2N^LPtrz(m@l|}IA-7fh3M;4240_{<>kJ5agZn_=(!v}Z-2DeNLyI#kCYP^c-P!4(zpzJIMFJ< z!!VeAD_iYCkjKN}cTajk$av_T%3aQ!uE%is)%{&lbo>FzvmXtgaH)4yb0;aSCz4yg zrbih&j|RU;5xV)f>6+f5K2U+y|)hpf= zK_PU!^ZxqTUa5svodo@?aDBQHn5>>6B-H6w;~3Sc?Vw%>azw?G()Tt@y}ItkntHf( z0bRSkKHM7{J6{(J5D{pz+!b*I>_aQ6d#ZbU%_5xg;B~8pRs)2QIyt6KO()iU7*E!{ z{68sZfg{=T+PL3JcfQTnCrKXMf5MfzW&2bMOZl_bq;in3y~}Cs8@j6Rz2)l4Ru+p{ z?(rnz+YhrK%#lbaK0BtNL)@fcqOu)7-ZQz1UzB5Twv;puhF+NM62<$r)a2*kO%iDW z`Mf~vX;^jWu_19n++G8l7Pb_&1u0}$NL_%&-OPUukT4Ggq~uY@E0e3;DYr8AcWM|_ z$xEoULf;Y+m(vTgqqJ_&vG-Yf*mU5Jm5MQqHMyvD{iyj;j6C|SZ$D$cu| zrsNf;EIhK5=tyPf43={r@j8yCcgr~9BtQm*)@liZiPoABkY3;Ayx=s5qE=L@hxuQ& z9Wrv#*oc_Jf)PIYsE$7`G?IUAWrRntZ62p@IiEIL^e(s=PPyqL&S2IrP*P&5`+n0ocCh}u zlW>(U%ttErA);WV+btt~c`XOw$PZ6M0TKaWlf!E>jIZXYo-&{)>xzOwGJKfmUUhW( zjX})B&`R4q>9H?4PVA_4!Z2M4)8ZUd&Q14pwHH0L`lHQbRP$MW$k>0~`b|_U6Qhi& ztgHtEI%$ollX{$_yk`a4WyD$_mf4J9BI=vV`Cx zgq{ew91J^}x0iwK%cW#XyXExU18F@GIy%&$r@3cl&YM}kAcIfY+uTHjU)94KIhw z6#{i3Uj!&~H^e*sQ7)cQcrGy}ZbJvj>H)S{sB8yuT4(fl1=k-sgt-eStyh)+L>O)2 z>`eSFcM`yW zVU5*WF47Y%AGuVt`Eie(YD2~q1vt2z4H$aV?hW5`2Y!)3_@DM?D=!Y*m0Z1lr^1dLQ>@MuT(BzCa8aSDT>w8aH zp5i*HhDKgd!rb+QX-lxS+CDV~VJBriGwWIJymxl01|E*gUFd0Bqxc2MC0bNiM~zXI<#MX1a#y-B)_XHyKS}ciCXIY@a0GC4zt-c2btP4s`c$%Hx#xhB-d$ zG5HW17{N$g4O18n^)&hXt6${t>aNtL9}6dT>7#ONsrm7TR99W>_%-NEWBN_yK1`Fi zC#~^_r1YCZpAlflRn!T`C>I_TxY3Cf5>O4`y_X-b@IaUt9UQEy=x5bcRCEykK60}> z{`i}Kj4x+}QN7w7F;*wK#_c?+B|a{NGUy%JpDwg)D_G~s4B??{-5_Nnr~R0fg9)#8 zOUE4~LU%Nsc_+y~<@UW{;ga(eS!S8sT}=c)JmOw>LqIsX`4S{IG*Em_|| z-Pu`6857snAsy?4rCbpOrWP>oVDwEZd|-=q8k-z9#MyIM1u1<6#iH1#MTd9j+RQt| z^*|Nt#M5P`Nuo`bB$$G7(e{pc> z(})sR#~@!80%jZNLciNp9_G~>nkp5=SqFqg1Yj2NGIz`R79Hyz5rc*)hEMP8GVrrySzkQ69-3ToTeo|+kJ zd4I`4wX!22uc*^jtMSMSjwC8Nei;Dve7JIa== z-ZlCpW$msAGg`9Uj*K`g+Ri%n?iZU5SLS(+_m8ctQv)8|9vk7TIYb? zH5u~3J(H*%=lk7<<74n=20JupQikm*)@4Sk4VAKz-7^bs5tx&R+)h8OE$NJ{(Tk3H zJy~gd_W2qCfi#)M`MRj*-=CQyWu`#$xQWSY4e~4NTui@DmBT9h>U`ntC0H?|pD&hJws8u%MkVai4fjv6BSIqJNO zOeljIR-*JU@$T$07mQr5q-5?iAm)LJht8!b8W45nuUpkCAkZT-Him1Fz4pr;Iu zH3tGH*F~0%+}bI8l+lCTj>v~JAh%e*M(X=iRT^4H)T8Q`h zXXq&NxQ zF-SAmJ9FkGll=58jKwiGwsQHLrnOyAW&x}JYGf=cm)=jz>7CRhw_fKfiAaSI@+)L) z$3l(?JsbL1{8r?YIt;0c!=sP!9E?F=RapWTx|V!@&!pB%&)vq0XY%LR_(;cZ1?JNI$6yZRJhiMZkF=}lyFJWG@gXN>3p`_z!q*`>>WD4g6A1;@be2lHnD2w zDZ$UfH@a0h(N0`XLAr1Iy**}${ql1yEZQ&yc9;z{!^QH0uyQxpf&5>f8*Tf*w-T}` zq7=ULZ7lzNq-eAu#tRK8%m5(>P8l9i;SRHY4a9$ji!V?YBhwY#(fXXv_1iC`<6Me( z;}a@ASAH#d4%qLe`nAD7-I<#WW-hiRnN;>)Cof$`4_}m_fZ^6dL89lxY1Pdw@o9@( z8-*7lF$YZVb>~Z|K-R_Iu3{VS56NK1g%*ifyU<_Yr^AGDBZ5F zUh144nz>*sgvWzQZokK?x@(}qJt{7S=SWX9644Dr;_|T*-Gv;8=bPdJ>7N$dmtcA$ zIOAQD{d`G42Y-`|0|U|rvudj@Cxc^;Tr>-k1Ml85!koR*r9Qks?tBP*ILjlnw0+7uTW8>#y_7-~$ryEZ@`kd^Ly_&3%`j zfni>=j_F3wZIMmWr_}Ky4m8wMg?W6s#^|<&?!{rFKp#Z1Qes(71xI zi$ciEcGwaU4JcQJoH5B#i`rMBw^Q521^<8pM0RXla(OZUFA8|CY&(LvHZ&W|w5cjz zlmSWEW=dSntFVwDS~mJerQ-YNlieDQOL-~8&mfWylNxmeSf27oWRin=(mUyQThbph zwDkDO*g)3YV`P8lkqL1j%KP~N#5WGYRED&yN>ds&HX_$m##VO~g#4R$iw~(?%{=5a zDIwqhA!fBYLF2uDoo>wuac0xfWgibIXiy@_B1z5g_8tinl zQp1tYV$$DDcP~%IDiFlU{9?Ftqwwb``=yFYyA=_7y`2gXeBH zeA05QjAK2!{EtYFsf+q1=fL(x=gwO6M1Te&8lB|L@M6QQu9rw$OHy!c=D;QEK+$*6 z4#eK;{pmPM9hR#(wi&;~eEsCR6z$`Nh4yAJ#Kbw==Y!03loPF5vg1K}(WH^f)b3Jt zIgabRJJw~I5&QlqP6}UFi&gimx-J=t{(@3~5Df_CwAj`x!K(-N1a7ir)=C%TF7mz^ z&eMA6+{TfA(QAg@+w&WS1f zxl%5=#!jzi9EFR(K}nc`eBQdEpnEM)u;RgCP9Ufn*n-6zTM|&q3RJ3kOD&G4jV}2& zml^3B*>a%nCI8+UUh{5ez#&b+wTUF_Ul|&(IF`;f!&j#u?a-zzl+W4U;U`!|c5^aI2B=qVCUGtaUJoe)<0wn%MYdXq5EbxL!f@kkl=>v2i*4>- z#n2EIN6UG7u2lX)F1h*|6okN)@xmndyC_!~NK5gXG&bQMlEseD7Eg^`j|y)iM-pO8)GN zuibM4FQE%g{a&%j1h3onyI7mmwd<7wV>u^bEUZp|-qDOkRbqLb{I(m~D0ZZ~g*54> z{jzN>g0?B_ng0QFx-~J*5vxbxBc`LN^zTOIb1sY3;*cZTmfAAM!mAcOycMPN3~_!q ziM{U6OqUp05>~yRnI@t#y;jR(=p(x}j=sm5cW(TtDT@Z92Rb#8!?Ua@1gykU+}KYYv2zT|^Y#U{X)oEyIzYmcOm|FY^c=5j1t2 z&KLN?^?mv^PEMDvA9T`EGMy8I@nRv*g?mxrP~L<)wnVusNZCL*AP?{xH^4%@4l%S0*R0bQjiQc!C`;9Z^euDSd?6g4 znj)A9d@=`*>IFZpj(>405*VP~gDJVO!Za~Dxt)Y5nJt%`9&MZVpdUc3IsLE?&LfO! zQ>3?<=|BMF+)*9i2Ul;DoIjc}uQ($|$e5BkKlb@ReeEs%^FV1qay6p~QUUlZ-1H03 z4>Is4?~T$!m)*}EFgn#?ZbA+N;n##}K9s4hi%mmh8`Zse3A zn(E>X1PQ&B_|k@UN-O|{_BgoxTn{h;Zw2@b27tl^YnsdnN=L>#7=ZG@15AT7F&@lK z{@?z+GOGm$KpGB}!$boNHv-^{IGt_FyZ~7SAZ#K4d-gAb2XJdysBkcHH1I_qS|?mc z*gL~qX!GSi9t21Y0pVaQ~l z;-kty!-@O{QOX3EfR!R%NJwJ#FbmZz59?~9Ckj||p${tw55On?KZ2$`_qbNnKNvfH To#_Dl?Gr^gHQ6$0laK!g(8(jb literal 0 HcmV?d00001 diff --git a/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-xl-with-icon-only-1-chromium-linux.png b/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-xl-with-icon-only-1-chromium-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..b18f92d606014d1bc96732ab4356ca82ce857021 GIT binary patch literal 3966 zcmcJSc|6oz+rXts((SH^sELL#ks`{-W6RQ5Mlz)k?y+QRtf>&g%uNw#FhgmwB_kn& ztl1_hZqbY_J7eD|`_6Nw=lSdX@BMt<_mBBqzd7ez*SW59o!>d%E8?1ofuI0PfQN@i z5Mzio<>BF71MiOfeBilw9KFE9b4U+^*17p`&usOV{CqvKjtoQF}w0lndTo`NJyvwZvghglIaF(jc5+ zE^II&V*Ea`{4fG?#E{iB9{4lQC7}JA(O&*!>y>p)?8ucEB!=1s6`%s4rmq8pY29f< zAf}G(!vGIG(t0VL77$m3v(v&fBR_uZhCKuo-E`&-vNW0dd9OQE~`-g!oP6%oU>k6={L}l}( zL)6QGmg}-4-m$^ByVh5Eaw;nZbr&kbt$g)nvn$lE_pKR9V}F|_(3cU4Wa74Ei+NmvHyGdM+BWBqf~F){pvfI zj2fn&cKukZS@R2;qcl}NSjO^r>j1%PZl{ z1(AZ$4ChDOKNNcPwHVYHM`;hUv|##R^Bv)Cuo5u2eHd|hrAdnp<#b^%SYNiy=PI)i zP35!FF|BJbz7X4przS-R0Y?P@o!6bkO1-@ zG>o+~0<$+qB6HYD+JhEBAAC+Lbdsi`jtNlpDcUV}4~TB0=<-1`v?lr8Vich>VCq{nxD*3`K|gvgFMIj^QeTYs1Huk z-5-ONWma2#Kf}fTIlDfEoy(Ygto5(MvxygC!?me=x}i%7=D9XsWp)>Co+Pf>7yJFJ zT)hi^c|!{goql7+Rd;vp{i(TxGlV_t(D-$bfm>w1-})+5m{aN{pF1)qqtfKtb2)n6 zrNHIG0~XPcs-Ig+Q?Tb*E(~a9jaS@f4+_bU633GXQ5K6c1?+o2o?GNiGs@4Cc6ypw zk|2S;;wmEKzeKl}_CzsvM0h(_{bUrKO1vvx$(EBHzIhHmyfZ9a71$9pqiL_P__hj4 zHdgSQd>bc$2@6}FbcsJ>I zIqdXsqUfCd+!A-El!)O2HswdEiC$~s#7d{LRK9jLJTN9LT8+9qopO7!#i?TVQQcx4 zDe$zJS#!H2`{aym6 zE_iYU$fc=%SP{R43`t&8|f;$V{O=(r%C#ag8@CYiNbEc1bj7_=t$yEkiT2 zCAW(SV#F_$_oYK;%yX)q&&{0_ITtAE)~@k4s_hKQ73cp|AUR+P&`^RmXnV9pcGG%w$4ZS zuijqSsH`lVS67)2!^Ga{DZ~re?zHUd4O+$G6V&}q$^>mW)<(nG>VK*}hWD>KL|J}# zc`7n`ENXW<+Biu~5dZGxoi?i?*HhbLjjAzz;=afBizy~_6^ttqSYkjC%fz>?jHDWz zbosvbP@ePmz3(jx!g{>QpDVkad_7CxSbrb#Q_!K(P40b8A;pCcl#`g$2qBr4m1)5f zYb8H59vi@e;xcb!H2b#tF>6#5*7^JbclR5=(xBCQ1xl&(RXi;bN5ug~QVA9uIO55t{7tD0-=$`(?B&w=r*tj_kbA~(z8CC#O!rC;}oJ^Q{fHwzprOMK;f zvZi6+{=|4?>!I_cpw%m{%wokO_@~PBVQ2P{t!}(EaUy7KWsq)v9gUyAcaAw@N_;S$ zq<#gS&c5BXpd3z47VP&P$;gAh0PWDD8<>TU*B*s+6pR=j;DLvlivu)6V zg6i79dSf?<)NP_VdXrJMAP}`Xut~e||SFUtN-Y`*pPCUf0tjX9}lu=!3 z^2@iY)}^PKHof!tLW%6899LRN=hTuqQsLOv2wx+DhX>B!QU!wdkc$`QkzH$Pi*XD)R%5!ny zs5tPA$*YdtVyP__Xn z*9{c(!B#F9PiEGUIh7G(?Ps1T{PLTm%LQGID~WqQE<8QDl%QzO%f7TJ2j5=B~d1Y&ny_kORMS+xc ziRWm@sI8+lX`8dV|H;-M9D%np?sk&%)67p+1JvQx9AB@H>>ssGmvG_j{lA6yS@jwie=djj`B6tr^&H($06$wNLw_U3yEs4Qo=t zWs_l|p42$f%TBrKypV7Q1xqCK+uk3Fkded>h$*|ltF{Le{HHA#jxDA66(ZBNou7vj zYz8JQTPdhtzC9i)CK~fdlYb4O&2z2lXG=J&nnPM>be`Ryu87>05cgz8O9*BNOrFX} zBJ$lIXN|UD6F&=KHCSi6z@>ezbiivp&96!b+*fIfV~Y01qTI{7otYQfaeFSVKGA2Q zS}v&oPUXYOhDwQwf2Bl5>B1t;&`I84LziwQZWU+PE@4^8|^>H3%&v=R4GWaPRV#v-TAOeB8bMza`^LDLsg~ zX$L@}>mBt`0QXSW027hJUze1KVrtS#O5(Z5as!avVQ67dz-A0e!>TfMmT@n^KG5|4p7(AmXWtpNwP;VXE9g zT&S?=ZMo{@1qVc#T@o*ET^<22BmA{IA_jFY&U6A2x~Kj0K8(~2^x^6&A%bjo$JQ~? z7*y#+4`Q&b)}q*9v^D@uN7p!AfYo;2ogXEeD^SC1(J?gl>^NQNHf49B{Xy&E2TGpt z`8U5m1sp8950h()8R7`*Np55fYm9f0Q3(4FpjV@w%|fDRX;4; z&YG;BD$l#IvGLHe)%ikfnF;tYxOiDv7XCUXP8WU6=rA*FpR8=J`6=exW*ie zEn<)SCVt%ar{-R8pQPWB6Vo9+xI3s2Q&+B?dgBWxmbkVm!e84$(2#Utumb-v39RTa z!?jy}ojo<-dT~Pd=p)AtTy0Zd>lJJ^$dC*`VMItH-4=aKz>&{KFkM?V^fzBGB}9S+ z4+)nLGLnruf`;@wS;S8CV%KbXj@uP9c$U&A?a9y(75>zv*Ae>HaY-`0kY`?3KUJ(1<2?3VQS7Q zO~!NSnhV`6FKF6LFKC7VKG5pjcr?TVnE8+THmE{ie;lRihlWci;kmPd$U)A)7#b)X zCRK!>+D#%{e?SmKXfRUng#ac^9}TRbA-PCI%+dxLvi;w#V$fv*l(}y4nWOV6!JZA% z4W(a~MN9x+xUD8=3C!gj-IjNv&MWOe literal 0 HcmV?d00001 diff --git a/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-xl-with-text-and-icon-1-chromium-linux.png b/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-xl-with-text-and-icon-1-chromium-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..6cd4fd3b2d1de99eb0c9de76cab9ecde5301cd81 GIT binary patch literal 13087 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 literal 0 HcmV?d00001 diff --git a/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-xs-with-active-segment-1-chromium-linux.png b/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-xs-with-active-segment-1-chromium-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..13618d5df0d0aa908ca04c9de18b210033bfab83 GIT binary patch literal 9488 zcmd6tg;$i%_xM4&Q$k9Rl$9lAkp+}c>6A|Cl#*OPkX}N%Ryy8@bayUGBM3^%k`mIL zzX#vH@8>`G#yNZT%$c3J&z*bk&NFxJD?&}>6$#-3LJSNH68YD%8WyFKX%!WSX=ThcvFl(xf4wZj!>&mPf^ ze(Jw6!F{kwiPYwnzwl))h<%RF8cZ&YKgLG)Z-Z5z80&8jt1R5?;oVQH!8QWK|2D{< zga-cYAMA}hmfBb zt6QzcE=e{XSOi2Op_SdIm}COAJb}vL(^hrmrP8U2AYU3xL*VQ;tZADW~1f@{{Cow?b;xB z0eLP593}F;(#No$Q#!mi4Pkb?4+-0Pi$4}`TPiO|tk03bPLCUEmQ5{lztJ0G;~wlwVi0*|{?C$Edk+cSVheIN5}&n= zvRkbo-hfrs4Xxl5qCv>2&sIty4a3A@?V%mlPspwHGNxwPiizRxh&Ww$oWLdn{ z@GUE-|0i0la_Q30|Jt>WY3M$!K8$mZQPgM}{z|%$xaA9$whgZ$YQ9g|bG|=unwQ(> z+Gx{H%;Hk%9><{90hw`=#Z;;=6JTwSj$mkx4dq*wLyhSSrG=X4O0YwovoFW2bePR- zn?zcva@%7rMpNYOZRGS#hL>^-q)(CI$Jj>NJfxWZs8V@^o$HE~*VsQPZnUlU?59U% zC1+HUE346L8e-}B2c9j(bH8TNqlyGurG~X9K49+{yqmf7tKAwdz{Ik%|3 z^2-S<)YAC5!N)wrjM0%^OJK&p>DaM2ZQR-f|GRFYC|Fx!M0xx0m-&D~!G-j}R>$+~ zCC@0>GI>f-Jr^=t{-2T(t`|HZ8j+mc1Zqv2>q=?vU@9(U%Z*;qbD3}K$IYMjbzzn& zra}yg<}ltzIPgb^$J(Tg2nJE(=eJiNhXf(8q1@QEc;ow_QYAzqV(E4vjO$Wi+%ci| zzu5;8WfoLGC==h{KmylOo!^K$=@a3QNub07zM`YwB=nOG<=!S?>8jDJl@KPCTbZfj zP&|Oh=8?uMldn1y7g)@Yo!$72Qn^D)oi|{G*^13 z<-h5Ff5;qbPKT=;sM(xhrkJ_XG@Jxwm{G+Je|dU%(ELuw%a$U~(?6DrQo~PeKLMOaK01M`A5Qqj_w9Fw1;bkyKmg4)CAy*?ezI=oU{W?&)Mb z#&W8@yvOkt!bnlFzGW}7Ypmle!+@{VikwUT$aw!UIND&rO3_bH)X)v*XWez`D#KGv zx|1r{+!GjVRwPPUOi8(?M-X$}ysq6~WNtv!hA^J^qZd>Kt5ifekjg8DKocYQYpH)^UUds#H z`WvuOD@Rh9F6T3(9;S3c+gwz7_GP2ml&9X)34Vw^ zq#p6l*ghYm^DIuO%OozNgGRFIcy!zY#m0UF4=>x6SuGauq#}Iv?eDfx+iMcqb;Iod zZ};oLp<9#a*@XUsK%MHVCf?M!a|1)l*+In|{@XW)6ih?{`sOFW*PofGFGf*LzL*kxjlpqDvu0+W#_R5jd+KPw_(RNoopaW8 ziWMX-X>vtsL}C|EEAWi)aCP*`i}J67KYGKKrOQSuDnal%9!b8|9Xsf|;q}1xEH0Cu z+6--69*}m@rc|(|c9Y0FGj|K#;P73s@P}>-^6`ruO3n;CYQMlbKV(@)0Tw;6*qevT zKrefC8y07B4AbAb=3*efTdDhRxbHB{VZwXUGM%DQh0`d+jFm<(1{I6ky=*(*4uD%? zU;%`93hS=3GLuJo6^XOr^~m!*Z$j&K<&!JRsOAYp165odVrJwgUU5^*WE841Wo=(r zM`&-HS}C38?^!^L^9h1#Y9OJ2bXuwvZb-&eCHPy)iJK@?0yT3WZ&8$T(A^n}?jL=q zdj&0+G@F~2NozVY>pf$N+-2@l=H(4{ePlGV(6_IFY8k3SN>pMN*-3og%|L~Y6Q0B? zq_pHvOCDi(OA_7NI!7;}_ExOPLHeD%FKCM!>jgc>M*Bu9AW6zT3q~LYZwU$A;XMvm z<8yk3g~~prlt5+a)JPFBLCX`nx)6t^mFWDv9K62jI>D2seOYUVLVm$aW^=`GXT(wS z)X_}0J3(2Y^9(dnu_U75`iTCNAI^E)(_OrcFh~`!lIXS`&7BJ1?XG-LBtL{|1&BFS_}1u$z$Cawy4F#U^=0Rz~to zWCp~Tkmwz+Y0yu0!%HdZwyURGlK50#R5_Qs;A!LKczNOt&XQj61=a1|CiaAy8HG%I zre3!fk2Nn$hJ$OKGLCM3LN*EL!T1!;I?Os&EL0kje|F2e|5=DrA_`}+xZJH5SdBiN zb|r^pYH=EVhgUlCHhQdjJQhE(TqmJbZ+66*H<^8vxXkVc{}sb9^w3(A>S^n6FWD)T z>*rVPidA|OyR#PQj41Z%t@}#TwSmPs^VByBg_q4qS{&ZGQ{_TwoWbVmj1SfHdRZx(x58akrg#Rpl=Q(#XrAG_>s){%05~n(hW)Au-dN?ww<*gR~AO4M}Nd3nuyb# zY3_K=UiDq^KM~-cIljrivz?=4bj5FeMT+z!TPaMsFWVT$=lE{LtJvJwYIZ4e>Vsx& z=Emu;xr{B2uY7^xf*K)<&j)B0PT=vC^Paiafe=1T>0(kgd}7WZt@*e0inT7HOX$OD zJ3|LSu6jpr7358J6v?jcO3YvfC#w=N9WPDLS7cWDsnNkpjk9l9D|!a>zVlwWLcmLf zUNyFoLl&ZPVdUWR$E*okM-$@6j4YUxo%6ql@=cXX@L57@d5k<6qN~nCS6i!ZwxPZkuMEpRtzq{FQ`@WinQ zE|0|}XxlFZ9zT|bY><;ARn@V7v@EHs9(vOoR9Ua?Wr90Bs>B(vKM0ivbA~dTes9V- zdyTIq{1xnWma#{=7R5BmIckyIdJej=p;z3!6cCNAojw|}xOy(ErQjlGl3ePWWtmvH zxHFq7D4w#-g}aEhplNGSKf@>r`c8;9h#xC;p-Rz$JMqMQlMD7)yk=8~ZcY`UXwR@P)fDCX`7yb!>F1*EX9JUIy&2emjA+ zz+R)PXLav4hp&o~SLJcz_UV-04@$#D^nW0VfUJv{uEtq~J?LYGR=r%F;nP3!G;wO!c+QO)JgMGN zGFQe>daTrEZq$EDo>o6u+L=KwGR z9db_IF9#-4F6-kuI%Lp4ytg#SgzOQJd>r|d%H0OR_1UmJ?DqnGayxjM89u73H+Me! z1jLX4*EE(zFP7D`H-Nt@+S!`co-VWYEL3y@-sXH^udIn?{K`e>_2;lcEXi>;A2Wsu ziKa6_fkNLyvua4wls4>SYLcTx!XT}5A|kt0`w!i>WvMa5cV!w|-vujgd>_w2GxsnL3y+pW z9wwvhxz>z7c#x3KKhi3hZ+Z()+dsz+3ur5FhRj17#5j+}OmwfhaGRtqx$Mjt&6bqK z$eM5XlknaO-v{#0njZ-J|5is5ghftYH(YHp=<4p|jecT;(iDY<+POgW@|(mSQ_dib z2VZ>|#T`^UInL`l)Dz}Y+PLza?%-Zi*(6#m@#Yv$@U>b{a0;b0+2Q7l*;iMuNz0a5 zhHk7}NXVYPthn;)KhcHt4lIrQax$AvHAEb+5#o6kTqFI`j5QRoN?KXSSWiNkfJ=jq z@9bFrwh-BSm~0-nMo=0O2NRm& zA3i}Z@SupEF3V|M2n1$C8bgJX!T>jiiq(&Y`4hL-1l>GxLXWt}^dC5SmpkY(&xqDEJ}(o!x zG#toH%BNEF^oW2WUjDGAm#wo$MT{(iT!h6xXnB=gUN=?EB(|GYtWOavHCkbG*}n-B z83f;Q(r~%v3S^7a^;2+qC=l9ioBu2uHmqrmVrW|DFEHQ|v{g#{BVJd1^=Qx1y@>x1 zYG-ntihta4)s^rM?U`YQ52MPP=Axig)`vUpD&`;FRD1gkK&x zUHOyIOd{AeKP@hmM8q#H%8KEEDh$crpG6gM!53gz8H$R!&92Pd<%Xj@)|qR}EL?=U zrsx_G*|4j0--DJ99|x=U+#BI26IiN4#&Txd-9VNa zr?p_(!*5}h)H`kA?~P{1I%d(7G}pf=X_)Z&(GhQH0;szqCb2ksHeE0V6>@FWggJI5 zGV_}ixXVccf1&yjYB-Y=qW_phDzCuQZGopTZ1$jg2+IwY=*BR|CgNur=GAeV5!lQW_Nl8TY>OMy^pJNCSvS zHKp0>3K`a4CnjM{tEyts>3efIUE_r@>3M3oRP&0bFH^2;m;huV8af0^cOS*L02gOJ zySG6Dfyh=mHg7P>^0--sGY_o9rlr}xg{I>Q_Z!-3wu@l*rkfYTfhSCAQq8Ca z|FG~eFn94WRu!LPEaY^@4-2NNy*$xWq_m~2>t5QW$g?`#BKG|Qp1S=3kH!*@vl_>z zYId~WzL3#+cFee(yS4gr?;?NpJZslF9%mwyjG}m5wo-NK%#I%XlS^nXotaoc0F$bG z9R_85YrSaB*aqw{?;Om}UwxW9CVW|Rp8BoiktFHiM6#>#vknS@E|sX!8i}kO55b0+ zxF0`odhl5w!3h%&$}QPcEYE!ep+Avz9I@&T)?`&aEOC^0gWqF3s%jPHq~v~NW4WkW z3z2}INV4oWi|mFlJ_yEY#((y-xR@rO+cJk&LJTuOfIDHc>qoOUH(G^+nisw}1F9#E2dXHhA}P zU)9B4WvOtA*93{#d!oNV1})JZzIzRj0fILa9^QLXKn}9jnO#r~TNy>j-S*`Xv%tW} zH)fQGZ=~7_k{`q)9i48F*A}yk_oKBA2O^KPg1dqTw1xaUc*E- zKY#y*j#0(blU}~9JhI?Bb3y)>WHqE42+{nF7%FFbZ&8FC_F{l8P?-(@`7EI!{e@3Inan&nF;1gsi%*Pr%$=*nVn zUDe_ao)>a+aE}qpRjujvI$C?*_!}#$)&(8WkL`y&6mb}nW}+MZV45tq$3W;=2HyyA z#ciR5JW^O!E+6YU{{ku8BZXipto<68;tn8(N68?io!@HBT_LB(_|7&9ZvP zVj+_xV>(RMu>EEK>yr|sOP5wknbpWRp~frH0{AcmY22nATPEZ9JU(kWK|%m#@;h#L z=Kd#xn#@{rUzb;M7&<qq8SBtmt@y4FNBb z7ctWw$LApTRkgF`lt$D$mwT$D=SFLlIiQZ=8)8Ez_~HP=Z{erdW$uJlH}Q?QokL*F}u;XoLvNOsMp9^IG4 zs4o)Qa_TE=Mp8KbUKmy_ANZqmJ#0q^-a8zRt%3yl3BX?(M%UVkQ~6h?b1xpcuk7En z(pzLe@XjLNPH0_6JUJF#;uneIMpbKQY|NiHYQOP&{bzN(Gcb0#ZR<&4+X>sZbpMp& zw?<&F_L+>N=chl-LD&$sis*Nv3%%-&&kmOUTpFs5PA}{`Ah8@1Vs?f9sP=FG@BD+ms4&VZdP>6_;6i=w zpMlGl!r*!2z0+`nYM}~L!HL~Fi^BAJU9lnT%6^lZ2zYf=xTtiv+%sAlGV9Dlm9SfX!!I+ex$i%4s4aM4yR=L=^0zHOBC-ZZOi_U zS7F(O$lUeAZt+nr!kW>~JyolEQ;g;R)+pXf3<6i9g@MXD4VOIJO>tt?S=Qf|!qU_w zGI@R)^)RV-B&poGv|CN5fGS=98M;sY`x8f9D*^p~KYp~(7^K5^9dP_WZd5QD2DW7S5 z2HpK0=DMgEA5Wa9!Cj!Hkdv6JhyQgw?B{UTVaXHFK&@@rJ-NKI8%mbJtTeegStq*%`c2MC&LU?t))rIUr3>d}|6Cj8Da z1IPhMCD}o9OP6)35?f=?_&dGfceY=Iv!1EX)YOsRvO9vU#!|IFgZbyqW7p~T9-Et{ zA>8!sCEw?Ub9MmPBbWB~7Tx?`Rq4Ojf^D11cd+6C#c93o`gygStjw`gv8dwm z*h7+%`|GuiAIXP1xh~0;WVc=`2;LC@{IBl}0=(;$cx+~805IV3N1-8p;$RzsL=EO zu+5hf7D(T#Tkt*Z#Cvxod|`P2j>vTZiuWbj@{DD0pk7{>C~ZHyPu%_7J{*Pa=u|yF z`p#Y2Ze~^|DDPzX762y@MEhQd?)L(3-wTlXZK|;V*2&)k$Y5?j1Qh;a!_=0~0k|b*2k0Izo*&5$a zN{553T$5|gL*c*Cbbs*&MxKIi`gwpMl<#!H)aPAt;U@+Z1h@l0?3uNi!X3!K6Y|59 z4);!F7bu{juqS{y{3R*C)~+;-@ybfyvjJGb%MkGQ82%WH`>)JgK$B7tefvbgZx0gh z0Rj~Q@30Nd0&0D?M4&d+jd53<`v0!}i%YD@VuqTT(nV^Q#=i!9N?v5`n#@6uE6<0; zn$BA)Lh_ei7`tN{fIBA=?*B3<^(R78O%7&4ov@!@V7u<-v(+Ar^v#dpzH-~nWF7n}(Kg2@AD3#jkZyn{J-)Bq=vFPUTj{0d89;?f|% zUMwkT+;vLB=z&7I9$@!7HfJfT|9=6^`42SIdy6Ny=fi8PlH?7LP8jlXDzatLra}J? D!5ZZ2 literal 0 HcmV?d00001 diff --git a/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-xs-with-icon-only-1-chromium-linux.png b/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-size-xs-with-icon-only-1-chromium-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..0f338ed6e90a64cfb43438070560e6bc2633b0e1 GIT binary patch literal 2919 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 j^UlB23I1Onx?l&d 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 Jjkrn3{{SyBP!j+E literal 0 HcmV?d00001 diff --git a/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-with-active-segment-1-chromium-linux.png b/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-with-active-segment-1-chromium-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..f9ea58ceee0a795dcb5af3ba42b1d34e9d1e179d GIT binary patch literal 5477 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 literal 0 HcmV?d00001 diff --git a/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-with-overflowing-labels-1-chromium-linux.png b/core/src/components/cat-segmented-control/__screenshots__/cat-segmented-control.screenshot.tsx/cat-segmented-control-screenshot-with-overflowing-labels-1-chromium-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..ef8fb4f9cfc1c80889629d30bb2fc63883b0c711 GIT binary patch literal 7638 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 FKLAwqMP2{^ literal 0 HcmV?d00001 From 0f792d5ea530cb6a670a95576d15e7a532e7535c Mon Sep 17 00:00:00 2001 From: Nora Simonow Date: Tue, 11 Aug 2026 15:54:35 +0200 Subject: [PATCH 13/42] feat(core): add segmented control tests, a11y labels and events --- core/src/components.d.ts | 44 +++++- .../components/cat-segment/cat-segment.scss | 5 +- .../cat-segment/cat-segment.spec.tsx | 36 +++++ .../components/cat-segment/cat-segment.tsx | 47 +++++- .../cat-segmented-control.e2e.tsx | 70 ++++++++ .../cat-segmented-control.spec.tsx | 149 +++++++++++++++++- .../cat-segmented-control.tsx | 26 ++- 7 files changed, 355 insertions(+), 22 deletions(-) diff --git a/core/src/components.d.ts b/core/src/components.d.ts index 94a8def1..f87332eb 100644 --- a/core/src/components.d.ts +++ b/core/src/components.d.ts @@ -12,6 +12,7 @@ import { CatDatepickerMode } from "./components/cat-datepicker/cat-datepicker.mo import { BaseOptions } from "flatpickr/dist/types/options"; import { InputType } from "./components/cat-input/input-type"; import { FormatDateMaskOptions, FormatTimeMaskOptions } from "./components/cat-input/cat-input"; +import { SegmentSize } from "./components/cat-segment/cat-segment"; import { CatSelectConnector, CatSelectValue, Item } from "./components/cat-select/cat-select"; import { Observable } from "rxjs"; import { TooltipPlacement } from "./components/cat-tooltip/cat-tooltip"; @@ -22,6 +23,7 @@ export { CatDatepickerMode } from "./components/cat-datepicker/cat-datepicker.mo export { BaseOptions } from "flatpickr/dist/types/options"; export { InputType } from "./components/cat-input/input-type"; export { FormatDateMaskOptions, FormatTimeMaskOptions } from "./components/cat-input/cat-input"; +export { SegmentSize } from "./components/cat-segment/cat-segment"; export { CatSelectConnector, CatSelectValue, Item } from "./components/cat-select/cat-select"; export { Observable } from "rxjs"; export { TooltipPlacement } from "./components/cat-tooltip/cat-tooltip"; @@ -1439,6 +1441,14 @@ export namespace Components { * A single segment within a cat-segmented-control. */ interface CatSegment { + /** + * Refers to the element that is controlled (e.g. displayed or hidden) by this segment. Typically, this is the ID of a tab panel that is shown when this segment is active. + */ + "a11yControls"?: string; + /** + * Adds accessible label for the button that is only shown for screen readers. Typically, this label text replaces the visible text on the button for users who use assistive technology. + */ + "a11yLabel"?: string; /** * @default false */ @@ -1461,7 +1471,7 @@ export namespace Components { */ "icon"?: string; /** - * When true, hides the label and shows the icon only. Requires icon. + * When true, hides the label and shows the icon only. Requires icon and a11y-label. * @default false */ "iconOnly": boolean; @@ -1472,7 +1482,7 @@ export namespace Components { /** * @default 'm' */ - "size": Size; + "size": SegmentSize; /** * Renders as data-test on the button element. */ @@ -2750,6 +2760,8 @@ declare global { }; interface HTMLCatSegmentElementEventMap { "catSegmentClick": string; + "catSegmentFocus": string; + "catSegmentBlur": string; } /** * A single segment within a cat-segmented-control. @@ -2770,6 +2782,8 @@ declare global { }; interface HTMLCatSegmentedControlElementEventMap { "catChange": string; + "catFocus": string; + "catBlur": string; } /** * A segmented control for selecting one option from a mutually-exclusive set. @@ -4467,6 +4481,14 @@ declare namespace LocalJSX { * A single segment within a cat-segmented-control. */ interface CatSegment { + /** + * Refers to the element that is controlled (e.g. displayed or hidden) by this segment. Typically, this is the ID of a tab panel that is shown when this segment is active. + */ + "a11yControls"?: string; + /** + * Adds accessible label for the button that is only shown for screen readers. Typically, this label text replaces the visible text on the button for users who use assistive technology. + */ + "a11yLabel"?: string; /** * @default false */ @@ -4481,7 +4503,7 @@ declare namespace LocalJSX { */ "icon"?: string; /** - * When true, hides the label and shows the icon only. Requires icon. + * When true, hides the label and shows the icon only. Requires icon and a11y-label. * @default false */ "iconOnly"?: boolean; @@ -4489,11 +4511,13 @@ declare namespace LocalJSX { * Spread onto the native button element. */ "nativeAttributes"?: { [key: string]: string }; + "onCatSegmentBlur"?: (event: CatSegmentCustomEvent) => void; "onCatSegmentClick"?: (event: CatSegmentCustomEvent) => void; + "onCatSegmentFocus"?: (event: CatSegmentCustomEvent) => void; /** * @default 'm' */ - "size"?: Size; + "size"?: SegmentSize; /** * Renders as data-test on the button element. */ @@ -4520,10 +4544,18 @@ declare namespace LocalJSX { * Spread onto the root element. */ "nativeAttributes"?: { [key: string]: string }; + /** + * Emitted when a segment loses focus. Payload is the segment value. + */ + "onCatBlur"?: (event: CatSegmentedControlCustomEvent) => void; /** * Emitted when the selected segment changes. Payload is the new segment value. */ "onCatChange"?: (event: CatSegmentedControlCustomEvent) => void; + /** + * Emitted when a segment gains focus. Payload is the segment value. + */ + "onCatFocus"?: (event: CatSegmentedControlCustomEvent) => void; /** * The size of the control, propagated to all child segments. * @default 'm' @@ -5587,7 +5619,9 @@ declare namespace LocalJSX { "disabled": boolean; "icon": string; "iconOnly": boolean; - "size": Size; + "a11yLabel": string; + "a11yControls": string; + "size": SegmentSize; "testId": string; "value": string; } diff --git a/core/src/components/cat-segment/cat-segment.scss b/core/src/components/cat-segment/cat-segment.scss index 089836b4..9e552ee3 100644 --- a/core/src/components/cat-segment/cat-segment.scss +++ b/core/src/components/cat-segment/cat-segment.scss @@ -10,9 +10,6 @@ $segment-heights: ( 'xs': 1.5rem ); -// TODO: a11y (create skill/add to review skill?) -// -> add a11y label (e.g. for icon only) - :host { display: contents; } @@ -78,7 +75,7 @@ $segment-heights: ( $-padding-h: $padding; .cat-segment-#{$size} { - width: 12.5em; // TODO wait for final size from UX + width: 12.5em; padding: $-padding-v $-padding-h; @include cat-body($fontSize, null); gap: $gap; diff --git a/core/src/components/cat-segment/cat-segment.spec.tsx b/core/src/components/cat-segment/cat-segment.spec.tsx index fa760911..370ccb36 100644 --- a/core/src/components/cat-segment/cat-segment.spec.tsx +++ b/core/src/components/cat-segment/cat-segment.spec.tsx @@ -158,4 +158,40 @@ describe('cat-segment', () => { await root.doBlur(); expect(blur).toHaveBeenCalledOnce(); }); + + it('emits focus and blur events with its value', async () => { + const { root } = await render(Day); + const focusListener = vi.fn(); + const blurListener = vi.fn(); + root.addEventListener('catSegmentFocus', focusListener); + root.addEventListener('catSegmentBlur', blurListener); + + root.shadowRoot?.querySelector('button')?.focus(); + expect(focusListener).toHaveBeenCalledOnce(); + expect(focusListener.mock.calls[0][0]).toMatchObject({ detail: 'day' }); + + root.shadowRoot?.querySelector('button')?.blur(); + expect(blurListener).toHaveBeenCalledOnce(); + expect(blurListener.mock.calls[0][0]).toMatchObject({ detail: 'day' }); + }); + + it('sets aria-label', async () => { + const { root } = await render( + + Day + + ); + const btn = root.shadowRoot?.querySelector('button'); + expect(btn?.getAttribute('aria-label')).toBe('Test aria label'); + }); + + it('sets aria-controls', async () => { + const { root } = await render( + + Day + + ); + const btn = root.shadowRoot?.querySelector('button'); + expect(btn?.getAttribute('aria-controls')).toBe('panel1'); + }); }); diff --git a/core/src/components/cat-segment/cat-segment.tsx b/core/src/components/cat-segment/cat-segment.tsx index cc8eabb4..db45c9e5 100644 --- a/core/src/components/cat-segment/cat-segment.tsx +++ b/core/src/components/cat-segment/cat-segment.tsx @@ -1,6 +1,6 @@ import { Component, Element, Event, EventEmitter, h, Host, Method, Prop } from '@stencil/core'; -type Size = 'xs' | 's' | 'm' | 'l' | 'xl'; +export type SegmentSize = 'xs' | 's' | 'm' | 'l' | 'xl'; /** * A single segment within a cat-segmented-control. @@ -15,7 +15,7 @@ type Size = 'xs' | 's' | 'm' | 'l' | 'xl'; export class CatSegment { private button?: HTMLButtonElement; - @Element() el!: HTMLElement; + @Element() hostElement!: HTMLElement; /** @internal Set by cat-segmented-control. Whether this segment is the active selection. */ @Prop({ mutable: true }) active = false; @@ -26,11 +26,24 @@ export class CatSegment { /** Icon name to display (same registry as cat-button). */ @Prop() icon?: string; - /** When true, hides the label and shows the icon only. Requires icon. */ + /** When true, hides the label and shows the icon only. Requires icon and a11y-label. */ @Prop() iconOnly = false; + /** + * Adds accessible label for the button that is only shown for screen + * readers. Typically, this label text replaces the visible text on the + * button for users who use assistive technology. + */ + @Prop({ attribute: 'a11y-label' }) a11yLabel?: string; + + /** + * Refers to the element that is controlled (e.g. displayed or hidden) by this segment. Typically, this is the ID of + * a tab panel that is shown when this segment is active. + */ + @Prop({ attribute: 'a11y-controls' }) a11yControls?: string; + /** @internal Set by cat-segmented-control. Size of the segment. */ - @Prop({ mutable: true }) size: Size = 'm'; + @Prop({ mutable: true }) size: SegmentSize = 'm'; /** Renders as data-test on the button element. */ @Prop() testId?: string; @@ -44,6 +57,12 @@ export class CatSegment { /** @internal Emitted when clicked. Consumed by cat-segmented-control. */ @Event() catSegmentClick!: EventEmitter; + /** @internal Emitted when segment receives focus. Consumed by cat-segmented-control. */ + @Event() catSegmentFocus!: EventEmitter; + + /** @internal Emitted when segment loses focus. Consumed by cat-segmented-control. */ + @Event() catSegmentBlur!: EventEmitter; + /** Sets focus on the segment button. */ @Method() async doFocus(): Promise { @@ -72,9 +91,13 @@ export class CatSegment { 'cat-segment-icon-only': this.iconOnly && showIcon }} disabled={this.disabled} + aria-label={this.a11yLabel} aria-pressed={String(this.active)} + aria-controls={this.a11yControls} data-test={this.testId} onClick={this.handleClick.bind(this)} + onFocus={this.handleFocus.bind(this)} + onBlur={this.handleBlur.bind(this)} {...this.nativeAttributes} > {showIcon && } @@ -88,8 +111,8 @@ export class CatSegment { ); } - private get iconSize(): Size { - const sizes: Record = { xs: 's', s: 's', m: 's', l: 'm', xl: 'l' }; + private get iconSize(): SegmentSize { + const sizes: Record = { xs: 's', s: 's', m: 's', l: 'm', xl: 'l' }; return sizes[this.size] ?? 's'; } @@ -98,4 +121,16 @@ export class CatSegment { this.catSegmentClick.emit(this.value); } } + + private handleFocus() { + if (!this.disabled) { + this.catSegmentFocus.emit(this.value); + } + } + + private handleBlur() { + if (!this.disabled) { + this.catSegmentBlur.emit(this.value); + } + } } diff --git a/core/src/components/cat-segmented-control/cat-segmented-control.e2e.tsx b/core/src/components/cat-segmented-control/cat-segmented-control.e2e.tsx index db8d44d5..054472b2 100644 --- a/core/src/components/cat-segmented-control/cat-segmented-control.e2e.tsx +++ b/core/src/components/cat-segmented-control/cat-segmented-control.e2e.tsx @@ -6,4 +6,74 @@ describe('cat-segmented-control', () => { const { root } = await render(); await expect.element(root).toHaveClass('hydrated'); }); + + it('moves focus with arrow keys and wraps at control boundaries', async () => { + const { root } = await render( + + Option 1 + Option 2 + Option 3 + + ); + const segments = Array.from(root.querySelectorAll('cat-segment')); + const buttons = segments.map(segment => segment.shadowRoot?.querySelector('button')); + + buttons[0]?.focus(); + root.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowRight', bubbles: true, composed: true })); + await Promise.resolve(); + expect(segments[1].shadowRoot?.activeElement).toBe(buttons[1]); + + root.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowLeft', bubbles: true, composed: true })); + await Promise.resolve(); + expect(segments[0].shadowRoot?.activeElement).toBe(buttons[0]); + + root.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowLeft', bubbles: true, composed: true })); + await Promise.resolve(); + expect(segments[2].shadowRoot?.activeElement).toBe(buttons[2]); + }); + + it('skips disabled segments during keyboard navigation', async () => { + const { root } = await render( + + Option 1 + + Option 2 + + Option 3 + + ); + const segments = Array.from(root.querySelectorAll('cat-segment')); + const buttons = segments.map(segment => segment.shadowRoot?.querySelector('button')); + + buttons[0]?.focus(); + root.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowRight', bubbles: true, composed: true })); + await Promise.resolve(); + + expect(segments[2].shadowRoot?.activeElement).toBe(buttons[2]); + expect(segments[1].shadowRoot?.activeElement).not.toBe(buttons[1]); + }); + + it('forwards focus and blur events from segments', async () => { + const { root } = await render( + + Option 1 + + ); + const events: { type: string; detail: string }[] = []; + root.addEventListener('catFocus', event => { + events.push({ type: 'focus', detail: (event as CustomEvent).detail }); + }); + root.addEventListener('catBlur', event => { + events.push({ type: 'blur', detail: (event as CustomEvent).detail }); + }); + const button = root.querySelector('cat-segment')?.shadowRoot?.querySelector('button'); + + button?.focus(); + button?.blur(); + + expect(events).toEqual([ + { type: 'focus', detail: 'one' }, + { type: 'blur', detail: 'one' } + ]); + }); }); diff --git a/core/src/components/cat-segmented-control/cat-segmented-control.spec.tsx b/core/src/components/cat-segmented-control/cat-segmented-control.spec.tsx index 8737913a..8e5c2213 100644 --- a/core/src/components/cat-segmented-control/cat-segmented-control.spec.tsx +++ b/core/src/components/cat-segmented-control/cat-segmented-control.spec.tsx @@ -1,13 +1,154 @@ -import { describe, it, expect } from 'vitest'; +import { describe, expect, it, vi } from 'vitest'; import { render } from '@stencil/vitest'; import { h } from '@stencil/core'; import './cat-segmented-control'; describe('cat-segmented-control', () => { it('renders', async () => { - const { root } = await render(); - await expect(root).toEqualLightHtml(` - + const { root } = await render( + + Option 1 + Option 2 + + ); + + expect(root).toEqualLightHtml(` + + + Option 1 + + + Option 2 + + `); }); + + it('emits an event when a segment selection is changed', async () => { + const { root, waitForChanges } = await render( + + Option 1 + + Option 2 + + + ); + + const changeListener = vi.fn(); + root.addEventListener('catChange', changeListener); + + const segment = root.querySelector('[testid="optionTwo"]'); + + expect(segment).not.toBeNull(); + segment?.dispatchEvent(new CustomEvent('catSegmentClick', { detail: 'two', bubbles: true, composed: true })); + await waitForChanges(); + + expect(changeListener).toHaveBeenCalledWith(expect.objectContaining({ detail: 'two' })); + }); + + it('emits the focused segment value', async () => { + const { root } = await render( + + Option 1 + + ); + const focusListener = vi.fn(); + root.addEventListener('catFocus', focusListener); + + root.querySelector('cat-segment')?.dispatchEvent( + new CustomEvent('catSegmentFocus', { + detail: 'one', + bubbles: true, + composed: true + }) + ); + + expect(focusListener).toHaveBeenCalledOnce(); + expect(focusListener.mock.calls[0][0]).toMatchObject({ detail: 'one' }); + }); + + it('emits the blurred segment value', async () => { + const { root } = await render( + + Option 1 + + ); + const blurListener = vi.fn(); + root.addEventListener('catBlur', blurListener); + + root.querySelector('cat-segment')?.dispatchEvent( + new CustomEvent('catSegmentBlur', { + detail: 'one', + bubbles: true, + composed: true + }) + ); + + expect(blurListener).toHaveBeenCalledOnce(); + expect(blurListener.mock.calls[0][0]).toMatchObject({ detail: 'one' }); + }); + + it('renders group accessibility and native attributes', async () => { + const { root, waitForChanges } = await render( + + Option 1 + + ); + + await waitForChanges(); + const group = root.shadowRoot?.querySelector('[role="group"]'); + + expect(group?.getAttribute('aria-label')).toBe('Test aria label'); + expect(group?.getAttribute('data-test')).toBe('test-id'); + expect(group?.getAttribute('data-context')).toBe('settings'); + }); + + it('propagates size to all segments', async () => { + const { root, waitForChanges } = await render( + + Option 1 + Option 2 + + ); + + await waitForChanges(); + + const sizes = Array.from(root.querySelectorAll('cat-segment')).map(segment => segment.size); + expect(sizes).toEqual(['xl', 'xl']); + }); + + it('disables all segments when control is disabled', async () => { + const { root, waitForChanges } = await render( + + Option 1 + Option 2 + + ); + + await waitForChanges(); + + expect( + Array.from(root.querySelectorAll('cat-segment')).every(segment => segment.disabled) + ).toBe(true); + }); + + it('does not emit selection change for focus or blur events', async () => { + const { root } = await render( + + Option 1 + + ); + const changeListener = vi.fn(); + root.addEventListener('catChange', changeListener); + const segment = root.querySelector('cat-segment'); + + segment?.dispatchEvent(new CustomEvent('catSegmentFocus', { detail: 'one', bubbles: true, composed: true })); + segment?.dispatchEvent(new CustomEvent('catSegmentBlur', { detail: 'one', bubbles: true, composed: true })); + + expect(changeListener).not.toHaveBeenCalled(); + }); }); diff --git a/core/src/components/cat-segmented-control/cat-segmented-control.tsx b/core/src/components/cat-segmented-control/cat-segmented-control.tsx index bc2c4e6d..b01724ed 100644 --- a/core/src/components/cat-segmented-control/cat-segmented-control.tsx +++ b/core/src/components/cat-segmented-control/cat-segmented-control.tsx @@ -14,7 +14,7 @@ export class CatSegmentedControl { private segments: HTMLCatSegmentElement[] = []; private mutationObserver?: MutationObserver; - @Element() el!: HTMLElement; + @Element() hostElement!: HTMLElement; /** * The value of the currently selected segment. @@ -51,6 +51,16 @@ export class CatSegmentedControl { */ @Event() catChange!: EventEmitter; + /** + * Emitted when a segment gains focus. Payload is the segment value. + */ + @Event() catFocus!: EventEmitter; + + /** + * Emitted when a segment loses focus. Payload is the segment value. + */ + @Event() catBlur!: EventEmitter; + @Watch('value') onValueChange(newValue?: string) { this.segments.forEach(s => (s.active = s.value === newValue)); @@ -73,7 +83,7 @@ export class CatSegmentedControl { this.sync(); } }); - this.mutationObserver.observe(this.el, { childList: true, attributes: true, subtree: true }); + this.mutationObserver.observe(this.hostElement, { childList: true, attributes: true, subtree: true }); } disconnectedCallback() { @@ -86,6 +96,16 @@ export class CatSegmentedControl { this.catChange.emit(this.value); } + @Listen('catSegmentFocus') + onSegmentFocus(event: CustomEvent) { + this.catFocus.emit(event.detail); + } + + @Listen('catSegmentBlur') + onSegmentBlur(event: CustomEvent) { + this.catBlur.emit(event.detail); + } + @Listen('keydown') onKeydown(event: KeyboardEvent) { const keys = ['ArrowRight', 'ArrowDown', 'ArrowLeft', 'ArrowUp']; @@ -117,7 +137,7 @@ export class CatSegmentedControl { } private sync() { - this.segments = Array.from(this.el.querySelectorAll('cat-segment')); + this.segments = Array.from(this.hostElement.querySelectorAll('cat-segment')); this.onValueChange(this.value); this.onSizeChange(this.size); this.onDisabledChange(this.disabled); From 0ea36a9b95ad905c161846fa568027d75062a2c2 Mon Sep 17 00:00:00 2001 From: Nora Simonow Date: Tue, 11 Aug 2026 15:54:35 +0200 Subject: [PATCH 14/42] feat(core): add segmented control tests, a11y labels and events --- core/src/components.d.ts | 44 +++++- .../components/cat-segment/cat-segment.scss | 5 +- .../cat-segment/cat-segment.spec.tsx | 36 +++++ .../components/cat-segment/cat-segment.tsx | 47 +++++- core/src/components/cat-segment/readme.md | 18 ++- .../cat-segmented-control.e2e.tsx | 70 ++++++++ .../cat-segmented-control.spec.tsx | 149 +++++++++++++++++- .../cat-segmented-control.tsx | 26 ++- .../cat-segmented-control/readme.md | 2 + 9 files changed, 367 insertions(+), 30 deletions(-) diff --git a/core/src/components.d.ts b/core/src/components.d.ts index 94a8def1..f87332eb 100644 --- a/core/src/components.d.ts +++ b/core/src/components.d.ts @@ -12,6 +12,7 @@ import { CatDatepickerMode } from "./components/cat-datepicker/cat-datepicker.mo import { BaseOptions } from "flatpickr/dist/types/options"; import { InputType } from "./components/cat-input/input-type"; import { FormatDateMaskOptions, FormatTimeMaskOptions } from "./components/cat-input/cat-input"; +import { SegmentSize } from "./components/cat-segment/cat-segment"; import { CatSelectConnector, CatSelectValue, Item } from "./components/cat-select/cat-select"; import { Observable } from "rxjs"; import { TooltipPlacement } from "./components/cat-tooltip/cat-tooltip"; @@ -22,6 +23,7 @@ export { CatDatepickerMode } from "./components/cat-datepicker/cat-datepicker.mo export { BaseOptions } from "flatpickr/dist/types/options"; export { InputType } from "./components/cat-input/input-type"; export { FormatDateMaskOptions, FormatTimeMaskOptions } from "./components/cat-input/cat-input"; +export { SegmentSize } from "./components/cat-segment/cat-segment"; export { CatSelectConnector, CatSelectValue, Item } from "./components/cat-select/cat-select"; export { Observable } from "rxjs"; export { TooltipPlacement } from "./components/cat-tooltip/cat-tooltip"; @@ -1439,6 +1441,14 @@ export namespace Components { * A single segment within a cat-segmented-control. */ interface CatSegment { + /** + * Refers to the element that is controlled (e.g. displayed or hidden) by this segment. Typically, this is the ID of a tab panel that is shown when this segment is active. + */ + "a11yControls"?: string; + /** + * Adds accessible label for the button that is only shown for screen readers. Typically, this label text replaces the visible text on the button for users who use assistive technology. + */ + "a11yLabel"?: string; /** * @default false */ @@ -1461,7 +1471,7 @@ export namespace Components { */ "icon"?: string; /** - * When true, hides the label and shows the icon only. Requires icon. + * When true, hides the label and shows the icon only. Requires icon and a11y-label. * @default false */ "iconOnly": boolean; @@ -1472,7 +1482,7 @@ export namespace Components { /** * @default 'm' */ - "size": Size; + "size": SegmentSize; /** * Renders as data-test on the button element. */ @@ -2750,6 +2760,8 @@ declare global { }; interface HTMLCatSegmentElementEventMap { "catSegmentClick": string; + "catSegmentFocus": string; + "catSegmentBlur": string; } /** * A single segment within a cat-segmented-control. @@ -2770,6 +2782,8 @@ declare global { }; interface HTMLCatSegmentedControlElementEventMap { "catChange": string; + "catFocus": string; + "catBlur": string; } /** * A segmented control for selecting one option from a mutually-exclusive set. @@ -4467,6 +4481,14 @@ declare namespace LocalJSX { * A single segment within a cat-segmented-control. */ interface CatSegment { + /** + * Refers to the element that is controlled (e.g. displayed or hidden) by this segment. Typically, this is the ID of a tab panel that is shown when this segment is active. + */ + "a11yControls"?: string; + /** + * Adds accessible label for the button that is only shown for screen readers. Typically, this label text replaces the visible text on the button for users who use assistive technology. + */ + "a11yLabel"?: string; /** * @default false */ @@ -4481,7 +4503,7 @@ declare namespace LocalJSX { */ "icon"?: string; /** - * When true, hides the label and shows the icon only. Requires icon. + * When true, hides the label and shows the icon only. Requires icon and a11y-label. * @default false */ "iconOnly"?: boolean; @@ -4489,11 +4511,13 @@ declare namespace LocalJSX { * Spread onto the native button element. */ "nativeAttributes"?: { [key: string]: string }; + "onCatSegmentBlur"?: (event: CatSegmentCustomEvent) => void; "onCatSegmentClick"?: (event: CatSegmentCustomEvent) => void; + "onCatSegmentFocus"?: (event: CatSegmentCustomEvent) => void; /** * @default 'm' */ - "size"?: Size; + "size"?: SegmentSize; /** * Renders as data-test on the button element. */ @@ -4520,10 +4544,18 @@ declare namespace LocalJSX { * Spread onto the root element. */ "nativeAttributes"?: { [key: string]: string }; + /** + * Emitted when a segment loses focus. Payload is the segment value. + */ + "onCatBlur"?: (event: CatSegmentedControlCustomEvent) => void; /** * Emitted when the selected segment changes. Payload is the new segment value. */ "onCatChange"?: (event: CatSegmentedControlCustomEvent) => void; + /** + * Emitted when a segment gains focus. Payload is the segment value. + */ + "onCatFocus"?: (event: CatSegmentedControlCustomEvent) => void; /** * The size of the control, propagated to all child segments. * @default 'm' @@ -5587,7 +5619,9 @@ declare namespace LocalJSX { "disabled": boolean; "icon": string; "iconOnly": boolean; - "size": Size; + "a11yLabel": string; + "a11yControls": string; + "size": SegmentSize; "testId": string; "value": string; } diff --git a/core/src/components/cat-segment/cat-segment.scss b/core/src/components/cat-segment/cat-segment.scss index 089836b4..9e552ee3 100644 --- a/core/src/components/cat-segment/cat-segment.scss +++ b/core/src/components/cat-segment/cat-segment.scss @@ -10,9 +10,6 @@ $segment-heights: ( 'xs': 1.5rem ); -// TODO: a11y (create skill/add to review skill?) -// -> add a11y label (e.g. for icon only) - :host { display: contents; } @@ -78,7 +75,7 @@ $segment-heights: ( $-padding-h: $padding; .cat-segment-#{$size} { - width: 12.5em; // TODO wait for final size from UX + width: 12.5em; padding: $-padding-v $-padding-h; @include cat-body($fontSize, null); gap: $gap; diff --git a/core/src/components/cat-segment/cat-segment.spec.tsx b/core/src/components/cat-segment/cat-segment.spec.tsx index fa760911..370ccb36 100644 --- a/core/src/components/cat-segment/cat-segment.spec.tsx +++ b/core/src/components/cat-segment/cat-segment.spec.tsx @@ -158,4 +158,40 @@ describe('cat-segment', () => { await root.doBlur(); expect(blur).toHaveBeenCalledOnce(); }); + + it('emits focus and blur events with its value', async () => { + const { root } = await render(Day); + const focusListener = vi.fn(); + const blurListener = vi.fn(); + root.addEventListener('catSegmentFocus', focusListener); + root.addEventListener('catSegmentBlur', blurListener); + + root.shadowRoot?.querySelector('button')?.focus(); + expect(focusListener).toHaveBeenCalledOnce(); + expect(focusListener.mock.calls[0][0]).toMatchObject({ detail: 'day' }); + + root.shadowRoot?.querySelector('button')?.blur(); + expect(blurListener).toHaveBeenCalledOnce(); + expect(blurListener.mock.calls[0][0]).toMatchObject({ detail: 'day' }); + }); + + it('sets aria-label', async () => { + const { root } = await render( + + Day + + ); + const btn = root.shadowRoot?.querySelector('button'); + expect(btn?.getAttribute('aria-label')).toBe('Test aria label'); + }); + + it('sets aria-controls', async () => { + const { root } = await render( + + Day + + ); + const btn = root.shadowRoot?.querySelector('button'); + expect(btn?.getAttribute('aria-controls')).toBe('panel1'); + }); }); diff --git a/core/src/components/cat-segment/cat-segment.tsx b/core/src/components/cat-segment/cat-segment.tsx index cc8eabb4..db45c9e5 100644 --- a/core/src/components/cat-segment/cat-segment.tsx +++ b/core/src/components/cat-segment/cat-segment.tsx @@ -1,6 +1,6 @@ import { Component, Element, Event, EventEmitter, h, Host, Method, Prop } from '@stencil/core'; -type Size = 'xs' | 's' | 'm' | 'l' | 'xl'; +export type SegmentSize = 'xs' | 's' | 'm' | 'l' | 'xl'; /** * A single segment within a cat-segmented-control. @@ -15,7 +15,7 @@ type Size = 'xs' | 's' | 'm' | 'l' | 'xl'; export class CatSegment { private button?: HTMLButtonElement; - @Element() el!: HTMLElement; + @Element() hostElement!: HTMLElement; /** @internal Set by cat-segmented-control. Whether this segment is the active selection. */ @Prop({ mutable: true }) active = false; @@ -26,11 +26,24 @@ export class CatSegment { /** Icon name to display (same registry as cat-button). */ @Prop() icon?: string; - /** When true, hides the label and shows the icon only. Requires icon. */ + /** When true, hides the label and shows the icon only. Requires icon and a11y-label. */ @Prop() iconOnly = false; + /** + * Adds accessible label for the button that is only shown for screen + * readers. Typically, this label text replaces the visible text on the + * button for users who use assistive technology. + */ + @Prop({ attribute: 'a11y-label' }) a11yLabel?: string; + + /** + * Refers to the element that is controlled (e.g. displayed or hidden) by this segment. Typically, this is the ID of + * a tab panel that is shown when this segment is active. + */ + @Prop({ attribute: 'a11y-controls' }) a11yControls?: string; + /** @internal Set by cat-segmented-control. Size of the segment. */ - @Prop({ mutable: true }) size: Size = 'm'; + @Prop({ mutable: true }) size: SegmentSize = 'm'; /** Renders as data-test on the button element. */ @Prop() testId?: string; @@ -44,6 +57,12 @@ export class CatSegment { /** @internal Emitted when clicked. Consumed by cat-segmented-control. */ @Event() catSegmentClick!: EventEmitter; + /** @internal Emitted when segment receives focus. Consumed by cat-segmented-control. */ + @Event() catSegmentFocus!: EventEmitter; + + /** @internal Emitted when segment loses focus. Consumed by cat-segmented-control. */ + @Event() catSegmentBlur!: EventEmitter; + /** Sets focus on the segment button. */ @Method() async doFocus(): Promise { @@ -72,9 +91,13 @@ export class CatSegment { 'cat-segment-icon-only': this.iconOnly && showIcon }} disabled={this.disabled} + aria-label={this.a11yLabel} aria-pressed={String(this.active)} + aria-controls={this.a11yControls} data-test={this.testId} onClick={this.handleClick.bind(this)} + onFocus={this.handleFocus.bind(this)} + onBlur={this.handleBlur.bind(this)} {...this.nativeAttributes} > {showIcon && } @@ -88,8 +111,8 @@ export class CatSegment { ); } - private get iconSize(): Size { - const sizes: Record = { xs: 's', s: 's', m: 's', l: 'm', xl: 'l' }; + private get iconSize(): SegmentSize { + const sizes: Record = { xs: 's', s: 's', m: 's', l: 'm', xl: 'l' }; return sizes[this.size] ?? 's'; } @@ -98,4 +121,16 @@ export class CatSegment { this.catSegmentClick.emit(this.value); } } + + private handleFocus() { + if (!this.disabled) { + this.catSegmentFocus.emit(this.value); + } + } + + private handleBlur() { + if (!this.disabled) { + this.catSegmentBlur.emit(this.value); + } + } } diff --git a/core/src/components/cat-segment/readme.md b/core/src/components/cat-segment/readme.md index b0a7cc9d..cf7f8df3 100644 --- a/core/src/components/cat-segment/readme.md +++ b/core/src/components/cat-segment/readme.md @@ -11,14 +11,16 @@ A single segment within a cat-segmented-control. ## Properties -| Property | Attribute | Description | Type | Default | -| -------------------- | ----------- | ------------------------------------------------------------------ | ----------------------------------------- | ----------- | -| `disabled` | `disabled` | Whether this segment is disabled. | `boolean` | `false` | -| `icon` | `icon` | Icon name to display (same registry as cat-button). | `string \| undefined` | `undefined` | -| `iconOnly` | `icon-only` | When true, hides the label and shows the icon only. Requires icon. | `boolean` | `false` | -| `nativeAttributes` | -- | Spread onto the native button element. | `undefined \| { [key: string]: string; }` | `undefined` | -| `testId` | `test-id` | Renders as data-test on the button element. | `string \| undefined` | `undefined` | -| `value` _(required)_ | `value` | The unique value of this segment within the group. | `string` | `undefined` | +| Property | Attribute | Description | Type | Default | +| -------------------- | --------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------- | ----------- | +| `a11yControls` | `a11y-controls` | Refers to the element that is controlled (e.g. displayed or hidden) by this segment. Typically, this is the ID of a tab panel that is shown when this segment is active. | `string \| undefined` | `undefined` | +| `a11yLabel` | `a11y-label` | Adds accessible label for the button that is only shown for screen readers. Typically, this label text replaces the visible text on the button for users who use assistive technology. | `string \| undefined` | `undefined` | +| `disabled` | `disabled` | Whether this segment is disabled. | `boolean` | `false` | +| `icon` | `icon` | Icon name to display (same registry as cat-button). | `string \| undefined` | `undefined` | +| `iconOnly` | `icon-only` | When true, hides the label and shows the icon only. Requires icon and a11y-label. | `boolean` | `false` | +| `nativeAttributes` | -- | Spread onto the native button element. | `undefined \| { [key: string]: string; }` | `undefined` | +| `testId` | `test-id` | Renders as data-test on the button element. | `string \| undefined` | `undefined` | +| `value` _(required)_ | `value` | The unique value of this segment within the group. | `string` | `undefined` | ## Methods diff --git a/core/src/components/cat-segmented-control/cat-segmented-control.e2e.tsx b/core/src/components/cat-segmented-control/cat-segmented-control.e2e.tsx index db8d44d5..054472b2 100644 --- a/core/src/components/cat-segmented-control/cat-segmented-control.e2e.tsx +++ b/core/src/components/cat-segmented-control/cat-segmented-control.e2e.tsx @@ -6,4 +6,74 @@ describe('cat-segmented-control', () => { const { root } = await render(); await expect.element(root).toHaveClass('hydrated'); }); + + it('moves focus with arrow keys and wraps at control boundaries', async () => { + const { root } = await render( + + Option 1 + Option 2 + Option 3 + + ); + const segments = Array.from(root.querySelectorAll('cat-segment')); + const buttons = segments.map(segment => segment.shadowRoot?.querySelector('button')); + + buttons[0]?.focus(); + root.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowRight', bubbles: true, composed: true })); + await Promise.resolve(); + expect(segments[1].shadowRoot?.activeElement).toBe(buttons[1]); + + root.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowLeft', bubbles: true, composed: true })); + await Promise.resolve(); + expect(segments[0].shadowRoot?.activeElement).toBe(buttons[0]); + + root.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowLeft', bubbles: true, composed: true })); + await Promise.resolve(); + expect(segments[2].shadowRoot?.activeElement).toBe(buttons[2]); + }); + + it('skips disabled segments during keyboard navigation', async () => { + const { root } = await render( + + Option 1 + + Option 2 + + Option 3 + + ); + const segments = Array.from(root.querySelectorAll('cat-segment')); + const buttons = segments.map(segment => segment.shadowRoot?.querySelector('button')); + + buttons[0]?.focus(); + root.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowRight', bubbles: true, composed: true })); + await Promise.resolve(); + + expect(segments[2].shadowRoot?.activeElement).toBe(buttons[2]); + expect(segments[1].shadowRoot?.activeElement).not.toBe(buttons[1]); + }); + + it('forwards focus and blur events from segments', async () => { + const { root } = await render( + + Option 1 + + ); + const events: { type: string; detail: string }[] = []; + root.addEventListener('catFocus', event => { + events.push({ type: 'focus', detail: (event as CustomEvent).detail }); + }); + root.addEventListener('catBlur', event => { + events.push({ type: 'blur', detail: (event as CustomEvent).detail }); + }); + const button = root.querySelector('cat-segment')?.shadowRoot?.querySelector('button'); + + button?.focus(); + button?.blur(); + + expect(events).toEqual([ + { type: 'focus', detail: 'one' }, + { type: 'blur', detail: 'one' } + ]); + }); }); diff --git a/core/src/components/cat-segmented-control/cat-segmented-control.spec.tsx b/core/src/components/cat-segmented-control/cat-segmented-control.spec.tsx index 8737913a..8e5c2213 100644 --- a/core/src/components/cat-segmented-control/cat-segmented-control.spec.tsx +++ b/core/src/components/cat-segmented-control/cat-segmented-control.spec.tsx @@ -1,13 +1,154 @@ -import { describe, it, expect } from 'vitest'; +import { describe, expect, it, vi } from 'vitest'; import { render } from '@stencil/vitest'; import { h } from '@stencil/core'; import './cat-segmented-control'; describe('cat-segmented-control', () => { it('renders', async () => { - const { root } = await render(); - await expect(root).toEqualLightHtml(` - + const { root } = await render( + + Option 1 + Option 2 + + ); + + expect(root).toEqualLightHtml(` + + + Option 1 + + + Option 2 + + `); }); + + it('emits an event when a segment selection is changed', async () => { + const { root, waitForChanges } = await render( + + Option 1 + + Option 2 + + + ); + + const changeListener = vi.fn(); + root.addEventListener('catChange', changeListener); + + const segment = root.querySelector('[testid="optionTwo"]'); + + expect(segment).not.toBeNull(); + segment?.dispatchEvent(new CustomEvent('catSegmentClick', { detail: 'two', bubbles: true, composed: true })); + await waitForChanges(); + + expect(changeListener).toHaveBeenCalledWith(expect.objectContaining({ detail: 'two' })); + }); + + it('emits the focused segment value', async () => { + const { root } = await render( + + Option 1 + + ); + const focusListener = vi.fn(); + root.addEventListener('catFocus', focusListener); + + root.querySelector('cat-segment')?.dispatchEvent( + new CustomEvent('catSegmentFocus', { + detail: 'one', + bubbles: true, + composed: true + }) + ); + + expect(focusListener).toHaveBeenCalledOnce(); + expect(focusListener.mock.calls[0][0]).toMatchObject({ detail: 'one' }); + }); + + it('emits the blurred segment value', async () => { + const { root } = await render( + + Option 1 + + ); + const blurListener = vi.fn(); + root.addEventListener('catBlur', blurListener); + + root.querySelector('cat-segment')?.dispatchEvent( + new CustomEvent('catSegmentBlur', { + detail: 'one', + bubbles: true, + composed: true + }) + ); + + expect(blurListener).toHaveBeenCalledOnce(); + expect(blurListener.mock.calls[0][0]).toMatchObject({ detail: 'one' }); + }); + + it('renders group accessibility and native attributes', async () => { + const { root, waitForChanges } = await render( + + Option 1 + + ); + + await waitForChanges(); + const group = root.shadowRoot?.querySelector('[role="group"]'); + + expect(group?.getAttribute('aria-label')).toBe('Test aria label'); + expect(group?.getAttribute('data-test')).toBe('test-id'); + expect(group?.getAttribute('data-context')).toBe('settings'); + }); + + it('propagates size to all segments', async () => { + const { root, waitForChanges } = await render( + + Option 1 + Option 2 + + ); + + await waitForChanges(); + + const sizes = Array.from(root.querySelectorAll('cat-segment')).map(segment => segment.size); + expect(sizes).toEqual(['xl', 'xl']); + }); + + it('disables all segments when control is disabled', async () => { + const { root, waitForChanges } = await render( + + Option 1 + Option 2 + + ); + + await waitForChanges(); + + expect( + Array.from(root.querySelectorAll('cat-segment')).every(segment => segment.disabled) + ).toBe(true); + }); + + it('does not emit selection change for focus or blur events', async () => { + const { root } = await render( + + Option 1 + + ); + const changeListener = vi.fn(); + root.addEventListener('catChange', changeListener); + const segment = root.querySelector('cat-segment'); + + segment?.dispatchEvent(new CustomEvent('catSegmentFocus', { detail: 'one', bubbles: true, composed: true })); + segment?.dispatchEvent(new CustomEvent('catSegmentBlur', { detail: 'one', bubbles: true, composed: true })); + + expect(changeListener).not.toHaveBeenCalled(); + }); }); diff --git a/core/src/components/cat-segmented-control/cat-segmented-control.tsx b/core/src/components/cat-segmented-control/cat-segmented-control.tsx index bc2c4e6d..b01724ed 100644 --- a/core/src/components/cat-segmented-control/cat-segmented-control.tsx +++ b/core/src/components/cat-segmented-control/cat-segmented-control.tsx @@ -14,7 +14,7 @@ export class CatSegmentedControl { private segments: HTMLCatSegmentElement[] = []; private mutationObserver?: MutationObserver; - @Element() el!: HTMLElement; + @Element() hostElement!: HTMLElement; /** * The value of the currently selected segment. @@ -51,6 +51,16 @@ export class CatSegmentedControl { */ @Event() catChange!: EventEmitter; + /** + * Emitted when a segment gains focus. Payload is the segment value. + */ + @Event() catFocus!: EventEmitter; + + /** + * Emitted when a segment loses focus. Payload is the segment value. + */ + @Event() catBlur!: EventEmitter; + @Watch('value') onValueChange(newValue?: string) { this.segments.forEach(s => (s.active = s.value === newValue)); @@ -73,7 +83,7 @@ export class CatSegmentedControl { this.sync(); } }); - this.mutationObserver.observe(this.el, { childList: true, attributes: true, subtree: true }); + this.mutationObserver.observe(this.hostElement, { childList: true, attributes: true, subtree: true }); } disconnectedCallback() { @@ -86,6 +96,16 @@ export class CatSegmentedControl { this.catChange.emit(this.value); } + @Listen('catSegmentFocus') + onSegmentFocus(event: CustomEvent) { + this.catFocus.emit(event.detail); + } + + @Listen('catSegmentBlur') + onSegmentBlur(event: CustomEvent) { + this.catBlur.emit(event.detail); + } + @Listen('keydown') onKeydown(event: KeyboardEvent) { const keys = ['ArrowRight', 'ArrowDown', 'ArrowLeft', 'ArrowUp']; @@ -117,7 +137,7 @@ export class CatSegmentedControl { } private sync() { - this.segments = Array.from(this.el.querySelectorAll('cat-segment')); + this.segments = Array.from(this.hostElement.querySelectorAll('cat-segment')); this.onValueChange(this.value); this.onSizeChange(this.size); this.onDisabledChange(this.disabled); diff --git a/core/src/components/cat-segmented-control/readme.md b/core/src/components/cat-segmented-control/readme.md index a5e2d444..ef333274 100644 --- a/core/src/components/cat-segmented-control/readme.md +++ b/core/src/components/cat-segmented-control/readme.md @@ -25,7 +25,9 @@ A segmented control for selecting one option from a mutually-exclusive set. | Event | Description | Type | | ----------- | ---------------------------------------------------------------------------- | --------------------- | +| `catBlur` | Emitted when a segment loses focus. Payload is the segment value. | `CustomEvent` | | `catChange` | Emitted when the selected segment changes. Payload is the new segment value. | `CustomEvent` | +| `catFocus` | Emitted when a segment gains focus. Payload is the segment value. | `CustomEvent` | ## Shadow Parts From 12876dea4e2cb6d78c7e39c07f0f51dd31b52e6e Mon Sep 17 00:00:00 2001 From: Nora Simonow Date: Wed, 12 Aug 2026 11:56:02 +0200 Subject: [PATCH 15/42] chore: update readme --- README.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 6b029d7c..c0d6793b 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,17 @@ Steps: 1. Make changes; 2. Run `pnpm build`; -Extra steps for testing the changes in angular package: +`pnpm run build:core` regenerates Angular and React binding files through +Stencil output targets. Review and commit generated changes with component: + +- `angular/projects/catalyst/src/lib/directives/proxies.ts` +- `react/src/components/stencil-generated/index.ts` + +`pnpm run build:angular` and `pnpm run build:react` validate and compile those +bindings. CI does not commit generated binding changes. Do not edit generated +files manually. + +Extra steps for testing the changes in Angular package: 1. Run `pnpm install` again; 2. For - [angular](angular/projects/catalyst) Go to `/angular/dist/catalyst`; From 9b01c9edf096da965e5cf53773c8c618614d0278 Mon Sep 17 00:00:00 2001 From: Nora Simonow Date: Wed, 12 Aug 2026 11:56:39 +0200 Subject: [PATCH 16/42] feat(core): add new components to catalyst.module.ts --- angular/projects/catalyst/src/lib/catalyst.module.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/angular/projects/catalyst/src/lib/catalyst.module.ts b/angular/projects/catalyst/src/lib/catalyst.module.ts index 771613ac..5c518edc 100644 --- a/angular/projects/catalyst/src/lib/catalyst.module.ts +++ b/angular/projects/catalyst/src/lib/catalyst.module.ts @@ -36,6 +36,8 @@ const CatComponents = [ Components.CatRadio, Components.CatRadioGroup, Components.CatScrollable, + Components.CatSegment, + Components.CatSegmentedControl, Components.CatSelect, Components.CatSkeleton, Components.CatSpinner, From e503c4918d9734efdbb42683d2f8669012e60d45 Mon Sep 17 00:00:00 2001 From: Nora Simonow Date: Wed, 12 Aug 2026 12:46:36 +0200 Subject: [PATCH 17/42] chore: improve skill --- .../catalyst-component-development/SKILL.md | 55 +++++++++++++++---- 1 file changed, 45 insertions(+), 10 deletions(-) diff --git a/.agents/skills/catalyst-component-development/SKILL.md b/.agents/skills/catalyst-component-development/SKILL.md index 4a81b6bc..c92cc88c 100644 --- a/.agents/skills/catalyst-component-development/SKILL.md +++ b/.agents/skills/catalyst-component-development/SKILL.md @@ -146,23 +146,54 @@ Run `pnpm --filter @haiilo/catalyst test` and confirm all three files pass. --- -## Step 6 — Verify Angular bindings +## Step 6 — Register Angular exports -Run both builds regardless of whether you think the contract changed: +Stencil generates Angular proxies but does not register them in +`CatalystModule`. Add every new public component to `CatComponents` in +`angular/projects/catalyst/src/lib/catalyst.module.ts`; composed components +need entries for the parent and each public child. + +**Completion criterion:** every new public component has a corresponding +`Components.Cat` entry in `CatComponents`, which the existing spreads +include in both `declarations` and `exports`. + +## Step 7 — Verify Angular bindings + +Run both builds: 1. `pnpm --filter @haiilo/catalyst build` -2. `pnpm --filter @haiilo/catalyst-angular build` +2. `pnpm run build:angular` -Inspect `angular/projects/catalyst-components/src/directives/` — any new or -modified props and events must appear in the generated directive. Never edit -files in `angular/` by hand. For breaking change rules see [CONTRACT.md](CONTRACT.md). +Inspect the generated directive at +`angular/projects/catalyst/src/lib/directives/proxies.ts`; new or modified +props and events must appear there. Never edit generated files. See +[CONTRACT.md](CONTRACT.md) for breaking changes. -**Completion criterion:** both builds exit 0. Generated directive reflects the -current component contract. +`pnpm run build:core` generates this Angular proxy and the React proxy at +`react/src/components/stencil-generated/index.ts`. Review both files and commit +their changes with the component. CI regenerates them for validation but does +not commit them. Never discard generated binding changes or edit them manually. + +**Completion criterion:** both builds exit 0. Generated Angular directive and +React proxy reflect the current component contract, and their tracked changes +are included in the component change. --- -## Step 7 — Done checklist +## Step 8 — Verify React bindings + +After the core build, verify every new public component has a `Cat` export +in the generated +`react/src/components/stencil-generated/index.ts`, then run: + +```bash +pnpm run build:react +``` + +**Completion criterion:** React proxy exports exist for every new public +component and `pnpm run build:react` exits 0. + +## Step 9 — Done checklist Before considering the work complete, verify every item: @@ -173,6 +204,10 @@ Before considering the work complete, verify every item: - [ ] No hardcoded color, radius, or transition value in SCSS — all via tokens - [ ] `:host([hidden]) { display: none; }` present in SCSS - [ ] Three test files pass (`pnpm --filter @haiilo/catalyst test`) -- [ ] Angular build passes (`pnpm --filter @haiilo/catalyst-angular build`) +- [ ] Every new public component is registered in `CatComponents` in `CatalystModule` +- [ ] Angular build passes (`pnpm run build:angular`) +- [ ] React proxy export exists for every new public component +- [ ] React build passes (`pnpm run build:react`) +- [ ] Generated Angular and React binding changes are reviewed and committed - [ ] No `as any`, `@ts-ignore`, or empty catch blocks introduced - [ ] `readme.md` is present (content auto-generated on build; placeholder is fine) From bfc7a9bdb5d26b84878d307011d1c136c427fde0 Mon Sep 17 00:00:00 2001 From: Nora Simonow Date: Wed, 12 Aug 2026 12:53:53 +0200 Subject: [PATCH 18/42] feat(core): generate proxies.ts with new components --- .../catalyst/src/lib/directives/proxies.ts | 77 +++++++++++++++++++ 1 file changed, 77 insertions(+) diff --git a/angular/projects/catalyst/src/lib/directives/proxies.ts b/angular/projects/catalyst/src/lib/directives/proxies.ts index 9b6c9364..9f4aae4b 100644 --- a/angular/projects/catalyst/src/lib/directives/proxies.ts +++ b/angular/projects/catalyst/src/lib/directives/proxies.ts @@ -1193,6 +1193,83 @@ export declare interface CatScrollable extends Components.CatScrollable { scrolledBottom: EventEmitter>; } +@ProxyCmp({ + inputs: ['a11yControls', 'a11yLabel', 'disabled', 'icon', 'iconOnly', 'nativeAttributes', 'testId', 'value'], + methods: ['doFocus', 'doBlur'] +}) +@Component({ + selector: 'cat-segment', + changeDetection: ChangeDetectionStrategy.OnPush, + template: '', + // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property + inputs: [ + 'a11yControls', + 'a11yLabel', + 'disabled', + 'icon', + 'iconOnly', + 'nativeAttributes', + 'testId', + { name: 'value', required: true } + ], + standalone: false +}) +export class CatSegment { + protected el: HTMLCatSegmentElement; + constructor( + c: ChangeDetectorRef, + r: ElementRef, + protected z: NgZone + ) { + c.detach(); + this.el = r.nativeElement; + } +} + +export declare interface CatSegment extends Components.CatSegment {} + +@ProxyCmp({ + inputs: ['a11yLabel', 'disabled', 'nativeAttributes', 'size', 'testId', 'value'] +}) +@Component({ + selector: 'cat-segmented-control', + changeDetection: ChangeDetectionStrategy.OnPush, + template: '', + // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property + inputs: ['a11yLabel', 'disabled', 'nativeAttributes', 'size', 'testId', 'value'], + outputs: ['catChange', 'catFocus', 'catBlur'], + standalone: false +}) +export class CatSegmentedControl { + protected el: HTMLCatSegmentedControlElement; + @Output() catChange = new EventEmitter>(); + @Output() catFocus = new EventEmitter>(); + @Output() catBlur = new EventEmitter>(); + constructor( + c: ChangeDetectorRef, + r: ElementRef, + protected z: NgZone + ) { + c.detach(); + this.el = r.nativeElement; + } +} + +export declare interface CatSegmentedControl extends Components.CatSegmentedControl { + /** + * Emitted when the selected segment changes. Payload is the new segment value. + */ + catChange: EventEmitter>; + /** + * Emitted when a segment gains focus. Payload is the segment value. + */ + catFocus: EventEmitter>; + /** + * Emitted when a segment loses focus. Payload is the segment value. + */ + catBlur: EventEmitter>; +} + @ProxyCmp({ inputs: [ 'autoComplete', From 2170916c402f30c78ed49df0b593b8c9209afc6c Mon Sep 17 00:00:00 2001 From: Nora Simonow Date: Wed, 12 Aug 2026 15:55:31 +0200 Subject: [PATCH 19/42] chore: remove agents instructions (to be introduced separately) --- .../CONTRACT.md | 211 ----- .../catalyst-component-development/SKILL.md | 213 ----- .../catalyst-onboarding/COMPONENT-ANATOMY.md | 192 ---- .../skills/catalyst-onboarding/GLOSSARY.md | 48 - .../skills/catalyst-onboarding/PR-REVIEW.md | 88 -- .../catalyst-onboarding/REPO-STRUCTURE.md | 48 - .agents/skills/catalyst-onboarding/SKILL.md | 71 -- .agents/skills/catalyst-onboarding/TOKENS.md | 181 ---- .../catalyst-onboarding/TROUBLESHOOTING.md | 50 - .../skills/catalyst-pr-review/CHECKLIST.md | 85 -- .agents/skills/catalyst-pr-review/SKILL.md | 36 - .../stenciljs-component-development/SKILL.md | 866 ------------------ 12 files changed, 2089 deletions(-) delete mode 100644 .agents/skills/catalyst-component-development/CONTRACT.md delete mode 100644 .agents/skills/catalyst-component-development/SKILL.md delete mode 100644 .agents/skills/catalyst-onboarding/COMPONENT-ANATOMY.md delete mode 100644 .agents/skills/catalyst-onboarding/GLOSSARY.md delete mode 100644 .agents/skills/catalyst-onboarding/PR-REVIEW.md delete mode 100644 .agents/skills/catalyst-onboarding/REPO-STRUCTURE.md delete mode 100644 .agents/skills/catalyst-onboarding/SKILL.md delete mode 100644 .agents/skills/catalyst-onboarding/TOKENS.md delete mode 100644 .agents/skills/catalyst-onboarding/TROUBLESHOOTING.md delete mode 100644 .agents/skills/catalyst-pr-review/CHECKLIST.md delete mode 100644 .agents/skills/catalyst-pr-review/SKILL.md delete mode 100644 .agents/skills/stenciljs-component-development/SKILL.md diff --git a/.agents/skills/catalyst-component-development/CONTRACT.md b/.agents/skills/catalyst-component-development/CONTRACT.md deleted file mode 100644 index 27a43c56..00000000 --- a/.agents/skills/catalyst-component-development/CONTRACT.md +++ /dev/null @@ -1,211 +0,0 @@ -# Catalyst Component Contract - -Every rule here is part of the **contract** — the public API surface that -propagates into Angular and all consumer apps the moment it ships. - ---- - -## Props (@Prop) - -- Every prop has a JSDoc comment describing what it does (not what type it is — - TypeScript already says that). -- Boolean props default to `false`. Never default to `true`. -- Use union string literals for enums: `'xs' | 's' | 'm' | 'l' | 'xl'`. - Do not use TypeScript enums — they don't serialize cleanly to HTML attributes. -- Accessibility props use the `a11y-` attribute prefix: - `@Prop({ attribute: 'a11y-label' }) a11yLabel?: string` -- Pass-through props for native element attributes use `nativeAttributes`: - `@Prop() nativeAttributes?: { [key: string]: string }`. Never add a new prop - just to expose a single native attribute — use `nativeAttributes` instead. -- `testId` is a standard prop on every interactive component. It maps to - `data-test` on the native element. Copy the pattern from `cat-button`. -- Props that depend on a breakpoint accept `boolean | Breakpoint`. See - `cat-button`'s `iconOnly` prop for the full pattern including `@Watch` and - `MediaMatcher` teardown. -- Never make a prop `mutable: true` unless there is no alternative. Prefer - emitting an event and letting the parent update the prop. - -## Events (@Event) - -- All event names are prefixed `cat`: `catClick`, `catChange`, `catFocus`, `catBlur`. -- Event payload is typed, never `any`: `EventEmitter`, `EventEmitter`, etc. -- Focus/blur events use `FocusEvent` as payload. Click uses `MouseEvent`. -- Change events on form inputs carry the new value: `EventEmitter`. -- Every event has a JSDoc comment. - -## CSS Parts (@part) - -- Declare every exposed part in the component-level JSDoc with `@part - description`. -- Add `part=""` to the corresponding element in the render output. -- Parts are the official theming extension point. Expose at minimum: - the root interactive element (e.g. `button`, `input`) and any significant - sub-regions consumers might need to target. -- Never expose internal implementation details as parts. Only expose stable, - intentional extension points. - -## Slots - -- Declare named slots in the component JSDoc with `@slot - description`. -- The default slot requires no `@slot` declaration unless its purpose is non-obvious. -- Check `this.hostElement.hasChildNodes()` in `componentWillRender()` to detect - slotted content presence. Store in a `@State` to trigger re-render. - See `cat-button`'s `hasSlottedContent` pattern. - -## Public methods (@Method) - -- All `@Method()` functions are `async` and return `Promise` or a typed Promise. -- Use `do` prefix for imperative actions: `doFocus()`, `doBlur()`, `doClick()`. -- Document with JSDoc including what the method does and any caveats. - -## Shadow DOM - -- Always `shadow: true`. Never `scoped: true` for Catalyst components. -- Use `shadow: { delegatesFocus: true }` for any component that wraps a native - focusable element (`input`, `button`, `a`, `textarea`, `select`). -- `@Element() hostElement!: HTMLElement` — always name it `hostElement`. -- Set `tabIndex` on the host element in `render()` for keyboard-navigable - components. Copy the pattern from `cat-button`: - `this.hostElement.tabIndex = Number(this.hostElement.getAttribute('tabindex')) || 0` - -## SCSS and tokens - -**Imports** — every component SCSS starts with: -```scss -@use 'variables' as *; -@use 'mixins' as *; -``` -Never use `@import`. Never use a relative path to `_variables.tokens.scss` directly. - -**Token accessor** — use `cat-token('dot.separated.path')` for all design tokens: -```scss -color: cat-token('color.ui.font.default'); -border-radius: cat-border-radius('m'); // 'xs'|'s'|'m'|'l'|'xl'|'full'|0 -``` - -**RGB partial tokens** — color tokens resolve to bare RGB partials, not `#hex`. -Wrap them correctly: -```scss -// Direct use (results in rgb(...)): -background: cat-token('color.theme.primary.bg'); - -// With opacity: -background: cat-token('color.theme.primary.bg', 0.5); - -// In CSS custom property chains (avoid wrapping prematurely): ---bg: #{cat-token('color.theme.primary.bg', $wrap: false)}; -background: cat-token-wrap(var(--bg)); -``` - -**Typography** — use mixins, never hardcode font-size or line-height: -```scss -@include cat-body('m'); // body text, medium size -@include cat-body('s'); // body text, small -@include cat-head('l'); // heading, large -``` - -**Available mixins quick-reference:** -| mixin | use | -|---|---| -| `cat-body($size)` | body font-size + line-height + weight | -| `cat-head($size)` | heading font-size + line-height + weight | -| `cat-ellipsis()` / `cat-ellipsis($n)` | single-line / multi-line truncation | -| `cat-break-word` | word-wrap for long strings | -| `cat-visually-hidden` | accessible hide (screen-reader visible) | -| `cat-select(none)` | disable user selection | -| `cat-font-smooth` | antialiasing for filled/inverted text | -| `cat-border-radius($size)` | border-radius from token scale | - -**`:host` display** — set `display` on `:host` to whatever the component needs -(`block`, `inline-block`, `flex`). The bootstrap skeleton in SKILL.md Step 2 -defaults to `block`; change it if the component requires otherwise. - -Use `:host(.)` selectors for consumer-applied variant classes (see -`cat-button`'s `.cat-tab`, `.cat-nav-item` patterns). - -**No hardcoded values** — never write: -- A hex color or `rgb()` — use `cat-token('color.*')` -- A border-radius pixel value — use `cat-border-radius()` -- A transition duration literal — use `cat-token('time.transition.*')` - -## Three test files - -**`cat-.spec.tsx`** — unit test using `@stencil/vitest` + `vitest`. -Tests shadow DOM render output for the default state and key prop combinations. - -```typescript -import { describe, it, expect } from 'vitest'; -import { render } from '@stencil/vitest'; -import { h } from '@stencil/core'; -import './cat-'; - -describe('cat-', () => { - it('renders', async () => { - const { root } = await render( />); - await expect(root.shadowRoot).toEqualHtml(`...`); - }); -}); -``` - -**`cat-.e2e.tsx`** — integration test using `@stencil/vitest`. -Tests hydration and user interactions (clicks, events, keyboard). - -```typescript -import { describe, it, expect } from 'vitest'; -import { render, h } from '@stencil/vitest'; - -describe('cat-', () => { - it('renders', async () => { - const { root } = await render( />); - await expect.element(root).toHaveClass('hydrated'); - }); -}); -``` - -**`cat-.screenshot.tsx`** — visual regression using `@vitest/browser/context`. -Tests all meaningful visual states: default, hover, active, disabled, each -variant/color combination. Use `toMatchScreenshot()`. - -```typescript -import { describe, it, expect, afterEach } from 'vitest'; -import { render, h } from '@stencil/vitest'; -import { page } from '@vitest/browser/context'; - -describe('cat-', () => { - afterEach(async () => { - await page.elementLocator(document.body).hover(); // reset hover state - }); - - it('default', async () => { - const { root } = await render( -
      - /> -
      - ); - await expect(root).toMatchScreenshot(); - }); -}); -``` - -Screenshot tests always wrap the component in a `
      `. -Always reset hover state in `afterEach`. - -## Angular binding side-effects - -The Angular output target (`angular/`) is generated by the Stencil build from -`core/`. Never edit files in `angular/` by hand. - -**Breaking contract changes** (require a major version bump): -- Removing a prop -- Renaming a prop -- Changing a prop's type in a non-additive way -- Removing or renaming an event -- Removing a CSS part - -**Non-breaking additions** (minor version bump, handled by release-please): -- New prop with a default value -- New event -- New CSS part -- New slot - -When making a breaking change: flag it in the PR description and in the commit -message with `BREAKING CHANGE:`. diff --git a/.agents/skills/catalyst-component-development/SKILL.md b/.agents/skills/catalyst-component-development/SKILL.md deleted file mode 100644 index c92cc88c..00000000 --- a/.agents/skills/catalyst-component-development/SKILL.md +++ /dev/null @@ -1,213 +0,0 @@ ---- -name: catalyst-component-development -description: > - Use when creating a new cat-* component, modifying an existing one, adding or - changing props or events, or touching component styles in - core/src/components/. ---- - -# Catalyst Component Development - -> **Requires:** load the `stenciljs-component-development` skill alongside this -> one. This skill covers Catalyst-specific rules only — Stencil decorator syntax, -> lifecycle methods, and JSX are assumed knowledge from that skill. Both skills -> are available in `.agents/skills/`. - -The **contract** is the leading word for this skill. Every `cat-*` component -exposes a public contract — props, events, CSS parts, slots — that propagates -into Angular bindings and all consumer apps the moment it ships. Work that -respects the contract is safe. Work that breaks it requires a major version bump -across all five packages. Keep this in mind on every decision below. - ---- - -## Entry point - -**Creating a new component** → start at Step 1. -**Modifying an existing component** → skip to Step 3. Steps 1–2 don't apply. - ---- - -## Step 1 — Scaffold the component directory - -Create `core/src/components/cat-/` with exactly these six files: - -``` -cat-/ - cat-.tsx # component implementation - cat-.scss # styles - cat-.spec.tsx # unit test (shadow DOM render assertions) - cat-.e2e.tsx # integration test (hydration, interaction) - cat-.screenshot.tsx # visual regression test (toMatchScreenshot) - readme.md # auto-generated — leave as empty placeholder -``` - -No other files. No `.css`. No subdirectories. No `index.ts`. - -**Naming rules:** -- Tag: `cat-` (kebab-case, always `cat-` prefix) -- Class: `Cat` (PascalCase) -- Files: match the tag exactly - -**Completion criterion:** all six files exist, no extras. - ---- - -## Step 2 — Bootstrap the component skeleton - -Start `.tsx` from this skeleton, preserving member order exactly: - -```typescript -import { Component, Element, Event, EventEmitter, h, Host, Prop, State } from '@stencil/core'; - -/** - * One-sentence description of what this component is for. - * - * @part - Description of each exposed CSS part. - * @slot - Description of each named slot (omit if default slot only). - */ -@Component({ - tag: 'cat-', - styleUrl: 'cat-.scss', - shadow: true -}) -export class Cat { - // 1. Private instance fields - // 2. @Element() hostElement!: HTMLElement; - // 3. @State() (alphabetical) - // 4. @Prop() + immediate @Watch() (alphabetical) - // 5. @Event() (alphabetical) - // 6. Lifecycle methods (natural order) - // 7. @Listen() - // 8. @Method() (alphabetical) - // 9. Private methods - // 10. render() — always last - - render() { - return ( - - - - ); - } -} -``` - -Bootstrap `.scss` with the standard imports and `:host` block: - -```scss -@use 'variables' as *; -@use 'mixins' as *; - -:host { - display: block; -} - -:host([hidden]) { - display: none; -} -``` - -**Completion criterion:** skeleton compiles (`pnpm --filter @haiilo/catalyst build` exits 0). - ---- - -## Step 3 — Implement the contract - -Implement props, events, slots, and methods according to the requirements. Apply -every rule in [CONTRACT.md](CONTRACT.md) while writing. The contract rules are -not optional — each one is a hard constraint, not a suggestion. - -**Completion criterion:** run `pnpm --filter @haiilo/catalyst build`. It must -exit 0 with no TypeScript errors. Every prop and event in the requirements has -an implementation, a JSDoc comment, and a matching entry in the done checklist. - ---- - -## Step 4 — Style with SCSS and tokens - -Write styles in `cat-.scss`. Apply every rule in [CONTRACT.md](CONTRACT.md) -under the SCSS section while writing. - -**Completion criterion:** no hardcoded colors, no hardcoded radii, no hardcoded -transition durations. Every value that has a token uses the token. -Run `pnpm --filter @haiilo/catalyst build` to confirm no SCSS errors. - ---- - -## Step 5 — Write three tests - -Every component requires all three test files. See [CONTRACT.md](CONTRACT.md) -for what belongs in each. - -Run `pnpm --filter @haiilo/catalyst test` and confirm all three files pass. - -**Completion criterion:** spec, e2e, and screenshot tests all pass. Zero skipped tests. - ---- - -## Step 6 — Register Angular exports - -Stencil generates Angular proxies but does not register them in -`CatalystModule`. Add every new public component to `CatComponents` in -`angular/projects/catalyst/src/lib/catalyst.module.ts`; composed components -need entries for the parent and each public child. - -**Completion criterion:** every new public component has a corresponding -`Components.Cat` entry in `CatComponents`, which the existing spreads -include in both `declarations` and `exports`. - -## Step 7 — Verify Angular bindings - -Run both builds: - -1. `pnpm --filter @haiilo/catalyst build` -2. `pnpm run build:angular` - -Inspect the generated directive at -`angular/projects/catalyst/src/lib/directives/proxies.ts`; new or modified -props and events must appear there. Never edit generated files. See -[CONTRACT.md](CONTRACT.md) for breaking changes. - -`pnpm run build:core` generates this Angular proxy and the React proxy at -`react/src/components/stencil-generated/index.ts`. Review both files and commit -their changes with the component. CI regenerates them for validation but does -not commit them. Never discard generated binding changes or edit them manually. - -**Completion criterion:** both builds exit 0. Generated Angular directive and -React proxy reflect the current component contract, and their tracked changes -are included in the component change. - ---- - -## Step 8 — Verify React bindings - -After the core build, verify every new public component has a `Cat` export -in the generated -`react/src/components/stencil-generated/index.ts`, then run: - -```bash -pnpm run build:react -``` - -**Completion criterion:** React proxy exports exist for every new public -component and `pnpm run build:react` exits 0. - -## Step 9 — Done checklist - -Before considering the work complete, verify every item: - -- [ ] Six files present, no extras -- [ ] Member order matches the skeleton (props before events, lifecycle before methods, render last) -- [ ] Every public prop and event has a JSDoc comment -- [ ] `@part` declarations in the component JSDoc match every `part="..."` in the render output -- [ ] No hardcoded color, radius, or transition value in SCSS — all via tokens -- [ ] `:host([hidden]) { display: none; }` present in SCSS -- [ ] Three test files pass (`pnpm --filter @haiilo/catalyst test`) -- [ ] Every new public component is registered in `CatComponents` in `CatalystModule` -- [ ] Angular build passes (`pnpm run build:angular`) -- [ ] React proxy export exists for every new public component -- [ ] React build passes (`pnpm run build:react`) -- [ ] Generated Angular and React binding changes are reviewed and committed -- [ ] No `as any`, `@ts-ignore`, or empty catch blocks introduced -- [ ] `readme.md` is present (content auto-generated on build; placeholder is fine) diff --git a/.agents/skills/catalyst-onboarding/COMPONENT-ANATOMY.md b/.agents/skills/catalyst-onboarding/COMPONENT-ANATOMY.md deleted file mode 100644 index 970e6318..00000000 --- a/.agents/skills/catalyst-onboarding/COMPONENT-ANATOMY.md +++ /dev/null @@ -1,192 +0,0 @@ -# Catalyst Component Anatomy - -## File structure - -Every component lives in `core/src/components/cat-/` with exactly six files: - -``` -cat-/ - cat-.tsx # component implementation - cat-.scss # styles - cat-.spec.tsx # unit test (shadow DOM render assertions) - cat-.e2e.tsx # integration test (hydration, interaction) - cat-.screenshot.tsx # visual regression (toMatchScreenshot) - readme.md # auto-generated on build -``` - -## Decorator map - -| decorator | what it does | -|---|---| -| `@Component` | Registers the custom element. `shadow: true` always. `shadow: { delegatesFocus: true }` for any component wrapping a native focusable element (`input`, `button`, `a`, `textarea`, `select`). | -| `@Element() hostElement!: HTMLElement` | Ref to the outer `` DOM element. Always named `hostElement`. | -| `@Prop()` | Public API. Becomes `@Input()` in Angular, a prop in React. Every prop requires a JSDoc comment. | -| `@State()` | Internal reactive state. Changes trigger re-render. Not visible outside the component. | -| `@Watch('propName')` | Fires when a prop or state changes. Place immediately after the prop it watches. | -| `@Event()` | Declares a custom DOM event emitter. All events prefixed `cat`. Becomes `@Output()` in Angular. | -| `@Listen('event')` | Intercepts a DOM event on the host or a specified target. | -| `@Method()` | Public imperative API. Always `async`, returns `Promise`. | - -## Member order (enforced by convention) - -```typescript -// 1. Private instance fields -// 2. @Element() hostElement -// 3. @State() — alphabetical -// 4. @Prop() + immediate @Watch() — alphabetical -// 5. @Event() — alphabetical -// 6. Lifecycle methods — natural order -// 7. @Listen() -// 8. @Method() — alphabetical -// 9. Private methods -// 10. render() — always last -``` - -Tag name: `cat-*` kebab-case. Class name: `Cat*` PascalCase. -Internal state fields: `_camelCase` prefix. CSS classes: `cat-{tag}-{modifier}`. -Events: `cat*` camelCase (`catClick`, `catChange`, `catBlur`). -Methods: `do*` for native wraps (`doFocus`, `doBlur`), no prefix for state transitions (`open`, `close`). -A11y props: `a11y*` camelCase → `a11y-*` attribute (`a11yLabel` → `a11y-label`). -CSS parts: semantic nouns (`part="button"`, `part="content"`). - -## Key render() patterns - -```tsx -// Host wrapper — sets attributes on the host element - - - - -// CSS parts — exposes shadow internals for consumer styling - -// Consumer: cat-button::part(button) { ... } - -// Spread nativeAttributes — arbitrary passthrough to inner element - -
      - ); -} -``` - -### Host Element - -Use `` to set attributes on the host element: - -```typescript -import { Host } from '@stencil/core'; - -render() { - return ( - - - - ); -} -``` - -### Slots - -Use slots for content projection: - -```typescript -render() { - return ( -
      -
      - -
      -
      - {/* Default slot */} -
      -
      - -
      -
      - ); -} -``` - -### Conditional Rendering - -```typescript -render() { - return ( -
      - {this.loading ? ( -
      Loading...
      - ) : ( -
      {this.content}
      - )} - - {this.error &&
      {this.error}
      } -
      - ); -} -``` - -### Lists - -```typescript -render() { - return ( -
        - {this.items.map(item => ( -
      • - {item.name} -
      • - ))} -
      - ); -} -``` - -## File Structure & Naming - -### Directory Structure - -One component per directory: - -``` -src/ -├── components/ -│ ├── my-button/ -│ │ ├── my-button.tsx # Component implementation -│ │ ├── my-button.css # Styles -│ │ ├── my-button.spec.ts # Unit tests -│ │ ├── my-button.e2e.ts # E2E tests -│ │ └── readme.md # Component documentation -│ ├── my-card/ -│ │ ├── my-card.tsx -│ │ ├── my-card.ios.css # iOS-specific styles -│ │ ├── my-card.md.css # Material Design styles -│ │ └── my-card.css # Base styles -``` - -### Naming Conventions - -- **Tag names**: kebab-case with hyphen (required): `my-component`, `app-header` -- **Component class**: PascalCase: `MyComponent`, `AppHeader` -- **File names**: Match tag name: `my-component.tsx` -- **Props**: camelCase: `firstName`, `isActive` -- **Events**: camelCase: `itemSelected`, `formSubmit` -- **CSS classes**: kebab-case: `button-primary`, `is-active` - -## Code Organization - -Follow this order in component class: - -```typescript -@Component({ - tag: 'my-component', - styleUrl: 'my-component.css', - shadow: true, -}) -export class MyComponent { - // 1. Own Properties (private, not decorated) - private internalValue: number; - someText = 'default'; - - // 2. Reference to host element - @Element() el: HTMLElement; - - // 3. State() variables (alphabetical) - @State() isValidated: boolean; - @State() status = 0; - - // 4. Public Property API - @Prop() (alphabetical) - @Prop() content: string; - @Prop() enabled: boolean; - @Prop() type = 'default'; - - // 5. Prop lifecycle events (@Watch) - immediately after related @Prop - @Prop() value: string; - - @Watch('value') - valueChanged(newValue: string, oldValue: string) { - this.validate(newValue); - } - - // 6. Events section (alphabetical) - @Event() itemSelected: EventEmitter; - @Event() statusChanged: EventEmitter; - - // 7. Component lifecycle events (in natural order) - connectedCallback() {} - disconnectedCallback() {} - componentWillLoad() {} - componentDidLoad() {} - componentShouldUpdate() {} - componentWillRender() {} - componentDidRender() {} - componentWillUpdate() {} - componentDidUpdate() {} - - // 8. Listeners - @Listen('click') - onClick(event: MouseEvent) { - console.log('Clicked'); - } - - // 9. Public methods API (alphabetical) - @Method() - async open(): Promise { - this.isOpen = true; - } - - @Method() - async close(): Promise { - this.isOpen = false; - } - - // 10. Local methods (private business logic) - private validate(value: string): boolean { - return value.length > 0; - } - - private updateState() { - // Internal logic - } - - // 11. render() function (always last) - render() { - return ( - -
      - -
      -
      - ); - } -} -``` - -## Best Practices - -### 1. Use TypeScript Strictly - -```typescript -// Good - Fully typed -@Prop() items: Array<{id: string; name: string}>; -@State() count: number = 0; - -// Bad - Any types -@Prop() items: any; -@State() count; -``` - -### 2. Immutable State Updates - -```typescript -// Bad - Direct mutation won't trigger re-render -this.items.push(newItem); - -// Good - Create new array -this.items = [...this.items, newItem]; - -// Bad - Direct object mutation -this.user.name = 'New Name'; - -// Good - Create new object -this.user = { ...this.user, name: 'New Name' }; -``` - -### 3. Use Shadow DOM When Possible - -```typescript -@Component({ - tag: 'my-component', - styleUrl: 'my-component.css', - shadow: true, // Encapsulation and style isolation -}) -``` - -### 4. Document Public API - -```typescript -/** - * The button component for user interactions - */ -@Component({ - tag: 'my-button', -}) -export class MyButton { - /** - * The button label text - */ - @Prop() label: string; - - /** - * Emitted when the button is clicked - */ - @Event() buttonClick: EventEmitter; - - /** - * Opens the button's associated menu - */ - @Method() - async openMenu(): Promise { - // ... - } -} -``` - -### 5. Handle Async Operations Properly - -```typescript -async componentWillLoad() { - try { - this.data = await this.fetchData(); - } catch (error) { - console.error('Failed to load data:', error); - this.error = 'Failed to load'; - } -} -``` - -### 6. Clean Up Resources - -```typescript -private intervalId: number; - -componentDidLoad() { - this.intervalId = window.setInterval(() => { - this.updateTime(); - }, 1000); -} - -disconnectedCallback() { - if (this.intervalId) { - clearInterval(this.intervalId); - } -} -``` - -### 7. Use Functional Components for Simple Cases - -```typescript -import { h, FunctionalComponent } from '@stencil/core'; - -interface IconProps { - name: string; - size?: number; -} - -export const Icon: FunctionalComponent = ({ name, size = 24 }) => ( - - - -); -``` - -## Anti-Patterns - -### ❌ Don't Mutate Props - -```typescript -// Bad -@Prop() value: string; - -handleChange() { - this.value = 'new value'; // Error if not mutable -} - -// Good -@Prop({ mutable: true }) value: string; -// Or better: emit event and let parent handle -@Event() valueChange: EventEmitter; - -handleChange() { - this.valueChange.emit('new value'); -} -``` - -### ❌ Don't Use Constructor for Initialization - -```typescript -// Bad -constructor() { - this.data = this.fetchData(); // Won't work properly -} - -// Good -async componentWillLoad() { - this.data = await this.fetchData(); -} -``` - -### ❌ Don't Access DOM in render() - -```typescript -// Bad -render() { - const width = this.el.offsetWidth; // Can cause issues - return
      ; -} - -// Good -componentDidLoad() { - this.width = this.el.offsetWidth; -} - -render() { - return
      ; -} -``` - -### ❌ Don't Forget Keys in Lists - -```typescript -// Bad -render() { - return ( -
        - {this.items.map(item =>
      • {item.name}
      • )} -
      - ); -} - -// Good -render() { - return ( -
        - {this.items.map(item =>
      • {item.name}
      • )} -
      - ); -} -``` - -### ❌ Don't Use Arrow Functions in render() for Handlers - -```typescript -// Bad - Creates new function on every render -render() { - return ; -} - -// Good - Bind in class or use arrow function property -private handleClick = () => { - console.log('Clicked'); -} - -render() { - return ; -} -``` - -## Testing - -### Unit Tests - -```typescript -import { newSpecPage } from '@stencil/core/testing'; -import { MyComponent } from './my-component'; - -describe('my-component', () => { - it('renders', async () => { - const page = await newSpecPage({ - components: [MyComponent], - html: ``, - }); - expect(page.root).toEqualHtml(` - - -
      - Hello, World! -
      -
      -
      - `); - }); - - it('renders with props', async () => { - const page = await newSpecPage({ - components: [MyComponent], - html: ``, - }); - expect(page.root).toEqualHtml(` - - -
      - Hello, Stencil! -
      -
      -
      - `); - }); -}); -``` - -### E2E Tests - -```typescript -import { newE2EPage } from '@stencil/core/testing'; - -describe('my-component', () => { - it('renders', async () => { - const page = await newE2EPage(); - await page.setContent(''); - - const element = await page.find('my-component'); - expect(element).toHaveClass('hydrated'); - }); - - it('emits event on click', async () => { - const page = await newE2EPage(); - await page.setContent(''); - - const itemSelected = await page.spyOnEvent('itemSelected'); - const button = await page.find('my-component >>> button'); - await button.click(); - - expect(itemSelected).toHaveReceivedEvent(); - }); -}); -``` - -## Common Patterns - -### Form-Associated Components - -```typescript -@Component({ - tag: 'my-input', - formAssociated: true, -}) -export class MyInput { - @Element() el: HTMLElement; - - private internals: ElementInternals; - - componentWillLoad() { - this.internals = (this.el as any).attachInternals(); - } - - @Prop() value: string = ''; - - @Watch('value') - valueChanged(newValue: string) { - this.internals.setFormValue(newValue); - } -} -``` - -### Loading States - -```typescript -@State() loading: boolean = false; -@State() error: string | null = null; -@State() data: any = null; - -async componentWillLoad() { - await this.loadData(); -} - -private async loadData() { - this.loading = true; - this.error = null; - - try { - this.data = await fetch('/api/data').then(r => r.json()); - } catch (e) { - this.error = 'Failed to load data'; - } finally { - this.loading = false; - } -} - -render() { - if (this.loading) return
      Loading...
      ; - if (this.error) return
      {this.error}
      ; - return
      {JSON.stringify(this.data)}
      ; -} -``` - -### Controlled vs Uncontrolled - -```typescript -// Controlled - value managed by parent -@Prop() value: string; -@Event() valueChange: EventEmitter; - -handleInput(event: Event) { - const value = (event.target as HTMLInputElement).value; - this.valueChange.emit(value); -} - -render() { - return this.handleInput(e)} />; -} - -// Uncontrolled - internal state -@State() internalValue: string = ''; - -handleInput(event: Event) { - this.internalValue = (event.target as HTMLInputElement).value; -} - -render() { - return this.handleInput(e)} />; -} -``` - -## Performance Tips - -1. **Use `componentShouldUpdate()` to prevent unnecessary renders** -2. **Avoid complex computations in render()** -3. **Use `memoize` for expensive calculations** -4. **Lazy load components with `import()`** -5. **Use Shadow DOM for style encapsulation** -6. **Minimize prop changes from parent** -7. **Use event delegation for lists** - -## Related Resources - -- [Stencil.js Official Documentation](https://stenciljs.com/docs/introduction) -- [Stencil Component API](https://stenciljs.com/docs/api) -- [Stencil Style Guide](https://stenciljs.com/docs/style-guide) -- [Web Components Standards](https://developer.mozilla.org/en-US/docs/Web/Web_Components) From 3a9930d6469518f0dcd7b0dd62d77bf6857ad3fd Mon Sep 17 00:00:00 2001 From: Nora Simonow Date: Thu, 13 Aug 2026 08:50:32 +0200 Subject: [PATCH 20/42] chore: remove agents instructions (to be introduced separately) --- AGENTS.md | 248 ------------------------------------------------------ 1 file changed, 248 deletions(-) delete mode 100644 AGENTS.md diff --git a/AGENTS.md b/AGENTS.md deleted file mode 100644 index 7693c260..00000000 --- a/AGENTS.md +++ /dev/null @@ -1,248 +0,0 @@ -# AGENTS.md - -Agent instructions for Catalyst Design System. This file complements package READMEs; use the closest nested `AGENTS.md` if one is added later. - -## Project overview - -Catalyst is a pnpm monorepo that publishes five related packages: - -| Directory | Package | Purpose | -|-------------------------------------|-----------------------------------|--------------------------------| -| `tokens/` | `@haiilo/catalyst-tokens` | Style Dictionary design tokens | -| `core/` | `@haiilo/catalyst` | Stencil web components | -| `angular/` | `@haiilo/catalyst-angular` | Angular bindings | -| `angular/projects/catalyst-formly/` | `@haiilo/catalyst-angular-formly` | Angular Formly types | -| `react/` | `@haiilo/catalyst-react` | React bindings | - -Technology: TypeScript, Stencil, Angular, React, SCSS, Style Dictionary, Vitest, Playwright, pnpm, and GitHub Actions. Build dependencies in this order: - -```text -tokens -> core -> angular -> angular-formly -tokens -> core -> react -``` - -## Repository skills - -Use these optional skills for deeper guidance when working in this repository: - -- `catalyst-onboarding` — orient to repository structure and package workflows. -- `catalyst-component-development` — create or modify Catalyst components. -- `catalyst-pr-review` — review changes against repository standards. -- `stenciljs-component-development` — apply Stencil implementation patterns. - -Skill files live under `.agents/skills/`. Follow this file and package documentation when a skill is unavailable. - -## Repository navigation - -- Tokens: `tokens/src/`, `tokens/config.js` -- Core components/utilities: `core/src/components/cat-*/`, `core/src/utils/` -- Angular source/demos: `angular/projects/` -- React bindings: `react/src/` -- CI: `.github/workflows/`; releases: `release-please-config*.json`, `.release-please-manifest*.json` -- Package documentation: each package's `README.md` - -Do not edit generated output under `dist/`, `core/loader/`, `core/www/`, or -`.stencil/` unless a workflow explicitly requires it. Generated files are normally recreated by package scripts. - -## Setup - -Requirements are declared in the root `package.json`: Node `>=20`, pnpm `>=9`. CI uses the Node version in `.nvmrc` (`24`) and pnpm 9; use those versions locally. - -```bash -nvm use -pnpm --version -pnpm install -``` - -Run commands from repository root unless a command says otherwise. Keep -`pnpm-lock.yaml` synchronized with dependency changes. Do not use npm or Yarn for workspace installation. - -## Development commands - -### Build - -```bash -pnpm run build # all packages, in dependency order -pnpm run build:tokens -pnpm run build:core -pnpm run build:angular -pnpm run build:angular-formly -pnpm run build:react -``` - -Core development server and watch mode: - -```bash -pnpm --filter @haiilo/catalyst run start -pnpm --filter @haiilo/catalyst run build:watch -``` - -Angular development server and watch mode: - -```bash -pnpm --filter @haiilo/catalyst-angular-workspace run start -pnpm --filter @haiilo/catalyst-angular-workspace run watch -``` - -Build output is package-specific: tokens use `tokens/dist`, core uses -`core/dist`, Angular uses `angular/dist`, and React uses `react/dist`. - -### Formatting and linting - -CI checks core with Prettier, ESLint, and Stylelint: - -```bash -pnpm --filter @haiilo/catalyst run prettier:check -pnpm --filter @haiilo/catalyst run lint -pnpm --filter @haiilo/catalyst run lint:style -``` - -To format or autofix during development, use `prettier`, `lint -- --fix`, and -`lint:style -- --fix` on the core filter. Angular exposes `prettier:check`. - -```bash -pnpm --filter @haiilo/catalyst run prettier -pnpm --filter @haiilo/catalyst run lint -- --fix -pnpm --filter @haiilo/catalyst run lint:style -- --fix -pnpm --filter @haiilo/catalyst-angular-workspace run prettier:check -``` - -Run the applicable formatter and linter after changes. Do not suppress lint rules without a repository-specific reason. - -## Testing - -### Core - -Core tests are configured in `core/vitest.config.mts`: - -- `*.spec.tsx`: Stencil/Vitest plugin tests -- `*.e2e.tsx`: headless Chromium browser interaction tests -- `*.screenshot.tsx`: headless Chromium visual regression tests - -```bash -pnpm --filter @haiilo/catalyst run test -pnpm --filter @haiilo/catalyst run test:e2e -pnpm --filter @haiilo/catalyst run test:screenshot -pnpm --filter @haiilo/catalyst run test:watch -``` - -Install browser dependencies when needed: - -```bash -pnpm --dir core exec playwright install --with-deps -``` - -Run one test file or test name through Vitest from `core/`, for example: - -```bash -pnpm --dir core exec vitest run src/components/cat-button/cat-button.spec.tsx -pnpm --dir core exec vitest run -t "renders with disabled prop" -``` - -Screenshot references live in component `__screenshots__/` directories. Local macOS references end in `-darwin`; CI Linux references end in `-linux`. After an intentional visual change: - -```bash -pnpm run test:screenshot:update -``` - -This updates local references. Use the manually triggered **Update Screenshots** -workflow to regenerate Linux references. Do not update snapshots to hide an unexplained rendering or behavior regression. - -### Angular - -```bash -pnpm --filter @haiilo/catalyst-angular-workspace run test -pnpm --filter @haiilo/catalyst-angular-workspace run test:ci -``` - -`test:ci` runs both `catalyst` and `catalyst-formly` with ChromiumHeadless. - -### React and tokens - -React exposes build/type checking rather than a test script: - -```bash -pnpm --filter @haiilo/catalyst-react run build -pnpm --filter @haiilo/catalyst-react run tsc -``` - -Tokens are validated through their build: - -```bash -pnpm run build:tokens -``` - -Always add or update tests for behavior changes. Keep component tests beside their implementation under `core/src/components/`. - -## Implementation conventions - -### Core components - -For a new or changed component, inspect a nearby component with similar behavior first. Keep implementation, styles, documentation, and applicable -`*.spec.tsx`, `*.e2e.tsx`, and `*.screenshot.tsx` files together. - -Follow these project conventions: - -- Use `cat-*` tags and PascalCase class names. -- Document public `@Prop`, `@Event`, and `@Method` APIs with JSDoc. -- Boolean props have explicit `false` defaults. -- Use camelCase for multi-word props and `cat` prefixes for custom events. -- Type event payloads with `EventEmitter` and definite assignment. -- Public Stencil methods are asynchronous and return `Promise`. -- Use `delegatesFocus: true` for interactive shadow components where focus should enter the native control. -- Use `findClosest` across shadow boundaries and `event.composedPath()` for retargeted events/outside-click handling. -- Expose CSS parts only for meaningful public sub-elements; document each part in component JSDoc and apply its `part` attribute in render output. -- Use `:host` for component layout and token/mixin helpers for colors, typography, radius, and transitions. Avoid hardcoded design values. -- Use `@use 'variables' as *;` and `@use 'mixins' as *;` in component SCSS. - -Do not introduce `as any`, TypeScript ignore directives, empty catch blocks, placeholder implementations, or unrelated refactors. - -### Tokens and bindings - -- Add or update source tokens, then run `pnpm run build:tokens`. -- Rebuild core after token changes: `pnpm run build:tokens && pnpm run build:core`. -- Build Angular and Formly after core changes before testing consumers. -- Build React after core changes; React depends on the workspace core package. -- Do not hand-edit generated bindings or package `dist` output. - -## Git and pull requests - -- Work on a feature branch; do not commit directly to `main` or `beta`. -- Never force-push shared branches or rewrite shared history. -- Never commit secrets, `.env` files, generated credentials, or agent-tooling configuration directories. -- Keep unrelated working-tree changes untouched. -- Commit messages must use Conventional Commits with one of these scopes: - `angular`, `angular-formly`, `core`, `react`, `tokens`, or `release`. - -Examples: - -```text -feat(core): add segmented control -fix(angular): correct value accessor -chore(tokens): update color token -``` - -Before opening a PR, run relevant build, tests, formatter, and linters. - -Address critical and major findings before requesting review. PR descriptions should explain why change is needed and mention visual, API, or generated-output. - -## CI and releases - -Workflows are path-sensitive. Core CI runs build, lint, unit, screenshot, and e2e checks. Angular CI builds tokens/core/bindings and runs Angular tests. React CI builds tokens/core/React. Tokens CI builds tokens and commits generated token output. Main-branch deployment publishes core documentation to GitHub Pages. - -Releases are managed by release-please on `main` (stable) and `beta` -(prerelease), followed by automated npm publishing. Do not publish packages or modify release configuration unless explicitly requested. - -## Troubleshooting - -- **Workspace package not found:** run `pnpm install`, then rebuild in order: - `pnpm run build:tokens && pnpm run build:core`. -- **Browser test cannot launch:** run the Playwright install command above. -- **Screenshot mismatch:** inspect actual/diff artifacts before updating references; macOS and Linux references are intentionally separate. -- **Angular consumer testing:** run the full build, then use packages from - `angular/dist/catalyst` or `angular/dist/catalyst-formly` as documented in the root README. -- **Commit rejected:** check Conventional Commit type and allowed lowercase scope in `.commitlintrc.json`. - -## Documentation - -Read root/package `README.md` files for consumer setup and release details. Design documentation: https://design.haiilo.com From 0bd61d4b6e7c659646a5ef93615b3507074de1ac Mon Sep 17 00:00:00 2001 From: Nora Simonow Date: Fri, 14 Aug 2026 13:46:34 +0200 Subject: [PATCH 21/42] chore: copy pr review skills for copilot --- .github/skills/code-review/CHECKLIST.md | 73 +++++++++++++++++++++++++ .github/skills/code-review/SKILL.md | 46 ++++++++++++++++ 2 files changed, 119 insertions(+) create mode 100644 .github/skills/code-review/CHECKLIST.md create mode 100644 .github/skills/code-review/SKILL.md diff --git a/.github/skills/code-review/CHECKLIST.md b/.github/skills/code-review/CHECKLIST.md new file mode 100644 index 00000000..9dc61263 --- /dev/null +++ b/.github/skills/code-review/CHECKLIST.md @@ -0,0 +1,73 @@ +# Catalyst Code Review Checklist + +Apply only sections relevant to changed paths. Mark every applicable rule ✅, ❌, or N/A with a reason. + +## Repository-wide + +- [ ] PR description explains user-facing or maintenance intent and scope. +- [ ] Commit messages follow Conventional Commits. If a scope is present, it is one of `core`, `angular`, `angular-formly`, `react`, `tokens`, or `release`; scope is review policy, not enforced as required by current commitlint config. +- [ ] Commit-message validation is absent from CI. Local commitlint runs from Husky's `commit-msg` hook and can be bypassed; inspect commits when relevant. +- [ ] No secrets, credentials, `.env` files, or sensitive infrastructure information are added. +- [ ] Dependency, lockfile, CI, release, deployment, or infrastructure changes are intentional, minimal, and documented. Escalate shared-infrastructure changes for platform review. +- [ ] No generated output is hand-edited: `dist/`, `core/loader/`, `core/www/`, `.stencil/`, generated Angular proxies, or generated React bindings. + +## Tokens (`tokens/**`) + +- [ ] Token source follows existing design-token structure. +- [ ] Token build output is regenerated and reviewed; affected Core consumers are rebuilt when token names or values change. +- [ ] Token changes preserve consumer compatibility or include a deprecation/migration path. + +## Core public contract (`core/src/components/**`) + +- [ ] Public props, events, methods, slots, CSS parts, and form behavior remain backward compatible; removals or semantic changes include deprecation and migration guidance. +- [ ] Public API changes regenerate and review `angular/projects/catalyst/src/lib/directives/proxies.ts` and `react/src/components/stencil-generated/index.ts`; Angular and React builds pass. +- [ ] Changes to `cat-input`, `cat-textarea`, `cat-datepicker`, `cat-datepicker-inline`, `cat-checkbox`, `cat-toggle`, `cat-radio`, `cat-radio-group`, `cat-select`, or `cat-tag` preserve or deliberately update value-accessor bindings in `core/stencil.config.ts`. + +### Props, events, and methods + +- [ ] Boolean props use explicit `false` defaults when false is their default behavior. +- [ ] Multi-word props are camelCase; string unions reuse established scales unless an intentional contract addition is documented. +- [ ] Public `@Prop()`, `@Event()`, and `@Method()` members have accurate JSDoc. +- [ ] Deprecated APIs remain available and their JSDoc gives actionable replacement or migration guidance. +- [ ] Events use `cat` prefix and precise `EventEmitter` payloads; value-change events emit their value type. +- [ ] Native-element wrappers expose `doFocus`, `doBlur`, or `doClick` as appropriate; documentation directs consumers away from inner-element access. +- [ ] Public `@Method()` members are asynchronous and return `Promise` unless an established contract requires another return type. + +### Native controls and parts + +- [ ] Components wrapping a native control expose `@Element()`, `testId`, and `nativeAttributes` when an inner native element can receive them; `testId` maps to `data-test` and `nativeAttributes` is forwarded. +- [ ] Component JSDoc declares every exposed CSS part; every declared part appears in render output. +- [ ] Parts expose consumer-meaningful surfaces, not internal layout or state-only wrappers. + +### SCSS and Shadow DOM + +- [ ] Component SCSS uses established imports, token helpers, mixins, `:host` layout, and `:host([hidden]) { display: none; }` where applicable. +- [ ] Colors, typography, radii, and transitions use existing token or mixin patterns. Hardcoded color values are rejected; token-backed CSS custom-property and RGB consumption is allowed. +- [ ] Vendor-prefix exceptions use narrow paired Stylelint disable/enable comments. +- [ ] Shadow-boundary ancestor traversal uses `findClosest`; outside-click detection uses `event.composedPath()`. +- [ ] Focusable wrappers use `shadow: { delegatesFocus: true }` when this matches established component behavior. + +### Accessibility and tests + +- [ ] Keyboard behavior, focus movement/restoration, disabled behavior, labels, semantic roles, and ARIA state remain correct. +- [ ] Render-affecting prop changes have spec coverage. +- [ ] Interaction, focus, value, or event changes have e2e coverage. +- [ ] Visual variants or state changes have screenshot coverage; baseline changes are intentional and reviewed. + +## Angular and Formly (`angular/**`) + +- [ ] Public Angular or Formly API changes preserve compatibility or include deprecation and migration guidance. +- [ ] Changes are covered by relevant Angular or Formly tests and `build:angular` / `build:angular-formly` validation. +- [ ] Generated Core proxies are not hand-edited. + +## React (`react/**`) + +- [ ] Public wrapper API changes preserve compatibility or include deprecation and migration guidance. +- [ ] Generated Stencil bindings are not hand-edited. +- [ ] React build passes; add targeted tests when test infrastructure exists or behavior changes warrant coverage. + +## Tooling and release + +- [ ] CI changes map correctly to affected paths and preserve required build order: tokens → core → Angular/Formly and tokens → core → React. +- [ ] Public breaking changes are explicitly flagged with consumer migration path; linked release versions do not eliminate compatibility review. +- [ ] Formatter, linter, builds, and relevant tests were run or CI status proves their applicable execution. diff --git a/.github/skills/code-review/SKILL.md b/.github/skills/code-review/SKILL.md new file mode 100644 index 00000000..d813d1de --- /dev/null +++ b/.github/skills/code-review/SKILL.md @@ -0,0 +1,46 @@ +--- +name: code-review +description: Review Catalyst pull requests. Use for pull request and code review, especially changes to Catalyst components, tokens, Angular, Angular Formly, React bindings, generated bindings, CI checks, or public API contracts. +--- + +# Catalyst Code Review + +The **gate**: approve only when every applicable check passes or is explicitly N/A. Report all blocking findings in one review. + +## Step 1 — Establish review context + +Use current pull request context. If unavailable, ask for its URL or number. Inspect the description, base and head commits, changed files, commits, existing review threads, and check runs. + +Map changed paths to applicable workflows: + +| Changed path | Workflow | Checks | +|--------------|----------|-------------------| +| `tokens/**` | Tokens | build | +| `core/**` | Core | build, lint, test | +| `angular/**` | Angular | build, test | +| `react/**` | React | build | + +Workflow paths are authoritative; check `.github/workflows/` when they change. React and Tokens have no dedicated lint or test workflow. If a public Core contract changes, also require generated binding review and Angular and React consumer builds: their workflows do not run for `core/**` alone. + +Record failed applicable checks. Continue static review, but do not approve while required applicable checks fail. + +Completion criterion: changed areas and applicable checks identified; every failed check recorded. + +## Step 2 — Apply applicable checks + +Load [CHECKLIST.md](CHECKLIST.md). Select sections by changed area. Mark every applicable item ✅, ❌, or N/A with a short reason. For every ❌, record exact file, line, evidence, and required correction. + +Inspect changed source, tests, generated bindings, public contracts, and dependency or tooling changes; do not infer correctness from green CI. + +Completion criterion: every applicable checklist item accounted for; every blocking finding has actionable evidence. + +## Step 3 — Publish one review + +- Lead with one sentence describing PR effect. +- List ❌ items as required changes with file, line, evidence, and rule. +- Label non-blocking observations as suggestions. +- Request changes for any blocking finding. +- Approve only when no blocking findings exist and all required applicable checks pass. +- Otherwise leave a comment review describing pending failed or missing checks. + +Completion criterion: one complete review published or drafted, with no unreported blocking finding. From 5cb8e8ef3f1981233bddabd89a22ea5c6505a9d4 Mon Sep 17 00:00:00 2001 From: Nora Simonow Date: Fri, 14 Aug 2026 14:18:37 +0200 Subject: [PATCH 22/42] feat(core): fix review remarks --- .../cat-segmented-control.spec.tsx | 37 +++++++++++++++++++ .../cat-segmented-control.tsx | 4 +- 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/core/src/components/cat-segmented-control/cat-segmented-control.spec.tsx b/core/src/components/cat-segmented-control/cat-segmented-control.spec.tsx index 8e5c2213..26bbe62c 100644 --- a/core/src/components/cat-segmented-control/cat-segmented-control.spec.tsx +++ b/core/src/components/cat-segmented-control/cat-segmented-control.spec.tsx @@ -136,6 +136,43 @@ describe('cat-segmented-control', () => { ).toBe(true); }); + it('does not prevent arrow-key default when all segments are disabled', async () => { + const { root, waitForChanges } = await render( + + Option 1 + + ); + + await waitForChanges(); + const event = new KeyboardEvent('keydown', { key: 'ArrowRight', bubbles: true, cancelable: true }); + + root.dispatchEvent(event); + + expect(event.defaultPrevented).toBe(false); + }); + + it('does not prevent arrow-key default when focus is outside enabled segments', async () => { + const { root, waitForChanges } = await render( + + Option 1 + + ); + + await waitForChanges(); + const segment = root.querySelector('cat-segment'); + segment!.doFocus = vi.fn(); + const outside = document.createElement('button'); + document.body.append(outside); + outside.focus(); + const event = new KeyboardEvent('keydown', { key: 'ArrowRight', bubbles: true, cancelable: true }); + + root.dispatchEvent(event); + + expect(event.defaultPrevented).toBe(false); + expect(segment!.doFocus).not.toHaveBeenCalled(); + outside.remove(); + }); + it('does not emit selection change for focus or blur events', async () => { const { root } = await render( diff --git a/core/src/components/cat-segmented-control/cat-segmented-control.tsx b/core/src/components/cat-segmented-control/cat-segmented-control.tsx index b01724ed..1f4adc99 100644 --- a/core/src/components/cat-segmented-control/cat-segmented-control.tsx +++ b/core/src/components/cat-segmented-control/cat-segmented-control.tsx @@ -113,9 +113,11 @@ export class CatSegmentedControl { const enabled = this.segments.filter(s => !s.disabled); const idx = enabled.indexOf(document.activeElement as HTMLCatSegmentElement); + if (enabled.length === 0 || idx === -1) return; + const offset = ['ArrowRight', 'ArrowDown'].includes(event.key) ? 1 : -1; const target = enabled[(idx + offset + enabled.length) % enabled.length]; - target?.doFocus(); + target.doFocus(); event.preventDefault(); } From 57237472693fed5323ea39ab17c2738199477c54 Mon Sep 17 00:00:00 2001 From: Nora Simonow Date: Fri, 14 Aug 2026 14:29:58 +0200 Subject: [PATCH 23/42] feat(core): fix review remarks --- .../cat-segmented-control/cat-segmented-control.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/core/src/components/cat-segmented-control/cat-segmented-control.tsx b/core/src/components/cat-segmented-control/cat-segmented-control.tsx index 1f4adc99..91065efa 100644 --- a/core/src/components/cat-segmented-control/cat-segmented-control.tsx +++ b/core/src/components/cat-segmented-control/cat-segmented-control.tsx @@ -79,7 +79,9 @@ export class CatSegmentedControl { componentDidLoad() { this.sync(); this.mutationObserver = new MutationObserver(mutations => { - if (mutations.some(m => m.target.nodeName === 'CAT-SEGMENT')) { + if ( + mutations.some(m => m.type === 'childList' || (m.type === 'attributes' && m.target.nodeName === 'CAT-SEGMENT')) + ) { this.sync(); } }); From 8cb57ba9df6afc322aa4886666035396b832e240 Mon Sep 17 00:00:00 2001 From: Nora Simonow Date: Mon, 17 Aug 2026 09:34:01 +0200 Subject: [PATCH 24/42] chore: run prettier after other test tasks as well --- core/package.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/package.json b/core/package.json index 30507f8e..aa99c721 100644 --- a/core/package.json +++ b/core/package.json @@ -33,6 +33,8 @@ "test": "stencil-test --project plugin", "test:screenshot": "stencil-test --project browser", "test:e2e": "stencil-test --project e2e", + "posttest": "node replace && pnpm --filter @haiilo/catalyst-angular-workspace run prettier", + "posttest:screenshot": "node replace && pnpm --filter @haiilo/catalyst-angular-workspace run prettier", "posttest:e2e": "node replace && pnpm --filter @haiilo/catalyst-angular-workspace run prettier", "test:watch": "stencil-test watch", "generate": "stencil generate", From be0a102ee2409c88b33ae2172d42d69fd6d6b42d Mon Sep 17 00:00:00 2001 From: Nora Simonow Date: Mon, 17 Aug 2026 09:38:03 +0200 Subject: [PATCH 25/42] feat(core): refactor for a11y --- core/src/components.d.ts | 9 +++++ .../cat-segment/cat-segment.spec.tsx | 6 +-- .../components/cat-segment/cat-segment.tsx | 7 +++- .../cat-segmented-control.spec.tsx | 39 ++++++++++++++++++- .../cat-segmented-control.tsx | 22 +++++++++-- 5 files changed, 75 insertions(+), 8 deletions(-) diff --git a/core/src/components.d.ts b/core/src/components.d.ts index f87332eb..63b7d7ad 100644 --- a/core/src/components.d.ts +++ b/core/src/components.d.ts @@ -1479,6 +1479,10 @@ export namespace Components { * Spread onto the native button element. */ "nativeAttributes"?: { [key: string]: string }; + /** + * @default 0 + */ + "rovingTabIndex": number; /** * @default 'm' */ @@ -4514,6 +4518,10 @@ declare namespace LocalJSX { "onCatSegmentBlur"?: (event: CatSegmentCustomEvent) => void; "onCatSegmentClick"?: (event: CatSegmentCustomEvent) => void; "onCatSegmentFocus"?: (event: CatSegmentCustomEvent) => void; + /** + * @default 0 + */ + "rovingTabIndex"?: number; /** * @default 'm' */ @@ -5622,6 +5630,7 @@ declare namespace LocalJSX { "a11yLabel": string; "a11yControls": string; "size": SegmentSize; + "rovingTabIndex": number; "testId": string; "value": string; } diff --git a/core/src/components/cat-segment/cat-segment.spec.tsx b/core/src/components/cat-segment/cat-segment.spec.tsx index 370ccb36..2c8e5616 100644 --- a/core/src/components/cat-segment/cat-segment.spec.tsx +++ b/core/src/components/cat-segment/cat-segment.spec.tsx @@ -17,7 +17,7 @@ describe('cat-segment', () => { expect(btn).toHaveClass('cat-segment-m'); expect(btn).not.toHaveClass('cat-segment-active'); - expect(btn?.getAttribute('aria-pressed')).toBe('false'); + expect(btn?.getAttribute('aria-checked')).toBe('false'); }); it('applies size class', async () => { @@ -38,7 +38,7 @@ describe('cat-segment', () => { ); const btn = root.shadowRoot?.querySelector('button'); expect(btn).toHaveClass('cat-segment-active'); - expect(btn?.getAttribute('aria-pressed')).toBe('true'); + expect(btn?.getAttribute('aria-checked')).toBe('true'); }); it('renders disabled attribute when disabled', async () => { @@ -142,7 +142,7 @@ describe('cat-segment', () => { const btn = root.shadowRoot?.querySelector('button'); expect(btn).toHaveClasses(['cat-segment-active', 'cat-segment-xl']); - expect(btn?.getAttribute('aria-pressed')).toBe('true'); + expect(btn?.getAttribute('aria-checked')).toBe('true'); expect(btn).toHaveAttribute('disabled'); }); diff --git a/core/src/components/cat-segment/cat-segment.tsx b/core/src/components/cat-segment/cat-segment.tsx index db45c9e5..1d18d362 100644 --- a/core/src/components/cat-segment/cat-segment.tsx +++ b/core/src/components/cat-segment/cat-segment.tsx @@ -45,6 +45,9 @@ export class CatSegment { /** @internal Set by cat-segmented-control. Size of the segment. */ @Prop({ mutable: true }) size: SegmentSize = 'm'; + /** @internal Set by cat-segmented-control for radio roving tabindex. */ + @Prop({ mutable: true }) rovingTabIndex = 0; + /** Renders as data-test on the button element. */ @Prop() testId?: string; @@ -83,6 +86,7 @@ export class CatSegment {
    - - Saved - -
    - -

    Menu Placement Examples

    -
    - - Bottom start (default) - Item 2 - Item 3 - - - - Bottom end - Item 2 - Item 3 - - - - Top start - Item 2 - Item 3 - -
    - -

    Arrow Navigation Modes

    -
    - - - Arrow Up/Down navigation - Default for dropdown menus - Vertical orientation (ARIA) - Standard menu pattern - - - - - Arrow Left/Right navigation - Ideal for toolbar menus - Horizontal orientation (ARIA) - Alternative menu pattern - -
    - - -
    -

    Form

    - - - - - - Submit - -
    - -
    -

    Form Group

    - - - - - -

    Alignment (horizontal)

    - - - This is the label - - - - - - - - - - - -

    Auto (more required)

    - - - - - - -

    Auto (more optional)

    - - - - - - -

    None marker

    - - - - - - -

    Only mark optional

    - - - - - - -

    Only mark required

    - - - - - - -

    Dynamic field added

    - - - - - - -
    - -
    -

    Icon

    - - -

    Color

    - - - - -

    Size

    - - - - - - - -

    Ratio

    - -
    - -
    -

    Input

    - - This is another! - - - Priority Label - - - Loading - -

    Types

    - - - - - - - - - - - -

    Slotted Counter

    - - Show any text here - -
    - -
    -

    Datepicker

    - - - - Priority Label - Priority Hint - - - - - -

    Inline Datepicker (new)

    - -

    Inline Datepicker

    - -

    Datetime

    - -
    -

    Nested Datepicker

    - - Button -
    - - - + +
  • + Saved +
  • +
  • + Files +
  • +
    +
  • Platform
  • +
  • + Administration +
  • +
  • + Analytics +
  • +
  • + Manage hero teaser +
  • +
  • + Reported content +
  • +
    +
  • Settings
  • +
  • + Account +
  • +
  • + Notifications +
  • +
    +
  • Support
  • +
  • + Restart tour +
  • +
  • + Help +
  • +
  • + About +
  • +
    +
  • + Log out +
  • + + + +
    + + + Dropdown inside a card + + Click me + + + + + + Button (keep open) +
    +

    Here is some content.

    + Action +
    +
    + + + Nested dropdown + + +
    + + - -
    -

    Notification

    - Show Notifications - -
    - -
    -

    Pagination

    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - Change event demo (See console) - - -
    - -
    -

    Radio

    - - -

    Group

    - - - - - - -

    State

    - - - - -

    Alignment

    - - -

    Slots

    - - This is the label - This is another! - -
    - -
    -

    Scrollable

    - -

    Lorem ipsum dolor sit amet, consetetur sadipscing elitr.

    -

    Lorem ipsum dolor sit amet, consetetur sadipscing elitr.

    -

    Lorem ipsum dolor sit amet, consetetur sadipscing elitr.

    -

    Lorem ipsum dolor sit amet, consetetur sadipscing elitr.

    -

    Lorem ipsum dolor sit amet, consetetur sadipscing elitr.

    -

    Lorem ipsum dolor sit amet, consetetur sadipscing elitr.

    -

    Lorem ipsum dolor sit amet, consetetur sadipscing elitr.

    -

    Lorem ipsum dolor sit amet, consetetur sadipscing elitr.

    -
    -
    - -
    -

    Segmented Control

    - -

    Default

    - - Option 1 - Option 2 - Option 3 with overflowing content - - -

    Sizes

    - - XS Option 1 - XS Option 2 - XS Option 3 - -
    -
    - - S Option 1 - S Option 2 - S Option 3 - -
    -
    - - M Option 1 - M Option 2 - M Option 3 - -
    -
    - - L Option 1 - L Option 2 - L Option 3 - -
    -
    - - XL Option 1 - XL Option 2 - XL Option 3 - - -

    Disabled

    - - Option 1 - Option 2 - Option 3 - -
    -
    - - Option 1 - Option 2 - Option 3 - - -

    Icons

    - - Option 1 - Option 2 - Option 3 - - -

    Icon Only

    - - - - - -
    -
    - - - - - -
    -
    - - - - - -
    -
    - - - - - -
    -
    - - - - - -
    - -
    -

    Select

    - -
    - -
    -

    Skeleton

    - - -

    Effect

    - -
    - -
    - - -

    Variant

    - - - - - -
    - -
    -

    Spinner

    - - -

    Color

    - - - - -

    Size

    - - - - - - -
    - -
    -

    Tabs

    - - - - - -

    Alignment

    - - - - - -
    -
    - - - - - -
    -
    - - - - - - -

    More

    - - - - - - More + + + + Available - - - - - - - - - - - - - - -
    - -
    -

    Tags

    - - -
    - -
    -

    Textarea

    - -

    Slotted Counter

    - - Show any text here - -

    Counter w/o label

    - -
    - -
    -

    Toggle

    - - This is another! - - - - - - - - -
    - -
    -

    Tooltip

    - - Button - - - Button -
    -

    Tooltip

    -

    This is a fancy tooltip
    with some more lines.

    -
    -
    -

    Size

    - -

    Hover Me (S)

    -
    -
    - -

    Hover Me (S round)

    -
    -
    - -

    Hover Me (M)

    -
    -
    - -

    Hover Me (M round)

    -
    -
    - -

    Hover Me (L)

    -
    -
    - -

    Hover Me (L round)

    -
    -

    Round

    - -

    Hover Me (round)

    -
    -

    Async

    - -

    Hover Me (async)

    -
    - -
    + + Saved +
    + +

    Menu Placement Examples

    +
    + + Bottom start (default) + Item 2 + Item 3 + + + + Bottom end + Item 2 + Item 3 + + + + Top start + Item 2 + Item 3 + +
    + +

    Arrow Navigation Modes

    +
    + + + Arrow Up/Down navigation + Default for dropdown menus + Vertical orientation (ARIA) + Standard menu pattern + + + + + Arrow Left/Right navigation + Ideal for toolbar menus + Horizontal orientation (ARIA) + Alternative menu pattern + +
    + + +
    +

    Form

    +
    + + + + + Submit +
    +
    + +
    +

    Form Group

    + + + + + +

    Alignment (horizontal)

    + + + This is the label + + + + + + + + + + + +

    Auto (more required)

    + + + + + + +

    Auto (more optional)

    + + + + + + +

    None marker

    + + + + + + +

    Only mark optional

    + + + + + + +

    Only mark required

    + + + + + + +

    Dynamic field added

    + + + + + -
    - + - - - - - - - -
    - Switch to Source Sans 3 - Use custom theme -
    - - - - + + + + - - - - + }); + }); + + + From 3a3f338aae5580b8c3219b909c486a8cfb6e9424 Mon Sep 17 00:00:00 2001 From: Nora Simonow Date: Mon, 17 Aug 2026 09:43:40 +0200 Subject: [PATCH 27/42] test: fix test id --- .../cat-segmented-control/cat-segmented-control.spec.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/src/components/cat-segmented-control/cat-segmented-control.spec.tsx b/core/src/components/cat-segmented-control/cat-segmented-control.spec.tsx index 9e07b0f4..528ec0c6 100644 --- a/core/src/components/cat-segmented-control/cat-segmented-control.spec.tsx +++ b/core/src/components/cat-segmented-control/cat-segmented-control.spec.tsx @@ -28,7 +28,7 @@ describe('cat-segmented-control', () => { const { root, waitForChanges } = await render( Option 1 - + Option 2 @@ -37,7 +37,7 @@ describe('cat-segmented-control', () => { const changeListener = vi.fn(); root.addEventListener('catChange', changeListener); - const segment = root.querySelector('[testid="optionTwo"]'); + const segment = root.querySelector('[test-id="optionTwo"]'); expect(segment).not.toBeNull(); segment?.dispatchEvent(new CustomEvent('catSegmentClick', { detail: 'two', bubbles: true, composed: true })); From 7f759e056c4f6bc761fae1fd08240aa0231ed777 Mon Sep 17 00:00:00 2001 From: Nora Simonow Date: Mon, 17 Aug 2026 09:44:31 +0200 Subject: [PATCH 28/42] chore: prettier core --- core/src/index.html | 3602 +++++++++++++++++++++---------------------- 1 file changed, 1801 insertions(+), 1801 deletions(-) diff --git a/core/src/index.html b/core/src/index.html index 66835583..3b658d3e 100644 --- a/core/src/index.html +++ b/core/src/index.html @@ -1,718 +1,886 @@ - - - - Catalyst | StencilJS - - - - - - - - -
    -

    Catalyst Web Components

    - - -
    - - - - - -
    - - View on GitHub - - - Join us on Slack - -
    -
    - - -
    -
    - -
    -
    -

    Alert

    - -

    - Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut - labore et dolore magna aliquyam erat, sed diam voluptua. -

    -
    -

    Color

    - -

    Lorem ipsum dolor dolore magna sit amet.

    -
    - -

    Lorem ipsum dolor dolore magna sit amet.

    -
    - -

    Lorem ipsum dolor dolore magna sit amet.

    -
    - -

    Lorem ipsum dolor dolore magna sit amet.

    -
    - -

    Lorem ipsum dolor dolore magna sit amet.

    -
    -

    Variations

    - -

    - Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut - labore et dolore magna aliquyam erat, sed diam voluptua. -

    -
    - -
    Lorem ipsum dolor sit amet.
    - Lorem ipsum dolor sit amet, consetetur sadipscing elitr. -
    -
    + + + + Catalyst | StencilJS + + + + + + + + +
    +

    Catalyst Web Components

    + + +
    + + + + + +
    + + View on GitHub + + + Join us on Slack + +
    +
    -
    - - - Button with very long content so that it is very wide + +
    +
    + +
    +
    +

    Alert

    + +

    + Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut + labore et dolore magna aliquyam erat, sed diam voluptua. +

    +
    +

    Color

    + +

    Lorem ipsum dolor dolore magna sit amet.

    +
    + +

    Lorem ipsum dolor dolore magna sit amet.

    +
    + +

    Lorem ipsum dolor dolore magna sit amet.

    +
    + +

    Lorem ipsum dolor dolore magna sit amet.

    +
    + +

    Lorem ipsum dolor dolore magna sit amet.

    +
    +

    Variations

    + +

    + Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut + labore et dolore magna aliquyam erat, sed diam voluptua. +

    +
    + +
    Lorem ipsum dolor sit amet.
    + Lorem ipsum dolor sit amet, consetetur sadipscing elitr. +
    +
    + +
    +

    Avatar

    + +

    Variations

    + + + + + +
    + +
    +

    Badge

    + Default + +

    Variant

    + Filled + Outlined + +

    Color

    + Primary + Secondary + Info + Success + Warning + Danger +
    +
    + Primary + Secondary + Info + Success + Warning + Danger + +

    Size

    + Size XS + Size S + Size M + Size L + Size XL +
    +
    + Size XS + Size S + Size M + Size L + Size XL +
    +
    + sdfdsf sdfsdf + sdfdsf sdfsdf + sdfdsf sdfsdf + sdfdsf sdfsdf + sdfdsf sdfsdf + +

    Round

    + Round + + +

    Pulse

    + Pulse + Pulse + + +

    Layout

    + Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut + labore et dolore magna aliquyam erat, sed diam voluptua. + +
    + +
    +

    Button

    + Button + +

    Color & Variant

    + Primary + Primary + Primary + Primary +

    + Secondary + Secondary + Secondary + Secondary +

    + Info + Info + Info + Info +

    + Success + Success + Success + Success +

    + Warning + Warning + Warning + Warning +

    + Danger + Danger + Danger + Danger + +

    Size

    + Size XS + Size S + Size M + Size L + Size XL + +

    Icons

    + Prefix + Suffix + Suffix + +

    Icon buttons

    + + + + + + +

    Icons (Responsive)

    + xs + s + m + l + xl + +

    Links

    + Google + Google (ext.) + +
    + Link 1 + Link 2 +
    + +

    Active

    + Primary + Primary + Primary +

    + Secondary + Secondary -
    + +
    +

    Group button

    + +
    + + Left + Middle + Middle1 + Right + + + + Left + Middle + Right + + + + Left + Middle + Right + +
    +
    + +
    +

    Card

    + +
    + +

    Lorem ipsum dolor sit amet

    +

    + Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut + labore et dolore magna aliquyam erat, sed diam voluptua. +

    +

    + At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata + sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed + diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. +

    +
    +
    +

    Navigation

    +
    + + + +
    +
    + +
    +

    Checkbox

    + + +

    State

    + + + + + Set inteterminate true + Set inteterminate false + Set value true + Set value false + + +

    Alignment

    + + +

    Slots

    + + This is the label + This is another! + +
    + +
    +

    Divider

    +
    + + + + - - + +
    +

    Form

    +
    + + + + + Submit +
    +
    + +
    +

    Form Group

    + + + + + +

    Alignment (horizontal)

    + + + This is the label + + + + + + + + + + + +

    Auto (more required)

    + + + + + + +

    Auto (more optional)

    + + + + + + +

    None marker

    + + + + + + +

    Only mark optional

    + + + + + + +

    Only mark required

    + + + + + + +

    Dynamic field added

    + + + + + + +
    + +
    +

    Icon

    + + +

    Color

    + + + + +

    Size

    + + + + + + + +

    Ratio

    + +
    + +
    +

    Input

    + + This is another! + + + Priority Label + + + Loading + +

    Types

    + + + + + + + + + + + +

    Slotted Counter

    + + Show any text here + +
    + +
    +

    Datepicker

    + + + + Priority Label + Priority Hint + + + + + +

    Inline Datepicker (new)

    + +

    Inline Datepicker

    + +

    Datetime

    + +
    +

    Nested Datepicker

    + + Button +
    + + +
    - - - - Available + +
    + +
    +

    Notification

    + Show Notifications + +
    + +
    +

    Pagination

    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + Change event demo (See console) + + +
    + +
    +

    Radio

    + + +

    Group

    + + + + + + +

    State

    + + + + +

    Alignment

    + + +

    Slots

    + + This is the label + This is another! + +
    + +
    +

    Scrollable

    + +

    Lorem ipsum dolor sit amet, consetetur sadipscing elitr.

    +

    Lorem ipsum dolor sit amet, consetetur sadipscing elitr.

    +

    Lorem ipsum dolor sit amet, consetetur sadipscing elitr.

    +

    Lorem ipsum dolor sit amet, consetetur sadipscing elitr.

    +

    Lorem ipsum dolor sit amet, consetetur sadipscing elitr.

    +

    Lorem ipsum dolor sit amet, consetetur sadipscing elitr.

    +

    Lorem ipsum dolor sit amet, consetetur sadipscing elitr.

    +

    Lorem ipsum dolor sit amet, consetetur sadipscing elitr.

    +
    +
    + +
    +

    Segmented Control

    + +

    Default

    + + Option 1 + Option 2 + Option 3 with overflowing content + + +

    Sizes

    + + XS Option 1 + XS Option 2 + XS Option 3 + +
    +
    + + S Option 1 + S Option 2 + S Option 3 + +
    +
    + + M Option 1 + M Option 2 + M Option 3 + +
    +
    + + L Option 1 + L Option 2 + L Option 3 + +
    +
    + + XL Option 1 + XL Option 2 + XL Option 3 + + +

    Disabled

    + + Option 1 + Option 2 + Option 3 + +
    +
    + + Option 1 + Option 2 + Option 3 + + +

    Icons

    + + Option 1 + Option 2 + Option 3 + + +

    Icon Only

    + + + + + +
    +
    + + + + + +
    +
    + + + + + +
    +
    + + + + + +
    +
    + + + + + +
    + +
    +

    Select

    + +
    + +
    +

    Skeleton

    + + +

    Effect

    + +
    + +
    + + +

    Variant

    + + + + + +
    + +
    +

    Spinner

    + + +

    Color

    + + + + +

    Size

    + + + + + + +
    + +
    +

    Tabs

    + + + + + +

    Alignment

    + + + + + +
    +
    + + + + + +
    +
    + + + + + + +

    More

    + + + + + + More - - Saved - -
    - -

    Menu Placement Examples

    -
    - - Bottom start (default) - Item 2 - Item 3 - - - - Bottom end - Item 2 - Item 3 - - - - Top start - Item 2 - Item 3 - -
    - -

    Arrow Navigation Modes

    -
    - - - Arrow Up/Down navigation - Default for dropdown menus - Vertical orientation (ARIA) - Standard menu pattern - - - - - Arrow Left/Right navigation - Ideal for toolbar menus - Horizontal orientation (ARIA) - Alternative menu pattern - + + + + + + + + + + + + + + + + +
    +

    Tags

    + + +
    + +
    +

    Textarea

    + +

    Slotted Counter

    + + Show any text here + +

    Counter w/o label

    + +
    + +
    +

    Toggle

    + + This is another! + + + + + + + + +
    + +
    +

    Tooltip

    + + Button + + + Button +
    +

    Tooltip

    +

    This is a fancy tooltip
    with some more lines.

    +
    +
    +

    Size

    + +

    Hover Me (S)

    +
    +
    + +

    Hover Me (S round)

    +
    +
    + +

    Hover Me (M)

    +
    +
    + +

    Hover Me (M round)

    +
    +
    + +

    Hover Me (L)

    +
    +
    + +

    Hover Me (L round)

    +
    +

    Round

    + +

    Hover Me (round)

    +
    +

    Async

    + +

    Hover Me (async)

    +
    + +
    - - -
    -

    Form

    -
    - - - - - Submit -
    -
    - -
    -

    Form Group

    - - - - - -

    Alignment (horizontal)

    - - - This is the label - - - - - - - - - - - -

    Auto (more required)

    - - - - - - -

    Auto (more optional)

    - - - - - - -

    None marker

    - - - - - - -

    Only mark optional

    - - - - - - -

    Only mark required

    - - - - - - -

    Dynamic field added

    - - - - - -
    - -
    -

    Icon

    - - -

    Color

    - - - - -

    Size

    - - - - - - - -

    Ratio

    - -
    - -
    -

    Input

    - - This is another! - - - Priority Label - - - Loading - -

    Types

    - - - - - - - - - - - -

    Slotted Counter

    - - Show any text here - -
    +
    +
    -
    -

    Datepicker

    - - - - Priority Label - Priority Hint - - - - - -

    Inline Datepicker (new)

    - -

    Inline Datepicker

    - -

    Datetime

    - -
    -

    Nested Datepicker

    - - Button -
    - - - + + - -
    -
    - - - - - - - - -
    - Switch to Source Sans 3 - Use custom theme -
    - - - - - - + + -
    - + const theme = document.getElementById('toggleTheme'); + theme.addEventListener('click', function () { + if (body.classList.contains('custom-theme')) { + body.classList.remove('custom-theme'); + theme.innerHTML = 'Use custom theme'; + } else { + body.classList.add('custom-theme'); + theme.innerHTML = 'Use default theme'; + } + }); + + + +
    + From 4523827a88bf345ef4b61548a9e9e179af9bee4b Mon Sep 17 00:00:00 2001 From: Nora Simonow Date: Mon, 17 Aug 2026 09:45:34 +0200 Subject: [PATCH 29/42] feat(core): set button type --- core/src/components/cat-segment/cat-segment.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/core/src/components/cat-segment/cat-segment.tsx b/core/src/components/cat-segment/cat-segment.tsx index 1d18d362..e1882302 100644 --- a/core/src/components/cat-segment/cat-segment.tsx +++ b/core/src/components/cat-segment/cat-segment.tsx @@ -86,6 +86,7 @@ export class CatSegment {