Skip to content

feat: V4 sync release webkit/theme/icons - #768

Merged
robsongajunior merged 114 commits into
mainfrom
dev
Jul 22, 2026
Merged

feat: V4 sync release webkit/theme/icons#768
robsongajunior merged 114 commits into
mainfrom
dev

Conversation

@robsongajunior

Copy link
Copy Markdown
Contributor

No description provided.

robsongajunior and others added 30 commits June 22, 2026 15:52
* feat: add input-textarea and field-textarea

Introduces two new components under the inputs category:

- InputTextarea — multi-line text control with optional iconLeft / iconRight
  slots, focus ring aligned with input-text/dropdown, and required (warning)
  / invalid (danger) border tones.
- FieldTextarea — labeled wrapper composing Label + InputTextarea + helper
  text, with helper color swapping to warning on required and danger on
  invalid.

Storybook stories follow the InputSelect pattern (code panel open by
default, hand-crafted source snippets, Usage block in autodocs).

* fix: access input-textarea slots via bracket notation to satisfy TS4111

Index-signature slot keys from defineSlots cannot be read via dot
notation under noUncheckedIndexedAccess; switch to bracket access and
drop the in-template $slots.iconRight dot access in favor of the
existing hasIconRight computed.

* fix: align input-textarea and field-textarea subpath exports

* fix: rename Input Textarea story title to Textarea

* refactor: rename InputTextarea component to Textarea
…#662)

Skeleton placeholder (shape/circle) with pulse + reduced-motion fallback.
Story under stories/components, direct `@aziontech/webkit/skeleton` export
(review by robsongajunior), and a validate-tokens lookbehind so the sanctioned
`var(--bg-surface-overlay)` token is not flagged as a PrimeFlex utility.
…#631)

* feat: add Copy Button and Tooltip components

Introduce copy-button and tooltip with Storybook coverage, icon swap
transitions on IconButton, and package exports for consumers.

* fix: icon-button/tooltip  imports and storybook category

* feat(copy-button): integrate Tooltip and stabilize icon swap motion

CopyButton uses Tooltip for hover/focus and post-copy feedback with outlined as default; IconButton and Tooltip presets avoid layout shift and align motion with theme tokens.

* docs(tooltip): add LongContent story and use body-xs typography

Replace the Disabled story with a long-content example on a small transparent info IconButton, and align tooltip panel text with body-xs.

---------

Co-authored-by: Robson Júnior <robson.ga.junior@gmail.com>
…#670)

* chore(commands): add /open-pr and /create-branch PR-workflow commands

Two slash commands encoding our PR flow: /create-branch (branch off dev, prompts
for the related issue) and /open-pr (ensure dev-based branch, commit by context,
push, open PR to dev). Encodes our conventions: base dev, issue in branch name,
split shared docs into their own PR, no attribution footers.

* [NO-ISSUE] chore: refine pr-workflow commands (diff analysis, optional issue, versioning)

Both commands now analyze the diff to pick the Conventional Commit type/scope
(driving the semantic-release bump), prompt for the related issue as optional
([NO-ISSUE] fallback), keep one commit per scope, detect breaking changes, and
never bypass commitlint. Sourced from CONTRIBUTING.md + commitlint.config.js.

* [NO-ISSUE] chore(rules): add git-workflow rule pointing to /open-pr and /create-branch

Auto-loaded rule so PR/branch requests in natural language route to the /open-pr and /create-branch flows instead of ad-hoc git steps.

* [NO-ISSUE] chore(repo): enumerate perf/test/ci/revert in every .releaserc to match commitlint

* [NO-ISSUE] docs(repo): add release-types consistency rule

---------

Co-authored-by: ROBSON.JUNIOR <robsongajunior@users.noreply.github.com>
* [ENG-46314] feat(webkit): add Badge (content)

Compact severity-coded count/short-value indicator (primary/secondary/success/
warning/danger/default; small/medium/large). Story under stories/components,
direct `@aziontech/webkit/badge` export. The 'Show code' SFC detector regex is
case-insensitive (/i) so CodeQL's bad-tag-filter alert is resolved.

* [ENG-46314] fix(webkit): default Badge value prop to empty string, not undefined

