Skip to content

[TEST] Facelift on Vibe 3 - #3466

Draft
Mordech wants to merge 35 commits into
version3from
facelift/v3
Draft

[TEST] Facelift on Vibe 3#3466
Mordech wants to merge 35 commits into
version3from
facelift/v3

Conversation

@Mordech

@Mordech Mordech commented Aug 19, 2026

Copy link
Copy Markdown
Member

DRAFT / [TEST] — opened to publish a 3.x prerelease and get eyes on the approach. Do not merge.

Scope of change — what this PR does and does not touch

This PR only adds commits to the new branch facelift/v3 and proposes merging them into version3 later. Nothing else has been modified:

Branch State
version3 (base) Untouched. Still at e0158f583. This PR is a draft; nothing is merged into it.
master (Vibe 4) Untouched, and deliberately not involved. Still at 56a5ab194.
version3-facelift-exploration (the existing v4 facelift branch) Untouched. Still at 8cfcbd7e8. Not rebased, not force-pushed, not deleted. Its 4.6.0-alpha-* prereleases keep working for mf-topbar.
facelift/v3 (this branch) New branch, cut from version3. The only branch written to.

No force-push, no history rewrite, no branch deletion. The prerelease publishes new package versions on the 3.x line and does not overwrite or retag anything already published.

Why this branch exists

The facelift work was originally cut from version3 so the cluster's microfrontends could install it. Commit 84c410d8d then merged origin/master (v4) into it, which flipped @vibe/core to 4.5.3 — so prereleases published as 4.6.0-alpha-*. Only mf-topbar could install those; mf-header (^3.88.3), mf-leftpane (3.81.1), mf-workspace-page (^3.75.0), mf-ai-editor (^3.83.1) and mf-ai-app-builder (^3.83.4) could not. That merge also left the branch a hybrid: TextField.tsx / TabList.tsx kept v3 source while MenuButton.tsx / Dropdown/ took v4.

Merging version3 back into it could not undo that, so this re-applies the facelift onto a clean version3 base. Prereleases from here are @vibe/core@3.89.0-alpha-* and monday-ui-style@0.27.0-alpha-*.

What's in it

Semantic surfaces — six tokens plus paired text colours, added to all seven themes:

--surface-primary:  color-mix(in srgb, var(--primary-color) 12%, transparent);
--surface-positive: color-mix(in srgb, var(--positive-color) 12%, transparent);
--surface-negative: color-mix(in srgb, var(--negative-color) 12%, transparent);
--surface-warning:  color-mix(in srgb, var(--warning-color) 12%, transparent);
--surface-neutral:  color-mix(in srgb, var(--primary-text-color) 12%, transparent);
--surface-info:     color-mix(in srgb, var(--info-color) 12%, transparent);
--text-on-surface-*: one per semantic

color-mix keeps them derived, so overriding a base token flows through and the block is byte-identical in every theme — facelift's indigo --primary-color yields an indigo surface with no per-theme literal. Also adds --info-color, which v3 lacked.

Components — facelift themes (.facelift-{light,dark,black}-app-theme) and --border-radius-full; Tabs sliding indicator; Toast white-surface redesign with semantic icon badge; Chips pill radius plus variant / size; BaseItem check-icon selection; TextField iconPosition; Button icon gap and per-size padding; Label / AttentionBox / Menu restyle; new SegmentedControl.

Chips fill moved from an inline style into CSS — semantic colours use the same color-* class pattern Label already had; the ~40 content colours pass their palette in as a custom property. This removes the need for !important downstream and let isHovered / useSetFocus go, dropping a re-render on every hover.

apps/kitchen-sink — ported and repinned to the v3 line. It sits outside the yarn workspace, so it cannot affect the published packages.

Additive vs. behaviour-changing

Additive (new tokens, new props, new component). Two changes are visible to existing v3 consumers and are intentional:

  • Colors.ts maps the semantics onto the new surfaces, so Label / Chips color="primary" and color="neutral" shift appearance.
  • Toast now portals to document.body; the new inline prop opts out.

Verification

  • yarn build — 20/20 projects
  • tests — core 158 files / 1479 tests, style 917, button 44, icons 13, codemod 627. Root yarn test cannot finish on version3: packages/icons and packages/codemod declare "test": "vitest" without run, so they sit in watch mode. Pre-existing on version3; those two were run with vitest run.
  • yarn lint — 18/18
  • kitchen-sink — build:current and build:original both pass, with the two runtimes correctly isolated

Open questions for a designer

  • dark / black --text-on-surface-* follow each theme's bright base semantics; the Figma section only specifies light
  • --surface-neutral derives from --primary-text-color (no neutral semantic colour exists) and --info-color is the classic monday blue — both are my choice, not the spec
  • --surface-* will not appear in tokens.json: the generator only collects property names containing color and drops var() values, which color-mix is

🤖 Generated with Claude Code

Mordech added 22 commits August 18, 2026 15:16
Port the facelift style foundation onto the version3 base:

- add .facelift-{light,dark,black}-app-theme themes
- add --surface-{primary,positive,negative,warning}-color to the four
  existing themes, plus --info-color-selected/-hover so `info` and the
  deprecated `neutral` element colors resolve on non-facelift themes too
- add --border-radius-full (99px) and allow it in the stylelint rule
- register the facelift themes in generate-colors THEME_PATTERNS and
  regenerate tokens.json
- remap MapStateSelected(Hover)Color onto the new --surface-* vars, add
  `info` and deprecate `neutral`
Component styles that need no markup change:
- ButtonGroup: active segment uses primary fill, disabled uses token colors
- Menu: 8px inner padding, min-width instead of fixed width, overflow visible
- BaseMenuItem: full-width rounded rows, radius moved to the row itself
- MenuItemIcon: fixed 20x20 icon slot; MenuItem label renders as small Label
- MenuItemSubMenu / MenuButton: dialog padding "none" so the menu owns padding
- Label: kindFill switches to --surface-* fills with colored text
- Checkbox / DialogContentContainer / ToastLink: token and radius touch-ups
- root uses `gap: var(--icon-gap)` instead of per-icon margins, so the
  .leftIcon/.rightIcon classes and their className plumbing are dropped
- per-size --icon-gap / --padding-inline, with .hasLeftIcon/.hasRightIcon
  trimming one --space-2 to optically balance the icon side bearing
- medium padding-inline 16px -> 12px, large 24px -> 16px
- loader gets a fixed 20px height; textPlaceholder mirrors the flex gap
- secondary active state drops its primary border

Deviation from the v4 facelift branch: it deleted .marginRight/.marginLeft
while Button.tsx still applied them, silently turning two public props into
no-ops. Both classes are kept here.
- input radius 4px -> 8px (--border-radius-medium)
- medium height 40px -> 36px with text2, large 48px -> 40px
- new `iconPosition="left"` prop: pins the primary icon to the inline start,
  keeps it fully opaque, and reserves 36px of input padding for it

Focus/active already uses --primary-color on version3, so the facelift's
"TextField focus primary" change is a no-op here.
Selection is no longer a filled row background - the row keeps the plain
hover treatment and a trailing Check icon marks the selected item.
Adds .selectedCheck, tightens the row radius to 6px, and lets .endElement
lay out multiple children.
Replaces the per-tab scaleX(0/1) bottom border with a single 2px indicator
rendered once on TabList and slid into place. Position and width are
measured from the active tab's rect in a useLayoutEffect, re-measured via
ResizeObserver, and snap without animation on first paint or when
prefers-reduced-motion is set.

Tabs themselves become borderless pills: secondary text by default, primary
when active, 8px-radius hover background, and shorter list heights
(36/32/40px for medium/small/large).
- normal/positive/negative/warning all render on --primary-background-color
  with --primary-text-color; the type is carried by a 24px round icon badge
  instead of a full-bleed colored surface
- portals to document.body so the toast stacks above app chrome; new
  `inline` prop renders in place for gallery/static previews
- message truncates with ellipsis and gets a Tooltip once it overflows
- close button and action buttons drop to size="xs" and follow the type
  (fixed-light on dark, primary otherwise)
- icon glyph is 16px with its color set inline, to beat app-level
  `svg[class*="icon_"] { color: var(--icon-color) }` rules
- fully rounded pill (--border-radius-full) and a new `variant` prop:
  `default` | `readOnly` | `filterable` (primary-themed toggle with
  default/hover/pressed states, driven by the new `pressed` prop)
- new `size` prop: `medium` (24px) | `small` (20px, text3, 14px icons)
- padding tightens to 4px on sides that carry an icon or avatar
- the close control is absolutely positioned and only revealed on
  hover/focus-within; the resting width is locked in a useLayoutEffect so
  the hover padding truncates the label instead of growing the chip
- new Chips.types.ts (ChipsVariant, ChipsSize), re-exported from index

Chips.colors / Chips.avatarTypes static props are kept, unlike the v4
facelift branch which dropped them.
Ports the facelift's new SegmentedControl: xs/small/medium/large sizes,
optional per-option icon and tooltip, roving-tabindex keyboard navigation.
Registered in the component barrel and in ComponentDefaultTestId /
ComponentVibeId. Icon uses the v3 iconSize prop and useMergeRef comes from
the local hook rather than @vibe/shared.
New tests:
- BaseItem: check icon appears when selected, not when selected + readOnly
- Chips: readOnly ignores onClick and hides close; filterable hides close,
  fires onClick, and sets aria-pressed
- TextField: iconPosition="left" marks the wrapper and icon container, and
  is ignored when there is no icon

