@ms-cloudpack/overlay 0.19.17 → 0.19.19
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/browser-esm/198.chunk.js +2 -0
- package/dist/browser-esm/198.chunk.js.map +1 -0
- package/dist/browser-esm/240.chunk.js +1 -1
- package/dist/browser-esm/240.chunk.js.map +1 -1
- package/dist/browser-esm/686.chunk.js +2 -0
- package/dist/browser-esm/{282.chunk.js.map → 686.chunk.js.map} +1 -1
- package/dist/browser-esm/lib/index.js +1 -1
- package/dist/browser-esm/lib/index.js.map +1 -1
- package/lib/components/Button/Button.d.ts +0 -4
- package/lib/components/Button/Button.d.ts.map +1 -1
- package/lib/components/Button/Button.js +5 -18
- package/lib/components/Button/Button.js.map +1 -1
- package/lib/components/Dialog/Dialog.d.ts +6 -0
- package/lib/components/Dialog/Dialog.d.ts.map +1 -1
- package/lib/components/Dialog/Dialog.js +12 -3
- package/lib/components/Dialog/Dialog.js.map +1 -1
- package/lib/components/ErrorDialog/ErrorDialog.d.ts.map +1 -1
- package/lib/components/ErrorDialog/ErrorDialog.js +3 -3
- package/lib/components/ErrorDialog/ErrorDialog.js.map +1 -1
- package/lib/components/ResultsAccordion/ResultsAccordion.d.ts.map +1 -1
- package/lib/components/ResultsAccordion/ResultsAccordion.js +9 -11
- package/lib/components/ResultsAccordion/ResultsAccordion.js.map +1 -1
- package/lib/components/StatusBadge/StatusBadge.d.ts.map +1 -1
- package/lib/components/StatusBadge/StatusBadge.js +2 -4
- package/lib/components/StatusBadge/StatusBadge.js.map +1 -1
- package/lib/components/StatusDialog/StatusDialog.d.ts.map +1 -1
- package/lib/components/StatusDialog/StatusDialog.js +9 -3
- package/lib/components/StatusDialog/StatusDialog.js.map +1 -1
- package/lib/components/StatusDialog/TaskList.d.ts +5 -2
- package/lib/components/StatusDialog/TaskList.d.ts.map +1 -1
- package/lib/components/StatusDialog/TaskList.js +7 -4
- package/lib/components/StatusDialog/TaskList.js.map +1 -1
- package/lib/components/StatusDialog/TaskStatus.d.ts.map +1 -1
- package/lib/components/StatusDialog/TaskStatus.js +2 -1
- package/lib/components/StatusDialog/TaskStatus.js.map +1 -1
- package/lib/components/icons/ChevronDown20.d.ts +2 -0
- package/lib/components/icons/ChevronDown20.d.ts.map +1 -0
- package/lib/components/icons/ChevronDown20.js +3 -0
- package/lib/components/icons/ChevronDown20.js.map +1 -0
- package/lib/components/icons/Dismiss16.d.ts +2 -0
- package/lib/components/icons/Dismiss16.d.ts.map +1 -0
- package/lib/components/icons/Dismiss16.js +3 -0
- package/lib/components/icons/Dismiss16.js.map +1 -0
- package/lib/components/icons/Error24.d.ts +3 -0
- package/lib/components/icons/Error24.d.ts.map +1 -0
- package/lib/components/icons/Error24.js +4 -0
- package/lib/components/icons/Error24.js.map +1 -0
- package/lib/components/icons/Open16.d.ts +2 -0
- package/lib/components/icons/Open16.d.ts.map +1 -0
- package/lib/components/icons/Open16.js +3 -0
- package/lib/components/icons/Open16.js.map +1 -0
- package/lib/components/icons/Refresh20.d.ts +2 -0
- package/lib/components/icons/Refresh20.d.ts.map +1 -0
- package/lib/components/icons/Refresh20.js +4 -0
- package/lib/components/icons/Refresh20.js.map +1 -0
- package/lib/components/icons/Success24.d.ts +3 -0
- package/lib/components/icons/Success24.d.ts.map +1 -0
- package/lib/components/icons/Success24.js +4 -0
- package/lib/components/icons/Success24.js.map +1 -0
- package/lib/components/icons/Warning24.d.ts +3 -0
- package/lib/components/icons/Warning24.d.ts.map +1 -0
- package/lib/components/icons/Warning24.js +4 -0
- package/lib/components/icons/Warning24.js.map +1 -0
- package/lib/components/icons/createSvgIcon.d.ts +17 -0
- package/lib/components/icons/createSvgIcon.d.ts.map +1 -0
- package/lib/components/icons/createSvgIcon.js +44 -0
- package/lib/components/icons/createSvgIcon.js.map +1 -0
- package/package.json +3 -3
- package/dist/browser-esm/282.chunk.js +0 -2
- package/dist/browser-esm/944.chunk.js +0 -2
- package/dist/browser-esm/944.chunk.js.map +0 -1
- package/lib/components/StatusDialog/Searchbox.d.ts +0 -7
- package/lib/components/StatusDialog/Searchbox.d.ts.map +0 -1
- package/lib/components/StatusDialog/Searchbox.js +0 -7
- package/lib/components/StatusDialog/Searchbox.js.map +0 -1
|
@@ -12,10 +12,6 @@ export interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
|
|
|
12
12
|
* @default 'default'
|
|
13
13
|
*/
|
|
14
14
|
variant?: 'default' | 'primary' | 'link' | 'iconOnly' | 'custom';
|
|
15
|
-
/** Include this icon (add more as needed) */
|
|
16
|
-
iconName?: 'close' | 'refresh';
|
|
17
|
-
/** Alt text for the icon. Defaults to an empty string (presentational). */
|
|
18
|
-
iconAlt?: string;
|
|
19
15
|
}
|
|
20
16
|
/**
|
|
21
17
|
* Render a styled button.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../src/components/Button/Button.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../src/components/Button/Button.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAI1D,MAAM,WAAW,WAAY,SAAQ,oBAAoB,CAAC,iBAAiB,CAAC;IAC1E;;;;;;;;;OASG;IACH,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,UAAU,GAAG,QAAQ,CAAC;CAClE;AAKD;;;;;GAKG;AACH,eAAO,MAAM,MAAM,EAAE,iBAAiB,CAAC,WAAW,CAiBjD,CAAC"}
|
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
import { jsx as _jsx
|
|
1
|
+
import { jsx as _jsx } from "preact/jsx-runtime";
|
|
2
2
|
import cx from 'classnames';
|
|
3
3
|
import styles from './Button.module.css';
|
|
4
|
-
|
|
5
|
-
import RefreshIcon from '../../images/refresh-20.inline.svg';
|
|
6
|
-
import RefreshWhiteIcon from '../../images/refresh-white-20.inline.svg';
|
|
7
|
-
import CloseIcon from '../../images/dismiss-16-filled.inline.svg';
|
|
4
|
+
import inputStyles from './inputCommon.module.css';
|
|
8
5
|
/** button variants that get the `.standard` class */
|
|
9
6
|
const standardButtonVariants = ['default', 'primary', 'iconOnly'];
|
|
10
7
|
/**
|
|
@@ -14,18 +11,8 @@ const standardButtonVariants = ['default', 'primary', 'iconOnly'];
|
|
|
14
11
|
* or increase specificity (like `button.customClass`).
|
|
15
12
|
*/
|
|
16
13
|
export const Button = (props) => {
|
|
17
|
-
const { variant = 'default',
|
|
18
|
-
const className = cx(styles.root, standardButtonVariants.includes(variant) && styles.standard, styles[variant], (variant === 'primary' || variant === 'default') && styles.defaultPrimary, propsClassName);
|
|
19
|
-
|
|
20
|
-
? CloseIcon
|
|
21
|
-
: // The approach of importing SVG content as data-urls doesn't allow the icon color to
|
|
22
|
-
// follow the text color, so for now, we use two versions of the refresh icon depending on
|
|
23
|
-
// whether the button background is dark or light.
|
|
24
|
-
iconName === 'refresh'
|
|
25
|
-
? variant === 'primary'
|
|
26
|
-
? RefreshWhiteIcon
|
|
27
|
-
: RefreshIcon
|
|
28
|
-
: undefined;
|
|
29
|
-
return (_jsxs("button", { type: "button", ...other, class: className, children: [iconContent && _jsx("img", { src: iconContent, alt: iconAlt || '' }), !!iconName && variant !== 'iconOnly' && ' ', children] }));
|
|
14
|
+
const { variant = 'default', children, class: propsClassName, ...other } = props;
|
|
15
|
+
const className = cx(styles.root, inputStyles.root, standardButtonVariants.includes(variant) && [styles.standard, inputStyles.standard], styles[variant], (variant === 'primary' || variant === 'default') && styles.defaultPrimary, propsClassName);
|
|
16
|
+
return (_jsx("button", { type: "button", ...other, class: className, children: children }));
|
|
30
17
|
};
|
|
31
18
|
//# sourceMappingURL=Button.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.js","sourceRoot":"","sources":["../../../src/components/Button/Button.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAG5B,OAAO,MAAM,MAAM,qBAAqB,CAAC;AACzC,
|
|
1
|
+
{"version":3,"file":"Button.js","sourceRoot":"","sources":["../../../src/components/Button/Button.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAG5B,OAAO,MAAM,MAAM,qBAAqB,CAAC;AACzC,OAAO,WAAW,MAAM,0BAA0B,CAAC;AAgBnD,qDAAqD;AACrD,MAAM,sBAAsB,GAA6B,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;AAE5F;;;;;GAKG;AACH,MAAM,CAAC,MAAM,MAAM,GAAmC,CAAC,KAAK,EAAE,EAAE;IAC9D,MAAM,EAAE,OAAO,GAAG,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,KAAK,EAAE,GAAG,KAAK,CAAC;IAEjF,MAAM,SAAS,GAAG,EAAE,CAClB,MAAM,CAAC,IAAI,EACX,WAAW,CAAC,IAAI,EAChB,sBAAsB,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,QAAQ,CAAC,EACnF,MAAM,CAAC,OAAO,CAAC,EACf,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,CAAC,IAAI,MAAM,CAAC,cAAc,EACzE,cAAc,CACf,CAAC;IAEF,OAAO,CACL,iBAAQ,IAAI,EAAC,QAAQ,KAAK,KAAK,EAAE,KAAK,EAAE,SAAS,YAC9C,QAAQ,GACF,CACV,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import cx from 'classnames';\nimport type { FunctionComponent } from 'preact';\nimport type { ButtonHTMLAttributes } from 'preact/compat';\nimport styles from './Button.module.css';\nimport inputStyles from './inputCommon.module.css';\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n /**\n * Button style variant:\n * - `default`: white background, black text, dark gray border\n * - `primary`: blue background, white text\n * - `link`: looks like a link (underline, no background or padding). Note that to set the font\n * size or weight, you need to set them on a parent element or use higher specificty than one class.\n * - `iconOnly`: 32px width/height, light gray background on hover only\n * - `custom`: only get rid of the browser default styles\n * @default 'default'\n */\n variant?: 'default' | 'primary' | 'link' | 'iconOnly' | 'custom';\n}\n\n/** button variants that get the `.standard` class */\nconst standardButtonVariants: ButtonProps['variant'][] = ['default', 'primary', 'iconOnly'];\n\n/**\n * Render a styled button.\n *\n * To customize colors, you can either use the CSS variables (see `Button.module.css`)\n * or increase specificity (like `button.customClass`).\n */\nexport const Button: FunctionComponent<ButtonProps> = (props) => {\n const { variant = 'default', children, class: propsClassName, ...other } = props;\n\n const className = cx(\n styles.root,\n inputStyles.root,\n standardButtonVariants.includes(variant) && [styles.standard, inputStyles.standard],\n styles[variant],\n (variant === 'primary' || variant === 'default') && styles.defaultPrimary,\n propsClassName,\n );\n\n return (\n <button type=\"button\" {...other} class={className}>\n {children}\n </button>\n );\n};\n"]}
|
|
@@ -8,5 +8,11 @@ export interface DialogProps {
|
|
|
8
8
|
commands?: ComponentChildren;
|
|
9
9
|
children: ComponentChildren;
|
|
10
10
|
}
|
|
11
|
+
/**
|
|
12
|
+
* Dialog component which takes title and commands as props and content as children.
|
|
13
|
+
*
|
|
14
|
+
* If multiple children are provided, they'll be styled with a flex column layout with gaps.
|
|
15
|
+
* To prevent this behavior, wrap the children in a single div.
|
|
16
|
+
*/
|
|
11
17
|
export declare const Dialog: FunctionComponent<DialogProps>;
|
|
12
18
|
//# sourceMappingURL=Dialog.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dialog.d.ts","sourceRoot":"","sources":["../../../src/components/Dialog/Dialog.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAkB,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"Dialog.d.ts","sourceRoot":"","sources":["../../../src/components/Dialog/Dialog.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAkB,MAAM,QAAQ,CAAC;AAcnF,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;IAC5B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,QAAQ,EAAE,iBAAiB,CAAC;CAC7B;AAED;;;;;GAKG;AACH,eAAO,MAAM,MAAM,EAAE,iBAAiB,CAAC,WAAW,CAkDjD,CAAC"}
|
|
@@ -6,8 +6,15 @@ import styles from './Dialog.module.css';
|
|
|
6
6
|
import { useDraggable } from '../../hooks/useDraggable.js';
|
|
7
7
|
import { Button } from '../Button/Button.js';
|
|
8
8
|
import { elementIds } from '../../constants.js';
|
|
9
|
+
import { Dismiss16 } from '../icons/Dismiss16.js';
|
|
9
10
|
// Re-type children for preact
|
|
10
11
|
const FocusOn = _FocusOn;
|
|
12
|
+
/**
|
|
13
|
+
* Dialog component which takes title and commands as props and content as children.
|
|
14
|
+
*
|
|
15
|
+
* If multiple children are provided, they'll be styled with a flex column layout with gaps.
|
|
16
|
+
* To prevent this behavior, wrap the children in a single div.
|
|
17
|
+
*/
|
|
11
18
|
export const Dialog = (props) => {
|
|
12
19
|
const { title, id, style, draggable, onClose, commands, children } = props;
|
|
13
20
|
const dialogRootRef = useRef(null);
|
|
@@ -17,8 +24,10 @@ export const Dialog = (props) => {
|
|
|
17
24
|
containerElementRef: dialogRootRef,
|
|
18
25
|
dragElementRef: titleRef,
|
|
19
26
|
});
|
|
20
|
-
return (
|
|
21
|
-
|
|
22
|
-
|
|
27
|
+
return (
|
|
28
|
+
// The overlay must be outside FocusOn so that clicking on it will close the dialog
|
|
29
|
+
_jsx("div", { className: styles.overlay, children: _jsx(FocusOn, { className: styles.focusOn, onClickOutside: onClose, onEscapeKey: onClose, onActivation: () => titleRef.current?.focus(), children: _jsxs("div", { id: id, ref: dialogRootRef, class: cx(styles.dialog, style === 'error' && styles.error), role: "dialog", "aria-modal": true, "aria-labelledby": elementIds.dialogTitle, children: [_jsxs("div", { class: styles.titleArea, children: [_jsx("h2", { ref: titleRef, id: elementIds.dialogTitle, class: cx(styles.title, draggable && styles.draggable), tabIndex: -1, children: title }), onClose && (
|
|
30
|
+
// a close icon is common/universal enough that it doesn't need hover text
|
|
31
|
+
_jsx(Button, { variant: "iconOnly", onClick: onClose, "aria-label": "Close", children: _jsx(Dismiss16, {}) }))] }), commands && _jsx("div", { class: styles.commands, children: commands }), _jsx("div", { class: styles.content, children: children })] }) }) }));
|
|
23
32
|
};
|
|
24
33
|
//# sourceMappingURL=Dialog.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dialog.js","sourceRoot":"","sources":["../../../src/components/Dialog/Dialog.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,MAAM,MAAM,qBAAqB,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"Dialog.js","sourceRoot":"","sources":["../../../src/components/Dialog/Dialog.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,MAAM,MAAM,qBAAqB,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,8BAA8B;AAC9B,MAAM,OAAO,GAAG,QAEf,CAAC;AAYF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,MAAM,GAAmC,CAAC,KAAK,EAAE,EAAE;IAC9D,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAC3E,MAAM,aAAa,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAE9C,YAAY,CAAC;QACX,OAAO,EAAE,CAAC,CAAC,SAAS;QACpB,mBAAmB,EAAE,aAAa;QAClC,cAAc,EAAE,QAAQ;KACzB,CAAC,CAAC;IAEH,OAAO;IACL,mFAAmF;IACnF,cAAK,SAAS,EAAE,MAAM,CAAC,OAAO,YAC5B,KAAC,OAAO,IACN,SAAS,EAAE,MAAM,CAAC,OAAO,EACzB,cAAc,EAAE,OAAO,EACvB,WAAW,EAAE,OAAO,EACpB,YAAY,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,YAE7C,eACE,EAAE,EAAE,EAAE,EACN,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,KAAK,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,EAC3D,IAAI,EAAC,QAAQ,yCAEI,UAAU,CAAC,WAAW,aAEvC,eAAK,KAAK,EAAE,MAAM,CAAC,SAAS,aAC1B,aACE,GAAG,EAAE,QAAQ,EACb,EAAE,EAAE,UAAU,CAAC,WAAW,EAC1B,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC,EACtD,QAAQ,EAAE,CAAC,CAAC,YAEX,KAAK,GACH,EACJ,OAAO,IAAI;4BACV,0EAA0E;4BAC1E,KAAC,MAAM,IAAC,OAAO,EAAC,UAAU,EAAC,OAAO,EAAE,OAAO,gBAAa,OAAO,YAC7D,KAAC,SAAS,KAAG,GACN,CACV,IACG,EACL,QAAQ,IAAI,cAAK,KAAK,EAAE,MAAM,CAAC,QAAQ,YAAG,QAAQ,GAAO,EAC1D,cAAK,KAAK,EAAE,MAAM,CAAC,OAAO,YAAG,QAAQ,GAAO,IACxC,GACE,GACN,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import cx from 'classnames';\nimport type { ComponentChildren, FunctionComponent, ComponentProps } from 'preact';\nimport { useRef } from 'preact/hooks';\nimport { FocusOn as _FocusOn } from 'react-focus-on';\nimport styles from './Dialog.module.css';\nimport { useDraggable } from '../../hooks/useDraggable.js';\nimport { Button } from '../Button/Button.js';\nimport { elementIds } from '../../constants.js';\nimport { Dismiss16 } from '../icons/Dismiss16.js';\n\n// Re-type children for preact\nconst FocusOn = _FocusOn as FunctionComponent<\n Omit<ComponentProps<typeof _FocusOn>, 'children'> & { children: ComponentChildren }\n>;\n\nexport interface DialogProps {\n title: string;\n id: string;\n style?: 'default' | 'error';\n draggable?: boolean;\n onClose?: () => void;\n commands?: ComponentChildren;\n children: ComponentChildren;\n}\n\n/**\n * Dialog component which takes title and commands as props and content as children.\n *\n * If multiple children are provided, they'll be styled with a flex column layout with gaps.\n * To prevent this behavior, wrap the children in a single div.\n */\nexport const Dialog: FunctionComponent<DialogProps> = (props) => {\n const { title, id, style, draggable, onClose, commands, children } = props;\n const dialogRootRef = useRef<HTMLDivElement>(null);\n const titleRef = useRef<HTMLDivElement>(null);\n\n useDraggable({\n enabled: !!draggable,\n containerElementRef: dialogRootRef,\n dragElementRef: titleRef,\n });\n\n return (\n // The overlay must be outside FocusOn so that clicking on it will close the dialog\n <div className={styles.overlay}>\n <FocusOn\n className={styles.focusOn}\n onClickOutside={onClose}\n onEscapeKey={onClose}\n onActivation={() => titleRef.current?.focus()}\n >\n <div\n id={id}\n ref={dialogRootRef}\n class={cx(styles.dialog, style === 'error' && styles.error)}\n role=\"dialog\"\n aria-modal\n aria-labelledby={elementIds.dialogTitle}\n >\n <div class={styles.titleArea}>\n <h2\n ref={titleRef}\n id={elementIds.dialogTitle}\n class={cx(styles.title, draggable && styles.draggable)}\n tabIndex={-1}\n >\n {title}\n </h2>\n {onClose && (\n // a close icon is common/universal enough that it doesn't need hover text\n <Button variant=\"iconOnly\" onClick={onClose} aria-label=\"Close\">\n <Dismiss16 />\n </Button>\n )}\n </div>\n {commands && <div class={styles.commands}>{commands}</div>}\n <div class={styles.content}>{children}</div>\n </div>\n </FocusOn>\n </div>\n );\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ErrorDialog.d.ts","sourceRoot":"","sources":["../../../src/components/ErrorDialog/ErrorDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"ErrorDialog.d.ts","sourceRoot":"","sources":["../../../src/components/ErrorDialog/ErrorDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAIhD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAKjE,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,qBAAqB,EAAE,CAAC;CACtC;AAED,eAAO,MAAM,WAAW,EAAE,iBAAiB,CAAC,gBAAgB,CAyB3D,CAAC;AAEF,eAAe,WAAW,CAAC"}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import { jsx as _jsx,
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "preact/jsx-runtime";
|
|
2
2
|
import { createElement as _createElement } from "preact";
|
|
3
3
|
import { Button } from '../Button/Button.js';
|
|
4
4
|
import { useCloudpack } from '../CloudpackProvider/CloudpackProvider.js';
|
|
5
5
|
import { PathError } from './PathError.js';
|
|
6
|
-
import styles from '../StatusDialog/TaskList.module.css';
|
|
7
6
|
import { Dialog } from '../Dialog/Dialog.js';
|
|
8
7
|
import { elementIds } from '../../constants.js';
|
|
8
|
+
import { Refresh20 } from '../icons/Refresh20.js';
|
|
9
9
|
export const ErrorDialog = ({ unsupported }) => {
|
|
10
10
|
const cloudpack = useCloudpack();
|
|
11
11
|
const reload = () => void cloudpack.restartAllTasks.mutate();
|
|
12
12
|
const editConfig = () => void cloudpack.openConfigEditor.mutate();
|
|
13
|
-
return (_jsx(Dialog, { title: "Cloudpack: Unsupported paths found in project", id: elementIds.errorDialogRoot, style: "error", commands: _jsxs(_Fragment, { children: [
|
|
13
|
+
return (_jsx(Dialog, { title: "Cloudpack: Unsupported paths found in project", id: elementIds.errorDialogRoot, style: "error", commands: _jsxs(_Fragment, { children: [_jsxs(Button, { variant: "primary", onClick: reload, children: [_jsx(Refresh20, {}), " Retry bundling"] }), _jsx(Button, { onClick: editConfig, children: "Edit Cloudpack config" })] }), children: unsupported.map((data, index) => (_createElement(PathError, { ...data, index: index, key: index }))) }));
|
|
14
14
|
};
|
|
15
15
|
export default ErrorDialog;
|
|
16
16
|
//# sourceMappingURL=ErrorDialog.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ErrorDialog.js","sourceRoot":"","sources":["../../../src/components/ErrorDialog/ErrorDialog.tsx"],"names":[],"mappings":";;AACA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"ErrorDialog.js","sourceRoot":"","sources":["../../../src/components/ErrorDialog/ErrorDialog.tsx"],"names":[],"mappings":";;AACA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAMlD,MAAM,CAAC,MAAM,WAAW,GAAwC,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE;IAClF,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IAEjC,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,KAAK,SAAS,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC;IAC7D,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,KAAK,SAAS,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC;IAElE,OAAO,CACL,KAAC,MAAM,IACL,KAAK,EAAC,+CAA+C,EACrD,EAAE,EAAE,UAAU,CAAC,eAAe,EAC9B,KAAK,EAAC,OAAO,EACb,QAAQ,EACN,8BACE,MAAC,MAAM,IAAC,OAAO,EAAC,SAAS,EAAC,OAAO,EAAE,MAAM,aACvC,KAAC,SAAS,KAAG,uBACN,EACT,KAAC,MAAM,IAAC,OAAO,EAAE,UAAU,sCAAgC,IAC1D,YAGJ,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAChC,eAAC,SAAS,OAAK,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,GAAI,CAClD,CAAC,GACK,CACV,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,WAAW,CAAC","sourcesContent":["import type { FunctionComponent } from 'preact';\nimport { Button } from '../Button/Button.js';\nimport { useCloudpack } from '../CloudpackProvider/CloudpackProvider.js';\nimport { PathError } from './PathError.js';\nimport type { UnsupportedErrorEvent } from './useErrorEvents.js';\nimport { Dialog } from '../Dialog/Dialog.js';\nimport { elementIds } from '../../constants.js';\nimport { Refresh20 } from '../icons/Refresh20.js';\n\nexport interface ErrorDialogProps {\n unsupported: UnsupportedErrorEvent[];\n}\n\nexport const ErrorDialog: FunctionComponent<ErrorDialogProps> = ({ unsupported }) => {\n const cloudpack = useCloudpack();\n\n const reload = () => void cloudpack.restartAllTasks.mutate();\n const editConfig = () => void cloudpack.openConfigEditor.mutate();\n\n return (\n <Dialog\n title=\"Cloudpack: Unsupported paths found in project\"\n id={elementIds.errorDialogRoot}\n style=\"error\"\n commands={\n <>\n <Button variant=\"primary\" onClick={reload}>\n <Refresh20 /> Retry bundling\n </Button>\n <Button onClick={editConfig}>Edit Cloudpack config</Button>\n </>\n }\n >\n {unsupported.map((data, index) => (\n <PathError {...data} index={index} key={index} />\n ))}\n </Dialog>\n );\n};\n\nexport default ErrorDialog;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ResultsAccordion.d.ts","sourceRoot":"","sources":["../../../src/components/ResultsAccordion/ResultsAccordion.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAUnE,MAAM,WAAW,qBAAqB;IACpC,wGAAwG;IACxG,IAAI,EAAE,iBAAiB,CAAC;IACxB,sDAAsD;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;IACxC,yEAAyE;IACzE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,0EAA0E;IAC1E,cAAc,CAAC,EAAE,iBAAiB,CAAC;IACnC;;;;;OAKG;IACH,UAAU,EAAE,MAAM,iBAAiB,CAAC;CACrC;AAED,MAAM,WAAW,4BAA4B;IAC3C,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6FAA6F;IAC7F,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B,sBAAsB;IACtB,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CAC9B;AAQD;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,iBAAiB,CAAC,qBAAqB,
|
|
1
|
+
{"version":3,"file":"ResultsAccordion.d.ts","sourceRoot":"","sources":["../../../src/components/ResultsAccordion/ResultsAccordion.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAUnE,MAAM,WAAW,qBAAqB;IACpC,wGAAwG;IACxG,IAAI,EAAE,iBAAiB,CAAC;IACxB,sDAAsD;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;IACxC,yEAAyE;IACzE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,0EAA0E;IAC1E,cAAc,CAAC,EAAE,iBAAiB,CAAC;IACnC;;;;;OAKG;IACH,UAAU,EAAE,MAAM,iBAAiB,CAAC;CACrC;AAED,MAAM,WAAW,4BAA4B;IAC3C,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6FAA6F;IAC7F,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B,sBAAsB;IACtB,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CAC9B;AAQD;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,iBAAiB,CAAC,qBAAqB,CAmCrE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,EAAE,iBAAiB,CAAC,4BAA4B,CAmBnF,CAAC"}
|
|
@@ -2,15 +2,15 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "preact/jsx-ru
|
|
|
2
2
|
import { useState } from 'preact/hooks';
|
|
3
3
|
import cx from 'classnames';
|
|
4
4
|
import styles from './ResultsAccordion.module.css';
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import
|
|
5
|
+
import { ChevronDown20 } from '../icons/ChevronDown20.js';
|
|
6
|
+
import { Error24 } from '../icons/Error24.js';
|
|
7
|
+
import { Warning24 } from '../icons/Warning24.js';
|
|
8
|
+
import { Success24 } from '../icons/Success24.js';
|
|
9
9
|
import { Button } from '../Button/Button.js';
|
|
10
10
|
const resultIcons = {
|
|
11
|
-
error: _jsx(
|
|
12
|
-
warning: _jsx(
|
|
13
|
-
success: _jsx(
|
|
11
|
+
error: _jsx(Error24, { title: "Error" }),
|
|
12
|
+
warning: _jsx(Warning24, { title: "Warning" }),
|
|
13
|
+
success: _jsx(Success24, { title: "Success" }),
|
|
14
14
|
};
|
|
15
15
|
/**
|
|
16
16
|
* Collapsible section for displaying results of a bundle task or other item.
|
|
@@ -24,9 +24,7 @@ export const ResultsAccordion = (props) => {
|
|
|
24
24
|
const contentId = `results-accordion-content-${index}`;
|
|
25
25
|
// Trying to follow the accordion pattern: https://www.w3.org/WAI/ARIA/apg/patterns/accordion/
|
|
26
26
|
// except the odd thing is we want to allow a separate click target for a refresh button at the end
|
|
27
|
-
return (_jsxs("div", { class: styles.root, children: [_jsxs("div", { class: cx(styles.header, styles[result], showContent && styles.expanded), children: [_jsx("h3", { class: styles.headerButtonWrapper, children: _jsxs(Button, { id: headerButtonId, class: styles.headerButton, variant: "custom", "aria-expanded": showContent, "aria-controls": contentId, onClick: () => setIsOpen(!showContent), children: [_jsx(
|
|
28
|
-
// With the wrapping button, the chevron is presentation-only
|
|
29
|
-
alt: "" }), resultIcons[result], _jsx("div", { class: styles.title, children: name }), headerEndContent && _jsx("div", { class: styles.headerEnd, children: headerEndContent })] }) }), headerCommands && _jsx("div", { class: styles.headerCommands, children: headerCommands })] }), _jsx("div", { id: contentId, class: showContent ? styles.content : styles.contentHidden, children: showContent && getContent() })] }));
|
|
27
|
+
return (_jsxs("div", { class: styles.root, children: [_jsxs("div", { class: cx(styles.header, styles[result], showContent && styles.expanded), children: [_jsx("h3", { class: styles.headerButtonWrapper, children: _jsxs(Button, { id: headerButtonId, class: styles.headerButton, variant: "custom", "aria-expanded": showContent, "aria-controls": contentId, onClick: () => setIsOpen(!showContent), children: [_jsx(ChevronDown20, { class: cx(styles.expandIcon, !showContent && styles.collapsed) }), resultIcons[result], _jsx("div", { class: styles.title, children: name }), headerEndContent && _jsx("div", { class: styles.headerEnd, children: headerEndContent })] }) }), headerCommands && _jsx("div", { class: styles.headerCommands, children: headerCommands })] }), _jsx("div", { id: contentId, class: showContent ? styles.content : styles.contentHidden, children: showContent && getContent() })] }));
|
|
30
28
|
};
|
|
31
29
|
/**
|
|
32
30
|
* Sub-section to return from `ResultsAccordionProps.getContent`.
|
|
@@ -38,6 +36,6 @@ export const ResultsAccordionContent = (props) => {
|
|
|
38
36
|
return null;
|
|
39
37
|
}
|
|
40
38
|
// Use a fragment so the sub-parts use the parent's flex styling
|
|
41
|
-
return (_jsxs(_Fragment, { children: [title && _jsx("h4", { class: styles.title, children: title }), itemName && itemValue ? (_jsxs("div", { children: [_jsx("div", { class: styles.itemName, children: itemName }), _jsx("div", {
|
|
39
|
+
return (_jsxs(_Fragment, { children: [title && _jsx("h4", { class: styles.title, children: title }), itemName && itemValue ? (_jsxs("div", { children: [_jsx("div", { class: styles.itemName, children: itemName }), _jsx("div", { children: itemValue })] })) : null, children] }));
|
|
42
40
|
};
|
|
43
41
|
//# sourceMappingURL=ResultsAccordion.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ResultsAccordion.js","sourceRoot":"","sources":["../../../src/components/ResultsAccordion/ResultsAccordion.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,MAAM,MAAM,+BAA+B,CAAC;AACnD,OAAO,
|
|
1
|
+
{"version":3,"file":"ResultsAccordion.js","sourceRoot":"","sources":["../../../src/components/ResultsAccordion/ResultsAccordion.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { ComponentChildren, FunctionComponent } from 'preact';\nimport { useState } from 'preact/hooks';\nimport cx from 'classnames';\nimport styles from './ResultsAccordion.module.css';\nimport { ChevronDown20 } from '../icons/ChevronDown20.js';\nimport { Error24 } from '../icons/Error24.js';\nimport { Warning24 } from '../icons/Warning24.js';\nimport { Success24 } from '../icons/Success24.js';\nimport { Button } from '../Button/Button.js';\n\nexport interface ResultsAccordionProps {\n /** Name of the bundle task or other item (can have formatting, but should not have a header element) */\n name: ComponentChildren;\n /** Index used for generating accordion element IDs */\n index: number;\n result: 'success' | 'warning' | 'error';\n /** Info that goes at the end of the header, inside the clickable area */\n headerEndContent?: string;\n /** Commands to go at the end of the header, outside the clickable area */\n headerCommands?: ComponentChildren;\n /**\n * Get the content, only if the section is expanded.\n * Use `CollapsibleResultsSubSection` for formatting (returning multiple sections if needed).\n *\n * This callback is to prevent rendering thousands of bundle result details unnecessarily.\n */\n getContent: () => ComponentChildren;\n}\n\nexport interface ResultsAccordionContentProps {\n /** Will be at start of sub-section and styled slightly larger if provided */\n title?: string;\n /** Item name, such as \"Input path\". Ignored if `itemValue` is not provided. */\n itemName?: string;\n /** Value corresponding to `itemName`, such as the path to a package. Requires `itemName`. */\n itemValue?: ComponentChildren;\n /** Custom children */\n children?: ComponentChildren;\n}\n\nconst resultIcons = {\n error: <Error24 title=\"Error\" />,\n warning: <Warning24 title=\"Warning\" />,\n success: <Success24 title=\"Success\" />,\n};\n\n/**\n * Collapsible section for displaying results of a bundle task or other item.\n * This handles the header formatting and layout, expanding/collapsing, and displaying content.\n */\nexport const ResultsAccordion: FunctionComponent<ResultsAccordionProps> = (props) => {\n const { name, result, headerEndContent, headerCommands, getContent, index } = props;\n const [isOpen, setIsOpen] = useState<boolean | undefined>(undefined);\n const showContent = isOpen === true || (isOpen === undefined && result === 'error');\n const headerButtonId = `results-accordion-button-${index}`;\n const contentId = `results-accordion-content-${index}`;\n\n // Trying to follow the accordion pattern: https://www.w3.org/WAI/ARIA/apg/patterns/accordion/\n // except the odd thing is we want to allow a separate click target for a refresh button at the end\n return (\n <div class={styles.root}>\n <div class={cx(styles.header, styles[result], showContent && styles.expanded)}>\n <h3 class={styles.headerButtonWrapper}>\n <Button\n id={headerButtonId}\n class={styles.headerButton}\n variant=\"custom\"\n aria-expanded={showContent}\n aria-controls={contentId}\n onClick={() => setIsOpen(!showContent)}\n >\n {/* With the wrapping button, the chevron is presentation-only */}\n <ChevronDown20 class={cx(styles.expandIcon, !showContent && styles.collapsed)} />\n {resultIcons[result]}\n <div class={styles.title}>{name}</div>\n {headerEndContent && <div class={styles.headerEnd}>{headerEndContent}</div>}\n </Button>\n </h3>\n {headerCommands && <div class={styles.headerCommands}>{headerCommands}</div>}\n </div>\n <div id={contentId} class={showContent ? styles.content : styles.contentHidden}>\n {showContent && getContent()}\n </div>\n </div>\n );\n};\n\n/**\n * Sub-section to return from `ResultsAccordionProps.getContent`.\n * If there are no children and no `itemValue`, the section will be ignored.\n */\nexport const ResultsAccordionContent: FunctionComponent<ResultsAccordionContentProps> = (props) => {\n const { title, itemName, itemValue, children } = props;\n if (!children && !(itemValue && itemName)) {\n return null;\n }\n\n // Use a fragment so the sub-parts use the parent's flex styling\n return (\n <>\n {title && <h4 class={styles.title}>{title}</h4>}\n {itemName && itemValue ? (\n <div>\n <div class={styles.itemName}>{itemName}</div>\n <div>{itemValue}</div>\n </div>\n ) : null}\n {children}\n </>\n );\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatusBadge.d.ts","sourceRoot":"","sources":["../../../src/components/StatusBadge/StatusBadge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAQhD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAGjF,MAAM,WAAW,gBAAgB;IAC/B,yCAAyC;IACzC,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,kBAAkB,EAAE,kBAAkB,CAAC;CACxC;
|
|
1
|
+
{"version":3,"file":"StatusBadge.d.ts","sourceRoot":"","sources":["../../../src/components/StatusBadge/StatusBadge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAQhD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAGjF,MAAM,WAAW,gBAAgB;IAC/B,yCAAyC;IACzC,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,kBAAkB,EAAE,kBAAkB,CAAC;CACxC;AAMD,eAAO,MAAM,WAAW,EAAE,iBAAiB,CAAC,gBAAgB,CAyE3D,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "preact/jsx-runtime";
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "preact/jsx-runtime";
|
|
2
2
|
import { useCallback, useRef, useState } from 'preact/hooks';
|
|
3
3
|
import { useDraggable } from '../../hooks/useDraggable.js';
|
|
4
4
|
import styles from './StatusBadge.module.css';
|
|
@@ -7,8 +7,6 @@ import { Button } from '../Button/Button.js';
|
|
|
7
7
|
import { useTaskStats } from '../CloudpackProvider/useTaskStats.js';
|
|
8
8
|
import { elementIds } from '../../constants.js';
|
|
9
9
|
const badgeStatusKey = 'cloudpack.badgeStatus';
|
|
10
|
-
const leftChevron = '\u00AB';
|
|
11
|
-
const rightChevron = '\u00BB';
|
|
12
10
|
const buttonHint = '(see details)';
|
|
13
11
|
const buttonHelp = 'Show bundle result details';
|
|
14
12
|
export const StatusBadge = ({ onOpenDialog, pageLoadTimeReport }) => {
|
|
@@ -40,7 +38,7 @@ export const StatusBadge = ({ onOpenDialog, pageLoadTimeReport }) => {
|
|
|
40
38
|
const buttonText = 'Cloudpack: ' + buttonStatusText;
|
|
41
39
|
const buttonAriaLabel = `${buttonText.replace(buttonHint, '')}. ${buttonHelp}`;
|
|
42
40
|
const collapseButtonText = isBadgeCollapsed ? 'Expand Cloudpack badge' : 'Collapse';
|
|
43
|
-
const badge = (_jsxs("div", { id: elementIds.statusBadgeRoot, ref: badgeRootRef, class: cx(styles.badge, isBadgeCollapsed &&
|
|
41
|
+
const badge = (_jsxs("div", { id: elementIds.statusBadgeRoot, ref: badgeRootRef, class: cx(styles.badge, statusClass), children: [!isBadgeCollapsed && (_jsxs(_Fragment, { children: [_jsxs("div", { ref: gripRef, class: styles.gripArea, "aria-hidden": true, children: [_jsx("div", { class: styles.grip }), _jsx("div", { class: styles.grip }), _jsx("div", { class: styles.grip })] }), _jsx(Button, { variant: "custom", class: styles.button, onClick: onOpenDialog, title: buttonHelp, "aria-label": buttonAriaLabel, children: _jsx("div", { class: styles.buttonText, children: buttonText }) }), _jsx("div", { children: statsText })] })), _jsx(Button, { variant: "iconOnly", class: cx(styles.chevron, isBadgeCollapsed && styles.collapsed), onClick: toggleBadgeCollapsed, title: collapseButtonText, "aria-label": collapseButtonText, children: "\u00BB" })] }));
|
|
44
42
|
return (_jsx("div", { class: styles.fixedOverlay, children: _jsx("div", { class: styles.contentSurface, children: badge }) }));
|
|
45
43
|
};
|
|
46
44
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatusBadge.js","sourceRoot":"","sources":["../../../src/components/StatusBadge/StatusBadge.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,MAAM,MAAM,0BAA0B,CAAC;AAC9C,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAUhD,MAAM,cAAc,GAAG,uBAAuB,CAAC;AAC/C,MAAM,
|
|
1
|
+
{"version":3,"file":"StatusBadge.js","sourceRoot":"","sources":["../../../src/components/StatusBadge/StatusBadge.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { FunctionComponent } from 'preact';\nimport { useCallback, useRef, useState } from 'preact/hooks';\nimport { useDraggable } from '../../hooks/useDraggable.js';\nimport styles from './StatusBadge.module.css';\nimport cx from 'classnames';\nimport { Button } from '../Button/Button.js';\nimport { useTaskStats } from '../CloudpackProvider/useTaskStats.js';\nimport { elementIds } from '../../constants.js';\nimport type { PageLoadTimeReport } from '../../hooks/usePageLoadTimeReporter.js';\nimport type { TaskStats } from '@ms-cloudpack/api-server/browser';\n\nexport interface StatusBadgeProps {\n /** Callback when the dialog is opened */\n onOpenDialog: () => void;\n pageLoadTimeReport: PageLoadTimeReport;\n}\n\nconst badgeStatusKey = 'cloudpack.badgeStatus';\nconst buttonHint = '(see details)';\nconst buttonHelp = 'Show bundle result details';\n\nexport const StatusBadge: FunctionComponent<StatusBadgeProps> = ({ onOpenDialog, pageLoadTimeReport }) => {\n const badgeRootRef = useRef<HTMLDivElement>(null);\n const gripRef = useRef<HTMLDivElement>(null);\n const stats = useTaskStats();\n const [isBadgeCollapsed, setIsBadgeCollapsed] = useState<boolean>(!!localStorage.getItem(badgeStatusKey));\n\n const shouldRender = stats.status !== 'unknown';\n\n const toggleBadgeCollapsed = useCallback(() => {\n setIsBadgeCollapsed((prev) => {\n const newCollapsedState = !prev;\n localStorage.setItem(badgeStatusKey, newCollapsedState ? 'collapsed' : '');\n return newCollapsedState;\n });\n }, []);\n\n useDraggable({\n // If we're not yet able to render, don't enable dragging yet.\n // Otherwise the event handlers won't be attached when the component renders.\n enabled: shouldRender,\n containerElementRef: badgeRootRef,\n dragElementRef: gripRef,\n });\n\n if (!shouldRender) {\n return null;\n }\n\n const { buttonStatusText, statusClass, statsText } = processStats(stats, pageLoadTimeReport);\n // WARNING: If you change this text, also update the `name` used to find the button in\n // apps/test-start-e2e/src/utilities/verifyOverlay.ts\n const buttonText = 'Cloudpack: ' + buttonStatusText;\n const buttonAriaLabel = `${buttonText.replace(buttonHint, '')}. ${buttonHelp}`;\n const collapseButtonText = isBadgeCollapsed ? 'Expand Cloudpack badge' : 'Collapse';\n\n const badge = (\n <div id={elementIds.statusBadgeRoot} ref={badgeRootRef} class={cx(styles.badge, statusClass)}>\n {!isBadgeCollapsed && (\n <>\n <div ref={gripRef} class={styles.gripArea} aria-hidden>\n <div class={styles.grip} />\n <div class={styles.grip} />\n <div class={styles.grip} />\n </div>\n <Button\n variant=\"custom\"\n class={styles.button}\n onClick={onOpenDialog}\n title={buttonHelp}\n aria-label={buttonAriaLabel}\n >\n <div class={styles.buttonText}>{buttonText}</div>\n </Button>\n <div>{statsText}</div>\n </>\n )}\n <Button\n variant=\"iconOnly\"\n class={cx(styles.chevron, isBadgeCollapsed && styles.collapsed)}\n onClick={toggleBadgeCollapsed}\n title={collapseButtonText}\n aria-label={collapseButtonText}\n >\n »\n </Button>\n </div>\n );\n\n return (\n <div class={styles.fixedOverlay}>\n <div class={styles.contentSurface}>{badge}</div>\n </div>\n );\n};\n\n/**\n * Based on the status, get the badge color, button text, and stats text.\n */\nfunction processStats(\n stats: TaskStats,\n pltReport: PageLoadTimeReport,\n): {\n /** class (color) for the badge root */\n statusClass: string | undefined;\n /** short status text for the button to open the overlay */\n buttonStatusText: string;\n /** stats to display after the button, like \"50% completed, 2 errors, 3 warnings in 500ms\" */\n statsText: string;\n} {\n const { status, totalTasks, remainingTasks, totalErrors, totalWarnings } = stats;\n\n let statusClass: string | undefined;\n let buttonStatusText: string;\n let statsText = '';\n\n if (status === 'idle' && totalTasks) {\n [statusClass, buttonStatusText] = totalErrors\n ? [styles.error, `errors ${buttonHint}`]\n : totalWarnings\n ? [styles.warning, `warnings ${buttonHint}`]\n : [styles.success, 'success'];\n } else {\n // no styling for this case\n buttonStatusText = status === 'pending' ? 'bundling...' : 'idle';\n }\n\n if (totalTasks) {\n // \"Number of tasks\" is likely not a meaningful metric for users (and doesn't strictly correspond to\n // number of packages), so just show either estimated percentage or \"completed\" plus any issue counts.\n const taskStats = [\n remainingTasks === 0\n ? 'completed'\n : `${(((totalTasks - remainingTasks) / totalTasks) * 100).toFixed(1)}% completed`,\n totalErrors && `${totalErrors} error${totalErrors > 1 ? 's' : ''}`,\n totalWarnings && `${totalWarnings} warning${totalWarnings > 1 ? 's' : ''}`,\n ]\n .filter(Boolean)\n .join(', ');\n\n const pltStat = pltReport.status === 'success' ? ` in ${Math.round(pltReport.pageLoadTime) ?? '??'}ms` : '';\n\n statsText = taskStats + pltStat;\n }\n\n return { statusClass, buttonStatusText, statsText };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatusDialog.d.ts","sourceRoot":"","sources":["../../../src/components/StatusDialog/StatusDialog.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"StatusDialog.d.ts","sourceRoot":"","sources":["../../../src/components/StatusDialog/StatusDialog.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAYhD,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,eAAO,MAAM,YAAY,EAAE,iBAAiB,CAAC,iBAAiB,CA0D7D,CAAC;AAEF,eAAe,YAAY,CAAC"}
|
|
@@ -1,11 +1,14 @@
|
|
|
1
|
-
import { jsx as _jsx,
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "preact/jsx-runtime";
|
|
2
|
+
import cx from 'classnames';
|
|
2
3
|
import { useCallback, useState } from 'preact/hooks';
|
|
3
4
|
import { TaskList } from './TaskList.js';
|
|
4
5
|
import { useCloudpack } from '../CloudpackProvider/CloudpackProvider.js';
|
|
5
6
|
import { Button } from '../Button/Button.js';
|
|
6
7
|
import { Dialog } from '../Dialog/Dialog.js';
|
|
7
|
-
import { Searchbox } from './Searchbox.js';
|
|
8
8
|
import { elementIds } from '../../constants.js';
|
|
9
|
+
import styles from './StatusDialog.module.css';
|
|
10
|
+
import inputStyles from '../Button/inputCommon.module.css';
|
|
11
|
+
import { Refresh20 } from '../icons/Refresh20.js';
|
|
9
12
|
export const StatusDialog = ({ onClose }) => {
|
|
10
13
|
const cloudpack = useCloudpack();
|
|
11
14
|
const [searchFilter, setSearchFilter] = useState('');
|
|
@@ -20,7 +23,10 @@ export const StatusDialog = ({ onClose }) => {
|
|
|
20
23
|
void cloudpack.restartAllTasks.mutate();
|
|
21
24
|
};
|
|
22
25
|
const toggleIssuesOnly = () => void setIssuesOnly((value) => !value);
|
|
23
|
-
return (_jsx(Dialog, { title: "Cloudpack bundle results", id: elementIds.statusDialogRoot, draggable: true,
|
|
26
|
+
return (_jsx(Dialog, { title: "Cloudpack bundle results", id: elementIds.statusDialogRoot, draggable: true,
|
|
27
|
+
// Prevent closing the dialog and disable all the controls while restarting, to hopefully
|
|
28
|
+
// avoid confusion (restarting currently involves clearing the whole cache and may take awhile).
|
|
29
|
+
onClose: isRestarting ? undefined : onClose, commands: _jsxs(_Fragment, { children: [_jsxs(Button, { variant: "primary", onClick: restartAllTasks, disabled: isRestarting, children: [_jsx(Refresh20, { class: cx(isRestarting && styles.spin) }), " Re-bundle all packages"] }), _jsx(Button, { onClick: toggleIssuesOnly, disabled: isRestarting, children: issuesOnly ? 'Show all packages' : 'Show packages with issues' }), _jsx("input", { type: "text", "aria-label": "Search", placeholder: "Search", value: searchFilter, onInput: handleSearchChange, class: cx(styles.searchbox, inputStyles.root, inputStyles.standard), disabled: isRestarting })] }), children: isRestarting ? ('Preparing to re-bundle (the page will refresh when ready)...') : (_jsx(TaskList, { searchFilter: searchFilter, issuesOnly: issuesOnly })) }));
|
|
24
30
|
};
|
|
25
31
|
export default StatusDialog;
|
|
26
32
|
//# sourceMappingURL=StatusDialog.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatusDialog.js","sourceRoot":"","sources":["../../../src/components/StatusDialog/StatusDialog.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"StatusDialog.js","sourceRoot":"","sources":["../../../src/components/StatusDialog/StatusDialog.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAG5B,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AACzE,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,MAAM,MAAM,2BAA2B,CAAC;AAC/C,OAAO,WAAW,MAAM,kCAAkC,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAMlD,MAAM,CAAC,MAAM,YAAY,GAAyC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;IAChF,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACrD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpD,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAExD,MAAM,kBAAkB,GAAG,WAAW,CAA8C,CAAC,KAAK,EAAE,EAAE;QAC5F,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,eAAe,CAAE,KAAK,CAAC,MAA2B,CAAC,KAAK,CAAC,CAAC;IAC5D,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,eAAe,GAAG,GAAG,EAAE;QAC3B,eAAe,CAAC,IAAI,CAAC,CAAC;QACtB,KAAK,SAAS,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC;IAC1C,CAAC,CAAC;IAEF,MAAM,gBAAgB,GAAG,GAAG,EAAE,CAAC,KAAK,aAAa,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;IAErE,OAAO,CACL,KAAC,MAAM,IACL,KAAK,EAAC,0BAA0B,EAChC,EAAE,EAAE,UAAU,CAAC,gBAAgB,EAC/B,SAAS;QACT,yFAAyF;QACzF,gGAAgG;QAChG,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,EAC3C,QAAQ,EACN,8BAKE,MAAC,MAAM,IAAC,OAAO,EAAC,SAAS,EAAC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,YAAY,aAExE,KAAC,SAAS,IAAC,KAAK,EAAE,EAAE,CAAC,YAAY,IAAI,MAAM,CAAC,IAAI,CAAC,GAAI,+BAC9C,EACT,KAAC,MAAM,IAAC,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,YAAY,YACtD,UAAU,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,2BAA2B,GACxD,EACT,gBACE,IAAI,EAAC,MAAM,gBACA,QAAQ,EACnB,WAAW,EAAC,QAAQ,EACpB,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,kBAAkB,EAC3B,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,QAAQ,CAAC,EACnE,QAAQ,EAAE,YAAY,GACtB,IACD,YAGJ,YAAY,CAAC,CAAC,CAAC,CACd,8DAA8D,CAC/D,CAAC,CAAC,CAAC,CACF,KAAC,QAAQ,IAAC,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,GAAI,CACjE,GACM,CACV,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,YAAY,CAAC","sourcesContent":["import cx from 'classnames';\nimport type { FunctionComponent } from 'preact';\nimport type { InputHTMLAttributes } from 'preact/compat';\nimport { useCallback, useState } from 'preact/hooks';\nimport { TaskList } from './TaskList.js';\nimport { useCloudpack } from '../CloudpackProvider/CloudpackProvider.js';\nimport { Button } from '../Button/Button.js';\nimport { Dialog } from '../Dialog/Dialog.js';\nimport { elementIds } from '../../constants.js';\nimport styles from './StatusDialog.module.css';\nimport inputStyles from '../Button/inputCommon.module.css';\nimport { Refresh20 } from '../icons/Refresh20.js';\n\nexport interface StatusDialogProps {\n onClose: () => void;\n}\n\nexport const StatusDialog: FunctionComponent<StatusDialogProps> = ({ onClose }) => {\n const cloudpack = useCloudpack();\n const [searchFilter, setSearchFilter] = useState('');\n const [issuesOnly, setIssuesOnly] = useState(false);\n const [isRestarting, setIsRestarting] = useState(false);\n\n const handleSearchChange = useCallback<NonNullable<InputHTMLAttributes['onInput']>>((event) => {\n event.preventDefault();\n setSearchFilter((event.target as HTMLInputElement).value);\n }, []);\n\n const restartAllTasks = () => {\n setIsRestarting(true);\n void cloudpack.restartAllTasks.mutate();\n };\n\n const toggleIssuesOnly = () => void setIssuesOnly((value) => !value);\n\n return (\n <Dialog\n title=\"Cloudpack bundle results\"\n id={elementIds.statusDialogRoot}\n draggable\n // Prevent closing the dialog and disable all the controls while restarting, to hopefully\n // avoid confusion (restarting currently involves clearing the whole cache and may take awhile).\n onClose={isRestarting ? undefined : onClose}\n commands={\n <>\n {/* Disable the button after it's clicked since the operation may take awhile, and the\n page will refresh when finished.\n TODO: ideally we'd have a spinner while restarting (this could probably be done by\n animating the refresh icon) */}\n <Button variant=\"primary\" onClick={restartAllTasks} disabled={isRestarting}>\n {/* the refresh icon spins while restarting to show something is happening */}\n <Refresh20 class={cx(isRestarting && styles.spin)} /> Re-bundle all packages\n </Button>\n <Button onClick={toggleIssuesOnly} disabled={isRestarting}>\n {issuesOnly ? 'Show all packages' : 'Show packages with issues'}\n </Button>\n <input\n type=\"text\"\n aria-label=\"Search\"\n placeholder=\"Search\"\n value={searchFilter}\n onInput={handleSearchChange}\n class={cx(styles.searchbox, inputStyles.root, inputStyles.standard)}\n disabled={isRestarting}\n />\n </>\n }\n >\n {isRestarting ? (\n 'Preparing to re-bundle (the page will refresh when ready)...'\n ) : (\n <TaskList searchFilter={searchFilter} issuesOnly={issuesOnly} />\n )}\n </Dialog>\n );\n};\n\nexport default StatusDialog;\n"]}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import type { FunctionComponent } from 'preact';
|
|
2
2
|
export interface TaskListProps {
|
|
3
|
-
searchFilter
|
|
4
|
-
issuesOnly
|
|
3
|
+
searchFilter: string;
|
|
4
|
+
issuesOnly: boolean;
|
|
5
5
|
}
|
|
6
|
+
/**
|
|
7
|
+
* List of task results to be displayed inside the StatusDialog.
|
|
8
|
+
*/
|
|
6
9
|
export declare const TaskList: FunctionComponent<TaskListProps>;
|
|
7
10
|
//# sourceMappingURL=TaskList.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TaskList.d.ts","sourceRoot":"","sources":["../../../src/components/StatusDialog/TaskList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"TaskList.d.ts","sourceRoot":"","sources":["../../../src/components/StatusDialog/TaskList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAKhD,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,eAAO,MAAM,QAAQ,EAAE,iBAAiB,CAAC,aAAa,CAoBrD,CAAC"}
|
|
@@ -1,18 +1,21 @@
|
|
|
1
|
-
import { jsx as _jsx } from "preact/jsx-runtime";
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment } from "preact/jsx-runtime";
|
|
2
2
|
import { TaskStatus } from './TaskStatus.js';
|
|
3
3
|
import { useTaskList } from '../CloudpackProvider/useTaskList.js';
|
|
4
|
-
|
|
4
|
+
/**
|
|
5
|
+
* List of task results to be displayed inside the StatusDialog.
|
|
6
|
+
*/
|
|
5
7
|
export const TaskList = ({ searchFilter, issuesOnly }) => {
|
|
6
8
|
const taskList = useTaskList();
|
|
7
9
|
let filteredTasks = [...taskList.tasks].sort(sortTasks);
|
|
8
10
|
if (searchFilter) {
|
|
9
11
|
searchFilter = searchFilter.toLowerCase();
|
|
10
|
-
filteredTasks = filteredTasks.filter(({ name }) =>
|
|
12
|
+
filteredTasks = filteredTasks.filter(({ name }) => name?.toLowerCase().includes(searchFilter));
|
|
11
13
|
}
|
|
12
14
|
if (issuesOnly) {
|
|
13
15
|
filteredTasks = filteredTasks.filter(({ errors, warnings }) => errors?.length || warnings?.length);
|
|
14
16
|
}
|
|
15
|
-
|
|
17
|
+
// These must be wrapped in a fragment for proper layout by the Dialog
|
|
18
|
+
return (_jsx(_Fragment, { children: filteredTasks.map((task, index) => (_jsx(TaskStatus, { index: index, task: task }, task.name))) }));
|
|
16
19
|
};
|
|
17
20
|
/**
|
|
18
21
|
* Really the server should be sorting. Get stuff out of the browser.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TaskList.js","sourceRoot":"","sources":["../../../src/components/StatusDialog/TaskList.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"TaskList.js","sourceRoot":"","sources":["../../../src/components/StatusDialog/TaskList.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAQlE;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAqC,CAAC,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,EAAE;IACzF,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAE/B,IAAI,aAAa,GAAG,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACxD,IAAI,YAAY,EAAE,CAAC;QACjB,YAAY,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;QAC1C,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;IACjG,CAAC;IACD,IAAI,UAAU,EAAE,CAAC;QACf,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,IAAI,QAAQ,EAAE,MAAM,CAAC,CAAC;IACrG,CAAC;IAED,sEAAsE;IACtE,OAAO,CACL,4BACG,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAClC,KAAC,UAAU,IAAiB,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,IAAnC,IAAI,CAAC,IAAI,CAA8B,CACzD,CAAC,GACD,CACJ,CAAC;AACJ,CAAC,CAAC;AAEF;;GAEG;AACH,SAAS,SAAS,CAAC,CAAkB,EAAE,CAAkB;IACvD,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE/C,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,OAAO,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC;IAEtC,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,OAAO,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC;IAED,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACjD,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;SAAM,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,CAAC,CAAC;IACX,CAAC;SAAM,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,CAAC,CAAC,CAAC;IACZ,CAAC;IAED,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC,CAAC","sourcesContent":["import type { FunctionComponent } from 'preact';\nimport { TaskStatus } from './TaskStatus.js';\nimport { useTaskList } from '../CloudpackProvider/useTaskList.js';\nimport type { TaskDescription } from '@ms-cloudpack/api-server/browser';\n\nexport interface TaskListProps {\n searchFilter: string;\n issuesOnly: boolean;\n}\n\n/**\n * List of task results to be displayed inside the StatusDialog.\n */\nexport const TaskList: FunctionComponent<TaskListProps> = ({ searchFilter, issuesOnly }) => {\n const taskList = useTaskList();\n\n let filteredTasks = [...taskList.tasks].sort(sortTasks);\n if (searchFilter) {\n searchFilter = searchFilter.toLowerCase();\n filteredTasks = filteredTasks.filter(({ name }) => name?.toLowerCase().includes(searchFilter));\n }\n if (issuesOnly) {\n filteredTasks = filteredTasks.filter(({ errors, warnings }) => errors?.length || warnings?.length);\n }\n\n // These must be wrapped in a fragment for proper layout by the Dialog\n return (\n <>\n {filteredTasks.map((task, index) => (\n <TaskStatus key={task.name} index={index} task={task} />\n ))}\n </>\n );\n};\n\n/**\n * Really the server should be sorting. Get stuff out of the browser.\n */\nfunction sortTasks(a: TaskDescription, b: TaskDescription): number {\n const aStatus = a.status === 'pending' ? 1 : 0;\n const bStatus = b.status === 'pending' ? 1 : 0;\n\n if (aStatus !== bStatus) {\n return aStatus > bStatus ? -1 : 1;\n }\n\n const aErrors = a.errors?.length || 0;\n const bErrors = b.errors?.length || 0;\n\n if (aErrors !== bErrors) {\n return aErrors > bErrors ? -1 : 1;\n }\n\n if (a.name === undefined && b.name === undefined) {\n return a.id < b.id ? -1 : 1;\n } else if (a.name === undefined) {\n return 1;\n } else if (b.name === undefined) {\n return -1;\n }\n\n return a.name < b.name ? -1 : 1;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TaskStatus.d.ts","sourceRoot":"","sources":["../../../src/components/StatusDialog/TaskStatus.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAIxE,OAAO,EAGL,KAAK,qBAAqB,EAC3B,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"TaskStatus.d.ts","sourceRoot":"","sources":["../../../src/components/StatusDialog/TaskStatus.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAIxE,OAAO,EAGL,KAAK,qBAAqB,EAC3B,MAAM,yCAAyC,CAAC;AAGjD,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAAC,qBAAqB,EAAE,OAAO,CAAC;IAC3E,IAAI,EAAE,eAAe,CAAC;CACvB;AAeD;;GAEG;AACH,eAAO,MAAM,UAAU,EAAE,iBAAiB,CAAC,eAAe,CA2FzD,CAAC"}
|
|
@@ -3,6 +3,7 @@ import { TaskResultItem } from './TaskResultItem.js';
|
|
|
3
3
|
import { useCloudpack } from '../CloudpackProvider/CloudpackProvider.js';
|
|
4
4
|
import { Button } from '../Button/Button.js';
|
|
5
5
|
import { ResultsAccordion, ResultsAccordionContent, } from '../ResultsAccordion/ResultsAccordion.js';
|
|
6
|
+
import { Refresh20 } from '../icons/Refresh20.js';
|
|
6
7
|
function getCompletion(task) {
|
|
7
8
|
if (task.status === 'pending') {
|
|
8
9
|
return 'Running';
|
|
@@ -39,6 +40,6 @@ export const TaskStatus = (props) => {
|
|
|
39
40
|
// This callback prevents rendering thousands of bundle result details unnecessarily.
|
|
40
41
|
// It could be further optimized with useMemo etc if it's an actual performance issue.
|
|
41
42
|
const getContent = () => (_jsxs(_Fragment, { children: [inputPath ? (_jsx(ResultsAccordionContent, { itemName: "Input path", itemValue: _jsxs(_Fragment, { children: [_jsx(Button, { variant: "link", onClick: () => openPath(inputPath), children: inputPath }), ' ', "(", _jsx(Button, { variant: "link", onClick: openPackageJson, children: "package.json" }), ")"] }) })) : ('No input path found for bundle task. This is a Cloudpack bug. Please report it.'), outputPath && (_jsx(ResultsAccordionContent, { itemName: "Output path", itemValue: _jsx(Button, { variant: "link", onClick: () => openPath(outputPath), children: outputPath }) })), errors.length > 0 && (_jsx(ResultsAccordionContent, { title: "Errors", children: errors.map((item, index) => (_jsx(TaskResultItem, { type: "error", item: item, inputPath: inputPath, index: index }, index))) })), warnings.length > 0 && (_jsx(ResultsAccordionContent, { title: "Warnings", children: warnings.map((item, index) => (_jsx(TaskResultItem, { type: "warning", item: item, inputPath: inputPath, index: index }, index))) }))] }));
|
|
42
|
-
return (_jsx(ResultsAccordion, { name: name || '<unknown>', index: props.index, result: errors.length ? 'error' : warnings.length ? 'warning' : 'success', headerEndContent: getCompletion(task), headerCommands: _jsx(Button, { variant: "iconOnly",
|
|
43
|
+
return (_jsx(ResultsAccordion, { name: name || '<unknown>', index: props.index, result: errors.length ? 'error' : warnings.length ? 'warning' : 'success', headerEndContent: getCompletion(task), headerCommands: _jsx(Button, { variant: "iconOnly", onClick: restartTask, title: "Re-bundle this package", "aria-label": "Re-bundle this package", children: _jsx(Refresh20, {}) }), getContent: getContent }));
|
|
43
44
|
};
|
|
44
45
|
//# sourceMappingURL=TaskStatus.js.map
|