endfield-vision 2.2.1 → 2.2.3
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/README.md +5 -5
- package/README.ru.md +5 -5
- package/dist/components/Autocomplete.d.ts +37 -0
- package/dist/components/Autocomplete.d.ts.map +1 -0
- package/dist/components/Autocomplete.js +109 -0
- package/dist/components/Autocomplete.js.map +1 -0
- package/dist/components/Choice.d.ts +2 -1
- package/dist/components/Choice.d.ts.map +1 -1
- package/dist/components/Choice.js +3 -1
- package/dist/components/Choice.js.map +1 -1
- package/dist/components/CompletenessBadge.d.ts +21 -8
- package/dist/components/CompletenessBadge.d.ts.map +1 -1
- package/dist/components/CompletenessBadge.js +48 -15
- package/dist/components/CompletenessBadge.js.map +1 -1
- package/dist/components/ContextMenu.d.ts +5 -1
- package/dist/components/ContextMenu.d.ts.map +1 -1
- package/dist/components/ContextMenu.js +13 -7
- package/dist/components/ContextMenu.js.map +1 -1
- package/dist/components/Select.d.ts +5 -0
- package/dist/components/Select.d.ts.map +1 -1
- package/dist/components/Select.js +7 -3
- package/dist/components/Select.js.map +1 -1
- package/dist/components/Thumbnail.d.ts +65 -0
- package/dist/components/Thumbnail.d.ts.map +1 -0
- package/dist/components/Thumbnail.js +57 -0
- package/dist/components/Thumbnail.js.map +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/i18n-messages.d.ts +5 -0
- package/dist/lib/i18n-messages.d.ts.map +1 -1
- package/dist/lib/i18n-messages.js +10 -0
- package/dist/lib/i18n-messages.js.map +1 -1
- package/dist/styles/components/communication.css +161 -0
- package/dist/styles/components/records.css +8 -1
- package/dist/styles/tokens.css +3 -0
- package/package.json +1 -1
- package/src/components/Autocomplete.tsx +221 -0
- package/src/components/Choice.tsx +5 -2
- package/src/components/CompletenessBadge.tsx +102 -46
- package/src/components/ContextMenu.tsx +11 -5
- package/src/components/Select.tsx +12 -3
- package/src/components/Thumbnail.tsx +244 -0
- package/src/index.ts +15 -0
- package/src/lib/i18n-messages.ts +15 -0
- package/src/styles/components/communication.css +161 -0
- package/src/styles/components/records.css +8 -1
- package/src/styles/tokens.css +3 -0
package/README.md
CHANGED
|
@@ -15,7 +15,7 @@ npm i endfield-vision
|
|
|
15
15
|
Without the npm registry: every GitHub release has the same build attached as an archive.
|
|
16
16
|
|
|
17
17
|
```bash
|
|
18
|
-
npm i https://github.com/RetentionSoftware/endfield-vision/releases/download/v2.2.
|
|
18
|
+
npm i https://github.com/RetentionSoftware/endfield-vision/releases/download/v2.2.3/endfield-vision-2.2.3.tgz
|
|
19
19
|
```
|
|
20
20
|
|
|
21
21
|
Requires `react` and `react-dom` 19.
|
|
@@ -199,17 +199,17 @@ Component tone (`Badge`, `StatusPill`, `Callout`, `StatTile`, `Avatar`, `Progres
|
|
|
199
199
|
|
|
200
200
|
- **Actions:** `Button` (`primary | secondary | ghost | danger | danger-ghost | link`, `sm | md | lg`, `loading`, `icon`, `iconRight`, `block`), `LinkButton`, `IconButton` (required `label` = aria-label + tooltip), `Menu`, `Popover`.
|
|
201
201
|
- **Forms:** `Field` (label, hint, error; wires up `id`, `aria-invalid` and `aria-describedby` itself), `FormSection`, `Input`, `SearchInput`, `PasswordInput`, `Textarea` (`autoResize`), `NumberInput` (`min/max/step`, `decimals`, `unit`, `stepper`), `MoneyInput` (value in minor units), `PhoneInput` (22 countries with a picker, country code detection on paste, E.164), `SnilsInput`, `PlateInput`, `DigitsInput`, `MaskedDigitsInput`, `TimeInput` (`HH:MM`, `min/max`), `ColorField`.
|
|
202
|
-
- **Choice:** `Select` (search with more than 7 options, groups, `clearable`, server search via `onSearch`), `MultiSelect`, `DateField` (`YYYY-MM-DD`), `DateRangePicker`, `Calendar`, `Checkbox` (`indeterminate`), `Switch`, `RadioGroup` (`variant="card"`), `SegmentedControl
|
|
202
|
+
- **Choice:** `Select` (search with more than 7 options, groups, `clearable`, server search via `onSearch`, `defaultOpen` to open on mount), `MultiSelect`, `DateField` (`YYYY-MM-DD`), `DateRangePicker`, `Calendar`, `Checkbox` (`indeterminate`), `Switch`, `RadioGroup` (`variant="card"`), `SegmentedControl` (`value={null}` - nothing chosen yet, still reachable with Tab), `Tabs` (buttons or `href` links), `TabPanel`.
|
|
203
203
|
- **Data:** `DataTable` (column config, sorting, row selection, `loading`, `fetching`, `error` + `onRetry`, `empty`, `maxHeight`, cards on narrow screens; per row - `rowTone`, `rowAttributes` (your own `data-*` and `aria-*`, for example for `ContextMenuProvider`), `rowClassName`, `rowMuted`; expandable rows `renderExpanded` with `expanded` / `onExpandedChange`; a totals row from `footerCell` on columns; `stickyHeader` keeps the header at the top of the page without `maxHeight`), `Pagination`, `FilterBar`, `KeyValueList`, `StatTile`, `Badge`, `StatusPill`, `Avatar` (initials or photo), `Progress` (including overrun), `Timeline` (event feed, upcoming steps, "show more"), `UptimeBar` (daily availability with tooltips), `CopyButton`, `CopyValue`.
|
|
204
204
|
- **Charts:** `BarChart` (grouped or `stacked`), `LineChart`, `AreaChart`, `Sparkline`, `DonutChart` (shares, "Other", legend), `Heatmap` (activity calendar) and `HeatmapMatrix` ("row x column" matrix), `RingProgress` (ring, segments, overrun), `Gauge` (half-circle scale with zones). Tooltips on hover and arrow keys, a legend for 2+ series, a hidden table for screen readers.
|
|
205
205
|
- **Feedback and overlays:** `Callout`, `EmptyState`, `ErrorState`, `Skeleton`, `SkeletonText`, `Spinner`, `LoadingBlock`, `Modal`, `useModals()` (`open`, `confirm`, `alert`, `prompt` - a dialog with a text field and validation), `Drawer`, `toast.*` / `useToast()` (callable outside React too; `onClick` makes the whole card clickable), `FileDrop`.
|
|
206
206
|
- **Navigation and structure:** `CommandPalette` (Ctrl+K, groups, word search; server search: `query` / `onQueryChange`, `loading`, `alwaysShow` on items or `filter={false}`, `highlight`), `Steps` (wizard steps, horizontal and vertical), `Accordion` and `Disclosure`, `TreeView` (single or multiple selection with a partial state, WAI-ARIA keyboard).
|
|
207
|
-
- **More inputs:** `Slider` (value and range, marks), `TagInput` (tags, suggestions, limit, validation), `Chip` and `ChipGroup` (filters and tags), `OtpInput` (verification code, paste as a whole), `InlineEdit` (edit in place with async save).
|
|
207
|
+
- **More inputs:** `Slider` (value and range, marks), `TagInput` (tags, suggestions, limit, validation), `Autocomplete` (free text with suggestions: a suggestion only fills in the text), `Chip` and `ChipGroup` (filters and tags), `OtpInput` (verification code, paste as a whole), `InlineEdit` (edit in place with async save).
|
|
208
208
|
- **Content:** `Banner` (full-width announcement, dismissal is remembered), `CodeBlock` and `InlineCode` (line numbers, line and syntax highlighting with no dependencies, collapsing), `Highlight` (search matches), `RelativeTime` ("5 minutes ago" in both languages), `ExpandableText` ("Show more").
|
|
209
209
|
- **App shell:** `AppShell` (`statusBar` slot), `Topbar`, `Sidebar`, `SidebarSection`, `SidebarItem`, `SidebarCollapseButton`, `useAppShell()`, `PageHeader`, `Breadcrumbs`, `SectionTitle`, `Card`, `Panel`, `Divider`, `Kbd`, `StatusBar` (`StatusBarItem`, `StatusBarClock`), `WorkspaceSwitcher`, `ScreenOverlay` (maintenance, new version), `ContextMenu` and `ContextMenuProvider` (right click, registry by `data-ctx-kind`).
|
|
210
|
-
- **CRM, record card:** `RecordHeader` (header with avatar, copyable identifiers, metrics, actions), `RecordLayout` (main and side columns), `EditablePanel` (section with an edit mode and async save), `CompletenessBadge` (what is missing and
|
|
210
|
+
- **CRM, record card:** `RecordHeader` (header with avatar, copyable identifiers, metrics, actions), `RecordLayout` (main and side columns), `EditablePanel` (section with an edit mode and async save), `CompletenessBadge` (what blocks the record, what has expired or expires soon, what is missing; custom `tone` and `label`, `href` link badge), `BadgeStack` and `AvatarGroup` (+N), presence on `Avatar` (`status`, `lastSeen`), `missing` on `KeyValueList` rows.
|
|
211
211
|
- **CRM, workflows:** `KanbanBoard` and `KanbanCard` (columns with counters and "show more", drag and drop plus keyboard moves), `SlaTimer` (elapsed / remaining, tones by threshold, `formatDuration`), `PermissionMatrix` (sections x roles, modes, changes against the saved state), `SettingsList`, `SettingRow`, `SaveBar`, `useDirtyState`.
|
|
212
|
-
- **CRM, communication:** `NotificationCenter` and `NotificationList` (history, read state, actions), `toast` with several actions, `ChatThread`, `ChatMessage`, `Composer` (attachments, pasted screenshots, drag and drop), `Lightbox`, `ConnectionStatus`.
|
|
212
|
+
- **CRM, communication:** `NotificationCenter` and `NotificationList` (history, read state, actions), `toast` with several actions, `ChatThread`, `ChatMessage`, `Composer` (attachments, pasted screenshots, drag and drop), `Lightbox`, `Thumbnail` and `ThumbnailGrid` (image previews with aspect ratio, caption, badge, loading and error states; the grid opens `Lightbox`), `ConnectionStatus`.
|
|
213
213
|
- **Filters in the URL:** `useUrlFilters` syncs filters with the address and remembers them per scope.
|
|
214
214
|
- **Language:** `LocaleProvider`, `useMessages`, `useLocale`, `useNumberFormat`, dictionaries `ru`, `en`.
|
|
215
215
|
- **Theme:** `ThemeScript` (`nonce` for CSP, `accents`), `themeBootstrap`, `useTheme`, `setTheme`, `setStyle`, `setAccent`, `ACCENTS`, `STYLES`, `AccentPreset`, `accentPresetCss`, `AccentStyles`.
|
package/README.ru.md
CHANGED
|
@@ -15,7 +15,7 @@ npm i endfield-vision
|
|
|
15
15
|
Без реестра npm: к каждому релизу на GitHub приложена та же сборка архивом.
|
|
16
16
|
|
|
17
17
|
```bash
|
|
18
|
-
npm i https://github.com/RetentionSoftware/endfield-vision/releases/download/v2.2.
|
|
18
|
+
npm i https://github.com/RetentionSoftware/endfield-vision/releases/download/v2.2.3/endfield-vision-2.2.3.tgz
|
|
19
19
|
```
|
|
20
20
|
|
|
21
21
|
Нужны `react` и `react-dom` 19.
|
|
@@ -199,17 +199,17 @@ import { MotionProvider, StatTile, BarChart } from 'endfield-vision'
|
|
|
199
199
|
|
|
200
200
|
- **Действия:** `Button` (`primary | secondary | ghost | danger | danger-ghost | link`, `sm | md | lg`, `loading`, `icon`, `iconRight`, `block`), `LinkButton`, `IconButton` (обязательный `label` = aria-label + подсказка), `Menu`, `Popover`.
|
|
201
201
|
- **Формы:** `Field` (подпись, подсказка, ошибка; сам связывает `id`, `aria-invalid`, `aria-describedby`), `FormSection`, `Input`, `SearchInput`, `PasswordInput`, `Textarea` (`autoResize`), `NumberInput` (`min/max/step`, `decimals`, `unit`, `stepper`), `MoneyInput` (значение в копейках), `PhoneInput` (22 страны с выбором из списка, распознавание кода при вставке, E.164), `SnilsInput`, `PlateInput`, `DigitsInput`, `MaskedDigitsInput`, `TimeInput` (`ЧЧ:ММ`, `min/max`), `ColorField`.
|
|
202
|
-
- **Выбор:** `Select` (поиск при > 7 опций, группы, `clearable`, серверный поиск `onSearch`), `MultiSelect`, `DateField` (`YYYY-MM-DD`), `DateRangePicker`, `Calendar`, `Checkbox` (`indeterminate`), `Switch`, `RadioGroup` (`variant="card"`), `SegmentedControl
|
|
202
|
+
- **Выбор:** `Select` (поиск при > 7 опций, группы, `clearable`, серверный поиск `onSearch`, `defaultOpen` - раскрыть при монтировании), `MultiSelect`, `DateField` (`YYYY-MM-DD`), `DateRangePicker`, `Calendar`, `Checkbox` (`indeterminate`), `Switch`, `RadioGroup` (`variant="card"`), `SegmentedControl` (`value={null}` - ещё не выбрано, по Tab доступен), `Tabs` (кнопки или ссылки `href`), `TabPanel`.
|
|
203
203
|
- **Данные:** `DataTable` (колонки конфигом, сортировка, выбор строк, `loading`, `fetching`, `error` + `onRetry`, `empty`, `maxHeight`, на узком экране - карточки; у строки - `rowTone`, `rowAttributes` (свои `data-*` и `aria-*`, например для `ContextMenuProvider`), `rowClassName`, `rowMuted`; раскрывающиеся строки `renderExpanded` с `expanded` / `onExpandedChange`; итоговая строка из `footerCell` колонок; `stickyHeader` - шапка липнет к верху страницы без `maxHeight`), `Pagination`, `FilterBar`, `KeyValueList`, `StatTile`, `Badge`, `StatusPill`, `Avatar` (инициалы или фото), `Progress` (в том числе перерасход), `Timeline` (лента событий, будущие шаги, «показать ещё»), `UptimeBar` (доступность по дням с подсказками), `CopyButton`, `CopyValue`.
|
|
204
204
|
- **Графики:** `BarChart` (рядом или `stacked`), `LineChart`, `AreaChart`, `Sparkline`, `DonutChart` (доли, «Прочее», легенда), `Heatmap` (календарь активности) и `HeatmapMatrix` (матрица «строка x столбец»), `RingProgress` (кольцо, секции, перерасход), `Gauge` (шкала-полукруг с зонами). Подсказка по наведению и стрелками, легенда при 2+ сериях, скрытая таблица для скринридера.
|
|
205
205
|
- **Состояния и окна:** `Callout`, `EmptyState`, `ErrorState`, `Skeleton`, `SkeletonText`, `Spinner`, `LoadingBlock`, `Modal`, `useModals()` (`open`, `confirm`, `alert`, `prompt` - окно с полем ввода и проверкой), `Drawer`, `toast.*` / `useToast()` (вызов и вне React; `onClick` - клик по всей карточке), `FileDrop`.
|
|
206
206
|
- **Навигация и структура:** `CommandPalette` (Ctrl+K, группы, поиск по словам; поиск с сервера: `query` / `onQueryChange`, `loading`, `alwaysShow` у пунктов или `filter={false}`, `highlight`), `Steps` (шаги мастера, горизонтально и вертикально), `Accordion` и `Disclosure`, `TreeView` (выбор одного или нескольких с частичным состоянием, клавиатура WAI-ARIA).
|
|
207
|
-
- **Ввод (дополнительно):** `Slider` (значение и диапазон, метки), `TagInput` (метки, подсказки, лимит, проверка), `Chip` и `ChipGroup` (фильтры и метки), `OtpInput` (код подтверждения, вставка целиком), `InlineEdit` (правка на месте с асинхронным сохранением).
|
|
207
|
+
- **Ввод (дополнительно):** `Slider` (значение и диапазон, метки), `TagInput` (метки, подсказки, лимит, проверка), `Autocomplete` (свободный ввод с подсказками: подсказка только подставляет текст), `Chip` и `ChipGroup` (фильтры и метки), `OtpInput` (код подтверждения, вставка целиком), `InlineEdit` (правка на месте с асинхронным сохранением).
|
|
208
208
|
- **Контент:** `Banner` (объявление на всю ширину, скрытие запоминается), `CodeBlock` и `InlineCode` (номера строк, подсветка строк и синтаксиса без зависимостей, сворачивание), `Highlight` (совпадения поиска, ё = е), `RelativeTime` («5 минут назад» на обоих языках), `ExpandableText` («Показать полностью»).
|
|
209
209
|
- **Каркас:** `AppShell` (слот `statusBar`), `Topbar`, `Sidebar`, `SidebarSection`, `SidebarItem`, `SidebarCollapseButton`, `useAppShell()`, `PageHeader`, `Breadcrumbs`, `SectionTitle`, `Card`, `Panel`, `Divider`, `Kbd`, `StatusBar` (`StatusBarItem`, `StatusBarClock`), `WorkspaceSwitcher`, `ScreenOverlay` (техработы, новая версия), `ContextMenu` и `ContextMenuProvider` (правый клик, реестр по `data-ctx-kind`).
|
|
210
|
-
- **CRM - карточка записи:** `RecordHeader` (шапка: аватар, идентификаторы с копированием, показатели, действия), `RecordLayout` (основная и боковая колонки), `EditablePanel` (секция с режимом правки и асинхронным сохранением), `CompletenessBadge` (что
|
|
210
|
+
- **CRM - карточка записи:** `RecordHeader` (шапка: аватар, идентификаторы с копированием, показатели, действия), `RecordLayout` (основная и боковая колонки), `EditablePanel` (секция с режимом правки и асинхронным сохранением), `CompletenessBadge` (что блокирует запись, что просрочено и истекает, что не заполнено; свои `tone` и `label`, бейдж-ссылка `href`), `BadgeStack` и `AvatarGroup` (+N), присутствие у `Avatar` (`status`, `lastSeen`), `missing` у строк `KeyValueList`.
|
|
211
211
|
- **CRM - процессы:** `KanbanBoard` и `KanbanCard` (колонки со счётчиками и «показать ещё», перетаскивание и перенос с клавиатуры), `SlaTimer` (прошло / осталось, тоны по порогам, `formatDuration`), `PermissionMatrix` (разделы × роли, режимы, изменения против сохранённого), `SettingsList`, `SettingRow`, `SaveBar`, `useDirtyState`.
|
|
212
|
-
- **CRM - коммуникации:** `NotificationCenter` и `NotificationList` (история, прочитано, действия), `toast` с несколькими действиями, `ChatThread`, `ChatMessage`, `Composer` (вложения, вставка скриншотов, перетаскивание), `Lightbox`, `ConnectionStatus`.
|
|
212
|
+
- **CRM - коммуникации:** `NotificationCenter` и `NotificationList` (история, прочитано, действия), `toast` с несколькими действиями, `ChatThread`, `ChatMessage`, `Composer` (вложения, вставка скриншотов, перетаскивание), `Lightbox`, `Thumbnail` и `ThumbnailGrid` (миниатюры с пропорциями, подписью, значком, загрузкой и ошибкой; сетка открывает `Lightbox`), `ConnectionStatus`.
|
|
213
213
|
- **Фильтры в адресе:** `useUrlFilters` - синхронизация с URL и память по области.
|
|
214
214
|
- **Язык:** `LocaleProvider`, `useMessages`, `useLocale`, `useNumberFormat`, словари `ru`, `en`.
|
|
215
215
|
- **Тема:** `ThemeScript` (`nonce` для CSP, `accents`), `themeBootstrap`, `useTheme`, `setTheme`, `setStyle`, `setAccent`, `ACCENTS`, `STYLES`, `AccentPreset`, `accentPresetCss`, `AccentStyles`.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { type ReactNode, type Ref } from 'react';
|
|
2
|
+
import { type InputProps } from './Input.js';
|
|
3
|
+
export interface AutocompleteSuggestion {
|
|
4
|
+
/** Текст, который подставится в поле. */
|
|
5
|
+
value: string;
|
|
6
|
+
/** Вторая строка или пояснение справа. */
|
|
7
|
+
hint?: ReactNode;
|
|
8
|
+
}
|
|
9
|
+
export interface AutocompleteProps extends Omit<InputProps, 'value' | 'defaultValue' | 'onChange' | 'onSelect' | 'role' | 'ref'> {
|
|
10
|
+
value: string;
|
|
11
|
+
onChange: (value: string) => void;
|
|
12
|
+
/** Подсказки: строки или { value, hint }. */
|
|
13
|
+
suggestions: ReadonlyArray<string | AutocompleteSuggestion>;
|
|
14
|
+
/** Выбор подсказки (после onChange): например сразу сохранить. */
|
|
15
|
+
onSelect?: (value: string) => void;
|
|
16
|
+
/** Фильтр по введённому тексту (по умолчанию да); false - подсказки уже отобраны снаружи (сервер). */
|
|
17
|
+
filter?: boolean;
|
|
18
|
+
/** Сколько подсказок показывать (по умолчанию 8). */
|
|
19
|
+
maxSuggestions?: number;
|
|
20
|
+
/** Список при фокусе на пустом поле (по умолчанию да). */
|
|
21
|
+
openOnFocus?: boolean;
|
|
22
|
+
/** Подсветка совпадений в подсказках (по умолчанию да). */
|
|
23
|
+
highlight?: boolean;
|
|
24
|
+
/** Подсказки ещё загружаются: индикатор справа в поле. */
|
|
25
|
+
loading?: boolean;
|
|
26
|
+
ref?: Ref<HTMLInputElement>;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Подсказки по тексту: совпадение подстрокой без учёта регистра и «ё», без
|
|
30
|
+
* повторов и без подсказки, совпадающей с текстом целиком (подставлять нечего).
|
|
31
|
+
*/
|
|
32
|
+
export declare function filterAutocomplete(suggestions: ReadonlyArray<string | AutocompleteSuggestion>, query: string, { filter, limit }?: {
|
|
33
|
+
filter?: boolean;
|
|
34
|
+
limit?: number;
|
|
35
|
+
}): AutocompleteSuggestion[];
|
|
36
|
+
export declare function Autocomplete({ value, onChange, suggestions, onSelect, filter, maxSuggestions, openOnFocus, highlight, loading, id, invalid, disabled, suffix, className, wrapperClassName, onFocus, onBlur, onKeyDown, ref, ...rest }: AutocompleteProps): import("react").JSX.Element;
|
|
37
|
+
//# sourceMappingURL=Autocomplete.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Autocomplete.d.ts","sourceRoot":"","sources":["../../src/components/Autocomplete.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAwD,KAAK,SAAS,EAAE,KAAK,GAAG,EAAE,MAAM,OAAO,CAAA;AAMtG,OAAO,EAAS,KAAK,UAAU,EAAE,MAAM,SAAS,CAAA;AAUhD,MAAM,WAAW,sBAAsB;IACrC,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAA;IACb,0CAA0C;IAC1C,IAAI,CAAC,EAAE,SAAS,CAAA;CACjB;AAED,MAAM,WAAW,iBACf,SAAQ,IAAI,CAAC,UAAU,EAAE,OAAO,GAAG,cAAc,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,GAAG,KAAK,CAAC;IAC7F,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,6CAA6C;IAC7C,WAAW,EAAE,aAAa,CAAC,MAAM,GAAG,sBAAsB,CAAC,CAAA;IAC3D,kEAAkE;IAClE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,sGAAsG;IACtG,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,qDAAqD;IACrD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,2DAA2D;IAC3D,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,0DAA0D;IAC1D,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,GAAG,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAA;CAC5B;AAMD;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,aAAa,CAAC,MAAM,GAAG,sBAAsB,CAAC,EAC3D,KAAK,EAAE,MAAM,EACb,EAAE,MAAa,EAAE,KAAS,EAAE,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GACtE,sBAAsB,EAAE,CAc1B;AAED,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,MAAa,EACb,cAAkB,EAClB,WAAkB,EAClB,SAAgB,EAChB,OAAe,EACf,EAAE,EACF,OAAO,EACP,QAAQ,EACR,MAAM,EACN,SAAS,EACT,gBAAgB,EAChB,OAAO,EACP,MAAM,EACN,SAAS,EACT,GAAG,EACH,GAAG,IAAI,EACR,EAAE,iBAAiB,+BA6HnB"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useId, useMemo, useRef, useState } from 'react';
|
|
4
|
+
import { cx, normalizeSearch } from '../lib/cx.js';
|
|
5
|
+
import { useOutsideClick } from '../lib/hooks.js';
|
|
6
|
+
import { Portal, useEscapeLayer, useFloating } from '../lib/overlay.js';
|
|
7
|
+
import { useFieldProps } from './Field.js';
|
|
8
|
+
import { Highlight } from './Highlight.js';
|
|
9
|
+
import { Input } from './Input.js';
|
|
10
|
+
import { Spinner } from './Spinner.js';
|
|
11
|
+
function toSuggestion(s) {
|
|
12
|
+
return typeof s === 'string' ? { value: s } : s;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Подсказки по тексту: совпадение подстрокой без учёта регистра и «ё», без
|
|
16
|
+
* повторов и без подсказки, совпадающей с текстом целиком (подставлять нечего).
|
|
17
|
+
*/
|
|
18
|
+
export function filterAutocomplete(suggestions, query, { filter = true, limit = 8 } = {}) {
|
|
19
|
+
const q = normalizeSearch(query);
|
|
20
|
+
const seen = new Set();
|
|
21
|
+
const out = [];
|
|
22
|
+
for (const raw of suggestions) {
|
|
23
|
+
if (out.length >= limit)
|
|
24
|
+
break;
|
|
25
|
+
const s = toSuggestion(raw);
|
|
26
|
+
const n = normalizeSearch(s.value);
|
|
27
|
+
if (seen.has(n) || (q && n === q))
|
|
28
|
+
continue;
|
|
29
|
+
if (filter && q && !n.includes(q))
|
|
30
|
+
continue;
|
|
31
|
+
seen.add(n);
|
|
32
|
+
out.push(s);
|
|
33
|
+
}
|
|
34
|
+
return out;
|
|
35
|
+
}
|
|
36
|
+
export function Autocomplete({ value, onChange, suggestions, onSelect, filter = true, maxSuggestions = 8, openOnFocus = true, highlight = true, loading = false, id, invalid, disabled, suffix, className, wrapperClassName, onFocus, onBlur, onKeyDown, ref, ...rest }) {
|
|
37
|
+
const f = useFieldProps({ id, invalid, disabled, 'aria-describedby': rest['aria-describedby'] });
|
|
38
|
+
const auto = useId();
|
|
39
|
+
const listId = `${f.id ?? `ac${auto}`}-list`;
|
|
40
|
+
const [open, setOpen] = useState(false);
|
|
41
|
+
const [activeIndex, setActiveIndex] = useState(-1);
|
|
42
|
+
const wrapRef = useRef(null);
|
|
43
|
+
const popRef = useRef(null);
|
|
44
|
+
const visible = useMemo(() => filterAutocomplete(suggestions, value, { filter, limit: maxSuggestions }), [suggestions, value, filter, maxSuggestions]);
|
|
45
|
+
const showList = open && visible.length > 0 && !f.disabled;
|
|
46
|
+
const active = showList && activeIndex < visible.length ? activeIndex : -1;
|
|
47
|
+
const { style, side } = useFloating(wrapRef, popRef, { open: showList, placement: 'bottom-start', matchWidth: true, offset: 4 });
|
|
48
|
+
useOutsideClick([wrapRef, popRef], () => setOpen(false), showList);
|
|
49
|
+
useEscapeLayer(showList, () => setOpen(false));
|
|
50
|
+
const pick = (s) => {
|
|
51
|
+
setOpen(false);
|
|
52
|
+
setActiveIndex(-1);
|
|
53
|
+
if (s.value !== value)
|
|
54
|
+
onChange(s.value);
|
|
55
|
+
onSelect?.(s.value);
|
|
56
|
+
};
|
|
57
|
+
const handleKeyDown = (e) => {
|
|
58
|
+
onKeyDown?.(e);
|
|
59
|
+
if (e.defaultPrevented || e.nativeEvent.isComposing)
|
|
60
|
+
return;
|
|
61
|
+
switch (e.key) {
|
|
62
|
+
case 'ArrowDown':
|
|
63
|
+
e.preventDefault();
|
|
64
|
+
if (!showList) {
|
|
65
|
+
setOpen(true);
|
|
66
|
+
setActiveIndex(0);
|
|
67
|
+
}
|
|
68
|
+
else
|
|
69
|
+
setActiveIndex((i) => (i + 1) % visible.length);
|
|
70
|
+
return;
|
|
71
|
+
case 'ArrowUp':
|
|
72
|
+
if (!showList)
|
|
73
|
+
return;
|
|
74
|
+
e.preventDefault();
|
|
75
|
+
setActiveIndex((i) => (i <= 0 ? visible.length - 1 : i - 1));
|
|
76
|
+
return;
|
|
77
|
+
case 'Enter': {
|
|
78
|
+
const s = active >= 0 ? visible[active] : undefined;
|
|
79
|
+
if (s) {
|
|
80
|
+
e.preventDefault();
|
|
81
|
+
pick(s);
|
|
82
|
+
}
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
case 'Tab':
|
|
86
|
+
setOpen(false);
|
|
87
|
+
return;
|
|
88
|
+
default:
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
const activeId = active >= 0 ? `${listId}-o${active}` : undefined;
|
|
93
|
+
return (_jsxs("div", { ref: wrapRef, className: cx('ev-autocomplete', className), children: [_jsx(Input, { ...rest, ref: ref, id: f.id, value: value, invalid: f.invalid, disabled: f.disabled, wrapperClassName: wrapperClassName, suffix: loading ? _jsx(Spinner, { size: 13 }) : suffix, type: "text", autoComplete: "off", role: "combobox", "aria-autocomplete": "list", "aria-expanded": showList, "aria-controls": showList ? listId : undefined, "aria-activedescendant": activeId, "aria-busy": loading || undefined, onChange: (e) => {
|
|
94
|
+
onChange(e.target.value);
|
|
95
|
+
setOpen(true);
|
|
96
|
+
setActiveIndex(-1);
|
|
97
|
+
}, onKeyDown: handleKeyDown, onFocus: (e) => {
|
|
98
|
+
onFocus?.(e);
|
|
99
|
+
if (openOnFocus || e.target.value !== '')
|
|
100
|
+
setOpen(true);
|
|
101
|
+
}, onBlur: (e) => {
|
|
102
|
+
onBlur?.(e);
|
|
103
|
+
setOpen(false);
|
|
104
|
+
setActiveIndex(-1);
|
|
105
|
+
} }), showList ? (_jsx(Portal, { children: _jsx("div", { ref: popRef, className: "ev-select-pop", "data-ev-layer": "", "data-side": side, style: style, children: _jsx("div", { id: listId, role: "listbox", "aria-label": rest['aria-label'] ?? rest.placeholder, className: "ev-select-listbox", children: visible.map((s, i) => (_jsx("div", { id: `${listId}-o${i}`, role: "option", "aria-selected": i === active, className: "ev-select-option", "data-active": i === active || undefined, onPointerMove: () => i !== active && setActiveIndex(i),
|
|
106
|
+
// Фокус остаётся в поле: нажатие не уводит его в список.
|
|
107
|
+
onPointerDown: (e) => e.preventDefault(), onClick: () => pick(s), children: _jsxs("span", { className: "ev-select-option-body", children: [_jsx("span", { className: "ev-select-option-label", children: highlight ? _jsx(Highlight, { text: s.value, query: value }) : s.value }), s.hint ? _jsx("span", { className: "ev-select-option-hint", children: s.hint }) : null] }) }, s.value))) }) }) })) : null] }));
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=Autocomplete.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Autocomplete.js","sourceRoot":"","sources":["../../src/components/Autocomplete.tsx"],"names":[],"mappings":"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"}
|
|
@@ -53,7 +53,8 @@ export interface SegmentedOption<V extends string = string> {
|
|
|
53
53
|
'aria-label'?: string;
|
|
54
54
|
}
|
|
55
55
|
export interface SegmentedControlProps<V extends string = string> {
|
|
56
|
-
|
|
56
|
+
/** Выбранное значение; `null` - ещё не выбрано (в группу всё равно можно попасть по Tab). */
|
|
57
|
+
value: V | null;
|
|
57
58
|
onChange: (value: V) => void;
|
|
58
59
|
options: SegmentedOption<V>[];
|
|
59
60
|
size?: 'sm' | 'md';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Choice.d.ts","sourceRoot":"","sources":["../../src/components/Choice.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Choice.d.ts","sourceRoot":"","sources":["../../src/components/Choice.tsx"],"names":[],"mappings":"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"}
|
|
@@ -53,6 +53,8 @@ export function SegmentedControl({ value, onChange, options, size = 'md', block
|
|
|
53
53
|
const rootRef = useRef(null);
|
|
54
54
|
const refs = useRef([]);
|
|
55
55
|
const activeIndex = options.findIndex((o) => o.value === value);
|
|
56
|
+
// Точка входа по Tab: выбранный сегмент, а без выбора (или если он отключён) - первый доступный.
|
|
57
|
+
const tabStop = activeIndex >= 0 && !options[activeIndex]?.disabled ? activeIndex : options.findIndex((o) => !o.disabled);
|
|
56
58
|
// Прокрутка только самого переключателя (не страницы, как у scrollIntoView).
|
|
57
59
|
useIsoLayoutEffect(() => {
|
|
58
60
|
const box = rootRef.current;
|
|
@@ -86,7 +88,7 @@ export function SegmentedControl({ value, onChange, options, size = 'md', block
|
|
|
86
88
|
const iconOnly = !hasContent(o.label) && Boolean(o.icon);
|
|
87
89
|
const button = (_jsxs("button", { ref: (n) => {
|
|
88
90
|
refs.current[i] = n;
|
|
89
|
-
}, type: "button", role: "radio", "aria-checked": on, "aria-label": o['aria-label'], tabIndex:
|
|
91
|
+
}, type: "button", role: "radio", "aria-checked": on, "aria-label": o['aria-label'], tabIndex: i === tabStop ? 0 : -1, disabled: o.disabled, className: "ev-segmented-item", "data-active": on || undefined, "data-icon-only": iconOnly || undefined, onClick: () => onChange(o.value), onKeyDown: (e) => onKey(e, i), children: [o.icon ? (_jsx("span", { className: "ev-segmented-icon", "aria-hidden": iconOnly || undefined, children: o.icon })) : null, hasContent(o.label) ? _jsx("span", { children: o.label }) : null, o.count !== undefined ? _jsx("span", { className: "ev-segmented-count ev-num", children: o.count }) : null] }, o.value));
|
|
90
92
|
return iconOnly && o['aria-label'] ? (_jsx(Tooltip, { content: o['aria-label'], placement: "top", children: button }, o.value)) : (button);
|
|
91
93
|
}) }));
|
|
92
94
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Choice.js","sourceRoot":"","sources":["../../src/components/Choice.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Choice.js","sourceRoot":"","sources":["../../src/components/Choice.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,38 +1,51 @@
|
|
|
1
1
|
import { type ReactNode } from 'react';
|
|
2
|
+
import type { Tone } from './Display.js';
|
|
2
3
|
export interface CompletenessField {
|
|
3
4
|
/** Ключ поля: его получает onItemClick. */
|
|
4
5
|
key: string;
|
|
5
6
|
label: ReactNode;
|
|
6
7
|
}
|
|
7
|
-
|
|
8
|
+
/** Пункт группы: причина блокировки, просроченный или истекающий срок. */
|
|
9
|
+
export interface CompletenessItem {
|
|
8
10
|
/** Ключ: с ним пункт можно нажать (onItemClick). */
|
|
9
11
|
key?: string;
|
|
10
12
|
label: ReactNode;
|
|
11
13
|
/** Срок: «до 12.11.2026». */
|
|
12
14
|
date?: ReactNode;
|
|
13
15
|
}
|
|
16
|
+
/** Истекающий срок - то же, что CompletenessItem. */
|
|
17
|
+
export type CompletenessExpiringItem = CompletenessItem;
|
|
14
18
|
export type CompletenessSeverity = 'warning' | 'danger';
|
|
15
19
|
export type CompletenessTone = 'success' | 'warning' | 'danger';
|
|
16
20
|
/**
|
|
17
|
-
* Тон бейджа: есть
|
|
18
|
-
*
|
|
21
|
+
* Тон бейджа: есть блокирующие причины или просроченные сроки (dangerCount) -
|
|
22
|
+
* danger; есть незаполненные - severity (warning по умолчанию); только
|
|
23
|
+
* истекающие сроки - warning, иначе success.
|
|
19
24
|
*/
|
|
20
|
-
export declare function completenessTone(missingCount: number, expiringCount: number, severity?: CompletenessSeverity): CompletenessTone;
|
|
25
|
+
export declare function completenessTone(missingCount: number, expiringCount: number, severity?: CompletenessSeverity, dangerCount?: number): CompletenessTone;
|
|
21
26
|
export interface CompletenessBadgeProps {
|
|
22
|
-
/**
|
|
23
|
-
|
|
27
|
+
/** Причины, по которым запись не допускается к работе: тон danger, первая группа. Строка - она же ключ. */
|
|
28
|
+
blocking?: Array<string | CompletenessItem>;
|
|
29
|
+
/** Просроченные сроки: тон danger. Строка - она же ключ. */
|
|
30
|
+
expired?: Array<string | CompletenessItem>;
|
|
24
31
|
/** Истекающие сроки (документы, допуски). */
|
|
25
32
|
expiring?: CompletenessExpiringItem[];
|
|
33
|
+
/** Незаполненные поля: строка (она же ключ) или { key, label }. */
|
|
34
|
+
missing?: Array<string | CompletenessField>;
|
|
26
35
|
/** Тон при незаполненных полях: warning (не мешает работе) или danger (блокирует). */
|
|
27
36
|
severity?: CompletenessSeverity;
|
|
28
37
|
/** Подпись, когда всё заполнено. По умолчанию - «Заполнено». */
|
|
29
38
|
completeLabel?: ReactNode;
|
|
30
|
-
/** Своя подпись бейджа при
|
|
39
|
+
/** Своя подпись бейджа поверх вычисленной - и при пустых группах (например «Заблокирован»). */
|
|
31
40
|
label?: ReactNode;
|
|
41
|
+
/** Свой тон бейджа поверх вычисленного - и при пустых группах. */
|
|
42
|
+
tone?: Tone;
|
|
32
43
|
/** Переход к полю: бейдж становится кнопкой со списком. */
|
|
33
44
|
onItemClick?: (key: string) => void;
|
|
45
|
+
/** Бейдж-ссылка (например в карточку записи), группы - в подсказке. Вместе с onItemClick и группами побеждает onItemClick. */
|
|
46
|
+
href?: string;
|
|
34
47
|
size?: 'sm' | 'md';
|
|
35
48
|
className?: string;
|
|
36
49
|
}
|
|
37
|
-
export declare function CompletenessBadge({
|
|
50
|
+
export declare function CompletenessBadge({ blocking: blockingProp, expired: expiredProp, expiring: expiringProp, missing: missingProp, severity, completeLabel, label: labelProp, tone: toneProp, onItemClick, href, size, className, }: CompletenessBadgeProps): import("react").JSX.Element;
|
|
38
51
|
//# sourceMappingURL=CompletenessBadge.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CompletenessBadge.d.ts","sourceRoot":"","sources":["../../src/components/CompletenessBadge.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAoB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"CompletenessBadge.d.ts","sourceRoot":"","sources":["../../src/components/CompletenessBadge.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAoB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAKxD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAYrC,MAAM,WAAW,iBAAiB;IAChC,2CAA2C;IAC3C,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,SAAS,CAAA;CACjB;AAED,0EAA0E;AAC1E,MAAM,WAAW,gBAAgB;IAC/B,oDAAoD;IACpD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,SAAS,CAAA;IAChB,6BAA6B;IAC7B,IAAI,CAAC,EAAE,SAAS,CAAA;CACjB;AAED,qDAAqD;AACrD,MAAM,MAAM,wBAAwB,GAAG,gBAAgB,CAAA;AAEvD,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,QAAQ,CAAA;AACvD,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAA;AAE/D;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,EACrB,QAAQ,GAAE,oBAAgC,EAC1C,WAAW,SAAI,GACd,gBAAgB,CAKlB;AAED,MAAM,WAAW,sBAAsB;IACrC,2GAA2G;IAC3G,QAAQ,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,gBAAgB,CAAC,CAAA;IAC3C,4DAA4D;IAC5D,OAAO,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,gBAAgB,CAAC,CAAA;IAC1C,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,wBAAwB,EAAE,CAAA;IACrC,mEAAmE;IACnE,OAAO,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,iBAAiB,CAAC,CAAA;IAC3C,sFAAsF;IACtF,QAAQ,CAAC,EAAE,oBAAoB,CAAA;IAC/B,gEAAgE;IAChE,aAAa,CAAC,EAAE,SAAS,CAAA;IACzB,+FAA+F;IAC/F,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,kEAAkE;IAClE,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,2DAA2D;IAC3D,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IACnC,8HAA8H;IAC9H,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAkED,wBAAgB,iBAAiB,CAAC,EAChC,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,WAAW,EACpB,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,WAAW,EACpB,QAAoB,EACpB,aAAa,EACb,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,QAAQ,EACd,WAAW,EACX,IAAI,EACJ,IAAW,EACX,SAAS,GACV,EAAE,sBAAsB,+BAyFxB"}
|
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import { jsx as _jsx,
|
|
2
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { ChevronDown } from 'lucide-react';
|
|
4
4
|
import { useRef, useState } from 'react';
|
|
5
5
|
import { cx } from '../lib/cx.js';
|
|
6
6
|
import { useMessages } from '../lib/i18n.js';
|
|
7
|
+
import { UiLink } from '../lib/link.js';
|
|
7
8
|
import { Popover } from './Popover.js';
|
|
8
9
|
import { Tooltip } from './Tooltip.js';
|
|
9
10
|
/**
|
|
10
|
-
* Тон бейджа: есть
|
|
11
|
-
*
|
|
11
|
+
* Тон бейджа: есть блокирующие причины или просроченные сроки (dangerCount) -
|
|
12
|
+
* danger; есть незаполненные - severity (warning по умолчанию); только
|
|
13
|
+
* истекающие сроки - warning, иначе success.
|
|
12
14
|
*/
|
|
13
|
-
export function completenessTone(missingCount, expiringCount, severity = 'warning') {
|
|
15
|
+
export function completenessTone(missingCount, expiringCount, severity = 'warning', dangerCount = 0) {
|
|
16
|
+
if (dangerCount > 0)
|
|
17
|
+
return 'danger';
|
|
14
18
|
if (missingCount > 0)
|
|
15
19
|
return severity;
|
|
16
20
|
if (expiringCount > 0)
|
|
@@ -20,22 +24,51 @@ export function completenessTone(missingCount, expiringCount, severity = 'warnin
|
|
|
20
24
|
function toField(f) {
|
|
21
25
|
return typeof f === 'string' ? { key: f, label: f } : f;
|
|
22
26
|
}
|
|
23
|
-
function
|
|
27
|
+
function toItem(f) {
|
|
28
|
+
return typeof f === 'string' ? { key: f, label: f } : f;
|
|
29
|
+
}
|
|
30
|
+
function Details({ groups, onPick }) {
|
|
24
31
|
const item = (key, content) => onPick && key !== undefined ? (_jsx("button", { type: "button", className: "ev-completeness-item", onClick: () => onPick(key), children: content })) : (_jsx("span", { className: "ev-completeness-item", children: content }));
|
|
25
|
-
return (
|
|
32
|
+
return (_jsx("div", { className: "ev-completeness-details", children: groups.map((g) => (_jsxs("div", { className: "ev-completeness-group", "data-group": g.id, children: [_jsx("div", { className: "ev-completeness-title", children: g.title }), _jsx("ul", { className: "ev-completeness-list", role: "list", children: g.items.map((e, i) => (_jsx("li", { children: item(e.key, _jsxs(_Fragment, { children: [_jsx("span", { children: e.label }), e.date ? _jsx("span", { className: "ev-completeness-date ev-num", children: e.date }) : null] })) }, e.key ?? i))) })] }, g.id))) }));
|
|
33
|
+
}
|
|
34
|
+
/** Группы подсказки в порядке важности: блокирует, просрочено, истекает, не заполнено. */
|
|
35
|
+
function buildGroups(t, blocking, expired, expiring, missing) {
|
|
36
|
+
const all = [
|
|
37
|
+
{ id: 'blocking', title: t.completeness.blockingTitle, items: blocking },
|
|
38
|
+
{ id: 'expired', title: t.completeness.expired, items: expired },
|
|
39
|
+
{ id: 'expiring', title: t.completeness.expiring, items: expiring },
|
|
40
|
+
{ id: 'missing', title: t.completeness.missingTitle, items: missing },
|
|
41
|
+
];
|
|
42
|
+
return all.filter((g) => g.items.length > 0);
|
|
26
43
|
}
|
|
27
|
-
export function CompletenessBadge({
|
|
44
|
+
export function CompletenessBadge({ blocking: blockingProp, expired: expiredProp, expiring: expiringProp, missing: missingProp, severity = 'warning', completeLabel, label: labelProp, tone: toneProp, onItemClick, href, size = 'md', className, }) {
|
|
28
45
|
const t = useMessages();
|
|
29
46
|
const [open, setOpen] = useState(false);
|
|
30
47
|
const triggerRef = useRef(null);
|
|
31
|
-
const
|
|
48
|
+
const blocking = (blockingProp ?? []).map(toItem);
|
|
49
|
+
const expired = (expiredProp ?? []).map(toItem);
|
|
32
50
|
const expiring = expiringProp ?? [];
|
|
33
|
-
const
|
|
34
|
-
const
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
|
|
51
|
+
const missing = (missingProp ?? []).map(toField);
|
|
52
|
+
const groups = buildGroups(t, blocking, expired, expiring, missing);
|
|
53
|
+
const tone = toneProp ?? completenessTone(missing.length, expiring.length, severity, blocking.length + expired.length);
|
|
54
|
+
const hasDetails = groups.length > 0;
|
|
55
|
+
const computedLabel = blocking.length > 0
|
|
56
|
+
? t.completeness.blockingTitle
|
|
57
|
+
: expired.length > 0
|
|
58
|
+
? t.completeness.expired
|
|
59
|
+
: missing.length > 0
|
|
60
|
+
? t.completeness.missing(missing.length)
|
|
61
|
+
: expiring.length > 0
|
|
62
|
+
? t.completeness.expiring
|
|
63
|
+
: (completeLabel ?? t.completeness.complete);
|
|
64
|
+
const label = labelProp ?? computedLabel;
|
|
38
65
|
const inner = (_jsxs(_Fragment, { children: [_jsx("span", { className: "ev-badge-dot", "aria-hidden": "true" }), _jsx("span", { className: "ev-completeness-label", children: label })] }));
|
|
66
|
+
const details = _jsx(Details, { groups: groups });
|
|
67
|
+
// Ссылка: группы - в подсказке у ссылки (она и так фокусируется).
|
|
68
|
+
if (href !== undefined && !(onItemClick && hasDetails)) {
|
|
69
|
+
const link = (_jsx(UiLink, { href: href, className: cx('ev-badge ev-completeness ev-completeness-link', className), "data-tone": tone, "data-size": size, children: inner }));
|
|
70
|
+
return hasDetails ? _jsx(Tooltip, { content: details, children: link }) : link;
|
|
71
|
+
}
|
|
39
72
|
if (!hasDetails) {
|
|
40
73
|
return (_jsx("span", { className: cx('ev-badge ev-completeness', className), "data-tone": tone, "data-size": size, children: inner }));
|
|
41
74
|
}
|
|
@@ -50,8 +83,8 @@ export function CompletenessBadge({ missing: missingProp, expiring: expiringProp
|
|
|
50
83
|
triggerRef.current?.focus({ preventScroll: true });
|
|
51
84
|
});
|
|
52
85
|
};
|
|
53
|
-
return (_jsx(Popover, { open: open, onOpenChange: setOpen, placement: "bottom-start", label: typeof label === 'string' ? label : t.completeness.missingTitle, className: "ev-completeness-pop", trigger: _jsxs("button", { ref: triggerRef, type: "button", className: cx('ev-badge ev-completeness ev-completeness-btn', className), "data-tone": tone, "data-size": size, children: [inner, _jsx(ChevronDown, { size: 12, "aria-hidden": "true", className: "ev-completeness-chevron" })] }), children: _jsx(Details, {
|
|
86
|
+
return (_jsx(Popover, { open: open, onOpenChange: setOpen, placement: "bottom-start", label: typeof label === 'string' ? label : t.completeness.missingTitle, className: "ev-completeness-pop", trigger: _jsxs("button", { ref: triggerRef, type: "button", className: cx('ev-badge ev-completeness ev-completeness-btn', className), "data-tone": tone, "data-size": size, children: [inner, _jsx(ChevronDown, { size: 12, "aria-hidden": "true", className: "ev-completeness-chevron" })] }), children: _jsx(Details, { groups: groups, onPick: pick }) }));
|
|
54
87
|
}
|
|
55
|
-
return (_jsx(Tooltip, { content:
|
|
88
|
+
return (_jsx(Tooltip, { content: details, children: _jsx("span", { className: cx('ev-badge ev-completeness', className), "data-tone": tone, "data-size": size, tabIndex: 0, children: inner }) }));
|
|
56
89
|
}
|
|
57
90
|
//# sourceMappingURL=CompletenessBadge.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CompletenessBadge.js","sourceRoot":"","sources":["../../src/components/CompletenessBadge.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAA;AACxD,OAAO,EAAE,EAAE,EAAE,MAAM,WAAW,CAAA;AAC9B,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"CompletenessBadge.js","sourceRoot":"","sources":["../../src/components/CompletenessBadge.tsx"],"names":[],"mappings":"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"}
|
|
@@ -29,7 +29,11 @@ export declare function isEditableTarget(el: Element | null): boolean;
|
|
|
29
29
|
* групп, за которыми нет пунктов.
|
|
30
30
|
*/
|
|
31
31
|
export declare function compactMenuEntries(entries: MenuEntry[]): MenuEntry[];
|
|
32
|
-
/**
|
|
32
|
+
/**
|
|
33
|
+
* Склейка групп пунктов через разделитель; пустые группы пропускаются.
|
|
34
|
+
* id разделителя - из id соседних пунктов: уникален и при повторной склейке
|
|
35
|
+
* уже склеенных групп.
|
|
36
|
+
*/
|
|
33
37
|
export declare function joinMenuSections(sections: Array<MenuEntry[] | null | undefined>): MenuEntry[];
|
|
34
38
|
interface ContextMenuPanelProps {
|
|
35
39
|
items: MenuEntry[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContextMenu.d.ts","sourceRoot":"","sources":["../../src/components/ContextMenu.tsx"],"names":[],"mappings":"AAEA,OAAO,EASL,KAAK,aAAa,EAClB,KAAK,aAAa,IAAI,kBAAkB,EAExC,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,GAAG,EACT,MAAM,OAAO,CAAA;AAKd,OAAO,EAAE,gBAAgB,EAAsD,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAA;AAIlI,OAAO,EAAE,gBAAgB,EAAE,CAAA;AA6B3B,MAAM,MAAM,gBAAgB,GAAG,SAAS,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,WAAW,KAAK,SAAS,EAAE,GAAG,IAAI,GAAG,SAAS,CAAC,CAAA;AAOtG;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EAC/C,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EACvC,QAAQ,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAC3C,GAAG,SAAe,GACjB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAQ/B;AAED,+EAA+E;AAC/E,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,GAAG,OAAO,CAI5D;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,CAkBpE;AAED
|
|
1
|
+
{"version":3,"file":"ContextMenu.d.ts","sourceRoot":"","sources":["../../src/components/ContextMenu.tsx"],"names":[],"mappings":"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"}
|