@activecollab/components 2.0.307 → 2.0.309
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/presentation/shared/FloatingControls.js +32 -0
- package/dist/cjs/presentation/shared/FloatingControls.js.map +1 -0
- package/dist/cjs/presentation/shared/MainLogo.js +50 -0
- package/dist/cjs/presentation/shared/MainLogo.js.map +1 -0
- package/dist/cjs/presentation/shared/PresentationShell.js +299 -0
- package/dist/cjs/presentation/shared/PresentationShell.js.map +1 -0
- package/dist/cjs/presentation/shared/RoundAvatar.js +38 -0
- package/dist/cjs/presentation/shared/RoundAvatar.js.map +1 -0
- package/dist/cjs/presentation/shared/TaskOptionsMenu.js +148 -0
- package/dist/cjs/presentation/shared/TaskOptionsMenu.js.map +1 -0
- package/dist/cjs/presentation/shared/headers.js +221 -0
- package/dist/cjs/presentation/shared/headers.js.map +1 -0
- package/dist/cjs/presentation/shared/index.js +96 -0
- package/dist/cjs/presentation/shared/index.js.map +1 -0
- package/dist/cjs/presentation/shared/tokens.js +28 -0
- package/dist/cjs/presentation/shared/tokens.js.map +1 -0
- package/dist/esm/presentation/shared/FloatingControls.d.ts +7 -0
- package/dist/esm/presentation/shared/FloatingControls.d.ts.map +1 -0
- package/dist/esm/presentation/shared/FloatingControls.js +23 -0
- package/dist/esm/presentation/shared/FloatingControls.js.map +1 -0
- package/dist/esm/presentation/shared/MainLogo.d.ts +10 -0
- package/dist/esm/presentation/shared/MainLogo.d.ts.map +1 -0
- package/dist/esm/presentation/shared/MainLogo.js +42 -0
- package/dist/esm/presentation/shared/MainLogo.js.map +1 -0
- package/dist/esm/presentation/shared/PresentationShell.d.ts +22 -0
- package/dist/esm/presentation/shared/PresentationShell.d.ts.map +1 -0
- package/dist/esm/presentation/shared/PresentationShell.js +272 -0
- package/dist/esm/presentation/shared/PresentationShell.js.map +1 -0
- package/dist/esm/presentation/shared/RoundAvatar.d.ts +13 -0
- package/dist/esm/presentation/shared/RoundAvatar.d.ts.map +1 -0
- package/dist/esm/presentation/shared/RoundAvatar.js +26 -0
- package/dist/esm/presentation/shared/RoundAvatar.js.map +1 -0
- package/dist/esm/presentation/shared/TaskOptionsMenu.d.ts +22 -0
- package/dist/esm/presentation/shared/TaskOptionsMenu.d.ts.map +1 -0
- package/dist/esm/presentation/shared/TaskOptionsMenu.js +119 -0
- package/dist/esm/presentation/shared/TaskOptionsMenu.js.map +1 -0
- package/dist/esm/presentation/shared/headers.d.ts +28 -0
- package/dist/esm/presentation/shared/headers.d.ts.map +1 -0
- package/dist/esm/presentation/shared/headers.js +194 -0
- package/dist/esm/presentation/shared/headers.js.map +1 -0
- package/dist/esm/presentation/shared/index.d.ts +17 -0
- package/dist/esm/presentation/shared/index.d.ts.map +1 -0
- package/dist/esm/presentation/shared/index.js +14 -0
- package/dist/esm/presentation/shared/index.js.map +1 -0
- package/dist/esm/presentation/shared/tokens.d.ts +21 -0
- package/dist/esm/presentation/shared/tokens.d.ts.map +1 -0
- package/dist/esm/presentation/shared/tokens.js +22 -0
- package/dist/esm/presentation/shared/tokens.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import React, { useCallback, useState } from "react";
|
|
2
|
+
import styled from "styled-components";
|
|
3
|
+
import { Checkbox } from "../../components/Checkbox";
|
|
4
|
+
import { IconButton } from "../../components/IconButton";
|
|
5
|
+
import { ArrowRightIcon, CopyIcon, DuplicateIcon, EditIcon, RecurringCheckmarkIcon, TaskListCompleteIcon, TrashIcon, TreeDotsIcon } from "../../components/Icons";
|
|
6
|
+
import { List, ListItem, ListSeparator } from "../../components/List";
|
|
7
|
+
import { Menu } from "../../components/Menu";
|
|
8
|
+
import { Tooltip } from "../../components/Tooltip";
|
|
9
|
+
|
|
10
|
+
/* Task three-dot options menu — same component as the real TaskItem
|
|
11
|
+
(Menu in "normal" mode = 260px, List/ListItem + TreeDots target), shared by
|
|
12
|
+
the List view and Column view presentations. Spacing is styled-components
|
|
13
|
+
(this Storybook has no runtime Tailwind). Clicks are intentionally no-ops. */
|
|
14
|
+
const StyledTaskMenu = styled.div.withConfig({
|
|
15
|
+
displayName: "TaskOptionsMenu__StyledTaskMenu",
|
|
16
|
+
componentId: "sc-1hrykzg-0"
|
|
17
|
+
})([".menu-list{padding:8px 0;}.menu-item{justify-content:space-between;}.menu-item .label{min-width:0;padding-right:8px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}.menu-bottom{display:flex;justify-content:space-between;padding:0 16px;margin:16px 0 12px;}"]);
|
|
18
|
+
const MENU_PICKER_ITEMS = ["Task List", "Assignees", "Due Date", "Label", "Estimate"];
|
|
19
|
+
export const TaskOptionsMenu = _ref => {
|
|
20
|
+
let targetClassName = _ref.targetClassName,
|
|
21
|
+
size = _ref.size;
|
|
22
|
+
const _useState = useState(false),
|
|
23
|
+
open = _useState[0],
|
|
24
|
+
setOpen = _useState[1];
|
|
25
|
+
const handleOpen = useCallback(() => setOpen(true), []);
|
|
26
|
+
const handleClose = useCallback(() => setOpen(false), []);
|
|
27
|
+
const triggerClassName = [targetClassName, open ? "open" : ""].filter(Boolean).join(" ") || undefined;
|
|
28
|
+
return /*#__PURE__*/React.createElement(Menu, {
|
|
29
|
+
open: open,
|
|
30
|
+
onOpen: handleOpen,
|
|
31
|
+
onClose: handleClose,
|
|
32
|
+
position: "bottom-end",
|
|
33
|
+
target: /*#__PURE__*/React.createElement(IconButton, {
|
|
34
|
+
type: "button",
|
|
35
|
+
variant: "text gray",
|
|
36
|
+
size: size,
|
|
37
|
+
className: triggerClassName,
|
|
38
|
+
active: open
|
|
39
|
+
}, /*#__PURE__*/React.createElement(TreeDotsIcon, null))
|
|
40
|
+
}, /*#__PURE__*/React.createElement(StyledTaskMenu, null, /*#__PURE__*/React.createElement(List, {
|
|
41
|
+
className: "menu-list",
|
|
42
|
+
tabIndex: 0
|
|
43
|
+
}, MENU_PICKER_ITEMS.map(name => /*#__PURE__*/React.createElement(ListItem, {
|
|
44
|
+
key: name,
|
|
45
|
+
className: "menu-item"
|
|
46
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
47
|
+
className: "label"
|
|
48
|
+
}, name), /*#__PURE__*/React.createElement(ArrowRightIcon, null))), /*#__PURE__*/React.createElement(ListSeparator, null), /*#__PURE__*/React.createElement(ListItem, {
|
|
49
|
+
className: "menu-item"
|
|
50
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
51
|
+
className: "label"
|
|
52
|
+
}, "Hidden from clients"), /*#__PURE__*/React.createElement(Checkbox, {
|
|
53
|
+
id: "task-menu-hidden-from-clients",
|
|
54
|
+
onChange: () => undefined
|
|
55
|
+
})), /*#__PURE__*/React.createElement(ListItem, {
|
|
56
|
+
className: "menu-item"
|
|
57
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
58
|
+
className: "label"
|
|
59
|
+
}, "High priority"), /*#__PURE__*/React.createElement(Checkbox, {
|
|
60
|
+
id: "task-menu-high-priority",
|
|
61
|
+
onChange: () => undefined
|
|
62
|
+
})), /*#__PURE__*/React.createElement(ListSeparator, null), /*#__PURE__*/React.createElement("div", {
|
|
63
|
+
className: "menu-bottom"
|
|
64
|
+
}, /*#__PURE__*/React.createElement(Tooltip, {
|
|
65
|
+
title: "Edit"
|
|
66
|
+
}, /*#__PURE__*/React.createElement(IconButton, {
|
|
67
|
+
type: "button",
|
|
68
|
+
variant: "text gray"
|
|
69
|
+
}, /*#__PURE__*/React.createElement(EditIcon, null))), /*#__PURE__*/React.createElement(Tooltip, {
|
|
70
|
+
title: "Duplicate"
|
|
71
|
+
}, /*#__PURE__*/React.createElement(IconButton, {
|
|
72
|
+
type: "button",
|
|
73
|
+
variant: "text gray"
|
|
74
|
+
}, /*#__PURE__*/React.createElement(DuplicateIcon, null))), /*#__PURE__*/React.createElement(Tooltip, {
|
|
75
|
+
title: "Create Recurring Task"
|
|
76
|
+
}, /*#__PURE__*/React.createElement(IconButton, {
|
|
77
|
+
type: "button",
|
|
78
|
+
variant: "text gray"
|
|
79
|
+
}, /*#__PURE__*/React.createElement(RecurringCheckmarkIcon, null))), /*#__PURE__*/React.createElement(Tooltip, {
|
|
80
|
+
title: "Delete"
|
|
81
|
+
}, /*#__PURE__*/React.createElement(IconButton, {
|
|
82
|
+
type: "button",
|
|
83
|
+
variant: "text gray"
|
|
84
|
+
}, /*#__PURE__*/React.createElement(TrashIcon, null)))))));
|
|
85
|
+
};
|
|
86
|
+
TaskOptionsMenu.displayName = "TaskOptionsMenu";
|
|
87
|
+
/* Task-LIST three-dot menu (Menu + List with leading-icon items) — same
|
|
88
|
+
options as the real TaskListOptions. Shared by List & Column views.
|
|
89
|
+
Clicks are intentionally no-ops. */
|
|
90
|
+
export const TaskListOptionsMenu = _ref2 => {
|
|
91
|
+
let targetClassName = _ref2.targetClassName,
|
|
92
|
+
size = _ref2.size;
|
|
93
|
+
const _useState2 = useState(false),
|
|
94
|
+
open = _useState2[0],
|
|
95
|
+
setOpen = _useState2[1];
|
|
96
|
+
const handleOpen = useCallback(() => setOpen(true), []);
|
|
97
|
+
const handleClose = useCallback(() => setOpen(false), []);
|
|
98
|
+
const triggerClassName = [targetClassName, open ? "open" : ""].filter(Boolean).join(" ") || undefined;
|
|
99
|
+
return /*#__PURE__*/React.createElement(Menu, {
|
|
100
|
+
open: open,
|
|
101
|
+
onOpen: handleOpen,
|
|
102
|
+
onClose: handleClose,
|
|
103
|
+
position: "bottom-end",
|
|
104
|
+
target: /*#__PURE__*/React.createElement(IconButton, {
|
|
105
|
+
type: "button",
|
|
106
|
+
variant: "text gray",
|
|
107
|
+
size: size,
|
|
108
|
+
className: triggerClassName,
|
|
109
|
+
active: open
|
|
110
|
+
}, /*#__PURE__*/React.createElement(TreeDotsIcon, null))
|
|
111
|
+
}, /*#__PURE__*/React.createElement(List, {
|
|
112
|
+
style: {
|
|
113
|
+
padding: "8px 0"
|
|
114
|
+
},
|
|
115
|
+
tabIndex: -1
|
|
116
|
+
}, /*#__PURE__*/React.createElement(ListItem, null, /*#__PURE__*/React.createElement(EditIcon, null), "Rename"), /*#__PURE__*/React.createElement(ListItem, null, /*#__PURE__*/React.createElement(DuplicateIcon, null), "Duplicate"), /*#__PURE__*/React.createElement(ListItem, null, /*#__PURE__*/React.createElement(CopyIcon, null), "Move/Copy to Project"), /*#__PURE__*/React.createElement(ListItem, null, /*#__PURE__*/React.createElement(TaskListCompleteIcon, null), "Complete"), /*#__PURE__*/React.createElement(ListSeparator, null), /*#__PURE__*/React.createElement(ListItem, null, /*#__PURE__*/React.createElement(TrashIcon, null), "Delete")));
|
|
117
|
+
};
|
|
118
|
+
TaskListOptionsMenu.displayName = "TaskListOptionsMenu";
|
|
119
|
+
//# sourceMappingURL=TaskOptionsMenu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TaskOptionsMenu.js","names":["React","useCallback","useState","styled","Checkbox","IconButton","ArrowRightIcon","CopyIcon","DuplicateIcon","EditIcon","RecurringCheckmarkIcon","TaskListCompleteIcon","TrashIcon","TreeDotsIcon","List","ListItem","ListSeparator","Menu","Tooltip","StyledTaskMenu","div","withConfig","displayName","componentId","MENU_PICKER_ITEMS","TaskOptionsMenu","_ref","targetClassName","size","_useState","open","setOpen","handleOpen","handleClose","triggerClassName","filter","Boolean","join","undefined","createElement","onOpen","onClose","position","target","type","variant","className","active","tabIndex","map","name","key","id","onChange","title","TaskListOptionsMenu","_ref2","_useState2","style","padding"],"sources":["../../../../src/presentation/shared/TaskOptionsMenu.tsx"],"sourcesContent":["import React, { ReactElement, useCallback, useState } from \"react\";\n\nimport styled from \"styled-components\";\n\nimport { Checkbox } from \"../../components/Checkbox\";\nimport { IconButton } from \"../../components/IconButton\";\nimport {\n ArrowRightIcon,\n CopyIcon,\n DuplicateIcon,\n EditIcon,\n RecurringCheckmarkIcon,\n TaskListCompleteIcon,\n TrashIcon,\n TreeDotsIcon,\n} from \"../../components/Icons\";\nimport { List, ListItem, ListSeparator } from \"../../components/List\";\nimport { Menu } from \"../../components/Menu\";\nimport { Tooltip } from \"../../components/Tooltip\";\n\n/* Task three-dot options menu — same component as the real TaskItem\n (Menu in \"normal\" mode = 260px, List/ListItem + TreeDots target), shared by\n the List view and Column view presentations. Spacing is styled-components\n (this Storybook has no runtime Tailwind). Clicks are intentionally no-ops. */\nconst StyledTaskMenu = styled.div`\n /* no width — fills the 260px Menu bubble */\n\n .menu-list {\n padding: 8px 0;\n }\n\n /* text on the left, control (arrow / checkbox) on the right */\n .menu-item {\n justify-content: space-between;\n }\n\n .menu-item .label {\n min-width: 0;\n padding-right: 8px;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n\n /* bottom action icons: same horizontal padding as a list item (0 1rem),\n spread evenly */\n .menu-bottom {\n display: flex;\n justify-content: space-between;\n padding: 0 16px;\n margin: 16px 0 12px;\n }\n`;\n\nconst MENU_PICKER_ITEMS = [\n \"Task List\",\n \"Assignees\",\n \"Due Date\",\n \"Label\",\n \"Estimate\",\n];\n\nexport interface TaskOptionsMenuProps {\n /** Class on the TreeDots trigger (parent controls its hover visibility). */\n targetClassName?: string;\n /** IconButton size of the trigger (omit for the default/regular size). */\n size?: \"small\" | \"big\";\n}\n\nexport const TaskOptionsMenu = ({\n targetClassName,\n size,\n}: TaskOptionsMenuProps): ReactElement => {\n const [open, setOpen] = useState(false);\n const handleOpen = useCallback(() => setOpen(true), []);\n const handleClose = useCallback(() => setOpen(false), []);\n\n const triggerClassName =\n [targetClassName, open ? \"open\" : \"\"].filter(Boolean).join(\" \") ||\n undefined;\n\n return (\n <Menu\n open={open}\n onOpen={handleOpen}\n onClose={handleClose}\n position=\"bottom-end\"\n target={\n <IconButton\n type=\"button\"\n variant=\"text gray\"\n size={size}\n className={triggerClassName}\n active={open}\n >\n <TreeDotsIcon />\n </IconButton>\n }\n >\n <StyledTaskMenu>\n <List className=\"menu-list\" tabIndex={0}>\n {MENU_PICKER_ITEMS.map((name) => (\n <ListItem key={name} className=\"menu-item\">\n <div className=\"label\">{name}</div>\n <ArrowRightIcon />\n </ListItem>\n ))}\n <ListSeparator />\n <ListItem className=\"menu-item\">\n <div className=\"label\">Hidden from clients</div>\n <Checkbox\n id=\"task-menu-hidden-from-clients\"\n onChange={() => undefined}\n />\n </ListItem>\n <ListItem className=\"menu-item\">\n <div className=\"label\">High priority</div>\n <Checkbox id=\"task-menu-high-priority\" onChange={() => undefined} />\n </ListItem>\n <ListSeparator />\n <div className=\"menu-bottom\">\n <Tooltip title=\"Edit\">\n <IconButton type=\"button\" variant=\"text gray\">\n <EditIcon />\n </IconButton>\n </Tooltip>\n <Tooltip title=\"Duplicate\">\n <IconButton type=\"button\" variant=\"text gray\">\n <DuplicateIcon />\n </IconButton>\n </Tooltip>\n <Tooltip title=\"Create Recurring Task\">\n <IconButton type=\"button\" variant=\"text gray\">\n <RecurringCheckmarkIcon />\n </IconButton>\n </Tooltip>\n <Tooltip title=\"Delete\">\n <IconButton type=\"button\" variant=\"text gray\">\n <TrashIcon />\n </IconButton>\n </Tooltip>\n </div>\n </List>\n </StyledTaskMenu>\n </Menu>\n );\n};\n\nTaskOptionsMenu.displayName = \"TaskOptionsMenu\";\n\nexport interface TaskListOptionsMenuProps {\n /** Class on the TreeDots trigger (parent controls its hover visibility). */\n targetClassName?: string;\n /** IconButton size of the trigger (omit for the default/regular size). */\n size?: \"small\" | \"big\";\n}\n\n/* Task-LIST three-dot menu (Menu + List with leading-icon items) — same\n options as the real TaskListOptions. Shared by List & Column views.\n Clicks are intentionally no-ops. */\nexport const TaskListOptionsMenu = ({\n targetClassName,\n size,\n}: TaskListOptionsMenuProps): ReactElement => {\n const [open, setOpen] = useState(false);\n const handleOpen = useCallback(() => setOpen(true), []);\n const handleClose = useCallback(() => setOpen(false), []);\n\n const triggerClassName =\n [targetClassName, open ? \"open\" : \"\"].filter(Boolean).join(\" \") ||\n undefined;\n\n return (\n <Menu\n open={open}\n onOpen={handleOpen}\n onClose={handleClose}\n position=\"bottom-end\"\n target={\n <IconButton\n type=\"button\"\n variant=\"text gray\"\n size={size}\n className={triggerClassName}\n active={open}\n >\n <TreeDotsIcon />\n </IconButton>\n }\n >\n <List style={{ padding: \"8px 0\" }} tabIndex={-1}>\n <ListItem>\n <EditIcon />\n Rename\n </ListItem>\n <ListItem>\n <DuplicateIcon />\n Duplicate\n </ListItem>\n <ListItem>\n <CopyIcon />\n Move/Copy to Project\n </ListItem>\n <ListItem>\n <TaskListCompleteIcon />\n Complete\n </ListItem>\n <ListSeparator />\n <ListItem>\n <TrashIcon />\n Delete\n </ListItem>\n </List>\n </Menu>\n );\n};\n\nTaskListOptionsMenu.displayName = \"TaskListOptionsMenu\";\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { ReactElement, ReactNode } from "react";
|
|
2
|
+
export interface PageHeaderProps {
|
|
3
|
+
title: string;
|
|
4
|
+
children?: ReactNode;
|
|
5
|
+
}
|
|
6
|
+
/** Generic page header (title + optional controls), mirrors PageHeader.jsx. */
|
|
7
|
+
export declare const PageHeader: {
|
|
8
|
+
({ title, children, }: PageHeaderProps): ReactElement;
|
|
9
|
+
displayName: string;
|
|
10
|
+
};
|
|
11
|
+
export interface ProjectPageHeaderProps {
|
|
12
|
+
title?: string;
|
|
13
|
+
}
|
|
14
|
+
/** The project page header: back arrow, title, progress, info, people, options. */
|
|
15
|
+
export declare const ProjectPageHeader: {
|
|
16
|
+
({ title, }: ProjectPageHeaderProps): ReactElement;
|
|
17
|
+
displayName: string;
|
|
18
|
+
};
|
|
19
|
+
export interface TabHeaderProps {
|
|
20
|
+
/** Which view-mode toggle is highlighted as active. */
|
|
21
|
+
activeView?: "list" | "column" | "timeline";
|
|
22
|
+
}
|
|
23
|
+
/** The Tasks/Discussions/… tab bar plus the right-hand view toolbar. */
|
|
24
|
+
export declare const TabHeader: {
|
|
25
|
+
({ activeView, }: TabHeaderProps): ReactElement;
|
|
26
|
+
displayName: string;
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=headers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headers.d.ts","sourceRoot":"","sources":["../../../../src/presentation/shared/headers.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,YAAY,EAAE,SAAS,EAAY,MAAM,OAAO,CAAC;AAqHjE,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,+EAA+E;AAC/E,eAAO,MAAM,UAAU;2BAGpB,eAAe,GAAG,YAAY;;CAShC,CAAC;AA8GF,MAAM,WAAW,sBAAsB;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,mFAAmF;AACnF,eAAO,MAAM,iBAAiB;iBAE3B,sBAAsB,GAAG,YAAY;;CAkCvC,CAAC;AAsCF,MAAM,WAAW,cAAc;IAC7B,uDAAuD;IACvD,UAAU,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAC;CAC7C;AAED,wEAAwE;AACxE,eAAO,MAAM,SAAS;sBAEnB,cAAc,GAAG,YAAY;;CA8C/B,CAAC"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import React, { useState } from "react";
|
|
2
|
+
import styled from "styled-components";
|
|
3
|
+
import { MD, SM } from "./tokens";
|
|
4
|
+
import { Button } from "../../components/Button";
|
|
5
|
+
import { GlobalAddButton } from "../../components/Button/GlobalAddButton";
|
|
6
|
+
import { Checkbox } from "../../components/Checkbox";
|
|
7
|
+
import { CounterButton } from "../../components/CounterButton";
|
|
8
|
+
import { Header } from "../../components/Header";
|
|
9
|
+
import { IconButton } from "../../components/IconButton";
|
|
10
|
+
import { ArrowLeftIcon, CheckboxBlankTogglerIcon, DuplicateIcon, EditIcon, EditMultipleIcon, FilterIcon, InfoIcon, InsertLinkIcon, LabelsIcon, NotificationBellIcon, PeopleIcon, ProjectTemplateConvertIcon, ProjectTemplateIcon, StarIcon, TrashIcon, TreeDotsIcon, ViewListIcon, ViewTimelineIcon } from "../../components/Icons";
|
|
11
|
+
import { List, ListItem, ListSeparator } from "../../components/List";
|
|
12
|
+
import { Menu } from "../../components/Menu";
|
|
13
|
+
import { Item, Nav } from "../../components/Nav";
|
|
14
|
+
import { ProgressPie } from "../../components/ProgressPie";
|
|
15
|
+
import { Tooltip } from "../../components/Tooltip";
|
|
16
|
+
import { Body2, Header2, Title2 } from "../../components/Typography";
|
|
17
|
+
|
|
18
|
+
/* ------------------------------------------------------------------ */
|
|
19
|
+
/* Page header row (mirrors PageHeader.jsx) */
|
|
20
|
+
/* ------------------------------------------------------------------ */
|
|
21
|
+
|
|
22
|
+
const StyledPageHeader = styled.div.withConfig({
|
|
23
|
+
displayName: "headers__StyledPageHeader",
|
|
24
|
+
componentId: "sc-yf6o6n-0"
|
|
25
|
+
})(["display:flex;align-items:center;justify-content:space-between;margin:12px 0;width:100%;height:40px;flex-shrink:0;.page-header-left{display:flex;align-items:center;width:100%;max-width:100%;@media (min-width:", "){min-width:0;}}.back-button{flex-shrink:0;margin-right:4px;@media (min-width:", "){margin-right:8px;}}.page-title-desktop{display:none;margin-right:8px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;@media (min-width:", "){display:block;}}.page-title-mobile{display:block;margin-right:8px;font-weight:300;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;@media (min-width:", "){display:none;}}.page-header-children{flex-shrink:0;display:flex;align-items:center;}.page-header-spacer{display:none;height:100%;width:208px;flex-shrink:0;@media (min-width:", "){display:flex;}}"], SM, MD, MD, MD, SM);
|
|
26
|
+
/** Generic page header (title + optional controls), mirrors PageHeader.jsx. */
|
|
27
|
+
export const PageHeader = _ref => {
|
|
28
|
+
let title = _ref.title,
|
|
29
|
+
children = _ref.children;
|
|
30
|
+
return /*#__PURE__*/React.createElement(StyledPageHeader, null, /*#__PURE__*/React.createElement("div", {
|
|
31
|
+
className: "page-header-left"
|
|
32
|
+
}, /*#__PURE__*/React.createElement(Title2, {
|
|
33
|
+
className: "page-title-desktop"
|
|
34
|
+
}, title), /*#__PURE__*/React.createElement(Header2, {
|
|
35
|
+
className: "page-title-mobile"
|
|
36
|
+
}, title), /*#__PURE__*/React.createElement("div", {
|
|
37
|
+
className: "page-header-children"
|
|
38
|
+
}, children)), /*#__PURE__*/React.createElement("div", {
|
|
39
|
+
className: "page-header-spacer"
|
|
40
|
+
}));
|
|
41
|
+
};
|
|
42
|
+
PageHeader.displayName = "PageHeader";
|
|
43
|
+
|
|
44
|
+
/* ------------------------------------------------------------------ */
|
|
45
|
+
/* Project page header (mirrors ProjectPage.js Page.Header children) */
|
|
46
|
+
/* ------------------------------------------------------------------ */
|
|
47
|
+
|
|
48
|
+
const StyledProjectHeaderChildren = styled.div.withConfig({
|
|
49
|
+
displayName: "headers__StyledProjectHeaderChildren",
|
|
50
|
+
componentId: "sc-yf6o6n-1"
|
|
51
|
+
})(["display:flex;align-items:center;gap:8px;.project-progress{display:flex;align-items:center;margin-left:4px;}"]);
|
|
52
|
+
|
|
53
|
+
/* Project "..." options menu (Menu + List with leading-icon items). Two items
|
|
54
|
+
(Favorite, Subscribe) have a checkbox on the right. Clicks are no-ops. */
|
|
55
|
+
const StyledProjectMenu = styled.div.withConfig({
|
|
56
|
+
displayName: "headers__StyledProjectMenu",
|
|
57
|
+
componentId: "sc-yf6o6n-2"
|
|
58
|
+
})([".toggle-item{justify-content:space-between;}.toggle-item .opt-left{display:flex;align-items:center;min-width:0;}.toggle-item .opt-left svg{margin-right:8px;flex-shrink:0;}"]);
|
|
59
|
+
const ProjectOptionsMenu = () => {
|
|
60
|
+
const _useState = useState(false),
|
|
61
|
+
open = _useState[0],
|
|
62
|
+
setOpen = _useState[1];
|
|
63
|
+
return /*#__PURE__*/React.createElement(Menu, {
|
|
64
|
+
open: open,
|
|
65
|
+
onOpen: () => setOpen(true),
|
|
66
|
+
onClose: () => setOpen(false),
|
|
67
|
+
position: "bottom-end",
|
|
68
|
+
target: /*#__PURE__*/React.createElement(IconButton, {
|
|
69
|
+
type: "button",
|
|
70
|
+
variant: "text gray",
|
|
71
|
+
active: open
|
|
72
|
+
}, /*#__PURE__*/React.createElement(TreeDotsIcon, null))
|
|
73
|
+
}, /*#__PURE__*/React.createElement(StyledProjectMenu, null, /*#__PURE__*/React.createElement(List, {
|
|
74
|
+
style: {
|
|
75
|
+
padding: "8px 0"
|
|
76
|
+
},
|
|
77
|
+
tabIndex: -1
|
|
78
|
+
}, /*#__PURE__*/React.createElement(ListItem, null, /*#__PURE__*/React.createElement(EditIcon, null), "Edit"), /*#__PURE__*/React.createElement(ListItem, {
|
|
79
|
+
className: "toggle-item"
|
|
80
|
+
}, /*#__PURE__*/React.createElement("span", {
|
|
81
|
+
className: "opt-left"
|
|
82
|
+
}, /*#__PURE__*/React.createElement(StarIcon, null), "Mark as Favorite"), /*#__PURE__*/React.createElement(Checkbox, {
|
|
83
|
+
id: "proj-favorite",
|
|
84
|
+
onChange: () => undefined
|
|
85
|
+
})), /*#__PURE__*/React.createElement(ListItem, {
|
|
86
|
+
className: "toggle-item"
|
|
87
|
+
}, /*#__PURE__*/React.createElement("span", {
|
|
88
|
+
className: "opt-left"
|
|
89
|
+
}, /*#__PURE__*/React.createElement(NotificationBellIcon, null), "Subscribe to Everything"), /*#__PURE__*/React.createElement(Checkbox, {
|
|
90
|
+
id: "proj-subscribe",
|
|
91
|
+
onChange: () => undefined
|
|
92
|
+
})), /*#__PURE__*/React.createElement(ListItem, null, /*#__PURE__*/React.createElement(LabelsIcon, null), "Manage Task Labels"), /*#__PURE__*/React.createElement(ListItem, null, /*#__PURE__*/React.createElement(InsertLinkIcon, null), "Copy Link"), /*#__PURE__*/React.createElement(ListSeparator, null), /*#__PURE__*/React.createElement(ListItem, null, /*#__PURE__*/React.createElement(CheckboxBlankTogglerIcon, null), "Complete"), /*#__PURE__*/React.createElement(ListSeparator, null), /*#__PURE__*/React.createElement(ListItem, null, /*#__PURE__*/React.createElement(DuplicateIcon, null), "Duplicate"), /*#__PURE__*/React.createElement(ListItem, null, /*#__PURE__*/React.createElement(ProjectTemplateIcon, null), "Apply Template"), /*#__PURE__*/React.createElement(ListItem, null, /*#__PURE__*/React.createElement(ProjectTemplateConvertIcon, null), "Convert to Template"), /*#__PURE__*/React.createElement(ListSeparator, null), /*#__PURE__*/React.createElement(ListItem, null, /*#__PURE__*/React.createElement(TrashIcon, null), "Delete"))));
|
|
93
|
+
};
|
|
94
|
+
/** The project page header: back arrow, title, progress, info, people, options. */
|
|
95
|
+
export const ProjectPageHeader = _ref2 => {
|
|
96
|
+
let _ref2$title = _ref2.title,
|
|
97
|
+
title = _ref2$title === void 0 ? "#131: Ime projekta" : _ref2$title;
|
|
98
|
+
return /*#__PURE__*/React.createElement(StyledPageHeader, null, /*#__PURE__*/React.createElement("div", {
|
|
99
|
+
className: "page-header-left"
|
|
100
|
+
}, /*#__PURE__*/React.createElement(IconButton, {
|
|
101
|
+
variant: "text gray",
|
|
102
|
+
className: "back-button"
|
|
103
|
+
}, /*#__PURE__*/React.createElement(ArrowLeftIcon, null)), /*#__PURE__*/React.createElement(Title2, {
|
|
104
|
+
className: "page-title-desktop"
|
|
105
|
+
}, title), /*#__PURE__*/React.createElement(Header2, {
|
|
106
|
+
className: "page-title-mobile"
|
|
107
|
+
}, title), /*#__PURE__*/React.createElement("div", {
|
|
108
|
+
className: "page-header-children"
|
|
109
|
+
}, /*#__PURE__*/React.createElement(StyledProjectHeaderChildren, null, /*#__PURE__*/React.createElement("span", {
|
|
110
|
+
className: "project-progress"
|
|
111
|
+
}, /*#__PURE__*/React.createElement(ProgressPie, {
|
|
112
|
+
radius: 11,
|
|
113
|
+
progress: 64,
|
|
114
|
+
progressColor: "var(--color-secondary)",
|
|
115
|
+
backgroundColor: "var(--color-theme-300)"
|
|
116
|
+
})), /*#__PURE__*/React.createElement(Tooltip, {
|
|
117
|
+
title: "Project Info"
|
|
118
|
+
}, /*#__PURE__*/React.createElement(IconButton, {
|
|
119
|
+
variant: "text gray"
|
|
120
|
+
}, /*#__PURE__*/React.createElement(InfoIcon, null))), /*#__PURE__*/React.createElement(CounterButton, {
|
|
121
|
+
label: "5",
|
|
122
|
+
icon: /*#__PURE__*/React.createElement(PeopleIcon, null),
|
|
123
|
+
onClearAll: () => undefined
|
|
124
|
+
}), /*#__PURE__*/React.createElement(ProjectOptionsMenu, null)))), /*#__PURE__*/React.createElement("div", {
|
|
125
|
+
className: "page-header-spacer"
|
|
126
|
+
}));
|
|
127
|
+
};
|
|
128
|
+
ProjectPageHeader.displayName = "ProjectPageHeader";
|
|
129
|
+
|
|
130
|
+
/* ------------------------------------------------------------------ */
|
|
131
|
+
/* Tab bar (mirrors the <Header> with <Nav> on ProjectPage.js) */
|
|
132
|
+
/* ------------------------------------------------------------------ */
|
|
133
|
+
|
|
134
|
+
const NAV_TABS = ["Tasks", "Discussions", "Files", "Notes", "Activity"];
|
|
135
|
+
const StyledTabHeader = styled(Header).withConfig({
|
|
136
|
+
displayName: "headers__StyledTabHeader",
|
|
137
|
+
componentId: "sc-yf6o6n-3"
|
|
138
|
+
})(["justify-content:space-between;align-items:center;margin-bottom:16px;min-height:64px;flex-shrink:0;"]);
|
|
139
|
+
const StyledTabControls = styled.div.withConfig({
|
|
140
|
+
displayName: "headers__StyledTabControls",
|
|
141
|
+
componentId: "sc-yf6o6n-4"
|
|
142
|
+
})(["display:flex;align-items:center;flex-shrink:0;gap:4px;.vertical-separator{width:1px;height:24px;background-color:var(--color-theme-400);margin:0 8px;}.filter-button{display:flex;align-items:center;gap:6px;}"]);
|
|
143
|
+
/** The Tasks/Discussions/… tab bar plus the right-hand view toolbar. */
|
|
144
|
+
export const TabHeader = _ref3 => {
|
|
145
|
+
let _ref3$activeView = _ref3.activeView,
|
|
146
|
+
activeView = _ref3$activeView === void 0 ? "list" : _ref3$activeView;
|
|
147
|
+
const _useState2 = useState(0),
|
|
148
|
+
active = _useState2[0],
|
|
149
|
+
setActive = _useState2[1];
|
|
150
|
+
return /*#__PURE__*/React.createElement(StyledTabHeader, null, /*#__PURE__*/React.createElement(Nav, {
|
|
151
|
+
onSelect: setActive
|
|
152
|
+
}, NAV_TABS.map((label, index) => /*#__PURE__*/React.createElement(Item, {
|
|
153
|
+
active: index === active,
|
|
154
|
+
key: label,
|
|
155
|
+
name: label
|
|
156
|
+
}, /*#__PURE__*/React.createElement(Body2, {
|
|
157
|
+
color: "secondary",
|
|
158
|
+
weight: "medium"
|
|
159
|
+
}, label)))), /*#__PURE__*/React.createElement(StyledTabControls, null, /*#__PURE__*/React.createElement(Tooltip, {
|
|
160
|
+
title: "Batch Edit"
|
|
161
|
+
}, /*#__PURE__*/React.createElement(IconButton, {
|
|
162
|
+
variant: "text gray"
|
|
163
|
+
}, /*#__PURE__*/React.createElement(EditMultipleIcon, null))), /*#__PURE__*/React.createElement("span", {
|
|
164
|
+
className: "vertical-separator"
|
|
165
|
+
}), /*#__PURE__*/React.createElement(Button, {
|
|
166
|
+
variant: "text gray",
|
|
167
|
+
className: "filter-button"
|
|
168
|
+
}, /*#__PURE__*/React.createElement(FilterIcon, null), "Filter"), /*#__PURE__*/React.createElement(Tooltip, {
|
|
169
|
+
title: "List view"
|
|
170
|
+
}, /*#__PURE__*/React.createElement(IconButton, {
|
|
171
|
+
variant: "text gray",
|
|
172
|
+
active: activeView === "list"
|
|
173
|
+
}, /*#__PURE__*/React.createElement(ViewListIcon, null))), /*#__PURE__*/React.createElement(Tooltip, {
|
|
174
|
+
title: "Column view"
|
|
175
|
+
}, /*#__PURE__*/React.createElement(IconButton, {
|
|
176
|
+
variant: "text gray",
|
|
177
|
+
active: activeView === "column"
|
|
178
|
+
}, /*#__PURE__*/React.createElement(ViewListIcon, {
|
|
179
|
+
style: {
|
|
180
|
+
transform: "rotate(90deg)"
|
|
181
|
+
}
|
|
182
|
+
}))), /*#__PURE__*/React.createElement(Tooltip, {
|
|
183
|
+
title: "Timeline view"
|
|
184
|
+
}, /*#__PURE__*/React.createElement(IconButton, {
|
|
185
|
+
variant: "text gray",
|
|
186
|
+
active: activeView === "timeline"
|
|
187
|
+
}, /*#__PURE__*/React.createElement(ViewTimelineIcon, null))), /*#__PURE__*/React.createElement("span", {
|
|
188
|
+
className: "vertical-separator"
|
|
189
|
+
}), /*#__PURE__*/React.createElement(Tooltip, {
|
|
190
|
+
title: "Add New"
|
|
191
|
+
}, /*#__PURE__*/React.createElement(GlobalAddButton, null))));
|
|
192
|
+
};
|
|
193
|
+
TabHeader.displayName = "TabHeader";
|
|
194
|
+
//# sourceMappingURL=headers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headers.js","names":["React","useState","styled","MD","SM","Button","GlobalAddButton","Checkbox","CounterButton","Header","IconButton","ArrowLeftIcon","CheckboxBlankTogglerIcon","DuplicateIcon","EditIcon","EditMultipleIcon","FilterIcon","InfoIcon","InsertLinkIcon","LabelsIcon","NotificationBellIcon","PeopleIcon","ProjectTemplateConvertIcon","ProjectTemplateIcon","StarIcon","TrashIcon","TreeDotsIcon","ViewListIcon","ViewTimelineIcon","List","ListItem","ListSeparator","Menu","Item","Nav","ProgressPie","Tooltip","Body2","Header2","Title2","StyledPageHeader","div","withConfig","displayName","componentId","PageHeader","_ref","title","children","createElement","className","StyledProjectHeaderChildren","StyledProjectMenu","ProjectOptionsMenu","_useState","open","setOpen","onOpen","onClose","position","target","type","variant","active","style","padding","tabIndex","id","onChange","undefined","ProjectPageHeader","_ref2","_ref2$title","radius","progress","progressColor","backgroundColor","label","icon","onClearAll","NAV_TABS","StyledTabHeader","StyledTabControls","TabHeader","_ref3","_ref3$activeView","activeView","_useState2","setActive","onSelect","map","index","key","name","color","weight","transform"],"sources":["../../../../src/presentation/shared/headers.tsx"],"sourcesContent":["import React, { ReactElement, ReactNode, useState } from \"react\";\n\nimport styled from \"styled-components\";\n\nimport { MD, SM } from \"./tokens\";\nimport { Button } from \"../../components/Button\";\nimport { GlobalAddButton } from \"../../components/Button/GlobalAddButton\";\nimport { Checkbox } from \"../../components/Checkbox\";\nimport { CounterButton } from \"../../components/CounterButton\";\nimport { Header } from \"../../components/Header\";\nimport { IconButton } from \"../../components/IconButton\";\nimport {\n ArrowLeftIcon,\n CheckboxBlankTogglerIcon,\n DuplicateIcon,\n EditIcon,\n EditMultipleIcon,\n FilterIcon,\n InfoIcon,\n InsertLinkIcon,\n LabelsIcon,\n NotificationBellIcon,\n PeopleIcon,\n ProjectTemplateConvertIcon,\n ProjectTemplateIcon,\n StarIcon,\n TrashIcon,\n TreeDotsIcon,\n ViewListIcon,\n ViewTimelineIcon,\n} from \"../../components/Icons\";\nimport { List, ListItem, ListSeparator } from \"../../components/List\";\nimport { Menu } from \"../../components/Menu\";\nimport { Item, Nav } from \"../../components/Nav\";\nimport { ProgressPie } from \"../../components/ProgressPie\";\nimport { Tooltip } from \"../../components/Tooltip\";\nimport { Body2, Header2, Title2 } from \"../../components/Typography\";\n\n/* ------------------------------------------------------------------ */\n/* Page header row (mirrors PageHeader.jsx) */\n/* ------------------------------------------------------------------ */\n\nconst StyledPageHeader = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin: 12px 0;\n width: 100%;\n height: 40px;\n flex-shrink: 0;\n\n .page-header-left {\n display: flex;\n align-items: center;\n width: 100%;\n max-width: 100%;\n\n @media (min-width: ${SM}) {\n min-width: 0;\n }\n }\n\n /* back button spacing (tw-shrink-0 tw-mr-1 md:tw-mr-2) */\n .back-button {\n flex-shrink: 0;\n margin-right: 4px;\n\n @media (min-width: ${MD}) {\n margin-right: 8px;\n }\n }\n\n .page-title-desktop {\n display: none;\n margin-right: 8px;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n\n @media (min-width: ${MD}) {\n display: block;\n }\n }\n\n .page-title-mobile {\n display: block;\n margin-right: 8px;\n font-weight: 300;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n\n @media (min-width: ${MD}) {\n display: none;\n }\n }\n\n .page-header-children {\n flex-shrink: 0;\n display: flex;\n align-items: center;\n }\n\n /* spacer that keeps the header clear of the absolutely positioned\n top-right controls, same as in the app (tw-w-52) */\n .page-header-spacer {\n display: none;\n height: 100%;\n width: 208px;\n flex-shrink: 0;\n\n @media (min-width: ${SM}) {\n display: flex;\n }\n }\n`;\n\nexport interface PageHeaderProps {\n title: string;\n children?: ReactNode;\n}\n\n/** Generic page header (title + optional controls), mirrors PageHeader.jsx. */\nexport const PageHeader = ({\n title,\n children,\n}: PageHeaderProps): ReactElement => (\n <StyledPageHeader>\n <div className=\"page-header-left\">\n <Title2 className=\"page-title-desktop\">{title}</Title2>\n <Header2 className=\"page-title-mobile\">{title}</Header2>\n <div className=\"page-header-children\">{children}</div>\n </div>\n <div className=\"page-header-spacer\" />\n </StyledPageHeader>\n);\n\nPageHeader.displayName = \"PageHeader\";\n\n/* ------------------------------------------------------------------ */\n/* Project page header (mirrors ProjectPage.js Page.Header children) */\n/* ------------------------------------------------------------------ */\n\nconst StyledProjectHeaderChildren = styled.div`\n display: flex;\n align-items: center;\n gap: 8px;\n\n .project-progress {\n display: flex;\n align-items: center;\n margin-left: 4px;\n }\n`;\n\n/* Project \"...\" options menu (Menu + List with leading-icon items). Two items\n (Favorite, Subscribe) have a checkbox on the right. Clicks are no-ops. */\nconst StyledProjectMenu = styled.div`\n .toggle-item {\n justify-content: space-between;\n }\n\n .toggle-item .opt-left {\n display: flex;\n align-items: center;\n min-width: 0;\n }\n\n .toggle-item .opt-left svg {\n margin-right: 8px;\n flex-shrink: 0;\n }\n`;\n\nconst ProjectOptionsMenu = (): ReactElement => {\n const [open, setOpen] = useState(false);\n return (\n <Menu\n open={open}\n onOpen={() => setOpen(true)}\n onClose={() => setOpen(false)}\n position=\"bottom-end\"\n target={\n <IconButton type=\"button\" variant=\"text gray\" active={open}>\n <TreeDotsIcon />\n </IconButton>\n }\n >\n <StyledProjectMenu>\n <List style={{ padding: \"8px 0\" }} tabIndex={-1}>\n <ListItem>\n <EditIcon />\n Edit\n </ListItem>\n <ListItem className=\"toggle-item\">\n <span className=\"opt-left\">\n <StarIcon />\n Mark as Favorite\n </span>\n <Checkbox id=\"proj-favorite\" onChange={() => undefined} />\n </ListItem>\n <ListItem className=\"toggle-item\">\n <span className=\"opt-left\">\n <NotificationBellIcon />\n Subscribe to Everything\n </span>\n <Checkbox id=\"proj-subscribe\" onChange={() => undefined} />\n </ListItem>\n <ListItem>\n <LabelsIcon />\n Manage Task Labels\n </ListItem>\n <ListItem>\n <InsertLinkIcon />\n Copy Link\n </ListItem>\n <ListSeparator />\n <ListItem>\n <CheckboxBlankTogglerIcon />\n Complete\n </ListItem>\n <ListSeparator />\n <ListItem>\n <DuplicateIcon />\n Duplicate\n </ListItem>\n <ListItem>\n <ProjectTemplateIcon />\n Apply Template\n </ListItem>\n <ListItem>\n <ProjectTemplateConvertIcon />\n Convert to Template\n </ListItem>\n <ListSeparator />\n <ListItem>\n <TrashIcon />\n Delete\n </ListItem>\n </List>\n </StyledProjectMenu>\n </Menu>\n );\n};\n\nexport interface ProjectPageHeaderProps {\n title?: string;\n}\n\n/** The project page header: back arrow, title, progress, info, people, options. */\nexport const ProjectPageHeader = ({\n title = \"#131: Ime projekta\",\n}: ProjectPageHeaderProps): ReactElement => (\n <StyledPageHeader>\n <div className=\"page-header-left\">\n <IconButton variant=\"text gray\" className=\"back-button\">\n <ArrowLeftIcon />\n </IconButton>\n <Title2 className=\"page-title-desktop\">{title}</Title2>\n <Header2 className=\"page-title-mobile\">{title}</Header2>\n <div className=\"page-header-children\">\n <StyledProjectHeaderChildren>\n <span className=\"project-progress\">\n <ProgressPie\n radius={11}\n progress={64}\n progressColor=\"var(--color-secondary)\"\n backgroundColor=\"var(--color-theme-300)\"\n />\n </span>\n <Tooltip title=\"Project Info\">\n <IconButton variant=\"text gray\">\n <InfoIcon />\n </IconButton>\n </Tooltip>\n <CounterButton\n label=\"5\"\n icon={<PeopleIcon />}\n onClearAll={() => undefined}\n />\n <ProjectOptionsMenu />\n </StyledProjectHeaderChildren>\n </div>\n </div>\n <div className=\"page-header-spacer\" />\n </StyledPageHeader>\n);\n\nProjectPageHeader.displayName = \"ProjectPageHeader\";\n\n/* ------------------------------------------------------------------ */\n/* Tab bar (mirrors the <Header> with <Nav> on ProjectPage.js) */\n/* ------------------------------------------------------------------ */\n\nconst NAV_TABS = [\"Tasks\", \"Discussions\", \"Files\", \"Notes\", \"Activity\"];\n\nconst StyledTabHeader = styled(Header)`\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n min-height: 64px;\n flex-shrink: 0;\n`;\n\nconst StyledTabControls = styled.div`\n display: flex;\n align-items: center;\n flex-shrink: 0;\n gap: 4px;\n\n .vertical-separator {\n width: 1px;\n height: 24px;\n background-color: var(--color-theme-400);\n margin: 0 8px;\n }\n\n .filter-button {\n display: flex;\n align-items: center;\n gap: 6px;\n }\n`;\n\nexport interface TabHeaderProps {\n /** Which view-mode toggle is highlighted as active. */\n activeView?: \"list\" | \"column\" | \"timeline\";\n}\n\n/** The Tasks/Discussions/… tab bar plus the right-hand view toolbar. */\nexport const TabHeader = ({\n activeView = \"list\",\n}: TabHeaderProps): ReactElement => {\n const [active, setActive] = useState(0);\n return (\n <StyledTabHeader>\n <Nav onSelect={setActive}>\n {NAV_TABS.map((label, index) => (\n <Item active={index === active} key={label} name={label}>\n <Body2 color=\"secondary\" weight=\"medium\">\n {label}\n </Body2>\n </Item>\n ))}\n </Nav>\n <StyledTabControls>\n <Tooltip title=\"Batch Edit\">\n <IconButton variant=\"text gray\">\n <EditMultipleIcon />\n </IconButton>\n </Tooltip>\n <span className=\"vertical-separator\" />\n <Button variant=\"text gray\" className=\"filter-button\">\n <FilterIcon />\n Filter\n </Button>\n <Tooltip title=\"List view\">\n <IconButton variant=\"text gray\" active={activeView === \"list\"}>\n <ViewListIcon />\n </IconButton>\n </Tooltip>\n <Tooltip title=\"Column view\">\n <IconButton variant=\"text gray\" active={activeView === \"column\"}>\n <ViewListIcon style={{ transform: \"rotate(90deg)\" }} />\n </IconButton>\n </Tooltip>\n <Tooltip title=\"Timeline view\">\n <IconButton variant=\"text gray\" active={activeView === \"timeline\"}>\n <ViewTimelineIcon />\n </IconButton>\n </Tooltip>\n <span className=\"vertical-separator\" />\n <Tooltip title=\"Add New\">\n <GlobalAddButton />\n </Tooltip>\n </StyledTabControls>\n </StyledTabHeader>\n );\n};\n\nTabHeader.displayName = \"TabHeader\";\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared building blocks for the Presentation mock-ups (`Presentation/*`
|
|
3
|
+
* stories). The application shell, page headers, tab bar and small widgets are
|
|
4
|
+
* defined once here and reused by the List view, Column view, Task sheet and
|
|
5
|
+
* empty-page stories so the chrome stays identical and in one place.
|
|
6
|
+
*/
|
|
7
|
+
export * from "./tokens";
|
|
8
|
+
export { MainLogo } from "./MainLogo";
|
|
9
|
+
export { RoundAvatar } from "./RoundAvatar";
|
|
10
|
+
export { PresentationShell, StyledPagePaper } from "./PresentationShell";
|
|
11
|
+
export type { PresentationShellProps } from "./PresentationShell";
|
|
12
|
+
export { PageHeader, ProjectPageHeader, TabHeader } from "./headers";
|
|
13
|
+
export type { PageHeaderProps, ProjectPageHeaderProps, TabHeaderProps, } from "./headers";
|
|
14
|
+
export { FloatingControls } from "./FloatingControls";
|
|
15
|
+
export { TaskOptionsMenu, TaskListOptionsMenu } from "./TaskOptionsMenu";
|
|
16
|
+
export type { TaskOptionsMenuProps, TaskListOptionsMenuProps, } from "./TaskOptionsMenu";
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +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,eAAe,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACzE,YAAY,EACV,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared building blocks for the Presentation mock-ups (`Presentation/*`
|
|
3
|
+
* stories). The application shell, page headers, tab bar and small widgets are
|
|
4
|
+
* defined once here and reused by the List view, Column view, Task sheet and
|
|
5
|
+
* empty-page stories so the chrome stays identical and in one place.
|
|
6
|
+
*/
|
|
7
|
+
export * from "./tokens";
|
|
8
|
+
export { MainLogo } from "./MainLogo";
|
|
9
|
+
export { RoundAvatar } from "./RoundAvatar";
|
|
10
|
+
export { PresentationShell, StyledPagePaper } from "./PresentationShell";
|
|
11
|
+
export { PageHeader, ProjectPageHeader, TabHeader } from "./headers";
|
|
12
|
+
export { FloatingControls } from "./FloatingControls";
|
|
13
|
+
export { TaskOptionsMenu, TaskListOptionsMenu } from "./TaskOptionsMenu";
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["MainLogo","RoundAvatar","PresentationShell","StyledPagePaper","PageHeader","ProjectPageHeader","TabHeader","FloatingControls","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 { 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,eAAe,EAAEC,mBAAmB,QAAQ,mBAAmB","ignoreList":[]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared constants for the Presentation mock-ups.
|
|
3
|
+
*
|
|
4
|
+
* Breakpoints mirror new-activecollab-front (Tailwind sm / md / lg / xl).
|
|
5
|
+
*/
|
|
6
|
+
export declare const BREAKPOINT = 640;
|
|
7
|
+
export declare const SM = "640px";
|
|
8
|
+
export declare const MD = "768px";
|
|
9
|
+
export declare const LG = "1024px";
|
|
10
|
+
export declare const XL = "1280px";
|
|
11
|
+
export declare const TRANSITION = "200ms ease";
|
|
12
|
+
/** Mock avatar background colours (stand-ins for real user avatars). */
|
|
13
|
+
export declare const AVATAR_COLORS: {
|
|
14
|
+
yellow: string;
|
|
15
|
+
purple: string;
|
|
16
|
+
blue: string;
|
|
17
|
+
orange: string;
|
|
18
|
+
green: string;
|
|
19
|
+
teal: string;
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=tokens.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../../../src/presentation/shared/tokens.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,UAAU,MAAM,CAAC;AAC9B,eAAO,MAAM,EAAE,UAAU,CAAC;AAC1B,eAAO,MAAM,EAAE,UAAU,CAAC;AAC1B,eAAO,MAAM,EAAE,WAAW,CAAC;AAC3B,eAAO,MAAM,EAAE,WAAW,CAAC;AAC3B,eAAO,MAAM,UAAU,eAAe,CAAC;AAEvC,wEAAwE;AACxE,eAAO,MAAM,aAAa;;;;;;;CAOzB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared constants for the Presentation mock-ups.
|
|
3
|
+
*
|
|
4
|
+
* Breakpoints mirror new-activecollab-front (Tailwind sm / md / lg / xl).
|
|
5
|
+
*/
|
|
6
|
+
export const BREAKPOINT = 640;
|
|
7
|
+
export const SM = "640px";
|
|
8
|
+
export const MD = "768px";
|
|
9
|
+
export const LG = "1024px";
|
|
10
|
+
export const XL = "1280px";
|
|
11
|
+
export const TRANSITION = "200ms ease";
|
|
12
|
+
|
|
13
|
+
/** Mock avatar background colours (stand-ins for real user avatars). */
|
|
14
|
+
export const AVATAR_COLORS = {
|
|
15
|
+
yellow: "#F5B041",
|
|
16
|
+
purple: "#A569BD",
|
|
17
|
+
blue: "#5499C7",
|
|
18
|
+
orange: "#E67E22",
|
|
19
|
+
green: "#32B370",
|
|
20
|
+
teal: "#48C9B0"
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=tokens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.js","names":["BREAKPOINT","SM","MD","LG","XL","TRANSITION","AVATAR_COLORS","yellow","purple","blue","orange","green","teal"],"sources":["../../../../src/presentation/shared/tokens.ts"],"sourcesContent":["/**\n * Shared constants for the Presentation mock-ups.\n *\n * Breakpoints mirror new-activecollab-front (Tailwind sm / md / lg / xl).\n */\nexport const BREAKPOINT = 640;\nexport const SM = \"640px\";\nexport const MD = \"768px\";\nexport const LG = \"1024px\";\nexport const XL = \"1280px\";\nexport const TRANSITION = \"200ms ease\";\n\n/** Mock avatar background colours (stand-ins for real user avatars). */\nexport const AVATAR_COLORS = {\n yellow: \"#F5B041\",\n purple: \"#A569BD\",\n blue: \"#5499C7\",\n orange: \"#E67E22\",\n green: \"#32B370\",\n teal: \"#48C9B0\",\n};\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMA,UAAU,GAAG,GAAG;AAC7B,OAAO,MAAMC,EAAE,GAAG,OAAO;AACzB,OAAO,MAAMC,EAAE,GAAG,OAAO;AACzB,OAAO,MAAMC,EAAE,GAAG,QAAQ;AAC1B,OAAO,MAAMC,EAAE,GAAG,QAAQ;AAC1B,OAAO,MAAMC,UAAU,GAAG,YAAY;;AAEtC;AACA,OAAO,MAAMC,aAAa,GAAG;EAC3BC,MAAM,EAAE,SAAS;EACjBC,MAAM,EAAE,SAAS;EACjBC,IAAI,EAAE,SAAS;EACfC,MAAM,EAAE,SAAS;EACjBC,KAAK,EAAE,SAAS;EAChBC,IAAI,EAAE;AACR,CAAC","ignoreList":[]}
|