@@ -0,0 +1,647 @@
@ 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 : 1 px solid transparent ;
border-color : var ( - - input - border ) ;
border-radius : var ( - - input - radius ) ;
transition : all 0.2 s 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.2 s ;
}
. rc-picker-input > input :: placeholder {
color : var ( - - input - placeholder ) ;
opacity : 1 ;
}
/* Suffix Icon (Calendar Icon) */
. rc-picker-suffix {
margin-left : 0.5 rem ;
color : var ( - - color - gray -400 ) ;
display : flex ;
align-items : center ;
justify-content : center ;
pointer-events : none ;
font-size : var ( - - text - lg ) ;
transition : all 0.2 s ;
}
/* Clear Icon */
. rc-picker-clear {
position : absolute ;
top : 50 % ;
right : var ( - - input - padding - x ) ;
transform : translateY ( -50 % ) ;
cursor : pointer ;
opacity : 0 ;
transition :
opacity 0.2 s ,
color 0.2 s ;
background : var ( - - input - bg ) ;
color : var ( - - color - gray -400 ) ;
display : flex ;
align-items : center ;
justify-content : center ;
z-index : 1 ;
width : 1.2 em ;
height : 1.2 em ;
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.2 em ;
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 3 px 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 8 px ;
line-height : 1 ;
color : var ( - - color - gray -400 ) ;
display : inline-flex ;
}
. rc-picker-active-bar {
bottom : -1 px ;
height : 2 px ;
margin-left : var ( - - input - padding - x ) ; /* Align with input start */
background : var ( - - color - brand -500 ) ;
opacity : 0 ;
transition : all 0.3 s 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 6 px 16 px 0 rgba ( 0 , 0 , 0 , 0.08 ) ,
0 3 px 6 px -4 px rgba ( 0 , 0 , 0 , 0.12 ) ,
0 9 px 28 px 8 px rgba ( 0 , 0 , 0 , 0.05 ) ;
transition : margin 0.3 s ;
border : 1 px 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 : 1 px solid var ( - - color - gray -100 ) ;
}
/* =========================================
HEADER SECTION
========================================= */
. rc-picker-header {
display : flex ;
padding : 0 8 px ;
border-bottom : 1 px solid var ( - - color - gray -100 ) ;
min-height : 40 px ;
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 : 4 px ;
}
. rc-picker-header-view button {
color : var ( - - color - gray -800 ) ;
font-weight : inheriting ;
padding : 0 4 px ;
background : transparent ;
border : 0 ;
cursor : pointer ;
font-size : var ( - - text - sm ) ;
line-height : 40 px ;
transition : color 0.2 s ;
}
. 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.6 em ;
font-size : 14 px ;
color : var ( - - color - gray -400 ) ;
cursor : pointer ;
background : transparent ;
border : 0 ;
line-height : 40 px ;
padding : 0 5 px ;
display : inline-flex ;
justify-content : center ;
align-items : center ;
transition : color 0.2 s ;
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 : 8 px 12 px ;
}
. rc-picker-content {
width : 100 % ;
table-layout : fixed ;
border-collapse : collapse ;
}
. rc-picker-content th ,
. rc-picker-content td {
position : relative ;
min-width : 24 px ;
font-weight : 400 ;
}
. rc-picker-content th {
height : 32 px ;
color : var ( - - color - gray -500 ) ;
line-height : 32 px ;
text-align : center ;
}
. rc-picker-cell {
padding : 4 px 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 : 24 px ;
height : 24 px ;
line-height : 24 px ;
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.2 s ,
border 0.2 s ,
color 0.2 s ;
text-align : center ;
margin : 0 auto ;
padding : 0 4 px ; /* 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 12 px ;
min-width : 48 px ;
}
/* 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 2 px 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 : 1 px solid var ( - - color - brand -500 ) ;
border-radius : var ( - - radius - md ) ;
content : '' ;
transition : all 0.2 s ;
}
. 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 : 2 px 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 : 1 px solid var ( - - color - gray -100 ) ;
width : auto ;
}
. rc-picker-time-panel . rc-picker-content {
display : flex ;
max-height : 224 px ;
height : 224 px ;
}
. rc-picker-time-panel-column {
flex : 1 0 auto ;
width : 60 px ; /* Wider for easier clicking */
margin : 0 ;
padding : 0 ;
overflow-y : hidden ;
text-align : left ;
list-style : none ;
transition : background 0.3 s ;
overflow-x : hidden ;
border-left : 1 px 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 : 28 px ;
margin : 0 ;
padding : 0 0 0 12 px ;
color : var ( - - color - gray -800 ) ;
line-height : 28 px ;
text-align : left ;
cursor : pointer ;
transition : background 0.2 s ;
}
. 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.3 s ;
}
/* =========================================
FOOTER
========================================= */
. rc-picker-footer {
width : auto ;
min-width : 100 % ;
line-height : 38 px ;
text-align : center ;
border-top : 1 px solid var ( - - color - gray -100 ) ;
padding : 0 12 px ;
}
. 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 : 8 px ;
color : var ( - - color - brand -500 ) ;
cursor : pointer ;
transition : color 0.2 s ;
}
. 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 : 2 px 12 px ;
height : 24 px ;
cursor : pointer ;
font-size : var ( - - text - sm ) ;
transition : background 0.2 s ;
}
. 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.2 s ;
}
. 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 3 px 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 3 px 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 3 px var ( - - color - success -100 ) ;
}
}