* [ENG-46314] refactor(webkit): simplify Badge severity validation with includes

addresses review feedback — replaces the explicit severity if-chain with a validSeverities array + includes guard.

---------

Co-authored-by: ROBSON.JUNIOR <robsongajunior@users.noreply.github.com>
* feat: add InputSelect composition

Introduce `@aziontech/webkit/inputs/input-select` and its sub-components
(`input-select-trigger`, `input-select-content`, `input-select-group`,
`input-select-option`), composed via a shared injection key for context
sharing without prop drilling.

The composition pattern follows the shadcn-vue convention: the consumer
controls the structure (`<InputSelect><InputSelectTrigger /><InputSelectContent>
<InputSelectGroup><InputSelectOption /></InputSelectGroup></InputSelectContent></InputSelect>`),
while the parent `InputSelect` owns selection state and exposes `modelValue`
+ `update:modelValue` for v-model binding.

* fix: popup animation

* fix: input-select type errors on aria attributes and emit values

* feat: expose InputSelect sub-components as static properties and wrap options in ScrollArea

* fix: avoid TS4023 on InputSelect by typing sub-component augmentation explicitly

* refactor: rename input-select to select and flatten exports

* style: prettier format renamed select files

* refactor: collapse select to single subpath export

---------

Co-authored-by: Herbert Vicente Cotta Julio <herbert.julio@azion.com>
Co-authored-by: ROBSON.JUNIOR <robsongajunior@users.noreply.github.com>
… not undefined (#671)

* [NO-ISSUE] chore(specs): default optional text props to empty string, not undefined

Optional string props that hold renderable text now default to '' across the spec template, the spec-create / component-scaffold skills, and the scaffolder agent. Reserve undefined (unquoted) for props where absence differs from empty (open, modelValue, src); never the literal 'undefined'. Prevents the default-value issue raised in review of PR #646.

* [NO-ISSUE] chore(specs): reject string-literal 'undefined' in spec Default cells

Enforces the empty-string default convention documented earlier in this PR via
spec-validate Step 3 plus a shared defaultCellIsStringUndefined helper and a unit
test; status:implemented specs (checkbox/dropdown) are not re-validated so they stay green.

---------

Co-authored-by: ROBSON.JUNIOR <robsongajunior@users.noreply.github.com>
* docs(webkit): codify Show code pattern + flat-import rule

storybook-write skill: document the copy-paste-ready 'Show code' transform,
now in the current repo format (stories under stories/components, title
Components/<Category>/<Name>, direct `@aziontech/webkit/<name>` imports, /i on
the SFC-detector regex). Adds .claude/rules/imports.md codifying the flat public
export name (category lives in the folder + story title, not the import).

* docs(webkit): translate imports rule blockquote to English

---------

Co-authored-by: ROBSON.JUNIOR <robsongajunior@users.noreply.github.com>
Co-authored-by: ROBSON.JUNIOR <robsongajunior@users.noreply.github.com>
* [ENG-46310] feat(webkit): add Chip (inputs)

Compact dismissible token (small/medium, optional removable button emitting
`remove`). Story under stories/components, direct `@aziontech/webkit/chips`
export. The 'Show code' SFC detector regex is case-insensitive (/i) so CodeQL's
bad-tag-filter alert is resolved.

* [ENG-46310] fix(webkit): default Chip label to empty string, not undefined

* [ENG-46310] feat(webkit): animate Chip removal with Message-style fade-out

---------

Co-authored-by: ROBSON.JUNIOR <robsongajunior@users.noreply.github.com>
…#666)

Companion docs/rules for the composable Table (#ENG-46087): new compound-api.md
rule (compound dot-notation API for composition components), the @tanstack/vue-table
exception in dependencies.md, component-scaffold + _template updates. Export/import
references flattened to the public flat name per .claude/rules/imports.md.

Co-authored-by: ROBSON.JUNIOR <robsongajunior@users.noreply.github.com>
* feat: add HelperText input primitive

Introduce `@aziontech/webkit/inputs/helper-text` — a small text element
that renders auxiliary copy below a form field. The `kind` prop drives
the visual tone:

- `helper` (default): muted token, neutral copy.
- `required`: warning-tone copy paired with the Required tag treatment.
- `invalid`: danger-tone copy for validation errors; usually wired to
  `aria-describedby` on the input.
- `disabled`: muted with a leading lock icon.

The component is the helper line only — wrapping form-field components
own the wiring of `aria-describedby` and the conditional rendering.

* fix: adjust show code

* fix: align helper-text subpath export

* fix: default fallback value prop to empty string

* fix: default tag icon prop to empty string

* revert: scope value default change to label and helper-text only

* fix: move HelperText story to Components/Inputs

* chore: move HelperText story to components/inputs path

---------

Co-authored-by: ROBSON.JUNIOR <robsongajunior@users.noreply.github.com>
* feat: add Label input primitive

Introduce `@aziontech/webkit/inputs/label` — a thin `<label>` wrapper that
renders the field text, supports a default slot, and appends a `Required`
tag when the field is required. Wires `for` to the underlying input id so
clicking the label focuses the control.

The component is the label only — helper text, error messages, and the
input itself live in sibling primitives composed by the form-field layer.

* feat: add HelperText input primitive

Introduce `@aziontech/webkit/inputs/helper-text` — a small text element
that renders auxiliary copy below a form field. The `kind` prop drives
the visual tone:

- `helper` (default): muted token, neutral copy.
- `required`: warning-tone copy paired with the Required tag treatment.
- `invalid`: danger-tone copy for validation errors; usually wired to
  `aria-describedby` on the input.
- `disabled`: muted with a leading lock icon.

The component is the helper line only — wrapping form-field components
own the wiring of `aria-describedby` and the conditional rendering.

* feat: InputText v2 + FieldText composition

Redesign the `InputText` field around the new `--ring-color` token, raise
the spec to v2, and introduce a sibling `FieldText` wrapper that composes
`Label` + `InputText` + `HelperText` into a single vertical stack with
consistent spacing.

InputText changes:
- Restrict `type` to plain-text variants (`'text' | 'email'`).
- Add `maxLength`, `required`, `invalid` props.
- Add `iconLeft` / `iconRight` slots.
- Drive visual states (hover, focus, filled) via native CSS pseudo-classes
  instead of props; `data-size`, `data-disabled`, `data-invalid`,
  `data-required` mirror the props for `data-[attr]:` Tailwind variants.

FieldText:
- `useId()`-backed `inputId` wired through Label `for` + input `id` +
  `aria-describedby` -> HelperText.
- `helperKind` switches between `helper`, `required`, `invalid`,
  `disabled` based on prop state; falls back to a default `'This field
  is locked.'` copy when `disabled` is true and `helperText` is empty.
- Forwards `iconLeft` / `iconRight` slots to the underlying InputText.

* fix: align InputText/FieldText showcode with Message pattern

* fix: align input-text family subpath exports

* fix: allow type=number on InputText to unblock data-table position input

* Revert "fix: allow type=number on InputText to unblock data-table position input"

This reverts commit 708d5a6.

* Revert "Revert "fix: allow type=number on InputText to unblock data-table position input""

This reverts commit 8860d49.

* fix: storybook path

* fix: address PR review on input-text, helper-text and story titles

* fix: remove undefined defaults and align story namespace

* fix: keep maxLength default as undefined to satisfy vue-tsc

* fix: default field-text inputId and name to empty string

---------

Co-authored-by: ROBSON.JUNIOR <robsongajunior@users.noreply.github.com>
* feat: add Label input primitive

Introduce `@aziontech/webkit/inputs/label` — a thin `<label>` wrapper that
renders the field text, supports a default slot, and appends a `Required`
tag when the field is required. Wires `for` to the underlying input id so
clicking the label focuses the control.

The component is the label only — helper text, error messages, and the
input itself live in sibling primitives composed by the form-field layer.

* feat: add HelperText input primitive

Introduce `@aziontech/webkit/inputs/helper-text` — a small text element
that renders auxiliary copy below a form field. The `kind` prop drives
the visual tone:

- `helper` (default): muted token, neutral copy.
- `required`: warning-tone copy paired with the Required tag treatment.
- `invalid`: danger-tone copy for validation errors; usually wired to
  `aria-describedby` on the input.
- `disabled`: muted with a leading lock icon.

The component is the helper line only — wrapping form-field components
own the wiring of `aria-describedby` and the conditional rendering.

* feat: InputText v2 + FieldText composition

Redesign the `InputText` field around the new `--ring-color` token, raise
the spec to v2, and introduce a sibling `FieldText` wrapper that composes
`Label` + `InputText` + `HelperText` into a single vertical stack with
consistent spacing.

InputText changes:
- Restrict `type` to plain-text variants (`'text' | 'email'`).
- Add `maxLength`, `required`, `invalid` props.
- Add `iconLeft` / `iconRight` slots.
- Drive visual states (hover, focus, filled) via native CSS pseudo-classes
  instead of props; `data-size`, `data-disabled`, `data-invalid`,
  `data-required` mirror the props for `data-[attr]:` Tailwind variants.

FieldText:
- `useId()`-backed `inputId` wired through Label `for` + input `id` +
  `aria-describedby` -> HelperText.
- `helperKind` switches between `helper`, `required`, `invalid`,
  `disabled` based on prop state; falls back to a default `'This field
  is locked.'` copy when `disabled` is true and `helperText` is empty.
- Forwards `iconLeft` / `iconRight` slots to the underlying InputText.

* feat: InputPassword + FieldPassword composition

Introduce `@aziontech/webkit/inputs/input-password` — a single-line
password input that shares InputText's visual language and adds a
built-in visibility toggle button on the trailing edge (driven by
the existing `IconButton`). Type flips between `password` and `text`
via local state; the toggle button announces its state via
`aria-pressed`.

`InputPassword` props: `modelValue`, `placeholder`, `maxLength`,
`disabled`, `readonly`, `required`, `invalid`, `toggleable`,
`autocomplete` (`'current-password' | 'new-password' | 'off'`).
Slots: `iconLeft` (always available), `iconRight` (only when
`toggleable=false` — the visibility toggle occupies that position
otherwise). Single fixed height (40px / `large`).

`FieldPassword` mirrors `FieldText`: composes `Label` +
`InputPassword` + `HelperText` with the same `useId()` wiring for
`for` / `id` / `aria-describedby`. Forwards `iconLeft` / `iconRight`
slots and adds password-specific props (`maxLength`, `toggleable`,
`autocomplete`).

Storybook templates use the v-model pattern documented in the
`storybook-write` skill — local `ref` + `watch` + `onUpdate` so the
toggle has a value to reveal and the Actions panel still receives
`update:modelValue` events.

Ships the `input-password.figma.ts` Code Connect mapping.

* fix: align InputPassword/FieldPassword showcode with Message pattern

* fix: align input-password and field-password subpath imports

* fix: allow type=number on InputText to unblock data-table position input

* fix: remove undefined defaults and align story namespace

* fix: keep maxLength default as undefined to satisfy vue-tsc

* refactor: type inputId and name as string with empty default on FieldPassword

* docs: spell out maxLength type as number | undefined in input/field specs
…gma (#661)

* fix(webkit): align Global Header chrome with updated Figma

Match the Webkit GlobalHeader design (node 4310:19617): symmetric
horizontal padding (--spacing-md both sides), --spacing-md shell gap,
and the canonical --border-default bottom border. Adjust start/end
region gaps (--spacing-xs / --spacing-sm) to the Figma values. Update
the spec's Figma reference, Purpose, and Tokens table accordingly.

* feat(webkit): add Global Header Container region and Nav alias

Mirror the Figma GlobalHeader structure (node 4310:19617) without
breaking changes. Add GlobalHeader.Container, a shrink-0 flex wrapper
that groups the menu trigger and brand as the Figma "Container" region,
and expose the center region under its Figma name via GlobalHeader.Nav
as an alias of the existing Middle (Middle is retained). Both additions
are purely additive: no export path, prop, event, or slot changes, and
existing compositions render identically.

---------

Co-authored-by: Herbert Vicente Cotta Julio <herbert.julio@azion.com>
Co-authored-by: ROBSON.JUNIOR <robsongajunior@users.noreply.github.com>
dependabot Bot and others added 5 commits July 21, 2026 12:17
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 4.4.0 to 7.0.0.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](actions/setup-node@v4.4.0...8207627)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-version: 7.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: ROBSON.JUNIOR <robsongajunior@users.noreply.github.com>
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4.6.2 to 7.0.1.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](actions/upload-artifact@ea165f8...043fb46)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: 7.0.1
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: ROBSON.JUNIOR <robsongajunior@users.noreply.github.com>
Bumps [pnpm/action-setup](https://github.com/pnpm/action-setup) from 4.3.0 to 6.0.9.
- [Release notes](https://github.com/pnpm/action-setup/releases)
- [Commits](pnpm/action-setup@v4.3.0...0ebf471)

---
updated-dependencies:
- dependency-name: pnpm/action-setup
  dependency-version: 6.0.9
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: ROBSON.JUNIOR <robsongajunior@users.noreply.github.com>
Bumps [actions/checkout](https://github.com/actions/checkout) from 4.3.1 to 7.0.1.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](actions/checkout@v4.3.1...3d3c42e)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: 7.0.1
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: ROBSON.JUNIOR <robsongajunior@users.noreply.github.com>
…dening + authoring-docs gate (#762)

* [NO-ISSUE] fix(webkit): valid token in popover-header + guard malformed arbitrary values

popover-header used `min-h-[--(size-4)]`, which compiles to invalid CSS
`var(--(size-4))`. Vite 6 / esbuild (Storybook) tolerate it; a consumer on Vite 8 /
lightningcss rejects it and the build dies. Replaced with the standard `min-h-7` utility.

Added a token-checks guard (`malformed-arbitrary-var`) that blocks any `-[--(...)]` at
write-time and in CI, so this class of typo can never reach a consumer again.

* [NO-ISSUE] feat(webkit): adoption skill bundle + init style/a11y wiring

Ships the consumer UI-craft skill pack and hardens `webkit init` so an app that adopts
the design system gets correct wiring and enforced standards, not just components.

Skills/agents (copied into the consumer .claude/ by init):
- 20 skills: the UI-craft pack ported from demo/vue-sample (the source of truth) —
  ui-craft, ux-heuristics, ui-states, usability, form, navigation, baseline-ui,
  motion-polish, impeccable-polish, delight — plus 10 new cross-cutting categories
  (accessibility-implementation, content-microcopy, responsive-layout, theming-dark-mode,
  performance-ux, i18n-readiness, data-viz, ui-verify, ds-adoption) and webkit-usage.
- 2 new agents: webkit-ui-verifier (Playwright + axe, both themes/widths/states) and
  webkit-adoption-auditor (coverage scorecard). Every skill shows inline code and resolves
  components via the MCP/catalog — no file-as-example pointers.

Init hardening:
- Writes tailwind.config.mjs (theme preset + a content glob over webkit source),
  postcss.config.mjs, and src/webkit.css (tokens + @tailwind layers); pins Tailwind v3;
  corrects the entry-import advice; documents the light-default theme. Web fonts are left
  to @aziontech/theme (handled separately), so no fonts import is wired here.
- Wires eslint-plugin-vuejs-accessibility (error) into the consumer eslint config so the
  accessibility skill has a blocking static floor; doctor checks tailwind/postcss/styles.
- CLAUDE.md fragment restructured into four explicit layers (invariants / enforcement /
  skills / agents) stating what is lint-blocked vs verified at runtime vs review.

Consumer smoke test (governance.yml + scripts/smoke-consume.mjs): packs the packages,
scaffolds a bare Vite app, runs init, builds a real component, and asserts the component
classes land in the CSS — catching unstyled / broken-build regressions the internal CI
cannot see.

* [NO-ISSUE] refactor(webkit): trim adoption bundle to 13 skills + webkit-motion rule

Drop 4 skills that were generic frontend advice, not webkit-specific
(performance-ux, content-microcopy, i18n-readiness, responsive-layout).
Merge 3 redundant skills into survivors (usability into ui-states, delight
into impeccable-polish, accessibility-implementation into ui-verify+form).
Add the webkit-motion rule (token-only motion, mandatory motion-reduce).
Reroute CLAUDE.fragment skill map and update plan.js bundle + plan.test.

* [NO-ISSUE] chore(webkit): enforce authoring-docs standard across skills/agents

Add the authoring-docs standard: a write-time hook (validate-authoring-docs)
plus a CI ratchet (doc-standards) that blocks new file-as-example references
and requires a scope: general|webkit frontmatter on every skill/agent doc.
Stamp scope on all internal skills/agents (webkit) and register the standard
in standards.mjs with its invariant pairing. Baseline grandfathers 7 known.

* [NO-ISSUE] docs(webkit): index authoring-docs rule + fix legacy story path in agents README

Add the authoring-docs row to the rules index (26 standards, 14 general /
12 webkit) and replace the stale stories/webkit/ path in the agents README
with the flat stories/components/ path per the imports rule.

* [NO-ISSUE] revert(webkit): drop popover-header min-h + malformed-var guard

Reverts 6518c4d. The popover-header fix (min-h-[--(size-4)] -> min-h-7)
and its token-checks guard are out of scope for the adoption-bundle PR and
change the popover visual baseline. Removed here; the build-break fix will
be handled on its own.

* [NO-ISSUE] chore(webkit): require enforced_by on every skill (guidance to gate traceability)

Extend the authoring-docs standard so no skill is merely advisory: every
skill (internal + consumer) declares enforced_by naming what backs its
prescriptions — a rule id, ui-verify (runtime), or review. The engine adds
enforced-by-missing (write-time + CI ratchet); the standards invariant
resolves each entry against the skill's own rule population (or ui-verify /
review) and fails the build on a phantom or wrong-population enforcer.
All 26 skills mapped; toolkit 84/84, doc-standards 0 new.

* [NO-ISSUE] feat(webkit): add webkit-tables skill + prefer Field*/Divider form guidance

Port the demo/vue-sample 'tables' skill (created Jul 20) as webkit-tables:
data-driven <Table :data :columns>, column model, fixed toolbar, internal
scroll chain, and cell recipes (name/status/domain-aligned-copy/+N/last-
modified/actions) — rewritten to our pattern (webkit- prefix, scope,
enforced_by, no file-as-example). Wire it into the bundle + plan.test +
CLAUDE.fragment. Also port the demo's ui-craft tables route.

PONTO 2 (best-practices tuning): webkit-form now leads with 'reach for the
complete Field* first, loose Input* is the fallback'; webkit-baseline-ui
forbids a hand-rolled divider (a div with border classes) — use <Divider>.
webkit-ui-states gains the Spinner (indeterminate) vs ProgressBar (measurable)
half of the loading vocabulary.

* [NO-ISSUE] fix(webkit): realign webkit init to the Tailwind v4 theme (#718)

Merging dev pulled #718, which moved @aziontech/theme to Tailwind v4: the
main export is now a v4 stylesheet (import '@aziontech/theme' → @import
'tailwindcss' + tokens + fonts), and ./globals.css / ./tailwind-preset are
gone. The init still generated a v3 setup, so the consumer smoke build failed
with 'Missing ./globals.css specifier'.

Realign init to v4 (mirroring the Storybook consumer): style deps become
tailwindcss@^4 + @tailwindcss/postcss (drop the v3 pin + autoprefixer); no
tailwind.config (v4 is CSS-first); postcss.config uses @tailwindcss/postcss
so Vite auto-detects it (no vite.config patch); src/webkit.css becomes
`@import '@aziontech/theme'` + `@source ../node_modules/@aziontech/webkit/src`
(node_modules is excluded from v4 auto content-detection, so the @source is
what compiles webkit's classes). doctor checks the @source instead of a
tailwind.config; fragment + plan/doctor tests updated. Consumer smoke passes
locally (component classes present).
@robsongajunior
robsongajunior requested a review from a team July 21, 2026 18:45
@robsongajunior
robsongajunior requested a review from a team as a code owner July 21, 2026 18:45
* chore: theme/icons version sync

* fix: mcp hono server  overwrite version (#770)
@robsongajunior robsongajunior changed the title v4 feat: V4 sync release webkit/theme/icons Jul 21, 2026
isaquebock
isaquebock previously approved these changes Jul 21, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request github_actions Pull requests that update GitHub Actions code theme webkit

Development

Successfully merging this pull request may close these issues.

5 participants