@activecollab/components 2.0.340 → 2.0.342

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.
@@ -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 &amp; 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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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,sBAAA,GAAAlB,OAAA;AACA,IAAAmB,sBAAA,GAAAnB,OAAA;AACA,IAAAoB,gBAAA,GAAApB,OAAA","ignoreList":[]}
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 &amp; 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;AAqIF,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;CACtB;AAED;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB;sCAI3B,sBAAsB,GAAG,YAAY;;CAuDvC,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":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@activecollab/components",
3
- "version": "2.0.340",
3
+ "version": "2.0.342",
4
4
  "description": "ActiveCollab Components",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/esm/index.js",