Skip to content

fixes model selector#1219

Merged
akshaydeo merged 1 commit intomainfrom
01-02-fixes_model_selected._closes_1182
Jan 2, 2026
Merged

fixes model selector#1219
akshaydeo merged 1 commit intomainfrom
01-02-fixes_model_selected._closes_1182

Conversation

@akshaydeo
Copy link
Contributor

@akshaydeo akshaydeo commented Jan 2, 2026

Fix AsyncMultiSelect and Sheet component interaction issues

Summary

Fixed interaction issues between AsyncMultiSelect components and Sheet modals by improving event handling for dropdown menus and preventing premature menu closing.

Closes #1182
Closes #1209

Changes

  • Enhanced Sheet component to detect and handle interactions with portaled elements like dropdown menus
  • Added logic to prevent Sheet from closing when users interact with dropdown options
  • Fixed VirtualKeySheet layout and padding for better UI consistency
  • Updated AsyncMultiSelect to use fixed positioning for menus by default
  • Improved ModelMultiselect to handle empty defaultOptions properly
  • Removed unnecessary portalTarget prop from AsyncMultiSelect

Type of change

  • Bug fix
  • Feature
  • Refactor
  • Documentation
  • Chore/CI

Affected areas

  • Core (Go)
  • Transports (HTTP)
  • Providers/Integrations
  • Plugins
  • UI (Next.js)
  • Docs

How to test

  1. Open the VirtualKeySheet component
  2. Test dropdown menus inside the sheet
  3. Verify that clicking on dropdown options doesn't cause the sheet to close
  4. Check that dropdown menus appear correctly positioned and don't get cut off
  5. Confirm that model selection works properly with both empty and populated option lists

Breaking changes

  • Yes
  • No

Related issues

Fixes dropdown menu interaction issues in modals and sheets

Security considerations

No security implications.

Checklist

  • I read docs/contributing/README.md and followed the guidelines
  • I added/updated tests where appropriate
  • I updated documentation where needed
  • I verified builds succeed (Go and UI)
  • I verified the CI pipeline passes locally if applicable

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 2, 2026

Caution

Review failed

The pull request is closed.

📝 Walkthrough

Summary by CodeRabbit

  • Bug Fixes

    • Improved dropdown menu and modal interactions to prevent unintended closures when interacting with external elements
  • Documentation

    • Enhanced adaptive load balancing documentation with clearer capability descriptions and emphasis on self-healing design
  • Improvements

    • Minor UI layout spacing refinements for improved visual consistency
  • Chores

    • Version updates across core, framework, and plugin packages

✏️ Tip: You can customize this high-level summary in your review settings.

Walkthrough

Removes a portalTarget prop and menu portal styling from AsyncMultiSelect, changes ModelMultiselect defaultOptions handling, adds portal-aware outside-interaction handlers to SheetContent, adds version/changelog bumps across packages, and introduces explicit transport-version validation in npx/bin.js.

Changes

