(Prism.languages.elixir = { doc: { pattern: /@(?:doc|moduledoc)\s+(?:("""|''')[\s\S]*?\1|("|')(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2)/, inside: { attribute: /^@\w+/, string: /['"][\s\S]+/ }, }, comment: { pattern: /#.*/, greedy: !0 }, regex: { pattern: /~[rR](?:("""|''')(?:\\[\s\S]|(?!\1)[^\\])+\1|([\/|"'])(?:\\.|(?!\2)[^\\\r\n])+\2|\((?:\\.|[^\\)\r\n])+\)|\[(?:\\.|[^\\\]\r\n])+\]|\{(?:\\.|[^\\}\r\n])+\}|<(?:\\.|[^\\>\r\n])+>)[uismxfr]*/, greedy: !0, }, string: [ { pattern: /~[cCsSwW](?:("""|''')(?:\\[\s\S]|(?!\1)[^\\])+\1|([\/|"'])(?:\\.|(?!\2)[^\\\r\n])+\2|\((?:\\.|[^\\)\r\n])+\)|\[(?:\\.|[^\\\]\r\n])+\]|\{(?:\\.|#\{[^}]+\}|#(?!\{)|[^#\\}\r\n])+\}|<(?:\\.|[^\\>\r\n])+>)[csa]?/, greedy: !0, inside: {}, }, { pattern: /("""|''')[\s\S]*?\1/, greedy: !0, inside: {} }, { pattern: /("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/, greedy: !0, inside: {}, }, ], atom: { pattern: /(^|[^:]):\w+/, lookbehind: !0, alias: 'symbol' }, module: { pattern: /\b[A-Z]\w*\b/, alias: 'class-name' }, 'attr-name': /\b\w+\??:(?!:)/, argument: { pattern: /(^|[^&])&\d+/, lookbehind: !0, alias: 'variable' }, attribute: { pattern: /@\w+/, alias: 'variable' }, function: /\b[_a-zA-Z]\w*[?!]?(?:(?=\s*(?:\.\s*)?\()|(?=\/\d))/, number: /\b(?:0[box][a-f\d_]+|\d[\d_]*)(?:\.[\d_]+)?(?:e[+-]?[\d_]+)?\b/i, keyword: /\b(?:after|alias|and|case|catch|cond|def(?:callback|delegate|exception|impl|macro|module|n|np|p|protocol|struct)?|do|else|end|fn|for|if|import|not|or|quote|raise|require|rescue|try|unless|unquote|use|when)\b/, boolean: /\b(?:false|nil|true)\b/, operator: [ /\bin\b|&&?|\|[|>]?|\\\\|::|\.\.\.?|\+\+?|-[->]?|<[-=>]|>=|!==?|\B!|=(?:==?|[>~])?|[*\/^]/, { pattern: /([^<])<(?!<)/, lookbehind: !0 }, { pattern: /([^>])>(?!>)/, lookbehind: !0 }, ], punctuation: /<<|>>|[.,%\[\]{}()]/, }), Prism.languages.elixir.string.forEach(function (e) { e.inside = { interpolation: { pattern: /#\{[^}]+\}/, inside: { delimiter: { pattern: /^#\{|\}$/, alias: 'punctuation' }, rest: Prism.languages.elixir, }, }, }; }); .armandphilippot.com/log/src/components/atoms/loaders/spinner.tsx'>
path: root/src/components/atoms/loaders/spinner.tsx
blob: 6655141a75686d32645306dab7650c542053e374 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import { FC } from 'react';
import { useIntl } from 'react-intl';
import styles from './spinner.module.scss';

export type SpinnerProps = {
  /**
   * The loading message. Default: "Loading...".
   */
  message?: string;
};

/**
 * Spinner component
 *
 * Render a loading message with animation.
 */
const Spinner: FC<SpinnerProps> = ({ message }) => {
  const intl = useIntl();

  return (
    <div className={styles.wrapper}>
      <div className={styles.ball}></div>
      <div className={styles.ball}></div>
      <div className={styles.ball}></div>
      <div className={styles.text}>
        {message ||
          intl.formatMessage({
            defaultMessage: 'Loading...',
            description: 'Spinner: loading text',
            id: 'q9cJQe',
          })}
      </div>
    </div>
  );
};

export default Spinner;