UNPKG

@arolariu/components

Version:

🎨 70+ beautiful, accessible React components built on Base UI. TypeScript-first, CSS Modules styling, tree-shakeable, SSR-ready. Perfect for modern web apps, design systems & rapid prototyping. Zero config, maximum flexibility! ⚡

159 lines (131 loc) • 2.65 kB
/** * Combobox component styles * Compound component combining Command, Popover, and Button */ /* Root container */ .combobox { display: contents; } /* Trigger button */ .trigger { justify-content: space-between; width: 100%; min-width: 200px; } .triggerValue { flex: 1; text-align: left; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .triggerPlaceholder { color: var(--ac-neutral-500); } .triggerIcon { margin-left: var(--ac-spacing-2); height: 1rem; width: 1rem; flex-shrink: 0; opacity: 0.5; } /* Popover content */ .content { width: var(--anchor-width); min-width: 200px; padding: 0; } /* Command container */ .command { border: none; box-shadow: none; } .commandInput { border-bottom: 1px solid var(--ac-neutral-200); border-radius: 0; } .commandList { max-height: 300px; overflow-y: auto; } /* Items */ .item { display: flex; align-items: center; gap: var(--ac-spacing-2); cursor: pointer; padding: var(--ac-spacing-2) var(--ac-spacing-3); border-radius: var(--ac-radius-sm); transition: background-color 0.2s; } .item:hover { background-color: var(--ac-neutral-100); } .item[data-disabled] { opacity: 0.5; pointer-events: none; } .itemSelected { background-color: var(--ac-neutral-100); } .itemCheck { height: 1rem; width: 1rem; flex-shrink: 0; opacity: 0; transition: opacity 0.2s; } .itemCheckVisible { opacity: 1; } .itemLabel { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } /* Empty state */ .empty { padding: var(--ac-spacing-6) var(--ac-spacing-4); text-align: center; color: var(--ac-neutral-500); font-size: var(--ac-font-size-sm); } /* Group */ .group { padding: var(--ac-spacing-1) 0; } /* Separator */ .separator { margin: var(--ac-spacing-1) 0; height: 1px; background-color: var(--ac-neutral-200); } /* Dark mode */ :global(.dark) .triggerPlaceholder { color: var(--ac-neutral-400); } :global(.dark) .commandInput { border-bottom-color: var(--ac-neutral-700); } :global(.dark) .item:hover { background-color: var(--ac-neutral-800); } :global(.dark) .itemSelected { background-color: var(--ac-neutral-800); } :global(.dark) .empty { color: var(--ac-neutral-400); } :global(.dark) .separator { background-color: var(--ac-neutral-700); } /* Responsive adjustments */ @media (max-width: 640px) { .trigger { min-width: 150px; } .content { min-width: 150px; } }