Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
15 commits
Select commit Hold shift + click to select a range
8f6be54
fix(webkit): [ENG-47001] catch the v4 paren spelling in the six token…
isaque-bock-azion Aug 3, 2026
5903b31
refactor: [ENG-47001] adopt the canonical Tailwind v4 paren token syn…
isaque-bock-azion Aug 3, 2026
11846e4
chore: [ENG-47001] drop the one-time codemod and strip test comments
isaque-bock-azion Aug 3, 2026
35f962a
style(webkit): [ENG-47001] run prettier on the files touched by the s…
isaque-bock-azion Aug 4, 2026
d74b7d9
Merge branch 'main' into feat/ENG-47001-canonical-tailwind-v4-syntax
robsongajunior Aug 5, 2026
fd1c86d
Merge branch 'main' into feat/ENG-47001-canonical-tailwind-v4-syntax
isaque-bock-azion Aug 5, 2026
1e4c351
Merge branch 'main' into feat/ENG-47001-canonical-tailwind-v4-syntax
isaque-bock-azion Aug 5, 2026
433adc4
Merge branch 'main' into feat/ENG-47001-canonical-tailwind-v4-syntax
isaque-bock-azion Aug 5, 2026
2f16087
Merge branch 'main' into feat/ENG-47001-canonical-tailwind-v4-syntax
isaque-bock-azion Aug 5, 2026
5f1e339
refactor: canonicalize remaining bracket var() tokens from main merges
isaque-bock-azion Aug 5, 2026
1ad0b35
Merge branch 'main' into feat/ENG-47001-canonical-tailwind-v4-syntax
isaque-bock-azion Aug 5, 2026
f24330a
Merge branch 'main' into feat/ENG-47001-canonical-tailwind-v4-syntax
isaque-bock-azion Aug 5, 2026
17f4244
Merge branch 'main' into feat/ENG-47001-canonical-tailwind-v4-syntax
isaque-bock-azion Aug 5, 2026
ef6c090
fix(webkit): restore main's TabView pill and Panel height cap lost in…
isaque-bock-azion Aug 5, 2026
b637cbf
Merge branch 'main' into feat/ENG-47001-canonical-tailwind-v4-syntax
isaque-bock-azion Aug 5, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .claude/AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,7 @@ The trigger logic now lives in the orchestrator command [`.claude/commands/compo
- If a needed module does **not** exist yet, do not import it speculatively. Either (1) install it first (`pnpm --filter <ws> add ...`), (2) create the file and its `package.json` entry first, or (3) annotate the gap explicitly in the report as `TODO: create <path>` or `TODO: install <pkg>` and skip the dependent code. The `validate-references.mjs` hook physically blocks imports that resolve to nothing — see § 12.
- New components use `<script setup lang="ts">` with `defineProps<...>()`, `defineEmits<...>()`, `defineSlots<...>()` and `defineModel<...>()` where applicable. JSDoc on every public prop. Zero `any`. Zero `// @ts-ignore`.
- Variants are always exposed as `kind`. Sizes as `size` (`'small' | 'medium' | 'large'`). Boolean state props have no `is`/`has` prefix.
- Typography is **always** applied via the generated class from DESIGN.md (`text-heading-md`, `text-body-sm`, etc.). Never `text-[length:var(--text-*)]`, `leading-*`, `tracking-*`, or `font-family` directly.
- Typography is **always** applied via the generated class from DESIGN.md (`text-heading-md`, `text-body-sm`, etc.). Never `text-(length:--text-*)`, `leading-*`, `tracking-*`, or `font-family` directly.
- Colors, spacing, max-width, and shape come from semantic `var(--*)` tokens. No hex, no Tailwind palette names (`bg-gray-*`), no external/legacy color utilities (`text-color`, `surface-*`).
- `defineOptions({ name, inheritAttrs: false })` + `useAttrs()` + `rootClasses` that merges `attrs.class`. Never declare `class` in `defineProps`.
- `data-testid` hierarchical, BEM-style: root with fallback `'<category>-<name>'`, children with `${testId}__<part>` (two underscores).
Expand Down Expand Up @@ -231,7 +231,7 @@ Five hooks in [`.claude/hooks/`](.claude/hooks/) act as physical guard rails on

### 12.1) Pre-existing (unchanged)

- **[`.claude/hooks/validate-tokens.mjs`](.claude/hooks/validate-tokens.mjs)** (PreToolUse `Write|Edit|MultiEdit`) — blocks new content introducing hex/rgb/hsl colors, Tailwind palette names, raw typography (`text-xs|sm|...`, `text-[length:var(--text-*)]`, `leading-*`, `tracking-*`, `font-family`), PrimeVue color utilities, `class` in `defineProps`, `any`, or `@ts-ignore`. Pre-existing violations are not retroactively flagged.
- **[`.claude/hooks/validate-tokens.mjs`](.claude/hooks/validate-tokens.mjs)** (PreToolUse `Write|Edit|MultiEdit`) — blocks new content introducing hex/rgb/hsl colors, Tailwind palette names, raw typography (`text-xs|sm|...`, `text-(length:--text-*)`, `leading-*`, `tracking-*`, `font-family`), PrimeVue color utilities, `class` in `defineProps`, `any`, or `@ts-ignore`. Pre-existing violations are not retroactively flagged.
- **[`.claude/hooks/validate-references.mjs`](.claude/hooks/validate-references.mjs)** (PreToolUse `Write|Edit|MultiEdit`) — blocks imports that don't resolve: `@aziontech/webkit/<subpath>` without a matching `package.json#exports`, relative paths to no file, uninstalled npm packages, missing workspaces.
- **[`.claude/hooks/enforce-component-create.mjs`](.claude/hooks/enforce-component-create.mjs)** (PreToolUse `Write`) — blocks the first `Write` of a new `.vue` under `packages/webkit/src/components/webkit/<category>/<name>/` when the session transcript shows no reference to the `component-create` skill/command. Forces the agent to invoke the orchestrator first.

Expand Down
26 changes: 13 additions & 13 deletions .claude/docs/COMPONENT_REQUIREMENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -800,7 +800,7 @@ This section describes the canonical pattern enforced for components living unde

All visual rules (typography classes, spacing, max-width, shape, semantic colors) come from [DESIGN.md](./DESIGN.md). In any conflict, **DESIGN.md wins**.

- **Typography** is always applied via the generated class from `texts.data.js` — `text-heading-md`, `text-body-sm`, `text-label-md`, `text-button-lg`, `text-overline-md`, `text-big-number-lg`, etc. Never use `text-[length:var(--text-*)]` raw, never `leading-*`/`tracking-*`/`font-family` directly. Full catalog in [DESIGN.md "Available text styles"](./DESIGN.md).
- **Typography** is always applied via the generated class from `texts.data.js` — `text-heading-md`, `text-body-sm`, `text-label-md`, `text-button-lg`, `text-overline-md`, `text-big-number-lg`, etc. Never use `text-(length:--text-*)` raw, never `leading-*`/`tracking-*`/`font-family` directly. Full catalog in [DESIGN.md "Available text styles"](./DESIGN.md).
- **Semantic colors:** `var(--primary)`, `var(--primary-contrast)`, `var(--secondary)`, `var(--secondary-contrast)`, `var(--bg-hover)`, `var(--bg-active)`, `var(--bg-disabled)`, `var(--bg-surface)`, `var(--bg-canvas)`, `var(--bg-mask)`, `var(--border-default)`, `var(--border-muted)`, `var(--border-strong)`, `var(--text-default)`, `var(--text-muted)`, `var(--text-disabled)`, `var(--ring-color)`, and feedback variants (`--success`/`--warning`/`--danger`/`--info` + `-contrast`/`-border`).
- **Shape:** `var(--shape-button)`, `var(--shape-elements)`, `var(--shape-card)`, `var(--shape-flat)`. For pseudo-element inheritance use `rounded-[inherit]`.
- **Spacing:** `var(--spacing-1)..(--spacing-N)` applied via `px-[...]` / `py-[...]` / `gap-[...]` / `m-[...]`. For section-level responsive spacing use the semantic utilities (`gap-spacing-elements-md`, `p-spacing-elements-lg`).
Expand Down Expand Up @@ -1027,7 +1027,7 @@ before:opacity-0 before:transition-opacity before:content-['']
hover:before:opacity-100 active:before:opacity-100
```

And `kindClasses` sets `before:bg-[var(--bg-hover)]` / `active:before:bg-[var(--bg-active)]`. See [button.vue:65-69](../src/components/webkit/actions/button/button.vue#L65-L69).
And `kindClasses` sets `before:bg-(--bg-hover)` / `active:before:bg-(--bg-active)`. See [button.vue:65-69](../src/components/webkit/actions/button/button.vue#L65-L69).

### 6. Polimorfismo `<a>` / `<button>`

Expand All @@ -1050,7 +1050,7 @@ Sweep these locations before implementing. Create a new utility only when nothin
### 9. Acessibilidade (WCAG 2.1 AA)

- **Semantics first:** prefer native `<button>` / `<a>` / `<input>` / `<dialog>` over `role=...`.
- **Visible focus mandatory:** `focus-visible:ring-2 focus-visible:ring-[var(--ring-color)] focus-visible:ring-offset-2 focus-visible:ring-offset-[var(--bg-canvas)]`. Never strip outline without a substitute.
- **Visible focus mandatory:** `focus-visible:ring-2 focus-visible:ring-(--ring-color) focus-visible:ring-offset-2 focus-visible:ring-offset-(--bg-canvas)`. Never strip outline without a substitute.
- **Keyboard navigation:** Tab/Shift+Tab; Enter/Space on buttons; Esc closes overlays; arrows on menus/lists/radio groups; focus trap in modals; focus returns to the trigger when closing.
- **ARIA minimum:** `aria-label`, `aria-labelledby`/`aria-describedby`, `aria-busy`, `aria-disabled`, `aria-hidden="true"` on decorative icons, `aria-current`/`aria-selected`/`aria-expanded` as appropriate, `aria-live="polite"` for dynamic feedback.
- **Contrast:** >=4.5:1 (text) / >=3:1 (large/icons). Verify disabled, which often fails.
Expand Down Expand Up @@ -1283,7 +1283,7 @@ The webkit layer applies styles **inline on the template root element's `class`
- When the consumer must override an internal token choice, wrap the static class string with `cn` from `@aziontech/webkit/utils/cn`:

```vue
:class="cn('rounded-[var(--shape-card)] bg-[var(--bg-surface)]', attrs.class)"
:class="cn('rounded-(--shape-card) bg-(--bg-surface)', attrs.class)"
```

#### Canonical example
Expand Down Expand Up @@ -1327,16 +1327,16 @@ const testId = computed(() => (attrs['data-testid'] as string) ?? 'actions-butto
class="
relative inline-flex items-center justify-center whitespace-nowrap
transition-colors duration-150 ease-out motion-reduce:transition-none
rounded-[var(--shape-button)]
focus-visible:ring-2 focus-visible:ring-[var(--ring-color)] focus-visible:ring-offset-2 focus-visible:ring-offset-[var(--bg-canvas)]
data-[kind=primary]:bg-[var(--primary)] data-[kind=primary]:text-[var(--primary-contrast)]
data-[kind=secondary]:bg-[var(--secondary)] data-[kind=secondary]:text-[var(--secondary-contrast)]
data-[kind=outlined]:border data-[kind=outlined]:border-[var(--border-default)] data-[kind=outlined]:bg-transparent
rounded-(--shape-button)
focus-visible:ring-2 focus-visible:ring-(--ring-color) focus-visible:ring-offset-2 focus-visible:ring-offset-(--bg-canvas)
data-[kind=primary]:bg-(--primary) data-[kind=primary]:text-(--primary-contrast)
data-[kind=secondary]:bg-(--secondary) data-[kind=secondary]:text-(--secondary-contrast)
data-[kind=outlined]:border data-[kind=outlined]:border-(--border-default) data-[kind=outlined]:bg-transparent
data-[kind=text]:bg-transparent
data-[size=small]:h-7 data-[size=small]:px-[var(--spacing-2)] data-[size=small]:text-button-md
data-[size=medium]:h-8 data-[size=medium]:px-[var(--spacing-3)] data-[size=medium]:text-button-md
data-[size=large]:h-10 data-[size=large]:px-[var(--spacing-4)] data-[size=large]:text-button-lg
data-[disabled]:bg-[var(--bg-disabled)] data-[disabled]:text-[var(--text-disabled)] data-[disabled]:cursor-not-allowed
data-[size=small]:h-7 data-[size=small]:px-(--spacing-2) data-[size=small]:text-button-md
data-[size=medium]:h-8 data-[size=medium]:px-(--spacing-3) data-[size=medium]:text-button-md
data-[size=large]:h-10 data-[size=large]:px-(--spacing-4) data-[size=large]:text-button-lg
data-[disabled]:bg-(--bg-disabled) data-[disabled]:text-(--text-disabled) data-[disabled]:cursor-not-allowed
"
>
<slot />
Expand Down
Loading
Loading