Cohort / File(s) Summary
AsyncMultiSelect
ui/components/ui/asyncMultiselect.tsx
Removes portalTarget?: HTMLElement from props and all usage; removes menuPortal styling entry; ensures menuPosition defaults to "fixed" when unset.
ModelMultiselect
ui/components/ui/modelMultiselect.tsx
Passes defaultOptions.length > 0 ? defaultOptions : true into AsyncMultiSelect instead of potentially passing an empty array.
Sheet portal-awareness
ui/components/ui/sheet.tsx
Adds isPortaledElement detection and two optional props onPointerDownOutside?: (e:any)=>void and onInteractOutside?: (e:any)=>void; implements handlers that prevent closing when outside interactions originate from portal-like elements.
npx CLI
npx/bin.js, npx/package.json
Adds async function checkVersionExists(...) and validates explicit VERSION values against server (exit if missing); bumps package version in npx/package.json.
Version & Changelogs
core/version, framework/version, framework/changelog.md, plugins/*/version, plugins/*/changelog.md, transports/version, transports/changelog.md
Multiple package version increments and added/updated changelog entries (core → 1.2.46, framework → 1.1.57, plugin/version bumps).
UI layout tweak
ui/app/workspace/virtual-keys/views/virtualKeySheet.tsx
Minor spacing/layout class adjustments (padding changes) with no API changes.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant AsyncMultiSelect
    participant MenuPortal as "Menu (portaled)"
    participant SheetContent

    User->>AsyncMultiSelect: focus / type
    AsyncMultiSelect->>MenuPortal: render menu into portal (document.body)
    Note right of MenuPortal: Menu is rendered outside component tree

    User->>MenuPortal: pointerdown on menu item
    MenuPortal->>AsyncMultiSelect: pointerdown event (bubbled)
    AsyncMultiSelect->>AsyncMultiSelect: set isInteractingWithMenuRef = true

    User->>MenuPortal: pointerup on menu item
    MenuPortal->>AsyncMultiSelect: pointerup event
    AsyncMultiSelect->>AsyncMultiSelect: schedule flag reset (short timeout)

    User->>AsyncMultiSelect: blur event
    alt isInteractingWithMenuRef == true
        AsyncMultiSelect->>AsyncMultiSelect: ignore blur (keep menu open)
    else
        AsyncMultiSelect->>AsyncMultiSelect: handle blur (close menu)
    end

    User->>SheetContent: pointerdown outside (target = portaled element)
    SheetContent->>SheetContent: isPortaledElement? → true
    SheetContent-->>User: prevent default / skip outside-close
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Poem

🐰 I hop between the floated panes,
Guarding clicks where portal reigns,
Menus stay while I nibble slow,
Sheets now know where outside goes,
A tiny rabbit claims: it works — whoo-hoo!

Pre-merge checks and finishing touches

❌ Failed checks (1 warning, 2 inconclusive)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
Title check ❓ Inconclusive The title 'fixes model selector' is vague and does not clearly convey the specific changes made to address the dropdown menu interaction issues described in the PR. Use a more descriptive title such as 'Fix AsyncMultiSelect menu closing on blur and z-index stacking issues' to better reflect the actual changes.
Out of Scope Changes check ❓ Inconclusive Most changes are in-scope, but the PR includes version bumps and changelog entries across multiple packages that appear to be housekeeping rather than directly addressing the bug fix objectives of issue #1182. Clarify whether the version bumps and changelog updates across core, framework, and all plugins are necessary for this fix or should be separated into a dedicated chore PR.
✅ Passed checks (2 passed)
Check name Status Explanation
Description check ✅ Passed The PR description is mostly complete with all major sections filled out, including summary, changes, testing instructions, and issue links, though some technical details could be more explicit.
Linked Issues check ✅ Passed The PR addresses the core objective of #1182: fixing the models quick-search functionality when models are already selected by preventing premature menu closure through pointer interaction tracking and blur handling improvements.

📜 Recent review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 9fe2245 and 2126414.

📒 Files selected for processing (28)
  • core/version
  • docs/enterprise/adaptive-load-balancing.mdx
  • framework/changelog.md
  • framework/version
  • npx/bin.js
  • npx/package.json
  • plugins/governance/changelog.md
  • plugins/governance/version
  • plugins/jsonparser/changelog.md
  • plugins/jsonparser/version
  • plugins/logging/changelog.md
  • plugins/logging/version
  • plugins/maxim/changelog.md
  • plugins/maxim/version
  • plugins/mocker/changelog.md
  • plugins/mocker/version
  • plugins/otel/changelog.md
  • plugins/otel/version
  • plugins/semanticcache/changelog.md
  • plugins/semanticcache/version
  • plugins/telemetry/changelog.md
  • plugins/telemetry/version
  • transports/changelog.md
  • transports/version
  • ui/app/workspace/virtual-keys/views/virtualKeySheet.tsx
  • ui/components/ui/asyncMultiselect.tsx
  • ui/components/ui/modelMultiselect.tsx
  • ui/components/ui/sheet.tsx

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

Copy link
Contributor Author

This stack of pull requests is managed by Graphite. Learn more about stacking.

@github-actions
Copy link
Contributor

github-actions bot commented Jan 2, 2026

🧪 Test Suite Available

This PR can be tested by a repository admin.

Run tests for PR #1219

