{"version":3,"file":"static/js/application.async.landing~af1fd1db.4bb105e4.chunk.js","mappings":"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","sources":["../../../../component-react/packages/validated-text-collection/src/dummy-is-optional-validation-item.js","../../../../component-react/packages/validated-text-collection/src/shared.js","../../../../component-react/packages/validated-text-collection/src/text-asset-collection.js","../../../../component-react/packages/validated-text-collection/src/style.js","../../../../component-react/packages/validated-url-input/src/validated-url-path.js","../../../../component-react/packages/validated-url-input/src/style.js","../../../../component-react/packages/validated-url-input/src/validated-mobile-url.js","../../../../component-react/packages/validated-url-input/src/validated-final-url.js","../../../../component-react/packages/validated-url-input/src/url-cards-details.js","../../../../component-react/packages/validated-url-input/src/validated-url-options.js","../../../../component-react/packages/validated-url-input/src/mobile-url-with-custom-validation.js","../../../../component-react/packages/validated-url-input/src/mobile-url-section.js","../../../../component-react/packages/validated-url-input/src/url-options-section.js","../../../../component-react/packages/vanity-url-option/src/options.js","../../../../component-react/packages/vanity-url-option/src/styles.js","../../../../component-react/packages/vanity-url-option/src/index.js","../../../../component-react/packages/video-ads-editor/src/components/video-template-summary-bar-control/style.js","../../../../component-react/packages/video-ads-editor/src/components/video-template-summary-bar-control/index.js","../../../../component-react/packages/video-ads-editor/src/video-template-editor/style.js","../../../../component-react/packages/video-ads-editor/src/navigation-view/style.js","../../../../component-react/packages/video-ads-editor/src/navigation-view/index.js","../../../../component-react/packages/video-ads-editor/src/video-template-editor/assets-editor/style.js","../../../../component-react/packages/video-ads-editor/src/components/text-collection-with-recommendations/components/short-headline-asset-collection/index.js","../../../../component-react/packages/video-ads-editor/src/components/text-collection-with-recommendations/configs/index.js","../../../../component-react/packages/video-ads-editor/src/util.js","../../../../component-react/packages/video-ads-editor/src/components/text-collection-with-recommendations/components/text-asset-collection-with-copilot.js","../../../../component-react/packages/video-ads-editor/src/components/text-collection-with-recommendations/components/styles.js","../../../../component-react/packages/video-ads-editor/src/components/text-collection-with-recommendations/components/text-asset-collection-with-recommendations.js","../../../../component-react/packages/video-ads-editor/src/components/text-collection-with-recommendations/index.js","../../../../component-react/packages/video-ads-editor/src/video-template-editor/assets-editor/index.js","../../../../component-react/packages/video-ads-editor/src/video-template-editor/style-editor/style.js","../../../../component-react/packages/video-ads-editor/src/video-template-editor/style-editor/font-editor.js","../../../../component-react/packages/video-ads-editor/src/video-template-editor/style-editor/color-editor.js","../../../../component-react/packages/video-ads-editor/src/video-template-editor/style-editor/index.js","../../../../component-react/packages/video-ads-editor/src/video-template-editor/audio-editor/style.js","../../../../component-react/packages/video-ads-editor/src/video-template-editor/audio-editor/index.js","../../../../component-react/packages/video-ads-editor/src/video-template-editor/scene-preview/style.js","../../../../component-react/packages/video-ads-editor/src/video-template-editor/scene-preview/index.js","../../../../component-react/packages/video-ads-editor/src/video-template-editor/story-board/style.js","../../../../component-react/packages/video-ads-editor/src/video-template-editor/story-board/scene-picker.js","../../../../component-react/packages/video-ads-editor/src/video-template-editor/story-board/index.js","../../../../component-react/packages/video-ads-editor/src/state.js","../../../../component-react/packages/video-ads-editor/src/video-template-editor/index.js","../../../../component-react/packages/video-ads-editor/src/use-navigation-state.js","../../../../component-react/packages/video-ads-editor/src/styles.js","../../../../component-react/packages/video-ads-editor/src/video-template-add-image-wrapper.js","../../../../component-react/packages/video-ads-editor/src/video-template-editor-context-wrapper.js","../../../../component-react/packages/video-pure-component/src/styles.js","../../../../component-react/packages/video-pure-component/src/video.js","../../../../component-react/packages/video-status-placeholder-pure-component/src/failed-place-holder.js","../../../../component-react/packages/video-status-placeholder-pure-component/src/encoding-place-holder.js","../../../../component-react/packages/video-status-placeholder-pure-component/src/unverified-place-holder.js","../../../../component-react/packages/video-status-placeholder/src/styles.js","../../../../component-react/packages/video-status-placeholder/src/failed-place-holder.js","../../../../component-react/packages/video-status-placeholder/src/encoding-place-holder.js","../../../../component-react/packages/video-status-placeholder/src/unverified-place-holder.js","../../../../component-react/packages/video/src/video.js","../../../../component-react/packages/video/src/styles.js"],"sourcesContent":["import { useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withValidation } from '@bingads-webui-react/validation';\r\n\r\nconst DummyIsOptionalComponent = ({ value, onChange }) => {\r\n const [isOptional, setIsOptional] = useState(value);\r\n\r\n if (value !== isOptional) {\r\n onChange({ target: { value } });\r\n setIsOptional(value);\r\n }\r\n\r\n return null;\r\n};\r\n\r\nDummyIsOptionalComponent.propTypes = {\r\n value: PropTypes.bool.isRequired,\r\n onChange: PropTypes.number.isRequired,\r\n};\r\n\r\nexport const DummyIsOptionalValidationItem = withValidation(DummyIsOptionalComponent);\r\n\r\nexport const createValidationPropsForDummyItem = isOptionalValue => ({\r\n schema: {\r\n properties: {\r\n type: 'object',\r\n IsOptional: {\r\n type: 'bool',\r\n },\r\n },\r\n },\r\n field: 'IsOptional',\r\n data: { IsOptional: isOptionalValue },\r\n});\r\n","import { chain, isEmpty } from 'underscore';\r\n\r\nexport const countTextAssets = ({ collectionObj, countEmpty = false }) => chain(collectionObj).values().filter(textValue => countEmpty || !isEmpty(textValue)).value().length;\r\n\r\nexport const hasTextAssets = (headlines, longHeadlines, descriptions) => countTextAssets({ collectionObj: headlines }) + countTextAssets({ collectionObj: longHeadlines }) + countTextAssets({ collectionObj: descriptions }) > 0;\r\n\r\nconst collectionSummary = (element, i18n) => {\r\n const { collection, displayText, displayTextSingular } = element;\r\n\r\n const count = countTextAssets({ collectionObj: collection });\r\n const itemText = count === 1 && displayTextSingular ? displayTextSingular : displayText;\r\n\r\n return (i18n.getString(_TL_('{{collectionCount}} {{displayText}}', { comment: 'Collection Count can be 2 and Display Text can be headlines' }), { displayText: itemText, collectionCount: count }));\r\n};\r\n\r\nexport const getTextCardSummaryDetails = (collectionsSummary, i18n) => {\r\n const summaryDetails = [];\r\n collectionsSummary.forEach((element) => {\r\n summaryDetails.push(collectionSummary(element, i18n));\r\n });\r\n return summaryDetails.join(' ');\r\n};\r\n\r\nexport const getTextCardSummaryDetailsForCollection = (i18n, collection, displayText, displayTextSingular) => collectionSummary({ collection, displayText, displayTextSingular }, i18n);\r\n\r\nexport const getHeadlinesCardSummaryDetails = (i18n, headlines) => getTextCardSummaryDetailsForCollection(i18n, headlines, i18n.getString(_TL_('short headlines')), i18n.getString(_TL_('short headline')));\r\nexport const getLongHeadlinesCardSummaryDetails = (i18n, longHeadlines) => getTextCardSummaryDetailsForCollection(i18n, longHeadlines, i18n.getString(_TL_('long headlines')), i18n.getString(_TL_('long headline')));\r\nexport const getDescriptionsCardSummaryDetails = (i18n, descriptions) => getTextCardSummaryDetailsForCollection(i18n, descriptions, i18n.getString(_TL_('descriptions')), i18n.getString(_TL_('description')));\r\n","import React, { useCallback, useMemo, useContext, useRef } from 'react';\r\nimport { result, filter, isFunction, reduce, map, isEmpty, chain, uniq, size, noop } from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\n\r\nimport { ValidationGroup, withError, withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { Label } from '@bingads-webui-react/primitive';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { HelpPopup } from '@bingads-webui-react/help-popup';\r\nimport { ActionButton, CommandButton } from '@fluentui/react';\r\nimport { registerIcons } from '@fluentui/style-utilities';\r\nimport { withContainerErrors, withControlErrorHandling } from '@bingads-webui-campaign-react/error-handling';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { RemainingCharsValidatedTextField } from '@bingads-webui-campaign-react/remaining-chars-hint';\r\nimport { ValidatedTextFieldWithAdCustomizer } from '@bingads-webui-campaign-react/responsive-search-ad-editor';\r\n\r\nimport { getStyles } from './style';\r\nimport { DummyIsOptionalValidationItem, createValidationPropsForDummyItem } from './dummy-is-optional-validation-item';\r\nimport { countTextAssets } from './shared';\r\n\r\nregisterIcons({\r\n icons: {\r\n 'delete-svg': (\r\n \r\n \r\n \r\n ),\r\n },\r\n});\r\n\r\nconst ValidationGroupWithMessage = withControlErrorHandling(withContainerErrors(withError(ValidationGroup)));\r\nconst hasEnoughNonEmptyValues = (list, min) => filter(list.items, item => item.value && result(item.value, 'length', 0) > 0).length >= min;\r\nconst hasDuplicateValues = (list) => {\r\n const values = chain(list.items).filter(item => item.value && result(item.value, 'length', 0) > 0).map(item => item.value).value();\r\n return size(values) !== size(uniq(values));\r\n};\r\n\r\nconst deriveValue = (data, minCollectionSize, singleAssetValidationPropsField, validationPropsField) => {\r\n const initialValue = {};\r\n\r\n const collectionObj = result(data, validationPropsField, {});\r\n const numberOfPreloadedAssets = countTextAssets({ collectionObj, countEmpty: true });\r\n\r\n for (let i = 0; i < (numberOfPreloadedAssets || minCollectionSize || 1); i += 1) {\r\n const fieldName = `${singleAssetValidationPropsField}${i}`;\r\n initialValue[fieldName] = collectionObj[fieldName] || '';\r\n }\r\n return initialValue;\r\n};\r\n\r\nexport const UnvalidatedTextAssetCollection = React.memo((props) => {\r\n const {\r\n labelAction,\r\n overrideInputNode,\r\n minCollectionSize,\r\n maxCollectionSize,\r\n isOptional,\r\n labelText,\r\n labelId,\r\n helpPopupTopic,\r\n helpPopupAriaLabel,\r\n placeholderText,\r\n fieldName,\r\n singleAssetValidationPropsField,\r\n validationPropsField,\r\n addButtonText,\r\n formErrorProps,\r\n renderWrapperFunction,\r\n updateValidation,\r\n errorMessage,\r\n duplicateErrorMessage,\r\n validationProps,\r\n externalErrorMessages,\r\n showAddButton,\r\n hideAddButtonWhenLimitReached,\r\n getCustomErrorMessage,\r\n styleOverrides,\r\n alwaysShowError,\r\n showDeleteButton,\r\n onDeleteTextAsset,\r\n deleteButtonLabel,\r\n renderInlineCopilot,\r\n enableCustomizer,\r\n withDeleteIconDisabled,\r\n } = props;\r\n const getStylesWithOverrides = useMemo(() => getStyles(styleOverrides), [styleOverrides]);\r\n const classes = useDefaultStyles(getStylesWithOverrides);\r\n const i18n = useContext(I18nContext);\r\n const activity = useContext(ActivityContext);\r\n\r\n const { data, schema } = validationProps;\r\n\r\n const value = { [validationPropsField]: deriveValue(data, minCollectionSize, singleAssetValidationPropsField, validationPropsField) };\r\n\r\n const assetsToRender = value[validationPropsField];\r\n\r\n const onDeleteAsset = useCallback((key) => {\r\n const deletedValue = value[validationPropsField][key];\r\n\r\n const newValidationPropsField = {};\r\n let index = 0;\r\n Object.keys(value[validationPropsField]).forEach((itemKey) => {\r\n if (itemKey !== key) {\r\n newValidationPropsField[`${singleAssetValidationPropsField}${index}`] = value[validationPropsField][itemKey];\r\n index += 1;\r\n }\r\n });\r\n for (let i = Object.keys(newValidationPropsField).length; i < minCollectionSize; i += 1) {\r\n newValidationPropsField[`${singleAssetValidationPropsField}${index}`] = '';\r\n index += 1;\r\n }\r\n const newValue = value;\r\n newValue[validationPropsField] = newValidationPropsField;\r\n\r\n onDeleteTextAsset(key, deletedValue);\r\n\r\n updateValidation(undefined, newValue);\r\n }, [minCollectionSize, onDeleteTextAsset, singleAssetValidationPropsField, updateValidation, validationPropsField, value]);\r\n\r\n const renderItem = useCallback((key, itemValue, additionalTextFieldProps) => (\r\n
\r\n {\r\n enableCustomizer ?\r\n :\r\n \r\n }\r\n {additionalTextFieldProps && additionalTextFieldProps.renderInlineCopilot && additionalTextFieldProps.renderInlineCopilot(key, itemValue)}\r\n {showDeleteButton &&\r\n { onDeleteAsset(key); }}\r\n ariaLabel={deleteButtonLabel}\r\n disabled={Object.keys(assetsToRender).length === 1 && withDeleteIconDisabled}\r\n />\r\n }\r\n
\r\n ), [classes.TextAssetContainer, classes.WithFlexButtons, showDeleteButton, renderInlineCopilot, enableCustomizer, withDeleteIconDisabled, i18n, validationPropsField, schema, placeholderText, deleteButtonLabel, assetsToRender, onDeleteAsset]);\r\n\r\n const textAssetFields = useMemo(() => map(assetsToRender, (itemValue, key) => {\r\n if (isFunction(renderWrapperFunction)) {\r\n return renderWrapperFunction(key, additionalTextFieldProps => renderItem(key, itemValue, additionalTextFieldProps), itemValue);\r\n }\r\n\r\n return renderItem(key);\r\n }), [assetsToRender, renderWrapperFunction, renderItem]);\r\n\r\n const hideAddButton = hideAddButtonWhenLimitReached && textAssetFields.length >= maxCollectionSize;\r\n\r\n const onAddAsset = useCallback(() => {\r\n const newValue = {\r\n [validationPropsField]: {\r\n ...value[`${validationPropsField}`],\r\n [`${singleAssetValidationPropsField}${textAssetFields.length}`]: '',\r\n },\r\n };\r\n\r\n updateValidation(undefined, newValue);\r\n }, [updateValidation, singleAssetValidationPropsField, textAssetFields.length, validationPropsField, value]);\r\n\r\n const onValidate = useCallback((validationResult) => {\r\n if (activity) {\r\n activity.signal(`onTextAssetsCollectionValidate- ${validationResult.data}`);\r\n }\r\n let customErrors = [];\r\n const newData = {\r\n ...validationResult.data,\r\n [validationPropsField]: {\r\n ...value[validationPropsField],\r\n ...validationResult.data[validationPropsField],\r\n },\r\n };\r\n if (getCustomErrorMessage) {\r\n const assets = newData[validationPropsField];\r\n\r\n customErrors = getCustomErrorMessage(assets, validationPropsField);\r\n }\r\n updateValidation([...validationResult.messages, ...customErrors], newData);\r\n }, [activity, getCustomErrorMessage, updateValidation, validationPropsField, value]);\r\n\r\n const isOptionalRef = useRef();\r\n isOptionalRef.current = isOptional;\r\n\r\n const collectionValidator = (changed, list) => {\r\n let groupErrors = hasEnoughNonEmptyValues(list, isOptionalRef.current ? 0 : minCollectionSize) ? [] : [errorMessage];\r\n if (isEmpty(groupErrors) && duplicateErrorMessage) {\r\n groupErrors = hasDuplicateValues(list) ? [duplicateErrorMessage] : [];\r\n }\r\n return reduce(list.items, (errors, item) => [...errors, ...item.messages], groupErrors);\r\n };\r\n\r\n const dummyItemValidationProps = useMemo(() => createValidationPropsForDummyItem(isOptional), [isOptional]);\r\n\r\n return (\r\n
\r\n error === errorMessage || (duplicateErrorMessage && (error === duplicateErrorMessage)),\r\n stopPropagation: true,\r\n passiveMessages: externalErrorMessages,\r\n showErrorOnPassiveMessages: true,\r\n ...(alwaysShowError && { alwaysShowError }),\r\n }}\r\n formErrorProps={formErrorProps}\r\n >\r\n
\r\n \r\n {labelAction}\r\n
\r\n {overrideInputNode}\r\n \r\n {textAssetFields}\r\n
\r\n \r\n \r\n {showAddButton && !hideAddButton &&\r\n = maxCollectionSize}\r\n onClick={onAddAsset}\r\n >\r\n {addButtonText}\r\n \r\n }\r\n \r\n );\r\n});\r\n\r\nUnvalidatedTextAssetCollection.propTypes = {\r\n minCollectionSize: PropTypes.number,\r\n maxCollectionSize: PropTypes.number.isRequired,\r\n isOptional: PropTypes.bool,\r\n labelText: PropTypes.string,\r\n labelId: PropTypes.string,\r\n helpPopupTopic: PropTypes.string,\r\n helpPopupAriaLabel: PropTypes.string,\r\n placeholderText: PropTypes.string,\r\n fieldName: PropTypes.string.isRequired,\r\n validationPropsField: PropTypes.string.isRequired,\r\n singleAssetValidationPropsField: PropTypes.string.isRequired,\r\n addButtonText: PropTypes.string.isRequired,\r\n i18n: PropTypes.shape({}).isRequired,\r\n formErrorProps: PropTypes.shape({}),\r\n renderWrapperFunction: PropTypes.func,\r\n updateValidation: PropTypes.func.isRequired,\r\n errorMessage: PropTypes.string.isRequired,\r\n duplicateErrorMessage: PropTypes.string,\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({}).isRequired,\r\n schema: PropTypes.shape({}).isRequired,\r\n }).isRequired,\r\n alwaysShowError: PropTypes.bool,\r\n externalErrorMessages: PropTypes.arrayOf(PropTypes.string),\r\n showAddButton: PropTypes.bool,\r\n hideAddButtonWhenLimitReached: PropTypes.bool,\r\n getCustomErrorMessage: PropTypes.func,\r\n styleOverrides: PropTypes.shape({}),\r\n showDeleteButton: PropTypes.bool,\r\n onDeleteTextAsset: PropTypes.func,\r\n deleteButtonLabel: PropTypes.string,\r\n renderInlineCopilot: PropTypes.func,\r\n enableCustomizer: PropTypes.bool,\r\n withDeleteIconDisabled: PropTypes.bool,\r\n labelAction: PropTypes.node,\r\n overrideInputNode: PropTypes.node,\r\n};\r\n\r\nUnvalidatedTextAssetCollection.defaultProps = {\r\n minCollectionSize: 1,\r\n isOptional: false,\r\n withDeleteIconDisabled: false,\r\n labelText: undefined,\r\n labelId: undefined,\r\n placeholderText: undefined,\r\n formErrorProps: undefined,\r\n renderWrapperFunction: undefined,\r\n helpPopupTopic: undefined,\r\n helpPopupAriaLabel: undefined,\r\n alwaysShowError: undefined,\r\n externalErrorMessages: [],\r\n showAddButton: true,\r\n hideAddButtonWhenLimitReached: false,\r\n getCustomErrorMessage: undefined,\r\n duplicateErrorMessage: undefined,\r\n styleOverrides: {},\r\n showDeleteButton: false,\r\n onDeleteTextAsset: noop,\r\n deleteButtonLabel: undefined,\r\n renderInlineCopilot: null,\r\n enableCustomizer: false,\r\n labelAction: null,\r\n overrideInputNode: null,\r\n};\r\n\r\nexport const TextAssetCollection = withCustomValidation(UnvalidatedTextAssetCollection);\r\n\r\n","import { merge } from '@bingads-webui-universal/primitive-utilities';\r\n\r\nexport const getStyles = styleOverrides => () => merge({\r\n TextAssetContainer: {\r\n marginBottom: '5px',\r\n\r\n '&:not(:first-child)': {\r\n marginTop: '16px',\r\n },\r\n\r\n '& .remaining-hint': {\r\n marginBottom: '5px',\r\n },\r\n },\r\n\r\n labelContainer: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n },\r\n\r\n WithFlexButtons: {\r\n display: 'flex',\r\n\r\n '& .text-asset-copilot > button': {\r\n height: '30px',\r\n\r\n '&:first-of-type': {\r\n marginLeft: '8px',\r\n },\r\n },\r\n\r\n '& > button': {\r\n height: '30px',\r\n },\r\n },\r\n\r\n TextAssetsCollectionContainer: {\r\n width: '552px',\r\n '& div .error': {\r\n color: '#A80000',\r\n },\r\n },\r\n\r\n AddAssetButton: {\r\n marginBottom: '15px',\r\n },\r\n}, styleOverrides);\r\n","import React, { useCallback } from 'react';\r\nimport { result, first } from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport { Label, Stack } from '@fluentui/react';\r\nimport { HelpPopupInline } from '@bingads-webui-react/help-popup';\r\nimport { withCustomValidation, withError } from '@bingads-webui-react/validation';\r\nimport { UrlPathFluent as UrlPathFluentV1 } from '@bingads-webui-campaign-react/url-input-fluent';\r\nimport { UrlPathFluent as UrlPathFluentV2 } from '@bingads-webui-campaign-react/url-input-fluent-v2';\r\nimport { withFluentSwitcher } from '@bingads-webui-react/fluent-version-switcher';\r\n\r\nconst UrlPathFluent = withFluentSwitcher(UrlPathFluentV1, UrlPathFluentV2);\r\n\r\nconst UrlPathWithCustomValidation = ({\r\n validationProps,\r\n updateValidation,\r\n i18n,\r\n}) => {\r\n const { data } = validationProps;\r\n\r\n const urlPath1 = result(data, 'Path1', '');\r\n const urlPath2 = result(data, 'Path2', '');\r\n const finalUrl = first(result(data, 'FinalUrls', ['']));\r\n\r\n const onChange = useCallback((errors, value) => {\r\n updateValidation(errors, value);\r\n }, [updateValidation]);\r\n\r\n return (\r\n
\r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nUrlPathWithCustomValidation.propTypes = {\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({\r\n Path1: PropTypes.string,\r\n Path2: PropTypes.string,\r\n FinalUrls: PropTypes.arrayOf(PropTypes.string),\r\n }),\r\n }).isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n};\r\n\r\nexport const ValidatedUrlPath = withError(withCustomValidation(UrlPathWithCustomValidation));\r\n","export const getStyles = () => ({\r\n UrlContainer: {\r\n width: '435px',\r\n\r\n '& .store-url-text-container': {\r\n marginBottom: '10px',\r\n },\r\n },\r\n MobileUrlContainer: {\r\n width: '435px',\r\n marginTop: '20px',\r\n },\r\n});\r\n","import React, { useCallback, useState } from 'react';\r\nimport { isEmpty, first, result } from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { Label, Stack, Checkbox } from '@fluentui/react';\r\nimport { HelpPopupInline } from '@bingads-webui-react/help-popup';\r\nimport { withCustomValidation, withError } from '@bingads-webui-react/validation';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { UrlInputFluent as UrlInputFluentV1, getUrlPrefixAndDestination } from '@bingads-webui-campaign-react/url-input-fluent';\r\nimport { UrlInputFluent as UrlInputFluentV2 } from '@bingads-webui-campaign-react/url-input-fluent-v2';\r\nimport { withFluentSwitcher } from '@bingads-webui-react/fluent-version-switcher';\r\n\r\nimport { getStyles } from './style';\r\n\r\nconst MobileUrlKey = 'MobileFinalUrls';\r\n\r\nconst UrlInputFluent = withFluentSwitcher(UrlInputFluentV1, UrlInputFluentV2);\r\n\r\nconst MobileUrlWithCustomValidation = ({\r\n validationProps,\r\n updateValidation,\r\n i18n,\r\n helpTopicId,\r\n}) => {\r\n const { data } = validationProps;\r\n\r\n const mobileFinalUrls = result(data, MobileUrlKey, [undefined]);\r\n const mobileFinalUrl = first(mobileFinalUrls);\r\n\r\n const [isMobileUrlChecked, setIsMobileUrlChecked] = useState(!!mobileFinalUrl);\r\n const [cachedValue, setCachedValue] = useState(mobileFinalUrl);\r\n const [cachedErrors, setCachedErrors] = useState([]);\r\n\r\n const onCheckboxChange = useCallback((ev, checked) => {\r\n setIsMobileUrlChecked(checked);\r\n\r\n if (!checked) {\r\n setCachedValue(mobileFinalUrl);\r\n const [, urlWithoutPrefix] = getUrlPrefixAndDestination(mobileFinalUrl);\r\n updateValidation([], { [MobileUrlKey]: [] }, !isEmpty(urlWithoutPrefix));\r\n } else {\r\n // If the user never touched the Mobile Final URL fields and only flipping the checkbox,\r\n // we will not be setting isDirty. It is mostly important for the scenario where it initial value\r\n // of the URL is empty - this will avoid showing the validation error when checkbox is checked.\r\n const [, urlWithoutPrefix] = getUrlPrefixAndDestination(cachedValue);\r\n updateValidation(cachedErrors, { [MobileUrlKey]: [cachedValue] }, !isEmpty(urlWithoutPrefix));\r\n }\r\n }, [cachedErrors, cachedValue, mobileFinalUrl, updateValidation]);\r\n\r\n\r\n const onInputChange = useCallback((errors, value) => {\r\n if (mobileFinalUrl !== value) {\r\n updateValidation(errors, { [MobileUrlKey]: [value] });\r\n setCachedErrors(errors);\r\n }\r\n }, [mobileFinalUrl, updateValidation]);\r\n\r\n const classes = useDefaultStyles(getStyles);\r\n\r\n return (\r\n
\r\n \r\n {isMobileUrlChecked && (\r\n \r\n \r\n \r\n )}\r\n
\r\n );\r\n};\r\n\r\nMobileUrlWithCustomValidation.propTypes = {\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({\r\n MobileFinalUrls: PropTypes.arrayOf(PropTypes.string),\r\n }),\r\n }).isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n helpTopicId: PropTypes.string,\r\n};\r\n\r\nMobileUrlWithCustomValidation.defaultProps = {\r\n helpTopicId: 'pop_BA_NewCampaignCreate_Ad_MobileURL',\r\n};\r\n\r\nexport const ValidatedMobileUrl = withError(withCustomValidation(MobileUrlWithCustomValidation));\r\n","import React, { useCallback, useContext } from 'react';\r\nimport { first, result, noop, isEmpty } from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport { Label, Stack } from '@fluentui/react';\r\nimport { HelpPopupInline } from '@bingads-webui-react/help-popup';\r\nimport { UrlInputFluent } from '@bingads-webui-campaign-react/url-input-fluent';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\n\r\nconst FinalURlKey = 'FinalUrls';\r\n\r\nexport const ValidatedFinalUrl= ({\r\n i18n,\r\n validationOnUrlChange,\r\n updateValidation,\r\n prepopulateUrl,\r\n validationProps,\r\n validateOnRender,\r\n helpTopicId,\r\n hideLabel,\r\n additionalProperties,\r\n customUrlProtocol,\r\n enableSpecialCharactersValidation,\r\n}) => {\r\n const { data } = validationProps;\r\n const finalUrls = result(data, FinalURlKey, undefined);\r\n const finalUrl = first(finalUrls);\r\n const createFinalUrlsViewModel = urls => ({ [FinalURlKey]: urls });\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n const onChange = useCallback((errors, value) => {\r\n updateValidation(errors, createFinalUrlsViewModel([value]), (!isEmpty(errors) && !!finalUrl));\r\n\r\n if (activity) {\r\n activity.signal(`onFinalUrlChanged - ${JSON.stringify(createFinalUrlsViewModel([value]))}`);\r\n }\r\n }, [activity, finalUrl, updateValidation]);\r\n\r\n return (\r\n \r\n {!hideLabel &&\r\n \r\n }\r\n \r\n \r\n );\r\n};\r\n\r\nValidatedFinalUrl.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n validationOnUrlChange: PropTypes.func,\r\n prepopulateUrl: PropTypes.string,\r\n hideLabel: PropTypes.bool,\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({\r\n FinalUrls: PropTypes.arrayOf(PropTypes.string),\r\n }),\r\n updateOnMount: PropTypes.bool,\r\n }).isRequired,\r\n validateOnRender: PropTypes.bool,\r\n helpTopicId: PropTypes.string,\r\n additionalProperties: PropTypes.shape({}),\r\n customUrlProtocol: PropTypes.bool,\r\n enableSpecialCharactersValidation: PropTypes.bool,\r\n};\r\n\r\nValidatedFinalUrl.defaultProps = {\r\n validationOnUrlChange: noop,\r\n prepopulateUrl: '',\r\n hideLabel: false,\r\n validateOnRender: false,\r\n helpTopicId: 'pop_BA_NewAdCreate_FinalURL',\r\n additionalProperties: {},\r\n customUrlProtocol: false,\r\n enableSpecialCharactersValidation: false,\r\n};\r\n","import { isEmpty, first } from 'underscore';\r\nimport { getDomain } from '@bingads-webui/url-util';\r\nimport { isEmptyUrl } from '@bingads-webui-campaign-react/url-input-fluent';\r\n\r\nexport const getFinalUrlCardSummaryDetails = (i18n, finalUrls) => (isEmptyUrl(finalUrls) ? i18n.getString(_TL_('No URL')) : first(finalUrls));\r\n\r\nexport const getFinalUrlWithPath = (finalUrls, path1, path2) => {\r\n const finalUrlDomain = getDomain(first(finalUrls)) || 'www.example.com';\r\n return !isEmpty(path1) && !isEmpty(path2) ? `${finalUrlDomain}/${path1}/${path2}` : finalUrlDomain;\r\n};\r\n\r\nexport const getAdvancedUrlOptionsCardSummaryDetails = (i18n, finalUrls, path1, path2, mobileFinalUrls) => {\r\n const finalUrl = first(finalUrls);\r\n const mobileFinalUrl = first(mobileFinalUrls);\r\n\r\n let displayUrl = '';\r\n if (!isEmpty(path1)) {\r\n const finalUrlDomain = getDomain(finalUrl) || 'www.example.com';\r\n displayUrl = `${finalUrlDomain}/${path1}`;\r\n if (!isEmpty(path2)) {\r\n displayUrl = `${displayUrl}/${path2}`;\r\n }\r\n }\r\n const noDisplayUrl = isEmpty(displayUrl);\r\n const noMboileUrl = isEmpty(mobileFinalUrl);\r\n\r\n if (noDisplayUrl && noMboileUrl) {\r\n return i18n.getString(_TL_('No settings applied'));\r\n }\r\n\r\n const displayUrlDetails = `${i18n.getString(_TL_('Display URL'))}: ${displayUrl}`;\r\n const mobileUrlDetails = `${i18n.getString(_TL_('Mobile URL'))}: ${mobileFinalUrl}`;\r\n\r\n return `${noDisplayUrl ? '' : displayUrlDetails}${noDisplayUrl || noMboileUrl ? '' : '; '}${noMboileUrl ? '' : mobileUrlDetails}`;\r\n};\r\n","import _, { compose, partial } from 'underscore';\r\nimport { withProps } from '@bingads-webui-react/with-props';\r\nimport { withControlErrorHandling, withUnvalidatedControlErrors } from '@bingads-webui-campaign-react/error-handling';\r\nimport { propertyIs, StandardControlAdapter } from '@bingads-webui-campaign-react/form-error';\r\nimport { ValidatedUrlOptionsParameters, ValidatedUrlOptionsParametersWithError } from '@bingads-webui-campaign-react/url-options';\r\n\r\nconst campaignTrackingUrlTemplate = propertyIs('TrackingUrlTemplate');\r\nconst campaignFinalUrlSuffix = propertyIs('FinalUrlSuffix');\r\nconst campaignUrlCustomParameters = propertyIs('UrlCustomParameters');\r\nconst trackingUrlTemplateControlsWrapper = compose(\r\n withControlErrorHandling,\r\n partial(withUnvalidatedControlErrors, _, { filter: campaignTrackingUrlTemplate, Adapter: StandardControlAdapter() })\r\n);\r\nconst finalUrlSuffixControlsWrapper = compose(\r\n withControlErrorHandling,\r\n partial(withUnvalidatedControlErrors, _, { filter: campaignFinalUrlSuffix, Adapter: StandardControlAdapter() })\r\n);\r\nconst urlCustomParametersControlsWrapper = compose(\r\n withControlErrorHandling,\r\n partial(withUnvalidatedControlErrors, _, { filter: campaignUrlCustomParameters, Adapter: StandardControlAdapter({ functionsToInject: ['onCustomParameterKeyChange', 'onCustomParameterValueChange', 'onRemoveUrlParameter', 'onAddUrlParameter'] }) })\r\n);\r\n\r\nexport const ValidatedUrlOptionsParameter = withControlErrorHandling(withProps({\r\n trackingUrlTemplateControlsWrapper,\r\n finalUrlSuffixControlsWrapper,\r\n urlCustomParametersControlsWrapper,\r\n}, ValidatedUrlOptionsParameters));\r\n\r\nexport const ValidatedUrlOptionsParameterWithError = withControlErrorHandling(withProps({\r\n trackingUrlTemplateControlsWrapper,\r\n finalUrlSuffixControlsWrapper,\r\n urlCustomParametersControlsWrapper,\r\n}, ValidatedUrlOptionsParametersWithError));\r\n","import React, { useCallback } from 'react';\r\nimport { first, result } from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { Label, Stack } from '@fluentui/react';\r\nimport { HelpPopupInline } from '@bingads-webui-react/help-popup';\r\nimport { withCustomValidation, withError } from '@bingads-webui-react/validation';\r\nimport { UrlInputFluent } from '@bingads-webui-campaign-react/url-input-fluent';\r\n\r\nconst MobileUrlKey = 'MobileFinalUrls';\r\nconst valuePrefix = ['http://', 'https://'];\r\n\r\nconst MobileUrlWithCustomValidation = ({\r\n validationProps,\r\n updateValidation,\r\n i18n,\r\n helpTopicId,\r\n validateOnRender,\r\n customizedValidation,\r\n isControlledOutside,\r\n validateOnDomain,\r\n}) => {\r\n const { data } = validationProps;\r\n\r\n const mobileFinalUrls = result(data, MobileUrlKey, [undefined]);\r\n const mobileFinalUrl = first(mobileFinalUrls);\r\n\r\n const onInputChange = useCallback((errors, value) => {\r\n const formattedValue = valuePrefix.includes(value) && validateOnDomain ? '' : value;\r\n const updatedErrors = valuePrefix.includes(value) && validateOnDomain ? [] : errors;\r\n if (mobileFinalUrl !== formattedValue || isControlledOutside) {\r\n updateValidation(updatedErrors, { [MobileUrlKey]: [formattedValue] });\r\n }\r\n }, [isControlledOutside, mobileFinalUrl, updateValidation, validateOnDomain]);\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nMobileUrlWithCustomValidation.propTypes = {\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({\r\n MobileFinalUrls: PropTypes.arrayOf(PropTypes.string),\r\n }),\r\n }).isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n helpTopicId: PropTypes.string,\r\n validateOnRender: PropTypes.bool,\r\n customizedValidation: PropTypes.func,\r\n isControlledOutside: PropTypes.bool,\r\n validateOnDomain: PropTypes.bool,\r\n};\r\n\r\nMobileUrlWithCustomValidation.defaultProps = {\r\n helpTopicId: 'pop_BA_NewCampaignCreate_Ad_MobileURL',\r\n validateOnRender: false,\r\n validateOnDomain: false,\r\n customizedValidation: null,\r\n isControlledOutside: false,\r\n};\r\n\r\nexport const ValidatedMobileUrlWithoutCheckbox = withError(withCustomValidation(MobileUrlWithCustomValidation));\r\n","import React, { useMemo, useContext } from 'react';\r\nimport { first } from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n ValidatedPanel,\r\n TextTitle,\r\n getPanelErrorProps,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { propertyIs } from '@bingads-webui-campaign-react/form-error';\r\nimport { withControlErrorHandling, withUnvalidatedControlErrors } from '@bingads-webui-campaign-react/error-handling';\r\nimport { isEmptyUrl, validateAdUrl } from '@bingads-webui-campaign-react/url-input-fluent';\r\nimport MobileFinalUrlImg from '../media/mobile-url.svg';\r\nimport { ValidatedMobileUrlWithoutCheckbox } from './mobile-url-with-custom-validation';\r\n\r\nconst nativeAdMobileFinalUrlsProp = propertyIs('MobileFinalUrls');\r\nconst ServerValidatedMobileFinalUrl = withControlErrorHandling(withUnvalidatedControlErrors(ValidatedMobileUrlWithoutCheckbox, { filter: nativeAdMobileFinalUrlsProp }));\r\nconst customizedValidation = (url, requiredUrlProtocolAndDomain, i18n, urlLengthLimit, customUrlProtocol) => {\r\n if (isEmptyUrl([url])) {\r\n return null;\r\n }\r\n return validateAdUrl(url, requiredUrlProtocolAndDomain, i18n, urlLengthLimit, customUrlProtocol);\r\n};\r\n\r\nexport const MobileUrlSection = ({\r\n expand,\r\n mobileFinalUrls,\r\n ...rest\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n const mobileFinalUrlValidationProps = useMemo(() => ({\r\n data: {\r\n MobileFinalUrls: mobileFinalUrls,\r\n },\r\n initialValue: {\r\n MobileFinalUrls: mobileFinalUrls,\r\n },\r\n }), [mobileFinalUrls]);\r\n const mobileFinalUrlDetails = useMemo(() => (isEmptyUrl(mobileFinalUrls) ? i18n.getString(_TL_('Mobile URL: None')) : first(mobileFinalUrls)), [i18n, mobileFinalUrls]);\r\n\r\n return (\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand,\r\n expandKey: 'mobile-final-url',\r\n }}\r\n {...rest}\r\n >\r\n \r\n \r\n );\r\n};\r\n\r\nMobileUrlSection.propTypes = {\r\n expand: PropTypes.func.isRequired,\r\n permissions: PropTypes.shape({}).isRequired,\r\n mobileFinalUrls: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n};\r\n","import React, { useMemo, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n ValidatedPanel,\r\n TextTitle,\r\n getPanelErrorProps,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { getUrlOptionsDetails } from '@bingads-webui-campaign-react/url-options';\r\nimport { ValidatedUrlOptionsParameter } from './validated-url-options';\r\nimport UrlOptionsImg from '../media/campaign-url-options.svg';\r\n\r\nexport const URLOptionsSection = ({\r\n expand,\r\n trackingUrlTemplate,\r\n finalUrlSuffix,\r\n urlCustomParameters,\r\n token,\r\n triggerTestUurl,\r\n ...rest\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n const urlOptions = useMemo(() => ({\r\n TrackingUrlTemplate: trackingUrlTemplate,\r\n FinalUrlSuffix: finalUrlSuffix,\r\n UrlCustomParameters: urlCustomParameters,\r\n }), [finalUrlSuffix, trackingUrlTemplate, urlCustomParameters]);\r\n const urlOptionsDetails = useMemo(() => getUrlOptionsDetails(i18n, urlOptions), [urlOptions, i18n]);\r\n\r\n return (\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand,\r\n expandKey: 'advanced-url-options',\r\n }}\r\n {...rest}\r\n >\r\n \r\n {i18n.getString(_TL_('Set up the tracking and redirect information for your ads.'))}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nURLOptionsSection.propTypes = {\r\n expand: PropTypes.func.isRequired,\r\n finalUrlSuffix: PropTypes.string,\r\n trackingUrlTemplate: PropTypes.string,\r\n urlCustomParameters: PropTypes.arrayOf(PropTypes.shape({})),\r\n token: PropTypes.string.isRequired,\r\n triggerTestUurl: PropTypes.func.isRequired,\r\n};\r\n\r\nURLOptionsSection.defaultProps = {\r\n finalUrlSuffix: undefined,\r\n trackingUrlTemplate: undefined,\r\n urlCustomParameters: undefined,\r\n};\r\n","import { findIndex, filter, isEmpty } from 'underscore';\r\n\r\nexport const DisplayUrlModes = [\r\n 'ManufacturerWebsiteUrl',\r\n 'WebsiteDescription',\r\n];\r\n\r\nexport const WebsiteDescriptionLanguages = [\r\n _TL_('English'),\r\n _TL_('Spanish'),\r\n];\r\n\r\nexport const WebsiteDescriptionOptions = [\r\n {\r\n key: 'PrescriptionTreatmentWebsite_Es',\r\n value: 'Sitio de tratamientos con receta',\r\n },\r\n {\r\n key: 'PrescriptionTreatmentWebsite_En',\r\n value: 'Prescription treatment website',\r\n },\r\n {\r\n key: 'PrescriptionDeviceWebsite_Es',\r\n value: 'Sitio de dispositivos con receta',\r\n },\r\n {\r\n key: 'PrescriptionDeviceWebsite_En',\r\n value: 'Prescription device website',\r\n },\r\n {\r\n key: 'MedicalDeviceWebsite_Es',\r\n value: 'Sitio de dispositivos médicos',\r\n },\r\n {\r\n key: 'MedicalDeviceWebsite_En',\r\n value: 'Medical device website',\r\n },\r\n {\r\n key: 'PreventativeTreatmentWebsite_Es',\r\n value: 'Sitio de tratamientos preventivos',\r\n },\r\n {\r\n key: 'PreventativeTreatmentWebsite_En',\r\n value: 'Preventative treatment website',\r\n },\r\n {\r\n key: 'PrescriptionContraceptionWebsite_Es',\r\n value: 'Sitio de anticonceptivos con receta',\r\n },\r\n {\r\n key: 'PrescriptionContraceptionWebsite_En',\r\n value: 'Prescription contraception website',\r\n },\r\n {\r\n key: 'PrescriptionVaccineWebsite_Es',\r\n value: 'Sitio de vacunas con receta',\r\n },\r\n {\r\n key: 'PrescriptionVaccineWebsite_En',\r\n value: 'Prescription vaccine website',\r\n },\r\n];\r\n\r\nexport const getWebsiteDescriptionList = (key) => {\r\n const index = findIndex(WebsiteDescriptionOptions, option => option.key === key);\r\n const mod = (index + 1) % 2;\r\n return {\r\n language: WebsiteDescriptionLanguages[mod],\r\n websiteDescriptions: filter(WebsiteDescriptionOptions, (option, idx) => (idx % 2) !== mod),\r\n };\r\n};\r\n\r\nexport const getWebsiteDescriptionInAnotherLanguage = (key, langIndex = 0) => {\r\n let index = findIndex(WebsiteDescriptionOptions, option => option.key === key);\r\n if (index === -1) {\r\n index = langIndex;\r\n }\r\n return WebsiteDescriptionOptions[index + ((-1) ** (index % 2))].key;\r\n};\r\n\r\nexport const isWebsiteDescriptionUnspecified = key => isEmpty(key) || key === 'Unspecified';\r\n","export const getStyles = () => ({\r\n vanityUrlOption: {\r\n '& .form-group-subset': {\r\n paddingLeft: '28px',\r\n\r\n '& .form-control-static': {\r\n marginTop: '0px',\r\n minHeight: 'unset',\r\n },\r\n },\r\n\r\n '& .website-description-options': {\r\n display: 'inline-flex',\r\n flexDirection: 'row',\r\n gap: '16px',\r\n\r\n '& select.form-control': {\r\n width: 'fit-content',\r\n paddingRight: '100px',\r\n },\r\n },\r\n\r\n '& .website-description-info': {\r\n margin: '8px 0 12px 0',\r\n },\r\n\r\n '& .language-disclaimer': {\r\n marginTop: '12px',\r\n },\r\n },\r\n});\r\n","/* eslint-disable jsx-a11y/anchor-is-valid, jsx-a11y/label-has-for */\r\nimport { map, result } from 'underscore';\r\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport { MessageBar, MessageBarType } from '@fluentui/react';\r\nimport { registerIcons } from '@fluentui/style-utilities';\r\nimport { Glyphicon } from '@bingads-webui-react/primitive-unthemed';\r\nimport { HelpPopup } from '@bingads-webui-react/help-popup';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport {\r\n DisplayUrlModes,\r\n WebsiteDescriptionLanguages,\r\n getWebsiteDescriptionList,\r\n getWebsiteDescriptionInAnotherLanguage,\r\n isWebsiteDescriptionUnspecified,\r\n} from './options';\r\nimport { getStyles } from './styles';\r\n\r\nregisterIcons({\r\n icons: {\r\n Insights: ,\r\n },\r\n});\r\n\r\nconst messageBarStyle = {\r\n root: {\r\n background: '#EFF6FC',\r\n '& span.iconba': {\r\n fontSize: '16px',\r\n color: '#0078D4',\r\n verticalAlign: 'top',\r\n },\r\n },\r\n};\r\n\r\nexport const VanityUrlOption = ({\r\n i18n,\r\n vanityUrlSettings,\r\n onChange,\r\n}) => {\r\n const classes = useDefaultStyles(getStyles);\r\n\r\n const [displayUrlMode, setDisplayUrlMode] = useState(result(vanityUrlSettings, 'DisplayUrlMode', DisplayUrlModes[0]));\r\n const [websiteDescription, setWebsiteDescription] = useState(result(vanityUrlSettings, 'WebsiteDescription', 'Unspecified'));\r\n\r\n const languages = useMemo(() => map(WebsiteDescriptionLanguages, language => ({ key: language, value: i18n.getString(language) })), [i18n]);\r\n const { language, websiteDescriptions } = useMemo(() => getWebsiteDescriptionList(websiteDescription), [websiteDescription]);\r\n\r\n const onDisplayUrlModeChange = useCallback((e) => {\r\n setDisplayUrlMode(e.target.value);\r\n if (e.target.value === DisplayUrlModes[1] && isWebsiteDescriptionUnspecified(websiteDescription)) {\r\n setWebsiteDescription(websiteDescriptions[0].key);\r\n }\r\n }, [websiteDescription, websiteDescriptions]);\r\n\r\n const onLanguageChange = useCallback((e) => {\r\n setWebsiteDescription(getWebsiteDescriptionInAnotherLanguage(websiteDescription, e.target.selectedIndex));\r\n }, [websiteDescription]);\r\n\r\n const onWebsiteDescriptionChange = useCallback((e) => {\r\n setWebsiteDescription(e.target.value);\r\n }, []);\r\n\r\n useEffect(() => {\r\n onChange({\r\n DisplayUrlMode: displayUrlMode,\r\n WebsiteDescription: displayUrlMode === DisplayUrlModes[0] ? 'Unspecified' : websiteDescription,\r\n });\r\n }, [displayUrlMode, onChange, websiteDescription]);\r\n\r\n return (\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
{i18n.getString(_TL_('The Final URL will appear in your ad.'))}
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
{i18n.getString(_TL_('A description of your website will appear in your ad instead of a URL. When potential customers click the website description, they will be taken to your Final URL. Choose a website description from the dropdown menu.'))}
\r\n \r\n {i18n.getString(_TL_('Recommended for pharmaceutical ads.'))}\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nVanityUrlOption.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n vanityUrlSettings: PropTypes.shape({\r\n DisplayUrlMode: PropTypes.oneOf(DisplayUrlModes),\r\n WebsiteDescription: PropTypes.string,\r\n }),\r\n onChange: PropTypes.func.isRequired,\r\n};\r\n\r\nVanityUrlOption.defaultProps = {\r\n vanityUrlSettings: {\r\n DisplayUrlMode: DisplayUrlModes[0],\r\n WebsiteDescription: 'Unspecified',\r\n },\r\n};\r\n","import { makeStyles, shorthands, tokens } from '@fluentui/react-components';\r\n\r\nexport const useStyles = makeStyles({\r\n container: {\r\n height: '44px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n ...shorthands.padding(0, tokens.spacingHorizontalL),\r\n },\r\n previewButton: {\r\n marginLeft: tokens.spacingHorizontalL,\r\n whiteSpace: 'nowrap',\r\n },\r\n saveButton: {\r\n marginLeft: tokens.spacingHorizontalL,\r\n whiteSpace: 'nowrap',\r\n },\r\n aspectRatio: {\r\n display: 'flex',\r\n marginLeft: tokens.spacingHorizontalL,\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n height: '100%',\r\n },\r\n divider: {\r\n marginLeft: tokens.spacingHorizontalL,\r\n },\r\n});\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\r\nimport { createPortal } from 'react-dom';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n Button,\r\n Divider,\r\n mergeClasses,\r\n} from '@fluentui/react-components';\r\nimport { VideoRegular } from '@fluentui/react-icons';\r\n\r\nimport { useStyles } from './style';\r\n\r\n// TODO -Move to common place, let's not import ads-studio component here.\r\nconst getClosestAspectRatio = (width, height) => {\r\n const inputRatio = width / height;\r\n const ratios = {\r\n '16:9': (16 / 9),\r\n '9:16': (9 / 16),\r\n '4:3': (4 / 3),\r\n '1:1': (1 / 1),\r\n '9:21': (9 / 21),\r\n '21:9': (21 / 9),\r\n '3:4': (3 / 4),\r\n };\r\n let closestRatio = null;\r\n let closestDiff = Math.abs(inputRatio - closestRatio);\r\n\r\n /* eslint-disable no-restricted-syntax */\r\n for (const [label, ratio] of Object.entries(ratios)) {\r\n const diff = Math.abs(inputRatio - ratio);\r\n if (diff < closestDiff) {\r\n closestDiff = diff;\r\n closestRatio = label;\r\n }\r\n }\r\n\r\n return closestRatio;\r\n};\r\n\r\nexport const VideoTemplateSummaryBarControl = ({\r\n i18n,\r\n setShowPreviewVideoModal,\r\n onSaveVideo,\r\n metadata,\r\n activity,\r\n}) => {\r\n const classes = useStyles();\r\n const [summaryBar, setSummaryBar] = useState(null);\r\n\r\n const aspectRatio = useMemo(() => {\r\n const template = metadata && metadata.template;\r\n if (template && template.width > 0 && template.height > 0) {\r\n return getClosestAspectRatio(template.width, template.height);\r\n }\r\n return null;\r\n }, [metadata]);\r\n\r\n\r\n /* istanbul ignore next */\r\n const preview = useCallback(() => {\r\n setShowPreviewVideoModal(true);\r\n if (activity && activity.signal) {\r\n const message = `[VideoAdsEditor] - Edit Video - Preview - TemplateId:${metadata && metadata.template && metadata.template.templateId}, AdStudio:true`;\r\n activity.signal(message);\r\n }\r\n }, [setShowPreviewVideoModal, activity, metadata]);\r\n\r\n /* istanbul ignore next */\r\n const publish = useCallback(() => {\r\n onSaveVideo();\r\n }, [onSaveVideo]);\r\n\r\n /* istanbul ignore next */\r\n const customizedContent = useMemo(() => (\r\n
\r\n {aspectRatio && (\r\n <>\r\n
\r\n {aspectRatio}\r\n
\r\n \r\n \r\n )\r\n }\r\n }\r\n appearance=\"secondary\"\r\n className={mergeClasses('preview-button', classes.previewButton)}\r\n disabled={false}\r\n onClick={preview}\r\n >\r\n {i18n.getString(_TL_('Preview video'))}\r\n \r\n \r\n {i18n.getString(_TL_('Save to Ads Studio'))}\r\n \r\n\r\n
\r\n ), [classes, i18n, preview, publish, aspectRatio]);\r\n\r\n /* istanbul ignore next */\r\n useEffect(() => {\r\n const timer = setInterval(() => {\r\n try {\r\n const summaryBarCustomizeEle = document.getElementById('ad-studio-summary-bar-customize-container');\r\n if (summaryBarCustomizeEle) {\r\n setSummaryBar(summaryBarCustomizeEle);\r\n clearInterval(timer);\r\n }\r\n } catch (error) {\r\n clearInterval(timer);\r\n }\r\n }, 500);\r\n return () => clearInterval(timer);\r\n }, []);\r\n\r\n return (\r\n summaryBar ? createPortal(\r\n customizedContent,\r\n summaryBar\r\n ) : null\r\n );\r\n};\r\n\r\nVideoTemplateSummaryBarControl.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n setShowPreviewVideoModal: PropTypes.func.isRequired,\r\n logger: PropTypes.shape({\r\n log: PropTypes.func,\r\n }).isRequired,\r\n metadata: PropTypes.shape({}).isRequired,\r\n};\r\n","// copied from private\\ads-studio\\packages\\ads-studio-app-components\\src\\page-components\\edit-image-page-component\\style.js\r\n// edit as necessary\r\nimport { makeStyles, shorthands, tokens } from '@fluentui/react-components';\r\n\r\nexport const useStyles = makeStyles({\r\n videoEditor: {\r\n width: '1280px',\r\n top: '60px',\r\n overFlowY: 'hidden',\r\n '& .fui-DrawerBody': {\r\n paddingLeft: '0px',\r\n paddingRight: '0px',\r\n },\r\n },\r\n editVideoPage: {\r\n display: 'flex',\r\n backgroundColor: '#F0F0F0',\r\n },\r\n navigationView: {\r\n width: '85px',\r\n borderWidth: '2px',\r\n },\r\n actionsWrapperContent: {\r\n marginLeft: '5px',\r\n marginRight: '5px',\r\n height: '100%',\r\n overflowY: 'auto',\r\n overflowX: 'hidden',\r\n },\r\n actionsWrapper: {\r\n minWidth: '300px',\r\n maxWidth: '300px',\r\n height: 'auto',\r\n paddingBottom: '110px',\r\n marginTop: '10px',\r\n marginBottom: '12px',\r\n boxShadow: '0px 0px 2px 0px #0000001F',\r\n borderRadius: '10px',\r\n backgroundColor: '#FFFFFF',\r\n ...shorthands.overflow('hidden'),\r\n position: 'relative',\r\n },\r\n previewContainer: {\r\n height: '100%',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n flexGrow: 1,\r\n alignItems: 'center',\r\n overflowY: 'auto',\r\n position: 'relative',\r\n ...shorthands.padding(tokens.spacingHorizontalM),\r\n },\r\n scenePreview: {\r\n width: '100%',\r\n flexGrow: 1,\r\n },\r\n storyBoardContainer: {\r\n paddingTop: '10px',\r\n width: '100%',\r\n height: '270px',\r\n },\r\n leftPanelTop: {\r\n paddingTop: '10px',\r\n },\r\n bottom: {\r\n '& .apply-button': {\r\n marginRight: '8px',\r\n },\r\n '& .cancel-button': {\r\n marginRight: '8px',\r\n },\r\n },\r\n containerWrapper: {\r\n height: '100%',\r\n paddingLeft: '0px',\r\n paddingRight: '0px',\r\n },\r\n actionBarFooter: {\r\n position: 'absolute',\r\n bottom: 0,\r\n width: '100%',\r\n },\r\n generateButtonContainer: {\r\n width: '100%',\r\n display: 'flex',\r\n },\r\n generateButton: {\r\n marginTop: '10px',\r\n marginBottom: '10px',\r\n marginRight: '20px',\r\n marginLeft: '20px',\r\n width: '100%',\r\n flexGrow: '1',\r\n },\r\n topNavigationParent: {\r\n marginLeft: '10px',\r\n marginRight: '10px',\r\n paddingTop: '10px',\r\n paddingBottom: '10px',\r\n paddingLeft: '5px',\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n fontWeight: 'bold',\r\n },\r\n topNavigationLeft: {\r\n textAlign: 'left',\r\n alignContent: 'center',\r\n },\r\n topNavigationRight: {\r\n textAlign: 'right',\r\n },\r\n});\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nexport const useStyles = makeStyles({\r\n editVideoPageNavigation: {\r\n ...shorthands.padding('8px'),\r\n },\r\n tabList: {\r\n display: 'flex',\r\n ...shorthands.gap('12px'),\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n\r\n '& >div': {\r\n width: '100%',\r\n },\r\n },\r\n tabItemWrapper: {\r\n '&.selected': {\r\n '& .fui-Tab': {\r\n backgroundColor: 'rgba(246, 246, 246, 0.50)',\r\n ...shorthands.borderRadius('3px'),\r\n\r\n '::after': {\r\n color: '#005FB8',\r\n },\r\n\r\n '& .fui-Tab__icon, .fui-Tab__content': {\r\n color: '#005FB8',\r\n },\r\n },\r\n },\r\n },\r\n tabItem: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n width: '100%',\r\n\r\n '::after': {\r\n height: '18px',\r\n alignSelf: 'center',\r\n },\r\n\r\n '&:hover::before': {\r\n height: '18px',\r\n alignSelf: 'center',\r\n },\r\n\r\n '& .fui-Tab__content': {\r\n fontSize: '12px',\r\n '-webkit-box-orient': 'vertical',\r\n ...shorthands.overflow('hidden'),\r\n display: '-webkit-box',\r\n wordBreak: 'break-word',\r\n width: '61px',\r\n },\r\n\r\n '& .fui-Tab__content--reserved-space': {\r\n display: 'none',\r\n },\r\n },\r\n});\r\n","import React, { useCallback, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { TabList, Tab, mergeClasses } from '@fluentui/react-components';\r\nimport { AddSquareRegular, AddSquareFilled, HeadphonesSoundWaveRegular, HeadphonesSoundWaveFilled, DesignIdeasRegular, DesignIdeasFilled } from '@fluentui/react-icons';\r\n\r\nimport { useStyles } from './style';\r\n\r\nconst AssetsId = 'edit-video-assets-view';\r\nconst StyleId = 'edit-video-style-view';\r\nconst AudioId = 'edit-video-audio-view';\r\n\r\nexport const EditVideoNavigationView = ({\r\n i18n,\r\n currentView,\r\n setCurrentView,\r\n}) => {\r\n const classes = useStyles();\r\n\r\n const selectItem = useCallback((id) => {\r\n setCurrentView(id);\r\n }, [setCurrentView]);\r\n\r\n const isSelected = useCallback(id => currentView === id, [currentView]);\r\n\r\n const items = useMemo(() => ([\r\n {\r\n id: AssetsId,\r\n name: _TL_('Assets'),\r\n onClick: () => selectItem(AssetsId),\r\n icon: () => (isSelected(AssetsId) ? : ),\r\n isSelected: currentView === AssetsId,\r\n },\r\n {\r\n id: StyleId,\r\n name: _TL_('Style'),\r\n onClick: () => selectItem(StyleId),\r\n icon: () => (isSelected(StyleId) ? : ),\r\n isSelected: currentView === StyleId,\r\n },\r\n {\r\n id: AudioId,\r\n name: _TL_('Audio'),\r\n onClick: () => selectItem(AudioId),\r\n icon: () => (isSelected(AudioId) ? : ),\r\n isSelected: currentView === AudioId,\r\n },\r\n ]), [currentView, isSelected, selectItem]);\r\n\r\n const tabItem = useCallback(item => (\r\n \r\n {i18n.getString(item.name)}\r\n \r\n ), [i18n]);\r\n\r\n return (\r\n
\r\n \r\n {items.map(item => (\r\n
\r\n
\r\n {tabItem(item)}\r\n
\r\n
\r\n ))}\r\n
\r\n
\r\n );\r\n};\r\n\r\nEditVideoNavigationView.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n currentView: PropTypes.string,\r\n setCurrentView: PropTypes.func.isRequired,\r\n};\r\n\r\nEditVideoNavigationView.defaultProps = {\r\n currentView: AssetsId,\r\n};\r\n","import { makeStyles, tokens } from '@fluentui/react-components';\r\n\r\nexport const useStyles = makeStyles({\r\n topNavigation: {\r\n paddingLeft: '10px',\r\n paddingRight: '10px',\r\n paddingTop: '10px',\r\n paddingBottom: '10px',\r\n },\r\n topNavigationParent: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n },\r\n topNavigationLeft: {\r\n textAlign: 'left',\r\n },\r\n topNavigationRight: {\r\n textAlign: 'right',\r\n },\r\n divider: {\r\n marginBottom: tokens.spacingVerticalL,\r\n },\r\n recommendedImage: {\r\n marginBottom: tokens.spacingVerticalL,\r\n },\r\n});\r\n","import React, { useRef, useEffect } from 'react';\r\nimport { noop } from 'underscore';\r\nimport PropTypes, { func } from 'prop-types';\r\nimport { mergeClasses } from '@fluentui/react-components';\r\nimport { TextAssetCollectionWithRecommendations } from '@bingads-webui-campaign-react/pmax-text-input';\r\n\r\nimport { getShortHeadlineAssetCollectionConfig } from '../../configs';\r\n\r\nexport const ShortHeadlineAssetCollection = React.memo((props) => {\r\n const {\r\n i18n,\r\n className,\r\n isOptional,\r\n placeholder,\r\n isMultipleOptions,\r\n onFocusTextAsset,\r\n onDeleteTextAsset,\r\n onApplyRecommendation,\r\n enableCopilotRecommendations,\r\n setAddNewShortHeadlinesCallback,\r\n isBusinessName,\r\n } = props;\r\n const addNewShortHeadlineCallback = useRef(noop);\r\n const shortHeadlineAssetCollectionConfig = getShortHeadlineAssetCollectionConfig(i18n, isBusinessName);\r\n\r\n useEffect(() => {\r\n if (setAddNewShortHeadlinesCallback) {\r\n setAddNewShortHeadlinesCallback(() => (recommendations, replaceExistingAssets) => {\r\n addNewShortHeadlineCallback.current(\r\n recommendations,\r\n replaceExistingAssets\r\n );\r\n });\r\n }\r\n }, [setAddNewShortHeadlinesCallback]);\r\n\r\n return (\r\n
\r\n {\r\n addNewShortHeadlineCallback.current = callback;\r\n }}\r\n />\r\n
\r\n );\r\n});\r\n\r\nShortHeadlineAssetCollection.propTypes = {\r\n isOptional: PropTypes.bool,\r\n className: PropTypes.string,\r\n placeholder: PropTypes.string,\r\n enableCustomizer: PropTypes.bool,\r\n isMultipleOptions: PropTypes.bool,\r\n onResetTextAssets: PropTypes.func,\r\n i18n: PropTypes.shape({ getString: func, getLocale: func }).isRequired,\r\n enableCopilotRecommendations: PropTypes.bool,\r\n onFocusTextAsset: PropTypes.func,\r\n onDeleteTextAsset: PropTypes.func,\r\n onApplyRecommendation: PropTypes.func,\r\n onToggleTextFormatting: PropTypes.func,\r\n setAddNewShortHeadlinesCallback: PropTypes.func,\r\n isBusinessName: PropTypes.bool.isRequired,\r\n};\r\n\r\nShortHeadlineAssetCollection.defaultProps = {\r\n className: '',\r\n placeholder: '',\r\n isOptional: false,\r\n enableCustomizer: false,\r\n isMultipleOptions: false,\r\n enableCopilotRecommendations: true,\r\n setAddNewShortHeadlinesCallback: null,\r\n onFocusTextAsset: noop,\r\n onDeleteTextAsset: noop,\r\n onApplyRecommendation: noop,\r\n onToggleTextFormatting: noop,\r\n onResetTextAssets: noop,\r\n};\r\n","import { getTextAssetCollectionConfig } from '@bingads-webui-campaign-react/pmax-text-input';\r\n\r\nconst dynamicCollectionConfig = isBusinessName => ({\r\n headlines: {\r\n labelText: isBusinessName ? _TL_('Business name') : _TL_('Text'),\r\n placeholderText: _TL_('Enter your text'),\r\n fieldName: 'short-headline',\r\n singleAssetValidationPropsField: 'Headline',\r\n validationPropsField: 'Headlines',\r\n addButtonText: _TL_('Add text'),\r\n copilotButtonLabel: _TL_('Get recommendations for your text'),\r\n deleteButtonLabel: _TL_('Remove text'),\r\n minCollectionSize: 1,\r\n maxCollectionSize: 1,\r\n errorMessage: isBusinessName ? _TL_('Business name is required') : _TL_('Text is required'),\r\n helpPopupTopic: 'pop_BA_VideoTemplates_Text',\r\n helpPopupAriaLabel: _TL_('Click to learn more about text'),\r\n inlineRecommendationsTitle: _TL_('Recommended texts'),\r\n inlineRecommendationsHelpTopicKey:\r\n 'pop_BA_Recommendations_Pmax_Shortheadlines',\r\n inlineRecommendationsHelpTopicAriaLabel: _TL_('Click to learn more about text recommendations'),\r\n inlineRecommendationsDisabledItemTooltip: _TL_(\"You've reached the maximum number of texts. Please remove one text if you'd like to add this recommended text.\"),\r\n duplicateErrorMessage: _TL_('Duplicate texts are not allowed'),\r\n },\r\n});\r\n\r\nexport const getShortHeadlineAssetCollectionConfig = (i18n, isBusinessName) => getTextAssetCollectionConfig('headlines', i18n, dynamicCollectionConfig(isBusinessName));\r\n\r\n","import _ from 'underscore';\r\nimport Promise from 'bluebird';\r\n\r\nexport const ViewName = {\r\n AssetsView: 'edit-video-assets-view',\r\n StyleView: 'edit-video-style-view',\r\n AudioView: 'edit-video-audio-view',\r\n};\r\n\r\nexport const ViewTitle = {\r\n [ViewName.StyleView]: 'Video style guide',\r\n [ViewName.AudioView]: 'Audio',\r\n};\r\n\r\nexport const ColorTypeEnum = {\r\n BackgroundColor: 'backgroundColor',\r\n TextColor: 'textColor',\r\n};\r\n\r\nexport const shortHeadlineType = {\r\n TextOverlay: 'textOverlay',\r\n BusinessName: 'businessName',\r\n}\r\n\r\nconst keyframeTemplateList = [\r\n {\r\n TemplateId: '00000001-0000-0000-0000-000000000000',\r\n TemplateName: 'Template 8 Scene 1',\r\n Version: '1.0',\r\n Width: 1280,\r\n Height: 720,\r\n TemplateFileName: 'template8_keyframe1.html',\r\n Image: [\r\n {\r\n AspectRatio: '16:9',\r\n MinHeight: 360,\r\n },\r\n ],\r\n Text: [\r\n {\r\n MaxLengthInChar: 20,\r\n },\r\n {\r\n MaxLengthInChar: 36,\r\n },\r\n ],\r\n },\r\n {\r\n TemplateId: '00000001-0000-0000-0000-000000000001',\r\n TemplateName: 'Template 8 Scene 2',\r\n Version: '1.0',\r\n Width: 1280,\r\n Height: 720,\r\n TemplateFileName: 'template8_keyframe2.html',\r\n Image: [\r\n {\r\n AspectRatio: '16:9',\r\n MinHeight: 360,\r\n },\r\n ],\r\n Text: [\r\n {\r\n MaxLengthInChar: 20,\r\n },\r\n {\r\n MaxLengthInChar: 36,\r\n },\r\n ],\r\n },\r\n {\r\n TemplateId: '00000001-0000-0000-0000-000000000002',\r\n TemplateName: 'Template 8 Scene 3',\r\n Version: '1.0',\r\n Width: 1280,\r\n Height: 720,\r\n TemplateFileName: 'template8_keyframe3.html',\r\n Image: [\r\n {\r\n AspectRatio: '16:9',\r\n MinHeight: 360,\r\n },\r\n ],\r\n Text: [\r\n {\r\n MaxLengthInChar: 25,\r\n },\r\n {\r\n MaxLengthInChar: 40,\r\n },\r\n ],\r\n },\r\n];\r\n\r\nconst getActiveTemplate = templateId => _.findWhere(keyframeTemplateList, { TemplateId: templateId });\r\n\r\nexport const getTextSizeLimitation = (templateId) => {\r\n const activeTemplate = getActiveTemplate(templateId);\r\n if (activeTemplate && activeTemplate.Text) {\r\n return activeTemplate.Text.map(text => text.MaxLengthInChar);\r\n }\r\n return [];\r\n};\r\n\r\nexport const getImageSizeLimitation = (templateId) => {\r\n const activeTemplate = getActiveTemplate(templateId);\r\n if (activeTemplate && activeTemplate.Image) {\r\n return activeTemplate.Image.map((image) => {\r\n const minHeight = image.MinHeight;\r\n const aspectRatio = image.AspectRatio.split(':');\r\n const minWidth = minHeight * (aspectRatio[0] / aspectRatio[1]);\r\n\r\n return [minWidth, minHeight];\r\n });\r\n }\r\n return [];\r\n};\r\n\r\nexport const MaxBusinessNameLength = 25;\r\n\r\nexport const loadImagePromise = (src, mock) => {\r\n const image = new Image();\r\n image.src = src;\r\n return new Promise((resolve) => {\r\n image.onload = () => {\r\n // if the actual image is 404, it will return a placeholder image which width and height are 80\r\n // todo: investigate if there is a better way to handle this\r\n if (image.width === 80 && image.height === 80 && !mock) {\r\n resolve('failed');\r\n } else {\r\n resolve('success');\r\n }\r\n };\r\n image.onerror = () => {\r\n if (!mock) {\r\n resolve('failed');\r\n } else {\r\n resolve('success');\r\n }\r\n };\r\n });\r\n};\r\n","import React, { useMemo } from 'react';\r\nimport PropTypes, { func } from 'prop-types';\r\nimport {\r\n makeStyles,\r\n mergeClasses,\r\n shorthands,\r\n tokens,\r\n} from '@fluentui/react-components';\r\n\r\nimport {\r\n ShortHeadlineAssetCollection,\r\n} from './index';\r\nimport { shortHeadlineType } from '../../../util';\r\n\r\nconst assetName = {\r\n shortHeadline: 'ShortHeadline',\r\n};\r\n\r\nconst useTextAssetCollectionStyles = makeStyles({\r\n root: {\r\n maxWidth: '432px',\r\n },\r\n textAssetStyle: {\r\n '& .text-assets-collection-container': {\r\n width: '100%',\r\n },\r\n },\r\n textDivider: {\r\n ...shorthands.margin(tokens.spacingVerticalL, 0),\r\n },\r\n hide: {\r\n display: 'none',\r\n },\r\n});\r\n\r\nconst TextAssetCollectionWithCoPilotInternal = (props) => {\r\n const {\r\n i18n,\r\n disableCopilot,\r\n onResetTextAssets,\r\n shortHeadlineValidations,\r\n fetchRecommendationAssets,\r\n setAddNewShortHeadlinesCallback,\r\n onChangeTextAssetFormattingSection,\r\n cancelFetchRecommendationAssetsJob,\r\n } = props;\r\n\r\n const classes = useTextAssetCollectionStyles();\r\n\r\n const shortHeadlineAssetCollection = useMemo(\r\n () => (\r\n \r\n onChangeTextAssetFormattingSection(assetName.shortHeadline)\r\n }\r\n />\r\n ),\r\n [\r\n i18n,\r\n classes.hide,\r\n disableCopilot,\r\n onResetTextAssets,\r\n shortHeadlineValidations,\r\n fetchRecommendationAssets,\r\n setAddNewShortHeadlinesCallback,\r\n onChangeTextAssetFormattingSection,\r\n cancelFetchRecommendationAssetsJob,\r\n ]\r\n );\r\n\r\n return (\r\n \r\n \r\n {shortHeadlineAssetCollection}\r\n \r\n \r\n );\r\n};\r\n\r\nTextAssetCollectionWithCoPilotInternal.propTypes = {\r\n i18n: PropTypes.shape({ getString: func, getLocale: func }).isRequired,\r\n fetchRecommendationAssets: PropTypes.func.isRequired,\r\n shortHeadlineValidations: PropTypes.shape({\r\n display: PropTypes.bool,\r\n placeholder: PropTypes.string,\r\n minLength: PropTypes.number,\r\n maxLength: PropTypes.number,\r\n isMultipleOptions: PropTypes.bool,\r\n hint: PropTypes.string,\r\n }),\r\n onResetTextAssets: PropTypes.func.isRequired,\r\n disableCopilot: PropTypes.bool.isRequired,\r\n cancelFetchRecommendationAssetsJob: PropTypes.func.isRequired,\r\n setAddNewShortHeadlinesCallback: PropTypes.func.isRequired,\r\n onChangeTextAssetFormattingSection: PropTypes.func.isRequired,\r\n};\r\n\r\nTextAssetCollectionWithCoPilotInternal.defaultProps = {\r\n shortHeadlineValidations: {\r\n placeholder: '',\r\n minLength: 0,\r\n maxLength: 30,\r\n display: true,\r\n isMultipleOptions: false,\r\n hint: shortHeadlineType.BusinessName,\r\n },\r\n};\r\n\r\nexport const TextAssetCollectionWithCoPilot = TextAssetCollectionWithCoPilotInternal;\r\n","import { makeStyles } from '@fluentui/react-components';\r\nimport { helpbuttonStyle } from '@bingads-webui-campaign-react/common-styles';\r\n\r\nexport const useDefaultContainerStyles = makeStyles({\r\n container: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n rowGap: '16px',\r\n },\r\n});\r\n\r\nexport const getStyles = (_, core) => ({\r\n collapseContainer: {\r\n '& .helpbutton': {\r\n ...helpbuttonStyle(core)['.helpbutton'],\r\n marginBottom: '4px',\r\n display: 'inline-block',\r\n },\r\n '& .helpbutton::before': helpbuttonStyle(core)['.helpbutton::before'],\r\n },\r\n});\r\n","/* istanbul ignore file */\r\nimport React, { useMemo } from 'react';\r\nimport PropTypes, { func } from 'prop-types';\r\nimport { mergeClasses } from '@fluentui/react-components';\r\nimport { ValidationGroup } from '@bingads-webui-react/validation';\r\nimport { AssetGroup } from '@bingads-webui/campaign-odata-schemas';\r\nimport { CopilotRepositoryProvider } from '@bingads-webui/inline-copilot';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\n\r\nimport { getStyles, useDefaultContainerStyles } from './styles';\r\nimport { TextAssetCollectionWithCoPilot } from './text-asset-collection-with-copilot';\r\n\r\nconst TextAssetCollectionWithRecommendationsInternal = (props) => {\r\n const {\r\n url,\r\n i18n,\r\n campaignId,\r\n serverContext,\r\n shortHeadline,\r\n onChangeTexts,\r\n shortHeadlineValidations,\r\n } = props;\r\n const classes = useDefaultContainerStyles();\r\n const helpButtonStyles = useDefaultStyles(getStyles);\r\n const { CurrentLocale: locale } = serverContext;\r\n\r\n\r\n const updatedHeadlineSchema = useMemo(() => Object.keys(AssetGroup.properties.Headlines.schema.properties).reduce((acc, key) => {\r\n const value = AssetGroup.properties.Headlines.schema.properties[key];\r\n if (key.includes('Headline')) {\r\n const updatedValue = {\r\n ...value,\r\n minLength: shortHeadlineValidations.minLength || 0,\r\n maxLength: shortHeadlineValidations.maxLength,\r\n };\r\n return {\r\n ...acc,\r\n [key]: updatedValue,\r\n };\r\n }\r\n return {\r\n ...acc,\r\n [key]: value,\r\n };\r\n }, {}), [shortHeadlineValidations.maxLength, shortHeadlineValidations.minLength]);\r\n\r\n const updatedAssetGroup = useMemo(\r\n () => ({\r\n ...AssetGroup,\r\n properties: {\r\n ...AssetGroup.properties,\r\n Headline: {\r\n ...AssetGroup.properties.Headline,\r\n maxLength: shortHeadlineValidations.maxLength,\r\n },\r\n Headlines: {\r\n ...AssetGroup.properties.Headlines,\r\n schema: {\r\n ...AssetGroup.properties.Headlines.schema,\r\n properties: {\r\n ...AssetGroup.properties.Headlines.schema.properties,\r\n ...updatedHeadlineSchema,\r\n },\r\n },\r\n },\r\n },\r\n }),\r\n [\r\n shortHeadlineValidations.maxLength,\r\n updatedHeadlineSchema,\r\n ]\r\n );\r\n\r\n const handleValidate = ({\r\n data,\r\n isDirty,\r\n isValid,\r\n messages,\r\n }) => {\r\n const {\r\n Headlines,\r\n IsOptional,\r\n } = data;\r\n const updatedTextAssets = {\r\n isOptional: IsOptional,\r\n isDirty,\r\n isValid,\r\n messages,\r\n };\r\n const newShortHeadline = Headlines ? Headlines.Headline0 || '' : '';\r\n if (!shortHeadlineValidations.isMultipleOptions &&\r\n shortHeadline !== newShortHeadline) {\r\n updatedTextAssets.shortHeadline = newShortHeadline;\r\n }\r\n\r\n onChangeTexts(updatedTextAssets);\r\n };\r\n\r\n const handleReset = (key) => {\r\n const updatedTextAssets = {\r\n ...(key === 'shortHeadline' ? { shortHeadline: '' } : {}),\r\n };\r\n onChangeTexts(updatedTextAssets);\r\n };\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport const TextAssetCollectionWithRecommendations = TextAssetCollectionWithRecommendationsInternal;\r\n\r\nTextAssetCollectionWithRecommendations.propTypes = {\r\n isAudienceAd: PropTypes.bool,\r\n url: PropTypes.string.isRequired,\r\n campaignId: PropTypes.string.isRequired,\r\n shortHeadline: PropTypes.string,\r\n shortHeadlineValidations: PropTypes.shape({\r\n display: PropTypes.bool,\r\n placeholder: PropTypes.string,\r\n minLength: PropTypes.number,\r\n maxLength: PropTypes.number,\r\n isMultipleOptions: PropTypes.bool,\r\n }),\r\n serverContext: PropTypes.shape({\r\n CurrentLocale: PropTypes.string.isRequired,\r\n }).isRequired,\r\n disableCopilot: PropTypes.bool.isRequired,\r\n i18n: PropTypes.shape({ getString: func, getLocale: func }).isRequired,\r\n fetchRecommendationAssets: PropTypes.func.isRequired,\r\n cancelFetchRecommendationAssetsJob: PropTypes.func.isRequired,\r\n onChangeTexts: PropTypes.func.isRequired,\r\n};\r\n\r\nTextAssetCollectionWithRecommendations.defaultProps = {\r\n isAudienceAd: false,\r\n shortHeadline: '',\r\n shortHeadlineValidations: {\r\n placeholder: '',\r\n minLength: 0,\r\n maxLength: 30,\r\n display: true,\r\n isMultipleOptions: false,\r\n },\r\n};\r\n","import React, { useCallback, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { mergeClasses } from '@fluentui/react-components';\r\nimport { TextAssetCollectionWithRecommendations } from './components';\r\nimport { shortHeadlineType } from '../../util';\r\n\r\nexport const SceneWrapperTextAssetCollectionWithRecommendations = ({\r\n scene,\r\n shouldDisplay,\r\n url,\r\n disableCopilot,\r\n i18n,\r\n serverContext,\r\n campaignId,\r\n onTextListUpdate,\r\n}) => {\r\n const getTextAssets = (text, textData, index) => {\r\n let maxLength = 30;\r\n let hint = shortHeadlineType.TextOverlay;\r\n if (textData && textData.length > index) {\r\n maxLength = textData[index].maxLength || 30;\r\n hint = textData[index].hint || shortHeadlineType.TextOverlay;\r\n }\r\n return {\r\n minLength: 0,\r\n maxLength,\r\n isMultipleOptions: false,\r\n display: true,\r\n text: text ? text.slice(0, maxLength) : '',\r\n placeholder: '',\r\n hint,\r\n };\r\n };\r\n const metaData = useMemo(() => {\r\n if (scene && scene.updating) {\r\n return scene.updating;\r\n }\r\n return null;\r\n }, [scene]);\r\n const shortHeadline = useCallback((text, textData, index) => getTextAssets(text, textData, index), []);\r\n const textList = useMemo(() => (metaData && metaData.text) || [], [metaData]);\r\n const textDataList = useMemo(() => (metaData && metaData.textData) || [], [metaData]);\r\n\r\n return (\r\n <>\r\n {\r\n shouldDisplay && textList.length > 0 && textList.map((text, index) => (\r\n \r\n onTextListUpdate(newText, textDataList, index)}\r\n shortHeadline={shortHeadline(text, textDataList, index).text}\r\n shortHeadlineValidations={shortHeadline(text, textDataList, index)}\r\n longHeadlineValidations={{ display: false }}\r\n descriptionValidations={{ display: false }}\r\n hideTextFormatting\r\n />\r\n \r\n ))\r\n }\r\n \r\n );\r\n};\r\n\r\nSceneWrapperTextAssetCollectionWithRecommendations.propTypes = {\r\n scene: PropTypes.shape({\r\n id: PropTypes.string.isRequired,\r\n updating: PropTypes.shape({\r\n textData: PropTypes.arrayOf(PropTypes.shape({\r\n text: PropTypes.string,\r\n maxLength: PropTypes.number,\r\n })),\r\n }),\r\n }).isRequired,\r\n shouldDisplay: PropTypes.bool.isRequired,\r\n url: PropTypes.string.isRequired,\r\n disableCopilot: PropTypes.bool.isRequired,\r\n i18n: PropTypes.shape({ getString: PropTypes.func, getLocale: PropTypes.func }).isRequired,\r\n serverContext: PropTypes.shape({\r\n CurrentLocale: PropTypes.string.isRequired,\r\n }).isRequired,\r\n campaignId: PropTypes.string.isRequired,\r\n onTextListUpdate: PropTypes.func.isRequired,\r\n recommendedAssetsResponse: PropTypes.shape({\r\n RecommendedAssets: PropTypes.shape({}),\r\n Logo: PropTypes.string,\r\n }).isRequired,\r\n};\r\n","import React, { useCallback, useEffect, useState, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { RecommendedImage } from '@bingads-webui-campaign-react/display-recommended-image';\r\nimport { UploadImage } from '@bingads-webui-campaign-react/display-ads-editor';\r\nimport { useImagePicker } from '@bingads-webui-campaign-react/add-image-hooks';\r\nimport { mergeClasses, Divider } from '@fluentui/react-components';\r\nimport { Stack } from '@fluentui/react/lib/Stack';\r\nimport { useStyles } from './style';\r\nimport { SceneWrapperTextAssetCollectionWithRecommendations } from '../../components';\r\n\r\nexport const EditVideoAssetsView = ({\r\n i18n,\r\n aid,\r\n cid,\r\n oDataConfig,\r\n onTextListChange,\r\n onChangeImage,\r\n scenes,\r\n selectedSceneId,\r\n onImageUpdated,\r\n onLogoUpdated,\r\n onChangeLogo,\r\n preferenceService,\r\n serverContext,\r\n perfMarker,\r\n permissions,\r\n recommendedAssets,\r\n isLoadingRecommendedAssets,\r\n brandKit,\r\n isLoadingBrandKit,\r\n finalUrl,\r\n}) => {\r\n const classes = useStyles();\r\n const [textList, setTextList] = useState();\r\n const [assetType, setAssetType] = useState('');\r\n const [assetIndex, setAssetIndex] = useState('');\r\n const {\r\n displayImagePicker,\r\n setDisplayImagePicker,\r\n selectedMediaPanelSource,\r\n setSelectedMediaPanelSource,\r\n } = useImagePicker();\r\n\r\n const currentScene = useMemo(() => scenes[selectedSceneId], [scenes, selectedSceneId]);\r\n\r\n const metaData = useMemo(() => {\r\n if (currentScene && currentScene.updating) {\r\n return ({ ...currentScene.updating, newImages: currentScene.newImages });\r\n }\r\n return null;\r\n }, [currentScene]);\r\n\r\n const currentSceneImages = useMemo(() => ((currentScene && currentScene.newImages && currentScene.newImages.filter(image => image.url)) || []), [currentScene]);\r\n const currentSceneLogos = useMemo(() => ((currentScene && currentScene.newLogos && currentScene.newLogos.filter(logo => logo.url)) || []), [currentScene]);\r\n const hasImages = useMemo(() => currentSceneImages.length, [currentSceneImages]);\r\n const hasLogos = useMemo(() => currentSceneLogos.length, [currentSceneLogos]);\r\n const brandKitImages = useMemo(() => {\r\n if (brandKit && brandKit.images) {\r\n const assets = Array.from(brandKit.images);\r\n return assets.map(image => ({ ...image, fullUrl: image.Url, thumbnailSrc: image.Url }));\r\n }\r\n return [];\r\n }, [brandKit]);\r\n\r\n const recommendedImageList = useMemo(() => {\r\n if (recommendedAssets && recommendedAssets.ImageAssets) {\r\n const assets = Array.from(recommendedAssets.ImageAssets);\r\n const mappedAssets = assets.map(image => ({ ...image, fullUrl: image.Url, thumbnailSrc: image.Url }));\r\n return mappedAssets.concat(brandKitImages);\r\n }\r\n return [];\r\n }, [recommendedAssets, brandKitImages]);\r\n\r\n const recommendedLogoList = useMemo(() => {\r\n let mappedLogos = [];\r\n if (brandKit && brandKit.logos) {\r\n const assets = Array.from(brandKit.logos);\r\n mappedLogos = mappedLogos.concat(assets.map(logo => ({ ...logo, fullUrl: logo.Url, thumbnailSrc: logo.Url })));\r\n }\r\n if (recommendedAssets && recommendedAssets.Logo) {\r\n const assets = Array.isArray(recommendedAssets.Logo) ? recommendedAssets.Logo : [recommendedAssets.Logo];\r\n mappedLogos = mappedLogos.concat(assets.map(logo => ({ fullUrl: logo, thumbnailSrc: logo })));\r\n }\r\n return mappedLogos;\r\n }, [brandKit, recommendedAssets]);\r\n\r\n const onReplacePreview = useCallback((index, ev) => {\r\n const { type } = ev.currentTarget.dataset;\r\n setDisplayImagePicker(true);\r\n setAssetType(type);\r\n setAssetIndex(index);\r\n }, [setDisplayImagePicker]);\r\n\r\n const onEdit = useCallback(() => {\r\n onChangeLogo();\r\n }, [onChangeLogo]);\r\n\r\n const onTextListUpdate = useCallback((newText, textData, index) => {\r\n if (!newText || !newText.shortHeadline) {\r\n return;\r\n }\r\n\r\n let maxLength = 0;\r\n if (textData && textData.length > index) {\r\n // eslint-disable-next-line prefer-destructuring\r\n maxLength = textData[index].maxLength;\r\n }\r\n\r\n const str = maxLength > 0 ? newText.shortHeadline.slice(0, maxLength) : newText.shortHeadline;\r\n const newTextList = [...textList];\r\n newTextList[index] = str;\r\n setTextList(newTextList);\r\n onTextListChange(newTextList);\r\n }, [onTextListChange, textList]);\r\n\r\n const onUpdateImageFromUserAssets = index => (image, imageType) => {\r\n // Asset picker always returns array, but we limit it to 1\r\n const imageSrc = (image.length && image[0]) || {};\r\n if (imageType === 'image') {\r\n const newImageArray = [...currentSceneImages];\r\n // update image, and set url as standard reference over src\r\n newImageArray[index] = { ...imageSrc, url: (imageSrc.src || imageSrc.fullUrl || imageSrc.thumbnailSrc) };\r\n onImageUpdated(newImageArray);\r\n } else if (imageType === 'logo') {\r\n const newLogoArray = [...currentSceneLogos];\r\n newLogoArray[index] = { ...imageSrc, url: (imageSrc.src || imageSrc.fullUrl || imageSrc.thumbnailSrc) };\r\n onLogoUpdated(newLogoArray);\r\n }\r\n };\r\n\r\n const onUpdateImageFromRecommendations = index => (image, imageType) => {\r\n if (imageType === 'image') {\r\n const newImageArray = [...currentSceneImages];\r\n newImageArray[index] = { url: (image.src || image.fullUrl || image.thumbnailSrc) };\r\n onImageUpdated(newImageArray);\r\n } else if (imageType === 'logo') {\r\n const newLogoArray = [...currentSceneLogos];\r\n newLogoArray[index] = { url: (image.src || image.fullUrl || image.thumbnailSrc) };\r\n onLogoUpdated(newLogoArray);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (metaData && metaData.text && metaData.images) {\r\n setTextList(metaData.text);\r\n }\r\n }, [metaData]);\r\n\r\n return (\r\n
\r\n
\r\n
\r\n \r\n {hasLogos && (\r\n <>\r\n \r\n
\r\n {currentSceneLogos.map((logo, index) => (\r\n
\r\n onReplacePreview(index, ev)}\r\n recommendedLoadingText={i18n.getString(_TL_('Loading'))}\r\n title={i18n.getString(_TL_('Logo'))}\r\n helpTopic=\"pop_BA_VideoTemplates_Logo\"\r\n helpLabel=\"Learn more about logos\"\r\n recommendationTitle={i18n.getString(_TL_('Recommended logos'))}\r\n onSelectRecommendedImage={onUpdateImageFromRecommendations(index)}\r\n onAddRecommendedImagefromPanel={onUpdateImageFromRecommendations(index)}\r\n showViewAllInHeader\r\n hideEditPreviewBtn\r\n />\r\n
\r\n ))\r\n }\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n )}\r\n {\r\n hasImages && (\r\n <>\r\n \r\n
\r\n {currentSceneImages.map((sceneImage, index) => (\r\n
\r\n onReplacePreview(index, ev)}\r\n recommendedLoadingText={i18n.getString(_TL_('Loading'))}\r\n title={i18n.getString(_TL_('Images'))}\r\n helpTopic=\"pop_BA_VideoTemplates_Images\"\r\n helpLabel=\"Learn more about images\"\r\n recommendationTitle={i18n.getString(_TL_('Recommended images'))}\r\n onSelectRecommendedImage={onUpdateImageFromRecommendations(index)}\r\n onAddRecommendedImagefromPanel={onUpdateImageFromRecommendations(index)}\r\n showViewAllInHeader\r\n hideEditPreviewBtn\r\n />\r\n
\r\n ))\r\n }\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n )}\r\n \r\n
\r\n {\r\n scenes && scenes.map((scene, idx) => (\r\n \r\n ))\r\n }\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {displayImagePicker && (\r\n \r\n )}\r\n
\r\n );\r\n};\r\n\r\nEditVideoAssetsView.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n aid: PropTypes.string.isRequired,\r\n cid: PropTypes.string.isRequired,\r\n oDataConfig: PropTypes.shape({}).isRequired,\r\n assetLibraryConfig: PropTypes.shape({}).isRequired,\r\n onTextListChange: PropTypes.func.isRequired,\r\n onChangeImage: PropTypes.func.isRequired,\r\n onImageUpdated: PropTypes.func.isRequired,\r\n onLogoUpdated: PropTypes.func.isRequired,\r\n scenes: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n selectedSceneId: PropTypes.number.isRequired,\r\n onChangeLogo: PropTypes.func.isRequired,\r\n preferenceService: PropTypes.shape({}).isRequired,\r\n serverContext: PropTypes.shape({}).isRequired,\r\n perfMarker: PropTypes.shape({}).isRequired,\r\n permissions: PropTypes.shape({}).isRequired,\r\n recommendedAssets: PropTypes.shape({\r\n ImageAssets: PropTypes.arrayOf(PropTypes.shape({\r\n Url: PropTypes.string,\r\n })),\r\n Logo: PropTypes.oneOfType([\r\n PropTypes.string,\r\n PropTypes.arrayOf(PropTypes.string),\r\n ]),\r\n }).isRequired,\r\n isLoadingRecommendedAssets: PropTypes.bool.isRequired,\r\n brandKit: PropTypes.shape({\r\n images: PropTypes.arrayOf(PropTypes.shape({\r\n Url: PropTypes.string,\r\n })),\r\n logos: PropTypes.arrayOf(PropTypes.shape({\r\n Url: PropTypes.string,\r\n })),\r\n }).isRequired,\r\n isLoadingBrandKit: PropTypes.bool.isRequired,\r\n finalUrl: PropTypes.string,\r\n};\r\n\r\nEditVideoAssetsView.defaultProps = {\r\n finalUrl: '',\r\n};\r\n","import { makeStyles, shorthands, tokens } from '@fluentui/react-components';\r\n\r\nexport const useStyles = makeStyles({\r\n styleGuideContainer: {\r\n marginLeft: '10px',\r\n marginRight: '10px',\r\n marginTop: '10px',\r\n marginBottom: '10px',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n },\r\n styleGuideTitle: {\r\n fontWeight: tokens.fontWeightBold,\r\n paddingBottom: '5px',\r\n },\r\n styleColorTitle: {\r\n paddingTop: '5px',\r\n paddingBotton: '5px',\r\n fontWeight: tokens.fontWeightSemibold,\r\n },\r\n colorPalettes: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n ...shorthands.gap(tokens.spacingVerticalM),\r\n ...shorthands.margin(tokens.spacingVerticalM, 0, 0, 0),\r\n },\r\n item: {\r\n height: '55px',\r\n width: '55px',\r\n backgroundColor: tokens.colorNeutralStencil1,\r\n },\r\n textDivider: {\r\n ...shorthands.margin(tokens.spacingVerticalL, 0),\r\n },\r\n containerWrapper: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n marginBottom: tokens.spacingVerticalL,\r\n },\r\n container: {\r\n width: '100%',\r\n ...shorthands.flex(1),\r\n ...shorthands.padding(tokens.spacingVerticalS, 0),\r\n },\r\n header: {\r\n display: 'flex',\r\n columnGap: tokens.spacingHorizontalXS,\r\n alignItems: 'center',\r\n ...shorthands.padding(tokens.spacingVerticalL, tokens.spacingHorizontalL),\r\n },\r\n content: {\r\n ...shorthands.padding(tokens.spacingVerticalL, tokens.spacingHorizontalL),\r\n },\r\n fontSelect: {\r\n minWidth: 'auto',\r\n maxWidth: '100%',\r\n '& > input': {\r\n maxWidth: '120px',\r\n },\r\n },\r\n fontWeightSelect: {\r\n minWidth: 'auto',\r\n maxWidth: '100%',\r\n '& > input': {\r\n maxWidth: '120px',\r\n },\r\n },\r\n fontContainer: {\r\n display: 'grid',\r\n gridTemplateColumns: 'repeat(auto-fit, minmax(172px, 1fr))',\r\n gridGap: tokens.spacingHorizontalS,\r\n },\r\n contentDivider: {\r\n display: 'inline-flex',\r\n marginTop: tokens.spacingVerticalXL,\r\n },\r\n});\r\n\r\nexport const getskeletonStyles = makeStyles({\r\n row: {\r\n display: 'flex',\r\n ...shorthands.gap('8px'),\r\n flexWrap: 'wrap',\r\n },\r\n item: {\r\n height: '55px',\r\n width: '55px',\r\n backgroundColor: tokens.colorNeutralStencil1,\r\n },\r\n});\r\n","import React, { useMemo } from 'react';\r\nimport {\r\n FontsFamilySelector,\r\n FontsWeightSelector,\r\n} from '@bingads-webui-campaign-react/fonts-selector';\r\nimport PropTypes from 'prop-types';\r\nimport { useStyles } from './style';\r\n\r\nconst overrideFontWeights = [\r\n { key: 'Normal', text: _TL_('Normal') },\r\n { key: 'Bold', text: _TL_('Bold') },\r\n];\r\n\r\nexport const FontEditor = ({\r\n i18n,\r\n onChangeFont,\r\n onChangeWeight,\r\n fontsState,\r\n}) => {\r\n const classes = useStyles();\r\n const currentFont = useMemo(() => fontsState && fontsState.updating && fontsState.updating.font, [fontsState]);\r\n const currentWeight = useMemo(() => fontsState && fontsState.updating && fontsState.updating.fontWeight, [fontsState]);\r\n\r\n return (\r\n
\r\n
\r\n
{i18n.getString(_TL_('Font'))}
\r\n \r\n
\r\n
\r\n
{i18n.getString(_TL_('Font weight'))}
\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nFontEditor.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n fontsState: PropTypes.shape({\r\n updating: PropTypes.shape({\r\n font: PropTypes.string,\r\n fontWeight: PropTypes.string,\r\n }),\r\n }).isRequired,\r\n onChangeFont: PropTypes.func.isRequired,\r\n onChangeWeight: PropTypes.func.isRequired,\r\n};\r\n\r\n","import React, { useMemo, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { AdsStudioDisplayColorPicker } from '@bingads-webui-campaign-react/display-ads-editor';\r\nimport { mergeClasses } from '@fluentui/react-components';\r\nimport { useStyles } from './style';\r\nimport { ColorTypeEnum } from '../../util';\r\n\r\nexport const ColorEditor = ({\r\n i18n,\r\n isLoading,\r\n onPalettesUpdated,\r\n brandKit,\r\n paletteData,\r\n palettesState,\r\n}) => {\r\n const classes = useStyles();\r\n const backgroundPalette = useMemo(() => (paletteData && paletteData.length &&\r\n paletteData.filter(color =>\r\n color.Name === ColorTypeEnum.BackgroundColor || color.isBrandKitColor)) || [], [paletteData]);\r\n const textPalette = useMemo(() => (paletteData && paletteData.length &&\r\n paletteData.filter(color =>\r\n color.Name === ColorTypeEnum.TextColor || color.isBrandKitColor)) || [], [paletteData]);\r\n\r\n const selectedColor = useCallback((colorType) => {\r\n const color = palettesState && palettesState.updating && palettesState.updating.find(c => c.Name === colorType);\r\n return color ? color.HexCode : '';\r\n }, [palettesState]);\r\n const maxColors = useMemo(() => (brandKit && brandKit.palettes && brandKit.palettes.length + 1) || 1, [brandKit]);\r\n\r\n const onDeleteColor = useCallback((ev, type) => {\r\n const { colorid } = ev.currentTarget.dataset;\r\n let data = Array.from((paletteData || []));\r\n data = data.filter(color => color.Name !== colorid);\r\n if (data.length > 0 && data[0].HexCode) {\r\n onPalettesUpdated((data[0]).HexCode, type);\r\n }\r\n }, [onPalettesUpdated, paletteData]);\r\n\r\n const onUpdate = colorType => (color, colorObj) => {\r\n onPalettesUpdated(colorObj.str, colorType);\r\n };\r\n\r\n return (\r\n
\r\n
\r\n onDeleteColor(ev, ColorTypeEnum.BackgroundColor)}\r\n helpTopic=\"pop_BA_VideoTemplates_BackgroundColor\"\r\n helpLabel=\"Learn more about background colors\"\r\n />\r\n
\r\n
\r\n onDeleteColor(ev, ColorTypeEnum.TextColor)}\r\n helpTopic=\"pop_BA_VideoTemplates_TextColor\"\r\n helpLabel=\"Learn more about font colors\"\r\n />\r\n
\r\n
\r\n );\r\n};\r\n\r\nColorEditor.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n isLoading: PropTypes.bool,\r\n palettesState: PropTypes.shape({\r\n updating: PropTypes.arrayOf(PropTypes.shape({})),\r\n }).isRequired,\r\n onPalettesUpdated: PropTypes.func.isRequired,\r\n brandKit: PropTypes.shape({\r\n palettes: PropTypes.arrayOf(PropTypes.shape({})),\r\n }).isRequired,\r\n paletteData: PropTypes.arrayOf(PropTypes.shape({\r\n Name: PropTypes.string,\r\n HexCode: PropTypes.string,\r\n isBrandKitColor: PropTypes.bool,\r\n })).isRequired,\r\n};\r\n\r\nColorEditor.defaultProps = {\r\n isLoading: false,\r\n};\r\n\r\n","import React, { useCallback, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { isEmpty } from 'underscore';\r\nimport { Divider, mergeClasses } from '@fluentui/react-components';\r\nimport { FontEditor } from './font-editor';\r\nimport { ColorEditor } from './color-editor';\r\nimport { useStyles } from './style';\r\n\r\n\r\nexport const EditVideoStyleView = ({\r\n i18n,\r\n palettesState,\r\n onPalettesUpdated,\r\n fontsState,\r\n onFontsUpdated,\r\n brandKit,\r\n}) => {\r\n const classes = useStyles();\r\n\r\n const paletteData = useMemo(() => {\r\n let finalPalettes = [];\r\n if (!isEmpty(brandKit)) {\r\n const brandKitPalettes = brandKit.palettes;\r\n const mappedPalettes = brandKitPalettes.map(palette => ({ ...palette, isBrandKitColor: true }));\r\n finalPalettes.push(...mappedPalettes);\r\n palettesState && palettesState.updating && palettesState.updating.forEach((color) => {\r\n if (!brandKit.palettes.some(c => c.HexCode === color.HexCode)) {\r\n finalPalettes.push(color);\r\n }\r\n });\r\n } else {\r\n finalPalettes = palettesState && palettesState.updating ? palettesState.updating : [];\r\n }\r\n return finalPalettes;\r\n }, [palettesState, brandKit]);\r\n\r\n const onChangeFont = useCallback((font) => {\r\n const newState = {\r\n ...fontsState,\r\n updating: { ...fontsState.updating, font },\r\n };\r\n onFontsUpdated(newState);\r\n }, [fontsState, onFontsUpdated]);\r\n\r\n const onChangeWeight = (fontWeight) => {\r\n const newState = {\r\n ...fontsState,\r\n updating: { ...fontsState.updating, fontWeight },\r\n };\r\n onFontsUpdated(newState);\r\n };\r\n\r\n return (\r\n
\r\n
{i18n.getString(_TL_('Edit your video\\'s style '))}
\r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nEditVideoStyleView.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n palettesState: PropTypes.shape({\r\n updating: PropTypes.arrayOf(PropTypes.shape({\r\n Name: PropTypes.string,\r\n Colors: PropTypes.arrayOf(PropTypes.string),\r\n })),\r\n }).isRequired,\r\n onPalettesUpdated: PropTypes.func.isRequired,\r\n fontsState: PropTypes.shape({\r\n updating: PropTypes.shape({\r\n font: PropTypes.string,\r\n fontWeight: PropTypes.string,\r\n }),\r\n }).isRequired,\r\n onFontsUpdated: PropTypes.func.isRequired,\r\n brandKit: PropTypes.shape({\r\n palettes: PropTypes.arrayOf(PropTypes.shape({\r\n Name: PropTypes.string,\r\n Colors: PropTypes.arrayOf(PropTypes.string),\r\n })),\r\n }).isRequired,\r\n};\r\n\r\nEditVideoStyleView.defaultProps = {\r\n};\r\n","import { makeStyles } from '@fluentui/react-components';\r\n\r\nexport const useStyles = makeStyles({\r\n audioGuideContainer: {\r\n marginLeft: '10px',\r\n marginRight: '10px',\r\n marginTop: '10px',\r\n marginLBottom: '10px',\r\n },\r\n audioGuideTitle: {\r\n fontWeight: 'bold',\r\n paddingBottom: '5px',\r\n },\r\n audioMusicTitle: {\r\n paddingTop: '5px',\r\n paddingBottom: '5px',\r\n },\r\n audioMusicTitleContainer: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n audioMusicSelect: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n },\r\n audioMusicContainer: {\r\n marginTop: '10px',\r\n marginBottom: '10px',\r\n },\r\n});\r\n","/* eslint-disable jsx-a11y/media-has-caption */\r\nimport React, { useState, useEffect, useCallback, useRef, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Combobox, Option, useId, Button, mergeClasses } from '@fluentui/react-components';\r\nimport { Overlay } from '@bingads-webui-react/fabric-control';\r\nimport { AssetLibrarySpinner } from '@bingads-webui-campaign-react/asset-library-spinner';\r\nimport { PlayRegular, PauseRegular } from '@fluentui/react-icons';\r\nimport { HelpPopupInline } from '@bingads-webui-react/help-popup';\r\n\r\nimport { useStyles } from './style';\r\n\r\nexport const getLocalizedAudioName = (key, i18n) => {\r\n const localizedAudioNames = {\r\n 'chill_calm_river_msft_mstr.aac': i18n.getString(_TL_('Calm river (chill)')),\r\n 'chill_In_A_Dream_MSFT_MSTR.aac': i18n.getString(_TL_('In a dream (chill)')),\r\n 'chill_keep_it_moving_msft_mstr.aac': i18n.getString(_TL_('Soft moves (chill)')),\r\n 'chill_Open_Field_MSFT_MSTR.aac': i18n.getString(_TL_('Open field (chill)')),\r\n 'chill_Rain_In_Japan_MSFT_MSTR.aac': i18n.getString(_TL_('Rain in Japan (chill)')),\r\n 'chill_relaxation_msft_mstr.aac': i18n.getString(_TL_('Relaxation (chill)')),\r\n 'chill_summer_breeze_msft_mstr.aac': i18n.getString(_TL_('Summer breeze (chill)')),\r\n 'chill_sunshine_msft_mstr.aac': i18n.getString(_TL_('Sunshine (chill)')),\r\n 'chill_Supernova_MSFT_MSTR.aac': i18n.getString(_TL_('Supernova (chill)')),\r\n 'chill_Waves_MSFT_MSTR.aac': i18n.getString(_TL_('Waves (chill)')),\r\n 'cinematic_disturbia_msft_mstr.aac': i18n.getString(_TL_('Disturbia (cinematic)')),\r\n 'cinematic_full_throttle_msft_mstr.aac': i18n.getString(_TL_('Full throttle (cinematic)')),\r\n 'cinematic_tackle_it_msft_mstr.aac': i18n.getString(_TL_('Ready for action (cinematic)')),\r\n 'energetic_all_hyped_up_msft_mstr.aac': i18n.getString(_TL_('All hyped up (energetic)')),\r\n 'energetic_beach_party_msft_mstr.aac': i18n.getString(_TL_('Beach party (energetic)')),\r\n 'energetic_Bring_Up_The_Energy_MSFT_MSTR.aac': i18n.getString(_TL_('Bring the energy (energetic)')),\r\n 'energetic_By_The_Shoreline_MSFT_MSTR.aac': i18n.getString(_TL_('Daytime fun (energetic)')),\r\n 'energetic_Feelin\\'_Fresh_MSFT_MSTR.aac': i18n.getString(_TL_('Feeling fresh (energetic)')),\r\n 'energetic_Get_Excited_MSFT_MSTR.aac': i18n.getString(_TL_('Get excited (energetic)')),\r\n 'energetic_get_this_msft_mstr.aac': i18n.getString(_TL_('Positive vibes (energetic)')),\r\n 'energetic_glitter_msft_mstr.aac': i18n.getString(_TL_('Get moving (energetic)')),\r\n 'energetic_ice_tea_msft_mstr.aac': i18n.getString(_TL_('Dance to the rhythm (energetic)')),\r\n 'energetic_Pump_It_Up_MSFT_MSTR.aac': i18n.getString(_TL_('Pump it up (energetic)')),\r\n 'energetic_right_away_msft_mstr.aac': i18n.getString(_TL_('Gaining speed (energetic)')),\r\n 'fun_all_night_msft_mstr.aac': i18n.getString(_TL_('All night (fun)')),\r\n 'fun_backseat_msft_mstr.aac': i18n.getString(_TL_('Cruising (fun)')),\r\n 'fun_Block_Party_MSFT_MSTR.aac': i18n.getString(_TL_('Block party (fun)')),\r\n 'fun_Chill_And_Wavey_MSFT_MSTR.aac': i18n.getString(_TL_('Waves (fun)')),\r\n 'fun_Cloud_Walk_MSFT_MSTR.aac': i18n.getString(_TL_('Walking on clouds (fun)')),\r\n 'fun_Fearless_Funk_MSFT_MSTR.aac': i18n.getString(_TL_('Summertime beats (fun)')),\r\n 'fun_get_going_msft_mstr.aac': i18n.getString(_TL_('Groove with it (fun)')),\r\n 'fun_go_hard_msft_mstr.aac': i18n.getString(_TL_('Bliss (fun)')),\r\n 'fun_Laid_Back_Vibe_MSFT_MSTR.aac': i18n.getString(_TL_('Catch the sun (fun)')),\r\n 'fun_Liquid_MSFT_MSTR.aac': i18n.getString(_TL_('Cool as water (fun)')),\r\n 'fun_Spectra_MSFT_MSTR.aac': i18n.getString(_TL_('Up for anything (fun)')),\r\n 'fun_spring_city_msft_mstr.aac': i18n.getString(_TL_('Spring time (fun)')),\r\n 'fun_The_Bounce_MSFT_MSTR.aac': i18n.getString(_TL_('Bounce step (fun)')),\r\n 'inspiring_anodized_msft_mstr.aac': i18n.getString(_TL_('Looking to the future (inspiring)')),\r\n 'inspiring_Awakenings_MSFT_MSTR.aac': i18n.getString(_TL_('Awakenings (inspiring)')),\r\n 'inspiring_Closed_Circuits_MSFT_MSTR.aac': i18n.getString(_TL_('Open circuits (inspiring)')),\r\n 'inspiring_Cutting_Edge_MSFT_MSTR.aac': i18n.getString(_TL_('Innovation (inspiring)')),\r\n 'inspiring_Driving_Force_MSFT_MSTR.aac': i18n.getString(_TL_('Driving force (inspiring)')),\r\n 'inspiring_happy_place_msft_mstr.aac': i18n.getString(_TL_('Happy place (inspiring)')),\r\n 'inspiring_in_the_sky_msft_mstr.aac': i18n.getString(_TL_('Catching air (inspiring)')),\r\n 'inspiring_Isotope_MSFT_MSTR.aac': i18n.getString(_TL_('Journeying (inspiring)')),\r\n 'inspiring_look_around_msft_mstr.aac': i18n.getString(_TL_('Taking in the view')),\r\n 'inspiring_Morning_Coffee_MSFT_MSTR.aac': i18n.getString(_TL_('Morning coffee (inspiring)')),\r\n 'inspiring_sunshine_in_my_mind_msft_mstr.aac': i18n.getString(_TL_('Sunshine all the time (inspiring)')),\r\n 'inspiring_Tinkering_MSFT_MSTR.aac': i18n.getString(_TL_('Spring cleaning (inspiring)')),\r\n 'sentimental_homecoming_msft_mstr.aac': i18n.getString(_TL_('Homecoming (sentimental)')),\r\n 'sentimental_not_guilty_msft_mstr.aac': i18n.getString(_TL_('Know you\\'re great (sentimental)')),\r\n 'sentimental_rising_star_msft_mstr.aac': i18n.getString(_TL_('Stargazing (sentimental)')),\r\n };\r\n\r\n return localizedAudioNames[key] || key;\r\n};\r\n\r\nexport const EditVideoAudioView = ({\r\n i18n,\r\n audioState,\r\n setAudioState,\r\n rawAudioList,\r\n}) => {\r\n const selectId = useId();\r\n const classes = useStyles();\r\n\r\n const [selectedValue, setSelectedValue] = useState();\r\n const [isPageLoading, setIsPageLoading] = useState(true);\r\n const [audioList, setAudioList] = useState([]);\r\n const [isPlaying, setIsPlaying] = useState(false);\r\n const audioRef = useRef(null);\r\n\r\n const audioSrc = useMemo(() => audioState && audioState.updating && audioState.updating.fileName, [audioState]);\r\n const audioName = useMemo(() => audioState && audioState.updating && audioState.updating.audioName, [audioState]);\r\n\r\n const togglePlayPause = () => {\r\n if (isPlaying) {\r\n audioRef.current.pause();\r\n } else {\r\n audioRef.current.play();\r\n }\r\n setIsPlaying(!isPlaying);\r\n };\r\n\r\n const formatResponse = useCallback((response) => {\r\n if (!response || !response.Data || !response.Data.Audio) {\r\n return [];\r\n }\r\n\r\n return response.Data.Audio.map(item => ({\r\n key: item.Url,\r\n text: getLocalizedAudioName(item.AudioName, i18n),\r\n }));\r\n }, []);\r\n\r\n const getAudioObjectFromList = useCallback((key) => {\r\n if (!audioList || audioList.length === 0) {\r\n return null;\r\n }\r\n return audioList.find(item => item.key === key);\r\n });\r\n\r\n const handleChange = (event, data) => {\r\n const audioObject = getAudioObjectFromList(data.optionValue);\r\n if (audioObject) {\r\n setSelectedValue(data.optionText);\r\n setAudioState(prev => ({\r\n ...prev,\r\n updating: {\r\n ...prev.updating,\r\n fileName: audioObject.key,\r\n audioName: audioObject.text,\r\n },\r\n }));\r\n }\r\n\r\n if (isPlaying) {\r\n audioRef.current.pause();\r\n setIsPlaying(false);\r\n }\r\n };\r\n\r\n const formatAudioList = useCallback(async () => {\r\n const formattedList = formatResponse(rawAudioList);\r\n setAudioList(formattedList);\r\n if (formattedList.length > 0) {\r\n setSelectedValue(getLocalizedAudioName(audioName, i18n) || formattedList[0].text);\r\n }\r\n setIsPageLoading(false);\r\n }, [rawAudioList, formatResponse]);\r\n\r\n useEffect(() => {\r\n formatAudioList();\r\n }, [formatAudioList]);\r\n\r\n const hidePlayButton = useMemo(() => {\r\n const isMacEnv = new URLSearchParams(document.location.search).get('isMacEnv');\r\n return isMacEnv === 'true';\r\n }, []);\r\n\r\n return (\r\n
\r\n {isPageLoading && (\r\n \r\n \r\n \r\n )}\r\n
{i18n.getString(_TL_('Choose audio for your video'))}
\r\n
\r\n
\r\n
{i18n.getString(_TL_('Music'))}
\r\n \r\n
\r\n
\r\n \r\n {!isPageLoading && audioList.length > 0 && audioList.map(option => (\r\n \r\n ))}\r\n \r\n {!hidePlayButton &&\r\n : }\r\n className=\"play-audio-button\"\r\n aria-label={i18n.getString(_TL_('Play audio.'))}\r\n />\r\n }\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\n\r\nEditVideoAudioView.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n copilotDomainDataService: PropTypes.shape({\r\n getAudioList: PropTypes.func,\r\n }).isRequired,\r\n audioState: PropTypes.string.isRequired,\r\n setAudioState: PropTypes.func.isRequired,\r\n};\r\n\r\nEditVideoAudioView.defaultProps = {\r\n};\r\n","import { makeStyles, tokens, shorthands } from '@fluentui/react-components';\r\n\r\nexport const useStyles = makeStyles({\r\n scenePreviewContainer: {\r\n display: 'flex',\r\n height: '100%',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n ...shorthands.padding('0px', tokens.spacingHorizontalXXXL, '0px', tokens.spacingHorizontalXXXL),\r\n },\r\n scenePreviewImage: {\r\n maxWidth: '100%',\r\n maxHeight: '450px',\r\n ...shorthands.borderRadius('8px'),\r\n },\r\n});\r\n","import React, { useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { mergeClasses } from '@fluentui/react-components';\r\nimport { useStyles } from './style';\r\n\r\nexport const ScenePreview = ({ scenes, selectedSceneId }) => {\r\n const currentScene = useMemo(() => scenes[selectedSceneId], [scenes, selectedSceneId]);\r\n const { keyFrame } = (currentScene && currentScene.effective) || { keyFrame: { url: '' } };\r\n const classes = useStyles();\r\n return (\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nScenePreview.propTypes = {\r\n scenes: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n selectedSceneId: PropTypes.number.isRequired,\r\n};\r\n","import { makeStyles, tokens, shorthands } from '@fluentui/react-components';\r\n\r\nexport const useStyles = makeStyles({\r\n storyBoardView: {\r\n display: 'flex',\r\n gap: '16px',\r\n height: '100%',\r\n minWidth: 'max-content',\r\n borderRadius: '10px',\r\n ...shorthands.padding(tokens.spacingVerticalMNudge),\r\n backgroundColor: '#FFFFFF',\r\n },\r\n templateContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'space-around',\r\n width: '152px',\r\n backgroundColor: '#F0F0F0',\r\n borderRadius: '10px',\r\n paddingLeft: '10px',\r\n },\r\n templateThumbnail: {\r\n maxWidth: '125px',\r\n maxHeight: '65px',\r\n height: 'auto',\r\n borderRadius: '10px',\r\n fontSize: '14px',\r\n },\r\n templateText: {\r\n color: tokens.colorNeutralForeground3,\r\n fontSize: '14px',\r\n },\r\n\r\n scenesContainer: {\r\n flex: 1,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '16px',\r\n },\r\n\r\n sceneContainer: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n columnGap: '8px',\r\n },\r\n\r\n sceneTitle: {\r\n fontSize: '16px',\r\n fontWeight: '500',\r\n },\r\n\r\n thumbnailsRow: {\r\n display: 'flex',\r\n },\r\n sceneItem: {\r\n display: 'flex',\r\n marginTop: '5px',\r\n marginLeft: '5px',\r\n flexDirection: 'column',\r\n maxWidth: '125px',\r\n height: 'auto',\r\n '& .scene-decorator': {\r\n borderRadius: '10px',\r\n '& .thumbnail': {\r\n overflow: 'hidden',\r\n '&.selected': {\r\n outlineColor: '#0078d4',\r\n outlineStyle: 'solid',\r\n },\r\n padding: 1,\r\n },\r\n },\r\n },\r\n sceneThumbnail: {\r\n borderRadius: '10px',\r\n marginBottom: '0px',\r\n },\r\n sceneNumber: {\r\n '& span': {\r\n verticalAlign: 'middle',\r\n lineHeight: '12px',\r\n },\r\n },\r\n audioBar: {\r\n display: 'flex',\r\n borderRadius: '10px',\r\n width: '100%',\r\n height: '28px',\r\n color: 'white',\r\n paddingTop: '2px',\r\n paddingLeft: '5px',\r\n },\r\n navigationContainer: {\r\n display: 'grid',\r\n marginLeft: '10px',\r\n },\r\n});\r\n","import React, { useContext, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { mergeClasses } from '@fluentui/react-components';\r\nimport {\r\n Text,\r\n} from '@bingads-webui-react/fabric-control';\r\nimport { keyCode } from '@bingads-webui/keycode';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { HelpPopupInline } from '@bingads-webui-react/help-popup';\r\nimport { useStyles } from './style';\r\n\r\n\r\nconst Title = () => {\r\n const i18n = useContext(I18nContext);\r\n return (\r\n
\r\n {i18n.getString(_TL_('Scenes'))}\r\n \r\n
\r\n );\r\n};\r\n\r\nconst Scene = ({\r\n scene, sceneId, onSceneSelected, selectedSceneId,\r\n}) => {\r\n const classes = useStyles();\r\n const clickFunc = useCallback(() => {\r\n onSceneSelected({ scene, id: sceneId });\r\n }, [onSceneSelected, scene, sceneId]);\r\n\r\n const onKeyDown = useCallback((ev) => {\r\n if (ev.keyCode === keyCode.Enter) {\r\n clickFunc();\r\n }\r\n }, [clickFunc]);\r\n\r\n const {\r\n keyFrame,\r\n } = scene;\r\n\r\n const isSelected = sceneId === selectedSceneId;\r\n\r\n return (\r\n
\r\n \r\n
\r\n \"scene\"\r\n
\r\n
\r\n
\r\n {`${sceneId + 1}`}\r\n
\r\n \r\n );\r\n};\r\n\r\nScene.propTypes = {\r\n scene: PropTypes.shape({\r\n keyFrame: PropTypes.shape({}).isRequired,\r\n }).isRequired,\r\n onSceneSelected: PropTypes.func.isRequired,\r\n selectedSceneId: PropTypes.number.isRequired,\r\n sceneId: PropTypes.number.isRequired,\r\n};\r\n\r\nexport const ScenePickerView = ({\r\n scenes, onSceneSelected, selectedSceneId,\r\n}) => {\r\n const classes = useStyles();\r\n\r\n return (\r\n
\r\n \r\n <div className={mergeClasses(classes.sceneContainer, 'scene-container')}>\r\n {scenes.map(scene => (<Scene\r\n key={scene.id}\r\n scene={scene.effective}\r\n sceneId={scene.id}\r\n onSceneSelected={onSceneSelected}\r\n selectedSceneId={selectedSceneId}\r\n />))}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nScenePickerView.propTypes = {\r\n scenes: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n onSceneSelected: PropTypes.func.isRequired,\r\n selectedSceneId: PropTypes.number.isRequired,\r\n};\r\n\r\nScenePickerView.defaultProps = {};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Text, mergeClasses } from '@fluentui/react-components';\r\nimport { MusicNote2Filled } from '@fluentui/react-icons';\r\nimport { useStyles } from './style';\r\nimport { ScenePickerView } from './scene-picker';\r\nimport audioWaveImage from '../../media/audio-wave.svg';\r\nimport { getLocalizedAudioName } from '../audio-editor';\r\n\r\nconst TemplateContainer = ({ templateDetail, i18n, classes }) => {\r\n if (!templateDetail || !templateDetail.TemplateThumbnailUrl || !templateDetail.TemplateName) {\r\n return null;\r\n }\r\n\r\n return (\r\n <div className={mergeClasses(classes.templateContainer, 'template-container')} style={{ borderRadius: '10px' }}>\r\n <Text>{i18n.getString(_TL_('Selected Template'))}</Text>\r\n <img className={mergeClasses(classes.templateThumbnail, 'template-thumbnail')} src={templateDetail.TemplateThumbnailUrl} alt=\"template-thumbnail\" />\r\n <div className={mergeClasses(classes.templateText, 'template-metadata')}>\r\n <div>{templateDetail.LocalizedTemplateName || templateDetail.TemplateName}</div>\r\n <div>{i18n.getString(_TL_('Duration: {{seconds}} seconds'), { seconds: templateDetail.Duration })}</div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nTemplateContainer.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n template: PropTypes.shape({\r\n url: PropTypes.string.isRequired,\r\n title: PropTypes.string.isRequired,\r\n timestamp: PropTypes.string.isRequired,\r\n }).isRequired,\r\n};\r\n\r\nconst AudioBar = ({ videoMetadata, i18n }) => {\r\n const classes = useStyles();\r\n const audio = videoMetadata.template && videoMetadata.template.audio;\r\n const audioName = audio && audio.audioName;\r\n const audioCategory = audio && audio.category;\r\n\r\n return (\r\n <div\r\n className={mergeClasses(classes.audioBar, 'audio-bar')}\r\n style={{\r\n borderRadius: '10px',\r\n overflow: 'hidden',\r\n backgroundImage: `url(${audioWaveImage}), linear-gradient(to right, rgba(0, 0, 255, 0.8), rgba(0, 0, 255, 1))`,\r\n backgroundPosition: 'center',\r\n backgroundRepeat: 'repeat-x',\r\n }}\r\n >\r\n <MusicNote2Filled fontSize={24} />\r\n <Text>{getLocalizedAudioName(audioName, i18n) || audioCategory}</Text>\r\n </div>\r\n );\r\n};\r\n\r\nAudioBar.propTypes = {\r\n videoMetadata: PropTypes.shape({\r\n audio: PropTypes.string.isRequired,\r\n }).isRequired,\r\n};\r\n\r\nexport const StoryBoardView = ({\r\n i18n,\r\n scenes,\r\n selectedSceneId,\r\n onSceneSelected,\r\n videoMetadata,\r\n templateDetail,\r\n}) => {\r\n const classes = useStyles();\r\n\r\n return (\r\n <div className={mergeClasses(classes.storyBoardView, 'story-board')} style={{ borderRadius: '10px' }}>\r\n <TemplateContainer i18n={i18n} templateDetail={templateDetail} classes={classes} />\r\n <div className={classes.navigationContainer}>\r\n <div className={mergeClasses(classes.scenesContainer, 'scenes-container')}>\r\n <ScenePickerView scenes={scenes} onSceneSelected={onSceneSelected} selectedSceneId={selectedSceneId} />\r\n <AudioBar videoMetadata={videoMetadata} i18n={i18n} />\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nStoryBoardView.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n scenes: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n selectedSceneId: PropTypes.number.isRequired,\r\n onSceneSelected: PropTypes.func.isRequired,\r\n videoMetadata: PropTypes.shape({\r\n audio: PropTypes.string.isRequired,\r\n }).isRequired,\r\n};\r\n","import { useCallback, useEffect, useMemo, useState } from 'react';\r\nimport { isEqual, omit, some, keys } from 'underscore';\r\nimport { getParameter, getDomain } from '@bingads-webui/url-util';\r\nimport { getTextSizeLimitation, ColorTypeEnum } from './util';\r\n\r\n// for testing\r\nconst isSelenium = getParameter('ise2etest') === 'true';\r\nconst isLocal = getDomain(window.location.href) === 'localhost';\r\nconst mock = isSelenium === true || isLocal;\r\nconst defaultColor = '#FFFFFF';\r\nconst defaultTextData = {\r\n font: 'Arial',\r\n color: defaultColor,\r\n fontWeight: 'Normal',\r\n};\r\n\r\n// mock\r\nconst checkMockCall = (scene) => {\r\n let returnValue = true;\r\n if (!scene.text.length || scene.text[0] !== 'TestText') {\r\n returnValue = false;\r\n }\r\n const { textData } = scene;\r\n if (!textData.length || textData[0].font !== 'Arial' || textData[0].fontWeight !== 'Normal') {\r\n returnValue = false;\r\n }\r\n return returnValue;\r\n};\r\nconst mockEditResponse = {\r\n recommendationId: '14716601-9749-4fb5-a700-a00860f3a65c',\r\n url: 'https://mmastoragedev.blob.core.windows.net/testdata/mock-project-2.json',\r\n recommendationFormat: 'Clipchamp',\r\n thumbnailUrl: 'https://mmastoragedev.blob.core.windows.net/testdata/images/recommendation_test_DO_NOT_DEL/video-thumbnail.jpeg',\r\n videoMetadata: {\r\n width: 1280,\r\n height: 720,\r\n durationInMs: 15000,\r\n },\r\n template: {\r\n templateId: 'a3f900b6-942a-4b55-bb1d-87bae12229f0',\r\n audio: {\r\n category: 'Chill',\r\n fileName: 'abc.mp3',\r\n audioName: 'abc',\r\n },\r\n scenes: [\r\n {\r\n images: [\r\n 'https://mmastoragedev.blob.core.windows.net/testdata/images/recommendation_test_DO_NOT_DEL/autvideo_1.jpg',\r\n ],\r\n imageData: [\r\n {\r\n targetWidth: 720,\r\n targetHeight: 1280,\r\n itemId: 'af0d9795-2394-4e70-a366-6bf4a3fb0959',\r\n },\r\n ],\r\n text: [\r\n 'Premium Thai Food',\r\n 'Get your spice on',\r\n ],\r\n textData: [\r\n {\r\n font: 'Arial',\r\n color: '#FFFFFF',\r\n maxLength: 30,\r\n itemId: 'c77085f6-e229-4004-ab15-2c3605d5ae9a',\r\n },\r\n {\r\n font: 'Arial',\r\n color: '#FFFFFF',\r\n maxLength: 50,\r\n itemId: '0decb36c-8048-4eaa-926a-3ca71d126734',\r\n },\r\n ],\r\n logos: [\r\n 'https://mmastoragedev.blob.core.windows.net/testdata/images/recommendation_test_DO_NOT_DEL/logo.png',\r\n ],\r\n logoData: [\r\n {\r\n targetWidth: 500,\r\n targetHeight: 500,\r\n itemId: 'd4505e7a-d552-4b8a-bee6-eb390dd31d74',\r\n },\r\n ],\r\n keyFrame: {\r\n templateId: 'a3f900b6-942a-4b55-bb1d-87bae12229f0',\r\n url: 'https://mmastoragedev.blob.core.windows.net/testdata/images/recommendation_test_DO_NOT_DEL/keyframe1.png',\r\n },\r\n },\r\n ],\r\n },\r\n};\r\n\r\nconst useRecommendations = ({ copilotDataService }) => {\r\n const { editVideoAdsAssetRecommendations, fetchAssets } = copilotDataService;\r\n // const fetchEditedVideo = useMemo(() => _.memoize(_.throttle(editVideoAdsAssetRecommendations, 100)), [editVideoAdsAssetRecommendations]);\r\n\r\n const generateVideo = ({\r\n scenes, video, styles, audio,\r\n }) => {\r\n const { template } = video;\r\n const { templateId } = template;\r\n const newVideoMetaData = {\r\n template: {\r\n templateId,\r\n audio,\r\n scenes: scenes.map((scene) => {\r\n const {\r\n images, imageData, text, textData, logos, logoData,\r\n } = scene;\r\n return {\r\n images,\r\n imageData,\r\n text,\r\n textData,\r\n logos,\r\n logoData,\r\n };\r\n }),\r\n },\r\n };\r\n const ads = newVideoMetaData;\r\n return editVideoAdsAssetRecommendations(ads, false, styles)\r\n .then((res) => {\r\n if (mock === true) {\r\n if (ads && ads.template && ads.template.scenes && ads.template.scenes.length) {\r\n const isValid = checkMockCall(ads.template.scenes[0]);\r\n return isValid ? mockEditResponse : null;\r\n }\r\n }\r\n if (res.data && res.data.ads && res.data.ads.length > 0) {\r\n return res.data.ads[0];\r\n }\r\n return res;\r\n })\r\n .catch(error => error);\r\n };\r\n\r\n return {\r\n generateVideo,\r\n fetchAssets,\r\n };\r\n};\r\n\r\nconst extractStylesFromScenes = (scenes) => {\r\n const { textData } = scenes[0].effective;\r\n const { font, color, fontWeight } = textData && textData.length > 0 ? textData[0] : defaultTextData;\r\n return {\r\n font,\r\n color,\r\n fontWeight,\r\n };\r\n};\r\n\r\n// even the same scene, the keyFrame url could be different.\r\nconst isEqualScene = (scene1, scene2) => isEqual(omit(scene1, 'keyFrame'), omit(scene2, 'keyFrame'));\r\nconst isSceneChanged = scene => (scene.effective ? !isEqualScene(scene.updating, scene.effective) : !isEqualScene(scene.original, scene.updating));\r\nconst isVideoChanged = scenes => scenes.some(scene => isSceneChanged(scene));\r\n\r\n// For the scene related state, we could save them into a single scene object, and then use the id to locate the scene object.\r\n// Text, Image, KeyFrame are the main scene properties that could be changed. (KeyFrame is from the API call. Text and Image are also included in the API calls.)\r\n// Original, Updating and Effective are for checking if the scene has been changed.\r\n// For the video, we could save the video URL and it's related scenes.\r\n// To check if the video could be generated, we could check if the scenes have been changed.\r\n// If the scenes have been changed, we could generate the video.\r\n// If the scenes are not changed, we could apply the video and it's related scenes (if we want to save the metadata).\r\n\r\n// videoMetaData is the original video.\r\nexport const useEditVideoAdsViewState = ({\r\n videoMetaData,\r\n copilotDataService,\r\n logger,\r\n i18n,\r\n isCTV,\r\n brandKit,\r\n finalUrl,\r\n activity,\r\n showVideoTemplateSummaryBarControl,\r\n}) => {\r\n const {\r\n generateVideo,\r\n fetchAssets,\r\n } = useRecommendations({\r\n copilotDataService,\r\n });\r\n\r\n const [scenes, setScenes] = useState([]);\r\n const [selectedSceneId, setSelectedSceneId] = useState(0); // Used to locate the scene with id\r\n const [video, setVideo] = useState({});\r\n const [audioState, setAudioState] = useState({});\r\n const [fontsState, setFontsState] = useState([]);\r\n const [palettesState, setPalettesState] = useState([]);\r\n const [videoUrl, setVideoUrl] = useState(videoMetaData && videoMetaData.url);\r\n const [videoSettings, setVideoSettings] = useState({}); // Used to store the video settings [logo, businessName]\r\n const [isGeneratingVideo, setIsGeneratingVideo] = useState(false);\r\n const [generateError, setGenerateError] = useState(undefined); // Used to show the error message\r\n const [recommendedAssets, setRecommendedAssets] = useState([]);\r\n const [isLoadingRecommendedAssets, setIsLoadingRecommendedAssets] = useState(false);\r\n const [copilotRecommendedAssets, setCopilotRecommendedAssets] = useState(null);\r\n\r\n // Update current state with response from AIGC\r\n const updateStateFromFetchResponse = useCallback((response) => {\r\n // initialization from the video metadata\r\n const {\r\n scenes: scenesInner = [], businessName, audio, backgroundColor,\r\n } = response && response.template;\r\n const scenesWithIds = scenesInner.map((scene, index) => ({\r\n original: (scene.original ? scene.original : scene), // Original won't be overridden by updates\r\n updating: scene, // Used to keep track of the scene changes (the react view will modify this part)\r\n effective: scene, // Assume, we've already generated the scene\r\n id: index,\r\n newImages: (scene.images ? scene.images.map(imageUrl => ({ url: imageUrl, id: '' })) : []),\r\n newLogos: (scene.logos ? scene.logos.map(logoUrl => ({ url: logoUrl, id: '' })) : []),\r\n }));\r\n\r\n setScenes(scenesWithIds);\r\n setVideoUrl(response.url || response.src);\r\n setVideo({\r\n ...response,\r\n });\r\n setAudioState({\r\n original: audio,\r\n updating: audio,\r\n effective: audio,\r\n });\r\n const { font, color, fontWeight } = extractStylesFromScenes(scenesWithIds);\r\n const fonts = { font, fontWeight };\r\n setFontsState({\r\n original: fonts,\r\n updating: fonts,\r\n effective: fonts,\r\n });\r\n\r\n const palettes = [\r\n { Name: ColorTypeEnum.TextColor, HexCode: (color || defaultColor) },\r\n { Name: ColorTypeEnum.BackgroundColor, HexCode: ((backgroundColor && backgroundColor.color) || defaultColor) },\r\n ];\r\n const filteredPalettes = palettes.filter(c => c.HexCode);\r\n\r\n setPalettesState({\r\n original: filteredPalettes,\r\n updating: filteredPalettes,\r\n effective: filteredPalettes,\r\n });\r\n const videoSettingsInner = {\r\n businessName,\r\n };\r\n setVideoSettings({\r\n original: videoSettingsInner,\r\n updating: videoSettingsInner,\r\n effective: videoSettingsInner,\r\n });\r\n\r\n // fetch recommended assets\r\n if (finalUrl) {\r\n setIsLoadingRecommendedAssets(true);\r\n fetchAssets().then((res) => {\r\n if (res && res.RecommendedAssets) {\r\n const { RecommendedAssets, Logo } = res;\r\n const assetsObj = { ...RecommendedAssets, Logo: Logo || '' };\r\n setRecommendedAssets(assetsObj);\r\n setCopilotRecommendedAssets(res);\r\n setIsLoadingRecommendedAssets(false);\r\n }\r\n }).catch((error) => {\r\n logger.logTrace('Error while fetch video editor recommendations', error);\r\n })\r\n .finally(() => setIsLoadingRecommendedAssets(false));\r\n }\r\n }, [fetchAssets, finalUrl, logger]);\r\n\r\n useEffect(() => {\r\n if (videoMetaData) {\r\n updateStateFromFetchResponse(videoMetaData);\r\n if (isCTV) {\r\n logger.logTrace('CTV Copilot video editor: editor panel opened');\r\n } else {\r\n logger.logTrace('OLV Copilot video editor: editor panel opened');\r\n }\r\n }\r\n }, [logger, videoMetaData, isCTV, updateStateFromFetchResponse]);\r\n\r\n const createStylesRequestObject = useCallback(() => {\r\n // const { textColor, backgroundColor } = (palettesState && palettesState.updating) || {};\r\n const colorProperties = palettesState && palettesState.updating.reduce((acc, color) => {\r\n acc[color.Name] = color;\r\n return acc;\r\n }, {});\r\n const { textColor, backgroundColor } = colorProperties || {};\r\n const { font, fontWeight } = (fontsState && fontsState.updating) || {};\r\n const palettes = [{ colorType: textColor.Name, colors: [textColor.HexCode] }, { colorType: backgroundColor.Name, colors: [backgroundColor.HexCode] }];\r\n const fonts = [{ type: font, weight: fontWeight }];\r\n return { palettes, fonts };\r\n }, [palettesState, fontsState]);\r\n\r\n const generateNewVideo = useCallback((scenesInCall) => {\r\n setGenerateError(undefined);\r\n setIsGeneratingVideo(true);\r\n\r\n const styles = createStylesRequestObject();\r\n const audio = (audioState && audioState.updating) || {};\r\n\r\n return generateVideo({\r\n scenes: scenesInCall.map(scene => scene.updating), video, styles, audio,\r\n }).then((newVideoMetaData) => {\r\n updateStateFromFetchResponse(newVideoMetaData);\r\n if (isCTV) {\r\n logger.logTrace('CTV Copilot video editor: video generated');\r\n } else {\r\n logger.logTrace('OLV Copilot video editor: video generated');\r\n }\r\n\r\n if (activity && activity.signal) {\r\n const message = `[VideoAdsEditor] - Edit Video - Generate - TemplateId:${videoMetaData.template.templateId}, AdStudio:${showVideoTemplateSummaryBarControl}`;\r\n activity.signal(message);\r\n }\r\n\r\n return {\r\n ...newVideoMetaData,\r\n scenes,\r\n msg: 'success',\r\n };\r\n }).catch((error) => {\r\n const { errors } = error;\r\n if (errors && errors[0] && errors[0].message) {\r\n setGenerateError(errors[0].message);\r\n } else {\r\n setGenerateError(i18n.getString(_TL_('Copilot has failed to generate a new video. Please try again later.')));\r\n }\r\n return {\r\n msg: 'failed',\r\n };\r\n })\r\n .finally(() => {\r\n setIsGeneratingVideo(false);\r\n });\r\n }, [generateVideo, video, logger, i18n, createStylesRequestObject, audioState, isCTV, scenes, updateStateFromFetchResponse]);\r\n\r\n const selectedScene = useMemo(() => scenes && scenes.find(scene => scene.id === selectedSceneId), [scenes, selectedSceneId]) || {\r\n original: {},\r\n updating: {},\r\n effective: {},\r\n id: -1,\r\n };\r\n\r\n const onSceneSelected = useCallback((scene) => {\r\n setSelectedSceneId(scene.id);\r\n }, []);\r\n\r\n const onScenesUpdated = useCallback((updatedScenes) => {\r\n setScenes(updatedScenes);\r\n }, []);\r\n\r\n const onFontsUpdated = useCallback((updatedFonts) => {\r\n setFontsState(updatedFonts);\r\n }, []);\r\n\r\n const onPalettesUpdated = useCallback((hex, colorType) => {\r\n setPalettesState((prevState) => {\r\n const newState = { ...prevState };\r\n const index = newState.updating.findIndex(c => c.Name === colorType);\r\n if (index !== -1) {\r\n newState.updating[index].HexCode = hex;\r\n }\r\n return newState;\r\n });\r\n }, []);\r\n\r\n const handleGenerateVideo = useCallback(() => {\r\n generateNewVideo(scenes);\r\n }, [generateNewVideo, scenes]);\r\n\r\n const handleGenerate = useCallback(() => {\r\n logger.logTrace('Copilot video editor: generate button clicked');\r\n handleGenerateVideo();\r\n }, [logger, handleGenerateVideo]);\r\n\r\n const textErrorMessages = useMemo(() => {\r\n const errorMessages = {};\r\n scenes.forEach((scene) => {\r\n errorMessages[scene.id] = [];\r\n const updatingText = scene.updating.text;\r\n const maxLengthOfText = getTextSizeLimitation(scene.updating.keyFrame.templateId);\r\n updatingText.forEach((text, index) => {\r\n if (text.length > maxLengthOfText[index]) {\r\n errorMessages[scene.id].push(i18n.getString(_TL_('Value cannot be longer than {{maxLength}} characters'), { maxLength: maxLengthOfText[index] }));\r\n } else if (text.length === 0) {\r\n errorMessages[scene.id].push(i18n.getString(_TL_('Required field')));\r\n } else {\r\n errorMessages[scene.id].push('');\r\n }\r\n });\r\n });\r\n\r\n return errorMessages;\r\n }, [i18n, scenes]);\r\n\r\n const haveTextError = useMemo(() => {\r\n const haveErrorInScenes = [];\r\n if (textErrorMessages) {\r\n keys(textErrorMessages).forEach((key) => {\r\n haveErrorInScenes.push(some(textErrorMessages[key]));\r\n });\r\n }\r\n return some(haveErrorInScenes);\r\n }, [textErrorMessages]);\r\n\r\n const textErrorForSelectedScene = useMemo(() => textErrorMessages[selectedSceneId], [selectedSceneId, textErrorMessages]);\r\n\r\n const onImageUpdated = useCallback((images) => {\r\n setScenes(prevScenes => prevScenes.map((scene) => {\r\n if (scene.id === selectedSceneId) {\r\n return {\r\n ...scene,\r\n updating: {\r\n ...scene.updating,\r\n images: images.map(image => image.url),\r\n },\r\n newImages: images,\r\n };\r\n }\r\n return scene;\r\n }));\r\n }, [selectedSceneId]);\r\n\r\n const onLogoUpdated = useCallback((logos) => {\r\n setScenes(prevScenes => prevScenes.map((scene) => {\r\n if (scene.id === selectedSceneId) {\r\n return {\r\n ...scene,\r\n updating: {\r\n ...scene.updating,\r\n logos: logos.map(logo => logo.url),\r\n },\r\n newLogos: logos,\r\n };\r\n }\r\n return scene;\r\n }));\r\n }, [selectedSceneId]);\r\n\r\n const disableGenerate = useMemo(() =>\r\n isGeneratingVideo\r\n || !(isVideoChanged(scenes, videoSettings))\r\n || haveTextError, [haveTextError, isGeneratingVideo, scenes, videoSettings]);\r\n\r\n return {\r\n video,\r\n setVideo,\r\n selectedSceneId,\r\n setSelectedSceneId,\r\n scenes,\r\n onSceneSelected,\r\n setScenes,\r\n selectedScene,\r\n onImageUpdated,\r\n onLogoUpdated,\r\n onScenesUpdated,\r\n onFontsUpdated,\r\n onPalettesUpdated,\r\n disableGenerate,\r\n isGeneratingVideo,\r\n handleGenerate,\r\n generateError,\r\n setGenerateError,\r\n textErrorForSelectedScene,\r\n videoSettings,\r\n setVideoSettings,\r\n brandKit,\r\n palettesState,\r\n fontsState,\r\n audioState,\r\n setAudioState,\r\n recommendedAssets,\r\n isLoadingRecommendedAssets,\r\n videoUrl,\r\n copilotRecommendedAssets,\r\n };\r\n};\r\n","import React, { useMemo, useCallback, useState, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { mergeClasses, FluentProvider, webLightTheme, Button, Divider } from '@fluentui/react-components';\r\nimport { Overlay, MessageBar, MessageBarType } from '@bingads-webui-react/fabric-control';\r\nimport { Dismiss24Regular, VideoRegular, Send16Regular, ChevronLeftRegular, ChevronRightRegular } from '@fluentui/react-icons';\r\nimport {\r\n DrawerBody,\r\n DrawerHeader,\r\n DrawerHeaderTitle,\r\n Drawer,\r\n DrawerFooter,\r\n} from '@fluentui/react-drawer';\r\nimport { AssetLibrarySpinner } from '@bingads-webui-campaign-react/asset-library-spinner';\r\nimport { PreviewClipchampVideoModal } from '@bingads-webui-campaign-react/clipchamp-player';\r\nimport { useRecommendations } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\n\r\nimport { VideoTemplateSummaryBarControl } from '../components/video-template-summary-bar-control';\r\nimport { useStyles } from './style';\r\nimport { EditVideoNavigationView } from '../navigation-view';\r\nimport { EditVideoAssetsView } from './assets-editor';\r\nimport { EditVideoStyleView } from './style-editor';\r\nimport { EditVideoAudioView } from './audio-editor';\r\nimport { ScenePreview } from './scene-preview';\r\nimport { StoryBoardView } from './story-board';\r\nimport { ViewName, shortHeadlineType } from '../util';\r\nimport { useNavigationState } from '../use-navigation-state';\r\nimport { useEditVideoAdsViewState } from '../state';\r\n\r\nexport const EditVideoPageComponent = ({\r\n i18n,\r\n isOpen,\r\n setIsOpen,\r\n videoMetaData,\r\n cid,\r\n aid,\r\n oDataConfig,\r\n finalUrl,\r\n activity,\r\n copilotDataService,\r\n onChangeImage,\r\n onChangeLogo,\r\n logger,\r\n isCTV,\r\n preferenceService,\r\n serverContext,\r\n perfMarker,\r\n isDialog,\r\n permissions,\r\n loadClipchampPlayer,\r\n brandKit,\r\n templateDetail,\r\n isLoadingBrandKit,\r\n onApply,\r\n instrumentation,\r\n showVideoTemplateSummaryBarControl,\r\n rawAudioList,\r\n}) => {\r\n const classes = useStyles();\r\n const { currentView, setCurrentView } = useNavigationState();\r\n const [showPreviewVideoModal, setShowPreviewVideoModal] = useState(false);\r\n const ref = React.useRef(null);\r\n const noBorderStyle = {\r\n border: 'none',\r\n outline: 'none',\r\n };\r\n\r\n const {\r\n handleCopilotBannerFetchSucceeded,\r\n } = useRecommendations({\r\n cid,\r\n aid,\r\n campaignId: -1,\r\n permissions,\r\n finalUrl,\r\n isDisplayPlus: false,\r\n enableCopilotRecommendations: true,\r\n instrumentation,\r\n isMMA: false,\r\n isSignup: false,\r\n skipBusinessNameRecommendation: true,\r\n });\r\n\r\n const {\r\n selectedSceneId,\r\n onSceneSelected,\r\n scenes,\r\n onImageUpdated,\r\n onLogoUpdated,\r\n onScenesUpdated,\r\n onFontsUpdated,\r\n onPalettesUpdated,\r\n video,\r\n videoSettings,\r\n isGeneratingVideo,\r\n setVideoSettings,\r\n fontsState,\r\n palettesState,\r\n audioState,\r\n setAudioState,\r\n handleGenerate,\r\n recommendedAssets,\r\n isLoadingRecommendedAssets,\r\n generateError,\r\n setGenerateError,\r\n videoUrl,\r\n copilotRecommendedAssets,\r\n } = useEditVideoAdsViewState({\r\n onApply,\r\n videoMetaData,\r\n copilotDataService,\r\n logger,\r\n i18n,\r\n isCTV,\r\n finalUrl,\r\n handleCopilotBannerFetchSucceeded,\r\n activity,\r\n showVideoTemplateSummaryBarControl,\r\n });\r\n\r\n useEffect(() => {\r\n const parentContainer = ref && ref.current && ref.current.parentElement;\r\n if (parentContainer) {\r\n parentContainer.style.zIndex = '1000';\r\n }\r\n }, [ref]);\r\n\r\n const onHandleApply = useCallback(() => {\r\n const newVideo = { ...videoMetaData, ...video };\r\n newVideo.src = video.url || videoMetaData.src;\r\n onApply(newVideo);\r\n setIsOpen(false);\r\n if (activity && activity.signal) {\r\n const message = `[VideoAdsEditor] - Edit Video - Save - TemplateId:${videoMetaData.template.templateId}, AdStudio:${showVideoTemplateSummaryBarControl}`;\r\n activity.signal(message);\r\n }\r\n }, [onApply, setIsOpen, videoMetaData, video, activity, showVideoTemplateSummaryBarControl]);\r\n\r\n const handleTextListChange = useCallback((textList) => {\r\n const updatedScenes = scenes.map((scene) => {\r\n if (scene.id === selectedSceneId) {\r\n return {\r\n ...scene,\r\n updating: {\r\n ...scene.updating,\r\n text: textList,\r\n },\r\n };\r\n }\r\n return scene;\r\n });\r\n onScenesUpdated(updatedScenes);\r\n }, [scenes, selectedSceneId, onScenesUpdated]);\r\n\r\n const deepClone = useCallback((cloneIt) => {\r\n if (cloneIt === null || typeof cloneIt !== 'object') return cloneIt;\r\n if (Array.isArray(cloneIt)) {\r\n return cloneIt.map(item => deepClone(item));\r\n }\r\n\r\n const result = {};\r\n Object.keys(cloneIt).forEach((key) => {\r\n result[key] = deepClone(cloneIt[key]);\r\n });\r\n\r\n return result;\r\n });\r\n\r\n useEffect(() => {\r\n if (videoMetaData && videoMetaData.template && videoMetaData.template.scenes && videoMetaData.template.scenes.length > selectedSceneId) {\r\n const scene = videoMetaData.template.scenes[selectedSceneId];\r\n if (scene && scene.textData && scene.textData.length > 0 && finalUrl && copilotRecommendedAssets) {\r\n const selectedSceneTextData = scene.textData;\r\n const textData = selectedSceneTextData && selectedSceneTextData[0];\r\n const isBusinessName = textData && textData.hint === shortHeadlineType.BusinessName\r\n const shortHeadlines = copilotRecommendedAssets.RecommendedAssets && copilotRecommendedAssets.RecommendedAssets.ShortHeadlines;\r\n\r\n if (textData && textData.maxLength > 0 && shortHeadlines) {\r\n const cloneCopilotRecommendedAssets = deepClone(copilotRecommendedAssets);\r\n const newTheme = cloneCopilotRecommendedAssets.RecommendedAssets.Themes.map((item) => {\r\n if (item.ShortHeadlines) {\r\n // eslint-disable-next-line no-param-reassign\r\n item.ShortHeadlines = item.ShortHeadlines.filter(shortHeadline => shortHeadline.Text.length <= (isBusinessName ? 0 : textData.maxLength));\r\n }\r\n return item;\r\n });\r\n\r\n const filteredRecommendations = {\r\n RecommendedAssets: cloneCopilotRecommendedAssets.RecommendedAssets,\r\n Logo: cloneCopilotRecommendedAssets.Logo,\r\n Cta: cloneCopilotRecommendedAssets.Cta,\r\n IsCustomerIdInExclusionList: cloneCopilotRecommendedAssets.IsCustomerIdInExclusionList,\r\n };\r\n\r\n filteredRecommendations.RecommendedAssets.ShortHeadlines = shortHeadlines.filter(item => item.Text.length <= (isBusinessName ? 0 : textData.maxLength));\r\n filteredRecommendations.RecommendedAssets.Themes = newTheme;\r\n\r\n handleCopilotBannerFetchSucceeded(finalUrl, filteredRecommendations);\r\n }\r\n }\r\n }\r\n }, [videoMetaData, selectedSceneId, copilotRecommendedAssets, finalUrl, handleCopilotBannerFetchSucceeded]);\r\n\r\n\r\n const onCloseVideoPreview = useCallback(() => {\r\n setShowPreviewVideoModal(false);\r\n }, [setShowPreviewVideoModal]);\r\n\r\n const handleSelectNextScene = useCallback(() => {\r\n const selectedScene = scenes[selectedSceneId + 1];\r\n onSceneSelected(selectedScene);\r\n }, [onSceneSelected, selectedSceneId, scenes]);\r\n\r\n const handleSelectPreviousScene = useCallback(() => {\r\n const selectedScene = scenes[selectedSceneId - 1];\r\n onSceneSelected(selectedScene);\r\n }, [onSceneSelected, selectedSceneId, scenes]);\r\n\r\n const isPreviousDisabled = useMemo(() => selectedSceneId <= 0, [selectedSceneId]);\r\n const isNextDisabled = useMemo(() => selectedSceneId >= scenes.length - 1, [scenes, selectedSceneId]);\r\n\r\n const VideoEditContent = useMemo(() => (\r\n <FluentProvider theme={webLightTheme} style={{ height: '100%' }}>\r\n <div className={classes.containerWrapper}>\r\n {isGeneratingVideo && (\r\n <Overlay styles={{ root: { zIndex: 1 } }}>\r\n <AssetLibrarySpinner className=\"page-load-spinner\" useCustomSize />\r\n </Overlay>\r\n )}\r\n {videoMetaData && videoMetaData.template && (\r\n <div className={mergeClasses('edit-video-page-container', classes.editVideoPage, 'edit-video-page', classes.containerWrapper)}>\r\n {showPreviewVideoModal && <PreviewClipchampVideoModal\r\n videoUrl={videoUrl}\r\n show={showPreviewVideoModal}\r\n onClose={onCloseVideoPreview}\r\n i18n={i18n}\r\n logger={logger}\r\n loadClipchampPlayer={loadClipchampPlayer}\r\n onShowChange={setShowPreviewVideoModal}\r\n />}\r\n {showVideoTemplateSummaryBarControl && (<VideoTemplateSummaryBarControl\r\n i18n={i18n}\r\n videoUrl={videoUrl}\r\n showPreviewVideoModal={showPreviewVideoModal}\r\n setShowPreviewVideoModal={setShowPreviewVideoModal}\r\n onSaveVideo={onHandleApply}\r\n metadata={videoMetaData}\r\n activity={activity}\r\n />\r\n )}\r\n <div className={mergeClasses(classes.navigationView, 'navigation-view')} >\r\n <EditVideoNavigationView\r\n i18n={i18n}\r\n currentView={currentView}\r\n setCurrentView={setCurrentView}\r\n />\r\n </div>\r\n <div className={mergeClasses('edit-video-actions-wrapper', classes.actionsWrapper)} style={{ borderRadius: '10px' }}>\r\n {currentView === ViewName.AssetsView && (\r\n <div className={classes.topNavigationParent}>\r\n <div className={classes.topNavigationLeft}>{i18n.getString(_TL_('Edit scene '))}{selectedSceneId + 1}{i18n.getString(_TL_(' of '))}{scenes.length}</div>\r\n <div className={classes.topNavigationRight}>\r\n <Button\r\n className=\"previous-scene-button\"\r\n icon={<ChevronLeftRegular />}\r\n disabled={isPreviousDisabled}\r\n onClick={handleSelectPreviousScene}\r\n style={noBorderStyle}\r\n aria-label={i18n.getString(_TL_('Select previous scene.'))}\r\n />\r\n <Button\r\n className=\"next-scene-button\"\r\n icon={<ChevronRightRegular />}\r\n disabled={isNextDisabled}\r\n onClick={handleSelectNextScene}\r\n style={noBorderStyle}\r\n aria-label={i18n.getString(_TL_('Select next scene.'))}\r\n />\r\n </div>\r\n </div>\r\n )}\r\n <div className={mergeClasses('edit-video-actions-wrapper', classes.actionsWrapperContent)}>\r\n <div>\r\n {\r\n currentView === ViewName.AssetsView &&\r\n <EditVideoAssetsView\r\n i18n={i18n}\r\n aid={aid}\r\n cid={cid}\r\n oDataConfig={oDataConfig}\r\n onTextListChange={handleTextListChange}\r\n onChangeImage={onChangeImage}\r\n setVideoSettings={setVideoSettings}\r\n scenes={scenes}\r\n selectedSceneId={selectedSceneId}\r\n onSceneSelected={onSceneSelected}\r\n onImageUpdated={onImageUpdated}\r\n onLogoUpdated={onLogoUpdated}\r\n videoSettings={videoSettings}\r\n onChangeLogo={onChangeLogo}\r\n preferenceService={preferenceService}\r\n serverContext={serverContext}\r\n perfMarker={perfMarker}\r\n permissions={permissions}\r\n recommendedAssets={recommendedAssets}\r\n isLoadingRecommendedAssets={isLoadingRecommendedAssets}\r\n brandKit={brandKit}\r\n isLoadingBrandKit={isLoadingBrandKit}\r\n finalUrl={finalUrl}\r\n />\r\n }\r\n {\r\n currentView === ViewName.StyleView &&\r\n <EditVideoStyleView\r\n i18n={i18n}\r\n fontsState={fontsState}\r\n onFontsUpdated={onFontsUpdated}\r\n palettesState={palettesState}\r\n onPalettesUpdated={onPalettesUpdated}\r\n brandKit={brandKit}\r\n />\r\n }\r\n {\r\n currentView === ViewName.AudioView &&\r\n <EditVideoAudioView\r\n i18n={i18n}\r\n audioState={audioState}\r\n setAudioState={setAudioState}\r\n rawAudioList={rawAudioList}\r\n />\r\n }\r\n <div className=\"message-bar\">\r\n {\r\n generateError &&\r\n <MessageBar\r\n messageBarType={MessageBarType.error}\r\n isMultiline\r\n onDismiss={() => setGenerateError(undefined)}\r\n dismissButtonAriaLabel=\"Close\"\r\n >\r\n {generateError}\r\n </MessageBar>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n <div className={mergeClasses(classes.actionBarFooter, 'generate-video-button-container')}>\r\n <div>\r\n <Divider />\r\n </div>\r\n <div className={mergeClasses(classes.generateButtonContainer, 'generate-video-button-container')}>\r\n <Button\r\n icon={<Send16Regular />}\r\n appearance=\"primary\"\r\n onClick={handleGenerate}\r\n className={mergeClasses(classes.generateButton, 'generate-video-button')}\r\n >\r\n {i18n.getString(_TL_('View updated scenes'))}\r\n </Button>\r\n </div>\r\n </div>\r\n </div>\r\n <div className={mergeClasses(classes.previewContainer, 'edit-video-page-preview-container')}>\r\n <div className={mergeClasses(classes.scenePreview, 'edit-video-page-preview', classes.containerWrapper)}>\r\n <ScenePreview\r\n selectedSceneId={selectedSceneId}\r\n scenes={scenes}\r\n />\r\n </div>\r\n <div className={mergeClasses(classes.storyBoardContainer, 'edit-video-page-storyboard-container')}>\r\n <StoryBoardView\r\n i18n={i18n}\r\n scenes={scenes}\r\n selectedSceneId={selectedSceneId}\r\n onSceneSelected={onSceneSelected}\r\n videoMetadata={video}\r\n templateDetail={templateDetail}\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n {\r\n !isGeneratingVideo && (!videoMetaData || !videoMetaData.template) &&\r\n <div>\r\n <div className=\"message-bar\">\r\n <MessageBar messageBarType={MessageBarType.error} >\r\n {i18n.getString(_TL_('An error occured while loading the video.'))}\r\n </MessageBar>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </FluentProvider>\r\n ), [permissions, isGeneratingVideo, classes, aid, cid, i18n, oDataConfig, onChangeImage, onChangeLogo, onSceneSelected, preferenceService, perfMarker, selectedSceneId, scenes, currentView, serverContext, setCurrentView, video, videoSettings, fontsState, palettesState, onFontsUpdated, onPalettesUpdated, audioState, setAudioState, handleGenerate, onImageUpdated, onLogoUpdated, setVideoSettings, handleTextListChange, recommendedAssets, isLoadingRecommendedAssets, brandKit, isLoadingBrandKit]);\r\n\r\n return (\r\n isDialog ? (\r\n <FluentProvider theme={webLightTheme} style={{ height: '100%' }}>\r\n <Drawer\r\n type=\"overlay\"\r\n modalType=\"modal\"\r\n open={isOpen}\r\n position=\"end\"\r\n size=\"large\"\r\n ref={ref}\r\n separator\r\n className={mergeClasses('video-ads-editor-panel', classes.videoEditor)}\r\n >\r\n <DrawerHeader>\r\n <DrawerHeaderTitle\r\n action={\r\n <Button\r\n appearance=\"subtle\"\r\n aria-label={i18n.getString(_TL_('Close'))}\r\n icon={<Dismiss24Regular />}\r\n onClick={() => setIsOpen(false)}\r\n />\r\n }\r\n >\r\n {i18n.getString(_TL_('Edit your video'))}\r\n </DrawerHeaderTitle>\r\n </DrawerHeader>\r\n <DrawerBody\r\n styles={{\r\n root: {\r\n paddingLeft: '0px',\r\n paddingRight: '0px',\r\n },\r\n }}\r\n >\r\n <div className={mergeClasses(classes.leftPanelTop, classes.containerWrapper)}>\r\n {VideoEditContent}\r\n </div>\r\n </DrawerBody>\r\n <DrawerFooter>\r\n <div className={classNames(classes.bottom, 'view-bottom')}>\r\n <div className=\"button-container\">\r\n <Button\r\n appearance=\"primary\"\r\n className=\"apply-button\"\r\n onClick={onHandleApply}\r\n >\r\n {i18n.getString(_TL_('Apply'))}\r\n </Button>\r\n <Button\r\n className=\"cancel-button\"\r\n onClick={() => {\r\n setIsOpen(false);\r\n logger.logTrace('Copilot video editor: Cancel button clicked');\r\n }}\r\n >\r\n {i18n.getString(_TL_('Cancel'))}\r\n </Button>\r\n <Button\r\n icon={<VideoRegular />}\r\n className=\"preview-button\"\r\n onClick={() => {\r\n setShowPreviewVideoModal(true);\r\n if (activity && activity.signal) {\r\n const message = `[VideoAdsEditor] - Edit Video - Preview - TemplateId:${videoMetaData.template.templateId}, AdStudio:${showVideoTemplateSummaryBarControl}`;\r\n activity.signal(message);\r\n }\r\n }}\r\n >\r\n {i18n.getString(_TL_('Preview video'))}\r\n </Button>\r\n </div>\r\n </div>\r\n </DrawerFooter>\r\n </Drawer>\r\n </FluentProvider>\r\n ) : (\r\n <div className={classes.containerWrapper}>\r\n {VideoEditContent}\r\n </div>\r\n )\r\n );\r\n};\r\n\r\nEditVideoPageComponent.propTypes = {\r\n i18n: PropTypes.shape({}).isRequired,\r\n isOpen: PropTypes.bool.isRequired,\r\n setIsOpen: PropTypes.func.isRequired,\r\n videoMetaData: PropTypes.shape({\r\n images: PropTypes.arrayOf(PropTypes.string),\r\n text: PropTypes.arrayOf(PropTypes.string),\r\n }).isRequired,\r\n cid: PropTypes.string.isRequired,\r\n aid: PropTypes.string.isRequired,\r\n oDataConfig: PropTypes.shape({}).isRequired,\r\n finalUrl: PropTypes.string.isRequired,\r\n activity: PropTypes.shape({\r\n signal: PropTypes.func,\r\n }).isRequired,\r\n onChangeImage: PropTypes.func.isRequired,\r\n onChangeLogo: PropTypes.func.isRequired,\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func.isRequired,\r\n }).isRequired,\r\n dataService: PropTypes.shape({}).isRequired,\r\n copilotDataService: PropTypes.shape({}).isRequired,\r\n isCTV: PropTypes.bool,\r\n preferenceService: PropTypes.shape({}).isRequired,\r\n serverContext: PropTypes.shape({}).isRequired,\r\n perfMarker: PropTypes.shape({}).isRequired,\r\n isDialog: PropTypes.bool,\r\n permissions: PropTypes.shape({}).isRequired,\r\n loadClipchampPlayer: PropTypes.func.isRequired,\r\n brandKit: PropTypes.shape({\r\n palettes: PropTypes.arrayOf(PropTypes.shape({\r\n Name: PropTypes.string,\r\n HexCode: PropTypes.string,\r\n isBrandKitColor: PropTypes.bool,\r\n })),\r\n }).isRequired,\r\n templateDetail: PropTypes.shape({\r\n templateId: PropTypes.string,\r\n templateName: PropTypes.string,\r\n }).isRequired,\r\n isLoadingBrandKit: PropTypes.bool.isRequired,\r\n onApply: PropTypes.func.isRequired,\r\n instrumentation: PropTypes.shape({}).isRequired,\r\n showVideoTemplateSummaryBarControl: PropTypes.bool.isRequired,\r\n};\r\n\r\nEditVideoPageComponent.defaultProps = {\r\n isCTV: false,\r\n isDialog: false,\r\n};\r\n","import { useState } from 'react';\r\nimport { ViewName } from './util';\r\n\r\n\r\nexport const useNavigationState = () => {\r\n const [currentView, setCurrentView] = useState(ViewName.AssetsView);\r\n\r\n return {\r\n currentView,\r\n setCurrentView,\r\n };\r\n};\r\n","import { extensionEditorStyles } from '@bingads-webui-campaign-react/common-styles';\r\n\r\nexport const getGlobalLogoPickerStyles = (_, { palette = {} }) => ({\r\n '@global': {\r\n ...extensionEditorStyles({ palette }),\r\n },\r\n});\r\n","/* eslint-disable no-param-reassign */\r\nimport React, { useState, useEffect, useCallback, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { getImageValidationErrorMessage } from '@bingads-webui-campaign/image-experience-utils';\r\nimport { useBrandKitService } from '@bingads-webui-campaign-react/brandkit-data-service';\r\nimport { useCopilotRepositoryContext } from '@bingads-webui/inline-copilot';\r\nimport { withCopilotDomainDataService } from '@bingads-webui-campaign-react/copilot-domain-data-service';\r\nimport { withRecommendationContext } from '@bingads-webui-campaign-react/perf-max-recommendation';\r\nimport { withInstrumentation, InstrumentationContext } from '@bingads-webui-react/hoc-with-instrumentation';\r\nimport { withLoggingContext } from '@bingads-webui-campaign-react/copilot-loggers';\r\nimport { EditVideoPageComponent } from './video-template-editor';\r\nimport { getGlobalLogoPickerStyles } from './styles';\r\n\r\nexport const VideoTemplateEditorWithAddImageWrapperImp = ({\r\n assetLibraryConfig,\r\n activity,\r\n i18n,\r\n logger,\r\n assetLibraryUserPreferences,\r\n assetLibraryAccountPreferences,\r\n ianaTimeZone,\r\n onApply,\r\n isOpen,\r\n setIsOpen,\r\n videoMetaData,\r\n cid,\r\n aid,\r\n oDataConfig,\r\n finalUrl,\r\n isCTV,\r\n preferenceService,\r\n serverContext,\r\n isDialog,\r\n permissions,\r\n loadClipchampPlayer,\r\n copilotDomainDataService,\r\n showVideoTemplateSummaryBarControl,\r\n ...rest\r\n}) => {\r\n const [, setShowAddImagePanel] = useState(false);\r\n const [, setMinSizeOfImage] = useState([0, 0]);\r\n const [, setShowAddLogoPanel] = useState(false);\r\n const [brandKit, setBrandKit] = useState({});\r\n const [isLoadingBrandKit, setIsLoadingBrandKit] = useState(false);\r\n const [templateDetail, setTemplateDetail] = useState(null);\r\n const [rawAudioList, setRawAudioList] = useState([]);\r\n const instrumentation = useContext(InstrumentationContext);\r\n\r\n assetLibraryConfig.assetLibraryUserPreferences = assetLibraryUserPreferences;\r\n assetLibraryConfig.assetLibraryAccountPreferences = assetLibraryAccountPreferences;\r\n assetLibraryConfig.logger = logger;\r\n assetLibraryConfig.ianaTimeZone = ianaTimeZone;\r\n assetLibraryConfig.onImageAddError = (e) => {\r\n const errorCode = e && e.errors && e.errors[0] && e.errors[0].Code;\r\n const errorMessage = getImageValidationErrorMessage({ message: errorCode }, i18n);\r\n return errorMessage;\r\n };\r\n\r\n const copilotDataService = useCopilotRepositoryContext();\r\n const { brandKitDataService } = useBrandKitService();\r\n const { getBrandKits } = brandKitDataService;\r\n\r\n // Fetch BrandKits\r\n const fetchBrandKits = useCallback(async () => {\r\n if (getBrandKits) {\r\n setIsLoadingBrandKit(true);\r\n const { response } = await getBrandKits(aid);\r\n if (Array.isArray(response) && response.length > 0) {\r\n setBrandKit(response[0]);\r\n }\r\n setIsLoadingBrandKit(false);\r\n }\r\n }, [aid, getBrandKits]);\r\n\r\n const fetchTemplateDetails = useCallback(async () => {\r\n if (copilotDomainDataService && videoMetaData && videoMetaData.template.templateId) {\r\n try {\r\n const templateFilter = {\r\n TemplateIds: [videoMetaData.template.templateId],\r\n };\r\n const { response } = await copilotDomainDataService.getVideoTemplates(templateFilter, i18n);\r\n setTemplateDetail((response && response.Templates && response.Templates.length > 0 ? response.Templates[0] : null));\r\n } catch (error) {\r\n setTemplateDetail(null);\r\n }\r\n }\r\n }, [copilotDomainDataService, videoMetaData, i18n]);\r\n\r\n const fetchAudioList = useCallback(async () => {\r\n const { response, error } = await copilotDomainDataService.getAudioList();\r\n if (error) {\r\n setRawAudioList([]);\r\n return;\r\n }\r\n\r\n setRawAudioList(response);\r\n }, [copilotDomainDataService]);\r\n\r\n useEffect(() => {\r\n fetchAudioList();\r\n }, [fetchAudioList]);\r\n\r\n useEffect(() => {\r\n fetchBrandKits();\r\n }, [fetchBrandKits]);\r\n\r\n useEffect(() => {\r\n fetchTemplateDetails();\r\n }, [fetchTemplateDetails]);\r\n\r\n useEffect(() => {\r\n if (activity && activity.signal) {\r\n const message = `[VideoAdsEditor] - Edit Video - Open - TemplateId:${videoMetaData.template.templateId}, AdStudio:${showVideoTemplateSummaryBarControl}`;\r\n activity.signal(message);\r\n }\r\n }, [activity, videoMetaData, showVideoTemplateSummaryBarControl]);\r\n\r\n return (\r\n <div className=\"video-editor-with-add-image-wrapper\">\r\n <EditVideoPageComponent\r\n i18n={i18n}\r\n activity={activity}\r\n onApply={onApply}\r\n isOpen={isOpen}\r\n setIsOpen={setIsOpen}\r\n videoMetaData={videoMetaData}\r\n cid={cid}\r\n aid={aid}\r\n oDataConfig={oDataConfig}\r\n finalUrl={finalUrl}\r\n copilotDataService={copilotDataService}\r\n logger={logger}\r\n onChangeImage={(minSize) => {\r\n setShowAddImagePanel(true);\r\n setMinSizeOfImage(minSize);\r\n }}\r\n assetLibraryConfig={assetLibraryConfig}\r\n onChangeLogo={() => setShowAddLogoPanel(true)}\r\n isCTV={isCTV}\r\n preferenceService={preferenceService}\r\n serverContext={serverContext}\r\n perfMarker={rest.perfMarker}\r\n isDialog={isDialog}\r\n permissions={permissions}\r\n loadClipchampPlayer={loadClipchampPlayer}\r\n brandKit={brandKit}\r\n isLoadingBrandKit={isLoadingBrandKit}\r\n templateDetail={templateDetail}\r\n copilotDomainDataService={copilotDomainDataService}\r\n instrumentation={instrumentation}\r\n showVideoTemplateSummaryBarControl={showVideoTemplateSummaryBarControl}\r\n rawAudioList={rawAudioList}\r\n />\r\n </div>\r\n );\r\n};\r\n\r\nVideoTemplateEditorWithAddImageWrapperImp.propTypes = {\r\n assetLibraryConfig: PropTypes.shape({\r\n activityLogger: PropTypes.shape({}),\r\n assetLibraryUserPreferences: PropTypes.shape({}),\r\n assetLibraryAccountPreferences: PropTypes.shape({}),\r\n ianaTimeZone: PropTypes.string,\r\n logger: PropTypes.shape({}),\r\n onImageAddError: PropTypes.func,\r\n }).isRequired,\r\n copilotDataService: PropTypes.shape({}).isRequired,\r\n i18n: PropTypes.shape({}).isRequired,\r\n initialView: PropTypes.string.isRequired,\r\n isAssetLibraryAIGCMVPEnabled: PropTypes.bool.isRequired,\r\n isLiteLandingPageEnabled: PropTypes.bool.isRequired,\r\n logger: PropTypes.shape({}).isRequired,\r\n assetLibraryUserPreferences: PropTypes.shape({}).isRequired,\r\n assetLibraryAccountPreferences: PropTypes.shape({}).isRequired,\r\n ianaTimeZone: PropTypes.string.isRequired,\r\n onApply: PropTypes.func.isRequired,\r\n isOpen: PropTypes.bool.isRequired,\r\n setIsOpen: PropTypes.func.isRequired,\r\n videoMetaData: PropTypes.shape({\r\n images: PropTypes.arrayOf(PropTypes.string),\r\n text: PropTypes.arrayOf(PropTypes.string),\r\n }).isRequired,\r\n cid: PropTypes.string.isRequired,\r\n aid: PropTypes.string.isRequired,\r\n oDataConfig: PropTypes.shape({}).isRequired,\r\n finalUrl: PropTypes.string.isRequired,\r\n permissions: PropTypes.shape({\r\n IsSocialMediaImagesEnabled: PropTypes.bool,\r\n }).isRequired,\r\n isCTV: PropTypes.bool,\r\n preferenceService: PropTypes.shape({}).isRequired,\r\n serverContext: PropTypes.shape({}).isRequired,\r\n isDialog: PropTypes.bool,\r\n loadClipchampPlayer: PropTypes.func.isRequired,\r\n};\r\n\r\nVideoTemplateEditorWithAddImageWrapperImp.defaultProps = {\r\n isCTV: false,\r\n isDialog: false,\r\n};\r\n\r\nexport const VideoTemplateEditorWithAddImageWrapper = withInstrumentation(withLoggingContext(withRecommendationContext(withCopilotDomainDataService(withDefaultStyles(VideoTemplateEditorWithAddImageWrapperImp, getGlobalLogoPickerStyles)))));\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport {\r\n withAssetLibraryServicesLoaded,\r\n} from '@bingads-webui-campaign-react/asset-library-services';\r\nimport { FolderAssetType } from '@bingads-webui-campaign-react/asset-library-model';\r\nimport { CampaignFetchProvider } from '@bingads-webui-campaign-react/campaign-http';\r\nimport { CopilotRepositoryProvider } from '@bingads-webui/inline-copilot';\r\nimport { VideoTemplateEditorWithAddImageWrapper } from './video-template-add-image-wrapper';\r\n\r\nconst EditVideoPageComponentWithDataServices = withAssetLibraryServicesLoaded(VideoTemplateEditorWithAddImageWrapper, { loggerTag: 'Video Template Editor' });\r\n\r\nexport const VideoTemplateEditorContextWrapper = ({\r\n assetLibraryConfig,\r\n permissions,\r\n isAADUser,\r\n isLiteLandingPageEnabled,\r\n isOpen,\r\n setIsOpen,\r\n videoMetaData,\r\n onApply,\r\n cid,\r\n aid,\r\n finalUrl,\r\n perfMarker,\r\n i18n,\r\n isCTV,\r\n serverContext,\r\n isDialog,\r\n loadClipchampPlayer,\r\n showVideoTemplateSummaryBarControl,\r\n}) => {\r\n // todo: don't pilot AAD user for now, remove this check after the feature is GAed\r\n const isAssetLibraryAIGCMVPEnabled = !isAADUser;\r\n\r\n const {\r\n timeZone,\r\n preferencesService,\r\n activityLogger,\r\n oDataConfig,\r\n dateFormat,\r\n } = assetLibraryConfig;\r\n\r\n const useClipchamp = permissions && permissions.dynamic && permissions.dynamic.VideoTemplateUI;\r\n\r\n return (\r\n isOpen ?\r\n <CampaignFetchProvider>\r\n <CopilotRepositoryProvider\r\n campaignId={-1}\r\n recommendationType=\"Video\" // This is used until we have a separate video recommendationType\r\n finalUrl={finalUrl}\r\n serverContext={serverContext}\r\n perfMarker={perfMarker}\r\n locale={i18n.getLocale()}\r\n useClipchamp={useClipchamp}\r\n enableLogoAndCTA\r\n >\r\n <EditVideoPageComponentWithDataServices\r\n accountTimeZone={timeZone}\r\n preferenceService={preferencesService}\r\n activity={activityLogger}\r\n assetLibraryConfig={assetLibraryConfig}\r\n oDataConfig={oDataConfig}\r\n allowedAssetType={FolderAssetType.Image}\r\n isAssetLibraryAIGCMVPEnabled={isAssetLibraryAIGCMVPEnabled}\r\n isLiteLandingPageEnabled={isLiteLandingPageEnabled}\r\n dateFormat={dateFormat}\r\n permissions={permissions}\r\n isOpen={isOpen}\r\n setIsOpen={setIsOpen}\r\n videoMetaData={videoMetaData}\r\n onApply={onApply}\r\n cid={cid}\r\n aid={aid}\r\n finalUrl={finalUrl}\r\n perfMarker={perfMarker}\r\n i18n={i18n}\r\n isCTV={isCTV}\r\n serverContext={serverContext}\r\n isDialog={isDialog}\r\n loadClipchampPlayer={loadClipchampPlayer}\r\n showVideoTemplateSummaryBarControl={showVideoTemplateSummaryBarControl}\r\n />\r\n </CopilotRepositoryProvider>\r\n </CampaignFetchProvider >\r\n : null\r\n );\r\n};\r\n\r\nVideoTemplateEditorContextWrapper.propTypes = {\r\n assetLibraryConfig: PropTypes.shape({\r\n timeZone: PropTypes.number,\r\n preferencesService: PropTypes.shape({}),\r\n activityLogger: PropTypes.shape({}),\r\n oDataConfig: PropTypes.shape({}),\r\n dateFormat: PropTypes.string,\r\n }).isRequired,\r\n permissions: PropTypes.shape({}).isRequired,\r\n isOpen: PropTypes.bool.isRequired,\r\n setIsOpen: PropTypes.func.isRequired,\r\n videoMetaData: PropTypes.shape().isRequired,\r\n onApply: PropTypes.func.isRequired,\r\n cid: PropTypes.string.isRequired,\r\n aid: PropTypes.string.isRequired,\r\n finalUrl: PropTypes.string.isRequired,\r\n perfMarker: PropTypes.shape({}).isRequired,\r\n i18n: PropTypes.shape({}).isRequired,\r\n isAADUser: PropTypes.bool,\r\n isLiteLandingPageEnabled: PropTypes.bool,\r\n isCTV: PropTypes.bool,\r\n serverContext: PropTypes.shape({}).isRequired,\r\n isDialog: PropTypes.bool,\r\n};\r\n\r\nVideoTemplateEditorContextWrapper.defaultProps = {\r\n isLiteLandingPageEnabled: false,\r\n isAADUser: false,\r\n isCTV: false,\r\n isDialog: false,\r\n};\r\n","import { mergeStyles } from '@fluentui/style-utilities';\r\n\r\nexport const defaultIconClass = mergeStyles({\r\n display: 'flex',\r\n});\r\n\r\nexport const getIconClass = (colorString = 'white') => mergeStyles(defaultIconClass, {\r\n selectors: {\r\n svg: {\r\n fill: colorString,\r\n },\r\n },\r\n});\r\n","/* eslint-disable jsx-a11y/media-has-caption */\r\nimport React, { useRef, useEffect, useState, useMemo, Fragment } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport classnames from 'classnames';\r\nimport { IconButton, Slider } from '@fluentui/react';\r\nimport { registerIcons } from '@fluentui/style-utilities';\r\n\r\nimport { getIconClass } from './styles';\r\n\r\nregisterIcons({\r\n icons: {\r\n videoPlayBig: (\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"black\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M7.60846 4.61507C7.1087 4.34314 6.5 4.70491 6.5 5.27386V18.7262C6.5 19.2951 7.1087 19.6569 7.60846 19.385L19.97 12.6588C20.4921 12.3747 20.4921 11.6253 19.97 11.3412L7.60846 4.61507ZM5 5.27386C5 3.56701 6.82609 2.4817 8.32538 3.29749L20.687 10.0236C22.2531 10.8758 22.2531 13.1242 20.687 13.9764L8.32538 20.7025C6.82609 21.5183 5 20.433 5 18.7262V5.27386Z\" /></svg>\r\n ),\r\n videoPause: (\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"black\" xmlns=\"http://www.w3.org/2000/svg\"><path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M3.99609 4.75C3.99609 3.7835 4.7796 3 5.74609 3H9.24609C10.2126 3 10.9961 3.7835 10.9961 4.75V19.25C10.9961 20.2165 10.2126 21 9.24609 21H5.74609C4.7796 21 3.99609 20.2165 3.99609 19.25V4.75ZM5.74609 4.5C5.60802 4.5 5.49609 4.61193 5.49609 4.75V19.25C5.49609 19.3881 5.60802 19.5 5.74609 19.5H9.24609C9.38416 19.5 9.49609 19.3881 9.49609 19.25V4.75C9.49609 4.61193 9.38416 4.5 9.24609 4.5H5.74609ZM12.9961 4.75C12.9961 3.7835 13.7796 3 14.7461 3H18.2461C19.2126 3 19.9961 3.7835 19.9961 4.75V19.25C19.9961 20.2165 19.2126 21 18.2461 21H14.7461C13.7796 21 12.9961 20.2165 12.9961 19.25V4.75ZM14.7461 4.5C14.608 4.5 14.4961 4.61193 14.4961 4.75V19.25C14.4961 19.3881 14.608 19.5 14.7461 19.5H18.2461C18.3842 19.5 18.4961 19.3881 18.4961 19.25V4.75C18.4961 4.61193 18.3842 4.5 18.2461 4.5H14.7461Z\" /></svg>\r\n ),\r\n videoReplay: (\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"black\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M12 4.5C16.1421 4.5 19.5 7.85786 19.5 12C19.5 16.1421 16.1421 19.5 12 19.5C7.85786 19.5 4.5 16.1421 4.5 12C4.5 11.6236 4.52772 11.2538 4.58123 10.8923C4.64845 10.4382 4.31609 10 3.85708 10C3.48623 10 3.161 10.2562 3.10471 10.6228C3.03576 11.0718 3 11.5317 3 12C3 16.9706 7.02944 21 12 21C16.9706 21 21 16.9706 21 12C21 7.02944 16.9706 3 12 3C9.69494 3 7.59227 3.86656 6 5.29168V4.25C6 3.83579 5.66421 3.5 5.25 3.5C4.83579 3.5 4.5 3.83579 4.5 4.25V7.25C4.5 7.66421 4.83579 8 5.25 8H8.25C8.66421 8 9 7.66421 9 7.25C9 6.83579 8.66421 6.5 8.25 6.5H6.90093C8.23907 5.25883 10.0309 4.5 12 4.5Z\" /></svg>\r\n ),\r\n videoMute: (\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"black\" xmlns=\"http://www.w3.org/2000/svg\"><path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M2.21968 2.21966C2.51257 1.92677 2.98745 1.92678 3.28034 2.21968L21.7801 20.7198C22.073 21.0127 22.073 21.4876 21.7801 21.7805C21.4872 22.0734 21.0123 22.0734 20.7194 21.7805L15 16.0609V19.7456C15 20.8242 13.7255 21.3965 12.9194 20.6797L8.42793 16.686C8.29063 16.5639 8.11329 16.4965 7.92956 16.4965H4.25C3.00736 16.4965 2 15.4891 2 14.2465V9.74856C2 8.50592 3.00736 7.49856 4.25 7.49856H6.43782L2.21966 3.28032C1.92677 2.98743 1.92678 2.51255 2.21968 2.21966ZM13.5 19.1888V14.5609L7.93777 8.99855L7.92961 8.99856H4.25C3.83579 8.99856 3.5 9.33435 3.5 9.74856V14.2465C3.5 14.6607 3.83579 14.9965 4.25 14.9965H7.92956C8.48074 14.9965 9.01275 15.1988 9.42465 15.565L13.5 19.1888ZM13.4995 10.3177V4.8063L10.582 7.40015L9.51953 6.33766L12.919 3.31533C13.725 2.59866 14.9995 3.17089 14.9995 4.24951V11.8177L13.4995 10.3177ZM17.1412 13.9588L18.2792 15.0969C18.741 14.1624 19.0002 13.1103 19.0002 11.9996C19.0002 10.7964 18.696 9.66203 18.1598 8.67142C17.9626 8.30715 17.5074 8.17171 17.1432 8.36891C16.7789 8.5661 16.6434 9.02125 16.8406 9.38551C17.2611 10.1623 17.5002 11.0519 17.5002 11.9996C17.5002 12.6906 17.3731 13.3508 17.1412 13.9588ZM20.4811 17.2999L19.3877 16.2065C20.0954 14.9664 20.4996 13.5312 20.4996 12.0001C20.4996 10.1063 19.8811 8.35899 18.8349 6.94644C18.5884 6.61358 18.6583 6.14389 18.9912 5.89736C19.324 5.65082 19.7937 5.7208 20.0403 6.05365C21.2713 7.71573 21.9996 9.77393 21.9996 12.0001C21.9996 13.9458 21.4433 15.7632 20.4811 17.2999Z\" /></svg>\r\n ),\r\n videoUnmute: (\r\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 22 22\" fill=\"black\" xmlns=\"http://www.w3.org/2000/svg\"><path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M13 2.25049C13 1.17187 11.7255 0.599636 10.9195 1.31632L6.42794 5.30958C6.29065 5.43165 6.11333 5.49908 5.92961 5.49908H2.25C1.00736 5.49908 0 6.50644 0 7.74908V12.247C0 13.4896 1.00736 14.497 2.25 14.497H5.92956C6.11329 14.497 6.29063 14.5644 6.42793 14.6865L10.9194 18.6802C11.7255 19.397 13 18.8248 13 17.7461V2.25049ZM7.4246 6.4306L11.5 2.80728V17.1893L7.42465 13.5656C7.01275 13.1993 6.48074 12.997 5.92956 12.997H2.25C1.83579 12.997 1.5 12.6612 1.5 12.247V7.74908C1.5 7.33486 1.83579 6.99908 2.25 6.99908H5.92961C6.48075 6.99908 7.01272 6.79679 7.4246 6.4306ZM16.9912 3.89736C17.324 3.65082 17.7937 3.7208 18.0403 4.05365C19.2713 5.71573 19.9996 7.77393 19.9996 10C19.9996 12.2261 19.2713 14.2843 18.0403 15.9464C17.7937 16.2793 17.324 16.3492 16.9912 16.1027C16.6583 15.8562 16.5884 15.3865 16.8349 15.0536C17.8811 13.6411 18.4996 11.8939 18.4996 10C18.4996 8.10623 17.8811 6.35899 16.8349 4.94644C16.5884 4.61359 16.6583 4.1439 16.9912 3.89736ZM16.1598 6.67142C15.9626 6.30715 15.5074 6.17172 15.1432 6.36891C14.7789 6.5661 14.6434 7.02125 14.8406 7.38551C15.2611 8.16228 15.5002 9.05188 15.5002 9.99958C15.5002 10.9473 15.2611 11.8369 14.8406 12.6137C14.6434 12.9779 14.7789 13.4331 15.1432 13.6303C15.5074 13.8275 15.9626 13.692 16.1598 13.3278C16.696 12.3372 17.0002 11.2028 17.0002 9.99958C17.0002 8.79638 16.696 7.66203 16.1598 6.67142Z\" /></svg>\r\n ),\r\n },\r\n});\r\n\r\nfunction padTime(time) {\r\n return Math.floor(time).toString().padStart(2, '0');\r\n}\r\n\r\nfunction Time({ currentTime, duration }) {\r\n const durationString = `${padTime(duration / 60)}:${padTime(duration % 60)}`;\r\n const currentTimeString = `${padTime(currentTime / 60)}:${padTime(currentTime % 60)}`;\r\n const divider = ' / ';\r\n\r\n return (\r\n <div className=\"time\">\r\n <span className=\"currentTime\">{currentTimeString}</span>\r\n <span className=\"divider\">{divider}</span>\r\n <span className=\"totalTime\">{durationString}</span>\r\n </div>\r\n );\r\n}\r\n\r\nTime.prototype.propTypes = {\r\n currentTime: PropTypes.number.isRequired,\r\n duration: PropTypes.number.isRequired,\r\n};\r\n\r\nexport function VideoPureComponent({\r\n i18n,\r\n ariaLabel,\r\n src,\r\n muteByDefault,\r\n className,\r\n classes,\r\n autoPlay,\r\n onVideoLoaded,\r\n iconColor,\r\n maxWidth,\r\n showTime,\r\n id,\r\n showPlay,\r\n customPlayObject,\r\n}) {\r\n const videoElement = useRef(null);\r\n const [volumeVisible, setVolumeVisible] = useState(false);\r\n const [paused, setPaused] = useState(true);\r\n const [muted, setMuted] = useState(muteByDefault);\r\n const [ended, setEnded] = useState(false);\r\n const [currentTime, setCurrentTime] = useState(0);\r\n const [duration, setDuration] = useState(0);\r\n const iconClass = getIconClass(iconColor);\r\n\r\n useEffect(() => {\r\n if (!videoElement.current) return;\r\n videoElement.current.onplay = () => {\r\n setPaused(false);\r\n setEnded(false);\r\n };\r\n videoElement.current.onpause = () => {\r\n setPaused(true);\r\n };\r\n videoElement.current.onended = () => {\r\n setEnded(true);\r\n };\r\n videoElement.current.ontimeupdate = (event) => {\r\n setCurrentTime(event.target.currentTime);\r\n };\r\n videoElement.current.onloadeddata = (event) => {\r\n onVideoLoaded();\r\n setDuration(event.target.duration);\r\n };\r\n }, [videoElement, onVideoLoaded]);\r\n\r\n useEffect(() => {\r\n if (customPlayObject) {\r\n const { play } = customPlayObject;\r\n if (play) {\r\n videoElement.current.play();\r\n } else {\r\n videoElement.current.pause();\r\n }\r\n }\r\n }, [customPlayObject]);\r\n\r\n const onUserSlideProgress = (v) => {\r\n if (_.isFinite(v)) {\r\n videoElement.current.currentTime = v;\r\n }\r\n if (videoElement && videoElement.current.paused) {\r\n videoElement.current.play();\r\n }\r\n };\r\n\r\n const onVolumeClick = () => {\r\n setMuted(!muted);\r\n };\r\n\r\n const playIconName = useMemo(() => {\r\n if (ended) {\r\n return 'videoReplay';\r\n }\r\n\r\n return paused ? 'videoPlayBig' : 'videoPause';\r\n }, [ended, paused]);\r\n\r\n useEffect(() => {\r\n if (onVideoLoaded && _.get(videoElement, ['current', 'complete'], false)) {\r\n onVideoLoaded();\r\n }\r\n }, [onVideoLoaded, videoElement]);\r\n\r\n const width = maxWidth ? { width: maxWidth } : {};\r\n\r\n return (\r\n <div className={classnames('video-container', classes.videoContainer, className)} style={{ ...width }}>\r\n <video ref={videoElement} className={classes.previewVideo} aria-label={ariaLabel} muted={muted} autoPlay={autoPlay} onLoadedData={onVideoLoaded} id={id}>\r\n <source src={src} />\r\n </video>\r\n <div className={classnames(classes.root, 'video-previewer-root')}>\r\n <Fragment>\r\n <div className={classes.container}>\r\n {\r\n showPlay &&\r\n <IconButton\r\n className={iconClass}\r\n ariaLabel={paused ? i18n.getString(_TL_('Play')) : i18n.getString(_TL_('Pause'))}\r\n iconProps={{ iconName: playIconName }}\r\n onClick={() => (paused ? videoElement.current.play() : videoElement.current.pause())}\r\n />\r\n }\r\n {showTime && <Time currentTime={currentTime || 0} duration={duration || 0} />}\r\n <Slider\r\n className={classes.sliderContainer}\r\n min={0}\r\n max={_.get(videoElement, ['current', 'duration'], 0)}\r\n value={currentTime || 0}\r\n aria-label={i18n.getString(_TL_('Video progress'))}\r\n showValue={false}\r\n onChange={onUserSlideProgress}\r\n />\r\n <IconButton\r\n className={iconClass}\r\n ariaLabel={muted ? i18n.getString(_TL_('Unmute')) : i18n.getString(_TL_('Mute'))}\r\n iconProps={{ iconName: muted ? 'videoMute' : 'videoUnmute' }}\r\n onMouseOver={() => setVolumeVisible(!volumeVisible)}\r\n onFocus={() => setVolumeVisible(!volumeVisible)}\r\n onClick={onVolumeClick}\r\n />\r\n </div>\r\n </Fragment>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nVideoPureComponent.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n classes: PropTypes.shape({\r\n previewVideo: PropTypes.string,\r\n root: PropTypes.string,\r\n container: PropTypes.string,\r\n volumeIcon: PropTypes.string,\r\n volumeSlider: PropTypes.string,\r\n videoControlsShadow: PropTypes.string,\r\n sliderContainer: PropTypes.string,\r\n videoContainer: PropTypes.string,\r\n }).isRequired,\r\n ariaLabel: PropTypes.string.isRequired,\r\n src: PropTypes.string.isRequired,\r\n className: PropTypes.string,\r\n muteByDefault: PropTypes.bool,\r\n autoPlay: PropTypes.bool,\r\n onVideoLoaded: PropTypes.func,\r\n iconColor: PropTypes.string,\r\n id: PropTypes.string,\r\n showTime: PropTypes.bool,\r\n maxWidth: PropTypes.number,\r\n showPlay: PropTypes.bool,\r\n customPlayObject: PropTypes.shape({\r\n play: PropTypes.bool,\r\n }),\r\n};\r\n\r\nVideoPureComponent.defaultProps = {\r\n className: '',\r\n showTime: false,\r\n muteByDefault: false,\r\n autoPlay: false,\r\n onVideoLoaded: _.noop,\r\n iconColor: 'white',\r\n id: '',\r\n maxWidth: 0,\r\n showPlay: true,\r\n customPlayObject: null,\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Icon } from '@bingads-webui-react/fabric-control';\r\n\r\nexport const FailedPlaceholder = props => (\r\n <div className={props.classes.failed}>\r\n <Icon\r\n className=\"placeholder-icon\"\r\n iconName=\"ErrorBadge\"\r\n />\r\n <div className=\"placeholder-content\" style={{ fontWeight: 600, color: props.textColor }}>{props.placeholderContent}</div>\r\n </div>\r\n);\r\n\r\nFailedPlaceholder.propTypes = {\r\n placeholderContent: PropTypes.string.isRequired,\r\n textColor: PropTypes.string,\r\n classes: PropTypes.shape({\r\n failed: PropTypes.string.isRequired,\r\n }).isRequired,\r\n};\r\n\r\nFailedPlaceholder.defaultProps = {\r\n textColor: undefined,\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Icon } from '@bingads-webui-react/fabric-control';\r\n\r\nexport const EncodingPlaceholder = props => (\r\n <div className={props.classes.encoding}>\r\n <Icon\r\n className=\"placeholder-icon\"\r\n iconName=\"ProgressRingDots\"\r\n />\r\n <div className=\"placeholder-content\" style={{ fontWeight: 600, color: props.textColor }}>{props.placeholderContent}</div>\r\n </div>\r\n);\r\n\r\nEncodingPlaceholder.propTypes = {\r\n placeholderContent: PropTypes.string.isRequired,\r\n textColor: PropTypes.string,\r\n classes: PropTypes.shape({\r\n encoding: PropTypes.string.isRequired,\r\n }).isRequired,\r\n};\r\n\r\nEncodingPlaceholder.defaultProps = {\r\n textColor: undefined,\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Icon } from '@bingads-webui-react/fabric-control';\r\n\r\nexport const UnverifiedPlaceholder = props => (\r\n <div className={props.classes.unverified}>\r\n <div className=\"download-icon-container\">\r\n <Icon\r\n className=\"placeholder-icon\"\r\n iconName=\"Down\"\r\n />\r\n </div>\r\n <div className=\"placeholder-content\" style={{ fontWeight: 600, color: props.textColor }}>{props.placeholderContent}</div>\r\n </div>\r\n);\r\n\r\nUnverifiedPlaceholder.propTypes = {\r\n placeholderContent: PropTypes.string.isRequired,\r\n textColor: PropTypes.string,\r\n classes: PropTypes.shape({\r\n unverified: PropTypes.string.isRequired,\r\n }).isRequired,\r\n};\r\n\r\nUnverifiedPlaceholder.defaultProps = {\r\n textColor: undefined,\r\n};\r\n","const commonParentStyles = {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n flexDirection: 'column',\r\n height: '100%',\r\n};\r\n\r\nconst iconCommonStyles = {\r\n fontSize: '36px',\r\n lineHeight: '36px',\r\n color: '#0078d4',\r\n};\r\n\r\nexport const getPlaceholderStyle = () => ({\r\n '@global': {\r\n '@keyframes spinner': {\r\n to: {\r\n transform: 'rotate(360deg)',\r\n },\r\n },\r\n '@keyframes downloading': {\r\n from: {\r\n transform: 'translateY(-18px)',\r\n },\r\n to: {\r\n transform: 'translateY(42px)',\r\n },\r\n },\r\n },\r\n encoding: {\r\n ...commonParentStyles,\r\n '& .placeholder-icon': {\r\n ...iconCommonStyles,\r\n animation: 'spinner 1.2s linear infinite',\r\n },\r\n '.add-video-content-container &': {\r\n marginTop: 14,\r\n },\r\n },\r\n unverified: {\r\n ...commonParentStyles,\r\n '& .download-icon-container': {\r\n overflow: 'hidden',\r\n borderBottom: '2px solid #0078d4',\r\n },\r\n '& .placeholder-icon': {\r\n ...iconCommonStyles,\r\n animation: 'downloading 1.2s ease infinite',\r\n },\r\n },\r\n failed: {\r\n ...commonParentStyles,\r\n '& .placeholder-icon': {\r\n ...iconCommonStyles,\r\n color: '#d83b01',\r\n },\r\n },\r\n});\r\n","import { FailedPlaceholder } from '@bingads-webui-campaign-react/video-status-placeholder-pure-component';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { getPlaceholderStyle } from './styles';\r\n\r\nexport const FailedPlaceholderWithStyle = withDefaultStyles(FailedPlaceholder, getPlaceholderStyle);\r\n","import { EncodingPlaceholder } from '@bingads-webui-campaign-react/video-status-placeholder-pure-component';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { getPlaceholderStyle } from './styles';\r\n\r\nexport const EncodingPlaceholderWithStyle = withDefaultStyles(EncodingPlaceholder, getPlaceholderStyle);\r\n","import { UnverifiedPlaceholder } from '@bingads-webui-campaign-react/video-status-placeholder-pure-component';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { getPlaceholderStyle } from './styles';\r\n\r\nexport const UnverifiedPlaceholderWithStyle = withDefaultStyles(UnverifiedPlaceholder, getPlaceholderStyle);\r\n","import { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { VideoPureComponent } from '@bingads-webui-campaign-react/video-pure-component';\r\n\r\nimport { getControlStyles } from './styles';\r\n\r\nexport const Video = withDefaultStyles(VideoPureComponent, getControlStyles);\r\n","export const getControlStyles = () => ({\r\n root: {\r\n position: 'relative',\r\n width: '100%',\r\n overflow: 'hidden',\r\n top: -5,\r\n backgroundColor: 'rgba(0,0,0,0.75)',\r\n\r\n '& .ms-Button svg': {\r\n width: '100%',\r\n },\r\n '& .ms-Button:focus': {\r\n border: '1px solid #fff',\r\n },\r\n '& .ms-Button:hover': {\r\n backgroundColor: 'transparent',\r\n },\r\n },\r\n videoContainer: {\r\n paddingBottom: 32,\r\n },\r\n sliderContainer: {\r\n width: '100%',\r\n },\r\n previewVideo: {\r\n width: '100%',\r\n maxHeight: '100%',\r\n },\r\n container: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n\r\n '& i': {\r\n width: '100%',\r\n cursor: 'pointer',\r\n },\r\n },\r\n});\r\n\r\n"],"names":["DummyIsOptionalComponent","_ref","value","onChange","_useState","useState","_useState2","_slicedToArray","isOptional","setIsOptional","target","propTypes","PropTypes","isRequired","DummyIsOptionalValidationItem","withValidation","countTextAssets","collectionObj","_ref$countEmpty","countEmpty","chain","values","filter","textValue","isEmpty","length","hasTextAssets","headlines","longHeadlines","descriptions","collectionSummary","element","i18n","collection","displayText","displayTextSingular","count","itemText","getString","_TL_","collectionCount","getTextCardSummaryDetails","collectionsSummary","summaryDetails","forEach","push","join","getTextCardSummaryDetailsForCollection","getHeadlinesCardSummaryDetails","getLongHeadlinesCardSummaryDetails","getDescriptionsCardSummaryDetails","registerIcons","icons","_jsx","width","height","viewBox","fill","xmlns","children","d","ValidationGroupWithMessage","withControlErrorHandling","withContainerErrors","withError","ValidationGroup","UnvalidatedTextAssetCollection","React","props","labelAction","overrideInputNode","minCollectionSize","maxCollectionSize","labelText","labelId","helpPopupTopic","helpPopupAriaLabel","placeholderText","fieldName","singleAssetValidationPropsField","validationPropsField","addButtonText","formErrorProps","renderWrapperFunction","updateValidation","errorMessage","duplicateErrorMessage","validationProps","externalErrorMessages","showAddButton","hideAddButtonWhenLimitReached","getCustomErrorMessage","styleOverrides","alwaysShowError","showDeleteButton","onDeleteTextAsset","deleteButtonLabel","renderInlineCopilot","enableCustomizer","withDeleteIconDisabled","getStylesWithOverrides","useMemo","merge","TextAssetContainer","marginBottom","marginTop","labelContainer","display","justifyContent","alignItems","WithFlexButtons","marginLeft","TextAssetsCollectionContainer","color","AddAssetButton","getStyles","classes","useDefaultStyles","useContext","I18nContext","activity","ActivityContext","data","schema","_defineProperty","initialValue","result","numberOfPreloadedAssets","i","concat","deriveValue","assetsToRender","onDeleteAsset","useCallback","key","deletedValue","newValidationPropsField","index","Object","keys","itemKey","newValue","undefined","renderItem","itemValue","additionalTextFieldProps","_jsxs","className","classnames","ValidatedTextFieldWithAdCustomizer","field","configProps","_objectSpread","placeholder","title","RemainingCharsValidatedTextField","CommandButton","iconProps","iconName","onClick","ariaLabel","disabled","textAssetFields","map","isFunction","hideAddButton","onAddAsset","onValidate","validationResult","signal","customErrors","newData","assets","_toConsumableArray","messages","isOptionalRef","useRef","current","dummyItemValidationProps","properties","type","IsOptional","validator","changed","list","groupErrors","min","items","item","hasEnoughNonEmptyValues","size","uniq","hasDuplicateValues","reduce","errors","errorFilter","error","stopPropagation","passiveMessages","showErrorOnPassiveMessages","Label","id","label","HelpPopup","topic","style","ActionButton","allowDisabledFocus","defaultProps","noop","withCustomValidation","UrlPathFluent","withFluentSwitcher","UrlPathFluentV1","UrlPathFluentV2","ValidatedUrlPath","urlPath1","urlPath2","finalUrl","first","Stack","horizontal","verticalAlign","HelpPopupInline","url","UrlContainer","MobileUrlContainer","MobileUrlKey","UrlInputFluent","UrlInputFluentV1","UrlInputFluentV2","MobileUrlWithCustomValidation","helpTopicId","mobileFinalUrls","mobileFinalUrl","isMobileUrlChecked","setIsMobileUrlChecked","_useState3","_useState4","cachedValue","setCachedValue","_useState5","_useState6","cachedErrors","setCachedErrors","onCheckboxChange","ev","checked","_getUrlPrefixAndDesti3","getUrlPrefixAndDestination","urlWithoutPrefix","_getUrlPrefixAndDesti","onInputChange","classNames","Checkbox","containerClassName","dropdownOptionAriaLabel","textFieldAriaLabel","ValidatedMobileUrl","FinalURlKey","ValidatedFinalUrl","validationOnUrlChange","prepopulateUrl","validateOnRender","hideLabel","additionalProperties","customUrlProtocol","enableSpecialCharactersValidation","finalUrls","createFinalUrlsViewModel","urls","JSON","stringify","additionalValidation","propertyKey","getFinalUrlCardSummaryDetails","isEmptyUrl","getFinalUrlWithPath","path1","path2","finalUrlDomain","getDomain","getAdvancedUrlOptionsCardSummaryDetails","displayUrl","noDisplayUrl","noMboileUrl","displayUrlDetails","mobileUrlDetails","campaignTrackingUrlTemplate","propertyIs","campaignFinalUrlSuffix","campaignUrlCustomParameters","trackingUrlTemplateControlsWrapper","compose","partial","withUnvalidatedControlErrors","_","Adapter","StandardControlAdapter","finalUrlSuffixControlsWrapper","urlCustomParametersControlsWrapper","functionsToInject","ValidatedUrlOptionsParameter","withProps","ValidatedUrlOptionsParameters","ValidatedUrlOptionsParameterWithError","ValidatedUrlOptionsParametersWithError","valuePrefix","customizedValidation","isControlledOutside","validateOnDomain","formattedValue","includes","updatedErrors","ValidatedMobileUrlWithoutCheckbox","nativeAdMobileFinalUrlsProp","ServerValidatedMobileFinalUrl","requiredUrlProtocolAndDomain","urlLengthLimit","validateAdUrl","MobileUrlSection","expand","rest","_objectWithoutProperties","_excluded","mobileFinalUrlValidationProps","MobileFinalUrls","mobileFinalUrlDetails","ValidatedPanel","TextTitle","titleKey","topicKey","details","icon","MobileFinalUrlImg","attentionBeaconProps","getExtraProps","getPanelErrorProps","actuationProps","expandKey","URLOptionsSection","trackingUrlTemplate","finalUrlSuffix","urlCustomParameters","token","triggerTestUurl","urlOptions","TrackingUrlTemplate","FinalUrlSuffix","UrlCustomParameters","urlOptionsDetails","getUrlOptionsDetails","UrlOptionsImg","showUurlTestTool","DisplayUrlModes","WebsiteDescriptionLanguages","WebsiteDescriptionOptions","vanityUrlOption","paddingLeft","minHeight","flexDirection","gap","paddingRight","margin","Insights","Glyphicon","glyph","messageBarStyle","root","background","fontSize","VanityUrlOption","vanityUrlSettings","displayUrlMode","setDisplayUrlMode","websiteDescription","setWebsiteDescription","languages","language","_useMemo","mod","findIndex","option","websiteDescriptions","idx","getWebsiteDescriptionList","onDisplayUrlModeChange","e","onLanguageChange","langIndex","arguments","Math","pow","getWebsiteDescriptionInAnotherLanguage","selectedIndex","onWebsiteDescriptionChange","useEffect","DisplayUrlMode","WebsiteDescription","name","MessageBar","messageBarIconProps","messageBarType","MessageBarType","info","styles","hidden","lang","description","paddingTop","useStyles","makeStyles","container","shorthands","padding","tokens","spacingHorizontalL","previewButton","whiteSpace","saveButton","aspectRatio","divider","VideoTemplateSummaryBarControl","setShowPreviewVideoModal","onSaveVideo","metadata","summaryBar","setSummaryBar","template","inputRatio","closestRatio","closestDiff","abs","_i","_Object$entries","entries","_Object$entries$_i","ratio","diff","getClosestAspectRatio","preview","message","templateId","publish","customizedContent","mergeClasses","_Fragment","Divider","vertical","Button","VideoRegular","appearance","timer","setInterval","summaryBarCustomizeEle","document","getElementById","clearInterval","createPortal","videoEditor","top","overFlowY","editVideoPage","backgroundColor","navigationView","borderWidth","actionsWrapperContent","marginRight","overflowY","overflowX","actionsWrapper","minWidth","maxWidth","paddingBottom","boxShadow","borderRadius","overflow","position","previewContainer","flexGrow","spacingHorizontalM","scenePreview","storyBoardContainer","leftPanelTop","bottom","containerWrapper","actionBarFooter","generateButtonContainer","generateButton","topNavigationParent","fontWeight","topNavigationLeft","textAlign","alignContent","topNavigationRight","editVideoPageNavigation","tabList","tabItemWrapper","tabItem","alignSelf","wordBreak","AssetsId","StyleId","AudioId","EditVideoNavigationView","currentView","setCurrentView","selectItem","isSelected","AddSquareFilled","AddSquareRegular","DesignIdeasFilled","DesignIdeasRegular","HeadphonesSoundWaveFilled","HeadphonesSoundWaveRegular","Tab","selected","TabList","selectedValue","topNavigation","spacingVerticalL","recommendedImage","ShortHeadlineAssetCollection","isMultipleOptions","onFocusTextAsset","onApplyRecommendation","enableCopilotRecommendations","setAddNewShortHeadlinesCallback","isBusinessName","addNewShortHeadlineCallback","shortHeadlineAssetCollectionConfig","getTextAssetCollectionConfig","copilotButtonLabel","inlineRecommendationsTitle","inlineRecommendationsHelpTopicKey","inlineRecommendationsHelpTopicAriaLabel","inlineRecommendationsDisabledItemTooltip","dynamicCollectionConfig","getShortHeadlineAssetCollectionConfig","recommendations","replaceExistingAssets","TextAssetCollectionWithRecommendations","replaceMode","hideAddAllSuggestionsButton","withInlineRecommendations","setAddTextAssetCallback","callback","onToggleTextFormatting","onResetTextAssets","ViewName","ColorTypeEnum","shortHeadlineType","keyframeTemplateList","TemplateId","TemplateName","Version","Width","Height","TemplateFileName","Image","AspectRatio","MinHeight","Text","MaxLengthInChar","getActiveTemplate","assetName","useTextAssetCollectionStyles","textAssetStyle","textDivider","hide","TextAssetCollectionWithCoPilotInternal","disableCopilot","shortHeadlineValidations","fetchRecommendationAssets","onChangeTextAssetFormattingSection","cancelFetchRecommendationAssetsJob","shortHeadlineAssetCollection","featureName","hint","minLength","maxLength","TextAssetCollectionWithCoPilot","useDefaultContainerStyles","rowGap","core","collapseContainer","helpbuttonStyle","campaignId","serverContext","shortHeadline","onChangeTexts","helpButtonStyles","locale","CurrentLocale","updatedHeadlineSchema","AssetGroup","Headlines","acc","updatedValue","updatedAssetGroup","Headline","isDirty","isValid","updatedTextAssets","newShortHeadline","Headline0","FinalUrlForRecommendation","CopilotRepositoryProvider","enableLogoAndCTA","recommendationType","isAudienceAd","func","getLocale","SceneWrapperTextAssetCollectionWithRecommendations","scene","shouldDisplay","onTextListUpdate","metaData","updating","text","textData","slice","getTextAssets","textList","textDataList","newText","longHeadlineValidations","descriptionValidations","hideTextFormatting","EditVideoAssetsView","aid","cid","oDataConfig","onTextListChange","onChangeImage","scenes","selectedSceneId","onImageUpdated","onLogoUpdated","onChangeLogo","preferenceService","perfMarker","permissions","recommendedAssets","isLoadingRecommendedAssets","brandKit","isLoadingBrandKit","setTextList","assetType","setAssetType","assetIndex","setAssetIndex","_useImagePicker","useImagePicker","displayImagePicker","setDisplayImagePicker","selectedMediaPanelSource","setSelectedMediaPanelSource","currentScene","newImages","currentSceneImages","image","currentSceneLogos","newLogos","logo","hasImages","hasLogos","brandKitImages","images","Array","from","fullUrl","Url","thumbnailSrc","recommendedImageList","ImageAssets","recommendedLogoList","mappedLogos","logos","Logo","isArray","onReplacePreview","currentTarget","dataset","onEdit","str","newTextList","onUpdateImageFromRecommendations","imageType","newImageArray","src","newLogoArray","Item","RecommendedImage","isLoading","previewImage","recommendedImages","maxUploadNum","uiBlocking","seeAllPanelTitle","seeAllLinkText","onEditPreviewImage","onReplacePreviewImage","recommendedLoadingText","helpTopic","helpLabel","recommendationTitle","onSelectRecommendedImage","onAddRecommendedImagefromPanel","showViewAllInHeader","hideEditPreviewBtn","sceneImage","classeName","UploadImage","elementType","maxLimit","onSelectImages","imageSrc","styleGuideContainer","styleGuideTitle","fontWeightBold","styleColorTitle","paddingBotton","fontWeightSemibold","colorPalettes","spacingVerticalM","colorNeutralStencil1","flex","spacingVerticalS","header","columnGap","spacingHorizontalXS","content","fontSelect","fontWeightSelect","fontContainer","gridTemplateColumns","gridGap","spacingHorizontalS","contentDivider","spacingVerticalXL","overrideFontWeights","row","flexWrap","FontEditor","onChangeFont","onChangeWeight","fontsState","currentFont","font","currentWeight","FontsFamilySelector","selectClassName","FontsWeightSelector","ColorEditor","onPalettesUpdated","paletteData","palettesState","backgroundPalette","Name","isBrandKitColor","textPalette","selectedColor","colorType","find","c","HexCode","maxColors","palettes","onDeleteColor","colorid","onUpdate","colorObj","AdsStudioDisplayColorPicker","onDelete","EditVideoStyleView","onFontsUpdated","finalPalettes","_finalPalettes","mappedPalettes","palette","apply","some","newState","audioGuideContainer","marginLBottom","audioGuideTitle","audioMusicTitle","audioMusicTitleContainer","audioMusicSelect","audioMusicContainer","getLocalizedAudioName","EditVideoAudioView","audioState","setAudioState","rawAudioList","selectId","useId","setSelectedValue","isPageLoading","setIsPageLoading","audioList","setAudioList","_useState7","_useState8","isPlaying","setIsPlaying","audioRef","audioSrc","fileName","audioName","formatResponse","response","Data","Audio","AudioName","getAudioObjectFromList","formatAudioList","_asyncToGenerator","_regeneratorRuntime","mark","_callee","formattedList","wrap","_context","prev","next","stop","hidePlayButton","URLSearchParams","location","search","get","Overlay","zIndex","AssetLibrarySpinner","useCustomSize","Combobox","onOptionSelect","event","audioObject","optionValue","optionText","pause","border","Option","play","PauseRegular","PlayRegular","ref","scenePreviewContainer","spacingHorizontalXXXL","scenePreviewImage","maxHeight","ScenePreview","keyFrame","effective","alt","storyBoardView","spacingVerticalMNudge","templateContainer","templateThumbnail","templateText","colorNeutralForeground3","scenesContainer","sceneContainer","sceneTitle","thumbnailsRow","sceneItem","outlineColor","outlineStyle","sceneThumbnail","sceneNumber","lineHeight","audioBar","navigationContainer","Title","variant","Scene","sceneId","onSceneSelected","clickFunc","onKeyDown","keyCode","Enter","role","tabIndex","ScenePickerView","_ref2","TemplateContainer","templateDetail","TemplateThumbnailUrl","LocalizedTemplateName","seconds","Duration","AudioBar","videoMetadata","audio","audioCategory","category","backgroundImage","audioWaveImage","backgroundPosition","backgroundRepeat","MusicNote2Filled","StoryBoardView","_ref3","isSelenium","getParameter","isLocal","window","href","mock","defaultColor","defaultTextData","mockEditResponse","recommendationId","recommendationFormat","thumbnailUrl","durationInMs","imageData","targetWidth","targetHeight","itemId","logoData","isEqualScene","scene1","scene2","isEqual","omit","isVideoChanged","original","isSceneChanged","useEditVideoAdsViewState","_ref4","videoMetaData","copilotDataService","logger","isCTV","showVideoTemplateSummaryBarControl","_useRecommendations","editVideoAdsAssetRecommendations","generateVideo","video","ads","then","res","returnValue","checkMockCall","catch","fetchAssets","useRecommendations","setScenes","setSelectedSceneId","setVideo","_useState9","_useState10","setFontsState","_useState11","_useState12","setPalettesState","_useState13","_useState14","videoUrl","setVideoUrl","_useState15","_useState16","videoSettings","setVideoSettings","_useState17","_useState18","isGeneratingVideo","setIsGeneratingVideo","_useState19","_useState20","generateError","setGenerateError","_useState21","_useState22","setRecommendedAssets","_useState23","_useState24","setIsLoadingRecommendedAssets","_useState25","_useState26","copilotRecommendedAssets","setCopilotRecommendedAssets","updateStateFromFetchResponse","_ref5","_ref5$scenes","scenesInner","businessName","scenesWithIds","imageUrl","logoUrl","_extractStylesFromSce","extractStylesFromScenes","fonts","filteredPalettes","videoSettingsInner","RecommendedAssets","assetsObj","logTrace","finally","createStylesRequestObject","_ref6","textColor","_ref7","colors","weight","generateNewVideo","scenesInCall","newVideoMetaData","msg","selectedScene","onScenesUpdated","updatedScenes","updatedFonts","hex","prevState","handleGenerateVideo","handleGenerate","textErrorMessages","errorMessages","updatingText","maxLengthOfText","activeTemplate","getTextSizeLimitation","haveTextError","haveErrorInScenes","textErrorForSelectedScene","prevScenes","disableGenerate","EditVideoPageComponent","isOpen","setIsOpen","isDialog","loadClipchampPlayer","onApply","instrumentation","_useNavigationState","useNavigationState","showPreviewVideoModal","noBorderStyle","outline","handleCopilotBannerFetchSucceeded","isDisplayPlus","isMMA","isSignup","skipBusinessNameRecommendation","_useEditVideoAdsViewS","parentContainer","parentElement","onHandleApply","newVideo","handleTextListChange","deepClone","cloneIt","selectedSceneTextData","shortHeadlines","ShortHeadlines","cloneCopilotRecommendedAssets","newTheme","Themes","filteredRecommendations","Cta","IsCustomerIdInExclusionList","onCloseVideoPreview","handleSelectNextScene","handleSelectPreviousScene","isPreviousDisabled","isNextDisabled","VideoEditContent","FluentProvider","theme","webLightTheme","PreviewClipchampVideoModal","show","onClose","onShowChange","ChevronLeftRegular","ChevronRightRegular","isMultiline","onDismiss","dismissButtonAriaLabel","Send16Regular","Drawer","modalType","open","separator","DrawerHeader","DrawerHeaderTitle","action","Dismiss24Regular","DrawerBody","DrawerFooter","VideoTemplateEditorWithAddImageWrapperImp","assetLibraryConfig","assetLibraryUserPreferences","assetLibraryAccountPreferences","ianaTimeZone","copilotDomainDataService","setShowAddImagePanel","setMinSizeOfImage","setShowAddLogoPanel","setBrandKit","setIsLoadingBrandKit","setTemplateDetail","setRawAudioList","InstrumentationContext","onImageAddError","errorCode","Code","getImageValidationErrorMessage","useCopilotRepositoryContext","getBrandKits","useBrandKitService","brandKitDataService","fetchBrandKits","_yield$getBrandKits","sent","fetchTemplateDetails","_callee2","templateFilter","_yield$copilotDomainD","_context2","TemplateIds","getVideoTemplates","Templates","t0","fetchAudioList","_callee3","_yield$copilotDomainD2","_context3","getAudioList","abrupt","minSize","VideoTemplateEditorWithAddImageWrapper","withInstrumentation","withLoggingContext","withRecommendationContext","withCopilotDomainDataService","withDefaultStyles","_ref$palette","extensionEditorStyles","EditVideoPageComponentWithDataServices","withAssetLibraryServicesLoaded","loggerTag","VideoTemplateEditorContextWrapper","isAADUser","isLiteLandingPageEnabled","isAssetLibraryAIGCMVPEnabled","timeZone","preferencesService","activityLogger","dateFormat","useClipchamp","dynamic","VideoTemplateUI","CampaignFetchProvider","accountTimeZone","allowedAssetType","FolderAssetType","defaultIconClass","mergeStyles","getIconClass","colorString","selectors","svg","padTime","time","floor","toString","padStart","Time","currentTime","duration","durationString","currentTimeString","VideoPureComponent","muteByDefault","autoPlay","onVideoLoaded","iconColor","showTime","showPlay","customPlayObject","videoElement","volumeVisible","setVolumeVisible","paused","setPaused","muted","setMuted","ended","setEnded","setCurrentTime","setDuration","iconClass","onplay","onpause","onended","ontimeupdate","onloadeddata","playIconName","videoContainer","previewVideo","onLoadedData","Fragment","IconButton","Slider","sliderContainer","max","showValue","v","onMouseOver","onFocus","videoPlayBig","videoPause","fillRule","clipRule","videoReplay","videoMute","videoUnmute","prototype","FailedPlaceholder","failed","Icon","placeholderContent","EncodingPlaceholder","encoding","UnverifiedPlaceholder","unverified","commonParentStyles","iconCommonStyles","getPlaceholderStyle","to","transform","animation","borderBottom","FailedPlaceholderWithStyle","EncodingPlaceholderWithStyle","UnverifiedPlaceholderWithStyle","Video","cursor"],"sourceRoot":""}