@stack-spot/portal-layout 2.35.1 → 2.36.0-beta.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 (45) hide show
  1. package/CHANGELOG.md +72 -0
  2. package/dist/Layout.d.ts +5 -1
  3. package/dist/Layout.d.ts.map +1 -1
  4. package/dist/Layout.js +28 -9
  5. package/dist/Layout.js.map +1 -1
  6. package/dist/LayoutOverlayManager.d.ts +77 -11
  7. package/dist/LayoutOverlayManager.d.ts.map +1 -1
  8. package/dist/LayoutOverlayManager.js +152 -47
  9. package/dist/LayoutOverlayManager.js.map +1 -1
  10. package/dist/components/NotificationCenter/NotificationsPanelFooter.js +1 -1
  11. package/dist/components/NotificationCenter/NotificationsPanelFooter.js.map +1 -1
  12. package/dist/components/NotificationCenter/dictionary.d.ts +1 -1
  13. package/dist/components/NotificationCenter/dictionary.d.ts.map +1 -1
  14. package/dist/components/NotificationCenter/dictionary.js +2 -2
  15. package/dist/components/NotificationCenter/dictionary.js.map +1 -1
  16. package/dist/components/OverlayContent.js +2 -2
  17. package/dist/components/error/ErrorBoundary.d.ts.map +1 -1
  18. package/dist/components/error/SilentErrorBoundary.d.ts.map +1 -1
  19. package/dist/components/menu/MenuSections.d.ts.map +1 -1
  20. package/dist/components/menu/MenuSections.js +10 -5
  21. package/dist/components/menu/MenuSections.js.map +1 -1
  22. package/dist/components/menu/types.d.ts +7 -0
  23. package/dist/components/menu/types.d.ts.map +1 -1
  24. package/dist/components/tour/StepNavigation.d.ts.map +1 -1
  25. package/dist/components/tour/StepNavigation.js +2 -1
  26. package/dist/components/tour/StepNavigation.js.map +1 -1
  27. package/dist/dictionary.js +2 -2
  28. package/dist/dictionary.js.map +1 -1
  29. package/dist/elements.d.ts +1 -0
  30. package/dist/elements.d.ts.map +1 -1
  31. package/dist/elements.js +1 -0
  32. package/dist/elements.js.map +1 -1
  33. package/dist/layout.css +30 -3
  34. package/package.json +6 -4
  35. package/src/Layout.tsx +67 -18
  36. package/src/LayoutOverlayManager.tsx +186 -48
  37. package/src/components/NotificationCenter/NotificationsPanelFooter.tsx +1 -1
  38. package/src/components/NotificationCenter/dictionary.ts +2 -2
  39. package/src/components/OverlayContent.tsx +2 -2
  40. package/src/components/menu/MenuSections.tsx +11 -5
  41. package/src/components/menu/types.ts +7 -0
  42. package/src/components/tour/StepNavigation.tsx +3 -1
  43. package/src/dictionary.ts +2 -2
  44. package/src/elements.ts +1 -0
  45. package/src/layout.css +30 -3
@@ -300,6 +300,13 @@ export interface MenuPropsWithDynamicContent extends BaseMenuProps {
300
300
  * Identifies each content that might be rendered by the menu. This prevents React Hook errors when the content is a React Hook function.
301
301
  */
302
302
  contentKey: React.Key;
303
+ /**
304
+ * The function that creates a config to render a third level nav menu content. It will be called only when the content is rendered,
305
+ * i.e. only when the content really needs to be rendered.
306
+ *
307
+ * Tip: this function can be a React Hook.
308
+ */
309
+ innerContent?: MenuSectionContent | (() => MenuSectionContent);
303
310
  }
304
311
  export type MenuProps = MenuPropsWithStaticContent | MenuPropsWithDynamicContent;
305
312
  export {};
