docs: DLT-3434 build pipeline for component wall thumbs - #1278
Conversation
… 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.
|
Caution Review failedFailed 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. WalkthroughAdds 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. ChangesComponent Wall Thumbnail Auto-Generation System
Suggested reviewers
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
Wiz Scan Summary
To detect these findings earlier in the dev lifecycle, try using Wiz Code VS Code Extension. |
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.
There was a problem hiding this comment.
💡 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".
There was a problem hiding this comment.
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
⛔ Files ignored due to path filters (229)
apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/avatar-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/avatar-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/avatar.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/avatar.svgis excluded by!**/*.svgand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/badge-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/badge-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/badge.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/badge.svgis excluded by!**/*.svgand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/banner-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/banner-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/banner.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/banner.svgis excluded by!**/*.svgand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/box-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/box-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/breadcrumbs-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/breadcrumbs-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/breadcrumbs.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/breadcrumbs.svgis excluded by!**/*.svgand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/button-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/button-group-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/button-group-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/button-group.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/button-group.svgis excluded by!**/*.svgand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/button-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/button.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/button.svgis excluded by!**/*.svgand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/card-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/card-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/card.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/card.svgis excluded by!**/*.svgand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/checkbox-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/checkbox-group-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/checkbox-group-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/checkbox-group.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/checkbox-group.svgis excluded by!**/*.svgand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/checkbox-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/checkbox.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/checkbox.svgis excluded by!**/*.svgand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/chip-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/chip-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/chip.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/chip.svgis excluded by!**/*.svgand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/collapsible-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/collapsible-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/collapsible.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/collapsible.svgis excluded by!**/*.svgand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/combobox-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/combobox-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/combobox-multi-select-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/combobox-multi-select-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/combobox-with-popover-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/combobox-with-popover-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/combobox.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/combobox.svgis excluded by!**/*.svgand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/datepicker-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/datepicker-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/datepicker.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/datepicker.svgis excluded by!**/*.svgand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/description-list-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/description-list-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/dropdown-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/dropdown-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/dropdown.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/dropdown.svgis excluded by!**/*.svgand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/emoji-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/emoji-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/emoji-picker-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/emoji-picker-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/emoji-picker.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/emoji-picker.svgis excluded by!**/*.svgand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/emoji-text-wrapper-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/emoji-text-wrapper-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/emoji-text-wrapper.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/emoji-text-wrapper.svgis excluded by!**/*.svgand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/emoji.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/emoji.svgis excluded by!**/*.svgand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/empty-state-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/empty-state-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/empty-state.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/empty-state.svgis excluded by!**/*.svgand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/filter-pill-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/filter-pill-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/hovercard-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/hovercard-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/hovercard.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/hovercard.svgis excluded by!**/*.svgand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/icon-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/icon-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/icon.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/icon.svgis excluded by!**/*.svgand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/illustration-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/illustration-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/image-viewer-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/image-viewer-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/img-background.svgis excluded by!**/*.svgand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/input-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/input-group-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/input-group-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/input-group.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/input-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/input.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/input.svgis excluded by!**/*.svgand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/item-layout-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/item-layout-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/item-layout.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/item-layout.svgis excluded by!**/*.svgand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/keyboard-shortcut-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/keyboard-shortcut-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/keyboard-shortcut.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/keyboard-shortcut.svgis excluded by!**/*.svgand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/lazy-show-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/lazy-show-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/lazy-show.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/lazy-show.svgis excluded by!**/*.svgand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/link-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/link-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/link.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/link.svgis excluded by!**/*.svgand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/list-item-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/list-item-group-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/list-item-group-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/list-item-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/list-item.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/list-item.svgis excluded by!**/*.svgand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/loader-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/loader-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/modal-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/modal-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/modal.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/modal.svgis excluded by!**/*.svgand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/mode-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/mode-island-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/mode-island-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/mode-island.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/mode-island.svgis excluded by!**/*.svgand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/mode-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/motion-text-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/motion-text-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/notice-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/notice-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/notice.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/notice.svgis excluded by!**/*.svgand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/pagination-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/pagination-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/pagination.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/pagination.svgis excluded by!**/*.svgand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/placeholder.svgis excluded by!**/*.svgand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/popover-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/popover-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/popover.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/popover.svgis excluded by!**/*.svgand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/presence-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/presence-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/presence.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/presence.svgis excluded by!**/*.svgand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/progress-circle-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/progress-circle-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/prose-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/prose-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/radio-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/radio-group-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/radio-group-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/radio-group.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/radio-group.svgis excluded by!**/*.svgand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/radio-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/radio.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/radio.svgis excluded by!**/*.svgand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/resizable-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/resizable-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/rich-text-editor-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/rich-text-editor-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/root-layout-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/root-layout-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/root-layout.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/root-layout.svgis excluded by!**/*.svgand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/scrollbar-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/scrollbar-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/scrollbar.svgis excluded by!**/*.svgand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/scroller-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/scroller-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/scroller.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/scroller.svgis excluded by!**/*.svgand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/segmented-control-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/segmented-control-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/select-menu-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/select-menu-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/select-menu.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/select-menu.svgis excluded by!**/*.svgand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/skeleton-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/skeleton-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/skeleton.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/skeleton.svgis excluded by!**/*.svgand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/split-button-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/split-button-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/split-button.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/split-button.svgis excluded by!**/*.svgand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/stack-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/stack-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/stack.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/stack.svgis excluded by!**/*.svgand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/tab-group-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/tab-group-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/table-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/table-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/table.svgis excluded by!**/*.svgand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/tabs-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/tabs-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/tabs.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/tabs.svgis excluded by!**/*.svgand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/text-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/text-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/text.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/text.svgis excluded by!**/*.svgand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/toast-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/toast-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/toast.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/toast.svgis excluded by!**/*.svgand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/toggle-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/toggle-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/toggle.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/toggle.svgis excluded by!**/*.svgand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/tooltip-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/tooltip-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/tooltip.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/tooltip.svgis excluded by!**/*.svgand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/validation-messages-dark.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/validation-messages-light.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/validation-messages.pngis excluded by!**/*.pngand included by**apps/dialtone-documentation/docs/.vuepress/public/assets/images/components/validation-messages.svgis excluded by!**/*.svgand included by**
📒 Files selected for processing (71)
.github/pull_request_template.md.gitignore.husky/pre-commitCLAUDE.mdapps/dialtone-documentation/.github/CONTRIBUTING.mdapps/dialtone-documentation/docs/.vuepress/views/Overview.vueapps/dialtone-documentation/docs/components/avatar.mdapps/dialtone-documentation/docs/components/badge.mdapps/dialtone-documentation/docs/components/banner.mdapps/dialtone-documentation/docs/components/breadcrumbs.mdapps/dialtone-documentation/docs/components/button-group.mdapps/dialtone-documentation/docs/components/button.mdapps/dialtone-documentation/docs/components/card.mdapps/dialtone-documentation/docs/components/checkbox-group.mdapps/dialtone-documentation/docs/components/checkbox.mdapps/dialtone-documentation/docs/components/chip.mdapps/dialtone-documentation/docs/components/collapsible.mdapps/dialtone-documentation/docs/components/combobox.mdapps/dialtone-documentation/docs/components/datepicker.mdapps/dialtone-documentation/docs/components/dropdown.mdapps/dialtone-documentation/docs/components/emoji-picker.mdapps/dialtone-documentation/docs/components/emoji-text-wrapper.mdapps/dialtone-documentation/docs/components/emoji.mdapps/dialtone-documentation/docs/components/empty-state.mdapps/dialtone-documentation/docs/components/filter-pill.mdapps/dialtone-documentation/docs/components/hovercard.mdapps/dialtone-documentation/docs/components/icon.mdapps/dialtone-documentation/docs/components/input-group.mdapps/dialtone-documentation/docs/components/input.mdapps/dialtone-documentation/docs/components/item-layout.mdapps/dialtone-documentation/docs/components/keyboard-shortcut.mdapps/dialtone-documentation/docs/components/lazy-show.mdapps/dialtone-documentation/docs/components/link.mdapps/dialtone-documentation/docs/components/list-item-group.mdapps/dialtone-documentation/docs/components/list-item.mdapps/dialtone-documentation/docs/components/loader.mdapps/dialtone-documentation/docs/components/modal.mdapps/dialtone-documentation/docs/components/mode-island.mdapps/dialtone-documentation/docs/components/notice.mdapps/dialtone-documentation/docs/components/pagination.mdapps/dialtone-documentation/docs/components/popover.mdapps/dialtone-documentation/docs/components/presence.mdapps/dialtone-documentation/docs/components/radio-group.mdapps/dialtone-documentation/docs/components/radio.mdapps/dialtone-documentation/docs/components/rich-text-editor.mdapps/dialtone-documentation/docs/components/root-layout.mdapps/dialtone-documentation/docs/components/scrollbar.mdapps/dialtone-documentation/docs/components/scroller.mdapps/dialtone-documentation/docs/components/select-menu.mdapps/dialtone-documentation/docs/components/skeleton.mdapps/dialtone-documentation/docs/components/split-button.mdapps/dialtone-documentation/docs/components/stack.mdapps/dialtone-documentation/docs/components/table.mdapps/dialtone-documentation/docs/components/text.mdapps/dialtone-documentation/docs/components/toast.mdapps/dialtone-documentation/docs/components/toggle.mdapps/dialtone-documentation/docs/components/tooltip.mdapps/dialtone-documentation/docs/components/validation-messages.mdapps/dialtone-documentation/project.jsonapps/dialtone-documentation/scripts/thumbs/cache.mjsapps/dialtone-documentation/scripts/thumbs/generate.mjsapps/dialtone-documentation/scripts/thumbs/harness/App.vueapps/dialtone-documentation/scripts/thumbs/harness/GalleryApp.vueapps/dialtone-documentation/scripts/thumbs/harness/composables.jsapps/dialtone-documentation/scripts/thumbs/harness/index.htmlapps/dialtone-documentation/scripts/thumbs/harness/main.jsapps/dialtone-documentation/scripts/thumbs/harness/vite-plugin-thumb-regen.mjsapps/dialtone-documentation/scripts/thumbs/harness/vite.config.jsapps/dialtone-documentation/scripts/thumbs/wall.mjsapps/dialtone-documentation/thumbs/README.mdapps/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
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.
There was a problem hiding this comment.
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
📒 Files selected for processing (3)
apps/dialtone-documentation/.github/CONTRIBUTING.mdapps/dialtone-documentation/scripts/thumbs/cache.mjsapps/dialtone-documentation/scripts/thumbs/generate.mjs
Belu Montoya (belumontoya)
left a comment
There was a problem hiding this comment.
2 components show the dark thumbnail in light mode (Emoji, Image Viewer)
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 |
|
✔️ Deploy previews ready! |
# [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))
# [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))
# [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))
# [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))
# [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))
# [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))
# [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))
# [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))
🛠️ Type Of Change
📖 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.What it adds:
scripts/thumbs/generate.mjs) — Vite + Playwright capture, content-hash cachescripts/thumbs/harness/pnpm nx run dialtone-documentation:thumbs:previewapps/dialtone-documentation/thumbs/<slug>.vuefor components whose Combinator default doesn't render well as a thumb (popovers, modals, overlays)apps/dialtone-documentation/thumbs/README.mdWhat it does NOT do:
💡 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:
📷 Screenshot / Video
thumbs.mp4