@stack-spot/portal-layout 2.9.2 → 2.11.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 CHANGED
@@ -1,5 +1,19 @@
1
1
  # Changelog
2
2
 
3
+ ## [2.11.0](https://github.com/stack-spot/portal-commons/compare/portal-layout@v2.10.0...portal-layout@v2.11.0) (2024-10-11)
4
+
5
+
6
+ ### Features
7
+
8
+ * Feat 1943 accordion menu section ([#419](https://github.com/stack-spot/portal-commons/issues/419)) ([1a940af](https://github.com/stack-spot/portal-commons/commit/1a940af2e4c102f2c37434cbfc8bb89788b9a2f6))
9
+
10
+ ## [2.10.0](https://github.com/stack-spot/portal-commons/compare/portal-layout@v2.9.2...portal-layout@v2.10.0) (2024-10-10)
11
+
12
+
13
+ ### Features
14
+
15
+ * Change support option ([#414](https://github.com/stack-spot/portal-commons/issues/414)) ([1ee2a66](https://github.com/stack-spot/portal-commons/commit/1ee2a661ec220b39ba1228969f07452c6f1a731b))
16
+
3
17
  ## [2.9.2](https://github.com/stack-spot/portal-commons/compare/portal-layout@v2.9.1...portal-layout@v2.9.2) (2024-09-26)
4
18
 
5
19
 
@@ -0,0 +1,3 @@
1
+ /// <reference types="react" />
2
+ export declare const MenuSectionGroup: React.FC<React.HTMLAttributes<HTMLUListElement>>;
3
+ //# sourceMappingURL=MenuSectionGroup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MenuSectionGroup.d.ts","sourceRoot":"","sources":["../../../src/components/menu/MenuSectionGroup.tsx"],"names":[],"mappings":";AAIA,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAoH7E,CAAA"}
@@ -0,0 +1,121 @@
1
+ import { theme } from '@stack-spot/portal-theme';
2
+ import styled from 'styled-components';
3
+ import { MENU_CONTENT_PADDING as PADDING } from './constants.js';
4
+ export const MenuSectionGroup = styled.ul `
5
+ padding: 0 0 0 16px;
6
+ display: flex;
7
+ flex-direction: column;
8
+ visibility: hidden;
9
+ transition: visibility 0s 0.3s;
10
+
11
+ &.no-indentation {
12
+ padding: 0;
13
+ }
14
+
15
+ .item-row {
16
+ display: flex;
17
+ flex-direction: row;
18
+ gap: 8px;
19
+ align-items: center;
20
+
21
+ &.root {
22
+ padding: 0 16px;
23
+ margin-top: 16px;
24
+ border-radius: 0;
25
+ }
26
+
27
+ .label {
28
+ flex: 1;
29
+ &.hidden, &.ellipsis {
30
+ white-space: nowrap;
31
+ overflow: hidden;
32
+ }
33
+ &.ellipsis {
34
+ text-overflow: ellipsis;
35
+ }
36
+ }
37
+ }
38
+
39
+ li a {
40
+ position: relative;
41
+ height: 0;
42
+ overflow: hidden;
43
+ transition: height 0.3s, background-color 0.2s;
44
+
45
+ &:hover {
46
+ background-color: ${theme.color.light['500']};
47
+ }
48
+
49
+ &.action {
50
+ &:before {
51
+ content: '';
52
+ position: absolute;
53
+ left: 2px;
54
+ width: 2px;
55
+ height: 0;
56
+ background: inherit;
57
+ transition: height 0.2s;
58
+ }
59
+
60
+ &.active {
61
+
62
+ &:hover {
63
+ background-color: transparent;
64
+ }
65
+
66
+ &:before {
67
+ background: ${theme.color.primary['500']};
68
+ height: 24px;
69
+ }
70
+ }
71
+
72
+ &:not(.active):hover:before {
73
+ background: ${theme.color.light.contrastText};
74
+ height: 24px;
75
+ }
76
+ }
77
+
78
+ .chevron {
79
+ transition: transform 0.5s;
80
+ &:not(.open) {
81
+ transform: rotate(180deg);
82
+ }
83
+ }
84
+
85
+ .item-row-title {
86
+ opacity: 0.7;
87
+ }
88
+ }
89
+
90
+ &.open {
91
+ visibility: visible;
92
+ transition: unset;
93
+ & > li > a {
94
+ height: 56px;
95
+ }
96
+ }
97
+
98
+ &:not(.open) &.open > li > a {
99
+ height: 0;
100
+ }
101
+
102
+ &.root {
103
+ /* margin-bottom: ${PADDING}px; */
104
+
105
+ & > li {
106
+ .group-title {
107
+ margin-left: ${PADDING}px;
108
+ margin-bottom: 5px;
109
+ margin-top: 40px;
110
+ display: block;
111
+ }
112
+
113
+ &:first-child {
114
+ .group-title {
115
+ margin-top: 0;
116
+ }
117
+ }
118
+ }
119
+ }
120
+ `;
121
+ //# sourceMappingURL=MenuSectionGroup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MenuSectionGroup.js","sourceRoot":"","sources":["../../../src/components/menu/MenuSectionGroup.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAA;AAChD,OAAO,MAAM,MAAM,mBAAmB,CAAA;AACtC,OAAO,EAAE,oBAAoB,IAAI,OAAO,EAAE,MAAM,aAAa,CAAA;AAE7D,MAAM,CAAC,MAAM,gBAAgB,GAAqD,MAAM,CAAC,EAAE,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0BA0CjE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;wBAqB1B,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;;;;;;sBAM5B,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBA8B5B,OAAO;;;;uBAIR,OAAO;;;;;;;;;;;;;CAa7B,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"MenuSections.d.ts","sourceRoot":"","sources":["../../../src/components/menu/MenuSections.tsx"],"names":[],"mappings":"AAUA,OAAO,EAAE,SAAS,EAAe,MAAM,SAAS,CAAA;AAwChD;;GAEG;AACH,wBAAgB,sBAAsB,SAOrC;AA8ID;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,YAAY,2BAAiC,SAAS,4CAsGlE,CAAA"}
1
+ {"version":3,"file":"MenuSections.d.ts","sourceRoot":"","sources":["../../../src/components/menu/MenuSections.tsx"],"names":[],"mappings":"AAYA,OAAO,EAAE,SAAS,EAAe,MAAM,SAAS,CAAA;AAwChD;;GAEG;AACH,wBAAgB,sBAAsB,SAOrC;AA2ID;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,YAAY,2BAAiC,SAAS,4CAyHlE,CAAA"}
@@ -1,14 +1,16 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { Flex, IconBox, Text } from '@citric/core';
3
- import { ChevronRight, Cog, Collapse, Expand, Support } from '@citric/icons';
2
+ import { Divider, Flex, IconBox, Text } from '@citric/core';
3
+ import { ChevronRight, Cog, Collapse, Expand, MobileComments, ChevronUpFill } from '@citric/icons';
4
4
  import { useKeyboardControls } from '@stack-spot/portal-components';
5
5
  import { useAnchorTag } from '@stack-spot/portal-components/anchor';
6
+ import { listToClass } from '@stack-spot/portal-theme';
6
7
  import { interpolate, useTranslate } from '@stack-spot/portal-translate';
7
8
  import { useCallback, useEffect, useMemo, useState } from 'react';
8
9
  import { elementIds, getLayoutElements } from '../../elements.js';
9
10
  import { StarFillWithGradient } from '../../svg/StarFillWithGradient.js';
10
11
  import { isLessThan30Days } from '../Rate/hook.js';
11
12
  import { MenuContent } from './MenuContent.js';
13
+ import { MenuSectionGroup } from './MenuSectionGroup.js';
12
14
  /**
13
15
  * Amount of time to wait before hiding the menu overlay once the mouse leaves its area.
14
16
  */
@@ -90,7 +92,7 @@ function isMenuContentVisible() {
90
92
  * @param props React props for the component {@link MenuSection} & { id, setCurrentOverlay }. Id identifies the current section and
91
93
  * setCurrentOverlay controls the overlay (preview) content.
92
94
  */
93
- const Section = ({ icon, label, href, target, onClick, active, content, customContent, setCurrentOverlay, id, hasContent, className, }) => {
95
+ const Section = ({ icon, label, href, target, onClick, active, content, customContent, setCurrentOverlay, hasContent, id, }) => {
94
96
  const Link = useAnchorTag();
95
97
  const contentToRender = typeof content === 'function' ? content() : content;
96
98
  const t = useTranslate(dictionary);
@@ -119,12 +121,12 @@ const Section = ({ icon, label, href, target, onClick, active, content, customCo
119
121
  hideOverlayImmediately();
120
122
  }
121
123
  const labelText = typeof label === 'string' ? label : label.id;
122
- return (_jsxs("li", { role: "menuitem", title: labelText, className: `section-submenu ${className || ''} ${active ? 'active' : ''}`, children: [_jsx(Link, { href: href, target: target, onClick: click, onMouseEnter: prepareShowOverlay, onMouseLeave: () => shouldShowOverlay() && hideOverlay(), title: labelText, "aria-label": labelText, onKeyDown: onClick ? e => e.key === 'Enter' && onClick() : undefined, ...(active ? { 'aria-current': 'page' } : undefined), ...(!href ? { 'tabIndex': 0 } : undefined), children: _jsxs(Flex, { alignItems: "center", justifyContent: "center", px: 5, children: [_jsx(IconBox, { children: icon }), typeof label === 'string' ? _jsx(Text, { appearance: "microtext1", className: "section-label", ml: 3, children: label }) : label.element] }) }), shouldShowOverlay() &&
124
+ return (_jsxs(_Fragment, { children: [_jsx(Link, { href: href, target: target, onClick: click, onMouseEnter: prepareShowOverlay, onMouseLeave: () => shouldShowOverlay() && hideOverlay(), title: labelText, "aria-label": labelText, onKeyDown: onClick ? e => e.key === 'Enter' && onClick() : undefined, ...(active ? { 'aria-current': 'page' } : undefined), ...(!href ? { 'tabIndex': 0 } : undefined), children: _jsxs(Flex, { alignItems: "center", justifyContent: "center", px: 5, children: [_jsx(IconBox, { children: icon }), typeof label === 'string' ? _jsx(Text, { appearance: "microtext1", className: "section-label", ml: 3, children: label }) : label.element] }) }), shouldShowOverlay() &&
123
125
  _jsx(IconBox, { size: "sm", className: "section-submenu-icon", as: "button", "aria-label": interpolate(t.menuOptions, label), "aria-controls": MENU_OVERLAY_ID, "aria-expanded": false, onKeyDown: (event) => {
124
126
  if (event.key === 'Enter') {
125
127
  prepareShowOverlay(event);
126
128
  }
127
- }, children: _jsx(ChevronRight, {}) })] }, labelText));
129
+ }, children: _jsx(ChevronRight, {}) })] }));
128
130
  };
129
131
  /**
130
132
  * Renders the overlay content.
@@ -158,15 +160,18 @@ export const MenuSections = ({ sections = [], ...props }) => {
158
160
  const t = useTranslate(dictionary);
159
161
  // this is a mock state only used to force an update on the component.
160
162
  const [_, setUpdate] = useState(0);
163
+ const [isMenuCollapsed, setIsMenuCollapsed] = useState(false);
161
164
  const toggleMenu = useCallback((hasContent) => {
162
165
  const layout = document.getElementById('layout');
163
166
  if (!layout)
164
167
  return;
165
168
  if (layout.classList.contains('menu-compact')) {
166
169
  layout.classList.remove('menu-compact');
170
+ setIsMenuCollapsed(false);
167
171
  }
168
172
  else {
169
173
  layout.classList.add('menu-compact');
174
+ setIsMenuCollapsed(true);
170
175
  }
171
176
  if (hasContent) {
172
177
  if (layout.classList.contains('menu-content-visible')) {
@@ -180,12 +185,16 @@ export const MenuSections = ({ sections = [], ...props }) => {
180
185
  }, []);
181
186
  // the current overlay showing, when the user hovers the section icon. This is the index of the item in the sections array.
182
187
  const [currentOverlay, setCurrentOverlay] = useState();
188
+ const sectionItemsOverlay = useMemo(() => sections.flatMap((s) => 'children' in s ? s.children?.map((c) => c) : s), [sections]);
183
189
  const sectionItems = useMemo(() => sections.reduce((result, s, i) => s.hidden
184
190
  ? result
185
191
  : [
186
192
  ...result,
187
- _jsx(Section, { id: i, ...s, setCurrentOverlay: setCurrentOverlay, hasContent: !!props.content || !!props.customContent }, i),
188
- ], []), [sections]);
193
+ _jsx("li", { role: "menuitem", title: s.label, className: `section-submenu no-indentation ${s.className || ''} ${s.active ? 'active' : undefined}`, children: 'children' in s ?
194
+ _jsx(CollapsibleSection, { listItems: sectionItemsOverlay, isMenuCollapsed: isMenuCollapsed, ...s, setCurrentOverlay: setCurrentOverlay })
195
+ :
196
+ _jsx(Section, { id: sectionItemsOverlay.findIndex((sio) => sio?.label === s.label), ...s, setCurrentOverlay: setCurrentOverlay, hasContent: !!props.content || !!props.customContent }, i) }, s.label),
197
+ ], []), [sections, isMenuCollapsed]);
189
198
  function onPressEscape() {
190
199
  getAccessibilityButtonOfSectionWithActiveOverlay()?.focus();
191
200
  hideOverlayImmediately();
@@ -206,19 +215,20 @@ export const MenuSections = ({ sections = [], ...props }) => {
206
215
  function renderMenuOverlay() {
207
216
  if (currentOverlay === undefined)
208
217
  return null;
209
- const shouldRenderMenuContentInstead = !isMenuContentVisible() && sections[currentOverlay].active &&
218
+ const shouldRenderMenuContentInstead = !isMenuContentVisible() && sectionItemsOverlay[currentOverlay]?.active &&
210
219
  (!!props.content || !!props.customContent);
211
220
  return shouldRenderMenuContentInstead
212
221
  ? _jsx(OverlayRenderer, { content: props.content, customContent: props.customContent }, 'contentKey' in props ? props.contentKey : undefined)
213
- : _jsx(OverlayRenderer, { content: sections[currentOverlay].content, customContent: sections[currentOverlay].customContent }, currentOverlay);
222
+ : _jsx(OverlayRenderer, { content: sectionItemsOverlay[currentOverlay]?.content, customContent: sectionItemsOverlay[currentOverlay]?.customContent }, currentOverlay);
214
223
  }
215
- return (_jsxs(_Fragment, { children: [_jsx("ul", { role: "menu", children: sectionItems }), _jsxs(Flex, { mb: 7, alignItems: "center", children: [_jsx(RateAndContactUsItem, { ...props }), _jsxs("button", { role: "menuitem", className: "toggle sections-footer", onClick: () => toggleMenu(!!props.content || !!props.customContent), title: t.toggle, children: [_jsxs(IconBox, { children: [_jsx(Expand, { className: "expand" }), _jsx(Collapse, { className: "collapse" })] }), _jsx(Text, { appearance: "microtext1", ml: 8, className: "collapse", colorScheme: "light.contrastText", children: t.hide })] }), (props.settings?.show) &&
224
+ return (_jsxs(_Fragment, { children: [_jsx(MenuSectionGroup, { className: "open root no-indentation", children: sectionItems }), _jsxs(Flex, { mb: 7, alignItems: "center", children: [_jsx(RateAndContactUsItem, { ...props }), _jsxs("button", { role: "menuitem", className: "toggle sections-footer", onClick: () => toggleMenu(!!props.content || !!props.customContent), title: t.toggle, children: [_jsxs(IconBox, { children: [_jsx(Expand, { className: "expand" }), _jsx(Collapse, { className: "collapse" })] }), _jsx(Text, { appearance: "microtext1", ml: 8, className: "collapse", colorScheme: "light.contrastText", children: t.hide })] }), (props.settings?.show) &&
216
225
  _jsxs(Link, { href: props.settings?.href, onClick: props.settings?.onClick, className: "sections-footer toggle", ...(props.settings.active ? { 'aria-current': 'page' } : undefined), children: [_jsx(IconBox, { "aria-label": t.settingsIcon, children: _jsx(Cog, {}) }), _jsx(Text, { appearance: "microtext1", ml: 8, className: "collapse", children: t.settings })] })] }), _jsx("div", { id: MENU_OVERLAY_ID, onMouseEnter: showOverlay, onMouseLeave: hideOverlay, ref: overlayRef, children: renderMenuOverlay() })] }));
217
226
  };
218
227
  const RateAndContactUsItem = ({ ...props }) => {
219
228
  const t = useTranslate(dictionary);
220
229
  const alreadyAnswered = localStorage.getItem('RATED_US_IN');
221
230
  const hasAnsweredLess30Days = alreadyAnswered ? isLessThan30Days(new Date(+alreadyAnswered), new Date(Date.now())) : false;
231
+ const Link = useAnchorTag();
222
232
  //This effect is only used to remove from local storage unused keys from
223
233
  //previous rate us and contact us versions. We do not want to fill the users storage
224
234
  //with things that are not used anymore.
@@ -229,7 +239,19 @@ const RateAndContactUsItem = ({ ...props }) => {
229
239
  }, []);
230
240
  return _jsxs(_Fragment, { children: [(props.rateUs?.show && !hasAnsweredLess30Days) &&
231
241
  _jsxs("button", { role: "menuitem", className: "toggle sections-footer", onClick: props.rateUs?.onClick, ...(props.rateUs.active ? { 'aria-current': 'page' } : undefined), children: [_jsx(IconBox, { "aria-label": t.rateUsIcon, sx: { paddingTop: '2px' }, children: _jsx(StarFillWithGradient, { id: "svg-icon", className: "gradient-svg rotate-icon" }) }), _jsx(Text, { appearance: "microtext1", ml: 8, sx: { marginTop: '3px' }, className: "collapse gradient grow-shrink", colorScheme: "light.contrastText", children: t.rateUs })] }), (props.contactUs?.show) &&
232
- _jsxs("button", { role: "menuitem", className: "toggle sections-footer", onClick: props.contactUs?.onClick, ...(props.contactUs.active ? { 'aria-current': 'page' } : undefined), children: [_jsx(IconBox, { "aria-label": t.contactIcon, children: _jsx(Support, {}) }), _jsx(Text, { appearance: "microtext1", ml: 8, sx: { marginTop: '3px' }, className: "collapse", colorScheme: "light.contrastText", children: t.contactUs })] })] });
242
+ _jsxs(Link, { href: props.contactUs?.href, className: "toggle sections-footer", onClick: props.contactUs?.onClick, ...(props.contactUs.active ? { 'aria-current': 'page' } : undefined), target: props.contactUs?.target, children: [_jsx(IconBox, { "aria-label": t.contactIcon, children: _jsx(MobileComments, {}) }), _jsx(Text, { appearance: "microtext1", ml: 8, sx: { marginTop: '3px' }, className: "collapse", colorScheme: "light.contrastText", children: t.contactUs })] })] });
243
+ };
244
+ /**
245
+ * A menu item that is actually a subgroup and can be collapsed/expanded.
246
+ * @param props the props for the component {@link MenuSectionGroup} & { root: boolean }.
247
+
248
+ */
249
+ const CollapsibleSection = ({ label, open: initialValue, children, icon, setCurrentOverlay, listItems, isMenuCollapsed = true }) => {
250
+ const [open, setOpen] = useState(initialValue || false);
251
+ const menuGroupId = `menuGroup${label}`;
252
+ const items = useMemo(() => children?.filter(i => !i.hidden).map((c) => (_jsx("li", { role: "menuitem", title: c.label, className: `section-submenu ${c.className} ${c.active ? 'active' : ''}`, children: _jsx(Section, { id: listItems?.findIndex((item) => item?.label === c.label), ...c, hasContent: false, setCurrentOverlay: setCurrentOverlay }, c.label) }, c.label))), [children]);
253
+ return (_jsxs(_Fragment, { children: [isMenuCollapsed ? _jsx(Divider, {}) :
254
+ _jsx("a", { onClick: () => setOpen(!open), onKeyDown: e => e.key === 'Enter' && setOpen(!open), className: listToClass(['item-row']), tabIndex: 0, "aria-controls": menuGroupId, "aria-expanded": open, children: _jsxs(Flex, { alignItems: "center", justifyContent: "center", px: 6, children: [icon, _jsx(Text, { appearance: "microtext1", className: "section-label", ml: 3, colorScheme: "light.contrastText", children: label }), _jsx(IconBox, { sx: { ml: '14' }, children: _jsx(ChevronUpFill, { className: listToClass(['chevron', open ? 'open' : '']) }) })] }) }), _jsx(MenuSectionGroup, { id: menuGroupId, className: `${isMenuCollapsed || open ? 'open' : ''} root no-indentation`, "aria-hidden": !open, children: items })] }));
233
255
  };
234
256
  const dictionary = {
235
257
  en: {
@@ -238,7 +260,7 @@ const dictionary = {
238
260
  settings: 'Settings',
239
261
  settingsIcon: 'Settings icon',
240
262
  hide: 'Hide',
241
- contactUs: 'Contact us',
263
+ contactUs: 'Support',
242
264
  contactIcon: 'Contact icon',
243
265
  rateUs: 'Rate us',
244
266
  rateUsIcon: 'Rate us icon',
@@ -249,7 +271,7 @@ const dictionary = {
249
271
  settings: 'Configurações',
250
272
  settingsIcon: 'Ícone de configurações',
251
273
  hide: 'Esconder',
252
- contactUs: 'Fale conosco',
274
+ contactUs: 'Suporte',
253
275
  contactIcon: 'Ícone de contato',
254
276
  rateUs: 'Avalie-nos',
255
277
  rateUsIcon: 'Avalie-nos icon',
@@ -1 +1 @@
1
- {"version":3,"file":"MenuSections.js","sourceRoot":"","sources":["../../../src/components/menu/MenuSections.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MenuSections.js","sourceRoot":"","sources":["../../../src/components/menu/MenuSections.tsx"],"names":[],"mappings":"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"}
@@ -134,6 +134,14 @@ export interface MenuSection extends Action {
134
134
  */
135
135
  className?: string;
136
136
  hidden?: boolean;
137
+ /**
138
+ * The items in this group. This property will create a accordion to include the items
139
+ */
140
+ children?: MenuSection[];
141
+ /**
142
+ * initial value to accordion when using children prop
143
+ */
144
+ open?: boolean;
137
145
  }
138
146
  interface BaseMenuProps {
139
147
  /**
@@ -219,6 +227,10 @@ interface BaseMenuProps {
219
227
  * A css class to pass to the button.
220
228
  */
221
229
  className?: string;
230
+ /**
231
+ * Target of the URL to open.
232
+ */
233
+ target?: React.AnchorHTMLAttributes<HTMLAnchorElement>['target'];
222
234
  };
223
235
  }
224
236
  export interface MenuPropsWithStaticContent extends BaseMenuProps {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/menu/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/menu/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,6CAA6C,CAAA;AACpE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAE/C,UAAU,YAAY;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;OAEG;IACH,IAAI,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC;IAC1B;;OAEG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC;IAC3B;;;OAGG;IACH,QAAQ,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;CAC3C;AAED,MAAM,WAAW,SAAU,SAAQ,YAAY;IAC7C;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,QAAQ,EAAE,QAAQ,EAAE,CAAC;IACrB;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,UAAW,SAAQ,MAAM,EAAE,YAAY;IACtD;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAA;AAE7C,MAAM,WAAW,YAAa,SAAQ,MAAM;IAC1C;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ;;OAEG;IACH,IAAI,CAAC,EAAE,YAAY,CAAC;CACrB;AAED,MAAM,WAAW,QAAQ;IACvB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B;;OAEG;IACH,YAAY,CAAC,EAAE,QAAQ,CAAC;IACxB;;OAEG;IACH,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC;IACrB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAY,SAAQ,MAAM;IACzC;;OAEG;IACH,IAAI,EAAE,YAAY,CAAC;IACnB;;;;OAIG;IACH,OAAO,CAAC,EAAE,kBAAkB,GAAG,CAAC,MAAM,kBAAkB,CAAC,CAAC;IAC1D;;;;;OAKG;IACH,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;OAEG;IACH,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IACzB;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,UAAU,aAAa;IACrB;;OAEG;IACH,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IACzB;;;OAGG;IACH,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B;;OAEG;IACH,QAAQ,CAAC,EAAE;QACT;;WAEG;QACH,IAAI,CAAC,EAAE,OAAO,CAAC;QACf;;WAEG;QACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;QACrB;;WAEG;QACH,IAAI,CAAC,EAAE,MAAM,CAAC;QACd;;WAEG;QACH,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB;;WAEG;QACH,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF;;OAEG;IACH,MAAM,CAAC,EAAE;QACP;;WAEG;QACH,IAAI,CAAC,EAAE,OAAO,CAAC;QACf;;WAEG;QACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;QACrB;;WAEG;QACH,IAAI,CAAC,EAAE,MAAM,CAAC;QACd;;WAEG;QACH,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB;;WAEG;QACH,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF;;OAEG;IACH,SAAS,CAAC,EAAE;QACV;;WAEG;QACH,IAAI,CAAC,EAAE,OAAO,CAAC;QACf;;WAEG;QACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;QACrB;;WAEG;QACH,IAAI,CAAC,EAAE,MAAM,CAAC;QACd;;WAEG;QACH,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB;;WAEG;QACH,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB;;WAEG;QACH,MAAM,CAAC,EAAE,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,CAAC,QAAQ,CAAC,CAAC;KAClE,CAAC;CACH;AAED,MAAM,WAAW,0BAA2B,SAAQ,aAAa;IAC/D;;OAEG;IACH,OAAO,CAAC,EAAE,kBAAkB,CAAC;CAC9B;AAED,MAAM,WAAW,2BAA4B,SAAQ,aAAa;IAChE;;;;;OAKG;IACH,OAAO,EAAE,kBAAkB,GAAG,CAAC,MAAM,kBAAkB,CAAC,CAAC;IACzD;;OAEG;IACH,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC;CACvB;AAED,MAAM,MAAM,SAAS,GAAG,0BAA0B,GAAG,2BAA2B,CAAA"}
package/dist/layout.css CHANGED
@@ -180,18 +180,20 @@ body {
180
180
  background: transparent;
181
181
  border: none;
182
182
  width: var(--menu-sections-width);
183
- height: var(--menu-item-height);
184
183
  display: flex;
185
184
  flex-direction: column;
186
185
  gap: 10px;
187
186
  align-items: flex-start;
188
187
  justify-content: center;
189
- transition: background-color 0.2s;
190
188
  cursor: pointer;
191
189
  position: relative;
192
190
  z-index: 2;
193
191
  }
194
192
 
193
+ #menuSections .toggle.sections-footer {
194
+ height: auto;
195
+ }
196
+
195
197
  .gradient-svg {
196
198
  width: 100px;
197
199
  height: 100px;
@@ -261,9 +263,8 @@ body {
261
263
  }
262
264
 
263
265
  #menuSections .toggle:hover,
264
- #menuSections > ul li a:hover,
265
- #menuSections .toggle:focus,
266
- #menuSections > ul li a:focus {
266
+ #menuSections > ul li a:hover
267
+ {
267
268
  background: var(--light-500);
268
269
  border-right: 1px solid var(--light-300);
269
270
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stack-spot/portal-layout",
3
- "version": "2.9.2",
3
+ "version": "2.11.0",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -11,7 +11,7 @@
11
11
  },
12
12
  "peerDependencies": {
13
13
  "@citric/core": "^6.0.0",
14
- "@citric/icons": "^5.7.1",
14
+ "@citric/icons": "^5.9.0",
15
15
  "@citric/ui": "^6.1.1",
16
16
  "@stack-spot/portal-theme": "^1.0.0",
17
17
  "@stack-spot/portal-translate": "^1.0.0",
@@ -0,0 +1,121 @@
1
+ import { theme } from '@stack-spot/portal-theme'
2
+ import styled from 'styled-components'
3
+ import { MENU_CONTENT_PADDING as PADDING } from './constants'
4
+
5
+ export const MenuSectionGroup: React.FC<React.HTMLAttributes<HTMLUListElement>> = styled.ul`
6
+ padding: 0 0 0 16px;
7
+ display: flex;
8
+ flex-direction: column;
9
+ visibility: hidden;
10
+ transition: visibility 0s 0.3s;
11
+
12
+ &.no-indentation {
13
+ padding: 0;
14
+ }
15
+
16
+ .item-row {
17
+ display: flex;
18
+ flex-direction: row;
19
+ gap: 8px;
20
+ align-items: center;
21
+
22
+ &.root {
23
+ padding: 0 16px;
24
+ margin-top: 16px;
25
+ border-radius: 0;
26
+ }
27
+
28
+ .label {
29
+ flex: 1;
30
+ &.hidden, &.ellipsis {
31
+ white-space: nowrap;
32
+ overflow: hidden;
33
+ }
34
+ &.ellipsis {
35
+ text-overflow: ellipsis;
36
+ }
37
+ }
38
+ }
39
+
40
+ li a {
41
+ position: relative;
42
+ height: 0;
43
+ overflow: hidden;
44
+ transition: height 0.3s, background-color 0.2s;
45
+
46
+ &:hover {
47
+ background-color: ${theme.color.light['500']};
48
+ }
49
+
50
+ &.action {
51
+ &:before {
52
+ content: '';
53
+ position: absolute;
54
+ left: 2px;
55
+ width: 2px;
56
+ height: 0;
57
+ background: inherit;
58
+ transition: height 0.2s;
59
+ }
60
+
61
+ &.active {
62
+
63
+ &:hover {
64
+ background-color: transparent;
65
+ }
66
+
67
+ &:before {
68
+ background: ${theme.color.primary['500']};
69
+ height: 24px;
70
+ }
71
+ }
72
+
73
+ &:not(.active):hover:before {
74
+ background: ${theme.color.light.contrastText};
75
+ height: 24px;
76
+ }
77
+ }
78
+
79
+ .chevron {
80
+ transition: transform 0.5s;
81
+ &:not(.open) {
82
+ transform: rotate(180deg);
83
+ }
84
+ }
85
+
86
+ .item-row-title {
87
+ opacity: 0.7;
88
+ }
89
+ }
90
+
91
+ &.open {
92
+ visibility: visible;
93
+ transition: unset;
94
+ & > li > a {
95
+ height: 56px;
96
+ }
97
+ }
98
+
99
+ &:not(.open) &.open > li > a {
100
+ height: 0;
101
+ }
102
+
103
+ &.root {
104
+ /* margin-bottom: ${PADDING}px; */
105
+
106
+ & > li {
107
+ .group-title {
108
+ margin-left: ${PADDING}px;
109
+ margin-bottom: 5px;
110
+ margin-top: 40px;
111
+ display: block;
112
+ }
113
+
114
+ &:first-child {
115
+ .group-title {
116
+ margin-top: 0;
117
+ }
118
+ }
119
+ }
120
+ }
121
+ `
@@ -1,13 +1,15 @@
1
- import { Flex, IconBox, Text } from '@citric/core'
2
- import { ChevronRight, Cog, Collapse, Expand, Support } from '@citric/icons'
1
+ import { Divider, Flex, IconBox, Text } from '@citric/core'
2
+ import { ChevronRight, Cog, Collapse, Expand, MobileComments, ChevronUpFill } from '@citric/icons'
3
3
  import { useKeyboardControls } from '@stack-spot/portal-components'
4
4
  import { useAnchorTag } from '@stack-spot/portal-components/anchor'
5
+ import { listToClass } from '@stack-spot/portal-theme'
5
6
  import { Dictionary, interpolate, useTranslate } from '@stack-spot/portal-translate'
6
7
  import { useCallback, useEffect, useMemo, useState } from 'react'
7
8
  import { elementIds, getLayoutElements } from '../../elements'
8
9
  import { StarFillWithGradient } from '../../svg/StarFillWithGradient'
9
10
  import { isLessThan30Days } from '../Rate/hook'
10
11
  import { MenuContent } from './MenuContent'
12
+ import { MenuSectionGroup } from './MenuSectionGroup'
11
13
  import { MenuProps, MenuSection } from './types'
12
14
 
13
15
  /**
@@ -108,11 +110,12 @@ const Section = ({
108
110
  content,
109
111
  customContent,
110
112
  setCurrentOverlay,
111
- id,
112
113
  hasContent,
113
- className,
114
+ id,
114
115
  }: MenuSection & {
115
- id: number, setCurrentOverlay: (id: number | undefined) => void, hasContent: boolean,
116
+ id: number,
117
+ setCurrentOverlay: (id: number | undefined) => void,
118
+ hasContent: boolean,
116
119
  }) => {
117
120
  const Link = useAnchorTag()
118
121
  const contentToRender = typeof content === 'function' ? content() : content
@@ -145,11 +148,7 @@ const Section = ({
145
148
  const labelText = typeof label === 'string' ? label : label.id
146
149
 
147
150
  return (
148
- <li
149
- role="menuitem"
150
- key={labelText}
151
- title={labelText}
152
- className={`section-submenu ${className || ''} ${active ? 'active' : ''}`}>
151
+ <>
153
152
  <Link
154
153
  href={href}
155
154
  target={target}
@@ -181,7 +180,7 @@ const Section = ({
181
180
  <ChevronRight />
182
181
  </IconBox>
183
182
  }
184
- </li>
183
+ </>
185
184
  )
186
185
  }
187
186
 
@@ -219,14 +218,17 @@ export const MenuSections = ({ sections = [], ...props }: MenuProps) => {
219
218
  const t = useTranslate(dictionary)
220
219
  // this is a mock state only used to force an update on the component.
221
220
  const [_, setUpdate] = useState(0)
221
+ const [isMenuCollapsed, setIsMenuCollapsed] = useState(false)
222
222
 
223
223
  const toggleMenu = useCallback((hasContent: boolean) => {
224
224
  const layout = document.getElementById('layout')
225
225
  if (!layout) return
226
226
  if (layout.classList.contains('menu-compact')) {
227
227
  layout.classList.remove('menu-compact')
228
+ setIsMenuCollapsed(false)
228
229
  } else {
229
230
  layout.classList.add('menu-compact')
231
+ setIsMenuCollapsed(true)
230
232
  }
231
233
 
232
234
  if (hasContent) {
@@ -241,17 +243,33 @@ export const MenuSections = ({ sections = [], ...props }: MenuProps) => {
241
243
  // the current overlay showing, when the user hovers the section icon. This is the index of the item in the sections array.
242
244
  const [currentOverlay, setCurrentOverlay] = useState<number | undefined>()
243
245
 
246
+ const sectionItemsOverlay = useMemo(
247
+ () => sections.flatMap((s) => 'children' in s ? s.children?.map((c) => c) : s),
248
+ [sections],
249
+ )
250
+
244
251
  const sectionItems = useMemo(
245
252
  () => sections.reduce<JSX.Element[]>(
246
253
  (result, s, i) => s.hidden
247
254
  ? result
248
255
  : [
249
256
  ...result,
250
- <Section key={i} id={i} {...s} setCurrentOverlay={setCurrentOverlay} hasContent={!!props.content || !!props.customContent} />,
257
+ <li
258
+ role="menuitem"
259
+ key={s.label as string}
260
+ title={s.label as string}
261
+ className={`section-submenu no-indentation ${s.className || ''} ${s.active ? 'active' : undefined}`}>
262
+ {'children' in s ?
263
+ <CollapsibleSection listItems={sectionItemsOverlay} isMenuCollapsed={isMenuCollapsed}
264
+ {...s} setCurrentOverlay={setCurrentOverlay} />
265
+ :
266
+ <Section key={i} id={sectionItemsOverlay.findIndex((sio) => sio?.label === s.label)}
267
+ {...s} setCurrentOverlay={setCurrentOverlay} hasContent={!!props.content || !!props.customContent} />}
268
+ </li>,
251
269
  ],
252
270
  [],
253
271
  ),
254
- [sections],
272
+ [sections, isMenuCollapsed],
255
273
  )
256
274
 
257
275
  function onPressEscape() {
@@ -276,18 +294,18 @@ export const MenuSections = ({ sections = [], ...props }: MenuProps) => {
276
294
  hook, this would cause some serious problems. */
277
295
  function renderMenuOverlay() {
278
296
  if (currentOverlay === undefined) return null
279
- const shouldRenderMenuContentInstead = !isMenuContentVisible() && sections[currentOverlay].active &&
297
+ const shouldRenderMenuContentInstead = !isMenuContentVisible() && sectionItemsOverlay[currentOverlay]?.active &&
280
298
  (!!props.content || !!props.customContent)
281
299
  return shouldRenderMenuContentInstead
282
300
  ? <OverlayRenderer key={'contentKey' in props ? props.contentKey : undefined} content={props.content}
283
301
  customContent={props.customContent} />
284
- : <OverlayRenderer key={currentOverlay} content={sections[currentOverlay].content}
285
- customContent={sections[currentOverlay].customContent} />
302
+ : <OverlayRenderer key={currentOverlay} content={sectionItemsOverlay[currentOverlay]?.content}
303
+ customContent={sectionItemsOverlay[currentOverlay]?.customContent} />
286
304
  }
287
305
 
288
306
  return (
289
307
  <>
290
- <ul role="menu">{sectionItems}</ul>
308
+ <MenuSectionGroup className="open root no-indentation">{sectionItems}</MenuSectionGroup>
291
309
 
292
310
  <Flex mb={7} alignItems="center">
293
311
  <RateAndContactUsItem {...props} />
@@ -322,6 +340,7 @@ const RateAndContactUsItem = ({ ...props }: Omit<MenuProps, 'sections'>) => {
322
340
  const t = useTranslate(dictionary)
323
341
  const alreadyAnswered = localStorage.getItem('RATED_US_IN')
324
342
  const hasAnsweredLess30Days = alreadyAnswered ? isLessThan30Days(new Date(+alreadyAnswered), new Date(Date.now())) : false
343
+ const Link = useAnchorTag()
325
344
 
326
345
  //This effect is only used to remove from local storage unused keys from
327
346
  //previous rate us and contact us versions. We do not want to fill the users storage
@@ -344,18 +363,76 @@ const RateAndContactUsItem = ({ ...props }: Omit<MenuProps, 'sections'>) => {
344
363
  </button>
345
364
  }
346
365
  {(props.contactUs?.show) &&
347
- <button role="menuitem" className="toggle sections-footer" onClick={props.contactUs?.onClick}
348
- {...(props.contactUs.active ? { 'aria-current': 'page' } : undefined)}>
366
+ <Link href={props.contactUs?.href} className="toggle sections-footer" onClick={props.contactUs?.onClick}
367
+ {...(props.contactUs.active ? { 'aria-current': 'page' } : undefined)} target={props.contactUs?.target}>
349
368
  <IconBox aria-label={t.contactIcon}>
350
- <Support />
369
+ <MobileComments />
351
370
  </IconBox>
352
- <Text appearance="microtext1" ml={8} sx={{ marginTop: '3px' }}
371
+ <Text appearance="microtext1" ml={8} sx={{ marginTop: '3px' }}
353
372
  className="collapse" colorScheme="light.contrastText">{t.contactUs}</Text>
354
- </button>
373
+ </Link>
355
374
  }
356
375
  </>
357
376
  }
358
377
 
378
+ /**
379
+ * A menu item that is actually a subgroup and can be collapsed/expanded.
380
+ * @param props the props for the component {@link MenuSectionGroup} & { root: boolean }.
381
+
382
+ */
383
+ const CollapsibleSection = ({ label, open: initialValue, children, icon, setCurrentOverlay, listItems, isMenuCollapsed = true }
384
+ : MenuSection
385
+ & {setCurrentOverlay: (id: number | undefined) => void, listItems: (MenuSection | undefined)[], isMenuCollapsed?: boolean }) => {
386
+
387
+ const [open, setOpen] = useState(initialValue || false)
388
+ const menuGroupId = `menuGroup${label}`
389
+ const items = useMemo(() => children?.filter(i => !i.hidden).map(
390
+ (c) => (
391
+ <li
392
+ role="menuitem"
393
+ key={c.label as string}
394
+ title={c.label as string}
395
+ className={`section-submenu ${c.className} ${c.active ? 'active' : ''}`}>
396
+ <Section
397
+ id={listItems?.findIndex((item) => item?.label === c.label)} key={c.label as string}
398
+ {...c} hasContent={false} setCurrentOverlay={setCurrentOverlay} />
399
+ </li>
400
+ )),
401
+ [children])
402
+
403
+ return (
404
+ <>
405
+ {
406
+ isMenuCollapsed ? <Divider /> :
407
+ <a
408
+ onClick={() => setOpen(!open)}
409
+ onKeyDown={e => e.key === 'Enter' && setOpen(!open)}
410
+ className={listToClass(['item-row'])}
411
+ tabIndex={0}
412
+ aria-controls={menuGroupId}
413
+ aria-expanded={open}
414
+ >
415
+ <Flex alignItems="center" justifyContent="center" px={6}>
416
+ {icon}
417
+ <Text appearance="microtext1" className="section-label" ml={3} colorScheme="light.contrastText">
418
+ {label as string}
419
+ </Text>
420
+ <IconBox sx={{ ml: '14' }}>
421
+ <ChevronUpFill className={listToClass(['chevron', open ? 'open' : ''])} />
422
+ {/* <ChevronDown className={listToClass(['chevron', open ? 'open' : ''])} /> */}
423
+ </IconBox>
424
+ </Flex>
425
+ </a>
426
+ }
427
+ <MenuSectionGroup id={menuGroupId}
428
+ className={`${isMenuCollapsed || open ? 'open' : ''} root no-indentation`}
429
+ aria-hidden={!open}>
430
+ {items}
431
+ </MenuSectionGroup>
432
+ </>
433
+ )
434
+ }
435
+
359
436
  const dictionary = {
360
437
  en: {
361
438
  toggle: 'Show or hide the menu',
@@ -363,7 +440,7 @@ const dictionary = {
363
440
  settings: 'Settings',
364
441
  settingsIcon: 'Settings icon',
365
442
  hide: 'Hide',
366
- contactUs: 'Contact us',
443
+ contactUs: 'Support',
367
444
  contactIcon: 'Contact icon',
368
445
  rateUs: 'Rate us',
369
446
  rateUsIcon: 'Rate us icon',
@@ -374,7 +451,7 @@ const dictionary = {
374
451
  settings: 'Configurações',
375
452
  settingsIcon: 'Ícone de configurações',
376
453
  hide: 'Esconder',
377
- contactUs: 'Fale conosco',
454
+ contactUs: 'Suporte',
378
455
  contactIcon: 'Ícone de contato',
379
456
  rateUs: 'Avalie-nos',
380
457
  rateUsIcon: 'Avalie-nos icon',
@@ -142,6 +142,14 @@ export interface MenuSection extends Action {
142
142
  */
143
143
  className?: string,
144
144
  hidden?: boolean,
145
+ /**
146
+ * The items in this group. This property will create a accordion to include the items
147
+ */
148
+ children?: MenuSection[],
149
+ /**
150
+ * initial value to accordion when using children prop
151
+ */
152
+ open?: boolean,
145
153
  }
146
154
 
147
155
  interface BaseMenuProps {
@@ -228,6 +236,10 @@ interface BaseMenuProps {
228
236
  * A css class to pass to the button.
229
237
  */
230
238
  className?: string,
239
+ /**
240
+ * Target of the URL to open.
241
+ */
242
+ target?: React.AnchorHTMLAttributes<HTMLAnchorElement>['target'],
231
243
  },
232
244
  }
233
245
 
package/src/layout.css CHANGED
@@ -180,18 +180,20 @@ body {
180
180
  background: transparent;
181
181
  border: none;
182
182
  width: var(--menu-sections-width);
183
- height: var(--menu-item-height);
184
183
  display: flex;
185
184
  flex-direction: column;
186
185
  gap: 10px;
187
186
  align-items: flex-start;
188
187
  justify-content: center;
189
- transition: background-color 0.2s;
190
188
  cursor: pointer;
191
189
  position: relative;
192
190
  z-index: 2;
193
191
  }
194
192
 
193
+ #menuSections .toggle.sections-footer {
194
+ height: auto;
195
+ }
196
+
195
197
  .gradient-svg {
196
198
  width: 100px;
197
199
  height: 100px;
@@ -261,9 +263,8 @@ body {
261
263
  }
262
264
 
263
265
  #menuSections .toggle:hover,
264
- #menuSections > ul li a:hover,
265
- #menuSections .toggle:focus,
266
- #menuSections > ul li a:focus {
266
+ #menuSections > ul li a:hover
267
+ {
267
268
  background: var(--light-500);
268
269
  border-right: 1px solid var(--light-300);
269
270
  }