@clickview/exchange 0.62.0-rc.0 → 0.62.0-rc.1
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/.vite/manifest.json +531 -531
- package/dist/bundles.json +1 -1
- package/dist/css/Crtlho0p.chunk.css +8 -0
- package/dist/en.json +1 -1
- package/dist/scripts/{cIPkkuhG.chunk.js → 1iKkdpYv.chunk.js} +2 -2
- package/dist/scripts/{cIPkkuhG.chunk.js.map → 1iKkdpYv.chunk.js.map} +1 -1
- package/dist/scripts/{uPFXIvcK2.chunk.js → 8pXw5z942.chunk.js} +2 -2
- package/dist/scripts/{uPFXIvcK2.chunk.js.map → 8pXw5z942.chunk.js.map} +1 -1
- package/dist/scripts/{DVVx1aiS2.chunk.js → B7m3cCi42.chunk.js} +2 -2
- package/dist/scripts/{DVVx1aiS2.chunk.js.map → B7m3cCi42.chunk.js.map} +1 -1
- package/dist/scripts/{DBJfKQKx.chunk.js → BAN6QE-X.chunk.js} +2 -2
- package/dist/scripts/{DBJfKQKx.chunk.js.map → BAN6QE-X.chunk.js.map} +1 -1
- package/dist/scripts/{YGLkoFLc.chunk.js → BHbt9wzx.chunk.js} +2 -2
- package/dist/scripts/{YGLkoFLc.chunk.js.map → BHbt9wzx.chunk.js.map} +1 -1
- package/dist/scripts/{DeevL6eQ.chunk.js → BINz0dmF.chunk.js} +2 -2
- package/dist/scripts/{DeevL6eQ.chunk.js.map → BINz0dmF.chunk.js.map} +1 -1
- package/dist/scripts/{Dg-h5qnR.chunk.js → BPYdRA7H.chunk.js} +2 -2
- package/dist/scripts/{Dg-h5qnR.chunk.js.map → BPYdRA7H.chunk.js.map} +1 -1
- package/dist/scripts/{CkH6ird3.chunk.js → BS8sYAAh.chunk.js} +2 -2
- package/dist/scripts/{CkH6ird3.chunk.js.map → BS8sYAAh.chunk.js.map} +1 -1
- package/dist/scripts/{CKrB9r9w.chunk.js → BaSi1pig.chunk.js} +2 -2
- package/dist/scripts/{CKrB9r9w.chunk.js.map → BaSi1pig.chunk.js.map} +1 -1
- package/dist/scripts/{BRQhDr-02.chunk.js → BbrEvwAi2.chunk.js} +2 -2
- package/dist/scripts/{BRQhDr-02.chunk.js.map → BbrEvwAi2.chunk.js.map} +1 -1
- package/dist/scripts/{Ct8ETEOn2.chunk.js → Bi8itw8v2.chunk.js} +2 -2
- package/dist/scripts/{Ct8ETEOn2.chunk.js.map → Bi8itw8v2.chunk.js.map} +1 -1
- package/dist/scripts/{Co_6cSBX2.chunk.js → BlOKamx72.chunk.js} +2 -2
- package/dist/scripts/{Co_6cSBX2.chunk.js.map → BlOKamx72.chunk.js.map} +1 -1
- package/dist/scripts/{B0hNKKDw2.chunk.js → BobZ5p_m2.chunk.js} +2 -2
- package/dist/scripts/{B0hNKKDw2.chunk.js.map → BobZ5p_m2.chunk.js.map} +1 -1
- package/dist/scripts/{Nx0q4bij.chunk.js → BsLLiG1-.chunk.js} +2 -2
- package/dist/scripts/{Nx0q4bij.chunk.js.map → BsLLiG1-.chunk.js.map} +1 -1
- package/dist/scripts/{D0H6Hjd-2.chunk.js → BtdygabL2.chunk.js} +2 -2
- package/dist/scripts/{D0H6Hjd-2.chunk.js.map → BtdygabL2.chunk.js.map} +1 -1
- package/dist/scripts/{UjMbny4R.chunk.js → Bue5_bLM.chunk.js} +2 -2
- package/dist/scripts/{UjMbny4R.chunk.js.map → Bue5_bLM.chunk.js.map} +1 -1
- package/dist/scripts/{DBKlntFN2.chunk.js → BvamDkjt2.chunk.js} +2 -2
- package/dist/scripts/{DBKlntFN2.chunk.js.map → BvamDkjt2.chunk.js.map} +1 -1
- package/dist/scripts/{NInuYe7b2.chunk.js → BzJLc19T2.chunk.js} +2 -2
- package/dist/scripts/{NInuYe7b2.chunk.js.map → BzJLc19T2.chunk.js.map} +1 -1
- package/dist/scripts/{DyRGf1o8.chunk.js → C03mMZ4k.chunk.js} +2 -2
- package/dist/scripts/{DyRGf1o8.chunk.js.map → C03mMZ4k.chunk.js.map} +1 -1
- package/dist/scripts/{BV2vTX2L.chunk.js → C2AXrtJf.chunk.js} +2 -2
- package/dist/scripts/{BV2vTX2L.chunk.js.map → C2AXrtJf.chunk.js.map} +1 -1
- package/dist/scripts/{Fu0bLEzl2.chunk.js → C3Hw2TpW2.chunk.js} +2 -2
- package/dist/scripts/{Fu0bLEzl2.chunk.js.map → C3Hw2TpW2.chunk.js.map} +1 -1
- package/dist/scripts/{DoTtsl0X.chunk.js → CKL4ViMC.chunk.js} +2 -2
- package/dist/scripts/{DoTtsl0X.chunk.js.map → CKL4ViMC.chunk.js.map} +1 -1
- package/dist/scripts/{DtYC8Udi2.chunk.js → CKZJ2qae2.chunk.js} +2 -2
- package/dist/scripts/{DtYC8Udi2.chunk.js.map → CKZJ2qae2.chunk.js.map} +1 -1
- package/dist/scripts/{CyAM5o2e.chunk.js → CK_CN_mA.chunk.js} +2 -2
- package/dist/scripts/{CyAM5o2e.chunk.js.map → CK_CN_mA.chunk.js.map} +1 -1
- package/dist/scripts/{B6mSouu5.chunk.js → CL9SkODG.chunk.js} +2 -2
- package/dist/scripts/{B6mSouu5.chunk.js.map → CL9SkODG.chunk.js.map} +1 -1
- package/dist/scripts/{BHKm8WQq2.chunk.js → Ca_-2JTE2.chunk.js} +2 -2
- package/dist/scripts/{BHKm8WQq2.chunk.js.map → Ca_-2JTE2.chunk.js.map} +1 -1
- package/dist/scripts/{C7OCN_w_.chunk.js → CfNYdg0m.chunk.js} +2 -2
- package/dist/scripts/{C7OCN_w_.chunk.js.map → CfNYdg0m.chunk.js.map} +1 -1
- package/dist/scripts/{CUdaR862.chunk.js → Ct_4zyE3.chunk.js} +2 -2
- package/dist/scripts/{CUdaR862.chunk.js.map → Ct_4zyE3.chunk.js.map} +1 -1
- package/dist/scripts/{RiPZGw_q2.chunk.js → CxUrOnxW2.chunk.js} +2 -2
- package/dist/scripts/{RiPZGw_q2.chunk.js.map → CxUrOnxW2.chunk.js.map} +1 -1
- package/dist/scripts/{BJxTZJOX.chunk.js → DFXpg6rF.chunk.js} +2 -2
- package/dist/scripts/{BJxTZJOX.chunk.js.map → DFXpg6rF.chunk.js.map} +1 -1
- package/dist/scripts/{CKNdXwxe2.chunk.js → DG6L7zHU2.chunk.js} +2 -2
- package/dist/scripts/{CKNdXwxe2.chunk.js.map → DG6L7zHU2.chunk.js.map} +1 -1
- package/dist/scripts/{CvQQNf_J2.chunk.js → DKz4jhnr2.chunk.js} +2 -2
- package/dist/scripts/{CvQQNf_J2.chunk.js.map → DKz4jhnr2.chunk.js.map} +1 -1
- package/dist/scripts/{BOvQpQ21.chunk.js → DSZkTUVU.chunk.js} +2 -2
- package/dist/scripts/{BOvQpQ21.chunk.js.map → DSZkTUVU.chunk.js.map} +1 -1
- package/dist/scripts/{D5qMnGHT2.chunk.js → D_k-Kl3-2.chunk.js} +2 -2
- package/dist/scripts/{D5qMnGHT2.chunk.js.map → D_k-Kl3-2.chunk.js.map} +1 -1
- package/dist/scripts/{Dp0gbhZx2.chunk.js → DfOgl-0-2.chunk.js} +2 -2
- package/dist/scripts/{Dp0gbhZx2.chunk.js.map → DfOgl-0-2.chunk.js.map} +1 -1
- package/dist/scripts/{CeCXhgoJ.chunk.js → DkB0qBxI.chunk.js} +2 -2
- package/dist/scripts/{CeCXhgoJ.chunk.js.map → DkB0qBxI.chunk.js.map} +1 -1
- package/dist/scripts/{CeHHO1Hv.chunk.js → DmVXt6_V.chunk.js} +2 -2
- package/dist/scripts/{CeHHO1Hv.chunk.js.map → DmVXt6_V.chunk.js.map} +1 -1
- package/dist/scripts/{aDegERgV2.chunk.js → DqM6hYTJ2.chunk.js} +2 -2
- package/dist/scripts/{aDegERgV2.chunk.js.map → DqM6hYTJ2.chunk.js.map} +1 -1
- package/dist/scripts/{BPgKK-d32.chunk.js → DsHiClyc2.chunk.js} +2 -2
- package/dist/scripts/{BPgKK-d32.chunk.js.map → DsHiClyc2.chunk.js.map} +1 -1
- package/dist/scripts/{D9zlZIWi2.chunk.js → DuPL-nK72.chunk.js} +2 -2
- package/dist/scripts/{D9zlZIWi2.chunk.js.map → DuPL-nK72.chunk.js.map} +1 -1
- package/dist/scripts/{ZSP3Vfha2.chunk.js → EIJf9JbR2.chunk.js} +2 -2
- package/dist/scripts/{ZSP3Vfha2.chunk.js.map → EIJf9JbR2.chunk.js.map} +1 -1
- package/dist/scripts/{CqNKzFA4.chunk.js → EO2xPuAQ.chunk.js} +2 -2
- package/dist/scripts/{CqNKzFA4.chunk.js.map → EO2xPuAQ.chunk.js.map} +1 -1
- package/dist/scripts/{o2htB_49.chunk.js → F1LOVRO_.chunk.js} +2 -2
- package/dist/scripts/{o2htB_49.chunk.js.map → F1LOVRO_.chunk.js.map} +1 -1
- package/dist/scripts/{BggsU83p2.chunk.js → G-hiM6b42.chunk.js} +2 -2
- package/dist/scripts/{BggsU83p2.chunk.js.map → G-hiM6b42.chunk.js.map} +1 -1
- package/dist/scripts/{B0VKYPiu.chunk.js → MYu2AEsL.chunk.js} +2 -2
- package/dist/scripts/{B0VKYPiu.chunk.js.map → MYu2AEsL.chunk.js.map} +1 -1
- package/dist/scripts/{B9Rb6IIb.chunk.js → NtrZI2Ef.chunk.js} +2 -2
- package/dist/scripts/{B9Rb6IIb.chunk.js.map → NtrZI2Ef.chunk.js.map} +1 -1
- package/dist/scripts/{CRHkMr9_2.chunk.js → OBYDGOgI2.chunk.js} +2 -2
- package/dist/scripts/{CRHkMr9_2.chunk.js.map → OBYDGOgI2.chunk.js.map} +1 -1
- package/dist/scripts/{zp5MUThO.chunk.js → Pixwk-h-.chunk.js} +2 -2
- package/dist/scripts/{zp5MUThO.chunk.js.map → Pixwk-h-.chunk.js.map} +1 -1
- package/dist/scripts/{Ds3cFntF2.chunk.js → SDRXIwM22.chunk.js} +3 -3
- package/dist/scripts/{Ds3cFntF2.chunk.js.map → SDRXIwM22.chunk.js.map} +1 -1
- package/dist/scripts/{C1u2qBZg2.chunk.js → U0UyGd9c2.chunk.js} +2 -2
- package/dist/scripts/{C1u2qBZg2.chunk.js.map → U0UyGd9c2.chunk.js.map} +1 -1
- package/dist/scripts/{CYUx40jk.chunk.js → amjwjus3.chunk.js} +2 -2
- package/dist/scripts/{CYUx40jk.chunk.js.map → amjwjus3.chunk.js.map} +1 -1
- package/dist/scripts/{app-DDrsm5nt.js → app-BGxmHvGl.js} +3 -3
- package/dist/scripts/{app-DDrsm5nt.js.map → app-BGxmHvGl.js.map} +1 -1
- package/dist/scripts/{CgGl8jzo.chunk.js → eUKFc6dK.chunk.js} +2 -2
- package/dist/scripts/{CgGl8jzo.chunk.js.map → eUKFc6dK.chunk.js.map} +1 -1
- package/dist/scripts/{CWsmm40y.chunk.js → l7UAnIb0.chunk.js} +2 -2
- package/dist/scripts/{CWsmm40y.chunk.js.map → l7UAnIb0.chunk.js.map} +1 -1
- package/dist/scripts/{BsSKrRku2.chunk.js → nMyWveQA2.chunk.js} +2 -2
- package/dist/scripts/{BsSKrRku2.chunk.js.map → nMyWveQA2.chunk.js.map} +1 -1
- package/dist/scripts/{CKUk2HqE.chunk.js → pOL5_XNC.chunk.js} +2 -2
- package/dist/scripts/{CKUk2HqE.chunk.js.map → pOL5_XNC.chunk.js.map} +1 -1
- package/dist/scripts/{eLmgigsW.chunk.js → sViLex0Q.chunk.js} +2 -2
- package/dist/scripts/{eLmgigsW.chunk.js.map → sViLex0Q.chunk.js.map} +1 -1
- package/dist/scripts/{Xs1Bv1h-.chunk.js → vvCGyl_q.chunk.js} +2 -2
- package/dist/scripts/{Xs1Bv1h-.chunk.js.map → vvCGyl_q.chunk.js.map} +1 -1
- package/dist/scripts/{BijIuzIs2.chunk.js → xEGWFFpD2.chunk.js} +2 -2
- package/dist/scripts/{BijIuzIs2.chunk.js.map → xEGWFFpD2.chunk.js.map} +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NInuYe7b2.chunk.js","names":[],"sources":["../../../../libs/shared/src/utils/TreeHelper.ts","../../../../libs/shared/src/components/tree/tree.module.scss","../../../../libs/shared/src/components/tree/TreeNodeText.tsx","../../../../libs/shared/src/components/tree/TreeNode.tsx","../../../../libs/shared/src/components/tree/Tree.tsx","../../../../libs/shared/src/apps/libraries/components/add-to-library-form/AddToLibraryForm.tsx","../../../../libs/shared/src/apps/libraries/utils/LibraryHelper.ts","../../../../libs/shared/src/apps/libraries/validation/AddToLibraryValidationSchema.ts","../../../../libs/shared/src/enums/LibraryRequestObjectType.ts","../../../../libs/shared/src/utils/error-message-helper/ErrorMessageHelper.ts","../../../../libs/shared/src/utils/LaunchUrlHelper.ts","../../../../libs/shared/src/apps/libraries/views/add-to-library/AddToLibraryView.tsx"],"sourcesContent":["import { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { BaseObject, MasterNestedObject } from 'libs/shared/interfaces';\nimport { BaseTree } from 'libs/shared/interfaces';\n\nfunction _find<T extends BaseTree<BaseObject>>(\n node: T,\n id: string | number,\n parents: T[]\n): [ T | null, T[] ] {\n if (TextHelper.isEqual(node.id, id))\n return [ node, parents ];\n\n const children = node.children;\n\n if (!children || !children.length)\n return [ null, null ];\n\n for (let i = 0; i < children.length; i++) {\n const [ child, foundParents ] = _find(children[i] as T, id, [ ...parents, node ]);\n\n if (child)\n return [ child, foundParents ];\n }\n\n return [ null, null ];\n}\n\nexport const DEFAULT_MAX_DEPTH = 7;\n\nexport const TreeHelper = {\n find<T extends BaseTree<BaseObject>>(tree: T, id: string | number): T | null {\n if (!tree || !tree.children || !tree.children.length)\n return;\n\n for (let j = 0; j < tree.children.length; j++) {\n const [child] = _find(tree.children[j] as T, id, []);\n \n if (child)\n return child;\n }\n },\n\n getPath<T extends BaseTree<BaseObject>>(tree: T, id: string | number): T[] {\n if (!tree || !tree.children || !tree.children.length)\n return;\n\n for (let j = 0; j < tree.children.length; j++) {\n const [ , path ] = _find(tree.children[j] as T, id, []);\n \n if (path?.length)\n return path;\n }\n },\n\n getParent<T extends BaseTree<BaseObject>>(tree: T, id: string | number): T {\n const path = TreeHelper.getPath(tree, id);\n\n if (!path?.length)\n return null;\n\n return path[path.length - 1];\n },\n\n convertNestedObjectToTree<T extends BaseObject>(nestedObject: MasterNestedObject<T>): BaseTree<T> {\n const node: BaseTree<T> = {\n ...nestedObject.data,\n children: nestedObject.children\n };\n\n if (node.children?.length)\n node.children = node.children.map(TreeHelper.convertNestedObjectToTree);\n\n return node;\n },\n\n findDepth<T extends MasterNestedObject<BaseObject>>(nodes: T[], targetId: string, currentDepth: number = 0): number {\n if (!nodes || nodes.length === 0) {\n return 0;\n }\n\n let depth = 0;\n\n for (const node of nodes) {\n if (node.data?.id?.toString() === targetId.toString()) {\n return currentDepth;\n }\n\n const childDepth = TreeHelper.findDepth(node.children, targetId, currentDepth + 1);\n\n if (childDepth > 0) {\n depth = childDepth;\n break;\n }\n }\n\n return depth;\n },\n\n findMaxChildDepth<T extends BaseObject>(nodes: MasterNestedObject<T>[], currentDepth: number = 0): number {\n if (!nodes || nodes.length === 0) {\n return currentDepth;\n }\n \n let deepestLevel = currentDepth;\n \n for (const node of nodes) {\n const childLevel = TreeHelper.findMaxChildDepth(node.children, currentDepth + 1);\n deepestLevel = Math.max(deepestLevel, childLevel);\n }\n \n return deepestLevel;\n },\n\n findTargetNode<T extends BaseObject>(nodes: MasterNestedObject<T>[], targetId: string): MasterNestedObject<T> | null {\n if (!nodes || nodes.length === 0) {\n return null;\n }\n \n for (const node of nodes) {\n if (node.data?.id?.toString() === targetId.toString()) {\n return node;\n }\n \n const result = TreeHelper.findTargetNode(node.children, targetId);\n if (result !== null) {\n return result;\n }\n }\n \n return null;\n },\n\n isMaxDepth<T extends MasterNestedObject<BaseObject>>(\n nodes: T[],\n sourceId: string,\n targetId: string,\n maxDepth: number = DEFAULT_MAX_DEPTH\n ): boolean {\n const sourceTree = TreeHelper.findTargetNode(nodes, sourceId);\n const maxChildDepth = TreeHelper.findMaxChildDepth(sourceTree.children);\n const targetDepth = TreeHelper.findDepth(nodes, targetId);\n \n return maxChildDepth + targetDepth >= maxDepth;\n },\n\n flatten<T>(\n tree: BaseTree<T>\n ): T[] {\n if (!tree)\n return [];\n\n const nodes: T[] = [];\n\n function pushNode(node: BaseTree<T>): void {\n nodes.push(ObjectHelper.omit(node, ['children']));\n node.children.forEach(pushNode);\n }\n\n tree.children.forEach(pushNode);\n\n return nodes;\n }\n};\n","$chevron-container-size: $cv-svg-size;\n$chevron-visible-size: calc($chevron-container-size / 3); // The actual chevron is 1/3rd of the container size\n$chevron-root-padding: map-get($spacers, 1);\n$text-root-padding: $chevron-root-padding + $chevron-container-size;\n\n@mixin nestedFolderTree($from, $to) {\n :local .tree {\n .text {\n padding-left: $text-root-padding + ($from * ($chevron-container-size - $chevron-visible-size));\n }\n\n .chevron {\n right: auto;\n left: $chevron-root-padding + ($from * ($chevron-container-size - $chevron-visible-size));\n }\n\n @if $from != $to {\n @include nestedFolderTree($from + 1, $to)\n }\n }\n}\n\n@include nestedFolderTree(0, 20);\n\n:local {\n .chevron {\n display: inline-block;\n position: absolute;\n color: black;\n cursor: pointer;\n top: 50%;\n margin-top: -$cv-svg-size-sm*0.5;\n right: 100%;\n }\n\n .text {\n overflow-wrap: break-word;\n padding-right: $cv-svg-size;\n cursor: pointer;\n\n &.disabled {\n cursor: not-allowed;\n }\n }\n\n .root {\n .chevron {\n left: $chevron-root-padding;\n }\n\n .text {\n padding-left: $text-root-padding;\n }\n }\n\n .selected {\n font-weight: 600;\n }\n\n .actions {\n position: absolute;\n right: 0;\n top: 0;\n bottom: 0;\n display: none !important;\n\n &:hover {\n display: flex !important;\n }\n }\n\n .node:hover {\n text-decoration: none;\n\n &.noActions {\n background-color: $light-blue;\n }\n\n :global(.dropdown) {\n display: block;\n }\n\n + .actions {\n display: block !important;\n }\n }\n}","import React from 'react';\n\nimport { BaseObject } from 'libs/analytics/interfaces';\n\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { BaseTree } from 'libs/shared/interfaces';\n\nimport styles from './tree.module.scss';\n\ninterface TreeNodeTextProps<T extends BaseTree<BaseObject>> {\n tree: T;\n text: string;\n className?: string;\n isDisabled?: boolean;\n disabledTooltip?: string | ((tree: T) => string);\n}\n\nexport function TreeNodeText<T extends BaseTree<BaseObject>>(props: TreeNodeTextProps<T>): React.ReactElement {\n function getTextClass(): string {\n let textClassName = `${styles.text} clamp-4`;\n\n if (props.className)\n textClassName += ` ${props.className}`;\n\n return textClassName;\n }\n\n if (props.isDisabled) {\n const disabledToolTip = typeof props.disabledTooltip === 'string' ?\n props.disabledTooltip :\n props.disabledTooltip?.(props.tree);\n\n return (\n <Tooltip title={disabledToolTip} spanHack spanHackClassName='d-inline-block flex-grow-1'>\n <span className={`${getTextClass()} text-secondary ${styles.disabled}`}>\n {props.text}\n </span>\n </Tooltip>\n );\n }\n\n return (\n <div className={getTextClass()}>\n {props.text}\n </div>\n );\n}\n","import * as React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { Actions } from 'libs/shared/components/actions/Actions';\nimport { Caret } from 'libs/shared/components/caret/Caret';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { BaseObject } from 'libs/shared/interfaces';\nimport { BaseTree } from 'libs/shared/interfaces';\nimport { TreeHelper } from 'libs/shared/utils/TreeHelper';\n\nimport { Tree } from './Tree';\nimport { TreeNodeText } from './TreeNodeText';\n\nimport styles from './tree.module.scss';\n\nconst TREE_ACTIONS_CLASS = 'tree-actions';\n\nexport interface TreeNodeAction<T extends BaseTree<BaseObject>> {\n label: string;\n getAppLink: (node: T) => Core.AppLink;\n className?: string;\n}\n\ninterface TreeNodeProps<T extends BaseTree<BaseObject>> {\n tree: T;\n selectedIds?: string[];\n getAppLink?: (item: T) => Core.AppLink;\n onSelect?: (item: T) => void;\n isDisabled?: (item: T) => boolean;\n isClickDisabled?: (item: T) => boolean;\n actions?: TreeNodeAction<T>[];\n selectedLinkClassName?: string;\n disabledTooltip?: string | ((tree: T) => string);\n isRoot?: boolean;\n isDropdown?: boolean;\n multiSelect?: boolean;\n depth: number;\n openDepth?: number;\n maxDisplayDepth?: number;\n}\n\nTreeNode.defaultProps = {\n selectedLinkClassName: styles.selected\n};\n\nexport function TreeNode<T extends BaseTree<BaseObject>>(props: TreeNodeProps<T>): React.ReactElement {\n const { tree, selectedIds, getAppLink, onSelect, isDisabled, isClickDisabled, actions, isDropdown } = props;\n\n const ref = React.useRef<HTMLDivElement>(null);\n\n // If one of our children is selected\n const isParentOfSelected = React.useMemo(() => {\n return selectedIds?.some(id => TreeHelper.find(tree, id));\n }, [ tree, selectedIds ]);\n\n // Or we are below the initial open depth\n const initiallyOpen = props.openDepth && props.depth < props.openDepth;\n\n // We render expanded initially\n const [ isExpanded, setIsExpanded ] = React.useState(isParentOfSelected || initiallyOpen);\n\n const isSelected = selectedIds?.some(id => TextHelper.isEqual(tree.id, id));\n let hasChildren = !!tree.children && !!tree.children.length;\n\n if (props.maxDisplayDepth && hasChildren)\n hasChildren = props.depth < props.maxDisplayDepth;\n\n /**\n * We need to stop propagation of our event if our tree is rendered\n * inside of a bootstrap dropdown - Sha\n */\n React.useEffect(() => {\n if (!ref.current || !isDropdown)\n return;\n\n const onClick = (e: Event) => {\n e.stopPropagation();\n onSelectNode();\n };\n\n ref.current.addEventListener('click', onClick);\n return () => {\n if (!ref.current)\n return;\n\n ref.current.removeEventListener('click', onClick);\n };\n }, [ ref.current, onSelect ]);\n\n /**\n * Check if an expanded item should actually be collapsed\n */\n React.useEffect(() => {\n // Don't do auto collapsing for trees that support multiple selections\n if (props.multiSelect)\n return;\n\n // Skip item if it's already collapsed\n if (!isExpanded)\n return;\n\n // Parents of a selected item should remain expanded\n if (isParentOfSelected)\n return;\n\n // Selected items should remain expanded\n if (isSelected)\n return;\n\n // Disabled items can be expanded if nothing has been selected\n if (!props.selectedIds?.length && isDisabled?.(props.tree))\n return;\n\n // If we want it to be initially open\n if (initiallyOpen)\n return;\n\n setIsExpanded(false);\n }, [selectedIds]);\n\n function onSelectNode(): void {\n if (isClickDisabled?.(tree))\n return;\n\n if (!props.multiSelect)\n setIsExpanded(!isExpanded);\n\n if (getAppLink) {\n Core.AppLinkHelper.trigger(getAppLink(tree));\n return;\n }\n\n if (isDisabled?.(tree)) {\n onSelect(null);\n return;\n }\n\n onSelect?.(tree);\n }\n\n function onClickCaret(e: any): void {\n e.stopPropagation();\n\n if (props.multiSelect) {\n setIsExpanded(!isExpanded);\n return;\n }\n\n onSelectNode();\n }\n\n function getNodeClass(): string {\n let className = `py-1 d-flex align-items-center w-100 position-relative ${styles.node}`;\n\n if (isSelected)\n className += ' ' + props.selectedLinkClassName;\n\n if (!actions?.length)\n className += ' ' + styles.noActions;\n\n if (isParentOfSelected && props.multiSelect)\n className += ' text-underline fst-italic';\n\n return className;\n }\n\n if (props.maxDisplayDepth && (props.depth > props.maxDisplayDepth))\n return <></>;\n\n return (\n <li className={`position-relative ${isExpanded ? '' : styles.collapsed} ${props.isRoot ? styles.root : ''}`}>\n <div className='position-relative'>\n <DivButton\n className={getNodeClass()}\n onClick={isDropdown ? null : onSelectNode}\n ref={ref}\n >\n {hasChildren && (\n <div className={styles.chevron} onClick={onClickCaret}>\n <Caret direction={isExpanded ? 'down' : 'right'} />\n </div>\n )}\n\n <TreeNodeText\n tree={tree}\n // Always prefer name over description\n text={tree.name || tree.description}\n isDisabled={isDisabled?.(tree) || isClickDisabled?.(tree)}\n disabledTooltip={props.disabledTooltip}\n />\n </DivButton>\n\n {!!props.actions && (\n <Actions\n className={styles.actions}\n actions={actions?.map(a => ({ ...a, appLink: a.getAppLink(tree) }))}\n actionsDropdownClassName={`btn btn-light ${TREE_ACTIONS_CLASS} py-0`}\n />\n )}\n\n {isExpanded && <Tree key={tree.id} {...props} isChild depth={props.depth + 1} />}\n </div>\n </li>\n );\n}\n","import * as React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { BaseObject } from 'libs/shared/interfaces';\nimport { BaseTree } from 'libs/shared/interfaces';\n\nimport { TreeNode, TreeNodeAction } from './TreeNode';\n\nimport styles from './tree.module.scss';\n\nexport interface TreeProps<T extends BaseTree<BaseObject>> {\n tree: T;\n selectedIds?: string[];\n getAppLink?: (item: T) => Core.AppLink;\n onSelect?: (item: T) => void;\n isDisabled?: (item: T) => boolean;\n isClickDisabled?: (item: T) => boolean;\n actions?: TreeNodeAction<T>[];\n selectedLinkClassName?: string;\n disabledTooltip?: string | ((tree: T) => string);\n isChild?: boolean;\n depth?: number;\n multiSelect?: boolean;\n /**\n * Set to true if you are using this component inside of\n * a bootstrap dropdown menu and don't want it to close\n * on click events - Sha\n */\n isDropdown?: boolean;\n /**\n * If you want to initially render open to a certain depth\n */\n openDepth?: number;\n maxDisplayDepth?: number;\n}\n\nexport function Tree<T extends BaseTree<BaseObject>>(props: TreeProps<T>): React.ReactElement {\n const { tree, ...childProps } = props;\n\n if (!tree || !tree.children)\n return <></>;\n\n return (\n <ul className={`m-0 p-0 list-unstyled ${styles.tree}`}>\n {tree.children.map((child, key) => (\n <TreeNode key={key} tree={child} {...childProps} isRoot={!props.isChild} depth={props.depth || 0} />\n ))}\n </ul>\n );\n}\n","import React from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\nimport { Form } from 'formik';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AddToLibraryFormValues } from 'libs/shared/apps/libraries/views/add-to-library/AddToLibraryView';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Tree } from 'libs/shared/components/tree/Tree';\nimport { BaseTree, Folder, Library, LibraryTree, PopupViewProps, VideoTypes } from 'libs/shared/interfaces';\nimport { TreeHelper } from 'libs/shared/utils/TreeHelper';\n\nconst namespace = 'libraries.addToLibraryForm';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface AddToLibraryFormProps extends PopupViewProps {\n libraries: Library[];\n isFolderDisabled: (folder: BaseTree<Folder>) => boolean;\n video: VideoTypes;\n videoLibraries?: Library[];\n getCategoryTree: (libraryId: string) => LibraryTree[];\n}\n\nexport function AddToLibraryForm(props: AddToLibraryFormProps): JSX.Element {\n const formikProps = useFormikContextWrapper<AddToLibraryFormValues>();\n\n const isMakingLibraryRequest = !formikProps.values.library.canAddContent;\n const isAlreadyInLibrary = props.videoLibraries?.find(l => l.id === formikProps.values.library.id);\n\n const tree = React.useMemo(() => {\n const categoryTree = props.getCategoryTree(formikProps.values.library.id);\n\n const rootBranches = categoryTree.map(TreeHelper.convertNestedObjectToTree);\n\n return {\n children: rootBranches\n } as BaseTree<Library>;\n }, [formikProps.values.library.id]);\n\n return (\n <>\n {isAlreadyInLibrary && (\n <div className='alert alert-info'>\n <Text namespace={namespace} phrase='alreadyInLibrary' options={{ library: formikProps.values.library.name }} />\n </div>\n )}\n\n {isMakingLibraryRequest && (\n <p>\n <Text namespace={namespace} phrase='sendLibraryRequest' options={{ video: props.video.name }} />\n </p>\n )}\n\n <Form>\n {props.libraries.length > 1 && (\n <FormField\n as='select'\n label={getPhrase('selectLibrary')}\n name='library'\n value={formikProps.values.library?.id ?? ''}\n className={!formikProps.values.library?.id ? 'text-secondary' : ''}\n showRequiredStar\n onChange={(e: any) => {\n formikProps.setFieldValue('folder', null);\n\n const libraryId = e.target.value;\n\n formikProps.setFieldValue('library', props.libraries.find(l => l.id.toString() === libraryId.toString()));\n }}\n >\n {props.libraries.map(library => (\n <option key={library.id} value={library.id} className='text-dark'>\n {library.name}\n </option>\n ))}\n </FormField>\n )}\n\n <FormField\n label={getPhrase('selectFolder')}\n name='folder'\n showRequiredStar\n disabled={!formikProps.values.library}\n >\n {() => (\n <Scrollbars autoHeight autoHeightMax={300} className='border rounded-3'>\n <Tree\n tree={tree}\n onSelect={(folder: Folder) => formikProps.setFieldValue('folder', folder)}\n isDisabled={props.isFolderDisabled}\n disabledTooltip={LanguageService.getPhrase(namespace, 'disabledFolder')}\n selectedIds={formikProps.values.folder?.id ? [formikProps.values.folder.id] : undefined}\n selectedLinkClassName='bg-light'\n />\n </Scrollbars>\n )}\n </FormField>\n \n {!!formikProps.values.folder && (\n <p className='mt-n2'>\n <Text\n namespace={namespace}\n phrase={isMakingLibraryRequest ? 'requestTo' : 'addTo'}\n options={{ folder: formikProps.values.folder.name }}\n />\n </p>\n )}\n\n {isMakingLibraryRequest && (\n <FormField\n label={LanguageService.getPhrase(namespace, 'comment')}\n as='textarea'\n name='comment'\n id='comment'\n placeholder={LanguageService.getPhrase(namespace, 'commentPlaceholder')}\n value={formikProps.values.comment}\n />\n )}\n\n <PopupButtons>\n <PopupButtons.Cancel onClick={props.closePopup} />\n <PopupButtons.Submit variant='dark' text={getPhrase('addToLibrary')} />\n </PopupButtons>\n </Form>\n </>\n );\n}\n","import { HardCoded } from 'libs/shared/constants/HardCoded';\nimport { ContentRegion } from 'libs/shared/enums/ContentRegion';\nimport { CurrentUser, Library } from 'libs/shared/interfaces';\n\ntype LibraryTypes = Library['type'] | 'shared_library';\n\nexport const LibraryHelper = {\n /**\n * Orders libraries by type (custom -> shared -> hosted).\n * Also orders libraries of same type alphabetically.\n */\n sort(libraries: Library[]): Library[] {\n if (!libraries?.length)\n return [];\n\n return libraries.sort((a: Library, b: Library) => {\n // This is required because shared libraries have a type of `custom_library`\n const aType: LibraryTypes = a.isSharedLibrary ? 'shared_library' : a.type;\n const bType: LibraryTypes = b.isSharedLibrary ? 'shared_library' : b.type;\n \n if (aType === bType)\n return a.name.localeCompare(b.name);\n \n if (aType === 'custom_library')\n return -1;\n \n if (aType === 'shared_library' && bType !== 'custom_library')\n return -1;\n\n if (aType === 'hosted_library' && bType !== 'custom_library' && bType !== 'shared_library')\n return -1;\n \n return 1;\n });\n },\n\n hasTwigOrTigtag(libraries: Library[], currentUser: CurrentUser) {\n if (!currentUser)\n return { hasTwig: false, hasTigtag: false };\n\n // Anon users can see Twig/Tigtag if they're in England.\n if (!currentUser.isAuthenticated) {\n const hasAnonAccess = (\n currentUser.contentRegion === ContentRegion.UK ||\n currentUser.contentRegion === ContentRegion.SCOT\n );\n\n return {\n hasTwig: hasAnonAccess,\n hasTigtag: hasAnonAccess\n };\n }\n\n if (!libraries)\n return { hasTwig: false, hasTigtag: false };\n \n let hasTwig = false;\n let hasTigtag = false;\n\n for (const lib of libraries) {\n if (lib.id.toString() === HardCoded.Libraries.TWIG)\n hasTwig = true;\n else if (lib.id.toString() === HardCoded.Libraries.TIGTAG)\n hasTigtag = true;\n\n // If both are true we don't need to keep searching\n if (hasTwig && hasTigtag)\n break;\n }\n\n return { hasTwig, hasTigtag };\n }\n};\n","import { object, string } from 'yup';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nconst namespace = 'libraries.validation';\n\nexport const AddToLibraryValidationSchema = object().shape({\n comment: string()\n .nullable()\n .max(512, () => LanguageService.getPhrase(namespace, 'commentExceeds')),\n library: object()\n .required(() => LanguageService.getPhrase(namespace, 'libraryRequired'))\n .nullable(),\n folder: object()\n .required(() => LanguageService.getPhrase(namespace, 'folderRequired'))\n .nullable()\n});\n","export enum LibraryRequestObjectType {\n MasterVideo = 1,\n MasterClip = 2,\n MasterInteractive = 3\n}\n","import { DevError } from 'libs/common/backbone/errors/DevError';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { InviteColleagueXhr, LibraryApiXhr } from 'libs/shared/interfaces/responses/ErrorResponse';\n\nconst getPhrase = LanguageService.encloseNamespace('shared.errorMessageHelper');\n\nconst LIBRARY_ERROR_PHRASE_MAPPING = {\n 'operation-not-allowed': 'operationNotAllowed',\n 'library-not-supported': 'libraryNotSupported',\n 'access-denied': 'accessDenied',\n 'library-access-denied': 'libraryAccessDenied',\n 'library-access-denied-create': 'libraryAccessDeniedCreate',\n 'library-access-denied-fulfil': 'libraryAccessDeniedFulfill',\n 'library-access-denied-not-authorized': 'libraryAccessDeniedNotAuthorized',\n 'library-request-access-denied': 'accessDenied',\n 'library-request-access-denied-create-request': 'libraryRequestAccessDeniedCreateRequest',\n 'library-request-access-denied-process-comment': 'libraryRequestAccessDeniedProcessComment',\n 'customer-not-found': 'customerNotFound',\n 'customer-not-found-current-user': 'customerNotFound',\n 'customer-not-found-library-owner': 'customerNotFoundLibraryOwner',\n 'customer-not-found-destination-library-owner': 'customerNotFoundLibraryOwner',\n 'user-not-found': 'userNotFound',\n 'library-not-found': 'libraryNotFound',\n 'video-not-found': 'videoNotFound',\n 'category-not-found': 'categoryNotFound',\n 'category-not-found-destination-not-provided': 'categoryNotFoundDestinationNotProvided',\n 'category-not-found-not-in-library': 'categoryNotFoundInLibrary',\n 'library-request-not-found': 'libraryRequestNotFound',\n 'invalid-category-path': 'invalidCategoryPath',\n 'library-api-error': 'somethingWentWrong',\n 'content-not-playable': 'contentNotPlayable',\n 'invalid-object': 'invalidObject',\n 'same-request-existed': 'sameRequestExisted',\n 'unknown-error': 'somethingWentWrong',\n 'no-email': 'noEmailError'\n};\n\nconst INVITE_COLLEAGUE_PHRASE_MAPPING = {\n 'create-invitation-failed': 'createInvitationFailed',\n 'invitation-resend-failed': 'invitationResendFailed',\n 'failed-to-accept': 'failedToAccept',\n 'invitee-not-found': 'inviteeNotFound',\n 'invitation-not-found': 'invitationNotFound',\n 'invitation-deleted': 'invitationDeleted',\n 'too-many-emails': 'tooManyEmails'\n};\n\nexport const ErrorMessageHelper = {\n libraryApiError(xhr: LibraryApiXhr): string {\n const phrase = LIBRARY_ERROR_PHRASE_MAPPING[xhr?.responseJSON?.type];\n\n if (!phrase)\n return getPhrase('somethingWentWrong');\n\n return getPhrase(phrase);\n },\n inviteColleagueError(xhr: InviteColleagueXhr): string {\n const phrase = INVITE_COLLEAGUE_PHRASE_MAPPING[xhr?.responseJSON?.type];\n\n if (!phrase)\n return getPhrase('somethingWentWrong');\n\n return getPhrase(phrase);\n }\n};\n\nexport const ErrorMessageHelperValidation = {\n libraryApiErrors(): void {\n Object.values(LIBRARY_ERROR_PHRASE_MAPPING).forEach(value => {\n const phrase = getPhrase(value);\n\n if (!phrase)\n Core.ErrorHelper.throw(new DevError(`No language mapping found for library api error type: ${value}`));\n });\n },\n inviteColleagueErrors(): void {\n Object.values(INVITE_COLLEAGUE_PHRASE_MAPPING).forEach(value => {\n const phrase = getPhrase(value);\n\n if (!phrase)\n Core.ErrorHelper.throw(new DevError(`No language mapping found for library api error type: ${value}`));\n });\n }\n};\n","import { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\n\ninterface OpenLibraryFolderParams {\n libraryId: string;\n folderId: string;\n}\n\nexport const LaunchUrlHelper = {\n buildOpenAppLinkUrl(baseLaunchUrl: string, appLink: string, product?: string): string {\n return UrlHelper.urlBuilder(`${baseLaunchUrl}/open`, { appLink, product });\n },\n\n buildOpenVideoUrl(baseLaunchUrl: string, videoId: string, product?: string): string {\n return LaunchUrlHelper.buildOpenAppLinkUrl(baseLaunchUrl, `video:${videoId}`, product);\n },\n\n buildOpenClipUrl(baseLaunchUrl: string, clipId: string, product?: string): string {\n return LaunchUrlHelper.buildOpenAppLinkUrl(baseLaunchUrl, `clip:${clipId}`, product);\n },\n\n buildOpenInteractiveUrl(baseLaunchUrl: string, interactiveId: string, product?: string): string {\n return LaunchUrlHelper.buildOpenAppLinkUrl(baseLaunchUrl, `interactive:${interactiveId}`, product);\n },\n\n buildOpenTopicUrl(baseLaunchUrl: string, topicId: string, product?: string): string {\n return LaunchUrlHelper.buildOpenAppLinkUrl(baseLaunchUrl, `topic:${topicId}`, product);\n },\n\n buildOpenSeriesUrl(baseLaunchUrl: string, seriesId: string, product?: string): string {\n return LaunchUrlHelper.buildOpenAppLinkUrl(baseLaunchUrl, `series:${seriesId}`, product);\n },\n\n buildOpenPlaylistUrl(baseLaunchUrl: string, playlistId: string, product?: string): string {\n return LaunchUrlHelper.buildOpenAppLinkUrl(baseLaunchUrl, `playlist:${playlistId}`, product);\n },\n\n buildOpenCategoryUrl(baseLaunchUrl: string, categoryId: string, product?: string): string {\n return LaunchUrlHelper.buildOpenAppLinkUrl(baseLaunchUrl, `category:${categoryId}`, product);\n },\n\n buildOpenLibraryFolderUrl(baseLaunchUrl: string, params: OpenLibraryFolderParams, product?: string): string {\n const appLink = `library:${params.libraryId}:folder:${params.folderId}`;\n \n return LaunchUrlHelper.buildOpenAppLinkUrl(baseLaunchUrl, appLink, product);\n }\n};\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { AlertType } from 'libs/common/backbone/services/BaseAlertService';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { AddToLibraryForm } from 'libs/shared/apps/libraries/components/add-to-library-form/AddToLibraryForm';\nimport { LibraryHelper } from 'libs/shared/apps/libraries/utils/LibraryHelper';\nimport { AddToLibraryValidationSchema } from 'libs/shared/apps/libraries/validation/AddToLibraryValidationSchema';\nimport { FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { LibraryRequestObjectType } from 'libs/shared/enums/LibraryRequestObjectType';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { LibraryRequests } from 'libs/shared/flight-requests/LibraryRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useVerifiedEmailRequiredErrorHandler } from 'libs/shared/hooks/useVerifiedEmailRequiredErrorHandler';\nimport { BaseTree, Clip, Config, CurrentUser, Folder, InteractiveMetadata, Library, LibraryTree, PopupViewProps, Video, VideoTypes } from 'libs/shared/interfaces';\nimport { AddToLibraryRequest } from 'libs/shared/interfaces/requests/AddToLibraryRequest';\nimport { LibraryApiXhr } from 'libs/shared/interfaces/responses/ErrorResponse';\nimport { ErrorMessageHelper } from 'libs/shared/utils/error-message-helper/ErrorMessageHelper';\nimport { LaunchUrlHelper } from 'libs/shared/utils/LaunchUrlHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\nimport { VideoSortHelper } from 'libs/shared/utils/VideoSortHelper';\n\nexport interface AddToLibraryFormValues {\n library: Library;\n folder: Folder;\n comment?: string;\n}\n\ntype LibraryObjectType = MasterType.Video | MasterType.Clip | MasterType.Interactive;\n\ntype ObjectTypeMap = {\n [K in LibraryObjectType]: LibraryRequestObjectType;\n};\n\nconst OBJECT_TYPE_MAP: ObjectTypeMap = {\n [MasterType.Video]: LibraryRequestObjectType.MasterVideo,\n [MasterType.Clip]: LibraryRequestObjectType.MasterClip,\n [MasterType.Interactive]: LibraryRequestObjectType.MasterInteractive\n};\n\nconst namespace = 'libraries.addToLibrary';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface AddToLibraryViewProps extends PopupViewProps {\n id: string;\n typeId: MasterType;\n folderAppLink?: Core.AppLink;\n}\n\nexport function AddToLibraryView(props: AddToLibraryViewProps): JSX.Element {\n const user = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const librariesWithCategories = Flight.useBasicFetch<LibraryTree[]>(LibraryRequests.librariesWithCategories());\n const libraries = Flight.useBasicFetch<Library[]>(LibraryRequests.libraryRequestLibraries());\n\n const videoRequest = VideoHelper.getVideoRequest(props.id, props.typeId);\n const video = Flight.useBasicFetch<VideoTypes>(videoRequest);\n\n const isClipOrInteractive = VideoHelper.isClip(video.data) || VideoHelper.isInteractive(video.data);\n const parentVideo = isClipOrInteractive && (video.data as Clip | InteractiveMetadata)?._parentVideo;\n const parentVideoDetails = Flight.useBasicFetch<Video>(\n parentVideo && VideoRequests.video(parentVideo.id)\n );\n\n const { loading, handleGenerateReportError } = useVerifiedEmailRequiredErrorHandler();\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const sortedLibraries = React.useMemo(() => LibraryHelper.sort(libraries.data), [libraries.data]);\n\n const fetchAsync = Flight.useGetFetchAsync();\n\n const alerts = useAlerts();\n\n const sort = !!user.data && VideoSortHelper.getOrSetSortType(user.data.id);\n\n /**\n * We try to pull the library and category id off the video/clip/interactive.\n * If we can't, then we try to get them off the _parentVideo. \n */\n function getSourceIds() {\n let sourceCategoryId: string = null;\n let sourceLibraryId = ArrayHelper.first(video.data?.libraries?.data)?.id;\n\n if (sourceLibraryId && video.data.categories.data?.length) {\n const category = video.data.categories.data.find(category => {\n return category.libraries?.data?.find(l => l.id.toString() === sourceLibraryId.toString());\n });\n\n if (category)\n sourceCategoryId = category.id;\n }\n\n if (!sourceLibraryId) {\n sourceLibraryId = ArrayHelper.first(parentVideoDetails.data?.libraries?.data)?.id;\n\n if (sourceLibraryId && parentVideoDetails.data.categories.data?.length) {\n const category = parentVideoDetails.data.categories.data.find(category => {\n return category.libraries?.data?.find(l => l.id.toString() === sourceLibraryId.toString());\n });\n \n if (category)\n sourceCategoryId = category.id;\n }\n }\n\n return {\n sourceLibraryId: sourceLibraryId ? +sourceLibraryId : null,\n sourceCategoryId: sourceCategoryId ? +sourceCategoryId : null\n };\n }\n\n function addToLibrary(data: AddToLibraryFormValues, onDone: () => void): void {\n const { sourceLibraryId, sourceCategoryId } = getSourceIds();\n\n const request: AddToLibraryRequest = {\n objectId: props.id.toString(),\n objectType: OBJECT_TYPE_MAP[props.typeId as LibraryObjectType],\n message: data.comment,\n sourceLibraryId,\n destinationLibraryId: +data.library.id,\n metadata: {\n destinationCategoryId: +data.folder.id,\n sourceCategoryId\n }\n };\n\n fetchAsync(LibraryRequests.addToLibrary(request, sort))\n .then(() => {\n if (!data.library.canAddContent) {\n alerts.success({\n type: AlertType.Pending,\n heading: getPhrase('pendingApproval'),\n message: getPhrase('libraryRequestSent', { library: data.library.name, escapeText: true })\n });\n } else {\n alerts.success({\n type: AlertType.Success,\n heading: '',\n message: getPhrase('addToLibrarySuccess', { folder: data.folder.name, video: video.data.name, escapeText: true }),\n ...(props.folderAppLink ? {\n appLink: {\n ...props.folderAppLink,\n args: [ data.library.id, data.folder.id, TextHelper.slugify(data.folder.name) ]\n },\n appLinkText: getPhrase('goToFolder', { folder: data.folder.name }),\n appLinkClassName: 'info-link'\n } : {\n extLink: LaunchUrlHelper.buildOpenLibraryFolderUrl(config.data.launchUrl, {\n libraryId: data.library.id,\n folderId: data.folder.id\n }),\n extLinkText: getPhrase('goToFolder', { folder: data.folder.name }),\n extLinkClassName: 'info-link'\n })\n });\n }\n })\n .catch((xhr: LibraryApiXhr) => {\n const errorMessage = ErrorMessageHelper.libraryApiError(xhr);\n handleGenerateReportError(xhr, errorMessage, errorMessage);\n onDone();\n })\n .finally(() => {\n props.closePopup();\n });\n }\n\n function getCategoryTree(libraryId: string): LibraryTree[] {\n return librariesWithCategories.data.find(l => l.data.id.toString() === libraryId.toString())?.children;\n }\n\n function isFolderDisabled(folder: BaseTree<Folder>): boolean {\n return !!video.data.categories?.data?.find(category => category.id === folder.id);\n }\n\n const dataLoaded = (\n libraries.data &&\n video.data &&\n librariesWithCategories.data\n );\n\n return (\n <Popup title={getPhrase('addToLibrary')} closePopup={props.closePopup} showLoadingSpinner={!dataLoaded || loading}>\n {dataLoaded && (\n <FormWrapper<AddToLibraryFormValues>\n initialValues={{\n library: ArrayHelper.first(sortedLibraries),\n folder: null,\n comment: ''\n }}\n validationSchema={AddToLibraryValidationSchema}\n onSubmit={addToLibrary}\n >\n <AddToLibraryForm\n libraries={sortedLibraries}\n closePopup={props.closePopup}\n isFolderDisabled={isFolderDisabled}\n video={video.data}\n videoLibraries={video.data?.libraries?.data}\n getCategoryTree={getCategoryTree}\n />\n </FormWrapper>\n )}\n </Popup>\n );\n}\n"],"mappings":"k7BAMA,SAAA,EAAA,EAAA,EAAA,EAAA,CAKE,GAAA,EAAA,QAAA,EAAA,GAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,kBAKA,GAAA,CAAA,GAAA,CAAA,EAAA,OAAA,MAAA,CAAA,KAAA,KAAA,CAGA,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,OAAA,IAAA,6BAGE,GAAA,EAAA,MAAA,CAAA,EAAA,EAAA,CAIF,MAAA,CAAA,KAAA,KAAA,CAKF,IAAA,EAAA,WAEI,MAAA,GAAA,CAAA,EAAA,UAAA,CAAA,EAAA,SAAA,QAGA,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,SAAA,OAAA,IAAA,8BAGE,GAAA,EAAA,OAAA,iBAMF,MAAA,GAAA,CAAA,EAAA,UAAA,CAAA,EAAA,SAAA,QAGA,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,SAAA,OAAA,IAAA,+BAGE,GAAA,GAAA,OAAA,OAAA,wCAWF,OAHA,GAAA,OAGA,EAAA,EAAA,OAAA,GAHA,yEAeA,OAHA,EAAA,UAAA,SAAA,EAAA,SAAA,EAAA,SAAA,IAAA,EAAA,0BAAA,EAGA,sBAIA,GAAA,CAAA,GAAA,EAAA,SAAA,EAAA,MAAA,WAMA,IAAA,IAAA,KAAA,EAAA,CACE,GAAA,EAAA,MAAA,IAAA,UAAA,GAAA,EAAA,UAAA,CAAA,OAAA,sCAMA,GAAA,EAAA,EAAA,CACE,EAAA,EACA,OAIJ,OAAA,4BAIA,GAAA,CAAA,GAAA,EAAA,SAAA,EAAA,OAAA,UAMA,IAAA,IAAA,KAAA,EAAA,2CAEE,EAAA,KAAA,IAAA,EAAA,EAAA,CAGF,OAAA,uBAIA,GAAA,CAAA,GAAA,EAAA,SAAA,EAAA,OAAA,KAIA,IAAA,IAAA,KAAA,EAAA,CACE,GAAA,EAAA,MAAA,IAAA,UAAA,GAAA,EAAA,UAAA,CAAA,OAAA,uCAKA,GAAA,IAAA,KAAA,OAAA,EAKF,OAAA,wDAaA,OAAA,EAAA,kBAAA,EAAA,SAAA,CAAA,EAAA,UAAA,EAAA,EAAA,EAAA,cAMA,GAAA,CAAA,EAAA,MAAA,EAAA,wBAME,EAAA,KAAA,EAAA,KAAA,EAAA,CAAA,WAAA,CAAA,CAAA,CACA,EAAA,SAAA,QAAA,EAAA,CAKF,OAFA,EAAA,SAAA,QAAA,EAAA,CAEA,6PEjJJ,SAAgB,EAA6C,EAAiD,CAC5G,SAAS,GAAuB,CAC9B,IAAI,EAAgB,GAAG,EAAO,KAAK,UAKnC,OAHI,EAAM,YACR,GAAiB,IAAI,EAAM,aAEtB,EAiBT,OAdI,EAAM,YAMN,EAAA,EAAA,KAAC,EAAD,CAAS,MALa,OAAO,EAAM,iBAAoB,SACvD,EAAM,gBACN,EAAM,kBAAkB,EAAM,KAAK,CAGF,SAAA,GAAS,kBAAkB,uCAC1D,EAAA,EAAA,KAAC,OAAD,CAAM,UAAW,GAAG,GAAc,CAAC,kBAAkB,EAAO,oBACzD,EAAM,KACF,CAAA,CACC,CAAA,EAKZ,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,GAAc,UAC3B,EAAM,KACH,CAAA,CC3BV,IAAM,EAAqB,eA0B3B,EAAS,aAAe,CACtB,sBAAuB,EAAO,SAC/B,CAED,SAAgB,EAAyC,EAA6C,CACpG,GAAM,CAAE,OAAM,cAAa,aAAY,WAAU,aAAY,kBAAiB,UAAS,cAAe,EAEhG,EAAA,EAAY,OAAuB,KAAK,CAGxC,EAAA,EAA2B,YACxB,GAAa,KAAK,GAAM,EAAW,KAAK,EAAM,EAAG,CAAC,CACxD,CAAE,EAAM,EAAa,CAAC,CAGnB,EAAgB,EAAM,WAAa,EAAM,MAAQ,EAAM,UAGvD,CAAE,EAAY,GAAA,EAAwB,SAAS,GAAsB,EAAc,CAEnF,EAAa,GAAa,KAAK,GAAM,EAAW,QAAQ,EAAK,GAAI,EAAG,CAAC,CACvE,EAAc,CAAC,CAAC,EAAK,UAAY,CAAC,CAAC,EAAK,SAAS,OAEjD,EAAM,iBAAmB,IAC3B,EAAc,EAAM,MAAQ,EAAM,iBAMpC,EAAM,cAAgB,CACpB,GAAI,CAAC,EAAI,SAAW,CAAC,EACnB,OAEF,IAAM,EAAW,GAAa,CAC5B,EAAE,iBAAiB,CACnB,GAAc,EAIhB,OADA,EAAI,QAAQ,iBAAiB,QAAS,EAAQ,KACjC,CACN,EAAI,SAGT,EAAI,QAAQ,oBAAoB,QAAS,EAAQ,GAElD,CAAE,EAAI,QAAS,EAAU,CAAC,CAK7B,EAAM,cAAgB,CAEhB,EAAM,aAIL,IAID,GAIA,GAIA,CAAC,EAAM,aAAa,QAAU,IAAa,EAAM,KAAK,EAItD,GAGJ,EAAc,GAAM,GACnB,CAAC,EAAY,CAAC,CAEjB,SAAS,GAAqB,CACxB,QAAkB,EAAK,CAM3B,IAHK,EAAM,aACT,EAAc,CAAC,EAAW,CAExB,EAAY,CACd,EAAmB,QAAQ,EAAW,EAAK,CAAC,CAC5C,OAGF,GAAI,IAAa,EAAK,CAAE,CACtB,EAAS,KAAK,CACd,OAGF,IAAW,EAAK,EAGlB,SAAS,EAAa,EAAc,CAGlC,GAFA,EAAE,iBAAiB,CAEf,EAAM,YAAa,CACrB,EAAc,CAAC,EAAW,CAC1B,OAGF,GAAc,CAGhB,SAAS,GAAuB,CAC9B,IAAI,EAAY,0DAA0D,EAAO,OAWjF,OATI,IACF,GAAa,IAAM,EAAM,uBAEtB,GAAS,SACZ,GAAa,IAAM,EAAO,WAExB,GAAsB,EAAM,cAC9B,GAAa,8BAER,EAMT,OAHI,EAAM,iBAAoB,EAAM,MAAQ,EAAM,iBACzC,EAAA,EAAA,KAAA,EAAA,SAAA,EAAK,CAAA,EAGZ,EAAA,EAAA,KAAC,KAAD,CAAI,UAAW,qBAAqB,EAAa,GAAK,EAAO,UAAU,GAAG,EAAM,OAAS,EAAO,KAAO,eACrG,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,6BAAf,EACE,EAAA,EAAA,MAAC,EAAD,CACE,UAAW,GAAc,CACzB,QAAS,EAAa,KAAO,EACxB,eAHP,CAKG,IACC,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,EAAO,QAAS,QAAS,YACvC,EAAA,EAAA,KAAC,GAAD,CAAO,UAAW,EAAa,OAAS,QAAW,CAAA,CAC/C,CAAA,EAGR,EAAA,EAAA,KAAC,EAAD,CACQ,OAEN,KAAM,EAAK,MAAQ,EAAK,YACxB,WAAY,IAAa,EAAK,EAAI,IAAkB,EAAK,CACzD,gBAAiB,EAAM,gBACvB,CAAA,CAAA,GAGH,CAAC,CAAC,EAAM,UACP,EAAA,EAAA,KAAC,EAAD,CACE,UAAW,EAAO,QAClB,QAAS,GAAS,IAAI,IAAM,CAAE,GAAG,EAAG,QAAS,EAAE,WAAW,EAAA,CAAO,EAAE,CACnE,yBAA0B,iBAAiB,EAAmB,OAC9D,CAAA,CAGH,IAAc,EAAA,EAAA,KAAC,EAAD,CAAoB,GAAI,EAAO,QAAA,GAAQ,MAAO,EAAM,MAAQ,EAAK,CAAtD,EAAK,GAAA,IAE9B,CAAA,CCvKT,SAAgB,EAAqC,EAAyC,CAC5F,GAAM,CAAE,OAAM,GAAG,GAAe,EAKhC,MAHI,CAAC,GAAQ,CAAC,EAAK,UACV,EAAA,EAAA,KAAA,EAAA,SAAA,EAAK,CAAA,EAGZ,EAAA,EAAA,KAAC,KAAD,CAAI,UAAW,yBAAyB,EAAO,gBAC5C,EAAK,SAAS,KAAK,EAAO,KACzB,EAAA,EAAA,KAAC,EAAD,CAAoB,KAAM,EAAO,GAAI,EAAY,OAAQ,CAAC,EAAM,QAAS,MAAO,EAAM,OAAS,EAAK,CAArF,EAAqF,CAAA,CAEnG,CAAA,CCjCT,IAAM,EAAY,6BACZ,EAAY,EAAgB,iBAAiB,EAAU,CAU7D,SAAgB,EAAiB,EAA2C,CAC1E,IAAM,EAAc,GAAiD,CAE/D,EAAyB,CAAC,EAAY,OAAO,QAAQ,cACrD,EAAqB,EAAM,gBAAgB,KAAK,GAAK,EAAE,KAAO,EAAY,OAAO,QAAQ,GAAG,CAE5F,EAAA,EAAa,aAKV,CACL,SALmB,EAAM,gBAAgB,EAAY,OAAO,QAAQ,GAAG,CAEvC,IAAI,EAAW,0BAA0B,CAI1E,EACA,CAAC,EAAY,OAAO,QAAQ,GAAG,CAAC,CAEnC,OACE,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,CACG,IACC,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,6BACb,EAAA,EAAA,KAAC,EAAD,CAAiB,UAAA,EAAW,OAAO,mBAAmB,QAAS,CAAE,QAAS,EAAY,OAAO,QAAQ,KAAM,CAAI,CAAA,CAC3G,CAAA,CAGP,IACC,EAAA,EAAA,KAAC,IAAD,CAAA,UACE,EAAA,EAAA,KAAC,EAAD,CAAiB,UAAA,EAAW,OAAO,qBAAqB,QAAS,CAAE,MAAO,EAAM,MAAM,KAAM,CAAI,CAAA,CAC9F,CAAA,EAGN,EAAA,EAAA,MAAC,EAAD,CAAA,SAAA,CACG,EAAM,UAAU,OAAS,IACxB,EAAA,EAAA,KAAC,EAAD,CACE,GAAG,SACH,MAAO,EAAU,gBAAgB,CACjC,KAAK,UACL,MAAO,EAAY,OAAO,SAAS,IAAM,GACzC,UAAY,EAAY,OAAO,SAAS,GAAwB,GAAnB,iBAC7C,iBAAA,GACA,SAAW,GAAW,CACpB,EAAY,cAAc,SAAU,KAAK,CAEzC,IAAM,EAAY,EAAE,OAAO,MAE3B,EAAY,cAAc,UAAW,EAAM,UAAU,KAAK,GAAK,EAAE,GAAG,UAAU,GAAK,EAAU,UAAU,CAAC,CAAC,WAG1G,EAAM,UAAU,IAAI,IACnB,EAAA,EAAA,KAAC,SAAD,CAAyB,MAAO,EAAQ,GAAI,UAAU,qBACnD,EAAQ,KACF,CAFI,EAAQ,GAEZ,CACT,CACQ,CAAA,EAGd,EAAA,EAAA,KAAC,EAAD,CACE,MAAO,EAAU,eAAe,CAChC,KAAK,SACL,iBAAA,GACA,SAAU,CAAC,EAAY,OAAO,sBAG5B,EAAA,EAAA,KAAC,EAAA,WAAD,CAAY,WAAA,GAAW,cAAe,IAAK,UAAU,6BACnD,EAAA,EAAA,KAAC,EAAD,CACQ,OACN,SAAW,GAAmB,EAAY,cAAc,SAAU,EAAO,CACzE,WAAY,EAAM,iBAClB,gBAAiB,EAAgB,UAAU,EAAW,iBAAiB,CACvE,YAAa,EAAY,OAAO,QAAQ,GAAK,CAAC,EAAY,OAAO,OAAO,GAAG,CAAG,IAAA,GAC9E,sBAAsB,WACtB,CAAA,CACS,CAAA,CAEL,CAAA,CAEX,CAAC,CAAC,EAAY,OAAO,SACpB,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,kBACX,EAAA,EAAA,KAAC,EAAD,CACa,UAAA,EACX,OAAQ,EAAyB,YAAc,QAC/C,QAAS,CAAE,OAAQ,EAAY,OAAO,OAAO,KAAM,CACnD,CAAA,CACA,CAAA,CAGL,IACC,EAAA,EAAA,KAAC,EAAD,CACE,MAAO,EAAgB,UAAU,EAAW,UAAU,CACtD,GAAG,WACH,KAAK,UACL,GAAG,UACH,YAAa,EAAgB,UAAU,EAAW,qBAAqB,CACvE,MAAO,EAAY,OAAO,QAC1B,CAAA,EAGJ,EAAA,EAAA,MAAC,EAAD,CAAA,SAAA,EACE,EAAA,EAAA,KAAC,EAAa,OAAd,CAAqB,QAAS,EAAM,WAAc,CAAA,EAClD,EAAA,EAAA,KAAC,EAAa,OAAd,CAAqB,QAAQ,OAAO,KAAM,EAAU,eAAe,CAAI,CAAA,CAC1D,CAAA,CAAA,CACV,CAAA,CAAA,CACN,CAAA,CAAA,CCzHP,IAAa,EAAgB,CAK3B,KAAK,EAAiC,CAIpC,OAHK,GAAW,OAGT,EAAU,MAAM,EAAY,IAAe,CAEhD,IAAM,EAAsB,EAAE,gBAAkB,iBAAmB,EAAE,KAC/D,EAAsB,EAAE,gBAAkB,iBAAmB,EAAE,KAcrE,OAZI,IAAU,EACL,EAAE,KAAK,cAAc,EAAE,KAAK,CAEjC,IAAU,kBAGV,IAAU,kBAAoB,IAAU,kBAGxC,IAAU,kBAAoB,IAAU,kBAAoB,IAAU,iBACjE,GAEF,GACP,CApBO,EAAE,EAuBb,gBAAgB,EAAsB,EAA0B,CAC9D,GAAI,CAAC,EACH,MAAO,CAAE,QAAS,GAAO,UAAW,GAAO,CAG7C,GAAI,CAAC,EAAY,gBAAiB,CAChC,IAAM,EACJ,EAAY,gBAAkB,EAAc,IAC5C,EAAY,gBAAkB,EAAc,KAG9C,MAAO,CACL,QAAS,EACT,UAAW,EACZ,CAGH,GAAI,CAAC,EACH,MAAO,CAAE,QAAS,GAAO,UAAW,GAAO,CAE7C,IAAI,EAAU,GACV,EAAY,GAEhB,IAAK,IAAM,KAAO,EAOhB,GANI,EAAI,GAAG,UAAU,GAAK,EAAU,UAAU,KAC5C,EAAU,GACH,EAAI,GAAG,UAAU,GAAK,EAAU,UAAU,SACjD,EAAY,IAGV,GAAW,EACb,MAGJ,MAAO,CAAE,UAAS,YAAW,EAEhC,UCpEK,EAAY,uBAEL,GAAA,EAAA,EAAA,SAAuC,CAAC,MAAM,CACzD,SAAA,EAAA,EAAA,SAAiB,CACd,UAAU,CACV,IAAI,QAAW,EAAgB,UAAU,EAAW,iBAAiB,CAAC,CACzE,SAAA,EAAA,EAAA,SAAiB,CACd,aAAe,EAAgB,UAAU,EAAW,kBAAkB,CAAC,CACvE,UAAU,CACb,QAAA,EAAA,EAAA,SAAgB,CACb,aAAe,EAAgB,UAAU,EAAW,iBAAiB,CAAC,CACtE,UAAU,CACd,CAAC,CChBU,EAAL,SAAA,EAAA,OACL,GAAA,EAAA,YAAA,GAAA,cACA,EAAA,EAAA,WAAA,GAAA,aACA,EAAA,EAAA,kBAAA,GAAA,0BACD,CCEK,EAAY,EAAgB,iBAAiB,4BAA4B,CAEzE,GAA+B,CACnC,wBAAyB,sBACzB,wBAAyB,sBACzB,gBAAiB,eACjB,wBAAyB,sBACzB,+BAAgC,4BAChC,+BAAgC,6BAChC,uCAAwC,mCACxC,gCAAiC,eACjC,+CAAgD,0CAChD,gDAAiD,2CACjD,qBAAsB,mBACtB,kCAAmC,mBACnC,mCAAoC,+BACpC,+CAAgD,+BAChD,iBAAkB,eAClB,oBAAqB,kBACrB,kBAAmB,gBACnB,qBAAsB,mBACtB,8CAA+C,yCAC/C,oCAAqC,4BACrC,4BAA6B,yBAC7B,wBAAyB,sBACzB,oBAAqB,qBACrB,uBAAwB,qBACxB,iBAAkB,gBAClB,uBAAwB,qBACxB,gBAAiB,qBACjB,WAAY,eACb,CAEK,GAAkC,CACtC,2BAA4B,yBAC5B,2BAA4B,yBAC5B,mBAAoB,iBACpB,oBAAqB,kBACrB,uBAAwB,qBACxB,qBAAsB,oBACtB,kBAAmB,gBACpB,CAEY,EAAqB,CAChC,gBAAgB,EAA4B,CAC1C,IAAM,EAAS,GAA6B,GAAK,cAAc,MAK/D,OAAO,EAHF,GACc,qBAAqB,EAI1C,qBAAqB,EAAiC,CACpD,IAAM,EAAS,GAAgC,GAAK,cAAc,MAKlE,OAAO,EAHF,GACc,qBAAqB,EAI3C,CC3DY,EAAkB,CAC7B,oBAAoB,EAAuB,EAAiB,EAA0B,CACpF,OAAO,EAAU,WAAW,GAAG,EAAc,OAAQ,CAAE,UAAS,UAAS,CAAC,EAG5E,kBAAkB,EAAuB,EAAiB,EAA0B,CAClF,OAAO,EAAgB,oBAAoB,EAAe,SAAS,IAAW,EAAQ,EAGxF,iBAAiB,EAAuB,EAAgB,EAA0B,CAChF,OAAO,EAAgB,oBAAoB,EAAe,QAAQ,IAAU,EAAQ,EAGtF,wBAAwB,EAAuB,EAAuB,EAA0B,CAC9F,OAAO,EAAgB,oBAAoB,EAAe,eAAe,IAAiB,EAAQ,EAGpG,kBAAkB,EAAuB,EAAiB,EAA0B,CAClF,OAAO,EAAgB,oBAAoB,EAAe,SAAS,IAAW,EAAQ,EAGxF,mBAAmB,EAAuB,EAAkB,EAA0B,CACpF,OAAO,EAAgB,oBAAoB,EAAe,UAAU,IAAY,EAAQ,EAG1F,qBAAqB,EAAuB,EAAoB,EAA0B,CACxF,OAAO,EAAgB,oBAAoB,EAAe,YAAY,IAAc,EAAQ,EAG9F,qBAAqB,EAAuB,EAAoB,EAA0B,CACxF,OAAO,EAAgB,oBAAoB,EAAe,YAAY,IAAc,EAAQ,EAG9F,0BAA0B,EAAuB,EAAiC,EAA0B,CAC1G,IAAM,EAAU,WAAW,EAAO,UAAU,UAAU,EAAO,WAE7D,OAAO,EAAgB,oBAAoB,EAAe,EAAS,EAAQ,EAE9E,CCHK,GAAiC,EACpC,EAAW,OAAQ,EAAyB,aAC5C,EAAW,MAAO,EAAyB,YAC3C,EAAW,aAAc,EAAyB,kBACpD,CAGK,EAAY,EAAgB,iBADhB,yBAC2C,CAQ7D,SAAgB,GAAiB,EAA2C,CAC1E,IAAM,EAAO,EAAkC,EAAa,aAAa,CAAC,CACpE,EAA0B,EAAoC,EAAgB,yBAAyB,CAAC,CACxG,EAAY,EAAgC,EAAgB,yBAAyB,CAAC,CAGtF,EAAQ,EADO,EAAY,gBAAgB,EAAM,GAAI,EAAM,OAAO,CACZ,CAGtD,GADsB,EAAY,OAAO,EAAM,KAAK,EAAI,EAAY,cAAc,EAAM,KAAK,GACvD,EAAM,MAAqC,aACjF,EAAqB,EACzB,GAAe,GAAc,MAAM,EAAY,GAAG,CACnD,CAEK,CAAE,UAAS,6BAA8B,IAAsC,CAE/E,EAAS,EAA6B,EAAe,QAAQ,CAAC,CAE9D,EAAA,EAAwB,YAAc,EAAc,KAAK,EAAU,KAAK,CAAE,CAAC,EAAU,KAAK,CAAC,CAE3F,EAAa,GAAyB,CAEtC,EAAS,GAAW,CAEpB,EAAO,CAAC,CAAC,EAAK,MAAQ,EAAgB,iBAAiB,EAAK,KAAK,GAAG,CAM1E,SAAS,GAAe,CACtB,IAAI,EAA2B,KAC3B,EAAkB,EAAY,MAAM,EAAM,MAAM,WAAW,KAAK,EAAE,GAEtE,GAAI,GAAmB,EAAM,KAAK,WAAW,MAAM,OAAQ,CACzD,IAAM,EAAW,EAAM,KAAK,WAAW,KAAK,KAAK,GACxC,EAAS,WAAW,MAAM,KAAK,GAAK,EAAE,GAAG,UAAU,GAAK,EAAgB,UAAU,CAAC,CAC1F,CAEE,IACF,EAAmB,EAAS,IAGhC,GAAI,CAAC,IACH,EAAkB,EAAY,MAAM,EAAmB,MAAM,WAAW,KAAK,EAAE,GAE3E,GAAmB,EAAmB,KAAK,WAAW,MAAM,QAAQ,CACtE,IAAM,EAAW,EAAmB,KAAK,WAAW,KAAK,KAAK,GACrD,EAAS,WAAW,MAAM,KAAK,GAAK,EAAE,GAAG,UAAU,GAAK,EAAgB,UAAU,CAAC,CAC1F,CAEE,IACF,EAAmB,EAAS,IAIlC,MAAO,CACL,gBAAiB,EAAkB,CAAC,EAAkB,KACtD,iBAAkB,EAAmB,CAAC,EAAmB,KAC1D,CAGH,SAAS,EAAa,EAA8B,EAA0B,CAC5E,GAAM,CAAE,kBAAiB,oBAAqB,GAAc,CAEtD,EAA+B,CACnC,SAAU,EAAM,GAAG,UAAU,CAC7B,WAAY,GAAgB,EAAM,QAClC,QAAS,EAAK,QACd,kBACA,qBAAsB,CAAC,EAAK,QAAQ,GACpC,SAAU,CACR,sBAAuB,CAAC,EAAK,OAAO,GACpC,mBACD,CACF,CAED,EAAW,EAAgB,aAAa,EAAS,EAAK,CAAC,CACpD,SAAW,CACL,EAAK,QAAQ,cAOhB,EAAO,QAAQ,CACb,KAAM,EAAU,QAChB,QAAS,GACT,QAAS,EAAU,sBAAuB,CAAE,OAAQ,EAAK,OAAO,KAAM,MAAO,EAAM,KAAK,KAAM,WAAY,GAAM,CAAC,CACjH,GAAI,EAAM,cAAgB,CACxB,QAAS,CACP,GAAG,EAAM,cACT,KAAM,CAAE,EAAK,QAAQ,GAAI,EAAK,OAAO,GAAI,EAAW,QAAQ,EAAK,OAAO,KAAK,CAAE,CAChF,CACD,YAAa,EAAU,aAAc,CAAE,OAAQ,EAAK,OAAO,KAAM,CAAC,CAClE,iBAAkB,YACnB,CAAG,CACF,QAAS,EAAgB,0BAA0B,EAAO,KAAK,UAAW,CACxE,UAAW,EAAK,QAAQ,GACxB,SAAU,EAAK,OAAO,GACvB,CAAC,CACF,YAAa,EAAU,aAAc,CAAE,OAAQ,EAAK,OAAO,KAAM,CAAC,CAClE,iBAAkB,YACnB,CACF,CAAC,CAzBF,EAAO,QAAQ,CACb,KAAM,EAAU,QAChB,QAAS,EAAU,kBAAkB,CACrC,QAAS,EAAU,qBAAsB,CAAE,QAAS,EAAK,QAAQ,KAAM,WAAY,GAAM,CAAC,CAC3F,CAAC,EAuBJ,CACD,MAAO,GAAuB,CAC7B,IAAM,EAAe,EAAmB,gBAAgB,EAAI,CAC5D,EAA0B,EAAK,EAAc,EAAa,CAC1D,GAAQ,EACR,CACD,YAAc,CACb,EAAM,YAAY,EAClB,CAGN,SAAS,EAAgB,EAAkC,CACzD,OAAO,EAAwB,KAAK,KAAK,GAAK,EAAE,KAAK,GAAG,UAAU,GAAK,EAAU,UAAU,CAAC,EAAE,SAGhG,SAAS,EAAiB,EAAmC,CAC3D,MAAO,CAAC,CAAC,EAAM,KAAK,YAAY,MAAM,KAAK,GAAY,EAAS,KAAO,EAAO,GAAG,CAGnF,IAAM,EACJ,EAAU,MACV,EAAM,MACN,EAAwB,KAG1B,OACE,EAAA,EAAA,KAAC,EAAD,CAAO,MAAO,EAAU,eAAe,CAAE,WAAY,EAAM,WAAY,mBAAoB,CAAC,GAAc,WACvG,IACC,EAAA,EAAA,KAAC,GAAD,CACE,cAAe,CACb,QAAS,EAAY,MAAM,EAAgB,CAC3C,OAAQ,KACR,QAAS,GACV,CACD,iBAAkB,EAClB,SAAU,YAEV,EAAA,EAAA,KAAC,EAAD,CACE,UAAW,EACX,WAAY,EAAM,WACA,mBAClB,MAAO,EAAM,KACb,eAAgB,EAAM,MAAM,WAAW,KACtB,kBACjB,CAAA,CACU,CAAA,CAEV,CAAA"}
|
|
1
|
+
{"version":3,"file":"BzJLc19T2.chunk.js","names":[],"sources":["../../../../libs/shared/src/utils/TreeHelper.ts","../../../../libs/shared/src/components/tree/tree.module.scss","../../../../libs/shared/src/components/tree/TreeNodeText.tsx","../../../../libs/shared/src/components/tree/TreeNode.tsx","../../../../libs/shared/src/components/tree/Tree.tsx","../../../../libs/shared/src/apps/libraries/components/add-to-library-form/AddToLibraryForm.tsx","../../../../libs/shared/src/apps/libraries/utils/LibraryHelper.ts","../../../../libs/shared/src/apps/libraries/validation/AddToLibraryValidationSchema.ts","../../../../libs/shared/src/enums/LibraryRequestObjectType.ts","../../../../libs/shared/src/utils/error-message-helper/ErrorMessageHelper.ts","../../../../libs/shared/src/utils/LaunchUrlHelper.ts","../../../../libs/shared/src/apps/libraries/views/add-to-library/AddToLibraryView.tsx"],"sourcesContent":["import { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { BaseObject, MasterNestedObject } from 'libs/shared/interfaces';\nimport { BaseTree } from 'libs/shared/interfaces';\n\nfunction _find<T extends BaseTree<BaseObject>>(\n node: T,\n id: string | number,\n parents: T[]\n): [ T | null, T[] ] {\n if (TextHelper.isEqual(node.id, id))\n return [ node, parents ];\n\n const children = node.children;\n\n if (!children || !children.length)\n return [ null, null ];\n\n for (let i = 0; i < children.length; i++) {\n const [ child, foundParents ] = _find(children[i] as T, id, [ ...parents, node ]);\n\n if (child)\n return [ child, foundParents ];\n }\n\n return [ null, null ];\n}\n\nexport const DEFAULT_MAX_DEPTH = 7;\n\nexport const TreeHelper = {\n find<T extends BaseTree<BaseObject>>(tree: T, id: string | number): T | null {\n if (!tree || !tree.children || !tree.children.length)\n return;\n\n for (let j = 0; j < tree.children.length; j++) {\n const [child] = _find(tree.children[j] as T, id, []);\n \n if (child)\n return child;\n }\n },\n\n getPath<T extends BaseTree<BaseObject>>(tree: T, id: string | number): T[] {\n if (!tree || !tree.children || !tree.children.length)\n return;\n\n for (let j = 0; j < tree.children.length; j++) {\n const [ , path ] = _find(tree.children[j] as T, id, []);\n \n if (path?.length)\n return path;\n }\n },\n\n getParent<T extends BaseTree<BaseObject>>(tree: T, id: string | number): T {\n const path = TreeHelper.getPath(tree, id);\n\n if (!path?.length)\n return null;\n\n return path[path.length - 1];\n },\n\n convertNestedObjectToTree<T extends BaseObject>(nestedObject: MasterNestedObject<T>): BaseTree<T> {\n const node: BaseTree<T> = {\n ...nestedObject.data,\n children: nestedObject.children\n };\n\n if (node.children?.length)\n node.children = node.children.map(TreeHelper.convertNestedObjectToTree);\n\n return node;\n },\n\n findDepth<T extends MasterNestedObject<BaseObject>>(nodes: T[], targetId: string, currentDepth: number = 0): number {\n if (!nodes || nodes.length === 0) {\n return 0;\n }\n\n let depth = 0;\n\n for (const node of nodes) {\n if (node.data?.id?.toString() === targetId.toString()) {\n return currentDepth;\n }\n\n const childDepth = TreeHelper.findDepth(node.children, targetId, currentDepth + 1);\n\n if (childDepth > 0) {\n depth = childDepth;\n break;\n }\n }\n\n return depth;\n },\n\n findMaxChildDepth<T extends BaseObject>(nodes: MasterNestedObject<T>[], currentDepth: number = 0): number {\n if (!nodes || nodes.length === 0) {\n return currentDepth;\n }\n \n let deepestLevel = currentDepth;\n \n for (const node of nodes) {\n const childLevel = TreeHelper.findMaxChildDepth(node.children, currentDepth + 1);\n deepestLevel = Math.max(deepestLevel, childLevel);\n }\n \n return deepestLevel;\n },\n\n findTargetNode<T extends BaseObject>(nodes: MasterNestedObject<T>[], targetId: string): MasterNestedObject<T> | null {\n if (!nodes || nodes.length === 0) {\n return null;\n }\n \n for (const node of nodes) {\n if (node.data?.id?.toString() === targetId.toString()) {\n return node;\n }\n \n const result = TreeHelper.findTargetNode(node.children, targetId);\n if (result !== null) {\n return result;\n }\n }\n \n return null;\n },\n\n isMaxDepth<T extends MasterNestedObject<BaseObject>>(\n nodes: T[],\n sourceId: string,\n targetId: string,\n maxDepth: number = DEFAULT_MAX_DEPTH\n ): boolean {\n const sourceTree = TreeHelper.findTargetNode(nodes, sourceId);\n const maxChildDepth = TreeHelper.findMaxChildDepth(sourceTree.children);\n const targetDepth = TreeHelper.findDepth(nodes, targetId);\n \n return maxChildDepth + targetDepth >= maxDepth;\n },\n\n flatten<T>(\n tree: BaseTree<T>\n ): T[] {\n if (!tree)\n return [];\n\n const nodes: T[] = [];\n\n function pushNode(node: BaseTree<T>): void {\n nodes.push(ObjectHelper.omit(node, ['children']));\n node.children.forEach(pushNode);\n }\n\n tree.children.forEach(pushNode);\n\n return nodes;\n }\n};\n","$chevron-container-size: $cv-svg-size;\n$chevron-visible-size: calc($chevron-container-size / 3); // The actual chevron is 1/3rd of the container size\n$chevron-root-padding: map-get($spacers, 1);\n$text-root-padding: $chevron-root-padding + $chevron-container-size;\n\n@mixin nestedFolderTree($from, $to) {\n :local .tree {\n .text {\n padding-left: $text-root-padding + ($from * ($chevron-container-size - $chevron-visible-size));\n }\n\n .chevron {\n right: auto;\n left: $chevron-root-padding + ($from * ($chevron-container-size - $chevron-visible-size));\n }\n\n @if $from != $to {\n @include nestedFolderTree($from + 1, $to)\n }\n }\n}\n\n@include nestedFolderTree(0, 20);\n\n:local {\n .chevron {\n display: inline-block;\n position: absolute;\n color: black;\n cursor: pointer;\n top: 50%;\n margin-top: -$cv-svg-size-sm*0.5;\n right: 100%;\n }\n\n .text {\n overflow-wrap: break-word;\n padding-right: $cv-svg-size;\n cursor: pointer;\n\n &.disabled {\n cursor: not-allowed;\n }\n }\n\n .root {\n .chevron {\n left: $chevron-root-padding;\n }\n\n .text {\n padding-left: $text-root-padding;\n }\n }\n\n .selected {\n font-weight: 600;\n }\n\n .actions {\n position: absolute;\n right: 0;\n top: 0;\n bottom: 0;\n display: none !important;\n\n &:hover {\n display: flex !important;\n }\n }\n\n .node:hover {\n text-decoration: none;\n\n &.noActions {\n background-color: $light-blue;\n }\n\n :global(.dropdown) {\n display: block;\n }\n\n + .actions {\n display: block !important;\n }\n }\n}","import React from 'react';\n\nimport { BaseObject } from 'libs/analytics/interfaces';\n\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { BaseTree } from 'libs/shared/interfaces';\n\nimport styles from './tree.module.scss';\n\ninterface TreeNodeTextProps<T extends BaseTree<BaseObject>> {\n tree: T;\n text: string;\n className?: string;\n isDisabled?: boolean;\n disabledTooltip?: string | ((tree: T) => string);\n}\n\nexport function TreeNodeText<T extends BaseTree<BaseObject>>(props: TreeNodeTextProps<T>): React.ReactElement {\n function getTextClass(): string {\n let textClassName = `${styles.text} clamp-4`;\n\n if (props.className)\n textClassName += ` ${props.className}`;\n\n return textClassName;\n }\n\n if (props.isDisabled) {\n const disabledToolTip = typeof props.disabledTooltip === 'string' ?\n props.disabledTooltip :\n props.disabledTooltip?.(props.tree);\n\n return (\n <Tooltip title={disabledToolTip} spanHack spanHackClassName='d-inline-block flex-grow-1'>\n <span className={`${getTextClass()} text-secondary ${styles.disabled}`}>\n {props.text}\n </span>\n </Tooltip>\n );\n }\n\n return (\n <div className={getTextClass()}>\n {props.text}\n </div>\n );\n}\n","import * as React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { Actions } from 'libs/shared/components/actions/Actions';\nimport { Caret } from 'libs/shared/components/caret/Caret';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { BaseObject } from 'libs/shared/interfaces';\nimport { BaseTree } from 'libs/shared/interfaces';\nimport { TreeHelper } from 'libs/shared/utils/TreeHelper';\n\nimport { Tree } from './Tree';\nimport { TreeNodeText } from './TreeNodeText';\n\nimport styles from './tree.module.scss';\n\nconst TREE_ACTIONS_CLASS = 'tree-actions';\n\nexport interface TreeNodeAction<T extends BaseTree<BaseObject>> {\n label: string;\n getAppLink: (node: T) => Core.AppLink;\n className?: string;\n}\n\ninterface TreeNodeProps<T extends BaseTree<BaseObject>> {\n tree: T;\n selectedIds?: string[];\n getAppLink?: (item: T) => Core.AppLink;\n onSelect?: (item: T) => void;\n isDisabled?: (item: T) => boolean;\n isClickDisabled?: (item: T) => boolean;\n actions?: TreeNodeAction<T>[];\n selectedLinkClassName?: string;\n disabledTooltip?: string | ((tree: T) => string);\n isRoot?: boolean;\n isDropdown?: boolean;\n multiSelect?: boolean;\n depth: number;\n openDepth?: number;\n maxDisplayDepth?: number;\n}\n\nTreeNode.defaultProps = {\n selectedLinkClassName: styles.selected\n};\n\nexport function TreeNode<T extends BaseTree<BaseObject>>(props: TreeNodeProps<T>): React.ReactElement {\n const { tree, selectedIds, getAppLink, onSelect, isDisabled, isClickDisabled, actions, isDropdown } = props;\n\n const ref = React.useRef<HTMLDivElement>(null);\n\n // If one of our children is selected\n const isParentOfSelected = React.useMemo(() => {\n return selectedIds?.some(id => TreeHelper.find(tree, id));\n }, [ tree, selectedIds ]);\n\n // Or we are below the initial open depth\n const initiallyOpen = props.openDepth && props.depth < props.openDepth;\n\n // We render expanded initially\n const [ isExpanded, setIsExpanded ] = React.useState(isParentOfSelected || initiallyOpen);\n\n const isSelected = selectedIds?.some(id => TextHelper.isEqual(tree.id, id));\n let hasChildren = !!tree.children && !!tree.children.length;\n\n if (props.maxDisplayDepth && hasChildren)\n hasChildren = props.depth < props.maxDisplayDepth;\n\n /**\n * We need to stop propagation of our event if our tree is rendered\n * inside of a bootstrap dropdown - Sha\n */\n React.useEffect(() => {\n if (!ref.current || !isDropdown)\n return;\n\n const onClick = (e: Event) => {\n e.stopPropagation();\n onSelectNode();\n };\n\n ref.current.addEventListener('click', onClick);\n return () => {\n if (!ref.current)\n return;\n\n ref.current.removeEventListener('click', onClick);\n };\n }, [ ref.current, onSelect ]);\n\n /**\n * Check if an expanded item should actually be collapsed\n */\n React.useEffect(() => {\n // Don't do auto collapsing for trees that support multiple selections\n if (props.multiSelect)\n return;\n\n // Skip item if it's already collapsed\n if (!isExpanded)\n return;\n\n // Parents of a selected item should remain expanded\n if (isParentOfSelected)\n return;\n\n // Selected items should remain expanded\n if (isSelected)\n return;\n\n // Disabled items can be expanded if nothing has been selected\n if (!props.selectedIds?.length && isDisabled?.(props.tree))\n return;\n\n // If we want it to be initially open\n if (initiallyOpen)\n return;\n\n setIsExpanded(false);\n }, [selectedIds]);\n\n function onSelectNode(): void {\n if (isClickDisabled?.(tree))\n return;\n\n if (!props.multiSelect)\n setIsExpanded(!isExpanded);\n\n if (getAppLink) {\n Core.AppLinkHelper.trigger(getAppLink(tree));\n return;\n }\n\n if (isDisabled?.(tree)) {\n onSelect(null);\n return;\n }\n\n onSelect?.(tree);\n }\n\n function onClickCaret(e: any): void {\n e.stopPropagation();\n\n if (props.multiSelect) {\n setIsExpanded(!isExpanded);\n return;\n }\n\n onSelectNode();\n }\n\n function getNodeClass(): string {\n let className = `py-1 d-flex align-items-center w-100 position-relative ${styles.node}`;\n\n if (isSelected)\n className += ' ' + props.selectedLinkClassName;\n\n if (!actions?.length)\n className += ' ' + styles.noActions;\n\n if (isParentOfSelected && props.multiSelect)\n className += ' text-underline fst-italic';\n\n return className;\n }\n\n if (props.maxDisplayDepth && (props.depth > props.maxDisplayDepth))\n return <></>;\n\n return (\n <li className={`position-relative ${isExpanded ? '' : styles.collapsed} ${props.isRoot ? styles.root : ''}`}>\n <div className='position-relative'>\n <DivButton\n className={getNodeClass()}\n onClick={isDropdown ? null : onSelectNode}\n ref={ref}\n >\n {hasChildren && (\n <div className={styles.chevron} onClick={onClickCaret}>\n <Caret direction={isExpanded ? 'down' : 'right'} />\n </div>\n )}\n\n <TreeNodeText\n tree={tree}\n // Always prefer name over description\n text={tree.name || tree.description}\n isDisabled={isDisabled?.(tree) || isClickDisabled?.(tree)}\n disabledTooltip={props.disabledTooltip}\n />\n </DivButton>\n\n {!!props.actions && (\n <Actions\n className={styles.actions}\n actions={actions?.map(a => ({ ...a, appLink: a.getAppLink(tree) }))}\n actionsDropdownClassName={`btn btn-light ${TREE_ACTIONS_CLASS} py-0`}\n />\n )}\n\n {isExpanded && <Tree key={tree.id} {...props} isChild depth={props.depth + 1} />}\n </div>\n </li>\n );\n}\n","import * as React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { BaseObject } from 'libs/shared/interfaces';\nimport { BaseTree } from 'libs/shared/interfaces';\n\nimport { TreeNode, TreeNodeAction } from './TreeNode';\n\nimport styles from './tree.module.scss';\n\nexport interface TreeProps<T extends BaseTree<BaseObject>> {\n tree: T;\n selectedIds?: string[];\n getAppLink?: (item: T) => Core.AppLink;\n onSelect?: (item: T) => void;\n isDisabled?: (item: T) => boolean;\n isClickDisabled?: (item: T) => boolean;\n actions?: TreeNodeAction<T>[];\n selectedLinkClassName?: string;\n disabledTooltip?: string | ((tree: T) => string);\n isChild?: boolean;\n depth?: number;\n multiSelect?: boolean;\n /**\n * Set to true if you are using this component inside of\n * a bootstrap dropdown menu and don't want it to close\n * on click events - Sha\n */\n isDropdown?: boolean;\n /**\n * If you want to initially render open to a certain depth\n */\n openDepth?: number;\n maxDisplayDepth?: number;\n}\n\nexport function Tree<T extends BaseTree<BaseObject>>(props: TreeProps<T>): React.ReactElement {\n const { tree, ...childProps } = props;\n\n if (!tree || !tree.children)\n return <></>;\n\n return (\n <ul className={`m-0 p-0 list-unstyled ${styles.tree}`}>\n {tree.children.map((child, key) => (\n <TreeNode key={key} tree={child} {...childProps} isRoot={!props.isChild} depth={props.depth || 0} />\n ))}\n </ul>\n );\n}\n","import React from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\nimport { Form } from 'formik';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AddToLibraryFormValues } from 'libs/shared/apps/libraries/views/add-to-library/AddToLibraryView';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Tree } from 'libs/shared/components/tree/Tree';\nimport { BaseTree, Folder, Library, LibraryTree, PopupViewProps, VideoTypes } from 'libs/shared/interfaces';\nimport { TreeHelper } from 'libs/shared/utils/TreeHelper';\n\nconst namespace = 'libraries.addToLibraryForm';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface AddToLibraryFormProps extends PopupViewProps {\n libraries: Library[];\n isFolderDisabled: (folder: BaseTree<Folder>) => boolean;\n video: VideoTypes;\n videoLibraries?: Library[];\n getCategoryTree: (libraryId: string) => LibraryTree[];\n}\n\nexport function AddToLibraryForm(props: AddToLibraryFormProps): JSX.Element {\n const formikProps = useFormikContextWrapper<AddToLibraryFormValues>();\n\n const isMakingLibraryRequest = !formikProps.values.library.canAddContent;\n const isAlreadyInLibrary = props.videoLibraries?.find(l => l.id === formikProps.values.library.id);\n\n const tree = React.useMemo(() => {\n const categoryTree = props.getCategoryTree(formikProps.values.library.id);\n\n const rootBranches = categoryTree.map(TreeHelper.convertNestedObjectToTree);\n\n return {\n children: rootBranches\n } as BaseTree<Library>;\n }, [formikProps.values.library.id]);\n\n return (\n <>\n {isAlreadyInLibrary && (\n <div className='alert alert-info'>\n <Text namespace={namespace} phrase='alreadyInLibrary' options={{ library: formikProps.values.library.name }} />\n </div>\n )}\n\n {isMakingLibraryRequest && (\n <p>\n <Text namespace={namespace} phrase='sendLibraryRequest' options={{ video: props.video.name }} />\n </p>\n )}\n\n <Form>\n {props.libraries.length > 1 && (\n <FormField\n as='select'\n label={getPhrase('selectLibrary')}\n name='library'\n value={formikProps.values.library?.id ?? ''}\n className={!formikProps.values.library?.id ? 'text-secondary' : ''}\n showRequiredStar\n onChange={(e: any) => {\n formikProps.setFieldValue('folder', null);\n\n const libraryId = e.target.value;\n\n formikProps.setFieldValue('library', props.libraries.find(l => l.id.toString() === libraryId.toString()));\n }}\n >\n {props.libraries.map(library => (\n <option key={library.id} value={library.id} className='text-dark'>\n {library.name}\n </option>\n ))}\n </FormField>\n )}\n\n <FormField\n label={getPhrase('selectFolder')}\n name='folder'\n showRequiredStar\n disabled={!formikProps.values.library}\n >\n {() => (\n <Scrollbars autoHeight autoHeightMax={300} className='border rounded-3'>\n <Tree\n tree={tree}\n onSelect={(folder: Folder) => formikProps.setFieldValue('folder', folder)}\n isDisabled={props.isFolderDisabled}\n disabledTooltip={LanguageService.getPhrase(namespace, 'disabledFolder')}\n selectedIds={formikProps.values.folder?.id ? [formikProps.values.folder.id] : undefined}\n selectedLinkClassName='bg-light'\n />\n </Scrollbars>\n )}\n </FormField>\n \n {!!formikProps.values.folder && (\n <p className='mt-n2'>\n <Text\n namespace={namespace}\n phrase={isMakingLibraryRequest ? 'requestTo' : 'addTo'}\n options={{ folder: formikProps.values.folder.name }}\n />\n </p>\n )}\n\n {isMakingLibraryRequest && (\n <FormField\n label={LanguageService.getPhrase(namespace, 'comment')}\n as='textarea'\n name='comment'\n id='comment'\n placeholder={LanguageService.getPhrase(namespace, 'commentPlaceholder')}\n value={formikProps.values.comment}\n />\n )}\n\n <PopupButtons>\n <PopupButtons.Cancel onClick={props.closePopup} />\n <PopupButtons.Submit variant='dark' text={getPhrase('addToLibrary')} />\n </PopupButtons>\n </Form>\n </>\n );\n}\n","import { HardCoded } from 'libs/shared/constants/HardCoded';\nimport { ContentRegion } from 'libs/shared/enums/ContentRegion';\nimport { CurrentUser, Library } from 'libs/shared/interfaces';\n\ntype LibraryTypes = Library['type'] | 'shared_library';\n\nexport const LibraryHelper = {\n /**\n * Orders libraries by type (custom -> shared -> hosted).\n * Also orders libraries of same type alphabetically.\n */\n sort(libraries: Library[]): Library[] {\n if (!libraries?.length)\n return [];\n\n return libraries.sort((a: Library, b: Library) => {\n // This is required because shared libraries have a type of `custom_library`\n const aType: LibraryTypes = a.isSharedLibrary ? 'shared_library' : a.type;\n const bType: LibraryTypes = b.isSharedLibrary ? 'shared_library' : b.type;\n \n if (aType === bType)\n return a.name.localeCompare(b.name);\n \n if (aType === 'custom_library')\n return -1;\n \n if (aType === 'shared_library' && bType !== 'custom_library')\n return -1;\n\n if (aType === 'hosted_library' && bType !== 'custom_library' && bType !== 'shared_library')\n return -1;\n \n return 1;\n });\n },\n\n hasTwigOrTigtag(libraries: Library[], currentUser: CurrentUser) {\n if (!currentUser)\n return { hasTwig: false, hasTigtag: false };\n\n // Anon users can see Twig/Tigtag if they're in England.\n if (!currentUser.isAuthenticated) {\n const hasAnonAccess = (\n currentUser.contentRegion === ContentRegion.UK ||\n currentUser.contentRegion === ContentRegion.SCOT\n );\n\n return {\n hasTwig: hasAnonAccess,\n hasTigtag: hasAnonAccess\n };\n }\n\n if (!libraries)\n return { hasTwig: false, hasTigtag: false };\n \n let hasTwig = false;\n let hasTigtag = false;\n\n for (const lib of libraries) {\n if (lib.id.toString() === HardCoded.Libraries.TWIG)\n hasTwig = true;\n else if (lib.id.toString() === HardCoded.Libraries.TIGTAG)\n hasTigtag = true;\n\n // If both are true we don't need to keep searching\n if (hasTwig && hasTigtag)\n break;\n }\n\n return { hasTwig, hasTigtag };\n }\n};\n","import { object, string } from 'yup';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nconst namespace = 'libraries.validation';\n\nexport const AddToLibraryValidationSchema = object().shape({\n comment: string()\n .nullable()\n .max(512, () => LanguageService.getPhrase(namespace, 'commentExceeds')),\n library: object()\n .required(() => LanguageService.getPhrase(namespace, 'libraryRequired'))\n .nullable(),\n folder: object()\n .required(() => LanguageService.getPhrase(namespace, 'folderRequired'))\n .nullable()\n});\n","export enum LibraryRequestObjectType {\n MasterVideo = 1,\n MasterClip = 2,\n MasterInteractive = 3\n}\n","import { DevError } from 'libs/common/backbone/errors/DevError';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { InviteColleagueXhr, LibraryApiXhr } from 'libs/shared/interfaces/responses/ErrorResponse';\n\nconst getPhrase = LanguageService.encloseNamespace('shared.errorMessageHelper');\n\nconst LIBRARY_ERROR_PHRASE_MAPPING = {\n 'operation-not-allowed': 'operationNotAllowed',\n 'library-not-supported': 'libraryNotSupported',\n 'access-denied': 'accessDenied',\n 'library-access-denied': 'libraryAccessDenied',\n 'library-access-denied-create': 'libraryAccessDeniedCreate',\n 'library-access-denied-fulfil': 'libraryAccessDeniedFulfill',\n 'library-access-denied-not-authorized': 'libraryAccessDeniedNotAuthorized',\n 'library-request-access-denied': 'accessDenied',\n 'library-request-access-denied-create-request': 'libraryRequestAccessDeniedCreateRequest',\n 'library-request-access-denied-process-comment': 'libraryRequestAccessDeniedProcessComment',\n 'customer-not-found': 'customerNotFound',\n 'customer-not-found-current-user': 'customerNotFound',\n 'customer-not-found-library-owner': 'customerNotFoundLibraryOwner',\n 'customer-not-found-destination-library-owner': 'customerNotFoundLibraryOwner',\n 'user-not-found': 'userNotFound',\n 'library-not-found': 'libraryNotFound',\n 'video-not-found': 'videoNotFound',\n 'category-not-found': 'categoryNotFound',\n 'category-not-found-destination-not-provided': 'categoryNotFoundDestinationNotProvided',\n 'category-not-found-not-in-library': 'categoryNotFoundInLibrary',\n 'library-request-not-found': 'libraryRequestNotFound',\n 'invalid-category-path': 'invalidCategoryPath',\n 'library-api-error': 'somethingWentWrong',\n 'content-not-playable': 'contentNotPlayable',\n 'invalid-object': 'invalidObject',\n 'same-request-existed': 'sameRequestExisted',\n 'unknown-error': 'somethingWentWrong',\n 'no-email': 'noEmailError'\n};\n\nconst INVITE_COLLEAGUE_PHRASE_MAPPING = {\n 'create-invitation-failed': 'createInvitationFailed',\n 'invitation-resend-failed': 'invitationResendFailed',\n 'failed-to-accept': 'failedToAccept',\n 'invitee-not-found': 'inviteeNotFound',\n 'invitation-not-found': 'invitationNotFound',\n 'invitation-deleted': 'invitationDeleted',\n 'too-many-emails': 'tooManyEmails'\n};\n\nexport const ErrorMessageHelper = {\n libraryApiError(xhr: LibraryApiXhr): string {\n const phrase = LIBRARY_ERROR_PHRASE_MAPPING[xhr?.responseJSON?.type];\n\n if (!phrase)\n return getPhrase('somethingWentWrong');\n\n return getPhrase(phrase);\n },\n inviteColleagueError(xhr: InviteColleagueXhr): string {\n const phrase = INVITE_COLLEAGUE_PHRASE_MAPPING[xhr?.responseJSON?.type];\n\n if (!phrase)\n return getPhrase('somethingWentWrong');\n\n return getPhrase(phrase);\n }\n};\n\nexport const ErrorMessageHelperValidation = {\n libraryApiErrors(): void {\n Object.values(LIBRARY_ERROR_PHRASE_MAPPING).forEach(value => {\n const phrase = getPhrase(value);\n\n if (!phrase)\n Core.ErrorHelper.throw(new DevError(`No language mapping found for library api error type: ${value}`));\n });\n },\n inviteColleagueErrors(): void {\n Object.values(INVITE_COLLEAGUE_PHRASE_MAPPING).forEach(value => {\n const phrase = getPhrase(value);\n\n if (!phrase)\n Core.ErrorHelper.throw(new DevError(`No language mapping found for library api error type: ${value}`));\n });\n }\n};\n","import { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\n\ninterface OpenLibraryFolderParams {\n libraryId: string;\n folderId: string;\n}\n\nexport const LaunchUrlHelper = {\n buildOpenAppLinkUrl(baseLaunchUrl: string, appLink: string, product?: string): string {\n return UrlHelper.urlBuilder(`${baseLaunchUrl}/open`, { appLink, product });\n },\n\n buildOpenVideoUrl(baseLaunchUrl: string, videoId: string, product?: string): string {\n return LaunchUrlHelper.buildOpenAppLinkUrl(baseLaunchUrl, `video:${videoId}`, product);\n },\n\n buildOpenClipUrl(baseLaunchUrl: string, clipId: string, product?: string): string {\n return LaunchUrlHelper.buildOpenAppLinkUrl(baseLaunchUrl, `clip:${clipId}`, product);\n },\n\n buildOpenInteractiveUrl(baseLaunchUrl: string, interactiveId: string, product?: string): string {\n return LaunchUrlHelper.buildOpenAppLinkUrl(baseLaunchUrl, `interactive:${interactiveId}`, product);\n },\n\n buildOpenTopicUrl(baseLaunchUrl: string, topicId: string, product?: string): string {\n return LaunchUrlHelper.buildOpenAppLinkUrl(baseLaunchUrl, `topic:${topicId}`, product);\n },\n\n buildOpenSeriesUrl(baseLaunchUrl: string, seriesId: string, product?: string): string {\n return LaunchUrlHelper.buildOpenAppLinkUrl(baseLaunchUrl, `series:${seriesId}`, product);\n },\n\n buildOpenPlaylistUrl(baseLaunchUrl: string, playlistId: string, product?: string): string {\n return LaunchUrlHelper.buildOpenAppLinkUrl(baseLaunchUrl, `playlist:${playlistId}`, product);\n },\n\n buildOpenCategoryUrl(baseLaunchUrl: string, categoryId: string, product?: string): string {\n return LaunchUrlHelper.buildOpenAppLinkUrl(baseLaunchUrl, `category:${categoryId}`, product);\n },\n\n buildOpenLibraryFolderUrl(baseLaunchUrl: string, params: OpenLibraryFolderParams, product?: string): string {\n const appLink = `library:${params.libraryId}:folder:${params.folderId}`;\n \n return LaunchUrlHelper.buildOpenAppLinkUrl(baseLaunchUrl, appLink, product);\n }\n};\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { AlertType } from 'libs/common/backbone/services/BaseAlertService';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { AddToLibraryForm } from 'libs/shared/apps/libraries/components/add-to-library-form/AddToLibraryForm';\nimport { LibraryHelper } from 'libs/shared/apps/libraries/utils/LibraryHelper';\nimport { AddToLibraryValidationSchema } from 'libs/shared/apps/libraries/validation/AddToLibraryValidationSchema';\nimport { FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { LibraryRequestObjectType } from 'libs/shared/enums/LibraryRequestObjectType';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { LibraryRequests } from 'libs/shared/flight-requests/LibraryRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useVerifiedEmailRequiredErrorHandler } from 'libs/shared/hooks/useVerifiedEmailRequiredErrorHandler';\nimport { BaseTree, Clip, Config, CurrentUser, Folder, InteractiveMetadata, Library, LibraryTree, PopupViewProps, Video, VideoTypes } from 'libs/shared/interfaces';\nimport { AddToLibraryRequest } from 'libs/shared/interfaces/requests/AddToLibraryRequest';\nimport { LibraryApiXhr } from 'libs/shared/interfaces/responses/ErrorResponse';\nimport { ErrorMessageHelper } from 'libs/shared/utils/error-message-helper/ErrorMessageHelper';\nimport { LaunchUrlHelper } from 'libs/shared/utils/LaunchUrlHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\nimport { VideoSortHelper } from 'libs/shared/utils/VideoSortHelper';\n\nexport interface AddToLibraryFormValues {\n library: Library;\n folder: Folder;\n comment?: string;\n}\n\ntype LibraryObjectType = MasterType.Video | MasterType.Clip | MasterType.Interactive;\n\ntype ObjectTypeMap = {\n [K in LibraryObjectType]: LibraryRequestObjectType;\n};\n\nconst OBJECT_TYPE_MAP: ObjectTypeMap = {\n [MasterType.Video]: LibraryRequestObjectType.MasterVideo,\n [MasterType.Clip]: LibraryRequestObjectType.MasterClip,\n [MasterType.Interactive]: LibraryRequestObjectType.MasterInteractive\n};\n\nconst namespace = 'libraries.addToLibrary';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface AddToLibraryViewProps extends PopupViewProps {\n id: string;\n typeId: MasterType;\n folderAppLink?: Core.AppLink;\n}\n\nexport function AddToLibraryView(props: AddToLibraryViewProps): JSX.Element {\n const user = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const librariesWithCategories = Flight.useBasicFetch<LibraryTree[]>(LibraryRequests.librariesWithCategories());\n const libraries = Flight.useBasicFetch<Library[]>(LibraryRequests.libraryRequestLibraries());\n\n const videoRequest = VideoHelper.getVideoRequest(props.id, props.typeId);\n const video = Flight.useBasicFetch<VideoTypes>(videoRequest);\n\n const isClipOrInteractive = VideoHelper.isClip(video.data) || VideoHelper.isInteractive(video.data);\n const parentVideo = isClipOrInteractive && (video.data as Clip | InteractiveMetadata)?._parentVideo;\n const parentVideoDetails = Flight.useBasicFetch<Video>(\n parentVideo && VideoRequests.video(parentVideo.id)\n );\n\n const { loading, handleGenerateReportError } = useVerifiedEmailRequiredErrorHandler();\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const sortedLibraries = React.useMemo(() => LibraryHelper.sort(libraries.data), [libraries.data]);\n\n const fetchAsync = Flight.useGetFetchAsync();\n\n const alerts = useAlerts();\n\n const sort = !!user.data && VideoSortHelper.getOrSetSortType(user.data.id);\n\n /**\n * We try to pull the library and category id off the video/clip/interactive.\n * If we can't, then we try to get them off the _parentVideo. \n */\n function getSourceIds() {\n let sourceCategoryId: string = null;\n let sourceLibraryId = ArrayHelper.first(video.data?.libraries?.data)?.id;\n\n if (sourceLibraryId && video.data.categories.data?.length) {\n const category = video.data.categories.data.find(category => {\n return category.libraries?.data?.find(l => l.id.toString() === sourceLibraryId.toString());\n });\n\n if (category)\n sourceCategoryId = category.id;\n }\n\n if (!sourceLibraryId) {\n sourceLibraryId = ArrayHelper.first(parentVideoDetails.data?.libraries?.data)?.id;\n\n if (sourceLibraryId && parentVideoDetails.data.categories.data?.length) {\n const category = parentVideoDetails.data.categories.data.find(category => {\n return category.libraries?.data?.find(l => l.id.toString() === sourceLibraryId.toString());\n });\n \n if (category)\n sourceCategoryId = category.id;\n }\n }\n\n return {\n sourceLibraryId: sourceLibraryId ? +sourceLibraryId : null,\n sourceCategoryId: sourceCategoryId ? +sourceCategoryId : null\n };\n }\n\n function addToLibrary(data: AddToLibraryFormValues, onDone: () => void): void {\n const { sourceLibraryId, sourceCategoryId } = getSourceIds();\n\n const request: AddToLibraryRequest = {\n objectId: props.id.toString(),\n objectType: OBJECT_TYPE_MAP[props.typeId as LibraryObjectType],\n message: data.comment,\n sourceLibraryId,\n destinationLibraryId: +data.library.id,\n metadata: {\n destinationCategoryId: +data.folder.id,\n sourceCategoryId\n }\n };\n\n fetchAsync(LibraryRequests.addToLibrary(request, sort))\n .then(() => {\n if (!data.library.canAddContent) {\n alerts.success({\n type: AlertType.Pending,\n heading: getPhrase('pendingApproval'),\n message: getPhrase('libraryRequestSent', { library: data.library.name, escapeText: true })\n });\n } else {\n alerts.success({\n type: AlertType.Success,\n heading: '',\n message: getPhrase('addToLibrarySuccess', { folder: data.folder.name, video: video.data.name, escapeText: true }),\n ...(props.folderAppLink ? {\n appLink: {\n ...props.folderAppLink,\n args: [ data.library.id, data.folder.id, TextHelper.slugify(data.folder.name) ]\n },\n appLinkText: getPhrase('goToFolder', { folder: data.folder.name }),\n appLinkClassName: 'info-link'\n } : {\n extLink: LaunchUrlHelper.buildOpenLibraryFolderUrl(config.data.launchUrl, {\n libraryId: data.library.id,\n folderId: data.folder.id\n }),\n extLinkText: getPhrase('goToFolder', { folder: data.folder.name }),\n extLinkClassName: 'info-link'\n })\n });\n }\n })\n .catch((xhr: LibraryApiXhr) => {\n const errorMessage = ErrorMessageHelper.libraryApiError(xhr);\n handleGenerateReportError(xhr, errorMessage, errorMessage);\n onDone();\n })\n .finally(() => {\n props.closePopup();\n });\n }\n\n function getCategoryTree(libraryId: string): LibraryTree[] {\n return librariesWithCategories.data.find(l => l.data.id.toString() === libraryId.toString())?.children;\n }\n\n function isFolderDisabled(folder: BaseTree<Folder>): boolean {\n return !!video.data.categories?.data?.find(category => category.id === folder.id);\n }\n\n const dataLoaded = (\n libraries.data &&\n video.data &&\n librariesWithCategories.data\n );\n\n return (\n <Popup title={getPhrase('addToLibrary')} closePopup={props.closePopup} showLoadingSpinner={!dataLoaded || loading}>\n {dataLoaded && (\n <FormWrapper<AddToLibraryFormValues>\n initialValues={{\n library: ArrayHelper.first(sortedLibraries),\n folder: null,\n comment: ''\n }}\n validationSchema={AddToLibraryValidationSchema}\n onSubmit={addToLibrary}\n >\n <AddToLibraryForm\n libraries={sortedLibraries}\n closePopup={props.closePopup}\n isFolderDisabled={isFolderDisabled}\n video={video.data}\n videoLibraries={video.data?.libraries?.data}\n getCategoryTree={getCategoryTree}\n />\n </FormWrapper>\n )}\n </Popup>\n );\n}\n"],"mappings":"k7BAMA,SAAA,EAAA,EAAA,EAAA,EAAA,CAKE,GAAA,EAAA,QAAA,EAAA,GAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,kBAKA,GAAA,CAAA,GAAA,CAAA,EAAA,OAAA,MAAA,CAAA,KAAA,KAAA,CAGA,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,OAAA,IAAA,6BAGE,GAAA,EAAA,MAAA,CAAA,EAAA,EAAA,CAIF,MAAA,CAAA,KAAA,KAAA,CAKF,IAAA,EAAA,WAEI,MAAA,GAAA,CAAA,EAAA,UAAA,CAAA,EAAA,SAAA,QAGA,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,SAAA,OAAA,IAAA,8BAGE,GAAA,EAAA,OAAA,iBAMF,MAAA,GAAA,CAAA,EAAA,UAAA,CAAA,EAAA,SAAA,QAGA,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,SAAA,OAAA,IAAA,+BAGE,GAAA,GAAA,OAAA,OAAA,wCAWF,OAHA,GAAA,OAGA,EAAA,EAAA,OAAA,GAHA,yEAeA,OAHA,EAAA,UAAA,SAAA,EAAA,SAAA,EAAA,SAAA,IAAA,EAAA,0BAAA,EAGA,sBAIA,GAAA,CAAA,GAAA,EAAA,SAAA,EAAA,MAAA,WAMA,IAAA,IAAA,KAAA,EAAA,CACE,GAAA,EAAA,MAAA,IAAA,UAAA,GAAA,EAAA,UAAA,CAAA,OAAA,sCAMA,GAAA,EAAA,EAAA,CACE,EAAA,EACA,OAIJ,OAAA,4BAIA,GAAA,CAAA,GAAA,EAAA,SAAA,EAAA,OAAA,UAMA,IAAA,IAAA,KAAA,EAAA,2CAEE,EAAA,KAAA,IAAA,EAAA,EAAA,CAGF,OAAA,uBAIA,GAAA,CAAA,GAAA,EAAA,SAAA,EAAA,OAAA,KAIA,IAAA,IAAA,KAAA,EAAA,CACE,GAAA,EAAA,MAAA,IAAA,UAAA,GAAA,EAAA,UAAA,CAAA,OAAA,uCAKA,GAAA,IAAA,KAAA,OAAA,EAKF,OAAA,wDAaA,OAAA,EAAA,kBAAA,EAAA,SAAA,CAAA,EAAA,UAAA,EAAA,EAAA,EAAA,cAMA,GAAA,CAAA,EAAA,MAAA,EAAA,wBAME,EAAA,KAAA,EAAA,KAAA,EAAA,CAAA,WAAA,CAAA,CAAA,CACA,EAAA,SAAA,QAAA,EAAA,CAKF,OAFA,EAAA,SAAA,QAAA,EAAA,CAEA,6PEjJJ,SAAgB,EAA6C,EAAiD,CAC5G,SAAS,GAAuB,CAC9B,IAAI,EAAgB,GAAG,EAAO,KAAK,UAKnC,OAHI,EAAM,YACR,GAAiB,IAAI,EAAM,aAEtB,EAiBT,OAdI,EAAM,YAMN,EAAA,EAAA,KAAC,EAAD,CAAS,MALa,OAAO,EAAM,iBAAoB,SACvD,EAAM,gBACN,EAAM,kBAAkB,EAAM,KAAK,CAGF,SAAA,GAAS,kBAAkB,uCAC1D,EAAA,EAAA,KAAC,OAAD,CAAM,UAAW,GAAG,GAAc,CAAC,kBAAkB,EAAO,oBACzD,EAAM,KACF,CAAA,CACC,CAAA,EAKZ,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,GAAc,UAC3B,EAAM,KACH,CAAA,CC3BV,IAAM,EAAqB,eA0B3B,EAAS,aAAe,CACtB,sBAAuB,EAAO,SAC/B,CAED,SAAgB,EAAyC,EAA6C,CACpG,GAAM,CAAE,OAAM,cAAa,aAAY,WAAU,aAAY,kBAAiB,UAAS,cAAe,EAEhG,EAAA,EAAY,OAAuB,KAAK,CAGxC,EAAA,EAA2B,YACxB,GAAa,KAAK,GAAM,EAAW,KAAK,EAAM,EAAG,CAAC,CACxD,CAAE,EAAM,EAAa,CAAC,CAGnB,EAAgB,EAAM,WAAa,EAAM,MAAQ,EAAM,UAGvD,CAAE,EAAY,GAAA,EAAwB,SAAS,GAAsB,EAAc,CAEnF,EAAa,GAAa,KAAK,GAAM,EAAW,QAAQ,EAAK,GAAI,EAAG,CAAC,CACvE,EAAc,CAAC,CAAC,EAAK,UAAY,CAAC,CAAC,EAAK,SAAS,OAEjD,EAAM,iBAAmB,IAC3B,EAAc,EAAM,MAAQ,EAAM,iBAMpC,EAAM,cAAgB,CACpB,GAAI,CAAC,EAAI,SAAW,CAAC,EACnB,OAEF,IAAM,EAAW,GAAa,CAC5B,EAAE,iBAAiB,CACnB,GAAc,EAIhB,OADA,EAAI,QAAQ,iBAAiB,QAAS,EAAQ,KACjC,CACN,EAAI,SAGT,EAAI,QAAQ,oBAAoB,QAAS,EAAQ,GAElD,CAAE,EAAI,QAAS,EAAU,CAAC,CAK7B,EAAM,cAAgB,CAEhB,EAAM,aAIL,IAID,GAIA,GAIA,CAAC,EAAM,aAAa,QAAU,IAAa,EAAM,KAAK,EAItD,GAGJ,EAAc,GAAM,GACnB,CAAC,EAAY,CAAC,CAEjB,SAAS,GAAqB,CACxB,QAAkB,EAAK,CAM3B,IAHK,EAAM,aACT,EAAc,CAAC,EAAW,CAExB,EAAY,CACd,EAAmB,QAAQ,EAAW,EAAK,CAAC,CAC5C,OAGF,GAAI,IAAa,EAAK,CAAE,CACtB,EAAS,KAAK,CACd,OAGF,IAAW,EAAK,EAGlB,SAAS,EAAa,EAAc,CAGlC,GAFA,EAAE,iBAAiB,CAEf,EAAM,YAAa,CACrB,EAAc,CAAC,EAAW,CAC1B,OAGF,GAAc,CAGhB,SAAS,GAAuB,CAC9B,IAAI,EAAY,0DAA0D,EAAO,OAWjF,OATI,IACF,GAAa,IAAM,EAAM,uBAEtB,GAAS,SACZ,GAAa,IAAM,EAAO,WAExB,GAAsB,EAAM,cAC9B,GAAa,8BAER,EAMT,OAHI,EAAM,iBAAoB,EAAM,MAAQ,EAAM,iBACzC,EAAA,EAAA,KAAA,EAAA,SAAA,EAAK,CAAA,EAGZ,EAAA,EAAA,KAAC,KAAD,CAAI,UAAW,qBAAqB,EAAa,GAAK,EAAO,UAAU,GAAG,EAAM,OAAS,EAAO,KAAO,eACrG,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,6BAAf,EACE,EAAA,EAAA,MAAC,EAAD,CACE,UAAW,GAAc,CACzB,QAAS,EAAa,KAAO,EACxB,eAHP,CAKG,IACC,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,EAAO,QAAS,QAAS,YACvC,EAAA,EAAA,KAAC,GAAD,CAAO,UAAW,EAAa,OAAS,QAAW,CAAA,CAC/C,CAAA,EAGR,EAAA,EAAA,KAAC,EAAD,CACQ,OAEN,KAAM,EAAK,MAAQ,EAAK,YACxB,WAAY,IAAa,EAAK,EAAI,IAAkB,EAAK,CACzD,gBAAiB,EAAM,gBACvB,CAAA,CAAA,GAGH,CAAC,CAAC,EAAM,UACP,EAAA,EAAA,KAAC,EAAD,CACE,UAAW,EAAO,QAClB,QAAS,GAAS,IAAI,IAAM,CAAE,GAAG,EAAG,QAAS,EAAE,WAAW,EAAA,CAAO,EAAE,CACnE,yBAA0B,iBAAiB,EAAmB,OAC9D,CAAA,CAGH,IAAc,EAAA,EAAA,KAAC,EAAD,CAAoB,GAAI,EAAO,QAAA,GAAQ,MAAO,EAAM,MAAQ,EAAK,CAAtD,EAAK,GAAA,IAE9B,CAAA,CCvKT,SAAgB,EAAqC,EAAyC,CAC5F,GAAM,CAAE,OAAM,GAAG,GAAe,EAKhC,MAHI,CAAC,GAAQ,CAAC,EAAK,UACV,EAAA,EAAA,KAAA,EAAA,SAAA,EAAK,CAAA,EAGZ,EAAA,EAAA,KAAC,KAAD,CAAI,UAAW,yBAAyB,EAAO,gBAC5C,EAAK,SAAS,KAAK,EAAO,KACzB,EAAA,EAAA,KAAC,EAAD,CAAoB,KAAM,EAAO,GAAI,EAAY,OAAQ,CAAC,EAAM,QAAS,MAAO,EAAM,OAAS,EAAK,CAArF,EAAqF,CAAA,CAEnG,CAAA,CCjCT,IAAM,EAAY,6BACZ,EAAY,EAAgB,iBAAiB,EAAU,CAU7D,SAAgB,EAAiB,EAA2C,CAC1E,IAAM,EAAc,GAAiD,CAE/D,EAAyB,CAAC,EAAY,OAAO,QAAQ,cACrD,EAAqB,EAAM,gBAAgB,KAAK,GAAK,EAAE,KAAO,EAAY,OAAO,QAAQ,GAAG,CAE5F,EAAA,EAAa,aAKV,CACL,SALmB,EAAM,gBAAgB,EAAY,OAAO,QAAQ,GAAG,CAEvC,IAAI,EAAW,0BAA0B,CAI1E,EACA,CAAC,EAAY,OAAO,QAAQ,GAAG,CAAC,CAEnC,OACE,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,CACG,IACC,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,6BACb,EAAA,EAAA,KAAC,EAAD,CAAiB,UAAA,EAAW,OAAO,mBAAmB,QAAS,CAAE,QAAS,EAAY,OAAO,QAAQ,KAAM,CAAI,CAAA,CAC3G,CAAA,CAGP,IACC,EAAA,EAAA,KAAC,IAAD,CAAA,UACE,EAAA,EAAA,KAAC,EAAD,CAAiB,UAAA,EAAW,OAAO,qBAAqB,QAAS,CAAE,MAAO,EAAM,MAAM,KAAM,CAAI,CAAA,CAC9F,CAAA,EAGN,EAAA,EAAA,MAAC,EAAD,CAAA,SAAA,CACG,EAAM,UAAU,OAAS,IACxB,EAAA,EAAA,KAAC,EAAD,CACE,GAAG,SACH,MAAO,EAAU,gBAAgB,CACjC,KAAK,UACL,MAAO,EAAY,OAAO,SAAS,IAAM,GACzC,UAAY,EAAY,OAAO,SAAS,GAAwB,GAAnB,iBAC7C,iBAAA,GACA,SAAW,GAAW,CACpB,EAAY,cAAc,SAAU,KAAK,CAEzC,IAAM,EAAY,EAAE,OAAO,MAE3B,EAAY,cAAc,UAAW,EAAM,UAAU,KAAK,GAAK,EAAE,GAAG,UAAU,GAAK,EAAU,UAAU,CAAC,CAAC,WAG1G,EAAM,UAAU,IAAI,IACnB,EAAA,EAAA,KAAC,SAAD,CAAyB,MAAO,EAAQ,GAAI,UAAU,qBACnD,EAAQ,KACF,CAFI,EAAQ,GAEZ,CACT,CACQ,CAAA,EAGd,EAAA,EAAA,KAAC,EAAD,CACE,MAAO,EAAU,eAAe,CAChC,KAAK,SACL,iBAAA,GACA,SAAU,CAAC,EAAY,OAAO,sBAG5B,EAAA,EAAA,KAAC,EAAA,WAAD,CAAY,WAAA,GAAW,cAAe,IAAK,UAAU,6BACnD,EAAA,EAAA,KAAC,EAAD,CACQ,OACN,SAAW,GAAmB,EAAY,cAAc,SAAU,EAAO,CACzE,WAAY,EAAM,iBAClB,gBAAiB,EAAgB,UAAU,EAAW,iBAAiB,CACvE,YAAa,EAAY,OAAO,QAAQ,GAAK,CAAC,EAAY,OAAO,OAAO,GAAG,CAAG,IAAA,GAC9E,sBAAsB,WACtB,CAAA,CACS,CAAA,CAEL,CAAA,CAEX,CAAC,CAAC,EAAY,OAAO,SACpB,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,kBACX,EAAA,EAAA,KAAC,EAAD,CACa,UAAA,EACX,OAAQ,EAAyB,YAAc,QAC/C,QAAS,CAAE,OAAQ,EAAY,OAAO,OAAO,KAAM,CACnD,CAAA,CACA,CAAA,CAGL,IACC,EAAA,EAAA,KAAC,EAAD,CACE,MAAO,EAAgB,UAAU,EAAW,UAAU,CACtD,GAAG,WACH,KAAK,UACL,GAAG,UACH,YAAa,EAAgB,UAAU,EAAW,qBAAqB,CACvE,MAAO,EAAY,OAAO,QAC1B,CAAA,EAGJ,EAAA,EAAA,MAAC,EAAD,CAAA,SAAA,EACE,EAAA,EAAA,KAAC,EAAa,OAAd,CAAqB,QAAS,EAAM,WAAc,CAAA,EAClD,EAAA,EAAA,KAAC,EAAa,OAAd,CAAqB,QAAQ,OAAO,KAAM,EAAU,eAAe,CAAI,CAAA,CAC1D,CAAA,CAAA,CACV,CAAA,CAAA,CACN,CAAA,CAAA,CCzHP,IAAa,EAAgB,CAK3B,KAAK,EAAiC,CAIpC,OAHK,GAAW,OAGT,EAAU,MAAM,EAAY,IAAe,CAEhD,IAAM,EAAsB,EAAE,gBAAkB,iBAAmB,EAAE,KAC/D,EAAsB,EAAE,gBAAkB,iBAAmB,EAAE,KAcrE,OAZI,IAAU,EACL,EAAE,KAAK,cAAc,EAAE,KAAK,CAEjC,IAAU,kBAGV,IAAU,kBAAoB,IAAU,kBAGxC,IAAU,kBAAoB,IAAU,kBAAoB,IAAU,iBACjE,GAEF,GACP,CApBO,EAAE,EAuBb,gBAAgB,EAAsB,EAA0B,CAC9D,GAAI,CAAC,EACH,MAAO,CAAE,QAAS,GAAO,UAAW,GAAO,CAG7C,GAAI,CAAC,EAAY,gBAAiB,CAChC,IAAM,EACJ,EAAY,gBAAkB,EAAc,IAC5C,EAAY,gBAAkB,EAAc,KAG9C,MAAO,CACL,QAAS,EACT,UAAW,EACZ,CAGH,GAAI,CAAC,EACH,MAAO,CAAE,QAAS,GAAO,UAAW,GAAO,CAE7C,IAAI,EAAU,GACV,EAAY,GAEhB,IAAK,IAAM,KAAO,EAOhB,GANI,EAAI,GAAG,UAAU,GAAK,EAAU,UAAU,KAC5C,EAAU,GACH,EAAI,GAAG,UAAU,GAAK,EAAU,UAAU,SACjD,EAAY,IAGV,GAAW,EACb,MAGJ,MAAO,CAAE,UAAS,YAAW,EAEhC,UCpEK,EAAY,uBAEL,GAAA,EAAA,EAAA,SAAuC,CAAC,MAAM,CACzD,SAAA,EAAA,EAAA,SAAiB,CACd,UAAU,CACV,IAAI,QAAW,EAAgB,UAAU,EAAW,iBAAiB,CAAC,CACzE,SAAA,EAAA,EAAA,SAAiB,CACd,aAAe,EAAgB,UAAU,EAAW,kBAAkB,CAAC,CACvE,UAAU,CACb,QAAA,EAAA,EAAA,SAAgB,CACb,aAAe,EAAgB,UAAU,EAAW,iBAAiB,CAAC,CACtE,UAAU,CACd,CAAC,CChBU,EAAL,SAAA,EAAA,OACL,GAAA,EAAA,YAAA,GAAA,cACA,EAAA,EAAA,WAAA,GAAA,aACA,EAAA,EAAA,kBAAA,GAAA,0BACD,CCEK,EAAY,EAAgB,iBAAiB,4BAA4B,CAEzE,GAA+B,CACnC,wBAAyB,sBACzB,wBAAyB,sBACzB,gBAAiB,eACjB,wBAAyB,sBACzB,+BAAgC,4BAChC,+BAAgC,6BAChC,uCAAwC,mCACxC,gCAAiC,eACjC,+CAAgD,0CAChD,gDAAiD,2CACjD,qBAAsB,mBACtB,kCAAmC,mBACnC,mCAAoC,+BACpC,+CAAgD,+BAChD,iBAAkB,eAClB,oBAAqB,kBACrB,kBAAmB,gBACnB,qBAAsB,mBACtB,8CAA+C,yCAC/C,oCAAqC,4BACrC,4BAA6B,yBAC7B,wBAAyB,sBACzB,oBAAqB,qBACrB,uBAAwB,qBACxB,iBAAkB,gBAClB,uBAAwB,qBACxB,gBAAiB,qBACjB,WAAY,eACb,CAEK,GAAkC,CACtC,2BAA4B,yBAC5B,2BAA4B,yBAC5B,mBAAoB,iBACpB,oBAAqB,kBACrB,uBAAwB,qBACxB,qBAAsB,oBACtB,kBAAmB,gBACpB,CAEY,EAAqB,CAChC,gBAAgB,EAA4B,CAC1C,IAAM,EAAS,GAA6B,GAAK,cAAc,MAK/D,OAAO,EAHF,GACc,qBAAqB,EAI1C,qBAAqB,EAAiC,CACpD,IAAM,EAAS,GAAgC,GAAK,cAAc,MAKlE,OAAO,EAHF,GACc,qBAAqB,EAI3C,CC3DY,EAAkB,CAC7B,oBAAoB,EAAuB,EAAiB,EAA0B,CACpF,OAAO,EAAU,WAAW,GAAG,EAAc,OAAQ,CAAE,UAAS,UAAS,CAAC,EAG5E,kBAAkB,EAAuB,EAAiB,EAA0B,CAClF,OAAO,EAAgB,oBAAoB,EAAe,SAAS,IAAW,EAAQ,EAGxF,iBAAiB,EAAuB,EAAgB,EAA0B,CAChF,OAAO,EAAgB,oBAAoB,EAAe,QAAQ,IAAU,EAAQ,EAGtF,wBAAwB,EAAuB,EAAuB,EAA0B,CAC9F,OAAO,EAAgB,oBAAoB,EAAe,eAAe,IAAiB,EAAQ,EAGpG,kBAAkB,EAAuB,EAAiB,EAA0B,CAClF,OAAO,EAAgB,oBAAoB,EAAe,SAAS,IAAW,EAAQ,EAGxF,mBAAmB,EAAuB,EAAkB,EAA0B,CACpF,OAAO,EAAgB,oBAAoB,EAAe,UAAU,IAAY,EAAQ,EAG1F,qBAAqB,EAAuB,EAAoB,EAA0B,CACxF,OAAO,EAAgB,oBAAoB,EAAe,YAAY,IAAc,EAAQ,EAG9F,qBAAqB,EAAuB,EAAoB,EAA0B,CACxF,OAAO,EAAgB,oBAAoB,EAAe,YAAY,IAAc,EAAQ,EAG9F,0BAA0B,EAAuB,EAAiC,EAA0B,CAC1G,IAAM,EAAU,WAAW,EAAO,UAAU,UAAU,EAAO,WAE7D,OAAO,EAAgB,oBAAoB,EAAe,EAAS,EAAQ,EAE9E,CCHK,GAAiC,EACpC,EAAW,OAAQ,EAAyB,aAC5C,EAAW,MAAO,EAAyB,YAC3C,EAAW,aAAc,EAAyB,kBACpD,CAGK,EAAY,EAAgB,iBADhB,yBAC2C,CAQ7D,SAAgB,GAAiB,EAA2C,CAC1E,IAAM,EAAO,EAAkC,EAAa,aAAa,CAAC,CACpE,EAA0B,EAAoC,EAAgB,yBAAyB,CAAC,CACxG,EAAY,EAAgC,EAAgB,yBAAyB,CAAC,CAGtF,EAAQ,EADO,EAAY,gBAAgB,EAAM,GAAI,EAAM,OAAO,CACZ,CAGtD,GADsB,EAAY,OAAO,EAAM,KAAK,EAAI,EAAY,cAAc,EAAM,KAAK,GACvD,EAAM,MAAqC,aACjF,EAAqB,EACzB,GAAe,GAAc,MAAM,EAAY,GAAG,CACnD,CAEK,CAAE,UAAS,6BAA8B,IAAsC,CAE/E,EAAS,EAA6B,EAAe,QAAQ,CAAC,CAE9D,EAAA,EAAwB,YAAc,EAAc,KAAK,EAAU,KAAK,CAAE,CAAC,EAAU,KAAK,CAAC,CAE3F,EAAa,GAAyB,CAEtC,EAAS,GAAW,CAEpB,EAAO,CAAC,CAAC,EAAK,MAAQ,EAAgB,iBAAiB,EAAK,KAAK,GAAG,CAM1E,SAAS,GAAe,CACtB,IAAI,EAA2B,KAC3B,EAAkB,EAAY,MAAM,EAAM,MAAM,WAAW,KAAK,EAAE,GAEtE,GAAI,GAAmB,EAAM,KAAK,WAAW,MAAM,OAAQ,CACzD,IAAM,EAAW,EAAM,KAAK,WAAW,KAAK,KAAK,GACxC,EAAS,WAAW,MAAM,KAAK,GAAK,EAAE,GAAG,UAAU,GAAK,EAAgB,UAAU,CAAC,CAC1F,CAEE,IACF,EAAmB,EAAS,IAGhC,GAAI,CAAC,IACH,EAAkB,EAAY,MAAM,EAAmB,MAAM,WAAW,KAAK,EAAE,GAE3E,GAAmB,EAAmB,KAAK,WAAW,MAAM,QAAQ,CACtE,IAAM,EAAW,EAAmB,KAAK,WAAW,KAAK,KAAK,GACrD,EAAS,WAAW,MAAM,KAAK,GAAK,EAAE,GAAG,UAAU,GAAK,EAAgB,UAAU,CAAC,CAC1F,CAEE,IACF,EAAmB,EAAS,IAIlC,MAAO,CACL,gBAAiB,EAAkB,CAAC,EAAkB,KACtD,iBAAkB,EAAmB,CAAC,EAAmB,KAC1D,CAGH,SAAS,EAAa,EAA8B,EAA0B,CAC5E,GAAM,CAAE,kBAAiB,oBAAqB,GAAc,CAEtD,EAA+B,CACnC,SAAU,EAAM,GAAG,UAAU,CAC7B,WAAY,GAAgB,EAAM,QAClC,QAAS,EAAK,QACd,kBACA,qBAAsB,CAAC,EAAK,QAAQ,GACpC,SAAU,CACR,sBAAuB,CAAC,EAAK,OAAO,GACpC,mBACD,CACF,CAED,EAAW,EAAgB,aAAa,EAAS,EAAK,CAAC,CACpD,SAAW,CACL,EAAK,QAAQ,cAOhB,EAAO,QAAQ,CACb,KAAM,EAAU,QAChB,QAAS,GACT,QAAS,EAAU,sBAAuB,CAAE,OAAQ,EAAK,OAAO,KAAM,MAAO,EAAM,KAAK,KAAM,WAAY,GAAM,CAAC,CACjH,GAAI,EAAM,cAAgB,CACxB,QAAS,CACP,GAAG,EAAM,cACT,KAAM,CAAE,EAAK,QAAQ,GAAI,EAAK,OAAO,GAAI,EAAW,QAAQ,EAAK,OAAO,KAAK,CAAE,CAChF,CACD,YAAa,EAAU,aAAc,CAAE,OAAQ,EAAK,OAAO,KAAM,CAAC,CAClE,iBAAkB,YACnB,CAAG,CACF,QAAS,EAAgB,0BAA0B,EAAO,KAAK,UAAW,CACxE,UAAW,EAAK,QAAQ,GACxB,SAAU,EAAK,OAAO,GACvB,CAAC,CACF,YAAa,EAAU,aAAc,CAAE,OAAQ,EAAK,OAAO,KAAM,CAAC,CAClE,iBAAkB,YACnB,CACF,CAAC,CAzBF,EAAO,QAAQ,CACb,KAAM,EAAU,QAChB,QAAS,EAAU,kBAAkB,CACrC,QAAS,EAAU,qBAAsB,CAAE,QAAS,EAAK,QAAQ,KAAM,WAAY,GAAM,CAAC,CAC3F,CAAC,EAuBJ,CACD,MAAO,GAAuB,CAC7B,IAAM,EAAe,EAAmB,gBAAgB,EAAI,CAC5D,EAA0B,EAAK,EAAc,EAAa,CAC1D,GAAQ,EACR,CACD,YAAc,CACb,EAAM,YAAY,EAClB,CAGN,SAAS,EAAgB,EAAkC,CACzD,OAAO,EAAwB,KAAK,KAAK,GAAK,EAAE,KAAK,GAAG,UAAU,GAAK,EAAU,UAAU,CAAC,EAAE,SAGhG,SAAS,EAAiB,EAAmC,CAC3D,MAAO,CAAC,CAAC,EAAM,KAAK,YAAY,MAAM,KAAK,GAAY,EAAS,KAAO,EAAO,GAAG,CAGnF,IAAM,EACJ,EAAU,MACV,EAAM,MACN,EAAwB,KAG1B,OACE,EAAA,EAAA,KAAC,EAAD,CAAO,MAAO,EAAU,eAAe,CAAE,WAAY,EAAM,WAAY,mBAAoB,CAAC,GAAc,WACvG,IACC,EAAA,EAAA,KAAC,GAAD,CACE,cAAe,CACb,QAAS,EAAY,MAAM,EAAgB,CAC3C,OAAQ,KACR,QAAS,GACV,CACD,iBAAkB,EAClB,SAAU,YAEV,EAAA,EAAA,KAAC,EAAD,CACE,UAAW,EACX,WAAY,EAAM,WACA,mBAClB,MAAO,EAAM,KACb,eAAgB,EAAM,MAAM,WAAW,KACtB,kBACjB,CAAA,CACU,CAAA,CAEV,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{C as e,D as t,O as n,St as r,_t as i,b as a,d as o,ft as s,mn as c,o as l,s as u,t as d}from"./CnnBLBPY.chunk.js";import{_ as f,g as p,n as m,r as h,t as g,v as _}from"./DW0w8_XN.chunk.js";import{l as v}from"./D8clSITt.chunk.js";import{t as y}from"./CBDo4oAU.chunk.js";import{t as b}from"./GN6vNflP.chunk.js";import{n as x,t as S}from"./QxhzRpcg.chunk.js";import{a as C,c as w,n as T,r as ee,t as E}from"./cIPkkuhG.chunk.js";import{t as te}from"./xL848v0O.chunk.js";import{t as ne}from"./BHEKlg6n.chunk.js";import{n as D,r as O,t as re}from"./BK-FLPB-.chunk.js";import{E as ie,F as ae,I as k,O as oe,T as se,Z as A,r as ce,tt as le,v as ue}from"./app-DDrsm5nt.js";import{t as j}from"./DWCNy_Jd2.chunk.js";import{t as M}from"./ZSP3Vfha2.chunk.js";import{t as N}from"./D9zlZIWi2.chunk.js";import{t as P}from"./BggsU83p2.chunk.js";import{i as de,n as fe,t as pe}from"./CxfZJDOr2.chunk.js";import{n as me,t as F}from"./BITl6co82.chunk.js";import{t as he}from"./DbuCsVvX.chunk.js";import{n as I,o as ge,t as L}from"./CXtVyCmH.chunk.js";import{t as _e}from"./B7KaaLVd.chunk.js";import{t as ve}from"./DrVEkVd5.chunk.js";import{S as ye,_ as be,a as xe,b as Se,c as Ce,d as we,f as Te,g as Ee,h as De,i as R,l as Oe,m as ke,n as Ae,o as je,p as Me,r as Ne,s as Pe,t as Fe,u as Ie,v as Le,x as Re,y as ze}from"./BXmlDh1p.chunk.js";import{n as Be,t as Ve}from"./Jf-R5ehU.chunk.js";import{i as He,n as Ue,r as We}from"./ApcDOLl8.chunk.js";import{n as Ge}from"./CYUx40jk.chunk.js";import{t as Ke}from"./BLtXMKpA.chunk.js";import{a as qe,c as Je,i as Ye,n as Xe,o as Ze,r as Qe,s as $e,t as et,u as tt}from"./CUdaR862.chunk.js";var z=function(e){return e[e.MultipleChoice=1]=`MultipleChoice`,e[e.ShortAnswer=2]=`ShortAnswer`,e[e.TrueOrFalse=3]=`TrueOrFalse`,e[e.Annotation=4]=`Annotation`,e[e.Image=5]=`Image`,e[e.MissingWord=6]=`MissingWord`,e[e.Illustration=7]=`Illustration`,e}({}),nt={},B=c(t()),rt=B.createContext(null);function it(e){return`series`in e?Ge(e.series):null}function at(){let e=v(A.config());return{hasCommonVideoPropsCompleted:e.hasCompleted,commonVideoProps:{subTextType:`series`,getSubTextAppLink:it,isPlugin:!1,canFavourite:null,setFavourite:null,yearGroups:null,imageCdnUrl:e.data?.imageCdnUrl,getClassroomGuideAppLink:null,getInteractiveGuidanceAppLink:null,getResourceGuidanceAppLink:null,showNewVideoIndicator:!1,getCompanyLogoFallbackUrl:()=>null,hasStudentExperience:!1,hasGuestExperience:!1,features:{showClassroomGuide:()=>!1}}}}var V=e();function ot(e,t,n){if(!t)return null;let r=e.params??{};return n?r?.previous?{application:e.application,action:e.action,args:e.args,params:{...r,cursor:r?.previous,previous:null}}:{application:e.application,action:e.action,args:e.args,params:{...r,cursor:null,previous:null}}:{application:e.application,action:e.action,args:e.args,params:{...r,cursor:t,previous:r.cursor}}}st.defaultProps={className:`py-2`,buttonVariant:`secondary`};function st({appLink:e,cursors:t,className:n,buttonVariant:r,prevHack:i,scrollTop:s,onClick:c}){function l(n){e&&s===!1&&ve.preventScrollTop(),d.logUserAction({page:n},{location:o.Pagination,entity:u.Pagination,actionType:a.Navigate}),c&&c(t[n])}return e?(0,V.jsx)(ae.Provider,{value:`shared.pagination`,children:(0,V.jsxs)(`div`,{className:n,children:[(0,V.jsx)(p,{appLink:ot(e,t.previous,i),className:`btn btn-${r} me-1 ${t.previous?``:`disabled`}`,onClick:()=>l(`previous`),style:{display:`inline-block`},children:(0,V.jsx)(k,{phrase:`previous`})}),(0,V.jsx)(p,{appLink:ot(e,t.next),className:`btn btn-${r} ${t.next?``:`disabled`}`,onClick:()=>l(`next`),style:{display:`inline-block`},children:(0,V.jsx)(k,{phrase:`next`})})]})}):(0,V.jsx)(ae.Provider,{value:`shared.pagination`,children:(0,V.jsxs)(`div`,{className:n,children:[(0,V.jsx)(x,{variant:r,className:`me-1 ${t.previous?``:`disabled`}`,onClick:()=>l(`previous`),children:(0,V.jsx)(k,{phrase:`previous`})}),(0,V.jsx)(x,{variant:r,className:`btn ${t.next?``:`disabled`}`,onClick:()=>l(`next`),children:(0,V.jsx)(k,{phrase:`next`})})]})})}var ct=({transform:e})=>({...e,x:0});function lt(e,t,n){let r=e.slice();return r.splice(n<0?r.length+n:n,0,r.splice(t,1)[0]),r}function ut(e,t){return e.reduce((e,n,r)=>{let i=t.get(n);return i&&(e[r]=i),e},Array(e.length))}function dt(e){return e!==null&&e>=0}function ft(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(e[n]!==t[n])return!1;return!0}function pt(e){return typeof e==`boolean`?{draggable:e,droppable:e}:e}var mt=e=>{let{rects:t,activeIndex:n,overIndex:r,index:i}=e,a=lt(t,r,n),o=t[i],s=a[i];return!s||!o?null:{x:s.left-o.left,y:s.top-o.top,scaleX:s.width/o.width,scaleY:s.height/o.height}},ht={scaleX:1,scaleY:1},gt=e=>{let{activeIndex:t,activeNodeRect:n,index:r,rects:i,overIndex:a}=e,o=i[t]??n;if(!o)return null;if(r===t){let e=i[a];return e?{x:0,y:t<a?e.top+e.height-(o.top+o.height):e.top-o.top,...ht}:null}let s=_t(i,r,t);return r>t&&r<=a?{x:0,y:-o.height-s,...ht}:r<t&&r>=a?{x:0,y:o.height+s,...ht}:{x:0,y:0,...ht}};function _t(e,t,n){let r=e[t],i=e[t-1],a=e[t+1];return r?n<t?i?r.top-(i.top+i.height):a?a.top-(r.top+r.height):0:a?a.top-(r.top+r.height):i?r.top-(i.top+i.height):0:0}var vt=`Sortable`,yt=B.createContext({activeIndex:-1,containerId:vt,disableTransforms:!1,items:[],overIndex:-1,useDragOverlay:!1,sortedRects:[],strategy:mt,disabled:{draggable:!1,droppable:!1}});function bt(e){let{children:t,id:n,items:r,strategy:i=mt,disabled:a=!1}=e,{active:o,dragOverlay:s,droppableRects:c,over:l,measureDroppableContainers:u,measuringScheduled:d}=Te(),f=ye(vt,n),p=s.rect!==null,m=(0,B.useMemo)(()=>r.map(e=>typeof e==`object`&&`id`in e?e.id:e),[r]),h=o!=null,g=o?m.indexOf(o.id):-1,_=l?m.indexOf(l.id):-1,v=(0,B.useRef)(m),y=!ft(m,v.current),b=_!==-1&&g===-1||y,x=pt(a);Re(()=>{y&&h&&!d&&u(m)},[y,m,h,u,d]),(0,B.useEffect)(()=>{v.current=m},[m]);let S=(0,B.useMemo)(()=>({activeIndex:g,containerId:f,disabled:x,disableTransforms:b,items:m,overIndex:_,useDragOverlay:p,sortedRects:ut(m,c),strategy:i}),[g,f,x.draggable,x.droppable,b,m,_,c,p,i]);return B.createElement(yt.Provider,{value:S},t)}var xt=e=>{let{id:t,items:n,activeIndex:r,overIndex:i}=e;return lt(n,r,i).indexOf(t)},St=e=>{let{containerId:t,isSorting:n,wasDragging:r,index:i,items:a,newIndex:o,previousItems:s,previousContainerId:c,transition:l}=e;return!l||!r||s!==a&&i===o?!1:n?!0:o!==i&&t===c},Ct={duration:200,easing:`ease`},wt=`transform`,Tt=be.Transition.toString({property:wt,duration:0,easing:`linear`}),Et={roleDescription:`sortable`};function Dt(e){let{disabled:t,index:n,node:r,rect:i}=e,[a,o]=(0,B.useState)(null),s=(0,B.useRef)(n);return Re(()=>{if(!t&&n!==s.current&&r.current){let e=i.current;if(e){let t=Oe(r.current,{ignoreTransform:!0}),n={x:e.left-t.left,y:e.top-t.top,scaleX:e.width/t.width,scaleY:e.height/t.height};(n.x||n.y)&&o(n)}}n!==s.current&&(s.current=n)},[t,n,r,i]),(0,B.useEffect)(()=>{a&&requestAnimationFrame(()=>{o(null)})},[a]),a}function Ot(e){let{animateLayoutChanges:t=St,attributes:n,disabled:r,data:i,getNewIndex:a=xt,id:o,strategy:s,resizeObserverConfig:c,transition:l=Ct}=e,{items:u,containerId:d,activeIndex:f,disabled:p,disableTransforms:m,sortedRects:h,overIndex:g,useDragOverlay:_,strategy:v}=(0,B.useContext)(yt),y=kt(r,p),b=u.indexOf(o),x=(0,B.useMemo)(()=>({sortable:{containerId:d,index:b,items:u},...i}),[d,i,b,u]),S=(0,B.useMemo)(()=>u.slice(u.indexOf(o)),[u,o]),{rect:C,node:w,isOver:T,setNodeRef:ee}=ke({id:o,data:x,disabled:y.droppable,resizeObserverConfig:{updateMeasurementsFor:S,...c}}),{active:E,activatorEvent:te,activeNodeRect:ne,attributes:D,setNodeRef:O,listeners:re,isDragging:ie,over:ae,setActivatorNodeRef:k,transform:oe}=Me({id:o,data:x,attributes:{...Et,...n},disabled:y.draggable}),se=Se(ee,O),A=!!E,ce=A&&!m&&dt(f)&&dt(g),le=!_&&ie,ue=ce?(le&&ce?oe:null)??(s??v)({rects:h,activeNodeRect:ne,activeIndex:f,overIndex:g,index:b}):null,j=dt(f)&&dt(g)?a({id:o,items:u,activeIndex:f,overIndex:g}):b,M=E?.id,N=(0,B.useRef)({activeId:M,items:u,newIndex:j,containerId:d}),P=u!==N.current.items,de=t({active:E,containerId:d,isDragging:ie,isSorting:A,id:o,index:b,items:u,newIndex:N.current.newIndex,previousItems:N.current.items,previousContainerId:N.current.containerId,transition:l,wasDragging:N.current.activeId!=null}),fe=Dt({disabled:!de,index:b,node:w,rect:C});return(0,B.useEffect)(()=>{A&&N.current.newIndex!==j&&(N.current.newIndex=j),d!==N.current.containerId&&(N.current.containerId=d),u!==N.current.items&&(N.current.items=u)},[A,j,d,u]),(0,B.useEffect)(()=>{if(M===N.current.activeId)return;if(M&&!N.current.activeId){N.current.activeId=M;return}let e=setTimeout(()=>{N.current.activeId=M},50);return()=>clearTimeout(e)},[M]),{active:E,activeIndex:f,attributes:D,data:x,rect:C,index:b,newIndex:j,items:u,isOver:T,isSorting:A,isDragging:ie,listeners:re,node:w,overIndex:g,over:ae,setNodeRef:se,setActivatorNodeRef:k,setDroppableNodeRef:ee,setDraggableNodeRef:O,transform:fe??ue,transition:pe()};function pe(){if(fe||P&&N.current.newIndex===b)return Tt;if(!(le&&!Le(te)||!l)&&(A||de))return be.Transition.toString({...l,property:wt})}}function kt(e,t){return typeof e==`boolean`?{draggable:e,droppable:!1}:{draggable:e?.draggable??t.draggable,droppable:e?.droppable??t.droppable}}function At(e){if(!e)return!1;let t=e.data.current;return!!(t&&`sortable`in t&&typeof t.sortable==`object`&&`containerId`in t.sortable&&`items`in t.sortable&&`index`in t.sortable)}var jt=[R.Down,R.Right,R.Up,R.Left],Mt=(e,t)=>{let{context:{active:n,collisionRect:r,droppableRects:i,droppableContainers:a,over:o,scrollableAncestors:s}}=t;if(jt.includes(e.code)){if(e.preventDefault(),!n||!r)return;let t=[];a.getEnabled().forEach(n=>{if(!n||n!=null&&n.disabled)return;let a=i.get(n.id);if(a)switch(e.code){case R.Down:r.top<a.top&&t.push(n);break;case R.Up:r.top>a.top&&t.push(n);break;case R.Left:r.left>a.left&&t.push(n);break;case R.Right:r.left<a.left&&t.push(n);break}});let c=Ce({active:n,collisionRect:r,droppableRects:i,droppableContainers:t,pointerCoordinates:null}),l=Ie(c,`id`);if(l===o?.id&&c.length>1&&(l=c[1].id),l!=null){let e=a.get(n.id),t=a.get(l),o=t?i.get(t.id):null,c=t?.node.current;if(c&&o&&e&&t){let n=we(c).some((e,t)=>s[t]!==e),i=Nt(e,t),a=Pt(e,t),l=n||!i?{x:0,y:0}:{x:a?r.width-o.width:0,y:a?r.height-o.height:0},u={x:o.left,y:o.top};return l.x&&l.y?u:ze(u,l)}}}};function Nt(e,t){return!At(e)||!At(t)?!1:e.data.current.sortable.containerId===t.data.current.sortable.containerId}function Pt(e,t){return!At(e)||!At(t)||!Nt(e,t)?!1:e.data.current.sortable.index<t.data.current.sortable.index}Ft.defaultProps={dropAnimation:{duration:250,easing:`ease`},vertical:!0};function Ft(e){let[t,n]=B.useState(null);function r(t){n(t.active.id),e.onSortStart?.(t)}function i(t){n(null),e.onSortEnd(t)}function a(){return e.vertical?[ct]:[]}function o(){return e.vertical?gt:mt}let s=Ee(De(je,{activationConstraint:{distance:10}}),De(xe,{coordinateGetter:Mt}));return e.disabled?(0,V.jsx)(V.Fragment,{children:e.children}):(0,V.jsxs)(Ae,{sensors:s,collisionDetection:Pe,onDragStart:r,onDragEnd:i,modifiers:a(),children:[(0,V.jsx)(bt,{items:e.ids,strategy:o(),children:e.children}),(0,V.jsx)(Ne,{dropAnimation:e.dropAnimation,children:t?e.getDragOverlay(t):null})]})}function It(e,t,n){return t===e?n>t?`down`:n<t?`up`:null:null}function Lt(e){let{setNodeRef:t,transform:n,transition:r,isSorting:i,listeners:a,attributes:o,activeIndex:s,overIndex:c,index:l}=Ot({id:e.id,disabled:e.disabled}),u={transform:be.Transform.toString(n),transition:r,touchAction:`none`,position:`relative`};i&&l===s&&(u.visibility=`hidden`);let d=e.childComponent,f=It(l,s,c);return(0,V.jsx)(d,{...e.childProps,ref:t,style:u,dragListeners:a,dragAttributes:o,dragDirection:f})}function Rt(e){return(0,V.jsx)(`svg`,{...e,children:(0,V.jsx)(`path`,{fill:`currentColor`,d:`M11.67 19.376a.5.5 0 0 0 .66 0c.732-.64 1.435-1.239 2.1-1.805 1.453-1.235 2.722-2.314 3.703-3.335 1.443-1.504 2.367-2.984 2.367-4.812 0-2.588-1.83-4.866-4.517-4.866-1.736 0-2.865 1.008-3.535 1.954a7 7 0 0 0-.448.733 7 7 0 0 0-.448-.733c-.67-.946-1.8-1.954-3.535-1.954C5.33 4.558 3.5 6.836 3.5 9.424c0 1.828.924 3.308 2.367 4.812.98 1.02 2.25 2.1 3.703 3.335.665.566 1.368 1.165 2.1 1.805m.812-10.7.001-.004.007-.022.03-.097a5.83 5.83 0 0 1 .744-1.463c.565-.798 1.428-1.532 2.72-1.532 2.03 0 3.516 1.72 3.516 3.866 0 1.445-.713 2.686-2.089 4.119-.944.984-2.151 2.01-3.579 3.224-.575.49-1.187 1.01-1.832 1.57-.645-.56-1.257-1.08-1.832-1.57-1.428-1.214-2.635-2.24-3.58-3.224C5.214 12.11 4.5 10.869 4.5 9.423c0-2.146 1.487-3.865 3.517-3.865 1.29 0 2.154.734 2.719 1.532a5.8 5.8 0 0 1 .774 1.56l.007.022v.004a.5.5 0 0 0 .965 0`})})}function zt(e){return(0,V.jsx)(`svg`,{...e,children:(0,V.jsx)(`path`,{fill:`currentColor`,fillOpacity:.9,d:`M11.67 19.376a.5.5 0 0 0 .66 0c.732-.64 1.435-1.239 2.1-1.805 1.453-1.235 2.722-2.314 3.703-3.335 1.443-1.504 2.367-2.984 2.367-4.812 0-2.588-1.83-4.866-4.517-4.866-1.736 0-2.865 1.008-3.535 1.954a7 7 0 0 0-.448.733 7 7 0 0 0-.448-.733c-.67-.946-1.8-1.954-3.535-1.954C5.33 4.558 3.5 6.836 3.5 9.424c0 1.828.924 3.308 2.367 4.812.98 1.02 2.25 2.1 3.703 3.335.665.566 1.368 1.165 2.1 1.805`})})}var H={isFavouritedByCurrentUser(e){return e?.favouritedBy?.data.length===1},isFavouritedByUser(e,t){return!!y.findWhere(e?.favouritedBy?.data,{id:t?.id})},updateVideoState(e,t,n){return{id:e.id,favouritedBy:{data:n?[{id:t.id}]:[],pagination:{limit:25,cursors:{next:``,previous:``}}}}},showFavouriteButton(e,t){return P.getCanBeConsumed(e)?.canConsume?!!(t||ce.isTabletOrMobile()||H.isFavouritedByCurrentUser(e)):!1}},Bt={favourited:`_favourited_19h9u_1`,favouriteButton:`_favouriteButton_19h9u_1`,heart:`_heart_19h9u_5`,heartOutline:`_heartOutline_19h9u_16`},Vt=b.encloseNamespace(`shared.favouriteButton`);function Ht(e){let t=N(),n=H.isFavouritedByCurrentUser(e.video),[r,i]=B.useState(n);B.useEffect(()=>{i(n)},[n]);let a=`d-flex align-items-center justify-content-center cursor-pointer ${Bt.favouriteButton} ${r?Bt.favourited:``}`;e.className&&(a+=` ${e.className}`);function o(){let n=!r;function a(){function r(){return P.isClip(e.video)?n?`favouriteClipError`:`unfavouriteClipError`:P.isInteractive(e.video)?n?`favouriteInteractiveError`:`unfavouriteInteractiveError`:n?`favouriteVideoError`:`unfavouriteVideoError`}t.error(Vt(r())),i(!n)}i(n),e.setFavourite(e.video,n,null,a,e.analyticsData,e.analyticsOptions)}return!_.isFunction(e.setFavourite)||!_.isFunction(e.canFavourite)||!e.canFavourite(e.video)?(0,V.jsx)(V.Fragment,{}):(0,V.jsxs)(f,{className:a,onClick:o,tabIndex:e.preventFocus?-1:void 0,children:[(0,V.jsx)(g,{svg:zt,className:`svg-container ${Bt.heart}`}),(0,V.jsx)(g,{svg:Rt,className:`svg-container ${Bt.heartOutline}`})]})}function Ut(e){let t=P.getVideoProgress(e.video),n=t&&e.video.duration&&t/e.video.duration*1e5;return n?(0,V.jsx)(`div`,{className:`bg-primary h-100`,style:{width:`${n}%`}}):(0,V.jsx)(V.Fragment,{})}var Wt={bottomBar:`_bottomBar_575p1_1`};function Gt(e){return P.isVideo(e.video)?(0,V.jsx)(`div`,{className:Wt.bottomBar,children:(0,V.jsx)(Ut,{video:e.video})}):(0,V.jsx)(V.Fragment,{})}var Kt=`d-inline-block svg-container`,qt=`span`;function Jt(e){let{children:t,className:n=Kt,tagName:r=qt,size:i=m.Standard,onClick:a,title:o,tooltipPlacement:s=`right`}=e,c=r,l={className:`${n} svg-container ${i}`,onClick:_.isFunction(a)?a:null};return o?(0,V.jsx)(h,{title:o,placement:s,children:(0,V.jsx)(c,{...l,children:t})}):(0,V.jsx)(c,{...l,children:t})}var U={std:`_std_hibpg_1`,sm:`_sm_hibpg_5`,stdIcon:`_stdIcon_hibpg_10`,smIcon:`_smIcon_hibpg_21`};function Yt(e){return!P.isInteractive(e.video)&&!P.isClip(e.video)||!e.video._liteOwner&&!e.video._isClickViewCurated?.value?(0,V.jsx)(V.Fragment,{}):e.video._isClickViewCurated?.value?(0,V.jsx)(`div`,{className:`${e.size===`sm`?U.sm:U.std} me-1 rounded-circle position-relative bg-white`,children:(0,V.jsx)(Jt,{className:e.size===`sm`?U.smIcon:U.stdIcon,children:(0,V.jsx)(oe,{})})}):(0,V.jsx)(`div`,{className:`${e.size===`sm`?U.sm:U.std} me-1`,children:(0,V.jsx)(ie,{imageCdnUrl:e.imageCdnUrl,initials:ue.getInitials(e.video._liteOwner.name,e.video._liteOwner.surname),imageUrl:e.video._liteOwner.avatar?.url})})}var Xt={pluginHover:`_pluginHover_wpoz0_1`},Zt=`shared.pluginHover`;function Qt(e){return!e.isPlugin||e.isPluginPopup?(0,V.jsx)(V.Fragment,{}):(0,V.jsx)(p,{appLink:e.appLink,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,onClick:e.onClick,className:`
|
|
1
|
+
import{C as e,D as t,O as n,St as r,_t as i,b as a,d as o,ft as s,mn as c,o as l,s as u,t as d}from"./CnnBLBPY.chunk.js";import{_ as f,g as p,n as m,r as h,t as g,v as _}from"./DW0w8_XN.chunk.js";import{l as v}from"./D8clSITt.chunk.js";import{t as y}from"./CBDo4oAU.chunk.js";import{t as b}from"./GN6vNflP.chunk.js";import{n as x,t as S}from"./QxhzRpcg.chunk.js";import{a as C,c as w,n as T,r as ee,t as E}from"./1iKkdpYv.chunk.js";import{t as te}from"./xL848v0O.chunk.js";import{t as ne}from"./BHEKlg6n.chunk.js";import{n as D,r as O,t as re}from"./BK-FLPB-.chunk.js";import{E as ie,F as ae,I as k,O as oe,T as se,Z as A,r as ce,tt as le,v as ue}from"./app-BGxmHvGl.js";import{t as j}from"./DWCNy_Jd2.chunk.js";import{t as M}from"./EIJf9JbR2.chunk.js";import{t as N}from"./DuPL-nK72.chunk.js";import{t as P}from"./G-hiM6b42.chunk.js";import{i as de,n as fe,t as pe}from"./CxfZJDOr2.chunk.js";import{n as me,t as F}from"./BITl6co82.chunk.js";import{t as he}from"./DbuCsVvX.chunk.js";import{n as I,o as ge,t as L}from"./CXtVyCmH.chunk.js";import{t as _e}from"./B7KaaLVd.chunk.js";import{t as ve}from"./DrVEkVd5.chunk.js";import{S as ye,_ as be,a as xe,b as Se,c as Ce,d as we,f as Te,g as Ee,h as De,i as R,l as Oe,m as ke,n as Ae,o as je,p as Me,r as Ne,s as Pe,t as Fe,u as Ie,v as Le,x as Re,y as ze}from"./BXmlDh1p.chunk.js";import{n as Be,t as Ve}from"./Jf-R5ehU.chunk.js";import{i as He,n as Ue,r as We}from"./ApcDOLl8.chunk.js";import{n as Ge}from"./amjwjus3.chunk.js";import{t as Ke}from"./BLtXMKpA.chunk.js";import{a as qe,c as Je,i as Ye,n as Xe,o as Ze,r as Qe,s as $e,t as et,u as tt}from"./Ct_4zyE3.chunk.js";var z=function(e){return e[e.MultipleChoice=1]=`MultipleChoice`,e[e.ShortAnswer=2]=`ShortAnswer`,e[e.TrueOrFalse=3]=`TrueOrFalse`,e[e.Annotation=4]=`Annotation`,e[e.Image=5]=`Image`,e[e.MissingWord=6]=`MissingWord`,e[e.Illustration=7]=`Illustration`,e}({}),nt={},B=c(t()),rt=B.createContext(null);function it(e){return`series`in e?Ge(e.series):null}function at(){let e=v(A.config());return{hasCommonVideoPropsCompleted:e.hasCompleted,commonVideoProps:{subTextType:`series`,getSubTextAppLink:it,isPlugin:!1,canFavourite:null,setFavourite:null,yearGroups:null,imageCdnUrl:e.data?.imageCdnUrl,getClassroomGuideAppLink:null,getInteractiveGuidanceAppLink:null,getResourceGuidanceAppLink:null,showNewVideoIndicator:!1,getCompanyLogoFallbackUrl:()=>null,hasStudentExperience:!1,hasGuestExperience:!1,features:{showClassroomGuide:()=>!1}}}}var V=e();function ot(e,t,n){if(!t)return null;let r=e.params??{};return n?r?.previous?{application:e.application,action:e.action,args:e.args,params:{...r,cursor:r?.previous,previous:null}}:{application:e.application,action:e.action,args:e.args,params:{...r,cursor:null,previous:null}}:{application:e.application,action:e.action,args:e.args,params:{...r,cursor:t,previous:r.cursor}}}st.defaultProps={className:`py-2`,buttonVariant:`secondary`};function st({appLink:e,cursors:t,className:n,buttonVariant:r,prevHack:i,scrollTop:s,onClick:c}){function l(n){e&&s===!1&&ve.preventScrollTop(),d.logUserAction({page:n},{location:o.Pagination,entity:u.Pagination,actionType:a.Navigate}),c&&c(t[n])}return e?(0,V.jsx)(ae.Provider,{value:`shared.pagination`,children:(0,V.jsxs)(`div`,{className:n,children:[(0,V.jsx)(p,{appLink:ot(e,t.previous,i),className:`btn btn-${r} me-1 ${t.previous?``:`disabled`}`,onClick:()=>l(`previous`),style:{display:`inline-block`},children:(0,V.jsx)(k,{phrase:`previous`})}),(0,V.jsx)(p,{appLink:ot(e,t.next),className:`btn btn-${r} ${t.next?``:`disabled`}`,onClick:()=>l(`next`),style:{display:`inline-block`},children:(0,V.jsx)(k,{phrase:`next`})})]})}):(0,V.jsx)(ae.Provider,{value:`shared.pagination`,children:(0,V.jsxs)(`div`,{className:n,children:[(0,V.jsx)(x,{variant:r,className:`me-1 ${t.previous?``:`disabled`}`,onClick:()=>l(`previous`),children:(0,V.jsx)(k,{phrase:`previous`})}),(0,V.jsx)(x,{variant:r,className:`btn ${t.next?``:`disabled`}`,onClick:()=>l(`next`),children:(0,V.jsx)(k,{phrase:`next`})})]})})}var ct=({transform:e})=>({...e,x:0});function lt(e,t,n){let r=e.slice();return r.splice(n<0?r.length+n:n,0,r.splice(t,1)[0]),r}function ut(e,t){return e.reduce((e,n,r)=>{let i=t.get(n);return i&&(e[r]=i),e},Array(e.length))}function dt(e){return e!==null&&e>=0}function ft(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(e[n]!==t[n])return!1;return!0}function pt(e){return typeof e==`boolean`?{draggable:e,droppable:e}:e}var mt=e=>{let{rects:t,activeIndex:n,overIndex:r,index:i}=e,a=lt(t,r,n),o=t[i],s=a[i];return!s||!o?null:{x:s.left-o.left,y:s.top-o.top,scaleX:s.width/o.width,scaleY:s.height/o.height}},ht={scaleX:1,scaleY:1},gt=e=>{let{activeIndex:t,activeNodeRect:n,index:r,rects:i,overIndex:a}=e,o=i[t]??n;if(!o)return null;if(r===t){let e=i[a];return e?{x:0,y:t<a?e.top+e.height-(o.top+o.height):e.top-o.top,...ht}:null}let s=_t(i,r,t);return r>t&&r<=a?{x:0,y:-o.height-s,...ht}:r<t&&r>=a?{x:0,y:o.height+s,...ht}:{x:0,y:0,...ht}};function _t(e,t,n){let r=e[t],i=e[t-1],a=e[t+1];return r?n<t?i?r.top-(i.top+i.height):a?a.top-(r.top+r.height):0:a?a.top-(r.top+r.height):i?r.top-(i.top+i.height):0:0}var vt=`Sortable`,yt=B.createContext({activeIndex:-1,containerId:vt,disableTransforms:!1,items:[],overIndex:-1,useDragOverlay:!1,sortedRects:[],strategy:mt,disabled:{draggable:!1,droppable:!1}});function bt(e){let{children:t,id:n,items:r,strategy:i=mt,disabled:a=!1}=e,{active:o,dragOverlay:s,droppableRects:c,over:l,measureDroppableContainers:u,measuringScheduled:d}=Te(),f=ye(vt,n),p=s.rect!==null,m=(0,B.useMemo)(()=>r.map(e=>typeof e==`object`&&`id`in e?e.id:e),[r]),h=o!=null,g=o?m.indexOf(o.id):-1,_=l?m.indexOf(l.id):-1,v=(0,B.useRef)(m),y=!ft(m,v.current),b=_!==-1&&g===-1||y,x=pt(a);Re(()=>{y&&h&&!d&&u(m)},[y,m,h,u,d]),(0,B.useEffect)(()=>{v.current=m},[m]);let S=(0,B.useMemo)(()=>({activeIndex:g,containerId:f,disabled:x,disableTransforms:b,items:m,overIndex:_,useDragOverlay:p,sortedRects:ut(m,c),strategy:i}),[g,f,x.draggable,x.droppable,b,m,_,c,p,i]);return B.createElement(yt.Provider,{value:S},t)}var xt=e=>{let{id:t,items:n,activeIndex:r,overIndex:i}=e;return lt(n,r,i).indexOf(t)},St=e=>{let{containerId:t,isSorting:n,wasDragging:r,index:i,items:a,newIndex:o,previousItems:s,previousContainerId:c,transition:l}=e;return!l||!r||s!==a&&i===o?!1:n?!0:o!==i&&t===c},Ct={duration:200,easing:`ease`},wt=`transform`,Tt=be.Transition.toString({property:wt,duration:0,easing:`linear`}),Et={roleDescription:`sortable`};function Dt(e){let{disabled:t,index:n,node:r,rect:i}=e,[a,o]=(0,B.useState)(null),s=(0,B.useRef)(n);return Re(()=>{if(!t&&n!==s.current&&r.current){let e=i.current;if(e){let t=Oe(r.current,{ignoreTransform:!0}),n={x:e.left-t.left,y:e.top-t.top,scaleX:e.width/t.width,scaleY:e.height/t.height};(n.x||n.y)&&o(n)}}n!==s.current&&(s.current=n)},[t,n,r,i]),(0,B.useEffect)(()=>{a&&requestAnimationFrame(()=>{o(null)})},[a]),a}function Ot(e){let{animateLayoutChanges:t=St,attributes:n,disabled:r,data:i,getNewIndex:a=xt,id:o,strategy:s,resizeObserverConfig:c,transition:l=Ct}=e,{items:u,containerId:d,activeIndex:f,disabled:p,disableTransforms:m,sortedRects:h,overIndex:g,useDragOverlay:_,strategy:v}=(0,B.useContext)(yt),y=kt(r,p),b=u.indexOf(o),x=(0,B.useMemo)(()=>({sortable:{containerId:d,index:b,items:u},...i}),[d,i,b,u]),S=(0,B.useMemo)(()=>u.slice(u.indexOf(o)),[u,o]),{rect:C,node:w,isOver:T,setNodeRef:ee}=ke({id:o,data:x,disabled:y.droppable,resizeObserverConfig:{updateMeasurementsFor:S,...c}}),{active:E,activatorEvent:te,activeNodeRect:ne,attributes:D,setNodeRef:O,listeners:re,isDragging:ie,over:ae,setActivatorNodeRef:k,transform:oe}=Me({id:o,data:x,attributes:{...Et,...n},disabled:y.draggable}),se=Se(ee,O),A=!!E,ce=A&&!m&&dt(f)&&dt(g),le=!_&&ie,ue=ce?(le&&ce?oe:null)??(s??v)({rects:h,activeNodeRect:ne,activeIndex:f,overIndex:g,index:b}):null,j=dt(f)&&dt(g)?a({id:o,items:u,activeIndex:f,overIndex:g}):b,M=E?.id,N=(0,B.useRef)({activeId:M,items:u,newIndex:j,containerId:d}),P=u!==N.current.items,de=t({active:E,containerId:d,isDragging:ie,isSorting:A,id:o,index:b,items:u,newIndex:N.current.newIndex,previousItems:N.current.items,previousContainerId:N.current.containerId,transition:l,wasDragging:N.current.activeId!=null}),fe=Dt({disabled:!de,index:b,node:w,rect:C});return(0,B.useEffect)(()=>{A&&N.current.newIndex!==j&&(N.current.newIndex=j),d!==N.current.containerId&&(N.current.containerId=d),u!==N.current.items&&(N.current.items=u)},[A,j,d,u]),(0,B.useEffect)(()=>{if(M===N.current.activeId)return;if(M&&!N.current.activeId){N.current.activeId=M;return}let e=setTimeout(()=>{N.current.activeId=M},50);return()=>clearTimeout(e)},[M]),{active:E,activeIndex:f,attributes:D,data:x,rect:C,index:b,newIndex:j,items:u,isOver:T,isSorting:A,isDragging:ie,listeners:re,node:w,overIndex:g,over:ae,setNodeRef:se,setActivatorNodeRef:k,setDroppableNodeRef:ee,setDraggableNodeRef:O,transform:fe??ue,transition:pe()};function pe(){if(fe||P&&N.current.newIndex===b)return Tt;if(!(le&&!Le(te)||!l)&&(A||de))return be.Transition.toString({...l,property:wt})}}function kt(e,t){return typeof e==`boolean`?{draggable:e,droppable:!1}:{draggable:e?.draggable??t.draggable,droppable:e?.droppable??t.droppable}}function At(e){if(!e)return!1;let t=e.data.current;return!!(t&&`sortable`in t&&typeof t.sortable==`object`&&`containerId`in t.sortable&&`items`in t.sortable&&`index`in t.sortable)}var jt=[R.Down,R.Right,R.Up,R.Left],Mt=(e,t)=>{let{context:{active:n,collisionRect:r,droppableRects:i,droppableContainers:a,over:o,scrollableAncestors:s}}=t;if(jt.includes(e.code)){if(e.preventDefault(),!n||!r)return;let t=[];a.getEnabled().forEach(n=>{if(!n||n!=null&&n.disabled)return;let a=i.get(n.id);if(a)switch(e.code){case R.Down:r.top<a.top&&t.push(n);break;case R.Up:r.top>a.top&&t.push(n);break;case R.Left:r.left>a.left&&t.push(n);break;case R.Right:r.left<a.left&&t.push(n);break}});let c=Ce({active:n,collisionRect:r,droppableRects:i,droppableContainers:t,pointerCoordinates:null}),l=Ie(c,`id`);if(l===o?.id&&c.length>1&&(l=c[1].id),l!=null){let e=a.get(n.id),t=a.get(l),o=t?i.get(t.id):null,c=t?.node.current;if(c&&o&&e&&t){let n=we(c).some((e,t)=>s[t]!==e),i=Nt(e,t),a=Pt(e,t),l=n||!i?{x:0,y:0}:{x:a?r.width-o.width:0,y:a?r.height-o.height:0},u={x:o.left,y:o.top};return l.x&&l.y?u:ze(u,l)}}}};function Nt(e,t){return!At(e)||!At(t)?!1:e.data.current.sortable.containerId===t.data.current.sortable.containerId}function Pt(e,t){return!At(e)||!At(t)||!Nt(e,t)?!1:e.data.current.sortable.index<t.data.current.sortable.index}Ft.defaultProps={dropAnimation:{duration:250,easing:`ease`},vertical:!0};function Ft(e){let[t,n]=B.useState(null);function r(t){n(t.active.id),e.onSortStart?.(t)}function i(t){n(null),e.onSortEnd(t)}function a(){return e.vertical?[ct]:[]}function o(){return e.vertical?gt:mt}let s=Ee(De(je,{activationConstraint:{distance:10}}),De(xe,{coordinateGetter:Mt}));return e.disabled?(0,V.jsx)(V.Fragment,{children:e.children}):(0,V.jsxs)(Ae,{sensors:s,collisionDetection:Pe,onDragStart:r,onDragEnd:i,modifiers:a(),children:[(0,V.jsx)(bt,{items:e.ids,strategy:o(),children:e.children}),(0,V.jsx)(Ne,{dropAnimation:e.dropAnimation,children:t?e.getDragOverlay(t):null})]})}function It(e,t,n){return t===e?n>t?`down`:n<t?`up`:null:null}function Lt(e){let{setNodeRef:t,transform:n,transition:r,isSorting:i,listeners:a,attributes:o,activeIndex:s,overIndex:c,index:l}=Ot({id:e.id,disabled:e.disabled}),u={transform:be.Transform.toString(n),transition:r,touchAction:`none`,position:`relative`};i&&l===s&&(u.visibility=`hidden`);let d=e.childComponent,f=It(l,s,c);return(0,V.jsx)(d,{...e.childProps,ref:t,style:u,dragListeners:a,dragAttributes:o,dragDirection:f})}function Rt(e){return(0,V.jsx)(`svg`,{...e,children:(0,V.jsx)(`path`,{fill:`currentColor`,d:`M11.67 19.376a.5.5 0 0 0 .66 0c.732-.64 1.435-1.239 2.1-1.805 1.453-1.235 2.722-2.314 3.703-3.335 1.443-1.504 2.367-2.984 2.367-4.812 0-2.588-1.83-4.866-4.517-4.866-1.736 0-2.865 1.008-3.535 1.954a7 7 0 0 0-.448.733 7 7 0 0 0-.448-.733c-.67-.946-1.8-1.954-3.535-1.954C5.33 4.558 3.5 6.836 3.5 9.424c0 1.828.924 3.308 2.367 4.812.98 1.02 2.25 2.1 3.703 3.335.665.566 1.368 1.165 2.1 1.805m.812-10.7.001-.004.007-.022.03-.097a5.83 5.83 0 0 1 .744-1.463c.565-.798 1.428-1.532 2.72-1.532 2.03 0 3.516 1.72 3.516 3.866 0 1.445-.713 2.686-2.089 4.119-.944.984-2.151 2.01-3.579 3.224-.575.49-1.187 1.01-1.832 1.57-.645-.56-1.257-1.08-1.832-1.57-1.428-1.214-2.635-2.24-3.58-3.224C5.214 12.11 4.5 10.869 4.5 9.423c0-2.146 1.487-3.865 3.517-3.865 1.29 0 2.154.734 2.719 1.532a5.8 5.8 0 0 1 .774 1.56l.007.022v.004a.5.5 0 0 0 .965 0`})})}function zt(e){return(0,V.jsx)(`svg`,{...e,children:(0,V.jsx)(`path`,{fill:`currentColor`,fillOpacity:.9,d:`M11.67 19.376a.5.5 0 0 0 .66 0c.732-.64 1.435-1.239 2.1-1.805 1.453-1.235 2.722-2.314 3.703-3.335 1.443-1.504 2.367-2.984 2.367-4.812 0-2.588-1.83-4.866-4.517-4.866-1.736 0-2.865 1.008-3.535 1.954a7 7 0 0 0-.448.733 7 7 0 0 0-.448-.733c-.67-.946-1.8-1.954-3.535-1.954C5.33 4.558 3.5 6.836 3.5 9.424c0 1.828.924 3.308 2.367 4.812.98 1.02 2.25 2.1 3.703 3.335.665.566 1.368 1.165 2.1 1.805`})})}var H={isFavouritedByCurrentUser(e){return e?.favouritedBy?.data.length===1},isFavouritedByUser(e,t){return!!y.findWhere(e?.favouritedBy?.data,{id:t?.id})},updateVideoState(e,t,n){return{id:e.id,favouritedBy:{data:n?[{id:t.id}]:[],pagination:{limit:25,cursors:{next:``,previous:``}}}}},showFavouriteButton(e,t){return P.getCanBeConsumed(e)?.canConsume?!!(t||ce.isTabletOrMobile()||H.isFavouritedByCurrentUser(e)):!1}},Bt={favourited:`_favourited_19h9u_1`,favouriteButton:`_favouriteButton_19h9u_1`,heart:`_heart_19h9u_5`,heartOutline:`_heartOutline_19h9u_16`},Vt=b.encloseNamespace(`shared.favouriteButton`);function Ht(e){let t=N(),n=H.isFavouritedByCurrentUser(e.video),[r,i]=B.useState(n);B.useEffect(()=>{i(n)},[n]);let a=`d-flex align-items-center justify-content-center cursor-pointer ${Bt.favouriteButton} ${r?Bt.favourited:``}`;e.className&&(a+=` ${e.className}`);function o(){let n=!r;function a(){function r(){return P.isClip(e.video)?n?`favouriteClipError`:`unfavouriteClipError`:P.isInteractive(e.video)?n?`favouriteInteractiveError`:`unfavouriteInteractiveError`:n?`favouriteVideoError`:`unfavouriteVideoError`}t.error(Vt(r())),i(!n)}i(n),e.setFavourite(e.video,n,null,a,e.analyticsData,e.analyticsOptions)}return!_.isFunction(e.setFavourite)||!_.isFunction(e.canFavourite)||!e.canFavourite(e.video)?(0,V.jsx)(V.Fragment,{}):(0,V.jsxs)(f,{className:a,onClick:o,tabIndex:e.preventFocus?-1:void 0,children:[(0,V.jsx)(g,{svg:zt,className:`svg-container ${Bt.heart}`}),(0,V.jsx)(g,{svg:Rt,className:`svg-container ${Bt.heartOutline}`})]})}function Ut(e){let t=P.getVideoProgress(e.video),n=t&&e.video.duration&&t/e.video.duration*1e5;return n?(0,V.jsx)(`div`,{className:`bg-primary h-100`,style:{width:`${n}%`}}):(0,V.jsx)(V.Fragment,{})}var Wt={bottomBar:`_bottomBar_575p1_1`};function Gt(e){return P.isVideo(e.video)?(0,V.jsx)(`div`,{className:Wt.bottomBar,children:(0,V.jsx)(Ut,{video:e.video})}):(0,V.jsx)(V.Fragment,{})}var Kt=`d-inline-block svg-container`,qt=`span`;function Jt(e){let{children:t,className:n=Kt,tagName:r=qt,size:i=m.Standard,onClick:a,title:o,tooltipPlacement:s=`right`}=e,c=r,l={className:`${n} svg-container ${i}`,onClick:_.isFunction(a)?a:null};return o?(0,V.jsx)(h,{title:o,placement:s,children:(0,V.jsx)(c,{...l,children:t})}):(0,V.jsx)(c,{...l,children:t})}var U={std:`_std_hibpg_1`,sm:`_sm_hibpg_5`,stdIcon:`_stdIcon_hibpg_10`,smIcon:`_smIcon_hibpg_21`};function Yt(e){return!P.isInteractive(e.video)&&!P.isClip(e.video)||!e.video._liteOwner&&!e.video._isClickViewCurated?.value?(0,V.jsx)(V.Fragment,{}):e.video._isClickViewCurated?.value?(0,V.jsx)(`div`,{className:`${e.size===`sm`?U.sm:U.std} me-1 rounded-circle position-relative bg-white`,children:(0,V.jsx)(Jt,{className:e.size===`sm`?U.smIcon:U.stdIcon,children:(0,V.jsx)(oe,{})})}):(0,V.jsx)(`div`,{className:`${e.size===`sm`?U.sm:U.std} me-1`,children:(0,V.jsx)(ie,{imageCdnUrl:e.imageCdnUrl,initials:ue.getInitials(e.video._liteOwner.name,e.video._liteOwner.surname),imageUrl:e.video._liteOwner.avatar?.url})})}var Xt={pluginHover:`_pluginHover_wpoz0_1`},Zt=`shared.pluginHover`;function Qt(e){return!e.isPlugin||e.isPluginPopup?(0,V.jsx)(V.Fragment,{}):(0,V.jsx)(p,{appLink:e.appLink,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,onClick:e.onClick,className:`
|
|
2
2
|
position-absolute top-0 start-0 end-0 bottom-0 opacity-0 cursor-pointer
|
|
3
3
|
${Xt.pluginHover}
|
|
4
4
|
${e.className?e.className:``}
|
|
@@ -47,4 +47,4 @@ import{C as e,D as t,O as n,St as r,_t as i,b as a,d as o,ft as s,mn as c,o as l
|
|
|
47
47
|
<path fill-rule='evenodd' clip-rule='evenodd' d='M18.2411 13.7881C18.2887 13.5157 18.0395 13.2465 17.6953 13.3346C17.3344 13.4271 16.9508 13.4506 16.5627 13.3938C15.8185 14.404 15.232 15.0693 14.7556 15.4771C14.9397 15.8591 14.9223 16.3164 14.7953 16.7237C14.663 17.148 14.3965 17.5746 14.004 17.9197C13.1974 18.6288 11.9124 18.9538 10.252 18.3555L9.6361 18.1336L10.8248 16.4403C10.8536 16.3994 10.895 16.2797 10.948 15.9967C10.9568 15.9502 10.9658 15.8998 10.9752 15.8466L10.9753 15.846L10.9754 15.8459L10.9754 15.8459C11.0141 15.6287 11.0613 15.3639 11.1335 15.1223C11.2242 14.8188 11.3771 14.4637 11.6835 14.2095C11.9817 13.9622 12.3608 13.8619 12.8023 13.9024C13.0571 13.2864 13.5182 12.476 14.2494 11.3987L14.2357 11.357C14.2007 11.2488 14.1511 11.0868 14.119 10.8858C14.0536 10.4764 14.0643 9.9266 14.3604 9.29657C14.4494 9.10715 14.5146 8.91445 14.5573 8.72168C14.8536 7.38674 14.077 6.0484 12.7163 5.76998C12.6531 5.75701 12.5892 5.74486 12.5246 5.73347C8.70188 5.05944 5.05659 7.61193 4.38254 11.4346C3.70848 15.2574 6.26101 18.9027 10.0837 19.5768C13.9064 20.2508 17.5518 17.6983 18.2258 13.8756L18.2411 13.7881ZM15.8626 12.6572C15.8947 12.5723 15.9481 12.5005 16.0149 12.4463C16.091 12.34 16.1692 12.2296 16.2493 12.1152C17.2716 10.6552 18.1315 9.27136 18.6754 8.22122C18.8855 7.81559 19.042 7.47194 19.1431 7.19994C18.9065 7.38016 18.6161 7.63896 18.2839 7.97168C17.4465 8.81052 16.4034 10.0589 15.3866 11.5111C14.5179 12.7517 14.0214 13.6064 13.7659 14.1913L14.285 14.5548C14.6757 14.1827 15.1887 13.5831 15.8626 12.6572ZM17.4471 12.3659C17.3881 12.381 17.3282 12.3933 17.2674 12.4027C18.2189 11.0249 19.029 9.71286 19.5633 8.68114C19.8471 8.13334 20.0641 7.64372 20.1787 7.25589C20.2351 7.06519 20.2765 6.8674 20.2745 6.68479C20.2725 6.51587 20.2295 6.23216 19.9736 6.05296C19.7244 5.87848 19.4469 5.92652 19.2885 5.97523C19.1139 6.02893 18.9362 6.12717 18.7674 6.23956C18.4249 6.46764 18.0169 6.82379 17.5762 7.26518C16.8442 7.99842 15.9806 9.00929 15.1147 10.1778C15.1398 10.0455 15.1836 9.90125 15.2542 9.74611L15.2654 9.72185C16.2163 7.69819 15.1756 5.25268 12.9173 4.7904C12.8445 4.77544 12.7715 4.76158 12.6983 4.74868C8.33172 3.97872 4.16769 6.89438 3.39773 11.261C2.62777 15.6276 5.54347 19.7916 9.91006 20.5616C14.2767 21.3315 18.4407 18.4159 19.2106 14.0492L19.2262 13.9606C19.4123 12.8961 18.4178 12.1172 17.4471 12.3659ZM11.6433 17.0149C11.8176 16.7665 11.8855 16.4229 11.9309 16.1811C11.9432 16.1158 11.9545 16.0525 11.9655 15.9909C12.0033 15.7804 12.0374 15.5901 12.0916 15.4086C12.161 15.1765 12.2405 15.0468 12.3219 14.9792C12.3717 14.9379 12.4608 14.8871 12.649 14.894L13.8774 15.9774C13.9004 16.0738 13.9028 16.2267 13.8406 16.426C13.7637 16.6728 13.6001 16.9432 13.3438 17.1686C12.934 17.5288 12.2479 17.8037 11.2342 17.5976L11.6433 17.0149ZM7 14.5C7 14.7761 7.22386 15 7.5 15C7.77614 15 8 14.7761 8 14.5C8 14.2239 7.77614 14 7.5 14C7.22386 14 7 14.2239 7 14.5ZM9 14.5C9 15.3284 8.32843 16 7.5 16C6.67157 16 6 15.3284 6 14.5C6 13.6716 6.67157 13 7.5 13C8.32843 13 9 13.6716 9 14.5ZM11.6 8.5C11.6 8.77614 11.3761 9 11.1 9C10.8238 9 10.6 8.77614 10.6 8.5C10.6 8.22386 10.8238 8 11.1 8C11.3761 8 11.6 8.22386 11.6 8.5ZM9.59998 8.5C9.59998 9.32843 10.2715 10 11.1 10C11.9284 10 12.6 9.32843 12.6 8.5C12.6 7.67157 11.9284 7 11.1 7C10.2715 7 9.59998 7.67157 9.59998 8.5ZM7.70007 11C7.42393 11 7.20007 10.7761 7.20007 10.5C7.20007 10.2239 7.42393 10 7.70007 10C7.97622 10 8.20007 10.2239 8.20007 10.5C8.20007 10.7761 7.97622 11 7.70007 11ZM7.70007 12C8.5285 12 9.20007 11.3284 9.20007 10.5C9.20007 9.67157 8.5285 9 7.70007 9C6.87165 9 6.20007 9.67157 6.20007 10.5C6.20007 11.3284 6.87165 12 7.70007 12Z' />
|
|
48
48
|
</svg>
|
|
49
49
|
`}var Lr=b.encloseNamespace(`shared.interactionTypes`),Q=(e,t)=>b.isInitialised()?Lr(e):t;function $(e){return(0,V.jsx)(`div`,{dangerouslySetInnerHTML:{__html:e}})}var Rr={[z.Annotation](){return{name:Q(`annotationName`,`Annotation`),bgClassName:`bg-pink`,Svg:()=>$(Fr()),svgEl:Fr(),typeName:`annotation`}},[z.Image](){return{name:Q(`imageName`,`Image`),bgClassName:`bg-orange`,Svg:()=>$(Pr()),svgEl:Pr(),typeName:`image`}},[z.MissingWord](){return{name:Q(`missingWordName`,`Fill in the blank`),prompt:Q(`missingWordPrompt`,`Fill in the blank by typing the missing word(s)`),bgClassName:`bg-teal`,Svg:()=>$(Mr()),svgEl:Mr(),typeName:`missing-word`}},[z.MultipleChoice](){return{name:Q(`multipleChoiceName`,`Multiple choice`),prompt:Q(`multipleChoicePrompt`,`Choose the correct answer(s)`),bgClassName:`bg-blue`,Svg:()=>$(Nr()),svgEl:Nr(),typeName:`multiple-choice`}},[z.ShortAnswer](){return{name:Q(`shortAnswerName`,`Short answer`),prompt:Q(`shortAnswerPrompt`,`Type in your answer to the question`),bgClassName:`bg-green`,Svg:()=>$(jr()),svgEl:jr(),typeName:`short-answer`}},[z.TrueOrFalse](){return{name:Q(`trueOrFalseName`,`True or false`),prompt:Q(`trueOrFalsePrompt`,`Choose the correct answer`),bgClassName:`bg-purple`,Svg:()=>$(Ar()),svgEl:Ar(),typeName:`true-or-false`}},[z.Illustration](){return{name:Q(`illustrationName`,`Illustrate`),prompt:Q(`illustrationPrompt`,`Draw the answer`),bgClassName:`bg-indigo`,Svg:()=>$(Ir()),svgEl:Ir(),typeName:`illustration`}}},zr={getTypeInfo:e=>{let t=Rr[e];if(!t){i.throw(new s(`No type info defined for typeId: ${e}`));return}return t()}};function Br(e,t,n){return e.replace(RegExp(`<${t}.*?>`,`gi`),``).replace(RegExp(`</${t}>`,`gi`),n?`<br>`:``)}function Vr(e,t,n=!1){return!e||!t.length?e:t.reduce((e,t)=>Br(e,t,n),e)}var Hr={stripTags(e){let{text:t,fallbackText:n}=e;if(!t)return;let r=t;return r=Vr(r,[`ul`,`ol`,`b`,`i`,`u`,`old`,`em`,`strong`,`sup`,`sub`,`a`,`span`,`svg`,`path`]),r=Vr(r,[`li`,`p`,`div`],!0),r.split(`<br>`)?.filter(e=>!!e)?.join(``)?.trim()||n}};function Ur(e){return Hr.stripTags({text:e,fallbackText:`Annotation`})}Wr.defaultProps={showIcon:!0,showQuestion:!0};function Wr(e){let{name:t,bgClassName:n,Svg:r}=zr.getTypeInfo(e.interaction.typeId),i=e.questionNumber?`${e.questionNumber}. `:``,a=`interaction-type-icon flex-shrink-0 ${n}`;return e.smallIcon&&(a+=` sm`),(e.showQuestion||e.showTypeName)&&(a+=e.smallIcon?` me-1`:` me-2`),e.iconClassName&&(a+=` ${e.iconClassName}`),(0,V.jsxs)(`span`,{className:e.containerClassName,children:[!!e.showIcon&&(0,V.jsx)(`span`,{className:a,children:(0,V.jsx)(r,{})}),(0,V.jsxs)(p,{appLink:e.appLink,onClick:e.onClick,children:[!!e.showTypeName&&(0,V.jsx)(`span`,{className:e.typeNameClassName,children:(0,V.jsxs)(`strong`,{children:[i,t]})}),!!e.showQuestion&&(0,V.jsx)(`span`,{className:e.questionClassName,children:e.interaction.typeId===z.Annotation?(0,V.jsx)(`span`,{dangerouslySetInnerHTML:{__html:Ur(e.interaction.data.annotation)}}):e.interaction.name})]})]})}var Gr=`shared.interactiveItem`;function Kr(e){let t=E();return typeof e==`number`?e:t===_e.XS?3:t===_e.SM?1:t===_e.MD||t===_e.LG?2:3}function qr(e){let t=Kr(e.totalToDisplay);if(!e.timepoints?.length)return(0,V.jsx)(V.Fragment,{});let n=[],r=0;e.timepoints.forEach(i=>{i?.interactions.forEach(a=>{if(nt[a.typeId]||r>=t)return;r++;let o=a.typeId===z.Annotation&&typeof a.data==`string`?JSON.parse(a.data):a.data,s={...a,data:{...o,appLink:e.appLink&&{...e.appLink,params:{t:Math.floor(i.visibleAt/1e3)}}}};n.push(s)})});let i=e.timepoints.reduce((e,t)=>{let n=t?.interactions?.length??0;return e+=n,e},0);return n.length?(0,V.jsxs)(V.Fragment,{children:[n.map((t,n)=>(0,V.jsx)(`div`,{className:`d-flex align-items-center mb-1`,children:(0,V.jsx)(`div`,{className:`clamp-1`,children:(0,V.jsx)(Wr,{interaction:t,appLink:t.data?.appLink,onClick:t.data?.appLink?e.onClickAppLink:null,smallIcon:!0})})},n)),(0,V.jsx)(`div`,{className:`mb-1 text-link`,children:(0,V.jsx)(p,{className:`cursor-pointer hover-text-underline`,appLink:e.previewAppLink,onClick:e.onClickAppLink,children:(0,V.jsx)(k,{namespace:Gr,phrase:`previewQuestions`,options:{questionsShown:n.length,smartCount:i}})})})]}):(0,V.jsx)(V.Fragment,{})}var Jr=B.forwardRef((e,t)=>{let n=se(),[r,i]=F(),a=C.getSize(n,e.size),s=a===`sm`,{isSortable:c}=B.useContext(ni),l=Er(e.video.subjectPresentationAudiences?.data,e.presentationAudiences),d=c&&!n.xs&&(i||e.index===void 0||!e.showIndexes),f=e.showIndexes&&!d&&!n.xs,p=(d||e.showIndexes)&&!n.xs,m=e.getVideoAppLink(e.video,{}),h={analyticsData:e.analyticsData,analyticsOptions:{entity:u.Interactive,location:o.InteractiveListItem}},{canNavigate:g}=P.getCanBeConsumed(e.video);return(0,V.jsx)(`div`,{ref:r,className:`w-100`,children:(0,V.jsxs)(`div`,{className:`row g-0 py-2`,ref:t,style:e.style,children:[(0,V.jsx)(S,{...C.getThumbnailColumns(),className:`flex-column align-items-flex-start ${s?`pb-2 pe-2`:`mb-1 px-2`}`,children:(0,V.jsxs)(w,{children:[(0,V.jsx)(dr,{index:e.index,showDragHandle:d,showIndexes:f,dragHandleIcon:e.dragHandleIcon,dragHandleIconSize:e.dragHandleIconSize,dragAttributes:e.dragAttributes,dragListeners:e.dragListeners}),(0,V.jsx)(S,{xs:C.getThumbnailColSize(p),children:(0,V.jsx)(ir,{...h,video:e.video,appLink:m,shareId:e.shareId,audience:l,imageOptions:{size:D.Medium},textPosition:Y.Independent,type:`static`,hideDuration:s,commonVideoProps:{...e.commonVideoProps,subTextType:`none`}})})]})}),(0,V.jsxs)(S,{...C.getDetailsColumns(),className:`position-relative ${s?`pb-2`:`px-2`}`,children:[(0,V.jsxs)(`div`,{className:`d-flex justify-content-between`,children:[(0,V.jsx)(mr,{video:e.video,appLink:m,size:a,yearGroups:e.commonVideoProps.yearGroups,showPadlock:!e.commonVideoProps.hasStudentExperience&&!e.commonVideoProps.hasGuestExperience,linkClassName:`flex-grow-1`,...h}),(0,V.jsx)(vr,{...h,video:e.video,showSignIn:e.showSignIn,signInAppLink:e.getSignInAppLink?.(m)})]}),g?(0,V.jsx)(`div`,{className:`pt-sm-1 pt-md-0`,children:(0,V.jsx)(qr,{timepoints:e.video._timepoints?.value,appLink:m,previewAppLink:e.getPreviewQuestionsAppLink(e.video)})}):(0,V.jsx)(sr,{video:e.video,showSignIn:e.showSignIn,hasStudentExperience:e.commonVideoProps.hasStudentExperience,hasGuestExperience:e.commonVideoProps.hasGuestExperience}),!e.commonVideoProps.hasStudentExperience&&!e.commonVideoProps.hasGuestExperience&&(0,V.jsx)(pr,{video:e.video,yearGroups:e.commonVideoProps.yearGroups})]})]})})}),Yr=e=>(0,V.jsx)(Lt,{id:e.video.id,childComponent:Jr,childProps:e}),Xr={responsiveGuidance:`_responsiveGuidance_kx84c_2`},Zr=B.forwardRef((e,t)=>{let n=se(),[r,i]=F(),a=C.getSize(n,e.size),s=a===`sm`,{isSortable:c}=B.useContext(ni),l=e.video?.subjectPresentationAudiences?.data,d=Er(l,e.presentationAudiences),f=c&&!n.xs&&(i||e.index===void 0||!e.showIndexes),p=e.showIndexes&&!f&&!n.xs,m=(f||e.showIndexes)&&!n.xs,h=e.getVideoAppLink?.(e.video,{});function g(){return e.commonVideoProps.getSubTextAppLink?.(e.video)}let _=e.commonVideoProps.getSubTextType?.(e.video),v=g(),y={analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions??{entity:u.Video,location:o.VideoListItem}};return(0,V.jsx)(`div`,{ref:r,className:`w-100`,children:(0,V.jsxs)(`div`,{className:`row g-0 ${s?``:`py-2`}`,style:e.style,ref:t,children:[(0,V.jsx)(S,{...C.getThumbnailColumns(),className:`flex-column align-items-flex-start mb-1 mb-sm-0 pb-sm-2 pe-sm-2 px-md-2 pb-md-0`,children:(0,V.jsxs)(w,{children:[(0,V.jsx)(dr,{index:e.index,showDragHandle:f,showIndexes:p,dragHandleIcon:e.dragHandleIcon,dragHandleIconSize:e.dragHandleIconSize,dragAttributes:e.dragAttributes,dragListeners:e.dragListeners}),(0,V.jsx)(S,{xs:C.getThumbnailColSize(m),children:(0,V.jsx)(ir,{...y,video:e.video,appLink:h,shareId:e.shareId,audience:d,imageOptions:{size:m?D.Small:D.Medium},textPosition:Y.Independent,type:`static`,hideRating:!1,commonVideoProps:e.commonVideoProps})})]})}),(0,V.jsxs)(S,{...C.getDetailsColumns(),className:`d-flex position-relative flex-column px-0 px-md-2 pb-0 pb-sm-2 pb-md-0 justify-content-md-between`,children:[(0,V.jsxs)(`div`,{children:[(0,V.jsxs)(`div`,{className:`d-flex justify-content-between`,children:[(0,V.jsxs)(`div`,{className:`flex-grow-1`,children:[(0,V.jsx)(tt,{...y,video:e.video,appLink:v,type:_}),(0,V.jsx)(mr,{...y,video:e.video,appLink:h,size:a,yearGroups:e.commonVideoProps.yearGroups,showNewVideoIndicator:e.commonVideoProps.showNewVideoIndicator,showPadlock:!e.commonVideoProps.hasStudentExperience&&!e.commonVideoProps.hasGuestExperience,titleClassName:`mb-0`})]}),(0,V.jsx)(vr,{...y,video:e.video,showSignIn:e.showSignIn,signInAppLink:e.getSignInAppLink?.(h)})]}),!s&&(0,V.jsx)(sr,{video:e.video,showSignIn:e.showSignIn,hasStudentExperience:e.commonVideoProps.hasStudentExperience,hasGuestExperience:e.commonVideoProps.hasGuestExperience}),!e.commonVideoProps.hasStudentExperience&&!e.commonVideoProps.hasGuestExperience&&(0,V.jsx)(pr,{video:e.video,yearGroups:e.commonVideoProps.yearGroups})]}),!e.hideVideoGuidance&&(0,V.jsx)(Ln,{video:e.video,getVideoAppLink:e.getVideoAppLink,commonVideoProps:e.commonVideoProps,containerClassName:`d-flex justify-content-start align-items-center pt-sm-1 gap-1`,responsiveClassName:Xr.responsiveGuidance,...y})]})]})})});Zr.defaultProps={dragHandleIcon:cr,dragHandleIconSize:m.Small,size:`md`};var Qr=e=>(0,V.jsx)(Lt,{id:e.video.id,childComponent:Zr,childProps:e}),$r={sortableVideo:`_sortableVideo_ix6n3_1`,videoList:`_videoList_ix6n3_4`,badgeContainer:`_badgeContainer_ix6n3_12`,dragStyle:`_dragStyle_ix6n3_31`},ei=b.encloseNamespace(`shared.videoList`);function ti(e,t){return P.isClip(e)?t?kr:Or:P.isInteractive(e)?t?Yr:Jr:t?Qr:Zr}var ni=B.createContext({isSortable:!1});function ri(e){let{isSortable:t}=B.useContext(ni),[n,i]=B.useState(!1),{checkboxHelper:a}=e,o=r.getCurrentAppLink();return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`div`,{className:`position-relative ${$r.videoList}`,children:e.videos.map((r,o)=>{let s=ti(r,t),c=Number.isInteger(e.startingPositionIndex)?e.startingPositionIndex:0,l=a&&a.getSelectedCount()>1&&a.isChecked(r.id)?a.getSelected():r,u=typeof e.getAnalyticsData==`function`?e.getAnalyticsData(o):{pagePositionIndex:c+o};return(0,V.jsx)(Fe,{draggable:e.drag&&!t&&{id:r.id,data:l},dragStyle:$r.dragStyle,isDragging:n,setIsDragging:i,children:(0,V.jsxs)(`div`,{className:`d-flex flex-row align-items-center`,children:[e.allowBulkAction&&(0,V.jsx)(ee,{className:`mx-0 mx-md-2`,id:r.id,ariaLabel:`${ei(`ariaBulkAction`)}: ${r.name}`,onChange:()=>a.onToggleItem(r.id),checked:a.isChecked(r.id)}),(0,V.jsx)(s,{video:r,index:o,getVideoAppLink:e.getVideoAppLink,dragHandleIcon:e.dragHandleIcon,dragHandleIconSize:e.dragHandleIconSize,showSignIn:e.showSignIn,getSignInAppLink:e.getSignInAppLink,analyticsData:u,hasPermissions:e.hasPermissions,canRemovePrivateVideos:e.canRemovePrivateVideos,presentationAudiences:e.presentationAudiences,showIndexes:e.showIndexes,getPreviewQuestionsAppLink:e.getPreviewQuestionsAppLink,hideVideoGuidance:e.hideVideoGuidance,showOwner:e.showOwner,shareId:e.shareId,commonVideoProps:e.commonVideoProps,analyticsOptions:e.analyticsOptions})]})},`${r.id}:${o}`)})}),e.cursors&&(0,V.jsx)(st,{appLink:o,cursors:e.cursors})]})}export{Er as a,ir as c,Wn as d,Ln as f,rt as h,Or as i,Y as l,at as m,Zr as n,_r as o,vn as p,Jr as r,mr as s,ri as t,qn as u};
|
|
50
|
-
//# sourceMappingURL=
|
|
50
|
+
//# sourceMappingURL=C03mMZ4k.chunk.js.map
|