@akshaydeo akshaydeo marked this pull request as ready for review January 2, 2026 14:14
@akshaydeo akshaydeo changed the title fixes model selected. closes #1182 fixes model selector Jan 2, 2026
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Nitpick comments (5)
ui/components/ui/sheet.tsx (2)

81-97: Type casting may be fragile; consider explicit typing.

The handlers cast events to CustomEvent to access .detail?.originalEvent?.target, which suggests Radix UI passes events in a specific wrapper format. However, the type annotation React.PointerEvent | CustomEvent doesn't accurately reflect this structure, making the casts potentially unsafe.

🔎 Consider explicit type for Radix event structure

Define an explicit type for the Radix event structure:

+type RadixOutsideEvent = CustomEvent<{
+  originalEvent: PointerEvent | FocusEvent;
+}>;
+
-const handlePointerDownOutside = (event: React.PointerEvent | CustomEvent) => {
-  const target = (event as CustomEvent).detail?.originalEvent?.target as HTMLElement;
+const handlePointerDownOutside = (event: RadixOutsideEvent) => {
+  const target = event.detail.originalEvent.target as HTMLElement;
   if (isPortaledElement(target)) {
     event.preventDefault();
     return;
   }
-  onPointerDownOutside?.(event as any);
+  onPointerDownOutside?.(event);
 };

-const handleInteractOutside = (event: React.FocusEvent | CustomEvent) => {
-  const target = (event as CustomEvent).detail?.originalEvent?.target as HTMLElement;
+const handleInteractOutside = (event: RadixOutsideEvent) => {
+  const target = event.detail.originalEvent.target as HTMLElement;
   if (isPortaledElement(target)) {
     event.preventDefault();
     return;
   }
-  onInteractOutside?.(event as any);
+  onInteractOutside?.(event);
 };

68-79: Broad class selectors may match unintended elements.

The patterns [class*="-menu"] and [class*="MenuPortal"] use substring matching, which could match unintended elements with similar class names (e.g., submenu, context-menu, MenuPortalOther).

Consider more specific selectors or data attributes:

 const isPortaledElement = (target: HTMLElement | null): boolean => {
   if (!target) return false;
-  // Check for react-select menu portal elements
   return !!(
-    target.closest('[class*="-menu"]') ||
-    target.closest('[class*="MenuPortal"]') ||
+    target.closest('[class^="react-select"][class*="-menu"]') ||
+    target.closest('[class^="react-select"][class*="MenuPortal"]') ||
     target.closest('[role="listbox"]') ||
     target.closest('[role="option"]') ||
     target.closest('[data-radix-popper-content-wrapper]')
   );
 };

Or coordinate with asyncMultiselect.tsx to use a shared data attribute for more reliable detection.

ui/components/ui/asyncMultiselect.tsx (3)

233-257: Magic number timeout could cause race conditions.

The 200ms delay before clearing isInteractingWithMenuRef appears arbitrary and could lead to timing issues:

  • If a user clicks the menu, then quickly blurs, the flag might still be true, incorrectly preventing menu close
  • If menu interactions complete faster than 200ms, the flag might persist unnecessarily

Consider alternatives:

  1. Use React's onMouseDown/onMouseUp on the select component itself instead of global listeners
  2. Synchronously clear the flag in pointerup without the timeout
  3. If the timeout is necessary for a specific reason, document why 200ms was chosen
🔎 Example: Remove timeout for immediate cleanup
 const handlePointerUp = () => {
-  setTimeout(() => {
-    isInteractingWithMenuRef.current = false;
-  }, 200);
+  isInteractingWithMenuRef.current = false;
 };

237-240: Portal detection selectors differ from sheet.tsx implementation.

The menu element detection logic here uses slightly different selectors than the isPortaledElement function in sheet.tsx:

  • This file: checks for [class*="-menu"], [role="listbox"], [role="option"], [class*="MenuPortal"]
  • sheet.tsx: same checks but different order and includes [data-radix-popper-content-wrapper]

Extract the portal detection logic to a shared utility function to ensure consistency:

// utils/portalDetection.ts
export function isReactSelectMenuElement(target: HTMLElement | null): boolean {
  if (!target) return false;
  return !!(
    target.closest('[class*="-menu"]') ||
    target.closest('[class*="MenuPortal"]') ||
    target.closest('[role="listbox"]') ||
    target.closest('[role="option"]')
  );
}

Then import and use in both files.


449-449: Replace magic z-index with a documented constant.

The zIndex: 9999 value is intentionally high to ensure the dropdown menu displays above other portaled elements (including Radix UI components like the sheet overlay at z-50), but it's undocumented and lacks context. Consider extracting this to a named constant (e.g., Z_INDEX_ASYNC_MULTISELECT_MENU) to clarify the intent and make it maintainable if the value needs adjustment in the future.

📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 411b394 and 4459c07.

📒 Files selected for processing (3)
  • ui/components/ui/asyncMultiselect.tsx
  • ui/components/ui/modelMultiselect.tsx
  • ui/components/ui/sheet.tsx
🧰 Additional context used
📓 Path-based instructions (1)
**

⚙️ CodeRabbit configuration file

always check the stack if there is one for the current PR. do not give localized reviews for the PR, always see all changes in the light of the whole stack of PRs (if there is a stack, if there is no stack you can continue to make localized suggestions/reviews)

Files:

  • ui/components/ui/sheet.tsx
  • ui/components/ui/modelMultiselect.tsx
  • ui/components/ui/asyncMultiselect.tsx
🔇 Additional comments (3)
ui/components/ui/modelMultiselect.tsx (1)

139-139: LGTM! Proper handling of empty defaultOptions.

When defaultOptions is an empty array, passing true to react-select triggers it to call loadOptions immediately, ensuring the dropdown loads options on first open rather than appearing empty.

ui/components/ui/asyncMultiselect.tsx (2)

411-412: Good defaults for portal behavior.

Setting menuPortalTarget to document.body and menuPosition to "fixed" are appropriate defaults that prevent positioning issues when the select is used inside containers with overflow or transform properties.


418-425: Blur guard prevents premature menu closure.

The logic correctly prevents the menu from closing when the user is actively interacting with it, addressing the core issue described in the PR objectives.

@akshaydeo akshaydeo force-pushed the 01-02-fixes_model_selected._closes_1182 branch from 4459c07 to 6d0b8d8 Compare January 2, 2026 16:10
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 4459c07 and 6d0b8d8.

📒 Files selected for processing (3)
  • ui/components/ui/asyncMultiselect.tsx
  • ui/components/ui/modelMultiselect.tsx
  • ui/components/ui/sheet.tsx
🚧 Files skipped from review as they are similar to previous changes (2)
  • ui/components/ui/modelMultiselect.tsx
  • ui/components/ui/sheet.tsx
🧰 Additional context used
📓 Path-based instructions (1)
**

⚙️ CodeRabbit configuration file

always check the stack if there is one for the current PR. do not give localized reviews for the PR, always see all changes in the light of the whole stack of PRs (if there is a stack, if there is no stack you can continue to make localized suggestions/reviews)

Files:

  • ui/components/ui/asyncMultiselect.tsx
🔇 Additional comments (2)
ui/components/ui/asyncMultiselect.tsx (2)

411-412: LGTM! Portal defaults align with modal/sheet usage.

Setting document.body as the default portal target and "fixed" positioning are appropriate defaults for ensuring the menu displays correctly above other UI layers and within modals/sheets.


449-449: LGTM! High z-index ensures proper stacking.

Setting the menu portal z-index to 9999 is a standard approach for ensuring portaled menus appear above other UI layers, resolving the z-index conflicts mentioned in the PR objectives.

@akshaydeo akshaydeo force-pushed the 01-02-fixes_model_selected._closes_1182 branch from 6d0b8d8 to 9fe2245 Compare January 2, 2026 16:47
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

♻️ Duplicate comments (1)
ui/components/ui/asyncMultiselect.tsx (1)

232-257: Add a brief comment explaining the 200ms grace period.

The pointer interaction tracking logic correctly prevents premature menu closure during active selection. However, the 200ms timeout on line 249 lacks documentation explaining why this specific duration was chosen.

Suggested inline comment
 		const handlePointerUp = () => {
+			// 200ms grace period allows the blur event to fire after pointerup
+			// before resetting the interaction flag, preventing race conditions
 			setTimeout(() => {
 				isInteractingWithMenuRef.current = false;
 			}, 200);
 		};
🧹 Nitpick comments (3)
ui/components/ui/asyncMultiselect.tsx (1)

449-449: Consider using a design-system z-index token instead of a magic number.

z-index: 9999 is effective but arbitrary. If your project has a z-index scale (e.g., CSS variables or Tailwind config), consider using a named token like --z-dropdown or similar for maintainability. This prevents z-index conflicts as the codebase grows.

ui/components/ui/sheet.tsx (2)

68-79: Consider extracting isPortaledElement to a shared utility.

This portal detection logic is nearly identical to the one in asyncMultiselect.tsx (lines 237-240). To avoid duplication and ensure consistent behavior, consider extracting this to a shared utility in utils.ts.

Suggested refactor
// In utils.ts
export const isPortaledElement = (target: HTMLElement | null): boolean => {
  if (!target) return false;
  return !!(
    target.closest('[class*="-menu"]') ||
    target.closest('[class*="MenuPortal"]') ||
    target.closest('[role="listbox"]') ||
    target.closest('[role="option"]') ||
    target.closest('[data-radix-popper-content-wrapper]')
  );
};

Then import and use in both files.


81-97: Type assertions reduce type safety; consider proper typing.

The as any casts on lines 87 and 96 bypass TypeScript's type checking. Radix's onPointerDownOutside and onInteractOutside use PointerDownOutsideEvent and FocusOutsideEvent from @radix-ui/react-dismissable-layer.

Suggested improvement
+import type { PointerDownOutsideEvent, FocusOutsideEvent } from "@radix-ui/react-dismissable-layer";

-const handlePointerDownOutside = (event: React.PointerEvent | CustomEvent) => {
-  const target = (event as CustomEvent).detail?.originalEvent?.target as HTMLElement;
+const handlePointerDownOutside = (event: PointerDownOutsideEvent) => {
+  const target = event.detail.originalEvent.target as HTMLElement | null;
   if (isPortaledElement(target)) {
     event.preventDefault();
     return;
   }
-  onPointerDownOutside?.(event as any);
+  onPointerDownOutside?.(event);
 };

-const handleInteractOutside = (event: React.FocusEvent | CustomEvent) => {
-  const target = (event as CustomEvent).detail?.originalEvent?.target as HTMLElement;
+const handleInteractOutside = (event: FocusOutsideEvent | PointerDownOutsideEvent) => {
+  const target = event.detail.originalEvent.target as HTMLElement | null;
   if (isPortaledElement(target)) {
     event.preventDefault();
     return;
   }
-  onInteractOutside?.(event as any);
+  onInteractOutside?.(event);
 };
📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 6d0b8d8 and 9fe2245.

📒 Files selected for processing (24)
  • core/version
  • framework/changelog.md
  • framework/version
  • plugins/governance/changelog.md
  • plugins/governance/version
  • plugins/jsonparser/changelog.md
  • plugins/jsonparser/version
  • plugins/logging/changelog.md
  • plugins/logging/version
  • plugins/maxim/changelog.md
  • plugins/maxim/version
  • plugins/mocker/changelog.md
  • plugins/mocker/version
  • plugins/otel/changelog.md
  • plugins/otel/version
  • plugins/semanticcache/changelog.md
  • plugins/semanticcache/version
  • plugins/telemetry/changelog.md
  • plugins/telemetry/version
  • transports/changelog.md
  • transports/version
  • ui/components/ui/asyncMultiselect.tsx
  • ui/components/ui/modelMultiselect.tsx
  • ui/components/ui/sheet.tsx
✅ Files skipped from review due to trivial changes (13)
  • transports/changelog.md
  • plugins/governance/changelog.md
  • plugins/logging/version
  • plugins/semanticcache/changelog.md
  • plugins/governance/version
  • plugins/otel/changelog.md
  • plugins/otel/version
  • core/version
  • plugins/mocker/changelog.md
  • plugins/telemetry/version
  • plugins/jsonparser/changelog.md
  • plugins/logging/changelog.md
  • framework/version
🚧 Files skipped from review as they are similar to previous changes (1)
  • ui/components/ui/modelMultiselect.tsx
🧰 Additional context used
📓 Path-based instructions (1)
**

⚙️ CodeRabbit configuration file

always check the stack if there is one for the current PR. do not give localized reviews for the PR, always see all changes in the light of the whole stack of PRs (if there is a stack, if there is no stack you can continue to make localized suggestions/reviews)

Files:

  • plugins/jsonparser/version
  • plugins/telemetry/changelog.md
  • plugins/mocker/version
  • framework/changelog.md
  • transports/version
  • plugins/semanticcache/version
  • ui/components/ui/asyncMultiselect.tsx
  • plugins/maxim/version
  • plugins/maxim/changelog.md
  • ui/components/ui/sheet.tsx
🔇 Additional comments (11)
plugins/semanticcache/version (1)

1-1: LGTM!

Version bump to 1.3.57 is consistent with the broader release updates in this PR.

plugins/maxim/version (1)

1-1: LGTM!

Version bump to 1.4.59 aligns with the core/framework upgrade cycle.

plugins/jsonparser/version (1)

1-1: LGTM!

Version bump to 1.3.58 is consistent with the PR's dependency upgrades.

plugins/mocker/version (1)

1-1: LGTM!

Version bump to 1.3.57 aligns with the broader release updates.

transports/version (1)

1-1: LGTM!

Version bump to 1.3.58 is consistent with the core/framework upgrade cycle.

plugins/maxim/changelog.md (1)

1-2: LGTM!

Changelog entries appropriately document the maxim-go and core/framework upgrades.

framework/changelog.md (1)

1-1: LGTM!

Changelog entry appropriately documents the core upgrade to 1.2.46.

plugins/telemetry/changelog.md (1)

1-1: Verify changelog completeness relative to PR scope.

The changelog entry documents dependency upgrades (core to 1.2.46, framework to 1.1.57), but the PR objectives indicate this PR primarily addresses bug fixes for the model selector UI (AsyncMultiSelect menu closing, z-index conflicts, Sheet portal interaction, and ModelMultiselect empty defaultOptions handling). Typically, these user-facing fixes would also appear in a changelog.

Clarify whether:

  1. This changelog entry is for a separate maintenance/dependency bump cycle
  2. The bug fixes should be documented in a different changelog or location
  3. Version files have been updated to match these dependency versions (core 1.2.46, framework 1.1.57)
ui/components/ui/asyncMultiselect.tsx (2)

411-412: Reasonable defaults for portal behavior.

Defaulting menuPortalTarget to document.body and menuPosition to "fixed" ensures consistent portal rendering behavior across different contexts (modals, sheets, etc.). This aligns with the fix for preventing menu closure issues.


418-425: Core fix for the menu closure issue looks correct.

The blur guard using isInteractingWithMenuRef prevents the menu from closing when the user is actively interacting with portal elements. Combined with the pointer event tracking in the useEffect, this should resolve the reported issue where model selection would fail when items were already selected.

ui/components/ui/sheet.tsx (1)

103-106: Integration with Radix looks correct.

The handlers properly intercept outside interactions, prevent default when the target is a portaled element (like react-select menus), and delegate to external handlers otherwise. This complements the asyncMultiselect.tsx changes to ensure dropdowns inside sheets work correctly.

@akshaydeo akshaydeo force-pushed the 01-02-fixes_model_selected._closes_1182 branch from 9fe2245 to e880737 Compare January 2, 2026 18:20
@akshaydeo akshaydeo force-pushed the 01-02-fixes_model_selected._closes_1182 branch from e880737 to 2126414 Compare January 2, 2026 18:33
@akshaydeo akshaydeo merged commit a132357 into main Jan 2, 2026
9 of 10 checks passed
@akshaydeo akshaydeo deleted the 01-02-fixes_model_selected._closes_1182 branch January 2, 2026 18:37
@akshaydeo akshaydeo mentioned this pull request Jan 2, 2026
2 tasks
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.

[Bug]: will npx packages updated? [Bug]: Provider -> new key -> models field does not search for models if a selection is already present

1 participant