index.less 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570
  1. @prefix-cls: rc-picker;
  2. @background-color: rgb(255, 240, 255);
  3. @input-placeholder-color: hsv(0, 0, 75%);
  4. @time-panel-padding-total: 180px;
  5. // @time-panel-padding-top: 90px;
  6. @time-panel-padding-top: 0;
  7. .placeholder(@color: @input-placeholder-color) {
  8. // Firefox
  9. &::-moz-placeholder {
  10. opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526
  11. }
  12. &::placeholder {
  13. color: @color;
  14. }
  15. &:placeholder-shown {
  16. text-overflow: ellipsis;
  17. }
  18. }
  19. .@{prefix-cls} {
  20. position: relative;
  21. display: inline-flex;
  22. &-rtl {
  23. direction: rtl;
  24. }
  25. &-focused {
  26. border: 1px solid blue;
  27. }
  28. &-invalid {
  29. box-shadow: 0 0 2px red;
  30. }
  31. &-panels {
  32. display: flex;
  33. flex-wrap: nowrap;
  34. }
  35. &-panel {
  36. display: inline-block;
  37. vertical-align: top;
  38. background: @background-color;
  39. border: 1px solid #666;
  40. &-focused {
  41. border-color: blue;
  42. }
  43. &-rtl {
  44. direction: rtl;
  45. }
  46. }
  47. // ===================== Shared Panel =====================
  48. &-decade-panel,
  49. &-year-panel,
  50. &-month-panel,
  51. &-week-panel,
  52. &-date-panel,
  53. &-time-panel {
  54. display: flex;
  55. flex-direction: column;
  56. table {
  57. text-align: center;
  58. border-collapse: collapse;
  59. }
  60. }
  61. // Header
  62. &-header {
  63. display: flex;
  64. > * {
  65. flex: none;
  66. }
  67. &-view {
  68. flex: auto;
  69. text-align: center;
  70. > button {
  71. padding: 0;
  72. border: 0;
  73. }
  74. }
  75. }
  76. // Content
  77. &-cell {
  78. color: #aaa;
  79. &-disabled {
  80. opacity: 0.2;
  81. }
  82. &-inner {
  83. display: inline-block;
  84. box-sizing: border-box;
  85. width: 100%;
  86. height: 20px;
  87. margin: 0;
  88. padding: 0;
  89. font-size: 12px;
  90. line-height: 20px;
  91. background: transparent;
  92. border: 0;
  93. border: none;
  94. outline: none;
  95. cursor: pointer;
  96. transition:
  97. background 0.3s,
  98. border 0.3s;
  99. &:hover {
  100. background: fade(blue, 30%);
  101. }
  102. }
  103. &-in-view {
  104. color: #333;
  105. }
  106. &-in-range > &-inner {
  107. background: fade(blue, 5%);
  108. }
  109. &-hover > &-inner {
  110. background: orange;
  111. }
  112. &-range-hover-start,
  113. &-range-hover-end,
  114. &-range-hover {
  115. position: relative;
  116. &::after {
  117. position: absolute;
  118. top: 3px;
  119. right: 0;
  120. bottom: 0;
  121. left: 0;
  122. border: 1px solid green;
  123. border-right: 0;
  124. border-left: 0;
  125. content: '';
  126. pointer-events: none;
  127. }
  128. }
  129. &-range-hover-start::after {
  130. border-left: 1px solid green !important;
  131. }
  132. &-range-hover-end::after {
  133. border-right: 1px solid green !important;
  134. }
  135. &-today > &-inner {
  136. border: 1px solid blue;
  137. }
  138. &-range-start > &-inner,
  139. &-range-end > &-inner,
  140. &-selected > &-inner {
  141. background: fade(blue, 20%);
  142. }
  143. }
  144. // Preset
  145. &-presets {
  146. background: #ccccff;
  147. ul {
  148. margin: 0;
  149. padding: 0;
  150. list-style: none;
  151. }
  152. }
  153. &-footer,
  154. &-picker-footer {
  155. background: green;
  156. }
  157. &-ranges {
  158. margin: 0;
  159. padding: 0;
  160. overflow: hidden;
  161. list-style: none;
  162. > li {
  163. display: inline-block;
  164. }
  165. }
  166. &-ok {
  167. float: right;
  168. }
  169. // ================== Year & Month Panel ==================
  170. &-year-panel,
  171. &-month-panel {
  172. .@{prefix-cls}-cell-inner {
  173. width: 80px;
  174. }
  175. }
  176. // ====================== Week Panel ======================
  177. &-week-panel {
  178. &-row {
  179. &:hover {
  180. .@{prefix-cls}-cell {
  181. background: red;
  182. }
  183. }
  184. &-selected {
  185. .@{prefix-cls}-cell {
  186. background: rgba(0, 0, 255, 0.3);
  187. }
  188. }
  189. &-range {
  190. &-hover {
  191. .@{prefix-cls}-cell {
  192. background: rgba(0, 255, 0, 0.1);
  193. }
  194. }
  195. &-start,
  196. &-end {
  197. .@{prefix-cls}-cell {
  198. background: rgba(0, 255, 0, 0.3);
  199. }
  200. }
  201. }
  202. }
  203. .@{prefix-cls}-cell,
  204. .@{prefix-cls}-cell-inner {
  205. width: 20px;
  206. }
  207. .@{prefix-cls}-cell-week {
  208. color: #999;
  209. font-weight: bold;
  210. font-size: 12px;
  211. }
  212. .@{prefix-cls}-cell:hover > .@{prefix-cls}-cell-inner,
  213. .@{prefix-cls}-cell-selected > .@{prefix-cls}-cell-inner {
  214. background: transparent;
  215. }
  216. }
  217. // ====================== Date Panel ======================
  218. &-date-panel {
  219. .@{prefix-cls}-cell-inner {
  220. width: 20px;
  221. }
  222. }
  223. // ====================== Time Panel ======================
  224. &-time-panel {
  225. width: auto;
  226. .@{prefix-cls}-content {
  227. position: relative;
  228. display: flex;
  229. max-height: 200px;
  230. direction: ltr;
  231. // &::after {
  232. // position: absolute;
  233. // top: @time-panel-padding-top;
  234. // right: -5px;
  235. // left: -5px;
  236. // height: 20px;
  237. // background: rgba(255, 0, 0, 0.05);
  238. // content: '';
  239. // pointer-events: none;
  240. // }
  241. }
  242. // &-column-holder {
  243. // display: flex;
  244. // flex-direction: column;
  245. // text-align: center;
  246. // }
  247. &-column-title {
  248. font-size: 14px;
  249. line-height: 20px;
  250. }
  251. &-column {
  252. flex: auto;
  253. width: 50px;
  254. margin: 0;
  255. // padding: 0 0 180px 0;
  256. padding: @time-panel-padding-top 0 (@time-panel-padding-total - @time-panel-padding-top);
  257. overflow-x: hidden;
  258. overflow-y: hidden;
  259. font-size: 12px;
  260. text-align: left;
  261. list-style: none;
  262. transition: background 0.3s;
  263. &-active {
  264. background: rgba(0, 0, 255, 0.1);
  265. }
  266. &:hover {
  267. overflow-y: auto;
  268. }
  269. > li {
  270. width: 50px;
  271. margin: 0;
  272. padding: 0;
  273. cursor: pointer;
  274. &.@{prefix-cls}-time-panel-cell {
  275. &-disabled {
  276. opacity: 0.5;
  277. }
  278. &-selected {
  279. background: rgba(0, 0, 255, 0.5);
  280. }
  281. }
  282. .@{prefix-cls}-time-panel-cell-inner {
  283. display: block;
  284. width: 100%;
  285. height: 20px;
  286. margin: 0;
  287. // padding: 0 0 0 12px;
  288. color: #333;
  289. line-height: 20px;
  290. text-align: center;
  291. .@{prefix-cls}-panel-rtl & {
  292. padding: 0 12px 0 0;
  293. text-align: right;
  294. }
  295. }
  296. }
  297. }
  298. }
  299. // ====================== Date Time =======================
  300. &-datetime-panel {
  301. display: flex;
  302. .@{prefix-cls}-time-panel {
  303. border-left: 1px solid #999;
  304. }
  305. .@{prefix-cls}-date-panel,
  306. .@{prefix-cls}-time-panel {
  307. transition: opacity 0.3s;
  308. }
  309. // Keyboard
  310. &-active {
  311. .@{prefix-cls}-date-panel,
  312. .@{prefix-cls}-time-panel {
  313. opacity: 0.3;
  314. &-active {
  315. opacity: 1;
  316. }
  317. }
  318. }
  319. }
  320. // ======================== Input =========================
  321. &-input {
  322. position: relative;
  323. display: inline-flex;
  324. width: 100%;
  325. .@{prefix-cls}-rtl & {
  326. text-align: right;
  327. }
  328. &-active {
  329. > input {
  330. background: rgba(0, 0, 255, 0.05);
  331. }
  332. }
  333. > input {
  334. width: 100%;
  335. .placeholder();
  336. }
  337. &-placeholder {
  338. > input {
  339. color: @input-placeholder-color;
  340. }
  341. }
  342. }
  343. &-clear {
  344. position: absolute;
  345. top: 0;
  346. inset-inline-end: 4px;
  347. cursor: pointer;
  348. &-btn::after {
  349. content: '×';
  350. }
  351. }
  352. // ======================= Dropdown =======================
  353. &-dropdown {
  354. position: absolute;
  355. box-shadow: 0 0 1px red;
  356. pointer-events: none;
  357. &-range {
  358. padding: 10px 0;
  359. }
  360. &-hidden {
  361. display: none;
  362. }
  363. &-rtl {
  364. direction: rtl;
  365. }
  366. // Panel
  367. @arrow-size: 10px;
  368. &-placement-topLeft,
  369. &-placement-topRight {
  370. .@{prefix-cls}-range-arrow {
  371. bottom: (@arrow-size / 2 + 1px);
  372. transform: rotate(135deg);
  373. }
  374. }
  375. &-placement-bottomLeft,
  376. &-placement-bottomRight {
  377. .@{prefix-cls}-range-arrow {
  378. top: (@arrow-size / 2 + 1px);
  379. transform: rotate(-45deg);
  380. }
  381. }
  382. .@{prefix-cls}-range-arrow {
  383. position: absolute;
  384. z-index: 1;
  385. width: @arrow-size;
  386. height: @arrow-size;
  387. transition: all 0.3s;
  388. &::before,
  389. &::after {
  390. position: absolute;
  391. top: 50%;
  392. inset-inline-start: 50%;
  393. box-sizing: border-box;
  394. transform: translate(-50%, -50%);
  395. content: '';
  396. .@{prefix-cls}-dropdown-rtl& {
  397. transform: translate(50%, -50%);
  398. }
  399. }
  400. &::before {
  401. width: @arrow-size;
  402. height: @arrow-size;
  403. border: (@arrow-size / 2) solid blue;
  404. border-color: blue blue transparent transparent;
  405. }
  406. &::after {
  407. width: @arrow-size - 2px;
  408. height: @arrow-size - 2px;
  409. border: ((@arrow-size - 2px) / 2) solid blue;
  410. border-color: @background-color @background-color transparent transparent;
  411. }
  412. }
  413. }
  414. // ========================================================
  415. // = Range Picker =
  416. // ========================================================
  417. &-range {
  418. position: relative;
  419. display: inline-flex;
  420. &-wrapper {
  421. display: flex;
  422. }
  423. .@{prefix-cls}-active-bar {
  424. bottom: 0;
  425. height: 3px;
  426. background: green;
  427. opacity: 0;
  428. transition: all 0.3s;
  429. pointer-events: none;
  430. }
  431. &.@{prefix-cls}-focused {
  432. .@{prefix-cls}-active-bar {
  433. opacity: 1;
  434. }
  435. }
  436. }
  437. &-panel-container {
  438. display: inline-block;
  439. vertical-align: top;
  440. transition: margin 0.3s;
  441. pointer-events: all;
  442. }
  443. &-panel-layout {
  444. display: flex;
  445. flex-wrap: nowrap;
  446. align-items: stretch;
  447. }
  448. // ========================================================
  449. // = Overflow =
  450. // ========================================================
  451. &-selector {
  452. width: 100%;
  453. }
  454. &-selection-overflow {
  455. display: flex;
  456. flex-wrap: wrap;
  457. box-sizing: border-box;
  458. width: 100%;
  459. border: 1px solid green;
  460. min-height: 1em;
  461. &-item {
  462. flex: none;
  463. max-width: 100%;
  464. }
  465. }
  466. &-selection-item {
  467. border: 1px solid blue;
  468. }
  469. &-selection-placeholder {
  470. pointer-events: none;
  471. position: absolute;
  472. left: 0;
  473. top: 0;
  474. }
  475. &-multiple-input {
  476. width: 10px;
  477. opacity: 0.1;
  478. }
  479. }