UNPKG

@taufik-nurrohman/option-picker

Version:

Accessible custom `<select>` (and `<input list>`) element.

267 lines (264 loc) 5.86 kB
.option-picker__options-batch::before, .option-picker__option, .option-picker__arrow, .option-picker__text, .option-picker__value { align-items: center; border: 1px solid; border-color: inherit; display: flex; gap: 0.25em; padding: 0 0.25em; } .option-picker__options-lot, .option-picker__options-batch, .option-picker__options, .option-picker__flex { border-color: inherit; display: flex; flex-wrap: wrap; gap: 1px; padding: 1px; } .option-picker, .option-picker * { -webkit-tap-highlight-color: rgba(0, 0, 0, 0); box-sizing: border-box; color: inherit; font: inherit; outline: 0; } .option-picker { border: 1px solid; cursor: pointer; display: inline-flex; flex-direction: column; flex-wrap: wrap; position: relative; user-select: none; vertical-align: middle; } .option-picker[aria-disabled=true] { color: rgb(128, 128, 128); cursor: not-allowed; } .option-picker[aria-disabled=true] * { pointer-events: none; } .option-picker[aria-disabled=true] .option-picker__option[aria-selected=true], .option-picker[aria-disabled=true] .option-picker__value[aria-selected=true] { background: rgba(0, 0, 0, 0.125); } .option-picker[aria-expanded=true]:not([data-size]):not([data-size="1"]) { z-index: 9999; } .option-picker[aria-expanded=true] .option-picker__arrow::after { border-bottom: 0.5em solid; border-bottom-color: inherit; border-top-width: 0; } .option-picker[aria-expanded=true] .option-picker__options { visibility: visible; } .option-picker[aria-invalid=true] { color: rgb(255, 0, 0); } .option-picker[aria-invalid=true] .option-picker__option[aria-disabled=true], .option-picker[aria-invalid=true] .option-picker__value[aria-disabled=true] { color: rgb(255, 128, 128); cursor: not-allowed; } .option-picker[aria-invalid=true] .option-picker__option[aria-disabled=true][aria-selected=true], .option-picker[aria-invalid=true] .option-picker__value[aria-disabled=true][aria-selected=true] { background: rgba(255, 0, 0, 0.125); } .option-picker[aria-invalid=true] .option-picker__option[aria-selected=true], .option-picker[aria-invalid=true] .option-picker__value[aria-selected=true] { background: rgba(255, 0, 0, 0.25); } .option-picker:not([aria-readonly=true]) .option-picker__text:focus-within { cursor: text; } .option-picker__arrow, .option-picker__text, .option-picker__value { overflow: hidden; position: relative; } .option-picker__arrow:focus { outline: 1px solid; outline-offset: -2px; } .option-picker__arrow::after { border-left: 0.25em solid transparent; border-right: 0.25em solid transparent; border-top: 0.5em solid; border-top-color: inherit; content: ""; height: 0; width: 0; } .option-picker__flex { flex: 1; overflow: hidden; } .option-picker__option[hidden] { display: none; } .option-picker__option[aria-disabled=true] { color: rgb(128, 128, 128); cursor: not-allowed; } .option-picker__option[aria-disabled=true][aria-selected=true] { background: rgba(0, 0, 0, 0.125); } .option-picker__option[aria-selected=true] { background: rgba(0, 0, 255, 0.5); } .option-picker__option:focus, .option-picker__option:where(:not([aria-disabled=true])):hover { outline: 1px solid; outline-offset: -2px; } .option-picker__options { border: inherit; flex-direction: column; flex-wrap: nowrap; left: -1px; margin: 0; max-height: 0; min-width: calc(100% + 2px); position: absolute; top: 100%; visibility: hidden; white-space: nowrap; } .option-picker__options[hidden] { display: none; } .option-picker__options:empty { display: none; } .option-picker__options-batch { border-color: inherit; border-style: inherit; border-width: 1px; flex-direction: column; } .option-picker__options-batch::before { content: attr(value); font-weight: bold; } .option-picker__options-lot { border-color: inherit; border-style: inherit; border-width: 0; display: flex; flex-direction: column; flex-wrap: nowrap; gap: inherit; overflow: auto; padding: 0; } .option-picker__self { background: 0 0; border-radius: 0; border: 0; bottom: 0; box-shadow: none; color: transparent; font: 0/0 a; height: 1px; left: 0; margin: 0; opacity: 0; outline: 0; overflow: hidden; padding: 0; position: absolute; text-shadow: none; width: 1px; } .option-picker__text { border-color: transparent; flex: 1; } .option-picker__text span { flex: 1; position: relative; z-index: 1; } .option-picker__text span::after { content: "‌"; } .option-picker__text span * { display: inline; } .option-picker__text span br { display: none; } .option-picker__text span + span { align-items: center; bottom: 0; display: flex; left: 0; opacity: 0.5; padding: inherit; position: absolute; right: 0; top: 0; white-space: nowrap; z-index: 0; } .option-picker__v { flex: 1; } .option-picker__v:empty::after { content: "‌"; } .option-picker__value { flex: 1; } .option-picker__value[aria-disabled=true][aria-selected=true] { background: rgba(0, 0, 0, 0.125); } .option-picker__value[aria-selected=true] { background: rgba(0, 0, 255, 0.5); } .option-picker__value:focus { outline: 1px solid; outline-offset: -2px; } .option-picker__x { height: 1em; line-height: 0; margin-right: -0.125em; position: relative; user-select: none; width: 1em; } .option-picker__x::after, .option-picker__x::before { border: 1px solid; bottom: 0; content: ""; left: 50%; margin-left: -1px; position: absolute; top: 0; } .option-picker__x::after { transform: rotate(45deg); } .option-picker__x::before { transform: rotate(135deg); } .option-picker[data-size] .option-picker__arrow { display: none; } .option-picker[data-size] .option-picker__options { border-width: 1px 0 0; min-width: 0; position: static; visibility: visible; }