@olddevs/ui 4.1.0 → 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.
- package/CHANGELOG.md +32 -0
- package/dist/components/actions/Toggle.d.ts.map +1 -1
- package/dist/components/actions/Toggle.js +1 -1
- package/dist/components/actions/Toggle.js.map +1 -1
- package/dist/components/actions/Truncate.d.ts.map +1 -1
- package/dist/components/actions/Truncate.js +2 -2
- package/dist/components/actions/Truncate.js.map +1 -1
- package/dist/components/app-shell/MobileTabBar.d.ts.map +1 -1
- package/dist/components/app-shell/MobileTabBar.js +1 -1
- package/dist/components/app-shell/MobileTabBar.js.map +1 -1
- package/dist/components/app-shell/NavItem.d.ts.map +1 -1
- package/dist/components/app-shell/NavItem.js +3 -1
- package/dist/components/app-shell/NavItem.js.map +1 -1
- package/dist/components/content/AvatarGroup.d.ts.map +1 -1
- package/dist/components/content/AvatarGroup.js +2 -1
- package/dist/components/content/AvatarGroup.js.map +1 -1
- package/dist/components/content/Table.d.ts.map +1 -1
- package/dist/components/content/Table.js +2 -1
- package/dist/components/content/Table.js.map +1 -1
- package/dist/components/content/VirtualGrid.d.ts.map +1 -1
- package/dist/components/content/VirtualGrid.js +4 -1
- package/dist/components/content/VirtualGrid.js.map +1 -1
- package/dist/components/inputs/Checkbox.d.ts.map +1 -1
- package/dist/components/inputs/Checkbox.js +3 -0
- package/dist/components/inputs/Checkbox.js.map +1 -1
- package/dist/components/inputs/CheckboxCard.d.ts.map +1 -1
- package/dist/components/inputs/CheckboxCard.js +2 -2
- package/dist/components/inputs/CheckboxCard.js.map +1 -1
- package/dist/components/inputs/RadioGroup.d.ts.map +1 -1
- package/dist/components/inputs/RadioGroup.js +5 -3
- package/dist/components/inputs/RadioGroup.js.map +1 -1
- package/dist/components/inputs/Select.d.ts.map +1 -1
- package/dist/components/inputs/Select.js +6 -6
- package/dist/components/inputs/Select.js.map +1 -1
- package/dist/components/inputs/Slider.d.ts.map +1 -1
- package/dist/components/inputs/Slider.js +2 -2
- package/dist/components/inputs/Slider.js.map +1 -1
- package/dist/components/navigation/Accordion.d.ts.map +1 -1
- package/dist/components/navigation/Accordion.js +1 -1
- package/dist/components/navigation/Accordion.js.map +1 -1
- package/dist/components/navigation/MegaMenu.d.ts +156 -0
- package/dist/components/navigation/MegaMenu.d.ts.map +1 -0
- package/dist/components/navigation/MegaMenu.js +512 -0
- package/dist/components/navigation/MegaMenu.js.map +1 -0
- package/dist/components/navigation/TreeView.d.ts.map +1 -1
- package/dist/components/navigation/TreeView.js +6 -3
- package/dist/components/navigation/TreeView.js.map +1 -1
- package/dist/components/navigation/useMenuAim.d.ts +41 -0
- package/dist/components/navigation/useMenuAim.d.ts.map +1 -0
- package/dist/components/navigation/useMenuAim.js +114 -0
- package/dist/components/navigation/useMenuAim.js.map +1 -0
- package/dist/components/overlays/Menu.d.ts +19 -1
- package/dist/components/overlays/Menu.d.ts.map +1 -1
- package/dist/components/overlays/Menu.js +16 -4
- package/dist/components/overlays/Menu.js.map +1 -1
- package/dist/editor/RichTextEditor.d.ts.map +1 -1
- package/dist/editor/RichTextEditor.js +4 -2
- package/dist/editor/RichTextEditor.js.map +1 -1
- package/dist/editor/features/table/TableMenuButton.js +1 -1
- package/dist/editor/features/table/TableMenuButton.js.map +1 -1
- package/dist/editor/styles/prose.d.ts +7 -0
- package/dist/editor/styles/prose.d.ts.map +1 -1
- package/dist/editor/styles/prose.js +1 -1
- package/dist/editor/styles/prose.js.map +1 -1
- package/dist/editor/ui/BlockHandle.js +1 -1
- package/dist/editor/ui/BlockHandle.js.map +1 -1
- package/dist/editor/ui/FormatMenus.d.ts.map +1 -1
- package/dist/editor/ui/FormatMenus.js +3 -2
- package/dist/editor/ui/FormatMenus.js.map +1 -1
- package/dist/{editor/hooks → hooks}/useSubmenuPlacement.d.ts +14 -1
- package/dist/hooks/useSubmenuPlacement.d.ts.map +1 -0
- package/dist/hooks/useSubmenuPlacement.js +10 -0
- package/dist/hooks/useSubmenuPlacement.js.map +1 -0
- package/dist/i18n/defaults.d.ts.map +1 -1
- package/dist/i18n/defaults.js +3 -0
- package/dist/i18n/defaults.js.map +1 -1
- package/dist/i18n/messages.d.ts +8 -0
- package/dist/i18n/messages.d.ts.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/choice-card.d.ts +13 -0
- package/dist/lib/choice-card.d.ts.map +1 -1
- package/dist/lib/choice-card.js +2 -0
- package/dist/lib/choice-card.js.map +1 -1
- package/dist/locales/ru.d.ts.map +1 -1
- package/dist/locales/ru.js +3 -0
- package/dist/locales/ru.js.map +1 -1
- package/docs/api/messages.md +6 -0
- package/docs/components/app-shell/mobile-tab-bar.en.md +3 -3
- package/docs/components/app-shell/mobile-tab-bar.md +2 -2
- package/docs/components/app-shell/side-nav.en.md +7 -3
- package/docs/components/app-shell/side-nav.md +6 -2
- package/docs/components/index.en.md +2 -1
- package/docs/components/index.md +1 -0
- package/docs/components/inputs/form.en.md +2 -2
- package/docs/components/inputs/form.md +1 -1
- package/docs/components/inputs/rich-text-editor.en.md +2 -2
- package/docs/components/inputs/rich-text-editor.md +1 -1
- package/docs/components/navigation/mega-menu.en.md +273 -0
- package/docs/components/navigation/mega-menu.md +258 -0
- package/docs/components/overlays/menu.en.md +22 -4
- package/docs/components/overlays/menu.md +20 -4
- package/docs/getting-started.en.md +5 -5
- package/docs/getting-started.md +4 -4
- package/docs/glossary.en.md +6 -1
- package/docs/glossary.md +5 -0
- package/llms.txt +1 -0
- package/package.json +1 -1
- package/src/components/actions/Toggle.tsx +10 -3
- package/src/components/actions/Truncate.tsx +5 -3
- package/src/components/app-shell/MobileTabBar.tsx +9 -1
- package/src/components/app-shell/NavItem.tsx +6 -1
- package/src/components/content/AvatarGroup.tsx +6 -2
- package/src/components/content/Table.tsx +15 -3
- package/src/components/content/VirtualGrid.tsx +11 -1
- package/src/components/inputs/Checkbox.tsx +5 -0
- package/src/components/inputs/CheckboxCard.tsx +2 -0
- package/src/components/inputs/RadioGroup.tsx +10 -1
- package/src/components/inputs/Select.tsx +113 -106
- package/src/components/inputs/Slider.tsx +6 -2
- package/src/components/navigation/Accordion.tsx +4 -1
- package/src/components/navigation/MegaMenu.tsx +1223 -0
- package/src/components/navigation/TreeView.tsx +70 -49
- package/src/components/navigation/useMenuAim.ts +202 -0
- package/src/components/overlays/Menu.tsx +47 -4
- package/src/editor/RichTextEditor.tsx +6 -3
- package/src/editor/features/table/TableMenuButton.tsx +1 -1
- package/src/editor/styles/prose.ts +1 -1
- package/src/editor/ui/BlockHandle.tsx +1 -1
- package/src/editor/ui/FormatMenus.tsx +17 -2
- package/src/{editor/hooks → hooks}/useSubmenuPlacement.ts +18 -15
- package/src/i18n/defaults.ts +4 -0
- package/src/i18n/messages.ts +9 -0
- package/src/index.ts +17 -0
- package/src/lib/choice-card.ts +17 -0
- package/src/locales/ru.ts +4 -0
- package/dist/editor/hooks/useSubmenuPlacement.d.ts.map +0 -1
- package/dist/editor/hooks/useSubmenuPlacement.js +0 -20
- package/dist/editor/hooks/useSubmenuPlacement.js.map +0 -1
package/dist/lib/choice-card.js
CHANGED
|
@@ -8,6 +8,8 @@ export const CHOICE_CARD_SELECTED_BORDER = {
|
|
|
8
8
|
export const CHOICE_CARD_IDLE_BORDER = "border-line";
|
|
9
9
|
export const CHOICE_CARD_INVALID_BORDER = "border-danger-strong";
|
|
10
10
|
export const CHOICE_CARD_BASE = "flex flex-col rounded-lg border bg-bg-2 transition-colors";
|
|
11
|
+
export const DIMMED_IN_DISABLED_FIELDSET = "has-[input:disabled]:cursor-default has-[input:disabled]:opacity-50 has-[input:disabled]:hover:bg-transparent";
|
|
12
|
+
export const CHOICE_CARD_DIMMED_IN_DISABLED_FIELDSET = "has-[input:disabled]:opacity-50 has-[input:disabled]:hover:bg-bg-2";
|
|
11
13
|
export const CHOICE_CARD_ROW = "max-w-xs flex-1 basis-48";
|
|
12
14
|
export const CHOICE_CARD_LABEL = "-m-px flex cursor-pointer items-start gap-3 rounded-lg p-[13px] disabled:cursor-default";
|
|
13
15
|
export const CHOICE_CARD_FOCUS_RING = "ring-accent-strong ring-offset-bg-1 ring-2 ring-offset-1";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"choice-card.js","sourceRoot":"","sources":["../../src/lib/choice-card.ts"],"names":[],"mappings":"AAgCA,MAAM,CAAC,MAAM,2BAA2B,GAAyB;IAC/D,OAAO,EAAE,aAAa;IACtB,MAAM,EAAE,sBAAsB;IAC9B,OAAO,EAAE,uBAAuB;IAChC,OAAO,EAAE,uBAAuB;IAChC,MAAM,EAAE,sBAAsB;CAC/B,CAAC;AAGF,MAAM,CAAC,MAAM,uBAAuB,GAAG,aAAa,CAAC;AAGrD,MAAM,CAAC,MAAM,0BAA0B,GAAG,sBAAsB,CAAC;AAMjE,MAAM,CAAC,MAAM,gBAAgB,GAAG,2DAA2D,CAAC;
|
|
1
|
+
{"version":3,"file":"choice-card.js","sourceRoot":"","sources":["../../src/lib/choice-card.ts"],"names":[],"mappings":"AAgCA,MAAM,CAAC,MAAM,2BAA2B,GAAyB;IAC/D,OAAO,EAAE,aAAa;IACtB,MAAM,EAAE,sBAAsB;IAC9B,OAAO,EAAE,uBAAuB;IAChC,OAAO,EAAE,uBAAuB;IAChC,MAAM,EAAE,sBAAsB;CAC/B,CAAC;AAGF,MAAM,CAAC,MAAM,uBAAuB,GAAG,aAAa,CAAC;AAGrD,MAAM,CAAC,MAAM,0BAA0B,GAAG,sBAAsB,CAAC;AAMjE,MAAM,CAAC,MAAM,gBAAgB,GAAG,2DAA2D,CAAC;AAY5F,MAAM,CAAC,MAAM,2BAA2B,GACtC,+GAA+G,CAAC;AAGlH,MAAM,CAAC,MAAM,uCAAuC,GAClD,oEAAoE,CAAC;AAGvE,MAAM,CAAC,MAAM,eAAe,GAAG,0BAA0B,CAAC;AAkB1D,MAAM,CAAC,MAAM,iBAAiB,GAC5B,yFAAyF,CAAC;AAG5F,MAAM,CAAC,MAAM,sBAAsB,GAAG,0DAA0D,CAAC;AAGjG,MAAM,CAAC,MAAM,gBAAgB,GAAG,mEAAmE,CAAC"}
|
package/dist/locales/ru.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ru.d.ts","sourceRoot":"","sources":["../../src/locales/ru.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAuCtD,eAAO,MAAM,MAAM,UAAU,CAAC;AAE9B,eAAO,MAAM,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"ru.d.ts","sourceRoot":"","sources":["../../src/locales/ru.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAuCtD,eAAO,MAAM,MAAM,UAAU,CAAC;AAE9B,eAAO,MAAM,QAAQ,EAAE,UA+oBtB,CAAC;AAEF,eAAe,QAAQ,CAAC"}
|
package/dist/locales/ru.js
CHANGED
package/dist/locales/ru.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ru.js","sourceRoot":"","sources":["../../src/locales/ru.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ru.js","sourceRoot":"","sources":["../../src/locales/ru.ts"],"names":[],"mappings":"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"}
|
package/docs/api/messages.md
CHANGED
|
@@ -498,6 +498,12 @@
|
|
|
498
498
|
| -------- | ------ | ------- | ------- |
|
|
499
499
|
| `select` | строка | Select | Выбрать |
|
|
500
500
|
|
|
501
|
+
## `megaMenu`
|
|
502
|
+
|
|
503
|
+
| Ключ | Форма | `en-US` | `ru-RU` |
|
|
504
|
+
| ------ | ------ | ------- | ------- |
|
|
505
|
+
| `back` | строка | Back | Назад |
|
|
506
|
+
|
|
501
507
|
## `mobileTabBar`
|
|
502
508
|
|
|
503
509
|
| Ключ | Форма | `en-US` | `ru-RU` |
|
|
@@ -5,7 +5,7 @@ category: app-shell
|
|
|
5
5
|
status: stable
|
|
6
6
|
source: src/components/app-shell/MobileTabBar.tsx
|
|
7
7
|
story: src/components/app-shell/MobileTabBar.stories.tsx
|
|
8
|
-
sourceHash:
|
|
8
|
+
sourceHash: 5bbd39302c9f
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
# MobileTabBar and MobileTabBarItem
|
|
@@ -52,13 +52,13 @@ import Link from "next/link";
|
|
|
52
52
|
<MobileTabBar>
|
|
53
53
|
<MobileTabBarItem
|
|
54
54
|
label="Dashboard"
|
|
55
|
-
icon={<DashboardIcon />}
|
|
55
|
+
icon={<DashboardIcon size={20} />}
|
|
56
56
|
active={pathname.startsWith("/dashboard")}
|
|
57
57
|
asChild
|
|
58
58
|
>
|
|
59
59
|
<Link href="/dashboard" />
|
|
60
60
|
</MobileTabBarItem>
|
|
61
|
-
<MobileTabBarItem label="Documents" icon={<FolderIcon />} badge={3} asChild>
|
|
61
|
+
<MobileTabBarItem label="Documents" icon={<FolderIcon size={20} />} badge={3} asChild>
|
|
62
62
|
<Link href="/docs" />
|
|
63
63
|
</MobileTabBarItem>
|
|
64
64
|
</MobileTabBar>
|
|
@@ -52,13 +52,13 @@ import Link from "next/link";
|
|
|
52
52
|
<MobileTabBar>
|
|
53
53
|
<MobileTabBarItem
|
|
54
54
|
label="Дашборд"
|
|
55
|
-
icon={<DashboardIcon />}
|
|
55
|
+
icon={<DashboardIcon size={20} />}
|
|
56
56
|
active={pathname.startsWith("/dashboard")}
|
|
57
57
|
asChild
|
|
58
58
|
>
|
|
59
59
|
<Link href="/dashboard" />
|
|
60
60
|
</MobileTabBarItem>
|
|
61
|
-
<MobileTabBarItem label="Документы" icon={<FolderIcon />} badge={3} asChild>
|
|
61
|
+
<MobileTabBarItem label="Документы" icon={<FolderIcon size={20} />} badge={3} asChild>
|
|
62
62
|
<Link href="/docs" />
|
|
63
63
|
</MobileTabBarItem>
|
|
64
64
|
</MobileTabBar>
|
|
@@ -5,7 +5,7 @@ category: app-shell
|
|
|
5
5
|
status: stable
|
|
6
6
|
source: src/components/app-shell/SideNav.tsx, src/components/app-shell/NavItem.tsx
|
|
7
7
|
story: src/components/app-shell/SideNav.stories.tsx, src/components/app-shell/NavItem.stories.tsx
|
|
8
|
-
sourceHash:
|
|
8
|
+
sourceHash: ce0078eb8974
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
# SideNav, NavGroup and NavItem
|
|
@@ -49,13 +49,13 @@ import Link from "next/link";
|
|
|
49
49
|
<NavGroup label="Work">
|
|
50
50
|
<NavItem
|
|
51
51
|
label="Dashboard"
|
|
52
|
-
icon={<DashboardIcon />}
|
|
52
|
+
icon={<DashboardIcon size={20} />}
|
|
53
53
|
active={pathname.startsWith("/dashboard")}
|
|
54
54
|
asChild
|
|
55
55
|
>
|
|
56
56
|
<Link href="/dashboard" />
|
|
57
57
|
</NavItem>
|
|
58
|
-
<NavItem label="Documents" icon={<FolderIcon />} asChild>
|
|
58
|
+
<NavItem label="Documents" icon={<FolderIcon size={20} />} asChild>
|
|
59
59
|
<Link href="/docs" />
|
|
60
60
|
</NavItem>
|
|
61
61
|
</NavGroup>
|
|
@@ -96,6 +96,10 @@ through `Slottable`. `Button` works the same way.
|
|
|
96
96
|
|
|
97
97
|
The other props go to the element — including `href` for the case without `asChild`.
|
|
98
98
|
|
|
99
|
+
**An unavailable item** is switched off with the `aria-disabled="true"` attribute: a link has no native `disabled`. The item is dimmed
|
|
100
|
+
and gets the default cursor, the same as `Button`. The attribute only declares the item unavailable: it does not cancel navigation
|
|
101
|
+
through `href`, so the consumer either omits `href` or cancels the navigation itself.
|
|
102
|
+
|
|
99
103
|
## Header and footer in icon mode
|
|
100
104
|
|
|
101
105
|
Items and sections adapt to the collapsed state on their own, but the `header`
|
|
@@ -48,13 +48,13 @@ import Link from "next/link";
|
|
|
48
48
|
<NavGroup label="Работа">
|
|
49
49
|
<NavItem
|
|
50
50
|
label="Дашборд"
|
|
51
|
-
icon={<DashboardIcon />}
|
|
51
|
+
icon={<DashboardIcon size={20} />}
|
|
52
52
|
active={pathname.startsWith("/dashboard")}
|
|
53
53
|
asChild
|
|
54
54
|
>
|
|
55
55
|
<Link href="/dashboard" />
|
|
56
56
|
</NavItem>
|
|
57
|
-
<NavItem label="Документы" icon={<FolderIcon />} asChild>
|
|
57
|
+
<NavItem label="Документы" icon={<FolderIcon size={20} />} asChild>
|
|
58
58
|
<Link href="/docs" />
|
|
59
59
|
</NavItem>
|
|
60
60
|
</NavGroup>
|
|
@@ -95,6 +95,10 @@ import Link from "next/link";
|
|
|
95
95
|
|
|
96
96
|
Остальные пропы уходят на элемент — включая `href` для случая без `asChild`.
|
|
97
97
|
|
|
98
|
+
**Недоступный пункт** выключается атрибутом `aria-disabled="true"`: у ссылки нет родного `disabled`. Пункт гаснет
|
|
99
|
+
и получает обычный курсор — так же, как `Button`. Атрибут только объявляет пункт недоступным: переход по `href`
|
|
100
|
+
он не отменяет, поэтому потребитель либо не передаёт `href`, либо гасит переход сам.
|
|
101
|
+
|
|
98
102
|
## Шапка и подвал в иконочном режиме
|
|
99
103
|
|
|
100
104
|
Пункты и разделы подстраиваются под схлопнутость сами, а слоты `header` и
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
sourceHash:
|
|
2
|
+
sourceHash: 26e978c5dd30
|
|
3
3
|
---
|
|
4
4
|
|
|
5
5
|
# Component catalog
|
|
@@ -122,6 +122,7 @@ Components built from primitives: the page frame, its navigation and header.
|
|
|
122
122
|
- [Breadcrumbs](navigation/breadcrumbs.md): `Breadcrumbs` — a chain of links "Section / Subsection / Page" that shows where the user is and lets them go back up a level
|
|
123
123
|
- [Pagination](navigation/pagination.md): `Pagination`, `pageRange` — a page switcher for long results: numbers, adjacent pages, jumping to the first and last; `pageRange` calculates which numbers to show
|
|
124
124
|
- [Stepper](navigation/stepper.md): `Stepper` — a step indicator for a wizard, an import or a checkout: shows the current step and lets you go back to a completed one
|
|
125
|
+
- [MegaMenu](navigation/mega-menu.md): `MegaMenu`, `MegaMenuCategory`, `MegaMenuGroup`, `MegaMenuLink`, `MegaMenuTrigger`, `MegaMenuButton` — an Amazon-style store catalog: a column of categories with a showcase of link columns next to the hovered one; the pointer can cut diagonally across to the showcase without a neighboring category taking over; the same markup also opens as a dropdown overlay from a "Catalog" button
|
|
125
126
|
- [TreeView](navigation/tree-view.md): `TreeView` — a tree with expandable branches for categories, folders and sections; nodes can be selected, including with checkboxes
|
|
126
127
|
- [Selection bar](navigation/selection-bar.md): `SelectionBar`, `useStickyOffset` — a bar above a list or a grid where several objects are selected: shows "12 selected", bulk action buttons and a clear-selection button
|
|
127
128
|
- [Contextual save bar](navigation/contextual-save-bar.md): `ContextualSaveBar` — a bar at the bottom of the viewport that appears after the first edit of a form and offers to save or discard unsaved changes
|
package/docs/components/index.md
CHANGED
|
@@ -118,6 +118,7 @@
|
|
|
118
118
|
- [Breadcrumbs](navigation/breadcrumbs.md): `Breadcrumbs` — цепочка ссылок «Раздел / Подраздел / Страница», по которой видно, где пользователь, и можно вернуться на уровень выше
|
|
119
119
|
- [Pagination](navigation/pagination.md): `Pagination`, `pageRange` — переключатель страниц для длинной выдачи: номера, соседние страницы, переход к первой и последней; `pageRange` считает, какие номера показать
|
|
120
120
|
- [Stepper](navigation/stepper.md): `Stepper` — индикатор шагов мастера, импорта или оформления заказа: показывает текущий шаг и позволяет вернуться к уже пройденному
|
|
121
|
+
- [MegaMenu](navigation/mega-menu.md): `MegaMenu`, `MegaMenuCategory`, `MegaMenuGroup`, `MegaMenuLink`, `MegaMenuTrigger`, `MegaMenuButton` — каталог магазина в духе Amazon: столбец категорий, а справа от наведённой — Витрина с колонками ссылок; курсор можно вести к Витрине наискосок, категория под ним не перехватит наведение; та же разметка открывается выпадающим оверлеем от кнопки «Каталог»
|
|
121
122
|
- [TreeView](navigation/tree-view.md): `TreeView` — дерево с раскрываемыми ветками для категорий, папок и разделов; узлы можно выбирать, в том числе флажками
|
|
122
123
|
- [Selection bar](navigation/selection-bar.md): `SelectionBar`, `useStickyOffset` — полоса над списком или сеткой, где выбрано несколько объектов: показывает «Выбрано 12», кнопки массовых действий и сброс выделения
|
|
123
124
|
- [Contextual save bar](navigation/contextual-save-bar.md): `ContextualSaveBar` — полоса внизу окна, которая появляется после первой правки формы и предлагает сохранить или отменить несохранённые изменения
|
|
@@ -5,7 +5,7 @@ category: inputs
|
|
|
5
5
|
status: stable
|
|
6
6
|
source: src/components/inputs/Form.tsx
|
|
7
7
|
story: src/components/inputs/Form.stories.tsx
|
|
8
|
-
sourceHash:
|
|
8
|
+
sourceHash: 933e813b29f4
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
# Form and FormField
|
|
@@ -38,7 +38,7 @@ sourceHash: aea08fad91f4
|
|
|
38
38
|
## Public API
|
|
39
39
|
|
|
40
40
|
- `Form.onSubmit` is required; the component prevents native submit and does not call the callback while `pending`.
|
|
41
|
-
- `pending` disables the children through a fieldset, including fields added later. A `RichTextEditor` inside `<fieldset disabled>` (including one set by the consumer, not only `Form pending`) is disabled the same way as a native field.
|
|
41
|
+
- `pending` disables the children through a fieldset, including fields added later. A `RichTextEditor` inside `<fieldset disabled>` (including one set by the consumer, not only `Form pending`) is disabled the same way as a native field. A `Checkbox`, `Radio`, `Toggle` and `Slider` inside such a fieldset are dimmed the same way as with their own `disabled`.
|
|
42
42
|
- `Form` sets `noValidate` (`validationBehavior="aria"`): the browser's native validation does not work in it, and a required `RichTextEditor`, like a native `required`, does not block submission — the consumer shows the error through `FormField error`.
|
|
43
43
|
- `FormField`: `label` is required, `htmlFor` ties it to the control's `id`, `error` replaces `hint`, `required` renders only a visual asterisk. `hintPersistent` keeps a rule hint ("8–64 characters, a digit and a letter") under the field even with an error. The error goes under it, and both describe the field; an explanatory hint ("how should we address you") is still replaced by the error (ADR-0065).
|
|
44
44
|
- `error` is carried all the way **to the field**: kit fields read the invalid flag from context and set `aria-invalid` themselves, so the border turns red too, not only the text under the field. An explicit `aria-invalid` on the field wins — the consumer knows more about their field than the form does.
|
|
@@ -37,7 +37,7 @@ story: src/components/inputs/Form.stories.tsx
|
|
|
37
37
|
## Public API
|
|
38
38
|
|
|
39
39
|
- `Form.onSubmit` обязателен; компонент предотвращает native submit и не вызывает callback во время `pending`.
|
|
40
|
-
- `pending` отключает children через fieldset, включая добавленные позднее поля. `RichTextEditor` внутри `<fieldset disabled>` (в том числе заданного потребителем, не только `Form pending`) выключается так же, как нативное поле.
|
|
40
|
+
- `pending` отключает children через fieldset, включая добавленные позднее поля. `RichTextEditor` внутри `<fieldset disabled>` (в том числе заданного потребителем, не только `Form pending`) выключается так же, как нативное поле. `Checkbox`, `Radio`, `Toggle` и `Slider` внутри такого `fieldset` приглушаются так же, как при собственном `disabled`.
|
|
41
41
|
- `Form` ставит `noValidate` (`validationBehavior="aria"`): родная проверка браузера в нём не работает, и обязательный `RichTextEditor`, как и нативное `required`, отправку не блокирует — ошибку показывает потребитель через `FormField error`.
|
|
42
42
|
- `FormField`: `label` обязателен, `htmlFor` связывает его с `id` контрола, `error` заменяет `hint`, `required` рисует только визуальную звёздочку. `hintPersistent` оставляет пояснение-правило («8–64 символа, цифра и буква») под полем и при ошибке. Ошибка встаёт под ним, обе описывают поле; обычное пояснение («как к вам обращаться») по-прежнему заменяет ошибка (ADR-0065).
|
|
43
43
|
- `error` доводится **до поля**: поля кита читают признак невалидности из контекста и сами ставят `aria-invalid`, отчего краснеет и рамка, а не только текст под полем. Явный `aria-invalid` на поле сильнее — потребитель знает про своё поле больше, чем форма.
|
|
@@ -37,7 +37,7 @@ category: inputs
|
|
|
37
37
|
status: stable
|
|
38
38
|
source: src/editor/RichTextEditor.tsx
|
|
39
39
|
story: src/editor/RichTextEditor.stories.tsx
|
|
40
|
-
sourceHash:
|
|
40
|
+
sourceHash: 95badb4a657c
|
|
41
41
|
---
|
|
42
42
|
|
|
43
43
|
# RichTextEditor
|
|
@@ -1124,7 +1124,7 @@ The `source` Tool (present in `full`, not in `basic`) is the "HTML" toggle butto
|
|
|
1124
1124
|
|
|
1125
1125
|
**What is visible.** The HTML is formatted: a top-level Block on its own line, the children of Block containers (list items, table rows and cells, Layout columns, parts of a `figure`, a checklist item) indented by two spaces, a Block's content on its tag's line (text whitespace is unchanged), the content of `pre` as is. The formatting is lossless: applying unchanged text produces the same Document. An empty Document opens as an empty field, not as `<p></p>`. There is no syntax highlighting.
|
|
1126
1126
|
|
|
1127
|
-
**Look.** The field is **always dark, using the kit's colors**, not the code block's syntax highlighting palette: in `dark` and `dim`, the theme's deepest background with its text and border; in `light` and on the Paper (`paper`), the same values of the dark theme (the variables `--rte-source-background`, `--rte-source-foreground`, `--rte-source-border`, which can be overridden). The corner radius is as for code, the font is monospace 13 px, as in `CodeView`; the padding is as for the Document area. On entry the height is at least the Document's height, then the field grows with its content and can be stretched vertically by hand. With `maxHeight` or `resizable` the field lives in the same scroll area as the Document (see the "Field height" section). Text selection in the field also comes from the dark theme for the current accent (`--selection-dark`), with the field's light text: the light theme's light selection was unreadable on the dark field.
|
|
1127
|
+
**Look.** The field is **always dark, using the kit's colors**, not the code block's syntax highlighting palette: in `dark` and `dim`, the theme's deepest background with its text and border; in `light` and on the Paper (`paper`), the same values of the dark theme (the variables `--rte-source-background`, `--rte-source-foreground`, `--rte-source-border`, which can be overridden). On the Paper (`paper`), the light sheet stays under the dark field: the sheet's contents change, not the sheet itself. The corner radius is as for code, the font is monospace 13 px, as in `CodeView`; the padding is as for the Document area. On entry the height is at least the Document's height, then the field grows with its content and can be stretched vertically by hand. With `maxHeight` or `resizable` the field lives in the same scroll area as the Document (see the "Field height" section). Text selection in the field also comes from the dark theme for the current accent (`--selection-dark`), with the field's light text: the light theme's light selection was unreadable on the dark field.
|
|
1128
1128
|
|
|
1129
1129
|
**Applying — on exit, on losing focus and on reads.** The field's text goes through the Schema with the same parsing as an incoming `value` (everything not in the Schema is dropped — `script`, `on*` handlers, arbitrary `style` and `class`, `javascript:`; markup of disabled Tools is stripped, the text stays), and replaces the Document in **one edit** — one `Ctrl/⌘+Z` undo in the Document returns it to the state before applying. Applying is triggered by:
|
|
1130
1130
|
|
|
@@ -1123,7 +1123,7 @@ ARIA сетки — шаблон `grid` из APG: `role="grid"` → `row` → `g
|
|
|
1123
1123
|
|
|
1124
1124
|
**Что видно.** HTML отформатирован: Блок верхнего уровня — на своей строке, дети контейнеров Блоков (пункты списков, строки и ячейки таблицы, колонки Раскладки, части `figure`, пункт чек-листа) — с отступом в два пробела, содержимое Блока — на строке его тега (пробелы текста не меняются), содержимое `pre` — как есть. Форматирование без потерь: неизменённый текст при применении даёт тот же Документ. Пустой Документ открывается пустым полем, а не `<p></p>`. Подсветки синтаксиса нет.
|
|
1125
1125
|
|
|
1126
|
-
**Вид.** Поле **всегда тёмное, цветом кита**, а не палитрой подсветки синтаксиса Блока кода: в `dark` и `dim` — самая глубокая подложка темы с её текстом и рамкой, в `light` и на Листе `paper` — те же значения тёмной темы (переменные `--rte-source-background`, `--rte-source-foreground`, `--rte-source-border`, их можно перекрыть). Скругление — как у кода, шрифт — моноширинный 13 px, как у `CodeView`; отступы — как у области Документа. Высота при входе — не меньше высоты Документа, дальше поле растёт по содержимому и растягивается по вертикали вручную. С `maxHeight` или `resizable` поле живёт в той же области прокрутки, что и Документ (раздел «Высота поля»). Выделение текста в поле — тоже тёмной темы текущего акцента (`--selection-dark`) со светлым текстом поля: светлое выделение светлой темы на тёмном поле не читалось.
|
|
1126
|
+
**Вид.** Поле **всегда тёмное, цветом кита**, а не палитрой подсветки синтаксиса Блока кода: в `dark` и `dim` — самая глубокая подложка темы с её текстом и рамкой, в `light` и на Листе `paper` — те же значения тёмной темы (переменные `--rte-source-background`, `--rte-source-foreground`, `--rte-source-border`, их можно перекрыть). На Листе `paper` светлый лист остаётся под тёмным полем: меняется содержимое листа, а не сам лист. Скругление — как у кода, шрифт — моноширинный 13 px, как у `CodeView`; отступы — как у области Документа. Высота при входе — не меньше высоты Документа, дальше поле растёт по содержимому и растягивается по вертикали вручную. С `maxHeight` или `resizable` поле живёт в той же области прокрутки, что и Документ (раздел «Высота поля»). Выделение текста в поле — тоже тёмной темы текущего акцента (`--selection-dark`) со светлым текстом поля: светлое выделение светлой темы на тёмном поле не читалось.
|
|
1127
1127
|
|
|
1128
1128
|
**Применение — при выходе, уходе фокуса и чтении.** Текст поля проходит через Схему тем же разбором, что входящий `value` (всё, чего в Схеме нет, отбрасывается — `script`, обработчики `on*`, произвольные `style` и `class`, `javascript:`; разметка выключенных Инструментов снимается, текст остаётся), и заменяет Документ **одной правкой** — одна отмена `Ctrl/⌘+Z` в Документе возвращает его к состоянию до применения. Применение запускают:
|
|
1129
1129
|
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
---
|
|
2
|
+
component: MegaMenu
|
|
3
|
+
exports: [MegaMenu, MegaMenuCategory, MegaMenuGroup, MegaMenuLink, MegaMenuTrigger, MegaMenuButton]
|
|
4
|
+
category: navigation
|
|
5
|
+
status: stable
|
|
6
|
+
source: src/components/navigation/MegaMenu.tsx
|
|
7
|
+
story: src/components/navigation/MegaMenu.stories.tsx
|
|
8
|
+
sourceHash: 8e166f4b1ab7
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# MegaMenu
|
|
12
|
+
|
|
13
|
+
## Summary for AI
|
|
14
|
+
|
|
15
|
+
`MegaMenu` is an Amazon-style store catalog: a category column on the left and, next to the hovered
|
|
16
|
+
category, its showcase with columns of links and any content of your own. It is link navigation, not a command
|
|
17
|
+
menu: the markup follows the WAI-ARIA Disclosure Navigation pattern (`nav`, buttons with `aria-expanded`, real
|
|
18
|
+
`a` elements). Categories are `MegaMenuCategory` as direct children, columns are `MegaMenuGroup`, links are
|
|
19
|
+
`MegaMenuLink`. The same catalog opens as a dropdown overlay from a button: `MegaMenuTrigger` with
|
|
20
|
+
`MegaMenuButton` and an unchanged `MegaMenu`.
|
|
21
|
+
|
|
22
|
+
## When to use
|
|
23
|
+
|
|
24
|
+
- A catalog with ten or more sections, each with subsections in columns: a store, a marketplace, a help portal.
|
|
25
|
+
- The sections should be visible at once and the subsections should appear on hover, without taking the user
|
|
26
|
+
off the page.
|
|
27
|
+
- The showcase needs content of its own next to the links: a promo card, an image, a selection.
|
|
28
|
+
|
|
29
|
+
## When not to use
|
|
30
|
+
|
|
31
|
+
- For commands on an object ("Rename", "Delete"), use `Menu`: it holds actions, not navigation.
|
|
32
|
+
- For application navigation with a current section, use `SideNav`.
|
|
33
|
+
- For a deep hierarchy that expands in place, use `TreeView`.
|
|
34
|
+
- For two or three links with no subsections, use a plain list of links or `Tabs`.
|
|
35
|
+
|
|
36
|
+
## Minimal example
|
|
37
|
+
|
|
38
|
+
```tsx
|
|
39
|
+
import { MegaMenu, MegaMenuCategory, MegaMenuGroup, MegaMenuLink } from "@olddevs/ui";
|
|
40
|
+
|
|
41
|
+
<MegaMenu aria-label="Catalog">
|
|
42
|
+
<MegaMenuCategory id="computers" label="Computers" href="/computers">
|
|
43
|
+
<MegaMenuGroup title="Laptops" href="/computers/laptops">
|
|
44
|
+
<MegaMenuLink href="/computers/laptops/gaming">Gaming</MegaMenuLink>
|
|
45
|
+
<MegaMenuLink href="/computers/laptops/ultrabooks" current>
|
|
46
|
+
Ultrabooks
|
|
47
|
+
</MegaMenuLink>
|
|
48
|
+
</MegaMenuGroup>
|
|
49
|
+
</MegaMenuCategory>
|
|
50
|
+
<MegaMenuCategory id="deals" label="Deals of the day" href="/deals" />
|
|
51
|
+
</MegaMenu>;
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Props
|
|
55
|
+
|
|
56
|
+
`MegaMenu`:
|
|
57
|
+
|
|
58
|
+
| Prop | Default | Meaning |
|
|
59
|
+
| ------------------------------------------ | --------- | ----------------------------------------------------------------------------------------------------------------- |
|
|
60
|
+
| `aria-label` | — | The accessible name of the navigation. Required: on a page with several `nav` elements, the name tells them apart |
|
|
61
|
+
| `value` / `defaultValue` / `onValueChange` | `null` | The open category (its `id`) or `null`, controlled or uncontrolled |
|
|
62
|
+
| `showcaseWidth` | `"40rem"` | The width of the showcase, shared by all categories so that the catalog does not jump between them |
|
|
63
|
+
| `className` | — | Classes for the `nav`; the default width of the category column is `w-64` |
|
|
64
|
+
|
|
65
|
+
`MegaMenuCategory`: `id` is the key for `value`; `label` is the text in the category column and the name of the
|
|
66
|
+
showcase; `icon`; `href` or `link` is the address of the whole section; `disabled`; the children are the content of
|
|
67
|
+
the showcase. For a category with a showcase, the address becomes a title link at the top of the showcase; for a
|
|
68
|
+
category without children, the row in the category column is itself the link. `link` is a router link passed as an
|
|
69
|
+
empty element (`link={<Link href="/x" />}`), and the label moves inside it. It is a separate prop rather than
|
|
70
|
+
`asChild` because the children of a category are its showcase.
|
|
71
|
+
|
|
72
|
+
`MegaMenuGroup`: `title` is the title of the column and the name of its list; `href` turns the title into a link;
|
|
73
|
+
the children are `MegaMenuLink` elements, and each one is placed in its own list item.
|
|
74
|
+
|
|
75
|
+
`MegaMenuLink`: the usual `a` props, `icon`, `current` and `asChild`. `current` sets `aria-current="page"` and the
|
|
76
|
+
look of the current link. The kit does not work out the current page itself, because every router compares
|
|
77
|
+
addresses by its own rules. `asChild` renders the link as a router element:
|
|
78
|
+
`<MegaMenuLink asChild><Link href="/x">Label</Link></MegaMenuLink>`.
|
|
79
|
+
|
|
80
|
+
## Hover and the showcase
|
|
81
|
+
|
|
82
|
+
Hovering a category with the mouse opens its showcase at once, with no delay. Exactly one category is highlighted,
|
|
83
|
+
the one whose showcase is open: the highlight follows `aria-expanded`, not `:hover`. Hovering a category without a
|
|
84
|
+
showcase closes the open one, with the same caveat about aim as below.
|
|
85
|
+
|
|
86
|
+
The showcase closes 150 ms after the pointer has left both the category column and the showcase, so a brief
|
|
87
|
+
excursion past the edge does not reset the catalog. It also closes on a pointer press outside the catalog and when
|
|
88
|
+
focus leaves the catalog.
|
|
89
|
+
|
|
90
|
+
The content of a showcase is mounted only for the open category, so a catalog of a hundred links and images does
|
|
91
|
+
not load everything at once. The region itself is always there, hidden: the button's `aria-controls` points to it.
|
|
92
|
+
|
|
93
|
+
The showcase is a DOM descendant of its category, not a portal. That is why the Tab order runs "category, its
|
|
94
|
+
links, then on down the page", and why the showcase sits flush against the category column without any position
|
|
95
|
+
calculation. An ancestor with `overflow: hidden` clips it, so put the catalog where there is room beside it.
|
|
96
|
+
|
|
97
|
+
The showcase sits on the end side of the line: on the right, or on the left in right-to-left writing. If there is
|
|
98
|
+
not enough room there and there is enough on the other side, it moves to the other side. The kit measures the side
|
|
99
|
+
ahead of time and again when the window is resized, so the arrow key that points "toward the showcase" already
|
|
100
|
+
points to where the showcase will appear.
|
|
101
|
+
|
|
102
|
+
## Touch and narrow screens
|
|
103
|
+
|
|
104
|
+
Touch has no hover, so the touch itself (`click`) opens a category, without aim. A pointer whose `pointerType` is
|
|
105
|
+
"touch" or "pen" neither opens a category on hover nor closes the showcase when it leaves: a pen behaves like a
|
|
106
|
+
finger. Touching an open category again neither closes it nor goes anywhere. The showcase closes on a touch outside
|
|
107
|
+
the catalog or on Escape.
|
|
108
|
+
|
|
109
|
+
The mouse behaves as before: hover, aim and closing after 150 ms all remain while the screen is wide.
|
|
110
|
+
|
|
111
|
+
On a narrow screen, under 640px (the same breakpoint as `Menu` submenus and Editor submenus), there is no room beside
|
|
112
|
+
the category column for the showcase: the edge of the window would cut it off on the right. So the catalog works as a
|
|
113
|
+
drill-down:
|
|
114
|
+
|
|
115
|
+
- The category column takes the full width, and category labels wrap instead of being truncated.
|
|
116
|
+
- An open category (by touch, click, Enter or Space) replaces the category column with its showcase. The showcase
|
|
117
|
+
starts with a "Back" row that shows the category name. If the category has a link of its own, the link shows the
|
|
118
|
+
name, on the row below, instead of the "Back" row. Below that, the columns of links follow, one under another.
|
|
119
|
+
- "Back" returns the category column and puts focus on the category the person came from. Escape inside the showcase
|
|
120
|
+
works like "Back".
|
|
121
|
+
- When you drill down, focus moves to "Back": the category button is hidden along with the category column, and focus
|
|
122
|
+
left on it would be lost. In the showcase on a narrow screen, the arrow key toward the category column does
|
|
123
|
+
nothing, because the column is not beside it.
|
|
124
|
+
- There is no aim on a narrow screen: hovering with the mouse does not open a category, and moving the mouse away does
|
|
125
|
+
not cancel the drill-down. Replacing the column under the cursor would pull it out from under the person's hand.
|
|
126
|
+
- The markup stays on the disclosure pattern: the category button keeps `aria-expanded` and `aria-controls` pointing
|
|
127
|
+
to the region on screen (the button itself is hidden during the drill-down), and the region is named after the
|
|
128
|
+
category.
|
|
129
|
+
|
|
130
|
+
The "Back" label comes from the message catalog: the key is `megaMenu.back`, with the default "Back"; the Russian
|
|
131
|
+
catalog supplies "Назад".
|
|
132
|
+
|
|
133
|
+
The kit reads the width through `matchMedia`, not through CSS, because the width determines the contents of the
|
|
134
|
+
markup (the category column is hidden), not just the look. Before hydration and on the server, the hook reports a wide
|
|
135
|
+
screen (ADR-0018): the server does not know the width, and the markup it produces is always the regular one. On a phone,
|
|
136
|
+
after hydration, a showcase opened by `defaultValue` is re-rendered once as a drill-down. On a phone the `nav` takes
|
|
137
|
+
the full width through the `max-sm:w-full` class; a `w-*` class from `className` applies on a wide screen.
|
|
138
|
+
|
|
139
|
+
## Aim
|
|
140
|
+
|
|
141
|
+
On its way from a category to its showcase, the pointer cuts diagonally and brushes against the neighboring
|
|
142
|
+
categories. If hover opened them at once, the showcase would change under the person's hand, and the links would be
|
|
143
|
+
out of reach. Aim watches where the pointer is heading: while it moves toward the open showcase, a neighboring
|
|
144
|
+
category does not take over the hover.
|
|
145
|
+
|
|
146
|
+
- The direction of the pointer's last step is compared with the wedge from its previous position to the two corners
|
|
147
|
+
of the showcase's near edge: Kamens's triangle from "Where it comes from". A step into the wedge means the pointer
|
|
148
|
+
is aiming.
|
|
149
|
+
- One movement off course is forgiven; two in a row are not, and then the category under the pointer opens.
|
|
150
|
+
- If the pointer stops for 300 ms, the category under it opens even if it was aiming. The menu does not get stuck.
|
|
151
|
+
- When the pointer reaches the showcase, the deferred switch is canceled.
|
|
152
|
+
- Clicking a category opens it at once, bypassing aim. The keyboard knows nothing about aim.
|
|
153
|
+
- Mouse only, and only on a wide screen: touch and pen open a category at once, and a narrow screen has no aim at all.
|
|
154
|
+
- The first hover, while there is no showcase yet, opens the category with no delay at all: there is nothing to aim at.
|
|
155
|
+
|
|
156
|
+
The model is the same as for react-aria submenus (`Menu` with `SubmenuTrigger`), so that the two menus of the kit
|
|
157
|
+
behave alike. There are two differences. The category switch is deferred, not suppressed with `pointer-events: none`
|
|
158
|
+
on the category column, since that would lose the highlight under the pointer and the click on a neighboring category.
|
|
159
|
+
And the stop time is 300 ms, as in Kamens's plugin (more on it in "Where it comes from"), not a second, as in react-aria: its submenu is short, while the
|
|
160
|
+
category column of a catalog gets scrolled through.
|
|
161
|
+
|
|
162
|
+
## Where it comes from
|
|
163
|
+
|
|
164
|
+
The technique comes from Amazon. By 2013 the "Shop by Department" menu on amazon.com already worked like this: a
|
|
165
|
+
column of departments on the left, a large panel on the right, and switching with no delay at all, while the pointer
|
|
166
|
+
could cut diagonally toward the panel without knocking it away. Ben Kamens worked out how it does that.
|
|
167
|
+
|
|
168
|
+
- **6 March 2013**: Ben Kamens, a developer at Khan Academy, publishes the analysis "Breaking down Amazon's mega
|
|
169
|
+
dropdown". He shows that Amazon does not slow the opening down with a delay, as most dropdown menus do, but
|
|
170
|
+
follows the direction of the pointer: while it stays inside the triangle between the pointer and the corners of the
|
|
171
|
+
panel, the submenu does not change. Khan Academy puts the technique into its new "Learn" menu.
|
|
172
|
+
- **March 2013**: Kamens publishes the `jQuery-menu-aim` plugin on GitHub: the triangle, a tolerance near the corners
|
|
173
|
+
and a 300 ms delay for a pointer that has stopped.
|
|
174
|
+
- **7 March 2013**: a retelling of the article appears on Habr, from which the technique spread across the Russian-speaking web.
|
|
175
|
+
- **After that**: the technique moves into libraries: the "safe polygon" `safePolygon()` in Floating UI, the "grace
|
|
176
|
+
area" of submenus in Radix, the "safe triangle" `useSafelyMouseToSubmenu` in react-aria. Submenus shipped in
|
|
177
|
+
react-aria as an alpha on 13 February 2024 (v1.1.0) and became stable on 1 May 2024 (v1.2.0).
|
|
178
|
+
- **2026**: `MegaMenu` in `@olddevs/ui`: the react-aria model and Kamens's pause.
|
|
179
|
+
|
|
180
|
+
Primary sources:
|
|
181
|
+
[Ben Kamens's article](https://bjk5.com/post/44698559168/breaking-down-amazons-mega-dropdown),
|
|
182
|
+
[the `jQuery-menu-aim` repository](https://github.com/kamens/jQuery-menu-aim),
|
|
183
|
+
[a retelling on Habr, in Russian](https://habr.com/ru/articles/171905/).
|
|
184
|
+
|
|
185
|
+
## Keyboard and names
|
|
186
|
+
|
|
187
|
+
- The category column is a single Tab stop. The Up and Down arrows, Home and End move through the categories;
|
|
188
|
+
disabled ones are skipped. When the user comes back with Tab, they land on the category they were on.
|
|
189
|
+
- Enter, Space and the arrow toward the showcase open it and put focus on the first link. On a category that is a
|
|
190
|
+
link, Enter follows it.
|
|
191
|
+
- Inside the showcase, plain Tab works. The arrow toward the category column returns focus to the category, and so
|
|
192
|
+
does Escape, which also closes the showcase. Tab past the last link moves on down the page and closes the showcase.
|
|
193
|
+
- While the showcase is open, it follows the arrow-key focus the way it follows hover.
|
|
194
|
+
- The arrow "toward the showcase" is the one that points to where the showcase sits: in right-to-left writing and at
|
|
195
|
+
the edge of the screen, the arrows swap places.
|
|
196
|
+
- A screen reader hears a navigation with the name from `aria-label`, the categories as expand/collapse buttons, the
|
|
197
|
+
showcase as a region named after the category, and a column as a list named after its title.
|
|
198
|
+
|
|
199
|
+
## Dropdown mode
|
|
200
|
+
|
|
201
|
+
A catalog in a page header is opened with a "Catalog" button rather than kept on the page. The markup of the
|
|
202
|
+
categories is the same as in the embedded mode; only the wrapper changes: put `MegaMenu` into `MegaMenuTrigger`
|
|
203
|
+
as the second child, after the `MegaMenuButton`.
|
|
204
|
+
|
|
205
|
+
```tsx
|
|
206
|
+
import {
|
|
207
|
+
MegaMenu,
|
|
208
|
+
MegaMenuButton,
|
|
209
|
+
MegaMenuCategory,
|
|
210
|
+
MegaMenuGroup,
|
|
211
|
+
MegaMenuLink,
|
|
212
|
+
MegaMenuTrigger,
|
|
213
|
+
} from "@olddevs/ui";
|
|
214
|
+
import { ListIcon } from "@olddevs/ui/icons";
|
|
215
|
+
|
|
216
|
+
<MegaMenuTrigger>
|
|
217
|
+
<MegaMenuButton icon={<ListIcon size={16} />}>Catalog</MegaMenuButton>
|
|
218
|
+
<MegaMenu aria-label="Catalog">
|
|
219
|
+
<MegaMenuCategory id="computers" label="Computers" href="/computers">
|
|
220
|
+
<MegaMenuGroup title="Laptops">
|
|
221
|
+
<MegaMenuLink href="/computers/laptops/gaming">Gaming</MegaMenuLink>
|
|
222
|
+
</MegaMenuGroup>
|
|
223
|
+
</MegaMenuCategory>
|
|
224
|
+
</MegaMenu>
|
|
225
|
+
</MegaMenuTrigger>;
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
`MegaMenuTrigger`: `open`, `defaultOpen` and `onOpenChange` control whether the overlay is open, controlled or
|
|
229
|
+
uncontrolled, as with other overlays of the kit. The first child is the button, and all the others go into the
|
|
230
|
+
overlay. Children are sorted by position, so you can wrap the button in a component of your own and move `MegaMenu`
|
|
231
|
+
into one. `MegaMenuButton` accepts the kit's button look (`variant`, `tone`, `size`, `iconOnly`, `selected`), `icon`,
|
|
232
|
+
`disabled`, `aria-label` and `className`; the look is the same as for `MenuButton`.
|
|
233
|
+
|
|
234
|
+
- **Opening.** Click, Enter, Space and the Down arrow on the button. Hover does not open the catalog: it should not
|
|
235
|
+
jump out at a stray mouse movement.
|
|
236
|
+
- **Focus.** On opening, focus goes to the first available category (or, if one is already open through `value` or
|
|
237
|
+
`defaultValue`, to that one), and the showcase stays closed until a category is chosen. After that the category column
|
|
238
|
+
and the showcase work as in the embedded mode.
|
|
239
|
+
- **Closing.** Escape on a category, a press outside the catalog, a second click on the button, following any link (a
|
|
240
|
+
category, a column title, a `MegaMenuLink`, router links included) and Tab past the last element.
|
|
241
|
+
The first Escape inside a showcase closes only the showcase and returns focus to its category; the next one closes
|
|
242
|
+
the overlay.
|
|
243
|
+
- **Returning focus.** Focus returns to the button on Escape and on a second click. After Tab past the last element,
|
|
244
|
+
focus moves on down the page, past the button; Shift+Tab before the first element returns it to the button. After a
|
|
245
|
+
press outside the catalog, focus stays where the user pressed.
|
|
246
|
+
- **Screen reader.** The button is a disclosure with `aria-expanded` and `aria-controls` and no `aria-haspopup`: the
|
|
247
|
+
overlay is neither a menu nor a dialog, but the same navigation with links. The overlay has no `dialog` role.
|
|
248
|
+
- **Layers.** The overlay sits on the `popover` layer: above the scrim of an open `Dialog`, below the confirmation.
|
|
249
|
+
Inside a dialog, the first Escape closes the catalog and the next one closes the dialog. If focus is in an open
|
|
250
|
+
showcase, the very first Escape closes only the showcase and returns focus to its category.
|
|
251
|
+
- **Height.** The overlay is no taller than the visible area from the button to the edge of the window. The category
|
|
252
|
+
column and the showcase each scroll within themselves (`overscroll-contain`), not the overlay as a whole: otherwise the
|
|
253
|
+
overlay's frame would clip the showcase, which stands beside the category column. On iOS the height is capped at
|
|
254
|
+
`min(24rem, 60dvh)`, like the `Menu` panel.
|
|
255
|
+
- **Appearance.** Smooth, on the kit's motion scale; with `prefers-reduced-motion`, no animation.
|
|
256
|
+
- **Server.** The server renders a closed button; the overlay is mounted in a portal after opening.
|
|
257
|
+
|
|
258
|
+
## Related sources and tests
|
|
259
|
+
|
|
260
|
+
- Implementation: `src/components/navigation/MegaMenu.tsx`; aim is in `src/components/navigation/useMenuAim.ts`.
|
|
261
|
+
- Tests: `tests/mega-menu.test.tsx` covers roles and `aria-controls`, hover and mounting only the open
|
|
262
|
+
showcase, closing with a delay, roving tabindex, Enter, Escape and the arrows, Tab past the last link,
|
|
263
|
+
a category that is a link, a disabled category, `current`, `asChild` and `link`, the controlled value, a press
|
|
264
|
+
outside the catalog and server rendering; `tests/mega-menu-aim.test.tsx` covers aim on mocked geometry and fake
|
|
265
|
+
time, and the flip at the edge; `tests/mega-menu-touch.test.tsx` covers touch and pen, a mocked `matchMedia`,
|
|
266
|
+
the drill-down in place of the category column, "Back" and focus, Escape, labels from the message catalog and server
|
|
267
|
+
rendering; the browser test `tests-visual/mega-menu.spec.ts` uses a real mouse moving diagonally and down
|
|
268
|
+
the category column.
|
|
269
|
+
- Dropdown mode: `tests/mega-menu-dropdown.test.tsx` covers opening by click and keys with focus on the first
|
|
270
|
+
category, every way of closing and returning focus, Escape in the showcase, `open` / `defaultOpen` / `onOpenChange`, the
|
|
271
|
+
`popover` layer, the order of Escape inside a `Dialog` and server rendering.
|
|
272
|
+
- Story: `src/components/navigation/MegaMenu.stories.tsx`, including `DropdownInTopBar`, a mega menu in a top bar; at phone
|
|
273
|
+
width, `PhoneColumn` and `PhoneDrillDown`.
|