{"version":3,"file":"static/js/application.async.landing~ab0038a3.194589b9.chunk.js","mappings":"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","sources":["../../../node_modules/@bingads-webui-campaign-react/ads-campaign-disclaimers/src/disclaimer-editor.js","../../../node_modules/@bingads-webui-campaign-react/ads-campaign-disclaimers/src/disclaimer-selector.js","../../../node_modules/@bingads-webui-campaign-react/ads-campaign-disclaimers/src/i18n/disclaimer-string-map.js","../../../node_modules/@bingads-webui-campaign-react/ads-campaign-disclaimers/src/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-campaign-disclaimers/src/model/disclaimer-ad-extension-association.js","../../../node_modules/@bingads-webui-campaign-react/ads-color-picker/src/color-picker/style.ts","../../../node_modules/@bingads-webui-campaign-react/ads-color-picker/src/color-picker/Tooltip.tsx","../../../node_modules/@bingads-webui-campaign-react/ads-color-picker/src/color-picker/hooks/index.ts","../../../node_modules/@bingads-webui-campaign-react/ads-color-picker/src/color-picker/Palette.tsx","../../../node_modules/@bingads-webui-campaign-react/ads-color-picker/src/color-picker/PaletteSkelton.tsx","../../../node_modules/@bingads-webui-campaign-react/ads-color-picker/src/color-picker/index.tsx","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/performance-page-component/hooks/use-filters-reducer.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/performance-page-component/styles/context-menu-style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/performance-page-component/filter-bar-container/new-filter-context-menu.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/performance-page-component/filter-bar-container/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/performance-page-component/hooks/use-filter-bar.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/performance-page-component/styles/performance-styles.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/performance-page-component/hooks/use-table-columns.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/performance-page-component/styles/chart-styles.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/performance-page-component/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/performance-page-component/hooks/use-load-data.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/performance-page-component/hooks/use-performance-page.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/home-page-component/home-page-styles/home-page-style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/home-page-component/home-page-styles/component-styles/home-page-top-banner-component-style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/home-page-component/home-page-styles/component-styles/asset-list-bar-carousel-style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/home-page-component/home-page-styles/component-styles/home-page-generate-with-ai-component-style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/home-page-component/components/home-page-top-banner-component.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/home-page-component/home-page-styles/component-styles/home-page-image-asset-cards.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/home-page-component/components/home-page-asset-cards/image-asset-card/image-asset-card.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/home-page-component/home-page-styles/component-styles/home-page-folder-asset-cards.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/home-page-component/components/home-page-asset-cards/folder-asset-card/folder-asset-card.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/home-page-component/home-page-styles/component-styles/home-page-video-asset-cards.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/home-page-component/components/home-page-asset-cards/video-asset-card/video-asset-card.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/home-page-component/components/asset-list-bar-carousel.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/home-page-component/components/home-page-generate-with-ai-component.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/home-page-component/home-page-styles/component-styles/home-page-action-asset-cards.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/home-page-component/components/home-page-asset-cards/action-asset-cards/action-asset-cards.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/home-page-component/home-page-styles/component-styles/home-page-image-background-section.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/home-page-component/components/home-page-image-background-section/image-background-section.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/home-page-component/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/styles/image-page-styles/image-page-style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/styles/image-page-styles/component-styles/image-top-banner-component-style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/styles/image-page-styles/component-styles/assets-entry-cards-container-style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/styles/image-page-styles/component-styles/image-empty-view-style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/styles/video-page-styles/video-page-style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/styles/video-page-styles/component-styles/video-page-top-banner-component-style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/styles/video-page-styles/component-styles/assets-entry-cards-container-style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/styles/video-page-styles/component-styles/video-empty-view-style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/styles/search-result-view-styles.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/images-page-component/components/assets-entry-cards-container.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/images-page-component/components/image-grid-view.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/images-page-component/components/image-top-banner-component.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/images-page-component/components/image-page-empty-view.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/images-page-component/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/brand-kit-page-component/reducer.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/brand-kit-page-component/components/banner/action-cards/dialogues/warning-dialogue-content.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/brand-kit-page-component/components/banner/action-cards/dialogues/style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/brand-kit-page-component/components/banner/action-cards/dialogues/create-with-website-dialogue.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/brand-kit-page-component/components/file-upload/style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/brand-kit-page-component/components/file-upload/constants.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/brand-kit-page-component/components/file-upload/utils.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/brand-kit-page-component/components/file-upload/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/brand-kit-page-component/components/banner/action-cards/dialogues/upload-brand-guidance-dialogue.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/brand-kit-page-component/components/banner/action-cards/dialogues/create-manually-action.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/brand-kit-page-component/components/banner/action-cards/styles.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/brand-kit-page-component/components/banner/action-cards/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/brand-kit-page-component/components/banner/styles.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/brand-kit-page-component/components/banner/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/brand-kit-page-component/components/suggestions/styles.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/brand-kit-page-component/components/suggestions/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/brand-kit-page-component/components/taglines/styles.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/brand-kit-page-component/components/taglines/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/brand-kit-page-component/components/fonts-selector/constants.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/brand-kit-page-component/components/fonts-selector/styles.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/brand-kit-page-component/components/fonts-selector/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/brand-kit-page-component/list-panel/style.ts","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/brand-kit-page-component/list-panel/ListItem.tsx","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/brand-kit-page-component/list-panel/index.tsx","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/brand-kit-page-component/logo-edit-panel/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/brand-kit-page-component/components/process-image-asset-payload.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/brand-kit-page-component/components/image-element.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/brand-kit-page-component/context.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/brand-kit-page-component/content-panel/style.ts","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/brand-kit-page-component/content-panel/index.tsx","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/brand-kit-page-component/styles/brand-voice-styles.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/brand-kit-page-component/brand-voice.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/brand-kit-page-component/styles/brand-kit-page-styles.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/brand-kit-page-component/brand-elements.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/brand-kit-page-component/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/display-templates-page-component/components/Banner/style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/display-templates-page-component/components/Banner/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/display-templates-page-component/components/template-grid/style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/display-templates-page-component/components/template-grid/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/display-templates-page-component/components/template-details-carousel/style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/display-templates-page-component/components/template-details-carousel/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/display-templates-page-component/components/template-details-modal/style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/display-templates-page-component/components/template-details-modal/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/display-templates-page-component/style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/display-templates-page-component/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/create-display-template-page-component/style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/create-display-template-page-component/use-notify.tsx","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/create-display-template-page-component/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/edit-display-template-page-component/style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/edit-display-template-page-component/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/library-page-component/styles/folders-grid-cell-with-context-menu-style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/library-page-component/components/folders-grid-cell-with-context-menu.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/library-page-component/styles/edit-folder-name-modal-style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/library-page-component/components/edit-folder-name-modal.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/library-page-component/hooks/use-create-folder-modal.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/library-page-component/hooks/use-delete-confirm-dialog.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/library-page-component/hooks/use-rename-folder-modal.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/library-page-component/styles/summary-result-dialog-style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/library-page-component/components/summary-result-dialog/columns.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/library-page-component/components/summary-result-dialog/dialog.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/library-page-component/components/summary-result-dialog/use-summary-result-dialog.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/library-page-component/styles/toolbar-style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/library-page-component/components/toolbar.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/library-page-component/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/library-page-component/hooks/use-drag-and-drop-confirm-dialog.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/videos-page-component/components/assets-entry-cards-container.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/videos-page-component/components/video-page-top-banner-component.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/videos-page-component/components/video-page-empty-view.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/videos-page-component/components/video-grid-view.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/videos-page-component/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/video-templates-page-component/components/template-grid/style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/video-templates-page-component/components/template-grid/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/video-templates-page-component/components/template-details-modal/style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/video-templates-page-component/components/template-details-modal/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/video-templates-page-component/style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/video-templates-page-component/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/edit-video-page-component/style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/edit-video-page-component/components/use-video-notify.tsx","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/edit-video-page-component/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/generate-image-page-component/state.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/generate-image-page-component/util.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/generate-image-page-component/brand-detection-confirmation/style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/generate-image-page-component/brand-detection-confirmation/brand-detection-confirmation.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/generate-image-page-component/prompt-editor/style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/generate-image-page-component/prompt-editor/prompt-editor.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/generate-image-page-component/prompt-editor/options.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/generate-image-page-component/generated-images/style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/generate-image-page-component/generated-images/generated-images.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/generate-image-page-component/example-image/style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/generate-image-page-component/example-image/example-image.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/generate-image-page-component/explore-prompts/style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/generate-image-page-component/explore-prompts/explore-prompts.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/generate-image-page-component/disclaimer.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/generate-image-page-component/remaing-text.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/generate-image-page-component/error.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/generate-image-page-component/style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/generate-image-page-component/view.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/add-assets-panel/add-asset-panel.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/add-assets-panel/hooks/use-source-images.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/add-assets-panel/website-image-panel.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/add-assets-panel/stock-image-panel.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/add-assets-panel/error/add-video-error.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/add-assets-panel/add-video-panel.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/add-assets-panel/upload-files-panel.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/add-assets-panel/hooks/use-upload-folder.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/add-assets-panel/upload-folder-panel.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/add-assets-panel/mixed-image-panel.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/add-assets-panel/hooks/use-source-videos.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/add-assets-panel/mixed-video-panel.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/add-assets-panel/invest-image-panel.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/add-assets-panel/invest-video-panel.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/search-result-view/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/edit-image-page-component/model/use-ad-placement.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/edit-image-page-component/model/background-change/use-background-change.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/edit-image-page-component/model/background-change/use-masked-image.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/edit-image-page-component/model/utils.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/edit-image-page-component/model/use-edit-image-state.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/edit-image-page-component/model/use-filter-and-blur.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/edit-image-page-component/views/image-preview-view/style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/edit-image-page-component/views/image-preview-view/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/edit-image-page-component/views/image-adjust-view/style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/edit-image-page-component/views/image-adjust-view/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/edit-image-page-component/views/ad-placement-list-view/styles/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/edit-image-page-component/views/ad-placement-list-view/placement-container.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/edit-image-page-component/views/ad-placement-list-view/ad-type-control.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/edit-image-page-component/views/ad-placement-list-view/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/edit-image-page-component/views/placement-edit-view/style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/edit-image-page-component/views/placement-edit-view/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/edit-image-page-component/views/save-button-in-summary-bar/style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/edit-image-page-component/views/save-button-in-summary-bar/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/edit-image-page-component/media/unselected-ad-placement-svg-icon.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/edit-image-page-component/media/selected-ad-placement-svg-icon.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/edit-image-page-component/views/navigation-view/style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/edit-image-page-component/views/navigation-view/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/edit-image-page-component/views/background-change-view/style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/edit-image-page-component/views/background-change-view/object-selection/style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/edit-image-page-component/views/background-change-view/object-selection/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/edit-image-page-component/views/background-change-view/example-image/style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/edit-image-page-component/views/background-change-view/example-image/example-image-list.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/edit-image-page-component/views/background-change-view/example-image/example-image-cell.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/edit-image-page-component/views/background-change-view/history-list/generation-history-list-styles.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/edit-image-page-component/views/background-change-view/history-list/generation-history-list.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/edit-image-page-component/views/background-change-view/prompt-control/view.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/image-with-shimmer/style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/image-with-shimmer/image-shimmer.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/image-with-shimmer/image-with-shimmer.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/edit-image-page-component/views/background-change-view/prompt-control-state.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/edit-image-page-component/model/background-change/use-object-selection.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/edit-image-page-component/views/background-change-view/color-control/color-button/style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/edit-image-page-component/views/background-change-view/color-control/color-button/color-button.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/edit-image-page-component/views/background-change-view/color-control/style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/edit-image-page-component/views/background-change-view/color-control/view.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/edit-image-page-component/views/background-change-view/color-control-state.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/edit-image-page-component/views/background-change-view/state.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/background-change-disclaimer/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/edit-image-page-component/views/background-change-view/view.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/edit-image-page-component/views/update-confirm-dialog/style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/edit-image-page-component/views/update-confirm-dialog/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/edit-image-page-component/style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/edit-image-page-component/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/asset-detail-component/styles.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/asset-detail-component/components/asset-preview-base/sequential-navigator.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/asset-detail-component/components/asset-preview-base/asset-item-preview-base.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/asset-detail-component/components/image-preview.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/asset-detail-component/components/non-active-video-preview.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/asset-detail-component/components/video-preview.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/asset-detail-component/components/asset-panel-base/panel-base.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/asset-detail-component/components/asset-panel-base/info-panel-header.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/asset-detail-component/components/asset-panel-base/delete-asset-dialog.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/asset-detail-component/components/basic-info/info-item-copy-url.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/asset-detail-component/components/basic-info/info-item-default.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/asset-detail-component/components/basic-info/info-item-rename.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/asset-detail-component/components/basic-info/item-info-panel-content-base.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/asset-detail-component/constants.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/asset-detail-component/components/performance/item-external-link.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/asset-detail-component/components/performance/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/asset-detail-component/components/image-panel.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/asset-detail-component/components/basic-info/info-item-video-quality.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/asset-detail-component/components/video-panel.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/asset-detail-component/hooks/use-preiview-and-panel.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/asset-detail-component/components/details-page-layout.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/asset-detail-component/hooks/use-details-page-setup.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/asset-detail-component/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/asset-detail-component/hooks/use-asset-details-page-actions.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/background-removal-modal/background-removal-modal-style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/background-removal-modal/library-grid.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/page-components/background-removal-modal/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/navigation-component/utils.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/navigation-component/use-ad-studio-navigation.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/navigation-component/components/custom-tab.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/navigation-component/components/loading-spinner.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/navigation-component/components/leaf-tree-item.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/navigation-component/components/sub-tree-item.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/navigation-component/components/sub-tree.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/navigation-component/style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/navigation-component/components/folders-tree-view.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/navigation-component/ad-studio-navigation.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/navigation-component/use-ad-studio-side-navigation.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/navigation-component/ad-studio-side-navigation.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-components/src/navigation-component/with-ad-studio-navigation.js"],"sourcesContent":["/* eslint-disable jsx-a11y/anchor-is-valid, jsx-a11y/label-has-for */\r\n/* eslint-disable react/forbid-prop-types */\r\nimport _ from 'underscore';\r\nimport $ from 'jquery';\r\nimport React, { createRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { ValidatedUrlEditor } from '@bingads-webui-react/url-editor';\r\nimport { Alert } from '@bingads-webui-react/alert';\r\nimport { HelpPopup } from '@bingads-webui-react/help-popup';\r\nimport { TextArea } from '@bingads-webui-react/primitive-validation';\r\nimport {\r\n ValidatedInput,\r\n ValidationGroup,\r\n ValidatedRadioGroup\r\n} from '@bingads-webui-react/validation-controls';\r\nimport { withUiBlock } from '@bingads-webui/uiblocker';\r\nimport { ErrorMessages } from '@bingads-webui-react/validation';\r\nimport { cloneDeep } from '@bingads-webui-universal/primitive-utilities';\r\nimport { DropdownSelector } from '@bingads-webui-react/dropdown-selector';\r\nimport { RemainingCharsHint } from '@bingads-webui-campaign-react/remaining-chars-hint';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\n\r\nconst LayoutType = {\r\n popup: 'Popup',\r\n line: 'AdditionalLine',\r\n};\r\n\r\nconst getStyles = () => ({\r\n hideLayoutOption: {\r\n '& label': {\r\n paddingLeft: 15,\r\n },\r\n\r\n '& input': {\r\n display: 'none',\r\n },\r\n },\r\n});\r\n\r\nclass UnStyledDisclaimerEditor extends React.PureComponent {\r\n static propTypes = {\r\n editData: PropTypes.object,\r\n onClose: PropTypes.func.isRequired,\r\n isNativeAd: PropTypes.bool,\r\n onDisclaimerAddOrUpdated: PropTypes.func,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n schema: PropTypes.object.isRequired,\r\n repository: PropTypes.shape({\r\n create: PropTypes.func.isRequired,\r\n }).isRequired,\r\n usePanel: PropTypes.bool,\r\n permissions: PropTypes.shape({}),\r\n classes: PropTypes.shape({}).isRequired,\r\n showOnlyPopupLayout: PropTypes.bool,\r\n };\r\n\r\n static defaultProps = {\r\n editData: null,\r\n onDisclaimerAddOrUpdated: _.noop,\r\n usePanel: false,\r\n isNativeAd: false,\r\n permissions: {},\r\n showOnlyPopupLayout: false,\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.dropdownitems = [\r\n {\r\n Id: 'disclaimer-editor-title',\r\n value: this.props.i18n.getString('Disclaimers_Title_Default'),\r\n },\r\n {\r\n Id: 'disclaimer-editor-disclaimer',\r\n value: this.props.i18n.getString('Disclaimers_Dropdown_Disclaimer'),\r\n },\r\n {\r\n Id: 'disclaimer-editor-disclosure',\r\n value: this.props.i18n.getString('Disclaimers_Dropdown_Disclosure'),\r\n },\r\n {\r\n Id: 'disclaimer-editor-moreDisclaimer',\r\n value: this.props.i18n.getString('Disclaimers_Dropdown_MoreDisclaimer'),\r\n },\r\n {\r\n Id: 'disclaimer-editor-offer',\r\n value: this.props.i18n.getString('Disclaimers_Dropdown_Offer'),\r\n },\r\n {\r\n Id: 'disclaimer-editor-safetyInfor',\r\n value: this.props.i18n.getString('Disclaimers_Dropdown_SafetyInfor'),\r\n },\r\n {\r\n Id: 'disclaimer-editor-safetyInformation',\r\n value: this.props.i18n.getString('Disclaimers_Dropdown_SafetyInformation'),\r\n },\r\n ];\r\n\r\n // Hide popup option in Ads CN and when creation mode or edit mode but the layout is line, which means when layout is popup, we allow to switch to line.\r\n this.hidePopupOption = _.get(props.permissions, 'IsDomesticSimplifiedChineseEnabled', false) && (_.isEmpty(this.props.editData) || this.props.editData.DisclaimerLayout === LayoutType.line);\r\n // We will not allow domestic simplified chinese user to use native ad disclaimer.\r\n if (props.isNativeAd || props.showOnlyPopupLayout) {\r\n this.layoutTypeOptions = [LayoutType.popup];\r\n } else {\r\n this.layoutTypeOptions = this.hidePopupOption ? [LayoutType.line] : [LayoutType.popup, LayoutType.line];\r\n }\r\n\r\n const defaultData = {\r\n Name: '',\r\n Title: this.props.i18n.getString('Disclaimers_Title_Default'),\r\n PopupText: '',\r\n LineText: '',\r\n DisclaimerLayout: this.hidePopupOption ? LayoutType.line : LayoutType.popup,\r\n FinalUrls: [],\r\n FinalMobileUrls: [],\r\n };\r\n\r\n // find the item in the list, otherwise, select the first one.\r\n const dropdownSeleted = (this.props.editData ? _.findWhere(\r\n this.dropdownitems,\r\n { value: this.props.editData.Title }\r\n ) : null) || this.dropdownitems[0];\r\n\r\n this.state = {\r\n disclaimer: this.props.editData ? cloneDeep(this.props.editData) : defaultData,\r\n isValid: '',\r\n errors: [],\r\n alwaysShowError: false,\r\n selected: dropdownSeleted,\r\n };\r\n\r\n const popupSchema = {\r\n ...this.props.schema,\r\n properties: {\r\n ...this.props.schema.properties,\r\n Name: {\r\n ...this.props.schema.properties.Name,\r\n required: true,\r\n },\r\n DisclaimerLayout: {\r\n ...this.props.schema.properties.DisclaimerLayout,\r\n required: true,\r\n },\r\n Title: {\r\n ...this.props.schema.properties.Title,\r\n required: true,\r\n },\r\n PopupText: {\r\n ...this.props.schema.properties.PopupText,\r\n required: true,\r\n },\r\n },\r\n };\r\n const lineSchema = {\r\n ...this.props.schema,\r\n properties: {\r\n ...this.props.schema.properties,\r\n Name: {\r\n ...this.props.schema.properties.Name,\r\n required: true,\r\n },\r\n DisclaimerLayout: {\r\n ...this.props.schema.properties.DisclaimerLayout,\r\n required: true,\r\n },\r\n LineText: {\r\n ...this.props.schema.properties.LineText,\r\n required: true,\r\n },\r\n FinalUrls: {\r\n ...this.props.schema.properties.FinalUrls,\r\n required: true,\r\n },\r\n },\r\n };\r\n\r\n this.schema = {\r\n [LayoutType.popup]: popupSchema,\r\n [LayoutType.line]: lineSchema,\r\n };\r\n\r\n this.ref = createRef();\r\n }\r\n\r\n onSubmit = () => {\r\n this.setState({ alwaysShowError: true }, () => {\r\n this.getFirstAlertElementAndFocus();\r\n });\r\n\r\n if (this.state.isValid === 'false') {\r\n return;\r\n }\r\n\r\n if (this.state.disclaimer.DisclaimerLayout === LayoutType.popup) {\r\n this.state.disclaimer.Title = this.state.selected.value;\r\n }\r\n\r\n const dataToBeSaved = this.state.disclaimer;\r\n\r\n if (this.props.editData && this.props.editData.Id > 0) {\r\n // eslint-disable-next-line no-alert, no-restricted-globals\r\n if (confirm(this.props.i18n.getString('Disclaimers_Edit_Confirmation'))) {\r\n dataToBeSaved.Id = this.props.editData.Id;\r\n } else {\r\n return;\r\n }\r\n }\r\n\r\n this.props.repository.create(dataToBeSaved)\r\n .then(() => {\r\n this.props.onClose();\r\n this.props.onDisclaimerAddOrUpdated(dataToBeSaved);\r\n })\r\n .catch((errors) => {\r\n this.setState({\r\n errors: _.chain(errors)\r\n .uniq(value => value.message)\r\n .map(error => (error.isHtmlMessage ? { DangerousHtmlMessage: error.message } : error.message))\r\n .value(),\r\n });\r\n })\r\n .finally(withUiBlock($(this.props.usePanel ? '.disclaimer-editor-panel .panel-content' : '.disclaimer-editor-modal'), this.props.i18n.getString('Loading')));\r\n };\r\n\r\n onValidate = (result) => {\r\n this.setState(preState => ({\r\n isValid: result.isValid.toString(),\r\n disclaimer: preState.disclaimer.DisclaimerLayout !== result.data.DisclaimerLayout\r\n && result.data.DisclaimerLayout === LayoutType.popup ?\r\n _.defaults({ Title: this.props.i18n.getString('Disclaimers_Title_Default') }, result.data)\r\n : result.data,\r\n errors: [],\r\n }));\r\n };\r\n\r\n onLayoutTypeChange = () => {\r\n this.setState({\r\n alwaysShowError: false,\r\n selected: this.dropdownitems[0],\r\n });\r\n };\r\n\r\n onSelectedChange = (selected) => {\r\n this.setState({\r\n selected,\r\n });\r\n };\r\n\r\n getFirstAlertElementAndFocus = () => {\r\n const alertNode = this.ref.current.querySelector('.col-sm-8 [role=\"alert\"]');\r\n if (alertNode) {\r\n alertNode.parentElement.firstChild.focus();\r\n }\r\n\r\n return null;\r\n };\r\n\r\n renderlayoutOptions = item => (\r\n \r\n {this.props.i18n.getString(`Disclaimers_DisplayLayout_${item}`)}\r\n {item === LayoutType.line\r\n && this.state.disclaimer.DisclaimerLayout === LayoutType.line\r\n && )}\r\n message={this.props.i18n.getString('Disclaimers_DisplayLayout_AdditionalLine_Hint')}\r\n />}\r\n \r\n );\r\n\r\n renderSettingItem = ({\r\n settingName,\r\n labelText,\r\n helpId = '',\r\n children,\r\n }) => (\r\n
\r\n \r\n
\r\n {children}\r\n
\r\n
\r\n );\r\n\r\n render() {\r\n const header = this.props.usePanel || (\r\n
\r\n \r\n
\r\n {this.props.i18n.getString(this.props.editData ? 'Disclaimers_Edit' : 'Disclaimers_Create')}\r\n
\r\n
\r\n );\r\n\r\n const footer = (\r\n
\r\n \r\n {this.props.i18n.getString('Save')}\r\n \r\n \r\n
\r\n );\r\n\r\n const customNameErrors = {\r\n required: this.props.i18n.getString('DisclaimerNameRequired'),\r\n };\r\n\r\n const errorProcessorForName = errors => _.map(\r\n errors,\r\n (oldError, key) => customNameErrors[key] || oldError\r\n );\r\n\r\n const nameSetting = this.renderSettingItem({\r\n settingName: 'name',\r\n labelText: 'Disclaimers_Name_Label',\r\n helpId: 'pop_BA_DisclaimerAd_Name',\r\n children: (),\r\n });\r\n\r\n const getPopUpLayoutHelpId = (hidePopupOption, isNativeAd) => {\r\n if (hidePopupOption) {\r\n return 'pop_BA_DisclaimerAd_LayoutChina';\r\n }\r\n\r\n return isNativeAd ? 'pop_BA_Audience_DisclaimerLayout' : 'pop_BA_DisclaimerAd_Layout';\r\n };\r\n\r\n const layoutTypeSetting = this.renderSettingItem({\r\n settingName: 'layoutType',\r\n labelText: 'Disclaimers_DisplayLayout_Label',\r\n helpId: getPopUpLayoutHelpId(this.hidePopupOption, this.props.isNativeAd),\r\n children: (\r\n
\r\n \r\n
\r\n ),\r\n });\r\n\r\n const getTitlePopupHelpId = (isNativeAd) => {\r\n if (isNativeAd) {\r\n return { helpId: 'pop_BA_Audience_DisclaimerTitle' };\r\n }\r\n return {};\r\n };\r\n\r\n const titleSetting = this.renderSettingItem({\r\n settingName: 'title',\r\n labelText: 'Disclaimers_Title_Label',\r\n children: (\r\n \r\n ),\r\n ...getTitlePopupHelpId(this.props.isNativeAd),\r\n });\r\n\r\n const customDescriptionErrors = {\r\n required: this.props.i18n.getString('DisclaimerInformationRequired'),\r\n };\r\n\r\n const errorProcessorForDescription = errors => _.map(\r\n errors,\r\n (oldError, key) => customDescriptionErrors[key] || oldError\r\n );\r\n\r\n const getInformationPopupSetting = (isNativeAd) => {\r\n if (isNativeAd) {\r\n return { helpId: 'pop_BA_Audience_DisclaimerInfo' };\r\n }\r\n return {};\r\n };\r\n\r\n const popupSetting = this.renderSettingItem({\r\n settingName: 'information-popup',\r\n labelText: 'Disclaimers_Information_Label',\r\n ...getInformationPopupSetting(this.props.isNativeAd),\r\n children: (\r\n \r\n \r\n \r\n \r\n ),\r\n });\r\n\r\n const lineSetting = this.renderSettingItem({\r\n settingName: 'information-additionalline',\r\n labelText: 'Disclaimers_Information_Label',\r\n children: (\r\n \r\n \r\n \r\n \r\n ),\r\n });\r\n\r\n const customFinalUrlErrors = {\r\n required: this.props.i18n.getString('FinalURLRequired'),\r\n };\r\n\r\n const errorProcessorForFinalUrl = errors => _.map(\r\n errors,\r\n (oldError, key) => customFinalUrlErrors[key] || oldError\r\n );\r\n\r\n const finalUrlSetting = this.renderSettingItem({\r\n settingName: 'finalurl',\r\n labelText: 'Ad_FinalUrl',\r\n helpId: 'pop_BA_DisclaimerAd_FinalURL',\r\n children: (\r\n \r\n ),\r\n });\r\n\r\n const mobileUrlSetting = this.renderSettingItem({\r\n settingName: 'mobileurl',\r\n labelText: 'MobileFinalUrl_Label',\r\n helpId: this.props.isNativeAd? 'pop_BA_Audience_DisclaimerMobile' : 'pop_BA_DIsclaimerAd_MobileURL',\r\n children: (\r\n \r\n ),\r\n });\r\n\r\n return (\r\n \r\n {header}\r\n
\r\n {this.state.disclaimer.DisclaimerLayout === LayoutType.popup ?\r\n \r\n {nameSetting}\r\n {layoutTypeSetting}\r\n {titleSetting}\r\n {popupSetting}\r\n {finalUrlSetting}\r\n {mobileUrlSetting}\r\n :\r\n \r\n {nameSetting}\r\n {layoutTypeSetting}\r\n {lineSetting}\r\n {finalUrlSetting}\r\n {mobileUrlSetting}\r\n \r\n }\r\n {this.state.errors &&\r\n this.state.errors.length > 0 &&\r\n
\r\n \r\n
}\r\n
\r\n {footer}\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport const DisclaimerEditor = withDefaultStyles(UnStyledDisclaimerEditor, getStyles);\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport _ from 'underscore';\r\nimport $ from 'jquery';\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { DropdownSelector } from '@bingads-webui-react/dropdown-selector';\r\nimport { withUiBlock } from '@bingads-webui/uiblocker';\r\n\r\nconst PageSize = 10;\r\nconst MaxTotalSize = 200; // According to statics, we have about 1000 disclaimer in total, set 200 here to make sure we can get all the data\r\nconst Mode = 'async';\r\n\r\nconst PopupDisclaimerFilter = items => _.filter(items, item => _.get(item, 'DisclaimerLayout', '') === 'Popup');\r\n\r\nexport class DisclaimerSelector extends React.PureComponent {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.isMountedFlag = false;\r\n this.dropdownSelectorRef = React.createRef();\r\n this.shouldFilterPopup = props.shouldFilterPopup;\r\n this.state = {\r\n totalCount: 0,\r\n items: [],\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this.isMountedFlag = true;\r\n this.onFetch({ pageNumber: 0 });\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n if (this.props.toggleSinceUpdated !== prevProps.toggleSinceUpdated) {\r\n if (this.dropdownSelectorRef.current) {\r\n $('.search-box__input', this.dropdownSelectorRef.current.componentNode).val('');\r\n }\r\n this.onFetch({\r\n query: '',\r\n pageNumber: 0,\r\n });\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n this.isMountedFlag = false;\r\n }\r\n\r\n onFetch = ({ query = '', pageNumber }) => this.props.repository.findAll({\r\n where: {\r\n name: {\r\n contains: query,\r\n },\r\n },\r\n skip: pageNumber * PageSize,\r\n limit: PageSize,\r\n })\r\n .then(({ items, total }) => {\r\n if (this.isMountedFlag) {\r\n const filteredItems = this.shouldFilterPopup ? PopupDisclaimerFilter(items) : items; // TODO: support filter disclaimer type in the back end\r\n const totalCountToInsert = this.shouldFilterPopup ? filteredItems.length : total; // We should calculate the total count in another call when we need to filter out non-popup disclaimers\r\n this.setState({\r\n items: filteredItems,\r\n totalCount: totalCountToInsert,\r\n });\r\n }\r\n })\r\n .then(() => {\r\n if (this.shouldFilterPopup) {\r\n this.fetchPopUpDisclaimerTotalCount({ query }); // Correct the total count for native ad scenario\r\n }\r\n });\r\n\r\n onEdit = extension => (event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.dropdownSelectorRef.current.instanceRef.handleClickOutside(event);\r\n $('.disclaimer-selector .dropdown-toggle').focus();\r\n this.props.onEdit(extension);\r\n }\r\n\r\n onRemove = extension => (event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n // eslint-disable-next-line no-alert, no-restricted-globals\r\n if (confirm(`${this.props.i18n.getString('Disclaimers_Remove_Confirmation')}\\n${this.props.i18n.getString('Disclaimers_Remove_Confirmation_body')}`)) {\r\n this.props.repository.destroy(extension.Id)\r\n .finally(withUiBlock($('.disclaimer-selector'), this.props.i18n.getString('Loading')))\r\n .then(() => {\r\n this.props.onRemove(extension);\r\n });\r\n }\r\n }\r\n\r\n getDropdownButtonA11yLabel = (selectedItem, i18n) => {\r\n const {\r\n Name,\r\n } = selectedItem;\r\n const label = i18n.getString('Disclaimers_Select');\r\n\r\n return Name ? `${Name} ${label}` : label;\r\n }\r\n\r\n fetchPopUpDisclaimerTotalCount = ({ query = '' }) => this.props.repository.findAll({\r\n where: {\r\n name: {\r\n contains: query,\r\n },\r\n },\r\n skip: 0,\r\n limit: MaxTotalSize,\r\n }).then(({ items }) => {\r\n if (this.isMountedFlag && this.shouldFilterPopup) {\r\n const filteredItems = PopupDisclaimerFilter(items); // TODO: support filter disclaimer type in the back end\r\n const totalCountToInsert = filteredItems.length; // We should calculate the total count in another call when we need to filter out non-popup disclaimers\r\n this.setState({\r\n totalCount: totalCountToInsert,\r\n });\r\n }\r\n });\r\n\r\n renderItem = item => (\r\n
  • \r\n \r\n {item.Name}\r\n \r\n \r\n \r\n {this.props.i18n.getString('Edit')}\r\n \r\n {' | '}\r\n \r\n {this.props.i18n.getString('Remove')}\r\n \r\n \r\n
  • \r\n )\r\n\r\n renderSelectedItem = (item) => {\r\n const name = item && item.Id > 0 ?\r\n item.Name : this.props.i18n.getString('Disclaimers_Select');\r\n\r\n return ({name});\r\n }\r\n\r\n renderEmptyList = () => (\r\n
    \r\n {this.props.i18n.getString('Search_No_Result')}\r\n
    \r\n )\r\n\r\n render() {\r\n return (\r\n
    \r\n {((this.dropdownSelectorRef.current && $('.search-box__input', this.dropdownSelectorRef.current.componentNode).val()) ||\r\n (this.state.items && this.state.items.length > 0)) &&\r\n }\r\n
    \r\n );\r\n }\r\n}\r\n\r\nDisclaimerSelector.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n selectedDisclaimer: PropTypes.shape({\r\n Id: PropTypes.number,\r\n }),\r\n repository: PropTypes.shape({\r\n findAll: PropTypes.func.isRequired,\r\n destroy: PropTypes.func.isRequired,\r\n }).isRequired,\r\n onSelectDisclaimer: PropTypes.func.isRequired,\r\n toggleSinceUpdated: PropTypes.bool.isRequired,\r\n onEdit: PropTypes.func,\r\n onRemove: PropTypes.func,\r\n shouldFilterPopup: PropTypes.bool,\r\n enableRandomPage: PropTypes.bool,\r\n};\r\n\r\nDisclaimerSelector.defaultProps = {\r\n enableRandomPage: true,\r\n selectedDisclaimer: { Id: 0 },\r\n onEdit: _.noop,\r\n onRemove: _.noop,\r\n shouldFilterPopup: false,\r\n};\r\n","export const DisclaimerStringMap = {\r\n DisclaimerLabelText: _TL_('Disclaimer'),\r\n Disclaimers_Campiagn_Description: _TL_('Show a disclaimer in ads for this campaign'),\r\n Disclaimers_Native_Campaign_Description: _TL_('Show a disclaimer in Native ads for this campaign'),\r\n Disclaimers_Campaign_Hint: _TL_('This is your only opportunity to add a disclaimer to ads in this campaign. If you subsequently remove the disclaimer, the ads in this campaign will not serve.'),\r\n Disclaimers_Campaign_Hint_New: _TL_('You can enable disclaimers in ads for new or existing campaigns. Adding a disclaimer means this campaign must always contain one; therefore, if you ever remove the disclaimer, the ads in this campaign will not serve.
    Once you enable a disclaimer, you’ll lose traffic from publishers who don’t support disclaimers. '),\r\n Disclaimers_Add: _TL_('+ Add disclaimer'),\r\n Disclaimers_Create: _TL_('Create disclaimer'),\r\n Disclaimers_DisplayLayout_Label: _TL_('Disclaimer layout'),\r\n Disclaimers_DisplayLayout_Popup: _TL_('Popup layout'),\r\n Disclaimers_DisplayLayout_AdditionalLine: _TL_('Additional line layout'),\r\n Disclaimers_DisplayLayout_AdditionalLine_Hint: _TL_('Ads with the additional line layout disclaimer will not have Ad text 2.'),\r\n Disclaimers_Edit: _TL_('Edit disclaimer'),\r\n Disclaimers_Name_Label: _TL_('Disclaimer name'),\r\n Disclaimers_Select: _TL_('Select a disclaimer'),\r\n Disclaimers_Title_Label: _TL_('Disclaimer title'),\r\n Disclaimers_Title_Default: _TL_('Disclaimer info'),\r\n Disclaimers_Dropdown_Disclaimer: _TL_('Disclaimer'),\r\n Disclaimers_Dropdown_Disclosure: _TL_('Disclosure'),\r\n Disclaimers_Dropdown_MoreDisclaimer: _TL_('More disclaimer info'),\r\n Disclaimers_Dropdown_Offer: _TL_('Offer Details'),\r\n Disclaimers_Dropdown_SafetyInfor: _TL_('Safety Info'),\r\n Disclaimers_Dropdown_SafetyInformation: _TL_('Safety Information'),\r\n Disclaimers_Information_Label: _TL_('Disclaimer information'),\r\n Disclaimers_Edit_Confirmation: _TL_('This disclaimer is associated to other campaigns and any changes to this disclaimer will apply to all associated campaigns.'),\r\n Disclaimers_Remove_Confirmation: _TL_('Are you sure you want to delete this disclaimer?'),\r\n Disclaimers_Remove_Confirmation_body: _TL_('Deleting this disclaimer will delete it for all campaigns associated to it. It will stop all ads under the associated campaigns from serving.'),\r\n Button_Close: _TL_('Button_Close'),\r\n Cancel: _TL_('Cancel'),\r\n Save: _TL_('Save'),\r\n Edit: _TL_('Edit'),\r\n Remove: _TL_('Remove'),\r\n LearnMoreLinkText: _TL_('Learn more'),\r\n 'Click to learn more about {{item}}': _TL_('Click to learn more about {{item}}'),\r\n RemainingCharactersText_New: _TL_('{{count}} characters remaining'),\r\n ExceededCharactersText_New: _TL_('Exceeded by {{count}} characters'),\r\n Ad_FinalUrl: _TL_('Final URL'),\r\n MobileFinalUrl_Label: _TL_('Mobile URL'),\r\n Loading: _TL_('Loading'),\r\n Search_No_Result: _TL_('No results found based on your search.'),\r\n 'Found {{totalCount}} Results for {{searchText}}': _TL_('Found {{totalCount}} Results for {{searchText}}'),\r\n 'No results found from {{searchText}}': _TL_('No results found from {{searchText}}'),\r\n DisclaimerNameRequired: _TL_('Disclaimer name is required'),\r\n DisclaimerInformationRequired: _TL_('Disclaimer information is required'),\r\n FinalURLRequired: _TL_('Final URL is required'),\r\n Validation_Base_Field_Not_Valid: _TL_('Field is not valid'),\r\n Validation_NotEmpty_Required_Field: _TL_('Required field'),\r\n Validation_String_Max_Length: _TL_('Field should not exceed {{maxlength}} characters'),\r\n Validation_String_Invalid_Characters: _TL_('Field contains invalid characters'),\r\n Validation_Number_Require_Numeric: _TL_('Field requires numeric value'),\r\n Validation_Number_Max_Length: _TL_('Number should not exceed max length'),\r\n Validation_Number_Range_Min: _TL_('Number should be larger than {{min}}'),\r\n Validation_Number_Range_Max: _TL_('Number should be smaller than {{max}}'),\r\n Validation_Number_Range_Between: _TL_('Number should be between {{min}} and {{max}}'),\r\n Validation_Array_Size_Max: _TL_('List should have at most {{max}} items'),\r\n Validation_Array_Size_Between: _TL_('List should have at least {{min}} and at most {{max}} items'),\r\n Validation_Array_Items_Invalid: _TL_('Some of items in list are invalid'),\r\n Validation_Array_Items_Duplicate: _TL_('List has duplicate items'),\r\n Close: _TL_('Close'),\r\n 'Disclaimer editor side panel opened': _TL_('Disclaimer editor side panel opened'),\r\n EntitySelector_Search_Placeholder: _TL_('Search'),\r\n 'No results found for {{searchText}}': _TL_('No results found for {{searchText}}'),\r\n '{{itemName}} Selected': _TL_('{{itemName}} Selected'),\r\n Disclaimers_Should_Check_With_Selected_Disclaimer: _TL_('You should check show disclaimer with a selected disclaimer'),\r\n EntitySelector_Pagination_Page: _TL_('Page:'),\r\n EntitySelector_Pagination_TotalPageCountText: _TL_('of'),\r\n EntitySelector_Pagination_PreviousPageText: _TL_('Previous page'),\r\n EntitySelector_Pagination_NextPageText: _TL_('Next page'),\r\n};\r\n\r\n","/* eslint-disable jsx-a11y/anchor-is-valid, jsx-a11y/label-has-for */\r\nimport _ from 'underscore';\r\nimport React from 'react';\r\nimport Modal from 'react-modal';\r\nimport PropTypes from 'prop-types';\r\nimport { Checkbox } from '@bingads-webui-react/checkbox';\r\nimport { Alert } from '@bingads-webui-react/alert';\r\nimport { HelpPopup } from '@bingads-webui-react/help-popup';\r\nimport { ErrorMessages } from '@bingads-webui-react/validation';\r\nimport { Panel } from '@bingads-webui-campaign-react/panel';\r\nimport { DisclaimerEditor } from './disclaimer-editor';\r\nimport { DisclaimerSelector } from './disclaimer-selector';\r\n\r\nexport { DisclaimerStringMap } from './i18n/disclaimer-string-map';\r\n\r\nModal.setAppElement(document.body);\r\n\r\nconst defaultSelectedDisclaimer = () => ({ Id: 0 });\r\n\r\nexport class AdsCampaignDisclaimers extends React.PureComponent {\r\n static propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n campaignId: PropTypes.number,\r\n DisclaimerAdsEnabled: PropTypes.bool,\r\n AllowDisclaimerEnabled: PropTypes.bool,\r\n selectedDisclaimer: PropTypes.shape({\r\n Id: PropTypes.number,\r\n }),\r\n resetSelectedDisclaimer: PropTypes.func,\r\n // eslint-disable-next-line react/forbid-prop-types\r\n schema: PropTypes.object.isRequired,\r\n repository: PropTypes.shape({\r\n extension: PropTypes.shape({\r\n create: PropTypes.func.isRequired,\r\n destroy: PropTypes.func.isRequired,\r\n }).isRequired,\r\n }).isRequired,\r\n usePanel: PropTypes.bool,\r\n isDisclaimerCheckboxDisabled: PropTypes.bool,\r\n onDisclaimerCheckboxChange: PropTypes.func,\r\n onDataChange: PropTypes.func,\r\n isForNew: PropTypes.bool,\r\n isNativeAd: PropTypes.bool,\r\n disableTitle: PropTypes.bool,\r\n enableRandomPage: PropTypes.bool,\r\n showOnlyPopupLayout: PropTypes.bool,\r\n };\r\n\r\n static defaultProps = {\r\n campaignId: 0,\r\n enableRandomPage: true,\r\n DisclaimerAdsEnabled: false,\r\n AllowDisclaimerEnabled: false,\r\n selectedDisclaimer: defaultSelectedDisclaimer(),\r\n resetSelectedDisclaimer: _.noop,\r\n usePanel: false,\r\n isDisclaimerCheckboxDisabled: false,\r\n onDisclaimerCheckboxChange: _.noop,\r\n onDataChange: _.noop,\r\n isForNew: false,\r\n isNativeAd: false,\r\n disableTitle: false,\r\n showOnlyPopupLayout: false,\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n const selectedDisclaimerInfo = this.props.DisclaimerAdsEnabled && _.result(this.props.selectedDisclaimer, 'Id', 0) ?\r\n this.props.selectedDisclaimer : defaultSelectedDisclaimer();\r\n // the disclaimer uncheck by default\r\n this.state = {\r\n isCheckboxFocusStyle: false,\r\n enableDisclaimer: this.props.DisclaimerAdsEnabled,\r\n isAddOpen: false,\r\n selectedDisclaimer: selectedDisclaimerInfo,\r\n errorMessage: [],\r\n toggleSinceUpdated: true,\r\n EditingDisclaimer: null,\r\n };\r\n\r\n // only for test purpose\r\n if (this.props.testRef) {\r\n this.props.testRef.current = {\r\n getValues: this.getValues.bind(this),\r\n state: this.state,\r\n };\r\n }\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n if (this.props.DisclaimerAdsEnabled !== prevProps.DisclaimerAdsEnabled) {\r\n this.props.onDisclaimerCheckboxChange(this.props.DisclaimerAdsEnabled);\r\n const errorMeassageClearIfNeeded = this.props.isForNew ? {} : { errorMessage: [] };\r\n // eslint-disable-next-line react/no-did-update-set-state\r\n this.setState({\r\n enableDisclaimer: this.props.DisclaimerAdsEnabled,\r\n isAddOpen: false,\r\n selectedDisclaimer: this.props.DisclaimerAdsEnabled && _.result(this.props.selectedDisclaimer, 'Id', 0) ?\r\n this.props.selectedDisclaimer : defaultSelectedDisclaimer(),\r\n EditingDisclaimer: null,\r\n ...errorMeassageClearIfNeeded,\r\n });\r\n }\r\n\r\n if (this.props.isForNew &&\r\n this.props.DisclaimerAdsEnabled && _.result(this.props.selectedDisclaimer, 'Id', 0)\r\n && _.get(this.props.selectedDisclaimer, 'Id', 0) !== _.get(prevProps.selectedDisclaimer, 'Id', 0)) {\r\n // eslint-disable-next-line react/no-did-update-set-state\r\n this.setState({\r\n selectedDisclaimer: this.props.selectedDisclaimer,\r\n });\r\n }\r\n\r\n if (this.props.isForNew &&\r\n (this.state.enableDisclaimer !== prevState.enableDisclaimer || _.get(prevState, ['selectedDisclaimer', 'Id'], 0) !== _.get(this.state, ['selectedDisclaimer', 'Id'], 0))\r\n ) {\r\n this.props.onDataChange();\r\n }\r\n }\r\n\r\n onCheckedChange = ({ isTrusted }) => {\r\n this.setState((prev) => {\r\n const newValue = !prev.enableDisclaimer;\r\n this.props.onDisclaimerCheckboxChange(newValue);\r\n return {\r\n enableDisclaimer: newValue,\r\n errorMessage: [],\r\n isCheckboxFocusStyle: newValue && isTrusted === false,\r\n };\r\n });\r\n };\r\n\r\n onDisclaimerAddOrUpdated = (updatedExtension = null) => {\r\n if (updatedExtension && updatedExtension.Id > 0 &&\r\n updatedExtension.Id === this.state.selectedDisclaimer.Id) {\r\n this.setState(prev => ({\r\n selectedDisclaimer: updatedExtension,\r\n toggleSinceUpdated: !prev.toggleSinceUpdated,\r\n }));\r\n } else {\r\n this.setState(prev => ({\r\n toggleSinceUpdated: !prev.toggleSinceUpdated,\r\n }));\r\n }\r\n };\r\n\r\n onAddClick = (e) => {\r\n e.preventDefault();\r\n this.setState({\r\n isAddOpen: true,\r\n });\r\n };\r\n\r\n onEditUIClose = () => {\r\n this.setState({\r\n isAddOpen: false,\r\n EditingDisclaimer: null,\r\n });\r\n };\r\n\r\n onSelectDisclaimer = (selectedItem) => {\r\n this.setState({\r\n selectedDisclaimer: selectedItem,\r\n errorMessage: [],\r\n });\r\n };\r\n\r\n onEdit = (extension) => {\r\n this.setState({\r\n EditingDisclaimer: extension,\r\n isAddOpen: true,\r\n });\r\n };\r\n\r\n onRemove = (extension) => {\r\n if (extension.Id === this.state.selectedDisclaimer.Id) {\r\n this.setState({\r\n selectedDisclaimer: defaultSelectedDisclaimer(),\r\n });\r\n }\r\n if (extension.Id === _.result(this.props.selectedDisclaimer, 'Id', 0)) {\r\n this.props.resetSelectedDisclaimer();\r\n }\r\n this.onDisclaimerAddOrUpdated();\r\n };\r\n\r\n getValues = (campaignName) => {\r\n const result = {};\r\n // We need to update the value anyway even if the data is illegal in the display plus campaign\r\n if (this.props.isForNew || this.validate()) {\r\n result.DisclaimerAdsEnabled = this.state.enableDisclaimer;\r\n\r\n const campaignInfo = this.props.campaignId > 0 ? {\r\n Campaign: {\r\n Id: this.props.campaignId,\r\n },\r\n } : {\r\n CampaignName: campaignName,\r\n };\r\n if (this.state.enableDisclaimer) {\r\n if (!this.props.selectedDisclaimer ||\r\n this.props.selectedDisclaimer.Id !== this.state.selectedDisclaimer.Id) {\r\n result.AdExtensionAssociations = [_.defaults({\r\n Id: this.state.selectedDisclaimer.Id,\r\n Name: this.state.selectedDisclaimer.Name,\r\n Type: 'CampaignDisclaimerAdExtension',\r\n Status: 'Active',\r\n }, campaignInfo)];\r\n if (_.result(this.props.selectedDisclaimer, 'Id', 0)) {\r\n result.AdExtensionAssociations = result.AdExtensionAssociations.concat(_.defaults({\r\n Id: this.props.selectedDisclaimer.Id,\r\n Type: 'CampaignDisclaimerAdExtension',\r\n Status: 'Deleted',\r\n }, campaignInfo));\r\n }\r\n }\r\n }\r\n if (!this.state.enableDisclaimer && this.props.selectedDisclaimer && this.props.selectedDisclaimer.Id) {\r\n result.AdExtensionAssociations = [_.defaults({\r\n Id: this.props.selectedDisclaimer.Id,\r\n Type: 'CampaignDisclaimerAdExtension',\r\n Status: 'Deleted',\r\n }, campaignInfo)];\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n validate = () => {\r\n const valid = !this.state.enableDisclaimer || (\r\n this.state.selectedDisclaimer\r\n && this.state.selectedDisclaimer.Id > 0);\r\n this.setState({\r\n errorMessage: valid ?\r\n [] : [this.props.i18n.getString('Validation_NotEmpty_Required_Field')],\r\n });\r\n return valid;\r\n };\r\n\r\n validateAndWarn = () => {\r\n const valid = this.validate();\r\n return valid ? null : this.props.i18n.getString('Disclaimers_Should_Check_With_Selected_Disclaimer');\r\n };\r\n\r\n render() {\r\n const disclaimerEditor = (\r\n \r\n );\r\n\r\n const addContent = (\r\n \r\n
    \r\n \r\n {this.props.i18n.getString('Disclaimers_Add')}\r\n \r\n
    \r\n {this.props.usePanel ?\r\n \r\n {disclaimerEditor}\r\n :\r\n \r\n {disclaimerEditor}\r\n \r\n }\r\n
    );\r\n\r\n const selectorContent = (\r\n \r\n );\r\n\r\n const errorsContent = this.state.errorMessage && this.state.errorMessage.length > 0 &&\r\n ();\r\n // todo search campaign only\r\n return (this.props.campaignId === 0 ||\r\n (this.props.campaignId > 0)) && (\r\n
    \r\n {\r\n !this.props.isForNew && !this.props.disableTitle && (\r\n
    \r\n \r\n
    \r\n )\r\n }\r\n
    \r\n {(this.props.campaignId > 0 && !this.props.AllowDisclaimerEnabled) ?\r\n \r\n
    \r\n {this.props.isNativeAd ?\r\n this.props.i18n.getString('Disclaimers_Native_Campaign_Description')\r\n : this.props.i18n.getString('Disclaimers_Campiagn_Description')}\r\n
    \r\n {selectorContent}\r\n {errorsContent}\r\n {addContent}\r\n
    :\r\n \r\n \r\n {this.props.isNativeAd ?\r\n this.props.i18n.getString('Disclaimers_Native_Campaign_Description')\r\n : this.props.i18n.getString('Disclaimers_Campiagn_Description')}\r\n \r\n
    \r\n {this.state.enableDisclaimer &&\r\n \r\n )}\r\n message={this.props.AllowDisclaimerEnabled ? this.props.i18n.getString('Disclaimers_Campaign_Hint_New') : this.props.i18n.getString('Disclaimers_Campaign_Hint')}\r\n />\r\n {selectorContent}\r\n {errorsContent}\r\n {addContent}\r\n }\r\n
    \r\n
    \r\n }\r\n
    \r\n
    );\r\n }\r\n}\r\n\r\n","import _ from 'underscore';\r\n\r\nexport const viewModelToBulkModelForDisclaimerAssociation = ({ campaignViewModel }) => {\r\n const associations = campaignViewModel.data.AdExtensionAssociations || [];\r\n const bulkAssociations = associations.map(association => _.omit(association, ['Client Id', 'Name']));\r\n return { AdExtensionAssociations: bulkAssociations };\r\n};\r\n","import {\r\n makeStyles,\r\n shorthands,\r\n tokens,\r\n} from '@fluentui/react-components';\r\n\r\nexport const useStyles = makeStyles({\r\n adsStudioColorPicker: {\r\n '& .color_icon': {\r\n width: '20px',\r\n height: '20px',\r\n },\r\n\r\n '& .info_icon': {\r\n width: '14px',\r\n height: '14px',\r\n },\r\n '& .card-header': {\r\n ...shorthands.borderBottom(tokens.strokeWidthThin, 'solid', tokens.colorNeutralStroke2),\r\n },\r\n '& .list-body-header': {\r\n ...shorthands.margin('12px', 0),\r\n },\r\n },\r\n flex: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n },\r\n editBtn: {\r\n width: '32px',\r\n height: '32px',\r\n ...shorthands.borderRadius(tokens.borderRadiusCircular),\r\n backgroundColor: tokens.colorNeutralBackground1,\r\n backdropFilter: 'blur(4px)',\r\n },\r\n delBtn: {\r\n ...shorthands.border('none'),\r\n width: '100%',\r\n fontSize: tokens.fontSizeBase300,\r\n color: tokens.colorNeutralForeground2,\r\n ...shorthands.padding(tokens.spacingVerticalM),\r\n '&:hover': {\r\n backgroundColor: tokens.colorNeutralBackground1,\r\n },\r\n },\r\n flexColumn: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n flexDirection: 'column',\r\n },\r\n hr: {\r\n position: 'absolute',\r\n left: 0,\r\n right: 0,\r\n ...shorthands.margin(0),\r\n color: tokens.colorNeutralStroke1,\r\n },\r\n tooltip: {\r\n width: '300px',\r\n maxWidth: '300px',\r\n flexDirection: 'column',\r\n },\r\n adsStudioColorPalette: {\r\n display: 'flex',\r\n },\r\n paletteAddColor: {\r\n ...shorthands.borderRadius(tokens.borderRadiusXLarge),\r\n maxWidth: 'none',\r\n },\r\n paletteColor: {\r\n ...shorthands.borderRadius(tokens.borderRadiusXLarge),\r\n maxWidth: 'none',\r\n },\r\n paletteBox: {\r\n ...shorthands.border(tokens.strokeWidthThick, 'solid', tokens.colorNeutralBackground1),\r\n ...shorthands.borderRadius(tokens.borderRadiusXLarge),\r\n },\r\n newColor: {\r\n ...shorthands.border(tokens.strokeWidthThin, 'dashed', '#C8C6C4'),\r\n },\r\n});\r\n\r\nexport const colorPickerStyles = {\r\n panel: { padding: 12 },\r\n root: {\r\n minWidth: 276,\r\n },\r\n flexPreviewBox: {\r\n styles: {\r\n ...shorthands.margin(0, 0, '10px', 0),\r\n '&>div': { height: '24px', width: '24px', ...shorthands.borderRadius(tokens.borderRadiusCircular) },\r\n },\r\n },\r\n flexContainer: {\r\n alignItems: 'center',\r\n },\r\n flexSlider: {\r\n styles: {\r\n ...shorthands.margin(tokens.spacingHorizontalSNudge, 0),\r\n '&>div': { height: '8px', ...shorthands.borderRadius(tokens.borderRadiusMedium) },\r\n '&>div>div': { width: '12px', height: '12px' },\r\n },\r\n },\r\n colorRectangle: { minHeight: 130 },\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 from 'react';\r\nimport { ColorPicker, IColor } from '@fluentui/react';\r\nimport { DeleteRegular } from '@fluentui/react-icons';\r\nimport {\r\n Tooltip, tokens, Button,\r\n mergeClasses\r\n} from '@fluentui/react-components';\r\nimport { useStyles, colorPickerStyles } from './style';\r\nimport { AdsColorPickerProps, TooltipContentProps } from './type';\r\n\r\nconst TooltipContent = ({\r\n colorData, onColorChange, onDelete, i18n,\r\n}: TooltipContentProps) => {\r\n const classes = useStyles();\r\n return (\r\n <>\r\n \r\n {onDelete &&\r\n <>\r\n
    \r\n }\r\n data-colorid={colorData.Name}\r\n onClick={onDelete}\r\n className={mergeClasses(classes.delBtn, 'delete_color_btn')}\r\n >\r\n {i18n.getString(_TL_('Delete color'))}\r\n \r\n \r\n }\r\n \r\n );\r\n};\r\n\r\nconst AdsColorPicker: React.FC = ({\r\n i18n,\r\n children,\r\n colorData,\r\n isColorSelected,\r\n onDelete,\r\n updateColor,\r\n onTooltipVisibilityChange,\r\n}) => {\r\n const onColorChange = (ev: React.SyntheticEvent, colorObj: IColor) => {\r\n updateColor(colorData.Name, colorObj);\r\n ev.stopPropagation();\r\n };\r\n const classes = useStyles();\r\n return (\r\n ,\r\n className: classes.tooltip,\r\n }}\r\n withArrow\r\n relationship=\"label\"\r\n positioning=\"below\"\r\n visible={isColorSelected}\r\n onVisibleChange={(_ev, data) => onTooltipVisibilityChange && onTooltipVisibilityChange(data.visible)}\r\n >\r\n {React.isValidElement(children) ? children : null}\r\n \r\n );\r\n};\r\nconst MemoizedAdsColorPicker = React.memo(AdsColorPicker);\r\nexport default MemoizedAdsColorPicker;\r\n\r\n","import { IColor } from '@fluentui/react';\r\nimport React, { useCallback, useEffect } from 'react';\r\n\r\n\r\ninterface UseCloseColorPickerProps {\r\n isSelected: boolean;\r\n colorData: { Name: string; HexCode: string };\r\n setIsSelected: (isSelected: boolean) => void;\r\n updateColor: (name: string, color: IColor) => void;\r\n}\r\n\r\nexport const useHandleCloseColorPicker = ({\r\n isSelected,\r\n colorData,\r\n setIsSelected,\r\n updateColor,\r\n}: UseCloseColorPickerProps) => {\r\n const popupRef = React.useRef(null);\r\n const handleClickOutside = useCallback((event) => {\r\n if (popupRef.current && !popupRef.current.contains(event.target) && event.target.className) {\r\n const { className } = event.target;\r\n const isColorPicker = typeof className === 'string' && (className.includes('ColorPicker') || className.includes('delete_color_btn') || className.includes('TextField'));\r\n if (!isColorPicker) {\r\n colorData.HexCode && updateColor(colorData.Name, { hex: colorData.HexCode, str: colorData.HexCode } as IColor);\r\n setIsSelected(false);\r\n }\r\n }\r\n }, [colorData.HexCode, colorData.Name, setIsSelected, updateColor]);\r\n\r\n useEffect(() => {\r\n if (isSelected) {\r\n document.addEventListener('click', handleClickOutside);\r\n } else {\r\n document.removeEventListener('click', handleClickOutside);\r\n }\r\n\r\n return () => {\r\n document.removeEventListener('click', handleClickOutside);\r\n };\r\n }, [handleClickOutside, isSelected]);\r\n\r\n return { popupRef };\r\n};\r\n\r\n\r\nexport const useCheckDuplicateColor = ({ allowDuplicates, paletteData, onUpdate }) => {\r\n const [isDuplicate, setIsDuplicate] = React.useState(false);\r\n useEffect(() => {\r\n isDuplicate && setIsDuplicate(false);\r\n }, [isDuplicate]);\r\n const onUpdateColor = useCallback((name, colorObj) => {\r\n if (!allowDuplicates) {\r\n const isDuplicateColor = paletteData.some(color => color.HexCode === colorObj.str);\r\n if (isDuplicateColor) {\r\n setIsDuplicate(true);\r\n return;\r\n }\r\n }\r\n onUpdate(name, colorObj);\r\n setIsDuplicate(false);\r\n }, [allowDuplicates, onUpdate, paletteData]);\r\n\r\n return {\r\n isDuplicate,\r\n onUpdateColor,\r\n };\r\n};\r\n","import React, { useEffect, useState } from 'react';\r\nimport { AddRegular, EditRegular } from '@fluentui/react-icons';\r\nimport { Button, Caption1Strong, mergeClasses } from '@fluentui/react-components';\r\nimport { IColor } from '@fluentui/react';\r\nimport { useStyles } from './style';\r\nimport {\r\n IColorAddButton,\r\n IBrandColors,\r\n} from './type';\r\nimport AdsColorPickerTooltip from './Tooltip';\r\nimport { useHandleCloseColorPicker } from './hooks';\r\n\r\nconst defaultState = {\r\n Name: '',\r\n HexCode: '',\r\n};\r\nexport const BrandColors = ({\r\n showEditBtn: enableEditBtn, // this will show edit icon on hover and on false will select color\r\n showTooltipOnSelect, // this will open tooltip on select color and hide edit icon\r\n defaultSelected,\r\n isDuplicate,\r\n i18n,\r\n colorData: color,\r\n hideCaption = false,\r\n onDelete,\r\n updateColor,\r\n palletteBoxSize,\r\n paletteColorSize,\r\n onTooltipVisibilityChange,\r\n}: IBrandColors) => {\r\n const [showEditBtn, setShowEditBtn] = useState(false);\r\n const [isSelected, setIsSelected] = useState(false);\r\n const [colorData, setColorData] = useState(color);\r\n useEffect(() => {\r\n if (isDuplicate) {\r\n setColorData(color);\r\n }\r\n }, [color, isDuplicate]);\r\n const classes = useStyles();\r\n const {\r\n popupRef,\r\n } = useHandleCloseColorPicker({\r\n isSelected,\r\n colorData,\r\n setIsSelected,\r\n updateColor,\r\n });\r\n const onEdit = () => {\r\n setIsSelected(true);\r\n };\r\n const onUpdate = (name: string, colorObj: IColor) => {\r\n setColorData({ Name: name, HexCode: colorObj.str });\r\n };\r\n const onMouseEnter = () => {\r\n enableEditBtn && setShowEditBtn(true);\r\n };\r\n const onMouseLeave = () => {\r\n setShowEditBtn(false);\r\n };\r\n const onKeyDown = (e) => {\r\n if (e.key === 'Enter' || e.key === ' ') {\r\n onMouseEnter();\r\n }\r\n };\r\n const onSelectColor = () => {\r\n if (showTooltipOnSelect) {\r\n setIsSelected(true);\r\n return;\r\n }\r\n if (!enableEditBtn) {\r\n updateColor(colorData.Name, { hex: colorData.HexCode, str: colorData.HexCode } as IColor);\r\n }\r\n };\r\n if (!colorData) return null;\r\n const selectedColorStyle = { boxShadow: 'inset 0 0 0 var(--strokeWidthThicker) var(--colorBrandStroke1), inset 0 0 0 5px var(--colorStrokeFocus1)' };\r\n return (\r\n \r\n
    \r\n \r\n \r\n {showEditBtn && !showTooltipOnSelect && (\r\n }\r\n data-colorid={colorData.Name}\r\n size=\"medium\"\r\n style={isSelected ? { visibility: 'hidden' } : {}}\r\n className={mergeClasses('edit_btn', classes.editBtn)}\r\n onClick={onEdit}\r\n />\r\n )}\r\n
    \r\n \r\n {!hideCaption && {colorData.HexCode}}\r\n \r\n\r\n \r\n );\r\n};\r\n\r\nexport const ColorAddButton = ({\r\n updateColor,\r\n i18n,\r\n isDuplicate,\r\n totalColors,\r\n palletteBoxSize,\r\n paletteColorSize,\r\n}: IColorAddButton) => {\r\n const classes = useStyles();\r\n const [isSelected, setIsSelected] = useState(false);\r\n const [colorData, setColorData] = useState(defaultState);\r\n useEffect(() => {\r\n setColorData(defaultState);\r\n }, [totalColors, isDuplicate]);\r\n const {\r\n popupRef,\r\n } = useHandleCloseColorPicker({\r\n isSelected,\r\n colorData,\r\n setIsSelected,\r\n updateColor,\r\n });\r\n const onAdd = () => {\r\n setIsSelected(true);\r\n };\r\n const onUpdate = (name: string, colorObj: IColor) => {\r\n setColorData({ Name: name, HexCode: colorObj.str });\r\n };\r\n\r\n return (\r\n \r\n \r\n {colorData && colorData.HexCode ? : }\r\n key=\"add_color\"\r\n onClick={onAdd}\r\n className={mergeClasses(classes.paletteAddColor, classes.newColor, 'add_button')}\r\n />\r\n }\r\n \r\n \r\n );\r\n};\r\n","import React from 'react';\r\nimport { Skeleton, SkeletonItem } from '@fluentui/react-components';\r\nimport { getSkeletonStyles } from './style';\r\n\r\nconst PaletteSkeleton = React.memo(() => {\r\n const classes = getSkeletonStyles();\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n});\r\n\r\nexport { PaletteSkeleton };\r\n","import React, { useMemo } from 'react';\r\nimport { FormCardDefaultHeader, FormCard, FormCardBody } from '@bingads-webui-fluent-component/form-cards';\r\nimport { ColorRegular } from '@fluentui/react-icons';\r\nimport { HelpButton } from '@bingads-webui-react/help-popup';\r\nimport { Body1Strong, mergeClasses } from '@fluentui/react-components';\r\nimport { useStyles } from './style';\r\nimport {\r\n AdsStudioColorPickerProps\r\n} from './type';\r\nimport { BrandColors, ColorAddButton } from './Palette';\r\nimport { PaletteSkeleton } from './PaletteSkelton';\r\nimport { useCheckDuplicateColor } from './hooks';\r\n\r\n\r\n// WILL CHANGE ID ONCE DATA START COMING FROM API\r\nconst AdsStudioColorPicker: React.FC = ({\r\n title,\r\n subTitle,\r\n text,\r\n isLoading,\r\n i18n,\r\n allowDuplicates,\r\n showEditBtn = true,\r\n defaultSelected,\r\n paletteData = [],\r\n maxColors = 2,\r\n helpTopic,\r\n helpLabel,\r\n onUpdate,\r\n onDelete,\r\n}) => {\r\n const totalColors = paletteData.length;\r\n const { isDuplicate, onUpdateColor } = useCheckDuplicateColor({ paletteData, allowDuplicates, onUpdate });\r\n const classes = useStyles();\r\n\r\n const renderHelpBubble = useMemo(() => (\r\n <>\r\n {helpTopic && }\r\n \r\n ), [helpLabel, helpTopic]);\r\n\r\n return (\r\n \r\n \r\n }\r\n />\r\n \r\n
    \r\n {subTitle}\r\n {text &&

    {text}

    }\r\n
    \r\n {isLoading ?\r\n :\r\n
    \r\n {paletteData.map(colorData => (\r\n colorData && \r\n ))}\r\n {(totalColors < maxColors) && }\r\n
    \r\n }\r\n
    \r\n
    \r\n \r\n );\r\n};\r\n\r\nconst MemoizedAdsStudioColorPicker = React.memo(AdsStudioColorPicker);\r\nexport default MemoizedAdsStudioColorPicker;\r\n","import _ from 'underscore';\r\nimport { useCallback, useReducer, useRef } from 'react';\r\n\r\nconst ACTION_TYPE_ADD_NEW_FILTER = 100;\r\nconst ACTION_TYPE_UPDATE_FILTER = 200;\r\nconst ACTION_TYPE_REMOVE_FILTER = 300;\r\nconst ACTION_TYPE_RESET_STATE = 400;\r\nconst ACTION_TYPE_REMOVE_EMPTY_FILTERS = 500;\r\n\r\n/*\r\n state: [\r\n {\r\n type, //\r\n title, // e.g. 'Asset Type', 'Date added', localized values\r\n id,\r\n value,\r\n humanizedValue, // localized and readable values\r\n\r\n isFilterAlwaysVisible, // if the filter is aways visible, even its value is not set\r\n }\r\n ],\r\n */\r\n/* istanbul ignore next */\r\nconst filtersReducer = (state, action) => {\r\n const { actionType, ...actionData } = action;\r\n switch (actionType) {\r\n case ACTION_TYPE_ADD_NEW_FILTER:\r\n {\r\n const {\r\n type, title, id, value, humanizedValue,\r\n } = actionData;\r\n\r\n // already exists, shouldn't happen\r\n if (_.find(state, { id })) {\r\n return state;\r\n }\r\n\r\n return [...state, {\r\n type, title, id, value, humanizedValue,\r\n }];\r\n }\r\n\r\n case ACTION_TYPE_REMOVE_FILTER:\r\n {\r\n const { id } = actionData;\r\n const newState = _.filter(state, filter => filter.id !== id);\r\n if (newState.length !== state.length) {\r\n return newState;\r\n }\r\n return state;\r\n }\r\n\r\n case ACTION_TYPE_RESET_STATE:\r\n {\r\n const { initialState } = actionData;\r\n return initialState || [];\r\n }\r\n\r\n case ACTION_TYPE_UPDATE_FILTER:\r\n {\r\n const {\r\n id, newValue, newHumanizedValue,\r\n } = actionData;\r\n const index = _.findIndex(state, { id });\r\n if (index >= 0) {\r\n const filterToUpdate = state[index];\r\n if (!_.isEqual(filterToUpdate.value, newValue) || filterToUpdate.humanizedValue !== newHumanizedValue) {\r\n // remove the filter\r\n const newState = [...state];\r\n if (!newHumanizedValue && filterToUpdate.isFilterAlwaysVisible !== true) {\r\n newState.splice(index, 1);\r\n } else { // replace with the new filter\r\n newState.splice(index, 1, { ...filterToUpdate, value: newValue, humanizedValue: newHumanizedValue });\r\n }\r\n return newState;\r\n }\r\n }\r\n return state;\r\n }\r\n\r\n case ACTION_TYPE_REMOVE_EMPTY_FILTERS:\r\n {\r\n const filterWithValues = _.filter(state, ({ humanizedValue, isFilterAlwaysVisible }) => humanizedValue || isFilterAlwaysVisible);\r\n if (filterWithValues.length !== state.length) {\r\n return filterWithValues;\r\n }\r\n return state;\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\n// this is an optional reducer to manage the filter bar state, it's not required and it's possible\r\n// to use other ways to manage the state\r\n/* istanbul ignore next */\r\nexport const useAdStudioFiltersReducer = ({ supportedFilterTypes, initialState, initialId = 100 }) => {\r\n const [filters, dispatch] = useReducer(filtersReducer, initialState);\r\n\r\n // use an auto increased integer number as filter id\r\n const idGeneratorRef = useRef(initialId);\r\n const getNextId = useCallback(() => {\r\n if (idGeneratorRef.current >= Number.MAX_SAFE_INTEGER) {\r\n idGeneratorRef.current = initialId;\r\n } else {\r\n idGeneratorRef.current += 1;\r\n }\r\n return idGeneratorRef.current;\r\n }, [initialId]);\r\n\r\n const removeFilter = useCallback(({ id }) => {\r\n dispatch({ actionType: ACTION_TYPE_REMOVE_FILTER, id });\r\n }, [dispatch]);\r\n\r\n const removeAllFilters = useCallback(() => {\r\n dispatch({ actionType: ACTION_TYPE_RESET_STATE, initialState });\r\n }, [dispatch, initialState]);\r\n\r\n const overwriteFilters = useCallback((state) => {\r\n dispatch({ actionType: ACTION_TYPE_RESET_STATE, initialState: state });\r\n }, [dispatch]);\r\n\r\n const addNewFilter = useCallback(({ type, initValue, initHumanizedValue }) => {\r\n const filterTypeMeta = supportedFilterTypes[type] || { type };\r\n const newFilter = {\r\n ...filterTypeMeta,\r\n id: getNextId(),\r\n value: initValue || null,\r\n humanizedValue: initHumanizedValue || initValue || null,\r\n };\r\n dispatch({\r\n actionType: ACTION_TYPE_ADD_NEW_FILTER,\r\n ...newFilter,\r\n });\r\n return newFilter;\r\n }, [dispatch, getNextId, supportedFilterTypes]);\r\n\r\n const updateFilter = useCallback(({ id, newValue, newHumanizedValue }) => {\r\n dispatch({\r\n actionType: ACTION_TYPE_UPDATE_FILTER,\r\n id,\r\n newValue,\r\n newHumanizedValue,\r\n });\r\n }, [dispatch]);\r\n\r\n const removeEmptyFilters = useCallback(() => {\r\n dispatch({ actionType: ACTION_TYPE_REMOVE_EMPTY_FILTERS });\r\n }, [dispatch]);\r\n\r\n return {\r\n filters,\r\n addNewFilter,\r\n overwriteFilters,\r\n removeFilter,\r\n removeAllFilters,\r\n removeEmptyFilters,\r\n updateFilter,\r\n };\r\n};\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nexport const useMenuStyle = makeStyles({\r\n menuButton: {\r\n ...shorthands.border('none'),\r\n height: '56px',\r\n fontSize: '14px',\r\n marginLeft: '4px',\r\n paddingLeft: '8px',\r\n paddingRight: '8px',\r\n backgroundColor: '#f3f2f1',\r\n fontWeight: '600',\r\n },\r\n});\r\n","import _ from 'underscore';\r\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n Menu,\r\n MenuButton,\r\n MenuList,\r\n MenuPopover,\r\n MenuTrigger,\r\n MenuItemRadio,\r\n mergeClasses,\r\n} from '@fluentui/react-components';\r\n\r\nimport { FilterType } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { useMenuStyle } from '../styles/context-menu-style';\r\n/* istanbul ignore next */\r\nexport const NewFilterContextMenu = ({\r\n allSupportedFilters, filters, onAddNewFilter, i18n, isFocused,\r\n}) => {\r\n const classes = useMenuStyle();\r\n const buttonRef = useRef();\r\n const [checkedValues, setCheckedValues] = useState();\r\n const items = useMemo(() => _.chain(allSupportedFilters)\r\n .values()\r\n .filter(f => f.type !== FilterType.SearchText) // can't add search text filter from context menu\r\n .map(({ type, title }) => {\r\n const isFilterAlreadySet = !!_.find(filters, { type });\r\n return {\r\n key: type,\r\n name: i18n.getString(title),\r\n disabled: isFilterAlreadySet,\r\n canCheck: true,\r\n checked: isFilterAlreadySet,\r\n onClick: () => {\r\n onAddNewFilter(type);\r\n },\r\n };\r\n })\r\n .value(), [allSupportedFilters, filters, i18n, onAddNewFilter]);\r\n\r\n useEffect(() => {\r\n const checkedItems = items.filter(item => item.checked).map(item => item.name);\r\n const newCheckedValues = {};\r\n checkedItems.forEach((item) => {\r\n newCheckedValues[item] = [undefined];\r\n });\r\n setCheckedValues(newCheckedValues);\r\n }, [items]);\r\n\r\n useEffect(() => {\r\n if (isFocused) {\r\n buttonRef.current.focus();\r\n }\r\n }, []);\r\n\r\n return (\r\n \r\n \r\n {i18n.getString('Add filter')}\r\n \r\n\r\n \r\n \r\n {\r\n items.map(item => (\r\n \r\n {item.name}\r\n \r\n ))\r\n }\r\n \r\n \r\n \r\n );\r\n};\r\n/* istanbul ignore next */\r\nNewFilterContextMenu.propTypes = {\r\n allSupportedFilters: PropTypes.shape({}).isRequired,\r\n filters: PropTypes.arrayOf(PropTypes.shape({})),\r\n target: PropTypes.shape({}),\r\n onAddNewFilter: PropTypes.func,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n isFocused: PropTypes.bool,\r\n};\r\n/* istanbul ignore next */\r\nNewFilterContextMenu.defaultProps = {\r\n filters: [],\r\n target: undefined,\r\n onAddNewFilter: _.noop,\r\n isFocused: false,\r\n};\r\n","import _ from 'underscore';\r\nimport React, { useCallback, useRef, useEffect, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport {\r\n FilterType,\r\n PerformanceEditingFilterBar,\r\n PerformanceReadonlyFilterBar,\r\n PerformanceSearchTextFilterComponent,\r\n getPerformanceFilterComponents,\r\n} from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { NewFilterContextMenu } from './new-filter-context-menu';\r\n/* istanbul ignore next */\r\nexport const FilterBarContainerImpl = ({\r\n filters, addNewFilter, removeAllFilters, removeEmptyFilters, updateFilter, removeFilter,\r\n allSupportedFilters, isEditingFilter, setIsEditingFilter, onFilterValueChange,\r\n i18n, ianaTimeZone, dateFormat,\r\n isAdsStudioAIGCMVPEnabled,\r\n}) => {\r\n const focusedFilterRef = useRef(null);\r\n const defaultOpenFilterRef = useRef(null);\r\n\r\n useEffect(() => {\r\n if (!isEditingFilter) {\r\n focusedFilterRef.current = null;\r\n }\r\n }, [isEditingFilter]);\r\n\r\n const onClickAddFilterButton = useCallback(() => {\r\n // switch to editing mode, and show the new filter context menu\r\n focusedFilterRef.current = null;\r\n setIsEditingFilter(true);\r\n }, [setIsEditingFilter]);\r\n\r\n const onClickReadonlyFilter = useCallback((filter) => {\r\n if (filter.type !== FilterType.SearchText) {\r\n defaultOpenFilterRef.current = filter;\r\n focusedFilterRef.current = filter;\r\n setIsEditingFilter(true);\r\n }\r\n }, [setIsEditingFilter]);\r\n\r\n const onCloseEditingFilterBar = useCallback(() => {\r\n setIsEditingFilter(false);\r\n // ensure no empty filters are left\r\n removeEmptyFilters();\r\n }, [removeEmptyFilters, setIsEditingFilter]);\r\n\r\n const onResetClick = useCallback(() => {\r\n removeAllFilters();\r\n }, [removeAllFilters]);\r\n\r\n const onAddNewFilter = useCallback((type) => {\r\n const newFilter = type === FilterType.TopRatedPerformance\r\n ? addNewFilter({ type, initValue: { topRated: true }, initHumanizedValue: true })\r\n : addNewFilter({ type });\r\n focusedFilterRef.current = newFilter;\r\n }, [addNewFilter]);\r\n\r\n const onRenderNewFilterContextMenu = useCallback(() => (\r\n \r\n ), [allSupportedFilters, filters, i18n, isEditingFilter, onAddNewFilter]);\r\n\r\n const onValueChange = useCallback((curFilterState, newValue, newHumanizedValue) => {\r\n updateFilter({ ...curFilterState, newValue, newHumanizedValue });\r\n if (onFilterValueChange) {\r\n onFilterValueChange(curFilterState, newValue, newHumanizedValue);\r\n }\r\n }, [updateFilter, onFilterValueChange]);\r\n\r\n const onDropdownDismiss = useCallback((curFilterState, newValue, newHumanizedValue) => {\r\n // if now value set when dismiss the dropdown, remove the filter\r\n if (!newHumanizedValue && !curFilterState.isFilterAlwaysVisible) {\r\n removeFilter(curFilterState);\r\n }\r\n }, [removeFilter]);\r\n\r\n const onRenderReadonlyFilter = useCallback(({ filter, isLast }) => {\r\n const { type, title, humanizedValue } = filter;\r\n if (type === FilterType.SearchText) {\r\n return ;\r\n }\r\n if (type === FilterType.TopRatedPerformance) {\r\n return   {i18n.getString(title)}{!isLast && ';'};\r\n }\r\n return   {i18n.getString(title)}: {humanizedValue}{!isLast && ';'};\r\n }, [i18n, onValueChange]);\r\n\r\n const FilterComponents = useMemo(() => getPerformanceFilterComponents({ isAdsStudioAIGCMVPEnabled }), [isAdsStudioAIGCMVPEnabled]);\r\n const onRenderEditingFilter = useCallback(({ filter, focused }) => {\r\n const isDefaultOpen = defaultOpenFilterRef.current === filter;\r\n if (isDefaultOpen) {\r\n defaultOpenFilterRef.current = null;\r\n }\r\n const FilterComponent = FilterComponents[filter.type];\r\n return FilterComponent ? : null;\r\n }, [FilterComponents, dateFormat, i18n, ianaTimeZone, onDropdownDismiss, onValueChange]);\r\n\r\n return isEditingFilter ? (\r\n \r\n ) : (\r\n \r\n );\r\n};\r\n/* istanbul ignore next */\r\nFilterBarContainerImpl.propTypes = {\r\n allSupportedFilters: PropTypes.shape({}).isRequired,\r\n filters: PropTypes.arrayOf(PropTypes.shape({\r\n // type: PropTypes.string,\r\n // title: PropTypes.string,\r\n // id: PropTypes.string,\r\n // value: PropTypes.any,\r\n // humanizedValue: PropTypes.string,\r\n })).isRequired,\r\n addNewFilter: PropTypes.func,\r\n removeAllFilters: PropTypes.func,\r\n removeEmptyFilters: PropTypes.func,\r\n updateFilter: PropTypes.func,\r\n removeFilter: PropTypes.func,\r\n isEditingFilter: PropTypes.bool.isRequired,\r\n setIsEditingFilter: PropTypes.func.isRequired,\r\n onFilterValueChange: PropTypes.func.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n ianaTimeZone: PropTypes.string.isRequired,\r\n dateFormat: PropTypes.string.isRequired,\r\n isAdsStudioAIGCMVPEnabled: PropTypes.bool,\r\n};\r\n/* istanbul ignore next */\r\nFilterBarContainerImpl.defaultProps = {\r\n addNewFilter: _.noop,\r\n removeAllFilters: _.noop,\r\n removeEmptyFilters: _.noop,\r\n updateFilter: _.noop,\r\n removeFilter: _.noop,\r\n isAdsStudioAIGCMVPEnabled: false,\r\n};\r\n\r\nexport const FilterBarContainer = React.memo(FilterBarContainerImpl);\r\n","import _ from 'underscore';\r\nimport React, { useCallback, useState, useEffect, useMemo } from 'react';\r\n\r\nimport {\r\n FilterType,\r\n AllSupportedFilters,\r\n CSMLTimeFrame,\r\n FolderAssetType,\r\n getDateAddedChoiceOptions,\r\n civilDateRangeEqual,\r\n ROOT_FOLDER_ID,\r\n} from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { useAdStudioFiltersReducer } from './use-filters-reducer';\r\nimport { FilterBarContainer } from '../filter-bar-container';\r\n\r\n// always show a search text filter\r\n/* istanbul ignore next */\r\nconst PERFORMANCE_PAGE_FILTER_BAR_INIT_STATE = [{\r\n ...AllSupportedFilters[FilterType.SearchText],\r\n id: 0,\r\n value: '',\r\n humanizedValue: '',\r\n isFilterAlwaysVisible: true, // always visible even no value set\r\n}];\r\n/* istanbul ignore next */\r\nexport const useFilterBar = ({\r\n onFilterValueChange, currentFolderId, dateFormat, ianaTimeZone, i18n, initialState = PERFORMANCE_PAGE_FILTER_BAR_INIT_STATE,\r\n isAdsStudioAIGCMVPEnabled,\r\n}) => {\r\n const {\r\n filters, addNewFilter, removeFilter, updateFilter, removeAllFilters, removeEmptyFilters, overwriteFilters,\r\n } = useAdStudioFiltersReducer({ initialState, supportedFilterTypes: AllSupportedFilters });\r\n\r\n const [isEditingFilter, setIsEditingFilter] = useState(false);\r\n\r\n const isAnyFilterSet = _.some(filters, ({ value }) => {\r\n const {\r\n searchText, dateAddedFilter, minImageHeight, minImageWidth, importSource, searchLocationFilter, topRated: topRatedFilterChecked, assetSources,\r\n } = value || {};\r\n return searchText || importSource || searchLocationFilter || minImageHeight || minImageWidth\r\n || (dateAddedFilter && dateAddedFilter !== CSMLTimeFrame.Anytime) || topRatedFilterChecked || !_.isEmpty(assetSources);\r\n });\r\n\r\n const allSupportedFilters = useMemo(() => {\r\n const selectedFilters = { ...AllSupportedFilters };\r\n\r\n // for V4, only images are shown in the perf table,so hide these 2 filters\r\n delete selectedFilters[FilterType.AssetType];\r\n delete selectedFilters[FilterType.VideoDuration];\r\n\r\n if (isAdsStudioAIGCMVPEnabled) {\r\n delete selectedFilters[FilterType.ImportSource];\r\n } else {\r\n delete selectedFilters[FilterType.AssetSource];\r\n }\r\n return selectedFilters;\r\n }, [isAdsStudioAIGCMVPEnabled]);\r\n\r\n const renderFilterBar = useCallback((allFilters, isEditing) => (\r\n \r\n ), [addNewFilter, allSupportedFilters, dateFormat, i18n, ianaTimeZone, isAdsStudioAIGCMVPEnabled, onFilterValueChange, removeAllFilters, removeEmptyFilters, removeFilter, updateFilter]);\r\n\r\n const [effectiveFilters, setEffectiveFilters] = useState({});\r\n\r\n useEffect(() => {\r\n let isDateChanged = false;\r\n let filterValues = filters.reduce((acc, { type, value }) => {\r\n // transform the filters if needed\r\n if (type === FilterType.DateAdded) {\r\n const { dateAddedFilter, dateAddedFilterCustomDateRange } = value || {};\r\n let dateAddedDateRange;\r\n if (dateAddedFilter === CSMLTimeFrame.Custom) {\r\n dateAddedDateRange = dateAddedFilterCustomDateRange;\r\n } else {\r\n const dateAddedChoiceOptions = getDateAddedChoiceOptions(i18n, ianaTimeZone);\r\n const { range } = _.find(dateAddedChoiceOptions, o => o.key === dateAddedFilter) || {};\r\n dateAddedDateRange = range;\r\n }\r\n if (dateAddedDateRange && (dateAddedDateRange.start || dateAddedDateRange.end)) {\r\n return { ...acc, dateAddedDateRange };\r\n }\r\n return acc;\r\n }\r\n return value ? { ...acc, ...value } : acc;\r\n }, { isGlobalSearch: currentFolderId === ROOT_FOLDER_ID });\r\n // remove empty values\r\n filterValues = _.pick(filterValues, v => (_.isArray(v) && !_.isEmpty(v)) || v);\r\n\r\n // for V4, only show images in this page, as only images have performance data\r\n filterValues.assetTypeFilter = FolderAssetType.Image;\r\n // to show only assets with perf data, that is, PerformanceMetrics/Impressions gt 0\r\n filterValues.hasPerfData = true;\r\n if (effectiveFilters.dateAddedDateRange && filterValues.dateAddedDateRange) {\r\n isDateChanged = !civilDateRangeEqual(effectiveFilters.dateAddedDateRange, filterValues.dateAddedDateRange);\r\n }\r\n if (!_.isEqual(effectiveFilters, filterValues) || isDateChanged) {\r\n setEffectiveFilters(filterValues);\r\n }\r\n }, [currentFolderId, effectiveFilters, filters, i18n, ianaTimeZone]);\r\n\r\n // ==\r\n // == *comment out as currently no way to switch to subfolder in performance page, uncomment if needed in the future\r\n // ==\r\n // clear search location filter when navigating to a subfolder, search location filter is only applicable in root folder\r\n // useEffect(() => {\r\n // if (currentFolderId !== ROOT_FOLDER_ID) {\r\n // const filter = _.find(filters, { type: FilterType.SearchLocation }) || {};\r\n // if (filter && filter.id) {\r\n // updateFilter({ id: filter.id, value: { searchLocationFilter: null }, humanizedValue: null });\r\n // }\r\n // }\r\n // }, [currentFolderId, filters, updateFilter]);\r\n\r\n return {\r\n filterStates: filters,\r\n filters: effectiveFilters,\r\n isEditingFilter,\r\n renderFilterBar,\r\n overwriteFilters,\r\n isAnyFilterSet,\r\n };\r\n};\r\n","import { makeStyles, shorthands, makeStaticStyles, tokens } from '@fluentui/react-components';\r\n\r\nexport const usePerformancePageStaticStyles = makeStaticStyles({\r\n '.k-animation-container .k-header a[role=\"button\"]:focus': {\r\n ...shorthands.outline('1px', 'solid', tokens.colorStrokeFocus2),\r\n },\r\n});\r\n\r\nexport const usePerformancePageStyles = makeStyles({\r\n assetLibraryPerformancePageContainer: {\r\n ...shorthands.padding('0', '25px'),\r\n\r\n '& .asset-library-search': {\r\n width: '300px',\r\n },\r\n\r\n '& .asset-library-performance-grid-container': {\r\n '& .navbar .container-fluid': {\r\n paddingLeft: '0',\r\n paddingRight: '0',\r\n },\r\n '& .campaign-details-list-header': {\r\n ...shorthands.overflow('hidden'),\r\n },\r\n },\r\n\r\n '& .highlighted-text': {\r\n // backgroundColor: palette.yellowLight,\r\n },\r\n\r\n '& .inline-download-form__email-and-schedule-report a:focus::after': {\r\n ...shorthands.margin('4px'),\r\n },\r\n },\r\n subMenu: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n backgroundColor: '#ffffff',\r\n ...shorthands.padding('16px', '0px'),\r\n },\r\n title: {\r\n fontSize: '26px',\r\n fontWeight: '800',\r\n flexGrow: '1',\r\n },\r\n inlineDownloadContainer: {},\r\n});\r\n\r\nexport const usePerfTableStyle = makeStyles({\r\n imagePreviewContainer: {\r\n width: '120px',\r\n height: '90px',\r\n },\r\n imagePreviewAndNameContainer: {\r\n '& .action-buttons-container': {\r\n display: 'flex',\r\n opacity: '0',\r\n ...shorthands.transition('opacity', '.3s', '.1s'),\r\n justifyContent: 'space-around',\r\n position: 'absolute',\r\n top: '60px',\r\n left: '24px',\r\n right: '24px',\r\n },\r\n '&:hover .action-buttons-container': {\r\n display: 'flex',\r\n opacity: '1',\r\n },\r\n },\r\n});\r\n\r\nexport const useImagePreviewRawStyles = makeStyles({\r\n hostStyles: {\r\n display: 'inline-block',\r\n },\r\n actionButtonStyles: {\r\n ...shorthands.borderRadius('50%'),\r\n backgroundColor: '#ffffff',\r\n '&:hover': {\r\n color: '#ffffff',\r\n backgroundColor: '#106ebe',\r\n },\r\n },\r\n});\r\n\r\nexport const usePerfPageToolbarStyle = makeStyles({\r\n toolbarFilterContainer: {\r\n flex: '1 !important',\r\n ...shorthands.padding('hidden'),\r\n\r\n '& .filter-list': {\r\n paddingTop: '10px',\r\n '& .asset-library-search': {\r\n display: 'inline-block',\r\n position: 'relative',\r\n top: '2px',\r\n },\r\n },\r\n\r\n '& .filter-list-editing': {\r\n '& .dropdown-filter-container': {\r\n display: 'inline-block',\r\n paddingTop: '12px',\r\n },\r\n\r\n '& .asset-library-search': {\r\n display: 'inline-block',\r\n paddingTop: '12px',\r\n },\r\n\r\n '& .top-rated-performance-filter': {\r\n alignSelf: 'center',\r\n },\r\n },\r\n },\r\n});\r\n","/* eslint-disable object-curly-newline */\r\nimport _ from 'underscore';\r\nimport React, { useMemo, useState, useCallback } from 'react';\r\nimport { Image as FluentImage, ImageFit, IconButton } from '@fluentui/react';\r\nimport { TextWithHighlight, CSMLSortBy } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { Button } from '@fluentui/react-components';\r\nimport { TooltipHost } from '@bingads-webui-react/fabric-control';\r\nimport { OpenRegular } from '@fluentui/react-icons';\r\nimport { usePerfTableStyle, useImagePreviewRawStyles } from '../styles/performance-styles';\r\n\r\nconst COLUMN_KEYS = {\r\n ID: 'colId',\r\n PREVIEW_AND_NAME: 'colPreviewAndName',\r\n // RATING: 'colRating',\r\n RATING_BEST: 'colRating_Best',\r\n RATING_GOOD: 'colRating_Good',\r\n RATING_LOW: 'colRating_Low',\r\n RATING_LEARNING: 'colRating_Learning',\r\n RATING_UNREATED: 'colRating_Unrated',\r\n CREATED: 'colCreated',\r\n MODIFIED: 'colModified',\r\n\r\n CLICKS: 'colClicks',\r\n CLICKS_CURRENT_PERIOD: 'colClicksCurrentPeriod',\r\n CLICKS_LAST_PERIOD: 'colClicksLastPeriod',\r\n CLICKS_CHANGE: 'colClicksChange',\r\n CLICKS_CHANGE_PERCENT: 'colClicksChangePercent',\r\n\r\n CTR: 'colCTR',\r\n CTR_CURRENT_PERIOD: 'colCTRCurrentPeriod',\r\n CTR_LAST_PERIOD: 'colCTRLastPeriod',\r\n CTR_CHANGE: 'colCTRChange',\r\n CTR_CHANGE_PERCENT: 'colCTRChangePercent',\r\n\r\n IMPRESSIONS: 'colImpressions',\r\n IMPRESSIONS_CURRENT_PERIOD: 'colImpressionsCurrentPeriod',\r\n IMPRESSIONS_LAST_PERIOD: 'colImpressionsLastPeriod',\r\n IMPRESSIONS_CHANGE: 'colImpressionsChange',\r\n IMPRESSIONS_CHANGE_PERCENT: 'colImpressionsChangePercent',\r\n\r\n SPEND: 'colSpend',\r\n SPEND_CURRENT_PERIOD: 'colSpendCurrentPeriod',\r\n SPEND_LAST_PERIOD: 'colSpendLastPeriod',\r\n SPEND_CHANGE: 'colSpendChange',\r\n SPEND_CHANGE_PERCENT: 'colSpendChangePercent',\r\n\r\n USAGE: 'colUsage',\r\n};\r\n\r\nconst columnKeyToSortBy = {\r\n [COLUMN_KEYS.ID]: { asc: CSMLSortBy.AssetIdAsc, desc: CSMLSortBy.AssetIdDesc },\r\n [COLUMN_KEYS.PREVIEW_AND_NAME]: { asc: CSMLSortBy.ImageName, desc: CSMLSortBy.ImageNameDesc },\r\n [COLUMN_KEYS.CREATED]: { asc: CSMLSortBy.LastCreatedAsc, desc: CSMLSortBy.LastCreated },\r\n [COLUMN_KEYS.MODIFIED]: { asc: CSMLSortBy.MostRecentAsc, desc: CSMLSortBy.MostRecent },\r\n\r\n [COLUMN_KEYS.CLICKS]: { asc: CSMLSortBy.ClickAsc, desc: CSMLSortBy.ClickDesc },\r\n [COLUMN_KEYS.CLICKS_CURRENT_PERIOD]: { asc: CSMLSortBy.ClickAsc, desc: CSMLSortBy.ClickDesc },\r\n [COLUMN_KEYS.CLICKS_LAST_PERIOD]: { asc: CSMLSortBy.ClickPeriodAsc, desc: CSMLSortBy.ClickPeriodDesc },\r\n [COLUMN_KEYS.CLICKS_CHANGE]: { asc: CSMLSortBy.ClickChangeAsc, desc: CSMLSortBy.ClickChangeDesc },\r\n [COLUMN_KEYS.CLICKS_CHANGE_PERCENT]: { asc: CSMLSortBy.ClickChangePercentAsc, desc: CSMLSortBy.ClickChangePercentDesc },\r\n\r\n [COLUMN_KEYS.CTR]: { asc: CSMLSortBy.CTRAsc, desc: CSMLSortBy.CTRDesc },\r\n [COLUMN_KEYS.CTR_CURRENT_PERIOD]: { asc: CSMLSortBy.CTRAsc, desc: CSMLSortBy.CTRDesc },\r\n [COLUMN_KEYS.CTR_LAST_PERIOD]: { asc: CSMLSortBy.CTRPeriodAsc, desc: CSMLSortBy.CTRPeriodDesc },\r\n [COLUMN_KEYS.CTR_CHANGE]: { asc: CSMLSortBy.CTRChangeAsc, desc: CSMLSortBy.CTRChangeDesc },\r\n [COLUMN_KEYS.CTR_CHANGE_PERCENT]: { asc: CSMLSortBy.CTRChangePercentAsc, desc: CSMLSortBy.CTRChangePercentDesc },\r\n\r\n [COLUMN_KEYS.IMPRESSIONS]: { asc: CSMLSortBy.ImpressionAsc, desc: CSMLSortBy.ImpressionDesc },\r\n [COLUMN_KEYS.IMPRESSIONS_CURRENT_PERIOD]: { asc: CSMLSortBy.ImpressionAsc, desc: CSMLSortBy.ImpressionDesc },\r\n [COLUMN_KEYS.IMPRESSIONS_LAST_PERIOD]: { asc: CSMLSortBy.ImpressionPeriodAsc, desc: CSMLSortBy.ImpressionPeriodDesc },\r\n [COLUMN_KEYS.IMPRESSIONS_CHANGE]: { asc: CSMLSortBy.ImpressionChangeAsc, desc: CSMLSortBy.ImpressionChangeDesc },\r\n [COLUMN_KEYS.IMPRESSIONS_CHANGE_PERCENT]: { asc: CSMLSortBy.ImpressionChangePercentAsc, desc: CSMLSortBy.ImpressionChangePercentDesc },\r\n\r\n [COLUMN_KEYS.SPEND]: { asc: CSMLSortBy.SpendAsc, desc: CSMLSortBy.SpendDesc },\r\n [COLUMN_KEYS.SPEND_CURRENT_PERIOD]: { asc: CSMLSortBy.SpendAsc, desc: CSMLSortBy.SpendDesc },\r\n [COLUMN_KEYS.SPEND_LAST_PERIOD]: { asc: CSMLSortBy.SpendPeriodAsc, desc: CSMLSortBy.SpendPeriodDesc },\r\n [COLUMN_KEYS.SPEND_CHANGE]: { asc: CSMLSortBy.SpendChangeAsc, desc: CSMLSortBy.SpendChangeDesc },\r\n [COLUMN_KEYS.SPEND_CHANGE_PERCENT]: { asc: CSMLSortBy.SpendChangePercentAsc, desc: CSMLSortBy.SpendChangePercentDesc },\r\n};\r\n/* istanbul ignore next */\r\nfunction formatDate(date, i18n) {\r\n return i18n.formatDate(date, { date: 'long' });\r\n}\r\n/* istanbul ignore next */\r\nconst ImagePreview = ({\r\n id, name, folderAssetType, url, thumbnailUrl,\r\n}) => {\r\n const classes = usePerfTableStyle();\r\n const previewUrl = thumbnailUrl || url;\r\n return (\r\n
    \r\n {previewUrl && }\r\n
    \r\n );\r\n};\r\n\r\nconst calloutProps = { gapSpace: 0 };\r\n/* istanbul ignore next */\r\nconst ActionIconButton = ({ iconName, label, onClick }) => {\r\n const iconProps = useMemo(() => ({ iconName }), [iconName]);\r\n const classes = useImagePreviewRawStyles();\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n/* istanbul ignore next */\r\nconst ImagePreviewAndName = ({\r\n id, name, highlightedText, folderAssetType, url, thumbnailUrl, i18n,\r\n onGotoDetailPage, onGotoEditPage,\r\n}) => {\r\n const classes = usePerfTableStyle();\r\n\r\n return (\r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n onGotoEditPage(id)} />\r\n onGotoDetailPage(id)} />\r\n
    \r\n
    \r\n );\r\n};\r\n/* istanbul ignore next */\r\nconst AssetColumn = (i18n, onGotoDetailPage, onGotoEditPage, renderHeaderWithPopup) => ({\r\n key: COLUMN_KEYS.PREVIEW_AND_NAME,\r\n name: i18n.getString(_TL_('Asset')),\r\n ariaLabel: 'asset column',\r\n minWidth: 130,\r\n maxWidth: 130,\r\n isCollapsible: false,\r\n isResizable: true,\r\n sortable: true,\r\n onRenderHeader: renderHeaderWithPopup,\r\n styles: {\r\n sortIcon: { display: 'none' },\r\n },\r\n onRender: item => ,\r\n helpId: 'pop_BA_AssetLibrary_Performance_Asset',\r\n odataColumnName: 'AssetUrl',\r\n});\r\n/* istanbul ignore next */\r\nconst IdColumn = (i18n, renderHeaderWithPopup) => ({\r\n key: COLUMN_KEYS.ID,\r\n name: i18n.getString(_TL_('Asset ID')),\r\n // fieldName: 'id',\r\n ariaLabel: 'id column',\r\n isRowHeader: true,\r\n minWidth: 100,\r\n maxWidth: 120,\r\n isCollapsible: false,\r\n isResizable: true,\r\n sortable: true,\r\n onRender: item => ,\r\n onRenderHeader: renderHeaderWithPopup,\r\n helpId: 'pop_BA_AssetLibrary_Performance_ID',\r\n styles: {\r\n sortIcon: { display: 'none' },\r\n },\r\n odataColumnName: 'AssetId',\r\n});\r\n/* istanbul ignore next */\r\nconst CreatedColumn = (i18n, renderHeaderWithPopup) => ({\r\n key: COLUMN_KEYS.CREATED,\r\n name: i18n.getString(_TL_('Created')),\r\n // fieldName: 'createdTime',\r\n ariaLabel: 'created column',\r\n minWidth: 80,\r\n maxWidth: 120,\r\n isCollapsible: false,\r\n isResizable: true,\r\n sortable: true,\r\n onRenderHeader: renderHeaderWithPopup,\r\n styles: {\r\n sortIcon: { display: 'none' },\r\n },\r\n onRender: item => ({formatDate(item.createdTime, i18n)}),\r\n odataColumnName: 'CreatedTime',\r\n});\r\n/* istanbul ignore next */\r\nconst ModifiedColumn = (i18n, renderHeaderWithPopup) => ({\r\n key: COLUMN_KEYS.MODIFIED,\r\n name: i18n.getString(_TL_('Modified')),\r\n // fieldName: 'modifiedTime',\r\n ariaLabel: 'modified column',\r\n minWidth: 80,\r\n maxWidth: 120,\r\n isCollapsible: false,\r\n isResizable: true,\r\n sortable: true,\r\n onRenderHeader: renderHeaderWithPopup,\r\n styles: {\r\n sortIcon: { display: 'none' },\r\n },\r\n onRender: item => ({formatDate(item.modifiedTime, i18n)}),\r\n odataColumnName: 'ModifiedTime',\r\n});\r\n\r\n/* istanbul ignore next */\r\nconst ClicksColumn = ({ i18n, compareOn, currentPeriod, lastPeriod, renderHeaderWithPopup }) => ({\r\n key: COLUMN_KEYS.CLICKS,\r\n name: i18n.getString(_TL_('Clicks')),\r\n fieldName: 'clicks',\r\n ariaLabel: 'clicks column',\r\n minWidth: 100,\r\n maxWidth: 120,\r\n isCollapsible: false,\r\n isResizable: true,\r\n sortable: true,\r\n helpId: 'pop_BA_AssetLibrary_Performance_Clicks',\r\n onRenderHeader: renderHeaderWithPopup,\r\n styles: {\r\n sortIcon: { display: 'none' },\r\n },\r\n subColumns: compareOn ? [\r\n {\r\n key: COLUMN_KEYS.CLICKS_CURRENT_PERIOD,\r\n name: currentPeriod,\r\n fieldName: 'clicks',\r\n minWidth: 80,\r\n maxWidth: 80,\r\n },\r\n {\r\n key: COLUMN_KEYS.CLICKS_LAST_PERIOD,\r\n name: lastPeriod,\r\n fieldName: 'periodClicks',\r\n minWidth: 80,\r\n maxWidth: 80,\r\n },\r\n {\r\n key: COLUMN_KEYS.CLICKS_CHANGE,\r\n name: i18n.getString(_TL_('Change')),\r\n fieldName: 'clicksChange',\r\n minWidth: 80,\r\n maxWidth: 80,\r\n helpId: 'pop_BA_Reporting_Clarity_POPChange',\r\n },\r\n {\r\n key: COLUMN_KEYS.CLICKS_CHANGE_PERCENT,\r\n name: i18n.getString(_TL_('Change (%)')),\r\n fieldName: 'clicksChangePercentage',\r\n minWidth: 100,\r\n maxWidth: 100,\r\n helpId: 'pop_BA_Reporting_Clarity_POPChangePercent',\r\n },\r\n ] : undefined,\r\n odataColumnName: 'PerformanceMetrics/Clicks',\r\n});\r\n/* istanbul ignore next */\r\nconst CTRColumn = ({ i18n, compareOn, currentPeriod, lastPeriod, renderHeaderWithPopup }) => ({\r\n key: COLUMN_KEYS.CTR,\r\n name: i18n.getString(_TL_('CTR')),\r\n fieldName: 'CTR',\r\n ariaLabel: 'CTR column',\r\n minWidth: 100,\r\n maxWidth: 120,\r\n isCollapsible: false,\r\n isResizable: true,\r\n sortable: true,\r\n helpId: 'pop_BA_AssetLibrary_Performance_CTR',\r\n styles: {\r\n sortIcon: { display: 'none' },\r\n },\r\n onRenderHeader: renderHeaderWithPopup,\r\n subColumns: compareOn ? [\r\n {\r\n key: COLUMN_KEYS.CTR_CURRENT_PERIOD,\r\n name: currentPeriod,\r\n fieldName: 'CTR',\r\n minWidth: 80,\r\n maxWidth: 80,\r\n },\r\n {\r\n key: COLUMN_KEYS.CTR_LAST_PERIOD,\r\n name: lastPeriod,\r\n fieldName: 'periodCTR',\r\n minWidth: 80,\r\n maxWidth: 80,\r\n },\r\n {\r\n key: COLUMN_KEYS.CTR_CHANGE,\r\n name: i18n.getString(_TL_('Change')),\r\n fieldName: 'CTRChange',\r\n helpId: 'pop_BA_Reporting_Clarity_POPChange',\r\n minWidth: 80,\r\n maxWidth: 80,\r\n },\r\n {\r\n key: COLUMN_KEYS.CTR_CHANGE_PERCENT,\r\n name: i18n.getString(_TL_('Change (%)')),\r\n fieldName: 'CTRChangePercentage',\r\n helpId: 'pop_BA_Reporting_Clarity_POPChangePercent',\r\n minWidth: 100,\r\n maxWidth: 100,\r\n },\r\n ] : undefined,\r\n odataColumnName: 'PerformanceMetrics/CTR',\r\n});\r\n/* istanbul ignore next */\r\nconst ImpressionsColumn = ({ i18n, compareOn, currentPeriod, lastPeriod, renderHeaderWithPopup }) => ({\r\n key: COLUMN_KEYS.IMPRESSIONS,\r\n name: i18n.getString(_TL_('Impressions')),\r\n fieldName: 'impressions',\r\n ariaLabel: 'impressions column',\r\n minWidth: 130,\r\n maxWidth: 130,\r\n isCollapsible: false,\r\n isResizable: true,\r\n sortable: true,\r\n helpId: 'pop_BA_AssetLibrary_Performance_Impression',\r\n onRenderHeader: renderHeaderWithPopup,\r\n styles: {\r\n sortIcon: { display: 'none' },\r\n },\r\n subColumns: compareOn ? [\r\n {\r\n key: COLUMN_KEYS.IMPRESSIONS_CURRENT_PERIOD,\r\n name: currentPeriod,\r\n fieldName: 'impressions',\r\n minWidth: 80,\r\n maxWidth: 80,\r\n },\r\n {\r\n key: COLUMN_KEYS.IMPRESSIONS_LAST_PERIOD,\r\n name: lastPeriod,\r\n fieldName: 'periodImpressions',\r\n minWidth: 80,\r\n maxWidth: 80,\r\n },\r\n {\r\n key: COLUMN_KEYS.IMPRESSIONS_CHANGE,\r\n name: i18n.getString(_TL_('Change')),\r\n fieldName: 'impressionsChange',\r\n helpId: 'pop_BA_Reporting_Clarity_POPChange',\r\n minWidth: 80,\r\n maxWidth: 80,\r\n },\r\n {\r\n key: COLUMN_KEYS.IMPRESSIONS_CHANGE_PERCENT,\r\n name: i18n.getString(_TL_('Change (%)')),\r\n fieldName: 'impressionsChangePercentage',\r\n helpId: 'pop_BA_Reporting_Clarity_POPChangePercent',\r\n minWidth: 100,\r\n maxWidth: 100,\r\n },\r\n ] : undefined,\r\n odataColumnName: 'PerformanceMetrics/Impressions',\r\n});\r\n/* istanbul ignore next */\r\nconst SpendColumn = ({ i18n, compareOn, currentPeriod, lastPeriod, renderHeaderWithPopup }) => ({\r\n key: COLUMN_KEYS.SPEND,\r\n name: i18n.getString(_TL_('Spend')),\r\n fieldName: 'spend',\r\n ariaLabel: 'spend column',\r\n minWidth: 100,\r\n maxWidth: 120,\r\n isCollapsible: false,\r\n isResizable: true,\r\n sortable: true,\r\n helpId: 'pop_BA_AssetLibrary_Performance_Spend',\r\n onRenderHeader: renderHeaderWithPopup,\r\n styles: {\r\n sortIcon: { display: 'none' },\r\n },\r\n subColumns: compareOn ? [\r\n {\r\n key: COLUMN_KEYS.SPEND_CURRENT_PERIOD,\r\n name: currentPeriod,\r\n fieldName: 'spend',\r\n minWidth: 80,\r\n maxWidth: 80,\r\n },\r\n {\r\n key: COLUMN_KEYS.SPEND_LAST_PERIOD,\r\n name: lastPeriod,\r\n fieldName: 'periodSpend',\r\n minWidth: 80,\r\n maxWidth: 80,\r\n },\r\n {\r\n key: COLUMN_KEYS.SPEND_CHANGE,\r\n name: i18n.getString(_TL_('Change')),\r\n fieldName: 'spendChange',\r\n helpId: 'pop_BA_Reporting_Clarity_POPChange',\r\n minWidth: 80,\r\n maxWidth: 80,\r\n },\r\n {\r\n key: COLUMN_KEYS.SPEND_CHANGE_PERCENT,\r\n name: i18n.getString(_TL_('Change (%)')),\r\n fieldName: 'spendChangePercentage',\r\n helpId: 'pop_BA_Reporting_Clarity_POPChangePercent',\r\n minWidth: 100,\r\n maxWidth: 100,\r\n },\r\n ] : undefined,\r\n odataColumnName: 'PerformanceMetrics/Spend',\r\n});\r\n/* istanbul ignore next */\r\nconst UsageColumn = ({ i18n, onClick, renderHeaderWithPopup }) => ({\r\n key: COLUMN_KEYS.USAGE,\r\n name: i18n.getString(_TL_('Usage')),\r\n fieldName: 'usedByCount',\r\n ariaLabel: 'asset usage column',\r\n minWidth: 150,\r\n maxWidth: 240,\r\n isCollapsible: false,\r\n isResizable: true,\r\n helpId: 'pop_BA_AssetLibrary_Performance_Usage',\r\n onRender: item => (\r\n }\r\n style={{ textWrap: 'wrap', textAlign: 'left', fontWeight: 400, lineHeight: '14px' }}\r\n onClick={() => onClick(item)}\r\n appearance=\"transparent\"\r\n >\r\n {i18n.getString(_TL_('View all ads using this asset'))}\r\n \r\n ),\r\n // sortable: true, // no data for now\r\n onRenderHeader: renderHeaderWithPopup,\r\n});\r\n/* istanbul ignore next */\r\nconst getHeaders = (columns) => {\r\n const localizedHeaders = [];\r\n const odataColumnNames = [];\r\n columns.forEach((col) => {\r\n // use subColumns if available\r\n if (col.subColumns && col.subColumns.some(subCol => subCol.odataColumnName != null)) {\r\n col.subColumns.forEach((subCol) => {\r\n if (subCol.odataColumnName != null) {\r\n localizedHeaders.push(subCol.name);\r\n odataColumnNames.push(subCol.odataColumnName);\r\n }\r\n });\r\n } else if (col.odataColumnName != null) {\r\n localizedHeaders.push(col.name);\r\n odataColumnNames.push(col.odataColumnName);\r\n }\r\n });\r\n return {\r\n localizedHeaders,\r\n odataColumnNames,\r\n };\r\n};\r\n/* istanbul ignore next */\r\nexport const useTableColumns = ({ i18n, dateRange, onGotoDetailPage, onGotoEditPage, navigation, renderHeaderWithPopup }) => {\r\n const [sortByColumn, setSortByColumn] = useState({ key: COLUMN_KEYS.MODIFIED, isSorted: true, isSortedDescending: true });\r\n const [expandedColumns, setExpandedColumns] = useState({});\r\n\r\n const onUsageClick = useCallback(\r\n ({ folderAssetType, id }) => navigation.gotoAdsPageWithAssetIdFilter({ folderAssetType, assetId: id }),\r\n [navigation]\r\n );\r\n\r\n const columns = useMemo(() => {\r\n const compareOn = !!(dateRange && dateRange.compared);\r\n const currentPeriod = _.get(dateRange, 'RangeStartDate', i18n.getString(_TL_('Current')));\r\n const lastPeriod = _.get(dateRange, ['compared', 'formattedStart'], i18n.getString(_TL_('Last')));\r\n\r\n const cols = [\r\n // PreviewColumn(i18n),\r\n // NameColumn(i18n),\r\n AssetColumn(i18n, onGotoDetailPage, onGotoEditPage, renderHeaderWithPopup),\r\n IdColumn(i18n, renderHeaderWithPopup),\r\n // RatingColumn(i18n),\r\n ClicksColumn({ i18n, compareOn, currentPeriod, lastPeriod, renderHeaderWithPopup }),\r\n CTRColumn({ i18n, compareOn, currentPeriod, lastPeriod, renderHeaderWithPopup }),\r\n ImpressionsColumn({ i18n, compareOn, currentPeriod, lastPeriod, renderHeaderWithPopup }),\r\n SpendColumn({ i18n, compareOn, currentPeriod, lastPeriod, renderHeaderWithPopup }),\r\n UsageColumn({ i18n, onClick: onUsageClick, renderHeaderWithPopup }),\r\n CreatedColumn(i18n, renderHeaderWithPopup),\r\n ModifiedColumn(i18n, renderHeaderWithPopup),\r\n ].map(col => ({ ...col, isExpanded: expandedColumns[col.key] }));\r\n return cols;\r\n }, [dateRange, i18n, onGotoDetailPage, onGotoEditPage, onUsageClick, expandedColumns, renderHeaderWithPopup]);\r\n\r\n // ignore dependency on columns for preventing rerendering of download panel\r\n const getInlineDownloadColumns = useCallback(() => getHeaders(columns), []);\r\n\r\n const sortBy = useMemo(() => {\r\n const { key: sortByKey, isSortedDescending } = sortByColumn || {};\r\n const { asc, desc } = columnKeyToSortBy[sortByKey] || {};\r\n const sortByVal = isSortedDescending ? desc : asc;\r\n\r\n // default by most recent\r\n return sortByVal || CSMLSortBy.MostRecent;\r\n }, [sortByColumn]);\r\n\r\n const expandColumns = useCallback((newColumns) => {\r\n const cols = _.chain(newColumns).reduce((acc, { key, isExpanded }) => { acc[key] = isExpanded || false; return acc; }, {}).value();\r\n setExpandedColumns((prevCols) => {\r\n if (_.isEqual(prevCols, cols)) return prevCols;\r\n return cols;\r\n });\r\n }, []);\r\n\r\n return {\r\n columns, sortByColumn, setSortByColumn, sortBy, expandColumns, getInlineDownloadColumns,\r\n };\r\n};\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\nimport CircleSolid from '../media/CircleSolid.svg';\r\nimport CircleDotted from '../media/CircleDotted.svg';\r\nimport DiamondSolid from '../media/DiamondSolid.svg';\r\nimport DiamondDotted from '../media/DiamondDotted.svg';\r\nimport Waterdrop from '../media/Waterdrop.svg';\r\n\r\nexport const useInlineChartContainerStyle = makeStyles({\r\n inlineChartContainer: {\r\n flexShrink: '0',\r\n zIndex: '400',\r\n boxShadow: 'inset 0px 0.6px 1.8px rgba(0, 0, 0, 0.108), inset 0px 3.2px 7.2px rgba(0, 0, 0, 0.132)',\r\n '& .top-grid-form': {\r\n minWidth: 'initial',\r\n maxWidth: 'initial',\r\n },\r\n '& .chart-area-wrapper': {\r\n display: 'flex',\r\n\r\n '& .react-block-ui-none, .react-block-ui': {\r\n flexGrow: '1',\r\n },\r\n\r\n '& .inline-chart-container': {\r\n flexGrow: '1',\r\n paddingTop: '16px',\r\n paddingLeft: '32px',\r\n paddingRight: '32px',\r\n paddingBottom: '22px',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n width: 'auto !important',\r\n '& .highcharts-label-box.highcharts-tooltip-box': {\r\n opacity: '0 !important',\r\n },\r\n '& .tool-tip-value': {\r\n fontSize: '16px',\r\n paddingLeft: '20px',\r\n paddingTop: '2px',\r\n },\r\n '& .primary-daterange': {\r\n color: '#323130',\r\n fontSize: '11px',\r\n fallbacks: [\r\n {\r\n color: '#323130',\r\n },\r\n ],\r\n },\r\n '& .primary-start-date, & .comparison-start-date': {\r\n paddingLeft: '20px',\r\n display: 'inline-block',\r\n fallbacks: [\r\n {\r\n paddingLeft: '20px',\r\n },\r\n ],\r\n },\r\n '& .primary-end-date, & .comparison-end-date': {\r\n position: 'absolute',\r\n display: 'inline-block',\r\n right: '0',\r\n fallbacks: [\r\n {\r\n right: '0',\r\n },\r\n {\r\n position: 'absolute',\r\n },\r\n ],\r\n },\r\n '& .comparison-daterange': {\r\n color: '#605e5c',\r\n fontSize: '11px',\r\n fallbacks: [\r\n {\r\n color: '#605E5C',\r\n },\r\n ],\r\n },\r\n '& .flex-chart-panel': {\r\n display: 'flex',\r\n paddingBottom: '16px',\r\n alignSelf: 'flex-end',\r\n },\r\n '& .chart-panel-left': {\r\n alignItems: 'flex-start',\r\n lineHeight: '19px',\r\n paddingTop: '6px',\r\n height: '38px',\r\n },\r\n '& .chart-panel-right': {\r\n display: 'flex',\r\n ...shorthands.flex(1, 1, 'auto'),\r\n justifyContent: 'flex-end',\r\n alignItems: 'flex-start',\r\n '& .glyphicon-triangle-bottom': {\r\n fontSize: '12px',\r\n marginLeft: '5px',\r\n fontFamily: 'MsAds MDL2 Assets !important',\r\n float: 'right',\r\n marginRight: '0',\r\n height: '12px !important',\r\n width: '12px !important',\r\n },\r\n '& .glyphicon-triangle-bottom:before': {\r\n content: '\"\\\\E70D\" !important',\r\n },\r\n },\r\n '& .metrics-pickers': {\r\n display: 'flex',\r\n\r\n '& .metric-colors': {\r\n display: 'flex',\r\n },\r\n '& .metrics-vs': {\r\n ...shorthands.margin('0px', '16px'),\r\n paddingLeft: '0px',\r\n paddingRight: '0px',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n },\r\n '& .metric-color-line': {\r\n width: '12px',\r\n height: '42px',\r\n backgroundRepeat: 'no-repeat',\r\n },\r\n '& .show-comparison-line': {\r\n display: 'inline-block',\r\n },\r\n '& .hide-comparison-line': {\r\n display: 'none',\r\n },\r\n '& .comparison-color': {\r\n marginLeft: '4px',\r\n },\r\n '& .primary-metric .metric-color': {\r\n backgroundImage: `url(\"${CircleSolid}\")`,\r\n },\r\n '& .primary-metric .comparison-color': {\r\n backgroundImage: `url(\"${CircleDotted}\")`,\r\n },\r\n '& .secondary-metric .metric-color': {\r\n backgroundImage: `url(\"${DiamondSolid}\")`,\r\n },\r\n '& .secondary-metric .comparison-color': {\r\n backgroundImage: `url(\"${DiamondDotted}\")`,\r\n },\r\n '& .list-selector-container': {\r\n maxHeight: '400px',\r\n ...shorthands.overflow('auto'),\r\n '& .selected': {\r\n ...shorthands.outline('1px', 'auto', '#000000'),\r\n },\r\n },\r\n },\r\n '& .granularity-picker, & .primary-metric, & .secondary-metric': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n alignSelf: 'center',\r\n height: '100%',\r\n '& .btn': {\r\n fontSize: '14px',\r\n },\r\n '& .btn-default': {\r\n fontWeight: 'normal',\r\n },\r\n '& .dropdown-menu': {\r\n top: 'auto',\r\n position: 'absolute',\r\n minWidth: '110px',\r\n whiteSpace: 'nowrap',\r\n\r\n '& .container': {\r\n ...shorthands.padding('0'),\r\n },\r\n },\r\n '& .dropdown-toggle.btn': {\r\n ...shorthands.border('none'),\r\n ...shorthands.borderRadius('2px'),\r\n width: '100%',\r\n height: '100%',\r\n paddingLeft: '8px',\r\n paddingRight: '8px',\r\n },\r\n\r\n '& .ba-dropdown-selector': {\r\n position: 'relative',\r\n ...shorthands.border('1px', 'solid', '#605e5c'),\r\n minWidth: '132px',\r\n verticalAlign: 'baseline',\r\n marginLeft: '8px',\r\n height: '30px',\r\n ...shorthands.borderRadius('2px'),\r\n '& > button': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n },\r\n\r\n '& .selectedItem-data': {\r\n display: 'inline-block',\r\n marginRight: '5px',\r\n },\r\n\r\n '& .comparison-container': {\r\n display: 'inline-block',\r\n },\r\n\r\n '& .show-selectedItem-percentage': {\r\n paddingLeft: '5px',\r\n display: 'inline-block',\r\n },\r\n\r\n '& .hide-selectedItem-percentage': {\r\n ...shorthands.padding('0px'),\r\n ...shorthands.margin('0px'),\r\n display: 'none',\r\n },\r\n\r\n '& .ba-list-selector': {\r\n ...shorthands.border('none'),\r\n '& .empty-message': {\r\n position: 'absolute',\r\n ...shorthands.padding('5px', '10px'),\r\n },\r\n '& .list-selector-item': {\r\n ...shorthands.padding('5px', '10px'),\r\n ...shorthands.margin('0px'),\r\n '&:hover': {\r\n cursor: 'pointer',\r\n backgroundColor: '#f5f5f5',\r\n },\r\n '&.selected': {\r\n backgroundColor: '#E7F0F6',\r\n },\r\n '& .item-actions': {\r\n float: 'right',\r\n },\r\n '& .inline-recommendation-grid-icon:before': {\r\n fontFamily: 'MsAds MDL2 Assets',\r\n content: '\"\\\\EA80\"',\r\n display: 'inline-block',\r\n fontWeight: 'normal',\r\n fontStyle: 'normal',\r\n ...shorthands.textDecoration('ingerit'),\r\n speak: 'none',\r\n fontVariant: 'normal',\r\n textTransform: 'none',\r\n lineHeight: '1',\r\n WebkitFontSmoothing: 'antialiased',\r\n MozOsxFontSmoothing: 'grayscale',\r\n fontSize: '14px',\r\n verticalAlign: 'middle',\r\n color: '#0078D4',\r\n paddingBottom: '2px',\r\n },\r\n '& .inline-recommendation-grid-icon:hover': {\r\n cursor: 'pointer',\r\n },\r\n '& .inline-chart-option': {\r\n marginLeft: '5px',\r\n },\r\n },\r\n },\r\n },\r\n\r\n '& .granularity-picker, & .secondary-metric': {\r\n '& .dropdown-menu': {\r\n left: 'auto',\r\n right: '0',\r\n },\r\n },\r\n\r\n '& .moving-average': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n height: '100%',\r\n fontStyle: 'normal',\r\n fontSize: '14px',\r\n fontWeight: 'normal',\r\n marginLeft: '16px',\r\n whiteSpace: 'nowrap',\r\n '& input[type=checkbox]': {\r\n height: '20px',\r\n width: '20px',\r\n },\r\n '& label': {\r\n display: 'inline-block',\r\n fontWeight: 'normal',\r\n '& input': {\r\n ...shorthands.margin('0px', '5px'),\r\n lineHeight: 'normal',\r\n verticalAlign: 'middle',\r\n },\r\n },\r\n },\r\n '& .react-highchart-wrapper': {\r\n '& > div[role=\"region\"]': {\r\n ...shorthands.overflow('visible !important'),\r\n },\r\n },\r\n '& .highcharts-container': {\r\n ...shorthands.overflow('visible !important'),\r\n '& .highcharts-root': {\r\n ...shorthands.overflow('visible !important'),\r\n },\r\n },\r\n '& .chart-container': {\r\n ...shorthands.padding('0px'),\r\n position: 'relative',\r\n },\r\n\r\n '& .balloon, & .balloonYellow, & .balloonUnknown': {\r\n position: 'absolute',\r\n top: '-20px',\r\n },\r\n '& .balloon, & .balloonYellow, & .balloonUnknown:hover': {\r\n cursor: 'pointer',\r\n },\r\n\r\n '& .fluc-image': {\r\n backgroundImage: `url(\"${Waterdrop}\")`,\r\n backgroundRepeat: 'no-repeat',\r\n backgroundPositionX: 'left',\r\n backgroundPositionY: 'center',\r\n width: '28px',\r\n height: '38px',\r\n textAlign: 'center',\r\n paddingLeft: '1px !important',\r\n paddingTop: '11px !important',\r\n\r\n '&:before': {\r\n fontFamily: 'MsAds MDL2 Assets',\r\n content: '\"\\\\EA80\"',\r\n color: 'white',\r\n fontSize: '16px',\r\n },\r\n },\r\n\r\n '& .fluc-lightbulb': {\r\n '&:before': {\r\n fontFamily: 'MsAds MDL2 Assets',\r\n content: '\"\\\\EA80\"',\r\n color: '#0078D4',\r\n fontSize: '16px',\r\n },\r\n },\r\n\r\n '& .chart-no-data-container': {\r\n textAlign: 'center',\r\n ...shorthands.borderLeft('0 !important'),\r\n ...shorthands.borderRight('0 !important'),\r\n height: '120px',\r\n lineHeight: 'initial',\r\n paddingTop: '22px',\r\n paddingBottom: '60px',\r\n ...shorthands.border('solid', '1px', '#e1dfdd'),\r\n marginRight: '0px',\r\n marginTop: '19px',\r\n '& .chart-no-data-label': {\r\n marginLeft: '0',\r\n ...shorthands.borderBottom('solid', '1px', '#e1dfdd'),\r\n display: 'inline-block',\r\n height: '100%',\r\n width: '100%',\r\n },\r\n },\r\n '& .spinner': {\r\n paddingTop: '50px',\r\n paddingBottom: '59px',\r\n '& .spinner-icon': {\r\n marginLeft: 'auto',\r\n marginRight: 'auto',\r\n },\r\n },\r\n '& .highcharts-label.highcharts-tooltip': {\r\n ...shorthands.margin('0px !important'),\r\n width: 'auto !important',\r\n minWidth: '150px !important',\r\n height: 'auto !important',\r\n minHeight: '100px !important',\r\n '& > span:nth-of-type(1)': {\r\n fontFamily: 'Segoe UI !important',\r\n ...shorthands.border('none'),\r\n },\r\n },\r\n '& .perf-graph-tool-tip': {\r\n display: 'flex',\r\n boxShadow: '0 3.2px 7.2px 0 rgba(0,0,0,.132), 0 0.6px 1.8px 0 rgba(0,0,0,.108)',\r\n backgroundColor: 'rgba(255, 255, 255, 0.95)',\r\n ...shorthands.padding('11px', '15px'),\r\n '@supports (backdrop-filter: blur(60px))': {\r\n backdropFilter: 'blur(60px)',\r\n backgroundColor: 'rgba(255, 255, 255, 0.25)',\r\n },\r\n '& .charts-tooltip': {\r\n color: '#323130',\r\n fontSize: '12px',\r\n fontFamily: 'Segoe UI',\r\n display: 'inline-block',\r\n\r\n '& .primary, & .primary-comparison, & .movingaverage, & .movingaverage-comparison': {\r\n backgroundRepeat: 'no-repeat',\r\n backgroundSize: '12px 40px',\r\n height: '40px',\r\n '& .toolTipMetric': {\r\n height: '12px',\r\n marginRight: '8px',\r\n marginTop: '8px',\r\n paddingLeft: '20px',\r\n },\r\n },\r\n '& b': {\r\n fontWeight: 'normal',\r\n },\r\n '& .primary': {\r\n backgroundImage: `url(\"${CircleSolid}\")`,\r\n },\r\n '& .primary-comparison': {\r\n backgroundImage: `url(\"${DiamondSolid}\")`,\r\n },\r\n '& .movingaverage': {\r\n backgroundImage: `url(\"${CircleDotted}\")`,\r\n },\r\n '& .movingaverage-comparison': {\r\n backgroundImage: `url(\"${DiamondDotted}\")`,\r\n },\r\n },\r\n '& .charts-tooltip:nth-of-type(2)': {\r\n marginLeft: '16px !important',\r\n },\r\n },\r\n },\r\n },\r\n '& .bingads-popover': {\r\n zIndex: '100',\r\n },\r\n },\r\n});\r\n","import Promise from 'bluebird';\r\nimport _ from 'underscore';\r\nimport React, { useCallback, useMemo, useState, useEffect } from 'react';\r\nimport { Overlay } from '@bingads-webui-react/fabric-control';\r\nimport PropTypes from 'prop-types';\r\nimport { stringifySync } from '@bingads-webui/safe-json';\r\nimport classnames from 'classnames';\r\nimport { DEFAULT_PAGE_SIZE, AdsStudioPageName, AdsStudioSpinner, FolderAssetType } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { usePageActiveTimeTracker } from '@bingads-webui-campaign-react/common-hooks';\r\n\r\nimport { useFilterBar } from './hooks/use-filter-bar';\r\nimport { useLoadData } from './hooks/use-load-data';\r\nimport { useTableColumns } from './hooks/use-table-columns';\r\nimport { usePerformancePage } from './hooks/use-performance-page';\r\nimport { usePerformancePageStyles, usePerformancePageStaticStyles } from './styles/performance-styles';\r\nimport { useInlineChartContainerStyle } from './styles/chart-styles';\r\n\r\n/* istanbul ignore next */\r\nexport const PerformancePageComponent = (props) => {\r\n const {\r\n renderHeaderWithPopup, navigation, notificationApi, reload, renderToolbarContainer, renderDetailsList, renderInlineChart, dataService, getChartPreference, perfMetricDateRange, adsStudioUserPreferences, renderDatePicker, i18n, logger, dateFormat, ianaTimeZone, isAdsStudioAIGCMVPEnabled,\r\n useInlineDownload, createFolderFilterQuery, pagePerfMarker: performancePagePerfMarker, isAIGCRegionRestricted, setDataLoaded,\r\n } = props;\r\n usePerformancePageStaticStyles();\r\n const classes = usePerformancePageStyles();\r\n const chartClasses = useInlineChartContainerStyle();\r\n const [isChartShown, setChartShown] = useState(null);\r\n const [isPageInited, setPageInited] = useState(false);\r\n\r\n const {\r\n assets = [],\r\n totalAssetCount = 0,\r\n loadDataInDateRange,\r\n loadDataArgs,\r\n perfTimeSeriesData,\r\n loadPerfTimeSeriesData,\r\n loadMoreDataInDateRange,\r\n currentFolderId,\r\n dataOwnerPageName,\r\n renameAsset,\r\n } = dataService || {};\r\n\r\n const onFailedToLoadData = useCallback(() => {\r\n notificationApi.showWarning(i18n.getString(_TL_('Failed to load assets. Please refresh the page and try again.')));\r\n }, [i18n, notificationApi]);\r\n\r\n const onFilterValueChange = useCallback((curFilterState, newValue, newHumanizedValue) => {\r\n logger.logTrace('onPerfPageFilterValueChange', { ...(curFilterState || {}), newValue, newHumanizedValue });\r\n // handleRealUsedFlag(assetLibraryAccountPreferences, RealUsedFlagSuffix.App);\r\n }, [logger]);\r\n\r\n const {\r\n filterStates, filters, isEditingFilter, renderFilterBar, overwriteFilters,\r\n } = useFilterBar({\r\n onFilterValueChange, currentFolderId, dateFormat, ianaTimeZone, i18n, isAdsStudioAIGCMVPEnabled: isAdsStudioAIGCMVPEnabled && !isAIGCRegionRestricted,\r\n });\r\n\r\n const {\r\n isDownloadShown,\r\n setDownloadShown,\r\n renderInlineDownload,\r\n } = useInlineDownload({ overwriteFilters });\r\n\r\n const {\r\n loadingData,\r\n setLoadingData,\r\n loadingMoreData,\r\n loadNextPage,\r\n loadDataAsync,\r\n } = useLoadData({\r\n filters, perfMetricDateRange, onFailedToLoadData, loadMoreDataInDateRange, loadDataInDateRange, perfMarker: performancePagePerfMarker,\r\n });\r\n\r\n const onGotoDetailPage = useCallback((assetId) => {\r\n if (navigation) {\r\n navigation.gotoAssetDetails({\r\n assetId, assets, totalAssetCount, folderAssetType: FolderAssetType.Image, loadMoreData: loadNextPage, renameAsset,\r\n });\r\n }\r\n }, [assets, loadNextPage, navigation, renameAsset, totalAssetCount]);\r\n\r\n const onGotoEditPage = useCallback((assetId) => {\r\n if (navigation) {\r\n if (logger && logger.logTrace) {\r\n logger.logTrace('Image Details: edit image', { assetId });\r\n }\r\n navigation.gotoEditImagePage({ imageId: assetId });\r\n }\r\n }, [logger, navigation]);\r\n\r\n const {\r\n columns, sortByColumn, setSortByColumn, sortBy, expandColumns, getInlineDownloadColumns,\r\n } = useTableColumns({\r\n i18n, dateRange: perfMetricDateRange, onGotoDetailPage, onGotoEditPage, navigation, renderHeaderWithPopup,\r\n });\r\n\r\n const {\r\n pageSize,\r\n pager,\r\n pagedItems,\r\n setPageNumber,\r\n setPageSize,\r\n } = usePerformancePage({\r\n assets, loadNextPage, adsStudioUserPreferences, totalAssetCount, highlightedText: filters.searchText,\r\n });\r\n\r\n const hasNoData = _.isEmpty(assets);\r\n const shouldShowChart = useMemo(() => isDownloadShown === false && isChartShown !== null, [isChartShown, isDownloadShown]);\r\n const isPageLoading = useMemo(() => !isPageInited || loadingData, [isPageInited, loadingData]);\r\n const toolbar = useMemo(() => {\r\n const filterBar = renderFilterBar(filterStates, isEditingFilter);\r\n return !isDownloadShown && renderToolbarContainer({\r\n i18n, filterBar, isChartShown, setChartShown, isEditingFilter, setDownloadShown,\r\n });\r\n }, [filterStates, i18n, isChartShown, isDownloadShown, isEditingFilter, renderFilterBar, renderToolbarContainer, setDownloadShown]);\r\n\r\n const onSort = useCallback((newSortByColumn) => {\r\n setPageNumber(1);\r\n setSortByColumn(newSortByColumn);\r\n adsStudioUserPreferences.setPerfTableSortBy(newSortByColumn);\r\n }, [adsStudioUserPreferences, setPageNumber, setSortByColumn]);\r\n\r\n const getInlineDownloadFilter = useCallback(() => {\r\n // ensure this callback is readonly for the enough dependency check\r\n const serializedFilter = stringifySync(filterStates);\r\n const { isGlobalSearch, ...otherFilters } = filters;\r\n const args = loadDataArgs({\r\n ...otherFilters,\r\n folderId: currentFolderId,\r\n });\r\n if (isGlobalSearch) {\r\n // remove folderId for global search\r\n delete args.folderId;\r\n } else if (!args.folderId) {\r\n // use -1 for root folder\r\n args.folderId = -1;\r\n }\r\n const filterUrlParam = createFolderFilterQuery({ ...args.filterArgs, folderId: args.folderId, hasPerfData: true });\r\n return {\r\n filterUrlParam,\r\n serializedFilter,\r\n };\r\n // todo: add loadDataArgs dependency will cause inline download view be re-rendered when date-picker changes, user input will be lost\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [filterStates, filters, currentFolderId]);\r\n\r\n // init page\r\n useEffect(() => {\r\n // restore the preference values\r\n if (!isPageInited && adsStudioUserPreferences) {\r\n const { perfTablePageSize, perfTableSortBy } = adsStudioUserPreferences;\r\n if (perfTablePageSize) {\r\n setPageSize(perfTablePageSize || DEFAULT_PAGE_SIZE);\r\n }\r\n if (perfTableSortBy) {\r\n onSort(perfTableSortBy);\r\n }\r\n setPageInited(true);\r\n }\r\n }, [adsStudioUserPreferences, isPageInited, onSort, setPageSize]);\r\n\r\n // load data for initial page load, or\r\n useEffect(() => {\r\n if (!isPageInited || loadingData) {\r\n // wait until page is initialized\r\n return;\r\n }\r\n\r\n if (reload) { // Important! Add a trivial log so that reload will be an explicit dep.\r\n logger.logTrace('force to reload');\r\n }\r\n\r\n performancePagePerfMarker.willFetchData();\r\n\r\n setLoadingData(true);\r\n loadDataAsync(pageSize, sortBy)\r\n .tap((ret) => {\r\n const { folder } = ret || {};\r\n const { itemCount } = folder || {};\r\n const { ImageAssetsCount } = itemCount || {};\r\n logger.logTrace('Performance page data loaded, ', { totalRowCount: ImageAssetsCount || 0 });\r\n })\r\n .tapCatch(() => { // throw out so that this error will be shown in console for easy debugging\r\n onFailedToLoadData();\r\n }).finally(() => {\r\n setLoadingData(false);\r\n\r\n performancePagePerfMarker.willRender();\r\n if (setDataLoaded) {\r\n setDataLoaded();\r\n }\r\n // todo: update inline chart if time series data is also included in the response\r\n });\r\n }, [i18n, isPageInited, loadDataAsync, logger, notificationApi, onFailedToLoadData, pageSize, reload, setLoadingData, sortBy]);\r\n\r\n usePageActiveTimeTracker(logger, 'Performance');\r\n\r\n useEffect(() => {\r\n if (isPageLoading) {\r\n // wait until page is loaded to prevent state race condition in folder reducer\r\n return;\r\n }\r\n getChartPreference().then((chartPreference) => {\r\n const {\r\n showChart,\r\n } = chartPreference || {};\r\n setChartShown(!!showChart);\r\n });\r\n }, [getChartPreference, isPageLoading]);\r\n\r\n useEffect(() => {\r\n if (navigation) {\r\n navigation.updateAssetDetailsParams({ assets });\r\n }\r\n }, [assets, navigation]);\r\n\r\n return (\r\n
    \r\n
    \r\n {i18n.getString('Performance')}\r\n {renderDatePicker()}\r\n
    \r\n
    \r\n { isDownloadShown && renderInlineDownload && renderInlineDownload({\r\n setDownloadShown, totalAssetCount, getInlineDownloadColumns, getInlineDownloadFilter,\r\n })}\r\n
    \r\n
    \r\n { shouldShowChart && renderInlineChart && renderInlineChart({\r\n isChartShown, perfTimeSeriesData, loadPerfTimeSeriesData, perfMetricDateRange, filters, perfMarker: performancePagePerfMarker,\r\n })}\r\n
    \r\n
    \r\n {pagedItems && (!dataOwnerPageName || dataOwnerPageName === AdsStudioPageName.PerfPage) &&\r\n renderDetailsList({\r\n pagedItems, onSort, toolbar, pager, columns, sortByColumn, expandColumns,\r\n })\r\n }\r\n {/* show loading indicator */}\r\n {(isPageLoading || loadingMoreData) && (\r\n \r\n \r\n \r\n )}\r\n {/* no content */}\r\n {(!isPageLoading && hasNoData) && (\r\n
    {i18n.getString(_TL_(\"No assets match your search. Either you don't have any assets associated with your account or your assets don't yet have performance metrics. Please try again.\"))}
    \r\n )}\r\n
    \r\n
    \r\n );\r\n};\r\n/* istanbul ignore next */\r\nPerformancePageComponent.propTypes = {\r\n dataService: PropTypes.shape({\r\n assets: PropTypes.arrayOf(PropTypes.shape({})),\r\n totalAssetCount: PropTypes.number,\r\n loadDataInDateRange: PropTypes.func,\r\n loadDataArgs: PropTypes.func,\r\n loadMoreDataInDateRange: PropTypes.func,\r\n }).isRequired,\r\n navigation: PropTypes.shape({\r\n gotoItemDetailFromPerfPage: PropTypes.func,\r\n gotoEditImageFromPerfPage: PropTypes.func,\r\n }),\r\n ianaTimeZone: PropTypes.string,\r\n dateFormat: PropTypes.string,\r\n perfMetricDateRange: PropTypes.shape({\r\n compared: PropTypes.shape({}),\r\n }),\r\n adsStudioUserPreferences: PropTypes.shape({\r\n perfTablePageSize: PropTypes.number,\r\n perfTableSortBy: PropTypes.shape({}),\r\n setPerfTablePageSize: PropTypes.func,\r\n setPerfTableSortBy: PropTypes.func,\r\n }),\r\n assetLibraryAccountPreferences: PropTypes.shape({}),\r\n reload: PropTypes.shape({}), // if changed, force to reload\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n logError: PropTypes.func,\r\n }).isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n renderInlineChart: PropTypes.func,\r\n getChartPreference: PropTypes.func,\r\n\r\n pagePerfMarker: PropTypes.shape({\r\n willFetchFile: PropTypes.func.isRequired,\r\n willInit: PropTypes.func.isRequired,\r\n willFetchData: PropTypes.func.isRequired,\r\n willRender: PropTypes.func.isRequired,\r\n done: PropTypes.func.isRequired,\r\n createChild: PropTypes.func.isRequired,\r\n }),\r\n\r\n isAdsStudioAIGCMVPEnabled: PropTypes.bool,\r\n isAIGCRegionRestricted: PropTypes.bool,\r\n};\r\n/* istanbul ignore next */\r\nPerformancePageComponent.defaultProps = {\r\n navigation: undefined,\r\n pagePerfMarker: undefined,\r\n ianaTimeZone: 'GMT',\r\n dateFormat: 'M/d/yyyy',\r\n perfMetricDateRange: undefined,\r\n adsStudioUserPreferences: undefined,\r\n assetLibraryAccountPreferences: undefined,\r\n reload: null,\r\n renderInlineChart: undefined,\r\n getChartPreference: () => Promise.resolve({}),\r\n\r\n isAdsStudioAIGCMVPEnabled: false,\r\n isAIGCRegionRestricted: false,\r\n};\r\n","import { useState, useCallback } from 'react';\r\nimport { AdsStudioPageName } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n/* istanbul ignore next */\r\nexport const useLoadData = ({\r\n filters, perfMetricDateRange, onFailedToLoadData, loadMoreDataInDateRange, loadDataInDateRange, perfMarker,\r\n}) => {\r\n const [loadingData, setLoadingData] = useState(false);\r\n const [loadingMoreData, setLoadingMoreData] = useState(false);\r\n\r\n const loadNextPage = useCallback((count) => {\r\n setLoadingMoreData(true);\r\n return loadMoreDataInDateRange({ count }).catch((err) => {\r\n onFailedToLoadData(err);\r\n }).finally(() => setLoadingMoreData(false));\r\n }, [loadMoreDataInDateRange, onFailedToLoadData]);\r\n\r\n const loadDataAsync = useCallback((count, sortBy) => {\r\n const { isGlobalSearch, ...otherFilters } = filters;\r\n\r\n return loadDataInDateRange({\r\n perfMetricDateRange,\r\n ...otherFilters,\r\n sortBy,\r\n assetsToLoadForSubfolders: 0,\r\n isGlobalSearch,\r\n includeParentHierarchy: isGlobalSearch, // include parent hierarchy when global searching\r\n includeSubfolders: false,\r\n count,\r\n pageName: AdsStudioPageName.PerfPage,\r\n perfMarker: perfMarker.createChild('performancePageLoadData'),\r\n });\r\n }, [filters, loadDataInDateRange, perfMetricDateRange]);\r\n\r\n return {\r\n loadingData,\r\n setLoadingData,\r\n loadingMoreData,\r\n loadNextPage,\r\n loadDataAsync,\r\n };\r\n};\r\n","import { useState, useCallback, useMemo } from 'react';\r\nimport { DEFAULT_PAGE_SIZE } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n/* istanbul ignore next */\r\nexport const usePerformancePage = ({\r\n assets, loadNextPage, adsStudioUserPreferences, totalAssetCount, highlightedText,\r\n}) => {\r\n const [pageNumber, setPageNumber] = useState(1);\r\n const [pageSize, setPageSize] = useState(DEFAULT_PAGE_SIZE);\r\n\r\n const onPageChange = useCallback((number) => {\r\n if (assets && assets.length >= number * pageSize) {\r\n // there are enough loaded assets\r\n setPageNumber(number);\r\n } else {\r\n loadNextPage(pageSize).then(() => {\r\n setPageNumber(number);\r\n });\r\n }\r\n }, [assets, loadNextPage, pageSize]);\r\n\r\n const onPageSizeChange = useCallback((size) => {\r\n setPageNumber(1);\r\n setPageSize(size);\r\n if (adsStudioUserPreferences) {\r\n adsStudioUserPreferences.setPerfTablePageSize(size);\r\n }\r\n }, [adsStudioUserPreferences, setPageSize]);\r\n\r\n const pager = useMemo(() => ({\r\n pageNumber,\r\n pageSize,\r\n total: totalAssetCount,\r\n onPageChange,\r\n onPageSizeChange,\r\n }), [onPageChange, onPageSizeChange, pageNumber, pageSize, totalAssetCount]);\r\n\r\n const pagedItems = useMemo(\r\n () => {\r\n if (assets) {\r\n const items = assets.slice((pageNumber - 1) * pageSize, pageNumber * pageSize);\r\n // append search text filter to items, to highligh the text\r\n return items.map(itm => ({ ...itm, highlightedText }));\r\n }\r\n return [];\r\n },\r\n [assets, highlightedText, pageNumber, pageSize]\r\n );\r\n\r\n return {\r\n pageSize,\r\n pager,\r\n pagedItems,\r\n setPageNumber,\r\n setPageSize,\r\n };\r\n};\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nexport const useHomePageStyle = makeStyles({\r\n homePage: {\r\n display: 'flex',\r\n ...shorthands.margin('32px', '36px'),\r\n flexDirection: 'column',\r\n ...shorthands.gap('10px'),\r\n },\r\n});\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\nimport homepageBanner from '../../image-asset/homepageBanner.png';\r\n\r\nconst getHomePageTopBannerContainerStyle = makeStyles({\r\n topBanner: {\r\n boxSizing: 'border-box',\r\n width: '100%',\r\n display: 'flex',\r\n ...shorthands.padding('40px'),\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n ...shorthands.gap('24px'),\r\n alignSelf: 'stretch',\r\n ...shorthands.borderRadius('8px'),\r\n backgroundImage: `linear-gradient(rgba(255, 255, 255, 0.5), rgba(255, 255, 255, 0.5)), url(${homepageBanner})`,\r\n backgroundSize: 'cover',\r\n backgroundRepeat: 'no-repeat',\r\n },\r\n texts: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n ...shorthands.gap('8px'),\r\n fontFamily: 'Segoe UI',\r\n fontStyle: 'normal',\r\n textAlign: 'center',\r\n alignItems: 'stretch',\r\n },\r\n pageName: {\r\n lineHeight: '37px',\r\n fontSize: '28px',\r\n fontWeight: 600,\r\n },\r\n searchContainer: {\r\n marginTop: '24px',\r\n },\r\n searchBoxWrapper: {\r\n position: 'relative',\r\n height: '90px',\r\n ...shorthands.borderRadius('8px'),\r\n maxWidth: '450px',\r\n ...shorthands.margin('0px', 'auto'),\r\n boxShadow: '0px 1px 2px 0px rgba(0, 0, 0, 0.08)',\r\n },\r\n searchBox: {\r\n width: '100%',\r\n height: '100%',\r\n ...shorthands.gap('8px'),\r\n ...shorthands.borderRadius('8px'),\r\n\r\n '&::after': {\r\n paddingTop: '8px',\r\n borderBottomRightRadius: '8px',\r\n borderBottomLeftRadius: '8px',\r\n },\r\n },\r\n sendIcon: {\r\n position: 'absolute',\r\n bottom: '9px',\r\n right: '9px',\r\n cursor: 'pointer',\r\n ...shorthands.padding('0px'),\r\n },\r\n});\r\n\r\nexport default getHomePageTopBannerContainerStyle;\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nconst getAssetListBarCarouselStyle = makeStyles({\r\n subHeading: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n fontWeight: 600,\r\n lineHeight: '26px',\r\n fontFamily: 'Segoe UI',\r\n fontSize: '20px',\r\n textAlign: 'left',\r\n marginTop: '30px',\r\n },\r\n paragraph: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n fontFamily: 'Segoe UI',\r\n fontSize: '14px',\r\n fontWeight: 400,\r\n lineHeight: '20px',\r\n textAlign: 'left',\r\n },\r\n itemContainer: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n flexDirection: 'row',\r\n position: 'relative',\r\n width: '100%',\r\n },\r\n btnWrapper: {\r\n width: '32px',\r\n height: '32px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n position: 'absolute',\r\n zIndex: 1,\r\n ...shorthands.borderRadius('50%'),\r\n boxShadow: '0px 0.3px 0.9px 0px rgba(0, 0, 0, 0.10), 0px 1.6px 3.6px 0px rgba(0, 0, 0, 0.13)',\r\n backgroundColor: '#ffffff',\r\n },\r\n leftWrapper: {\r\n left: '-16px',\r\n },\r\n rightWrapper: {\r\n right: '-16px',\r\n },\r\n leftBtn: {\r\n cursor: 'pointer',\r\n color: '#0078d4',\r\n },\r\n rightBtn: {\r\n cursor: 'pointer',\r\n color: '#0078d4',\r\n },\r\n overlay: {\r\n position: 'absolute',\r\n width: '24px',\r\n height: '230px',\r\n },\r\n leftOverlay: {\r\n left: 0,\r\n backgroundImage: 'linear-gradient(90deg, #FFF 0%, rgba(255, 255, 255, 0.00) 100%)',\r\n },\r\n rightOverlay: {\r\n right: 0,\r\n backgroundImage: 'linear-gradient(90deg, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255) 100%)',\r\n },\r\n slider: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n scrollBehavior: 'smooth',\r\n whiteSpace: 'nowrap',\r\n flexGrow: 1,\r\n overflowX: 'hidden',\r\n pointerEvents: 'none',\r\n '&::-webkit-scrollbar': {\r\n display: 'none',\r\n },\r\n scrollbarWidth: 'none',\r\n '-ms-overflow-style': 'none',\r\n paddingBottom: '10px',\r\n paddingTop: '8px',\r\n },\r\n cardContainer: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n flexWrap: 'nowrap',\r\n },\r\n});\r\n\r\nexport default getAssetListBarCarouselStyle;\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nconst getHomePageGenerateWithAIComponentStyle = makeStyles({\r\n footerContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'left',\r\n width: '100%',\r\n },\r\n subHeading: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n fontWeight: 600,\r\n lineHeight: '26px',\r\n fontFamily: 'Segoe UI',\r\n fontSize: '20px',\r\n textAlign: 'left',\r\n marginBottom: '8px',\r\n },\r\n paragraph: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n fontFamily: 'Segoe UI',\r\n fontSize: '14px',\r\n fontWeight: 200,\r\n lineHeight: '20px',\r\n textAlign: 'left',\r\n marginBottom: '20px',\r\n },\r\n searchBoxWrapper: {\r\n position: 'relative',\r\n width: '345px',\r\n },\r\n searchBox: {\r\n width: '100%',\r\n paddingRight: '30px',\r\n },\r\n sendIcon: {\r\n position: 'absolute',\r\n bottom: '6px',\r\n right: '6px',\r\n cursor: 'pointer',\r\n },\r\n imageRowContainer: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n justifyContent: 'flex-start',\r\n ...shorthands.gap('16px'),\r\n marginTop: '16px',\r\n flexWrap: 'nowrap',\r\n },\r\n imageWrapper: {\r\n flexShrink: 0,\r\n position: 'relative',\r\n width: '246px',\r\n height: '200px',\r\n ...shorthands.borderRadius('8px'),\r\n '&:hover .overlay, &:focus-within .overlay': {\r\n opacity: 1,\r\n transform: 'translateY(0)',\r\n },\r\n },\r\n image: {\r\n width: '100%',\r\n height: '100%',\r\n objectFit: 'cover',\r\n ...shorthands.borderRadius('8px'),\r\n },\r\n overlay: {\r\n position: 'absolute',\r\n bottom: 0,\r\n left: 0,\r\n width: '100%',\r\n height: '100%',\r\n backgroundColor: 'rgba(0, 0, 0, 0.6)',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n alignItems: 'flex-start',\r\n paddingLeft: '16px',\r\n color: '#fff',\r\n opacity: 0,\r\n transitionProperty: 'opacity',\r\n transitionDuration: '0.3s',\r\n transitionTimingFunction: 'ease',\r\n pointerEvents: 'none',\r\n },\r\n overlayText: {\r\n color: '#FFF',\r\n fontFamily: 'Segoe UI',\r\n fontSize: '14px',\r\n fontStyle: 'normal',\r\n lineHeight: 'normal',\r\n marginBottom: '8px',\r\n fontWeight: 400,\r\n textAlign: 'left',\r\n marginLeft: '12px',\r\n marginRight: '12px',\r\n },\r\n overlayButton: {\r\n backgroundColor: 'transparent',\r\n color: '#fff',\r\n ...shorthands.borderRadius('4px'),\r\n cursor: 'pointer',\r\n textAlign: 'left',\r\n marginLeft: '12px',\r\n pointerEvents: 'all',\r\n '&:hover': {\r\n backgroundColor: 'transparent',\r\n color: '#fff',\r\n },\r\n '&:focus': {\r\n outlineColor: '#fff',\r\n },\r\n },\r\n});\r\n\r\nexport default getHomePageGenerateWithAIComponentStyle;\r\n","import React from 'react';\r\nimport { mergeClasses, Textarea, Button } from '@fluentui/react-components';\r\nimport { Send20Regular } from '@fluentui/react-icons';\r\nimport PropTypes from 'prop-types';\r\nimport { getHomePageTopBannerContainerStyle } from '../home-page-styles';\r\n\r\nconst TopHomePageBannerComponent = ({ i18n, onSearch }) => {\r\n const [searchQuery, setSearchQuery] = React.useState('');\r\n\r\n const handleSearchChange = (event) => {\r\n setSearchQuery(event.target.value);\r\n\r\n if (event.key === 'Enter') {\r\n event.preventDefault();\r\n if (event.target.value.trim()) {\r\n onSearch(event.target.value);\r\n }\r\n }\r\n };\r\n\r\n const handleSearch = () => {\r\n if (searchQuery.trim()) {\r\n onSearch(searchQuery);\r\n }\r\n };\r\n\r\n const classes = getHomePageTopBannerContainerStyle();\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n
    {i18n.getString(_TL_('What assets are you searching for today?'))}
    \r\n
    \r\n
    \r\n
    \r\n \r\n }\r\n appearance=\"transparent\"\r\n onClick={handleSearch}\r\n className={classes.sendIcon}\r\n aria-label={i18n.getString(_TL_('Search'))}\r\n />\r\n
    \r\n
    \r\n
    \r\n
    \r\n );\r\n};\r\n\r\n\r\nTopHomePageBannerComponent.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n onSearch: PropTypes.func.isRequired,\r\n serverContext: PropTypes.shape({\r\n CurrentAccount: PropTypes.shape({\r\n Name: PropTypes.string,\r\n }),\r\n }),\r\n};\r\n\r\nTopHomePageBannerComponent.defaultProps = {\r\n serverContext: {},\r\n};\r\n\r\nexport default TopHomePageBannerComponent;\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nexport const useImageCardStyles = makeStyles({\r\n imageCardListItem: {\r\n marginRight: '16px',\r\n },\r\n imageCard: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n width: '194px !important',\r\n height: '220px !important',\r\n pointerEvents: 'auto',\r\n },\r\n imageCardThumbnail: {\r\n width: '194px !important',\r\n height: '160px !important',\r\n objectFit: 'cover',\r\n ...shorthands.overflow('hidden'),\r\n },\r\n imageCardFooter: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n flexWrap: 'wrap',\r\n height: '60px !important',\r\n width: '194px !important',\r\n paddingLeft: '15px !important',\r\n },\r\n imageCardFooterContent: {\r\n display: 'flex',\r\n rowGap: '0px !important',\r\n paddingBottom: '2px !important',\r\n flexDirection: 'column',\r\n alignItems: 'flex-start',\r\n ...shorthands.gap('4px'),\r\n },\r\n imageIconAndName: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n fontWeight: 600,\r\n },\r\n imageName: {\r\n width: '142px',\r\n ...shorthands.overflow('hidden'),\r\n whiteSpace: 'nowrap',\r\n textOverflow: 'ellipsis',\r\n },\r\n imageCardCaption: {\r\n paddingBottom: '5px !important',\r\n paddingLeft: '2px !important',\r\n },\r\n});\r\n","import React, { useMemo, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n Body1,\r\n Caption1,\r\n Card,\r\n CardFooter,\r\n CardPreview,\r\n} from '@fluentui/react-components';\r\nimport { ListItem } from '@fluentui/react-list-preview';\r\n\r\nimport { getTimeDescription } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { Image20Regular } from '@fluentui/react-icons';\r\nimport { useImageCardStyles } from '../../../home-page-styles/component-styles/home-page-image-asset-cards';\r\n\r\nexport const ImageAssetCard = ({\r\n asset, i18n, navigation, logger, ariaSetsize, ariaPosinset, onClickCard,\r\n}) => {\r\n const styles = useImageCardStyles();\r\n\r\n const assetName = useMemo(() => (asset.name ? asset.name : asset.id), [asset.id, asset.name]);\r\n\r\n const imageTimeCaption = useMemo(() => {\r\n if (asset.modifiedTime > asset.createdTime) {\r\n return getTimeDescription(asset.modifiedTime, i18n) ? `${i18n.getString(_TL_('Edited:'))} ${getTimeDescription(asset.modifiedTime, i18n)}` : '';\r\n }\r\n return getTimeDescription(asset.createdTime, i18n) ? `${i18n.getString(_TL_('Uploaded:'))} ${getTimeDescription(asset.createdTime, i18n)}` : '';\r\n }, [asset.modifiedTime, asset.createdTime, i18n]);\r\n\r\n const handleImageAssetClick = useCallback((imageAsset) => {\r\n if (logger && logger.logTrace) {\r\n logger.logTrace('Image Details: edit image', { assetId: imageAsset.id });\r\n }\r\n navigation.gotoEditImagePage({ imageId: imageAsset.id });\r\n onClickCard();\r\n }, [logger, navigation, onClickCard]);\r\n\r\n const handleImageAssetKeyDown = useCallback((event, imageAsset) => {\r\n if (event.key === 'Enter') {\r\n handleImageAssetClick(imageAsset);\r\n event.preventDefault();\r\n }\r\n }, [handleImageAssetClick]);\r\n\r\n return (\r\n handleImageAssetClick(asset)}\r\n onKeyDown={event => handleImageAssetKeyDown(event, asset)}\r\n className={styles.imageCardListItem}\r\n >\r\n \r\n \r\n \r\n \r\n
    \r\n \r\n
    \r\n \r\n {assetName}\r\n
    \r\n
    \r\n {imageTimeCaption || ''}\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n );\r\n};\r\n\r\nImageAssetCard.propTypes = {\r\n asset: PropTypes.shape({\r\n name: PropTypes.string,\r\n createdTime: PropTypes.instanceOf(Date),\r\n modifiedTime: PropTypes.instanceOf(Date),\r\n originalUrl: PropTypes.string,\r\n id: PropTypes.string,\r\n url: PropTypes.string,\r\n }).isRequired,\r\n i18n: PropTypes.shape({}).isRequired,\r\n navigation: PropTypes.shape({\r\n gotoEditImagePage: PropTypes.func,\r\n }).isRequired,\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n }).isRequired,\r\n};\r\n","import { makeStyles, shorthands, tokens } from '@fluentui/react-components';\r\n\r\nexport const useFolderCardStyles = makeStyles({\r\n folderCardListItem: {\r\n marginRight: '16px',\r\n },\r\n card: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n width: '194px',\r\n height: '220px',\r\n boxSizing: 'border-box',\r\n ...shorthands.overflow('hidden'),\r\n pointerEvents: 'auto',\r\n },\r\n cardPreview: {\r\n width: '194px',\r\n height: '160px',\r\n objectFit: 'cover',\r\n ...shorthands.overflow('hidden'),\r\n },\r\n footer: {\r\n width: '194px',\r\n ...shorthands.overflow('hidden'),\r\n marginLeft: '-15px',\r\n marginBottom: '-15px',\r\n paddingLeft: '15px',\r\n },\r\n footerContent: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n rowGap: '0px',\r\n ...shorthands.gap('4px'),\r\n },\r\n iconAndName: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n folderName: {\r\n width: '142px',\r\n ...shorthands.overflow('hidden'),\r\n whiteSpace: 'nowrap',\r\n textOverflow: 'ellipsis',\r\n },\r\n caption: {\r\n paddingLeft: '2px',\r\n },\r\n imageGrid: {\r\n display: 'grid',\r\n width: '100%',\r\n height: '100%',\r\n justifyItems: 'center',\r\n backgroundColor: tokens.colorNeutralBackground3,\r\n },\r\n thumbnailImage: {\r\n objectFit: 'cover',\r\n width: '100%',\r\n height: '100%',\r\n },\r\n oneImage: {\r\n display: 'block',\r\n width: '100%',\r\n height: '160px', // Full height of preview section\r\n objectFit: 'cover',\r\n },\r\n twoImages: {\r\n display: 'grid',\r\n gridTemplateColumns: 'repeat(2, 1fr)', // 2 equal-width columns\r\n width: '100%',\r\n height: '160px', // Full height of preview section\r\n },\r\n threeImages: {\r\n display: 'grid',\r\n gridTemplateColumns: '1fr 1fr',\r\n gridTemplateRows: '80px 80px', // Use pixel values but fractions\r\n height: '160px', // Full height of preview section\r\n\r\n '& > :nth-child(1)': {\r\n ...shorthands.gridArea(1, 1, 2, 1), // First image takes full height of first column\r\n height: '160px',\r\n },\r\n '& > :nth-child(2)': {\r\n ...shorthands.gridArea(1, 2, 1, 2), // Second image is top in second column\r\n height: '80px',\r\n },\r\n '& > :nth-child(3)': {\r\n ...shorthands.gridArea(2, 2, 2, 2), // Third image is bottom in second column\r\n height: '80px',\r\n },\r\n },\r\n fourImages: {\r\n display: 'grid',\r\n gridTemplateColumns: 'repeat(2, 1fr)', // 2 equal columns\r\n gridTemplateRows: 'repeat(2, 1fr)', // 2 equal rows\r\n width: '100%',\r\n height: '160px', // Full height of preview section\r\n\r\n '& img': {\r\n height: '80px', // Set explicit height for each grid cell\r\n objectFit: 'cover',\r\n },\r\n },\r\n});\r\n","import _ from 'underscore';\r\nimport React, { useCallback, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Folder20Regular } from '@fluentui/react-icons';\r\nimport {\r\n Body1,\r\n Caption1,\r\n Card,\r\n CardFooter,\r\n CardPreview,\r\n} from '@fluentui/react-components';\r\nimport { ListItem } from '@fluentui/react-list-preview';\r\nimport { getTimeDescription, FolderAssetType, VideoStatus } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { useFolderCardStyles } from '../../../home-page-styles/component-styles/home-page-folder-asset-cards';\r\n\r\nexport const FolderAssetCard = ({\r\n folder, i18n, navigateIntoFolderItem, navigation, ariaSetsize, ariaPosinset, onClickCard,\r\n}) => {\r\n const styles = useFolderCardStyles();\r\n\r\n // Grab up to the first 4 assets for preview on the card\r\n const assetsToPreview = useMemo(() => {\r\n const filteredAssets = _.filter(folder && folder.assets, asset =>\r\n (asset.folderAssetType === FolderAssetType.Image ||\r\n (asset.folderAssetType === FolderAssetType.Video && asset.status === VideoStatus.Active)));\r\n if (Array.isArray(filteredAssets) && filteredAssets.length > 0) {\r\n return filteredAssets.slice(0, 4);\r\n }\r\n return [];\r\n }, [folder]);\r\n\r\n const handleFolderAssetClick = useCallback((folderAsset) => {\r\n navigation.gotoLibraryPage();\r\n navigateIntoFolderItem({ folder: folderAsset });\r\n onClickCard();\r\n }, [navigateIntoFolderItem, navigation, onClickCard]);\r\n\r\n const handleFolderAssetKeyDown = useCallback((event, folderAsset) => {\r\n if (event.key === 'Enter') {\r\n handleFolderAssetClick(folderAsset);\r\n event.preventDefault();\r\n }\r\n }, [handleFolderAssetClick]);\r\n\r\n // Set grid layout class based on the number of assets\r\n const getGridClass = useMemo(() => {\r\n if (assetsToPreview.length === 1) return styles.oneImage; // No grid for 1 image\r\n if (assetsToPreview.length === 2) return styles.twoImages; // 2 images side by side\r\n if (assetsToPreview.length === 3) return styles.threeImages; // Grid layout for 3 images\r\n if (assetsToPreview.length === 4) return styles.fourImages; // Grid layout for 4 images\r\n return styles.imageGrid; // Default grid for other cases\r\n }, [styles, assetsToPreview]);\r\n\r\n const modifiedTime = useMemo(() => {\r\n if (folder.modifiedTime) {\r\n return getTimeDescription(folder.modifiedTime, i18n);\r\n }\r\n return '';\r\n }, [folder.modifiedTime, i18n]);\r\n\r\n const modifiedTimeString = useMemo(() => (modifiedTime ? `${i18n.getString(_TL_('Accessed:'))} ${modifiedTime}` : ''), [i18n, modifiedTime]);\r\n\r\n return (\r\n handleFolderAssetClick(folder)}\r\n onKeyDown={event => handleFolderAssetKeyDown(event, folder)}\r\n className={styles.folderCardListItem}\r\n >\r\n \r\n \r\n
    \r\n
    \r\n {assetsToPreview && assetsToPreview.length > 0 && assetsToPreview.map(asset => (\r\n \r\n ))}\r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n \r\n {folder.folderName}\r\n
    \r\n
    \r\n \r\n {modifiedTimeString}\r\n \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n );\r\n};\r\n\r\nFolderAssetCard.propTypes = {\r\n folder: PropTypes.shape({\r\n folderName: PropTypes.string,\r\n modifiedTime: PropTypes.instanceOf(Date),\r\n folderId: PropTypes.number,\r\n assets: PropTypes.arrayOf(PropTypes.shape({\r\n id: PropTypes.string,\r\n url: PropTypes.string,\r\n originalUrl: PropTypes.string,\r\n thumbnailUrl: PropTypes.string,\r\n })).isRequired,\r\n }).isRequired,\r\n i18n: PropTypes.shape({}).isRequired,\r\n navigateIntoFolderItem: PropTypes.func.isRequired,\r\n navigation: PropTypes.shape({\r\n gotoLibraryPage: PropTypes.func.isRequired,\r\n }).isRequired,\r\n};\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nexport const useVideoCardStyles = makeStyles({\r\n videoCardListItem: {\r\n marginRight: '16px',\r\n },\r\n videoCard: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n width: '194px !important',\r\n height: '220px !important',\r\n pointerEvents: 'auto',\r\n },\r\n videoCardThumbnail: {\r\n width: '194px !important',\r\n height: '160px !important',\r\n objectFit: 'cover',\r\n ...shorthands.overflow('hidden'),\r\n },\r\n videoCardPreviewPlaceholder: {\r\n width: '194px !important',\r\n height: '160px !important',\r\n backgroundColor: '#F5F5F5',\r\n ...shorthands.overflow('hidden'),\r\n },\r\n videoCardFooter: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n flexWrap: 'wrap',\r\n height: '60px !important',\r\n width: '194px !important',\r\n paddingLeft: '15px !important',\r\n },\r\n videoCardFooterContent: {\r\n display: 'flex',\r\n rowGap: '0px !important',\r\n paddingBottom: '2px !important',\r\n flexDirection: 'column',\r\n alignItems: 'flex-start',\r\n ...shorthands.gap('4px'),\r\n },\r\n videoIconAndName: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n ...shorthands.gap('4px'),\r\n },\r\n videoName: {\r\n width: '142px',\r\n ...shorthands.overflow('hidden'),\r\n whiteSpace: 'nowrap',\r\n textOverflow: 'ellipsis',\r\n },\r\n videoCardCaption: {\r\n paddingBottom: '5px !important',\r\n paddingLeft: '2px !important',\r\n },\r\n});\r\n","import React, { useCallback, useMemo, useEffect, useRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n Body1,\r\n Caption1,\r\n Card,\r\n CardFooter,\r\n CardPreview,\r\n} from '@fluentui/react-components';\r\nimport { ListItem } from '@fluentui/react-list-preview';\r\nimport { Video20Regular } from '@fluentui/react-icons';\r\nimport {\r\n getTimeDescription,\r\n VideoStatus,\r\n UnverifiedPlaceholderWithStyle,\r\n EncodingPlaceholderWithStyle,\r\n FailedPlaceholderWithStyle,\r\n} from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { useVideoCardStyles } from '../../../home-page-styles/component-styles/home-page-video-asset-cards';\r\n\r\nexport const VideoAssetCard = ({\r\n asset, i18n, navigation, renameAsset, ariaSetsize, ariaPosinset, onClickCard,\r\n}) => {\r\n const styles = useVideoCardStyles();\r\n const currentActivedCardId = useRef();\r\n\r\n const assetName = useMemo(() => (asset.name ? asset.name : asset.id), [asset.id, asset.name]);\r\n\r\n /* istanbul ignore next */\r\n const videoTimeCaption = useMemo(() => {\r\n if (asset.modifiedTime > asset.createdTime) {\r\n return getTimeDescription(asset.modifiedTime, i18n) ? `${i18n.getString(_TL_('Edited:'))} ${getTimeDescription(asset.modifiedTime, i18n)}` : '';\r\n }\r\n return getTimeDescription(asset.createdTime, i18n) ? `${i18n.getString(_TL_('Uploaded:'))} ${getTimeDescription(asset.createdTime, i18n)}` : '';\r\n }, [asset.modifiedTime, asset.createdTime, i18n]);\r\n\r\n /* istanbul ignore next */\r\n const videoCardPreview = useMemo(() => {\r\n let defaultContent = null;\r\n // status order: unverified => draft => active/invalid\r\n if (asset.status === VideoStatus.Active) {\r\n defaultContent = (\r\n \r\n );\r\n } else if (asset.status === VideoStatus.Unverified) {\r\n defaultContent =
    ;\r\n } else if (asset.status === VideoStatus.Draft) {\r\n defaultContent =
    ;\r\n } else if (asset.status === VideoStatus.Failed) {\r\n defaultContent =
    ;\r\n }\r\n\r\n return defaultContent;\r\n }, [asset, assetName, i18n, styles.videoCardPreviewPlaceholder, styles.videoCardThumbnail]);\r\n\r\n const onCloseDetail = useCallback(() => {\r\n currentActivedCardId.current = null;\r\n }, []);\r\n\r\n const handleVideoAssetClick = useCallback((videoAsset) => {\r\n if (videoAsset.status !== VideoStatus.Active) {\r\n return;\r\n }\r\n onClickCard();\r\n currentActivedCardId.current = videoAsset.id;\r\n navigation.gotoAssetDetails({\r\n assetId: videoAsset.id, folderAssetType: videoAsset.folderAssetType, assets: [videoAsset], totalAssetCount: 1, renameAsset, onClose: onCloseDetail,\r\n });\r\n }, [navigation, onClickCard, onCloseDetail, renameAsset]);\r\n\r\n const handleVideoAssetKeyDown = useCallback((event, videoAsset) => {\r\n if (event.key === 'Enter') {\r\n handleVideoAssetClick(videoAsset);\r\n event.preventDefault();\r\n }\r\n }, [handleVideoAssetClick]);\r\n\r\n useEffect(() => {\r\n if (navigation && currentActivedCardId.current === asset.id) {\r\n navigation.updateAssetDetailsParams({ assets: [asset] });\r\n }\r\n }, [asset, navigation]);\r\n\r\n return (\r\n handleVideoAssetClick(asset)}\r\n onKeyDown={event => handleVideoAssetKeyDown(event, asset)}\r\n className={styles.videoCardListItem}\r\n >\r\n \r\n \r\n {videoCardPreview}\r\n \r\n
    \r\n \r\n
    \r\n \r\n {assetName}\r\n
    \r\n
    \r\n {videoTimeCaption || ''}\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n );\r\n};\r\n\r\nVideoAssetCard.propTypes = {\r\n asset: PropTypes.shape({\r\n name: PropTypes.string,\r\n createdTime: PropTypes.instanceOf(Date),\r\n modifiedTime: PropTypes.instanceOf(Date),\r\n id: PropTypes.string,\r\n thumbnailUrl: PropTypes.string,\r\n url: PropTypes.string,\r\n status: PropTypes.string,\r\n }).isRequired,\r\n i18n: PropTypes.shape({}).isRequired,\r\n navigation: PropTypes.shape({\r\n gotoAssetDetails: PropTypes.func.isRequired,\r\n updateAssetDetailsParams: PropTypes.func.isRequired,\r\n }).isRequired,\r\n renameAsset: PropTypes.func.isRequired,\r\n};\r\n","import React, { useState, useRef, useEffect, useCallback, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport { ChevronRight16Regular, ChevronLeft16Regular } from '@fluentui/react-icons';\r\nimport { List } from '@fluentui/react-list-preview';\r\nimport { FolderAssetType, handleRealUsedFlag, RealUsedFlagSuffix } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { ImageAssetCard } from './home-page-asset-cards/image-asset-card';\r\nimport { FolderAssetCard } from './home-page-asset-cards/folder-asset-card';\r\nimport { VideoAssetCard } from './home-page-asset-cards/video-asset-card';\r\nimport { getAssetListBarCarouselStyle } from '../home-page-styles';\r\n\r\nexport const AssetCard = ({\r\n item,\r\n i18n,\r\n navigateIntoFolderItem,\r\n navigation,\r\n logger,\r\n renameAsset,\r\n ariaSetsize,\r\n ariaPosinset,\r\n adsStudioAccountPreferences,\r\n}) => {\r\n const { folderAssetType } = item || {};\r\n\r\n const onClickCard = useCallback(() => {\r\n handleRealUsedFlag(adsStudioAccountPreferences, RealUsedFlagSuffix.App);\r\n }, [adsStudioAccountPreferences]);\r\n\r\n switch (folderAssetType) {\r\n case FolderAssetType.Folder:\r\n return (\r\n );\r\n case FolderAssetType.Image:\r\n return (\r\n );\r\n case FolderAssetType.Video:\r\n return (\r\n );\r\n default:\r\n return null;\r\n }\r\n};\r\n\r\nAssetCard.propTypes = {\r\n item: PropTypes.shape({\r\n folderAssetType: PropTypes.string,\r\n folderId: PropTypes.number,\r\n id: PropTypes.string,\r\n }).isRequired,\r\n i18n: PropTypes.shape({}).isRequired,\r\n navigateIntoFolderItem: PropTypes.func.isRequired,\r\n navigation: PropTypes.shape({}).isRequired,\r\n renameAsset: PropTypes.func.isRequired,\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n }).isRequired,\r\n};\r\n\r\nconst ListBarCarousel = ({\r\n assets, i18n, navigateIntoFolderItem, renameAsset, navigation, logger, adsStudioAccountPreferences,\r\n}) => {\r\n const styles = getAssetListBarCarouselStyle();\r\n const sliderRef = useRef(null);\r\n const [scrollPosition, setScrollPosition] = useState(0);\r\n const [showArrowLeft, setShowArrowLeft] = useState(false);\r\n const [showArrowRight, setShowArrowRight] = useState(true);\r\n\r\n const computeMaxScrollWidth = useCallback(() => {\r\n if (sliderRef.current) {\r\n return sliderRef.current.scrollWidth - sliderRef.current.clientWidth;\r\n }\r\n return 0;\r\n }, []);\r\n\r\n const goLeft = useCallback(() => {\r\n const newPosition = Math.max(scrollPosition - 960, 0);\r\n setScrollPosition(newPosition);\r\n }, [scrollPosition]);\r\n\r\n const goRight = useCallback(() => {\r\n const maxScroll = computeMaxScrollWidth();\r\n const newPosition = Math.min(scrollPosition + 960, maxScroll);\r\n setScrollPosition(newPosition);\r\n }, [scrollPosition, computeMaxScrollWidth]);\r\n\r\n const isHideSection = useMemo(() => {\r\n if ((!assets || !assets.length)) {\r\n return true;\r\n }\r\n return false;\r\n }, [assets]);\r\n\r\n useEffect(() => {\r\n const maxScroll = computeMaxScrollWidth();\r\n setShowArrowLeft(scrollPosition > 0);\r\n setShowArrowRight(scrollPosition < maxScroll);\r\n }, [scrollPosition, computeMaxScrollWidth]);\r\n\r\n if (isHideSection) {\r\n return <>;\r\n }\r\n\r\n return (\r\n <>\r\n
    \r\n {i18n.getString(_TL_('Recent'))}\r\n
    \r\n
    {i18n.getString(_TL_('Find recent assets'))}
    \r\n
    \r\n {showArrowLeft && (\r\n
    \r\n \r\n
    \r\n )}\r\n
    \r\n {assets && assets.length > 0 &&\r\n \r\n {assets.map((item, index) => (\r\n \r\n ))}\r\n \r\n }\r\n
    \r\n {showArrowRight && (\r\n <>\r\n
    \r\n
    \r\n \r\n
    \r\n \r\n )}\r\n {showArrowLeft &&
    }\r\n
    \r\n \r\n );\r\n};\r\n\r\nListBarCarousel.propTypes = {\r\n assets: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n navigateIntoFolderItem: PropTypes.func.isRequired,\r\n renameAsset: PropTypes.func.isRequired,\r\n navigation: PropTypes.shape({\r\n gotoAssetDetails: PropTypes.func,\r\n }).isRequired,\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n }).isRequired,\r\n};\r\n\r\nexport default ListBarCarousel;\r\n","import React, { useCallback, useRef, useState, useEffect } from 'react';\r\nimport { debounce } from 'underscore';\r\nimport { Input, Image, Button, mergeClasses } from '@fluentui/react-components';\r\nimport { Send20Regular } from '@fluentui/react-icons';\r\nimport PropTypes from 'prop-types';\r\nimport { AIPromptExamples } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { getHomePageGenerateWithAIComponentStyle } from '../home-page-styles';\r\n\r\nconst GenerateWithAIComponent = ({ i18n, onGenerateImage, loadingStatus }) => {\r\n const classes = getHomePageGenerateWithAIComponentStyle();\r\n\r\n const wrapperRef = useRef(null);\r\n const [searchQuery, setSearchQuery] = useState('');\r\n const [exampleList, setExampleList] = useState([]);\r\n\r\n const onInputChange = useCallback((event) => {\r\n setSearchQuery(event.target.value);\r\n\r\n if (event.key === 'Enter') {\r\n event.preventDefault();\r\n onGenerateImage({\r\n text: event.target.value.trim(),\r\n });\r\n }\r\n }, [onGenerateImage]);\r\n\r\n const handleSearch = useCallback(() => {\r\n onGenerateImage({\r\n text: searchQuery.trim(),\r\n });\r\n }, [onGenerateImage, searchQuery]);\r\n\r\n useEffect(() => {\r\n if (!loadingStatus) {\r\n const wrapperWidth = wrapperRef.current ? wrapperRef.current.offsetWidth : 0;\r\n const maxCount = wrapperWidth > 0 ? Math.floor(wrapperWidth / 264) : 1;\r\n const newList = AIPromptExamples.slice(0, maxCount);\r\n setExampleList(newList);\r\n } else {\r\n setExampleList([]);\r\n }\r\n }, [loadingStatus]);\r\n\r\n useEffect(() => {\r\n const updateExampleList = debounce((entries) => {\r\n if (entries[0]) {\r\n const { clientWidth } = entries[0].target;\r\n\r\n if (!loadingStatus) {\r\n const maxCount = clientWidth > 0 ? Math.floor(clientWidth / 264) : 1;\r\n const newList = AIPromptExamples.slice(0, maxCount);\r\n setExampleList(newList);\r\n }\r\n }\r\n }, 250);\r\n const resizeObserver = window.ResizeObserver && new ResizeObserver(updateExampleList);\r\n if (wrapperRef.current && resizeObserver) {\r\n resizeObserver.observe(wrapperRef.current);\r\n }\r\n return () => {\r\n if (wrapperRef.current && resizeObserver) {\r\n resizeObserver.unobserve(wrapperRef.current);\r\n }\r\n };\r\n }, [loadingStatus]);\r\n\r\n return (\r\n
    \r\n
    \r\n {i18n.getString(_TL_('Generate images with AI'))}\r\n
    \r\n
    \r\n {i18n.getString(_TL_('Create images for your campaigns by providing prompts.'))}\r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n {exampleList.length > 0 && exampleList.map(image => (\r\n
    \r\n \r\n
    \r\n
    \r\n {i18n.getString(image.promptText)}\r\n
    \r\n onGenerateImage({ url: image.imageSrc, text: i18n.getString(image.promptText) })}\r\n >\r\n {i18n.getString(_TL_('Try it now'))}\r\n \r\n
    \r\n
    \r\n ))}\r\n
    \r\n
    \r\n );\r\n};\r\n\r\nGenerateWithAIComponent.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n onGenerateImage: PropTypes.func.isRequired,\r\n loadingStatus: PropTypes.bool,\r\n};\r\n\r\nGenerateWithAIComponent.defaultProps = {\r\n loadingStatus: false,\r\n};\r\n\r\nexport default GenerateWithAIComponent;\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nexport const useActionAssetCardsStyle = makeStyles({\r\n cardContainer: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n ...shorthands.gap('16px'),\r\n flexWrap: 'wrap',\r\n justifyContent: 'space-between',\r\n maxWidth: '1532px',\r\n },\r\n});\r\n","import React, { useRef, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useJsData } from '@bingads-webui-cc-react/js-data-rest';\r\nimport {\r\n getHomePageCardData,\r\n AddAssetEntryCard,\r\n RealUsedFlagSuffix,\r\n handleRealUsedFlag,\r\n isValidXandrAccount,\r\n} from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n\r\nimport { useActionAssetCardsStyle } from '../../../home-page-styles/component-styles/home-page-action-asset-cards';\r\n\r\nexport const ActionAssetCards = ({\r\n i18n,\r\n aid,\r\n cid,\r\n oDataConfig,\r\n navigation,\r\n logger,\r\n adsStudioAccountPreferences,\r\n permissions,\r\n}) => {\r\n const classes = useActionAssetCardsStyle();\r\n const openSystemUploadRef = useRef(null);\r\n\r\n const isXandrIntEnabled = useMemo(() => permissions.dynamic.XandrIntegrationEnabled, [permissions]);\r\n // eslint-disable-next-line no-restricted-globals\r\n const { data: account } = useJsData(jsData => (isXandrIntEnabled ? jsData.Account.find(aid) : Promise.resolve()), [aid, isXandrIntEnabled]);\r\n const isXandrIntegrationEnabled = useMemo(() => (isXandrIntEnabled ? isValidXandrAccount(account) : false), [account, isXandrIntEnabled]);\r\n\r\n const cardData = useMemo(() => getHomePageCardData({\r\n i18n,\r\n onClickUpload: () => {\r\n handleRealUsedFlag(adsStudioAccountPreferences, RealUsedFlagSuffix.App);\r\n openSystemUploadRef.current = {};\r\n navigation.gotoUploadFilesPanelPage({\r\n aid, cid, oDataConfig, i18n, mode: 'image', openSystemUpload: openSystemUploadRef.current,\r\n });\r\n },\r\n onClickStock: () => {\r\n handleRealUsedFlag(adsStudioAccountPreferences, RealUsedFlagSuffix.App);\r\n if (logger && logger.logTrace) {\r\n logger.logTrace('Add asset from shutterstock');\r\n }\r\n navigation.gotoStockImagePanelPage({\r\n aid, cid, oDataConfig, i18n,\r\n });\r\n },\r\n onClickInvest: () => {\r\n handleRealUsedFlag(adsStudioAccountPreferences, RealUsedFlagSuffix.App);\r\n if (logger && logger.logTrace) {\r\n logger.logTrace('Add asset from invest');\r\n }\r\n navigation.gotoInvestImagePanelPage({\r\n aid, cid, oDataConfig, i18n,\r\n });\r\n },\r\n onClickWebsite: () => {\r\n handleRealUsedFlag(adsStudioAccountPreferences, RealUsedFlagSuffix.App);\r\n if (logger && logger.logTrace) {\r\n logger.logTrace('Add asset from website');\r\n }\r\n navigation.gotoWebsiteImagePanelPage({\r\n aid, cid, oDataConfig, i18n,\r\n });\r\n },\r\n isXandrIntegrationEnabled,\r\n }), [i18n, adsStudioAccountPreferences, navigation, aid, cid, oDataConfig, logger, isXandrIntegrationEnabled]);\r\n\r\n return (\r\n <>\r\n
    \r\n {cardData.map(card => (\r\n \r\n ))}\r\n
    \r\n \r\n );\r\n};\r\n\r\nActionAssetCards.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n aid: PropTypes.number.isRequired,\r\n cid: PropTypes.number.isRequired,\r\n oDataConfig: PropTypes.shape({}).isRequired,\r\n navigation: PropTypes.shape({\r\n gotoWebsiteImagePanelPage: PropTypes.func,\r\n gotoStockImagePanelPage: PropTypes.func,\r\n gotoUploadFilesPanelPage: PropTypes.func,\r\n gotoInvestImagePanelPage: PropTypes.func,\r\n }).isRequired,\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n }).isRequired,\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({}),\r\n }),\r\n};\r\n\r\nActionAssetCards.defaultProps = {\r\n permissions: { dynamic: {} },\r\n};\r\n","import { makeStyles, shorthands, tokens } from '@fluentui/react-components';\r\n\r\nexport const useImageBackgroundSectionStyles = makeStyles({\r\n subHeading: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n fontWeight: 600,\r\n lineHeight: '26px',\r\n fontFamily: 'Segoe UI',\r\n fontSize: '20px',\r\n textAlign: 'left',\r\n marginTop: '20px',\r\n },\r\n paragraph: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n fontFamily: 'Segoe UI',\r\n fontSize: '14px',\r\n fontWeight: 400,\r\n lineHeight: '20px',\r\n textAlign: 'left',\r\n },\r\n backgroundCardContainer: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n flexWrap: 'nowrap',\r\n justifyContent: 'flex-start',\r\n marginBottom: '30px',\r\n ...shorthands.overflow('hidden'),\r\n },\r\n uploadCard: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n width: '247px',\r\n height: '247px',\r\n marginRight: '16px',\r\n ...shorthands.borderRadius('8px'),\r\n ...shorthands.border('1px', 'dashed', tokens.colorNeutralStroke1),\r\n ...shorthands.padding(0, '48px'),\r\n flexShrink: 0,\r\n },\r\n uploadIcon: {\r\n marginTop: '40px',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n },\r\n uploadFrame: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n },\r\n uploadCaption: {\r\n fontFamily: 'Segoe UI',\r\n fontSize: '14px',\r\n fontWeight: 400,\r\n lineHeight: '20px',\r\n textAlign: 'center',\r\n marginBottom: '10px',\r\n },\r\n uploadButton: {\r\n marginTop: 'auto',\r\n textAlign: 'center',\r\n fontFamily: 'Segoe UI',\r\n fontSize: '14px',\r\n fontWeight: 600,\r\n lineHeight: '20px',\r\n marginBottom: '20px',\r\n ...shorthands.borderRadius('4px'),\r\n ...shorthands.padding('5px', '12px'),\r\n ...shorthands.border('1px', 'solid', tokens.colorNeutralStroke1),\r\n },\r\n imageCard: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n width: '247px',\r\n height: '247px',\r\n marginRight: '16px',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n ...shorthands.borderRadius('8px'),\r\n ...shorthands.overflow('hidden'),\r\n flexShrink: 0,\r\n },\r\n image: {\r\n width: '247px',\r\n height: '247px',\r\n objectFit: 'cover',\r\n },\r\n});\r\n","import React, { useCallback, useRef, useEffect, useState } from 'react';\r\nimport { debounce } from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n Button,\r\n Caption1,\r\n mergeClasses,\r\n} from '@fluentui/react-components';\r\nimport {\r\n RealUsedFlagSuffix,\r\n handleRealUsedFlag,\r\n} from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport imageUploadIcon from './image-upload-icon.svg';\r\nimport background1 from './background1.jpg';\r\nimport background2 from './background2.jpg';\r\nimport background3 from './background3.jpg';\r\nimport background4 from './background4.jpg';\r\nimport background5 from './background5.jpg';\r\nimport background6 from './background6.jpg';\r\nimport background7 from './background7.jpg';\r\nimport background8 from './background8.jpg';\r\nimport background9 from './background9.jpg';\r\nimport background10 from './background10.jpg';\r\nimport { useImageBackgroundSectionStyles } from '../../home-page-styles/component-styles/home-page-image-background-section';\r\n\r\nconst staticBackgrounds = [\r\n background1,\r\n background2,\r\n background3,\r\n background4,\r\n background5,\r\n background6,\r\n background7,\r\n background8,\r\n background9,\r\n background10,\r\n];\r\n\r\nexport const ImageBackgroundCards = ({\r\n i18n, navigation, loadingStatus, isAIGCRegionRestricted, notificationApi, adsStudioAccountPreferences,\r\n}) => {\r\n const styles = useImageBackgroundSectionStyles();\r\n const [exampleList, setExampleList] = useState([]);\r\n\r\n const handleImageUploadClick = useCallback(() => {\r\n if (isAIGCRegionRestricted) {\r\n notificationApi.showWarning(i18n.getString(_TL_('This feature isn\\'t available in all markets.')));\r\n } else {\r\n navigation.gotoBackgroundRemovalModal();\r\n }\r\n handleRealUsedFlag(adsStudioAccountPreferences, RealUsedFlagSuffix.App);\r\n }, [isAIGCRegionRestricted, adsStudioAccountPreferences, notificationApi, i18n, navigation]);\r\n\r\n const onExampleImageKeyDown = useCallback((event) => {\r\n if (event.key === 'Enter') {\r\n event.preventDefault();\r\n handleImageUploadClick();\r\n }\r\n }, [handleImageUploadClick]);\r\n\r\n const wrapperRef = useRef(null);\r\n\r\n useEffect(() => {\r\n if (!loadingStatus) {\r\n const wrapperWidth = wrapperRef.current ? wrapperRef.current.offsetWidth : 0;\r\n const maxCount = wrapperWidth > 0 ? Math.floor(wrapperWidth / 264) : 1;\r\n const newList = staticBackgrounds.slice(0, maxCount - 1);\r\n setExampleList(newList);\r\n } else {\r\n setExampleList([]);\r\n }\r\n }, [loadingStatus]);\r\n\r\n useEffect(() => {\r\n const updateExampleList = debounce((entries) => {\r\n if (entries[0]) {\r\n const { clientWidth } = entries[0].target;\r\n\r\n if (!loadingStatus) {\r\n const maxCount = clientWidth > 0 ? Math.floor(clientWidth / 264) : 1;\r\n const newList = staticBackgrounds.slice(0, maxCount - 1);\r\n setExampleList(newList);\r\n }\r\n }\r\n }, 250);\r\n const resizeObserver = window.ResizeObserver && new ResizeObserver(updateExampleList);\r\n if (wrapperRef.current && resizeObserver) {\r\n resizeObserver.observe(wrapperRef.current);\r\n }\r\n return () => {\r\n if (wrapperRef.current && resizeObserver) {\r\n resizeObserver.unobserve(wrapperRef.current);\r\n }\r\n };\r\n }, [loadingStatus]);\r\n\r\n return (\r\n <>\r\n
    \r\n {i18n.getString(_TL_('Try a different background'))}\r\n
    \r\n
    \r\n {i18n.getString(_TL_('Try out a new background for your image'))}\r\n
    \r\n\r\n
    \r\n \r\n {exampleList.length > 0 && exampleList.map((background, index) => (\r\n \r\n {`Background\r\n
    \r\n ))}\r\n
    \r\n \r\n );\r\n};\r\n\r\nImageBackgroundCards.propTypes = {\r\n oDataConfig: PropTypes.shape({}).isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n navigation: PropTypes.shape({\r\n gotoUploadFilesPanelPage: PropTypes.func,\r\n }).isRequired,\r\n isAIGCRegionRestricted: PropTypes.bool.isRequired,\r\n notificationApi: PropTypes.shape({\r\n showWarning: PropTypes.func.isRequired,\r\n }).isRequired,\r\n};\r\n","import _ from 'underscore';\r\nimport React, { useEffect, useState, useCallback, useContext, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { mergeClasses } from '@fluentui/react-components';\r\nimport {\r\n AdsStudioSpinner,\r\n GenerateImageContext,\r\n CSMLSortBy,\r\n AIGCHandler,\r\n AdStudioSurveyTriggerFlag,\r\n addAdStudioSurveyTriggerFlag,\r\n RealUsedFlagSuffix,\r\n handleRealUsedFlag,\r\n} from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { Overlay } from '@bingads-webui-react/fabric-control';\r\nimport { setClarityTag } from '@bingads-webui-universal/clarity';\r\nimport { usePageActiveTimeTracker } from '@bingads-webui-campaign-react/common-hooks';\r\n\r\nimport { HomePageTopBannerComponent, AssetListBarCarousel, HomePageGenerateWithAIComponent } from './components';\r\nimport { ActionAssetCards } from './components/home-page-asset-cards/action-asset-cards';\r\nimport { ImageBackgroundCards } from './components/home-page-image-background-section';\r\nimport { useHomePageStyle } from './home-page-styles';\r\n\r\nconst HomePage = ({\r\n i18n,\r\n aid,\r\n cid,\r\n oDataConfig,\r\n dataService,\r\n libraryDataService,\r\n notificationApi,\r\n isAdsStudioAIGCMVPEnabled,\r\n isAIGCRegionRestricted,\r\n logger,\r\n reload,\r\n navigation,\r\n pagePerfMarker: homePagePerfMarker,\r\n setDataLoaded,\r\n permissions,\r\n adsStudioAccountPreferences,\r\n}) => {\r\n const classes = useHomePageStyle();\r\n\r\n const {\r\n loadData,\r\n assets = [],\r\n renameAsset,\r\n } = dataService;\r\n\r\n const {\r\n navigateIntoFolderItem,\r\n } = libraryDataService;\r\n\r\n const [isPageInited, setPageInited] = useState(false);\r\n const [loadingData, setLoadingData] = useState(false);\r\n\r\n const { setGenerateImageExample } = useContext(GenerateImageContext);\r\n const isAdsStudioBackgroundChangeEnabled = _.get(permissions, ['dynamic', 'AdsStudioBackgroundChange'], false);\r\n\r\n const onFailedToLoadData = useCallback(() => {\r\n notificationApi.showWarning(i18n.getString(_TL_('Failed to load images. Please refresh the page and try again.')));\r\n }, [i18n, notificationApi]);\r\n\r\n // init page\r\n useEffect(() => {\r\n if (!isPageInited) {\r\n setPageInited(true);\r\n }\r\n }, [isPageInited]);\r\n\r\n usePageActiveTimeTracker(logger, 'Home');\r\n\r\n useEffect(() => {\r\n setClarityTag({ LoadAdsStudioHomePage: true });\r\n }, []);\r\n\r\n // load data for initial page load\r\n useEffect(() => {\r\n if (!isPageInited) {\r\n // wait until page is initialized\r\n return;\r\n }\r\n\r\n // Important! Add a trivial log so that reload will be an explicit dep.\r\n if (reload) {\r\n logger.logTrace('force to reload');\r\n }\r\n\r\n homePagePerfMarker.willFetchData();\r\n setLoadingData(true);\r\n loadData({\r\n isGlobalSearch: true,\r\n assetsToLoadForSubfolders: 5,\r\n includeParentHierarchy: true,\r\n isRecentSorting: true,\r\n sortBy: CSMLSortBy.MostRecent,\r\n })\r\n .catch(() => {\r\n onFailedToLoadData();\r\n }).finally(() => {\r\n setLoadingData(false);\r\n homePagePerfMarker.willRender();\r\n if (setDataLoaded) {\r\n setDataLoaded();\r\n }\r\n addAdStudioSurveyTriggerFlag(adsStudioAccountPreferences, AdStudioSurveyTriggerFlag.App, RealUsedFlagSuffix.App);\r\n });\r\n }, [isPageInited, loadData, onFailedToLoadData, reload, logger]);\r\n\r\n const isPageLoading = !isPageInited || loadingData;\r\n\r\n const onSearch = useCallback((searchQuery) => {\r\n navigation.gotoSearchResultPage({\r\n query: searchQuery,\r\n });\r\n }, [navigation]);\r\n\r\n const onGenerateImage = useCallback(({ url, text }) => {\r\n handleRealUsedFlag(adsStudioAccountPreferences, RealUsedFlagSuffix.App);\r\n AIGCHandler(isAdsStudioAIGCMVPEnabled, isAIGCRegionRestricted, notificationApi, i18n, () => {\r\n setGenerateImageExample({\r\n prompt: text,\r\n imageUrl: url,\r\n });\r\n navigation.gotoAIGenerationPanelPage();\r\n });\r\n }, [adsStudioAccountPreferences, i18n, isAIGCRegionRestricted, isAdsStudioAIGCMVPEnabled, navigation, notificationApi, setGenerateImageExample]);\r\n\r\n const sortedAssets = useMemo(() => (_.sortBy(assets, asset => asset.modifiedTime).reverse()), [assets]);\r\n\r\n return (\r\n
    \r\n {(isPageLoading) && (\r\n \r\n \r\n \r\n )}\r\n \r\n\r\n \r\n\r\n {\r\n !isPageLoading &&\r\n \r\n }\r\n\r\n {\r\n isAdsStudioBackgroundChangeEnabled &&\r\n \r\n }\r\n\r\n \r\n
    \r\n );\r\n};\r\n\r\nHomePage.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n aid: PropTypes.number.isRequired,\r\n cid: PropTypes.number.isRequired,\r\n oDataConfig: PropTypes.shape({}).isRequired,\r\n dataService: PropTypes.shape({\r\n assets: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n loadData: PropTypes.func.isRequired,\r\n renameAsset: PropTypes.func.isRequired,\r\n }),\r\n libraryDataService: PropTypes.shape({\r\n navigateIntoFolderItem: PropTypes.func,\r\n }),\r\n notificationApi: PropTypes.shape({\r\n showWarning: PropTypes.func.isRequired,\r\n }),\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n }).isRequired,\r\n adsStudioAccountPreferences: PropTypes.shape({}),\r\n reload: PropTypes.shape({}),\r\n navigation: PropTypes.shape({\r\n gotoSearchResultPage: PropTypes.func.isRequired,\r\n gotoAIGenerationPanelPage: PropTypes.func.isRequired,\r\n }).isRequired,\r\n isAIGCRegionRestricted: PropTypes.bool,\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({}).isRequired,\r\n }).isRequired,\r\n};\r\n\r\nHomePage.defaultProps = {\r\n dataService: {},\r\n libraryDataService: {},\r\n notificationApi: {},\r\n adsStudioAccountPreferences: undefined,\r\n reload: null,\r\n isAIGCRegionRestricted: false,\r\n};\r\n\r\nexport const HomePageComponent = HomePage;\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nexport const useImagesPageStyle = makeStyles({\r\n imagePage: {\r\n display: 'flex',\r\n ...shorthands.margin('32px', '36px'),\r\n flexDirection: 'column',\r\n ...shorthands.gap('24px'),\r\n ...shorthands.overflow('hidden'),\r\n },\r\n});\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nexport const useImageBannerContainerStyle = makeStyles({\r\n topBanner: {\r\n width: '100%',\r\n display: 'flex',\r\n ...shorthands.padding('36px'),\r\n flexDirection: 'column',\r\n alignItems: 'flex-start',\r\n ...shorthands.gap('24px'),\r\n alignSelf: 'stretch',\r\n ...shorthands.borderRadius('8px'),\r\n backgroundImage: 'linear-gradient(97deg, #E4E2F3 7.52%, #E3EDF3 91.2%), linear-gradient(102deg, rgba(217, 204, 223, 0.25) -0.35%, rgba(231, 222, 227, 0.25) 53.37%, rgba(116, 92, 185, 0.25) 104.98%)',\r\n },\r\n texts: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n ...shorthands.gap('8px'),\r\n fontFamily: 'Segoe UI',\r\n fontStyle: 'normal',\r\n textAlign: 'left',\r\n },\r\n pageName: {\r\n lineHeight: '37px',\r\n fontSize: '28px',\r\n fontWeight: 600,\r\n },\r\n descriptions: {\r\n fontSize: '16px',\r\n lineHeight: '21px',\r\n fontWeight: 400,\r\n },\r\n entryCard: {\r\n width: '100%',\r\n },\r\n});\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nexport const useImageCardContainerStyle = makeStyles({\r\n cardContainer: {\r\n display: 'flex',\r\n justifyContent: 'flex-start',\r\n alignItems: 'flex-start',\r\n ...shorthands.gap('8px'),\r\n flexDirection: 'row',\r\n flexWrap: 'wrap',\r\n width: '100%',\r\n },\r\n});\r\n","import { makeStyles, shorthands, tokens } from '@fluentui/react-components';\r\n\r\nexport const useImageEmptyViewStyle = makeStyles({\r\n emptyView: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n ...shorthands.gap('8px'),\r\n },\r\n emptyIcon: {\r\n width: '256px',\r\n height: '256px',\r\n },\r\n mainText: {\r\n fontFamily: 'Segoe UI',\r\n fontStyle: 'normal',\r\n textAlign: 'center',\r\n ...shorthands.overflow('hidden'),\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n color: tokens.neutralForegroundRest,\r\n lineHeight: '22px',\r\n fontWeight: 400,\r\n },\r\n});\r\n\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nexport const useVideoPageStyle = makeStyles({\r\n videoPage: {\r\n display: 'flex',\r\n ...shorthands.margin('32px', '36px'),\r\n flexDirection: 'column',\r\n ...shorthands.gap('24px'),\r\n ...shorthands.overflow('hidden'),\r\n },\r\n});\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\nimport videopageBanner from '../../video-page-styles/image-asset/videopageBanner.png';\r\n\r\nexport const useVideoPageTopBannerContainerStyle = makeStyles({\r\n topBanner: {\r\n boxSizing: 'border-box',\r\n width: '100%',\r\n display: 'flex',\r\n ...shorthands.padding('36px'),\r\n flexDirection: 'column',\r\n alignItems: 'flex-start',\r\n ...shorthands.gap('24px'),\r\n alignSelf: 'stretch',\r\n ...shorthands.borderRadius('8px'),\r\n backgroundImage: `url(${videopageBanner})`,\r\n backgroundSize: 'cover',\r\n backgroundRepeat: 'no-repeat',\r\n },\r\n texts: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n ...shorthands.gap('8px'),\r\n fontFamily: 'Segoe UI',\r\n fontStyle: 'normal',\r\n textAlign: 'left',\r\n },\r\n pageName: {\r\n lineHeight: '37px',\r\n fontSize: '28px',\r\n fontWeight: 600,\r\n },\r\n descriptions: {\r\n fontSize: '16px',\r\n lineHeight: '21px',\r\n fontWeight: 400,\r\n },\r\n entryCard: {\r\n width: '100%',\r\n },\r\n});\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nexport const useVideoCardContainerStyle = makeStyles({\r\n cardContainer: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n justifyContent: 'flex-start',\r\n alignItems: 'flex-start',\r\n ...shorthands.gap('8px'),\r\n flexDirection: 'row',\r\n maxWidth: '75%',\r\n },\r\n});\r\n","import { makeStyles, shorthands, tokens } from '@fluentui/react-components';\r\n\r\nexport const useVideoEmptyViewStyle = makeStyles({\r\n emptyView: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n ...shorthands.gap('8px'),\r\n },\r\n emptyIcon: {\r\n width: '256px',\r\n height: '256px',\r\n },\r\n mainText: {\r\n fontFamily: 'Segoe UI',\r\n fontStyle: 'normal',\r\n textAlign: 'center',\r\n ...shorthands.overflow('hidden'),\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n color: tokens.neutralForegroundRest,\r\n lineHeight: '22px',\r\n fontWeight: 400,\r\n },\r\n});\r\n\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nexport const useSearchResultViewStyle = makeStyles({\r\n searchResultView: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n ...shorthands.margin('32px', '36px'),\r\n ...shorthands.gap('24px'),\r\n },\r\n breadcrumbButton: {\r\n '&.fui-BreadcrumbButton': {\r\n color: '#0F6CBD',\r\n },\r\n },\r\n breadcrumbButtonCurrent: {\r\n '&.fui-BreadcrumbButton': {\r\n color: '#424242',\r\n fontWeight: 400,\r\n },\r\n },\r\n headerContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n ...shorthands.gap('8px'),\r\n marginTop: '24px',\r\n marginBottom: '24px',\r\n },\r\n headerTitle: {\r\n fontSize: '28px',\r\n fontWeight: 600,\r\n },\r\n defaultSearchQuery: {\r\n color: '#464FEB',\r\n fontStyle: 'italic',\r\n },\r\n});\r\n","import React, { useRef, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { mergeClasses } from '@fluentui/react-components';\r\nimport { useJsData } from '@bingads-webui-cc-react/js-data-rest';\r\nimport {\r\n getEntryCardData,\r\n AddAssetEntryCard,\r\n AIGCHandler,\r\n isValidXandrAccount,\r\n} from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n\r\nimport { useImageCardContainerStyle } from '../../styles';\r\n\r\nexport const AssetsEntryCardContainer = ({\r\n i18n,\r\n aid,\r\n cid,\r\n oDataConfig,\r\n navigation,\r\n isAdsStudioAIGCMVPEnabled,\r\n isAIGCRegionRestricted,\r\n notificationApi,\r\n logger,\r\n permissions,\r\n}) => {\r\n const classes = useImageCardContainerStyle();\r\n const openSystemUploadRef = useRef(null);\r\n\r\n const isXandrIntEnabled = useMemo(() => permissions.dynamic.XandrIntegrationEnabled, [permissions]);\r\n // eslint-disable-next-line no-restricted-globals\r\n const { data: account } = useJsData(jsData => (isXandrIntEnabled ? jsData.Account.find(aid) : Promise.resolve()), [aid, isXandrIntEnabled]);\r\n const isXandrIntegrationEnabled = useMemo(() => (isXandrIntEnabled ? isValidXandrAccount(account) : false), [account, isXandrIntEnabled]);\r\n\r\n const cardData = getEntryCardData({\r\n i18n,\r\n isImagePage: true,\r\n onClickCreate: () => {\r\n AIGCHandler(isAdsStudioAIGCMVPEnabled, isAIGCRegionRestricted, notificationApi, i18n, () => {\r\n navigation.gotoAIGenerationPanelPage();\r\n });\r\n },\r\n onClickUpload: () => {\r\n openSystemUploadRef.current = {};\r\n navigation.gotoUploadFilesPanelPage({\r\n aid, cid, oDataConfig, i18n, mode: 'image', openSystemUpload: openSystemUploadRef.current,\r\n });\r\n },\r\n onClickStock: () => {\r\n if (logger && logger.logTrace) {\r\n logger.logTrace('Add asset from shutterstock');\r\n }\r\n navigation.gotoStockImagePanelPage({\r\n aid, cid, oDataConfig, i18n,\r\n });\r\n },\r\n onClickInvest: () => {\r\n if (logger && logger.logTrace) {\r\n logger.logTrace('Add asset from invest');\r\n }\r\n navigation.gotoInvestImagePanelPage({\r\n aid, cid, oDataConfig, i18n,\r\n });\r\n },\r\n onClickWebsite: () => {\r\n if (logger && logger.logTrace) {\r\n logger.logTrace('Add asset from website');\r\n }\r\n navigation.gotoWebsiteImagePanelPage({\r\n aid, cid, oDataConfig, i18n,\r\n });\r\n },\r\n isXandrIntegrationEnabled,\r\n });\r\n\r\n return (\r\n <>\r\n
    \r\n {cardData.map(card => (\r\n \r\n ))}\r\n
    \r\n \r\n );\r\n};\r\n\r\n\r\nAssetsEntryCardContainer.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n aid: PropTypes.number.isRequired,\r\n cid: PropTypes.number.isRequired,\r\n oDataConfig: PropTypes.shape({}).isRequired,\r\n navigation: PropTypes.shape({\r\n gotoWebsiteImagePanelPage: PropTypes.func,\r\n gotoStockImagePanelPage: PropTypes.func,\r\n gotoUploadFilesPanelPage: PropTypes.func,\r\n gotoAIGenerationPanelPage: PropTypes.func,\r\n gotoInvestImagePanelPage: PropTypes.func,\r\n }).isRequired,\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n }).isRequired,\r\n isAIGCRegionRestricted: PropTypes.bool.isRequired,\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({}),\r\n }),\r\n};\r\n\r\nAssetsEntryCardContainer.defaultProps = {\r\n permissions: { dynamic: {} },\r\n};\r\n","import _ from 'underscore';\r\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n AdsStudioAssetGridCell,\r\n GridSectionName,\r\n SectionTilesGrid,\r\n DEFAULT_PAGE_SIZE,\r\n TilesGridLoadingCell,\r\n AdsStudioSpinner,\r\n ManualAddedImageSource,\r\n getUpdatedAssets,\r\n} from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n\r\nexport const ImageGridView = ({\r\n isSearchResultPage,\r\n i18n,\r\n dataService,\r\n logger,\r\n onFailedToLoadData,\r\n searchText,\r\n navigation,\r\n cropDataService,\r\n}) => {\r\n const {\r\n assets,\r\n totalAssetCount,\r\n totalLibraryAssetCount,\r\n loadMoreData,\r\n renameAsset,\r\n } = dataService;\r\n\r\n const [isLoadingMore, setIsLoadingMore] = useState(false);\r\n\r\n const { imageCroppingTasks } = cropDataService;\r\n\r\n const loadedAssetsList = useMemo(() => {\r\n const updatedAssets = getUpdatedAssets({\r\n assets,\r\n updates: {\r\n imageCroppingTasks,\r\n },\r\n });\r\n\r\n const updatedAssetsWithAriaLabel = _.map(updatedAssets, (asset) => {\r\n if (_.isObject(asset)) {\r\n return ({\r\n ...asset,\r\n ariaLabel: i18n.getString(_TL_('Image preview')),\r\n });\r\n }\r\n return asset;\r\n });\r\n\r\n return updatedAssetsWithAriaLabel;\r\n }, [assets, i18n, imageCroppingTasks]);\r\n\r\n const imagesGridSection = useMemo(() => ({\r\n sectionName: GridSectionName.Asset,\r\n sectionClassName: 'ads-studio-image-section',\r\n itemKey: 'id',\r\n items: loadedAssetsList,\r\n totalItemCount: totalAssetCount,\r\n config: {\r\n scrollContainer: '[role=\"main\"]',\r\n minItemHeight: 42,\r\n },\r\n }), [loadedAssetsList, totalAssetCount]);\r\n\r\n const sectionGridData = useMemo(\r\n () => ([imagesGridSection]),\r\n [imagesGridSection]\r\n );\r\n\r\n const hasLibraryAssets = useMemo(() => _.some(assets, item => item && item.manualAddedImageSourceType === ManualAddedImageSource.Library), [assets]);\r\n\r\n const libraryAssets = useMemo(() => (_.filter(assets, item =>\r\n item && (_.isUndefined(item.manualAddedImageSourceType) || item.manualAddedImageSourceType === ManualAddedImageSource.Library))), [assets]);\r\n\r\n const onRenderCell = useCallback(({ item }) => {\r\n const {\r\n _index,\r\n id,\r\n folderAssetType,\r\n manualAddedImageSourceType,\r\n url,\r\n } = item || {};\r\n\r\n const onCellDetailsClick = () => {\r\n navigation.gotoAssetDetails({\r\n assetId: id,\r\n assets: libraryAssets,\r\n totalAssetCount: hasLibraryAssets ? totalLibraryAssetCount : totalAssetCount,\r\n folderAssetType,\r\n loadMoreData,\r\n renameAsset,\r\n });\r\n };\r\n const onCellEditClick = () => {\r\n const editImageUrl = manualAddedImageSourceType === ManualAddedImageSource.ShutterStock ? url : undefined;\r\n if (logger && logger.logTrace) {\r\n logger.logTrace('Image Details: edit image', { assetId: id });\r\n }\r\n navigation.gotoEditImagePage({\r\n imageId: id,\r\n editImageUrl,\r\n query: isSearchResultPage ? searchText : undefined,\r\n });\r\n };\r\n\r\n return (\r\n \r\n );\r\n }, [hasLibraryAssets, i18n, isSearchResultPage, libraryAssets, loadMoreData, logger, navigation, renameAsset, searchText, totalAssetCount, totalLibraryAssetCount]);\r\n\r\n const loadNextPage = useCallback(() => {\r\n setIsLoadingMore(true);\r\n loadMoreData({ count: DEFAULT_PAGE_SIZE })\r\n .catch((err) => {\r\n onFailedToLoadData(err);\r\n })\r\n .finally(() => {\r\n setIsLoadingMore(false);\r\n });\r\n }, [loadMoreData, onFailedToLoadData]);\r\n\r\n const onRenderLoadingCell = useCallback(({ items, totalItemCount }) => {\r\n if ((items.length < totalItemCount) && (isSearchResultPage || items.length > 0)) {\r\n return (\r\n \r\n {isLoadingMore && (\r\n
    \r\n \r\n
    \r\n )}\r\n
    \r\n );\r\n }\r\n return null;\r\n }, [isLoadingMore, isSearchResultPage, loadNextPage]);\r\n\r\n useEffect(() => {\r\n if (navigation) {\r\n navigation.updateAssetDetailsParams({ assets: libraryAssets });\r\n }\r\n }, [libraryAssets, navigation]);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nImageGridView.propTypes = {\r\n isSearchResultPage: PropTypes.bool,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n dataService: PropTypes.shape({}),\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n }).isRequired,\r\n onFailedToLoadData: PropTypes.func,\r\n searchText: PropTypes.string,\r\n navigation: PropTypes.shape({}).isRequired,\r\n cropDataService: PropTypes.shape({\r\n imageCroppingTasks: PropTypes.arrayOf(PropTypes.shape({})),\r\n }).isRequired,\r\n};\r\n\r\nImageGridView.defaultProps = {\r\n isSearchResultPage: false,\r\n dataService: {},\r\n onFailedToLoadData: _.noop,\r\n searchText: '',\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { mergeClasses } from '@fluentui/react-components';\r\nimport { AssetsEntryCardContainer } from './assets-entry-cards-container';\r\nimport { useImageBannerContainerStyle } from '../../styles';\r\n\r\nexport const ImagesTopBannerComponent = ({\r\n i18n,\r\n aid,\r\n cid,\r\n oDataConfig,\r\n isAdsStudioAIGCMVPEnabled,\r\n isAIGCRegionRestricted,\r\n notificationApi,\r\n navigation,\r\n logger,\r\n permissions,\r\n}) => {\r\n const classes = useImageBannerContainerStyle();\r\n return (\r\n
    \r\n
    \r\n
    \r\n {i18n.getString(_TL_('Images'))}\r\n
    \r\n
    \r\n {i18n.getString(_TL_('Add new images or find existing images.'))}\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n );\r\n};\r\n\r\nImagesTopBannerComponent.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n aid: PropTypes.number.isRequired,\r\n cid: PropTypes.number.isRequired,\r\n oDataConfig: PropTypes.shape({}).isRequired,\r\n navigation: PropTypes.shape({}).isRequired,\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n }).isRequired,\r\n isAIGCRegionRestricted: PropTypes.bool.isRequired,\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({}),\r\n }),\r\n};\r\n\r\nImagesTopBannerComponent.defaultProps = {\r\n permissions: { dynamic: {} },\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { mergeClasses } from '@fluentui/react-components';\r\nimport { EmptyViewIcons } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n\r\nimport { useImageEmptyViewStyle } from '../../styles';\r\n\r\nexport const ImageEmptyView = ({ i18n, isSearchResult }) => {\r\n const classes = useImageEmptyViewStyle(); // Correct placement of classes initialization\r\n\r\n return (\r\n
    \r\n
    \r\n \"Empty\r\n
    \r\n
    \r\n {isSearchResult ? i18n.getString(_TL_('No images match your search. Please try again.')) : i18n.getString(_TL_('You haven\\'t added any images yet. Choose from the options above to add images.'))}\r\n
    \r\n
    \r\n );\r\n};\r\n\r\nImageEmptyView.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n isSearchResult: PropTypes.bool,\r\n};\r\n\r\nImageEmptyView.defaultProps = {\r\n isSearchResult: false,\r\n};\r\n","import _ from 'underscore';\r\nimport { mergeClasses } from '@fluentui/react-components';\r\nimport React, { useEffect, useState, useCallback, useContext, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n FolderAssetType,\r\n AdsStudioSpinner,\r\n FilterContext,\r\n ImagesFilterBar,\r\n useAdsStudioServices,\r\n} from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { Overlay } from '@bingads-webui-react/fabric-control';\r\nimport { usePageActiveTimeTracker } from '@bingads-webui-campaign-react/common-hooks';\r\n\r\nimport { ImagesTopBannerComponent, ImageGridView, ImageEmptyView } from './components';\r\nimport { useImagesPageStyle } from '../styles';\r\n\r\nconst ImagesPage = ({\r\n i18n,\r\n aid,\r\n cid,\r\n oDataConfig,\r\n dataService,\r\n notificationApi,\r\n logger,\r\n navigation,\r\n adsStudioUserPreferences,\r\n isAdsStudioAIGCMVPEnabled,\r\n isAIGCRegionRestricted,\r\n reload,\r\n pagePerfMarker: imagePagePerfMarker,\r\n setDataLoaded,\r\n permissions,\r\n}) => {\r\n const classes = useImagesPageStyle();\r\n\r\n const {\r\n totalAssetCount,\r\n loadData,\r\n } = dataService;\r\n\r\n const cropDataService = useAdsStudioServices();\r\n\r\n const [isPageInited, setPageInited] = useState(false);\r\n const [loadingData, setLoadingData] = useState(false);\r\n\r\n const { filterBar } = useContext(FilterContext);\r\n\r\n const {\r\n searchText = '',\r\n sortBy = null,\r\n } = useMemo(() => filterBar.getFilters(), [filterBar]);\r\n\r\n const onFailedToLoadData = useCallback(() => {\r\n notificationApi.showWarning(i18n.getString(_TL_('Failed to load images. Please refresh the page and try again.')));\r\n }, [i18n, notificationApi]);\r\n\r\n // init page\r\n useEffect(() => {\r\n if (!isPageInited) {\r\n setPageInited(true);\r\n }\r\n }, [isPageInited]);\r\n\r\n usePageActiveTimeTracker(logger, 'Image');\r\n\r\n // load data for initial page load\r\n useEffect(() => {\r\n if (!isPageInited) {\r\n // wait until page is initialized\r\n return;\r\n }\r\n\r\n if (reload) { // Important! Add a trivial log so that reload will be an explicit dep.\r\n logger.logTrace('force to reload');\r\n }\r\n imagePagePerfMarker.willFetchData();\r\n setLoadingData(true);\r\n loadData({\r\n assetTypeFilter: FolderAssetType.Image,\r\n isGlobalSearch: true,\r\n isSemanticSearch: true,\r\n searchText,\r\n sortBy,\r\n perfMarker: imagePagePerfMarker.createChild('imagePageLoadData'),\r\n })\r\n .catch(() => {\r\n onFailedToLoadData();\r\n }).finally(() => {\r\n setLoadingData(false);\r\n imagePagePerfMarker.willRender();\r\n if (setDataLoaded) {\r\n setDataLoaded();\r\n }\r\n });\r\n }, [isPageInited, loadData, onFailedToLoadData, searchText, sortBy, reload, logger]);\r\n\r\n const isPageLoading = !isPageInited || loadingData;\r\n\r\n return (\r\n
    \r\n {isPageLoading && (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n {\r\n totalAssetCount && totalAssetCount > 0 ?\r\n :\r\n \r\n }\r\n
    \r\n );\r\n};\r\n\r\nImagesPage.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n dataService: PropTypes.shape({}),\r\n notificationApi: PropTypes.shape({}),\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n }).isRequired,\r\n aid: PropTypes.number.isRequired,\r\n cid: PropTypes.number.isRequired,\r\n oDataConfig: PropTypes.shape({}).isRequired,\r\n adsStudioUserPreferences: PropTypes.shape({}),\r\n reload: PropTypes.shape({}),\r\n navigation: PropTypes.shape({}).isRequired,\r\n isAIGCRegionRestricted: PropTypes.bool,\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({}),\r\n }),\r\n};\r\n\r\nImagesPage.defaultProps = {\r\n dataService: {},\r\n notificationApi: {},\r\n adsStudioUserPreferences: undefined,\r\n reload: null,\r\n isAIGCRegionRestricted: false,\r\n permissions: { dynamic: {} },\r\n};\r\n\r\nexport const ImagesPageComponent = ImagesPage;\r\n","export const actionTypes = {\r\n updateImages: 'UPDATE_IMAGES',\r\n updateLogos: 'UPDATE_LOGOS',\r\n updateColors: 'UPDATE_COLORS',\r\n updateFonts: 'UPDATE_FONTS',\r\n updateTaglines: 'UPDATE_TAGLINES',\r\n updateBrandVoice: 'UPDATE_BRAND_VOICE',\r\n upDateBrandTones: 'UPDATE_BRAND_TONES',\r\n setData: 'SET_BRAND_KIT_DATA',\r\n};\r\n\r\n/* istanbul ignore next */\r\nexport function reducer(state, action) {\r\n const { type, payload } = action;\r\n\r\n switch (type) {\r\n case actionTypes.updateImages:\r\n return {\r\n ...state,\r\n images: payload,\r\n };\r\n case actionTypes.updateLogos:\r\n return {\r\n ...state,\r\n logos: payload,\r\n };\r\n case actionTypes.updateColors:\r\n return {\r\n ...state,\r\n colors: payload,\r\n };\r\n case actionTypes.updateFonts:\r\n return {\r\n ...state,\r\n fonts: payload,\r\n };\r\n case actionTypes.updateTaglines:\r\n return {\r\n ...state,\r\n taglines: payload,\r\n };\r\n case actionTypes.updateBrandVoice:\r\n return {\r\n ...state,\r\n brandVoice: payload,\r\n };\r\n case actionTypes.upDateBrandTones:\r\n return {\r\n ...state,\r\n brandTones: payload,\r\n };\r\n case actionTypes.setData:\r\n return {\r\n ...state,\r\n ...payload,\r\n };\r\n default:\r\n return state;\r\n }\r\n}\r\n","import React from 'react';\r\nimport {\r\n Body1,\r\n tokens,\r\n Subtitle1,\r\n makeStyles,\r\n mergeClasses,\r\n} from '@fluentui/react-components';\r\nimport { EntryCardSVGIcons } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n },\r\n});\r\n\r\nconst WarningDialogueContent = ({ i18n }) => {\r\n const classes = useStyles();\r\n return (\r\n
    \r\n \r\n
    \r\n \r\n {i18n.getString(_TL_('Creating a new brand kit will delete the old kit from the Ad Studio'))}\r\n \r\n \r\n {i18n.getString(_TL_('You can only create and save one brand kit in Ad Studio'))}\r\n \r\n
    \r\n
    \r\n );\r\n};\r\n\r\nexport { WarningDialogueContent };\r\n","import {\r\n makeStyles,\r\n shorthands,\r\n tokens,\r\n typographyStyles,\r\n} from '@fluentui/react-components';\r\n\r\nexport const useCommonDialogueStyles = makeStyles({\r\n container: {\r\n ...typographyStyles.body1,\r\n ...shorthands.overflow('hidden'),\r\n ...shorthands.padding(tokens.spacingVerticalL, tokens.spacingHorizontalXXL),\r\n },\r\n header: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n columnGap: tokens.spacingHorizontalL,\r\n '& > div': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n columnGap: tokens.spacingHorizontalS,\r\n },\r\n },\r\n horizontalDivider: {\r\n width: '100%',\r\n ...shorthands.margin(tokens.spacingVerticalS, tokens.spacingHorizontalNone),\r\n },\r\n dialogueContentContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n ...shorthands.gap(tokens.spacingHorizontalNone, tokens.spacingVerticalL),\r\n },\r\n dismissIcon: {\r\n cursor: 'pointer',\r\n },\r\n searchBoxWrapper: {\r\n ...shorthands.flex(1),\r\n position: 'relative',\r\n minHeight: '90px',\r\n ...shorthands.borderRadius(tokens.borderRadiusXLarge),\r\n },\r\n searchBox: {\r\n width: '100%',\r\n height: '100%',\r\n ...shorthands.gap(tokens.spacingVerticalS, tokens.spacingHorizontalS),\r\n ...shorthands.borderRadius(tokens.borderRadiusXLarge),\r\n\r\n '&::after': {\r\n paddingTop: tokens.spacingVerticalS,\r\n borderBottomRightRadius: tokens.borderRadiusXLarge,\r\n borderBottomLeftRadius: tokens.borderRadiusXLarge,\r\n },\r\n },\r\n loadingText: {\r\n marginBlockEnd: '0',\r\n color: tokens.colorNeutralStroke1,\r\n marginBlockStart: tokens.spacingVerticalXXL,\r\n },\r\n loadingContainer: {\r\n position: 'absolute',\r\n bottom: '0',\r\n left: '0',\r\n right: '0',\r\n width: '100%',\r\n zIndex: '1',\r\n },\r\n footer: {\r\n marginTop: tokens.spacingVerticalS,\r\n },\r\n warningFooter: {\r\n gridColumnEnd: 'auto',\r\n gridColumnStart: 'auto',\r\n justifySelf: 'start',\r\n },\r\n});\r\n\r\nexport const useCreateWithWebsiteDialogueStyles = makeStyles({\r\n domainInputWrapper: {\r\n width: '100%',\r\n },\r\n suggestionErrorInvalid: {\r\n marginTop: tokens.spacingVerticalXS,\r\n ...typographyStyles.caption1,\r\n },\r\n});\r\n","import PropTypes, { func } from 'prop-types';\r\nimport React from 'react';\r\nimport {\r\n AddAssetEntryCard,\r\n EntryCardSVGIcons,\r\n DomainInputView,\r\n} from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport {\r\n Dialog,\r\n DialogTrigger,\r\n DialogSurface,\r\n DialogTitle,\r\n DialogBody,\r\n DialogActions,\r\n DialogContent,\r\n Button,\r\n Field,\r\n Textarea,\r\n mergeClasses,\r\n ProgressBar,\r\n Subtitle2,\r\n Divider,\r\n Body2,\r\n tokens,\r\n} from '@fluentui/react-components';\r\nimport { Dismiss20Regular, StyleGuide24Regular } from '@fluentui/react-icons';\r\nimport { isValidUrl } from '@bingads-webui/url-util';\r\nimport { WarningDialogueContent } from './warning-dialogue-content';\r\nimport {\r\n useCommonDialogueStyles,\r\n useCreateWithWebsiteDialogueStyles,\r\n} from './style';\r\n\r\nconst CreateWithWebsiteDialogueContent = ({\r\n i18n,\r\n isValidDomain,\r\n onChangeValidDomain,\r\n brandKitCreationPayload,\r\n isNewBrandCreateWarningEnabled,\r\n onChangeBrandKitCreationPayload,\r\n}) => {\r\n const commonClasses = useCommonDialogueStyles();\r\n const dialogueClasses = useCreateWithWebsiteDialogueStyles();\r\n\r\n const handleDomainChange = (domain) => {\r\n onChangeBrandKitCreationPayload({\r\n ...brandKitCreationPayload,\r\n domain,\r\n });\r\n onChangeValidDomain(isValidUrl(domain));\r\n };\r\n\r\n const handleDescriptionChange = (e) => {\r\n onChangeBrandKitCreationPayload({\r\n ...brandKitCreationPayload,\r\n description: e.target.value,\r\n });\r\n };\r\n\r\n if (isNewBrandCreateWarningEnabled) {\r\n return ;\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\n );\r\n};\r\n\r\nCreateWithWebsiteDialogueContent.propTypes = {\r\n i18n: PropTypes.shape({ getString: func }).isRequired,\r\n isValidDomain: PropTypes.bool.isRequired,\r\n onChangeValidDomain: PropTypes.func.isRequired,\r\n brandKitCreationPayload: PropTypes.shape({\r\n domain: PropTypes.string,\r\n description: PropTypes.string,\r\n }).isRequired,\r\n onChangeBrandKitCreationPayload: PropTypes.func.isRequired,\r\n isNewBrandCreateWarningEnabled: PropTypes.bool.isRequired,\r\n};\r\n\r\nconst CreateWithWebsiteDialogue = ({\r\n i18n,\r\n onCreateBrandKit,\r\n disableNewBrandKitWarning,\r\n isBrandKitCreationInProgress,\r\n}) => {\r\n const commonClasses = useCommonDialogueStyles();\r\n const [isDialogueOpen, setIsDialogueOpen] = React.useState(false);\r\n const [\r\n isNewBrandCreateWarningEnabled,\r\n setNewBrandCreateWarningEnabled,\r\n ] = React.useState(!disableNewBrandKitWarning);\r\n const [isValidDomain, setIsValidDomain] = React.useState(true);\r\n const [brandKitCreationPayload, setBrandKitCreationPayload] = React.useState({\r\n domain: '',\r\n description: '',\r\n });\r\n\r\n const handleDialogueOpenChange = (dialogueData) => {\r\n setIsDialogueOpen(dialogueData.open);\r\n if (!dialogueData.open) {\r\n setBrandKitCreationPayload({\r\n domain: '',\r\n description: '',\r\n });\r\n setNewBrandCreateWarningEnabled(true);\r\n }\r\n };\r\n\r\n const handleCreateBrandKit = () => {\r\n if (!brandKitCreationPayload.domain || !isValidDomain) {\r\n return;\r\n }\r\n onCreateBrandKit(brandKitCreationPayload);\r\n console.info('Creating brand kit with payload:', brandKitCreationPayload);\r\n };\r\n\r\n return (\r\n handleDialogueOpenChange(data)}>\r\n \r\n setIsDialogueOpen(true)}\r\n cardClassName=\"create-with-website-card\"\r\n description={i18n.getString(_TL_('Create with Website'))}\r\n title={i18n.getString(_TL_('Enter your URL'))}\r\n imageSrc={EntryCardSVGIcons.WebsiteSVGIcon}\r\n isFillWidth\r\n />\r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n \r\n \r\n {isNewBrandCreateWarningEnabled\r\n ? i18n.getString(_TL_('Create New Brand Kit'))\r\n : i18n.getString(_TL_('Create Brand Kit with URL'))}\r\n \r\n
    \r\n \r\n \r\n \r\n
    \r\n \r\n
    \r\n \r\n \r\n {isBrandKitCreationInProgress && (\r\n <>\r\n \r\n {i18n.getString(_TL_('Finding brand elements...'))}\r\n \r\n
    \r\n \r\n
    \r\n \r\n )}\r\n
    \r\n \r\n {isNewBrandCreateWarningEnabled ? (\r\n setNewBrandCreateWarningEnabled(false)}\r\n >\r\n {i18n.getString(_TL_('Create new kit'))}\r\n \r\n ) : (\r\n \r\n {i18n.getString(_TL_('Create'))}\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\nexport { CreateWithWebsiteDialogue };\r\n\r\nCreateWithWebsiteDialogue.propTypes = {\r\n i18n: PropTypes.shape({ getString: func }).isRequired,\r\n disableNewBrandKitWarning: PropTypes.bool,\r\n onCreateBrandKit: PropTypes.func.isRequired,\r\n isBrandKitCreationInProgress: PropTypes.bool,\r\n};\r\n\r\nCreateWithWebsiteDialogue.defaultProps = {\r\n disableNewBrandKitWarning: false,\r\n isBrandKitCreationInProgress: false,\r\n};\r\n","import {\r\n makeStyles,\r\n shorthands,\r\n tokens,\r\n typographyStyles,\r\n} from '@fluentui/react-components';\r\nimport { btnStyle } from '@bingads-webui-campaign/shared-image-experience-styles';\r\n\r\nexport const filesPerRowInPreviewGrid = '--files-per-row-in-preview-grid';\r\n\r\nexport const getFileUploadContainerStyles = (_, { palette = {} }) => ({\r\n container: {\r\n '& .file-drag-container': {\r\n '& .hidden': {\r\n display: 'none',\r\n },\r\n '& .file-upload-button': {\r\n ...shorthands.padding(\r\n tokens.spacingVerticalNone,\r\n '48px',\r\n tokens.spacingVerticalNone,\r\n tokens.spacingHorizontalXXXL\r\n ),\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n },\r\n '& .file-picker-react-wrapper': {\r\n '& .file-picker-btn': {\r\n extend: btnStyle()['.btn-default'],\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n float: 'none',\r\n marginLeft: 0,\r\n maxWidth: '72px',\r\n overflow: 'hidden',\r\n ...typographyStyles.body1,\r\n\r\n '& ~ .file-text': {\r\n display: 'inline-block',\r\n border: 'none',\r\n },\r\n },\r\n },\r\n '& .file-picker-react-wrapper.disabled': {\r\n visibility: 'hidden',\r\n },\r\n '& .file-drag-wrapper': {\r\n height: 'fit-content',\r\n '& .file-dragger-wrapper': {\r\n boxSizing: 'border-box',\r\n padding: '12.5px 0',\r\n },\r\n '& .file-dragger': {\r\n padding: '12.5px 0',\r\n boxSizing: 'border-box',\r\n ...shorthands.border('1px'),\r\n ...shorthands.borderStyle('dashed'),\r\n ...shorthands.borderColor(palette.colorNeutralBackground1),\r\n ...shorthands.borderRadius(tokens.borderRadiusXLarge),\r\n },\r\n '& .file-default-wrapper': {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n paddingLeft: tokens.spacingHorizontalXXXL,\r\n '& .file-upload-icon': {\r\n display: 'none !important',\r\n },\r\n '& .file-upload-text': {\r\n display: 'inline-block',\r\n marginTop: '0px',\r\n },\r\n },\r\n },\r\n },\r\n },\r\n});\r\n\r\nexport const getFileUploadButtonStyles = (_, { palette = {} }) => ({\r\n button: {\r\n display: 'flex',\r\n width: 'fit-content',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n flexDirection: 'column',\r\n boxSizing: 'border-box',\r\n position: 'relative',\r\n overflow: 'hidden',\r\n ...shorthands.border('1px'),\r\n ...shorthands.borderStyle('dashed'),\r\n ...shorthands.borderColor(palette.colorNeutralBackground1),\r\n ...shorthands.borderRadius(tokens.borderRadiusXLarge),\r\n\r\n '& .file-picker-container': {\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n width: '100%',\r\n height: '100%',\r\n\r\n '& div': {\r\n height: '100%',\r\n },\r\n\r\n '& .hidden': {\r\n display: 'none',\r\n },\r\n '& .file-picker-btn': {\r\n height: '100%',\r\n cursor: 'pointer',\r\n opacity: '0.001',\r\n extend: btnStyle()['.btn-default'],\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n float: 'none',\r\n marginLeft: 0,\r\n maxWidth: '72px',\r\n overflow: 'hidden',\r\n ...typographyStyles.body1,\r\n\r\n '& ~ .file-text': {\r\n display: 'inline-block',\r\n border: 'none',\r\n },\r\n },\r\n },\r\n },\r\n});\r\n\r\nexport const useFileUploadStyles = makeStyles({\r\n filesContainer: {\r\n display: 'grid',\r\n ...shorthands.gap(tokens.spacingVerticalM, tokens.spacingHorizontalXL),\r\n gridTemplateColumns: `repeat(var(${filesPerRowInPreviewGrid}), 1fr)`,\r\n },\r\n fileContainer: {\r\n display: 'flex',\r\n maxWidth: '100%',\r\n alignItems: 'center',\r\n position: 'relative',\r\n boxShadow: tokens.shadow4,\r\n justifyContent: 'space-between',\r\n backgroundColor: tokens.colorNeutralBackground2,\r\n ...shorthands.overflow('hidden'),\r\n ...shorthands.padding(tokens.spacingVerticalS, tokens.spacingHorizontalS),\r\n ...shorthands.gap(tokens.spacingHorizontalS, tokens.spacingVerticalNone),\r\n ...shorthands.borderRadius(tokens.borderRadiusMedium),\r\n },\r\n filePreviewImageIcon: {\r\n display: 'flex',\r\n position: 'relative',\r\n ...shorthands.flex(0),\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n\r\n '& > span': {\r\n position: 'absolute',\r\n top: '50%',\r\n left: '50%',\r\n transform: 'translate(-50%, -50%)',\r\n zIndex: 1,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n backgroundColor: tokens.colorNeutralBackground2,\r\n ...shorthands.borderRadius('100%'),\r\n ...shorthands.padding(\r\n tokens.spacingVerticalXS,\r\n tokens.spacingHorizontalXS\r\n ),\r\n },\r\n },\r\n filePreviewContent: {\r\n ...shorthands.flex(1),\r\n ...shorthands.overflow('hidden'),\r\n '& > div': {\r\n ...shorthands.margin(\r\n tokens.spacingVerticalXS,\r\n tokens.spacingHorizontalNone\r\n ),\r\n },\r\n },\r\n uploadFilesButton: {\r\n display: 'flex',\r\n cursor: 'pointer',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n flexDirection: 'column',\r\n ...shorthands.padding(tokens.spacingVerticalS, tokens.spacingHorizontalS),\r\n\r\n '& span': {\r\n marginTop: tokens.spacingVerticalS,\r\n },\r\n },\r\n fileUploadError: {\r\n ...shorthands.padding(\r\n tokens.spacingVerticalS,\r\n tokens.spacingHorizontalNone,\r\n tokens.spacingVerticalNone,\r\n tokens.spacingHorizontalNone\r\n ),\r\n color: tokens.colorPaletteRedBackground3,\r\n },\r\n});\r\n","export const FILE_ERROR_TYPES = {\r\n FILE_SIZE: {\r\n type: 'fileSize',\r\n message: _TL_('File is either too large or too small'),\r\n },\r\n FILE_TYPE: {\r\n type: 'fileType',\r\n message: _TL_('File type is not allowed'),\r\n },\r\n FILE_COUNT: {\r\n type: 'fileCount',\r\n message: _TL_('Maximum number of files exceeded'),\r\n },\r\n UPLOAD_FAILED: {\r\n type: 'uploadFailed',\r\n message: _TL_('File upload failed'),\r\n },\r\n};\r\n\r\nexport const DEFAULT_MAX_SIZE = 1 * 1024 * 1024;\r\n\r\nexport const LegacyStringMap = {\r\n FilePicker_ButtonText_ChooseFile: _TL_('Browse'),\r\n FilePicker_ButtonText_RemoveFile: _TL_('Remove'),\r\n FilePicker_FileExtensionInvalid: _TL_('File extension is invalid'),\r\n FilePicker_FileInvalid: _TL_('File is invalid'),\r\n};\r\n","/* istanbul ignore file */\r\n\r\nimport { Promise } from 'bluebird';\r\nimport { uniqueId } from 'underscore';\r\nimport { FILE_ERROR_TYPES, DEFAULT_MAX_SIZE } from './constants';\r\n\r\nexport function validateFiles({\r\n files,\r\n minFileSize = 0,\r\n allowedTypes = [],\r\n maxFileSize = DEFAULT_MAX_SIZE,\r\n}) {\r\n return new Promise((resolve) => {\r\n const validationResult = {\r\n files: [],\r\n hasError: false,\r\n };\r\n for (let i = 0; i < files.length; i += 1) {\r\n const file = files[i];\r\n file.id = uniqueId('file-');\r\n const fileTypesToCheck = allowedTypes.map(type =>\r\n type.replace('.', '').toLowerCase());\r\n const fileType = file.type.includes('/')\r\n ? file.type.split('/')[1].toLowerCase()\r\n : file.type.toLowerCase();\r\n if (!fileTypesToCheck.includes(fileType)) {\r\n file.errorType = FILE_ERROR_TYPES.FILE_TYPE.type;\r\n file.message = FILE_ERROR_TYPES.FILE_TYPE.message;\r\n validationResult.files.push(file);\r\n validationResult.hasError = true;\r\n } else if (file.size > maxFileSize || file.size < minFileSize) {\r\n file.errorType = FILE_ERROR_TYPES.FILE_SIZE.type;\r\n file.message = FILE_ERROR_TYPES.FILE_SIZE.message;\r\n validationResult.files.push(file);\r\n validationResult.hasError = true;\r\n } else {\r\n file.message = _TL_('File is valid');\r\n validationResult.files.push(file);\r\n }\r\n }\r\n resolve(validationResult);\r\n });\r\n}\r\n\r\nfunction getLocalizedFileSizeTextsBySize(fileSize, i18n) {\r\n return [\r\n i18n.getString(_TL_('{{fileSize}} Bytes'), { fileSize }),\r\n i18n.getString(_TL_('{{fileSize}} KB'), { fileSize }),\r\n i18n.getString(_TL_('{{fileSize}} MB'), { fileSize }),\r\n i18n.getString(_TL_('{{fileSize}} GB'), { fileSize }),\r\n i18n.getString(_TL_('{{fileSize}} TB'), { fileSize }),\r\n i18n.getString(_TL_('{{fileSize}} PB'), { fileSize }),\r\n i18n.getString(_TL_('{{fileSize}} EB'), { fileSize }),\r\n i18n.getString(_TL_('{{fileSize}} ZB'), { fileSize }),\r\n i18n.getString(_TL_('{{fileSize}} YB'), { fileSize }),\r\n ];\r\n}\r\n\r\nexport function formatFileSize(bytes, decimals = 2, i18n) {\r\n if (bytes === 0) return i18n.getString(_TL_('0 Bytes'));\r\n const k = 1024;\r\n const dm = decimals < 0 ? 0 : decimals;\r\n const sizeUnitIndex = Math.floor(Math.log(bytes) / Math.log(k));\r\n const formattedFileSize = i18n.formatDecimal(bytes / (k ** sizeUnitIndex), {\r\n maximumFractionDigits: dm,\r\n minimumFractionDigits: 0,\r\n });\r\n const localizedFileSizeTexts = getLocalizedFileSizeTextsBySize(\r\n formattedFileSize,\r\n i18n\r\n );\r\n return localizedFileSizeTexts[sizeUnitIndex];\r\n}\r\n\r\nconst mockFileUploadAPI = () =>\r\n new Promise((resolve, reject) => {\r\n const shouldReject = Math.random() > 0.5;\r\n setTimeout(() => {\r\n if (shouldReject) {\r\n reject(new Error(_TL_('Upload Error. Failed to upload file')));\r\n } else {\r\n resolve();\r\n }\r\n }, 2000);\r\n });\r\n\r\nexport async function uploadFiles(filesToUpload) {\r\n const uploadFile = async (file) => {\r\n try {\r\n await mockFileUploadAPI(file);\r\n // eslint-disable-next-line no-param-reassign\r\n file.uploaded = true;\r\n // eslint-disable-next-line no-param-reassign\r\n file.message = _TL_('File uploaded successfully');\r\n } catch (error) {\r\n // eslint-disable-next-line no-param-reassign\r\n file.uploaded = false;\r\n // eslint-disable-next-line no-param-reassign\r\n file.errorType = FILE_ERROR_TYPES.UPLOAD_FAILED.type;\r\n // eslint-disable-next-line no-param-reassign\r\n file.message =\r\n error.message || FILE_ERROR_TYPES.UPLOAD_FAILED.message;\r\n }\r\n return file;\r\n };\r\n\r\n const updatedFiles = await Promise.all(filesToUpload.map(file => uploadFile(file)));\r\n return updatedFiles;\r\n}\r\n","/* istanbul ignore file */\r\n\r\nimport PropTypes, { func } from 'prop-types';\r\nimport React, { useCallback } from 'react';\r\n\r\nimport {\r\n Delete16Regular,\r\n AddSquare24Regular,\r\n ErrorCircle20Regular,\r\n CheckmarkCircle20Regular,\r\n} from '@fluentui/react-icons';\r\nimport { Stack } from '@bingads-webui-react/fabric-control';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { FilePicker } from '@bingads-webui-campaign-react/upload-file-picker';\r\nimport {\r\n Button,\r\n ProgressBar,\r\n Text,\r\n tokens,\r\n Tooltip,\r\n} from '@fluentui/react-components';\r\nimport { EntryCardSVGIcons } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { ValidationStringMap } from '@bingads-webui/validation-string-map';\r\nimport { buildLegacyI18n } from '@bingads-webui/build-legacy-i18n';\r\n\r\nimport {\r\n useFileUploadStyles,\r\n filesPerRowInPreviewGrid,\r\n getFileUploadButtonStyles,\r\n getFileUploadContainerStyles,\r\n} from './style';\r\nimport { LegacyStringMap } from './constants';\r\nimport { formatFileSize, uploadFiles, validateFiles } from './utils';\r\n\r\nconst FilePreview = ({\r\n i18n,\r\n file,\r\n progress,\r\n onDeleteFile,\r\n}) => {\r\n const classes = useFileUploadStyles();\r\n const hasError = !!file.errorType;\r\n const uploadTried = typeof file.uploaded === 'boolean';\r\n\r\n return (\r\n
    \r\n \r\n
    \r\n \"file-icon\"\r\n \r\n {uploadTried && hasError ? (\r\n \r\n ) : null}\r\n {uploadTried && !hasError ? (\r\n \r\n ) : null}\r\n \r\n
    \r\n
    \r\n
    \r\n \r\n {file.name}\r\n \r\n \r\n {formatFileSize(file.size, 2, i18n)}\r\n
    \r\n onDeleteFile(file)}\r\n icon={}\r\n />\r\n
    \r\n );\r\n};\r\n\r\nFilePreview.propTypes = {\r\n i18n: PropTypes.shape({ getString: func }).isRequired,\r\n file: PropTypes.shape({\r\n id: PropTypes.string,\r\n type: PropTypes.string,\r\n name: PropTypes.string,\r\n size: PropTypes.number,\r\n uploaded: PropTypes.bool,\r\n message: PropTypes.string,\r\n errorType: PropTypes.string,\r\n }).isRequired,\r\n onDeleteFile: PropTypes.func,\r\n progress: PropTypes.number,\r\n};\r\n\r\nFilePreview.defaultProps = {\r\n progress: 0,\r\n onDeleteFile: () => {},\r\n};\r\n\r\nexport const FileUpload = ({\r\n i18n,\r\n maxFileSize,\r\n minFileSize,\r\n allowedTypes,\r\n dragOrDropTip,\r\n disableAddMore,\r\n dragOrDropLabel,\r\n onFilesUploaded,\r\n previewFilesPerRow,\r\n maxFilesCountAllowed,\r\n dragOrDropDescription,\r\n}) => {\r\n const classes = useFileUploadStyles();\r\n const fileUploadContainerClasses = useDefaultStyles(getFileUploadContainerStyles);\r\n const fileUploadButtonClasses = useDefaultStyles(getFileUploadButtonStyles);\r\n const [files, setFiles] = React.useState([]);\r\n const [uploadError, setUploadError] = React.useState('');\r\n\r\n const legacyI18n = buildLegacyI18n(i18n, [...[ValidationStringMap], ...[LegacyStringMap]]);\r\n\r\n const handleDeleteFile = useCallback(\r\n (fileToDelete) => {\r\n setFiles((prevFiles) => {\r\n const updatedFiles = prevFiles.filter(file => file.id !== fileToDelete.id);\r\n onFilesUploaded(updatedFiles);\r\n return updatedFiles;\r\n });\r\n },\r\n [onFilesUploaded]\r\n );\r\n\r\n const handleFilesUpload = useCallback(\r\n async (filesToUpload) => {\r\n try {\r\n const updatedFiles = await uploadFiles(filesToUpload);\r\n setFiles((prevFiles) => {\r\n const updatedFilesArray = [...prevFiles];\r\n updatedFiles.forEach((updatedFile) => {\r\n const fileIndex = updatedFilesArray.findIndex(file => file.id === updatedFile.id);\r\n if (fileIndex > -1) {\r\n updatedFilesArray[fileIndex] = updatedFile;\r\n } else {\r\n updatedFilesArray.push(updatedFile);\r\n }\r\n });\r\n onFilesUploaded(updatedFilesArray);\r\n return updatedFilesArray;\r\n });\r\n } catch (error) {\r\n setUploadError(error.message || _TL_('Failed to upload files'));\r\n }\r\n },\r\n [onFilesUploaded]\r\n );\r\n\r\n const onFileRead = useCallback(\r\n async (fileSources) => {\r\n try {\r\n if (!fileSources || !fileSources.length) {\r\n throw new Error(_TL_('No files selected'));\r\n }\r\n const filesToUploadCount = Math.min(\r\n maxFilesCountAllowed,\r\n fileSources.length\r\n );\r\n const fileSourcesArray = Array.from(fileSources);\r\n const filesToUpload = fileSourcesArray.slice(0, filesToUploadCount);\r\n if (\r\n typeof minFileSize === 'number' ||\r\n typeof maxFileSize === 'number'\r\n ) {\r\n const validationResult = await validateFiles({\r\n files: filesToUpload,\r\n maxFileSize,\r\n minFileSize,\r\n allowedTypes,\r\n });\r\n setFiles(prev => [...prev, ...validationResult.files]);\r\n handleFilesUpload(validationResult.files);\r\n }\r\n } catch (error) {\r\n setUploadError(error.message);\r\n }\r\n },\r\n [\r\n setUploadError,\r\n maxFilesCountAllowed,\r\n maxFileSize,\r\n minFileSize,\r\n allowedTypes,\r\n handleFilesUpload,\r\n ]\r\n );\r\n\r\n const onError = useCallback((error) => {\r\n setUploadError(error.join(', '));\r\n }, []);\r\n\r\n return (\r\n \r\n \r\n {files.length ? (\r\n \r\n {files.map((file, index) => (\r\n \r\n ))}\r\n {maxFilesCountAllowed > 1 && !disableAddMore ? (\r\n
    \r\n
    \r\n \r\n {i18n.getString(_TL_('Add more'))}\r\n
    \r\n \r\n
    \r\n ) : null}\r\n
    \r\n ) : (\r\n 1}\r\n fileDraggerTip={i18n.getString(dragOrDropTip)}\r\n fileDraggerLabel={i18n.getString(dragOrDropLabel)}\r\n fileDraggerDropDescription={i18n.getString(dragOrDropDescription)}\r\n />\r\n )}\r\n \r\n {uploadError ? (\r\n \r\n {i18n.getString(uploadError)}\r\n \r\n ) : null}\r\n \r\n );\r\n};\r\n\r\nFileUpload.propTypes = {\r\n i18n: PropTypes.shape({ getString: func }).isRequired,\r\n maxFilesCountAllowed: PropTypes.number,\r\n minFileSize: PropTypes.number,\r\n maxFileSize: PropTypes.number,\r\n disableAddMore: PropTypes.bool,\r\n previewFilesPerRow: PropTypes.number,\r\n allowedTypes: PropTypes.arrayOf(PropTypes.string),\r\n dragOrDropLabel: PropTypes.string,\r\n dragOrDropTip: PropTypes.string,\r\n dragOrDropDescription: PropTypes.string,\r\n onFilesUploaded: PropTypes.func.isRequired,\r\n};\r\n\r\nFileUpload.defaultProps = {\r\n maxFilesCountAllowed: 1,\r\n previewFilesPerRow: 1,\r\n minFileSize: 0,\r\n maxFileSize: 10 * 1024 * 1024,\r\n dragOrDropTip: '',\r\n allowedTypes: ['*/*'],\r\n disableAddMore: false,\r\n dragOrDropDescription: _TL_('Drop your files to upload'),\r\n dragOrDropLabel: _TL_('Upload or drag and drop your files here.'),\r\n};\r\n","import React from 'react';\r\nimport PropTypes, { func } from 'prop-types';\r\n\r\nimport {\r\n Dialog,\r\n DialogTrigger,\r\n DialogSurface,\r\n DialogTitle,\r\n DialogBody,\r\n DialogActions,\r\n DialogContent,\r\n Button,\r\n Field,\r\n Textarea,\r\n mergeClasses,\r\n ProgressBar,\r\n Divider,\r\n Subtitle2,\r\n Body2,\r\n tokens,\r\n} from '@fluentui/react-components';\r\nimport {\r\n AddAssetEntryCard,\r\n EntryCardSVGIcons,\r\n} from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { Dismiss20Regular, StyleGuide24Regular } from '@fluentui/react-icons';\r\n\r\nimport { useCommonDialogueStyles } from './style';\r\nimport { FileUpload } from '../../../file-upload';\r\nimport { WarningDialogueContent } from './warning-dialogue-content';\r\n\r\nconst UploadBrandGuideDialogueContent = ({\r\n i18n,\r\n brandKitCreationPayload,\r\n isNewBrandCreateWarningEnabled,\r\n onChangeBrandKitCreationPayload,\r\n}) => {\r\n const commonClasses = useCommonDialogueStyles();\r\n\r\n const handleDescriptionChange = (e) => {\r\n onChangeBrandKitCreationPayload({\r\n ...brandKitCreationPayload,\r\n description: e.target.value,\r\n });\r\n };\r\n\r\n const handleFilesUpload = (files) => {\r\n onChangeBrandKitCreationPayload({\r\n ...brandKitCreationPayload,\r\n files,\r\n });\r\n };\r\n\r\n if (isNewBrandCreateWarningEnabled) {\r\n return ;\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\n );\r\n};\r\n\r\nUploadBrandGuideDialogueContent.propTypes = {\r\n i18n: PropTypes.shape({ getString: func }).isRequired,\r\n brandKitCreationPayload: PropTypes.shape({\r\n files: PropTypes.arrayOf(PropTypes.shape({})),\r\n description: PropTypes.string,\r\n }).isRequired,\r\n onChangeBrandKitCreationPayload: PropTypes.func.isRequired,\r\n isNewBrandCreateWarningEnabled: PropTypes.bool.isRequired,\r\n};\r\n\r\nconst UploadBrandGuideDialogue = ({\r\n i18n,\r\n onCreateBrandKit,\r\n disableNewBrandKitWarning,\r\n isBrandKitCreationInProgress,\r\n}) => {\r\n const commonClasses = useCommonDialogueStyles();\r\n const [isDialogueOpen, setIsDialogueOpen] = React.useState(false);\r\n const [\r\n isNewBrandCreateWarningEnabled,\r\n setNewBrandCreateWarningEnabled,\r\n ] = React.useState(!disableNewBrandKitWarning);\r\n const [brandKitCreationPayload, setBrandKitCreationPayload] = React.useState({\r\n files: [],\r\n description: '',\r\n });\r\n\r\n const handleDialogueOpenChange = (dialogueData) => {\r\n setIsDialogueOpen(dialogueData.open);\r\n if (!dialogueData.open) {\r\n setBrandKitCreationPayload({\r\n files: [],\r\n description: '',\r\n });\r\n setNewBrandCreateWarningEnabled(true);\r\n }\r\n };\r\n\r\n const handleCreateBrandKit = () => {\r\n if (brandKitCreationPayload.files.length === 0) {\r\n return;\r\n }\r\n onCreateBrandKit(brandKitCreationPayload);\r\n console.info('Creating brand kit with payload:', brandKitCreationPayload);\r\n };\r\n\r\n return (\r\n handleDialogueOpenChange(data)}>\r\n \r\n setIsDialogueOpen(true)}\r\n description={i18n.getString(_TL_('Upload Brand Guidance File'))}\r\n title={i18n.getString(_TL_('Create with Brand Guide'))}\r\n imageSrc={EntryCardSVGIcons.UploadSVGIcon}\r\n isFillWidth\r\n />\r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n \r\n \r\n {isNewBrandCreateWarningEnabled\r\n ? i18n.getString(_TL_('Create New Brand Kit'))\r\n : i18n.getString(_TL_('Create Brand Kit with Brand Documentation'))}\r\n \r\n
    \r\n \r\n \r\n \r\n
    \r\n \r\n
    \r\n \r\n \r\n {isBrandKitCreationInProgress && (\r\n <>\r\n \r\n {i18n.getString(_TL_('Finding brand elements...'))}\r\n \r\n
    \r\n \r\n
    \r\n \r\n )}\r\n
    \r\n \r\n {isNewBrandCreateWarningEnabled ? (\r\n setNewBrandCreateWarningEnabled(false)}\r\n >\r\n {i18n.getString(_TL_('Create new kit'))}\r\n \r\n ) : (\r\n \r\n {i18n.getString(_TL_('Create'))}\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\nexport { UploadBrandGuideDialogue };\r\n\r\nUploadBrandGuideDialogue.propTypes = {\r\n i18n: PropTypes.shape({ getString: func }).isRequired,\r\n disableNewBrandKitWarning: PropTypes.bool,\r\n onCreateBrandKit: PropTypes.func.isRequired,\r\n isBrandKitCreationInProgress: PropTypes.bool,\r\n};\r\n\r\nUploadBrandGuideDialogue.defaultProps = {\r\n disableNewBrandKitWarning: false,\r\n isBrandKitCreationInProgress: false,\r\n};\r\n","import React from 'react';\r\nimport {\r\n AddAssetEntryCard,\r\n EntryCardSVGIcons,\r\n} from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n\r\nconst CreateManuallyAction = ({ i18n }) => (\r\n {}}\r\n />\r\n);\r\n\r\nexport { CreateManuallyAction };\r\n","import { makeStyles, shorthands, tokens } from '@fluentui/react-components';\r\n\r\nexport const getActionsCardsStyles = makeStyles({\r\n container: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n maxWidth: '1532px',\r\n flexDirection: 'row',\r\n justifyContent: 'start',\r\n ...shorthands.gap(tokens.spacingHorizontalL, tokens.spacingVerticalL),\r\n },\r\n cards: {\r\n ...shorthands.flex(1),\r\n },\r\n});\r\n","import PropTypes, { func } from 'prop-types';\r\nimport React from 'react';\r\nimport {\r\n CreateManuallyAction,\r\n CreateWithWebsiteDialogue,\r\n UploadBrandGuideDialogue,\r\n} from './dialogues';\r\nimport { getActionsCardsStyles } from './styles';\r\n\r\nconst BrandActionCards = ({ i18n }) => {\r\n const classes = getActionsCardsStyles();\r\n\r\n const [\r\n isBrandKitCreationInProgress,\r\n setIsBrandKitCreationInProgress,\r\n ] = React.useState(false);\r\n\r\n const handleBrandKitCreation = (brandKitCreationPayload) => {\r\n console.log(brandKitCreationPayload);\r\n setIsBrandKitCreationInProgress(true);\r\n };\r\n\r\n return (\r\n
    \r\n \r\n \r\n \r\n
    \r\n );\r\n};\r\n\r\nexport { BrandActionCards };\r\n\r\nBrandActionCards.propTypes = {\r\n i18n: PropTypes.shape({ getString: func }).isRequired,\r\n};\r\n","import {\r\n tokens,\r\n makeStyles,\r\n shorthands,\r\n typographyStyles,\r\n} from '@fluentui/react-components';\r\nimport bannerBackground from '../../image-asset/banner-background.png';\r\n\r\nexport const useBannerContainerStyles = makeStyles({\r\n bannerContainer: {\r\n width: '100%',\r\n display: 'flex',\r\n alignSelf: 'stretch',\r\n flexDirection: 'column',\r\n ...shorthands.padding('36px'),\r\n ...shorthands.borderRadius(tokens.borderRadiusXLarge),\r\n ...shorthands.gap(tokens.spacingVerticalXXL, tokens.spacingHorizontalXXL),\r\n backgroundImage: `linear-gradient(rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0.8)), url(${bannerBackground})`,\r\n backgroundSize: 'cover',\r\n 'background-position': 'right center',\r\n backgroundRepeat: 'no-repeat',\r\n ...typographyStyles.body1,\r\n },\r\n heading: {\r\n marginBlockEnd: tokens.spacingVerticalS,\r\n },\r\n});\r\n","import React from 'react';\r\nimport PropTypes, { func } from 'prop-types';\r\nimport { Body2, mergeClasses, Title2 } from '@fluentui/react-components';\r\n\r\nimport { BrandActionCards } from './action-cards';\r\nimport { useBannerContainerStyles } from './styles';\r\n\r\nconst Banner = ({ i18n, hideActionsMenu }) => {\r\n const classes = useBannerContainerStyles();\r\n\r\n return (\r\n
    \r\n
    \r\n \r\n {i18n.getString(_TL_('Brand kit'))}\r\n \r\n \r\n {i18n.getString(_TL_('Add and manage your brand identity for your ads, all in one place.'))}\r\n \r\n
    \r\n {hideActionsMenu ? null : }\r\n
    \r\n );\r\n};\r\n\r\nexport { Banner };\r\n\r\nBanner.propTypes = {\r\n i18n: PropTypes.shape({ getString: func }).isRequired,\r\n hideActionsMenu: PropTypes.bool,\r\n};\r\n\r\nBanner.defaultProps = {\r\n hideActionsMenu: false,\r\n};\r\n","import {\r\n makeStyles,\r\n shorthands,\r\n tokens,\r\n typographyStyles,\r\n} from '@fluentui/react-components';\r\n\r\nexport const useSuggestionsStyles = makeStyles({\r\n container: {\r\n width: '10%',\r\n display: 'flex',\r\n rowGap: '40px',\r\n minWidth: '295px',\r\n alignSelf: 'stretch',\r\n flexDirection: 'column',\r\n ...typographyStyles.body1,\r\n ...shorthands.overflow('hidden'),\r\n color: tokens.colorNeutralForeground1,\r\n },\r\n panel: {\r\n display: 'flex',\r\n alignItems: 'flex-start',\r\n columnGap: tokens.spacingHorizontalS,\r\n\r\n '& svg': {\r\n flexShrink: 0,\r\n marginTop: tokens.spacingVerticalS,\r\n },\r\n },\r\n panelBody: {\r\n flexWrap: 'wrap',\r\n rowGap: tokens.spacingVerticalS,\r\n marginTop: tokens.spacingVerticalS,\r\n },\r\n loadingContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n rowGap: tokens.spacingVerticalS,\r\n marginTop: tokens.spacingVerticalS,\r\n },\r\n});\r\n","import React from 'react';\r\nimport PropTypes, { func } from 'prop-types';\r\nimport { Sparkle20Regular } from '@fluentui/react-icons';\r\nimport {\r\n mergeClasses,\r\n Skeleton,\r\n SkeletonItem,\r\n Text,\r\n} from '@fluentui/react-components';\r\nimport {\r\n InteractionTag,\r\n InteractionTagPrimary,\r\n TagGroup,\r\n} from '@fluentui/react-tags';\r\n\r\nimport { useSuggestionsStyles } from './styles';\r\n\r\nconst loadingSkeletonItemCount = 5;\r\n\r\nconst SuggestionLoadingSkeleton = () => {\r\n const classes = useSuggestionsStyles();\r\n return (\r\n \r\n {Array.from({ length: loadingSkeletonItemCount }).map((_, index) => (\r\n // eslint-disable-next-line react/no-array-index-key\r\n \r\n ))}\r\n \r\n );\r\n};\r\n\r\nconst SuggestionPanel = ({\r\n title,\r\n loading,\r\n className,\r\n suggestions,\r\n}) => {\r\n const classes = useSuggestionsStyles();\r\n\r\n if (!loading && (!suggestions || suggestions.length === 0)) {\r\n return null;\r\n }\r\n\r\n return (\r\n
    \r\n \r\n
    \r\n \r\n {title}\r\n \r\n {loading ? (\r\n \r\n ) : (\r\n \r\n {suggestions.map(suggestion => (\r\n \r\n {suggestion}\r\n \r\n ))}\r\n \r\n )}\r\n
    \r\n
    \r\n );\r\n};\r\n\r\nSuggestionPanel.propTypes = {\r\n className: PropTypes.string,\r\n loading: PropTypes.bool.isRequired,\r\n title: PropTypes.string.isRequired,\r\n suggestions: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n};\r\n\r\nSuggestionPanel.defaultProps = {\r\n className: '',\r\n};\r\n\r\nexport const Suggestions = ({\r\n i18n,\r\n loading,\r\n descriptionSuggestions,\r\n shortHeadlinesSuggestions,\r\n longHeadlinesSuggestions,\r\n}) => {\r\n const classes = useSuggestionsStyles();\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nSuggestions.propTypes = {\r\n loading: PropTypes.bool,\r\n i18n: PropTypes.shape({ getString: func }).isRequired,\r\n shortHeadlinesSuggestions: PropTypes.arrayOf(PropTypes.string),\r\n longHeadlinesSuggestions: PropTypes.arrayOf(PropTypes.string),\r\n descriptionSuggestions: PropTypes.arrayOf(PropTypes.string),\r\n};\r\n\r\nSuggestions.defaultProps = {\r\n loading: false,\r\n shortHeadlinesSuggestions: [],\r\n longHeadlinesSuggestions: [],\r\n descriptionSuggestions: [],\r\n};\r\n","import {\r\n makeStyles,\r\n shorthands,\r\n tokens,\r\n typographyStyles,\r\n} from '@fluentui/react-components';\r\n\r\nexport const useTaglinesStyles = makeStyles({\r\n body: {\r\n ...typographyStyles.body1,\r\n marginTop: tokens.spacingVerticalL,\r\n color: tokens.colorNeutralForeground1,\r\n },\r\n loading: {\r\n marginBottom: tokens.spacingVerticalL,\r\n },\r\n loadingItem: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n marginBottom: tokens.spacingVerticalL,\r\n ...shorthands.gap(tokens.spacingHorizontalS, tokens.spacingHorizontalNone),\r\n },\r\n taglineItem: {\r\n display: 'flex',\r\n marginBottom: tokens.spacingVerticalL,\r\n alignItems: 'flex-start',\r\n justifyContent: 'space-between',\r\n ...shorthands.gap(tokens.spacingHorizontalS, tokens.spacingHorizontalNone),\r\n\r\n '& button:not(:disabled)': {\r\n '&:hover': {\r\n '& span': {\r\n color: `${tokens.colorPaletteRedBackground3} !important`,\r\n },\r\n },\r\n },\r\n },\r\n taglineItemInput: {\r\n display: 'flex',\r\n ...shorthands.flex(1),\r\n flexDirection: 'column',\r\n justifyContent: 'flex-end',\r\n\r\n '& span': {\r\n marginTop: tokens.spacingVerticalXXS,\r\n color: tokens.colorNeutralForeground3,\r\n },\r\n },\r\n});\r\n","import PropTypes, { func } from 'prop-types';\r\nimport React from 'react';\r\nimport {\r\n Add20Regular,\r\n Delete24Regular,\r\n} from '@fluentui/react-icons';\r\nimport {\r\n Button,\r\n Input,\r\n mergeClasses,\r\n Skeleton,\r\n SkeletonItem,\r\n Text,\r\n useId,\r\n} from '@fluentui/react-components';\r\nimport { useTaglinesStyles } from './styles';\r\n\r\nconst TaglinesLoadingSkeleton = () => {\r\n const classes = useTaglinesStyles();\r\n return (\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\nconst TaglineItem = ({\r\n i18n,\r\n tagline,\r\n onChange,\r\n onDelete,\r\n isDeleteDisabled,\r\n maxAllowedCharacters,\r\n}) => {\r\n const classes = useTaglinesStyles();\r\n const inputId = useId('tagline-input');\r\n\r\n return (\r\n
    \r\n \r\n onChange(ev.target.value)}\r\n />\r\n \r\n {i18n.getString(_TL_('{{a}} characters remaining'), {\r\n a: maxAllowedCharacters - tagline.length,\r\n })}\r\n \r\n
    \r\n }\r\n disabled={isDeleteDisabled}\r\n onClick={onDelete}\r\n />\r\n \r\n );\r\n};\r\n\r\nTaglineItem.propTypes = {\r\n i18n: PropTypes.shape({ getString: func }).isRequired,\r\n tagline: PropTypes.string,\r\n onChange: PropTypes.func,\r\n onDelete: PropTypes.func,\r\n isDeleteDisabled: PropTypes.bool,\r\n maxAllowedCharacters: PropTypes.number,\r\n};\r\n\r\nTaglineItem.defaultProps = {\r\n tagline: '',\r\n onChange: () => {},\r\n onDelete: () => {},\r\n isDeleteDisabled: false,\r\n maxAllowedCharacters: 30,\r\n};\r\n\r\nexport const Taglines = ({\r\n i18n,\r\n loading,\r\n taglines,\r\n onChangeTaglines,\r\n maxAllowedTaglines,\r\n maxAllowedCharactersPerTagline,\r\n}) => {\r\n const classes = useTaglinesStyles();\r\n\r\n const isAddTaglineButtonDisabled =\r\n taglines &&\r\n (taglines.some(tagline => !tagline.length) ||\r\n (maxAllowedTaglines && taglines.length >= maxAllowedTaglines));\r\n\r\n const handleAddTagline = () => {\r\n onChangeTaglines([...taglines, '']);\r\n };\r\n\r\n const handleDeleteTagline = (index) => {\r\n const newTaglines = [...taglines];\r\n newTaglines.splice(index, 1);\r\n onChangeTaglines(newTaglines);\r\n };\r\n\r\n const handleChangeTagline = (value, index) => {\r\n if (maxAllowedTaglines && taglines.length > maxAllowedTaglines) {\r\n return;\r\n }\r\n\r\n const newTaglines = [...taglines];\r\n newTaglines[index] = value.substring(0, maxAllowedCharactersPerTagline);\r\n onChangeTaglines(newTaglines);\r\n };\r\n\r\n return (\r\n
    \r\n {loading ? (\r\n \r\n ) : (\r\n taglines.map((tagline, index) => (\r\n handleDeleteTagline(index)}\r\n maxAllowedCharacters={maxAllowedCharactersPerTagline}\r\n onChange={value => handleChangeTagline(value, index)}\r\n />\r\n ))\r\n )}\r\n }\r\n onClick={handleAddTagline}\r\n className=\"add-tagline-button\"\r\n disabled={loading || isAddTaglineButtonDisabled}\r\n >\r\n {i18n.getString(_TL_('Add Tagline'))}\r\n \r\n
    \r\n );\r\n};\r\n\r\nTaglines.propTypes = {\r\n loading: PropTypes.bool,\r\n i18n: PropTypes.shape({ getString: func }).isRequired,\r\n taglines: PropTypes.arrayOf(PropTypes.string),\r\n maxAllowedTaglines: PropTypes.number,\r\n maxAllowedCharactersPerTagline: PropTypes.number,\r\n onChangeTaglines: PropTypes.func,\r\n};\r\n\r\nTaglines.defaultProps = {\r\n taglines: [''],\r\n loading: false,\r\n maxAllowedTaglines: undefined,\r\n maxAllowedCharactersPerTagline: 30,\r\n onChangeTaglines: () => {},\r\n};\r\n","export const defaultFonts = [\r\n {\r\n Label: _TL_('Long headline'),\r\n TextAssetType: 'LongHeadline',\r\n Typeface: '',\r\n Weight: '',\r\n helpTopic: 'pop_BA_Brand_LongHeadline',\r\n helpLabel: _TL_('Learn about long headlines'),\r\n },\r\n {\r\n Label: _TL_('Short headline'),\r\n TextAssetType: 'ShortHeadline',\r\n Typeface: '',\r\n Weight: '',\r\n helpTopic: 'pop_BA_Brand_ShortHeadline ',\r\n helpLabel: _TL_('Learn about short headlines'),\r\n },\r\n {\r\n Label: _TL_('Description'),\r\n TextAssetType: 'Description',\r\n Typeface: '',\r\n Weight: '',\r\n helpTopic: 'pop_BA_Brand_Description',\r\n helpLabel: _TL_('Learn about descriptions'),\r\n },\r\n {\r\n Label: _TL_('Call to action'),\r\n TextAssetType: 'CallToAction',\r\n Typeface: '',\r\n Weight: '',\r\n helpTopic: 'pop_BA_Brand_CTA',\r\n helpLabel: _TL_('Learn about calls to action'),\r\n },\r\n];\r\n\r\nexport const overrideFontWeights = [\r\n { key: 'Normal', text: _TL_('Normal') },\r\n { key: 'Bold', text: _TL_('Bold') },\r\n];\r\n","import { makeStyles, shorthands, tokens } from '@fluentui/react-components';\r\n\r\nexport const useFontsSelectorStyles = makeStyles({\r\n sectionContainer: {\r\n marginTop: tokens.spacingVerticalL,\r\n },\r\n fontsContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n rowGap: tokens.spacingVerticalXXL,\r\n marginTop: tokens.spacingVerticalS,\r\n },\r\n fontSelectContainer: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n alignItems: 'center',\r\n columnGap: tokens.spacingHorizontalS,\r\n rowGap: tokens.spacingVerticalS,\r\n },\r\n fontSelect: {\r\n minWidth: '330px',\r\n },\r\n fontWeightSelect: {\r\n '& > input': {\r\n maxWidth: '100px',\r\n },\r\n },\r\n fontSelectContainerHeader: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n ...shorthands.gap(tokens.spacingHorizontalS),\r\n },\r\n});\r\n","import React from 'react';\r\nimport PropTypes, { func } from 'prop-types';\r\nimport {\r\n Body1Strong,\r\n Body1Stronger,\r\n mergeClasses,\r\n} from '@fluentui/react-components';\r\nimport { HelpButton } from '@bingads-webui-react/help-popup';\r\nimport {\r\n FontsFamilySelector,\r\n FontsWeightSelector,\r\n fontFamilies,\r\n} from '@bingads-webui-campaign-react/fonts-selector';\r\n\r\nimport { defaultFonts, overrideFontWeights } from './constants';\r\nimport { useFontsSelectorStyles } from './styles';\r\n\r\nconst defaultFont = fontFamilies[0].key;\r\nconst defaultFontWeight = overrideFontWeights[0].key;\r\n\r\nconst FontSelector = ({\r\n id,\r\n i18n,\r\n font,\r\n onChangeFont,\r\n onChangeWeight,\r\n}) => {\r\n const classes = useFontsSelectorStyles();\r\n\r\n return (\r\n
    \r\n
    \r\n {i18n.getString(font.label)}\r\n {font.helpTopic && (\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\nFontSelector.propTypes = {\r\n id: PropTypes.string,\r\n i18n: PropTypes.shape({ getString: func }).isRequired,\r\n font: PropTypes.shape({\r\n label: PropTypes.string,\r\n font: PropTypes.string,\r\n weight: PropTypes.string,\r\n helpTopic: PropTypes.string,\r\n helpLabel: PropTypes.string,\r\n }),\r\n onChangeFont: PropTypes.func,\r\n onChangeWeight: PropTypes.func,\r\n};\r\n\r\nFontSelector.defaultProps = {\r\n id: '',\r\n font: {\r\n label: '',\r\n font: '',\r\n weight: '',\r\n helpTopic: '',\r\n helpLabel: '',\r\n },\r\n onChangeFont: () => {},\r\n onChangeWeight: () => {},\r\n};\r\n\r\nexport const FontsSelector = ({\r\n i18n,\r\n fonts,\r\n onChangeFonts,\r\n}) => {\r\n const classes = useFontsSelectorStyles();\r\n\r\n const fontsToRender = defaultFonts.map((font) => {\r\n const foundFont = fonts.find(f => f.TextAssetType === font.TextAssetType);\r\n return foundFont\r\n ? {\r\n ...foundFont,\r\n Label: font.Label,\r\n helpTopic: font.helpTopic,\r\n helpLabel: font.helpLabel,\r\n }\r\n : font;\r\n });\r\n\r\n const handleChangeFont = (TextAssetType, selectedFont, key) => {\r\n const updatedFonts = fontsToRender.map((font) => {\r\n if (font.TextAssetType === TextAssetType) {\r\n return {\r\n ...font,\r\n Typeface: key === 'Typeface' ? selectedFont : font.Typeface || defaultFont,\r\n Weight: key === 'Weight' ? selectedFont : font.Weight || defaultFontWeight,\r\n };\r\n }\r\n return font;\r\n }).filter(font => font.Typeface && font.Weight);\r\n onChangeFonts(updatedFonts);\r\n };\r\n\r\n return (\r\n \r\n \r\n {i18n.getString(_TL_('Choose the fonts that are associated with your brand.'))}\r\n \r\n
    \r\n {fontsToRender.map(({\r\n Label,\r\n Weight,\r\n Typeface,\r\n helpTopic,\r\n helpLabel,\r\n TextAssetType,\r\n }) => (\r\n handleChangeFont(TextAssetType, font, 'Typeface')}\r\n onChangeWeight={weight => handleChangeFont(TextAssetType, weight, 'Weight')}\r\n />\r\n ))}\r\n
    \r\n \r\n );\r\n};\r\n\r\nFontsSelector.propTypes = {\r\n fonts: PropTypes.shape(defaultFonts),\r\n onChangeFonts: PropTypes.func,\r\n i18n: PropTypes.shape({ getString: func }).isRequired,\r\n};\r\n\r\nFontsSelector.defaultProps = {\r\n fonts: defaultFonts,\r\n onChangeFonts: () => {},\r\n};\r\n","import {\r\n makeStyles,\r\n shorthands,\r\n tokens,\r\n typographyStyles\r\n} from '@fluentui/react-components';\r\n\r\nexport const useStyles = makeStyles({\r\n listPanel: {\r\n boxShadow: tokens.shadow4,\r\n ...shorthands.borderRadius(tokens.borderRadiusLarge),\r\n backgroundColor: tokens.colorNeutralBackground1,\r\n '& .card-header': {\r\n ...shorthands.borderBottom(tokens.strokeWidthThin, 'solid', tokens.colorNeutralStroke2),\r\n '& svg:first-child': {\r\n width: '24px',\r\n height: '24px',\r\n },\r\n },\r\n '& .card-title': {\r\n ...typographyStyles.subtitle2,\r\n },\r\n '& .list-body-header': {\r\n ...shorthands.margin('12px', 0),\r\n },\r\n },\r\n addBtn: {\r\n width: '94px',\r\n height: '94px',\r\n maxWidth: '94px',\r\n maxHeight: '94px',\r\n ...shorthands.borderRadius(tokens.borderRadiusLarge),\r\n ...shorthands.border(tokens.strokeWidthThin, 'dashed', '#C8C6C4'),\r\n },\r\n actionBtns: {\r\n display: 'flex',\r\n position: 'absolute',\r\n ...shorthands.gap('8px'),\r\n bottom: '10px',\r\n left: '50%',\r\n transform: 'translate(-50%, 0)',\r\n '& button': {\r\n ...shorthands.borderRadius(tokens.borderRadiusSmall),\r\n backgroundColor: tokens.colorNeutralBackground1,\r\n ...shorthands.border(tokens.strokeWidthThin, 'solid', tokens.colorNeutralStroke1),\r\n },\r\n },\r\n list: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n ...shorthands.gap('8px'),\r\n '& .list-image': {\r\n width: 'auto',\r\n position: 'relative',\r\n ...shorthands.borderRadius(tokens.borderRadiusLarge),\r\n boxShadow: tokens.shadow4,\r\n '& img': {\r\n ...shorthands.borderRadius(tokens.borderRadiusLarge),\r\n height: '94px',\r\n },\r\n },\r\n },\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: '94px',\r\n width: '94px',\r\n backgroundColor: tokens.colorNeutralStencil1,\r\n },\r\n});\r\n","import React, { useState } from 'react';\r\nimport { EditRegular, DeleteRegular } from '@fluentui/react-icons';\r\nimport { Image as FluentImage } from '@bingads-webui-react/fabric-control';\r\nimport { Button, tokens } from '@fluentui/react-components';\r\nimport { useStyles } from './style';\r\nimport { IList } from './type';\r\n\r\nexport const ListItem = React.memo(({\r\n onEdit, onRemove, imageData, index, showEditBtn,\r\n}: IList) => {\r\n const classes = useStyles();\r\n const [showActionBtn, setShowActionBtn] = useState(false);\r\n const onMouseEnter = () => {\r\n setShowActionBtn(true);\r\n };\r\n const onMouseLeave = () => {\r\n setShowActionBtn(false);\r\n };\r\n const onKeyDown = (e) => {\r\n if (e.key === 'Enter' || e.key === ' ') {\r\n onMouseEnter();\r\n }\r\n };\r\n return (\r\n \r\n \r\n {showActionBtn && (\r\n
    \r\n {showEditBtn && (\r\n }\r\n data-idx={index}\r\n size=\"medium\"\r\n className=\"edit_btn\"\r\n onClick={onEdit}\r\n />\r\n )}\r\n }\r\n data-idx={index}\r\n size=\"medium\"\r\n className=\"del_btn\"\r\n onClick={onRemove}\r\n />\r\n
    \r\n )}\r\n \r\n );\r\n});\r\n","/* istanbul ignore file */\r\nimport React, { useMemo } from 'react';\r\nimport {\r\n FormCardDefaultHeader,\r\n FormCardBody,\r\n FormCard,\r\n} from '@bingads-webui-fluent-component/form-cards';\r\nimport { AddRegular } from '@fluentui/react-icons';\r\nimport { HelpButton } from '@bingads-webui-react/help-popup';\r\nimport { Button, mergeClasses, Body1Strong, Skeleton, SkeletonItem } from '@fluentui/react-components';\r\nimport { useStyles, getSkeletonStyles } from './style';\r\nimport { ListItem } from './ListItem';\r\nimport { IListPanel } from './type';\r\n\r\nconst ListSkeleton = ({ maxCount }: { maxCount: number }) => {\r\n const classes = getSkeletonStyles();\r\n return (\r\n \r\n {Array(maxCount).fill('').map(() => )}\r\n \r\n );\r\n};\r\n\r\nexport const ListPanel = React.memo(({\r\n title,\r\n subTitle,\r\n text,\r\n errorMessage = '',\r\n images = [],\r\n isLoading,\r\n maxCount,\r\n showEditBtn = false,\r\n headerProps = {},\r\n helpTopic = '',\r\n helpLabel = '',\r\n onAdd,\r\n onEdit,\r\n onRemove,\r\n}: IListPanel) => {\r\n const classes = useStyles();\r\n\r\n let displayedImages = images;\r\n if (displayedImages && maxCount && maxCount < images.length) {\r\n displayedImages = images.slice(0, maxCount);\r\n }\r\n\r\n const renderHelpBubble = useMemo(() => (\r\n <>\r\n {helpTopic && }\r\n \r\n ), [helpLabel, helpTopic]);\r\n\r\n return (\r\n \r\n \r\n \r\n
    \r\n {subTitle}\r\n {text &&

    {text}

    }\r\n
    \r\n {isLoading ?\r\n :\r\n
    \r\n {displayedImages.map((data, idx) => (\r\n \r\n ))}\r\n {displayedImages?.length < maxCount && }\r\n key=\"add_list\"\r\n onClick={onAdd}\r\n className={mergeClasses(classes.addBtn, 'add_button')}\r\n />}\r\n
    \r\n }\r\n
    \r\n
    \r\n );\r\n});\r\n","import PropTypes, { func } from 'prop-types';\r\nimport React, { useCallback, useMemo } from 'react';\r\nimport {\r\n Button,\r\n makeStyles,\r\n shorthands,\r\n mergeClasses,\r\n Body1,\r\n Field,\r\n RadioGroup,\r\n Radio,\r\n Checkbox,\r\n tokens,\r\n Spinner,\r\n} from '@fluentui/react-components';\r\nimport { AdsStudioPanelContainer, ClarityTags, useClarityTags } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { ImageCropWithBoundingBox } from '@bingads-webui-campaign-react/image-crop-with-bounding-box';\r\n\r\nconst useStyles = makeStyles({\r\n buttonWrapper: {\r\n ...shorthands.padding('16px', '24px', '24px'),\r\n },\r\n button: {\r\n minWidth: 'auto',\r\n ...shorthands.padding('6px', '12px'),\r\n marginRight: '6px',\r\n },\r\n aspectRatio: {\r\n marginTop: tokens.spacingVerticalXXL,\r\n },\r\n background: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n },\r\n imageEditorContainer: {\r\n display: 'flex',\r\n marginTop: tokens.spacingVerticalXXL,\r\n marginBottom: tokens.spacingVerticalXXL,\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n backgroundColor: 'rgba(129, 129, 129, 0.20)',\r\n boxShadow: tokens.shadow2,\r\n\r\n '& .cropper-sub-container': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n },\r\n spinner: {\r\n height: '400px',\r\n },\r\n});\r\n\r\nconst MaxCropHeight = 600;\r\n\r\nconst LogoFormat = {\r\n square: 'square',\r\n landscape: 'landscape',\r\n};\r\n\r\nexport const BrandKitLogoEditPanel = ({\r\n i18n,\r\n isOpen,\r\n dismiss,\r\n format,\r\n minLogoSize,\r\n lightBackground,\r\n hasLandScapeLimit,\r\n hasSquareLimit,\r\n showBackgroundSettings,\r\n darkBackground,\r\n image,\r\n cropSettings,\r\n onChange,\r\n}) => {\r\n const classes = useStyles();\r\n const [aspectRatio, setAspectRatio] = React.useState(format);\r\n const [useInLightBackground, setUseInLightBackground] = React.useState(lightBackground);\r\n const [useInDarkBackground, setUseInDarkBackground] = React.useState(darkBackground);\r\n const [currentCropSettings, setCurrentCropSettings] = React.useState(cropSettings);\r\n const MinLogoSize = minLogoSize || 128;\r\n const maxCropHeight = useMemo(() => {\r\n if (image) {\r\n return Math.min(image.Height, MaxCropHeight);\r\n }\r\n return MaxCropHeight;\r\n }, [image]);\r\n\r\n const landscapeEnabled = useMemo(() => {\r\n if (image) {\r\n return image.Width >= MinLogoSize * 4;\r\n }\r\n if (format === LogoFormat.landscape || hasLandScapeLimit) {\r\n return true;\r\n }\r\n return false;\r\n }, [MinLogoSize, format, hasLandScapeLimit, image]);\r\n\r\n const sqaureEnabled = useMemo(() => {\r\n if (format === LogoFormat.square || hasSquareLimit) {\r\n return true;\r\n }\r\n return false;\r\n }, [format, hasSquareLimit]);\r\n\r\n const isValid = useMemo(\r\n () => !showBackgroundSettings || useInLightBackground || useInDarkBackground,\r\n [showBackgroundSettings, useInLightBackground, useInDarkBackground]\r\n );\r\n\r\n const updateAspectRation = useCallback((value) => {\r\n if (value === LogoFormat.landscape) {\r\n if ((currentCropSettings.SourceX + (currentCropSettings.SourceWidth * 4)) < image.Width) {\r\n setCurrentCropSettings({\r\n ...currentCropSettings,\r\n SourceWidth: currentCropSettings.SourceHeight * 4,\r\n });\r\n } else if ((currentCropSettings.SourceWidth * 4) < image.Width) {\r\n setCurrentCropSettings({\r\n ...currentCropSettings,\r\n SourceWidth: currentCropSettings.SourceHeight * 4,\r\n SourceX: image.Width - (currentCropSettings.SourceHeight * 4),\r\n });\r\n } else {\r\n const height = Math.floor(image.Width / 4);\r\n setCurrentCropSettings({\r\n ...currentCropSettings,\r\n SourceX: 0,\r\n SourceWidth: height * 4,\r\n SourceHeight: height,\r\n });\r\n }\r\n } else {\r\n setCurrentCropSettings({\r\n ...currentCropSettings,\r\n SourceWidth: currentCropSettings.SourceHeight,\r\n });\r\n }\r\n setAspectRatio(value);\r\n }, [setAspectRatio, currentCropSettings, setCurrentCropSettings, image]);\r\n\r\n useClarityTags([\r\n ClarityTags.LaunchedAdsStudio,\r\n ClarityTags.EditBrandKitLogo,\r\n ]);\r\n\r\n const onRenderFooterContent = useCallback(() => (\r\n
    \r\n onChange({\r\n cropSettings: currentCropSettings,\r\n lightBackground: useInLightBackground,\r\n darkBackground: useInDarkBackground,\r\n aspectRatio,\r\n })}\r\n >\r\n {i18n.getString(_TL_('Update logo'))}\r\n \r\n \r\n
    \r\n ), [\r\n classes.buttonWrapper,\r\n classes.button,\r\n i18n,\r\n dismiss,\r\n image,\r\n isValid,\r\n onChange,\r\n currentCropSettings,\r\n useInLightBackground,\r\n useInDarkBackground,\r\n aspectRatio]);\r\n\r\n return (\r\n \r\n \r\n {i18n.getString(_TL_('Customize how your logo looks across potential placements.'))}\r\n \r\n
    \r\n \r\n updateAspectRation(data.value)}>\r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n {image ?\r\n \r\n : }\r\n
    \r\n {showBackgroundSettings &&
    \r\n \r\n {i18n.getString(_TL_('What type of backgrounds should this logo be used with?'))}\r\n \r\n setUseInLightBackground(data.checked)}\r\n label={i18n.getString(_TL_('Light background'))}\r\n />\r\n setUseInDarkBackground(data.checked)}\r\n label={i18n.getString(_TL_('Dark background'))}\r\n />\r\n
    \r\n }\r\n \r\n );\r\n};\r\n\r\nBrandKitLogoEditPanel.propTypes = {\r\n i18n: PropTypes.shape({ getString: func }).isRequired,\r\n isOpen: PropTypes.bool.isRequired,\r\n dismiss: PropTypes.func.isRequired,\r\n hasLandScapeLimit: PropTypes.bool,\r\n minLogoSize: PropTypes.number,\r\n hasSquareLimit: PropTypes.bool,\r\n format: PropTypes.string.isRequired,\r\n lightBackground: PropTypes.bool.isRequired,\r\n showBackgroundSettings: PropTypes.bool,\r\n darkBackground: PropTypes.bool.isRequired,\r\n image: PropTypes.shape({ Height: PropTypes.number, Width: PropTypes.number }),\r\n cropSettings: PropTypes.shape({\r\n SourceX: PropTypes.number,\r\n SourceY: PropTypes.number,\r\n SourceWidth: PropTypes.number,\r\n SourceHeight: PropTypes.number,\r\n }).isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n};\r\n\r\nBrandKitLogoEditPanel.defaultProps = {\r\n image: null,\r\n minLogoSize: 128,\r\n hasLandScapeLimit: true,\r\n hasSquareLimit: true,\r\n showBackgroundSettings: false,\r\n};\r\n\r\n","/* istanbul ignore file */\r\nimport { getCenterCroppedSettings } from '@bingads-webui-campaign/image-experience-utils';\r\nimport _ from 'underscore';\r\n\r\nconst logoTypeLimit = 5;\r\nexport const duplicateImagesValidation = (data, elementType) => {\r\n let hasDuplicateError = false;\r\n let imageAsset = data.images;\r\n if (elementType === 'logo') {\r\n imageAsset = data.logos;\r\n }\r\n const filterImagesAsset = imageAsset.filter((imageData, index) => {\r\n const isDuplicate = imageAsset.findIndex(image => imageData.Url === image.Url) !== index;\r\n if (isDuplicate) {\r\n hasDuplicateError = true;\r\n return false;\r\n }\r\n return true;\r\n });\r\n return {\r\n hasDuplicateError,\r\n data: elementType === 'logo' ? { logos: filterImagesAsset } : { images: filterImagesAsset },\r\n };\r\n};\r\n\r\nexport const imageMinSizeValidation = (data, minSizeConfig, elementType) => {\r\n let hasError = false;\r\n let imageAsset = data.images;\r\n if (elementType === 'logo') {\r\n imageAsset = data.logos;\r\n }\r\n\r\n const filterImagesAsset = imageAsset.filter((imageData) => {\r\n const width = _.get(imageData, 'width') || _.get(imageData, 'image.width') || _.get(imageData, 'CropWidth');\r\n const height = _.get(imageData, 'height') || _.get(imageData, 'image.height') || _.get(imageData, 'CropHeight');\r\n if (Array.isArray(minSizeConfig) && ((minSizeConfig[0] && (width < minSizeConfig[0])) || (minSizeConfig[1] && (height < minSizeConfig[1])))) {\r\n hasError = true;\r\n return false;\r\n }\r\n return true;\r\n });\r\n return {\r\n hasError,\r\n data: elementType === 'logo' ? { logos: filterImagesAsset } : { images: filterImagesAsset },\r\n };\r\n};\r\n\r\nexport const processImageAssetPayload = ({ images, elementType, data }) => {\r\n if (elementType === 'logo') {\r\n // crop images to square and landscape\r\n let squareLogoCount = data.filter(logo => logo.ImageType === 'square').length;\r\n const logos = [];\r\n images.forEach((imageData) => {\r\n const squareSettings = getCenterCroppedSettings({\r\n SourceWidth: _.get(imageData, 'width') || _.get(imageData, 'image.width'),\r\n SourceHeight: _.get(imageData, 'height') || _.get(imageData, 'image.height'),\r\n SourceX: 0,\r\n SourceY: 0,\r\n }, 1);\r\n const landScapeSettings = getCenterCroppedSettings({\r\n SourceWidth: _.get(imageData, 'width') || _.get(imageData, 'image.width'),\r\n SourceHeight: _.get(imageData, 'height') || _.get(imageData, 'image.height'),\r\n SourceX: 0,\r\n SourceY: 0,\r\n }, 4);\r\n\r\n let cropSettings = squareSettings;\r\n let logoType = 'square';\r\n\r\n if ((squareLogoCount === logoTypeLimit) ||\r\n (landScapeSettings.SourceWidth * landScapeSettings.SourceHeight > squareSettings.SourceWidth * squareSettings.SourceHeight)) {\r\n logoType = 'landscape';\r\n cropSettings = landScapeSettings;\r\n } else {\r\n squareLogoCount += 1;\r\n }\r\n\r\n logos.push({\r\n Id: _.get(imageData, 'id') || _.get(imageData, 'image.id'),\r\n CropX: cropSettings.SourceX,\r\n CropY: cropSettings.SourceY,\r\n CropWidth: cropSettings.SourceWidth,\r\n CropHeight: cropSettings.SourceHeight,\r\n Name: null,\r\n Url: _.get(imageData, 'src') || _.get(imageData, 'image.src'),\r\n Type: 'ImageAsset',\r\n SubType: null,\r\n ImageType: logoType,\r\n });\r\n });\r\n\r\n return {\r\n logos: [\r\n ...data,\r\n ...logos,\r\n ],\r\n };\r\n }\r\n\r\n // we are not cropping images\r\n return {\r\n images: [\r\n ...data,\r\n ...images.map(imageData => ({\r\n Id: _.get(imageData, 'id') || _.get(imageData, 'image.id'),\r\n Url: _.get(imageData, 'src') || _.get(imageData, 'image.src'),\r\n CropX: 0,\r\n CropY: 0,\r\n CropWidth: _.get(imageData, 'width') || _.get(imageData, 'image.width'),\r\n CropHeight: _.get(imageData, 'height') || _.get(imageData, 'image.height'),\r\n Name: null,\r\n Type: 'ImageAsset',\r\n SubType: null,\r\n }))],\r\n };\r\n};\r\n","/* istanbul ignore file */\r\nimport React, { useCallback, useMemo } from 'react';\r\nimport { getImageDetailAsync } from '@bingads-webui-campaign/image-experience-utils';\r\nimport { useImagePicker } from '@bingads-webui-campaign-react/add-image-hooks';\r\nimport { UploadImage } from '@bingads-webui-campaign-react/display-ads-editor';\r\nimport { constants } from '@bingads-webui-campaign-react/image-experience-model';\r\nimport { CSMLAssetSource } from '@bingads-webui-campaign-react/asset-library-model';\r\nimport PropTypes from 'prop-types';\r\nimport { ListPanel } from '../list-panel';\r\nimport { BrandKitLogoEditPanel } from '../logo-edit-panel';\r\nimport { duplicateImagesValidation, imageMinSizeValidation, processImageAssetPayload } from './process-image-asset-payload';\r\n// import { BrandKitImageEditPanel } from '../image-edit-panel';\r\n\r\nexport const ImageListElement = React.memo(({\r\n data,\r\n title,\r\n i18n,\r\n maxLimit,\r\n maxCount,\r\n isLoading,\r\n maxSquareLogosLimit,\r\n maxLandscapeLogosLimit,\r\n elementType,\r\n subTitle,\r\n text,\r\n contentBefore,\r\n preferenceService,\r\n permissions,\r\n serverContext,\r\n aid,\r\n cid,\r\n panelTitle,\r\n panelSubtitle,\r\n showEditBtn,\r\n oDataConfig,\r\n perfMarker,\r\n updateOrCreateBrandKit,\r\n helpTopic,\r\n helpLabel,\r\n}) => {\r\n const [openLogoEditPanel, setOpenLogoEditPanel] = React.useState(false);\r\n const [selectedImageIdx, setSelectedImageIdx] = React.useState(0);\r\n const [errorMessage, setErrorMessage] = React.useState('');\r\n const {\r\n displayImagePicker,\r\n setDisplayImagePicker,\r\n selectedMediaPanelSource,\r\n setSelectedMediaPanelSource,\r\n } = useImagePicker();\r\n const clearErrorMessage = useCallback(() => {\r\n setErrorMessage('');\r\n }, []);\r\n const minSizeConfig = constants.brandkitMinSize;\r\n const selectedImage = useMemo(() => data[selectedImageIdx] || {}, [data, selectedImageIdx]);\r\n const openImageEditPanel = useCallback((idx) => {\r\n setSelectedImageIdx(idx);\r\n if (elementType === 'logo') {\r\n setOpenLogoEditPanel(true);\r\n }\r\n clearErrorMessage();\r\n }, [clearErrorMessage, elementType]);\r\n const onEditImage = useCallback((ev) => {\r\n const { idx } = ev.currentTarget.dataset;\r\n const index = Number(idx);\r\n if (data && data[index]) {\r\n if (data[index].Width && data[index].Height) {\r\n openImageEditPanel(index);\r\n return;\r\n }\r\n const fullUrl = data[index].Url;\r\n getImageDetailAsync(fullUrl).then(({ naturalWidth, naturalHeight }) => {\r\n const newData = data;\r\n newData[index].Width = naturalWidth;\r\n newData[index].Height = naturalHeight;\r\n openImageEditPanel(index);\r\n });\r\n }\r\n }, [data, openImageEditPanel]);\r\n const onAddImage = useCallback(() => {\r\n setDisplayImagePicker(true);\r\n clearErrorMessage();\r\n }, [clearErrorMessage, setDisplayImagePicker]);\r\n const onRemoveImage = (ev) => {\r\n const { idx } = ev.currentTarget.dataset;\r\n let key = 'images';\r\n if (elementType === 'logo') {\r\n key = 'logos';\r\n }\r\n updateOrCreateBrandKit({\r\n [key]: data.filter((_, i) => i !== Number(idx)),\r\n });\r\n clearErrorMessage();\r\n };\r\n\r\n const closeLogoEditPanel = useCallback(() => {\r\n setOpenLogoEditPanel(false);\r\n }, []);\r\n const onSelectImages = useCallback((imageData) => {\r\n const payload = processImageAssetPayload({ images: imageData, elementType, data });\r\n const { hasError } = imageMinSizeValidation(payload, minSizeConfig, elementType);\r\n const { data: imageAsset, hasDuplicateError } = duplicateImagesValidation(payload, elementType);\r\n if (hasError) {\r\n setErrorMessage(_TL_('Image does not meet the minimum pixel requirements for this placement.'));\r\n } else if (hasDuplicateError) {\r\n setErrorMessage(_TL_('Image is duplicate'));\r\n } else { clearErrorMessage(); }\r\n updateOrCreateBrandKit(imageAsset);\r\n }, [clearErrorMessage, data, elementType, minSizeConfig, updateOrCreateBrandKit]);\r\n\r\n const onApplyEditLogo = useCallback((image) => {\r\n if (image && image.cropSettings) {\r\n const newData = data;\r\n newData[selectedImageIdx].CropX = image.cropSettings.SourceX;\r\n newData[selectedImageIdx].CropY = image.cropSettings.SourceY;\r\n newData[selectedImageIdx].CropWidth = image.cropSettings.SourceWidth;\r\n newData[selectedImageIdx].CropHeight = image.cropSettings.SourceHeight;\r\n newData[selectedImageIdx].ImageType = image.aspectRatio;\r\n updateOrCreateBrandKit({\r\n logos: data,\r\n });\r\n }\r\n closeLogoEditPanel();\r\n }, [closeLogoEditPanel, data, selectedImageIdx, updateOrCreateBrandKit]);\r\n\r\n const cropSettings = useMemo(() => ({\r\n SourceX: selectedImage.CropX,\r\n SourceY: selectedImage.CropY,\r\n SourceWidth: selectedImage.CropWidth,\r\n SourceHeight: selectedImage.CropHeight,\r\n }), [selectedImage]);\r\n\r\n return (\r\n <>\r\n \r\n {displayImagePicker && (\r\n \r\n )}\r\n {openLogoEditPanel && (\r\n 0}\r\n hasSquareLimit={maxSquareLogosLimit > 0}\r\n isOpen={openLogoEditPanel}\r\n dismiss={closeLogoEditPanel}\r\n image={selectedImage}\r\n format={selectedImage.ImageType}\r\n onChange={onApplyEditLogo}\r\n cropSettings={cropSettings}\r\n />\r\n )}\r\n {/* { openImageEditPanel &&\r\n \r\n } */}\r\n \r\n );\r\n});\r\n\r\n\r\nImageListElement.propTypes = {\r\n data: PropTypes.arrayOf(PropTypes.shape({})),\r\n title: PropTypes.string.isRequired,\r\n isLoading: PropTypes.bool.isRequired,\r\n subTitle: PropTypes.string.isRequired,\r\n text: PropTypes.string,\r\n maxLimit: PropTypes.number,\r\n panelTitle: PropTypes.string,\r\n panelSubtitle: PropTypes.string,\r\n contentBefore: PropTypes.element.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n updateOrCreateBrandKit: PropTypes.func.isRequired,\r\n elementType: PropTypes.oneOf(['logo', 'image']).isRequired,\r\n aid: PropTypes.number.isRequired,\r\n maxSquareLogosLimit: PropTypes.number,\r\n maxLandscapeLogosLimit: PropTypes.number,\r\n cid: PropTypes.number.isRequired,\r\n maxCount: PropTypes.number.isRequired,\r\n perfMarker: PropTypes.shape({}).isRequired,\r\n oDataConfig: PropTypes.shape({}).isRequired,\r\n preferenceService: PropTypes.shape({}).isRequired,\r\n permissions: PropTypes.shape({}).isRequired,\r\n serverContext: PropTypes.shape({}),\r\n showEditBtn: PropTypes.bool,\r\n helpTopic: PropTypes.string,\r\n helpLabel: PropTypes.string,\r\n};\r\n\r\nImageListElement.defaultProps = {\r\n serverContext: {},\r\n data: [],\r\n text: '',\r\n maxSquareLogosLimit: 5,\r\n maxLandscapeLogosLimit: 5,\r\n panelTitle: '',\r\n panelSubtitle: '',\r\n maxLimit: 10,\r\n showEditBtn: true,\r\n helpTopic: '',\r\n helpLabel: '',\r\n};\r\n","import React, {\r\n createContext,\r\n useContext,\r\n} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { reducer } from './reducer';\r\n\r\n\r\nexport const BrandKitContext = createContext(null);\r\nexport const useBrandKitContext = () => useContext(BrandKitContext);\r\n\r\nexport function BrandKitProvider({\r\n children,\r\n}) {\r\n const [state, dispatch] = React.useReducer(reducer, {\r\n });\r\n const context = {\r\n state,\r\n dispatch,\r\n };\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n}\r\n\r\nBrandKitProvider.displayName = 'BrandKitProvider';\r\nBrandKitProvider.propTypes = {\r\n children: PropTypes.node.isRequired,\r\n};\r\n\r\n\r\nexport function withBrandKitContext(Component) {\r\n return props => (\r\n \r\n \r\n \r\n );\r\n}\r\n","import {\r\n makeStyles,\r\n shorthands,\r\n tokens,\r\n typographyStyles\r\n} from '@fluentui/react-components';\r\n\r\nexport const useStyles = makeStyles({\r\n contentPanel: {\r\n minHeight: '75px',\r\n boxShadow: tokens.shadow4,\r\n ...shorthands.borderRadius(tokens.borderRadiusLarge),\r\n backgroundColor: tokens.colorNeutralBackground1,\r\n marginBottom: tokens.spacingVerticalMNudge,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n '& .card-header': {\r\n ...shorthands.borderBottom(tokens.strokeWidthThin, 'solid', tokens.colorNeutralStroke2),\r\n '& svg:first-child': {\r\n width: '24px',\r\n height: '24px',\r\n },\r\n },\r\n '& h3': {\r\n ...typographyStyles.body1Strong,\r\n marginTop: tokens.spacingVerticalXL,\r\n marginBottom: tokens.spacingVerticalS,\r\n },\r\n '& p': {\r\n ...typographyStyles.body1,\r\n marginTop: '0px',\r\n marginBottom: tokens.spacingVerticalS,\r\n },\r\n },\r\n contentPanelTitle: {\r\n ...typographyStyles.body1Strong,\r\n marginTop: tokens.spacingVerticalXL,\r\n marginBottom: tokens.spacingVerticalS,\r\n },\r\n contentPanelSubtitle: {\r\n ...typographyStyles.body1,\r\n marginBottom: tokens.spacingVerticalS,\r\n },\r\n contentPanelHeader: {\r\n lineHeight: tokens.lineHeightBase300,\r\n marginTop: tokens.spacingVerticalXL,\r\n marginBottom: tokens.spacingVerticalMNudge,\r\n },\r\n contentPanelSubheader: {\r\n marginBottom: tokens.spacingVerticalMNudge,\r\n },\r\n});\r\n\r\nexport const getSkeletonStyles = makeStyles({\r\n row: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n marginTop: tokens.spacingVerticalL,\r\n ...shorthands.gap(tokens.spacingVerticalS),\r\n },\r\n});\r\n","import React, { useMemo } from 'react';\r\nimport {\r\n FormCardDefaultHeader,\r\n FormCardBody,\r\n FormCard,\r\n} from '@bingads-webui-fluent-component/form-cards';\r\nimport { mergeClasses, Skeleton, SkeletonItem } from '@fluentui/react-components';\r\nimport { HelpButton } from '@bingads-webui-react/help-popup';\r\nimport { useStyles, getSkeletonStyles } from './style';\r\nimport { IContentPanel } from './type';\r\n\r\nconst SegmentSkeleton = ({ lineCount }: { lineCount: number }) => {\r\n const classes = getSkeletonStyles();\r\n\r\n return (\r\n \r\n {Array(lineCount).fill('').map(() => )}\r\n \r\n );\r\n};\r\n\r\nexport const ContentPanel = React.memo(({\r\n title,\r\n bodyContent,\r\n isLoading,\r\n lineCount = 3,\r\n error,\r\n headerProps = {},\r\n helpTopic = '',\r\n helpLabel = '',\r\n}: IContentPanel) => {\r\n const classes = useStyles();\r\n\r\n const renderHelpBubble = useMemo(() => (\r\n <>\r\n {helpTopic && }\r\n \r\n ), [helpLabel, helpTopic]);\r\n\r\n return (\r\n \r\n \r\n \r\n {isLoading ?\r\n :\r\n <>\r\n {bodyContent}\r\n \r\n }\r\n \r\n \r\n );\r\n});\r\n","import { makeStyles, shorthands, tokens } from '@fluentui/react-components';\r\n\r\nexport const useStyles = makeStyles({\r\n brandVoiceSegment: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n },\r\n brandPersonalityTextarea: {\r\n background: 'salmon',\r\n width: '100%',\r\n ...shorthands.borderRadius(tokens.borderRadiusXLarge),\r\n paddingBottom: '6px',\r\n paddingTop: '6px',\r\n ...shorthands.overflow('hidden'),\r\n '& textarea': {\r\n minHeight: '100px',\r\n },\r\n },\r\n brandToneInput: {\r\n maxWidth: '400px',\r\n },\r\n brandToneCaption: {\r\n marginTop: tokens.spacingVerticalXS,\r\n },\r\n brandPersonalityTagGroup: {\r\n marginBottom: tokens.spacingVerticalMNudge,\r\n },\r\n brandToneAccordion: {\r\n marginTop: tokens.spacingVerticalMNudge,\r\n },\r\n});\r\n","/* istanbul ignore file */\r\nimport React, { useCallback, useContext } from 'react';\r\nimport {\r\n Accordion,\r\n AccordionItem,\r\n AccordionHeader,\r\n AccordionPanel,\r\n Button,\r\n Caption1,\r\n Text,\r\n Textarea,\r\n Tooltip,\r\n} from '@fluentui/react-components';\r\nimport { Tag, TagGroup } from '@fluentui/react-tags';\r\nimport {\r\n TagPicker,\r\n TagPickerControl,\r\n TagPickerInput,\r\n TagPickerList,\r\n TagPickerOption,\r\n} from '@fluentui/react-tag-picker';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n AddRegular,\r\n AddSquareRegular,\r\n ArrowClockwiseRegular,\r\n InfoRegular,\r\n MicSparkleRegular,\r\n TextFontRegular,\r\n} from '@fluentui/react-icons';\r\nimport { Taglines } from './components';\r\nimport { BrandKitContext } from './context';\r\nimport { ContentPanel } from './content-panel/index';\r\nimport { useStyles } from './styles/brand-voice-styles';\r\nimport { actionTypes } from './reducer';\r\n\r\nexport const BrandVoice = () => {\r\n const classes = useStyles();\r\n const i18n = useContext(I18nContext);\r\n const { state, dispatch } = useContext(BrandKitContext);\r\n\r\n const {\r\n taglines,\r\n } = state || {};\r\n\r\n const [brandVoice, setBrandVoice] = React.useState('');\r\n const [selectedOptions, setSelectedOptions] = React.useState([]);\r\n const [inputValue, setInputValue] = React.useState('');\r\n const [mockCopilotSuggestionIndexes, setMockCopilotSuggestionIndexes] = React.useState([1, 2, 3]);\r\n\r\n const handleUpdateTaglines = useCallback((updatedTaglines) => {\r\n dispatch({\r\n type: actionTypes.updateTaglines,\r\n payload: updatedTaglines,\r\n });\r\n }, [dispatch]);\r\n\r\n const handleSetBrandVoice = e => setBrandVoice(e.target.value);\r\n\r\n const handleAddSelectedOptions = useCallback((e) => {\r\n if (e.key === 'Enter') {\r\n return;\r\n }\r\n setSelectedOptions(options => [...new Set([...options, e.target.innerText])]);\r\n }, []);\r\n\r\n const handleRemoveSelectedOption = (e, { value }) => {\r\n setSelectedOptions(options => [...options].filter(tag => tag !== value));\r\n };\r\n\r\n const handleChange = e => setInputValue(e.currentTarget.value);\r\n\r\n const handleKeyDown = useCallback((e) => {\r\n if (e.key === 'Enter' && inputValue) {\r\n setSelectedOptions(options => [...new Set([...options, inputValue.trim()])]);\r\n setInputValue('');\r\n }\r\n }, [inputValue]);\r\n\r\n // TODO: Temporary, replace with real Copilot suggestions\r\n const mockCopilotToneSuggestions = [\r\n 'Empathetic',\r\n 'Inclusive',\r\n 'Hopeful',\r\n 'Professional',\r\n 'Mindful',\r\n 'Collaborative',\r\n 'Considerate',\r\n 'Positive',\r\n ];\r\n\r\n // TODO: Temporary, remove and replace, this was just a fun way to get some random mock suggestions\r\n const refreshMockCopilotSuggestions = () => {\r\n const numbers = [];\r\n while (numbers.length < 3) {\r\n const randomNumber = Math.floor(Math.random() * mockCopilotToneSuggestions.length);\r\n if (!numbers.includes(randomNumber)) {\r\n numbers.push(randomNumber);\r\n }\r\n }\r\n setMockCopilotSuggestionIndexes(numbers);\r\n };\r\n\r\n const brandPersonalityPlaceholder = i18n.getString(_TL_('Cara is a compassionate organization, deeply caring and empathetic, driven by a mission to improve healthcare for underserved communities. As a trustworthy Medical NGO, Cara is dependable and transparent, fostering trust through action and accountability'));\r\n\r\n const brandVoiceBody = () => (\r\n
    \r\n
    \r\n {i18n.getString(_TL_('Brand Personality'))}\r\n {i18n.getString(_TL_(\"How would you describe your brand's personality?\"))}\r\n \r\n
    \r\n
    \r\n {i18n.getString(_TL_('Brand Tone'))}\r\n {i18n.getString(_TL_('How would you describe your brand voice in keywords?'))}\r\n {selectedOptions.length > 0 && (\r\n
    \r\n \r\n {\r\n selectedOptions.length > 0 &&\r\n selectedOptions.map(option => (\r\n \r\n {option}\r\n \r\n ))\r\n }\r\n \r\n
    \r\n )}\r\n \r\n }>\r\n \r\n \r\n \r\n {mockCopilotToneSuggestions.length ? (\r\n mockCopilotToneSuggestions.map(option => (\r\n \r\n {option}\r\n \r\n ))\r\n ) : (\r\n \r\n {i18n.getString(_TL_('No options available'))}\r\n \r\n )}\r\n \r\n \r\n {i18n.getString(_TL_('Type desired tag and press enter to add'))}\r\n
    \r\n
    \r\n \r\n \r\n \r\n {i18n.getString(_TL_('More tone suggestions from Copilot'))}\r\n \r\n \r\n \r\n {mockCopilotSuggestionIndexes.map(index => (\r\n }\r\n size=\"medium\"\r\n >\r\n {mockCopilotToneSuggestions[index]}\r\n \r\n ))}\r\n \r\n
    \r\n
    \r\n );\r\n\r\n const taglinesBody = () => (\r\n \r\n );\r\n\r\n return (\r\n
    \r\n , contentAfter: }}\r\n bodyContent={brandVoiceBody()}\r\n />\r\n , contentAfter: }}\r\n bodyContent={taglinesBody()}\r\n />\r\n
    \r\n );\r\n};\r\n","import { makeStyles, shorthands, tokens } from '@fluentui/react-components';\r\n\r\nexport const useBrandKitPageStyle = makeStyles({\r\n brandKitPage: {\r\n display: 'flex',\r\n ...shorthands.margin('32px', '36px'),\r\n flexDirection: 'column',\r\n ...shorthands.gap(tokens.spacingVerticalL),\r\n },\r\n brandElements: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n ...shorthands.gap(tokens.spacingVerticalL),\r\n },\r\n});\r\n","import React, {\r\n useCallback,\r\n useContext,\r\n} from 'react';\r\nimport classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n ImageRegular,\r\n TextFontRegular,\r\n} from '@fluentui/react-icons';\r\nimport { ColorPicker } from '@bingads-webui-campaign-react/ads-color-picker';\r\nimport { EntryCardSVGIcons } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { actionTypes } from './reducer';\r\nimport { BrandKitContext } from './context';\r\nimport { ContentPanel } from './content-panel';\r\nimport { useBrandKitPageStyle } from './styles';\r\nimport { BrandKitImageListElement, BrandKitFontsSelector } from './components';\r\n\r\nconst MAX_SQUARE_LOGOS = 5;\r\nconst MAX_LANDSCAPE_LOGOS = 5;\r\nconst MAX_IMAGES = 15;\r\nexport const BrandElements = ({\r\n i18n,\r\n preferenceService,\r\n serverContext,\r\n aid,\r\n loading,\r\n cid,\r\n oDataConfig,\r\n fetchBrandKitData,\r\n perfMarker,\r\n permissions,\r\n brandKitDataService,\r\n}) => {\r\n const { state, dispatch } = useContext(BrandKitContext);\r\n const classes = useBrandKitPageStyle();\r\n const {\r\n id,\r\n brandkitName,\r\n fonts = [],\r\n images = [],\r\n logos = [],\r\n palettes = [],\r\n squareLogosCount,\r\n landscapeLogosCount,\r\n } = state || {};\r\n\r\n // eslint-disable-next-line no-unused-vars\r\n const updateOrCreateBrandKit = useCallback(async (brandKit) => {\r\n if (!id) {\r\n const { error } = await brandKitDataService.createBrandKits(aid, [{\r\n brandkitName: 'Brandkit',\r\n ...brandKit,\r\n },\r\n ]);\r\n if (error) {\r\n // throw new error('Error while creating brandkit');\r\n return;\r\n }\r\n fetchBrandKitData();\r\n return;\r\n }\r\n const { error } = await brandKitDataService.updateBrandKit(aid, [{\r\n id,\r\n brandkitName,\r\n ...brandKit,\r\n }]);\r\n if (error) {\r\n // throw new error('Error while updating brandkit');\r\n return;\r\n }\r\n fetchBrandKitData();\r\n }, [id, brandKitDataService, fonts, brandkitName, images, logos, palettes, fetchBrandKitData, aid]);\r\n\r\n\r\n const onUpdateColor = useCallback((colorId, colorObj) => {\r\n if (colorId === '') {\r\n // ADD\r\n palettes.push({ Name: colorObj.str, HexCode: colorObj.str, Type: '' });\r\n updateOrCreateBrandKit({ palettes });\r\n return;\r\n }\r\n // EDIT\r\n const updatePalette = palettes.map((palette) => {\r\n if (palette.Name === colorId) {\r\n return { Name: colorObj.str, HexCode: colorObj.str, Type: '' };\r\n }\r\n return palette;\r\n });\r\n updateOrCreateBrandKit({ palettes: updatePalette });\r\n }, [palettes, updateOrCreateBrandKit]);\r\n const onDeleteColor = useCallback((ev) => {\r\n const { colorid } = ev.currentTarget.dataset;\r\n if (colorid === '') {\r\n return;\r\n }\r\n const updatePalette = palettes.filter(palette => palette.Name !== colorid);\r\n updateOrCreateBrandKit({ palettes: updatePalette });\r\n }, [palettes, updateOrCreateBrandKit]);\r\n\r\n const onUpdateFonts = useCallback((updatedFonts) => {\r\n dispatch({\r\n type: actionTypes.updateFonts,\r\n payload: updatedFonts,\r\n });\r\n updateOrCreateBrandKit({ fonts: updatedFonts });\r\n }, [dispatch, updateOrCreateBrandKit]);\r\n\r\n const totalLogosCount = MAX_LANDSCAPE_LOGOS + MAX_SQUARE_LOGOS;\r\n const maxLogosLimit = logos ? totalLogosCount - logos.length : totalLogosCount;\r\n const maxImagesLimit = images ? MAX_IMAGES - images.length : MAX_IMAGES;\r\n const maxSquareLogosLimit = squareLogosCount ? MAX_SQUARE_LOGOS - squareLogosCount : MAX_SQUARE_LOGOS;\r\n const maxLandscapeLogosLimit = landscapeLogosCount ? MAX_LANDSCAPE_LOGOS - landscapeLogosCount : MAX_LANDSCAPE_LOGOS;\r\n\r\n return (\r\n \r\n }\r\n title={i18n.getString(_TL_('Logos'))}\r\n panelSubtitle={_TL_(\"You can create assets, choose assets you've already uploaded to Ads Studio, or browse to add a new file.\")}\r\n subTitle={i18n.getString(_TL_('You can add up to five logos with a 1:1 aspect ratio and five logos with a 4:1 aspect ratio.'))}\r\n maxLimit={maxLogosLimit}\r\n maxSquareLogosLimit={maxSquareLogosLimit}\r\n maxLandscapeLogosLimit={maxLandscapeLogosLimit}\r\n data={logos}\r\n i18n={i18n}\r\n maxCount={10}\r\n preferenceService={preferenceService}\r\n permissions={permissions}\r\n serverContext={serverContext}\r\n aid={aid}\r\n cid={cid}\r\n updateOrCreateBrandKit={updateOrCreateBrandKit}\r\n oDataConfig={oDataConfig}\r\n perfMarker={perfMarker}\r\n helpTopic=\"pop_BA_Brand_Logos\"\r\n helpLabel={i18n.getString(_TL_('Learn more about Logos'))}\r\n />\r\n \r\n }\r\n subTitle={i18n.getString(_TL_('Add up to 15 images associated with your brand.'))}\r\n maxLimit={maxImagesLimit}\r\n title={i18n.getString(_TL_('Images'))}\r\n data={images}\r\n i18n={i18n}\r\n maxCount={15}\r\n preferenceService={preferenceService}\r\n permissions={permissions}\r\n serverContext={serverContext}\r\n aid={aid}\r\n updateOrCreateBrandKit={updateOrCreateBrandKit}\r\n showEditBtn={false}\r\n cid={cid}\r\n oDataConfig={oDataConfig}\r\n perfMarker={perfMarker}\r\n helpTopic=\"pop_BA_Brand_Images\"\r\n helpLabel={i18n.getString(_TL_('Learn more about Images'))}\r\n />\r\n ,\r\n }}\r\n helpTopic=\"pop_BA_Brand_Font\"\r\n helpLabel={i18n.getString(_TL_('Learn more about Fonts'))}\r\n bodyContent={\r\n \r\n }\r\n />\r\n \r\n );\r\n};\r\n\r\nBrandElements.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n loading: PropTypes.bool.isRequired,\r\n fetchBrandKitData: PropTypes.func.isRequired,\r\n brandKitDataService: PropTypes.shape({\r\n getBrandKits: PropTypes.func,\r\n createBrandKits: PropTypes.func,\r\n updateBrandKit: PropTypes.func,\r\n }).isRequired,\r\n aid: PropTypes.number.isRequired,\r\n cid: PropTypes.number.isRequired,\r\n perfMarker: PropTypes.shape({}).isRequired,\r\n oDataConfig: PropTypes.shape({}).isRequired,\r\n preferenceService: PropTypes.shape({}).isRequired,\r\n permissions: PropTypes.shape({}).isRequired,\r\n serverContext: PropTypes.shape({}),\r\n};\r\n\r\nBrandElements.defaultProps = {\r\n serverContext: {},\r\n};\r\n","import React, { useEffect, useState, useCallback, useContext } from 'react';\r\nimport classnames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport { Tab, TabList } from '@fluentui/react-components';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n// AdsStudioSpinner,\r\n ClarityTags,\r\n useClarityTags\r\n} from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n// import { Overlay } from '@bingads-webui-react/fabric-control';\r\n\r\nimport { actionTypes } from './reducer';\r\nimport { BrandVoice } from './brand-voice';\r\nimport { useBrandKitPageStyle } from './styles';\r\nimport { BrandElements } from './brand-elements';\r\nimport { BrandKitPageBanner } from './components';\r\nimport { withBrandKitContext, BrandKitContext } from './context';\r\n\r\nconst TabValues = {\r\n Assets: 'assets',\r\n BrandVoice: 'brandVoice',\r\n};\r\n\r\nconst BrandKitPage = ({\r\n brandKitDataService,\r\n imageEditService,\r\n notificationApi,\r\n // brandkitApiState,\r\n logger,\r\n permissions,\r\n aid,\r\n perfMarker,\r\n pagePerfMarker: brandKitPagePerfMarker,\r\n setDataLoaded,\r\n ...rest\r\n}) => {\r\n const classes = useBrandKitPageStyle();\r\n const i18n = useContext(I18nContext);\r\n const [loading, setLoading] = useState(true);\r\n const { dispatch } = useContext(BrandKitContext);\r\n\r\n const [selectedTab, setSelectedTab] = useState(TabValues.Assets);\r\n\r\n const onTabSelect = useCallback((_e, data) => {\r\n setSelectedTab(data.value);\r\n }, []);\r\n\r\n const onFailedToLoadData = useCallback(() => {\r\n notificationApi.showWarning(i18n.getString(_TL_('Failed to load. Please refresh the page and try again.')));\r\n }, [i18n, notificationApi]);\r\n\r\n const fetchBrandKitData = useCallback(async () => {\r\n brandKitPagePerfMarker.willFetchData();\r\n const { response, error } = await brandKitDataService.getBrandKits(aid);\r\n if (error) {\r\n onFailedToLoadData();\r\n setLoading(false);\r\n logger.logTrace('failed to load');\r\n if (brandKitPagePerfMarker && setDataLoaded) {\r\n brandKitPagePerfMarker.willRender();\r\n setDataLoaded();\r\n }\r\n return;\r\n }\r\n dispatch({\r\n type: actionTypes.setData,\r\n payload: response[0] || {},\r\n });\r\n setLoading(false);\r\n if (brandKitPagePerfMarker && setDataLoaded) {\r\n brandKitPagePerfMarker.willRender();\r\n setDataLoaded();\r\n }\r\n }, [brandKitDataService, onFailedToLoadData, logger, dispatch, aid]);\r\n useEffect(() => {\r\n fetchBrandKitData();\r\n }, [fetchBrandKitData]);\r\n\r\n useClarityTags([\r\n ClarityTags.BrandKitPage,\r\n ClarityTags.LaunchedAdsStudio,\r\n ]);\r\n\r\n const isBrandKitUIPhase2Enabled = permissions && permissions.dynamic && permissions.dynamic.BrandKitUIPhase2;\r\n\r\n return (\r\n
    \r\n \r\n {/* {(brandkitApiState && brandkitApiState.brandkitLoading) && (\r\n \r\n \r\n \r\n )} */}\r\n {isBrandKitUIPhase2Enabled && (\r\n \r\n {i18n.getString(_TL_('Assets'))}\r\n {i18n.getString(_TL_('Brand voice'))}\r\n \r\n )}\r\n {selectedTab === TabValues.Assets && }\r\n {selectedTab === TabValues.BrandVoice && }\r\n
    \r\n );\r\n};\r\n\r\nBrandKitPage.propTypes = {\r\n notificationApi: PropTypes.shape({}),\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n }).isRequired,\r\n brandKitDataService: PropTypes.shape({\r\n getBrandKits: PropTypes.func,\r\n createBrandKits: PropTypes.func,\r\n updateBrandKit: PropTypes.func,\r\n brandkitLoading: PropTypes.bool,\r\n }).isRequired,\r\n brandkitApiState: PropTypes.shape({\r\n brandkitResp: PropTypes.shape({}),\r\n brandkitError: PropTypes.shape({}),\r\n cache: PropTypes.shape({}),\r\n brandkitLoading: PropTypes.bool,\r\n }).isRequired,\r\n aid: PropTypes.number.isRequired,\r\n imageEditService: PropTypes.shape({}).isRequired,\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({\r\n BrandKitUIPhase2: PropTypes.bool,\r\n }).isRequired,\r\n }).isRequired,\r\n perfMarker: PropTypes.shape({}).isRequired,\r\n};\r\n\r\nBrandKitPage.defaultProps = {\r\n notificationApi: {\r\n showWarning: () => {},\r\n },\r\n};\r\n\r\nexport const BrandKitPageComponent = withBrandKitContext(BrandKitPage);\r\n","import {\r\n tokens,\r\n makeStyles,\r\n shorthands,\r\n typographyStyles,\r\n} from '@fluentui/react-components';\r\nimport bannerBackground from '../../media/banner-background.png';\r\n\r\nexport const useBannerContainerStyles = makeStyles({\r\n bannerContainer: {\r\n width: '100%',\r\n display: 'flex',\r\n alignSelf: 'stretch',\r\n flexDirection: 'column',\r\n ...shorthands.padding('36px'),\r\n ...shorthands.borderRadius(tokens.borderRadiusXLarge),\r\n ...shorthands.gap(tokens.spacingVerticalXXL, tokens.spacingHorizontalXXL),\r\n backgroundImage: `url(${bannerBackground})`,\r\n backgroundSize: 'cover',\r\n 'background-position': 'right center',\r\n backgroundRepeat: 'no-repeat',\r\n ...typographyStyles.body1,\r\n marginBottom: '40px',\r\n },\r\n heading: {\r\n marginBlockEnd: tokens.spacingVerticalS,\r\n },\r\n});\r\n","import React from 'react';\r\nimport PropTypes, { func } from 'prop-types';\r\nimport { Body2, mergeClasses, Title2 } from '@fluentui/react-components';\r\n\r\nimport { useBannerContainerStyles } from './style';\r\n\r\nexport const Banner = ({ i18n }) => {\r\n const classes = useBannerContainerStyles();\r\n\r\n return (\r\n
    \r\n
    \r\n \r\n {i18n.getString(_TL_('Display templates'))}\r\n \r\n \r\n {i18n.getString(_TL_('Create visually appealing templates for your Display ads to save time during campaign creation.'))}\r\n \r\n
    \r\n
    \r\n );\r\n};\r\n\r\nBanner.propTypes = {\r\n i18n: PropTypes.shape({ getString: func }).isRequired,\r\n};\r\n\r\n","import { makeStyles, shorthands, tokens } from '@fluentui/react-components';\r\n\r\nexport const useTemplateImageStyles = makeStyles({\r\n flexColumn: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'flex-start',\r\n justifyContent: 'center',\r\n },\r\n templateWithCaption: {\r\n ...shorthands.gap(tokens.spacingVerticalM),\r\n },\r\n caption: {\r\n ...shorthands.gap(tokens.spacingVerticalXS),\r\n },\r\n imageCard: {\r\n width: '240px',\r\n minHeight: '180px',\r\n height: '200px',\r\n filter: 'drop-shadow(0px 0.3px 0.9px rgba(0, 0, 0, 0.1)) drop-shadow(0px 1.6px 3.6px rgba(0, 0, 0, 0.13))',\r\n ...shorthands.padding(tokens.spacingVerticalNone, tokens.spacingHorizontalNone),\r\n ...shorthands.borderRadius('6px'),\r\n },\r\n imageCardThumbnail: {\r\n objectFit: 'cover',\r\n ...shorthands.overflow('hidden'),\r\n },\r\n darkGrayText: {\r\n color: '3B3B4F',\r\n },\r\n grayText: {\r\n color: tokens.colorNeutralForeground3,\r\n },\r\n});\r\n\r\nexport const useTemplateGridStyles = makeStyles({\r\n gridContainer: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n justifyContent: 'flex-start',\r\n alignItems: 'flex-start',\r\n rowGap: tokens.spacingVerticalL,\r\n columnGap: tokens.spacingHorizontalL,\r\n marginTop: tokens.spacingVerticalS,\r\n },\r\n skeletonContainer: {\r\n alignItems: 'center',\r\n display: 'grid',\r\n position: 'relative',\r\n gridTemplateColumns: 'repeat(5, 1fr)',\r\n ...shorthands.gap(tokens.spacingVerticalL),\r\n },\r\n filtersRow: {\r\n display: 'flex',\r\n justifyContent: 'flex-start',\r\n flexWrap: 'wrap',\r\n ...shorthands.gap(tokens.spacingHorizontalS),\r\n },\r\n filterButton: {\r\n minWidth: 'auto',\r\n whiteSpace: 'nowrap',\r\n },\r\n});\r\n","import React, { useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { List, ListItem } from '@fluentui/react-list-preview';\r\nimport { Card, ToggleButton, mergeClasses, Skeleton, SkeletonItem, Caption2, Caption1Strong } from '@fluentui/react-components';\r\nimport { useTemplateImageStyles, useTemplateGridStyles } from './style';\r\n\r\nexport const TemplateImageCard = ({\r\n templateGroupId,\r\n templateAttributes,\r\n setClickedTemplate,\r\n image,\r\n i18n,\r\n}) => {\r\n const classes = useTemplateImageStyles();\r\n\r\n const getAssetCountInfo = () => {\r\n const { logoCount, imageCount, textAreaCount } = templateAttributes.assetCounts;\r\n const result = [];\r\n if (logoCount && logoCount > 1) result.push(i18n.getString(_TL_('{{logoCount}} logos'), { logoCount }));\r\n else if (logoCount && logoCount > 0) result.push(i18n.getString(_TL_('{{logoCount}} logo'), { logoCount }));\r\n if (imageCount && imageCount > 1) result.push(i18n.getString(_TL_('{{imageCount}} images'), { imageCount }));\r\n else if (imageCount && imageCount > 0) result.push(i18n.getString(_TL_('{{imageCount}} image'), { imageCount }));\r\n if (textAreaCount && textAreaCount > 1) result.push(i18n.getString(_TL_('{{textAreaCount}} texts'), { textAreaCount }));\r\n else if (textAreaCount && textAreaCount > 0) result.push(i18n.getString(_TL_('{{textAreaCount}} text'), { textAreaCount }));\r\n return result.join('・');\r\n };\r\n\r\n const onClick = () => {\r\n setClickedTemplate(templateGroupId);\r\n };\r\n\r\n return (\r\n
    \r\n \r\n \r\n {i18n.getString(_TL_('Preview\r\n \r\n \r\n
    \r\n {templateAttributes.templateGroupName} \r\n {getAssetCountInfo()} \r\n
    \r\n
    \r\n );\r\n};\r\n\r\nTemplateImageCard.propTypes = {\r\n templateGroupId: PropTypes.string.isRequired,\r\n templateAttributes: PropTypes.shape({\r\n templateGroupName: PropTypes.string,\r\n tag: PropTypes.string,\r\n assetCounts: PropTypes.shape({}),\r\n }).isRequired,\r\n setClickedTemplate: PropTypes.func.isRequired,\r\n image: PropTypes.string.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n};\r\n\r\nexport const TemplateGrid = ({\r\n templates,\r\n templateTagOptions,\r\n templateAttributesMap,\r\n setClickedTemplate,\r\n loading,\r\n i18n,\r\n}) => {\r\n const classes = useTemplateGridStyles();\r\n const [selectedFilter, setSelectedFilter] = useState(templateTagOptions.all);\r\n const filterOptions = [templateTagOptions.all, templateTagOptions.brandAwareness, templateTagOptions.performance];\r\n\r\n return (\r\n <>\r\n
    \r\n {filterOptions.map((filter, index) => (\r\n \r\n setSelectedFilter(filter)}\r\n className={mergeClasses(`filter-${index}`, classes.filterButton)}\r\n disabled={loading}\r\n checked={selectedFilter === filter}\r\n >\r\n {i18n.getString(filter)}\r\n \r\n \r\n ))}\r\n
    \r\n {loading ? (\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 {templates.map(template => (\r\n (selectedFilter === templateTagOptions.all ||\r\n templateAttributesMap[template.templateGroupId].tag === selectedFilter\r\n ) && (\r\n \r\n )\r\n ))}\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nTemplateGrid.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n templates: PropTypes.arrayOf(PropTypes.shape({\r\n templateGroupId: PropTypes.string.isRequired,\r\n preview: PropTypes.string.isRequired,\r\n })),\r\n templateTagOptions: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n templateAttributesMap: PropTypes.objectOf(PropTypes.shape({\r\n templateGroupName: PropTypes.string,\r\n tag: PropTypes.string,\r\n assetCounts: PropTypes.shape({}),\r\n })).isRequired,\r\n setClickedTemplate: PropTypes.func.isRequired,\r\n loading: PropTypes.bool,\r\n};\r\n\r\nTemplateGrid.defaultProps = {\r\n templates: [],\r\n loading: true,\r\n};\r\n","import { makeStyles, shorthands, tokens } from '@fluentui/react-components';\r\n\r\nexport const useTemplateCarouselStyles = makeStyles({\r\n carousel: {\r\n display: 'flex',\r\n width: '600px',\r\n height: '380px',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n },\r\n carouselItemContainer: {\r\n backgroundColor: tokens.colorNeutralBackground6,\r\n ...shorthands.borderRadius(tokens.borderRadiusLarge),\r\n ...shorthands.padding(tokens.spacingVerticalNone, '64px'),\r\n },\r\n carouselItem: {\r\n maxHeight: '100%',\r\n maxWidth: '100%',\r\n boxShadow: tokens.shadow2,\r\n },\r\n});\r\n","import React from 'react';\r\nimport {\r\n Carousel,\r\n CarouselCard,\r\n CarouselNav,\r\n CarouselNavButton,\r\n CarouselNavContainer,\r\n CarouselViewport,\r\n CarouselSlider,\r\n} from '@fluentui/react-carousel';\r\nimport { mergeClasses, Skeleton, SkeletonItem } from '@fluentui/react-components';\r\nimport PropTypes from 'prop-types';\r\nimport { useTemplateCarouselStyles } from './style';\r\n\r\nconst CarouselItem = ({ url, i18n }) => {\r\n const classes = useTemplateCarouselStyles();\r\n return (\r\n
    \r\n {i18n.getString(_TL_('Template\r\n
    \r\n );\r\n};\r\n\r\nCarouselItem.propTypes = {\r\n url: PropTypes.string.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n};\r\n\r\nexport const TemplateDetailsCarousel = ({\r\n previews, loading, i18n,\r\n}) => {\r\n const classes = useTemplateCarouselStyles();\r\n return (\r\n <>\r\n {loading || previews === undefined || previews.length === 0 ? (\r\n \r\n \r\n ) : (\r\n \r\n \r\n \r\n { previews.map(preview => (\r\n \r\n \r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n {index => (\r\n \r\n )}\r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\n\r\nTemplateDetailsCarousel.propTypes = {\r\n previews: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n loading: PropTypes.bool,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n};\r\n\r\nTemplateDetailsCarousel.defaultProps = {\r\n loading: false,\r\n};\r\n","import { makeStyles, shorthands, tokens } from '@fluentui/react-components';\r\n\r\nexport const useTemplateDetailsModalStyles = makeStyles({\r\n dialog: {\r\n minWidth: '1030px',\r\n minHeight: '486px',\r\n '@media (max-width: 1030px)': {\r\n minWidth: 'max-content',\r\n minHeight: 'auto',\r\n },\r\n },\r\n dialogContentContainer: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n ...shorthands.gap(tokens.spacingHorizontalXXXL),\r\n ...shorthands.overflow('hidden', 'auto'),\r\n '@media (max-width: 1030px)': {\r\n flexDirection: 'column',\r\n minWidth: 'max-content',\r\n paddingBottom: tokens.spacingVerticalL,\r\n },\r\n },\r\n detailsContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n ...shorthands.gap(tokens.spacingVerticalL),\r\n },\r\n textGroup: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n ...shorthands.gap(tokens.spacingHorizontalS),\r\n },\r\n errorMsg: {\r\n color: tokens.colorStatusDangerForeground1,\r\n },\r\n});\r\n","import React, { useMemo, useEffect, useState, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n Dialog,\r\n DialogContent,\r\n DialogBody,\r\n DialogSurface,\r\n DialogTitle,\r\n Button,\r\n mergeClasses,\r\n Body1,\r\n Subtitle1,\r\n Caption1,\r\n Label,\r\n} from '@fluentui/react-components';\r\nimport { Dismiss20Regular } from '@fluentui/react-icons';\r\nimport { UrlInputFluent } from '@bingads-webui-campaign-react/url-input-fluent-v2';\r\nimport { TemplateDetailsCarousel } from '../template-details-carousel';\r\nimport { useTemplateDetailsModalStyles } from './style';\r\n\r\n\r\nexport const TemplateDetailsModal = ({\r\n templateGroupId,\r\n templateGroupName,\r\n fetchDisplayAdsTemplateGroupDetails,\r\n handleFailedToLoadData,\r\n show,\r\n onShowChange,\r\n onSelectTemplate,\r\n onClose,\r\n i18n,\r\n logger,\r\n}) => {\r\n const [templateCount, setTemplateCount] = useState(0);\r\n const [templateImages, setTemplateImages] = useState([]);\r\n const [templateGroupDetails, setTemplateGroupDetails] = useState({});\r\n const [isPageLoading, setIsPageLoading] = useState(true);\r\n const [url, setUrl] = useState('');\r\n const [urlError, setUrlError] = useState('');\r\n\r\n useEffect(() => {\r\n fetchDisplayAdsTemplateGroupDetails([templateGroupId])\r\n .then(({ data }) => {\r\n const details = data.details.find(detail => detail.templateGroupId === templateGroupId);\r\n setTemplateGroupDetails(details);\r\n setTemplateImages(details.displayAdsTemplateDetails.map(template => template.displayAd.url));\r\n setTemplateCount(details.templateCount);\r\n })\r\n .catch(() => {\r\n handleFailedToLoadData();\r\n logger.logTrace('failed to load');\r\n })\r\n .finally(() => {\r\n setIsPageLoading(false);\r\n });\r\n }, [fetchDisplayAdsTemplateGroupDetails, handleFailedToLoadData, logger, templateGroupId]);\r\n\r\n\r\n const onGetStartedButton = useCallback(() => {\r\n onSelectTemplate({ templateGroupId, templateGroupDetails, url: urlError ? '' : url });\r\n }, [onSelectTemplate, templateGroupId, templateGroupDetails, url, urlError]);\r\n\r\n const DismissIcon = useMemo(() => , [onClose]);\r\n\r\n const classes = useTemplateDetailsModalStyles();\r\n\r\n return (\r\n {\r\n // it is the users responsibility to react accordingly to the open state change\r\n onShowChange(data.open);\r\n }}\r\n className={mergeClasses('template-details-dialog', classes.dialog)}\r\n >\r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n {templateGroupName} \r\n
    \r\n {i18n.getString(_TL_('{{count}} sizes'), { count: templateCount })} \r\n {i18n.getString(_TL_('All {{count}} sizes will be automatically added to your template for you to customize.'), { count: templateCount })} \r\n
    \r\n
    \r\n \r\n {\r\n setUrlError(urlErrors[0]);\r\n setUrl(newUrl);\r\n }}\r\n textFieldAriaLabel={i18n.getString(_TL_('Enter your URL'))}\r\n i18n={i18n}\r\n additionalProperties={{\r\n placeholder: i18n.getString(_TL_('Enter your URL')),\r\n id: 'url-input',\r\n }}\r\n />\r\n {urlError && {urlError} }\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\nTemplateDetailsModal.propTypes = {\r\n templateGroupId: PropTypes.string.isRequired,\r\n templateGroupName: PropTypes.string.isRequired,\r\n fetchDisplayAdsTemplateGroupDetails: PropTypes.func.isRequired,\r\n handleFailedToLoadData: PropTypes.func.isRequired,\r\n show: PropTypes.bool.isRequired,\r\n onShowChange: PropTypes.func.isRequired,\r\n onSelectTemplate: PropTypes.func.isRequired,\r\n onClose: PropTypes.func.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n }).isRequired,\r\n};\r\n","import { makeStyles, shorthands, tokens } from '@fluentui/react-components';\r\n\r\nexport const useDisplayTemplatesPageStyles = makeStyles({\r\n displayTemplatePage: {\r\n display: 'flex',\r\n ...shorthands.margin('32px', '36px'),\r\n flexDirection: 'column',\r\n ...shorthands.gap(tokens.spacingVerticalL),\r\n },\r\n});\r\n","import React, { useCallback, useEffect, useState, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { mergeClasses, Subtitle1 } from '@fluentui/react-components';\r\nimport {\r\n ClarityTags,\r\n useClarityTags\r\n} from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { DataContext } from '@bingads-webui-campaign-react/ads-studio-shared-components';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { TopBanner, TemplateGrid, TemplateDetailsModal } from './components';\r\nimport { useDisplayTemplatesPageStyles } from './style';\r\n\r\nconst names = {\r\n 'Modern minimalist': _TL_('Modern minimalist'),\r\n 'Tech-savvy': _TL_('Tech-savvy'),\r\n 'Vintage, retro': _TL_('Vintage, retro'),\r\n 'Bold and colorful': _TL_('Bold and colorful'),\r\n 'Luxury and beauty': _TL_('Luxury and beauty'),\r\n};\r\n\r\nconst templateTagOptions = {\r\n all: _TL_('All'),\r\n performance: _TL_('Performance'),\r\n brandAwareness: _TL_('Brand awareness'),\r\n};\r\n\r\nconst templateAttributesMap = {\r\n '00000000-0000-0000-0001-000000000001': {\r\n tag: templateTagOptions.performance,\r\n assetCounts: {\r\n logoCount: 1,\r\n imageCount: 1,\r\n textAreaCount: 2,\r\n },\r\n },\r\n '00000000-0000-0000-0001-000000000002': {\r\n tag: templateTagOptions.brandAwareness,\r\n assetCounts: {\r\n logoCount: 0,\r\n imageCount: 1,\r\n textAreaCount: 2,\r\n },\r\n },\r\n '00000000-0000-0000-0001-000000000003': {\r\n tag: templateTagOptions.brandAwareness,\r\n assetCounts: {\r\n logoCount: 0,\r\n imageCount: 1,\r\n textAreaCount: 2,\r\n },\r\n },\r\n '00000000-0000-0000-0001-000000000004': {\r\n tag: templateTagOptions.brandAwareness,\r\n assetCounts: {\r\n logoCount: 0,\r\n imageCount: 1,\r\n textAreaCount: 2,\r\n },\r\n },\r\n '00000000-0000-0000-0001-000000000005': {\r\n tag: templateTagOptions.performance,\r\n assetCounts: {\r\n logoCount: 1,\r\n imageCount: 1,\r\n textAreaCount: 2,\r\n },\r\n },\r\n};\r\n\r\nconst DisplayTemplatesPage = ({\r\n i18n,\r\n logger,\r\n notificationApi,\r\n displayTemplatesDataService,\r\n navigation,\r\n // permissions,\r\n // aid,\r\n // cid,\r\n // oDataConfig,\r\n // serverContext,\r\n // preferenceService,\r\n pagePerfMarker: displayTemplatePagePerfMarker,\r\n setDataLoaded,\r\n // reload,\r\n}) => {\r\n const classes = useDisplayTemplatesPageStyles();\r\n const [isPageLoading, setIsPageLoading] = useState(true);\r\n const [templates, setTemplates] = useState([]);\r\n const [selectedTemplatePreview, setSelectedTemplatePreview] = useState(null);\r\n const [openModal, setOpenModal] = useState(false);\r\n const activity = useContext(ActivityContext);\r\n const { setData } = useContext(DataContext);\r\n\r\n const handleFailedToLoadData = useCallback(() => {\r\n notificationApi.showWarning(i18n.getString(_TL_('Failed to load. Please refresh the page and try again.')));\r\n }, [i18n, notificationApi]);\r\n\r\n useEffect(() => {\r\n displayTemplatePagePerfMarker.willFetchData();\r\n displayTemplatesDataService\r\n .fetchDisplayAdsTemplateGroups()\r\n .then(({ data }) => {\r\n setTemplates(data.displayAdsTemplateGroup);\r\n data.displayAdsTemplateGroup.forEach((template) => {\r\n if (template.templateGroupId in templateAttributesMap) {\r\n templateAttributesMap[template.templateGroupId].templateGroupName = template.templateGroupName in names ?\r\n i18n.getString(names[template.templateGroupName]) : template.templateGroupName;\r\n }\r\n });\r\n })\r\n .catch(() => {\r\n handleFailedToLoadData();\r\n logger.logTrace('failed to load');\r\n })\r\n .finally(() => {\r\n setIsPageLoading(false);\r\n displayTemplatePagePerfMarker.willRender();\r\n setDataLoaded();\r\n });\r\n }, []);\r\n\r\n useClarityTags([\r\n ClarityTags.DisplayTemplateHomePage,\r\n ClarityTags.LaunchedAdsStudio,\r\n ]);\r\n\r\n const onViewTemplateDetails = useCallback((templateGroupId) => {\r\n const templateName = templates.find(template => template.templateGroupId === templateGroupId).templateGroupName;\r\n setSelectedTemplatePreview({\r\n templateGroupId,\r\n templateGroupName: templateName in names ? i18n.getString(names[templateName]) : templateName,\r\n });\r\n\r\n setOpenModal(true);\r\n }, [templates, i18n]);\r\n\r\n const onChooseTemplate = useCallback(({ templateGroupDetails, url }) => {\r\n setData({ templateGroupDetails, url });\r\n activity.signal(`[DisplayTemplatesPage] templateSelected:${templateGroupDetails.templateGroupId}`);\r\n if (url) {\r\n activity.signal(`[DisplayTemplatesPage] url provided: ${url}`);\r\n } else {\r\n activity.signal('[DisplayTemplatesPage] url is not provided');\r\n }\r\n navigation.gotoDisplayTemplatesCreationPage({\r\n templateGroupId: templateGroupDetails.templateGroupId,\r\n });\r\n }, [navigation, activity, setData]);\r\n\r\n const onCloseModal = useCallback(() => {\r\n setOpenModal(false);\r\n }, []);\r\n\r\n return (\r\n
    \r\n \r\n \r\n {i18n.getString(_TL_('Get started with a template'))}\r\n \r\n \r\n {openModal && }\r\n
    \r\n );\r\n};\r\n\r\nDisplayTemplatesPage.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n displayTemplatesDataService: PropTypes.shape({\r\n fetchDisplayAdsTemplateGroups: PropTypes.func,\r\n fetchDisplayAdsTemplateGroupDetails: PropTypes.func,\r\n }),\r\n notificationApi: PropTypes.shape({\r\n showWarning: PropTypes.func,\r\n }),\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n }).isRequired,\r\n permissions: PropTypes.shape({ }).isRequired,\r\n adsStudioUserPreferences: PropTypes.shape({}),\r\n reload: PropTypes.shape({}),\r\n navigation: PropTypes.shape({\r\n gotoDisplayTemplatesCreationPage: PropTypes.func,\r\n }).isRequired,\r\n perfMarker: PropTypes.shape({}).isRequired,\r\n oDataConfig: PropTypes.shape({}).isRequired,\r\n serverContext: PropTypes.shape({}).isRequired,\r\n preferenceService: PropTypes.shape({}).isRequired,\r\n instrumentation: PropTypes.shape({\r\n addScenario: PropTypes.func,\r\n }).isRequired,\r\n};\r\n\r\nDisplayTemplatesPage.defaultProps = {\r\n notificationApi: {},\r\n displayTemplatesDataService: {},\r\n adsStudioUserPreferences: undefined,\r\n reload: null,\r\n};\r\n\r\nexport const DisplayTemplatesPageComponent = DisplayTemplatesPage;\r\n","import { makeStyles } from '@fluentui/react-components';\r\n\r\nexport const useCreateDisplayTemplatePageStyles = makeStyles({\r\n page: {\r\n display: 'flex',\r\n height: '100%',\r\n },\r\n editorContainer: {\r\n position: 'absolute', // workaround for the style issue from the footer\r\n top: '0',\r\n bottom: '0',\r\n width: '100%',\r\n },\r\n});\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React, { useCallback } from 'react';\r\nimport {\r\n Link,\r\n ToastTrigger,\r\n Toast,\r\n ToastTitle,\r\n ToastBody,\r\n ToastFooter,\r\n useId,\r\n Button,\r\n} from '@fluentui/react-components';\r\nimport { Dismiss20Regular } from '@fluentui/react-icons';\r\nimport { useToast } from '@bingads-webui-fluent-component/toast-provider';\r\n\r\nconst timeout = 10000;\r\n\r\nexport const useNotify = ({\r\n i18n,\r\n count,\r\n navigation,\r\n logger,\r\n}) => {\r\n const toastId = useId('notify-toast');\r\n const { dispatchToast, dismissToast } = useToast();\r\n\r\n const notify = useCallback(() =>\r\n dispatchToast(\r\n \r\n \r\n }\r\n title={i18n.getString(_TL_('Dismiss'))}\r\n aria-label={i18n.getString(_TL_('Dismiss'))}\r\n />\r\n \r\n }\r\n >{i18n.getString(_TL_('Display assets saved'))}\r\n \r\n {\r\n count === 1 ?\r\n {i18n.getString(_TL_('Your template was successfully saved. Do you want to create a new campaign for Display ads?'))} :\r\n {i18n.getString(_TL_('Your template was successfully saved. All {{count}} sizes are ready for you to use. Do you want to create a new campaign for Display ads?'), {\r\n count,\r\n })}\r\n \r\n }\r\n \r\n {\r\n ev.preventDefault();\r\n navigation.gotoCampaignUIPage({ subpath: 'createcampaign/displayplusdisplay' });\r\n // manually dismiss the toast as we have prevented the default action\r\n dismissToast(toastId);\r\n if (logger) {\r\n logger.logTrace('[display template] create campaign link clicked');\r\n }\r\n }}\r\n >{i18n.getString(_TL_('Create campaign'))}\r\n \r\n \r\n ,\r\n { intent: 'success', toastId, timeout }\r\n ), [dispatchToast, i18n, navigation, count, dismissToast, toastId, logger]);\r\n\r\n return notify;\r\n};\r\n","import React, { useEffect, useMemo, useContext, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport queryString from 'query-string';\r\nimport { DisplayAdsEditor } from '@bingads-webui-campaign-react/display-ads-editor';\r\nimport { ClarityTags, useClarityTags, AdditionalQueries } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { DataContext } from '@bingads-webui-campaign-react/ads-studio-shared-components';\r\n\r\nimport { useCreateDisplayTemplatePageStyles } from './style';\r\nimport { useNotify } from './use-notify';\r\n\r\nconst CreateDisplayTemplatePage = ({\r\n i18n,\r\n displayTemplatesDataService,\r\n brandKitDataService,\r\n permissions,\r\n aid,\r\n cid,\r\n brandkitApiState,\r\n oDataConfig,\r\n serverContext,\r\n dataService,\r\n preferenceService,\r\n navigation,\r\n instrumentation,\r\n logger,\r\n search,\r\n pagePerfMarker: displayTemplateCreatePagePerfMarker,\r\n setDataLoaded,\r\n notificationApi,\r\n}) => {\r\n const classes = useCreateDisplayTemplatePageStyles();\r\n const [templateDetails, setTemplateGroupDetails] = useState(null);\r\n const { data: detailsData } = useContext(DataContext);\r\n const queries = queryString.parse(search);\r\n const { templateGroupId = '' } = queries || {};\r\n\r\n useEffect(() => {\r\n if (!templateDetails) {\r\n if (!detailsData && templateGroupId) {\r\n displayTemplatesDataService.fetchDisplayAdsTemplateGroupDetails([templateGroupId]).then(({ data }) => {\r\n const details = data.details.find(detail => detail.templateGroupId === templateGroupId);\r\n setTemplateGroupDetails({ templateGroupDetails: details });\r\n }).catch(() => {\r\n notificationApi.showWarning(i18n.getString(_TL_('Failed to load. Please refresh the page and try again.')));\r\n });\r\n } else {\r\n setTemplateGroupDetails(detailsData);\r\n }\r\n }\r\n }, [detailsData, templateGroupId, templateDetails, displayTemplatesDataService, i18n, notificationApi]);\r\n\r\n const templateCount = useMemo(() => (templateDetails &&\r\n templateDetails.templateGroupDetails &&\r\n templateDetails.templateGroupDetails.displayAdsTemplateDetails.length\r\n ) || 0, [templateDetails]);\r\n const notify = useNotify({\r\n i18n, count: templateCount, navigation, logger,\r\n });\r\n\r\n useEffect(() => {\r\n if (!detailsData && !templateGroupId) {\r\n navigation.gotoDisplayTemplatesPage({ removeSearchQuery: [AdditionalQueries.TemplateGroupId] });\r\n }\r\n }, [detailsData, navigation, templateGroupId]);\r\n\r\n useClarityTags([\r\n ClarityTags.LaunchedAdsStudio,\r\n ClarityTags.CreateDisplayTemplate,\r\n ]);\r\n\r\n if (templateDetails === null) {\r\n return null;\r\n }\r\n\r\n return (\r\n <>\r\n
    \r\n {\r\n notify();\r\n dataService.reloadFolderPathTreeItem(['ROOT']);\r\n navigation.gotoImagesPage({ removeSearchQuery: [AdditionalQueries.TemplateGroupId] });\r\n }}\r\n navigation={navigation}\r\n instrumentation={instrumentation}\r\n scenarioName=\"CreateDisplayTemplate\"\r\n activityName=\"CreateDisplayTemplate\"\r\n setDataLoaded={setDataLoaded}\r\n />\r\n
    \r\n \r\n );\r\n};\r\n\r\nCreateDisplayTemplatePage.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n dataService: PropTypes.shape({\r\n loadData: PropTypes.func,\r\n reloadFolderPathTreeItem: PropTypes.func,\r\n }),\r\n notificationApi: PropTypes.shape({\r\n showWarning: PropTypes.func,\r\n }),\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n }).isRequired,\r\n adsStudioUserPreferences: PropTypes.shape({}),\r\n reload: PropTypes.shape({}),\r\n brandKitDataService: PropTypes.shape({\r\n getBrandKits: PropTypes.func,\r\n createBrandKits: PropTypes.func,\r\n updateBrandKit: PropTypes.func,\r\n brandkitLoading: PropTypes.bool,\r\n }).isRequired,\r\n brandkitApiState: PropTypes.shape({\r\n brandkitResp: PropTypes.shape({}),\r\n brandkitError: PropTypes.shape({}),\r\n cache: PropTypes.shape({}),\r\n brandkitLoading: PropTypes.bool,\r\n }).isRequired,\r\n permissions: PropTypes.shape({ }).isRequired,\r\n aid: PropTypes.number.isRequired,\r\n cid: PropTypes.number.isRequired,\r\n pagePerfMarker: PropTypes.shape({}).isRequired,\r\n oDataConfig: PropTypes.shape({}).isRequired,\r\n serverContext: PropTypes.shape({}).isRequired,\r\n preferenceService: PropTypes.shape({}).isRequired,\r\n instrumentation: PropTypes.shape({\r\n addScenario: PropTypes.func,\r\n }).isRequired,\r\n navigation: PropTypes.shape({\r\n gotoDisplayTemplatesPage: PropTypes.func,\r\n gotoImagesPage: PropTypes.func,\r\n removeSearchQuery: PropTypes.func,\r\n }).isRequired,\r\n displayTemplatesDataService: PropTypes.shape({\r\n editDisplayAdsAssetRecommendations: PropTypes.func,\r\n fetchDisplayAdsTemplateGroupDetails: PropTypes.func,\r\n }).isRequired,\r\n setDataLoaded: PropTypes.func.isRequired,\r\n search: PropTypes.string.isRequired,\r\n};\r\n\r\nCreateDisplayTemplatePage.defaultProps = {\r\n dataService: {},\r\n notificationApi: {},\r\n adsStudioUserPreferences: undefined,\r\n reload: null,\r\n};\r\n\r\nexport const CreateDisplayTemplatePageComponent = CreateDisplayTemplatePage;\r\n","import { makeStyles } from '@fluentui/react-components';\r\n\r\nexport const useEditDisplayTemplatePageStyles = makeStyles({\r\n page: {\r\n display: 'flex',\r\n height: '100%',\r\n },\r\n editorContainer: {\r\n position: 'absolute', // workaround for the style issue from the footer\r\n top: '0',\r\n bottom: '0',\r\n width: '100%',\r\n },\r\n});\r\n","import React, { useCallback, useEffect, useState, useMemo, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport queryString from 'query-string';\r\nimport _ from 'underscore';\r\nimport { Overlay } from '@bingads-webui-react/fabric-control';\r\nimport { DisplayAdsEditor } from '@bingads-webui-campaign-react/display-ads-editor';\r\nimport { DataContext } from '@bingads-webui-campaign-react/ads-studio-shared-components';\r\nimport { AdsStudioSpinner, ClarityTags, useClarityTags, AdditionalQueries } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n\r\nimport { useEditDisplayTemplatePageStyles } from './style';\r\nimport { useNotify } from '../create-display-template-page-component/use-notify';\r\n\r\nconst EditDisplayTemplatePage = ({\r\n logger,\r\n notificationApi,\r\n imageId,\r\n i18n,\r\n brandKitDataService,\r\n brandkitApiState,\r\n displayTemplatesDataService,\r\n dataService,\r\n permissions,\r\n aid,\r\n cid,\r\n oDataConfig,\r\n serverContext,\r\n preferenceService,\r\n pagePerfMarker: displayTemplateEditPagePerfMarker,\r\n setDataLoaded,\r\n navigation,\r\n search,\r\n instrumentation,\r\n}) => {\r\n const classes = useEditDisplayTemplatePageStyles();\r\n const queries = queryString.parse(search);\r\n const {\r\n folderId = '',\r\n templateId = '',\r\n } = queries || {};\r\n\r\n const [templateDetails, setTemplateDetails] = useState(null);\r\n const [templateConfig, setTemplateConfig] = useState(null);\r\n const [displayAd, setDisplayAd] = useState(null);\r\n const [sourceType, setSourceType] = useState(null);\r\n const { data: imageDetails } = useContext(DataContext);\r\n const notify = useNotify({\r\n i18n, count: 1, navigation, logger,\r\n });\r\n\r\n const isPageLoading = useMemo(() => !templateDetails, [templateDetails]);\r\n\r\n const displayAdFromStorage = useMemo(() => {\r\n setSourceType(imageDetails ? imageDetails.sourceType : undefined);\r\n\r\n if (imageDetails && imageDetails.imageId === imageId &&\r\n imageDetails.metadata &&\r\n imageDetails.metadata.template &&\r\n imageDetails.metadata.template.templateId === templateId) {\r\n return {\r\n ...imageDetails.metadata,\r\n url: imageDetails.url,\r\n };\r\n }\r\n\r\n return null;\r\n }, [imageId, templateId, imageDetails]);\r\n\r\n const handleFailedToLoadData = useCallback(() => {\r\n notificationApi.showWarning(i18n.getString(_TL_('Failed to load. Please refresh the page and try again.')));\r\n }, [i18n, notificationApi]);\r\n\r\n useClarityTags([\r\n ClarityTags.LaunchedAdsStudio,\r\n ClarityTags.EditDisplayTemplateImage,\r\n ]);\r\n\r\n useEffect(() => {\r\n if (!displayAd) {\r\n displayTemplateEditPagePerfMarker.willFetchData();\r\n if (displayAdFromStorage) {\r\n setDisplayAd(displayAdFromStorage);\r\n } else {\r\n dataService.getImageById({ imageId }).then((image) => {\r\n if (!image.metadata || !image.metadata.template || image.metadata.template.templateId !== templateId) {\r\n navigation.gotoHomePage({ removeSearchQuery: [AdditionalQueries.TemplateId, AdditionalQueries.FolderId] });\r\n } else {\r\n setSourceType(image.sourceType);\r\n setDisplayAd({\r\n ...image.metadata,\r\n url: image.url,\r\n });\r\n }\r\n }).catch(() => {\r\n handleFailedToLoadData();\r\n logger.logTrace('failed to load');\r\n });\r\n }\r\n }\r\n }, [displayAdFromStorage, dataService, imageId, navigation, templateId, handleFailedToLoadData, logger, displayAd, displayTemplateEditPagePerfMarker]);\r\n\r\n useEffect(() => {\r\n if (!imageId || !templateId) {\r\n navigation.gotoHomePage({ removeSearchQuery: [AdditionalQueries.TemplateId, AdditionalQueries.FolderId] });\r\n }\r\n }, [imageId, templateId, navigation]);\r\n\r\n useEffect(() => {\r\n if (!templateConfig) {\r\n displayTemplateEditPagePerfMarker.willFetchData();\r\n displayTemplatesDataService\r\n .fetchDisplayAdsTemplateDefinition(templateId)\r\n .then(({ Data: templates }) => {\r\n const latestTemplate = _.max(\r\n templates.displayAdsTemplateDefinitions,\r\n templateDefinition => Number(templateDefinition.version)\r\n );\r\n setTemplateConfig(latestTemplate);\r\n })\r\n .catch(() => {\r\n handleFailedToLoadData();\r\n logger.logTrace('failed to load');\r\n });\r\n }\r\n }, [handleFailedToLoadData, logger, displayTemplatesDataService, templateId, templateConfig, displayTemplateEditPagePerfMarker]);\r\n\r\n useEffect(() => {\r\n if (!templateDetails && templateConfig && displayAd) {\r\n setTemplateDetails({\r\n displayAdsTemplateDetails: [\r\n {\r\n templateConfig,\r\n displayAd,\r\n },\r\n ],\r\n });\r\n }\r\n }, [displayAd, templateConfig, templateDetails]);\r\n\r\n return (\r\n
    \r\n {isPageLoading && (\r\n \r\n \r\n \r\n )}\r\n {!isPageLoading && (\r\n {\r\n notify();\r\n navigation.gotoImagesPage({ removeSearchQuery: [AdditionalQueries.TemplateId, AdditionalQueries.FolderId] });\r\n }}\r\n navigation={navigation}\r\n instrumentation={instrumentation}\r\n scenarioName=\"EditDisplayTemplateImage\"\r\n activityName=\"EditDisplayTemplateImage\"\r\n sourceType={sourceType}\r\n setDataLoaded={setDataLoaded}\r\n folderId={folderId}\r\n />\r\n ) }\r\n
    \r\n );\r\n};\r\n\r\nEditDisplayTemplatePage.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n displayTemplatesDataService: PropTypes.shape({\r\n fetchDisplayAdsTemplateDefinition: PropTypes.func,\r\n }),\r\n notificationApi: PropTypes.shape({\r\n showWarning: PropTypes.func,\r\n }),\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n }).isRequired,\r\n adsStudioUserPreferences: PropTypes.shape({}),\r\n reload: PropTypes.shape({}),\r\n navigation: PropTypes.shape({\r\n gotoHomePage: PropTypes.func,\r\n gotoImagesPage: PropTypes.func,\r\n }).isRequired,\r\n imageId: PropTypes.string.isRequired,\r\n brandKitDataService: PropTypes.shape({\r\n getBrandKits: PropTypes.func,\r\n createBrandKits: PropTypes.func,\r\n updateBrandKit: PropTypes.func,\r\n brandkitLoading: PropTypes.bool,\r\n }).isRequired,\r\n brandkitApiState: PropTypes.shape({\r\n brandkitResp: PropTypes.shape({}),\r\n brandkitError: PropTypes.shape({}),\r\n cache: PropTypes.shape({}),\r\n brandkitLoading: PropTypes.bool,\r\n }).isRequired,\r\n dataService: PropTypes.shape({\r\n getImageById: PropTypes.func,\r\n }).isRequired,\r\n permissions: PropTypes.shape({}).isRequired,\r\n aid: PropTypes.number.isRequired,\r\n cid: PropTypes.number.isRequired,\r\n oDataConfig: PropTypes.shape({}).isRequired,\r\n serverContext: PropTypes.shape({}).isRequired,\r\n preferenceService: PropTypes.shape({}).isRequired,\r\n pagePerfMarker: PropTypes.shape({\r\n willFetchData: PropTypes.func,\r\n }).isRequired,\r\n search: PropTypes.string.isRequired,\r\n instrumentation: PropTypes.shape({}).isRequired,\r\n setDataLoaded: PropTypes.func.isRequired,\r\n};\r\n\r\nEditDisplayTemplatePage.defaultProps = {\r\n displayTemplatesDataService: {},\r\n notificationApi: {},\r\n adsStudioUserPreferences: undefined,\r\n reload: null,\r\n};\r\n\r\nexport const EditDisplayTemplatePageComponent = EditDisplayTemplatePage;\r\n","import { makeStyles } from '@fluentui/react-components';\r\n\r\nexport const useFolderGridCellWithContextMenuStyle = makeStyles({\r\n folderCellContextMenuButton: {\r\n height: '100%',\r\n width: '100%',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n});\r\n","/* eslint-disable object-curly-newline */\r\nimport _ from 'underscore';\r\nimport React, { useCallback, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { MoreVertical20Regular } from '@fluentui/react-icons';\r\nimport {\r\n Menu,\r\n MenuItem,\r\n MenuList,\r\n MenuPopover,\r\n MenuTrigger,\r\n} from '@fluentui/react-components';\r\nimport { AdsStudioFoldersGridCell } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n\r\nimport { useFolderGridCellWithContextMenuStyle } from '../styles/folders-grid-cell-with-context-menu-style';\r\n\r\nfunction getMenuItems({\r\n item,\r\n isReadonly,\r\n onSelectMenuItemClick,\r\n onOpenMenuItemClick,\r\n onDeleteMenuItemClick,\r\n onRenameMenuItemClick,\r\n onViewPerformanceClick,\r\n i18n,\r\n}) {\r\n const items = _.compact([{\r\n key: 'deleteItem',\r\n text: i18n.getString(_TL_('Delete')),\r\n ariaLabel: i18n.getString(_TL_('Delete')),\r\n onClick: onDeleteMenuItemClick ? () => onDeleteMenuItemClick(item) : _.noop,\r\n disabled: !!isReadonly,\r\n },\r\n {\r\n key: 'openCell',\r\n text: i18n.getString(_TL_('Open')),\r\n ariaLabel: i18n.getString(_TL_('Open')),\r\n onClick: onOpenMenuItemClick ? () => onOpenMenuItemClick(item) : _.noop,\r\n },\r\n {\r\n key: 'renameItem',\r\n text: i18n.getString(_TL_('Rename')),\r\n ariaLabel: i18n.getString(_TL_('Rename')),\r\n onClick: onRenameMenuItemClick ? () => onRenameMenuItemClick(item) : _.noop,\r\n disabled: !!isReadonly,\r\n },\r\n {\r\n key: 'selectCell',\r\n text: i18n.getString(_TL_('Select')),\r\n ariaLabel: i18n.getString(_TL_('Select')),\r\n onClick: onSelectMenuItemClick ? () => onSelectMenuItemClick(item) : _.noop,\r\n },\r\n {\r\n key: 'viewPerformance',\r\n text: i18n.getString(_TL_('View performance')),\r\n ariaLabel: i18n.getString(_TL_('View performance')),\r\n onClick: onViewPerformanceClick ? () => onViewPerformanceClick(item) : _.noop,\r\n },\r\n ]);\r\n return items;\r\n}\r\n\r\nconst FoldersGridCellWithContextMenu = ({\r\n item,\r\n isReadonly,\r\n onSelectMenuItemClick,\r\n onOpenMenuItemClick,\r\n onDeleteMenuItemClick,\r\n onRenameMenuItemClick,\r\n onViewPerformanceClick,\r\n i18n,\r\n ...rest\r\n}) => {\r\n const classes = useFolderGridCellWithContextMenuStyle();\r\n const menuItems = useMemo(() => getMenuItems({\r\n item,\r\n isReadonly,\r\n onSelectMenuItemClick,\r\n onOpenMenuItemClick,\r\n onDeleteMenuItemClick,\r\n onRenameMenuItemClick,\r\n onViewPerformanceClick,\r\n i18n,\r\n }), [item, isReadonly, onSelectMenuItemClick, onOpenMenuItemClick, onDeleteMenuItemClick, onRenameMenuItemClick, onViewPerformanceClick, i18n]);\r\n\r\n const renderAccessory = useCallback(() => (\r\n \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n \r\n {menuItems.map(menuItem => (\r\n \r\n {menuItem.text}\r\n \r\n ))}\r\n \r\n \r\n
    ), [classes.folderCellContextMenuButton, menuItems]);\r\n\r\n return ();\r\n};\r\n\r\nFoldersGridCellWithContextMenu.propTypes = {\r\n item: PropTypes.shape({}).isRequired,\r\n isReadonly: PropTypes.bool,\r\n // show dropdown menu\r\n onSelectMenuItemClick: PropTypes.func,\r\n onOpenMenuItemClick: PropTypes.func,\r\n onDeleteMenuItemClick: PropTypes.func,\r\n onRenameMenuItemClick: PropTypes.func,\r\n onViewPerformanceClick: PropTypes.func,\r\n\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n};\r\n\r\nFoldersGridCellWithContextMenu.defaultProps = {\r\n isReadonly: false,\r\n onSelectMenuItemClick: undefined,\r\n onOpenMenuItemClick: undefined,\r\n onDeleteMenuItemClick: undefined,\r\n onRenameMenuItemClick: undefined,\r\n onViewPerformanceClick: undefined,\r\n};\r\n\r\nexport const AdsStudioFoldersGridCellWithContextMenu = FoldersGridCellWithContextMenu;\r\n","import { makeStyles } from '@fluentui/react-components';\r\n\r\nexport const useModalStyle = makeStyles({\r\n nameInput: {\r\n marginTop: '40px',\r\n marginBottom: '54px',\r\n width: '100%',\r\n },\r\n error: {\r\n fontSize: '14px',\r\n color: 'rgb(168, 0, 0)',\r\n marginTop: '-40px',\r\n marginBottom: '20px',\r\n },\r\n});\r\n","import React, { useCallback, useState, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport _ from 'underscore';\r\nimport {\r\n Dialog,\r\n DialogTrigger,\r\n DialogSurface,\r\n DialogTitle,\r\n DialogContent,\r\n DialogBody,\r\n DialogActions,\r\n Button,\r\n Input,\r\n mergeClasses,\r\n} from '@fluentui/react-components';\r\nimport { Dismiss20Regular } from '@fluentui/react-icons';\r\nimport { validate } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n\r\nimport { useModalStyle } from '../styles/edit-folder-name-modal-style';\r\n\r\nconst EditFolderNameModalImp = ({\r\n i18n,\r\n show,\r\n onComplete,\r\n onCancel,\r\n errorText,\r\n setErrorText,\r\n initName,\r\n title,\r\n}) => {\r\n const classes = useModalStyle();\r\n const [name, setName] = useState('');\r\n\r\n const onChange = useCallback((event) => {\r\n const value = (event && event.target && event.target.value) || '';\r\n if (validate(value) && value.length <= 128) {\r\n setErrorText('');\r\n setName(value.trim());\r\n } else {\r\n setErrorText(i18n.getString(_TL_('You\\'ve entered one or more invalid characters in the fields. Please correct them.')));\r\n }\r\n }, [setErrorText, i18n]);\r\n\r\n const onConfirm = useCallback(() => {\r\n setName('');\r\n onComplete(name);\r\n }, [name, onComplete]);\r\n\r\n const handleCancel = useCallback(() => {\r\n setName('');\r\n onCancel();\r\n }, [onCancel]);\r\n\r\n const onKeyDown = useCallback((event) => {\r\n if (event && event.key === 'Enter') {\r\n onConfirm();\r\n }\r\n }, [onConfirm]);\r\n\r\n const isSaveButtonDisabled = useMemo(\r\n () => (initName && name === initName) || !name || errorText,\r\n [errorText, initName, name]\r\n );\r\n\r\n const DismissIcon = useMemo(() => , [handleCancel]);\r\n\r\n return (\r\n show ?\r\n \r\n \r\n \r\n {title || i18n.getString(_TL_('Create folder'))}\r\n \r\n { onChange(event); }}\r\n onKeyDown={onKeyDown}\r\n autoFocus\r\n defaultValue={initName}\r\n />\r\n { errorText &&
    {errorText}
    }\r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n : null\r\n );\r\n};\r\n\r\nEditFolderNameModalImp.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n show: PropTypes.bool.isRequired,\r\n onComplete: PropTypes.func.isRequired,\r\n onCancel: PropTypes.func.isRequired,\r\n errorText: PropTypes.string,\r\n setErrorText: PropTypes.func,\r\n initName: PropTypes.string,\r\n title: PropTypes.string,\r\n};\r\n\r\nEditFolderNameModalImp.defaultProps = {\r\n errorText: '',\r\n setErrorText: _.noop,\r\n initName: '',\r\n title: undefined,\r\n};\r\n\r\nexport const EditFolderNameModal = EditFolderNameModalImp;\r\n","import React, { useState, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { getFoldersLimitPerAccount } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n\r\nimport { EditFolderNameModal } from '../components/edit-folder-name-modal';\r\n\r\nconst CreateFolderModal = ({\r\n isDialogVisible,\r\n setDialogVisible,\r\n createFolderAsync,\r\n onSuccess,\r\n onError,\r\n aid,\r\n i18n,\r\n logger,\r\n}) => {\r\n const [errorMessage, setErrorMessage] = useState('');\r\n\r\n const closeDialog = useCallback(() => {\r\n setDialogVisible(false);\r\n setErrorMessage('');\r\n }, [setDialogVisible]);\r\n\r\n const onCreateFolder = useCallback((name) => {\r\n logger.logTrace('Confirm to create folder', { folderName: name });\r\n createFolderAsync({ folderName: name }).then(() => {\r\n setDialogVisible(false);\r\n onSuccess(name);\r\n logger.logTrace('Create folder successfully', { folderName: name });\r\n }).catch((alODataErr) => {\r\n const { actionable, getUXMessage } = alODataErr;\r\n if (actionable) {\r\n // prompt user to correct\r\n setErrorMessage(getUXMessage(i18n));\r\n } else {\r\n const getParams = () => ({ value: getFoldersLimitPerAccount(aid, logger) });\r\n const localizedUXMessage = getUXMessage(i18n, getParams);\r\n closeDialog();\r\n logger.logError(alODataErr, { folderName: name });\r\n onError(localizedUXMessage);\r\n }\r\n });\r\n }, [logger, createFolderAsync, setDialogVisible, onSuccess, i18n, closeDialog, onError, aid]);\r\n\r\n const onCancel = useCallback(() => {\r\n closeDialog();\r\n logger.logTrace('Cancel to create folder');\r\n }, [closeDialog, logger]);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nCreateFolderModal.propTypes = {\r\n isDialogVisible: PropTypes.bool.isRequired,\r\n setDialogVisible: PropTypes.func.isRequired,\r\n createFolderAsync: PropTypes.func.isRequired,\r\n aid: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\r\n onSuccess: PropTypes.func.isRequired,\r\n onError: PropTypes.func.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n logError: PropTypes.func,\r\n }).isRequired,\r\n};\r\n\r\nexport const useCreateFolderModal = (aid, i18n, logger) => {\r\n const [isDialogVisible, setDialogVisible] = useState(false);\r\n\r\n const openModal = () => {\r\n setDialogVisible(true);\r\n };\r\n\r\n const render = useCallback((createFolderAsync, onSuccess, onError) => (), [aid, i18n, isDialogVisible, logger]);\r\n\r\n return {\r\n open: openModal,\r\n render,\r\n };\r\n};\r\n","import _ from 'underscore';\r\nimport React, { useState, useRef, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { ConfirmDialog } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n\r\nconst DeleteConfirmDialog = ({\r\n title,\r\n showConfirmDialog,\r\n setShowConfirmDialog,\r\n deleteApiAsync,\r\n i18n,\r\n warningMsg,\r\n}) => {\r\n const [showUIBlocker, setShowUIBlocker] = useState(false);\r\n\r\n const closeConfirmDialog = () => {\r\n setShowConfirmDialog(false);\r\n setShowUIBlocker(false);\r\n };\r\n\r\n const onDelete = () => {\r\n setShowUIBlocker(true);\r\n deleteApiAsync().finally(() => {\r\n closeConfirmDialog();\r\n });\r\n };\r\n\r\n const onCancel = () => {\r\n closeConfirmDialog();\r\n };\r\n\r\n return showConfirmDialog ? (\r\n \r\n ) : null;\r\n};\r\n\r\nDeleteConfirmDialog.propTypes = {\r\n title: PropTypes.string.isRequired,\r\n showConfirmDialog: PropTypes.bool.isRequired,\r\n setShowConfirmDialog: PropTypes.func.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n deleteApiAsync: PropTypes.func.isRequired,\r\n warningMsg: PropTypes.string,\r\n};\r\n\r\nDeleteConfirmDialog.defaultProps = {\r\n warningMsg: '',\r\n};\r\n\r\nexport const useDeleteConfirmDialog = (i18n) => {\r\n const [showConfirmDialog, setShowConfirmDialog] = useState(false);\r\n const deletedItems = useRef([]).current;\r\n\r\n const open = () => {\r\n setShowConfirmDialog(true);\r\n };\r\n\r\n const render = useCallback(({\r\n title, deleteApiAsync, onSuccess, onError, warningMsg,\r\n }) => {\r\n const onItemDeleted = (item) => {\r\n deletedItems.push(item);\r\n };\r\n\r\n const deleteApiAsyncWrapper = () => {\r\n deletedItems.length = 0;\r\n return deleteApiAsync({ onItemDeleted })\r\n .then(() => onSuccess({ deletedItems }))\r\n .catch(({ uxMessage }) => onError(i18n.getString(uxMessage)));\r\n };\r\n\r\n return ();\r\n }, [deletedItems, i18n, showConfirmDialog]);\r\n\r\n return {\r\n open,\r\n render,\r\n };\r\n};\r\n\r\nexport const useDeleteFolderConfirmDialog = (i18n, logger) => {\r\n const folderItemRef = useRef();\r\n\r\n const { open, render } = useDeleteConfirmDialog(i18n);\r\n\r\n const openConfirmDialog = (item) => {\r\n folderItemRef.current = item;\r\n open();\r\n };\r\n\r\n const renderConfirmDialog = useCallback((deleteFolderAsync, onSuccess, onError) => {\r\n const { folderId, folderName } = folderItemRef.current || {};\r\n\r\n const title = i18n.getString(_TL_('Are you sure you want to delete the \"{{folderName}}\" folder?'), { folderName });\r\n\r\n const deleteApiAsync = ({ onItemDeleted }) => {\r\n logger.logTrace('Confirm to delete folder', { folderName });\r\n return deleteFolderAsync({ folderId, folderName, onItemDeleted });\r\n };\r\n\r\n const onSuccessWrapper = ({ deletedItems: items }) => {\r\n const deletedItems = _.filter(items, itm => itm.err && !itm.err.ignorable);\r\n const hasErrors = deletedItems.length > 0;\r\n if (hasErrors) {\r\n logger.logTrace('folder is deleted with some errors', { folderName });\r\n } else {\r\n logger.logTrace('folder is deleted successfully', { folderName });\r\n }\r\n onSuccess({ folderName, folderId, deletedItems });\r\n };\r\n\r\n return render({\r\n title, i18n, deleteApiAsync, onSuccess: onSuccessWrapper, onError,\r\n });\r\n }, [i18n, render, logger]);\r\n\r\n return {\r\n open: openConfirmDialog,\r\n render: renderConfirmDialog,\r\n };\r\n};\r\n\r\nexport const useBatchDeleteConfirmDialog = (i18n, logger) => {\r\n const { open, render } = useDeleteConfirmDialog(i18n);\r\n\r\n const renderConfirmDialog = useCallback((batchDeleteAsync, onSuccess, onError, warningMsg) => {\r\n const title = i18n.getString(_TL_('Are you sure you want to delete the selected items?'));\r\n\r\n const deleteApiAsync = ({ onItemDeleted }) => {\r\n logger.logTrace('Confirm to batch delete');\r\n return batchDeleteAsync({ onItemDeleted });\r\n };\r\n\r\n const onSuccessWrapper = ({ deletedItems: items }) => {\r\n const deletedItems = _.filter(items, itm => itm.err && !itm.err.ignorable);\r\n const hasErrors = deletedItems.length > 0;\r\n if (hasErrors) {\r\n logger.logTrace('Batch deleting is done with some errors.');\r\n } else {\r\n logger.logTrace('Batch deleting is done successfully.');\r\n }\r\n const folderCount = items ? _.filter(items, itm => !!itm.folderId).length : 0;\r\n const assetCount = items ? _.filter(items, itm => !itm.folderId).length : 0;\r\n onSuccess({ deletedItems, folderCount, assetCount });\r\n };\r\n\r\n return render({\r\n title, i18n, deleteApiAsync, onSuccess: onSuccessWrapper, onError, warningMsg,\r\n });\r\n }, [i18n, logger, render]);\r\n\r\n return {\r\n open,\r\n render: renderConfirmDialog,\r\n };\r\n};\r\n","import React, { useState, useRef, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { EditFolderNameModal } from '../components/edit-folder-name-modal';\r\n\r\nconst RenameFolderModal = ({\r\n folderId,\r\n folderName,\r\n isDialogVisible,\r\n setDialogVisible,\r\n renameFolderAsync,\r\n onSuccess,\r\n onError,\r\n i18n,\r\n logger,\r\n}) => {\r\n const [errorMessage, setErrorMessage] = useState('');\r\n\r\n const closeDialog = useCallback(() => {\r\n setDialogVisible(false);\r\n setErrorMessage('');\r\n }, [setDialogVisible]);\r\n\r\n const onRenameFolder = useCallback((name) => {\r\n logger.logTrace('Confirm to rename folder', { folderName, newFolderName: name });\r\n renameFolderAsync({ folderId, folderName, newFolderName: name }).then(() => {\r\n setDialogVisible(false);\r\n onSuccess({ folderId, folderName, newFolderName: name });\r\n logger.logTrace('rename folder successfully', { folderName, newFolderName: name });\r\n }).catch((alODataErr) => {\r\n const { actionable, uxMessage } = alODataErr;\r\n if (actionable) {\r\n // prompt user to correct\r\n setErrorMessage(i18n.getString(uxMessage));\r\n } else {\r\n logger.logError(alODataErr, { folderName, newFolderName: name });\r\n closeDialog();\r\n onError(i18n.getString(uxMessage));\r\n }\r\n });\r\n }, [closeDialog, folderId, folderName, i18n, logger, onError, onSuccess, renameFolderAsync, setDialogVisible]);\r\n\r\n const onCancel = useCallback(() => {\r\n closeDialog();\r\n logger.logTrace('Cancel to rename folder');\r\n }, [closeDialog, logger]);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nRenameFolderModal.propTypes = {\r\n folderId: PropTypes.number,\r\n folderName: PropTypes.string,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n isDialogVisible: PropTypes.bool.isRequired,\r\n setDialogVisible: PropTypes.func.isRequired,\r\n renameFolderAsync: PropTypes.func.isRequired,\r\n onSuccess: PropTypes.func.isRequired,\r\n onError: PropTypes.func.isRequired,\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n logError: PropTypes.func,\r\n }).isRequired,\r\n};\r\n\r\nRenameFolderModal.defaultProps = {\r\n folderId: undefined,\r\n folderName: undefined,\r\n};\r\n\r\nexport const useRenameFolderModal = (i18n, logger) => {\r\n const [isDialogVisible, setDialogVisible] = useState(false);\r\n const folderItemRef = useRef();\r\n\r\n const openModal = (item) => {\r\n folderItemRef.current = item;\r\n setDialogVisible(true);\r\n };\r\n\r\n const render = useCallback((renameFolderAsync, onSuccess, onError) => {\r\n const { folderId, folderName } = folderItemRef.current || {};\r\n return ();\r\n }, [i18n, isDialogVisible, logger]);\r\n\r\n return {\r\n open: openModal,\r\n render,\r\n };\r\n};\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nexport const useSummaryResultDialogStyles = makeStyles({\r\n summaryMessage: {\r\n paddingBottom: '16px',\r\n },\r\n summaryListContainer: {\r\n maxHeight: '300px',\r\n overflowY: 'auto',\r\n paddingBottom: '12px',\r\n },\r\n dialog: {\r\n '&.fui-DialogSurface': {\r\n maxWidth: '778px',\r\n overflowY: 'hidden',\r\n overflowX: 'auto',\r\n '& .fui-DialogContent': {\r\n maxWidth: '724px',\r\n },\r\n '& .fui-DialogActions': {\r\n width: '724px',\r\n ...shorthands.borderTop('1px', 'solid', '#F1F1F1'),\r\n paddingTop: '16px',\r\n },\r\n },\r\n },\r\n grid: {\r\n '&.fui-DataGrid': {\r\n width: 'fit-content',\r\n },\r\n },\r\n gridCell: {\r\n '&.fui-DataGridCell': {\r\n paddingTop: '6px',\r\n paddingBottom: '6px',\r\n '& div': {\r\n ...shorthands.overflow('hidden'),\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n },\r\n },\r\n },\r\n gridHeaderCell: {\r\n '&.fui-DataGridHeaderCell .name': {\r\n fontWeight: 600,\r\n },\r\n },\r\n});\r\n\r\nexport const useImagePreviewStyles = makeStyles({\r\n imagePreviewContainer: {\r\n width: '92px',\r\n height: '60px',\r\n },\r\n});\r\n\r\nexport const useValueWithTooltipViewStyles = makeStyles({\r\n overflow: {\r\n display: 'block',\r\n ...shorthands.overflow('hidden'),\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n },\r\n overflowLeft: {\r\n display: 'block',\r\n ...shorthands.overflow('hidden'),\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n textAlign: 'left',\r\n direction: 'rtl',\r\n },\r\n customToolTip: {\r\n ...shorthands.padding('0px 10px 10px 10px'),\r\n },\r\n toolTipContentHeader: {\r\n fontWeight: 600,\r\n fontSize: '20px',\r\n lineHeight: '28px',\r\n },\r\n toolTipContent: {\r\n marginTop: '10px',\r\n },\r\n});\r\n\r\nexport const useAssociationsButtonStyles = makeStyles({\r\n associationsButton: {\r\n '&.fui-Button': {\r\n ...shorthands.border('none'),\r\n fontWeight: 'normal',\r\n '&:hover': {\r\n color: '#0078d4',\r\n },\r\n },\r\n },\r\n});\r\n","import React, { useCallback, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n Button,\r\n Image,\r\n Tooltip,\r\n Spinner,\r\n} from '@fluentui/react-components';\r\nimport { OpenRegular } from '@fluentui/react-icons';\r\n\r\nimport { useAssociationsButtonStyles, useImagePreviewStyles, useValueWithTooltipViewStyles } from '../../styles/summary-result-dialog-style';\r\n\r\nconst ValueWithTooltip = ({\r\n value, valueDescription, ellipsisOnLeft,\r\n}) => {\r\n const classes = useValueWithTooltipViewStyles();\r\n\r\n if (valueDescription) {\r\n return (\r\n \r\n
    {value}
    \r\n \r\n );\r\n }\r\n return (\r\n \r\n
    {value}
    \r\n \r\n );\r\n};\r\n\r\nValueWithTooltip.propTypes = {\r\n value: PropTypes.string,\r\n valueDescription: PropTypes.string,\r\n ellipsisOnLeft: PropTypes.bool,\r\n};\r\n\r\nValueWithTooltip.defaultProps = {\r\n value: '',\r\n valueDescription: '',\r\n ellipsisOnLeft: false,\r\n};\r\n\r\nconst Associations = ({\r\n assetId, folderAssetType, availableActions, i18n, navigation, logger,\r\n}) => {\r\n const classes = useAssociationsButtonStyles();\r\n\r\n const [isLoading, setLoading] = useState(false);\r\n const onClick = useCallback(() => {\r\n logger.logTrace('View all ads using this asset clicked');\r\n setLoading(true);\r\n return navigation.gotoAdsPageWithAssetIdFilter({ folderAssetType, assetId }, true)\r\n .finally(() => setLoading(false));\r\n }, [assetId, folderAssetType, logger, navigation]);\r\n\r\n return (\r\n
    \r\n {availableActions.gotoAds ? (\r\n }\r\n onClick={onClick}\r\n disabled={isLoading}\r\n className={classes.associationsButton}\r\n >\r\n {i18n.getString(_TL_('View all ads using this asset'))}\r\n \r\n ) : (i18n.getString(_TL_('No associations')))}\r\n {isLoading && }\r\n
    \r\n );\r\n};\r\n\r\nAssociations.propTypes = {\r\n assetId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\r\n folderAssetType: PropTypes.string,\r\n availableActions: PropTypes.shape({\r\n gotoAds: PropTypes.bool,\r\n }).isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n navigation: PropTypes.shape({\r\n gotoAdsPageWithAssetIdFilter: PropTypes.func,\r\n }).isRequired,\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n }).isRequired,\r\n};\r\n\r\nAssociations.defaultProps = {\r\n folderAssetType: '',\r\n};\r\n\r\nconst ImagePreview = ({\r\n id, name, folderAssetType, thumbnailUrl, onRenderPreview,\r\n}) => {\r\n const classes = useImagePreviewStyles();\r\n let preview = '';\r\n if (onRenderPreview) {\r\n preview = onRenderPreview();\r\n } else if (thumbnailUrl) {\r\n preview = ();\r\n }\r\n\r\n return (\r\n
    \r\n {preview}\r\n
    \r\n );\r\n};\r\n\r\nImagePreview.propTypes = {\r\n id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\r\n name: PropTypes.string,\r\n folderAssetType: PropTypes.string,\r\n onRenderPreview: PropTypes.func,\r\n thumbnailUrl: PropTypes.string,\r\n};\r\n\r\nImagePreview.defaultProps = {\r\n id: '',\r\n name: '',\r\n folderAssetType: '',\r\n onRenderPreview: undefined,\r\n thumbnailUrl: undefined,\r\n};\r\n\r\nconst headerWithPopup = (popupId, item, helpPopup) => (\r\n <>\r\n {item.name}\r\n {helpPopup(popupId)}\r\n \r\n);\r\n\r\nexport const colPreview = (i18n, helpPopup) => ({\r\n columnId: 'colPreview',\r\n name: i18n.getString(_TL_('Preview')),\r\n onRender: item => ,\r\n onRenderHeader: item => headerWithPopup('pop_BA_AssetLibrary_Preview', item, helpPopup),\r\n compare: (a, b) => a.thumbnailUrl.localeCompare(b.thumbnailUrl),\r\n});\r\n\r\nexport const colId = (i18n, helpPopup) => ({\r\n columnId: 'colId',\r\n name: i18n.getString(_TL_('ID')),\r\n onRender: item => item.id,\r\n onRenderHeader: item => headerWithPopup('pop_BA_AssetLibrary_ID', item, helpPopup),\r\n compare: (a, b) => a.id.localeCompare(b.id),\r\n});\r\n\r\nexport const colName = (i18n, helpPopup) => ({\r\n columnId: 'colName',\r\n name: i18n.getString(_TL_('Name')),\r\n onRender: item => ,\r\n onRenderHeader: item => headerWithPopup('pop_BA_AssetLibrary_Name', item, helpPopup),\r\n compare: (a, b) => a.name.localeCompare(b.name),\r\n});\r\n\r\nexport const colPath = (i18n, helpPopup) => ({\r\n columnId: 'colPath',\r\n name: i18n.getString(_TL_('Location')),\r\n onRender: item => ,\r\n onRenderHeader: item => headerWithPopup('pop_BA_AssetLibrary_Location', item, helpPopup),\r\n compare: (a, b) => a.path.localeCompare(b.path),\r\n});\r\n\r\nexport const colType = (i18n, helpPopup) => ({\r\n columnId: 'colType',\r\n name: i18n.getString(_TL_('Type')),\r\n onRender: item => item.type,\r\n onRenderHeader: item => headerWithPopup('pop_BA_AssetLibrary_AssetType', item, helpPopup),\r\n compare: (a, b) => a.type.localeCompare(b.type),\r\n});\r\n\r\nexport const colError = (i18n, popupId, helpPopup) => ({\r\n columnId: 'colError',\r\n name: i18n.getString(_TL_('Errors')),\r\n onRender: item => ,\r\n onRenderHeader: item => headerWithPopup(popupId, item, helpPopup),\r\n compare: (a, b) => a.shortErrMsg.localeCompare(b.shortErrMsg),\r\n});\r\nexport const colDeletionError = (i18n, helpPopup) => colError(i18n, 'pop_BA_AssetLibrary_DeletionError', helpPopup);\r\nexport const colMoveError = (i18n, helpPopup) => colError(i18n, 'pop_BA_AssetLibrary_MoveError', helpPopup);\r\n\r\nexport const colAssociations = (i18n, navigation, logger, helpPopup) => ({\r\n columnId: 'colAssociations',\r\n name: i18n.getString(_TL_('Associations')),\r\n onRender: ({\r\n id, folderAssetType, availableActions,\r\n }) => (\r\n \r\n ),\r\n onRenderHeader: item => headerWithPopup('pop_BA_AssetLibrary_Associations', item, helpPopup),\r\n compare: (a, b) => a.availableActions.localeCompare(b.availableActions),\r\n});\r\n\r\nexport const columnSizingOptions = {\r\n colPreview: { minWidth: 100 },\r\n colId: { minWidth: 110, maxWidth: 110 },\r\n colName: { minWidth: 100 },\r\n colPath: { minWidth: 100 },\r\n colType: { minWidth: 80 },\r\n colError: { minWidth: 170 },\r\n colAssociations: { minWidth: 240 },\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n DataGridBody,\r\n DataGridRow,\r\n DataGrid,\r\n DataGridHeader,\r\n DataGridHeaderCell,\r\n DataGridCell,\r\n Dialog,\r\n DialogActions,\r\n DialogBody,\r\n DialogContent,\r\n DialogSurface,\r\n DialogTitle,\r\n Button,\r\n mergeClasses,\r\n} from '@fluentui/react-components';\r\n\r\nimport {\r\n useSummaryResultDialogStyles,\r\n} from '../../styles/summary-result-dialog-style';\r\n\r\nexport const SummaryResultModal = ({\r\n show,\r\n title,\r\n summary,\r\n items,\r\n columns,\r\n columnSizingOptions,\r\n onClose,\r\n i18n,\r\n}) => {\r\n const classes = useSummaryResultDialogStyles();\r\n\r\n return (\r\n show ?\r\n \r\n \r\n {title}\r\n \r\n \r\n
    {summary}
    \r\n
    \r\n \r\n \r\n \r\n {\r\n item => (\r\n {item.onRenderHeader(item)}\r\n )\r\n }\r\n \r\n \r\n \r\n {\r\n ({ item, rowId }) => (\r\n \r\n {\r\n columnItem => (\r\n {columnItem.onRender(item)}\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 : null\r\n );\r\n};\r\n\r\nSummaryResultModal.propTypes = {\r\n show: PropTypes.bool.isRequired,\r\n title: PropTypes.string.isRequired,\r\n summary: PropTypes.string,\r\n items: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n columns: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n onClose: PropTypes.func.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n columnSizingOptions: PropTypes.shape({}).isRequired,\r\n};\r\n\r\nSummaryResultModal.defaultProps = {\r\n summary: '',\r\n};\r\n","import _ from 'underscore';\r\nimport React, { useCallback, useState, useRef } from 'react';\r\n\r\nimport { FolderIcon, FolderAssetType } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n\r\nimport {\r\n colPreview, colId, colName, colPath, colType, colDeletionError, colMoveError, colAssociations, columnSizingOptions,\r\n} from './columns';\r\n\r\nimport { SummaryResultModal } from './dialog';\r\n\r\nconst ASSET_TYPES = {\r\n [FolderAssetType.Image]: _TL_('Image'),\r\n [FolderAssetType.Video]: _TL_('Video'),\r\n};\r\n\r\nexport const useSummaryResultModal = (i18n, logger, navigation, helpPopup) => {\r\n const [isModalVisible, setModalVisible] = useState(false);\r\n\r\n const titleRef = useRef('');\r\n const summaryRef = useRef('');\r\n const columnsRef = useRef([]);\r\n const itemsRef = useRef([]);\r\n\r\n const openDeleteSummaryResultModal = (title, deletedItems) => {\r\n const columns = [\r\n colPreview(i18n, helpPopup), colName(i18n, helpPopup), colPath(i18n, helpPopup), colType(i18n, helpPopup), colId(i18n, helpPopup),\r\n colDeletionError(i18n, helpPopup), colAssociations(i18n, navigation, logger, helpPopup),\r\n ];\r\n\r\n const items = _.chain(deletedItems)\r\n .filter(itm => itm.err)\r\n .map(({\r\n err, assetId, folderId, assetName, folderName, assetType, path, thumbnailUrl,\r\n }) => ({\r\n id: folderId || assetId,\r\n path,\r\n name: folderName || assetName,\r\n type: (folderId ? i18n.getString(_TL_('Folder')) : i18n.getString(ASSET_TYPES[assetType])) || '',\r\n errorMessage: i18n.getString(err.uxMessage),\r\n shortErrMsg: i18n.getString(err.shortMsg || _TL_('Error')),\r\n availableActions: err.availableActions || {},\r\n err,\r\n folderAssetType: assetType,\r\n thumbnailUrl,\r\n onRenderPreview: folderId ? () => () : undefined,\r\n }))\r\n .value() || [];\r\n\r\n const failedAssetCount = items ? _.filter(items, itm => itm.folderAssetType).length : 0;\r\n const failedFolderCount = items ? _.filter(items, itm => !itm.folderAssetType).length : 0;\r\n if (failedFolderCount > 0 && failedAssetCount > 0) {\r\n const strings = [\r\n _TL_(\"{{failedAssetCount}} asset and {{failedFolderCount}} folder couldn't be deleted:\"),\r\n _TL_(\"{{failedAssetCount}} asset and {{failedFolderCount}} folders couldn't be deleted:\"),\r\n _TL_(\"{{failedAssetCount}} assets and {{failedFolderCount}} folder couldn't be deleted:\"),\r\n _TL_(\"{{failedAssetCount}} assets and {{failedFolderCount}} folders couldn't be deleted:\"),\r\n ];\r\n const strIdx = (Math.min(failedAssetCount - 1, 1) * 2) + Math.min(failedFolderCount - 1, 1);\r\n summaryRef.current = i18n.getString(strings[strIdx], { failedAssetCount, failedFolderCount });\r\n } else if (failedFolderCount > 1) {\r\n summaryRef.current = i18n.getString(_TL_(\"{{failedFolderCount}} folders couldn't be deleted:\"), { failedFolderCount });\r\n } else if (failedFolderCount > 0) {\r\n summaryRef.current = i18n.getString(_TL_(\"1 folder couldn't be deleted:\"));\r\n } else if (failedAssetCount > 1) {\r\n summaryRef.current = i18n.getString(_TL_(\"{{failedAssetCount}} assets couldn't be deleted:\"), { failedAssetCount });\r\n } else {\r\n summaryRef.current = i18n.getString(_TL_(\"1 asset couldn't be deleted:\"));\r\n }\r\n titleRef.current = title;\r\n itemsRef.current = items;\r\n columnsRef.current = columns;\r\n\r\n setModalVisible(true);\r\n };\r\n\r\n const openFolderDeleteSummaryResultModal = (deletedItems) => {\r\n openDeleteSummaryResultModal(i18n.getString(_TL_('Folder deletion errors')), deletedItems);\r\n };\r\n\r\n const openBatchDeleteSummaryResultModal = (deletedItems) => {\r\n openDeleteSummaryResultModal(i18n.getString(_TL_('Bulk deletion errors')), deletedItems);\r\n };\r\n\r\n const openBatchMoveSummaryResultModal = ({ assetsSummary, foldersSummary }) => {\r\n const columns = [\r\n colPreview(i18n, helpPopup), colName(i18n, helpPopup), colType(i18n, helpPopup), colId(i18n, helpPopup), colMoveError(i18n, helpPopup), colAssociations(i18n, navigation, logger, helpPopup),\r\n ];\r\n\r\n const assetErrors = _.chain(assetsSummary).filter(itm => itm.err).map(({\r\n err, assetId: id, assetName: name, folderAssetType, url,\r\n }) => ({\r\n id,\r\n name,\r\n type: i18n.getString(ASSET_TYPES[folderAssetType]) || '',\r\n errorMessage: i18n.getString(err.uxMessage),\r\n shortErrMsg: i18n.getString(err.shortMsg || _TL_('Error')),\r\n availableActions: err.availableActions || {},\r\n err,\r\n folderAssetType,\r\n thumbnailUrl: url,\r\n })).value() || [];\r\n const folderErrors = _.chain(foldersSummary).filter(itm => itm.err).map(({\r\n err, folderId: id, folderName: name,\r\n }) => ({\r\n id,\r\n name,\r\n type: i18n.getString(_TL_('Folder')),\r\n errorMessage: i18n.getString(err.uxMessage),\r\n shortErrMsg: i18n.getString(err.shortMsg || _TL_('Error')),\r\n availableActions: err.availableActions || {},\r\n err,\r\n folderAssetType: '',\r\n onRenderPreview: () => (),\r\n })).value() || [];\r\n\r\n if (assetErrors.length > 0 && folderErrors.length > 0) {\r\n const strings = [\r\n _TL_(\"{{failedAssetCount}} asset and {{failedFolderCount}} folder couldn't be moved:\"),\r\n _TL_(\"{{failedAssetCount}} asset and {{failedFolderCount}} folders couldn't be moved:\"),\r\n _TL_(\"{{failedAssetCount}} assets and {{failedFolderCount}} folder couldn't be moved:\"),\r\n _TL_(\"{{failedAssetCount}} assets and {{failedFolderCount}} folders couldn't be moved:\"),\r\n ];\r\n const strIdx = (Math.min(assetErrors.length - 1, 1) * 2) + Math.min(folderErrors.length - 1, 1);\r\n summaryRef.current = i18n.getString(strings[strIdx], { failedAssetCount: assetErrors.length, failedFolderCount: folderErrors.length });\r\n } else if (assetErrors.length > 1) {\r\n summaryRef.current = i18n.getString(_TL_(\"{{failedAssetCount}} assets couldn't be moved:\"), { failedAssetCount: assetErrors.length });\r\n } else if (assetErrors.length > 0) {\r\n summaryRef.current = i18n.getString(_TL_(\"1 asset couldn't be moved:\"));\r\n } else if (folderErrors.length > 1) {\r\n summaryRef.current = i18n.getString(_TL_(\"{{failedFolderCount}} folders couldn't be moved:\"), { failedFolderCount: folderErrors.length });\r\n } else {\r\n summaryRef.current = i18n.getString(_TL_(\"1 folder couldn't be moved:\"));\r\n }\r\n titleRef.current = i18n.getString(_TL_('Bulk move errors'));\r\n itemsRef.current = [...assetErrors, ...folderErrors];\r\n columnsRef.current = columns;\r\n\r\n setModalVisible(true);\r\n };\r\n\r\n const closeModal = () => {\r\n setModalVisible(false);\r\n };\r\n\r\n const render = useCallback(() => (), [i18n, isModalVisible, logger]);\r\n\r\n return {\r\n openFolderDeleteSummaryResultModal,\r\n openBatchDeleteSummaryResultModal,\r\n openBatchMoveSummaryResultModal,\r\n render,\r\n };\r\n};\r\n","import { makeStyles, tokens } from '@fluentui/react-components';\r\n\r\nexport const useToolbarStyles = makeStyles({\r\n toolbar: {\r\n backgroundColor: tokens.colorBrandBackground,\r\n justifyContent: 'space-between',\r\n },\r\n toolbarButton: {\r\n fontWeight: 400,\r\n marginTop: '8px',\r\n marginBottom: '8px',\r\n },\r\n});\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\n\r\nimport {\r\n Toolbar,\r\n ToolbarButton,\r\n mergeClasses,\r\n} from '@fluentui/react-components';\r\nimport {\r\n DeleteRegular,\r\n ArrowStepOverRegular,\r\n DismissRegular,\r\n} from '@fluentui/react-icons';\r\n\r\nimport { useToolbarStyles } from '../styles/toolbar-style';\r\n\r\nexport const LibraryPageToolbar = ({\r\n i18n,\r\n onDelete,\r\n onMoveTo,\r\n onClear,\r\n selectedCount,\r\n}) => {\r\n const classes = useToolbarStyles();\r\n\r\n return (\r\n \r\n
    \r\n }\r\n onClick={onDelete}\r\n appearance=\"primary\"\r\n className={mergeClasses('toolbar-delete-button', classes.toolbarButton)}\r\n >\r\n {i18n.getString(_TL_('Delete'))}\r\n \r\n }\r\n onClick={onMoveTo}\r\n appearance=\"primary\"\r\n className={classNames('toolbar-move-button', classes.toolbarButton)}\r\n >\r\n {i18n.getString(_TL_('Move to folder'))}\r\n \r\n
    \r\n }\r\n onClick={onClear}\r\n appearance=\"primary\"\r\n className={classes.toolbarButton}\r\n aria-label={i18n.getString(_TL_('Clear {{selectedCount}} selected'), { selectedCount })}\r\n >\r\n {i18n.getString(_TL_('{{selectedCount}} selected'), { selectedCount })}\r\n \r\n
    \r\n );\r\n};\r\n\r\nLibraryPageToolbar.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n onDelete: PropTypes.func.isRequired,\r\n onMoveTo: PropTypes.func.isRequired,\r\n onClear: PropTypes.func.isRequired,\r\n selectedCount: PropTypes.number.isRequired,\r\n};\r\n","/* eslint-disable no-unused-vars */\r\n/* eslint-disable max-len */\r\nimport _ from 'underscore';\r\nimport { Promise } from 'bluebird';\r\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Button } from '@fluentui/react-components';\r\n\r\n// import { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\n// import {\r\n// ClarityTags, useClarityTags,\r\n// GridSectionName,\r\n// CSMLSearchLocation,\r\n// ROOT_FOLDER_ID,\r\n// RealUsedFlagSuffix,\r\n// handleRealUsedFlag,\r\n// addAssetLibrarySurveyTriggerFlag,\r\n// AssetLibrarySurveyTriggerFlag,\r\n// } from '@bingads-webui-campaign-react/asset-library-model';\r\nimport {\r\n AdsStudioLibraryPageContent, GridSectionName, AdsStudioAssetGridCell, HiddenDivForAnnounce,\r\n} from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { usePageActiveTimeTracker } from '@bingads-webui-campaign-react/common-hooks';\r\n\r\nimport { AdsStudioFoldersGridCellWithContextMenu } from './components/folders-grid-cell-with-context-menu';\r\n\r\nimport { useCreateFolderModal } from './hooks/use-create-folder-modal';\r\nimport { useDeleteFolderConfirmDialog, useBatchDeleteConfirmDialog } from './hooks/use-delete-confirm-dialog';\r\nimport { useRenameFolderModal } from './hooks/use-rename-folder-modal';\r\nimport { useSummaryResultModal } from './components/summary-result-dialog';\r\nimport { useDragAndDropConfirmDialog } from './hooks/use-drag-and-drop-confirm-dialog';\r\n\r\n// import { AddFoldersTeachingBubble } from './add-folders-teaching-bubble';\r\n// import { AssetLibraryAssetGridCell } from './cells/asset-grid-cell';\r\n// import { AssetLibraryFoldersGridCellWithContextMenu } from './cells/folders-grid-cell-with-context-menu';\r\n// import { useAssetGridCellActions } from './cells/use-asset-grid-cell-actions';\r\n// import { CustomAddAssetsButton } from './custom-add-assets-button';\r\nimport { LibraryPageToolbar } from './components/toolbar';\r\nimport { FolderAssetType } from '../../../../ads-studio-app-shared-components/src/model';\r\n\r\nexport const LibraryPageComponent = ({\r\n dataService,\r\n navigation,\r\n i18n,\r\n dateFormat,\r\n ianaTimeZone,\r\n assetLibraryUserPreferences,\r\n adsStudioUserPreferences,\r\n assetLibraryAccountPreferences,\r\n reload,\r\n logger,\r\n isReadonly,\r\n pagePerfMarker: libraryPagePerfMarker,\r\n allowedAssetType,\r\n aid,\r\n cid,\r\n oDataConfig,\r\n isAdsStudioAIGCMVPEnabled,\r\n isAIGCRegionRestricted,\r\n useBatchMoveModalHook,\r\n notificationApi,\r\n renderHelpPopup,\r\n targetDropFolder,\r\n resetTargetDropFolder,\r\n setDataLoaded,\r\n permissions,\r\n ...rest\r\n}) => {\r\n const [reloadingFolders, setReloadingFolders] = useState(false);\r\n\r\n const [searchLocationFilter, setSearchLocationFilter] = useState(null);\r\n\r\n const [selectedAssets, setSelectedAssets] = useState([]);\r\n const [selectedFolders, setSelectedFolders] = useState([]);\r\n const [batchDeleteWarningMsg, setBatchDeleteWarningMsg] = useState('');\r\n const singleImagePromises = useRef({});\r\n\r\n /* istanbul ignore next */\r\n const selectedItemCount = useMemo(() => (selectedAssets ? selectedAssets.length : 0)\r\n + (selectedFolders ? selectedFolders.length : 0), [selectedAssets, selectedFolders]);\r\n\r\n const createFolderModal = useCreateFolderModal(aid, i18n, logger);\r\n const renameFolderModal = useRenameFolderModal(i18n, logger);\r\n const confirmDeleteFolderDialog = useDeleteFolderConfirmDialog(i18n, logger);\r\n const confirmBatchDeleteDialog = useBatchDeleteConfirmDialog(i18n, logger);\r\n const confirmDragAndDropDialog = useDragAndDropConfirmDialog(i18n, logger);\r\n const batchMoveModal = useBatchMoveModalHook({\r\n i18n, logger, aid, cid, oDataConfig, dateFormat, notificationApi, ...rest,\r\n });\r\n const summaryResultModal = useSummaryResultModal(i18n, logger, navigation, renderHelpPopup);\r\n\r\n // reset selection state when changing folders\r\n const resetSelectionState = useCallback(() => {\r\n setSelectedFolders([]);\r\n setSelectedAssets([]);\r\n }, []);\r\n\r\n // const {\r\n // onCellEditClick, onCellDetailsClick,\r\n // } = useAssetGridCellActions({\r\n // logger, navigation, resetSelectionState, preference: assetLibraryAccountPreferences,\r\n // });\r\n\r\n const {\r\n assets,\r\n loadMoreData,\r\n totalAssetCount,\r\n createFolder,\r\n reloadFolders,\r\n navigateIntoFolder,\r\n deleteFolder,\r\n renameFolder,\r\n batchDelete,\r\n batchMove,\r\n currentFolderId,\r\n resetFolderData,\r\n folders,\r\n getImageById,\r\n reloadFolderPathTreeItem,\r\n renameAsset,\r\n } = dataService;\r\n\r\n useEffect(() => {\r\n if (navigation) {\r\n navigation.updateAssetDetailsParams({ assets });\r\n }\r\n }, [assets, navigation]);\r\n\r\n useEffect(() => () => {\r\n resetTargetDropFolder();\r\n }, [resetTargetDropFolder]);\r\n\r\n useEffect(() => {\r\n resetSelectionState();\r\n }, [currentFolderId, resetSelectionState]);\r\n\r\n usePageActiveTimeTracker(logger, 'Library');\r\n\r\n /* istanbul ignore next */\r\n const showNotificationError = useCallback((msg, options) => {\r\n const { buttonLabel, onButtonClick, autoClose = true } = options || {};\r\n let nid = null;\r\n const onClick = () => {\r\n /* istanbul ignore if */\r\n if (nid && autoClose) {\r\n notificationApi.dismiss(nid);\r\n nid = null;\r\n }\r\n onButtonClick();\r\n };\r\n /* istanbul ignore if */\r\n if (msg && buttonLabel && onButtonClick) {\r\n // eslint-disable-next-line react/no-danger\r\n nid = notificationApi.showWarning({' '});\r\n } else if (msg) {\r\n notificationApi.showWarning(msg);\r\n }\r\n }, [notificationApi]);\r\n\r\n // useClarityTags([ClarityTags.LaunchedAssetLibrary]);\r\n\r\n // reset selection when current folder changes\r\n useEffect(() => {\r\n resetSelectionState();\r\n }, [currentFolderId, resetSelectionState]);\r\n\r\n useEffect(() => {\r\n /* istanbul ignore if */\r\n if (targetDropFolder && targetDropFolder.newTargetFolder) {\r\n confirmDragAndDropDialog.open({ targetFolder: targetDropFolder.folder });\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [targetDropFolder]);\r\n\r\n const onCreateFolderClick = useCallback(() => {\r\n // create folder\r\n createFolderModal.open();\r\n }, [createFolderModal]);\r\n\r\n const renderTilesGridCell = useCallback(({\r\n item, index, searchText, sectionName, selected, selectItem,\r\n }) => {\r\n const onSelectCell = () => {\r\n selectItem(!selected);\r\n };\r\n\r\n const onDrag = () => {\r\n if (!selected) {\r\n selectItem(true);\r\n }\r\n };\r\n\r\n // render default folder cells\r\n if (sectionName === GridSectionName.Folder) {\r\n const currentListItem = document.getElementById(`list-item-${index}`);\r\n\r\n const onFolderClick = () => {\r\n const { folderId } = item || {};\r\n if (folderId) {\r\n resetSelectionState();\r\n navigateIntoFolder({ id: folderId });\r\n logger.logTrace('Navigate into folder in asset library', { folderId });\r\n }\r\n };\r\n\r\n const onSelectFolder = () => {\r\n onSelectCell();\r\n if (currentListItem) {\r\n currentListItem.focus();\r\n }\r\n };\r\n\r\n const onSelectMenuItemClick = () => {\r\n setSelectedFolders([item]);\r\n selectItem(true);\r\n if (currentListItem) {\r\n currentListItem.focus();\r\n }\r\n };\r\n\r\n const onRenameMenuItemClick = (renameItem) => {\r\n // handleRealUsedFlag(assetLibraryAccountPreferences, RealUsedFlagSuffix.App);\r\n renameFolderModal.open(renameItem);\r\n };\r\n\r\n const onDeleteMenuItemClick = (deleteItem) => {\r\n // handleRealUsedFlag(assetLibraryAccountPreferences, RealUsedFlagSuffix.App);\r\n confirmDeleteFolderDialog.open(deleteItem);\r\n };\r\n\r\n const onDrop = () => {\r\n confirmDragAndDropDialog.open({ targetFolder: item });\r\n };\r\n\r\n const onViewPerformanceClick = (subFolder) => {\r\n const { folderId, folderName } = subFolder || {};\r\n logger.logTrace(`Clicked view performance context menu item, folderId: ${folderId}, folderName: ${folderName}`);\r\n if (folderId) {\r\n resetSelectionState();\r\n resetFolderData();\r\n navigateIntoFolder({ id: folderId });\r\n navigation.gotoPerformancePage();\r\n }\r\n };\r\n\r\n const FoldersGridCell = AdsStudioFoldersGridCellWithContextMenu;\r\n\r\n return (\r\n
    \r\n 0}\r\n selected={selected}\r\n allowedAssetType={allowedAssetType}\r\n onSelectMenuItemClick={onSelectMenuItemClick}\r\n onOpenMenuItemClick={onFolderClick}\r\n onRenameMenuItemClick={onRenameMenuItemClick}\r\n onDeleteMenuItemClick={onDeleteMenuItemClick}\r\n onViewPerformanceClick={onViewPerformanceClick}\r\n isReadonly={isReadonly}\r\n selectedItemCount={selectedItemCount}\r\n draggable\r\n onDrag={onDrag}\r\n droppable={!selected}\r\n onDrop={onDrop}\r\n />\r\n
    \r\n );\r\n }\r\n\r\n const onCellDetailsClick = (assetItem) => {\r\n const { id, folderAssetType } = assetItem || {};\r\n resetSelectionState();\r\n navigation.gotoAssetDetails({\r\n assetId: id, assets, totalAssetCount, folderAssetType, loadMoreData, renameAsset,\r\n });\r\n };\r\n\r\n const onCellEditClick = (assetItem) => {\r\n const { id } = assetItem || {};\r\n /* istanbul ignore if */\r\n if (assetItem && assetItem.folderAssetType === FolderAssetType.Video && assetItem.id && assetItem.metaData) {\r\n if (logger && logger.logTrace) {\r\n logger.logTrace('Video Details: edit video', { assetId: id });\r\n }\r\n navigation.gotoEditVideoPage({ videoId: item.id });\r\n } else if (assetItem && assetItem.folderAssetType === FolderAssetType.Image) {\r\n if (logger && logger.logTrace) {\r\n logger.logTrace('Image Details: edit image', { assetId: id });\r\n }\r\n navigation.gotoEditImagePage({ imageId: id, folderId: currentFolderId });\r\n }\r\n };\r\n\r\n return (\r\n 0}\r\n permissions={permissions}\r\n />\r\n );\r\n }, [allowedAssetType, assets, confirmDeleteFolderDialog, confirmDragAndDropDialog, currentFolderId, i18n, isReadonly, loadMoreData, logger, navigateIntoFolder, navigation, renameAsset, renameFolderModal, resetFolderData, resetSelectionState, selectedItemCount, totalAssetCount, permissions]);\r\n\r\n const renderToolbar = useCallback(() => {\r\n const onDeleteClick = (item) => {\r\n // handleRealUsedFlag(assetLibraryAccountPreferences, RealUsedFlagSuffix.App);\r\n confirmBatchDeleteDialog.open(item);\r\n };\r\n\r\n const onMoveToClick = (item) => {\r\n // handleRealUsedFlag(assetLibraryAccountPreferences, RealUsedFlagSuffix.App);\r\n batchMoveModal.open(item);\r\n };\r\n\r\n return (\r\n selectedItemCount > 0 ?\r\n
    \r\n \r\n
    : null\r\n );\r\n }, [selectedItemCount, isReadonly, i18n, resetSelectionState, confirmBatchDeleteDialog, batchMoveModal]);\r\n\r\n const onFailedToLoadData = useCallback(() => {\r\n notificationApi.showWarning(i18n.getString(_TL_('Failed to load assets. Please refresh the page and try again.')));\r\n }, [i18n, notificationApi]);\r\n\r\n const onSelectionChange = useCallback(({\r\n sectionName, selectedItems, item, selected,\r\n }) => {\r\n if (sectionName === GridSectionName.Folder) {\r\n setSelectedFolders([...selectedItems]);\r\n } else if (sectionName === GridSectionName.Asset) {\r\n if (selected && getImageById && item && item.metadata) {\r\n // preload image data\r\n const {\r\n id = '',\r\n } = item;\r\n singleImagePromises.current[id] = getImageById({ imageId: id, useCache: false });\r\n }\r\n setSelectedAssets([...selectedItems]);\r\n }\r\n }, [getImageById]);\r\n\r\n useEffect(() => {\r\n if (getImageById && selectedAssets.length > 0) {\r\n const checkSelectedAssetsPromise = selectedAssets.map((asset) => {\r\n if (asset && asset.metadata) {\r\n const {\r\n id = '',\r\n } = asset;\r\n const previousPromise = singleImagePromises.current[id];\r\n return previousPromise || getImageById({ imageId: id, useCache: false });\r\n }\r\n return Promise.resolve({});\r\n });\r\n\r\n Promise.all(checkSelectedAssetsPromise).then((assetsList) => {\r\n const hasVideoImage = assetsList.some(asset => asset && asset.isSceneKeyFrame);\r\n if (hasVideoImage) {\r\n setBatchDeleteWarningMsg(i18n.getString(_TL_('Deleted images will still serve in any video ads that currently use it and cannot be edited.')));\r\n } else {\r\n setBatchDeleteWarningMsg('');\r\n }\r\n });\r\n }\r\n }, [getImageById, i18n, selectedAssets]);\r\n\r\n const sectionSelectedItems = useMemo(() => ({\r\n [GridSectionName.Folder]: selectedFolders,\r\n [GridSectionName.Asset]: selectedAssets,\r\n }), [selectedAssets, selectedFolders]);\r\n\r\n const callAsyncApi = useCallback(asyncApi => (...params) => {\r\n setReloadingFolders(true);\r\n return asyncApi(...params).then((result) => {\r\n // reload grids\r\n reloadFolders().finally(() => {\r\n setReloadingFolders(false);\r\n });\r\n const destFolderId = params[0] && params[0].destFolderId;\r\n const reloadFolderPathTreeFolderIdArr = [currentFolderId];\r\n if (destFolderId) {\r\n reloadFolderPathTreeFolderIdArr.push(destFolderId);\r\n }\r\n // reload folder path tree\r\n reloadFolderPathTreeItem(reloadFolderPathTreeFolderIdArr);\r\n return result;\r\n }).tapCatch(() => {\r\n setReloadingFolders(false);\r\n }).finally(() => {\r\n resetSelectionState();\r\n });\r\n }, [currentFolderId, reloadFolderPathTreeItem, reloadFolders, resetSelectionState]);\r\n\r\n const createFolderAsync = callAsyncApi(createFolder);\r\n const renameFolderAsync = callAsyncApi(renameFolder);\r\n const deleteFolderAsync = callAsyncApi(deleteFolder);\r\n const batchDeleteAsync = callAsyncApi(({ onItemDeleted }) => batchDelete({ folders: selectedFolders, assets: selectedAssets, onItemDeleted }));\r\n const batchMoveAsync = callAsyncApi(({ destFolderId }) => batchMove({ destFolderId, folders: selectedFolders, assets: selectedAssets }));\r\n\r\n const onCreateFolderSuccess = (folderName) => {\r\n notificationApi.showInfo(i18n.getString(_TL_('Your folder {{name}} was successfully created.'), { name: folderName }));\r\n };\r\n\r\n const onRenameFolderSuccess = ({ folderName, newFolderName }) => {\r\n notificationApi.showInfo(i18n.getString(_TL_('The {{folderName}} folder was successfully renamed to {{newFolderName}}.'), { folderName, newFolderName }));\r\n };\r\n\r\n const onDeleteFolderSuccess = ({ deletedItems, folderName }) => {\r\n if (_.find(deletedItems, itm => !!itm.err)) {\r\n showNotificationError(i18n.getString(_TL_(\"The {{folderName}} folder couldn't be deleted due to errors. To review the errors, select \"), { folderName }), {\r\n buttonLabel: i18n.getString(_TL_('View details')),\r\n onButtonClick: () => {\r\n logger.logTrace('View deleting folder details result');\r\n summaryResultModal.openFolderDeleteSummaryResultModal(deletedItems);\r\n },\r\n });\r\n } else {\r\n notificationApi.showInfo(i18n.getString(_TL_('The {{folderName}} folder was successfully deleted.'), { folderName }));\r\n }\r\n };\r\n\r\n const onBatchDeleteSuccess = ({ deletedItems, folderCount, assetCount }) => {\r\n if (_.find(deletedItems, itm => !!itm.err)) {\r\n showNotificationError(i18n.getString(_TL_(\"One or more items couldn't be deleted due to errors. To review the errors, select \")), {\r\n buttonLabel: i18n.getString(_TL_('View details')),\r\n onButtonClick: () => {\r\n logger.logTrace('View batch deleting details result');\r\n summaryResultModal.openBatchDeleteSummaryResultModal(deletedItems);\r\n },\r\n });\r\n } else {\r\n notificationApi.showInfo(i18n.getString(\r\n _TL_('({{folderCount}} folders, {{assetCount}} assets) were successfully deleted.'),\r\n { folderCount, assetCount }\r\n ));\r\n }\r\n };\r\n\r\n const onBatchMoveSuccess = ({ assetsSummary, foldersSummary, hasError }) => {\r\n if (hasError) {\r\n showNotificationError(i18n.getString(_TL_(\"One or more items couldn't be moved due to errors. To review the errors, select \")), {\r\n buttonLabel: i18n.getString(_TL_('View details')),\r\n onButtonClick: () => {\r\n logger.logTrace('View batch moving details result');\r\n summaryResultModal.openBatchMoveSummaryResultModal({ assetsSummary, foldersSummary });\r\n },\r\n });\r\n } else {\r\n notificationApi.showInfo(i18n.getString(\r\n _TL_('All items ({{folderCount}} folders, {{assetCount}} assets) were successfully moved. '),\r\n { folderCount: foldersSummary.length, assetCount: assetsSummary.length }\r\n ));\r\n }\r\n };\r\n\r\n return (\r\n
    \r\n \r\n \r\n {createFolderModal.render(createFolderAsync, onCreateFolderSuccess, showNotificationError)}\r\n {renameFolderModal.render(renameFolderAsync, onRenameFolderSuccess, showNotificationError)}\r\n {confirmBatchDeleteDialog.render(batchDeleteAsync, onBatchDeleteSuccess, showNotificationError, batchDeleteWarningMsg)}\r\n {confirmDeleteFolderDialog.render(deleteFolderAsync, onDeleteFolderSuccess, showNotificationError)}\r\n {confirmDragAndDropDialog.render(batchMoveAsync, onBatchMoveSuccess, showNotificationError)}\r\n {batchMoveModal.render(false, currentFolderId, batchMoveAsync, onBatchMoveSuccess, showNotificationError)}\r\n {summaryResultModal.render()}\r\n
    \r\n );\r\n};\r\n\r\nLibraryPageComponent.propTypes = {\r\n dataService: PropTypes.shape({\r\n assets: PropTypes.arrayOf(PropTypes.shape({})),\r\n folders: PropTypes.arrayOf(PropTypes.shape({})),\r\n totalAssetCount: PropTypes.number,\r\n imageCroppingTasks: PropTypes.shape({}),\r\n loadData: PropTypes.func,\r\n loadMoreData: PropTypes.func,\r\n createFolder: PropTypes.func,\r\n reloadFolders: PropTypes.func,\r\n navigateIntoFolder: PropTypes.func,\r\n deleteFolder: PropTypes.func,\r\n renameFolder: PropTypes.func,\r\n batchDelete: PropTypes.func,\r\n batchMove: PropTypes.func,\r\n resetFolderData: PropTypes.func,\r\n getImageById: PropTypes.func,\r\n currentFolderId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n reloadFolderPathTreeItem: PropTypes.func,\r\n renameAsset: PropTypes.func,\r\n }).isRequired,\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n logError: PropTypes.func,\r\n }).isRequired,\r\n navigation: PropTypes.shape({\r\n gotoAddImage: PropTypes.func.isRequired,\r\n gotoEditImage: PropTypes.func.isRequired,\r\n gotoItemDetail: PropTypes.func.isRequired,\r\n gotoVideoDetail: PropTypes.func,\r\n gotoPerformancePage: PropTypes.func.isRequired,\r\n // goBack: PropTypes.func.isRequired,\r\n }).isRequired,\r\n // lcid: PropTypes.number.isRequired,\r\n ianaTimeZone: PropTypes.string.isRequired,\r\n dateFormat: PropTypes.string.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n getToday: PropTypes.func,\r\n formatCivilDate: PropTypes.func,\r\n }).isRequired,\r\n aid: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\r\n cid: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\r\n oDataConfig: PropTypes.shape({}).isRequired,\r\n assetLibraryUserPreferences: PropTypes.shape({\r\n sortBy: PropTypes.string,\r\n setSortBy: PropTypes.func,\r\n }),\r\n assetLibraryAccountPreferences: PropTypes.shape({}),\r\n isReadonly: PropTypes.bool,\r\n reload: PropTypes.shape({}), // if changed, force to reload\r\n perfMarker: PropTypes.shape({\r\n done: PropTypes.func,\r\n }).isRequired,\r\n allowedAssetType: PropTypes.string,\r\n isAssetLibraryAIGCMVPEnabled: PropTypes.bool,\r\n isAdsStudioAIGCMVPEnabled: PropTypes.bool,\r\n useBatchMoveModalHook: PropTypes.func.isRequired,\r\n renderHelpPopup: PropTypes.func.isRequired,\r\n notificationApi: PropTypes.shape({\r\n showInfo: PropTypes.func,\r\n showWarning: PropTypes.func,\r\n dismiss: PropTypes.func,\r\n }).isRequired,\r\n targetDropFolder: PropTypes.shape({}),\r\n isAIGCRegionRestricted: PropTypes.bool,\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({}),\r\n }),\r\n};\r\n\r\nLibraryPageComponent.defaultProps = {\r\n assetLibraryUserPreferences: null,\r\n assetLibraryAccountPreferences: null,\r\n isReadonly: false,\r\n reload: null,\r\n allowedAssetType: null,\r\n isAssetLibraryAIGCMVPEnabled: false,\r\n isAdsStudioAIGCMVPEnabled: false,\r\n targetDropFolder: null,\r\n isAIGCRegionRestricted: false,\r\n permissions: { dynamic: {} },\r\n};\r\n","import React, { useState, useCallback, useRef } from 'react';\r\n\r\nimport { ConfirmDialog } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n\r\nexport const useDragAndDropConfirmDialog = (i18n, logger) => {\r\n const [showConfirmDialog, setShowConfirmDialog] = useState(false);\r\n const [showUIBlocker, setShowUIBlocker] = useState(false);\r\n const targetFolderItemRef = useRef();\r\n\r\n const open = ({ targetFolder }) => {\r\n setShowConfirmDialog(true);\r\n targetFolderItemRef.current = targetFolder;\r\n };\r\n\r\n const render = useCallback((batchMoveApiAsync, onSuccess, onError) => {\r\n const targetFolderItem = targetFolderItemRef.current;\r\n\r\n const { folderId, folderName } = targetFolderItem || {};\r\n\r\n const title = i18n.getString(_TL_('Are you sure you want to move the selected item(s) to the folder \"{{folderName}}\"?'), { folderName });\r\n\r\n const batchMoveApiAsyncWrapper = () => {\r\n setShowUIBlocker(true);\r\n return batchMoveApiAsync({ destFolderId: folderId })\r\n .then((result) => {\r\n onSuccess(result);\r\n\r\n const { hasError } = result || {};\r\n if (hasError) {\r\n logger.logTrace('Drag and drop to move items is done with some errors');\r\n } else {\r\n logger.logTrace('Drag and drop to move items successfully');\r\n }\r\n }).catch((alODataErr) => {\r\n const { getUXMessage } = alODataErr;\r\n logger.logError(alODataErr);\r\n onError(getUXMessage(i18n));\r\n }).finally(() => {\r\n setShowUIBlocker(false);\r\n setShowConfirmDialog(false);\r\n });\r\n };\r\n\r\n const onCancel = () => {\r\n setShowConfirmDialog(false);\r\n };\r\n\r\n return ();\r\n }, [i18n, logger, showConfirmDialog, showUIBlocker]);\r\n\r\n return {\r\n open,\r\n render,\r\n };\r\n};\r\n","import React, { useRef, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useJsData } from '@bingads-webui-cc-react/js-data-rest';\r\nimport {\r\n getEntryCardData,\r\n AddAssetEntryCard,\r\n isValidXandrAccount,\r\n} from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n\r\nimport { useVideoCardContainerStyle } from '../../styles';\r\n\r\nexport const AssetsEntryCardContainer = ({\r\n i18n,\r\n aid,\r\n cid,\r\n oDataConfig,\r\n navigation,\r\n logger,\r\n permissions,\r\n}) => {\r\n const classes = useVideoCardContainerStyle();\r\n const openSystemUploadRef = useRef(null);\r\n const isVideoTemplateEnabled = permissions && permissions.dynamic && permissions.dynamic.VideoTemplateUI;\r\n const isXandrIntEnabled = useMemo(() => permissions.dynamic.XandrIntegrationEnabled, [permissions]);\r\n // eslint-disable-next-line no-restricted-globals\r\n const { data: account } = useJsData(jsData => (isXandrIntEnabled ? jsData.Account.find(aid) : Promise.resolve()), [aid, isXandrIntEnabled]);\r\n const isXandrIntegrationEnabled = useMemo(() => (isXandrIntEnabled ? isValidXandrAccount(account) : false), [account, isXandrIntEnabled]);\r\n\r\n let cardKeys = isVideoTemplateEnabled ? ['Create', 'Upload', 'Website'] : ['Upload', 'Website'];\r\n\r\n if (isXandrIntegrationEnabled) {\r\n cardKeys = [...cardKeys, 'Invest'];\r\n }\r\n\r\n const cardData = getEntryCardData({\r\n i18n,\r\n isVideoPage: true,\r\n cardKeys,\r\n onClickCreate: () => {\r\n navigation.gotoVideoTemplatePage({\r\n aid, cid, oDataConfig, i18n,\r\n });\r\n },\r\n onClickUpload: () => {\r\n openSystemUploadRef.current = {};\r\n navigation.gotoUploadFilesPanelPage({\r\n aid, cid, oDataConfig, i18n, mode: 'video', openSystemUpload: openSystemUploadRef.current,\r\n });\r\n },\r\n onClickWebsite: () => {\r\n if (logger && logger.logTrace) {\r\n logger.logTrace('Add video from URl');\r\n }\r\n navigation.gotoAddVideoPanelPage({\r\n aid, cid, oDataConfig, i18n,\r\n });\r\n },\r\n onClickInvest: () => {\r\n if (logger && logger.logTrace) {\r\n logger.logTrace('Add asset from invest');\r\n }\r\n navigation.gotoInvestVideoPanelPage({\r\n aid, cid, oDataConfig, i18n,\r\n });\r\n },\r\n isXandrIntegrationEnabled,\r\n });\r\n\r\n return (\r\n <>\r\n
    \r\n {cardData.map(card => (\r\n \r\n ))}\r\n
    \r\n \r\n );\r\n};\r\n\r\n\r\nAssetsEntryCardContainer.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n aid: PropTypes.number.isRequired,\r\n cid: PropTypes.number.isRequired,\r\n oDataConfig: PropTypes.shape({}).isRequired,\r\n navigation: PropTypes.shape({\r\n gotoUploadFilesPanelPage: PropTypes.func,\r\n gotoAddVideoPanelPage: PropTypes.func,\r\n gotoInvestVideoPanelPage: PropTypes.func,\r\n }).isRequired,\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n }).isRequired,\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({}),\r\n }),\r\n};\r\n\r\nAssetsEntryCardContainer.defaultProps = {\r\n permissions: { dynamic: {} },\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { mergeClasses } from '@fluentui/react-components';\r\nimport { AssetsEntryCardContainer } from './assets-entry-cards-container';\r\nimport { useVideoPageTopBannerContainerStyle } from '../../styles';\r\n\r\nconst TopVideoPageBannerComponent = ({\r\n i18n,\r\n aid,\r\n cid,\r\n oDataConfig,\r\n navigation,\r\n logger,\r\n permissions,\r\n}) => {\r\n const classes = useVideoPageTopBannerContainerStyle();\r\n return (\r\n
    \r\n
    \r\n
    \r\n {i18n.getString(_TL_('Videos'))}\r\n
    \r\n
    \r\n {i18n.getString(_TL_('Add new videos or search for existing ones'))}\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n );\r\n};\r\n\r\nTopVideoPageBannerComponent.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n aid: PropTypes.number.isRequired,\r\n cid: PropTypes.number.isRequired,\r\n oDataConfig: PropTypes.shape({}).isRequired,\r\n navigation: PropTypes.shape({}).isRequired,\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n }).isRequired,\r\n};\r\n\r\nexport default TopVideoPageBannerComponent;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { mergeClasses } from '@fluentui/react-components';\r\nimport { EmptyViewIcons } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n\r\nimport { useVideoEmptyViewStyle } from '../../styles';\r\n\r\nexport const VideoEmptyView = ({ i18n, isFilterResult }) => {\r\n const classes = useVideoEmptyViewStyle();\r\n\r\n return (\r\n
    \r\n
    \r\n \"Empty\r\n
    \r\n
    \r\n {isFilterResult ? i18n.getString(_TL_('No videos match your search. Please try again.')) : i18n.getString(_TL_('You haven\\'t added any videos yet. Choose from the options above.'))}\r\n
    \r\n
    \r\n );\r\n};\r\n\r\nVideoEmptyView.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n isFilterResult: PropTypes.bool,\r\n};\r\n\r\nVideoEmptyView.defaultProps = {\r\n isFilterResult: false,\r\n};\r\n","import _ from 'underscore';\r\nimport React, { useCallback, useMemo, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n AdsStudioAssetGridCell,\r\n GridSectionName,\r\n SectionTilesGrid,\r\n DEFAULT_PAGE_SIZE,\r\n} from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n\r\nexport const VideoGridView = ({\r\n i18n,\r\n dataService,\r\n logger,\r\n onFailedToLoadData,\r\n searchText,\r\n navigation,\r\n permissions,\r\n}) => {\r\n const {\r\n assets,\r\n totalAssetCount,\r\n loadMoreData,\r\n renameAsset,\r\n } = dataService;\r\n\r\n const videosGridSection = useMemo(() => ({\r\n sectionName: GridSectionName.Asset,\r\n sectionClassName: 'ads-studio-video-section',\r\n itemKey: 'id',\r\n items: assets,\r\n totalItemCount: totalAssetCount,\r\n config: {\r\n scrollContainer: '[role=\"main\"]',\r\n minItemHeight: 42,\r\n },\r\n }), [assets, totalAssetCount]);\r\n\r\n const sectionGridData = useMemo(\r\n () => ([videosGridSection]),\r\n [videosGridSection]\r\n );\r\n\r\n const onRenderCell = useCallback(({ item }) => {\r\n const { _index, id, folderAssetType } = item;\r\n\r\n const onCellDetailsClick = () => {\r\n navigation.gotoAssetDetails({\r\n assetId: id, assets, totalAssetCount, folderAssetType, loadMoreData, renameAsset,\r\n });\r\n };\r\n\r\n /* istanbul ignore next */\r\n const onEditClick = () => {\r\n if (item && item.id && item.metaData) {\r\n navigation.gotoEditVideoPage({ videoId: item.id });\r\n }\r\n };\r\n\r\n return (\r\n \r\n );\r\n }, [assets, i18n, loadMoreData, logger, navigation, renameAsset, searchText, totalAssetCount]);\r\n\r\n const loadNextPage = useCallback(() => {\r\n loadMoreData({ count: DEFAULT_PAGE_SIZE }).catch((err) => {\r\n onFailedToLoadData(err);\r\n });\r\n }, [loadMoreData, onFailedToLoadData]);\r\n\r\n useEffect(() => {\r\n if (navigation) {\r\n navigation.updateAssetDetailsParams({ assets });\r\n }\r\n }, [assets, navigation]);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nVideoGridView.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n dataService: PropTypes.shape({}),\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n }).isRequired,\r\n onFailedToLoadData: PropTypes.func,\r\n searchText: PropTypes.string,\r\n navigation: PropTypes.shape({}).isRequired,\r\n};\r\n\r\nVideoGridView.defaultProps = {\r\n dataService: {},\r\n onFailedToLoadData: _.noop,\r\n searchText: '',\r\n};\r\n","import _ from 'underscore';\r\nimport { mergeClasses } from '@fluentui/react-components';\r\nimport React, { useContext, useEffect, useState, useCallback, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n VideosFilterBar,\r\n FilterContext,\r\n FolderAssetType,\r\n AdsStudioSpinner,\r\n CSMLVideoDuration,\r\n} from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { Overlay } from '@bingads-webui-react/fabric-control';\r\nimport { usePageActiveTimeTracker } from '@bingads-webui-campaign-react/common-hooks';\r\n\r\nimport { VideoPageTopBannerComponent, VideoEmptyView, VideoGridView } from './components';\r\nimport { useVideoPageStyle } from '../styles';\r\n\r\nexport const VideosPageComponent = ({\r\n i18n,\r\n logger,\r\n adsStudioUserPreferences,\r\n aid,\r\n cid,\r\n oDataConfig,\r\n dataService,\r\n notificationApi,\r\n navigation,\r\n reload,\r\n pagePerfMarker: videoPagePerfMarker,\r\n permissions,\r\n setDataLoaded,\r\n}) => {\r\n const classes = useVideoPageStyle();\r\n\r\n const {\r\n totalAssetCount,\r\n loadData,\r\n } = dataService;\r\n\r\n const [isPageInited, setPageInited] = useState(false);\r\n const [loadingData, setLoadingData] = useState(false);\r\n\r\n const { filterBar } = useContext(FilterContext);\r\n\r\n const {\r\n searchText,\r\n sortBy,\r\n minDurationFilter,\r\n maxDurationFilter,\r\n } = useMemo(() => filterBar.getFilters(), [filterBar]);\r\n\r\n const onFailedToLoadData = useCallback(() => {\r\n notificationApi.showWarning(i18n.getString(_TL_('Failed to load videos. Please refresh the page and try again.')));\r\n }, [i18n, notificationApi]);\r\n\r\n // init page\r\n useEffect(() => {\r\n if (!isPageInited) {\r\n setPageInited(true);\r\n }\r\n }, [isPageInited]);\r\n\r\n usePageActiveTimeTracker(logger, 'Video');\r\n\r\n // load data for initial page load\r\n useEffect(() => {\r\n if (!isPageInited) {\r\n // wait until page is initialized\r\n return;\r\n }\r\n\r\n if (reload) { // Important! Add a trivial log so that reload will be an explicit dep.\r\n logger.logTrace('force to reload');\r\n }\r\n videoPagePerfMarker.willFetchData();\r\n setLoadingData(true);\r\n loadData({\r\n assetTypeFilter: FolderAssetType.Image,\r\n isGlobalSearch: true,\r\n searchText,\r\n sortBy,\r\n perfMarker: videoPagePerfMarker.createChild('videoPageLoadData'),\r\n isVideoDurationBoundaryIncluded: true,\r\n minVideoDuration: minDurationFilter,\r\n maxVideoDuration: maxDurationFilter > CSMLVideoDuration.max ? null : maxDurationFilter, // when maxDurationFilter is over max value, remove the maxVideoDuration filter\r\n })\r\n .catch(() => {\r\n onFailedToLoadData();\r\n }).finally(() => {\r\n setLoadingData(false);\r\n videoPagePerfMarker.willRender();\r\n if (setDataLoaded) {\r\n setDataLoaded();\r\n }\r\n });\r\n }, [isPageInited, loadData, onFailedToLoadData, searchText, sortBy, reload, logger, minDurationFilter, maxDurationFilter]);\r\n\r\n const isPageLoading = !isPageInited || loadingData;\r\n const isFilterResult = useMemo(() => (\r\n !_.isEmpty(searchText)\r\n || !(minDurationFilter === CSMLVideoDuration.min && maxDurationFilter === CSMLVideoDuration.unlimited)\r\n ), [maxDurationFilter, minDurationFilter, searchText]);\r\n\r\n return (\r\n
    \r\n {isPageLoading && (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n {\r\n totalAssetCount && totalAssetCount > 0 ?\r\n :\r\n \r\n }\r\n
    \r\n );\r\n};\r\n\r\nVideosPageComponent.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n dataService: PropTypes.shape({}),\r\n notificationApi: PropTypes.shape({}),\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n }).isRequired,\r\n aid: PropTypes.number.isRequired,\r\n cid: PropTypes.number.isRequired,\r\n oDataConfig: PropTypes.shape({}).isRequired,\r\n adsStudioUserPreferences: PropTypes.shape({}),\r\n reload: PropTypes.shape({}),\r\n navigation: PropTypes.shape({}).isRequired,\r\n};\r\n\r\nVideosPageComponent.defaultProps = {\r\n dataService: {},\r\n notificationApi: {},\r\n adsStudioUserPreferences: undefined,\r\n reload: null,\r\n};\r\n","import { makeStyles, shorthands, tokens } from '@fluentui/react-components';\r\n\r\nexport const useTemplateVideoStyles = makeStyles({\r\n videoCard: {\r\n width: '300px',\r\n filter: 'drop-shadow(0px 0.3px 0.9px rgba(0, 0, 0, 0.1)) drop-shadow(0px 1.6px 3.6px rgba(0, 0, 0, 0.13))',\r\n ...shorthands.padding(tokens.spacingVerticalNone, tokens.spacingHorizontalNone),\r\n ...shorthands.borderRadius('6px'),\r\n },\r\n videoCardThumbnail: {\r\n objectFit: 'cover',\r\n ...shorthands.overflow('hidden'),\r\n },\r\n flexColumn: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'flex-start',\r\n justifyContent: 'center',\r\n },\r\n templateWithCaption: {\r\n ...shorthands.gap(tokens.spacingVerticalM),\r\n },\r\n caption: {\r\n ...shorthands.gap(tokens.spacingVerticalXS),\r\n },\r\n darkGrayText: {\r\n color: '3B3B4F',\r\n },\r\n grayText: {\r\n color: tokens.colorNeutralForeground3,\r\n },\r\n});\r\n\r\nexport const useTemplateGridStyles = makeStyles({\r\n gridContainer: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n justifyContent: 'flex-start',\r\n alignItems: 'flex-start',\r\n rowGap: tokens.spacingVerticalL,\r\n columnGap: tokens.spacingHorizontalL,\r\n marginTop: tokens.spacingVerticalXXL,\r\n },\r\n skeletonContainer: {\r\n alignItems: 'center',\r\n display: 'grid',\r\n position: 'relative',\r\n gridTemplateColumns: 'repeat(5, 1fr)',\r\n ...shorthands.gap(tokens.spacingVerticalL),\r\n },\r\n templateBody: {\r\n paddingTop: '10px',\r\n },\r\n filtersRow: {\r\n display: 'flex',\r\n justifyContent: 'flex-start',\r\n flexWrap: 'wrap',\r\n marginTop: '15px',\r\n ...shorthands.gap(tokens.spacingHorizontalS),\r\n },\r\n filterButton: {\r\n minWidth: 'auto',\r\n whiteSpace: 'nowrap',\r\n },\r\n});\r\n","import React, { useMemo, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { List, ListItem } from '@fluentui/react-list-preview';\r\n\r\nimport { Card, mergeClasses, Title2, Caption2, Caption1Strong, Body2, ToggleButton } from '@fluentui/react-components';\r\nimport { Overlay } from '@bingads-webui-react/fabric-control';\r\nimport { AdsStudioSpinner } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n\r\nimport { useTemplateVideoStyles, useTemplateGridStyles } from './style';\r\n\r\nexport const VideoTemplateCard = ({\r\n template,\r\n setClickedTemplate,\r\n i18n,\r\n getAssetCountInfo,\r\n}) => {\r\n const classes = useTemplateVideoStyles();\r\n\r\n const onClick = () => {\r\n setClickedTemplate(template);\r\n };\r\n\r\n return (\r\n
    \r\n \r\n \r\n {i18n.getString(_TL_('Preview\r\n \r\n \r\n
    \r\n {template.LocalizedTemplateName || template.TemplateName} \r\n {getAssetCountInfo(template)} \r\n
    \r\n
    \r\n );\r\n};\r\n\r\nVideoTemplateCard.propTypes = {\r\n template: PropTypes.shape({\r\n TemplateId: PropTypes.string.isRequired,\r\n TemplateName: PropTypes.string.isRequired,\r\n Duration: PropTypes.number,\r\n AspectRatio: PropTypes.string,\r\n Themes: PropTypes.arrayOf(PropTypes.string),\r\n NumberOfImages: PropTypes.number,\r\n NumberOfText: PropTypes.number,\r\n TemplateThumbnailUrl: PropTypes.string.isRequired,\r\n TemplatePreviewUrl: PropTypes.string.isRequired,\r\n // NumberOfLogos: PropTypes.string.isRequired,\r\n }).isRequired,\r\n setClickedTemplate: PropTypes.func.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n getAssetCountInfo: PropTypes.func.isRequired,\r\n};\r\n\r\n\r\nexport const TemplateGrid = ({\r\n templates,\r\n setClickedTemplate,\r\n loading,\r\n i18n,\r\n logger,\r\n getAssetCountInfo,\r\n templateTagOptions,\r\n templateTagsMapping,\r\n}) => {\r\n const classes = useTemplateGridStyles();\r\n const [selectedFilter, setSelectedFilter] = useState(templateTagOptions.all);\r\n const filterOptions = [templateTagOptions.all, templateTagOptions.brandAwareness, templateTagOptions.performance, templateTagOptions.premiumStreaming, templateTagOptions.onlineVideo];\r\n\r\n const getTitleMessage = useMemo(() => (\r\n (templates && templates.length) ? i18n.getString(_TL_('Video templates')) : i18n.getString(_TL_('No templates found'))\r\n ), [templates, i18n]);\r\n\r\n return (\r\n <>\r\n {loading ? (\r\n
    \r\n \r\n \r\n \r\n
    \r\n ) : (\r\n
    \r\n { getTitleMessage }\r\n {\r\n (templates && templates.length > 0) &&\r\n
    \r\n
    \r\n \r\n {i18n.getString(_TL_('Create a video using a template.'))}\r\n \r\n
    \r\n
    \r\n {filterOptions.map((filter, index) => (\r\n \r\n setSelectedFilter(filter)}\r\n className={mergeClasses(`filter-${index}`, classes.filterButton)}\r\n disabled={loading}\r\n checked={selectedFilter === filter}\r\n >\r\n {i18n.getString(filter)}\r\n \r\n \r\n ))}\r\n
    \r\n \r\n {templates.filter((template) => {\r\n const { TemplateId } = template;\r\n const templateDetails = templateTagsMapping[TemplateId];\r\n return templateDetails && (selectedFilter === templateTagOptions.all || (templateDetails && templateDetails.tags && templateDetails.tags.includes(selectedFilter)));\r\n }).map((template) => {\r\n const { TemplateId } = template;\r\n return (\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\nTemplateGrid.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n templates: PropTypes.arrayOf(PropTypes.shape({\r\n TemplateId: PropTypes.string.isRequired,\r\n TemplateName: PropTypes.string.isRequired,\r\n Duration: PropTypes.number,\r\n AspectRatio: PropTypes.string,\r\n Themes: PropTypes.arrayOf(PropTypes.string),\r\n NumberOfImages: PropTypes.number,\r\n NumberOfText: PropTypes.number,\r\n TemplateThumbnailUrl: PropTypes.string.isRequired,\r\n TemplatePreviewUrl: PropTypes.string.isRequired,\r\n // NumberOfLogos: PropTypes.string.isRequired,\r\n })).isRequired,\r\n setClickedTemplate: PropTypes.func.isRequired,\r\n loading: PropTypes.bool,\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n }).isRequired,\r\n getAssetCountInfo: PropTypes.func.isRequired,\r\n};\r\n\r\nTemplateGrid.defaultProps = {\r\n loading: true,\r\n};\r\n","import { makeStyles, shorthands, tokens } from '@fluentui/react-components';\r\n\r\nexport const useTemplateDetailsModalStyles = makeStyles({\r\n dialog: {\r\n minWidth: '1030px',\r\n minHeight: '450px',\r\n '@media (max-width: 1030px)': {\r\n minWidth: 'max-content',\r\n minHeight: 'auto',\r\n },\r\n },\r\n dialogContentContainer: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n ...shorthands.gap(tokens.spacingHorizontalXXXL),\r\n '@media (max-width: 1030px)': {\r\n flexDirection: 'column',\r\n paddingBottom: tokens.spacingVerticalL,\r\n },\r\n },\r\n detailsContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n ...shorthands.gap(tokens.spacingVerticalL),\r\n },\r\n textGroup: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n ...shorthands.gap(tokens.spacingHorizontalS),\r\n },\r\n errorMsg: {\r\n color: tokens.colorStatusDangerForeground1,\r\n },\r\n});\r\n","import React, { useMemo, useState, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n Dialog,\r\n DialogContent,\r\n DialogBody,\r\n DialogSurface,\r\n DialogTitle,\r\n Button,\r\n mergeClasses,\r\n Subtitle1,\r\n Caption1,\r\n Label,\r\n} from '@fluentui/react-components';\r\n\r\nimport { Dismiss20Regular } from '@fluentui/react-icons';\r\nimport { UrlInputFluent } from '@bingads-webui-campaign-react/url-input-fluent-v2';\r\nimport { ClipchampPlayer } from '@bingads-webui-campaign-react/clipchamp-player';\r\nimport { useTemplateDetailsModalStyles } from './style';\r\n\r\nexport const TemplateDetailsModal = ({\r\n template,\r\n show,\r\n onShowChange,\r\n onSelectTemplate,\r\n setCopilotFinalUrl,\r\n onClose,\r\n i18n,\r\n getAssetCountInfo,\r\n loadClipchampPlayer,\r\n}) => {\r\n const [finalUrlError, setFinalUrlError] = useState('');\r\n const [url, setUrl] = useState('');\r\n\r\n /* istanbul ignore next */\r\n const onGetStartedButton = useCallback(() => {\r\n if (finalUrlError) {\r\n return;\r\n }\r\n\r\n if (!url) {\r\n setFinalUrlError(i18n.getString(_TL_('Please enter a valid URL.')));\r\n return;\r\n }\r\n\r\n onSelectTemplate({ template });\r\n }, [onSelectTemplate, template, setFinalUrlError, i18n, finalUrlError, url]);\r\n\r\n const DismissIcon = useMemo(() => , [onClose]);\r\n\r\n const classes = useTemplateDetailsModalStyles();\r\n\r\n return (\r\n {\r\n // it is the users responsibility to react accordingly to the open state change\r\n onShowChange(data.open);\r\n }}\r\n className={mergeClasses('template-details-dialog', classes.dialog)}\r\n >\r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n {template.LocalizedTemplateName || template.TemplateName}\r\n
    \r\n {getAssetCountInfo(template)}\r\n
    \r\n
    \r\n {i18n.getString(_TL_('Duration: {{seconds}} seconds'), { seconds: template.Duration })}\r\n
    \r\n
    \r\n
    {template.LocalizedTemplateDescription || template.TemplateDescription}
    \r\n \r\n {\r\n setFinalUrlError(urlErrors[0]);\r\n setCopilotFinalUrl(newUrl);\r\n setUrl(newUrl);\r\n }}\r\n textFieldAriaLabel={i18n.getString(_TL_('Enter your URL'))}\r\n i18n={i18n}\r\n additionalProperties={{\r\n placeholder: i18n.getString(_TL_('Enter your URL')),\r\n id: 'url-input',\r\n }}\r\n />\r\n {finalUrlError && {finalUrlError} }\r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n );\r\n};\r\n\r\nTemplateDetailsModal.propTypes = {\r\n template: PropTypes.shape({\r\n TemplateId: PropTypes.string.isRequired,\r\n TemplateName: PropTypes.string.isRequired,\r\n TemplateDescription: PropTypes.string.isRequired,\r\n Duration: PropTypes.number,\r\n AspectRatio: PropTypes.string,\r\n Themes: PropTypes.arrayOf(PropTypes.string),\r\n NumberOfImages: PropTypes.number,\r\n NumberOfText: PropTypes.number,\r\n TemplateThumbnailUrl: PropTypes.string.isRequired,\r\n TemplatePreviewUrl: PropTypes.string.isRequired,\r\n NumberOfLogos: PropTypes.string.isRequired,\r\n }).isRequired,\r\n show: PropTypes.bool.isRequired,\r\n onShowChange: PropTypes.func.isRequired,\r\n setCopilotFinalUrl: PropTypes.func.isRequired,\r\n onSelectTemplate: PropTypes.func.isRequired,\r\n onClose: PropTypes.func.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n }).isRequired,\r\n getAssetCountInfo: PropTypes.func.isRequired,\r\n loadClipchampPlayer: PropTypes.func.isRequired,\r\n};\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nexport const useVideoTemplatesPageStyles = makeStyles({\r\n videoTemplatePage: {\r\n display: 'flex',\r\n ...shorthands.margin('32px', '36px'),\r\n flexDirection: 'column',\r\n ...shorthands.gap('10px'),\r\n },\r\n});\r\n","import React, { useCallback, useEffect, useState, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { mergeClasses } from '@fluentui/react-components';\r\nimport { CopilotRepositoryProvider, useCopilotRepositoryContext } from '@bingads-webui/inline-copilot';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { DataContext } from '@bingads-webui-campaign-react/ads-studio-shared-components';\r\nimport { useBrandKitDataService } from '@bingads-webui-campaign-react/brandkit-data-service';\r\nimport { formatBrandkitForAPI } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { TemplateGrid, TemplateDetailsModal } from './components';\r\nimport { useVideoTemplatesPageStyles } from './style';\r\n\r\nconst VideoTemplatesPage = ({\r\n i18n,\r\n aid,\r\n logger,\r\n copilotFinalUrl,\r\n setCopilotFinalUrl,\r\n navigation,\r\n copilotDomainDataService,\r\n notificationApi,\r\n pagePerfMarker,\r\n setDataLoaded,\r\n loadClipchampPlayer,\r\n}) => {\r\n const classes = useVideoTemplatesPageStyles();\r\n const [isPageLoading, setIsPageLoading] = useState(true);\r\n const [templates, setTemplates] = useState([]);\r\n const [selectedTemplate, setSelectedTemplate] = useState(null);\r\n const [isLoadingBrandKit, setIsLoadingBrandkit] = useState(false);\r\n const [brandkit, setBrandKit] = useState(null);\r\n const [isBrandKitEmpty, setIsBrandKitEmpty] = useState(true);\r\n const [openModal, setOpenModal] = useState(false);\r\n const { setDataPromise } = useContext(DataContext);\r\n const activity = useContext(ActivityContext);\r\n\r\n const repository = useCopilotRepositoryContext();\r\n const {\r\n fetchVideoAdsAssetRecommendations,\r\n } = repository;\r\n\r\n const fetchCount = 10;\r\n\r\n const { getBrandKitDataByAccId } = useBrandKitDataService();\r\n\r\n const fetchBrandKit = useCallback(async () => {\r\n setIsLoadingBrandkit(true);\r\n const response = await getBrandKitDataByAccId({ accId: aid });\r\n setIsLoadingBrandkit(false);\r\n const isBrandKitHavingData = response && response.BrandKits && response.BrandKits[0] && (!_.isEmpty(response.BrandKits[0].Fonts) ||\r\n !_.isEmpty(response.BrandKits[0].Images) ||\r\n !_.isEmpty(response.BrandKits[0].LandscapeLogos) ||\r\n !_.isEmpty(response.BrandKits[0].Palettes) ||\r\n !_.isEmpty(response.BrandKits[0].SquareLogos));\r\n if (isBrandKitHavingData) {\r\n setIsBrandKitEmpty(false);\r\n const updatedResponse = {\r\n ...response.BrandKits[0],\r\n };\r\n setBrandKit(formatBrandkitForAPI(updatedResponse));\r\n } else {\r\n setIsBrandKitEmpty(true);\r\n }\r\n }, [getBrandKitDataByAccId, aid, setBrandKit, setIsBrandKitEmpty]);\r\n\r\n const onFetchVideoRecommendations = useCallback(() => {\r\n if (isLoadingBrandKit) {\r\n return null;\r\n }\r\n const templateFilter = !_.isEmpty(selectedTemplate) ? { TemplateIds: [selectedTemplate.TemplateId] } : null;\r\n return fetchVideoAdsAssetRecommendations(fetchCount, false, null, templateFilter, (!isBrandKitEmpty ? brandkit : null));\r\n }, [brandkit, isLoadingBrandKit, fetchVideoAdsAssetRecommendations, fetchCount, isBrandKitEmpty, selectedTemplate]);\r\n\r\n\r\n const onFailedToLoadData = useCallback(() => {\r\n notificationApi.showWarning(i18n.getString(_TL_('Failed to load. Please refresh the page and try again.')));\r\n }, [i18n, notificationApi]);\r\n\r\n const fetchVideoTemplates = useCallback(async () => {\r\n pagePerfMarker.willFetchData();\r\n const { response, error } = await copilotDomainDataService.getVideoTemplates(null, i18n);\r\n if (error) {\r\n onFailedToLoadData();\r\n setIsPageLoading(false);\r\n if (logger) {\r\n logger.logTrace('Video Templates - failed to load templates', error);\r\n }\r\n return;\r\n }\r\n if (activity && activity.signal) {\r\n activity.signal('[VideoTemplatesPage] Templates Loaded');\r\n }\r\n setTemplates((response && response.Templates) || []);\r\n setIsPageLoading(false);\r\n pagePerfMarker.willRender();\r\n if (setDataLoaded) {\r\n setDataLoaded();\r\n }\r\n }, [activity, copilotDomainDataService, onFailedToLoadData, logger, pagePerfMarker, setDataLoaded, i18n]);\r\n\r\n useEffect(() => {\r\n fetchVideoTemplates();\r\n }, [fetchVideoTemplates]);\r\n\r\n useEffect(() => {\r\n fetchBrandKit();\r\n }, [fetchBrandKit]);\r\n\r\n const onViewTemplateDetails = useCallback((template) => {\r\n setSelectedTemplate(template);\r\n if (activity && activity.signal) {\r\n activity.signal(`[VideoTemplatesPage] templateSelected:${template.TemplateId}`);\r\n }\r\n setOpenModal(true);\r\n }, [activity]);\r\n\r\n const onChooseTemplate = useCallback(() => {\r\n const dataPromise = onFetchVideoRecommendations();\r\n\r\n const modifiedDataPromise = dataPromise.then(data => ({\r\n ...data,\r\n finalUrl: copilotFinalUrl,\r\n }));\r\n\r\n setDataPromise(modifiedDataPromise);\r\n setOpenModal(false);\r\n navigation.gotoCreateVideoPage();\r\n }, [navigation, setDataPromise, onFetchVideoRecommendations]);\r\n\r\n const onCloseModal = useCallback(() => {\r\n setOpenModal(false);\r\n }, []);\r\n\r\n const getAssetCountInfo = (templateItem) => {\r\n const { NumberOfLogos, NumberOfImages, NumberOfText } = templateItem;\r\n const result = [];\r\n if (NumberOfText && NumberOfText > 1) result.push(i18n.getString(_TL_('{{NumberOfText}} texts'), { NumberOfText }));\r\n else if (NumberOfText && NumberOfText > 0) result.push(i18n.getString(_TL_('{{NumberOfText}} text'), { NumberOfText }));\r\n if (NumberOfImages && NumberOfImages > 1) result.push(i18n.getString(_TL_('{{NumberOfImages}} images'), { NumberOfImages }));\r\n else if (NumberOfImages && NumberOfImages > 0) result.push(i18n.getString(_TL_('{{NumberOfImages}} image'), { NumberOfImages }));\r\n if (NumberOfLogos && NumberOfLogos > 1) result.push(i18n.getString(_TL_('{{NumberOfLogos}} logos'), { NumberOfLogos }));\r\n else if (NumberOfLogos && NumberOfLogos > 0) result.push(i18n.getString(_TL_('{{NumberOfLogos}} logo'), { NumberOfLogos }));\r\n return result.join('・');\r\n };\r\n\r\n const templateTagOptions = {\r\n all: _TL_('All'),\r\n performance: _TL_('Performance'),\r\n brandAwareness: _TL_('Brand awareness'),\r\n premiumStreaming: _TL_('Premium Streaming'),\r\n onlineVideo: _TL_('Online Video'),\r\n };\r\n\r\n const templateTagsMapping = {\r\n 'f4e5dab9-317e-5426-9999-4a1d062a8d6e': {\r\n tags: [templateTagOptions.brandAwareness, templateTagOptions.performance],\r\n },\r\n '00000002-0000-0000-0000-000000000001': {\r\n tags: [templateTagOptions.brandAwareness, templateTagOptions.premiumStreaming],\r\n },\r\n '00000002-0000-0000-0000-000000000002': {\r\n tags: [templateTagOptions.brandAwareness, templateTagOptions.onlineVideo],\r\n },\r\n '00000002-0000-0000-0000-000000000003': {\r\n tags: [templateTagOptions.onlineVideo, templateTagOptions.performance],\r\n },\r\n '00000002-0000-0000-0000-000000000004': {\r\n tags: [templateTagOptions.onlineVideo, templateTagOptions.performance],\r\n },\r\n '00000002-0000-0000-0000-000000000005': {\r\n tags: [templateTagOptions.premiumStreaming, templateTagOptions.brandAwareness],\r\n },\r\n '00000002-0000-0000-0000-000000000007': {\r\n tags: [templateTagOptions.onlineVideo, templateTagOptions.performance],\r\n },\r\n '00000002-0000-0000-0000-000000000008': {\r\n tags: [templateTagOptions.premiumStreaming, templateTagOptions.performance],\r\n },\r\n '00000002-0000-0000-0000-000000000009': {\r\n tags: [templateTagOptions.onlineVideo, templateTagOptions.performance],\r\n },\r\n '00000002-0000-0000-0000-000000000010': {\r\n tags: [templateTagOptions.onlineVideo, templateTagOptions.performance],\r\n },\r\n '00000002-0000-0000-0000-000000000011': {\r\n tags: [templateTagOptions.onlineVideo, templateTagOptions.brandAwareness],\r\n },\r\n };\r\n\r\n return (\r\n
    \r\n \r\n {openModal && }\r\n
    \r\n );\r\n};\r\n\r\nVideoTemplatesPage.propTypes = {\r\n copilotDomainDataService: PropTypes.shape({\r\n getVideoTemplates: PropTypes.func,\r\n }).isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n notificationApi: PropTypes.shape({\r\n showWarning: PropTypes.func,\r\n }),\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n }).isRequired,\r\n adsStudioUserPreferences: PropTypes.shape({}),\r\n reload: PropTypes.shape({}),\r\n navigation: PropTypes.shape({\r\n gotoEditVideoPage: PropTypes.func.isRequired,\r\n }).isRequired,\r\n setCopilotFinalUrl: PropTypes.func.isRequired,\r\n setDataLoaded: PropTypes.func.isRequired,\r\n pagePerfMarker: PropTypes.shape({\r\n willFetchData: PropTypes.func,\r\n willRender: PropTypes.func,\r\n }).isRequired,\r\n loadClipchampPlayer: PropTypes.func.isRequired,\r\n};\r\n\r\nVideoTemplatesPage.defaultProps = {\r\n notificationApi: {\r\n showWarning: () => {},\r\n },\r\n adsStudioUserPreferences: undefined,\r\n reload: null,\r\n};\r\n\r\nconst VideoTemplatesPageWithContexts = ({ ...props }) => {\r\n const [copilotFinalUrl, setCopilotFinalUrl] = React.useState('');\r\n const serverContext = useContext(ServerContext);\r\n const { permissions } = props;\r\n const useClipchamp = permissions && permissions.dynamic && permissions.dynamic.VideoTemplateUI;\r\n\r\n return (\r\n \r\n \r\n );\r\n};\r\n\r\nVideoTemplatesPageWithContexts.propTypes = {};\r\n\r\nconst WrappedComponent = VideoTemplatesPageWithContexts;\r\n\r\nexport { WrappedComponent as VideoTemplatesPageComponent };\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nexport const useEditVideoPageStyles = makeStyles({\r\n editVideoPage: {\r\n position: 'relative',\r\n height: '100%',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n ...shorthands.gap('10px'),\r\n },\r\n editVideoContainer: {\r\n position: 'absolute',\r\n width: '100%',\r\n height: '100%',\r\n '& .video-editor-with-add-image-wrapper': {\r\n height: '100%',\r\n },\r\n },\r\n spinnerContent: {\r\n textAlign: 'center',\r\n },\r\n});\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\n/* istanbul ignore file */\r\nimport {\r\n Toast,\r\n ToastBody,\r\n ToastTitle,\r\n ToastTrigger,\r\n useId,\r\n} from '@fluentui/react-components';\r\nimport { useToast } from '@bingads-webui-fluent-component/toast-provider';\r\nimport { Dismiss20Regular } from '@fluentui/react-icons';\r\nimport React, { useCallback } from 'react';\r\n\r\nconst timeout = 10000;\r\n\r\nexport const useVideoNotify = ({\r\n i18n,\r\n logger,\r\n}) => {\r\n const toastId = useId('video-saved-toast');\r\n const { dispatchToast, dismissToast } = useToast();\r\n\r\n const successTitle = i18n.getString(_TL_('Published successfully'));\r\n const successBody = i18n.getString(_TL_('Congratulations! Your video has been published to Ad Studio.'));\r\n const errorTitle = i18n.getString(_TL_('Export unsuccessful'));\r\n const errorBody = i18n.getString(_TL_('We encountered an issue while trying to export your video.'));\r\n\r\n const getTitle = (isSuccess: boolean) => (isSuccess ? successTitle : errorTitle);\r\n const getBody = (isSuccess: boolean) => (isSuccess ? successBody : errorBody);\r\n\r\n const notify = useCallback((isSuccess: boolean) =>\r\n dispatchToast(\r\n \r\n \r\n \r\n \r\n }\r\n >{getTitle(isSuccess)}\r\n \r\n \r\n {getBody(isSuccess)}\r\n \r\n ,\r\n { intent: isSuccess ? 'success' : 'warning', toastId, timeout }\r\n ), [dispatchToast, i18n, dismissToast, toastId, logger]);\r\n\r\n return notify;\r\n};\r\n","import React, { useEffect, useState, useContext, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { mergeClasses } from '@fluentui/react-components';\r\nimport { DataContext } from '@bingads-webui-campaign-react/ads-studio-shared-components';\r\nimport { AdsStudioSpinner } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { VideoTemplateEditorContextWrapper } from '@bingads-webui-campaign-react/video-ads-editor';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { CopilotRepositoryProvider } from '@bingads-webui/inline-copilot';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { Overlay, MessageBar, MessageBarType } from '@bingads-webui-react/fabric-control';\r\nimport { withI18nConsumer } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n createVideoRepository,\r\n createImageRepository,\r\n createFolderRepository,\r\n uploadVideoMetadata,\r\n} from '@bingads-webui-campaign-react/asset-library-services';\r\nimport { newVideoFromMTObject } from '@bingads-webui-campaign-react/image-experience-video-part';\r\nimport { useEditVideoPageStyles } from './style';\r\nimport { useVideoNotify } from './components/use-video-notify';\r\n\r\nconst EditVideoPage = (props) => {\r\n const {\r\n i18n,\r\n permissions,\r\n isCTV,\r\n logger,\r\n loadClipchampPlayer,\r\n pagePerfMarker,\r\n setDataLoaded,\r\n videoId,\r\n dataService,\r\n ...rest\r\n } = props;\r\n\r\n const {\r\n serverContext, preferenceService, cid, aid, oDataConfig, perfMarker, navigation,\r\n } = rest;\r\n const classes = useEditVideoPageStyles();\r\n const notify = useVideoNotify({ i18n, logger });\r\n const { getVideo } = dataService || {};\r\n const { dataPromise } = useContext(DataContext);\r\n const [videoMetadata, setVideoMetadata] = useState(null);\r\n const [finalUrl, setFinalUrl] = useState(null);\r\n const [isLoading, setIsLoading] = useState(true);\r\n const [isSaving, setIsSaving] = useState(false);\r\n const [, setError] = useState();\r\n const activity = useContext(ActivityContext);\r\n\r\n const videoRepository = createVideoRepository({\r\n oDataConfig,\r\n aid,\r\n cid,\r\n });\r\n const folderRepository = createFolderRepository({\r\n i18n,\r\n logger,\r\n oDataConfig,\r\n aid,\r\n cid,\r\n });\r\n const imageRepository = createImageRepository({\r\n oDataConfig,\r\n aid,\r\n cid,\r\n logger,\r\n i18n,\r\n activity,\r\n });\r\n\r\n const assetLibraryConfig = {\r\n cid,\r\n aid,\r\n oDataConfig,\r\n dateFormat: _.get(serverContext, ['CurrentUser', 'CultureDateTimeFormat', 'ShortDatePattern']),\r\n timeZone: _.get(serverContext, ['CurrentAccount', 'TimeZone']),\r\n preferencesService: preferenceService,\r\n activityLogger: activity,\r\n };\r\n\r\n const logActivity = useCallback((message) => {\r\n if (activity && activity.signal) {\r\n activity.signal(message);\r\n }\r\n }, [activity]);\r\n\r\n useEffect(() => {\r\n const fetchDataAsync = async () => {\r\n try {\r\n pagePerfMarker.willFetchData();\r\n setIsLoading(true);\r\n if (videoId) {\r\n const video = await getVideo({ id: videoId, fetchMetadata: true });\r\n if (video && video.Metadata) {\r\n const videoData = JSON.parse(video.Metadata);\r\n setVideoMetadata(videoData);\r\n const templateId = videoData && videoData.template && videoData.template.templateId;\r\n logActivity(`[VideoAdsEditorPage] - Video Edit Loaded - TemplateId:${templateId}`);\r\n }\r\n } else {\r\n const result = await dataPromise; // Wait for the promise to resolve\r\n const videoRecommendation = result && result.data && result.data.ads && result.data.ads[0];\r\n setVideoMetadata(videoRecommendation);\r\n setFinalUrl(result && result.finalUrl);\r\n const templateId = videoRecommendation && videoRecommendation.template && videoRecommendation.template.templateId;\r\n logActivity(`[VideoAdsEditorPage] - Video Recommendation Loaded - TemplateId:${templateId}`);\r\n }\r\n setIsLoading(false);\r\n pagePerfMarker.willRender();\r\n if (setDataLoaded) {\r\n setDataLoaded();\r\n }\r\n } catch (err) {\r\n setError(err);\r\n setIsLoading(false);\r\n if (logger) {\r\n logger.logTrace('Video Asset Gen - AdsStudio - Error', err);\r\n }\r\n }\r\n };\r\n fetchDataAsync();\r\n }, [dataPromise, pagePerfMarker, setDataLoaded, logger, logActivity]);\r\n\r\n const onSaveVideo = useCallback(async (newMetadata) => {\r\n if (!newMetadata) {\r\n logger.logTrace('ads studio edit video page - no video data passed to save.');\r\n } else {\r\n setIsSaving(true);\r\n try {\r\n const uploadResult = await uploadVideoMetadata({\r\n videoMetadata: newMetadata,\r\n newVideoFromMTObject,\r\n folderRepository,\r\n imageRepository,\r\n videoRepository,\r\n });\r\n\r\n if (uploadResult && uploadResult.recommendationFormat === 'Clipchamp' && uploadResult.status === 'Draft') {\r\n logActivity('VideoAdsEditor - AdsStudio - Video Recommendation Saved');\r\n notify(true);\r\n navigation.gotoVideosPage();\r\n } else {\r\n notify(false);\r\n }\r\n } catch (e) {\r\n logger.logTrace('ads studio edit video page - error while adding video.', e);\r\n notify(false);\r\n }\r\n setIsSaving(false);\r\n }\r\n }, [folderRepository, imageRepository, videoRepository, logger, navigation, notify, logActivity]);\r\n\r\n const onApply = useCallback((newMetadata) => {\r\n onSaveVideo(newMetadata);\r\n }, [onSaveVideo]);\r\n\r\n return (\r\n
    \r\n {(isLoading || isSaving) && (\r\n \r\n \r\n
    {videoId ? i18n.getString(_TL_('Loading...')) : i18n.getString(_TL_('We are creating your video.'))}
    \r\n
    \r\n )}\r\n {\r\n (!isLoading) && videoMetadata && videoMetadata.template &&\r\n
    \r\n {}}\r\n isCTV={isCTV}\r\n cid={cid}\r\n aid={aid}\r\n finalUrl={finalUrl}\r\n assetLibraryConfig={assetLibraryConfig}\r\n permissions={permissions}\r\n isAADUser={serverContext && serverContext.IsAADUser}\r\n serverContext={serverContext}\r\n perfMarker={perfMarker && perfMarker.createChild('VideoTemplateEditor')}\r\n isDialog={false}\r\n loadClipchampPlayer={loadClipchampPlayer}\r\n showVideoTemplateSummaryBarControl\r\n />\r\n
    \r\n }\r\n {\r\n !isLoading && (!videoMetadata || !videoMetadata.template) &&\r\n
    \r\n
    \r\n \r\n {i18n.getString(_TL_('An error occured while loading the video.'))}\r\n \r\n
    \r\n
    \r\n }\r\n
    \r\n );\r\n};\r\n\r\nEditVideoPage.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n }).isRequired,\r\n permissions: PropTypes.shape({}).isRequired,\r\n isCTV: PropTypes.bool.isRequired,\r\n setDataLoaded: PropTypes.func.isRequired,\r\n pagePerfMarker: PropTypes.shape({\r\n willFetchData: PropTypes.func,\r\n willRender: PropTypes.func,\r\n }).isRequired,\r\n};\r\n\r\nEditVideoPage.defaultProps = {};\r\n\r\nconst EditVideoPageWithContexts = ({ ...props }) => {\r\n const serverContext = useContext(ServerContext);\r\n const { permissions } = props;\r\n const useClipchamp = permissions && permissions.dynamic && permissions.dynamic.VideoTemplateUI;\r\n\r\n return (\r\n \r\n \r\n );\r\n};\r\n\r\nEditVideoPageWithContexts.propTypes = {};\r\n\r\nconst WrappedComponent = withI18nConsumer(EditVideoPageWithContexts);\r\n\r\nexport { WrappedComponent as EditVideoPageComponent };\r\n\r\n","import { useState, useReducer, useCallback, useEffect, useMemo, useRef, useContext } from 'react';\r\nimport _ from 'underscore';\r\nimport {\r\n getImageAssetLimitPerAccount,\r\n GenerateImageContext,\r\n ROOT_FOLDER_ID,\r\n AIModelSource,\r\n} from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n\r\nimport { detectBrandName } from './util';\r\n\r\nexport const statuses = {\r\n entry: 'entry',\r\n finished: 'finished',\r\n loading: 'loading',\r\n cancelling: 'cancelling',\r\n};\r\n\r\nexport const actions = {\r\n search: 'search',\r\n finish: 'finish',\r\n cancel: 'cancel',\r\n fail: 'fail',\r\n};\r\n\r\n/* istanbul ignore next */\r\nconst reducer = (state, action) => {\r\n // action, [search, finish, cancel, failed]\r\n /* istanbul ignore switch */\r\n switch (state.status) {\r\n case statuses.entry:\r\n case statuses.finished:\r\n switch (action.type) {\r\n case actions.search:\r\n return ({ status: statuses.loading });\r\n default:\r\n break;\r\n }\r\n return ({ status: statuses.finished });\r\n case statuses.loading:\r\n switch (action.type) {\r\n case actions.cancel:\r\n case actions.fail:\r\n return ({ status: statuses.cancelling });\r\n case actions.finish:\r\n return ({ status: statuses.finished });\r\n case actions.search:\r\n return ({ status: statuses.loading });\r\n default:\r\n break;\r\n }\r\n return ({ status: statuses.finished });\r\n case statuses.cancelling:\r\n switch (action.type) {\r\n case actions.finish:\r\n case actions.fail:\r\n return ({ status: statuses.finished });\r\n default:\r\n break;\r\n }\r\n return ({ status: statuses.finished });\r\n default:\r\n return ({ status: statuses.finished });\r\n }\r\n};\r\n\r\nexport const useGenerateImagePageState = ({\r\n dataService, i18n, logger, eventHandler, aid, notificationApi, folderId, perfMarker,\r\n}) => {\r\n const log = useCallback((...args) => {\r\n if (logger) {\r\n logger.logTrace(...args);\r\n }\r\n }, [logger]);\r\n\r\n const {\r\n generateImageExample,\r\n setGenerateImageExample,\r\n } = useContext(GenerateImageContext);\r\n\r\n const clearExample = useCallback(() => {\r\n if (setGenerateImageExample) {\r\n setGenerateImageExample({\r\n prompt: undefined,\r\n imageUrl: undefined,\r\n });\r\n }\r\n }, [setGenerateImageExample]);\r\n\r\n useEffect(() => () => {\r\n clearExample();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n const [initialPrompt] = useState(generateImageExample && generateImageExample.prompt);\r\n const [prompt, setPrompt] = useState(initialPrompt || '');\r\n const [promptChanged, setPromptChanged] = useState(false);\r\n const [state, dispatch] = useReducer(reducer, { status: statuses.entry });\r\n const [images, setImages] = useState([]);\r\n const [serverError, setServerError] = useState(undefined);\r\n const [detectedBrandName, setDetectedBrandName] = useState(null);\r\n\r\n const onSelectImage = useCallback((index) => {\r\n const newImages = [...images];\r\n newImages[index].isSelected = !newImages[index].isSelected;\r\n\r\n log('AIGenerateImagesView: select image');\r\n setImages(newImages);\r\n }, [setImages, images, log]);\r\n\r\n const onStartOver = useCallback(() => {\r\n if (logger && logger.logTrace) {\r\n logger.logTrace('AIgeneratedImage: start over button clicked');\r\n }\r\n setPrompt(initialPrompt || '');\r\n }, [initialPrompt, logger]);\r\n\r\n const selectedImages = useMemo(() => images.filter(x => x.isSelected), [images]);\r\n\r\n const generateImagesPromise = useRef(undefined);\r\n\r\n const getGenerateImagesByAIPromise = useCallback((skipBrandDetection) => {\r\n setImages([]);\r\n let cancelled = false;\r\n let statusPoller = null;\r\n const aiGCImagePerfMarker = perfMarker.createChild('AIGenerateImages');\r\n aiGCImagePerfMarker.willInit();\r\n const onStartPolling = (poller) => {\r\n statusPoller = poller;\r\n };\r\n const aigcCallStart = Date.now();\r\n\r\n dataService.generateImagesByAI({\r\n prompt, onStartPolling /* , onProgress */, skipBrandDetection,\r\n }).then(({\r\n images: newImages, brandNameDetected, brandNames,\r\n }) => {\r\n const aigcCallEnd = Date.now();\r\n const aigcCallDuration = aigcCallEnd - aigcCallStart;\r\n const hasRecraftImage = newImages.some(({ modelSource }) => modelSource === AIModelSource.Recraft);\r\n\r\n // use the tag \"logForExpand\" to expand the log to per image Url without expanding other logs with imageUrls\r\n log('AIGenerateImagesView: count AI generated images', {\r\n imageUrls: newImages.map(({ url }) => url).join(','),\r\n logForExpand: true,\r\n skipBrandDetection,\r\n prompt,\r\n hasRecraftImage,\r\n modelSources: newImages.map(({ modelSource }) => modelSource).join(','),\r\n duration: aigcCallDuration,\r\n }); // will expand the log to per image Url\r\n if (eventHandler && eventHandler.onReturnImages) {\r\n eventHandler.onReturnImages({ imageIds: newImages.map(({ id }) => id) });\r\n }\r\n\r\n if (!cancelled) {\r\n if (brandNameDetected) {\r\n setDetectedBrandName(brandNames);\r\n log(`AIGenerateImagesView: detected brand names: ${brandNames}, prompt: ${prompt}`);\r\n } else {\r\n setImages(newImages.map(({ url, modelSource }) => ({ thumbnailSrc: url, modelSource })));\r\n dispatch({ type: actions.finish });\r\n }\r\n }\r\n }).catch((error) => {\r\n /* istanbul ignore next */\r\n if (!cancelled) {\r\n dispatch({ type: actions.fail });\r\n log('AIGenerateImagesView: generated images falied', { error });\r\n if (error && error.uxMessage) {\r\n setServerError(i18n.getString(error.uxMessage));\r\n } else {\r\n setServerError(i18n.getString(_TL_('We\\'ve encountered an error and failed to generate images.')));\r\n }\r\n }\r\n }).finally(() => {\r\n aiGCImagePerfMarker.done();\r\n });\r\n\r\n return ({\r\n cancel: () => {\r\n cancelled = true;\r\n if (statusPoller && statusPoller.stop) {\r\n statusPoller.stop();\r\n statusPoller = null;\r\n }\r\n },\r\n });\r\n }, [perfMarker, dataService, prompt, log, eventHandler, i18n]);\r\n\r\n const getImages = useCallback((skipBrandDetection = false) => {\r\n dispatch({ type: actions.search });\r\n clearExample();\r\n setServerError(undefined);\r\n log('AIGenerateImagesView: generate image', { prompt });\r\n if (eventHandler && eventHandler.onGenerateImages) {\r\n eventHandler.onGenerateImages({ prompt });\r\n }\r\n generateImagesPromise.current = getGenerateImagesByAIPromise(skipBrandDetection);\r\n }, [clearExample, log, prompt, eventHandler, getGenerateImagesByAIPromise]);\r\n\r\n /* istanbul ignore next */\r\n const cancel = useCallback(() => {\r\n setDetectedBrandName(null);\r\n dispatch({ type: actions.cancel });\r\n log('AIGenerateImagesView: cancel');\r\n if (generateImagesPromise.current) {\r\n generateImagesPromise.current.cancel();\r\n generateImagesPromise.current = null;\r\n }\r\n }, [log]);\r\n\r\n useEffect(() => {\r\n if (state.status === statuses.cancelling) {\r\n dispatch({ type: actions.finish });\r\n }\r\n }, [state.status]);\r\n\r\n useEffect(() => {\r\n if (serverError != null) {\r\n setServerError(undefined);\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [prompt]);\r\n\r\n const isValid = useMemo(() => {\r\n let containsBrand = false;\r\n if (detectedBrandName) {\r\n // multiple brand names are separated by comma\r\n // replace special characters in brand names and split by comma\r\n containsBrand = detectBrandName(detectedBrandName, prompt);\r\n }\r\n const trimmedPrompt = prompt ? prompt.trim() : '';\r\n const isValidPrompt = prompt != null && prompt.length > 0 && trimmedPrompt.length > 0 && prompt.length <= 256;\r\n return isValidPrompt && !containsBrand;\r\n }, [detectedBrandName, prompt]);\r\n\r\n const promptError = useMemo(() => {\r\n if (!promptChanged) {\r\n return undefined;\r\n }\r\n if (prompt == null) {\r\n return undefined;\r\n }\r\n if (prompt.length === 0) {\r\n return i18n.getString(_TL_('Prompt is required'));\r\n }\r\n if (prompt.length > 256) {\r\n return i18n.getString(_TL_('Prompt must be less than 256 characters'));\r\n }\r\n return undefined;\r\n }, [promptChanged, prompt, i18n]);\r\n\r\n const [savedAIGCImages, setSavedAIGCImages] = useState([]);\r\n const savedAIGCImagesRef = useRef([]);\r\n const [savingAIGCImages, setSavingAIGCImages] = useState([]);\r\n const [savedStockImages, setSavedStockImages] = useState([]);\r\n const savedStockImagesRef = useRef([]);\r\n const [savingStockImages, setSavingStockImages] = useState([]);\r\n\r\n const {\r\n assets,\r\n loadData,\r\n loadMoreData,\r\n totalAssetCount,\r\n addAIGCImage,\r\n addStockImage,\r\n } = dataService;\r\n\r\n const loadStockImages = useCallback(() => {\r\n loadData({\r\n searchText: prompt,\r\n });\r\n }, [loadData, prompt]);\r\n\r\n const loadMoreStockImages = useCallback(() => {\r\n loadMoreData();\r\n }, [loadMoreData]);\r\n\r\n /* istanbul ignore next */\r\n const handleError = useCallback((err) => {\r\n const errorCode = _.get(err, ['body', 'value', 0, 'Code'], '');\r\n if (errorCode === 'ImagesLimitExceededPerAccount') {\r\n const assetLimit = getImageAssetLimitPerAccount(aid, logger);\r\n notificationApi.showWarning(i18n.getString(_TL_('One or more images failed to upload because your account has exceeded the {{value}}-image asset limit. Please remove assets and try again.'), { value: assetLimit }));\r\n } else {\r\n const learnMoreText = i18n.getString(_TL_('Learn more about asset guidelines and accepted file types.'));\r\n const topic = 'app54863';\r\n const learnMoreLink = `Learn more`;\r\n const genericError = i18n.getString(_TL_('One or more assets failed to upload. Please try again. {{learnMoreLink}}'), { learnMoreLink });\r\n notificationApi.showWarning(genericError);\r\n }\r\n }, [aid, i18n, logger, notificationApi]);\r\n\r\n const folderIdNumber = useMemo(() => {\r\n if (folderId && folderId !== ROOT_FOLDER_ID) {\r\n return Number(folderId);\r\n }\r\n return undefined;\r\n }, [folderId]);\r\n\r\n const wrappedAddAIGCImage = useCallback((imageSrc, modelSource = null) => {\r\n const aiGCImagePerfMarker = perfMarker.createChild('AIGCImagePicker');\r\n aiGCImagePerfMarker.willInit();\r\n setSavingAIGCImages([...savingAIGCImages, imageSrc]);\r\n addAIGCImage(imageSrc, folderIdNumber, modelSource).then((res) => {\r\n if (logger && logger.logTrace) {\r\n logger.logTrace('AIGC image saved', {\r\n imageSrc,\r\n id: res,\r\n prompt,\r\n modelSource: modelSource || AIModelSource.Dalle,\r\n });\r\n }\r\n savedAIGCImagesRef.current = [...new Set([...savedAIGCImagesRef.current, imageSrc])];\r\n setSavedAIGCImages([...new Set([...savedAIGCImagesRef.current, ...savedAIGCImages, imageSrc])]);\r\n }).catch((error) => {\r\n handleError(error);\r\n }).finally(() => {\r\n aiGCImagePerfMarker.done();\r\n });\r\n }, [addAIGCImage, folderIdNumber, handleError, logger, perfMarker, savedAIGCImages, savingAIGCImages, prompt]);\r\n\r\n const wrappedAddStockImage = useCallback((stockImageId) => {\r\n setSavingStockImages([...savingStockImages, stockImageId]);\r\n addStockImage(stockImageId, folderIdNumber).then((res) => {\r\n if (logger && logger.logTrace) {\r\n logger.logTrace('Stock image saved', { stockImageId, id: res, prompt });\r\n }\r\n savedStockImagesRef.current = [...new Set([...savedStockImagesRef.current, stockImageId])];\r\n setSavedStockImages([...new Set([...savedStockImagesRef.current, ...savedStockImages, stockImageId])]);\r\n }).catch((error) => {\r\n handleError(error);\r\n });\r\n }, [addStockImage, folderIdNumber, handleError, logger, savedStockImages, savingStockImages, prompt]);\r\n\r\n const wrappedSetPrompt = useCallback((newPrompt) => {\r\n if (promptChanged === false) {\r\n setPromptChanged(true);\r\n }\r\n setPrompt(newPrompt);\r\n }, [promptChanged]);\r\n\r\n return {\r\n aigcImages: images,\r\n stockImages: assets,\r\n savedAIGCImages,\r\n savedStockImages,\r\n savingAIGCImages,\r\n savingStockImages,\r\n totalStockImagesCount: totalAssetCount,\r\n addAIGCImage: wrappedAddAIGCImage,\r\n addStockImage: wrappedAddStockImage,\r\n selectedImages,\r\n isValid,\r\n getImages,\r\n onSelectImage,\r\n prompt,\r\n promptError,\r\n setPrompt: wrappedSetPrompt,\r\n state,\r\n cancel,\r\n serverError,\r\n detectedBrandName,\r\n loadStockImages,\r\n loadMoreStockImages,\r\n setDetectedBrandName,\r\n onStartOver,\r\n generateImageExample,\r\n };\r\n};\r\n","export const detectBrandName = (detectedBrandName, prompt) => {\r\n const brandNames = detectedBrandName\r\n .replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\r\n .split(',').map(s => s.trim()).join('(?=\\\\W|^|$)|(?<=\\\\W|^|$)');\r\n const brandNameRegex = new RegExp(`(?<=\\\\W|^|$)${brandNames}(?=\\\\W|^|$)`, 'i');\r\n return brandNameRegex.test(prompt);\r\n};\r\n","import { makeResetStyles, shorthands } from '@fluentui/react-components';\r\nimport {\r\n AIWarningIcon,\r\n} from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n\r\nexport const useBrandDetectionConfirmationStyle = makeResetStyles({\r\n display: 'flex',\r\n flexDirection: 'row',\r\n justifyContent: 'flex-start',\r\n alignItems: 'center',\r\n width: '100%',\r\n marginTop: '32px',\r\n ...shorthands.padding('16px', '24px'),\r\n ...shorthands.gap('16px'),\r\n ...shorthands.borderRadius(4),\r\n ...shorthands.border('1px', 'solid', '#E1DFDD'),\r\n backgroundColor: '#FFF',\r\n\r\n '& .ai-warning-icon': {\r\n width: '128px',\r\n height: '128px',\r\n flexShrink: 0,\r\n backgroundImage: `url(\"${AIWarningIcon}\")`,\r\n backgroundSize: '128px 128px',\r\n marginRight: '16px',\r\n },\r\n\r\n '& .confirmation-content': {\r\n fontFamily: 'Segoe UI',\r\n fontStyle: 'normal',\r\n '& .confirmation-content-title': {\r\n color: '#000',\r\n fontSize: '18px',\r\n fontWeight: 600,\r\n lineHeight: '24px',\r\n },\r\n '& .confirmation-content-text': {\r\n color: '#605E5C',\r\n fontSize: '14px',\r\n fontWeight: 400,\r\n lineHeight: '20px',\r\n marginTop: '4px',\r\n marginBottom: '12px',\r\n },\r\n '& .confirmation-content-action': {\r\n display: 'flex',\r\n '& .confirmation-content-checkbox': {\r\n marginRight: '4px',\r\n alignItems: 'flex-start',\r\n '& button': {\r\n marginTop: '4px',\r\n },\r\n },\r\n },\r\n },\r\n});\r\n","import React, { useCallback, useEffect, useState } from 'react';\r\nimport { Checkbox } from '@fluentui/react-components';\r\nimport { useBrandDetectionConfirmationStyle } from './style';\r\n\r\nexport const BrandDetectionConfirmation = ({\r\n i18n, brandName, onConfirm, logger, renderHelpButton,\r\n}) => {\r\n const [isChecked, setIsChecked] = useState(false);\r\n const classes = useBrandDetectionConfirmationStyle();\r\n\r\n const onChange = useCallback((evt, data) => {\r\n if (data.checked && onConfirm) {\r\n logger.logTrace(`BrandDetectionConfirmation: confirmed to skip brand name: ${brandName}`);\r\n setTimeout(() => {\r\n onConfirm();\r\n }, 1000);\r\n }\r\n setIsChecked(data.checked);\r\n }, [brandName, logger, onConfirm]);\r\n\r\n useEffect(() => {\r\n logger.logTrace(`BrandDetectionConfirmation: brand name detected: ${brandName}`);\r\n }, [brandName, logger]);\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n
    {i18n.getString(_TL_('Brand detected: Image contains \"{{brandName}}\"'), { brandName })}
    \r\n
    {i18n.getString(_TL_('Note: Your request for the image may contain content that is subject to the intellectual property rights of third parties.'))}
    \r\n
    \r\n \r\n {renderHelpButton && renderHelpButton('pop_BA_AssetLibrary_BrandDetection')}\r\n
    \r\n
    \r\n
    \r\n );\r\n};\r\n","import {\r\n makeStyles,\r\n makeResetStyles,\r\n shorthands,\r\n tokens,\r\n} from '@fluentui/react-components';\r\n\r\nexport const usePromptEditorStyles = makeStyles({\r\n selectedButton: {\r\n backgroundColor: '#F0EEEE',\r\n ...shorthands.border('1px', 'solid', tokens.colorStrokeFocus2),\r\n },\r\n toggleButton: {\r\n backgroundColor: '#FAFAFA',\r\n },\r\n textareaPlaceHolder: {\r\n width: '100%',\r\n backgroundColor: 'transparent',\r\n boxShadow: '0px 0px 2px 0px rgba(23, 26, 31, 0.12), 0px 0px 1px 0px rgba(23, 26, 31, 0.07)',\r\n '& textarea': {\r\n color: '#8F8F8F',\r\n fontSize: '24px',\r\n fontWeight: '400',\r\n lineHeight: '36px',\r\n },\r\n },\r\n textarea: {\r\n width: '100%',\r\n boxShadow: '0px 0px 2px 0px rgba(23, 26, 31, 0.12), 0px 0px 1px 0px rgba(23, 26, 31, 0.07)',\r\n backgroundColor: 'transparent',\r\n '& textarea': {\r\n color: '#000',\r\n fontSize: '24px',\r\n fontWeight: '600',\r\n lineHeight: '32px',\r\n },\r\n },\r\n autoCompleteTextarea: {\r\n position: 'absolute',\r\n backgroundColor: '#FAFAFA',\r\n width: '100%',\r\n '& textarea': {\r\n color: '#999',\r\n fontSize: '24px',\r\n fontWeight: '600',\r\n lineHeight: '32px',\r\n },\r\n },\r\n});\r\n\r\nexport const usePromptEditorBaseStyles = makeResetStyles({\r\n width: '100%',\r\n '& .prompt': {\r\n ...shorthands.borderRadius('8px', '8px', '0px', '0px'),\r\n ...shorthands.borderBottom('none'),\r\n clipPath: 'inset(-2px -2px 0 -2px)',\r\n borderBottomStyle: 'none',\r\n '&:hover, &:active, &:focus, &:focus-within': {\r\n borderBottomStyle: 'none',\r\n },\r\n '::after': {\r\n display: 'none',\r\n },\r\n height: 'calc(38% - 70px)',\r\n minHeight: '348px',\r\n paddingTop: '12px',\r\n '& textarea': {\r\n maxHeight: 'unset',\r\n height: 'unset',\r\n },\r\n },\r\n '& .words, .buttons': {\r\n backgroundColor: '#FAFAFA',\r\n width: '100%',\r\n },\r\n '& .words': {\r\n ...shorthands.borderLeft('1px', 'solid', tokens.colorNeutralStroke1),\r\n ...shorthands.borderRight('1px', 'solid', tokens.colorNeutralStroke1),\r\n boxShadow: '0px 0px 2px 0px rgba(23, 26, 31, 0.12), 0px 0px 1px 0px rgba(23, 26, 31, 0.07)',\r\n clipPath: 'inset(0px -2px 0px -2px)',\r\n paddingLeft: '12px',\r\n paddingBottom: '20px',\r\n display: 'flex',\r\n gap: '12px',\r\n alignItems: 'center',\r\n flexWrap: 'wrap',\r\n borderTopStyle: 'none',\r\n '& button': {\r\n height: '32px',\r\n ...shorthands.borderRadius('8px', '8px', '8px', '8px'),\r\n ...shorthands.border('1px', 'solid', '#B0BEFF'),\r\n backgroundColor: '#FAFAFA',\r\n fontWeight: tokens.fontWeightRegular,\r\n '&:hover': {\r\n backgroundColor: tokens.colorNeutralBackground1Hover,\r\n borderColor: tokens.colorStrokeFocus2,\r\n borderWidth: '1px',\r\n borderStyle: 'solid',\r\n },\r\n minWidth: 'unset',\r\n whiteSpace: 'nowrap',\r\n },\r\n },\r\n '& .buttons': {\r\n ...shorthands.borderRadius('8px', '8px', '8px', '8px'),\r\n ...shorthands.borderTop('1px', 'solid', tokens.colorNeutralStroke1),\r\n ...shorthands.borderLeft('1px', 'solid', tokens.colorNeutralStroke1),\r\n ...shorthands.borderBottom('1px', 'solid', tokens.colorNeutralStroke1),\r\n ...shorthands.borderRight('1px', 'solid', tokens.colorNeutralStroke1),\r\n boxShadow: '0px 0px 2px 0px rgba(23, 26, 31, 0.12), 0px 0px 1px 0px rgba(23, 26, 31, 0.07)',\r\n position: 'relative',\r\n top: '-8px',\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n alignItems: 'center',\r\n padding: '12px 12px',\r\n ...shorthands.gap('12px'),\r\n overflowX: 'hidden',\r\n '& button': {\r\n fontWeight: tokens.fontWeightRegular,\r\n height: '32.1px',\r\n ...shorthands.borderRadius('8px', '8px', '8px', '8px'),\r\n '&:hover': {\r\n backgroundColor: tokens.colorNeutralBackground1Hover,\r\n borderColor: tokens.colorStrokeFocus2,\r\n borderWidth: '1px',\r\n borderStyle: 'solid',\r\n },\r\n minWidth: 'unset',\r\n whiteSpace: 'nowrap',\r\n },\r\n },\r\n});\r\n","\r\nimport React, { useState, useRef, useEffect } from 'react';\r\nimport {\r\n mergeClasses,\r\n Button,\r\n Textarea,\r\n} from '@fluentui/react-components';\r\nimport { ToggleButtons } from '@bingads-webui-campaign-react/ads-studio-shared-components';\r\nimport {\r\n ArrowClockwise16Regular,\r\n} from '@fluentui/react-icons';\r\nimport { getOptions } from './options';\r\nimport { usePromptEditorBaseStyles, usePromptEditorStyles } from './style';\r\n\r\nconst displayCount = 5;\r\n\r\nconst sliceOptions = (options, index, usedOptions) => {\r\n const filteredOptions = options.filter(option => !usedOptions.find(usedOption => usedOption.key === option.key));\r\n const roundedIndex = index % filteredOptions.length;\r\n\r\n let slicedOptions = filteredOptions.slice(roundedIndex, roundedIndex + displayCount);\r\n\r\n\r\n if (slicedOptions.length < displayCount) {\r\n slicedOptions = [...slicedOptions, ...filteredOptions.slice(0, (Math.min(displayCount, filteredOptions.length) - slicedOptions.length))];\r\n }\r\n\r\n return slicedOptions;\r\n};\r\n\r\nexport const PromptEditor = (props) => {\r\n const {\r\n i18n,\r\n prompt,\r\n setPrompt,\r\n logger,\r\n textAreaRef: textArea,\r\n } = props;\r\n\r\n const [usedOptions, setUsedOptions] = useState([]);\r\n const options = getOptions(i18n, usedOptions);\r\n const promptEditorBaseStyles = usePromptEditorBaseStyles();\r\n const promptEditorStyles = usePromptEditorStyles();\r\n const [optionsState, setOptionsState] = useState({});\r\n const selectedOption = options.find(option => optionsState[option.key]);\r\n const [textToComplete, setTextToComplete] = useState('');\r\n const [optionsIndex, setOptionsIndex] = useState(0);\r\n\r\n const nextOption = () => {\r\n setOptionsIndex((optionsIndex + displayCount));\r\n };\r\n\r\n const slicedOptions = selectedOption && selectedOption.words.length > 0\r\n ? sliceOptions(selectedOption.words, optionsIndex, usedOptions)\r\n : [];\r\n\r\n const shadowTextArea = useRef();\r\n const wordsRef = useRef();\r\n\r\n useEffect(() => {\r\n // sync the scroll position of the shadow textarea with the main textarea\r\n if (textArea && textArea.current && shadowTextArea.current) {\r\n if (textToComplete === '') {\r\n shadowTextArea.current.style.visibility = 'hidden';\r\n shadowTextArea.current.style.overflowY = '';\r\n textArea.current.style.overflowY = '';\r\n } else if (textArea && textArea.current && textArea.current.scrollHeight > textArea.current.clientHeight) {\r\n // scrollbar of the textarea is visible\r\n shadowTextArea.current.style.overflowY = 'scroll';\r\n shadowTextArea.current.style.visibility = '';\r\n shadowTextArea.current.scrollTop = textArea.current.scrollTop;\r\n } else if (shadowTextArea.current.scrollHeight > shadowTextArea.current.clientHeight) {\r\n // scrollbar of the shadow textarea is visible\r\n shadowTextArea.current.style.visibility = '';\r\n textArea.current.style.overflowY = 'scroll';\r\n textArea.current.scrollTop = shadowTextArea.current.scrollTop;\r\n } else {\r\n shadowTextArea.current.style.overflowY = '';\r\n shadowTextArea.current.style.visibility = '';\r\n textArea.current.style.overflowY = '';\r\n }\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [textArea, shadowTextArea.current, textToComplete]);\r\n\r\n return (\r\n
    \r\n 0 && prompt && prompt.length > 0 ?\r\n `${prompt}${prompt[prompt.length - 1] === ' ' ? '' : ' '}${textToComplete}` : ''}\r\n />\r\n 0 ?\r\n mergeClasses('main-textarea', 'prompt', promptEditorStyles.textarea) :\r\n mergeClasses('main-textarea', 'prompt', promptEditorStyles.textareaPlaceHolder)}\r\n placeholder={i18n.getString(_TL_('What image do you want to create? Describe the subject, key elements, place, style, lighting, and/or mood.'))}\r\n value={prompt}\r\n onChange={(e, data) => setPrompt(data.value)}\r\n />\r\n
    \r\n {selectedOption\r\n &&\r\n selectedOption.words.length > 0\r\n &&\r\n <>\r\n {slicedOptions.map(word => (\r\n {\r\n if (logger && logger.logTrace) {\r\n logger.logTrace('AIgeneratedImage: prompt button clicked', { word: word.word });\r\n }\r\n setPrompt(`${prompt}${((prompt === '') || (prompt && prompt.length > 0 && prompt[prompt.length - 1] === ' ')) ? '' : ' '}${word.word}`);\r\n setUsedOptions([...usedOptions, word]);\r\n setTextToComplete('');\r\n\r\n if (textArea && textArea.current) {\r\n textArea.current.focus();\r\n }\r\n }}\r\n onMouseOver={() => {\r\n if (textToComplete !== word.word) {\r\n setTextToComplete(word.word);\r\n }\r\n }}\r\n onMouseOut={() => setTextToComplete('')}\r\n >\r\n {word.word}\r\n \r\n ))}\r\n
    \r\n
    \r\n {\r\n if (logger && logger.logTrace) {\r\n logger.logTrace('AIgeneratedImage: toggle button clicked', { key });\r\n }\r\n setOptionsIndex(0);\r\n setOptionsState({\r\n ...(options.map(option => ({ [option.key]: false }))),\r\n [key]: !optionsState[key],\r\n });\r\n\r\n if (!optionsState[key]) {\r\n if (wordsRef && wordsRef.current) {\r\n setTimeout(() => {\r\n const suggestedWords = wordsRef.current.querySelectorAll('.suggested-word');\r\n if (suggestedWords && suggestedWords.length > 0) {\r\n suggestedWords[0].focus();\r\n }\r\n });\r\n }\r\n }\r\n }}\r\n />\r\n
    \r\n
    );\r\n};\r\n","import React from 'react';\r\nimport {\r\n PuzzlePiece20Regular,\r\n Color20Regular,\r\n ShapeSubtract20Regular,\r\n Lightbulb20Regular,\r\n Emoji20Regular,\r\n} from '@fluentui/react-icons';\r\n\r\nexport const getOptions = (i18n, usedOptions) => ([\r\n {\r\n key: 'keyElements',\r\n text: i18n.getString(_TL_('Key elements')),\r\n icon: ,\r\n words: ([\r\n { key: 'key_0', word: i18n.getString(_TL_('With clouds')) },\r\n { key: 'key_1', word: i18n.getString(_TL_('With mountains')) },\r\n { key: 'key_2', word: i18n.getString(_TL_('On a beach')) },\r\n { key: 'key_3', word: i18n.getString(_TL_('On the coast')) },\r\n { key: 'key_4', word: i18n.getString(_TL_('With vibrant foliage')) },\r\n { key: 'key_5', word: i18n.getString(_TL_('In a studio')) },\r\n { key: 'key_6', word: i18n.getString(_TL_('In autumn')) },\r\n { key: 'key_7', word: i18n.getString(_TL_('In winter')) },\r\n { key: 'key_8', word: i18n.getString(_TL_('In summer')) },\r\n { key: 'key_9', word: i18n.getString(_TL_('In spring')) },\r\n { key: 'key_10', word: i18n.getString(_TL_('Outdoors')) },\r\n { key: 'key_11', word: i18n.getString(_TL_('On a sleek desk')) },\r\n { key: 'key_12', word: i18n.getString(_TL_('In a vibrant market')) },\r\n { key: 'key_13', word: i18n.getString(_TL_('With indoor plants')) },\r\n { key: 'key_14', word: i18n.getString(_TL_('In a modern kitchen')) },\r\n { key: 'key_15', word: i18n.getString(_TL_('On a marble countertop')) },\r\n { key: 'key_16', word: i18n.getString(_TL_('In front of a modern building')) },\r\n { key: 'key_17', word: i18n.getString(_TL_('With a laptop')) },\r\n { key: 'key_18', word: i18n.getString(_TL_('In a boutique')) },\r\n { key: 'key_19', word: i18n.getString(_TL_('In a stylish home office')) },\r\n { key: 'key_20', word: i18n.getString(_TL_('In a park')) },\r\n { key: 'key_21', word: i18n.getString(_TL_('With tropical plants')) },\r\n { key: 'key_22', word: i18n.getString(_TL_('With balloons and confetti')) },\r\n { key: 'key_23', word: i18n.getString(_TL_('On a table')) },\r\n { key: 'key_24', word: i18n.getString(_TL_('In a sunny backyard')) },\r\n { key: 'key_25', word: i18n.getString(_TL_('With cozy decor')) },\r\n { key: 'key_26', word: i18n.getString(_TL_('In a dining room')) },\r\n { key: 'key_27', word: i18n.getString(_TL_('In a living room')) },\r\n { key: 'key_28', word: i18n.getString(_TL_('On an urban street')) },\r\n ]).filter(option => !usedOptions.find(usedOption => usedOption.key === option.key)),\r\n },\r\n {\r\n key: 'mood',\r\n text: i18n.getString(_TL_('Mood')),\r\n icon: ,\r\n words: ([\r\n { key: 'mood_key_0', word: i18n.getString(_TL_('Warm and inviting')) },\r\n { key: 'mood_key_1', word: i18n.getString(_TL_('Adventurous')) },\r\n { key: 'mood_key_2', word: i18n.getString(_TL_('Nostalgic')) },\r\n { key: 'mood_key_3', word: i18n.getString(_TL_('Energetic and playful')) },\r\n { key: 'mood_key_4', word: i18n.getString(_TL_('Elegant and sophisticated')) },\r\n { key: 'mood_key_5', word: i18n.getString(_TL_('Joyful')) },\r\n { key: 'mood_key_6', word: i18n.getString(_TL_('Serene')) },\r\n { key: 'mood_key_7', word: i18n.getString(_TL_('Romantic')) },\r\n { key: 'mood_key_8', word: i18n.getString(_TL_('Mysterious')) },\r\n { key: 'mood_key_9', word: i18n.getString(_TL_('Cozy')) },\r\n { key: 'mood_key_10', word: i18n.getString(_TL_('Bold')) },\r\n { key: 'mood_key_11', word: i18n.getString(_TL_('Peaceful')) },\r\n { key: 'mood_key_12', word: i18n.getString(_TL_('Dynamic')) },\r\n { key: 'mood_key_13', word: i18n.getString(_TL_('Dramatic')) },\r\n { key: 'mood_key_14', word: i18n.getString(_TL_('Contemplative')) },\r\n { key: 'mood_key_15', word: i18n.getString(_TL_('Futuristic')) },\r\n { key: 'mood_key_16', word: i18n.getString(_TL_('Whimsical')) },\r\n { key: 'mood_key_17', word: i18n.getString(_TL_('Calm and tranquil')) },\r\n { key: 'mood_key_18', word: i18n.getString(_TL_('Fresh and invigorating')) },\r\n { key: 'mood_key_19', word: i18n.getString(_TL_('Intimate')) },\r\n { key: 'mood_key_20', word: i18n.getString(_TL_('Bright and cheerful')) },\r\n { key: 'mood_key_21', word: i18n.getString(_TL_('Celebratory')) },\r\n ]).filter(option => !usedOptions.find(usedOption => usedOption.key === option.key)),\r\n },\r\n {\r\n key: 'style',\r\n text: i18n.getString(_TL_('Style')),\r\n icon: ,\r\n words: ([\r\n { key: 'style_key_0', word: i18n.getString(_TL_('Vintage retro')) },\r\n { key: 'style_key_1', word: i18n.getString(_TL_('Minimalist and clean')) },\r\n { key: 'style_key_2', word: i18n.getString(_TL_('Modern')) },\r\n { key: 'style_key_3', word: i18n.getString(_TL_('Candid')) },\r\n { key: 'style_key_4', word: i18n.getString(_TL_('Artistic')) },\r\n { key: 'style_key_5', word: i18n.getString(_TL_('High fashion')) },\r\n { key: 'style_key_6', word: i18n.getString(_TL_('Black and white')) },\r\n { key: 'style_key_7', word: i18n.getString(_TL_('Architectural')) },\r\n { key: 'style_key_8', word: i18n.getString(_TL_('Nature-inspired')) },\r\n { key: 'style_key_9', word: i18n.getString(_TL_('Rural and rustic')) },\r\n { key: 'style_key_10', word: i18n.getString(_TL_('Cinematic')) },\r\n { key: 'style_key_11', word: i18n.getString(_TL_('Vibrant')) },\r\n { key: 'style_key_12', word: i18n.getString(_TL_('Rugged and earthy')) },\r\n { key: 'style_key_13', word: i18n.getString(_TL_('Chic and fashionable')) },\r\n { key: 'style_key_14', word: i18n.getString(_TL_('Lush and tropical')) },\r\n { key: 'style_key_15', word: i18n.getString(_TL_('Bohemian')) },\r\n { key: 'style_key_16', word: i18n.getString(_TL_('Industrial chic')) },\r\n { key: 'style_key_17', word: i18n.getString(_TL_('Coastal cottage')) },\r\n { key: 'style_key_18', word: i18n.getString(_TL_('Art deco')) },\r\n { key: 'style_key_19', word: i18n.getString(_TL_('Urban street style')) },\r\n { key: 'style_key_20', word: i18n.getString(_TL_('Sophisticated elegance')) },\r\n { key: 'style_key_21', word: i18n.getString(_TL_('Whimsical fantasy')) },\r\n { key: 'style_key_22', word: i18n.getString(_TL_('Timeless and classic')) },\r\n { key: 'style_key_23', word: i18n.getString(_TL_('Bold and geometric')) },\r\n { key: 'style_key_24', word: i18n.getString(_TL_('Playful and colorful')) },\r\n { key: 'style_key_25', word: i18n.getString(_TL_('Dark and moody')) },\r\n { key: 'style_key_26', word: i18n.getString(_TL_('Soft pastel')) },\r\n { key: 'style_key_27', word: i18n.getString(_TL_('Grunge aesthetic')) },\r\n ]).filter(option => !usedOptions.find(usedOption => usedOption.key === option.key)),\r\n },\r\n {\r\n key: 'composition',\r\n text: i18n.getString(_TL_('Composition')),\r\n icon: ,\r\n words: ([\r\n { key: 'composition_key_0', word: i18n.getString(_TL_('Close-up view')) },\r\n { key: 'composition_key_1', word: i18n.getString(_TL_('Front view')) },\r\n { key: 'composition_key_2', word: i18n.getString(_TL_('Top-down view')) },\r\n { key: 'composition_key_3', word: i18n.getString(_TL_('Side view')) },\r\n { key: 'composition_key_4', word: i18n.getString(_TL_('Bird’s eye view')) },\r\n { key: 'composition_key_5', word: i18n.getString(_TL_('Centered and symmetrical')) },\r\n { key: 'composition_key_6', word: i18n.getString(_TL_('Asymmetrical balance')) },\r\n { key: 'composition_key_7', word: i18n.getString(_TL_('Wide shot')) },\r\n { key: 'composition_key_8', word: i18n.getString(_TL_('High shot')) },\r\n { key: 'composition_key_9', word: i18n.getString(_TL_('Medium shot')) },\r\n { key: 'composition_key_10', word: i18n.getString(_TL_('Low angle')) },\r\n { key: 'composition_key_11', word: i18n.getString(_TL_('Worm’s eye view')) },\r\n { key: 'composition_key_12', word: i18n.getString(_TL_('Tilted angle')) },\r\n { key: 'composition_key_13', word: i18n.getString(_TL_('Over-the-shoulder')) },\r\n { key: 'composition_key_14', word: i18n.getString(_TL_('Extreme close-up view')) },\r\n { key: 'composition_key_15', word: i18n.getString(_TL_('Reflected angle')) },\r\n { key: 'composition_key_16', word: i18n.getString(_TL_('Background blur')) },\r\n { key: 'composition_key_17', word: i18n.getString(_TL_('Panoramic')) },\r\n { key: 'composition_key_18', word: i18n.getString(_TL_('Extreme long shot')) },\r\n { key: 'composition_key_19', word: i18n.getString(_TL_('Framed')) },\r\n { key: 'composition_key_20', word: i18n.getString(_TL_('Leading lines')) },\r\n { key: 'composition_key_21', word: i18n.getString(_TL_('Layered textures')) },\r\n { key: 'composition_key_22', word: i18n.getString(_TL_('Reflections in water')) },\r\n { key: 'composition_key_23', word: i18n.getString(_TL_('Shadow play')) },\r\n { key: 'composition_key_24', word: i18n.getString(_TL_('Environmental portrait')) },\r\n { key: 'composition_key_25', word: i18n.getString(_TL_('Action shot')) },\r\n { key: 'composition_key_26', word: i18n.getString(_TL_('Candid moment')) },\r\n { key: 'composition_key_27', word: i18n.getString(_TL_('Silhouette against light')) },\r\n { key: 'composition_key_28', word: i18n.getString(_TL_('Grid layout')) },\r\n { key: 'composition_key_29', word: i18n.getString(_TL_('Rule of thirds')) },\r\n ]).filter(option => !usedOptions.find(usedOption => usedOption.key === option.key)),\r\n },\r\n {\r\n key: 'lighting',\r\n text: i18n.getString(_TL_('Lighting')),\r\n icon: ,\r\n words: ([\r\n { key: 'lighting_key_0', word: i18n.getString(_TL_('Natural sunlight')) },\r\n { key: 'lighting_key_1', word: i18n.getString(_TL_('Golden hour glow')) },\r\n { key: 'lighting_key_2', word: i18n.getString(_TL_('Bright studio lighting')) },\r\n { key: 'lighting_key_3', word: i18n.getString(_TL_('Backlighting')) },\r\n { key: 'lighting_key_4', word: i18n.getString(_TL_('Front lighting')) },\r\n { key: 'lighting_key_5', word: i18n.getString(_TL_('Dramatic shadows')) },\r\n { key: 'lighting_key_6', word: i18n.getString(_TL_('Harsh direct light')) },\r\n { key: 'lighting_key_7', word: i18n.getString(_TL_('Candlelight ambiance')) },\r\n { key: 'lighting_key_8', word: i18n.getString(_TL_('Neon lights')) },\r\n { key: 'lighting_key_9', word: i18n.getString(_TL_('Spotlight effect')) },\r\n { key: 'lighting_key_10', word: i18n.getString(_TL_('Dappled sunlight')) },\r\n { key: 'lighting_key_11', word: i18n.getString(_TL_('Underwater lighting')) },\r\n { key: 'lighting_key_12', word: i18n.getString(_TL_('Twilight')) },\r\n { key: 'lighting_key_13', word: i18n.getString(_TL_('Flickering fire')) },\r\n { key: 'lighting_key_14', word: i18n.getString(_TL_('High contrast')) },\r\n { key: 'lighting_key_15', word: i18n.getString(_TL_('Side lighting')) },\r\n { key: 'lighting_key_16', word: i18n.getString(_TL_('Top lighting')) },\r\n { key: 'lighting_key_17', word: i18n.getString(_TL_('Bottom lighting')) },\r\n { key: 'lighting_key_18', word: i18n.getString(_TL_('Harsh lighting')) },\r\n { key: 'lighting_key_19', word: i18n.getString(_TL_('Soft, diffused lighting')) },\r\n { key: 'lighting_key_20', word: i18n.getString(_TL_('Split lighting')) },\r\n { key: 'lighting_key_21', word: i18n.getString(_TL_('Ambient lighting')) },\r\n { key: 'lighting_key_22', word: i18n.getString(_TL_('High-key lighting')) },\r\n { key: 'lighting_key_23', word: i18n.getString(_TL_('Low-key lighting')) },\r\n { key: 'lighting_key_24', word: i18n.getString(_TL_('Warm lighting')) },\r\n { key: 'lighting_key_25', word: i18n.getString(_TL_('Cool lighting')) },\r\n { key: 'lighting_key_26', word: i18n.getString(_TL_('Muted lighting')) },\r\n { key: 'lighting_key_27', word: i18n.getString(_TL_('At sunset')) },\r\n ]).filter(option => !usedOptions.find(usedOption => usedOption.key === option.key)),\r\n },\r\n]).filter(x => x.words.length > 0);\r\n","import {\r\n makeResetStyles,\r\n shorthands\r\n} from '@fluentui/react-components';\r\n\r\nexport const useGeneratedImagesStyles = makeResetStyles({\r\n paddingLeft: '42px',\r\n paddingRight: '42px',\r\n '& .loading-section': {\r\n '& button': {\r\n marginTop: '8px',\r\n },\r\n textAlign: 'center',\r\n marginTop: '32px',\r\n marginBottom: '32px',\r\n },\r\n '& .actionBottomText': {\r\n color: '#605e5c',\r\n },\r\n '& .title': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n ...shorthands.gap('5.8px'),\r\n '& span': {\r\n fontSize: '17.4px',\r\n fontWeight: 400,\r\n lineHeight: '23.2px',\r\n },\r\n '& svg': {\r\n width: '29px',\r\n height: '29px',\r\n },\r\n marginBottom: '20px',\r\n },\r\n '& .stock-images': {\r\n '& .title': {\r\n marginTop: '20px',\r\n },\r\n },\r\n '& .tiles-grid-cell': {\r\n overflow: 'hidden',\r\n ...shorthands.borderRadius('8px'),\r\n '&:hover, &:focus-within': {\r\n '& .action-overlay .add-button-view.notClicked': {\r\n visibility: 'visible',\r\n },\r\n },\r\n '& .action-overlay .add-button-view.notClicked': {\r\n visibility: 'hidden',\r\n },\r\n '& .info-overlay': {\r\n position: 'absolute',\r\n bottom: '10px',\r\n left: '10px',\r\n backgroundColor: 'rgba(255, 255, 255, 0.733)',\r\n height: '29px',\r\n width: '29px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n ...shorthands.borderRadius('8px'),\r\n },\r\n '& .action-overlay': {\r\n position: 'absolute',\r\n top: '10px',\r\n right: '10px',\r\n '& .add-button-view': {\r\n '& svg': {\r\n height: '24px',\r\n width: '24px',\r\n },\r\n display: 'flex',\r\n alignItems: 'center',\r\n padding: '4px',\r\n height: '32px',\r\n width: '32px',\r\n ...shorthands.overflow('hidden', 'hidden'),\r\n backdropFilter: 'blur(6px)',\r\n backgroundColor: '#FFF',\r\n ...shorthands.borderRadius('999px'),\r\n ...shorthands.gap('2px'),\r\n '& .icon': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n '& .addIcon': {\r\n marginLeft: '1px',\r\n },\r\n '& .spinnerIcon': {\r\n animationDuration: '1s',\r\n animationIterationCount: 'infinite',\r\n animationTimingFunction: 'linear',\r\n animationName: [{\r\n from: { transform: 'rotate(0deg)' },\r\n to: { transform: 'rotate(360deg)' },\r\n }],\r\n },\r\n },\r\n },\r\n '& img': {\r\n width: '100%',\r\n height: '100%',\r\n objectFit: 'cover',\r\n },\r\n },\r\n});\r\n\r\nexport const useLoadingViewStyles = makeResetStyles({\r\n backgroundImage: 'linear-gradient(270deg, rgba(255, 255, 255, 0.4) 0%, rgba(71, 207, 250, 0.4) 20%, rgba(180, 124, 248, 0.4) 80%, rgba(255, 255, 255, 0.4) 100%)',\r\n width: '100%',\r\n height: '100%',\r\n backgroundColor: 'rgba(233, 234, 240, 1)',\r\n opacity: '0.4',\r\n animationDuration: '3s',\r\n backgroundSize: '500%',\r\n animationIterationCount: 'infinite',\r\n animationTimingFunction: 'linear',\r\n animationName: [{\r\n from: { backgroundPosition: '100%' },\r\n to: { backgroundPosition: '-20%' },\r\n }],\r\n ...shorthands.borderRadius('8px', '8px', '8px', '8px'),\r\n forcedColorAdjust: 'none',\r\n});\r\n","import React, { useCallback, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n Tooltip,\r\n mergeClasses, Text, Button\r\n} from '@fluentui/react-components';\r\nimport {\r\n ImageSearchRegular,\r\n CheckmarkRegular,\r\n SpinnerIosRegular,\r\n AddRegular,\r\n} from '@fluentui/react-icons';\r\nimport {\r\n SectionTilesGrid,\r\n TilesGridCellImage,\r\n BlackSparkleSVGIcon,\r\n InfoSparkleSVGIcon,\r\n SquareDismissIcon,\r\n LoadingIndicator,\r\n} from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { useGeneratedImagesStyles, useLoadingViewStyles } from './style';\r\n\r\nconst addSearchParams = (url, params = {}) =>\r\n new URL(`${url.origin}${url.pathname}?${new URLSearchParams([\r\n ...Array.from(url.searchParams.entries()),\r\n ...Object.entries(params),\r\n ])}`);\r\n\r\nconst MAXAIGCCount = 4;\r\n\r\n\r\nconst LoadingCell = () => {\r\n const classes = useLoadingViewStyles();\r\n\r\n return (\r\n
    \r\n );\r\n};\r\n\r\nconst GeneratedImages = ({\r\n aigcImages,\r\n stockImages,\r\n i18n,\r\n isLoading,\r\n loadMoreStockImages,\r\n totalStockImagesCount,\r\n addAIGCImage,\r\n addStockImage,\r\n savedAIGCImages,\r\n savedStockImages,\r\n savingAIGCImages,\r\n savingStockImages,\r\n scrollContainer,\r\n cancel,\r\n logger,\r\n stopGeneratingBtnRef,\r\n}) => {\r\n const generatedImagesStyle = useGeneratedImagesStyles();\r\n\r\n const onRenderImageSpinner = useCallback(() => (\r\n \r\n ), []);\r\n\r\n const Icon = useCallback(({ isSaved, isSaving }) => {\r\n if (isSaved) {\r\n return (\r\n
    \r\n \r\n
    \r\n );\r\n } else if (isSaving) {\r\n return (\r\n
    \r\n \r\n
    \r\n );\r\n }\r\n return (\r\n
    \r\n \r\n
    \r\n );\r\n }, []);\r\n\r\n const AddButton = useCallback(({\r\n addImage,\r\n onKeyDown,\r\n isSaved,\r\n isSaving,\r\n }) => {\r\n let tooltipContent = '';\r\n if (isSaved) {\r\n tooltipContent = i18n.getString(_TL_('Asset saved'));\r\n } else if (isSaving) {\r\n tooltipContent = i18n.getString(_TL_('Saving'));\r\n } else {\r\n tooltipContent = i18n.getString(_TL_('Save to my library'));\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\n }, [Icon, i18n]);\r\n\r\n const onRenderAIGCCell = useCallback(({ item }) => {\r\n if (isLoading) {\r\n return ;\r\n }\r\n\r\n let {\r\n thumbnailSrc: src,\r\n } = item;\r\n const { modelSource } = item;\r\n\r\n const isSaved = savedAIGCImages.includes(src);\r\n const isSaving = savingAIGCImages.includes(src);\r\n\r\n try {\r\n let srcURL = new URL(src);\r\n if (srcURL.host === 'th.bing.com') {\r\n const length = 330;\r\n srcURL = addSearchParams(srcURL, { w: length, h: length });\r\n src = srcURL.toString();\r\n }\r\n } catch (e) {\r\n // ignore\r\n }\r\n\r\n /* istanbul ignore next */\r\n const addImage = (event) => {\r\n if (isSaved || isSaving) { return; }\r\n if (logger && logger.logTrace) {\r\n logger.logTrace('Start to add aigc image');\r\n }\r\n addAIGCImage(src, modelSource);\r\n event.stopPropagation();\r\n };\r\n\r\n /* istanbul ignore next */\r\n const onKeyDown = (event) => {\r\n event.preventDefault();\r\n if (event.key === 'Enter') {\r\n addImage();\r\n }\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 }, [AddButton, addAIGCImage, i18n, isLoading, logger, onRenderImageSpinner, savedAIGCImages, savingAIGCImages]);\r\n\r\n const onRenderStockCell = useCallback(({ item }) => {\r\n const {\r\n Preview: { Url },\r\n Id,\r\n } = item;\r\n\r\n const isSaved = savedStockImages.includes(Id);\r\n const isSaving = savingStockImages.includes(Id);\r\n\r\n /* istanbul ignore next */\r\n const addImage = (event) => {\r\n if (isSaved || isSaving) { return; }\r\n if (logger && logger.logTrace) {\r\n logger.logTrace('Start to add stock image');\r\n }\r\n addStockImage(Id);\r\n event.stopPropagation();\r\n };\r\n\r\n /* istanbul ignore next */\r\n const onKeyDown = (event) => {\r\n event.preventDefault();\r\n if (event.key === 'Enter') {\r\n addImage();\r\n }\r\n };\r\n\r\n return (\r\n
    \r\n \r\n \r\n
    \r\n );\r\n }, [savedStockImages, savingStockImages, i18n, AddButton, logger, addStockImage]);\r\n\r\n const aigcImagesWithAction = useMemo(() => aigcImages.map((image) => {\r\n const {\r\n thumbnailSrc: src,\r\n modelSource,\r\n } = image;\r\n\r\n const isSaved = savedAIGCImages.includes(src);\r\n const isSaving = savingAIGCImages.includes(src);\r\n\r\n return ({\r\n ...image,\r\n onAction: () => {\r\n /* istanbul ignore if */\r\n if (isSaved || isSaving) { return; }\r\n /* istanbul ignore next */\r\n addAIGCImage(src, modelSource);\r\n },\r\n });\r\n }), [aigcImages, savedAIGCImages, savingAIGCImages, addAIGCImage]);\r\n\r\n const stockImagesWithAction = useMemo(() => stockImages.map((image) => {\r\n const {\r\n Id,\r\n } = image;\r\n\r\n const isSaved = savedStockImages.includes(Id);\r\n const isSaving = savingStockImages.includes(Id);\r\n\r\n return ({\r\n ...image,\r\n onAction: () => {\r\n /* istanbul ignore if */\r\n if (isSaved || isSaving) { return; }\r\n /* istanbul ignore next */\r\n addStockImage(Id);\r\n },\r\n });\r\n }), [stockImages, savedStockImages, savingStockImages, addStockImage]);\r\n\r\n const aigcImagesGridSection = useMemo(() => ({\r\n sectionName: 'AIGCImages',\r\n sectionClassName: 'aigc-image-section',\r\n itemKey: 'id',\r\n items: isLoading ? Array.from({ length: MAXAIGCCount }, (v, k) => ({ k })) : aigcImagesWithAction,\r\n totalItemCount: isLoading ? MAXAIGCCount : aigcImagesWithAction.length,\r\n config: {\r\n width: 285,\r\n height: 285,\r\n gridMode: true,\r\n maxColumns: 2,\r\n columnPadding: 16,\r\n rowPadding: 16,\r\n scrollContainer: scrollContainer !== undefined ? scrollContainer : '[role=\"main\"]',\r\n },\r\n }), [aigcImagesWithAction, isLoading, scrollContainer]);\r\n\r\n const stockImagesGridSection = useMemo(() => ({\r\n sectionName: 'StockImages',\r\n sectionClassName: 'stock-image-section',\r\n itemKey: 'id',\r\n items: stockImagesWithAction,\r\n totalItemCount: totalStockImagesCount,\r\n config: {\r\n width: 285,\r\n maxColumns: 2,\r\n columnPadding: 16,\r\n rowPadding: 16,\r\n scrollContainer: scrollContainer !== undefined ? scrollContainer : '[role=\"main\"]',\r\n },\r\n }), [scrollContainer, stockImagesWithAction, totalStockImagesCount]);\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n {i18n.getString(_TL_('AI generated'))}\r\n \r\n
    \r\n {\r\n isLoading && (\r\n
    \r\n \r\n }\r\n appearance=\"subtle\"\r\n onClick={() => {\r\n cancel();\r\n }}\r\n ref={stopGeneratingBtnRef}\r\n >\r\n {i18n.getString(_TL_('Stop generating'))}\r\n \r\n
    \r\n )\r\n }\r\n \r\n
    \r\n {isLoading ? null : {i18n.getString(_TL_('Created with Microsoft Advertising'))}}\r\n
    \r\n
    \r\n {!isLoading && stockImages && stockImages.length > 0 &&\r\n (\r\n
    \r\n
    \r\n \r\n \r\n {i18n.getString(_TL_('Stock images'))}\r\n \r\n
    \r\n \r\n
    \r\n )\r\n }\r\n
    \r\n );\r\n};\r\n\r\nGeneratedImages.propTypes = {\r\n stockImages: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n aigcImages: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n isLoading: PropTypes.bool.isRequired,\r\n};\r\n\r\nexport {\r\n GeneratedImages,\r\n};\r\n","import {\r\n makeResetStyles,\r\n shorthands,\r\n} from '@fluentui/react-components';\r\n\r\nexport const useExampleImageStyles = makeResetStyles({\r\n position: 'relative',\r\n width: '100%',\r\n height: '100%',\r\n '& .example-image': {\r\n position: 'absolute',\r\n top: '50%',\r\n left: '50%',\r\n transform: 'translate(-50%, -50%)',\r\n '& .cell-image-frame': {\r\n ...shorthands.borderRadius('6px'),\r\n overflow: 'hidden',\r\n },\r\n },\r\n});\r\n","import React from 'react';\r\nimport {\r\n mergeClasses\r\n} from '@fluentui/react-components';\r\nimport {\r\n TilesGridCellImage,\r\n} from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n\r\nimport { useExampleImageStyles } from './style';\r\n\r\nexport const ExampleImage = (props) => {\r\n const {\r\n i18n,\r\n generateImageExample,\r\n classes,\r\n } = props;\r\n const baseClasses = useExampleImageStyles();\r\n\r\n return (\r\n
    \r\n
    \r\n {generateImageExample && generateImageExample.imageUrl && }\r\n
    \r\n
    \r\n );\r\n};\r\n","import {\r\n makeResetStyles, shorthands,\r\n} from '@fluentui/react-components';\r\n\r\nexport const useExplorePromptsStyles = makeResetStyles({\r\n '& .title': {\r\n marginBottom: '24px',\r\n '& span': {\r\n color: '#605E5C',\r\n fontSize: '16px',\r\n fontWeight: '600',\r\n lineHeight: '24px',\r\n letterSpacing: '-0.16px',\r\n },\r\n },\r\n '& .tiles-grid-cell': {\r\n '&:hover, &:focus-within': {\r\n '& .image-with-prompt .prompt-overlay': {\r\n animationName: [{\r\n '0%': { opacity: '0' },\r\n '100%': { opacity: '1' },\r\n }],\r\n animationDuration: '0.5s',\r\n animationTimingFunction: 'ease-in-out',\r\n '& .example-prompt-template': { // Need height for ellipsis calculation to work\r\n animationName: [{\r\n '0%': { transform: 'translateY(10px)' },\r\n '100%': { transform: 'translateY(0px)' },\r\n }],\r\n animationDuration: '0.5s',\r\n animationTimingFunction: 'ease-in-out',\r\n },\r\n visibility: 'visible',\r\n width: '100%',\r\n height: '100%',\r\n top: 0,\r\n left: 0,\r\n position: 'absolute',\r\n padding: '14px',\r\n fontSize: '16px',\r\n fontWeight: '600',\r\n color: '#FFF',\r\n backgroundImage: 'var(--gradient, linear-gradient(180deg, #F8ADFA -4.49%, rgba(168, 110, 221, 0.00) 13.18%), radial-gradient(166.31% 133.62% at 82.99% -9.79%, #8C48FF 6.62%, #F2598A 50%, #FFB152 89.58%))',\r\n },\r\n },\r\n '& .image-with-prompt': {\r\n width: '100%',\r\n height: '100%',\r\n position: 'relative',\r\n ...shorthands.borderRadius('8px', '8px', '8px', '8px'),\r\n ...shorthands.overflow('hidden', 'hidden'),\r\n '& img': {\r\n width: '100%',\r\n height: '100%',\r\n objectFit: 'cover',\r\n },\r\n '& .prompt-overlay': {\r\n visibility: 'hidden',\r\n width: '100%',\r\n height: '100%',\r\n top: 0,\r\n left: 0,\r\n right: 0,\r\n bottom: 0,\r\n position: 'absolute',\r\n padding: '14px',\r\n fontSize: '16px',\r\n fontWeight: '600',\r\n '& .example-prompt-template': { // Need height for ellipsis calculation to work\r\n width: '100%',\r\n height: '100%',\r\n top: 0,\r\n left: 0,\r\n right: 0,\r\n bottom: 0,\r\n },\r\n },\r\n },\r\n },\r\n});\r\n","import React, { memo, useMemo } from 'react';\r\nimport {\r\n mergeClasses,\r\n} from '@fluentui/react-components';\r\nimport {\r\n SectionTilesGrid,\r\n AIPromptExamples as prompts\r\n} from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { useExplorePromptsStyles } from './style';\r\n\r\nexport const ExplorePrompts = memo((props) => {\r\n const {\r\n i18n,\r\n setPrompt,\r\n MultiLineEllipsisText,\r\n scrollContainer,\r\n logger,\r\n } = props;\r\n\r\n const explorePromptsStyles = useExplorePromptsStyles();\r\n const onRenderCell = ({ item }) => {\r\n const {\r\n promptText,\r\n imageSrc,\r\n } = item;\r\n\r\n const localizedPromptText = i18n.getString(promptText);\r\n\r\n const onClick = (event) => {\r\n if (logger && logger.logTrace) {\r\n logger.logTrace('AIgeneratedImage: example prompt images clicked', { promptText: localizedPromptText });\r\n }\r\n event.preventDefault();\r\n setPrompt(localizedPromptText);\r\n };\r\n\r\n // TODO: on key down not working\r\n const onKeyDown = (event) => {\r\n if (event.key === 'Enter') {\r\n event.preventDefault();\r\n setPrompt(localizedPromptText);\r\n }\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 const promptsWithAction = prompts.map(prompt => ({\r\n ...prompt,\r\n tabIndex: -1,\r\n onAction: (event) => {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n setPrompt(i18n.getString(prompt.promptText));\r\n },\r\n }));\r\n\r\n const promptsGridSection = useMemo(() => ({\r\n sectionName: 'Prompts',\r\n sectionClassName: 'prompts-with-image-section',\r\n itemKey: 'id',\r\n items: promptsWithAction,\r\n totalItemCount: promptsWithAction.length,\r\n config: {\r\n width: 216,\r\n height: 184,\r\n gridMode: true,\r\n columnPadding: 12,\r\n rowPadding: 12,\r\n scrollContainer: scrollContainer !== undefined ? scrollContainer : '[role=\"main\"]',\r\n },\r\n }), [promptsWithAction, scrollContainer]);\r\n\r\n const sectionGridData = useMemo(\r\n () => ([promptsGridSection]),\r\n [promptsGridSection]\r\n );\r\n\r\n return (\r\n
    \r\n
    \r\n \r\n {i18n.getString(_TL_('Explore prompts'))}\r\n \r\n
    \r\n \r\n
    \r\n );\r\n});\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Link, makeResetStyles, makeStyles, mergeClasses, shorthands, tokens, } from '@fluentui/react-components';\r\nimport { MessageBar, MessageBarBody } from '@fluentui/react-message-bar';\r\n\r\n\r\nconst useAIGCDisclaimerStyles = makeStyles({\r\n marginLeft4: {\r\n marginLeft: '4px',\r\n ...shorthands.textDecoration('underline'),\r\n },\r\n});\r\n\r\nconst useAIGCDisclaimerDefaultStyles = makeResetStyles({\r\n '&:focus': {\r\n borderStyle: 'solid',\r\n borderWidth: '1px',\r\n borderColor: tokens.colorStrokeFocus2,\r\n },\r\n});\r\n\r\nexport const AIGCDisclaimer = (props) => {\r\n const {\r\n i18n,\r\n } = props;\r\n\r\n const classes = useAIGCDisclaimerStyles();\r\n const defaultClasses = useAIGCDisclaimerDefaultStyles();\r\n\r\n return (\r\n
    \r\n \r\n \r\n {i18n.getString(_TL_('Please ensure you review any newly created images carefully. It\\'s your responsibility to ensure that the images do not infringe upon any third-party rights, including copyright or other intellectual property rights.'))}\r\n \r\n {i18n.getString(_TL_('Learn more'))}\r\n \r\n \r\n \r\n
    );\r\n};\r\n\r\n\r\nAIGCDisclaimer.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n};\r\n\r\nAIGCDisclaimer.defaultProps = {\r\n};\r\n","import React from 'react';\r\nimport {\r\n mergeClasses, Text,\r\n} from '@fluentui/react-components';\r\n\r\nexport const RemainingText = ({\r\n i18n, className,\r\n}) => {\r\n const remainingText = i18n.getString(_TL_('Please note you have a limited number of image requests that we can generate quickly each day. After that, image generations may take longer than expected.'));\r\n return (\r\n <>\r\n
    \r\n {remainingText}\r\n
    \r\n \r\n );\r\n};\r\n","import React from 'react';\r\nimport { MessageBar, MessageBarBody } from '@fluentui/react-message-bar';\r\n\r\n\r\nexport const ErrorMessage = (props) => {\r\n const {\r\n error,\r\n } = props;\r\n\r\n if (error == null) return null;\r\n\r\n return (error && error.length > 0 &&\r\n
    \r\n \r\n \r\n {error}\r\n \r\n \r\n
    );\r\n};\r\n\r\n","import {\r\n makeResetStyles, shorthands,\r\n} from '@fluentui/react-components';\r\n\r\nexport const useGenerateImagePageStyles = makeResetStyles({\r\n display: 'flex',\r\n width: '100%',\r\n height: '100%',\r\n '& .prompt-panel': {\r\n width: 'calc((100% - 69px)/2)',\r\n paddingTop: '56px',\r\n paddingLeft: '44px',\r\n paddingRight: '44px',\r\n position: 'fixed',\r\n overflowY: 'auto',\r\n '& .title': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n '& span': {\r\n color: '#171A1F',\r\n },\r\n },\r\n '& .remainingText': {\r\n marginTop: '4px',\r\n color: '#605e5c',\r\n marginBottom: '24px',\r\n },\r\n '& .prompt-section': {\r\n position: 'relative',\r\n },\r\n '& .message-bar': {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n ...shorthands.gap('8px'),\r\n marginTop: '24px',\r\n width: '100%',\r\n },\r\n '& .action-bar': {\r\n display: 'flex',\r\n marginTop: '25px',\r\n alignItems: 'center',\r\n justifyContent: 'flex-end',\r\n gap: '12px',\r\n '& button': {\r\n minWidth: 'unset',\r\n whiteSpace: 'nowrap',\r\n },\r\n '& .generate-button': {\r\n '& span': {\r\n color: '#FFFFFF',\r\n },\r\n '& .sparkle-icon': {\r\n fontSize: '24px',\r\n height: '24px',\r\n width: '24px',\r\n },\r\n backgroundImage: 'linear-gradient(91deg, #185ABD 0%, #8763C2 100%)',\r\n },\r\n },\r\n },\r\n '& .image-panel': {\r\n marginLeft: 'calc((100vw - (100vw - 100%)) / 2 + (100vw - 69px - 100%) / 2)',\r\n width: '50%',\r\n paddingTop: '48px',\r\n paddingBottom: '48px',\r\n backgroundColor: '#FAFAFA',\r\n paddingLeft: '36px',\r\n paddingRight: '36px',\r\n '& .loading-view': {\r\n width: '100%',\r\n height: '100%',\r\n },\r\n },\r\n});\r\n","import React, { useMemo, useCallback, useState, useLayoutEffect, useEffect, useRef } from 'react';\r\nimport queryString from 'query-string';\r\nimport {\r\n makeStyles,\r\n mergeClasses,\r\n Subtitle1, Subtitle2, Button,\r\n} from '@fluentui/react-components';\r\nimport {\r\n ArrowReset24Regular,\r\n} from '@fluentui/react-icons';\r\nimport {\r\n HollowSparkleSVGIcon,\r\n HiddenDivForAnnounce,\r\n} from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { setClarityTag } from '@bingads-webui-universal/clarity';\r\nimport { usePageActiveTimeTracker } from '@bingads-webui-campaign-react/common-hooks';\r\nimport { Mode } from '@bingads-webui-react/app-layout-container';\r\n\r\nimport { useGenerateImagePageState, statuses } from './state';\r\nimport { BrandDetectionConfirmation } from './brand-detection-confirmation';\r\nimport { PromptEditor } from './prompt-editor';\r\nimport { GeneratedImages } from './generated-images';\r\nimport { ExampleImage } from './example-image';\r\nimport { ExplorePrompts } from './explore-prompts';\r\nimport { AIGCDisclaimer } from './disclaimer';\r\nimport { RemainingText } from './remaing-text';\r\nimport { ErrorMessage } from './error';\r\nimport { useGenerateImagePageStyles } from './style';\r\n\r\nconst ActionBar = (props) => {\r\n const {\r\n i18n,\r\n startOver,\r\n generateImage,\r\n isLoading,\r\n isValid,\r\n } = props;\r\n\r\n const onStartOverKeyDown = (evt) => {\r\n if (evt.code === 'Enter' || evt.code === 'Space') {\r\n startOver(evt);\r\n evt.stopPropagation();\r\n evt.preventDefault();\r\n }\r\n };\r\n\r\n const onGenerateImageKeyDown = (evt) => {\r\n if (evt.code === 'Enter' || evt.code === 'Space') {\r\n generateImage(evt);\r\n evt.stopPropagation();\r\n evt.preventDefault();\r\n }\r\n };\r\n\r\n return (\r\n
    \r\n }\r\n onClick={startOver}\r\n onKeyDown={onStartOverKeyDown}\r\n disabled={!isValid || isLoading}\r\n >\r\n \r\n {i18n.getString(_TL_('Start over'))}\r\n \r\n \r\n }\r\n onClick={generateImage}\r\n onKeyDown={onGenerateImageKeyDown}\r\n disabled={!isValid || isLoading}\r\n >\r\n \r\n {i18n.getString(_TL_('Generate'))}\r\n \r\n \r\n
    \r\n );\r\n};\r\n\r\nconst useTopDivMetaData = (topDiv) => {\r\n const [offset, setOffset] =\r\n useState(0);\r\n\r\n useLayoutEffect(() => {\r\n if (topDiv) {\r\n let target = topDiv;\r\n let newOffset = 0;\r\n do {\r\n newOffset += target.offsetTop;\r\n target = target.offsetParent;\r\n } while (target);\r\n\r\n if (newOffset !== offset) {\r\n setOffset(newOffset);\r\n }\r\n }\r\n }, [offset, topDiv]);\r\n\r\n return [offset];\r\n};\r\n\r\nconst PromptPanel = (props) => {\r\n const {\r\n i18n,\r\n setPrompt,\r\n prompt,\r\n startOver,\r\n generateImage,\r\n detectedBrandName,\r\n renderHelpButton,\r\n onGenerateImage,\r\n logger,\r\n isLoading,\r\n promptError,\r\n serverError,\r\n isValid,\r\n textAreaRef,\r\n } = props;\r\n\r\n const [topDiv, setTopDiv] = useState(null);\r\n const [offset] = useTopDivMetaData(topDiv);\r\n\r\n return (\r\n
    setTopDiv(ref)} style={{ height: `calc(100% - 33px - ${offset}px)` }}>\r\n
    \r\n {i18n.getString(_TL_('Generate image'))}\r\n
    \r\n \r\n {!detectedBrandName && (\r\n
    \r\n \r\n \r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n )}\r\n {detectedBrandName && (\r\n onGenerateImage(true)}\r\n logger={logger}\r\n renderHelpButton={renderHelpButton}\r\n />\r\n )}\r\n
    \r\n );\r\n};\r\n\r\nconst useStyles = makeStyles({\r\n hidden: {\r\n display: 'none',\r\n },\r\n});\r\n\r\nconst ImagePanel = (props) => {\r\n const {\r\n i18n,\r\n generateImageExample,\r\n setPrompt,\r\n MultiLineEllipsisText,\r\n isLoading,\r\n stockImages,\r\n aigcImages,\r\n loadMoreStockImages,\r\n totalStockImagesCount,\r\n addAIGCImage,\r\n addStockImage,\r\n cancel,\r\n savedAIGCImages,\r\n savedStockImages,\r\n savingAIGCImages,\r\n savingStockImages,\r\n scrollContainer,\r\n logger,\r\n stopGeneratingBtnRef,\r\n } = props;\r\n\r\n const classes = useStyles();\r\n const hasAIGCImages = (aigcImages && aigcImages.length > 0);\r\n const hasAIGCImageExample = (generateImageExample && generateImageExample.imageUrl);\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\n};\r\n\r\nexport const GenerateImagePageComponent = (props) => {\r\n const {\r\n i18n,\r\n dataService,\r\n logger,\r\n renderHelpButton,\r\n MultiLineEllipsisText,\r\n notificationApi,\r\n aid,\r\n search,\r\n scrollContainer,\r\n pagePerfMarker: generateImagePerfMarker,\r\n changeLayout,\r\n setDataLoaded,\r\n } = props;\r\n const textAreaRef = useRef(null);\r\n const stopGeneratingBtnRef = useRef(null);\r\n const [announcedText, setAnnouncedText] = useState('');\r\n const queries = queryString.parse(search);\r\n const {\r\n folderId = '',\r\n } = queries || {};\r\n\r\n const {\r\n prompt,\r\n setPrompt,\r\n detectedBrandName,\r\n getImages,\r\n setDetectedBrandName,\r\n state,\r\n loadStockImages,\r\n loadMoreStockImages,\r\n totalStockImagesCount,\r\n cancel,\r\n aigcImages,\r\n stockImages,\r\n addAIGCImage,\r\n addStockImage,\r\n isValid,\r\n promptError,\r\n serverError,\r\n savedAIGCImages,\r\n savedStockImages,\r\n savingAIGCImages,\r\n savingStockImages,\r\n onStartOver,\r\n generateImageExample,\r\n } = useGenerateImagePageState({\r\n logger,\r\n i18n,\r\n dataService,\r\n aid,\r\n notificationApi,\r\n folderId,\r\n perfMarker: generateImagePerfMarker,\r\n });\r\n\r\n const onGenerateImage = useCallback((skipBrandDetection) => {\r\n loadStockImages();\r\n getImages(skipBrandDetection);\r\n setDetectedBrandName(null);\r\n if (skipBrandDetection) {\r\n logger.logTrace(`AIGenerateImagesView: skipped detected brand name: ${detectedBrandName}`);\r\n }\r\n }, [detectedBrandName, getImages, loadStockImages, logger, setDetectedBrandName]);\r\n\r\n const classes = useGenerateImagePageStyles();\r\n const startOver = (event) => {\r\n onStartOver();\r\n\r\n if ((event.code === 'Enter' || event.code === 'Space') && !(generateImageExample && generateImageExample.prompt)) {\r\n // if no initial prompt, click start over button will clean the prompt text, then the start over button will be disabled, focus on the text area.\r\n if (textAreaRef && textAreaRef.current) {\r\n textAreaRef.current.focus();\r\n }\r\n }\r\n };\r\n\r\n const isLoading = useMemo(() => (state.status === statuses.cancelling\r\n || state.status === statuses.loading), [state]);\r\n\r\n const generateImage = (event) => {\r\n onGenerateImage();\r\n setAnnouncedText(i18n.getString(_TL_('Start to generate images')));\r\n\r\n if (event.code === 'Enter' || event.code === 'Space') {\r\n setTimeout(() => {\r\n if (stopGeneratingBtnRef && stopGeneratingBtnRef.current) {\r\n stopGeneratingBtnRef.current.focus();\r\n }\r\n });\r\n }\r\n };\r\n\r\n usePageActiveTimeTracker(logger, 'Generate-image');\r\n\r\n useEffect(() => {\r\n if (setDataLoaded && generateImagePerfMarker) {\r\n generateImagePerfMarker.willRender();\r\n setDataLoaded();\r\n }\r\n }, [generateImagePerfMarker, setDataLoaded]);\r\n\r\n useEffect(() => {\r\n setClarityTag({ LoadAdsStudioImageGenerationPage: true });\r\n }, []);\r\n\r\n useLayoutEffect(() => {\r\n if (changeLayout) {\r\n changeLayout(\r\n {\r\n nav: {\r\n mode: Mode.Hidden,\r\n },\r\n },\r\n true, // isPageConfig\r\n true // isPageConfigPartialUpdate\r\n );\r\n }\r\n }, [changeLayout]);\r\n\r\n return (\r\n
    \r\n \r\n \r\n \r\n
    );\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React, { useCallback, useEffect, useRef } from 'react';\r\nimport classNames from 'classnames';\r\nimport { get, find } from 'underscore';\r\nimport { Button, makeStyles, shorthands, Spinner, mergeClasses } from '@fluentui/react-components';\r\nimport { Overlay } from '@bingads-webui-react/fabric-control';\r\nimport { AdsStudioPanelContainer, ClarityTags, useClarityTags, getImageAssetLimitPerAccount } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n\r\nconst useButtonStyles = makeStyles({\r\n bottonWrapper: {\r\n ...shorthands.padding('16px', '24px', '24px'),\r\n },\r\n button: {\r\n minWidth: 'auto',\r\n ...shorthands.padding('6px', '12px'),\r\n marginRight: '6px',\r\n },\r\n});\r\n\r\nconst useStyles = makeStyles({\r\n helpLink: {\r\n color: '#337ab7',\r\n ...shorthands.textDecoration('underline'),\r\n fontWeight: 'normal',\r\n backgroundColor: 'transparent',\r\n ...shorthands.borderRadius('0px', '0px', '0px', '0px'),\r\n ...shorthands.border('none'),\r\n },\r\n overlay: {\r\n zIndex: 2,\r\n },\r\n spinner: {\r\n marginTop: '250px',\r\n },\r\n});\r\n\r\nexport const AdsStudioAddAssetPanel = (props) => {\r\n const {\r\n aid, i18n, isOpen, dismiss, logger, headerText, isReadonly, notificationApi, selectedAsset, onClickSelect, showBlocker, children, isMultiSelection,\r\n } = props;\r\n const classes = useStyles();\r\n const buttonClasses = useButtonStyles();\r\n const panelRef = useRef(null);\r\n\r\n useClarityTags([\r\n ClarityTags.LaunchedAdsStudio,\r\n ClarityTags.LaunchedAddImageAssetsFromAdsStudio,\r\n ]);\r\n\r\n const handleJobErrors = useCallback((jobErrors) => {\r\n if (jobErrors.length > 0) {\r\n const assetLimitError = find(jobErrors, (err) => {\r\n const errorCode = get(err, ['body', 'value', 0, 'Code'], '');\r\n return errorCode === 'ImagesLimitExceededPerAccount';\r\n });\r\n\r\n if (assetLimitError) {\r\n const assetLimit = getImageAssetLimitPerAccount(aid, logger);\r\n notificationApi.showWarning(i18n.getString(_TL_('One or more images failed to upload because your account has exceeded the {{value}}-image asset limit. Please remove assets and try again.'), { value: assetLimit }));\r\n } else {\r\n const genericError = (\r\n \r\n { i18n.getString(_TL_('One or more assets failed to upload. Please try again')) }\r\n \r\n \r\n );\r\n notificationApi.showWarning(genericError);\r\n }\r\n }\r\n }, [aid, logger, notificationApi, i18n, classes.helpLink]);\r\n\r\n const onSelectAddImages = useCallback(() => {\r\n onClickSelect(handleJobErrors);\r\n }, [handleJobErrors, onClickSelect]); // todo: implement\r\n\r\n const onRenderFooterContent = useCallback(() => (\r\n
    \r\n {isMultiSelection &&\r\n \r\n {i18n.getString(_TL_('Add'))}\r\n \r\n }\r\n \r\n
    \r\n ), [buttonClasses.bottonWrapper, buttonClasses.button, onSelectAddImages, isReadonly, selectedAsset, i18n, dismiss, isMultiSelection]);\r\n\r\n useEffect(() => {\r\n if (isOpen) {\r\n const firstNode = document.querySelector('.panel-close-button');\r\n const lastNode = document.querySelector('.cancel-panel-button');\r\n const handleTabKey = (event) => {\r\n if (event.key === 'Tab' && !event.shiftKey) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n firstNode.focus();\r\n }\r\n };\r\n const handleShiftTabKey = (event) => {\r\n if (event.key === 'Tab' && event.shiftKey) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n lastNode.focus();\r\n }\r\n };\r\n\r\n if (lastNode && firstNode && lastNode !== firstNode) {\r\n lastNode.addEventListener('keydown', handleTabKey);\r\n firstNode.addEventListener('keydown', handleShiftTabKey);\r\n }\r\n\r\n return () => {\r\n if (lastNode && firstNode) {\r\n lastNode.removeEventListener('keydown', handleTabKey);\r\n firstNode.removeEventListener('keydown', handleShiftTabKey);\r\n }\r\n };\r\n }\r\n return () => {};\r\n }, [isOpen]);\r\n\r\n useEffect(() => {\r\n if (panelRef.current) {\r\n const handleESCKey = (event) => {\r\n if (event.key === 'Escape') {\r\n dismiss();\r\n }\r\n };\r\n\r\n const target = panelRef.current;\r\n\r\n if (isOpen) {\r\n target.addEventListener('keydown', handleESCKey);\r\n return () => {\r\n target.removeEventListener('keydown', handleESCKey);\r\n };\r\n }\r\n }\r\n return () => {};\r\n }, [dismiss, isOpen]);\r\n\r\n return (\r\n \r\n <>\r\n {\r\n showBlocker &&\r\n \r\n \r\n \r\n }\r\n {children}\r\n \r\n \r\n );\r\n};\r\n\r\nAdsStudioAddAssetPanel.propTypes = {\r\n i18n: PropTypes.shape({}).isRequired,\r\n isOpen: PropTypes.bool.isRequired,\r\n dismiss: PropTypes.func.isRequired,\r\n headerText: PropTypes.string.isRequired,\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n }).isRequired,\r\n isReadonly: PropTypes.bool,\r\n aid: PropTypes.number.isRequired,\r\n notificationApi: PropTypes.shape({\r\n showWarning: PropTypes.func,\r\n }).isRequired,\r\n selectedAsset: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.shape({})), PropTypes.shape({})]),\r\n onClickSelect: PropTypes.func.isRequired,\r\n showBlocker: PropTypes.bool,\r\n isMultiSelection: PropTypes.bool,\r\n};\r\n\r\nAdsStudioAddAssetPanel.defaultProps = {\r\n isReadonly: false,\r\n showBlocker: false,\r\n selectedAsset: undefined,\r\n isMultiSelection: true,\r\n};\r\n","import { useCallback, useState, useMemo } from 'react';\r\nimport { each } from 'underscore';\r\nimport { MaxAddAssetJobInParell, CSMLAssetSource } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { runJobsInParallelWithRateLimit } from '@bingads-webui-universal/parallel-job-with-rate-limit';\r\n\r\nexport const useSourceImages = ({\r\n dataService, logger, navigation, perfMarker,\r\n}) => {\r\n const [selectedImages, setSelectedImages] = useState([]);\r\n const [showBlocker, setShowBlocker] = useState(false);\r\n const validImages = useMemo(() => (Array.isArray(selectedImages) ? selectedImages.filter(({ id }) => !!id) : []), [selectedImages]);\r\n const selectedImageUrls = useMemo(() => validImages.map(({ id }) => id), [validImages]);\r\n\r\n const onStockClickSelect = useCallback((handleJobErrors) => {\r\n const stockImagePerfMarker = perfMarker && perfMarker.createChild('stockImagePicker');\r\n if (stockImagePerfMarker) {\r\n stockImagePerfMarker.willInit();\r\n }\r\n const jobErrors = [];\r\n const handleJobError = (err) => {\r\n jobErrors.push(err);\r\n };\r\n\r\n const saveOperations = [];\r\n\r\n each(selectedImageUrls, (id) => {\r\n saveOperations.push(() => dataService.uploadStockImage({ stockImageId: id }));\r\n });\r\n setShowBlocker(true);\r\n runJobsInParallelWithRateLimit({\r\n jobsToRateLimit: saveOperations,\r\n maxJobsInParallel: MaxAddAssetJobInParell,\r\n handleJobError,\r\n }).then((values) => {\r\n const imageIds = values || [];\r\n logger.logTrace('Add Media Panel: saved stock images to folder', { imageIds: imageIds.join(','), count: imageIds.length });\r\n navigation.goBack({ reload: true });\r\n }).finally(() => {\r\n setSelectedImages([]);\r\n handleJobErrors(jobErrors);\r\n setShowBlocker(false);\r\n if (stockImagePerfMarker) {\r\n stockImagePerfMarker.done();\r\n }\r\n });\r\n }, [dataService, logger, navigation, selectedImageUrls]);\r\n\r\n const onInvestClickSelect = useCallback((handleJobErrors) => {\r\n const investImagePerfMarker = perfMarker && perfMarker.createChild('investImagePicker');\r\n if (investImagePerfMarker) {\r\n investImagePerfMarker.willInit();\r\n }\r\n const jobErrors = [];\r\n const handleJobError = (err) => {\r\n jobErrors.push(err);\r\n };\r\n\r\n const saveOperations = [];\r\n\r\n each(validImages, ({ id, url }) => {\r\n saveOperations.push(() => dataService.uploadInvestImage({ investImageId: id, imageSrc: url }));\r\n });\r\n\r\n setShowBlocker(true);\r\n runJobsInParallelWithRateLimit({\r\n jobsToRateLimit: saveOperations,\r\n maxJobsInParallel: MaxAddAssetJobInParell,\r\n handleJobError,\r\n }).then((values) => {\r\n const imageIds = values || [];\r\n logger.logTrace('Add Media Panel: saved invest images to folder', { imageIds: imageIds.join(','), count: imageIds.length });\r\n navigation.goBack({ reload: true });\r\n }).finally(() => {\r\n setSelectedImages([]);\r\n handleJobErrors(jobErrors);\r\n setShowBlocker(false);\r\n if (investImagePerfMarker) {\r\n investImagePerfMarker.done();\r\n }\r\n });\r\n }, [dataService, logger, navigation, validImages]);\r\n\r\n const onWebsiteClickSelect = useCallback((handleJobErrors) => {\r\n const jobErrors = [];\r\n const websiteImagePerfMarker = perfMarker && perfMarker.createChild('websiteImagePicker');\r\n if (websiteImagePerfMarker) {\r\n websiteImagePerfMarker.willInit();\r\n }\r\n const handleJobError = (err) => {\r\n jobErrors.push(err);\r\n };\r\n\r\n const uploadOperations = [];\r\n each(selectedImageUrls, (url) => {\r\n uploadOperations.push(() => dataService.uploadImageByUrl({ imageUrl: url, sourceType: CSMLAssetSource.Website }));\r\n });\r\n setShowBlocker(true);\r\n runJobsInParallelWithRateLimit({\r\n jobsToRateLimit: uploadOperations,\r\n maxJobsInParallel: MaxAddAssetJobInParell,\r\n handleJobError,\r\n }).then((values) => {\r\n const imageIds = values || [];\r\n logger.logTrace('Add Media Panel: saved website images to folder', { imageIds: imageIds.join(','), count: imageIds.length });\r\n navigation.goBack({ reload: true });\r\n })\r\n .finally(() => {\r\n setSelectedImages([]);\r\n handleJobErrors(jobErrors);\r\n setShowBlocker(false);\r\n if (websiteImagePerfMarker) {\r\n websiteImagePerfMarker.done();\r\n }\r\n });\r\n }, [dataService, logger, navigation, selectedImageUrls]);\r\n\r\n return {\r\n selectedImages,\r\n showBlocker,\r\n setSelectedImages,\r\n onWebsiteClickSelect,\r\n onStockClickSelect,\r\n onInvestClickSelect,\r\n };\r\n};\r\n","import React, { useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { WebsiteImagePanelContent } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { AdsStudioAddAssetPanel } from './add-asset-panel';\r\nimport { useSourceImages } from './hooks/use-source-images';\r\n\r\nexport const WebsiteImagePanel = (props) => {\r\n const {\r\n i18n, aid, cid, oDataConfig, dataService, logger, notificationApi, navigation, open, perfMarker,\r\n } = props;\r\n const {\r\n setSelectedImages, onWebsiteClickSelect, showBlocker, selectedImages,\r\n } = useSourceImages({\r\n dataService, logger, navigation, perfMarker,\r\n });\r\n\r\n const dismiss = useCallback(() => {\r\n navigation.goBack();\r\n }, [navigation]);\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nWebsiteImagePanel.propTypes = {\r\n i18n: PropTypes.shape({}).isRequired,\r\n navigation: PropTypes.shape({ gotoImagesPage: PropTypes.func }).isRequired,\r\n dataService: PropTypes.shape({\r\n uploadImage: PropTypes.func,\r\n uploadStockImage: PropTypes.func,\r\n uploadImageByUrl: PropTypes.func,\r\n }).isRequired,\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n }).isRequired,\r\n aid: PropTypes.number.isRequired,\r\n cid: PropTypes.number.isRequired,\r\n oDataConfig: PropTypes.shape({}).isRequired,\r\n notificationApi: PropTypes.shape({\r\n showWarning: PropTypes.func,\r\n }).isRequired,\r\n open: PropTypes.bool.isRequired,\r\n};\r\n","import React, { useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { StockImagePanelContent } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { useSourceImages } from './hooks/use-source-images';\r\nimport { AdsStudioAddAssetPanel } from './add-asset-panel';\r\n\r\nexport const StockImagePanel = (props) => {\r\n const {\r\n i18n,\r\n aid, cid, oDataConfig,\r\n dataService, logger, notificationApi, navigation, open, perfMarker,\r\n } = props;\r\n const {\r\n setSelectedImages, onStockClickSelect, showBlocker, selectedImages,\r\n } = useSourceImages({\r\n dataService, logger, navigation, perfMarker,\r\n });\r\n\r\n const dismiss = useCallback(() => {\r\n navigation.goBack();\r\n }, [navigation]);\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nStockImagePanel.propTypes = {\r\n i18n: PropTypes.shape({}).isRequired,\r\n navigation: PropTypes.shape({ gotoImagesPage: PropTypes.func }).isRequired,\r\n dataService: PropTypes.shape({\r\n uploadImage: PropTypes.func,\r\n uploadStockImage: PropTypes.func,\r\n uploadImageByUrl: PropTypes.func,\r\n }).isRequired,\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n }).isRequired,\r\n aid: PropTypes.number.isRequired,\r\n cid: PropTypes.number.isRequired,\r\n oDataConfig: PropTypes.shape({}).isRequired,\r\n notificationApi: PropTypes.shape({\r\n showWarning: PropTypes.func,\r\n }).isRequired,\r\n open: PropTypes.bool.isRequired,\r\n};\r\n","import {\r\n processVideoSizeLimitError,\r\n} from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n\r\nexport const getAddVideoError = ({\r\n error,\r\n i18n,\r\n aid,\r\n logger,\r\n}) => {\r\n const { limit } = processVideoSizeLimitError({\r\n errorList: [error],\r\n aid,\r\n logger,\r\n }) || {};\r\n\r\n if (limit) {\r\n return i18n.getString(\r\n _TL_('We couldn\\'t add your video because your account has exceeded the {{value}}-video asset limit. Please remove videos and try again.'),\r\n { value: limit }\r\n );\r\n }\r\n\r\n return i18n.getString(_TL_('We couldn\\'t add your video. Please confirm that your video\\'s URL is supported or refresh the page and try again.'));\r\n};\r\n","import React, { useCallback, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { AddVideoPanelContent } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { AdsStudioAddAssetPanel } from './add-asset-panel';\r\nimport { getAddVideoError } from './error/add-video-error';\r\n\r\nexport const AddVideoPanel = (props) => {\r\n const {\r\n i18n, dataService, aid,\r\n logger, notificationApi, navigation, open,\r\n } = props;\r\n const [selectedVideos, setSelectedVideos] = useState([]);\r\n const [showBlocker, setShowBlocker] = useState(false);\r\n\r\n const dismiss = useCallback(() => {\r\n navigation.goBack();\r\n }, [navigation]);\r\n\r\n const onClickSelect = useCallback(() => {\r\n const videoUrl = selectedVideos[0].url;\r\n setShowBlocker(true);\r\n dataService.uploadVideoByUrl({\r\n videoUrl,\r\n }).then((videoId) => {\r\n logger.logTrace('Add Media Panel: saved video to folder', { videoId });\r\n\r\n navigation.goBack({ reload: true });\r\n }).catch((error) => {\r\n const errorMsg = getAddVideoError({\r\n error,\r\n i18n,\r\n aid,\r\n logger,\r\n });\r\n notificationApi.showWarning(errorMsg);\r\n\r\n dismiss();\r\n }).finally(() => {\r\n setShowBlocker(false);\r\n });\r\n }, [aid, dataService, dismiss, i18n, logger, navigation, notificationApi, selectedVideos]);\r\n\r\n const onChange = useCallback((videos) => {\r\n setSelectedVideos(videos);\r\n }, []);\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\nAddVideoPanel.propTypes = {\r\n aid: PropTypes.number.isRequired,\r\n i18n: PropTypes.shape({}).isRequired,\r\n navigation: PropTypes.shape({ gotoImagesPage: PropTypes.func }).isRequired,\r\n dataService: PropTypes.shape({\r\n uploadVideoByUrl: PropTypes.func,\r\n }).isRequired,\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n }).isRequired,\r\n notificationApi: PropTypes.shape({\r\n showWarning: PropTypes.func,\r\n }).isRequired,\r\n open: PropTypes.bool.isRequired,\r\n};\r\n","import React, { useCallback, useEffect, useMemo, useState, useRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { mergeI18n } from '@bingads-webui-campaign-react/i18n-merger';\r\nimport { MessageBar, MessageBarActions, MessageBarBody } from '@fluentui/react-message-bar';\r\nimport { Button, makeStyles, shorthands, mergeClasses } from '@fluentui/react-components';\r\nimport { AdsStudioPanelContainer, supportedImageExtensions, supportedVideoExtensions, FileUploadingPreview, useUploadFiles, isReachFileSizeLimit, getReachFileSizeLimitErrorMessage, } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { UploadPreviewWithCustomPreview, parseFileName } from '@bingads-webui-campaign-react/upload-file-picker';\r\nimport { DismissRegular } from '@fluentui/react-icons';\r\n\r\nconst usePanelStyles = makeStyles({\r\n buttonWrapper: {\r\n ...shorthands.padding('16px', '24px', '24px'),\r\n },\r\n button: {\r\n minWidth: 'auto',\r\n ...shorthands.padding('6px', '12px'),\r\n marginRight: '6px',\r\n },\r\n uploadButton: {\r\n width: '0px',\r\n ...shorthands.overflow('hidden !important'),\r\n },\r\n helpLink: {\r\n color: '#3073ad',\r\n ...shorthands.textDecoration('underline'),\r\n fontWeight: 'normal',\r\n backgroundColor: 'transparent',\r\n ...shorthands.borderRadius('0px', '0px', '0px', '0px'),\r\n ...shorthands.border('none'),\r\n },\r\n messageBar: {\r\n whiteSpace: 'normal',\r\n },\r\n});\r\n\r\nconst usePreviewStyles = makeStyles({\r\n imageItemBox: {\r\n paddingBottom: '5px',\r\n width: '298px',\r\n ...shorthands.overflow('hidden'),\r\n boxShadow: '0px 0.3px 0.9px rgba(0, 0, 0, 0.1), 0px 1.6px 3.6px rgba(0, 0, 0, 0.13)',\r\n marginRight: '16px',\r\n marginBottom: '16px',\r\n ...shorthands.borderRadius('4px'),\r\n backgroundColor: '#faf9f8',\r\n },\r\n});\r\n\r\nexport const UploadFilesPanel = (props) => {\r\n const {\r\n i18n, dataService, aid,\r\n logger, notificationApi, navigation, mode, openSystemUpload, globalLegacyI18n, perfMarker,\r\n isUploadImageUpscaleEnabled,\r\n } = props;\r\n const classes = usePanelStyles();\r\n const previewClasses = usePreviewStyles();\r\n const [errors, setErrors] = useState([]);\r\n const uploadInput = useRef();\r\n const globalI18n = useMemo(() => globalLegacyI18n.get('$/i18n!legacy/global'), [globalLegacyI18n]);\r\n\r\n const filePickerI18n = useMemo(() => mergeI18n(globalI18n, i18n), [globalI18n, i18n]);\r\n\r\n const dismiss = useCallback(() => {\r\n setErrors([]);\r\n navigation.goBack();\r\n }, [navigation]);\r\n\r\n const onRenderFooterContent = useCallback(() => (\r\n
    \r\n \r\n
    \r\n ), [classes, i18n, dismiss]);\r\n\r\n const onFilesAddedCallback = useCallback(() => {\r\n setErrors([]);\r\n navigation.goBack({ reload: true });\r\n }, [navigation]);\r\n\r\n const {\r\n previewArr,\r\n onFileRead,\r\n } = useUploadFiles({\r\n dataService, logger, notificationApi, i18n, aid, onFilesAddedCallback, setErrors, filePickerI18n, perfMarker, isUploadImageUpscaleEnabled,\r\n });\r\n\r\n const isOpen = useMemo(() => (previewArr.length > 0 || errors.length > 0), [errors.length, previewArr.length]);\r\n const supportedFileExtensions = useMemo(() => {\r\n if (mode === 'image') {\r\n return supportedImageExtensions;\r\n } else if (mode === 'video') {\r\n return supportedVideoExtensions;\r\n }\r\n return [\r\n ...supportedImageExtensions,\r\n ...supportedVideoExtensions,\r\n ];\r\n }, [mode]);\r\n\r\n const clearInputFile = useCallback((event) => {\r\n if (event) {\r\n // eslint-disable-next-line no-param-reassign\r\n event.target.value = '';\r\n }\r\n }, []);\r\n\r\n const readFile = useCallback((event) => {\r\n const { files: fileObjects } = event.target;\r\n const selectedFiles = !_.isUndefined(fileObjects) && fileObjects.length > 0 && fileObjects;\r\n if (selectedFiles) {\r\n const selectedFilesCount = selectedFiles.length;\r\n let fileIndex;\r\n const errorArr = [];\r\n\r\n for (fileIndex = 0; fileIndex < selectedFilesCount; fileIndex += 1) {\r\n const fileObj = selectedFiles[fileIndex];\r\n const fileSizeMB = (fileObj.size / 1024 / 1024).toFixed(3);\r\n let reachLimit;\r\n\r\n if (isReachFileSizeLimit) {\r\n const { ext } = parseFileName(fileObj.name);\r\n reachLimit = isReachFileSizeLimit({ ext, fileSizeMB });\r\n }\r\n\r\n if (reachLimit) {\r\n errorArr.push(getReachFileSizeLimitErrorMessage({ i18n }));\r\n\r\n break;\r\n }\r\n }\r\n if (_.isEmpty(errorArr)) {\r\n if (logger && logger.logTrace) {\r\n logger.logTrace('File starts to upload', { mode });\r\n }\r\n return onFileRead(selectedFiles, () => clearInputFile(event));\r\n }\r\n clearInputFile(event);\r\n setErrors(errorArr);\r\n } // else no media picked, so do nothing\r\n\r\n return ''; // for testability\r\n }, [clearInputFile, i18n, logger, mode, onFileRead]);\r\n\r\n useEffect(() => {\r\n if (openSystemUpload) {\r\n uploadInput.current.click();\r\n }\r\n }, [openSystemUpload]);\r\n\r\n return (\r\n <>\r\n \r\n <>\r\n \r\n {\r\n errors.length > 0 &&\r\n errors.map((errMsg, index) => (\r\n \r\n \r\n {errMsg}\r\n {isUploadImageUpscaleEnabled && }\r\n \r\n setErrors([])}\r\n aria-label=\"dismiss\"\r\n appearance=\"transparent\"\r\n icon={}\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\nUploadFilesPanel.propTypes = {\r\n aid: PropTypes.number.isRequired,\r\n i18n: PropTypes.shape({}).isRequired,\r\n navigation: PropTypes.shape({ gotoImagesPage: PropTypes.func }).isRequired,\r\n dataService: PropTypes.shape({\r\n uploadVideoByUrl: PropTypes.func,\r\n }).isRequired,\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n }).isRequired,\r\n notificationApi: PropTypes.shape({\r\n showWarning: PropTypes.func,\r\n }).isRequired,\r\n mode: PropTypes.oneOf(['image', 'video']),\r\n openSystemUpload: PropTypes.shape({}),\r\n isUploadImageUpscaleEnabled: PropTypes.bool,\r\n};\r\n\r\nUploadFilesPanel.defaultProps = {\r\n mode: null,\r\n openSystemUpload: null,\r\n isUploadImageUpscaleEnabled: false,\r\n};\r\n","import { useCallback } from 'react';\r\nimport Promise from 'bluebird';\r\nimport _ from 'underscore';\r\nimport { stringifySync } from '@bingads-webui/safe-json';\r\nimport { parseFileName } from '@bingads-webui-campaign-react/upload-file-picker';\r\nimport {\r\n filterFilesByExtensions,\r\n createFolderHierarchyMap,\r\n createFoldersByHierarchy,\r\n createRateLimitedAssetUploadPromises,\r\n useReadAsset,\r\n useValidateAsset,\r\n} from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n\r\nexport const NO_VALID_FILES_ERROR = 'novalidfileserror';\r\nexport const ASSET_LIMIT_EXCEEDED_ERROR = 'toomanyassets';\r\n\r\nexport const useUploadFolder = ({\r\n assetUploadLimit = 100,\r\n createFolderAsync,\r\n currentFolderId,\r\n uploadAssetAsync,\r\n supportedExtensions,\r\n getCustomizedHandlerOptions,\r\n onUploadError,\r\n onUploadStart,\r\n onUploadPartialComplete,\r\n onUploadComplete,\r\n clearInputFile,\r\n isUploadImageUpscaleEnabled,\r\n logger,\r\n}) => {\r\n const { readFileAsync } = useReadAsset();\r\n const { validateFileAsync } = useValidateAsset();\r\n\r\n const validateAssetAsync = useCallback((obj = {}) => validateFileAsync({\r\n ...obj,\r\n isUploadImageUpscaleEnabled,\r\n }).catch((e) => {\r\n if (e && e.message === 'SizeValidationError' && logger && logger.logTrace) {\r\n logger.logTrace(`Add Media from folder per file - SizeValidationError: ${stringifySync(e)}`);\r\n logger.logTrace(`Add Media from folder per file - SizeValidationError - ImageSource: ${stringifySync(obj.dataURL)}`);\r\n }\r\n throw e;\r\n }), [isUploadImageUpscaleEnabled, logger, validateFileAsync]);\r\n\r\n const onFolderRead = useCallback((event) => {\r\n const { files } = event.target;\r\n const acceptedFiles = filterFilesByExtensions({ files, supportedExtensions });\r\n const customizedFilesOptions = _.map(acceptedFiles, (file) => {\r\n const { nameWithoutExt, ext } = parseFileName(file.name);\r\n\r\n const passedOptions = getCustomizedHandlerOptions({\r\n nameWithoutExt,\r\n ext,\r\n });\r\n\r\n return passedOptions;\r\n });\r\n\r\n if (acceptedFiles.length === 0) {\r\n onUploadError(NO_VALID_FILES_ERROR);\r\n\r\n return Promise.resolve();\r\n }\r\n\r\n if (acceptedFiles.length > assetUploadLimit) {\r\n onUploadError(ASSET_LIMIT_EXCEEDED_ERROR);\r\n\r\n return Promise.resolve();\r\n }\r\n\r\n // should create all folders under selected folder regardless of whether or not\r\n // folder contains valid assets\r\n const foldersToCreate = createFolderHierarchyMap(files);\r\n const uploadFolderInfo = {\r\n totalSize: _.reduce(acceptedFiles, (memo, { size }) => memo + size, 0),\r\n rootFolderName: _.keys(foldersToCreate)[0],\r\n acceptedAssets: acceptedFiles,\r\n };\r\n\r\n const folderCreationErrors = [];\r\n const assetsSkippedCreationDueToFolderError = [];\r\n const assetUploadErrors = [];\r\n\r\n onUploadStart(uploadFolderInfo);\r\n return createFoldersByHierarchy({\r\n folderMap: foldersToCreate,\r\n createFolderAsync,\r\n folderCreationErrors,\r\n currentFolderId,\r\n }).then((creationPromises) => {\r\n const assetCreationPromise = createRateLimitedAssetUploadPromises({\r\n customizedFilesOptions,\r\n acceptedAssets: acceptedFiles,\r\n folderIdPromises: creationPromises,\r\n validateAssetAsync,\r\n uploadAssetAsync,\r\n assetsSkippedUpload: assetsSkippedCreationDueToFolderError,\r\n assetUploadErrors,\r\n readAssetAsync: readFileAsync,\r\n });\r\n return assetCreationPromise\r\n .then(() => {\r\n if (assetUploadErrors.length > 0 || folderCreationErrors.length > 0) {\r\n onUploadPartialComplete({\r\n assetUploadErrors,\r\n folderCreationErrors,\r\n });\r\n } else {\r\n onUploadComplete();\r\n }\r\n })\r\n .catch((e) => {\r\n onUploadError(e);\r\n });\r\n }).finally(() => {\r\n clearInputFile(event);\r\n });\r\n }, [clearInputFile, supportedExtensions, assetUploadLimit, onUploadStart, createFolderAsync, currentFolderId, getCustomizedHandlerOptions, onUploadError, validateAssetAsync, uploadAssetAsync, readFileAsync, onUploadPartialComplete, onUploadComplete]);\r\n\r\n return {\r\n onFolderRead,\r\n };\r\n};\r\n","import _ from 'underscore';\r\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { MessageBar, MessageBarActions, MessageBarBody } from '@fluentui/react-message-bar';\r\nimport { Button, makeStyles, shorthands, } from '@fluentui/react-components';\r\nimport { mergeI18n } from '@bingads-webui-campaign-react/i18n-merger';\r\nimport { DismissRegular } from '@fluentui/react-icons';\r\nimport { readFileAsDataURLAsync, UploadPreviewWithCustomPreview } from '@bingads-webui-campaign-react/upload-file-picker';\r\nimport { AdsStudioPanelContainer, supportedImageExtensions, supportedVideoExtensions, isRootFolderId, useUploadAsset, useCustomizedHandlerOptions, getFolderUploadError, createFolderPreviewComponent } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { useUploadFolder, NO_VALID_FILES_ERROR, ASSET_LIMIT_EXCEEDED_ERROR } from './hooks/use-upload-folder';\r\n\r\nconst useStyles = makeStyles({\r\n uploadButton: {\r\n width: '0px',\r\n ...shorthands.overflow('hidden !important'),\r\n },\r\n});\r\n\r\nconst usePreviewStyle = makeStyles({\r\n imageItemBox: {\r\n marginBottom: '16px',\r\n marginRight: '16px',\r\n width: '298px',\r\n ...shorthands.borderRadius('4px'),\r\n boxShadow: '0px 0.3px 0.9px rgba(0, 0, 0, 0.1), 0px 1.6px 3.6px rgba(0, 0, 0, 0.13)',\r\n ...shorthands.overflow('hidden'),\r\n height: '130px',\r\n },\r\n});\r\n\r\nconst useButtonStyles = makeStyles({\r\n bottonWrapper: {\r\n ...shorthands.padding('16px', '24px', '24px'),\r\n },\r\n button: {\r\n minWidth: 'auto',\r\n ...shorthands.padding('6px', '12px'),\r\n marginRight: '6px',\r\n },\r\n linkButton: {\r\n color: '#337ab7',\r\n fontWeight: 'normal',\r\n backgroundColor: 'transparent',\r\n ...shorthands.borderRadius('0px', '0px', '0px', '0px'),\r\n ...shorthands.border('none'),\r\n },\r\n});\r\n\r\nexport const UploadFolderPanel = (props) => {\r\n const {\r\n i18n,\r\n dataService, aid, logger, notificationApi, perfMarker,\r\n navigation, mode, openSystemUpload, globalLegacyI18n,\r\n // disable image upscale feature for upload folder to avoid high QPS\r\n // isUploadImageUpscaleEnabled,\r\n } = props;\r\n const classes = useStyles();\r\n const previewClasses = usePreviewStyle();\r\n const buttonClasses = useButtonStyles();\r\n const [uploadFolderInfo, setUploadFolderInfo] = useState(null);\r\n const [showUploadPreview, setShowUploadPreview] = useState(false);\r\n const [errors, setErrors] = useState([]);\r\n const uploadInput = useRef();\r\n const completedAssetCount = useRef(0);\r\n const isUploadRunning = useRef(false);\r\n const assetCount = useRef(0);\r\n const fileAdditionalInfoArrRef = useRef([]);\r\n const { uploadFileAsync } = useUploadAsset({ dataService, perfMarker, isUploadImageUpscaleEnabled: false });\r\n const { getCustomizedHandlerOptions } = useCustomizedHandlerOptions();\r\n const globalI18n = useMemo(() => globalLegacyI18n.get('$/i18n!legacy/global'), [globalLegacyI18n]);\r\n\r\n const filePickerI18n = useMemo(() => mergeI18n(globalI18n, i18n), [globalI18n, i18n]);\r\n\r\n const {\r\n createFolderBulk,\r\n currentFolderId,\r\n cancelPendingVideoUpload,\r\n reloadFolderPathTreeItem,\r\n } = dataService;\r\n\r\n const dismiss = useCallback(({ reload }) => {\r\n fileAdditionalInfoArrRef.current = [];\r\n setErrors([]);\r\n setShowUploadPreview(false);\r\n setUploadFolderInfo(null);\r\n cancelPendingVideoUpload();\r\n navigation.goBack({ reload });\r\n }, [cancelPendingVideoUpload, navigation]);\r\n\r\n const dismissAndRefreshLibrary = useCallback(() => {\r\n isUploadRunning.current = false;\r\n dismiss({ reload: true });\r\n }, [dismiss]);\r\n\r\n const onRenderFooterContent = useCallback(() => (\r\n
    \r\n \r\n
    \r\n ), [buttonClasses.bottonWrapper, buttonClasses.button, i18n, dismiss]);\r\n\r\n const onUploadError = useCallback((error) => {\r\n fileAdditionalInfoArrRef.current = [];\r\n isUploadRunning.current = false;\r\n setShowUploadPreview(false);\r\n if (error === NO_VALID_FILES_ERROR) {\r\n setErrors([i18n.getString(_TL_('Your folder doesn\\'t contain supported assets. Please try again.'))]);\r\n } else if (error === ASSET_LIMIT_EXCEEDED_ERROR) {\r\n setErrors([i18n.getString(_TL_('Your folder failed to upload because it exceeds the 100-asset limit. Please try again'))]);\r\n } else {\r\n // no other known errors should cause the whole operation to fail, so just show generic error\r\n setErrors([i18n.getString(_TL_('We\\'ve encountered an error and could not finish this task. Please try again or contact support.'))]);\r\n }\r\n logger.logError('Upload folder failed', { error });\r\n }, [i18n, logger]);\r\n\r\n const uploadAsset = useCallback(({\r\n dataURL,\r\n fileObject,\r\n nameWithoutExt,\r\n folderId,\r\n isVideo,\r\n isImageUpscaled,\r\n }) => uploadFileAsync({\r\n dataURL,\r\n fileObject,\r\n nameWithoutExt,\r\n folderId,\r\n isVideo,\r\n }).then((res) => {\r\n fileAdditionalInfoArrRef.current.push({\r\n isImageUpscaled,\r\n text: nameWithoutExt,\r\n });\r\n setUploadFolderInfo((prevState) => {\r\n if (prevState) {\r\n const rootFolder = prevState[0];\r\n completedAssetCount.current += 1;\r\n const updatedProgress = (completedAssetCount.current + 1) / assetCount.current;\r\n\r\n return [{\r\n ...rootFolder,\r\n progress: updatedProgress,\r\n }];\r\n }\r\n return prevState;\r\n });\r\n return res;\r\n }), [uploadFileAsync]);\r\n\r\n const onUploadStart = useCallback(({\r\n totalSize,\r\n rootFolderName,\r\n acceptedAssets,\r\n }) => {\r\n fileAdditionalInfoArrRef.current = [];\r\n setErrors([]);\r\n setShowUploadPreview(true);\r\n isUploadRunning.current = true;\r\n\r\n const previewImage = acceptedAssets[0];\r\n\r\n assetCount.current = acceptedAssets.length;\r\n\r\n readFileAsDataURLAsync(previewImage).then((imageData) => {\r\n setUploadFolderInfo([{\r\n name: rootFolderName,\r\n url: imageData,\r\n size: totalSize,\r\n progress: 0,\r\n numberOfAssets: assetCount.current,\r\n }]);\r\n });\r\n\r\n logger.logTrace(`Upload folder from local, assets number: ${assetCount.current}`);\r\n }, [logger]);\r\n\r\n const getErrorInfo = useCallback((folderCreationErrors, assetUploadErrors) => getFolderUploadError({\r\n folderCreationErrors,\r\n assetUploadErrors,\r\n i18n,\r\n filePickerI18n,\r\n aid,\r\n logger,\r\n }), [aid, i18n, logger, filePickerI18n]);\r\n\r\n const clearInputFile = useCallback((event) => {\r\n if (event) {\r\n // eslint-disable-next-line no-param-reassign\r\n event.target.value = '';\r\n }\r\n }, []);\r\n\r\n const onUploadPartialComplete = useCallback(({\r\n assetUploadErrors,\r\n folderCreationErrors,\r\n }) => {\r\n const warnMessage = getErrorInfo(folderCreationErrors, assetUploadErrors);\r\n logger.logTrace('Upload folder from local partial successfully');\r\n notificationApi.showWarning(warnMessage);\r\n dismissAndRefreshLibrary();\r\n reloadFolderPathTreeItem([currentFolderId]);\r\n }, [currentFolderId, dismissAndRefreshLibrary, getErrorInfo, logger, notificationApi, reloadFolderPathTreeItem]);\r\n\r\n const onUploadComplete = useCallback(() => {\r\n logger.logTrace('Upload folder from local successfully');\r\n\r\n const upscaledImagesArr = _.filter(fileAdditionalInfoArrRef.current, item => item && item.isImageUpscaled);\r\n const upscaledImagesArrCount = upscaledImagesArr.length;\r\n\r\n if (upscaledImagesArrCount > 0) {\r\n notificationApi.showInfo(i18n.getString(_TL_('Your folder was uploaded and we upscaled {{fileCount}} image(s) to meet the minimum required file size. You can always upload higher quality images if needed.'), { fileCount: upscaledImagesArrCount }));\r\n } else {\r\n notificationApi.showInfo((\r\n \r\n {i18n.getString(_TL_('Your folder was successfully uploaded.'))}\r\n \r\n \r\n ));\r\n }\r\n dismissAndRefreshLibrary();\r\n reloadFolderPathTreeItem([currentFolderId]);\r\n }, [logger, notificationApi, i18n, buttonClasses.linkButton, dismissAndRefreshLibrary, reloadFolderPathTreeItem, currentFolderId]);\r\n\r\n const FolderPreviewComponent = useMemo(() => createFolderPreviewComponent({ i18n }), [i18n]);\r\n const isOpen = useMemo(() => Boolean((showUploadPreview && uploadFolderInfo) || errors.length > 0), [errors.length, showUploadPreview, uploadFolderInfo]);\r\n const supportedFileExtensions = useMemo(() => {\r\n if (mode === 'image') {\r\n return supportedImageExtensions;\r\n } else if (mode === 'video') {\r\n return supportedVideoExtensions;\r\n }\r\n return [\r\n ...supportedImageExtensions,\r\n ...supportedVideoExtensions,\r\n ];\r\n }, [mode]);\r\n\r\n const { onFolderRead } = useUploadFolder({\r\n createFolderAsync: createFolderBulk,\r\n currentFolderId: isRootFolderId(currentFolderId) ? undefined : currentFolderId,\r\n uploadAssetAsync: uploadAsset,\r\n getCustomizedHandlerOptions,\r\n onUploadError,\r\n onUploadStart,\r\n onUploadPartialComplete,\r\n onUploadComplete,\r\n supportedExtensions: supportedFileExtensions,\r\n clearInputFile,\r\n isUploadImageUpscaleEnabled: false,\r\n logger,\r\n });\r\n\r\n useEffect(() => {\r\n if (openSystemUpload) {\r\n uploadInput.current.click();\r\n }\r\n }, [openSystemUpload]);\r\n\r\n return (\r\n <>\r\n \r\n <>\r\n {showUploadPreview && uploadFolderInfo && (\r\n \r\n )}\r\n {\r\n errors.length > 0 &&\r\n errors.map((errMsg, index) => (\r\n \r\n \r\n {errMsg}\r\n \r\n setErrors([])}\r\n aria-label=\"dismiss\"\r\n appearance=\"transparent\"\r\n icon={}\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\nUploadFolderPanel.propTypes = {\r\n aid: PropTypes.number.isRequired,\r\n i18n: PropTypes.shape({}).isRequired,\r\n navigation: PropTypes.shape({ gotoImagesPage: PropTypes.func }).isRequired,\r\n dataService: PropTypes.shape({\r\n uploadVideoByUrl: PropTypes.func,\r\n }).isRequired,\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n }).isRequired,\r\n notificationApi: PropTypes.shape({\r\n showWarning: PropTypes.func,\r\n }).isRequired,\r\n mode: PropTypes.oneOf(['image', 'video']),\r\n openSystemUpload: PropTypes.shape({}),\r\n};\r\n\r\nUploadFolderPanel.defaultProps = {\r\n mode: null,\r\n openSystemUpload: null,\r\n};\r\n","import React, { useCallback, useMemo, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { TabList, Tab } from '@fluentui/react-components';\r\nimport { useJsData } from '@bingads-webui-cc-react/js-data-rest';\r\nimport { StockImagePanelContent, WebsiteImagePanelContent, InvestImagePanelContent, isValidXandrAccount } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { useSourceImages } from './hooks/use-source-images';\r\nimport { AdsStudioAddAssetPanel } from './add-asset-panel';\r\n\r\nexport const MixedImagePanel = (props) => {\r\n const {\r\n i18n,\r\n aid, cid, oDataConfig,\r\n dataService, logger, notificationApi, navigation, open, perfMarker,\r\n permissions,\r\n } = props;\r\n\r\n const isXandrIntEnabled = useMemo(() => permissions.dynamic.XandrIntegrationEnabled, [permissions]);\r\n // eslint-disable-next-line no-restricted-globals\r\n const { data: account } = useJsData(jsData => (isXandrIntEnabled ? jsData.Account.find(aid) : Promise.resolve()), [aid, isXandrIntEnabled]);\r\n const isXandrIntegrationEnabled = useMemo(() => (isXandrIntEnabled ? isValidXandrAccount(account) : false), [account, isXandrIntEnabled]);\r\n\r\n const [selectedTab, setSelectedTab] = useState('stock');\r\n const {\r\n setSelectedImages, onStockClickSelect, onInvestClickSelect, onWebsiteClickSelect, showBlocker, selectedImages,\r\n } = useSourceImages({\r\n dataService, logger, navigation, perfMarker,\r\n });\r\n\r\n const dismiss = useCallback(() => {\r\n navigation.goBack();\r\n }, [navigation]);\r\n\r\n const onClickSelect = useCallback((handleJobErrors) => {\r\n if (selectedTab === 'stock') {\r\n onStockClickSelect(handleJobErrors);\r\n } else if (selectedTab === 'invest') {\r\n onInvestClickSelect(handleJobErrors);\r\n } else {\r\n onWebsiteClickSelect(handleJobErrors);\r\n }\r\n }, [onStockClickSelect, onInvestClickSelect, onWebsiteClickSelect, selectedTab]);\r\n\r\n const onTabSelect = useCallback((event, data) => {\r\n setSelectedImages([]);\r\n setSelectedTab(data.value);\r\n }, [setSelectedImages]);\r\n\r\n return (\r\n \r\n \r\n {i18n.getString(_TL_('Stock images'))}\r\n {i18n.getString(_TL_('Website images'))}\r\n {isXandrIntegrationEnabled && {i18n.getString(_TL_('Microsoft Invest'))}}\r\n \r\n {selectedTab === 'stock' && }\r\n {selectedTab === 'website' && }\r\n {selectedTab === 'invest' && isXandrIntegrationEnabled && }\r\n \r\n );\r\n};\r\n\r\nMixedImagePanel.propTypes = {\r\n i18n: PropTypes.shape({}).isRequired,\r\n navigation: PropTypes.shape({ gotoImagesPage: PropTypes.func }).isRequired,\r\n dataService: PropTypes.shape({\r\n uploadImage: PropTypes.func,\r\n uploadStockImage: PropTypes.func,\r\n uploadImageByUrl: PropTypes.func,\r\n uploadInvestImage: PropTypes.func,\r\n }).isRequired,\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n }).isRequired,\r\n aid: PropTypes.number.isRequired,\r\n cid: PropTypes.number.isRequired,\r\n oDataConfig: PropTypes.shape({}).isRequired,\r\n notificationApi: PropTypes.shape({\r\n showWarning: PropTypes.func,\r\n }).isRequired,\r\n open: PropTypes.bool.isRequired,\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({\r\n XandrIntegrationEnabled: PropTypes.bool,\r\n }),\r\n }),\r\n};\r\n\r\nMixedImagePanel.defaultProps = {\r\n permissions: { dynamic: { XandrIntegrationEnabled: false } },\r\n};\r\n","import { useCallback, useState, useMemo } from 'react';\r\nimport { each } from 'underscore';\r\nimport { MaxAddAssetJobInParell } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { runJobsInParallelWithRateLimit } from '@bingads-webui-universal/parallel-job-with-rate-limit';\r\n\r\nexport const useSourceVideos = ({\r\n dataService, logger, navigation, perfMarker,\r\n}) => {\r\n const [selectedVideos, setSelectedVideos] = useState([]);\r\n const [showBlocker, setShowBlocker] = useState(false);\r\n const validInvestVideos = useMemo(() => (Array.isArray(selectedVideos) ? selectedVideos.filter(({ id }) => !!id) : []), [selectedVideos]);\r\n const validUrlVideos = useMemo(() => (Array.isArray(selectedVideos) ? selectedVideos.filter(({ url }) => !!url) : []), [selectedVideos]);\r\n\r\n const onInvestClickSelect = useCallback((handleJobErrors) => {\r\n const investVideoPerfMarker = perfMarker && perfMarker.createChild('investVideoPicker');\r\n if (investVideoPerfMarker) {\r\n investVideoPerfMarker.willInit();\r\n }\r\n const jobErrors = [];\r\n const handleJobError = (err) => {\r\n jobErrors.push(err);\r\n };\r\n\r\n const saveOperations = [];\r\n\r\n each(validInvestVideos, ({ id, url, description }) => {\r\n saveOperations.push(() => dataService.uploadInvestVideo({ investVideoId: id, videoSrc: url, description }));\r\n });\r\n\r\n setShowBlocker(true);\r\n runJobsInParallelWithRateLimit({\r\n jobsToRateLimit: saveOperations,\r\n maxJobsInParallel: MaxAddAssetJobInParell,\r\n handleJobError,\r\n }).then((values) => {\r\n const videoIds = values || [];\r\n logger.logTrace('Add Media Panel: saved invest videos to folder', { videoIds: videoIds.join(','), count: videoIds.length });\r\n navigation.goBack({ reload: true });\r\n }).finally(() => {\r\n setSelectedVideos([]);\r\n handleJobErrors(jobErrors);\r\n setShowBlocker(false);\r\n if (investVideoPerfMarker) {\r\n investVideoPerfMarker.done();\r\n }\r\n });\r\n }, [dataService, logger, navigation, validInvestVideos]);\r\n\r\n const onUrlClickSelect = useCallback((handleJobErrors) => {\r\n const addVideoUrlPerfMarker = perfMarker && perfMarker.createChild('addVideoUrl');\r\n if (addVideoUrlPerfMarker) {\r\n addVideoUrlPerfMarker.willInit();\r\n }\r\n const jobErrors = [];\r\n const handleJobError = (err) => {\r\n jobErrors.push(err);\r\n };\r\n\r\n const saveOperations = [];\r\n\r\n each(validUrlVideos, ({ url }) => {\r\n saveOperations.push(() => dataService.uploadVideoByUrl({ videoUrl: url }));\r\n });\r\n\r\n setShowBlocker(true);\r\n runJobsInParallelWithRateLimit({\r\n jobsToRateLimit: saveOperations,\r\n maxJobsInParallel: MaxAddAssetJobInParell,\r\n handleJobError,\r\n }).then((values) => {\r\n const videoIds = values || [];\r\n logger.logTrace('Add Media Panel: saved videos to folder', { videoIds: videoIds.join(','), count: videoIds.length });\r\n navigation.goBack({ reload: true });\r\n }).finally(() => {\r\n setSelectedVideos([]);\r\n handleJobErrors(jobErrors);\r\n setShowBlocker(false);\r\n if (addVideoUrlPerfMarker) {\r\n addVideoUrlPerfMarker.done();\r\n }\r\n });\r\n }, [dataService, logger, navigation, validUrlVideos]);\r\n\r\n return {\r\n selectedVideos,\r\n showBlocker,\r\n setSelectedVideos,\r\n onInvestClickSelect,\r\n onUrlClickSelect,\r\n };\r\n};\r\n","import React, { useCallback, useMemo, useState, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { each } from 'underscore';\r\nimport { TabList, Tab } from '@fluentui/react-components';\r\nimport { useJsData } from '@bingads-webui-cc-react/js-data-rest';\r\nimport { AddVideoPanelContent, InvestVideoPanelContent, isValidXandrAccount } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { useSourceVideos } from './hooks/use-source-videos';\r\nimport { AdsStudioAddAssetPanel } from './add-asset-panel';\r\nimport { getAddVideoError } from './error/add-video-error';\r\n\r\nexport const MixedVideoPanel = (props) => {\r\n const {\r\n i18n,\r\n aid, cid, oDataConfig,\r\n dataService, logger, notificationApi, navigation, open, perfMarker,\r\n permissions,\r\n } = props;\r\n const [selectedTab, setSelectedTab] = useState('url');\r\n const isMultiSelection = useMemo(() => selectedTab !== 'invest', [selectedTab]);\r\n const isXandrIntEnabled = useMemo(() => permissions.dynamic.XandrIntegrationEnabled, [permissions]);\r\n // eslint-disable-next-line no-restricted-globals\r\n const { data: account } = useJsData(jsData => (isXandrIntEnabled ? jsData.Account.find(aid) : Promise.resolve()), [aid, isXandrIntEnabled]);\r\n const isXandrIntegrationEnabled = useMemo(() => (isXandrIntEnabled ? isValidXandrAccount(account) : false), [account, isXandrIntEnabled]);\r\n\r\n const {\r\n setSelectedVideos, onUrlClickSelect, onInvestClickSelect, showBlocker, selectedVideos,\r\n } = useSourceVideos({\r\n dataService, logger, navigation, perfMarker,\r\n });\r\n\r\n const dismiss = useCallback(() => {\r\n navigation.goBack();\r\n }, [navigation]);\r\n\r\n const handleJobErrors = useCallback((jobErrors) => {\r\n if (jobErrors.length > 0) {\r\n each(jobErrors, (error) => {\r\n const errorMsg = getAddVideoError({\r\n error,\r\n i18n,\r\n aid,\r\n logger,\r\n });\r\n notificationApi.showWarning(errorMsg);\r\n });\r\n }\r\n }, [aid, i18n, logger, notificationApi]);\r\n\r\n const onClickSelect = useCallback(() => {\r\n if (selectedTab === 'invest') {\r\n onInvestClickSelect(handleJobErrors);\r\n } else {\r\n onUrlClickSelect(handleJobErrors);\r\n }\r\n }, [handleJobErrors, onUrlClickSelect, onInvestClickSelect, selectedTab]);\r\n\r\n const onTabSelect = useCallback((event, data) => {\r\n setSelectedVideos([]);\r\n setSelectedTab(data.value);\r\n }, [setSelectedVideos]);\r\n\r\n useEffect(() => {\r\n if (selectedTab === 'invest' && selectedVideos && selectedVideos.length === 1) {\r\n onInvestClickSelect(handleJobErrors);\r\n }\r\n }, [handleJobErrors, selectedVideos, selectedTab]);\r\n\r\n return (\r\n \r\n \r\n {i18n.getString(_TL_('Upload'))}\r\n {isXandrIntegrationEnabled && {i18n.getString(_TL_('Microsoft Invest'))}}\r\n \r\n {selectedTab === 'url' && }\r\n {selectedTab === 'invest' && isXandrIntegrationEnabled && }\r\n \r\n );\r\n};\r\n\r\nMixedVideoPanel.propTypes = {\r\n i18n: PropTypes.shape({}).isRequired,\r\n navigation: PropTypes.shape({ gotoImagesPage: PropTypes.func }).isRequired,\r\n dataService: PropTypes.shape({\r\n uploadVideoByUrl: PropTypes.func,\r\n uploadInvestVideo: PropTypes.func,\r\n }).isRequired,\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n }).isRequired,\r\n aid: PropTypes.number.isRequired,\r\n cid: PropTypes.number.isRequired,\r\n oDataConfig: PropTypes.shape({}).isRequired,\r\n notificationApi: PropTypes.shape({\r\n showWarning: PropTypes.func,\r\n }).isRequired,\r\n open: PropTypes.bool.isRequired,\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({\r\n XandrIntegrationEnabled: PropTypes.bool,\r\n }),\r\n }),\r\n};\r\n\r\nMixedVideoPanel.defaultProps = {\r\n permissions: { dynamic: { XandrIntegrationEnabled: false } },\r\n};\r\n","import React, { useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { InvestImagePanelContent } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { useSourceImages } from './hooks/use-source-images';\r\nimport { AdsStudioAddAssetPanel } from './add-asset-panel';\r\n\r\nexport const InvestImagePanel = (props) => {\r\n const {\r\n i18n,\r\n aid, cid, oDataConfig,\r\n dataService, logger, notificationApi, navigation, open, perfMarker,\r\n } = props;\r\n const {\r\n setSelectedImages, onInvestClickSelect, showBlocker, selectedImages,\r\n } = useSourceImages({\r\n dataService, logger, navigation, perfMarker,\r\n });\r\n\r\n const dismiss = useCallback(() => {\r\n navigation.goBack();\r\n }, [navigation]);\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nInvestImagePanel.propTypes = {\r\n i18n: PropTypes.shape({}).isRequired,\r\n navigation: PropTypes.shape({ gotoImagesPage: PropTypes.func }).isRequired,\r\n dataService: PropTypes.shape({\r\n uploadImage: PropTypes.func,\r\n uploadStockImage: PropTypes.func,\r\n uploadImageByUrl: PropTypes.func,\r\n uploadInvestImage: PropTypes.func,\r\n }).isRequired,\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n }).isRequired,\r\n aid: PropTypes.number.isRequired,\r\n cid: PropTypes.number.isRequired,\r\n oDataConfig: PropTypes.shape({}).isRequired,\r\n notificationApi: PropTypes.shape({\r\n showWarning: PropTypes.func,\r\n }).isRequired,\r\n open: PropTypes.bool.isRequired,\r\n};\r\n","import React, { useCallback, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { makeStyles, shorthands } from '@fluentui/react-components';\r\nimport { InvestVideoPanelContent } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { useSourceVideos } from './hooks/use-source-videos';\r\nimport { AdsStudioAddAssetPanel } from './add-asset-panel';\r\n\r\nconst useStyles = makeStyles({\r\n helpLink: {\r\n color: '#337ab7',\r\n ...shorthands.textDecoration('underline'),\r\n fontWeight: 'normal',\r\n backgroundColor: 'transparent',\r\n ...shorthands.borderRadius('0px', '0px', '0px', '0px'),\r\n ...shorthands.border('none'),\r\n },\r\n});\r\n\r\nexport const InvestVideoPanel = (props) => {\r\n const {\r\n i18n,\r\n aid, cid, oDataConfig,\r\n dataService, logger, notificationApi, navigation, open, perfMarker,\r\n } = props;\r\n const classes = useStyles();\r\n\r\n const {\r\n setSelectedVideos, onInvestClickSelect, showBlocker, selectedVideos,\r\n } = useSourceVideos({\r\n dataService, logger, navigation, perfMarker,\r\n });\r\n\r\n const dismiss = useCallback(() => {\r\n navigation.goBack();\r\n }, [navigation]);\r\n\r\n useEffect(() => {\r\n if (selectedVideos && selectedVideos.length === 1) {\r\n const handleJobErrors = (jobErrors) => {\r\n if (jobErrors.length > 0) {\r\n const genericError = (\r\n \r\n { i18n.getString(_TL_('One or more assets failed to upload. Please try again')) }\r\n \r\n \r\n );\r\n notificationApi.showWarning(genericError);\r\n }\r\n };\r\n onInvestClickSelect(handleJobErrors);\r\n }\r\n }, [classes.helpLink, i18n, notificationApi, selectedVideos]);\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nInvestVideoPanel.propTypes = {\r\n i18n: PropTypes.shape({}).isRequired,\r\n navigation: PropTypes.shape({\r\n gotoVideosPage: PropTypes.func,\r\n goBack: PropTypes.func,\r\n }).isRequired,\r\n dataService: PropTypes.shape({\r\n uploadInvestVideo: PropTypes.func,\r\n }).isRequired,\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n }).isRequired,\r\n aid: PropTypes.number.isRequired,\r\n cid: PropTypes.number.isRequired,\r\n oDataConfig: PropTypes.shape({}).isRequired,\r\n notificationApi: PropTypes.shape({\r\n showWarning: PropTypes.func,\r\n }).isRequired,\r\n open: PropTypes.bool.isRequired,\r\n};\r\n","import _ from 'underscore';\r\nimport { mergeClasses } from '@fluentui/react-components';\r\nimport React, { useCallback, useMemo, useContext, useState, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport queryString from 'query-string';\r\nimport {\r\n AdsStudioBreadcrumb,\r\n SearchResultFilterBar,\r\n FilterContext,\r\n FolderAssetType,\r\n AdsStudioSpinner,\r\n ManualAddedImageSource,\r\n useAdsStudioServices,\r\n HiddenDivForAnnounce,\r\n} from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { Overlay } from '@bingads-webui-react/fabric-control';\r\nimport { setClarityTag } from '@bingads-webui-universal/clarity';\r\nimport { usePageActiveTimeTracker } from '@bingads-webui-campaign-react/common-hooks';\r\n\r\nimport { ImageGridView } from '../images-page-component/components';\r\nimport { useSearchResultViewStyle } from '../styles';\r\n\r\nconst ROOT_KEY = 'home-root';\r\nconst SEARCH_KEY = 'default-search-query';\r\n\r\nexport const SearchResultView = ({\r\n i18n,\r\n search,\r\n navigation,\r\n logger,\r\n dataService,\r\n notificationApi,\r\n reload,\r\n pagePerfMarker: searchPagePerfMarker,\r\n setDataLoaded,\r\n}) => {\r\n const classes = useSearchResultViewStyle();\r\n\r\n const {\r\n assets,\r\n loadData,\r\n } = dataService;\r\n\r\n const cropDataService = useAdsStudioServices();\r\n\r\n const [isPageInited, setPageInited] = useState(false);\r\n const [loadingData, setLoadingData] = useState(false);\r\n const [announcedText, setAnnouncedText] = useState('');\r\n\r\n const queries = queryString.parse(search);\r\n const { query: defaultSearchQuery = '' } = queries || {};\r\n const [cachedSearchText, setCachedSearchText] = useState(defaultSearchQuery);\r\n\r\n const { filterBar } = useContext(FilterContext);\r\n\r\n const {\r\n searchText = '',\r\n } = useMemo(() => filterBar.getFilters(), [filterBar]);\r\n\r\n const breadcrumbItems = useMemo(() => {\r\n const result = [{\r\n key: ROOT_KEY,\r\n text: i18n.getString(_TL_('Home')),\r\n }, {\r\n key: SEARCH_KEY,\r\n text: cachedSearchText,\r\n }];\r\n\r\n return result;\r\n }, [cachedSearchText, i18n]);\r\n\r\n const onBreadcrumbItemClick = useCallback((item) => {\r\n if (item && item.key === ROOT_KEY) {\r\n navigation.gotoHomePage();\r\n }\r\n }, [navigation]);\r\n\r\n const onFailedToLoadData = useCallback(() => {\r\n notificationApi.showWarning(i18n.getString(_TL_('Failed to load images. Please refresh the page and try again.')));\r\n }, [i18n, notificationApi]);\r\n\r\n const newAssets = useMemo(() => (_.map(assets, (item) => {\r\n const { folderAssetType } = item || {};\r\n if (folderAssetType) {\r\n return {\r\n ...item,\r\n manualAddedImageSourceType: ManualAddedImageSource.Library,\r\n };\r\n }\r\n return {\r\n folderAssetType: FolderAssetType.Image,\r\n manualAddedImageSourceType: ManualAddedImageSource.ShutterStock,\r\n id: item.Id,\r\n url: item.Preview && item.Preview.Url,\r\n };\r\n })), [assets]);\r\n\r\n // init page\r\n useEffect(() => {\r\n if (!isPageInited) {\r\n setPageInited(true);\r\n }\r\n }, [isPageInited]);\r\n\r\n usePageActiveTimeTracker(logger, 'Search result');\r\n\r\n useEffect(() => {\r\n setClarityTag({ LoadAdsStudioSearchResultPage: true });\r\n }, []);\r\n\r\n // load data for initial page load\r\n useEffect(() => {\r\n if (!isPageInited) {\r\n // wait until page is initialized\r\n return;\r\n }\r\n\r\n if (reload) { // Important! Add a trivial log so that reload will be an explicit dep.\r\n logger.logTrace('force to reload');\r\n }\r\n\r\n if (_.isEmpty(searchText.trim())) {\r\n // Don't reload when search text is empty\r\n return;\r\n }\r\n\r\n setCachedSearchText(searchText);\r\n\r\n searchPagePerfMarker.willFetchData();\r\n setLoadingData(true);\r\n loadData({\r\n assetTypeFilter: FolderAssetType.Image,\r\n isGlobalSearch: true,\r\n searchText,\r\n perfMarker: searchPagePerfMarker.createChild('searchResultPageLoadData'),\r\n })\r\n .catch(() => {\r\n onFailedToLoadData();\r\n }).finally(() => {\r\n setLoadingData(false);\r\n searchPagePerfMarker.willRender();\r\n setDataLoaded();\r\n });\r\n }, [isPageInited, loadData, onFailedToLoadData, searchText, logger, reload]);\r\n\r\n const isPageLoading = !isPageInited || loadingData;\r\n\r\n useEffect(() => {\r\n if (!isPageLoading && assets && assets.length > 0) {\r\n const count = assets && assets.length;\r\n setAnnouncedText(i18n.getString(_TL_('{{Count}} results found.'), { Count: count }));\r\n } else {\r\n setAnnouncedText('');\r\n }\r\n }, [assets, i18n, isPageLoading]);\r\n\r\n return (\r\n
    \r\n {isPageLoading && (\r\n \r\n \r\n \r\n )}\r\n
    \r\n \r\n
    \r\n
    \r\n {i18n.getString(_TL_('Images'))}\r\n
    \r\n
    \r\n {i18n.getString(_TL_('Images that match your search for “'))}\r\n {cachedSearchText}\r\n {i18n.getString(_TL_('”'))}\r\n
    \r\n
    \r\n \r\n
    \r\n \r\n \r\n
    \r\n );\r\n};\r\n\r\nSearchResultView.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n search: PropTypes.string.isRequired,\r\n navigation: PropTypes.shape({}).isRequired,\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n }).isRequired,\r\n dataService: PropTypes.shape({}),\r\n notificationApi: PropTypes.shape({}),\r\n reload: PropTypes.shape({}),\r\n};\r\n\r\nSearchResultView.defaultProps = {\r\n dataService: {},\r\n notificationApi: {},\r\n reload: null,\r\n};\r\n","\r\nimport { useState, useMemo, useCallback, useEffect } from 'react';\r\nimport _ from 'underscore';\r\n\r\nimport {\r\n CSMLAdType,\r\n CSMLAssetSource,\r\n getPreviewText,\r\n getSizeErrorRatioList,\r\n getAllSizeErrorRatioList,\r\n getPlacementsToExpand,\r\n} from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { ImageExperienceImage } from '@bingads-webui-campaign-react/image-experience-model';\r\nimport {\r\n useAdPreviewModel,\r\n UAPPlacementTypeAlias,\r\n getCropSettingsFromRoi,\r\n} from '@bingads-webui-campaign-react/unified-ad-preview-library-cmui';\r\nimport { usePageActiveTimeTracker } from '@bingads-webui-campaign-react/common-hooks';\r\n\r\nimport GenericImage from '../media/1.91to1.jpg';\r\n\r\nconst getPlacementSetConfig = (image, getSmartCroppings, isAudienceAdSmartCropEnabled, isMMAV2Enabled, isPMaxAspectRatiosV2Enabled, isAdPreviewRefreshEnabled, getExpandedCroppingsFunc = undefined) => ([\r\n {\r\n image,\r\n placementSets: [\r\n {\r\n placementSetName: CSMLAdType.PMax,\r\n // eslint-disable-next-line no-nested-ternary\r\n placementTypes: isPMaxAspectRatiosV2Enabled ? (isAdPreviewRefreshEnabled ? UAPPlacementTypeAlias.PMaxV2.AllV2 : UAPPlacementTypeAlias.PMaxV2.All) : UAPPlacementTypeAlias.PMax.All,\r\n getDefaultPlacementsCropping: getSmartCroppings,\r\n },\r\n {\r\n placementSetName: CSMLAdType.MMA,\r\n placementTypes: UAPPlacementTypeAlias.MMA.All,\r\n getDefaultPlacementsCropping: getSmartCroppings,\r\n },\r\n {\r\n placementSetName: CSMLAdType.Audience,\r\n placementTypes: isMMAV2Enabled ? UAPPlacementTypeAlias.MSANV2.All : UAPPlacementTypeAlias.MSAN.All,\r\n // eslint-disable-next-line no-nested-ternary\r\n getDefaultPlacementsCropping: getExpandedCroppingsFunc ? getExpandedCroppingsFunc(CSMLAdType.Audience) : (isAudienceAdSmartCropEnabled ? getSmartCroppings : undefined),\r\n },\r\n {\r\n placementSetName: CSMLAdType.ImageExtension,\r\n placementTypes: isAdPreviewRefreshEnabled ? UAPPlacementTypeAlias.ImageExt.AllV2 : UAPPlacementTypeAlias.ImageExt.All,\r\n getDefaultPlacementsCropping: isAudienceAdSmartCropEnabled ? getSmartCroppings : undefined,\r\n },\r\n ],\r\n }, {\r\n image: GenericImage,\r\n placementSets: [\r\n {\r\n placementSetName: CSMLAdType.ImageExtension,\r\n placementTypes: [\r\n UAPPlacementTypeAlias.ImageExt.BingDesktopMultiImage,\r\n UAPPlacementTypeAlias.ImageExt.BingMobileMultiImage,\r\n ],\r\n },\r\n ],\r\n }]);\r\n\r\nexport const useAdPlacement = ({\r\n image,\r\n permissions,\r\n setDataLoaded,\r\n logger,\r\n i18n,\r\n getSmartCroppings,\r\n setLoadingStatus,\r\n imageCroppingTasks,\r\n isImageFittingEnabled,\r\n dataService,\r\n}) => {\r\n const isAudienceAdSmartCropEnabled = permissions && permissions.dynamic.AudienceAdSmartCrop;\r\n const [adType, setAdType] = useState(CSMLAdType.PMax);\r\n const [errorTip, setErrorTip] = useState('');\r\n const [showRequiredOnly, setShowRequiredOnly] = useState(false);\r\n const [currentImage, setCurrentImage] = useState(null);\r\n\r\n const [editingPlacementInfo, setEditingPlacementInfo] = useState(null);\r\n\r\n // useClarityTags([ClarityTags.LaunchedAssetLibrary, ClarityTags.LaunchedEditImage]);\r\n\r\n // click on a placement's edit aspect ratio button\r\n const onEditPlacement = useCallback((placementInfo) => {\r\n setEditingPlacementInfo(placementInfo);\r\n logger.logTrace('Edit Page: onEditPlacement', { imageId: currentImage.id });\r\n }, [currentImage, logger]);\r\n\r\n const onAdPreviewError = useCallback((err) => {\r\n logger.logError(`Edit Page: ad preview error, ${JSON.stringify(err)}`);\r\n }, [logger]);\r\n\r\n const {\r\n firstImage,\r\n setPlacementConfig,\r\n multiImagePlacementSets: placementSets,\r\n updatePlacementCropping,\r\n updatePlacementCroppingByImageType,\r\n hasDataChanged: hasCropSettingsChanged,\r\n changedCropSettings,\r\n } = useAdPreviewModel(null, onAdPreviewError);\r\n const { imageMeta: imageInfo, imageCropping: cropSettings } = firstImage || {};\r\n\r\n const placementList = useMemo(() => {\r\n const { placementList: pl } = _.find(placementSets, ({ placementSetName }) => placementSetName === adType) || {};\r\n return pl;\r\n }, [adType, placementSets]);\r\n\r\n const previewTexts = useMemo(\r\n () => getPreviewText(adType === CSMLAdType.ImageExtension, i18n),\r\n [adType, i18n]\r\n );\r\n\r\n usePageActiveTimeTracker(logger, 'Edit image');\r\n\r\n useEffect(() => {\r\n if (image && image.url) {\r\n if (setDataLoaded) {\r\n setDataLoaded();\r\n }\r\n setLoadingStatus(true);\r\n setCurrentImage(prev => (prev && prev.url === image.url ? prev : image));\r\n logger.logTrace('Edit Page: page loaded', { imageId: image.id });\r\n }\r\n }, [image, logger, setLoadingStatus]);\r\n\r\n const isMMAV2Enabled = useMemo(() => permissions && permissions.IsMMAV2Enabled && !(permissions.IsAmplifyEnabled && permissions.dynamic.DisplayPlusAmplify), [permissions]);\r\n const isPMaxAspectRatiosV2Enabled = useMemo(() => permissions && permissions.dynamic.PMaxNewAspectRatios && !permissions.dynamic.PMaxExcludeNewAspectRatios, [permissions]);\r\n const isAdPreviewRefreshEnabled = useMemo(() => _.get(permissions, ['dynamic', 'AdPreviewRefresh']), [permissions]);\r\n\r\n const { imageFit } = dataService;\r\n\r\n const getExpandedCroppingsInner = useCallback(adTypeInner => (argObj) => {\r\n const { imageMeta } = argObj;\r\n // we should call fitting if\r\n // 1. the image is applied filter/blur/background change, and not saved to library yet\r\n // 2. the image is stock image from search result page which is not saved to library yet\r\n setLoadingStatus(true);\r\n const placementsToExpand = getPlacementsToExpand(adTypeInner);\r\n return imageFit({\r\n imageUrl: currentImage.url,\r\n placements: placementsToExpand,\r\n skipOutpainting: currentImage.sourceType === CSMLAssetSource.Shutterstock,\r\n }).then(res => getCropSettingsFromRoi({\r\n ...argObj,\r\n imageMeta: {\r\n ...imageMeta,\r\n expandedMeta: res,\r\n },\r\n })).catch(() => {\r\n }).finally(() => {\r\n setLoadingStatus(false);\r\n });\r\n }, [currentImage, imageFit, setLoadingStatus]);\r\n useEffect(() => {\r\n let getExpandedCroppingsFunc;\r\n if (isImageFittingEnabled && currentImage && currentImage.roiInfo && currentImage.id) {\r\n getExpandedCroppingsFunc = () => getCropSettingsFromRoi;\r\n }\r\n if (isImageFittingEnabled && currentImage && !currentImage.id && !currentImage.roiInfo) {\r\n getExpandedCroppingsFunc = getExpandedCroppingsInner;\r\n }\r\n\r\n if (currentImage && currentImage.originalUrl) {\r\n const placementSetConfig = getPlacementSetConfig(currentImage, getSmartCroppings, isAudienceAdSmartCropEnabled, isMMAV2Enabled, isPMaxAspectRatiosV2Enabled, isAdPreviewRefreshEnabled, getExpandedCroppingsFunc);\r\n setPlacementConfig(placementSetConfig);\r\n } else if (currentImage && currentImage.url) {\r\n const clonedImage = { ...currentImage, originalUrl: currentImage.url };\r\n const placementSetConfig = getPlacementSetConfig(clonedImage, getSmartCroppings, isAudienceAdSmartCropEnabled, isMMAV2Enabled, isPMaxAspectRatiosV2Enabled, isAdPreviewRefreshEnabled, getExpandedCroppingsFunc);\r\n setPlacementConfig(placementSetConfig);\r\n }\r\n }, [setPlacementConfig, isAudienceAdSmartCropEnabled, currentImage, getSmartCroppings, isMMAV2Enabled, isImageFittingEnabled, getExpandedCroppingsInner, isPMaxAspectRatiosV2Enabled, isAdPreviewRefreshEnabled]);\r\n\r\n useEffect(() => {\r\n if (placementList && placementList.length) {\r\n setLoadingStatus(false);\r\n }\r\n }, [setLoadingStatus, placementList]);\r\n\r\n const maxCropBox = useMemo(() => (imageInfo ? {\r\n SourceX: 0,\r\n SourceY: 0,\r\n SourceWidth: imageInfo.originalWidth,\r\n SourceHeight: imageInfo.originalHeight,\r\n } : null), [imageInfo]);\r\n\r\n const handleInvalidCropSetting = useCallback((invalidRatioList) => {\r\n let errorInfo = '';\r\n if (invalidRatioList.length === 1) {\r\n errorInfo = i18n.getString(\r\n _TL_('Your image doesn\\'t meet the size requirements for the following ad placement: {{ratio}} {{placement}}'),\r\n {\r\n ratio: `${invalidRatioList[0].aspectRatioAsRatio}`,\r\n placement: `${i18n.getString(invalidRatioList[0].previewTypeString)}`,\r\n }\r\n );\r\n } else if (invalidRatioList.length === 2) {\r\n errorInfo = i18n.getString(\r\n _TL_('Your image doesn\\'t meet the size requirements for the following ad placements: {{ratio1}} {{placement1}} and {{ratio2}} {{placement2}}'),\r\n {\r\n ratio1: `${invalidRatioList[0].aspectRatioAsRatio}`,\r\n ratio2: `${invalidRatioList[1].aspectRatioAsRatio}`,\r\n placement1: `${i18n.getString(invalidRatioList[0].previewTypeString)}`,\r\n placement2: `${i18n.getString(invalidRatioList[1].previewTypeString)}`,\r\n }\r\n );\r\n }\r\n\r\n setErrorTip(errorInfo);\r\n }, [i18n]);\r\n\r\n useEffect(() => {\r\n const invalidRatioList = getSizeErrorRatioList(\r\n adType,\r\n cropSettings || maxCropBox,\r\n true,\r\n isMMAV2Enabled,\r\n isPMaxAspectRatiosV2Enabled\r\n );\r\n handleInvalidCropSetting(invalidRatioList);\r\n }, [adType, cropSettings, handleInvalidCropSetting, isMMAV2Enabled, isPMaxAspectRatiosV2Enabled, maxCropBox]);\r\n\r\n const saveCropPlacement = useCallback((placement, newCropping) => {\r\n const { placementMeta } = placement || {};\r\n const { placementType, imageType } = placementMeta || {};\r\n if (adType === CSMLAdType.ImageExtension || adType === CSMLAdType.PMax) {\r\n // for image extension placements, all placements with same image type should be updated together\r\n updatePlacementCroppingByImageType({ placementSetName: adType, imageType, newPlacementCropping: newCropping });\r\n } else {\r\n updatePlacementCropping({ placementSetName: adType, placementType, newPlacementCropping: newCropping });\r\n }\r\n setEditingPlacementInfo(null);\r\n logger.logTrace('Edit page: save crop placement', {\r\n imageId: currentImage.id,\r\n adType,\r\n placementType: imageType,\r\n cropSettings: JSON.stringify(newCropping),\r\n });\r\n }, [adType, currentImage, logger, updatePlacementCropping, updatePlacementCroppingByImageType]);\r\n\r\n const cancelCropPlacement = useCallback(() => {\r\n setEditingPlacementInfo(null);\r\n logger.logTrace('Edit page: cancel edit placement', { imageId: currentImage.id });\r\n }, [currentImage, logger]);\r\n\r\n const switchAdType = useCallback((type) => {\r\n logger.logTrace('Edit Page: switchAdType', { imageId: currentImage.id, adType: type });\r\n setAdType(type);\r\n }, [currentImage, logger]);\r\n\r\n const switchShowRequiredOnly = useCallback((checked) => {\r\n setShowRequiredOnly(checked);\r\n logger.logTrace('Edit page: show required only', { imageId: currentImage.id, showRequiredOnly: checked });\r\n }, [currentImage, logger]);\r\n\r\n const updateImage = useCallback((newImage) => {\r\n if (!_.isEqual(newImage, currentImage)) {\r\n setCurrentImage(newImage);\r\n }\r\n }, [currentImage]);\r\n\r\n const previewImage = useMemo(() => (imageInfo ?\r\n new ImageExperienceImage({\r\n src: imageInfo.originalUrl,\r\n width: imageInfo.originalWidth,\r\n height: imageInfo.originalHeight,\r\n })\r\n : null), [imageInfo]);\r\n\r\n const hasCroppingTask = useMemo(() => {\r\n if (currentImage && currentImage.id) {\r\n const onGoingTask = imageCroppingTasks && imageCroppingTasks[currentImage.id];\r\n\r\n return !!onGoingTask;\r\n }\r\n return false;\r\n }, [currentImage, imageCroppingTasks]);\r\n\r\n const cropSettingsToUpdate = useMemo(() => _.first(changedCropSettings), [changedCropSettings]);\r\n\r\n const allSizeInvalidRatioList = useMemo(() => getAllSizeErrorRatioList(cropSettings || maxCropBox, false, isMMAV2Enabled), [cropSettings, isMMAV2Enabled, maxCropBox]);\r\n\r\n const requiredSizeInvalidRatioList = useMemo(() => getAllSizeErrorRatioList(cropSettings || maxCropBox, true, isMMAV2Enabled), [cropSettings, isMMAV2Enabled, maxCropBox]);\r\n\r\n const allViewErrorTip = useMemo(() => {\r\n let errorInfo = '';\r\n if (requiredSizeInvalidRatioList.length === 1) {\r\n errorInfo = i18n.getString(\r\n _TL_('Your image doesn\\'t meet the size requirements for {{ratio}} {{placement}} ads.'),\r\n {\r\n ratio: requiredSizeInvalidRatioList[0].aspectRatioAsRatio,\r\n placement: i18n.getString(requiredSizeInvalidRatioList[0].previewTypeString),\r\n }\r\n );\r\n } else if (requiredSizeInvalidRatioList.length === 2) {\r\n errorInfo = i18n.getString(\r\n _TL_('Your image doesn\\'t meet the size requirements for {{ratio1}} {{previewName1}} and {{ratio2}} {{previewName2}} ads.'),\r\n {\r\n ratio1: requiredSizeInvalidRatioList[0].aspectRatioAsRatio,\r\n ratio2: requiredSizeInvalidRatioList[1].aspectRatioAsRatio,\r\n previewName1: i18n.getString(requiredSizeInvalidRatioList[0].previewTypeString),\r\n previewName2: i18n.getString(requiredSizeInvalidRatioList[1].previewTypeString),\r\n }\r\n );\r\n }\r\n\r\n return errorInfo;\r\n }, [i18n, requiredSizeInvalidRatioList]);\r\n\r\n return {\r\n adType,\r\n currentViewErrorTip: errorTip,\r\n allViewErrorTip,\r\n showRequiredOnly,\r\n editingPlacementInfo,\r\n placementList,\r\n firstImage,\r\n previewTexts,\r\n maxCropBox,\r\n previewImage,\r\n hasCroppingTask,\r\n cropSettingsToUpdate,\r\n hasCropSettingsChanged,\r\n onEditPlacement,\r\n saveCropPlacement,\r\n cancelCropPlacement,\r\n switchAdType,\r\n switchShowRequiredOnly,\r\n updateImage,\r\n allSizeInvalidRatioList,\r\n requiredSizeInvalidRatioList,\r\n };\r\n};\r\n","import { useCallback, useState, useEffect, useMemo } from 'react';\r\nimport { Promise } from 'bluebird';\r\nimport { createColorBackground, fetchImgPromise, parseMaskResultPromise } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { useMaskedImage } from './use-masked-image';\r\n\r\nexport const useBackgroundChange = ({\r\n dataService,\r\n perfMarker,\r\n logger,\r\n}) => {\r\n const [fetchSegmentationError, setFetchSegmentationError] = useState('');\r\n const [isFetchingSegmentations, setIsFetchingSegmentations] = useState(false);\r\n\r\n const {\r\n getImageSegmentations,\r\n generateImageBackground,\r\n } = dataService;\r\n\r\n const {\r\n alphaArray,\r\n imageUrlWithoutBackground,\r\n setImageUrlWithoutBackground,\r\n imageUrlWithGeneratedBackground,\r\n setImageUrlWithGeneratedBackground,\r\n imageUrlWithColoredBackground,\r\n setImageUrlWithColoredBackground,\r\n segmentationMasks,\r\n setSegmentationMasks,\r\n getMaskValueAtPoint,\r\n selectedMasks,\r\n setSelectedMasks,\r\n selectedImageSrc,\r\n setSelectedImageSrc,\r\n maskSetsBase64,\r\n setMaskSetsBase64,\r\n resetStates,\r\n maskValues,\r\n } = useMaskedImage();\r\n\r\n const drawColorBackground = useCallback((color, imageWidth, imageHeight) => {\r\n if ((selectedImageSrc || imageUrlWithoutBackground) && segmentationMasks) {\r\n return fetchImgPromise(selectedImageSrc || imageUrlWithoutBackground).then((image) => {\r\n const coloredBackground = createColorBackground(image, imageWidth, imageHeight, color, segmentationMasks, selectedMasks, alphaArray);\r\n setImageUrlWithColoredBackground(coloredBackground);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }, [selectedImageSrc, imageUrlWithoutBackground, segmentationMasks, selectedMasks, alphaArray, setImageUrlWithColoredBackground]);\r\n\r\n const getSegmentations = useCallback(({\r\n imageUrl, imageWidth, imageHeight,\r\n }) => {\r\n const imageSegmentationPerfMarker = perfMarker.createChild('ImageSegmentations');\r\n imageSegmentationPerfMarker.willInit();\r\n setIsFetchingSegmentations(true);\r\n resetStates();\r\n const ret = getImageSegmentations(imageUrl).then(result => (\r\n parseMaskResultPromise({\r\n result,\r\n imageUrl,\r\n imageWidth,\r\n imageHeight,\r\n })\r\n )).then((parsedResult) => {\r\n const {\r\n rawMaskSetsBase64String: rawMaskSetsBase64,\r\n maskSetsArray,\r\n selectedMasksArray,\r\n alphaArray: newAlphaArray,\r\n imageUrlWithoutBackground: selfDrawnImageUrl,\r\n } = parsedResult || {};\r\n setImageUrlWithoutBackground(selfDrawnImageUrl);\r\n setSegmentationMasks({ maskSetsArray, selectedMasksArray, newAlphaArray });\r\n setMaskSetsBase64(rawMaskSetsBase64);\r\n logger.logTrace('Copilot change image background - get image segmentations successfully', { originalUrl: imageUrl });\r\n }).catch((err) => {\r\n setFetchSegmentationError(err.uxMessage);\r\n })\r\n .finally(() => {\r\n setIsFetchingSegmentations(false);\r\n imageSegmentationPerfMarker.done();\r\n });\r\n return ret;\r\n }, [resetStates, perfMarker,\r\n getImageSegmentations, setImageUrlWithoutBackground, setSegmentationMasks, setMaskSetsBase64, logger]);\r\n\r\n const generateBackground = useCallback(({\r\n prompt, imageUrl, imageWidth, imageHeight,\r\n }) => {\r\n const backgroundGenerationPerfMarker = perfMarker.createChild('ImageBackgroundGeneration');\r\n backgroundGenerationPerfMarker.willInit();\r\n const ret = generateImageBackground({\r\n prompt,\r\n imageUrl,\r\n selectedMasks,\r\n maskSetsBase64,\r\n outputImageWidth: imageWidth,\r\n outputImageHeight: imageHeight,\r\n }).then((res) => {\r\n const { imageUrl: newImageUrl } = res || {};\r\n logger.logTrace('Copilot change image background - generate image background successfully', { generatedUrl: newImageUrl, prompt });\r\n setImageUrlWithGeneratedBackground(newImageUrl);\r\n return newImageUrl;\r\n }).finally(() => {\r\n backgroundGenerationPerfMarker.done();\r\n });\r\n return ret;\r\n }, [selectedMasks, perfMarker,\r\n generateImageBackground, maskSetsBase64, logger, setImageUrlWithGeneratedBackground]);\r\n\r\n useEffect(() => {\r\n logger.logTrace('Copilot change image background - user entered the page');\r\n }, [logger]);\r\n\r\n const resultImage = useMemo(() => (imageUrlWithGeneratedBackground && {\r\n url: imageUrlWithGeneratedBackground,\r\n }), [imageUrlWithGeneratedBackground]);\r\n\r\n return {\r\n // APIs\r\n getSegmentations,\r\n isFetchingSegmentations,\r\n generateBackground,\r\n drawColorBackground,\r\n\r\n // image states\r\n imageUrlWithoutBackground, // the image url without background\r\n imageUrlWithGeneratedBackground,\r\n setImageUrlWithGeneratedBackground,\r\n imageUrlWithColoredBackground,\r\n resultImage,\r\n getMaskValueAtPoint,\r\n segmentationMasks,\r\n setSelectedImageSrc,\r\n selectedImageSrc, // the image after user selected objects\r\n selectedMasks,\r\n setSelectedMasks,\r\n maskValues,\r\n fetchSegmentationError,\r\n };\r\n};\r\n","import { useCallback, useState, useMemo } from 'react';\r\nimport { getMaskValueAtPointFunc } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n\r\nexport const useMaskedImage = () => {\r\n const [imageUrlWithoutBackground, setImageUrlWithoutBackground] = useState(null);\r\n const [imageUrlWithGeneratedBackground, setImageUrlWithGeneratedBackground] = useState(null);\r\n const [imageUrlWithColoredBackground, setImageUrlWithColoredBackground] = useState(null);\r\n const [segmentationMasks, setSegmentationMaskInternal] = useState(null);\r\n const [selectedMasks, setSelectedMasks] = useState([]);\r\n const [selectedImageSrc, setSelectedImageSrc] = useState(null);\r\n const [maskSetsBase64, setMaskSetsBase64] = useState(null);\r\n const [alphaArray, setAlphaArray] = useState([]);\r\n\r\n // mask is encoded in base64 format, decode it here\r\n const setSegmentationMasks = useCallback(({ maskSetsArray, selectedMasksArray, newAlphaArray }) => {\r\n setSegmentationMaskInternal(maskSetsArray);\r\n setSelectedMasks(selectedMasksArray);\r\n setAlphaArray(newAlphaArray);\r\n }, []);\r\n\r\n const resetStates = useCallback(() => {\r\n setImageUrlWithoutBackground(null);\r\n setSegmentationMaskInternal(null);\r\n setSelectedMasks([]);\r\n setSelectedImageSrc(null);\r\n setMaskSetsBase64(null);\r\n }, []);\r\n\r\n const maskValues = useMemo(() => Array.from(new Set(segmentationMasks)).filter(x => x > 0), [segmentationMasks]);\r\n\r\n const getMaskValueAtPoint = useCallback((x, y, originalImageWidth) =>\r\n getMaskValueAtPointFunc(x, y, originalImageWidth, segmentationMasks), [segmentationMasks]);\r\n\r\n return {\r\n imageUrlWithoutBackground,\r\n setImageUrlWithoutBackground,\r\n imageUrlWithGeneratedBackground,\r\n setImageUrlWithGeneratedBackground,\r\n imageUrlWithColoredBackground,\r\n setImageUrlWithColoredBackground,\r\n\r\n // mask\r\n alphaArray,\r\n segmentationMasks,\r\n setSegmentationMasks,\r\n getMaskValueAtPoint,\r\n selectedMasks,\r\n setSelectedMasks,\r\n selectedImageSrc,\r\n setSelectedImageSrc,\r\n maskSetsBase64,\r\n maskValues,\r\n setMaskSetsBase64,\r\n resetStates,\r\n };\r\n};\r\n","import { buildImageAssetMetadataToSave, extractInfoForDeserialization } from '@bingads-webui-campaign/media-metadata-model';\r\nimport _ from 'underscore';\r\n\r\nexport const ViewName = {\r\n PlacementListView: 'placementListView',\r\n PlacementEditView: 'placementEditView',\r\n ImageAdjustView: 'imageAdjustView',\r\n BackgroundChangeView: 'backgroundChangeView',\r\n};\r\n\r\nexport const convertMetaData = (resultFilterAndBlurImage) => {\r\n const combinedEffect = [];\r\n if (resultFilterAndBlurImage.filter) {\r\n const filterEffect = buildImageAssetMetadataToSave({\r\n effectSettings: {\r\n effectKey: 'DesignerEffects',\r\n effectOptions: {\r\n designerEffect: resultFilterAndBlurImage.filter,\r\n },\r\n },\r\n });\r\n combinedEffect.push(filterEffect);\r\n }\r\n if (resultFilterAndBlurImage.blur) {\r\n const blurEffect = buildImageAssetMetadataToSave({\r\n effectSettings: {\r\n effectKey: 'BackgroundBlur',\r\n effectOptions: {\r\n backgroundBlur: resultFilterAndBlurImage.blur,\r\n },\r\n },\r\n });\r\n combinedEffect.push(blurEffect);\r\n }\r\n if (combinedEffect.length > 0) {\r\n return {\r\n effect: combinedEffect[0].effect,\r\n combinedEffect,\r\n };\r\n }\r\n return null;\r\n};\r\n\r\nconst revertMetaDataInner = (metaData) => {\r\n const combinedEffectArray = _.isArray(metaData.combinedEffect) ? metaData.combinedEffect : _.keys(metaData.combinedEffect).map(key => metaData.combinedEffect[key]);\r\n if (combinedEffectArray.length > 0) {\r\n const filterEffect = combinedEffectArray.find(effect => effect.effect.key === 'DesignerEffects');\r\n const blurEffect = combinedEffectArray.find(effect => effect.effect.key === 'BackgroundBlur');\r\n return {\r\n filter: filterEffect ? extractInfoForDeserialization({ obj: filterEffect }) : null,\r\n blur: blurEffect ? extractInfoForDeserialization({ obj: blurEffect }) : null,\r\n };\r\n } else if (metaData.effect) {\r\n if (metaData.effect.key === 'DesignerEffects') {\r\n return {\r\n filter: extractInfoForDeserialization({ obj: metaData }),\r\n blur: null,\r\n };\r\n } else if (metaData.effect.key === 'BackgroundBlur') {\r\n return {\r\n filter: null,\r\n blur: extractInfoForDeserialization({ obj: metaData }),\r\n };\r\n }\r\n }\r\n return null;\r\n};\r\n\r\nexport const revertMetaData = (metaData) => {\r\n const { filter, blur } = revertMetaDataInner(metaData);\r\n const filterValue = filter ? filter.effectSettings.effectOptions.designerEffect : null;\r\n const blurValue = blur ? blur.effectSettings.effectOptions.backgroundBlur : null;\r\n return {\r\n filter: filterValue,\r\n blur: blurValue,\r\n };\r\n};\r\n","/* eslint-disable arrow-body-style */\r\nimport _ from 'underscore';\r\nimport { useCallback, useContext, useEffect, useMemo, useState } from 'react';\r\nimport { Promise } from 'bluebird';\r\n\r\nimport { CSMLAssetSource, ROOT_FOLDER_ID, useAdsStudioServices, fetchImgPromise } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { isCopilotRegionRestricted } from '@bingads-webui-react/copilot-utils';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { DataContext } from '@bingads-webui-campaign-react/ads-studio-shared-components';\r\n\r\nimport { useFilterAndBlur } from './use-filter-and-blur';\r\nimport { useAdPlacement } from './use-ad-placement';\r\nimport { useBackgroundChange } from './background-change/use-background-change';\r\nimport { ViewName, convertMetaData, revertMetaData } from './utils';\r\n\r\nexport const useEditImageState = ({\r\n imageId,\r\n dataService,\r\n editImageUrl,\r\n perfMarker,\r\n setDataLoaded,\r\n permissions,\r\n logger,\r\n i18n,\r\n getSmartCroppings,\r\n navigation,\r\n initialCurrentView,\r\n folderId,\r\n getAssetEnhancementSettings,\r\n}) => {\r\n const [currentView, setCurrentView] = useState(ViewName.PlacementListView);\r\n const [originalImage, setOriginalImage] = useState({});\r\n const [loadingStatus, setLoadingStatus] = useState(true);\r\n const [initialAssetLoading, setInitialAssetLoading] = useState(false);\r\n const [backgroundChangedResult, setBackgroundChangedResult] = useState(null);\r\n const [savedBackgroundColorChangedImage, setSavedBackgroundColorChangedImage] = useState([]);\r\n const [filterBlurBaseImage, setFilterBlurBaseImage] = useState(null);\r\n const [isConfirmDialogOpen, setIsConfirmDialogOpen] = useState(false);\r\n const [assetsAIEnhancementEnabled, setAssetsAIEnhancementEnabled] = useState(false);\r\n const serverContext = useContext(ServerContext);\r\n const { setData } = useContext(DataContext);\r\n const cropDataService = useAdsStudioServices();\r\n\r\n const { cropImage, imageCroppingTasks } = cropDataService;\r\n\r\n const isImageFittingEnabled = useMemo(() => _.result(permissions, ['dynamic', 'ImageFittingMVP'], false) && !_.result(permissions, ['dynamic', 'ImageFittingExlcudeMAE'], true)\r\n && _.result(permissions, ['dynamic', 'ImageFittingUnifiedImageROI'], false), [permissions]);\r\n const isBrandKitEnabled = useMemo(() => _.result(permissions, ['dynamic', 'BrandKitUI'], false), [permissions]);\r\n\r\n const finalImageFittingEnabled = useMemo(() => isImageFittingEnabled && assetsAIEnhancementEnabled, [isImageFittingEnabled, assetsAIEnhancementEnabled]);\r\n\r\n useEffect(() => {\r\n if (initialCurrentView) {\r\n setCurrentView(initialCurrentView);\r\n }\r\n }, [initialCurrentView]);\r\n\r\n useEffect(() => {\r\n // We need the image url, image width and height for the background removal\r\n if (editImageUrl) {\r\n setLoadingStatus(true);\r\n fetchImgPromise(editImageUrl).then((image) => {\r\n setOriginalImage({\r\n url: editImageUrl,\r\n width: image.naturalWidth,\r\n height: image.naturalHeight,\r\n originalWidth: image.naturalWidth,\r\n originalHeight: image.naturalHeight,\r\n sourceType: CSMLAssetSource.Shutterstock,\r\n });\r\n setLoadingStatus(false);\r\n });\r\n } else if (!originalImage.url) {\r\n setLoadingStatus(true);\r\n setInitialAssetLoading(true);\r\n perfMarker.willFetchData();\r\n getAssetEnhancementSettings().then((settings) => {\r\n const assetsAIEnhancementEnabledInner = settings.AssetAIEnhancementOptout === 'false';\r\n const promises = [\r\n dataService.getImageById({ imageId, isImageFittingEnabled: isImageFittingEnabled && assetsAIEnhancementEnabledInner }),\r\n isBrandKitEnabled ? isCopilotRegionRestricted({\r\n feature: 'displayTemplate',\r\n permissions,\r\n serverContext,\r\n }) : Promise.resolve(true),\r\n ];\r\n Promise.all(promises).then(([res, isRestricted]) => {\r\n if (res.baseId && res.metadata && (res.metadata.effect || res.metadata.combinedEffect)) {\r\n // applied smart effect, get to the base image\r\n const { filter, blur } = revertMetaData(res.metadata) || {};\r\n dataService.getImageById({ imageId: res.baseId, isImageFittingEnabled: isImageFittingEnabled && assetsAIEnhancementEnabledInner }).then((image) => {\r\n setFilterBlurBaseImage({ ...image, filter, blur });\r\n setOriginalImage(res);\r\n setLoadingStatus(false);\r\n setInitialAssetLoading(false);\r\n });\r\n } else if (isBrandKitEnabled && !isRestricted && res.metadata && res.metadata.template &&\r\n res.metadata.template.templateId &&\r\n Number(res.metadata.template.version) >= 1.2\r\n ) {\r\n // template based AIGC image, navigate to the edit display image page\r\n setData({\r\n imageId: res.id,\r\n url: res.url,\r\n metadata: res.metadata,\r\n height: res.height,\r\n width: res.width,\r\n sourceType: res.sourceType,\r\n });\r\n navigation.gotoEditDisplayImagePage({\r\n imageId,\r\n folderId,\r\n templateId: res.metadata.template.templateId,\r\n });\r\n } else {\r\n setOriginalImage(res);\r\n setLoadingStatus(false);\r\n setInitialAssetLoading(false);\r\n }\r\n });\r\n setAssetsAIEnhancementEnabled(assetsAIEnhancementEnabledInner);\r\n });\r\n }\r\n }, [dataService, editImageUrl, imageId, isImageFittingEnabled, originalImage.url, navigation, folderId, isBrandKitEnabled, permissions, serverContext]);\r\n\r\n const {\r\n filterIndex,\r\n setFilterIndex,\r\n updateImage,\r\n backgroundBlurEnabled,\r\n toggleBackgroundBlur,\r\n changeBackgroundBlurLevel,\r\n backgroundBlurLevel,\r\n resultImage: resultFilterAndBlurImage,\r\n imagesWithFilter,\r\n getImagesWithFilter,\r\n isImageUpdated: isFilterAndBlurImageUpdated,\r\n isImageChangedWhenActive: isFilterAndBlurImageChangedWhenActive,\r\n } = useFilterAndBlur({\r\n dataService,\r\n // eslint-disable-next-line no-nested-ternary\r\n originalImage: editImageUrl ? '' : (filterBlurBaseImage ? filterBlurBaseImage.url : originalImage.url), // if editImageUrl is set, it means the image is from shutter stock which is not supported by adjust\r\n setLoadingStatus,\r\n initialFilter: filterBlurBaseImage ? filterBlurBaseImage.filter : null,\r\n initialBlur: filterBlurBaseImage ? filterBlurBaseImage.blur : null,\r\n isActive: currentView === ViewName.ImageAdjustView,\r\n });\r\n\r\n const {\r\n getSegmentations,\r\n generateBackground,\r\n drawColorBackground,\r\n imageUrlWithColoredBackground,\r\n imageUrlWithoutBackground, // the image url without background\r\n imageUrlWithGeneratedBackground,\r\n setImageUrlWithGeneratedBackground,\r\n getMaskValueAtPoint,\r\n segmentationMasks,\r\n setSelectedImageSrc,\r\n selectedImageSrc, // the image after user selected objects\r\n selectedMasks,\r\n setSelectedMasks,\r\n fetchSegmentationError,\r\n isFetchingSegmentations,\r\n maskValues,\r\n } = useBackgroundChange({\r\n dataService,\r\n perfMarker,\r\n logger,\r\n });\r\n\r\n const adPlacementResult = useAdPlacement({\r\n image: originalImage,\r\n permissions,\r\n setDataLoaded,\r\n logger,\r\n i18n,\r\n getSmartCroppings,\r\n setLoadingStatus,\r\n imageCroppingTasks,\r\n isImageFittingEnabled: finalImageFittingEnabled,\r\n dataService,\r\n });\r\n\r\n const {\r\n updateImage: updateAdPlacementImageInner,\r\n cropSettingsToUpdate,\r\n hasCropSettingsChanged,\r\n hasCroppingTask,\r\n requiredSizeInvalidRatioList,\r\n allViewErrorTip,\r\n } = adPlacementResult;\r\n\r\n const {\r\n saveImageCopy, uploadImageToFolder, saveImageWithBaseId, getImageById, uploadStockImage, saveImage, moveImageToFolder, addImageWithBaseIdToFolder,\r\n } = dataService;\r\n\r\n const folderIdNumber = useMemo(() =>\r\n (folderId && folderId !== ROOT_FOLDER_ID ? Number(folderId) : null), [folderId]);\r\n\r\n const replaceBackground = useCallback((backgroundChangedImage, needToSave) => {\r\n setLoadingStatus(true);\r\n if (needToSave) {\r\n // save the image to asset library first, since the image data is base64 which is not supported by filter and blur API\r\n uploadImageToFolder({\r\n imageData: backgroundChangedImage.url,\r\n folderId: folderIdNumber,\r\n }).then((res) => {\r\n logger.logTrace('edit image services: replace with single color background for image id', { imageId: res });\r\n getImageById({ imageId: res, isImageFittingEnabled: finalImageFittingEnabled }).then((image) => {\r\n updateImage(image).then(() => {\r\n setLoadingStatus(false);\r\n });\r\n setSavedBackgroundColorChangedImage([...savedBackgroundColorChangedImage, image.url]);\r\n setBackgroundChangedResult(image);\r\n setCurrentView(ViewName.ImageAdjustView);\r\n });\r\n });\r\n } else {\r\n logger.logTrace('edit image services: replace with generated background', { imageData: backgroundChangedImage.url });\r\n setBackgroundChangedResult(backgroundChangedImage);\r\n setCurrentView(ViewName.ImageAdjustView);\r\n updateImage(backgroundChangedImage).then(() => {\r\n setLoadingStatus(false);\r\n });\r\n }\r\n setImageUrlWithGeneratedBackground(null);\r\n }, [setImageUrlWithGeneratedBackground, uploadImageToFolder, folderIdNumber, logger, getImageById, finalImageFittingEnabled, updateImage, savedBackgroundColorChangedImage]);\r\n\r\n const isUnsavedStockImage = useMemo(() => !_.isEmpty(editImageUrl), [editImageUrl]);\r\n\r\n const isSavedStockImage = useMemo(() => _.get(originalImage, 'sourceType') === CSMLAssetSource.Shutterstock, [originalImage]);\r\n\r\n const isStockImage = useMemo(() => isUnsavedStockImage || isSavedStockImage, [isSavedStockImage, isUnsavedStockImage]);\r\n\r\n const isImageUpdated = useMemo(() => (\r\n originalImage && resultFilterAndBlurImage && (isFilterAndBlurImageUpdated || backgroundChangedResult)\r\n ), [originalImage, resultFilterAndBlurImage, isFilterAndBlurImageUpdated, backgroundChangedResult]);\r\n\r\n const cropImageAndGoBack = useCallback((id, backToLibraryPage) => {\r\n const { placementSettings } = cropSettingsToUpdate;\r\n if (hasCropSettingsChanged) {\r\n cropImage({\r\n imageId: id,\r\n placementSettings,\r\n }).then(() => {\r\n setLoadingStatus(false);\r\n if (backToLibraryPage) {\r\n navigation.gotoLibraryPage();\r\n } else {\r\n navigation.goBack();\r\n }\r\n });\r\n } else {\r\n setLoadingStatus(false);\r\n if (backToLibraryPage) {\r\n navigation.gotoLibraryPage();\r\n } else {\r\n navigation.goBack();\r\n }\r\n }\r\n }, [cropImage, cropSettingsToUpdate, hasCropSettingsChanged, navigation]);\r\n\r\n const onConfirmDialogSave = useCallback(() => {\r\n if (isImageUpdated) {\r\n // When the url is changed, need to update asset. Then save its crop changes if have.\r\n setLoadingStatus(true);\r\n saveImage({\r\n id: originalImage.id,\r\n type: originalImage.type,\r\n url: resultFilterAndBlurImage.url,\r\n })\r\n .then(() => {\r\n cropImageAndGoBack(originalImage.id);\r\n });\r\n } else {\r\n setLoadingStatus(true);\r\n cropImageAndGoBack(originalImage.id);\r\n }\r\n }, [cropImageAndGoBack, isImageUpdated, originalImage, resultFilterAndBlurImage, saveImage]);\r\n\r\n const saveImageDirectly = useCallback(() => {\r\n if (isUnsavedStockImage) {\r\n // When it's an unsaved stock image, upload it first. Then save its crop changes if have.\r\n setLoadingStatus(true);\r\n uploadStockImage({ stockImageId: imageId })\r\n .then((id) => {\r\n cropImageAndGoBack(id, true);\r\n });\r\n } else if (isImageUpdated || hasCropSettingsChanged) {\r\n setIsConfirmDialogOpen(true);\r\n } else {\r\n navigation.goBack();\r\n }\r\n }, [cropImageAndGoBack, hasCropSettingsChanged, imageId, isImageUpdated, isUnsavedStockImage, navigation, uploadStockImage]);\r\n\r\n const updateAdPlacementImage = useCallback(() => {\r\n if ((isImageUpdated || isFilterAndBlurImageChangedWhenActive) && resultFilterAndBlurImage.url !== originalImage.url) {\r\n const image = new Image();\r\n image.src = resultFilterAndBlurImage.url;\r\n image.onload = () => {\r\n updateAdPlacementImageInner({\r\n url: resultFilterAndBlurImage.url,\r\n width: image.width,\r\n height: image.height,\r\n originalWidth: image.width,\r\n originalHeight: image.height,\r\n });\r\n };\r\n } else if ((isImageUpdated || isFilterAndBlurImageChangedWhenActive) && resultFilterAndBlurImage.url === originalImage.url) {\r\n updateAdPlacementImageInner(originalImage);\r\n }\r\n }, [isImageUpdated, isFilterAndBlurImageChangedWhenActive, resultFilterAndBlurImage.url, originalImage, updateAdPlacementImageInner]);\r\n\r\n const saveBackgroundChangedResult = useCallback(() => {\r\n return new Promise((resolve) => {\r\n // image already saved in asset library, return directly\r\n if (backgroundChangedResult && savedBackgroundColorChangedImage.includes(backgroundChangedResult.url)) {\r\n logger.logTrace('edit image services: save single color background');\r\n resolve(backgroundChangedResult);\r\n // save background changed image to asset library\r\n } else if (backgroundChangedResult) {\r\n saveImageCopy({\r\n image: backgroundChangedResult,\r\n folderId: folderIdNumber,\r\n }).then((res) => {\r\n logger.logTrace('edit image services: save generated background for image id', { imageId: res, imageUrl: backgroundChangedResult.url });\r\n resolve({ id: res, url: backgroundChangedResult.url });\r\n });\r\n // no background changed image, return original image id\r\n } else {\r\n const baseImage = filterBlurBaseImage || originalImage;\r\n resolve(baseImage);\r\n }\r\n });\r\n }, [backgroundChangedResult, filterBlurBaseImage, folderIdNumber, logger, originalImage, saveImageCopy, savedBackgroundColorChangedImage]);\r\n\r\n const moveImageToFolderInner = useCallback((id) => {\r\n if (folderId && folderId !== ROOT_FOLDER_ID) {\r\n return getImageById({ imageId: id }).then((image) => {\r\n return moveImageToFolder({\r\n image,\r\n destFolderId: folderIdNumber,\r\n });\r\n });\r\n }\r\n return Promise.resolve();\r\n }, [folderId, folderIdNumber, getImageById, moveImageToFolder]);\r\n\r\n const saveAsCopy = useCallback(() => {\r\n if (isImageUpdated) {\r\n setLoadingStatus(true);\r\n // save background changed image to asset library first\r\n saveBackgroundChangedResult().then((res) => {\r\n // save the image with filter and blur\r\n if (resultFilterAndBlurImage && resultFilterAndBlurImage.url !== res.url) {\r\n const metaData = convertMetaData(resultFilterAndBlurImage);\r\n if (finalImageFittingEnabled) {\r\n addImageWithBaseIdToFolder({\r\n imageSrc: resultFilterAndBlurImage.url,\r\n baseId: Number(res.id),\r\n folderId: folderIdNumber,\r\n metaData: JSON.stringify(metaData),\r\n }).then((resInner) => {\r\n logger.logTrace('edit image services: save image as copy with baseId', { id: resInner, baseId: res.id });\r\n cropImageAndGoBack(resInner);\r\n });\r\n } else {\r\n saveImageWithBaseId({\r\n image: {\r\n url: resultFilterAndBlurImage.url,\r\n metaData,\r\n },\r\n baseId: res.id,\r\n }).then((inner) => {\r\n // currently MT doesn't support to save image with baseId to a folder, so move it to the folder\r\n logger.logTrace('edit image services: save image as copy with baseId', { id: inner, baseId: res.id });\r\n moveImageToFolderInner(inner).then(() => {\r\n // crop the image if needed\r\n cropImageAndGoBack(inner);\r\n });\r\n });\r\n }\r\n } else {\r\n const { id } = res || {};\r\n logger.logTrace('edit image services: save image as copy', { id });\r\n cropImageAndGoBack(res.id);\r\n }\r\n });\r\n } else {\r\n navigation.goBack();\r\n }\r\n }, [addImageWithBaseIdToFolder, cropImageAndGoBack, finalImageFittingEnabled, folderIdNumber, isImageUpdated, logger, moveImageToFolderInner, navigation, resultFilterAndBlurImage, saveBackgroundChangedResult, saveImageWithBaseId]);\r\n\r\n const disableSave = useMemo(() => (\r\n (!isUnsavedStockImage && !isImageUpdated && !hasCropSettingsChanged) || hasCroppingTask || (hasCropSettingsChanged && requiredSizeInvalidRatioList && requiredSizeInvalidRatioList.length > 0)\r\n ), [isUnsavedStockImage, isImageUpdated, hasCropSettingsChanged, hasCroppingTask, requiredSizeInvalidRatioList]);\r\n\r\n const saveButtonTooltip = useMemo(() => {\r\n let tooltip;\r\n if (disableSave && hasCropSettingsChanged && requiredSizeInvalidRatioList && requiredSizeInvalidRatioList.length > 0) {\r\n tooltip = allViewErrorTip;\r\n }\r\n\r\n return tooltip;\r\n }, [allViewErrorTip, disableSave, hasCropSettingsChanged, requiredSizeInvalidRatioList]);\r\n\r\n return {\r\n originalImage,\r\n resultImage: resultFilterAndBlurImage,\r\n currentView,\r\n setCurrentView,\r\n filterIndex,\r\n setFilterIndex,\r\n updateImage,\r\n backgroundBlurEnabled,\r\n toggleBackgroundBlur,\r\n changeBackgroundBlurLevel,\r\n backgroundBlurLevel,\r\n loadingStatus,\r\n initialAssetLoading,\r\n saveAsCopy,\r\n saveImageDirectly,\r\n imagesWithFilter,\r\n getImagesWithFilter,\r\n isImageUpdated,\r\n replaceBackground,\r\n isStockImage,\r\n disableSave,\r\n haveCroppingTasks: !_.isEmpty(imageCroppingTasks),\r\n isConfirmDialogOpen,\r\n setIsConfirmDialogOpen,\r\n onConfirmDialogSave,\r\n saveButtonTooltip,\r\n updateAdPlacementImage,\r\n ...adPlacementResult,\r\n\r\n // Change Background\r\n generateBackground,\r\n getSegmentations,\r\n drawColorBackground,\r\n imageUrlWithColoredBackground,\r\n imageUrlWithoutBackground,\r\n imageUrlWithGeneratedBackground,\r\n setImageUrlWithGeneratedBackground,\r\n getMaskValueAtPoint,\r\n segmentationMasks,\r\n setSelectedImageSrc,\r\n selectedImageSrc, // the image after user selected objects\r\n selectedMasks,\r\n setSelectedMasks,\r\n maskValues,\r\n fetchSegmentationError,\r\n isFetchingSegmentations,\r\n };\r\n};\r\n","import { useCallback, useEffect, useMemo, useState, useRef } from 'react';\r\n\r\nexport const useFilterAndBlur = ({\r\n dataService,\r\n originalImage,\r\n setLoadingStatus,\r\n initialFilter,\r\n initialBlur,\r\n isActive,\r\n}) => {\r\n const {\r\n imagesWithFilter,\r\n imagesWithFilterAndBlur,\r\n getImagesWithFilter,\r\n getImagesWithFilterAndBlur,\r\n } = dataService;\r\n\r\n const [filterIndex, setFilterIndex] = useState(0);\r\n const [backgroundBlurEnabled, setBackgroundBlurEnabled] = useState(false);\r\n const [imagesWithFilterAndBlurCached, setImagesWithFilterAndBlurCached] = useState([]);\r\n const [backgroundBlurLevel, setBackgroundBlurLevel] = useState(50);\r\n const [currentImage, setCurrentImage] = useState('');\r\n const [initialStateApplied, setInitialStateApplied] = useState(false);\r\n\r\n const initialStatusWhenActive = useRef();\r\n\r\n useEffect(() => {\r\n if (isActive) {\r\n initialStatusWhenActive.current = {\r\n filterIndex,\r\n backgroundBlurLevel,\r\n backgroundBlurEnabled,\r\n };\r\n } else {\r\n initialStatusWhenActive.current = null;\r\n }\r\n }, [isActive, filterIndex, backgroundBlurLevel, backgroundBlurEnabled]);\r\n\r\n useEffect(() => {\r\n if (imagesWithFilter && imagesWithFilter.length > 0 && !initialStateApplied && (initialFilter || initialBlur)) {\r\n if (initialFilter) {\r\n const index = imagesWithFilter.findIndex(image => image.filter === initialFilter);\r\n if (index !== -1) {\r\n setFilterIndex(index);\r\n }\r\n }\r\n if (initialBlur) {\r\n setBackgroundBlurEnabled(true);\r\n setBackgroundBlurLevel(initialBlur);\r\n getImagesWithFilterAndBlur(originalImage, initialBlur);\r\n }\r\n setInitialStateApplied(true);\r\n }\r\n }, [getImagesWithFilterAndBlur, imagesWithFilter, imagesWithFilterAndBlur, initialBlur, initialFilter, initialStateApplied, originalImage]);\r\n\r\n // update image when image changes. e.g., background removal\r\n const updateImage = useCallback((newImage) => {\r\n setCurrentImage(newImage.url);\r\n if (backgroundBlurEnabled) {\r\n getImagesWithFilter(newImage.url);\r\n return getImagesWithFilterAndBlur(newImage.url, backgroundBlurLevel);\r\n }\r\n setImagesWithFilterAndBlurCached([]);\r\n return getImagesWithFilter(newImage.url);\r\n }, [backgroundBlurEnabled, backgroundBlurLevel, getImagesWithFilter, getImagesWithFilterAndBlur]);\r\n\r\n const resultImage = useMemo(() => {\r\n if (backgroundBlurEnabled && imagesWithFilterAndBlurCached.length) {\r\n return imagesWithFilterAndBlurCached[filterIndex];\r\n } else if (imagesWithFilter && imagesWithFilter.length) {\r\n return imagesWithFilter[filterIndex];\r\n }\r\n\r\n return ({\r\n filter: null,\r\n url: originalImage,\r\n });\r\n }, [backgroundBlurEnabled, filterIndex, imagesWithFilter, imagesWithFilterAndBlurCached, originalImage]);\r\n\r\n const getImagesWithFilterImp = useCallback((image) => {\r\n setLoadingStatus(true);\r\n getImagesWithFilter(image).finally(() => {\r\n setLoadingStatus(false);\r\n });\r\n }, [getImagesWithFilter, setLoadingStatus]);\r\n\r\n useEffect(() => {\r\n if (imagesWithFilterAndBlur) {\r\n setImagesWithFilterAndBlurCached(imagesWithFilterAndBlur);\r\n }\r\n }, [imagesWithFilterAndBlur]);\r\n\r\n useEffect(() => {\r\n if (originalImage) {\r\n setCurrentImage(originalImage);\r\n setLoadingStatus(true);\r\n getImagesWithFilter(originalImage).finally(() => {\r\n setLoadingStatus(false);\r\n });\r\n }\r\n }, [getImagesWithFilter, originalImage, setLoadingStatus]);\r\n\r\n const toggleBackgroundBlur = useCallback((enableBackgroundBlur) => {\r\n if (enableBackgroundBlur) {\r\n if (!imagesWithFilterAndBlurCached.length) {\r\n setLoadingStatus(true);\r\n getImagesWithFilterAndBlur(currentImage, backgroundBlurLevel).finally(() => {\r\n setLoadingStatus(false);\r\n });\r\n }\r\n }\r\n setBackgroundBlurEnabled(enableBackgroundBlur);\r\n }, [backgroundBlurLevel, currentImage, getImagesWithFilterAndBlur, imagesWithFilterAndBlurCached.length, setLoadingStatus]);\r\n\r\n const changeBackgroundBlurLevel = useCallback((blurLevel = 50) => {\r\n setLoadingStatus(true);\r\n setBackgroundBlurLevel(blurLevel);\r\n getImagesWithFilterAndBlur(currentImage, blurLevel).finally(() => {\r\n setLoadingStatus(false);\r\n });\r\n }, [currentImage, getImagesWithFilterAndBlur, setLoadingStatus]);\r\n\r\n const isImageUpdated = useMemo(() => {\r\n if (initialBlur && initialFilter && initialStateApplied) {\r\n return !backgroundBlurEnabled || initialBlur !== backgroundBlurLevel || initialFilter !== imagesWithFilter[filterIndex].filter;\r\n } else if (initialBlur && initialStateApplied) {\r\n return !backgroundBlurEnabled || initialBlur !== backgroundBlurLevel || filterIndex !== 0;\r\n } else if (initialFilter && initialStateApplied) {\r\n return initialFilter !== imagesWithFilter[filterIndex].filter || backgroundBlurEnabled;\r\n }\r\n return resultImage && resultImage.url !== originalImage;\r\n }, [backgroundBlurEnabled, backgroundBlurLevel, filterIndex, imagesWithFilter, initialBlur, initialFilter, initialStateApplied, originalImage, resultImage]);\r\n\r\n // check if image is changed when current view is active\r\n // maybe is same as original image but different from the one when user landed on this view\r\n const isImageChangedWhenActive = useMemo(\r\n () =>\r\n initialStatusWhenActive.current &&\r\n (initialStatusWhenActive.current.filterIndex !== filterIndex\r\n || initialStatusWhenActive.current.backgroundBlurLevel !== backgroundBlurLevel\r\n || initialStatusWhenActive.current.backgroundBlurEnabled !== backgroundBlurEnabled),\r\n [backgroundBlurEnabled, backgroundBlurLevel, filterIndex]\r\n );\r\n\r\n return {\r\n filterIndex,\r\n setFilterIndex,\r\n updateImage,\r\n backgroundBlurEnabled,\r\n toggleBackgroundBlur,\r\n changeBackgroundBlurLevel,\r\n backgroundBlurLevel,\r\n resultImage,\r\n imagesWithFilter,\r\n getImagesWithFilter: getImagesWithFilterImp,\r\n isImageUpdated,\r\n isImageChangedWhenActive,\r\n };\r\n};\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nexport const useStyles = makeStyles({\r\n imagePreviewView: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'flex-start',\r\n ...shorthands.margin('12px'),\r\n ...shorthands.gap('32px'),\r\n ...shorthands.flex(1),\r\n\r\n '& .image-preview-image-wrapper': {\r\n width: '598px',\r\n '& img': {\r\n width: '100%',\r\n height: 'auto',\r\n },\r\n },\r\n\r\n '& .image-preview-button-wrapper': {\r\n boxShadow: '0 0 2px rgba(0,0,0,0.12), 0 2px 4px rgba(0,0,0,0.14)',\r\n ...shorthands.borderRadius('6px'),\r\n\r\n '& .button-item': {\r\n ...shorthands.border('none'),\r\n ...shorthands.padding('12px'),\r\n\r\n '&.first-button-item': {\r\n borderTopLeftRadius: '6px',\r\n borderBottomLeftRadius: '6px',\r\n },\r\n\r\n '&.last-button-item': {\r\n borderTopRightRadius: '6px',\r\n borderBottomRightRadius: '6px',\r\n },\r\n },\r\n },\r\n\r\n '& .image-preview-notification-wrapper': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n backgroundColor: '#FFFFFF',\r\n boxShadow: '0 0 2px rgba(0,0,0,0.12), 0 2px 4px rgba(0,0,0,0.14)',\r\n ...shorthands.gap('4px'),\r\n ...shorthands.borderRadius('6px'),\r\n ...shorthands.padding('12px'),\r\n },\r\n },\r\n});\r\n","/* eslint-disable arrow-body-style */\r\nimport _ from 'underscore';\r\nimport React, { useCallback, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n Image,\r\n Button,\r\n mergeClasses,\r\n} from '@fluentui/react-components';\r\nimport { Dismiss20Regular } from '@fluentui/react-icons';\r\n\r\nimport { useStyles } from './style';\r\n\r\nexport const ImagePreviewView = ({\r\n imageView,\r\n url,\r\n buttonsConfig,\r\n buttonsRef,\r\n notificationConfig,\r\n}) => {\r\n const classes = useStyles();\r\n\r\n const buttonNum = buttonsConfig.length;\r\n\r\n const buttonItem = useCallback(({ config, index, key }) => {\r\n const {\r\n onClick,\r\n icon: Icon,\r\n disabled,\r\n text,\r\n } = config;\r\n\r\n const isFirstButton = index === 0;\r\n const isLastButton = index === buttonNum - 1;\r\n\r\n return (\r\n }\r\n disabled={disabled}\r\n shape=\"square\"\r\n >\r\n {text}\r\n \r\n );\r\n }, [buttonNum]);\r\n\r\n const notificationContent = useMemo(() => {\r\n const {\r\n icon,\r\n content,\r\n onDismiss,\r\n dismissAriaLabel,\r\n } = notificationConfig || {};\r\n\r\n return (\r\n
    \r\n {icon}\r\n {content}\r\n {\r\n _.isFunction(onDismiss) &&\r\n }\r\n appearance=\"subtle\"\r\n onClick={onDismiss}\r\n aria-label={dismissAriaLabel}\r\n />\r\n }\r\n
    \r\n );\r\n }, [notificationConfig]);\r\n\r\n return (\r\n
    \r\n {\r\n buttonNum > 0 &&\r\n
    \r\n {\r\n buttonsConfig.map((config, index) => (\r\n buttonItem({ config, index, key: 'image-preview-button' })\r\n ))\r\n }\r\n
    \r\n }\r\n
    \r\n {\r\n imageView ||\r\n \r\n }\r\n
    \r\n {\r\n notificationConfig && notificationContent\r\n }\r\n
    \r\n );\r\n};\r\n\r\nImagePreviewView.propTypes = {\r\n imageView: PropTypes.shape({}),\r\n url: PropTypes.string,\r\n buttonsConfig: PropTypes.arrayOf(PropTypes.shape({})),\r\n buttonsRef: PropTypes.shape({}),\r\n notificationConfig: PropTypes.shape({}),\r\n};\r\n\r\nImagePreviewView.defaultProps = {\r\n imageView: undefined,\r\n url: undefined,\r\n buttonsConfig: [],\r\n buttonsRef: undefined,\r\n notificationConfig: undefined,\r\n};\r\n","import { makeResetStyles, shorthands, tokens } from '@fluentui/react-components';\r\n\r\nexport const useStyles = makeResetStyles({\r\n display: 'flex',\r\n flexDirection: 'row',\r\n '& .filters-card': {\r\n width: '320px',\r\n '& .filters-list': {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n justifyContent: 'space-between',\r\n paddingLeft: '4px',\r\n paddingRight: '4px',\r\n paddingTop: '8px',\r\n paddingBottom: '8px',\r\n '& .filter-wrapper': {\r\n width: '80px',\r\n height: '100px',\r\n ...shorthands.border('none'),\r\n ...shorthands.padding('0'),\r\n backgroundColor: '#fff',\r\n '& img': {\r\n width: '100%',\r\n height: '80px',\r\n ...shorthands.borderRadius('8px'),\r\n objectFit: 'cover',\r\n },\r\n '&.selected': {\r\n '& img': {\r\n ...shorthands.outline('2px', 'solid', tokens.colorBrandBackground),\r\n outlineOffset: '1px',\r\n ...shorthands.borderRadius('8px'),\r\n },\r\n },\r\n '& .filter-name': {\r\n fontSize: '10px',\r\n textAlign: 'center',\r\n lineHeight: '14px',\r\n fontWeight: 600,\r\n ...shorthands.gap('4px'),\r\n },\r\n },\r\n },\r\n },\r\n '& .blur-card': {\r\n width: '320px',\r\n marginTop: '12px',\r\n '& .blur-header': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n height: '36px',\r\n '& svg': {\r\n marginRight: '10px',\r\n marginLeft: '8px',\r\n },\r\n },\r\n '& .blur-slider': {\r\n width: '100%',\r\n '& .blur-slider-value-wrapper': {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n fontSize: '14px',\r\n lineHeight: '20px',\r\n '& .blur-slider-label': {\r\n marginLeft: '8px',\r\n },\r\n '& .blur-slider-value': {\r\n marginRight: '8px',\r\n },\r\n },\r\n },\r\n '& .blur-slider-control': {\r\n width: '100%',\r\n },\r\n '& .blur-switch': {\r\n '&.fui-Switch input': {\r\n width: '100%',\r\n height: '100%',\r\n },\r\n },\r\n },\r\n});\r\n","/* eslint-disable arrow-body-style */\r\nimport _ from 'underscore';\r\nimport React, { useCallback, useMemo, useRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport {\r\n Card,\r\n CardHeader,\r\n Slider,\r\n Switch,\r\n Text,\r\n mergeClasses,\r\n} from '@fluentui/react-components';\r\nimport { MessageBar, MessageBarBody } from '@fluentui/react-message-bar';\r\nimport { VideoBackgroundEffect20Regular } from '@fluentui/react-icons';\r\n\r\nimport { ImagePreviewView } from '../image-preview-view';\r\nimport { useStyles } from './style';\r\n\r\nexport const ImageAdjustView = ({\r\n resultImage,\r\n toggleBackgroundBlur,\r\n setFilterIndex,\r\n changeBackgroundBlurLevel,\r\n imagesWithFilter,\r\n i18n,\r\n backgroundBlurEnabled,\r\n backgroundBlurLevel,\r\n goToBackgroundChangeView,\r\n filterIndex,\r\n isAIGCRegionRestricted,\r\n notificationApi,\r\n permissions,\r\n}) => {\r\n const imageAdjustViewStyles = useStyles();\r\n const isAdsStudioBackgroundChangeEnabled = _.get(permissions, ['dynamic', 'AdsStudioBackgroundChange'], false);\r\n\r\n const buttonsConfig = useMemo(() => (isAdsStudioBackgroundChangeEnabled ? [{\r\n text: i18n.getString(_TL_('Replace background')),\r\n icon: VideoBackgroundEffect20Regular,\r\n onClick: () => {\r\n if (isAIGCRegionRestricted) {\r\n notificationApi.showWarning(i18n.getString(_TL_('This feature isn\\'t available in all markets.')));\r\n } else {\r\n goToBackgroundChangeView();\r\n }\r\n },\r\n }] : []), [goToBackgroundChangeView, i18n, isAIGCRegionRestricted, notificationApi, isAdsStudioBackgroundChangeEnabled]);\r\n\r\n const timerRef = useRef(null);\r\n\r\n const handleChangeBlur = useCallback((event, data) => {\r\n if (timerRef.current) {\r\n clearTimeout(timerRef.current);\r\n }\r\n\r\n timerRef.current = setTimeout(() => {\r\n changeBackgroundBlurLevel(data.value);\r\n }, 300);\r\n }, [changeBackgroundBlurLevel]);\r\n\r\n return (\r\n
    \r\n
    \r\n \r\n {i18n.getString(_TL_('Filters'))}}\r\n />\r\n {\r\n imagesWithFilter && imagesWithFilter.length > 1 &&\r\n
    \r\n {\r\n imagesWithFilter.map((image, index) => (\r\n setFilterIndex(index)}\r\n className={classnames('filter-wrapper', filterIndex === index && 'selected')}\r\n aria-selected={filterIndex === index}\r\n role=\"option\"\r\n aria-label={image.filter}\r\n >\r\n \"filter\"\r\n
    {image.filter}
    \r\n \r\n ))\r\n }\r\n
    \r\n }\r\n {\r\n imagesWithFilter && imagesWithFilter.length === 1 &&\r\n \r\n \r\n {i18n.getString(_TL_('No filters available'))}\r\n \r\n \r\n }\r\n
    \r\n \r\n \r\n \r\n {i18n.getString(_TL_('Background blur'))}\r\n
    }\r\n action={ { toggleBackgroundBlur(!backgroundBlurEnabled); }}\r\n label={backgroundBlurEnabled ? i18n.getString(_TL_('On')) : i18n.getString(_TL_('Off'))}\r\n aria-label={i18n.getString(_TL_('Background blur'))}\r\n />}\r\n />\r\n {\r\n backgroundBlurEnabled &&\r\n
    \r\n
    \r\n
    {i18n.getString(_TL_('Blur amount'))}
    \r\n
    {backgroundBlurLevel}
    \r\n
    \r\n \r\n
    \r\n }\r\n \r\n
    \r\n {\r\n resultImage && resultImage.url &&\r\n \r\n }\r\n
    \r\n );\r\n};\r\n\r\nImageAdjustView.propTypes = {\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({}).isRequired,\r\n }).isRequired,\r\n resultImage: PropTypes.shape({\r\n url: PropTypes.string,\r\n }),\r\n toggleBackgroundBlur: PropTypes.func,\r\n setFilterIndex: PropTypes.func,\r\n changeBackgroundBlurLevel: PropTypes.func,\r\n imagesWithFilter: PropTypes.arrayOf(PropTypes.shape({\r\n id: PropTypes.string,\r\n url: PropTypes.string,\r\n filter: PropTypes.string,\r\n })),\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }),\r\n backgroundBlurEnabled: PropTypes.bool,\r\n backgroundBlurLevel: PropTypes.number,\r\n goToBackgroundChangeView: PropTypes.func,\r\n isAIGCRegionRestricted: PropTypes.bool,\r\n notificationApi: PropTypes.shape({\r\n showWarning: PropTypes.func,\r\n }),\r\n};\r\n\r\nImageAdjustView.defaultProps = {\r\n resultImage: null,\r\n toggleBackgroundBlur: () => {},\r\n setFilterIndex: () => {},\r\n changeBackgroundBlurLevel: () => {},\r\n imagesWithFilter: [],\r\n i18n: {},\r\n backgroundBlurEnabled: false,\r\n backgroundBlurLevel: 0,\r\n goToBackgroundChangeView: () => {},\r\n isAIGCRegionRestricted: false,\r\n notificationApi: {},\r\n};\r\n","// import backgroundImg from '../media/updateBg.png';\r\nimport { makeStyles, shorthands, tokens } from '@fluentui/react-components';\r\n\r\nexport const usePlacementListStyles = makeStyles({\r\n placementListView: {\r\n marginLeft: '12px',\r\n },\r\n header: {\r\n marginTop: '4px',\r\n marginBottom: '16px',\r\n },\r\n showRequiredOnlyCheckbox: {\r\n height: '32px',\r\n },\r\n // adControl: {\r\n // display: 'flex',\r\n // alignItems: 'center',\r\n // justifyContent: 'space-between',\r\n // marginRight: '24px',\r\n // },\r\n // adTypeControl: {\r\n // display: 'flex',\r\n // alignItems: 'center',\r\n // margin: '24px 0',\r\n // },\r\n // controlBtn: {\r\n // padding: '10px 0',\r\n // fontFamily: 'Segoe UI',\r\n // fontWeight: 400,\r\n // fontSize: 14,\r\n // lineHeight: '20px',\r\n // color: palette.neutralPrimary,\r\n // background: palette.white,\r\n // border: 'none',\r\n // marginRight: 24,\r\n // },\r\n // activeBtn: {\r\n // borderBottom: `2px solid ${palette.blue}`,\r\n // fontWeight: 600,\r\n // },\r\n // errorInfoBox: {\r\n // margin: '-16px 24px 8px 0',\r\n // background: '#FDE7E9',\r\n // borderRadius: '6px',\r\n // overflow: 'hidden',\r\n // },\r\n errorIcon: {\r\n color: '#A80000',\r\n },\r\n // errorInfo: {\r\n // fontFamily: 'Segoe UI',\r\n // fontWeight: 400,\r\n // fontSize: 12,\r\n // lineHeight: '16px',\r\n // color: palette.neutralPrimary,\r\n // },\r\n // overlay: {\r\n // position: 'absolute',\r\n // top: 0,\r\n // bottom: 0,\r\n // left: 0,\r\n // right: 0,\r\n // zIndex: 1000,\r\n // },\r\n // toggleContainer: {\r\n // display: 'flex',\r\n // alignItems: 'flex-start',\r\n // },\r\n adPreviewGridLayoutContainer: {\r\n gridTemplateColumns: 'repeat(auto-fill, minmax(674px, 0.7fr))',\r\n },\r\n});\r\n\r\nexport const usePlacementContaierStyles = makeStyles({\r\n placementContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n minWidth: '650px',\r\n minHeight: '490px',\r\n width: '100%',\r\n height: '100%',\r\n backgroundColor: tokens.white,\r\n boxShadow: '0px 2px 4px 0px rgba(0, 0, 0, 0.14), 0px 0px 2px 0px rgba(0, 0, 0, 0.12)',\r\n ...shorthands.borderRadius('4px'),\r\n },\r\n containerHeader: {\r\n ...shorthands.padding('16px', '16px', '0px', '16px'),\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n },\r\n containerTitle: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n previewWrapper: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n ...shorthands.padding('4px'),\r\n ...shorthands.borderRadius('4px'),\r\n backgroundColor: tokens.colorNeutralBackground5,\r\n fontSize: '12px',\r\n fontWeight: 600,\r\n lineHeight: '16px',\r\n },\r\n ratio: {\r\n marginLeft: '4px',\r\n },\r\n previewType: {\r\n marginLeft: '4px',\r\n },\r\n placementBox: {\r\n ...shorthands.margin('auto'),\r\n },\r\n requireBox: {\r\n marginLeft: '4px',\r\n ...shorthands.padding('4px'),\r\n ...shorthands.borderRadius('4px'),\r\n fontSize: '12px',\r\n fontWeight: 600,\r\n lineHeight: '16px',\r\n color: tokens.colorNeutralForeground3,\r\n backgroundColor: tokens.colorNeutralBackground5,\r\n },\r\n cropButton: {\r\n '&.fui-Button': {\r\n width: '24px',\r\n height: '24px',\r\n ...shorthands.border('1px', 'solid', tokens.colorNeutralStroke1),\r\n ...shorthands.borderRadius('4px'),\r\n ...shorthands.padding('0px'),\r\n minWidth: '24px',\r\n },\r\n },\r\n errorIcon: {\r\n fontSize: '16px',\r\n lineHeight: '16px',\r\n marginLeft: '10px',\r\n color: '#A80000',\r\n },\r\n // errorContainer: {\r\n // border: `1px solid ${palette.orange}`,\r\n // },\r\n // errRequireBox: {\r\n // background: palette.orange,\r\n // },\r\n // errRequireText: {\r\n // color: palette.white,\r\n // },\r\n minSize: {\r\n ...shorthands.margin('12px', 'auto'),\r\n fontFamily: 'Segoe UI',\r\n fontWeight: 400,\r\n fontSize: '12px',\r\n lineHeight: '16px',\r\n color: '#D83B01',\r\n },\r\n adPreviewComponentContainer: {\r\n minWidth: '650px',\r\n minHeight: '490px',\r\n animationDuration: '0.3s',\r\n animationTimingFunction: 'linear',\r\n animationName: [{\r\n from: {\r\n opacity: 0,\r\n },\r\n to: {\r\n opacity: 1,\r\n },\r\n }],\r\n boxSizing: 'border-box',\r\n marginBottom: '24px',\r\n marginRight: '24px',\r\n },\r\n});\r\n\r\nexport const getEditingModalStyles = (components, { palette = {} } = {}) => ({\r\n overlay: {\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n bottom: 0,\r\n right: 0,\r\n zIndex: 99,\r\n background: 'rgba(255, 255, 255, 0.4)',\r\n },\r\n container: {\r\n position: 'absolute',\r\n top: '50%',\r\n left: '50%',\r\n transform: 'translate(-50%, -50%)',\r\n background: palette.white,\r\n borderRadius: '6px',\r\n boxShadow: '0px 4.8px 14.4px rgba(0, 0, 0, 0.18), 0px 25.6px 57.6px rgba(0, 0, 0, 0.22)',\r\n boxSizing: 'border-box',\r\n zIndex: 100,\r\n animation: 'fadeIn 0.3s linear',\r\n overflow: 'scroll',\r\n maxHeight: '100%',\r\n maxWidth: '100%',\r\n },\r\n fadeOut: {\r\n animation: 'fadeOut 0.3s linear',\r\n },\r\n hide: {\r\n opacity: 0,\r\n transition: 'all 0.3s linear',\r\n },\r\n '@global': {\r\n '@keyframes fadeIn': {\r\n from: {\r\n opacity: 0,\r\n width: 600,\r\n height: 300,\r\n },\r\n to: {\r\n opacity: 1,\r\n width: 1212,\r\n height: 650,\r\n },\r\n },\r\n '@keyframes fadeOut': {\r\n from: {\r\n opacity: 1,\r\n width: 1212,\r\n height: 650,\r\n },\r\n to: {\r\n opacity: 0,\r\n width: 600,\r\n height: 300,\r\n },\r\n },\r\n },\r\n closeIcon: {\r\n position: 'absolute',\r\n top: 16,\r\n right: 16,\r\n color: 'rgb(50, 49, 48)',\r\n },\r\n placementTitle: {\r\n marginTop: 32,\r\n marginLeft: 24,\r\n fontFamily: 'Segoe UI',\r\n fontWeight: 600,\r\n fontSize: 20,\r\n lineHeight: '27px',\r\n color: palette.neutralPrimary,\r\n },\r\n placementDesc: {\r\n marginTop: 16,\r\n marginLeft: 24,\r\n fontFamily: 'Segoe UI',\r\n fontWeight: 400,\r\n fontSize: 14,\r\n lineHeight: '20px',\r\n color: palette.neutralPrimary,\r\n },\r\n contentContainer: {\r\n marginTop: 7,\r\n marginLeft: 24,\r\n marginRight: 24,\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n previewContainer: {\r\n width: 650,\r\n height: 444,\r\n borderRadius: '6px',\r\n background: palette.neutralLighter,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n marginLeft: 54,\r\n },\r\n footContainer: {\r\n marginTop: 39,\r\n padding: '16px 32px',\r\n width: '100%',\r\n boxSizing: 'border-box',\r\n borderTop: `1px solid ${palette.neutralLight}`,\r\n },\r\n cancelButton: {\r\n marginLeft: 8,\r\n },\r\n});\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\n\r\nimport { ErrorCircleFilled, Crop20Regular, Image16Regular } from '@fluentui/react-icons';\r\nimport { Button, mergeClasses } from '@fluentui/react-components';\r\nimport { TooltipHost } from '@bingads-webui-react/fabric-control';\r\n\r\nimport { AdPreviewPlacementContainerBase } from '@bingads-webui-campaign-react/unified-ad-preview-library-cmui';\r\n\r\nimport { usePlacementContaierStyles } from './styles';\r\n\r\nconst tooltipProps = {\r\n maxWidth: '200px',\r\n};\r\n\r\nexport const PlacementContainer = ({\r\n aspectRatioUIString,\r\n previewTypeString,\r\n minSize,\r\n isRequired,\r\n isValid,\r\n onCrop,\r\n children, // the preview content\r\n i18n,\r\n}) => {\r\n const classes = usePlacementContaierStyles();\r\n const onRenderHeader = () => (\r\n <>\r\n
    \r\n
    \r\n \r\n
    {aspectRatioUIString}
    \r\n
    {i18n.getString(previewTypeString)}
    \r\n
    \r\n {\r\n isRequired &&\r\n
    \r\n {i18n.getString(_TL_('Required'))}\r\n
    \r\n }\r\n {\r\n !isValid &&\r\n \r\n \r\n \r\n }\r\n
    \r\n \r\n \r\n \r\n \r\n );\r\n\r\n const onRenderFooter = () => !isValid && (\r\n
    \r\n {i18n.getString(_TL_('Minimum: {{width}} x {{height}} pixels'), {\r\n width: minSize[0],\r\n height: minSize[1],\r\n })}\r\n
    \r\n );\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nPlacementContainer.propTypes = {\r\n aspectRatioUIString: PropTypes.string.isRequired,\r\n previewTypeString: PropTypes.string.isRequired,\r\n minSize: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n isRequired: PropTypes.bool,\r\n isValid: PropTypes.bool,\r\n onCrop: PropTypes.func.isRequired,\r\n children: PropTypes.node.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n};\r\n\r\nPlacementContainer.defaultProps = {\r\n isRequired: false,\r\n isValid: true,\r\n};\r\n","import React from 'react';\r\n\r\nimport {\r\n MenuButton,\r\n MenuItem,\r\n Menu,\r\n MenuList,\r\n MenuTrigger,\r\n MenuPopover,\r\n makeStyles,\r\n shorthands,\r\n} from '@fluentui/react-components';\r\nimport { CSMLAdType } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n\r\nconst adTypeList = [CSMLAdType.PMax, CSMLAdType.MMA, CSMLAdType.Audience, CSMLAdType.ImageExtension];\r\nconst adTypeStrings = {\r\n [CSMLAdType.PMax]: _TL_('Performance Max'),\r\n [CSMLAdType.MMA]: _TL_('Multimedia ads'),\r\n [CSMLAdType.Audience]: _TL_('Audience ads'),\r\n [CSMLAdType.ImageExtension]: _TL_('Image extensions'),\r\n};\r\n\r\nconst useStyles = makeStyles({\r\n button: {\r\n '&.fui-Button': {\r\n ...shorthands.border('none'),\r\n },\r\n },\r\n});\r\n\r\n\r\nexport const AdTypeControl = ({ adType, onChange, i18n }) => {\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n \r\n {i18n.getString(adTypeStrings[adType])}\r\n \r\n \r\n \r\n {\r\n adTypeList.map(type => (\r\n onChange(type)}\r\n >\r\n {i18n.getString(adTypeStrings[type])}\r\n \r\n ))\r\n }\r\n \r\n \r\n \r\n );\r\n};\r\n","import React, { useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { Checkbox, mergeClasses } from '@fluentui/react-components';\r\n\r\nimport {\r\n // ClarityTags,\r\n // useClarityTags,\r\n sizeValidForRatio,\r\n getPlacementConfig,\r\n AdsStudioSpinner,\r\n} from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n// import { Alert } from '@bingads-webui-react/alert';\r\n// import { HelpButton } from '@bingads-webui-react/help-popup';\r\n// import { Glyphicon } from '@bingads-webui-react/primitive';\r\n// import { notificationApi } from '@bingads-webui-campaign/notification-center';\r\n\r\nimport {\r\n AdPreviewGridLayout,\r\n} from '@bingads-webui-campaign-react/unified-ad-preview-library-cmui';\r\n\r\nimport { PlacementContainer } from './placement-container';\r\nimport { AdTypeControl } from './ad-type-control';\r\nimport { usePlacementListStyles } from './styles';\r\n\r\n// import { PlacementEditingModal } from './placement-editing-modal';\r\n// import { AssetLibraryPlacementContainer } from './placement-container';\r\n// import { ImageCropPanel } from './image-crop-panel';\r\n// import { UpdateConfirmDialog } from './update-confim-dialog';\r\n// import { getPageStyles } from './styles';\r\n\r\nexport const AdPlacementListView = ({\r\n placementList,\r\n firstImage,\r\n onEditPlacement,\r\n adType,\r\n showRequiredOnly,\r\n previewTexts,\r\n i18n,\r\n switchAdType,\r\n switchShowRequiredOnly,\r\n}) => {\r\n const classes = usePlacementListStyles();\r\n // render a placement\r\n const onRenderPlacement = useCallback((placement, AdPlacementComponent) => {\r\n const { placementMeta } = placement || {};\r\n const { imageMeta, imageCropping } = firstImage || {};\r\n\r\n if (!placementMeta || !imageMeta) {\r\n return null;\r\n }\r\n\r\n const placementConfigList = getPlacementConfig(adType);\r\n const placementConfig = placementConfigList[placementMeta.placementType];\r\n\r\n // hide non-required placements if showRequiredOnly is true\r\n if (showRequiredOnly && !placementConfig.isRequired) {\r\n return null;\r\n }\r\n\r\n const isValid = sizeValidForRatio(placementMeta.minSize, imageCropping || {\r\n SourceX: 0, SourceY: 0, SourceWidth: imageMeta.originalWidth, SourceHeight: imageMeta.originalHeight,\r\n });\r\n\r\n return (\r\n onEditPlacement({ placement, ...placementConfig })}\r\n i18n={i18n}\r\n key={placementMeta.placementType}\r\n >\r\n \r\n \r\n );\r\n }, [adType, firstImage, i18n, onEditPlacement, previewTexts, showRequiredOnly]);\r\n\r\n return (\r\n placementList && placementList.length > 0 ?\r\n
    \r\n
    \r\n \r\n { switchShowRequiredOnly(data.checked); }}\r\n className={classes.showRequiredOnlyCheckbox}\r\n />\r\n
    \r\n
    \r\n (\r\n \r\n )}\r\n gridLayoutContainerClassName={classes.adPreviewGridLayoutContainer}\r\n />\r\n
    \r\n
    : null\r\n // {\r\n // showUIBlocker &&\r\n // \r\n // \r\n // \r\n // }\r\n // : null\r\n );\r\n};\r\n\r\nAdPlacementListView.propTypes = {\r\n placementList: PropTypes.arrayOf(PropTypes.shape({})),\r\n firstImage: PropTypes.shape({}),\r\n imageInfo: PropTypes.shape({}),\r\n onEditPlacement: PropTypes.func.isRequired,\r\n adType: PropTypes.string.isRequired,\r\n showRequiredOnly: PropTypes.bool.isRequired,\r\n previewTexts: PropTypes.shape({}).isRequired,\r\n i18n: PropTypes.shape({}).isRequired,\r\n};\r\n\r\nAdPlacementListView.defaultProps = {\r\n firstImage: null,\r\n imageInfo: null,\r\n placementList: [],\r\n};\r\n","import { makeResetStyles, shorthands, tokens } from '@fluentui/react-components';\r\n\r\nexport const useStyles = makeResetStyles({\r\n display: 'flex',\r\n flexDirection: 'row',\r\n height: '100%',\r\n width: '100%',\r\n ...shorthands.overflow('hidden'),\r\n '& .card': {\r\n height: 'fit-content',\r\n ...shorthands.padding('16px', '16px', '32px', '16px'),\r\n },\r\n '& .button': {\r\n paddingLeft: '0px',\r\n },\r\n '& .placement-preview-text-wrapper': {\r\n marginTop: '8px',\r\n marginBottom: '8px',\r\n },\r\n '& .placement-preview-text': {\r\n display: 'flex',\r\n fontSize: '12px',\r\n lineHeight: '16px',\r\n fontWeight: 600,\r\n color: tokens.colorNeutralForeground1,\r\n ...shorthands.padding('4px'),\r\n ...shorthands.gap('2px'),\r\n backgroundColor: tokens.colorNeutralBackground5,\r\n ...shorthands.borderRadius('4px'),\r\n width: 'fit-content',\r\n },\r\n});\r\n","import React, { useCallback, useState, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport {\r\n Button,\r\n Card,\r\n CardHeader,\r\n mergeClasses,\r\n} from '@fluentui/react-components';\r\nimport { ArrowLeft16Regular, Image16Regular, Checkmark20Regular, Dismiss20Regular } from '@fluentui/react-icons';\r\n\r\nimport { AdPreviewSinglePlacementLayout } from '@bingads-webui-campaign-react/unified-ad-preview-library-cmui';\r\nimport { ImageCropWithBoundingBox } from '@bingads-webui-campaign-react/image-crop-with-bounding-box';\r\n\r\nimport { ImagePreviewView } from '../image-preview-view';\r\nimport { useStyles } from './style';\r\n\r\nexport const PlacementEditView = ({\r\n placement,\r\n aspectRatioUIString,\r\n previewTypeString,\r\n adType,\r\n maxCropBox,\r\n previewImage,\r\n previewTexts,\r\n onSave,\r\n onCancel,\r\n i18n,\r\n logger,\r\n goToPlacementListView,\r\n}) => {\r\n const {\r\n placementMeta,\r\n placementCropping, // for single image placement\r\n images, // for multi-image placement\r\n } = placement || {};\r\n\r\n const [curPlacementCropping, setCurPlacementCropping]\r\n = useState(() => placementCropping || (images && images[0] && images[0].placementCropping));\r\n\r\n const handleCropSettingsChanged = useCallback((settings) => {\r\n if (!_.isEqual(settings, curPlacementCropping)) {\r\n setCurPlacementCropping(settings);\r\n logger.logTrace('edit placement: crop settings changed', {\r\n adType,\r\n placementType: placementMeta && placementMeta.imageType,\r\n cropSettings: JSON.stringify(settings),\r\n });\r\n }\r\n }, [adType, curPlacementCropping, logger, placementMeta]);\r\n\r\n const handleCancel = useCallback(() => {\r\n onCancel();\r\n goToPlacementListView();\r\n }, [goToPlacementListView, onCancel]);\r\n\r\n const handleSave = useCallback(() => {\r\n onSave(placement, curPlacementCropping);\r\n goToPlacementListView();\r\n }, [curPlacementCropping, goToPlacementListView, onSave, placement]);\r\n\r\n const onRenderPlacement = useCallback((p, AdPlacementComponent) => {\r\n if (!p || !AdPlacementComponent) {\r\n return null;\r\n }\r\n // override the cropping\r\n let newPlacement = {\r\n ...p, placementCropping: curPlacementCropping, expandedPlacementCropping: undefined, effectiveImageUrl: undefined, effectiveImageWidth: undefined, effectiveImageHeight: undefined,\r\n };\r\n if (!_.isEmpty(p.images)) {\r\n // for multi-image placement, override the placementCropping of the first image\r\n const newFirstImg = { ...p.images[0], placementCropping: curPlacementCropping };\r\n newPlacement = { ...p, images: [newFirstImg, ...p.images.slice(1)] };\r\n }\r\n\r\n return (\r\n );\r\n }, [curPlacementCropping, i18n, previewTexts]);\r\n\r\n const imageCropView = useMemo(() => (\r\n \r\n ), [curPlacementCropping, handleCropSettingsChanged, maxCropBox, placementMeta.aspectRatio, placementMeta.minSize, previewImage]);\r\n\r\n const buttonsConfig = useMemo(() => ([{\r\n onClick: handleSave,\r\n icon: Checkmark20Regular,\r\n text: i18n.getString(_TL_('Apply')),\r\n }, {\r\n onClick: handleCancel,\r\n icon: Dismiss20Regular,\r\n text: i18n.getString(_TL_('Cancel')),\r\n }]), [handleCancel, handleSave, i18n]);\r\n\r\n const placementEditView = useStyles();\r\n\r\n return (\r\n
    \r\n \r\n }\r\n onClick={() => { goToPlacementListView(); }}\r\n className=\"button\"\r\n >\r\n {i18n.getString(_TL_('Edit aspect ratio'))}\r\n \r\n }\r\n />\r\n
    \r\n
    \r\n
    \r\n \r\n {i18n.getString(_TL_('{{ratio}} {{previewType}}'), { ratio: aspectRatioUIString, previewType: i18n.getString(previewTypeString) })}\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n );\r\n};\r\n\r\nPlacementEditView.propTypes = {\r\n placement: PropTypes.shape({}),\r\n aspectRatioUIString: PropTypes.string.isRequired,\r\n previewTypeString: PropTypes.string.isRequired,\r\n adType: PropTypes.string.isRequired,\r\n maxCropBox: PropTypes.shape({}),\r\n previewImage: PropTypes.shape({\r\n Type: PropTypes.string,\r\n Src: PropTypes.string,\r\n Width: PropTypes.number,\r\n Height: PropTypes.number,\r\n }).isRequired,\r\n previewTexts: PropTypes.shape({}).isRequired,\r\n onSave: PropTypes.func.isRequired,\r\n onCancel: PropTypes.func.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n }).isRequired,\r\n goToPlacementListView: PropTypes.func.isRequired,\r\n};\r\n\r\nPlacementEditView.defaultProps = {\r\n placement: null,\r\n maxCropBox: null,\r\n};\r\n","import { makeStyles, shorthands } 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, '16px'),\r\n },\r\n\r\n baseSaveButton: {\r\n minWidth: '110px',\r\n },\r\n});\r\n","import _ from 'underscore';\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 SplitButton,\r\n Menu,\r\n MenuTrigger,\r\n MenuList,\r\n MenuItem,\r\n MenuPopover,\r\n Tooltip,\r\n} from '@fluentui/react-components';\r\nimport { useStyles } from './style';\r\n\r\nexport const SaveButtonInSummaryBar = ({\r\n i18n,\r\n onSaveDirectly,\r\n onSaveAsCopy,\r\n isSaveAsCopyDisabled,\r\n isSaveDisabled,\r\n haveCroppingTasks,\r\n isBaseButton,\r\n baseButtonText,\r\n onBaseButtonClick,\r\n saveButtonTooltip,\r\n}) => {\r\n const classes = useStyles();\r\n\r\n const [summaryBar, setSummaryBar] = useState(null);\r\n const [open, setOpen] = useState(false);\r\n\r\n const onOpenChange = useCallback((e, data) => {\r\n setOpen(data.open);\r\n }, []);\r\n\r\n const renderBaseSaveButton = useCallback(() => (\r\n \r\n {baseButtonText}\r\n \r\n ), [baseButtonText, classes, isSaveDisabled, onBaseButtonClick]);\r\n\r\n const baseSaveButtonWithTooltip = useMemo(() => (\r\n saveButtonTooltip ?\r\n \r\n {renderBaseSaveButton()}\r\n :\r\n renderBaseSaveButton()\r\n ), [renderBaseSaveButton, saveButtonTooltip]);\r\n\r\n const saveAsCopyMenuItem = useCallback(() => (\r\n \r\n {i18n.getString(_TL_('Save as copy'))}\r\n \r\n ), [i18n, isSaveAsCopyDisabled, onSaveAsCopy]);\r\n\r\n const splitSaveButton = useMemo(() => (\r\n \r\n \r\n {triggerProps => (\r\n \r\n {i18n.getString(_TL_('Save'))}\r\n \r\n )}\r\n \r\n\r\n \r\n \r\n {i18n.getString(_TL_('Save'))}\r\n {isSaveAsCopyDisabled ?\r\n \r\n {saveAsCopyMenuItem()}\r\n :\r\n saveAsCopyMenuItem()\r\n }\r\n \r\n \r\n \r\n ), [i18n, isSaveAsCopyDisabled, isSaveDisabled, onOpenChange, onSaveDirectly, open, saveAsCopyMenuItem]);\r\n\r\n const customizedContent = useMemo(() => (\r\n
    \r\n {isBaseButton ? baseSaveButtonWithTooltip : splitSaveButton}\r\n
    \r\n ), [classes.container, haveCroppingTasks, isBaseButton, baseSaveButtonWithTooltip, splitSaveButton]);\r\n\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\nSaveButtonInSummaryBar.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n onSaveDirectly: PropTypes.func.isRequired,\r\n onSaveAsCopy: PropTypes.func.isRequired,\r\n isSaveAsCopyDisabled: PropTypes.bool,\r\n isSaveDisabled: PropTypes.bool,\r\n haveCroppingTasks: PropTypes.bool,\r\n isBaseButton: PropTypes.bool,\r\n baseButtonText: PropTypes.string,\r\n onBaseButtonClick: PropTypes.func,\r\n saveButtonTooltip: PropTypes.string,\r\n};\r\n\r\nSaveButtonInSummaryBar.defaultProps = {\r\n isSaveAsCopyDisabled: false,\r\n isSaveDisabled: false,\r\n haveCroppingTasks: false,\r\n isBaseButton: false,\r\n baseButtonText: undefined,\r\n onBaseButtonClick: _.noop,\r\n saveButtonTooltip: undefined,\r\n};\r\n","import React from 'react';\r\n\r\nexport const UnselectedAdPlacementSVGIcon = () => (\r\n \r\n \r\n \r\n);\r\n","import React from 'react';\r\n\r\nexport const SelectedAdPlacementSVGIcon = () => (\r\n \r\n \r\n \r\n);\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nexport const useStyles = makeStyles({\r\n editPageNavigation: {\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, Tooltip } from '@fluentui/react-components';\r\nimport { WandFilled } from '@fluentui/react-icons';\r\n\r\nimport { UnselectedAdPlacementSVGIcon } from '../../media/unselected-ad-placement-svg-icon';\r\nimport { SelectedAdPlacementSVGIcon } from '../../media/selected-ad-placement-svg-icon';\r\nimport { ViewName } from '../../model/utils';\r\nimport { useStyles } from './style';\r\n\r\nconst AdPlacementId = 'edit-page-ad-placement-view';\r\nconst AdjustId = 'edit-page-adjust-view';\r\n\r\nexport const NavigationView = ({\r\n i18n,\r\n currentView,\r\n setCurrentView,\r\n isAdjustButtonDisabled,\r\n adjustButtonTooltip,\r\n updateAdPlacementImage,\r\n}) => {\r\n const classes = useStyles();\r\n\r\n const isAdPlacementSelected = useCallback(() => (\r\n currentView === ViewName.PlacementListView || currentView === ViewName.PlacementEditView\r\n ), [currentView]);\r\n\r\n const isAdjustSelected = useCallback(() => (\r\n currentView === ViewName.ImageAdjustView || currentView === ViewName.BackgroundChangeView\r\n ), [currentView]);\r\n\r\n const selectedItemId = useMemo(() => {\r\n if (isAdPlacementSelected()) {\r\n return AdPlacementId;\r\n } else if (isAdjustSelected()) {\r\n return AdjustId;\r\n }\r\n return null;\r\n }, [isAdPlacementSelected, isAdjustSelected]);\r\n\r\n const handleAdPlacementClick = useCallback(() => {\r\n setCurrentView(ViewName.PlacementListView);\r\n updateAdPlacementImage();\r\n }, [setCurrentView, updateAdPlacementImage]);\r\n\r\n const handleAdjustClick = useCallback(() => {\r\n setCurrentView(ViewName.ImageAdjustView);\r\n }, [setCurrentView]);\r\n\r\n const items = useMemo(() => ([\r\n {\r\n id: AdPlacementId,\r\n name: _TL_('Ad placement'),\r\n onClick: handleAdPlacementClick,\r\n icon: ,\r\n selectedIcon: ,\r\n isSelected: isAdPlacementSelected(),\r\n },\r\n {\r\n id: AdjustId,\r\n name: _TL_('Adjust'),\r\n onClick: handleAdjustClick,\r\n icon: ,\r\n isSelected: isAdjustSelected(),\r\n disabled: isAdjustButtonDisabled,\r\n tooltip: adjustButtonTooltip,\r\n },\r\n ]), [adjustButtonTooltip, handleAdPlacementClick, handleAdjustClick, isAdPlacementSelected, isAdjustButtonDisabled, isAdjustSelected]);\r\n\r\n const tabItem = useCallback(item => (\r\n \r\n {i18n.getString(item.name)}\r\n \r\n ), [classes.tabItem, i18n, selectedItemId]);\r\n\r\n return (\r\n
    \r\n \r\n {items.map(item => (\r\n
    \r\n
    \r\n {item.tooltip ?\r\n \r\n {tabItem(item)}\r\n :\r\n tabItem(item)\r\n }\r\n
    \r\n
    \r\n ))}\r\n
    \r\n
    \r\n );\r\n};\r\n\r\nNavigationView.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n currentView: PropTypes.string.isRequired,\r\n setCurrentView: PropTypes.func.isRequired,\r\n isAdjustButtonDisabled: PropTypes.bool,\r\n adjustButtonTooltip: PropTypes.string,\r\n updateAdPlacementImage: PropTypes.func.isRequired,\r\n};\r\n\r\nNavigationView.defaultProps = {\r\n isAdjustButtonDisabled: false,\r\n adjustButtonTooltip: undefined,\r\n};\r\n","import { makeResetStyles, tokens, shorthands } from '@fluentui/react-components';\r\n\r\nexport const useBackgroundChangeStyles = makeResetStyles({\r\n display: 'flex',\r\n flexDirection: 'row',\r\n height: 'calc(100% - 8px)',\r\n '& .control-section': {\r\n maxWidth: '320px',\r\n backgroundColor: tokens.colorNeutralBackground1,\r\n boxShadow: '0px 2px 4px 0px rgba(0, 0, 0, 0.14), 0px 0px 2px 0px rgba(0, 0, 0, 0.12)',\r\n borderRadius: '8px',\r\n width: '100%',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'flex-start',\r\n ...shorthands.padding('12px', '0px'),\r\n },\r\n '& .back-to-adjust': {\r\n ...shorthands.padding('0px', '16px'),\r\n '& button': {\r\n paddingLeft: '0px',\r\n minWidth: 'unset',\r\n },\r\n '& span': {\r\n width: '10px',\r\n height: '10px',\r\n },\r\n },\r\n '& .background-change-tabs': {\r\n ...shorthands.padding('0px', '16px'),\r\n '& [role=\"tablist\"]': {\r\n minWidth: '170px',\r\n flexWrap: 'wrap',\r\n display: 'flex',\r\n },\r\n '& [role=\"tablist\"] button:first-of-type': {\r\n paddingLeft: '0px',\r\n },\r\n },\r\n '& .image-section': {\r\n display: 'flex',\r\n ...shorthands.flex(1),\r\n position: 'relative',\r\n paddingTop: '48px',\r\n '& .target-image-wrapper': {\r\n width: '100%',\r\n backgroundImage: 'linear-gradient(45deg, #EBEBEB 25%, transparent 25%), linear-gradient(-45deg, #EBEBEB 25%, transparent 25%), linear-gradient(45deg, transparent 75%, #EBEBEB 75%), linear-gradient(-45deg, transparent 75%, #EBEBEB 75%)',\r\n backgroundSize: '40px 40px',\r\n backgroundPosition: '0px 0px, 0px 20px, 20px -20px, -20px 0px',\r\n backgroundColor: '#FAFAFA',\r\n position: 'relative',\r\n '& .loading-mask': {\r\n position: 'absolute',\r\n width: '100%',\r\n height: '100%',\r\n opacity: 0.4,\r\n backgroundColor: '#E6E6E6',\r\n backgroundImage: 'linear-gradient(90deg, rgba(255, 255, 255, 0.00) 0%, #47CFFA 50%, #B47CF8 100%)',\r\n top: 0,\r\n left: 0,\r\n },\r\n },\r\n '& .notification-content': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n ...shorthands.gap('4px'),\r\n },\r\n '& .dismiss-icon': {\r\n color: tokens.colorStatusDangerForeground1,\r\n },\r\n '& .check-mark-icon': {\r\n color: '#107C10',\r\n },\r\n '& .spinner-icon': {\r\n width: '16px',\r\n animationDuration: '1s',\r\n animationIterationCount: 'infinite',\r\n animationTimingFunction: 'linear',\r\n animationName: [{\r\n from: { transform: 'rotate(0deg)' },\r\n to: { transform: 'rotate(360deg)' },\r\n }],\r\n },\r\n },\r\n '& .prompt-control': {\r\n width: '100%',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'flex-start',\r\n ...shorthands.padding('0px', '16px'),\r\n '& .loading-section': {\r\n width: '100%',\r\n marginTop: '16px',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n ...shorthands.gap('8px'),\r\n color: tokens.colorNeutralForeground3Hover,\r\n },\r\n '& .prompt-example': {\r\n '& .example-image-list-label': {\r\n marginTop: '11px',\r\n color: tokens.colorNeutralForeground3,\r\n },\r\n },\r\n '& .background-change-prompt': {\r\n marginTop: '24px',\r\n width: '100%',\r\n '& .prompt-title': {\r\n fontSize: '14px',\r\n fontWeight: '600',\r\n marginBottom: '8px',\r\n },\r\n '& .prompt-editor': {\r\n position: 'relative',\r\n '& .prompt-textarea': {\r\n width: '100%',\r\n borderRadius: '8px',\r\n paddingBottom: '42px',\r\n paddingTop: '6px',\r\n ...shorthands.overflow('hidden'),\r\n '& textarea': {\r\n minHeight: '75px',\r\n },\r\n '&::after': {\r\n height: '4px',\r\n clipPath: 'none',\r\n backgroundColor: '#464feb',\r\n borderColor: '#464feb',\r\n },\r\n },\r\n '& .action-bar': {\r\n position: 'absolute',\r\n bottom: '12px',\r\n right: '12px',\r\n },\r\n },\r\n },\r\n },\r\n});\r\n","import { makeResetStyles } from '@fluentui/react-components';\r\n\r\nexport const useObjectSelectionStyles = makeResetStyles({\r\n '& .image-wrapper': {\r\n position: 'relative',\r\n width: '100%',\r\n '& img': {\r\n width: '100%',\r\n objectFit: 'contain',\r\n },\r\n '& div': {\r\n width: '100%',\r\n },\r\n '& .original-image': {\r\n },\r\n '& .cover-original-image': {\r\n backgroundImage: 'linear-gradient(90deg, rgba(70, 79, 235, 0.75) 0%, rgba(180, 124, 248, 0.75) 100%)',\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n right: 0,\r\n bottom: 0,\r\n },\r\n '& .loading-segmentations-image': {\r\n backgroundImage: 'linear-gradient(90deg, rgba(70, 79, 235, 0.75) 0%, rgba(180, 124, 248, 0.75) 100%)',\r\n animationDuration: '3s',\r\n animationIterationCount: 'infinite',\r\n animationTimingFunction: 'linear',\r\n animationName: [{\r\n from: { backgroundPosition: '0%' }, // The whole background is 800% and we use only the 0-7 range\r\n to: { backgroundPosition: '100%' },\r\n }],\r\n position: 'absolute',\r\n backgroundSize: '400%',\r\n top: 0,\r\n left: 0,\r\n right: 0,\r\n bottom: 0,\r\n },\r\n '& .selected-image': {\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n },\r\n '& .border-image': {\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n },\r\n '& .highlighted-image': {\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n },\r\n },\r\n});\r\n\r\n","import React, { useRef, useEffect, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n mergeClasses,\r\n Dialog,\r\n DialogTrigger,\r\n DialogSurface,\r\n DialogTitle,\r\n DialogContent,\r\n DialogBody,\r\n DialogActions,\r\n Button,\r\n} from '@fluentui/react-components';\r\nimport {\r\n Dismiss20Regular,\r\n} from '@fluentui/react-icons';\r\nimport {\r\n HiddenDivForAnnounce,\r\n ObjectSelectionImageView,\r\n} from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { useObjectSelectionStyles } from './style';\r\n\r\nconst DialogForObjectSelection = (props) => {\r\n const {\r\n i18n,\r\n open,\r\n setOpen,\r\n updateSubject,\r\n objectSelectionError,\r\n } = props;\r\n\r\n return (\r\n {\r\n // it is the users responsibility to react accordingly to the open state change\r\n setOpen(data.open);\r\n }}\r\n >\r\n \r\n \r\n } onClick={() => setOpen(false)} />}>{i18n.getString(_TL_('Save before continuing?'))}\r\n \r\n {i18n.getString(_TL_('Either save you changes or go back and keep editing'))}\r\n \r\n \r\n \r\n {\r\n updateSubject();\r\n setOpen(false);\r\n }}\r\n disabled={objectSelectionError && objectSelectionError !== ''}\r\n >\r\n {i18n.getString(_TL_('Save'))}\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\nexport const ObjectSelectionView = ({\r\n i18n,\r\n originalImageUrl,\r\n originalImageHeight,\r\n originalImageWidth,\r\n getMaskValueAtPoint,\r\n updateHighlightedImage,\r\n isFetchingSegmentations,\r\n toggleSelectedMask,\r\n buttonsRef,\r\n borderImageSrc,\r\n updateSubject,\r\n workingSelectedImageSrc,\r\n highlightedImageSrc,\r\n objectSelectionError,\r\n maskValues,\r\n logger,\r\n}) => {\r\n // get image from offscreen canvas\r\n // draw the canvas in the front\r\n const imageContainer = useRef(null);\r\n\r\n const [openEscape, setOpenEscape] = React.useState(false);\r\n\r\n const mouseOutsideHandler = useCallback((e) => {\r\n const imageWrapper = imageContainer.current && imageContainer.current.querySelector('.image-wrapper');\r\n if (imageWrapper && !imageWrapper.contains(e.target)\r\n && buttonsRef.current && !buttonsRef.current.contains(e.target)) {\r\n setOpenEscape(true);\r\n }\r\n }, [buttonsRef]);\r\n\r\n useEffect(() => {\r\n document.addEventListener('mousedown', mouseOutsideHandler);\r\n return () => {\r\n document.removeEventListener('mousedown', mouseOutsideHandler);\r\n };\r\n }, [mouseOutsideHandler]);\r\n\r\n const classes = useObjectSelectionStyles();\r\n\r\n return (\r\n
    \r\n \r\n \r\n \r\n
    \r\n );\r\n};\r\n\r\n\r\nObjectSelectionView.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n originalImageUrl: PropTypes.string.isRequired,\r\n originalImageHeight: PropTypes.number.isRequired,\r\n originalImageWidth: PropTypes.number.isRequired,\r\n getMaskValueAtPoint: PropTypes.func.isRequired,\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n }).isRequired,\r\n isFetchingSegmentations: PropTypes.bool.isRequired,\r\n};\r\n\r\nObjectSelectionView.defaultProps = {\r\n};\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nexport const useExampleImageListStyles = makeStyles({\r\n exampleImageList: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n width: '100%',\r\n ...shorthands.overflow('hidden'),\r\n ...shorthands.gap('6px'),\r\n },\r\n});\r\n\r\nexport const useExampleImageCellStyles = makeStyles({\r\n exampleImageCell: {\r\n width: 'calc(50% - 3px)', // 3px is half the gap between cells\r\n ...shorthands.borderRadius('6px'),\r\n ...shorthands.overflow('hidden'),\r\n position: 'relative',\r\n\r\n '& img': {\r\n width: '100%',\r\n height: '100%',\r\n objectFit: 'cover',\r\n },\r\n\r\n '&:focus .example-image-list-cell-overlay, &:hover .example-image-list-cell-overlay': {\r\n visibility: 'visible',\r\n animationDuration: '0.2s, 0.5s',\r\n animationTimingFunction: 'ease-in-out, linear',\r\n animationName: [{\r\n from: { transform: 'translateY(100%)' },\r\n to: { transform: 'translateY(0%)' },\r\n }, {\r\n from: { opacity: 0 },\r\n to: { opacity: 1 },\r\n }],\r\n },\r\n\r\n '& .example-image-list-cell-overlay': {\r\n position: 'absolute',\r\n width: '100%',\r\n height: '100%',\r\n top: 0,\r\n left: 0,\r\n right: 0,\r\n bottom: 0,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n visibility: 'hidden',\r\n opacity: 0.8,\r\n\r\n '& .overlay-gradient': {\r\n ...shorthands.flex(1),\r\n alignSelf: 'stretch',\r\n backgroundImage: 'linear-gradient(180deg, rgba(49, 34, 34, 0.20) 44.79%, rgba(49, 34, 34, 0.90) 76.04%, #312222 100%);',\r\n },\r\n\r\n '& .overlay-solid': {\r\n backgroundColor: '#312222',\r\n height: '25%',\r\n flexShrink: 0,\r\n alignSelf: 'stretch',\r\n },\r\n\r\n '& .example-prompt-template': {\r\n width: '100%',\r\n height: '100%',\r\n minWidth: '100px',\r\n minHeight: '100px',\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n right: 0,\r\n bottom: 0,\r\n ...shorthands.padding('8px'),\r\n\r\n color: '#FFF',\r\n fontSize: 14,\r\n fontStyle: 'normal',\r\n fontWeight: 600,\r\n lineHeight: 'normal',\r\n '& .multi-line-hidden-text': {\r\n top: 0,\r\n left: 0,\r\n right: 0,\r\n bottom: 0,\r\n ...shorthands.padding('8px'),\r\n },\r\n },\r\n },\r\n },\r\n});\r\n\r\n","import {\r\n ExampleImageListWithoutStyle,\r\n} from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport {\r\n withOverridableStyles,\r\n} from '@bingads-webui-campaign-react/ads-studio-shared-components';\r\nimport { useExampleImageListStyles } from './style';\r\n\r\nexport const ExampleImageList = withOverridableStyles(ExampleImageListWithoutStyle, useExampleImageListStyles);\r\n","import {\r\n ExampleImageCellWithoutStyle,\r\n} from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport {\r\n withOverridableStyles,\r\n} from '@bingads-webui-campaign-react/ads-studio-shared-components';\r\nimport { useExampleImageCellStyles } from './style';\r\n\r\nexport const ExampleImageCell = withOverridableStyles(ExampleImageCellWithoutStyle, useExampleImageCellStyles);\r\n","import { makeStyles, shorthands, tokens } from '@fluentui/react-components';\r\n\r\nexport const getGenerationHistoryListStyles = makeStyles({\r\n paddleBtn: {\r\n ...shorthands.borderRadius('99px'),\r\n color: tokens.colorNeutralForeground2BrandHover,\r\n boxShadow: '0px 0.3px 0.9px rgba(0, 0, 0, 0.1), 0px 1.6px 3.6px rgba(0, 0, 0, 0.13)',\r\n marginRight: '2px',\r\n },\r\n paddleBtnRight: {\r\n ...shorthands.borderRadius('99px'),\r\n color: tokens.colorNeutralForeground2BrandHover,\r\n boxShadow: '0px 0.3px 0.9px rgba(0, 0, 0, 0.1), 0px 1.6px 3.6px rgba(0, 0, 0, 0.13)',\r\n },\r\n historyListRoot: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'flex-start',\r\n alignSelf: 'stretch',\r\n marginTop: '24px',\r\n paddingTop: '16px',\r\n ...shorthands.borderTop('1px', 'solid', '#DFDFDF'),\r\n ...shorthands.overflow('hidden'),\r\n\r\n '& .history-list-title-container': {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n marginBottom: '5px',\r\n alignItems: 'center',\r\n\r\n '& .history-icon': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n width: '16px',\r\n height: '16px',\r\n color: tokens.colorNeutralForeground3,\r\n },\r\n '& .history-title': {\r\n marginLeft: '4px',\r\n fontSize: '14px',\r\n lineHeight: '20px',\r\n fontWeight: 600,\r\n color: tokens.colorNeutralForeground3,\r\n },\r\n },\r\n\r\n '& .history-list-container': {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n width: '100%',\r\n position: 'relative',\r\n '& .right-icon-hint': {\r\n display: 'inline-block',\r\n position: 'absolute',\r\n backgroundImage: 'linear-gradient(270deg, #FFFFFF 0%, rgba(255, 255, 255, 0.927755) 18.23%, rgba(255, 255, 255, 0.776042) 48.44%, rgba(250, 249, 255, 0.5) 78.24%, rgba(255, 255, 255, 0) 100%)',\r\n width: '20px',\r\n height: '80px',\r\n right: '32px',\r\n },\r\n\r\n '& .left-icon-hint': {\r\n display: 'inline-block',\r\n position: 'absolute',\r\n backgroundImage: 'linear-gradient(270deg, #FFFFFF 0%, rgba(255, 255, 255, 0.927755) 18.23%, rgba(255, 255, 255, 0.776042) 48.44%, rgba(250, 249, 255, 0.5) 78.24%, rgba(255, 255, 255, 0) 100%)',\r\n width: '30px',\r\n height: '80px',\r\n left: '34px',\r\n transform: 'rotate(-180deg)',\r\n },\r\n\r\n '& .history-list-images-container': {\r\n flexGrow: 1,\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n ...shorthands.overflow('hidden'),\r\n width: '100%',\r\n\r\n '& .history-list-images': {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n position: 'relative',\r\n },\r\n '& .history-item-root': {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n width: '96px',\r\n height: '86px',\r\n ...shorthands.borderRadius('9px'),\r\n ...shorthands.border('2px', 'solid', 'white'),\r\n\r\n '&.selected': {\r\n ...shorthands.border('2px', 'solid', tokens.colorBrandForeground1),\r\n },\r\n\r\n '& .history-item': {\r\n width: '90px',\r\n height: '80px',\r\n ...shorthands.borderRadius('6px'),\r\n ...shorthands.overflow('hidden'),\r\n\r\n '& img': {\r\n width: '100%',\r\n height: '100%',\r\n objectFit: 'cover',\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n});\r\n","import React, { useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n withOverridableStyles,\r\n HistoryListImages,\r\n} from '@bingads-webui-campaign-react/ads-studio-shared-components';\r\nimport {\r\n mergeClasses,\r\n} from '@fluentui/react-components';\r\nimport {\r\n History20Regular,\r\n} from '@fluentui/react-icons';\r\n\r\nimport { getGenerationHistoryListStyles } from './generation-history-list-styles';\r\n\r\n\r\nconst HistoryListImpl = ({\r\n selectedIndex,\r\n historyList,\r\n onSelectHistory,\r\n i18n,\r\n classes,\r\n}) => {\r\n const onClick = useCallback((index) => {\r\n onSelectHistory(historyList[index], index);\r\n }, [historyList, onSelectHistory]);\r\n\r\n const onKeyDown = useCallback((index, ev) => {\r\n if (ev.keyCode === 'Enter') {\r\n onClick(index);\r\n }\r\n }, [onClick]);\r\n\r\n return (\r\n
    \r\n
    \r\n \r\n
    {i18n.getString(_TL_('History'))}
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n );\r\n};\r\n\r\nHistoryListImpl.propTypes = {\r\n selectedIndex: PropTypes.number,\r\n historyList: PropTypes.arrayOf(PropTypes.shape({})),\r\n onSelectHistory: PropTypes.func,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n classes: PropTypes.shape({}).isRequired,\r\n};\r\n\r\nHistoryListImpl.defaultProps = {\r\n selectedIndex: -1,\r\n historyList: [],\r\n onSelectHistory: () => {},\r\n};\r\n\r\nexport const GenerationHistoryList = withOverridableStyles(HistoryListImpl, getGenerationHistoryListStyles);\r\n","import React from 'react';\r\nimport { Label, Text, useId } from '@fluentui/react-components';\r\nimport {\r\n LoadingIndicator, PromptEditor, MAX_PROMPT_LENGTH,\r\n} from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { ExampleImageList, ExampleImageCell } from '../example-image';\r\nimport { GenerationHistoryList } from '../history-list';\r\n\r\nexport const PromptControl = (props) => {\r\n const {\r\n i18n,\r\n generate,\r\n prompt,\r\n setPrompt,\r\n isGenerating,\r\n onSelectExampleImage,\r\n MultiLineEllipsisText,\r\n historyList,\r\n onSelectHistory,\r\n selectedHistoryIndex,\r\n disabled,\r\n } = props;\r\n\r\n const exampleImageId = useId('example-image-list');\r\n\r\n return (\r\n
    \r\n
    \r\n MAX_PROMPT_LENGTH || disabled}\r\n placeholder={i18n.getString(_TL_('Describe the background you want. You can use the examples on the below for inspiration.'))}\r\n />\r\n
    \r\n {isGenerating &&\r\n
    \r\n \r\n {i18n.getString(_TL_('Creating background images with AI'))}\r\n
    }\r\n {!isGenerating && (\r\n
    \r\n \r\n \r\n
    )}\r\n {!isGenerating && historyList && historyList.length > 0 && (\r\n )}\r\n
    \r\n );\r\n};\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nexport const getImageShimmerStyles = makeStyles({\r\n imageShimmerRoot: {\r\n display: 'flex',\r\n justifyContent: 'flex-start',\r\n alignItems: 'center',\r\n ...shorthands.overflow('hidden'),\r\n backgroundSize: '400% 100%',\r\n animationDuration: '1.5s',\r\n animationTimingFunction: 'ease-in-out',\r\n animationDirection: 'alternate',\r\n animationIterationCount: 'infinite',\r\n animationName: [{\r\n from: { backgroundPosition: '0%' },\r\n to: { backgroundPosition: '100%' },\r\n }],\r\n },\r\n});\r\n\r\n","import classNames from 'classnames';\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n withOverridableStyles,\r\n} from '@bingads-webui-campaign-react/ads-studio-shared-components';\r\nimport { getImageShimmerStyles } from './style';\r\n\r\nconst ImageShimmerImpl = ({ className, classes }) => (\r\n
    \r\n);\r\n\r\nImageShimmerImpl.propTypes = {\r\n className: PropTypes.string,\r\n classes: PropTypes.shape({}).isRequired,\r\n};\r\n\r\nImageShimmerImpl.defaultProps = {\r\n className: undefined,\r\n};\r\n\r\nexport const ImageShimmer = withOverridableStyles(ImageShimmerImpl, getImageShimmerStyles);\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { makeStyles, mergeClasses } from '@fluentui/react-components';\r\nimport { ImageShimmer } from './image-shimmer';\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n backgroundImage: 'linear-gradient(45deg, #EBEBEB 25%, transparent 25%), linear-gradient(-45deg, #EBEBEB 25%, transparent 25%), linear-gradient(45deg, transparent 75%, #EBEBEB 75%), linear-gradient(-45deg, transparent 75%, #EBEBEB 75%)',\r\n backgroundSize: '40px 40px',\r\n backgroundPositionX: '0px, 0px, 20px, -20px',\r\n backgroundPositionY: '0px, 20px, -20px, 0px',\r\n backgroundColor: '#FAFAFA',\r\n position: 'relative',\r\n lineHeight: 0,\r\n },\r\n mask: {\r\n position: 'absolute',\r\n width: '100%',\r\n height: '100%',\r\n opacity: 0.4,\r\n backgroundColor: '#E6E6E6',\r\n backgroundImage: 'linear-gradient(90deg, rgba(255, 255, 255, 0.00) 0%, #47CFFA 50%, #B47CF8 100%)',\r\n top: 0,\r\n left: 0,\r\n },\r\n});\r\n\r\n\r\nexport const ImageWithShimmer = ({ targetImage, showShimmer, className }) => {\r\n const classes = useStyles();\r\n\r\n return (\r\n
    \r\n \"targetImage\"\r\n {showShimmer && }\r\n
    \r\n );\r\n};\r\n\r\nImageWithShimmer.propTypes = {\r\n targetImage: PropTypes.string.isRequired,\r\n showShimmer: PropTypes.bool,\r\n className: PropTypes.string,\r\n};\r\n\r\nImageWithShimmer.defaultProps = {\r\n showShimmer: false,\r\n className: '',\r\n};\r\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\r\nimport { Text } from '@fluentui/react-components';\r\nimport {\r\n DismissCircle16Filled,\r\n Checkmark20Regular,\r\n Dismiss20Regular,\r\n ImageEdit20Regular,\r\n} from '@fluentui/react-icons';\r\nimport {\r\n MAX_PROMPT_LENGTH,\r\n HiddenDivForAnnounce,\r\n} from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n\r\nimport { ObjectSelectionView } from './object-selection';\r\nimport { PromptControl } from './prompt-control';\r\nimport { useObjectSelection } from '../../model/background-change/use-object-selection';\r\nimport { ImageWithShimmer } from '../../../image-with-shimmer';\r\n\r\nconst HISTORY_LIST_MAX_LENGTH = 10;\r\n\r\n\r\nconst ImageToUpdate = (props) => {\r\n const {\r\n targetImage,\r\n imageUrlWithoutBackground,\r\n i18n,\r\n } = props;\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst state = {\r\n ObjectSelection: 'ObjectSelection',\r\n StaticImage: 'StaticImage',\r\n};\r\n\r\nexport const usePromptControlViewFactoryWithState = (props) => {\r\n const {\r\n i18n,\r\n image,\r\n segmentationMasks,\r\n imageUrlWithoutBackground,\r\n setSelectedImageSrc,\r\n selectedMasks,\r\n setSelectedMasks,\r\n selectedImageSrc,\r\n maskValues,\r\n buttonsRef,\r\n setNotificationConfig,\r\n getMaskValueAtPoint,\r\n logger,\r\n generateBackground,\r\n imageUrlWithGeneratedBackground,\r\n setImageUrlWithGeneratedBackground,\r\n fetchSegmentationError,\r\n isRemovingBackground,\r\n isFetchingSegmentations,\r\n goToImageAdjustView,\r\n MultiLineEllipsisText,\r\n applyImage,\r\n } = props;\r\n\r\n const [showLearnMore, setShowLearnMore] = useState(false);\r\n const [prompt, setPrompt] = useState(null);\r\n const [isGenerating, setIsGenerating] = useState(false);\r\n // initial error message is null, after generating, it will be set to '' or error message\r\n const [errorMessage, setErrorMessage] = useState(null);\r\n\r\n const {\r\n // mask\r\n borderImageSrc,\r\n toggleSelectedMask,\r\n highlightedImageSrc,\r\n workingSelectedImageSrc,\r\n updateHighlightedImage,\r\n updateSubject,\r\n objectSelectionError,\r\n startOver,\r\n } = useObjectSelection({\r\n originalImageUrl: image.url,\r\n originalImageWidth: image.width,\r\n originalImageHeight: image.height,\r\n segmentationMasks,\r\n imageUrlWithoutBackground,\r\n setSelectedImageSrc,\r\n selectedMasks,\r\n setSelectedMasks,\r\n i18n,\r\n });\r\n\r\n const [activeState, setActiveState] = useState(state.StaticImage);\r\n const [showRemoved, setShowRemoved] = useState(true);\r\n\r\n const dismissNotification = useCallback(() => {\r\n setNotificationConfig(null);\r\n }, [setNotificationConfig]);\r\n\r\n const goToStaticImage = useCallback(() => {\r\n dismissNotification();\r\n setActiveState(state.StaticImage);\r\n }, [dismissNotification]);\r\n\r\n const goToObjectSelection = useCallback(() => {\r\n dismissNotification();\r\n setActiveState(state.ObjectSelection);\r\n }, [dismissNotification]);\r\n\r\n const wrappedUpdateSubject = useCallback(() => {\r\n updateSubject();\r\n goToStaticImage();\r\n setShowRemoved(true);\r\n }, [goToStaticImage, updateSubject]);\r\n\r\n useEffect(() => {\r\n if (imageUrlWithGeneratedBackground) {\r\n setShowRemoved(false);\r\n }\r\n }, [imageUrlWithGeneratedBackground]);\r\n\r\n useEffect(() => {\r\n if (prompt && prompt.length > MAX_PROMPT_LENGTH) {\r\n setErrorMessage(i18n.getString(_TL_('Prompt must be less than 200 characters')));\r\n } else if (prompt) {\r\n setErrorMessage('');\r\n }\r\n }, [prompt, i18n]);\r\n\r\n const onSelectExampleImage = useCallback((promptText) => {\r\n if (promptText && promptText !== prompt) {\r\n setPrompt(promptText);\r\n logger.logTrace('Copilot change image background - static example image clicked', { promptText });\r\n }\r\n }, [logger, prompt]);\r\n\r\n const [historyList, setHistoryList] = useState({\r\n list: [],\r\n selectedHistoryIndex: -1,\r\n });\r\n\r\n const onSelectHistory = useCallback((historyData, index) => {\r\n const { promptValue: pv, imageUrl } = historyData || {};\r\n if (pv && imageUrl) {\r\n setPrompt(pv);\r\n setHistoryList({ ...historyList, selectedHistoryIndex: index });\r\n }\r\n }, [historyList]);\r\n\r\n const addNewHistory = useCallback((pPromptValue, generatedImageUrl) => {\r\n let newHistoryList = [...historyList.list];\r\n if (newHistoryList.length >= HISTORY_LIST_MAX_LENGTH) {\r\n newHistoryList = newHistoryList.slice(1);\r\n }\r\n newHistoryList.unshift({ promptValue: pPromptValue, imageUrl: generatedImageUrl });\r\n setHistoryList({\r\n list: newHistoryList,\r\n selectedHistoryIndex: 0,\r\n });\r\n }, [historyList]);\r\n\r\n const generate = useCallback(() => {\r\n if (logger && logger.logTrace) {\r\n logger.logTrace('background change: generate button clicked', { prompt });\r\n }\r\n setIsGenerating(true);\r\n setErrorMessage('');\r\n setShowLearnMore(false);\r\n generateBackground({\r\n prompt,\r\n imageUrl: image.url,\r\n imageWidth: image.width,\r\n imageHeight: image.height,\r\n }).then((imgUrl) => {\r\n if (logger && logger.logTrace) {\r\n logger.logTrace('background change: generate success', { prompt, generatedUrl: imgUrl });\r\n }\r\n addNewHistory(prompt, imgUrl);\r\n }).catch((error) => {\r\n if (logger && logger.logTrace) {\r\n logger.logTrace('background change: generate image failed', { error, prompt });\r\n }\r\n setErrorMessage(i18n.getString(error.uxMessage));\r\n if (error.availableActions && error.availableActions.gotoDisallowedContent) {\r\n setShowLearnMore(true);\r\n }\r\n }).finally(() => {\r\n setIsGenerating(false);\r\n });\r\n }, [addNewHistory, generateBackground, i18n, image.height, image.url, image.width, logger, prompt]);\r\n\r\n const curGeneratedImageUrl = useMemo(() => {\r\n const {\r\n list,\r\n selectedHistoryIndex,\r\n } = historyList;\r\n if (selectedHistoryIndex >= 0 && selectedHistoryIndex < list.length) {\r\n if (list[selectedHistoryIndex].imageUrl !== imageUrlWithGeneratedBackground) {\r\n setImageUrlWithGeneratedBackground(list[selectedHistoryIndex].imageUrl);\r\n }\r\n return list[selectedHistoryIndex].imageUrl;\r\n }\r\n return imageUrlWithGeneratedBackground;\r\n }, [historyList, imageUrlWithGeneratedBackground, setImageUrlWithGeneratedBackground]);\r\n\r\n const DisallowedContent = useMemo(() => (showLearnMore ? (\r\n \r\n \r\n {i18n.getString(_TL_('Disallowed content'))}\r\n \r\n \r\n ) : null), [i18n, showLearnMore]);\r\n\r\n const renderErrorNotificationConfig = useCallback(({\r\n message,\r\n others,\r\n }) => {\r\n const content = (\r\n
    \r\n {message}\r\n {others || null}\r\n
    \r\n );\r\n return ({\r\n icon: ,\r\n content,\r\n });\r\n }, []);\r\n\r\n useEffect(() => {\r\n // state 1: fetching segmentation\r\n if (fetchSegmentationError !== '') {\r\n setNotificationConfig(renderErrorNotificationConfig({ message: fetchSegmentationError }));\r\n }\r\n // state 2: object selection with fetched segmentation\r\n if (activeState === state.ObjectSelection) {\r\n if (objectSelectionError && objectSelectionError !== '') {\r\n setNotificationConfig(renderErrorNotificationConfig({ message: objectSelectionError }));\r\n } else if (objectSelectionError === '') {\r\n dismissNotification();\r\n }\r\n }\r\n // state 3: static image with fetched segmentation\r\n if (!isRemovingBackground && activeState === state.StaticImage && fetchSegmentationError === '') {\r\n if (errorMessage && errorMessage !== '') {\r\n setNotificationConfig(renderErrorNotificationConfig({ message: errorMessage, others: DisallowedContent }));\r\n } else if (errorMessage === '') {\r\n dismissNotification();\r\n }\r\n }\r\n }, [DisallowedContent, activeState, dismissNotification, errorMessage, fetchSegmentationError, isRemovingBackground, objectSelectionError, renderErrorNotificationConfig, setNotificationConfig]);\r\n\r\n const cancelUpdateSubject = useCallback(() => {\r\n startOver();\r\n goToStaticImage();\r\n }, [goToStaticImage, startOver]);\r\n\r\n const updateImage = useCallback(() => {\r\n if (logger && logger.logTrace) {\r\n logger.logTrace('background change: apply new image', { url: imageUrlWithGeneratedBackground });\r\n }\r\n applyImage({ url: imageUrlWithGeneratedBackground });\r\n }, [applyImage, imageUrlWithGeneratedBackground, logger]);\r\n\r\n const cancelBackgroundChange = useCallback(() => {\r\n if (logger && logger.logTrace) {\r\n logger.logTrace('background change: cancel');\r\n }\r\n goToImageAdjustView();\r\n }, [goToImageAdjustView, logger]);\r\n\r\n const buttonSettingConfig = {\r\n [state.ObjectSelection]: [{\r\n text: i18n.getString(_TL_('Update subject')),\r\n icon: Checkmark20Regular,\r\n onClick: wrappedUpdateSubject,\r\n disabled: objectSelectionError && objectSelectionError !== '',\r\n }, {\r\n text: i18n.getString(_TL_('Cancel')),\r\n icon: Dismiss20Regular,\r\n onClick: cancelUpdateSubject,\r\n }],\r\n [state.StaticImage]: [{\r\n text: i18n.getString(_TL_('Apply background')),\r\n icon: Checkmark20Regular,\r\n onClick: updateImage,\r\n disabled: isGenerating || isRemovingBackground || (errorMessage && errorMessage !== '') || fetchSegmentationError !== '' || !imageUrlWithGeneratedBackground,\r\n }, {\r\n text: i18n.getString(_TL_('Cancel')),\r\n icon: Dismiss20Regular,\r\n onClick: cancelBackgroundChange,\r\n }, {\r\n text: i18n.getString(_TL_('Edit subject area')),\r\n icon: ImageEdit20Regular,\r\n onClick: goToObjectSelection,\r\n disabled: isGenerating || isRemovingBackground || fetchSegmentationError !== '',\r\n }],\r\n };\r\n\r\n const targetImage = useMemo(() => {\r\n if (showRemoved) {\r\n return selectedImageSrc || imageUrlWithoutBackground || curGeneratedImageUrl || image.url;\r\n }\r\n return curGeneratedImageUrl || selectedImageSrc || imageUrlWithoutBackground || image.url;\r\n }, [curGeneratedImageUrl, image.url, imageUrlWithoutBackground, selectedImageSrc, showRemoved]);\r\n\r\n const imageSetting = {\r\n [state.ObjectSelection]: ,\r\n [state.StaticImage]: ,\r\n };\r\n\r\n const promptControlView = ();\r\n\r\n return {\r\n promptControlView,\r\n buttonsConfig: buttonSettingConfig[activeState],\r\n imageView: imageSetting[activeState],\r\n };\r\n};\r\n","import _ from 'underscore';\r\nimport { Promise } from 'bluebird';\r\nimport { useCallback, useEffect, useState } from 'react';\r\nimport {\r\n fetchImgPromise, getImagePixels, createSelectedImageSrc, createHighlightedImage,\r\n} from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n\r\nexport const useObjectSelection = ({\r\n originalImageUrl,\r\n originalImageWidth,\r\n originalImageHeight,\r\n segmentationMasks,\r\n imageUrlWithoutBackground,\r\n setSelectedImageSrc,\r\n selectedMasks,\r\n setSelectedMasks,\r\n i18n,\r\n}) => {\r\n const [workingMasks, setWorkingMasks] = useState([]);\r\n const [workingSelectedImageSrc, setWorkingSelectedImageSrc] = useState(null);\r\n const [originalImagePixels, setOriginalImagePixels] = useState(null);\r\n const [initialSelectedImageSrc, setInitialSelectedImageSrc] = useState(null);\r\n const [borderImageSrc, setBorderImageSrc] = useState(null);\r\n const [initialBorderImageSrc, setInitialBorderImageSrc] = useState(null);\r\n const [highlightedImageSrc, setHighlightedImageSrc] = useState(null);\r\n\r\n // initial error message is null, after generating, it will be set to '' or error message\r\n const [objectSelectionError, setObjectSelectionError] = useState(null);\r\n\r\n useEffect(() => {\r\n // Get the original image pixels\r\n if (originalImageUrl) {\r\n fetchImgPromise(originalImageUrl).then((image) => {\r\n const pixels = getImagePixels(image, originalImageWidth, originalImageHeight);\r\n setOriginalImagePixels(pixels);\r\n });\r\n }\r\n }, [originalImageHeight, originalImageWidth, originalImageUrl]);\r\n\r\n\r\n const createSelectedImage = useCallback((selectedImageSrcProp, masks, isAdd) => {\r\n if (originalImagePixels && segmentationMasks) {\r\n return fetchImgPromise(selectedImageSrcProp || originalImageUrl)\r\n .then(image => createSelectedImageSrc(image, originalImageWidth, originalImageHeight, originalImagePixels, segmentationMasks, masks, isAdd, selectedImageSrcProp));\r\n }\r\n return Promise.resolve({\r\n borderImageSrc: null,\r\n selectedImageSrc: null,\r\n });\r\n }, [originalImagePixels, segmentationMasks, originalImageUrl, originalImageWidth, originalImageHeight]);\r\n\r\n useEffect(() => {\r\n if (imageUrlWithoutBackground && segmentationMasks) {\r\n setWorkingMasks(selectedMasks);\r\n createSelectedImage(null, selectedMasks, true).then(({\r\n borderImageSrc: newBorderImageSrc,\r\n selectedImageSrc: newImageSrc,\r\n }) => {\r\n setInitialBorderImageSrc(newBorderImageSrc);\r\n setInitialSelectedImageSrc(newImageSrc);\r\n setBorderImageSrc(newBorderImageSrc);\r\n setWorkingSelectedImageSrc(newImageSrc);\r\n });\r\n }\r\n }, [imageUrlWithoutBackground, segmentationMasks, createSelectedImage, selectedMasks]);\r\n\r\n useEffect(() => {\r\n if (imageUrlWithoutBackground && segmentationMasks) {\r\n if (_.isEmpty(workingMasks)) {\r\n setObjectSelectionError(i18n.getString(_TL_('Please select at least one subject or object you want to keep in the image.')));\r\n } else {\r\n setObjectSelectionError('');\r\n }\r\n }\r\n }, [i18n, imageUrlWithoutBackground, segmentationMasks, workingMasks]);\r\n\r\n const updateHighlightedImage = useCallback((maskValue) => {\r\n const highlightedImage = createHighlightedImage(originalImageWidth, originalImageHeight, originalImagePixels, segmentationMasks, workingMasks, maskValue);\r\n setHighlightedImageSrc(highlightedImage);\r\n }, [originalImageWidth, originalImageHeight, segmentationMasks, workingMasks, originalImagePixels]);\r\n\r\n const toggleSelectedMask = useCallback((maskId) => {\r\n let newMasks = [];\r\n const isAdd = !_.contains(workingMasks, maskId);\r\n if (!isAdd) {\r\n newMasks = _.without(workingMasks, maskId);\r\n } else {\r\n newMasks = [...workingMasks, maskId];\r\n }\r\n setWorkingMasks(_.sortBy(newMasks));\r\n createSelectedImage(workingSelectedImageSrc, [maskId], isAdd).then(({\r\n borderImageSrc: newBorderImageSrc,\r\n selectedImageSrc: newImageSrc,\r\n }) => {\r\n setBorderImageSrc(newBorderImageSrc);\r\n setWorkingSelectedImageSrc(newImageSrc);\r\n });\r\n }, [workingMasks, createSelectedImage, workingSelectedImageSrc]);\r\n\r\n const updateSubject = useCallback(() => {\r\n setSelectedMasks(workingMasks);\r\n setSelectedImageSrc(workingSelectedImageSrc);\r\n }, [setSelectedImageSrc, setSelectedMasks, workingMasks, workingSelectedImageSrc]);\r\n\r\n const startOver = useCallback(() => {\r\n setWorkingSelectedImageSrc(initialSelectedImageSrc);\r\n setBorderImageSrc(initialBorderImageSrc);\r\n setWorkingMasks(selectedMasks);\r\n }, [initialSelectedImageSrc, initialBorderImageSrc, selectedMasks]);\r\n\r\n return {\r\n borderImageSrc,\r\n toggleSelectedMask,\r\n workingSelectedImageSrc,\r\n highlightedImageSrc,\r\n startOver,\r\n updateSubject,\r\n updateHighlightedImage,\r\n objectSelectionError,\r\n workingMasks,\r\n };\r\n};\r\n","import { makeResetStyles, shorthands } from '@fluentui/react-components';\r\n\r\nexport const useColorButtonStyles = makeResetStyles({\r\n width: '34px',\r\n height: '34px',\r\n ...shorthands.borderRadius('9999px'),\r\n ...shorthands.border('1px', 'solid', '#D1D1D1'),\r\n cursor: 'pointer',\r\n ...shorthands.overflow('hidden'),\r\n});\r\n","import React, { useMemo } from 'react';\r\nimport { mergeClasses, Tooltip } from '@fluentui/react-components';\r\nimport { useColorButtonStyles } from './style';\r\n\r\nfunction hexToBase64Color(hexColor) {\r\n // Create a canvas element\r\n const canvas = document.createElement('canvas');\r\n canvas.width = 34;\r\n canvas.height = 34;\r\n\r\n // Get the 2D drawing context\r\n const ctx = canvas.getContext('2d');\r\n if (!ctx) {\r\n throw new Error('Canvas is not supported in this environment');\r\n }\r\n\r\n // Set the fill style to the provided hex color\r\n ctx.fillStyle = hexColor;\r\n\r\n // Fill the canvas with the color\r\n ctx.fillRect(0, 0, canvas.width, canvas.height);\r\n\r\n // Convert the canvas content to a Base64 data URL\r\n const base64Image = canvas.toDataURL('image/png');\r\n\r\n return base64Image;\r\n}\r\n\r\nexport const ColorButton = (props) => {\r\n const {\r\n color,\r\n draw,\r\n ariaLabel,\r\n } = props;\r\n\r\n const colorButtonStyles = useColorButtonStyles(color);\r\n const src = useMemo(() => hexToBase64Color(color), [color]);\r\n\r\n const onKeyDown = (event) => {\r\n if (event.key === 'Enter') {\r\n draw(color, ariaLabel);\r\n event.preventDefault();\r\n }\r\n };\r\n\r\n return (\r\n \r\n\r\n draw(color, ariaLabel)}\r\n onKeyDown={onKeyDown}\r\n tabIndex={0}\r\n aria-label={ariaLabel}\r\n >\r\n \r\n
    \r\n \r\n );\r\n};\r\n","import { makeResetStyles, shorthands, tokens, } from '@fluentui/react-components';\r\n\r\nexport const useColorControlStyles = makeResetStyles({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'flex-start',\r\n width: '100%',\r\n '& .eyeDropper': {\r\n width: '100%',\r\n position: 'relative',\r\n height: '148px',\r\n marginTop: '8px',\r\n marginBottom: '20px',\r\n '& .eye-dropper-button': {\r\n position: 'absolute',\r\n right: '20px',\r\n width: '40px',\r\n height: '40px',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n bottom: '20px',\r\n ...shorthands.borderRadius('4px'),\r\n backgroundColor: tokens.colorNeutralBackground1,\r\n boxShadow: '0px 4px 8px 0px rgba(0, 0, 0, 0.14), 0px 0px 2px 0px rgba(0, 0, 0, 0.12)',\r\n },\r\n },\r\n '& .design': {\r\n width: '100%',\r\n ...shorthands.padding('20px', '24px'),\r\n '& .design-title': {\r\n color: tokens.colorNeutralForeground3,\r\n fontWeight: tokens.fontWeightSemibold,\r\n },\r\n '& .design-color-chooser': {\r\n marginTop: '12px',\r\n display: 'flex',\r\n ...shorthands.gap('8px'),\r\n flexWrap: 'wrap',\r\n alignItems: 'center',\r\n '& .selected-color-wrapper': {\r\n width: '40px',\r\n height: '40px',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n ...shorthands.borderRadius('2px'),\r\n backgroundColor: tokens.colorNeutralBackground1Selected,\r\n },\r\n '& .add-color-button': {\r\n width: '32px',\r\n height: '32px',\r\n ...shorthands.borderRadius('9999px'),\r\n ...shorthands.border('2px', 'solid', '#616161'),\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n cursor: 'pointer',\r\n '& svg': {\r\n width: '20px',\r\n height: '20px',\r\n },\r\n },\r\n },\r\n '& .color-picker': {\r\n marginTop: '12px',\r\n '& .ms-ColorPicker-panel': {\r\n padding: 'unset',\r\n },\r\n },\r\n },\r\n '& .suggestion': {\r\n ...shorthands.padding('20px', '24px'),\r\n width: '100%',\r\n '& .suggestion-title': {\r\n color: tokens.colorNeutralForeground3,\r\n fontWeight: tokens.fontWeightSemibold,\r\n },\r\n '& .suggestion-color-chooser': {\r\n marginTop: '12px',\r\n ...shorthands.gap('8px'),\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n },\r\n },\r\n});\r\n","import React, { useMemo, useState, useCallback, useRef, useEffect } from 'react';\r\nimport { Text, mergeClasses, Tooltip, useId } from '@fluentui/react-components';\r\nimport { debounce } from 'underscore';\r\nimport {\r\n ColorPicker,\r\n getColorFromString,\r\n} from '@fluentui/react';\r\nimport {\r\n AddRegular,\r\n DismissRegular,\r\n Eyedropper20Regular,\r\n} from '@fluentui/react-icons';\r\nimport {\r\n HiddenDivForAnnounce,\r\n} from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { ColorButton } from './color-button';\r\nimport { useColorControlStyles } from './style';\r\n\r\nconst colors = [{\r\n color: '#000000',\r\n label: _TL_('Black'),\r\n}, {\r\n color: '#ffffff',\r\n label: _TL_('White'),\r\n}, {\r\n color: '#3a3a3a',\r\n label: _TL_('Dark gray'),\r\n}, {\r\n color: '#757575',\r\n label: _TL_('Gray'),\r\n}, {\r\n color: '#cbcbcb',\r\n label: _TL_('Light gray'),\r\n}, {\r\n color: '#e8e8e8',\r\n label: _TL_('Very light gray'),\r\n}, {\r\n color: '#f3f3f3',\r\n label: _TL_('White smoke color'),\r\n}, {\r\n color: '#d34e84',\r\n label: _TL_('Bright pink'),\r\n}, {\r\n color: '#d44d61',\r\n label: _TL_('Bright red'),\r\n}, {\r\n color: '#d56153',\r\n label: _TL_('Soft red'),\r\n}, {\r\n color: '#d48956',\r\n label: _TL_('Soft orange'),\r\n}, {\r\n color: '#d1d05e',\r\n label: _TL_('Soft yellow'),\r\n}, {\r\n color: '#8ed05d',\r\n label: _TL_('Soft green'),\r\n}, {\r\n color: '#50d15f',\r\n label: _TL_('Light green'),\r\n}, {\r\n color: '#4cd19b',\r\n label: _TL_('Bright green'),\r\n}, {\r\n color: '#47bcce',\r\n label: _TL_('Light cyan'),\r\n}, {\r\n color: '#4793cd',\r\n label: _TL_('Light blue'),\r\n}, {\r\n color: '#4c53cb',\r\n label: _TL_('Light navy'),\r\n}, {\r\n color: '#8e52ca',\r\n label: _TL_('Bright purple'),\r\n}, {\r\n color: '#d14fc8',\r\n label: _TL_('Bright pink'),\r\n}];\r\n\r\nexport const ColorControl = (props) => {\r\n const {\r\n i18n,\r\n color,\r\n lastColor,\r\n draw,\r\n logger,\r\n } = props;\r\n\r\n const colorControlStyles = useColorControlStyles();\r\n const colorPicker = useRef(null);\r\n const addColorButton = useRef(null);\r\n\r\n const [showColorPicker, setShowColorPicker] = useState(false);\r\n const [announcedText, setAnnouncedText] = useState('');\r\n const wrappedDraw = useCallback((colorValue, ariaLabel) => {\r\n draw(colorValue);\r\n setAnnouncedText(i18n.getString(_TL_('Set the color to {{colorValue}}'), { colorValue: ariaLabel || colorValue }));\r\n }, [draw, i18n]);\r\n\r\n const handleKeyDown = (event) => {\r\n if (event.key === 'Tab' && event.shiftKey) {\r\n if (addColorButton.current) {\r\n addColorButton.current.focus();\r\n }\r\n event.preventDefault();\r\n }\r\n };\r\n\r\n const toggleColorPicker = () => {\r\n setShowColorPicker(!showColorPicker);\r\n };\r\n\r\n useEffect(() => {\r\n if (showColorPicker && colorPicker.current) {\r\n const target = colorPicker.current.querySelector('.ms-ColorPicker-colorRect');\r\n target.focus();\r\n target.addEventListener('keydown', handleKeyDown);\r\n return () => {\r\n target.removeEventListener('keydown', handleKeyDown);\r\n };\r\n }\r\n return () => {};\r\n }, [showColorPicker]);\r\n\r\n const onAddKeyDown = (event) => {\r\n if (event.key === 'Enter') {\r\n toggleColorPicker();\r\n event.preventDefault();\r\n }\r\n };\r\n\r\n const logSetColorHelper = useCallback((message, data) => {\r\n logger.logTrace(`background change: set the color: ${message}`, data);\r\n }, [logger]);\r\n\r\n const sampleColor = async () => {\r\n if ('EyeDropper' in window) {\r\n // eslint-disable-next-line no-undef\r\n const ed = new EyeDropper();\r\n logger.logTrace('background change: open the eye dropper');\r\n setAnnouncedText(i18n.getString(_TL_('Open eye dropper component to extract color.')));\r\n const newColor = await ed.open();\r\n if (newColor) {\r\n logSetColorHelper('eye dropper color', { color: newColor.sRGBHex });\r\n wrappedDraw(newColor.sRGBHex);\r\n }\r\n }\r\n };\r\n\r\n const onEyeDropperKeyDown = async (event) => {\r\n if (event.key === 'Enter') {\r\n await sampleColor();\r\n event.preventDefault();\r\n }\r\n };\r\n\r\n const debouncedDraw = useMemo(() => debounce(draw, 250), [draw]);\r\n const selectedColorId = useId('selected-color');\r\n const suggestedColorId = useId('suggested-color');\r\n\r\n return (\r\n
    \r\n
    \r\n {'EyeDropper' in window ?\r\n \r\n
    \r\n \r\n
    \r\n : null\r\n }\r\n
    \r\n
    \r\n {i18n.getString(_TL_('Colors used in the image'))}\r\n
    \r\n \r\n \r\n {showColorPicker ? : }\r\n
    \r\n \r\n
    \r\n {\r\n wrappedDraw(colorValue, ariaLabel);\r\n logSetColorHelper('the selected color', { color: ariaLabel || colorValue });\r\n }}\r\n ariaLabel={i18n.getString(_TL_('Selected color'))}\r\n />\r\n
    \r\n {\r\n wrappedDraw(colorValue, ariaLabel);\r\n logSetColorHelper('the last selected color', { color: ariaLabel || colorValue });\r\n }}\r\n ariaLabel={i18n.getString(_TL_('Last used color'))}\r\n />\r\n
    \r\n {showColorPicker &&\r\n
    \r\n {\r\n debouncedDraw(colorObject.str);\r\n logSetColorHelper('the color picker color', { color: colorObject.str });\r\n setAnnouncedText(i18n.getString(_TL_('Set the color to {{colorValue}}'), { colorValue: colorObject.str }));\r\n }}\r\n alphaType=\"none\"\r\n showPreview\r\n strings={{\r\n // By default, the sliders will use the text field labels as their aria labels.\r\n // Previously this example had more detailed instructions in the labels, but this is\r\n // a bad practice and not recommended. Labels should be concise, and match visible text when possible.\r\n hueAriaLabel: i18n.getString(_TL_('Hue')),\r\n alphaLabel: i18n.getString(_TL_('Alpha')),\r\n greenLabel: i18n.getString(_TL_('Green')),\r\n blueLabel: i18n.getString(_TL_('Blue')),\r\n redLabel: i18n.getString(_TL_('Red')),\r\n }}\r\n />\r\n
    }\r\n
    \r\n {!showColorPicker &&\r\n
    \r\n {i18n.getString(_TL_('Suggestions'))}\r\n
    \r\n {\r\n colors.map(item => (\r\n {\r\n wrappedDraw(colorValue, ariaLabel);\r\n logSetColorHelper('the suggested color', { color: ariaLabel || colorValue });\r\n }}\r\n ariaLabel={i18n.getString(item.label)}\r\n />\r\n ))\r\n }\r\n
    \r\n
    }\r\n \r\n \r\n );\r\n};\r\n","import React, { useEffect, useState, useCallback } from 'react';\r\nimport {\r\n Checkmark20Regular,\r\n Dismiss20Regular,\r\n} from '@fluentui/react-icons';\r\nimport { ColorControl } from './color-control';\r\nimport { ImageWithShimmer } from '../../../image-with-shimmer';\r\n\r\nconst ImageToUpdate = (props) => {\r\n const {\r\n targetImage,\r\n isDrawing,\r\n } = props;\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport const useColorControlViewFactoryWithState = (props) => {\r\n const {\r\n selectedImageSrc,\r\n imageUrlWithoutBackground,\r\n drawColorBackground,\r\n imageUrlWithColoredBackground,\r\n goToImageAdjustView,\r\n image,\r\n i18n,\r\n applyImage,\r\n logger,\r\n } = props;\r\n\r\n const [color, setColor] = useState('#4285f4');\r\n const [lastColor, setLastColor] = useState(color);\r\n const [isDrawing, setIsDrawing] = useState(false);\r\n\r\n const draw = (targetColor) => {\r\n setLastColor(color);\r\n setColor(targetColor);\r\n };\r\n\r\n useEffect(() => {\r\n setIsDrawing(true);\r\n drawColorBackground(color, image.width, image.height).then(() => { setIsDrawing(false); });\r\n }, [color, drawColorBackground, image.height, image.width]);\r\n\r\n const updateImage = useCallback(() => {\r\n logger.logTrace('background change: apply the color background', { color });\r\n applyImage({ url: imageUrlWithColoredBackground }, true);\r\n }, [applyImage, color, imageUrlWithColoredBackground, logger]);\r\n\r\n return {\r\n colorControlView: (\r\n \r\n ),\r\n buttonsConfig: [{\r\n text: i18n.getString(_TL_('Apply')),\r\n icon: Checkmark20Regular,\r\n onClick: updateImage,\r\n disabled: isDrawing,\r\n }, {\r\n text: i18n.getString(_TL_('Cancel')),\r\n icon: Dismiss20Regular,\r\n onClick: goToImageAdjustView,\r\n }],\r\n imageView: (),\r\n };\r\n};\r\n","import React, { useMemo, useState, useEffect, useCallback, useRef } from 'react';\r\nimport { Text } from '@fluentui/react-components';\r\nimport {\r\n CheckmarkCircle16Filled,\r\n} from '@fluentui/react-icons';\r\nimport {\r\n SpinnerIcon,\r\n HiddenDivForAnnounce,\r\n} from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { usePromptControlViewFactoryWithState } from './prompt-control-state';\r\nimport { useColorControlViewFactoryWithState } from './color-control-state';\r\n\r\nexport const tabs = {\r\n AI: 'AI',\r\n SolidColor: 'SolidColor',\r\n};\r\n\r\n\r\nexport const useControlViewFactoryWithState = ({\r\n i18n,\r\n originalImage,\r\n resultImage,\r\n imageUrlWithoutBackground,\r\n imageUrlWithGeneratedBackground,\r\n setImageUrlWithGeneratedBackground,\r\n segmentationMasks,\r\n getSegmentations,\r\n generateBackground,\r\n drawColorBackground,\r\n imageUrlWithColoredBackground,\r\n isFetchingSegmentations,\r\n fetchSegmentationError,\r\n goToImageAdjustView,\r\n selectedMasks,\r\n setSelectedMasks,\r\n setSelectedImageSrc,\r\n maskValues,\r\n MultiLineEllipsisText,\r\n selectedImageSrc,\r\n getMaskValueAtPoint,\r\n logger,\r\n applyImage,\r\n}) => {\r\n // Generate the image with the removed background (once when entering the page)\r\n const [isCallRemovingBackground, setIsCallRemovingBackground] = useState(true);\r\n const isRemovingBackground = useMemo(() =>\r\n isCallRemovingBackground || isFetchingSegmentations, [isCallRemovingBackground, isFetchingSegmentations]);\r\n\r\n const [notificationConfig, setNotificationConfig] = useState(null);\r\n const [selectedTab, setSelectedTab] = useState(tabs.AI);\r\n\r\n const dismissNotification = useCallback(() => {\r\n setNotificationConfig(null);\r\n }, []);\r\n\r\n const onTabSelect = useCallback((event, tab) => {\r\n dismissNotification();\r\n logger.logTrace('background change: switch the tab', { tab: tab.value });\r\n setSelectedTab(tab.value);\r\n }, [dismissNotification, logger]);\r\n\r\n const buttonsRef = useRef(null);\r\n const image = useMemo(() => ({\r\n url: originalImage.url,\r\n width: originalImage.width,\r\n height: originalImage.height,\r\n }), [originalImage]);\r\n\r\n const removingBackgroundNotificationConfig = useMemo(() => ({\r\n icon: ,\r\n content: (\r\n <>\r\n {i18n.getString(_TL_('Removing background'))}\r\n \r\n \r\n ),\r\n }), [i18n]);\r\n\r\n const backgroundRemovedNotificationConfig = useMemo(() => {\r\n const content = (\r\n
    \r\n {i18n.getString(_TL_('We\\'ve removed the background. '))}\r\n {i18n.getString(_TL_('You can refine the subject area to keep or remove certain subjects and objects by selecting Edit subject area.'))}\r\n \r\n
    \r\n );\r\n return ({\r\n icon: ,\r\n content,\r\n onDismiss: dismissNotification,\r\n dismissAriaLabel: i18n.getString(_TL_('Close')),\r\n });\r\n }, [dismissNotification, i18n]);\r\n\r\n // fetch the segmentation when entering the page\r\n useEffect(() => {\r\n setIsCallRemovingBackground(true);\r\n setNotificationConfig(removingBackgroundNotificationConfig);\r\n if (image.url) {\r\n getSegmentations({\r\n imageUrl: image.url,\r\n imageWidth: image.width,\r\n imageHeight: image.height,\r\n }).then(() => {\r\n setIsCallRemovingBackground(false);\r\n setNotificationConfig(backgroundRemovedNotificationConfig);\r\n });\r\n }\r\n }, [backgroundRemovedNotificationConfig, getSegmentations, i18n, image.height, image.url, image.width, removingBackgroundNotificationConfig]);\r\n\r\n\r\n const {\r\n promptControlView,\r\n buttonsConfig: promptButtonsConfig,\r\n imageView: promptImageView,\r\n } = usePromptControlViewFactoryWithState({\r\n i18n,\r\n image,\r\n segmentationMasks,\r\n imageUrlWithoutBackground,\r\n setSelectedImageSrc,\r\n selectedMasks,\r\n setSelectedMasks,\r\n selectedImageSrc,\r\n maskValues,\r\n buttonsRef,\r\n setNotificationConfig,\r\n getMaskValueAtPoint,\r\n logger,\r\n generateBackground,\r\n imageUrlWithGeneratedBackground,\r\n setImageUrlWithGeneratedBackground,\r\n fetchSegmentationError,\r\n isRemovingBackground,\r\n isFetchingSegmentations,\r\n resultImage,\r\n goToImageAdjustView,\r\n MultiLineEllipsisText,\r\n applyImage,\r\n });\r\n\r\n const {\r\n colorControlView,\r\n buttonsConfig: colorButtonsConfig,\r\n imageView: colorImageView,\r\n } = useColorControlViewFactoryWithState({\r\n i18n,\r\n image,\r\n logger,\r\n selectedImageSrc,\r\n drawColorBackground,\r\n imageUrlWithColoredBackground,\r\n imageUrlWithoutBackground,\r\n goToImageAdjustView,\r\n applyImage,\r\n });\r\n\r\n const buttonsConfig = selectedTab === tabs.AI ? promptButtonsConfig : colorButtonsConfig;\r\n const imageView = selectedTab === tabs.AI ? promptImageView : colorImageView;\r\n\r\n return {\r\n promptControlView,\r\n colorControlView,\r\n buttonsConfig,\r\n imageView,\r\n notificationConfig,\r\n selectedTab,\r\n onTabSelect,\r\n buttonsRef,\r\n isRemovingBackground,\r\n };\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { makeResetStyles, mergeClasses, shorthands } from '@fluentui/react-components';\r\nimport { MessageBar, MessageBarBody } from '@fluentui/react-message-bar';\r\n\r\n\r\nconst useBackgroundChangeDisclaimerStyles = makeResetStyles({\r\n position: 'absolute',\r\n top: '0',\r\n width: '100%',\r\n ...shorthands.padding('0', '8px'),\r\n});\r\n\r\nexport const BackgroundChangeDisclaimer = (props) => {\r\n const {\r\n i18n,\r\n } = props;\r\n\r\n const classes = useBackgroundChangeDisclaimerStyles();\r\n\r\n return (\r\n
    \r\n \r\n \r\n {i18n.getString(_TL_('Note that AI-generated content may not always be accurate. Please double-check, crop, and verify AI-generated content before using it.'))}\r\n \r\n \r\n
    );\r\n};\r\n\r\n\r\nBackgroundChangeDisclaimer.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n};\r\n\r\nBackgroundChangeDisclaimer.defaultProps = {\r\n};\r\n","import React, { useEffect } from 'react';\r\nimport { Button, Tab,\r\n TabList, mergeClasses } from '@fluentui/react-components';\r\nimport {\r\n ArrowLeftFilled,\r\n ColorBackground20Regular,\r\n} from '@fluentui/react-icons';\r\nimport {\r\n HollowSparkleSVGIcon,\r\n} from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { setClarityTag } from '@bingads-webui-universal/clarity';\r\nimport { usePageActiveTimeTracker } from '@bingads-webui-campaign-react/common-hooks';\r\n\r\nimport { ImagePreviewView } from '../image-preview-view';\r\nimport { useBackgroundChangeStyles } from './style';\r\nimport { tabs, useControlViewFactoryWithState } from './state';\r\nimport { BackgroundChangeDisclaimer } from '../../../background-change-disclaimer';\r\n\r\nexport const BackgroundChangeView = (props) => {\r\n const {\r\n i18n,\r\n MultiLineEllipsisText,\r\n goToImageAdjustView,\r\n imageUrlWithoutBackground,\r\n drawColorBackground,\r\n imageUrlWithColoredBackground,\r\n imageUrlWithGeneratedBackground,\r\n setImageUrlWithGeneratedBackground,\r\n logger,\r\n originalImage,\r\n resultImage,\r\n getMaskValueAtPoint,\r\n segmentationMasks,\r\n setSelectedImageSrc,\r\n selectedImageSrc, // the image after user selected objects\r\n selectedMasks,\r\n setSelectedMasks,\r\n maskValues,\r\n fetchSegmentationError,\r\n isFetchingSegmentations,\r\n getSegmentations,\r\n generateBackground,\r\n onApplyImage,\r\n } = props;\r\n\r\n const classes = useBackgroundChangeStyles();\r\n\r\n const {\r\n colorControlView,\r\n promptControlView,\r\n buttonsConfig,\r\n imageView,\r\n notificationConfig,\r\n selectedTab,\r\n onTabSelect,\r\n buttonsRef,\r\n isRemovingBackground,\r\n } = useControlViewFactoryWithState({\r\n i18n,\r\n logger,\r\n originalImage,\r\n resultImage,\r\n goToImageAdjustView,\r\n getSegmentations,\r\n generateBackground,\r\n drawColorBackground,\r\n imageUrlWithColoredBackground,\r\n imageUrlWithoutBackground,\r\n imageUrlWithGeneratedBackground,\r\n setImageUrlWithGeneratedBackground,\r\n getMaskValueAtPoint,\r\n segmentationMasks,\r\n setSelectedImageSrc,\r\n selectedImageSrc,\r\n selectedMasks,\r\n setSelectedMasks,\r\n maskValues,\r\n fetchSegmentationError,\r\n isFetchingSegmentations,\r\n MultiLineEllipsisText,\r\n applyImage: onApplyImage,\r\n });\r\n\r\n usePageActiveTimeTracker(logger, 'background change:');\r\n\r\n useEffect(() => {\r\n setClarityTag({ LoadAdsStudioBackgroundRemovalPage: true });\r\n }, []);\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n }\r\n onClick={() => { goToImageAdjustView(); }}\r\n >\r\n {i18n.getString(_TL_('Adjust'))}\r\n \r\n
    \r\n
    \r\n \r\n }\r\n disabled={isRemovingBackground || fetchSegmentationError !== ''}\r\n >\r\n {i18n.getString(_TL_('Expand background'))}\r\n \r\n }\r\n >\r\n {i18n.getString(_TL_('Solid color'))}\r\n \r\n \r\n
    \r\n {selectedTab === tabs.AI && (promptControlView)}\r\n {selectedTab === tabs.SolidColor && (colorControlView)}\r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n );\r\n};\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\nimport backgroundImg from '../../media/updateBg.png';\r\n\r\nexport const useStyles = makeStyles({\r\n container: {\r\n maxWidth: '500px',\r\n\r\n '& .dialog-body': {\r\n ...shorthands.overflow('hidden'),\r\n },\r\n\r\n '& .update-image': {\r\n width: '324px',\r\n height: '189px',\r\n backgroundSize: '100% 100%',\r\n backgroundImage: `url(\"${backgroundImg}\")`,\r\n ...shorthands.margin('4px', 'auto', '16px', 'auto'),\r\n },\r\n\r\n '& .tip-title': {\r\n fontFamily: 'Segoe UI',\r\n fontWeight: '600',\r\n fontSize: '16px',\r\n lineHeight: '20px',\r\n },\r\n\r\n '& .tip-info': {\r\n ...shorthands.margin('12px', '0', '16px', '0'),\r\n fontFamily: 'Segoe UI',\r\n fontWeight: '400',\r\n fontSize: '14px',\r\n lineHeight: '20px',\r\n color: '#605E5C',\r\n ...shorthands.overflow('hidden'),\r\n },\r\n\r\n '& .error-tip': {\r\n marginBottom: '16px',\r\n\r\n '& .alert.alert-danger': {\r\n ...shorthands.padding('8px'),\r\n },\r\n\r\n '& .alert__icon': {\r\n color: '#A80000',\r\n width: '16px',\r\n height: '16px',\r\n fontSize: '16px',\r\n lineHeight: '16px',\r\n marginRight: '8px',\r\n },\r\n },\r\n },\r\n});\r\n","import React, { useCallback, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\n\r\nimport {\r\n Dialog,\r\n DialogTrigger,\r\n DialogSurface,\r\n DialogTitle,\r\n DialogContent,\r\n DialogBody,\r\n DialogActions,\r\n Button,\r\n} from '@fluentui/react-components';\r\nimport { Dismiss20Regular, DismissCircle20Regular } from '@fluentui/react-icons';\r\n\r\nimport { useStyles } from './style';\r\n\r\nexport const UpdateConfirmDialog = ({\r\n i18n,\r\n open,\r\n setOpen,\r\n onSave,\r\n invalidRatioList,\r\n}) => {\r\n const classes = useStyles();\r\n\r\n // Simplify the logic for generating error info.\r\n // Currently, error info will not be empty only for multimedia ads since the minsize limitation.\r\n const errorTip = useMemo(() => {\r\n if (invalidRatioList.length === 1) {\r\n return i18n.getString(\r\n _TL_('Your image doesn\\'t meet the size requirements for {{ratio}} {{previewName}} ads. This means that any multimedia ads using this image won\\'t serve in that ad placement'),\r\n {\r\n ratio: invalidRatioList[0].aspectRatioAsRatio,\r\n previewName: i18n.getString(invalidRatioList[0].previewTypeString),\r\n }\r\n );\r\n } else if (invalidRatioList.length === 2) {\r\n return i18n.getString(\r\n _TL_('Your image doesn\\'t meet the size requirements for {{ratio1}} {{previewName1}} and {{ratio2}} {{previewName2}} ads. This means that any multimedia ads using this image won\\'t serve in that ad placement'),\r\n {\r\n ratio1: invalidRatioList[0].aspectRatioAsRatio,\r\n previewName1: i18n.getString(invalidRatioList[0].previewTypeString),\r\n ratio2: invalidRatioList[1].aspectRatioAsRatio,\r\n previewName2: i18n.getString(invalidRatioList[1].previewTypeString),\r\n }\r\n );\r\n }\r\n\r\n return '';\r\n }, [i18n, invalidRatioList]);\r\n\r\n const closeDialog = useCallback(() => {\r\n setOpen(false);\r\n }, [setOpen]);\r\n\r\n const onUpdate = useCallback(() => {\r\n onSave();\r\n closeDialog();\r\n }, [closeDialog, onSave]);\r\n\r\n const DismissIcon = useMemo(() => (\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\nUpdateConfirmDialog.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n open: PropTypes.bool.isRequired,\r\n setOpen: PropTypes.func.isRequired,\r\n onSave: PropTypes.func.isRequired,\r\n invalidRatioList: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n};\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nexport const useStyles = makeStyles({\r\n editImagePage: {\r\n height: '100%',\r\n display: 'flex',\r\n },\r\n navigationView: {\r\n backgroundColor: '#FFFFFF',\r\n width: '85px',\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n bottom: '32px',\r\n },\r\n navigationPlaceholder: {\r\n position: 'absolute',\r\n left: 0,\r\n bottom: 0,\r\n width: '85px',\r\n height: '32px',\r\n backgroundColor: '#FFFFFF',\r\n zIndex: -1,\r\n },\r\n contentWrapper: {\r\n height: '100%',\r\n backgroundColor: '#F0F0F0',\r\n paddingLeft: '12px',\r\n paddingTop: '12px',\r\n marginLeft: '85px',\r\n ...shorthands.flex(1, 1, '0px'),\r\n },\r\n});\r\n","/* eslint-disable no-unused-vars */\r\nimport React, { useCallback, useMemo, useEffect, useState, useLayoutEffect } from 'react';\r\nimport queryString from 'query-string';\r\nimport { mergeClasses } from '@fluentui/react-components';\r\nimport { Overlay } from '@bingads-webui-react/fabric-control';\r\nimport { AdsStudioSpinner } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { setClarityTag } from '@bingads-webui-universal/clarity';\r\nimport { Mode } from '@bingads-webui-react/app-layout-container';\r\n\r\nimport { useEditImageState } from './model/use-edit-image-state';\r\nimport { ViewName } from './model/utils';\r\nimport { ImageAdjustView, AdPlacementListView, SaveButtonInSummaryBar, NavigationView, BackgroundChangeView, PlacementEditView, UpdateConfirmDialog } from './views';\r\nimport { useStyles } from './style';\r\n\r\nexport const EditImagePageComponent = ({\r\n dataService,\r\n imageId,\r\n search,\r\n i18n,\r\n pagePerfMarker: editPagePerfMarker,\r\n permissions,\r\n logger,\r\n getSmartCroppings,\r\n MultiLineEllipsisText,\r\n navigation,\r\n isAIGCRegionRestricted,\r\n notificationApi,\r\n getAssetEnhancementSettings,\r\n changeLayout,\r\n setDataLoaded,\r\n}) => {\r\n const classes = useStyles();\r\n const queries = queryString.parse(search);\r\n const {\r\n folderId = '', editImageUrl = '', initialCurrentView = '',\r\n } = queries || {};\r\n\r\n const {\r\n originalImage,\r\n resultImage,\r\n currentView,\r\n setCurrentView,\r\n filterIndex,\r\n setFilterIndex,\r\n backgroundBlurEnabled,\r\n toggleBackgroundBlur,\r\n changeBackgroundBlurLevel,\r\n backgroundBlurLevel,\r\n getImagesWithFilter,\r\n loadingStatus,\r\n initialAssetLoading,\r\n saveImageDirectly,\r\n imagesWithFilter,\r\n placementList,\r\n firstImage,\r\n onEditPlacement,\r\n editingPlacementInfo,\r\n adType,\r\n showRequiredOnly,\r\n previewTexts,\r\n previewImage,\r\n maxCropBox,\r\n saveCropPlacement,\r\n cancelCropPlacement,\r\n switchAdType,\r\n switchShowRequiredOnly,\r\n // Background change view states\r\n getSegmentations,\r\n generateBackground,\r\n drawColorBackground,\r\n imageUrlWithColoredBackground,\r\n imageUrlWithoutBackground,\r\n imageUrlWithGeneratedBackground,\r\n setImageUrlWithGeneratedBackground,\r\n getMaskValueAtPoint,\r\n segmentationMasks,\r\n setSelectedImageSrc,\r\n selectedImageSrc, // the image after user selected objects\r\n selectedMasks,\r\n setSelectedMasks,\r\n maskValues,\r\n fetchSegmentationError,\r\n isFetchingSegmentations,\r\n replaceBackground,\r\n saveAsCopy,\r\n isStockImage,\r\n isImageUpdated,\r\n disableSave,\r\n haveCroppingTasks,\r\n isConfirmDialogOpen,\r\n setIsConfirmDialogOpen,\r\n onConfirmDialogSave,\r\n allSizeInvalidRatioList,\r\n saveButtonTooltip,\r\n updateAdPlacementImage,\r\n } = useEditImageState({\r\n imageId,\r\n folderId,\r\n dataService,\r\n editImageUrl,\r\n i18n,\r\n perfMarker: editPagePerfMarker,\r\n permissions,\r\n logger,\r\n getSmartCroppings,\r\n navigation,\r\n initialCurrentView,\r\n getAssetEnhancementSettings,\r\n setDataLoaded,\r\n });\r\n\r\n const adjustButtonTooltip = useMemo(() => {\r\n if (isStockImage) {\r\n return i18n.getString(_TL_('You cannot adjust or edit Shutterstock images.'));\r\n }\r\n return undefined;\r\n }, [i18n, isStockImage]);\r\n\r\n const isSaveAsCopyDisabled = useMemo(() => isStockImage || !isImageUpdated, [isImageUpdated, isStockImage]);\r\n\r\n const baseButtonText = useMemo(() => {\r\n if (isImageUpdated) {\r\n return i18n.getString(_TL_('Save as copy'));\r\n }\r\n return i18n.getString(_TL_('Save'));\r\n }, [i18n, isImageUpdated]);\r\n\r\n const onBaseButtonClick = useCallback(() => {\r\n if (isImageUpdated) {\r\n saveAsCopy();\r\n } else {\r\n saveImageDirectly();\r\n }\r\n }, [isImageUpdated, saveAsCopy, saveImageDirectly]);\r\n\r\n const goToBackgroundChangeView = useCallback(() => {\r\n setCurrentView(ViewName.BackgroundChangeView);\r\n }, [setCurrentView]);\r\n\r\n const goToImageAdjustView = useCallback(() => {\r\n setCurrentView(ViewName.ImageAdjustView);\r\n setImageUrlWithGeneratedBackground(null);\r\n }, [setCurrentView, setImageUrlWithGeneratedBackground]);\r\n\r\n const gotoPlacementEditView = useCallback((placement) => {\r\n onEditPlacement(placement);\r\n setCurrentView(ViewName.PlacementEditView);\r\n }, [setCurrentView, onEditPlacement]);\r\n\r\n const goToPlacementListView = useCallback(() => {\r\n setCurrentView(ViewName.PlacementListView);\r\n }, [setCurrentView]);\r\n\r\n useEffect(() => {\r\n setClarityTag({ LoadAdsStudioImageEditingPage: true });\r\n }, []);\r\n\r\n useLayoutEffect(() => {\r\n if (changeLayout) {\r\n changeLayout(\r\n {\r\n nav: {\r\n mode: Mode.Hidden,\r\n },\r\n },\r\n true, // isPageConfig\r\n true // isPageConfigPartialUpdate\r\n );\r\n }\r\n }, [changeLayout]);\r\n\r\n return (\r\n
    \r\n \r\n {!initialAssetLoading &&\r\n
    \r\n \r\n
    \r\n }\r\n
    \r\n
    \r\n {\r\n currentView === ViewName.PlacementListView &&\r\n \r\n }\r\n {\r\n currentView === ViewName.PlacementEditView &&\r\n \r\n }\r\n {\r\n currentView === ViewName.ImageAdjustView &&\r\n \r\n }\r\n {\r\n currentView === ViewName.BackgroundChangeView &&\r\n \r\n }\r\n \r\n {\r\n loadingStatus &&\r\n \r\n \r\n \r\n }\r\n
    \r\n
    \r\n );\r\n};\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nexport const useLayoutStyles = makeStyles({\r\n layer: {\r\n top: '60px',\r\n zIndex: '1000',\r\n },\r\n overlay: {\r\n backgroundColor: 'rgba(0, 0, 0, 0.66)',\r\n },\r\n previewContainer: {\r\n width: '100%',\r\n height: '100%',\r\n paddingRight: '480px',\r\n cursor: 'auto',\r\n },\r\n spinner: {\r\n width: '100%',\r\n height: '100%',\r\n zIndex: '2',\r\n position: 'absolute',\r\n },\r\n});\r\n\r\nexport const usePreviewBaseStyles = makeStyles({\r\n previewContainer: {\r\n width: '100%',\r\n height: '100%',\r\n position: 'relative',\r\n },\r\n content: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n width: '100%',\r\n height: '100%',\r\n ...shorthands.padding('26px', '20px', '74px', '20px'),\r\n },\r\n fadeOut: {\r\n opacity: 0,\r\n ...shorthands.transition('all', '0.1s', 'linear'),\r\n },\r\n});\r\n\r\nexport const useSequentialNavigatorStyles = makeStyles({\r\n sequentialNavigatorContainer: {\r\n position: 'absolute',\r\n bottom: '32px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n width: '100%',\r\n height: '16px',\r\n color: 'white',\r\n },\r\n navigatorStatusContainer: {\r\n fontFamily: 'Segoe UI',\r\n fontStyle: 'normal',\r\n fontWeight: '600',\r\n fontSize: '12px',\r\n lineHeight: '16px',\r\n ...shorthands.margin('0', '12px', '0', '12px'),\r\n },\r\n iconButton: {\r\n fontFamily: 'MsAds MDL2 Assets !important',\r\n fontSize: '16px',\r\n lineHeight: '16px',\r\n backgroundColor: 'transparent',\r\n ...shorthands.border('none'),\r\n ...shorthands.padding('0px'),\r\n color: 'white',\r\n },\r\n chevronLeft: {\r\n '&:before': {\r\n content: '\"\\\\E76B\"',\r\n },\r\n },\r\n chevronRight: {\r\n '&:before': {\r\n content: '\"\\\\E76C\"',\r\n },\r\n },\r\n disabledIcon: {\r\n color: 'rgba(255, 255, 255, 0.5)',\r\n },\r\n});\r\n\r\nexport const useNonActiveVideoPreviewStyle = makeStyles({\r\n container: {\r\n height: '500px',\r\n maxWidth: '746px',\r\n width: '100%',\r\n flexGrow: '1',\r\n },\r\n failedIconContainer: {\r\n color: 'orange',\r\n },\r\n});\r\n\r\nexport const usePanelStyle = makeStyles({\r\n detailPanel: {\r\n width: '480px',\r\n top: '60px',\r\n },\r\n header: {\r\n paddingTop: '16px',\r\n },\r\n content: {\r\n ...shorthands.padding('0', '32px'),\r\n },\r\n footer: {\r\n width: '100%',\r\n ...shorthands.borderTop('1px', 'solid', '#EDEBE9'),\r\n ...shorthands.padding('8px', '24px'),\r\n },\r\n footerButton: {\r\n display: 'block',\r\n width: '60px',\r\n minWidth: '0px',\r\n ...shorthands.overflow('hidden'),\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n },\r\n navigation: {\r\n marginLeft: '32px',\r\n },\r\n});\r\n\r\nexport const useDetailPanelStyle = makeStyles({\r\n imageUsage: {\r\n marginTop: '24px',\r\n marginLeft: '28px',\r\n },\r\n});\r\n\r\nexport const useInfoPaneHeaderStyle = makeStyles({\r\n detailHeader: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n position: 'relative',\r\n },\r\n panelTitle: {\r\n fontFamily: 'Segoe UI',\r\n fontWeight: 600,\r\n fontSize: '20px',\r\n lineHeight: '27px',\r\n minWidth: '0px',\r\n flexGrow: 1,\r\n },\r\n buttonBox: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n // iconBox: getSharedIconBoxStyle({ palette }),\r\n editBox: {\r\n width: '75px',\r\n minWidth: '0px',\r\n marginRight: '8px',\r\n },\r\n deleteBox: {\r\n width: '92px',\r\n marginRight: '8px',\r\n minWidth: '0px',\r\n },\r\n icon: {\r\n width: '20px',\r\n height: '20px',\r\n },\r\n headerText: {\r\n width: '45px',\r\n textAlign: 'center',\r\n fontFamily: 'Segoe UI',\r\n fontWeight: '600',\r\n fontSize: '14px',\r\n lineHeight: '20px',\r\n // color: palette.neutralPrimary,\r\n marginLeft: '4px',\r\n ...shorthands.overflow('hidden'),\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n },\r\n disabledButton: {\r\n // color: `${palette.neutralTertiary} !important`,\r\n },\r\n closeButton: {\r\n width: '32px',\r\n height: '32px',\r\n },\r\n});\r\n\r\nexport const useInfoItemDefaultStyles = makeStyles({\r\n contentItem: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n fontFamily: 'Segoe UI',\r\n fontWeight: '400',\r\n fontSize: '14px',\r\n lineHeight: '19px',\r\n marginTop: '8px',\r\n },\r\n contentName: {\r\n // color: palette.neutralSecondary,\r\n marginRight: '8px',\r\n width: '97px',\r\n },\r\n contentValue: {\r\n // color: palette.neutralPrimary,\r\n maxWidth: '230px',\r\n ...shorthands.overflow('hidden'),\r\n textOverflow: 'ellipsis',\r\n wordBreak: 'break-all',\r\n whiteSpace: 'nowrap',\r\n },\r\n});\r\n\r\nexport const useItemInfoContentStyles = makeStyles({\r\n contentBox: {\r\n width: '100%',\r\n paddingTop: '10px',\r\n // background: palette.neutralLighterAlt,\r\n },\r\n detailContentWrapper: {\r\n ...shorthands.overflow('hidden'),\r\n ...shorthands.borderTop('1px', 'solid', '#EDEBE9'),\r\n paddingTop: '8px',\r\n },\r\n linkContainer: {\r\n marginTop: '24px',\r\n marginLeft: '28px',\r\n },\r\n});\r\n\r\nexport const useInfoPaneItemRenameStyle = makeStyles({\r\n nameContentBox: {\r\n paddingBottom: '12px',\r\n paddingTop: '8px',\r\n position: 'relative',\r\n },\r\n addNameBox: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n addNameTitle: {\r\n fontFamily: 'Segoe UI',\r\n fontSize: '14px',\r\n fontWeight: '600',\r\n lineHeight: '32px',\r\n color: '#484644',\r\n },\r\n addNameIcon: {\r\n color: '#0078D4',\r\n cursor: 'pointer',\r\n marginLeft: '12px',\r\n },\r\n nameBox: {\r\n fontFamily: 'Segoe UI',\r\n fontSize: '14px',\r\n fontWeight: '400',\r\n lineHeight: '19px',\r\n color: '#484644',\r\n maxWidth: '230px',\r\n ...shorthands.overflow('hidden'),\r\n textOverflow: 'ellipsis',\r\n wordBreak: 'break-all',\r\n whiteSpace: 'nowrap',\r\n },\r\n editNameBox: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n textField: {\r\n width: '300px',\r\n marginRight: '12px',\r\n '& input[type=\"text\"]::placeholder ': {\r\n color: '#686868',\r\n },\r\n },\r\n completeIcon: {\r\n marginRight: '16px',\r\n },\r\n});\r\n\r\nexport const useItemInfoCopyUrlStyles = makeStyles({\r\n contentItem: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n fontFamily: 'Segoe UI',\r\n fontWeight: '400',\r\n fontSize: '14px',\r\n lineHeight: '19px',\r\n marginTop: '8px',\r\n },\r\n contentName: {\r\n marginRight: '8px',\r\n width: '97px',\r\n },\r\n contentValue: {\r\n maxWidth: '230px',\r\n ...shorthands.overflow('hidden'),\r\n textOverflow: 'ellipsis',\r\n wordBreak: 'break-all',\r\n whiteSpace: 'nowrap',\r\n },\r\n copyUrl: {\r\n backgroundColor: 'transparent',\r\n fontFamily: 'Segoe UI',\r\n fontWeight: '400',\r\n fontSize: '14px',\r\n lineHeight: '20px',\r\n color: '#106ebe',\r\n ...shorthands.border('none'),\r\n ...shorthands.textDecoration('underline'),\r\n },\r\n});\r\n\r\nexport const useItemInfoVideoQualityStyles = makeStyles({\r\n contentItem: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n fontFamily: 'Segoe UI',\r\n fontWeight: '400',\r\n fontSize: '14px',\r\n lineHeight: '19px',\r\n marginTop: '8px',\r\n },\r\n contentName: {\r\n marginRight: '8px',\r\n width: '97px',\r\n },\r\n contentValue: {\r\n maxWidth: '230px',\r\n ...shorthands.overflow('hidden'),\r\n textOverflow: 'ellipsis',\r\n wordBreak: 'break-all',\r\n whiteSpace: 'nowrap',\r\n },\r\n qualityBadge: {\r\n width: '50px',\r\n paddingBottom: '1px',\r\n },\r\n});\r\n\r\nexport const usePerformanceContentStyles = makeStyles({\r\n dropdown: {\r\n minWidth: '0px',\r\n width: '160px',\r\n ...shorthands.margin('12px', '0px', '8px'),\r\n },\r\n metricBox: {\r\n height: '290px',\r\n position: 'relative',\r\n },\r\n loading: {\r\n opacity: '0.2',\r\n },\r\n spinner: {\r\n position: 'absolute',\r\n top: '0px',\r\n },\r\n});\r\n\r\nexport const useExternalLinkStyles = makeStyles({\r\n externalButton: {\r\n marginTop: '24px',\r\n display: 'flex',\r\n ...shorthands.padding('6px', '12px'),\r\n ...shorthands.border('0px'),\r\n backgroundColor: 'transparent !important',\r\n },\r\n text: {\r\n marginLeft: '4px',\r\n fontFamily: 'Segoe UI',\r\n fontSize: '14px',\r\n fontWeight: '600',\r\n lineHeight: '32px',\r\n },\r\n});\r\n\r\n","import classnames from 'classnames';\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useSequentialNavigatorStyles } from '../../styles';\r\n\r\nexport const SequentialNavigator = ({\r\n totalCount,\r\n currentIndex,\r\n onNext,\r\n onPrevious,\r\n i18n,\r\n}) => {\r\n const classes = useSequentialNavigatorStyles();\r\n\r\n const disableLeft = currentIndex === 0;\r\n const disableRight = currentIndex + 1 === totalCount;\r\n\r\n return (\r\n
    \r\n {\r\n totalCount > 1 &&\r\n \r\n }\r\n
    {`${currentIndex + 1}/${totalCount}`}
    \r\n {\r\n totalCount > 1 &&\r\n \r\n }\r\n
    \r\n );\r\n};\r\n\r\nSequentialNavigator.propTypes = {\r\n totalCount: PropTypes.number.isRequired,\r\n currentIndex: PropTypes.number.isRequired,\r\n onNext: PropTypes.func.isRequired,\r\n onPrevious: PropTypes.func.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport { usePreviewBaseStyles } from '../../styles';\r\nimport { SequentialNavigator } from './sequential-navigator';\r\n\r\nexport const AssetItemPreviewBase = ({\r\n itemData,\r\n totalCount,\r\n currentIndex,\r\n onNext,\r\n onPrevious,\r\n shouldHideContent,\r\n i18n,\r\n onRenderPreviewContent,\r\n}) => {\r\n const classes = usePreviewBaseStyles();\r\n\r\n return (\r\n
    \r\n
    \r\n {onRenderPreviewContent({ itemData })}\r\n
    \r\n \r\n
    \r\n );\r\n};\r\n\r\nAssetItemPreviewBase.propTypes = {\r\n itemData: PropTypes.shape({}),\r\n totalCount: PropTypes.number.isRequired,\r\n currentIndex: PropTypes.number.isRequired,\r\n onNext: PropTypes.func.isRequired,\r\n onPrevious: PropTypes.func.isRequired,\r\n shouldHideContent: PropTypes.bool,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n onRenderPreviewContent: PropTypes.func.isRequired,\r\n};\r\n\r\nAssetItemPreviewBase.defaultProps = {\r\n itemData: null,\r\n shouldHideContent: false,\r\n};\r\n","import React, { useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Image } from '@fluentui/react-components';\r\nimport { AssetItemPreviewBase } from './asset-preview-base/asset-item-preview-base';\r\n\r\nexport const ImagePreview = ({\r\n itemInfo,\r\n totalCount,\r\n currentIndex,\r\n onNext,\r\n onPrevious,\r\n shouldHideContent,\r\n i18n,\r\n}) => {\r\n const { url: imageSrc } = itemInfo || {};\r\n\r\n const onRenderPreviewContent = useCallback(() => (\r\n \r\n ), [i18n, imageSrc]);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nImagePreview.propTypes = {\r\n totalCount: PropTypes.number.isRequired,\r\n currentIndex: PropTypes.number.isRequired,\r\n onNext: PropTypes.func.isRequired,\r\n onPrevious: PropTypes.func.isRequired,\r\n shouldHideContent: PropTypes.bool,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n};\r\n\r\nImagePreview.defaultProps = {\r\n shouldHideContent: false,\r\n};\r\n","import React, { useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { VideoStatus, ItemPlaceholderBoxView, ItemPlaceholderBoxViewFooterType, videoIcon } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { useNonActiveVideoPreviewStyle } from '../styles';\r\n\r\nconst VideoStatusPreviewConfig = {\r\n [VideoStatus.Draft]: {\r\n text: {\r\n summary: _TL_('Processing.'),\r\n tip: _TL_('When processing is complete, you can preview your asset here.'),\r\n },\r\n },\r\n\r\n [VideoStatus.Transcoding]: {\r\n text: {\r\n summary: _TL_('Processing.'),\r\n tip: _TL_('When processing is complete, you can preview your asset here.'),\r\n },\r\n },\r\n\r\n [VideoStatus.Unverified]: {\r\n text: {\r\n summary: _TL_('Downloading.'),\r\n tip: _TL_('When the download is complete, you can preview your asset here.'),\r\n },\r\n },\r\n\r\n [VideoStatus.Failed]: {\r\n type: ItemPlaceholderBoxViewFooterType.warning,\r\n fabricIconName: 'Warning',\r\n fabricIconDynamicClassName: 'failedIconContainer',\r\n text: {\r\n summary: _TL_('Invalid.'),\r\n tip: _TL_('Delete the asset and try again.'),\r\n learnMoreLinkText: _TL_('Learn more about asset guidelines and accepted file types.'),\r\n },\r\n learnMoreLinkTopic: 'app54863',\r\n },\r\n};\r\n\r\nexport const NonActiveVideoPreview = ({\r\n status,\r\n i18n,\r\n}) => {\r\n const classes = useNonActiveVideoPreviewStyle();\r\n const footerProps = useMemo(() => {\r\n const mappedConfig = VideoStatusPreviewConfig[status];\r\n const localizedTextFields = _.mapObject(\r\n mappedConfig.text,\r\n text => i18n.getString(text)\r\n );\r\n\r\n return {\r\n type: mappedConfig.type,\r\n learnMoreLinkTopic: mappedConfig.learnMoreLinkTopic,\r\n fabricIconName: mappedConfig.fabricIconName,\r\n fabricIconClassName: classes[mappedConfig.fabricIconDynamicClassName],\r\n ...localizedTextFields,\r\n };\r\n }, [classes, i18n, status]);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nNonActiveVideoPreview.propTypes = {\r\n status: PropTypes.oneOf(Object.keys(VideoStatus)).isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n};\r\n","import React, { useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { VideoStatus, VideoPlaybackView } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { AssetItemPreviewBase } from './asset-preview-base/asset-item-preview-base';\r\nimport { NonActiveVideoPreview } from './non-active-video-preview';\r\n\r\nexport const VideoPreview = ({\r\n itemInfo,\r\n totalCount,\r\n currentIndex,\r\n onNext,\r\n onPrevious,\r\n shouldHideContent,\r\n i18n,\r\n}) => {\r\n const { thumbnailUrl, url, status } = itemInfo;\r\n\r\n const onRenderPreviewContent = useCallback(() => {\r\n if (status === VideoStatus.Active) {\r\n return ();\r\n }\r\n\r\n return ();\r\n }, [thumbnailUrl, url, status, i18n]);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nVideoPreview.propTypes = {\r\n videoInfo: PropTypes.shape({\r\n url: PropTypes.string,\r\n thumbnailUrl: PropTypes.string,\r\n status: PropTypes.string,\r\n }),\r\n totalCount: PropTypes.number.isRequired,\r\n currentIndex: PropTypes.number.isRequired,\r\n onNext: PropTypes.func.isRequired,\r\n onPrevious: PropTypes.func.isRequired,\r\n shouldHideContent: PropTypes.bool,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n};\r\n\r\nVideoPreview.defaultProps = {\r\n shouldHideContent: false,\r\n videoInfo: null,\r\n};\r\n","import React, { useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { Button, mergeClasses } from '@fluentui/react-components';\r\nimport {\r\n DrawerOverlay,\r\n DrawerHeader,\r\n DrawerHeaderTitle,\r\n DrawerBody,\r\n DrawerFooter,\r\n} from '@fluentui/react-drawer';\r\nimport { usePanelStyle } from '../../styles';\r\n\r\nexport const ItemDetailsPanelBase = ({\r\n dismiss,\r\n isOpen,\r\n onRenderHeader,\r\n i18n,\r\n children,\r\n footerKeyDownHandler,\r\n}) => {\r\n const classes = usePanelStyle();\r\n\r\n const onFooterKeyDown = useCallback((event) => {\r\n if (_.isFunction(footerKeyDownHandler)) {\r\n footerKeyDownHandler(event);\r\n }\r\n }, [footerKeyDownHandler]);\r\n\r\n const onRenderFooterContent = useCallback(\r\n () => (\r\n
    \r\n \r\n
    \r\n ),\r\n [classes.footer, classes.footerButton, dismiss, i18n, onFooterKeyDown]\r\n );\r\n\r\n return (\r\n \r\n
    \r\n \r\n \r\n {onRenderHeader}\r\n \r\n \r\n
    \r\n \r\n {children}\r\n \r\n \r\n {onRenderFooterContent}\r\n \r\n \r\n );\r\n};\r\n\r\nItemDetailsPanelBase.propTypes = {\r\n dismiss: PropTypes.func.isRequired,\r\n isOpen: PropTypes.bool,\r\n onRenderHeader: PropTypes.func.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n children: PropTypes.element,\r\n footerKeyDownHandler: PropTypes.func,\r\n};\r\n\r\nItemDetailsPanelBase.defaultProps = {\r\n isOpen: false,\r\n children: null,\r\n footerKeyDownHandler: _.noop,\r\n};\r\n","import React from 'react';\r\nimport _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport { Button, mergeClasses } from '@fluentui/react-components';\r\nimport { DeleteRegular, EditRegular, Dismiss24Regular } from '@fluentui/react-icons';\r\nimport { useInfoPaneHeaderStyle } from '../../styles';\r\n\r\nexport const InfoPaneHeader = ({\r\n isReadonly,\r\n i18n,\r\n title,\r\n onDelete,\r\n disableEdit,\r\n onEdit,\r\n dismiss,\r\n}) => {\r\n const classes = useInfoPaneHeaderStyle();\r\n\r\n return (\r\n
    \r\n
    {title}
    \r\n
    \r\n \r\n \r\n
    {i18n.getString(_TL_('Delete'))}
    \r\n \r\n\r\n { !disableEdit &&\r\n \r\n \r\n
    {i18n.getString(_TL_('Edit'))}
    \r\n \r\n }\r\n }\r\n onClick={dismiss}\r\n />\r\n
    \r\n
    \r\n );\r\n};\r\n\r\nInfoPaneHeader.propTypes = {\r\n onDelete: PropTypes.func.isRequired,\r\n isReadonly: PropTypes.bool,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n title: PropTypes.string.isRequired,\r\n\r\n disableEdit: PropTypes.bool,\r\n onEdit: PropTypes.func,\r\n dismiss: PropTypes.func.isRequired,\r\n};\r\n\r\nInfoPaneHeader.defaultProps = {\r\n isReadonly: false,\r\n disableEdit: false,\r\n onEdit: _.noop,\r\n};\r\n","import React, { useState, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { ConfirmDialog } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n\r\nexport const DeleteAssetDialog = ({\r\n i18n,\r\n isDisplayed,\r\n closeDialog,\r\n onDeleteAsync,\r\n onDeleteSuccess,\r\n confirmText,\r\n errorMessageForUsedAsset,\r\n warningMsg,\r\n genericErrorMessage,\r\n notificationApi,\r\n}) => {\r\n const [showUIBlocker, setShowUIBlocker] = useState(false);\r\n const [errorText, setErrorText] = useState('');\r\n\r\n /* istanbul ignore next */\r\n const handleDelete = useCallback(() => {\r\n setShowUIBlocker(true);\r\n onDeleteAsync().then(() => {\r\n closeDialog();\r\n onDeleteSuccess();\r\n notificationApi.showInfo(i18n.getString(_TL_('Your asset was successfully deleted.')));\r\n }).catch((response = {}) => {\r\n if (response.errors && response.errors[0] && response.errors[0].Code === 'AssetIsUsed') {\r\n setErrorText(errorMessageForUsedAsset);\r\n } else {\r\n notificationApi.showWarning(genericErrorMessage);\r\n closeDialog();\r\n }\r\n })\r\n .finally(() => {\r\n setShowUIBlocker(false);\r\n });\r\n }, [closeDialog, errorMessageForUsedAsset, genericErrorMessage, i18n, notificationApi, onDeleteAsync, onDeleteSuccess]);\r\n\r\n /* istanbul ignore next */\r\n const cancelDelete = useCallback(() => {\r\n closeDialog();\r\n setErrorText('');\r\n }, [closeDialog]);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nDeleteAssetDialog.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n isDisplayed: PropTypes.bool,\r\n closeDialog: PropTypes.func.isRequired,\r\n onDeleteAsync: PropTypes.func.isRequired,\r\n onDeleteSuccess: PropTypes.func.isRequired,\r\n confirmText: PropTypes.string.isRequired,\r\n errorMessageForUsedAsset: PropTypes.string.isRequired,\r\n genericErrorMessage: PropTypes.string.isRequired,\r\n warningMsg: PropTypes.string,\r\n};\r\n\r\nDeleteAssetDialog.defaultProps = {\r\n isDisplayed: false,\r\n warningMsg: '',\r\n};\r\n","import React, { useCallback, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { TooltipHost, DirectionalHint } from '@bingads-webui-react/fabric-control';\r\nimport { useItemInfoCopyUrlStyles } from '../../styles';\r\n\r\nconst tooltipCalloutProps = { isBeakVisible: false, gapSpace: 10 };\r\n\r\nconst CopyUrlButton = ({ onClick, i18n, classes }) => {\r\n const [isURLCopied, setIsURLCopied] = useState(false);\r\n\r\n const onCopyUrlClick = useCallback(() => {\r\n setIsURLCopied(true);\r\n onClick();\r\n }, [onClick]);\r\n\r\n const onTooltipToggle = useCallback(isVisible => (!isVisible && setIsURLCopied(false)), []);\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nCopyUrlButton.propTypes = {\r\n onClick: PropTypes.func.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n classes: PropTypes.shape({\r\n copyUrl: PropTypes.string,\r\n }).isRequired,\r\n};\r\n\r\nexport const InfoPaneItemCopyUrl = ({\r\n i18n,\r\n url,\r\n onCopy,\r\n}) => {\r\n const classes = useItemInfoCopyUrlStyles();\r\n\r\n return (\r\n
    \r\n
    {i18n.getString(_TL_('URL:'))}
    \r\n
    {url}
    \r\n \r\n
    \r\n );\r\n};\r\n\r\nInfoPaneItemCopyUrl.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n url: PropTypes.string.isRequired,\r\n onCopy: PropTypes.func.isRequired,\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport { useInfoItemDefaultStyles } from '../../styles';\r\n\r\nexport const InfoItemDefault = ({\r\n name,\r\n value,\r\n}) => {\r\n const classes = useInfoItemDefaultStyles();\r\n\r\n return (\r\n
    \r\n
    {name}
    \r\n
    {value}
    \r\n
    \r\n );\r\n};\r\n\r\nInfoItemDefault.propTypes = {\r\n name: PropTypes.string.isRequired,\r\n value: PropTypes.string.isRequired,\r\n};\r\n","import React, { useState, useCallback, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport { keyCode } from '@bingads-webui/keycode';\r\nimport { Input } from '@fluentui/react-components';\r\nimport { Edit16Regular, Dismiss16Regular, Checkmark16Regular } from '@fluentui/react-icons';\r\nimport { useInfoPaneItemRenameStyle } from '../../styles';\r\n\r\nconst spinnerStyle = ({\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n width: '100%',\r\n height: '100%',\r\n});\r\n\r\nexport const InfoItemRename = ({\r\n i18n,\r\n name,\r\n renameAsync,\r\n renderBlocker,\r\n inputPlaceholderText,\r\n renameTitleText,\r\n isReadonly,\r\n}) => {\r\n const classes = useInfoPaneItemRenameStyle();\r\n\r\n const [displayInputBox, setDisplayInputBox] = useState(false);\r\n const [inputName, setInputName] = useState('');\r\n const [showUiBlocker, setShowUiBlocker] = useState(false);\r\n\r\n useEffect(() => {\r\n setDisplayInputBox(false);\r\n setShowUiBlocker(false);\r\n setInputName(name);\r\n }, [name]);\r\n\r\n const handleRename = useCallback(() => {\r\n setShowUiBlocker(true);\r\n renameAsync(inputName).finally(() => {\r\n setShowUiBlocker(false);\r\n setDisplayInputBox(false);\r\n });\r\n }, [inputName, renameAsync]);\r\n\r\n const onEnterRename = useCallback((event) => {\r\n if (event && event.keyCode === keyCode.Enter) {\r\n handleRename();\r\n }\r\n }, [handleRename]);\r\n\r\n const handleDisplayInputBox = useCallback(() => {\r\n setInputName(name || '');\r\n setDisplayInputBox(true);\r\n }, [name]);\r\n\r\n const onEnterEditIcon = useCallback((event) => {\r\n if (event && event.keyCode === keyCode.Enter) {\r\n handleDisplayInputBox();\r\n }\r\n }, [handleDisplayInputBox]);\r\n\r\n const handleCancel = useCallback(() => {\r\n setInputName('');\r\n setDisplayInputBox(false);\r\n }, []);\r\n\r\n const onEnterCancel = useCallback((event) => {\r\n if (event && event.keyCode === keyCode.Enter) {\r\n handleCancel();\r\n }\r\n });\r\n\r\n const onEnterPress = useCallback((event) => {\r\n if (event && event.keyCode === keyCode.Enter && inputName !== name) {\r\n handleRename();\r\n }\r\n }, [handleRename, inputName, name]);\r\n\r\n const onInputChange = useCallback((ev, data) => {\r\n const { value } = data || {};\r\n setInputName(value);\r\n }, []);\r\n\r\n return (\r\n
    \r\n {\r\n displayInputBox ?\r\n
    \r\n \r\n \r\n \r\n
    :\r\n
    \r\n
    \r\n
    {renameTitleText}
    \r\n {!isReadonly && }\r\n
    \r\n
    \r\n {name || '-'}\r\n
    \r\n
    \r\n }\r\n {\r\n showUiBlocker && renderBlocker && renderBlocker({ spinnerStyle })\r\n }\r\n
    \r\n );\r\n};\r\n\r\nInfoItemRename.propTypes = {\r\n name: PropTypes.string.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n renameAsync: PropTypes.func.isRequired,\r\n renderBlocker: PropTypes.func.isRequired,\r\n inputPlaceholderText: PropTypes.string.isRequired,\r\n isReadonly: PropTypes.bool,\r\n};\r\n\r\nInfoItemRename.defaultProps = {\r\n isReadonly: false,\r\n};\r\n","import React, { useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Spinner } from '@fluentui/react-components';\r\nimport { InfoItemDefault } from './info-item-default';\r\nimport { InfoItemRename } from './info-item-rename';\r\nimport { useItemInfoContentStyles } from '../../styles';\r\n\r\nexport const ItemInfoContentBase = ({\r\n i18n,\r\n isReadonly,\r\n itemName,\r\n renameAsync,\r\n promptNameInputLabel,\r\n nameInputPlaceholderText,\r\n renameTitleText,\r\n itemInfos,\r\n}) => {\r\n const classes = useItemInfoContentStyles();\r\n const renderItem = useCallback(({\r\n name, value, CustomComponent, CustomComponentOptions = {},\r\n }) => {\r\n if (CustomComponent) {\r\n return ;\r\n }\r\n return ;\r\n }, []);\r\n\r\n return (\r\n
    \r\n }\r\n promptInputLabel={promptNameInputLabel}\r\n inputPlaceholderText={itemName ? '' : nameInputPlaceholderText}\r\n renameTitleText={renameTitleText}\r\n />\r\n
    \r\n {\r\n itemInfos.map(({\r\n key,\r\n name, value,\r\n CustomComponent, CustomComponentOptions = {},\r\n valid = true,\r\n }) => (\r\n valid &&\r\n \r\n { renderItem({\r\n name, value, CustomComponent, CustomComponentOptions,\r\n })\r\n }\r\n \r\n ))\r\n }\r\n
    \r\n
    \r\n );\r\n};\r\n\r\nItemInfoContentBase.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n isReadonly: PropTypes.bool,\r\n itemName: PropTypes.string,\r\n renameAsync: PropTypes.func.isRequired,\r\n promptNameInputLabel: PropTypes.string,\r\n nameInputPlaceholderText: PropTypes.string,\r\n itemInfos: PropTypes.arrayOf(PropTypes.shape({\r\n name: PropTypes.string,\r\n value: PropTypes.string,\r\n url: PropTypes.string,\r\n copyUrl: PropTypes.func,\r\n })).isRequired,\r\n};\r\n\r\nItemInfoContentBase.defaultProps = {\r\n isReadonly: false,\r\n itemName: null,\r\n promptNameInputLabel: '',\r\n nameInputPlaceholderText: '',\r\n};\r\n","export const ImpressionsID = 5;\r\nexport const ClicksID = 1;\r\nexport const CTRID = 4;\r\nexport const OverallID = 0;\r\n\r\nexport const metricsMap = [\r\n {\r\n id: ClicksID,\r\n value: 'ColumnName_Clicks',\r\n name: 'Clicks',\r\n // formatter: this.formatToInteger,\r\n },\r\n {\r\n id: ImpressionsID,\r\n value: 'TrendAreaChart_AxisY',\r\n name: 'Impressions',\r\n // formatter: this.formatToInteger,\r\n },\r\n {\r\n id: CTRID,\r\n value: 'ColumnName_CTR',\r\n name: 'CTR',\r\n // formatter: this.formatTo2DigitsPercent,\r\n },\r\n];\r\n","import React from 'react';\r\nimport { Button, mergeClasses } from '@fluentui/react-components';\r\nimport { Open20Regular } from '@fluentui/react-icons';\r\nimport { useExternalLinkStyles } from '../../styles';\r\n\r\nexport const ItemExternalLink = (props) => {\r\n const { onClick, text } = props;\r\n const classes = useExternalLinkStyles();\r\n\r\n return (\r\n \r\n );\r\n};\r\n","import React, { useEffect, useCallback, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { Dropdown, Option } from '@fluentui/react-components';\r\nimport { InlineChart } from '@bingads-webui-campaign-react/ads-studio-shared-components';\r\nimport { AdsStudioSpinner } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { ImpressionsID, CTRID, ClicksID, OverallID, metricsMap } from '../../constants';\r\nimport { usePerformanceContentStyles } from '../../styles';\r\nimport { ItemExternalLink } from './item-external-link';\r\n\r\nconst defaultMetricValue = OverallID;\r\nconst defaultMetricLabel = _TL_('Overall metrics');\r\n\r\nconst metricOptions = [\r\n {\r\n label: defaultMetricLabel,\r\n value: defaultMetricValue,\r\n },\r\n {\r\n label: _TL_('CTR'),\r\n value: CTRID,\r\n },\r\n {\r\n label: _TL_('Clicks'),\r\n value: ClicksID,\r\n },\r\n {\r\n label: _TL_('Impressions'),\r\n value: ImpressionsID,\r\n },\r\n];\r\n\r\nexport const PerformanceContent = (props) => {\r\n const {\r\n onGotoAds, i18n, loadPerfTimeSeriesData, imageId, folderAssetType, getGranularityEnum, perfMetricDateRange,\r\n } = props;\r\n const classes = usePerformanceContentStyles();\r\n const [isMetricLoading, setIsMetricLoading] = useState(false);\r\n const [metricData, setMetricData] = useState([]);\r\n const [granularity, setGranularity] = useState();\r\n\r\n const loadSeriesData = useCallback((selectedMetricValues) => {\r\n let metric;\r\n if (!granularity) {\r\n return;\r\n }\r\n if (selectedMetricValues === OverallID) {\r\n metric = metricsMap.map(({ name }) => name).join(',');\r\n } else {\r\n metric = metricsMap.find(({ id }) => id === selectedMetricValues).name;\r\n }\r\n const timeSeriesParams = {\r\n metric,\r\n granularity,\r\n isMovingAverageOn: false,\r\n };\r\n const filters = {\r\n searchText: imageId,\r\n hasPerfData: true,\r\n assetTypeFilter: folderAssetType,\r\n };\r\n setIsMetricLoading(true);\r\n loadPerfTimeSeriesData(timeSeriesParams, filters).then((result) => {\r\n setMetricData(result);\r\n }).finally(() => {\r\n setIsMetricLoading(false);\r\n });\r\n }, [folderAssetType, granularity, imageId, loadPerfTimeSeriesData]);\r\n\r\n const onOptionSelect = useCallback((ev, data) => {\r\n const { optionValue } = data || {};\r\n loadSeriesData(optionValue);\r\n }, [loadSeriesData]);\r\n\r\n useEffect(() => {\r\n loadSeriesData(defaultMetricValue);\r\n }, [loadSeriesData]);\r\n\r\n useEffect(() => {\r\n getGranularityEnum(perfMetricDateRange).then((granularityEnum) => {\r\n setGranularity(granularityEnum);\r\n });\r\n }, [getGranularityEnum, perfMetricDateRange]);\r\n\r\n return (\r\n
    \r\n \r\n {metricOptions.map(option => (\r\n \r\n ))}\r\n \r\n
    \r\n
    \r\n \r\n
    \r\n {isMetricLoading && }\r\n
    \r\n \r\n
    \r\n );\r\n};\r\n\r\nPerformanceContent.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n onGotoAds: PropTypes.func.isRequired,\r\n loadPerfTimeSeriesData: PropTypes.func.isRequired,\r\n imageId: PropTypes.string.isRequired,\r\n folderAssetType: PropTypes.string.isRequired,\r\n};\r\n","import React, { useState, useCallback, useEffect, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { TabList, Tab } from '@fluentui/react-components';\r\nimport { ItemDetailsPanelBase } from './asset-panel-base/panel-base';\r\nimport { InfoPaneHeader } from './asset-panel-base/info-panel-header';\r\nimport { DeleteAssetDialog } from './asset-panel-base/delete-asset-dialog';\r\nimport { InfoPaneItemCopyUrl } from './basic-info/info-item-copy-url';\r\nimport { ItemInfoContentBase } from './basic-info/item-info-panel-content-base';\r\nimport { PerformanceContent } from './performance';\r\n\r\nexport const ImageDetailsPanel = ({\r\n isOpen,\r\n assetInfo,\r\n onDismiss,\r\n isReadonly,\r\n i18n,\r\n footerKeyDownHandler,\r\n getImageById,\r\n warningMsgProp, // for unit test\r\n logger,\r\n navigation,\r\n handleDeleteAsset,\r\n handleRenameAsset,\r\n gotoAdsPageWithAssetIdFilter,\r\n copyUrl,\r\n notificationApi,\r\n getGranularityEnum,\r\n loadPerfTimeSeriesData,\r\n perfMetricDateRange,\r\n}) => {\r\n const { id: assetId, folderAssetType } = assetInfo || {};\r\n const [selectedTab, setSelectedTab] = useState('details');\r\n const [showDeleteConfirm, setShowDeleteConfirm] = useState(false);\r\n const [warningMsg, setWarningMsg] = useState(warningMsgProp || '');\r\n\r\n const onEditImage = useCallback(() => {\r\n logger.logTrace('Image Details: edit image', { assetId });\r\n onDismiss();\r\n navigation.gotoEditImagePage({ imageId: assetId });\r\n }, [assetId, logger, navigation, onDismiss]);\r\n\r\n const onDeleteImage = useCallback(() => {\r\n logger.logTrace('Image Details: delete image', { assetId });\r\n return handleDeleteAsset();\r\n }, [assetId, logger, handleDeleteAsset]);\r\n\r\n const onRenameImage = useCallback((newName) => {\r\n logger.logTrace('Image Details: rename image', { assetId });\r\n return handleRenameAsset(newName);\r\n }, [handleRenameAsset, assetId, logger]);\r\n\r\n const onCopyUrl = useCallback(() => {\r\n logger.logTrace('Image Details: url copied', { assetId });\r\n copyUrl(assetInfo.url);\r\n }, [logger, assetId, copyUrl, assetInfo.url]);\r\n\r\n const formatDate = useCallback(date => i18n.formatDate(date, { date: 'long' }), [i18n]);\r\n\r\n const imageInfoArr = useMemo(() => {\r\n const imageInfoList = [\r\n { name: i18n.getString(_TL_(('Image ID:'))), value: assetInfo.id },\r\n {\r\n name: i18n.getString(_TL_('Dimensions:')),\r\n value: i18n.getString(_TL_('{{width}} x {{height}}'), { width: assetInfo.width, height: assetInfo.height }),\r\n },\r\n { name: i18n.getString(_TL_('Created:')), value: formatDate(assetInfo.createdTime) },\r\n { name: i18n.getString(_TL_('Modified:')), value: formatDate(assetInfo.modifiedTime) },\r\n {\r\n CustomComponent: InfoPaneItemCopyUrl,\r\n CustomComponentOptions: {\r\n i18n,\r\n url: assetInfo.url,\r\n onCopy: onCopyUrl,\r\n },\r\n key: assetInfo.url,\r\n },\r\n ];\r\n\r\n return imageInfoList;\r\n }, [assetInfo.createdTime, assetInfo.height, assetInfo.id, assetInfo.modifiedTime, assetInfo.url, assetInfo.width, formatDate, i18n, onCopyUrl]);\r\n\r\n const onGotoAds = useCallback(() => {\r\n logger.logTrace('Image Details: go to Ads grid page', { assetId });\r\n return gotoAdsPageWithAssetIdFilter();\r\n }, [gotoAdsPageWithAssetIdFilter, assetId, logger]);\r\n\r\n useEffect(() => {\r\n if (getImageById && assetInfo && assetInfo.metadata) {\r\n const {\r\n id = '',\r\n } = assetInfo;\r\n getImageById({ imageId: id, useCache: false }).then((asset) => {\r\n if (asset && asset.isSceneKeyFrame) {\r\n setWarningMsg(i18n.getString(_TL_('Once deleted, the image will still serve in any video ads that currently use it and cannot be edited.')));\r\n } else {\r\n setWarningMsg('');\r\n }\r\n });\r\n } else if (warningMsg.length > 0) {\r\n setWarningMsg('');\r\n }\r\n }, [assetInfo, getImageById, i18n, setWarningMsg, warningMsg]);\r\n\r\n const dismiss = useCallback(() => {\r\n onDismiss();\r\n }, [onDismiss]);\r\n\r\n const onRenderHeader = useCallback(() => (\r\n { setShowDeleteConfirm(true); }}\r\n onEdit={onEditImage}\r\n dismiss={dismiss}\r\n />\r\n ), [isReadonly, i18n, onEditImage, dismiss]);\r\n\r\n const closeDialog = useCallback(() => {\r\n setShowDeleteConfirm(false);\r\n }, []);\r\n\r\n const onTabSelect = useCallback((event, data) => {\r\n setSelectedTab(data.value);\r\n }, []);\r\n\r\n return (\r\n \r\n \r\n \r\n {i18n.getString(_TL_('Performance'))}\r\n {i18n.getString(_TL_('Details'))}\r\n \r\n {selectedTab === 'performance' && }\r\n {selectedTab === 'details' && (\r\n \r\n )}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nImageDetailsPanel.propTypes = {\r\n assetInfo: PropTypes.shape({\r\n id: PropTypes.string.isRequired,\r\n metadata: PropTypes.shape({}),\r\n }).isRequired,\r\n onDismiss: PropTypes.func.isRequired,\r\n isReadonly: PropTypes.bool,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n footerKeyDownHandler: PropTypes.func,\r\n getImageById: PropTypes.func.isRequired,\r\n warningMsgProp: PropTypes.string,\r\n loadPerfTimeSeriesData: PropTypes.func.isRequired,\r\n};\r\n\r\nImageDetailsPanel.defaultProps = {\r\n isReadonly: false,\r\n footerKeyDownHandler: _.noop,\r\n warningMsgProp: '',\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Badge } from '@fluentui/react-components';\r\nimport { PlacementQualityToText } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n\r\nimport { useItemInfoVideoQualityStyles } from '../../styles';\r\n\r\nexport const VideoQualityBadge = ({\r\n i18n,\r\n quality,\r\n}) => {\r\n const classes = useItemInfoVideoQualityStyles();\r\n\r\n const qualityText = PlacementQualityToText[quality];\r\n return (\r\n
    \r\n
    {i18n.getString(_TL_('Quality:'))}
    \r\n
    {qualityText}
    \r\n
    \r\n );\r\n};\r\n\r\nVideoQualityBadge.propTypes = {\r\n quality: PropTypes.number,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n};\r\n\r\nVideoQualityBadge.defaultProps = {\r\n quality: null,\r\n};\r\n","import React, { useState, useCallback, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { convertTimeDuration, getClosestAspectRatio, formatFileSize } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n\r\nimport { ItemDetailsPanelBase } from './asset-panel-base/panel-base';\r\nimport { InfoPaneHeader } from './asset-panel-base/info-panel-header';\r\nimport { DeleteAssetDialog } from './asset-panel-base/delete-asset-dialog';\r\nimport { InfoPaneItemCopyUrl } from './basic-info/info-item-copy-url';\r\nimport { ItemInfoContentBase } from './basic-info/item-info-panel-content-base';\r\nimport { VideoQualityBadge } from './basic-info/info-item-video-quality';\r\n\r\nexport const VideoDetailsPanel = ({\r\n isOpen,\r\n assetInfo,\r\n onDismiss,\r\n isReadonly,\r\n i18n,\r\n footerKeyDownHandler,\r\n logger,\r\n handleDeleteAsset,\r\n handleRenameAsset,\r\n copyUrl,\r\n notificationApi,\r\n permissions,\r\n navigation,\r\n}) => {\r\n const { id: videoId } = assetInfo || {};\r\n const [showDeleteConfirm, setShowDeleteConfirm] = useState(false);\r\n\r\n const onDelete = useCallback(() => {\r\n logger.logTrace('Video Details: delete video', { videoId });\r\n return handleDeleteAsset();\r\n }, [logger, videoId, handleDeleteAsset]);\r\n\r\n const onRenameVideo = useCallback((newName) => {\r\n logger.logTrace('Video Details: rename video', { videoId });\r\n return handleRenameAsset(newName);\r\n }, [handleRenameAsset, logger, videoId]);\r\n\r\n const onEditVideo = useCallback(() => {\r\n if (logger && logger.logTrace) {\r\n logger.logTrace('Video Details: edit video', { assetId: assetInfo.id });\r\n }\r\n onDismiss();\r\n navigation.gotoEditVideoPage({ videoId: assetInfo.id });\r\n }, [onDismiss, navigation, logger]);\r\n\r\n const onCopyUrl = useCallback((url) => {\r\n logger.logTrace('Video Details: url copied', { videoId });\r\n copyUrl(url);\r\n }, [copyUrl, logger, videoId]);\r\n\r\n const formatDate = useCallback(date => i18n.formatDate(date, { date: 'long' }), [i18n]);\r\n\r\n const videoTemplateUIEnabled = permissions && permissions.dynamic && permissions.dynamic.VideoTemplateUI;\r\n const disableEdit = !(videoTemplateUIEnabled && assetInfo && assetInfo.id && assetInfo.metaData);\r\n\r\n const videoInfoArr = useMemo(() => {\r\n const videoInfoList = [\r\n { name: i18n.getString(_TL_(('Video ID:'))), value: assetInfo.id },\r\n {\r\n name: i18n.getString(_TL_('Dimensions:')),\r\n value: `${assetInfo.width} X ${assetInfo.height}`,\r\n valid: assetInfo.height && assetInfo.height > 0 && assetInfo.width && assetInfo.width > 0,\r\n },\r\n {\r\n name: i18n.getString(_TL_('Aspect ratio:')),\r\n value: getClosestAspectRatio(assetInfo.width, assetInfo.height),\r\n valid: assetInfo.height > 0 && assetInfo.width > 0,\r\n },\r\n {\r\n name: i18n.getString(_TL_('File size:')),\r\n value: `${formatFileSize(assetInfo.fileSize)} ${i18n.getString(_TL_('MB'))}`,\r\n valid: assetInfo.fileSize > 0,\r\n },\r\n {\r\n name: i18n.getString(_TL_('Duration:')),\r\n value: convertTimeDuration(assetInfo.durationInMS),\r\n valid: assetInfo.durationInMS > 0,\r\n },\r\n { name: i18n.getString(_TL_('Modified:')), value: formatDate(assetInfo.modifiedTime) },\r\n { name: i18n.getString(_TL_('Added:')), value: formatDate(assetInfo.createdTime) },\r\n {\r\n CustomComponent: VideoQualityBadge,\r\n CustomComponentOptions: {\r\n i18n,\r\n quality: assetInfo.quality,\r\n },\r\n key: assetInfo.quality,\r\n },\r\n {\r\n CustomComponent: InfoPaneItemCopyUrl,\r\n CustomComponentOptions: {\r\n i18n,\r\n url: assetInfo.url,\r\n onCopy: () => { onCopyUrl(assetInfo.url); },\r\n },\r\n key: assetInfo.url,\r\n },\r\n ];\r\n\r\n return videoInfoList;\r\n }, [assetInfo.createdTime, assetInfo.durationInMS, assetInfo.id, assetInfo.modifiedTime, assetInfo.url, formatDate, i18n, onCopyUrl]);\r\n\r\n const dismiss = useCallback(() => {\r\n onDismiss();\r\n }, [onDismiss]);\r\n\r\n const onRenderHeader = useCallback(() => (\r\n { setShowDeleteConfirm(true); }}\r\n onEdit={onEditVideo}\r\n disableEdit={disableEdit}\r\n />\r\n ), [isReadonly, i18n, dismiss]);\r\n\r\n const closeDialog = useCallback(() => {\r\n setShowDeleteConfirm(false);\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\nVideoDetailsPanel.propTypes = {\r\n assetInfo: PropTypes.shape({\r\n id: PropTypes.string.isRequired,\r\n metadata: PropTypes.shape({}),\r\n }).isRequired,\r\n onDismiss: PropTypes.func.isRequired,\r\n isReadonly: PropTypes.bool,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n footerKeyDownHandler: PropTypes.func,\r\n};\r\n\r\nVideoDetailsPanel.defaultProps = {\r\n isReadonly: false,\r\n footerKeyDownHandler: _.noop,\r\n};\r\n","import { useMemo } from 'react';\r\nimport { FolderAssetType } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { ImagePreview } from '../components/image-preview';\r\nimport { VideoPreview } from '../components/video-preview';\r\nimport { ImageDetailsPanel } from '../components/image-panel';\r\nimport { VideoDetailsPanel } from '../components/video-panel';\r\n\r\nconst previewCompMap = {\r\n [FolderAssetType.Image]: ImagePreview,\r\n [FolderAssetType.Video]: VideoPreview,\r\n};\r\n\r\nconst panelCompMap = {\r\n [FolderAssetType.Image]: ImageDetailsPanel,\r\n [FolderAssetType.Video]: VideoDetailsPanel,\r\n};\r\n\r\n\r\nexport const usePreviewAndPanel = ({ folderAssetType }) => {\r\n const AssetPreview = useMemo(() => previewCompMap[folderAssetType], [folderAssetType]);\r\n const AssetDetailsPanel = useMemo(() => panelCompMap[folderAssetType], [folderAssetType]);\r\n\r\n return {\r\n AssetPreview,\r\n AssetDetailsPanel,\r\n };\r\n};\r\n","import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport classnames from 'classnames';\r\nimport { DEFAULT_PAGE_SIZE, AdsStudioSpinner } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { Layer, Overlay } from '@bingads-webui-react/fabric-control';\r\nimport { useLayoutStyles } from '../styles';\r\n\r\nexport const AssetDetailsPageLayout = ({\r\n navigation,\r\n navigateToOtherItem,\r\n // navigateToFallbackPage,\r\n itemId,\r\n loadedItems,\r\n loadMoreItemsAsync,\r\n renderItemPreview,\r\n renderItemDetails,\r\n // permissions,\r\n pageSize,\r\n reloadLandingPageRef,\r\n onClose,\r\n}) => {\r\n const [hideContent] = useState(false);\r\n const [loadMoreFlag, setLoadMoreFlag] = useState(false);\r\n\r\n const currentIndex = useMemo(\r\n () => _.findIndex(loadedItems, item => item.id === itemId),\r\n [itemId, loadedItems]\r\n );\r\n\r\n const itemInfo = useMemo(\r\n () => _.find(loadedItems, item => item.id === itemId),\r\n [loadedItems, itemId]\r\n );\r\n\r\n const redirectToOtherItem = useCallback((index) => {\r\n const { id, folderAssetType } = loadedItems[index];\r\n navigateToOtherItem({ id, folderAssetType });\r\n }, [loadedItems, navigateToOtherItem]);\r\n\r\n // in case user refresh in detail page\r\n // useEffect(() => {\r\n // if (!itemInfo) {\r\n // if (permissions && permissions.dynamic.SmartMediaGenerationPrototype) {\r\n // return;\r\n // }\r\n // navigateToFallbackPage();\r\n // }\r\n // }, [itemInfo, navigateToFallbackPage, permissions]);\r\n\r\n useEffect(() => {\r\n if (loadMoreFlag && loadedItems[currentIndex + 1]) {\r\n setLoadMoreFlag(false);\r\n redirectToOtherItem(currentIndex + 1);\r\n }\r\n }, [currentIndex, loadMoreFlag, loadedItems, redirectToOtherItem]);\r\n\r\n const dismiss = useCallback(() => {\r\n if (onClose) {\r\n onClose();\r\n }\r\n navigation.goBack({ reload: reloadLandingPageRef.current });\r\n }, [navigation, onClose, reloadLandingPageRef]);\r\n\r\n const gotoNext = useCallback(() => {\r\n const nextIndex = currentIndex + 1;\r\n if (nextIndex >= _.size(loadedItems)) {\r\n setLoadMoreFlag(true);\r\n loadMoreItemsAsync({ count: pageSize || DEFAULT_PAGE_SIZE });\r\n } else {\r\n redirectToOtherItem(nextIndex);\r\n }\r\n }, [currentIndex, loadMoreItemsAsync, loadedItems, pageSize, redirectToOtherItem]);\r\n\r\n const gotoPrevious = useCallback(() => {\r\n const previousIndex = currentIndex - 1;\r\n redirectToOtherItem(previousIndex);\r\n }, [currentIndex, redirectToOtherItem]);\r\n\r\n const itemPreviewRef = useRef();\r\n\r\n const footerKeyDownHandler = useCallback((event) => {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n\r\n if (event.code === 'Tab' && itemPreviewRef && itemPreviewRef.current) {\r\n itemPreviewRef.current.focus();\r\n }\r\n }, []);\r\n\r\n const classes = useLayoutStyles();\r\n\r\n return (\r\n \r\n \r\n {itemInfo && !loadMoreFlag ? (\r\n <>\r\n
    \r\n {renderItemPreview({\r\n itemData: itemInfo,\r\n shouldHideContent: hideContent,\r\n currentIndex,\r\n gotoNext,\r\n gotoPrevious,\r\n })}\r\n
    \r\n {renderItemDetails({\r\n itemData: itemInfo,\r\n dismiss,\r\n footerKeyDownHandler,\r\n })}\r\n \r\n ) : (\r\n \r\n )\r\n }\r\n \r\n
    \r\n );\r\n};\r\n\r\nAssetDetailsPageLayout.propTypes = {\r\n navigation: PropTypes.shape({\r\n }).isRequired,\r\n navigateToOtherItem: PropTypes.func.isRequired,\r\n // navigateToFallbackPage: PropTypes.func.isRequired,\r\n itemId: PropTypes.string.isRequired,\r\n loadedItems: PropTypes.arrayOf(PropTypes.shape({\r\n id: PropTypes.string.isRequired,\r\n folderAssetType: PropTypes.string.isRequired,\r\n })),\r\n loadMoreItemsAsync: PropTypes.func.isRequired,\r\n renderItemPreview: PropTypes.func.isRequired,\r\n renderItemDetails: PropTypes.func.isRequired,\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({\r\n SmartMediaGenerationPrototype: PropTypes.bool,\r\n }).isRequired,\r\n }).isRequired,\r\n pageSize: PropTypes.number,\r\n};\r\n\r\nAssetDetailsPageLayout.defaultProps = {\r\n loadedItems: [],\r\n pageSize: DEFAULT_PAGE_SIZE,\r\n};\r\n","import { useEffect, useCallback, useRef } from 'react';\r\n\r\nexport const useDetailsPageSetup = ({\r\n currentItemId,\r\n folderAssetType,\r\n logger,\r\n navigation,\r\n totalAssetCount,\r\n assets,\r\n loadMoreData,\r\n renameAsset,\r\n onClose,\r\n}) => {\r\n const reloadLandingPageRef = useRef(false);\r\n\r\n useEffect(() => {\r\n logger.logTrace('Item Details: page loaded', { currentItemId, folderAssetType });\r\n }, [currentItemId, folderAssetType, logger]);\r\n\r\n const navigateToFallbackPage = useCallback(() => {\r\n logger.logTrace('Item Details: no info, redirect to landing page');\r\n navigation.gotoLandingPage({ redirect: true });\r\n }, [logger, navigation]);\r\n\r\n const navigateToOtherItem = useCallback(({\r\n id: otherItemId,\r\n folderAssetType: otherItemFolderAssetType,\r\n }) => {\r\n navigation.gotoAssetDetails({\r\n assetId: otherItemId, folderAssetType: otherItemFolderAssetType, assets, totalAssetCount, loadMoreData, renameAsset, onClose,\r\n });\r\n }, [assets, loadMoreData, navigation, onClose, renameAsset, totalAssetCount]);\r\n\r\n const onDismissed = useCallback(() => {\r\n navigation.goBack({ reload: reloadLandingPageRef.current });\r\n }, [navigation]);\r\n\r\n return {\r\n navigateToFallbackPage,\r\n navigateToOtherItem,\r\n onDismissed,\r\n reloadLandingPageRef,\r\n };\r\n};\r\n","import React, { useCallback, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { ClarityTags, useClarityTags, DEFAULT_PAGE_SIZE } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { usePreviewAndPanel } from './hooks/use-preiview-and-panel';\r\nimport { AssetDetailsPageLayout } from './components/details-page-layout';\r\nimport { useDetailsPageSetup } from './hooks/use-details-page-setup';\r\nimport { useAssetDetailsPageActions } from './hooks/use-asset-details-page-actions';\r\n\r\nexport const AssetDetailsPage = ({\r\n assetId, dataService, logger, permissions, pageSize, navigation, open, i18n, assets, totalAssetCount, folderAssetType, isReadonly, notificationApi, loadMoreData, renameAsset, getGranularityEnum, perfMetricDateRange, onClose,\r\n}) => {\r\n useClarityTags([ClarityTags.LaunchedAssetLibrary, ClarityTags.LaunchedImageDetails]);\r\n\r\n const { getImageById, loadPerfTimeSeriesData } = dataService || {};\r\n const { AssetPreview, AssetDetailsPanel } = usePreviewAndPanel({ folderAssetType });\r\n const {\r\n navigateToFallbackPage,\r\n navigateToOtherItem,\r\n reloadLandingPageRef,\r\n } = useDetailsPageSetup({\r\n currentItemId: assetId,\r\n folderAssetType,\r\n logger,\r\n navigation,\r\n assets,\r\n totalAssetCount,\r\n loadMoreData,\r\n renameAsset,\r\n onClose,\r\n });\r\n\r\n const {\r\n handleDeleteAsset,\r\n handleRenameAsset,\r\n gotoAdsPageWithAssetIdFilter,\r\n copyUrl,\r\n } = useAssetDetailsPageActions({\r\n dataService,\r\n navigation,\r\n assetId,\r\n folderAssetType,\r\n reloadLandingPageRef,\r\n renameAsset,\r\n });\r\n\r\n useEffect(() => {\r\n logger.logTrace('Asset Details: page loaded', { assetId });\r\n }, [assetId, logger]);\r\n\r\n const renderAssetPreview = useCallback(({\r\n itemData,\r\n shouldHideContent,\r\n currentIndex,\r\n gotoNext,\r\n gotoPrevious,\r\n }) => (\r\n \r\n ), [i18n, totalAssetCount, AssetPreview]);\r\n\r\n const renderAssetDetailsView = useCallback(({ itemData, dismiss, footerKeyDownHandler }) => (\r\n \r\n ), [AssetDetailsPanel, open, i18n, getImageById, isReadonly, logger, navigation, handleDeleteAsset, handleRenameAsset, notificationApi, copyUrl, gotoAdsPageWithAssetIdFilter, loadPerfTimeSeriesData, getGranularityEnum, perfMetricDateRange, permissions]);\r\n\r\n return (\r\n open && (\r\n \r\n )\r\n );\r\n};\r\n\r\nAssetDetailsPage.propTypes = {\r\n dataService: PropTypes.shape({}).isRequired,\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n }).isRequired,\r\n navigation: PropTypes.shape({\r\n gotoEditImage: PropTypes.func.isRequired,\r\n goBack: PropTypes.func.isRequired,\r\n redirectToLandingPage: PropTypes.func.isRequired,\r\n redirectToEditImage: PropTypes.func.isRequired,\r\n redirectToItemDetail: PropTypes.func.isRequired,\r\n gotoAdsPageWithFilter: PropTypes.func.isRequired,\r\n }).isRequired,\r\n assetId: PropTypes.string.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({\r\n SmartMediaGenerationPrototype: PropTypes.bool,\r\n }).isRequired,\r\n }).isRequired,\r\n pageSize: PropTypes.number,\r\n open: PropTypes.bool.isRequired,\r\n};\r\n\r\nAssetDetailsPage.defaultProps = {\r\n pageSize: DEFAULT_PAGE_SIZE,\r\n};\r\n","import { useCallback } from 'react';\r\n\r\nexport const useAssetDetailsPageActions = ({\r\n dataService,\r\n navigation,\r\n assetId,\r\n folderAssetType,\r\n reloadLandingPageRef,\r\n renameAsset,\r\n}) => {\r\n const {\r\n deleteAsset,\r\n } = dataService || {};\r\n\r\n const handleDeleteAsset = useCallback(() => deleteAsset({ assetId, folderAssetType }).then(() => {\r\n // eslint-disable-next-line no-param-reassign\r\n reloadLandingPageRef.current = true;\r\n }), [assetId, deleteAsset, folderAssetType, reloadLandingPageRef]);\r\n\r\n const handleRenameAsset = useCallback(newName => renameAsset({ assetId, name: newName, folderAssetType }).then(() => {\r\n // eslint-disable-next-line no-param-reassign\r\n reloadLandingPageRef.current = true;\r\n }), [assetId, folderAssetType, reloadLandingPageRef, renameAsset]);\r\n\r\n const gotoAdsPageWithAssetIdFilter = useCallback(() => navigation.gotoAdsPageWithAssetIdFilter({\r\n folderAssetType,\r\n assetId,\r\n }), [assetId, folderAssetType, navigation]);\r\n\r\n const copyUrl = useCallback((url) => {\r\n navigator.clipboard.writeText(url);\r\n }, []);\r\n\r\n return {\r\n handleDeleteAsset,\r\n handleRenameAsset,\r\n gotoAdsPageWithAssetIdFilter,\r\n copyUrl,\r\n };\r\n};\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nexport const useBackgroundRemovalModalStyle = makeStyles({\r\n uploadContainer: {\r\n position: 'relative',\r\n },\r\n contentArea: {\r\n height: '470px',\r\n overflowY: 'auto',\r\n scrollbarWidth: 'none',\r\n },\r\n chooseImageContainer: {\r\n ...shorthands.border('1px', 'dashed', '#D1D1D1'),\r\n ...shorthands.borderRadius('8px'),\r\n ...shorthands.padding('16px', '0px', '24px'),\r\n cursor: 'pointer',\r\n width: '100%',\r\n height: '240px',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'flex-start',\r\n },\r\n uploadIcon: {\r\n display: 'block',\r\n width: '128px',\r\n height: '128px',\r\n ...shorthands.margin('0px', 'auto', '4px'),\r\n },\r\n uploadTitle: {\r\n fontSize: '16px',\r\n lineHeight: '22px',\r\n color: '#1A1A1A',\r\n textAlign: 'center',\r\n },\r\n browse: {\r\n fontStyle: 'normal',\r\n marginLeft: '12px',\r\n color: '#115EA3',\r\n },\r\n uploadSubtext: {\r\n position: 'absolute',\r\n bottom: '24px',\r\n fontSize: '14px',\r\n lineHeight: '20px',\r\n color: '#6C6C6C',\r\n textAlign: 'center',\r\n marginTop: '2px',\r\n },\r\n uploadButton: {\r\n position: 'absolute',\r\n width: '0px',\r\n },\r\n gridContainer: {\r\n marginTop: '12px',\r\n },\r\n gridTitle: {\r\n lineHeight: '20px',\r\n fontSize: '14px',\r\n fontWeight: '600',\r\n color: 'rgba(36, 36, 36, 1)',\r\n },\r\n loadingMask: {\r\n position: 'absolute',\r\n top: '0px',\r\n left: '0px',\r\n right: '0px',\r\n bottom: '0px',\r\n ...shorthands.margin('auto'),\r\n backgroundColor: 'rgba(255, 255, 255, 0.5)',\r\n zIndex: '1',\r\n },\r\n helpLink: {\r\n color: '#337ab7',\r\n ...shorthands.textDecoration('underline'),\r\n fontWeight: 'normal',\r\n backgroundColor: 'transparent',\r\n ...shorthands.borderRadius('0px', '0px', '0px', '0px'),\r\n ...shorthands.border('none'),\r\n width: '550px',\r\n display: 'block',\r\n textAlign: 'center',\r\n ...shorthands.overflow('hidden'),\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n },\r\n alertError: {\r\n marginTop: '10px',\r\n },\r\n});\r\n\r\n","import React, { useCallback, useEffect, useRef, useState, useMemo } from 'react';\r\nimport _ from 'underscore';\r\nimport { mergeClasses } from '@fluentui/react-components';\r\nimport { PanelImageGrid, FolderAssetType, CSMLAssetSource } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { useBackgroundRemovalModalStyle } from './background-removal-modal-style';\r\n\r\n\r\nexport const BackgroundRemovalLibraryGrid = ({\r\n i18n, dataService, notificationApi, onSelectedImageChange, contentRef,\r\n}) => {\r\n const [isPageInited, setPageInited] = useState(false);\r\n const [loadingData, setLoadingData] = useState(false);\r\n const selectedImageIdRef = useRef([]);\r\n const classes = useBackgroundRemovalModalStyle();\r\n const {\r\n assets,\r\n loadData,\r\n loadMoreData,\r\n } = dataService;\r\n\r\n const validAssets = useMemo(() => (_.filter(assets, item => (item.sourceType !== CSMLAssetSource.Shutterstock))), [assets]);\r\n\r\n const onSelectImage = useCallback((imageId) => {\r\n if (imageId === selectedImageIdRef.current) {\r\n selectedImageIdRef.current = null;\r\n onSelectedImageChange(null);\r\n } else {\r\n const selectedImageitem = validAssets.find(item => item.id === imageId);\r\n selectedImageIdRef.current = imageId;\r\n onSelectedImageChange(selectedImageitem);\r\n }\r\n }, [validAssets, onSelectedImageChange]);\r\n\r\n const onFailedToLoadData = useCallback(() => {\r\n notificationApi.showWarning(i18n.getString(_TL_('Failed to load images. Please refresh the page and try again.')));\r\n }, [i18n, notificationApi]);\r\n\r\n const loadMoreDataWithLoading = useCallback((props) => {\r\n setLoadingData(true);\r\n loadMoreData(props).finally(() => {\r\n setLoadingData(false);\r\n });\r\n }, [loadMoreData]);\r\n\r\n // init page\r\n useEffect(() => {\r\n if (!isPageInited) {\r\n setPageInited(true);\r\n }\r\n }, [isPageInited]);\r\n\r\n // load data for initial page load\r\n useEffect(() => {\r\n if (!isPageInited) {\r\n // wait until page is initialized\r\n return;\r\n }\r\n setLoadingData(true);\r\n loadData({\r\n assetTypeFilter: FolderAssetType.Image,\r\n isGlobalSearch: true,\r\n searchText: '',\r\n sortBy: null,\r\n })\r\n .catch(() => {\r\n onFailedToLoadData();\r\n }).finally(() => {\r\n setLoadingData(false);\r\n });\r\n }, [isPageInited, loadData, onFailedToLoadData]);\r\n\r\n const isPageLoading = !isPageInited || loadingData;\r\n\r\n return (\r\n
    \r\n
    {i18n.getString(_TL_('Library'))}
    \r\n \r\n
    \r\n );\r\n};\r\n","import React, { useCallback, useRef, useState, useMemo } from 'react';\r\nimport { mergeI18n } from '@bingads-webui-campaign-react/i18n-merger';\r\nimport _ from 'underscore';\r\nimport classNames from 'classnames';\r\nimport {\r\n Dialog,\r\n DialogSurface,\r\n DialogTitle,\r\n DialogContent,\r\n DialogBody,\r\n DialogActions,\r\n Button,\r\n mergeClasses,\r\n} from '@fluentui/react-components';\r\nimport { MessageBar, MessageBarActions, MessageBarBody } from '@fluentui/react-message-bar';\r\nimport { DismissRegular } from '@fluentui/react-icons';\r\nimport { ChooseImageIcon, supportedImageExtensions, useUploadFiles, AdsStudioSpinner, isReachFileSizeLimit, getReachFileSizeLimitErrorMessage, } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { parseFileName } from '@bingads-webui-campaign-react/upload-file-picker';\r\nimport { BackgroundRemovalLibraryGrid } from './library-grid';\r\nimport { ViewName } from '../edit-image-page-component/model/utils';\r\nimport { useBackgroundRemovalModalStyle } from './background-removal-modal-style';\r\n\r\nconst UploadArea = ({\r\n i18n, onFileRead, setErrors,\r\n}) => {\r\n const classes = useBackgroundRemovalModalStyle();\r\n const uploadInput = useRef();\r\n /* istanbul ignore next */\r\n const onClickUpload = useCallback(() => {\r\n uploadInput.current.click();\r\n }, []);\r\n\r\n const clearInputFile = useCallback((event) => {\r\n if (event) {\r\n // eslint-disable-next-line no-param-reassign\r\n event.target.value = '';\r\n }\r\n }, []);\r\n\r\n const readFile = useCallback((fileObjects, event) => {\r\n const selectedFiles = !_.isUndefined(fileObjects) && fileObjects.length > 0 && fileObjects;\r\n if (selectedFiles) {\r\n const selectedFilesCount = selectedFiles.length;\r\n let fileIndex;\r\n const errorArr = [];\r\n\r\n for (fileIndex = 0; fileIndex < selectedFilesCount; fileIndex += 1) {\r\n const fileObj = selectedFiles[fileIndex];\r\n const fileSizeMB = (fileObj.size / 1024 / 1024).toFixed(3);\r\n let reachLimit;\r\n\r\n if (isReachFileSizeLimit) {\r\n const { ext } = parseFileName(fileObj.name);\r\n reachLimit = isReachFileSizeLimit({ ext, fileSizeMB });\r\n }\r\n\r\n if (reachLimit) {\r\n errorArr.push(getReachFileSizeLimitErrorMessage({ i18n }));\r\n\r\n break;\r\n }\r\n }\r\n if (_.isEmpty(errorArr)) {\r\n return onFileRead(selectedFiles, () => clearInputFile(event));\r\n }\r\n clearInputFile(event);\r\n setErrors(errorArr);\r\n } // else no media picked, so do nothing\r\n\r\n return ''; // for testability\r\n }, [clearInputFile, i18n, onFileRead, setErrors]);\r\n\r\n const handleUploadFile = useCallback((event) => {\r\n const { files } = event.target;\r\n readFile(files, event);\r\n }, [readFile]);\r\n\r\n const handleDropFile = useCallback((event) => {\r\n event.preventDefault();\r\n const droppedFiles = event.dataTransfer.files;\r\n readFile(droppedFiles);\r\n }, [readFile]);\r\n\r\n const handleDropOver = useCallback((event) => {\r\n event.preventDefault();\r\n }, []);\r\n\r\n return (\r\n <>\r\n
    \r\n \r\n
    \r\n {i18n.getString(_TL_('Minimum image size: 703 x 368 pixels.'))}\r\n \r\n
    \r\n
    \r\n \r\n \r\n );\r\n};\r\n\r\nconst LoadingComp = () => {\r\n const classes = useBackgroundRemovalModalStyle();\r\n\r\n return (\r\n
    \r\n \r\n
    \r\n );\r\n};\r\n\r\n\r\nconst BackgroundRemovalModal = ({\r\n navigation, i18n, dataService, logger, notificationApi, aid, globalLegacyI18n, open, isUploadImageUpscaleEnabled,\r\n}) => {\r\n const [errors, setErrors] = useState([]);\r\n const [selectedImage, setSelectedImage] = useState();\r\n const globalI18n = useMemo(() => globalLegacyI18n.get('$/i18n!legacy/global'), [globalLegacyI18n]);\r\n const classes = useBackgroundRemovalModalStyle();\r\n\r\n const filePickerI18n = useMemo(() => mergeI18n(globalI18n, i18n), [globalI18n, i18n]);\r\n /* istanbul ignore next */\r\n const onFilesAddedCallback = useCallback(() => {\r\n setErrors([]);\r\n }, []);\r\n /* istanbul ignore next */\r\n const uploadCallback = useCallback((imageId) => {\r\n if (imageId) {\r\n navigation.goBack();\r\n setSelectedImage(null);\r\n if (logger && logger.logTrace) {\r\n logger.logTrace('Image Details: edit image', { assetId: imageId });\r\n }\r\n navigation.gotoEditImagePage({\r\n imageId, initialCurrentView: ViewName.BackgroundChangeView,\r\n });\r\n }\r\n }, [logger, navigation]);\r\n\r\n const onClickCancel = useCallback(() => {\r\n navigation.goBack();\r\n setSelectedImage(null);\r\n setErrors([]);\r\n }, [navigation]);\r\n\r\n const onSelectedImageChange = useCallback((newSelectedImage) => {\r\n setSelectedImage(newSelectedImage);\r\n }, []);\r\n\r\n const onClickContinue = useCallback(() => {\r\n navigation.goBack();\r\n setSelectedImage(null);\r\n if (logger && logger.logTrace) {\r\n logger.logTrace('Image Details: edit image', { assetId: selectedImage.id });\r\n }\r\n navigation.gotoEditImagePage({\r\n imageId: selectedImage.id, initialCurrentView: ViewName.BackgroundChangeView,\r\n });\r\n }, [logger, navigation, selectedImage]);\r\n\r\n const {\r\n previewArr, onFileRead,\r\n } = useUploadFiles({\r\n dataService, logger, notificationApi, i18n, aid, onFilesAddedCallback, setErrors, filePickerI18n, uploadCallback, isUploadImageUpscaleEnabled,\r\n });\r\n\r\n const isUploadingFile = useMemo(() => !!(previewArr && previewArr.length), [previewArr]);\r\n const dialogContentRef = useRef();\r\n const isContinueButtonDisabled = useMemo(() => !selectedImage || isUploadingFile, [isUploadingFile, selectedImage]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {i18n.getString(_TL_('Choose an image'))}\r\n \r\n \r\n \r\n {\r\n errors.length > 0 &&\r\n errors.map((errMsg, index) => (\r\n \r\n \r\n {errMsg}\r\n \r\n setErrors([])}\r\n aria-label=\"dismiss\"\r\n appearance=\"transparent\"\r\n icon={}\r\n />\r\n }\r\n />\r\n \r\n ))\r\n }\r\n { isUploadingFile && }\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\nexport const BackgroundRemovalModalComponent = BackgroundRemovalModal;\r\n","import {\r\n FolderRegular,\r\n ImageRegular,\r\n HomeRegular,\r\n DataTrendingRegular,\r\n StyleGuideRegular,\r\n VideoRegular,\r\n KeyboardLayoutOneHandedLeft20Regular,\r\n} from '@fluentui/react-icons';\r\nimport { getSearchQuery } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n\r\nconst isSubPageSelected = (pathname, subPage, rootRoute) => pathname.includes(`${rootRoute}/${subPage}`);\r\n\r\nconst isHomePageSelected = (pathname, rootRoute) => (pathname === rootRoute) || isSubPageSelected(pathname, 'home', rootRoute);\r\n\r\nconst gotoPage = (history, rootRoute, path, search) => {\r\n const currentSearch = getSearchQuery({ search });\r\n history.push(`${rootRoute}${path}${currentSearch}`);\r\n};\r\n\r\nexport const gotoLibraryPage = (history, rootRoute, search) => {\r\n const isLibraryPage = isSubPageSelected(history.location.pathname, 'library', rootRoute);\r\n if (!isLibraryPage) {\r\n gotoPage(history, rootRoute, '/library', search);\r\n }\r\n};\r\n\r\nexport const isLibraryPageSelected = (pathname, rootRoute) => isSubPageSelected(pathname, 'library', rootRoute);\r\n\r\nexport const getStaticItems = (history, rootRoute, navigateIntoFolderItem, brandKitEnabled) => {\r\n const { location } = history;\r\n const { search, pathname } = location;\r\n\r\n const isBrandKitEnabled = brandKitEnabled;\r\n\r\n return [\r\n {\r\n id: 'ad-studio-home-page',\r\n name: _TL_('Home'),\r\n route: 'adstudio/home',\r\n onClick: () => gotoPage(history, rootRoute, '/home', search),\r\n icon: HomeRegular,\r\n isSelected: isHomePageSelected(pathname, rootRoute),\r\n },\r\n {\r\n id: 'ad-studio-images-page',\r\n name: _TL_('Images'),\r\n route: 'adstudio/images',\r\n onClick: () => gotoPage(history, rootRoute, '/images', search),\r\n icon: ImageRegular,\r\n isSelected: isSubPageSelected(pathname, 'images', rootRoute),\r\n },\r\n ...isBrandKitEnabled ? [{\r\n id: 'ad-studio-display-templates-page',\r\n name: _TL_('Display templates'),\r\n route: 'adstudio/displaytemplates',\r\n onClick: () => gotoPage(history, rootRoute, '/displaytemplates', search),\r\n icon: KeyboardLayoutOneHandedLeft20Regular,\r\n isSelected: isSubPageSelected(pathname, 'displaytemplates', rootRoute),\r\n }] : [],\r\n {\r\n id: 'ad-studio-videos-page',\r\n name: _TL_('Videos'),\r\n route: 'adstudio/videos',\r\n onClick: () => gotoPage(history, rootRoute, '/videos', search),\r\n icon: VideoRegular,\r\n isSelected: isSubPageSelected(pathname, 'videos', rootRoute),\r\n },\r\n {\r\n id: 'ad-studio-performance-page',\r\n name: _TL_('Performance'),\r\n route: 'adstudio/performance',\r\n onClick: () => gotoPage(history, rootRoute, '/performance', search),\r\n icon: DataTrendingRegular,\r\n isSelected: isSubPageSelected(pathname, 'performance', rootRoute),\r\n },\r\n ...isBrandKitEnabled ? [{\r\n id: 'ad-studio-brand-kit-page',\r\n name: _TL_('Brand kit'),\r\n route: 'adstudio/brandkit',\r\n onClick: () => gotoPage(history, rootRoute, '/brandkit', search),\r\n icon: StyleGuideRegular,\r\n isSelected: isSubPageSelected(pathname, 'brandkit', rootRoute),\r\n }] : [],\r\n {\r\n id: 'ad-studio-library-page',\r\n name: _TL_('Library'),\r\n route: 'adstudio/library',\r\n onClick: () => {\r\n gotoPage(history, rootRoute, '/library', search);\r\n navigateIntoFolderItem({ folder: {} });\r\n },\r\n icon: FolderRegular,\r\n isSelected: isSubPageSelected(pathname, 'library', rootRoute),\r\n showDivider: true,\r\n },\r\n ];\r\n};\r\n\r\nexport const getGroupedItems = (history, rootRoute, navigateIntoFolderItem, brandKitEnabled) => {\r\n const { location } = history;\r\n const { search, pathname } = location;\r\n\r\n const isBrandKitEnabled = brandKitEnabled;\r\n\r\n return [\r\n [\r\n {\r\n id: 'ad-studio-home-page',\r\n name: _TL_('Home'),\r\n route: 'adstudio/home',\r\n onClick: () => gotoPage(history, rootRoute, '/home', search),\r\n icon: HomeRegular,\r\n isSelected: isHomePageSelected(pathname, rootRoute),\r\n },\r\n {\r\n id: 'ad-studio-images-page',\r\n name: _TL_('Images'),\r\n route: 'adstudio/images',\r\n onClick: () => gotoPage(history, rootRoute, '/images', search),\r\n icon: ImageRegular,\r\n isSelected: isSubPageSelected(pathname, 'images', rootRoute),\r\n },\r\n ...isBrandKitEnabled ? [{\r\n id: 'ad-studio-display-templates-page',\r\n name: _TL_('Display templates'),\r\n route: 'adstudio/displaytemplates',\r\n onClick: () => gotoPage(history, rootRoute, '/displaytemplates', search),\r\n icon: KeyboardLayoutOneHandedLeft20Regular,\r\n isSelected: isSubPageSelected(pathname, 'displaytemplates', rootRoute),\r\n }] : [],\r\n {\r\n id: 'ad-studio-videos-page',\r\n name: _TL_('Videos'),\r\n route: 'adstudio/videos',\r\n onClick: () => gotoPage(history, rootRoute, '/videos', search),\r\n icon: VideoRegular,\r\n isSelected: isSubPageSelected(pathname, 'videos', rootRoute),\r\n },\r\n {\r\n id: 'ad-studio-performance-page',\r\n name: _TL_('Performance'),\r\n route: 'adstudio/performance',\r\n onClick: () => gotoPage(history, rootRoute, '/performance', search),\r\n icon: DataTrendingRegular,\r\n isSelected: isSubPageSelected(pathname, 'performance', rootRoute),\r\n },\r\n ...isBrandKitEnabled ? [{\r\n id: 'ad-studio-brand-kit-page',\r\n name: _TL_('Brand kit'),\r\n route: 'adstudio/brandkit',\r\n onClick: () => gotoPage(history, rootRoute, '/brandkit', search),\r\n icon: StyleGuideRegular,\r\n isSelected: isSubPageSelected(pathname, 'brandkit', rootRoute),\r\n }] : [],\r\n ],\r\n [\r\n {\r\n id: 'ad-studio-library-page',\r\n name: _TL_('Library'),\r\n route: 'adstudio/library',\r\n onClick: () => {\r\n gotoPage(history, rootRoute, '/library', search);\r\n navigateIntoFolderItem({ folder: {} });\r\n },\r\n icon: FolderRegular,\r\n isSelected: isSubPageSelected(pathname, 'library', rootRoute),\r\n showDivider: true,\r\n },\r\n {\r\n id: 'folder-path-tree',\r\n },\r\n ],\r\n ];\r\n};\r\n\r\nexport const LOADING_CELL = {};\r\n\r\nexport const MaxFolderLevel = 6;\r\n","import { useCallback, useContext, useEffect, useMemo, useState } from 'react';\r\n\r\nimport { ROOT_FOLDER_ID, handleRealUsedFlag, RealUsedFlagSuffix } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { isCopilotRegionRestricted } from '@bingads-webui-react/copilot-utils';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\n\r\nimport { getStaticItems, gotoLibraryPage, isLibraryPageSelected } from './utils';\r\n\r\nexport const useAdStudioNavigation = ({\r\n history,\r\n rootRoute,\r\n dataService,\r\n onDropToFolder: onDropToFolderProp,\r\n permissions,\r\n adsStudioAccountPreferences,\r\n}) => {\r\n const [selectedItemId, setSelectedItemId] = useState(null);\r\n const [selectedFolderId, setSelectedFolderId] = useState(null);\r\n const [isCopilotEnabled, setIsCopilotEnabled] = useState(false);\r\n const serverContext = useContext(ServerContext);\r\n\r\n const isBrandKitEnabled = permissions && permissions.dynamic && permissions.dynamic.BrandKitUI;\r\n\r\n const {\r\n folderPathTree,\r\n loadFolderPathTreeItem,\r\n loadMoreFolderPathTreeItem,\r\n initializeFolderPathTree,\r\n navigateIntoFolderItem,\r\n navigateIntoRootFolder,\r\n currentFolder,\r\n } = dataService;\r\n\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n const staticItems = useMemo(() => getStaticItems(history, rootRoute, navigateIntoFolderItem, isCopilotEnabled), [history.location.pathname, rootRoute, navigateIntoFolderItem, isCopilotEnabled]);\r\n\r\n const handleFolderItemClicked = useCallback((folder) => {\r\n handleRealUsedFlag(adsStudioAccountPreferences, RealUsedFlagSuffix.App);\r\n const { folderId } = folder;\r\n setSelectedItemId(folderId);\r\n setSelectedFolderId(folderId);\r\n gotoLibraryPage(history, rootRoute, history.location.search);\r\n navigateIntoFolderItem({ folder });\r\n }, [adsStudioAccountPreferences, history, navigateIntoFolderItem, rootRoute]);\r\n\r\n const onDropToFolder = useCallback((folder) => {\r\n onDropToFolderProp(folder);\r\n }, [onDropToFolderProp]);\r\n\r\n useEffect(() => {\r\n if (staticItems.length > 0) {\r\n const selectedItem = staticItems.find(item => item.isSelected);\r\n if (selectedItem) {\r\n if (selectedFolderId && isLibraryPageSelected(history.location.pathname, rootRoute)) {\r\n // if select folder, then the folder should have selected status instead of the library item\r\n setSelectedItemId(selectedFolderId);\r\n } else {\r\n setSelectedItemId(selectedItem.id);\r\n }\r\n }\r\n }\r\n }, [staticItems, history, selectedFolderId, rootRoute]);\r\n\r\n useEffect(() => {\r\n if (!selectedItemId) {\r\n initializeFolderPathTree();\r\n }\r\n }, [initializeFolderPathTree, selectedItemId]);\r\n\r\n useEffect(() => {\r\n if (currentFolder && currentFolder.folderId !== ROOT_FOLDER_ID && isLibraryPageSelected(history.location.pathname, rootRoute)) {\r\n setSelectedFolderId(currentFolder.folderId);\r\n setSelectedItemId(currentFolder.folderId);\r\n } else if (currentFolder && currentFolder.folderId === ROOT_FOLDER_ID) {\r\n setSelectedFolderId(null);\r\n const selectedItem = staticItems.find(item => item.isSelected);\r\n if (selectedItem) {\r\n setSelectedItemId(selectedItem.id);\r\n }\r\n }\r\n }, [currentFolder, history.location.pathname, rootRoute, staticItems]);\r\n\r\n useEffect(() => {\r\n if (isBrandKitEnabled) {\r\n isCopilotRegionRestricted({\r\n feature: 'Recommendations',\r\n permissions,\r\n serverContext,\r\n }).then(isRestricted => setIsCopilotEnabled(!isRestricted));\r\n } else {\r\n setIsCopilotEnabled(false);\r\n }\r\n }, [isBrandKitEnabled, permissions, serverContext]);\r\n\r\n return {\r\n staticItems,\r\n selectedItemId,\r\n setSelectedItemId,\r\n selectedFolderId,\r\n setSelectedFolderId,\r\n folderPathTree: folderPathTree[0],\r\n loadFolderPathTreeItem,\r\n loadMoreFolderPathTreeItem,\r\n handleFolderItemClicked,\r\n onDropToFolder,\r\n navigateIntoRootFolder,\r\n };\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Tab, mergeClasses } from '@fluentui/react-components';\r\n\r\nexport const CustomTab = ({\r\n value,\r\n classes,\r\n isSelected,\r\n children,\r\n}) => (\r\n
    \r\n \r\n {children}\r\n \r\n
    \r\n);\r\n\r\nCustomTab.propTypes = {\r\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\r\n classes: PropTypes.shape({\r\n tabItemWrapper: PropTypes.string,\r\n selected: PropTypes.string,\r\n }).isRequired,\r\n isSelected: PropTypes.bool.isRequired,\r\n children: PropTypes.node.isRequired,\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Spinner } from '@fluentui/react-components';\r\nimport { TilesGridLoadingCell } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n\r\nexport const LoadingSpinner = ({\r\n onLoading,\r\n}) => (\r\n \r\n \r\n \r\n);\r\n\r\nLoadingSpinner.propTypes = {\r\n onLoading: PropTypes.func.isRequired,\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { TreeItem, TreeItemLayout, mergeClasses } from '@fluentui/react-components';\r\nimport { TooltipHost, TooltipOverflowMode } from '@bingads-webui-react/fabric-control';\r\nimport { TilesGridCellDropDecorator } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { CustomTab } from './custom-tab';\r\n\r\nexport const LeafTreeItem = ({\r\n value,\r\n level,\r\n setSize,\r\n posinset,\r\n onClick,\r\n classes,\r\n isSelected,\r\n content,\r\n parentValue,\r\n onDrop,\r\n}) => (\r\n \r\n \r\n \r\n \r\n \r\n {content}\r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nLeafTreeItem.propTypes = {\r\n value: PropTypes.number.isRequired,\r\n level: PropTypes.number.isRequired,\r\n setSize: PropTypes.number.isRequired,\r\n posinset: PropTypes.number.isRequired,\r\n onClick: PropTypes.func.isRequired,\r\n classes: PropTypes.shape({\r\n treeItemLayout: PropTypes.string,\r\n treeSelected: PropTypes.string,\r\n customDropDecorator: PropTypes.string,\r\n }).isRequired,\r\n isSelected: PropTypes.bool.isRequired,\r\n content: PropTypes.string.isRequired,\r\n parentValue: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n onDrop: PropTypes.func.isRequired,\r\n};\r\n\r\nLeafTreeItem.defaultProps = {\r\n parentValue: null,\r\n};\r\n","import React, { useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { LoadingSpinner } from './loading-spinner';\r\nimport { LeafTreeItem } from './leaf-tree-item';\r\nimport { LOADING_CELL } from '../utils';\r\n\r\nexport const SubTreeItem = ({\r\n folderItem,\r\n level,\r\n setSize,\r\n posinset,\r\n classes,\r\n selectedItemId,\r\n onRenderSubTree,\r\n onLeafTreeItemClicked,\r\n loadMoreFolderPathTreeItem,\r\n parentFolder,\r\n onDrop,\r\n}) => {\r\n const loadMore = useCallback(() => {\r\n loadMoreFolderPathTreeItem(parentFolder.folderId, parentFolder.subFolders.length);\r\n }, [loadMoreFolderPathTreeItem, parentFolder.folderId, parentFolder.subFolders.length]);\r\n\r\n if (folderItem === LOADING_CELL) {\r\n return ;\r\n }\r\n if (folderItem.subFoldersCount > 0) {\r\n return onRenderSubTree(folderItem);\r\n }\r\n return (\r\n \r\n );\r\n};\r\n\r\nSubTreeItem.propTypes = {\r\n folderItem: PropTypes.shape({\r\n folderId: PropTypes.number,\r\n folderName: PropTypes.string,\r\n subFoldersCount: PropTypes.number,\r\n }).isRequired,\r\n level: PropTypes.number.isRequired,\r\n setSize: PropTypes.number.isRequired,\r\n posinset: PropTypes.number.isRequired,\r\n classes: PropTypes.shape({\r\n treeItemLayout: PropTypes.string,\r\n treeSelected: PropTypes.string,\r\n }).isRequired,\r\n onRenderSubTree: PropTypes.func.isRequired,\r\n onLeafTreeItemClicked: PropTypes.func.isRequired,\r\n loadMoreFolderPathTreeItem: PropTypes.func.isRequired,\r\n parentFolder: PropTypes.shape({\r\n folderId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n subFolders: PropTypes.arrayOf(PropTypes.shape({})),\r\n }).isRequired,\r\n selectedItemId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\r\n onDrop: PropTypes.func.isRequired,\r\n};\r\n\r\nSubTreeItem.defaultProps = {\r\n selectedItemId: null,\r\n};\r\n","import React, { useState, useCallback, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport {\r\n TreeItem,\r\n TreeItemLayout,\r\n Spinner,\r\n mergeClasses,\r\n} from '@fluentui/react-components';\r\nimport {\r\n ChevronRightRegular,\r\n ChevronDownRegular,\r\n ChevronRightFilled,\r\n ChevronDownFilled,\r\n} from '@fluentui/react-icons';\r\nimport { TooltipHost, TooltipOverflowMode } from '@bingads-webui-react/fabric-control';\r\n\r\nimport { TilesGridCellDropDecorator } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n\r\nimport { CustomTab } from './custom-tab';\r\nimport { SubTreeItem } from './sub-tree-item';\r\nimport { LOADING_CELL, MaxFolderLevel } from '../utils';\r\n\r\nexport const SubTree = ({\r\n folderItem,\r\n loadFolderPathTreeItem,\r\n loadMoreFolderPathTreeItem,\r\n i18n,\r\n level,\r\n setSize,\r\n index,\r\n parentFolderId,\r\n classes,\r\n selectedItemId,\r\n onItemSelected,\r\n logger,\r\n onDrop,\r\n}) => {\r\n const [open, setOpen] = useState({});\r\n const [loading, setLoading] = useState({});\r\n\r\n const stopPropagation = useCallback(e => e.stopPropagation(), []);\r\n\r\n const handleOpenChange = useCallback((e, openInner, folderId) => {\r\n stopPropagation(e);\r\n if (level >= MaxFolderLevel) {\r\n return;\r\n }\r\n if (openInner && folderItem.subFolders.length === 0) {\r\n setLoading(prevLoadingStatus => ({ ...prevLoadingStatus, [folderId]: true }));\r\n loadFolderPathTreeItem(folderItem.folderId).finally(() => {\r\n setLoading(prevLoadingStatus => ({ ...prevLoadingStatus, [folderId]: false }));\r\n });\r\n }\r\n logger.logTrace(`AdStudioNavigation: folder item ${openInner ? 'expanded' : 'collapsed'}`, { navigationItem: folderId });\r\n setOpen(prevOpenStatus => ({ ...prevOpenStatus, [folderId]: openInner }));\r\n }, [folderItem.folderId, folderItem.subFolders.length, level, loadFolderPathTreeItem, logger, stopPropagation]);\r\n\r\n const handleTreeItemClicked = useCallback((e, folder) => {\r\n stopPropagation(e);\r\n onItemSelected(folder);\r\n logger.logTrace('AdStudioNavigation: folder item clicked', { navigationItem: folder.folderId });\r\n }, [logger, onItemSelected, stopPropagation]);\r\n\r\n const expandIcon = useMemo(() => {\r\n if (loading[folderItem.folderId]) {\r\n return ;\r\n }\r\n if (open[folderItem.folderId] && folderItem.subFolders.length > 0) {\r\n const ChevronDown = selectedItemId === folderItem.folderId ? ChevronDownFilled : ChevronDownRegular;\r\n return handleOpenChange(e, false, folderItem.folderId)} />;\r\n }\r\n const ChevronRight = selectedItemId === folderItem.folderId ? ChevronRightFilled : ChevronRightRegular;\r\n return handleOpenChange(e, true, folderItem.folderId)} />;\r\n }, [folderItem, handleOpenChange, loading, open, selectedItemId]);\r\n\r\n const checkFolderSelected = useCallback((folderId, subFloders, selectedId) => {\r\n if (selectedId === folderId) {\r\n return true;\r\n }\r\n if (!open[folderId]) {\r\n // if current folder is collapsed, need to check if any of its subfolders are selected\r\n let subFolderSelected = subFloders.some(subFolder => subFolder.folderId === selectedId);\r\n if (subFolderSelected) {\r\n return true;\r\n }\r\n subFloders.forEach((subFolder) => {\r\n if (subFolder.subFolders.length > 0) {\r\n subFolderSelected = checkFolderSelected(subFolder.folderId, subFolder.subFolders, selectedId);\r\n }\r\n });\r\n return subFolderSelected;\r\n }\r\n return false;\r\n }, [open]);\r\n\r\n const isCurrentFolderSelected = useMemo(\r\n () => checkFolderSelected(folderItem.folderId, folderItem.subFolders, selectedItemId),\r\n [checkFolderSelected, folderItem.folderId, folderItem.subFolders, selectedItemId]\r\n );\r\n\r\n const treeItems = useMemo(() => {\r\n const items = [...folderItem.subFolders];\r\n if (folderItem.subFolders.length > 0 && folderItem.subFolders.length < folderItem.subFoldersCount) {\r\n items.push(LOADING_CELL);\r\n }\r\n return items;\r\n }, [folderItem.subFolders, folderItem.subFoldersCount]);\r\n\r\n if (level > MaxFolderLevel) {\r\n return null;\r\n }\r\n\r\n return (\r\n handleTreeItemClicked(e, folderItem)}\r\n aria-level={level}\r\n aria-setsize={setSize}\r\n aria-posinset={index}\r\n parentValue={parentFolderId}\r\n >\r\n { onDrop(folderItem); }}\r\n customClassName={classes.customDropDecorator}\r\n >\r\n \r\n \r\n \r\n {folderItem.folderName}\r\n \r\n \r\n \r\n \r\n {\r\n open[folderItem.folderId] && treeItems.length > 0 && treeItems.map((subFolder, i) =>\r\n (\r\n (\r\n \r\n )}\r\n onLeafTreeItemClicked={(e) => {\r\n stopPropagation(e);\r\n onItemSelected(subFolder);\r\n }}\r\n loadMoreFolderPathTreeItem={loadMoreFolderPathTreeItem}\r\n key={subFolder.folderId}\r\n parentFolder={folderItem}\r\n onDrop={() => { onDrop(subFolder); }}\r\n />\r\n ))\r\n }\r\n \r\n );\r\n};\r\n\r\nSubTree.propTypes = {\r\n folderItem: PropTypes.shape({\r\n folderId: PropTypes.number,\r\n folderName: PropTypes.string,\r\n subFolders: PropTypes.arrayOf(PropTypes.shape({})),\r\n subFoldersCount: PropTypes.number,\r\n }).isRequired,\r\n loadFolderPathTreeItem: PropTypes.func.isRequired,\r\n loadMoreFolderPathTreeItem: PropTypes.func.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n level: PropTypes.number.isRequired,\r\n setSize: PropTypes.number.isRequired,\r\n index: PropTypes.number.isRequired,\r\n parentFolderId: PropTypes.number,\r\n classes: PropTypes.shape({\r\n treeItemLayout: PropTypes.string,\r\n treeSelected: PropTypes.string,\r\n customDropDecorator: PropTypes.string,\r\n }).isRequired,\r\n onItemSelected: PropTypes.func.isRequired,\r\n selectedItemId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n }).isRequired,\r\n onDrop: PropTypes.func.isRequired,\r\n};\r\n\r\nSubTree.defaultProps = {\r\n parentFolderId: null,\r\n selectedItemId: null,\r\n};\r\n","import { makeStyles, shorthands, tokens } from '@fluentui/react-components';\r\n\r\nexport const useAdStudioNavigationStyle = makeStyles({\r\n customTabItem: {\r\n width: '100%',\r\n },\r\n tabItemWrapper: {\r\n paddingTop: '4px',\r\n paddingBottom: '4px',\r\n paddingLeft: '6px',\r\n paddingRight: '6px',\r\n '&.selected': {\r\n backgroundColor: '#ebebeb',\r\n ...shorthands.borderRadius('8px'),\r\n },\r\n },\r\n adStudioNavigation: {\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n bottom: '32px',\r\n width: '266px',\r\n backgroundColor: tokens.colorNeutralBackground2,\r\n ...shorthands.padding('8px', '8px', '24px', '8px'),\r\n overflowY: 'auto',\r\n zIndex: 1,\r\n '& .side-navigation-more-button': {\r\n display: 'none',\r\n },\r\n },\r\n placeholder: {\r\n position: 'absolute',\r\n bottom: 0,\r\n width: '266px',\r\n height: '32px',\r\n backgroundColor: tokens.colorNeutralBackground2,\r\n zIndex: -1,\r\n },\r\n divider: {\r\n marginTop: '6px',\r\n marginBottom: '6px',\r\n marginLeft: '8px',\r\n marginRight: '8px',\r\n },\r\n dividerContent: {\r\n '&::before': {\r\n content: '\"\"',\r\n display: 'flex',\r\n flexGrow: 1,\r\n minWidth: '8px',\r\n ...shorthands.borderTop('1px', 'solid', '#E0E0E0'),\r\n },\r\n },\r\n});\r\n\r\nexport const useFoldersTreeViewStyle = makeStyles({\r\n flatTree: {\r\n '&.fui-FlatTree': {\r\n rowGap: 0,\r\n },\r\n },\r\n tabItemWrapper: {\r\n '& button': {\r\n width: '100%',\r\n },\r\n },\r\n treeItemLayout: {\r\n '&.fui-TreeItemLayout': {\r\n lineHeight: '20px',\r\n minHeight: '20px',\r\n '&:active': {\r\n backgroundColor: '#e0e0e0 !important',\r\n },\r\n },\r\n '& .fui-TreeItemLayout__main': {\r\n overflowX: 'hidden',\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n },\r\n },\r\n tooltipHost: {\r\n display: 'inline-block',\r\n width: '100%',\r\n ...shorthands.overflow('hidden'),\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n },\r\n treeSelected: {\r\n fontWeight: 'bold',\r\n },\r\n customDropDecorator: {\r\n outlineOffset: '-2px',\r\n outlineStyle: 'dashed',\r\n outlineWidth: '2px',\r\n outlineColor: tokens.colorBrandBackground,\r\n },\r\n});\r\n","import React, { useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n FlatTree,\r\n} from '@fluentui/react-components';\r\n\r\nimport { SubTree } from './sub-tree';\r\nimport { useFoldersTreeViewStyle } from '../style';\r\nimport { SubTreeItem } from './sub-tree-item';\r\nimport { LOADING_CELL } from '../utils';\r\n\r\nexport const FolderPathTreeView = ({\r\n folderPathTree,\r\n loadFolderPathTreeItem,\r\n loadMoreFolderPathTreeItem,\r\n i18n,\r\n selectedItemId,\r\n onItemSelected,\r\n logger,\r\n onDrop,\r\n}) => {\r\n const classes = useFoldersTreeViewStyle();\r\n\r\n const { subFolders, subFoldersCount } = folderPathTree;\r\n\r\n const treeItems = useMemo(() => {\r\n if (subFolders && subFolders.length > 0) {\r\n const items = [...subFolders];\r\n if (subFolders.length < subFoldersCount) {\r\n items.push(LOADING_CELL);\r\n }\r\n return items;\r\n }\r\n return [];\r\n }, [subFolders, subFoldersCount]);\r\n\r\n const rootFolder = useMemo(() => ({\r\n folderId: 'ROOT',\r\n subFolders,\r\n subFoldersCount,\r\n }), [subFolders, subFoldersCount]);\r\n\r\n return (\r\n \r\n {\r\n treeItems && treeItems.map((folder, index) =>\r\n (\r\n (\r\n \r\n )}\r\n onLeafTreeItemClicked={(e) => {\r\n e.stopPropagation();\r\n onItemSelected(folder);\r\n }}\r\n loadMoreFolderPathTreeItem={loadMoreFolderPathTreeItem}\r\n parentFolder={rootFolder}\r\n onDrop={() => { onDrop(folder); }}\r\n />\r\n ))\r\n }\r\n \r\n );\r\n};\r\n\r\nFolderPathTreeView.propTypes = {\r\n folderPathTree: PropTypes.shape({\r\n subFolders: PropTypes.arrayOf(PropTypes.shape({})),\r\n subFoldersCount: PropTypes.number,\r\n }),\r\n loadFolderPathTreeItem: PropTypes.func.isRequired,\r\n loadMoreFolderPathTreeItem: PropTypes.func.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n onItemSelected: PropTypes.func.isRequired,\r\n selectedItemId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\r\n logger: PropTypes.shape({}).isRequired,\r\n onDrop: PropTypes.func.isRequired,\r\n};\r\n\r\nFolderPathTreeView.defaultProps = {\r\n folderPathTree: {},\r\n selectedItemId: '',\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { TabList, mergeClasses } from '@fluentui/react-components';\r\nimport { SideNavigationItem } from '@bingads-webui-fluent-component/navigation';\r\nimport { handleRealUsedFlag, RealUsedFlagSuffix } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n\r\nimport { useAdStudioNavigation } from './use-ad-studio-navigation';\r\nimport { FolderPathTreeView } from './components/folders-tree-view';\r\nimport { useAdStudioNavigationStyle } from './style';\r\n\r\nconst AdStudioNavigationImp = ({\r\n history,\r\n i18n,\r\n rootRoute,\r\n dataService,\r\n logger,\r\n permissions,\r\n onDropToFolder: onDropToFolderProp,\r\n adsStudioAccountPreferences,\r\n}) => {\r\n const {\r\n staticItems,\r\n selectedItemId,\r\n setSelectedFolderId,\r\n folderPathTree,\r\n loadFolderPathTreeItem,\r\n loadMoreFolderPathTreeItem,\r\n handleFolderItemClicked,\r\n onDropToFolder,\r\n navigateIntoRootFolder,\r\n } = useAdStudioNavigation({\r\n history,\r\n rootRoute,\r\n dataService,\r\n onDropToFolder: onDropToFolderProp,\r\n permissions,\r\n adsStudioAccountPreferences,\r\n });\r\n\r\n const classes = useAdStudioNavigationStyle();\r\n return (\r\n <>\r\n
    \r\n \r\n {staticItems.map(item => (\r\n
    \r\n {\r\n item.showDivider &&\r\n
    \r\n
    \r\n
    \r\n }\r\n {\r\n handleRealUsedFlag(adsStudioAccountPreferences, RealUsedFlagSuffix.App);\r\n setSelectedFolderId(null);\r\n navigateIntoRootFolder();\r\n item.onClick();\r\n logger.logTrace('AdStudioNavigation: static item clicked', { navigationItem: item.name });\r\n },\r\n }}\r\n selectedTabId={selectedItemId}\r\n config={{}}\r\n className={classes.customTabItem}\r\n />\r\n
    \r\n ))}\r\n {\r\n folderPathTree && folderPathTree.subFolders.length > 0 &&\r\n \r\n }\r\n \r\n
    \r\n
    \r\n \r\n );\r\n};\r\n\r\nAdStudioNavigationImp.propTypes = {\r\n history: PropTypes.shape({\r\n location: PropTypes.shape({\r\n pathname: PropTypes.string,\r\n }),\r\n }).isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n rootRoute: PropTypes.string.isRequired,\r\n dataService: PropTypes.shape({\r\n folderPathTree: PropTypes.arrayOf(PropTypes.shape({})),\r\n loadFolderPathTreeItem: PropTypes.func,\r\n loadMoreFolderPathTreeItem: PropTypes.func,\r\n }).isRequired,\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n }).isRequired,\r\n onDropToFolder: PropTypes.func.isRequired,\r\n};\r\n\r\nexport const AdStudioNavigation = AdStudioNavigationImp;\r\n","import { useCallback, useContext, useEffect, useMemo, useState } from 'react';\r\nimport _ from 'underscore';\r\nimport { ROOT_FOLDER_ID, handleRealUsedFlag, RealUsedFlagSuffix } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { isCopilotRegionRestricted } from '@bingads-webui-react/copilot-utils';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\n\r\nimport { getGroupedItems, gotoLibraryPage, isLibraryPageSelected } from './utils';\r\n\r\nexport const useAdStudioSideNavigation = ({\r\n history,\r\n rootRoute,\r\n dataService,\r\n onDropToFolder: onDropToFolderProp,\r\n permissions,\r\n adsStudioAccountPreferences,\r\n}) => {\r\n const [selectedItemId, setSelectedItemId] = useState(null);\r\n const [selectedFolderId, setSelectedFolderId] = useState(null);\r\n const [isCopilotEnabled, setIsCopilotEnabled] = useState(false);\r\n const serverContext = useContext(ServerContext);\r\n\r\n const isBrandKitEnabled = permissions && permissions.dynamic && permissions.dynamic.BrandKitUI;\r\n\r\n const {\r\n folderPathTree,\r\n loadFolderPathTreeItem,\r\n loadMoreFolderPathTreeItem,\r\n initializeFolderPathTree,\r\n navigateIntoFolderItem,\r\n navigateIntoRootFolder,\r\n currentFolder,\r\n } = dataService;\r\n\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n const groupedItems = useMemo(() => getGroupedItems(history, rootRoute, navigateIntoFolderItem, isCopilotEnabled), [history.location.pathname, rootRoute, navigateIntoFolderItem, isCopilotEnabled]);\r\n\r\n const staticItems = useMemo(() => _.flatten(groupedItems), [groupedItems]);\r\n\r\n const handleFolderItemClicked = useCallback((folder) => {\r\n handleRealUsedFlag(adsStudioAccountPreferences, RealUsedFlagSuffix.App);\r\n const { folderId } = folder;\r\n setSelectedItemId(folderId);\r\n setSelectedFolderId(folderId);\r\n gotoLibraryPage(history, rootRoute, history.location.search);\r\n navigateIntoFolderItem({ folder });\r\n }, [adsStudioAccountPreferences, history, navigateIntoFolderItem, rootRoute]);\r\n\r\n const onDropToFolder = useCallback((folder) => {\r\n onDropToFolderProp(folder);\r\n }, [onDropToFolderProp]);\r\n\r\n useEffect(() => {\r\n if (staticItems.length > 0) {\r\n const selectedItem = staticItems.find(item => item.isSelected);\r\n if (selectedItem) {\r\n if (selectedFolderId && isLibraryPageSelected(history.location.pathname, rootRoute)) {\r\n // if select folder, then the folder should have selected status instead of the library item\r\n setSelectedItemId(selectedFolderId);\r\n } else {\r\n setSelectedItemId(selectedItem.id);\r\n }\r\n }\r\n }\r\n }, [staticItems, history, selectedFolderId, rootRoute]);\r\n\r\n useEffect(() => {\r\n if (!selectedItemId) {\r\n initializeFolderPathTree();\r\n }\r\n }, [initializeFolderPathTree, selectedItemId]);\r\n\r\n useEffect(() => {\r\n if (currentFolder && currentFolder.folderId !== ROOT_FOLDER_ID && isLibraryPageSelected(history.location.pathname, rootRoute)) {\r\n setSelectedFolderId(currentFolder.folderId);\r\n setSelectedItemId(currentFolder.folderId);\r\n } else if (currentFolder && currentFolder.folderId === ROOT_FOLDER_ID) {\r\n setSelectedFolderId(null);\r\n const selectedItem = staticItems.find(item => item.isSelected);\r\n if (selectedItem) {\r\n setSelectedItemId(selectedItem.id);\r\n }\r\n }\r\n }, [currentFolder, history.location.pathname, rootRoute, staticItems]);\r\n\r\n useEffect(() => {\r\n if (isBrandKitEnabled) {\r\n isCopilotRegionRestricted({\r\n feature: 'Recommendations',\r\n permissions,\r\n serverContext,\r\n }).then(isRestricted => setIsCopilotEnabled(!isRestricted));\r\n } else {\r\n setIsCopilotEnabled(false);\r\n }\r\n }, [isBrandKitEnabled, permissions, serverContext]);\r\n\r\n return {\r\n groupedItems,\r\n staticItems,\r\n selectedItemId,\r\n setSelectedItemId,\r\n selectedFolderId,\r\n setSelectedFolderId,\r\n folderPathTree: folderPathTree[0],\r\n loadFolderPathTreeItem,\r\n loadMoreFolderPathTreeItem,\r\n handleFolderItemClicked,\r\n onDropToFolder,\r\n navigateIntoRootFolder,\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 { SideNavigation } from '@bingads-webui-fluent-component/navigation';\r\nimport { handleRealUsedFlag, RealUsedFlagSuffix } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n\r\nimport { useAdStudioSideNavigation } from './use-ad-studio-side-navigation';\r\nimport { FolderPathTreeView } from './components/folders-tree-view';\r\nimport { useAdStudioNavigationStyle } from './style';\r\n\r\nconst MIN_VISIBLE_TAB_COUNT = 8;\r\n\r\nconst AdStudioNavigationImp = ({\r\n history,\r\n i18n,\r\n rootRoute,\r\n dataService,\r\n logger,\r\n permissions,\r\n onDropToFolder: onDropToFolderProp,\r\n adsStudioAccountPreferences,\r\n}) => {\r\n const {\r\n groupedItems,\r\n selectedItemId,\r\n setSelectedFolderId,\r\n folderPathTree,\r\n loadFolderPathTreeItem,\r\n loadMoreFolderPathTreeItem,\r\n handleFolderItemClicked,\r\n onDropToFolder,\r\n navigateIntoRootFolder,\r\n } = useAdStudioSideNavigation({\r\n history,\r\n rootRoute,\r\n dataService,\r\n onDropToFolder: onDropToFolderProp,\r\n permissions,\r\n adsStudioAccountPreferences,\r\n });\r\n\r\n const classes = useAdStudioNavigationStyle();\r\n const renderFolderPathTree = useCallback(() => (\r\n folderPathTree && folderPathTree.subFolders.length > 0 &&\r\n \r\n ), [folderPathTree, handleFolderItemClicked, i18n, loadFolderPathTreeItem, loadMoreFolderPathTreeItem, logger, onDropToFolder, selectedItemId]);\r\n\r\n const groupedStaticItems = useMemo(() => groupedItems.map(items => items.map((item) => {\r\n if (item.id === 'folder-path-tree') {\r\n return {\r\n ...item,\r\n key: item.id,\r\n text: 'folderPathTree',\r\n renderCustomizedItem: renderFolderPathTree,\r\n };\r\n }\r\n return (\r\n {\r\n id: item.id,\r\n key: item.id,\r\n icon: item.icon,\r\n text: i18n.getString(item.name),\r\n isSelected: item.id === selectedItemId,\r\n onClick: () => {\r\n handleRealUsedFlag(adsStudioAccountPreferences, RealUsedFlagSuffix.App);\r\n setSelectedFolderId(null);\r\n navigateIntoRootFolder();\r\n item.onClick();\r\n logger.logTrace('AdStudioNavigation: static item clicked', { navigationItem: item.name });\r\n },\r\n }\r\n );\r\n })), [groupedItems, i18n, selectedItemId, renderFolderPathTree, adsStudioAccountPreferences, setSelectedFolderId, navigateIntoRootFolder, logger]);\r\n\r\n const getSelectedNavigationItemId = useCallback(() => selectedItemId, [selectedItemId]);\r\n\r\n return (\r\n <>\r\n
    \r\n \r\n
    \r\n
    \r\n \r\n );\r\n};\r\n\r\nAdStudioNavigationImp.propTypes = {\r\n history: PropTypes.shape({\r\n location: PropTypes.shape({\r\n pathname: PropTypes.string,\r\n }),\r\n }).isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n rootRoute: PropTypes.string.isRequired,\r\n dataService: PropTypes.shape({\r\n folderPathTree: PropTypes.arrayOf(PropTypes.shape({})),\r\n loadFolderPathTreeItem: PropTypes.func,\r\n loadMoreFolderPathTreeItem: PropTypes.func,\r\n }).isRequired,\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n }).isRequired,\r\n onDropToFolder: PropTypes.func.isRequired,\r\n};\r\n\r\nexport const AdStudioSideNavigation = AdStudioNavigationImp;\r\n","import React, { useCallback, useMemo, useState } from 'react';\r\nimport _ from 'underscore';\r\nimport hoistNonReactStatics from 'hoist-non-react-statics';\r\nimport { getDisplayName } from '@bingads-webui-react/hoc-utils';\r\nimport { makeStyles, mergeClasses } from '@fluentui/react-components';\r\nimport { useAdsStudioServices } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { LayoutSizeScale, useLayoutResizeObserver } from '@bingads-webui-fluent-component/layout-size';\r\nimport { AdStudioNavigation } from './ad-studio-navigation';\r\nimport { AdStudioSideNavigation } from './ad-studio-side-navigation';\r\n\r\nconst isSubPageSelected = (pathname, subPage, rootRoute) => pathname.includes(`${rootRoute}/`) && pathname.match(subPage);\r\nconst subPagesWithoutNavigation = [\r\n /generateimage/,\r\n /images\\/\\d+\\/edit/,\r\n /displaytemplates\\/create/,\r\n /displaytemplates\\/\\d+\\/edit/,\r\n /videotemplates/,\r\n /video\\/create/,\r\n /video\\/\\d+\\/edit/,\r\n];\r\n\r\nconst useStyles = makeStyles({\r\n hideNavigation: {\r\n '& .ad-studio-navigation, .ad-studio-navigation-placeholder ': {\r\n display: 'none',\r\n },\r\n },\r\n height100: {\r\n height: '100%',\r\n },\r\n leftMargin: {\r\n marginLeft: '266px',\r\n },\r\n});\r\n\r\nconst getModeByLayoutSize = (layoutSize) => {\r\n const result = LayoutSizeScale[layoutSize] >= LayoutSizeScale.XL;\r\n\r\n return result;\r\n};\r\n\r\nexport const withAdStudioNavigation = (Component) => {\r\n const Wrapper = (props) => {\r\n const {\r\n history, i18n, ROOT_ROUTE, logger, permissions, adsStudioAccountPreferences,\r\n } = props;\r\n\r\n const [targetDropFolder, setTargetDropFolder] = useState(null);\r\n const [layoutSize, setLayoutSize] = React.useState('XL');\r\n\r\n const dataService = useAdsStudioServices();\r\n useLayoutResizeObserver(setLayoutSize);\r\n const largeSize = useMemo(() => getModeByLayoutSize(layoutSize), [layoutSize]);\r\n\r\n const shouldNotShowNavigation = () => {\r\n if (!largeSize) {\r\n return true;\r\n }\r\n const { location } = history;\r\n const { pathname } = location;\r\n return subPagesWithoutNavigation.some(subPage => isSubPageSelected(pathname, subPage, ROOT_ROUTE));\r\n };\r\n\r\n const onDropToFolder = useCallback((folder) => {\r\n setTargetDropFolder({\r\n newTargetFolder: {}, // force to update targetDropFolder\r\n folder,\r\n });\r\n }, []);\r\n\r\n const resetTargetDropFolder = useCallback(() => {\r\n setTargetDropFolder(null);\r\n }, []);\r\n\r\n const classes = useStyles();\r\n\r\n return (\r\n
    \r\n {_.get(permissions, ['dynamic', 'ASNavigationSwitch']) ? (\r\n \r\n ) : (\r\n \r\n )}\r\n
    \r\n \r\n
    \r\n
    \r\n );\r\n };\r\n\r\n Wrapper.displayName = `withAdStudioNavigation(${getDisplayName(Component)})`;\r\n hoistNonReactStatics(Wrapper, Component);\r\n\r\n return Wrapper;\r\n};\r\n"],"names":["LayoutType","UnStyledDisclaimerEditor","_React$PureComponent","props","_this","_classCallCheck","_callSuper","onSubmit","setState","alwaysShowError","getFirstAlertElementAndFocus","state","isValid","disclaimer","DisclaimerLayout","Title","selected","value","dataToBeSaved","editData","Id","confirm","i18n","getString","repository","create","then","onClose","onDisclaimerAddOrUpdated","catch","errors","_","uniq","message","map","error","isHtmlMessage","DangerousHtmlMessage","finally","withUiBlock","$","usePanel","onValidate","result","preState","toString","data","onLayoutTypeChange","dropdownitems","onSelectedChange","alertNode","ref","current","querySelector","parentElement","firstChild","focus","renderlayoutOptions","item","_jsxs","React","children","concat","_jsx","Alert","level","dismissible","icon","className","renderSettingItem","_ref","settingName","labelText","_ref$helpId","helpId","HelpPopup","topic","hidePopupOption","permissions","isNativeAd","showOnlyPopupLayout","layoutTypeOptions","defaultData","Name","PopupText","LineText","FinalUrls","FinalMobileUrls","dropdownSeleted","cloneDeep","popupSchema","_objectSpread","schema","properties","required","lineSchema","_defineProperty","createRef","_inherits","_createClass","key","header","this","onClick","footer","customNameErrors","nameSetting","ValidatedInput","validationProps","field","errorProcessor","oldError","id","ariaLabel","layoutTypeSetting","role","classes","hideLayoutOption","ValidatedRadioGroup","items","renderItem","onChange","titleSetting","DropdownSelector","selectedItem","onSelect","totalCount","enableArrowKeysSupport","shouldFocusFirstFocusableItemOnMount","getTitlePopupHelpId","customDescriptionErrors","errorProcessorForDescription","popupSetting","getInformationPopupSetting","TextArea","RemainingCharsHint","str","lineSetting","customFinalUrlErrors","finalUrlSetting","ValidatedUrlEditor","mobileUrlSetting","ValidationGroup","length","ErrorMessages","messages","defaultProps","DisclaimerEditor","withDefaultStyles","paddingLeft","display","PopupDisclaimerFilter","DisclaimerSelector","onFetch","_ref$query","query","pageNumber","findAll","where","name","contains","skip","limit","_ref2","total","isMountedFlag","filteredItems","shouldFilterPopup","totalCountToInsert","fetchPopUpDisclaimerTotalCount","onEdit","extension","event","preventDefault","stopPropagation","dropdownSelectorRef","instanceRef","handleClickOutside","onRemove","destroy","getDropdownButtonA11yLabel","label","_ref3","_ref3$query","_ref4","title","href","renderSelectedItem","renderEmptyList","prevProps","toggleSinceUpdated","componentNode","val","selectedDisclaimer","onSelectDisclaimer","mode","pageSize","enableRandomPage","DisclaimerStringMap","DisclaimerLabelText","_TL_","Disclaimers_Campiagn_Description","Disclaimers_Native_Campaign_Description","Disclaimers_Campaign_Hint","Disclaimers_Campaign_Hint_New","Disclaimers_Add","Disclaimers_Create","Disclaimers_DisplayLayout_Label","Disclaimers_DisplayLayout_Popup","Disclaimers_DisplayLayout_AdditionalLine","Disclaimers_DisplayLayout_AdditionalLine_Hint","Disclaimers_Edit","Disclaimers_Name_Label","Disclaimers_Select","Disclaimers_Title_Label","Disclaimers_Title_Default","Disclaimers_Dropdown_Disclaimer","Disclaimers_Dropdown_Disclosure","Disclaimers_Dropdown_MoreDisclaimer","Disclaimers_Dropdown_Offer","Disclaimers_Dropdown_SafetyInfor","Disclaimers_Dropdown_SafetyInformation","Disclaimers_Information_Label","Disclaimers_Edit_Confirmation","Disclaimers_Remove_Confirmation","Disclaimers_Remove_Confirmation_body","Button_Close","Cancel","Save","Edit","Remove","LearnMoreLinkText","RemainingCharactersText_New","ExceededCharactersText_New","Ad_FinalUrl","MobileFinalUrl_Label","Loading","Search_No_Result","DisclaimerNameRequired","DisclaimerInformationRequired","FinalURLRequired","Validation_Base_Field_Not_Valid","Validation_NotEmpty_Required_Field","Validation_String_Max_Length","Validation_String_Invalid_Characters","Validation_Number_Require_Numeric","Validation_Number_Max_Length","Validation_Number_Range_Min","Validation_Number_Range_Max","Validation_Number_Range_Between","Validation_Array_Size_Max","Validation_Array_Size_Between","Validation_Array_Items_Invalid","Validation_Array_Items_Duplicate","Close","EntitySelector_Search_Placeholder","Disclaimers_Should_Check_With_Selected_Disclaimer","EntitySelector_Pagination_Page","EntitySelector_Pagination_TotalPageCountText","EntitySelector_Pagination_PreviousPageText","EntitySelector_Pagination_NextPageText","Modal","document","body","AdsCampaignDisclaimers","onCheckedChange","isTrusted","prev","newValue","enableDisclaimer","onDisclaimerCheckboxChange","errorMessage","isCheckboxFocusStyle","updatedExtension","arguments","undefined","onAddClick","e","isAddOpen","onEditUIClose","EditingDisclaimer","resetSelectedDisclaimer","getValues","campaignName","isForNew","validate","DisclaimerAdsEnabled","campaignInfo","campaignId","Campaign","CampaignName","AdExtensionAssociations","Type","Status","valid","validateAndWarn","selectedDisclaimerInfo","testRef","bind","prevState","errorMeassageClearIfNeeded","onDataChange","disclaimerEditor","addContent","Panel","isOpen","panelClassName","panelReadyAriaLabel","onRequestClose","shouldCloseOnOverlayClick","overlayClassName","selectorContent","errorsContent","disableTitle","AllowDisclaimerEnabled","Checkbox","checked","isDisclaimerCheckboxDisabled","viewModelToBulkModelForDisclaimerAssociation","campaignViewModel","association","useStyles","adsStudioColorPicker","width","height","borderBottom","tokens","strokeWidthThin","colorNeutralStroke2","margin","flex","justifyContent","alignItems","editBtn","borderRadius","borderRadiusCircular","backgroundColor","colorNeutralBackground1","backdropFilter","delBtn","border","fontSize","fontSizeBase300","color","colorNeutralForeground2","padding","spacingVerticalM","flexColumn","flexDirection","hr","position","left","right","colorNeutralStroke1","tooltip","maxWidth","adsStudioColorPalette","paletteAddColor","borderRadiusXLarge","paletteColor","paletteBox","strokeWidthThick","newColor","colorPickerStyles","panel","root","minWidth","flexPreviewBox","styles","flexContainer","flexSlider","spacingHorizontalSNudge","borderRadiusMedium","colorRectangle","minHeight","getSkeletonStyles","row","gap","flexWrap","colorNeutralStencil1","TooltipContent","colorData","onColorChange","onDelete","ColorPicker","HexCode","alphaType","showPreview","Button","isColorSelected","updateColor","onTooltipVisibilityChange","Tooltip","content","ev","colorObj","withArrow","relationship","positioning","visible","onVisibleChange","_ev","useHandleCloseColorPicker","isSelected","setIsSelected","popupRef","useCallback","target","includes","hex","useEffect","addEventListener","removeEventListener","useCheckDuplicateColor","allowDuplicates","paletteData","onUpdate","isDuplicate","setIsDuplicate","onUpdateColor","some","defaultState","BrandColors","showEditBtn","enableEditBtn","showTooltipOnSelect","defaultSelected","hideCaption","palletteBoxSize","paletteColorSize","setShowEditBtn","useState","setColorData","onMouseEnter","style","boxShadow","onMouseLeave","tabIndex","onKeyDown","size","visibility","Caption1Strong","ColorAddButton","totalColors","PaletteSkeleton","Skeleton","SkeletonItem","subTitle","text","isLoading","maxColors","helpTopic","helpLabel","renderHelpBubble","useMemo","HelpButton","FormCard","FormCardDefaultHeader","contentAfter","contentBefore","FormCardBody","Body1Strong","filtersReducer","action","actionType","actionData","_objectWithoutProperties","_excluded","type","humanizedValue","_toConsumableArray","newState","filter","initialState","newHumanizedValue","index","filterToUpdate","isFilterAlwaysVisible","splice","filterWithValues","useMenuStyle","makeStyles","menuButton","shorthands","marginLeft","paddingRight","fontWeight","NewFilterContextMenu","allSupportedFilters","filters","onAddNewFilter","isFocused","buttonRef","useRef","_useState","_useState2","_slicedToArray","checkedValues","setCheckedValues","values","f","FilterType","SearchText","isFilterAlreadySet","disabled","canCheck","checkedItems","newCheckedValues","forEach","Menu","MenuTrigger","MenuButton","mergeClasses","MenuPopover","MenuList","MenuItemRadio","FilterBarContainerImpl","addNewFilter","removeAllFilters","removeEmptyFilters","updateFilter","removeFilter","isEditingFilter","setIsEditingFilter","onFilterValueChange","ianaTimeZone","dateFormat","isAdsStudioAIGCMVPEnabled","focusedFilterRef","defaultOpenFilterRef","onClickAddFilterButton","onClickReadonlyFilter","onCloseEditingFilterBar","onResetClick","newFilter","TopRatedPerformance","initValue","topRated","initHumanizedValue","onRenderNewFilterContextMenu","onValueChange","curFilterState","onDropdownDismiss","onRenderReadonlyFilter","isLast","PerformanceSearchTextFilterComponent","FilterComponents","getPerformanceFilterComponents","onRenderEditingFilter","focused","isDefaultOpen","FilterComponent","defaultOpen","PerformanceEditingFilterBar","focusedFilter","onRenderFilter","onCloseClick","PerformanceReadonlyFilterBar","onClickFilter","FilterBarContainer","PERFORMANCE_PAGE_FILTER_BAR_INIT_STATE","AllSupportedFilters","useFilterBar","currentFolderId","_ref$initialState","_useAdStudioFiltersRe","supportedFilterTypes","_ref2$initialId","initialId","_useReducer","useReducer","_useReducer2","dispatch","idGeneratorRef","getNextId","Number","MAX_SAFE_INTEGER","overwriteFilters","filterTypeMeta","_ref5","useAdStudioFiltersReducer","isAnyFilterSet","searchText","dateAddedFilter","minImageHeight","minImageWidth","importSource","searchLocationFilter","topRatedFilterChecked","assetSources","CSMLTimeFrame","Anytime","selectedFilters","AssetType","VideoDuration","ImportSource","AssetSource","renderFilterBar","allFilters","isEditing","_useState3","_useState4","effectiveFilters","setEffectiveFilters","isDateChanged","filterValues","reduce","acc","DateAdded","dateAddedDateRange","dateAddedFilterCustomDateRange","Custom","dateAddedChoiceOptions","getDateAddedChoiceOptions","o","range","start","end","isGlobalSearch","ROOT_FOLDER_ID","v","assetTypeFilter","FolderAssetType","Image","hasPerfData","civilDateRangeEqual","filterStates","usePerformancePageStaticStyles","makeStaticStyles","outline","colorStrokeFocus2","usePerformancePageStyles","assetLibraryPerformancePageContainer","overflow","subMenu","flexGrow","inlineDownloadContainer","usePerfTableStyle","imagePreviewContainer","imagePreviewAndNameContainer","opacity","transition","top","useImagePreviewRawStyles","hostStyles","actionButtonStyles","COLUMN_KEYS","toolbarFilterContainer","paddingTop","alignSelf","columnKeyToSortBy","_columnKeyToSortBy","asc","CSMLSortBy","AssetIdAsc","desc","AssetIdDesc","ImageName","ImageNameDesc","LastCreatedAsc","LastCreated","MostRecentAsc","MostRecent","ClickAsc","ClickDesc","ClickPeriodAsc","ClickPeriodDesc","ClickChangeAsc","ClickChangeDesc","ClickChangePercentAsc","ClickChangePercentDesc","CTRAsc","CTRDesc","CTRPeriodAsc","CTRPeriodDesc","CTRChangeAsc","CTRChangeDesc","CTRChangePercentAsc","CTRChangePercentDesc","ImpressionAsc","ImpressionDesc","ImpressionPeriodAsc","ImpressionPeriodDesc","ImpressionChangeAsc","ImpressionChangeDesc","ImpressionChangePercentAsc","ImpressionChangePercentDesc","SpendAsc","SpendDesc","SpendPeriodAsc","SpendPeriodDesc","SpendChangeAsc","SpendChangeDesc","SpendChangePercentAsc","SpendChangePercentDesc","formatDate","date","ImagePreview","folderAssetType","url","thumbnailUrl","previewUrl","FluentImage","imageFit","ImageFit","cover","src","alt","maximizeFrame","calloutProps","gapSpace","ActionIconButton","iconName","iconProps","TooltipHost","IconButton","ImagePreviewAndName","highlightedText","onGotoDetailPage","onGotoEditPage","imageName","TextWithHighlight","enableTooltip","AssetColumn","renderHeaderWithPopup","isCollapsible","isResizable","sortable","onRenderHeader","sortIcon","onRender","odataColumnName","IdColumn","isRowHeader","CreatedColumn","createdTime","ModifiedColumn","modifiedTime","ClicksColumn","compareOn","currentPeriod","lastPeriod","fieldName","subColumns","CTRColumn","ImpressionsColumn","_ref6","SpendColumn","_ref7","UsageColumn","_ref8","OpenRegular","textWrap","textAlign","lineHeight","appearance","useInlineChartContainerStyle","inlineChartContainer","flexShrink","zIndex","paddingBottom","fallbacks","fontFamily","float","marginRight","backgroundRepeat","backgroundImage","CircleSolid","CircleDotted","DiamondSolid","DiamondDotted","maxHeight","whiteSpace","verticalAlign","cursor","fontStyle","textDecoration","speak","fontVariant","textTransform","WebkitFontSmoothing","MozOsxFontSmoothing","Waterdrop","backgroundPositionX","backgroundPositionY","borderLeft","borderRight","marginTop","backgroundSize","PerformancePageComponent","navigation","notificationApi","reload","renderToolbarContainer","renderDetailsList","renderInlineChart","dataService","getChartPreference","perfMetricDateRange","adsStudioUserPreferences","renderDatePicker","logger","useInlineDownload","createFolderFilterQuery","performancePagePerfMarker","pagePerfMarker","isAIGCRegionRestricted","setDataLoaded","chartClasses","isChartShown","setChartShown","isPageInited","setPageInited","_ref$assets","assets","_ref$totalAssetCount","totalAssetCount","loadDataInDateRange","loadDataArgs","perfTimeSeriesData","loadPerfTimeSeriesData","loadMoreDataInDateRange","dataOwnerPageName","renameAsset","onFailedToLoadData","showWarning","logTrace","_useFilterBar","_useInlineDownload","isDownloadShown","setDownloadShown","renderInlineDownload","_useLoadData","perfMarker","loadingData","setLoadingData","loadingMoreData","setLoadingMoreData","loadNextPage","count","err","loadDataAsync","sortBy","otherFilters","assetsToLoadForSubfolders","includeParentHierarchy","includeSubfolders","pageName","AdsStudioPageName","PerfPage","createChild","useLoadData","assetId","gotoAssetDetails","loadMoreData","gotoEditImagePage","imageId","_useTableColumns","_ref9","dateRange","isSorted","isSortedDescending","sortByColumn","setSortByColumn","expandedColumns","setExpandedColumns","onUsageClick","_ref10","gotoAdsPageWithAssetIdFilter","columns","compared","col","isExpanded","getInlineDownloadColumns","localizedHeaders","odataColumnNames","subCol","push","getHeaders","_ref11","sortByKey","_ref12","expandColumns","newColumns","cols","_ref13","prevCols","useTableColumns","_usePerformancePage","setPageNumber","DEFAULT_PAGE_SIZE","setPageSize","onPageChange","number","onPageSizeChange","setPerfTablePageSize","pager","pagedItems","slice","itm","usePerformancePage","hasNoData","shouldShowChart","isPageLoading","toolbar","filterBar","onSort","newSortByColumn","setPerfTableSortBy","getInlineDownloadFilter","serializedFilter","stringifySync","args","folderId","filterUrlParam","filterArgs","perfTablePageSize","perfTableSortBy","willFetchData","tap","ret","ImageAssetsCount","folder","itemCount","totalRowCount","tapCatch","willRender","usePageActiveTimeTracker","chartPreference","showChart","updateAssetDetailsParams","classnames","Overlay","AdsStudioSpinner","assetLibraryAccountPreferences","Promise","useHomePageStyle","homePage","topBanner","boxSizing","homepageBanner","texts","searchContainer","searchBoxWrapper","searchBox","borderBottomRightRadius","borderBottomLeftRadius","sendIcon","bottom","subHeading","paragraph","itemContainer","btnWrapper","leftWrapper","rightWrapper","leftBtn","rightBtn","overlay","leftOverlay","rightOverlay","slider","scrollBehavior","overflowX","pointerEvents","scrollbarWidth","cardContainer","footerContainer","marginBottom","imageRowContainer","imageWrapper","transform","image","objectFit","transitionProperty","transitionDuration","transitionTimingFunction","overlayText","overlayButton","outlineColor","TopHomePageBannerComponent","onSearch","_React$useState","_React$useState2","searchQuery","setSearchQuery","handleSearchChange","trim","getHomePageTopBannerContainerStyle","Textarea","placeholder","Send20Regular","serverContext","useImageCardStyles","imageCardListItem","imageCard","imageCardThumbnail","imageCardFooter","imageCardFooterContent","rowGap","imageIconAndName","textOverflow","imageCardCaption","ImageAssetCard","asset","ariaSetsize","ariaPosinset","onClickCard","assetName","imageTimeCaption","getTimeDescription","handleImageAssetClick","imageAsset","handleImageAssetKeyDown","ListItem","Card","CardPreview","originalUrl","CardFooter","Image20Regular","Body1","Caption1","useFolderCardStyles","folderCardListItem","card","cardPreview","footerContent","iconAndName","folderName","caption","imageGrid","justifyItems","colorNeutralBackground3","thumbnailImage","oneImage","twoImages","gridTemplateColumns","threeImages","gridTemplateRows","gridArea","fourImages","FolderAssetCard","navigateIntoFolderItem","assetsToPreview","filteredAssets","Video","status","VideoStatus","Active","Array","isArray","handleFolderAssetClick","folderAsset","gotoLibraryPage","handleFolderAssetKeyDown","getGridClass","modifiedTimeString","Folder20Regular","useVideoCardStyles","videoCardListItem","videoCard","videoCardThumbnail","videoCardPreviewPlaceholder","videoCardFooter","videoCardFooterContent","videoIconAndName","videoName","videoCardCaption","VideoAssetCard","currentActivedCardId","videoTimeCaption","videoCardPreview","defaultContent","Unverified","UnverifiedPlaceholderWithStyle","placeholderContent","Draft","EncodingPlaceholderWithStyle","Failed","FailedPlaceholderWithStyle","onCloseDetail","handleVideoAssetClick","videoAsset","handleVideoAssetKeyDown","Video20Regular","AssetCard","adsStudioAccountPreferences","handleRealUsedFlag","RealUsedFlagSuffix","App","Folder","getAssetListBarCarouselStyle","sliderRef","scrollPosition","setScrollPosition","showArrowLeft","setShowArrowLeft","_useState5","_useState6","showArrowRight","setShowArrowRight","computeMaxScrollWidth","scrollWidth","clientWidth","goLeft","newPosition","Math","max","goRight","maxScroll","min","isHideSection","_Fragment","ChevronLeft16Regular","List","navigationMode","ChevronRight16Regular","GenerateWithAIComponent","onGenerateImage","loadingStatus","getHomePageGenerateWithAIComponentStyle","wrapperRef","exampleList","setExampleList","onInputChange","handleSearch","wrapperWidth","offsetWidth","maxCount","floor","newList","AIPromptExamples","updateExampleList","debounce","entries","resizeObserver","window","ResizeObserver","observe","unobserve","Input","imageSrc","promptText","useActionAssetCardsStyle","ActionAssetCards","aid","cid","oDataConfig","openSystemUploadRef","isXandrIntEnabled","dynamic","XandrIntegrationEnabled","account","useJsData","jsData","Account","find","resolve","isXandrIntegrationEnabled","isValidXandrAccount","cardData","getHomePageCardData","onClickUpload","gotoUploadFilesPanelPage","openSystemUpload","onClickStock","gotoStockImagePanelPage","onClickInvest","gotoInvestImagePanelPage","onClickWebsite","gotoWebsiteImagePanelPage","AddAssetEntryCard","description","isFillWidth","useImageBackgroundSectionStyles","backgroundCardContainer","uploadCard","uploadIcon","uploadFrame","uploadCaption","uploadButton","staticBackgrounds","background1","background2","background3","background4","background5","background6","background7","background8","background9","background10","ImageBackgroundCards","handleImageUploadClick","gotoBackgroundRemovalModal","onExampleImageKeyDown","imageUploadIcon","background","HomePage","libraryDataService","homePagePerfMarker","loadData","_dataService$assets","setGenerateImageExample","useContext","GenerateImageContext","isAdsStudioBackgroundChangeEnabled","setClarityTag","LoadAdsStudioHomePage","isRecentSorting","addAdStudioSurveyTriggerFlag","AdStudioSurveyTriggerFlag","gotoSearchResultPage","AIGCHandler","prompt","imageUrl","gotoAIGenerationPanelPage","sortedAssets","reverse","useCustomSize","customStyle","HomePageTopBannerComponent","AssetListBarCarousel","HomePageGenerateWithAIComponent","HomePageComponent","useImagesPageStyle","imagePage","useImageBannerContainerStyle","descriptions","entryCard","useImageCardContainerStyle","useImageEmptyViewStyle","emptyView","emptyIcon","mainText","neutralForegroundRest","useVideoPageStyle","videoPage","useVideoPageTopBannerContainerStyle","videopageBanner","useVideoCardContainerStyle","useVideoEmptyViewStyle","useSearchResultViewStyle","searchResultView","breadcrumbButton","breadcrumbButtonCurrent","headerContainer","headerTitle","defaultSearchQuery","AssetsEntryCardContainer","getEntryCardData","isImagePage","onClickCreate","ImageGridView","isSearchResultPage","cropDataService","totalLibraryAssetCount","isLoadingMore","setIsLoadingMore","imageCroppingTasks","loadedAssetsList","updatedAssets","getUpdatedAssets","updates","imagesGridSection","sectionName","GridSectionName","Asset","sectionClassName","itemKey","totalItemCount","config","scrollContainer","minItemHeight","sectionGridData","hasLibraryAssets","manualAddedImageSourceType","ManualAddedImageSource","Library","libraryAssets","onRenderCell","_index","AdsStudioAssetGridCell","onDetailsClick","onEditClick","editImageUrl","ShutterStock","onRenderLoadingCell","TilesGridLoadingCell","onLoading","SectionTilesGrid","sectionData","ImagesTopBannerComponent","ImageEmptyView","isSearchResult","EmptyViewIcons","ImageEmptyViewSVG","ImagesPage","imagePagePerfMarker","useAdsStudioServices","FilterContext","_useMemo","getFilters","_useMemo$searchText","_useMemo$sortBy","isSemanticSearch","ImagesFilterBar","searchboxPlaceHolder","userPreference","ImagesPageComponent","actionTypes","reducer","payload","images","logos","colors","fonts","taglines","brandVoice","brandTones","container","WarningDialogueContent","EntryCardSVGIcons","WarningSVGIcon","Subtitle1","block","useCommonDialogueStyles","typographyStyles","body1","spacingVerticalL","spacingHorizontalXXL","columnGap","spacingHorizontalL","spacingHorizontalS","horizontalDivider","spacingVerticalS","spacingHorizontalNone","dialogueContentContainer","dismissIcon","loadingText","marginBlockEnd","marginBlockStart","spacingVerticalXXL","loadingContainer","warningFooter","gridColumnEnd","gridColumnStart","justifySelf","useCreateWithWebsiteDialogueStyles","domainInputWrapper","suggestionErrorInvalid","spacingVerticalXS","caption1","CreateWithWebsiteDialogueContent","isValidDomain","onChangeValidDomain","brandKitCreationPayload","isNewBrandCreateWarningEnabled","onChangeBrandKitCreationPayload","commonClasses","dialogueClasses","Field","weight","DomainInputView","isDomainInvalid","onDomainChange","domain","isValidUrl","domainInputWrapperClassName","errorMessageClassName","CreateWithWebsiteDialogue","onCreateBrandKit","disableNewBrandKitWarning","isBrandKitCreationInProgress","isDialogueOpen","setIsDialogueOpen","_React$useState3","_React$useState4","setNewBrandCreateWarningEnabled","_React$useState5","_React$useState6","setIsValidDomain","_React$useState7","_React$useState8","setBrandKitCreationPayload","Dialog","open","onOpenChange","_e","dialogueData","DialogTrigger","disableButtonEnhancement","cardClassName","WebsiteSVGIcon","DialogSurface","DialogBody","DialogTitle","StyleGuide24Regular","Subtitle2","Dismiss20Regular","Divider","DialogContent","Body2","ProgressBar","thickness","DialogActions","console","info","filesPerRowInPreviewGrid","getFileUploadContainerStyles","_ref$palette","palette","spacingVerticalNone","spacingHorizontalXXXL","extend","btnStyle","borderStyle","borderColor","getFileUploadButtonStyles","_ref2$palette","button","useFileUploadStyles","filesContainer","spacingHorizontalXL","fileContainer","shadow4","colorNeutralBackground2","filePreviewImageIcon","spacingHorizontalXS","filePreviewContent","uploadFilesButton","fileUploadError","colorPaletteRedBackground3","FILE_ERROR_TYPES","LegacyStringMap","FilePicker_ButtonText_ChooseFile","FilePicker_ButtonText_RemoveFile","FilePicker_FileExtensionInvalid","FilePicker_FileInvalid","validateFiles","files","_ref$minFileSize","minFileSize","_ref$allowedTypes","allowedTypes","_ref$maxFileSize","maxFileSize","validationResult","hasError","i","file","uniqueId","fileTypesToCheck","replace","toLowerCase","fileType","split","errorType","formatFileSize","bytes","decimals","dm","sizeUnitIndex","log","fileSize","getLocalizedFileSizeTextsBySize","formatDecimal","pow","maximumFractionDigits","minimumFractionDigits","uploadFiles","_x","_uploadFiles","apply","_asyncToGenerator","_regeneratorRuntime","mark","_callee2","filesToUpload","uploadFile","updatedFiles","wrap","_context2","next","_callee","_context","reject","shouldReject","random","setTimeout","Error","uploaded","t0","abrupt","stop","_x2","all","sent","FilePreview","progress","onDeleteFile","uploadTried","PdfSVGIcon","ErrorCircle20Regular","colorPaletteDarkOrangeBackground3","CheckmarkCircle20Regular","colorPaletteGreenBackground3","Text","truncate","Delete16Regular","FileUpload","dragOrDropTip","disableAddMore","dragOrDropLabel","onFilesUploaded","previewFilesPerRow","maxFilesCountAllowed","dragOrDropDescription","fileUploadContainerClasses","useDefaultStyles","fileUploadButtonClasses","setFiles","uploadError","setUploadError","legacyI18n","buildLegacyI18n","ValidationStringMap","handleDeleteFile","fileToDelete","prevFiles","handleFilesUpload","updatedFilesArray","updatedFile","fileIndex","findIndex","onFileRead","fileSources","filesToUploadCount","fileSourcesArray","from","onError","join","Stack","Item","grow","AddSquare24Regular","FilePicker","useButton","enableMultiple","hideDescription","enableDrag","showErrors","allowedFileExtensions","fileDraggerTip","fileDraggerLabel","fileDraggerDropDescription","variant","UploadBrandGuideDialogueContent","UploadBrandGuideDialogue","UploadSVGIcon","CreateManuallyAction","CreateManualBrandKitSVGIcon","getActionsCardsStyles","cards","BrandActionCards","setIsBrandKitCreationInProgress","handleBrandKitCreation","useBannerContainerStyles","bannerContainer","bannerBackground","heading","Banner","hideActionsMenu","Title2","useSuggestionsStyles","colorNeutralForeground1","panelBody","SuggestionLoadingSkeleton","animation","SuggestionPanel","loading","suggestions","Sparkle20Regular","TagGroup","suggestion","InteractionTag","InteractionTagPrimary","useTaglinesStyles","loadingItem","taglineItem","taglineItemInput","spacingVerticalXXS","colorNeutralForeground3","TaglinesLoadingSkeleton","shape","TaglineItem","tagline","isDeleteDisabled","maxAllowedCharacters","inputId","useId","autoFocus","align","a","Delete24Regular","Taglines","onChangeTaglines","maxAllowedTaglines","maxAllowedCharactersPerTagline","isAddTaglineButtonDisabled","newTaglines","handleDeleteTagline","substring","handleChangeTagline","Add20Regular","defaultFonts","Label","TextAssetType","Typeface","Weight","overrideFontWeights","useFontsSelectorStyles","sectionContainer","fontsContainer","fontSelectContainer","fontSelect","fontWeightSelect","fontSelectContainerHeader","defaultFont","fontFamilies","defaultFontWeight","FontSelector","font","onChangeFont","onChangeWeight","Body1Stronger","FontsFamilySelector","FontsWeightSelector","selectClassName","FontsSelector","onChangeFonts","fontsToRender","foundFont","handleChangeFont","selectedFont","updatedFonts","listPanel","borderRadiusLarge","subtitle2","addBtn","actionBtns","borderRadiusSmall","list","imageData","showActionBtn","setShowActionBtn","ThumbnailUrl","ListSkeleton","fill","ListPanel","headerProps","onAdd","displayedImages","idx","buttonWrapper","aspectRatio","imageEditorContainer","shadow2","spinner","LogoFormat","BrandKitLogoEditPanel","dismiss","format","minLogoSize","lightBackground","hasLandScapeLimit","hasSquareLimit","showBackgroundSettings","darkBackground","cropSettings","setAspectRatio","useInLightBackground","setUseInLightBackground","useInDarkBackground","setUseInDarkBackground","currentCropSettings","setCurrentCropSettings","MinLogoSize","maxCropHeight","Height","landscapeEnabled","Width","sqaureEnabled","updateAspectRation","SourceX","SourceWidth","SourceHeight","useClarityTags","ClarityTags","LaunchedAdsStudio","EditBrandKitLogo","onRenderFooterContent","AdsStudioPanelContainer","headerText","RadioGroup","Radio","ImageCropWithBoundingBox","baseImage","onCropSettingsChanged","minCropSize","Spinner","ImageListElement","maxLimit","maxSquareLogosLimit","maxLandscapeLogosLimit","elementType","preferenceService","panelTitle","panelSubtitle","updateOrCreateBrandKit","openLogoEditPanel","setOpenLogoEditPanel","selectedImageIdx","setSelectedImageIdx","setErrorMessage","_useImagePicker","useImagePicker","displayImagePicker","setDisplayImagePicker","selectedMediaPanelSource","setSelectedMediaPanelSource","clearErrorMessage","minSizeConfig","constants","brandkitMinSize","selectedImage","openImageEditPanel","onEditImage","currentTarget","dataset","fullUrl","Url","getImageDetailAsync","naturalWidth","naturalHeight","newData","onAddImage","closeLogoEditPanel","onSelectImages","squareLogoCount","logo","ImageType","squareSettings","getCenterCroppedSettings","SourceY","landScapeSettings","logoType","CropX","CropY","CropWidth","CropHeight","SubType","processImageAssetPayload","_imageMinSizeValidati","filterImagesAsset","imageMinSizeValidation","_duplicateImagesValid","hasDuplicateError","duplicateImagesValidation","onApplyEditLogo","UploadImage","isBrandKit","disabledAssetSources","CSMLAssetSource","Shutterstock","BrandKitContext","createContext","BrandKitProvider","_React$useReducer","_React$useReducer2","context","Provider","displayName","contentPanel","spacingVerticalMNudge","body1Strong","spacingVerticalXL","contentPanelTitle","contentPanelSubtitle","contentPanelHeader","lineHeightBase300","contentPanelSubheader","SegmentSkeleton","lineCount","ContentPanel","bodyContent","brandVoiceSegment","brandPersonalityTextarea","brandToneInput","brandToneCaption","brandPersonalityTagGroup","brandToneAccordion","BrandVoice","I18nContext","_useContext","setBrandVoice","selectedOptions","setSelectedOptions","inputValue","setInputValue","mockCopilotSuggestionIndexes","setMockCopilotSuggestionIndexes","handleUpdateTaglines","updatedTaglines","handleSetBrandVoice","handleAddSelectedOptions","options","Set","innerText","handleRemoveSelectedOption","tag","handleChange","handleKeyDown","mockCopilotToneSuggestions","refreshMockCopilotSuggestions","numbers","randomNumber","brandPersonalityPlaceholder","MicSparkleRegular","InfoRegular","as","onDismiss","option","Tag","TagPicker","onOptionSelect","TagPickerControl","expandIcon","AddSquareRegular","TagPickerInput","TagPickerList","TagPickerOption","Accordion","collapsible","AccordionItem","AccordionHeader","expandIconPosition","AccordionPanel","AddRegular","ArrowClockwiseRegular","TextFontRegular","useBrandKitPageStyle","brandKitPage","brandElements","BrandElements","fetchBrandKitData","brandKitDataService","brandkitName","_ref2$fonts","_ref2$images","_ref2$logos","_ref2$palettes","palettes","squareLogosCount","landscapeLogosCount","brandKit","_yield$brandKitDataSe","_yield$brandKitDataSe2","createBrandKits","updateBrandKit","colorId","updatePalette","onDeleteColor","colorid","onUpdateFonts","maxLogosLimit","MAX_LANDSCAPE_LOGOS","maxImagesLimit","classNames","BrandKitImageListElement","BrandKitLogoIconSVG","ImageRegular","BrandKitFontsSelector","TabValues","BrandKitPage","imageEditService","brandKitPagePerfMarker","rest","setLoading","selectedTab","setSelectedTab","onTabSelect","response","getBrandKits","isBrandKitUIPhase2Enabled","BrandKitUIPhase2","BrandKitPageBanner","TabList","selectedValue","Tab","Component","BrandKitPageComponent","useTemplateImageStyles","templateWithCaption","darkGrayText","grayText","useTemplateGridStyles","gridContainer","skeletonContainer","filtersRow","filterButton","TemplateImageCard","templateGroupId","templateAttributes","setClickedTemplate","onAction","templateGroupName","Caption2","_templateAttributes$a","assetCounts","logoCount","imageCount","textAreaCount","getAssetCountInfo","TemplateGrid","templates","templateTagOptions","templateAttributesMap","selectedFilter","setSelectedFilter","filterOptions","brandAwareness","performance","ToggleButton","template","preview","useTemplateCarouselStyles","carousel","carouselItemContainer","colorNeutralBackground6","carouselItem","CarouselItem","TemplateDetailsCarousel","previews","Carousel","groupSize","circular","CarouselViewport","CarouselSlider","CarouselCard","CarouselNavContainer","layout","CarouselNav","CarouselNavButton","useTemplateDetailsModalStyles","dialog","dialogContentContainer","detailsContainer","textGroup","errorMsg","colorStatusDangerForeground1","TemplateDetailsModal","fetchDisplayAdsTemplateGroupDetails","handleFailedToLoadData","show","onShowChange","onSelectTemplate","templateCount","setTemplateCount","templateImages","setTemplateImages","templateGroupDetails","setTemplateGroupDetails","_useState7","_useState8","setIsPageLoading","_useState9","_useState10","setUrl","_useState11","_useState12","urlError","setUrlError","details","detail","displayAdsTemplateDetails","displayAd","onGetStartedButton","DismissIcon","carouselContainer","UrlInputFluent","urlErrors","newUrl","textFieldAriaLabel","additionalProperties","useDisplayTemplatesPageStyles","displayTemplatePage","names","DisplayTemplatesPage","displayTemplatesDataService","displayTemplatePagePerfMarker","setTemplates","selectedTemplatePreview","setSelectedTemplatePreview","openModal","setOpenModal","activity","ActivityContext","setData","DataContext","fetchDisplayAdsTemplateGroups","displayAdsTemplateGroup","DisplayTemplateHomePage","onViewTemplateDetails","templateName","onChooseTemplate","signal","gotoDisplayTemplatesCreationPage","onCloseModal","TopBanner","DisplayTemplatesPageComponent","useCreateDisplayTemplatePageStyles","page","editorContainer","useNotify","toastId","dispatchToast","dismissToast","useToast","Toast","ToastTitle","ToastTrigger","ToastBody","ToastFooter","Link","gotoCampaignUIPage","subpath","intent","timeout","CreateDisplayTemplatePage","brandkitApiState","instrumentation","search","displayTemplateCreatePagePerfMarker","templateDetails","detailsData","_ref2$templateGroupId","queryString","notify","gotoDisplayTemplatesPage","removeSearchQuery","AdditionalQueries","TemplateGroupId","CreateDisplayTemplate","DisplayAdsEditor","showSummaryBarControl","showRecommendationsBanner","hasFetchBrandKitData","hasUpdateBrandKitData","templateData","containerClassName","saveInNewFolder","onSaveSuccess","reloadFolderPathTreeItem","gotoImagesPage","scenarioName","activityName","CreateDisplayTemplatePageComponent","useEditDisplayTemplatePageStyles","EditDisplayTemplatePage","displayTemplateEditPagePerfMarker","_ref2$folderId","_ref2$templateId","templateId","setTemplateDetails","templateConfig","setTemplateConfig","setDisplayAd","sourceType","setSourceType","imageDetails","displayAdFromStorage","metadata","EditDisplayTemplateImage","getImageById","gotoHomePage","TemplateId","FolderId","fetchDisplayAdsTemplateDefinition","Data","latestTemplate","displayAdsTemplateDefinitions","templateDefinition","version","EditDisplayTemplatePageComponent","useFolderGridCellWithContextMenuStyle","folderCellContextMenuButton","FoldersGridCellWithContextMenu","isReadonly","onSelectMenuItemClick","onOpenMenuItemClick","onDeleteMenuItemClick","onRenameMenuItemClick","onViewPerformanceClick","menuItems","getMenuItems","renderAccessory","MoreVertical20Regular","menuItem","MenuItem","AdsStudioFoldersGridCell","AdsStudioFoldersGridCellWithContextMenu","useModalStyle","nameInput","EditFolderNameModalImp","onComplete","onCancel","errorText","setErrorText","initName","setName","onConfirm","handleCancel","isSaveButtonDisabled","defaultValue","EditFolderNameModal","CreateFolderModal","isDialogVisible","setDialogVisible","createFolderAsync","onSuccess","closeDialog","onCreateFolder","alODataErr","actionable","getUXMessage","localizedUXMessage","getFoldersLimitPerAccount","logError","DeleteConfirmDialog","showConfirmDialog","setShowConfirmDialog","deleteApiAsync","warningMsg","showUIBlocker","setShowUIBlocker","closeConfirmDialog","ConfirmDialog","isDisplayed","confirmString","cancelString","onClickConfirm","onClickCancel","isUiBlocked","overflowWrap","useDeleteConfirmDialog","deletedItems","render","onItemDeleted","uxMessage","RenameFolderModal","renameFolderAsync","onRenameFolder","newFolderName","useSummaryResultDialogStyles","summaryMessage","summaryListContainer","overflowY","borderTop","grid","gridCell","gridHeaderCell","useImagePreviewStyles","useValueWithTooltipViewStyles","overflowLeft","direction","customToolTip","toolTipContentHeader","toolTipContent","useAssociationsButtonStyles","associationsButton","ValueWithTooltip","valueDescription","ellipsisOnLeft","Associations","availableActions","gotoAds","onRenderPreview","fit","headerWithPopup","popupId","helpPopup","colPreview","columnId","compare","b","localeCompare","colId","colName","colPath","path","colType","colError","shortErrMsg","colDeletionError","colMoveError","colAssociations","columnSizingOptions","SummaryResultModal","summary","modalType","DataGrid","resizableColumns","DataGridHeader","DataGridRow","DataGridHeaderCell","DataGridBody","rowId","columnItem","DataGridCell","ASSET_TYPES","useToolbarStyles","colorBrandBackground","toolbarButton","LibraryPageToolbar","onMoveTo","onClear","selectedCount","Toolbar","ToolbarButton","DeleteRegular","ArrowStepOverRegular","DismissRegular","LibraryPageComponent","assetLibraryUserPreferences","libraryPagePerfMarker","allowedAssetType","useBatchMoveModalHook","renderHelpPopup","targetDropFolder","resetTargetDropFolder","reloadingFolders","setReloadingFolders","setSearchLocationFilter","selectedAssets","setSelectedAssets","selectedFolders","setSelectedFolders","batchDeleteWarningMsg","setBatchDeleteWarningMsg","singleImagePromises","selectedItemCount","createFolderModal","useCreateFolderModal","renameFolderModal","folderItemRef","useRenameFolderModal","confirmDeleteFolderDialog","_useDeleteConfirmDial","deleteFolderAsync","ignorable","useDeleteFolderConfirmDialog","confirmBatchDeleteDialog","_useDeleteConfirmDial2","batchDeleteAsync","folderCount","assetCount","useBatchDeleteConfirmDialog","confirmDragAndDropDialog","targetFolderItemRef","targetFolder","batchMoveApiAsync","destFolderId","useDragAndDropConfirmDialog","batchMoveModal","summaryResultModal","isModalVisible","setModalVisible","titleRef","summaryRef","columnsRef","itemsRef","openDeleteSummaryResultModal","assetType","shortMsg","FolderIcon","failedAssetCount","failedFolderCount","strIdx","closeModal","openFolderDeleteSummaryResultModal","openBatchDeleteSummaryResultModal","openBatchMoveSummaryResultModal","assetsSummary","foldersSummary","assetErrors","folderErrors","useSummaryResultModal","resetSelectionState","createFolder","reloadFolders","navigateIntoFolder","deleteFolder","renameFolder","batchDelete","batchMove","resetFolderData","folders","showNotificationError","msg","buttonLabel","onButtonClick","_ref2$autoClose","autoClose","nid","dangerouslySetInnerHTML","__html","newTargetFolder","onCreateFolderClick","renderTilesGridCell","selectItem","onSelectCell","onDrag","currentListItem","getElementById","onFolderClick","FoldersGridCell","selectable","renameItem","deleteItem","subFolder","gotoPerformancePage","draggable","droppable","onDrop","assetItem","metaData","gotoEditVideoPage","videoId","isMultiSelecting","renderToolbar","onSelectionChange","selectedItems","_item$id","useCache","checkSelectedAssetsPromise","_asset$id","assetsList","hasVideoImage","isSceneKeyFrame","sectionSelectedItems","callAsyncApi","asyncApi","_len","params","_key","reloadFolderPathTreeFolderIdArr","batchMoveAsync","onBatchMoveSuccess","_ref15","showInfo","AdsStudioLibraryPageContent","dropdownWidth","renderGridCell","dataLoaded","multiSelectionEnabled","searchLocationFilterState","setSearchLocationFilterState","displayFolderPath","HiddenDivForAnnounce","toAnnounce","_ref14","isAssetLibraryAIGCMVPEnabled","isVideoTemplateEnabled","VideoTemplateUI","cardKeys","isVideoPage","gotoVideoTemplatePage","gotoAddVideoPanelPage","gotoInvestVideoPanelPage","VideoEmptyView","isFilterResult","VideoEmptyViewSVG","VideoGridView","videosGridSection","VideosPageComponent","videoPagePerfMarker","minDurationFilter","maxDurationFilter","isVideoDurationBoundaryIncluded","minVideoDuration","maxVideoDuration","CSMLVideoDuration","unlimited","VideoPageTopBannerComponent","VideosFilterBar","defaultMinVideoDuration","defaultMaxVideoDuration","useTemplateVideoStyles","templateBody","VideoTemplateCard","TemplateThumbnailUrl","LocalizedTemplateName","TemplateName","templateTagsMapping","premiumStreaming","onlineVideo","getTitleMessage","tags","setCopilotFinalUrl","loadClipchampPlayer","finalUrlError","setFinalUrlError","ClipchampPlayer","videoUrl","TemplatePreviewUrl","poster","seconds","Duration","LocalizedTemplateDescription","TemplateDescription","useVideoTemplatesPageStyles","videoTemplatePage","VideoTemplatesPage","copilotFinalUrl","copilotDomainDataService","selectedTemplate","setSelectedTemplate","isLoadingBrandKit","setIsLoadingBrandkit","brandkit","setBrandKit","isBrandKitEmpty","setIsBrandKitEmpty","_useState13","_useState14","setDataPromise","fetchVideoAdsAssetRecommendations","useCopilotRepositoryContext","getBrandKitDataByAccId","useBrandKitDataService","fetchBrandKit","updatedResponse","accId","BrandKits","Fonts","Images","LandscapeLogos","Palettes","SquareLogos","formatBrandkitForAPI","onFetchVideoRecommendations","templateFilter","TemplateIds","fetchVideoTemplates","_yield$copilotDomainD","getVideoTemplates","Templates","modifiedDataPromise","finalUrl","gotoCreateVideoPage","templateItem","NumberOfLogos","NumberOfImages","NumberOfText","WrappedComponent","Object","assign","_objectDestructuringEmpty","ServerContext","useClipchamp","CopilotRepositoryProvider","locale","CurrentLocale","recommendationType","useEditVideoPageStyles","editVideoPage","editVideoContainer","spinnerContent","useVideoNotify","successTitle","successBody","errorTitle","errorBody","isSuccess","getTitle","getBody","EditVideoPage","isCTV","getVideo","dataPromise","videoMetadata","setVideoMetadata","setFinalUrl","setIsLoading","isSaving","setIsSaving","setError","videoRepository","createVideoRepository","folderRepository","createFolderRepository","imageRepository","createImageRepository","assetLibraryConfig","timeZone","preferencesService","activityLogger","logActivity","fetchDataAsync","video","videoData","videoRecommendation","_templateId","fetchMetadata","Metadata","JSON","parse","ads","onSaveVideo","newMetadata","uploadResult","uploadVideoMetadata","newVideoFromMTObject","recommendationFormat","gotoVideosPage","onApply","VideoTemplateEditorContextWrapper","videoMetaData","setIsOpen","isAADUser","IsAADUser","isDialog","showVideoTemplateSummaryBarControl","MessageBar","messageBarType","MessageBarType","withI18nConsumer","statuses","actions","useGenerateImagePageState","eventHandler","generateImageExample","clearExample","initialPrompt","setPrompt","promptChanged","setPromptChanged","setImages","serverError","setServerError","detectedBrandName","setDetectedBrandName","onSelectImage","newImages","onStartOver","selectedImages","x","generateImagesPromise","getGenerateImagesByAIPromise","skipBrandDetection","cancelled","statusPoller","aiGCImagePerfMarker","willInit","aigcCallStart","Date","now","generateImagesByAI","onStartPolling","poller","brandNameDetected","brandNames","aigcCallDuration","hasRecraftImage","modelSource","AIModelSource","Recraft","imageUrls","logForExpand","modelSources","duration","onReturnImages","imageIds","thumbnailSrc","done","cancel","getImages","onGenerateImages","containsBrand","s","RegExp","test","detectBrandName","trimmedPrompt","promptError","savedAIGCImages","setSavedAIGCImages","savedAIGCImagesRef","_useState15","_useState16","savingAIGCImages","setSavingAIGCImages","_useState17","_useState18","savedStockImages","setSavedStockImages","savedStockImagesRef","_useState19","_useState20","savingStockImages","setSavingStockImages","addAIGCImage","addStockImage","loadStockImages","loadMoreStockImages","handleError","assetLimit","getImageAssetLimitPerAccount","learnMoreText","learnMoreLink","genericError","folderIdNumber","wrappedAddAIGCImage","res","Dalle","wrappedAddStockImage","stockImageId","wrappedSetPrompt","newPrompt","aigcImages","stockImages","totalStockImagesCount","useBrandDetectionConfirmationStyle","makeResetStyles","AIWarningIcon","BrandDetectionConfirmation","brandName","renderHelpButton","isChecked","setIsChecked","evt","usePromptEditorStyles","selectedButton","toggleButton","textareaPlaceHolder","textarea","autoCompleteTextarea","usePromptEditorBaseStyles","clipPath","borderBottomStyle","borderTopStyle","fontWeightRegular","colorNeutralBackground1Hover","borderWidth","PromptEditor","textArea","textAreaRef","usedOptions","setUsedOptions","PuzzlePiece20Regular","words","word","usedOption","Emoji20Regular","Color20Regular","ShapeSubtract20Regular","Lightbulb20Regular","getOptions","promptEditorBaseStyles","promptEditorStyles","optionsState","setOptionsState","selectedOption","textToComplete","setTextToComplete","optionsIndex","setOptionsIndex","slicedOptions","filteredOptions","roundedIndex","sliceOptions","shadowTextArea","wordsRef","scrollHeight","clientHeight","scrollTop","onMouseOver","onMouseOut","ArrowClockwise16Regular","ToggleButtons","toggleSelectedOption","suggestedWords","querySelectorAll","useGeneratedImagesStyles","animationDuration","animationIterationCount","animationTimingFunction","animationName","to","useLoadingViewStyles","backgroundPosition","forcedColorAdjust","LoadingCell","GeneratedImages","stopGeneratingBtnRef","generatedImagesStyle","onRenderImageSpinner","Icon","isSaved","CheckmarkRegular","SpinnerIosRegular","AddButton","addImage","tooltipContent","onRenderAIGCCell","srcURL","URL","host","origin","pathname","URLSearchParams","searchParams","addSearchParams","w","h","TilesGridCellImage","showSpinner","onCustomizedSpinner","InfoSparkleSVGIcon","onRenderStockCell","Preview","aigcImagesWithAction","stockImagesWithAction","aigcImagesGridSection","k","gridMode","maxColumns","columnPadding","rowPadding","stockImagesGridSection","BlackSparkleSVGIcon","LoadingIndicator","SquareDismissIcon","ImageSearchRegular","useExampleImageStyles","ExampleImage","baseClasses","useExplorePromptsStyles","letterSpacing","ExplorePrompts","memo","MultiLineEllipsisText","explorePromptsStyles","promptsWithAction","prompts","promptsGridSection","localizedPromptText","useAIGCDisclaimerStyles","marginLeft4","useAIGCDisclaimerDefaultStyles","AIGCDisclaimer","defaultClasses","MessageBarBody","RemainingText","remainingText","ErrorMessage","useGenerateImagePageStyles","ActionBar","startOver","generateImage","ArrowReset24Regular","code","HollowSparkleSVGIcon","PromptPanel","topDiv","setTopDiv","_useTopDivMetaData","offset","setOffset","useLayoutEffect","newOffset","offsetTop","offsetParent","useTopDivMetaData","hidden","ImagePanel","hasAIGCImages","hasAIGCImageExample","GenerateImagePageComponent","generateImagePerfMarker","changeLayout","announcedText","setAnnouncedText","_useGenerateImagePage","LoadAdsStudioImageGenerationPage","nav","Mode","Hidden","useButtonStyles","bottonWrapper","helpLink","AdsStudioAddAssetPanel","selectedAsset","onClickSelect","showBlocker","isMultiSelection","buttonClasses","panelRef","LaunchedAddImageAssetsFromAdsStudio","handleJobErrors","jobErrors","get","onSelectAddImages","firstNode","lastNode","handleTabKey","shiftKey","handleShiftTabKey","handleESCKey","isDarkThemed","useSourceImages","setSelectedImages","setShowBlocker","validImages","selectedImageUrls","onStockClickSelect","stockImagePerfMarker","saveOperations","each","uploadStockImage","runJobsInParallelWithRateLimit","jobsToRateLimit","maxJobsInParallel","MaxAddAssetJobInParell","handleJobError","goBack","onInvestClickSelect","investImagePerfMarker","uploadInvestImage","investImageId","onWebsiteClickSelect","websiteImagePerfMarker","uploadOperations","uploadImageByUrl","Website","WebsiteImagePanel","_useSourceImages","WebsiteImagePanelContent","StockImagePanel","StockImagePanelContent","getAddVideoError","processVideoSizeLimitError","errorList","AddVideoPanel","selectedVideos","setSelectedVideos","uploadVideoByUrl","videos","AddVideoPanelContent","usePanelStyles","messageBar","usePreviewStyles","imageItemBox","UploadFilesPanel","globalLegacyI18n","isUploadImageUpscaleEnabled","previewClasses","setErrors","uploadInput","globalI18n","filePickerI18n","mergeI18n","onFilesAddedCallback","_useUploadFiles","useUploadFiles","previewArr","supportedFileExtensions","supportedImageExtensions","supportedVideoExtensions","clearInputFile","readFile","fileObjects","selectedFiles","selectedFilesCount","errorArr","fileObj","fileSizeMB","toFixed","reachLimit","isReachFileSizeLimit","ext","parseFileName","getReachFileSizeLimitErrorMessage","click","UploadPreviewWithCustomPreview","assetList","PreviewComponent","FileUploadingPreview","customClasses","errMsg","MessageBarActions","containerAction","multiple","accept","NO_VALID_FILES_ERROR","ASSET_LIMIT_EXCEEDED_ERROR","usePreviewStyle","linkButton","UploadFolderPanel","uploadFolderInfo","setUploadFolderInfo","showUploadPreview","setShowUploadPreview","completedAssetCount","isUploadRunning","fileAdditionalInfoArrRef","uploadFileAsync","useUploadAsset","getCustomizedHandlerOptions","useCustomizedHandlerOptions","createFolderBulk","cancelPendingVideoUpload","dismissAndRefreshLibrary","onUploadError","uploadAsset","dataURL","fileObject","nameWithoutExt","isVideo","isImageUpscaled","rootFolder","updatedProgress","onUploadStart","totalSize","rootFolderName","acceptedAssets","previewImage","readFileAsDataURLAsync","numberOfAssets","getErrorInfo","folderCreationErrors","assetUploadErrors","getFolderUploadError","onUploadPartialComplete","warnMessage","onUploadComplete","upscaledImagesArrCount","fileCount","FolderPreviewComponent","createFolderPreviewComponent","Boolean","_useUploadFolder","_ref$assetUploadLimit","assetUploadLimit","uploadAssetAsync","supportedExtensions","readFileAsync","useReadAsset","validateFileAsync","useValidateAsset","validateAssetAsync","obj","onFolderRead","acceptedFiles","filterFilesByExtensions","customizedFilesOptions","_parseFileName","foldersToCreate","createFolderHierarchyMap","assetsSkippedCreationDueToFolderError","createFoldersByHierarchy","folderMap","creationPromises","createRateLimitedAssetUploadPromises","folderIdPromises","assetsSkippedUpload","readAssetAsync","useUploadFolder","isRootFolderId","maxUploadNum","showTitle","directory","webkitdirectory","MixedImagePanel","InvestImagePanelContent","useSourceVideos","validInvestVideos","validUrlVideos","investVideoPerfMarker","uploadInvestVideo","investVideoId","videoSrc","videoIds","onUrlClickSelect","addVideoUrlPerfMarker","MixedVideoPanel","_useSourceVideos","InvestVideoPanelContent","InvestImagePanel","InvestVideoPanel","ROOT_KEY","SearchResultView","searchPagePerfMarker","_ref2$query","cachedSearchText","setCachedSearchText","breadcrumbItems","onBreadcrumbItemClick","newAssets","LoadAdsStudioSearchResultPage","Count","AdsStudioBreadcrumb","onItemClick","maxLengthOfItem","customItemStyle","headerDescriptions","SearchResultFilterBar","defaultSearchText","getPlacementSetConfig","getSmartCroppings","isAudienceAdSmartCropEnabled","isMMAV2Enabled","isPMaxAspectRatiosV2Enabled","isAdPreviewRefreshEnabled","getExpandedCroppingsFunc","placementSets","placementSetName","CSMLAdType","PMax","placementTypes","UAPPlacementTypeAlias","PMaxV2","AllV2","All","getDefaultPlacementsCropping","MMA","Audience","MSANV2","MSAN","ImageExtension","ImageExt","GenericImage","BingDesktopMultiImage","BingMobileMultiImage","useBackgroundChange","fetchSegmentationError","setFetchSegmentationError","isFetchingSegmentations","setIsFetchingSegmentations","getImageSegmentations","generateImageBackground","_useMaskedImage","imageUrlWithoutBackground","setImageUrlWithoutBackground","imageUrlWithGeneratedBackground","setImageUrlWithGeneratedBackground","imageUrlWithColoredBackground","setImageUrlWithColoredBackground","segmentationMasks","setSegmentationMaskInternal","selectedMasks","setSelectedMasks","selectedImageSrc","setSelectedImageSrc","maskSetsBase64","setMaskSetsBase64","alphaArray","setAlphaArray","setSegmentationMasks","maskSetsArray","selectedMasksArray","newAlphaArray","resetStates","maskValues","getMaskValueAtPoint","y","originalImageWidth","getMaskValueAtPointFunc","useMaskedImage","drawColorBackground","imageWidth","imageHeight","fetchImgPromise","coloredBackground","createColorBackground","getSegmentations","imageSegmentationPerfMarker","parseMaskResultPromise","parsedResult","rawMaskSetsBase64","rawMaskSetsBase64String","selfDrawnImageUrl","generateBackground","backgroundGenerationPerfMarker","outputImageWidth","outputImageHeight","newImageUrl","generatedUrl","resultImage","ViewName","revertMetaData","_revertMetaDataInner","combinedEffectArray","combinedEffect","filterEffect","effect","blurEffect","extractInfoForDeserialization","blur","revertMetaDataInner","effectSettings","effectOptions","designerEffect","backgroundBlur","useEditImageState","initialCurrentView","getAssetEnhancementSettings","currentView","setCurrentView","originalImage","setOriginalImage","setLoadingStatus","initialAssetLoading","setInitialAssetLoading","backgroundChangedResult","setBackgroundChangedResult","savedBackgroundColorChangedImage","setSavedBackgroundColorChangedImage","filterBlurBaseImage","setFilterBlurBaseImage","isConfirmDialogOpen","setIsConfirmDialogOpen","assetsAIEnhancementEnabled","setAssetsAIEnhancementEnabled","cropImage","isImageFittingEnabled","isBrandKitEnabled","finalImageFittingEnabled","originalWidth","originalHeight","settings","assetsAIEnhancementEnabledInner","AssetAIEnhancementOptout","promises","isCopilotRegionRestricted","feature","isRestricted","baseId","gotoEditDisplayImagePage","_useFilterAndBlur","initialFilter","initialBlur","isActive","imagesWithFilter","imagesWithFilterAndBlur","getImagesWithFilter","getImagesWithFilterAndBlur","filterIndex","setFilterIndex","backgroundBlurEnabled","setBackgroundBlurEnabled","imagesWithFilterAndBlurCached","setImagesWithFilterAndBlurCached","backgroundBlurLevel","setBackgroundBlurLevel","currentImage","setCurrentImage","initialStateApplied","setInitialStateApplied","initialStatusWhenActive","updateImage","newImage","getImagesWithFilterImp","toggleBackgroundBlur","enableBackgroundBlur","changeBackgroundBlurLevel","blurLevel","isImageUpdated","isImageChangedWhenActive","useFilterAndBlur","resultFilterAndBlurImage","isFilterAndBlurImageUpdated","isFilterAndBlurImageChangedWhenActive","_useBackgroundChange","adPlacementResult","AudienceAdSmartCrop","adType","setAdType","errorTip","setErrorTip","showRequiredOnly","setShowRequiredOnly","editingPlacementInfo","setEditingPlacementInfo","onEditPlacement","placementInfo","onAdPreviewError","stringify","_useAdPreviewModel","useAdPreviewModel","firstImage","setPlacementConfig","multiImagePlacementSets","updatePlacementCropping","updatePlacementCroppingByImageType","hasCropSettingsChanged","hasDataChanged","changedCropSettings","imageInfo","imageMeta","imageCropping","placementList","previewTexts","getPreviewText","IsMMAV2Enabled","IsAmplifyEnabled","DisplayPlusAmplify","PMaxNewAspectRatios","PMaxExcludeNewAspectRatios","getExpandedCroppingsInner","adTypeInner","argObj","placementsToExpand","getPlacementsToExpand","placements","skipOutpainting","getCropSettingsFromRoi","expandedMeta","roiInfo","placementSetConfig","clonedImage","maxCropBox","handleInvalidCropSetting","invalidRatioList","errorInfo","ratio","aspectRatioAsRatio","placement","previewTypeString","ratio1","ratio2","placement1","placement2","getSizeErrorRatioList","saveCropPlacement","newCropping","placementMeta","placementType","imageType","newPlacementCropping","cancelCropPlacement","switchAdType","switchShowRequiredOnly","ImageExperienceImage","hasCroppingTask","cropSettingsToUpdate","allSizeInvalidRatioList","getAllSizeErrorRatioList","requiredSizeInvalidRatioList","allViewErrorTip","previewName1","previewName2","currentViewErrorTip","useAdPlacement","updateAdPlacementImageInner","saveImageCopy","uploadImageToFolder","saveImageWithBaseId","saveImage","moveImageToFolder","addImageWithBaseIdToFolder","replaceBackground","backgroundChangedImage","needToSave","isUnsavedStockImage","isSavedStockImage","isStockImage","cropImageAndGoBack","backToLibraryPage","placementSettings","onConfirmDialogSave","saveImageDirectly","updateAdPlacementImage","onload","saveBackgroundChangedResult","moveImageToFolderInner","saveAsCopy","buildImageAssetMetadataToSave","effectKey","convertMetaData","resInner","inner","disableSave","saveButtonTooltip","haveCroppingTasks","imagePreviewView","borderTopLeftRadius","borderTopRightRadius","ImagePreviewView","imageView","buttonsConfig","buttonsRef","notificationConfig","buttonNum","buttonItem","isFirstButton","isLastButton","notificationContent","dismissAriaLabel","outlineOffset","ImageAdjustView","goToBackgroundChangeView","imageAdjustViewStyles","VideoBackgroundEffect20Regular","timerRef","handleChangeBlur","clearTimeout","CardHeader","Switch","Slider","usePlacementListStyles","placementListView","showRequiredOnlyCheckbox","errorIcon","adPreviewGridLayoutContainer","usePlacementContaierStyles","placementContainer","white","containerHeader","containerTitle","previewWrapper","colorNeutralBackground5","previewType","placementBox","requireBox","cropButton","minSize","adPreviewComponentContainer","tooltipProps","PlacementContainer","aspectRatioUIString","isRequired","onCrop","AdPreviewPlacementContainerBase","Image16Regular","errRequireBox","ErrorCircleFilled","Crop20Regular","onRenderFooter","previewContainerClassName","adTypeList","adTypeStrings","AdTypeControl","AdPlacementListView","onRenderPlacement","AdPlacementComponent","placementConfig","getPlacementConfig","sizeValidForRatio","_createElement","isEnabled","placementData","placementListWrapper","AdPreviewGridLayout","onRenderEmptyView","gridLayoutContainerClassName","PlacementEditView","onSave","goToPlacementListView","placementCropping","curPlacementCropping","setCurPlacementCropping","handleCropSettingsChanged","handleSave","p","newPlacement","expandedPlacementCropping","effectiveImageUrl","effectiveImageWidth","effectiveImageHeight","newFirstImg","imageCropView","Checkmark20Regular","placementEditView","ArrowLeft16Regular","AdPreviewSinglePlacementLayout","baseSaveButton","SaveButtonInSummaryBar","onSaveDirectly","onSaveAsCopy","isSaveAsCopyDisabled","isSaveDisabled","isBaseButton","baseButtonText","onBaseButtonClick","summaryBar","setSummaryBar","setOpen","renderBaseSaveButton","baseSaveButtonWithTooltip","saveAsCopyMenuItem","splitSaveButton","triggerProps","SplitButton","primaryActionButton","customizedContent","timer","setInterval","summaryBarCustomizeEle","clearInterval","createPortal","UnselectedAdPlacementSVGIcon","viewBox","xmlns","d","fillOpacity","SelectedAdPlacementSVGIcon","editPageNavigation","tabList","tabItemWrapper","tabItem","wordBreak","AdPlacementId","AdjustId","NavigationView","isAdjustButtonDisabled","adjustButtonTooltip","isAdPlacementSelected","isAdjustSelected","selectedItemId","handleAdPlacementClick","handleAdjustClick","selectedIcon","WandFilled","vertical","useBackgroundChangeStyles","colorNeutralForeground3Hover","useObjectSelectionStyles","DialogForObjectSelection","updateSubject","objectSelectionError","ObjectSelectionView","originalImageUrl","originalImageHeight","updateHighlightedImage","toggleSelectedMask","borderImageSrc","workingSelectedImageSrc","highlightedImageSrc","imageContainer","openEscape","setOpenEscape","mouseOutsideHandler","ObjectSelectionImageView","useExampleImageListStyles","exampleImageList","useExampleImageCellStyles","exampleImageCell","ExampleImageList","withOverridableStyles","ExampleImageListWithoutStyle","ExampleImageCell","ExampleImageCellWithoutStyle","getGenerationHistoryListStyles","paddleBtn","colorNeutralForeground2BrandHover","paddleBtnRight","historyListRoot","colorBrandForeground1","HistoryListImpl","selectedIndex","historyList","onSelectHistory","keyCode","History20Regular","HistoryListImages","GenerationHistoryList","PromptControl","generate","isGenerating","onSelectExampleImage","selectedHistoryIndex","exampleImageId","disabledText","onClickGenerateButton","disabledButton","MAX_PROMPT_LENGTH","labelId","getImageShimmerStyles","imageShimmerRoot","animationDirection","ImageShimmerImpl","ImageShimmer","mask","ImageWithShimmer","targetImage","showShimmer","ImageToUpdate","usePromptControlViewFactoryWithState","setNotificationConfig","isRemovingBackground","goToImageAdjustView","applyImage","showLearnMore","setShowLearnMore","setIsGenerating","_useObjectSelection","workingMasks","setWorkingMasks","setWorkingSelectedImageSrc","originalImagePixels","setOriginalImagePixels","initialSelectedImageSrc","setInitialSelectedImageSrc","setBorderImageSrc","initialBorderImageSrc","setInitialBorderImageSrc","setHighlightedImageSrc","setObjectSelectionError","pixels","getImagePixels","createSelectedImage","selectedImageSrcProp","masks","isAdd","createSelectedImageSrc","newBorderImageSrc","newImageSrc","maskValue","highlightedImage","createHighlightedImage","maskId","newMasks","useObjectSelection","activeState","setActiveState","showRemoved","setShowRemoved","dismissNotification","goToStaticImage","goToObjectSelection","wrappedUpdateSubject","setHistoryList","historyData","pv","promptValue","addNewHistory","pPromptValue","generatedImageUrl","newHistoryList","unshift","imgUrl","gotoDisallowedContent","curGeneratedImageUrl","DisallowedContent","renderErrorNotificationConfig","others","DismissCircle16Filled","cancelUpdateSubject","cancelBackgroundChange","buttonSettingConfig","ImageEdit20Regular","imageSetting","promptControlView","useColorButtonStyles","ColorButton","draw","colorButtonStyles","hexColor","canvas","createElement","ctx","getContext","fillStyle","fillRect","toDataURL","hexToBase64Color","useColorControlStyles","fontWeightSemibold","colorNeutralBackground1Selected","ColorControl","lastColor","colorControlStyles","colorPicker","addColorButton","showColorPicker","setShowColorPicker","wrappedDraw","colorValue","toggleColorPicker","logSetColorHelper","sampleColor","ed","EyeDropper","sRGBHex","onEyeDropperKeyDown","debouncedDraw","selectedColorId","suggestedColorId","Eyedropper20Regular","getColorFromString","colorObject","strings","hueAriaLabel","alphaLabel","greenLabel","blueLabel","redLabel","isDrawing","tabs","useControlViewFactoryWithState","isCallRemovingBackground","setIsCallRemovingBackground","tab","removingBackgroundNotificationConfig","SpinnerIcon","backgroundRemovedNotificationConfig","CheckmarkCircle16Filled","_usePromptControlView","promptButtonsConfig","promptImageView","_useColorControlViewF","setColor","setLastColor","setIsDrawing","colorControlView","targetColor","useColorControlViewFactoryWithState","colorButtonsConfig","colorImageView","useBackgroundChangeDisclaimerStyles","BackgroundChangeDisclaimer","BackgroundChangeView","onApplyImage","_useControlViewFactor","LoadAdsStudioBackgroundRemovalPage","ArrowLeftFilled","ColorBackground20Regular","backgroundImg","UpdateConfirmDialog","previewName","DismissCircle20Regular","editImagePage","navigationView","navigationPlaceholder","contentWrapper","EditImagePageComponent","editPagePerfMarker","_ref2$editImageUrl","_ref2$initialCurrentV","_useEditImageState","gotoPlacementEditView","LoadAdsStudioImageEditingPage","useLayoutStyles","layer","previewContainer","usePreviewBaseStyles","fadeOut","useSequentialNavigatorStyles","sequentialNavigatorContainer","navigatorStatusContainer","iconButton","chevronLeft","chevronRight","disabledIcon","useNonActiveVideoPreviewStyle","failedIconContainer","usePanelStyle","detailPanel","footerButton","useInfoPaneHeaderStyle","imageUsage","detailHeader","buttonBox","editBox","deleteBox","closeButton","useInfoItemDefaultStyles","contentItem","contentName","contentValue","useItemInfoContentStyles","contentBox","detailContentWrapper","linkContainer","useInfoPaneItemRenameStyle","nameContentBox","addNameBox","addNameTitle","addNameIcon","nameBox","editNameBox","textField","completeIcon","useItemInfoCopyUrlStyles","copyUrl","useItemInfoVideoQualityStyles","qualityBadge","usePerformanceContentStyles","dropdown","metricBox","useExternalLinkStyles","externalButton","SequentialNavigator","currentIndex","onNext","onPrevious","disableLeft","disableRight","AssetItemPreviewBase","itemData","shouldHideContent","onRenderPreviewContent","itemInfo","shouldFadeIn","VideoStatusPreviewConfig","tip","Transcoding","ItemPlaceholderBoxViewFooterType","warning","fabricIconName","fabricIconDynamicClassName","learnMoreLinkText","learnMoreLinkTopic","NonActiveVideoPreview","footerProps","mappedConfig","localizedTextFields","fabricIconClassName","ItemPlaceholderBoxView","mainViewIcon","videoIcon","mainViewIconLabel","VideoPreview","VideoPlaybackView","videoInfo","ItemDetailsPanelBase","footerKeyDownHandler","onFooterKeyDown","DrawerOverlay","DrawerHeader","DrawerHeaderTitle","DrawerBody","DrawerFooter","InfoPaneHeader","disableEdit","iconBox","EditRegular","Dismiss24Regular","DeleteAssetDialog","onDeleteAsync","onDeleteSuccess","confirmText","errorMessageForUsedAsset","genericErrorMessage","handleDelete","Code","cancelDelete","tooltipCalloutProps","isBeakVisible","CopyUrlButton","isURLCopied","setIsURLCopied","onCopyUrlClick","onTooltipToggle","isVisible","directionalHint","DirectionalHint","bottomRightEdge","delay","closeDelay","InfoPaneItemCopyUrl","onCopy","InfoItemDefault","spinnerStyle","InfoItemRename","renameAsync","renderBlocker","inputPlaceholderText","renameTitleText","displayInputBox","setDisplayInputBox","inputName","setInputName","showUiBlocker","setShowUiBlocker","handleRename","onEnterRename","Enter","handleDisplayInputBox","onEnterEditIcon","onEnterCancel","onEnterPress","maxLength","Checkmark16Regular","Dismiss16Regular","cancelIcon","Edit16Regular","ItemInfoContentBase","itemName","promptNameInputLabel","nameInputPlaceholderText","itemInfos","CustomComponent","_ref2$CustomComponent","CustomComponentOptions","promptInputLabel","_ref4$CustomComponent","_ref4$valid","metricsMap","ItemExternalLink","Open20Regular","defaultMetricLabel","metricOptions","PerformanceContent","onGotoAds","getGranularityEnum","isMetricLoading","setIsMetricLoading","metricData","setMetricData","granularity","setGranularity","loadSeriesData","selectedMetricValues","timeSeriesParams","metric","isMovingAverageOn","optionValue","granularityEnum","Dropdown","defaultSelectedOptions","Option","InlineChart","ImageDetailsPanel","assetInfo","warningMsgProp","handleDeleteAsset","handleRenameAsset","showDeleteConfirm","setShowDeleteConfirm","setWarningMsg","onDeleteImage","onRenameImage","newName","onCopyUrl","imageInfoArr","_assetInfo$id","VideoQualityBadge","quality","qualityText","PlacementQualityToText","Badge","VideoDetailsPanel","onRenameVideo","onEditVideo","videoInfoArr","getClosestAspectRatio","convertTimeDuration","durationInMS","previewCompMap","panelCompMap","AssetDetailsPageLayout","navigateToOtherItem","itemId","loadedItems","loadMoreItemsAsync","renderItemPreview","renderItemDetails","reloadLandingPageRef","hideContent","loadMoreFlag","setLoadMoreFlag","redirectToOtherItem","_loadedItems$index","gotoNext","nextIndex","gotoPrevious","itemPreviewRef","Layer","AssetDetailsPage","LaunchedAssetLibrary","LaunchedImageDetails","_usePreviewAndPanel","AssetPreview","AssetDetailsPanel","usePreviewAndPanel","_useDetailsPageSetup","currentItemId","navigateToFallbackPage","gotoLandingPage","redirect","otherItemId","otherItemFolderAssetType","onDismissed","useDetailsPageSetup","_useAssetDetailsPageA","deleteAsset","navigator","clipboard","writeText","useAssetDetailsPageActions","renderAssetPreview","renderAssetDetailsView","useBackgroundRemovalModalStyle","uploadContainer","contentArea","chooseImageContainer","uploadTitle","browse","uploadSubtext","gridTitle","loadingMask","alertError","BackgroundRemovalLibraryGrid","onSelectedImageChange","contentRef","selectedImageIdRef","validAssets","selectedImageitem","loadMoreDataWithLoading","PanelImageGrid","isHideDescription","isMultiple","overlayBodyRef","UploadArea","handleUploadFile","handleDropFile","droppedFiles","dataTransfer","handleDropOver","onDragOver","ChooseImageIcon","LoadingComp","BackgroundRemovalModalComponent","setSelectedImage","uploadCallback","newSelectedImage","onClickContinue","isUploadingFile","dialogContentRef","isContinueButtonDisabled","isSubPageSelected","subPage","rootRoute","isHomePageSelected","gotoPage","history","currentSearch","getSearchQuery","location","isLibraryPageSelected","LOADING_CELL","useAdStudioNavigation","onDropToFolderProp","onDropToFolder","setSelectedItemId","selectedFolderId","setSelectedFolderId","isCopilotEnabled","setIsCopilotEnabled","BrandKitUI","folderPathTree","loadFolderPathTreeItem","loadMoreFolderPathTreeItem","initializeFolderPathTree","navigateIntoRootFolder","currentFolder","staticItems","brandKitEnabled","route","HomeRegular","KeyboardLayoutOneHandedLeft20Regular","VideoRegular","DataTrendingRegular","StyleGuideRegular","FolderRegular","showDivider","getStaticItems","handleFolderItemClicked","CustomTab","LoadingSpinner","containerClass","LeafTreeItem","setSize","posinset","parentValue","TreeItem","itemType","TilesGridCellDropDecorator","customClassName","customDropDecorator","TreeItemLayout","treeItemLayout","treeSelected","overflowMode","TooltipOverflowMode","Self","hostClassName","tooltipHost","SubTreeItem","folderItem","onRenderSubTree","onLeafTreeItemClicked","parentFolder","loadMore","subFolders","subFoldersCount","SubTree","parentFolderId","onItemSelected","handleOpenChange","openInner","prevLoadingStatus","navigationItem","prevOpenStatus","handleTreeItemClicked","ChevronDown","ChevronDownFilled","ChevronDownRegular","ChevronRight","ChevronRightFilled","ChevronRightRegular","checkFolderSelected","subFloders","selectedId","subFolderSelected","isCurrentFolderSelected","treeItems","_SubTree","useAdStudioNavigationStyle","customTabItem","adStudioNavigation","divider","dividerContent","useFoldersTreeViewStyle","flatTree","outlineStyle","outlineWidth","FolderPathTreeView","FlatTree","AdStudioNavigation","_useAdStudioNavigatio","SideNavigationItem","groupId","selectedTabId","useAdStudioSideNavigation","groupedItems","getGroupedItems","AdStudioSideNavigation","_useAdStudioSideNavig","renderFolderPathTree","groupedStaticItems","renderCustomizedItem","getSelectedNavigationItemId","SideNavigation","selectionMode","minimumVisibleCount","subPagesWithoutNavigation","hideNavigation","height100","leftMargin","withAdStudioNavigation","Wrapper","ROOT_ROUTE","setTargetDropFolder","layoutSize","setLayoutSize","useLayoutResizeObserver","largeSize","LayoutSizeScale","XL","getModeByLayoutSize","shouldNotShowNavigation","match","getDisplayName","hoistNonReactStatics"],"sourceRoot":""}