@olddevs/ui 4.1.1 → 4.2.0

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.
Files changed (62) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/components/navigation/MegaMenu.d.ts +156 -0
  3. package/dist/components/navigation/MegaMenu.d.ts.map +1 -0
  4. package/dist/components/navigation/MegaMenu.js +512 -0
  5. package/dist/components/navigation/MegaMenu.js.map +1 -0
  6. package/dist/components/navigation/useMenuAim.d.ts +41 -0
  7. package/dist/components/navigation/useMenuAim.d.ts.map +1 -0
  8. package/dist/components/navigation/useMenuAim.js +114 -0
  9. package/dist/components/navigation/useMenuAim.js.map +1 -0
  10. package/dist/components/overlays/Menu.d.ts +19 -1
  11. package/dist/components/overlays/Menu.d.ts.map +1 -1
  12. package/dist/components/overlays/Menu.js +16 -4
  13. package/dist/components/overlays/Menu.js.map +1 -1
  14. package/dist/editor/features/table/TableMenuButton.js +1 -1
  15. package/dist/editor/features/table/TableMenuButton.js.map +1 -1
  16. package/dist/editor/ui/BlockHandle.js +1 -1
  17. package/dist/editor/ui/BlockHandle.js.map +1 -1
  18. package/dist/editor/ui/FormatMenus.js +1 -1
  19. package/dist/editor/ui/FormatMenus.js.map +1 -1
  20. package/dist/{editor/hooks → hooks}/useSubmenuPlacement.d.ts +14 -1
  21. package/dist/hooks/useSubmenuPlacement.d.ts.map +1 -0
  22. package/dist/hooks/useSubmenuPlacement.js +10 -0
  23. package/dist/hooks/useSubmenuPlacement.js.map +1 -0
  24. package/dist/i18n/defaults.d.ts.map +1 -1
  25. package/dist/i18n/defaults.js +3 -0
  26. package/dist/i18n/defaults.js.map +1 -1
  27. package/dist/i18n/messages.d.ts +8 -0
  28. package/dist/i18n/messages.d.ts.map +1 -1
  29. package/dist/index.d.ts +2 -0
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +1 -0
  32. package/dist/index.js.map +1 -1
  33. package/dist/locales/ru.d.ts.map +1 -1
  34. package/dist/locales/ru.js +3 -0
  35. package/dist/locales/ru.js.map +1 -1
  36. package/docs/api/messages.md +6 -0
  37. package/docs/components/index.en.md +2 -1
  38. package/docs/components/index.md +1 -0
  39. package/docs/components/navigation/mega-menu.en.md +273 -0
  40. package/docs/components/navigation/mega-menu.md +258 -0
  41. package/docs/components/overlays/menu.en.md +22 -4
  42. package/docs/components/overlays/menu.md +20 -4
  43. package/docs/getting-started.en.md +4 -4
  44. package/docs/getting-started.md +3 -3
  45. package/docs/glossary.en.md +6 -1
  46. package/docs/glossary.md +5 -0
  47. package/llms.txt +1 -0
  48. package/package.json +1 -1
  49. package/src/components/navigation/MegaMenu.tsx +1223 -0
  50. package/src/components/navigation/useMenuAim.ts +202 -0
  51. package/src/components/overlays/Menu.tsx +47 -4
  52. package/src/editor/features/table/TableMenuButton.tsx +1 -1
  53. package/src/editor/ui/BlockHandle.tsx +1 -1
  54. package/src/editor/ui/FormatMenus.tsx +1 -1
  55. package/src/{editor/hooks → hooks}/useSubmenuPlacement.ts +18 -15
  56. package/src/i18n/defaults.ts +4 -0
  57. package/src/i18n/messages.ts +9 -0
  58. package/src/index.ts +17 -0
  59. package/src/locales/ru.ts +4 -0
  60. package/dist/editor/hooks/useSubmenuPlacement.d.ts.map +0 -1
  61. package/dist/editor/hooks/useSubmenuPlacement.js +0 -20
  62. package/dist/editor/hooks/useSubmenuPlacement.js.map +0 -1
@@ -14,7 +14,10 @@ story: src/components/overlays/Menu.stories.tsx
14
14
  `Menu` — составное меню действий, открываемое `MenuTrigger`. Внутри `MenuTrigger`
15
15
  используйте специальный `MenuButton`, а не обычный `Button`: только он читает
16
16
  `ButtonContext` react-aria. Меню подходит для разнородных команд, разделов, выбранных режимов и
17
- подменю; не для выбора значения поля.
17
+ подменю; не для выбора значения поля. Вложенный `Menu` в `SubmenuTrigger` сам
18
+ раскрывается сбоку от пункта, на узком экране под ним: `placement` задавать не
19
+ нужно. «Прицел» (защита подменю от случайного закрытия при движении курсора к
20
+ нему) даёт react-aria, свой не пишите.
18
21
 
19
22
  ## Когда использовать
20
23
 
@@ -50,9 +53,9 @@ story: src/components/overlays/Menu.stories.tsx
50
53
  button look props, `icon`, `children`, `disabled`, `aria-label` и `className`;
51
54
  `aria-label` обязателен, если у кнопки нет подписи; с `iconOnly` её нет всегда.
52
55
  `Menu` принимает обычные `AriaMenuProps`, плюс `offset` — отступ панели от кнопки
53
- в пикселях (умолчание 6) и `placement` — сторона раскрытия (умолчание
54
- `bottom start`; ещё `bottom end`, `top start`, `top end`, `right top`,
55
- `left top`).
56
+ в пикселях (умолчание 6) и `placement` — сторона раскрытия (умолчание корневого
57
+ меню `bottom start`; ещё `bottom end`, `top start`, `top end`, `right top`,
58
+ `left top`; умолчание подменю — ниже).
56
59
 
57
60
  `MenuItem` принимает props `AriaMenuItem`, `icon`, `shortcut`, `tone`, `disabled`
58
61
  и `className`; действие передавайте в `onAction`. `MenuSection` принимает
@@ -60,6 +63,19 @@ button look props, `icon`, `children`, `disabled`, `aria-label` и `className`;
60
63
  `selectionMode`, `selectedKeys` и `onSelectionChange` на section, а не `checked`
61
64
  на item. `MenuSeparator` разделяет группы.
62
65
 
66
+ Подменю — `Menu` внутри `SubmenuTrigger` — по умолчанию раскрывается справа от
67
+ своего пункта, верхним краем вровень с ним. Если справа не хватает места,
68
+ react-aria переворачивает подменю влево. При письме справа налево всё зеркально:
69
+ подменю раскрывается слева от пункта. На узком экране (до 639px шириной) места
70
+ сбоку нет ни справа, ни слева, и подменю встаёт под своим пунктом, поверх
71
+ родительского меню. Явный `placement` у вложенного `Menu` побеждает умолчание, в
72
+ том числе на телефоне. Корневое меню раскрывается как прежде — `bottom start`.
73
+ То же правило у подменю Редактора.
74
+
75
+ Движение курсора к подменю по диагонали его не закрывает и не переключает на
76
+ соседний пункт: этот «Прицел» работает в `SubmenuTrigger` из react-aria. Кит его
77
+ не подменяет и своего не добавляет — не пишите поверх него свой.
78
+
63
79
  Высоту панели меню задаёт react-aria по видимой области. Пункты, которые в неё
64
80
  не влезли, прокручиваются внутри панели (`overflow-y: auto`, прокрутка не
65
81
  уходит на страницу), а не рисуются за её краем поверх содержимого. На iOS
@@ -1,5 +1,5 @@
1
1
  ---
2
- sourceHash: 6f3e6f49e2eb
2
+ sourceHash: 5f89459633fb
3
3
  ---
4
4
 
5
5
  # Setting up `@olddevs/ui`
@@ -132,9 +132,9 @@ peer dependencies are treated as external, and the metric is gzip:
132
132
  | `cn` and `tableStateToParams` | 0.6 kB |
133
133
  | one `Button` | 1.6 kB |
134
134
  | `DataTable` | 9.0 kB |
135
- | the whole kit (`import *`) | 71.4 kB |
136
- | `RichTextEditor` from `@olddevs/ui/editor`, without the engine, "start" | 70.4 kB |
137
- | `RichTextEditor` with the Tiptap engine, "start" (static graph, `basic`) | 295.1 kB |
135
+ | the whole kit (`import *`) | 76.4 kB |
136
+ | `RichTextEditor` from `@olddevs/ui/editor`, without the engine, "start" | 70.6 kB |
137
+ | `RichTextEditor` with the Tiptap engine, "start" (static graph, `basic`) | 295.3 kB |
138
138
  | `RichTextEditor` with the Tiptap engine, "full" (with all lazy chunks, `full`) | 339.1 kB |
139
139
  | `RichTextView` from `@olddevs/ui/editor`, Tiptap engine included in the measurement | 12.0 kB |
140
140
  | `sanitizeRichText` and `richTextSanitizeConfig` from `@olddevs/ui/editor/schema`, Tiptap engine included | 3.6 kB |
@@ -129,9 +129,9 @@ peer-зависимости внешние, метрика gzip:
129
129
  | `cn` и `tableStateToParams` | 0,6 кБ |
130
130
  | одна `Button` | 1,6 кБ |
131
131
  | `DataTable` | 9,0 кБ |
132
- | весь кит целиком (`import *`) | 71,4 кБ |
133
- | `RichTextEditor` из `@olddevs/ui/editor`, без движка, «старт» | 70,4 кБ |
134
- | `RichTextEditor` вместе с движком Tiptap, «старт» (статический граф, `basic`) | 295,1 кБ |
132
+ | весь кит целиком (`import *`) | 76,4 кБ |
133
+ | `RichTextEditor` из `@olddevs/ui/editor`, без движка, «старт» | 70,6 кБ |
134
+ | `RichTextEditor` вместе с движком Tiptap, «старт» (статический граф, `basic`) | 295,3 кБ |
135
135
  | `RichTextEditor` вместе с движком Tiptap, «полный» (со всеми ленивыми чанками, `full`) | 339,1 кБ |
136
136
  | `RichTextView` из `@olddevs/ui/editor`, движок Tiptap в замер включён | 12,0 кБ |
137
137
  | `sanitizeRichText` и `richTextSanitizeConfig` из `@olddevs/ui/editor/schema`, движок Tiptap в замер включён | 3,6 кБ |
@@ -1,5 +1,5 @@
1
1
  ---
2
- sourceHash: 7b328de94ead
2
+ sourceHash: 2524e6589eaa
3
3
  ---
4
4
 
5
5
  # Glossary of `@olddevs/ui`
@@ -124,6 +124,11 @@ search for a single word.
124
124
  | **tag** | `Tag` in `TagGroup` and `TagInput`: a compact element with text and an optional remove button | The Editor's Mark and a field label |
125
125
  | **close button** | The button with an "×" that closes a dialog, drawer, popover or notification; in a search field it is the **clear button** | A "Cancel" button. Do not write: cross |
126
126
  | **shortcut list** | `ShortcutsHelp`: a dialog with a list of keyboard shortcuts | The Editor's Shortcuts reference: that one opens from the Toolbar and describes the Editor's shortcuts |
127
+ | **mega menu** | `MegaMenu`: a category column and the showcase of the hovered category, an Amazon-style catalog | `Menu`: that one is for commands, not navigation. Do not write: mega dropdown |
128
+ | **category** | `MegaMenuCategory`: a row of the category column with a label, an icon and its own showcase | A menu item (`MenuItem`) |
129
+ | **category column** | The vertical list of categories in a mega menu | `SideNav`: that one expands branches in place |
130
+ | **showcase** | The area next to the category column with the open category's content: link columns, promos | The Editor toolbar, a popover |
131
+ | **aim** | Deferring the category switch while the pointer cuts diagonally toward the open showcase | An opening delay: aim never slows down a direct hover |
127
132
 
128
133
  ## Editor
129
134
 
package/docs/glossary.md CHANGED
@@ -120,6 +120,11 @@
120
120
  | **Тег** | `Tag` в `TagGroup` и `TagInput`: компактный элемент с текстом и необязательной кнопкой удаления | Меткой Редактора (`Mark`) и подписью поля. Не пишем: таг |
121
121
  | **Кнопка закрытия** | Кнопка с иконкой «×», которая закрывает окно, ящик, поповер или уведомление; у поля поиска — **кнопка очистки** | Кнопкой «Отмена». Не пишем: крестик |
122
122
  | **Свод сочетаний** | `ShortcutsHelp`: окно со списком сочетаний клавиш | Справочником Редактора: тот открывается из Панели и описывает сочетания Редактора |
123
+ | **Мегаменю** | `MegaMenu`: Столбец категорий и Витрина наведённой Категории — каталог в духе Amazon | `Menu`: тот для команд, а не для навигации. Не пишем: мега-дропдаун |
124
+ | **Категория** | `MegaMenuCategory`: строка Столбца с подписью, иконкой и своей Витриной | Пунктом меню (`MenuItem`) |
125
+ | **Столбец категорий** | Вертикальный список Категорий Мегаменю | `SideNav`: тот раскрывает ветки на месте |
126
+ | **Витрина** | Область рядом со Столбцом с содержимым открытой Категории: колонки ссылок, промо | Панелью Редактора и поповером |
127
+ | **Прицел** | Отложенная смена Категории, пока курсор идёт наискосок к открытой Витрине | Задержкой открытия: прямое наведение Прицел не тормозит |
123
128
 
124
129
  ## Редактор
125
130
 
package/llms.txt CHANGED
@@ -108,6 +108,7 @@
108
108
  - [Breadcrumbs](docs/components/navigation/breadcrumbs.md): `Breadcrumbs` показывает путь до текущей страницы.
109
109
  - [Pagination](docs/components/navigation/pagination.md): `Pagination` — controlled pagination для уже разбитой на страницы коллекции.
110
110
  - [Stepper](docs/components/navigation/stepper.md): `Stepper` показывает порядок шагов мастера; текущий индекс задаёт родитель (controlled).
111
+ - [MegaMenu](docs/components/navigation/mega-menu.md): `MegaMenu` — каталог магазина в духе Amazon: слева Столбец категорий, справа от наведённой Категории — её Витрина с колонками ссылок и любым своим содержимым.
111
112
  - [TreeView](docs/components/navigation/tree-view.md): Иерархия с раскрытием, выбором и клавиатурой на `Tree` из react-aria.
112
113
  - [SelectionBar и useStickyOffset](docs/components/navigation/selection-bar.md): `SelectionBar` — полоса массовых действий: «Выбрано 12» и что с этим можно сделать.
113
114
  - [ContextualSaveBar](docs/components/navigation/contextual-save-bar.md): Полоса несохранённых изменений: появляется с первой правкой формы, показывает «есть несохранённые изменения» (или их число) и две кнопки — сохранить и отменить.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@olddevs/ui",
3
- "version": "4.1.1",
3
+ "version": "4.2.0",
4
4
  "description": "Olddevs UI — design system: tokens, themes and accessible UI primitives",
5
5
  "license": "MIT",
6
6
  "private": false,