@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.
- package/dist/Layout.d.ts +3 -3
- package/dist/Layout.d.ts.map +1 -1
- package/dist/Layout.js +7 -1
- package/dist/Layout.js.map +1 -1
- package/dist/LayoutOverlayManager.d.ts +22 -7
- package/dist/LayoutOverlayManager.d.ts.map +1 -1
- package/dist/LayoutOverlayManager.js +26 -19
- package/dist/LayoutOverlayManager.js.map +1 -1
- package/dist/components/Dialog.d.ts +9 -1
- package/dist/components/Dialog.d.ts.map +1 -1
- package/dist/components/Dialog.js +8 -3
- package/dist/components/Dialog.js.map +1 -1
- package/dist/components/Menu/MenuContent.d.ts +1 -1
- package/dist/components/Menu/MenuContent.d.ts.map +1 -1
- package/dist/components/Menu/MenuContent.js +39 -12
- package/dist/components/Menu/MenuContent.js.map +1 -1
- package/dist/components/Menu/MenuSections.d.ts +1 -1
- package/dist/components/Menu/MenuSections.d.ts.map +1 -1
- package/dist/components/Menu/MenuSections.js +31 -8
- package/dist/components/Menu/MenuSections.js.map +1 -1
- package/dist/components/Menu/PageSelector.d.ts +1 -1
- package/dist/components/Menu/PageSelector.d.ts.map +1 -1
- package/dist/components/Menu/PageSelector.js +9 -3
- package/dist/components/Menu/PageSelector.js.map +1 -1
- package/dist/components/Menu/types.d.ts +40 -7
- package/dist/components/Menu/types.d.ts.map +1 -1
- package/dist/components/OverlayContent.d.ts.map +1 -1
- package/dist/components/OverlayContent.js +3 -1
- package/dist/components/OverlayContent.js.map +1 -1
- package/dist/components/SelectionList.d.ts.map +1 -1
- package/dist/components/SelectionList.js +5 -1
- package/dist/components/SelectionList.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/layout.css +16 -2
- package/package.json +2 -2
- package/src/Layout.tsx +13 -5
- package/src/LayoutOverlayManager.tsx +42 -19
- package/src/components/Dialog.tsx +34 -6
- package/src/components/Menu/MenuContent.tsx +51 -15
- package/src/components/Menu/MenuSections.tsx +47 -11
- package/src/components/Menu/PageSelector.tsx +24 -12
- package/src/components/Menu/types.ts +43 -7
- package/src/components/OverlayContent.tsx +3 -1
- package/src/components/SelectionList.tsx +5 -1
- package/src/index.ts +2 -0
- package/src/layout.css +16 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PageSelector.js","sourceRoot":"","sources":["../../../src/components/Menu/PageSelector.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAA;AAChD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC1C,OAAO,EAAc,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAC5D,OAAO,EAAE,oBAAoB,IAAI,OAAO,EAAE,MAAM,aAAa,CAAA;AAG7D,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAA;;YAElB,OAAO;;;;;;;;wBAQK,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;;;;;0BAKtB,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
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;
|
|
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"}
|
|
@@ -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
|
|
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;
|
|
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:
|
|
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":";AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACvC,OAAO,EAAa,WAAW,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAA;AACxE,OAAO,EAAgB,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACvF,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAmC1C,MAAM,qBAAqB,GAAG,GAAG,CAAA;AAWjC,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAwB
|
|
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';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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.
|
|
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.
|
|
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:
|
|
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:
|
|
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
|
|
61
|
-
menuContent={menu.content
|
|
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
|
-
|
|
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
|
|
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.
|
|
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.
|
|
146
|
+
this.elements?.rightPanel.classList.add(size)
|
|
147
|
+
setTimeout(() => this.elements?.rightPanel?.classList?.add('visible'))
|
|
137
148
|
}
|
|
138
149
|
|
|
139
|
-
showRightPanel(props: OverlayContentProps) {
|
|
140
|
-
|
|
141
|
-
this.closeRightPanel()
|
|
142
|
-
|
|
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?.
|
|
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
|
-
|
|
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.
|
|
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=
|
|
45
|
-
{
|
|
46
|
-
|
|
47
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
<
|
|
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
|
-
|
|
212
|
+
{renderContent()}
|
|
177
213
|
</>
|
|
178
214
|
)
|
|
179
215
|
}
|