{"version":3,"file":"static/js/application.async.landing~5f3dbc3e.24685ae8.chunk.js","mappings":"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","sources":["../../../../ads-studio/packages/ads-studio-app-components/src/page-components/performance-page-component/hooks/use-filters-reducer.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/performance-page-component/styles/context-menu-style.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/performance-page-component/filter-bar-container/new-filter-context-menu.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/performance-page-component/filter-bar-container/index.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/performance-page-component/hooks/use-filter-bar.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/performance-page-component/styles/performance-styles.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/performance-page-component/hooks/use-table-columns.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/performance-page-component/styles/chart-styles.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/performance-page-component/index.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/performance-page-component/hooks/use-load-data.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/performance-page-component/hooks/use-performance-page.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/home-page-component/home-page-styles/home-page-style.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/home-page-component/home-page-styles/component-styles/home-page-top-banner-component-style.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/home-page-component/home-page-styles/component-styles/asset-list-bar-carousel-style.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/home-page-component/home-page-styles/component-styles/home-page-generate-with-ai-component-style.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/home-page-component/components/home-page-top-banner-component.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/home-page-component/home-page-styles/component-styles/home-page-image-asset-cards.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/home-page-component/components/home-page-asset-cards/image-asset-card/image-asset-card.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/home-page-component/home-page-styles/component-styles/home-page-folder-asset-cards.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/home-page-component/components/home-page-asset-cards/folder-asset-card/folder-asset-card.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/home-page-component/home-page-styles/component-styles/home-page-video-asset-cards.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/home-page-component/components/home-page-asset-cards/video-asset-card/video-asset-card.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/home-page-component/components/asset-list-bar-carousel.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/home-page-component/components/home-page-generate-with-ai-component.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/home-page-component/home-page-styles/component-styles/home-page-action-asset-cards.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/home-page-component/components/home-page-asset-cards/action-asset-cards/action-asset-cards.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/home-page-component/home-page-styles/component-styles/home-page-image-background-section.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/home-page-component/components/home-page-image-background-section/image-background-section.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/home-page-component/index.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/styles/image-page-styles/image-page-style.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/styles/image-page-styles/component-styles/image-top-banner-component-style.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/styles/image-page-styles/component-styles/assets-entry-cards-container-style.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/styles/image-page-styles/component-styles/image-empty-view-style.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/styles/video-page-styles/video-page-style.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/styles/video-page-styles/component-styles/video-page-top-banner-component-style.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/styles/video-page-styles/component-styles/assets-entry-cards-container-style.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/styles/video-page-styles/component-styles/video-empty-view-style.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/styles/search-result-view-styles.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/images-page-component/components/assets-entry-cards-container.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/images-page-component/components/image-grid-view.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/images-page-component/components/image-top-banner-component.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/images-page-component/components/image-page-empty-view.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/images-page-component/index.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/brand-kit-page-component/reducer.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/brand-kit-page-component/components/banner/action-cards/dialogues/warning-dialogue-content.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/brand-kit-page-component/components/banner/action-cards/dialogues/style.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/brand-kit-page-component/components/banner/action-cards/dialogues/create-with-website-dialogue.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/brand-kit-page-component/components/file-upload/style.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/brand-kit-page-component/components/file-upload/constants.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/brand-kit-page-component/components/file-upload/utils.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/brand-kit-page-component/components/file-upload/index.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/brand-kit-page-component/components/banner/action-cards/dialogues/upload-brand-guidance-dialogue.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/brand-kit-page-component/components/banner/action-cards/dialogues/create-manually-action.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/brand-kit-page-component/components/banner/action-cards/styles.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/brand-kit-page-component/components/banner/action-cards/index.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/brand-kit-page-component/components/banner/styles.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/brand-kit-page-component/components/banner/index.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/brand-kit-page-component/components/suggestions/styles.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/brand-kit-page-component/components/suggestions/index.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/brand-kit-page-component/components/taglines/styles.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/brand-kit-page-component/components/taglines/index.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/brand-kit-page-component/components/fonts-selector/constants.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/brand-kit-page-component/components/fonts-selector/styles.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/brand-kit-page-component/components/fonts-selector/index.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/brand-kit-page-component/list-panel/style.ts","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/brand-kit-page-component/list-panel/ListItem.tsx","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/brand-kit-page-component/list-panel/index.tsx","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/brand-kit-page-component/logo-edit-panel/index.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/brand-kit-page-component/components/process-image-asset-payload.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/brand-kit-page-component/components/image-element.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/brand-kit-page-component/context.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/brand-kit-page-component/content-panel/style.ts","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/brand-kit-page-component/content-panel/index.tsx","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/brand-kit-page-component/styles/brand-voice-styles.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/brand-kit-page-component/brand-voice.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/brand-kit-page-component/styles/brand-kit-page-styles.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/brand-kit-page-component/brand-elements.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/brand-kit-page-component/index.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/display-templates-page-component/components/Banner/style.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/display-templates-page-component/components/Banner/index.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/display-templates-page-component/components/template-grid/style.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/display-templates-page-component/components/template-grid/index.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/display-templates-page-component/components/template-details-carousel/style.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/display-templates-page-component/components/template-details-carousel/index.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/display-templates-page-component/components/template-details-modal/style.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/display-templates-page-component/components/template-details-modal/index.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/display-templates-page-component/style.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/display-templates-page-component/index.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/create-display-template-page-component/style.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/create-display-template-page-component/use-notify.tsx","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/create-display-template-page-component/index.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/edit-display-template-page-component/style.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/edit-display-template-page-component/index.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/library-page-component/styles/folders-grid-cell-with-context-menu-style.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/library-page-component/components/folders-grid-cell-with-context-menu.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/library-page-component/styles/edit-folder-name-modal-style.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/library-page-component/components/edit-folder-name-modal.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/library-page-component/hooks/use-create-folder-modal.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/library-page-component/hooks/use-delete-confirm-dialog.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/library-page-component/hooks/use-rename-folder-modal.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/library-page-component/styles/summary-result-dialog-style.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/library-page-component/components/summary-result-dialog/columns.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/library-page-component/components/summary-result-dialog/dialog.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/library-page-component/components/summary-result-dialog/use-summary-result-dialog.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/library-page-component/styles/toolbar-style.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/library-page-component/components/toolbar.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/library-page-component/index.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/library-page-component/hooks/use-drag-and-drop-confirm-dialog.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/videos-page-component/components/assets-entry-cards-container.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/videos-page-component/components/video-page-top-banner-component.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/videos-page-component/components/video-page-empty-view.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/videos-page-component/components/video-grid-view.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/videos-page-component/index.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/video-templates-page-component/components/template-grid/style.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/video-templates-page-component/components/template-grid/index.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/video-templates-page-component/components/template-details-modal/style.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/video-templates-page-component/components/template-details-modal/index.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/video-templates-page-component/style.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/video-templates-page-component/index.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/edit-video-page-component/style.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/edit-video-page-component/components/use-video-notify.tsx","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/edit-video-page-component/index.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/generate-image-page-component/state.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/generate-image-page-component/util.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/generate-image-page-component/brand-detection-confirmation/style.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/generate-image-page-component/brand-detection-confirmation/brand-detection-confirmation.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/generate-image-page-component/prompt-editor/style.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/generate-image-page-component/prompt-editor/prompt-editor.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/generate-image-page-component/prompt-editor/options.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/generate-image-page-component/generated-images/style.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/generate-image-page-component/generated-images/generated-images.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/generate-image-page-component/example-image/style.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/generate-image-page-component/example-image/example-image.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/generate-image-page-component/explore-prompts/style.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/generate-image-page-component/explore-prompts/explore-prompts.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/generate-image-page-component/disclaimer.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/generate-image-page-component/remaing-text.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/generate-image-page-component/error.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/generate-image-page-component/style.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/generate-image-page-component/view.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/add-assets-panel/add-asset-panel.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/add-assets-panel/hooks/use-source-images.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/add-assets-panel/website-image-panel.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/add-assets-panel/stock-image-panel.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/add-assets-panel/error/add-video-error.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/add-assets-panel/add-video-panel.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/add-assets-panel/upload-files-panel.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/add-assets-panel/hooks/use-upload-folder.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/add-assets-panel/upload-folder-panel.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/add-assets-panel/mixed-image-panel.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/add-assets-panel/hooks/use-source-videos.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/add-assets-panel/mixed-video-panel.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/add-assets-panel/invest-image-panel.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/add-assets-panel/invest-video-panel.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/search-result-view/index.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/edit-image-page-component/model/use-ad-placement.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/edit-image-page-component/model/background-change/use-background-change.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/edit-image-page-component/model/background-change/use-masked-image.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/edit-image-page-component/model/utils.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/edit-image-page-component/model/use-edit-image-state.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/edit-image-page-component/model/use-filter-and-blur.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/edit-image-page-component/views/image-preview-view/style.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/edit-image-page-component/views/image-preview-view/index.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/edit-image-page-component/views/image-adjust-view/style.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/edit-image-page-component/views/image-adjust-view/index.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/edit-image-page-component/views/ad-placement-list-view/styles/index.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/edit-image-page-component/views/ad-placement-list-view/placement-container.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/edit-image-page-component/views/ad-placement-list-view/ad-type-control.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/edit-image-page-component/views/ad-placement-list-view/index.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/edit-image-page-component/views/placement-edit-view/style.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/edit-image-page-component/views/placement-edit-view/index.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/edit-image-page-component/views/save-button-in-summary-bar/style.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/edit-image-page-component/views/save-button-in-summary-bar/index.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/edit-image-page-component/media/unselected-ad-placement-svg-icon.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/edit-image-page-component/media/selected-ad-placement-svg-icon.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/edit-image-page-component/views/navigation-view/style.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/edit-image-page-component/views/navigation-view/index.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/edit-image-page-component/views/background-change-view/style.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/edit-image-page-component/views/background-change-view/object-selection/style.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/edit-image-page-component/views/background-change-view/object-selection/index.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/edit-image-page-component/views/background-change-view/example-image/style.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/edit-image-page-component/views/background-change-view/example-image/example-image-list.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/edit-image-page-component/views/background-change-view/example-image/example-image-cell.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/edit-image-page-component/views/background-change-view/history-list/history-images.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/edit-image-page-component/views/background-change-view/history-list/generation-history-list-styles.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/edit-image-page-component/views/background-change-view/history-list/generation-history-list.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/edit-image-page-component/views/background-change-view/generate-button/style.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/edit-image-page-component/views/background-change-view/generate-button/index.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/edit-image-page-component/views/background-change-view/prompt-control/view.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/image-with-shimmer/style.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/image-with-shimmer/image-shimmer.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/image-with-shimmer/image-with-shimmer.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/edit-image-page-component/views/background-change-view/prompt-control-state.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/edit-image-page-component/model/background-change/use-object-selection.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/edit-image-page-component/views/background-change-view/color-control/color-button/style.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/edit-image-page-component/views/background-change-view/color-control/color-button/color-button.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/edit-image-page-component/views/background-change-view/color-control/style.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/edit-image-page-component/views/background-change-view/color-control/view.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/edit-image-page-component/views/background-change-view/color-control-state.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/edit-image-page-component/views/background-change-view/state.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/background-change-disclaimer/index.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/edit-image-page-component/views/background-change-view/view.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/edit-image-page-component/views/update-confirm-dialog/style.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/edit-image-page-component/views/update-confirm-dialog/index.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/edit-image-page-component/style.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/edit-image-page-component/index.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/asset-detail-component/styles.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/asset-detail-component/components/asset-preview-base/sequential-navigator.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/asset-detail-component/components/asset-preview-base/asset-item-preview-base.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/asset-detail-component/components/image-preview.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/asset-detail-component/components/non-active-video-preview.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/asset-detail-component/components/video-preview.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/asset-detail-component/components/asset-panel-base/panel-base.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/asset-detail-component/components/asset-panel-base/info-panel-header.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/asset-detail-component/components/asset-panel-base/delete-asset-dialog.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/asset-detail-component/components/basic-info/info-item-copy-url.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/asset-detail-component/components/basic-info/info-item-default.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/asset-detail-component/components/basic-info/info-item-rename.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/asset-detail-component/components/basic-info/item-info-panel-content-base.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/asset-detail-component/constants.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/asset-detail-component/components/performance/item-external-link.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/asset-detail-component/components/performance/index.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/asset-detail-component/components/image-panel.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/asset-detail-component/components/basic-info/info-item-video-quality.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/asset-detail-component/components/video-panel.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/asset-detail-component/hooks/use-preiview-and-panel.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/asset-detail-component/components/details-page-layout.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/asset-detail-component/hooks/use-details-page-setup.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/asset-detail-component/index.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/asset-detail-component/hooks/use-asset-details-page-actions.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/background-removal-modal/background-removal-modal-style.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/background-removal-modal/library-grid.js","../../../../ads-studio/packages/ads-studio-app-components/src/page-components/background-removal-modal/index.js","../../../../ads-studio/packages/ads-studio-app-components/src/navigation-component/utils.js","../../../../ads-studio/packages/ads-studio-app-components/src/navigation-component/use-ad-studio-navigation.js","../../../../ads-studio/packages/ads-studio-app-components/src/navigation-component/components/custom-tab.js","../../../../ads-studio/packages/ads-studio-app-components/src/navigation-component/components/loading-spinner.js","../../../../ads-studio/packages/ads-studio-app-components/src/navigation-component/components/leaf-tree-item.js","../../../../ads-studio/packages/ads-studio-app-components/src/navigation-component/components/sub-tree-item.js","../../../../ads-studio/packages/ads-studio-app-components/src/navigation-component/components/sub-tree.js","../../../../ads-studio/packages/ads-studio-app-components/src/navigation-component/style.js","../../../../ads-studio/packages/ads-studio-app-components/src/navigation-component/components/folders-tree-view.js","../../../../ads-studio/packages/ads-studio-app-components/src/navigation-component/ad-studio-navigation.js","../../../../ads-studio/packages/ads-studio-app-components/src/navigation-component/use-ad-studio-side-navigation.js","../../../../ads-studio/packages/ads-studio-app-components/src/navigation-component/ad-studio-side-navigation.js","../../../../ads-studio/packages/ads-studio-app-components/src/navigation-component/with-ad-studio-navigation.js"],"sourcesContent":["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.padding('0'),\r\n listStyleType: 'none',\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, i18n,\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 === ' ' || e.key === 'Tab') {\r\n onMouseEnter();\r\n }\r\n };\r\n return (\r\n
  • \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 aria-label={i18n.getString(_TL_('Edit Button'))}\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 aria-label={i18n.getString(_TL_('Delete Button'))}\r\n className=\"del_btn\"\r\n onClick={onRemove}\r\n />\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 i18n,\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
    \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
    • \r\n }\r\n key=\"add_list\"\r\n onClick={onAdd}\r\n aria-label={i18n.getString(_TL_('Add Button'))}\r\n className={mergeClasses(classes.addBtn, 'add_button')}\r\n />\r\n
    • \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 (format === LogoFormat.square && !hasLandScapeLimit) {\r\n return false;\r\n }\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.landscape && !hasSquareLimit) {\r\n return false;\r\n }\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, useEffect } 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\nconst ToastComponent = ({\r\n i18n, count, navigation, logger, dismissToast, toastId,\r\n}) => {\r\n const buttonRef = React.createRef();\r\n\r\n useEffect(() => {\r\n if (buttonRef.current) {\r\n buttonRef.current.focus();\r\n }\r\n }, [buttonRef]);\r\n\r\n return (\r\n \r\n \r\n }\r\n title={i18n.getString(_TL_('Dismiss'))}\r\n aria-label={i18n.getString(_TL_('Dismiss'))}\r\n ref={buttonRef}\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};\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 intent: 'success', toastId, timeout, politeness: 'assertive',\r\n }\r\n ), [i18n, navigation, count, toastId, logger, dismissToast, dispatchToast]);\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 shouldShowExternalLink = useMemo(() => {\r\n const isMacEnv = new URLSearchParams(document.location.search).get('isMacEnv');\r\n return isMacEnv === 'true';\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, shouldShowExternalLink]);\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, useRef } 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 lastTriggerRef,\r\n}) => {\r\n const classes = useTemplateVideoStyles();\r\n const listItemRef = useRef(null);\r\n\r\n const onClick = (currentRef) => {\r\n if (lastTriggerRef) {\r\n // eslint-disable-next-line no-param-reassign\r\n lastTriggerRef.current = currentRef;\r\n }\r\n\r\n setClickedTemplate(template);\r\n };\r\n\r\n return (\r\n
    \r\n onClick(listItemRef.current)} aria-label={template.LocalizedTemplateName || template.TemplateName}>\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 lastTriggerRef,\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 ...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 width: '600px',\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 videoContainer: {\r\n display: 'flex',\r\n width: '600px',\r\n justifyContent: 'center',\r\n alignItems: 'center',\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 onSelectTemplate,\r\n setCopilotFinalUrl,\r\n handleOpenChange,\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(() => \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 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, useRef } 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 const lastTriggerRef = useRef(null);\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 handleOpenChange = useCallback((event, data) => {\r\n setOpenModal(data.open);\r\n if (!data.open && lastTriggerRef && lastTriggerRef.current) {\r\n lastTriggerRef.current.focus();\r\n }\r\n }, []);\r\n\r\n const onClose = () => {\r\n setOpenModal(false);\r\n handleOpenChange(null, { open: 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 '752ca3e5-d09a-4ca7-bdbc-f9c14b2148aa': {\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 } 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 pagePerfMarker.willRender();\r\n if (setDataLoaded) {\r\n setDataLoaded();\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 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 {!isSaving && (\r\n
    {videoId ? i18n.getString(_TL_('Loading...')) : i18n.getString(_TL_('Generating the video for you. This may take a few minutes...'))}
    \r\n )}\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 generateMultipleImageBackgrounds: generateMultipleBackgrounds,\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 const generateMultipleImageBackgrounds = useCallback(({\r\n prompt, imageUrl, imageWidth, imageHeight,\r\n }) => {\r\n const backgroundGenerationPerfMarker = perfMarker.createChild('MultiImageBackgroundsGeneration');\r\n backgroundGenerationPerfMarker.willInit();\r\n const ret = generateMultipleBackgrounds({\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 { images: newImages } = res || {};\r\n logger.logTrace('Copilot change image background - generate image backgrounds successfully', { generatedUrl: newImages, prompt });\r\n if (newImages.length > 0 && newImages[0].imageUrl) {\r\n setImageUrlWithGeneratedBackground(newImages[0].imageUrl);\r\n }\r\n return newImages;\r\n }).finally(() => {\r\n backgroundGenerationPerfMarker.done();\r\n });\r\n return ret;\r\n }, [selectedMasks, perfMarker,\r\n generateMultipleBackgrounds, 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 generateMultipleImageBackgrounds,\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 generateMultipleImageBackgrounds,\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 generateMultipleImageBackgrounds,\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 '& .prompt-example-new': {\r\n marginTop: '16px',\r\n borderTop: '1px solid var(--Neutral-Stroke-2-Rest, rgba(224, 224, 224, 1))',\r\n '& .example-image-list-label': {\r\n marginTop: '0px !important',\r\n fontWeight: '600',\r\n fontSize: '14px',\r\n lineHeight: '19px',\r\n color: 'rgba(96, 94, 92, 1)',\r\n ...shorthands.padding('16px', '0px', '12px'),\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 '& .prompt-editor-new': {\r\n '& .prompt-textarea': {\r\n width: '100%',\r\n borderRadius: '8px',\r\n backgroundColor: 'rgba(245, 245, 245, 1)',\r\n ...shorthands.border('0px'),\r\n ...shorthands.padding('8px', '16px'),\r\n ...shorthands.overflow('hidden'),\r\n },\r\n '& .disabled-prompt-textarea': {\r\n color: 'rgba(189, 189, 189, 1)',\r\n },\r\n '& textarea': {\r\n minHeight: '80px !important',\r\n ...shorthands.padding('0px'),\r\n },\r\n '&::after': {\r\n height: '2px',\r\n backgroundColor: 'linear-gradient(289.99deg, #BA6DF1 14.58%, #4B9DF5 86.51%) !important',\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 aspectRatio: '1 / 1',\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 React, { useMemo } from 'react';\r\nimport _ from 'underscore';\r\nimport {\r\n mergeClasses, Button\r\n} from '@fluentui/react-components';\r\n\r\nconst ViewAllIcon = () => (\r\n \r\n \r\n \r\n);\r\n\r\nconst ViewLessIcon = () => (\r\n \r\n \r\n \r\n);\r\n\r\nexport const ViewMode = {\r\n VIEW_LESS: 'VIEW_LESS',\r\n VIEW_ALL: 'VIEW_ALL',\r\n};\r\n\r\nexport const HistoryImagesViewLess = ({\r\n i18n, historyList, onClick, onKeyDown, selectedHistoryGroup, onClickViewAll,\r\n}) => {\r\n const latestGeneratedImages = useMemo(() => historyList[0].imageUrlList, [historyList]);\r\n const { imageIndex, groupIndex } = selectedHistoryGroup;\r\n\r\n return (\r\n
    \r\n
    \r\n {_.map(latestGeneratedImages, (imageUrl, index) => (\r\n onClick(0, index)}\r\n role=\"button\"\r\n tabIndex={0}\r\n onKeyDown={e => onKeyDown(0, index, e)}\r\n >\r\n \"generation\r\n
    \r\n ))}\r\n
    \r\n {historyList.length > 1 && }\r\n \r\n );\r\n};\r\n\r\nexport const HistoryImagesViewAll = ({\r\n i18n, historyList, onClick, onKeyDown, selectedHistoryGroup, onClickViewLess, renderExampleImageList,\r\n}) => (\r\n
    \r\n {_.map(historyList, ({ promptValue, imageUrlList }, index1) => (\r\n
    \r\n
    {promptValue}
    \r\n
    \r\n {_.map(imageUrlList, (imageUrl, index2) => {\r\n const { imageIndex, groupIndex } = selectedHistoryGroup;\r\n return (\r\n onClick(index1, index2)}\r\n role=\"button\"\r\n tabIndex={0}\r\n onKeyDown={e => onKeyDown(index1, index2, e)}\r\n >\r\n \"generation\r\n
    \r\n );\r\n })}\r\n
    \r\n
    \r\n ))}\r\n {renderExampleImageList()}\r\n \r\n \r\n);\r\n\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 historyListRootV2: {\r\n marginTop: '16px',\r\n paddingTop: '16px',\r\n ...shorthands.borderTop('1px', 'solid', 'rgba(224, 224, 224, 1)'),\r\n\r\n '& .history-list-container': {\r\n '& .history-images-view-less': {\r\n '& .view-less-image-container': {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n flexWrap: 'wrap',\r\n rowGap: '12px',\r\n columnGap: '12px',\r\n width: '100%',\r\n\r\n '& .history-item-root': {\r\n ...shorthands.borderRadius('6px'),\r\n width: 'calc(50% - 6px)',\r\n aspectRatio: '1 / 1',\r\n cursor: 'pointer',\r\n ...shorthands.overflow('hidden'),\r\n\r\n '&.selected': {\r\n ...shorthands.border('2px', 'solid', tokens.colorBrandForeground1),\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 '& .view-all-button': {\r\n marginTop: '16px',\r\n width: '100%',\r\n ...shorthands.padding('2px', '0px'),\r\n fontSize: '12px',\r\n lineHeight: '20px',\r\n color: 'rgba(66, 66, 66, 1)',\r\n },\r\n },\r\n\r\n '& .history-images-view-all': {\r\n '& .view-all-image-container': {\r\n marginBottom: '28px',\r\n '& .prompt-title': {\r\n color: 'rgba(66, 66, 66, 1)',\r\n fontSize: '12px',\r\n marginBottom: '8px',\r\n },\r\n '& .view-all-list-box': {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n flexWrap: 'wrap',\r\n rowGap: '12px',\r\n columnGap: '12px',\r\n width: '100%',\r\n\r\n '& .history-item-root': {\r\n ...shorthands.borderRadius('6px'),\r\n width: 'calc(50% - 6px)',\r\n aspectRatio: '1 / 1',\r\n cursor: 'pointer',\r\n ...shorthands.overflow('hidden'),\r\n\r\n '&.selected': {\r\n ...shorthands.border('2px', 'solid', tokens.colorBrandForeground1),\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\n '& .prompt-example-new': {\r\n marginTop: '0px',\r\n borderTop: '0px',\r\n '& .example-image-list-label': {\r\n marginTop: '0px !important',\r\n fontWeight: '600',\r\n fontSize: '14px',\r\n lineHeight: '19px',\r\n color: 'rgba(96, 94, 92, 1)',\r\n paddingButtom: '12px',\r\n paddingTop: '0px !important',\r\n },\r\n },\r\n '& .view-less-button': {\r\n marginTop: '16px',\r\n width: '100%',\r\n ...shorthands.padding('2px', '0px'),\r\n fontSize: '12px',\r\n lineHeight: '20px',\r\n color: 'rgba(66, 66, 66, 1)',\r\n },\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 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 { HistoryImagesViewAll, HistoryImagesViewLess, ViewMode } from './history-images';\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\r\nconst HistoryListImplV2 = ({\r\n selectedHistoryGroup,\r\n historyList,\r\n onSelectHistory,\r\n i18n,\r\n classes,\r\n renderExampleImageList,\r\n}) => {\r\n const [viewMode, setViewModwe] = useState(ViewMode.VIEW_LESS);\r\n\r\n const onClick = useCallback((groupIndex, imageIndex) => {\r\n onSelectHistory(historyList[groupIndex], groupIndex, imageIndex);\r\n }, [historyList, onSelectHistory]);\r\n\r\n const onKeyDown = useCallback((groupIndex, imageIndex, ev) => {\r\n if (ev.keyCode === 'Enter') {\r\n onClick(groupIndex, imageIndex);\r\n }\r\n }, [onClick]);\r\n\r\n return (\r\n
    \r\n
    \r\n {viewMode === ViewMode.VIEW_LESS && (\r\n setViewModwe(ViewMode.VIEW_ALL)}\r\n />\r\n )}\r\n {viewMode === ViewMode.VIEW_ALL && (\r\n setViewModwe(ViewMode.VIEW_LESS)}\r\n renderExampleImageList={renderExampleImageList}\r\n />\r\n )}\r\n
    \r\n
    \r\n );\r\n};\r\n\r\nHistoryListImplV2.propTypes = {\r\n selectedHistoryGroup: { groupIndex: PropTypes.number, imageIndex: 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\nHistoryListImplV2.defaultProps = {\r\n selectedHistoryGroup: { groupIndex: -1, imageIndex: -1 },\r\n historyList: [],\r\n onSelectHistory: () => {},\r\n};\r\n\r\nexport const GenerationHistoryListV2 = withOverridableStyles(HistoryListImplV2, getGenerationHistoryListStyles);\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nexport const useGenerateButtonStyles = makeStyles({\r\n generateButton: {\r\n marginTop: '12px',\r\n width: '100%',\r\n color: 'white',\r\n fontSize: '16px',\r\n lineHeight: '22px',\r\n borderRadius: '4px',\r\n ...shorthands.padding('9px', '0px'),\r\n background: 'linear-gradient(90.5deg, #185ABD 0%, #8763C2 100%) !important',\r\n flexShrink: 0,\r\n },\r\n disabledGenerateButton: {\r\n background: 'rgba(240, 240, 240, 1)',\r\n color: 'rgba(189, 189, 189, 1)',\r\n },\r\n});\r\n","import React from 'react';\r\nimport { Button, mergeClasses } from '@fluentui/react-components';\r\nimport { useGenerateButtonStyles } from './style';\r\n\r\nconst StartIcon = () => (\r\n \r\n \r\n \r\n);\r\n\r\nconst DisabledStartIcon = () => (\r\n \r\n \r\n \r\n);\r\n\r\nexport const GenerateButton = ({ i18n, disabledButton, onClickGenerateButton }) => {\r\n const classes = useGenerateButtonStyles();\r\n return (\r\n : }\r\n appearance=\"primary\"\r\n onClick={onClickGenerateButton}\r\n disabled={disabledButton}\r\n className={mergeClasses(classes.generateButton, disabledButton && classes.disabledGenerateButton, disabledButton ? 'disabled' : 'enabled', 'generate-button')}\r\n aria-label={i18n.getString(_TL_('Expand background'))}\r\n >\r\n {i18n.getString(_TL_('Generate'))}\r\n \r\n );\r\n};\r\n","import React, { useEffect, useState } from 'react';\r\nimport { Label, Text, useId } from '@fluentui/react-components';\r\nimport {\r\n LoadingIndicator, PromptEditor, MAX_PROMPT_LENGTH, PromptEditorV2,\r\n} from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { ExampleImageList, ExampleImageCell } from '../example-image';\r\nimport { GenerationHistoryList, GenerationHistoryListV2 } from '../history-list';\r\nimport { GenerateButton } from '../generate-button';\r\n\r\nconst INITIAL_CONTROL_HEIGHT = 320;\r\nconst CONTAINER_OTHER_HEIGHT = 140; // padding + tab + title\r\n\r\nexport const PromptControlV2 = (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 selectedHistoryGroup,\r\n disabled,\r\n } = props;\r\n\r\n const [promptControlHeight, setPromptControlHeight] = useState(INITIAL_CONTROL_HEIGHT);\r\n const exampleImageId = useId('example-image-list');\r\n\r\n const renderExampleImageList = () => (\r\n
    \r\n \r\n \r\n
    \r\n );\r\n\r\n useEffect(() => {\r\n const containerHeight = document.querySelector('.control-section').clientHeight;\r\n setPromptControlHeight(containerHeight - CONTAINER_OTHER_HEIGHT);\r\n }, []);\r\n\r\n return (\r\n
    \r\n
    \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 && !(historyList && historyList.length > 0) && renderExampleImageList()}\r\n MAX_PROMPT_LENGTH || disabled} onClickGenerateButton={generate} />\r\n {!isGenerating && historyList && historyList.length > 0 && (\r\n )}\r\n
    \r\n );\r\n};\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 _ from 'underscore';\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 {\r\n PromptControl,\r\n PromptControlV2,\r\n} 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 generateMultipleImageBackgrounds,\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 permissions,\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 isMultiBackgroundGenerationEnabled = useMemo(() => _.get(permissions, ['dynamic', 'MultiBackgroundGeneration']), [permissions]);\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, // Used for V1 selected history index\r\n // Used for V2 selected history group and image index\r\n selectedHistoryGroup: {\r\n groupIndex: -1,\r\n imageIndex: -1,\r\n },\r\n });\r\n // used for V1 to select the history image\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 // used for V2 to select the history image\r\n const onSelectHistoryBackground = useCallback((historyData, groupIndex, imageIndex) => {\r\n const { promptValue: pv, imageUrlList } = historyData || {};\r\n if (pv && imageUrlList) {\r\n setPrompt(pv);\r\n setHistoryList({ ...historyList, selectedHistoryGroup: { groupIndex, imageIndex } });\r\n }\r\n }, [historyList]);\r\n // used for V1 to add the new images to the history list\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 // used for V2 to add the new images to the history list\r\n const addNewHistoryBackgrounds = useCallback((pPromptValue, generatedImages) => {\r\n const imageUrls = _.map(generatedImages, generatedImage => generatedImage.imageUrl);\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, imageUrlList: imageUrls });\r\n setHistoryList({\r\n list: newHistoryList,\r\n selectedHistoryGroup: { groupIndex: 0, imageIndex: 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 generateMultiBackgrounds = useCallback(() => {\r\n if (logger && logger.logTrace) {\r\n logger.logTrace('backgrounds change: generate button clicked', { prompt });\r\n }\r\n setIsGenerating(true);\r\n setErrorMessage('');\r\n setShowLearnMore(false);\r\n generateMultipleImageBackgrounds({\r\n prompt,\r\n imageUrl: image.url,\r\n imageWidth: image.width,\r\n imageHeight: image.height,\r\n }).then((images) => {\r\n if (logger && logger.logTrace) {\r\n logger.logTrace('backgrounds change: generate backgrounds success', { prompt, generatedImages: images });\r\n }\r\n addNewHistoryBackgrounds(prompt, images);\r\n }).catch((error) => {\r\n if (logger && logger.logTrace) {\r\n logger.logTrace('backgrounds change: generate images 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 }, [addNewHistoryBackgrounds, generateMultipleImageBackgrounds, 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 selectedHistoryGroup,\r\n } = historyList;\r\n if (isMultiBackgroundGenerationEnabled) {\r\n const { groupIndex, imageIndex } = selectedHistoryGroup || {};\r\n if (groupIndex >= 0 && groupIndex < list.length) {\r\n const imageGroup = list[groupIndex].imageUrlList;\r\n if (imageGroup && (imageGroup[imageIndex] !== imageUrlWithGeneratedBackground)) {\r\n setImageUrlWithGeneratedBackground(imageGroup[imageIndex]);\r\n }\r\n return imageGroup[imageIndex];\r\n }\r\n } else {\r\n // eslint-disable-next-line no-lonely-if\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 }\r\n return imageUrlWithGeneratedBackground;\r\n }, [historyList, imageUrlWithGeneratedBackground, isMultiBackgroundGenerationEnabled, 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 = useMemo(() => (isMultiBackgroundGenerationEnabled ? (\r\n \r\n ) : (\r\n \r\n )), [MultiLineEllipsisText, fetchSegmentationError, generate, generateMultiBackgrounds, historyList.list, historyList.selectedHistoryIndex, historyList.selectedHistoryGroup, i18n, isGenerating, isRemovingBackground, onSelectExampleImage, onSelectHistory, onSelectHistoryBackground, isMultiBackgroundGenerationEnabled, prompt]);\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 hideEyeDropper = useMemo(() => {\r\n const isMacEnv = new URLSearchParams(document.location.search).get('isMacEnv');\r\n return isMacEnv === 'true';\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 && !hideEyeDropper) {\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 && !hideEyeDropper ?\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 generateMultipleImageBackgrounds,\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 permissions,\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 generateMultipleImageBackgrounds,\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 permissions,\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 generateMultipleImageBackgrounds,\r\n onApplyImage,\r\n permissions,\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 generateMultipleImageBackgrounds,\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 permissions,\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 generateMultipleImageBackgrounds,\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, VideoSourceType } 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 isAIGenerated = assetInfo && assetInfo.sourceType && assetInfo.sourceType === VideoSourceType.AIGenerated;\r\n const disableEdit = !(videoTemplateUIEnabled && assetInfo && assetInfo.id && assetInfo.metaData && isAIGenerated);\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":["filtersReducer","state","action","actionType","actionData","_objectWithoutProperties","_excluded","type","title","id","value","humanizedValue","_","concat","_toConsumableArray","newState","filter","length","initialState","newValue","newHumanizedValue","index","filterToUpdate","isFilterAlwaysVisible","splice","_objectSpread","filterWithValues","_ref","useMenuStyle","makeStyles","menuButton","shorthands","border","height","fontSize","marginLeft","paddingLeft","paddingRight","backgroundColor","fontWeight","NewFilterContextMenu","allSupportedFilters","filters","onAddNewFilter","i18n","isFocused","classes","buttonRef","useRef","_useState","useState","_useState2","_slicedToArray","checkedValues","setCheckedValues","items","useMemo","values","f","FilterType","SearchText","map","_ref2","isFilterAlreadySet","key","name","getString","disabled","canCheck","checked","onClick","useEffect","checkedItems","item","newCheckedValues","forEach","undefined","current","focus","_jsxs","Menu","children","_jsx","MenuTrigger","MenuButton","ref","className","mergeClasses","MenuPopover","MenuList","MenuItemRadio","defaultProps","target","FilterBarContainerImpl","addNewFilter","removeAllFilters","removeEmptyFilters","updateFilter","removeFilter","isEditingFilter","setIsEditingFilter","onFilterValueChange","ianaTimeZone","dateFormat","isAdsStudioAIGCMVPEnabled","focusedFilterRef","defaultOpenFilterRef","onClickAddFilterButton","useCallback","onClickReadonlyFilter","onCloseEditingFilterBar","onResetClick","newFilter","TopRatedPerformance","initValue","topRated","initHumanizedValue","onRenderNewFilterContextMenu","onValueChange","curFilterState","onDropdownDismiss","onRenderReadonlyFilter","isLast","PerformanceSearchTextFilterComponent","React","FilterComponents","getPerformanceFilterComponents","onRenderEditingFilter","_ref3","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","_ref4","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","tokens","colorStrokeFocus2","usePerformancePageStyles","assetLibraryPerformancePageContainer","padding","width","overflow","margin","subMenu","display","alignItems","flexGrow","inlineDownloadContainer","usePerfTableStyle","imagePreviewContainer","imagePreviewAndNameContainer","opacity","transition","justifyContent","position","top","left","right","useImagePreviewRawStyles","hostStyles","actionButtonStyles","borderRadius","color","COLUMN_KEYS","toolbarFilterContainer","flex","paddingTop","alignSelf","columnKeyToSortBy","_columnKeyToSortBy","_defineProperty","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","label","iconProps","TooltipHost","content","styles","IconButton","ImagePreviewAndName","highlightedText","onGotoDetailPage","onGotoEditPage","imageName","TextWithHighlight","text","enableTooltip","_TL_","AssetColumn","renderHeaderWithPopup","ariaLabel","minWidth","maxWidth","isCollapsible","isResizable","sortable","onRenderHeader","sortIcon","onRender","helpId","odataColumnName","IdColumn","isRowHeader","CreatedColumn","createdTime","ModifiedColumn","modifiedTime","ClicksColumn","compareOn","currentPeriod","lastPeriod","fieldName","subColumns","CTRColumn","ImpressionsColumn","_ref6","SpendColumn","_ref7","UsageColumn","_ref8","Button","icon","OpenRegular","style","textWrap","textAlign","lineHeight","appearance","useInlineChartContainerStyle","inlineChartContainer","flexShrink","zIndex","boxShadow","paddingBottom","flexDirection","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","borderBottom","minHeight","backdropFilter","backgroundSize","PerformancePageComponent","props","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","catch","err","finally","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","some","subCol","push","getHeaders","_ref11","sortByKey","_ref12","expandColumns","newColumns","cols","_ref13","prevCols","useTableColumns","_usePerformancePage","pageNumber","setPageNumber","DEFAULT_PAGE_SIZE","pageSize","setPageSize","onPageChange","number","then","onPageSizeChange","size","setPerfTablePageSize","pager","total","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","role","Overlay","AdsStudioSpinner","assetLibraryAccountPreferences","Promise","useHomePageStyle","homePage","gap","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","flexWrap","footerContainer","marginBottom","imageRowContainer","imageWrapper","transform","image","objectFit","transitionProperty","transitionDuration","transitionTimingFunction","overlayText","overlayButton","outlineColor","TopHomePageBannerComponent","onSearch","_React$useState","_React$useState2","searchQuery","setSearchQuery","handleSearchChange","event","preventDefault","trim","getHomePageTopBannerContainerStyle","Textarea","placeholder","onChange","onKeyDown","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","footer","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","onClose","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","permissions","openSystemUploadRef","isXandrIntEnabled","dynamic","XandrIntegrationEnabled","account","useJsData","jsData","Account","find","resolve","data","isXandrIntegrationEnabled","isValidXandrAccount","cardData","getHomePageCardData","onClickUpload","gotoUploadFilesPanelPage","mode","openSystemUpload","onClickStock","gotoStockImagePanelPage","onClickInvest","gotoInvestImagePanelPage","onClickWebsite","gotoWebsiteImagePanelPage","AddAssetEntryCard","description","isFillWidth","useImageBackgroundSectionStyles","backgroundCardContainer","uploadCard","colorNeutralStroke1","uploadIcon","uploadFrame","uploadCaption","uploadButton","staticBackgrounds","background1","background2","background3","background4","background5","background6","background7","background8","background9","background10","ImageBackgroundCards","handleImageUploadClick","gotoBackgroundRemovalModal","onExampleImageKeyDown","imageUploadIcon","background","tabIndex","HomePage","libraryDataService","homePagePerfMarker","loadData","_dataService$assets","setGenerateImageExample","useContext","GenerateImageContext","isAdsStudioBackgroundChangeEnabled","setClarityTag","LoadAdsStudioHomePage","isRecentSorting","addAdStudioSurveyTriggerFlag","AdStudioSurveyTriggerFlag","gotoSearchResultPage","query","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","useStyles","container","WarningDialogueContent","EntryCardSVGIcons","WarningSVGIcon","Subtitle1","block","useCommonDialogueStyles","typographyStyles","body1","spacingVerticalL","spacingHorizontalXXL","header","columnGap","spacingHorizontalL","spacingHorizontalS","horizontalDivider","spacingVerticalS","spacingHorizontalNone","dialogueContentContainer","dismissIcon","borderRadiusXLarge","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","errorMessage","e","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","visibility","borderStyle","borderColor","colorNeutralBackground1","getFileUploadButtonStyles","_ref2$palette","button","useFileUploadStyles","filesContainer","spacingVerticalM","spacingHorizontalXL","fileContainer","shadow4","colorNeutralBackground2","borderRadiusMedium","filePreviewImageIcon","spacingHorizontalXS","filePreviewContent","uploadFilesButton","fileUploadError","colorPaletteRedBackground3","FILE_ERROR_TYPES","message","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","includes","split","errorType","formatFileSize","bytes","decimals","arguments","dm","sizeUnitIndex","log","fileSize","getLocalizedFileSizeTextsBySize","formatDecimal","pow","maximumFractionDigits","minimumFractionDigits","uploadFiles","_x","_uploadFiles","apply","_asyncToGenerator","_regeneratorRuntime","mark","_callee2","filesToUpload","uploadFile","updatedFiles","wrap","_context2","prev","next","_callee","_context","reject","shouldReject","random","setTimeout","Error","uploaded","t0","abrupt","stop","_x2","all","sent","FilePreview","progress","onDeleteFile","uploadTried","Tooltip","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","error","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","panel","panelBody","SuggestionLoadingSkeleton","Skeleton","animation","SkeletonItem","SuggestionPanel","loading","suggestions","Sparkle20Regular","TagGroup","suggestion","InteractionTag","InteractionTagPrimary","useTaglinesStyles","body","loadingItem","taglineItem","taglineItemInput","spacingVerticalXXS","colorNeutralForeground3","TaglinesLoadingSkeleton","shape","TaglineItem","tagline","onDelete","isDeleteDisabled","maxAllowedCharacters","inputId","useId","autoFocus","ev","align","a","Delete24Regular","Taglines","onChangeTaglines","maxAllowedTaglines","maxAllowedCharactersPerTagline","isAddTaglineButtonDisabled","newTaglines","handleDeleteTagline","substring","handleChangeTagline","Add20Regular","defaultFonts","Label","TextAssetType","Typeface","Weight","helpTopic","helpLabel","overrideFontWeights","useFontsSelectorStyles","sectionContainer","fontsContainer","fontSelectContainer","fontSelect","fontWeightSelect","fontSelectContainerHeader","defaultFont","fontFamilies","defaultFontWeight","FontSelector","font","onChangeFont","onChangeWeight","Body1Stronger","HelpButton","topic","FontsFamilySelector","FontsWeightSelector","selectClassName","FontsSelector","onChangeFonts","fontsToRender","foundFont","handleChangeFont","selectedFont","updatedFonts","Body1Strong","listPanel","borderRadiusLarge","strokeWidthThin","colorNeutralStroke2","subtitle2","addBtn","actionBtns","borderRadiusSmall","list","listStyleType","getSkeletonStyles","row","colorNeutralStencil1","onEdit","onRemove","imageData","showEditBtn","showActionBtn","setShowActionBtn","onMouseEnter","onMouseLeave","ThumbnailUrl","ListSkeleton","fill","ListPanel","subTitle","isLoading","headerProps","onAdd","displayedImages","renderHelpBubble","FormCard","FormCardDefaultHeader","contentAfter","FormCardBody","idx","Id","buttonWrapper","aspectRatio","imageEditorContainer","shadow2","spinner","LogoFormat","BrandKitLogoEditPanel","isOpen","dismiss","format","minLogoSize","lightBackground","hasLandScapeLimit","hasSquareLimit","showBackgroundSettings","darkBackground","cropSettings","setAspectRatio","useInLightBackground","setUseInLightBackground","useInDarkBackground","setUseInDarkBackground","currentCropSettings","setCurrentCropSettings","MinLogoSize","maxCropHeight","Height","landscapeEnabled","Width","sqaureEnabled","isValid","updateAspectRation","SourceX","SourceWidth","SourceHeight","useClarityTags","ClarityTags","LaunchedAdsStudio","EditBrandKitLogo","onRenderFooterContent","AdsStudioPanelContainer","headerText","RadioGroup","Radio","ImageCropWithBoundingBox","baseImage","onCropSettingsChanged","minCropSize","Spinner","Checkbox","ImageListElement","maxLimit","maxSquareLogosLimit","maxLandscapeLogosLimit","elementType","contentBefore","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","Name","Type","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","dismissible","TagPicker","onOptionSelect","TagPickerControl","expandIcon","AddSquareRegular","TagPickerInput","TagPickerList","TagPickerOption","Accordion","collapsible","AccordionItem","AccordionHeader","expandIconPosition","AccordionPanel","AddRegular","relationship","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","onUpdateColor","colorId","colorObj","str","HexCode","updatePalette","onDeleteColor","colorid","onUpdateFonts","maxLogosLimit","MAX_LANDSCAPE_LOGOS","maxImagesLimit","classNames","BrandKitImageListElement","BrandKitLogoIconSVG","ColorPicker","maxColors","onUpdate","paletteData","ImageRegular","BrandKitFontsSelector","TabValues","BrandKitPage","imageEditService","brandKitPagePerfMarker","rest","setLoading","selectedTab","setSelectedTab","onTabSelect","response","getBrandKits","isBrandKitUIPhase2Enabled","BrandKitUIPhase2","BrandKitPageBanner","TabList","selectedValue","Tab","Component","BrandKitPageComponent","useTemplateImageStyles","flexColumn","templateWithCaption","darkGrayText","grayText","useTemplateGridStyles","gridContainer","skeletonContainer","filtersRow","filterButton","TemplateImageCard","templateGroupId","templateAttributes","setClickedTemplate","onAction","Caption1Strong","templateGroupName","Caption2","_templateAttributes$a","assetCounts","logoCount","imageCount","textAreaCount","result","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","ToastComponent","dismissToast","toastId","Toast","ToastTitle","ToastTrigger","ToastBody","ToastFooter","Link","href","gotoCampaignUIPage","subpath","useNotify","dispatchToast","useToast","intent","timeout","politeness","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","positioning","MoreVertical20Regular","menuItem","MenuItem","AdsStudioFoldersGridCell","AdsStudioFoldersGridCellWithContextMenu","useModalStyle","nameInput","EditFolderNameModalImp","onComplete","onCancel","errorText","setErrorText","initName","setName","validate","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","withArrow","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","selected","selectItem","onSelectCell","onDrag","currentListItem","document","getElementById","onFolderClick","FoldersGridCell","onSelect","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","shouldShowExternalLink","URLSearchParams","location","get","VideosPageComponent","videoPagePerfMarker","minDurationFilter","maxDurationFilter","isVideoDurationBoundaryIncluded","minVideoDuration","maxVideoDuration","CSMLVideoDuration","unlimited","VideoPageTopBannerComponent","VideosFilterBar","defaultMinVideoDuration","defaultMaxVideoDuration","useTemplateVideoStyles","templateBody","VideoTemplateCard","lastTriggerRef","listItemRef","currentRef","LocalizedTemplateName","TemplateName","TemplateThumbnailUrl","templateTagsMapping","premiumStreaming","onlineVideo","getTitleMessage","tags","videoContainer","setCopilotFinalUrl","handleOpenChange","loadClipchampPlayer","finalUrlError","setFinalUrlError","ClipchampPlayer","videoUrl","TemplatePreviewUrl","poster","seconds","Duration","LocalizedTemplateDescription","TemplateDescription","dropdownOptionAriaLabel","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","campaignId","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","root","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","isSelected","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","searchParams","addSearchParams","w","h","toString","stopPropagation","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","onSelectAddImages","firstNode","querySelector","lastNode","handleTabKey","shiftKey","handleShiftTabKey","addEventListener","removeEventListener","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","limit","processVideoSizeLimitError","errorList","AddVideoPanel","selectedVideos","setSelectedVideos","uploadVideoByUrl","videos","AddVideoPanelContent","usePanelStyles","messageBar","usePreviewStyles","imageItemBox","UploadFilesPanel","globalLegacyI18n","isUploadImageUpscaleEnabled","previewClasses","errors","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","prevState","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","generateMultipleBackgrounds","generateMultipleImageBackgrounds","_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","tooltip","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","contains","ObjectSelectionImageView","useExampleImageListStyles","exampleImageList","useExampleImageCellStyles","exampleImageCell","ExampleImageList","withOverridableStyles","ExampleImageListWithoutStyle","ExampleImageCell","ExampleImageCellWithoutStyle","ViewAllIcon","ViewLessIcon","ViewMode","HistoryImagesViewLess","historyList","selectedHistoryGroup","onClickViewAll","latestGeneratedImages","imageUrlList","imageIndex","groupIndex","HistoryImagesViewAll","onClickViewLess","renderExampleImageList","index1","promptValue","index2","getGenerationHistoryListStyles","paddleBtn","colorNeutralForeground2BrandHover","paddleBtnRight","historyListRoot","colorBrandForeground1","historyListRootV2","paddingButtom","HistoryListImpl","selectedIndex","onSelectHistory","keyCode","History20Regular","HistoryListImages","GenerationHistoryList","HistoryListImplV2","viewMode","setViewModwe","GenerationHistoryListV2","useGenerateButtonStyles","generateButton","disabledGenerateButton","StartIcon","DisabledStartIcon","GenerateButton","disabledButton","onClickGenerateButton","PromptControlV2","generate","isGenerating","onSelectExampleImage","promptControlHeight","setPromptControlHeight","exampleImageId","labelId","containerHeight","PromptEditorV2","disabledText","MAX_PROMPT_LENGTH","PromptControl","selectedHistoryIndex","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","isMultiBackgroundGenerationEnabled","dismissNotification","goToStaticImage","goToObjectSelection","wrappedUpdateSubject","setHistoryList","historyData","pv","onSelectHistoryBackground","addNewHistory","pPromptValue","generatedImageUrl","newHistoryList","unshift","addNewHistoryBackgrounds","generatedImages","generatedImage","imgUrl","gotoDisallowedContent","generateMultiBackgrounds","curGeneratedImageUrl","imageGroup","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","hideEyeDropper","logSetColorHelper","sampleColor","ed","newColor","EyeDropper","sRGBHex","onEyeDropperKeyDown","debouncedDraw","selectedColorId","suggestedColorId","Eyedropper20Regular","getColorFromString","colorObject","alphaType","showPreview","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","totalCount","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","renderItem","CustomComponent","_ref2$CustomComponent","CustomComponentOptions","promptInputLabel","_ref4$CustomComponent","_ref4$valid","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","videoTemplateUIEnabled","isAIGenerated","VideoSourceType","AIGenerated","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","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","selectedItem","CustomTab","LoadingSpinner","containerClass","LeafTreeItem","level","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","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":""}