From ac7f874e17890224d17d418357884e44f161fbd9 Mon Sep 17 00:00:00 2001 From: eumaninho54 Date: Sun, 3 May 2026 04:07:59 -0300 Subject: [PATCH 1/7] feat(molecules): add Button molecule Co-Authored-By: Claude Sonnet 4.6 --- .../Molecules/Button/Button.stories.tsx | 116 ++++++++++++++++++ .../stories/Molecules/Button/Button.styles.ts | 7 ++ .../Button/__tests__/Button.test.tsx | 70 +++++++++++ .../Molecules/Button/hooks/index.ts | 1 + .../Button/hooks/useButtonViewModel/index.ts | 12 ++ src/components/Molecules/Button/index.tsx | 50 ++++++++ .../Molecules/Button/library/buildSize.ts | 42 +++++++ .../Button/library/buildVariantColors.ts | 24 ++++ .../Molecules/Button/library/index.ts | 2 + src/components/Molecules/Button/styles.ts | 43 +++++++ .../Molecules/Button/types/ButtonSize.ts | 1 + .../Molecules/Button/types/ButtonVariant.ts | 6 + .../Molecules/Button/types/IButtonProps.ts | 16 +++ .../Molecules/Button/types/index.ts | 3 + src/components/Molecules/index.ts | 1 + 15 files changed, 394 insertions(+) create mode 100644 example/.rnstorybook/stories/Molecules/Button/Button.stories.tsx create mode 100644 example/.rnstorybook/stories/Molecules/Button/Button.styles.ts create mode 100644 src/components/Molecules/Button/__tests__/Button.test.tsx create mode 100644 src/components/Molecules/Button/hooks/index.ts create mode 100644 src/components/Molecules/Button/hooks/useButtonViewModel/index.ts create mode 100644 src/components/Molecules/Button/index.tsx create mode 100644 src/components/Molecules/Button/library/buildSize.ts create mode 100644 src/components/Molecules/Button/library/buildVariantColors.ts create mode 100644 src/components/Molecules/Button/library/index.ts create mode 100644 src/components/Molecules/Button/styles.ts create mode 100644 src/components/Molecules/Button/types/ButtonSize.ts create mode 100644 src/components/Molecules/Button/types/ButtonVariant.ts create mode 100644 src/components/Molecules/Button/types/IButtonProps.ts create mode 100644 src/components/Molecules/Button/types/index.ts diff --git a/example/.rnstorybook/stories/Molecules/Button/Button.stories.tsx b/example/.rnstorybook/stories/Molecules/Button/Button.stories.tsx new file mode 100644 index 0000000..dbcdc7d --- /dev/null +++ b/example/.rnstorybook/stories/Molecules/Button/Button.stories.tsx @@ -0,0 +1,116 @@ +import type { Meta, StoryObj } from '@storybook/react-native'; +import React, { useState } from 'react'; +import { View } from 'react-native'; +import { Button } from 'rubber-duck-ui'; +import { styles } from './Button.styles'; + +const meta = { + title: 'Molecules/Button', + component: Button, + args: { + label: 'Button', + variant: 'primary', + size: 'md', + disabled: false, + isLoading: false, + fullWidth: false, + onPress: () => {}, + }, + argTypes: { + label: { control: 'text' }, + variant: { + control: 'select', + options: ['primary', 'secondary', 'outline', 'ghost', 'destructive'], + }, + size: { + control: 'select', + options: ['sm', 'md', 'lg'], + }, + disabled: { control: 'boolean' }, + isLoading: { control: 'boolean' }, + fullWidth: { control: 'boolean' }, + leftIcon: { + control: 'select', + options: [undefined, 'ArrowLeft', 'Plus', 'Check', 'Trash2'], + }, + rightIcon: { + control: 'select', + options: [undefined, 'ArrowRight', 'Plus', 'Check', 'Trash2'], + }, + }, +} satisfies Meta; + +export default meta; + +type Story = StoryObj; + +export const Default: Story = {}; + +export const Variants: Story = { + render: (args) => ( + +