From 6d9c8321c4ab5c0cfa517494269f99114fb02079 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 23 Aug 2026 07:51:39 +0000 Subject: [PATCH] retire(components): remove the second ActionParamDialog; app-shell's survives (#5685) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Maintainer ruling of 2026-08-22 (issue #5685, option A): retire the `@object-ui/components` `ActionParamDialog` published export. Measured at the branch point it had zero production consumers — its only in-repo importers were its own five test files, and no other repo in the org imports the symbol from this package. The app-shell dialog (`packages/app-shell/src/views/ ActionParamDialog.tsx`) is the surviving implementation and is untouched. - delete `packages/components/src/custom/action-param-dialog.tsx` and its five `__tests__/action-param-dialog-*.test.tsx` files - drop the `custom` barrel's `export * from './action-param-dialog'` - withdraw the unreleased objectui#4758 changeset for this component (the fix retires before it ever ships) - unlist the deleted file from `config-panel-renderer.tsx`'s measured createSafeTranslation site list - changeset: `@object-ui/components` minor, breaking semantics and migration terms in the body (never `major`, per the version-alignment rule) The five-string i18n rebind this card originally asked for dies with the retirement, per the same ruling. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01EuPCi56cnGyykygi3z9w4m --- ...on-param-dialog-option-visiblewhen-4758.md | 26 -- ...ire-components-action-param-dialog-5685.md | 39 ++ ...action-param-dialog-aria-required.test.tsx | 136 ------ ...on-param-dialog-label-association.test.tsx | 128 ------ ...-param-dialog-option-visible-when.test.tsx | 265 ----------- ...am-dialog-select-placeholder-i18n.test.tsx | 105 ----- ...og-select-placeholder-no-provider.test.tsx | 110 ----- .../src/custom/action-param-dialog.tsx | 430 ------------------ .../src/custom/config-panel-renderer.tsx | 2 +- packages/components/src/custom/index.ts | 1 - 10 files changed, 40 insertions(+), 1202 deletions(-) delete mode 100644 .changeset/action-param-dialog-option-visiblewhen-4758.md create mode 100644 .changeset/retire-components-action-param-dialog-5685.md delete mode 100644 packages/components/src/__tests__/action-param-dialog-aria-required.test.tsx delete mode 100644 packages/components/src/__tests__/action-param-dialog-label-association.test.tsx delete mode 100644 packages/components/src/__tests__/action-param-dialog-option-visible-when.test.tsx delete mode 100644 packages/components/src/__tests__/action-param-dialog-select-placeholder-i18n.test.tsx delete mode 100644 packages/components/src/__tests__/action-param-dialog-select-placeholder-no-provider.test.tsx delete mode 100644 packages/components/src/custom/action-param-dialog.tsx diff --git a/.changeset/action-param-dialog-option-visiblewhen-4758.md b/.changeset/action-param-dialog-option-visiblewhen-4758.md deleted file mode 100644 index c0335d9f7b..0000000000 --- a/.changeset/action-param-dialog-option-visiblewhen-4758.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -'@object-ui/components': patch ---- - -`ActionParamDialog` (the `custom` barrel's published dialog) now resolves each -`select` param's options through `@object-ui/core`'s shared option evaluator, so a -per-option `visibleWhen` narrows the offered list here exactly as it does on the -app-shell action dialog and in the object form (objectui#4758). - -This surface is the repo's second action-param dialog, and its `select` branch -rendered `param.options?.map(...)` straight into Radix items. A per-option -`visibleWhen` was not evaluated wrongly — it was not evaluated at all, so an option -gated on `record.*` (a sibling param) or on `current_user.*` was offered -unconditionally, while the app-shell dialog filtered the identical field metadata. -Triage ruled the governed side authoritative; the dialog rebinds to -`resolveVisibleOptions`, resolving predicates against the dialog's own in-progress -values (the objectui#3765 Option B ruling) plus the ambient predicate scope. - -Rebind, not removal: the component stays a published export, its props and every -other branch are untouched, and retiring it remains a separate decision. - -A selection the predicate stops offering is now cleared rather than kept as a hidden -value — the same `isValueStillOffered` clear `SelectField` already performs. Without -it, filtering alone would let a picked-then-gated-out option vanish from the trigger -while still riding in the submitted payload. Params whose options declare no -predicate are untouched. diff --git a/.changeset/retire-components-action-param-dialog-5685.md b/.changeset/retire-components-action-param-dialog-5685.md new file mode 100644 index 0000000000..803fed5351 --- /dev/null +++ b/.changeset/retire-components-action-param-dialog-5685.md @@ -0,0 +1,39 @@ +--- +'@object-ui/components': minor +--- + +Retire `ActionParamDialog`: the `custom` barrel's second action-param dialog is +removed, and the app-shell dialog is recorded as the surviving implementation +(objectui#5685, maintainer ruling of 2026-08-22). + +**Breaking for any out-of-repo host that imported it** (declared `minor` per the +repo's version-alignment rule — the major tracks `@objectstack`, never an +API-break count): `@object-ui/components` no longer exports `ActionParamDialog` +or `ActionParamDialogProps`. Measured at the branch point, the export had zero +production consumers — its only in-repo importers were its own five test files, +which retire with it, and no other repository in the organization imports the +symbol from this package. + +This file was the repo's SECOND implementation of the action-param surface, and +its audit trail is the reason it retires instead of being maintained: the last +close look (objectui#4758) found per-option `visibleWhen` not evaluated at all, +and the five hardcoded English strings this card originally recorded were the +next drift installment. A dormant second dialect of a governed surface is one +production import away from being live; removing it removes the whole drift +class. + +FROM → TO for an out-of-repo host: + +- `import { ActionParamDialog } from '@object-ui/components'` — no drop-in + replacement is published. The surviving implementation is + `@object-ui/app-shell`'s `ActionParamDialog` (`src/views/ActionParamDialog.tsx`), + rendered by app-shell's action runtime (`useConsoleActionRuntime`, + `RecordDetailView`) rather than exported standalone. A host that needs its own + param form builds on `@object-ui/fields`' shared field widgets + (`resolveFormWidgetType` / `getLazyFieldWidget`, ADR-0059) — the same seam the + surviving dialog renders through. + +The unreleased objectui#4758 changeset for this component (`select` options +through the shared option evaluator) is withdrawn in the same change: the +component retires before that fix ever ships, so the release notes carry the +removal rather than new behaviour of a surface this release does not contain. diff --git a/packages/components/src/__tests__/action-param-dialog-aria-required.test.tsx b/packages/components/src/__tests__/action-param-dialog-aria-required.test.tsx deleted file mode 100644 index 2ecaa75be0..0000000000 --- a/packages/components/src/__tests__/action-param-dialog-aria-required.test.tsx +++ /dev/null @@ -1,136 +0,0 @@ -/** - * ObjectUI - * Copyright (c) 2024-present ObjectStack Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -/** - * ActionParamDialog (components/custom) — required must reach each CONTROL as - * a state, not sit in the label as a bare `*` (objectui#3299; same shape as - * #3290/#3298). - * - * Pre-fix, the five typed branches (textarea / number / select / date / text) - * each drew `*` inside `