alert.css 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438
  1. /* mixins & extensions */
  2. @keyframes in {
  3. 0% {
  4. opacity: 0;
  5. }
  6. 100% {
  7. opacity: 1;
  8. }
  9. }
  10. @keyframes in-down {
  11. 0% {
  12. opacity: 0;
  13. transform: translate3D(0, -5px, 0);
  14. }
  15. 100% {
  16. opacity: 1;
  17. transform: translate3D(0, 0, 0);
  18. }
  19. }
  20. @keyframes in-up {
  21. 0% {
  22. opacity: 0;
  23. transform: translate3D(0, 5px, 0);
  24. }
  25. 100% {
  26. opacity: 1;
  27. transform: translate3D(0, 0, 0);
  28. }
  29. }
  30. @keyframes in-scale {
  31. 0% {
  32. opacity: 0;
  33. transform: scale3D(0.95, 0.95, 1);
  34. }
  35. 100% {
  36. opacity: 1;
  37. transform: scale3D(1, 1, 1);
  38. }
  39. }
  40. :root {
  41. --calcite-animation-timing: calc(150ms * var(--calcite-internal-duration-factor));
  42. --calcite-internal-duration-factor: var(--calcite-duration-factor, 1);
  43. --calcite-internal-animation-timing-fast: calc(100ms * var(--calcite-internal-duration-factor));
  44. --calcite-internal-animation-timing-medium: calc(200ms * var(--calcite-internal-duration-factor));
  45. --calcite-internal-animation-timing-slow: calc(300ms * var(--calcite-internal-duration-factor));
  46. }
  47. .calcite-animate {
  48. opacity: 0;
  49. animation-fill-mode: both;
  50. animation-duration: var(--calcite-animation-timing);
  51. }
  52. .calcite-animate__in {
  53. animation-name: in;
  54. }
  55. .calcite-animate__in-down {
  56. animation-name: in-down;
  57. }
  58. .calcite-animate__in-up {
  59. animation-name: in-up;
  60. }
  61. .calcite-animate__in-scale {
  62. animation-name: in-scale;
  63. }
  64. /**
  65. * Currently only used in Checkbox.
  66. */
  67. :root {
  68. --calcite-popper-transition: var(--calcite-animation-timing);
  69. }
  70. :host([hidden]) {
  71. display: none;
  72. }
  73. /**
  74. * CSS Custom Properties
  75. *
  76. * These properties can be overridden using the component's tag as selector.
  77. *
  78. * @prop --calcite-alert-width: the width of the alert
  79. */
  80. :host([scale=s]) {
  81. --calcite-alert-width: 40em;
  82. --calcite-alert-spacing-token-small: 0.5rem;
  83. --calcite-alert-spacing-token-large: 0.75rem;
  84. }
  85. :host([scale=s]) slot[name=title]::slotted(*), :host([scale=s]) *::slotted([slot=title]) {
  86. font-size: var(--calcite-font-size--1);
  87. line-height: 1.375;
  88. }
  89. :host([scale=s]) slot[name=message]::slotted(*), :host([scale=s]) *::slotted([slot=message]) {
  90. font-size: var(--calcite-font-size--2);
  91. line-height: 1.375;
  92. }
  93. :host([scale=s]) slot[name=link]::slotted(*), :host([scale=s]) *::slotted([slot=link]) {
  94. font-size: var(--calcite-font-size--2);
  95. line-height: 1.375;
  96. }
  97. :host([scale=s]) .alert-queue-count {
  98. margin-left: 0.5rem;
  99. margin-right: 0.5rem;
  100. }
  101. :host([scale=s]) .container {
  102. --calcite-alert-min-height: 3.5rem;
  103. }
  104. :host([scale=s]) .alert-close {
  105. padding: 0.5rem;
  106. }
  107. :host([scale=m]) {
  108. --calcite-alert-width: 50em;
  109. --calcite-alert-spacing-token-small: 0.75rem;
  110. --calcite-alert-spacing-token-large: 1rem;
  111. }
  112. :host([scale=m]) slot[name=title]::slotted(*), :host([scale=m]) *::slotted([slot=title]) {
  113. font-size: var(--calcite-font-size-0);
  114. line-height: 1.375;
  115. }
  116. :host([scale=m]) slot[name=message]::slotted(*), :host([scale=m]) *::slotted([slot=message]) {
  117. font-size: var(--calcite-font-size--1);
  118. line-height: 1.375;
  119. }
  120. :host([scale=m]) slot[name=link]::slotted(*), :host([scale=m]) *::slotted([slot=link]) {
  121. font-size: var(--calcite-font-size--1);
  122. line-height: 1.375;
  123. }
  124. :host([scale=m]) .alert-queue-count {
  125. margin-left: 0.75rem;
  126. margin-right: 0.75rem;
  127. }
  128. :host([scale=m]) .container {
  129. --calcite-alert-min-height: 4.1875rem;
  130. }
  131. :host([scale=l]) {
  132. --calcite-alert-width: 60em;
  133. --calcite-alert-spacing-token-small: 1rem;
  134. --calcite-alert-spacing-token-large: 1.25rem;
  135. }
  136. :host([scale=l]) slot[name=title]::slotted(*), :host([scale=l]) *::slotted([slot=title]) {
  137. margin-bottom: 0.25rem;
  138. font-size: var(--calcite-font-size-1);
  139. line-height: 1.375;
  140. }
  141. :host([scale=l]) slot[name=message]::slotted(*), :host([scale=l]) *::slotted([slot=message]) {
  142. font-size: var(--calcite-font-size-0);
  143. line-height: 1.375;
  144. }
  145. :host([scale=l]) slot[name=link]::slotted(*), :host([scale=l]) *::slotted([slot=link]) {
  146. font-size: var(--calcite-font-size-0);
  147. line-height: 1.375;
  148. }
  149. :host([scale=l]) .alert-queue-count {
  150. margin-left: 1rem;
  151. margin-right: 1rem;
  152. }
  153. :host([scale=l]) .container {
  154. --calcite-alert-min-height: 5.625rem;
  155. }
  156. :host {
  157. --calcite-alert-edge-distance: 2rem;
  158. display: block;
  159. }
  160. :host .container {
  161. pointer-events: none;
  162. position: fixed;
  163. margin-top: 0px;
  164. margin-bottom: 0px;
  165. margin-left: auto;
  166. margin-right: auto;
  167. display: flex;
  168. align-items: center;
  169. justify-content: center;
  170. background-color: var(--calcite-ui-foreground-1);
  171. opacity: 0;
  172. --tw-shadow: 0 6px 20px -4px rgba(0, 0, 0, 0.1), 0 4px 12px -2px rgba(0, 0, 0, 0.08);
  173. --tw-shadow-colored: 0 6px 20px -4px var(--tw-shadow-color), 0 4px 12px -2px var(--tw-shadow-color);
  174. box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  175. border-radius: var(--calcite-border-radius);
  176. border-top: 0px solid transparent;
  177. border-left: 1px solid var(--calcite-ui-border-3);
  178. border-right: 1px solid var(--calcite-ui-border-3);
  179. border-bottom: 1px solid var(--calcite-ui-border-3);
  180. min-height: var(--calcite-alert-min-height);
  181. width: var(--calcite-alert-width);
  182. max-width: calc(100% - (var(--calcite-alert-edge-distance) * 2 + 2px));
  183. max-height: 0;
  184. z-index: 101;
  185. transition: var(--calcite-internal-animation-timing-slow) cubic-bezier(0.215, 0.44, 0.42, 0.88), opacity var(--calcite-internal-animation-timing-slow) cubic-bezier(0.215, 0.44, 0.42, 0.88), all var(--calcite-animation-timing) ease-in-out;
  186. }
  187. :host .container.bottom, :host .container.top {
  188. inset-inline-end: 0;
  189. inset-inline-start: 0;
  190. }
  191. :host .container[class*=bottom] {
  192. transform: translate3d(0, var(--calcite-alert-edge-distance), 0);
  193. inset-block-end: var(--calcite-alert-edge-distance);
  194. }
  195. :host .container[class*=top] {
  196. transform: translate3d(0, calc(-1 * var(--calcite-alert-edge-distance)), 0);
  197. inset-block-start: var(--calcite-alert-edge-distance);
  198. }
  199. :host .container[class*=-start] {
  200. inset-inline-start: var(--calcite-alert-edge-distance);
  201. inset-inline-end: auto;
  202. }
  203. :host .container[class*=-end] {
  204. inset-inline-end: var(--calcite-alert-edge-distance);
  205. inset-inline-start: auto;
  206. }
  207. .container {
  208. display: flex;
  209. width: 100%;
  210. align-items: center;
  211. justify-content: center;
  212. }
  213. .alert-close {
  214. outline-offset: 0;
  215. outline-color: transparent;
  216. transition: outline-offset 100ms ease-in-out, outline-color 100ms ease-in-out;
  217. }
  218. .alert-close:focus {
  219. outline: 2px solid var(--calcite-ui-brand);
  220. outline-offset: -2px;
  221. }
  222. :host([active]) .container:not(.queued) {
  223. max-height: 100%;
  224. border-top-width: 2px;
  225. opacity: 1;
  226. pointer-events: initial;
  227. }
  228. :host([active]) .container:not(.queued)[class*=bottom] {
  229. transform: translate3d(0, calc(-1 * var(--calcite-alert-edge-distance)), inherit);
  230. }
  231. :host([active]) .container:not(.queued)[class*=top] {
  232. transform: translate3d(0, var(--calcite-alert-edge-distance), inherit);
  233. }
  234. slot[name=title]::slotted(*), *::slotted([slot=title]) {
  235. font-size: var(--calcite-font-size-0);
  236. line-height: 1.375;
  237. font-weight: var(--calcite-font-weight-medium);
  238. color: var(--calcite-ui-text-1);
  239. }
  240. slot[name=message]::slotted(*), *::slotted([slot=message]) {
  241. margin: 0px;
  242. display: inline;
  243. font-size: var(--calcite-font-size--1);
  244. line-height: 1.375;
  245. font-weight: var(--calcite-font-weight-normal);
  246. color: var(--calcite-ui-text-2);
  247. margin-inline-end: 0.5rem;
  248. }
  249. slot[name=link]::slotted(*), *::slotted([slot=link]) {
  250. display: inline-flex;
  251. color: var(--calcite-ui-text-link);
  252. }
  253. .alert-content {
  254. transition-property: all;
  255. transition-duration: var(--calcite-animation-timing);
  256. transition-timing-function: ease-in-out;
  257. transition-delay: 0s;
  258. padding: var(--calcite-alert-spacing-token-small) var(--calcite-alert-spacing-token-large);
  259. flex: 0 0 auto;
  260. overflow-wrap: break-word;
  261. background-color: var(--calcite-ui-foreground-1);
  262. flex: 1 1 auto;
  263. min-width: 0;
  264. padding-block: var(--calcite-alert-spacing-token-small);
  265. padding-inline: 0 var(--calcite-alert-spacing-token-small);
  266. border-bottom-left-radius: var(--calcite-border-radius);
  267. border-bottom-right-radius: var(--calcite-border-radius);
  268. }
  269. .alert-content:first-of-type:not(:only-child) {
  270. padding-inline-start: var(--calcite-alert-spacing-token-large);
  271. }
  272. .alert-content:only-child {
  273. padding: var(--calcite-alert-spacing-token-small);
  274. }
  275. .alert-icon {
  276. transition-property: all;
  277. transition-duration: var(--calcite-animation-timing);
  278. transition-timing-function: ease-in-out;
  279. transition-delay: 0s;
  280. padding: var(--calcite-alert-spacing-token-small) var(--calcite-alert-spacing-token-large);
  281. flex: 0 0 auto;
  282. display: flex;
  283. align-items: center;
  284. align-self: stretch;
  285. background-color: var(--calcite-ui-foreground-1);
  286. padding-top: 0px;
  287. padding-bottom: 0px;
  288. }
  289. .alert-close {
  290. transition-property: all;
  291. transition-duration: var(--calcite-animation-timing);
  292. transition-timing-function: ease-in-out;
  293. transition-delay: 0s;
  294. padding: var(--calcite-alert-spacing-token-small) var(--calcite-alert-spacing-token-large);
  295. flex: 0 0 auto;
  296. cursor: pointer;
  297. align-self: stretch;
  298. overflow: hidden;
  299. border-style: none;
  300. background-color: var(--calcite-ui-foreground-1);
  301. padding-top: 0px;
  302. padding-bottom: 0px;
  303. color: var(--calcite-ui-text-3);
  304. outline: 2px solid transparent;
  305. outline-offset: 2px;
  306. border-end-end-radius: var(--calcite-border-radius);
  307. }
  308. .alert-close:hover, .alert-close:focus {
  309. background-color: var(--calcite-ui-foreground-2);
  310. color: var(--calcite-ui-text-1);
  311. }
  312. .alert-close:active {
  313. background-color: var(--calcite-ui-foreground-3);
  314. }
  315. .alert-queue-count {
  316. visibility: hidden;
  317. display: flex;
  318. cursor: default;
  319. align-items: center;
  320. justify-content: space-around;
  321. align-self: stretch;
  322. overflow: hidden;
  323. background-color: var(--calcite-ui-foreground-1);
  324. text-align: center;
  325. font-weight: var(--calcite-font-weight-medium);
  326. color: var(--calcite-ui-text-2);
  327. opacity: 0;
  328. transition-property: all;
  329. transition-duration: var(--calcite-animation-timing);
  330. transition-timing-function: ease-in-out;
  331. transition-delay: 0s;
  332. border-left: 0px solid transparent;
  333. border-right: 0px solid transparent;
  334. border-top-right-radius: 0;
  335. }
  336. .alert-queue-count.active {
  337. visibility: visible;
  338. opacity: 1;
  339. }
  340. :host([auto-dismiss]) > .alert-queue-count {
  341. border-inline-end: 0px solid transparent;
  342. }
  343. .alert-dismiss-progress {
  344. position: absolute;
  345. left: 0px;
  346. right: 0px;
  347. display: block;
  348. width: 100%;
  349. overflow: hidden;
  350. top: -2px;
  351. height: 2px;
  352. z-index: 103;
  353. border-radius: var(--calcite-border-radius) var(--calcite-border-radius) 0 0;
  354. }
  355. .alert-dismiss-progress:after {
  356. position: absolute;
  357. top: 0px;
  358. display: block;
  359. height: 2px;
  360. content: "";
  361. background-color: var(--calcite-alert-dismiss-progress-background);
  362. z-index: 104;
  363. inset-inline-end: 0;
  364. }
  365. :host([color=blue]) .container {
  366. border-top-color: var(--calcite-ui-info);
  367. }
  368. :host([color=blue]) .container .alert-icon {
  369. color: var(--calcite-ui-info);
  370. }
  371. :host([color=red]) .container {
  372. border-top-color: var(--calcite-ui-danger);
  373. }
  374. :host([color=red]) .container .alert-icon {
  375. color: var(--calcite-ui-danger);
  376. }
  377. :host([color=yellow]) .container {
  378. border-top-color: var(--calcite-ui-warning);
  379. }
  380. :host([color=yellow]) .container .alert-icon {
  381. color: var(--calcite-ui-warning);
  382. }
  383. :host([color=green]) .container {
  384. border-top-color: var(--calcite-ui-success);
  385. }
  386. :host([color=green]) .container .alert-icon {
  387. color: var(--calcite-ui-success);
  388. }
  389. :host([auto-dismiss-duration=fast]) .alert-dismiss-progress:after {
  390. animation: dismissProgress 6000ms ease-out;
  391. }
  392. :host([auto-dismiss-duration=medium]) .alert-dismiss-progress:after {
  393. animation: dismissProgress 10000ms ease-out;
  394. }
  395. :host([auto-dismiss-duration=slow]) .alert-dismiss-progress:after {
  396. animation: dismissProgress 14000ms ease-out;
  397. }
  398. @keyframes dismissProgress {
  399. 0% {
  400. width: 0px;
  401. opacity: 0.75;
  402. }
  403. 100% {
  404. width: 100%;
  405. opacity: 1;
  406. }
  407. }