fileinput.scss 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913
  1. /*!
  2. * bootstrap-fileinput vh.1.0.0 from v5.5.2
  3. * http://plugins.krajee.com/file-input
  4. *
  5. * Krajee default styling for bootstrap-fileinput.
  6. *
  7. * Author: Kartik Visweswaran
  8. * Copyright: 2014 - 2022, Kartik Visweswaran, Krajee.com
  9. *
  10. * Licensed under the BSD-3-Clause
  11. * https://github.com/kartik-v/bootstrap-fileinput/blob/master/LICENSE.md
  12. */
  13. //colors
  14. $mountain-mist: #999 !default;
  15. $apple-blossom: #a94442 !default;
  16. $vanilla-ice: #f2dede !default;
  17. $oyster-pink: #ebccd1 !default;
  18. $gallery: #eee !default;
  19. $alto: #ddd !default;
  20. $celeste: #ccc !default;
  21. $green: #008000 !default;
  22. $mine-shaft: #333 !default;
  23. $boston-blue: #428bca !default;
  24. $pelorous: #17a2b8 !default;
  25. $black: #000 !default;
  26. $white: #fff !default;
  27. $black-20: rgba(0, 0, 0, 0.2) !default;
  28. $black-30: rgba(0, 0, 0, 0.3) !default;
  29. $black-40: rgba(0, 0, 0, 0.4) !default;
  30. $mystic: #e1edf7 !default;
  31. $perano: #a1abff !default;
  32. $silver-chalice: #aaa !default;
  33. $viking: #5acde2 !default;
  34. $curious-blue: #1c94c4 !default;
  35. $link-water: #d9edf7 !default;
  36. $gray-1: #6c757d !default;
  37. //fonts
  38. $font-0: Impact !default;
  39. $font-1: Charcoal !default;
  40. $font-2: sans-serif !default;
  41. $font-3: Menlo !default;
  42. $font-4: Monaco !default;
  43. $font-5: Consolas !default;
  44. $font-6: "Courier New" !default;
  45. $font-7: monospace !default;
  46. //urls
  47. $url-0: url(../img/loading.gif) !default;
  48. $url-1: url(../img/loading-sm.gif) !default;
  49. //standard measures
  50. $radius: 4px !default;
  51. $pad: 5px !default;
  52. $border: 1px !default;
  53. $caption-name-padding-left: 25px;
  54. $caption-lg-name-padding-left: 30px;
  55. $caption-sm-name-padding-left: 22px;
  56. //operations
  57. @function multiply($pixels, $multiplier) {
  58. @return $pixels * $multiplier;
  59. }
  60. //@extend-elements
  61. %set-invisible {
  62. width: 0;
  63. height: 0;
  64. }
  65. %set-hidden {
  66. display: none;
  67. }
  68. %set-absolute {
  69. position: absolute;
  70. }
  71. %set-relative {
  72. position: relative;
  73. }
  74. %set-text-left {
  75. text-align: left;
  76. }
  77. %set-error {
  78. @extend %set-text-left;
  79. margin: 0;
  80. }
  81. %set-indicator {
  82. float: left;
  83. margin-top: multiply($pad, 2);
  84. width: multiply($pad, 3.2);
  85. height: multiply($pad, 3.2);
  86. }
  87. %set-progress {
  88. height: multiply($pad, 2.2);
  89. font-size: multiply($pad, 1.8);
  90. }
  91. %set-caption {
  92. display: block;
  93. white-space: nowrap;
  94. overflow: hidden;
  95. text-overflow: ellipsis;
  96. width: multiply($pad, 32);
  97. height: multiply($pad, 3);
  98. margin: auto;
  99. }
  100. %set-object {
  101. max-width: 100%;
  102. max-height: 100%;
  103. width: auto;
  104. }
  105. %set-object-video {
  106. @extend %set-object;
  107. height: 100%;
  108. }
  109. %set-object-default {
  110. width: 100%;
  111. }
  112. .kv-hidden {
  113. @extend %set-hidden;
  114. }
  115. .hide-content .kv-file-content {
  116. @extend %set-hidden;
  117. }
  118. .file-input {
  119. @extend %set-relative;
  120. }
  121. .file-no-browse {
  122. @extend %set-absolute;
  123. left: 50%;
  124. bottom: 20%;
  125. width: 1px;
  126. height: 1px;
  127. font-size: 0;
  128. opacity: 0;
  129. border: none;
  130. background: none;
  131. outline: none;
  132. box-shadow: none;
  133. }
  134. .file-loading {
  135. input[type=file] {
  136. @extend %set-invisible;
  137. }
  138. &:before {
  139. @extend %set-relative;
  140. content: " Loading...";
  141. display: inline-block;
  142. padding-left: multiply($pad, 4);
  143. line-height: multiply($pad, 3.2);
  144. font-size: multiply($pad, 2.6);
  145. font-variant: small-caps;
  146. color: $mountain-mist;
  147. background: transparent $url-0 top left no-repeat;
  148. }
  149. }
  150. input[type=file].file-loading {
  151. @extend %set-invisible;
  152. }
  153. .file-object {
  154. margin: 0 0 (-$pad) 0;
  155. padding: 0;
  156. }
  157. .btn-file {
  158. @extend %set-relative;
  159. overflow: hidden;
  160. input[type=file] {
  161. @extend %set-absolute;
  162. top: 0;
  163. left: 0;
  164. min-width: 100%;
  165. min-height: 100%;
  166. text-align: right;
  167. opacity: 0;
  168. background: none repeat scroll 0 0 transparent;
  169. cursor: inherit;
  170. display: block;
  171. }
  172. ::-ms-browse {
  173. font-size: multiply($pad, 2000);
  174. width: 100%;
  175. height: 100%;
  176. }
  177. }
  178. .file-caption {
  179. @extend %set-relative;
  180. .input-group {
  181. align-items: center;
  182. }
  183. &.icon-visible {
  184. .file-caption-icon {
  185. display: inline-block;
  186. }
  187. .file-caption-name {
  188. padding-left: $caption-name-padding-left;
  189. }
  190. > .input-group-lg .file-caption-name {
  191. padding-left: $caption-lg-name-padding-left;
  192. }
  193. > .input-group-sm .file-caption-name {
  194. padding-left: $caption-sm-name-padding-left;
  195. }
  196. }
  197. }
  198. .file-caption-icon {
  199. @extend %set-hidden;
  200. @extend %set-absolute;
  201. left: multiply($pad, 0.8);
  202. padding: $pad + 2px $pad;
  203. }
  204. .input-group-lg .file-caption-icon {
  205. font-size: 1.25rem;
  206. }
  207. .input-group-sm .file-caption-icon {
  208. font-size: 0.875rem;
  209. padding: 0.25rem;
  210. }
  211. .file-error-message {
  212. color: $apple-blossom;
  213. background-color: $vanilla-ice;
  214. margin: $pad;
  215. border: $border solid $oyster-pink;
  216. border-radius: $radius;
  217. padding: multiply($pad, 3);
  218. pre {
  219. @extend %set-error;
  220. margin: $pad 0;
  221. }
  222. ul {
  223. @extend %set-error;
  224. }
  225. }
  226. .file-caption-disabled {
  227. background-color: $gallery;
  228. cursor: not-allowed;
  229. opacity: 1;
  230. }
  231. .file-preview {
  232. @extend %set-relative;
  233. border-radius: multiply($radius, 1.25);
  234. border: $border solid $alto;
  235. padding: multiply($pad, 1.6);
  236. width: 100%;
  237. margin-bottom: $pad;
  238. .btn-xs {
  239. padding: multiply($pad, 0.2) $pad;
  240. font-size: multiply($pad, 2.4);
  241. line-height: 1.5;
  242. border-radius: multiply($radius, 0.75);
  243. }
  244. .fileinput-remove {
  245. @extend %set-absolute;
  246. top: multiply($pad, 0.2);
  247. right: multiply($pad, 0.2);
  248. line-height: multiply($pad, 2);
  249. }
  250. .clickable {
  251. cursor: pointer;
  252. }
  253. .kv-zoom-cache {
  254. display: none;
  255. }
  256. }
  257. .file-preview-image {
  258. font: multiply($pad, 8) $font-0, $font-1, $font-2;
  259. color: $green;
  260. width: auto;
  261. height: auto;
  262. max-width: 100%;
  263. max-height: 100%;
  264. }
  265. .krajee-default {
  266. &.file-preview-frame {
  267. @extend %set-relative;
  268. margin: multiply($pad, 1.6);
  269. border: $border solid $black-20;
  270. box-shadow: 0 0 multiply($pad, 2) 0 $black-20;
  271. padding: multiply($pad, 1.2);
  272. float: left;
  273. text-align: center;
  274. height: 244px;
  275. .kv-file-content {
  276. width: multiply($pad, 42.6);
  277. height: multiply($pad, 28);
  278. &.kv-pdf-rendered {
  279. width: 400px;
  280. }
  281. }
  282. .file-thumbnail-footer {
  283. height: multiply($pad, 14);
  284. }
  285. &:not(.file-preview-error):hover {
  286. border: $border solid $black-30;
  287. box-shadow: 0 0 multiply($pad, 2) 0 $black-40;
  288. }
  289. &[data-template="audio"] .kv-file-content {
  290. width: 240px;
  291. height: 55px;
  292. }
  293. }
  294. .file-preview-text {
  295. color: $boston-blue;
  296. border: $border solid $alto;
  297. outline: none;
  298. resize: none;
  299. }
  300. .file-preview-html {
  301. border: $border solid $alto;
  302. }
  303. .file-actions {
  304. @extend %set-text-left;
  305. }
  306. .file-other-error {
  307. @extend %set-text-left;
  308. }
  309. .file-other-icon {
  310. font-size: 6em;
  311. line-height: 1;
  312. }
  313. .file-footer-buttons {
  314. float: right;
  315. }
  316. .file-footer-caption {
  317. display: block;
  318. text-align: center;
  319. padding-top: multiply($pad, 0.8);
  320. font-size: multiply($pad, 2.2);
  321. color: $mountain-mist;
  322. margin-bottom: multiply($pad, 6);
  323. }
  324. .file-preview-error {
  325. opacity: 0.65;
  326. box-shadow: none;
  327. }
  328. .file-drag-handle {
  329. @extend %set-indicator;
  330. }
  331. .file-upload-indicator {
  332. @extend %set-indicator;
  333. }
  334. .file-thumb-progress {
  335. @extend %set-absolute;
  336. top: multiply($pad, 7.4);
  337. left: 0;
  338. right: 0;
  339. .progress {
  340. @extend %set-progress;
  341. color: $celeste;
  342. }
  343. .progress-bar {
  344. @extend %set-progress;
  345. font-family: Verdana, Helvetica, sans-serif;
  346. }
  347. }
  348. .file-thumbnail-footer {
  349. @extend %set-relative;
  350. }
  351. .file-caption-info {
  352. @extend %set-caption;
  353. }
  354. .file-size-info {
  355. @extend %set-caption;
  356. }
  357. &.kvsortable-ghost {
  358. background: $mystic;
  359. border: multiply($border, 2) solid $perano;
  360. }
  361. .file-preview-other:hover {
  362. opacity: 0.8;
  363. }
  364. .file-preview-frame:not(.file-preview-error) .file-footer-caption:hover {
  365. color: $black;
  366. }
  367. }
  368. .file-upload-stats {
  369. font-size: 10px;
  370. text-align: center;
  371. width: 100%;
  372. }
  373. .kv-upload-progress {
  374. .progress {
  375. height: multiply($pad, 4);
  376. line-height: multiply($pad, 4);
  377. margin: multiply($pad, 2) 0;
  378. overflow: hidden;
  379. color: $celeste;
  380. }
  381. .progress-bar {
  382. height: multiply($pad, 4);
  383. font-family: Verdana, Helvetica, sans-serif;
  384. }
  385. .file-upload-stats {
  386. font-size: 12px;
  387. margin: -10px 0 5px;
  388. }
  389. }
  390. .file-thumb-progress {
  391. .progress {
  392. background-color: #ccc;
  393. }
  394. .progress-bar {
  395. font-size: 0.7rem;
  396. font-family: Verdana, Helvetica, sans-serif;
  397. }
  398. }
  399. .file-zoom-dialog {
  400. .file-other-icon {
  401. //noinspection CssOverwrittenProperties
  402. font-size: 22em;
  403. //noinspection CssOverwrittenProperties
  404. font-size: 50vmin;
  405. }
  406. .modal-dialog {
  407. @extend %set-relative;
  408. width: auto;
  409. }
  410. .modal-header {
  411. display: flex;
  412. align-items: center;
  413. justify-content: space-between;
  414. &:before {
  415. @extend %set-hidden;
  416. }
  417. &:after {
  418. @extend %set-hidden;
  419. }
  420. }
  421. .btn-navigate {
  422. @extend %set-absolute;
  423. margin: 0 0.1rem;
  424. padding: 0;
  425. font-size: 1.2rem;
  426. width: 2.4rem;
  427. height: 2.4rem;
  428. top: 50%;
  429. border-radius: 50%;
  430. text-align: center;
  431. * {
  432. width: auto;
  433. }
  434. }
  435. .floating-buttons {
  436. @extend %set-absolute;
  437. top: $pad;
  438. right: multiply($pad, 2);
  439. }
  440. .btn-kv-prev {
  441. left: 0;
  442. }
  443. .btn-kv-next {
  444. right: 0;
  445. }
  446. .kv-zoom-header {
  447. padding: 0.5rem;
  448. }
  449. .kv-zoom-body {
  450. padding: 0.25rem;
  451. }
  452. .kv-zoom-description {
  453. position: absolute;
  454. opacity: 0.8;
  455. font-size: 0.8rem;
  456. background-color: #1a1a1a;
  457. padding: 1rem;
  458. text-align: center;
  459. border-radius: 0.5rem;
  460. color: #fff;
  461. left: 15%;
  462. right: 15%;
  463. bottom: 15%;
  464. }
  465. .kv-desc-hide {
  466. float: right;
  467. color: #fff;
  468. padding: 0 0.1rem;
  469. background: none;
  470. border: none;
  471. }
  472. .kv-desc-hide:hover,
  473. .kv-desc-hide:focus {
  474. opacity: 0.7;
  475. }
  476. }
  477. .file-input-new {
  478. .file-preview {
  479. @extend %set-hidden;
  480. }
  481. .close {
  482. @extend %set-hidden;
  483. }
  484. .glyphicon-file {
  485. @extend %set-hidden;
  486. }
  487. .fileinput-remove-button {
  488. @extend %set-hidden;
  489. }
  490. .fileinput-upload-button {
  491. @extend %set-hidden;
  492. }
  493. .no-browse {
  494. .input-group-btn {
  495. @extend %set-hidden;
  496. }
  497. .form-control {
  498. border-top-right-radius: $radius;
  499. border-bottom-right-radius: $radius;
  500. }
  501. }
  502. }
  503. .file-input-ajax-new {
  504. .fileinput-remove-button {
  505. @extend %set-hidden;
  506. }
  507. .fileinput-upload-button {
  508. @extend %set-hidden;
  509. }
  510. .no-browse {
  511. .input-group-btn {
  512. @extend %set-hidden;
  513. }
  514. .form-control {
  515. border-top-right-radius: $radius;
  516. border-bottom-right-radius: $radius;
  517. }
  518. }
  519. }
  520. .file-thumb-loading {
  521. &:not(:has(.file-preview-thumbnails .file-preview-frame)) {
  522. background: transparent $url-0 no-repeat scroll center center content-box !important;
  523. }
  524. .file-drop-zone:hover {
  525. padding-bottom: $pad + multiply($border, 1);
  526. .file-preview-status {
  527. margin-top: multiply($border, 1) * -1;
  528. }
  529. }
  530. .file-drop-zone *:first-child:is(.file-preview-thumbnails):has(.file-preview-frame) + .file-preview-status {
  531. background: rgba(255, 255, 255, 0.38) $url-0 no-repeat scroll center center content-box !important;
  532. width: calc(100% - (multiply($pad, 5.6) + multiply($border, 2)) * 2);
  533. }
  534. }
  535. .file-drop-zone {
  536. border: $border dashed $silver-chalice;
  537. border-radius: $radius;
  538. min-height: multiply($pad, 54.4);
  539. text-align: center;
  540. vertical-align: middle;
  541. margin: multiply($pad, 2.4) multiply($pad, 3) multiply($pad, 2.4) multiply($pad, 2.4);
  542. padding: $pad;
  543. user-select: none;
  544. &.clickable {
  545. &:hover {
  546. border: multiply($border, 2) dashed $mountain-mist;
  547. margin-top: multiply($pad, 2.4) - multiply($border, 1);
  548. margin-bottom: multiply($pad, 2.4) - multiply($border, 1);
  549. .file-preview-frame {
  550. margin-left: multiply($pad, 1.6) - multiply($border, 1);
  551. margin-bottom: multiply($pad, 1.6) - multiply($border, 1);
  552. }
  553. }
  554. &:focus {
  555. //border: multiply($border, 2) solid $viking;
  556. }
  557. &:has(.file-preview-frame):hover {
  558. padding-bottom: $pad + $border;
  559. }
  560. .file-preview-thumbnails {
  561. cursor: pointer;
  562. }
  563. }
  564. &:not(:has(input[type=file][multiple])), &:not(:has(input[type=file][multiple=true])) {
  565. display: flex;
  566. justify-content: center;
  567. }
  568. *:first-child:is(.file-preview-thumbnails):has(.file-preview-frame) + .file-preview-status {
  569. position: absolute;
  570. left: 50%;
  571. top: multiply($pad, 5);
  572. transform: translateX(-50%);
  573. }
  574. .file-preview-status {
  575. height: multiply($pad, 52);
  576. }
  577. }
  578. .file-drop-zone-title {
  579. height: multiply($pad, 52);
  580. color: $silver-chalice;
  581. font-size: 1.6em;
  582. padding: multiply($pad, 17) multiply($pad, 2);
  583. cursor: default;
  584. text-align: center;
  585. }
  586. .file-highlighted {
  587. border: multiply($border, 2) dashed $mountain-mist !important;
  588. background-color: $gallery;
  589. }
  590. .file-uploading {
  591. background: $url-1 no-repeat center bottom multiply($pad, 2);
  592. opacity: 0.65;
  593. }
  594. .file-zoom-fullscreen {
  595. .modal-dialog {
  596. min-width: 100%;
  597. margin: 0;
  598. }
  599. .modal-content {
  600. border-radius: 0;
  601. box-shadow: none;
  602. min-height: 100vh;
  603. }
  604. .kv-zoom-body {
  605. overflow-y: auto;
  606. }
  607. }
  608. .floating-buttons {
  609. z-index: 3000;
  610. .btn-kv {
  611. margin-left: multiply($pad, 0.6);
  612. z-index: 3000;
  613. }
  614. }
  615. .kv-zoom-actions {
  616. min-width: 140px;
  617. }
  618. .kv-zoom-actions .btn-kv {
  619. margin-left: multiply($pad, 0.6);
  620. }
  621. .file-zoom-content {
  622. min-height: 300px;
  623. text-align: center;
  624. white-space: nowrap;
  625. .file-preview-image {
  626. max-height: 100%;
  627. }
  628. .file-preview-video {
  629. max-height: 100%;
  630. }
  631. > .file-object {
  632. &.type-image {
  633. @extend %set-object;
  634. height: auto;
  635. min-height: inherit;
  636. }
  637. &.type-video {
  638. @extend %set-object-video;
  639. }
  640. &.type-flash {
  641. @extend %set-object-video;
  642. }
  643. &.type-audio {
  644. width: auto;
  645. height: multiply($pad, 6);
  646. }
  647. &.type-pdf {
  648. @extend %set-object-default;
  649. }
  650. &.type-html {
  651. @extend %set-object-default;
  652. }
  653. &.type-text {
  654. @extend %set-object-default;
  655. }
  656. &.type-default {
  657. @extend %set-object-default;
  658. }
  659. }
  660. &:hover {
  661. background: transparent;
  662. }
  663. }
  664. @media(min-width: 576px) {
  665. .file-zoom-dialog .modal-dialog {
  666. max-width: 500px;
  667. }
  668. }
  669. @media(min-width: 992px) {
  670. .file-zoom-dialog .modal-lg {
  671. max-width: 800px;
  672. }
  673. }
  674. @media(max-width: 767px) {
  675. .file-preview-thumbnails {
  676. display: flex;
  677. justify-content: center;
  678. align-items: center;
  679. flex-direction: column;
  680. }
  681. .file-zoom-dialog .modal-header {
  682. flex-direction: column;
  683. }
  684. }
  685. @media(max-width: 350px) {
  686. .krajee-default.file-preview-frame:not([data-template="audio"]) .kv-file-content {
  687. width: 160px;
  688. }
  689. }
  690. @media(max-width: 420px) {
  691. .krajee-default.file-preview-frame .kv-file-content.kv-pdf-rendered {
  692. width: 100%;
  693. }
  694. }
  695. .file-loading[dir=rtl]:before {
  696. background: transparent $url-0 top right no-repeat;
  697. padding-left: 0;
  698. padding-right: multiply($pad, 4);
  699. }
  700. .clickable .file-drop-zone-title {
  701. cursor: pointer;
  702. }
  703. .file-sortable .file-drag-handle {
  704. cursor: grab;
  705. opacity: 1;
  706. &:hover {
  707. opacity: 0.7;
  708. }
  709. }
  710. .file-grabbing, .file-grabbing * {
  711. cursor: not-allowed !important;
  712. }
  713. .file-grabbing .file-preview-thumbnails * {
  714. cursor: grabbing !important;
  715. }
  716. .file-preview-initial.sortable-chosen {
  717. background-color: $link-water;
  718. border-color: $pelorous;
  719. box-shadow: none;
  720. }
  721. .file-preview-other-frame, .file-preview-object, .kv-file-content, .kv-zoom-body {
  722. display: flex;
  723. align-items: center;
  724. justify-content: center;
  725. }
  726. .btn-kv-rotate {
  727. display: none;
  728. }
  729. .kv-file-rotate {
  730. display: none;
  731. }
  732. .rotatable {
  733. &:not(.hide-rotate) {
  734. .btn-kv-rotate {
  735. display: inline-block;
  736. }
  737. .kv-file-rotate {
  738. display: inline-block;
  739. }
  740. }
  741. .file-zoom-detail {
  742. transform-origin: center center;
  743. }
  744. .kv-file-content {
  745. transform-origin: center center;
  746. > :first-child {
  747. transform-origin: center center;
  748. }
  749. }
  750. }
  751. .rotate-animate {
  752. transition: transform 0.3s ease;
  753. }
  754. .kv-overflow-hidden {
  755. overflow: hidden;
  756. }