@activecollab/components 2.0.340 → 2.0.341
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/cjs/presentation/shared/HelpAndSupportMenu.js +99 -0
- package/dist/cjs/presentation/shared/HelpAndSupportMenu.js.map +1 -0
- package/dist/cjs/presentation/shared/PresentationShell.js +12 -7
- package/dist/cjs/presentation/shared/PresentationShell.js.map +1 -1
- package/dist/cjs/presentation/shared/index.js +8 -0
- package/dist/cjs/presentation/shared/index.js.map +1 -1
- package/dist/esm/presentation/shared/HelpAndSupportMenu.d.ts +10 -0
- package/dist/esm/presentation/shared/HelpAndSupportMenu.d.ts.map +1 -0
- package/dist/esm/presentation/shared/HelpAndSupportMenu.js +81 -0
- package/dist/esm/presentation/shared/HelpAndSupportMenu.js.map +1 -0
- package/dist/esm/presentation/shared/PresentationShell.d.ts +3 -1
- package/dist/esm/presentation/shared/PresentationShell.d.ts.map +1 -1
- package/dist/esm/presentation/shared/PresentationShell.js +12 -7
- package/dist/esm/presentation/shared/PresentationShell.js.map +1 -1
- package/dist/esm/presentation/shared/index.d.ts +2 -0
- package/dist/esm/presentation/shared/index.d.ts.map +1 -1
- package/dist/esm/presentation/shared/index.js +1 -0
- package/dist/esm/presentation/shared/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.HelpAndSupportMenu = void 0;
|
|
7
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
8
|
+
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
9
|
+
var _tokens = require("./tokens");
|
|
10
|
+
var _Icons = require("../../components/Icons");
|
|
11
|
+
var _List = require("../../components/List");
|
|
12
|
+
var _Menu = require("../../components/Menu");
|
|
13
|
+
var _Tooltip = require("../../components/Tooltip");
|
|
14
|
+
var _Typography = require("../../components/Typography");
|
|
15
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
16
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
17
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
18
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
19
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
20
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
21
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
22
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
23
|
+
/* ------------------------------------------------------------------ */
|
|
24
|
+
/* Help & Support menu (mirrors MainMenu/HelpAndSupportMenu.js) */
|
|
25
|
+
/* ------------------------------------------------------------------ */
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* The "Help & Support" entry that sits at the very bottom of the main menu.
|
|
29
|
+
* Clicking it opens a popover (Help Docs / YouTube Channel / Live Support /
|
|
30
|
+
* New Features), matching the real MainMenu/HelpAndSupportMenu.js. It is a
|
|
31
|
+
* shared building block because every Product Messaging concept re-uses this
|
|
32
|
+
* same entry point.
|
|
33
|
+
*
|
|
34
|
+
* The label + caret carry the `menu-item-text` class so the shell's existing
|
|
35
|
+
* collapse rules hide them automatically when the menu is collapsed (state or
|
|
36
|
+
* <1280px media query). Clicks are intentionally no-ops in the mock.
|
|
37
|
+
*/
|
|
38
|
+
|
|
39
|
+
var StyledHelpTarget = _styledComponents.default.div.withConfig({
|
|
40
|
+
displayName: "HelpAndSupportMenu__StyledHelpTarget",
|
|
41
|
+
componentId: "sc-16a350b-0"
|
|
42
|
+
})(["position:relative;display:flex;align-items:center;flex-shrink:0;height:40px;padding:0 4px 0 12px;margin:0 12px 16px;border-radius:8px;cursor:pointer;transition:background-color ", ";.help-icon{flex-shrink:0;fill:var(--color-theme-700);opacity:0.7;}.help-label{margin-left:12px;min-width:0;overflow:hidden;text-overflow:ellipsis;}.help-caret{margin-left:auto;flex-shrink:0;fill:var(--color-theme-700);opacity:0.7;transition:transform ", ";transform:rotate(180deg);}&:hover{background-color:var(--color-theme-300);.help-icon,.help-caret{fill:var(--color-theme-900);opacity:1;}.help-label{color:var(--color-theme-900);}}&.open{background-color:var(--color-secondary-200);.help-icon,.help-caret{fill:var(--color-secondary);opacity:1;}.help-label{color:var(--color-secondary);}.help-caret{transform:rotate(0deg);}}"], _tokens.TRANSITION, _tokens.TRANSITION);
|
|
43
|
+
|
|
44
|
+
/* The popover body. ListItem gives leading icons an 8px gap by default; the
|
|
45
|
+
real menu uses 12px (tw-mr-3), so bump it here. */
|
|
46
|
+
var StyledHelpMenu = _styledComponents.default.div.withConfig({
|
|
47
|
+
displayName: "HelpAndSupportMenu__StyledHelpMenu",
|
|
48
|
+
componentId: "sc-16a350b-1"
|
|
49
|
+
})(["width:216px;.c-list{padding:8px 0;}.c-list-item > svg:first-child{margin-right:12px;}"]);
|
|
50
|
+
var HelpAndSupportMenu = exports.HelpAndSupportMenu = function HelpAndSupportMenu(_ref) {
|
|
51
|
+
var _ref$mobile = _ref.mobile,
|
|
52
|
+
mobile = _ref$mobile === void 0 ? false : _ref$mobile;
|
|
53
|
+
var _useState = (0, _react.useState)(false),
|
|
54
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
55
|
+
open = _useState2[0],
|
|
56
|
+
setOpen = _useState2[1];
|
|
57
|
+
var handleOpen = (0, _react.useCallback)(function () {
|
|
58
|
+
return setOpen(true);
|
|
59
|
+
}, []);
|
|
60
|
+
var handleClose = (0, _react.useCallback)(function () {
|
|
61
|
+
return setOpen(false);
|
|
62
|
+
}, []);
|
|
63
|
+
return /*#__PURE__*/_react.default.createElement(_Menu.Menu, {
|
|
64
|
+
open: open,
|
|
65
|
+
onOpen: handleOpen,
|
|
66
|
+
onClose: handleClose,
|
|
67
|
+
position: "top-start",
|
|
68
|
+
target: /*#__PURE__*/_react.default.createElement(_Tooltip.Tooltip, {
|
|
69
|
+
title: "Help & Support",
|
|
70
|
+
placement: "right",
|
|
71
|
+
disable: mobile
|
|
72
|
+
}, /*#__PURE__*/_react.default.createElement(StyledHelpTarget, {
|
|
73
|
+
className: open ? "open" : undefined,
|
|
74
|
+
"data-testid": "help-support-menu",
|
|
75
|
+
onClick: handleOpen
|
|
76
|
+
}, /*#__PURE__*/_react.default.createElement(_Icons.HelpIcon, {
|
|
77
|
+
className: "help-icon"
|
|
78
|
+
}), /*#__PURE__*/_react.default.createElement(_Typography.Body2, {
|
|
79
|
+
weight: "medium",
|
|
80
|
+
color: "secondary",
|
|
81
|
+
whitespace: "no-wrap",
|
|
82
|
+
className: "help-label menu-item-text"
|
|
83
|
+
}, "Help & Support"), /*#__PURE__*/_react.default.createElement(_Icons.CollapseExpandSingleIcon, {
|
|
84
|
+
className: "help-caret menu-item-text"
|
|
85
|
+
})))
|
|
86
|
+
}, /*#__PURE__*/_react.default.createElement(StyledHelpMenu, null, /*#__PURE__*/_react.default.createElement(_List.List, {
|
|
87
|
+
tabIndex: -1
|
|
88
|
+
}, /*#__PURE__*/_react.default.createElement(_List.ListItem, {
|
|
89
|
+
onClick: handleClose
|
|
90
|
+
}, /*#__PURE__*/_react.default.createElement(_Icons.NoteIcon, null), "Help Docs"), /*#__PURE__*/_react.default.createElement(_List.ListItem, {
|
|
91
|
+
onClick: handleClose
|
|
92
|
+
}, /*#__PURE__*/_react.default.createElement(_Icons.PlayCircleOutlineIcon, null), "YouTube Channel"), /*#__PURE__*/_react.default.createElement(_List.ListItem, {
|
|
93
|
+
onClick: handleClose
|
|
94
|
+
}, /*#__PURE__*/_react.default.createElement(_Icons.MessageEmptyIcon, null), "Live Support"), /*#__PURE__*/_react.default.createElement(_List.ListSeparator, null), /*#__PURE__*/_react.default.createElement(_List.ListItem, {
|
|
95
|
+
onClick: handleClose
|
|
96
|
+
}, /*#__PURE__*/_react.default.createElement(_Icons.StarOutlineIcon, null), "New Features"))));
|
|
97
|
+
};
|
|
98
|
+
HelpAndSupportMenu.displayName = "HelpAndSupportMenu";
|
|
99
|
+
//# sourceMappingURL=HelpAndSupportMenu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HelpAndSupportMenu.js","names":["_react","_interopRequireWildcard","require","_styledComponents","_interopRequireDefault","_tokens","_Icons","_List","_Menu","_Tooltip","_Typography","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","TypeError","a","_arrayLikeToArray","toString","slice","constructor","name","Array","from","test","length","l","Symbol","iterator","u","next","done","push","value","return","isArray","StyledHelpTarget","styled","div","withConfig","displayName","componentId","TRANSITION","StyledHelpMenu","HelpAndSupportMenu","exports","_ref","_ref$mobile","mobile","_useState","useState","_useState2","open","setOpen","handleOpen","useCallback","handleClose","createElement","Menu","onOpen","onClose","position","target","Tooltip","title","placement","disable","className","undefined","onClick","HelpIcon","Body2","weight","color","whitespace","CollapseExpandSingleIcon","List","tabIndex","ListItem","NoteIcon","PlayCircleOutlineIcon","MessageEmptyIcon","ListSeparator","StarOutlineIcon"],"sources":["../../../../src/presentation/shared/HelpAndSupportMenu.tsx"],"sourcesContent":["import React, { ReactElement, useCallback, useState } from \"react\";\n\nimport styled from \"styled-components\";\n\nimport { TRANSITION } from \"./tokens\";\nimport {\n CollapseExpandSingleIcon,\n HelpIcon,\n MessageEmptyIcon,\n NoteIcon,\n PlayCircleOutlineIcon,\n StarOutlineIcon,\n} from \"../../components/Icons\";\nimport { List, ListItem, ListSeparator } from \"../../components/List\";\nimport { Menu } from \"../../components/Menu\";\nimport { Tooltip } from \"../../components/Tooltip\";\nimport { Body2 } from \"../../components/Typography\";\n\n/* ------------------------------------------------------------------ */\n/* Help & Support menu (mirrors MainMenu/HelpAndSupportMenu.js) */\n/* ------------------------------------------------------------------ */\n\n/**\n * The \"Help & Support\" entry that sits at the very bottom of the main menu.\n * Clicking it opens a popover (Help Docs / YouTube Channel / Live Support /\n * New Features), matching the real MainMenu/HelpAndSupportMenu.js. It is a\n * shared building block because every Product Messaging concept re-uses this\n * same entry point.\n *\n * The label + caret carry the `menu-item-text` class so the shell's existing\n * collapse rules hide them automatically when the menu is collapsed (state or\n * <1280px media query). Clicks are intentionally no-ops in the mock.\n */\n\nconst StyledHelpTarget = styled.div`\n position: relative;\n display: flex;\n align-items: center;\n flex-shrink: 0;\n height: 40px;\n padding: 0 4px 0 12px;\n margin: 0 12px 16px;\n border-radius: 8px;\n cursor: pointer;\n transition: background-color ${TRANSITION};\n\n .help-icon {\n flex-shrink: 0;\n fill: var(--color-theme-700);\n opacity: 0.7;\n }\n\n .help-label {\n margin-left: 12px;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .help-caret {\n margin-left: auto;\n flex-shrink: 0;\n fill: var(--color-theme-700);\n opacity: 0.7;\n transition: transform ${TRANSITION};\n transform: rotate(180deg);\n }\n\n &:hover {\n background-color: var(--color-theme-300);\n\n .help-icon,\n .help-caret {\n fill: var(--color-theme-900);\n opacity: 1;\n }\n\n .help-label {\n color: var(--color-theme-900);\n }\n }\n\n &.open {\n background-color: var(--color-secondary-200);\n\n .help-icon,\n .help-caret {\n fill: var(--color-secondary);\n opacity: 1;\n }\n\n .help-label {\n color: var(--color-secondary);\n }\n\n .help-caret {\n transform: rotate(0deg);\n }\n }\n`;\n\n/* The popover body. ListItem gives leading icons an 8px gap by default; the\n real menu uses 12px (tw-mr-3), so bump it here. */\nconst StyledHelpMenu = styled.div`\n width: 216px;\n\n .c-list {\n padding: 8px 0;\n }\n\n .c-list-item > svg:first-child {\n margin-right: 12px;\n }\n`;\n\nexport interface HelpAndSupportMenuProps {\n /** Disable the hover tooltip (used inside the mobile menu). */\n mobile?: boolean;\n}\n\nexport const HelpAndSupportMenu = ({\n mobile = false,\n}: HelpAndSupportMenuProps): ReactElement => {\n const [open, setOpen] = useState(false);\n const handleOpen = useCallback(() => setOpen(true), []);\n const handleClose = useCallback(() => setOpen(false), []);\n\n return (\n <Menu\n open={open}\n onOpen={handleOpen}\n onClose={handleClose}\n position=\"top-start\"\n target={\n <Tooltip title=\"Help & Support\" placement=\"right\" disable={mobile}>\n <StyledHelpTarget\n className={open ? \"open\" : undefined}\n data-testid=\"help-support-menu\"\n onClick={handleOpen}\n >\n <HelpIcon className=\"help-icon\" />\n <Body2\n weight=\"medium\"\n color=\"secondary\"\n whitespace=\"no-wrap\"\n className=\"help-label menu-item-text\"\n >\n Help & Support\n </Body2>\n <CollapseExpandSingleIcon className=\"help-caret menu-item-text\" />\n </StyledHelpTarget>\n </Tooltip>\n }\n >\n <StyledHelpMenu>\n <List tabIndex={-1}>\n <ListItem onClick={handleClose}>\n <NoteIcon />\n Help Docs\n </ListItem>\n <ListItem onClick={handleClose}>\n <PlayCircleOutlineIcon />\n YouTube Channel\n </ListItem>\n <ListItem onClick={handleClose}>\n <MessageEmptyIcon />\n Live Support\n </ListItem>\n <ListSeparator />\n <ListItem onClick={handleClose}>\n <StarOutlineIcon />\n New Features\n </ListItem>\n </List>\n </StyledHelpMenu>\n </Menu>\n );\n};\n\nHelpAndSupportMenu.displayName = \"HelpAndSupportMenu\";\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -175,7 +175,8 @@ var MenuItemsMock = function MenuItemsMock(_ref) {
|
|
|
175
175
|
};
|
|
176
176
|
var MainMenuMock = function MainMenuMock(_ref3) {
|
|
177
177
|
var collapsed = _ref3.collapsed,
|
|
178
|
-
onToggleCollapsed = _ref3.onToggleCollapsed
|
|
178
|
+
onToggleCollapsed = _ref3.onToggleCollapsed,
|
|
179
|
+
footer = _ref3.footer;
|
|
179
180
|
return /*#__PURE__*/_react.default.createElement(StyledMainMenu, {
|
|
180
181
|
className: collapsed ? "collapsed" : undefined,
|
|
181
182
|
"data-testid": "main-menu"
|
|
@@ -187,11 +188,12 @@ var MainMenuMock = function MainMenuMock(_ref3) {
|
|
|
187
188
|
variant: "text gray",
|
|
188
189
|
size: "small",
|
|
189
190
|
onClick: onToggleCollapsed
|
|
190
|
-
}, /*#__PURE__*/_react.default.createElement(_Icons.CollapsIcon, null)))), /*#__PURE__*/_react.default.createElement(MenuItemsMock, null));
|
|
191
|
+
}, /*#__PURE__*/_react.default.createElement(_Icons.CollapsIcon, null)))), /*#__PURE__*/_react.default.createElement(MenuItemsMock, null), footer);
|
|
191
192
|
};
|
|
192
193
|
var MainMenuMobileMock = function MainMenuMobileMock(_ref4) {
|
|
193
194
|
var open = _ref4.open,
|
|
194
|
-
close = _ref4.close
|
|
195
|
+
close = _ref4.close,
|
|
196
|
+
footer = _ref4.footer;
|
|
195
197
|
return open ? /*#__PURE__*/_react.default.createElement(_Modal.Modal, {
|
|
196
198
|
open: open,
|
|
197
199
|
onClose: close
|
|
@@ -205,7 +207,7 @@ var MainMenuMobileMock = function MainMenuMobileMock(_ref4) {
|
|
|
205
207
|
variant: "text gray"
|
|
206
208
|
}, /*#__PURE__*/_react.default.createElement(_Icons.CloseIcon, null))), /*#__PURE__*/_react.default.createElement(MenuItemsMock, {
|
|
207
209
|
mobile: true
|
|
208
|
-
}))) : null;
|
|
210
|
+
}), footer)) : null;
|
|
209
211
|
};
|
|
210
212
|
var MobileMenuHeaderMock = function MobileMenuHeaderMock(_ref5) {
|
|
211
213
|
var onOpenMobileMenu = _ref5.onOpenMobileMenu;
|
|
@@ -244,7 +246,8 @@ var TopRightControlsMock = function TopRightControlsMock() {
|
|
|
244
246
|
var PresentationShell = exports.PresentationShell = function PresentationShell(_ref6) {
|
|
245
247
|
var header = _ref6.header,
|
|
246
248
|
children = _ref6.children,
|
|
247
|
-
floating = _ref6.floating
|
|
249
|
+
floating = _ref6.floating,
|
|
250
|
+
menuFooter = _ref6.menuFooter;
|
|
248
251
|
var _useState = (0, _react.useState)(false),
|
|
249
252
|
_useState2 = _slicedToArray(_useState, 2),
|
|
250
253
|
mobileMenuOpen = _useState2[0],
|
|
@@ -289,10 +292,12 @@ var PresentationShell = exports.PresentationShell = function PresentationShell(_
|
|
|
289
292
|
id: "right-window"
|
|
290
293
|
}, /*#__PURE__*/_react.default.createElement(StyledPage, null, header, /*#__PURE__*/_react.default.createElement(StyledPageBody, null, children)), isMobileView === false ? /*#__PURE__*/_react.default.createElement(TopRightControlsMock, null) : null), isMobileView ? /*#__PURE__*/_react.default.createElement(MainMenuMobileMock, {
|
|
291
294
|
open: mobileMenuOpen,
|
|
292
|
-
close: handleCloseMobileMenu
|
|
295
|
+
close: handleCloseMobileMenu,
|
|
296
|
+
footer: menuFooter
|
|
293
297
|
}) : /*#__PURE__*/_react.default.createElement(MainMenuMock, {
|
|
294
298
|
collapsed: collapsed,
|
|
295
|
-
onToggleCollapsed: handleToggleCollapsed
|
|
299
|
+
onToggleCollapsed: handleToggleCollapsed,
|
|
300
|
+
footer: menuFooter
|
|
296
301
|
})), floating);
|
|
297
302
|
};
|
|
298
303
|
PresentationShell.displayName = "PresentationShell";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PresentationShell.js","names":["_react","_interopRequireWildcard","require","_styledComponents","_interopRequireDefault","_MainLogo","_tokens","_IconButton","_Icons","_Modal","_Paper","_Tooltip","_Typography","_utils","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","TypeError","a","_arrayLikeToArray","toString","slice","constructor","name","Array","from","test","length","l","Symbol","iterator","u","next","done","push","value","return","isArray","MENU_ITEMS","icon","RocketIcon","text","ProjectsIcon","active","MyWorkIcon","ActivityIcon","CalendarIcon","PeopleIcon","ReportTimeIcon","ReportsIcon","InvoicesIcon","EstimatesIcon","StyledLayout","styled","div","withConfig","displayName","componentId","StyledContentRow","StyledRightWindow","SM","StyledMainMenu","TRANSITION","StyledMenuHeader","XL","StyledMenuScroll","StyledMenuSection","StyledMenuItem","StyledMobileMenuClose","IconButton","StyledMobileMenuHeader","StyledIconRow","StyledTopRightControls","StyledHeaderAvatar","StyledPage","StyledPageBody","StyledPagePaper","exports","Paper","MenuItemsMock","_ref","_ref$mobile","mobile","createElement","className","Caption1","weight","color","map","_ref2","Icon","Tooltip","key","title","placement","disable","undefined","Body2","whitespace","MainMenuMock","_ref3","collapsed","onToggleCollapsed","MainLogo","variant","size","onClick","CollapsIcon","MainMenuMobileMock","_ref4","open","close","Modal","onClose","CloseIcon","MobileMenuHeaderMock","_ref5","onOpenMobileMenu","MobileMenuIcon","SearchIcon","NotificationBellIcon","TopRightControlsMock","ClockStopwatchIndicatorIcon","PresentationShell","_ref6","header","children","floating","_useState","useState","_useState2","mobileMenuOpen","setMobileMenuOpen","_useState3","_useState4","setCollapsed","_useState5","_useState6","isMobileView","setIsMobileView","ref","useRef","dimensions","useResizeObserver","width","useEffect","BREAKPOINT","handleOpenMobileMenu","useCallback","handleCloseMobileMenu","handleToggleCollapsed","prev","id"],"sources":["../../../../src/presentation/shared/PresentationShell.tsx"],"sourcesContent":["import React, {\n ReactElement,\n ReactNode,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\n\nimport styled from \"styled-components\";\n\nimport { MainLogo } from \"./MainLogo\";\nimport { BREAKPOINT, SM, TRANSITION, XL } from \"./tokens\";\nimport { IconButton } from \"../../components/IconButton\";\nimport {\n ActivityIcon,\n CalendarIcon,\n ClockStopwatchIndicatorIcon,\n CloseIcon,\n CollapsIcon,\n EstimatesIcon,\n InvoicesIcon,\n MobileMenuIcon,\n MyWorkIcon,\n NotificationBellIcon,\n PeopleIcon,\n ProjectsIcon,\n ReportTimeIcon,\n ReportsIcon,\n RocketIcon,\n SearchIcon,\n} from \"../../components/Icons\";\nimport { Modal } from \"../../components/Modal\";\nimport { Paper } from \"../../components/Paper\";\nimport { Tooltip } from \"../../components/Tooltip\";\nimport { Body2, Caption1 } from \"../../components/Typography\";\nimport { useResizeObserver } from \"../../utils\";\n\nconst MENU_ITEMS: {\n icon: React.FC<React.SVGProps<SVGSVGElement>>;\n text: string;\n active?: boolean;\n}[] = [\n { icon: RocketIcon, text: \"Getting Started\" },\n { icon: ProjectsIcon, text: \"Projects\", active: true },\n { icon: MyWorkIcon, text: \"My Work\" },\n { icon: ActivityIcon, text: \"Activity\" },\n { icon: CalendarIcon, text: \"Calendar\" },\n { icon: PeopleIcon, text: \"People\" },\n { icon: ReportTimeIcon, text: \"Time\" },\n { icon: ReportsIcon, text: \"Reports\" },\n { icon: InvoicesIcon, text: \"Invoices\" },\n { icon: EstimatesIcon, text: \"Estimates\" },\n];\n\n/* ------------------------------------------------------------------ */\n/* Layout shell (mirrors Layout.js) */\n/* ------------------------------------------------------------------ */\n\nconst StyledLayout = styled.div`\n height: 100vh;\n display: flex;\n flex-direction: column;\n background-color: var(--body-bg-main);\n`;\n\nconst StyledContentRow = styled.div`\n position: relative;\n display: flex;\n flex-direction: row-reverse;\n flex: 1 1 0%;\n flex-grow: 1;\n overflow-y: auto;\n`;\n\nconst StyledRightWindow = styled.div`\n position: relative;\n display: flex;\n flex-direction: column;\n flex: 1 1 0%;\n flex-grow: 1;\n width: 100%;\n height: 100%;\n overflow-y: auto;\n padding: 0 16px;\n\n @media (min-width: ${SM}) {\n padding-right: 32px;\n }\n`;\n\n/* ------------------------------------------------------------------ */\n/* Main menu (mirrors MainMenu.js + MainMenu.less) */\n/* ------------------------------------------------------------------ */\n\nconst StyledMainMenu = styled.div`\n position: relative;\n z-index: 1;\n display: none;\n flex-direction: column;\n height: 100%;\n margin-right: 4px;\n flex-shrink: 0;\n width: 240px;\n transition: width ${TRANSITION};\n\n @media (min-width: ${SM}) {\n display: flex;\n }\n\n &.collapsed {\n width: 72px;\n }\n\n .menu-item-text,\n .menu-section,\n #logotype {\n transition: all ${TRANSITION};\n }\n\n &.collapsed .menu-item-text {\n opacity: 0;\n visibility: hidden;\n width: 0;\n margin-left: 0;\n }\n\n &.collapsed .menu-section {\n transform: scaleY(0);\n opacity: 0;\n max-height: 0;\n margin-bottom: 0;\n }\n\n &.collapsed #logotype {\n transform: translateX(-5%);\n opacity: 0;\n }\n\n &.collapsed .collapse-expand-menu svg {\n transform: rotate(180deg);\n }\n\n &:not(.mobile) {\n @media (max-width: 1279.98px) {\n width: 72px;\n\n .menu-item-text {\n opacity: 0;\n visibility: hidden;\n width: 0;\n margin-left: 0;\n }\n\n .menu-section {\n transform: scaleY(0);\n opacity: 0;\n max-height: 0;\n margin-bottom: 0;\n }\n\n #logotype {\n transform: translateX(-5%);\n opacity: 0;\n }\n }\n }\n\n &.mobile {\n display: flex;\n position: absolute;\n left: 0;\n top: 0;\n width: 240px;\n background-color: var(--page-paper-main);\n }\n`;\n\nconst StyledMenuHeader = styled.div`\n position: relative;\n height: 68px;\n display: flex;\n align-items: center;\n flex-shrink: 0;\n overflow: hidden;\n\n .main-logo {\n position: absolute;\n left: 20px;\n color: var(--color-secondary);\n\n path {\n fill: var(--color-secondary);\n }\n }\n\n .collapse-expand-menu {\n position: absolute;\n right: 4px;\n display: none;\n\n @media (min-width: ${XL}) {\n display: flex;\n }\n }\n`;\n\nconst StyledMenuScroll = styled.div`\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n min-height: 0;\n margin: 12px 0;\n overflow-y: auto;\n overflow-x: hidden;\n`;\n\nconst StyledMenuSection = styled.div`\n display: flex;\n align-items: center;\n margin: 0 12px 8px;\n padding: 0 4px 0 12px;\n`;\n\nconst StyledMenuItem = styled.a`\n display: flex;\n align-items: center;\n height: 40px;\n padding: 0 4px 0 12px;\n margin: 0 12px 2px;\n border-radius: 8px;\n cursor: pointer;\n text-decoration: none;\n\n svg {\n flex-shrink: 0;\n fill: var(--color-theme-700);\n opacity: 0.7;\n }\n\n .menu-item-text {\n margin-left: 12px;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n &:hover {\n transition: all ${TRANSITION};\n background-color: var(--color-theme-300);\n\n svg {\n fill: var(--color-theme-900);\n opacity: 1;\n }\n\n .menu-item-text {\n color: var(--color-theme-900);\n }\n }\n\n &.active {\n background-color: var(--color-secondary-200);\n\n svg {\n fill: var(--color-secondary);\n opacity: 1;\n }\n\n .menu-item-text {\n color: var(--color-secondary);\n }\n }\n`;\n\nconst StyledMobileMenuClose = styled(IconButton)`\n position: absolute;\n right: 16px;\n`;\n\n/* ------------------------------------------------------------------ */\n/* Top bars */\n/* ------------------------------------------------------------------ */\n\nconst StyledMobileMenuHeader = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 16px;\n background-color: var(--color-primary);\n z-index: 50;\n\n @media (min-width: ${SM}) {\n display: none;\n }\n\n .mobile-menu-icon {\n fill: var(--color-theme-300);\n }\n`;\n\nconst StyledIconRow = styled.div`\n display: flex;\n align-items: center;\n`;\n\nconst StyledTopRightControls = styled.div`\n position: absolute;\n top: 0;\n right: 0;\n display: none;\n align-items: center;\n justify-content: flex-end;\n padding: 12px 32px 12px 0;\n\n @media (min-width: ${SM}) {\n display: flex;\n }\n`;\n\nconst StyledHeaderAvatar = styled.div`\n width: 28px;\n height: 28px;\n border-radius: 50%;\n background-color: var(--color-secondary);\n color: var(--only-white);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 11px;\n font-weight: 600;\n margin: 0 8px;\n flex-shrink: 0;\n cursor: pointer;\n\n /* neon theme: use paper colour for the initials */\n .neon & {\n color: var(--page-paper-main);\n }\n`;\n\n/* ------------------------------------------------------------------ */\n/* Page region (mirrors Page.jsx / PageBody.jsx) */\n/* ------------------------------------------------------------------ */\n\nconst StyledPage = styled.div`\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n`;\n\nconst StyledPageBody = styled.div`\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n margin-bottom: 32px;\n min-height: 0;\n`;\n\n/** The paper card that holds page content (used by list view & empty pages). */\nexport const StyledPagePaper = styled(Paper)`\n flex-grow: 1;\n width: 100%;\n`;\n\n/* ------------------------------------------------------------------ */\n/* Mocked layout building blocks */\n/* ------------------------------------------------------------------ */\n\ninterface MenuItemsProps {\n mobile?: boolean;\n}\n\nconst MenuItemsMock = ({ mobile = false }: MenuItemsProps): ReactElement => (\n <StyledMenuScroll>\n <StyledMenuSection className=\"menu-section\">\n <Caption1 weight=\"bold\" color=\"tertiary\">\n MENU\n </Caption1>\n </StyledMenuSection>\n {MENU_ITEMS.map(({ icon: Icon, text, active }) => (\n <Tooltip key={text} title={text} placement=\"right\" disable={mobile}>\n <StyledMenuItem className={active ? \"active\" : undefined}>\n <Icon />\n <Body2\n weight=\"medium\"\n color=\"secondary\"\n whitespace=\"no-wrap\"\n className=\"menu-item-text\"\n >\n {text}\n </Body2>\n </StyledMenuItem>\n </Tooltip>\n ))}\n </StyledMenuScroll>\n);\n\ninterface MainMenuMockProps {\n collapsed: boolean;\n onToggleCollapsed: () => void;\n}\n\nconst MainMenuMock = ({\n collapsed,\n onToggleCollapsed,\n}: MainMenuMockProps): ReactElement => (\n <StyledMainMenu\n className={collapsed ? \"collapsed\" : undefined}\n data-testid=\"main-menu\"\n >\n <StyledMenuHeader>\n <a className=\"main-logo\">\n <MainLogo />\n </a>\n <div className=\"collapse-expand-menu\">\n <IconButton\n variant=\"text gray\"\n size=\"small\"\n onClick={onToggleCollapsed}\n >\n <CollapsIcon />\n </IconButton>\n </div>\n </StyledMenuHeader>\n <MenuItemsMock />\n </StyledMainMenu>\n);\n\ninterface MainMenuMobileMockProps {\n open: boolean;\n close: () => void;\n}\n\nconst MainMenuMobileMock = ({\n open,\n close,\n}: MainMenuMobileMockProps): ReactElement | null =>\n open ? (\n <Modal open={open} onClose={close}>\n <StyledMainMenu className=\"mobile\" data-testid=\"main-menu-mobile\">\n <StyledMenuHeader>\n <a className=\"main-logo\">\n <MainLogo />\n </a>\n <StyledMobileMenuClose onClick={close} variant=\"text gray\">\n <CloseIcon />\n </StyledMobileMenuClose>\n </StyledMenuHeader>\n <MenuItemsMock mobile />\n </StyledMainMenu>\n </Modal>\n ) : null;\n\ninterface MobileMenuHeaderMockProps {\n onOpenMobileMenu: () => void;\n}\n\nconst MobileMenuHeaderMock = ({\n onOpenMobileMenu,\n}: MobileMenuHeaderMockProps): ReactElement => (\n <StyledMobileMenuHeader>\n <IconButton size=\"big\" variant=\"circle raised\" onClick={onOpenMobileMenu}>\n <MobileMenuIcon className=\"mobile-menu-icon\" />\n </IconButton>\n <StyledIconRow>\n <IconButton variant=\"text gray\">\n <SearchIcon />\n </IconButton>\n <StyledHeaderAvatar>JS</StyledHeaderAvatar>\n <IconButton variant=\"text gray\">\n <NotificationBellIcon />\n </IconButton>\n </StyledIconRow>\n </StyledMobileMenuHeader>\n);\n\nconst TopRightControlsMock = (): ReactElement => (\n <StyledTopRightControls>\n <IconButton variant=\"text gray\">\n <ClockStopwatchIndicatorIcon />\n </IconButton>\n <IconButton variant=\"text gray\">\n <SearchIcon />\n </IconButton>\n <StyledHeaderAvatar>JS</StyledHeaderAvatar>\n <IconButton variant=\"text gray\">\n <NotificationBellIcon />\n </IconButton>\n </StyledTopRightControls>\n);\n\n/* ------------------------------------------------------------------ */\n/* PresentationShell */\n/* ------------------------------------------------------------------ */\n\nexport interface PresentationShellProps {\n /** Page header row (e.g. <ProjectPageHeader /> or <PageHeader title=\"…\" />). */\n header: ReactNode;\n /** Page body content rendered inside the scrollable page area. */\n children: ReactNode;\n /** Optional fixed controls (e.g. <FloatingControls />). */\n floating?: ReactNode;\n}\n\n/**\n * The full application shell shared by every presentation mock-up: the main\n * menu on the left (auto-collapsing below 1280px, modal below 640px), the\n * top-right controls and the scrollable page area. Pass the page header via\n * `header` and the body via `children`.\n */\nexport const PresentationShell = ({\n header,\n children,\n floating,\n}: PresentationShellProps): ReactElement => {\n const [mobileMenuOpen, setMobileMenuOpen] = useState(false);\n const [collapsed, setCollapsed] = useState(false);\n const [isMobileView, setIsMobileView] = useState<boolean>();\n\n const ref = useRef<HTMLDivElement>(null);\n const dimensions = useResizeObserver(ref);\n const width = dimensions?.width;\n\n useEffect(() => {\n if (width) {\n if (width < BREAKPOINT) {\n setIsMobileView(true);\n } else {\n setIsMobileView(false);\n setMobileMenuOpen(false);\n }\n }\n }, [width]);\n\n const handleOpenMobileMenu = useCallback(() => setMobileMenuOpen(true), []);\n const handleCloseMobileMenu = useCallback(() => setMobileMenuOpen(false), []);\n const handleToggleCollapsed = useCallback(\n () => setCollapsed((prev) => !prev),\n []\n );\n\n return (\n <StyledLayout ref={ref}>\n {isMobileView ? (\n <MobileMenuHeaderMock onOpenMobileMenu={handleOpenMobileMenu} />\n ) : null}\n <StyledContentRow>\n <StyledRightWindow id=\"right-window\">\n <StyledPage>\n {header}\n <StyledPageBody>{children}</StyledPageBody>\n </StyledPage>\n {isMobileView === false ? <TopRightControlsMock /> : null}\n </StyledRightWindow>\n {isMobileView ? (\n <MainMenuMobileMock\n open={mobileMenuOpen}\n close={handleCloseMobileMenu}\n />\n ) : (\n <MainMenuMock\n collapsed={collapsed}\n onToggleCollapsed={handleToggleCollapsed}\n />\n )}\n </StyledContentRow>\n {floating}\n </StyledLayout>\n );\n};\n\nPresentationShell.displayName = \"PresentationShell\";\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"PresentationShell.js","names":["_react","_interopRequireWildcard","require","_styledComponents","_interopRequireDefault","_MainLogo","_tokens","_IconButton","_Icons","_Modal","_Paper","_Tooltip","_Typography","_utils","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","TypeError","a","_arrayLikeToArray","toString","slice","constructor","name","Array","from","test","length","l","Symbol","iterator","u","next","done","push","value","return","isArray","MENU_ITEMS","icon","RocketIcon","text","ProjectsIcon","active","MyWorkIcon","ActivityIcon","CalendarIcon","PeopleIcon","ReportTimeIcon","ReportsIcon","InvoicesIcon","EstimatesIcon","StyledLayout","styled","div","withConfig","displayName","componentId","StyledContentRow","StyledRightWindow","SM","StyledMainMenu","TRANSITION","StyledMenuHeader","XL","StyledMenuScroll","StyledMenuSection","StyledMenuItem","StyledMobileMenuClose","IconButton","StyledMobileMenuHeader","StyledIconRow","StyledTopRightControls","StyledHeaderAvatar","StyledPage","StyledPageBody","StyledPagePaper","exports","Paper","MenuItemsMock","_ref","_ref$mobile","mobile","createElement","className","Caption1","weight","color","map","_ref2","Icon","Tooltip","key","title","placement","disable","undefined","Body2","whitespace","MainMenuMock","_ref3","collapsed","onToggleCollapsed","footer","MainLogo","variant","size","onClick","CollapsIcon","MainMenuMobileMock","_ref4","open","close","Modal","onClose","CloseIcon","MobileMenuHeaderMock","_ref5","onOpenMobileMenu","MobileMenuIcon","SearchIcon","NotificationBellIcon","TopRightControlsMock","ClockStopwatchIndicatorIcon","PresentationShell","_ref6","header","children","floating","menuFooter","_useState","useState","_useState2","mobileMenuOpen","setMobileMenuOpen","_useState3","_useState4","setCollapsed","_useState5","_useState6","isMobileView","setIsMobileView","ref","useRef","dimensions","useResizeObserver","width","useEffect","BREAKPOINT","handleOpenMobileMenu","useCallback","handleCloseMobileMenu","handleToggleCollapsed","prev","id"],"sources":["../../../../src/presentation/shared/PresentationShell.tsx"],"sourcesContent":["import React, {\n ReactElement,\n ReactNode,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\n\nimport styled from \"styled-components\";\n\nimport { MainLogo } from \"./MainLogo\";\nimport { BREAKPOINT, SM, TRANSITION, XL } from \"./tokens\";\nimport { IconButton } from \"../../components/IconButton\";\nimport {\n ActivityIcon,\n CalendarIcon,\n ClockStopwatchIndicatorIcon,\n CloseIcon,\n CollapsIcon,\n EstimatesIcon,\n InvoicesIcon,\n MobileMenuIcon,\n MyWorkIcon,\n NotificationBellIcon,\n PeopleIcon,\n ProjectsIcon,\n ReportTimeIcon,\n ReportsIcon,\n RocketIcon,\n SearchIcon,\n} from \"../../components/Icons\";\nimport { Modal } from \"../../components/Modal\";\nimport { Paper } from \"../../components/Paper\";\nimport { Tooltip } from \"../../components/Tooltip\";\nimport { Body2, Caption1 } from \"../../components/Typography\";\nimport { useResizeObserver } from \"../../utils\";\n\nconst MENU_ITEMS: {\n icon: React.FC<React.SVGProps<SVGSVGElement>>;\n text: string;\n active?: boolean;\n}[] = [\n { icon: RocketIcon, text: \"Getting Started\" },\n { icon: ProjectsIcon, text: \"Projects\", active: true },\n { icon: MyWorkIcon, text: \"My Work\" },\n { icon: ActivityIcon, text: \"Activity\" },\n { icon: CalendarIcon, text: \"Calendar\" },\n { icon: PeopleIcon, text: \"People\" },\n { icon: ReportTimeIcon, text: \"Time\" },\n { icon: ReportsIcon, text: \"Reports\" },\n { icon: InvoicesIcon, text: \"Invoices\" },\n { icon: EstimatesIcon, text: \"Estimates\" },\n];\n\n/* ------------------------------------------------------------------ */\n/* Layout shell (mirrors Layout.js) */\n/* ------------------------------------------------------------------ */\n\nconst StyledLayout = styled.div`\n height: 100vh;\n display: flex;\n flex-direction: column;\n background-color: var(--body-bg-main);\n`;\n\nconst StyledContentRow = styled.div`\n position: relative;\n display: flex;\n flex-direction: row-reverse;\n flex: 1 1 0%;\n flex-grow: 1;\n overflow-y: auto;\n`;\n\nconst StyledRightWindow = styled.div`\n position: relative;\n display: flex;\n flex-direction: column;\n flex: 1 1 0%;\n flex-grow: 1;\n width: 100%;\n height: 100%;\n overflow-y: auto;\n padding: 0 16px;\n\n @media (min-width: ${SM}) {\n padding-right: 32px;\n }\n`;\n\n/* ------------------------------------------------------------------ */\n/* Main menu (mirrors MainMenu.js + MainMenu.less) */\n/* ------------------------------------------------------------------ */\n\nconst StyledMainMenu = styled.div`\n position: relative;\n z-index: 1;\n display: none;\n flex-direction: column;\n height: 100%;\n margin-right: 4px;\n flex-shrink: 0;\n width: 240px;\n transition: width ${TRANSITION};\n\n @media (min-width: ${SM}) {\n display: flex;\n }\n\n &.collapsed {\n width: 72px;\n }\n\n .menu-item-text,\n .menu-section,\n #logotype {\n transition: all ${TRANSITION};\n }\n\n &.collapsed .menu-item-text {\n opacity: 0;\n visibility: hidden;\n width: 0;\n margin-left: 0;\n }\n\n &.collapsed .menu-section {\n transform: scaleY(0);\n opacity: 0;\n max-height: 0;\n margin-bottom: 0;\n }\n\n &.collapsed #logotype {\n transform: translateX(-5%);\n opacity: 0;\n }\n\n &.collapsed .collapse-expand-menu svg {\n transform: rotate(180deg);\n }\n\n &:not(.mobile) {\n @media (max-width: 1279.98px) {\n width: 72px;\n\n .menu-item-text {\n opacity: 0;\n visibility: hidden;\n width: 0;\n margin-left: 0;\n }\n\n .menu-section {\n transform: scaleY(0);\n opacity: 0;\n max-height: 0;\n margin-bottom: 0;\n }\n\n #logotype {\n transform: translateX(-5%);\n opacity: 0;\n }\n }\n }\n\n &.mobile {\n display: flex;\n position: absolute;\n left: 0;\n top: 0;\n width: 240px;\n background-color: var(--page-paper-main);\n }\n`;\n\nconst StyledMenuHeader = styled.div`\n position: relative;\n height: 68px;\n display: flex;\n align-items: center;\n flex-shrink: 0;\n overflow: hidden;\n\n .main-logo {\n position: absolute;\n left: 20px;\n color: var(--color-secondary);\n\n path {\n fill: var(--color-secondary);\n }\n }\n\n .collapse-expand-menu {\n position: absolute;\n right: 4px;\n display: none;\n\n @media (min-width: ${XL}) {\n display: flex;\n }\n }\n`;\n\nconst StyledMenuScroll = styled.div`\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n min-height: 0;\n margin: 12px 0;\n overflow-y: auto;\n overflow-x: hidden;\n`;\n\nconst StyledMenuSection = styled.div`\n display: flex;\n align-items: center;\n margin: 0 12px 8px;\n padding: 0 4px 0 12px;\n`;\n\nconst StyledMenuItem = styled.a`\n display: flex;\n align-items: center;\n height: 40px;\n padding: 0 4px 0 12px;\n margin: 0 12px 2px;\n border-radius: 8px;\n cursor: pointer;\n text-decoration: none;\n\n svg {\n flex-shrink: 0;\n fill: var(--color-theme-700);\n opacity: 0.7;\n }\n\n .menu-item-text {\n margin-left: 12px;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n &:hover {\n transition: all ${TRANSITION};\n background-color: var(--color-theme-300);\n\n svg {\n fill: var(--color-theme-900);\n opacity: 1;\n }\n\n .menu-item-text {\n color: var(--color-theme-900);\n }\n }\n\n &.active {\n background-color: var(--color-secondary-200);\n\n svg {\n fill: var(--color-secondary);\n opacity: 1;\n }\n\n .menu-item-text {\n color: var(--color-secondary);\n }\n }\n`;\n\nconst StyledMobileMenuClose = styled(IconButton)`\n position: absolute;\n right: 16px;\n`;\n\n/* ------------------------------------------------------------------ */\n/* Top bars */\n/* ------------------------------------------------------------------ */\n\nconst StyledMobileMenuHeader = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 16px;\n background-color: var(--color-primary);\n z-index: 50;\n\n @media (min-width: ${SM}) {\n display: none;\n }\n\n .mobile-menu-icon {\n fill: var(--color-theme-300);\n }\n`;\n\nconst StyledIconRow = styled.div`\n display: flex;\n align-items: center;\n`;\n\nconst StyledTopRightControls = styled.div`\n position: absolute;\n top: 0;\n right: 0;\n display: none;\n align-items: center;\n justify-content: flex-end;\n padding: 12px 32px 12px 0;\n\n @media (min-width: ${SM}) {\n display: flex;\n }\n`;\n\nconst StyledHeaderAvatar = styled.div`\n width: 28px;\n height: 28px;\n border-radius: 50%;\n background-color: var(--color-secondary);\n color: var(--only-white);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 11px;\n font-weight: 600;\n margin: 0 8px;\n flex-shrink: 0;\n cursor: pointer;\n\n /* neon theme: use paper colour for the initials */\n .neon & {\n color: var(--page-paper-main);\n }\n`;\n\n/* ------------------------------------------------------------------ */\n/* Page region (mirrors Page.jsx / PageBody.jsx) */\n/* ------------------------------------------------------------------ */\n\nconst StyledPage = styled.div`\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n`;\n\nconst StyledPageBody = styled.div`\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n margin-bottom: 32px;\n min-height: 0;\n`;\n\n/** The paper card that holds page content (used by list view & empty pages). */\nexport const StyledPagePaper = styled(Paper)`\n flex-grow: 1;\n width: 100%;\n`;\n\n/* ------------------------------------------------------------------ */\n/* Mocked layout building blocks */\n/* ------------------------------------------------------------------ */\n\ninterface MenuItemsProps {\n mobile?: boolean;\n}\n\nconst MenuItemsMock = ({ mobile = false }: MenuItemsProps): ReactElement => (\n <StyledMenuScroll>\n <StyledMenuSection className=\"menu-section\">\n <Caption1 weight=\"bold\" color=\"tertiary\">\n MENU\n </Caption1>\n </StyledMenuSection>\n {MENU_ITEMS.map(({ icon: Icon, text, active }) => (\n <Tooltip key={text} title={text} placement=\"right\" disable={mobile}>\n <StyledMenuItem className={active ? \"active\" : undefined}>\n <Icon />\n <Body2\n weight=\"medium\"\n color=\"secondary\"\n whitespace=\"no-wrap\"\n className=\"menu-item-text\"\n >\n {text}\n </Body2>\n </StyledMenuItem>\n </Tooltip>\n ))}\n </StyledMenuScroll>\n);\n\ninterface MainMenuMockProps {\n collapsed: boolean;\n onToggleCollapsed: () => void;\n footer?: ReactNode;\n}\n\nconst MainMenuMock = ({\n collapsed,\n onToggleCollapsed,\n footer,\n}: MainMenuMockProps): ReactElement => (\n <StyledMainMenu\n className={collapsed ? \"collapsed\" : undefined}\n data-testid=\"main-menu\"\n >\n <StyledMenuHeader>\n <a className=\"main-logo\">\n <MainLogo />\n </a>\n <div className=\"collapse-expand-menu\">\n <IconButton\n variant=\"text gray\"\n size=\"small\"\n onClick={onToggleCollapsed}\n >\n <CollapsIcon />\n </IconButton>\n </div>\n </StyledMenuHeader>\n <MenuItemsMock />\n {footer}\n </StyledMainMenu>\n);\n\ninterface MainMenuMobileMockProps {\n open: boolean;\n close: () => void;\n footer?: ReactNode;\n}\n\nconst MainMenuMobileMock = ({\n open,\n close,\n footer,\n}: MainMenuMobileMockProps): ReactElement | null =>\n open ? (\n <Modal open={open} onClose={close}>\n <StyledMainMenu className=\"mobile\" data-testid=\"main-menu-mobile\">\n <StyledMenuHeader>\n <a className=\"main-logo\">\n <MainLogo />\n </a>\n <StyledMobileMenuClose onClick={close} variant=\"text gray\">\n <CloseIcon />\n </StyledMobileMenuClose>\n </StyledMenuHeader>\n <MenuItemsMock mobile />\n {footer}\n </StyledMainMenu>\n </Modal>\n ) : null;\n\ninterface MobileMenuHeaderMockProps {\n onOpenMobileMenu: () => void;\n}\n\nconst MobileMenuHeaderMock = ({\n onOpenMobileMenu,\n}: MobileMenuHeaderMockProps): ReactElement => (\n <StyledMobileMenuHeader>\n <IconButton size=\"big\" variant=\"circle raised\" onClick={onOpenMobileMenu}>\n <MobileMenuIcon className=\"mobile-menu-icon\" />\n </IconButton>\n <StyledIconRow>\n <IconButton variant=\"text gray\">\n <SearchIcon />\n </IconButton>\n <StyledHeaderAvatar>JS</StyledHeaderAvatar>\n <IconButton variant=\"text gray\">\n <NotificationBellIcon />\n </IconButton>\n </StyledIconRow>\n </StyledMobileMenuHeader>\n);\n\nconst TopRightControlsMock = (): ReactElement => (\n <StyledTopRightControls>\n <IconButton variant=\"text gray\">\n <ClockStopwatchIndicatorIcon />\n </IconButton>\n <IconButton variant=\"text gray\">\n <SearchIcon />\n </IconButton>\n <StyledHeaderAvatar>JS</StyledHeaderAvatar>\n <IconButton variant=\"text gray\">\n <NotificationBellIcon />\n </IconButton>\n </StyledTopRightControls>\n);\n\n/* ------------------------------------------------------------------ */\n/* PresentationShell */\n/* ------------------------------------------------------------------ */\n\nexport interface PresentationShellProps {\n /** Page header row (e.g. <ProjectPageHeader /> or <PageHeader title=\"…\" />). */\n header: ReactNode;\n /** Page body content rendered inside the scrollable page area. */\n children: ReactNode;\n /** Optional fixed controls (e.g. <FloatingControls />). */\n floating?: ReactNode;\n /** Optional content pinned to the bottom of the main menu (e.g. <HelpAndSupportMenu />). */\n menuFooter?: ReactNode;\n}\n\n/**\n * The full application shell shared by every presentation mock-up: the main\n * menu on the left (auto-collapsing below 1280px, modal below 640px), the\n * top-right controls and the scrollable page area. Pass the page header via\n * `header` and the body via `children`.\n */\nexport const PresentationShell = ({\n header,\n children,\n floating,\n menuFooter,\n}: PresentationShellProps): ReactElement => {\n const [mobileMenuOpen, setMobileMenuOpen] = useState(false);\n const [collapsed, setCollapsed] = useState(false);\n const [isMobileView, setIsMobileView] = useState<boolean>();\n\n const ref = useRef<HTMLDivElement>(null);\n const dimensions = useResizeObserver(ref);\n const width = dimensions?.width;\n\n useEffect(() => {\n if (width) {\n if (width < BREAKPOINT) {\n setIsMobileView(true);\n } else {\n setIsMobileView(false);\n setMobileMenuOpen(false);\n }\n }\n }, [width]);\n\n const handleOpenMobileMenu = useCallback(() => setMobileMenuOpen(true), []);\n const handleCloseMobileMenu = useCallback(() => setMobileMenuOpen(false), []);\n const handleToggleCollapsed = useCallback(\n () => setCollapsed((prev) => !prev),\n []\n );\n\n return (\n <StyledLayout ref={ref}>\n {isMobileView ? (\n <MobileMenuHeaderMock onOpenMobileMenu={handleOpenMobileMenu} />\n ) : null}\n <StyledContentRow>\n <StyledRightWindow id=\"right-window\">\n <StyledPage>\n {header}\n <StyledPageBody>{children}</StyledPageBody>\n </StyledPage>\n {isMobileView === false ? <TopRightControlsMock /> : null}\n </StyledRightWindow>\n {isMobileView ? (\n <MainMenuMobileMock\n open={mobileMenuOpen}\n close={handleCloseMobileMenu}\n footer={menuFooter}\n />\n ) : (\n <MainMenuMock\n collapsed={collapsed}\n onToggleCollapsed={handleToggleCollapsed}\n footer={menuFooter}\n />\n )}\n </StyledContentRow>\n {floating}\n </StyledLayout>\n );\n};\n\nPresentationShell.displayName = \"PresentationShell\";\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -12,6 +12,7 @@ var _exportNames = {
|
|
|
12
12
|
ProjectPageHeader: true,
|
|
13
13
|
TabHeader: true,
|
|
14
14
|
FloatingControls: true,
|
|
15
|
+
HelpAndSupportMenu: true,
|
|
15
16
|
LinkingCommandsButton: true,
|
|
16
17
|
SuggestSubtasksButton: true,
|
|
17
18
|
TaskOptionsMenu: true,
|
|
@@ -23,6 +24,12 @@ Object.defineProperty(exports, "FloatingControls", {
|
|
|
23
24
|
return _FloatingControls.FloatingControls;
|
|
24
25
|
}
|
|
25
26
|
});
|
|
27
|
+
Object.defineProperty(exports, "HelpAndSupportMenu", {
|
|
28
|
+
enumerable: true,
|
|
29
|
+
get: function get() {
|
|
30
|
+
return _HelpAndSupportMenu.HelpAndSupportMenu;
|
|
31
|
+
}
|
|
32
|
+
});
|
|
26
33
|
Object.defineProperty(exports, "LinkingCommandsButton", {
|
|
27
34
|
enumerable: true,
|
|
28
35
|
get: function get() {
|
|
@@ -106,6 +113,7 @@ var _RoundAvatar = require("./RoundAvatar");
|
|
|
106
113
|
var _PresentationShell = require("./PresentationShell");
|
|
107
114
|
var _headers = require("./headers");
|
|
108
115
|
var _FloatingControls = require("./FloatingControls");
|
|
116
|
+
var _HelpAndSupportMenu = require("./HelpAndSupportMenu");
|
|
109
117
|
var _LinkingCommandsButton = require("./LinkingCommandsButton");
|
|
110
118
|
var _SuggestSubtasksButton = require("./SuggestSubtasksButton");
|
|
111
119
|
var _TaskOptionsMenu = require("./TaskOptionsMenu");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_tokens","require","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_MainLogo","_RoundAvatar","_PresentationShell","_headers","_FloatingControls","_LinkingCommandsButton","_SuggestSubtasksButton","_TaskOptionsMenu"],"sources":["../../../../src/presentation/shared/index.ts"],"sourcesContent":["/**\n * Shared building blocks for the Presentation mock-ups (`Presentation/*`\n * stories). The application shell, page headers, tab bar and small widgets are\n * defined once here and reused by the List view, Column view, Task sheet and\n * empty-page stories so the chrome stays identical and in one place.\n */\nexport * from \"./tokens\";\nexport { MainLogo } from \"./MainLogo\";\nexport { RoundAvatar } from \"./RoundAvatar\";\nexport { PresentationShell, StyledPagePaper } from \"./PresentationShell\";\nexport type { PresentationShellProps } from \"./PresentationShell\";\nexport { PageHeader, ProjectPageHeader, TabHeader } from \"./headers\";\nexport type {\n PageHeaderProps,\n ProjectPageHeaderProps,\n TabHeaderProps,\n} from \"./headers\";\nexport { FloatingControls } from \"./FloatingControls\";\nexport { LinkingCommandsButton } from \"./LinkingCommandsButton\";\nexport { SuggestSubtasksButton } from \"./SuggestSubtasksButton\";\nexport { TaskOptionsMenu, TaskListOptionsMenu } from \"./TaskOptionsMenu\";\nexport type {\n TaskOptionsMenuProps,\n TaskListOptionsMenuProps,\n} from \"./TaskOptionsMenu\";\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","names":["_tokens","require","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_MainLogo","_RoundAvatar","_PresentationShell","_headers","_FloatingControls","_HelpAndSupportMenu","_LinkingCommandsButton","_SuggestSubtasksButton","_TaskOptionsMenu"],"sources":["../../../../src/presentation/shared/index.ts"],"sourcesContent":["/**\n * Shared building blocks for the Presentation mock-ups (`Presentation/*`\n * stories). The application shell, page headers, tab bar and small widgets are\n * defined once here and reused by the List view, Column view, Task sheet and\n * empty-page stories so the chrome stays identical and in one place.\n */\nexport * from \"./tokens\";\nexport { MainLogo } from \"./MainLogo\";\nexport { RoundAvatar } from \"./RoundAvatar\";\nexport { PresentationShell, StyledPagePaper } from \"./PresentationShell\";\nexport type { PresentationShellProps } from \"./PresentationShell\";\nexport { PageHeader, ProjectPageHeader, TabHeader } from \"./headers\";\nexport type {\n PageHeaderProps,\n ProjectPageHeaderProps,\n TabHeaderProps,\n} from \"./headers\";\nexport { FloatingControls } from \"./FloatingControls\";\nexport { HelpAndSupportMenu } from \"./HelpAndSupportMenu\";\nexport type { HelpAndSupportMenuProps } from \"./HelpAndSupportMenu\";\nexport { LinkingCommandsButton } from \"./LinkingCommandsButton\";\nexport { SuggestSubtasksButton } from \"./SuggestSubtasksButton\";\nexport { TaskOptionsMenu, TaskListOptionsMenu } from \"./TaskOptionsMenu\";\nexport type {\n TaskOptionsMenuProps,\n TaskListOptionsMenuProps,\n} from \"./TaskOptionsMenu\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,IAAAA,OAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,OAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAL,OAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,IAAA;MAAA,OAAAb,OAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAS,SAAA,GAAAb,OAAA;AACA,IAAAc,YAAA,GAAAd,OAAA;AACA,IAAAe,kBAAA,GAAAf,OAAA;AAEA,IAAAgB,QAAA,GAAAhB,OAAA;AAMA,IAAAiB,iBAAA,GAAAjB,OAAA;AACA,IAAAkB,mBAAA,GAAAlB,OAAA;AAEA,IAAAmB,sBAAA,GAAAnB,OAAA;AACA,IAAAoB,sBAAA,GAAApB,OAAA;AACA,IAAAqB,gBAAA,GAAArB,OAAA","ignoreList":[]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ReactElement } from "react";
|
|
2
|
+
export interface HelpAndSupportMenuProps {
|
|
3
|
+
/** Disable the hover tooltip (used inside the mobile menu). */
|
|
4
|
+
mobile?: boolean;
|
|
5
|
+
}
|
|
6
|
+
export declare const HelpAndSupportMenu: {
|
|
7
|
+
({ mobile, }: HelpAndSupportMenuProps): ReactElement;
|
|
8
|
+
displayName: string;
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=HelpAndSupportMenu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HelpAndSupportMenu.d.ts","sourceRoot":"","sources":["../../../../src/presentation/shared/HelpAndSupportMenu.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,YAAY,EAAyB,MAAM,OAAO,CAAC;AAmHnE,MAAM,WAAW,uBAAuB;IACtC,+DAA+D;IAC/D,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,eAAO,MAAM,kBAAkB;kBAE5B,uBAAuB,GAAG,YAAY;;CAuDxC,CAAC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import React, { useCallback, useState } from "react";
|
|
2
|
+
import styled from "styled-components";
|
|
3
|
+
import { TRANSITION } from "./tokens";
|
|
4
|
+
import { CollapseExpandSingleIcon, HelpIcon, MessageEmptyIcon, NoteIcon, PlayCircleOutlineIcon, StarOutlineIcon } from "../../components/Icons";
|
|
5
|
+
import { List, ListItem, ListSeparator } from "../../components/List";
|
|
6
|
+
import { Menu } from "../../components/Menu";
|
|
7
|
+
import { Tooltip } from "../../components/Tooltip";
|
|
8
|
+
import { Body2 } from "../../components/Typography";
|
|
9
|
+
|
|
10
|
+
/* ------------------------------------------------------------------ */
|
|
11
|
+
/* Help & Support menu (mirrors MainMenu/HelpAndSupportMenu.js) */
|
|
12
|
+
/* ------------------------------------------------------------------ */
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* The "Help & Support" entry that sits at the very bottom of the main menu.
|
|
16
|
+
* Clicking it opens a popover (Help Docs / YouTube Channel / Live Support /
|
|
17
|
+
* New Features), matching the real MainMenu/HelpAndSupportMenu.js. It is a
|
|
18
|
+
* shared building block because every Product Messaging concept re-uses this
|
|
19
|
+
* same entry point.
|
|
20
|
+
*
|
|
21
|
+
* The label + caret carry the `menu-item-text` class so the shell's existing
|
|
22
|
+
* collapse rules hide them automatically when the menu is collapsed (state or
|
|
23
|
+
* <1280px media query). Clicks are intentionally no-ops in the mock.
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
const StyledHelpTarget = styled.div.withConfig({
|
|
27
|
+
displayName: "HelpAndSupportMenu__StyledHelpTarget",
|
|
28
|
+
componentId: "sc-16a350b-0"
|
|
29
|
+
})(["position:relative;display:flex;align-items:center;flex-shrink:0;height:40px;padding:0 4px 0 12px;margin:0 12px 16px;border-radius:8px;cursor:pointer;transition:background-color ", ";.help-icon{flex-shrink:0;fill:var(--color-theme-700);opacity:0.7;}.help-label{margin-left:12px;min-width:0;overflow:hidden;text-overflow:ellipsis;}.help-caret{margin-left:auto;flex-shrink:0;fill:var(--color-theme-700);opacity:0.7;transition:transform ", ";transform:rotate(180deg);}&:hover{background-color:var(--color-theme-300);.help-icon,.help-caret{fill:var(--color-theme-900);opacity:1;}.help-label{color:var(--color-theme-900);}}&.open{background-color:var(--color-secondary-200);.help-icon,.help-caret{fill:var(--color-secondary);opacity:1;}.help-label{color:var(--color-secondary);}.help-caret{transform:rotate(0deg);}}"], TRANSITION, TRANSITION);
|
|
30
|
+
|
|
31
|
+
/* The popover body. ListItem gives leading icons an 8px gap by default; the
|
|
32
|
+
real menu uses 12px (tw-mr-3), so bump it here. */
|
|
33
|
+
const StyledHelpMenu = styled.div.withConfig({
|
|
34
|
+
displayName: "HelpAndSupportMenu__StyledHelpMenu",
|
|
35
|
+
componentId: "sc-16a350b-1"
|
|
36
|
+
})(["width:216px;.c-list{padding:8px 0;}.c-list-item > svg:first-child{margin-right:12px;}"]);
|
|
37
|
+
export const HelpAndSupportMenu = _ref => {
|
|
38
|
+
let _ref$mobile = _ref.mobile,
|
|
39
|
+
mobile = _ref$mobile === void 0 ? false : _ref$mobile;
|
|
40
|
+
const _useState = useState(false),
|
|
41
|
+
open = _useState[0],
|
|
42
|
+
setOpen = _useState[1];
|
|
43
|
+
const handleOpen = useCallback(() => setOpen(true), []);
|
|
44
|
+
const handleClose = useCallback(() => setOpen(false), []);
|
|
45
|
+
return /*#__PURE__*/React.createElement(Menu, {
|
|
46
|
+
open: open,
|
|
47
|
+
onOpen: handleOpen,
|
|
48
|
+
onClose: handleClose,
|
|
49
|
+
position: "top-start",
|
|
50
|
+
target: /*#__PURE__*/React.createElement(Tooltip, {
|
|
51
|
+
title: "Help & Support",
|
|
52
|
+
placement: "right",
|
|
53
|
+
disable: mobile
|
|
54
|
+
}, /*#__PURE__*/React.createElement(StyledHelpTarget, {
|
|
55
|
+
className: open ? "open" : undefined,
|
|
56
|
+
"data-testid": "help-support-menu",
|
|
57
|
+
onClick: handleOpen
|
|
58
|
+
}, /*#__PURE__*/React.createElement(HelpIcon, {
|
|
59
|
+
className: "help-icon"
|
|
60
|
+
}), /*#__PURE__*/React.createElement(Body2, {
|
|
61
|
+
weight: "medium",
|
|
62
|
+
color: "secondary",
|
|
63
|
+
whitespace: "no-wrap",
|
|
64
|
+
className: "help-label menu-item-text"
|
|
65
|
+
}, "Help & Support"), /*#__PURE__*/React.createElement(CollapseExpandSingleIcon, {
|
|
66
|
+
className: "help-caret menu-item-text"
|
|
67
|
+
})))
|
|
68
|
+
}, /*#__PURE__*/React.createElement(StyledHelpMenu, null, /*#__PURE__*/React.createElement(List, {
|
|
69
|
+
tabIndex: -1
|
|
70
|
+
}, /*#__PURE__*/React.createElement(ListItem, {
|
|
71
|
+
onClick: handleClose
|
|
72
|
+
}, /*#__PURE__*/React.createElement(NoteIcon, null), "Help Docs"), /*#__PURE__*/React.createElement(ListItem, {
|
|
73
|
+
onClick: handleClose
|
|
74
|
+
}, /*#__PURE__*/React.createElement(PlayCircleOutlineIcon, null), "YouTube Channel"), /*#__PURE__*/React.createElement(ListItem, {
|
|
75
|
+
onClick: handleClose
|
|
76
|
+
}, /*#__PURE__*/React.createElement(MessageEmptyIcon, null), "Live Support"), /*#__PURE__*/React.createElement(ListSeparator, null), /*#__PURE__*/React.createElement(ListItem, {
|
|
77
|
+
onClick: handleClose
|
|
78
|
+
}, /*#__PURE__*/React.createElement(StarOutlineIcon, null), "New Features"))));
|
|
79
|
+
};
|
|
80
|
+
HelpAndSupportMenu.displayName = "HelpAndSupportMenu";
|
|
81
|
+
//# sourceMappingURL=HelpAndSupportMenu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HelpAndSupportMenu.js","names":["React","useCallback","useState","styled","TRANSITION","CollapseExpandSingleIcon","HelpIcon","MessageEmptyIcon","NoteIcon","PlayCircleOutlineIcon","StarOutlineIcon","List","ListItem","ListSeparator","Menu","Tooltip","Body2","StyledHelpTarget","div","withConfig","displayName","componentId","StyledHelpMenu","HelpAndSupportMenu","_ref","_ref$mobile","mobile","_useState","open","setOpen","handleOpen","handleClose","createElement","onOpen","onClose","position","target","title","placement","disable","className","undefined","onClick","weight","color","whitespace","tabIndex"],"sources":["../../../../src/presentation/shared/HelpAndSupportMenu.tsx"],"sourcesContent":["import React, { ReactElement, useCallback, useState } from \"react\";\n\nimport styled from \"styled-components\";\n\nimport { TRANSITION } from \"./tokens\";\nimport {\n CollapseExpandSingleIcon,\n HelpIcon,\n MessageEmptyIcon,\n NoteIcon,\n PlayCircleOutlineIcon,\n StarOutlineIcon,\n} from \"../../components/Icons\";\nimport { List, ListItem, ListSeparator } from \"../../components/List\";\nimport { Menu } from \"../../components/Menu\";\nimport { Tooltip } from \"../../components/Tooltip\";\nimport { Body2 } from \"../../components/Typography\";\n\n/* ------------------------------------------------------------------ */\n/* Help & Support menu (mirrors MainMenu/HelpAndSupportMenu.js) */\n/* ------------------------------------------------------------------ */\n\n/**\n * The \"Help & Support\" entry that sits at the very bottom of the main menu.\n * Clicking it opens a popover (Help Docs / YouTube Channel / Live Support /\n * New Features), matching the real MainMenu/HelpAndSupportMenu.js. It is a\n * shared building block because every Product Messaging concept re-uses this\n * same entry point.\n *\n * The label + caret carry the `menu-item-text` class so the shell's existing\n * collapse rules hide them automatically when the menu is collapsed (state or\n * <1280px media query). Clicks are intentionally no-ops in the mock.\n */\n\nconst StyledHelpTarget = styled.div`\n position: relative;\n display: flex;\n align-items: center;\n flex-shrink: 0;\n height: 40px;\n padding: 0 4px 0 12px;\n margin: 0 12px 16px;\n border-radius: 8px;\n cursor: pointer;\n transition: background-color ${TRANSITION};\n\n .help-icon {\n flex-shrink: 0;\n fill: var(--color-theme-700);\n opacity: 0.7;\n }\n\n .help-label {\n margin-left: 12px;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .help-caret {\n margin-left: auto;\n flex-shrink: 0;\n fill: var(--color-theme-700);\n opacity: 0.7;\n transition: transform ${TRANSITION};\n transform: rotate(180deg);\n }\n\n &:hover {\n background-color: var(--color-theme-300);\n\n .help-icon,\n .help-caret {\n fill: var(--color-theme-900);\n opacity: 1;\n }\n\n .help-label {\n color: var(--color-theme-900);\n }\n }\n\n &.open {\n background-color: var(--color-secondary-200);\n\n .help-icon,\n .help-caret {\n fill: var(--color-secondary);\n opacity: 1;\n }\n\n .help-label {\n color: var(--color-secondary);\n }\n\n .help-caret {\n transform: rotate(0deg);\n }\n }\n`;\n\n/* The popover body. ListItem gives leading icons an 8px gap by default; the\n real menu uses 12px (tw-mr-3), so bump it here. */\nconst StyledHelpMenu = styled.div`\n width: 216px;\n\n .c-list {\n padding: 8px 0;\n }\n\n .c-list-item > svg:first-child {\n margin-right: 12px;\n }\n`;\n\nexport interface HelpAndSupportMenuProps {\n /** Disable the hover tooltip (used inside the mobile menu). */\n mobile?: boolean;\n}\n\nexport const HelpAndSupportMenu = ({\n mobile = false,\n}: HelpAndSupportMenuProps): ReactElement => {\n const [open, setOpen] = useState(false);\n const handleOpen = useCallback(() => setOpen(true), []);\n const handleClose = useCallback(() => setOpen(false), []);\n\n return (\n <Menu\n open={open}\n onOpen={handleOpen}\n onClose={handleClose}\n position=\"top-start\"\n target={\n <Tooltip title=\"Help & Support\" placement=\"right\" disable={mobile}>\n <StyledHelpTarget\n className={open ? \"open\" : undefined}\n data-testid=\"help-support-menu\"\n onClick={handleOpen}\n >\n <HelpIcon className=\"help-icon\" />\n <Body2\n weight=\"medium\"\n color=\"secondary\"\n whitespace=\"no-wrap\"\n className=\"help-label menu-item-text\"\n >\n Help & Support\n </Body2>\n <CollapseExpandSingleIcon className=\"help-caret menu-item-text\" />\n </StyledHelpTarget>\n </Tooltip>\n }\n >\n <StyledHelpMenu>\n <List tabIndex={-1}>\n <ListItem onClick={handleClose}>\n <NoteIcon />\n Help Docs\n </ListItem>\n <ListItem onClick={handleClose}>\n <PlayCircleOutlineIcon />\n YouTube Channel\n </ListItem>\n <ListItem onClick={handleClose}>\n <MessageEmptyIcon />\n Live Support\n </ListItem>\n <ListSeparator />\n <ListItem onClick={handleClose}>\n <StarOutlineIcon />\n New Features\n </ListItem>\n </List>\n </StyledHelpMenu>\n </Menu>\n );\n};\n\nHelpAndSupportMenu.displayName = \"HelpAndSupportMenu\";\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -8,6 +8,8 @@ export interface PresentationShellProps {
|
|
|
8
8
|
children: ReactNode;
|
|
9
9
|
/** Optional fixed controls (e.g. <FloatingControls />). */
|
|
10
10
|
floating?: ReactNode;
|
|
11
|
+
/** Optional content pinned to the bottom of the main menu (e.g. <HelpAndSupportMenu />). */
|
|
12
|
+
menuFooter?: ReactNode;
|
|
11
13
|
}
|
|
12
14
|
/**
|
|
13
15
|
* The full application shell shared by every presentation mock-up: the main
|
|
@@ -16,7 +18,7 @@ export interface PresentationShellProps {
|
|
|
16
18
|
* `header` and the body via `children`.
|
|
17
19
|
*/
|
|
18
20
|
export declare const PresentationShell: {
|
|
19
|
-
({ header, children, floating, }: PresentationShellProps): ReactElement;
|
|
21
|
+
({ header, children, floating, menuFooter, }: PresentationShellProps): ReactElement;
|
|
20
22
|
displayName: string;
|
|
21
23
|
};
|
|
22
24
|
//# sourceMappingURL=PresentationShell.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PresentationShell.d.ts","sourceRoot":"","sources":["../../../../src/presentation/shared/PresentationShell.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EACZ,YAAY,EACZ,SAAS,EAKV,MAAM,OAAO,CAAC;AAgWf,gFAAgF;AAChF,eAAO,MAAM,eAAe,wMAG3B,CAAC;
|
|
1
|
+
{"version":3,"file":"PresentationShell.d.ts","sourceRoot":"","sources":["../../../../src/presentation/shared/PresentationShell.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EACZ,YAAY,EACZ,SAAS,EAKV,MAAM,OAAO,CAAC;AAgWf,gFAAgF;AAChF,eAAO,MAAM,eAAe,wMAG3B,CAAC;AA2IF,MAAM,WAAW,sBAAsB;IACrC,gFAAgF;IAChF,MAAM,EAAE,SAAS,CAAC;IAClB,kEAAkE;IAClE,QAAQ,EAAE,SAAS,CAAC;IACpB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,4FAA4F;IAC5F,UAAU,CAAC,EAAE,SAAS,CAAC;CACxB;AAED;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB;kDAK3B,sBAAsB,GAAG,YAAY;;CAyDvC,CAAC"}
|
|
@@ -161,7 +161,8 @@ const MenuItemsMock = _ref => {
|
|
|
161
161
|
};
|
|
162
162
|
const MainMenuMock = _ref3 => {
|
|
163
163
|
let collapsed = _ref3.collapsed,
|
|
164
|
-
onToggleCollapsed = _ref3.onToggleCollapsed
|
|
164
|
+
onToggleCollapsed = _ref3.onToggleCollapsed,
|
|
165
|
+
footer = _ref3.footer;
|
|
165
166
|
return /*#__PURE__*/React.createElement(StyledMainMenu, {
|
|
166
167
|
className: collapsed ? "collapsed" : undefined,
|
|
167
168
|
"data-testid": "main-menu"
|
|
@@ -173,11 +174,12 @@ const MainMenuMock = _ref3 => {
|
|
|
173
174
|
variant: "text gray",
|
|
174
175
|
size: "small",
|
|
175
176
|
onClick: onToggleCollapsed
|
|
176
|
-
}, /*#__PURE__*/React.createElement(CollapsIcon, null)))), /*#__PURE__*/React.createElement(MenuItemsMock, null));
|
|
177
|
+
}, /*#__PURE__*/React.createElement(CollapsIcon, null)))), /*#__PURE__*/React.createElement(MenuItemsMock, null), footer);
|
|
177
178
|
};
|
|
178
179
|
const MainMenuMobileMock = _ref4 => {
|
|
179
180
|
let open = _ref4.open,
|
|
180
|
-
close = _ref4.close
|
|
181
|
+
close = _ref4.close,
|
|
182
|
+
footer = _ref4.footer;
|
|
181
183
|
return open ? /*#__PURE__*/React.createElement(Modal, {
|
|
182
184
|
open: open,
|
|
183
185
|
onClose: close
|
|
@@ -191,7 +193,7 @@ const MainMenuMobileMock = _ref4 => {
|
|
|
191
193
|
variant: "text gray"
|
|
192
194
|
}, /*#__PURE__*/React.createElement(CloseIcon, null))), /*#__PURE__*/React.createElement(MenuItemsMock, {
|
|
193
195
|
mobile: true
|
|
194
|
-
}))) : null;
|
|
196
|
+
}), footer)) : null;
|
|
195
197
|
};
|
|
196
198
|
const MobileMenuHeaderMock = _ref5 => {
|
|
197
199
|
let onOpenMobileMenu = _ref5.onOpenMobileMenu;
|
|
@@ -228,7 +230,8 @@ const TopRightControlsMock = () => /*#__PURE__*/React.createElement(StyledTopRig
|
|
|
228
230
|
export const PresentationShell = _ref6 => {
|
|
229
231
|
let header = _ref6.header,
|
|
230
232
|
children = _ref6.children,
|
|
231
|
-
floating = _ref6.floating
|
|
233
|
+
floating = _ref6.floating,
|
|
234
|
+
menuFooter = _ref6.menuFooter;
|
|
232
235
|
const _useState = useState(false),
|
|
233
236
|
mobileMenuOpen = _useState[0],
|
|
234
237
|
setMobileMenuOpen = _useState[1];
|
|
@@ -262,10 +265,12 @@ export const PresentationShell = _ref6 => {
|
|
|
262
265
|
id: "right-window"
|
|
263
266
|
}, /*#__PURE__*/React.createElement(StyledPage, null, header, /*#__PURE__*/React.createElement(StyledPageBody, null, children)), isMobileView === false ? /*#__PURE__*/React.createElement(TopRightControlsMock, null) : null), isMobileView ? /*#__PURE__*/React.createElement(MainMenuMobileMock, {
|
|
264
267
|
open: mobileMenuOpen,
|
|
265
|
-
close: handleCloseMobileMenu
|
|
268
|
+
close: handleCloseMobileMenu,
|
|
269
|
+
footer: menuFooter
|
|
266
270
|
}) : /*#__PURE__*/React.createElement(MainMenuMock, {
|
|
267
271
|
collapsed: collapsed,
|
|
268
|
-
onToggleCollapsed: handleToggleCollapsed
|
|
272
|
+
onToggleCollapsed: handleToggleCollapsed,
|
|
273
|
+
footer: menuFooter
|
|
269
274
|
})), floating);
|
|
270
275
|
};
|
|
271
276
|
PresentationShell.displayName = "PresentationShell";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PresentationShell.js","names":["React","useCallback","useEffect","useRef","useState","styled","MainLogo","BREAKPOINT","SM","TRANSITION","XL","IconButton","ActivityIcon","CalendarIcon","ClockStopwatchIndicatorIcon","CloseIcon","CollapsIcon","EstimatesIcon","InvoicesIcon","MobileMenuIcon","MyWorkIcon","NotificationBellIcon","PeopleIcon","ProjectsIcon","ReportTimeIcon","ReportsIcon","RocketIcon","SearchIcon","Modal","Paper","Tooltip","Body2","Caption1","useResizeObserver","MENU_ITEMS","icon","text","active","StyledLayout","div","withConfig","displayName","componentId","StyledContentRow","StyledRightWindow","StyledMainMenu","StyledMenuHeader","StyledMenuScroll","StyledMenuSection","StyledMenuItem","a","StyledMobileMenuClose","StyledMobileMenuHeader","StyledIconRow","StyledTopRightControls","StyledHeaderAvatar","StyledPage","StyledPageBody","StyledPagePaper","MenuItemsMock","_ref","_ref$mobile","mobile","createElement","className","weight","color","map","_ref2","Icon","key","title","placement","disable","undefined","whitespace","MainMenuMock","_ref3","collapsed","onToggleCollapsed","variant","size","onClick","MainMenuMobileMock","_ref4","open","close","onClose","MobileMenuHeaderMock","_ref5","onOpenMobileMenu","TopRightControlsMock","PresentationShell","_ref6","header","children","floating","_useState","mobileMenuOpen","setMobileMenuOpen","_useState2","setCollapsed","_useState3","isMobileView","setIsMobileView","ref","dimensions","width","handleOpenMobileMenu","handleCloseMobileMenu","handleToggleCollapsed","prev","id"],"sources":["../../../../src/presentation/shared/PresentationShell.tsx"],"sourcesContent":["import React, {\n ReactElement,\n ReactNode,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\n\nimport styled from \"styled-components\";\n\nimport { MainLogo } from \"./MainLogo\";\nimport { BREAKPOINT, SM, TRANSITION, XL } from \"./tokens\";\nimport { IconButton } from \"../../components/IconButton\";\nimport {\n ActivityIcon,\n CalendarIcon,\n ClockStopwatchIndicatorIcon,\n CloseIcon,\n CollapsIcon,\n EstimatesIcon,\n InvoicesIcon,\n MobileMenuIcon,\n MyWorkIcon,\n NotificationBellIcon,\n PeopleIcon,\n ProjectsIcon,\n ReportTimeIcon,\n ReportsIcon,\n RocketIcon,\n SearchIcon,\n} from \"../../components/Icons\";\nimport { Modal } from \"../../components/Modal\";\nimport { Paper } from \"../../components/Paper\";\nimport { Tooltip } from \"../../components/Tooltip\";\nimport { Body2, Caption1 } from \"../../components/Typography\";\nimport { useResizeObserver } from \"../../utils\";\n\nconst MENU_ITEMS: {\n icon: React.FC<React.SVGProps<SVGSVGElement>>;\n text: string;\n active?: boolean;\n}[] = [\n { icon: RocketIcon, text: \"Getting Started\" },\n { icon: ProjectsIcon, text: \"Projects\", active: true },\n { icon: MyWorkIcon, text: \"My Work\" },\n { icon: ActivityIcon, text: \"Activity\" },\n { icon: CalendarIcon, text: \"Calendar\" },\n { icon: PeopleIcon, text: \"People\" },\n { icon: ReportTimeIcon, text: \"Time\" },\n { icon: ReportsIcon, text: \"Reports\" },\n { icon: InvoicesIcon, text: \"Invoices\" },\n { icon: EstimatesIcon, text: \"Estimates\" },\n];\n\n/* ------------------------------------------------------------------ */\n/* Layout shell (mirrors Layout.js) */\n/* ------------------------------------------------------------------ */\n\nconst StyledLayout = styled.div`\n height: 100vh;\n display: flex;\n flex-direction: column;\n background-color: var(--body-bg-main);\n`;\n\nconst StyledContentRow = styled.div`\n position: relative;\n display: flex;\n flex-direction: row-reverse;\n flex: 1 1 0%;\n flex-grow: 1;\n overflow-y: auto;\n`;\n\nconst StyledRightWindow = styled.div`\n position: relative;\n display: flex;\n flex-direction: column;\n flex: 1 1 0%;\n flex-grow: 1;\n width: 100%;\n height: 100%;\n overflow-y: auto;\n padding: 0 16px;\n\n @media (min-width: ${SM}) {\n padding-right: 32px;\n }\n`;\n\n/* ------------------------------------------------------------------ */\n/* Main menu (mirrors MainMenu.js + MainMenu.less) */\n/* ------------------------------------------------------------------ */\n\nconst StyledMainMenu = styled.div`\n position: relative;\n z-index: 1;\n display: none;\n flex-direction: column;\n height: 100%;\n margin-right: 4px;\n flex-shrink: 0;\n width: 240px;\n transition: width ${TRANSITION};\n\n @media (min-width: ${SM}) {\n display: flex;\n }\n\n &.collapsed {\n width: 72px;\n }\n\n .menu-item-text,\n .menu-section,\n #logotype {\n transition: all ${TRANSITION};\n }\n\n &.collapsed .menu-item-text {\n opacity: 0;\n visibility: hidden;\n width: 0;\n margin-left: 0;\n }\n\n &.collapsed .menu-section {\n transform: scaleY(0);\n opacity: 0;\n max-height: 0;\n margin-bottom: 0;\n }\n\n &.collapsed #logotype {\n transform: translateX(-5%);\n opacity: 0;\n }\n\n &.collapsed .collapse-expand-menu svg {\n transform: rotate(180deg);\n }\n\n &:not(.mobile) {\n @media (max-width: 1279.98px) {\n width: 72px;\n\n .menu-item-text {\n opacity: 0;\n visibility: hidden;\n width: 0;\n margin-left: 0;\n }\n\n .menu-section {\n transform: scaleY(0);\n opacity: 0;\n max-height: 0;\n margin-bottom: 0;\n }\n\n #logotype {\n transform: translateX(-5%);\n opacity: 0;\n }\n }\n }\n\n &.mobile {\n display: flex;\n position: absolute;\n left: 0;\n top: 0;\n width: 240px;\n background-color: var(--page-paper-main);\n }\n`;\n\nconst StyledMenuHeader = styled.div`\n position: relative;\n height: 68px;\n display: flex;\n align-items: center;\n flex-shrink: 0;\n overflow: hidden;\n\n .main-logo {\n position: absolute;\n left: 20px;\n color: var(--color-secondary);\n\n path {\n fill: var(--color-secondary);\n }\n }\n\n .collapse-expand-menu {\n position: absolute;\n right: 4px;\n display: none;\n\n @media (min-width: ${XL}) {\n display: flex;\n }\n }\n`;\n\nconst StyledMenuScroll = styled.div`\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n min-height: 0;\n margin: 12px 0;\n overflow-y: auto;\n overflow-x: hidden;\n`;\n\nconst StyledMenuSection = styled.div`\n display: flex;\n align-items: center;\n margin: 0 12px 8px;\n padding: 0 4px 0 12px;\n`;\n\nconst StyledMenuItem = styled.a`\n display: flex;\n align-items: center;\n height: 40px;\n padding: 0 4px 0 12px;\n margin: 0 12px 2px;\n border-radius: 8px;\n cursor: pointer;\n text-decoration: none;\n\n svg {\n flex-shrink: 0;\n fill: var(--color-theme-700);\n opacity: 0.7;\n }\n\n .menu-item-text {\n margin-left: 12px;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n &:hover {\n transition: all ${TRANSITION};\n background-color: var(--color-theme-300);\n\n svg {\n fill: var(--color-theme-900);\n opacity: 1;\n }\n\n .menu-item-text {\n color: var(--color-theme-900);\n }\n }\n\n &.active {\n background-color: var(--color-secondary-200);\n\n svg {\n fill: var(--color-secondary);\n opacity: 1;\n }\n\n .menu-item-text {\n color: var(--color-secondary);\n }\n }\n`;\n\nconst StyledMobileMenuClose = styled(IconButton)`\n position: absolute;\n right: 16px;\n`;\n\n/* ------------------------------------------------------------------ */\n/* Top bars */\n/* ------------------------------------------------------------------ */\n\nconst StyledMobileMenuHeader = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 16px;\n background-color: var(--color-primary);\n z-index: 50;\n\n @media (min-width: ${SM}) {\n display: none;\n }\n\n .mobile-menu-icon {\n fill: var(--color-theme-300);\n }\n`;\n\nconst StyledIconRow = styled.div`\n display: flex;\n align-items: center;\n`;\n\nconst StyledTopRightControls = styled.div`\n position: absolute;\n top: 0;\n right: 0;\n display: none;\n align-items: center;\n justify-content: flex-end;\n padding: 12px 32px 12px 0;\n\n @media (min-width: ${SM}) {\n display: flex;\n }\n`;\n\nconst StyledHeaderAvatar = styled.div`\n width: 28px;\n height: 28px;\n border-radius: 50%;\n background-color: var(--color-secondary);\n color: var(--only-white);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 11px;\n font-weight: 600;\n margin: 0 8px;\n flex-shrink: 0;\n cursor: pointer;\n\n /* neon theme: use paper colour for the initials */\n .neon & {\n color: var(--page-paper-main);\n }\n`;\n\n/* ------------------------------------------------------------------ */\n/* Page region (mirrors Page.jsx / PageBody.jsx) */\n/* ------------------------------------------------------------------ */\n\nconst StyledPage = styled.div`\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n`;\n\nconst StyledPageBody = styled.div`\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n margin-bottom: 32px;\n min-height: 0;\n`;\n\n/** The paper card that holds page content (used by list view & empty pages). */\nexport const StyledPagePaper = styled(Paper)`\n flex-grow: 1;\n width: 100%;\n`;\n\n/* ------------------------------------------------------------------ */\n/* Mocked layout building blocks */\n/* ------------------------------------------------------------------ */\n\ninterface MenuItemsProps {\n mobile?: boolean;\n}\n\nconst MenuItemsMock = ({ mobile = false }: MenuItemsProps): ReactElement => (\n <StyledMenuScroll>\n <StyledMenuSection className=\"menu-section\">\n <Caption1 weight=\"bold\" color=\"tertiary\">\n MENU\n </Caption1>\n </StyledMenuSection>\n {MENU_ITEMS.map(({ icon: Icon, text, active }) => (\n <Tooltip key={text} title={text} placement=\"right\" disable={mobile}>\n <StyledMenuItem className={active ? \"active\" : undefined}>\n <Icon />\n <Body2\n weight=\"medium\"\n color=\"secondary\"\n whitespace=\"no-wrap\"\n className=\"menu-item-text\"\n >\n {text}\n </Body2>\n </StyledMenuItem>\n </Tooltip>\n ))}\n </StyledMenuScroll>\n);\n\ninterface MainMenuMockProps {\n collapsed: boolean;\n onToggleCollapsed: () => void;\n}\n\nconst MainMenuMock = ({\n collapsed,\n onToggleCollapsed,\n}: MainMenuMockProps): ReactElement => (\n <StyledMainMenu\n className={collapsed ? \"collapsed\" : undefined}\n data-testid=\"main-menu\"\n >\n <StyledMenuHeader>\n <a className=\"main-logo\">\n <MainLogo />\n </a>\n <div className=\"collapse-expand-menu\">\n <IconButton\n variant=\"text gray\"\n size=\"small\"\n onClick={onToggleCollapsed}\n >\n <CollapsIcon />\n </IconButton>\n </div>\n </StyledMenuHeader>\n <MenuItemsMock />\n </StyledMainMenu>\n);\n\ninterface MainMenuMobileMockProps {\n open: boolean;\n close: () => void;\n}\n\nconst MainMenuMobileMock = ({\n open,\n close,\n}: MainMenuMobileMockProps): ReactElement | null =>\n open ? (\n <Modal open={open} onClose={close}>\n <StyledMainMenu className=\"mobile\" data-testid=\"main-menu-mobile\">\n <StyledMenuHeader>\n <a className=\"main-logo\">\n <MainLogo />\n </a>\n <StyledMobileMenuClose onClick={close} variant=\"text gray\">\n <CloseIcon />\n </StyledMobileMenuClose>\n </StyledMenuHeader>\n <MenuItemsMock mobile />\n </StyledMainMenu>\n </Modal>\n ) : null;\n\ninterface MobileMenuHeaderMockProps {\n onOpenMobileMenu: () => void;\n}\n\nconst MobileMenuHeaderMock = ({\n onOpenMobileMenu,\n}: MobileMenuHeaderMockProps): ReactElement => (\n <StyledMobileMenuHeader>\n <IconButton size=\"big\" variant=\"circle raised\" onClick={onOpenMobileMenu}>\n <MobileMenuIcon className=\"mobile-menu-icon\" />\n </IconButton>\n <StyledIconRow>\n <IconButton variant=\"text gray\">\n <SearchIcon />\n </IconButton>\n <StyledHeaderAvatar>JS</StyledHeaderAvatar>\n <IconButton variant=\"text gray\">\n <NotificationBellIcon />\n </IconButton>\n </StyledIconRow>\n </StyledMobileMenuHeader>\n);\n\nconst TopRightControlsMock = (): ReactElement => (\n <StyledTopRightControls>\n <IconButton variant=\"text gray\">\n <ClockStopwatchIndicatorIcon />\n </IconButton>\n <IconButton variant=\"text gray\">\n <SearchIcon />\n </IconButton>\n <StyledHeaderAvatar>JS</StyledHeaderAvatar>\n <IconButton variant=\"text gray\">\n <NotificationBellIcon />\n </IconButton>\n </StyledTopRightControls>\n);\n\n/* ------------------------------------------------------------------ */\n/* PresentationShell */\n/* ------------------------------------------------------------------ */\n\nexport interface PresentationShellProps {\n /** Page header row (e.g. <ProjectPageHeader /> or <PageHeader title=\"…\" />). */\n header: ReactNode;\n /** Page body content rendered inside the scrollable page area. */\n children: ReactNode;\n /** Optional fixed controls (e.g. <FloatingControls />). */\n floating?: ReactNode;\n}\n\n/**\n * The full application shell shared by every presentation mock-up: the main\n * menu on the left (auto-collapsing below 1280px, modal below 640px), the\n * top-right controls and the scrollable page area. Pass the page header via\n * `header` and the body via `children`.\n */\nexport const PresentationShell = ({\n header,\n children,\n floating,\n}: PresentationShellProps): ReactElement => {\n const [mobileMenuOpen, setMobileMenuOpen] = useState(false);\n const [collapsed, setCollapsed] = useState(false);\n const [isMobileView, setIsMobileView] = useState<boolean>();\n\n const ref = useRef<HTMLDivElement>(null);\n const dimensions = useResizeObserver(ref);\n const width = dimensions?.width;\n\n useEffect(() => {\n if (width) {\n if (width < BREAKPOINT) {\n setIsMobileView(true);\n } else {\n setIsMobileView(false);\n setMobileMenuOpen(false);\n }\n }\n }, [width]);\n\n const handleOpenMobileMenu = useCallback(() => setMobileMenuOpen(true), []);\n const handleCloseMobileMenu = useCallback(() => setMobileMenuOpen(false), []);\n const handleToggleCollapsed = useCallback(\n () => setCollapsed((prev) => !prev),\n []\n );\n\n return (\n <StyledLayout ref={ref}>\n {isMobileView ? (\n <MobileMenuHeaderMock onOpenMobileMenu={handleOpenMobileMenu} />\n ) : null}\n <StyledContentRow>\n <StyledRightWindow id=\"right-window\">\n <StyledPage>\n {header}\n <StyledPageBody>{children}</StyledPageBody>\n </StyledPage>\n {isMobileView === false ? <TopRightControlsMock /> : null}\n </StyledRightWindow>\n {isMobileView ? (\n <MainMenuMobileMock\n open={mobileMenuOpen}\n close={handleCloseMobileMenu}\n />\n ) : (\n <MainMenuMock\n collapsed={collapsed}\n onToggleCollapsed={handleToggleCollapsed}\n />\n )}\n </StyledContentRow>\n {floating}\n </StyledLayout>\n );\n};\n\nPresentationShell.displayName = \"PresentationShell\";\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"PresentationShell.js","names":["React","useCallback","useEffect","useRef","useState","styled","MainLogo","BREAKPOINT","SM","TRANSITION","XL","IconButton","ActivityIcon","CalendarIcon","ClockStopwatchIndicatorIcon","CloseIcon","CollapsIcon","EstimatesIcon","InvoicesIcon","MobileMenuIcon","MyWorkIcon","NotificationBellIcon","PeopleIcon","ProjectsIcon","ReportTimeIcon","ReportsIcon","RocketIcon","SearchIcon","Modal","Paper","Tooltip","Body2","Caption1","useResizeObserver","MENU_ITEMS","icon","text","active","StyledLayout","div","withConfig","displayName","componentId","StyledContentRow","StyledRightWindow","StyledMainMenu","StyledMenuHeader","StyledMenuScroll","StyledMenuSection","StyledMenuItem","a","StyledMobileMenuClose","StyledMobileMenuHeader","StyledIconRow","StyledTopRightControls","StyledHeaderAvatar","StyledPage","StyledPageBody","StyledPagePaper","MenuItemsMock","_ref","_ref$mobile","mobile","createElement","className","weight","color","map","_ref2","Icon","key","title","placement","disable","undefined","whitespace","MainMenuMock","_ref3","collapsed","onToggleCollapsed","footer","variant","size","onClick","MainMenuMobileMock","_ref4","open","close","onClose","MobileMenuHeaderMock","_ref5","onOpenMobileMenu","TopRightControlsMock","PresentationShell","_ref6","header","children","floating","menuFooter","_useState","mobileMenuOpen","setMobileMenuOpen","_useState2","setCollapsed","_useState3","isMobileView","setIsMobileView","ref","dimensions","width","handleOpenMobileMenu","handleCloseMobileMenu","handleToggleCollapsed","prev","id"],"sources":["../../../../src/presentation/shared/PresentationShell.tsx"],"sourcesContent":["import React, {\n ReactElement,\n ReactNode,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\n\nimport styled from \"styled-components\";\n\nimport { MainLogo } from \"./MainLogo\";\nimport { BREAKPOINT, SM, TRANSITION, XL } from \"./tokens\";\nimport { IconButton } from \"../../components/IconButton\";\nimport {\n ActivityIcon,\n CalendarIcon,\n ClockStopwatchIndicatorIcon,\n CloseIcon,\n CollapsIcon,\n EstimatesIcon,\n InvoicesIcon,\n MobileMenuIcon,\n MyWorkIcon,\n NotificationBellIcon,\n PeopleIcon,\n ProjectsIcon,\n ReportTimeIcon,\n ReportsIcon,\n RocketIcon,\n SearchIcon,\n} from \"../../components/Icons\";\nimport { Modal } from \"../../components/Modal\";\nimport { Paper } from \"../../components/Paper\";\nimport { Tooltip } from \"../../components/Tooltip\";\nimport { Body2, Caption1 } from \"../../components/Typography\";\nimport { useResizeObserver } from \"../../utils\";\n\nconst MENU_ITEMS: {\n icon: React.FC<React.SVGProps<SVGSVGElement>>;\n text: string;\n active?: boolean;\n}[] = [\n { icon: RocketIcon, text: \"Getting Started\" },\n { icon: ProjectsIcon, text: \"Projects\", active: true },\n { icon: MyWorkIcon, text: \"My Work\" },\n { icon: ActivityIcon, text: \"Activity\" },\n { icon: CalendarIcon, text: \"Calendar\" },\n { icon: PeopleIcon, text: \"People\" },\n { icon: ReportTimeIcon, text: \"Time\" },\n { icon: ReportsIcon, text: \"Reports\" },\n { icon: InvoicesIcon, text: \"Invoices\" },\n { icon: EstimatesIcon, text: \"Estimates\" },\n];\n\n/* ------------------------------------------------------------------ */\n/* Layout shell (mirrors Layout.js) */\n/* ------------------------------------------------------------------ */\n\nconst StyledLayout = styled.div`\n height: 100vh;\n display: flex;\n flex-direction: column;\n background-color: var(--body-bg-main);\n`;\n\nconst StyledContentRow = styled.div`\n position: relative;\n display: flex;\n flex-direction: row-reverse;\n flex: 1 1 0%;\n flex-grow: 1;\n overflow-y: auto;\n`;\n\nconst StyledRightWindow = styled.div`\n position: relative;\n display: flex;\n flex-direction: column;\n flex: 1 1 0%;\n flex-grow: 1;\n width: 100%;\n height: 100%;\n overflow-y: auto;\n padding: 0 16px;\n\n @media (min-width: ${SM}) {\n padding-right: 32px;\n }\n`;\n\n/* ------------------------------------------------------------------ */\n/* Main menu (mirrors MainMenu.js + MainMenu.less) */\n/* ------------------------------------------------------------------ */\n\nconst StyledMainMenu = styled.div`\n position: relative;\n z-index: 1;\n display: none;\n flex-direction: column;\n height: 100%;\n margin-right: 4px;\n flex-shrink: 0;\n width: 240px;\n transition: width ${TRANSITION};\n\n @media (min-width: ${SM}) {\n display: flex;\n }\n\n &.collapsed {\n width: 72px;\n }\n\n .menu-item-text,\n .menu-section,\n #logotype {\n transition: all ${TRANSITION};\n }\n\n &.collapsed .menu-item-text {\n opacity: 0;\n visibility: hidden;\n width: 0;\n margin-left: 0;\n }\n\n &.collapsed .menu-section {\n transform: scaleY(0);\n opacity: 0;\n max-height: 0;\n margin-bottom: 0;\n }\n\n &.collapsed #logotype {\n transform: translateX(-5%);\n opacity: 0;\n }\n\n &.collapsed .collapse-expand-menu svg {\n transform: rotate(180deg);\n }\n\n &:not(.mobile) {\n @media (max-width: 1279.98px) {\n width: 72px;\n\n .menu-item-text {\n opacity: 0;\n visibility: hidden;\n width: 0;\n margin-left: 0;\n }\n\n .menu-section {\n transform: scaleY(0);\n opacity: 0;\n max-height: 0;\n margin-bottom: 0;\n }\n\n #logotype {\n transform: translateX(-5%);\n opacity: 0;\n }\n }\n }\n\n &.mobile {\n display: flex;\n position: absolute;\n left: 0;\n top: 0;\n width: 240px;\n background-color: var(--page-paper-main);\n }\n`;\n\nconst StyledMenuHeader = styled.div`\n position: relative;\n height: 68px;\n display: flex;\n align-items: center;\n flex-shrink: 0;\n overflow: hidden;\n\n .main-logo {\n position: absolute;\n left: 20px;\n color: var(--color-secondary);\n\n path {\n fill: var(--color-secondary);\n }\n }\n\n .collapse-expand-menu {\n position: absolute;\n right: 4px;\n display: none;\n\n @media (min-width: ${XL}) {\n display: flex;\n }\n }\n`;\n\nconst StyledMenuScroll = styled.div`\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n min-height: 0;\n margin: 12px 0;\n overflow-y: auto;\n overflow-x: hidden;\n`;\n\nconst StyledMenuSection = styled.div`\n display: flex;\n align-items: center;\n margin: 0 12px 8px;\n padding: 0 4px 0 12px;\n`;\n\nconst StyledMenuItem = styled.a`\n display: flex;\n align-items: center;\n height: 40px;\n padding: 0 4px 0 12px;\n margin: 0 12px 2px;\n border-radius: 8px;\n cursor: pointer;\n text-decoration: none;\n\n svg {\n flex-shrink: 0;\n fill: var(--color-theme-700);\n opacity: 0.7;\n }\n\n .menu-item-text {\n margin-left: 12px;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n &:hover {\n transition: all ${TRANSITION};\n background-color: var(--color-theme-300);\n\n svg {\n fill: var(--color-theme-900);\n opacity: 1;\n }\n\n .menu-item-text {\n color: var(--color-theme-900);\n }\n }\n\n &.active {\n background-color: var(--color-secondary-200);\n\n svg {\n fill: var(--color-secondary);\n opacity: 1;\n }\n\n .menu-item-text {\n color: var(--color-secondary);\n }\n }\n`;\n\nconst StyledMobileMenuClose = styled(IconButton)`\n position: absolute;\n right: 16px;\n`;\n\n/* ------------------------------------------------------------------ */\n/* Top bars */\n/* ------------------------------------------------------------------ */\n\nconst StyledMobileMenuHeader = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 16px;\n background-color: var(--color-primary);\n z-index: 50;\n\n @media (min-width: ${SM}) {\n display: none;\n }\n\n .mobile-menu-icon {\n fill: var(--color-theme-300);\n }\n`;\n\nconst StyledIconRow = styled.div`\n display: flex;\n align-items: center;\n`;\n\nconst StyledTopRightControls = styled.div`\n position: absolute;\n top: 0;\n right: 0;\n display: none;\n align-items: center;\n justify-content: flex-end;\n padding: 12px 32px 12px 0;\n\n @media (min-width: ${SM}) {\n display: flex;\n }\n`;\n\nconst StyledHeaderAvatar = styled.div`\n width: 28px;\n height: 28px;\n border-radius: 50%;\n background-color: var(--color-secondary);\n color: var(--only-white);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 11px;\n font-weight: 600;\n margin: 0 8px;\n flex-shrink: 0;\n cursor: pointer;\n\n /* neon theme: use paper colour for the initials */\n .neon & {\n color: var(--page-paper-main);\n }\n`;\n\n/* ------------------------------------------------------------------ */\n/* Page region (mirrors Page.jsx / PageBody.jsx) */\n/* ------------------------------------------------------------------ */\n\nconst StyledPage = styled.div`\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n`;\n\nconst StyledPageBody = styled.div`\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n margin-bottom: 32px;\n min-height: 0;\n`;\n\n/** The paper card that holds page content (used by list view & empty pages). */\nexport const StyledPagePaper = styled(Paper)`\n flex-grow: 1;\n width: 100%;\n`;\n\n/* ------------------------------------------------------------------ */\n/* Mocked layout building blocks */\n/* ------------------------------------------------------------------ */\n\ninterface MenuItemsProps {\n mobile?: boolean;\n}\n\nconst MenuItemsMock = ({ mobile = false }: MenuItemsProps): ReactElement => (\n <StyledMenuScroll>\n <StyledMenuSection className=\"menu-section\">\n <Caption1 weight=\"bold\" color=\"tertiary\">\n MENU\n </Caption1>\n </StyledMenuSection>\n {MENU_ITEMS.map(({ icon: Icon, text, active }) => (\n <Tooltip key={text} title={text} placement=\"right\" disable={mobile}>\n <StyledMenuItem className={active ? \"active\" : undefined}>\n <Icon />\n <Body2\n weight=\"medium\"\n color=\"secondary\"\n whitespace=\"no-wrap\"\n className=\"menu-item-text\"\n >\n {text}\n </Body2>\n </StyledMenuItem>\n </Tooltip>\n ))}\n </StyledMenuScroll>\n);\n\ninterface MainMenuMockProps {\n collapsed: boolean;\n onToggleCollapsed: () => void;\n footer?: ReactNode;\n}\n\nconst MainMenuMock = ({\n collapsed,\n onToggleCollapsed,\n footer,\n}: MainMenuMockProps): ReactElement => (\n <StyledMainMenu\n className={collapsed ? \"collapsed\" : undefined}\n data-testid=\"main-menu\"\n >\n <StyledMenuHeader>\n <a className=\"main-logo\">\n <MainLogo />\n </a>\n <div className=\"collapse-expand-menu\">\n <IconButton\n variant=\"text gray\"\n size=\"small\"\n onClick={onToggleCollapsed}\n >\n <CollapsIcon />\n </IconButton>\n </div>\n </StyledMenuHeader>\n <MenuItemsMock />\n {footer}\n </StyledMainMenu>\n);\n\ninterface MainMenuMobileMockProps {\n open: boolean;\n close: () => void;\n footer?: ReactNode;\n}\n\nconst MainMenuMobileMock = ({\n open,\n close,\n footer,\n}: MainMenuMobileMockProps): ReactElement | null =>\n open ? (\n <Modal open={open} onClose={close}>\n <StyledMainMenu className=\"mobile\" data-testid=\"main-menu-mobile\">\n <StyledMenuHeader>\n <a className=\"main-logo\">\n <MainLogo />\n </a>\n <StyledMobileMenuClose onClick={close} variant=\"text gray\">\n <CloseIcon />\n </StyledMobileMenuClose>\n </StyledMenuHeader>\n <MenuItemsMock mobile />\n {footer}\n </StyledMainMenu>\n </Modal>\n ) : null;\n\ninterface MobileMenuHeaderMockProps {\n onOpenMobileMenu: () => void;\n}\n\nconst MobileMenuHeaderMock = ({\n onOpenMobileMenu,\n}: MobileMenuHeaderMockProps): ReactElement => (\n <StyledMobileMenuHeader>\n <IconButton size=\"big\" variant=\"circle raised\" onClick={onOpenMobileMenu}>\n <MobileMenuIcon className=\"mobile-menu-icon\" />\n </IconButton>\n <StyledIconRow>\n <IconButton variant=\"text gray\">\n <SearchIcon />\n </IconButton>\n <StyledHeaderAvatar>JS</StyledHeaderAvatar>\n <IconButton variant=\"text gray\">\n <NotificationBellIcon />\n </IconButton>\n </StyledIconRow>\n </StyledMobileMenuHeader>\n);\n\nconst TopRightControlsMock = (): ReactElement => (\n <StyledTopRightControls>\n <IconButton variant=\"text gray\">\n <ClockStopwatchIndicatorIcon />\n </IconButton>\n <IconButton variant=\"text gray\">\n <SearchIcon />\n </IconButton>\n <StyledHeaderAvatar>JS</StyledHeaderAvatar>\n <IconButton variant=\"text gray\">\n <NotificationBellIcon />\n </IconButton>\n </StyledTopRightControls>\n);\n\n/* ------------------------------------------------------------------ */\n/* PresentationShell */\n/* ------------------------------------------------------------------ */\n\nexport interface PresentationShellProps {\n /** Page header row (e.g. <ProjectPageHeader /> or <PageHeader title=\"…\" />). */\n header: ReactNode;\n /** Page body content rendered inside the scrollable page area. */\n children: ReactNode;\n /** Optional fixed controls (e.g. <FloatingControls />). */\n floating?: ReactNode;\n /** Optional content pinned to the bottom of the main menu (e.g. <HelpAndSupportMenu />). */\n menuFooter?: ReactNode;\n}\n\n/**\n * The full application shell shared by every presentation mock-up: the main\n * menu on the left (auto-collapsing below 1280px, modal below 640px), the\n * top-right controls and the scrollable page area. Pass the page header via\n * `header` and the body via `children`.\n */\nexport const PresentationShell = ({\n header,\n children,\n floating,\n menuFooter,\n}: PresentationShellProps): ReactElement => {\n const [mobileMenuOpen, setMobileMenuOpen] = useState(false);\n const [collapsed, setCollapsed] = useState(false);\n const [isMobileView, setIsMobileView] = useState<boolean>();\n\n const ref = useRef<HTMLDivElement>(null);\n const dimensions = useResizeObserver(ref);\n const width = dimensions?.width;\n\n useEffect(() => {\n if (width) {\n if (width < BREAKPOINT) {\n setIsMobileView(true);\n } else {\n setIsMobileView(false);\n setMobileMenuOpen(false);\n }\n }\n }, [width]);\n\n const handleOpenMobileMenu = useCallback(() => setMobileMenuOpen(true), []);\n const handleCloseMobileMenu = useCallback(() => setMobileMenuOpen(false), []);\n const handleToggleCollapsed = useCallback(\n () => setCollapsed((prev) => !prev),\n []\n );\n\n return (\n <StyledLayout ref={ref}>\n {isMobileView ? (\n <MobileMenuHeaderMock onOpenMobileMenu={handleOpenMobileMenu} />\n ) : null}\n <StyledContentRow>\n <StyledRightWindow id=\"right-window\">\n <StyledPage>\n {header}\n <StyledPageBody>{children}</StyledPageBody>\n </StyledPage>\n {isMobileView === false ? <TopRightControlsMock /> : null}\n </StyledRightWindow>\n {isMobileView ? (\n <MainMenuMobileMock\n open={mobileMenuOpen}\n close={handleCloseMobileMenu}\n footer={menuFooter}\n />\n ) : (\n <MainMenuMock\n collapsed={collapsed}\n onToggleCollapsed={handleToggleCollapsed}\n footer={menuFooter}\n />\n )}\n </StyledContentRow>\n {floating}\n </StyledLayout>\n );\n};\n\nPresentationShell.displayName = \"PresentationShell\";\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -12,6 +12,8 @@ export type { PresentationShellProps } from "./PresentationShell";
|
|
|
12
12
|
export { PageHeader, ProjectPageHeader, TabHeader } from "./headers";
|
|
13
13
|
export type { PageHeaderProps, ProjectPageHeaderProps, TabHeaderProps, } from "./headers";
|
|
14
14
|
export { FloatingControls } from "./FloatingControls";
|
|
15
|
+
export { HelpAndSupportMenu } from "./HelpAndSupportMenu";
|
|
16
|
+
export type { HelpAndSupportMenuProps } from "./HelpAndSupportMenu";
|
|
15
17
|
export { LinkingCommandsButton } from "./LinkingCommandsButton";
|
|
16
18
|
export { SuggestSubtasksButton } from "./SuggestSubtasksButton";
|
|
17
19
|
export { TaskOptionsMenu, TaskListOptionsMenu } from "./TaskOptionsMenu";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/presentation/shared/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACzE,YAAY,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACrE,YAAY,EACV,eAAe,EACf,sBAAsB,EACtB,cAAc,GACf,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACzE,YAAY,EACV,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/presentation/shared/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACzE,YAAY,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACrE,YAAY,EACV,eAAe,EACf,sBAAsB,EACtB,cAAc,GACf,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,YAAY,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACzE,YAAY,EACV,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,mBAAmB,CAAC"}
|
|
@@ -10,6 +10,7 @@ export { RoundAvatar } from "./RoundAvatar";
|
|
|
10
10
|
export { PresentationShell, StyledPagePaper } from "./PresentationShell";
|
|
11
11
|
export { PageHeader, ProjectPageHeader, TabHeader } from "./headers";
|
|
12
12
|
export { FloatingControls } from "./FloatingControls";
|
|
13
|
+
export { HelpAndSupportMenu } from "./HelpAndSupportMenu";
|
|
13
14
|
export { LinkingCommandsButton } from "./LinkingCommandsButton";
|
|
14
15
|
export { SuggestSubtasksButton } from "./SuggestSubtasksButton";
|
|
15
16
|
export { TaskOptionsMenu, TaskListOptionsMenu } from "./TaskOptionsMenu";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["MainLogo","RoundAvatar","PresentationShell","StyledPagePaper","PageHeader","ProjectPageHeader","TabHeader","FloatingControls","LinkingCommandsButton","SuggestSubtasksButton","TaskOptionsMenu","TaskListOptionsMenu"],"sources":["../../../../src/presentation/shared/index.ts"],"sourcesContent":["/**\n * Shared building blocks for the Presentation mock-ups (`Presentation/*`\n * stories). The application shell, page headers, tab bar and small widgets are\n * defined once here and reused by the List view, Column view, Task sheet and\n * empty-page stories so the chrome stays identical and in one place.\n */\nexport * from \"./tokens\";\nexport { MainLogo } from \"./MainLogo\";\nexport { RoundAvatar } from \"./RoundAvatar\";\nexport { PresentationShell, StyledPagePaper } from \"./PresentationShell\";\nexport type { PresentationShellProps } from \"./PresentationShell\";\nexport { PageHeader, ProjectPageHeader, TabHeader } from \"./headers\";\nexport type {\n PageHeaderProps,\n ProjectPageHeaderProps,\n TabHeaderProps,\n} from \"./headers\";\nexport { FloatingControls } from \"./FloatingControls\";\nexport { LinkingCommandsButton } from \"./LinkingCommandsButton\";\nexport { SuggestSubtasksButton } from \"./SuggestSubtasksButton\";\nexport { TaskOptionsMenu, TaskListOptionsMenu } from \"./TaskOptionsMenu\";\nexport type {\n TaskOptionsMenuProps,\n TaskListOptionsMenuProps,\n} from \"./TaskOptionsMenu\";\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,UAAU;AACxB,SAASA,QAAQ,QAAQ,YAAY;AACrC,SAASC,WAAW,QAAQ,eAAe;AAC3C,SAASC,iBAAiB,EAAEC,eAAe,QAAQ,qBAAqB;AAExE,SAASC,UAAU,EAAEC,iBAAiB,EAAEC,SAAS,QAAQ,WAAW;AAMpE,SAASC,gBAAgB,QAAQ,oBAAoB;AACrD,SAASC,qBAAqB,QAAQ,yBAAyB;AAC/D,SAASC,qBAAqB,QAAQ,yBAAyB;AAC/D,SAASC,eAAe,EAAEC,mBAAmB,QAAQ,mBAAmB","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["MainLogo","RoundAvatar","PresentationShell","StyledPagePaper","PageHeader","ProjectPageHeader","TabHeader","FloatingControls","HelpAndSupportMenu","LinkingCommandsButton","SuggestSubtasksButton","TaskOptionsMenu","TaskListOptionsMenu"],"sources":["../../../../src/presentation/shared/index.ts"],"sourcesContent":["/**\n * Shared building blocks for the Presentation mock-ups (`Presentation/*`\n * stories). The application shell, page headers, tab bar and small widgets are\n * defined once here and reused by the List view, Column view, Task sheet and\n * empty-page stories so the chrome stays identical and in one place.\n */\nexport * from \"./tokens\";\nexport { MainLogo } from \"./MainLogo\";\nexport { RoundAvatar } from \"./RoundAvatar\";\nexport { PresentationShell, StyledPagePaper } from \"./PresentationShell\";\nexport type { PresentationShellProps } from \"./PresentationShell\";\nexport { PageHeader, ProjectPageHeader, TabHeader } from \"./headers\";\nexport type {\n PageHeaderProps,\n ProjectPageHeaderProps,\n TabHeaderProps,\n} from \"./headers\";\nexport { FloatingControls } from \"./FloatingControls\";\nexport { HelpAndSupportMenu } from \"./HelpAndSupportMenu\";\nexport type { HelpAndSupportMenuProps } from \"./HelpAndSupportMenu\";\nexport { LinkingCommandsButton } from \"./LinkingCommandsButton\";\nexport { SuggestSubtasksButton } from \"./SuggestSubtasksButton\";\nexport { TaskOptionsMenu, TaskListOptionsMenu } from \"./TaskOptionsMenu\";\nexport type {\n TaskOptionsMenuProps,\n TaskListOptionsMenuProps,\n} from \"./TaskOptionsMenu\";\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,UAAU;AACxB,SAASA,QAAQ,QAAQ,YAAY;AACrC,SAASC,WAAW,QAAQ,eAAe;AAC3C,SAASC,iBAAiB,EAAEC,eAAe,QAAQ,qBAAqB;AAExE,SAASC,UAAU,EAAEC,iBAAiB,EAAEC,SAAS,QAAQ,WAAW;AAMpE,SAASC,gBAAgB,QAAQ,oBAAoB;AACrD,SAASC,kBAAkB,QAAQ,sBAAsB;AAEzD,SAASC,qBAAqB,QAAQ,yBAAyB;AAC/D,SAASC,qBAAqB,QAAQ,yBAAyB;AAC/D,SAASC,eAAe,EAAEC,mBAAmB,QAAQ,mBAAmB","ignoreList":[]}
|