@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.
- package/dist/components/Question.d.ts +4 -3
- package/dist/index.cjs.js +1 -1
- package/dist/index.esm.js +277 -275
- package/dist/styles.css +1 -1
- package/guidelines/Guidelines.md +25 -4
- package/guidelines/components/dashboardtitle.md +49 -0
- package/guidelines/components/datepicker.md +59 -0
- package/guidelines/components/dropdown.md +68 -0
- package/guidelines/components/listitem.md +40 -0
- package/guidelines/components/price.md +51 -0
- package/guidelines/components/pricecard.md +35 -0
- package/guidelines/components/processstep.md +70 -0
- package/guidelines/components/question.md +65 -0
- package/guidelines/components/radiobutton.md +57 -0
- package/guidelines/components/search.md +41 -0
- package/guidelines/components/sectiontitle.md +74 -0
- package/guidelines/components/signupform.md +40 -0
- package/guidelines/components/stepper.md +61 -0
- package/guidelines/components/stepperprogress.md +62 -0
- package/guidelines/components/tagbig.md +39 -0
- package/guidelines/components/tariffs.md +57 -0
- package/guidelines/components/taskswidget.md +68 -0
- package/guidelines/components/testimonialcard.md +50 -0
- package/guidelines/components/timepicker.md +58 -0
- package/guidelines/overview-components.md +29 -5
- package/package.json +1 -1
|
@@ -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
|