Toast.snapshot.test.tsx mocks createPortal as a passthrough, since
react-test-renderer cannot render portals.

Button.test.jsx asserts the new root-level hasLeftIcon class instead of the
removed per-icon leftIcon class.

Refreshed snapshots follow from the facelift styling: Chips, Label, Toast,
TabList, TabsContext, MenuItem, Dropdown, SplitButton, Button, plus the
component-exports snapshot gaining SegmentedControl.
Brings apps/kitchen-sink over from the v4 facelift branch and repoints it at
Vibe 3. It sits outside the yarn workspace, so it cannot affect the
published packages.

- repin both package.json and published-vibe/package.json to the v3 line
  (@vibe/core 3.88.6 etc.) and swap @vibe/style 4.0.0 for monday-ui-style
  0.26.2, which is how the style package is published on v3
- vite configs alias monday-ui-style instead of @vibe/style; Current points
  at the workspace build (facelift themes), Original at the published copy
- main.tsx imports monday-ui-style/dist/index.min.css explicitly: @vibe/core
  declares `sideEffects: ["*.scss","*.css",...]`, so its style-imports.ts is
  treeshaken and the theme CSS never reached the bundle. Previously the
  facelift tokens only existed as a hand-written polyfill in src/styles.css
- Dropdown usages move to @vibe/core/next; on v3 the plain @vibe/core
  Dropdown is still the legacy react-select one
- Icon props follow the v3 API: size -> iconSize (31 sites), label -> iconLabel
- drop `as const` on the ButtonGroup options (v3 wants a mutable array),
  remove `baseUrl` (removed in TS 7), and drop a stray Arduino log.txt

Verified: both `npm run build:current` and `npm run build:original` succeed,
with the two runtimes correctly isolated (facelift indigo present in Current,
absent in Original).
kitchen-sink resolved @types/react 18.3.31 (csstype 3.2.3) while the
workspace sources it aliases resolve the root's 18.2.69 (csstype 3.1.3).
Two csstype copies make React.CSSProperties structurally incompatible,
which broke SubIcon assignability for every @mondaydotcomorg/icons glyph
(27 errors across src/screens). Pin both to the workspace versions.

tsc --noEmit now reports 0 errors.
- prettier collapses the Button icon ternaries onto one line
- Toast.snapshot.test.tsx uses `import type * as ReactDOM` instead of an
  `import()` type annotation, which v3's consistent-type-imports forbids

`yarn lint` now passes for all 18 projects.
Not needed: Vite does not treeshake in dev, so `npm run dev` already loads
@vibe/core's style-imports.ts and, through the workspace alias, the facelift
themes. kitchen-sink carries its own token override in src/styles.css, the
same pattern mf-topbar uses with src/styles/themes/warmth.css.

Only `vite build` output is affected (the sideEffects field lets the theme
CSS be treeshaken there); the dev panes are unaffected.
ResizeObserver.observe() always fires one callback immediately, and the
observer effect depended on updateSelectedIndicator, so it re-subscribed on
every tab change. One frame into the glide that callback ran the
non-animated path, which sets `transition: none` and forces a reflow -
snapping the indicator to its target and killing the animation.

- remember the last applied left/width and make a non-animated update a
  no-op when the geometry has not actually changed, so the observer's
  initial callback cannot interrupt an in-flight transition
- hold the updater in a ref so the observer stays subscribed across tab
  changes instead of tearing down and re-observing each time
Was --primary-text-color, copied from the facelift branch. Matches v3's
previous tab underline, which used var(--primary-color) via .tabWrapper:after.
kitchen-sink's injected Original-pane indicator follows, so both panes agree.
Adds six semantic surfaces and their paired text colours, per the Facelift
"surface colors" spec (Figma 630:106200):

  --surface-primary / -positive / -negative / -warning / -neutral / -info
  --text-on-surface-* for each

The Figma layers are the base colour at 60% alpha, so the surfaces are built
with color-mix() over each theme's existing token rather than hard-coded
hexes. Overriding e.g. --warning-color-selected now flows into
--surface-warning automatically, and one value composites correctly over
light, dark and black.

Verified against the spec's flattened values: primary #e0efff, warning
#fdf3c7 and neutral #f1f2f5 land exactly, positive is within 1/255, negative
within 6/255 (the designer's flatten wasn't precisely 60% of that base).

Wiring:
- Colors.ts maps the six semantics 1:1 onto the surfaces (primary no longer
  borrows --ui-background-color, neutral is a real semantic rather than an
  alias of info) and gains getOnSurfaceTextColor()
- Chips pairs its JS-driven fill with the matching text colour; content
  colors have no pairing and keep the default text colour
- Label kindFill uses the surface + on-surface text for every semantic
- AttentionBox (legacy and next) fills switch to the surfaces; their copy
  stays --primary-text-color, as the design keeps it neutral
- the tokens are documented in colorsMap and listed in kitchen-sink's panel

Facelift's primary surface is indigo (#d4daff at 60% → #e5e9ff). --surface-info
stays the informational blue in every theme, which is the point of having it
once primary moves to indigo. Dark themes follow their own bright base
semantics for on-surface text, since the spec only covers light.

kitchen-sink no longer polyfills the surfaces - the package owns them now.
Its Original-pane simulation keeps working via var() fallbacks to the
pre-facelift tokens.
The close control was pinned to --primary-text-color, so it stayed dark
while the chip's text moved to --text-on-surface-* for semantic colors.
It now uses currentColor and inherits like the leading/trailing icons.

The override is spelled `.icon.close` (three classes) on purpose: the close
control is an IconButton, and its own .kindTertiary.colorOnPrimaryColor rule
sets --text-color-on-primary at two-class specificity, which would otherwise
win or lose on stylesheet order and could render a white icon on a pale
surface.

AttentionBox icons (legacy and next) likewise switch to currentColor so they
track the box's text rather than pinning --primary-text-color.
Root cause, replacing my earlier specificity workaround:

Text renders its own colour class - the label came out as
`typography primary ...`, i.e. --primary-text-color pinned on the element.
A declaration on the element always beats inheritance, so the label ignored
the chip's inline --text-on-surface-* while the icons, being currentColor,
picked it up. Label and icons therefore disagreed. No amount of specificity
on the chip's own rules could fix that, because the competing declaration was
on a different element.

- the label passes color="inherit", so it follows the chip's colour
- the close IconButton drops color="on-primary-color", a leftover from when
  chips had saturated fills; it forced --text-color-on-primary (white) at
  two-class specificity, tying with `.chips .icon` and leaving the outcome to
  stylesheet order. Without it the button only declares
  `.kindTertiary { color: --primary-text-color }` at one class, which
  `.chips .icon { color: currentColor }` beats outright
- reverted the `.icon.close` three-class escalation, no longer needed

Core: 158 files / 1476 tests pass, stylelint unchanged at 100 pre-existing.
Updated rule: each semantic surface is its own colour at 12%, rather than
60% of the *-color-selected token.

  --surface-primary:  color-mix(in srgb, var(--primary-color) 12%, transparent);
  --surface-positive: color-mix(in srgb, var(--positive-color) 12%, transparent);
  --surface-negative: color-mix(in srgb, var(--negative-color) 12%, transparent);
  --surface-warning:  color-mix(in srgb, var(--warning-color) 12%, transparent);
  --surface-neutral:  color-mix(in srgb, var(--primary-text-color) 12%, transparent);
  --surface-info:     color-mix(in srgb, var(--info-color) 12%, transparent);

The formula is now byte-identical in all seven themes: each theme's own base
colour flows through, so facelift's indigo --primary-color yields an indigo
surface with no per-theme literal. The #d4daff hex the previous rule needed
is gone.

