Skip to content

docs(migration-script): dlt-3303 master migration script to next - #1288

Merged
Ignacio Ropolo (iropolo) merged 11 commits into
nextfrom
dlt-3303
Jun 3, 2026
Merged

docs(migration-script): dlt-3303 master migration script to next#1288
Ignacio Ropolo (iropolo) merged 11 commits into
nextfrom
dlt-3303

Conversation

@iropolo

@iropolo Ignacio Ropolo (iropolo) commented May 20, 2026

Copy link
Copy Markdown
Contributor

master migration script to next

Obligatory GIF (super important!)

Obligatory GIF

🛠️ Type Of Change

These types will not increment the version number, but will still deploy to documentation site on release:

  • Documentation

https://dialpad.atlassian.net/browse/DLT-3303

📖 Description

This is the master migration script.
Should hold all the necessary scripts to make the migration accordingly.

It is an interactive script, the user can navigate it and execute it in order.
It also have the ability to get a first dry-run and a health check.

This will be on Draft till I migrate ui-kits. -- I will use it there and then update and release the stable one in this PR.

Fixes made:

Rewrote to use Node builtins only (no chalk/globby/inquirer import). Config-based migrations now work without installing extra packages.

-> 29a9c4f

size-to-layout config — one token per declaration limit
The regex (BORDER_PROPS\s*:[^;]*?)var(--dt-size-N) with g flag: the first match consumes the property prefix, so subsequent tokens in the same declaration have no prefix to match.

dialtone_migrate_props — dt-checkbox missing from EMIT_EVENT_RENAMES
The event rename map has dt-input, dt-radio, dt-toggle, etc. but dt-checkbox is not listed. So @input on DtCheckbox is never migrated.

-> 197cd57

Fixed false/positive issues on the health check detect patterns for component-props to scope title to Dialtone component tags only:

-> 5aaac6c

Added dt-list-item / DtListItem to the scoped #left→#start, #right→#end, #bottom→#blockEnd slot rename regexes

Added vue3-to-vue-imports migration entry (required, config-based) with detect patterns for @dialpad/dialtone-icons/vue3 and @dialpad/dialtone-vue/vue3

3df4d6b



AI. generated description, it will be useful to have for a final blog post.

Dialtone Master Migration Script

What is it?

The Dialtone Master Migration Script (dialtone-migrate) is a single CLI tool that orchestrates all 17 automated migration scripts for the upcoming Dialtone major release. Instead of hunting through docs and running each tool one by one, you run one command and it walks you through everything — in the right order, with full control over what runs.

Why use it?

  • One entry point — No need to remember 10+ different npx commands or which config name to pick in dialtone-migration-helper.
  • Correct ordering — Migrations run in dependency order (e.g., color stops before base-to-semantic).
  • Health check — Scan your codebase to see exactly which migrations still need to run, how many matches remain, and in which files.
  • Selective execution — Run everything, just the required (breaking) migrations, or cherry-pick specific ones by ID.
  • Dry-run mode — Preview every change before committing to it.
  • Consistent interface — All migrations (config-based and standalone scripts) share the same --cwd, --dry-run, and --yes flags.

Scope

The script covers 17 migrations across three categories:

Required (breaking changes) — 10 migrations:

  • Color stop renames
  • HSL → OKLCH color tokens
  • --dt-space-* → --dt-spacing-*
  • --dt-size-* → --dt-layout-* / --dt-spacing-* / --dt-size-border-* / --dt-size-radius-*
  • Border-radius logical names (d-btr* → d-bbsr*, etc.)
  • Pixel-based utility classes → token-stop names (d-h16 → d-h-25)
  • setTheme() / data-dt-theme → layered theming API
  • Component prop/event/slot renames
  • DtChip interactive default change
  • Scrollbar :never → :always

Opt-in (deprecation / best practices) — 7 migrations:

  • Base → semantic color tokens
  • success* → positive*
  • DtStack/DtDescriptionList gap stop renames
  • d-d-flex →
  • Link/button navigation patterns
  • T-shirt sizes → numeric (size="sm" → :size="200")
  • Physical → logical naming (left/right → start/end)

