Skip to content

feat(tuffex): lay overlays and CoreBox on refraction and align docs with components - #2120

Open
TalexDreamSoul wants to merge 12 commits into
masterfrom
task/feat/refraction-surfaces-and-concept-docs
Open

TalexDreamSoul wants to merge 12 commits into
masterfrom
task/feat/refraction-surfaces-and-concept-docs

Conversation

@TalexDreamSoul

@TalexDreamSoul TalexDreamSoul commented Oct 17, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Lays the overlay surfaces on refraction (琉光), the default material, and makes the concept and component docs describe what the components actually do.

  1. feat(tuffex) TxBaseSurface gains systemBackdrop for surfaces over a window's own material (vibrancy, Mica). No layer runs a backdrop filter there: in a transparent window it would sample only the surface's own veil and pile it up until the desktop no longer showed through. The system blurs; the surface paints its colour, light and rim.
  2. feat(tuffex) TxModal and TxDrawer paint their panels with TxBaseSurface (surface, surfaceColor, surfaceOpacity; default refraction).
    • The modal's panel only scales. Its header, body, footer, shadow and the surface's layers fade one by one, so the backdrop filter samples the page on every frame instead of sitting under an animated ancestor opacity. Reduced motion keeps the fades and drops the travel.
    • The drawer's surface is moving while it slides. panelTransparent thins the colour under the material instead of adding an 18px blur.
  3. feat(tuffex) TxCommandPalette and the dialogs TxPopperDialog, TxBlowDialog, TxBottomDialog and TxTouchTip paint their panels with TxBaseSurface as well, with the modal's three props (exported for the dialogs as DialogSurfaceProps).
    • Their own blur and solid backgrounds go. Dims (and Blow's frost) and the rims and shadows move to pseudo-elements, so no ancestor is the material's backdrop root.
    • Panels only move while their parts fade, so refraction stays live through every transition. Reduced motion keeps the fades and drops the travel.
    • TxTouchTip's close had no transition and vanished after 60ms; it now grows and fades over 220ms.
    • Nexus GlobalSearch follows the palette onto the material and fades its parts the same way.
  4. fix(tuffex) Under high contrast a host fades its surface whole, but the fade it handed the fake backdrop still applied and the two compounded: a solid base at 0.77 under content at 0.88. The backdrop is solid there and now takes no animation of its own.
  5. feat(tuffex) Finished TxStreamText / TxStreamElement text and .tx-help-text wrap pretty; the paragraph still being written stays auto.
  6. feat(core-app) CoreBox lays a refraction surface with systemBackdrop over the window material.
  7. ref(core-app, nexus) Explicit non-refraction materials are removed so surfaces take the default: core-app 8 files, Nexus 70 files (121 mask, 34 glass, 4 pure). Material comparison demos keep their materials.
  8. docs Design manuals 02/03/04 and the Nexus concept and component docs (zh/en) are rewritten where a component differs from its doc: eight materials across nine mode values, what autoDetect senses, the 140ms settle, dark weights 460/560/660 under tx-dark-weight, .tx-inline-code, the text utilities, and the streaming exception to pretty wrapping. The dialog and command-palette pages document the new props and motion, and the material lists in foundations, theming, the surface taxonomy and manual 02 include them.
  9. chore(nexus) Removes apps/nexus/.nuxt, a worktree symlink committed by mistake in 9a8d8d7. Dangling on CI, it failed the install step of every job in the previous run.

PR Type

  • ☑ Bug fix
  • ☑ Feature
  • ☑ Documentation
  • ☐ Maintenance (refactor / chore / build / CI / tests)
  • ☐ Other

Quality Checklist

  • ☑ Code follows the project's conventions
  • ☑ Existing tests pass: TuffEx 3373/3375 in a full run before the dialog commits. The two failures (image-generation strength, voice-beam organic signals) were timeouts under the full run's load and pass on their own. After the last change: dialog, command palette, modal and base-surface 54/54; the core-app suites that mount these components 102/102.
  • ☐ New or updated tests cover the changes when needed
  • ☑ Documentation or comments were updated when necessary

Testing

  • ☑ I tested the changes locally
    • Modal, frame by frame in a browser, in light, dark, high contrast, reduced motion, fullscreen, mask and mask + high contrast: content opacity 1.000 on every frame, and no backdrop root outside high contrast.
    • Command palette, the four dialogs, the modal and a copy of GlobalSearch's motion and styles, frame by frame in a browser while entering and closing: panel opacity 1 and no backdrop root on every frame, with the blur layers live mid-fade. Under reduced motion the panels hold still while their parts fade; under high contrast (the attribute and prefers-contrast: more) the surface fades whole with its layers hidden and its backdrop solid. At rest in light and dark.
    • CoreBox's surface in an emulated transparent window: without systemBackdrop the desktop does not show through; with it, the surface is as translucent as the old mask.
    • Drawer at rest in light (default, panelTransparent, mask).
  • ☐ I added or updated automated tests
  • ☑ I validated related build / release workflows if they were affected: TuffEx builds, and audit:size passes with no budget changes (button 56.2/58, form 84.5/85, admin list 132.2/135, chat 154.8/155 KiB; full CSS 828.2/835 KiB).

Not yet verified

  • CoreBox in a real Electron window.
  • The drawer's slide, frame by frame.
  • Performance of Nexus admin/analytics.vue: its 50 cards are now refraction, and TxCard has no autoDetect, so they never degrade.
  • GlobalSearch on the running Nexus site: checked through a copy of its motion and styles in a Vite harness.

Known, not changed here

  • Under reduced motion TxBlowDialog still zooms and dims #app when it opens (its own inline transition).
  • TxBottomDialog unmounts 150ms into its close, as before, which cuts its fade short.
  • The four dialogs focus their root with tabindex="-1", which shows a focus ring.
  • core-app's own copies of these dialogs do not use TxBaseSurface.

…dows

A transparent Electron window shows the desktop through its own system
material (vibrancy on macOS, Mica on Windows), which lies under the page
where no backdrop-filter can reach it. A filter there samples only the
surface's own veil and lays that copy back over it, so a 75% veil turns
nearly opaque and the desktop stops showing through.

With systemBackdrop the surface runs no backdrop filter: the glass layer
is not rendered and the filter layer keeps only its tint, leaving the
blur to the system. The veil, mask, flow light and rim draw as before.
As the surface no longer samples the page, moving and autoDetect have
nothing to guard and are ignored.
Both panels now draw their background with TxBaseSurface (card preset,
fake veil) and take the refraction default, with surface, surfaceColor
and surfaceOpacity to choose another material. The veil sits at 0.96
under mask and 0.5 otherwise; TxDrawer's panelTransparent thins it to
0.78 and 0.3 instead of adding a blur of its own.

An element that fades through opacity, or carries a filter or a
backdrop filter, is the backdrop root of every backdrop filter inside
it. So the modal's dim and frost move from the overlay to its ::before,
and the panel no longer fades as a whole: it scales while its header,
body, footer, shadow and each layer of the material fade on their own,
and the material samples the page from the first frame to the last.
High contrast and materials without a backdrop filter fade whole.
Reduced motion keeps the fades and drops the travel, which the modal
did not handle before.

The drawer counts its panel's transform transitions and holds the
surface in its motion fallback while one runs, as a sliding backdrop
filter samples where the panel was a frame ago.
The smart-wrapping guide promised text-wrap: pretty for .tx-help-text
and for finished streaming text, and the styles had neither. A finished
TxStreamText or TxStreamElement paragraph now breaks with
text-wrap-style: pretty, while the one still being written keeps auto,
so each arriving word does not rerun its line breaking. The longhand
leaves a host's nowrap alone.
…aterial

CoreBox's backing was a plain div at 75% of the fill colour, outside the
refraction default every other surface follows. It is now TxBaseSurface
with systemBackdrop: CoreBox is a transparent window whose blur is the
system's (vibrancy on macOS, Mica on Windows), and a backdrop filter in
it would only re-sample its own veil and turn it opaque over that
material. The surface lays the same 75% veil with its tint and rim, and
the system blurs.
The home menus, the shell conversation list, the plugin log and runtime
cards and the language setup named blur, mask or pure explicitly. They
now take the default refraction surface, as surfaces in the app are to
unless a material is confirmed for them.
The site's pages and component demos named mask (121 times), glass (34)
or pure (4) on cards, select panels and anchors, the admin analytics
page alone on 50 cards. They now take the default refraction surface.
Demos whose subject is the material keep choosing it: the surface
modes, fallback and motion comparisons, the card backgrounds and the
anchor surface playground.
Where a concept article described a recommendation or an app excerpt,
it now describes what TuffEx ships: type scale points at the style
entry's .tx-prose and .tx-inline-code, smart wrapping at .tx-heading,
.tx-description and .tx-help-text, and irradiation tuning at the dark
theme's 460/560/660 weight tokens, with its demo set at those weights.
The surface taxonomy and deduction articles match the eight materials,
the power-saving transitions and the components that default to
refraction, CoreBox's system backdrop among them.

Component pages follow the code: base-surface documents every mode, the
environment-sensing API and systemBackdrop, and its demo shows all the
modes; modal and drawer document surface, surfaceColor and
surfaceOpacity and how their panels move; the anchor family's
panelBackground and flip-overlay's surface list every material; and
card, foundations, theming, tooltip and the stream pages match what
ships.
Manual 02 lists the eight materials and the surfaces that default to
refraction, CoreBox's included, and describes the deduction autoDetect
actually runs (pointer speed, window drags, frame-budget probes, power
saving), the 120Hz drag fallback with its 140ms hysteresis, acrylic
alongside blur and glass, and the card's specular light. 03 gives the
dark theme's 460/560/660 weight tokens and their static-font guard; 04
the inline code style and text utilities in the style entry and the
streaming exception to pretty wrapping. The CoreBox overlay contract
describes its refraction surface over the system material.
@coderabbitai

coderabbitai Bot commented Oct 17, 2026 •

Copy link
Copy Markdown
Contributor

Important

Review skipped

Too many files!

This PR contains 163 files, which is 63 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry.

⚙️ Run configuration
  • Configuration used: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: bbb837d9-146e-43ce-8100-49e513e403d5
📥 Commits

Reviewing files that changed from the base of the PR and between 7d04b8e and 2c9ffa6.

📒 Files selected for processing: 163
  • apps/core-app/src/renderer/src/components/plugin/runtime/PluginPerfCharts.vue
  • apps/core-app/src/renderer/src/components/plugin/tabs/PluginLogs.vue
  • apps/core-app/src/renderer/src/components/shell/ShellConversationList.vue
  • apps/core-app/src/renderer/src/views/base/begin/internal/LanguageSetup.vue
  • apps/core-app/src/renderer/src/views/base/home/HomeModelMenu.vue
  • apps/core-app/src/renderer/src/views/base/home/HomePermissionMenu.vue
  • apps/core-app/src/renderer/src/views/base/home/HomeTurnInfoMenu.vue
  • apps/core-app/src/renderer/src/views/base/home/workspace/HomeWorkspaceModeMenu.vue
  • apps/core-app/src/renderer/src/views/box/CoreBox.vue
  • apps/nexus/app/components/assets/create/AssetBetaStep.vue
  • apps/nexus/app/components/assets/create/AssetPluginFormStep.vue
  • apps/nexus/app/components/assets/create/AssetPluginStep.vue
  • apps/nexus/app/components/assets/create/AssetTypePickerStep.vue
  • apps/nexus/app/components/content/CodeRenderer.vue
  • apps/nexus/app/components/content/DocApiTable.vue
  • apps/nexus/app/components/content/demos/AutoSizerAutoSizerTextTransformerDemo.vue
  • apps/nexus/app/components/content/demos/BaseAnchorSurfacePlaygroundDemo.vue
  • apps/nexus/app/components/content/demos/BaseSurfaceModesDemo.vue
  • apps/nexus/app/components/content/demos/CardBasicDemo.vue
  • apps/nexus/app/components/content/demos/CardBasicSlotsDemo.vue
  • apps/nexus/app/components/content/demos/CardCardCompositionsDemo.vue
  • apps/nexus/app/components/content/demos/CardCardWithEmptyDemo.vue
  • apps/nexus/app/components/content/demos/CardFlowLightDemo.vue
  • apps/nexus/app/components/content/demos/CardHeaderDemo.vue
  • apps/nexus/app/components/content/demos/CardHeaderFooterActionsDemo.vue
  • apps/nexus/app/components/content/demos/CardInertialDemo.vue
  • apps/nexus/app/components/content/demos/CardLayoutPropsDemo.vue
  • apps/nexus/app/components/content/demos/CardSizeDemo.vue
  • apps/nexus/app/components/content/demos/CardStatesDemo.vue
  • apps/nexus/app/components/content/demos/CardVariantsDemo.vue
  • apps/nexus/app/components/content/demos/ComponentsFeedbackTaskCenterDemo.vue
  • apps/nexus/app/components/content/demos/ComponentsNavigationShellDemo.vue
  • apps/nexus/app/components/content/demos/ComponentsSearchFiltersDemo.vue
  • apps/nexus/app/components/content/demos/ConceptIrradiationDemo.vue
  • apps/nexus/app/components/content/demos/ConceptSurfaceModesDemo.vue
  • apps/nexus/app/components/content/demos/ContextMenuContextMenuDemo.vue
  • apps/nexus/app/components/content/demos/DatePickerDatePickerDemo.vue
  • apps/nexus/app/components/content/demos/DrawerSlotsEffectsDemo.vue
  • apps/nexus/app/components/content/demos/FlatDropdownBasicDemo.vue
  • apps/nexus/app/components/content/demos/FlatRadioBasicDemo.vue
  • apps/nexus/app/components/content/demos/FlatRadioBorderedDemo.vue
  • apps/nexus/app/components/content/demos/FlatRadioDisabledDemo.vue
  • apps/nexus/app/components/content/demos/FlatRadioIconDemo.vue
  • apps/nexus/app/components/content/demos/FlatRadioMultipleDemo.vue
  • apps/nexus/app/components/content/demos/IconMorphIconMorphDemo.vue
  • apps/nexus/app/components/content/demos/MotionFormDemo.vue
  • apps/nexus/app/components/content/demos/PickerPickerDemo.vue
  • apps/nexus/app/components/content/demos/PopoverPopoverVisualEffectsDemo.vue
  • apps/nexus/app/components/content/demos/RadioRadioCardDemo.vue
  • apps/nexus/app/components/content/demos/RadioRadioDisabledDemo.vue
  • apps/nexus/app/components/content/demos/RadioRadioGroupPlaygroundDemo.vue
  • apps/nexus/app/components/content/demos/RadioRadioIndicatorDemo.vue
  • apps/nexus/app/components/content/demos/RadioRadioSimpleDemo.vue
  • apps/nexus/app/components/content/demos/RadioRadioStandardDemo.vue
  • apps/nexus/app/components/content/demos/SearchInputSearchInputRemoteDemo.vue
  • apps/nexus/app/components/content/demos/SelectSelectAllowCreateDemo.vue
  • apps/nexus/app/components/content/demos/SelectSelectDemo.vue
  • apps/nexus/app/components/content/demos/SelectSelectDisabledDemo.vue
  • apps/nexus/app/components/content/demos/SelectSelectDisabledOptionDemo.vue
  • apps/nexus/app/components/content/demos/SelectSelectGroupedFooterDemo.vue
  • apps/nexus/app/components/content/demos/SelectSelectMultipleTagsDemo.vue
  • apps/nexus/app/components/content/demos/SelectSelectRemoteSearchableDemo.vue
  • apps/nexus/app/components/content/demos/SelectSelectRichOptionsDemo.vue
  • apps/nexus/app/components/content/demos/SelectSelectScrollableDropdownDemo.vue
  • apps/nexus/app/components/content/demos/SelectSelectSearchableDemo.vue
  • apps/nexus/app/components/content/demos/SelectSelectStatusDemo.vue
  • apps/nexus/app/components/content/demos/TabsDynamicContentManualDemo.vue
  • apps/nexus/app/components/content/demos/TabsIndicatorVariantsMotionsDemo.vue
  • apps/nexus/app/components/content/demos/TextMorphNumberPlaceValueDemo.vue
  • apps/nexus/app/components/content/demos/TextMorphSpringDemo.vue
  • apps/nexus/app/components/content/demos/TextMorphTextMorphDemo.vue
  • apps/nexus/app/components/content/demos/TextTransformerAutoSizerTextTransformerDemo.vue
  • apps/nexus/app/components/content/demos/TextTransformerLongTextChapterDemo.vue
  • apps/nexus/app/components/content/demos/TextTransformerMorphVsFadeDemo.vue
  • apps/nexus/app/components/content/demos/TextTransformerStatusTextDemo.vue
  • apps/nexus/app/components/content/demos/TextTransformerTextTransformerDemo.vue
  • apps/nexus/app/components/content/demos/TextTransformerTitleSubtitleDemo.vue
  • apps/nexus/app/components/content/demos/TooltipIndicatorDemo.vue
  • apps/nexus/app/components/content/demos/TransitionTransitionContentDemo.vue
  • apps/nexus/app/components/content/demos/TransitionTransitionListDemo.vue
  • apps/nexus/app/components/search/GlobalSearch.vue
  • apps/nexus/app/pages/admin/analytics.vue
  • apps/nexus/app/pages/dashboard/account.vue
  • apps/nexus/app/pages/dashboard/devices.vue
  • apps/nexus/content/docs/dev/components/auto-sizer.en.mdc
  • apps/nexus/content/docs/dev/components/auto-sizer.zh.mdc
  • apps/nexus/content/docs/dev/components/base-anchor.en.mdc
  • apps/nexus/content/docs/dev/components/base-anchor.zh.mdc
  • apps/nexus/content/docs/dev/components/base-surface.en.mdc
  • apps/nexus/content/docs/dev/components/base-surface.zh.mdc
  • apps/nexus/content/docs/dev/components/card.en.mdc
  • apps/nexus/content/docs/dev/components/card.zh.mdc
  • apps/nexus/content/docs/dev/components/command-palette.en.mdc
  • apps/nexus/content/docs/dev/components/command-palette.zh.mdc
  • apps/nexus/content/docs/dev/components/context-menu.en.mdc
  • apps/nexus/content/docs/dev/components/context-menu.zh.mdc
  • apps/nexus/content/docs/dev/components/dialog.en.mdc
  • apps/nexus/content/docs/dev/components/dialog.zh.mdc
  • apps/nexus/content/docs/dev/components/drawer.en.mdc
  • apps/nexus/content/docs/dev/components/drawer.zh.mdc
  • apps/nexus/content/docs/dev/components/dropdown-menu.en.mdc
  • apps/nexus/content/docs/dev/components/dropdown-menu.zh.mdc
  • apps/nexus/content/docs/dev/components/flip-overlay.en.mdc
  • apps/nexus/content/docs/dev/components/flip-overlay.zh.mdc
  • apps/nexus/content/docs/dev/components/foundations.en.mdc
  • apps/nexus/content/docs/dev/components/foundations.zh.mdc
  • apps/nexus/content/docs/dev/components/modal.en.mdc
  • apps/nexus/content/docs/dev/components/modal.zh.mdc
  • apps/nexus/content/docs/dev/components/popover.en.mdc
  • apps/nexus/content/docs/dev/components/popover.zh.mdc
  • apps/nexus/content/docs/dev/components/search-select.en.mdc
  • apps/nexus/content/docs/dev/components/search-select.zh.mdc
  • apps/nexus/content/docs/dev/components/select.en.mdc
  • apps/nexus/content/docs/dev/components/select.zh.mdc
  • apps/nexus/content/docs/dev/components/stream-element.en.mdc
  • apps/nexus/content/docs/dev/components/stream-element.zh.mdc
  • apps/nexus/content/docs/dev/components/stream-text.en.mdc
  • apps/nexus/content/docs/dev/components/stream-text.zh.mdc
  • apps/nexus/content/docs/dev/components/theming.en.mdc
  • apps/nexus/content/docs/dev/components/theming.zh.mdc
  • apps/nexus/content/docs/dev/components/tooltip.en.mdc
  • apps/nexus/content/docs/dev/components/tooltip.zh.mdc
  • apps/nexus/content/docs/dev/concepts/compositor-and-replay.en.mdc
  • apps/nexus/content/docs/dev/concepts/compositor-and-replay.zh.mdc
  • apps/nexus/content/docs/dev/concepts/index.en.mdc
  • apps/nexus/content/docs/dev/concepts/index.zh.mdc
  • apps/nexus/content/docs/dev/concepts/irradiation-tuning.en.mdc
  • apps/nexus/content/docs/dev/concepts/irradiation-tuning.zh.mdc
  • apps/nexus/content/docs/dev/concepts/smart-wrapping.en.mdc
  • apps/nexus/content/docs/dev/concepts/smart-wrapping.zh.mdc
  • apps/nexus/content/docs/dev/concepts/stream-pacer.zh.mdc
  • apps/nexus/content/docs/dev/concepts/surface-deduction.en.mdc
  • apps/nexus/content/docs/dev/concepts/surface-deduction.zh.mdc
  • apps/nexus/content/docs/dev/concepts/surface-taxonomy.en.mdc
  • apps/nexus/content/docs/dev/concepts/surface-taxonomy.zh.mdc
  • apps/nexus/content/docs/dev/concepts/type-scale.en.mdc
  • apps/nexus/content/docs/dev/concepts/type-scale.zh.mdc
  • apps/nexus/content/docs/dev/index.zh.mdc
  • docs/design/README.md
  • docs/design/concepts/02-surfaces-and-materials.md
  • docs/design/concepts/03-color-science-and-dark-mode.md
  • docs/design/concepts/04-typography-and-text-engineering.md
  • docs/design/concepts/README.md
  • docs/engineering/specs/main-process/corebox-meta-overlay-contracts.md
  • packages/tuffex/CHANGELOG.md
  • packages/tuffex/packages/components/src/base-surface/src/TxBaseSurface.vue
  • packages/tuffex/packages/components/src/base-surface/src/style/index.scss
  • packages/tuffex/packages/components/src/base-surface/src/types.ts
  • packages/tuffex/packages/components/src/command-palette/src/TxCommandPalette.vue
  • packages/tuffex/packages/components/src/command-palette/src/types.ts
  • packages/tuffex/packages/components/src/dialog/index.ts
  • packages/tuffex/packages/components/src/dialog/src/TxBlowDialog.vue
  • packages/tuffex/packages/components/src/dialog/src/TxBottomDialog.vue
  • packages/tuffex/packages/components/src/dialog/src/TxPopperDialog.vue
  • packages/tuffex/packages/components/src/dialog/src/TxTouchTip.vue
  • packages/tuffex/packages/components/src/dialog/src/dialog-surface.ts
  • packages/tuffex/packages/components/src/dialog/src/types.ts
  • packages/tuffex/packages/components/src/drawer/src/TxDrawer.vue
  • packages/tuffex/packages/components/src/drawer/src/types.ts
  • packages/tuffex/packages/components/src/modal/src/TxModal.vue
  • packages/tuffex/packages/components/src/stream-element/src/TxStreamElement.vue
  • packages/tuffex/packages/components/src/stream-text/src/TxStreamText.vue
  • packages/tuffex/packages/components/style/index.scss

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Oct 17, 2026 •

Copy link
Copy Markdown

Deploying tuff with  Cloudflare Pages  Cloudflare Pages

Latest commit: 2c9ffa6
Status: ✅  Deploy successful!
Preview URL: https://115fd2b3.tuff-dso.pages.dev
Branch Preview URL: https://task-feat-refraction-surface.tuff-dso.pages.dev

View logs

9a8d8d7 added apps/nexus/.nuxt, a worktree's symlink to a local
checkout's build directory; `.nuxt/` in .gitignore matches directories
only. On CI it dangles, `nuxt prepare` cannot create the directory, and
every job that installs dependencies failed in that step.
…s fade

Under high contrast a host fades its surface whole, yet the fade it
hands the fake backdrop of a glass or filter surface still applied, so
the two opacities multiplied: at a frame where the content stood at
0.88, the solid base under it stood at 0.77. The backdrop is solid at
full strength there and now takes no animation of its own, which is
what TxModal's changelog entry already describes.
TxCommandPalette, TxPopperDialog, TxBlowDialog, TxBottomDialog and
TxTouchTip draw their panels with TxBaseSurface, refraction by default,
and take TxModal's surface, surfaceColor and surfaceOpacity; the
dialogs' set is exported as DialogSurfaceProps. The panels' own blur
and solid backgrounds go. Dims and rims move to pseudo-elements, and
the panels only move while their parts fade, so no ancestor becomes
the material's backdrop root and refraction samples the page through
every transition. Reduced motion keeps the fades and drops the travel,
and TxTouchTip's close, which had no transition, grows and fades over
220ms.

Nexus's GlobalSearch follows the palette onto the material and fades
its parts the same way. The dialog and command-palette pages, the
material lists in foundations, theming, the surface taxonomy and
design manual 02, and the changelog describe the change.

This branch has not been deployed

No deployments
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.

1 participant