box-ui-elements 23.3.0-beta.7 → 23.3.0
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/explorer.css +1 -1
- package/dist/explorer.js +1 -1
- package/dist/openwith.js +1 -1
- package/dist/picker.css +1 -1
- package/dist/picker.js +1 -1
- package/dist/preview.css +1 -1
- package/dist/preview.js +1 -1
- package/dist/sidebar.css +1 -1
- package/dist/sidebar.js +1 -1
- package/dist/uploader.css +1 -1
- package/dist/uploader.js +1 -1
- package/es/components/flyout/Flyout.js +3 -2
- package/es/components/flyout/Flyout.js.flow +3 -2
- package/es/components/flyout/Flyout.js.map +1 -1
- package/es/elements/content-explorer/stories/tests/MetadataView-visual.stories.js +2 -1
- package/es/elements/content-explorer/stories/tests/MetadataView-visual.stories.js.map +1 -1
- package/es/elements/content-sidebar/MetadataInstanceEditor.js.map +1 -1
- package/es/elements/content-sidebar/SidebarNav.js +2 -0
- package/es/elements/content-sidebar/SidebarNav.js.flow +2 -0
- package/es/elements/content-sidebar/SidebarNav.js.map +1 -1
- package/es/elements/content-sidebar/stories/MetadataSidebarRedesign.stories.js +2 -1
- package/es/elements/content-sidebar/stories/MetadataSidebarRedesign.stories.js.map +1 -1
- package/es/elements/content-sidebar/stories/tests/BoxAISidebar-visual.stories.js +2 -1
- package/es/elements/content-sidebar/stories/tests/BoxAISidebar-visual.stories.js.map +1 -1
- package/es/elements/content-sidebar/stories/tests/ContentSidebar-e2e.stories.js +2 -1
- package/es/elements/content-sidebar/stories/tests/ContentSidebar-e2e.stories.js.map +1 -1
- package/es/elements/content-sidebar/stories/tests/MetadataSidebarRedesign-visual.stories.js +2 -1
- package/es/elements/content-sidebar/stories/tests/MetadataSidebarRedesign-visual.stories.js.map +1 -1
- package/es/elements/content-uploader/IconInProgress.js +3 -2
- package/es/elements/content-uploader/IconInProgress.js.map +1 -1
- package/es/elements/content-uploader/ItemAction.js +4 -4
- package/es/elements/content-uploader/ItemAction.js.map +1 -1
- package/es/features/metadata-instance-editor/CascadePolicy.js +1 -0
- package/es/features/metadata-instance-editor/CascadePolicy.js.flow +1 -0
- package/es/features/metadata-instance-editor/CascadePolicy.js.map +1 -1
- package/es/icons/file-icon/FileIcon.js.map +1 -1
- package/es/src/elements/content-explorer/stories/tests/MetadataView-visual.stories.d.ts +7 -58
- package/es/src/elements/content-sidebar/MetadataInstanceEditor.d.ts +1 -1
- package/es/src/elements/content-sidebar/stories/MetadataSidebarRedesign.stories.d.ts +6 -22
- package/es/src/elements/content-sidebar/stories/__mocks__/TaxonomyMocks.d.ts +2 -1
- package/es/src/elements/content-sidebar/stories/tests/BoxAISidebar-visual.stories.d.ts +6 -50
- package/es/src/elements/content-sidebar/stories/tests/ContentSidebar-e2e.stories.d.ts +6 -21
- package/es/src/elements/content-sidebar/stories/tests/MetadataSidebarRedesign-visual.stories.d.ts +6 -25
- package/es/src/elements/content-uploader/IconInProgress.d.ts +2 -2
- package/package.json +5 -5
- package/src/components/flyout/Flyout.js +3 -2
- package/src/components/flyout/__tests__/Flyout.test.js +31 -20
- package/src/elements/content-explorer/stories/tests/MetadataView-visual.stories.tsx +8 -3
- package/src/elements/content-sidebar/MetadataInstanceEditor.tsx +1 -1
- package/src/elements/content-sidebar/SidebarNav.js +2 -0
- package/src/elements/content-sidebar/additional-tabs/__tests__/__snapshots__/AdditionalTab.test.js.snap +1 -1
- package/src/elements/content-sidebar/stories/MetadataSidebarRedesign.stories.tsx +5 -2
- package/src/elements/content-sidebar/stories/__mocks__/TaxonomyMocks.ts +2 -1
- package/src/elements/content-sidebar/stories/tests/BoxAISidebar-visual.stories.tsx +5 -2
- package/src/elements/content-sidebar/stories/tests/ContentSidebar-e2e.stories.tsx +5 -1
- package/src/elements/content-sidebar/stories/tests/MetadataSidebarRedesign-visual.stories.tsx +5 -2
- package/src/elements/content-uploader/IconInProgress.tsx +13 -9
- package/src/elements/content-uploader/ItemAction.tsx +9 -6
- package/src/features/metadata-instance-editor/CascadePolicy.js +1 -0
- package/src/icons/file-icon/FileIcon.tsx +4 -1
|
@@ -154,8 +154,9 @@ class Flyout extends React.Component {
|
|
|
154
154
|
}, openOnHoverDelayTimeout);
|
|
155
155
|
}
|
|
156
156
|
});
|
|
157
|
-
_defineProperty(this, "handleKeyPress",
|
|
158
|
-
if (KEYS.enter) {
|
|
157
|
+
_defineProperty(this, "handleKeyPress", event => {
|
|
158
|
+
if (event.key === KEYS.enter) {
|
|
159
|
+
event.preventDefault();
|
|
159
160
|
this.openOverlay();
|
|
160
161
|
this.focusButton();
|
|
161
162
|
}
|
|
@@ -305,8 +305,9 @@ class Flyout extends React.Component<Props, State> {
|
|
|
305
305
|
}
|
|
306
306
|
};
|
|
307
307
|
|
|
308
|
-
handleKeyPress = () => {
|
|
309
|
-
if (KEYS.enter) {
|
|
308
|
+
handleKeyPress = (event: SyntheticKeyboardEvent<>) => {
|
|
309
|
+
if (event.key === KEYS.enter) {
|
|
310
|
+
event.preventDefault();
|
|
310
311
|
this.openOverlay();
|
|
311
312
|
this.focusButton();
|
|
312
313
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Flyout.js","names":["React","classNames","TetherComponent","uniqueId","KEYS","FlyoutContext","BOTTOM_CENTER","BOTTOM_LEFT","BOTTOM_RIGHT","MIDDLE_LEFT","MIDDLE_RIGHT","TOP_CENTER","TOP_LEFT","TOP_RIGHT","positions","attachment","targetAttachment","OVERLAY_ROLE","hasClickableAncestor","rootNode","targetNode","currentNode","Node","parentNode","nodeName","toUpperCase","hasClassAncestor","targetEl","className","el","HTMLElement","classList","contains","Flyout","Component","constructor","props","_defineProperty","event","overlayNode","document","getElementById","overlayID","closeOnClick","closeOnClickPredicate","target","handleOverlayClose","isVisible","state","closeOverlay","openOverlay","isButtonClicked","isTrusted","setState","preventDefault","openOnHover","openOnHoverDelayTimeout","clearTimeout","hoverDelay","setTimeout","enter","focusButton","onOpen","onClose","buttonEl","overlayButtonID","focus","portaledClasses","closeOnClickOutside","closeOnWindowBlur","buttonNode","isInsideToggleButton","isInsideOverlay","isInside","some","isVisibleByDefault","componentDidUpdate","prevProps","prevState","addEventListener","handleDocumentClickOrWindowBlur","window","removeEventListener","componentWillUnmount","render","children","constrainToScrollParent","constrainToWindow","constrainToWindowWithPin","isResponsive","offset","position","shouldDefaultFocus","elements","Children","toArray","tetherPosition","length","Error","overlayButton","overlayContent","overlayButtonProps","id","key","onClick","handleButtonClick","onKeyPress","handleKeyPress","onMouseEnter","handleButtonHover","onMouseLeave","handleButtonHoverLeave","role","tabIndex","overlayProps","handleOverlayClick","constraints","push","to","pin","tetherProps","classPrefix","enabled","classes","element","createElement","cloneElement","Provider","value"],"sources":["../../../src/components/flyout/Flyout.js"],"sourcesContent":["// @flow\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport TetherComponent from 'react-tether';\nimport uniqueId from 'lodash/uniqueId';\nimport { KEYS } from '../../constants';\n\nimport FlyoutContext from './FlyoutContext';\n\nimport './Flyout.scss';\n\nconst BOTTOM_CENTER = 'bottom-center';\nconst BOTTOM_LEFT = 'bottom-left';\nconst BOTTOM_RIGHT = 'bottom-right';\nconst MIDDLE_LEFT = 'middle-left';\nconst MIDDLE_RIGHT = 'middle-right';\nconst TOP_CENTER = 'top-center';\nconst TOP_LEFT = 'top-left';\nconst TOP_RIGHT = 'top-right';\n\nconst positions = {\n [BOTTOM_CENTER]: {\n attachment: 'top center',\n targetAttachment: 'bottom center',\n },\n [BOTTOM_LEFT]: {\n attachment: 'top right',\n targetAttachment: 'bottom right',\n },\n [BOTTOM_RIGHT]: {\n attachment: 'top left',\n targetAttachment: 'bottom left',\n },\n [MIDDLE_LEFT]: {\n attachment: 'middle right',\n targetAttachment: 'middle left',\n },\n [MIDDLE_RIGHT]: {\n attachment: 'middle left',\n targetAttachment: 'middle right',\n },\n [TOP_CENTER]: {\n attachment: 'bottom center',\n targetAttachment: 'top center',\n },\n [TOP_LEFT]: {\n attachment: 'bottom right',\n targetAttachment: 'top right',\n },\n [TOP_RIGHT]: {\n attachment: 'bottom left',\n targetAttachment: 'top left',\n },\n};\n\nconst OVERLAY_ROLE = 'dialog';\n\n/**\n * Checks if there is a clickable ancestor or self\n * @param {Node} rootNode The base node we should stop at\n * @param {Node} targetNode The target node of the event\n * @returns {boolean}\n */\nconst hasClickableAncestor = (rootNode, targetNode) => {\n // Check if the element or any of the ancestors are click-able (stopping at the component boundary)\n let currentNode = targetNode;\n while (currentNode && currentNode instanceof Node && currentNode.parentNode && currentNode !== rootNode) {\n const nodeName = currentNode.nodeName.toUpperCase();\n if (nodeName === 'A' || nodeName === 'BUTTON') {\n return true;\n }\n currentNode = currentNode.parentNode;\n }\n return false;\n};\n\n/**\n * Checks if the target element is inside an element with the given CSS class.\n * @param {HTMLElement} targetEl The target element\n * @param {string} className A CSS class on the element to check for\n */\nconst hasClassAncestor = (targetEl, className) => {\n let el = targetEl;\n while (el && el instanceof HTMLElement) {\n if (el.classList.contains(className)) {\n return true;\n }\n el = el.parentNode;\n }\n return false;\n};\n\nexport type FlyoutProps = {\n children: React.Node,\n /**\n * Set className to the overlay wrapper\n */\n className?: string,\n /**\n * If set to true, closes the overlay on clicking buttons/links inside\n * of it\n */\n closeOnClick?: boolean,\n /**\n * If set to true, closes the overlay on clicking outside of it\n */\n closeOnClickOutside?: boolean,\n /**\n * Function that will interrogate the click event to determine whether or not to close the overlay if closeOnClick is enabled\n */\n closeOnClickPredicate?: Function,\n /**\n * If set to true, closes the overlay when window loses focus\n */\n closeOnWindowBlur?: boolean,\n /**\n * Sets tether constrain to scrollParent\n */\n constrainToScrollParent?: boolean,\n /**\n * Sets tether constrain to window\n */\n constrainToWindow?: boolean,\n /**\n * Sets tether constrain to window with pin\n */\n constrainToWindowWithPin?: boolean,\n /**\n * Toggles responsive behavior\n */\n isResponsive?: boolean,\n /**\n * Whether overlay should be visible by default\n */\n isVisibleByDefault: boolean,\n /**\n * Will fire this callback when the flyout should open\n */\n offset?: string,\n /**\n * Will fire this callback when the flyout should close\n */\n onClose?: Function,\n /**\n * Adjusts placement of the overlay (SEE http://tether.io/#options)\n */\n onOpen?: Function,\n /**\n * Whether overlay should open on hover\n */\n openOnHover?: boolean,\n /**\n * Time in milliseconds that the button should wait before opening and closing the flyout\n */\n openOnHoverDelayTimeout?: number,\n /** An array of CSS classes for portaled elements in the overlay, used to check whether a click is inside the overlay */\n portaledClasses: Array<string>,\n /**\n * Position of the overlay\n */\n position:\n | 'bottom-center'\n | 'bottom-left'\n | 'bottom-right'\n | 'middle-left'\n | 'middle-right'\n | 'top-center'\n | 'top-left'\n | 'top-right',\n /**\n * Prop whether to focus first focusable element or not\n */\n shouldDefaultFocus?: boolean,\n};\n\ntype State = {\n isButtonClicked: boolean,\n isVisible: boolean,\n};\n\ntype Props = FlyoutProps;\n\nclass Flyout extends React.Component<Props, State> {\n static defaultProps = {\n className: '',\n closeOnClick: true,\n closeOnClickOutside: true,\n closeOnWindowBlur: false,\n constrainToScrollParent: true,\n constrainToWindow: false,\n isResponsive: false,\n isVisibleByDefault: false,\n openOnHover: false,\n openOnHoverDelayTimeout: 300,\n portaledClasses: [],\n position: BOTTOM_RIGHT,\n };\n\n constructor(props: Props) {\n super(props);\n\n this.overlayID = uniqueId('overlay');\n this.overlayButtonID = uniqueId('flyoutbutton');\n this.state = {\n isVisible: props.isVisibleByDefault,\n isButtonClicked: false,\n };\n }\n\n componentDidUpdate(prevProps: Props, prevState: State) {\n if (!prevState.isVisible && this.state.isVisible) {\n const { closeOnClickOutside, closeOnWindowBlur } = this.props;\n // When overlay is being opened\n if (closeOnClickOutside) {\n document.addEventListener('click', this.handleDocumentClickOrWindowBlur, true);\n document.addEventListener('contextmenu', this.handleDocumentClickOrWindowBlur, true);\n }\n if (closeOnWindowBlur) {\n window.addEventListener('blur', this.handleDocumentClickOrWindowBlur, true);\n }\n } else if (prevState.isVisible && !this.state.isVisible) {\n // When overlay is being closed\n document.removeEventListener('contextmenu', this.handleDocumentClickOrWindowBlur, true);\n document.removeEventListener('click', this.handleDocumentClickOrWindowBlur, true);\n window.removeEventListener('blur', this.handleDocumentClickOrWindowBlur, true);\n }\n }\n\n componentWillUnmount() {\n if (this.state.isVisible) {\n // Clean-up global click handlers\n document.removeEventListener('contextmenu', this.handleDocumentClickOrWindowBlur, true);\n document.removeEventListener('click', this.handleDocumentClickOrWindowBlur, true);\n window.removeEventListener('blur', this.handleDocumentClickOrWindowBlur, true);\n }\n\n if (this.props.openOnHover && this.hoverDelay) {\n clearTimeout(this.hoverDelay);\n }\n }\n\n overlayButtonID: string;\n\n overlayID: string;\n\n handleOverlayClick = (event: SyntheticEvent<>) => {\n const overlayNode = document.getElementById(this.overlayID);\n const { closeOnClick, closeOnClickPredicate } = this.props;\n if (!closeOnClick || !hasClickableAncestor(overlayNode, event.target)) {\n return;\n }\n if (closeOnClickPredicate && !closeOnClickPredicate(event)) {\n return;\n }\n\n this.handleOverlayClose();\n };\n\n handleButtonClick = (event: SyntheticUIEvent<>) => {\n const { isVisible } = this.state;\n if (isVisible) {\n this.closeOverlay();\n } else {\n this.openOverlay();\n }\n\n // In at least one place, .click() is called programmatically\n // src/features/presence/Presence.js\n // In the programmatic case, the event is not supposed to trigger\n // autofocus of the content (TBD if this is truly correct behavior).\n // This line was using \"event.detail > 0\"\n // to detect if a click event was from a user, but that made keyboard\n // triggers of the button click behave differently than the mouse.\n // So, we use \"isTrusted\" instead. Note: React polyfills for IE11.\n // https://developer.mozilla.org/en-US/docs/Web/API/Event/isTrusted\n // https://reactjs.org/docs/events.html\n\n const isButtonClicked = event.isTrusted;\n\n this.setState({ isButtonClicked });\n\n event.preventDefault();\n };\n\n hoverDelay: TimeoutID | void;\n\n handleButtonHover = () => {\n const { openOnHover, openOnHoverDelayTimeout } = this.props;\n if (openOnHover) {\n clearTimeout(this.hoverDelay);\n this.hoverDelay = setTimeout(() => {\n this.openOverlay();\n }, openOnHoverDelayTimeout);\n }\n };\n\n handleButtonHoverLeave = () => {\n const { openOnHover, openOnHoverDelayTimeout } = this.props;\n if (openOnHover) {\n clearTimeout(this.hoverDelay);\n\n this.hoverDelay = setTimeout(() => {\n this.closeOverlay();\n }, openOnHoverDelayTimeout);\n }\n };\n\n handleKeyPress = () => {\n if (KEYS.enter) {\n this.openOverlay();\n this.focusButton();\n }\n };\n\n openOverlay = () => {\n this.setState({\n isVisible: true,\n });\n\n const { onOpen } = this.props;\n if (onOpen) {\n onOpen();\n }\n };\n\n closeOverlay = () => {\n this.setState({\n isVisible: false,\n });\n\n const { onClose } = this.props;\n if (onClose) {\n onClose();\n }\n };\n\n focusButton = () => {\n const buttonEl = document.getElementById(this.overlayButtonID);\n if (buttonEl) {\n buttonEl.focus();\n }\n };\n\n handleOverlayClose = () => {\n this.focusButton();\n this.closeOverlay();\n };\n\n handleDocumentClickOrWindowBlur = (event: MouseEvent | FocusEvent) => {\n const { portaledClasses, closeOnClickOutside, closeOnWindowBlur } = this.props;\n const { isVisible } = this.state;\n\n if (!isVisible || !(closeOnClickOutside || closeOnWindowBlur)) {\n return;\n }\n\n const overlayNode = document.getElementById(this.overlayID);\n const buttonNode = document.getElementById(this.overlayButtonID);\n\n const isInsideToggleButton =\n (buttonNode && event.target instanceof Node && buttonNode.contains(event.target)) ||\n buttonNode === event.target;\n const isInsideOverlay =\n (overlayNode && event.target instanceof Node && overlayNode.contains(event.target)) ||\n overlayNode === event.target;\n const isInside = isInsideToggleButton || isInsideOverlay;\n\n if (isInside || portaledClasses.some(className => hasClassAncestor(event.target, className))) {\n return;\n }\n\n // Only close overlay when the click is outside of the flyout or window loses focus\n this.closeOverlay();\n };\n\n render() {\n const {\n children,\n className = '',\n constrainToScrollParent,\n constrainToWindow,\n constrainToWindowWithPin,\n isResponsive,\n offset,\n openOnHover,\n position,\n shouldDefaultFocus,\n } = this.props;\n const { isButtonClicked, isVisible } = this.state;\n const elements = React.Children.toArray(children);\n const tetherPosition = positions[position];\n\n if (elements.length !== 2) {\n throw new Error('Flyout must have exactly two children: A button component and a <Overlay>');\n }\n\n const overlayButton = elements[0];\n const overlayContent = elements[1];\n\n const overlayButtonProps: Object = {\n id: this.overlayButtonID,\n key: this.overlayButtonID,\n onClick: this.handleButtonClick,\n onKeyPress: this.handleKeyPress,\n onMouseEnter: this.handleButtonHover,\n onMouseLeave: this.handleButtonHoverLeave,\n role: 'button',\n tabIndex: '0',\n 'aria-haspopup': OVERLAY_ROLE,\n 'aria-expanded': isVisible ? 'true' : 'false',\n };\n\n if (isVisible) {\n overlayButtonProps['aria-controls'] = this.overlayID;\n }\n\n const overlayProps = {\n id: this.overlayID,\n key: this.overlayID,\n role: OVERLAY_ROLE,\n onClick: this.handleOverlayClick,\n onClose: this.handleOverlayClose,\n onMouseEnter: this.handleButtonHover,\n onMouseLeave: this.handleButtonHoverLeave,\n shouldDefaultFocus: shouldDefaultFocus || (!isButtonClicked && !openOnHover),\n 'aria-labelledby': this.overlayButtonID,\n };\n\n const constraints = [];\n\n if (constrainToScrollParent) {\n constraints.push({\n to: 'scrollParent',\n attachment: 'together',\n });\n }\n\n if (constrainToWindow) {\n constraints.push({\n to: 'window',\n attachment: 'together',\n });\n }\n\n if (constrainToWindowWithPin) {\n constraints.push({\n to: 'window',\n attachment: 'together',\n pin: true,\n });\n }\n\n const tetherProps: Object = {\n classPrefix: 'flyout-overlay',\n attachment: tetherPosition.attachment,\n targetAttachment: tetherPosition.targetAttachment,\n enabled: isVisible,\n classes: {\n element: classNames('flyout-overlay', { 'bdl-Flyout--responsive': isResponsive }, className),\n },\n constraints,\n };\n\n if (offset) {\n tetherProps.offset = offset;\n } else {\n switch (position) {\n case BOTTOM_CENTER:\n case BOTTOM_LEFT:\n case BOTTOM_RIGHT:\n tetherProps.offset = '-10px 0';\n break;\n case TOP_CENTER:\n case TOP_LEFT:\n case TOP_RIGHT:\n tetherProps.offset = '10px 0';\n break;\n case MIDDLE_LEFT:\n tetherProps.offset = '0 10px';\n break;\n case MIDDLE_RIGHT:\n tetherProps.offset = '0 -10px';\n break;\n default:\n // no default\n }\n }\n\n return (\n <TetherComponent {...tetherProps}>\n {React.cloneElement(overlayButton, overlayButtonProps)}\n {isVisible && (\n <FlyoutContext.Provider value={{ closeOverlay: this.closeOverlay }}>\n {React.cloneElement(overlayContent, overlayProps)}\n </FlyoutContext.Provider>\n )}\n </TetherComponent>\n );\n }\n}\n\nexport default Flyout;\n"],"mappings":";;;AACA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,OAAOC,UAAU,MAAM,YAAY;AACnC,OAAOC,eAAe,MAAM,cAAc;AAC1C,OAAOC,QAAQ,MAAM,iBAAiB;AACtC,SAASC,IAAI,QAAQ,iBAAiB;AAEtC,OAAOC,aAAa,MAAM,iBAAiB;AAE3C,OAAO,eAAe;AAEtB,MAAMC,aAAa,GAAG,eAAe;AACrC,MAAMC,WAAW,GAAG,aAAa;AACjC,MAAMC,YAAY,GAAG,cAAc;AACnC,MAAMC,WAAW,GAAG,aAAa;AACjC,MAAMC,YAAY,GAAG,cAAc;AACnC,MAAMC,UAAU,GAAG,YAAY;AAC/B,MAAMC,QAAQ,GAAG,UAAU;AAC3B,MAAMC,SAAS,GAAG,WAAW;AAE7B,MAAMC,SAAS,GAAG;EACd,CAACR,aAAa,GAAG;IACbS,UAAU,EAAE,YAAY;IACxBC,gBAAgB,EAAE;EACtB,CAAC;EACD,CAACT,WAAW,GAAG;IACXQ,UAAU,EAAE,WAAW;IACvBC,gBAAgB,EAAE;EACtB,CAAC;EACD,CAACR,YAAY,GAAG;IACZO,UAAU,EAAE,UAAU;IACtBC,gBAAgB,EAAE;EACtB,CAAC;EACD,CAACP,WAAW,GAAG;IACXM,UAAU,EAAE,cAAc;IAC1BC,gBAAgB,EAAE;EACtB,CAAC;EACD,CAACN,YAAY,GAAG;IACZK,UAAU,EAAE,aAAa;IACzBC,gBAAgB,EAAE;EACtB,CAAC;EACD,CAACL,UAAU,GAAG;IACVI,UAAU,EAAE,eAAe;IAC3BC,gBAAgB,EAAE;EACtB,CAAC;EACD,CAACJ,QAAQ,GAAG;IACRG,UAAU,EAAE,cAAc;IAC1BC,gBAAgB,EAAE;EACtB,CAAC;EACD,CAACH,SAAS,GAAG;IACTE,UAAU,EAAE,aAAa;IACzBC,gBAAgB,EAAE;EACtB;AACJ,CAAC;AAED,MAAMC,YAAY,GAAG,QAAQ;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,oBAAoB,GAAGA,CAACC,QAAQ,EAAEC,UAAU,KAAK;EACnD;EACA,IAAIC,WAAW,GAAGD,UAAU;EAC5B,OAAOC,WAAW,IAAIA,WAAW,YAAYC,IAAI,IAAID,WAAW,CAACE,UAAU,IAAIF,WAAW,KAAKF,QAAQ,EAAE;IACrG,MAAMK,QAAQ,GAAGH,WAAW,CAACG,QAAQ,CAACC,WAAW,CAAC,CAAC;IACnD,IAAID,QAAQ,KAAK,GAAG,IAAIA,QAAQ,KAAK,QAAQ,EAAE;MAC3C,OAAO,IAAI;IACf;IACAH,WAAW,GAAGA,WAAW,CAACE,UAAU;EACxC;EACA,OAAO,KAAK;AAChB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,MAAMG,gBAAgB,GAAGA,CAACC,QAAQ,EAAEC,SAAS,KAAK;EAC9C,IAAIC,EAAE,GAAGF,QAAQ;EACjB,OAAOE,EAAE,IAAIA,EAAE,YAAYC,WAAW,EAAE;IACpC,IAAID,EAAE,CAACE,SAAS,CAACC,QAAQ,CAACJ,SAAS,CAAC,EAAE;MAClC,OAAO,IAAI;IACf;IACAC,EAAE,GAAGA,EAAE,CAACN,UAAU;EACtB;EACA,OAAO,KAAK;AAChB,CAAC;AA4FD,MAAMU,MAAM,SAASjC,KAAK,CAACkC,SAAS,CAAe;EAgB/CC,WAAWA,CAACC,KAAY,EAAE;IACtB,KAAK,CAACA,KAAK,CAAC;IAACC,eAAA,6BA8CKC,KAAuB,IAAK;MAC9C,MAAMC,WAAW,GAAGC,QAAQ,CAACC,cAAc,CAAC,IAAI,CAACC,SAAS,CAAC;MAC3D,MAAM;QAAEC,YAAY;QAAEC;MAAsB,CAAC,GAAG,IAAI,CAACR,KAAK;MAC1D,IAAI,CAACO,YAAY,IAAI,CAACzB,oBAAoB,CAACqB,WAAW,EAAED,KAAK,CAACO,MAAM,CAAC,EAAE;QACnE;MACJ;MACA,IAAID,qBAAqB,IAAI,CAACA,qBAAqB,CAACN,KAAK,CAAC,EAAE;QACxD;MACJ;MAEA,IAAI,CAACQ,kBAAkB,CAAC,CAAC;IAC7B,CAAC;IAAAT,eAAA,4BAEoBC,KAAyB,IAAK;MAC/C,MAAM;QAAES;MAAU,CAAC,GAAG,IAAI,CAACC,KAAK;MAChC,IAAID,SAAS,EAAE;QACX,IAAI,CAACE,YAAY,CAAC,CAAC;MACvB,CAAC,MAAM;QACH,IAAI,CAACC,WAAW,CAAC,CAAC;MACtB;;MAEA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;;MAEA,MAAMC,eAAe,GAAGb,KAAK,CAACc,SAAS;MAEvC,IAAI,CAACC,QAAQ,CAAC;QAAEF;MAAgB,CAAC,CAAC;MAElCb,KAAK,CAACgB,cAAc,CAAC,CAAC;IAC1B,CAAC;IAAAjB,eAAA,4BAImB,MAAM;MACtB,MAAM;QAAEkB,WAAW;QAAEC;MAAwB,CAAC,GAAG,IAAI,CAACpB,KAAK;MAC3D,IAAImB,WAAW,EAAE;QACbE,YAAY,CAAC,IAAI,CAACC,UAAU,CAAC;QAC7B,IAAI,CAACA,UAAU,GAAGC,UAAU,CAAC,MAAM;UAC/B,IAAI,CAACT,WAAW,CAAC,CAAC;QACtB,CAAC,EAAEM,uBAAuB,CAAC;MAC/B;IACJ,CAAC;IAAAnB,eAAA,iCAEwB,MAAM;MAC3B,MAAM;QAAEkB,WAAW;QAAEC;MAAwB,CAAC,GAAG,IAAI,CAACpB,KAAK;MAC3D,IAAImB,WAAW,EAAE;QACbE,YAAY,CAAC,IAAI,CAACC,UAAU,CAAC;QAE7B,IAAI,CAACA,UAAU,GAAGC,UAAU,CAAC,MAAM;UAC/B,IAAI,CAACV,YAAY,CAAC,CAAC;QACvB,CAAC,EAAEO,uBAAuB,CAAC;MAC/B;IACJ,CAAC;IAAAnB,eAAA,yBAEgB,MAAM;MACnB,IAAIjC,IAAI,CAACwD,KAAK,EAAE;QACZ,IAAI,CAACV,WAAW,CAAC,CAAC;QAClB,IAAI,CAACW,WAAW,CAAC,CAAC;MACtB;IACJ,CAAC;IAAAxB,eAAA,sBAEa,MAAM;MAChB,IAAI,CAACgB,QAAQ,CAAC;QACVN,SAAS,EAAE;MACf,CAAC,CAAC;MAEF,MAAM;QAAEe;MAAO,CAAC,GAAG,IAAI,CAAC1B,KAAK;MAC7B,IAAI0B,MAAM,EAAE;QACRA,MAAM,CAAC,CAAC;MACZ;IACJ,CAAC;IAAAzB,eAAA,uBAEc,MAAM;MACjB,IAAI,CAACgB,QAAQ,CAAC;QACVN,SAAS,EAAE;MACf,CAAC,CAAC;MAEF,MAAM;QAAEgB;MAAQ,CAAC,GAAG,IAAI,CAAC3B,KAAK;MAC9B,IAAI2B,OAAO,EAAE;QACTA,OAAO,CAAC,CAAC;MACb;IACJ,CAAC;IAAA1B,eAAA,sBAEa,MAAM;MAChB,MAAM2B,QAAQ,GAAGxB,QAAQ,CAACC,cAAc,CAAC,IAAI,CAACwB,eAAe,CAAC;MAC9D,IAAID,QAAQ,EAAE;QACVA,QAAQ,CAACE,KAAK,CAAC,CAAC;MACpB;IACJ,CAAC;IAAA7B,eAAA,6BAEoB,MAAM;MACvB,IAAI,CAACwB,WAAW,CAAC,CAAC;MAClB,IAAI,CAACZ,YAAY,CAAC,CAAC;IACvB,CAAC;IAAAZ,eAAA,0CAEkCC,KAA8B,IAAK;MAClE,MAAM;QAAE6B,eAAe;QAAEC,mBAAmB;QAAEC;MAAkB,CAAC,GAAG,IAAI,CAACjC,KAAK;MAC9E,MAAM;QAAEW;MAAU,CAAC,GAAG,IAAI,CAACC,KAAK;MAEhC,IAAI,CAACD,SAAS,IAAI,EAAEqB,mBAAmB,IAAIC,iBAAiB,CAAC,EAAE;QAC3D;MACJ;MAEA,MAAM9B,WAAW,GAAGC,QAAQ,CAACC,cAAc,CAAC,IAAI,CAACC,SAAS,CAAC;MAC3D,MAAM4B,UAAU,GAAG9B,QAAQ,CAACC,cAAc,CAAC,IAAI,CAACwB,eAAe,CAAC;MAEhE,MAAMM,oBAAoB,GACrBD,UAAU,IAAIhC,KAAK,CAACO,MAAM,YAAYvB,IAAI,IAAIgD,UAAU,CAACtC,QAAQ,CAACM,KAAK,CAACO,MAAM,CAAC,IAChFyB,UAAU,KAAKhC,KAAK,CAACO,MAAM;MAC/B,MAAM2B,eAAe,GAChBjC,WAAW,IAAID,KAAK,CAACO,MAAM,YAAYvB,IAAI,IAAIiB,WAAW,CAACP,QAAQ,CAACM,KAAK,CAACO,MAAM,CAAC,IAClFN,WAAW,KAAKD,KAAK,CAACO,MAAM;MAChC,MAAM4B,QAAQ,GAAGF,oBAAoB,IAAIC,eAAe;MAExD,IAAIC,QAAQ,IAAIN,eAAe,CAACO,IAAI,CAAC9C,SAAS,IAAIF,gBAAgB,CAACY,KAAK,CAACO,MAAM,EAAEjB,SAAS,CAAC,CAAC,EAAE;QAC1F;MACJ;;MAEA;MACA,IAAI,CAACqB,YAAY,CAAC,CAAC;IACvB,CAAC;IA5KG,IAAI,CAACP,SAAS,GAAGvC,QAAQ,CAAC,SAAS,CAAC;IACpC,IAAI,CAAC8D,eAAe,GAAG9D,QAAQ,CAAC,cAAc,CAAC;IAC/C,IAAI,CAAC6C,KAAK,GAAG;MACTD,SAAS,EAAEX,KAAK,CAACuC,kBAAkB;MACnCxB,eAAe,EAAE;IACrB,CAAC;EACL;EAEAyB,kBAAkBA,CAACC,SAAgB,EAAEC,SAAgB,EAAE;IACnD,IAAI,CAACA,SAAS,CAAC/B,SAAS,IAAI,IAAI,CAACC,KAAK,CAACD,SAAS,EAAE;MAC9C,MAAM;QAAEqB,mBAAmB;QAAEC;MAAkB,CAAC,GAAG,IAAI,CAACjC,KAAK;MAC7D;MACA,IAAIgC,mBAAmB,EAAE;QACrB5B,QAAQ,CAACuC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAACC,+BAA+B,EAAE,IAAI,CAAC;QAC9ExC,QAAQ,CAACuC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAACC,+BAA+B,EAAE,IAAI,CAAC;MACxF;MACA,IAAIX,iBAAiB,EAAE;QACnBY,MAAM,CAACF,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAACC,+BAA+B,EAAE,IAAI,CAAC;MAC/E;IACJ,CAAC,MAAM,IAAIF,SAAS,CAAC/B,SAAS,IAAI,CAAC,IAAI,CAACC,KAAK,CAACD,SAAS,EAAE;MACrD;MACAP,QAAQ,CAAC0C,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAACF,+BAA+B,EAAE,IAAI,CAAC;MACvFxC,QAAQ,CAAC0C,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAACF,+BAA+B,EAAE,IAAI,CAAC;MACjFC,MAAM,CAACC,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAACF,+BAA+B,EAAE,IAAI,CAAC;IAClF;EACJ;EAEAG,oBAAoBA,CAAA,EAAG;IACnB,IAAI,IAAI,CAACnC,KAAK,CAACD,SAAS,EAAE;MACtB;MACAP,QAAQ,CAAC0C,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAACF,+BAA+B,EAAE,IAAI,CAAC;MACvFxC,QAAQ,CAAC0C,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAACF,+BAA+B,EAAE,IAAI,CAAC;MACjFC,MAAM,CAACC,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAACF,+BAA+B,EAAE,IAAI,CAAC;IAClF;IAEA,IAAI,IAAI,CAAC5C,KAAK,CAACmB,WAAW,IAAI,IAAI,CAACG,UAAU,EAAE;MAC3CD,YAAY,CAAC,IAAI,CAACC,UAAU,CAAC;IACjC;EACJ;EAwIA0B,MAAMA,CAAA,EAAG;IACL,MAAM;MACFC,QAAQ;MACRzD,SAAS,GAAG,EAAE;MACd0D,uBAAuB;MACvBC,iBAAiB;MACjBC,wBAAwB;MACxBC,YAAY;MACZC,MAAM;MACNnC,WAAW;MACXoC,QAAQ;MACRC;IACJ,CAAC,GAAG,IAAI,CAACxD,KAAK;IACd,MAAM;MAAEe,eAAe;MAAEJ;IAAU,CAAC,GAAG,IAAI,CAACC,KAAK;IACjD,MAAM6C,QAAQ,GAAG7F,KAAK,CAAC8F,QAAQ,CAACC,OAAO,CAACV,QAAQ,CAAC;IACjD,MAAMW,cAAc,GAAGlF,SAAS,CAAC6E,QAAQ,CAAC;IAE1C,IAAIE,QAAQ,CAACI,MAAM,KAAK,CAAC,EAAE;MACvB,MAAM,IAAIC,KAAK,CAAC,2EAA2E,CAAC;IAChG;IAEA,MAAMC,aAAa,GAAGN,QAAQ,CAAC,CAAC,CAAC;IACjC,MAAMO,cAAc,GAAGP,QAAQ,CAAC,CAAC,CAAC;IAElC,MAAMQ,kBAA0B,GAAG;MAC/BC,EAAE,EAAE,IAAI,CAACrC,eAAe;MACxBsC,GAAG,EAAE,IAAI,CAACtC,eAAe;MACzBuC,OAAO,EAAE,IAAI,CAACC,iBAAiB;MAC/BC,UAAU,EAAE,IAAI,CAACC,cAAc;MAC/BC,YAAY,EAAE,IAAI,CAACC,iBAAiB;MACpCC,YAAY,EAAE,IAAI,CAACC,sBAAsB;MACzCC,IAAI,EAAE,QAAQ;MACdC,QAAQ,EAAE,GAAG;MACb,eAAe,EAAEhG,YAAY;MAC7B,eAAe,EAAE8B,SAAS,GAAG,MAAM,GAAG;IAC1C,CAAC;IAED,IAAIA,SAAS,EAAE;MACXsD,kBAAkB,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC3D,SAAS;IACxD;IAEA,MAAMwE,YAAY,GAAG;MACjBZ,EAAE,EAAE,IAAI,CAAC5D,SAAS;MAClB6D,GAAG,EAAE,IAAI,CAAC7D,SAAS;MACnBsE,IAAI,EAAE/F,YAAY;MAClBuF,OAAO,EAAE,IAAI,CAACW,kBAAkB;MAChCpD,OAAO,EAAE,IAAI,CAACjB,kBAAkB;MAChC8D,YAAY,EAAE,IAAI,CAACC,iBAAiB;MACpCC,YAAY,EAAE,IAAI,CAACC,sBAAsB;MACzCnB,kBAAkB,EAAEA,kBAAkB,IAAK,CAACzC,eAAe,IAAI,CAACI,WAAY;MAC5E,iBAAiB,EAAE,IAAI,CAACU;IAC5B,CAAC;IAED,MAAMmD,WAAW,GAAG,EAAE;IAEtB,IAAI9B,uBAAuB,EAAE;MACzB8B,WAAW,CAACC,IAAI,CAAC;QACbC,EAAE,EAAE,cAAc;QAClBvG,UAAU,EAAE;MAChB,CAAC,CAAC;IACN;IAEA,IAAIwE,iBAAiB,EAAE;MACnB6B,WAAW,CAACC,IAAI,CAAC;QACbC,EAAE,EAAE,QAAQ;QACZvG,UAAU,EAAE;MAChB,CAAC,CAAC;IACN;IAEA,IAAIyE,wBAAwB,EAAE;MAC1B4B,WAAW,CAACC,IAAI,CAAC;QACbC,EAAE,EAAE,QAAQ;QACZvG,UAAU,EAAE,UAAU;QACtBwG,GAAG,EAAE;MACT,CAAC,CAAC;IACN;IAEA,MAAMC,WAAmB,GAAG;MACxBC,WAAW,EAAE,gBAAgB;MAC7B1G,UAAU,EAAEiF,cAAc,CAACjF,UAAU;MACrCC,gBAAgB,EAAEgF,cAAc,CAAChF,gBAAgB;MACjD0G,OAAO,EAAE3E,SAAS;MAClB4E,OAAO,EAAE;QACLC,OAAO,EAAE3H,UAAU,CAAC,gBAAgB,EAAE;UAAE,wBAAwB,EAAEwF;QAAa,CAAC,EAAE7D,SAAS;MAC/F,CAAC;MACDwF;IACJ,CAAC;IAED,IAAI1B,MAAM,EAAE;MACR8B,WAAW,CAAC9B,MAAM,GAAGA,MAAM;IAC/B,CAAC,MAAM;MACH,QAAQC,QAAQ;QACZ,KAAKrF,aAAa;QAClB,KAAKC,WAAW;QAChB,KAAKC,YAAY;UACbgH,WAAW,CAAC9B,MAAM,GAAG,SAAS;UAC9B;QACJ,KAAK/E,UAAU;QACf,KAAKC,QAAQ;QACb,KAAKC,SAAS;UACV2G,WAAW,CAAC9B,MAAM,GAAG,QAAQ;UAC7B;QACJ,KAAKjF,WAAW;UACZ+G,WAAW,CAAC9B,MAAM,GAAG,QAAQ;UAC7B;QACJ,KAAKhF,YAAY;UACb8G,WAAW,CAAC9B,MAAM,GAAG,SAAS;UAC9B;QACJ;QACA;MACJ;IACJ;IAEA,oBACI1F,KAAA,CAAA6H,aAAA,CAAC3H,eAAe,EAAKsH,WAAW,eAC3BxH,KAAK,CAAC8H,YAAY,CAAC3B,aAAa,EAAEE,kBAAkB,CAAC,EACrDtD,SAAS,iBACN/C,KAAA,CAAA6H,aAAA,CAACxH,aAAa,CAAC0H,QAAQ;MAACC,KAAK,EAAE;QAAE/E,YAAY,EAAE,IAAI,CAACA;MAAa;IAAE,gBAC9DjD,KAAK,CAAC8H,YAAY,CAAC1B,cAAc,EAAEc,YAAY,CAC5B,CAEf,CAAC;EAE1B;AACJ;AAAC7E,eAAA,CA7TKJ,MAAM,kBACc;EAClBL,SAAS,EAAE,EAAE;EACbe,YAAY,EAAE,IAAI;EAClByB,mBAAmB,EAAE,IAAI;EACzBC,iBAAiB,EAAE,KAAK;EACxBiB,uBAAuB,EAAE,IAAI;EAC7BC,iBAAiB,EAAE,KAAK;EACxBE,YAAY,EAAE,KAAK;EACnBd,kBAAkB,EAAE,KAAK;EACzBpB,WAAW,EAAE,KAAK;EAClBC,uBAAuB,EAAE,GAAG;EAC5BW,eAAe,EAAE,EAAE;EACnBwB,QAAQ,EAAEnF;AACd,CAAC;AAiTL,eAAeyB,MAAM","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"Flyout.js","names":["React","classNames","TetherComponent","uniqueId","KEYS","FlyoutContext","BOTTOM_CENTER","BOTTOM_LEFT","BOTTOM_RIGHT","MIDDLE_LEFT","MIDDLE_RIGHT","TOP_CENTER","TOP_LEFT","TOP_RIGHT","positions","attachment","targetAttachment","OVERLAY_ROLE","hasClickableAncestor","rootNode","targetNode","currentNode","Node","parentNode","nodeName","toUpperCase","hasClassAncestor","targetEl","className","el","HTMLElement","classList","contains","Flyout","Component","constructor","props","_defineProperty","event","overlayNode","document","getElementById","overlayID","closeOnClick","closeOnClickPredicate","target","handleOverlayClose","isVisible","state","closeOverlay","openOverlay","isButtonClicked","isTrusted","setState","preventDefault","openOnHover","openOnHoverDelayTimeout","clearTimeout","hoverDelay","setTimeout","key","enter","focusButton","onOpen","onClose","buttonEl","overlayButtonID","focus","portaledClasses","closeOnClickOutside","closeOnWindowBlur","buttonNode","isInsideToggleButton","isInsideOverlay","isInside","some","isVisibleByDefault","componentDidUpdate","prevProps","prevState","addEventListener","handleDocumentClickOrWindowBlur","window","removeEventListener","componentWillUnmount","render","children","constrainToScrollParent","constrainToWindow","constrainToWindowWithPin","isResponsive","offset","position","shouldDefaultFocus","elements","Children","toArray","tetherPosition","length","Error","overlayButton","overlayContent","overlayButtonProps","id","onClick","handleButtonClick","onKeyPress","handleKeyPress","onMouseEnter","handleButtonHover","onMouseLeave","handleButtonHoverLeave","role","tabIndex","overlayProps","handleOverlayClick","constraints","push","to","pin","tetherProps","classPrefix","enabled","classes","element","createElement","cloneElement","Provider","value"],"sources":["../../../src/components/flyout/Flyout.js"],"sourcesContent":["// @flow\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport TetherComponent from 'react-tether';\nimport uniqueId from 'lodash/uniqueId';\nimport { KEYS } from '../../constants';\n\nimport FlyoutContext from './FlyoutContext';\n\nimport './Flyout.scss';\n\nconst BOTTOM_CENTER = 'bottom-center';\nconst BOTTOM_LEFT = 'bottom-left';\nconst BOTTOM_RIGHT = 'bottom-right';\nconst MIDDLE_LEFT = 'middle-left';\nconst MIDDLE_RIGHT = 'middle-right';\nconst TOP_CENTER = 'top-center';\nconst TOP_LEFT = 'top-left';\nconst TOP_RIGHT = 'top-right';\n\nconst positions = {\n [BOTTOM_CENTER]: {\n attachment: 'top center',\n targetAttachment: 'bottom center',\n },\n [BOTTOM_LEFT]: {\n attachment: 'top right',\n targetAttachment: 'bottom right',\n },\n [BOTTOM_RIGHT]: {\n attachment: 'top left',\n targetAttachment: 'bottom left',\n },\n [MIDDLE_LEFT]: {\n attachment: 'middle right',\n targetAttachment: 'middle left',\n },\n [MIDDLE_RIGHT]: {\n attachment: 'middle left',\n targetAttachment: 'middle right',\n },\n [TOP_CENTER]: {\n attachment: 'bottom center',\n targetAttachment: 'top center',\n },\n [TOP_LEFT]: {\n attachment: 'bottom right',\n targetAttachment: 'top right',\n },\n [TOP_RIGHT]: {\n attachment: 'bottom left',\n targetAttachment: 'top left',\n },\n};\n\nconst OVERLAY_ROLE = 'dialog';\n\n/**\n * Checks if there is a clickable ancestor or self\n * @param {Node} rootNode The base node we should stop at\n * @param {Node} targetNode The target node of the event\n * @returns {boolean}\n */\nconst hasClickableAncestor = (rootNode, targetNode) => {\n // Check if the element or any of the ancestors are click-able (stopping at the component boundary)\n let currentNode = targetNode;\n while (currentNode && currentNode instanceof Node && currentNode.parentNode && currentNode !== rootNode) {\n const nodeName = currentNode.nodeName.toUpperCase();\n if (nodeName === 'A' || nodeName === 'BUTTON') {\n return true;\n }\n currentNode = currentNode.parentNode;\n }\n return false;\n};\n\n/**\n * Checks if the target element is inside an element with the given CSS class.\n * @param {HTMLElement} targetEl The target element\n * @param {string} className A CSS class on the element to check for\n */\nconst hasClassAncestor = (targetEl, className) => {\n let el = targetEl;\n while (el && el instanceof HTMLElement) {\n if (el.classList.contains(className)) {\n return true;\n }\n el = el.parentNode;\n }\n return false;\n};\n\nexport type FlyoutProps = {\n children: React.Node,\n /**\n * Set className to the overlay wrapper\n */\n className?: string,\n /**\n * If set to true, closes the overlay on clicking buttons/links inside\n * of it\n */\n closeOnClick?: boolean,\n /**\n * If set to true, closes the overlay on clicking outside of it\n */\n closeOnClickOutside?: boolean,\n /**\n * Function that will interrogate the click event to determine whether or not to close the overlay if closeOnClick is enabled\n */\n closeOnClickPredicate?: Function,\n /**\n * If set to true, closes the overlay when window loses focus\n */\n closeOnWindowBlur?: boolean,\n /**\n * Sets tether constrain to scrollParent\n */\n constrainToScrollParent?: boolean,\n /**\n * Sets tether constrain to window\n */\n constrainToWindow?: boolean,\n /**\n * Sets tether constrain to window with pin\n */\n constrainToWindowWithPin?: boolean,\n /**\n * Toggles responsive behavior\n */\n isResponsive?: boolean,\n /**\n * Whether overlay should be visible by default\n */\n isVisibleByDefault: boolean,\n /**\n * Will fire this callback when the flyout should open\n */\n offset?: string,\n /**\n * Will fire this callback when the flyout should close\n */\n onClose?: Function,\n /**\n * Adjusts placement of the overlay (SEE http://tether.io/#options)\n */\n onOpen?: Function,\n /**\n * Whether overlay should open on hover\n */\n openOnHover?: boolean,\n /**\n * Time in milliseconds that the button should wait before opening and closing the flyout\n */\n openOnHoverDelayTimeout?: number,\n /** An array of CSS classes for portaled elements in the overlay, used to check whether a click is inside the overlay */\n portaledClasses: Array<string>,\n /**\n * Position of the overlay\n */\n position:\n | 'bottom-center'\n | 'bottom-left'\n | 'bottom-right'\n | 'middle-left'\n | 'middle-right'\n | 'top-center'\n | 'top-left'\n | 'top-right',\n /**\n * Prop whether to focus first focusable element or not\n */\n shouldDefaultFocus?: boolean,\n};\n\ntype State = {\n isButtonClicked: boolean,\n isVisible: boolean,\n};\n\ntype Props = FlyoutProps;\n\nclass Flyout extends React.Component<Props, State> {\n static defaultProps = {\n className: '',\n closeOnClick: true,\n closeOnClickOutside: true,\n closeOnWindowBlur: false,\n constrainToScrollParent: true,\n constrainToWindow: false,\n isResponsive: false,\n isVisibleByDefault: false,\n openOnHover: false,\n openOnHoverDelayTimeout: 300,\n portaledClasses: [],\n position: BOTTOM_RIGHT,\n };\n\n constructor(props: Props) {\n super(props);\n\n this.overlayID = uniqueId('overlay');\n this.overlayButtonID = uniqueId('flyoutbutton');\n this.state = {\n isVisible: props.isVisibleByDefault,\n isButtonClicked: false,\n };\n }\n\n componentDidUpdate(prevProps: Props, prevState: State) {\n if (!prevState.isVisible && this.state.isVisible) {\n const { closeOnClickOutside, closeOnWindowBlur } = this.props;\n // When overlay is being opened\n if (closeOnClickOutside) {\n document.addEventListener('click', this.handleDocumentClickOrWindowBlur, true);\n document.addEventListener('contextmenu', this.handleDocumentClickOrWindowBlur, true);\n }\n if (closeOnWindowBlur) {\n window.addEventListener('blur', this.handleDocumentClickOrWindowBlur, true);\n }\n } else if (prevState.isVisible && !this.state.isVisible) {\n // When overlay is being closed\n document.removeEventListener('contextmenu', this.handleDocumentClickOrWindowBlur, true);\n document.removeEventListener('click', this.handleDocumentClickOrWindowBlur, true);\n window.removeEventListener('blur', this.handleDocumentClickOrWindowBlur, true);\n }\n }\n\n componentWillUnmount() {\n if (this.state.isVisible) {\n // Clean-up global click handlers\n document.removeEventListener('contextmenu', this.handleDocumentClickOrWindowBlur, true);\n document.removeEventListener('click', this.handleDocumentClickOrWindowBlur, true);\n window.removeEventListener('blur', this.handleDocumentClickOrWindowBlur, true);\n }\n\n if (this.props.openOnHover && this.hoverDelay) {\n clearTimeout(this.hoverDelay);\n }\n }\n\n overlayButtonID: string;\n\n overlayID: string;\n\n handleOverlayClick = (event: SyntheticEvent<>) => {\n const overlayNode = document.getElementById(this.overlayID);\n const { closeOnClick, closeOnClickPredicate } = this.props;\n if (!closeOnClick || !hasClickableAncestor(overlayNode, event.target)) {\n return;\n }\n if (closeOnClickPredicate && !closeOnClickPredicate(event)) {\n return;\n }\n\n this.handleOverlayClose();\n };\n\n handleButtonClick = (event: SyntheticUIEvent<>) => {\n const { isVisible } = this.state;\n if (isVisible) {\n this.closeOverlay();\n } else {\n this.openOverlay();\n }\n\n // In at least one place, .click() is called programmatically\n // src/features/presence/Presence.js\n // In the programmatic case, the event is not supposed to trigger\n // autofocus of the content (TBD if this is truly correct behavior).\n // This line was using \"event.detail > 0\"\n // to detect if a click event was from a user, but that made keyboard\n // triggers of the button click behave differently than the mouse.\n // So, we use \"isTrusted\" instead. Note: React polyfills for IE11.\n // https://developer.mozilla.org/en-US/docs/Web/API/Event/isTrusted\n // https://reactjs.org/docs/events.html\n\n const isButtonClicked = event.isTrusted;\n\n this.setState({ isButtonClicked });\n\n event.preventDefault();\n };\n\n hoverDelay: TimeoutID | void;\n\n handleButtonHover = () => {\n const { openOnHover, openOnHoverDelayTimeout } = this.props;\n if (openOnHover) {\n clearTimeout(this.hoverDelay);\n this.hoverDelay = setTimeout(() => {\n this.openOverlay();\n }, openOnHoverDelayTimeout);\n }\n };\n\n handleButtonHoverLeave = () => {\n const { openOnHover, openOnHoverDelayTimeout } = this.props;\n if (openOnHover) {\n clearTimeout(this.hoverDelay);\n\n this.hoverDelay = setTimeout(() => {\n this.closeOverlay();\n }, openOnHoverDelayTimeout);\n }\n };\n\n handleKeyPress = (event: SyntheticKeyboardEvent<>) => {\n if (event.key === KEYS.enter) {\n event.preventDefault();\n this.openOverlay();\n this.focusButton();\n }\n };\n\n openOverlay = () => {\n this.setState({\n isVisible: true,\n });\n\n const { onOpen } = this.props;\n if (onOpen) {\n onOpen();\n }\n };\n\n closeOverlay = () => {\n this.setState({\n isVisible: false,\n });\n\n const { onClose } = this.props;\n if (onClose) {\n onClose();\n }\n };\n\n focusButton = () => {\n const buttonEl = document.getElementById(this.overlayButtonID);\n if (buttonEl) {\n buttonEl.focus();\n }\n };\n\n handleOverlayClose = () => {\n this.focusButton();\n this.closeOverlay();\n };\n\n handleDocumentClickOrWindowBlur = (event: MouseEvent | FocusEvent) => {\n const { portaledClasses, closeOnClickOutside, closeOnWindowBlur } = this.props;\n const { isVisible } = this.state;\n\n if (!isVisible || !(closeOnClickOutside || closeOnWindowBlur)) {\n return;\n }\n\n const overlayNode = document.getElementById(this.overlayID);\n const buttonNode = document.getElementById(this.overlayButtonID);\n\n const isInsideToggleButton =\n (buttonNode && event.target instanceof Node && buttonNode.contains(event.target)) ||\n buttonNode === event.target;\n const isInsideOverlay =\n (overlayNode && event.target instanceof Node && overlayNode.contains(event.target)) ||\n overlayNode === event.target;\n const isInside = isInsideToggleButton || isInsideOverlay;\n\n if (isInside || portaledClasses.some(className => hasClassAncestor(event.target, className))) {\n return;\n }\n\n // Only close overlay when the click is outside of the flyout or window loses focus\n this.closeOverlay();\n };\n\n render() {\n const {\n children,\n className = '',\n constrainToScrollParent,\n constrainToWindow,\n constrainToWindowWithPin,\n isResponsive,\n offset,\n openOnHover,\n position,\n shouldDefaultFocus,\n } = this.props;\n const { isButtonClicked, isVisible } = this.state;\n const elements = React.Children.toArray(children);\n const tetherPosition = positions[position];\n\n if (elements.length !== 2) {\n throw new Error('Flyout must have exactly two children: A button component and a <Overlay>');\n }\n\n const overlayButton = elements[0];\n const overlayContent = elements[1];\n\n const overlayButtonProps: Object = {\n id: this.overlayButtonID,\n key: this.overlayButtonID,\n onClick: this.handleButtonClick,\n onKeyPress: this.handleKeyPress,\n onMouseEnter: this.handleButtonHover,\n onMouseLeave: this.handleButtonHoverLeave,\n role: 'button',\n tabIndex: '0',\n 'aria-haspopup': OVERLAY_ROLE,\n 'aria-expanded': isVisible ? 'true' : 'false',\n };\n\n if (isVisible) {\n overlayButtonProps['aria-controls'] = this.overlayID;\n }\n\n const overlayProps = {\n id: this.overlayID,\n key: this.overlayID,\n role: OVERLAY_ROLE,\n onClick: this.handleOverlayClick,\n onClose: this.handleOverlayClose,\n onMouseEnter: this.handleButtonHover,\n onMouseLeave: this.handleButtonHoverLeave,\n shouldDefaultFocus: shouldDefaultFocus || (!isButtonClicked && !openOnHover),\n 'aria-labelledby': this.overlayButtonID,\n };\n\n const constraints = [];\n\n if (constrainToScrollParent) {\n constraints.push({\n to: 'scrollParent',\n attachment: 'together',\n });\n }\n\n if (constrainToWindow) {\n constraints.push({\n to: 'window',\n attachment: 'together',\n });\n }\n\n if (constrainToWindowWithPin) {\n constraints.push({\n to: 'window',\n attachment: 'together',\n pin: true,\n });\n }\n\n const tetherProps: Object = {\n classPrefix: 'flyout-overlay',\n attachment: tetherPosition.attachment,\n targetAttachment: tetherPosition.targetAttachment,\n enabled: isVisible,\n classes: {\n element: classNames('flyout-overlay', { 'bdl-Flyout--responsive': isResponsive }, className),\n },\n constraints,\n };\n\n if (offset) {\n tetherProps.offset = offset;\n } else {\n switch (position) {\n case BOTTOM_CENTER:\n case BOTTOM_LEFT:\n case BOTTOM_RIGHT:\n tetherProps.offset = '-10px 0';\n break;\n case TOP_CENTER:\n case TOP_LEFT:\n case TOP_RIGHT:\n tetherProps.offset = '10px 0';\n break;\n case MIDDLE_LEFT:\n tetherProps.offset = '0 10px';\n break;\n case MIDDLE_RIGHT:\n tetherProps.offset = '0 -10px';\n break;\n default:\n // no default\n }\n }\n\n return (\n <TetherComponent {...tetherProps}>\n {React.cloneElement(overlayButton, overlayButtonProps)}\n {isVisible && (\n <FlyoutContext.Provider value={{ closeOverlay: this.closeOverlay }}>\n {React.cloneElement(overlayContent, overlayProps)}\n </FlyoutContext.Provider>\n )}\n </TetherComponent>\n );\n }\n}\n\nexport default Flyout;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -52,7 +52,7 @@ export const withNewMetadataView = {
|
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
54
|
};
|
|
55
|
-
|
|
55
|
+
const meta = {
|
|
56
56
|
title: 'Elements/ContentExplorer/tests/ContentExplorer/visual/MetadataView',
|
|
57
57
|
component: ContentExplorer,
|
|
58
58
|
args: {
|
|
@@ -70,4 +70,5 @@ export default {
|
|
|
70
70
|
}
|
|
71
71
|
}
|
|
72
72
|
};
|
|
73
|
+
export default meta;
|
|
73
74
|
//# sourceMappingURL=MetadataView-visual.stories.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MetadataView-visual.stories.js","names":["http","HttpResponse","ContentExplorer","DEFAULT_HOSTNAME_API","mockMetadata","mockSchema","EID","templateName","metadataSource","metadataSourceFieldName","metadataQuery","from","ancestor_folder_id","fields","fieldsToShow","key","canEdit","displayName","defaultView","metadataView","args","withNewMetadataView","features","contentExplorer","metadataViewV2","title","component","global","FEATURE_FLAGS","rootFolderId","FOLDER_ID","token","TOKEN","parameters","msw","handlers","post","json","get"],"sources":["../../../../../src/elements/content-explorer/stories/tests/MetadataView-visual.stories.tsx"],"sourcesContent":["import { http, HttpResponse } from 'msw';\nimport ContentExplorer from '../../ContentExplorer';\nimport { DEFAULT_HOSTNAME_API } from '../../../../constants';\nimport { mockMetadata, mockSchema } from '../../../common/__mocks__/mockMetadata';\n\nconst EID = '0';\nconst templateName = 'templateName';\nconst metadataSource = `enterprise_${EID}.${templateName}`;\nconst metadataSourceFieldName = `metadata.${metadataSource}`;\n\nconst metadataQuery = {\n from: metadataSource,\n\n // // Filter items in the folder by existing metadata key\n // query: 'key = :arg1',\n //\n // // Display items with value\n // query_params: { arg1: 'value' },\n\n ancestor_folder_id: '313259567207',\n fields: [\n `${metadataSourceFieldName}.name`,\n `${metadataSourceFieldName}.industry`,\n `${metadataSourceFieldName}.last_contacted_at`,\n `${metadataSourceFieldName}.role`,\n ],\n};\n\nconst fieldsToShow = [\n { key: `${metadataSourceFieldName}.name`, canEdit: false, displayName: 'Alias' },\n { key: `${metadataSourceFieldName}.industry`, canEdit: true },\n { key: `${metadataSourceFieldName}.last_contacted_at`, canEdit: true },\n { key: `${metadataSourceFieldName}.role`, canEdit: true },\n];\nconst defaultView = 'metadata'; // Required prop to paint the metadata view. If not provided, you'll get regular folder view.\n\nexport const metadataView = {\n args: {\n metadataQuery,\n fieldsToShow,\n defaultView,\n },\n};\n\nexport const withNewMetadataView = {\n args: {\n metadataQuery,\n fieldsToShow,\n defaultView,\n features: {\n contentExplorer: {\n metadataViewV2: true,\n },\n },\n },\n};\n\
|
|
1
|
+
{"version":3,"file":"MetadataView-visual.stories.js","names":["http","HttpResponse","ContentExplorer","DEFAULT_HOSTNAME_API","mockMetadata","mockSchema","EID","templateName","metadataSource","metadataSourceFieldName","metadataQuery","from","ancestor_folder_id","fields","fieldsToShow","key","canEdit","displayName","defaultView","metadataView","args","withNewMetadataView","features","contentExplorer","metadataViewV2","meta","title","component","global","FEATURE_FLAGS","rootFolderId","FOLDER_ID","token","TOKEN","parameters","msw","handlers","post","json","get"],"sources":["../../../../../src/elements/content-explorer/stories/tests/MetadataView-visual.stories.tsx"],"sourcesContent":["import { http, HttpResponse } from 'msw';\nimport type { Meta, StoryObj } from '@storybook/react';\nimport ContentExplorer from '../../ContentExplorer';\nimport { DEFAULT_HOSTNAME_API } from '../../../../constants';\nimport { mockMetadata, mockSchema } from '../../../common/__mocks__/mockMetadata';\n\nconst EID = '0';\nconst templateName = 'templateName';\nconst metadataSource = `enterprise_${EID}.${templateName}`;\nconst metadataSourceFieldName = `metadata.${metadataSource}`;\n\nconst metadataQuery = {\n from: metadataSource,\n\n // // Filter items in the folder by existing metadata key\n // query: 'key = :arg1',\n //\n // // Display items with value\n // query_params: { arg1: 'value' },\n\n ancestor_folder_id: '313259567207',\n fields: [\n `${metadataSourceFieldName}.name`,\n `${metadataSourceFieldName}.industry`,\n `${metadataSourceFieldName}.last_contacted_at`,\n `${metadataSourceFieldName}.role`,\n ],\n};\n\nconst fieldsToShow = [\n { key: `${metadataSourceFieldName}.name`, canEdit: false, displayName: 'Alias' },\n { key: `${metadataSourceFieldName}.industry`, canEdit: true },\n { key: `${metadataSourceFieldName}.last_contacted_at`, canEdit: true },\n { key: `${metadataSourceFieldName}.role`, canEdit: true },\n];\nconst defaultView = 'metadata'; // Required prop to paint the metadata view. If not provided, you'll get regular folder view.\n\ntype Story = StoryObj<typeof ContentExplorer>;\n\nexport const metadataView: Story = {\n args: {\n metadataQuery,\n fieldsToShow,\n defaultView,\n },\n};\n\nexport const withNewMetadataView: Story = {\n args: {\n metadataQuery,\n fieldsToShow,\n defaultView,\n features: {\n contentExplorer: {\n metadataViewV2: true,\n },\n },\n },\n};\n\nconst meta: Meta<typeof ContentExplorer> = {\n title: 'Elements/ContentExplorer/tests/ContentExplorer/visual/MetadataView',\n component: ContentExplorer,\n args: {\n features: global.FEATURE_FLAGS,\n rootFolderId: global.FOLDER_ID,\n token: global.TOKEN,\n },\n parameters: {\n msw: {\n handlers: [\n http.post(`${DEFAULT_HOSTNAME_API}/2.0/metadata_queries/execute_read`, () => {\n return HttpResponse.json(mockMetadata);\n }),\n http.get(`${DEFAULT_HOSTNAME_API}/2.0/metadata_templates/enterprise/templateName/schema`, () => {\n return HttpResponse.json(mockSchema);\n }),\n ],\n },\n },\n};\n\nexport default meta;\n"],"mappings":"AAAA,SAASA,IAAI,EAAEC,YAAY,QAAQ,KAAK;AAExC,OAAOC,eAAe,MAAM,uBAAuB;AACnD,SAASC,oBAAoB,QAAQ,uBAAuB;AAC5D,SAASC,YAAY,EAAEC,UAAU,QAAQ,wCAAwC;AAEjF,MAAMC,GAAG,GAAG,GAAG;AACf,MAAMC,YAAY,GAAG,cAAc;AACnC,MAAMC,cAAc,GAAG,cAAcF,GAAG,IAAIC,YAAY,EAAE;AAC1D,MAAME,uBAAuB,GAAG,YAAYD,cAAc,EAAE;AAE5D,MAAME,aAAa,GAAG;EAClBC,IAAI,EAAEH,cAAc;EAEpB;EACA;EACA;EACA;EACA;;EAEAI,kBAAkB,EAAE,cAAc;EAClCC,MAAM,EAAE,CACJ,GAAGJ,uBAAuB,OAAO,EACjC,GAAGA,uBAAuB,WAAW,EACrC,GAAGA,uBAAuB,oBAAoB,EAC9C,GAAGA,uBAAuB,OAAO;AAEzC,CAAC;AAED,MAAMK,YAAY,GAAG,CACjB;EAAEC,GAAG,EAAE,GAAGN,uBAAuB,OAAO;EAAEO,OAAO,EAAE,KAAK;EAAEC,WAAW,EAAE;AAAQ,CAAC,EAChF;EAAEF,GAAG,EAAE,GAAGN,uBAAuB,WAAW;EAAEO,OAAO,EAAE;AAAK,CAAC,EAC7D;EAAED,GAAG,EAAE,GAAGN,uBAAuB,oBAAoB;EAAEO,OAAO,EAAE;AAAK,CAAC,EACtE;EAAED,GAAG,EAAE,GAAGN,uBAAuB,OAAO;EAAEO,OAAO,EAAE;AAAK,CAAC,CAC5D;AACD,MAAME,WAAW,GAAG,UAAU,CAAC,CAAC;;AAIhC,OAAO,MAAMC,YAAmB,GAAG;EAC/BC,IAAI,EAAE;IACFV,aAAa;IACbI,YAAY;IACZI;EACJ;AACJ,CAAC;AAED,OAAO,MAAMG,mBAA0B,GAAG;EACtCD,IAAI,EAAE;IACFV,aAAa;IACbI,YAAY;IACZI,WAAW;IACXI,QAAQ,EAAE;MACNC,eAAe,EAAE;QACbC,cAAc,EAAE;MACpB;IACJ;EACJ;AACJ,CAAC;AAED,MAAMC,IAAkC,GAAG;EACvCC,KAAK,EAAE,oEAAoE;EAC3EC,SAAS,EAAEzB,eAAe;EAC1BkB,IAAI,EAAE;IACFE,QAAQ,EAAEM,MAAM,CAACC,aAAa;IAC9BC,YAAY,EAAEF,MAAM,CAACG,SAAS;IAC9BC,KAAK,EAAEJ,MAAM,CAACK;EAClB,CAAC;EACDC,UAAU,EAAE;IACRC,GAAG,EAAE;MACDC,QAAQ,EAAE,CACNpC,IAAI,CAACqC,IAAI,CAAC,GAAGlC,oBAAoB,oCAAoC,EAAE,MAAM;QACzE,OAAOF,YAAY,CAACqC,IAAI,CAAClC,YAAY,CAAC;MAC1C,CAAC,CAAC,EACFJ,IAAI,CAACuC,GAAG,CAAC,GAAGpC,oBAAoB,wDAAwD,EAAE,MAAM;QAC5F,OAAOF,YAAY,CAACqC,IAAI,CAACjC,UAAU,CAAC;MACxC,CAAC,CAAC;IAEV;EACJ;AACJ,CAAC;AAED,eAAeoB,IAAI","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MetadataInstanceEditor.js","names":["MetadataInstanceForm","React","MetadataInstanceEditor","areAiSuggestionsAvailable","errorCode","isBetaLanguageEnabled","isBoxAiSuggestionsEnabled","isDeleteButtonDisabled","isDeleteConfirmationModalCheckboxEnabled","isLargeFile","isMetadataMultiLevelTaxonomyFieldEnabled","isUnsavedChangesModalOpen","onCancel","onDelete","onDiscardUnsavedChanges","onSubmit","setIsUnsavedChangesModalOpen","taxonomyOptionsFetcher","template","createElement","isMultilevelTaxonomyFieldEnabled","isAiSuggestionsFeatureEnabled","selectedTemplateInstance"],"sources":["../../../src/elements/content-sidebar/MetadataInstanceEditor.tsx"],"sourcesContent":["import {\n MetadataInstanceForm,\n type FormValues,\n type JSONPatchOperations,\n type MetadataTemplateInstance,\n} from '@box/metadata-editor';\nimport {
|
|
1
|
+
{"version":3,"file":"MetadataInstanceEditor.js","names":["MetadataInstanceForm","React","MetadataInstanceEditor","areAiSuggestionsAvailable","errorCode","isBetaLanguageEnabled","isBoxAiSuggestionsEnabled","isDeleteButtonDisabled","isDeleteConfirmationModalCheckboxEnabled","isLargeFile","isMetadataMultiLevelTaxonomyFieldEnabled","isUnsavedChangesModalOpen","onCancel","onDelete","onDiscardUnsavedChanges","onSubmit","setIsUnsavedChangesModalOpen","taxonomyOptionsFetcher","template","createElement","isMultilevelTaxonomyFieldEnabled","isAiSuggestionsFeatureEnabled","selectedTemplateInstance"],"sources":["../../../src/elements/content-sidebar/MetadataInstanceEditor.tsx"],"sourcesContent":["import {\n MetadataInstanceForm,\n type FormValues,\n type JSONPatchOperations,\n type MetadataTemplateInstance,\n} from '@box/metadata-editor';\nimport { TaxonomyOptionsFetcher } from '@box/metadata-editor/lib/components/metadata-editor-fields/components/metadata-taxonomy-field/types.js';\nimport React from 'react';\nimport {\n ERROR_CODE_METADATA_AUTOFILL_TIMEOUT,\n ERROR_CODE_UNKNOWN,\n ERROR_CODE_METADATA_PRECONDITION_FAILED,\n} from '../../constants';\n\nexport interface MetadataInstanceEditorProps {\n areAiSuggestionsAvailable: boolean;\n errorCode?: ERROR_CODE_METADATA_AUTOFILL_TIMEOUT | ERROR_CODE_METADATA_PRECONDITION_FAILED | ERROR_CODE_UNKNOWN;\n isBetaLanguageEnabled: boolean;\n isBoxAiSuggestionsEnabled: boolean;\n isDeleteButtonDisabled: boolean;\n isDeleteConfirmationModalCheckboxEnabled: boolean;\n isLargeFile: boolean;\n isMetadataMultiLevelTaxonomyFieldEnabled: boolean;\n isUnsavedChangesModalOpen: boolean;\n onCancel: () => void;\n onDelete: (metadataInstance: MetadataTemplateInstance) => void;\n onDiscardUnsavedChanges: () => void;\n onSubmit: (values: FormValues, operations: JSONPatchOperations) => Promise<void>;\n setIsUnsavedChangesModalOpen: (isUnsavedChangesModalOpen: boolean) => void;\n taxonomyOptionsFetcher: TaxonomyOptionsFetcher;\n template: MetadataTemplateInstance;\n}\n\nconst MetadataInstanceEditor: React.FC<MetadataInstanceEditorProps> = ({\n areAiSuggestionsAvailable,\n errorCode,\n isBetaLanguageEnabled,\n isBoxAiSuggestionsEnabled,\n isDeleteButtonDisabled,\n isDeleteConfirmationModalCheckboxEnabled,\n isLargeFile,\n isMetadataMultiLevelTaxonomyFieldEnabled,\n isUnsavedChangesModalOpen,\n onCancel,\n onDelete,\n onDiscardUnsavedChanges,\n onSubmit,\n setIsUnsavedChangesModalOpen,\n taxonomyOptionsFetcher,\n template,\n}) => {\n return (\n <MetadataInstanceForm\n // TODO investigate if this property should be optional and by default false\n isMultilevelTaxonomyFieldEnabled={isMetadataMultiLevelTaxonomyFieldEnabled}\n areAiSuggestionsAvailable={areAiSuggestionsAvailable}\n errorCode={errorCode}\n isAiSuggestionsFeatureEnabled={isBoxAiSuggestionsEnabled}\n isBetaLanguageEnabled={isBetaLanguageEnabled}\n isDeleteButtonDisabled={isDeleteButtonDisabled}\n isDeleteConfirmationModalCheckboxEnabled={isDeleteConfirmationModalCheckboxEnabled}\n isLargeFile={isLargeFile}\n isUnsavedChangesModalOpen={isUnsavedChangesModalOpen}\n onCancel={onCancel}\n onDelete={onDelete}\n onDiscardUnsavedChanges={onDiscardUnsavedChanges}\n onSubmit={onSubmit}\n selectedTemplateInstance={template}\n setIsUnsavedChangesModalOpen={setIsUnsavedChangesModalOpen}\n taxonomyOptionsFetcher={taxonomyOptionsFetcher}\n />\n );\n};\n\nexport default MetadataInstanceEditor;\n"],"mappings":"AAAA,SACIA,oBAAoB,QAIjB,sBAAsB;AAE7B,OAAOC,KAAK,MAAM,OAAO;AA0BzB,MAAMC,sBAA6D,GAAGA,CAAC;EACnEC,yBAAyB;EACzBC,SAAS;EACTC,qBAAqB;EACrBC,yBAAyB;EACzBC,sBAAsB;EACtBC,wCAAwC;EACxCC,WAAW;EACXC,wCAAwC;EACxCC,yBAAyB;EACzBC,QAAQ;EACRC,QAAQ;EACRC,uBAAuB;EACvBC,QAAQ;EACRC,4BAA4B;EAC5BC,sBAAsB;EACtBC;AACJ,CAAC,KAAK;EACF,oBACIjB,KAAA,CAAAkB,aAAA,CAACnB;EACG;EAAA;IACAoB,gCAAgC,EAAEV,wCAAyC;IAC3EP,yBAAyB,EAAEA,yBAA0B;IACrDC,SAAS,EAAEA,SAAU;IACrBiB,6BAA6B,EAAEf,yBAA0B;IACzDD,qBAAqB,EAAEA,qBAAsB;IAC7CE,sBAAsB,EAAEA,sBAAuB;IAC/CC,wCAAwC,EAAEA,wCAAyC;IACnFC,WAAW,EAAEA,WAAY;IACzBE,yBAAyB,EAAEA,yBAA0B;IACrDC,QAAQ,EAAEA,QAAS;IACnBC,QAAQ,EAAEA,QAAS;IACnBC,uBAAuB,EAAEA,uBAAwB;IACjDC,QAAQ,EAAEA,QAAS;IACnBO,wBAAwB,EAAEJ,QAAS;IACnCF,4BAA4B,EAAEA,4BAA6B;IAC3DC,sBAAsB,EAAEA;EAAuB,CAClD,CAAC;AAEV,CAAC;AAED,eAAef,sBAAsB","ignoreList":[]}
|
|
@@ -7,7 +7,9 @@
|
|
|
7
7
|
import * as React from 'react';
|
|
8
8
|
import { injectIntl } from 'react-intl';
|
|
9
9
|
import noop from 'lodash/noop';
|
|
10
|
+
// $FlowFixMe
|
|
10
11
|
import { BoxAiLogo } from '@box/blueprint-web-assets/icons/Logo';
|
|
12
|
+
// $FlowFixMe
|
|
11
13
|
import { Size6 } from '@box/blueprint-web-assets/tokens/tokens';
|
|
12
14
|
import { usePromptFocus } from '@box/box-ai-content-answers';
|
|
13
15
|
import AdditionalTabs from './additional-tabs';
|
|
@@ -8,7 +8,9 @@ import * as React from 'react';
|
|
|
8
8
|
import { injectIntl } from 'react-intl';
|
|
9
9
|
import type { IntlShape } from 'react-intl';
|
|
10
10
|
import noop from 'lodash/noop';
|
|
11
|
+
// $FlowFixMe
|
|
11
12
|
import { BoxAiLogo } from '@box/blueprint-web-assets/icons/Logo';
|
|
13
|
+
// $FlowFixMe
|
|
12
14
|
import { Size6 } from '@box/blueprint-web-assets/tokens/tokens';
|
|
13
15
|
import { usePromptFocus } from '@box/box-ai-content-answers';
|
|
14
16
|
import AdditionalTabs from './additional-tabs';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SidebarNav.js","names":["React","injectIntl","noop","BoxAiLogo","Size6","usePromptFocus","AdditionalTabs","DocGenIcon","IconChatRound","IconDocInfo","IconMagicWand","IconMetadataThick","SidebarNavButton","SidebarNavSign","SidebarNavTablist","SidebarToggle","messages","SIDEBAR_NAV_TARGETS","SIDEBAR_VIEW_ACTIVITY","SIDEBAR_VIEW_BOXAI","SIDEBAR_VIEW_DETAILS","SIDEBAR_VIEW_DOCGEN","SIDEBAR_VIEW_METADATA","SIDEBAR_VIEW_SKILLS","useFeatureConfig","SidebarNav","additionalTabs","elementId","fileId","hasActivity","hasAdditionalTabs","hasBoxAI","hasDetails","hasMetadata","hasSkills","hasDocGen","intl","isOpen","onNavigate","onPanelChange","signSidebarProps","enabled","hasBoxSign","disabledTooltip","boxAIDisabledTooltip","showOnlyNavButton","showOnlyBoxAINavButton","focusPrompt","handleSidebarNavButtonClick","sidebarview","createElement","className","formatMessage","sidebarNavLabel","BOXAI","isDisabled","onClick","sidebarView","tooltip","sidebarBoxAITitle","height","width","ACTIVITY","sidebarActivityTitle","DETAILS","sidebarDetailsTitle","SKILLS","sidebarSkillsTitle","METADATA","sidebarMetadataTitle","DOCGEN","sidebarDocGenTooltip","key","tabs"],"sources":["../../../src/elements/content-sidebar/SidebarNav.js"],"sourcesContent":["/**\n * @flow\n * @file Preview sidebar nav component\n * @author Box\n */\n\nimport * as React from 'react';\nimport { injectIntl } from 'react-intl';\nimport type { IntlShape } from 'react-intl';\nimport noop from 'lodash/noop';\nimport { BoxAiLogo } from '@box/blueprint-web-assets/icons/Logo';\nimport { Size6 } from '@box/blueprint-web-assets/tokens/tokens';\nimport { usePromptFocus } from '@box/box-ai-content-answers';\nimport AdditionalTabs from './additional-tabs';\nimport DocGenIcon from '../../icon/fill/DocGenIcon';\nimport IconChatRound from '../../icons/general/IconChatRound';\nimport IconDocInfo from '../../icons/general/IconDocInfo';\nimport IconMagicWand from '../../icons/general/IconMagicWand';\nimport IconMetadataThick from '../../icons/general/IconMetadataThick';\nimport SidebarNavButton from './SidebarNavButton';\nimport SidebarNavSign from './SidebarNavSign';\nimport SidebarNavTablist from './SidebarNavTablist';\nimport SidebarToggle from './SidebarToggle';\nimport messages from '../common/messages';\nimport { SIDEBAR_NAV_TARGETS } from '../common/interactionTargets';\nimport {\n SIDEBAR_VIEW_ACTIVITY,\n SIDEBAR_VIEW_BOXAI,\n SIDEBAR_VIEW_DETAILS,\n SIDEBAR_VIEW_DOCGEN,\n SIDEBAR_VIEW_METADATA,\n SIDEBAR_VIEW_SKILLS,\n} from '../../constants';\nimport { useFeatureConfig } from '../common/feature-checking';\nimport type { NavigateOptions, AdditionalSidebarTab } from './flowTypes';\nimport './SidebarNav.scss';\nimport type { SignSidebarProps } from './SidebarNavSign';\n\ntype Props = {\n additionalTabs?: Array<AdditionalSidebarTab>,\n elementId: string,\n fileId: string,\n hasActivity: boolean,\n hasAdditionalTabs: boolean,\n hasBoxAI: boolean,\n hasDetails: boolean,\n hasDocGen?: boolean,\n hasMetadata: boolean,\n hasSkills: boolean,\n intl: IntlShape,\n isOpen?: boolean,\n onNavigate?: (SyntheticEvent<>, NavigateOptions) => void,\n onPanelChange?: (name: string, isInitialState: boolean) => void,\n signSidebarProps: SignSidebarProps,\n};\n\nconst SidebarNav = ({\n additionalTabs,\n elementId,\n fileId,\n hasActivity,\n hasAdditionalTabs,\n hasBoxAI,\n hasDetails,\n hasMetadata,\n hasSkills,\n hasDocGen = false,\n intl,\n isOpen,\n onNavigate,\n onPanelChange = noop,\n signSidebarProps,\n}: Props) => {\n const { enabled: hasBoxSign } = signSidebarProps || {};\n const { disabledTooltip: boxAIDisabledTooltip, showOnlyNavButton: showOnlyBoxAINavButton } =\n useFeatureConfig('boxai.sidebar');\n\n const { focusPrompt } = usePromptFocus('.be.bcs');\n\n const handleSidebarNavButtonClick = (sidebarview: string) => {\n onPanelChange(sidebarview, false);\n\n // If the Box AI sidebar is enabled, focus the Box AI sidebar prompt\n if (sidebarview === SIDEBAR_VIEW_BOXAI) {\n focusPrompt();\n }\n };\n\n return (\n <div className=\"bcs-SidebarNav\" aria-label={intl.formatMessage(messages.sidebarNavLabel)}>\n <div className=\"bcs-SidebarNav-tabs\">\n <SidebarNavTablist elementId={elementId} isOpen={isOpen} onNavigate={onNavigate}>\n {hasBoxAI && (\n <SidebarNavButton\n data-resin-target={SIDEBAR_NAV_TARGETS.BOXAI}\n data-target-id=\"SidebarNavButton-boxAI\"\n data-testid=\"sidebarboxai\"\n isDisabled={showOnlyBoxAINavButton}\n onClick={handleSidebarNavButtonClick}\n sidebarView={SIDEBAR_VIEW_BOXAI}\n tooltip={\n showOnlyBoxAINavButton\n ? boxAIDisabledTooltip\n : intl.formatMessage(messages.sidebarBoxAITitle)\n }\n >\n <BoxAiLogo height={Size6} width={Size6} />\n </SidebarNavButton>\n )}\n {hasActivity && (\n <SidebarNavButton\n data-resin-target={SIDEBAR_NAV_TARGETS.ACTIVITY}\n data-target-id=\"SidebarNavButton-activity\"\n data-testid=\"sidebaractivity\"\n onClick={handleSidebarNavButtonClick}\n sidebarView={SIDEBAR_VIEW_ACTIVITY}\n tooltip={intl.formatMessage(messages.sidebarActivityTitle)}\n >\n <IconChatRound className=\"bcs-SidebarNav-icon\" />\n </SidebarNavButton>\n )}\n {hasDetails && (\n <SidebarNavButton\n data-resin-target={SIDEBAR_NAV_TARGETS.DETAILS}\n data-target-id=\"SidebarNavButton-details\"\n data-testid=\"sidebardetails\"\n onClick={handleSidebarNavButtonClick}\n sidebarView={SIDEBAR_VIEW_DETAILS}\n tooltip={intl.formatMessage(messages.sidebarDetailsTitle)}\n >\n <IconDocInfo className=\"bcs-SidebarNav-icon\" />\n </SidebarNavButton>\n )}\n {hasSkills && (\n <SidebarNavButton\n data-resin-target={SIDEBAR_NAV_TARGETS.SKILLS}\n data-target-id=\"SidebarNavButton-skills\"\n data-testid=\"sidebarskills\"\n onClick={handleSidebarNavButtonClick}\n sidebarView={SIDEBAR_VIEW_SKILLS}\n tooltip={intl.formatMessage(messages.sidebarSkillsTitle)}\n >\n <IconMagicWand className=\"bcs-SidebarNav-icon\" />\n </SidebarNavButton>\n )}\n {hasMetadata && (\n <SidebarNavButton\n data-resin-target={SIDEBAR_NAV_TARGETS.METADATA}\n data-target-id=\"SidebarNavButton-metadata\"\n data-testid=\"sidebarmetadata\"\n onClick={handleSidebarNavButtonClick}\n sidebarView={SIDEBAR_VIEW_METADATA}\n tooltip={intl.formatMessage(messages.sidebarMetadataTitle)}\n >\n <IconMetadataThick className=\"bcs-SidebarNav-icon\" />\n </SidebarNavButton>\n )}\n {hasDocGen && (\n <SidebarNavButton\n data-resin-target={SIDEBAR_NAV_TARGETS.DOCGEN}\n data-target-id=\"SidebarNavButton-docGen\"\n onClick={handleSidebarNavButtonClick}\n sidebarView={SIDEBAR_VIEW_DOCGEN}\n tooltip={intl.formatMessage(messages.sidebarDocGenTooltip)}\n >\n <DocGenIcon className=\"bcs-SidebarNav-icon\" />\n </SidebarNavButton>\n )}\n </SidebarNavTablist>\n\n {hasBoxSign && (\n <div className=\"bcs-SidebarNav-secondary\">\n <SidebarNavSign {...signSidebarProps} />\n </div>\n )}\n\n {hasAdditionalTabs && (\n <div className=\"bcs-SidebarNav-overflow\">\n <AdditionalTabs key={fileId} tabs={additionalTabs} />\n </div>\n )}\n </div>\n <div className=\"bcs-SidebarNav-footer\">\n <SidebarToggle isOpen={isOpen} />\n </div>\n </div>\n );\n};\nexport default injectIntl(SidebarNav);\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"SidebarNav.js","names":["React","injectIntl","noop","BoxAiLogo","Size6","usePromptFocus","AdditionalTabs","DocGenIcon","IconChatRound","IconDocInfo","IconMagicWand","IconMetadataThick","SidebarNavButton","SidebarNavSign","SidebarNavTablist","SidebarToggle","messages","SIDEBAR_NAV_TARGETS","SIDEBAR_VIEW_ACTIVITY","SIDEBAR_VIEW_BOXAI","SIDEBAR_VIEW_DETAILS","SIDEBAR_VIEW_DOCGEN","SIDEBAR_VIEW_METADATA","SIDEBAR_VIEW_SKILLS","useFeatureConfig","SidebarNav","additionalTabs","elementId","fileId","hasActivity","hasAdditionalTabs","hasBoxAI","hasDetails","hasMetadata","hasSkills","hasDocGen","intl","isOpen","onNavigate","onPanelChange","signSidebarProps","enabled","hasBoxSign","disabledTooltip","boxAIDisabledTooltip","showOnlyNavButton","showOnlyBoxAINavButton","focusPrompt","handleSidebarNavButtonClick","sidebarview","createElement","className","formatMessage","sidebarNavLabel","BOXAI","isDisabled","onClick","sidebarView","tooltip","sidebarBoxAITitle","height","width","ACTIVITY","sidebarActivityTitle","DETAILS","sidebarDetailsTitle","SKILLS","sidebarSkillsTitle","METADATA","sidebarMetadataTitle","DOCGEN","sidebarDocGenTooltip","key","tabs"],"sources":["../../../src/elements/content-sidebar/SidebarNav.js"],"sourcesContent":["/**\n * @flow\n * @file Preview sidebar nav component\n * @author Box\n */\n\nimport * as React from 'react';\nimport { injectIntl } from 'react-intl';\nimport type { IntlShape } from 'react-intl';\nimport noop from 'lodash/noop';\n// $FlowFixMe\nimport { BoxAiLogo } from '@box/blueprint-web-assets/icons/Logo';\n// $FlowFixMe\nimport { Size6 } from '@box/blueprint-web-assets/tokens/tokens';\nimport { usePromptFocus } from '@box/box-ai-content-answers';\nimport AdditionalTabs from './additional-tabs';\nimport DocGenIcon from '../../icon/fill/DocGenIcon';\nimport IconChatRound from '../../icons/general/IconChatRound';\nimport IconDocInfo from '../../icons/general/IconDocInfo';\nimport IconMagicWand from '../../icons/general/IconMagicWand';\nimport IconMetadataThick from '../../icons/general/IconMetadataThick';\nimport SidebarNavButton from './SidebarNavButton';\nimport SidebarNavSign from './SidebarNavSign';\nimport SidebarNavTablist from './SidebarNavTablist';\nimport SidebarToggle from './SidebarToggle';\nimport messages from '../common/messages';\nimport { SIDEBAR_NAV_TARGETS } from '../common/interactionTargets';\nimport {\n SIDEBAR_VIEW_ACTIVITY,\n SIDEBAR_VIEW_BOXAI,\n SIDEBAR_VIEW_DETAILS,\n SIDEBAR_VIEW_DOCGEN,\n SIDEBAR_VIEW_METADATA,\n SIDEBAR_VIEW_SKILLS,\n} from '../../constants';\nimport { useFeatureConfig } from '../common/feature-checking';\nimport type { NavigateOptions, AdditionalSidebarTab } from './flowTypes';\nimport './SidebarNav.scss';\nimport type { SignSidebarProps } from './SidebarNavSign';\n\ntype Props = {\n additionalTabs?: Array<AdditionalSidebarTab>,\n elementId: string,\n fileId: string,\n hasActivity: boolean,\n hasAdditionalTabs: boolean,\n hasBoxAI: boolean,\n hasDetails: boolean,\n hasDocGen?: boolean,\n hasMetadata: boolean,\n hasSkills: boolean,\n intl: IntlShape,\n isOpen?: boolean,\n onNavigate?: (SyntheticEvent<>, NavigateOptions) => void,\n onPanelChange?: (name: string, isInitialState: boolean) => void,\n signSidebarProps: SignSidebarProps,\n};\n\nconst SidebarNav = ({\n additionalTabs,\n elementId,\n fileId,\n hasActivity,\n hasAdditionalTabs,\n hasBoxAI,\n hasDetails,\n hasMetadata,\n hasSkills,\n hasDocGen = false,\n intl,\n isOpen,\n onNavigate,\n onPanelChange = noop,\n signSidebarProps,\n}: Props) => {\n const { enabled: hasBoxSign } = signSidebarProps || {};\n const { disabledTooltip: boxAIDisabledTooltip, showOnlyNavButton: showOnlyBoxAINavButton } =\n useFeatureConfig('boxai.sidebar');\n\n const { focusPrompt } = usePromptFocus('.be.bcs');\n\n const handleSidebarNavButtonClick = (sidebarview: string) => {\n onPanelChange(sidebarview, false);\n\n // If the Box AI sidebar is enabled, focus the Box AI sidebar prompt\n if (sidebarview === SIDEBAR_VIEW_BOXAI) {\n focusPrompt();\n }\n };\n\n return (\n <div className=\"bcs-SidebarNav\" aria-label={intl.formatMessage(messages.sidebarNavLabel)}>\n <div className=\"bcs-SidebarNav-tabs\">\n <SidebarNavTablist elementId={elementId} isOpen={isOpen} onNavigate={onNavigate}>\n {hasBoxAI && (\n <SidebarNavButton\n data-resin-target={SIDEBAR_NAV_TARGETS.BOXAI}\n data-target-id=\"SidebarNavButton-boxAI\"\n data-testid=\"sidebarboxai\"\n isDisabled={showOnlyBoxAINavButton}\n onClick={handleSidebarNavButtonClick}\n sidebarView={SIDEBAR_VIEW_BOXAI}\n tooltip={\n showOnlyBoxAINavButton\n ? boxAIDisabledTooltip\n : intl.formatMessage(messages.sidebarBoxAITitle)\n }\n >\n <BoxAiLogo height={Size6} width={Size6} />\n </SidebarNavButton>\n )}\n {hasActivity && (\n <SidebarNavButton\n data-resin-target={SIDEBAR_NAV_TARGETS.ACTIVITY}\n data-target-id=\"SidebarNavButton-activity\"\n data-testid=\"sidebaractivity\"\n onClick={handleSidebarNavButtonClick}\n sidebarView={SIDEBAR_VIEW_ACTIVITY}\n tooltip={intl.formatMessage(messages.sidebarActivityTitle)}\n >\n <IconChatRound className=\"bcs-SidebarNav-icon\" />\n </SidebarNavButton>\n )}\n {hasDetails && (\n <SidebarNavButton\n data-resin-target={SIDEBAR_NAV_TARGETS.DETAILS}\n data-target-id=\"SidebarNavButton-details\"\n data-testid=\"sidebardetails\"\n onClick={handleSidebarNavButtonClick}\n sidebarView={SIDEBAR_VIEW_DETAILS}\n tooltip={intl.formatMessage(messages.sidebarDetailsTitle)}\n >\n <IconDocInfo className=\"bcs-SidebarNav-icon\" />\n </SidebarNavButton>\n )}\n {hasSkills && (\n <SidebarNavButton\n data-resin-target={SIDEBAR_NAV_TARGETS.SKILLS}\n data-target-id=\"SidebarNavButton-skills\"\n data-testid=\"sidebarskills\"\n onClick={handleSidebarNavButtonClick}\n sidebarView={SIDEBAR_VIEW_SKILLS}\n tooltip={intl.formatMessage(messages.sidebarSkillsTitle)}\n >\n <IconMagicWand className=\"bcs-SidebarNav-icon\" />\n </SidebarNavButton>\n )}\n {hasMetadata && (\n <SidebarNavButton\n data-resin-target={SIDEBAR_NAV_TARGETS.METADATA}\n data-target-id=\"SidebarNavButton-metadata\"\n data-testid=\"sidebarmetadata\"\n onClick={handleSidebarNavButtonClick}\n sidebarView={SIDEBAR_VIEW_METADATA}\n tooltip={intl.formatMessage(messages.sidebarMetadataTitle)}\n >\n <IconMetadataThick className=\"bcs-SidebarNav-icon\" />\n </SidebarNavButton>\n )}\n {hasDocGen && (\n <SidebarNavButton\n data-resin-target={SIDEBAR_NAV_TARGETS.DOCGEN}\n data-target-id=\"SidebarNavButton-docGen\"\n onClick={handleSidebarNavButtonClick}\n sidebarView={SIDEBAR_VIEW_DOCGEN}\n tooltip={intl.formatMessage(messages.sidebarDocGenTooltip)}\n >\n <DocGenIcon className=\"bcs-SidebarNav-icon\" />\n </SidebarNavButton>\n )}\n </SidebarNavTablist>\n\n {hasBoxSign && (\n <div className=\"bcs-SidebarNav-secondary\">\n <SidebarNavSign {...signSidebarProps} />\n </div>\n )}\n\n {hasAdditionalTabs && (\n <div className=\"bcs-SidebarNav-overflow\">\n <AdditionalTabs key={fileId} tabs={additionalTabs} />\n </div>\n )}\n </div>\n <div className=\"bcs-SidebarNav-footer\">\n <SidebarToggle isOpen={isOpen} />\n </div>\n </div>\n );\n};\nexport default injectIntl(SidebarNav);\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -23,7 +23,7 @@ const defaultMetadataSidebarProps = {
|
|
|
23
23
|
onError: fn(),
|
|
24
24
|
onSuccess: fn()
|
|
25
25
|
};
|
|
26
|
-
|
|
26
|
+
const meta = {
|
|
27
27
|
title: 'Elements/ContentSidebar/MetadataSidebarRedesign',
|
|
28
28
|
component: ContentSidebar,
|
|
29
29
|
args: {
|
|
@@ -51,6 +51,7 @@ export default {
|
|
|
51
51
|
return /*#__PURE__*/React.createElement(ContentSidebar, args);
|
|
52
52
|
}
|
|
53
53
|
};
|
|
54
|
+
export default meta;
|
|
54
55
|
export const Basic = {
|
|
55
56
|
play: async ({
|
|
56
57
|
canvasElement
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MetadataSidebarRedesign.stories.js","names":["fn","userEvent","within","React","http","HttpResponse","ContentSidebar","fileIdWithMetadata","mockEnterpriseMetadataTemplates","mockFileRequest","mockMetadataInstances","mockGlobalMetadataTemplates","mockFeatures","mockLogger","onReadyMetric","endMarkName","console","log","defaultMetadataSidebarProps","isBoxAiSuggestionsEnabled","isBetaLanguageEnabled","isDeleteConfirmationModalCheckboxEnabled","isMetadataMultiLevelTaxonomyFieldEnabled","isFeatureEnabled","onError","onSuccess","title","component","args","fileId","features","logger","hasMetadata","token","global","TOKEN","metadataSidebarProps","parameters","msw","handlers","get","url","json","response","render","createElement","Basic","play","canvasElement","canvas","addTemplateButton","findByRole","name","container","click"],"sources":["../../../../src/elements/content-sidebar/stories/MetadataSidebarRedesign.stories.tsx"],"sourcesContent":["import { type StoryObj } from '@storybook/react';\nimport { fn, userEvent, within } from '@storybook/test';\nimport React, { type ComponentProps } from 'react';\nimport { http, HttpResponse } from 'msw';\nimport MetadataSidebarRedesign from '../MetadataSidebarRedesign';\nimport ContentSidebar from '../ContentSidebar';\nimport {\n fileIdWithMetadata,\n mockEnterpriseMetadataTemplates,\n mockFileRequest,\n mockMetadataInstances,\n mockGlobalMetadataTemplates,\n} from './__mocks__/MetadataSidebarRedesignedMocks';\n\nconst mockFeatures = {\n 'metadata.redesign.enabled': true,\n};\nconst mockLogger = {\n onReadyMetric: ({ endMarkName }) => {\n // eslint-disable-next-line no-console\n console.log(`Logger: onReadyMetric called with endMarkName: ${endMarkName}`);\n },\n};\n\nconst defaultMetadataSidebarProps: ComponentProps<typeof MetadataSidebarRedesign> = {\n isBoxAiSuggestionsEnabled: true,\n isBetaLanguageEnabled: false,\n isDeleteConfirmationModalCheckboxEnabled: false,\n isMetadataMultiLevelTaxonomyFieldEnabled: false,\n isFeatureEnabled: true,\n onError: fn(),\n onSuccess: fn(),\n};\n\
|
|
1
|
+
{"version":3,"file":"MetadataSidebarRedesign.stories.js","names":["fn","userEvent","within","React","http","HttpResponse","ContentSidebar","fileIdWithMetadata","mockEnterpriseMetadataTemplates","mockFileRequest","mockMetadataInstances","mockGlobalMetadataTemplates","mockFeatures","mockLogger","onReadyMetric","endMarkName","console","log","defaultMetadataSidebarProps","isBoxAiSuggestionsEnabled","isBetaLanguageEnabled","isDeleteConfirmationModalCheckboxEnabled","isMetadataMultiLevelTaxonomyFieldEnabled","isFeatureEnabled","onError","onSuccess","meta","title","component","args","fileId","features","logger","hasMetadata","token","global","TOKEN","metadataSidebarProps","parameters","msw","handlers","get","url","json","response","render","createElement","Basic","play","canvasElement","canvas","addTemplateButton","findByRole","name","container","click"],"sources":["../../../../src/elements/content-sidebar/stories/MetadataSidebarRedesign.stories.tsx"],"sourcesContent":["import { type StoryObj, Meta } from '@storybook/react';\nimport { fn, userEvent, within } from '@storybook/test';\nimport React, { type ComponentProps } from 'react';\nimport { http, HttpResponse } from 'msw';\nimport type { HttpHandler } from 'msw';\nimport MetadataSidebarRedesign from '../MetadataSidebarRedesign';\nimport ContentSidebar from '../ContentSidebar';\nimport {\n fileIdWithMetadata,\n mockEnterpriseMetadataTemplates,\n mockFileRequest,\n mockMetadataInstances,\n mockGlobalMetadataTemplates,\n} from './__mocks__/MetadataSidebarRedesignedMocks';\n\nconst mockFeatures = {\n 'metadata.redesign.enabled': true,\n};\nconst mockLogger = {\n onReadyMetric: ({ endMarkName }) => {\n // eslint-disable-next-line no-console\n console.log(`Logger: onReadyMetric called with endMarkName: ${endMarkName}`);\n },\n};\n\nconst defaultMetadataSidebarProps: ComponentProps<typeof MetadataSidebarRedesign> = {\n isBoxAiSuggestionsEnabled: true,\n isBetaLanguageEnabled: false,\n isDeleteConfirmationModalCheckboxEnabled: false,\n isMetadataMultiLevelTaxonomyFieldEnabled: false,\n isFeatureEnabled: true,\n onError: fn(),\n onSuccess: fn(),\n};\n\nconst meta: Meta<typeof ContentSidebar> & { parameters: { msw: { handlers: HttpHandler[] } } } = {\n title: 'Elements/ContentSidebar/MetadataSidebarRedesign',\n component: ContentSidebar,\n args: {\n fileId: fileIdWithMetadata,\n features: mockFeatures,\n logger: mockLogger,\n hasMetadata: true,\n token: global.TOKEN,\n metadataSidebarProps: defaultMetadataSidebarProps,\n },\n parameters: {\n msw: {\n handlers: [\n http.get(mockFileRequest.url, () => {\n return HttpResponse.json(mockFileRequest.response);\n }),\n http.get(mockMetadataInstances.url, () => {\n return HttpResponse.json(mockMetadataInstances.response);\n }),\n http.get(mockEnterpriseMetadataTemplates.url, () => {\n return HttpResponse.json(mockEnterpriseMetadataTemplates.response);\n }),\n http.get(mockGlobalMetadataTemplates.url, () => {\n return HttpResponse.json(mockGlobalMetadataTemplates.response);\n }),\n ],\n },\n },\n render: args => {\n return <ContentSidebar {...args} />;\n },\n};\n\nexport default meta;\n\nexport const Basic: StoryObj<typeof MetadataSidebarRedesign> = {\n play: async ({ canvasElement }) => {\n const canvas = within(canvasElement);\n\n const addTemplateButton = await canvas.findByRole(\n 'button',\n { name: 'Add template' },\n { container: await canvas.findByRole('tabpanel') },\n );\n await userEvent.click(addTemplateButton);\n },\n};\n"],"mappings":"AACA,SAASA,EAAE,EAAEC,SAAS,EAAEC,MAAM,QAAQ,iBAAiB;AACvD,OAAOC,KAAK,MAA+B,OAAO;AAClD,SAASC,IAAI,EAAEC,YAAY,QAAQ,KAAK;AAGxC,OAAOC,cAAc,MAAM,mBAAmB;AAC9C,SACIC,kBAAkB,EAClBC,+BAA+B,EAC/BC,eAAe,EACfC,qBAAqB,EACrBC,2BAA2B,QACxB,4CAA4C;AAEnD,MAAMC,YAAY,GAAG;EACjB,2BAA2B,EAAE;AACjC,CAAC;AACD,MAAMC,UAAU,GAAG;EACfC,aAAa,EAAEA,CAAC;IAAEC;EAAY,CAAC,KAAK;IAChC;IACAC,OAAO,CAACC,GAAG,CAAC,kDAAkDF,WAAW,EAAE,CAAC;EAChF;AACJ,CAAC;AAED,MAAMG,2BAA2E,GAAG;EAChFC,yBAAyB,EAAE,IAAI;EAC/BC,qBAAqB,EAAE,KAAK;EAC5BC,wCAAwC,EAAE,KAAK;EAC/CC,wCAAwC,EAAE,KAAK;EAC/CC,gBAAgB,EAAE,IAAI;EACtBC,OAAO,EAAExB,EAAE,CAAC,CAAC;EACbyB,SAAS,EAAEzB,EAAE,CAAC;AAClB,CAAC;AAED,MAAM0B,IAAwF,GAAG;EAC7FC,KAAK,EAAE,iDAAiD;EACxDC,SAAS,EAAEtB,cAAc;EACzBuB,IAAI,EAAE;IACFC,MAAM,EAAEvB,kBAAkB;IAC1BwB,QAAQ,EAAEnB,YAAY;IACtBoB,MAAM,EAAEnB,UAAU;IAClBoB,WAAW,EAAE,IAAI;IACjBC,KAAK,EAAEC,MAAM,CAACC,KAAK;IACnBC,oBAAoB,EAAEnB;EAC1B,CAAC;EACDoB,UAAU,EAAE;IACRC,GAAG,EAAE;MACDC,QAAQ,EAAE,CACNpC,IAAI,CAACqC,GAAG,CAAChC,eAAe,CAACiC,GAAG,EAAE,MAAM;QAChC,OAAOrC,YAAY,CAACsC,IAAI,CAAClC,eAAe,CAACmC,QAAQ,CAAC;MACtD,CAAC,CAAC,EACFxC,IAAI,CAACqC,GAAG,CAAC/B,qBAAqB,CAACgC,GAAG,EAAE,MAAM;QACtC,OAAOrC,YAAY,CAACsC,IAAI,CAACjC,qBAAqB,CAACkC,QAAQ,CAAC;MAC5D,CAAC,CAAC,EACFxC,IAAI,CAACqC,GAAG,CAACjC,+BAA+B,CAACkC,GAAG,EAAE,MAAM;QAChD,OAAOrC,YAAY,CAACsC,IAAI,CAACnC,+BAA+B,CAACoC,QAAQ,CAAC;MACtE,CAAC,CAAC,EACFxC,IAAI,CAACqC,GAAG,CAAC9B,2BAA2B,CAAC+B,GAAG,EAAE,MAAM;QAC5C,OAAOrC,YAAY,CAACsC,IAAI,CAAChC,2BAA2B,CAACiC,QAAQ,CAAC;MAClE,CAAC,CAAC;IAEV;EACJ,CAAC;EACDC,MAAM,EAAEhB,IAAI,IAAI;IACZ,oBAAO1B,KAAA,CAAA2C,aAAA,CAACxC,cAAc,EAAKuB,IAAO,CAAC;EACvC;AACJ,CAAC;AAED,eAAeH,IAAI;AAEnB,OAAO,MAAMqB,KAA+C,GAAG;EAC3DC,IAAI,EAAE,MAAAA,CAAO;IAAEC;EAAc,CAAC,KAAK;IAC/B,MAAMC,MAAM,GAAGhD,MAAM,CAAC+C,aAAa,CAAC;IAEpC,MAAME,iBAAiB,GAAG,MAAMD,MAAM,CAACE,UAAU,CAC7C,QAAQ,EACR;MAAEC,IAAI,EAAE;IAAe,CAAC,EACxB;MAAEC,SAAS,EAAE,MAAMJ,MAAM,CAACE,UAAU,CAAC,UAAU;IAAE,CACrD,CAAC;IACD,MAAMnD,SAAS,CAACsD,KAAK,CAACJ,iBAAiB,CAAC;EAC5C;AACJ,CAAC","ignoreList":[]}
|
|
@@ -23,7 +23,7 @@ export const basic = {
|
|
|
23
23
|
expect(await canvas.findByText('Are there any next steps defined?')).toBeInTheDocument();
|
|
24
24
|
}
|
|
25
25
|
};
|
|
26
|
-
|
|
26
|
+
const meta = {
|
|
27
27
|
title: 'Elements/ContentSidebar/BoxAISidebar/tests/visual-regression-tests',
|
|
28
28
|
component: ContentSidebar,
|
|
29
29
|
args: {
|
|
@@ -90,4 +90,5 @@ export default {
|
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
92
|
};
|
|
93
|
+
export default meta;
|
|
93
94
|
//# sourceMappingURL=BoxAISidebar-visual.stories.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BoxAISidebar-visual.stories.js","names":["expect","within","http","HttpResponse","ContentSidebar","mockFileRequest","mockUserRequest","mockFeatures","basic","play","canvasElement","canvas","clearButton","findByRole","name","toBeInTheDocument","findByText","findByPlaceholderText","title","component","args","features","fileId","global","FILE_ID","token","TOKEN","boxAISidebarProps","createSessionRequest","encodedSession","fetchTimeout","initial","getAgentConfig","getAIStudioAgents","getAnswer","getAnswerStreaming","getSuggestedQuestions","hostAppName","isAgentSelectorEnabled","isAIStudioAgentSelectorEnabled","isCitationsEnabled","isFeedbackEnabled","isDebugModeEnabled","isIntelligentQueryMode","isMarkdownEnabled","isResetChatEnabled","isStopResponseEnabled","isStreamingEnabled","items","id","type","fileType","status","localizedQuestions","label","prompt","recordAction","parameters","msw","handlers","get","url","json","response"],"sources":["../../../../../src/elements/content-sidebar/stories/tests/BoxAISidebar-visual.stories.tsx"],"sourcesContent":["import { expect, within } from '@storybook/test';\nimport { type StoryObj } from '@storybook/react';\nimport { http, HttpResponse } from 'msw';\nimport ContentSidebar from '../../ContentSidebar';\nimport BoxAISidebar from '../../BoxAISidebar';\nimport { mockFileRequest, mockUserRequest } from '../../../common/__mocks__/mockRequests';\n\nconst mockFeatures = {\n 'boxai.sidebar.enabled': true,\n};\n\nexport const basic: StoryObj<typeof BoxAISidebar> = {\n play: async ({ canvasElement }) => {\n const canvas = within(canvasElement);\n const clearButton = await canvas.findByRole('button', { name: 'Clear conversation' });\n expect(clearButton).toBeInTheDocument();\n\n expect(await canvas.findByText(/Welcome to Box AI/i)).toBeInTheDocument();\n expect(await canvas.findByText('Chat cleared when you close content')).toBeInTheDocument();\n expect(await canvas.findByPlaceholderText('Ask Box AI')).toBeInTheDocument();\n expect(await canvas.findByText('Summarize this document')).toBeInTheDocument();\n expect(await canvas.findByText('What are the key takeaways?')).toBeInTheDocument();\n expect(await canvas.findByText('How can this document be improved?')).toBeInTheDocument();\n expect(await canvas.findByText('Are there any next steps defined?')).toBeInTheDocument();\n },\n};\n\
|
|
1
|
+
{"version":3,"file":"BoxAISidebar-visual.stories.js","names":["expect","within","http","HttpResponse","ContentSidebar","mockFileRequest","mockUserRequest","mockFeatures","basic","play","canvasElement","canvas","clearButton","findByRole","name","toBeInTheDocument","findByText","findByPlaceholderText","meta","title","component","args","features","fileId","global","FILE_ID","token","TOKEN","boxAISidebarProps","createSessionRequest","encodedSession","fetchTimeout","initial","getAgentConfig","getAIStudioAgents","getAnswer","getAnswerStreaming","getSuggestedQuestions","hostAppName","isAgentSelectorEnabled","isAIStudioAgentSelectorEnabled","isCitationsEnabled","isFeedbackEnabled","isDebugModeEnabled","isIntelligentQueryMode","isMarkdownEnabled","isResetChatEnabled","isStopResponseEnabled","isStreamingEnabled","items","id","type","fileType","status","localizedQuestions","label","prompt","recordAction","parameters","msw","handlers","get","url","json","response"],"sources":["../../../../../src/elements/content-sidebar/stories/tests/BoxAISidebar-visual.stories.tsx"],"sourcesContent":["import { expect, within } from '@storybook/test';\nimport { type StoryObj, type Meta } from '@storybook/react';\nimport { http, HttpResponse } from 'msw';\nimport type { HttpHandler } from 'msw';\nimport ContentSidebar from '../../ContentSidebar';\nimport BoxAISidebar from '../../BoxAISidebar';\nimport { mockFileRequest, mockUserRequest } from '../../../common/__mocks__/mockRequests';\n\nconst mockFeatures = {\n 'boxai.sidebar.enabled': true,\n};\n\nexport const basic: StoryObj<typeof BoxAISidebar> = {\n play: async ({ canvasElement }) => {\n const canvas = within(canvasElement);\n const clearButton = await canvas.findByRole('button', { name: 'Clear conversation' });\n expect(clearButton).toBeInTheDocument();\n\n expect(await canvas.findByText(/Welcome to Box AI/i)).toBeInTheDocument();\n expect(await canvas.findByText('Chat cleared when you close content')).toBeInTheDocument();\n expect(await canvas.findByPlaceholderText('Ask Box AI')).toBeInTheDocument();\n expect(await canvas.findByText('Summarize this document')).toBeInTheDocument();\n expect(await canvas.findByText('What are the key takeaways?')).toBeInTheDocument();\n expect(await canvas.findByText('How can this document be improved?')).toBeInTheDocument();\n expect(await canvas.findByText('Are there any next steps defined?')).toBeInTheDocument();\n },\n};\n\nconst meta: Meta<typeof ContentSidebar> & { parameters: { msw: { handlers: HttpHandler[] } } } = {\n title: 'Elements/ContentSidebar/BoxAISidebar/tests/visual-regression-tests',\n component: ContentSidebar,\n args: {\n features: mockFeatures,\n fileId: global.FILE_ID,\n token: global.TOKEN,\n boxAISidebarProps: {\n createSessionRequest: () => ({ encodedSession: '1234' }),\n fetchTimeout: { initial: 20000 },\n getAgentConfig: () => ({}),\n getAIStudioAgents: () => ({}),\n getAnswer: () => ({}),\n getAnswerStreaming: () => ({}),\n getSuggestedQuestions: null,\n hostAppName: 'storybook-test',\n isAgentSelectorEnabled: false,\n isAIStudioAgentSelectorEnabled: true,\n isCitationsEnabled: true,\n isFeedbackEnabled: true,\n isDebugModeEnabled: true,\n isIntelligentQueryMode: false,\n isMarkdownEnabled: true,\n isResetChatEnabled: true,\n isStopResponseEnabled: true,\n isStreamingEnabled: false,\n items: [{ id: '123', name: 'Document (PDF).pdf', type: 'file', fileType: 'pdf', status: 'supported' }],\n localizedQuestions: [\n {\n id: 'suggested-question-1',\n label: 'Summarize this document',\n prompt: 'Summarize this document',\n },\n {\n id: 'suggested-question-2',\n label: 'What are the key takeaways?',\n prompt: 'What are the key takeaways?',\n },\n {\n id: 'suggested-question-3',\n label: 'How can this document be improved?',\n prompt: 'How can this document be improved?',\n },\n {\n id: 'suggested-question-4',\n label: 'Are there any next steps defined?',\n prompt: 'Are there any next steps defined?',\n },\n ],\n recordAction: () => ({}),\n },\n },\n parameters: {\n msw: {\n handlers: [\n http.get(mockUserRequest.url, () => {\n return HttpResponse.json(mockUserRequest.response);\n }),\n http.get(mockFileRequest.url, () => {\n return HttpResponse.json(mockFileRequest.response);\n }),\n ],\n },\n },\n};\n\nexport default meta;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -28,7 +28,7 @@ export const fileVersion = {
|
|
|
28
28
|
fileId: testFileIds.FILE_ID_DOC_VERSIONED
|
|
29
29
|
}
|
|
30
30
|
};
|
|
31
|
-
|
|
31
|
+
const meta = {
|
|
32
32
|
title: 'Elements/ContentSidebar/tests/e2e',
|
|
33
33
|
component: ContentSidebar,
|
|
34
34
|
args: defaultArgs,
|
|
@@ -40,4 +40,5 @@ export default {
|
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
42
|
};
|
|
43
|
+
export default meta;
|
|
43
44
|
//# sourceMappingURL=ContentSidebar-e2e.stories.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContentSidebar-e2e.stories.js","names":["http","HttpResponse","ContentSidebar","mockFileRequest","testFileIds","defaultArgs","detailsSidebarProps","hasAccessStats","hasClassification","hasNotices","hasProperties","hasRetentionPolicy","features","global","FEATURE_FLAGS","fileId","FILE_ID","hasActivityFeed","hasMetadata","hasSkills","hasVersions","token","TOKEN","basic","args","FILE_ID_SKILLS","fileVersion","FILE_ID_DOC_VERSIONED","title","component","parameters","msw","handlers","get","url","json","response"],"sources":["../../../../../src/elements/content-sidebar/stories/tests/ContentSidebar-e2e.stories.tsx"],"sourcesContent":["// @flow\nimport { http, HttpResponse } from 'msw';\nimport ContentSidebar from '../../ContentSidebar';\nimport { mockFileRequest } from '../__mocks__/ContentSidebarMocks';\nimport { testFileIds } from '../../../../../test/support/constants';\n\nconst defaultArgs = {\n detailsSidebarProps: {\n hasAccessStats: true,\n hasClassification: true,\n hasNotices: true,\n hasProperties: true,\n hasRetentionPolicy: true,\n },\n features: global.FEATURE_FLAGS,\n fileId: global.FILE_ID,\n hasActivityFeed: true,\n hasMetadata: true,\n hasSkills: true,\n hasVersions: true,\n token: global.TOKEN,\n};\n\nexport const basic = {\n args: {\n fileId: testFileIds.FILE_ID_SKILLS,\n },\n};\n\nexport const fileVersion = {\n args: {\n fileId: testFileIds.FILE_ID_DOC_VERSIONED,\n },\n};\n\
|
|
1
|
+
{"version":3,"file":"ContentSidebar-e2e.stories.js","names":["http","HttpResponse","ContentSidebar","mockFileRequest","testFileIds","defaultArgs","detailsSidebarProps","hasAccessStats","hasClassification","hasNotices","hasProperties","hasRetentionPolicy","features","global","FEATURE_FLAGS","fileId","FILE_ID","hasActivityFeed","hasMetadata","hasSkills","hasVersions","token","TOKEN","basic","args","FILE_ID_SKILLS","fileVersion","FILE_ID_DOC_VERSIONED","meta","title","component","parameters","msw","handlers","get","url","json","response"],"sources":["../../../../../src/elements/content-sidebar/stories/tests/ContentSidebar-e2e.stories.tsx"],"sourcesContent":["// @flow\nimport { http, HttpResponse } from 'msw';\nimport type { HttpHandler } from 'msw';\nimport type { Meta } from '@storybook/react';\nimport ContentSidebar from '../../ContentSidebar';\nimport { mockFileRequest } from '../__mocks__/ContentSidebarMocks';\nimport { testFileIds } from '../../../../../test/support/constants';\n\nconst defaultArgs = {\n detailsSidebarProps: {\n hasAccessStats: true,\n hasClassification: true,\n hasNotices: true,\n hasProperties: true,\n hasRetentionPolicy: true,\n },\n features: global.FEATURE_FLAGS,\n fileId: global.FILE_ID,\n hasActivityFeed: true,\n hasMetadata: true,\n hasSkills: true,\n hasVersions: true,\n token: global.TOKEN,\n};\n\nexport const basic = {\n args: {\n fileId: testFileIds.FILE_ID_SKILLS,\n },\n};\n\nexport const fileVersion = {\n args: {\n fileId: testFileIds.FILE_ID_DOC_VERSIONED,\n },\n};\n\nconst meta: Meta<typeof ContentSidebar> & { parameters: { msw: { handlers: HttpHandler[] } } } = {\n title: 'Elements/ContentSidebar/tests/e2e',\n component: ContentSidebar,\n args: defaultArgs,\n parameters: {\n msw: {\n handlers: [\n http.get(mockFileRequest.url, () => {\n return HttpResponse.json(mockFileRequest.response);\n }),\n ],\n },\n },\n};\n\nexport default meta;\n"],"mappings":"AACA,SAASA,IAAI,EAAEC,YAAY,QAAQ,KAAK;AAGxC,OAAOC,cAAc,MAAM,sBAAsB;AACjD,SAASC,eAAe,QAAQ,kCAAkC;AAClE,SAASC,WAAW,QAAQ,uCAAuC;AAEnE,MAAMC,WAAW,GAAG;EAChBC,mBAAmB,EAAE;IACjBC,cAAc,EAAE,IAAI;IACpBC,iBAAiB,EAAE,IAAI;IACvBC,UAAU,EAAE,IAAI;IAChBC,aAAa,EAAE,IAAI;IACnBC,kBAAkB,EAAE;EACxB,CAAC;EACDC,QAAQ,EAAEC,MAAM,CAACC,aAAa;EAC9BC,MAAM,EAAEF,MAAM,CAACG,OAAO;EACtBC,eAAe,EAAE,IAAI;EACrBC,WAAW,EAAE,IAAI;EACjBC,SAAS,EAAE,IAAI;EACfC,WAAW,EAAE,IAAI;EACjBC,KAAK,EAAER,MAAM,CAACS;AAClB,CAAC;AAED,OAAO,MAAMC,KAAK,GAAG;EACjBC,IAAI,EAAE;IACFT,MAAM,EAAEX,WAAW,CAACqB;EACxB;AACJ,CAAC;AAED,OAAO,MAAMC,WAAW,GAAG;EACvBF,IAAI,EAAE;IACFT,MAAM,EAAEX,WAAW,CAACuB;EACxB;AACJ,CAAC;AAED,MAAMC,IAAwF,GAAG;EAC7FC,KAAK,EAAE,mCAAmC;EAC1CC,SAAS,EAAE5B,cAAc;EACzBsB,IAAI,EAAEnB,WAAW;EACjB0B,UAAU,EAAE;IACRC,GAAG,EAAE;MACDC,QAAQ,EAAE,CACNjC,IAAI,CAACkC,GAAG,CAAC/B,eAAe,CAACgC,GAAG,EAAE,MAAM;QAChC,OAAOlC,YAAY,CAACmC,IAAI,CAACjC,eAAe,CAACkC,QAAQ,CAAC;MACtD,CAAC,CAAC;IAEV;EACJ;AACJ,CAAC;AAED,eAAeT,IAAI","ignoreList":[]}
|
|
@@ -726,7 +726,7 @@ export const EditSinglelevelTaxonomy = _objectSpread(_objectSpread({}, ViewSingl
|
|
|
726
726
|
expect(greenOption).toHaveAttribute('aria-selected', 'false');
|
|
727
727
|
}
|
|
728
728
|
});
|
|
729
|
-
|
|
729
|
+
const meta = {
|
|
730
730
|
title: 'Elements/ContentSidebar/MetadataSidebarRedesign/tests/visual-regression-tests',
|
|
731
731
|
component: ContentSidebar,
|
|
732
732
|
args: {
|
|
@@ -743,4 +743,5 @@ export default {
|
|
|
743
743
|
}
|
|
744
744
|
}
|
|
745
745
|
};
|
|
746
|
+
export default meta;
|
|
746
747
|
//# sourceMappingURL=MetadataSidebarRedesign-visual.stories.js.map
|