Step-by-step guide

  1. Check what needs migrating
    Run the health check to get a full report of your codebase:

npx dialtone-migrate --health-check --cwd ./src

This scans your files and prints a status for every migration — DONE or PENDING with match counts and sample file paths. No files are modified.

  1. Run migrations interactively
    Launch the script and pick which migrations to run from an interactive menu:

npx dialtone-migrate --cwd ./src

You'll see all available migrations grouped by required and opt-in, select by number, and confirm before any files are changed.

  1. Run all required migrations at once
    If you want to tackle every breaking change in one go:

npx dialtone-migrate --all --cwd ./src

Add --yes to skip confirmation prompts:

npx dialtone-migrate --all --yes --cwd ./src

  1. Preview changes with dry-run
    See what would change without touching any files:

npx dialtone-migrate --all --dry-run --cwd ./src

  1. Run specific migrations only
    Cherry-pick by migration ID:

npx dialtone-migrate --only color-stops,border-radius,theme-to-mode --cwd ./src

Use --help to see all available IDs.

  1. Verify the result
    Run the health check again to confirm everything is resolved:

npx dialtone-migrate --health-check --cwd ./src

  1. Run ESLint auto-fix
    After all migrations, run an ESLint pass to catch anything the rule-based migrations flag:

npx eslint --fix "src/**/*.vue"

Individual scripts are still available

Every migration tool can still be run standalone if you prefer granular control:

# Config-based (via dialtone-migration-helper)
npx dialtone-migration-helper --cwd ./src
# Then select a config like "color stops", "hsl-to-oklch", etc.
 
# Standalone scripts
npx dialtone-migrate-border-radius --cwd ./src
npx dialtone-migrate-props --cwd ./src
npx dialtone-migrate-chip-interactive --cwd ./src
# ... and so on

The master script simply wraps all of these into a single, ordered workflow.

@coderabbitai

coderabbitai Bot commented May 20, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Introduces a master migration script (dialtone-migrate) orchestrating 17 automated migrations for an upcoming major release. Adds interactive CLI with health checks, dry-run mode, and selective execution. Updates migration documentation and adds new migration configs (vue3-to-vue-imports, physical-to-logical slot updates). Expands package.json bin exports for new migration tools.

Overall Judgement: ⚠️ Needs minor changes

Rationale: Substantial well-structured addition with targeted fixes, but intentionally marked Draft pending ui-kits migration and final testing before stable release.

Walkthrough

This PR introduces a comprehensive migration orchestration system: a new dialtone-migrate CLI tool that coordinates next-major-version migrations with health checks, interactive selection, and both config-based and standalone execution. It adds three new migration configurations and registers two new CLI entry points.

Changes

Migration Orchestration System

Layer / File(s) Summary
Migration configuration updates
packages/dialtone-css/lib/build/js/dialtone_migrate_props/index.mjs, packages/dialtone-css/lib/build/js/dialtone_migration_helper/configs/physical-to-logical.mjs, packages/dialtone-css/lib/build/js/dialtone_migration_helper/configs/vue3-to-vue-imports.mjs
Props event renames extend to dt-checkbox (@input@update:model-value). Slot migration rules expand component scoping for #left, #right, #bottom with PascalCase variants. New Vue import path migration config added (/vue3/vue).
Orchestrator registry and CLI interface
packages/dialtone-css/lib/build/js/dialtone_migrate/index.mjs (setup, registry, parsing)
Migration registry defines metadata, required/opt-in status, execution type, detection regex, and file extensions per migration. CLI argument parsing handles --cwd, --dry-run, --yes, --health-check, --all, --only with dynamic help listing required and opt-in migration IDs.
Filesystem scanning and health checks
packages/dialtone-css/lib/build/js/dialtone_migrate/index.mjs (utilities, health check, interactive selection)
Filesystem utilities scan directories recursively while skipping ignored paths. Health-check workflow counts pattern matches per migration and prints required/opt-in status with examples. Interactive selection creates a readline prompt to choose which migrations to run.
Migration execution
packages/dialtone-css/lib/build/js/dialtone_migrate/index.mjs (config runner, standalone runner)
Config-based runner imports helper configs, derives scan extensions, queues matching files, applies regex replacements in a convergence loop, and writes modified files with dry-run support. Standalone runner spawns child processes forwarding --dry-run/--yes.
Orchestration and user reporting
packages/dialtone-css/lib/build/js/dialtone_migrate/index.mjs (main orchestration)
Main orchestration parses options, runs health-check or selects migrations, executes sequentially with error handling and continuation prompts, records per-migration status, and prints final summary.
CLI registration and user documentation
packages/dialtone-css/package.json, apps/dialtone-documentation/docs/guides/migration/index.md
New bin executables registered for dialtone-migrate, dialtone-migrate-tshirt-to-numeric, and dialtone-migrate-props. Migration guide updated with "Master migration script (recommended)" section documenting npx dialtone-migrate usage patterns and individual script behavior.

