UNPKG

react-accessible-time-picker

Version:

A simple and customizable time picker component for React

271 lines (228 loc) 4.66 kB
.container { display: flex; flex-direction: column; gap: 0.5rem; width: 100%; } .container.disabled{ opacity: 0.5; cursor: not-allowed; } .label { font-size: 0.875rem; font-weight: 500; color: var(--time-text); } .label span { color: #ef4444; margin-left: 0.125rem; } .timePicker { display: flex; align-items: center; background-color: var(--time-bg); border: 1px solid var(--time-border); border-radius: 0.375rem; padding: 0.5rem; transition: all 0.2s ease-in-out; } .timePicker:hover { border-color: var(--time-focus-border); } .timeInputs { display: flex; align-items: center; flex: 1; } .timeInput { width: 2rem; text-align: center; border: none; background-color: transparent; color: var(--time-text); font-size: 1rem; outline: none; padding: 0; font-variant-numeric: tabular-nums; } .timeInput:focus { border-radius: 0.25rem; outline: 1px solid var(--time-focus-border); background-color: transparent; } .timeInput::-webkit-inner-spin-button, .timeInput::-webkit-outer-spin-button { -webkit-appearance: none; margin: 0; } .timeInput::placeholder { color: var(--time-disabled-text); } .separator { font-size: 1rem; font-weight: bold; padding: 0 0.25rem; color: var(--time-separator); } .pipe { margin: 0 0.5rem; color: var(--time-separator); opacity: 0.6; } .periodSelect { background: transparent; border: none; color: var(--time-text); font-size: 0.875rem; padding: 0.25rem 0.5rem; display: flex; align-items: center; gap: 0.25rem; cursor: pointer; border-radius: 0.25rem; transition: background-color 0.2s; } .periodSelect:hover, .periodSelect:focus { background-color: var(--time-hover); } .periodSelect:focus{ outline: none; } .timerTrigger { display: flex; align-items: center; justify-content: center; background: transparent; border: none; cursor: pointer; padding: 0.25rem; color: var(--time-icon); border-radius: 0.25rem; transition: background-color 0.2s; } .timerTrigger:hover { background-color: var(--time-hover); } .timerTrigger:focus { outline: none; background-color: var(--time-focus); } .timerTrigger[disabled] { cursor: not-allowed; opacity: 0.5; } /* Popover styles */ .popoverContent { background-color: var(--time-popover-bg); border-radius: 0.5rem; box-shadow: var(--time-popover-shadow); border: 1px solid var(--time-border); padding: 1rem; width: 15rem; z-index: 10; height: 15rem; } .popoverColumns { display: flex; gap: 1rem; height: 100%; } .popoverColumn { flex: 1; display: flex; flex-direction: column; gap: 0.5rem; } .popoverColumnTitle { font-size: 0.75rem; font-weight: 500; color: var(--time-text); opacity: 0.7; text-align: center; padding-bottom: 0.25rem; border-bottom: 1px solid var(--time-border); } .popoverColumnContent { display: flex; flex-direction: column; gap: 0.25rem; overflow-y: auto; } .popoverItem { padding: 0.25rem; background: transparent; border: none; border-radius: 0.25rem; color: var(--time-text); cursor: pointer; text-align: center; transition: all 0.2s; } .popoverItem:hover { background-color: var(--time-hover); } .popoverItem:focus { outline: none; background-color: var(--time-focus); } .popoverActiveItem { background-color: var(--time-active); font-weight: 500; } .popoverActiveItem:focus { background-color: var(--time-active); } /* Select styles */ .selectContent { background-color: var(--time-popover-bg); border-radius: 0.375rem; box-shadow: var(--time-popover-shadow); border: 1px solid var(--time-border); overflow: hidden; z-index: 10; } .selectScrollButton { display: flex; align-items: center; justify-content: center; height: 1.5rem; background-color: var(--time-bg); color: var(--time-text); } .selectItem { font-size: 0.875rem; color: var(--time-text); display: flex; align-items: center; padding: 0.5rem; padding-left: 1.5rem; position: relative; user-select: none; } .selectItem[data-highlighted] { background-color: var(--time-hover); outline: none; } .selectItem[data-state='checked'] { background-color: var(--time-active); } .selectIndicator { position: absolute; left: 0.5rem; display: inline-flex; align-items: center; } /* Disabled states */ .timePicker:has(input:disabled) { background-color: var(--time-disabled-bg); border-color: var(--time-border); cursor: not-allowed; } .timeInput:disabled { color: var(--time-disabled-text); cursor: not-allowed; } .periodSelect[data-disabled] { opacity: 0.5; cursor: not-allowed; }