protokit-ui
Version:
A comprehensive React component library with hand-drawn design system. Features 30+ beautiful, accessible components including buttons, forms, navigation, data display, and layout components. Built with TypeScript and styled with CSS for modern React appl
405 lines (347 loc) • 8.1 kB
CSS
.paper-date-picker {
font-family: var(--font-family);
position: relative;
display: inline-block;
width: 100%;
max-width: 300px;
}
.paper-date-picker__input-wrapper {
position: relative;
display: flex;
align-items: center;
border: 2px solid var(--ink-black);
border-radius: 8px;
background: var(--paper-white);
transition: all var(--transition-normal);
}
.paper-date-picker__input-wrapper:hover {
border-color: var(--ink-gray);
box-shadow: var(--shadow-pencil);
}
.paper-date-picker__input-wrapper:focus-within {
border-color: var(--ink-black);
border-style: dashed;
border-width: 3px;
box-shadow: var(--shadow-pencil);
}
.paper-date-picker__input {
flex: 1;
border: none;
background: transparent;
padding: var(--spacing-sm) var(--spacing-md);
font-family: var(--font-family);
font-size: var(--font-size-base);
color: var(--ink-black);
outline: none;
cursor: pointer;
}
.paper-date-picker__input:disabled {
color: var(--pencil-gray);
cursor: not-allowed;
}
.paper-date-picker__input::placeholder {
color: var(--ink-light);
}
.paper-date-picker__trigger {
border: none;
background: transparent;
margin-right: var(--spacing-xs);
}
.paper-date-picker__clear {
border: none;
background: transparent;
margin-right: var(--spacing-xs);
}
/* Modal customization */
.paper-date-picker__modal .paper-modal__content {
padding: 0;
overflow: visible;
}
.paper-date-picker__calendar {
padding: var(--spacing-lg);
background: var(--paper-white);
border-radius: 8px;
position: relative;
}
/* Header */
.paper-date-picker__header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: var(--spacing-lg);
padding-bottom: var(--spacing-md);
border-bottom: 2px solid var(--ink-black);
}
.paper-date-picker__current-month {
display: flex;
flex-direction: column;
align-items: center;
gap: var(--spacing-xs);
}
.paper-date-picker__month {
font-size: var(--font-size-lg);
font-weight: bold;
color: var(--ink-black);
}
.paper-date-picker__year {
font-size: var(--font-size-sm);
color: var(--ink-gray);
}
/* Weekdays */
.paper-date-picker__weekdays {
display: grid;
grid-template-columns: repeat(7, 1fr);
gap: var(--spacing-xs);
margin-bottom: var(--spacing-sm);
}
.paper-date-picker__week-number-header {
font-size: var(--font-size-xs);
color: var(--ink-light);
text-align: center;
font-weight: bold;
}
.paper-date-picker__weekday {
font-size: var(--font-size-sm);
color: var(--ink-gray);
text-align: center;
font-weight: bold;
padding: var(--spacing-xs);
}
/* Calendar grid */
.paper-date-picker__grid {
display: grid;
grid-template-columns: repeat(7, 1fr);
gap: var(--spacing-xs);
margin-bottom: var(--spacing-lg);
}
.paper-date-picker__day {
position: relative;
width: 36px;
height: 36px;
border: 2px solid transparent;
border-radius: 50%;
background: transparent;
display: flex;
align-items: center;
justify-content: center;
font-family: var(--font-family);
font-size: var(--font-size-sm);
color: var(--ink-black);
cursor: pointer;
transition: all var(--transition-normal);
outline: none;
}
.paper-date-picker__day:hover:not(:disabled) {
background: var(--paper-gray);
border-color: var(--ink-black);
transform: scale(1.1);
}
.paper-date-picker__day--current-month {
color: var(--ink-black);
}
.paper-date-picker__day--other-month {
color: var(--ink-light);
}
.paper-date-picker__day--today {
border-color: var(--ink-black);
background: var(--paper-gray);
font-weight: bold;
}
.paper-date-picker__day--selected {
background: var(--ink-black);
color: var(--paper-white);
border-color: var(--ink-black);
font-weight: bold;
}
.paper-date-picker__day--selected:hover {
background: var(--ink-gray);
border-color: var(--ink-gray);
}
.paper-date-picker__day--disabled {
color: var(--pencil-gray);
cursor: not-allowed;
background: transparent;
}
.paper-date-picker__day--disabled:hover {
background: transparent;
border-color: transparent;
transform: none;
}
.paper-date-picker__day--hovered {
background: var(--ink-light);
border-color: var(--ink-black);
}
.paper-date-picker__day-number {
position: relative;
z-index: 1;
}
.paper-date-picker__week-number {
position: absolute;
top: -8px;
left: -8px;
font-size: var(--font-size-xs);
color: var(--ink-light);
background: var(--paper-white);
border-radius: 50%;
width: 16px;
height: 16px;
display: flex;
align-items: center;
justify-content: center;
font-weight: bold;
}
/* Footer */
.paper-date-picker__footer {
display: flex;
justify-content: space-between;
align-items: center;
padding-top: var(--spacing-md);
border-top: 2px solid var(--ink-black);
}
.paper-date-picker__actions {
display: flex;
gap: var(--spacing-sm);
}
/* Time picker */
.paper-date-picker__time {
margin-top: var(--spacing-lg);
padding-top: var(--spacing-md);
border-top: 2px solid var(--ink-black);
}
.paper-date-picker__time-label {
font-size: var(--font-size-sm);
font-weight: bold;
color: var(--ink-black);
margin-bottom: var(--spacing-sm);
}
.paper-date-picker__time-inputs {
display: flex;
align-items: center;
gap: var(--spacing-xs);
}
.paper-date-picker__time-select {
font-family: var(--font-family);
font-size: var(--font-size-sm);
border: 2px solid var(--ink-black);
border-radius: 4px;
background: var(--paper-white);
color: var(--ink-black);
padding: var(--spacing-xs) var(--spacing-sm);
cursor: pointer;
outline: none;
transition: all var(--transition-normal);
}
.paper-date-picker__time-select:hover {
border-color: var(--ink-gray);
background: var(--paper-gray);
}
.paper-date-picker__time-select:focus {
border-color: var(--ink-black);
border-style: dashed;
box-shadow: var(--shadow-pencil);
}
.paper-date-picker__time-separator {
font-size: var(--font-size-base);
color: var(--ink-black);
font-weight: bold;
}
/* Hand-drawn border effects */
.paper-date-picker__input-wrapper::before {
content: '';
position: absolute;
top: -1px;
left: -1px;
right: -1px;
bottom: -1px;
border: 1px solid var(--ink-black);
border-radius: 9px;
opacity: 0.3;
pointer-events: none;
transition: opacity var(--transition-normal);
}
.paper-date-picker__input-wrapper:hover::before {
opacity: 0.1;
}
.paper-date-picker__day::before {
content: '';
position: absolute;
top: -1px;
left: -1px;
right: -1px;
bottom: -1px;
border: 1px solid var(--ink-black);
border-radius: 50%;
opacity: 0.3;
pointer-events: none;
transition: opacity var(--transition-normal);
}
.paper-date-picker__day:hover::before {
opacity: 0.1;
}
/* Animations */
.paper-date-picker__calendar {
animation: datePickerSlideIn 0.3s ease-out;
}
@keyframes datePickerSlideIn {
from {
opacity: 0;
transform: scale(0.95) translateY(-10px);
}
to {
opacity: 1;
transform: scale(1) translateY(0);
}
}
.paper-date-picker__day {
animation: dayAppear 0.2s ease-out;
}
@keyframes dayAppear {
from {
opacity: 0;
transform: scale(0.8);
}
to {
opacity: 1;
transform: scale(1);
}
}
/* Responsive design */
@media (max-width: 768px) {
.paper-date-picker {
max-width: 100%;
}
.paper-date-picker__calendar {
padding: var(--spacing-md);
}
.paper-date-picker__day {
width: 32px;
height: 32px;
font-size: var(--font-size-xs);
}
.paper-date-picker__header {
margin-bottom: var(--spacing-md);
}
.paper-date-picker__month {
font-size: var(--font-size-base);
}
.paper-date-picker__year {
font-size: var(--font-size-xs);
}
.paper-date-picker__footer {
flex-direction: column;
gap: var(--spacing-sm);
align-items: stretch;
}
.paper-date-picker__actions {
justify-content: center;
}
}
/* Print styles */
@media print {
.paper-date-picker__input-wrapper {
border: 1px solid var(--ink-black);
}
.paper-date-picker__day {
border: 1px solid var(--ink-black);
}
}