Sequence Diagram

sequenceDiagram
  participant User
  participant CLI as dialtone-migrate CLI
  participant Registry
  participant FileSystem
  participant HealthCheck
  participant Interactive
  participant ConfigRunner as Config Migration Runner
  participant StandaloneRunner as Standalone Runner
  participant Output

  User->>CLI: npx dialtone-migrate [options]
  CLI->>CLI: parseArgs()
  
  alt --health-check flag
    CLI->>Registry: getAll(MIGRATIONS)
    CLI->>FileSystem: findFiles(extensions)
    FileSystem-->>CLI: list of candidate files
    CLI->>HealthCheck: scanAndReport()
    HealthCheck->>FileSystem: read files, count patterns
    HealthCheck->>Output: print required/opt-in status
  else --all or --only
    CLI->>Registry: selectMigrations(--all|--only)
    Registry-->>CLI: migration list
  else interactive mode
    CLI->>Interactive: promptUserSelection()
    Interactive-->>CLI: selected migrations
  end
  
  loop for each selected migration
    alt execution type = config
      CLI->>ConfigRunner: runConfigMigration()
      ConfigRunner->>Registry: getConfig(migrationName)
      ConfigRunner->>FileSystem: findMatching(regex)
      ConfigRunner->>FileSystem: readFile(path)
      ConfigRunner->>ConfigRunner: applyRegexReplacements(convergence)
      ConfigRunner->>FileSystem: writeFile(path)
      ConfigRunner-->>CLI: status
    else execution type = standalone
      CLI->>StandaloneRunner: runStandaloneMigration()
      StandaloneRunner->>StandaloneRunner: spawn child process
      StandaloneRunner-->>CLI: status
    end
  end
  
  CLI->>Output: printMigrationSummary()
  CLI-->>User: exit(0)
Loading

Suggested reviewers

  • francisrupert
  • braddialpad
  • ninarepetto
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch dlt-3303

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

@iropolo

Ignacio Ropolo (iropolo) commented May 26, 2026

Copy link
Copy Markdown
Contributor Author

Reverting fix tip-tap relative imports . This fix is possible not needed.

@iropolo

Copy link
Copy Markdown
Contributor Author
  • Added dt-list-item / DtListItem to the scoped #left→#start, #right→#end, #bottom→#blockEnd slot rename regexes

  • Added vue3-to-vue-imports migration entry (required, config-based) with detect patterns for @dialpad/dialtone-icons/vue3 and @dialpad/dialtone-vue/vue3

3df4d6b

@github-actions

Copy link
Copy Markdown
Contributor

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

@iropolo

Copy link
Copy Markdown
Contributor Author

This should be already validated trough our migration of ui-kist.

Should be ok to go.

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

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 57322d3a15

ℹ️ About Codex in GitHub

Codex has been enabled to automatically 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 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "Codex (@codex) address that feedback".

