Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
e36d79a
feat(facelift): baseline the facelift on v4
Mordech Aug 19, 2026
16a2f68
fix(Tabs): stop the ResizeObserver cancelling the indicator glide
Mordech Aug 19, 2026
2cb741a
style(Tabs): paint the selected indicator in the brand primary
Mordech Aug 19, 2026
65972b9
feat(style): semantic surface tokens for Chips, Label and AttentionBox
Mordech Aug 19, 2026
9bac413
fix(Chips): icons follow the chip's text colour
Mordech Aug 19, 2026
b101d12
fix(Chips): label inherits the chip colour so text and icons agree
Mordech Aug 19, 2026
e8938bf
refactor(style): surfaces are 12% of the semantic colour
Mordech Aug 19, 2026
986259c
refactor(Chips): style semantic colors in CSS instead of an inline fill
Mordech Aug 19, 2026
ac2c58f
feat(style): update the facelift primaries (Figma 684:115861)
Mordech Aug 19, 2026
57876de
Revert "feat(style): update the facelift primaries (Figma 684:115861)"
Mordech Aug 19, 2026
b08e763
feat(kitchen-sink): apply the facelift primaries as a project override
Mordech Aug 19, 2026
0345cac
refactor(kitchen-sink): align the theme override with mf-topbar's war…
Mordech Aug 19, 2026
695c979
feat: add RGB companion tokens and darken dark/black mode backgrounds
Mordech Aug 19, 2026
1558eb4
chore(style): regenerate tokens.json from the ported theme sources
Mordech Aug 19, 2026
2cb1e87
test(Chips): regenerate snapshots for the class-based semantic colors
Mordech Aug 19, 2026
7dbcd82
fix(Chips): use IconButton's aria-label prop, not v3's ariaLabel
Mordech Aug 19, 2026
8fd7e93
fix(TextField): restore v4's icon API instead of v3's
Mordech Aug 19, 2026
b7a329c
test: regenerate snapshots inherited from the baseline squash
Mordech Aug 19, 2026
84037b2
feat(style): opaque semantic surfaces and a lifted dark palette
Mordech Aug 19, 2026
5a42152
chore(style): regenerate tokens.json from the ported palette
Mordech Aug 19, 2026
38ac3f2
fix(style): keep master's numeric radii alongside --border-radius-full
Mordech Aug 19, 2026
4b1aa44
fix(Dialog): restore the positioningActive perf gate from master
Mordech Aug 19, 2026
df971a9
feat(style): surfaces at 8% over the theme background, in every theme
Mordech Aug 19, 2026
1b758e2
chore(style): regenerate tokens.json from the ported surfaces
Mordech Aug 19, 2026
3c2714d
chore(release): publish a 4.x prerelease [prerelease]
Mordech Aug 19, 2026
1144e03
style: use border-radius-small on ListItem and BaseMenuItem
naamaye Aug 20, 2026
e4d764b
feat(kitchen-sink): Home modes page and StrokeSpotlight chat borders
naamaye Aug 25, 2026
99e47d7
copy(kitchen-sink): set chat hero titles to Hey Naama
naamaye Aug 25, 2026
27d50d3
feat(core): add StrokeSpotlight hover stroke and click pulse [prerele…
Mordech Aug 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .cursor/rules/base-components.mdc
Original file line number Diff line number Diff line change
Expand Up @@ -234,7 +234,7 @@ Components support various size variants.

Components use CSS custom properties for theming:

- Design tokens from Vibe's styling library (`@vibe/style`)
- Design tokens from Vibe's styling library (`monday-ui-style`)
- Automatic dark/light mode support
- Consistent spacing and typography scales

Expand Down
1 change: 1 addition & 0 deletions .cursor/rules/component-internal-structure.mdc
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ alwaysApply: false
2. **TypeScript**: All components must be written in TypeScript.
3. **`forwardRef`**: Prefer using `React.forwardRef` for all components that might need to expose their underlying DOM element or instance to parent components. The `ref` should be typed directly on the function's second argument.
4. **Props Typing and Destructuring**: Props must be destructured in the component function's first argument, and this argument must be explicitly typed with the component's props type.
5. **No Static Properties**: Never use the `withStaticProps` utility or assign static properties to components. Components should remain without attached static properties. This means avoiding patterns like `MyComponent.colors = {...}`, `MyComponent.sizes = {...}`, and even avoiding `MyComponent.displayName = "..."`.

## File Structure (within the `.tsx` file)

Expand Down
7 changes: 7 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Agent Instructions

## Kitchen Sink Vibe Sources

- **Original** must resolve `@vibe/*` component code from the pinned npm packages in `packages/kitchen-sink/published-vibe/node_modules`; never alias it to workspace source or apply Current-only component overrides.
- **Current** resolves `@vibe/*` from local workspace source and keeps the existing kitchen-sink development overrides.
- Keep the two runtimes isolated. Verify source-related changes with both `npm run build:original` and `npm run build:current` from `packages/kitchen-sink`.
10 changes: 10 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co

The **Vibe Design System** is monday.com's official React component library, managed as a Lerna monorepo with Yarn Workspaces. The main package `@vibe/core` provides the primary component library, while specialized packages handle icons, testing utilities, codemods, and more.

## Node.js Version

This repo requires **Node.js v22**. Always run `nvm use` (or `nvm use 22`) before any dev/build commands. The `.nvmrc` in `apps/kitchen-sink/` pins v22. Running on v20 will cause a `styleText` crash from `rolldown`.

## Development Commands

### Building and Testing
Expand Down Expand Up @@ -134,6 +138,12 @@ The repository includes an MCP (Model Context Protocol) server (`@vibe/mcp`) tha
- **Metadata generation** for component documentation
- **CSS token handling** via `@vibe/style` package

### Kitchen Sink Vibe Sources
- **Original** must resolve `@vibe/*` component code from the pinned npm packages in `apps/kitchen-sink/published-vibe/node_modules`; never alias it to workspace source or apply Current-only component overrides.
- **Current** resolves `@vibe/*` from local workspace source and keeps the existing kitchen-sink development overrides.
- Keep the two runtimes isolated. Verify source-related changes with both `npm run build:original` and `npm run build:current` from `apps/kitchen-sink`.
- Kitchen-sink lives in `app/` (not `packages/`) so it is excluded from the root Yarn workspace and CI installs. Run `yarn install` inside `apps/kitchen-sink` before first use.

## Important Files and Conventions

### Configuration Files
Expand Down
3 changes: 3 additions & 0 deletions apps/kitchen-sink/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
node_modules
dist
.superpowers
1 change: 1 addition & 0 deletions apps/kitchen-sink/.nvmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
v22.23
69 changes: 69 additions & 0 deletions apps/kitchen-sink/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# Facelift Kitchen Sink

An interactive playground for exploring [@vibe/core](https://www.npmjs.com/package/@vibe/core) components. Click any card to tweak its state, customize theme tokens, compare your design against defaults, and pick up where you left off — everything persists in the browser.

## Run it

```bash
npm install
npm run dev
```

Open the URL Vite prints (usually http://localhost:5173).

## Scripts

| Command | What it does |
| --- | --- |
| `npm run dev` | Start the Vite dev server |
| `npm run check` | Type-check and production build |
| `npm test` | Run Vitest unit tests (persistence + CSS override helpers) |

## Navigation

The **left pane** is the only navigation:

- **Components** — 3×3 grid of all nine demos with a control bar below for the focused card
- **Theme** — token editors with sub-pages: Colors, Radius, Spacing, Typography
- **Light / Dark / Black** — global theme mode toggles at the bottom of the left pane (always visible)

Click a component card to focus it and show its controls. Theme sub-pages appear indented under Theme when that view is active.

## Compare

On the Components page, use the **Compare** button in the main area to open a side-by-side view:

- **Original** — default component states
- **Your design** — your current saved states

Both columns share the same theme. Compare is component-state only (not a theme A/B). Reload always returns to the normal editing view.

## Persistence

All state is saved to `localStorage` under the key `facelift-kitchen-sink-state`:

- Active view and theme sub-page
- Light / Dark / Black mode
- Per-component control values
- Focused card
- Theme token overrides (colors, radius, spacing, typography)

Compare mode is **not** persisted — it resets to off on reload.

## Components (fixed order)

Icon Button, Button, Button Group, Tabs, Label, Chip, Text Field, Dropdown, Toast, Stroke Spotlight

Each lives in `src/sections/*.section.tsx` and exports `{ id, title, defaultState, controls, Demo }`. Files are auto-collected via `import.meta.glob` and sorted by the order above.

## Project layout

| Path | Purpose |
| --- | --- |
| `src/context/KitchenSinkContext.tsx` | App state + localStorage sync |
| `src/components/LeftPane.tsx` | Left navigation + theme mode |
| `src/components/ComponentsView.tsx` | Grid, control bar, Compare entry |
| `src/components/CompareView.tsx` | Side-by-side default vs current |
| `src/components/ThemePanel.tsx` | Token editors + preview strip |
| `src/lib/storage.ts` | Load/save/migrate persisted state |
| `src/tests/` | Vitest tests for pure helpers |
Loading
Loading