@activecollab/components 2.0.438 → 2.0.440
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/components/Menu/Menu.js +45 -19
- package/dist/cjs/components/Menu/Menu.js.map +1 -1
- package/dist/cjs/components/Transitions/Grow/Grow.js +110 -0
- package/dist/cjs/components/Transitions/Grow/Grow.js.map +1 -0
- package/dist/cjs/components/Transitions/Grow/index.js +17 -0
- package/dist/cjs/components/Transitions/Grow/index.js.map +1 -0
- package/dist/cjs/components/Transitions/index.js +11 -0
- package/dist/cjs/components/Transitions/index.js.map +1 -1
- package/dist/cjs/presentation/shared/headers.js +3 -2
- package/dist/cjs/presentation/shared/headers.js.map +1 -1
- package/dist/esm/components/Menu/Menu.d.ts.map +1 -1
- package/dist/esm/components/Menu/Menu.js +43 -19
- package/dist/esm/components/Menu/Menu.js.map +1 -1
- package/dist/esm/components/Transitions/Grow/Grow.d.ts +14 -0
- package/dist/esm/components/Transitions/Grow/Grow.d.ts.map +1 -0
- package/dist/esm/components/Transitions/Grow/Grow.js +88 -0
- package/dist/esm/components/Transitions/Grow/Grow.js.map +1 -0
- package/dist/esm/components/Transitions/Grow/index.d.ts +2 -0
- package/dist/esm/components/Transitions/Grow/index.d.ts.map +1 -0
- package/dist/esm/components/Transitions/Grow/index.js +2 -0
- package/dist/esm/components/Transitions/Grow/index.js.map +1 -0
- package/dist/esm/components/Transitions/index.d.ts +1 -0
- package/dist/esm/components/Transitions/index.d.ts.map +1 -1
- package/dist/esm/components/Transitions/index.js +1 -0
- package/dist/esm/components/Transitions/index.js.map +1 -1
- package/dist/esm/presentation/shared/headers.d.ts +7 -1
- package/dist/esm/presentation/shared/headers.d.ts.map +1 -1
- package/dist/esm/presentation/shared/headers.js +3 -2
- package/dist/esm/presentation/shared/headers.js.map +1 -1
- package/dist/index.js +734 -616
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/package.json +1 -1
|
@@ -5,6 +5,7 @@ import { StyledMenu } from "./Styles";
|
|
|
5
5
|
import useForkRef from "../../utils/useForkRef";
|
|
6
6
|
import { Overlay } from "../Overlay";
|
|
7
7
|
import { Popper } from "../Popper";
|
|
8
|
+
import { Grow } from "../Transitions";
|
|
8
9
|
import { Window } from "../Window";
|
|
9
10
|
|
|
10
11
|
// source: https://twitter.com/mattpocockuk/status/1671908303918473217/photo/1
|
|
@@ -37,14 +38,22 @@ export const Menu = _ref => {
|
|
|
37
38
|
const _useState = useState(defaultOpen),
|
|
38
39
|
open = _useState[0],
|
|
39
40
|
setOpen = _useState[1];
|
|
40
|
-
const _useState2 = useState(),
|
|
41
|
-
|
|
42
|
-
|
|
41
|
+
const _useState2 = useState(!defaultOpen),
|
|
42
|
+
exited = _useState2[0],
|
|
43
|
+
setExited = _useState2[1];
|
|
44
|
+
const _useState3 = useState(),
|
|
45
|
+
childNode = _useState3[0],
|
|
46
|
+
setChildNode = _useState3[1];
|
|
43
47
|
const elementRef = useRef(null);
|
|
44
48
|
const isOpenAtLeastOnce = useRef(false);
|
|
45
49
|
useEffect(() => {
|
|
46
50
|
setOpen(defaultOpen);
|
|
47
51
|
}, [defaultOpen]);
|
|
52
|
+
useEffect(() => {
|
|
53
|
+
if (open) {
|
|
54
|
+
setExited(false);
|
|
55
|
+
}
|
|
56
|
+
}, [open]);
|
|
48
57
|
const handleRefRef = useForkRef(target ? target.ref : undefined, setChildNode);
|
|
49
58
|
const handleRef = useForkRef(handleRefRef, elementRef);
|
|
50
59
|
const handleOpen = useCallback(event => {
|
|
@@ -79,35 +88,50 @@ export const Menu = _ref => {
|
|
|
79
88
|
isOpenAtLeastOnce.current = false;
|
|
80
89
|
}
|
|
81
90
|
}, [open]);
|
|
82
|
-
return /*#__PURE__*/React.createElement(React.Fragment, null, target && /*#__PURE__*/React.cloneElement(target, targetProps), open ? /*#__PURE__*/React.createElement(Window, {
|
|
91
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, target && /*#__PURE__*/React.cloneElement(target, targetProps), open || !exited ? /*#__PURE__*/React.createElement(Window, {
|
|
83
92
|
onClose: handleClose,
|
|
84
|
-
disableScrollLock: !handleScroll
|
|
85
|
-
|
|
93
|
+
disableScrollLock: !handleScroll
|
|
94
|
+
// A closing menu hands the focus back at once, it does not hold it for the length of the fade.
|
|
95
|
+
,
|
|
96
|
+
disableFocusLock: disableFocusLock || !open,
|
|
86
97
|
style: {
|
|
87
98
|
position: windowAbsolutelyPositioned ? "absolute" : "fixed"
|
|
88
99
|
}
|
|
89
|
-
}, /*#__PURE__*/React.createElement(Overlay, {
|
|
100
|
+
}, open ? /*#__PURE__*/React.createElement(Overlay, {
|
|
90
101
|
className: backgroundElementClass,
|
|
91
102
|
onClick: handleClose,
|
|
92
103
|
tabIndex: -1,
|
|
93
104
|
disableBackgroundColor: true
|
|
94
|
-
}), /*#__PURE__*/React.createElement(Popper, {
|
|
105
|
+
}) : null, /*#__PURE__*/React.createElement(Popper, {
|
|
95
106
|
anchorEl: childNode,
|
|
96
107
|
open: childNode ? open : false,
|
|
97
108
|
placement: position,
|
|
98
109
|
className: popperClassName,
|
|
99
110
|
tabIndex: -1,
|
|
100
|
-
afterWrite: onPopperOpen
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
+
afterWrite: onPopperOpen,
|
|
112
|
+
transition: true
|
|
113
|
+
}, _ref2 => {
|
|
114
|
+
let placement = _ref2.placement,
|
|
115
|
+
transitionProps = _ref2.transitionProps;
|
|
116
|
+
return /*#__PURE__*/React.createElement(Grow, {
|
|
117
|
+
placement: placement,
|
|
118
|
+
in: transitionProps == null ? void 0 : transitionProps.in,
|
|
119
|
+
onEnter: transitionProps == null ? void 0 : transitionProps.onEnter,
|
|
120
|
+
onExited: () => {
|
|
121
|
+
setExited(true);
|
|
122
|
+
transitionProps == null || transitionProps.onExited == null || transitionProps.onExited();
|
|
123
|
+
}
|
|
124
|
+
}, /*#__PURE__*/React.createElement(StyledMenu, {
|
|
125
|
+
className: classnames("c-simple-menu__paper", "c-simple-menu__" + mode, menuClassName, className),
|
|
126
|
+
$mode: mode,
|
|
127
|
+
onMouseDown: onMenuClick
|
|
128
|
+
}, /*#__PURE__*/React.createElement(MenuContextProvider, {
|
|
129
|
+
value: {
|
|
130
|
+
open,
|
|
131
|
+
setOpen
|
|
132
|
+
}
|
|
133
|
+
}, typeof children === "function" ? children(childProps) : children)));
|
|
134
|
+
})) : null);
|
|
111
135
|
};
|
|
112
136
|
Menu.displayName = "Menu";
|
|
113
137
|
//# sourceMappingURL=Menu.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Menu.js","names":["React","useRef","useState","useCallback","useEffect","classnames","MenuContextProvider","StyledMenu","useForkRef","Overlay","Popper","Window","Menu","_ref","children","_ref$disableFocusLock","disableFocusLock","onMenuClick","_ref$handleScroll","handleScroll","_ref$mode","mode","_ref$open","open","defaultOpen","onOpen","onClose","onBeforeClose","_ref$position","position","target","className","menuClassName","popperClassName","backgroundElementClass","_ref$windowAbsolutely","windowAbsolutelyPositioned","onPopperOpen","_useState","setOpen","_useState2","childNode","setChildNode","elementRef","isOpenAtLeastOnce","handleRefRef","ref","undefined","handleRef","handleOpen","event","_target$props","preventDefault","stopPropagation","props","onClick","handleClose","childProps","forceClose","targetProps","current","_elementRef$current","focus","createElement","Fragment","cloneElement","disableScrollLock","style","tabIndex","disableBackgroundColor","anchorEl","placement","afterWrite","$mode","onMouseDown","value","displayName"],"sources":["../../../../src/components/Menu/Menu.tsx"],"sourcesContent":["import React, {\n useRef,\n FC,\n ReactNode,\n MouseEvent,\n useState,\n useCallback,\n useEffect,\n ReactElement,\n Ref,\n} from \"react\";\n\nimport { Placement } from \"@popperjs/core\";\nimport classnames from \"classnames\";\n\nimport { MenuContextProvider } from \"./context\";\nimport { StyledMenu } from \"./Styles\";\nimport useForkRef from \"../../utils/useForkRef\";\nimport { Overlay } from \"../Overlay\";\nimport { Popper } from \"../Popper\";\nimport { Window } from \"../Window\";\n\ninterface ElementWithRef<T> extends ReactElement {\n ref?: Ref<T>;\n}\n\n// source: https://twitter.com/mattpocockuk/status/1671908303918473217/photo/1\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport type MenuMode = \"normal\" | \"wider\" | \"tiny\" | \"widest\";\n\nexport interface IMenu {\n /** Menu content */\n children:\n | ReactNode\n | ((childProps: { forceClose: () => void }) => JSX.Element);\n /** On menu element click */\n onMenuClick?: (event: MouseEvent<HTMLElement>) => void;\n /** Handle scroll bar */\n handleScroll?: boolean;\n /** Disable Focus Lock */\n disableFocusLock?: boolean;\n /** Menu width mode */\n mode?: MenuMode;\n /** Should menu be open when it's mounted */\n open?: boolean;\n /** Callback triggered when modal has been opened */\n onOpen?: () => void;\n /** Callback triggered when modal has been closed */\n onClose?: () => void;\n /** Before close callback */\n onBeforeClose?: () => boolean;\n /** Position Menu */\n position?: Placement;\n /** Target element */\n target?: ElementWithRef<Element>;\n className?: string;\n /** Menu classes */\n menuClassName?: string;\n /** Popper class name*/\n popperClassName?: string;\n /** Background style for clickable element after the menu is open (opacity, color, etc...) */\n backgroundElementClass?: string;\n /** Should Window be positioned absolutely */\n windowAbsolutelyPositioned?: boolean;\n /** Popper on open */\n onPopperOpen?: (...args) => void;\n}\n\nexport const Menu: FC<IMenu> = ({\n children,\n disableFocusLock = false,\n onMenuClick,\n handleScroll = true,\n mode = \"normal\",\n open: defaultOpen = false,\n onOpen,\n onClose,\n onBeforeClose,\n position = \"bottom-start\",\n target,\n className,\n menuClassName,\n popperClassName,\n backgroundElementClass,\n windowAbsolutelyPositioned = false,\n onPopperOpen,\n}) => {\n const [open, setOpen] = useState(defaultOpen);\n const [childNode, setChildNode] = useState<Element | null>();\n const elementRef = useRef<HTMLElement | null>(null);\n const isOpenAtLeastOnce = useRef(false);\n\n useEffect(() => {\n setOpen(defaultOpen);\n }, [defaultOpen]);\n\n const handleRefRef = useForkRef(\n target ? target.ref : undefined,\n setChildNode\n );\n const handleRef = useForkRef(handleRefRef, elementRef);\n\n const handleOpen = useCallback(\n (\n event: Pick<MouseEvent<Element>, \"preventDefault\" | \"stopPropagation\">\n ) => {\n event?.preventDefault();\n event?.stopPropagation();\n setOpen(true);\n typeof onOpen === \"function\" && onOpen();\n typeof target?.props?.onClick === \"function\" &&\n target.props.onClick(event);\n },\n [onOpen, target?.props]\n );\n\n const handleClose = useCallback(() => {\n if (typeof onBeforeClose === \"function\" && !onBeforeClose()) {\n return;\n }\n setOpen(false);\n typeof onClose === \"function\" && onClose();\n }, [onClose, onBeforeClose]);\n\n const childProps = {\n forceClose: handleClose,\n };\n\n const targetProps = {\n open,\n ref: handleRef,\n onClick: handleOpen,\n };\n\n useEffect(() => {\n if (open) {\n isOpenAtLeastOnce.current = true;\n } else if (!open && isOpenAtLeastOnce.current) {\n elementRef.current?.focus();\n isOpenAtLeastOnce.current = false;\n }\n }, [open]);\n\n return (\n <>\n {target && React.cloneElement(target, targetProps)}\n {open ? (\n <Window\n onClose={handleClose}\n disableScrollLock={!handleScroll}\n disableFocusLock={disableFocusLock}\n style={{\n position: windowAbsolutelyPositioned ? \"absolute\" : \"fixed\",\n }}\n >\n <Overlay\n className={backgroundElementClass}\n onClick={handleClose}\n tabIndex={-1}\n disableBackgroundColor\n />\n <Popper\n anchorEl={childNode}\n open={childNode ? open : false}\n placement={position}\n className={popperClassName}\n tabIndex={-1}\n afterWrite={onPopperOpen}\n >\n <StyledMenu\n className={classnames(\n \"c-simple-menu__paper\",\n `c-simple-menu__${mode}`,\n menuClassName,\n className\n )}\n $mode={mode}\n onMouseDown={onMenuClick}\n >\n <MenuContextProvider value={{ open, setOpen }}>\n {typeof children === \"function\"\n ? children(childProps)\n : children}\n </MenuContextProvider>\n </StyledMenu>\n </Popper>\n </Window>\n ) : null}\n </>\n );\n};\n\nMenu.displayName = \"Menu\";\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"Menu.js","names":["React","useRef","useState","useCallback","useEffect","classnames","MenuContextProvider","StyledMenu","useForkRef","Overlay","Popper","Grow","Window","Menu","_ref","children","_ref$disableFocusLock","disableFocusLock","onMenuClick","_ref$handleScroll","handleScroll","_ref$mode","mode","_ref$open","open","defaultOpen","onOpen","onClose","onBeforeClose","_ref$position","position","target","className","menuClassName","popperClassName","backgroundElementClass","_ref$windowAbsolutely","windowAbsolutelyPositioned","onPopperOpen","_useState","setOpen","_useState2","exited","setExited","_useState3","childNode","setChildNode","elementRef","isOpenAtLeastOnce","handleRefRef","ref","undefined","handleRef","handleOpen","event","_target$props","preventDefault","stopPropagation","props","onClick","handleClose","childProps","forceClose","targetProps","current","_elementRef$current","focus","createElement","Fragment","cloneElement","disableScrollLock","style","tabIndex","disableBackgroundColor","anchorEl","placement","afterWrite","transition","_ref2","transitionProps","in","onEnter","onExited","$mode","onMouseDown","value","displayName"],"sources":["../../../../src/components/Menu/Menu.tsx"],"sourcesContent":["import React, {\n useRef,\n FC,\n ReactNode,\n MouseEvent,\n useState,\n useCallback,\n useEffect,\n ReactElement,\n Ref,\n} from \"react\";\n\nimport { Placement } from \"@popperjs/core\";\nimport classnames from \"classnames\";\n\nimport { MenuContextProvider } from \"./context\";\nimport { StyledMenu } from \"./Styles\";\nimport useForkRef from \"../../utils/useForkRef\";\nimport { Overlay } from \"../Overlay\";\nimport { Popper } from \"../Popper\";\nimport { Grow } from \"../Transitions\";\nimport { Window } from \"../Window\";\n\ninterface ElementWithRef<T> extends ReactElement {\n ref?: Ref<T>;\n}\n\n// source: https://twitter.com/mattpocockuk/status/1671908303918473217/photo/1\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport type MenuMode = \"normal\" | \"wider\" | \"tiny\" | \"widest\";\n\nexport interface IMenu {\n /** Menu content */\n children:\n | ReactNode\n | ((childProps: { forceClose: () => void }) => JSX.Element);\n /** On menu element click */\n onMenuClick?: (event: MouseEvent<HTMLElement>) => void;\n /** Handle scroll bar */\n handleScroll?: boolean;\n /** Disable Focus Lock */\n disableFocusLock?: boolean;\n /** Menu width mode */\n mode?: MenuMode;\n /** Should menu be open when it's mounted */\n open?: boolean;\n /** Callback triggered when modal has been opened */\n onOpen?: () => void;\n /** Callback triggered when modal has been closed */\n onClose?: () => void;\n /** Before close callback */\n onBeforeClose?: () => boolean;\n /** Position Menu */\n position?: Placement;\n /** Target element */\n target?: ElementWithRef<Element>;\n className?: string;\n /** Menu classes */\n menuClassName?: string;\n /** Popper class name*/\n popperClassName?: string;\n /** Background style for clickable element after the menu is open (opacity, color, etc...) */\n backgroundElementClass?: string;\n /** Should Window be positioned absolutely */\n windowAbsolutelyPositioned?: boolean;\n /** Popper on open */\n onPopperOpen?: (...args) => void;\n}\n\nexport const Menu: FC<IMenu> = ({\n children,\n disableFocusLock = false,\n onMenuClick,\n handleScroll = true,\n mode = \"normal\",\n open: defaultOpen = false,\n onOpen,\n onClose,\n onBeforeClose,\n position = \"bottom-start\",\n target,\n className,\n menuClassName,\n popperClassName,\n backgroundElementClass,\n windowAbsolutelyPositioned = false,\n onPopperOpen,\n}) => {\n const [open, setOpen] = useState(defaultOpen);\n const [exited, setExited] = useState(!defaultOpen);\n const [childNode, setChildNode] = useState<Element | null>();\n const elementRef = useRef<HTMLElement | null>(null);\n const isOpenAtLeastOnce = useRef(false);\n\n useEffect(() => {\n setOpen(defaultOpen);\n }, [defaultOpen]);\n\n useEffect(() => {\n if (open) {\n setExited(false);\n }\n }, [open]);\n\n const handleRefRef = useForkRef(\n target ? target.ref : undefined,\n setChildNode\n );\n const handleRef = useForkRef(handleRefRef, elementRef);\n\n const handleOpen = useCallback(\n (\n event: Pick<MouseEvent<Element>, \"preventDefault\" | \"stopPropagation\">\n ) => {\n event?.preventDefault();\n event?.stopPropagation();\n setOpen(true);\n typeof onOpen === \"function\" && onOpen();\n typeof target?.props?.onClick === \"function\" &&\n target.props.onClick(event);\n },\n [onOpen, target?.props]\n );\n\n const handleClose = useCallback(() => {\n if (typeof onBeforeClose === \"function\" && !onBeforeClose()) {\n return;\n }\n setOpen(false);\n typeof onClose === \"function\" && onClose();\n }, [onClose, onBeforeClose]);\n\n const childProps = {\n forceClose: handleClose,\n };\n\n const targetProps = {\n open,\n ref: handleRef,\n onClick: handleOpen,\n };\n\n useEffect(() => {\n if (open) {\n isOpenAtLeastOnce.current = true;\n } else if (!open && isOpenAtLeastOnce.current) {\n elementRef.current?.focus();\n isOpenAtLeastOnce.current = false;\n }\n }, [open]);\n\n return (\n <>\n {target && React.cloneElement(target, targetProps)}\n {open || !exited ? (\n <Window\n onClose={handleClose}\n disableScrollLock={!handleScroll}\n // A closing menu hands the focus back at once, it does not hold it for the length of the fade.\n disableFocusLock={disableFocusLock || !open}\n style={{\n position: windowAbsolutelyPositioned ? \"absolute\" : \"fixed\",\n }}\n >\n {/* A closing menu must not swallow the click that lands while it fades out. */}\n {open ? (\n <Overlay\n className={backgroundElementClass}\n onClick={handleClose}\n tabIndex={-1}\n disableBackgroundColor\n />\n ) : null}\n <Popper\n anchorEl={childNode}\n open={childNode ? open : false}\n placement={position}\n className={popperClassName}\n tabIndex={-1}\n afterWrite={onPopperOpen}\n transition\n >\n {({ placement, transitionProps }) => (\n <Grow\n placement={placement}\n in={transitionProps?.in}\n onEnter={transitionProps?.onEnter}\n onExited={() => {\n setExited(true);\n transitionProps?.onExited?.();\n }}\n >\n <StyledMenu\n className={classnames(\n \"c-simple-menu__paper\",\n `c-simple-menu__${mode}`,\n menuClassName,\n className\n )}\n $mode={mode}\n onMouseDown={onMenuClick}\n >\n <MenuContextProvider value={{ open, setOpen }}>\n {typeof children === \"function\"\n ? children(childProps)\n : children}\n </MenuContextProvider>\n </StyledMenu>\n </Grow>\n )}\n </Popper>\n </Window>\n ) : null}\n </>\n );\n};\n\nMenu.displayName = \"Menu\";\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { FC, ReactElement } from "react";
|
|
2
|
+
import { Placement } from "@popperjs/core";
|
|
3
|
+
import { TransitionProps } from "../types";
|
|
4
|
+
interface IGrow extends Omit<TransitionProps, "timeout"> {
|
|
5
|
+
children: ReactElement;
|
|
6
|
+
timeout?: number;
|
|
7
|
+
/** Where the element sits against its anchor, so it grows out of the anchor and not out of its own middle */
|
|
8
|
+
placement?: Placement;
|
|
9
|
+
}
|
|
10
|
+
export declare const GROW_ENTER = 140;
|
|
11
|
+
export declare const GROW_EXIT = 100;
|
|
12
|
+
export declare const Grow: FC<IGrow>;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=Grow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Grow.d.ts","sourceRoot":"","sources":["../../../../../src/components/Transitions/Grow/Grow.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,EAAE,EAAE,YAAY,EAAgB,MAAM,OAAO,CAAC;AAG9D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,UAAU,KAAM,SAAQ,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC;IACtD,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6GAA6G;IAC7G,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED,eAAO,MAAM,UAAU,MAAM,CAAC;AAC9B,eAAO,MAAM,SAAS,MAAM,CAAC;AAgD7B,eAAO,MAAM,IAAI,EAAE,EAAE,CAAC,KAAK,CA2C1B,CAAC"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
|
+
import React, { cloneElement } from "react";
|
|
3
|
+
import { Transition } from "react-transition-group";
|
|
4
|
+
export const GROW_ENTER = 140;
|
|
5
|
+
export const GROW_EXIT = 100;
|
|
6
|
+
const START_SCALE = 0.96;
|
|
7
|
+
|
|
8
|
+
// jsdom and SSR have no matchMedia, and a reader who asks for less motion gets none.
|
|
9
|
+
const prefersReducedMotion = () => typeof window !== "undefined" && typeof window.matchMedia === "function" && window.matchMedia("(prefers-reduced-motion: reduce)").matches;
|
|
10
|
+
const originFor = placement => {
|
|
11
|
+
const _split = (placement || "bottom-start").split("-"),
|
|
12
|
+
side = _split[0],
|
|
13
|
+
alignment = _split[1];
|
|
14
|
+
const vertical = side === "top" ? "bottom" : "top";
|
|
15
|
+
const horizontal = alignment === "end" ? "right" : "left";
|
|
16
|
+
if (side === "left" || side === "right") {
|
|
17
|
+
return "center " + (side === "left" ? "right" : "left");
|
|
18
|
+
}
|
|
19
|
+
return horizontal + " " + vertical;
|
|
20
|
+
};
|
|
21
|
+
const buildStyles = (origin, enter, exit) => {
|
|
22
|
+
const away = "scale(" + START_SCALE + ")";
|
|
23
|
+
return {
|
|
24
|
+
base: {
|
|
25
|
+
transformOrigin: origin,
|
|
26
|
+
transitionProperty: "opacity, transform",
|
|
27
|
+
transitionTimingFunction: "ease-out",
|
|
28
|
+
transform: away,
|
|
29
|
+
opacity: 0
|
|
30
|
+
},
|
|
31
|
+
entering: {
|
|
32
|
+
opacity: 1,
|
|
33
|
+
transform: "scale(1)",
|
|
34
|
+
transitionDuration: enter + "ms"
|
|
35
|
+
},
|
|
36
|
+
entered: {
|
|
37
|
+
opacity: 1,
|
|
38
|
+
transform: "scale(1)"
|
|
39
|
+
},
|
|
40
|
+
exiting: {
|
|
41
|
+
opacity: 0,
|
|
42
|
+
transform: away,
|
|
43
|
+
transitionDuration: exit + "ms"
|
|
44
|
+
},
|
|
45
|
+
exited: {
|
|
46
|
+
opacity: 0,
|
|
47
|
+
transform: away
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
export const Grow = _ref => {
|
|
52
|
+
let _ref$in = _ref.in,
|
|
53
|
+
inProp = _ref$in === void 0 ? false : _ref$in,
|
|
54
|
+
onEnter = _ref.onEnter,
|
|
55
|
+
onExited = _ref.onExited,
|
|
56
|
+
children = _ref.children,
|
|
57
|
+
style = _ref.style,
|
|
58
|
+
placement = _ref.placement,
|
|
59
|
+
_ref$timeout = _ref.timeout,
|
|
60
|
+
timeout = _ref$timeout === void 0 ? GROW_ENTER : _ref$timeout;
|
|
61
|
+
const still = prefersReducedMotion();
|
|
62
|
+
const enter = still ? 0 : timeout;
|
|
63
|
+
const exit = still ? 0 : GROW_EXIT;
|
|
64
|
+
const styles = buildStyles(originFor(placement), enter, exit);
|
|
65
|
+
|
|
66
|
+
// React flushes the state change that follows onEnter before the browser paints, so without a
|
|
67
|
+
// forced layout here the element never holds its starting style and the transition is skipped.
|
|
68
|
+
const handleEnter = (node, isAppearing) => {
|
|
69
|
+
if (node) {
|
|
70
|
+
void node.offsetHeight;
|
|
71
|
+
}
|
|
72
|
+
onEnter == null || onEnter(node, isAppearing);
|
|
73
|
+
};
|
|
74
|
+
return /*#__PURE__*/React.createElement(Transition, {
|
|
75
|
+
appear: true,
|
|
76
|
+
in: inProp,
|
|
77
|
+
timeout: {
|
|
78
|
+
enter,
|
|
79
|
+
exit
|
|
80
|
+
},
|
|
81
|
+
onEnter: handleEnter,
|
|
82
|
+
onExited: onExited
|
|
83
|
+
}, state => /*#__PURE__*/cloneElement(children, {
|
|
84
|
+
style: _extends({}, styles.base, styles[state], style, children.props.style)
|
|
85
|
+
}));
|
|
86
|
+
};
|
|
87
|
+
Grow.displayName = "Grow";
|
|
88
|
+
//# sourceMappingURL=Grow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Grow.js","names":["React","cloneElement","Transition","GROW_ENTER","GROW_EXIT","START_SCALE","prefersReducedMotion","window","matchMedia","matches","originFor","placement","_split","split","side","alignment","vertical","horizontal","buildStyles","origin","enter","exit","away","base","transformOrigin","transitionProperty","transitionTimingFunction","transform","opacity","entering","transitionDuration","entered","exiting","exited","Grow","_ref","_ref$in","in","inProp","onEnter","onExited","children","style","_ref$timeout","timeout","still","styles","handleEnter","node","isAppearing","offsetHeight","createElement","appear","state","_extends","props","displayName"],"sources":["../../../../../src/components/Transitions/Grow/Grow.tsx"],"sourcesContent":["import React, { FC, ReactElement, cloneElement } from \"react\";\nimport { Transition } from \"react-transition-group\";\n\nimport { Placement } from \"@popperjs/core\";\n\nimport { TransitionProps } from \"../types\";\n\ninterface IGrow extends Omit<TransitionProps, \"timeout\"> {\n children: ReactElement;\n timeout?: number;\n /** Where the element sits against its anchor, so it grows out of the anchor and not out of its own middle */\n placement?: Placement;\n}\n\nexport const GROW_ENTER = 140;\nexport const GROW_EXIT = 100;\n\nconst START_SCALE = 0.96;\n\n// jsdom and SSR have no matchMedia, and a reader who asks for less motion gets none.\nconst prefersReducedMotion = (): boolean =>\n typeof window !== \"undefined\" &&\n typeof window.matchMedia === \"function\" &&\n window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n\nconst originFor = (placement?: Placement): string => {\n const [side, alignment] = (placement || \"bottom-start\").split(\"-\");\n const vertical = side === \"top\" ? \"bottom\" : \"top\";\n const horizontal = alignment === \"end\" ? \"right\" : \"left\";\n\n if (side === \"left\" || side === \"right\") {\n return `center ${side === \"left\" ? \"right\" : \"left\"}`;\n }\n\n return `${horizontal} ${vertical}`;\n};\n\nconst buildStyles = (origin: string, enter: number, exit: number) => {\n const away = `scale(${START_SCALE})`;\n\n return {\n base: {\n transformOrigin: origin,\n transitionProperty: \"opacity, transform\",\n transitionTimingFunction: \"ease-out\",\n transform: away,\n opacity: 0,\n },\n entering: {\n opacity: 1,\n transform: \"scale(1)\",\n transitionDuration: `${enter}ms`,\n },\n entered: { opacity: 1, transform: \"scale(1)\" },\n exiting: {\n opacity: 0,\n transform: away,\n transitionDuration: `${exit}ms`,\n },\n exited: { opacity: 0, transform: away },\n };\n};\n\nexport const Grow: FC<IGrow> = ({\n in: inProp = false,\n onEnter,\n onExited,\n children,\n style,\n placement,\n timeout = GROW_ENTER,\n}) => {\n const still = prefersReducedMotion();\n const enter = still ? 0 : timeout;\n const exit = still ? 0 : GROW_EXIT;\n const styles = buildStyles(originFor(placement), enter, exit);\n\n // React flushes the state change that follows onEnter before the browser paints, so without a\n // forced layout here the element never holds its starting style and the transition is skipped.\n const handleEnter = (node: HTMLElement, isAppearing: boolean) => {\n if (node) {\n void node.offsetHeight;\n }\n onEnter?.(node, isAppearing);\n };\n\n return (\n <Transition\n appear\n in={inProp}\n timeout={{ enter, exit }}\n onEnter={handleEnter}\n onExited={onExited}\n >\n {(state): ReactElement =>\n cloneElement(children, {\n style: {\n ...styles.base,\n ...styles[state],\n ...style,\n ...children.props.style,\n },\n })\n }\n </Transition>\n );\n};\n\nGrow.displayName = \"Grow\";\n"],"mappings":";AAAA,OAAOA,KAAK,IAAsBC,YAAY,QAAQ,OAAO;AAC7D,SAASC,UAAU,QAAQ,wBAAwB;AAanD,OAAO,MAAMC,UAAU,GAAG,GAAG;AAC7B,OAAO,MAAMC,SAAS,GAAG,GAAG;AAE5B,MAAMC,WAAW,GAAG,IAAI;;AAExB;AACA,MAAMC,oBAAoB,GAAGA,CAAA,KAC3B,OAAOC,MAAM,KAAK,WAAW,IAC7B,OAAOA,MAAM,CAACC,UAAU,KAAK,UAAU,IACvCD,MAAM,CAACC,UAAU,CAAC,kCAAkC,CAAC,CAACC,OAAO;AAE/D,MAAMC,SAAS,GAAIC,SAAqB,IAAa;EACnD,MAAAC,MAAA,GAA0B,CAACD,SAAS,IAAI,cAAc,EAAEE,KAAK,CAAC,GAAG,CAAC;IAA3DC,IAAI,GAAAF,MAAA;IAAEG,SAAS,GAAAH,MAAA;EACtB,MAAMI,QAAQ,GAAGF,IAAI,KAAK,KAAK,GAAG,QAAQ,GAAG,KAAK;EAClD,MAAMG,UAAU,GAAGF,SAAS,KAAK,KAAK,GAAG,OAAO,GAAG,MAAM;EAEzD,IAAID,IAAI,KAAK,MAAM,IAAIA,IAAI,KAAK,OAAO,EAAE;IACvC,oBAAiBA,IAAI,KAAK,MAAM,GAAG,OAAO,GAAG,MAAM;EACrD;EAEA,OAAUG,UAAU,SAAID,QAAQ;AAClC,CAAC;AAED,MAAME,WAAW,GAAGA,CAACC,MAAc,EAAEC,KAAa,EAAEC,IAAY,KAAK;EACnE,MAAMC,IAAI,cAAYjB,WAAW,MAAG;EAEpC,OAAO;IACLkB,IAAI,EAAE;MACJC,eAAe,EAAEL,MAAM;MACvBM,kBAAkB,EAAE,oBAAoB;MACxCC,wBAAwB,EAAE,UAAU;MACpCC,SAAS,EAAEL,IAAI;MACfM,OAAO,EAAE;IACX,CAAC;IACDC,QAAQ,EAAE;MACRD,OAAO,EAAE,CAAC;MACVD,SAAS,EAAE,UAAU;MACrBG,kBAAkB,EAAKV,KAAK;IAC9B,CAAC;IACDW,OAAO,EAAE;MAAEH,OAAO,EAAE,CAAC;MAAED,SAAS,EAAE;IAAW,CAAC;IAC9CK,OAAO,EAAE;MACPJ,OAAO,EAAE,CAAC;MACVD,SAAS,EAAEL,IAAI;MACfQ,kBAAkB,EAAKT,IAAI;IAC7B,CAAC;IACDY,MAAM,EAAE;MAAEL,OAAO,EAAE,CAAC;MAAED,SAAS,EAAEL;IAAK;EACxC,CAAC;AACH,CAAC;AAED,OAAO,MAAMY,IAAe,GAAGC,IAAA,IAQzB;EAAA,IAAAC,OAAA,GAAAD,IAAA,CAPJE,EAAE;IAAEC,MAAM,GAAAF,OAAA,cAAG,KAAK,GAAAA,OAAA;IAClBG,OAAO,GAAAJ,IAAA,CAAPI,OAAO;IACPC,QAAQ,GAAAL,IAAA,CAARK,QAAQ;IACRC,QAAQ,GAAAN,IAAA,CAARM,QAAQ;IACRC,KAAK,GAAAP,IAAA,CAALO,KAAK;IACL/B,SAAS,GAAAwB,IAAA,CAATxB,SAAS;IAAAgC,YAAA,GAAAR,IAAA,CACTS,OAAO;IAAPA,OAAO,GAAAD,YAAA,cAAGxC,UAAU,GAAAwC,YAAA;EAEpB,MAAME,KAAK,GAAGvC,oBAAoB,CAAC,CAAC;EACpC,MAAMc,KAAK,GAAGyB,KAAK,GAAG,CAAC,GAAGD,OAAO;EACjC,MAAMvB,IAAI,GAAGwB,KAAK,GAAG,CAAC,GAAGzC,SAAS;EAClC,MAAM0C,MAAM,GAAG5B,WAAW,CAACR,SAAS,CAACC,SAAS,CAAC,EAAES,KAAK,EAAEC,IAAI,CAAC;;EAE7D;EACA;EACA,MAAM0B,WAAW,GAAGA,CAACC,IAAiB,EAAEC,WAAoB,KAAK;IAC/D,IAAID,IAAI,EAAE;MACR,KAAKA,IAAI,CAACE,YAAY;IACxB;IACAX,OAAO,YAAPA,OAAO,CAAGS,IAAI,EAAEC,WAAW,CAAC;EAC9B,CAAC;EAED,oBACEjD,KAAA,CAAAmD,aAAA,CAACjD,UAAU;IACTkD,MAAM;IACNf,EAAE,EAAEC,MAAO;IACXM,OAAO,EAAE;MAAExB,KAAK;MAAEC;IAAK,CAAE;IACzBkB,OAAO,EAAEQ,WAAY;IACrBP,QAAQ,EAAEA;EAAS,GAEjBa,KAAK,iBACLpD,YAAY,CAACwC,QAAQ,EAAE;IACrBC,KAAK,EAAAY,QAAA,KACAR,MAAM,CAACvB,IAAI,EACXuB,MAAM,CAACO,KAAK,CAAC,EACbX,KAAK,EACLD,QAAQ,CAACc,KAAK,CAACb,KAAK;EAE3B,CAAC,CAEO,CAAC;AAEjB,CAAC;AAEDR,IAAI,CAACsB,WAAW,GAAG,MAAM","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/Transitions/Grow/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../../src/components/Transitions/Grow/index.ts"],"sourcesContent":["export * from \"./Grow\";\n"],"mappings":"AAAA,cAAc,QAAQ","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/Transitions/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/Transitions/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/Transitions/index.ts"],"sourcesContent":["export * from \"./Fade\";\nexport * from \"./Slide\";\nexport * from \"./FromElement\";\nexport * from \"./SlideFromTop\";\nexport * from \"./SlideLeftRightTransition\";\nexport * from \"./ResizeTransition\";\nexport * from \"./Reveal\";\nexport * from \"./Scale\";\nexport * from \"./types\";\n"],"mappings":"AAAA,cAAc,QAAQ;AACtB,cAAc,SAAS;AACvB,cAAc,eAAe;AAC7B,cAAc,gBAAgB;AAC9B,cAAc,4BAA4B;AAC1C,cAAc,oBAAoB;AAClC,cAAc,UAAU;AACxB,cAAc,SAAS;AACvB,cAAc,SAAS","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/Transitions/index.ts"],"sourcesContent":["export * from \"./Fade\";\nexport * from \"./Slide\";\nexport * from \"./FromElement\";\nexport * from \"./SlideFromTop\";\nexport * from \"./SlideLeftRightTransition\";\nexport * from \"./ResizeTransition\";\nexport * from \"./Reveal\";\nexport * from \"./Scale\";\nexport * from \"./Grow\";\nexport * from \"./types\";\n"],"mappings":"AAAA,cAAc,QAAQ;AACtB,cAAc,SAAS;AACvB,cAAc,eAAe;AAC7B,cAAc,gBAAgB;AAC9B,cAAc,4BAA4B;AAC1C,cAAc,oBAAoB;AAClC,cAAc,UAAU;AACxB,cAAc,SAAS;AACvB,cAAc,QAAQ;AACtB,cAAc,SAAS","ignoreList":[]}
|
|
@@ -29,10 +29,16 @@ export interface TabHeaderProps {
|
|
|
29
29
|
activeView?: "list" | "column" | "timeline";
|
|
30
30
|
/** Batch edit is a list/board affordance; views without it pass `false`. */
|
|
31
31
|
showBatchEdit?: boolean;
|
|
32
|
+
/**
|
|
33
|
+
* A view's own control, placed after the tabs and before Filter — the slot
|
|
34
|
+
* the timeline's Settings gear moves into once the outline (and the gear it
|
|
35
|
+
* normally lives in) is hidden below the lg breakpoint.
|
|
36
|
+
*/
|
|
37
|
+
beforeFilter?: ReactNode;
|
|
32
38
|
}
|
|
33
39
|
/** The Tasks/Discussions/… tab bar plus the right-hand view toolbar. */
|
|
34
40
|
export declare const TabHeader: {
|
|
35
|
-
({ activeView, showBatchEdit, }: TabHeaderProps): ReactElement;
|
|
41
|
+
({ activeView, showBatchEdit, beforeFilter, }: TabHeaderProps): ReactElement;
|
|
36
42
|
displayName: string;
|
|
37
43
|
};
|
|
38
44
|
//# sourceMappingURL=headers.d.ts.map
|
|
@@ -1 +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;AAIjE,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AA8GvD,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;AAmMF,MAAM,WAAW,sBAAsB;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;iEAC6D;IAC7D,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,iFAAiF;IACjF,4BAA4B,CAAC,EAAE,UAAU,EAAE,CAAC;IAC5C,sEAAsE;IACtE,4BAA4B,CAAC,EAAE,OAAO,CAAC;CACxC;AAED,mFAAmF;AACnF,eAAO,MAAM,iBAAiB;iGAK3B,sBAAsB,GAAG,YAAY;;CAkCvC,CAAC;AAsCF,MAAM,WAAW,cAAc;IAC7B,uDAAuD;IACvD,UAAU,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAC;IAC5C,4EAA4E;IAC5E,aAAa,CAAC,EAAE,OAAO,CAAC;
|
|
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;AAIjE,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AA8GvD,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;AAmMF,MAAM,WAAW,sBAAsB;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;iEAC6D;IAC7D,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,iFAAiF;IACjF,4BAA4B,CAAC,EAAE,UAAU,EAAE,CAAC;IAC5C,sEAAsE;IACtE,4BAA4B,CAAC,EAAE,OAAO,CAAC;CACxC;AAED,mFAAmF;AACnF,eAAO,MAAM,iBAAiB;iGAK3B,sBAAsB,GAAG,YAAY;;CAkCvC,CAAC;AAsCF,MAAM,WAAW,cAAc;IAC7B,uDAAuD;IACvD,UAAU,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAC;IAC5C,4EAA4E;IAC5E,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;OAIG;IACH,YAAY,CAAC,EAAE,SAAS,CAAC;CAC1B;AAED,wEAAwE;AACxE,eAAO,MAAM,SAAS;mDAInB,cAAc,GAAG,YAAY;;CAmD/B,CAAC"}
|
|
@@ -196,7 +196,8 @@ export const TabHeader = _ref3 => {
|
|
|
196
196
|
let _ref3$activeView = _ref3.activeView,
|
|
197
197
|
activeView = _ref3$activeView === void 0 ? "list" : _ref3$activeView,
|
|
198
198
|
_ref3$showBatchEdit = _ref3.showBatchEdit,
|
|
199
|
-
showBatchEdit = _ref3$showBatchEdit === void 0 ? true : _ref3$showBatchEdit
|
|
199
|
+
showBatchEdit = _ref3$showBatchEdit === void 0 ? true : _ref3$showBatchEdit,
|
|
200
|
+
beforeFilter = _ref3.beforeFilter;
|
|
200
201
|
const _useState2 = useState(0),
|
|
201
202
|
active = _useState2[0],
|
|
202
203
|
setActive = _useState2[1];
|
|
@@ -215,7 +216,7 @@ export const TabHeader = _ref3 => {
|
|
|
215
216
|
variant: "text gray"
|
|
216
217
|
}, /*#__PURE__*/React.createElement(EditMultipleIcon, null))), /*#__PURE__*/React.createElement("span", {
|
|
217
218
|
className: "vertical-separator"
|
|
218
|
-
})) : null, /*#__PURE__*/React.createElement(Button, {
|
|
219
|
+
})) : null, beforeFilter, /*#__PURE__*/React.createElement(Button, {
|
|
219
220
|
variant: "text gray",
|
|
220
221
|
className: "filter-button"
|
|
221
222
|
}, /*#__PURE__*/React.createElement(FilterIcon, null), "Filter"), /*#__PURE__*/React.createElement(Tooltip, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"headers.js","names":["React","useState","styled","ProjectOptionsMenu","RoundAvatar","AVATAR_COLORS","MD","SM","TRANSITION","Button","GlobalAddButton","CounterButton","Header","IconButton","AddCrossTinyIcon","ArrowLeftIcon","CloseSmallIcon","CrownBlankIcon","CrownSelectedIcon","EditMultipleIcon","FilterIcon","InfoIcon","PeopleIcon","ViewListIcon","ViewTimelineIcon","Menu","MenuHeader","Item","Nav","ProgressPie","Tooltip","Body2","Caption1","Header2","Title2","LEADER_GOLD","StyledPageHeader","div","withConfig","displayName","componentId","PageHeader","_ref","title","children","createElement","className","StyledProjectHeaderChildren","PROJECT_MEMBERS","name","initials","color","blue","leader","purple","orange","StyledPeopleMenu","PeoplePopover","_useState","open","setOpen","onOpen","onClose","position","target","label","String","length","icon","active","onClearAll","undefined","rightElement","type","variant","size","weight","map","member","key","$bg","$bordered","style","fill","ProjectPageHeader","_ref2","_ref2$title","_ref2$sourceModuleLoa","sourceModuleLoaded","initialConnectedRepositories","canManageProjectRepositories","radius","progress","progressColor","backgroundColor","NAV_TABS","StyledTabHeader","StyledTabControls","TabHeader","_ref3","_ref3$activeView","activeView","_ref3$showBatchEdit","showBatchEdit","_useState2","setActive","onSelect","index","Fragment","transform"],"sources":["../../../../src/presentation/shared/headers.tsx"],"sourcesContent":["import React, { ReactElement, ReactNode, useState } from \"react\";\n\nimport styled from \"styled-components\";\n\nimport { Repository } from \"./ConnectRepositoryDialog\";\nimport { ProjectOptionsMenu } from \"./ProjectOptionsMenu\";\nimport { RoundAvatar } from \"./RoundAvatar\";\nimport { AVATAR_COLORS, MD, SM, TRANSITION } from \"./tokens\";\nimport { Button } from \"../../components/Button\";\nimport { GlobalAddButton } from \"../../components/Button/GlobalAddButton\";\nimport { CounterButton } from \"../../components/CounterButton\";\nimport { Header } from \"../../components/Header\";\nimport { IconButton } from \"../../components/IconButton\";\nimport {\n AddCrossTinyIcon,\n ArrowLeftIcon,\n CloseSmallIcon,\n CrownBlankIcon,\n CrownSelectedIcon,\n EditMultipleIcon,\n FilterIcon,\n InfoIcon,\n PeopleIcon,\n ViewListIcon,\n ViewTimelineIcon,\n} from \"../../components/Icons\";\nimport { Menu, MenuHeader } from \"../../components/Menu\";\nimport { Item, Nav } from \"../../components/Nav\";\nimport { ProgressPie } from \"../../components/ProgressPie\";\nimport { Tooltip } from \"../../components/Tooltip\";\nimport { Body2, Caption1, Header2, Title2 } from \"../../components/Typography\";\n\n/** Gold used for the project-leader cues (a data colour, not a theme token). */\nconst LEADER_GOLD = \"#FFCC6B\";\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/* People popover (mirrors the project header People dropdown): a header row\n (\"People\" + add button), a \"Members\" section and a row per member. The\n project leader shows a gold crown; other members reveal a \"set as leader\"\n crown and a remove button on hover. Clicks are no-ops. */\ninterface ProjectMember {\n name: string;\n initials: string;\n color: string;\n leader?: boolean;\n}\n\nconst PROJECT_MEMBERS: ProjectMember[] = [\n {\n name: \"Theo Brandt\",\n initials: \"TB\",\n color: AVATAR_COLORS.blue,\n leader: true,\n },\n { name: \"Iris Calloway\", initials: \"IC\", color: AVATAR_COLORS.purple },\n { name: \"Account Director\", initials: \"AD\", color: \"#8A8F98\" },\n { name: \"Grace Bennett\", initials: \"GB\", color: AVATAR_COLORS.orange },\n];\n\nconst StyledPeopleMenu = styled.div`\n width: 256px;\n\n .members-label {\n display: block;\n margin: 8px 0;\n padding: 0 16px;\n }\n\n .member-row {\n position: relative;\n display: flex;\n align-items: center;\n min-height: 40px;\n margin: 0 8px;\n padding: 2px 8px;\n border-radius: 4px;\n cursor: default;\n transition: background-color ${TRANSITION};\n }\n\n .member-row:hover {\n background-color: var(--color-theme-200);\n }\n\n /* gold left bar on the project-leader row */\n .member-row.leader::before {\n content: \"\";\n position: absolute;\n top: 4px;\n bottom: 4px;\n left: 0;\n width: 4px;\n border-radius: 4px;\n background-color: ${LEADER_GOLD};\n }\n\n /* gold ring on the leader's avatar */\n .member-row.leader .member-avatar {\n outline: 2px solid ${LEADER_GOLD};\n outline-offset: -2px;\n }\n\n .member-name {\n flex: 1;\n margin-left: 12px;\n min-width: 0;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n\n .member-right {\n display: flex;\n align-items: center;\n gap: 2px;\n flex-shrink: 0;\n margin-left: 8px;\n }\n\n .leader-crown {\n flex-shrink: 0;\n }\n\n /* member actions (set-as-leader / remove) appear on hover, like the app */\n .member-options {\n display: none;\n align-items: center;\n gap: 2px;\n }\n\n .member-row:hover .member-options {\n display: flex;\n }\n`;\n\nconst PeoplePopover = (): 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 <CounterButton\n label={String(PROJECT_MEMBERS.length)}\n icon={<PeopleIcon />}\n active={open}\n onClearAll={() => undefined}\n />\n }\n >\n <StyledPeopleMenu>\n <MenuHeader\n title=\"People\"\n rightElement={\n <IconButton\n type=\"button\"\n variant=\"text gray\"\n size=\"small\"\n aria-label=\"Add People\"\n >\n <AddCrossTinyIcon />\n </IconButton>\n }\n />\n <Caption1 weight=\"bold\" className=\"members-label\">\n Members\n </Caption1>\n {PROJECT_MEMBERS.map((member) => (\n <div\n className={member.leader ? \"member-row leader\" : \"member-row\"}\n key={member.name}\n >\n <RoundAvatar\n className=\"member-avatar\"\n $bg={member.color}\n $bordered={false}\n >\n {member.initials}\n </RoundAvatar>\n <Body2 className=\"member-name\">{member.name}</Body2>\n <span className=\"member-right\">\n {member.leader && (\n <CrownSelectedIcon\n className=\"leader-crown\"\n style={{ fill: LEADER_GOLD }}\n />\n )}\n <span className=\"member-options\">\n {!member.leader && (\n <Tooltip title=\"Set as Project Leader\">\n <IconButton type=\"button\" variant=\"text gray\" size=\"small\">\n <CrownBlankIcon />\n </IconButton>\n </Tooltip>\n )}\n <Tooltip title=\"Remove from Project\">\n <IconButton type=\"button\" variant=\"text gray\" size=\"small\">\n <CloseSmallIcon />\n </IconButton>\n </Tooltip>\n </span>\n </span>\n </div>\n ))}\n </StyledPeopleMenu>\n </Menu>\n );\n};\n\nexport interface ProjectPageHeaderProps {\n title?: string;\n /** When the `source` module is loaded, the \"...\" menu shows a Repositories\n * section (connected repositories + Connect Repository). */\n sourceModuleLoaded?: boolean;\n /** Repositories already connected to the project (seeds the count + submenu). */\n initialConnectedRepositories?: Repository[];\n /** Whether the current user can manage the project's repositories. */\n canManageProjectRepositories?: boolean;\n}\n\n/** The project page header: back arrow, title, progress, info, people, options. */\nexport const ProjectPageHeader = ({\n title = \"#131: Ime projekta\",\n sourceModuleLoaded = false,\n initialConnectedRepositories,\n canManageProjectRepositories,\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 <PeoplePopover />\n <ProjectOptionsMenu\n sourceModuleLoaded={sourceModuleLoaded}\n initialConnectedRepositories={initialConnectedRepositories}\n canManageProjectRepositories={canManageProjectRepositories}\n />\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 /** Batch edit is a list/board affordance; views without it pass `false`. */\n showBatchEdit?: boolean;\n}\n\n/** The Tasks/Discussions/… tab bar plus the right-hand view toolbar. */\nexport const TabHeader = ({\n activeView = \"list\",\n showBatchEdit = true,\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 {showBatchEdit ? (\n <>\n <Tooltip title=\"Batch Edit\">\n <IconButton variant=\"text gray\">\n <EditMultipleIcon />\n </IconButton>\n </Tooltip>\n <span className=\"vertical-separator\" />\n </>\n ) : null}\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":[]}
|
|
1
|
+
{"version":3,"file":"headers.js","names":["React","useState","styled","ProjectOptionsMenu","RoundAvatar","AVATAR_COLORS","MD","SM","TRANSITION","Button","GlobalAddButton","CounterButton","Header","IconButton","AddCrossTinyIcon","ArrowLeftIcon","CloseSmallIcon","CrownBlankIcon","CrownSelectedIcon","EditMultipleIcon","FilterIcon","InfoIcon","PeopleIcon","ViewListIcon","ViewTimelineIcon","Menu","MenuHeader","Item","Nav","ProgressPie","Tooltip","Body2","Caption1","Header2","Title2","LEADER_GOLD","StyledPageHeader","div","withConfig","displayName","componentId","PageHeader","_ref","title","children","createElement","className","StyledProjectHeaderChildren","PROJECT_MEMBERS","name","initials","color","blue","leader","purple","orange","StyledPeopleMenu","PeoplePopover","_useState","open","setOpen","onOpen","onClose","position","target","label","String","length","icon","active","onClearAll","undefined","rightElement","type","variant","size","weight","map","member","key","$bg","$bordered","style","fill","ProjectPageHeader","_ref2","_ref2$title","_ref2$sourceModuleLoa","sourceModuleLoaded","initialConnectedRepositories","canManageProjectRepositories","radius","progress","progressColor","backgroundColor","NAV_TABS","StyledTabHeader","StyledTabControls","TabHeader","_ref3","_ref3$activeView","activeView","_ref3$showBatchEdit","showBatchEdit","beforeFilter","_useState2","setActive","onSelect","index","Fragment","transform"],"sources":["../../../../src/presentation/shared/headers.tsx"],"sourcesContent":["import React, { ReactElement, ReactNode, useState } from \"react\";\n\nimport styled from \"styled-components\";\n\nimport { Repository } from \"./ConnectRepositoryDialog\";\nimport { ProjectOptionsMenu } from \"./ProjectOptionsMenu\";\nimport { RoundAvatar } from \"./RoundAvatar\";\nimport { AVATAR_COLORS, MD, SM, TRANSITION } from \"./tokens\";\nimport { Button } from \"../../components/Button\";\nimport { GlobalAddButton } from \"../../components/Button/GlobalAddButton\";\nimport { CounterButton } from \"../../components/CounterButton\";\nimport { Header } from \"../../components/Header\";\nimport { IconButton } from \"../../components/IconButton\";\nimport {\n AddCrossTinyIcon,\n ArrowLeftIcon,\n CloseSmallIcon,\n CrownBlankIcon,\n CrownSelectedIcon,\n EditMultipleIcon,\n FilterIcon,\n InfoIcon,\n PeopleIcon,\n ViewListIcon,\n ViewTimelineIcon,\n} from \"../../components/Icons\";\nimport { Menu, MenuHeader } from \"../../components/Menu\";\nimport { Item, Nav } from \"../../components/Nav\";\nimport { ProgressPie } from \"../../components/ProgressPie\";\nimport { Tooltip } from \"../../components/Tooltip\";\nimport { Body2, Caption1, Header2, Title2 } from \"../../components/Typography\";\n\n/** Gold used for the project-leader cues (a data colour, not a theme token). */\nconst LEADER_GOLD = \"#FFCC6B\";\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/* People popover (mirrors the project header People dropdown): a header row\n (\"People\" + add button), a \"Members\" section and a row per member. The\n project leader shows a gold crown; other members reveal a \"set as leader\"\n crown and a remove button on hover. Clicks are no-ops. */\ninterface ProjectMember {\n name: string;\n initials: string;\n color: string;\n leader?: boolean;\n}\n\nconst PROJECT_MEMBERS: ProjectMember[] = [\n {\n name: \"Theo Brandt\",\n initials: \"TB\",\n color: AVATAR_COLORS.blue,\n leader: true,\n },\n { name: \"Iris Calloway\", initials: \"IC\", color: AVATAR_COLORS.purple },\n { name: \"Account Director\", initials: \"AD\", color: \"#8A8F98\" },\n { name: \"Grace Bennett\", initials: \"GB\", color: AVATAR_COLORS.orange },\n];\n\nconst StyledPeopleMenu = styled.div`\n width: 256px;\n\n .members-label {\n display: block;\n margin: 8px 0;\n padding: 0 16px;\n }\n\n .member-row {\n position: relative;\n display: flex;\n align-items: center;\n min-height: 40px;\n margin: 0 8px;\n padding: 2px 8px;\n border-radius: 4px;\n cursor: default;\n transition: background-color ${TRANSITION};\n }\n\n .member-row:hover {\n background-color: var(--color-theme-200);\n }\n\n /* gold left bar on the project-leader row */\n .member-row.leader::before {\n content: \"\";\n position: absolute;\n top: 4px;\n bottom: 4px;\n left: 0;\n width: 4px;\n border-radius: 4px;\n background-color: ${LEADER_GOLD};\n }\n\n /* gold ring on the leader's avatar */\n .member-row.leader .member-avatar {\n outline: 2px solid ${LEADER_GOLD};\n outline-offset: -2px;\n }\n\n .member-name {\n flex: 1;\n margin-left: 12px;\n min-width: 0;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n\n .member-right {\n display: flex;\n align-items: center;\n gap: 2px;\n flex-shrink: 0;\n margin-left: 8px;\n }\n\n .leader-crown {\n flex-shrink: 0;\n }\n\n /* member actions (set-as-leader / remove) appear on hover, like the app */\n .member-options {\n display: none;\n align-items: center;\n gap: 2px;\n }\n\n .member-row:hover .member-options {\n display: flex;\n }\n`;\n\nconst PeoplePopover = (): 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 <CounterButton\n label={String(PROJECT_MEMBERS.length)}\n icon={<PeopleIcon />}\n active={open}\n onClearAll={() => undefined}\n />\n }\n >\n <StyledPeopleMenu>\n <MenuHeader\n title=\"People\"\n rightElement={\n <IconButton\n type=\"button\"\n variant=\"text gray\"\n size=\"small\"\n aria-label=\"Add People\"\n >\n <AddCrossTinyIcon />\n </IconButton>\n }\n />\n <Caption1 weight=\"bold\" className=\"members-label\">\n Members\n </Caption1>\n {PROJECT_MEMBERS.map((member) => (\n <div\n className={member.leader ? \"member-row leader\" : \"member-row\"}\n key={member.name}\n >\n <RoundAvatar\n className=\"member-avatar\"\n $bg={member.color}\n $bordered={false}\n >\n {member.initials}\n </RoundAvatar>\n <Body2 className=\"member-name\">{member.name}</Body2>\n <span className=\"member-right\">\n {member.leader && (\n <CrownSelectedIcon\n className=\"leader-crown\"\n style={{ fill: LEADER_GOLD }}\n />\n )}\n <span className=\"member-options\">\n {!member.leader && (\n <Tooltip title=\"Set as Project Leader\">\n <IconButton type=\"button\" variant=\"text gray\" size=\"small\">\n <CrownBlankIcon />\n </IconButton>\n </Tooltip>\n )}\n <Tooltip title=\"Remove from Project\">\n <IconButton type=\"button\" variant=\"text gray\" size=\"small\">\n <CloseSmallIcon />\n </IconButton>\n </Tooltip>\n </span>\n </span>\n </div>\n ))}\n </StyledPeopleMenu>\n </Menu>\n );\n};\n\nexport interface ProjectPageHeaderProps {\n title?: string;\n /** When the `source` module is loaded, the \"...\" menu shows a Repositories\n * section (connected repositories + Connect Repository). */\n sourceModuleLoaded?: boolean;\n /** Repositories already connected to the project (seeds the count + submenu). */\n initialConnectedRepositories?: Repository[];\n /** Whether the current user can manage the project's repositories. */\n canManageProjectRepositories?: boolean;\n}\n\n/** The project page header: back arrow, title, progress, info, people, options. */\nexport const ProjectPageHeader = ({\n title = \"#131: Ime projekta\",\n sourceModuleLoaded = false,\n initialConnectedRepositories,\n canManageProjectRepositories,\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 <PeoplePopover />\n <ProjectOptionsMenu\n sourceModuleLoaded={sourceModuleLoaded}\n initialConnectedRepositories={initialConnectedRepositories}\n canManageProjectRepositories={canManageProjectRepositories}\n />\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 /** Batch edit is a list/board affordance; views without it pass `false`. */\n showBatchEdit?: boolean;\n /**\n * A view's own control, placed after the tabs and before Filter — the slot\n * the timeline's Settings gear moves into once the outline (and the gear it\n * normally lives in) is hidden below the lg breakpoint.\n */\n beforeFilter?: ReactNode;\n}\n\n/** The Tasks/Discussions/… tab bar plus the right-hand view toolbar. */\nexport const TabHeader = ({\n activeView = \"list\",\n showBatchEdit = true,\n beforeFilter,\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 {showBatchEdit ? (\n <>\n <Tooltip title=\"Batch Edit\">\n <IconButton variant=\"text gray\">\n <EditMultipleIcon />\n </IconButton>\n </Tooltip>\n <span className=\"vertical-separator\" />\n </>\n ) : null}\n {beforeFilter}\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":[]}
|