Skip to content

docs: DLT-3434 build pipeline for component wall thumbs - #1278

Merged
Francis Rupert (francisrupert) merged 40 commits into
nextfrom
component-wall-thumbs
May 27, 2026
Merged

docs: DLT-3434 build pipeline for component wall thumbs#1278
Francis Rupert (francisrupert) merged 40 commits into
nextfrom
component-wall-thumbs

Conversation

@francisrupert

@francisrupert Francis Rupert (francisrupert) commented May 18, 2026

Copy link
Copy Markdown
Contributor
image

🛠️ Type Of Change

  • Documentation

📖 Jira Ticket

DLT-3434

📖 Description

Build pipeline that auto-generates PNG thumbnails (light + dark) for every component on the wall.

They pull from the Playground's default preset by default (e.g. packages/combinator/src/variants/variants_*.js. That works for a large percentage of them, but I also want to be able tweak some with a simple Vue file to override that preset.

  • Playwright launches a headless browser, loads each component at 400×225, and screenshots it.
  • Generated PNGs land directly in the docs.
  • Source of truth is always the live component, not a hand-crafted design file that can (will) drift out of sync.
  • Pre-commit hook keeps thumbnails in sync. If something changes visually about a component, it gets automatically updated.

What it adds:

  • Generator script (scripts/thumbs/generate.mjs) — Vite + Playwright capture, content-hash cache
  • Vite-served harness app at scripts/thumbs/harness/
  • Live dev gallery — browse, click-to-inspect via DtModal iframe, regenerate with a progress modal
  • Husky pre-commit hook that regenerates thumbs whose inputs changed (component source, override, variant, or token)
  • Override file convention at apps/dialtone-documentation/thumbs/<slug>.vue for components whose Combinator default doesn't render well as a thumb (popovers, modals, overlays)
  • Combinator default variant tweaks for components that needed a small fix to render cleanly
  • Contributor docs at apps/dialtone-documentation/thumbs/README.md

What it does NOT do:

  • No CI workflow — pre-commit hook is the only auto-trigger
  • No public API change, no version bump
  • No new components published to npm

💡 Context

Components wall thumbnails were previously inconsistent or hand-authored. This keeps them in sync with component source via a content-hash cache and a normal Vue dev loop for authoring overrides.

Previously component thumbs were manually crafted SVGs, including using design tokens for mode support. That's a lot of manual work. Dialtone Next has so many changes across so many components and I frankly don't feel like redrawing them all – plus they may as well be an accurate representation of the actual thing.

📝 Checklist

For all PRs:

  • I have ensured no private Dialpad links or info are in the code or pull request description (Dialtone is a public repo!).
  • I have reviewed my changes.
  • I have added all relevant documentation.
  • I have considered the performance impact of my change.

📷 Screenshot / Video

thumbs.mp4

… overrides to .vue files

- wall.mjs: new shared module exporting SLUG_ALIASES, isOnWall, and
  frontmatterToSlug. Consumed by generate.mjs (Node) and harness/main.js
  (Vite browser bundle) so the picker, gallery, and generator all agree
  on which components are wall-eligible.
- generate.mjs: auto-discover wall slugs by parsing docs/components/*.md
  frontmatter titles (mirrors theme/index.js's fileName rule). Filter
  targetSlugs to wall-only — leaf-only components (DtTab, DtTabPanel,
  DtResizableHandle, DtResizablePanel, DtSegmentedControlItem) and
  non-wall slugs like DtCodeblock get skipped. Add table and scrollbar
  to EXTRA_SLUGS for wall pages that have no corresponding Dt* component.
  Strengthen pre-capture cleanup: blur + tippy-hide twice with a 150ms
  wait so transition-callback re-focus is caught (Modal close button,
  Datepicker watchers). Skip cleanup entirely when [autofocus] is present.
- thumbs/*.vue: 17 new override files covering overlays (modal, tooltip,
  hovercard, combobox-with-popover), forced variant selections (empty-state,
  pagination, stack, segmented-control), Combinator-default refinements
  (avatar, badge, button, motion-text, notice, presence, text), and
  CSS-primitive slugs without Dt* components (table, scrollbar).
…ss publicDir

- harness/main.js: new ?gallery route renders every wall PNG in a grid
  with light/dark toggle and click-through to the per-component preview.
  Picker now filters to wall-eligible components via isOnWall, hiding
  DtRecipe*, mixins, directives, and composite leaves. Override path
  takes precedence over the dialtone-vue ComponentClass lookup, so
  no-Dt-component slugs (table, scrollbar) can render purely from their
  .vue override.
- harness/vite.config.js: publicDir points at docs/.vuepress/public so
  override .vue files can reference /assets/images/<x>.png at the same
  URL paths the real wall uses (e.g., avatar.vue's /assets/images/person.png).
  Adds a configureServer plugin that subscribes the apps/dialtone-documentation/thumbs/
  override dir to chokidar — new override files now HMR live without a
  server restart.
- harness/index.html: gallery CSS layout (auto-fill grid, cell hover
  affordance), :has() selectors so <html> joins picker/gallery mode and
  the body can scroll. Token-level focus suppression narrowed back to
  --dt-shadow-focus + input-specific tokens after the broader override
  inadvertently erased DtResizableHandle's intentional --dt-color-border-focus
  accent.
PR behavior unchanged — drift produces a non-blocking comment so WIP
branches can defer regen. Push to staging/next/production now fails
the workflow if the committed PNGs don't match a fresh regen, blocking
the deploy chain when both the pre-commit hook and PR check were
bypassed. Also expanded the path filter to include the override .vue
dir and docs/components markdown so wall page additions/removals
trigger the check too.
…levant changes

Mirrors the existing icons-rebuild pattern. Triggers when staged files
match packages/dialtone-vue/components, apps/dialtone-documentation/thumbs,
packages/combinator/src/variants, or packages/dialtone-tokens. Runs
`pnpm nx run dialtone-documentation:thumbs` (content-hash cache means
typical single-component commits regen in ~5–10s warm) then stages
the resulting PNG changes so the commit captures component source +
generated artifact in sync.

Output line also points contributors at the override-authoring guide
when the hook fires.
The thumbs/README.md was the only place describing the override workflow,
buried at a path contributors don't naturally discover. Surface it from
every doc layer a contributor touches when adding a component:

- .github/pull_request_template.md: new "If new component" checklist item.
- apps/dialtone-documentation/.github/CONTRIBUTING.md: replace stale
  manual-thumbnail note under the `thumb:` frontmatter field with the
  auto-generator command and a pointer to the override README.
- CLAUDE.md: Documentation Pipeline expanded from 6 → 7 artifacts. The
  7th is the wall thumbnail, with regen command + preview URLs.
- packages/dialtone-vue/.github/CONTRIBUTING.md: new "Component Wall
  Thumbnail" sub-section under Tooling.
- thumbs/README.md: rewrote to reflect the two-input Shape F model
  (override file OR Combinator default — no third tier) and note the
  auto-discovery of wall slugs from docs/components/*.md.
@francisrupert Francis Rupert (francisrupert) added the no-visual-test Add this tag when the PR does not need visual testing label May 18, 2026
@coderabbitai

coderabbitai Bot commented May 18, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Caution

Review failed

Failed to post review comments

Adds an automated thumbnail generator (Vite + Playwright) producing 400×225 light/dark PNGs from a Vite harness with content-hash caching, Husky pre-commit regen, per-component Vue overrides, a live gallery/regen UI, and documentation updates.

Overall Judgement: ✅ Ready to merge — Feature is complete, documented, and guarded by cache/hooks with no public API changes.

Walkthrough

Adds an end-to-end component thumbnail pipeline: content-hash caching, Playwright captures via a Vite harness (light/dark), dev gallery with regen API and HMR, pre-commit regeneration/staging, Nx targets, Overview.vue theme-aware resolver, and docs/frontmatter updates plus override examples.

Changes

Component Wall Thumbnail Auto-Generation System

Layer / File(s) Summary
Cache and slug utilities
apps/dialtone-documentation/scripts/thumbs/cache.mjs, apps/dialtone-documentation/scripts/thumbs/wall.mjs
Content-hash manifest and deterministic input hashing, manifest read/write, slug ↔ export-name conversion, wall alias handling, and stale detection.
Generator script and capture orchestration
apps/dialtone-documentation/scripts/thumbs/generate.mjs
Playwright-based Node generator that launches a Vite harness, captures themed PNGs (light/dark) with deterministic waiting/cleanup, handles aliases/partial failures, and updates the cache manifest.
Vite harness app & entry
apps/dialtone-documentation/scripts/thumbs/harness/{App.vue,main.js,index.html,vite.config.js}
Thumb harness Vue app that renders overrides or Dialtone components, mounts global components/icons, and provides a fixed 400×225 capture surface used by the generator.
Dev preview gallery and regen
apps/dialtone-documentation/scripts/thumbs/harness/{GalleryApp.vue,composables.js,vite-plugin-thumb-regen.mjs}
Gallery UI with mode switching, modified-slugs tracking, regen progress UI, HMR event broadcasts, /__regen-status and POST /__regenerate middleware to spawn the generator and stream progress.
Build & pre-commit integration
apps/dialtone-documentation/project.json, .husky/pre-commit, .gitignore
Nx targets thumbs and thumbs:preview, pre-commit hook that regenerates and auto-stages generated component PNGs when relevant inputs are staged, and ignores the generator cache file.
Overview theme-aware thumbnail resolution
apps/dialtone-documentation/docs/.vuepress/views/Overview.vue
Resolves thumbnails by current Dialtone mode via MutationObserver with precedence: themed PNG → SVG fallback (template fallback) → legacy PNG.
Component docs frontmatter cleanup
apps/dialtone-documentation/docs/components/*.md (many files)
Removes hardcoded image: frontmatter entries, adds/normalizes thumb: true flags where applicable, and trims a few example texts.
Documentation & examples
apps/dialtone-documentation/thumbs/README.md, apps/dialtone-documentation/thumbs/avatar.vue, .github/pull_request_template.md, apps/dialtone-documentation/.github/CONTRIBUTING.md, CLAUDE.md
README and CONTRIBUTING updates describing override conventions and regeneration commands, PR checklist addition to verify generated thumbnails, CLAUDE.md pipeline artifact note, and an example avatar override SFC.

Suggested reviewers

  • braddialpad
  • ninarepetto
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch component-wall-thumbs

Comment @coderabbitai help to get the list of available commands and usage tips.

@wiz-inc-55b470eb7e

wiz-inc-55b470eb7e Bot commented May 18, 2026

Copy link
Copy Markdown

Wiz Scan Summary

Scanner Findings
Vulnerability Finding Vulnerabilities -
Data Finding Sensitive Data -
Secret Finding Secrets -
IaC Misconfiguration IaC Misconfigurations -
SAST Finding SAST Findings 9 Medium
Software Management Finding Software Management Findings -
Total 9 Medium

View scan details in Wiz

To detect these findings earlier in the dev lifecycle, try using Wiz Code VS Code Extension.

@francisrupert Francis Rupert (francisrupert) changed the title docs: DLT-3434 build pipline for omponent wall thumbs docs: DLT-3434 build pipeline for component wall thumbs May 18, 2026
The summary logged errors but the script fell off the end with exit code
0, so the pre-commit hook treated Playwright/Vite capture failures as
success and staged whatever PNGs happened to be on disk. Empty-content
skips (an expected outcome for some slugs) still exit 0; only real
capture errors fail the run.
The @Variants alias resolves to packages/combinator/src/variants, which
sits outside the previous allow list's deepest path (apps/). Vite 7 lets
it through today via implicit workspace-root resolution, but the
allowlist is brittle — a future stricter Vite would block the harness
from mounting. Extending to the repo root makes the intent explicit.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: e41d0a542d

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "Codex (@codex) review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "Codex (@codex) address that feedback".

Comment thread apps/dialtone-documentation/scripts/thumbs/cache.mjs Outdated

@coderabbitai coderabbitai Bot left a comment

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.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@apps/dialtone-documentation/.github/CONTRIBUTING.md`:
- Around line 42-43: Update the CONTRIBUTING note to correct the thumbnail
naming placeholder: replace the documented "<title-kebab>-{light,dark}.png" with
the generator's actual "<slug>-{light,dark}.png" naming and clarify that the
output from the pnpm nx run dialtone-documentation:thumbs command lands in the
components images output directory used by the thumbs generator; keep the
guidance about creating thumb overrides
(apps/dialtone-documentation/thumbs/<slug>.vue) and the README/preview
references unchanged.

In `@apps/dialtone-documentation/scripts/thumbs/generate.mjs`:
- Around line 149-154: The Vite server (vite from createServer) and Playwright
browser (browser) are only closed on the success path; wrap the generation logic
that runs after createServer() and after launching the Playwright browser in a
try/finally so that in the finally block you check for defined vite and browser
and call await vite.close() and await browser.close() (or their close methods)
to guarantee cleanup on errors; apply the same try/finally pattern wherever
vite.close() and browser.close() are currently only executed on the success path
(e.g., the other blocks that open the server/browser).
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Central YAML (inherited), Organization UI (inherited)

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: 282ad7f6-1222-4893-b813-9d9d392301c7

📥 Commits

Reviewing files that changed from the base of the PR and between 412154b and e41d0a5.

⛔ Files ignored due to path filters (229)
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/avatar-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/avatar-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/avatar.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/avatar.svg is excluded by !**/*.svg and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/badge-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/badge-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/badge.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/badge.svg is excluded by !**/*.svg and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/banner-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/banner-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/banner.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/banner.svg is excluded by !**/*.svg and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/box-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/box-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/breadcrumbs-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/breadcrumbs-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/breadcrumbs.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/breadcrumbs.svg is excluded by !**/*.svg and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/button-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/button-group-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/button-group-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/button-group.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/button-group.svg is excluded by !**/*.svg and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/button-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/button.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/button.svg is excluded by !**/*.svg and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/card-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/card-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/card.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/card.svg is excluded by !**/*.svg and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/checkbox-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/checkbox-group-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/checkbox-group-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/checkbox-group.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/checkbox-group.svg is excluded by !**/*.svg and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/checkbox-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/checkbox.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/checkbox.svg is excluded by !**/*.svg and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/chip-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/chip-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/chip.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/chip.svg is excluded by !**/*.svg and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/collapsible-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/collapsible-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/collapsible.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/collapsible.svg is excluded by !**/*.svg and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/combobox-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/combobox-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/combobox-multi-select-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/combobox-multi-select-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/combobox-with-popover-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/combobox-with-popover-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/combobox.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/combobox.svg is excluded by !**/*.svg and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/datepicker-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/datepicker-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/datepicker.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/datepicker.svg is excluded by !**/*.svg and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/description-list-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/description-list-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/dropdown-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/dropdown-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/dropdown.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/dropdown.svg is excluded by !**/*.svg and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/emoji-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/emoji-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/emoji-picker-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/emoji-picker-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/emoji-picker.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/emoji-picker.svg is excluded by !**/*.svg and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/emoji-text-wrapper-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/emoji-text-wrapper-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/emoji-text-wrapper.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/emoji-text-wrapper.svg is excluded by !**/*.svg and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/emoji.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/emoji.svg is excluded by !**/*.svg and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/empty-state-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/empty-state-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/empty-state.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/empty-state.svg is excluded by !**/*.svg and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/filter-pill-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/filter-pill-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/hovercard-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/hovercard-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/hovercard.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/hovercard.svg is excluded by !**/*.svg and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/icon-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/icon-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/icon.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/icon.svg is excluded by !**/*.svg and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/illustration-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/illustration-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/image-viewer-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/image-viewer-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/img-background.svg is excluded by !**/*.svg and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/input-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/input-group-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/input-group-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/input-group.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/input-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/input.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/input.svg is excluded by !**/*.svg and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/item-layout-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/item-layout-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/item-layout.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/item-layout.svg is excluded by !**/*.svg and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/keyboard-shortcut-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/keyboard-shortcut-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/keyboard-shortcut.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/keyboard-shortcut.svg is excluded by !**/*.svg and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/lazy-show-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/lazy-show-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/lazy-show.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/lazy-show.svg is excluded by !**/*.svg and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/link-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/link-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/link.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/link.svg is excluded by !**/*.svg and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/list-item-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/list-item-group-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/list-item-group-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/list-item-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/list-item.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/list-item.svg is excluded by !**/*.svg and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/loader-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/loader-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/modal-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/modal-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/modal.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/modal.svg is excluded by !**/*.svg and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/mode-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/mode-island-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/mode-island-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/mode-island.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/mode-island.svg is excluded by !**/*.svg and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/mode-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/motion-text-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/motion-text-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/notice-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/notice-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/notice.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/notice.svg is excluded by !**/*.svg and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/pagination-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/pagination-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/pagination.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/pagination.svg is excluded by !**/*.svg and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/placeholder.svg is excluded by !**/*.svg and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/popover-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/popover-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/popover.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/popover.svg is excluded by !**/*.svg and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/presence-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/presence-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/presence.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/presence.svg is excluded by !**/*.svg and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/progress-circle-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/progress-circle-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/prose-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/prose-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/radio-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/radio-group-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/radio-group-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/radio-group.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/radio-group.svg is excluded by !**/*.svg and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/radio-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/radio.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/radio.svg is excluded by !**/*.svg and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/resizable-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/resizable-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/rich-text-editor-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/rich-text-editor-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/root-layout-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/root-layout-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/root-layout.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/root-layout.svg is excluded by !**/*.svg and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/scrollbar-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/scrollbar-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/scrollbar.svg is excluded by !**/*.svg and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/scroller-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/scroller-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/scroller.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/scroller.svg is excluded by !**/*.svg and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/segmented-control-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/segmented-control-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/select-menu-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/select-menu-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/select-menu.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/select-menu.svg is excluded by !**/*.svg and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/skeleton-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/skeleton-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/skeleton.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/skeleton.svg is excluded by !**/*.svg and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/split-button-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/split-button-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/split-button.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/split-button.svg is excluded by !**/*.svg and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/stack-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/stack-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/stack.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/stack.svg is excluded by !**/*.svg and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/tab-group-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/tab-group-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/table-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/table-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/table.svg is excluded by !**/*.svg and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/tabs-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/tabs-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/tabs.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/tabs.svg is excluded by !**/*.svg and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/text-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/text-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/text.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/text.svg is excluded by !**/*.svg and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/toast-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/toast-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/toast.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/toast.svg is excluded by !**/*.svg and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/toggle-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/toggle-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/toggle.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/toggle.svg is excluded by !**/*.svg and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/tooltip-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/tooltip-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/tooltip.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/tooltip.svg is excluded by !**/*.svg and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/validation-messages-dark.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/validation-messages-light.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/validation-messages.png is excluded by !**/*.png and included by **
  • apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/validation-messages.svg is excluded by !**/*.svg and included by **
📒 Files selected for processing (71)
  • .github/pull_request_template.md
  • .gitignore
  • .husky/pre-commit
  • CLAUDE.md
  • apps/dialtone-documentation/.github/CONTRIBUTING.md
  • apps/dialtone-documentation/docs/.vuepress/views/Overview.vue
  • apps/dialtone-documentation/docs/components/avatar.md
  • apps/dialtone-documentation/docs/components/badge.md
  • apps/dialtone-documentation/docs/components/banner.md
  • apps/dialtone-documentation/docs/components/breadcrumbs.md
  • apps/dialtone-documentation/docs/components/button-group.md
  • apps/dialtone-documentation/docs/components/button.md
  • apps/dialtone-documentation/docs/components/card.md
  • apps/dialtone-documentation/docs/components/checkbox-group.md
  • apps/dialtone-documentation/docs/components/checkbox.md
  • apps/dialtone-documentation/docs/components/chip.md
  • apps/dialtone-documentation/docs/components/collapsible.md
  • apps/dialtone-documentation/docs/components/combobox.md
  • apps/dialtone-documentation/docs/components/datepicker.md
  • apps/dialtone-documentation/docs/components/dropdown.md
  • apps/dialtone-documentation/docs/components/emoji-picker.md
  • apps/dialtone-documentation/docs/components/emoji-text-wrapper.md
  • apps/dialtone-documentation/docs/components/emoji.md
  • apps/dialtone-documentation/docs/components/empty-state.md
  • apps/dialtone-documentation/docs/components/filter-pill.md
  • apps/dialtone-documentation/docs/components/hovercard.md
  • apps/dialtone-documentation/docs/components/icon.md
  • apps/dialtone-documentation/docs/components/input-group.md
  • apps/dialtone-documentation/docs/components/input.md
  • apps/dialtone-documentation/docs/components/item-layout.md
  • apps/dialtone-documentation/docs/components/keyboard-shortcut.md
  • apps/dialtone-documentation/docs/components/lazy-show.md
  • apps/dialtone-documentation/docs/components/link.md
  • apps/dialtone-documentation/docs/components/list-item-group.md
  • apps/dialtone-documentation/docs/components/list-item.md
  • apps/dialtone-documentation/docs/components/loader.md
  • apps/dialtone-documentation/docs/components/modal.md
  • apps/dialtone-documentation/docs/components/mode-island.md
  • apps/dialtone-documentation/docs/components/notice.md
  • apps/dialtone-documentation/docs/components/pagination.md
  • apps/dialtone-documentation/docs/components/popover.md
  • apps/dialtone-documentation/docs/components/presence.md
  • apps/dialtone-documentation/docs/components/radio-group.md
  • apps/dialtone-documentation/docs/components/radio.md
  • apps/dialtone-documentation/docs/components/rich-text-editor.md
  • apps/dialtone-documentation/docs/components/root-layout.md
  • apps/dialtone-documentation/docs/components/scrollbar.md
  • apps/dialtone-documentation/docs/components/scroller.md
  • apps/dialtone-documentation/docs/components/select-menu.md
  • apps/dialtone-documentation/docs/components/skeleton.md
  • apps/dialtone-documentation/docs/components/split-button.md
  • apps/dialtone-documentation/docs/components/stack.md
  • apps/dialtone-documentation/docs/components/table.md
  • apps/dialtone-documentation/docs/components/text.md
  • apps/dialtone-documentation/docs/components/toast.md
  • apps/dialtone-documentation/docs/components/toggle.md
  • apps/dialtone-documentation/docs/components/tooltip.md
  • apps/dialtone-documentation/docs/components/validation-messages.md
  • apps/dialtone-documentation/project.json
  • apps/dialtone-documentation/scripts/thumbs/cache.mjs
  • apps/dialtone-documentation/scripts/thumbs/generate.mjs
  • apps/dialtone-documentation/scripts/thumbs/harness/App.vue
  • apps/dialtone-documentation/scripts/thumbs/harness/GalleryApp.vue
  • apps/dialtone-documentation/scripts/thumbs/harness/composables.js
  • apps/dialtone-documentation/scripts/thumbs/harness/index.html
  • apps/dialtone-documentation/scripts/thumbs/harness/main.js
  • apps/dialtone-documentation/scripts/thumbs/harness/vite-plugin-thumb-regen.mjs
  • apps/dialtone-documentation/scripts/thumbs/harness/vite.config.js
  • apps/dialtone-documentation/scripts/thumbs/wall.mjs
  • apps/dialtone-documentation/thumbs/README.md
  • apps/dialtone-documentation/thumbs/avatar.vue
💤 Files with no reviewable changes (45)
  • apps/dialtone-documentation/docs/components/emoji-text-wrapper.md
  • apps/dialtone-documentation/docs/components/badge.md
  • apps/dialtone-documentation/docs/components/pagination.md
  • apps/dialtone-documentation/docs/components/item-layout.md
  • apps/dialtone-documentation/docs/components/toast.md
  • apps/dialtone-documentation/docs/components/datepicker.md
  • apps/dialtone-documentation/docs/components/checkbox.md
  • apps/dialtone-documentation/docs/components/modal.md
  • apps/dialtone-documentation/docs/components/banner.md
  • apps/dialtone-documentation/docs/components/input-group.md
  • apps/dialtone-documentation/docs/components/hovercard.md
  • apps/dialtone-documentation/docs/components/emoji-picker.md
  • apps/dialtone-documentation/docs/components/icon.md
  • apps/dialtone-documentation/docs/components/skeleton.md
  • apps/dialtone-documentation/docs/components/button.md
  • apps/dialtone-documentation/docs/components/list-item.md
  • apps/dialtone-documentation/docs/components/keyboard-shortcut.md
  • apps/dialtone-documentation/docs/components/root-layout.md
  • apps/dialtone-documentation/docs/components/presence.md
  • apps/dialtone-documentation/docs/components/chip.md
  • apps/dialtone-documentation/docs/components/radio-group.md
  • apps/dialtone-documentation/docs/components/avatar.md
  • apps/dialtone-documentation/docs/components/scroller.md
  • apps/dialtone-documentation/docs/components/tooltip.md
  • apps/dialtone-documentation/docs/components/popover.md
  • apps/dialtone-documentation/docs/components/breadcrumbs.md
  • apps/dialtone-documentation/docs/components/lazy-show.md
  • apps/dialtone-documentation/docs/components/scrollbar.md
  • apps/dialtone-documentation/docs/components/select-menu.md
  • apps/dialtone-documentation/docs/components/radio.md
  • apps/dialtone-documentation/docs/components/toggle.md
  • apps/dialtone-documentation/docs/components/link.md
  • apps/dialtone-documentation/docs/components/checkbox-group.md
  • apps/dialtone-documentation/docs/components/empty-state.md
  • apps/dialtone-documentation/docs/components/notice.md
  • apps/dialtone-documentation/docs/components/dropdown.md
  • apps/dialtone-documentation/docs/components/validation-messages.md
  • apps/dialtone-documentation/docs/components/combobox.md
  • apps/dialtone-documentation/docs/components/split-button.md
  • apps/dialtone-documentation/docs/components/table.md
  • apps/dialtone-documentation/docs/components/button-group.md
  • apps/dialtone-documentation/docs/components/emoji.md
  • apps/dialtone-documentation/docs/components/collapsible.md
  • apps/dialtone-documentation/docs/components/input.md
  • apps/dialtone-documentation/docs/components/stack.md

Comment thread apps/dialtone-documentation/.github/CONTRIBUTING.md Outdated
Comment thread apps/dialtone-documentation/scripts/thumbs/generate.mjs Outdated
Previously only <Name>.vue and <Name>Default.story.vue were hashed, so
edits to sibling files in the same component directory (constants,
sub-component .vue files like ComboboxItemList.vue) produced cache hits
and skipped regeneration. The pre-commit hook would fire, exit clean,
and let stale PNGs reach the commit. Cache key now reads every .vue /
.js / .ts in the directory, excluding .test.* and .stories.*.
vite.close() and browser.close() only ran on the success path. An
uncaught throw between createServer() and browser.close() left the dev
server and Chromium subprocess running, which accumulated across
pre-commit-hook runs and caused 'port 5899 was busy' on subsequent
generator invocations. Wrapping in try/catch/finally guarantees cleanup
regardless of where the throw originates.
Documented the thumbnail output as <title-kebab>-{light,dark}.png under
/docs/..., but the generator writes <slug>-{light,dark}.png under
apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/.
Corrected to match the actual generator contract.

@coderabbitai coderabbitai Bot left a comment

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.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@apps/dialtone-documentation/scripts/thumbs/generate.mjs`:
- Around line 263-271: The code treats partial mode successes as full successes
by pushing the slug into results.ok when modeOk > 0; change that to push into
results.error so partial failures count as errors (replace results.ok.push(slug)
with results.error.push(slug) for the block handling modeOk > 0 and the similar
block at 286-290), ensuring exitCode derives from results.error length and
partial failures won't result in a 0 exit.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Central YAML (inherited), Organization UI (inherited)

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: 9a76e95e-d79f-489a-bd84-264ec6a33ec3

📥 Commits

Reviewing files that changed from the base of the PR and between e41d0a5 and 956cfb9.

📒 Files selected for processing (3)
  • apps/dialtone-documentation/.github/CONTRIBUTING.md
  • apps/dialtone-documentation/scripts/thumbs/cache.mjs
  • apps/dialtone-documentation/scripts/thumbs/generate.mjs

Comment thread apps/dialtone-documentation/scripts/thumbs/generate.mjs

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.

2 components show the dark thumbnail in light mode (Emoji, Image Viewer)

@francisrupert

Copy link
Copy Markdown
Contributor Author

2 components show the dark thumbnail in light mode (Emoji, Image Viewer)

Belu Montoya (@belumontoya),

Interesting. I can't replicate that on https://dialtone.dialpad.com/deploy-previews/pr-1278/components/ or locally –– unless you're talking about when viewing http://localhost:5899/?gallery&mode=light

Screen.Recording.2026-05-20.at.5.09.45.PM.mov

@github-actions

Copy link
Copy Markdown
Contributor

✔️ Deploy previews ready!
😎 Dialtone documentation preview: https://dialtone.dialpad.com/deploy-previews/pr-1278/
😎 Dialtone-vue preview: https://dialtone.dialpad.com/vue/deploy-previews/pr-1278/

@francisrupert
Francis Rupert (francisrupert) merged commit cb9992f into next May 27, 2026
12 checks passed
@francisrupert
Francis Rupert (francisrupert) deleted the component-wall-thumbs branch May 27, 2026 14:41
Brad Paugh (braddialpad) pushed a commit that referenced this pull request Jun 2, 2026
# [3.222.0-next.1](dialtone-vue/v3.221.0...dialtone-vue/v3.222.0-next.1) (2026-06-02)

### Bug Fixes

* **Combobox Multi Select:** DLT-3409 stop input from shrinking when chips are added ([#1257](#1257)) ([7f54cff](7f54cff))
* **Components:** dlt-3408 components clean up ([#1264](#1264)) ([38c383a](38c383a))
* **Components:** no-jira update tree-shaking export ([#1270](#1270)) ([f12ddcc](f12ddcc))
* **Editor:** NO-JIRA remove extra blank line in editor.mdx ([18c47ef](18c47ef))
* **Modal:** auto-detect shadow root and teleport dialog into it ([#1268](#1268)) ([f945c84](f945c84))
* NO-JIRA regenerate pnpm-lock.yaml after staging merge ([4462a1a](4462a1a))
* **Resizable, Box:** DLT-3445 accept full layout token set ([#1293](#1293)) ([4a63990](4a63990))
* **Resizable:** DLT-3444 center handle position ([#1291](#1291)) ([0d5d639](0d5d639))
* **Rich Text Editor:** bubble menu error ([68e3591](68e3591))
* **Segmented Control:** DLT-3443 correct background color of traveling indicator ([#1290](#1290)) ([5fc4fa8](5fc4fa8))
* **Split Button, Filter Pill:** DLT-3260 DLT-3261 correct misalignment at size 100 ([#1176](#1176)) ([fe2b777](fe2b777))
* **Tabs:** DLT-3251 improve accessibility ([#1171](#1171)) ([01b101e](01b101e))
* **Validation Messages:** DLT-3430 fix VoiceOver silent on validation messages ([#1285](#1285)) ([96adfdf](96adfdf))

### Code Refactoring

* **Box:** DLT-3333 rename percent prop values to p-suffix ([#1208](#1208)) ([e5fa5da](e5fa5da))
* **Combobox Multi Select:** NO-JIRA use logical css properties ([#1104](#1104)) ([a675daf](a675daf))
* **Components,recipes:** DLT-3043 DLT-3046 logical start/end naming with deprecated backward-compatible fallbacks ([#1079](#1079)) ([1d26a4e](1d26a4e))
* **Components:** DLT-3100 remove rootClass references ([#1184](#1184)) ([6531783](6531783))
* **Components:** DLT-3160 standardize v-model event handling ([#1201](#1201)) ([f1624d4](f1624d4))
* **Components:** dlt-3196 components to pascal case ([#1255](#1255)) ([aa6d259](aa6d259))
* **Components:** dlt-3282 renamed show prop to open ([#1190](#1190)) ([5509d0f](5509d0f))
* **Components:** dlt-3283 refactor prop/slots to be consistent ([#1196](#1196)) ([2d22c76](2d22c76))
* **Components:** DLT-3284 refactor props to not have native html attributes names ([#1204](#1204)) ([48a0f57](48a0f57))
* **Modal:** DLT-3262 migrate DtModal to native dialog element ([#1179](#1179)) ([589edb5](589edb5))
* **Resizable:** DLT-3335 align size props on --dt-layout-* instead of --dt-size-* ([#1215](#1215)) ([c156dbc](c156dbc))
* **Text:** DLT-3302 tone prop uses css variables instead of css utilities ([#1197](#1197)) ([75df16f](75df16f))
* **Tokens,css,link,text,breadcrumbs,input Group,split Button:** tokens, CSS foundation, deprecations, tooling DLT-3011 DLT-2961 DLT-3068 DLT-3069 DLT-3070 DLT-3071 DLT-3072 ([#1092](#1092)) ([7783090](7783090))
* **Tokens:** DLT-3013 convert color system from HSL to OKLCH ([#1060](#1060)) ([42dc418](42dc418))
* **Validation Messages:** DLT-3422 update to use icon slot over embedded icon ([#1272](#1272)) ([344b737](344b737))

### Documentation

* **Combinator:** DLT-3424 bridge logical to physical naming ([#1273](#1273)) ([ad4a5a1](ad4a5a1))
* **Css Utilities:** DLT-3337 migrate internal utility-class consumers to token-indexed names and rewrite radius docs ([#1212](#1212)) ([d675238](d675238))
* **Dialtone Vue:** DLT-3226 update documentation and consuming code to numeric size scale ([#1158](#1158)) ([149c763](149c763))
* DLT-3345 migrate d-stack*/d-flow* wrappers to DtStack ([#1218](#1218)) ([fa090ef](fa090ef))
* DLT-3434 build pipeline for component wall thumbs ([#1278](#1278)) ([cb9992f](cb9992f))
* **Playground:** DLT-3119 refine playground UI and integrate across doc site ([#1127](#1127)) ([ba6b599](ba6b599))

### Features

* **Avatar:** DLT-2942 updated avatar component ([#1047](#1047)) ([e50563d](e50563d))
* **Avatar:** DLT-3161 change from clickable to "interactive" ([#1182](#1182)) ([2d00fe0](2d00fe0))
* **Banner, Notice, Toast, Breadcrumbs, Checkbox, Radio, Input, Select Menu, Empty State:** visual refresh, dt-text integration, form api parity DLT-2944 DLT-2945 DLT-2949 DLT-2959 DLT-2960 DLT-2957 ([#1091](#1091)) ([16e908a](16e908a))
* **Box:** DLT-3315 new DtBox primitive component ([#1203](#1203)) ([e0c942e](e0c942e))
* **Button,tabs,split Button:** visual refresh and slot updates DLT-2946 DLT-2947 DLT-2965 ([#1090](#1090)) ([ffdd56f](ffdd56f))
* **Chip:** DLT-3195 change interactive prop default from true to false ([#1246](#1246)) ([30a5ea2](30a5ea2))
* **Colors:** DLT-3354 split green palette into distinct light and dark mode values ([#1225](#1225)) ([cf63034](cf63034))
* **Combinator:** DLT-3312 preview resolved value in sized props ([#1199](#1199)) ([61bb610](61bb610))
* **Components:** dlt-3096 add slot classes ([#1214](#1214)) ([5f6528e](5f6528e))
* **Components:** DLT-3157 align critical/positive prop values and CSS class names ([#1177](#1177)) ([edd98b2](edd98b2))
* **Components:** DLT-3159 enforce positive boolean props ([#1198](#1198)) ([ac73bdc](ac73bdc))
* **Css Utilities, Design Tokens:** DLT-3330 DLT-3332 add off-scale pixel-indexed layout tokens and sizing utilities ([#1206](#1206)) ([1054875](1054875))
* **Css Utilities, Eslint Plugin Dialtone:** DLT-3329 update border-radius css utilities and associated tooling ([#1211](#1211)) ([6bc3599](6bc3599))
* **Design Tokens, Text, Link, Box, Css:** DLT-3338 add info semantic tokens and consumers ([#1210](#1210)) ([2f04b45](2f04b45))
* **Design Tokens:** DLT-3368 DLT-3371 DLT-3410 add material dimension and brand-locked pairings ([#1252](#1252)) ([eeedc67](eeedc67))
* **Dialtone Css, Dialtone Tokens, Dialtone Vue:** DLT-3197 DLT-3198 DLT-3199 DLT-3200 DLT-3201 DLT-3202 DLT-3203 DLT-3204 DLT-3205 DLT-3206 DLT-3207 DLT-3208 DLT-3209 DLT-3210 DLT-3211 token-stop utility classes, migration tooling, and documentation ([#1150](#1150)) ([6237b84](6237b84))
* **Dialtone Vue:** DLT-3225 migrate component size props to numeric ordinal scale ([#1157](#1157)) ([725bd41](725bd41))
* **Eslint Plugin Dialtone:** DLT-3365 add deprecated-stack-flow-classes rule ([#1247](#1247)) ([8554f5a](8554f5a))
* **Filter Pill:** DLT-2941 DtFilterPill improvements ([#1110](#1110)) ([23c5689](23c5689))
* **Focusgroup:** DLT-3285 add v-dt-focusgroup directive for declarative roving tabindex ([#1187](#1187)) ([e1ea074](e1ea074))
* **Focustrap:** DLT-3297 add v-dt-focustrap directive for declarative focus trapping ([#1195](#1195)) ([6ef9a21](6ef9a21))
* **Link,button:** DLT-3012 add underline prop ([#1059](#1059)) ([1cb91ea](1cb91ea))
* **Modal:** DLT-3432 add transparentBackdrop prop ([#1277](#1277)) ([daace31](daace31))
* **Modal:** NO-JIRA apply headerClass to header text element ([#1279](#1279)) ([3cb4282](3cb4282))
* **Mode Directive, Mode Island:** DLT-3067 DLT-3078 DLT-3077 add `v-dt-mode` directive ([#1109](#1109)) ([f97efca](f97efca))
* **Popover, Tooltip:** DLT-3419 auto-append to nearest dialog for top-layer support ([#1266](#1266)) ([a5427e8](a5427e8))
* **Presence, Avatar:** DLT-3438 add icons to presence ([#1287](#1287)) ([51062be](51062be))
* **Prose:** DLT-3245 new component ([#1169](#1169)) ([adee928](adee928))
* **Scrollbar:** DLT-3158 implement object props ([#1249](#1249)) ([09ff456](09ff456))
* **Segmented Control:** DLT-413 new component ([#1144](#1144)) ([ad4c6c3](ad4c6c3))
* **Split Button:** DLT-3257 add show-divider prop ([#1173](#1173)) ([5bef411](5bef411))
* **Tabs:** DLT-3114 add vertical orientation variant ([#1120](#1120)) ([3290a23](3290a23))
* **Tabs:** DLT-3162 add spread prop for horizontal distribution ([#1135](#1135)) ([6e7cd04](6e7cd04))
* **Text:** export text component from dialtone-vue ([757fdb7](757fdb7))
* **Tokens, Css:** DLT-3331 rename success tokens and utility classes to positive ([#1230](#1230)) ([34bdff5](34bdff5))
* **Tokens:** DLT-2937 introduce spacing and layout token systems ([#1045](#1045)) ([de23e12](de23e12))
* **Tokens:** update color ramps and consumer color migration tools DLT-3004 DLT-3005 DLT-3006 DLT-3007 DLT-3008 ([#1054](#1054)) ([28cb1de](28cb1de))
* **Validation Messages:** DLT-3423 add info variant ([#1274](#1274)) ([412154b](412154b))
Brad Paugh (braddialpad) pushed a commit that referenced this pull request Jun 2, 2026
# [9.185.0-next.1](dialtone/v9.184.0...dialtone/v9.185.0-next.1) (2026-06-02)

### Bug Fixes

* **Combinator:** NO-JIRA remove unnecessary eslint-disable max-len comments ([e431bf6](e431bf6))
* **Combobox Multi Select:** DLT-3409 stop input from shrinking when chips are added ([#1257](#1257)) ([7f54cff](7f54cff))
* **Components:** dlt-3408 components clean up ([#1264](#1264)) ([38c383a](38c383a))
* **Components:** no-jira update tree-shaking export ([#1270](#1270)) ([f12ddcc](f12ddcc))
* correct types paths in package.json exports ([#1239](#1239)) ([21667f9](21667f9))
* **Css:** DLT-3321 reorder utility classes so single-direction wins over shorthand ([#1205](#1205)) ([df3bd74](df3bd74))
* **Css:** DLT-3336 register bgo, fco, bco vars as non-inheriting ([#1209](#1209)) ([0278620](0278620))
* **Dialtone Tokens:** NO-JIRA fix shadow DOM setAttribute crash in theme setters ([#1271](#1271)) ([554047b](554047b))
* **Doc:** NO-JIRA correct font size utility json ([#1015](#1015)) ([76cf0fa](76cf0fa))
* **Editor:** NO-JIRA remove extra blank line in editor.mdx ([18c47ef](18c47ef))
* **Modal:** auto-detect shadow root and teleport dialog into it ([#1268](#1268)) ([f945c84](f945c84))
* NO-JIRA regenerate pnpm-lock.yaml after staging merge ([4462a1a](4462a1a))
* possible merge issue in sidebarItem.vue ([5e2e91b](5e2e91b))
* **Resizable, Box:** DLT-3445 accept full layout token set ([#1293](#1293)) ([4a63990](4a63990))
* **Resizable:** DLT-3444 center handle position ([#1291](#1291)) ([0d5d639](0d5d639))
* **Rich Text Editor:** bubble menu error ([68e3591](68e3591))
* **Segmented Control, Button:** DLT-3446 update disabled active button style ([#1294](#1294)) ([9968aac](9968aac))
* **Segmented Control, Button:** NO-JIRA correct layering of slot items ([#1283](#1283)) ([046f212](046f212))
* **Segmented Control:** DLT-3443 correct background color of traveling indicator ([#1290](#1290)) ([5fc4fa8](5fc4fa8))
* **Split Button, Filter Pill:** DLT-3260 DLT-3261 correct misalignment at size 100 ([#1176](#1176)) ([fe2b777](fe2b777))
* **Stylelint:** disable hue-degree-notation rule and update OKLCH color syntax ([81f886e](81f886e))
* **Stylelint:** disable hue-degree-notation rule and update OKLCH color syntax ([8721f43](8721f43))
* **Tabs:** DLT-3251 improve accessibility ([#1171](#1171)) ([01b101e](01b101e))
* **Tokens:** DLT-3053 preserve root font size variable as reference ([#1093](#1093)) ([112ab4b](112ab4b))
* **Tokens:** handle multi-layer box shadows correctly in postcss plugin ([feea7f1](feea7f1))
* **Tokens:** NO-JIRA output line-height as unitless instead of percentages ([#1040](#1040)) ([33d8505](33d8505))
* **Tokens:** wrap css math expressions with calc() in layered build ([#966](#966)) ([1635f61](1635f61))
* update @dialpad/i18n dependencies to latest versions ([7a4b777](7a4b777))
* **Validation Messages:** DLT-3430 fix VoiceOver silent on validation messages ([#1285](#1285)) ([96adfdf](96adfdf))

### Code Refactoring

* **Box:** DLT-3333 rename percent prop values to p-suffix ([#1208](#1208)) ([e5fa5da](e5fa5da))
* **Combinator:** DLT-3418 migrate controls prop changes ([#1261](#1261)) ([ab03b44](ab03b44))
* **Combobox Multi Select:** NO-JIRA use logical css properties ([#1104](#1104)) ([a675daf](a675daf))
* **Components,recipes:** DLT-3043 DLT-3046 logical start/end naming with deprecated backward-compatible fallbacks ([#1079](#1079)) ([1d26a4e](1d26a4e))
* **Components:** DLT-3100 remove rootClass references ([#1184](#1184)) ([6531783](6531783))
* **Components:** DLT-3160 standardize v-model event handling ([#1201](#1201)) ([f1624d4](f1624d4))
* **Components:** dlt-3196 components to pascal case ([#1255](#1255)) ([aa6d259](aa6d259))
* **Components:** dlt-3282 renamed show prop to open ([#1190](#1190)) ([5509d0f](5509d0f))
* **Components:** dlt-3283 refactor prop/slots to be consistent ([#1196](#1196)) ([2d22c76](2d22c76))
* **Components:** DLT-3284 refactor props to not have native html attributes names ([#1204](#1204)) ([48a0f57](48a0f57))
* **Css:** DLT-1876 css logical properties ([#872](#872)) ([1acd6c9](1acd6c9))
* **Modal:** DLT-3262 migrate DtModal to native dialog element ([#1179](#1179)) ([589edb5](589edb5))
* **Notice,banner,toast:** DLT-3296 decouple CSS and fix specificity violations ([#1194](#1194)) ([9579ac0](9579ac0))
* **Resizable:** DLT-3335 align size props on --dt-layout-* instead of --dt-size-* ([#1215](#1215)) ([c156dbc](c156dbc))
* **Style:** DLT-3014 wrap all styles in css cascade layers ([#1061](#1061)) ([f8b3fed](f8b3fed))
* **Text:** DLT-2883 rename headline sizes from xxl => 2xl, etc ([#1029](#1029)) ([0ac86f3](0ac86f3))
* **Text:** DLT-3302 tone prop uses css variables instead of css utilities ([#1197](#1197)) ([75df16f](75df16f))
* **Tokens,css,link,text,breadcrumbs,input Group,split Button:** tokens, CSS foundation, deprecations, tooling DLT-3011 DLT-2961 DLT-3068 DLT-3069 DLT-3070 DLT-3071 DLT-3072 ([#1092](#1092)) ([7783090](7783090))
* **Tokens:** DLT-2884 deprecate space tokens in favor of size tokens ([#1013](#1013)) ([63f6d2f](63f6d2f))
* **Tokens:** DLT-3013 convert color system from HSL to OKLCH ([#1060](#1060)) ([42dc418](42dc418))
* **Validation Messages:** DLT-3422 update to use icon slot over embedded icon ([#1272](#1272)) ([344b737](344b737))

### Documentation

* **Border Radius:** dlt-3362 border-radius migration guide ([#1280](#1280)) ([12fd76a](12fd76a))
* **Combinator:** DLT-3424 bridge logical to physical naming ([#1273](#1273)) ([ad4a5a1](ad4a5a1))
* **Components:** DLT-3178 DLT-3182 unify code examples into single code-example component ([#1147](#1147)) ([d0b6e14](d0b6e14))
* **Css Utilities:** DLT-3295 DLT-3280 mark physical utilities as deprecated ([#1193](#1193)) ([73f1479](73f1479))
* **Css Utilities:** DLT-3337 migrate internal utility-class consumers to token-indexed names and rewrite radius docs ([#1212](#1212)) ([d675238](d675238))
* **Dialog:** dlt-3361 dtmodal native dialog migration ([#1275](#1275)) ([4ef8a09](4ef8a09))
* **Dialtone Vue:** DLT-3226 update documentation and consuming code to numeric size scale ([#1158](#1158)) ([149c763](149c763))
* DLT-1510 DLT-1511 DLT-1512 site redesign and ia ([#968](#968)) ([6ea7eb9](6ea7eb9))
* DLT-2908 ui kits landing page ([#1049](#1049)) ([d805b9d](d805b9d))
* DLT-3016 migration docs ([#1224](#1224)) ([3d73a43](3d73a43))
* DLT-3243 fenced code blocks for examples and snippets ([#1166](#1166)) ([cb169df](cb169df))
* DLT-3250 display component status badges in sidebar and page headers ([#1170](#1170)) ([7d5f5d5](7d5f5d5))
* DLT-3252 add GFM alert syntax for notices ([#1172](#1172)) ([1697911](1697911))
* DLT-3258 DLT-3259 improve sidebar search with logical keywords and fuzzy matching ([#1174](#1174)) ([2bf4639](2bf4639))
* DLT-3345 migrate d-stack*/d-flow* wrappers to DtStack ([#1218](#1218)) ([fa090ef](fa090ef))
* DLT-3434 build pipeline for component wall thumbs ([#1278](#1278)) ([cb9992f](cb9992f))
* **Downloads:** DLT-3052 DLT-3355 add downloads section and navbar hovercards ([#1229](#1229)) ([ecf5f85](ecf5f85))
* **Foundations, Homepage:** DLT-3349 DLT-3350 refresh foundations content and homepage ([#1228](#1228)) ([ab73dfd](ab73dfd))
* **Layout And Spacing:** improve to focus on understanding new layout and spacing system ([c75201f](c75201f))
* **Migration Guide:** NO-JIRA improve prop/slot migration guide ([#1227](#1227)) ([1328452](1328452))
* NO-JIRA add typography utilities to DtText migration guide ([#1296](#1296)) ([1dcf975](1dcf975))
* NO-JIRA fix focus left-nav items on keypress down up ([#1106](#1106)) ([882c9b9](882c9b9))
* **Playground:** DLT-3119 refine playground UI and integrate across doc site ([#1127](#1127)) ([ba6b599](ba6b599))
* **Playground:** DLT-3242 segmented control for compact enum props ([#1165](#1165)) ([fa440d8](fa440d8))
* **Recipes:** dlt-3308 recipes removed from dialtone - migration guide ([#1269](#1269)) ([d1d5c59](d1d5c59))
* **Tabs, Skeleton, Rich Text Editor:** DLT-3347 update doc page code examples on next branch ([#1248](#1248)) ([5837895](5837895))
* **Utilities:** DLT-3183 convert to vue demo fenced block ([#1167](#1167)) ([522197f](522197f))

### Features

* **Avatar:** DLT-2942 updated avatar component ([#1047](#1047)) ([e50563d](e50563d))
* **Avatar:** DLT-3161 change from clickable to "interactive" ([#1182](#1182)) ([2d00fe0](2d00fe0))
* **Banner, Notice, Toast, Breadcrumbs, Checkbox, Radio, Input, Select Menu, Empty State:** visual refresh, dt-text integration, form api parity DLT-2944 DLT-2945 DLT-2949 DLT-2959 DLT-2960 DLT-2957 ([#1091](#1091)) ([16e908a](16e908a))
* **Box:** DLT-3315 new DtBox primitive component ([#1203](#1203)) ([e0c942e](e0c942e))
* **Button,tabs,split Button:** visual refresh and slot updates DLT-2946 DLT-2947 DLT-2965 ([#1090](#1090)) ([ffdd56f](ffdd56f))
* **Chip:** DLT-3195 change interactive prop default from true to false ([#1246](#1246)) ([30a5ea2](30a5ea2))
* **Colors, Link, Tokens:** DLT-3360 retune blue/gold/purple/black/red palette, add mention semantic tokens, migrate success to positive ([#1245](#1245)) ([880b37b](880b37b))
* **Colors:** DLT-3354 split green palette into distinct light and dark mode values ([#1225](#1225)) ([cf63034](cf63034))
* **Combinator:** DLT-3312 preview resolved value in sized props ([#1199](#1199)) ([61bb610](61bb610))
* **Components:** dlt-3096 add slot classes ([#1214](#1214)) ([5f6528e](5f6528e))
* **Components:** DLT-3157 align critical/positive prop values and CSS class names ([#1177](#1177)) ([edd98b2](edd98b2))
* **Components:** DLT-3159 enforce positive boolean props ([#1198](#1198)) ([ac73bdc](ac73bdc))
* **Components:** DLT-3192 establish the slotclass convention rule ([#1216](#1216)) ([3c399d4](3c399d4))
* **Css Utilities, Design Tokens:** DLT-3330 DLT-3332 add off-scale pixel-indexed layout tokens and sizing utilities ([#1206](#1206)) ([1054875](1054875))
* **Css Utilities, Eslint Plugin Dialtone:** DLT-3329 update border-radius css utilities and associated tooling ([#1211](#1211)) ([6bc3599](6bc3599))
* **Css Utilities:** DLT-3357 DLT-3358 add ease-in and retune ease-out ([#1226](#1226)) ([961965a](961965a))
* **Css Utility:** DLT-2715 add default color for border css utilities ([#874](#874)) ([71310ab](71310ab))
* **Design Tokens, Modal, Notice, Popover, Hovercard, Emoji Picker:** DLT-3436 add overlay surface color ([#1282](#1282)) ([62d60f2](62d60f2))
* **Design Tokens, Text, Link, Box, Css:** DLT-3338 add info semantic tokens and consumers ([#1210](#1210)) ([2f04b45](2f04b45))
* **Design Tokens:** DLT-3356 extend prota/deuter/trita accessible themes to semantic and components ([#1237](#1237)) ([d8fbf58](d8fbf58))
* **Design Tokens:** DLT-3368 DLT-3371 DLT-3410 add material dimension and brand-locked pairings ([#1252](#1252)) ([eeedc67](eeedc67))
* **Dialtone Css, Dialtone Documentation:** DLT-3363 add theme-to-mode migration guide and codemod ([#1260](#1260)) ([90aa4b4](90aa4b4))
* **Dialtone Css, Dialtone Tokens, Dialtone Vue:** DLT-3197 DLT-3198 DLT-3199 DLT-3200 DLT-3201 DLT-3202 DLT-3203 DLT-3204 DLT-3205 DLT-3206 DLT-3207 DLT-3208 DLT-3209 DLT-3210 DLT-3211 token-stop utility classes, migration tooling, and documentation ([#1150](#1150)) ([6237b84](6237b84))
* **Dialtone Css:** DLT-3278 add dialtone-migrate-typography codemod ([#1289](#1289)) ([aea7eba](aea7eba))
* **Dialtone Icons:** NO-JIRA add /vue export to dialtone-icon ([#1304](#1304)) ([081b0e9](081b0e9))
* **Dialtone Vue:** DLT-3225 migrate component size props to numeric ordinal scale ([#1157](#1157)) ([725bd41](725bd41))
* **Eslint Plugin Dialtone:** DLT-3047 physical-to-logical naming migration tooling ([#1163](#1163)) ([d94dc4b](d94dc4b))
* **Eslint Plugin Dialtone:** DLT-3227 DLT-3228 add deprecated-tshirt-sizes ESLint rule and migration codemod ([#1159](#1159)) ([21a011f](21a011f))
* **Eslint Plugin Dialtone:** DLT-3365 add deprecated-stack-flow-classes rule ([#1247](#1247)) ([8554f5a](8554f5a))
* **Filter Pill:** DLT-2704 create component ([#473](#473)) ([6267445](6267445))
* **Filter Pill:** DLT-2941 DtFilterPill improvements ([#1110](#1110)) ([23c5689](23c5689))
* **Focusgroup:** DLT-3285 add v-dt-focusgroup directive for declarative roving tabindex ([#1187](#1187)) ([e1ea074](e1ea074))
* **Focustrap:** DLT-3297 add v-dt-focustrap directive for declarative focus trapping ([#1195](#1195)) ([6ef9a21](6ef9a21))
* **Link,button:** DLT-3012 add underline prop ([#1059](#1059)) ([1cb91ea](1cb91ea))
* **Mcp Server, Query Core, Dialtone Docs, Dialtone Cli:** DLT-3416 add search_documentation tool ([#1259](#1259)) ([ef1d5a8](ef1d5a8))
* **Modal:** DLT-3432 add transparentBackdrop prop ([#1277](#1277)) ([daace31](daace31))
* **Modal:** NO-JIRA apply headerClass to header text element ([#1279](#1279)) ([3cb4282](3cb4282))
* **Mode Directive, Mode Island:** DLT-3067 DLT-3078 DLT-3077 add `v-dt-mode` directive ([#1109](#1109)) ([f97efca](f97efca))
* **Popover, Tooltip:** DLT-3419 auto-append to nearest dialog for top-layer support ([#1266](#1266)) ([a5427e8](a5427e8))
* **Presence, Avatar:** DLT-3438 add icons to presence ([#1287](#1287)) ([51062be](51062be))
* **Prose:** DLT-3245 new component ([#1169](#1169)) ([adee928](adee928))
* **Scripts, Eslint, Stylelint:** DLT-3359 add success-to-positive migration tooling ([#1231](#1231)) ([0d652a5](0d652a5))
* **Scripts:** DLT-3033 DLT-3034 DLT-3035 add link-rendering migration codemod and ESLint rule ([#1233](#1233)) ([35a7238](35a7238))
* **Scripts:** DLT-3304 add scripts/docs for migration props changes ([#1219](#1219)) ([589173f](589173f))
* **Scrollbar:** DLT-3158 implement object props ([#1249](#1249)) ([09ff456](09ff456))
* **Segmented Control:** DLT-413 new component ([#1144](#1144)) ([ad4c6c3](ad4c6c3))
* **Split Button:** DLT-3257 add show-divider prop ([#1173](#1173)) ([5bef411](5bef411))
* **Style:** DLT-2976 update underline thickness and offset ([#1058](#1058)) ([1e56947](1e56947))
* **Tabs:** DLT-3114 add vertical orientation variant ([#1120](#1120)) ([3290a23](3290a23))
* **Tabs:** DLT-3162 add spread prop for horizontal distribution ([#1135](#1135)) ([6e7cd04](6e7cd04))
* **Text:** export text component from dialtone-vue ([757fdb7](757fdb7))
* **Text:** new vue component DLT-2864 DLT-2863 DLT-2862 ([#995](#995)) ([196ef8a](196ef8a))
* **Tokens, Css:** DLT-3331 rename success tokens and utility classes to positive ([#1230](#1230)) ([34bdff5](34bdff5))
* **Tokens:** DLT-1977 add high contrast design tokens and theme ([#938](#938)) ([a1c0457](a1c0457))
* **Tokens:** DLT-2767 exploratory shell themes ([#909](#909)) ([3afcf63](3afcf63))
* **Tokens:** DLT-2781 create color-assistive themes ([#921](#921)) ([a6cc397](a6cc397))
* **Tokens:** DLT-2802 DLT-2563 layered theming system and mode island component ([#945](#945)) ([5c72c6c](5c72c6c))
* **Tokens:** DLT-2937 introduce spacing and layout token systems ([#1045](#1045)) ([de23e12](de23e12))
* **Tokens:** update color ramps and consumer color migration tools DLT-3004 DLT-3005 DLT-3006 DLT-3007 DLT-3008 ([#1054](#1054)) ([28cb1de](28cb1de))
* **Typography, Tokens:** DLT-2856 DLT-2857 next typography system ([#994](#994)) ([d744e97](d744e97))
* **Validation Messages:** DLT-3423 add info variant ([#1274](#1274)) ([412154b](412154b))
Brad Paugh (braddialpad) pushed a commit that referenced this pull request Jun 4, 2026
# [1.2.0-next.11](combinator/v1.2.0-next.10...combinator/v1.2.0-next.11) (2026-06-04)

### Bug Fixes

* **Combinator:** DLT-3171 update v-model bindings from rendered component events ([#1299](#1299)) ([81d0c15](81d0c15))

### Documentation

* DLT-3434 build pipeline for component wall thumbs ([#1278](#1278)) ([cb9992f](cb9992f))

### Reverts

* remove accidental next-shadows commits from next ([868a502](868a502))
Brad Paugh (braddialpad) pushed a commit that referenced this pull request Jun 4, 2026
# [9.187.0-next.1](dialtone/v9.186.0...dialtone/v9.187.0-next.1) (2026-06-04)

### Bug Fixes

* **Combinator:** DLT-3171 update v-model bindings from rendered component events ([#1299](#1299)) ([81d0c15](81d0c15))
* **Combinator:** NO-JIRA remove unnecessary eslint-disable max-len comments ([e431bf6](e431bf6))
* **Components:** dlt-3408 components clean up ([#1264](#1264)) ([38c383a](38c383a))
* **Components:** no-jira update tree-shaking export ([#1270](#1270)) ([f12ddcc](f12ddcc))
* **Contact Info:** no-jira remove min-inline-size regression from token migration ([ed8ee12](ed8ee12))
* correct types paths in package.json exports ([#1239](#1239)) ([21667f9](21667f9))
* **Css:** DLT-3321 reorder utility classes so single-direction wins over shorthand ([#1205](#1205)) ([df3bd74](df3bd74))
* **Css:** DLT-3336 register bgo, fco, bco vars as non-inheriting ([#1209](#1209)) ([0278620](0278620))
* **Dialtone Tokens:** NO-JIRA fix shadow DOM setAttribute crash in theme setters ([#1271](#1271)) ([554047b](554047b))
* **Doc:** NO-JIRA correct font size utility json ([#1015](#1015)) ([76cf0fa](76cf0fa))
* **Documentation:** DLT-3451 migrate stale @change/[@input](https://github.com/input) handlers to [@update](https://github.com/update):model-value ([#1300](#1300)) ([9260128](9260128))
* **Editor:** NO-JIRA remove extra blank line in editor.mdx ([18c47ef](18c47ef))
* **Modal:** auto-detect shadow root and teleport dialog into it ([#1268](#1268)) ([f945c84](f945c84))
* NO-JIRA regenerate pnpm-lock.yaml after staging merge ([4462a1a](4462a1a))
* possible merge issue in sidebarItem.vue ([5e2e91b](5e2e91b))
* **Resizable, Box:** DLT-3445 accept full layout token set ([#1293](#1293)) ([4a63990](4a63990))
* **Resizable:** DLT-3444 center handle position ([#1291](#1291)) ([0d5d639](0d5d639))
* **Rich Text Editor:** bubble menu error ([68e3591](68e3591))
* **Segmented Control, Button:** DLT-3446 update disabled active button style ([#1294](#1294)) ([9968aac](9968aac))
* **Segmented Control, Button:** NO-JIRA correct layering of slot items ([#1283](#1283)) ([046f212](046f212))
* **Segmented Control:** DLT-3443 correct background color of traveling indicator ([#1290](#1290)) ([5fc4fa8](5fc4fa8))
* **Split Button, Filter Pill:** DLT-3260 DLT-3261 correct misalignment at size 100 ([#1176](#1176)) ([fe2b777](fe2b777))
* **Stylelint:** disable hue-degree-notation rule and update OKLCH color syntax ([81f886e](81f886e))
* **Stylelint:** disable hue-degree-notation rule and update OKLCH color syntax ([8721f43](8721f43))
* **Tabs:** DLT-3251 improve accessibility ([#1171](#1171)) ([01b101e](01b101e))
* **Tokens:** DLT-3053 preserve root font size variable as reference ([#1093](#1093)) ([112ab4b](112ab4b))
* **Tokens:** handle multi-layer box shadows correctly in postcss plugin ([feea7f1](feea7f1))
* **Tokens:** NO-JIRA output line-height as unitless instead of percentages ([#1040](#1040)) ([33d8505](33d8505))
* **Tokens:** wrap css math expressions with calc() in layered build ([#966](#966)) ([1635f61](1635f61))
* update @dialpad/i18n dependencies to latest versions ([7a4b777](7a4b777))
* **Validation Messages:** DLT-3430 fix VoiceOver silent on validation messages ([#1285](#1285)) ([96adfdf](96adfdf))

### Code Refactoring

* **Box:** DLT-3333 rename percent prop values to p-suffix ([#1208](#1208)) ([e5fa5da](e5fa5da))
* **Combinator:** DLT-3418 migrate controls prop changes ([#1261](#1261)) ([ab03b44](ab03b44))
* **Combobox Multi Select:** NO-JIRA use logical css properties ([#1104](#1104)) ([a675daf](a675daf))
* **Components,recipes:** DLT-3043 DLT-3046 logical start/end naming with deprecated backward-compatible fallbacks ([#1079](#1079)) ([1d26a4e](1d26a4e))
* **Components:** DLT-3100 remove rootClass references ([#1184](#1184)) ([6531783](6531783))
* **Components:** DLT-3160 standardize v-model event handling ([#1201](#1201)) ([f1624d4](f1624d4))
* **Components:** dlt-3196 components to pascal case ([#1255](#1255)) ([aa6d259](aa6d259))
* **Components:** dlt-3282 renamed show prop to open ([#1190](#1190)) ([5509d0f](5509d0f))
* **Components:** dlt-3283 refactor prop/slots to be consistent ([#1196](#1196)) ([2d22c76](2d22c76))
* **Components:** DLT-3284 refactor props to not have native html attributes names ([#1204](#1204)) ([48a0f57](48a0f57))
* **Css:** DLT-1876 css logical properties ([#872](#872)) ([1acd6c9](1acd6c9))
* **Modal:** DLT-3262 migrate DtModal to native dialog element ([#1179](#1179)) ([589edb5](589edb5))
* **Notice,banner,toast:** DLT-3296 decouple CSS and fix specificity violations ([#1194](#1194)) ([9579ac0](9579ac0))
* **Resizable:** DLT-3335 align size props on --dt-layout-* instead of --dt-size-* ([#1215](#1215)) ([c156dbc](c156dbc))
* **Style:** DLT-3014 wrap all styles in css cascade layers ([#1061](#1061)) ([f8b3fed](f8b3fed))
* **Text:** DLT-2883 rename headline sizes from xxl => 2xl, etc ([#1029](#1029)) ([0ac86f3](0ac86f3))
* **Text:** DLT-3302 tone prop uses css variables instead of css utilities ([#1197](#1197)) ([75df16f](75df16f))
* **Tokens,css,link,text,breadcrumbs,input Group,split Button:** tokens, CSS foundation, deprecations, tooling DLT-3011 DLT-2961 DLT-3068 DLT-3069 DLT-3070 DLT-3071 DLT-3072 ([#1092](#1092)) ([7783090](7783090))
* **Tokens:** DLT-2884 deprecate space tokens in favor of size tokens ([#1013](#1013)) ([63f6d2f](63f6d2f))
* **Tokens:** DLT-3013 convert color system from HSL to OKLCH ([#1060](#1060)) ([42dc418](42dc418))
* **Validation Messages:** DLT-3422 update to use icon slot over embedded icon ([#1272](#1272)) ([344b737](344b737))

### Documentation

* **Border Radius:** dlt-3362 border-radius migration guide ([#1280](#1280)) ([12fd76a](12fd76a))
* **Combinator:** DLT-3424 bridge logical to physical naming ([#1273](#1273)) ([ad4a5a1](ad4a5a1))
* **Components:** DLT-3178 DLT-3182 unify code examples into single code-example component ([#1147](#1147)) ([d0b6e14](d0b6e14))
* **Css Utilities:** DLT-3295 DLT-3280 mark physical utilities as deprecated ([#1193](#1193)) ([73f1479](73f1479))
* **Css Utilities:** DLT-3337 migrate internal utility-class consumers to token-indexed names and rewrite radius docs ([#1212](#1212)) ([d675238](d675238))
* **Dialog:** dlt-3361 dtmodal native dialog migration ([#1275](#1275)) ([4ef8a09](4ef8a09))
* **Dialtone Vue:** DLT-3226 update documentation and consuming code to numeric size scale ([#1158](#1158)) ([149c763](149c763))
* DLT-1510 DLT-1511 DLT-1512 site redesign and ia ([#968](#968)) ([6ea7eb9](6ea7eb9))
* DLT-2908 ui kits landing page ([#1049](#1049)) ([d805b9d](d805b9d))
* DLT-3016 migration docs ([#1224](#1224)) ([3d73a43](3d73a43))
* DLT-3212 automate token-derived docs data files from build sources ([#1298](#1298)) ([cf064f1](cf064f1))
* DLT-3243 fenced code blocks for examples and snippets ([#1166](#1166)) ([cb169df](cb169df))
* DLT-3250 display component status badges in sidebar and page headers ([#1170](#1170)) ([7d5f5d5](7d5f5d5))
* DLT-3252 add GFM alert syntax for notices ([#1172](#1172)) ([1697911](1697911))
* DLT-3258 DLT-3259 improve sidebar search with logical keywords and fuzzy matching ([#1174](#1174)) ([2bf4639](2bf4639))
* DLT-3345 migrate d-stack*/d-flow* wrappers to DtStack ([#1218](#1218)) ([fa090ef](fa090ef))
* DLT-3434 build pipeline for component wall thumbs ([#1278](#1278)) ([cb9992f](cb9992f))
* **Downloads:** DLT-3052 DLT-3355 add downloads section and navbar hovercards ([#1229](#1229)) ([ecf5f85](ecf5f85))
* **Foundations, Homepage:** DLT-3349 DLT-3350 refresh foundations content and homepage ([#1228](#1228)) ([ab73dfd](ab73dfd))
* **Layout And Spacing:** improve to focus on understanding new layout and spacing system ([c75201f](c75201f))
* **Migration Guide:** NO-JIRA improve prop/slot migration guide ([#1227](#1227)) ([1328452](1328452))
* **Migration Script:** dlt-3303 master migration script to next ([#1288](#1288)) ([332b3cc](332b3cc))
* NO-JIRA add typography utilities to DtText migration guide ([#1296](#1296)) ([1dcf975](1dcf975))
* NO-JIRA fix focus left-nav items on keypress down up ([#1106](#1106)) ([882c9b9](882c9b9))
* **Playground:** DLT-3119 refine playground UI and integrate across doc site ([#1127](#1127)) ([ba6b599](ba6b599))
* **Playground:** DLT-3242 segmented control for compact enum props ([#1165](#1165)) ([fa440d8](fa440d8))
* **Recipes:** dlt-3308 recipes removed from dialtone - migration guide ([#1269](#1269)) ([d1d5c59](d1d5c59))
* **Tabs, Skeleton, Rich Text Editor:** DLT-3347 update doc page code examples on next branch ([#1248](#1248)) ([5837895](5837895))
* **Utilities:** DLT-3183 convert to vue demo fenced block ([#1167](#1167)) ([522197f](522197f))

### Features

* **Avatar:** DLT-2942 updated avatar component ([#1047](#1047)) ([e50563d](e50563d))
* **Avatar:** DLT-3161 change from clickable to "interactive" ([#1182](#1182)) ([2d00fe0](2d00fe0))
* **Banner, Notice, Toast, Breadcrumbs, Checkbox, Radio, Input, Select Menu, Empty State:** visual refresh, dt-text integration, form api parity DLT-2944 DLT-2945 DLT-2949 DLT-2959 DLT-2960 DLT-2957 ([#1091](#1091)) ([16e908a](16e908a))
* **Box:** DLT-3315 new DtBox primitive component ([#1203](#1203)) ([e0c942e](e0c942e))
* **Button,tabs,split Button:** visual refresh and slot updates DLT-2946 DLT-2947 DLT-2965 ([#1090](#1090)) ([ffdd56f](ffdd56f))
* **Chip:** DLT-3195 change interactive prop default from true to false ([#1246](#1246)) ([30a5ea2](30a5ea2))
* **Colors, Link, Tokens:** DLT-3360 retune blue/gold/purple/black/red palette, add mention semantic tokens, migrate success to positive ([#1245](#1245)) ([880b37b](880b37b))
* **Colors:** DLT-3354 split green palette into distinct light and dark mode values ([#1225](#1225)) ([cf63034](cf63034))
* **Combinator:** DLT-3312 preview resolved value in sized props ([#1199](#1199)) ([61bb610](61bb610))
* **Components:** dlt-3096 add slot classes ([#1214](#1214)) ([5f6528e](5f6528e))
* **Components:** DLT-3157 align critical/positive prop values and CSS class names ([#1177](#1177)) ([edd98b2](edd98b2))
* **Components:** DLT-3159 enforce positive boolean props ([#1198](#1198)) ([ac73bdc](ac73bdc))
* **Components:** DLT-3192 establish the slotclass convention rule ([#1216](#1216)) ([3c399d4](3c399d4))
* **Css Utilities, Design Tokens:** DLT-3330 DLT-3332 add off-scale pixel-indexed layout tokens and sizing utilities ([#1206](#1206)) ([1054875](1054875))
* **Css Utilities, Eslint Plugin Dialtone:** DLT-3329 update border-radius css utilities and associated tooling ([#1211](#1211)) ([6bc3599](6bc3599))
* **Css Utilities:** DLT-3357 DLT-3358 add ease-in and retune ease-out ([#1226](#1226)) ([961965a](961965a))
* **Css Utility:** DLT-2715 add default color for border css utilities ([#874](#874)) ([71310ab](71310ab))
* **Design Tokens, Modal, Notice, Popover, Hovercard, Emoji Picker:** DLT-3436 add overlay surface color ([#1282](#1282)) ([62d60f2](62d60f2))
* **Design Tokens, Text, Link, Box, Css:** DLT-3338 add info semantic tokens and consumers ([#1210](#1210)) ([2f04b45](2f04b45))
* **Design Tokens:** DLT-3356 extend prota/deuter/trita accessible themes to semantic and components ([#1237](#1237)) ([d8fbf58](d8fbf58))
* **Design Tokens:** DLT-3368 DLT-3371 DLT-3410 add material dimension and brand-locked pairings ([#1252](#1252)) ([eeedc67](eeedc67))
* **Dialtone Css, Dialtone Documentation:** DLT-3363 add theme-to-mode migration guide and codemod ([#1260](#1260)) ([90aa4b4](90aa4b4))
* **Dialtone Css, Dialtone Tokens, Dialtone Vue:** DLT-3197 DLT-3198 DLT-3199 DLT-3200 DLT-3201 DLT-3202 DLT-3203 DLT-3204 DLT-3205 DLT-3206 DLT-3207 DLT-3208 DLT-3209 DLT-3210 DLT-3211 token-stop utility classes, migration tooling, and documentation ([#1150](#1150)) ([6237b84](6237b84))
* **Dialtone Css:** DLT-3278 add dialtone-migrate-typography codemod ([#1289](#1289)) ([aea7eba](aea7eba))
* **Dialtone Icons:** NO-JIRA add /vue export to dialtone-icon ([#1304](#1304)) ([081b0e9](081b0e9))
* **Dialtone Vue:** DLT-3225 migrate component size props to numeric ordinal scale ([#1157](#1157)) ([725bd41](725bd41))
* **Eslint Plugin Dialtone:** DLT-3047 physical-to-logical naming migration tooling ([#1163](#1163)) ([d94dc4b](d94dc4b))
* **Eslint Plugin Dialtone:** DLT-3227 DLT-3228 add deprecated-tshirt-sizes ESLint rule and migration codemod ([#1159](#1159)) ([21a011f](21a011f))
* **Eslint Plugin Dialtone:** DLT-3365 add deprecated-stack-flow-classes rule ([#1247](#1247)) ([8554f5a](8554f5a))
* **Filter Pill:** DLT-2704 create component ([#473](#473)) ([6267445](6267445))
* **Filter Pill:** DLT-2941 DtFilterPill improvements ([#1110](#1110)) ([23c5689](23c5689))
* **Focusgroup:** DLT-3285 add v-dt-focusgroup directive for declarative roving tabindex ([#1187](#1187)) ([e1ea074](e1ea074))
* **Focustrap:** DLT-3297 add v-dt-focustrap directive for declarative focus trapping ([#1195](#1195)) ([6ef9a21](6ef9a21))
* **Icons:** DP-192459 add circle and circle-dashed icons ([#1305](#1305)) ([8c41212](8c41212))
* **Link,button:** DLT-3012 add underline prop ([#1059](#1059)) ([1cb91ea](1cb91ea))
* **Modal:** DLT-3432 add transparentBackdrop prop ([#1277](#1277)) ([daace31](daace31))
* **Modal:** NO-JIRA apply headerClass to header text element ([#1279](#1279)) ([3cb4282](3cb4282))
* **Mode Directive, Mode Island:** DLT-3067 DLT-3078 DLT-3077 add `v-dt-mode` directive ([#1109](#1109)) ([f97efca](f97efca))
* **Popover, Tooltip:** DLT-3419 auto-append to nearest dialog for top-layer support ([#1266](#1266)) ([a5427e8](a5427e8))
* **Presence, Avatar:** DLT-3438 add icons to presence ([#1287](#1287)) ([51062be](51062be))
* **Prose:** DLT-3245 new component ([#1169](#1169)) ([adee928](adee928))
* **Scripts, Eslint, Stylelint:** DLT-3359 add success-to-positive migration tooling ([#1231](#1231)) ([0d652a5](0d652a5))
* **Scripts:** DLT-3033 DLT-3034 DLT-3035 add link-rendering migration codemod and ESLint rule ([#1233](#1233)) ([35a7238](35a7238))
* **Scripts:** DLT-3304 add scripts/docs for migration props changes ([#1219](#1219)) ([589173f](589173f))
* **Scrollbar:** DLT-3158 implement object props ([#1249](#1249)) ([09ff456](09ff456))
* **Segmented Control:** DLT-413 new component ([#1144](#1144)) ([ad4c6c3](ad4c6c3))
* **Split Button:** DLT-3257 add show-divider prop ([#1173](#1173)) ([5bef411](5bef411))
* **Style:** DLT-2976 update underline thickness and offset ([#1058](#1058)) ([1e56947](1e56947))
* **Tabs:** DLT-3114 add vertical orientation variant ([#1120](#1120)) ([3290a23](3290a23))
* **Tabs:** DLT-3162 add spread prop for horizontal distribution ([#1135](#1135)) ([6e7cd04](6e7cd04))
* **Text:** export text component from dialtone-vue ([757fdb7](757fdb7))
* **Text:** new vue component DLT-2864 DLT-2863 DLT-2862 ([#995](#995)) ([196ef8a](196ef8a))
* **Tokens, Css:** DLT-3331 rename success tokens and utility classes to positive ([#1230](#1230)) ([34bdff5](34bdff5))
* **Tokens:** DLT-1977 add high contrast design tokens and theme ([#938](#938)) ([a1c0457](a1c0457))
* **Tokens:** DLT-2767 exploratory shell themes ([#909](#909)) ([3afcf63](3afcf63))
* **Tokens:** DLT-2781 create color-assistive themes ([#921](#921)) ([a6cc397](a6cc397))
* **Tokens:** DLT-2802 DLT-2563 layered theming system and mode island component ([#945](#945)) ([5c72c6c](5c72c6c))
* **Tokens:** DLT-2937 introduce spacing and layout token systems ([#1045](#1045)) ([de23e12](de23e12))
* **Tokens:** update color ramps and consumer color migration tools DLT-3004 DLT-3005 DLT-3006 DLT-3007 DLT-3008 ([#1054](#1054)) ([28cb1de](28cb1de))
* **Typography, Tokens:** DLT-2856 DLT-2857 next typography system ([#994](#994)) ([d744e97](d744e97))
* **Validation Messages:** DLT-3423 add info variant ([#1274](#1274)) ([412154b](412154b))

### Reverts

* remove accidental next-shadows commits from next ([868a502](868a502))
Brad Paugh (braddialpad) pushed a commit that referenced this pull request Jun 16, 2026
# [3.223.0-next.1](dialtone-vue/v3.222.0...dialtone-vue/v3.223.0-next.1) (2026-06-16)

### Bug Fixes

* **Components:** dlt-3408 components clean up ([#1264](#1264)) ([38c383a](38c383a))
* **Components:** no-jira update tree-shaking export ([#1270](#1270)) ([f12ddcc](f12ddcc))
* **Dialtone Vue:** NO-JIRA declare @vitejs/plugin-react devDependency for storybook build ([0a02bf8](0a02bf8))
* **Docs:** NO-JIRA actually static render the docs ([#1319](#1319)) ([0107a8e](0107a8e))
* **Editor:** NO-JIRA remove extra blank line in editor.mdx ([18c47ef](18c47ef))
* **Filter Pill, Mode Island:** NO-JIRA make next-only code SSR-safe after static rendering merge ([cd174ca](cd174ca))
* **Image Viewer:** DLT-3456 trap focus within the modal via v-dt-focustrap directive ([#1313](#1313)) ([a5aa3e7](a5aa3e7))
* **Modal:** auto-detect shadow root and teleport dialog into it ([#1268](#1268)) ([f945c84](f945c84))
* NO-JIRA regenerate pnpm-lock.yaml after staging merge ([4462a1a](4462a1a))
* **Resizable, Box:** DLT-3445 accept full layout token set ([#1293](#1293)) ([4a63990](4a63990))
* **Resizable:** DLT-3444 center handle position ([#1291](#1291)) ([0d5d639](0d5d639))
* **Rich Text Editor:** bubble menu error ([68e3591](68e3591))
* **Segmented Control:** DLT-3443 correct background color of traveling indicator ([#1290](#1290)) ([5fc4fa8](5fc4fa8))
* **Split Button, Filter Pill:** DLT-3260 DLT-3261 correct misalignment at size 100 ([#1176](#1176)) ([fe2b777](fe2b777))
* **Tabs:** DLT-3251 improve accessibility ([#1171](#1171)) ([01b101e](01b101e))
* **Validation Messages:** DLT-3430 fix VoiceOver silent on validation messages ([#1285](#1285)) ([96adfdf](96adfdf))

### Code Refactoring

* **Box:** DLT-3333 rename percent prop values to p-suffix ([#1208](#1208)) ([e5fa5da](e5fa5da))
* **Combobox Multi Select:** NO-JIRA use logical css properties ([#1104](#1104)) ([a675daf](a675daf))
* **Components,recipes:** DLT-3043 DLT-3046 logical start/end naming with deprecated backward-compatible fallbacks ([#1079](#1079)) ([1d26a4e](1d26a4e))
* **Components:** DLT-3100 remove rootClass references ([#1184](#1184)) ([6531783](6531783))
* **Components:** DLT-3160 standardize v-model event handling ([#1201](#1201)) ([f1624d4](f1624d4))
* **Components:** dlt-3196 components to pascal case ([#1255](#1255)) ([aa6d259](aa6d259))
* **Components:** dlt-3282 renamed show prop to open ([#1190](#1190)) ([5509d0f](5509d0f))
* **Components:** dlt-3283 refactor prop/slots to be consistent ([#1196](#1196)) ([2d22c76](2d22c76))
* **Components:** DLT-3284 refactor props to not have native html attributes names ([#1204](#1204)) ([48a0f57](48a0f57))
* **Modal:** DLT-3262 migrate DtModal to native dialog element ([#1179](#1179)) ([589edb5](589edb5))
* **Modal:** DLT-3453 trap focus with v-dt-focustrap directive ([#1316](#1316)) ([6e2a868](6e2a868))
* **Popover:** DLT-3455 trap focus with v-dt-focustrap directive ([#1312](#1312)) ([e57e227](e57e227))
* **Resizable:** DLT-3335 align size props on --dt-layout-* instead of --dt-size-* ([#1215](#1215)) ([c156dbc](c156dbc))
* **Text:** DLT-3302 tone prop uses css variables instead of css utilities ([#1197](#1197)) ([75df16f](75df16f))
* **Tokens,css,link,text,breadcrumbs,input Group,split Button:** tokens, CSS foundation, deprecations, tooling DLT-3011 DLT-2961 DLT-3068 DLT-3069 DLT-3070 DLT-3071 DLT-3072 ([#1092](#1092)) ([7783090](7783090))
* **Tokens:** DLT-3013 convert color system from HSL to OKLCH ([#1060](#1060)) ([42dc418](42dc418))
* **Validation Messages:** DLT-3422 update to use icon slot over embedded icon ([#1272](#1272)) ([344b737](344b737))

### Documentation

* **Combinator:** DLT-3424 bridge logical to physical naming ([#1273](#1273)) ([ad4a5a1](ad4a5a1))
* **Css Utilities:** DLT-3337 migrate internal utility-class consumers to token-indexed names and rewrite radius docs ([#1212](#1212)) ([d675238](d675238))
* **Dialtone Vue:** DLT-3226 update documentation and consuming code to numeric size scale ([#1158](#1158)) ([149c763](149c763))
* DLT-3345 migrate d-stack*/d-flow* wrappers to DtStack ([#1218](#1218)) ([fa090ef](fa090ef))
* DLT-3434 build pipeline for component wall thumbs ([#1278](#1278)) ([cb9992f](cb9992f))
* **Playground:** DLT-3119 refine playground UI and integrate across doc site ([#1127](#1127)) ([ba6b599](ba6b599))

### Features

* **Avatar:** DLT-2942 updated avatar component ([#1047](#1047)) ([e50563d](e50563d))
* **Avatar:** DLT-3161 change from clickable to "interactive" ([#1182](#1182)) ([2d00fe0](2d00fe0))
* **Banner, Notice, Toast, Breadcrumbs, Checkbox, Radio, Input, Select Menu, Empty State:** visual refresh, dt-text integration, form api parity DLT-2944 DLT-2945 DLT-2949 DLT-2959 DLT-2960 DLT-2957 ([#1091](#1091)) ([16e908a](16e908a))
* **Banner:** DLT-3454 trap focus with v-dt-focustrap directive ([#1310](#1310)) ([22faacf](22faacf))
* **Box:** DLT-3315 new DtBox primitive component ([#1203](#1203)) ([e0c942e](e0c942e))
* **Box:** NO-JIRA add overlay surface value ([#1328](#1328)) ([ea7a8a5](ea7a8a5))
* **Button,tabs,split Button:** visual refresh and slot updates DLT-2946 DLT-2947 DLT-2965 ([#1090](#1090)) ([ffdd56f](ffdd56f))
* **Chip:** DLT-3195 change interactive prop default from true to false ([#1246](#1246)) ([30a5ea2](30a5ea2))
* **Colors:** DLT-3354 split green palette into distinct light and dark mode values ([#1225](#1225)) ([cf63034](cf63034))
* **Combinator:** DLT-3312 preview resolved value in sized props ([#1199](#1199)) ([61bb610](61bb610))
* **Components:** dlt-3096 add slot classes ([#1214](#1214)) ([5f6528e](5f6528e))
* **Components:** DLT-3157 align critical/positive prop values and CSS class names ([#1177](#1177)) ([edd98b2](edd98b2))
* **Components:** DLT-3159 enforce positive boolean props ([#1198](#1198)) ([ac73bdc](ac73bdc))
* **Css Utilities, Design Tokens:** DLT-3330 DLT-3332 add off-scale pixel-indexed layout tokens and sizing utilities ([#1206](#1206)) ([1054875](1054875))
* **Css Utilities, Eslint Plugin Dialtone:** DLT-3329 update border-radius css utilities and associated tooling ([#1211](#1211)) ([6bc3599](6bc3599))
* **Design Tokens, Text, Link, Box, Css:** DLT-3338 add info semantic tokens and consumers ([#1210](#1210)) ([2f04b45](2f04b45))
* **Design Tokens:** DLT-3368 DLT-3371 DLT-3410 add material dimension and brand-locked pairings ([#1252](#1252)) ([eeedc67](eeedc67))
* **Dialtone Css, Dialtone Tokens, Dialtone Vue:** DLT-3197 DLT-3198 DLT-3199 DLT-3200 DLT-3201 DLT-3202 DLT-3203 DLT-3204 DLT-3205 DLT-3206 DLT-3207 DLT-3208 DLT-3209 DLT-3210 DLT-3211 token-stop utility classes, migration tooling, and documentation ([#1150](#1150)) ([6237b84](6237b84))
* **Dialtone Vue:** DLT-3225 migrate component size props to numeric ordinal scale ([#1157](#1157)) ([725bd41](725bd41))
* **Eslint Plugin Dialtone:** DLT-3365 add deprecated-stack-flow-classes rule ([#1247](#1247)) ([8554f5a](8554f5a))
* **Filter Pill:** DLT-2941 DtFilterPill improvements ([#1110](#1110)) ([23c5689](23c5689))
* **Focusgroup:** DLT-3285 add v-dt-focusgroup directive for declarative roving tabindex ([#1187](#1187)) ([e1ea074](e1ea074))
* **Focustrap:** DLT-3297 add v-dt-focustrap directive for declarative focus trapping ([#1195](#1195)) ([6ef9a21](6ef9a21))
* **Link,button:** DLT-3012 add underline prop ([#1059](#1059)) ([1cb91ea](1cb91ea))
* **Modal:** DLT-3432 add transparentBackdrop prop ([#1277](#1277)) ([daace31](daace31))
* **Modal:** NO-JIRA apply headerClass to header text element ([#1279](#1279)) ([3cb4282](3cb4282))
* **Mode Directive, Mode Island:** DLT-3067 DLT-3078 DLT-3077 add `v-dt-mode` directive ([#1109](#1109)) ([f97efca](f97efca))
* **Popover, Tooltip:** DLT-3419 auto-append to nearest dialog for top-layer support ([#1266](#1266)) ([a5427e8](a5427e8))
* **Presence, Avatar:** DLT-3438 add icons to presence ([#1287](#1287)) ([51062be](51062be))
* **Prose:** DLT-3245 new component ([#1169](#1169)) ([adee928](adee928))
* **Scrollbar:** DLT-3158 implement object props ([#1249](#1249)) ([09ff456](09ff456))
* **Segmented Control:** DLT-413 new component ([#1144](#1144)) ([ad4c6c3](ad4c6c3))
* **Split Button:** DLT-3257 add show-divider prop ([#1173](#1173)) ([5bef411](5bef411))
* **Tabs:** DLT-3114 add vertical orientation variant ([#1120](#1120)) ([3290a23](3290a23))
* **Tabs:** DLT-3162 add spread prop for horizontal distribution ([#1135](#1135)) ([6e7cd04](6e7cd04))
* **Text:** export text component from dialtone-vue ([757fdb7](757fdb7))
* **Tokens, Css:** DLT-3331 rename success tokens and utility classes to positive ([#1230](#1230)) ([34bdff5](34bdff5))
* **Tokens:** DLT-2937 introduce spacing and layout token systems ([#1045](#1045)) ([de23e12](de23e12))
* **Tokens:** update color ramps and consumer color migration tools DLT-3004 DLT-3005 DLT-3006 DLT-3007 DLT-3008 ([#1054](#1054)) ([28cb1de](28cb1de))
* **Validation Messages:** DLT-3423 add info variant ([#1274](#1274)) ([412154b](412154b))

### Reverts

* remove accidental next-shadows commits from next ([868a502](868a502))
Brad Paugh (braddialpad) pushed a commit that referenced this pull request Jun 16, 2026
# [9.188.0-next.1](dialtone/v9.187.0...dialtone/v9.188.0-next.1) (2026-06-16)

### Bug Fixes

* **Combinator:** DLT-3171 update v-model bindings from rendered component events ([#1299](#1299)) ([81d0c15](81d0c15))
* **Combinator:** DLT-3232 pass app context to renderer target for directive resolution ([#1301](#1301)) ([41e125b](41e125b))
* **Combinator:** NO-JIRA remove unnecessary eslint-disable max-len comments ([e431bf6](e431bf6))
* **Components:** dlt-3408 components clean up ([#1264](#1264)) ([38c383a](38c383a))
* **Components:** no-jira update tree-shaking export ([#1270](#1270)) ([f12ddcc](f12ddcc))
* **Contact Info:** no-jira remove min-inline-size regression from token migration ([ed8ee12](ed8ee12))
* correct types paths in package.json exports ([#1239](#1239)) ([21667f9](21667f9))
* **Css:** DLT-3321 reorder utility classes so single-direction wins over shorthand ([#1205](#1205)) ([df3bd74](df3bd74))
* **Css:** DLT-3336 register bgo, fco, bco vars as non-inheriting ([#1209](#1209)) ([0278620](0278620))
* **Dialtone Docs:** NO-JIRA trim ai_summary to within 150-char limit ([ec59b13](ec59b13))
* **Dialtone Documentation:** NO-JIRA update @dialpad/i18n to 1.25.3 ([291789a](291789a))
* **Dialtone Icons:** NO-JIRA restore vue/dist export paths after staging merge ([d78b4b6](d78b4b6))
* **Dialtone Tokens:** NO-JIRA fix shadow DOM setAttribute crash in theme setters ([#1271](#1271)) ([554047b](554047b))
* **Dialtone Vue:** NO-JIRA declare @vitejs/plugin-react devDependency for storybook build ([0a02bf8](0a02bf8))
* **Doc:** NO-JIRA correct font size utility json ([#1015](#1015)) ([76cf0fa](76cf0fa))
* **Docs:** NO-JIRA actually static render the docs ([#1319](#1319)) ([0107a8e](0107a8e))
* **Documentation:** DLT-3451 migrate stale @change/[@input](https://github.com/input) handlers to [@update](https://github.com/update):model-value ([#1300](#1300)) ([9260128](9260128))
* **Editor:** NO-JIRA remove extra blank line in editor.mdx ([18c47ef](18c47ef))
* **Filter Pill, Mode Island:** NO-JIRA make next-only code SSR-safe after static rendering merge ([cd174ca](cd174ca))
* **Image Viewer:** DLT-3456 trap focus within the modal via v-dt-focustrap directive ([#1313](#1313)) ([a5aa3e7](a5aa3e7))
* **Modal:** auto-detect shadow root and teleport dialog into it ([#1268](#1268)) ([f945c84](f945c84))
* NO-JIRA regenerate pnpm-lock.yaml after staging merge ([4462a1a](4462a1a))
* possible merge issue in sidebarItem.vue ([5e2e91b](5e2e91b))
* **Resizable, Box:** DLT-3445 accept full layout token set ([#1293](#1293)) ([4a63990](4a63990))
* **Resizable:** DLT-3444 center handle position ([#1291](#1291)) ([0d5d639](0d5d639))
* **Rich Text Editor:** bubble menu error ([68e3591](68e3591))
* **Segmented Control, Button:** DLT-3446 update disabled active button style ([#1294](#1294)) ([9968aac](9968aac))
* **Segmented Control, Button:** NO-JIRA correct layering of slot items ([#1283](#1283)) ([046f212](046f212))
* **Segmented Control:** DLT-3443 correct background color of traveling indicator ([#1290](#1290)) ([5fc4fa8](5fc4fa8))
* **Split Button, Filter Pill:** DLT-3260 DLT-3261 correct misalignment at size 100 ([#1176](#1176)) ([fe2b777](fe2b777))
* **Stylelint:** disable hue-degree-notation rule and update OKLCH color syntax ([81f886e](81f886e))
* **Stylelint:** disable hue-degree-notation rule and update OKLCH color syntax ([8721f43](8721f43))
* **Tabs:** DLT-3251 improve accessibility ([#1171](#1171)) ([01b101e](01b101e))
* **Tokens:** DLT-3053 preserve root font size variable as reference ([#1093](#1093)) ([112ab4b](112ab4b))
* **Tokens:** handle multi-layer box shadows correctly in postcss plugin ([feea7f1](feea7f1))
* **Tokens:** NO-JIRA output line-height as unitless instead of percentages ([#1040](#1040)) ([33d8505](33d8505))
* **Tokens:** wrap css math expressions with calc() in layered build ([#966](#966)) ([1635f61](1635f61))
* update @dialpad/i18n dependencies to latest versions ([7a4b777](7a4b777))
* **Validation Messages:** DLT-3430 fix VoiceOver silent on validation messages ([#1285](#1285)) ([96adfdf](96adfdf))

### Code Refactoring

* **Box:** DLT-3333 rename percent prop values to p-suffix ([#1208](#1208)) ([e5fa5da](e5fa5da))
* **Combinator:** DLT-3418 migrate controls prop changes ([#1261](#1261)) ([ab03b44](ab03b44))
* **Combobox Multi Select:** NO-JIRA use logical css properties ([#1104](#1104)) ([a675daf](a675daf))
* **Components,recipes:** DLT-3043 DLT-3046 logical start/end naming with deprecated backward-compatible fallbacks ([#1079](#1079)) ([1d26a4e](1d26a4e))
* **Components:** DLT-3100 remove rootClass references ([#1184](#1184)) ([6531783](6531783))
* **Components:** DLT-3160 standardize v-model event handling ([#1201](#1201)) ([f1624d4](f1624d4))
* **Components:** dlt-3196 components to pascal case ([#1255](#1255)) ([aa6d259](aa6d259))
* **Components:** dlt-3282 renamed show prop to open ([#1190](#1190)) ([5509d0f](5509d0f))
* **Components:** dlt-3283 refactor prop/slots to be consistent ([#1196](#1196)) ([2d22c76](2d22c76))
* **Components:** DLT-3284 refactor props to not have native html attributes names ([#1204](#1204)) ([48a0f57](48a0f57))
* **Css:** DLT-1876 css logical properties ([#872](#872)) ([1acd6c9](1acd6c9))
* **Modal:** DLT-3262 migrate DtModal to native dialog element ([#1179](#1179)) ([589edb5](589edb5))
* **Modal:** DLT-3453 trap focus with v-dt-focustrap directive ([#1316](#1316)) ([6e2a868](6e2a868))
* **Notice,banner,toast:** DLT-3296 decouple CSS and fix specificity violations ([#1194](#1194)) ([9579ac0](9579ac0))
* **Popover:** DLT-3455 trap focus with v-dt-focustrap directive ([#1312](#1312)) ([e57e227](e57e227))
* **Resizable:** DLT-3335 align size props on --dt-layout-* instead of --dt-size-* ([#1215](#1215)) ([c156dbc](c156dbc))
* **Style:** DLT-3014 wrap all styles in css cascade layers ([#1061](#1061)) ([f8b3fed](f8b3fed))
* **Text:** DLT-2883 rename headline sizes from xxl => 2xl, etc ([#1029](#1029)) ([0ac86f3](0ac86f3))
* **Text:** DLT-3302 tone prop uses css variables instead of css utilities ([#1197](#1197)) ([75df16f](75df16f))
* **Tokens,css,link,text,breadcrumbs,input Group,split Button:** tokens, CSS foundation, deprecations, tooling DLT-3011 DLT-2961 DLT-3068 DLT-3069 DLT-3070 DLT-3071 DLT-3072 ([#1092](#1092)) ([7783090](7783090))
* **Tokens:** DLT-2884 deprecate space tokens in favor of size tokens ([#1013](#1013)) ([63f6d2f](63f6d2f))
* **Tokens:** DLT-3013 convert color system from HSL to OKLCH ([#1060](#1060)) ([42dc418](42dc418))
* **Validation Messages:** DLT-3422 update to use icon slot over embedded icon ([#1272](#1272)) ([344b737](344b737))

### Documentation

* **Border Radius:** dlt-3362 border-radius migration guide ([#1280](#1280)) ([12fd76a](12fd76a))
* **Combinator:** DLT-3424 bridge logical to physical naming ([#1273](#1273)) ([ad4a5a1](ad4a5a1))
* **Components:** DLT-3178 DLT-3182 unify code examples into single code-example component ([#1147](#1147)) ([d0b6e14](d0b6e14))
* **Css Utilities:** DLT-3295 DLT-3280 mark physical utilities as deprecated ([#1193](#1193)) ([73f1479](73f1479))
* **Css Utilities:** DLT-3337 migrate internal utility-class consumers to token-indexed names and rewrite radius docs ([#1212](#1212)) ([d675238](d675238))
* **Dialog:** dlt-3361 dtmodal native dialog migration ([#1275](#1275)) ([4ef8a09](4ef8a09))
* **Dialtone Vue:** DLT-3226 update documentation and consuming code to numeric size scale ([#1158](#1158)) ([149c763](149c763))
* DLT-1510 DLT-1511 DLT-1512 site redesign and ia ([#968](#968)) ([6ea7eb9](6ea7eb9))
* DLT-2908 ui kits landing page ([#1049](#1049)) ([d805b9d](d805b9d))
* DLT-3016 migration docs ([#1224](#1224)) ([3d73a43](3d73a43))
* DLT-3212 automate token-derived docs data files from build sources ([#1298](#1298)) ([cf064f1](cf064f1))
* DLT-3243 fenced code blocks for examples and snippets ([#1166](#1166)) ([cb169df](cb169df))
* DLT-3250 display component status badges in sidebar and page headers ([#1170](#1170)) ([7d5f5d5](7d5f5d5))
* DLT-3252 add GFM alert syntax for notices ([#1172](#1172)) ([1697911](1697911))
* DLT-3258 DLT-3259 improve sidebar search with logical keywords and fuzzy matching ([#1174](#1174)) ([2bf4639](2bf4639))
* DLT-3345 migrate d-stack*/d-flow* wrappers to DtStack ([#1218](#1218)) ([fa090ef](fa090ef))
* DLT-3434 build pipeline for component wall thumbs ([#1278](#1278)) ([cb9992f](cb9992f))
* **Downloads:** DLT-3052 DLT-3355 add downloads section and navbar hovercards ([#1229](#1229)) ([ecf5f85](ecf5f85))
* **Foundations, Homepage:** DLT-3349 DLT-3350 refresh foundations content and homepage ([#1228](#1228)) ([ab73dfd](ab73dfd))
* **Layout And Spacing:** improve to focus on understanding new layout and spacing system ([c75201f](c75201f))
* **Migration Guide:** NO-JIRA improve prop/slot migration guide ([#1227](#1227)) ([1328452](1328452))
* **Migration Script:** dlt-3303 master migration script to next ([#1288](#1288)) ([332b3cc](332b3cc))
* NO-JIRA add functions-and-utilities to raw markdown pipeline ([628ce32](628ce32))
* NO-JIRA add typography utilities to DtText migration guide ([#1296](#1296)) ([1dcf975](1dcf975))
* NO-JIRA fix focus left-nav items on keypress down up ([#1106](#1106)) ([882c9b9](882c9b9))
* **Playground:** DLT-3119 refine playground UI and integrate across doc site ([#1127](#1127)) ([ba6b599](ba6b599))
* **Playground:** DLT-3242 segmented control for compact enum props ([#1165](#1165)) ([fa440d8](fa440d8))
* **Recipes:** dlt-3308 recipes removed from dialtone - migration guide ([#1269](#1269)) ([d1d5c59](d1d5c59))
* **Tabs, Skeleton, Rich Text Editor:** DLT-3347 update doc page code examples on next branch ([#1248](#1248)) ([5837895](5837895))
* **Utilities:** DLT-3183 convert to vue demo fenced block ([#1167](#1167)) ([522197f](522197f))

### Features

* **Avatar:** DLT-2942 updated avatar component ([#1047](#1047)) ([e50563d](e50563d))
* **Avatar:** DLT-3161 change from clickable to "interactive" ([#1182](#1182)) ([2d00fe0](2d00fe0))
* **Banner, Notice, Toast, Breadcrumbs, Checkbox, Radio, Input, Select Menu, Empty State:** visual refresh, dt-text integration, form api parity DLT-2944 DLT-2945 DLT-2949 DLT-2959 DLT-2960 DLT-2957 ([#1091](#1091)) ([16e908a](16e908a))
* **Banner:** DLT-3454 trap focus with v-dt-focustrap directive ([#1310](#1310)) ([22faacf](22faacf))
* **Box:** DLT-3315 new DtBox primitive component ([#1203](#1203)) ([e0c942e](e0c942e))
* **Box:** NO-JIRA add overlay surface value ([#1328](#1328)) ([ea7a8a5](ea7a8a5))
* **Button,tabs,split Button:** visual refresh and slot updates DLT-2946 DLT-2947 DLT-2965 ([#1090](#1090)) ([ffdd56f](ffdd56f))
* **Chip:** DLT-3195 change interactive prop default from true to false ([#1246](#1246)) ([30a5ea2](30a5ea2))
* **Colors, Link, Tokens:** DLT-3360 retune blue/gold/purple/black/red palette, add mention semantic tokens, migrate success to positive ([#1245](#1245)) ([880b37b](880b37b))
* **Colors:** DLT-3354 split green palette into distinct light and dark mode values ([#1225](#1225)) ([cf63034](cf63034))
* **Combinator:** DLT-3312 preview resolved value in sized props ([#1199](#1199)) ([61bb610](61bb610))
* **Combinator:** DLT-3470 render DtToggle mixed state as a segmented control ([#1309](#1309)) ([ff2a7b8](ff2a7b8))
* **Components:** dlt-3096 add slot classes ([#1214](#1214)) ([5f6528e](5f6528e))
* **Components:** DLT-3157 align critical/positive prop values and CSS class names ([#1177](#1177)) ([edd98b2](edd98b2))
* **Components:** DLT-3159 enforce positive boolean props ([#1198](#1198)) ([ac73bdc](ac73bdc))
* **Components:** DLT-3192 establish the slotclass convention rule ([#1216](#1216)) ([3c399d4](3c399d4))
* **Css Utilities, Design Tokens:** DLT-3330 DLT-3332 add off-scale pixel-indexed layout tokens and sizing utilities ([#1206](#1206)) ([1054875](1054875))
* **Css Utilities, Eslint Plugin Dialtone:** DLT-3329 update border-radius css utilities and associated tooling ([#1211](#1211)) ([6bc3599](6bc3599))
* **Css Utilities:** DLT-3357 DLT-3358 add ease-in and retune ease-out ([#1226](#1226)) ([961965a](961965a))
* **Css Utility:** DLT-2715 add default color for border css utilities ([#874](#874)) ([71310ab](71310ab))
* **Design Tokens, Modal, Notice, Popover, Hovercard, Emoji Picker:** DLT-3436 add overlay surface color ([#1282](#1282)) ([62d60f2](62d60f2))
* **Design Tokens, Text, Link, Box, Css:** DLT-3338 add info semantic tokens and consumers ([#1210](#1210)) ([2f04b45](2f04b45))
* **Design Tokens:** DLT-3356 extend prota/deuter/trita accessible themes to semantic and components ([#1237](#1237)) ([d8fbf58](d8fbf58))
* **Design Tokens:** DLT-3368 DLT-3371 DLT-3410 add material dimension and brand-locked pairings ([#1252](#1252)) ([eeedc67](eeedc67))
* **Dialtone Css, Dialtone Documentation:** DLT-3363 add theme-to-mode migration guide and codemod ([#1260](#1260)) ([90aa4b4](90aa4b4))
* **Dialtone Css, Dialtone Tokens, Dialtone Vue:** DLT-3197 DLT-3198 DLT-3199 DLT-3200 DLT-3201 DLT-3202 DLT-3203 DLT-3204 DLT-3205 DLT-3206 DLT-3207 DLT-3208 DLT-3209 DLT-3210 DLT-3211 token-stop utility classes, migration tooling, and documentation ([#1150](#1150)) ([6237b84](6237b84))
* **Dialtone Css:** DLT-3278 add dialtone-migrate-typography codemod ([#1289](#1289)) ([aea7eba](aea7eba))
* **Dialtone Css:** NO-JIRA add dialtone-migrate bin and color-stops run-once marker ([#1329](#1329)) ([0286af1](0286af1))
* **Dialtone Icons:** NO-JIRA add /vue export to dialtone-icon ([#1304](#1304)) ([081b0e9](081b0e9))
* **Dialtone Vue:** DLT-3225 migrate component size props to numeric ordinal scale ([#1157](#1157)) ([725bd41](725bd41))
* **Eslint Plugin Dialtone:** DLT-3047 physical-to-logical naming migration tooling ([#1163](#1163)) ([d94dc4b](d94dc4b))
* **Eslint Plugin Dialtone:** DLT-3227 DLT-3228 add deprecated-tshirt-sizes ESLint rule and migration codemod ([#1159](#1159)) ([21a011f](21a011f))
* **Eslint Plugin Dialtone:** DLT-3365 add deprecated-stack-flow-classes rule ([#1247](#1247)) ([8554f5a](8554f5a))
* **Filter Pill:** DLT-2704 create component ([#473](#473)) ([6267445](6267445))
* **Filter Pill:** DLT-2941 DtFilterPill improvements ([#1110](#1110)) ([23c5689](23c5689))
* **Focusgroup:** DLT-3285 add v-dt-focusgroup directive for declarative roving tabindex ([#1187](#1187)) ([e1ea074](e1ea074))
* **Focustrap:** DLT-3297 add v-dt-focustrap directive for declarative focus trapping ([#1195](#1195)) ([6ef9a21](6ef9a21))
* **Fonts:** DLT-3475 export font module ([#1325](#1325)) ([bb8c966](bb8c966))
* **Link,button:** DLT-3012 add underline prop ([#1059](#1059)) ([1cb91ea](1cb91ea))
* **Master Script:** no-jira migration script ignore gitignore folders ([#1314](#1314)) ([e0af275](e0af275))
* **Modal:** DLT-3432 add transparentBackdrop prop ([#1277](#1277)) ([daace31](daace31))
* **Modal:** NO-JIRA apply headerClass to header text element ([#1279](#1279)) ([3cb4282](3cb4282))
* **Mode Directive, Mode Island:** DLT-3067 DLT-3078 DLT-3077 add `v-dt-mode` directive ([#1109](#1109)) ([f97efca](f97efca))
* **Popover, Tooltip:** DLT-3419 auto-append to nearest dialog for top-layer support ([#1266](#1266)) ([a5427e8](a5427e8))
* **Presence, Avatar:** DLT-3438 add icons to presence ([#1287](#1287)) ([51062be](51062be))
* **Prose:** DLT-3245 new component ([#1169](#1169)) ([adee928](adee928))
* **Scripts, Eslint, Stylelint:** DLT-3359 add success-to-positive migration tooling ([#1231](#1231)) ([0d652a5](0d652a5))
* **Scripts:** DLT-3033 DLT-3034 DLT-3035 add link-rendering migration codemod and ESLint rule ([#1233](#1233)) ([35a7238](35a7238))
* **Scripts:** DLT-3304 add scripts/docs for migration props changes ([#1219](#1219)) ([589173f](589173f))
* **Scrollbar:** DLT-3158 implement object props ([#1249](#1249)) ([09ff456](09ff456))
* **Segmented Control:** DLT-413 new component ([#1144](#1144)) ([ad4c6c3](ad4c6c3))
* **Split Button:** DLT-3257 add show-divider prop ([#1173](#1173)) ([5bef411](5bef411))
* **Style:** DLT-2976 update underline thickness and offset ([#1058](#1058)) ([1e56947](1e56947))
* **Tabs:** DLT-3114 add vertical orientation variant ([#1120](#1120)) ([3290a23](3290a23))
* **Tabs:** DLT-3162 add spread prop for horizontal distribution ([#1135](#1135)) ([6e7cd04](6e7cd04))
* **Text:** export text component from dialtone-vue ([757fdb7](757fdb7))
* **Text:** new vue component DLT-2864 DLT-2863 DLT-2862 ([#995](#995)) ([196ef8a](196ef8a))
* **Tokens, Css:** DLT-3331 rename success tokens and utility classes to positive ([#1230](#1230)) ([34bdff5](34bdff5))
* **Tokens:** DLT-1977 add high contrast design tokens and theme ([#938](#938)) ([a1c0457](a1c0457))
* **Tokens:** DLT-2767 exploratory shell themes ([#909](#909)) ([3afcf63](3afcf63))
* **Tokens:** DLT-2781 create color-assistive themes ([#921](#921)) ([a6cc397](a6cc397))
* **Tokens:** DLT-2802 DLT-2563 layered theming system and mode island component ([#945](#945)) ([5c72c6c](5c72c6c))
* **Tokens:** DLT-2937 introduce spacing and layout token systems ([#1045](#1045)) ([de23e12](de23e12))
* **Tokens:** update color ramps and consumer color migration tools DLT-3004 DLT-3005 DLT-3006 DLT-3007 DLT-3008 ([#1054](#1054)) ([28cb1de](28cb1de))
* **Typography, Tokens:** DLT-2856 DLT-2857 next typography system ([#994](#994)) ([d744e97](d744e97))
* **Validation Messages:** DLT-3423 add info variant ([#1274](#1274)) ([412154b](412154b))
* **Whats New:** DLT-3450 show author photos from GitHub avatars ([#1302](#1302)) ([d885432](d885432))

### Reverts

* remove accidental next-shadows commits from next ([868a502](868a502))
Brad Paugh (braddialpad) pushed a commit that referenced this pull request Jul 14, 2026
# [3.224.0-next.1](dialtone-vue/v3.223.1...dialtone-vue/v3.224.0-next.1) (2026-07-14)

### Bug Fixes

* **Components:** dlt-3408 components clean up ([#1264](#1264)) ([38c383a](38c383a))
* **Components:** no-jira update tree-shaking export ([#1270](#1270)) ([f12ddcc](f12ddcc))
* **Dialtone Vue:** NO-JIRA declare @vitejs/plugin-react devDependency for storybook build ([0a02bf8](0a02bf8))
* **Editor:** NO-JIRA remove extra blank line in editor.mdx ([18c47ef](18c47ef))
* **Filter Pill, Mode Island:** NO-JIRA make next-only code SSR-safe after static rendering merge ([cd174ca](cd174ca))
* **Image Viewer:** DLT-3456 trap focus within the modal via v-dt-focustrap directive ([#1313](#1313)) ([a5aa3e7](a5aa3e7))
* **Modal:** auto-detect shadow root and teleport dialog into it ([#1268](#1268)) ([f945c84](f945c84))
* NO-JIRA regenerate pnpm-lock.yaml after staging merge ([4462a1a](4462a1a))
* **Resizable, Box:** DLT-3445 accept full layout token set ([#1293](#1293)) ([4a63990](4a63990))
* **Resizable:** DLT-3444 center handle position ([#1291](#1291)) ([0d5d639](0d5d639))
* **Rich Text Editor:** bubble menu error ([68e3591](68e3591))
* **Segmented Control:** DLT-3443 correct background color of traveling indicator ([#1290](#1290)) ([5fc4fa8](5fc4fa8))
* **Split Button, Filter Pill:** DLT-3260 DLT-3261 correct misalignment at size 100 ([#1176](#1176)) ([fe2b777](fe2b777))
* **Tabs:** DLT-3251 improve accessibility ([#1171](#1171)) ([01b101e](01b101e))
* **Validation Messages:** DLT-3430 fix VoiceOver silent on validation messages ([#1285](#1285)) ([96adfdf](96adfdf))

### Code Refactoring

* **Box:** DLT-3333 rename percent prop values to p-suffix ([#1208](#1208)) ([e5fa5da](e5fa5da))
* **Combobox Multi Select:** NO-JIRA use logical css properties ([#1104](#1104)) ([a675daf](a675daf))
* **Components,recipes:** DLT-3043 DLT-3046 logical start/end naming with deprecated backward-compatible fallbacks ([#1079](#1079)) ([1d26a4e](1d26a4e))
* **Components:** DLT-3100 remove rootClass references ([#1184](#1184)) ([6531783](6531783))
* **Components:** DLT-3160 standardize v-model event handling ([#1201](#1201)) ([f1624d4](f1624d4))
* **Components:** dlt-3196 components to pascal case ([#1255](#1255)) ([aa6d259](aa6d259))
* **Components:** dlt-3282 renamed show prop to open ([#1190](#1190)) ([5509d0f](5509d0f))
* **Components:** dlt-3283 refactor prop/slots to be consistent ([#1196](#1196)) ([2d22c76](2d22c76))
* **Components:** DLT-3284 refactor props to not have native html attributes names ([#1204](#1204)) ([48a0f57](48a0f57))
* **Modal:** DLT-3262 migrate DtModal to native dialog element ([#1179](#1179)) ([589edb5](589edb5))
* **Modal:** DLT-3453 trap focus with v-dt-focustrap directive ([#1316](#1316)) ([6e2a868](6e2a868))
* **Popover:** DLT-3455 trap focus with v-dt-focustrap directive ([#1312](#1312)) ([e57e227](e57e227))
* **Resizable:** DLT-3335 align size props on --dt-layout-* instead of --dt-size-* ([#1215](#1215)) ([c156dbc](c156dbc))
* **Text:** DLT-3302 tone prop uses css variables instead of css utilities ([#1197](#1197)) ([75df16f](75df16f))
* **Tokens,css,link,text,breadcrumbs,input Group,split Button:** tokens, CSS foundation, deprecations, tooling DLT-3011 DLT-2961 DLT-3068 DLT-3069 DLT-3070 DLT-3071 DLT-3072 ([#1092](#1092)) ([7783090](7783090))
* **Tokens:** DLT-3013 convert color system from HSL to OKLCH ([#1060](#1060)) ([42dc418](42dc418))
* **Validation Messages:** DLT-3422 update to use icon slot over embedded icon ([#1272](#1272)) ([344b737](344b737))

### Documentation

* **Combinator:** DLT-3424 bridge logical to physical naming ([#1273](#1273)) ([ad4a5a1](ad4a5a1))
* **Css Utilities:** DLT-3337 migrate internal utility-class consumers to token-indexed names and rewrite radius docs ([#1212](#1212)) ([d675238](d675238))
* **Dialtone Vue:** DLT-3226 update documentation and consuming code to numeric size scale ([#1158](#1158)) ([149c763](149c763))
* DLT-3345 migrate d-stack*/d-flow* wrappers to DtStack ([#1218](#1218)) ([fa090ef](fa090ef))
* DLT-3434 build pipeline for component wall thumbs ([#1278](#1278)) ([cb9992f](cb9992f))
* **Playground:** DLT-3119 refine playground UI and integrate across doc site ([#1127](#1127)) ([ba6b599](ba6b599))

### Features

* **Avatar:** DLT-2942 updated avatar component ([#1047](#1047)) ([e50563d](e50563d))
* **Avatar:** DLT-3161 change from clickable to "interactive" ([#1182](#1182)) ([2d00fe0](2d00fe0))
* **Banner, Notice, Toast, Breadcrumbs, Checkbox, Radio, Input, Select Menu, Empty State:** visual refresh, dt-text integration, form api parity DLT-2944 DLT-2945 DLT-2949 DLT-2959 DLT-2960 DLT-2957 ([#1091](#1091)) ([16e908a](16e908a))
* **Banner:** DLT-3454 trap focus with v-dt-focustrap directive ([#1310](#1310)) ([22faacf](22faacf))
* **Box:** DLT-3315 new DtBox primitive component ([#1203](#1203)) ([e0c942e](e0c942e))
* **Box:** DLT-3523 add positioning props to DtBox ([#1355](#1355)) ([68a6570](68a6570))
* **Box:** NO-JIRA add overlay surface value ([#1328](#1328)) ([ea7a8a5](ea7a8a5))
* **Button,tabs,split Button:** visual refresh and slot updates DLT-2946 DLT-2947 DLT-2965 ([#1090](#1090)) ([ffdd56f](ffdd56f))
* **Chip:** DLT-3195 change interactive prop default from true to false ([#1246](#1246)) ([30a5ea2](30a5ea2))
* **Colors:** DLT-3354 split green palette into distinct light and dark mode values ([#1225](#1225)) ([cf63034](cf63034))
* **Combinator:** DLT-3312 preview resolved value in sized props ([#1199](#1199)) ([61bb610](61bb610))
* **Combinator:** DLT-3489 DLT-3490 DLT-3491 refine control panel ui ([#1343](#1343)) ([0385c2f](0385c2f))
* **Components:** dlt-3096 add slot classes ([#1214](#1214)) ([5f6528e](5f6528e))
* **Components:** DLT-3157 align critical/positive prop values and CSS class names ([#1177](#1177)) ([edd98b2](edd98b2))
* **Components:** DLT-3159 enforce positive boolean props ([#1198](#1198)) ([ac73bdc](ac73bdc))
* **Css Utilities, Design Tokens:** DLT-3330 DLT-3332 add off-scale pixel-indexed layout tokens and sizing utilities ([#1206](#1206)) ([1054875](1054875))
* **Css Utilities, Eslint Plugin Dialtone:** DLT-3329 update border-radius css utilities and associated tooling ([#1211](#1211)) ([6bc3599](6bc3599))
* **Design Tokens, Text, Link, Box, Css:** DLT-3338 add info semantic tokens and consumers ([#1210](#1210)) ([2f04b45](2f04b45))
* **Design Tokens:** DLT-3368 DLT-3371 DLT-3410 add material dimension and brand-locked pairings ([#1252](#1252)) ([eeedc67](eeedc67))
* **Dialtone Css, Dialtone Tokens, Dialtone Vue:** DLT-3197 DLT-3198 DLT-3199 DLT-3200 DLT-3201 DLT-3202 DLT-3203 DLT-3204 DLT-3205 DLT-3206 DLT-3207 DLT-3208 DLT-3209 DLT-3210 DLT-3211 token-stop utility classes, migration tooling, and documentation ([#1150](#1150)) ([6237b84](6237b84))
* **Dialtone Vue:** DLT-3225 migrate component size props to numeric ordinal scale ([#1157](#1157)) ([725bd41](725bd41))
* DLT-3534 align size prop types across components and modal fullscreen ([#1362](#1362)) ([8fb88a1](8fb88a1))
* **Eslint Plugin Dialtone:** DLT-3365 add deprecated-stack-flow-classes rule ([#1247](#1247)) ([8554f5a](8554f5a))
* **Filter Pill:** DLT-2941 DtFilterPill improvements ([#1110](#1110)) ([23c5689](23c5689))
* **Focusgroup:** DLT-3285 add v-dt-focusgroup directive for declarative roving tabindex ([#1187](#1187)) ([e1ea074](e1ea074))
* **Focustrap:** DLT-3297 add v-dt-focustrap directive for declarative focus trapping ([#1195](#1195)) ([6ef9a21](6ef9a21))
* **Hovercard:** DLT-2845 add focus trap to hovercard content ([#1330](#1330)) ([b5aa615](b5aa615))
* **Link,button:** DLT-3012 add underline prop ([#1059](#1059)) ([1cb91ea](1cb91ea))
* **Link:** DLT-3529 add unstyled variant ([#1360](#1360)) ([b90c2cc](b90c2cc))
* **Modal:** DLT-3432 add transparentBackdrop prop ([#1277](#1277)) ([daace31](daace31))
* **Modal:** NO-JIRA apply headerClass to header text element ([#1279](#1279)) ([3cb4282](3cb4282))
* **Mode Directive, Mode Island:** DLT-3067 DLT-3078 DLT-3077 add `v-dt-mode` directive ([#1109](#1109)) ([f97efca](f97efca))
* **Popover, Tooltip:** DLT-3419 auto-append to nearest dialog for top-layer support ([#1266](#1266)) ([a5427e8](a5427e8))
* **Presence, Avatar:** DLT-3438 add icons to presence ([#1287](#1287)) ([51062be](51062be))
* **Prose:** DLT-3245 new component ([#1169](#1169)) ([adee928](adee928))
* **Scrollbar:** DLT-3158 implement object props ([#1249](#1249)) ([09ff456](09ff456))
* **Segmented Control:** DLT-413 new component ([#1144](#1144)) ([ad4c6c3](ad4c6c3))
* **Split Button:** DLT-3257 add show-divider prop ([#1173](#1173)) ([5bef411](5bef411))
* **Tabs:** DLT-3114 add vertical orientation variant ([#1120](#1120)) ([3290a23](3290a23))
* **Tabs:** DLT-3162 add spread prop for horizontal distribution ([#1135](#1135)) ([6e7cd04](6e7cd04))
* **Text List:** DLT-3530 add DtTextList component ([#1363](#1363)) ([9c9fc0d](9c9fc0d))
* **Text:** DLT-3487 expose full typography size scale ([#1334](#1334)) ([0c8f4c6](0c8f4c6))
* **Text:** export text component from dialtone-vue ([757fdb7](757fdb7))
* **Tokens, Css:** DLT-3331 rename success tokens and utility classes to positive ([#1230](#1230)) ([34bdff5](34bdff5))
* **Tokens:** DLT-2937 introduce spacing and layout token systems ([#1045](#1045)) ([de23e12](de23e12))
* **Tokens:** update color ramps and consumer color migration tools DLT-3004 DLT-3005 DLT-3006 DLT-3007 DLT-3008 ([#1054](#1054)) ([28cb1de](28cb1de))
* **Validation Messages:** DLT-3423 add info variant ([#1274](#1274)) ([412154b](412154b))

### Reverts

* remove accidental next-shadows commits from next ([868a502](868a502))
Brad Paugh (braddialpad) pushed a commit that referenced this pull request Aug 10, 2026
# [3.225.0-next.1](dialtone-vue/v3.224.0...dialtone-vue/v3.225.0-next.1) (2026-08-10)

### Bug Fixes

* **Chip, Combobox Multi Select:** DLT-3554 DLT-3555 correct chip spacing and multi-select alignment ([#1380](#1380)) ([bb53556](bb53556))
* **Components:** dlt-3408 components clean up ([#1264](#1264)) ([38c383a](38c383a))
* **Components:** no-jira update tree-shaking export ([#1270](#1270)) ([f12ddcc](f12ddcc))
* **Dialtone Vue:** NO-JIRA declare @vitejs/plugin-react devDependency for storybook build ([0a02bf8](0a02bf8))
* DLT-3552 suppress unintended focus rings in component regions ([#1376](#1376)) ([c792768](c792768))
* **Docs:** DLT-3558 correct out-of-sync [@values](https://github.com/values) JSDoc annotations ([#1383](#1383)) ([0ef001b](0ef001b))
* **Editor:** NO-JIRA remove extra blank line in editor.mdx ([18c47ef](18c47ef))
* **Filter Pill, Mode Island:** NO-JIRA make next-only code SSR-safe after static rendering merge ([cd174ca](cd174ca))
* **Image Viewer:** DLT-3456 trap focus within the modal via v-dt-focustrap directive ([#1313](#1313)) ([a5aa3e7](a5aa3e7))
* **Modal:** auto-detect shadow root and teleport dialog into it ([#1268](#1268)) ([f945c84](f945c84))
* NO-JIRA regenerate pnpm-lock.yaml after staging merge ([4462a1a](4462a1a))
* **Resizable, Box:** DLT-3445 accept full layout token set ([#1293](#1293)) ([4a63990](4a63990))
* **Resizable:** DLT-3444 center handle position ([#1291](#1291)) ([0d5d639](0d5d639))
* **Rich Text Editor:** bubble menu error ([68e3591](68e3591))
* **Segmented Control:** DLT-3443 correct background color of traveling indicator ([#1290](#1290)) ([5fc4fa8](5fc4fa8))
* **Split Button, Filter Pill:** DLT-3260 DLT-3261 correct misalignment at size 100 ([#1176](#1176)) ([fe2b777](fe2b777))
* **Tab Group:** DLT-3564 emit target panel id on before-change ([#1386](#1386)) ([0c7b5c6](0c7b5c6))
* **Tabs:** DLT-3251 improve accessibility ([#1171](#1171)) ([01b101e](01b101e))
* **Validation Messages:** DLT-3430 fix VoiceOver silent on validation messages ([#1285](#1285)) ([96adfdf](96adfdf))

### Code Refactoring

* **Box:** DLT-3333 rename percent prop values to p-suffix ([#1208](#1208)) ([e5fa5da](e5fa5da))
* **Combobox Multi Select:** NO-JIRA use logical css properties ([#1104](#1104)) ([a675daf](a675daf))
* **Components,recipes:** DLT-3043 DLT-3046 logical start/end naming with deprecated backward-compatible fallbacks ([#1079](#1079)) ([1d26a4e](1d26a4e))
* **Components:** DLT-3100 remove rootClass references ([#1184](#1184)) ([6531783](6531783))
* **Components:** DLT-3160 standardize v-model event handling ([#1201](#1201)) ([f1624d4](f1624d4))
* **Components:** dlt-3196 components to pascal case ([#1255](#1255)) ([aa6d259](aa6d259))
* **Components:** dlt-3282 renamed show prop to open ([#1190](#1190)) ([5509d0f](5509d0f))
* **Components:** dlt-3283 refactor prop/slots to be consistent ([#1196](#1196)) ([2d22c76](2d22c76))
* **Components:** DLT-3284 refactor props to not have native html attributes names ([#1204](#1204)) ([48a0f57](48a0f57))
* **Dialtone Vue,dialtone Css:** DLT-3536 clean up remaining legacy prop migration references ([#1374](#1374)) ([0629638](0629638))
* **Dialtone Vue,dialtone Css:** DLT-3537 remove recipes ([#1371](#1371)) ([8611a05](8611a05))
* **Modal:** DLT-3262 migrate DtModal to native dialog element ([#1179](#1179)) ([589edb5](589edb5))
* **Modal:** DLT-3453 trap focus with v-dt-focustrap directive ([#1316](#1316)) ([6e2a868](6e2a868))
* **Popover:** DLT-3455 trap focus with v-dt-focustrap directive ([#1312](#1312)) ([e57e227](e57e227))
* **Resizable:** DLT-3335 align size props on --dt-layout-* instead of --dt-size-* ([#1215](#1215)) ([c156dbc](c156dbc))
* **Text:** DLT-3302 tone prop uses css variables instead of css utilities ([#1197](#1197)) ([75df16f](75df16f))
* **Tokens,css,link,text,breadcrumbs,input Group,split Button:** tokens, CSS foundation, deprecations, tooling DLT-3011 DLT-2961 DLT-3068 DLT-3069 DLT-3070 DLT-3071 DLT-3072 ([#1092](#1092)) ([7783090](7783090))
* **Tokens:** DLT-3013 convert color system from HSL to OKLCH ([#1060](#1060)) ([42dc418](42dc418))
* **Validation Messages:** DLT-3422 update to use icon slot over embedded icon ([#1272](#1272)) ([344b737](344b737))

### Documentation

* **Combinator:** DLT-3424 bridge logical to physical naming ([#1273](#1273)) ([ad4a5a1](ad4a5a1))
* **Css Utilities:** DLT-3337 migrate internal utility-class consumers to token-indexed names and rewrite radius docs ([#1212](#1212)) ([d675238](d675238))
* **Dialtone Vue:** DLT-3226 update documentation and consuming code to numeric size scale ([#1158](#1158)) ([149c763](149c763))
* DLT-3345 migrate d-stack*/d-flow* wrappers to DtStack ([#1218](#1218)) ([fa090ef](fa090ef))
* DLT-3434 build pipeline for component wall thumbs ([#1278](#1278)) ([cb9992f](cb9992f))
* **Playground:** DLT-3119 refine playground UI and integrate across doc site ([#1127](#1127)) ([ba6b599](ba6b599))

### Features

* **Avatar:** DLT-2942 updated avatar component ([#1047](#1047)) ([e50563d](e50563d))
* **Avatar:** DLT-3161 change from clickable to "interactive" ([#1182](#1182)) ([2d00fe0](2d00fe0))
* **Banner, Notice, Toast, Breadcrumbs, Checkbox, Radio, Input, Select Menu, Empty State:** visual refresh, dt-text integration, form api parity DLT-2944 DLT-2945 DLT-2949 DLT-2959 DLT-2960 DLT-2957 ([#1091](#1091)) ([16e908a](16e908a))
* **Banner:** DLT-3454 trap focus with v-dt-focustrap directive ([#1310](#1310)) ([22faacf](22faacf))
* **Box:** DLT-3315 new DtBox primitive component ([#1203](#1203)) ([e0c942e](e0c942e))
* **Box:** DLT-3523 add positioning props to DtBox ([#1355](#1355)) ([68a6570](68a6570))
* **Box:** NO-JIRA add overlay surface value ([#1328](#1328)) ([ea7a8a5](ea7a8a5))
* **Button,tabs,split Button:** visual refresh and slot updates DLT-2946 DLT-2947 DLT-2965 ([#1090](#1090)) ([ffdd56f](ffdd56f))
* **Chip:** DLT-3195 change interactive prop default from true to false ([#1246](#1246)) ([30a5ea2](30a5ea2))
* **Colors:** DLT-3354 split green palette into distinct light and dark mode values ([#1225](#1225)) ([cf63034](cf63034))
* **Combinator:** DLT-3312 preview resolved value in sized props ([#1199](#1199)) ([61bb610](61bb610))
* **Combinator:** DLT-3489 DLT-3490 DLT-3491 refine control panel ui ([#1343](#1343)) ([0385c2f](0385c2f))
* **Components:** dlt-3096 add slot classes ([#1214](#1214)) ([5f6528e](5f6528e))
* **Components:** DLT-3157 align critical/positive prop values and CSS class names ([#1177](#1177)) ([edd98b2](edd98b2))
* **Components:** DLT-3159 enforce positive boolean props ([#1198](#1198)) ([ac73bdc](ac73bdc))
* **Css Utilities, Design Tokens:** DLT-3330 DLT-3332 add off-scale pixel-indexed layout tokens and sizing utilities ([#1206](#1206)) ([1054875](1054875))
* **Css Utilities, Eslint Plugin Dialtone:** DLT-3329 update border-radius css utilities and associated tooling ([#1211](#1211)) ([6bc3599](6bc3599))
* **Design Tokens, Text, Link, Box, Css:** DLT-3338 add info semantic tokens and consumers ([#1210](#1210)) ([2f04b45](2f04b45))
* **Design Tokens:** DLT-3368 DLT-3371 DLT-3410 add material dimension and brand-locked pairings ([#1252](#1252)) ([eeedc67](eeedc67))
* **Dialtone Css, Dialtone Tokens, Dialtone Vue:** DLT-3197 DLT-3198 DLT-3199 DLT-3200 DLT-3201 DLT-3202 DLT-3203 DLT-3204 DLT-3205 DLT-3206 DLT-3207 DLT-3208 DLT-3209 DLT-3210 DLT-3211 token-stop utility classes, migration tooling, and documentation ([#1150](#1150)) ([6237b84](6237b84))
* **Dialtone Vue:** DLT-3225 migrate component size props to numeric ordinal scale ([#1157](#1157)) ([725bd41](725bd41))
* DLT-3534 align size prop types across components and modal fullscreen ([#1362](#1362)) ([8fb88a1](8fb88a1))
* **Eslint Plugin Dialtone:** DLT-3365 add deprecated-stack-flow-classes rule ([#1247](#1247)) ([8554f5a](8554f5a))
* **Filter Pill:** DLT-2941 DtFilterPill improvements ([#1110](#1110)) ([23c5689](23c5689))
* **Focusgroup:** DLT-3285 add v-dt-focusgroup directive for declarative roving tabindex ([#1187](#1187)) ([e1ea074](e1ea074))
* **Focustrap:** DLT-3297 add v-dt-focustrap directive for declarative focus trapping ([#1195](#1195)) ([6ef9a21](6ef9a21))
* **Hovercard:** DLT-2845 add focus trap to hovercard content ([#1330](#1330)) ([b5aa615](b5aa615))
* **Link,button:** DLT-3012 add underline prop ([#1059](#1059)) ([1cb91ea](1cb91ea))
* **Link:** DLT-3529 add unstyled variant ([#1360](#1360)) ([b90c2cc](b90c2cc))
* **Modal:** DLT-3432 add transparentBackdrop prop ([#1277](#1277)) ([daace31](daace31))
* **Modal:** NO-JIRA apply headerClass to header text element ([#1279](#1279)) ([3cb4282](3cb4282))
* **Mode Directive, Mode Island:** DLT-3067 DLT-3078 DLT-3077 add `v-dt-mode` directive ([#1109](#1109)) ([f97efca](f97efca))
* **Popover, Tooltip:** DLT-3419 auto-append to nearest dialog for top-layer support ([#1266](#1266)) ([a5427e8](a5427e8))
* **Presence, Avatar:** DLT-3438 add icons to presence ([#1287](#1287)) ([51062be](51062be))
* **Prose:** DLT-3245 new component ([#1169](#1169)) ([adee928](adee928))
* **Scrollbar:** DLT-3158 implement object props ([#1249](#1249)) ([09ff456](09ff456))
* **Segmented Control:** DLT-413 new component ([#1144](#1144)) ([ad4c6c3](ad4c6c3))
* **Split Button:** DLT-3257 add show-divider prop ([#1173](#1173)) ([5bef411](5bef411))
* **Tabs:** DLT-3114 add vertical orientation variant ([#1120](#1120)) ([3290a23](3290a23))
* **Tabs:** DLT-3162 add spread prop for horizontal distribution ([#1135](#1135)) ([6e7cd04](6e7cd04))
* **Text List:** DLT-3530 add DtTextList component ([#1363](#1363)) ([9c9fc0d](9c9fc0d))
* **Text:** DLT-3487 expose full typography size scale ([#1334](#1334)) ([0c8f4c6](0c8f4c6))
* **Text:** export text component from dialtone-vue ([757fdb7](757fdb7))
* **Tokens, Css:** DLT-3331 rename success tokens and utility classes to positive ([#1230](#1230)) ([34bdff5](34bdff5))
* **Tokens:** DLT-2937 introduce spacing and layout token systems ([#1045](#1045)) ([de23e12](de23e12))
* **Tokens:** update color ramps and consumer color migration tools DLT-3004 DLT-3005 DLT-3006 DLT-3007 DLT-3008 ([#1054](#1054)) ([28cb1de](28cb1de))
* **Validation Messages:** DLT-3423 add info variant ([#1274](#1274)) ([412154b](412154b))

### Reverts

* remove accidental next-shadows commits from next ([868a502](868a502))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

no-visual-test Add this tag when the PR does not need visual testing

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants