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! ⚡

194 lines (170 loc) • 3.99 kB
.command { display: flex; width: 100%; flex: 1; flex-direction: column; overflow: hidden; border-radius: var(--ac-radius-md); background-color: var(--ac-background); color: var(--ac-foreground); min-height: 0; } .srOnly { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); border: 0; white-space: nowrap; } .backdrop { position: fixed; inset: 0; z-index: 9999; min-height: 100dvh; background-color: rgb(0 0 0 / 0.5); transition: opacity var(--ac-transition-normal); touch-action: none; @supports (-webkit-touch-callout: none) { position: absolute; } &[data-starting-style], &[data-ending-style] { opacity: 0; } } .dialogPopup { box-sizing: border-box; position: fixed; z-index: 10000; top: 50%; left: 50%; display: flex; flex-direction: column; width: min(34rem, calc(100vw - 2rem)); max-height: min(90vh, 44rem); overflow: hidden; padding: 0; border: 1px solid var(--ac-border); border-radius: var(--ac-radius-lg); background-color: var(--ac-background); color: var(--ac-foreground); box-shadow: 0 10px 30px -5px rgb(0 0 0 / 0.1), 0 4px 10px -5px rgb(0 0 0 / 0.04); transform: translate(-50%, -50%); transition: opacity var(--ac-transition-normal), transform var(--ac-transition-normal); &[data-starting-style], &[data-ending-style] { opacity: 0; transform: translate(-50%, -50%) scale(0.95); } } .inputWrapper { display: flex; align-items: center; padding-inline: var(--ac-space-4); border-bottom: 1px solid var(--ac-border); } .searchIcon { width: 1.25rem; height: 1.25rem; flex-shrink: 0; margin-right: var(--ac-space-3); opacity: 0.5; } .input { width: 100%; height: 3rem; padding-block: var(--ac-space-3); border: 0; border-radius: var(--ac-radius-md); background-color: transparent; color: inherit; font-size: 1rem; outline: none; &::placeholder { color: var(--ac-muted-foreground); } &:disabled { cursor: not-allowed; opacity: 0.5; } } .list { display: flex; flex-direction: column; flex: 1; min-height: 0; overflow-x: hidden; overflow-y: auto; overscroll-behavior: contain; padding: var(--ac-space-2); scroll-padding-block: var(--ac-space-1); -webkit-overflow-scrolling: touch; } .empty { padding-block: var(--ac-space-6); text-align: center; font-size: var(--ac-text-sm); } .group { overflow: hidden; padding: 2px 0; color: inherit; & + .group { margin-top: 2px; border-top: 1px solid var(--ac-border); padding-top: var(--ac-space-1); } } .groupHeading { padding: var(--ac-space-1) var(--ac-space-3); color: var(--ac-muted-foreground); font-size: var(--ac-text-xs); font-weight: 500; letter-spacing: 0.02em; } .separator { height: 1px; margin: var(--ac-space-1) var(--ac-space-1); background-color: var(--ac-border); } .item { position: relative; display: flex; align-items: center; gap: var(--ac-space-3); padding: 0.5rem var(--ac-space-3); border-radius: var(--ac-radius-sm); font-size: var(--ac-text-sm); line-height: 1.5; cursor: pointer; user-select: none; outline: none; transition: background-color var(--ac-transition-fast), color var(--ac-transition-fast); } .item[data-selected="true"] { background-color: var(--ac-accent); color: var(--ac-accent-foreground); } .item[data-disabled="true"] { pointer-events: none; opacity: 0.5; } .item:focus-visible { box-shadow: inset 0 0 0 2px var(--ac-ring); } .item svg { width: 1.25rem; height: 1.25rem; flex-shrink: 0; pointer-events: none; } .shortcut { margin-left: auto; color: var(--ac-muted-foreground); font-size: var(--ac-text-xs); letter-spacing: 0.2em; }