From 388e687857345c85ee550cd5da472675e05a6ff5 Mon Sep 17 00:00:00 2001
From: Armand Philippot <git@armandphilippot.com>
Date: Tue, 26 Sep 2023 18:43:11 +0200
Subject: refactor(components): rewrite Button and ButtonLink components

Both:
* move styles to Sass placeholders

Button:
* add `isPressed` prop to Button
* add `isLoading` prop to Button (to differentiate state from
disabled)

ButtonLink:
* replace `external` prop with `isExternal` prop
* replace `href` prop with `to` prop
---
 .../buttons/button-link/button-link.stories.tsx    | 114 +++++++++++++++++++++
 1 file changed, 114 insertions(+)
 create mode 100644 src/components/atoms/buttons/button-link/button-link.stories.tsx

(limited to 'src/components/atoms/buttons/button-link/button-link.stories.tsx')

diff --git a/src/components/atoms/buttons/button-link/button-link.stories.tsx b/src/components/atoms/buttons/button-link/button-link.stories.tsx
new file mode 100644
index 0000000..f048ce9
--- /dev/null
+++ b/src/components/atoms/buttons/button-link/button-link.stories.tsx
@@ -0,0 +1,114 @@
+import type { ComponentMeta, ComponentStory } from '@storybook/react';
+import { ButtonLink } from './button-link';
+
+/**
+ * ButtonLink - Storybook Meta
+ */
+export default {
+  title: 'Atoms/Buttons/ButtonLink',
+  component: ButtonLink,
+  args: {
+    isExternal: false,
+    shape: 'rectangle',
+  },
+  argTypes: {
+    children: {
+      control: {
+        type: 'text',
+      },
+      description: 'The link body.',
+      type: {
+        name: 'string',
+        required: true,
+      },
+    },
+    isExternal: {
+      control: {
+        type: 'boolean',
+      },
+      description: 'Determine if the link is an external link.',
+      table: {
+        category: 'Options',
+        defaultValue: { summary: false },
+      },
+      type: {
+        name: 'boolean',
+        required: false,
+      },
+    },
+    kind: {
+      control: {
+        type: 'select',
+      },
+      description: 'The link kind.',
+      options: ['primary', 'secondary', 'tertiary'],
+      table: {
+        category: 'Options',
+        defaultValue: { summary: 'secondary' },
+      },
+      type: {
+        name: 'string',
+        required: false,
+      },
+    },
+    shape: {
+      control: {
+        type: 'select',
+      },
+      description: 'The link shape.',
+      options: ['circle', 'rectangle', 'square'],
+      table: {
+        category: 'Options',
+        defaultValue: { summary: 'rectangle' },
+      },
+      type: {
+        name: 'string',
+        required: false,
+      },
+    },
+    to: {
+      control: {
+        type: 'text',
+      },
+      description: 'The link target.',
+      type: {
+        name: 'string',
+        required: true,
+      },
+    },
+  },
+} as ComponentMeta<typeof ButtonLink>;
+
+const Template: ComponentStory<typeof ButtonLink> = (args) => (
+  <ButtonLink {...args} />
+);
+
+/**
+ * ButtonLink Story - Primary
+ */
+export const Primary = Template.bind({});
+Primary.args = {
+  children: 'Link',
+  kind: 'primary',
+  to: '#',
+};
+
+/**
+ * ButtonLink Story - Secondary
+ */
+export const Secondary = Template.bind({});
+Secondary.args = {
+  children: 'Link',
+  kind: 'secondary',
+  to: '#',
+};
+
+/**
+ * ButtonLink Story - Tertiary
+ */
+export const Tertiary = Template.bind({});
+Tertiary.args = {
+  children: 'Link',
+  kind: 'tertiary',
+  to: '#',
+};
-- 
cgit v1.2.3

