@tetjana/flowmakers-ds 0.1.8 → 0.1.10

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.
@@ -0,0 +1,65 @@
1
+ # Question (FAQ Accordion)
2
+
3
+ An expandable FAQ item. Click to reveal the answer. Used on landing pages and help sections.
4
+
5
+ ## Import
6
+ ```tsx
7
+ import { Question } from '@tetjana/flowmakers-ds';
8
+ import '@tetjana/flowmakers-ds/styles';
9
+ ```
10
+
11
+ ## Props
12
+ | Prop | Type | Default | Description |
13
+ |------|------|---------|-------------|
14
+ | `title` | `string` | `"Що таке Rework?"` | Question text |
15
+ | `text` | `string` | `"..."` | Answer text (shown when open) |
16
+ | `open` | `boolean` | `false` | Whether the accordion is expanded |
17
+ | `state` | `'default' \| 'hover'` | `'default'` | Visual state (hover = pink border) |
18
+ | `onClick` | `() => void` | — | Toggle handler |
19
+ | `className` | `string` | — | Extra CSS class |
20
+
21
+ ## States
22
+ - **default** — closed, gray border (`#eeeef0`), purple `+` icon
23
+ - **hover** — closed, pink border (`#ffa8f1`), purple `+` icon
24
+ - **open** — expanded with answer text, pink border, dark `×` icon
25
+
26
+ ## Usage
27
+
28
+ ### Static showcase
29
+ ```tsx
30
+ <Question title="Що таке Rework?" state="default" />
31
+ <Question title="Як розпочати?" state="hover" />
32
+ <Question title="Які тарифи?" open text="Базовий, Стандарт, Преміум." />
33
+ ```
34
+
35
+ ### Interactive FAQ list
36
+ ```tsx
37
+ const [openIndex, setOpenIndex] = useState<number | null>(null);
38
+
39
+ const faqs = [
40
+ { title: 'Що таке Rework?', text: 'AI-платформа для кар\'єри...' },
41
+ { title: 'Як розпочати?', text: 'Зареєструйтеся і...' },
42
+ ];
43
+
44
+ return faqs.map((faq, i) => (
45
+ <Question
46
+ key={i}
47
+ title={faq.title}
48
+ text={faq.text}
49
+ open={openIndex === i}
50
+ onClick={() => setOpenIndex(openIndex === i ? null : i)}
51
+ />
52
+ ));
53
+ ```
54
+
55
+ ## Design
56
+ - Container: `border-radius: 20px`, `padding: 20px 16px`
57
+ - Title: Manrope SemiBold 20px, `#121212`
58
+ - Answer: Nunito Sans Light 16px, `#121212`, `line-height: 1.4`
59
+ - Icon: 33px circle, purple (`#9076dc`) when closed, dark (`#18181b`) when open
60
+ - Border transition: `0.15s`
61
+
62
+ ## When to use
63
+ - FAQ sections on landing pages
64
+ - Help/documentation pages
65
+ - Any expandable question-answer content
@@ -0,0 +1,57 @@
1
+ # RadioButton
2
+
3
+ Single radio input with a custom-styled circle indicator and an optional label. Fully controlled — manage the `checked` state in the parent component.
4
+
5
+ ## Import
6
+ ```tsx
7
+ import { RadioButton } from '@tetjana/flowmakers-ds';
8
+ import '@tetjana/flowmakers-ds/styles';
9
+ ```
10
+
11
+ ## Props
12
+ | Prop | Type | Default | Description |
13
+ |------|------|---------|-------------|
14
+ | `label` | `string` | — | Text label shown next to the button |
15
+ | `checked` | `boolean` | `false` | Whether the radio is selected |
16
+ | `disabled` | `boolean` | — | Disables interaction |
17
+ | `onChange` | `React.ChangeEventHandler<HTMLInputElement>` | — | Change handler |
18
+ | `className` | `string` | — | Extra CSS class on the wrapper `<label>` |
19
+ | `...rest` | `InputHTMLAttributes<HTMLInputElement>` | — | All native `<input type="radio">` attributes (name, value, etc.) |
20
+
21
+ ## Usage
22
+
23
+ ```tsx
24
+ // Controlled radio group
25
+ const [plan, setPlan] = useState('basic');
26
+
27
+ <RadioButton
28
+ label="Базовий"
29
+ name="plan"
30
+ value="basic"
31
+ checked={plan === 'basic'}
32
+ onChange={() => setPlan('basic')}
33
+ />
34
+ <RadioButton
35
+ label="Про"
36
+ name="plan"
37
+ value="pro"
38
+ checked={plan === 'pro'}
39
+ onChange={() => setPlan('pro')}
40
+ />
41
+
42
+ // Disabled
43
+ <RadioButton label="Преміум (незабаром)" disabled />
44
+ ```
45
+
46
+ ## Design
47
+ - Wrapper `<label>`: `display: flex`, `align-items: center`, `gap: 8px`, `cursor: pointer`
48
+ - Circle: `18×18px`, `border: 2px solid #eeeef0`, `border-radius: 9999px`
49
+ - Checked circle: border-color `#9076dc`, inner dot `8×8px` filled `#9076dc`
50
+ - Disabled: `opacity: 0.5`, `cursor: not-allowed`
51
+ - Label: Nunito Sans Regular 14px, `#18181b`
52
+ - Native `<input>` is visually hidden (`sr-only`)
53
+
54
+ ## When to use
55
+ - Mutually exclusive option groups (plan selection, gender, sorting)
56
+ - Use multiple `RadioButton` components sharing the same `name` prop
57
+ - For a full plan card with price + features, use `Price` or `PriceCard` instead
@@ -0,0 +1,41 @@
1
+ # Search
2
+
3
+ Text input with a built-in search icon. Used in dashboards and filter areas for quick content filtering.
4
+
5
+ ## Import
6
+ ```tsx
7
+ import { Search } from '@tetjana/flowmakers-ds';
8
+ import '@tetjana/flowmakers-ds/styles';
9
+ ```
10
+
11
+ ## Props
12
+ | Prop | Type | Default | Description |
13
+ |------|------|---------|-------------|
14
+ | `placeholder` | `string` | `'Пошук...'` | Input placeholder text |
15
+ | `className` | `string` | — | Extra CSS class on the wrapper |
16
+ | `...rest` | `InputHTMLAttributes<HTMLInputElement>` | — | All native `<input>` attributes (value, onChange, onKeyDown, etc.) |
17
+
18
+ ## Usage
19
+
20
+ ```tsx
21
+ // Uncontrolled
22
+ <Search placeholder="Знайти вакансію..." />
23
+
24
+ // Controlled
25
+ const [q, setQ] = useState('');
26
+ <Search
27
+ value={q}
28
+ onChange={e => setQ(e.target.value)}
29
+ placeholder="Пошук по резюме..."
30
+ />
31
+ ```
32
+
33
+ ## Design
34
+ - Wrapper: `display: flex`, `align-items: center`, `gap: 8px`, `border: 1px solid #eeeef0`, `border-radius: 12px`, `padding: 8px 12px`
35
+ - Icon: `20×20px`, stroke `#91939f`
36
+ - Input: no native border, full-width, Nunito Sans Regular 14px, `#18181b`
37
+
38
+ ## When to use
39
+ - Dashboard search bars
40
+ - Filter inputs for lists or tables
41
+ - Combine with `Dropdown` for filter + search patterns
@@ -0,0 +1,74 @@
1
+ # SectionTitle
2
+
3
+ Landing page section heading with optional tag badge, title, and subtitle. Supports three layout variants.
4
+
5
+ ## Import
6
+ ```tsx
7
+ import { SectionTitle } from '@tetjana/flowmakers-ds';
8
+ import { type SectionTitleVariant } from '@tetjana/flowmakers-ds';
9
+ import '@tetjana/flowmakers-ds/styles';
10
+ ```
11
+
12
+ ## Types
13
+
14
+ ```ts
15
+ type SectionTitleVariant = 'centered' | 'split' | 'left';
16
+ ```
17
+
18
+ ## Props
19
+ | Prop | Type | Default | Description |
20
+ |------|------|---------|-------------|
21
+ | `tag` | `string` | `'Можливості платформи'` | Text for the `TagBig` badge above the title |
22
+ | `showTag` | `boolean` | `true` | Whether to show the tag badge |
23
+ | `title` | `string` | `"Все для твоєї кар'єри"` | Main section heading |
24
+ | `subtitle` | `string` | `'Комплексна платформа...'` | Supporting paragraph |
25
+ | `showSubtitle` | `boolean` | `true` | Whether to show the subtitle |
26
+ | `variant` | `SectionTitleVariant` | `'centered'` | Layout variant |
27
+ | `className` | `string` | — | Extra CSS class |
28
+
29
+ ## Usage
30
+
31
+ ```tsx
32
+ // Centered (default) — used in most sections
33
+ <SectionTitle
34
+ tag="Переваги"
35
+ title="Чому обирають нас"
36
+ subtitle="Платформа, яка реально допомагає знайти роботу"
37
+ />
38
+
39
+ // Split — title left, subtitle right (2-column layout)
40
+ <SectionTitle
41
+ variant="split"
42
+ tag="Тарифи"
43
+ title="Обери свій план"
44
+ subtitle="Гнучкі тарифи для будь-якого рівня"
45
+ />
46
+
47
+ // Left-aligned — no centering
48
+ <SectionTitle
49
+ variant="left"
50
+ tag="Блог"
51
+ title="Останні статті"
52
+ showSubtitle={false}
53
+ />
54
+ ```
55
+
56
+ ## Variants
57
+
58
+ | Variant | Layout |
59
+ |---------|--------|
60
+ | `centered` | Tag + title + subtitle stacked, center-aligned |
61
+ | `split` | Tag + title on left, subtitle on right (flex row) |
62
+ | `left` | Tag + title + subtitle stacked, left-aligned |
63
+
64
+ ## Design
65
+ - Uses `TagBig` internally for the badge (with `showIcon={false}`)
66
+ - Heading (`<h2>`): Manrope Bold 40px, `#18181b`
67
+ - Subtitle: Nunito Sans Regular 18px, `#5d5e6c`, `max-width: 560px`
68
+ - Centered variant: `text-align: center`, `align-items: center`
69
+ - Split variant: `display: flex`, `justify-content: space-between`, `align-items: flex-end`
70
+
71
+ ## When to use
72
+ - Opening of every landing page section
73
+ - Replaces manually building tag + heading + subtitle every time
74
+ - Do not use `SectionTitle` inside the dashboard — use `DashboardTitle` instead
@@ -0,0 +1,40 @@
1
+ # SignupForm
2
+
3
+ Email capture form with a CTA button. Typically used in hero sections and landing page footers.
4
+
5
+ ## Import
6
+ ```tsx
7
+ import { SignupForm } from '@tetjana/flowmakers-ds';
8
+ import '@tetjana/flowmakers-ds/styles';
9
+ ```
10
+
11
+ ## Props
12
+ | Prop | Type | Default | Description |
13
+ |------|------|---------|-------------|
14
+ | `placeholder` | `string` | `'Ваша електронна пошта'` | Input placeholder text |
15
+ | `buttonLabel` | `string` | `'Почати безкоштовно'` | CTA button text |
16
+ | `onSubmit` | `(email: string) => void` | — | Called on form submit with the email value |
17
+ | `className` | `string` | — | Extra CSS class |
18
+
19
+ ## Usage
20
+
21
+ ```tsx
22
+ <SignupForm
23
+ placeholder="Ваша електронна пошта"
24
+ buttonLabel="Почати безкоштовно"
25
+ onSubmit={(email) => console.log('Submitted:', email)}
26
+ />
27
+ ```
28
+
29
+ ## Design
30
+ - Container: `background: white`, `border-radius: 20px`, `padding: 10px 20px`
31
+ - Input: Nunito Sans Light 16px, transparent background, full flex width
32
+ - Placeholder color: `#5d5e6c` (nature-fill-600)
33
+ - Button: black bg (`#121212`), white text, `border-radius: 12px`, height `42px`
34
+ - Internally controlled — email value is managed with `useState`
35
+
36
+ ## When to use
37
+ - Hero CTA sections on landing pages
38
+ - Newsletter subscription
39
+ - Waitlist sign-up
40
+ - Do NOT use for complex multi-field forms (use `Input` + `Button` separately)
@@ -0,0 +1,61 @@
1
+ # Stepper
2
+
3
+ Horizontal step indicator with numbered circles and connector lines. Shows multi-step progress (e.g. onboarding, form wizard).
4
+
5
+ ## Import
6
+ ```tsx
7
+ import { Stepper } from '@tetjana/flowmakers-ds';
8
+ import { type StepperStep, type StepperStepState } from '@tetjana/flowmakers-ds';
9
+ import '@tetjana/flowmakers-ds/styles';
10
+ ```
11
+
12
+ ## Types
13
+
14
+ ```ts
15
+ type StepperStepState = 'done' | 'in-process' | 'inactive';
16
+
17
+ interface StepperStep {
18
+ label: string;
19
+ state: StepperStepState;
20
+ }
21
+ ```
22
+
23
+ ## Props
24
+ | Prop | Type | Default | Description |
25
+ |------|------|---------|-------------|
26
+ | `steps` | `StepperStep[]` | required | Ordered list of steps with label and state |
27
+ | `className` | `string` | — | Extra CSS class |
28
+
29
+ ## Usage
30
+
31
+ ```tsx
32
+ <Stepper
33
+ steps={[
34
+ { label: 'Реєстрація', state: 'done' },
35
+ { label: 'Профіль', state: 'in-process' },
36
+ { label: 'Тестування', state: 'inactive' },
37
+ { label: 'Результат', state: 'inactive' },
38
+ ]}
39
+ />
40
+ ```
41
+
42
+ ## Step states
43
+
44
+ | State | Circle | Line | Label |
45
+ |-------|--------|------|-------|
46
+ | `done` | Purple fill, white check ✓ | Purple | Gray muted |
47
+ | `in-process` | Purple fill, white number | Purple | Dark `#18181b` |
48
+ | `inactive` | Gray outline, gray number | Gray | Gray muted |
49
+
50
+ ## Design
51
+ - Layout: `display: flex`, `align-items: flex-start`, `gap: 0` (steps stretch with lines between)
52
+ - Circle: `32×32px`, `border-radius: 50%`
53
+ - Done/in-process circle: `background: #9076dc`
54
+ - Inactive circle: `border: 2px solid #eeeef0`, transparent
55
+ - Line: `height: 2px`, grows to fill space between circles (`flex: 1`)
56
+ - Label: Nunito Sans 12px, positioned below the circle
57
+
58
+ ## When to use
59
+ - Multi-step forms (profile setup, checkout)
60
+ - Onboarding wizards
61
+ - Use `StepperProgress` for a vertical sidebar-style progress tracker instead
@@ -0,0 +1,62 @@
1
+ # StepperProgress
2
+
3
+ Vertical progress tracker with checkmark circles and connecting lines. Used in sidebars and dashboards to show task/step completion.
4
+
5
+ ## Import
6
+ ```tsx
7
+ import { StepperProgress } from '@tetjana/flowmakers-ds';
8
+ import { type StepperProgressStep, type StepperProgressState } from '@tetjana/flowmakers-ds';
9
+ import '@tetjana/flowmakers-ds/styles';
10
+ ```
11
+
12
+ ## Types
13
+
14
+ ```ts
15
+ type StepperProgressState = 'done' | 'in-process' | 'inactive';
16
+
17
+ interface StepperProgressStep {
18
+ label: string;
19
+ state?: StepperProgressState; // defaults to 'inactive'
20
+ }
21
+ ```
22
+
23
+ ## Props
24
+ | Prop | Type | Default | Description |
25
+ |------|------|---------|-------------|
26
+ | `steps` | `StepperProgressStep[]` | required | Ordered list of steps |
27
+ | `className` | `string` | — | Extra CSS class |
28
+
29
+ ## Usage
30
+
31
+ ```tsx
32
+ <StepperProgress
33
+ steps={[
34
+ { label: 'Завантажити резюме', state: 'done' },
35
+ { label: 'Пройти AI-тест', state: 'in-process' },
36
+ { label: 'Переглянути рекомендації', state: 'inactive' },
37
+ { label: 'Надіслати заявку', state: 'inactive' },
38
+ ]}
39
+ />
40
+ ```
41
+
42
+ ## Step states
43
+
44
+ | State | Circle | Line | Label |
45
+ |-------|--------|------|-------|
46
+ | `done` | Purple fill, white ✓ | Purple solid | Muted gray |
47
+ | `in-process` | Purple fill, white ✓ | Gray dashed | Dark `#18181b` |
48
+ | `inactive` | Gray outline, no check | Gray dashed | Muted gray |
49
+
50
+ ## Design
51
+ - Layout: `display: flex`, `flex-direction: column`, `gap: 0`
52
+ - Circle: `24×24px`, `border-radius: 50%`
53
+ - Done/in-process circle: `background: #9076dc`
54
+ - Inactive circle: `border: 2px solid #eeeef0`
55
+ - Connector line: `width: 2px`, `height: 24px`, centered below circle
56
+ - Label: Nunito Sans Regular 14px, positioned to the right of the circle
57
+
58
+ ## When to use
59
+ - Dashboard sidebar progress lists
60
+ - Onboarding checklists
61
+ - Step-by-step task completion tracking
62
+ - Use `Stepper` (horizontal) for wizard-style multi-step navigation instead
@@ -0,0 +1,39 @@
1
+ # TagBig
2
+
3
+ A large pill-shaped tag with an optional sparkle icon. Used as a section label / badge above headings on landing pages.
4
+
5
+ ## Import
6
+ ```tsx
7
+ import { TagBig } from '@tetjana/flowmakers-ds';
8
+ import '@tetjana/flowmakers-ds/styles';
9
+ ```
10
+
11
+ ## Props
12
+ | Prop | Type | Default | Description |
13
+ |------|------|---------|-------------|
14
+ | `label` | `string` | `"АІ-помічник для кар'єрного розвитку"` | Text content of the tag |
15
+ | `showIcon` | `boolean` | `true` | Show the sparkle gradient icon before the text |
16
+ | `className` | `string` | — | Extra CSS class |
17
+
18
+ ## Usage
19
+
20
+ ```tsx
21
+ // Default — with sparkle icon
22
+ <TagBig label="Нові можливості" />
23
+
24
+ // Without icon (used inside SectionTitle split variant)
25
+ <TagBig label="Про платформу" showIcon={false} />
26
+
27
+ // Custom label
28
+ <TagBig label="Бета-версія" />
29
+ ```
30
+
31
+ ## Design
32
+ - Container: `display: inline-flex`, `align-items: center`, `gap: 6px`, `border: 1px solid #eeeef0`, `border-radius: 9999px`, `padding: 6px 12px`, `background: #ffffff`
33
+ - Icon: `16×16px` sparkle SVG, purple-to-pink gradient (`#9076dc` → `#ffa8f1`)
34
+ - Label: Nunito Sans SemiBold 14px, `#18181b`
35
+
36
+ ## When to use
37
+ - Section labels above hero headings (`<SectionTitle tag="..." />` uses it internally)
38
+ - Feature badges
39
+ - Note: `SectionTitle` with `showTag` uses `TagBig` automatically — use standalone `TagBig` only when you need it outside a section title context
@@ -0,0 +1,57 @@
1
+ # Tariffs
2
+
3
+ A plan/tier selection card with icon, title, and description. Used in pricing or plan-selection flows.
4
+
5
+ ## Import
6
+ ```tsx
7
+ import { Tariffs } from '@tetjana/flowmakers-ds';
8
+ import '@tetjana/flowmakers-ds/styles';
9
+ ```
10
+
11
+ ## Props
12
+ | Prop | Type | Default | Description |
13
+ |------|------|---------|-------------|
14
+ | `icon` | `ReactNode` | — | Icon element (displayed in a purple-tint box) |
15
+ | `title` | `string` | `'Базовий'` | Plan name |
16
+ | `description` | `string` | `'Ідеальний старт...'` | Short description of the plan |
17
+ | `variant` | `'default' \| 'hover'` | `'default'` | Visual state |
18
+ | `className` | `string` | — | Extra CSS class |
19
+
20
+ ## Variants
21
+ - **default** — white bg, gray border (`#eeeef0`)
22
+ - **hover** — white bg, pink border (`#ffa8f1`)
23
+
24
+ ## Usage
25
+
26
+ ```tsx
27
+ import { Tariffs } from '@tetjana/flowmakers-ds';
28
+
29
+ const PlanIcon = () => <svg>...</svg>;
30
+
31
+ // Default plan card
32
+ <Tariffs
33
+ icon={<PlanIcon />}
34
+ title="Базовий"
35
+ description="Ідеальний старт для знайомства з платформою."
36
+ />
37
+
38
+ // Highlighted (selected/hover) state
39
+ <Tariffs
40
+ icon={<PlanIcon />}
41
+ title="Про"
42
+ description="Максимальні можливості для активного пошуку роботи."
43
+ variant="hover"
44
+ />
45
+ ```
46
+
47
+ ## Design
48
+ - Layout: `flex`, `align-items: center`, `gap: 20px`, `padding: 20px`
49
+ - Icon box: `40×40px`, `background: #e0ddf7` (primary-fill-200), `border-radius: 4px`
50
+ - Title: Manrope SemiBold 20px, `#18181b`
51
+ - Description: Nunito Sans Light 12px, `#4c4d58`
52
+ - Border-radius: 12px
53
+
54
+ ## When to use
55
+ - Pricing/plan selection UI
56
+ - Feature comparison rows
57
+ - Settings plan display
@@ -0,0 +1,68 @@
1
+ # TasksWidget
2
+
3
+ A dashboard widget that displays a list of tasks with completion status and optional time tags. Shows a checkmark for done items and strikethrough text.
4
+
5
+ ## Import
6
+ ```tsx
7
+ import { TasksWidget } from '@tetjana/flowmakers-ds';
8
+ import { type TaskItem } from '@tetjana/flowmakers-ds';
9
+ import '@tetjana/flowmakers-ds/styles';
10
+ ```
11
+
12
+ ## Types
13
+
14
+ ```ts
15
+ interface TaskItem {
16
+ label: string;
17
+ done?: boolean;
18
+ time?: string;
19
+ }
20
+ ```
21
+
22
+ ## Props
23
+ | Prop | Type | Default | Description |
24
+ |------|------|---------|-------------|
25
+ | `tasks` | `TaskItem[]` | required | List of tasks to render |
26
+ | `className` | `string` | — | Extra CSS class |
27
+
28
+ ## Usage
29
+
30
+ ```tsx
31
+ <TasksWidget
32
+ tasks={[
33
+ { label: 'Оновити резюме', done: true, time: '09:00' },
34
+ { label: 'Пройти тест на увагу', done: true },
35
+ { label: 'Переглянути вакансії', done: false, time: '14:00' },
36
+ { label: 'Надіслати заявку в компанію', done: false },
37
+ ]}
38
+ />
39
+
40
+ // Minimal — no time tags
41
+ <TasksWidget
42
+ tasks={[
43
+ { label: 'Завершити профіль', done: true },
44
+ { label: 'Додати фото', done: false },
45
+ ]}
46
+ />
47
+ ```
48
+
49
+ ## Task item anatomy
50
+ Each row contains:
51
+ 1. **Checkbox** — `20×20px` circle; filled purple (`#9076dc`) + white check when `done`, empty gray outline when not done
52
+ 2. **Label** — task text; strikethrough + muted color when `done`
53
+ 3. **Time tag** (optional) — small pill badge showing the time string
54
+
55
+ ## Design
56
+ - Container: `display: flex`, `flex-direction: column`, `gap: 12px`
57
+ - Row: `display: flex`, `align-items: center`, `gap: 12px`
58
+ - Checkbox: `20×20px`, `border-radius: 50%`
59
+ - Done: `background: #9076dc`, white ✓ SVG
60
+ - Pending: `border: 2px solid #eeeef0`, transparent bg
61
+ - Label: Nunito Sans Regular 14px, `#18181b`
62
+ - Done label: `text-decoration: line-through`, color `#91939f`
63
+ - Time tag: `background: #f7f7f8`, `border-radius: 8px`, `padding: 2px 8px`, Nunito Sans SemiBold 12px, `#5d5e6c`
64
+
65
+ ## When to use
66
+ - Dashboard home pages (daily task list)
67
+ - Sidebar to-do widgets
68
+ - Progress summaries in onboarding flows
@@ -0,0 +1,50 @@
1
+ # TestimonialCard
2
+
3
+ Displays a user quote with avatar, name, and role. Used in social proof / reviews sections.
4
+
5
+ ## Import
6
+ ```tsx
7
+ import { TestimonialCard } from '@tetjana/flowmakers-ds';
8
+ import '@tetjana/flowmakers-ds/styles';
9
+ ```
10
+
11
+ ## Props
12
+ | Prop | Type | Required | Description |
13
+ |------|------|----------|-------------|
14
+ | `name` | `string` | ✅ | Author's full name |
15
+ | `quote` | `string` | ✅ | Review / testimonial text |
16
+ | `avatar` | `string` | — | URL of avatar image |
17
+ | `role` | `string` | — | Job title or description |
18
+ | `className` | `string` | — | Extra CSS class |
19
+
20
+ ## Usage
21
+
22
+ ```tsx
23
+ <TestimonialCard
24
+ name="Олена Ковальська"
25
+ role="Front-end Developer"
26
+ quote="Завдяки Rework я знайшла нову роботу за 3 тижні. Тести дійсно показали мої слабкі місця."
27
+ avatar="/avatars/olena.jpg"
28
+ />
29
+ ```
30
+
31
+ ## Without avatar (uses first letter as placeholder)
32
+ ```tsx
33
+ <TestimonialCard
34
+ name="Максим Петренко"
35
+ role="Product Manager"
36
+ quote="Найкраща платформа для кар'єрного зростання."
37
+ />
38
+ ```
39
+
40
+ ## Design
41
+ - Container: `width: 351px`, `border: 1px solid #eeeef0`, `border-radius: 20px`, `padding: 32px 24px`, `gap: 24px`
42
+ - Avatar: `30×30px`, circle
43
+ - Name: Nunito Sans Bold 12px, `#18181b`
44
+ - Role: Nunito Sans Light 12px, `#18181b`
45
+ - Quote: Nunito Sans Light 18px, `line-height: 1.12`
46
+
47
+ ## When to use
48
+ - Social proof sections on landing pages
49
+ - Customer reviews
50
+ - Use in a horizontal scroll or grid layout (typically 3 per row)
@@ -0,0 +1,58 @@
1
+ # TimePicker
2
+
3
+ Time input field with label, helper text, and visual states. Mirrors the `DatePicker` API but uses `<input type="time">` with a clock icon.
4
+
5
+ ## Import
6
+ ```tsx
7
+ import { TimePicker } from '@tetjana/flowmakers-ds';
8
+ import { type TimePickerState } from '@tetjana/flowmakers-ds';
9
+ import '@tetjana/flowmakers-ds/styles';
10
+ ```
11
+
12
+ ## Types
13
+
14
+ ```ts
15
+ type TimePickerState = 'default' | 'hover' | 'focused' | 'disabled';
16
+ ```
17
+
18
+ ## Props
19
+ | Prop | Type | Default | Description |
20
+ |------|------|---------|-------------|
21
+ | `label` | `string` | — | Label displayed above the field |
22
+ | `helperText` | `string` | — | Helper/error text below the field |
23
+ | `state` | `TimePickerState` | `'default'` | Visual state |
24
+ | `disabled` | `boolean` | — | Disables input (also triggered by `state='disabled'`) |
25
+ | `className` | `string` | — | Extra CSS class on the wrapper |
26
+ | `...rest` | `InputHTMLAttributes<HTMLInputElement>` | — | All native `<input>` attributes (value, onChange, etc.) |
27
+
28
+ ## Usage
29
+
30
+ ```tsx
31
+ // Basic
32
+ <TimePicker label="Час початку" />
33
+
34
+ // Controlled with helper
35
+ <TimePicker
36
+ label="Час зустрічі"
37
+ helperText="Робочі години: 09:00–18:00"
38
+ value={time}
39
+ onChange={e => setTime(e.target.value)}
40
+ />
41
+
42
+ // Disabled
43
+ <TimePicker label="Час закінчення" state="disabled" />
44
+ ```
45
+
46
+ ## Design
47
+ Identical to `DatePicker` layout and styling — differs only in icon (clock instead of calendar) and input type.
48
+
49
+ - Container: `display: flex`, `flex-direction: column`, `gap: 4px`
50
+ - Label: Nunito Sans SemiBold 14px, `#18181b`
51
+ - Field: `border: 1px solid #eeeef0`, `border-radius: 12px`, `padding: 10px 12px`, `height: 42px`
52
+ - Focused state: border-color `#9076dc`
53
+ - Disabled state: background `#f7f7f8`, opacity `0.6`
54
+
55
+ ## When to use
56
+ - Scheduling forms (pair with `DatePicker` for full datetime input)
57
+ - Meeting / event booking
58
+ - Availability selection