@frontify/fondue-components 0.1.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/.eslintignore +4 -0
  2. package/.eslintrc.cjs +33 -0
  3. package/.prettierignore +1 -0
  4. package/.prettierrc +17 -0
  5. package/.storybook/DocumentationTemplate.mdx +25 -0
  6. package/.storybook/main.ts +29 -0
  7. package/.storybook/preview.ts +53 -0
  8. package/CHANGELOG.md +7 -0
  9. package/package.json +91 -0
  10. package/playwright/index.html +12 -0
  11. package/playwright/index.ts +3 -0
  12. package/playwright.config.ts +29 -0
  13. package/postcss.config.cjs +8 -0
  14. package/scripts/createNewComponent.ts +42 -0
  15. package/scripts/templates/__tests__/component.ct.tsx +25 -0
  16. package/scripts/templates/__tests__/component.spec.tsx +24 -0
  17. package/scripts/templates/component.stories.ts +35 -0
  18. package/scripts/templates/component.ts +25 -0
  19. package/scripts/templates/index.ts +15 -0
  20. package/scripts/templates/styles/componentStyles.tsx +16 -0
  21. package/scripts/transforms.ts +13 -0
  22. package/scripts/types.ts +7 -0
  23. package/src/components/Button/Button.stories.tsx +57 -0
  24. package/src/components/Button/Button.tsx +111 -0
  25. package/src/components/Button/styles/buttonStyles.ts +175 -0
  26. package/src/components/Button/styles/iconStyles.ts +152 -0
  27. package/src/components/Button/styles/textStyles.ts +149 -0
  28. package/src/components/Button/tests/Button.ct.tsx +61 -0
  29. package/src/components/Button/tests/Button.spec.tsx +34 -0
  30. package/src/components/Divider/Divider.stories.ts +47 -0
  31. package/src/components/Divider/Divider.tsx +69 -0
  32. package/src/components/Divider/__tests__/Divider.spec.tsx +88 -0
  33. package/src/components/LoadingBar/LoadingBar.stories.tsx +32 -0
  34. package/src/components/LoadingBar/LoadingBar.tsx +68 -0
  35. package/src/components/LoadingBar/styles/loadingBarStyles.ts +38 -0
  36. package/src/components/LoadingBar/tests/LoadingBar.ct.tsx +39 -0
  37. package/src/components/Tag/Tag.ct.tsx +16 -0
  38. package/src/components/Tag/Tag.stories.ts +29 -0
  39. package/src/components/Tag/Tag.tsx +18 -0
  40. package/src/components/Tag/__tests__/tag.spec.tsx +13 -0
  41. package/src/index.ts +8 -0
  42. package/src/setupTests.ts +19 -0
  43. package/src/styles.css +35 -0
  44. package/src/utilities/focusStyle.ts +12 -0
  45. package/src/utilities/styleUtilities.ts +19 -0
  46. package/src/utilities/tests/styleUtilities.spec.ts +114 -0
  47. package/tailwind.config.ts +148 -0
  48. package/tsconfig.json +26 -0
  49. package/tsconfig.node.json +21 -0
  50. package/vite.config.ts +67 -0
package/.eslintignore ADDED
@@ -0,0 +1,4 @@
1
+ storybook-static
2
+ playwright-report
3
+ dist
4
+ test-results
package/.eslintrc.cjs ADDED
@@ -0,0 +1,33 @@
1
+ /* (c) Copyright Frontify Ltd., all rights reserved. */
2
+
3
+ module.exports = {
4
+ root: true,
5
+ extends: ['@frontify/eslint-config-react', 'plugin:storybook/recommended'],
6
+ plugins: ['notice'],
7
+ settings: {
8
+ react: {
9
+ version: 'detect',
10
+ },
11
+ },
12
+ parserOptions: {
13
+ project: ['tsconfig.json', 'tsconfig.node.json'],
14
+ tsconfigRootDir: __dirname,
15
+ sourceType: 'module',
16
+ },
17
+ overrides: [
18
+ {
19
+ files: ['*.js', '*.ts', '*.tsx'],
20
+ rules: {
21
+ 'notice/notice': [
22
+ 'error',
23
+ {
24
+ template: '/* (c) Copyright Frontify Ltd., all rights reserved. */\n\n',
25
+ messages: {
26
+ whenFailedToMatch: 'No Frontify copyright header set.',
27
+ },
28
+ },
29
+ ],
30
+ },
31
+ },
32
+ ],
33
+ };
@@ -0,0 +1 @@
1
+ CHANGELOG.md
package/.prettierrc ADDED
@@ -0,0 +1,17 @@
1
+ {
2
+ "printWidth": 120,
3
+ "tabWidth": 4,
4
+ "singleQuote": true,
5
+ "trailingComma": "all",
6
+ "arrowParens": "always",
7
+ "endOfLine": "lf",
8
+ "overrides": [
9
+ {
10
+ "files": ["tsconfig.json", "tsconfig.*.json"],
11
+ "options": {
12
+ "parser": "json",
13
+ "trailingComma": "none"
14
+ }
15
+ }
16
+ ]
17
+ }
@@ -0,0 +1,25 @@
1
+ import { ArgTypes, Canvas, Controls, Description, Markdown, Meta, Source, Stories, Title } from '@storybook/blocks';
2
+
3
+ <div className="tw-mx-5 sb-unstyled">
4
+
5
+ <Meta isTemplate />
6
+
7
+ <Title />
8
+
9
+ <Description />
10
+
11
+ ## Preview
12
+
13
+ <Canvas sourceState="shown" />
14
+
15
+ ## Controls
16
+
17
+ <Controls />
18
+
19
+ ## API
20
+
21
+ <ArgTypes />
22
+
23
+ <Stories />
24
+
25
+ </div>
@@ -0,0 +1,29 @@
1
+ import type { StorybookConfig } from '@storybook/react-vite';
2
+
3
+ const config: StorybookConfig = {
4
+ stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|mjs|ts|tsx)'],
5
+ addons: [
6
+ '@etchteam/storybook-addon-status',
7
+ '@storybook/addon-a11y',
8
+ '@storybook/addon-essentials',
9
+ '@storybook/addon-interactions',
10
+ '@storybook/addon-links',
11
+ 'storybook-dark-mode',
12
+ ],
13
+ framework: {
14
+ name: '@storybook/react-vite',
15
+ options: {},
16
+ },
17
+ docs: {
18
+ autodocs: 'tag',
19
+ defaultName: 'Documentation',
20
+ },
21
+ viteFinal(config) {
22
+ // @ts-expect-error untyped name property
23
+ config.plugins = (config.plugins ?? []).filter((plugin) => plugin?.name !== 'vite:dts');
24
+
25
+ return config;
26
+ },
27
+ };
28
+
29
+ export default config;
@@ -0,0 +1,53 @@
1
+ import '../src/styles.css';
2
+ import type { Preview } from '@storybook/react';
3
+ import DocumentationTemplate from './DocumentationTemplate.mdx';
4
+
5
+ const preview: Preview = {
6
+ parameters: {
7
+ docs: {
8
+ page: DocumentationTemplate,
9
+ toc: {
10
+ title: 'Table of contents',
11
+ headingSelector: 'h2, h3',
12
+ },
13
+ },
14
+ controls: {
15
+ matchers: {
16
+ color: /(background|color)$/i,
17
+ date: /Date$/i,
18
+ },
19
+ },
20
+ status: {
21
+ type: 'legacy',
22
+ statuses: {
23
+ released: {
24
+ background: 'rgb(50, 210, 182)',
25
+ color: '#ffffff',
26
+ description: 'This component is stable and released',
27
+ },
28
+ in_progress: {
29
+ background: 'rgb(154, 126, 254)',
30
+ color: '#ffffff',
31
+ description: 'This component is in progress',
32
+ },
33
+ planned: {
34
+ background: 'rgb(254, 194, 50)',
35
+ color: '#ffffff',
36
+ description: 'This component is planned to be revamped',
37
+ },
38
+ legacy: {
39
+ background: 'rgb(129, 132, 132)',
40
+ color: '#ffffff',
41
+ description: 'This is a legacy component',
42
+ },
43
+ deprecated: {
44
+ background: 'rgb(153, 33, 54)',
45
+ color: '#ffffff',
46
+ description: 'This is a legacy component',
47
+ },
48
+ },
49
+ },
50
+ },
51
+ };
52
+
53
+ export default preview;
package/CHANGELOG.md ADDED
@@ -0,0 +1,7 @@
1
+ # @frontify/fondue-components
2
+
3
+ ## 0.1.0-beta.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#1731](https://github.com/Frontify/fondue/pull/1731) [`ef0519d`](https://github.com/Frontify/fondue/commit/ef0519d8021204b280b65812c98686b4ce3b909e) Thanks [@noahwaldner](https://github.com/noahwaldner)! - added export for the new components in fondue
package/package.json ADDED
@@ -0,0 +1,91 @@
1
+ {
2
+ "name": "@frontify/fondue-components",
3
+ "type": "module",
4
+ "version": "0.1.0-beta.0",
5
+ "homepage": "https://github.com/Frontify/fondue",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/Frontify/fondue",
9
+ "directory": "packages/components"
10
+ },
11
+ "bugs": {
12
+ "url": "https://github.com/frontify/fondue/issues"
13
+ },
14
+ "publishConfig": {
15
+ "access": "public"
16
+ },
17
+ "exports": {
18
+ ".": {
19
+ "types": "./dist/index.d.ts",
20
+ "import": "./dist/fondue-components.js"
21
+ }
22
+ },
23
+ "engines": {
24
+ "node": ">=18"
25
+ },
26
+ "peerDependencies": {
27
+ "react": "^18",
28
+ "react-dom": "^18",
29
+ "@frontify/fondue-icons": "^0.1.44"
30
+ },
31
+ "dependencies": {
32
+ "@radix-ui/react-progress": "^1.0.3"
33
+ },
34
+ "devDependencies": {
35
+ "@etchteam/storybook-addon-status": "^4.2.4",
36
+ "@frontify/eslint-config-react": "^0.17.6",
37
+ "@frontify/fondue-tokens": "^3.4.0",
38
+ "@playwright/experimental-ct-react": "1.41.2",
39
+ "@storybook/addon-a11y": "^8.0.8",
40
+ "@storybook/addon-essentials": "^8.0.8",
41
+ "@storybook/addon-interactions": "^8.0.8",
42
+ "@storybook/addon-links": "^8.0.8",
43
+ "@storybook/blocks": "^8.0.8",
44
+ "@storybook/react": "^8.0.8",
45
+ "@storybook/react-vite": "^8.0.8",
46
+ "@tailwindcss/forms": "^0.5.7",
47
+ "@testing-library/jest-dom": "^6.4.2",
48
+ "@testing-library/react": "^15.0.1",
49
+ "@types/node": "^20.12.7",
50
+ "@types/react": "^18.2.77",
51
+ "@vitejs/plugin-react": "^4.2.1",
52
+ "@vitest/coverage-v8": "^1.4.0",
53
+ "@vitest/ui": "^1.4.0",
54
+ "chalk": "^5.3.0",
55
+ "eslint": "^8.57.0",
56
+ "eslint-plugin-notice": "^0.9.10",
57
+ "happy-dom": "^14.7.1",
58
+ "postcss": "^8.4.38",
59
+ "postcss-import": "^16.1.0",
60
+ "prettier": "^3.2.5",
61
+ "react": "^18.2.0",
62
+ "react-dom": "^18.2.0",
63
+ "storybook": "^8.0.8",
64
+ "storybook-dark-mode": "^4.0.1",
65
+ "tailwind-merge": "^2.2.2",
66
+ "tailwind-variants": "^0.2.1",
67
+ "tailwindcss": "^3.4.3",
68
+ "tsx": "^4.7.2",
69
+ "typescript": "^5.4.5",
70
+ "vite": "^5.2.8",
71
+ "vite-plugin-dts": "^3.8.1",
72
+ "vite-tsconfig-paths": "^4.3.2",
73
+ "vitest": "^1.4.0",
74
+ "@frontify/fondue-icons": "^0.1.44"
75
+ },
76
+ "scripts": {
77
+ "build": "vite build",
78
+ "build:storybook": "storybook build",
79
+ "install:playwright": "playwright install --with-deps",
80
+ "lint": "eslint .",
81
+ "lint:fix": "eslint --fix .",
82
+ "storybook": "storybook dev -p 6006",
83
+ "typecheck": "tsc --noEmit",
84
+ "test": "vitest run --coverage",
85
+ "test:ui": "vitest --ui",
86
+ "test:watch": "vitest",
87
+ "test:components": "playwright test --ui",
88
+ "test:components:ci": "playwright test",
89
+ "create:component": "tsx scripts/createNewComponent.ts"
90
+ }
91
+ }
@@ -0,0 +1,12 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>Testing Page</title>
7
+ </head>
8
+ <body>
9
+ <div id="root"></div>
10
+ <script type="module" src="./index.ts"></script>
11
+ </body>
12
+ </html>
@@ -0,0 +1,3 @@
1
+ /* (c) Copyright Frontify Ltd., all rights reserved. */
2
+
3
+ import '../src/styles.css';
@@ -0,0 +1,29 @@
1
+ /* (c) Copyright Frontify Ltd., all rights reserved. */
2
+
3
+ import { defineConfig, devices } from '@playwright/experimental-ct-react';
4
+ import tsConfigPaths from 'vite-tsconfig-paths';
5
+
6
+ // https://playwright.dev/docs/test-configuration
7
+ export default defineConfig({
8
+ testDir: './src',
9
+ snapshotDir: './__snapshots__',
10
+ timeout: 10_000,
11
+ fullyParallel: true,
12
+ forbidOnly: !!process.env.CI,
13
+ retries: process.env.CI ? 2 : 0,
14
+ workers: process.env.CI ? 1 : undefined,
15
+ reporter: 'html',
16
+ testMatch: '**/*.ct.{ts,tsx}',
17
+ use: {
18
+ trace: 'on-first-retry',
19
+ ctPort: 3100,
20
+ ctViteConfig: {
21
+ plugins: [tsConfigPaths()],
22
+ },
23
+ },
24
+ projects: [
25
+ { name: 'chromium', use: { ...devices['Desktop Chrome'] } },
26
+ { name: 'firefox', use: { ...devices['Desktop Firefox'] } },
27
+ { name: 'webkit', use: { ...devices['Desktop Safari'] } },
28
+ ],
29
+ });
@@ -0,0 +1,8 @@
1
+ /* (c) Copyright Frontify Ltd., all rights reserved. */
2
+
3
+ module.exports = {
4
+ plugins: {
5
+ tailwindcss: {},
6
+ autoprefixer: {},
7
+ },
8
+ };
@@ -0,0 +1,42 @@
1
+ /* (c) Copyright Frontify Ltd., all rights reserved. */
2
+
3
+ import { existsSync, mkdirSync, writeFileSync } from 'node:fs';
4
+
5
+ import chalk from 'chalk';
6
+
7
+ import templates from './templates';
8
+
9
+ (() => {
10
+ const componentName = process.argv[3] || process.argv[2];
11
+
12
+ if (!componentName) {
13
+ console.error(chalk.red('You need to supply a component name.'));
14
+ process.exit(1);
15
+ }
16
+
17
+ console.log(`Creating ${componentName} component...`);
18
+
19
+ const componentDirectory = `./src/components/${componentName}`;
20
+
21
+ if (existsSync(componentDirectory)) {
22
+ console.error(chalk.red(`Component ${componentName} already exists.`));
23
+ process.exit(1);
24
+ }
25
+
26
+ const generatedTemplates = templates.map((template) => template(componentName));
27
+
28
+ mkdirSync(componentDirectory);
29
+
30
+ for (const template of generatedTemplates) {
31
+ let directory = componentDirectory;
32
+ if (template.subdirectory) {
33
+ directory = `${componentDirectory}/${template.subdirectory}`;
34
+ if (!existsSync(directory)) {
35
+ mkdirSync(`${componentDirectory}/${template.subdirectory}`);
36
+ }
37
+ }
38
+ writeFileSync(`${directory}/${componentName}${template.extension}`, template.content);
39
+ }
40
+
41
+ console.log(chalk.green(`Component created in ${componentDirectory}`));
42
+ })();
@@ -0,0 +1,25 @@
1
+ /* (c) Copyright Frontify Ltd., all rights reserved. */
2
+
3
+ import { toKebabCase } from '../../transforms';
4
+ import { type ComponentFileBuilderResponse } from '../../types';
5
+
6
+ export const Setup = (componentName: string): ComponentFileBuilderResponse => ({
7
+ content: `/* (c) Copyright Frontify Ltd., all rights reserved. */
8
+
9
+ import { expect, test } from '@playwright/experimental-ct-react';
10
+
11
+ import { ${componentName} } from "../${componentName}";
12
+
13
+ const ${componentName}_TEST_ID = "test-${toKebabCase(componentName)}";
14
+ const ${componentName}_TEXT = "sample ${toKebabCase(componentName)}";
15
+
16
+ test('should render without error', async ({ mount }) => {
17
+ const component = await mount(<${componentName} data-test-id={${componentName}_TEST_ID}>{${componentName}_TEXT}</${componentName}>);
18
+ await expect(component).toBeVisible()
19
+ await expect(component).toContainText(${componentName}_TEXT)
20
+ });
21
+
22
+ `,
23
+ extension: '.ct.tsx',
24
+ subdirectory: '__tests__',
25
+ });
@@ -0,0 +1,24 @@
1
+ /* (c) Copyright Frontify Ltd., all rights reserved. */
2
+
3
+ import { toKebabCase } from '../../transforms';
4
+ import { type ComponentFileBuilderResponse } from '../../types';
5
+
6
+ export const Setup = (componentName: string): ComponentFileBuilderResponse => ({
7
+ content: `/* (c) Copyright Frontify Ltd., all rights reserved. */
8
+
9
+ import { ${componentName} } from "../${componentName}";
10
+
11
+ const ${componentName}_TEST_ID = "test-${toKebabCase(componentName)}";
12
+ const ${componentName}_TEXT = "sample ${toKebabCase(componentName)}";
13
+
14
+ describe("${componentName} Component", () => {
15
+ it("should render foo text correctly", () => {
16
+ const { getByTestId } = render(<${componentName} data-test-id={${componentName}_TEST_ID}>{${componentName}_TEXT}</${componentName}>);
17
+ const component = getByTestId(${componentName}_TEST_ID);
18
+ expect(component).toContain(${componentName}_TEXT);
19
+ });
20
+ });
21
+ `,
22
+ extension: '.spec.tsx',
23
+ subdirectory: '__tests__',
24
+ });
@@ -0,0 +1,35 @@
1
+ /* (c) Copyright Frontify Ltd., all rights reserved. */
2
+
3
+ import { type ComponentFileBuilderResponse } from '../types';
4
+
5
+ // We aren't really in a story
6
+ // eslint-disable-next-line storybook/default-exports
7
+ export const Setup = (componentName: string): ComponentFileBuilderResponse => ({
8
+ content: `/* (c) Copyright Frontify Ltd., all rights reserved. */
9
+
10
+ import { type Meta, type StoryObj } from "@storybook/react";
11
+
12
+ import { ${componentName} } from "./${componentName}";
13
+
14
+ type Story = StoryObj<typeof ${componentName}>;
15
+ const meta: Meta<typeof ${componentName}> = {
16
+ component: ${componentName},
17
+ tags: ['autodocs'],
18
+ parameters: {
19
+ status: {
20
+ type: 'in_progress',
21
+ },
22
+ },
23
+ args: {},
24
+ };
25
+ export default meta;
26
+
27
+ export const Default: Story = {
28
+ name: 'Text Label Only',
29
+ args: {
30
+ children: 'Hello World',
31
+ },
32
+ };
33
+ `,
34
+ extension: '.stories.ts',
35
+ });
@@ -0,0 +1,25 @@
1
+ /* (c) Copyright Frontify Ltd., all rights reserved. */
2
+
3
+ import { toKebabCase } from '../transforms';
4
+ import { type ComponentFileBuilderResponse } from '../types';
5
+
6
+ export const Setup = (componentName: string): ComponentFileBuilderResponse => ({
7
+ content: `/* (c) Copyright Frontify Ltd., all rights reserved. */
8
+
9
+ import { type ReactNode } from "react";
10
+
11
+ import { ${componentName}Styles } from './styles/${componentName}Styles';
12
+
13
+ export type ${componentName}Props = { children?: ReactNode; };
14
+
15
+ export const ${componentName} = ({ children }: ${componentName}Props) => {
16
+ return (
17
+ <div className={${componentName}Styles()} data-test-id="${toKebabCase(componentName)}">
18
+ {children}
19
+ </div>
20
+ );
21
+ };
22
+ ${componentName}.displayName = "${componentName}";
23
+ `,
24
+ extension: '.tsx',
25
+ });
@@ -0,0 +1,15 @@
1
+ /* (c) Copyright Frontify Ltd., all rights reserved. */
2
+
3
+ import * as componentVisualTests from './__tests__/component.ct';
4
+ import * as componentFunctionalTests from './__tests__/component.spec';
5
+ import * as component from './component';
6
+ import * as componentStories from './component.stories';
7
+ import * as componentStyles from './styles/componentStyles';
8
+
9
+ export default [
10
+ component.Setup,
11
+ componentStories.Setup,
12
+ componentFunctionalTests.Setup,
13
+ componentVisualTests.Setup,
14
+ componentStyles.Setup,
15
+ ];
@@ -0,0 +1,16 @@
1
+ /* (c) Copyright Frontify Ltd., all rights reserved. */
2
+
3
+ import { type ComponentFileBuilderResponse } from '../../types';
4
+
5
+ export const Setup = (componentName: string): ComponentFileBuilderResponse => ({
6
+ content: `/* (c) Copyright Frontify Ltd., all rights reserved. */
7
+
8
+ import { sv } from '#/utilities/styleUtilities';
9
+
10
+ export const ${componentName}Styles = sv({
11
+ base: "tw-block",
12
+ })
13
+ `,
14
+ extension: 'Styles.tsx',
15
+ subdirectory: 'styles',
16
+ });
@@ -0,0 +1,13 @@
1
+ /* (c) Copyright Frontify Ltd., all rights reserved. */
2
+
3
+ /**
4
+ * Converts any give input to kebab-case
5
+ *
6
+ * @param name String in any case (PascalCase, camelCase, ...)
7
+ * @returns String in kebab-case
8
+ */
9
+ export const toKebabCase = (name: string): string =>
10
+ name
11
+ .replaceAll(/([a-z])([A-Z])/g, '$1-$2')
12
+ .replaceAll(/[\s_]+/g, '-')
13
+ .toLowerCase();
@@ -0,0 +1,7 @@
1
+ /* (c) Copyright Frontify Ltd., all rights reserved. */
2
+
3
+ export type ComponentFileBuilderResponse = {
4
+ content: string;
5
+ extension: string;
6
+ subdirectory?: string;
7
+ };
@@ -0,0 +1,57 @@
1
+ /* (c) Copyright Frontify Ltd., all rights reserved. */
2
+
3
+ import { IconColorFan, IconIcon } from '@frontify/fondue-icons';
4
+ import { type Meta, type StoryObj } from '@storybook/react';
5
+
6
+ import { Button } from './Button';
7
+
8
+ type Story = StoryObj<typeof Button>;
9
+ const meta: Meta<typeof Button> = {
10
+ component: Button,
11
+ tags: ['autodocs'],
12
+ parameters: {
13
+ status: {
14
+ type: 'released',
15
+ },
16
+ },
17
+ args: {
18
+ type: 'button',
19
+ style: 'default',
20
+ emphasis: 'default',
21
+ size: 'medium',
22
+ rounding: 'medium',
23
+ hideLabel: false,
24
+ disabled: false,
25
+ hugWidth: true,
26
+ children: 'Button Text',
27
+ },
28
+ };
29
+ export default meta;
30
+
31
+ export const Default: Story = {
32
+ name: 'Text Label Only',
33
+ };
34
+
35
+ export const WithIcon: Story = {
36
+ name: 'Icon Only',
37
+ args: {
38
+ hideLabel: true,
39
+ icon: <IconIcon />,
40
+ },
41
+ };
42
+
43
+ export const WithRoundedIcon: Story = {
44
+ name: 'Icon Only Rounded',
45
+ args: {
46
+ rounding: 'full',
47
+ icon: <IconIcon />,
48
+ hideLabel: true,
49
+ },
50
+ };
51
+
52
+ export const WithIconAndLabel: Story = {
53
+ name: 'Icon and Text Label',
54
+ args: {
55
+ icon: <IconColorFan />,
56
+ },
57
+ };