Adds --info-color (#0073ea) to every theme. v3 only had
--info-color-selected, and `info` needs a base of its own so it can stay blue
when the brand primary moves to indigo.

Two derivations are mine, not from the spec, and worth a designer check:
- neutral has no semantic colour, so it derives from --primary-text-color,
  which flips correctly between light and dark themes
- --info-color is the classic monday blue
Chips resolved its fill in JS and wrote it to `style`, which is why consumers
needed !important to recolour a chip: nothing but an important author
declaration outranks an inline style. The fill was inline because hover was
modelled in React state (isHovered + useSetFocus), so the value changed per
render.

Semantic colors now use the same `color-*` class pattern Label already has,
reading --surface-* and --text-on-surface-*. The ~40 content colors can't each
have a class, so they pass their palette in as a --chips-surface custom
property; either way `background-color` itself stays in CSS, so hover is a
plain :hover/:focus-within rule.

That lets the JS hover machinery go entirely - isHovered, both mouse handlers
and the useSetFocus call existed only to recompute the background, so this
also drops a re-render on every hover.

Content colors deliberately get no --chips-surface-hover: getElementColor
returns early for them and ignores the hover palette, because no
--color-*-selected-hover token exists. The previous JS hover branch produced
the resting colour for them too, so behaviour is unchanged. A new test pins
this down.

kitchen-sink's chips-theme-* !important fills are deleted - the gallery
already passes `color`, so the component handles it. Two of them had also
drifted: -primary forced --ui-background-color and -info forced
--surface-primary.
Triggers .github/workflows/prerelease.yml so the v3 microfrontends can install
the facelift. Versions derive from this branch's package.json files, so this
publishes @vibe/core@3.89.0-alpha-<sha> and monday-ui-style@0.27.0-alpha-<sha>
rather than the 4.6.0-alpha line the v4 branch produces.
@Mordech
Mordech requested a review from a team as a code owner August 19, 2026 08:58
@Mordech
Mordech marked this pull request as draft August 19, 2026 09:01
@Mordech Mordech changed the title Facelift/v3 [TEST] Facelift on Vibe 3 — semantic surfaces, component restyle, kitchen-sink Aug 19, 2026
@qodo-free-for-open-source-projects

Copy link
Copy Markdown
Contributor

PR Summary by Qodo

Port Facelift themes and components to Vibe v3

✨ Enhancement 🧪 Tests 📝 Documentation ⚙️ Configuration changes 🕐 40+ Minutes

Grey Divider

AI Description

• Adds Facelift themes, semantic surface tokens, and redesigned Vibe v3 components.
• Introduces an interactive kitchen sink with galleries, token editing, and source comparison.
• Adds realistic product screens, component tests, documentation, and local development tooling.
Diagram

graph TD
  A["Facelift themes"] --> B["Generated tokens"] --> C["Vibe components"] --> D["Kitchen sink"] --> E["Product screens"]
  F["Published Vibe"] --> G["Source switcher"] --> D
  C --> G
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Storybook-based review environment
  • ➕ Reuses established controls, documentation, accessibility, and visual-test tooling
  • ➕ Reduces custom gallery, navigation, persistence, and build infrastructure
  • ➖ Less suitable for realistic full-product screens and cross-page workflows
  • ➖ Published-versus-workspace source switching would require custom Storybook integration
2. Single runtime with package namespaces
  • ➕ Avoids two development servers and URL-based state serialization
  • ➕ Allows original and current components to render side by side directly
  • ➖ Raises duplicate React, styling, peer-dependency, and package-resolution risks
  • ➖ Theme globals from both package versions may conflict in one document
3. Split foundation, components, and playground PRs
  • ➕ Makes token and public API changes easier to review and release independently
  • ➕ Reduces regression isolation and rollback risk
  • ➖ Requires temporary compatibility layers between dependent changes
  • ➖ Delays end-to-end visual validation of the complete Facelift experience

Recommendation: Keep the dual-runtime playground approach because it cleanly isolates published and workspace dependency graphs while preserving comparison state. Given the exceptional scope, the safest review and merge strategy would still separate theme foundations, component APIs, and kitchen-sink/product prototypes into staged PRs or commits with independent visual sign-off.

Files changed (227) +39366 / -375

Enhancement (187) +31821 / -245
App.tsxCompose the interactive kitchen-sink shell +37/-0

Compose the interactive kitchen-sink shell

• Routes context-selected views between component grids, galleries, theme editors, and product screens.

apps/kitchen-sink/src/App.tsx

AppThemeShell.tsxApply source-aware themes and overrides +44/-0

Apply source-aware themes and overrides

• Wraps the app with ThemeProvider and applies original or Facelift theme classes plus CSS variable overrides.

apps/kitchen-sink/src/components/AppThemeShell.tsx

ButtonGalleryView.tsxAdd the Button variation gallery +134/-0

Add the Button variation gallery

• Displays Button sizes, kinds, states, icons, and loading variations for visual review.

apps/kitchen-sink/src/components/ButtonGalleryView.tsx

ButtonGroupGalleryView.tsxAdd the published Button Group gallery +80/-0

Add the published Button Group gallery

• Presents ButtonGroup sizes, layouts, states, and option combinations for the original source.

apps/kitchen-sink/src/components/ButtonGroupGalleryView.tsx

ChipsGalleryView.tsxAdd the Chips variation gallery +267/-0

Add the Chips variation gallery

• Demonstrates chip colors, sizes, semantic variants, icons, avatars, disabled states, and interactions.

apps/kitchen-sink/src/components/ChipsGalleryView.tsx

ComponentCard.tsxAdd focusable component preview cards +51/-0

Add focusable component preview cards

• Renders isolated component demos with focus styling and local error containment.

apps/kitchen-sink/src/components/ComponentCard.tsx

ComponentControlBar.tsxAdd dynamic component state controls +58/-0

Add dynamic component state controls

• Builds controls from section metadata and writes changes into shared playground state.

apps/kitchen-sink/src/components/ComponentControlBar.tsx

ComponentGallery.tsxAdd a reusable variation gallery +33/-0

Add a reusable variation gallery

• Provides shared page, grid, item, and preview rendering for component galleries.

apps/kitchen-sink/src/components/ComponentGallery.tsx

ComponentGrid.tsxAdd the component overview grid +31/-0

Add the component overview grid

• Renders ordered component sections with selectable cards and supplied state values.

apps/kitchen-sink/src/components/ComponentGrid.tsx

ComponentsView.tsxBuild the component playground view +62/-0

Build the component playground view

• Combines the component grid with focused controls and source-aware section rendering.

apps/kitchen-sink/src/components/ComponentsView.tsx

DropdownGalleryView.tsxAdd the comprehensive Dropdown gallery +467/-0

Add the comprehensive Dropdown gallery

• Demonstrates sizes, states, multi-select, search, grouping, icons, avatars, tooltips, and box mode.

apps/kitchen-sink/src/components/DropdownGalleryView.tsx

ErrorBoundary.tsxContain gallery rendering failures +21/-0

Contain gallery rendering failures

• Displays a local fallback when a component preview throws instead of crashing the playground.

apps/kitchen-sink/src/components/ErrorBoundary.tsx

IconButtonGalleryView.tsxAdd the IconButton variation gallery +110/-0

Add the IconButton variation gallery

• Shows IconButton kinds, colors, sizes, disabled states, and icon combinations.

apps/kitchen-sink/src/components/IconButtonGalleryView.tsx

LabelGalleryView.tsxAdd the Label variation gallery +50/-0

Add the Label variation gallery

• Displays Label kinds, semantic colors, sizes, and clickable states.

apps/kitchen-sink/src/components/LabelGalleryView.tsx

LeftPane.tsxAdd playground navigation and source switching +163/-0

Add playground navigation and source switching

• Provides component, theme, and screen navigation plus mode selection and state-preserving original/current switching.

apps/kitchen-sink/src/components/LeftPane.tsx

MenuGalleryView.tsxAdd the Menu variation gallery +389/-0

Add the Menu variation gallery

• Covers menu states, labels, titles, dividers, submenus, overflow, tooltips, buttons, sizes, and icons.

apps/kitchen-sink/src/components/MenuGalleryView.tsx

ScreensView.tsxEmbed realistic product screens +17/-0

Embed realistic product screens

• Maps kitchen-sink theme and mode state into the full-screen product prototype.

apps/kitchen-sink/src/components/ScreensView.tsx

SegmentedControlGalleryView.tsxAdd the SegmentedControl gallery +127/-0

Add the SegmentedControl gallery

• Demonstrates sizes, controlled states, icons, tooltips, disabled options, and full-width layouts.

apps/kitchen-sink/src/components/SegmentedControlGalleryView.tsx

TabsGalleryView.tsxAdd the Tabs variation gallery +191/-0

Add the Tabs variation gallery

• Shows tab sizes, icons, disabled states, stretch behavior, and animated indicator layouts.

apps/kitchen-sink/src/components/TabsGalleryView.tsx

TextFieldGalleryView.tsxAdd the TextField variation gallery +129/-0

Add the TextField variation gallery

• Demonstrates field sizes, validation, disabled states, labels, and left or right icons.

apps/kitchen-sink/src/components/TextFieldGalleryView.tsx

ThemeColorSwatch.tsxAdd editable color token swatches +157/-0

Add editable color token swatches

• Supports color and alpha editing, computed token previews, override indication, and individual reset.

apps/kitchen-sink/src/components/ThemeColorSwatch.tsx

ThemeColorsPanel.tsxAdd the theme color editor +99/-0

Add the theme color editor

• Groups editable color tokens and stores overrides independently by theme family and system mode.

apps/kitchen-sink/src/components/ThemeColorsPanel.tsx

ThemePanel.tsxRoute theme editor subpages +18/-0

Route theme editor subpages

• Selects the color, radius, or typography panel from shared navigation state.

apps/kitchen-sink/src/components/ThemePanel.tsx

ThemeRadiusPanel.tsxAdd the radius token editor +64/-0

Add the radius token editor

• Provides live controls for border-radius tokens and persists their CSS variable overrides.

apps/kitchen-sink/src/components/ThemeRadiusPanel.tsx

ThemeTypographyPanel.tsxAdd the typography token editor +137/-0

Add the typography token editor

• Exposes typography families, sizes, weights, and related CSS variables for live customization.

apps/kitchen-sink/src/components/ThemeTypographyPanel.tsx

ToastGalleryView.tsxAdd the Toast variation gallery +135/-0

Add the Toast variation gallery

• Demonstrates inline toast types, actions, close behavior, icons, and long-message truncation.

apps/kitchen-sink/src/components/ToastGalleryView.tsx

componentGalleries.tsxRegister source-aware component galleries +89/-0

Register source-aware component galleries

• Defines gallery order, labels, lazy loading, legacy route migration, and ButtonGroup-to-SegmentedControl pairing.

apps/kitchen-sink/src/components/componentGalleries.tsx

useGlidingTabIndicators.tsAdd reusable gliding tab indicators +134/-0

Add reusable gliding tab indicators

• Measures active tabs and animates indicator geometry while respecting resize and reduced-motion settings.

apps/kitchen-sink/src/components/useGlidingTabIndicators.ts

KitchenSinkContext.tsxCentralize playground state and persistence +205/-0

Centralize playground state and persistence

• Manages navigation, themes, component state, token overrides, source transfer, migration, and debounced local storage.

apps/kitchen-sink/src/context/KitchenSinkContext.tsx

buildThemeConfig.tsBuild Vibe theme-provider overrides +31/-0

Build Vibe theme-provider overrides

• Converts family-specific color overrides into the ThemeProvider configuration shape.

apps/kitchen-sink/src/lib/buildThemeConfig.ts

colorTokenDefinitions.tsDefine editable color tokens +115/-0

Define editable color tokens

• Catalogs token names, descriptions, alpha support, and display grouping for the color editor.

apps/kitchen-sink/src/lib/colorTokenDefinitions.ts

colorUtils.tsAdd color parsing and formatting helpers +47/-0

Add color parsing and formatting helpers

• Parses CSS colors, converts values to hex or RGBA, and reads computed alpha-aware variables.

apps/kitchen-sink/src/lib/colorUtils.ts

cssVarOverrides.tsBuild CSS variable override styles +22/-0

Build CSS variable override styles

• Combines radius, spacing, typography, and active-family color overrides into React styles.

apps/kitchen-sink/src/lib/cssVarOverrides.ts

defaultComponentStates.tsDefine default component playground states +50/-0

Define default component playground states

• Provides initial states and merges persisted component values safely with current defaults.

apps/kitchen-sink/src/lib/defaultComponentStates.ts

storage.tsPersist and migrate playground state +131/-0

Persist and migrate playground state

• Validates stored navigation, migrates color and component routes, restores defaults, and versions serialized state.

apps/kitchen-sink/src/lib/storage.ts

themeColorKeys.tsMap theme color override keys +27/-0

Map theme color override keys

• Defines the supported color keys and conversions needed by ThemeProvider and CSS variables.

apps/kitchen-sink/src/lib/themeColorKeys.ts

tokenDefinitions.tsDefine editable design-token groups +51/-0

Define editable design-token groups

• Provides empty override structures and radius, spacing, and typography token metadata.

apps/kitchen-sink/src/lib/tokenDefinitions.ts

typographyTokenDefinitions.tsCatalog typography tokens and presets +479/-0

Catalog typography tokens and presets

• Defines editable typography variables, descriptions, allowed values, and preview metadata.

apps/kitchen-sink/src/lib/typographyTokenDefinitions.ts

vibeSource.tsTransfer state between Vibe sources +42/-0

Transfer state between Vibe sources

• Detects the active runtime and serializes playground state while switching between current and published servers.

apps/kitchen-sink/src/lib/vibeSource.ts

main.tsxBootstrap the kitchen-sink application +13/-0

Bootstrap the kitchen-sink application

• Imports required styles and mounts the provider-backed React application.

apps/kitchen-sink/src/main.tsx

App.module.scssStyle the product-screen application root +29/-0

Style the product-screen application root

• Defines board-area, sticky-header, and workspace layout styling for the screen prototype.

apps/kitchen-sink/src/screens/App.module.scss

App.tsxAdd standalone screen-prototype orchestration +489/-0

Add standalone screen-prototype orchestration

• Composes routed product views, theme controls, fonts, mode changes, board state, modals, and notifications.

apps/kitchen-sink/src/screens/App.tsx

ScreensApp.tsxIntegrate product screens into the playground +302/-0

Integrate product screens into the playground

• Coordinates hash routes, contexts, board views, themes, modes, overlays, and product navigation.

apps/kitchen-sink/src/screens/ScreensApp.tsx

boardViews.tsxDefine available board views +34/-0

Define available board views

• Catalogs standard and Vibe-powered board view identifiers, labels, and icons.

apps/kitchen-sink/src/screens/board/boardViews.tsx

gridTemplate.tsBuild resizable board grid templates +16/-0

Build resizable board grid templates

• Defines minimum widths and generates shared CSS grid column layouts.

apps/kitchen-sink/src/screens/board/gridTemplate.ts

AgentBuilderConfig.module.scssStyle the agent configuration workflow +76/-0

Style the agent configuration workflow

• Defines configuration modal layout, controls, avatar selection, and responsive interactions.

apps/kitchen-sink/src/screens/components/AgentBuilderConfig.module.scss

AgentBuilderConfig.tsxAdd the agent configuration workflow +1160/-0

Add the agent configuration workflow

• Implements agent naming, expertise, avatar customization, prompt configuration, and workflow navigation.

apps/kitchen-sink/src/screens/components/AgentBuilderConfig.tsx

AgentBuilderModal.tsxRoute agent builder modal states +27/-0

Route agent builder modal states

• Chooses between agent configuration and onboarding overlays from shared builder context.

apps/kitchen-sink/src/screens/components/AgentBuilderModal.tsx

AgentBuilderOnboarding.module.scssStyle agent onboarding interactions +92/-0

Style agent onboarding interactions

• Defines onboarding controls, prompt composer effects, tabs, and interactive button states.

apps/kitchen-sink/src/screens/components/AgentBuilderOnboarding.module.scss

AgentBuilderOnboarding.tsxAdd interactive agent onboarding +1525/-0

Add interactive agent onboarding

• Builds a full-screen onboarding conversation, agent preview, trigger controls, instructions, and animated greeting.

apps/kitchen-sink/src/screens/components/AgentBuilderOnboarding.tsx

AgentsPage.module.scssStyle the Agents landing page +161/-0

Style the Agents landing page

• Defines agent cards, hero content, recommendations, and responsive page layout.

apps/kitchen-sink/src/screens/components/AgentsPage.module.scss

AgentsPage.tsxAdd the Agents landing page +222/-0

Add the Agents landing page

• Presents agent discovery, recent agents, creation actions, and navigation into management flows.

apps/kitchen-sink/src/screens/components/AgentsPage.tsx

AppMainContent.module.scssStyle routed product content +360/-0

Style routed product content

• Defines common product heroes, cards, composers, utility pages, and routed content layouts.

apps/kitchen-sink/src/screens/components/AppMainContent.module.scss

AppMainContent.tsxRoute product navigation content +318/-0

Route product navigation content

• Maps rail selections to workspace, Sidekick, Agents, Vibe, Notetaker, and utility pages.

apps/kitchen-sink/src/screens/components/AppMainContent.tsx

BoardGroup.module.scssStyle interactive board groups +358/-0

Style interactive board groups

• Defines board headers, grid rows, cells, resizing, hover states, and group controls.

apps/kitchen-sink/src/screens/components/BoardGroup.module.scss

BoardGroup.tsxAdd interactive board groups +330/-0

Add interactive board groups

• Renders resizable board columns, items, status cells, group actions, and detail-opening behavior.

apps/kitchen-sink/src/screens/components/BoardGroup.tsx

BoardGroupDevToolbar.module.scssStyle board development controls +21/-0

Style board development controls

• Defines the compact toolbar used to inspect or adjust board-group demonstrations.

apps/kitchen-sink/src/screens/components/BoardGroupDevToolbar.module.scss

BoardGroupDevToolbar.tsxAdd board development controls +44/-0

Add board development controls

• Provides prototype-only actions for changing and inspecting board-group presentation.

apps/kitchen-sink/src/screens/components/BoardGroupDevToolbar.tsx

BoardGroupFooter.tsxAdd board group summaries +110/-0

Add board group summaries

• Renders aggregate footer values and actions aligned to the board's resizable columns.

apps/kitchen-sink/src/screens/components/BoardGroupFooter.tsx

BoardHeader.module.scssStyle board header navigation +32/-0

Style board header navigation

• Defines board title, view tabs, actions, and responsive header layout.

apps/kitchen-sink/src/screens/components/BoardHeader.module.scss

BoardHeader.tsxAdd board header and view switching +172/-0

Add board header and view switching

• Renders board metadata, actions, view selectors, and item-creation controls.

apps/kitchen-sink/src/screens/components/BoardHeader.tsx

ChipsNav.module.scssStyle chip-based navigation +128/-0

Style chip-based navigation

• Defines horizontal chip navigation, selected states, overflow, and animated indicators.

apps/kitchen-sink/src/screens/components/ChipsNav.module.scss

ChipsNav.tsxAdd chip-based screen navigation +163/-0

Add chip-based screen navigation

• Provides selectable navigation chips with overflow handling and a gliding active indicator.

apps/kitchen-sink/src/screens/components/ChipsNav.tsx

FaceliftDocPage.module.scssStyle the Facelift document screen +226/-0

Style the Facelift document screen

• Defines editor chrome, toolbar, document content, metadata, comments, and responsive behavior.

apps/kitchen-sink/src/screens/components/FaceliftDocPage.module.scss

FaceliftDocPage.tsxAdd a realistic document editor screen +499/-0

Add a realistic document editor screen

• Builds a document toolbar, metadata, rich content, collaboration controls, and supporting panels.

apps/kitchen-sink/src/screens/components/FaceliftDocPage.tsx

GlassAgentTile.module.scssStyle glass agent avatars +33/-0

Style glass agent avatars

• Defines layered translucent agent-tile visuals and variant-specific treatments.

apps/kitchen-sink/src/screens/components/GlassAgentTile.module.scss

GlassAgentTile.tsxAdd reusable glass agent tiles +95/-0

Add reusable glass agent tiles

• Renders coded visual variants for agent avatars used across navigation and management screens.

apps/kitchen-sink/src/screens/components/GlassAgentTile.tsx

InviteBoardModal.module.scssStyle the board invitation modal +285/-0

Style the board invitation modal

• Defines invite fields, permission controls, member rows, actions, and modal layout.

apps/kitchen-sink/src/screens/components/InviteBoardModal.module.scss

InviteBoardModal.tsxAdd the board invitation workflow +235/-0

Add the board invitation workflow

• Implements invitation entry, permissions, existing-member display, copy link, and submission feedback.

apps/kitchen-sink/src/screens/components/InviteBoardModal.tsx

ItemDetailsPanel.module.scssStyle the item details panel +396/-0

Style the item details panel

• Defines the sliding detail panel, updates, metadata, actions, and responsive behavior.

apps/kitchen-sink/src/screens/components/ItemDetailsPanel.module.scss

ItemDetailsPanel.tsxAdd board item details +217/-0

Add board item details

• Displays item metadata, activity, updates, controls, and close behavior in an overlay panel.

apps/kitchen-sink/src/screens/components/ItemDetailsPanel.tsx

LeftPaneContent.module.scssStyle product navigation panels +1588/-0

Style product navigation panels

• Defines workspace trees, Sidekick chats, agents, utilities, search, and responsive left-panel states.

apps/kitchen-sink/src/screens/components/LeftPaneContent.module.scss

LeftPaneContent.tsxAdd contextual product navigation +1541/-0

Add contextual product navigation

• Builds workspace, Sidekick, agent, Vibe, Notetaker, favorite, and utility navigation panels.

apps/kitchen-sink/src/screens/components/LeftPaneContent.tsx

MainLayout.module.scssStyle the complete product shell +475/-0

Style the complete product shell

• Defines top bar, navigation rail, resizable workspace panel, page content, and collapsed layouts.

apps/kitchen-sink/src/screens/components/MainLayout.module.scss

MainLayout.tsxAdd the complete product shell +326/-0

Add the complete product shell

• Composes top navigation, search, rail navigation, resizable left panel, and routed page content.

apps/kitchen-sink/src/screens/components/MainLayout.tsx

ManageAgentsPage.module.scssStyle agent management views +248/-0

Style agent management views

• Defines management tables, filters, cards, actions, and responsive layouts.

apps/kitchen-sink/src/screens/components/ManageAgentsPage.module.scss

ManageAgentsPage.tsxAdd the agent management page +212/-0

Add the agent management page

• Presents managed agents, status and ownership metadata, filtering, and configuration entry points.

apps/kitchen-sink/src/screens/components/ManageAgentsPage.tsx

NavigationRail.module.scssStyle the product navigation rail +160/-0

Style the product navigation rail

• Defines rail buttons, active states, badges, tooltips, and collapsed-panel affordances.

apps/kitchen-sink/src/screens/components/NavigationRail.module.scss

NavigationRail.tsxAdd primary product navigation +201/-0

Add primary product navigation

• Provides accessible rail navigation for workspace, Sidekick, Agents, Vibe, Notetaker, and utilities.

apps/kitchen-sink/src/screens/components/NavigationRail.tsx

NotetakerPage.module.scssStyle the Notetaker page +106/-0

Style the Notetaker page

• Defines meeting cards, onboarding content, integrations, and page actions.

apps/kitchen-sink/src/screens/components/NotetakerPage.module.scss

NotetakerPage.tsxAdd the Notetaker product screen +261/-0

Add the Notetaker product screen

• Presents upcoming meetings, recordings, summaries, and Notetaker setup actions.

apps/kitchen-sink/src/screens/components/NotetakerPage.tsx

ProductLogos.module.scssStyle product logo artwork +56/-0

Style product logo artwork

• Defines sizing and presentation for reusable monday product marks.

apps/kitchen-sink/src/screens/components/ProductLogos.module.scss

ProductLogos.tsxAdd reusable product logos +179/-0

Add reusable product logos

• Provides SVG marks and wordmarks used by the top bar and product pages.

apps/kitchen-sink/src/screens/components/ProductLogos.tsx

ResponseStream.tsxAdd streaming response animations +393/-0

Add streaming response animations

• Supports typewriter and fade rendering for static or asynchronous text streams with pause and reset controls.

apps/kitchen-sink/src/screens/components/ResponseStream.tsx

SidekickChatPage.module.scssStyle the Sidekick chat experience +420/-0

Style the Sidekick chat experience

• Defines messages, streaming responses, sources, composer controls, and full-bleed chat layout.

apps/kitchen-sink/src/screens/components/SidekickChatPage.module.scss

SidekickChatPage.tsxAdd interactive Sidekick chats +425/-0

Add interactive Sidekick chats

• Renders scenario-driven conversations, streamed responses, prompts, sources, and chat composer interactions.

apps/kitchen-sink/src/screens/components/SidekickChatPage.tsx

SidekickPage.module.scssStyle the Sidekick landing page +226/-0

Style the Sidekick landing page

• Defines hero, recent chats, prompt suggestions, and discovery content.

apps/kitchen-sink/src/screens/components/SidekickPage.module.scss

SidekickPage.tsxAdd the Sidekick landing page +208/-0

Add the Sidekick landing page

• Presents prompt entry, suggested tasks, recent conversations, and transitions into chat scenarios.

apps/kitchen-sink/src/screens/components/SidekickPage.tsx

SidekickPromptEditor.module.scssStyle the Sidekick prompt editor +135/-0

Style the Sidekick prompt editor

• Defines editor focus, attachments, action controls, and glowing cursor effects.

apps/kitchen-sink/src/screens/components/SidekickPromptEditor.module.scss

SidekickPromptEditor.tsxAdd a reusable Sidekick prompt editor +86/-0

Add a reusable Sidekick prompt editor

• Provides controlled prompt input, keyboard submission, attachment controls, and animated focus feedback.

apps/kitchen-sink/src/screens/components/SidekickPromptEditor.tsx

StatusCell.module.scssStyle board status cells +31/-0

Style board status cells

• Defines semantic status fills, labels, and interactive cell presentation.

apps/kitchen-sink/src/screens/components/StatusCell.module.scss

StatusCell.tsxAdd reusable board status cells +62/-0

Add reusable board status cells

• Maps board status values to semantic colors and renders selectable status content.

apps/kitchen-sink/src/screens/components/StatusCell.tsx

ThemeSwitcher.module.scssStyle the screen theme switcher +332/-0

Style the screen theme switcher

• Defines theme palettes, mode controls, font selectors, custom-font management, and popover behavior.

apps/kitchen-sink/src/screens/components/ThemeSwitcher.module.scss

ThemeSwitcher.tsxAdd screen theme and font controls +520/-0

Add screen theme and font controls

• Supports theme presets, light or dark modes, curated fonts, verified Google Fonts, and removable custom choices.

apps/kitchen-sink/src/screens/components/ThemeSwitcher.tsx

VibeAppBoardView.module.scssStyle Vibe-generated board views +242/-0

Style Vibe-generated board views

• Defines embedded app cards, empty states, and board integration layout.

apps/kitchen-sink/src/screens/components/VibeAppBoardView.module.scss

VibeAppBoardView.tsxAdd Vibe app board content +76/-0

Add Vibe app board content

• Displays generated app experiences when a Vibe-specific board view is selected.

apps/kitchen-sink/src/screens/components/VibeAppBoardView.tsx

VibePage.module.scssStyle the Vibe builder page +777/-0

Style the Vibe builder page

• Defines prompt, template, preview, builder, and generated-app layouts.

apps/kitchen-sink/src/screens/components/VibePage.module.scss

VibePage.tsxAdd the Vibe product experience +385/-0

Add the Vibe product experience

• Presents app-generation prompts, templates, recent creations, and interactive builder content.

apps/kitchen-sink/src/screens/components/VibePage.tsx

agentBuilderData.tsxAdd agent builder visual data +1407/-0

Add agent builder visual data

• Defines agent presets, avatar artwork, expertise options, and reusable visual renderers.

apps/kitchen-sink/src/screens/components/agentBuilderData.tsx

ai-icons.tsxAdd prototype AI icons +25/-0

Add prototype AI icons

• Provides local SVG icon components used by agent and Sidekick experiences.

apps/kitchen-sink/src/screens/components/ai-icons.tsx

ImageWithFallback.module.scssStyle image fallback states +11/-0

Style image fallback states

• Defines loading and missing-image presentation for imported design assets.

apps/kitchen-sink/src/screens/components/figma/ImageWithFallback.module.scss

ImageWithFallback.tsxAdd resilient design-asset images +42/-0

Add resilient design-asset images

• Displays imported images with a graceful fallback when loading fails.

apps/kitchen-sink/src/screens/components/figma/ImageWithFallback.tsx

types.tsDefine product-screen domain types +37/-0

Define product-screen domain types

• Adds shared board group, item, status, and column-width data structures.

apps/kitchen-sink/src/screens/components/types.ts

AgentBuilderContext.tsxManage agent builder workflows +97/-0

Manage agent builder workflows

• Coordinates builder modal state, selected agent configuration, onboarding, and open or close actions.

apps/kitchen-sink/src/screens/context/AgentBuilderContext.tsx

AgentsViewContext.tsxManage Agents subviews +53/-0

Manage Agents subviews

• Shares Agents home, management, and feed navigation with route synchronization.

apps/kitchen-sink/src/screens/context/AgentsViewContext.tsx

SidekickViewContext.tsxManage Sidekick chat navigation +77/-0

Manage Sidekick chat navigation

• Tracks landing and chat states, selected scenarios, titles, and route callbacks.

apps/kitchen-sink/src/screens/context/SidekickViewContext.tsx

WorkspaceSelectionContext.tsxManage workspace selection +45/-0

Manage workspace selection

• Shares the active workspace and selection updates across product navigation components.

apps/kitchen-sink/src/screens/context/WorkspaceSelectionContext.tsx

initialGroups.tsSeed board groups and items +103/-0

Seed board groups and items

• Provides realistic initial group, item, owner, status, priority, and date data.

apps/kitchen-sink/src/screens/data/initialGroups.ts

manageAgents.tsSeed agent management data +82/-0

Seed agent management data

• Defines managed agent records, statuses, ownership, and usage metadata.

apps/kitchen-sink/src/screens/data/manageAgents.ts

promptChips.tsSeed prompt suggestions +44/-0

Seed prompt suggestions

• Provides categorized prompt-chip content for Sidekick and Vibe experiences.

apps/kitchen-sink/src/screens/data/promptChips.ts

sidekickChatScenarios.tsxDefine Sidekick chat scenarios +652/-0

Define Sidekick chat scenarios

• Adds detailed scenario messages, responses, rich content, and source references for interactive chats.

apps/kitchen-sink/src/screens/data/sidekickChatScenarios.tsx

sidekickChats.tsSeed Sidekick conversation history +14/-0

Seed Sidekick conversation history

• Defines recent chat identifiers and labels for navigation.

apps/kitchen-sink/src/screens/data/sidekickChats.ts

sidekickResponses.tsSeed Sidekick response content +102/-0

Seed Sidekick response content

• Provides reusable generated-response text and supporting metadata.

apps/kitchen-sink/src/screens/data/sidekickResponses.ts

vibeHome.tsSeed Vibe home content +290/-0

Seed Vibe home content

• Defines templates, recent apps, categories, and example prompts for the Vibe page.

apps/kitchen-sink/src/screens/data/vibeHome.ts

workspaceNavTree.tsDefine the workspace navigation tree +131/-0

Define the workspace navigation tree

• Provides nested folders, boards, documents, icons, and initial expansion state.

apps/kitchen-sink/src/screens/data/workspaceNavTree.ts

demoPeople.tsSeed reusable demo people +9/-0

Seed reusable demo people

• Defines sample user identities and avatars shared by product screens.

apps/kitchen-sink/src/screens/demo/demoPeople.ts

useCursorGlow.tsAdd cursor-following glow effects +26/-0

Add cursor-following glow effects

• Tracks pointer position and exposes CSS variables for interactive glowing surfaces.

apps/kitchen-sink/src/screens/hooks/useCursorGlow.ts

useDocumentColumnResize.tsAdd document column resizing +56/-0

Add document column resizing

• Manages pointer-driven column resizing with width constraints and cleanup.

apps/kitchen-sink/src/screens/hooks/useDocumentColumnResize.ts

svg-5v47xpc9uc.tsAdd imported SVG path data +64/-0

Add imported SVG path data

• Stores generated path definitions used by agent builder artwork.

apps/kitchen-sink/src/screens/imports/svg-5v47xpc9uc.ts

svg-rt86nqhfv4.tsAdd supporting SVG path data +6/-0

Add supporting SVG path data

• Stores generated path definitions used by imported prototype graphics.

apps/kitchen-sink/src/screens/imports/svg-rt86nqhfv4.ts

svg-s2yy1.tsxAdd an imported SVG component +2/-0

Add an imported SVG component

• Provides generated SVG markup required by the screen prototype.

apps/kitchen-sink/src/screens/imports/svg-s2yy1.tsx

hashRoute.tsAdd shareable screen hash routes +169/-0

Add shareable screen hash routes

• Parses and builds rail, board, agent, chat, theme, mode, and font route state.

apps/kitchen-sink/src/screens/routing/hashRoute.ts

facelift-theme.cssAdd screen-specific Facelift tokens +402/-0

Add screen-specific Facelift tokens

• Defines prototype theme variables for colors, surfaces, typography, spacing, and product presentation.

apps/kitchen-sink/src/screens/styles/facelift-theme.css

globals.cssAdd global product-screen styles +1031/-0

Add global product-screen styles

• Establishes resets, theme variants, typography, animations, shared controls, and prototype utility styles.

apps/kitchen-sink/src/screens/styles/globals.css

section.tsDefine the section module contract +1/-0

Define the section module contract

• Exports the shared type used by interactive component section modules.

apps/kitchen-sink/src/section.ts

Button.section.tsxAdd the interactive Button section +80/-0

Add the interactive Button section

• Defines Button defaults, configurable controls, and the state-driven preview renderer.

apps/kitchen-sink/src/sections/Button.section.tsx

ButtonGroup.section.tsxPair ButtonGroup and SegmentedControl sections +119/-0

Pair ButtonGroup and SegmentedControl sections

• Renders published ButtonGroup or current SegmentedControl under one source-stable section identifier.

apps/kitchen-sink/src/sections/ButtonGroup.section.tsx

Chip.section.tsxAdd the interactive Chip section +54/-0

Add the interactive Chip section

• Defines chip defaults, controls, and source-compatible preview behavior.

apps/kitchen-sink/src/sections/Chip.section.tsx

Dropdown.section.tsxAdd the interactive Dropdown section +60/-0

Add the interactive Dropdown section

• Defines dropdown defaults and controls for size, disabled, and multi-select behavior.

apps/kitchen-sink/src/sections/Dropdown.section.tsx

IconButton.section.tsxAdd the interactive IconButton section +54/-0

Add the interactive IconButton section

• Defines configurable kind, size, and disabled states for IconButton previews.

apps/kitchen-sink/src/sections/IconButton.section.tsx

Label.section.tsxAdd the interactive Label section +48/-0

Add the interactive Label section

• Defines configurable semantic color, kind, and size states for Label previews.

apps/kitchen-sink/src/sections/Label.section.tsx

Menu.section.tsxAdd the ...

@qodo-free-for-open-source-projects

qodo-free-for-open-source-projects Bot commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

Code Review by Qodo

🐞 Bugs (8) 📘 Rule violations (2) 📎 Requirement gaps (0) 🎨 UX issues (0) 🔗 Cross-repo conflicts (0) 📜 Skill insights (0)

Grey Divider


Action required

1. SCSS module imports external font 📘 Rule violation ⚙ Maintainability
Description
VibeAppBoardView.module.scss adds an @import statement, which is explicitly forbidden in CSS
Module files. This also introduces a runtime dependency on an external stylesheet.
Code

apps/kitchen-sink/src/screens/components/VibeAppBoardView.module.scss[1]

+@import url("https://fonts.googleapis.com/css2?family=Playfair+Display:wght@400;500;600;700&family=Syne:wght@600;700&display=swap");
Evidence
Compliance rule 4 forbids any import statement in a .module.scss file, while the newly created CSS
Module begins with an external Google Fonts @import.

CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files: CLAUDE.md: Styles must use CSS Modules, design tokens, and forbid imports in .module.scss files
apps/kitchen-sink/src/screens/components/VibeAppBoardView.module.scss[1-1]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`VibeAppBoardView.module.scss` imports Google Fonts despite the prohibition on imports in `.module.scss` files.
## Issue Context
Load or declare the required fonts outside the component CSS Module, while retaining CSS Modules and design tokens for component styling.
## Fix Focus Areas
- apps/kitchen-sink/src/screens/components/VibeAppBoardView.module.scss[1-1]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


2. Toast tests bypass portal behavior 📘 Rule violation ☼ Reliability
Description
The updated Toast snapshot test replaces createPortal with an identity function instead of testing
portal and DOM-dependent behavior. It therefore does not validate the newly changed rendering,
truncation, tooltip, test-ID, or relevant accessibility behavior in a real DOM.
Code

packages/core/src/components/Toast/tests/Toast.snapshot.test.tsx[12]

+    createPortal: (node: React.ReactNode) => node
Evidence
Compliance rule 5 requires tests to assert real DOM behavior, accessibility attributes, and
established test-ID patterns. The changed test instead mocks createPortal to return its node
directly, while Toast's changed implementation depends on portal placement and actual DOM
measurements for truncation and tooltip behavior.

CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns: CLAUDE.md: Component tests must validate real behavior and accessibility attributes using established test ID patterns
packages/core/src/components/Toast/tests/Toast.snapshot.test.tsx[7-14]
packages/core/src/components/Toast/Toast.tsx[172-204]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The Toast test bypasses portal rendering and continues to rely on snapshots, leaving the changed DOM behavior unverified.
## Issue Context
Use Vitest and Testing Library with a real DOM to exercise portal versus inline rendering, overflow-triggered tooltip behavior, established Toast test IDs, and relevant accessibility attributes.
## Fix Focus Areas
- packages/core/src/components/Toast/__tests__/Toast.snapshot.test.tsx[7-14]
- packages/core/src/components/Toast/Toast.tsx[172-204]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


3. Toast escapes scoped themes 🐞 Bug ≡ Correctness
Description
Portaling Toast to document.body moves it outside the wrapper where ThemeProvider scopes custom
theme variables. Toasts under nested or custom providers therefore render using the body's theme
rather than their provider's configured colors and tokens.
Code

packages/core/src/components/Toast/Toast.tsx[R258-260]

+      {toastElement}
+    </CSSTransition>,
+    document.body
Evidence
Toast now portals beneath document.body, while ThemeProvider explicitly scopes custom themes to
its wrapping div. Toast styling consumes inherited CSS variables, so the portaled element is no
longer a descendant of the configured theme scope.

packages/core/src/components/Toast/Toast.tsx[244-260]
packages/core/src/components/ThemeProvider/ThemeProvider.tsx[101-107]
packages/core/src/components/Toast/Toast.module.scss[3-35]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
Toast portals to `document.body`, escaping scoped `ThemeProvider` styles and rendering with the wrong theme.
## Issue Context
`ThemeProvider` applies generated theme classes to a wrapper div, while Toast depends on inherited CSS variables such as `--primary-background-color`.
## Fix Focus Areas
- packages/core/src/components/Toast/Toast.tsx[244-260]
- packages/core/src/components/ThemeProvider/ThemeProvider.tsx[101-107]
- packages/core/src/components/Toast/Toast.module.scss[3-35]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


View action required (2)
4. Toast crashes server rendering 🐞 Bug ☼ Reliability
Description
Every non-inline Toast now reads document.body synchronously during render. Rendering Toast during
SSR or prerendering throws ReferenceError: document is not defined, whereas the previous
implementation did not access browser globals during render.
Code

packages/core/src/components/Toast/Toast.tsx[R249-260]

+  // Portal to body so Toast always stacks above app chrome (search, sticky headers).
+  return createPortal(
+    <CSSTransition
+      in={open}
+      nodeRef={nodeRef}
+      classNames={{ enterActive: styles.enterActive, exitActive: styles.exitActive }}
+      timeout={400}
+      unmountOnExit
+    >
+      {toastElement}
+    </CSSTransition>,
+    document.body
Evidence
The new render path unconditionally passes document.body to createPortal. Existing portaled
components demonstrate the repository's required isClient() guard for SSR-safe rendering.

[packages/core/src/components/Toast/Toast.tsx[244-260]](...

@@ -0,0 +1,242 @@
@import url("https://fonts.googleapis.com/css2?family=Playfair+Display:wght@400;500;600;700&family=Syne:wght@600;700&display=swap");

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Action required

1. Scss module imports external font 📘 Rule violation ⚙ Maintainability

VibeAppBoardView.module.scss adds an @import statement, which is explicitly forbidden in CSS
Module files. This also introduces a runtime dependency on an external stylesheet.
Agent Prompt
## Issue description
`VibeAppBoardView.module.scss` imports Google Fonts despite the prohibition on imports in `.module.scss` files.

## Issue Context
Load or declare the required fonts outside the component CSS Module, while retaining CSS Modules and design tokens for component styling.

## Fix Focus Areas
- apps/kitchen-sink/src/screens/components/VibeAppBoardView.module.scss[1-1]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

const actual = await vi.importActual<typeof ReactDOM>("react-dom");
return {
...actual,
createPortal: (node: React.ReactNode) => node

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Action required

2. Toast tests bypass portal behavior 📘 Rule violation ☼ Reliability

The updated Toast snapshot test replaces createPortal with an identity function instead of testing
portal and DOM-dependent behavior. It therefore does not validate the newly changed rendering,
truncation, tooltip, test-ID, or relevant accessibility behavior in a real DOM.
Agent Prompt
## Issue description
The Toast test bypasses portal rendering and continues to rely on snapshots, leaving the changed DOM behavior unverified.

## Issue Context
Use Vitest and Testing Library with a real DOM to exercise portal versus inline rendering, overflow-triggered tooltip behavior, established Toast test IDs, and relevant accessibility attributes.

## Fix Focus Areas
- packages/core/src/components/Toast/__tests__/Toast.snapshot.test.tsx[7-14]
- packages/core/src/components/Toast/Toast.tsx[172-204]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Comment on lines +258 to +260
{toastElement}
</CSSTransition>,
document.body

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Action required

3. Toast escapes scoped themes 🐞 Bug ≡ Correctness

Portaling Toast to document.body moves it outside the wrapper where ThemeProvider scopes custom
theme variables. Toasts under nested or custom providers therefore render using the body's theme
rather than their provider's configured colors and tokens.
Agent Prompt
## Issue description
Toast portals to `document.body`, escaping scoped `ThemeProvider` styles and rendering with the wrong theme.

## Issue Context
`ThemeProvider` applies generated theme classes to a wrapper div, while Toast depends on inherited CSS variables such as `--primary-background-color`.

## Fix Focus Areas
- packages/core/src/components/Toast/Toast.tsx[244-260]
- packages/core/src/components/ThemeProvider/ThemeProvider.tsx[101-107]
- packages/core/src/components/Toast/Toast.module.scss[3-35]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Comment on lines +249 to +260
// Portal to body so Toast always stacks above app chrome (search, sticky headers).
return createPortal(
<CSSTransition
in={open}
nodeRef={nodeRef}
classNames={{ enterActive: styles.enterActive, exitActive: styles.exitActive }}
timeout={400}
unmountOnExit
>
{toastElement}
</CSSTransition>,
document.body

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Action required

4. Toast crashes server rendering 🐞 Bug ☼ Reliability

Every non-inline Toast now reads document.body synchronously during render. Rendering Toast during
SSR or prerendering throws ReferenceError: document is not defined, whereas the previous
implementation did not access browser globals during render.
Agent Prompt
## Issue description
Non-inline Toast accesses `document.body` during render and crashes in document-less environments.

## Issue Context
Other portaled components in this package use `isClient()` before creating their portals.

## Fix Focus Areas
- packages/core/src/components/Toast/Toast.tsx[244-260]
- packages/core/src/components/LegacyModal/LegacyModal.tsx[208-208]
- packages/core/src/components/next/Dialog/Dialog.tsx[527-536]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Comment on lines +20 to +22
try {
return JSON.parse(serializedState) as AppState;
} catch {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remediation recommended

5. Transferred state crashes startup 🐞 Bug ☼ Reliability

readTransferredVibeState casts arbitrary query-string JSON directly to AppState, and the
provider prefers it over validated persisted defaults. A URL such as ?vibeKitchenSinkState={}
crashes initial rendering when theme code dereferences the missing tokenOverrides.colors.
Agent Prompt
## Issue description
Malformed or partial transferred state from the URL can crash the application during its first render.

## Issue Context
The query parameter is externally controllable and is consumed before the effect that removes it. Persisted state already has a validation/defaulting path that transferred state should reuse.

## Fix Focus Areas
- apps/kitchen-sink/src/lib/vibeSource.ts[15-24]
- apps/kitchen-sink/src/context/KitchenSinkContext.tsx[53-67]
- apps/kitchen-sink/src/lib/storage.ts[1-131]
- apps/kitchen-sink/src/lib/cssVarOverrides.ts[6-21]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Comment on lines +11 to +14
--surface-primary: color-mix(in srgb, var(--primary-color) 12%, transparent);
--surface-positive: color-mix(in srgb, var(--positive-color) 12%, transparent);
--surface-negative: color-mix(in srgb, var(--negative-color) 12%, transparent);
--surface-warning: color-mix(in srgb, var(--warning-color) 12%, transparent);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Action required

6. Semantic tokens omitted 🐞 Bug ≡ Correctness

The new --surface-* and --text-on-surface-* variables are silently omitted from generated
tokens.json because the generator only accepts property names containing color. The generated
token artifact is therefore inconsistent with the facelift theme CSS and the public core color map.
Agent Prompt
## Issue description
The token generator drops the newly introduced semantic surface and on-surface color variables.

## Issue Context
The variables do not contain the substring `color`, but they are advertised as supported color tokens by the core color map.

## Fix Focus Areas
- packages/style/scripts/generate-colors.ts[72-113]
- packages/style/src/themes/facelift-light-theme.scss[11-22]
- packages/style/src/themes/facelift-dark-theme.scss[11-22]
- packages/style/src/themes/facelift-black-theme.scss[11-22]
- packages/core/src/utils/colors-vars-map.ts[84-99]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Comment on lines +59 to +62
aria-checked={isSelected}
aria-disabled={isDisabled || undefined}
tabIndex={isSelected || (selectedIndex === -1 && index === 0) ? 0 : -1}
onClick={() => onSelect(index)}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remediation recommended

7. Disabled segment remains focusable 🐞 Bug ≡ Correctness

SegmentedControl assigns tabIndex={0} to a selected segment, or to the first segment when no value
matches, without excluding disabled options. A disabled selected/first option therefore remains in
the keyboard tab order even though selection logic treats it as unavailable.
Agent Prompt
## Issue description
Disabled SegmentedControl options can remain keyboard-focusable through the roving tabindex implementation.

## Issue Context
The selected index can identify a disabled option, and the no-selection fallback always targets index zero regardless of its disabled state.

## Fix Focus Areas
- packages/core/src/components/SegmentedControl/SegmentedControl.tsx[53-63]
- packages/core/src/components/SegmentedControl/SegmentedControl.tsx[101-118]
- packages/core/src/components/SegmentedControl/SegmentedControl.tsx[198-216]
- packages/core/src/components/SegmentedControl/__tests__/SegmentedControl.test.tsx[1-128]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Comment on lines +181 to +187
<IconButton
icon={Workspace}
kind={listView ? "tertiary" : "secondary"}
size="xs"
aria-label="Grid view"
aria-pressed={!listView}
onClick={() => setListView(false)}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remediation recommended

8. Grid view never renders 🐞 Bug ≡ Correctness

The Manage Agents “Grid view” button changes listView to false, but listView only controls the
two toggle buttons' appearance. The page unconditionally renders the same table and rows, so
activating Grid view produces no corresponding view change.
Agent Prompt
## Issue description
The Manage Agents view toggle advertises a grid layout but never changes the rendered agents layout.

## Issue Context
The existing state only changes button styling and ARIA state; the table is unconditional.

## Fix Focus Areas
- apps/kitchen-sink/src/screens/components/ManageAgentsPage.tsx[131-133]
- apps/kitchen-sink/src/screens/components/ManageAgentsPage.tsx[172-208]
- apps/kitchen-sink/src/screens/components/ManageAgentsPage.module.scss[1-248]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Comment on lines +348 to +350
setTimeout(() => {
setNewMessageIds(new Set());
}, 5000);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Informational

9. Older timer clears new messages 🐞 Bug ≡ Correctness

Each Sidekick send schedules a timeout that clears the entire newMessageIds set. If another
message is sent within five seconds, the earlier timeout removes the newer message's animation state
prematurely and the timers are not cancelled on unmount.
Agent Prompt
## Issue description
An older Sidekick send timeout clears animation state belonging to messages sent later.

## Issue Context
Every timer replaces the complete set rather than removing only the IDs created by that send, and timer handles are not cleaned up.

## Fix Focus Areas
- apps/kitchen-sink/src/screens/components/SidekickChatPage.tsx[331-350]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Comment on lines +324 to +327
const handleLastSegmentAnimationEnd = useCallback(() => {
if (animationEndRef.current && isComplete) {
animationEndRef.current();
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Informational

10. Completion callback fires twice 🐞 Bug ≡ Correctness

Fade-mode ResponseStream invokes onComplete once when text processing finishes and again when the
final segment's CSS animation ends. The Sidekick consumer consequently receives two completion
notifications for one response and performs redundant state updates.
Agent Prompt
## Issue description
ResponseStream calls its completion callback twice for a single fade-mode stream.

## Issue Context
`markComplete` already invokes the callback; the final animation handler invokes the same callback independently.

## Fix Focus Areas
- apps/kitchen-sink/src/screens/components/ResponseStream.tsx[140-145]
- apps/kitchen-sink/src/screens/components/ResponseStream.tsx[320-327]
- apps/kitchen-sink/src/screens/components/ResponseStream.tsx[352-381]
- apps/kitchen-sink/src/screens/components/SidekickChatPage.tsx[170-181]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

@github-actions

Copy link
Copy Markdown
Contributor

A new prerelease version of this PR has been published! 🎉
To use this prerelease version, install the needed packages in your project:

@vibe/button@3.1.0-alpha-01945.0
@vibe/dialog@3.1.0-alpha-01945.0
@vibe/icon-button@3.0.8-alpha-01945.0
@vibe/tooltip@3.0.8-alpha-01945.0
@vibe/typography@3.0.8-alpha-01945.0
@vibe/core@3.89.0-alpha-01945.0
@vibe/docs@3.8.1-alpha-01945.0
monday-ui-style@0.27.0-alpha-01945.0

  --primary-color   #2b06e5 -> #3543fc
  --brand-color     #2b06e5 -> #3543fc   (follows primary)
  --positive-color  #00854d -> #166d30
  --negative-color  #cd0026 (was #d83a52)
  --warning-color   unchanged, marked UNTOUCHED in the design
  --primary-text-color unchanged; the swatch is bound to the existing token

Applied to the three facelift themes only; the standard light/dark/black/hacker
themes keep the monday palette.

All six surfaces follow automatically, since they are color-mix of these at
12% - no surface token needed editing. Flattened on white the facelift
surfaces are now primary #e7e8ff, positive #e3ede6, negative #f9e0e5,
warning #fff9e0.

--text-on-surface-primary was the literal #3543fc, which is now exactly
--primary-color, so it derives from it instead of duplicating the hex.
Palette experiments belong in the consumer override, not the design system:
mf-topbar's src/styles/themes/warmth.css can retune several themes at once
without republishing Vibe. So --primary-color, --brand-color, --positive-color
and --negative-color go back to their previous facelift values, and
tokens.json is byte-identical to before the palette commit.

Kept, because it is structure rather than a colour choice:
--text-on-surface-primary stays var(--primary-color) instead of a duplicated
hex, so it follows whatever primary the theme or an override sets.

The surface work itself is unaffected: --surface-* are color-mix of these
bases at 12%, so they track the reverted values automatically.
The palette lives here rather than in the design system, so several themes can
be retuned without republishing Vibe - the same pattern as mf-topbar's
src/styles/themes/warmth.css.

styles.css sets only the base colours for the three facelift theme classes
(Figma 684:115861 PRIMARIES: #3543fc / #166d30 / #cd0026; warning and
--primary-text-color untouched). Everything derived follows on its own:
--surface-* are color-mix of these at 12%, and --text-on-surface-primary is
var(--primary-color).

The selectors are qualified with `body` deliberately. AppThemeShell puts the
theme class on <body>, and the package defines .facelift-*-app-theme at the
same one-class specificity; in dev nothing is treeshaken and the package CSS is
injected after styles.css, so an unqualified selector would lose the tie on
source order.

screens/styles/globals.css carries the same primaries for the Glaze screens.
…mth.css

Replaces the primaries-only block with a port of
mf-topbar/src/styles/themes/warmth.css, so the kitchen sink and mf-topbar
render the same palette instead of two hand-maintained subsets. Verified
token-for-token: 64 light, 39 dark, 39 black, identical names and values.

Only the selectors differ. mf-topbar puts `.warmth` on <html> and leans on the
host's light/dark/black class on <body>; the kitchen sink's AppThemeShell puts
`facelift-<mode>-app-theme` on <body>, so:

  :root.warmth .light-app-theme, :root.warmth .default-app-theme
    -> body.facelift-light-app-theme

They stay qualified with `body` because the style package defines
`.facelift-*-app-theme` at the same one-class specificity, and in dev its CSS is
injected after this file, so an unqualified selector would lose on source order.

Dropped from the port: topbar's `div[class*='useLocalDevMf']` rule, which hides
its own local-dev badge.

Also removed the `--ui-background-hover-color: #dfdbd8` one-off from styles.css;
warmth.css sets that token (#e8e6e6 for light) and now owns it.

This brings surfaces, borders, icons and radius across, not just the primaries.
Anything derived still follows on its own: the six --surface-* are color-mix of
these bases at 12%, and --text-on-surface-primary is var(--primary-color).
Aligns the theme sources with mf-topbar's warmth.css, which is where this
palette was tuned:

  * Semantic surfaces are mixed against --primary-background-color rather
    than `transparent`, at 16% (neutral stays 12%). Transparent surfaces
    let whatever sits behind a Chip or AttentionBox bleed through, so the
    same token read differently depending on its container.
  * --text-on-surface-* reference the semantic tokens (--positive-color,
    --negative-color, --warning-color, --info-color, --link-color) instead
    of hardcoded hexes, so they follow the theme. Primary uses
    --link-color: in the dark themes --primary-color is too dark to read
    against its own surface.
  * The dark and black palettes are lifted a step (dark
    --primary-background-color #1a1a19 -> #2a2a28), with the kitchen-sink
    theme overrides moved in lockstep.

These sources had drifted behind their own generated artifact:
packages/style/src/files/tokens.json was already committed with these
values, so `generate-colors` is a no-op on this commit. This makes the
sources match what the tokens have been describing.
@Mordech Mordech changed the title [TEST] Facelift on Vibe 3 — semantic surfaces, component restyle, kitchen-sink [TEST] Facelift on Vibe 3 Aug 19, 2026
Mordech and others added 2 commits August 19, 2026 19:26
Two changes, applied across light, dark, black, hacker and the three
facelift themes rather than only the facelift ones, so a non-facelift
theme does not get a surface treatment that disagrees with the rest.

- Surfaces drop from 12%/16% to 8% and mix over --primary-background-color
  instead of `transparent`. A translucent surface picks up whatever sits
  behind it, so nesting one inside another compounded the tint; opaque
  surfaces render the same wherever they land.
- --secondary-background-color aligns with --allgrey-background-color in
  the dark and black themes (#404660 -> #363a50, #424240 -> #2e2e2c), which
  were reading as a third distinct grey next to the new surfaces.

The surface comments still claimed 12% and "keeps them derived" without
saying what they now mix over — updated in all six themes.

tokens.json regenerated from the sources (verified idempotent).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

A new prerelease version of this PR has been published! 🎉
To use this prerelease version, install the needed packages in your project:

@vibe/button@3.1.0-alpha-a0eb1.0
@vibe/dialog@3.1.0-alpha-a0eb1.0
@vibe/icon-button@3.0.8-alpha-a0eb1.0
@vibe/tooltip@3.0.8-alpha-a0eb1.0
@vibe/typography@3.0.8-alpha-a0eb1.0
@vibe/core@3.89.0-alpha-a0eb1.0
@vibe/docs@3.8.1-alpha-a0eb1.0
monday-ui-style@0.27.0-alpha-a0eb1.0

naamaye and others added 4 commits August 20, 2026 15:40
Add a unified Home screens page with mode-specific stroke palettes, and
port the pointer-following composer border animation across chat pages.

Co-authored-by: Cursor <cursoragent@cursor.com>
Tighten Home mode subtitles so the greeting lives only in the title.

Co-authored-by: Cursor <cursoragent@cursor.com>
…ase]

Co-authored-by: Cursor <cursoragent@cursor.com>
@github-actions

Copy link
Copy Markdown
Contributor

A new prerelease version of this PR has been published! 🎉
To use this prerelease version, install the needed packages in your project:

@vibe/button@3.1.0-alpha-d81e6.0
@vibe/dialog@3.1.0-alpha-d81e6.0
@vibe/icon-button@3.0.8-alpha-d81e6.0
@vibe/tooltip@3.0.8-alpha-d81e6.0
@vibe/typography@3.0.8-alpha-d81e6.0
@vibe/core@3.89.0-alpha-d81e6.0
@vibe/docs@3.9.0-alpha-d81e6.0
monday-ui-style@0.27.0-alpha-d81e6.0

Co-authored-by: Cursor <cursoragent@cursor.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants