# Account Limitations Modal — IA

**Slug:** `account-limitations-modal`
**Дата:** 2026-05-13
**Формат:** Modal (Width_m=496) — `patterns/modal.md`

---

## Discovery

| # | Питання | Відповідь |
|---|---------|-----------|
| 1 | Що дизайнимо | Модалка налаштування лімітів взаємодії одного акаунту з усіма іншими + per-project винятки |
| 2 | Контекст у продукті | Account detail → кнопка/меню "Limitations". Один акаунт у фокусі (e.g. Privat Основна) → керування правилами для всіх інших |
| 3 | User goal | "Я хочу заблокувати/обмежити рух коштів між цим акаунтом і конкретними іншими, з можливістю override через проєкт" |
| 4 | Контент і дані | Список усіх інших акаунтів юзера. На кожному — default mode (Send / Receive / Send and Receive / No transaction / By Account). При `By Account` під рядом — per-project rules (project → mode) |
| 5 | Стейти | Default з лімітами / Empty (нема інших акаунтів) / Search active / Limitation dropdown opened / Project exceptions expanded / Add project rule / Saving + Toast Success / Toast Error |

## Доменна модель

Один акаунт A. Для кожного іншого акаунту B існує **default rule** (`A ⇄ B`):
- `Send and Receive` — будь-які взаємодії *(default at creation)*
- `Send` — A може **відправити в** B (тільки)
- `Receive` — A може **отримати від** B (тільки)
- `No transaction` — заморожено
- `By Account` — є per-project overrides → за замовчуванням блок, по конкретним проєктам — інше правило (рідкісне семантично, але технічно це "use project rules only")

При `By Account` під рядом B з'являється список **project rules** для пари (A,B):
- `Project P → mode` (та сама шкала Send / Receive / Send and Receive / No transaction)
- кнопка `+ Add project rule`

## Зони (зверху вниз)

1. **Header**
   - Title H1 — `Limitations`
   - Subtitle (body small, secondary) — `for **Privat Основна**` (контекст акаунту-фокусу)
   - Close (Controls / Big) — праворуч від Title

2. **Search** (опціонально, при N ≥ 8)
   - `Search` (Color=Light) — placeholder `Search accounts`

3. **Account list** (scrollable)
   - Кожен рядок = `Account Row` *(кастом, gap → `new-additions.md`)*:
     - Account icon (Icons/Account Type/Account, Size=Big, колір per type)
     - Назва акаунту + (опц.) валюта/баланс під ним
     - `Limitation Option` (instance, 5 варіантів) — праворуч, clickable → popup
   - Якщо state = `By Account` → під рядом expand inline:
     - Тонкий divider зверху
     - Заголовок `Per-project rules` (body small, secondary)
     - Project rules — список `Project chip + Limitation Option` (mini)
     - Text Button `+ Add project rule`

4. **Footer**
   - Один Button (Type=Primary, Size=Medium) — `Done` (close, full-width)
   - Без Cancel — автозбереження при кожному кліку (див. Поведінка)

## Поведінка

- **Save model:** **autosave** при кожному кліку на Limitation Option. Toast `Limitation updated`. Без isDirty + явного Save.
- **Limitation Option click:** відкриває popup-меню з 5 опціями. Вибір → close popup → optimistic UI update → API call → toast (success/error).
- **By Account selected:** одразу expand inline, фокус на `+ Add project rule`. Якщо потім перемикнули назад → project rules **зберігаються** (приховані), але правило не діє.
- **Project rule add:** кнопка `+ Add project rule` → dropdown `Choose project` → після вибору → expand з Limitation Option = `Send and Receive` (default).
- **Project rule remove:** ✕ на чіпі projects (у `Access Project Tag` Selected state).
- **Default mode для нового акаунту** в системі = `Send and Receive` (whitelisting by default; Orbuculum — інструмент self-observation, не блокування).
- **ESC / overlay click / Close / Done** — закрити модалку.

## Контент / Tone

- Title — `Limitations` (не "Account access" — це окрема історія про шаринг між users)
- Subtitle — `for Privat Основна` (динамічно)
- Search placeholder — `Search accounts` *(MUST #17 → kb/orbuculum.design.md → осмислений placeholder)*
- Limitation labels — як в UI Kit (`Send` / `Receive` / `Send and Receive` / `No transaction` / `By Account`). NB: typos в kit (`Recieve`, `Send end recieve`) — в new-additions як декларації fix
- Empty state — `No other accounts yet. Add one first.` + Text Button `Create account` → відкриває Create Account Modal
- Toasts:
  - ✓ `Limitation updated` / `Privat Основна → Mono UA · Send only`
  - ✗ `Couldn't update limitation` / `Please try again.` (без "Oops")

## Стани (для Figma)

| # | Стан | Що показує |
|---|------|------------|
| 1 | Default | Список з різними lim values, без expansion |
| 2 | Search active | Filtered list (e.g. "mono") |
| 3 | Limitation dropdown opened | Popup з 5 варіантами поверх обраного рядка |
| 4 | Project exceptions expanded | Один рядок з By Account + 2 project rules + кнопка |
| 5 | Add project rule (dropdown) | Search dropdown проектів поверх кнопки |
| 6 | Empty | "No other accounts yet" + CTA |
| 7 | Loading | Skeleton-рядки (3 шт) |
| 8 | Toast Success | `Limitation updated` (overlay не блокується) |
| 9 | Toast Error | `Couldn't update limitation` |

## Компоненти UI Kit

| Компонент | Звідки | Як | Default mode |
|-----------|--------|----|----|
| Modal-container | композиція (`patterns/modal.md`) | Width_m=496, padding 28 | — |
| Title | text style `Title/H1` | — | — |
| Close | `Controls/Close/Big` | — | — |
| Search | `Inputs/Search` Color=Light | — | — |
| Limitation Option | `Controls/Limitation Option` (5 variants) | instance per row | `Send and Receive` |
| Account icon | `Icons/Account Type/Name=Account, Size=Big` (або Small) | — | — |
| Button | `Buttons/Button` Type=Primary, Size=Medium | Footer `Done` | — |
| Text Button | `Buttons/Text Button` | `+ Add project rule`, `Create account` (empty) | — |
| Toast Notification | `Toast Notification` | Success / Error | — |
| Access Project Tag | `Controls/Access Project Tag` (Default/Selected) | для project rules — як chip | — |

## Open issues

1. **Account row** як компонент — у UI Kit немає (є `Access User Row` тільки для людей). Потрібно зібрати кастомом → `new-additions.md` gap #1.
2. **Limitation Option** — це **display**-компонент, не control. Як юзер обирає? Запропонований варіант — клік → popup-list із 5 опцій. Можливо краще зробити control-варіант компонента → gap #2.
3. **Typos** у Limitation Option — `Recieve`, `Send end recieve` — open issue для UI Kit, не блокує prototype → gap #3.
4. **By Account semantics** — поки що рендериться як "є проектні правила". Потрібно уточнити: чи `By Account` означає "ігнорувати дефолт, дивитись тільки проекти" чи "дефолт = No transaction, проекти можуть override"? У прототипі — варіант "тільки проекти, інші — заблоковано" → gap #4 (open issue).
5. **Per-project rules collapse default** — після збереження проектних правил, при повторному відкритті модалки — рядок з `By Account` буде collapsed (chevron) чи одразу expanded? У прототипі — collapsed з лічильником (`3 rules`). Open.

## Залежності

- `patterns/modal.md` — pattern
- `decisions.md` → Modal composition (footer Primary справа, без Tab якщо немає табів)
- `kb/orbuculum.design.md` → Tone, Placeholders, Empty states
- `components/controls.md` → Limitation Option, Access Project Tag, Close
- `components/inputs.md` → Search
- `components/buttons.md` → Button, Text Button
