alert.css 11 KB

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