Skip to content

feat(apollo-wind): polish field and inventory patterns - #1113

Merged
dbacomputer merged 1 commit into
mainfrom
codex/dropdown-combobox-inventory-polish
Sep 2, 2026
Merged

feat(apollo-wind): polish field and inventory patterns#1113
dbacomputer merged 1 commit into
mainfrom
codex/dropdown-combobox-inventory-polish

Conversation

@dbacomputer

@dbacomputer dbacomputer commented Sep 2, 2026

Copy link
Copy Markdown
Collaborator

Review scope

This PR is organized by component and pattern so each change can be reviewed independently:

  • Input

    • Add read-only, non-clickable input behavior and Storybook coverage.
  • Dropdown

    • Align field width and Future theme styling.
    • Keep inline validation consistent.
    • Remove the standalone More Actions example; More Actions now belongs with Lockable Value Field.
    • Preserve File Actions iconography and inline-validation error color for destructive actions.
  • Combobox

    • Use the single chevron treatment consistently with Select and other controls.
  • Lockable Value Field

    • Add optional More actions for Clear value and Force refresh.
    • Support hiding the leading lock when the pattern does not need it.
    • Keep custom leading/trailing addons composable.
    • Replace removal X icons with trash icons where the action is destructive.
  • File Upload

    • Align Future Light and Future Dark surfaces, borders, hover states, focus states, and typography with Flow fields.
  • Date Picker and DateTime Picker

    • Apply the unified Future field treatment used by Select and Combobox.
  • Button

    • Add the lightweight “+ Add field” action example.
    • Use one theme-aware example with the standard Storybook theme toolbar instead of side-by-side theme demos.
  • UI Inventory

    • Make tabs and sections deep-linkable.
    • Add copy-link controls for direct section URLs.
    • Keep examples aligned with the smaller toggle switch.
  • Flow theme regression

    • Scope Future-only overlay surfaces so classic Light, Dark, and High Contrast themes retain their existing input colors.
    • Verify DAP dropdown, value fields, and rich text/editor surfaces do not pick up Future overlays in classic themes.

Verification

  • Focused Apollo Wind tests: 176 passed.
  • Biome checks passed.
  • git diff --check passed.
  • Local Storybook preview: http://localhost:6007/
Screenshot 2026-09-02 at 8 59 26 AM Screenshot 2026-09-02 at 9 00 04 AM

Copilot AI lite review requested due to automatic review settings September 2, 2026 15:57
@github-actions

github-actions Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Apollo Coded App preview deployments are ready.

Project Status Preview Updated (PT)
apollo-design Ready Preview · Logs Sep 02, 2026, 12:22:23 PM
apollo-docs Ready Preview · Logs Sep 02, 2026, 12:22:23 PM
apollo-landing Ready Preview · Logs Sep 02, 2026, 12:22:23 PM
apollo-vertex Ready Preview · Logs Sep 02, 2026, 12:22:23 PM

@github-actions github-actions Bot added the size:XL 500-999 changed lines. label Sep 2, 2026
@github-actions

github-actions Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Dependency License Review

  • 1951 package(s) scanned
  • ✅ No license issues found
  • ⚠️ 2 package(s) excluded (see details below)
License distribution
License Packages
MIT 1722
ISC 88
Apache-2.0 55
BSD-3-Clause 27
BSD-2-Clause 23
BlueOak-1.0.0 8
MPL-2.0 4
MIT-0 3
CC0-1.0 3
MIT OR Apache-2.0 2
(MIT OR Apache-2.0) 2
Unlicense 2
LGPL-3.0-or-later 1
Python-2.0 1
CC-BY-4.0 1
(MPL-2.0 OR Apache-2.0) 1
Unknown 1
Artistic-2.0 1
(WTFPL OR MIT) 1
(BSD-2-Clause OR MIT OR Apache-2.0) 1
CC-BY-3.0 1
0BSD 1
(MIT OR CC0-1.0) 1
MIT AND ISC 1
Excluded packages
Package Version License Reason
@img/sharp-libvips-linux-x64 1.3.2 LGPL-3.0-or-later LGPL pre-built binary, not linked
khroma 2.1.0 Unknown MIT per GitHub repo, missing license field in package.json

Copilot AI 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.

🟡 Changes recommended

A few newly introduced behaviors have concrete API/UX/a11y issues (e.g., showLock suppressing custom leading addons, clickable menu items without handlers, and removed focus-visible ring on read-only inputs) that should be corrected before approval.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Pull request overview

This PR updates Apollo UI field/input interaction patterns and Storybook examples, primarily in @uipath/apollo-wind, and extends apollo-react canvas stories to showcase the refreshed patterns (including deep-linkable UI Inventory sections).

Changes:

  • Extend LockableValueField with configurable lock visibility, optional AI-assist visibility, and an optional “More actions” overflow menu.
  • Refine input and dropdown styling/behavior (read-only treatment, Future theme field trigger sizing, destructive menu item color), and update component stories accordingly.
  • Add deep-linking + copy-link behavior for UI Inventory tabs/sections in the apollo-react NodePropertyPanel Storybook story.
File summaries
File Description
packages/apollo-wind/src/index.ts Re-export newly added LockableValueField type.
packages/apollo-wind/src/components/ui/lockable-value-field/types.ts Add showLock, showAiAssist, and more props/types for LockableValueField.
packages/apollo-wind/src/components/ui/lockable-value-field/lockable-value-field.tsx Implement “More actions” menu and new visibility props; adjust locked rendering path to use InputGroup.
packages/apollo-wind/src/components/ui/lockable-value-field/lockable-value-field.test.tsx Add tests for showLock, showAiAssist, and “More actions” rendering.
packages/apollo-wind/src/components/ui/lockable-value-field/lockable-value-field.stories.tsx Add a new Storybook demo showcasing “More actions”.
packages/apollo-wind/src/components/ui/lockable-value-field/index.ts Export LockableValueFieldMoreActions type from the component entrypoint.
packages/apollo-wind/src/components/ui/lockable-value-field/components/field-header.tsx Gate the AI-assist UI via new showAiAssist prop (while keeping other field actions).
packages/apollo-wind/src/components/ui/input.tsx Update Input styling for read-only state behavior.
packages/apollo-wind/src/components/ui/input.stories.tsx Add a read-only Input story and guidance copy.
packages/apollo-wind/src/components/ui/dropdown-menu.tsx Adjust Future theme field trigger sizing.
packages/apollo-wind/src/components/ui/dropdown-menu.stories.tsx Add “more actions” example and update destructive menu item color token usage.
packages/apollo-wind/src/components/ui/combobox.tsx Update combobox trigger icon.
packages/apollo-wind/src/components/ui/combobox.stories.tsx Update combobox stories to match the new icon.
packages/apollo-wind/src/components/ui/button.stories.tsx Add a Button catalog example for a lightweight “+ Add field” link action.
packages/apollo-react/src/canvas/stories/templates/Flow.stories.tsx Update DAP connection field to use LockableValueField and “More actions” behavior.
packages/apollo-react/src/canvas/components/NodePropertyPanel/NodePropertyPanel.stories.tsx Add deep-linking and copy-link controls for UI Inventory tabs/sections; swap removal icons to trash icons in several spots.
Review details

Suppressed comments (2)

packages/apollo-wind/src/components/ui/lockable-value-field/lockable-value-field.tsx:161

  • showLock currently gates the entire leading addon region (showLock && leadingAddon !== null), so consumers cannot hide the built-in lock toggle while still rendering a custom leadingAddon. This contradicts the prop doc (“built-in lock control”) and breaks the existing leadingAddon override semantics.

