Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
Loader.stories.mdx 1.53 KiB
import { Fragment } from "react";
import { Canvas, Story, Meta } from "@storybook/addon-docs";
import { Grid, Text } from "metabase/ui";
import { Loader } from "./";

export const args = {
  size: "md",
};

export const argTypes = {
  size: {
    options: ["xs", "sm", "md", "lg", "xl"],
    control: { type: "inline-radio" },
  },
};

<Meta
  title="Feedback/Loader"
  component={Loader}
  args={args}
  argTypes={argTypes}
/>

# Loader

Our themed wrapper around [Mantine Loader](https://v6.mantine.dev/core/loader/).

## Docs

- [Figma File](https://www.figma.com/file/NUXRUa9Ot3HvgC1WwIA4UH/Loader?type=design&node-id=1-96&mode=design&t=yaNljw178EFJeU7k-0)
- [Mantine Loader Docs](https://v6.mantine.dev/core/loader/)

## Caveats

- Only use the `oval` variant unless otherwise called out
- Prefer usage of loader sizes less than `xl` unless specifically called out

## Examples

export const DefaultTemplate = args => <Loader {...args} />;

export const SizeTemplate = args => (
  <Grid w="10rem" columns={2} align="center">
    {argTypes.size.options.map(size => (
      <Fragment key={size}>
        <Grid.Col span={1} align="center">
          <Text weight="bold">{size}</Text>
        </Grid.Col>
        <Grid.Col span={1} align="center">
          <Loader size={size} />
        </Grid.Col>
      </Fragment>
    ))}
  </Grid>
);

export const Default = DefaultTemplate.bind({});

<Canvas>
  <Story name="Default">{Default}</Story>
</Canvas>

### Sizes

export const Sizes = SizeTemplate.bind({});

<Canvas>
  <Story name="Sizes">{Sizes}</Story>
</Canvas>