@stack-spot/portal-layout 0.0.2 → 0.0.3

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 (49) hide show
  1. package/dist/Layout.d.ts +3 -3
  2. package/dist/Layout.d.ts.map +1 -1
  3. package/dist/Layout.js +7 -1
  4. package/dist/Layout.js.map +1 -1
  5. package/dist/LayoutOverlayManager.d.ts +22 -7
  6. package/dist/LayoutOverlayManager.d.ts.map +1 -1
  7. package/dist/LayoutOverlayManager.js +26 -19
  8. package/dist/LayoutOverlayManager.js.map +1 -1
  9. package/dist/components/Dialog.d.ts +9 -1
  10. package/dist/components/Dialog.d.ts.map +1 -1
  11. package/dist/components/Dialog.js +8 -3
  12. package/dist/components/Dialog.js.map +1 -1
  13. package/dist/components/Menu/MenuContent.d.ts +1 -1
  14. package/dist/components/Menu/MenuContent.d.ts.map +1 -1
  15. package/dist/components/Menu/MenuContent.js +39 -12
  16. package/dist/components/Menu/MenuContent.js.map +1 -1
  17. package/dist/components/Menu/MenuSections.d.ts +1 -1
  18. package/dist/components/Menu/MenuSections.d.ts.map +1 -1
  19. package/dist/components/Menu/MenuSections.js +31 -8
  20. package/dist/components/Menu/MenuSections.js.map +1 -1
  21. package/dist/components/Menu/PageSelector.d.ts +1 -1
  22. package/dist/components/Menu/PageSelector.d.ts.map +1 -1
  23. package/dist/components/Menu/PageSelector.js +9 -3
  24. package/dist/components/Menu/PageSelector.js.map +1 -1
  25. package/dist/components/Menu/types.d.ts +40 -7
  26. package/dist/components/Menu/types.d.ts.map +1 -1
  27. package/dist/components/OverlayContent.d.ts.map +1 -1
  28. package/dist/components/OverlayContent.js +3 -1
  29. package/dist/components/OverlayContent.js.map +1 -1
  30. package/dist/components/SelectionList.d.ts.map +1 -1
  31. package/dist/components/SelectionList.js +5 -1
  32. package/dist/components/SelectionList.js.map +1 -1
  33. package/dist/index.d.ts +2 -0
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +2 -0
  36. package/dist/index.js.map +1 -1
  37. package/dist/layout.css +16 -2
  38. package/package.json +2 -2
  39. package/src/Layout.tsx +13 -5
  40. package/src/LayoutOverlayManager.tsx +42 -19
  41. package/src/components/Dialog.tsx +34 -6
  42. package/src/components/Menu/MenuContent.tsx +51 -15
  43. package/src/components/Menu/MenuSections.tsx +47 -11
  44. package/src/components/Menu/PageSelector.tsx +24 -12
  45. package/src/components/Menu/types.ts +43 -7
  46. package/src/components/OverlayContent.tsx +3 -1
  47. package/src/components/SelectionList.tsx +5 -1
  48. package/src/index.ts +2 -0
  49. package/src/layout.css +16 -2
@@ -1 +1 @@
1
- {"version":3,"file":"PageSelector.js","sourceRoot":"","sources":["../../../src/components/Menu/PageSelector.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PageSelector.js","sourceRoot":"","sources":["../../../src/components/Menu/PageSelector.tsx"],"names":[],"mappings":"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"}
@@ -1,14 +1,21 @@
1
1
  import { ReactElement } from 'react';
2
2
  import { Action } from '../types';
3
- export interface ItemGroup {
3
+ interface BaseMenuItem {
4
+ hidden?: boolean;
5
+ icon?: React.ReactElement;
6
+ /**
7
+ * Whether to wrap overflowing text, just hide or hide and add an ellipsis (...).
8
+ * @default 'wrap'
9
+ */
10
+ overflow?: 'hidden' | 'wrap' | 'ellipsis';
11
+ }
12
+ export interface ItemGroup extends BaseMenuItem {
4
13
  label: string;
5
14
  children: MenuItem[];
6
15
  open?: boolean;
7
- hidden?: boolean;
8
16
  }
9
- export interface MenuAction extends Action {
17
+ export interface MenuAction extends Action, BaseMenuItem {
10
18
  active?: boolean;
11
- hidden?: boolean;
12
19
  }
13
20
  export type MenuItem = ItemGroup | MenuAction;
14
21
  export interface MenuButton extends Action {
@@ -24,6 +31,7 @@ export interface Selector {
24
31
  button?: Action;
25
32
  title?: string;
26
33
  subtitle?: string;
34
+ loading?: boolean;
27
35
  }
28
36
  export interface MenuSectionContent {
29
37
  goBack?: Action;
@@ -31,15 +39,40 @@ export interface MenuSectionContent {
31
39
  subtitle?: string;
32
40
  pageSelector?: Selector;
33
41
  options?: MenuItem[];
42
+ loading?: boolean;
43
+ error?: string;
34
44
  }
35
45
  export interface MenuSection extends Action {
36
46
  icon: ReactElement;
37
- content?: MenuSectionContent;
47
+ /**
48
+ * The content or a function that creates the content.
49
+ * If this is a function, it will be called only when the section is hovered, i.e. only when the content really needs to be rendered.
50
+ * Tip: this function can be a React Hook.
51
+ */
52
+ content?: MenuSectionContent | (() => MenuSectionContent);
38
53
  active?: boolean;
54
+ onOpen?: () => void;
39
55
  }
40
- export interface MenuProps {
56
+ interface BaseMenuProps {
41
57
  sections: MenuSection[];
42
- content?: MenuSectionContent;
43
58
  compact?: boolean;
44
59
  }
60
+ interface MenuPropsWithStaticContent extends BaseMenuProps {
61
+ content?: MenuSectionContent;
62
+ }
63
+ interface MenuPropsWithDynamicContent extends BaseMenuProps {
64
+ /**
65
+ * The function that creates the content. It will be called only when the content is rendered, i.e. only when the content really needs to
66
+ * be rendered.
67
+ *
68
+ * Tip: this function can be a React Hook.
69
+ */
70
+ content: MenuSectionContent | (() => MenuSectionContent);
71
+ /**
72
+ * Identifies each content that might be rendered by the menu. This prevents React Hook errors when the content is a React Hook function.
73
+ */
74
+ contentKey: React.Key;
75
+ }
76
+ export type MenuProps = MenuPropsWithStaticContent | MenuPropsWithDynamicContent;
77
+ export {};
45
78
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/Menu/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAA;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,QAAQ,EAAE,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,UAAW,SAAQ,MAAM;IACxC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAA;AAE7C,MAAM,WAAW,UAAW,SAAQ,MAAM;IACxC,IAAI,CAAC,EAAE,YAAY,CAAC;CACrB;AAED,MAAM,WAAW,YAAa,SAAQ,MAAM;IAC1C,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,YAAY,CAAC;CACrB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,QAAQ,CAAC;IACxB,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,WAAY,SAAQ,MAAM;IACzC,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/Menu/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAA;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC,UAAU,YAAY;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC;IAC1B;;;OAGG;IACH,QAAQ,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;CAC3C;AAED,MAAM,WAAW,SAAU,SAAQ,YAAY;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,QAAQ,EAAE,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,UAAW,SAAQ,MAAM,EAAE,YAAY;IACtD,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAA;AAE7C,MAAM,WAAW,UAAW,SAAQ,MAAM;IACxC,IAAI,CAAC,EAAE,YAAY,CAAC;CACrB;AAED,MAAM,WAAW,YAAa,SAAQ,MAAM;IAC1C,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,YAAY,CAAC;CACrB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,QAAQ,CAAC;IACxB,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAY,SAAQ,MAAM;IACzC,IAAI,EAAE,YAAY,CAAC;IACnB;;;;OAIG;IACH,OAAO,CAAC,EAAE,kBAAkB,GAAG,CAAC,MAAM,kBAAkB,CAAC,CAAC;IAC1D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,UAAU,aAAa;IACrB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,UAAU,0BAA2B,SAAQ,aAAa;IACxD,OAAO,CAAC,EAAE,kBAAkB,CAAC;CAC9B;AAED,UAAU,2BAA4B,SAAQ,aAAa;IACzD;;;;;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"}
@@ -1 +1 @@
1
- {"version":3,"file":"OverlayContent.d.ts","sourceRoot":"","sources":["../../src/components/OverlayContent.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAsB,MAAM,0BAA0B,CAAA;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGjC,MAAM,WAAW,mBAAoB,SAAQ,SAAS;IACpD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,SAAS,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,UAAU,KAAM,SAAQ,mBAAmB;IACzC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;CACzB;AAqBD,eAAO,MAAM,cAAc,mEAAoE,KAAK,4CAWnG,CAAA"}
1
+ {"version":3,"file":"OverlayContent.d.ts","sourceRoot":"","sources":["../../src/components/OverlayContent.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAsB,MAAM,0BAA0B,CAAA;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGjC,MAAM,WAAW,mBAAoB,SAAQ,SAAS;IACpD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,SAAS,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,UAAU,KAAM,SAAQ,mBAAmB;IACzC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;CACzB;AAuBD,eAAO,MAAM,cAAc,mEAAoE,KAAK,4CAWnG,CAAA"}
@@ -14,11 +14,13 @@ const ContentBox = styled.section `
14
14
  }
15
15
  &.panel {
16
16
  padding: 20px;
17
+ display: flex;
18
+ flex-direction: column;
19
+ flex: 1;
17
20
  }
18
21
  header {
19
22
  display: flex;
20
23
  flex-direction: row;
21
- flex: 1;
22
24
  margin-bottom: 1.25rem;
23
25
  }
24
26
  `;
@@ -1 +1 @@
1
- {"version":3,"file":"OverlayContent.js","sourceRoot":"","sources":["../../src/components/OverlayContent.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACvC,OAAO,EAAa,WAAW,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAA;AAExE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAc1C,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAA;;;;sBAIX,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;;;;;;;;;;;;;CAa7C,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAS,EAAE,EAAE,CAAC,CACvG,MAAC,UAAU,IAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,aACjE,6BACE,MAAC,IAAI,IAAC,aAAa,EAAC,QAAQ,EAAC,IAAI,EAAE,CAAC,aAClC,KAAC,IAAI,IAAC,UAAU,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,YAAG,KAAK,GAAQ,EAC/D,QAAQ,IAAI,KAAC,IAAI,IAAC,UAAU,EAAC,OAAO,EAAC,WAAW,EAAC,WAAW,YAAE,QAAQ,GAAQ,IAC1E,EACP,KAAC,UAAU,IAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAC,OAAO,gBAAY,OAAO,YAAC,KAAC,SAAS,KAAG,GAAa,IAClF,EACR,QAAQ,IACE,CACd,CAAA"}
1
+ {"version":3,"file":"OverlayContent.js","sourceRoot":"","sources":["../../src/components/OverlayContent.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACvC,OAAO,EAAa,WAAW,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAA;AAExE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAc1C,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAA;;;;sBAIX,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;CAe7C,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAS,EAAE,EAAE,CAAC,CACvG,MAAC,UAAU,IAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,aACjE,6BACE,MAAC,IAAI,IAAC,aAAa,EAAC,QAAQ,EAAC,IAAI,EAAE,CAAC,aAClC,KAAC,IAAI,IAAC,UAAU,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,YAAG,KAAK,GAAQ,EAC/D,QAAQ,IAAI,KAAC,IAAI,IAAC,UAAU,EAAC,OAAO,EAAC,WAAW,EAAC,WAAW,YAAE,QAAQ,GAAQ,IAC1E,EACP,KAAC,UAAU,IAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAC,OAAO,gBAAY,OAAO,YAAC,KAAC,SAAS,KAAG,GAAa,IAClF,EACR,QAAQ,IACE,CACd,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"SelectionList.d.ts","sourceRoot":"","sources":["../../src/components/SelectionList.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAsB,MAAM,0BAA0B,CAAA;AACxE,OAAO,EAAE,YAAY,EAAqD,MAAM,OAAO,CAAA;AAEvF,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAEhC,UAAU,YAAY;IACpB,IAAI,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC;IAC1B,SAAS,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC;CAChC;AAED,MAAM,WAAW,UAAW,SAAQ,YAAY,EAAE,MAAM;IACtD,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,UAAU,SAAS;IACjB,IAAI,CAAC,EAAE,SAAS,GAAG,aAAa,CAAC;IACjC,QAAQ,EAAE,QAAQ,EAAE,CAAC;CACtB;AAED,UAAU,WAAY,SAAQ,SAAS;IACrC,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,eAAgB,SAAQ,SAAS,EAAE,YAAY;IACvD,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,KAAK,QAAQ,GAAG,WAAW,GAAG,eAAe,GAAG,UAAU,CAAA;AAU1D,MAAM,WAAW,kBAAmB,SAAQ,SAAS;IACnD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AA6FD,eAAO,MAAM,aAAa,4EAEvB,kBAAkB,4CAuDpB,CAAA"}
1
+ {"version":3,"file":"SelectionList.d.ts","sourceRoot":"","sources":["../../src/components/SelectionList.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAsB,MAAM,0BAA0B,CAAA;AACxE,OAAO,EAAE,YAAY,EAAqD,MAAM,OAAO,CAAA;AAEvF,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAEhC,UAAU,YAAY;IACpB,IAAI,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC;IAC1B,SAAS,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC;CAChC;AAED,MAAM,WAAW,UAAW,SAAQ,YAAY,EAAE,MAAM;IACtD,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,UAAU,SAAS;IACjB,IAAI,CAAC,EAAE,SAAS,GAAG,aAAa,CAAC;IACjC,QAAQ,EAAE,QAAQ,EAAE,CAAC;CACtB;AAED,UAAU,WAAY,SAAQ,SAAS;IACrC,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,eAAgB,SAAQ,SAAS,EAAE,YAAY;IACvD,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,KAAK,QAAQ,GAAG,WAAW,GAAG,eAAe,GAAG,UAAU,CAAA;AAU1D,MAAM,WAAW,kBAAmB,SAAQ,SAAS;IACnD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AAiGD,eAAO,MAAM,aAAa,4EAEvB,kBAAkB,4CAuDpB,CAAA"}
@@ -8,7 +8,8 @@ import { styled } from 'styled-components';
8
8
  const ANIMATION_DURATION_MS = 300;
9
9
  const SelectionBox = styled.div `
10
10
  max-height: 0;
11
- overflow: hidden;
11
+ overflow-y: auto;
12
+ overflow-x: hidden;
12
13
  transition: max-height ease-in ${ANIMATION_DURATION_MS / 1000}s;
13
14
  z-index: 1;
14
15
  box-shadow: 4px 4px 48px #000;
@@ -40,6 +41,9 @@ const SelectionBox = styled.div `
40
41
  }
41
42
  .label {
42
43
  flex: 1;
44
+ white-space: nowrap;
45
+ overflow: hidden;
46
+ text-overflow: ellipsis;
43
47
  }
44
48
  }
45
49
 
@@ -1 +1 @@
1
- {"version":3,"file":"SelectionList.js","sourceRoot":"","sources":["../../src/components/SelectionList.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SelectionList.js","sourceRoot":"","sources":["../../src/components/SelectionList.tsx"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,10 +1,12 @@
1
1
  export { Layout } from './Layout';
2
2
  export { overlay } from './LayoutOverlayManager';
3
+ export { Dialog } from './components/Dialog';
3
4
  export { Header, HeaderProps } from './components/Header';
4
5
  export { StackspotLogo } from './components/Logo';
5
6
  export { MenuContent } from './components/Menu/MenuContent';
6
7
  export { MenuSections } from './components/Menu/MenuSections';
7
8
  export * from './components/Menu/types';
9
+ export { OverlayContent } from './components/OverlayContent';
8
10
  export { ListAction, SelectionList, SelectionListProps } from './components/SelectionList';
9
11
  export * from './components/types';
10
12
  export * from './errors';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAChD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAC7D,cAAc,yBAAyB,CAAA;AACvC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC1F,cAAc,oBAAoB,CAAA;AAClC,cAAc,UAAU,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAC7D,cAAc,yBAAyB,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC5D,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC1F,cAAc,oBAAoB,CAAA;AAClC,cAAc,UAAU,CAAA"}
package/dist/index.js CHANGED
@@ -1,10 +1,12 @@
1
1
  export { Layout } from './Layout';
2
2
  export { overlay } from './LayoutOverlayManager';
3
+ export { Dialog } from './components/Dialog';
3
4
  export { Header } from './components/Header';
4
5
  export { StackspotLogo } from './components/Logo';
5
6
  export { MenuContent } from './components/Menu/MenuContent';
6
7
  export { MenuSections } from './components/Menu/MenuSections';
7
8
  export * from './components/Menu/types';
9
+ export { OverlayContent } from './components/OverlayContent';
8
10
  export { SelectionList } from './components/SelectionList';
9
11
  export * from './components/types';
10
12
  export * from './errors';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAChD,OAAO,EAAE,MAAM,EAAe,MAAM,qBAAqB,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAC7D,cAAc,yBAAyB,CAAA;AACvC,OAAO,EAAc,aAAa,EAAsB,MAAM,4BAA4B,CAAA;AAC1F,cAAc,oBAAoB,CAAA;AAClC,cAAc,UAAU,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EAAE,MAAM,EAAe,MAAM,qBAAqB,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAC7D,cAAc,yBAAyB,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC5D,OAAO,EAAc,aAAa,EAAsB,MAAM,4BAA4B,CAAA;AAC1F,cAAc,oBAAoB,CAAA;AAClC,cAAc,UAAU,CAAA"}
package/dist/layout.css CHANGED
@@ -298,11 +298,25 @@ body {
298
298
  display: flex;
299
299
  flex-direction: column;
300
300
  top: var(--header-height);
301
- right: -307px;
302
301
  bottom: 0;
303
- width: 307px;
304
302
  transition: right var(--right-panel-animation-duration);
305
303
  background-color: var(--light-400);
304
+ right: -800px;
305
+ }
306
+
307
+ #rightPanel.small {
308
+ right: -400px;
309
+ width: 400px;
310
+ }
311
+
312
+ #rightPanel.medium {
313
+ right: -600px;
314
+ width: 600px;
315
+ }
316
+
317
+ #rightPanel.large {
318
+ right: -800px;
319
+ width: 800px;
306
320
  }
307
321
 
308
322
  #rightPanel.visible {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stack-spot/portal-layout",
3
- "version": "0.0.2",
3
+ "version": "0.0.3",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -8,7 +8,7 @@
8
8
  "@citric/core": "^5.3.1",
9
9
  "@citric/icons": "^5.3.1",
10
10
  "@citric/ui": "^5.3.1",
11
- "@stack-spot/portal-theme": "0.0.2",
11
+ "@stack-spot/portal-theme": "0.0.3",
12
12
  "react": "^18.2.0",
13
13
  "react-dom": "^18.2.0",
14
14
  "styled-components": "6.1.1"
package/src/Layout.tsx CHANGED
@@ -1,6 +1,6 @@
1
1
  import { CSSToCitricAdapter, listToClass, WithStyle } from '@stack-spot/portal-theme'
2
2
  import '@stack-spot/portal-theme/dist/theme.css'
3
- import { ReactElement } from 'react'
3
+ import { ReactElement, ReactNode } from 'react'
4
4
  import { Header, HeaderProps } from './components/Header'
5
5
  import { MenuContent } from './components/Menu/MenuContent'
6
6
  import { MenuSections } from './components/Menu/MenuSections'
@@ -12,14 +12,14 @@ import { overlay } from './LayoutOverlayManager'
12
12
  interface Props extends WithStyle {
13
13
  menu: MenuProps,
14
14
  header: HeaderProps,
15
- children: ReactElement,
15
+ children: ReactNode,
16
16
  }
17
17
 
18
18
  interface RawProps extends WithStyle {
19
19
  menuSections: ReactElement,
20
20
  menuContent?: ReactElement,
21
21
  header: ReactElement,
22
- children: ReactElement,
22
+ children: ReactNode,
23
23
  compactMenu?: boolean,
24
24
  }
25
25
 
@@ -54,11 +54,19 @@ export const RawLayout = ({ menuSections, menuContent, header, compactMenu = tru
54
54
  )
55
55
  }
56
56
 
57
+ const MenuContentRenderer = ({ content }: Required<Pick<Props['menu'], 'content'>>) => {
58
+ const menuContent = typeof content === 'function' ? content() : content
59
+ return <MenuContent {...menuContent} />
60
+ }
61
+
57
62
  export const Layout = ({ menu, header, children, className, style }: Props) => (
58
63
  <RawLayout
59
64
  header={<Header {...header} />}
60
- menuSections={<MenuSections sections={menu.sections} />}
61
- menuContent={menu.content ? <MenuContent {...menu.content} /> : undefined}
65
+ menuSections={<MenuSections {...menu} />}
66
+ menuContent={menu.content
67
+ ? <MenuContentRenderer key={'contentKey' in menu ? menu.contentKey : undefined} content={menu.content} />
68
+ : undefined
69
+ }
62
70
  compactMenu={menu.compact}
63
71
  className={className}
64
72
  style={style}
@@ -13,6 +13,8 @@ interface AlertOptions extends Omit<DialogOptions, 'cancel'> {
13
13
  }
14
14
 
15
15
  type BottomDialogOptions = Omit<DialogOptions, 'title'>
16
+ type OverlaySize = 'small' | 'medium' | 'large'
17
+ type ModalSize = 'fit-content' | OverlaySize
16
18
 
17
19
  interface LayoutElements {
18
20
  backdrop: HTMLElement | null,
@@ -29,7 +31,15 @@ interface OverlayContentSetter {
29
31
  bottomDialog?: SetContentFn,
30
32
  }
31
33
 
32
- type ModalSize = 'fit-content' | 'small' | 'medium' | 'large'
34
+ interface CustomModalOptions {
35
+ size?: ModalSize,
36
+ onClose?: () => void,
37
+ }
38
+
39
+ interface CustomRightPanelOptions {
40
+ size?: OverlaySize,
41
+ onClose?: () => void,
42
+ }
33
43
 
34
44
  const BACKDROP_ID = 'backdrop'
35
45
  const MODAL_ID = 'modal'
@@ -71,23 +81,22 @@ class LayoutOverlayManager {
71
81
  return { modal, rightPanel, bottomDialog }
72
82
  }
73
83
 
74
- showCustomModal(content: ReactElement, size: ModalSize = 'medium') {
84
+ showCustomModal(content: React.ReactElement, { size = 'medium', onClose }: CustomModalOptions = {}) {
75
85
  if (!this.elements?.modal) throw new ElementNotFound('modal', MODAL_ID)
76
86
  if (!this.setContent.modal) throw new LayoutError('unable to show modal, because it has not been setup yet.')
87
+ this.onModalClose = onClose
77
88
  this.setContent.modal(content)
78
89
  this.elements.backdrop?.setAttribute('class', 'visible')
79
90
  this.elements.modal.setAttribute('class', `visible ${size}`)
80
91
  }
81
92
 
82
- showModal(props: OverlayContentProps) {
83
- this.onModalClose = props.onClose
84
- this.showCustomModal(<OverlayContent {...props} onClose={() => this.closeModal()} type="modal" />)
93
+ showModal({ size, ...props }: OverlayContentProps & { size?: ModalSize }) {
94
+ this.showCustomModal(<OverlayContent {...props} onClose={() => this.closeModal()} type="modal" />, { size, onClose: props.onClose })
85
95
  }
86
96
 
87
97
  private showDialog(options: DialogOptions): Promise<boolean> {
88
98
  let dialogResult = false
89
99
  return new Promise((resolve, reject) => {
90
- this.onModalClose = () => resolve(dialogResult)
91
100
  try {
92
101
  this.showCustomModal(
93
102
  <Dialog
@@ -98,7 +107,7 @@ class LayoutOverlayManager {
98
107
  this.closeModal()
99
108
  }}
100
109
  />,
101
- 'small',
110
+ { size: 'small', onClose: () => resolve(dialogResult) },
102
111
  )
103
112
  } catch (error) {
104
113
  reject(error)
@@ -129,25 +138,26 @@ class LayoutOverlayManager {
129
138
  })
130
139
  }
131
140
 
132
- showCustomRightPanel(content: ReactElement) {
141
+ showCustomRightPanel(content: ReactElement, { size = 'medium', onClose }: CustomRightPanelOptions = {}) {
133
142
  if (!this.elements?.rightPanel) throw new ElementNotFound('right panel overlay', RIGHT_PANEL_ID)
134
143
  if (!this.setContent.rightPanel) throw new LayoutError('unable to show right panel overlay, because it has not been setup yet.')
144
+ this.onModalClose = onClose
135
145
  this.setContent.rightPanel(content)
136
- this.elements?.rightPanel.setAttribute('class', 'visible')
146
+ this.elements?.rightPanel.classList.add(size)
147
+ setTimeout(() => this.elements?.rightPanel?.classList?.add('visible'))
137
148
  }
138
149
 
139
- showRightPanel(props: OverlayContentProps) {
140
- const onClose = () => {
141
- this.closeRightPanel()
142
- if (props.onClose) props.onClose()
143
- }
144
- this.showCustomRightPanel(<OverlayContent {...props} onClose={onClose} type="panel" />)
150
+ showRightPanel({ size, ...props }: OverlayContentProps & { size?: OverlaySize }) {
151
+ this.showCustomRightPanel(
152
+ <OverlayContent {...props} onClose={() => this.closeRightPanel()} type="panel" />,
153
+ { size, onClose: props.onClose },
154
+ )
145
155
  }
146
156
 
147
- closeModal() {
157
+ closeModal(runCloseListener = true) {
148
158
  this.elements?.modal?.classList.remove('visible')
149
159
  this.elements?.backdrop?.setAttribute('class', '')
150
- if (this.onModalClose) {
160
+ if (runCloseListener && this.onModalClose) {
151
161
  this.onModalClose()
152
162
  this.onModalClose = undefined
153
163
  }
@@ -160,11 +170,16 @@ class LayoutOverlayManager {
160
170
  )
161
171
  }
162
172
 
163
- closeRightPanel() {
164
- this.elements?.rightPanel?.setAttribute('class', '')
173
+ closeRightPanel(runCloseListener = true) {
174
+ this.elements?.rightPanel?.classList.remove('visible')
175
+ if (runCloseListener && this.onModalClose) {
176
+ this.onModalClose()
177
+ this.onModalClose = undefined
178
+ }
165
179
  setTimeout(
166
180
  () => {
167
181
  if (this.setContent.rightPanel) this.setContent.rightPanel(undefined)
182
+ this.elements?.rightPanel?.removeAttribute('class')
168
183
  },
169
184
  parseFloat(valueOfLayoutVar('--right-panel-animation-duration')) * 1000,
170
185
  )
@@ -174,6 +189,14 @@ class LayoutOverlayManager {
174
189
  this.elements?.bottomDialog?.setAttribute('class', '')
175
190
  }
176
191
 
192
+ isInsideModal(element: HTMLElement) {
193
+ return !!this.elements?.modal?.contains(element)
194
+ }
195
+
196
+ isInsideRightPanel(element: HTMLElement) {
197
+ return !!this.elements?.rightPanel?.contains(element)
198
+ }
199
+
177
200
  showToaster = showReactToaster
178
201
  }
179
202
 
@@ -15,6 +15,14 @@ export interface DialogOptions {
15
15
  confirm?: string,
16
16
  cancel?: string,
17
17
  validation?: false | string | Validation,
18
+ /**
19
+ * @default modal
20
+ */
21
+ type?: 'modal' | 'panel',
22
+ /**
23
+ * @default right if type is "panel", "right" otherwise.
24
+ */
25
+ buttonPlacement?: 'left' | 'center' | 'right',
18
26
  }
19
27
 
20
28
  interface Props extends DialogOptions {
@@ -22,12 +30,30 @@ interface Props extends DialogOptions {
22
30
  onCancel: () => void,
23
31
  }
24
32
 
25
- export const Dialog = ({ message, title, subtitle, cancel, confirm, validation, onConfirm, onCancel }: Props) => {
33
+ const justifyButtons: Record<Required<DialogOptions>['buttonPlacement'], React.CSSProperties['justifyContent']> = {
34
+ center: 'center',
35
+ left: 'start',
36
+ right: 'end',
37
+ }
38
+
39
+ export const Dialog = ({
40
+ message,
41
+ title,
42
+ subtitle,
43
+ cancel,
44
+ confirm,
45
+ validation,
46
+ onConfirm,
47
+ onCancel,
48
+ type = 'modal',
49
+ buttonPlacement = type === 'panel' ? 'left' : 'right',
50
+ }: Props,
51
+ ) => {
26
52
  const [enabled, setEnabled] = useState(!validation)
27
53
 
28
54
  function renderValidation() {
29
55
  if (!validation) return null
30
- const value = typeof validation === 'string' ? validation : validation.label
56
+ const value = typeof validation === 'string' ? validation : validation.value
31
57
  const label = typeof validation === 'object' && validation.label
32
58
  ? validation.label
33
59
  : `Please, confirm the action by typing "${value}" below:`
@@ -41,10 +67,12 @@ export const Dialog = ({ message, title, subtitle, cancel, confirm, validation,
41
67
  }
42
68
 
43
69
  return (
44
- <OverlayContent title={title} subtitle={subtitle} onClose={onCancel} type="modal">
45
- {message}
46
- {renderValidation()}
47
- {(cancel || confirm) && <Flex gap justifyContent="end" alignItems="center" sx={{ mt: 6 }}>
70
+ <OverlayContent title={title} subtitle={subtitle} onClose={onCancel} type={type}>
71
+ <Flex flexDirection="column" flex={1}>
72
+ {message}
73
+ {renderValidation()}
74
+ </Flex>
75
+ {(cancel || confirm) && <Flex gap justifyContent={justifyButtons[buttonPlacement]} alignItems="center" sx={{ mt: 6 }}>
48
76
  {cancel && <Button appearance="outlined" colorScheme="inverse" onClick={onCancel}>{cancel}</Button>}
49
77
  {confirm && <Button colorScheme="primary" onClick={onConfirm} disabled={!enabled}>
50
78
  {confirm}
@@ -1,6 +1,7 @@
1
1
  /* eslint-disable @typescript-eslint/no-unused-vars */
2
- import { IconBox, Text } from '@citric/core'
2
+ import { Flex, IconBox, Text } from '@citric/core'
3
3
  import { ArrowLeft, ChevronDown } from '@citric/icons'
4
+ import { LoadingCircular } from '@citric/ui'
4
5
  import { listToClass, theme } from '@stack-spot/portal-theme'
5
6
  import { useMemo, useState } from 'react'
6
7
  import { styled } from 'styled-components'
@@ -26,16 +27,34 @@ const MenuGroup = styled.ul`
26
27
  padding: 0;
27
28
  }
28
29
 
30
+ .item-row {
31
+ display: flex;
32
+ flex-direction: row;
33
+ gap: 8px;
34
+ align-items: center;
35
+
36
+ .label {
37
+ flex: 1;
38
+ &.hidden, &.ellipsis {
39
+ white-space: nowrap;
40
+ overflow: hidden;
41
+ }
42
+ &.ellipsis {
43
+ text-overflow: ellipsis;
44
+ }
45
+ }
46
+ }
47
+
29
48
  li a {
30
49
  position: relative;
31
50
  height: 0;
32
51
  overflow: hidden;
33
- display: flex;
34
- align-items: center;
52
+ /* display: flex; */
53
+ /* align-items: center; */
35
54
  transition: height 0.3s, background-color 0.2s;
36
55
  margin: 0 ${PADDING - ITEM_PADDING}px;
37
56
  border-radius: 4px;
38
- justify-content: space-between;
57
+ /* justify-content: space-between; */
39
58
  padding: 0 ${ITEM_PADDING}px;
40
59
 
41
60
  &:hover {
@@ -109,24 +128,26 @@ const Title = styled.header`
109
128
  margin: ${PADDING}px 0 24px ${PADDING}px;
110
129
  `
111
130
 
112
- const ActionItem = ({ label, onClick, href, active }: MenuAction) => (
131
+ const ActionItem = ({ label, onClick, href, active, icon, overflow = 'wrap' }: MenuAction) => (
113
132
  <a
114
133
  href={active ? undefined : href}
115
134
  onClick={active ? onClick : undefined}
116
- className={listToClass(['action', active ? 'active' : undefined])}
135
+ className={listToClass(['action', 'item-row', active ? 'active' : undefined])}
117
136
  >
118
- <Text appearance="body2">{label}</Text>
137
+ {icon}
138
+ <Text appearance="body2" className={`label ${overflow}`}>{label}</Text>
119
139
  </a>
120
140
  )
121
141
 
122
- const CollapsibleGroupItem = ({ label, open: initiallyOpened, children }: ItemGroup) => {
142
+ const CollapsibleGroupItem = ({ label, open: initiallyOpened, children, icon, overflow = 'wrap' }: ItemGroup) => {
123
143
  const [open, setOpen] = useState(initiallyOpened ?? children?.some(c => 'active' in c && c.active) ?? false)
124
144
  const items = useMemo(() => children?.map(renderOption), [children])
125
145
 
126
146
  return (
127
147
  <>
128
- <a onClick={() => setOpen(!open)}>
129
- <Text appearance="body2">{label}</Text>
148
+ <a onClick={() => setOpen(!open)} className="item-row">
149
+ {icon}
150
+ <Text appearance="body2" className={`label ${overflow}`}>{label}</Text>
130
151
  <IconBox><ChevronDown className={listToClass(['chevron', open ? 'open' : ''])} /></IconBox>
131
152
  </a>
132
153
  <MenuGroup className={open ? 'open' : undefined}>{items}</MenuGroup>
@@ -134,12 +155,15 @@ const CollapsibleGroupItem = ({ label, open: initiallyOpened, children }: ItemGr
134
155
  )
135
156
  }
136
157
 
137
- const RootGroupItem = ({ label, children }: ItemGroup) => {
138
- const items = useMemo(() => children?.map(renderOption), [children])
158
+ const RootGroupItem = ({ label, children, icon, overflow = 'wrap' }: ItemGroup) => {
159
+ const items = useMemo(() => children?.filter(i => !i.hidden).map(renderOption), [children])
139
160
 
140
161
  return (
141
162
  <>
142
- <Text appearance="overheader2" colorScheme="light.700" className="group-title">{label}</Text>
163
+ <div className="item-row">
164
+ {icon}
165
+ <Text appearance="overheader2" colorScheme="light.700" className={`group-title label ${overflow}`}>{label}</Text>
166
+ </div>
143
167
  <MenuGroup className="open no-indentation">{items}</MenuGroup>
144
168
  </>
145
169
  )
@@ -153,9 +177,21 @@ function renderOption({ root, ...option }: MenuItem & { root?: boolean }) {
153
177
  return <li key={option.label}>{'children' in option ? <GroupItem root={root} {...option} /> : <ActionItem {...option} />}</li>
154
178
  }
155
179
 
156
- export const MenuContent = ({ pageSelector, goBack, title, subtitle, options = [] }: MenuSectionContent) => {
180
+ export const MenuContent = ({ pageSelector, goBack, title, subtitle, options = [], loading, error }: MenuSectionContent) => {
157
181
  const items = useMemo(() => options.filter(o => !o.hidden).map(o => renderOption({ ...o, root: true })), [options])
158
182
 
183
+ function renderContent() {
184
+ if (loading) {
185
+ return (
186
+ <Flex justifyContent="center" alignItems="center" flex={1} sx={{ padding: '40px' }}>
187
+ <LoadingCircular />
188
+ </Flex>
189
+ )
190
+ }
191
+ if (error) return <Text colorScheme="danger">{error}</Text>
192
+ return <MenuGroup className="open root no-indentation">{items}</MenuGroup>
193
+ }
194
+
159
195
  return (
160
196
  <>
161
197
  {goBack && (
@@ -173,7 +209,7 @@ export const MenuContent = ({ pageSelector, goBack, title, subtitle, options = [
173
209
  </Title>
174
210
  )}
175
211
  {pageSelector && <PageSelector {...pageSelector} />}
176
- <MenuGroup className="open root no-indentation">{items}</MenuGroup>
212
+ {renderContent()}
177
213
  </>
178
214
  )
179
215
  }