Comment on lines +681 to +685
for (const entry of matched) {
let changed = true;
while (changed) {
changed = false;
for (const expr of configData.expressions) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Avoid infinite reruns for preserving replacements

When a config intentionally preserves the matched text, this convergence loop never terminates. For example, the theme-to-mode config's dynamic setTheme(expr) replacement prepends a TODO but leaves setTheme(expr) in the file, so dialtone-migrate --only theme-to-mode on such input keeps matching the same call and repeatedly inserts comments instead of finishing. The original helper applies each expression once, so the master runner needs a narrower multi-pass strategy or a guard for preserving replacements.

Useful? React with 👍 / 👎.

Comment on lines +632 to +633
// Find files using the master script's own walker
const allFiles = await findFiles(opts.cwd, extensions);

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Honor config-specific ignored paths

When users run the master script from a project root, config-based migrations now scan every file with the right extension and discard each config's globbyConfig.ignore. Several configs rely on those ignores to avoid rewriting fixtures, docs, generated output, and lint-rule sources (for example utility-class-to-token-stops excludes **/lib/dist/** and **/eslint-plugin-dialtone/**, while theme-to-mode excludes migration guide docs), but this call only passes extensions into the custom walker, so those protected files can be modified by --all or --only runs.

Useful? React with 👍 / 👎.

Comment on lines +725 to +727
child.on('close', code => {
// Exit code 0 means success (or nothing to do)
resolve({ exitCode: code });

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Fail the master run when child migrations fail

If a standalone migration exits non-zero, the master runner still resolves normally and the caller records success: true, so the final summary can print DONE and the process can exit 0 even though a child script failed. This matters for --all --yes/CI-style usage because standalone scripts in this package do call process.exit(1) from their error handlers, but that failure is reduced to an unused exitCode field here instead of rejecting or marking the migration failed.

Useful? React with 👍 / 👎.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 7

🤖 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/docs/guides/migration/index.md`:
- Around line 60-61: The caption claiming "Run all required (breaking-change)
migrations interactively" is misleading because running `npx dialtone-migrate
--cwd ./src` only opens the selector; it won't execute all migrations unless the
user selects "a" or passes the `--all` flag. Update the documentation line to
either note the interactive prompt step (e.g., mention the selector and that you
must choose "a" to apply all) or change the example command to `npx
dialtone-migrate --cwd ./src --all` so it truly runs all required migrations
automatically.

In `@packages/dialtone-css/lib/build/js/dialtone_migrate_props/index.mjs`:
- Line 634: The help text showing the rewrite for "`@input` → `@update`:model-value"
is missing dt-select-menu despite EMIT_EVENT_RENAMES actually including it;
update the help line in dialtone_migrate_props/index.mjs to include
dt-select-menu in the component list (the line that lists dt-checkbox, dt-input,
dt-radio, dt-radio-group, dt-combobox-multi-select, dt-rich-text-editor,
dt-input-group) so the advertised coverage matches the EMIT_EVENT_RENAMES
mapping.

In `@packages/dialtone-css/lib/build/js/dialtone_migrate/index.mjs`:
- Around line 637-644: The loop currently skips files considered "minified"
using a newline-count heuristic (in the for-of over allFiles, reading into data)
before any regex-based migration checks, which causes short but valid modules to
be ignored; change the logic in the block where data is read so you do not
return early for files with <= 3 newlines — either remove that newline-length
check entirely or move it after the migration regex checks (so functions that
examine data for vue3-to-vue-imports run on short files), keeping the rest of
the flow intact (use the same data variable and preserve matchCount
initialization).
- Around line 153-167: The health-check for the migration "component-props" is
too narrow: update the migration config (object with id 'component-props' and
scriptDir 'dialtone_migrate_props') so its fileExtensions array includes .md,
.html, .js, .ts, .jsx, and .tsx (matching dialtone_migrate_props/index.mjs
rewrites) and extend detectPatterns to cover the additional cases you rewrite
(e.g., recipe-tag slot patterns); do the same reconciliation for the
'physical-to-logical' migration so its fileExtensions and detectPatterns match
the actual rewrite logic (including the new recipe-tag slot cases) to ensure
--health-check reflects real changes.
- Around line 828-833: The catch block handling migration failures (the code
that logs error using migration.name, pushes to results, then calls prompt) must
respect the CLI "--yes" non-interactive flag: replace the unconditional await
prompt call with a conditional that checks the existing boolean flag
representing --yes (e.g., yes / argv.yes / options.yes) and if that flag is true
skip the prompt and assume continuation (treat as 'y') so no stdin is read;
otherwise fall back to await prompt as before; keep the console.error and
results.push logic unchanged and ensure the code does not block when --yes is
set.
- Around line 719-728: The promise returned where you spawn a child process
(using spawn with process.execPath, scriptPath and args) currently always
resolves with { exitCode: code }; change this so non-zero exit codes propagate
as failures: when child.on('close', code => ...) detect if code === 0 then
resolve, otherwise reject (or resolve with an explicit success: false flag) so
main() can treat standalone migration failures as failures instead of marking
them done; update any callers that expect a resolved object if you choose the
reject path.

In `@packages/dialtone-css/package.json`:
- Around line 52-58: The new CLI `bin` entries (e.g., "dialtone-migrate",
"dialtone-health-check", "dialtone-migration-helper",
"dialtone-migrate-flex-to-stack", "dialtone-migrate-link-rendering",
"dialtone-migrate-tshirt-to-numeric", "dialtone-migrate-props" in package.json)
expand the package's public surface and must be released as a feature; update
the PR/commit title or release signal to use a feature-level type (e.g., prefix
the commit/PR title with "feat(dialtone-css):" or otherwise mark it as feat) so
the release tooling treats these new exports as a feature rather than a docs/fix
patch.
🪄 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: d8f487ed-8318-421c-8994-5873ad4624cc

📥 Commits

Reviewing files that changed from the base of the PR and between 1dcf975 and 57322d3.

📒 Files selected for processing (6)
  • apps/dialtone-documentation/docs/guides/migration/index.md
  • packages/dialtone-css/lib/build/js/dialtone_migrate/index.mjs
  • packages/dialtone-css/lib/build/js/dialtone_migrate_props/index.mjs
  • packages/dialtone-css/lib/build/js/dialtone_migration_helper/configs/physical-to-logical.mjs
  • packages/dialtone-css/lib/build/js/dialtone_migration_helper/configs/vue3-to-vue-imports.mjs
  • packages/dialtone-css/package.json

Comment on lines +60 to +61
# Run all required (breaking-change) migrations interactively
npx dialtone-migrate --cwd ./src

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

The bare command does not "run all required migrations" by itself.

npx dialtone-migrate --cwd ./src opens the selector; it does not automatically execute all required migrations unless the user then chooses a. This caption should either mention that prompt step or use --all.

🤖 Prompt for 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.

In `@apps/dialtone-documentation/docs/guides/migration/index.md` around lines 60 -
61, The caption claiming "Run all required (breaking-change) migrations
interactively" is misleading because running `npx dialtone-migrate --cwd ./src`
only opens the selector; it won't execute all migrations unless the user selects
"a" or passes the `--all` flag. Update the documentation line to either note the
interactive prompt step (e.g., mention the selector and that you must choose "a"
to apply all) or change the example command to `npx dialtone-migrate --cwd ./src
--all` so it truly runs all required migrations automatically.

v-model:selected-values → v-model (dt-checkbox-group)
@update:selected-values → @update:model-value (dt-checkbox-group)
@input → @update:model-value (dt-input, dt-radio, dt-radio-group, dt-combobox-multi-select, dt-rich-text-editor, dt-input-group)
@input → @update:model-value (dt-checkbox, dt-input, dt-radio, dt-radio-group, dt-combobox-multi-select, dt-rich-text-editor, dt-input-group)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Keep the help text aligned with the actual rewrite set.

EMIT_EVENT_RENAMES also rewrites @input on dt-select-menu, but this help line still omits it. The CLI now advertises narrower coverage than it actually has.

🤖 Prompt for 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.

In `@packages/dialtone-css/lib/build/js/dialtone_migrate_props/index.mjs` at line
634, The help text showing the rewrite for "`@input` → `@update`:model-value" is
missing dt-select-menu despite EMIT_EVENT_RENAMES actually including it; update
the help line in dialtone_migrate_props/index.mjs to include dt-select-menu in
the component list (the line that lists dt-checkbox, dt-input, dt-radio,
dt-radio-group, dt-combobox-multi-select, dt-rich-text-editor, dt-input-group)
so the advertised coverage matches the EMIT_EVENT_RENAMES mapping.

Comment on lines +153 to +167
id: 'component-props',
name: 'Component Props & Events',
description: 'Value renames, show→open, hide-* inversion, title→header-text, event/slot renames, rootClass removal.',
category: 'required',
type: 'standalone',
scriptDir: 'dialtone_migrate_props',
detectPatterns: [
/(?:show|hide-close|hide-icon|label-visible|selected-values)(?:=|[\s>])/,
/<(?:dt-(?:banner|notice|toast|modal)|Dt(?:Banner|Notice|Toast|Modal))\b[^>]*\btitle(?:=|[\s>])/,
/<(?:dt-[\w-]+|Dt\w+)\b[^>]*@(?:input|change)(?:=|\.)/,
/kind="(?:danger|error)"/,
/validation-state="(?:error|success)"/,
],
fileExtensions: ['.vue'],
},

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Keep health-check coverage in sync with the real migrations.

component-props only scans .vue here, but dialtone_migrate_props/index.mjs rewrites .md, .html, .js, .ts, .jsx, and .tsx too. physical-to-logical is similarly narrower here than its config, and this detect regex also misses the new recipe-tag slot cases added in physical-to-logical.mjs. --health-check can therefore report DONE while the actual migration would still change files.

Also applies to: 273-286

🤖 Prompt for 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.

In `@packages/dialtone-css/lib/build/js/dialtone_migrate/index.mjs` around lines
153 - 167, The health-check for the migration "component-props" is too narrow:
update the migration config (object with id 'component-props' and scriptDir
'dialtone_migrate_props') so its fileExtensions array includes .md, .html, .js,
.ts, .jsx, and .tsx (matching dialtone_migrate_props/index.mjs rewrites) and
extend detectPatterns to cover the additional cases you rewrite (e.g.,
recipe-tag slot patterns); do the same reconciliation for the
'physical-to-logical' migration so its fileExtensions and detectPatterns match
the actual rewrite logic (including the new recipe-tag slot cases) to ensure
--health-check reflects real changes.

Comment on lines +637 to +644
for (const file of allFiles) {
let data;
try {
data = await fs.readFile(file, 'utf8');
} catch { continue; }
// Skip likely minified files
if ((data.match(/[\n\r]/g) || []).length <= 3) continue;
let matchCount = 0;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Don't treat short source files as minified by default.

The <= 3 newline heuristic silently skips valid source modules before any regex check runs. That will miss exactly the kind of short JS/TS/MJS files the new vue3-to-vue-imports migration is supposed to rewrite.

🤖 Prompt for 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.

In `@packages/dialtone-css/lib/build/js/dialtone_migrate/index.mjs` around lines
637 - 644, The loop currently skips files considered "minified" using a
newline-count heuristic (in the for-of over allFiles, reading into data) before
any regex-based migration checks, which causes short but valid modules to be
ignored; change the logic in the block where data is read so you do not return
early for files with <= 3 newlines — either remove that newline-length check
entirely or move it after the migration regex checks (so functions that examine
data for vue3-to-vue-imports run on short files), keeping the rest of the flow
intact (use the same data variable and preserve matchCount initialization).

Comment on lines +719 to +728
return new Promise((resolve, reject) => {
const child = spawn(process.execPath, [scriptPath, ...args], {
stdio: 'inherit',
cwd: process.cwd(),
});

child.on('close', code => {
// Exit code 0 means success (or nothing to do)
resolve({ exitCode: code });
});

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical | ⚡ Quick win

Propagate standalone migration failures instead of marking them done.

A child process exiting with a non-zero code is still resolved here, and main() later records it as success: true. That means a failed standalone migration can appear as ✓ DONE in the final summary.

Suggested fix
-    child.on('close', code => {
-      // Exit code 0 means success (or nothing to do)
-      resolve({ exitCode: code });
-    });
+    child.on('close', code => {
+      if (code === 0) {
+        resolve({ exitCode: 0 });
+        return;
+      }
+      reject(new Error(`${migration.id} exited with code ${code}`));
+    });
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
return new Promise((resolve, reject) => {
const child = spawn(process.execPath, [scriptPath, ...args], {
stdio: 'inherit',
cwd: process.cwd(),
});
child.on('close', code => {
// Exit code 0 means success (or nothing to do)
resolve({ exitCode: code });
});
return new Promise((resolve, reject) => {
const child = spawn(process.execPath, [scriptPath, ...args], {
stdio: 'inherit',
cwd: process.cwd(),
});
child.on('close', code => {
if (code === 0) {
resolve({ exitCode: 0 });
return;
}
reject(new Error(`${migration.id} exited with code ${code}`));
});
🤖 Prompt for 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.

In `@packages/dialtone-css/lib/build/js/dialtone_migrate/index.mjs` around lines
719 - 728, The promise returned where you spawn a child process (using spawn
with process.execPath, scriptPath and args) currently always resolves with {
exitCode: code }; change this so non-zero exit codes propagate as failures: when
child.on('close', code => ...) detect if code === 0 then resolve, otherwise
reject (or resolve with an explicit success: false flag) so main() can treat
standalone migration failures as failures instead of marking them done; update
any callers that expect a resolved object if you choose the reject path.

Comment on lines +828 to +833
} catch (err) {
console.error(`\n ✗ Error running ${migration.name}: ${err.message}\n`);
results.push({ migration, success: false, error: err.message });

const answer = await prompt(' Continue with remaining migrations? (y/N) ');
if (answer !== 'y' && answer !== 'yes') break;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

--yes should stay non-interactive on failure.

If a migration throws, the tool still prompts for confirmation to continue. In scripted or CI usage, --yes should not block on stdin here; either continue automatically or fail fast.

🤖 Prompt for 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.

In `@packages/dialtone-css/lib/build/js/dialtone_migrate/index.mjs` around lines
828 - 833, The catch block handling migration failures (the code that logs error
using migration.name, pushes to results, then calls prompt) must respect the CLI
"--yes" non-interactive flag: replace the unconditional await prompt call with a
conditional that checks the existing boolean flag representing --yes (e.g., yes
/ argv.yes / options.yes) and if that flag is true skip the prompt and assume
continuation (treat as 'y') so no stdin is read; otherwise fall back to await
prompt as before; keep the console.error and results.push logic unchanged and
ensure the code does not block when --yes is set.

Comment on lines +52 to +58
"dialtone-migrate": "./lib/dist/js/dialtone_migrate/index.mjs",
"dialtone-health-check": "./lib/dist/js/dialtone_health_check/index.cjs",
"dialtone-migration-helper": "./lib/dist/js/dialtone_migration_helper/index.mjs",
"dialtone-migrate-flex-to-stack": "./lib/dist/js/dialtone_migrate_flex_to_stack/index.mjs",
"dialtone-migrate-link-rendering": "./lib/dist/js/dialtone_migrate_link_rendering/index.mjs",
"dialtone-migrate-tshirt-to-numeric": "./lib/dist/js/dialtone_migrate_tshirt_to_numeric/index.mjs",
"dialtone-migrate-props": "./lib/dist/js/dialtone_migrate_props/index.mjs",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Use a feature-level release signal for these new CLI exports.

These bin entries expand the public surface of a published npm package. Shipping them under a docs(...) title/merge commit risks releasing them as a docs patch instead of a feature. As per coding guidelines, "This is a public npm library. Breaking changes without BREAKING CHANGE footer ship as patches and silently break consumers" and "new exports need feat, not fix."

🤖 Prompt for 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.

In `@packages/dialtone-css/package.json` around lines 52 - 58, The new CLI `bin`
entries (e.g., "dialtone-migrate", "dialtone-health-check",
"dialtone-migration-helper", "dialtone-migrate-flex-to-stack",
"dialtone-migrate-link-rendering", "dialtone-migrate-tshirt-to-numeric",
"dialtone-migrate-props" in package.json) expand the package's public surface
and must be released as a feature; update the PR/commit title or release signal
to use a feature-level type (e.g., prefix the commit/PR title with
"feat(dialtone-css):" or otherwise mark it as feat) so the release tooling
treats these new exports as a feature rather than a docs/fix patch.

@iropolo
Ignacio Ropolo (iropolo) merged commit 332b3cc into next Jun 3, 2026
11 checks passed
@iropolo
Ignacio Ropolo (iropolo) deleted the dlt-3303 branch June 3, 2026 14:15
Brad Paugh (braddialpad) pushed a commit that referenced this pull request Jun 4, 2026
# [8.80.0-next.9](dialtone-css/v8.80.0-next.8...dialtone-css/v8.80.0-next.9) (2026-06-04)

### Bug Fixes

* **Contact Info:** no-jira remove min-inline-size regression from token migration ([ed8ee12](ed8ee12))

### Documentation

* **Migration Script:** dlt-3303 master migration script to next ([#1288](#1288)) ([332b3cc](332b3cc))

### Reverts

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

### Bug Fixes

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

### Code Refactoring

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

### Documentation

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

### Features

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

### Reverts

* remove accidental next-shadows commits from next ([868a502](868a502))
Brad Paugh (braddialpad) pushed a commit that referenced this pull request Jun 16, 2026
# [8.81.0-next.1](dialtone-css/v8.80.0...dialtone-css/v8.81.0-next.1) (2026-06-16)

### Bug Fixes

* **Contact Info:** no-jira remove min-inline-size regression from token migration ([ed8ee12](ed8ee12))
* **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))
* **Resizable, Box:** DLT-3445 accept full layout token set ([#1293](#1293)) ([4a63990](4a63990))
* **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))
* **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))
* **Tokens:** wrap css math expressions with calc() in layered build ([#966](#966)) ([1635f61](1635f61))

### Code Refactoring

* **Box:** DLT-3333 rename percent prop values to p-suffix ([#1208](#1208)) ([e5fa5da](e5fa5da))
* **Components:** dlt-3196 components to pascal case ([#1255](#1255)) ([aa6d259](aa6d259))
* **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))
* **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))
* **Css Utilities:** DLT-3295 DLT-3280 mark physical utilities as deprecated ([#1193](#1193)) ([73f1479](73f1479))
* DLT-1510 DLT-1511 DLT-1512 site redesign and ia ([#968](#968)) ([6ea7eb9](6ea7eb9))
* DLT-2908 ui kits landing page ([#1049](#1049)) ([d805b9d](d805b9d))
* **Foundations, Homepage:** DLT-3349 DLT-3350 refresh foundations content and homepage ([#1228](#1228)) ([ab73dfd](ab73dfd))
* **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))
* **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))
* **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))
* **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))
* **Components:** DLT-3157 align critical/positive prop values and CSS class names ([#1177](#1177)) ([edd98b2](edd98b2))
* **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))
* **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))
* **Filter Pill:** DLT-2704 create component ([#473](#473)) ([6267445](6267445))
* **Filter Pill:** DLT-2941 DtFilterPill improvements ([#1110](#1110)) ([23c5689](23c5689))
* **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))
* **Mode Directive, Mode Island:** DLT-3067 DLT-3078 DLT-3077 add `v-dt-mode` directive ([#1109](#1109)) ([f97efca](f97efca))
* **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:** 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-2802 DLT-2563 layered theming system and mode island component ([#945](#945)) ([5c72c6c](5c72c6c))
* **Tokens:** DLT-2937 introduce spacing and layout token systems ([#1045](#1045)) ([de23e12](de23e12))
* **Tokens:** update color ramps and consumer color migration tools DLT-3004 DLT-3005 DLT-3006 DLT-3007 DLT-3008 ([#1054](#1054)) ([28cb1de](28cb1de))
* **Typography, Tokens:** DLT-2856 DLT-2857 next typography system ([#994](#994)) ([d744e97](d744e97))
* **Validation Messages:** DLT-3423 add info variant ([#1274](#1274)) ([412154b](412154b))

### Reverts

* remove accidental next-shadows commits from next ([868a502](868a502))
Brad Paugh (braddialpad) pushed a commit that referenced this pull request Jun 16, 2026
# [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))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants