Skip to content

Conversation

@DrJKL
Copy link
Contributor

@DrJKL DrJKL commented Jan 21, 2026

Summary

Adds shadcn-vue Select components built on Reka UI primitives with design system styling.

Changes

New Components (src/components/ui/select/):

  • Select.vue - Root wrapper using SelectRoot from Reka UI
  • SelectTrigger.vue - Styled trigger with chevron icon
  • SelectContent.vue - Dropdown content with scroll buttons, z-index 3000 for PrimeVue dialog compatibility
  • SelectItem.vue - Individual option with check icon
  • SelectGroup.vue, SelectLabel.vue, SelectSeparator.vue - Grouping support
  • SelectScrollUpButton.vue, SelectScrollDownButton.vue - Overflow navigation
  • SelectValue.vue - Placeholder/value display

Styling:

  • Uses design tokens (bg-secondary-background, text-muted-foreground, border-border-default)
  • Iconify icons via icon-[lucide--*] classes
  • Smooth transitions and focus states

Documentation:

  • Comprehensive Storybook stories covering all variants
  • AGENTS.md with component creation guidelines

Testing

  • Storybook stories work correctly
  • Components build without errors

┆Issue is synchronized with this Notion page by Unito

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 21, 2026

📝 Walkthrough

Walkthrough

Adds a new Select component suite (Vue wrappers around reka-ui primitives), accompanying Storybook stories demonstrating usage patterns, and a new AGENTS.md with UI component development guidelines.

Changes

Cohort / File(s) Summary
Documentation and Guidelines
src/components/ui/AGENTS.md
New UI component development guidelines: shadcn-vue usage, story conventions, Reika UI wrapper patterns, prop forwarding (useForwardProps/useForwardPropsEmits), class merging via cn(), Iconify usage, design tokens, and Tailwind v4 variable syntax.
Select Core & Value
src/components/ui/select/Select.vue, src/components/ui/select/SelectValue.vue
Root Select wrapper and SelectValue component that forward props/emits to reka-ui primitives.
Content & Trigger
src/components/ui/select/SelectContent.vue, src/components/ui/select/SelectTrigger.vue
SelectContent with portal/viewport/scroll controls and position-based animation classes; SelectTrigger with composed Tailwind classes and chevron icon.
Items, Groups & Labels
src/components/ui/select/SelectGroup.vue, src/components/ui/select/SelectItem.vue, src/components/ui/select/SelectLabel.vue, src/components/ui/select/SelectSeparator.vue
Item/group/label/separator wrappers applying default and overridable classes via cn() to handle hover, focus, checked, disabled, and layout states.
Scroll Controls
src/components/ui/select/SelectScrollUpButton.vue, src/components/ui/select/SelectScrollDownButton.vue
Scroll button wrappers with default layout classes and chevron icons (slot-overridable).
Storybook Stories
src/components/ui/select/Select.stories.ts
New stories (Default, WithPlaceholder, Disabled, WithGroups, Scrollable, CustomWidth) demonstrating v-model usage, disabled state, grouped items, scrolling behavior, and trigger sizing.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  participant User as User
  participant Trigger as SelectTrigger
  participant Root as Select (wrapper)
  participant Content as SelectContent/Portal
  participant Viewport as SelectViewport
  participant Parent as Parent Component

  User->>Trigger: click
  Trigger->>Root: emit open request
  Root->>Content: mount/open
  Content->>Viewport: render items
  User->>Viewport: select item
  Viewport->>Root: emit selection (model update)
  Root->>Parent: update v-model / emit update:modelValue
  Parent->>Root: react to value change
Loading

Possibly related PRs

Suggested reviewers

  • snomiao
  • viva-jinyi
  • benceruleanlu

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 and usage tips.

@github-actions
Copy link

github-actions bot commented Jan 21, 2026

🎨 Storybook Build Status

Build completed successfully!

⏰ Completed at: 01/21/2026, 06:41:01 AM UTC

🔗 Links


🎉 Your Storybook is ready for review!

@github-actions
Copy link

github-actions bot commented Jan 21, 2026

🎭 Playwright Tests: ✅ Passed

Results: 507 passed, 0 failed, 0 flaky, 8 skipped (Total: 515)

📊 Browser Reports
  • chromium: View Report (✅ 495 / ❌ 0 / ⚠️ 0 / ⏭️ 8)
  • chromium-2x: View Report (✅ 2 / ❌ 0 / ⚠️ 0 / ⏭️ 0)
  • chromium-0.5x: View Report (✅ 1 / ❌ 0 / ⚠️ 0 / ⏭️ 0)
  • mobile-chrome: View Report (✅ 9 / ❌ 0 / ⚠️ 0 / ⏭️ 0)

@DrJKL
Copy link
Contributor Author

DrJKL commented Jan 21, 2026

(Split out from the Model Info Panel PR)

@github-actions
Copy link

github-actions bot commented Jan 21, 2026

Bundle Size Report

Summary

  • Raw size: 21.4 MB baseline 21.4 MB — ⚪ 0 B
  • Gzip: 4.44 MB baseline 4.44 MB — ⚪ 0 B
  • Brotli: 3.29 MB baseline 3.29 MB — 🔴 +8 B
  • Bundles: 155 current • 155 baseline • 1 added / 1 removed

Category Glance
Vendor & Third-Party ⚪ 0 B (10.4 MB) · Other ⚪ 0 B (6.28 MB) · Data & Services ⚪ 0 B (3.04 MB) · Graph Workspace ⚪ 0 B (1.02 MB) · Panels & Settings ⚪ 0 B (430 kB) · Views & Navigation ⚪ 0 B (80.7 kB) · + 5 more

Per-category breakdown
App Entry Points — 22.4 kB (baseline 22.4 kB) • ⚪ 0 B

Main entry bundles and manifests

File Before After Δ Raw Δ Gzip Δ Brotli
assets/index-D4kHp2rh.js (new) 22.4 kB 🔴 +22.4 kB 🔴 +6.74 kB 🔴 +5.92 kB
assets/index-De7tgzGl.js (removed) 22.4 kB 🟢 -22.4 kB 🟢 -6.74 kB 🟢 -5.91 kB

Status: 1 added / 1 removed

Graph Workspace — 1.02 MB (baseline 1.02 MB) • ⚪ 0 B

Graph editor runtime, canvas, workflow orchestration

File Before After Δ Raw Δ Gzip Δ Brotli
assets/GraphView-GJItB-k5.js 1.02 MB 1.02 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Views & Navigation — 80.7 kB (baseline 80.7 kB) • ⚪ 0 B

Top-level views, pages, and routed surfaces

File Before After Δ Raw Δ Gzip Δ Brotli
assets/CloudAuthTimeoutView-DXAlZGX2.js 5.24 kB 5.24 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudForgotPasswordView-S22zjYs3.js 6.26 kB 6.26 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudLayoutView-CECvRYdg.js 8.54 kB 8.54 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudLoginView-BIEEeH65.js 11.8 kB 11.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudSignupView-DF_DbLBO.js 8.18 kB 8.18 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudSorryContactSupportView-41RMhsFA.js 1.97 kB 1.97 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudSubscriptionRedirectView-DH-9uUdq.js 5.27 kB 5.27 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudSurveyView-BsX_S2f-.js 17.1 kB 17.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/layout-DT-CUejm.js 500 B 500 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/UserCheckView-Bxo4XB2W.js 10.5 kB 10.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/UserSelectView-9s0nw0eO.js 5.28 kB 5.28 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Panels & Settings — 430 kB (baseline 430 kB) • ⚪ 0 B

Configuration panels, inspectors, and settings screens

File Before After Δ Raw Δ Gzip Δ Brotli
assets/AboutPanel-C5S0mlfj.js 10.8 kB 10.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/cloudRemoteConfig-BPeGavCg.js 1.82 kB 1.82 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ExtensionPanel-CTxuHNH3.js 10.2 kB 10.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/KeybindingPanel-C9EyquxY.js 14.2 kB 14.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/LegacyCreditsPanel-KcYBtApj.js 23.8 kB 23.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/remoteConfig-BEkdBLxH.js 1.07 kB 1.07 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/remoteConfig-D_gf6SLU.js 188 B 188 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ServerConfigPanel-BSANaOFo.js 7.23 kB 7.23 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-6DVADt2n.js 34.3 kB 34.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-B0j03ezr.js 38.3 kB 38.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BHe-AJJN.js 29.6 kB 29.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BT2lfy0S.js 29.5 kB 29.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-Cp0lF2Mp.js 31.2 kB 31.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CwdesOpm.js 32.1 kB 32.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-D3SeHgho.js 28.6 kB 28.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-D42m_JEJ.js 25.9 kB 25.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-FF_vLB0C.js 25.2 kB 25.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-reUMVWRn.js 30.4 kB 30.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-s7kHNBdQ.js 28.9 kB 28.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SubscriptionPanel-DqeU3Kxi.js 20.6 kB 20.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/UserPanel-Yof_j-qN.js 6.58 kB 6.58 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
User & Accounts — 3.94 kB (baseline 3.94 kB) • ⚪ 0 B

Authentication, profile, and account management bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/auth-b2opw4pv.js 3.54 kB 3.54 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/auth-BIwBGXC2.js 178 B 178 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/firebaseAuthStore-Ij3h5VHK.js 217 B 217 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
Editors & Dialogs — 2.8 kB (baseline 2.8 kB) • ⚪ 0 B

Modals, dialogs, drawers, and in-app editors

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useSubscriptionDialog-C3u2AKmk.js 179 B 179 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useSubscriptionDialog-DY-GuC5Y.js 2.62 kB 2.62 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
UI Components — 32.8 kB (baseline 32.8 kB) • ⚪ 0 B

Reusable component library chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/Button-CKxdX0Yq.js 3.75 kB 3.75 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudBadge-at4F-a8N.js 1.85 kB 1.85 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/cloudFeedbackTopbarButton-B8quotuC.js 866 B 866 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ComfyQueueButton-B4gI7aky.js 9.52 kB 9.52 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ComfyQueueButton-Boit9l06.js 181 B 181 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SubscribeButton-B5iIRv_n.js 12.5 kB 12.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/UserAvatar-Bj7TTp1S.js 1.73 kB 1.73 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetButton-DZ-mX5uq.js 2.41 kB 2.41 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Data & Services — 3.04 MB (baseline 3.04 MB) • ⚪ 0 B

Stores, services, APIs, and repositories

File Before After Δ Raw Δ Gzip Δ Brotli
assets/api-BdP84C-d.js 1.15 MB 1.15 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/audioService-CXuShcAd.js 2.03 kB 2.03 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/dialogService-Baha47jh.js 1.87 MB 1.87 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/keybindingService-qptuAKK3.js 6.78 kB 6.78 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/releaseStore-BF3w-okz.js 8.91 kB 8.91 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/releaseStore-CwVyNDzU.js 140 B 140 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/serverConfigStore-sopnD88s.js 2.64 kB 2.64 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/userStore-DxFV65gw.js 2.16 kB 2.16 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Utilities & Hooks — 18.8 kB (baseline 18.8 kB) • ⚪ 0 B

Helpers, composables, and utility bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/_plugin-vue_export-helper-xVPqUhAl.js 467 B 467 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/audioUtils-BU4Yqw56.js 1.24 kB 1.24 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/colorUtil-BTZOs5h9.js 7.2 kB 7.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/markdownRendererUtil-B9qvfWYq.js 1.78 kB 1.78 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeFilterUtil-BUCOyXf2.js 421 B 421 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/subscriptionCheckoutUtil-bjl5AqQn.js 1.98 kB 1.98 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/tailwindUtil-DTv34axN.js 487 B 487 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useCurrentUser-DHeVgxfb.js 145 B 145 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useErrorHandling-DQm3y0Ah.js 5.08 kB 5.08 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Vendor & Third-Party — 10.4 MB (baseline 10.4 MB) • ⚪ 0 B

External libraries and shared vendor chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/vendor-chart-Dr8GmMlH.js 408 kB 408 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-other-CpOC_out.js 3.92 MB 3.92 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-primevue-DvjPM_Lx.js 3.04 MB 3.04 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-reka-ui-BRjoKiJi.js 172 kB 172 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-three-Dqb1VEds.js 1.83 MB 1.83 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-tiptap-BxNhpyUI.js 650 kB 650 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-vue-7XRCqLaG.js 13.6 kB 13.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-xterm-CArXWFIl.js 398 kB 398 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Other — 6.28 MB (baseline 6.28 MB) • ⚪ 0 B

Bundles that do not match a named category

File Before After Δ Raw Δ Gzip Δ Brotli
assets/AudioPreviewPlayer-DgyNJlCO.js 12.7 kB 12.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/AudioPreviewPlayer-DM2DM_Q0.js 191 B 191 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/auto-Bv9cmrEd.js 1.73 kB 1.73 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/BaseViewTemplate-DUpkRB9h.js 2.42 kB 2.42 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/cloudBadges-BMbMW_n9.js 1.08 kB 1.08 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudRunButtonWrapper-Ch3aJwfc.js 1.79 kB 1.79 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/cloudSessionCookie-lIvLQCgm.js 2.9 kB 2.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/cloudSubscription-jrujNQxg.js 976 B 976 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-6dIwsSNi.js 17.2 kB 17.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BahwM9ZP.js 19.3 kB 19.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BoJZgy7S.js 17 kB 17 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BQtdp20P.js 20.6 kB 20.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CEMgeOuO.js 18.5 kB 18.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CnxND6sZ.js 18 kB 18 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-coXkrooi.js 18 kB 18 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CZcHDaAg.js 18.8 kB 18.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DDPGTXy9.js 17.9 kB 17.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DsGC6118.js 17.8 kB 17.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-yZ2AjT4s.js 19.3 kB 19.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/core-dupKzsFS.js 177 kB 177 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/GlobalToast-dRzp1WEU.js 3.05 kB 3.05 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/graphHasMissingNodes-DpcPDO2w.js 1.06 kB 1.06 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/LazyImage-DHuYMTZW.js 14.1 kB 14.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Load3D-DpC02kTL.js 131 B 131 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Load3D-DXMQVyeG.js 55.7 kB 55.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-B_sPkRkB.js 121 kB 121 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BAkXMjmM.js 141 kB 141 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BENvLtOF.js 117 kB 117 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BNsn8_Lr.js 120 kB 120 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-C9XUWxrh.js 105 kB 105 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-Ch4S7NKM.js 105 kB 105 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DqG_JuMY.js 161 kB 161 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DSqO9eB5.js 124 kB 124 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-F6Zr8qmN.js 118 kB 118 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-kF4hEjF-.js 145 kB 145 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-KWKxelma.js 134 kB 134 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Media3DTop-DEJN4gIz.js 2.38 kB 2.38 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaAudioTop-D39-6tpk.js 2 kB 2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaImageTop-CVYh1Dta.js 2.34 kB 2.34 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaVideoTop-D7WAsNtO.js 2.84 kB 2.84 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/mixpanel.module-DaKz7N-R.js 143 B 143 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-42NP799-.js 358 kB 358 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-5Wl7kJtq.js 361 kB 361 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-Bfo_nHET.js 361 kB 361 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BIaHseXE.js 334 kB 334 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BqTE0tnV.js 437 kB 437 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CkFt94jg.js 365 kB 365 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-COXALCSv.js 374 kB 374 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-Cuv6XdUW.js 332 kB 332 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CyylrXT5.js 355 kB 355 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DN_FfVrO.js 403 kB 403 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-Dxwvr4db.js 403 kB 403 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/OBJLoader2WorkerModule-DTMpvldF.js 109 kB 109 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/PanelTemplate-eqNHRJqe.js 16.2 kB 16.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/preservedQueryNamespaces-BsMrb3S_.js 3.23 kB 3.23 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/previousFullPath-DZ1Jt5wB.js 838 B 838 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/rolldown-runtime-CqTjxoQm.js 1.53 kB 1.53 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Slider-Buvb2eP-.js 4.21 kB 4.21 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SubscribeToRun-BTv9SX2a.js 2.96 kB 2.96 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SubscriptionRequiredDialogContent-U5sMEKfa.js 28.7 kB 28.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ValueControlPopover-Cpc0lA94.js 4.86 kB 4.86 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widget-Dneex3J5.js 518 B 518 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetAudioUI-D4NtxPX6.js 3.22 kB 3.22 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-BRX2wHPg.js 4.71 kB 4.71 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-BttrDPHP.js 186 B 186 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetChart-Cw5Ye8UP.js 2.79 kB 2.79 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetColorPicker-Dv0MELOX.js 3.71 kB 3.71 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetGalleria-BwLByoy7.js 4.57 kB 4.57 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetImageCompare-BpLJ-dSO.js 3.79 kB 3.79 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetImageCrop-BRlI-kcq.js 17.1 kB 17.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetInputNumber-BXMbei0x.js 186 B 186 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetInputNumber-uH72SPwv.js 18.2 kB 18.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetInputText-C57tLR52.js 2.58 kB 2.58 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetLayoutField-BmL9OHU7.js 2.61 kB 2.61 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetLegacy-WKVLViUQ.js 164 B 164 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetMarkdown-B4aB3N7S.js 3.22 kB 3.22 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widgetPropFilter-DfR_ZXyS.js 1.31 kB 1.31 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetRecordAudio-ChVoB5Fc.js 18.2 kB 18.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetSelect-B7Q1Zz9J.js 161 B 161 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetSelect-B8RHThMD.js 50.5 kB 50.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetTextarea-CZnm93Po.js 3.52 kB 3.52 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetToggleSwitch-B0EfCU8u.js 3.08 kB 3.08 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetWithControl-BT5fJZY7.js 8.02 kB 8.02 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

@DrJKL DrJKL marked this pull request as ready for review January 21, 2026 04:32
@DrJKL DrJKL requested a review from a team as a code owner January 21, 2026 04:32
@dosubot dosubot bot added the size:XL This PR changes 500-999 lines, ignoring generated files. label Jan 21, 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: 4

🤖 Fix all issues with AI agents
In `@src/components/ui/select/Select.stories.ts`:
- Around line 33-67: The story's local v-model ref in Default setup is
initialized from args.modelValue but isn't synced with Storybook controls;
import and call useArgs inside the render/setup, get the args and updateArgs
(useArgs) and replace the static initialization of value with a reactive ref
that both watches storybook args to update itself and watches value to call
updateArgs({ modelValue: newValue }) so control changes reflect selection and
the onUpdate:modelValue action fires; update the Default story's setup (and the
other stories listed) to use useArgs, value, updateArgs and watch to
bi-directionally sync modelValue between Storybook args and the local ref.

In `@src/components/ui/select/Select.vue`:
- Around line 1-9: The file is suppressing vue/no-unused-properties for the
props variable; remove that lint suppression by passing defineProps directly
into useForwardPropsEmits so props is considered used. Replace the separate
const props = defineProps<SelectRootProps>() and const emits =
defineEmits<SelectRootEmits>() + const forwarded = useForwardPropsEmits(props,
emits) pattern with a direct call that forwards defineProps(...) and
defineEmits(...) into useForwardPropsEmits (i.e., call
useForwardPropsEmits(defineProps<SelectRootProps>(),
defineEmits<SelectRootEmits>())) so the props are used and the eslint disable
can be removed while keeping SelectRoot/useForwardPropsEmits intact.

In `@src/components/ui/select/SelectItem.vue`:
- Around line 33-35: The decorative check icon inside SelectItemIndicator should
be hidden from assistive tech; update the <i class="icon-[lucide--check]
text-base-foreground" /> element (inside SelectItemIndicator) to be decorative
by adding aria-hidden="true" (and optionally role="presentation") so screen
readers do not announce it.

In `@src/components/ui/select/SelectValue.vue`:
- Line 5: Replace the single const props = defineProps<SelectValueProps>() with
the reactive destructuring pattern used by sibling components, e.g. const {
...restProps } = defineProps<SelectValueProps>(), and then update the component
template to reference restProps instead of props so the prop handling matches
other Select wrappers (locate the defineProps call and usages of props in
SelectValue.vue and swap them to the restProps destructured variable).

AustinMroz
AustinMroz previously approved these changes Jan 21, 2026
Copy link
Collaborator

@AustinMroz AustinMroz left a comment

Choose a reason for hiding this comment

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

I'm sad to see the Scroll Up/Down buttons over a scrollbar, but the code and functionality both look great

v-bind="{ ...forwarded, ...$attrs }"
:class="
cn(
'relative z-3000 max-h-96 min-w-32 overflow-hidden',
Copy link
Collaborator

Choose a reason for hiding this comment

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

Popover can run off screen under extreme resolution constraints. max-h-(--reka-select-content-available-height) is an option, but I think I prefer the current fixed height. It keeps the size reasonable under normal usage

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Discussed this elsewhere. I agree this is something that could be worth addressing later. I'll keep it in mind.

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
@DrJKL DrJKL requested a review from AustinMroz January 21, 2026 06:39
@DrJKL DrJKL merged commit 7a1a2c1 into main Jan 21, 2026
27 checks passed
@DrJKL DrJKL deleted the drjkl/ui-select-component branch January 21, 2026 07:17
@DrJKL DrJKL added needs-backport Fix/change that needs to be cherry-picked to the current feature freeze branch cloud/1.37 Backport PRs for cloud 1.37 labels Jan 22, 2026
github-actions bot pushed a commit that referenced this pull request Jan 22, 2026
## Summary

Adds shadcn-vue Select components built on Reka UI primitives with
design system styling.

## Changes

**New Components** (`src/components/ui/select/`):
- `Select.vue` - Root wrapper using `SelectRoot` from Reka UI
- `SelectTrigger.vue` - Styled trigger with chevron icon
- `SelectContent.vue` - Dropdown content with scroll buttons, z-index
3000 for PrimeVue dialog compatibility
- `SelectItem.vue` - Individual option with check icon
- `SelectGroup.vue`, `SelectLabel.vue`, `SelectSeparator.vue` - Grouping
support
- `SelectScrollUpButton.vue`, `SelectScrollDownButton.vue` - Overflow
navigation
- `SelectValue.vue` - Placeholder/value display

**Styling**:
- Uses design tokens (`bg-secondary-background`,
`text-muted-foreground`, `border-border-default`)
- Iconify icons via `icon-[lucide--*]` classes
- Smooth transitions and focus states

**Documentation**:
- Comprehensive Storybook stories covering all variants
- `AGENTS.md` with component creation guidelines

## Testing

- [x] Storybook stories work correctly
- [x] Components build without errors

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8205-feat-ui-add-shadcn-vue-Select-components-2ef6d73d365081fd994ddb1123c063e7)
by [Unito](https://www.unito.io)

---------

Co-authored-by: Amp <[email protected]>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
@comfy-pr-bot
Copy link
Member

@DrJKL Successfully backported to #8234

@github-actions github-actions bot removed the needs-backport Fix/change that needs to be cherry-picked to the current feature freeze branch label Jan 22, 2026
DrJKL added a commit that referenced this pull request Jan 22, 2026
Backport of #8205 to `cloud/1.37`

Automatically created by backport workflow.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8234-backport-cloud-1-37-feat-ui-add-shadcn-vue-Select-components-2f06d73d365081eb9437d7ef7487ca05)
by [Unito](https://www.unito.io)

Co-authored-by: Alexander Brown <[email protected]>
Co-authored-by: Amp <[email protected]>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
godwiniheuwa pushed a commit to godwiniheuwa/ComfyUI_frontend that referenced this pull request Jan 22, 2026
## Summary

Adds shadcn-vue Select components built on Reka UI primitives with
design system styling.

## Changes

**New Components** (`src/components/ui/select/`):
- `Select.vue` - Root wrapper using `SelectRoot` from Reka UI
- `SelectTrigger.vue` - Styled trigger with chevron icon
- `SelectContent.vue` - Dropdown content with scroll buttons, z-index
3000 for PrimeVue dialog compatibility
- `SelectItem.vue` - Individual option with check icon
- `SelectGroup.vue`, `SelectLabel.vue`, `SelectSeparator.vue` - Grouping
support
- `SelectScrollUpButton.vue`, `SelectScrollDownButton.vue` - Overflow
navigation
- `SelectValue.vue` - Placeholder/value display

**Styling**:
- Uses design tokens (`bg-secondary-background`,
`text-muted-foreground`, `border-border-default`)
- Iconify icons via `icon-[lucide--*]` classes
- Smooth transitions and focus states

**Documentation**:
- Comprehensive Storybook stories covering all variants
- `AGENTS.md` with component creation guidelines

## Testing

- [x] Storybook stories work correctly
- [x] Components build without errors

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8205-feat-ui-add-shadcn-vue-Select-components-2ef6d73d365081fd994ddb1123c063e7)
by [Unito](https://www.unito.io)

---------

Co-authored-by: Amp <[email protected]>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cloud/1.37 Backport PRs for cloud 1.37 size:XL This PR changes 500-999 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants