Files
trackgo-fe/packages/ui/src/components/forms/styles/picker.style copy.css
T

648 lines
16 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
@layer components {
/* =========================================
PICKER BASE (INPUT WRAPPER)
========================================= */
.rc-picker {
box-sizing: border-box;
display: inline-flex;
align-items: center;
width: 100%;
position: relative;
/* Using variable dimensions from globals.css */
height: var(--input-height);
padding: 0 var(--input-padding-x);
font-size: var(--input-font-size);
line-height: 1.5;
color: var(--input-text);
background-color: var(--input-bg);
border: 1px solid transparent;
border-color: var(--input-border);
border-radius: var(--input-radius);
transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
outline: none;
}
/* Input inside Picker */
.rc-picker-input {
position: relative;
display: flex;
align-items: center;
width: 100%;
height: 100%;
flex: 1;
}
.rc-picker-input > input {
width: 100%;
height: 100%;
min-width: 0;
padding: 0;
background-color: transparent;
border: 0;
outline: none;
color: inherit;
font-size: inherit;
line-height: inherit;
transition: all 0.2s;
}
.rc-picker-input > input::placeholder {
color: var(--input-placeholder);
opacity: 1;
}
/* Suffix Icon (Calendar Icon) */
.rc-picker-suffix {
margin-left: 0.5rem;
color: var(--color-gray-400);
display: flex;
align-items: center;
justify-content: center;
pointer-events: none;
font-size: var(--text-lg);
transition: all 0.2s;
}
/* Clear Icon */
.rc-picker-clear {
position: absolute;
top: 50%;
right: var(--input-padding-x);
transform: translateY(-50%);
cursor: pointer;
opacity: 0;
transition:
opacity 0.2s,
color 0.2s;
background: var(--input-bg);
color: var(--color-gray-400);
display: flex;
align-items: center;
justify-content: center;
z-index: 1;
width: 1.2em;
height: 1.2em;
border-radius: 50%;
}
.rc-picker:hover:not(.rc-picker-disabled) .rc-picker-clear {
opacity: 1;
}
.rc-picker-clear:hover {
color: var(--color-gray-500);
background-color: var(--color-gray-100);
}
.rc-picker-clear-btn::after {
content: '×';
font-size: 1.2em;
line-height: 1;
}
/* =========================================
STATES (HOVER, FOCUS, DISABLED, ERROR)
========================================= */
/* Hover State */
.rc-picker:hover:not(.rc-picker-disabled) {
border-color: var(--input-border-hover);
}
/* Focused State */
.rc-picker-focused {
border-color: var(--focus-border-color);
box-shadow: 0 0 0 3px var(--focus-ring-color);
z-index: 1;
}
/* Disabled State */
.rc-picker-disabled {
background-color: var(--disabled-bg);
color: var(--disabled-text);
border-color: var(--disabled-border);
cursor: not-allowed;
}
.rc-picker-disabled input {
cursor: not-allowed;
}
/* Range Picker Specific */
.rc-picker-range.rc-picker-focused .rc-picker-active-bar {
opacity: 1;
}
.rc-picker-range-separator {
align-items: center;
padding: 0 8px;
line-height: 1;
color: var(--color-gray-400);
display: inline-flex;
}
.rc-picker-active-bar {
bottom: -1px;
height: 2px;
margin-left: var(--input-padding-x); /* Align with input start */
background: var(--color-brand-500);
opacity: 0;
transition: all 0.3s ease-out;
pointer-events: none;
z-index: 2;
position: absolute;
left: 0;
width: auto;
}
/* =========================================
PICKER DROPDOWN PANEL (THE MEAT)
========================================= */
.rc-picker-dropdown {
position: absolute;
z-index: 1050;
box-sizing: border-box;
font-size: var(--text-sm);
font-family: inherit;
}
.rc-picker-dropdown-hidden {
display: none;
}
/* Arrow styling removed for modern clean look (AntD v5/v6 typically removes large arrows) */
.rc-picker-dropdown .rc-picker-range-arrow {
display: none;
}
/* Panel Container */
.rc-picker-panel-container {
overflow: hidden;
vertical-align: top;
background: #fff;
border-radius: var(--radius-lg);
/* Elevation 3/4 equivalent */
box-shadow:
0 6px 16px 0 rgba(0, 0, 0, 0.08),
0 3px 6px -4px rgba(0, 0, 0, 0.12),
0 9px 28px 8px rgba(0, 0, 0, 0.05);
transition: margin 0.3s;
border: 1px solid var(--color-gray-100);
}
.rc-picker-panel-layout {
display: flex;
flex-wrap: nowrap;
align-items: stretch;
}
.rc-picker-panel {
vertical-align: top;
background: transparent;
display: inline-flex;
flex-direction: column;
}
/* Double Panel (Range Picker) */
.rc-picker-panel + .rc-picker-panel {
border-left: 1px solid var(--color-gray-100);
}
/* =========================================
HEADER SECTION
========================================= */
.rc-picker-header {
display: flex;
padding: 0 8px;
border-bottom: 1px solid var(--color-gray-100);
min-height: 40px;
align-items: center;
justify-content: space-between;
}
.rc-picker-header > * {
flex: none;
}
.rc-picker-header-view {
flex: auto;
text-align: center;
font-weight: var(--font-weight-semibold);
display: flex;
justify-content: center;
gap: 4px;
}
.rc-picker-header-view button {
color: var(--color-gray-800);
font-weight: inheriting;
padding: 0 4px;
background: transparent;
border: 0;
cursor: pointer;
font-size: var(--text-sm);
line-height: 40px;
transition: color 0.2s;
}
.rc-picker-header-view button:hover {
color: var(--color-brand-500);
}
/* Navigation Buttons (< << >> >) */
.rc-picker-header-super-prev-btn,
.rc-picker-header-prev-btn,
.rc-picker-header-next-btn,
.rc-picker-header-super-next-btn {
min-width: 1.6em;
font-size: 14px;
color: var(--color-gray-400);
cursor: pointer;
background: transparent;
border: 0;
line-height: 40px;
padding: 0 5px;
display: inline-flex;
justify-content: center;
align-items: center;
transition: color 0.2s;
position: relative;
}
.rc-picker-header-super-prev-btn:hover,
.rc-picker-header-prev-btn:hover,
.rc-picker-header-next-btn:hover,
.rc-picker-header-super-next-btn:hover {
color: var(--color-gray-900);
}
/* Arrow Symbols using pseudo elements if needed, or rely on RC Picker default text symbols but styled */
/* RC Picker default uses unicode arrows usually. */
/* =========================================
BODY SECTION (CALENDAR GRID)
========================================= */
.rc-picker-body {
padding: 8px 12px;
}
.rc-picker-content {
width: 100%;
table-layout: fixed;
border-collapse: collapse;
}
.rc-picker-content th,
.rc-picker-content td {
position: relative;
min-width: 24px;
font-weight: 400;
}
.rc-picker-content th {
height: 32px;
color: var(--color-gray-500);
line-height: 32px;
text-align: center;
}
.rc-picker-cell {
padding: 4px 0;
color: var(--color-gray-400);
cursor: pointer;
}
.rc-picker-cell-in-view {
color: var(--color-gray-800);
}
.rc-picker-cell-disabled {
cursor: not-allowed;
color: var(--disabled-text);
}
.rc-picker-cell-disabled .rc-picker-cell-inner {
background: var(--disabled-bg);
}
/* Inner Cell (The Circle/Square) */
.rc-picker-cell-inner {
position: relative;
z-index: 2;
display: inline-block;
min-width: 24px;
height: 24px;
line-height: 24px;
border-radius: var(
--radius-md
); /* Ant Design v5 uses slightly rounded squares, not full circles usually, but we can do md radius */
transition:
background 0.2s,
border 0.2s,
color 0.2s;
text-align: center;
margin: 0 auto;
padding: 0 4px; /* For longer text like months */
}
/* Month/Year Panel cells are wider */
.rc-picker-month-panel .rc-picker-cell-inner,
.rc-picker-year-panel .rc-picker-cell-inner,
.rc-picker-quarter-panel .rc-picker-cell-inner,
.rc-picker-decade-panel .rc-picker-cell-inner {
width: auto;
padding: 0 12px;
min-width: 48px;
}
/* Hover State */
.rc-picker-cell:hover:not(.rc-picker-cell-selected):not(.rc-picker-cell-range-start):not(
.rc-picker-cell-range-end
):not(.rc-picker-cell-disabled)
.rc-picker-cell-inner {
background: var(--color-gray-100);
}
/* Selected Date */
.rc-picker-cell-selected .rc-picker-cell-inner,
.rc-picker-cell-range-start .rc-picker-cell-inner,
.rc-picker-cell-range-end .rc-picker-cell-inner {
color: #fff;
background: var(--color-brand-500);
box-shadow: 0 2px 0 rgba(0, 0, 0, 0.045);
}
.rc-picker-cell-selected:hover .rc-picker-cell-inner {
background: var(--color-brand-600);
}
/* Today */
.rc-picker-cell-today .rc-picker-cell-inner::before {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: 1;
border: 1px solid var(--color-brand-500);
border-radius: var(--radius-md);
content: '';
transition: all 0.2s;
}
.rc-picker-cell-selected.rc-picker-cell-today .rc-picker-cell-inner::before {
border-color: #fff; /* White border inside selected today */
}
/* =========================================
RANGE SELECTION STYLING
========================================= */
/* The strip between start and end */
.rc-picker-cell-in-range > .rc-picker-cell-inner {
background: var(--color-brand-50);
border-radius: 0;
min-width: 100%; /* Fill the whole cell width */
color: var(--color-gray-800);
}
.rc-picker-cell-in-range::before {
background: var(--color-brand-50);
}
/* Range Edge Adjustments */
.rc-picker-cell-range-start > .rc-picker-cell-inner {
border-top-right-radius: 0;
border-bottom-right-radius: 0;
border-top-left-radius: var(--radius-md);
border-bottom-left-radius: var(--radius-md);
}
.rc-picker-cell-range-end > .rc-picker-cell-inner {
border-top-left-radius: 0;
border-bottom-left-radius: 0;
border-top-right-radius: var(--radius-md);
border-bottom-right-radius: var(--radius-md);
}
/* Ghost/Pseudo elements for continuous range background */
/* RC Picker handles this logic via class combinations.
We need to ensure the background flows nicely. */
.rc-picker-cell-range-start.rc-picker-cell-range-end .rc-picker-cell-inner {
border-radius: var(--radius-md);
}
/* Range Hover (when selecting the second date) */
.rc-picker-cell-range-hover-start::after,
.rc-picker-cell-range-hover-end::after,
.rc-picker-cell-range-hover::after {
content: ''; /* Should show dotted line or lighter highlight */
position: absolute;
top: 50%;
left: 0;
right: 0;
bottom: 0;
border-top: 2px dashed var(--color-brand-300);
transform: translateY(-50%);
z-index: 0;
display: none; /* AntD v6 doesn't really emphasize this as much, can keep simple */
}
/* =========================================
TIME PANEL
========================================= */
.rc-picker-time-panel {
border-left: 1px solid var(--color-gray-100);
width: auto;
}
.rc-picker-time-panel .rc-picker-content {
display: flex;
max-height: 224px;
height: 224px;
}
.rc-picker-time-panel-column {
flex: 1 0 auto;
width: 60px; /* Wider for easier clicking */
margin: 0;
padding: 0;
overflow-y: hidden;
text-align: left;
list-style: none;
transition: background 0.3s;
overflow-x: hidden;
border-left: 1px solid var(--color-gray-100); /* Separator between hrs/min/sec */
}
.rc-picker-time-panel-column:first-child {
border-left: 0;
}
.rc-picker-time-panel-column:hover {
overflow-y: auto;
}
.rc-picker-time-panel-column > li {
margin: 0;
padding: 0;
}
.rc-picker-time-panel-column > li .rc-picker-time-panel-cell-inner {
display: block;
width: 100%;
height: 28px;
margin: 0;
padding: 0 0 0 12px;
color: var(--color-gray-800);
line-height: 28px;
text-align: left;
cursor: pointer;
transition: background 0.2s;
}
.rc-picker-time-panel-column > li:hover .rc-picker-time-panel-cell-inner {
background: var(--color-gray-100);
}
.rc-picker-time-panel-column > li.rc-picker-time-panel-cell-selected .rc-picker-time-panel-cell-inner {
background: var(--color-brand-50);
color: var(--color-brand-600);
font-weight: 600;
}
.rc-picker-time-panel-column > li.rc-picker-time-panel-cell-disabled .rc-picker-time-panel-cell-inner {
color: var(--disabled-text);
cursor: not-allowed;
background: transparent;
}
/* Date + Time Layout */
.rc-picker-datetime-panel {
display: flex;
}
.rc-picker-datetime-panel .rc-picker-date-panel,
.rc-picker-datetime-panel .rc-picker-time-panel {
transition: opacity 0.3s;
}
/* =========================================
FOOTER
========================================= */
.rc-picker-footer {
width: auto;
min-width: 100%;
line-height: 38px;
text-align: center;
border-top: 1px solid var(--color-gray-100);
padding: 0 12px;
}
.rc-picker-footer-extra {
text-align: left;
}
/* Ranges (Presets) */
.rc-picker-ranges {
margin: 0;
padding: 0;
list-style: none;
overflow: hidden;
display: flex;
justify-content: space-between;
align-items: center;
}
.rc-picker-ranges > li {
display: inline-block;
}
.rc-picker-ranges .rc-picker-preset > .rc-picker-preset-tag {
display: inline-block;
margin-right: 8px;
color: var(--color-brand-500);
cursor: pointer;
transition: color 0.2s;
}
.rc-picker-ranges .rc-picker-preset > .rc-picker-preset-tag:hover {
color: var(--color-brand-600);
}
.rc-picker-ranges .rc-picker-ok {
float: right;
}
/* OK Button */
.rc-picker-ok button {
background: var(--color-brand-500);
color: #fff;
border: none;
border-radius: var(--radius-sm);
padding: 2px 12px;
height: 24px;
cursor: pointer;
font-size: var(--text-sm);
transition: background 0.2s;
}
.rc-picker-ok button:hover {
background: var(--color-brand-600);
}
.rc-picker-ok button:disabled {
background: var(--disabled-bg);
color: var(--disabled-text);
cursor: not-allowed;
}
.rc-picker-now-btn {
color: var(--color-brand-500);
cursor: pointer;
transition: color 0.2s;
}
.rc-picker-now-btn:hover {
color: var(--color-brand-600);
}
/* =========================================
STATUS MODIFIERS (ERROR, WARNING, ETC)
========================================= */
.picker-status-error.rc-picker {
border-color: var(--color-error-500);
}
.picker-status-error.rc-picker:hover:not(.rc-picker-disabled) {
border-color: var(--color-error-600);
}
.picker-status-error.rc-picker.rc-picker-focused {
border-color: var(--color-error-600);
box-shadow: 0 0 0 3px var(--color-error-100);
}
.picker-status-warning.rc-picker {
border-color: var(--color-warning-500);
}
.picker-status-warning.rc-picker:hover:not(.rc-picker-disabled) {
border-color: var(--color-warning-600);
}
.picker-status-warning.rc-picker.rc-picker-focused {
border-color: var(--color-warning-600);
box-shadow: 0 0 0 3px var(--color-warning-100);
}
.picker-status-success.rc-picker {
border-color: var(--color-success-500);
}
.picker-status-success.rc-picker:hover:not(.rc-picker-disabled) {
border-color: var(--color-success-600);
}
.picker-status-success.rc-picker.rc-picker-focused {
border-color: var(--color-success-600);
box-shadow: 0 0 0 3px var(--color-success-100);
}
}