This issue also appears on line 318 of the same file.

          {showLock && leadingAddon !== null && (
            <InputGroupAddon align="inline-start">
              {leadingAddon !== undefined ? (
                leadingAddon
              ) : (

packages/apollo-wind/src/components/ui/lockable-value-field/lockable-value-field.tsx:322

  • Same issue in the non-expression branch: showLock currently suppresses any custom leadingAddon content because it gates the whole addon wrapper. showLock should only control the default lock toggle, not consumer-provided addons.
          {showLock && leadingAddon !== null && (
            <InputGroupAddon align="inline-start">
              {leadingAddon !== undefined ? (
                leadingAddon
              ) : (
  • Files reviewed: 16/16 changed files
  • Comments generated: 3
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread packages/apollo-wind/src/components/ui/input.tsx Outdated
Copilot AI review requested due to automatic review settings September 2, 2026 16:08
@dbacomputer

Copy link
Copy Markdown
Collaborator Author

Addressed the review feedback in commit cf48bc8a:

  • showLock={false} now hides only the built-in lock toggle while preserving custom leadingAddon content in both rendering branches.
  • Dropdown More Actions now has working Clear value and Force refresh handlers with accessible status feedback.
  • Read-only inputs retain keyboard-visible focus indication.
  • Added regression coverage for custom leading addons with the lock hidden.

Validation: 1,437 tests passed; focused Biome and diff checks passed.

@github-actions

github-actions Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

📊 Coverage + size by package

Per-package coverage and bundle size on this PR. New-line coverage = of the source lines this PR adds or changes, the % hit by tests.

Package Coverage New-line coverage Packed (gzip) Unpacked vs main
@uipath/apollo-core 41.59 MB 49.70 MB ±0
@uipath/apollo-react 39.7% 0.0% (0/48) 7.56 MB 29.11 MB +2 B
@uipath/apollo-ui-icons 2.85 MB 6.91 MB ±0
@uipath/apollo-wind 65.0% 80.0% (8/10) 429.2 KB 2.76 MB +1014 B
@uipath/ap-chat 85.8% 43.46 MB 56.09 MB ±0

"Coverage" is each package's own coverage.include scope (e.g. apollo-core instruments only scripts/). "Packed"/"Unpacked" come from npm pack --dry-run and only cover built packages — "—" means not measured this run (package not affected / not built). "vs main" is the packed (gzipped) delta against the last successful main build (the package-sizes artifact from the Release workflow); "—" there means no main baseline was available this run. The baseline is main's latest build, not this PR's exact merge-base, so it includes any drift since the branch diverged. Packages with no vitest config are omitted.

Copilot AI 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.

🟡 Changes recommended

The new deep-link/copy-link and “More actions” implementations have a couple of concrete edge-case bugs (unhandled clipboard failures, hash parsing robustness, and More actions respecting optional handlers/locked state) that should be addressed before approval.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Review details

Suppressed comments (4)

Previously missed (1) — in code that hasn't changed since the last review.

packages/apollo-react/src/canvas/components/NodePropertyPanel/NodePropertyPanel.stories.tsx:3871

  • syncFromHash uses decodeURIComponent and then blindly applies the parsed tab value. A malformed percent-encoding can throw, and an unknown tab hash can leave Tabs in an invalid state (no content). Guard against decode errors and validate the tab before updating state.

packages/apollo-wind/src/components/ui/lockable-value-field/lockable-value-field.tsx:46

  • LockableValueFieldMoreActions marks onClear/onRefresh as optional, but MoreActionsMenu always renders both items and wires them directly. This can produce menu items that do nothing, and it also lets "Clear value" run even when the field is locked (read-only), which contradicts the component’s locked/read-only behavior.
function MoreActionsMenu({ more }: { more: LockableValueFieldMoreActions }) {
  return (
    <DropdownMenu>
      <DropdownMenuTrigger asChild>
        <InputGroupButton icon size="3xs" aria-label="More value actions">

packages/apollo-wind/src/components/ui/lockable-value-field/lockable-value-field.tsx:382

  • Same as above: the non-expression branch renders MoreActionsMenu without passing whether the field is locked, so "Clear value" can still be offered in a read-only state.
          {more && (
            <InputGroupAddon align="inline-end" className="cursor-default">
              <MoreActionsMenu more={more} />
            </InputGroupAddon>

packages/apollo-react/src/canvas/components/NodePropertyPanel/NodePropertyPanel.stories.tsx:3545

  • navigator.clipboard.writeText can throw (permission denied, insecure context, missing API), which would create an unhandled promise rejection in Storybook. The copy-link helper should handle failures gracefully.
  const copyLink = async () => {
    if (!linkTarget) return;
    const url = new URL(window.location.href);
    url.hash = `ui-inventory/${linkTarget}`;
    window.history.replaceState(null, '', url);
    await navigator.clipboard.writeText(url.toString());
    setCopied(true);
  • Files reviewed: 16/16 changed files
  • Comments generated: 1
  • Review effort level: Lite

Copilot AI review requested due to automatic review settings September 2, 2026 16:15

Copilot AI 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.

🟡 Changes recommended

A few accessibility/UX regressions were introduced in Storybook patterns (read-only fields removed from tab order) and minor ARIA/cursor inconsistencies should be addressed before approval.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Review details

Suppressed comments (2)

Previously missed (2) — in code that hasn't changed since the last review.

packages/apollo-wind/src/components/ui/input.stories.tsx:92

  • The ReadOnly Input story sets tabIndex: -1, which removes the control from keyboard navigation. For a read-only field this makes it harder for keyboard and assistive-technology users to discover and copy the value; keeping the default tab order is typically preferable.
    packages/apollo-wind/src/components/ui/lockable-value-field/lockable-value-field.tsx:351
  • InputGroupInput already derives aria-invalid, aria-describedby, and aria-errormessage from the surrounding InputGroup's error/errorId context. Passing those props here can duplicate the error id in aria-describedby and makes the attributes easier to get out of sync; it should be enough to rely on InputGroupInput's built-in wiring.
  • Files reviewed: 16/16 changed files
  • Comments generated: 3
  • Review effort level: Lite

@dbacomputer

Copy link
Copy Markdown
Collaborator Author

Resolved the remaining review findings in commit 8c31f12c:

  • Guarded inventory hash decoding and validated supported tabs.
  • Handled clipboard API failures without unhandled rejections.
  • More actions now render only when handlers are available, and Clear value is unavailable while locked.
  • Added regression coverage for optional/locked More actions.

Validation: 1,439 tests passed; Biome and diff checks passed. New CI checks are running.

Copilot AI review requested due to automatic review settings September 2, 2026 16:25
@dbacomputer

Copy link
Copy Markdown
Collaborator Author

Resolved the latest accessibility review findings in commit 7697446b:

  • Restored read-only inputs to the default keyboard tab order in the stories and UI Inventory examples.
  • Removed duplicated error ARIA attributes from the locked InputGroupInput; the surrounding InputGroup now remains the single source of that wiring.

Validation: 1,439 tests passed; Biome and diff checks passed.

Copilot AI 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.

🔵 Needs a closer look

The UI Inventory hash-sync currently auto-expands Accordion state for any section hash (including non-Accordion targets), which can desync the controlled Accordion value from its actual item set.

Review details

Suppressed comments (2)

Previously missed (2) — in code that hasn't changed since the last review.

packages/apollo-react/src/canvas/components/NodePropertyPanel/NodePropertyPanel.stories.tsx:3881

  • syncFromHash adds any section to expandedSections, including non-accordion targets like flat-content, which can desync the Accordion controlled value from its actual item list. Restrict the auto-expand behavior to known Accordion sections only.
    packages/apollo-wind/src/components/ui/lockable-value-field/types.ts:139
  • The more prop doc says the overflow menu is beside the fixed/expression control, but the component also renders it for field types that don't support expressions (where no mode control exists). Updating the comment will prevent confusion for consumers.
  • Files reviewed: 16/16 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

Copilot AI review requested due to automatic review settings September 2, 2026 16:31

Copilot AI 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.

🔵 Needs a closer look

A few new Storybook usages introduce accessibility and lifecycle issues (custom labels missing htmlFor/id association and an uncleared timeout that can update state after unmount).

Review details

Suppressed comments (3)

Previously missed (3) — in code that hasn't changed since the last review.

packages/apollo-react/src/canvas/components/NodePropertyPanel/NodePropertyPanel.stories.tsx:3552

  • copyLink schedules setCopied(false) via setTimeout without any cleanup, which can trigger a state update after the story unmounts (e.g., when switching stories/tabs quickly) and cause React warnings. Consider moving the timeout into an effect that cleans up on unmount / when copied changes.
    packages/apollo-react/src/canvas/stories/templates/Flow.stories.tsx:3860
  • The custom label ReactNode passed to LockableValueField is rendered as-is, so omitting htmlFor on the <Label> breaks label-to-control association for screen readers. Add htmlFor that matches the id you pass to the field.
    packages/apollo-wind/src/components/ui/lockable-value-field/lockable-value-field.stories.tsx:127
  • In this story the label is a custom ReactNode and is rendered as-is by FieldHeader, so without an id + matching htmlFor the label isn't associated with the control. Add an id and pass htmlFor on the <Label> (matching the pattern used in DefaultDemo).
  • Files reviewed: 16/16 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

@dbacomputer

Copy link
Copy Markdown
Collaborator Author

Resolved the latest review findings in commit 5a2a920c:

  • UI Inventory deep-link initialization now expands only known Layout accordion items, avoiding non-Accordion targets such as flat-content.
  • Clarified the more prop documentation to cover all value controls, including non-expression fields.

Validation: 1,439 tests passed; Biome and diff checks passed.

Copilot AI review requested due to automatic review settings September 2, 2026 16:44
@dbacomputer

Copy link
Copy Markdown
Collaborator Author

Resolved the latest review findings in commit 25bea3a2:

  • Added cleanup for the UI Inventory copy-link feedback timeout.
  • Associated the DAP Connection and Lockable Value Field More Actions labels with their controls via matching htmlFor/id.

Validation: 1,439 tests passed; Biome and diff checks passed.

Copilot AI 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.

🟡 Changes recommended

The new “Clear value” more-actions UI still uses an X icon (and missing destructive styling in one spot), which conflicts with the PR’s stated iconography and destructive-action color patterns.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Review details

Suppressed comments (3)

Previously missed (1) — in code that hasn't changed since the last review.

packages/apollo-wind/src/components/ui/dropdown-menu.stories.tsx:24

  • After switching the Clear value action to use Trash2, the X icon import becomes unused and should be removed to avoid lint/typecheck failures.

This issue also appears on line 129 of the same file.

packages/apollo-wind/src/components/ui/dropdown-menu.stories.tsx:131

  • In the new “Dropdown with more actions” example, the Clear value action still uses the X icon and default text styling. The PR description calls for using trash icons for removal-style actions and the inline-validation error color for destructive menu actions; this example should match that pattern.
              <X />
              Clear value
            </DropdownMenuItem>

packages/apollo-wind/src/components/ui/lockable-value-field/lockable-value-field.tsx:65

  • The new LockableValueField more-actions “Clear value” entry still uses the X icon. The PR description says removal-style X icons should be replaced with trash icons, so this should use Trash2 (and update the lucide-react import accordingly).
            <X />
            Clear value
  • Files reviewed: 16/16 changed files
  • Comments generated: 1
  • Review effort level: Lite

Copilot AI review requested due to automatic review settings September 2, 2026 16:54
@dbacomputer

Copy link
Copy Markdown
Collaborator Author

Resolved the latest iconography review finding in commit fa88b270:

  • Changed every “Clear value” menu action to use Trash2.
  • Applied the inline-validation text-error styling to the destructive Clear action in both the reusable Lockable Value Field menu and standalone Dropdown story.
  • Removed the unused X import.

Validation: 1,439 tests passed; Biome and diff checks passed.

Copilot AI 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.

🔵 Needs a closer look

DropdownMenuTrigger’s new future:w-fit field styling can unexpectedly override consumer width expectations in Future theme and should be adjusted before merging.

Review details

Suppressed comments (1)

Previously missed (1) — in code that hasn't changed since the last review.

packages/apollo-wind/src/components/ui/dropdown-menu.tsx:50

  • future:w-fit on the field styling makes the trigger shrink-to-content in Future theme even when consumers pass w-full (they would need a future:w-full override). Since field implies form-control behavior, this width override is surprising and can break full-width layouts.
  • Files reviewed: 16/16 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

Copilot AI review requested due to automatic review settings September 2, 2026 17:02
@dbacomputer

Copy link
Copy Markdown
Collaborator Author

Resolved the latest Dropdown review finding in commit bab0766f:

  • Removed the shared future:w-fit override from DropdownMenuTrigger field styling so consumer widths such as w-full remain respected.
  • Existing intrinsic-width examples continue to size naturally through their local button content.

Validation: 1,439 tests passed; Biome and diff checks passed.

Copilot AI 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.

🟢 Approval recommended

The new props/behaviors are implemented consistently, covered by targeted tests, and the remaining changes are Storybook/demo-focused with low risk to runtime consumers.

Review details
  • Files reviewed: 15/15 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

@github-actions

github-actions Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Storybook visual diff

⚠️ Visual changes detected: 33 changed, 3 added (of 441 compared, 405 unchanged). View report

Baseline is the deployed main Storybook, so changes merged to main after this branch was last updated can also appear here. Logs

Updated (PT): Sep 02, 2026, 12:37:39 PM

Copilot AI review requested due to automatic review settings September 2, 2026 17:38

Copilot AI 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.

🟢 Approval recommended

Changes are cohesive UI/demo refinements with added component capabilities and accompanying unit test coverage for the new LockableValueField behaviors.

Review details
  • Files reviewed: 15/15 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

Copilot AI review requested due to automatic review settings September 2, 2026 18:06

Copilot AI 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.

🟢 Approval recommended

The changes are cohesive, include test coverage for the new LockableValueField behaviors, and appear consistent with existing component patterns and Storybook usage.

Review details
  • Files reviewed: 15/15 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

Copilot AI review requested due to automatic review settings September 2, 2026 18:11

Copilot AI 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.

🔵 Needs a closer look

InputGroup integration for embedded controls is incomplete (notably focus-ring ownership for Select/MultiSelect), which can cause inconsistent or incomplete keyboard focus indication around grouped controls.

Review details

Suppressed comments (2)

Previously missed (1) — in code that hasn't changed since the last review.

packages/apollo-wind/src/components/ui/lockable-value-field/lockable-value-field.tsx:363

  • When embedding SelectTrigger inside InputGroup, it should be treated as the group “control” so the wrapper can render the unified focus ring. InputGroup’s focus styling keys off data-slot="input-group-control" (see input-group.tsx:47/170), but SelectTrigger here doesn’t set it, so focus styling won’t be consistent with other InputGroup controls and the trigger may draw its own ring independently.

This issue also appears on line 375 of the same file.

              <SelectTrigger
                id={fieldId}
                className="min-w-0 flex-1 rounded-none border-0 bg-transparent px-0 shadow-none future:rounded-none future:border-0 future:bg-transparent future:px-0"
                aria-invalid={error ? true : undefined}
                aria-describedby={error ? validationId : undefined}
                aria-errormessage={error ? validationId : undefined}
              >

packages/apollo-wind/src/components/ui/lockable-value-field/lockable-value-field.tsx:387

  • MultiSelect is now rendered inside an InputGroup, but its internal trigger button isn’t marked with data-slot="input-group-control", so the InputGroup wrapper can’t apply the unified focus ring/disabled styling (input-group.tsx:47/52). This can leave the right-side addons outside the visible focus indicator during keyboard navigation.
            <MultiSelect
              id={fieldId}
              className="min-w-0 flex-1"
              options={options}
              selected={parseListValue(value)}
              onChange={(selected) => onValueChange?.(JSON.stringify(selected))}
              placeholder="Select options..."
              disabled={!onValueChange}
              onBlur={onValueBlur}
              aria-invalid={error ? true : undefined}
              aria-describedby={error ? validationId : undefined}
              aria-errormessage={error ? validationId : undefined}
            />
  • Files reviewed: 18/18 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

Copilot AI review requested due to automatic review settings September 2, 2026 18:26

Copilot AI 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.

🟢 Approval recommended

The changes are additive, well-covered by updated tests/stories, and align the UI patterns consistently without introducing verified functional or API regressions.

Review details
  • Files reviewed: 19/19 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

Copilot AI review requested due to automatic review settings September 2, 2026 18:29
@dbacomputer
dbacomputer enabled auto-merge (rebase) September 2, 2026 18:31

Copilot AI 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.

🟢 Approval recommended

The changes are internally consistent, covered by targeted tests for the new LockableValueField behaviors, and the Storybook-only deep-linking additions are scoped to client-side effects.

Review details
  • Files reviewed: 19/19 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

@dbacomputer
dbacomputer force-pushed the codex/dropdown-combobox-inventory-polish branch from b7329e6 to 455f130 Compare September 2, 2026 19:16
@dbacomputer
dbacomputer merged commit 6e31fb1 into main Sep 2, 2026
44 checks passed
@dbacomputer
dbacomputer deleted the codex/dropdown-combobox-inventory-polish branch September 2, 2026 20:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants