@foxford/navigation-ui 1.0.2 → 1.1.1

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 (67) hide show
  1. package/README.mdx +58 -0
  2. package/footer/atoms/logo-sk/index.js +1 -1
  3. package/footer/atoms/social-link/index.d.ts +3 -1
  4. package/footer/atoms/social-link/index.d.ts.map +1 -1
  5. package/footer/atoms/social-link/index.js +9 -0
  6. package/footer/contacts-column.d.ts.map +1 -1
  7. package/footer/contacts-column.js +10 -1
  8. package/footer/footer.d.ts.map +1 -1
  9. package/footer/footer.js +15 -6
  10. package/footer/molecules/app-info/index.js +1 -1
  11. package/footer/molecules/footer-menu/index.d.ts +3 -1
  12. package/footer/molecules/footer-menu/index.d.ts.map +1 -1
  13. package/footer/molecules/footer-menu/index.js +3 -0
  14. package/footer/molecules/geoposition/index.js +1 -0
  15. package/footer/types.d.ts +16 -0
  16. package/footer/types.d.ts.map +1 -1
  17. package/header/atoms/action-button/index.d.ts +8 -1
  18. package/header/atoms/action-button/index.d.ts.map +1 -1
  19. package/header/atoms/action-button/index.js +65 -16
  20. package/header/atoms/back-button/index.d.ts.map +1 -1
  21. package/header/atoms/back-button/index.js +24 -3
  22. package/header/atoms/bonus-button/index.d.ts.map +1 -1
  23. package/header/atoms/bonus-button/index.js +1 -0
  24. package/header/atoms/close-button/index.d.ts.map +1 -1
  25. package/header/atoms/close-button/index.js +1 -0
  26. package/header/atoms/list-title/index.d.ts.map +1 -1
  27. package/header/atoms/list-title/index.js +2 -0
  28. package/header/atoms/logout-button/index.d.ts.map +1 -1
  29. package/header/atoms/logout-button/index.js +1 -0
  30. package/header/atoms/user-profile/index.d.ts.map +1 -1
  31. package/header/atoms/user-profile/index.js +54 -29
  32. package/header/molecules/cart-button/index.d.ts +2 -0
  33. package/header/molecules/cart-button/index.d.ts.map +1 -1
  34. package/header/molecules/cart-button/index.js +6 -1
  35. package/header/molecules/container/index.d.ts +3 -1
  36. package/header/molecules/container/index.d.ts.map +1 -1
  37. package/header/molecules/container/index.js +2 -0
  38. package/header/molecules/externat-buttons/index.d.ts.map +1 -1
  39. package/header/molecules/externat-buttons/index.js +28 -6
  40. package/header/molecules/menu/index.d.ts.map +1 -1
  41. package/header/molecules/menu/index.js +84 -64
  42. package/header/molecules/menu-button/index.d.ts.map +1 -1
  43. package/header/molecules/menu-button/index.js +3 -0
  44. package/header/molecules/oneclick-menu/index.js +3 -0
  45. package/header/molecules/profile-menu/index.d.ts.map +1 -1
  46. package/header/molecules/profile-menu/index.js +28 -21
  47. package/header/molecules/segment-list/index.d.ts.map +1 -1
  48. package/header/molecules/segment-list/index.js +26 -3
  49. package/header/molecules/support-button/index.d.ts.map +1 -1
  50. package/header/molecules/support-button/index.js +5 -0
  51. package/header/molecules/user-panel/index.d.ts.map +1 -1
  52. package/header/molecules/user-panel/index.js +3 -1
  53. package/header/navigation.d.ts.map +1 -1
  54. package/header/navigation.js +2 -0
  55. package/header/types.d.ts +6 -0
  56. package/header/types.d.ts.map +1 -1
  57. package/package.json +4 -4
  58. package/shared/a11y.d.ts +39 -0
  59. package/shared/a11y.d.ts.map +1 -0
  60. package/shared/a11y.js +96 -0
  61. package/shared/constants.d.ts +2 -0
  62. package/shared/constants.d.ts.map +1 -1
  63. package/shared/constants.js +2 -0
  64. package/shared/json-ld.d.ts +6 -0
  65. package/shared/json-ld.d.ts.map +1 -0
  66. package/shared/json-ld.js +18 -0
  67. package/shared/theme.d.ts.map +1 -1
@@ -1,5 +1,25 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __spreadValues = (a, b) => {
9
+ for (var prop in b || (b = {}))
10
+ if (__hasOwnProp.call(b, prop))
11
+ __defNormalProp(a, prop, b[prop]);
12
+ if (__getOwnPropSymbols)
13
+ for (var prop of __getOwnPropSymbols(b)) {
14
+ if (__propIsEnum.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ }
17
+ return a;
18
+ };
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
1
20
  import { Text } from "@foxford/ui";
2
21
  import { Root, Avatar, Content, Name, UserName, Chevron } from "./styled.js";
22
+ import { buttonProps } from "../../../shared/a11y.js";
3
23
  import { SELECTOR_IDS } from "../../../shared/constants.js";
4
24
  import { jsxs, jsx } from "preact/jsx-runtime";
5
25
  function UserProfile({
@@ -9,37 +29,42 @@ function UserProfile({
9
29
  onClick,
10
30
  role
11
31
  }) {
12
- return jsxs(Root, {
13
- id: SELECTOR_IDS.TOP_MENU_PROFILE,
14
- onClick,
15
- children: [jsx(Avatar, {
16
- preset: "brand",
17
- size: "l",
18
- src: avatarUrl,
19
- text: name
20
- }), jsxs(Content, {
21
- children: [jsxs(Name, {
22
- children: [jsx(UserName, {
23
- lineHeight: "s",
24
- size: 14,
25
- weight: "bold",
26
- whiteSpace: "nowrap",
27
- children: name
28
- }), jsx(Text, {
29
- color: "content-onmain-secondary",
30
- lineHeight: "s",
31
- size: 12,
32
- whiteSpace: "nowrap",
33
- children: role
32
+ return (
33
+ // Кнопка раскрытия меню профиля: без роли и `tabIndex` до неё не дойти с клавиатуры.
34
+ jsxs(Root, __spreadProps(__spreadValues({
35
+ "aria-expanded": active,
36
+ id: SELECTOR_IDS.TOP_MENU_PROFILE,
37
+ onClick
38
+ }, buttonProps(onClick)), {
39
+ children: [jsx(Avatar, {
40
+ preset: "brand",
41
+ size: "l",
42
+ src: avatarUrl,
43
+ text: name
44
+ }), jsxs(Content, {
45
+ children: [jsxs(Name, {
46
+ children: [jsx(UserName, {
47
+ lineHeight: "s",
48
+ size: 14,
49
+ weight: "bold",
50
+ whiteSpace: "nowrap",
51
+ children: name
52
+ }), jsx(Text, {
53
+ color: "content-onmain-secondary",
54
+ lineHeight: "s",
55
+ size: 12,
56
+ whiteSpace: "nowrap",
57
+ children: role
58
+ })]
59
+ }), jsx(Chevron, {
60
+ marginLeft: 8,
61
+ name: "chevronUp",
62
+ rotate: active ? "0deg" : "-180deg",
63
+ size: 12
34
64
  })]
35
- }), jsx(Chevron, {
36
- marginLeft: 8,
37
- name: "chevronUp",
38
- rotate: active ? "0deg" : "-180deg",
39
- size: 12
40
65
  })]
41
- })]
42
- });
66
+ }))
67
+ );
43
68
  }
44
69
  export {
45
70
  UserProfile
@@ -5,5 +5,7 @@ export interface CartButtonProps {
5
5
  onClick?: () => void;
6
6
  showText?: boolean;
7
7
  }
8
+ /** Имя корзины для скринридера: точка-маркер на ней значит «есть товары», а не «новое». */
9
+ export declare function cartLabel(title: string, count: number): string;
8
10
  export declare function CartButton({ active, cartItemsCount, filled, onClick, showText, }: CartButtonProps): import("preact").JSX.Element;
9
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/header/molecules/cart-button/index.tsx"],"names":[],"mappings":"AAGA,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,wBAAgB,UAAU,CAAC,EACzB,MAAc,EACd,cAAkB,EAClB,MAAc,EACd,OAAO,EACP,QAAgB,GACjB,EAAE,eAAe,gCAcjB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/header/molecules/cart-button/index.tsx"],"names":[],"mappings":"AAGA,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,2FAA2F;AAC3F,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED,wBAAgB,UAAU,CAAC,EACzB,MAAc,EACd,cAAkB,EAClB,MAAc,EACd,OAAO,EACP,QAAgB,GACjB,EAAE,eAAe,gCAejB"}
@@ -1,6 +1,9 @@
1
1
  import { Cart } from "./styled.js";
2
2
  import { SELECTOR_IDS } from "../../../shared/constants.js";
3
3
  import { jsx } from "preact/jsx-runtime";
4
+ function cartLabel(title, count) {
5
+ return count > 0 ? `${title}, товаров: ${String(count)}` : title;
6
+ }
4
7
  function CartButton({
5
8
  active = false,
6
9
  cartItemsCount = 0,
@@ -11,6 +14,7 @@ function CartButton({
11
14
  return jsx(Cart, {
12
15
  active,
13
16
  $filled: filled,
17
+ "aria-label": cartLabel("Корзина", cartItemsCount),
14
18
  hideTextInMobile: true,
15
19
  icon: "cart",
16
20
  id: SELECTOR_IDS.TOP_MENU_CART,
@@ -21,5 +25,6 @@ function CartButton({
21
25
  });
22
26
  }
23
27
  export {
24
- CartButton
28
+ CartButton,
29
+ cartLabel
25
30
  };
@@ -7,9 +7,11 @@ export interface NavigationContainerProps {
7
7
  children: ReactNode;
8
8
  /** Влияет на броню высоты до замера: одноклик-меню — это ещё одна строка шапки. */
9
9
  hasOneClickMenu?: boolean;
10
+ /** Объявить контейнер ориентиром `banner` — см. `NavigationProps.landmarks`. */
11
+ landmark?: boolean;
10
12
  /** Клик по затемнению закрывает открытое меню — как в легаси. */
11
13
  onBackgroundClick?: () => void;
12
14
  showBackground: boolean;
13
15
  }
14
- export declare function Container({ aboveMenu, belowMenu, children, hasOneClickMenu, onBackgroundClick, showBackground, }: NavigationContainerProps): import("preact").JSX.Element;
16
+ export declare function Container({ aboveMenu, belowMenu, children, hasOneClickMenu, landmark, onBackgroundClick, showBackground, }: NavigationContainerProps): import("preact").JSX.Element;
15
17
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/header/molecules/container/index.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,MAAM,WAAW,wBAAwB;IACvC,iFAAiF;IACjF,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,qBAAqB;IACrB,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,QAAQ,EAAE,SAAS,CAAA;IACnB,mFAAmF;IACnF,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,iEAAiE;IACjE,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAA;IAC9B,cAAc,EAAE,OAAO,CAAA;CACxB;AAED,wBAAgB,SAAS,CAAC,EACxB,SAAS,EACT,SAAS,EACT,QAAQ,EACR,eAAuB,EACvB,iBAAiB,EACjB,cAAc,GACf,EAAE,wBAAwB,gCAwC1B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/header/molecules/container/index.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,MAAM,WAAW,wBAAwB;IACvC,iFAAiF;IACjF,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,qBAAqB;IACrB,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,QAAQ,EAAE,SAAS,CAAA;IACnB,mFAAmF;IACnF,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,gFAAgF;IAChF,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,iEAAiE;IACjE,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAA;IAC9B,cAAc,EAAE,OAAO,CAAA;CACxB;AAED,wBAAgB,SAAS,CAAC,EACxB,SAAS,EACT,SAAS,EACT,QAAQ,EACR,eAAuB,EACvB,QAAgB,EAChB,iBAAiB,EACjB,cAAc,GACf,EAAE,wBAAwB,gCAyC1B"}
@@ -7,6 +7,7 @@ function Container({
7
7
  belowMenu,
8
8
  children,
9
9
  hasOneClickMenu = false,
10
+ landmark = false,
10
11
  onBackgroundClick,
11
12
  showBackground
12
13
  }) {
@@ -26,6 +27,7 @@ function Container({
26
27
  $showBackground: showBackground,
27
28
  $underlayHeight: underlayHeight,
28
29
  id: SELECTOR_IDS.NAVIGATION,
30
+ role: landmark ? "banner" : void 0,
29
31
  onClick: (event) => {
30
32
  if (showBackground && event.target === event.currentTarget) onBackgroundClick == null ? void 0 : onBackgroundClick();
31
33
  },
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/header/molecules/externat-buttons/index.tsx"],"names":[],"mappings":"AAUA,MAAM,WAAW,oBAAoB;IACnC,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,eAAe,CAAC,EAAE,MAAM,IAAI,CAAA;IAC5B,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAA;CAC/B;AAED,wBAAgB,eAAe,CAAC,EAC9B,cAAc,EACd,MAAc,EACd,eAAe,EACf,iBAAiB,GAClB,EAAE,oBAAoB,gCA0BtB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/header/molecules/externat-buttons/index.tsx"],"names":[],"mappings":"AAWA,MAAM,WAAW,oBAAoB;IACnC,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,eAAe,CAAC,EAAE,MAAM,IAAI,CAAA;IAC5B,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAA;CAC/B;AAED,wBAAgB,eAAe,CAAC,EAC9B,cAAc,EACd,MAAc,EACd,eAAe,EACf,iBAAiB,GAClB,EAAE,oBAAoB,gCA8BtB"}
@@ -1,4 +1,24 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __spreadValues = (a, b) => {
9
+ for (var prop in b || (b = {}))
10
+ if (__hasOwnProp.call(b, prop))
11
+ __defNormalProp(a, prop, b[prop]);
12
+ if (__getOwnPropSymbols)
13
+ for (var prop of __getOwnPropSymbols(b)) {
14
+ if (__propIsEnum.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ }
17
+ return a;
18
+ };
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
1
20
  import { ExternatButtonsMobile, DesktopOnlyButton, CallBackButtonMobile, FreeAccessButtonMobile, ExternatButtonsDesktop, CallBackButtonDesktop, FreeAccessButtonDesktop } from "./styled.js";
21
+ import { buttonProps } from "../../../shared/a11y.js";
2
22
  import { jsxs, jsx } from "preact/jsx-runtime";
3
23
  function ExternatButtons({
4
24
  freeAccessLink,
@@ -9,10 +29,11 @@ function ExternatButtons({
9
29
  if (mobile) {
10
30
  return jsxs(ExternatButtonsMobile, {
11
31
  children: [jsx(DesktopOnlyButton, {
12
- children: jsx(CallBackButtonMobile, {
13
- onClick: onCallbackClick,
32
+ children: jsx(CallBackButtonMobile, __spreadProps(__spreadValues({
33
+ onClick: onCallbackClick
34
+ }, buttonProps(onCallbackClick)), {
14
35
  children: "Обратный звонок"
15
- })
36
+ }))
16
37
  }), freeAccessLink && jsx(FreeAccessButtonMobile, {
17
38
  href: freeAccessLink,
18
39
  onClick: onFreeAccessClick,
@@ -21,10 +42,11 @@ function ExternatButtons({
21
42
  });
22
43
  }
23
44
  return jsxs(ExternatButtonsDesktop, {
24
- children: [jsx(CallBackButtonDesktop, {
25
- onClick: onCallbackClick,
45
+ children: [jsx(CallBackButtonDesktop, __spreadProps(__spreadValues({
46
+ onClick: onCallbackClick
47
+ }, buttonProps(onCallbackClick)), {
26
48
  children: "Обратный звонок"
27
- }), freeAccessLink && jsx(FreeAccessButtonDesktop, {
49
+ })), freeAccessLink && jsx(FreeAccessButtonDesktop, {
28
50
  href: freeAccessLink,
29
51
  onClick: onFreeAccessClick,
30
52
  children: "Бесплатный доступ"
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/header/molecules/menu/index.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAErD,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,eAAe,CAAA;IAC3B,uBAAuB,CAAC,EAAE,OAAO,CAAA;IACjC,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAA;IAC9B,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IAC7C,IAAI,EAAE,OAAO,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,WAAW,EAAE,CAAA;IACvB,SAAS,CAAC,EAAE,IAAI,GAAG,MAAM,CAAA;CAC1B;AAKD,wBAAgB,IAAI,CAAC,EACnB,UAAU,EACV,uBAA+B,EAC/B,OAAe,EACf,OAAO,EACP,iBAAiB,EACjB,kBAAkB,EAClB,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,SAAgB,GACjB,EAAE,SAAS,gCA8HX;AAED,YAAY,EAAE,QAAQ,EAAE,gBAAgB,EAAE,WAAW,EAAE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/header/molecules/menu/index.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAErD,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,eAAe,CAAA;IAC3B,uBAAuB,CAAC,EAAE,OAAO,CAAA;IACjC,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAA;IAC9B,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IAC7C,IAAI,EAAE,OAAO,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,WAAW,EAAE,CAAA;IACvB,SAAS,CAAC,EAAE,IAAI,GAAG,MAAM,CAAA;CAC1B;AAQD,wBAAgB,IAAI,CAAC,EACnB,UAAU,EACV,uBAA+B,EAC/B,OAAe,EACf,OAAO,EACP,iBAAiB,EACjB,kBAAkB,EAClB,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,SAAgB,GACjB,EAAE,SAAS,gCAoJX;AAED,YAAY,EAAE,QAAQ,EAAE,gBAAgB,EAAE,WAAW,EAAE,CAAA"}
@@ -19,6 +19,7 @@ import { Media, Spinner } from "@foxford/ui";
19
19
  import { Root, Inner, Top, Logo, Sidebar } from "./panel-styled.js";
20
20
  import { SegmentContent } from "./segment-content.js";
21
21
  import { BodyScrollLock, SpinnerWrapper, Content, ContentControl, SegmentPane, Bottom } from "./styled.js";
22
+ import { useReturnFocus, useFocusOnKeyboardOpen, segmentPaneId } from "../../../shared/a11y.js";
22
23
  import { SELECTOR_IDS } from "../../../shared/constants.js";
23
24
  import { BackButton } from "../../atoms/back-button/index.js";
24
25
  import { CloseButton } from "../../atoms/close-button/index.js";
@@ -27,6 +28,7 @@ import { AdaptiveButton } from "../adaptive-button/index.js";
27
28
  import { EntryPanel } from "../entry-panel/index.js";
28
29
  import { SegmentList } from "../segment-list/index.js";
29
30
  import { jsx, jsxs, Fragment } from "preact/jsx-runtime";
31
+ const FIRST_SEGMENT = `#${SELECTOR_IDS.SEGMENT_LIST} [role="button"]`;
30
32
  function Menu({
31
33
  entryPanel,
32
34
  isOnboardingButtonShown = false,
@@ -43,6 +45,8 @@ function Menu({
43
45
  const [selectedSegmentId, setSelectedSegmentId] = useState(void 0);
44
46
  const [wasOpen, setWasOpen] = useState(open);
45
47
  const [measuredTop, setMeasuredTop] = useState(null);
48
+ useReturnFocus(open, SELECTOR_IDS.MENU, SELECTOR_IDS.MENU_BUTTON);
49
+ useFocusOnKeyboardOpen(open, SELECTOR_IDS.MENU_BUTTON, FIRST_SEGMENT);
46
50
  if (open !== wasOpen) {
47
51
  setWasOpen(open);
48
52
  if (!open) {
@@ -82,81 +86,97 @@ function Menu({
82
86
  document.addEventListener("keydown", onKeyDown);
83
87
  return () => document.removeEventListener("keydown", onKeyDown);
84
88
  }, [open, onClose]);
85
- return jsx(Root, {
86
- $isMenuOpen: open,
87
- $isOnboardingButtonShown: isOnboardingButtonShown,
88
- $top: topOffset != null ? topOffset : measuredTop,
89
- children: jsxs(Inner, {
89
+ return (
90
+ // Большое меню — ориентир `navigation`: закрытое оно спрятано `visibility: hidden`, и
91
+ // скринридер его вместе с ориентиром не видит, а открытое — видит сразу по имени.
92
+ jsx(Root, {
90
93
  $isMenuOpen: open,
91
- children: [jsx(Media, {
92
- max: "S",
93
- children: jsx(Fragment, {
94
- children: open && jsxs(Fragment, {
95
- children: [jsx(BodyScrollLock, {}), jsxs(Top, {
96
- children: [jsx(Logo, {
97
- origin
98
- }), jsx(EntryPanel, __spreadValues({}, entryPanel))]
99
- })]
100
- })
101
- })
102
- }), loading ? jsx(SpinnerWrapper, {
94
+ $isOnboardingButtonShown: isOnboardingButtonShown,
95
+ $top: topOffset != null ? topOffset : measuredTop,
96
+ "aria-label": "Меню",
97
+ id: SELECTOR_IDS.MENU,
98
+ role: "navigation",
99
+ children: jsxs(Inner, {
103
100
  $isMenuOpen: open,
104
- children: jsx(Spinner, {
105
- size: "l"
106
- })
107
- }) : jsxs(Fragment, {
108
- children: [jsx(Sidebar, {
101
+ children: [jsx(Media, {
102
+ max: "S",
103
+ children: jsx(Fragment, {
104
+ children: open && jsxs(Fragment, {
105
+ children: [jsx(BodyScrollLock, {}), jsxs(Top, {
106
+ children: [jsx(Logo, {
107
+ origin
108
+ }), jsx(EntryPanel, __spreadValues({}, entryPanel))]
109
+ })]
110
+ })
111
+ })
112
+ }), loading ? jsx(SpinnerWrapper, {
109
113
  $isMenuOpen: open,
110
- $showSeparator: contentOpen || selectedSegmentId !== void 0,
111
- children: jsxs(Scrollbar, {
112
- children: [jsx(SegmentList, {
113
- onSelect: handleSegmentSelect,
114
- segments,
115
- selectedSegmentId
116
- }), jsx(Media, {
117
- min: "M",
114
+ "aria-label": "Меню загружается",
115
+ role: "status",
116
+ children: jsx(Spinner, {
117
+ size: "l"
118
+ })
119
+ }) : jsxs(Fragment, {
120
+ children: [jsx(Sidebar, {
121
+ $isMenuOpen: open,
122
+ $showSeparator: contentOpen || selectedSegmentId !== void 0,
123
+ children: jsxs(Scrollbar, {
124
+ children: [jsx(SegmentList, {
125
+ onSelect: handleSegmentSelect,
126
+ segments,
127
+ selectedSegmentId
128
+ }), jsx(Media, {
129
+ min: "M",
130
+ children: jsx(AdaptiveButton, {
131
+ onOnboardingClick,
132
+ show: isOnboardingButtonShown
133
+ })
134
+ })]
135
+ })
136
+ }), jsxs(Content, {
137
+ $isOpen: contentOpen,
138
+ children: [jsx(Media, {
139
+ max: "M",
140
+ children: jsxs(ContentControl, {
141
+ children: [jsx(BackButton, {
142
+ onClick: handleBack
143
+ }), jsx(Media, {
144
+ max: "S",
145
+ children: jsx(EntryPanel, __spreadValues({}, entryPanel))
146
+ })]
147
+ })
148
+ }), segments.map((segment) => (
149
+ // Панель — цель `aria-controls` кнопки сегмента. Невыбранные спрятаны
150
+ // `display: none`, а значит и для скринридера их нет.
151
+ jsx(SegmentPane, {
152
+ $hidden: segment.id !== selectedSegmentId,
153
+ "aria-label": segment.title,
154
+ id: segmentPaneId(segment.id),
155
+ role: "region",
156
+ children: jsx(SegmentContent, {
157
+ onItemClick: onSegmentItemClick,
158
+ segment
159
+ })
160
+ }, segment.id)
161
+ ))]
162
+ })]
163
+ }), jsx(Media, {
164
+ max: "S",
165
+ children: jsxs(Bottom, {
166
+ children: [jsx(Media, {
167
+ max: "XS",
118
168
  children: jsx(AdaptiveButton, {
119
169
  onOnboardingClick,
120
170
  show: isOnboardingButtonShown
121
171
  })
172
+ }), jsx(CloseButton, {
173
+ onClick: onClose
122
174
  })]
123
175
  })
124
- }), jsxs(Content, {
125
- $isOpen: contentOpen,
126
- children: [jsx(Media, {
127
- max: "M",
128
- children: jsxs(ContentControl, {
129
- children: [jsx(BackButton, {
130
- onClick: handleBack
131
- }), jsx(Media, {
132
- max: "S",
133
- children: jsx(EntryPanel, __spreadValues({}, entryPanel))
134
- })]
135
- })
136
- }), segments.map((segment) => jsx(SegmentPane, {
137
- $hidden: segment.id !== selectedSegmentId,
138
- children: jsx(SegmentContent, {
139
- onItemClick: onSegmentItemClick,
140
- segment
141
- })
142
- }, segment.id))]
143
176
  })]
144
- }), jsx(Media, {
145
- max: "S",
146
- children: jsxs(Bottom, {
147
- children: [jsx(Media, {
148
- max: "XS",
149
- children: jsx(AdaptiveButton, {
150
- onOnboardingClick,
151
- show: isOnboardingButtonShown
152
- })
153
- }), jsx(CloseButton, {
154
- onClick: onClose
155
- })]
156
- })
157
- })]
177
+ })
158
178
  })
159
- });
179
+ );
160
180
  }
161
181
  export {
162
182
  Menu
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/header/molecules/menu-button/index.tsx"],"names":[],"mappings":"AAGA,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,OAAO,CAAA;IACf,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB;AAED,wBAAgB,UAAU,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,eAAe,gCAU9D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/header/molecules/menu-button/index.tsx"],"names":[],"mappings":"AAGA,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,OAAO,CAAA;IACf,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB;AAED,wBAAgB,UAAU,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,eAAe,gCAmB9D"}
@@ -7,6 +7,9 @@ function MenuButton({
7
7
  }) {
8
8
  return jsxs(Root, {
9
9
  $active: active,
10
+ "aria-controls": SELECTOR_IDS.MENU,
11
+ "aria-expanded": active,
12
+ "aria-label": "Меню",
10
13
  id: SELECTOR_IDS.MENU_BUTTON,
11
14
  onClick,
12
15
  type: "button",
@@ -13,8 +13,11 @@ function OneClickMenu({
13
13
  return jsx(Root, {
14
14
  $hide: hide,
15
15
  $isMenuOpen: isMenuOpen,
16
+ "aria-label": "Меню в один клик",
17
+ role: "navigation",
16
18
  children: items.map((item) => item.id === selectedItemId ? jsx(CurrentItem, {
17
19
  $hide: hide,
20
+ "aria-current": "page",
18
21
  children: item.title
19
22
  }, item.id) : jsx(Item, {
20
23
  href: item.url,
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/header/molecules/profile-menu/index.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAA;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,WAAW,CAAC,EAAE,SAAS,CAAA;IACvB,4DAA4D;IAC5D,SAAS,CAAC,EAAE,oBAAoB,EAAE,CAAA;IAClC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,EAAE,oBAAoB,EAAE,CAAA;IAC7B,IAAI,EAAE,OAAO,CAAA;IACb,eAAe,CAAC,EAAE,SAAS,CAAA;IAC3B,eAAe,CAAC,EAAE,SAAS,CAAA;CAC5B;AAID,wBAAgB,WAAW,CAAC,EAC1B,WAAW,EACX,SAAc,EACd,WAAgB,EAChB,KAAK,EACL,IAAI,EACJ,eAAe,EACf,eAAe,GAChB,EAAE,gBAAgB,gCA2DlB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/header/molecules/profile-menu/index.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAA;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,WAAW,CAAC,EAAE,SAAS,CAAA;IACvB,4DAA4D;IAC5D,SAAS,CAAC,EAAE,oBAAoB,EAAE,CAAA;IAClC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,EAAE,oBAAoB,EAAE,CAAA;IAC7B,IAAI,EAAE,OAAO,CAAA;IACb,eAAe,CAAC,EAAE,SAAS,CAAA;IAC3B,eAAe,CAAC,EAAE,SAAS,CAAA;CAC5B;AAID,wBAAgB,WAAW,CAAC,EAC1B,WAAW,EACX,SAAc,EACd,WAAgB,EAChB,KAAK,EACL,IAAI,EACJ,eAAe,EACf,eAAe,GAChB,EAAE,gBAAgB,gCA8DlB"}
@@ -47,27 +47,34 @@ function ProfileMenu({
47
47
  observed.forEach((node) => observer.observe(node));
48
48
  return () => observer.disconnect();
49
49
  }, []);
50
- return jsxs(Root, {
51
- $isOpen: open,
52
- id: SELECTOR_IDS.PROFILE_MENU,
53
- children: [jsx("div", {
54
- ref: pupilSelectRef,
55
- children: pupilSelectSlot
56
- }), jsx("div", {
57
- ref: profileInfoRef,
58
- children: profileInfoSlot
59
- }), jsxs(Scrollable, {
60
- autoHeight: true,
61
- autoHeightMax: maxHeight,
62
- autoHide: true,
63
- universal: true,
64
- children: [headItems.map((item) => jsx(ProfileMenuItem, __spreadValues({}, item), item.id)), jsx(Spacer, {
65
- marginBottom: headSpacing
66
- }), items.map((item) => item.id === SELECTOR_IDS.PROFILE_MENU_BONUSES && bonusesSlot !== void 0 ? jsx(Fragment, {
67
- children: bonusesSlot
68
- }, item.id) : jsx(ProfileMenuItem, __spreadValues({}, item), item.id))]
69
- })]
70
- });
50
+ return (
51
+ // Закрытое меню спрятано только прозрачностью (`opacity: 0`, ради анимации), и без атрибутов
52
+ // его ссылки читались бы скринридером и ловили Tab невидимыми. `inert` снимает фокус и клики,
53
+ // `aria-hidden` — дерево доступности; стили при этом не меняются.
54
+ jsxs(Root, {
55
+ $isOpen: open,
56
+ "aria-hidden": open ? void 0 : true,
57
+ id: SELECTOR_IDS.PROFILE_MENU,
58
+ inert: !open,
59
+ children: [jsx("div", {
60
+ ref: pupilSelectRef,
61
+ children: pupilSelectSlot
62
+ }), jsx("div", {
63
+ ref: profileInfoRef,
64
+ children: profileInfoSlot
65
+ }), jsxs(Scrollable, {
66
+ autoHeight: true,
67
+ autoHeightMax: maxHeight,
68
+ autoHide: true,
69
+ universal: true,
70
+ children: [headItems.map((item) => jsx(ProfileMenuItem, __spreadValues({}, item), item.id)), jsx(Spacer, {
71
+ marginBottom: headSpacing
72
+ }), items.map((item) => item.id === SELECTOR_IDS.PROFILE_MENU_BONUSES && bonusesSlot !== void 0 ? jsx(Fragment, {
73
+ children: bonusesSlot
74
+ }, item.id) : jsx(ProfileMenuItem, __spreadValues({}, item), item.id))]
75
+ })]
76
+ })
77
+ );
71
78
  }
72
79
  export {
73
80
  ProfileMenu
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/header/molecules/segment-list/index.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAEhD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;IACrC,QAAQ,EAAE,WAAW,EAAE,CAAA;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B;AASD,wBAAgB,WAAW,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,EAAE,EAAE,gBAAgB,gCAUtF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/header/molecules/segment-list/index.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAEhD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;IACrC,QAAQ,EAAE,WAAW,EAAE,CAAA;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B;AAaD,wBAAgB,WAAW,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,EAAE,EAAE,gBAAgB,gCAiBtF"}
@@ -1,5 +1,25 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __spreadValues = (a, b) => {
9
+ for (var prop in b || (b = {}))
10
+ if (__hasOwnProp.call(b, prop))
11
+ __defNormalProp(a, prop, b[prop]);
12
+ if (__getOwnPropSymbols)
13
+ for (var prop of __getOwnPropSymbols(b)) {
14
+ if (__propIsEnum.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ }
17
+ return a;
18
+ };
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
1
20
  import { Menu } from "react-aim-menu";
2
21
  import { Item } from "./styled.js";
22
+ import { buttonProps, segmentPaneId } from "../../../shared/a11y.js";
3
23
  import { SELECTOR_IDS } from "../../../shared/constants.js";
4
24
  import { SegmentListItem } from "../../atoms/segment-list-item/index.js";
5
25
  import { jsx } from "preact/jsx-runtime";
@@ -15,16 +35,19 @@ function SegmentList({
15
35
  id,
16
36
  title,
17
37
  url
18
- }) => jsx(Item, {
38
+ }) => jsx(Item, __spreadProps(__spreadValues({
19
39
  $spacer: bottomSpace,
40
+ "aria-controls": segmentPaneId(id),
41
+ "aria-expanded": selectedSegmentId === id,
20
42
  onClick: () => onSelect(id),
21
- onHover: () => onSelect(id),
43
+ onHover: () => onSelect(id)
44
+ }, buttonProps(() => onSelect(id))), {
22
45
  children: jsx(SegmentListItem, {
23
46
  active: selectedSegmentId === id,
24
47
  title,
25
48
  url
26
49
  })
27
- }, id))
50
+ }), id))
28
51
  });
29
52
  }
30
53
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/header/molecules/support-button/index.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAGjD,YAAY,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAwClE,wBAAgB,oBAAoB,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,aAAqB,EAAE,EAAE,kBAAkB,gCAqB1G;AAED,wBAAgB,mBAAmB,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,aAAqB,EAAE,EAAE,kBAAkB,gCA2BzG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/header/molecules/support-button/index.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAGjD,YAAY,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AA2ClE,wBAAgB,oBAAoB,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,aAAqB,EAAE,EAAE,kBAAkB,gCAuB1G;AAED,wBAAgB,mBAAmB,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,aAAqB,EAAE,EAAE,kBAAkB,gCA6BzG"}
@@ -3,6 +3,7 @@ import { Button, Icon, Indicator } from "@foxford/ui";
3
3
  import { Root, TabletRoot, TabletButton, IndicatorRoot } from "./styled.js";
4
4
  import { SupportTheme } from "./theme.js";
5
5
  import { jsx, jsxs, Fragment } from "preact/jsx-runtime";
6
+ const SUPPORT_LABEL = "Поддержка";
6
7
  function OpenIndicator() {
7
8
  return jsx(IndicatorRoot, {
8
9
  children: jsx(Indicator, {
@@ -42,6 +43,8 @@ function SupportButtonDesktop({
42
43
  return jsx(SupportTheme, {
43
44
  children: jsxs(Root, {
44
45
  children: [jsx(Button, {
46
+ "aria-haspopup": "dialog",
47
+ "aria-label": SUPPORT_LABEL,
45
48
  base: true,
46
49
  icon: "messageCircleQuestion",
47
50
  iconProps: {
@@ -78,6 +81,8 @@ function SupportButtonTablet({
78
81
  return jsx(SupportTheme, {
79
82
  children: jsxs(TabletRoot, {
80
83
  children: [jsx(TabletButton, {
84
+ "aria-haspopup": "dialog",
85
+ "aria-label": SUPPORT_LABEL,
81
86
  icon: jsxs(Fragment, {
82
87
  children: [jsx(Icon, {
83
88
  name: "messageCircleQuestion",
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/header/molecules/user-panel/index.tsx"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAA;AACpF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AACvD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAEjD,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,kBAAkB,CAAA;IACzB,EAAE,EAAE,MAAM,CAAA;IACV,mFAAmF;IACnF,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,cAAc;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,wBAAwB,CAAC,EAAE,MAAM,CAAA;IACjC,kBAAkB,EAAE,MAAM,IAAI,CAAA;IAC9B,mBAAmB,EAAE,MAAM,IAAI,CAAA;IAC/B,sBAAsB,EAAE,MAAM,IAAI,CAAA;IAClC,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IACnC,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,WAAW,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAA;IAC3C,eAAe,EAAE,OAAO,CAAA;IACxB,MAAM,CAAC,EAAE,KAAK,EAAE,CAAA;IAChB,mBAAmB,EAAE,OAAO,CAAA;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,CAAC,EAAE,oBAAoB,EAAE,CAAA;IACrC,IAAI,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;IACvD;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,YAAY,CAAA;CAChC;AACD,wBAAgB,SAAS,CAAC,EACxB,cAAkB,EAClB,wBAAwB,EACxB,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,EACtB,aAAa,EACb,mBAA2B,EAC3B,WAAW,EACX,eAAe,EACf,MAAW,EACX,mBAAmB,EACnB,WAAW,EACX,YAAiB,EACjB,IAAI,EACJ,OAAgB,GACjB,EAAE,cAAc,gCA2FhB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/header/molecules/user-panel/index.tsx"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAA;AACpF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AACvD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAEjD,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,kBAAkB,CAAA;IACzB,EAAE,EAAE,MAAM,CAAA;IACV,mFAAmF;IACnF,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,cAAc;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,wBAAwB,CAAC,EAAE,MAAM,CAAA;IACjC,kBAAkB,EAAE,MAAM,IAAI,CAAA;IAC9B,mBAAmB,EAAE,MAAM,IAAI,CAAA;IAC/B,sBAAsB,EAAE,MAAM,IAAI,CAAA;IAClC,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IACnC,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,WAAW,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAA;IAC3C,eAAe,EAAE,OAAO,CAAA;IACxB,MAAM,CAAC,EAAE,KAAK,EAAE,CAAA;IAChB,mBAAmB,EAAE,OAAO,CAAA;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,CAAC,EAAE,oBAAoB,EAAE,CAAA;IACrC,IAAI,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;IACvD;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,YAAY,CAAA;CAChC;AACD,wBAAgB,SAAS,CAAC,EACxB,cAAkB,EAClB,wBAAwB,EACxB,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,EACtB,aAAa,EACb,mBAA2B,EAC3B,WAAW,EACX,eAAe,EACf,MAAW,EACX,mBAAmB,EACnB,WAAW,EACX,YAAiB,EACjB,IAAI,EACJ,OAAgB,GACjB,EAAE,cAAc,gCA6FhB"}
@@ -24,7 +24,7 @@ import { useOutsideClick } from "../../../shared/use-outside-click.js";
24
24
  import { ActionButton } from "../../atoms/action-button/index.js";
25
25
  import { Avatar } from "../../atoms/avatar/index.js";
26
26
  import { UserProfile } from "../../atoms/user-profile/index.js";
27
- import { CartButton } from "../cart-button/index.js";
27
+ import { cartLabel, CartButton } from "../cart-button/index.js";
28
28
  import { ProfileMenu } from "../profile-menu/index.js";
29
29
  import { ProfileMenuButtonTooltip } from "../profile-menu-button-tooltip/index.js";
30
30
  import { PupilSelectMenu } from "../pupil-select-menu/index.js";
@@ -71,6 +71,7 @@ function UserPanel({
71
71
  children: jsxs(TopMenuRow, {
72
72
  children: [topMenuItems.map((item) => jsx(TopMenuButton, {
73
73
  active: highlightedTopMenuItemId === item.id,
74
+ "aria-label": item.id === SELECTOR_IDS.TOP_MENU_CART ? cartLabel(item.title, cartItemsCount) : void 0,
74
75
  icon: item.icon,
75
76
  iconSize: isElementary ? 30 : 20,
76
77
  id: item.id,
@@ -88,6 +89,7 @@ function UserPanel({
88
89
  avatar: jsx(Avatar, {
89
90
  avatarUrl: user.avatarUrl
90
91
  }),
92
+ expanded: profileMenuOpen || pupilSelectMenuOpen,
91
93
  id: SELECTOR_IDS.TOP_MENU_PROFILE,
92
94
  marker: profileButtonMarker,
93
95
  onClick: onProfileMenuToggle,