@@ -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":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"StepNavigation.d.ts","sourceRoot":"","sources":["../../../src/components/tour/StepNavigation.tsx"],"names":[],"mappings":"AACA,OAAO,yCAAyC,CAAA;AAIhD,UAAU,sBAAsB;IAC9B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,UAAU,CAAC,EAAE,sBAAsB,CAAC;IACpC;;OAEG;IACH,UAAU,CAAC,EAAE,sBAAsB,CAAC;CACrC;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,GAAI,qCAAqC,eAAe,4CAsBlF,CAAA"}
1
+ {"version":3,"file":"StepNavigation.d.ts","sourceRoot":"","sources":["../../../src/components/tour/StepNavigation.tsx"],"names":[],"mappings":"AACA,OAAO,yCAAyC,CAAA;AAIhD,UAAU,sBAAsB;IAC9B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,UAAU,CAAC,EAAE,sBAAsB,CAAC;IACpC;;OAEG;IACH,UAAU,CAAC,EAAE,sBAAsB,CAAC;CACrC;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,GAAI,qCAAqC,eAAe,4CAwBlF,CAAA"}
@@ -10,7 +10,8 @@ import { useTour } from './hook.js';
10
10
  export const StepNavigation = ({ stepKey, nextButton, prevButton }) => {
11
11
  const { currentStep, steps, prevStep, finishStep } = useTour();
12
12
  const t = useTranslate(translations);
13
- return _jsxs(Flex, { w: 12, px: 5, py: 2, mt: "-1px", bg: "inverse.500", justifyContent: "space-between", alignItems: "center", children: [_jsxs(Text, { appearance: "microtext1", colorScheme: "inverse.contrastText", children: [currentStep + 1, " ", t.of, " ", steps.length] }), _jsxs(Flex, { sx: { gap: '8px' }, children: [currentStep >= 1 &&
13
+ return _jsxs(Flex, { w: 12, px: 5, py: 2, mt: "-1px", bg: "inverse.500", justifyContent: "space-between", alignItems: "center", children: [steps.length > 1 &&
14
+ _jsxs(Text, { appearance: "microtext1", colorScheme: "inverse.contrastText", children: [currentStep + 1, " ", t.of, " ", steps.length] }), _jsxs(Flex, { sx: { gap: '8px' }, children: [currentStep >= 1 &&
14
15
  _jsx(Button, { sx: { paddingInline: '20px' }, onClick: () => {
15
16
  prevStep?.();
16
17
  prevButton?.onClick?.();
@@ -1 +1 @@
1
- {"version":3,"file":"StepNavigation.js","sourceRoot":"","sources":["../../../src/components/tour/StepNavigation.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,yCAAyC,CAAA;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AAyBhC;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAmB,EAAE,EAAE;IACrF,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,OAAO,EAAE,CAAA;IAC9D,MAAM,CAAC,GAAG,YAAY,CAAC,YAAY,CAAC,CAAA;IAEpC,OAAO,MAAC,IAAI,IAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAC,MAAM,EAAC,EAAE,EAAC,aAAa,EAAC,cAAc,EAAC,eAAe,EAAC,UAAU,EAAC,QAAQ,aAC7G,MAAC,IAAI,IAAC,UAAU,EAAC,YAAY,EAAC,WAAW,EAAC,sBAAsB,aAAE,WAAW,GAAG,CAAC,OAAG,CAAC,CAAC,EAAE,OAAG,KAAK,CAAC,MAAM,IAAQ,EAC/G,MAAC,IAAI,IAAC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,aACrB,WAAW,IAAI,CAAC;wBACf,KAAC,MAAM,IAAC,EAAE,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE;gCACnD,QAAQ,EAAE,EAAE,CAAA;gCACZ,UAAU,EAAE,OAAO,EAAE,EAAE,CAAA;4BACzB,CAAC,EAAE,IAAI,EAAC,IAAI,EAAC,UAAU,EAAC,MAAM,EAAC,WAAW,EAAC,OAAO,YAC/C,UAAU,EAAE,IAAI,IAAI,CAAC,CAAC,IAAI,GACpB,EACX,KAAC,MAAM,IAAC,EAAE,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE;4BACnD,UAAU,EAAE,OAAO,EAAE,EAAE,CAAA;4BACvB,UAAU,CAAC,OAAO,CAAC,CAAA;wBACrB,CAAC,EAAE,IAAI,EAAC,IAAI,EAAC,WAAW,EAAC,OAAO,YAC7B,UAAU,EAAE,IAAI,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAChE,IACJ,IACF,CAAA;AACT,CAAC,CAAA;AAED,MAAM,YAAY,GAAG;IACnB,EAAE,EAAE;QACF,EAAE,EAAE,IAAI;QACR,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,MAAM;KACb;IACD,EAAE,EAAE;QACF,EAAE,EAAE,IAAI;QACR,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,YAAY;KACnB;CACF,CAAA"}
1
+ {"version":3,"file":"StepNavigation.js","sourceRoot":"","sources":["../../../src/components/tour/StepNavigation.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,yCAAyC,CAAA;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AAyBhC;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAmB,EAAE,EAAE;IACrF,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,OAAO,EAAE,CAAA;IAC9D,MAAM,CAAC,GAAG,YAAY,CAAC,YAAY,CAAC,CAAA;IAEpC,OAAO,MAAC,IAAI,IAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAC,MAAM,EAAC,EAAE,EAAC,aAAa,EAAC,cAAc,EAAC,eAAe,EAAC,UAAU,EAAC,QAAQ,aAC3G,KAAK,CAAC,MAAM,GAAG,CAAC;gBAChB,MAAC,IAAI,IAAC,UAAU,EAAC,YAAY,EAAC,WAAW,EAAC,sBAAsB,aAAE,WAAW,GAAG,CAAC,OAAG,CAAC,CAAC,EAAE,OAAG,KAAK,CAAC,MAAM,IAAQ,EAEjH,MAAC,IAAI,IAAC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,aACrB,WAAW,IAAI,CAAC;wBACf,KAAC,MAAM,IAAC,EAAE,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE;gCACnD,QAAQ,EAAE,EAAE,CAAA;gCACZ,UAAU,EAAE,OAAO,EAAE,EAAE,CAAA;4BACzB,CAAC,EAAE,IAAI,EAAC,IAAI,EAAC,UAAU,EAAC,MAAM,EAAC,WAAW,EAAC,OAAO,YAC/C,UAAU,EAAE,IAAI,IAAI,CAAC,CAAC,IAAI,GACpB,EACX,KAAC,MAAM,IAAC,EAAE,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE;4BACnD,UAAU,EAAE,OAAO,EAAE,EAAE,CAAA;4BACvB,UAAU,CAAC,OAAO,CAAC,CAAA;wBACrB,CAAC,EAAE,IAAI,EAAC,IAAI,EAAC,WAAW,EAAC,OAAO,YAC7B,UAAU,EAAE,IAAI,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAChE,IACJ,IACF,CAAA;AACT,CAAC,CAAA;AAED,MAAM,YAAY,GAAG;IACnB,EAAE,EAAE;QACF,EAAE,EAAE,IAAI;QACR,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,MAAM;KACb;IACD,EAAE,EAAE;QACF,EAAE,EAAE,IAAI;QACR,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,YAAY;KACnB;CACF,CAAA"}
@@ -1,4 +1,4 @@
1
- import { getLanguage, useTranslate } from '@stack-spot/portal-translate';
1
+ import { getLanguage, ptEn, useTranslate } from '@stack-spot/portal-translate';
2
2
  const dictionary = {
3
3
  en: {
4
4
  close: 'Close',
@@ -22,7 +22,7 @@ const dictionary = {
22
22
  */
23
23
  export const useDictionary = () => useTranslate(dictionary);
24
24
  export function getDictionary() {
25
- const language = getLanguage();
25
+ const language = getLanguage(ptEn);
26
26
  return dictionary[language];
27
27
  }
28
28
  //# sourceMappingURL=dictionary.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dictionary.js","sourceRoot":"","sources":["../src/dictionary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,WAAW,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAEpF,MAAM,UAAU,GAAG;IACjB,EAAE,EAAE;QACF,KAAK,EAAE,OAAO;QACd,eAAe,EAAE,kDAAkD;QACnE,OAAO,EAAE,SAAS;QAClB,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE,QAAQ;KACjB;IACD,EAAE,EAAE;QACF,KAAK,EAAE,QAAQ;QACf,eAAe,EAAE,4DAA4D;QAC7E,OAAO,EAAE,WAAW;QACpB,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,UAAU;QAClB,MAAM,EAAE,QAAQ;KACjB;CACmB,CAAA;AAEtB;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,CAAA;AAE3D,MAAM,UAAU,aAAa;IAC3B,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAC9B,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAA;AAC7B,CAAC"}
1
+ {"version":3,"file":"dictionary.js","sourceRoot":"","sources":["../src/dictionary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAE1F,MAAM,UAAU,GAAG;IACjB,EAAE,EAAE;QACF,KAAK,EAAE,OAAO;QACd,eAAe,EAAE,kDAAkD;QACnE,OAAO,EAAE,SAAS;QAClB,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE,QAAQ;KACjB;IACD,EAAE,EAAE;QACF,KAAK,EAAE,QAAQ;QACf,eAAe,EAAE,4DAA4D;QAC7E,OAAO,EAAE,WAAW;QACpB,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,UAAU;QAClB,MAAM,EAAE,QAAQ;KACjB;CACmB,CAAA;AAEtB;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,CAAA;AAE3D,MAAM,UAAU,aAAa;IAC3B,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,CAAA;IAClC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAA;AAC7B,CAAC"}
@@ -12,6 +12,7 @@ export declare const elementIds: {
12
12
  readonly header: "header";
13
13
  readonly menu: "menu";
14
14
  readonly menuContent: "menuContent";
15
+ readonly menuInnerContent: "menuInnerContent";
15
16
  readonly menuSections: "menuSections";
16
17
  readonly accessibilityAnnouncer: "accessibilityAnnouncer";
17
18
  };
@@ -1 +1 @@
1
- {"version":3,"file":"elements.d.ts","sourceRoot":"","sources":["../src/elements.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,UAAU;;;;;;;;;;;;;CAab,CAAA;AAEV,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,UAAU,CAAA;AACnD,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,aAAa,EAAE,WAAW,GAAG,IAAI,CAAC,CAAA;AAEtE;;GAEG;AACH,wBAAgB,iBAAiB,mBAKhC"}
1
+ {"version":3,"file":"elements.d.ts","sourceRoot":"","sources":["../src/elements.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;CAcb,CAAA;AAEV,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,UAAU,CAAA;AACnD,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,aAAa,EAAE,WAAW,GAAG,IAAI,CAAC,CAAA;AAEtE;;GAEG;AACH,wBAAgB,iBAAiB,mBAKhC"}
package/dist/elements.js CHANGED
@@ -12,6 +12,7 @@ export const elementIds = {
12
12
  header: 'header',
13
13
  menu: 'menu',
14
14
  menuContent: 'menuContent',
15
+ menuInnerContent: 'menuInnerContent',
15
16
  menuSections: 'menuSections',
16
17
  accessibilityAnnouncer: 'accessibilityAnnouncer',
17
18
  };
@@ -1 +1 @@
1
- {"version":3,"file":"elements.js","sourceRoot":"","sources":["../src/elements.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;IACpB,KAAK,EAAE,OAAO;IACd,UAAU,EAAE,YAAY;IACxB,YAAY,EAAE,cAAc;IAC5B,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,aAAa;IAC1B,YAAY,EAAE,cAAc;IAC5B,sBAAsB,EAAE,wBAAwB;CACxC,CAAA;AAKV;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAQ,MAAM,CAAC,IAAI,CAAC,UAAU,CAAqB,CAAC,MAAM,CACxD,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC,EAClE,EAAoB,CACrB,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"elements.js","sourceRoot":"","sources":["../src/elements.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;IACpB,KAAK,EAAE,OAAO;IACd,UAAU,EAAE,YAAY;IACxB,YAAY,EAAE,cAAc;IAC5B,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,aAAa;IAC1B,gBAAgB,EAAE,kBAAkB;IACpC,YAAY,EAAE,cAAc;IAC5B,sBAAsB,EAAE,wBAAwB;CACxC,CAAA;AAKV;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAQ,MAAM,CAAC,IAAI,CAAC,UAAU,CAAqB,CAAC,MAAM,CACxD,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC,EAClE,EAAoB,CACrB,CAAA;AACH,CAAC"}
package/dist/layout.css CHANGED
@@ -98,7 +98,12 @@ body {
98
98
  left: calc(var(--menu-sections-width) + var(--menu-content-width));
99
99
  }
100
100
 
101
- #layout.no-menu-sections:not(.menu-content-visible) #page {
101
+ #layout.menu-inner-content-visible #page {
102
+ left: calc(var(--menu-sections-width) + calc(var(--menu-content-width) * 2));
103
+ }
104
+
105
+ #layout.no-menu-sections:not(.menu-content-visible) #page,
106
+ #layout.no-menu-sections:not(.menu-inner-content-visible) #page {
102
107
  border-top-left-radius: 0;
103
108
  }
104
109
 
@@ -363,7 +368,8 @@ body {
363
368
  pointer-events: auto;
364
369
  }
365
370
 
366
- #menuContent {
371
+ #menuContent,
372
+ #menuInnerContent {
367
373
  width: var(--menu-content-width);
368
374
  transition: left ease-out var(--menu-animation-duration);
369
375
  background-color: var(--light-400);
@@ -375,7 +381,13 @@ body {
375
381
  border-top: 1px solid var(--light-300);
376
382
  }
377
383
 
378
- #menuContent .goBackLink {
384
+ #menuInnerContent {
385
+ left: var(--menu-content-width);
386
+ border-left: 1px solid var(--light-300);
387
+ }
388
+
389
+ #menuContent .goBackLink,
390
+ #menuInnerContent .goBackLink {
379
391
  display: flex;
380
392
  flex-direction: row;
381
393
  align-items: center;
@@ -482,6 +494,21 @@ body {
482
494
  right: 0;
483
495
  }
484
496
 
497
+ #modal .modal-instance,
498
+ #rightPanel .right-panel-instance {
499
+ flex-direction: column;
500
+ flex: 1;
501
+ overflow: hidden;
502
+ display: none;
503
+ &.active {
504
+ display: flex;
505
+ }
506
+ &.disabled {
507
+ pointer-events: none;
508
+ opacity: 0.7;
509
+ }
510
+ }
511
+
485
512
  #bottomPanel {
486
513
  position: fixed;
487
514
  display: flex;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stack-spot/portal-layout",
3
- "version": "2.35.1",
3
+ "version": "2.36.0-beta.1",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -14,13 +14,14 @@
14
14
  "@citric/icons": "^5.9.0",
15
15
  "@citric/ui": "^6.10.1",
16
16
  "@stack-spot/portal-theme": "^1.1.1",
17
- "@stack-spot/portal-translate": "^1.1.0",
18
- "@stack-spot/portal-components": "^2.22.4",
17
+ "@stack-spot/portal-translate": "~2.1.0",
18
+ "@stack-spot/portal-components": "^2.27.5",
19
19
  "react": "^18.2.0",
20
20
  "react-dom": "^18.2.0",
21
21
  "styled-components": "^6.1.10"
22
22
  },
23
23
  "devDependencies": {
24
+ "@types/lodash": "^4.14.202",
24
25
  "@types/react": "^18.2.37",
25
26
  "@types/react-dom": "^18.2.15",
26
27
  "@typescript-eslint/eslint-plugin": "^6.10.0",
@@ -45,6 +46,7 @@
45
46
  },
46
47
  "dependencies": {
47
48
  "react-toastify": "^10.0.5",
48
- "reactour": "^1.19.4"
49
+ "reactour": "^1.19.4",
50
+ "lodash": "^4.17.21"
49
51
  }
50
52
  }
package/src/Layout.tsx CHANGED
@@ -1,5 +1,5 @@
1
1
  import { FadingOverflow } from '@stack-spot/portal-components/FadingOverflow'
2
- import { CSSToCitricAdapter, WithStyle } from '@stack-spot/portal-theme'
2
+ import { CSSToCitricAdapter, listToClass, WithStyle } from '@stack-spot/portal-theme'
3
3
  import '@stack-spot/portal-theme/dist/theme.css'
4
4
  import { ReactElement, ReactNode, useEffect } from 'react'
5
5
  import { overlay } from './LayoutOverlayManager'
@@ -11,7 +11,7 @@ import { DescriptionFn, ErrorHandler, ErrorManager } from './components/error/Er
11
11
  import { SilentErrorBoundary } from './components/error/SilentErrorBoundary'
12
12
  import { MenuContent } from './components/menu/MenuContent'
13
13
  import { MenuSections } from './components/menu/MenuSections'
14
- import { MenuProps } from './components/menu/types'
14
+ import { MenuProps, MenuPropsWithDynamicContent } from './components/menu/types'
15
15
  import { elementIds } from './elements'
16
16
  import './layout.css'
17
17
 
@@ -56,6 +56,10 @@ interface RawProps extends WithStyle {
56
56
  * The React element to go in the menu content.
57
57
  */
58
58
  menuContent?: ReactElement,
59
+ /**
60
+ * The React element to go in the menu inner content (third level nav).
61
+ */
62
+ menuInnerContent?: ReactElement,
59
63
  /**
60
64
  * The React element to go in the header.
61
65
  */
@@ -83,7 +87,7 @@ interface RawProps extends WithStyle {
83
87
  * @param props the component's props {@link RawProps}.
84
88
  */
85
89
  export const RawLayout = (
86
- { menuSections, menuContent, header, children,
90
+ { menuSections, menuContent, menuInnerContent, header, children,
87
91
  extra, errorDescriptor, onError, className, style }:
88
92
  RawProps,
89
93
  ) => {
@@ -99,30 +103,38 @@ export const RawLayout = (
99
103
  useEffect(() => {
100
104
  const classList = document.getElementById(elementIds.layout)?.classList
101
105
  if (!classList) return
106
+ const hasMenuContent = !!menuContent && !!document.getElementById(elementIds.menuContent)?.children.length
107
+ const hasMenuInnerContent = !!menuInnerContent && !!document.getElementById(elementIds.menuInnerContent)?.children.length
102
108
 
103
- if (menuContent && document.getElementById(elementIds.menuContent)?.children.length) {
109
+ if (hasMenuContent) {
104
110
  classList.add('menu-content-visible')
105
- if (!classList.contains('menu-manual'))
111
+ if (!classList.contains('menu-manual')) {
106
112
  classList.add('menu-compact')
107
- }
108
- else {
113
+ }
114
+ } else {
109
115
  classList.remove('menu-content-visible')
110
- if (!classList.contains('menu-manual'))
111
- classList.remove('menu-compact')
112
116
  }
117
+
118
+ if (hasMenuInnerContent) {
119
+ classList.add('menu-inner-content-visible')
120
+ } else {
121
+ classList.remove('menu-inner-content-visible')
122
+ }
123
+
113
124
  classList[menuSections ? 'remove' : 'add']('no-menu-sections')
114
125
  if (className) classList.add(...className.split(/\s+/))
115
-
116
- })
117
-
126
+ }, [menuContent, menuInnerContent, menuSections, className])
118
127
 
119
128
  return (
120
129
  <CSSToCitricAdapter>
121
130
  <WelcomeTour />
122
- <div id={elementIds.layout} style={style}>
131
+ <div id={elementIds.layout} style={style} className="menu-manual menu-compact">
123
132
  {header && <header id={elementIds.header}><SilentErrorBoundary>{header}</SilentErrorBoundary></header>}
124
133
  {extra && <SilentErrorBoundary>{extra}</SilentErrorBoundary>}
125
134
  <aside id={elementIds.menu}>
135
+ {menuInnerContent &&
136
+ <nav role="menubar" id={elementIds.menuInnerContent}><SilentErrorBoundary>{menuInnerContent}</SilentErrorBoundary></nav>
137
+ }
126
138
  <nav role="menubar" id={elementIds.menuContent}><SilentErrorBoundary>{menuContent}</SilentErrorBoundary></nav>
127
139
  {menuSections &&
128
140
  <FadingOverflow sides={['top', 'bottom']} scroll="arrows">
@@ -137,8 +149,37 @@ export const RawLayout = (
137
149
  </div>}
138
150
  <div id={elementIds.bottomDialog} role="dialog"><ErrorBoundary>{bottomDialog}</ErrorBoundary></div>
139
151
  <div id={elementIds.backdrop}>
140
- <div id={elementIds.rightPanel} aria-modal role="dialog"><ErrorBoundary>{rightPanel}</ErrorBoundary></div>
141
- <div id={elementIds.modal} aria-modal role="dialog"><ErrorBoundary>{modal}</ErrorBoundary></div>
152
+ <div id={elementIds.rightPanel} aria-modal role="dialog">
153
+ <ErrorBoundary>
154
+ {rightPanel.length === 1 && !rightPanel[0].stack
155
+ ? rightPanel[0].element
156
+ : rightPanel.map(
157
+ (m, i) => <div
158
+ key={i}
159
+ className={listToClass([
160
+ 'right-panel-instance',
161
+ (i === rightPanel.length - 1) && 'active',
162
+ modal.length > 0 && 'disabled',
163
+ ])}
164
+ {...(modal.length > 0 ? { inert: true } : {})}
165
+ >
166
+ {m.element}
167
+ </div>,
168
+ )
169
+ }
170
+ </ErrorBoundary>
171
+ </div>
172
+ <div id={elementIds.modal} aria-modal role="dialog">
173
+ <ErrorBoundary>
174
+ {modal.length === 1 && !modal[0].stack
175
+ ? modal[0].element
176
+ : modal.map(
177
+ (m, i) =>
178
+ <div key={i} className={listToClass(['modal-instance', (i === modal.length - 1) && 'active'])}>{m.element}</div>,
179
+ )
180
+ }
181
+ </ErrorBoundary>
182
+ </div>
142
183
  </div>
143
184
  <Toaster />
144
185
  <div id={elementIds.accessibilityAnnouncer} aria-atomic aria-live="assertive">
@@ -153,6 +194,8 @@ const MenuContentRenderer = ({ content }: Required<Pick<Props['menu'], 'content'
153
194
  return <MenuContent {...menuContent} />
154
195
  }
155
196
 
197
+ const hasInnerContent = (menu: MenuProps): menu is MenuPropsWithDynamicContent => 'innerContent' in menu
198
+
156
199
  /**
157
200
  * Renders the layout with a menu and header that follow the config objects passed as parameter.
158
201
  * @param props the component's props {@link Props}.
@@ -161,9 +204,15 @@ export const Layout = ({ menu, header, children, extra, errorDescriptor, onError
161
204
  <RawLayout
162
205
  header={<Header {...header} />}
163
206
  menuSections={menu.sections ? <MenuSections {...menu} /> : undefined}
164
- menuContent={menu.content
165
- ? <MenuContentRenderer key={'contentKey' in menu ? menu.contentKey : undefined} content={menu.content} />
166
- : undefined
207
+ menuContent={
208
+ menu.content
209
+ ? <MenuContentRenderer key={'contentKey' in menu ? menu.contentKey : undefined} content={menu.content} />
210
+ : undefined
211
+ }
212
+ menuInnerContent={
213
+ hasInnerContent(menu) && menu.innerContent
214
+ ? <MenuContentRenderer key={'contentKey' in menu ? menu.contentKey : undefined} content={menu.innerContent} />
215
+ : undefined
167
216
  }
168
217
  errorDescriptor={errorDescriptor}
169
218
  onError={onError}