Skip to content

feat(box): DLT-3523 add positioning props to DtBox - #1355

Merged
Francis Rupert (francisrupert) merged 10 commits into
nextfrom
box-positioning-properties
Jul 6, 2026
Merged

feat(box): DLT-3523 add positioning props to DtBox#1355
Francis Rupert (francisrupert) merged 10 commits into
nextfrom
box-positioning-properties

Conversation

@francisrupert

@francisrupert Francis Rupert (francisrupert) commented Jul 6, 2026

Copy link
Copy Markdown
Contributor
image

🛠️ Type Of Change

These types will increment the version number on release:

  • Feature

📖 Jira Ticket

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

📖 Description

Adds DtBox props for container positioning:

  • position
  • logical inset props
  • zIndex

Includes token-backed styling, prop validation, tests, stories, Combinator support, docs, and AI guidance.

💡 Context

DtBox is the primitive for token-backed containers.

This lets common positioned containers use DtBox props instead of CSS utility classes.

Does not remove utility escape hatches. Utilities still apply for non-DtBox elements, responsive positioning, calc/arbitrary/reset values, and advanced overlay cases.

📝 Checklist

For all PRs:

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

For all Vue changes:

  • I have added / updated unit tests.
  • I have validated components with a screen reader.
  • I have validated components keyboard navigation.

For all CSS changes:

  • I have used design tokens whenever possible.
  • I have considered how this change will behave on different screen sizes.
  • I have visually validated my change in light and dark mode.
  • I have used gap or flexbox properties for layout instead of margin whenever possible.
asdf.mp4

@coderabbitai

coderabbitai Bot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

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

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: 66972e70-c50b-4407-a11b-9a4e59d2798e

📥 Commits

Reviewing files that changed from the base of the PR and between 44eb364 and 880b876.

📒 Files selected for processing (3)
  • apps/dialtone-documentation/docs/utilities/layout/coordinates.md
  • packages/dialtone-css/lib/build/less/components/box.less
  • packages/dialtone-vue/components/Box/Box.test.js
🔗 Linked repositories identified

CodeRabbit considers these linked repositories for cross-repo context during reviews:

  • dialpad/ios (manual)
  • dialpad/firespotter (manual)
  • dialpad/semantic-release-changelog-json (auto-detected)
  • dialpad/conventional-changelog-angular (auto-detected)

Added token-backed positioning props to DtBox: position, logical inset*, and zIndex, with validators and modifier-class generation (CSS/LESS token registrations). Updated Combinator exclusions and tokens, plus Storybook stories, unit tests, and docs/guidance. Removed GitHub Packages npm auth step in CI.

Overall Judgement: ✅ Ready to merge — the change is well-tested and documented with guidance updates, and the CI environment adjustment addresses the reported lockfile/package resolution issue.

Walkthrough

This PR adds DtBox positioning support across token resolution, CSS generation, Vue props, stories, tests, and documentation. It also removes the GitHub Packages npm authentication step from the environment setup action.

Changes

DtBox Positioning Feature

Layer / File(s) Summary
Token and variant contracts
packages/combinator/src/lib/tokens.js, packages/combinator/src/variants/variants_box.js, packages/combinator/src/lib/exclusion_rules.js, packages/combinator/src/components/option_bar/option_bar_member_group.vue, packages/combinator/src/lib/*test.js
Adds coordinate and z-index token resolution, inset/position token lists, Box default prop metadata, conditional inset exclusions, prop ordering, and tests for the new resolution and exclusion behavior.
Box CSS generation
packages/dialtone-css/lib/build/less/components/box.less
Adds Box custom properties, reworks spacing and inset mixins, adjusts base cascade placement, and generates positioning and z-index modifier classes.
DtBox Vue API and stories
packages/dialtone-vue/components/Box/*
Expands Box constants, validators, props, class generation, Storybook controls, and unit tests to cover position, inset, and z-index props.
Documentation and guidance updates
.agents/resources/*, .claude/rules/*, .claude/skills/utility.md, apps/dialtone-documentation/docs/..., packages/dialtone-docs/src/content/..., packages/dialtone-mcp-server/client-rules.json
Updates agent rules, Claude skill docs, product docs, reference pages, utility docs, announcement content, and MCP client rules to describe the new primitive-first and logical-positioning guidance.

GitHub Actions environment setup

Layer / File(s) Summary
Setup action auth step removal
.github/actions/setup-environment/action.yml
Removes the npm authentication step from the composite setup action before dependency installation.

Possibly related PRs

  • dialpad/dialtone#1344: Updates the same parity documentation area around agent tooling and Claude rule files.

Suggested reviewers: braddialpad, ninarepetto, belumontoya

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch box-positioning-properties

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

@francisrupert Francis Rupert (francisrupert) added the no-visual-test Add this tag when the PR does not need visual testing label Jul 6, 2026
@braddialpad

Copy link
Copy Markdown
Contributor

Looking into lockfile issue

@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: 3

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
packages/dialtone-css/lib/build/less/components/box.less (1)

176-194: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick win

Comments no longer match the reordered declarations.

The "Width cascade: specific → axis → shorthand → 0" comment (line 178) now sits directly above only border-radius, while the actual border-width cascade it describes has moved several lines down, past the new inset declarations. Similarly, // Shadow (line 181) now precedes box-shadow and the unrelated inset-block/inset-inline assignments. Functionally harmless (different properties, order-independent), but misleading for future maintainers.

✏️ Suggested comment fix
   border-style: solid;
   border-radius: var(--box-br);

   // Shadow
   box-shadow: var(--box-shadow, none);
+
+  // Inset
   inset-block: var(--box-ibs, var(--box-inset-block, var(--box-inset, auto))) var(--box-ibe, var(--box-inset-block, var(--box-inset, auto)));
   inset-inline: var(--box-iis, var(--box-inset-inline, var(--box-inset, auto))) var(--box-iie, var(--box-inset-inline, var(--box-inset, auto)));
+
+  // Border width cascade: specific → axis → shorthand → 0
   border-block-start-width:  var(--box-bwbs, var(--box-bwbl, var(--box-bw, 0)));
🤖 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/less/components/box.less` around lines 176 -
194, The comments in the box rules are now attached to the wrong declarations,
especially around the border-width cascade and the shadow section in the box
mixin. Update the comment placement in the `box.less` block so the “Width
cascade: specific → axis → shorthand → 0” note sits directly above the
`border-block-start-width`/`border-inline-*` rules, and move `// Shadow` to
cover only `box-shadow` in the `box` styling section. Keep the rest of the
declaration order unchanged while aligning comments with the related properties.
🤖 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/utilities/layout/coordinates.md`:
- Around line 14-16: Clarify the scope in the coordinates documentation: the
`d-t-*`, `d-r-*`, `d-b-*`, `d-l-*`, `d-x-*`, `d-y-*`, `d-all-*`, and logical
aliases like `d-ibs-*` only define offsets and do not by themselves position
elements. Update the wording near the coordinate utility description in
`coordinates.md` to avoid saying they “absolutely position” elements, and
instead explain that they are used with positioning utilities such as
`d-ps-relative` and `d-ps-absolute` when needed.

In `@packages/dialtone-vue/components/Box/Box.test.js`:
- Around line 419-448: The console.warn spy setup is duplicated across the Box
test cases in the DT_BOX_INSET_VALUES, DT_BOX_INSET_SIDE_VALUES, and invalid
prop validation blocks. Move the repeated vi.spyOn(console,
'warn').mockImplementation(() => {}) into a shared beforeEach in the Box test
suite, and keep only the per-test mountComponent and assertion logic inside each
it/it.each case. This will align with the existing test conventions and reduce
repetition while preserving the current warning expectations.
- Around line 456-466: The Box test groups three class assertions in one case,
but the test suite requires one assertion per test. Split the current `applies
multiple positioning classes simultaneously` case in `Box.test.js` into separate
`it` blocks or an `it.each` table for the `mountComponent` prop/class pairs,
using the existing `wrapper.classes()` expectations for `position`,
`insetBlockStart`, and `zIndex` individually.

---

Outside diff comments:
In `@packages/dialtone-css/lib/build/less/components/box.less`:
- Around line 176-194: The comments in the box rules are now attached to the
wrong declarations, especially around the border-width cascade and the shadow
section in the box mixin. Update the comment placement in the `box.less` block
so the “Width cascade: specific → axis → shorthand → 0” note sits directly above
the `border-block-start-width`/`border-inline-*` rules, and move `// Shadow` to
cover only `box-shadow` in the `box` styling section. Keep the rest of the
declaration order unchanged while aligning comments with the related properties.
🪄 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: e92c0db5-a685-4027-a54b-cb84f9e28ee1

📥 Commits

Reviewing files that changed from the base of the PR and between 42825ec and ee37202.

📒 Files selected for processing (30)
  • .agents/resources/agent-tooling-parity.md
  • .agents/resources/rule-map.md
  • .agents/resources/rules/css-utilities.md
  • .agents/resources/rules/logical-naming.md
  • .claude/rules/css-utilities.md
  • .claude/rules/logical-naming.md
  • .claude/skills/utility.md
  • apps/dialtone-documentation/docs/components/box.md
  • apps/dialtone-documentation/docs/dialtone/whats-new/posts/2026-4-22.md
  • apps/dialtone-documentation/docs/foundations/size-and-space/index.md
  • apps/dialtone-documentation/docs/scratch.md
  • apps/dialtone-documentation/docs/utilities/layout/coordinates.md
  • apps/dialtone-documentation/docs/utilities/layout/position.md
  • apps/dialtone-documentation/docs/utilities/layout/z-index.md
  • packages/combinator/src/components/option_bar/option_bar_member_group.vue
  • packages/combinator/src/lib/exclusion_rules.js
  • packages/combinator/src/lib/exclusion_rules.test.js
  • packages/combinator/src/lib/tokens.js
  • packages/combinator/src/lib/tokens.test.js
  • packages/combinator/src/variants/variants_box.js
  • packages/dialtone-css/lib/build/less/components/box.less
  • packages/dialtone-docs/src/content/development/development-css-utilities.md
  • packages/dialtone-docs/src/content/reference/reference-component-api-patterns.md
  • packages/dialtone-mcp-server/client-rules.json
  • packages/dialtone-vue/components/Box/Box.stories.js
  • packages/dialtone-vue/components/Box/Box.test.js
  • packages/dialtone-vue/components/Box/Box.vue
  • packages/dialtone-vue/components/Box/BoxConstants.js
  • packages/dialtone-vue/components/Box/Validators.js
  • packages/dialtone-vue/components/Box/index.js
🔗 Linked repositories identified

CodeRabbit considers these linked repositories for cross-repo context during reviews:

  • dialpad/ios (manual)
  • dialpad/firespotter (manual)
  • dialpad/semantic-release-changelog-json (auto-detected)
  • dialpad/conventional-changelog-angular (auto-detected)

Comment thread apps/dialtone-documentation/docs/utilities/layout/coordinates.md Outdated
Comment thread packages/dialtone-vue/components/Box/Box.test.js Outdated
Comment thread packages/dialtone-vue/components/Box/Box.test.js Outdated
…stall

All current @dialpad dependencies are published to npmjs.org; the blanket
registry override in setup-environment caused pnpm install to 404 against
GitHub Packages. Publishing still configures its own registry/auth in
publish-web.yml right before publish.
@braddialpad

Copy link
Copy Markdown
Contributor

lockfile / ci issues fixed. Francis Rupert (@francisrupert) can you do "corepack enable" in dialtone directory to make sure it always uses the correct repository version of pnpm. (this is a very recent new feature)

@github-actions

github-actions Bot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

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

@francisrupert
Francis Rupert (francisrupert) merged commit 68a6570 into next Jul 6, 2026
21 checks passed
@francisrupert
Francis Rupert (francisrupert) deleted the box-positioning-properties branch July 6, 2026 21:35
Brad Paugh (braddialpad) pushed a commit that referenced this pull request Jul 13, 2026
# [1.2.0-next.15](combinator/v1.2.0-next.14...combinator/v1.2.0-next.15) (2026-07-13)

### Documentation

* **Combinator:** DLT-3146 add docs and component variants guidance ([#1344](#1344)) ([42825ec](42825ec))

### Features

* **Box:** DLT-3523 add positioning props to DtBox ([#1355](#1355)) ([68a6570](68a6570))
* DLT-3534 align size prop types across components and modal fullscreen ([#1362](#1362)) ([8fb88a1](8fb88a1))
* **Link:** DLT-3529 add unstyled variant ([#1360](#1360)) ([b90c2cc](b90c2cc))
* **Text List:** DLT-3530 add DtTextList component ([#1363](#1363)) ([9c9fc0d](9c9fc0d))
Brad Paugh (braddialpad) pushed a commit that referenced this pull request Jul 13, 2026
# [8.81.0-next.5](dialtone-css/v8.81.0-next.4...dialtone-css/v8.81.0-next.5) (2026-07-13)

### Bug Fixes

* **Avatar:** DLT-3540 suppress bgc when image is present ([31cdd3c](31cdd3c))

### Features

* **Box:** DLT-3523 add positioning props to DtBox ([#1355](#1355)) ([68a6570](68a6570))
* DLT-3534 align size prop types across components and modal fullscreen ([#1362](#1362)) ([8fb88a1](8fb88a1))
* **Link:** DLT-3529 add unstyled variant ([#1360](#1360)) ([b90c2cc](b90c2cc))
* **Text List:** DLT-3530 add DtTextList component ([#1363](#1363)) ([9c9fc0d](9c9fc0d))
Brad Paugh (braddialpad) pushed a commit that referenced this pull request Jul 13, 2026
# [3.223.0-next.4](dialtone-vue/v3.223.0-next.3...dialtone-vue/v3.223.0-next.4) (2026-07-13)

### Features

* **Box:** DLT-3523 add positioning props to DtBox ([#1355](#1355)) ([68a6570](68a6570))
* DLT-3534 align size prop types across components and modal fullscreen ([#1362](#1362)) ([8fb88a1](8fb88a1))
* **Link:** DLT-3529 add unstyled variant ([#1360](#1360)) ([b90c2cc](b90c2cc))
* **Text List:** DLT-3530 add DtTextList component ([#1363](#1363)) ([9c9fc0d](9c9fc0d))
Brad Paugh (braddialpad) pushed a commit that referenced this pull request Jul 13, 2026
# [1.5.0-next.2](dialtone-mcp-server/v1.5.0-next.1...dialtone-mcp-server/v1.5.0-next.2) (2026-07-13)

### Features

* **Box:** DLT-3523 add positioning props to DtBox ([#1355](#1355)) ([68a6570](68a6570))
Brad Paugh (braddialpad) pushed a commit that referenced this pull request Jul 13, 2026
# [10.0.0-next.2](dialtone/v10.0.0-next.1...dialtone/v10.0.0-next.2) (2026-07-13)

### Bug Fixes

* **Avatar:** DLT-3540 suppress bgc when image is present ([31cdd3c](31cdd3c))
* **Dialtone Tokens:** NO-JIRA publish swift prerelease tokens to main instead of a separate branch ([8d9f690](8d9f690))

### Documentation

* **Combinator:** DLT-3146 add docs and component variants guidance ([#1344](#1344)) ([42825ec](42825ec))
* **Migration Guide:** DLT-3469 visual migration guide ([#1358](#1358)) ([cc3a6b5](cc3a6b5))

### Features

* **Box:** DLT-3523 add positioning props to DtBox ([#1355](#1355)) ([68a6570](68a6570))
* **Dialtone Tokens:** NO-JIRA add no-layers CSS build and initDialtoneTheme layers option ([#1364](#1364)) ([c2b6839](c2b6839))
* DLT-3534 align size prop types across components and modal fullscreen ([#1362](#1362)) ([8fb88a1](8fb88a1))
* **Link:** DLT-3529 add unstyled variant ([#1360](#1360)) ([b90c2cc](b90c2cc))
* **Text List:** DLT-3530 add DtTextList component ([#1363](#1363)) ([9c9fc0d](9c9fc0d))
Brad Paugh (braddialpad) pushed a commit that referenced this pull request Jul 14, 2026
# [3.224.0-next.1](dialtone-vue/v3.223.1...dialtone-vue/v3.224.0-next.1) (2026-07-14)

### Bug Fixes

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

### Code Refactoring

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

### Documentation

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

### Features

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

### Reverts

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

### Bug Fixes

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

### Code Refactoring

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

### Documentation

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

### Features

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

### Reverts

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

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants