{"version":3,"file":"static/js/application.async.landing~86378a44.704318b5.chunk.js","mappings":"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","sources":["../../../../ads-studio/packages/ads-studio-app-shared-components/src/asset-images/video-icon.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/asset-images/sparkle-svg-icon.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/asset-images/hollow-sparkle-svg-icon.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/asset-images/black-sparkle-svg-icon.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/asset-images/info-sparkle-svg-icon.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/asset-images/squareDismiss-svg-icon.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/asset-images/spinnerBase-svg-icon.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/asset-images/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/model/constants.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/model/filter-type.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/model/get-asset-type-options.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/model/get-time-description.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/model/convert-time-duration.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/model/get-date-added-options.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/model/get-import-source-options.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/model/get-image-sorting-options.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/model/get-asset-source-options.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/model/edit-image-utils.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/model/AI-prompt-example/sample.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/model/merge-task-updates.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/model/use-clarity-hook.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/model/utils.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/add-asset-entry-card/style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/add-asset-entry-card/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-panel-container/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-spinner/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/styles/tiles-grid-cell-action-button-style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/grid-cells/tiles-grid-cell-action-button.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/theme/ads-studio-theme-provider.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/theme/with-ads-studio-styles.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/styles/tiles-grid-cell-overlay-style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/grid-cells/tiles-grid-cell-overlay.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/styles/tiles-grid-cell-card-style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/grid-cells/tiles-grid-cell-card.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/grid-cells/tiles-grid-cell-decorative-icon.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/styles/tiles-grid-cell-decorative-icon.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/styles/tiles-grid-cell-decorative-label.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/grid-cells/tiles-grid-cell-decorative-label.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/grid-cells/tiles-grid-cell-deletion-button-decorator.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/styles/tiles-grid-cell-deletion-button-decorator-style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/styles/tiles-grid-cell-image.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/grid-cells/tiles-grid-cell-image.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/styles/tiles-grid-cell-selection-decorator-style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/grid-cells/tiles-grid-cell-selection-decorator.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/grid-cells/tiles-grid-loading-cell.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/folder-icon-component/style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/folder-icon-component/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/styles/tiles-grid-cell-drag-decorator-style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/grid-cells/tiles-grid-cell-drag-decorator.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/styles/tiles-grid-cell-drop-decorator-style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/grid-cells/tiles-grid-cell-drop-decorator.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/default-grid-config.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/tiles-grid.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/styles/tiles-grid-style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/multi-selection-grid.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/styles/section-tiles-grid-style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/section-tiles-grid.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/text-with-highlight/styles.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/text-with-highlight/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-asset-grid-cell/shared-cell-style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-asset-grid-cell/folders-grid-cell/style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-asset-grid-cell/folders-grid-cell/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-asset-grid-cell/image-assets-grid-cell/style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-asset-grid-cell/image-assets-grid-cell/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-asset-grid-cell/assets-grid-cell/grid-cell-factory.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-asset-grid-cell/assets-grid-cell/style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-asset-grid-cell/assets-grid-cell/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/video-component/style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/video-component/video.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/video-component/video-placeholder.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-asset-grid-cell/video-assets-grid-cell/style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-asset-grid-cell/video-assets-grid-cell/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-asset-grid-cell/image-panel-grid-cell/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/panel-image-grid/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/performance-filter-bar/styles.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/performance-filter-bar/performance-editing-filter-bar.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/performance-filter-bar/view-all-filters-button.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/performance-filter-bar/performance-readonly-filter-bar.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/add-video-panel-content/video-playback-view.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/add-video-panel-content/item-placeholder-box-view.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/folder-uploading-preview/styles.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/folder-uploading-preview/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/file-uploading-preivew/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/add-video-panel-content/video-load-preview.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/add-video-panel-content/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/stock-image-panel-content/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/invest-image-panel-content/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/invest-video-panel-content/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/website-image-panel-content/domain-input-view.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/website-image-panel-content/subdomain-input-view.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/website-image-panel-content/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/website-image-panel-content/useWebsiteImages.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-breadcrumb/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-library-page-content/styles/empty-view-style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/empty-view/library-page-empty-view.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/new-dropdown.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/image-size.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/utils/date-utils.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/simple-date-range-picker/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/utils/upload-asset-limit-error.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/utils/image-utils.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/utils/video-utils.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/utils/get-error-string.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/utils/processor-util.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/utils/upload-asset-error.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/utils/folder-functions.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/utils/upload-folder-error.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/services/task-poller.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/services/data-service/folder-reducer.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/error-handling/ads-studio-error-base.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/error-handling/service-error-processors.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/services/data-service/use-folders.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/services/data-service/use-image-repo-methods.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/services/data-service/use-video-repo-methods.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/services/data-service/use-ai-generated-images.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/services/data-service/asset-with-folders-data-service.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/services/data-service/use-folder-path-tree.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/services/data-service/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/services/data-service-ex/base/asset-window.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/services/data-service-ex/base/assets-window-manager.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/services/data-service-ex/base/assets-reducer-base.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/services/data-service-ex/base/use-assets-service-base.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/services/data-service-ex/use-basic-assets-services.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/services/data-service-ex/use-edit-image-service.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/services/data-service-ex/use-video-task-poller.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/utils/image-cropping-task-status-poller.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/utils/video-task-status-poller.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/utils/with-asset-task-status-poller.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/date-added.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/search-box.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/asset-type.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/sort-by.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/asset-source.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/video-duration.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/import-source.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/video-duration-scrollbar.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/filter-toggle.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/state/date-added-state.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/context/filter-context.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/filter-bar-state.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/state/filter-toggle-state.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/state/asset-type-state.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/state/search-box-state.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/state/sort-by-state.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/state/asset-source-state.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/state/import-source-state.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/state/image-size-state.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/state/video-duration-state.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/filter-bar.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/context/filter-provider.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/performance-filter-components.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/folder-path-breadcrumb/style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/folder-path-breadcrumb/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-library-page-content/styles/library-page-style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/hidden-div-for-announce/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-library-page-content/sections-utils.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-library-page-content/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/confirm-dialog/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/generate-image/context/generate-image-context.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/generate-image/context/generate-image-context-provider.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/loading-indicator/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/example-image/example-prompt.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/example-image/example-image-list.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/example-image/example-image-cell.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/prompt-editor/prompt-editor.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/object-selection/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/hooks/use-upload-asset.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/hooks/use-validate-asset.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/hooks/use-customized-handler-options.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/hooks/use-upload-files.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/js-data/init-cc-js-data.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/js-data/with-cc-js-data-context-provider.js"],"sourcesContent":["export const videoIcon = \"data:image/svg+xml,%3Csvg width='14' height='12' viewBox='0 0 14 12' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1 3C1 2.17157 1.67157 1.5 2.5 1.5H8.5C9.32843 1.5 10 2.17157 10 3V9C10 9.82843 9.32843 10.5 8.5 10.5H2.5C1.67157 10.5 1 9.82843 1 9V3ZM2.5 0.5C1.11929 0.5 0 1.61929 0 3V9C0 10.3807 1.11929 11.5 2.5 11.5H8.5C9.88071 11.5 11 10.3807 11 9V8.49943L12.7999 9.84997C13.2943 10.221 14 9.86819 14 9.25008V2.75496C14 2.13743 13.2954 1.78451 12.8009 2.15432L11 3.50093V3C11 1.61929 9.88071 0.5 8.5 0.5H2.5ZM11 4.74959L13 3.25407V8.74993L11 7.24921V4.74959Z' fill='white'/%3E%3C/svg%3E%0A\";\r\n","import React from 'react';\r\n\r\nexport const SparkeSVGIcon = () => (\r\n  <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n    <path d=\"M8.66438 15.7346C8.90871 15.9076 9.20094 16.0001 9.50032 15.999V15.995C9.7826 15.9956 10.0588 15.9133 10.2948 15.7583C10.5307 15.6033 10.7159 15.3824 10.8273 15.123L11.4403 13.259C11.5819 12.8367 11.8198 12.4532 12.1351 12.1387C12.4505 11.8242 12.8347 11.5874 13.2573 11.447L15.0353 10.869C15.3217 10.7684 15.5691 10.58 15.7422 10.3307C15.9154 10.0813 16.0055 9.78372 15.9997 9.48022C15.994 9.17671 15.8926 8.88274 15.7102 8.64015C15.5277 8.39756 15.2733 8.2187 14.9833 8.12901L13.2283 7.55901C12.8038 7.41775 12.418 7.17942 12.1018 6.86296C11.7855 6.5465 11.5473 6.16063 11.4063 5.73601L10.8283 3.95901C10.7275 3.67599 10.5411 3.43139 10.2949 3.2592C10.0486 3.08702 9.75492 2.9958 9.45449 2.99822C9.15406 3.00064 8.86184 3.09657 8.61844 3.2727C8.37504 3.44883 8.19255 3.6964 8.09632 3.98101L7.51332 5.77301C7.37273 6.18528 7.14037 6.56024 6.83376 6.86962C6.52715 7.179 6.1543 7.41472 5.74332 7.55901L3.96632 8.13001C3.75494 8.20394 3.56365 8.32601 3.40757 8.48659C3.25149 8.64716 3.1349 8.84184 3.067 9.05523C2.9991 9.26862 2.98176 9.49488 3.01636 9.71612C3.05095 9.93736 3.13652 10.1475 3.26632 10.33C3.44321 10.579 3.6941 10.7659 3.98332 10.864L5.73732 11.433C6.16295 11.5754 6.54951 11.8151 6.86632 12.133C6.95138 12.2174 7.03088 12.3073 7.10432 12.402C7.30349 12.6598 7.45735 12.9496 7.55932 13.259L8.13732 15.034C8.23579 15.3167 8.42004 15.5617 8.66438 15.7346ZM16.331 20.782C16.1405 20.6462 15.9971 20.4543 15.921 20.233L15.593 19.226C15.5292 19.0345 15.4221 18.8603 15.28 18.717C15.1375 18.5741 14.9635 18.4666 14.772 18.403L13.781 18.08C13.5506 18.0027 13.3507 17.8542 13.21 17.656C13.0727 17.4638 12.9993 17.2333 13 16.997C13.0003 16.7592 13.0748 16.5275 13.213 16.334C13.3503 16.1395 13.5456 15.9935 13.771 15.917L14.777 15.591C14.964 15.5246 15.1333 15.4163 15.272 15.2743C15.4107 15.1324 15.515 14.9605 15.577 14.772L15.901 13.78C15.9772 13.5558 16.1212 13.3608 16.3131 13.2219C16.505 13.0831 16.7352 13.0072 16.9721 13.0049C17.2089 13.0026 17.4406 13.074 17.6351 13.209C17.8297 13.3441 17.9774 13.5363 18.058 13.759L18.387 14.773C18.4514 14.9631 18.559 15.1357 18.7012 15.2773C18.8435 15.4188 19.0166 15.5255 19.207 15.589L20.199 15.912C20.4277 15.9835 20.628 16.1252 20.7717 16.317C20.9153 16.5088 20.9949 16.7409 20.9992 16.9804C21.0036 17.22 20.9324 17.4549 20.7957 17.6517C20.6591 17.8485 20.464 17.9973 20.238 18.077L19.224 18.406C19.0339 18.4708 18.8612 18.5782 18.719 18.72C18.5767 18.8628 18.4695 19.0367 18.406 19.228L18.084 20.217C18.0065 20.4473 17.8576 20.647 17.659 20.787C17.467 20.9251 17.2365 20.9992 17 20.999C16.7597 20.999 16.5256 20.923 16.331 20.782Z\" fill=\"url(#paint0_linear_1620_272407)\" />\r\n    <defs>\r\n      <linearGradient id=\"paint0_linear_1620_272407\" x1=\"2.99902\" y1=\"2.99817\" x2=\"20.9999\" y2=\"20.9986\" gradientUnits=\"userSpaceOnUse\">\r\n        <stop stopColor=\"#3D07D5\" />\r\n        <stop offset=\"0.450521\" stopColor=\"#213AD5\" />\r\n        <stop offset=\"1\" stopColor=\"#0078D4\" />\r\n      </linearGradient>\r\n    </defs>\r\n  </svg>\r\n);\r\n","import React from 'react';\r\n\r\nexport const HollowSparkleSVGIcon = () => (\r\n  <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\">\r\n    <g id=\"Sparkle\">\r\n      <path id=\"Shape\" d=\"M8.66438 15.7345C8.90871 15.9075 9.20094 15.9999 9.50032 15.9989V15.9949C9.7826 15.9955 10.0588 15.9132 10.2948 15.7582C10.5307 15.6031 10.7159 15.3822 10.8273 15.1229L11.4403 13.2589C11.5819 12.8366 11.8198 12.4531 12.1351 12.1386C12.4505 11.8241 12.8347 11.5873 13.2573 11.4469L15.0353 10.8689C15.3217 10.7683 15.5691 10.5799 15.7422 10.3305C15.9154 10.0812 16.0055 9.7836 15.9997 9.48009C15.994 9.17659 15.8926 8.88262 15.7102 8.64003C15.5277 8.39744 15.2733 8.21858 14.9833 8.12889L13.2283 7.55889C12.8038 7.41763 12.418 7.1793 12.1018 6.86283C11.7855 6.54637 11.5473 6.1605 11.4063 5.73589L10.8283 3.95889C10.7275 3.67586 10.5411 3.43127 10.2949 3.25908C10.0486 3.0869 9.75492 2.99567 9.45449 2.99809C9.15406 3.00051 8.86184 3.09645 8.61844 3.27258C8.37504 3.44871 8.19255 3.69628 8.09632 3.98089L7.51332 5.77289C7.37273 6.18515 7.14037 6.56012 6.83376 6.8695C6.52715 7.17888 6.1543 7.4146 5.74332 7.55889L3.96632 8.12989C3.75494 8.20382 3.56365 8.32589 3.40757 8.48647C3.25149 8.64704 3.1349 8.84172 3.067 9.05511C2.9991 9.2685 2.98176 9.49475 3.01636 9.716C3.05095 9.93724 3.13652 10.1474 3.26632 10.3299C3.44321 10.5789 3.6941 10.7657 3.98332 10.8639L5.73732 11.4329C6.16295 11.5753 6.54951 11.815 6.86632 12.1329C6.95138 12.2173 7.03088 12.3072 7.10432 12.4019C7.30349 12.6597 7.45735 12.9495 7.55932 13.2589L8.13732 15.0339C8.23579 15.3166 8.42004 15.5615 8.66438 15.7345ZM8.29032 11.4849C8.17882 11.3392 8.05754 11.2012 7.92732 11.0719H7.93032C7.44744 10.5886 6.8585 10.2247 6.21032 10.0089L4.61032 9.50089L6.22132 8.97689C6.85885 8.75615 7.43708 8.39176 7.91132 7.91189C8.38349 7.42897 8.73949 6.84487 8.95232 6.20389L9.46732 4.62189L9.98332 6.20889C10.1987 6.85585 10.5623 7.44351 11.0452 7.92497C11.528 8.40643 12.1167 8.76837 12.7643 8.98189L14.3833 9.50389L12.7943 10.0189C12.1479 10.2338 11.5606 10.5965 11.079 11.0782C10.5975 11.56 10.2349 12.1474 10.0203 12.7939L9.50532 14.3759L8.99032 12.7909C8.83308 12.3189 8.59634 11.8772 8.29032 11.4849ZM16.331 20.7819C16.1405 20.6461 15.9971 20.4541 15.921 20.2329L15.593 19.2259C15.5292 19.0344 15.4221 18.8602 15.28 18.7169C15.1375 18.574 14.9635 18.4664 14.772 18.4029L13.781 18.0799C13.5506 18.0026 13.3507 17.8541 13.21 17.6559C13.0727 17.4636 12.9993 17.2331 13 16.9969C13.0003 16.7591 13.0748 16.5274 13.213 16.3339C13.3503 16.1394 13.5456 15.9934 13.771 15.9169L14.777 15.5909C14.964 15.5245 15.1333 15.4162 15.272 15.2742C15.4107 15.1322 15.515 14.9604 15.577 14.7719L15.901 13.7799C15.9772 13.5557 16.1212 13.3606 16.3131 13.2218C16.505 13.0829 16.7352 13.0071 16.9721 13.0048C17.2089 13.0025 17.4406 13.0738 17.6351 13.2089C17.8297 13.344 17.9774 13.5362 18.058 13.7589L18.387 14.7729C18.4514 14.963 18.559 15.1356 18.7012 15.2771C18.8435 15.4187 19.0166 15.5254 19.207 15.5889L20.199 15.9119C20.4277 15.9834 20.628 16.1251 20.7717 16.3169C20.9153 16.5086 20.9949 16.7408 20.9992 16.9803C21.0036 17.2199 20.9324 17.4547 20.7957 17.6516C20.6591 17.8484 20.464 17.9972 20.238 18.0769L19.224 18.4059C19.0339 18.4707 18.8612 18.5781 18.719 18.7199C18.5767 18.8627 18.4695 19.0366 18.406 19.2279L18.084 20.2169C18.0065 20.4472 17.8576 20.6469 17.659 20.7869C17.467 20.9249 17.2365 20.9991 17 20.9989C16.7597 20.9989 16.5256 20.9229 16.331 20.7819ZM15.3004 16.999C15.6934 17.1386 16.0501 17.3646 16.3442 17.6602C16.6384 17.956 16.8625 18.314 17 18.7079C17.1389 18.3158 17.3636 17.9597 17.6577 17.6656C17.9518 17.3715 18.3079 17.1468 18.7 17.0079C18.3016 16.8685 17.9396 16.6412 17.641 16.3429C17.3459 16.049 17.1207 15.6926 16.982 15.2999C16.8439 15.6898 16.6213 16.0444 16.3302 16.3383C16.0397 16.6316 15.6881 16.8572 15.3004 16.999Z\" />\r\n    </g>\r\n  </svg>\r\n);\r\n","import React from 'react';\r\n\r\nexport const BlackSparkleSVGIcon = () => (\r\n  <svg width=\"29\" height=\"29\" viewBox=\"0 0 29 29\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n    <g id=\"Icon\">\r\n      <path id=\"Shape\" d=\"M10.3246 16.6522C10.5509 16.8128 10.8217 16.8989 11.0992 16.8985C11.3777 16.8996 11.6495 16.8134 11.8764 16.652C12.1037 16.4842 12.2759 16.2525 12.3709 15.9864L12.874 14.4393C12.9962 14.0745 13.2011 13.743 13.4729 13.4707C13.7434 13.1996 14.0736 12.9955 14.4371 12.8747L16.0118 12.3629C16.2716 12.2702 16.4965 12.0996 16.6556 11.8742C16.8151 11.6489 16.9007 11.3796 16.9007 11.1036C16.9007 10.8275 16.8151 10.5582 16.6556 10.3329C16.4837 10.0931 16.2392 9.91516 15.9582 9.82539L14.4081 9.32369C14.0433 9.20319 13.7118 8.99911 13.4399 8.72772C13.168 8.45633 12.9633 8.12514 12.8421 7.76059L12.3303 6.18879C12.2385 5.92888 12.0683 5.70391 11.8431 5.54499C11.6156 5.38817 11.3458 5.3042 11.0695 5.3042C10.7932 5.3042 10.5234 5.38817 10.2959 5.54499C10.0643 5.70809 9.8906 5.94069 9.8 6.20909L9.28525 7.78959C9.16389 8.14349 8.96401 8.46533 8.70059 8.73101C8.43717 8.99668 8.11705 9.1993 7.7642 9.32369L6.1924 9.83264C5.92982 9.92544 5.70272 10.0978 5.54277 10.3258C5.38281 10.5538 5.29795 10.826 5.30002 11.1045C5.3021 11.383 5.391 11.6539 5.55434 11.8795C5.71768 12.105 5.94732 12.274 6.21125 12.3629L7.7584 12.866C8.12411 12.9885 8.45624 13.1946 8.72845 13.4678C8.80201 13.5406 8.87079 13.6181 8.93435 13.6998C9.10597 13.9212 9.23838 14.1703 9.32585 14.4364L9.83625 16.0024C9.92756 16.2645 10.0982 16.4916 10.3246 16.6522ZM17.6748 22.4839C17.872 22.6234 18.1075 22.6984 18.349 22.6985C18.588 22.6963 18.8204 22.6203 19.0146 22.481C19.2169 22.3382 19.3691 22.1352 19.4496 21.901L19.8092 20.7961C19.8863 20.5664 20.0153 20.3575 20.1862 20.1856C20.3564 20.0138 20.5652 19.885 20.7952 19.8101L21.9146 19.4447C22.1433 19.3657 22.3415 19.2171 22.4815 19.0198C22.5879 18.8705 22.6574 18.698 22.6842 18.5166C22.711 18.3352 22.6945 18.1501 22.6359 17.9763C22.5773 17.8026 22.4784 17.6452 22.3472 17.517C22.216 17.3889 22.0563 17.2937 21.8812 17.2392L20.7734 16.8782C20.5441 16.802 20.3357 16.6735 20.1646 16.5029C19.9935 16.3322 19.8644 16.1242 19.7874 15.8951L19.422 14.7728C19.3433 14.5448 19.1946 14.3474 18.9972 14.2087C18.8493 14.103 18.6785 14.0335 18.4988 14.0058C18.319 13.9782 18.1353 13.9932 17.9624 14.0496C17.7895 14.1061 17.6324 14.2024 17.5036 14.3308C17.3748 14.4592 17.278 14.616 17.221 14.7887L16.8628 15.8936C16.787 16.1222 16.66 16.3305 16.4916 16.5026C16.3255 16.6712 16.1232 16.7996 15.9 16.8782L14.7748 17.245C14.6045 17.3043 14.4503 17.4024 14.3245 17.5316C14.1987 17.6608 14.1048 17.8176 14.0502 17.9894C13.9956 18.1613 13.9818 18.3435 14.0099 18.5216C14.038 18.6997 14.1073 18.8688 14.2122 19.0155C14.3546 19.2182 14.5577 19.3706 14.7922 19.4505L15.8986 19.8086C16.1289 19.8861 16.3383 20.0156 16.5104 20.1871C16.6819 20.3585 16.8101 20.5683 16.8846 20.799L17.2514 21.9213C17.3308 22.1482 17.4788 22.3448 17.6748 22.4839Z\" fill=\"#242424\" />\r\n    </g>\r\n  </svg>\r\n);\r\n","import React from 'react';\r\n\r\nexport const InfoSparkleSVGIcon = () => (\r\n  <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n    <path d=\"M15.226 1.35305L14.8777 0.282251C14.8486 0.19972 14.7946 0.128252 14.7231 0.0776997C14.6516 0.0271473 14.5662 0 14.4786 0C14.391 0 14.3056 0.0271473 14.2341 0.0776997C14.1626 0.128252 14.1085 0.19972 14.0794 0.282251L13.7311 1.35305C13.625 1.67631 13.4454 1.97065 13.2066 2.21307C12.9677 2.45549 12.6759 2.63941 12.3541 2.75044L11.2825 3.09845C11.1999 3.12757 11.1284 3.18157 11.0778 3.25301C11.0272 3.32445 11 3.40981 11 3.49733C11 3.58484 11.0272 3.6702 11.0778 3.74164C11.1284 3.81308 11.1999 3.86708 11.2825 3.8962L12.3541 4.24421C12.6292 4.33588 12.883 4.48064 13.1014 4.66973C13.1421 4.70496 13.1815 4.74173 13.2197 4.77999C13.4202 4.98116 13.5796 5.21872 13.6897 5.47932C13.7128 5.53422 13.7338 5.59014 13.7525 5.64696L14.1008 6.71775C14.1271 6.79215 14.1736 6.85755 14.2349 6.90675C14.2416 6.91213 14.2484 6.91732 14.2555 6.92231C14.327 6.97286 14.4124 7.00001 14.5 7.00001C14.5876 7.00001 14.673 6.97286 14.7445 6.92231C14.816 6.87175 14.87 6.80029 14.8992 6.71775L15.2475 5.64696C15.3558 5.32141 15.5385 5.0256 15.7813 4.78302C16.0241 4.54044 16.3201 4.35778 16.6459 4.24956L17.7175 3.90155C17.8001 3.87244 17.8716 3.81844 17.9222 3.747C17.9728 3.67556 18 3.5902 18 3.50268C18 3.41516 17.9728 3.3298 17.9222 3.25836C17.8716 3.18692 17.8001 3.13292 17.7175 3.10381L17.6961 3.09845L16.6245 2.75044C16.2987 2.64223 16.0026 2.45957 15.7599 2.21699C15.5171 1.97441 15.3343 1.67859 15.226 1.35305Z\" fill=\"#212121\" />\r\n    <path d=\"M19.0175 7.96461L19.7829 8.21319L19.7982 8.21701C19.8572 8.23781 19.9083 8.27638 19.9445 8.32741C19.9806 8.37844 20 8.43941 20 8.50192C20 8.56443 19.9806 8.62541 19.9445 8.67643C19.9083 8.72746 19.8572 8.76603 19.7982 8.78683L19.0328 9.03541C18.8001 9.11271 18.5886 9.24317 18.4152 9.41645C18.2418 9.58972 18.1113 9.80101 18.0339 10.0335L17.7851 10.7984C17.7643 10.8574 17.7257 10.9084 17.6746 10.9445C17.6236 10.9806 17.5626 11 17.5 11C17.4374 11 17.3764 10.9806 17.3254 10.9445C17.2743 10.9084 17.2357 10.8574 17.2149 10.7984L17.2141 10.796L16.9661 10.0335C16.8893 9.80031 16.7589 9.58824 16.5855 9.41428C16.412 9.24032 16.2003 9.10926 15.9672 9.03158L15.2018 8.78301C15.1428 8.76221 15.0917 8.72364 15.0555 8.67261C15.0194 8.62158 15 8.56061 15 8.4981C15 8.43558 15.0194 8.37461 15.0555 8.32358C15.0917 8.27255 15.1428 8.23398 15.2018 8.21319L15.9672 7.96461C16.1971 7.8853 16.4055 7.75392 16.5761 7.58077C16.7467 7.40762 16.875 7.19737 16.9508 6.96647L17.1996 6.20161C17.2204 6.14266 17.259 6.09161 17.31 6.05551C17.3611 6.0194 17.4221 6.00001 17.4847 6.00001C17.5473 6.00001 17.6083 6.0194 17.6593 6.05551C17.7104 6.09161 17.749 6.14266 17.7698 6.20161L18.0186 6.96647C18.0959 7.199 18.2265 7.4103 18.3999 7.58357C18.5733 7.75684 18.7848 7.88731 19.0175 7.96461Z\" fill=\"#212121\" />\r\n    <path d=\"M16.7727 11.776C16.9319 11.8844 17.1132 11.956 17.3036 11.9858C17.4534 12.0092 17.6058 12.0061 17.7538 11.9771C16.8737 15.4392 13.7359 18 10 18C5.58172 18 2 14.4183 2 10C2 5.58172 5.58172 2 10 2C10.3963 2 10.7859 2.02882 11.1668 2.08448L10.9741 2.147C10.687 2.24346 10.4377 2.42828 10.2621 2.675C10.1905 2.77592 10.1327 2.88541 10.0897 3.00056C10.0598 3.00019 10.0299 3 10 3C6.13401 3 3 6.13401 3 10C3 13.866 6.13401 17 10 17C13.2523 17 15.9866 14.782 16.7727 11.776Z\" fill=\"#212121\" />\r\n    <path d=\"M10.5841 9.21136C10.5841 8.88877 10.3226 8.62727 9.99999 8.62727C9.67741 8.62727 9.4159 8.88877 9.4159 9.21136V13.8841C9.4159 14.2067 9.67741 14.4682 9.99999 14.4682C10.3226 14.4682 10.5841 14.2067 10.5841 13.8841V9.21136Z\" fill=\"#212121\" />\r\n    <path d=\"M10.875 6.87502C10.875 7.35827 10.4832 7.75003 10 7.75003C9.51675 7.75003 9.125 7.35827 9.125 6.87502C9.125 6.39176 9.51675 6 10 6C10.4832 6 10.875 6.39176 10.875 6.87502Z\" fill=\"#212121\" />\r\n  </svg>\r\n);\r\n","import React from 'react';\r\nimport squareDismissImage from './squareDismiss.svg';\r\n\r\nexport const SquareDismissIcon = ({ i18n }) => (<img\r\n  src={squareDismissImage}\r\n  alt={i18n.getString(_TL_('Square Dismiss Icon'))}\r\n  width=\"20\"\r\n  height=\"20\"\r\n/>);\r\n","import React from 'react';\r\nimport spinnerBase from './spinnerBase.svg';\r\n\r\nexport const SpinnerIcon = ({ i18n }) => (<img\r\n  src={spinnerBase}\r\n  alt={i18n.getString(_TL_('spinner'))}\r\n  className=\"spinner-icon\"\r\n/>);\r\n","import CreateSVGIcon from './ad-studio-create-icon.svg';\r\nimport UploadSVGIcon from './ad-studio-upload-icon.svg';\r\nimport StockSVGIcon from './ad-studio-stock-icon.svg';\r\nimport InvestSVGIcon from './ad-studio-invest-icon.svg';\r\nimport PdfSVGIcon from './ad-studio-pdf-icon.svg';\r\nimport WarningSVGIcon from './ad-studio-warning-icon.svg';\r\nimport CreateManualBrandKitSVGIcon from './ad-studio-create-manual-icon.svg';\r\nimport WebsiteSVGIcon from './ad-studio-website-icon.svg';\r\nimport ImageEmptyViewSVG from './image-page-empty-view-image.svg';\r\nimport LibraryEmptyViewSVG from './library-page-empty-view-image.svg';\r\nimport VideoEmptyViewSVG from './video-page-empty-view-image.svg';\r\nimport AIWarningIconSource from './AIWarningIcon.png';\r\nimport ChooseImageSVG from './choose-image-icon.svg';\r\nimport LogoAssetsSvg from './logo-assets.svg';\r\nimport BrandKitLogoIconSVG from './ad-studio-brandkit-logo-icon.svg';\r\n\r\nexport const EntryCardSVGIcons = {\r\n  CreateSVGIcon,\r\n  UploadSVGIcon,\r\n  StockSVGIcon,\r\n  InvestSVGIcon,\r\n  PdfSVGIcon,\r\n  WebsiteSVGIcon,\r\n  WarningSVGIcon,\r\n  CreateManualBrandKitSVGIcon,\r\n  BrandKitLogoIconSVG,\r\n};\r\n\r\nexport { videoIcon } from './video-icon';\r\nexport { SparkeSVGIcon } from './sparkle-svg-icon';\r\nexport { HollowSparkleSVGIcon } from './hollow-sparkle-svg-icon';\r\nexport { BlackSparkleSVGIcon } from './black-sparkle-svg-icon';\r\nexport { InfoSparkleSVGIcon } from './info-sparkle-svg-icon';\r\nexport { SquareDismissIcon } from './squareDismiss-svg-icon';\r\nexport { SpinnerIcon } from './spinnerBase-svg-icon';\r\n\r\n\r\nexport const AIWarningIcon = AIWarningIconSource;\r\nexport const ChooseImageIcon = ChooseImageSVG;\r\nexport const LogoAssetsIcon = LogoAssetsSvg;\r\n\r\nexport const EmptyViewIcons = {\r\n  ImageEmptyViewSVG,\r\n  LibraryEmptyViewSVG,\r\n  VideoEmptyViewSVG,\r\n};\r\n","export { allowedVideoFileExtensions as supportedVideoExtensions } from '@bingads-webui-campaign-react/upload-file-picker';\r\n\r\nexport const CSMLAdTypeUsage = {\r\n  UsedIn: 'Used in',\r\n  NotUsedIn: 'Not used in',\r\n};\r\n\r\nexport const CSMLAdType = {\r\n  MMA: 'Multimedia ad',\r\n  Audience: 'Microsoft Advertising Network',\r\n  ImageExtension: 'Image extension',\r\n  PMax: 'Performance max',\r\n};\r\n\r\nexport const CSMLSortIcon = {\r\n  SortUp: 'SortUp',\r\n  SortDown: 'SortDown',\r\n};\r\n\r\nexport const CSMLSortBy = {\r\n  ImageName: 'Image name',\r\n  ImageNameDesc: 'Image name (Z-A)',\r\n  MostRecent: 'Most recent',\r\n  MostRecentAsc: 'Most recent asc',\r\n  LastCreated: 'Last created',\r\n  LastCreatedAsc: 'Last created asc',\r\n  TopRated: 'Top rated',\r\n\r\n  AssetIdAsc: 'Asset Id Asc',\r\n  AssetIdDesc: 'Asset Id Desc',\r\n\r\n  ClickAsc: 'Click Asc',\r\n  ClickDesc: 'Click Desc',\r\n  ClickPeriodAsc: 'Period Click Asc',\r\n  ClickPeriodDesc: 'Period Click Desc',\r\n  ClickChangeAsc: 'Click Change Asc',\r\n  ClickChangeDesc: 'Click Change Desc',\r\n  ClickChangePercentAsc: 'Click Change Percent Asc',\r\n  ClickChangePercentDesc: 'Click Change Percent Desc',\r\n\r\n  CTRAsc: 'CTR Asc',\r\n  CTRDesc: 'CTR Desc',\r\n  CTRPeriodAsc: 'Period CTR Asc',\r\n  CTRPeriodDesc: 'Period CTR Desc',\r\n  CTRChangeAsc: 'CTR Change Asc',\r\n  CTRChangeDesc: 'CTR Change Desc',\r\n  CTRChangePercentAsc: 'CTR Change Percent Asc',\r\n  CTRChangePercentDesc: 'CTR Change Percent Desc',\r\n\r\n  ImpressionAsc: 'Impression Asc',\r\n  ImpressionDesc: 'Impression Desc',\r\n  ImpressionPeriodAsc: 'Period Impression Asc',\r\n  ImpressionPeriodDesc: 'Period Impression Desc',\r\n  ImpressionChangeAsc: 'Impression Change Asc',\r\n  ImpressionChangeDesc: 'Impression Change Desc',\r\n  ImpressionChangePercentAsc: 'Impression Change Percent Asc',\r\n  ImpressionChangePercentDesc: 'Impression Change Percent Desc',\r\n\r\n  SpendAsc: 'Spend Asc',\r\n  SpendDesc: 'Spend Desc',\r\n  SpendPeriodAsc: 'Period Spend Asc',\r\n  SpendPeriodDesc: 'Period Spend Desc',\r\n  SpendChangeAsc: 'Spend Change Asc',\r\n  SpendChangeDesc: 'Spend Change Desc',\r\n  SpendChangePercentAsc: 'Spend Change Percent Asc',\r\n  SpendChangePercentDesc: 'Spend Change Percent Desc',\r\n};\r\n\r\nexport const CSMLVideoDuration = {\r\n  min: 0,\r\n  max: 120,\r\n  unlimited: 121, // max + 1\r\n};\r\n\r\nexport const CSMLTimeFrame = {\r\n  Anytime: 'Anytime',\r\n  Today: 'Today',\r\n  Last7Days: 'Last 7 days',\r\n  Last30Days: 'Last 30 days',\r\n  Custom: 'Custom range',\r\n};\r\n\r\nexport const CSMLImportSource = {\r\n  Google: 'Google',\r\n  Facebook: 'Facebook',\r\n};\r\n\r\nexport const CSMLAssetSource = {\r\n  UserUploaded: 'UserUploaded',\r\n  AIGenerated: 'AIGenerated',\r\n  Website: 'WebsiteImported',\r\n  Shutterstock: 'ShutterStock',\r\n  Facebook: 'FacebookImported',\r\n  Google: 'GoogleImported',\r\n  BackgroundChangeGenerated: 'BackgroundChangeGenerated',\r\n  AIGeneratedByRecraft: 'AIGeneratedByRecraft',\r\n};\r\n\r\nexport const ManualAddedImageSource = {\r\n  Library: 'Library',\r\n  ShutterStock: 'ShutterStock',\r\n};\r\n\r\nexport const AIModelSource = {\r\n  Dalle: 'Dalle',\r\n  Recraft: 'Recraft',\r\n};\r\n\r\nexport const DEFAULT_PAGE_SIZE = 20;\r\n\r\nexport const MIN_SIZE = [\r\n  703, // width\r\n  368, // height\r\n];\r\n\r\nexport const UPSCALE_MIN_SIZE = [ // half of MIN_SIZE\r\n  352, // width\r\n  184, // height\r\n];\r\n\r\nexport const ClarityTags = {\r\n  LaunchedAdsStudio: 'LaunchedAdsStudio',\r\n  LaunchedAddImageAssetsFromAdsStudio: 'LaunchedAddImageAssetsFromAdsStudio',\r\n  DisplayTemplateHomePage: 'DisplayTemplateHomePage',\r\n  EditDisplayTemplateImage: 'EditDisplayTemplateImage',\r\n  CreateDisplayTemplate: 'CreateDisplayTemplate',\r\n  BrandKitPage: 'BrandKitPage',\r\n  EditBrandKitImage: 'EditBrandKitImage',\r\n  EditBrandKitLogo: 'EditBrandKitLogo',\r\n};\r\n\r\nexport const CROP_BOX_MAX_SIZE = {\r\n  width: 416,\r\n  height: 300,\r\n};\r\n\r\nexport const CSMLAdTypeAbbr = {\r\n  [CSMLAdType.MMA]: 'MultiMediaAd',\r\n  [CSMLAdType.Audience]: 'MSAN',\r\n  [CSMLAdType.ImageExtension]: 'ImageExtension',\r\n};\r\n\r\nexport const ROOT_FOLDER_ID = 'ROOT';\r\n\r\nexport const FolderAssetType = {\r\n  Image: 'Image',\r\n  Video: 'Video',\r\n  All: 'All',\r\n  Folder: 'Folder',\r\n};\r\n\r\nexport const RootFolderName = {\r\n  [FolderAssetType.Image]: _TL_('Images'),\r\n  [FolderAssetType.Video]: _TL_('Videos'),\r\n};\r\n\r\nexport const isRootFolderId = folderIdToTest => folderIdToTest === ROOT_FOLDER_ID;\r\n\r\nexport const supportedImageExtensions = ['.png', '.jpg', '.jpeg', '.gif'];\r\n\r\nexport const GridSectionName = {\r\n  Folder: 'folderSection',\r\n  Asset: 'assetsSection',\r\n};\r\n\r\nexport const MaxAddAssetJobInParell = 6;\r\n\r\n// export const AdsStudioAppNameODataHeader = {\r\n//   key: 'x-ms-applicationname',\r\n//   value: 'bingadsweb-assetlibrary',\r\n// };\r\n\r\nexport const CSMLSearchLocation = {\r\n  Current: 'Current',\r\n  Global: 'Global',\r\n};\r\n\r\nexport const VideoStatus = {\r\n  Unverified: 'Unverified',\r\n  Draft: 'Draft',\r\n  Active: 'Active',\r\n  Failed: 'Failed',\r\n};\r\n\r\nexport const AdsStudioPageName = {\r\n  LibraryPage: 'LibraryPage',\r\n  PerfPage: 'PerfPage',\r\n  WebsiteImagePanelPage: 'WebsiteImagePanelPage',\r\n  StockImagePanelPage: 'StockImagePanelPage',\r\n  AddVideoPanelPage: 'AddVideoPanelPage',\r\n  UploadFilesPanelPage: 'UploadFilesPanelPage',\r\n  UploadFolderPanelPage: 'UploadFolderPanelPage',\r\n  MixedImagePanelPage: 'MixedImagePanelPage',\r\n  MixedVideoPanelPage: 'MixedVideoPanelPage',\r\n  EditImagePage: 'EditImagePage',\r\n  AssetDetailsPage: 'AssetDetailsPage',\r\n  BackgroundRemovalModalPage: 'BackgroundRemovalModalPage',\r\n  InvestImagePanelPage: 'InvestImagePanelPage',\r\n  InvestVideoPanelPage: 'InvestVideoPanelPage',\r\n};\r\n\r\nconst UPLOAD = 'Upload';\r\nconst STOCK_IMAGES = 'StockImages';\r\nconst WEBSITE_IMAGES = 'WebsiteImages';\r\nconst AI_IMAGES = 'AiImages';\r\nconst SOCIAL_MEDIA = 'SocialMedia';\r\n\r\nexport const AddImagePivotKey = {\r\n  UPLOAD,\r\n  STOCK_IMAGES,\r\n  WEBSITE_IMAGES,\r\n  AI_IMAGES,\r\n  SOCIAL_MEDIA,\r\n};\r\n\r\nexport const AdditionalQueries = {\r\n  Query: 'query',\r\n  FolderId: 'folderId',\r\n  EditImageUrl: 'editImageUrl',\r\n  InitialCurrentView: 'initialCurrentView',\r\n  TemplateId: 'templateId',\r\n  TemplateGroupId: 'templateGroupId',\r\n};\r\n\r\nexport const AdStudioSurveyTriggerFlag = {\r\n  App: 'AdsStudioAppSurveyTrigger',\r\n};\r\n\r\nexport const RealUsedFlagSuffix = {\r\n  App: 'AdsStudioApp',\r\n};\r\n","\r\nexport const FilterType = {\r\n  SearchText: 'SearchText',\r\n  AssetType: 'AssetType',\r\n  ImageSize: 'ImageSize',\r\n  VideoDuration: 'VideoDuration',\r\n  DateAdded: 'DateAdded',\r\n  ImportSource: 'ImportSource',\r\n  AssetSource: 'AssetSource',\r\n};\r\n\r\nconst SearchTextFilter = {\r\n  type: FilterType.SearchText,\r\n  title: _TL_('Search by asset name or ID'),\r\n};\r\n\r\nconst AssetTypeFilter = {\r\n  type: FilterType.AssetType,\r\n  title: _TL_('Asset type'),\r\n};\r\n\r\nconst DateAddedFilter = {\r\n  type: FilterType.DateAdded,\r\n  title: _TL_('Date added'),\r\n};\r\n\r\nconst ImageSizeFilter = {\r\n  type: FilterType.ImageSize,\r\n  title: _TL_('Image size'),\r\n};\r\n\r\nconst ImportSourceFilter = {\r\n  type: FilterType.ImportSource,\r\n  title: _TL_('Import source'),\r\n};\r\n\r\nconst AssetSourceFilter = {\r\n  type: FilterType.AssetSource,\r\n  title: _TL_('Source'),\r\n};\r\n\r\n\r\nconst VideoDurationFilter = {\r\n  type: FilterType.VideoDuration,\r\n  title: _TL_('Video duration'),\r\n};\r\n\r\n\r\nexport const AllSupportedFilters = {\r\n  [FilterType.SearchText]: SearchTextFilter,\r\n  [FilterType.AssetType]: AssetTypeFilter,\r\n  [FilterType.DateAdded]: DateAddedFilter,\r\n  [FilterType.ImageSize]: ImageSizeFilter,\r\n  [FilterType.ImportSource]: ImportSourceFilter,\r\n  [FilterType.AssetSource]: AssetSourceFilter,\r\n  [FilterType.VideoDuration]: VideoDurationFilter,\r\n};\r\n","import { FolderAssetType } from './constants';\r\n\r\nexport const getAssetTypeOptions = i18n => [\r\n  {\r\n    key: FolderAssetType.All,\r\n    text: i18n.getString(_TL_('All')),\r\n    title: i18n.getString(_TL_('All')),\r\n  },\r\n  {\r\n    key: FolderAssetType.Image,\r\n    text: i18n.getString(_TL_('Image')),\r\n    title: i18n.getString(_TL_('Image')),\r\n  },\r\n  {\r\n    key: FolderAssetType.Video,\r\n    text: i18n.getString(_TL_('Video')),\r\n    title: i18n.getString(_TL_('Video')),\r\n  },\r\n];\r\n","import _ from 'underscore';\r\n\r\nconst MAX_DAYS = 7;\r\n\r\n// timestamp: Date\r\nexport function getTimeDescription(timestamp, i18n) {\r\n  if (_.isDate(timestamp)) {\r\n    const now = new Date();\r\n\r\n    const diffInSec = Math.round((now - timestamp) / 1000);\r\n    if (diffInSec < 0) {\r\n      // in case something is wrong\r\n      return null;\r\n    } else if (diffInSec === 0) {\r\n      return i18n.getString(_TL_('just now'));\r\n    } else if (diffInSec === 1) {\r\n      return i18n.getString(_TL_('1 second ago'));\r\n    } else if (diffInSec < 60) {\r\n      return i18n.getString(_TL_('{{seconds}} seconds ago'), { seconds: diffInSec });\r\n    }\r\n\r\n    const diffInMin = Math.round(diffInSec / 60);\r\n    if (diffInMin === 1) {\r\n      return i18n.getString(_TL_('1 minute ago'));\r\n    } else if (diffInMin < 60) {\r\n      return i18n.getString(_TL_('{{minutes}} minutes ago'), { minutes: diffInMin });\r\n    }\r\n\r\n    const diffInHour = Math.round(diffInMin / 60);\r\n    if (diffInHour === 1) {\r\n      return i18n.getString(_TL_('1 hour ago'));\r\n    } else if (diffInHour < 24) {\r\n      return i18n.getString(_TL_('{{hours}} hours ago'), { hours: diffInHour });\r\n    }\r\n\r\n    const diffInDay = Math.round(diffInHour / 24);\r\n    if (diffInDay === 1) {\r\n      return i18n.getString(_TL_('1 day ago'));\r\n    } else if (diffInDay <= MAX_DAYS) {\r\n      return i18n.getString(_TL_('{{days}} days ago'), { days: diffInDay });\r\n    }\r\n  }\r\n\r\n  // no description for timestamp > 30 days ago\r\n  return null;\r\n}\r\n","export const convertTimeDuration = (DurationInMS) => {\r\n  const hours = Math.floor(DurationInMS / 3600000);\r\n  const minutes = Math.floor((DurationInMS % 3600000) / 60000);\r\n  const seconds = Math.floor((DurationInMS % 60000) / 1000);\r\n  const timeArr = [];\r\n  if (hours > 0) {\r\n    timeArr.push(`${hours < 10 ? '0' : ''}${hours}`);\r\n  }\r\n  timeArr.push(`${minutes < 10 ? '0' : ''}${minutes}`);\r\n  timeArr.push(`${seconds < 10 ? '0' : ''}${seconds}`);\r\n  return timeArr.join(':');\r\n};\r\n","import { CivilDate } from 'tc39-proposal-temporal';\r\n// import { getCivilDateToday } from '@bingads-webui-universal/temporal-utitlities';\r\nimport { CSMLTimeFrame } from './constants';\r\n\r\nexport const getDateAddedChoiceOptions = (i18n, timeZone) => {\r\n  // const yesterday = getCivilDateToday().plus({ days: -1 });\r\n  const todayObj = i18n.getToday({ timeZone });\r\n  const today = new CivilDate(todayObj.year, todayObj.month, todayObj.day);\r\n  const last7day = today.plus({ days: -6 });\r\n  const last30day = today.plus({ days: -29 });\r\n  return [\r\n    { key: CSMLTimeFrame.Today, text: i18n.getString(_TL_('Today')), range: { start: today, end: today } },\r\n    { key: CSMLTimeFrame.Last7Days, text: i18n.getString(_TL_('Last 7 days')), range: { start: last7day, end: today } },\r\n    { key: CSMLTimeFrame.Last30Days, text: i18n.getString(_TL_('Last 30 days')), range: { start: last30day, end: today } },\r\n    { key: CSMLTimeFrame.Custom, text: i18n.getString(_TL_('Custom range')), range: null },\r\n  ];\r\n};\r\n","import { CSMLImportSource } from './constants';\r\n\r\nexport const getImportSourceOptions = i18n => [\r\n  {\r\n    key: CSMLImportSource.Google,\r\n    text: i18n.getString(_TL_('Google Ads')),\r\n    title: i18n.getString(_TL_('Imported from Google Ads')),\r\n  },\r\n  {\r\n    key: CSMLImportSource.Facebook,\r\n    text: i18n.getString(_TL_('Meta Ads')),\r\n    title: i18n.getString(_TL_('Imported from Meta Ads')),\r\n  },\r\n];\r\n","import { CSMLSortBy, CSMLSortIcon } from './constants';\r\n\r\nexport const getSortingOptions = i18n => [\r\n  { key: CSMLSortBy.MostRecent, text: i18n.getString(_TL_('Most recent')) },\r\n  { key: CSMLSortBy.ImageName, text: i18n.getString(_TL_('Sort by name')), icon: CSMLSortIcon.SortUp },\r\n  { key: CSMLSortBy.ImageNameDesc, text: i18n.getString(_TL_('Sort by name')), icon: CSMLSortIcon.SortDown },\r\n  { key: CSMLSortBy.LastCreated, text: i18n.getString(_TL_('Last created')) },\r\n];\r\n\r\nexport const CSMLSortingRequestParams = {\r\n  [CSMLSortBy.MostRecentAsc]: { sortBy: 'ModifiedTime', sortDirection: 'asc' },\r\n  [CSMLSortBy.MostRecent]: { sortBy: 'ModifiedTime', sortDirection: 'desc' },\r\n\r\n  [CSMLSortBy.ImageName]: { sortBy: 'Text', sortDirection: 'asc' },\r\n  [CSMLSortBy.ImageNameDesc]: { sortBy: 'Text', sortDirection: 'desc' },\r\n  [CSMLSortBy.LastCreated]: { sortBy: 'CreatedTime', sortDirection: 'desc' },\r\n  [CSMLSortBy.LastCreatedAsc]: { sortBy: 'CreatedTime', sortDirection: 'asc' },\r\n\r\n  [CSMLSortBy.AssetIdAsc]: { sortBy: 'AssetId', sortDirection: 'asc' },\r\n  [CSMLSortBy.AssetIdDesc]: { sortBy: 'AssetId', sortDirection: 'desc' },\r\n\r\n  [CSMLSortBy.ClickAsc]: { sortBy: 'PerformanceMetrics/Clicks', sortDirection: 'asc' },\r\n  [CSMLSortBy.ClickDesc]: { sortBy: 'PerformanceMetrics/Clicks', sortDirection: 'desc' },\r\n  [CSMLSortBy.ClickPeriodAsc]: { sortBy: 'PoPPerformanceMetrics/Clicks', sortDirection: 'asc' },\r\n  [CSMLSortBy.ClickPeriodDesc]: { sortBy: 'PoPPerformanceMetrics/Clicks', sortDirection: 'desc' },\r\n  [CSMLSortBy.ClickChangeAsc]: { sortBy: 'PoPPerformanceMetricsChange/Clicks', sortDirection: 'asc' },\r\n  [CSMLSortBy.ClickChangeDesc]: { sortBy: 'PoPPerformanceMetricsChange/Clicks', sortDirection: 'desc' },\r\n  [CSMLSortBy.ClickChangePercentAsc]: { sortBy: 'PoPPerformanceMetricsChangePercentage/Clicks', sortDirection: 'asc' },\r\n  [CSMLSortBy.ClickChangePercentDesc]: { sortBy: 'PoPPerformanceMetricsChangePercentage/Clicks', sortDirection: 'desc' },\r\n\r\n  [CSMLSortBy.CTRAsc]: { sortBy: 'PerformanceMetrics/CTR', sortDirection: 'asc' },\r\n  [CSMLSortBy.CTRDesc]: { sortBy: 'PerformanceMetrics/CTR', sortDirection: 'desc' },\r\n  [CSMLSortBy.CTRPeriodAsc]: { sortBy: 'PoPPerformanceMetrics/CTR', sortDirection: 'asc' },\r\n  [CSMLSortBy.CTRPeriodDesc]: { sortBy: 'PoPPerformanceMetrics/CTR', sortDirection: 'desc' },\r\n  [CSMLSortBy.CTRChangeAsc]: { sortBy: 'PoPPerformanceMetricsChange/CTR', sortDirection: 'asc' },\r\n  [CSMLSortBy.CTRChangeDesc]: { sortBy: 'PoPPerformanceMetricsChange/CTR', sortDirection: 'desc' },\r\n  [CSMLSortBy.CTRChangePercentAsc]: { sortBy: 'PoPPerformanceMetricsChangePercentage/CTR', sortDirection: 'asc' },\r\n  [CSMLSortBy.CTRChangePercentDesc]: { sortBy: 'PoPPerformanceMetricsChangePercentage/CTR', sortDirection: 'desc' },\r\n\r\n  [CSMLSortBy.ImpressionAsc]: { sortBy: 'PerformanceMetrics/Impressions', sortDirection: 'asc' },\r\n  [CSMLSortBy.ImpressionDesc]: { sortBy: 'PerformanceMetrics/Impressions', sortDirection: 'desc' },\r\n  [CSMLSortBy.ImpressionPeriodAsc]: { sortBy: 'PoPPerformanceMetrics/Impressions', sortDirection: 'asc' },\r\n  [CSMLSortBy.ImpressionPeriodDesc]: { sortBy: 'PoPPerformanceMetrics/Impressions', sortDirection: 'desc' },\r\n  [CSMLSortBy.ImpressionChangeAsc]: { sortBy: 'PoPPerformanceMetricsChange/Impressions', sortDirection: 'asc' },\r\n  [CSMLSortBy.ImpressionChangeDesc]: { sortBy: 'PoPPerformanceMetricsChange/Impressions', sortDirection: 'desc' },\r\n  [CSMLSortBy.ImpressionChangePercentAsc]: { sortBy: 'PoPPerformanceMetricsChangePercentage/Impressions', sortDirection: 'asc' },\r\n  [CSMLSortBy.ImpressionChangePercentDesc]: { sortBy: 'PoPPerformanceMetricsChangePercentage/Impressions', sortDirection: 'desc' },\r\n\r\n  [CSMLSortBy.SpendAsc]: { sortBy: 'PerformanceMetrics/Spend', sortDirection: 'asc' },\r\n  [CSMLSortBy.SpendDesc]: { sortBy: 'PerformanceMetrics/Spend', sortDirection: 'desc' },\r\n  [CSMLSortBy.SpendPeriodAsc]: { sortBy: 'PoPPerformanceMetrics/Spend', sortDirection: 'asc' },\r\n  [CSMLSortBy.SpendPeriodDesc]: { sortBy: 'PoPPerformanceMetrics/Spend', sortDirection: 'desc' },\r\n  [CSMLSortBy.SpendChangeAsc]: { sortBy: 'PoPPerformanceMetricsChange/Spend', sortDirection: 'asc' },\r\n  [CSMLSortBy.SpendChangeDesc]: { sortBy: 'PoPPerformanceMetricsChange/Spend', sortDirection: 'desc' },\r\n  [CSMLSortBy.SpendChangePercentAsc]: { sortBy: 'PoPPerformanceMetricsChangePercentage/Spend', sortDirection: 'asc' },\r\n  [CSMLSortBy.SpendChangePercentDesc]: { sortBy: 'PoPPerformanceMetricsChangePercentage/Spend', sortDirection: 'desc' },\r\n};\r\n","import { CSMLAssetSource } from './constants';\r\n\r\nexport const getAssetSourceOptions = i18n => [\r\n  {\r\n    key: CSMLAssetSource.AIGenerated,\r\n    text: i18n.getString(_TL_('Created')),\r\n    title: i18n.getString(_TL_('Created with Microsoft Advertising')),\r\n  },\r\n  {\r\n    key: CSMLAssetSource.UserUploaded,\r\n    text: i18n.getString(_TL_('Upload')),\r\n    title: i18n.getString(_TL_('Uploaded from computer')),\r\n  },\r\n  {\r\n    key: CSMLAssetSource.Website,\r\n    text: i18n.getString(_TL_('Website')),\r\n    title: i18n.getString(_TL_('Advertiser website')),\r\n  },\r\n  {\r\n    key: CSMLAssetSource.Shutterstock,\r\n    text: i18n.getString(_TL_('Shutterstock')),\r\n    title: i18n.getString(_TL_('Shutterstock')),\r\n  },\r\n  {\r\n    key: CSMLAssetSource.Google,\r\n    text: i18n.getString(_TL_('Imported')),\r\n    title: i18n.getString(_TL_('Imported from Google Ads')),\r\n  },\r\n  {\r\n    key: CSMLAssetSource.Facebook,\r\n    text: i18n.getString(_TL_('Imported')),\r\n    title: i18n.getString(_TL_('Imported from Meta Ads')),\r\n  },\r\n];\r\n","/* eslint-disable max-len */\r\nimport _ from 'underscore';\r\nimport { constants as C } from '@bingads-webui-campaign-react/image-experience-model';\r\nimport {\r\n  // UAPPlacementType as EPlacementType,\r\n  UAPPlacementTypeAlias as PT,\r\n} from '@bingads-webui-campaign-react/unified-ad-preview-library-core';\r\n\r\nimport { CSMLAdTypeAbbr, CSMLAdType } from './constants';\r\n\r\n// eslint-disable-next-line prefer-destructuring\r\nconst imageAdExtSettings = C.imageAdExtSettings;\r\n\r\nexport const getPlacementConfig = () => ({\r\n  // MMA\r\n  [PT.MMA.LandscapeImage]: {\r\n    isRequired: true,\r\n    aspectRatioUIString: '1.91 : 1',\r\n    previewTypeString: _TL_('Landscape image'),\r\n  },\r\n  [PT.MMA.WideImage]: {\r\n    isRequired: false,\r\n    aspectRatioUIString: '4 : 1',\r\n    previewTypeString: _TL_('Wide image'),\r\n  },\r\n  [PT.MMA.SquareImage]: {\r\n    isRequired: true,\r\n    aspectRatioUIString: '1 : 1',\r\n    previewTypeString: _TL_('Square image'),\r\n  },\r\n  [PT.MMA.VerticalImage]: {\r\n    isRequired: false,\r\n    aspectRatioUIString: '1 : 2',\r\n    previewTypeString: _TL_('Vertical image'),\r\n  },\r\n\r\n  // MMA in MSAN (Audience Network)\r\n  [PT.MSAN.WideImage]: {\r\n    isRequired: true,\r\n    aspectRatioUIString: '1.91 : 1',\r\n    previewTypeString: _TL_('MSN feed'),\r\n  },\r\n  [PT.MSAN.SquareImage]: {\r\n    isRequired: false,\r\n    aspectRatioUIString: '1 : 1',\r\n    previewTypeString: _TL_('MSN square image'),\r\n  },\r\n  [PT.MSAN.MSEdgeSingleCarousel]: {\r\n    isRequired: false,\r\n    aspectRatioUIString: '1.78 : 1',\r\n    previewTypeString: _TL_('Microsoft Edge single carousel'),\r\n  },\r\n  [PT.MSAN.MSNInArticle]: {\r\n    isRequired: false,\r\n    aspectRatioUIString: '1.5 : 1',\r\n    previewTypeString: _TL_('MSN in-article ad'),\r\n  },\r\n  [PT.MSAN.MSNSmallHeadline]: {\r\n    isRequired: false,\r\n    aspectRatioUIString: '1.33 : 1',\r\n    previewTypeString: _TL_('MSN small headline'),\r\n  },\r\n\r\n  // pmax\r\n  [PT.PMax.AudienceSquareImage]: {\r\n    isRequired: false,\r\n    aspectRatioUIString: '1 : 1',\r\n    previewTypeString: _TL_('MSN square image'),\r\n  },\r\n  [PT.PMax.AudienceWideImage]: {\r\n    isRequired: true,\r\n    aspectRatioUIString: '1.91 : 1',\r\n    previewTypeString: _TL_('MSN feed'),\r\n  },\r\n  [PT.PMax.MMALandscapeImage]: {\r\n    isRequired: true,\r\n    aspectRatioUIString: '1.91 : 1',\r\n    previewTypeString: _TL_('Landscape Image Multimedia Ad'),\r\n  },\r\n  [PT.PMax.MMAVerticalImage]: {\r\n    isRequired: false,\r\n    aspectRatioUIString: '1 : 2',\r\n    previewTypeString: _TL_('Vertical image'),\r\n  },\r\n  [PT.PMax.MMAWideImage]: {\r\n    isRequired: false,\r\n    aspectRatioUIString: '4 : 1',\r\n    previewTypeString: _TL_('Wide image'),\r\n  },\r\n  [PT.PMax.MSNInArticle]: {\r\n    isRequired: false,\r\n    aspectRatioUIString: '1.5 : 1',\r\n    previewTypeString: _TL_('MSN in-article ad'),\r\n  },\r\n  [PT.PMax.MSNSmallHeadline]: {\r\n    isRequired: false,\r\n    aspectRatioUIString: '1.33 : 1',\r\n    previewTypeString: _TL_('MSN small headline'),\r\n  },\r\n  [PT.PMax.MSEdgeSingleCarousel]: {\r\n    isRequired: false,\r\n    aspectRatioUIString: '1.78 : 1',\r\n    previewTypeString: _TL_('Microsoft Edge single carousel'),\r\n  },\r\n  [PT.PMax.MMAV2MSEdgeCarousel]: {\r\n    isRequired: false,\r\n    aspectRatioUIString: '2.01 : 1',\r\n    previewTypeString: _TL_('Microsoft Edge carousel'),\r\n  },\r\n  [PT.PMax.MMAV2MSNSingleCarousel]: {\r\n    isRequired: false,\r\n    aspectRatioUIString: '1.69 : 1',\r\n    previewTypeString: _TL_('MSN carousel'),\r\n  },\r\n  [PT.PMax.MMAV2MSNRestoday]: {\r\n    isRequired: false,\r\n    aspectRatioUIString: '1.24 : 1',\r\n    previewTypeString: _TL_('MSN Restoday'),\r\n  },\r\n  [PT.PMax.MMAV2MSNPartnerStripe]: {\r\n    isRequired: false,\r\n    aspectRatioUIString: '1.53 : 1',\r\n    previewTypeString: _TL_('MSN partner stripe'),\r\n  },\r\n  [PT.PMax.MMAV2MSNRiver]: {\r\n    isRequired: true,\r\n    aspectRatioUIString: '1.91 : 1',\r\n    previewTypeString: _TL_('MSN feed'),\r\n  },\r\n  [PT.PMax.MSEdgeMobile]: {\r\n    isRequired: false,\r\n    aspectRatioUIString: '1 : 1',\r\n    previewTypeString: _TL_('Microsoft Edge mobile'),\r\n  },\r\n\r\n  // MSAN V2\r\n  [PT.MSANV2.MSEdgeCarousel]: {\r\n    isRequired: false,\r\n    aspectRatioUIString: '2.01 : 1',\r\n    previewTypeString: _TL_('Microsoft Edge carousel'),\r\n  },\r\n  [PT.MSANV2.MSANBanner]: {\r\n    isRequired: false,\r\n    aspectRatioUIString: '2 : 1',\r\n    previewTypeString: _TL_('MSN banner'),\r\n  },\r\n  [PT.MSANV2.MSANRiver]: {\r\n    isRequired: true,\r\n    aspectRatioUIString: '1.91 : 1',\r\n    previewTypeString: _TL_('MSN feed'),\r\n  },\r\n  [PT.MSANV2.MSNCarousel]: {\r\n    isRequired: false,\r\n    aspectRatioUIString: '1.69 : 1',\r\n    previewTypeString: _TL_('MSN carousel'),\r\n  },\r\n  [PT.MSANV2.MSNPartnerStripe]: {\r\n    isRequired: false,\r\n    aspectRatioUIString: '1.53 : 1',\r\n    previewTypeString: _TL_('MSN partner stripe'),\r\n  },\r\n  [PT.MSANV2.MSNRestoday]: {\r\n    isRequired: false,\r\n    aspectRatioUIString: '1.24 : 1',\r\n    previewTypeString: _TL_('MSN Restoday'),\r\n  },\r\n  [PT.MSANV2.MSANRectangle]: {\r\n    isRequired: false,\r\n    aspectRatioUIString: '1.2 : 1',\r\n    previewTypeString: _TL_('MSN rectangle image'),\r\n  },\r\n  [PT.MSANV2.MSEdgeMobile]: {\r\n    isRequired: true,\r\n    aspectRatioUIString: '1 : 1',\r\n    previewTypeString: _TL_('Microsoft Edge mobile'),\r\n  },\r\n\r\n  // Image Extension\r\n  [PT.ImageExt.WideImage]: {\r\n    isRequired: true,\r\n    aspectRatioUIString: '1.91 : 1',\r\n    previewTypeString: _TL_('MSN feed'),\r\n  },\r\n  [PT.ImageExt.MSEdgeSingleCarousel]: {\r\n    isRequired: false,\r\n    aspectRatioUIString: '1.78 : 1',\r\n    previewTypeString: _TL_('Microsoft Edge single carousel'),\r\n  },\r\n  [PT.ImageExt.BingDesktopSingleImage]: {\r\n    isRequired: false,\r\n    aspectRatioUIString: '1.78 : 1',\r\n    previewTypeString: _TL_('Bing desktop single-image extension'),\r\n  },\r\n  [PT.ImageExt.MSEdgeMediumHeadline]: {\r\n    isRequired: false,\r\n    aspectRatioUIString: '1.72 : 1',\r\n    previewTypeString: _TL_('Microsoft Edge medium headline'),\r\n  },\r\n  [PT.ImageExt.MSNSingleCarousel]: {\r\n    isRequired: false,\r\n    aspectRatioUIString: '1.69 : 1',\r\n    previewTypeString: _TL_('MSN carousel'),\r\n  },\r\n  [PT.ImageExt.MSNMediumHeadline]: {\r\n    isRequired: false,\r\n    aspectRatioUIString: '1.55 : 1',\r\n    previewTypeString: _TL_('MSN medium headline'),\r\n  },\r\n  [PT.ImageExt.MSNInArticle]: {\r\n    isRequired: false,\r\n    aspectRatioUIString: '1.5 : 1',\r\n    previewTypeString: _TL_('MSN in-article ad'),\r\n  },\r\n  [PT.ImageExt.MSNSmallHeadline]: {\r\n    isRequired: false,\r\n    aspectRatioUIString: '1.33 : 1',\r\n    previewTypeString: _TL_('MSN small headline'),\r\n  },\r\n  [PT.ImageExt.BingDesktopMultiImage]: {\r\n    isRequired: false,\r\n    aspectRatioUIString: '1.33 : 1',\r\n    previewTypeString: _TL_('Bing desktop multi-image extension'),\r\n  },\r\n  [PT.ImageExt.BingMobileMultiImage]: {\r\n    isRequired: false,\r\n    aspectRatioUIString: '1.33 : 1',\r\n    previewTypeString: _TL_('Bing mobile multi-image extension'),\r\n  },\r\n  [PT.ImageExt.SquareImage]: {\r\n    isRequired: false,\r\n    aspectRatioUIString: '1 : 1',\r\n    previewTypeString: _TL_('MSN square image'),\r\n  },\r\n  [PT.ImageExt.MSNDoubleCarousel]: {\r\n    isRequired: false,\r\n    aspectRatioUIString: '0.93 : 1',\r\n    previewTypeString: _TL_('MSN double carousel'),\r\n  },\r\n  [PT.ImageExt.MMAV2MSNRiver]: {\r\n    isRequired: true,\r\n    aspectRatioUIString: '1.91 : 1',\r\n    previewTypeString: _TL_('MSN feed'),\r\n  },\r\n  [PT.ImageExt.MMAV2MSNSingleCarousel]: {\r\n    isRequired: false,\r\n    aspectRatioUIString: '1.69 : 1',\r\n    previewTypeString: _TL_('MSN carousel'),\r\n  },\r\n  [PT.ImageExt.MSEdgeMobile]: {\r\n    isRequired: false,\r\n    aspectRatioUIString: '1 : 1',\r\n    previewTypeString: _TL_('Microsoft Edge mobile'),\r\n  },\r\n});\r\n\r\nexport const aspectRatioConfig = isMultimediaAd => ({\r\n  Image191x100: {\r\n    aspectRatio: 1.91,\r\n    aspectRatioAsRatio: '1.91 : 1',\r\n    aspectRatioString: '191X100',\r\n    type: 'Image191x100',\r\n    isRequired: true,\r\n  },\r\n  Image4x1: {\r\n    aspectRatio: 4,\r\n    aspectRatioAsRatio: '4 : 1',\r\n    aspectRatioString: '400X100',\r\n    type: 'Image4x1',\r\n    isRequired: false,\r\n  },\r\n  Image1x1: {\r\n    aspectRatio: 1,\r\n    aspectRatioAsRatio: '1 : 1',\r\n    aspectRatioString: '100X100',\r\n    type: 'Image1x1',\r\n    isRequired: isMultimediaAd,\r\n  },\r\n  Image1x2: {\r\n    aspectRatio: 0.5,\r\n    aspectRatioAsRatio: '1 : 2',\r\n    aspectRatioString: '50X100',\r\n    type: 'Image1x2',\r\n    isRequired: false,\r\n  },\r\n  Image178x100: {\r\n    aspectRatio: 1.78,\r\n    aspectRatioAsRatio: '1.78 : 1',\r\n    aspectRatioString: '178X100',\r\n    type: 'Image178x100',\r\n    isRequired: false,\r\n    extraExtension: {\r\n      BingSingleImage: {\r\n        previewTypeString: imageAdExtSettings.BingSingleImage.previewTypeString,\r\n      },\r\n    },\r\n  },\r\n  Image172x100: {\r\n    aspectRatio: 1.72,\r\n    type: 'Image172x100',\r\n    aspectRatioAsRatio: '1.72 : 1',\r\n    aspectRatioString: '172X100',\r\n    isRequired: false,\r\n  },\r\n  Image169x100: {\r\n    aspectRatio: 1.69,\r\n    type: 'Image169x100',\r\n    aspectRatioAsRatio: '1.69 : 1',\r\n    aspectRatioString: '169X100',\r\n    isRequired: false,\r\n  },\r\n  Image150x100: {\r\n    aspectRatio: 1.5,\r\n    aspectRatioAsRatio: '1.5 : 1',\r\n    aspectRatioString: '150X100',\r\n    type: 'Image150x100',\r\n    isRequired: false,\r\n  },\r\n  Image155x100: {\r\n    aspectRatio: 1.55,\r\n    type: 'Image155x100',\r\n    aspectRatioAsRatio: '1.55 : 1',\r\n    aspectRatioString: '155X100',\r\n    isRequired: false,\r\n  },\r\n  Image133x100: {\r\n    aspectRatio: 1.33,\r\n    aspectRatioAsRatio: '1.33 : 1',\r\n    aspectRatioString: '133X100',\r\n    type: 'Image133x100',\r\n    isRequired: false,\r\n    extraExtension: {\r\n      MobileMultiImage: {\r\n        previewTypeString: imageAdExtSettings.MobileMultiImage.previewTypeString,\r\n      },\r\n      BingDesktopImage: {\r\n        previewTypeString: imageAdExtSettings.BingDesktopImage.previewTypeString,\r\n      },\r\n    },\r\n  },\r\n  Image93x100: {\r\n    aspectRatio: 0.93,\r\n    aspectRatioAsRatio: '0.93 : 1',\r\n    aspectRatioString: '93X100',\r\n    type: 'Image93x100',\r\n    isRequired: false,\r\n  },\r\n  Image201x100: {\r\n    aspectRatio: 2.01,\r\n    aspectRatioAsRatio: '2.01 : 1',\r\n    aspectRatioString: '201X100',\r\n    type: 'Image201x100',\r\n    isRequired: false,\r\n  },\r\n  Image200x100: {\r\n    aspectRatio: 2,\r\n    aspectRatioAsRatio: '2 : 1',\r\n    aspectRatioString: '200X100',\r\n    type: 'Image200x100',\r\n    isRequired: false,\r\n  },\r\n  Image153x100: {\r\n    aspectRatio: 1.53,\r\n    aspectRatioAsRatio: '1.53 : 1',\r\n    aspectRatioString: '153X100',\r\n    type: 'Image153x100',\r\n    isRequired: false,\r\n  },\r\n  Image124x100: {\r\n    aspectRatio: 1.24,\r\n    aspectRatioAsRatio: '1.24 : 1',\r\n    aspectRatioString: '124X100',\r\n    type: 'Image124x100',\r\n    isRequired: false,\r\n  },\r\n  Image120x100: {\r\n    aspectRatio: 1.2,\r\n    aspectRatioAsRatio: '1.2 : 1',\r\n    aspectRatioString: '120X100',\r\n    type: 'Image120x100',\r\n    isRequired: false,\r\n  },\r\n});\r\n\r\nexport const getAspectRatioConfig = (adType, isMMAV2Enabled, isPMaxAspectRatiosV2Enabled) => {\r\n  const aspectRatios = C.getAspectRatios({\r\n    isMultimediaAd: adType === CSMLAdType.MMA,\r\n    isMultimediaAdinMSANEnabled: CSMLAdType.Audience === adType,\r\n    isCombinedMsanAndMmaAspectRatios: CSMLAdType.PMax === adType,\r\n    isMMAV2Enabled: CSMLAdType.Audience === adType && isMMAV2Enabled,\r\n    isPMaxAspectRatiosV2Enabled: CSMLAdType.PMax === adType && isPMaxAspectRatiosV2Enabled,\r\n  });\r\n\r\n  const allAspectRatioConfig = aspectRatioConfig(adType === CSMLAdType.MMA);\r\n\r\n  const aspectRatiosExceptOriginal = _.omit(aspectRatios, 'OriginalImage');\r\n\r\n  const subAspectRatioConfig = _.mapObject(aspectRatiosExceptOriginal, item => ({\r\n    ...allAspectRatioConfig[item.type],\r\n    minSize: item.minSize,\r\n    previewTypeString: item.previewTypeString,\r\n    placementType: `${CSMLAdTypeAbbr[adType]}${allAspectRatioConfig[item.type].aspectRatioString}`,\r\n  }));\r\n\r\n  return subAspectRatioConfig;\r\n};\r\n\r\nexport const getPreviewText = (isImageExtension, i18n) => {\r\n  if (isImageExtension) {\r\n    return {\r\n      shortHeadline: i18n.getString(_TL_('Title part 1')),\r\n      longHeadline: i18n.getString(_TL_('Title part 1 | Title part 2 | Title part 3')),\r\n      description: i18n.getString(_TL_('Ad text 1. Ad text 2')),\r\n      businessName: i18n.getString(_TL_('Business name')),\r\n      url: 'https://example.com',\r\n      finalUrl: 'https://example.com',\r\n    };\r\n  }\r\n\r\n  return {\r\n    shortHeadline: i18n.getString(_TL_('Short headline')),\r\n    longHeadline: i18n.getString(_TL_('Long headline')),\r\n    description: i18n.getString(_TL_('Ad text')),\r\n    businessName: i18n.getString(_TL_('Business name')),\r\n    url: 'https://example.com',\r\n    finalUrl: 'https://example.com',\r\n    callToAction: i18n.getString(_TL_('Shop Now')),\r\n  };\r\n};\r\n\r\nexport const sizeValidForRatio = (minSize, cropSettings) => {\r\n  if (cropSettings && minSize) {\r\n    const { SourceWidth, SourceHeight } = cropSettings;\r\n    if (SourceWidth < minSize[0] || SourceHeight < minSize[1]) {\r\n      return false;\r\n    }\r\n  }\r\n\r\n  return true;\r\n};\r\n\r\nexport const getSizeErrorRatioList = (\r\n  adType,\r\n  cropSettings,\r\n  requiredOnly = false,\r\n  isMMAV2Enabled = false,\r\n  isPMaxAspectRatiosV2Enabled = false\r\n) => {\r\n  let ratioList = getAspectRatioConfig(adType, isMMAV2Enabled, isPMaxAspectRatiosV2Enabled);\r\n\r\n  if (requiredOnly) {\r\n    ratioList = _.filter(ratioList, config => config.isRequired);\r\n  }\r\n\r\n  const invalidRatioList = _.filter(ratioList, (item) => {\r\n    const { minSize } = item;\r\n    return !sizeValidForRatio(minSize, cropSettings);\r\n  });\r\n\r\n  return invalidRatioList;\r\n};\r\n\r\nexport const getAllSizeErrorRatioList = (cropSettings, requiredOnly = false, isMMAV2Enabled = false, isPMaxAspectRatiosV2Enabled = false) => {\r\n  const errorListForMMA = getSizeErrorRatioList(CSMLAdType.MMA, cropSettings, requiredOnly, isMMAV2Enabled, isPMaxAspectRatiosV2Enabled);\r\n  const errorListForAudience = getSizeErrorRatioList(CSMLAdType.Audience, cropSettings, requiredOnly, isMMAV2Enabled, isPMaxAspectRatiosV2Enabled);\r\n  const errorListForExtension = getSizeErrorRatioList(CSMLAdType.ImageExtension, cropSettings, requiredOnly, isMMAV2Enabled, isPMaxAspectRatiosV2Enabled);\r\n  const errorListForPmax = getSizeErrorRatioList(CSMLAdType.Pmax, cropSettings, requiredOnly, isMMAV2Enabled, isPMaxAspectRatiosV2Enabled);\r\n\r\n  return _.uniq(\r\n    [...errorListForAudience, ...errorListForExtension, ...errorListForMMA, ...errorListForPmax],\r\n    item => item.type\r\n  );\r\n};\r\n\r\nexport const getPlacementsToExpand = (adType) => {\r\n  const aspectRatios = C.getAspectRatios({\r\n    isMultimediaAd: adType === CSMLAdType.MMA,\r\n    isMultimediaAdinMSANEnabled: CSMLAdType.Audience === adType,\r\n    isMMAV2Enabled: adType === CSMLAdType.Audience,\r\n    isCombinedMsanAndMmaAspectRatios: adType === CSMLAdType.PMax,\r\n  });\r\n\r\n  const placementsToExpand = _.chain(aspectRatios)\r\n    .reject(p => CSMLAdType.Audience === adType && p.type === 'OriginalImage')\r\n    .map(({ aspectRatio, minSize }) => ({ aspectRatio, minHeight: minSize[1] }))\r\n    .value();\r\n\r\n  return placementsToExpand;\r\n};\r\n","import image0 from './image/Designer0.png';\r\nimport image1 from './image/Designer1.png';\r\nimport image2 from './image/Designer2.jpg';\r\nimport image3 from './image/Designer3.png';\r\nimport image4 from './image/Designer4.jpg';\r\nimport image5 from './image/Designer5.jpg';\r\nimport image6 from './image/Designer6.jpg';\r\nimport image7 from './image/Designer7.png';\r\nimport image8 from './image/Designer8.jpg';\r\nimport image9 from './image/Designer9.jpg';\r\nimport image10 from './image/Designer10.jpg';\r\nimport image11 from './image/Designer11.jpg';\r\nimport image12 from './image/Designer12.jpg';\r\nimport image13 from './image/Designer13.png';\r\nimport image14 from './image/Designer14.jpg';\r\nimport image15 from './image/Designer15.jpg';\r\nimport image16 from './image/Designer16.jpg';\r\nimport image17 from './image/Designer17.jpg';\r\nimport image18 from './image/Designer18.jpg';\r\nimport image19 from './image/Designer19.png';\r\n\r\nconst samples = [\r\n  {\r\n    promptText: _TL_('Modern high-tech gadgets on a sleek, minimalist desk.'),\r\n    imageSrc: image0,\r\n  },\r\n  {\r\n    promptText: _TL_('A luxury car driving through scenic mountains.'),\r\n    imageSrc: image1,\r\n  },\r\n  {\r\n    promptText: _TL_('A digital timer displayed prominently on a sleek marble surface.'),\r\n    imageSrc: image2,\r\n  },\r\n  {\r\n    promptText: _TL_('An array of high-end skincare products on a marble countertop.'),\r\n    imageSrc: image3,\r\n  },\r\n  {\r\n    promptText: _TL_('An electric bicycle displayed next to an outdoor café.'),\r\n    imageSrc: image4,\r\n  },\r\n  {\r\n    promptText: _TL_('A stylish home office setup with tech gadgets.'),\r\n    imageSrc: image5,\r\n  },\r\n  {\r\n    promptText: _TL_('A picnic setup with food and decor in a park.'),\r\n    imageSrc: image6,\r\n  },\r\n  {\r\n    promptText: _TL_('A product photo of juice bottles with no label.'),\r\n    imageSrc: image7,\r\n  },\r\n  {\r\n    promptText: _TL_('A five-star hotel room with a stunning view of the city skyline.'),\r\n    imageSrc: image8,\r\n  },\r\n  {\r\n    promptText: _TL_('An all-inclusive spa treatment setting.'),\r\n    imageSrc: image9,\r\n  },\r\n  {\r\n    promptText: _TL_('A hiking backpack and gear on an adventurous trail with breathtaking views.'),\r\n    imageSrc: image10,\r\n  },\r\n  {\r\n    promptText: _TL_('A trendy cafe table with coffee cups.'),\r\n    imageSrc: image11,\r\n  },\r\n  {\r\n    promptText: _TL_('A beautifully arranged floral bouquet on a table.'),\r\n    imageSrc: image12,\r\n  },\r\n  {\r\n    promptText: _TL_('A beautifully wrapped gift in front of a fireplace.'),\r\n    imageSrc: image13,\r\n  },\r\n  {\r\n    promptText: _TL_('An elegant dining setup for a romantic evening.'),\r\n    imageSrc: image14,\r\n  },\r\n  {\r\n    promptText: _TL_('Refreshing smoothies in elegant glassware.'),\r\n    imageSrc: image15,\r\n  },\r\n  {\r\n    promptText: _TL_('A stylish urban setting with modern decor.'),\r\n    imageSrc: image16,\r\n  },\r\n  {\r\n    promptText: _TL_('A festive living room with a beautifully decorated Christmas tree, featuring branded holiday decor items and cozy products.'),\r\n    imageSrc: image17,\r\n  },\r\n  {\r\n    promptText: _TL_('A winter market stall with festive treats.'),\r\n    imageSrc: image18,\r\n  },\r\n  {\r\n    promptText: _TL_('Beautifully wrapped gift boxes placed under a decorated holiday tree with twinkling lights.'),\r\n    imageSrc: image19,\r\n  },\r\n];\r\n\r\nexport const AIPromptExamples = samples;\r\n","import _ from 'underscore';\r\n\r\nexport const getUpdatedAssets = ({\r\n  assets,\r\n  updates = {},\r\n}) => {\r\n  const {\r\n    imageCroppingTasks,\r\n    videoUpdated,\r\n  } = updates || {};\r\n\r\n  if (assets &&\r\n    (!_.isEmpty(imageCroppingTasks) || !_.isEmpty(videoUpdated))\r\n  ) {\r\n    let updatedAssets = assets;\r\n\r\n    if (!_.isEmpty(imageCroppingTasks)) {\r\n      updatedAssets = updatedAssets.map((asset) => {\r\n        const taskStatus = imageCroppingTasks[asset.id];\r\n        if (taskStatus) {\r\n          return {\r\n            ...asset,\r\n            updating: !taskStatus.isFinished,\r\n          };\r\n        }\r\n\r\n        return asset;\r\n      });\r\n    }\r\n\r\n    if (!_.isEmpty(videoUpdated)) {\r\n      updatedAssets = updatedAssets.map((asset) => {\r\n        const newUpdates = videoUpdated[asset.id];\r\n        if (newUpdates && newUpdates.status !== asset.status) {\r\n          return {\r\n            ...asset,\r\n            ...newUpdates,\r\n          };\r\n        }\r\n\r\n        return asset;\r\n      });\r\n    }\r\n\r\n    return updatedAssets;\r\n  }\r\n\r\n  return assets;\r\n};\r\n","import { useState, useEffect } from 'react';\r\nimport { reduce } from 'underscore';\r\n\r\nimport { setClarityTag } from '@bingads-webui-universal/clarity';\r\n\r\nexport const useClarityTags = (customTags) => {\r\n  const [haveSetClarityTags, setHaveSetClarityTags] = useState(false);\r\n\r\n  useEffect(() => {\r\n    if (!haveSetClarityTags) {\r\n      const tagsToSet = reduce(customTags, (tagsObj, currentTag) => ({\r\n        ...tagsObj,\r\n        [currentTag]: true,\r\n      }), {});\r\n\r\n      setClarityTag(tagsToSet);\r\n      setHaveSetClarityTags(true);\r\n    }\r\n  }, [haveSetClarityTags, setHaveSetClarityTags, customTags]);\r\n};\r\n","import _ from 'underscore';\r\nimport queryString from 'query-string';\r\nimport { VideoStatus, AdditionalQueries } from './constants';\r\nimport { EntryCardSVGIcons } from '../../src/asset-images';\r\n\r\n// TO DO: update this when new entity type is created\r\nconst ExternalEntityType = {\r\n  XandrAdvertiser: 8,\r\n};\r\n\r\nexport const checkVideosIntermediateStatus =\r\n  video => video.status !== VideoStatus.Active && video.status !== VideoStatus.Failed;\r\n/* istanbul ignore next */\r\nconst getSizeLimitPerAccount = (aid, id) => {\r\n  const value = localStorage.getItem(`SystemLimitData_${aid}`);\r\n  if (!value) {\r\n    return null;\r\n  }\r\n\r\n  let valObj = null;\r\n\r\n  try {\r\n    valObj = JSON.parse(value);\r\n  } catch (e) {\r\n    return null;\r\n  }\r\n\r\n  const limitData = _.find(valObj.data, data => data.id === id);\r\n\r\n  return limitData && limitData.val;\r\n};\r\n\r\nexport const isValidXandrAccount = (account) => {\r\n  if (account && account.ExternalAccountIds && account.ExternalAccountIds.length > 0) {\r\n    // TO DO switch this to new enetity type when its available\r\n    const externalAccountId = _.find(account.ExternalAccountIds, item => item.Type === ExternalEntityType.XandrAdvertiser);\r\n    return externalAccountId !== undefined && externalAccountId.Id !== null && externalAccountId.Id !== undefined;\r\n  }\r\n  // TO DO switch to false\r\n  return true;\r\n};\r\n\r\nexport const getEntryCardData = ({\r\n  i18n,\r\n  cardKeys = [],\r\n  onClickCreate = _.noop,\r\n  onClickUpload = _.noop,\r\n  onClickStock = _.noop,\r\n  onClickInvest = _.noop,\r\n  onClickWebsite = _.noop,\r\n  isImagePage = false,\r\n  isVideoPage = false,\r\n  isXandrIntegrationEnabled = false,\r\n}) => {\r\n  let uploadDescription = i18n.getString(_TL_('Upload assets from your computer'));\r\n  let websiteDescription = i18n.getString(_TL_('Enter your URL and we\\'ll pull assets from it'));\r\n  let websiteTitle = i18n.getString(_TL_('Add from website'));\r\n  let createDescription = i18n.getString(_TL_('Create AI-generated images'));\r\n  let createTitle = i18n.getString(_TL_('Create'));\r\n  let investDescription = i18n.getString(_TL_('Search Invest'));\r\n  if (isImagePage) {\r\n    createDescription = i18n.getString(_TL_('Create AI-generated images'));\r\n    uploadDescription = i18n.getString(_TL_('Upload images from your computer'));\r\n    websiteDescription = i18n.getString(_TL_('Enter your URL and we\\'ll pull images from it'));\r\n    investDescription = i18n.getString(_TL_('Search Invest for images'));\r\n  } else if (isVideoPage) {\r\n    createTitle = i18n.getString(_TL_('Create'));\r\n    createDescription = i18n.getString(_TL_('Create a video using a template'));\r\n    uploadDescription = i18n.getString(_TL_('Upload videos from your computer'));\r\n    websiteDescription = i18n.getString(_TL_('Enter your video\\'s URL'));\r\n    websiteTitle = i18n.getString(_TL_('Add from URL'));\r\n    investDescription = i18n.getString(_TL_('Search Invest for videos'));\r\n  }\r\n\r\n  let cardData = [\r\n    {\r\n      title: createTitle,\r\n      description: createDescription,\r\n      image: EntryCardSVGIcons.CreateSVGIcon,\r\n      onClick: onClickCreate,\r\n      key: 'Create',\r\n    },\r\n    {\r\n      title: i18n.getString(_TL_('Upload')),\r\n      description: uploadDescription,\r\n      image: EntryCardSVGIcons.UploadSVGIcon,\r\n      onClick: onClickUpload,\r\n      key: 'Upload',\r\n    },\r\n    {\r\n      title: i18n.getString(_TL_('Get stock images')),\r\n      description: i18n.getString(_TL_('Search Shutterstock for images')),\r\n      image: EntryCardSVGIcons.StockSVGIcon,\r\n      onClick: onClickStock,\r\n      key: 'Stock',\r\n    },\r\n    {\r\n      title: websiteTitle,\r\n      description: websiteDescription,\r\n      image: EntryCardSVGIcons.WebsiteSVGIcon,\r\n      onClick: onClickWebsite,\r\n      key: 'Website',\r\n    },\r\n  ];\r\n\r\n  if (isXandrIntegrationEnabled) {\r\n    cardData = [\r\n      ...cardData,\r\n      {\r\n        title: i18n.getString(_TL_('Add from Microsoft Invest')),\r\n        description: investDescription,\r\n        image: EntryCardSVGIcons.InvestSVGIcon,\r\n        onClick: onClickInvest,\r\n        key: 'Invest',\r\n      },\r\n    ];\r\n  }\r\n\r\n\r\n  if (!cardKeys.length) {\r\n    return cardData;\r\n  }\r\n  return cardData.filter(card => cardKeys.includes(card.key));\r\n};\r\n\r\nexport const getHomePageCardData = ({\r\n  i18n,\r\n  cardKeys = [],\r\n  onClickUpload = _.noop,\r\n  onClickStock = _.noop,\r\n  onClickWebsite = _.noop,\r\n  onClickInvest = _.noop,\r\n  isXandrIntegrationEnabled = false,\r\n}) => {\r\n  let cardData = [\r\n    {\r\n      title: i18n.getString(_TL_('Upload')),\r\n      description: i18n.getString(_TL_('Upload assets from your computer')),\r\n      image: EntryCardSVGIcons.UploadSVGIcon,\r\n      onClick: onClickUpload,\r\n      key: 'Upload',\r\n    },\r\n    {\r\n      title: i18n.getString(_TL_('Add from website')),\r\n      description: i18n.getString(_TL_('Enter your URL and we’ll pull assets from it')),\r\n      image: EntryCardSVGIcons.WebsiteSVGIcon,\r\n      onClick: onClickWebsite,\r\n      key: 'Website',\r\n    },\r\n    {\r\n      title: i18n.getString(_TL_('Get stock images')),\r\n      description: i18n.getString(_TL_('Search Shutterstock for images')),\r\n      image: EntryCardSVGIcons.StockSVGIcon,\r\n      onClick: onClickStock,\r\n      key: 'Stock',\r\n    },\r\n  ];\r\n\r\n  if (isXandrIntegrationEnabled) {\r\n    cardData = [\r\n      ...cardData,\r\n      {\r\n        title: i18n.getString(_TL_('Add from Microsoft Invest')),\r\n        description: i18n.getString(_TL_('Search Invest for images')),\r\n        image: EntryCardSVGIcons.InvestSVGIcon,\r\n        onClick: onClickInvest,\r\n        key: 'Invest',\r\n      },\r\n    ];\r\n  }\r\n\r\n  if (!cardKeys.length) {\r\n    return cardData;\r\n  }\r\n  return cardData.filter(card => cardKeys.includes(card.key));\r\n};\r\n\r\nexport const getImageAssetLimitPerAccount = (aid, logger) => {\r\n  const assetLimit = getSizeLimitPerAccount(aid, 32);\r\n  /* istanbul ignore if */\r\n  if (assetLimit) {\r\n    return assetLimit;\r\n  }\r\n\r\n  logger.logError('get image asset limit data error', { aid });\r\n  return 5000;\r\n};\r\n\r\nexport const getFoldersLimitPerAccount = (aid, logger) => {\r\n  const foldersLimit = getSizeLimitPerAccount(aid, 97);\r\n  /* istanbul ignore if */\r\n  if (foldersLimit) {\r\n    return foldersLimit;\r\n  }\r\n  logger.logError('get folders limit data error', { aid });\r\n  return 1000;\r\n};\r\n\r\nexport const getVideoAssetLimitPerAccount = (aid, logger) => {\r\n  const assetLimit = getSizeLimitPerAccount(aid, 86);\r\n  /* istanbul ignore if */\r\n  if (assetLimit) {\r\n    return assetLimit;\r\n  }\r\n\r\n  logger.logError('get video asset limit data error', { aid });\r\n  return 1000;\r\n};\r\n\r\nexport const validate = (value) => {\r\n  const reg = /<|>|:|\\*|\\?|\"|\\\\|\\/|\\|/;\r\n  return !reg.test(value);\r\n};\r\n\r\nexport const getSearchQuery = ({ search = '', additionalQueries = {}, removeQueries = [] }) => {\r\n  let query = queryString.parse(search);\r\n  query = _.omit(query, (value, key) => _.includes(_.values(AdditionalQueries), key) || _.includes(removeQueries, key));\r\n  query = {\r\n    ...query,\r\n    ...additionalQueries,\r\n  };\r\n  return `?${queryString.stringify(query)}`;\r\n};\r\n\r\nexport const AIGCHandler = (isAdsStudioAIGCMVPEnabled, isAIGCRegionRestricted, notificationApi, i18n, enabledCallback) => {\r\n  if (isAdsStudioAIGCMVPEnabled && !isAIGCRegionRestricted) {\r\n    enabledCallback();\r\n  } else if (isAIGCRegionRestricted) {\r\n    notificationApi.showWarning(i18n.getString(_TL_('This feature isn\\'t available in all markets.')));\r\n  } else {\r\n    notificationApi.showWarning(i18n.getString(_TL_('This feature isn\\'t available yet, but it\\'s coming soon.')));\r\n  }\r\n};\r\n\r\nconst getRealUsedFlagValue = (preference, flagSuffix) => {\r\n  if (preference && flagSuffix) {\r\n    const realUsedFlagStr = `realUsedFlagIn${flagSuffix}`;\r\n    const realUsedFlagHandlerStr = `setRealUsedFlagIn${flagSuffix}`;\r\n    const realUsedFlag = preference[realUsedFlagStr];\r\n    const realUsedFlagHandler = preference[realUsedFlagHandlerStr];\r\n\r\n    return {\r\n      realUsedFlag,\r\n      realUsedFlagHandler,\r\n    };\r\n  }\r\n\r\n  return {};\r\n};\r\n\r\nexport const handleRealUsedFlag = (preference, flagSuffix) => { // flagSuffix: AssetLibraryApp or AssetLibraryPicker\r\n  const { realUsedFlag, realUsedFlagHandler } = getRealUsedFlagValue(preference, flagSuffix);\r\n\r\n  const {\r\n    haveUsed,\r\n  } = realUsedFlag || {};\r\n\r\n  if (!haveUsed && realUsedFlagHandler) {\r\n    realUsedFlagHandler();\r\n  }\r\n};\r\n\r\nexport const addAdStudioSurveyTriggerFlag = (preference, triggerFlag, usedFlagSuffix) => {\r\n  const { realUsedFlag } = getRealUsedFlagValue(preference, usedFlagSuffix);\r\n\r\n  const { haveUsed, timestamp } = realUsedFlag || {};\r\n\r\n  if (haveUsed) {\r\n    const currentTime = new Date().getTime();\r\n    const diffDay = (currentTime - timestamp) / 1000 / 60 / 60 / 24;\r\n    if (diffDay > 1 && window.survey && window.survey.surveyManager) {\r\n      window.survey[triggerFlag] = true;\r\n      window.survey.surveyManager.trigger({\r\n        checkIfSurveyIsOpen: true,\r\n      });\r\n    }\r\n  }\r\n};\r\n\r\nexport const removeAdStudioSurveyTriggerFlag = (triggerFlag) => {\r\n  if (window.survey) {\r\n    window.survey[triggerFlag] = false;\r\n  }\r\n};\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nconst commonButtonStyle = {\r\n  display: 'flex',\r\n  ...shorthands.padding('12px'),\r\n  justifyContent: 'center',\r\n  alignItems: 'center',\r\n  ...shorthands.gap('8px'),\r\n  ...shorthands.borderRadius('8px'),\r\n  backgroundColor: '#FFF',\r\n  boxShadow: '0 2px 4px 0 rgba(0, 0, 0, 0.14), 0 0 2px 0 rgba(0, 0, 0, 0.12)',\r\n  ...shorthands.border('none'),\r\n  ...shorthands.outline('none'),\r\n  maxHeight: '150px',\r\n  ...shorthands.overflow('hidden'),\r\n  minWidth: '230px',\r\n};\r\n\r\nconst commonTextStyle = {\r\n  fontFamily: 'Segoe UI',\r\n  fontStyle: 'normal',\r\n  textAlign: 'left',\r\n  ...shorthands.flex(1, 1, '0px'),\r\n  width: '100%',\r\n  ...shorthands.overflow('hidden'),\r\n  textOverflow: 'ellipsis',\r\n  whiteSpace: 'nowrap',\r\n};\r\n\r\nconst commonIconStyle = {\r\n  display: 'flex',\r\n  ...shorthands.margin('4px'),\r\n  justifyContent: 'center',\r\n  alignItems: 'center',\r\n  width: '20px',\r\n  height: '20px',\r\n};\r\n\r\nexport const useAssetsEntryCardStyle = makeStyles({\r\n  fillWidth: {\r\n    ...shorthands.flex(1, 0, '0px'),\r\n  },\r\n  assetsEntryCard: {\r\n    ...commonButtonStyle,\r\n    '& .title': {\r\n      ...commonTextStyle,\r\n      color: '#242424',\r\n      fontSize: '14px',\r\n      lineHeight: '20px',\r\n      fontWeight: 600,\r\n    },\r\n    '& .description': {\r\n      ...commonTextStyle,\r\n      color: '#616161',\r\n      fontSize: '12px',\r\n      lineHeight: '16px',\r\n      fontWeight: '400',\r\n    },\r\n    '& .text': {\r\n      ...shorthands.flex(1),\r\n      minWidth: '110px',\r\n      width: '100%',\r\n    },\r\n    '& .picture': {\r\n      width: '52px',\r\n      height: '52px',\r\n      '& img': {\r\n        width: '100%',\r\n        height: '100%',\r\n        objectFit: 'contain',\r\n      },\r\n    },\r\n    '& .icon': {\r\n      ...commonIconStyle,\r\n    },\r\n  },\r\n});\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { mergeClasses, Button } from '@fluentui/react-components';\r\nimport { Add20Regular } from '@fluentui/react-icons';\r\nimport { useAssetsEntryCardStyle } from './style';\r\n\r\nconst AssetsEntryCard = ({\r\n  id, title, description, imageSrc, onClick, isFillWidth, cardClassName,\r\n}) => {\r\n  const classes = useAssetsEntryCardStyle();\r\n\r\n  return (\r\n    <Button\r\n      id={id ? `${id}AssetEntryButton` : undefined}\r\n      onClick={onClick}\r\n      className={mergeClasses('entry-card', classes.assetsEntryCard, isFillWidth && classes.fillWidth, cardClassName)}\r\n    >\r\n      <div className=\"picture\">\r\n        <img src={imageSrc} alt={title} />\r\n      </div>\r\n      <div className=\"text\">\r\n        <div className=\"title\">\r\n          {title}\r\n        </div>\r\n        <div className=\"description\" title={description}>\r\n          {description}\r\n        </div>\r\n      </div>\r\n      <div className=\"icon\">\r\n        <Add20Regular />\r\n      </div>\r\n    </Button>\r\n  );\r\n};\r\nAssetsEntryCard.propTypes = {\r\n  id: PropTypes.string,\r\n  title: PropTypes.string.isRequired,\r\n  description: PropTypes.string.isRequired,\r\n  imageSrc: PropTypes.string.isRequired,\r\n  onClick: PropTypes.func.isRequired,\r\n  isFillWidth: PropTypes.bool,\r\n  cardClassName: PropTypes.string,\r\n};\r\n\r\nAssetsEntryCard.defaultProps = {\r\n  id: undefined,\r\n  isFillWidth: false,\r\n  cardClassName: '',\r\n};\r\n\r\nexport const AddAssetEntryCard = AssetsEntryCard;\r\n","import _ from 'underscore';\r\nimport React, { Children, cloneElement, forwardRef, useRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Overlay, Layer } from '@bingads-webui-react/fabric-control';\r\n\r\nimport { Button, makeStyles, mergeClasses } from '@fluentui/react-components';\r\nimport {\r\n  DrawerHeader,\r\n  DrawerHeaderTitle,\r\n  DrawerBody,\r\n  DrawerFooter,\r\n  DrawerOverlay,\r\n} from '@fluentui/react-drawer';\r\nimport { Dismiss24Regular } from '@fluentui/react-icons';\r\n\r\nconst TOP_BANNER_HEIGHT = 60;\r\n\r\nconst useStyles = makeStyles({\r\n  addMediaPanel: {\r\n    height: `calc(100vh - ${TOP_BANNER_HEIGHT}px)`,\r\n    top: 'auto',\r\n    bottom: '0px',\r\n  },\r\n  panelContent: {\r\n    '-ms-overflow-style': 'none',\r\n    scrollbarWidth: 'none',\r\n  },\r\n  overlay: {\r\n    zIndex: '2',\r\n  },\r\n  layer: {\r\n    zIndex: '1000',\r\n  },\r\n});\r\n\r\nexport const AdsStudioPanelContainer = forwardRef((props, ref) => {\r\n  const {\r\n    onRenderFooterContent,\r\n    isOpen,\r\n    dismiss,\r\n    headerText,\r\n    children,\r\n    size,\r\n    className,\r\n  } = props;\r\n\r\n  const overlayBodyRef = useRef(null);\r\n  const styles = useStyles();\r\n\r\n  return (\r\n    <>\r\n      <DrawerOverlay\r\n        ref={ref}\r\n        open={isOpen}\r\n        modalType=\"non-modal\"\r\n        position=\"end\"\r\n        size={size}\r\n        tabIndex={0}\r\n        className={mergeClasses(styles.addMediaPanel, 'ads-studio-panel-container-drawer-overlay', className)}\r\n      >\r\n        <DrawerHeader>\r\n          <DrawerHeaderTitle\r\n            action={\r\n              <Button\r\n                className=\"panel-close-button\"\r\n                appearance=\"subtle\"\r\n                aria-label=\"Close\"\r\n                icon={<Dismiss24Regular />}\r\n                onClick={dismiss}\r\n              />\r\n            }\r\n          >\r\n            {headerText}\r\n          </DrawerHeaderTitle>\r\n        </DrawerHeader>\r\n        <DrawerBody ref={overlayBodyRef} className={mergeClasses(styles.addMediaPanel, 'ads-studio-panel-container-drawer-overlay-body')}>\r\n          {Children.map(children, child =>\r\n            child && cloneElement(child, {\r\n              overlayBodyRef,\r\n            }))}\r\n        </DrawerBody>\r\n        <DrawerFooter>\r\n          {onRenderFooterContent}\r\n        </DrawerFooter>\r\n      </DrawerOverlay>\r\n      {\r\n        isOpen && (\r\n          <Layer className={mergeClasses('panel-layer', styles.layer)}>\r\n            <Overlay isDarkThemed className={styles.overlay} />\r\n          </Layer>\r\n        )\r\n      }\r\n    </>\r\n  );\r\n});\r\n\r\nAdsStudioPanelContainer.propTypes = {\r\n  onRenderFooterContent: PropTypes.func,\r\n  isOpen: PropTypes.bool,\r\n  dismiss: PropTypes.func,\r\n  headerText: PropTypes.string,\r\n  children: PropTypes.element,\r\n  size: PropTypes.string,\r\n  className: PropTypes.string,\r\n};\r\n\r\nAdsStudioPanelContainer.defaultProps = {\r\n  onRenderFooterContent: _.noop,\r\n  isOpen: false,\r\n  dismiss: _.noop,\r\n  headerText: '',\r\n  children: null,\r\n  size: 'large',\r\n  className: '',\r\n};\r\n\r\n","import React, { useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { Spinner, SpinnerSize } from '@fluentui/react';\r\n\r\nexport const AdsStudioSpinner = ({\r\n  useCustomSize,\r\n  className,\r\n  customStyle,\r\n}) => {\r\n  const spinnerStyles = useMemo(() => ({\r\n    circle: useCustomSize ? { width: 50, height: 50 } : null,\r\n    root: customStyle || {\r\n      width: '100%',\r\n      height: '100%',\r\n      margin: 'auto',\r\n    },\r\n  }), [customStyle, useCustomSize]);\r\n\r\n  return (\r\n    <Spinner\r\n      size={SpinnerSize.large}\r\n      styles={spinnerStyles}\r\n      className={className}\r\n    />\r\n  );\r\n};\r\n\r\n\r\nAdsStudioSpinner.propTypes = {\r\n  customStyle: PropTypes.shape({}),\r\n  useCustomSize: PropTypes.bool,\r\n  className: PropTypes.string,\r\n};\r\n\r\nAdsStudioSpinner.defaultProps = {\r\n  useCustomSize: false,\r\n  className: '',\r\n  customStyle: null,\r\n};\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nexport const useActionButtonStyles = makeStyles({\r\n  actionButton: {\r\n    fontSize: '13px',\r\n    fontStyle: 'normal',\r\n    fontWeight: 400,\r\n    backgroundColor: 'rgb(255,255,255,0.2)',\r\n    ...shorthands.borderRadius('999px'),\r\n    ...shorthands.border('none'),\r\n    ...shorthands.margin('6px'),\r\n  },\r\n});\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport { Button } from '@fluentui/react-components';\r\n\r\nimport { useActionButtonStyles } from '../styles/tiles-grid-cell-action-button-style';\r\n\r\nconst ActionButton = ({\r\n  text, icon: Icon, onClick, primary, className,\r\n}) => {\r\n  const classes = useActionButtonStyles();\r\n  const appearance = primary ? 'primary' : 'secondary';\r\n  return (\r\n    <Button\r\n      icon={<Icon />}\r\n      onClick={onClick}\r\n      className={classnames('cell-button', classes.actionButton, className)}\r\n      appearance={appearance}\r\n    >\r\n      {text}\r\n    </Button>\r\n  );\r\n};\r\n\r\nActionButton.propTypes = {\r\n  text: PropTypes.string.isRequired,\r\n  icon: PropTypes.elementType.isRequired,\r\n  onClick: PropTypes.func.isRequired,\r\n  primary: PropTypes.bool,\r\n  // injected\r\n  className: PropTypes.string.isRequired,\r\n};\r\n\r\nActionButton.defaultProps = {\r\n  primary: true,\r\n};\r\n\r\nexport const TilesGridCellActionButton = ActionButton;\r\n","import React, { useCallback, useMemo } from 'react';\r\n\r\nconst AdsStudoThemeContext = React.createContext({});\r\n\r\n// theme is a black box object which could be platform specific\r\n// and is passed down to this context provider, and then\r\n// passed to getStyles functions in withAdsStudioDefaultStyles\r\nexport const AdsStudioThemeProvider = ({ theme, componentStyles, children }) => {\r\n  //\r\n  // get styles for a specific components by component name\r\n  // the styles could be a function (theme) => styles, or an object\r\n  const getComponentStyles = useCallback((componentName) => {\r\n    const { components } = theme || {};\r\n    if (componentStyles && componentStyles[componentName]) {\r\n      return componentStyles[componentName];\r\n    }\r\n    if (components && components[componentName]) {\r\n      return components[componentName];\r\n    }\r\n    return undefined;\r\n  }, [componentStyles, theme]);\r\n\r\n  const contextValue = useMemo(() => ({\r\n    theme,\r\n    getComponentStyles,\r\n  }), [getComponentStyles, theme]);\r\n\r\n  return (\r\n    <AdsStudoThemeContext.Provider value={contextValue}>\r\n      {children}\r\n    </AdsStudoThemeContext.Provider>\r\n  );\r\n};\r\n\r\nexport const useAdsStudioTheme = () => React.useContext(AdsStudoThemeContext);\r\n","import _ from 'underscore';\r\nimport React, { useMemo } from 'react';\r\nimport { createUseStyles } from 'react-jss';\r\nimport hoistNonReactStatics from 'hoist-non-react-statics';\r\n\r\nimport { useAdsStudioTheme } from './ads-studio-theme-provider';\r\n\r\nconst emptyAdsStudioTheme = { theme: {}, getComponentStyles: () => { } };\r\nconst getDisplayName = Component => Component.displayName || Component.name || 'Component';\r\n\r\nfunction useThemedStyles({ componentName, prefixClassName, getDefaultStyles }) {\r\n  // get theme from ads studio themem context provider\r\n  const { theme, getComponentStyles } = useAdsStudioTheme() || emptyAdsStudioTheme;\r\n\r\n  // get themed styles\r\n  const themedStyles = useMemo(() => {\r\n    // check if there are any overriden styles for this component from theme provider\r\n    let overridenStyles = {};\r\n    if (getComponentStyles) {\r\n      // it could be an function or an object\r\n      const getOverridenStyles = getComponentStyles(componentName);\r\n      overridenStyles = _.isFunction(getOverridenStyles) ? getOverridenStyles(theme || {}) : getOverridenStyles;\r\n    }\r\n\r\n    // default styles\r\n    const defaultStyles = getDefaultStyles && getDefaultStyles(theme || {});\r\n\r\n    // merge styles\r\n    return { ...defaultStyles, ...overridenStyles };\r\n  }, [componentName, getComponentStyles, getDefaultStyles, theme]);\r\n\r\n  // create jss styles\r\n  const useStyles = useMemo(\r\n    () => createUseStyles(themedStyles, { name: prefixClassName || 'AS' }),\r\n    [prefixClassName, themedStyles]\r\n  );\r\n  const classes = useStyles() || {};\r\n\r\n  const styles = useMemo(() => ({ classes, themedStyles }), [classes, themedStyles]);\r\n  return styles;\r\n}\r\n\r\n// use an external theme to decouple the wrapped components with a specific theme provider\r\n// eslint-disable-next-line valid-jsdoc\r\n/**\r\n * @deprecated this function is deprecated, and will be removed later\r\n */\r\nexport function withAdsStudioStyles(WrappedComponent, getDefaultStyles, options) {\r\n  const {\r\n    prefixClassName, // the prefix of the class names generated by react-jss\r\n    useRawStyles, // also pass down the themed styles to the wrapped component, which may be used in Fluent UI components\r\n    componentName, // the description name of WrappedComponent\r\n  } = options || {};\r\n\r\n  const finalComponentName = componentName || getDisplayName(WrappedComponent);\r\n\r\n  const HOC = (props) => {\r\n    const { classes, themedStyles } = useThemedStyles({ componentName: finalComponentName, prefixClassName, getDefaultStyles });\r\n    return (\r\n      <WrappedComponent {...props} classes={classes} themedStyles={useRawStyles ? themedStyles : undefined} />\r\n    );\r\n  };\r\n\r\n  HOC.displayName = `withAdsStudioStyles(${finalComponentName})`;\r\n\r\n  hoistNonReactStatics(HOC, WrappedComponent);\r\n\r\n  return HOC;\r\n}\r\n\r\n","const positionFill = {\r\n  position: 'absolute',\r\n  left: 0,\r\n  top: 0,\r\n  right: 0,\r\n  bottom: 0,\r\n};\r\n\r\nexport const getCellOverlayStyle = () => ({\r\n  cellOverlayContainer: {\r\n    ...positionFill,\r\n    display: 'flex',\r\n    justifyContent: 'center',\r\n    alignItems: 'center',\r\n    background: 'linear-gradient(180deg, rgba(49, 34, 34, 0.3) 0%, rgba(49, 34, 34, 0.8) 53.12%, #312222 100%)',\r\n    opacity: 0,\r\n    transition: 'opacity 0.2s ease-out',\r\n    borderRadius: 6,\r\n  },\r\n});\r\n","\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\n\r\nimport { withAdsStudioStyles } from '../../../theme/with-ads-studio-styles';\r\nimport { getCellOverlayStyle } from '../styles/tiles-grid-cell-overlay-style';\r\n\r\nconst CellOverlay = ({ children, classes }) => (\r\n  <div className={classnames('cell-overlay', classes.cellOverlayContainer)}>\r\n    {children}\r\n  </div>\r\n);\r\n\r\nCellOverlay.propTypes = {\r\n  children: PropTypes.node,\r\n  classes: PropTypes.shape({\r\n    cellOverlayContainer: PropTypes.string,\r\n  }).isRequired,\r\n};\r\n\r\nCellOverlay.defaultProps = {\r\n  children: null,\r\n};\r\n\r\nexport const TilesGridCellOverlay = withAdsStudioStyles(CellOverlay, getCellOverlayStyle);\r\n","/* eslint-disable no-unused-vars */\r\nconst getCommonCellCardStyle = palette => ({\r\n  position: 'relative',\r\n  flexShrink: 1,\r\n  flexGrow: 1,\r\n  borderRadius: 6,\r\n  backgroundColor: palette.neutralLight,\r\n  filter: 'drop-shadow(0px 0.6px 1.8px rgba(0, 0, 0, 0.1)) drop-shadow(0px 3.2px 7.2px rgba(0, 0, 0, 0.13))',\r\n});\r\n\r\nexport const getCellCardStyle = ({ components, core: { palette = {} } = {} } = {}) => ({\r\n  cellCardContainer: {\r\n    ...getCommonCellCardStyle(palette),\r\n  },\r\n});\r\n\r\nexport const getCellCardWithOverlayStyle = ({ components, core: { palette = {} } = {} } = {}) => {\r\n  const activeStyle = {\r\n    '& .cell-overlay': {\r\n      opacity: 1,\r\n\r\n      '& .cell-overlay-actions': {\r\n        opacity: 1,\r\n        transform: 'translate(0px, -10px)',\r\n      },\r\n    },\r\n    '& .cell-decorative-label-container': {\r\n      '& .label-secondary-text': {\r\n        opacity: 1,\r\n        transform: 'translate(10px, 0px)',\r\n      },\r\n    },\r\n  };\r\n  return {\r\n    cellCardContainer: getCommonCellCardStyle(palette),\r\n\r\n    cellCardContainerOverflow: {\r\n      overflow: 'hidden',\r\n    },\r\n\r\n    cellCardWithOverlayContainer: {\r\n      '& .cell-overlay-actions': {\r\n        display: 'flex',\r\n        flex: 1,\r\n        flexDirection: 'row',\r\n        justifyContent: 'center',\r\n        alignItems: 'center',\r\n        height: '100%',\r\n        position: 'relative',\r\n        opacity: 0.2,\r\n        top: 10,\r\n        transition: 'opacity 0.5s 0.1s, transform 0.3s 0.1s',\r\n      },\r\n\r\n      '& .static-cell-overlay-items': {\r\n        position: 'absolute',\r\n        top: 0,\r\n        left: 0,\r\n        right: 0,\r\n        button: 0,\r\n      },\r\n\r\n      '&:hover, &:focus-within': activeStyle,\r\n    },\r\n    focused: activeStyle,\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 { TilesGridCellOverlay } from './tiles-grid-cell-overlay';\r\nimport { withAdsStudioStyles } from '../../../theme/with-ads-studio-styles';\r\nimport {\r\n  getCellCardStyle,\r\n  getCellCardWithOverlayStyle,\r\n} from '../styles/tiles-grid-cell-card-style';\r\n\r\nconst CellCardWithOverlay = ({\r\n  children,\r\n  isOverlayEnabled,\r\n  isCellFocused,\r\n  renderOverlayContent,\r\n  renderStaticOverlayContent,\r\n  onClick,\r\n  customCellCardClass,\r\n  classes,\r\n}) => {\r\n  const onClickFunc = (event) => {\r\n    if (onClick) {\r\n      onClick();\r\n    }\r\n    if (event && event.stopPropagation) { event.stopPropagation(); }\r\n    if (event && event.preventDefault) { event.preventDefault(); }\r\n  };\r\n\r\n  const onKeyDown = (event) => {\r\n    if (event.keyCode === 13) { // Enter key\r\n      onClickFunc();\r\n    }\r\n  };\r\n\r\n  return (\r\n    // eslint-disable-next-line jsx-a11y/no-static-element-interactions\r\n    <div\r\n      className={classnames(\r\n        'cell-content',\r\n        classes.containerClass || classes.cellCardContainer,\r\n        customCellCardClass || classes.cellCardContainerOverflow,\r\n        classes.cellCardWithOverlayContainer,\r\n        isCellFocused && classes.focused\r\n      )}\r\n      onClick={onClickFunc}\r\n      onKeyDown={onKeyDown}\r\n    >\r\n      {children}\r\n      {isOverlayEnabled && (\r\n        <TilesGridCellOverlay>\r\n          <div className=\"cell-overlay-actions\">\r\n            {renderOverlayContent ? renderOverlayContent() : null}\r\n          </div>\r\n          { renderStaticOverlayContent ?\r\n            <div className=\"static-cell-overlay-items\">\r\n              {renderStaticOverlayContent()}\r\n            </div>\r\n          : null}\r\n        </TilesGridCellOverlay>\r\n      )}\r\n    </div>\r\n  );\r\n};\r\n\r\nCellCardWithOverlay.propTypes = {\r\n  children: PropTypes.node.isRequired,\r\n  renderOverlayContent: PropTypes.func,\r\n  renderStaticOverlayContent: PropTypes.func,\r\n  isOverlayEnabled: PropTypes.bool,\r\n  isCellFocused: PropTypes.bool,\r\n  onClick: PropTypes.func,\r\n  customCellCardClass: PropTypes.string,\r\n  classes: PropTypes.shape({\r\n    containerClass: PropTypes.string,\r\n    cellCardContainer: PropTypes.string,\r\n    cellCardWithOverlayContainer: PropTypes.string,\r\n    cellCardContainerOverflow: PropTypes.string,\r\n    focused: PropTypes.string,\r\n  }).isRequired,\r\n};\r\n\r\nCellCardWithOverlay.defaultProps = {\r\n  isOverlayEnabled: true,\r\n  isCellFocused: false,\r\n  renderOverlayContent: null,\r\n  renderStaticOverlayContent: null,\r\n  customCellCardClass: undefined,\r\n  onClick: undefined,\r\n};\r\n\r\nconst CellCard = ({ children, classes, customCellCardClass }) => (\r\n  <div className={classnames('cell-content', classes.containerClass || classes.cellCardContainer, customCellCardClass)} >\r\n    {children}\r\n  </div>\r\n);\r\n\r\nCellCard.propTypes = {\r\n  children: PropTypes.node.isRequired,\r\n  customCellCardClass: PropTypes.string,\r\n  classes: PropTypes.shape({\r\n    containerClass: PropTypes.string,\r\n    cellCardContainer: PropTypes.string,\r\n  }).isRequired,\r\n};\r\n\r\nCellCard.defaultProps = {\r\n  customCellCardClass: undefined,\r\n};\r\n\r\nexport const TilesGridCellCard = withAdsStudioStyles(CellCard, getCellCardStyle);\r\nexport const TilesGridCellCardWithOverlay = withAdsStudioStyles(CellCardWithOverlay, getCellCardWithOverlayStyle);\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Icon } from '@fluentui/react';\r\n\r\nimport { withAdsStudioStyles } from '../../../theme/with-ads-studio-styles';\r\nimport { getGridDecorativeIconStyle } from '../styles/tiles-grid-cell-decorative-icon';\r\n\r\nconst CellDecorativeIcon = ({\r\n  iconName,\r\n  classes,\r\n  i18n,\r\n}) => (\r\n  <div className={classes.centerContainer}>\r\n    <div className={classes.circleContainer}>\r\n      <Icon className={classes.iconContent} iconName={iconName} />\r\n      <span className={classes.labelName}>{i18n.getString(_TL_('Video'))}</span>\r\n    </div>\r\n  </div>\r\n);\r\n\r\nCellDecorativeIcon.propTypes = {\r\n  iconName: PropTypes.string.isRequired,\r\n  classes: PropTypes.shape({\r\n    centerContainer: PropTypes.string,\r\n    circleContainer: PropTypes.string,\r\n    iconContent: PropTypes.string,\r\n    labelName: PropTypes.string,\r\n  }),\r\n  i18n: PropTypes.shape({\r\n    getString: PropTypes.func,\r\n  }).isRequired,\r\n};\r\n\r\nCellDecorativeIcon.defaultProps = {\r\n  classes: {},\r\n};\r\n\r\nexport const TilesGridCellDecorativeIcon\r\n  = withAdsStudioStyles(CellDecorativeIcon, getGridDecorativeIconStyle);\r\n","/* eslint-disable no-unused-vars */\r\nexport const getGridDecorativeIconStyle = ({ components, core: { palette = {} } = {} } = {}) => ({\r\n  centerContainer: {\r\n    position: 'absolute',\r\n    top: '50%',\r\n    left: '50%',\r\n    transform: 'translate(-50%, -50%)',\r\n  },\r\n  circleContainer: {\r\n    width: 80,\r\n    height: 41,\r\n    backgroundColor: 'rgb(50,49,48, 0.6)',\r\n    borderRadius: 4,\r\n    boxShadow: '0px 4px 16px rgb(0 0 0 / 14%)',\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    justifyContent: 'center',\r\n  },\r\n  iconContent: {\r\n    fontSize: 20,\r\n    color: palette.white,\r\n  },\r\n  labelName: {\r\n    fontSize: 16,\r\n    color: palette.white,\r\n    marginLeft: 5,\r\n  },\r\n});\r\n","import { makeStyles, shorthands, tokens } from '@fluentui/react-components';\r\n\r\nexport const useGridDecorativeLabelStyle = makeStyles({\r\n  tilesGridCellDecorativeLabel: {\r\n    color: tokens.colorNeutralForegroundInverted,\r\n    fontWeight: 600,\r\n    fontSize: '12px',\r\n    lineHeight: '16px',\r\n\r\n    '& .label-icon-and-text': {\r\n      display: 'flex',\r\n      ...shorthands.borderRadius('4px'),\r\n      ...shorthands.padding('2px', '8px', '2px', '4px'),\r\n      marginRight: '6px',\r\n      // background: 'linear-gradient(158.29deg, #0078D4 16.69%, #4400D4 85.76%)',\r\n      backgroundColor: tokens.colorNeutralBackgroundStatic,\r\n      '& .label-icon': {\r\n        marginRight: '4px',\r\n        fontSize: '16px',\r\n      },\r\n    },\r\n\r\n    '& .label-secondary-text': {\r\n      position: 'relative',\r\n      left: '-10px',\r\n      opacity: 0,\r\n      ...shorthands.transition('opacity', '0.5s', '0.1s', 'transform', '0.3s', '0.1s'),\r\n    },\r\n\r\n    '& .additional-icon-content': {\r\n      width: '25px',\r\n      height: '24px',\r\n      backgroundColor: 'rgb(50,49,48, 0.6)',\r\n      ...shorthands.borderRadius('4px'),\r\n      alignItems: 'center',\r\n      justifyContent: 'center',\r\n      display: 'flex',\r\n      marginRight: '8px',\r\n      position: 'absolute',\r\n      right: '50px',\r\n      '& .additional-icon': {\r\n        width: '17px',\r\n      },\r\n    },\r\n\r\n    '& .label-additional-text': {\r\n      position: 'absolute',\r\n      right: '0px',\r\n      '& .label-additional-content': {\r\n        backgroundColor: tokens.colorNeutralBackgroundStatic,\r\n        float: 'right',\r\n        ...shorthands.padding('4px'),\r\n        ...shorthands.borderRadius('4px'),\r\n      },\r\n    },\r\n  },\r\n\r\n  cellLabelDisplay: {\r\n    display: 'flex',\r\n    alignItems: 'center',\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 { videoIcon } from '../../../asset-images';\r\nimport { useGridDecorativeLabelStyle } from '../styles/tiles-grid-cell-decorative-label';\r\n\r\nconst CellDecorativeLabel = ({\r\n  text,\r\n  icon: Icon,\r\n  secondaryText,\r\n  additionaIconName,\r\n  additionalText,\r\n  customClass,\r\n}) => {\r\n  const classes = useGridDecorativeLabelStyle();\r\n\r\n  return (\r\n    <div className={classnames('cell-decorative-label-container', classes.tilesGridCellDecorativeLabel, customClass.cellLabel || classes.cellLabelDisplay)}>\r\n      {\r\n        (text || Icon) && (\r\n          <div className={classnames('label-icon-and-text', customClass.iconTextWrapper)}>\r\n            {Icon && <Icon className=\"label-icon\" />}\r\n            {text && <div className=\"label-text\">{text}</div>}\r\n          </div>\r\n        )\r\n      }\r\n      {secondaryText && <div className=\"label-secondary-text\">{secondaryText}</div>}\r\n      {\r\n        additionaIconName && (\r\n          <div className=\"additional-icon-content\">\r\n            <img src={videoIcon} className=\"additional-icon\" alt=\"\" />\r\n          </div>\r\n        )\r\n      }\r\n      {\r\n        additionalText && (\r\n          <div className=\"label-additional-text\">\r\n            <div className=\"label-additional-content\" aria-label={additionalText} role=\"presentation\">{additionalText}</div>\r\n          </div>\r\n        )\r\n      }\r\n    </div>\r\n  );\r\n};\r\n\r\nCellDecorativeLabel.propTypes = {\r\n  text: PropTypes.string,\r\n  icon: PropTypes.elementType,\r\n  additionaIconName: PropTypes.string,\r\n  secondaryText: PropTypes.string,\r\n  additionalText: PropTypes.string,\r\n  customClass: PropTypes.shape({\r\n    cellLabel: PropTypes.string,\r\n    iconTextWrapper: PropTypes.string,\r\n  }),\r\n};\r\n\r\nCellDecorativeLabel.defaultProps = {\r\n  text: null,\r\n  icon: null,\r\n  secondaryText: '',\r\n  additionalText: null,\r\n  additionaIconName: null,\r\n  customClass: {},\r\n};\r\n\r\nexport const TilesGridCellDecorativeLabel = CellDecorativeLabel;\r\n","/* eslint-disable max-len */\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport { IconButton } from '@fluentui/react';\r\n\r\nimport { withAdsStudioStyles } from '../../../theme/with-ads-studio-styles';\r\nimport { getCellDeletionButtonDecoratorStyle } from '../styles/tiles-grid-cell-deletion-button-decorator-style';\r\n\r\nconst iconProps = { iconName: 'Clear' };\r\n\r\nconst CellDeletionButtonDecorator = ({\r\n  item, onDelete, children, classes,\r\n}) => {\r\n  const onClick = (event) => {\r\n    if (onDelete) {\r\n      onDelete(item);\r\n    }\r\n    if (event.stopPropagation) { event.stopPropagation(); }\r\n    if (event.preventDefault) { event.preventDefault(); }\r\n  };\r\n\r\n  return (\r\n    <>\r\n      {children}\r\n      <div className={classnames('grid-cell-deletion-button-decorator', classes.cellDeletionButtonDecorator)}>\r\n        <IconButton\r\n          iconProps={iconProps}\r\n          onClick={onClick}\r\n          ariaLabel=\"Delete image\"\r\n          disabled={false}\r\n          className={classnames('delete-button', classes.deleteButton)}\r\n        />\r\n      </div>\r\n    </>\r\n  );\r\n};\r\n\r\nCellDeletionButtonDecorator.propTypes = {\r\n  item: PropTypes.shape({}).isRequired,\r\n  onDelete: PropTypes.func,\r\n  children: PropTypes.node.isRequired,\r\n  classes: PropTypes.shape({\r\n    cellDeletionButtonDecorator: PropTypes.string,\r\n    deleteButton: PropTypes.string,\r\n  }).isRequired,\r\n};\r\n\r\nCellDeletionButtonDecorator.defaultProps = {\r\n  onDelete: undefined,\r\n};\r\n\r\nexport const TilesGridCellDeletionButtonDecorator = withAdsStudioStyles(\r\n  CellDeletionButtonDecorator,\r\n  getCellDeletionButtonDecoratorStyle\r\n);\r\n","/* eslint-disable no-unused-vars */\r\nexport const getCellDeletionButtonDecoratorStyle = ({ components, core: { palette = {} } = {} } = {}) => ({\r\n  cellDeletionButtonDecorator: {\r\n    position: 'absolute',\r\n    bottom: 8,\r\n    right: 10,\r\n  },\r\n  deleteButton: {\r\n    backgroundColor: palette.themeLighter,\r\n    opacity: 0.7,\r\n    zIndex: 2,\r\n    padding: 0,\r\n    height: 24,\r\n    width: 24,\r\n    '&:hover': {\r\n      opacity: 0.9,\r\n    },\r\n    '&:active': {\r\n      opacity: 1,\r\n    },\r\n    '& .ms-Button-icon': {\r\n      margin: 0,\r\n    },\r\n  },\r\n});\r\n","const positionFill = {\r\n  position: 'absolute',\r\n  left: 0,\r\n  top: 0,\r\n  right: 0,\r\n  bottom: 0,\r\n};\r\n\r\nexport const getTilesGridCellImageStyles = () => ({\r\n  tilesGridCellImageContainer: {\r\n    '& .cell-image-state': {\r\n      ...positionFill,\r\n      display: 'flex',\r\n      justifyContent: 'center',\r\n      alignItems: 'center',\r\n    },\r\n  },\r\n  imageStateOverlayClass: {\r\n    position: 'absolute',\r\n    width: '100%',\r\n    height: '100%',\r\n    top: 0,\r\n    left: 0,\r\n  },\r\n  stateParent: {\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    justifyContent: 'center',\r\n    width: '100%',\r\n    height: '100%',\r\n  },\r\n  reloadBtn: {\r\n    zIndex: 1,\r\n  },\r\n});\r\n","import React, { useCallback, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { noop } from 'underscore';\r\nimport classnames from 'classnames';\r\n\r\nimport { Image as FluentImage, ImageFit, ImageLoadState } from '@fluentui/react';\r\nimport { ArrowClockwiseRegular } from '@fluentui/react-icons';\r\n\r\nimport { AdsStudioSpinner } from '../../ads-studio-spinner';\r\nimport { withAdsStudioStyles } from '../../../theme/with-ads-studio-styles';\r\nimport { TilesGridCellActionButton as ActionButton } from './tiles-grid-cell-action-button';\r\nimport { getTilesGridCellImageStyles } from '../styles/tiles-grid-cell-image';\r\n\r\nconst RETRY_COUNT = 3;\r\nconst RETRY_DEALY = 1000;\r\n\r\nconst CellImage = ({\r\n  src,\r\n  alt,\r\n  showSpinner,\r\n  onLoaded,\r\n  onError,\r\n  i18n,\r\n  onClick,\r\n  enableRetry,\r\n  classes,\r\n  customClasses,\r\n  onCustomizedSpinner,\r\n  imageFit,\r\n}) => {\r\n  //\r\n  const [imageLoadState, setImageLoadState] = useState(ImageLoadState.notLoaded);\r\n\r\n  const onLoadingStateChange = useCallback((s, onLoadError) => {\r\n    if (s === ImageLoadState.loaded) {\r\n      onLoaded(true);\r\n    } else if (s === ImageLoadState.error) {\r\n      onLoadError();\r\n      // don't set error state until all retrying are failed\r\n      return;\r\n    }\r\n    setImageLoadState(s);\r\n  }, [onLoaded]);\r\n\r\n  // retry image loading by creating a HTML Image element\r\n  const reloadImage = useCallback((onLoadError) => {\r\n    const img = new Image();\r\n    img.onerror = () => {\r\n      onLoadingStateChange(ImageLoadState.error, onLoadError);\r\n    };\r\n    img.onload = () => {\r\n      onLoadingStateChange(ImageLoadState.loaded);\r\n    };\r\n    onLoadingStateChange(ImageLoadState.notLoaded);\r\n    img.src = src;\r\n  }, [onLoadingStateChange, src]);\r\n\r\n  const onErrorWithRetry = useCallback((retryCount = RETRY_COUNT) => {\r\n    if (enableRetry && retryCount > 0) {\r\n      setTimeout(() => reloadImage(() => onErrorWithRetry(retryCount - 1)), RETRY_DEALY);\r\n    } else {\r\n      setImageLoadState(ImageLoadState.error);\r\n      if (onError) {\r\n        onError();\r\n      }\r\n    }\r\n  }, [enableRetry, onError, reloadImage]);\r\n\r\n  const onReloadImage = useCallback((event) => {\r\n    if (imageLoadState === ImageLoadState.error) {\r\n      reloadImage(onErrorWithRetry);\r\n    }\r\n    if (event.stopPropagation) { event.stopPropagation(); }\r\n    if (event.preventDefault) { event.preventDefault(); }\r\n  }, [imageLoadState, onErrorWithRetry, reloadImage]);\r\n\r\n  const onImageLoadingStateChange = useCallback((s) => {\r\n    onLoadingStateChange(s, onErrorWithRetry);\r\n  }, [onErrorWithRetry, onLoadingStateChange]);\r\n\r\n\r\n  return (\r\n    <div className={classnames('cell-image-frame', classes.tilesGridCellImageContainer, customClasses.containerClass)}>\r\n      <div className={classnames('cell-image-state', classes.imageStateOverlayClass)}>\r\n        <div className={classes.stateParent}>\r\n          {imageLoadState === ImageLoadState.notLoaded && showSpinner && (onCustomizedSpinner ?\r\n            onCustomizedSpinner() : (<AdsStudioSpinner />))\r\n          }\r\n          { imageLoadState === ImageLoadState.error && (\r\n            <ActionButton\r\n              text={i18n.getString(_TL_('Reload'))}\r\n              icon={ArrowClockwiseRegular}\r\n              onClick={onReloadImage}\r\n              primary={false}\r\n              className={classnames('reload-button', classes.reloadBtn)}\r\n            />\r\n          )}\r\n        </div>\r\n      </div>\r\n      <FluentImage\r\n        className={classnames('cell-main-image', customClasses.imageClass)}\r\n        imageFit={imageFit}\r\n        src={src}\r\n        alt={alt}\r\n        maximizeFrame\r\n        onLoadingStateChange={onImageLoadingStateChange}\r\n        onClick={onClick}\r\n      />\r\n    </div>\r\n  );\r\n};\r\n\r\nCellImage.propTypes = {\r\n  src: PropTypes.string.isRequired,\r\n  alt: PropTypes.string.isRequired,\r\n  showSpinner: PropTypes.bool,\r\n  i18n: PropTypes.shape({\r\n    getString: PropTypes.func,\r\n  }).isRequired,\r\n  onLoaded: PropTypes.func,\r\n  onError: PropTypes.func,\r\n  onClick: PropTypes.func,\r\n  onCustomizedSpinner: PropTypes.func,\r\n  enableRetry: PropTypes.bool,\r\n  classes: PropTypes.shape({\r\n    tilesGridCellImageContainer: PropTypes.string,\r\n    imageStateOverlayClass: PropTypes.string,\r\n    stateParent: PropTypes.string,\r\n    reloadBtn: PropTypes.string,\r\n  }).isRequired,\r\n  customClasses: PropTypes.shape({\r\n    containerClass: PropTypes.string,\r\n    imageClass: PropTypes.string,\r\n  }),\r\n  imageFit: PropTypes.number,\r\n};\r\n\r\nCellImage.defaultProps = {\r\n  showSpinner: true,\r\n  onLoaded: noop,\r\n  onError: noop,\r\n  onClick: noop,\r\n  enableRetry: true,\r\n  customClasses: {},\r\n  onCustomizedSpinner: undefined,\r\n  imageFit: ImageFit.cover,\r\n};\r\n\r\nexport const TilesGridCellImage = withAdsStudioStyles(CellImage, getTilesGridCellImageStyles);\r\n","import { makeResetStyles, shorthands, tokens } from '@fluentui/react-components';\r\n\r\nexport const useCellSectionDecoratorStyle = makeResetStyles({\r\n  width: '100%',\r\n  height: '100%',\r\n  '& .grid-cell-selection-decorator': {\r\n    width: '100%',\r\n    height: '100%',\r\n    ...shorthands.overflow('hidden'),\r\n  },\r\n  '& .selected-checkbox': {\r\n    position: 'absolute',\r\n    top: '6px',\r\n    right: '6px',\r\n  },\r\n  '& .selectedState': {\r\n    outlineStyle: 'solid',\r\n    outlineWidth: '4px',\r\n    outlineColor: tokens.colorBrandBackground,\r\n    ...shorthands.borderRadius('6px'),\r\n  },\r\n  '& .checkbox': {\r\n    backgroundColor: tokens.colorNeutralForegroundInverted,\r\n    zIndex: 2,\r\n    width: '20px',\r\n    height: '20px',\r\n    ...shorthands.borderRadius(tokens.borderRadiusSmall),\r\n    '& .fui-Checkbox__indicator': {\r\n      width: '20px',\r\n      height: '20px',\r\n      ...shorthands.margin(0),\r\n    },\r\n  },\r\n});\r\n","/* eslint-disable jsx-a11y/no-static-element-interactions */\r\n/* eslint-disable jsx-a11y/click-events-have-key-events */\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Checkbox, mergeClasses } from '@fluentui/react-components';\r\n\r\nimport { useCellSectionDecoratorStyle } from '../styles/tiles-grid-cell-selection-decorator-style';\r\n\r\nexport const TilesGridCellSelectionDecorator = ({\r\n  item, selected, onClick, children, ariaLabel, isFocused, classes,\r\n}) => {\r\n  const onClickFunc = (event) => {\r\n    if (onClick) {\r\n      onClick({ item, selected });\r\n    }\r\n    if (event.stopPropagation) { event.stopPropagation(); }\r\n    if (event.preventDefault) { event.preventDefault(); }\r\n  };\r\n\r\n  const onKeyDown = (event) => {\r\n    if (event.keyCode === 13) { // Enter key\r\n      onClickFunc(event);\r\n    }\r\n  };\r\n\r\n  const cellSelectionDecoratorWrapper = useCellSectionDecoratorStyle();\r\n\r\n  return (\r\n    <div className={mergeClasses(\r\n      classes.cellSelectionDecoratorWrapper,\r\n      cellSelectionDecoratorWrapper,\r\n      'grid-cell-selection-decorator-wrapper',\r\n      selected && classes.selectedStateWrapper,\r\n      selected ? 'selectedStateWrapper' : ''\r\n    )}\r\n    >\r\n      <div\r\n        className={mergeClasses(classes.cellSelectionDecorator, 'grid-cell-selection-decorator', selected && classes.selectedState, selected ? 'selectedState' : '')}\r\n        onClick={onClickFunc}\r\n        role=\"button\"\r\n        tabIndex={0}\r\n        onKeyDown={onKeyDown}\r\n      >\r\n        {children}\r\n      </div>\r\n      <div\r\n        className={mergeClasses('selected-checkbox', isFocused && 'visible-checkbox')}\r\n        onClick={onClickFunc}\r\n      >\r\n        <Checkbox\r\n          checked={selected}\r\n          ariaLabel={ariaLabel}\r\n          className=\"checkbox\"\r\n        />\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nTilesGridCellSelectionDecorator.propTypes = {\r\n  item: PropTypes.shape({}).isRequired,\r\n  selected: PropTypes.bool.isRequired,\r\n  onClick: PropTypes.func,\r\n  children: PropTypes.node.isRequired,\r\n  classes: PropTypes.shape({\r\n    cellSelectionDecorator: PropTypes.string,\r\n    cellSelectionDecoratorWrapper: PropTypes.string,\r\n    selectedState: PropTypes.string,\r\n    selectedStateWrapper: PropTypes.string,\r\n  }),\r\n  ariaLabel: PropTypes.string,\r\n  isFocused: PropTypes.bool,\r\n};\r\n\r\nTilesGridCellSelectionDecorator.defaultProps = {\r\n  onClick: undefined,\r\n  ariaLabel: '',\r\n  isFocused: false,\r\n  classes: {},\r\n};\r\n","import React, { useEffect, useMemo, useRef, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nexport const TilesGridLoadingCell = ({\r\n  onLoading, containerClass, children,\r\n}) => {\r\n  const gridCellContent = useRef(null);\r\n  const [hasSetUpObserver, setHasSetUpObserver] = useState(false);\r\n  const onLoadingCalled = useRef(false);\r\n\r\n  const observer = useMemo(() => {\r\n    onLoadingCalled.current = false;\r\n    if (window.IntersectionObserver && onLoading) {\r\n      return new IntersectionObserver((entries) => {\r\n        const [entry] = entries || [];\r\n\r\n        if (entry && entry.isIntersecting && onLoading && !onLoadingCalled.current) {\r\n          onLoading();\r\n          onLoadingCalled.current = true;\r\n\r\n          if (entry && entry.target) {\r\n            observer.unobserve(entry.target);\r\n          }\r\n        }\r\n      }, {\r\n        root: null,\r\n        rootMargin: '0px',\r\n        threshold: 0.0,\r\n      });\r\n    }\r\n    return null;\r\n  }, [onLoading]);\r\n\r\n  useEffect(() => {\r\n    if (observer && gridCellContent.current && !hasSetUpObserver) {\r\n      observer.observe(gridCellContent.current);\r\n      setHasSetUpObserver(true);\r\n    }\r\n  }, [observer, gridCellContent, hasSetUpObserver]);\r\n\r\n  return (\r\n    <div ref={gridCellContent} className={containerClass}>\r\n      {children}\r\n    </div>\r\n  );\r\n};\r\n\r\nTilesGridLoadingCell.propTypes = {\r\n  onLoading: PropTypes.func,\r\n  children: PropTypes.node,\r\n  containerClass: PropTypes.string,\r\n};\r\n\r\nTilesGridLoadingCell.defaultProps = {\r\n  onLoading: null,\r\n  children: null,\r\n  containerClass: undefined,\r\n};\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nconst commonStyles = {\r\n  boxShadow: '0px 1.47522px 4.42567px rgba(0, 0, 0, 0.2), inset 0.295044px -0.295044px 0.590089px rgba(0, 0, 0, 0.2), inset -0.590089px 0.590089px 1.47522px rgba(255, 255, 255, 0.3)',\r\n  ...shorthands.borderRadius('2px'),\r\n};\r\n\r\nexport const useFolderIconStyle = makeStyles({\r\n  folderIconContainer: {\r\n    position: 'relative',\r\n    height: '52px',\r\n    width: '68px',\r\n\r\n    '& .folder-tag': {\r\n      width: '50%',\r\n      height: '28.36%',\r\n      ...commonStyles,\r\n    },\r\n\r\n    '& .folder-content': {\r\n      width: '100%',\r\n      height: '85.84%',\r\n      ...commonStyles,\r\n\r\n      position: 'absolute',\r\n      left: 0,\r\n      bottom: 0,\r\n      ...shorthands.overflow('hidden'),\r\n    },\r\n  },\r\n  folderTag: {\r\n    backgroundColor: '#1F65F1',\r\n  },\r\n  emptyFolderTag: {\r\n    backgroundColor: '#A0A0A0',\r\n  },\r\n  folderContent: {\r\n    backgroundColor: '#1F65F1',\r\n  },\r\n  emptyFolderContent: {\r\n    backgroundColor: '#C4C4C4',\r\n  },\r\n});\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { mergeClasses, Image } from '@fluentui/react-components';\r\n\r\nimport { useFolderIconStyle } from './style';\r\n\r\nconst FolderIconInternal = ({\r\n  thumbnailImageUrl, isEmptyFolder, folderIconRootClassName,\r\n}) => {\r\n  const classes = useFolderIconStyle();\r\n  return (\r\n    <div className={mergeClasses(classes.folderIconContainer, folderIconRootClassName)}>\r\n      <div className={mergeClasses('folder-tag', isEmptyFolder ? classes.emptyFolderTag : classes.folderTag)} />\r\n      <div className={mergeClasses('folder-content', isEmptyFolder ? classes.emptyFolderContent : classes.folderContent)} >\r\n        { thumbnailImageUrl && <Image\r\n          fit=\"cover\"\r\n          src={thumbnailImageUrl}\r\n          alt=\"folder icon\"\r\n        />}\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nFolderIconInternal.propTypes = {\r\n  thumbnailImageUrl: PropTypes.string,\r\n  folderIconRootClassName: PropTypes.string,\r\n  isEmptyFolder: PropTypes.bool,\r\n};\r\n\r\nFolderIconInternal.defaultProps = {\r\n  thumbnailImageUrl: undefined,\r\n  folderIconRootClassName: '',\r\n  isEmptyFolder: false,\r\n};\r\n\r\nexport const FolderIcon = FolderIconInternal;\r\n","import { makeStyles } from '@fluentui/react-components';\r\n\r\nexport const useCellSectionDecoratorStyle = makeStyles({\r\n  dragPreview: {\r\n    width: '100px',\r\n    height: '100px',\r\n    display: 'block',\r\n    position: 'relative',\r\n  },\r\n  dragPreviewImage: {\r\n    width: '100%',\r\n    height: '100%',\r\n    objectFit: 'cover',\r\n    opacity: 0.5,\r\n  },\r\n  dragPreviewFolderWrapper: {\r\n    width: '100%',\r\n    height: '100%',\r\n    display: 'flex',\r\n    justifyContent: 'center',\r\n    alignItems: 'center',\r\n  },\r\n  dragPreviewFolder: {\r\n    width: '100px',\r\n    height: '76px',\r\n  },\r\n  dragPreviewCount: {\r\n    position: 'absolute',\r\n    top: 0,\r\n    left: 0,\r\n    textAlign: 'center',\r\n    verticalAlign: 'middle',\r\n    width: '100px',\r\n    height: '100px',\r\n    lineHeight: '100px',\r\n    backgroundColor: 'rgba(0,0,0,0.5)',\r\n    color: 'white',\r\n    fontSize: '14px',\r\n  },\r\n});\r\n","import React, { useCallback, useMemo } from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\n\r\nimport { FolderIcon } from '../../folder-icon-component';\r\nimport { useCellSectionDecoratorStyle } from '../styles/tiles-grid-cell-drag-decorator-style';\r\n\r\nexport const TilesGridCellDragDecorator = ({\r\n  draggable,\r\n  children,\r\n  item,\r\n  dragItemsLength,\r\n  onDrag,\r\n  i18n,\r\n  selected,\r\n}) => {\r\n  const classes = useCellSectionDecoratorStyle();\r\n\r\n  const dragPreviewDescription = useMemo(() => {\r\n    let dragItemsLengthInner = dragItemsLength;\r\n    if (!selected) {\r\n      dragItemsLengthInner += 1;\r\n    }\r\n    if (dragItemsLengthInner > 1) {\r\n      return i18n.getString(_TL_('{{dragItemsLength}} items'), { dragItemsLength: dragItemsLengthInner });\r\n    }\r\n    return i18n.getString(_TL_('1 item'));\r\n  }, [dragItemsLength, i18n, selected]);\r\n\r\n  const renderDragPreview = useCallback(() => (\r\n    <div className={classes.dragPreview}>\r\n      {\r\n          item.url || item.thumbnailUrl ? (\r\n            <img\r\n              src={item.thumbnailUrl || item.url}\r\n              className={classes.dragPreviewImage}\r\n              alt=\"drag preview\"\r\n            />\r\n          ) : (\r\n            <div className={classes.dragPreviewFolderWrapper}>\r\n              <FolderIcon\r\n                folderIconRootClassName={classes.dragPreviewFolder}\r\n                isEmptyFolder={false}\r\n              />\r\n            </div>\r\n          )\r\n        }\r\n      <div className={classes.dragPreviewCount}>{dragPreviewDescription}</div>\r\n    </div>\r\n  ), [classes, dragPreviewDescription, item.thumbnailUrl, item.url]);\r\n\r\n  const onDragStart = useCallback((event) => {\r\n    onDrag({ item });\r\n    const container = document.createElement('div');\r\n    const DragPreview = renderDragPreview;\r\n    ReactDOM.render(<DragPreview />, container);\r\n    const domElement = container.firstChild;\r\n    document.body.appendChild(domElement);\r\n\r\n    if (event && event.dataTransfer && event.dataTransfer.setDragImage) {\r\n      event.dataTransfer.setDragImage(domElement, 0, 0);\r\n    }\r\n  }, [item, onDrag, renderDragPreview]);\r\n\r\n  return (\r\n    draggable ?\r\n      <div\r\n        className={classnames('grid-cell-drag-drop-decorator')}\r\n        onDragStart={onDragStart}\r\n        draggable\r\n      >\r\n        {children}\r\n      </div> : children\r\n  );\r\n};\r\n\r\nTilesGridCellDragDecorator.propTypes = {\r\n  draggable: PropTypes.bool,\r\n  children: PropTypes.node.isRequired,\r\n  i18n: PropTypes.shape({\r\n    getString: PropTypes.func,\r\n  }).isRequired,\r\n  item: PropTypes.shape({}),\r\n  onDrag: PropTypes.func,\r\n  dragItemsLength: PropTypes.number,\r\n  selected: PropTypes.bool,\r\n};\r\n\r\nTilesGridCellDragDecorator.defaultProps = {\r\n  draggable: false,\r\n  item: {},\r\n  onDrag: () => null,\r\n  dragItemsLength: 1,\r\n  selected: false,\r\n};\r\n","import { makeResetStyles, tokens } from '@fluentui/react-components';\r\n\r\nexport const useFolderGridCellDropStyle = makeResetStyles({\r\n  outlineOffset: '6px',\r\n  outlineStyle: 'dashed',\r\n  outlineWidth: '2px',\r\n  outlineColor: tokens.colorBrandBackground,\r\n});\r\n","import React, { useCallback, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\n\r\nimport { useFolderGridCellDropStyle } from '../styles/tiles-grid-cell-drop-decorator-style';\r\n\r\nexport const TilesGridCellDropDecorator = ({\r\n  children,\r\n  droppable,\r\n  onDrop,\r\n  customClassName,\r\n}) => {\r\n  const [isOver, setIsOver] = useState(false);\r\n\r\n  const tilesGridCellDropOver = useFolderGridCellDropStyle();\r\n\r\n  const onDragOver = useCallback((event) => {\r\n    event.preventDefault();\r\n    setIsOver(true);\r\n  }, []);\r\n\r\n  const onDragLeave = useCallback(() => {\r\n    setIsOver(false);\r\n  }, []);\r\n\r\n  const onDropHandler = useCallback((event) => {\r\n    event.preventDefault();\r\n    setIsOver(false);\r\n    onDrop();\r\n  }, [onDrop]);\r\n\r\n  return (\r\n    droppable ? (\r\n      <div\r\n        onDragOver={onDragOver}\r\n        onDragLeave={onDragLeave}\r\n        onDrop={onDropHandler}\r\n        className={classNames('dropZone', isOver ? (customClassName || tilesGridCellDropOver) : '')}\r\n      >\r\n        {children}\r\n      </div>\r\n    ) : children\r\n  );\r\n};\r\n\r\nTilesGridCellDropDecorator.propTypes = {\r\n  children: PropTypes.node.isRequired,\r\n  droppable: PropTypes.bool,\r\n  onDrop: PropTypes.func,\r\n  customClassName: PropTypes.string,\r\n};\r\n\r\nTilesGridCellDropDecorator.defaultProps = {\r\n  droppable: false,\r\n  onDrop: () => null,\r\n  customClassName: '',\r\n};\r\n","import { DEFAULT_PAGE_SIZE } from '../../model';\r\n\r\nconst ROW_HEIGHT = 275;\r\nconst MAX_COLUMN_WIDTH = 350;\r\nconst MIN_COLUMN_WIDTH = 250;\r\nconst DEFAULT_ASPECT_RATIO = 0.9;\r\n\r\nexport const DEFAULT_CONFIG = {\r\n  // if this value is set, rowHeight vallue is ignored, and\r\n  // the row height is calculated by columnWidth * aspectRatio\r\n  aspectRatio: DEFAULT_ASPECT_RATIO,\r\n  maxColumnWidth: MAX_COLUMN_WIDTH,\r\n  minColumnWidth: MIN_COLUMN_WIDTH,\r\n  rowHeight: ROW_HEIGHT,\r\n  preferredCellsPerPage: DEFAULT_PAGE_SIZE,\r\n};\r\n","import React, { useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\n\r\nimport { Grid } from '@bingads-webui-campaign-react/ads-studio-shared-components';\r\nimport { withAdsStudioStyles } from '../../theme/with-ads-studio-styles';\r\n\r\nimport { getTilesGridStyle } from './styles/tiles-grid-style';\r\nimport { DEFAULT_CONFIG } from './default-grid-config';\r\n\r\n\r\nconst TilesGridInternal = ({\r\n  items,\r\n  onRenderCell,\r\n  config,\r\n  classes,\r\n}) => {\r\n  const onRenderCellImpl = useCallback((gridItem) => {\r\n    const { item } = gridItem;\r\n    const { _index } = item;\r\n    return (\r\n      <div className=\"tiles-grid-cell\">\r\n        {onRenderCell({ item, index: _index })}\r\n      </div>\r\n    );\r\n  }, [onRenderCell]);\r\n\r\n  return (\r\n    <div className={classNames('tiles-grid-container', classes.tilesGridContainer)}>\r\n      <Grid\r\n        items={items}\r\n        renderItem={onRenderCellImpl}\r\n        columnWidth={config.width || undefined}\r\n        rowHeight={config.height || undefined}\r\n        gridMode={config.gridMode || undefined}\r\n        columnPadding={config.columnPadding || undefined}\r\n        rowPadding={config.rowPadding || undefined}\r\n        scrollContainer={config.scrollContainer}\r\n        maxColumns={config.maxColumns}\r\n        minItemHeight={config.minItemHeight}\r\n      />\r\n    </div>\r\n  );\r\n};\r\n\r\nTilesGridInternal.propTypes = {\r\n  items: PropTypes.arrayOf(PropTypes.shape({})),\r\n  onRenderCell: PropTypes.func.isRequired,\r\n  config: PropTypes.shape({\r\n    aspectRatio: PropTypes.number,\r\n    maxColumnWidth: PropTypes.number,\r\n    minColumnWidth: PropTypes.number,\r\n    rowHeight: PropTypes.number,\r\n    preferredCellsPerPage: PropTypes.number,\r\n    columnPadding: PropTypes.number,\r\n  }),\r\n  // injected styles\r\n  classes: PropTypes.shape({\r\n    tilesGridContainer: PropTypes.string,\r\n  }).isRequired,\r\n};\r\n\r\nTilesGridInternal.defaultProps = {\r\n  items: [],\r\n  config: DEFAULT_CONFIG,\r\n};\r\n\r\nexport const TilesGrid = withAdsStudioStyles(TilesGridInternal, getTilesGridStyle);\r\n","export const getTilesGridStyle = () => ({\r\n  tilesGridContainer: {\r\n    // grid styles\r\n    '& .tiles-grid': {\r\n      overflow: 'hidden',\r\n      position: 'relative',\r\n      '& .ms-List-page': {\r\n        overflowX: 'hidden',\r\n      },\r\n    },\r\n\r\n    '& .tiles-grid-list-cell': {\r\n      float: 'left', // make the cells shown as grid style\r\n    },\r\n\r\n    // cell styles\r\n    '& .tiles-grid-cell': {\r\n      position: 'relative',\r\n      boxSizing: 'border-box',\r\n      width: '100%',\r\n      height: '100%',\r\n    },\r\n  },\r\n});\r\n","/* eslint-disable max-len */\r\nimport _ from 'underscore';\r\nimport React, { useCallback, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { TilesGrid } from './tiles-grid';\r\n\r\nfunction findItem(items, itemToFind, itemKey) {\r\n  return _.find(items, item => item[itemKey] === itemToFind[itemKey]);\r\n}\r\n\r\nfunction addItem(items, itemToAdd, itemKey) {\r\n  if (!findItem(items, itemToAdd, itemKey)) {\r\n    return [[...items, itemToAdd], true];\r\n  }\r\n  return [items, false];\r\n}\r\n\r\nfunction removeItem(items, itemToRemove, itemKey) {\r\n  if (findItem(items, itemToRemove, itemKey)) {\r\n    return [_.filter(items, item => item[itemKey] !== itemToRemove[itemKey]), true];\r\n  }\r\n  return [items, false];\r\n}\r\n\r\nexport const MultiSelectionGrid = ({\r\n  itemKey,\r\n  onSelectionChange,\r\n  onRenderCell,\r\n  items,\r\n  selectedItems: propSelectedItems,\r\n  ...rest\r\n}) => {\r\n  const selectedItems = useMemo(() => propSelectedItems || [], [propSelectedItems]);\r\n\r\n  // force to re-render when selection changed\r\n  // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  const allItems = useMemo(() => ([...items || []]), [items, selectedItems]);\r\n\r\n  const selectItem = useCallback((item, selected) => {\r\n    const action = selected ? addItem : removeItem;\r\n    const [newSelectedItems, updated] = action(selectedItems, item, itemKey);\r\n    if (updated) {\r\n      if (onSelectionChange) {\r\n        onSelectionChange({ item, selected, selectedItems: newSelectedItems });\r\n      }\r\n    }\r\n  }, [itemKey, onSelectionChange, selectedItems]);\r\n\r\n  const onRenderCellImpl = useCallback(({ item, index }) => {\r\n    const selected = !!findItem(selectedItems, item, itemKey);\r\n    const fnSelectItem = _.partial(selectItem, item);\r\n    return onRenderCell({\r\n      item, index, selected, selectItem: fnSelectItem,\r\n    });\r\n  }, [itemKey, onRenderCell, selectItem, selectedItems]);\r\n\r\n  return <TilesGrid onRenderCell={onRenderCellImpl} items={allItems} config={rest.config} />;\r\n};\r\n\r\nMultiSelectionGrid.propTypes = {\r\n  itemKey: PropTypes.string,\r\n  items: PropTypes.arrayOf(PropTypes.shape({})),\r\n  selectedItems: PropTypes.arrayOf(PropTypes.shape({})),\r\n  onSelectionChange: PropTypes.func,\r\n  onRenderCell: PropTypes.func.isRequired,\r\n};\r\n\r\nMultiSelectionGrid.defaultProps = {\r\n  itemKey: 'id',\r\n  items: [],\r\n  selectedItems: [],\r\n  onSelectionChange: undefined,\r\n};\r\n","export const getSectionTilesGridStyle = () => ({\r\n  sectionTilesGridContainer: {\r\n    '& .section-title': {\r\n      fontSize: 12,\r\n      fontWeight: 400,\r\n      lineHeight: '16px',\r\n      color: '#424242',\r\n      marginBottom: 8,\r\n      marginTop: 8,\r\n      '&:first-child': {\r\n        marginTop: 0,\r\n      },\r\n    },\r\n    '& .section-loading': {\r\n      margin: 'auto',\r\n    },\r\n  },\r\n});\r\n","import _ from 'underscore';\r\nimport React, { useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\n\r\nimport { AdsStudioSpinner } from '../ads-studio-spinner';\r\nimport { MultiSelectionGrid } from './multi-selection-grid';\r\nimport { getSectionTilesGridStyle } from './styles/section-tiles-grid-style';\r\nimport { TilesGrid } from './tiles-grid';\r\nimport { TilesGridLoadingCell } from './grid-cells';\r\nimport { withAdsStudioStyles } from '../../theme/with-ads-studio-styles';\r\n\r\nconst SectionTilesGridInternal = ({\r\n  sectionData, onRenderCell, loadNextPage, multiSelectionEnabled, onSelectionChange, onRenderLoadingCell, classes, ...otherProps\r\n}) => {\r\n  const wrappedSectionData = useMemo(() => sectionData.map(section => ({\r\n    onRenderCell: (params) => {\r\n      const { sectionName } = section || {};\r\n      return onRenderCell({ ...params, sectionName });\r\n    },\r\n    // to support selectoin on grid\r\n    onSelectionChange: onSelectionChange ?\r\n      (params) => {\r\n        const { sectionName } = section || {};\r\n        onSelectionChange({ ...params, sectionName });\r\n      } : undefined,\r\n    onRenderLoadingCell: () => {\r\n      const { items, totalItemCount } = section || {};\r\n      if (onRenderLoadingCell) {\r\n        return onRenderLoadingCell({ items, totalItemCount });\r\n      }\r\n      if (items.length > 0 && items.length < totalItemCount) {\r\n        return <TilesGridLoadingCell onLoading={loadNextPage} key={items.length} ><div className=\"section-loading\"><AdsStudioSpinner useCustomSize /></div></TilesGridLoadingCell>;\r\n      }\r\n      return null;\r\n    },\r\n    ...section,\r\n  })), [loadNextPage, onRenderCell, onRenderLoadingCell, onSelectionChange, sectionData]);\r\n\r\n  // don't show section title if only one section has data\r\n  const countOfSectionsWithData =\r\n    _.filter(sectionData, sec => sec.totalItemCount > 0).length;\r\n\r\n  const GridComponent = multiSelectionEnabled ? MultiSelectionGrid : TilesGrid;\r\n\r\n  return (\r\n    <div className={classnames(classes.sectionTilesGridContainer, classes.gridConainerClass)}>\r\n      {wrappedSectionData.map(({\r\n        sectionName,\r\n        sectionTitle,\r\n        sectionClassName,\r\n        items,\r\n        config,\r\n        totalItemCount,\r\n        ...rest\r\n      }) => (\r\n        (items && items.length >= 0) ?\r\n          <div\r\n            key={sectionName}\r\n            className={classnames(sectionClassName, 'tiles-grid-section')}\r\n          >\r\n            {countOfSectionsWithData > 1 && items.length > 0 ? <div className=\"section-title\" role=\"heading\" aria-level=\"2\">{sectionTitle}</div> : null}\r\n            {\r\n              items.length > 0 &&\r\n              <GridComponent\r\n                items={items}\r\n                {...rest}\r\n                {...otherProps}\r\n                config={config}\r\n              />\r\n            }\r\n            {\r\n              rest.onRenderLoadingCell()\r\n            }\r\n          </div>\r\n       : null\r\n      ))}\r\n    </div>\r\n  );\r\n};\r\n\r\nSectionTilesGridInternal.propTypes = {\r\n  sectionData: PropTypes.arrayOf(PropTypes.shape({\r\n    sectionName: PropTypes.string,\r\n    sectionTitle: PropTypes.string,\r\n    sectionClassName: PropTypes.string,\r\n    items: PropTypes.arrayOf(PropTypes.shape({})),\r\n    selectedItems: PropTypes.arrayOf(PropTypes.shape({})), // to support multiple selection\r\n    totalItemCount: PropTypes.number, // total item count, including not loaded items\r\n    config: PropTypes.shape({\r\n      aspectRatio: PropTypes.number,\r\n      maxColumnWidth: PropTypes.number,\r\n      minColumnWidth: PropTypes.number,\r\n      rowHeight: PropTypes.number,\r\n      preferredCellsPerPage: PropTypes.number,\r\n    }),\r\n  })).isRequired,\r\n  onRenderCell: PropTypes.func.isRequired,\r\n  loadNextPage: PropTypes.func,\r\n\r\n  multiSelectionEnabled: PropTypes.bool,\r\n  onSelectionChange: PropTypes.func,\r\n  onRenderLoadingCell: PropTypes.func,\r\n\r\n  classes: PropTypes.shape({\r\n    sectionTilesGridContainer: PropTypes.string,\r\n    gridConainerClass: PropTypes.string,\r\n  }).isRequired,\r\n};\r\n\r\nSectionTilesGridInternal.defaultProps = {\r\n  multiSelectionEnabled: false,\r\n  onSelectionChange: undefined,\r\n  loadNextPage: _.noop,\r\n  onRenderLoadingCell: undefined,\r\n};\r\n\r\nexport const SectionTilesGrid = withAdsStudioStyles(SectionTilesGridInternal, getSectionTilesGridStyle);\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nexport const useStyle = 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});\r\n","/* eslint-disable object-curly-newline */\r\nimport _ from 'underscore';\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { Tooltip, mergeClasses } from '@fluentui/react-components';\r\nimport { useStyle } from './styles';\r\n\r\nexport const splitString = (text, substr) => {\r\n  //\r\n  if (!text || !substr || _.isEmpty(substr)) {\r\n    return [{ matched: false, text, idx: 0 }];\r\n  }\r\n\r\n  // case-insensitive\r\n  const lowerText = text.toLowerCase();\r\n  const lowerSubstr = substr.toLowerCase();\r\n\r\n  let startIndex = 0;\r\n  const fragments = [];\r\n\r\n  while (startIndex < text.length) {\r\n    const index = lowerText.indexOf(lowerSubstr, startIndex);\r\n    if (index === -1) {\r\n      fragments.push({ matched: false, text: text.substring(startIndex) });\r\n      break;\r\n    } else if (index > startIndex) {\r\n      fragments.push({ matched: false, text: text.substring(startIndex, index) });\r\n      fragments.push({ matched: true, text: text.substring(index, index + substr.length) });\r\n      startIndex = index + substr.length;\r\n    } else {\r\n      fragments.push({ matched: true, text: text.substring(index, index + substr.length) });\r\n      startIndex = index + substr.length;\r\n    }\r\n  }\r\n\r\n  // add an idx field for each fragment\r\n  const fragmentsWithIndex = fragments.map((f, idx) => ({ ...f, idx }));\r\n  return fragmentsWithIndex;\r\n};\r\n\r\nexport const TextWithHighlightImp = ({\r\n  text: txt, highlightedText, highlightedClassname, enableTooltip,\r\n}) => {\r\n  const textFragments = splitString(txt, highlightedText);\r\n\r\n  const content = (\r\n    <span className=\"highlight-text-content\">\r\n      {\r\n        textFragments.map(({ matched, text, idx }) =>\r\n          <span key={`f${idx}`} className={matched ? mergeClasses('highlighted-text', highlightedClassname) : 'normal-text'}>{text}</span>)\r\n      }\r\n    </span>\r\n  );\r\n\r\n  const classes = useStyle();\r\n\r\n  return enableTooltip ? (\r\n    <Tooltip\r\n      content={<span className=\"highlight-tooltip-content\">{txt}</span>}\r\n      relationship=\"inaccessible\"\r\n      withArrow\r\n      positioning=\"above-start\"\r\n    >\r\n      <div className={classes.overflow}>\r\n        {content}\r\n      </div>\r\n    </Tooltip>\r\n  ) : content;\r\n};\r\n\r\nTextWithHighlightImp.propTypes = {\r\n  text: PropTypes.string,\r\n  highlightedText: PropTypes.string,\r\n  highlightedClassname: PropTypes.string,\r\n  enableTooltip: PropTypes.bool,\r\n};\r\n\r\nTextWithHighlightImp.defaultProps = {\r\n  text: '',\r\n  highlightedText: undefined,\r\n  highlightedClassname: 'highlighted-text',\r\n  enableTooltip: false,\r\n};\r\n\r\nexport const TextWithHighlight = TextWithHighlightImp;\r\n","import { shorthands, tokens } from '@fluentui/react-components';\r\n\r\nexport const positionFill = {\r\n  position: 'absolute',\r\n  left: 0,\r\n  top: 0,\r\n  right: 0,\r\n  bottom: 0,\r\n};\r\n\r\nexport const getSharedAssetContainerStyle = () => ({\r\n  display: 'flex',\r\n  flexDirection: 'column',\r\n  flexWrap: 'nowrap',\r\n  boxSizing: 'border-box',\r\n\r\n  // name and ID\r\n  '& .cell-description': {\r\n    display: 'flex',\r\n    flexShrink: 0,\r\n    flexGrow: 0,\r\n    justifyContent: 'space-between',\r\n    fontWeight: 600,\r\n    fontSize: '12px',\r\n    ...shorthands.margin('12px', '4px'),\r\n\r\n    '& .cell-description-name': {\r\n      flexShrink: 1,\r\n      flexGrow: 1,\r\n      ...shorthands.overflow('hidden'),\r\n      marginRight: '12px',\r\n    },\r\n\r\n    '& .cell-description-id': {\r\n      flexShrink: 0,\r\n      flexGrow: 0,\r\n    },\r\n\r\n    '& .highlighted-text': {\r\n      backgroundColor: tokens.colorPaletteYellowBackground3,\r\n    },\r\n  },\r\n});\r\n\r\nexport const getSharedMultiSelectingCellStyles = () => ({\r\n  // only show checkbox on overlay if it is NOT in multi-selecting mode\r\n  selectableCardContainerAutoHideCheckbox: {\r\n    '& .cell-image-frame': {\r\n      ...shorthands.overflow('hidden'),\r\n      ...shorthands.borderRadius('6px'),\r\n    },\r\n\r\n    '& .selected-checkbox': {\r\n      visibility: 'hidden',\r\n    },\r\n\r\n    '&:hover': {\r\n      '& .selected-checkbox': {\r\n        visibility: 'visible',\r\n        // '& .ms-Checkbox-checkbox': {\r\n        //   ...shorthands.border('2px solid white !important'),\r\n        // },\r\n        '& .ms-Checkbox-checkmark': {\r\n          color: tokens.colorNeutralForegroundInverted,\r\n        },\r\n      },\r\n    },\r\n\r\n    '& .visible-checkbox': {\r\n      visibility: 'visible',\r\n      // '& .ms-Checkbox-checkbox': {\r\n      //   border: '2px solid white !important',\r\n      // },\r\n      '& .ms-Checkbox-checkmark': {\r\n        color: tokens.colorNeutralForegroundInverted,\r\n      },\r\n    },\r\n  },\r\n\r\n  selectableCardContainer: {\r\n    '& .cell-image-frame': {\r\n      ...shorthands.overflow('hidden'),\r\n      ...shorthands.borderRadius('6px'),\r\n    },\r\n\r\n    '& .selected-checkbox': {\r\n      visibility: 'visible',\r\n      // '& .ms-Checkbox-checkbox': {\r\n      //   border: '2px solid white !important',\r\n      // },\r\n      '& .ms-Checkbox-checkmark': {\r\n        color: tokens.colorNeutralForegroundInverted,\r\n      },\r\n    },\r\n  },\r\n});\r\n","import { makeResetStyles, shorthands, tokens } from '@fluentui/react-components';\r\nimport { positionFill } from './../shared-cell-style';\r\n\r\n/* eslint-disable no-unused-vars */\r\nexport const iconStyles = {\r\n  root: {\r\n    position: 'relative',\r\n    top: '3px',\r\n    marginLeft: '12px',\r\n    marginRight: '5px',\r\n  },\r\n};\r\n\r\nexport const videoSvgIconStyles = {\r\n  ...iconStyles,\r\n  root: {\r\n    ...iconStyles.root,\r\n    top: '5px',\r\n    width: '15px',\r\n    opacity: 0.8,\r\n  },\r\n};\r\n\r\nexport const useFolderGridCellStyle = makeResetStyles({\r\n  display: 'flex',\r\n  flexWrap: 'nowrap',\r\n  boxSizing: 'border-box',\r\n  height: '86px',\r\n\r\n  '& .folder-grid-cell-content': {\r\n    display: 'flex',\r\n    flexDirection: 'row',\r\n    flexGrow: 1,\r\n    flexShrink: 1,\r\n\r\n    justifyContent: 'flex-start',\r\n    alignItems: 'center',\r\n    backgroundColor: '#fff',\r\n    ...shorthands.padding('16px'),\r\n    cursor: 'pointer',\r\n\r\n    ...shorthands.borderRadius('6px'),\r\n    ...positionFill,\r\n\r\n    '& .folder-thumbnail': {\r\n      display: 'flex',\r\n      flexGrow: 0,\r\n      flexShrink: 0,\r\n      marginRight: '16px',\r\n    },\r\n\r\n    '& .folder-info': {\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      flexGrow: 1,\r\n      flexShrink: 1,\r\n      justifyContent: 'space-between',\r\n      height: '100%',\r\n      paddingTop: '6px',\r\n\r\n      ...shorthands.overflow('hidden'),\r\n      whiteSpace: 'nowrap',\r\n\r\n      '& .folder-name': {\r\n        fontStyle: 'normal',\r\n        fontWeight: 600,\r\n        fontSize: '12px',\r\n        lineHeight: '16px',\r\n\r\n        '& .highlighted-text': {\r\n          backgroundColor: tokens.colorPaletteYellowBackground3,\r\n        },\r\n      },\r\n\r\n      '& .folder-newlabel-counting': {\r\n        display: 'flex',\r\n        flexDirection: 'row',\r\n        ...shorthands.padding('1px'),\r\n\r\n        '& .counting-info': {\r\n          display: 'block',\r\n          ...shorthands.overflow('hidden'),\r\n          whiteSpace: 'nowrap',\r\n          textOverflow: 'ellipsis',\r\n\r\n          fontStyle: 'normal',\r\n          fontWeight: 400,\r\n          fontSize: '12px',\r\n          lineHeight: '15px',\r\n          textAlign: 'right',\r\n\r\n          position: 'relative',\r\n          top: '2px',\r\n\r\n          '& .count-icon': {\r\n            marginLeft: '12px',\r\n            marginRight: '4px',\r\n            fontSize: '14px',\r\n            '&:first-child': {\r\n              marginLeft: '0px',\r\n            },\r\n          },\r\n\r\n          '& span': {\r\n            verticalAlign: 'top',\r\n          },\r\n        },\r\n\r\n        '& .empty-desc': {\r\n          fontSize: '12px',\r\n        },\r\n      },\r\n    },\r\n  },\r\n\r\n  '& .grid-cell-with-accessory': {\r\n    paddingRight: '54px',\r\n  },\r\n\r\n  '& .folder-cell-accessory': {\r\n    position: 'absolute',\r\n    top: 0,\r\n    bottom: 0,\r\n    right: 0,\r\n    width: '42px',\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    justifyContent: 'center',\r\n  },\r\n\r\n  '& .folder-grid-loading-cell-content': {\r\n    height: '100%',\r\n  },\r\n\r\n  '& .selectable-cell-card': {\r\n    backgroundColor: 'white',\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\nimport classnames from 'classnames';\r\n\r\nimport { Checkbox, Tooltip } from '@fluentui/react-components';\r\nimport { FolderRegular, ImageRegular, VideoRegular } from '@fluentui/react-icons';\r\n\r\nimport {\r\n  TilesGridCellCard,\r\n  TilesGridCellDragDecorator,\r\n  TilesGridCellDropDecorator,\r\n} from '../../ads-studio-tile-grid';\r\nimport { FolderIcon } from '../../folder-icon-component';\r\nimport { TextWithHighlight } from '../../text-with-highlight';\r\nimport { FolderAssetType } from '../../../model';\r\n\r\nimport {\r\n  useFolderGridCellStyle\r\n} from './style';\r\n\r\nfunction getCountDescription({\r\n  itemInfo,\r\n  i18n,\r\n}) {\r\n  let subFoldersCountDesc = '';\r\n  let imagesCountDesc = '';\r\n  let videosCountDesc = '';\r\n  if (itemInfo.subfoldersCount === 1) {\r\n    subFoldersCountDesc = i18n.getString(_TL_('{{count}} folder'), { count: itemInfo.subfoldersCount });\r\n  } else if (!_.isUndefined(itemInfo.subfoldersCount)) {\r\n    subFoldersCountDesc = i18n.getString(_TL_('{{count}} folders'), { count: itemInfo.subfoldersCount });\r\n  }\r\n  if (itemInfo.imageAssetsCount === 1) {\r\n    imagesCountDesc = i18n.getString(_TL_('{{count}} image'), { count: itemInfo.imageAssetsCount });\r\n  } else if (!_.isUndefined(itemInfo.imageAssetsCount)) {\r\n    imagesCountDesc = i18n.getString(_TL_('{{count}} images'), { count: itemInfo.imageAssetsCount });\r\n  }\r\n  if (itemInfo.videoAssetsCount === 1) {\r\n    videosCountDesc = i18n.getString(_TL_('{{count}} video'), { count: itemInfo.videoAssetsCount });\r\n  } else if (!_.isUndefined(itemInfo.videoAssetsCount)) {\r\n    videosCountDesc = i18n.getString(_TL_('{{count}} videos'), { count: itemInfo.videoAssetsCount });\r\n  }\r\n  const res = [subFoldersCountDesc, imagesCountDesc, videosCountDesc].filter(item => item !== '').join(', ');\r\n  return res;\r\n}\r\n\r\nconst convertItemInfo = ({ allowedAssetType, itemInfos }) => {\r\n  const result = {\r\n    subfoldersCount: itemInfos.SubFoldersCount,\r\n  };\r\n  if (allowedAssetType === FolderAssetType.Image) {\r\n    result.imageAssetsCount = itemInfos.ImageAssetsCount;\r\n  } else if (allowedAssetType === FolderAssetType.Video) {\r\n    result.videoAssetsCount = itemInfos.VideoAssetsCount;\r\n  } else if (!allowedAssetType) {\r\n    result.imageAssetsCount = itemInfos.ImageAssetsCount;\r\n    result.videoAssetsCount = itemInfos.VideoAssetsCount;\r\n  }\r\n\r\n  return result;\r\n};\r\n\r\n// eslint-disable-next-line react/prop-types\r\nconst FolderCountInfo = ({ itemInfo, className, i18n, isEmptyFolder }) => (\r\n  <Tooltip\r\n    content={getCountDescription({ itemInfo, i18n })}\r\n    relationship=\"label\"\r\n    positioning=\"below-start\"\r\n    withArrow\r\n  >\r\n    { !isEmptyFolder ? (\r\n      <div className={classnames('folder-cell-tooltip', className)}>\r\n        {!_.isUndefined(itemInfo.subfoldersCount) &&\r\n          <React.Fragment>\r\n            <FolderRegular className=\"count-icon\" />\r\n            <span className=\"cell-subfolder-count\">{itemInfo.subfoldersCount}</span>\r\n          </React.Fragment>\r\n        }\r\n        {!_.isUndefined(itemInfo.imageAssetsCount) &&\r\n          <React.Fragment>\r\n            <ImageRegular className=\"count-icon\" />\r\n            <span className=\"cell-image-count\">{itemInfo.imageAssetsCount}</span>\r\n          </React.Fragment>\r\n        }\r\n        {!_.isUndefined(itemInfo.videoAssetsCount) &&\r\n          <React.Fragment>\r\n            <VideoRegular className=\"count-icon\" />\r\n            <span className=\"cell-video-count\">{itemInfo.videoAssetsCount}</span>\r\n          </React.Fragment>\r\n        }\r\n      </div>\r\n      ) : (\r\n        <span className=\"empty-desc\">{i18n.getString(_TL_('0 items'))}</span>\r\n    )}\r\n  </Tooltip>\r\n);\r\n\r\nconst getFolderThumbnail = ({ assets }) => {\r\n  const firstAsset = _.first(assets) || {};\r\n\r\n  // MT will ensure valid assets returned first, so UI only need to check first asset.\r\n  if (firstAsset.folderAssetType === FolderAssetType.Video) {\r\n    return firstAsset.status === 'Active' ? firstAsset.thumbnailUrl : '';\r\n  }\r\n\r\n  return firstAsset.url;\r\n};\r\n\r\nconst FoldersGridCell = ({\r\n  item,\r\n  highlightedText,\r\n  onFolderClick,\r\n  i18n,\r\n  selectable,\r\n  selected,\r\n  onSelect,\r\n  allowedAssetType,\r\n\r\n  renderAccessory,\r\n\r\n  draggable,\r\n  onDrag,\r\n  selectedItemCount,\r\n  droppable,\r\n  onDrop,\r\n}) => {\r\n  const folderGridCellContainer = useFolderGridCellStyle();\r\n  const {\r\n    folderName, itemCount, assets,\r\n  } = item || {};\r\n\r\n  const itemInfo = useMemo(() => convertItemInfo({ allowedAssetType, itemInfos: itemCount }), [allowedAssetType, itemCount]);\r\n  const isEmptyFolder = !_.isUndefined(itemCount.TotalCount) && itemCount.TotalCount === 0;\r\n\r\n  const thumbnailUrl = useMemo(() => getFolderThumbnail({ assets }), [assets]);\r\n\r\n  const onClick = useCallback(() => {\r\n    onFolderClick(item);\r\n  }, [item, onFolderClick]);\r\n\r\n  const onCheckboxChange = useCallback((event, checked) => {\r\n    if (onSelect) {\r\n      onSelect(checked);\r\n    }\r\n  }, [onSelect]);\r\n\r\n  const hasAccessory = renderAccessory || selectable;\r\n\r\n  return (\r\n    <TilesGridCellDragDecorator\r\n      draggable={draggable}\r\n      item={item}\r\n      dragItemsLength={selectedItemCount}\r\n      onDrag={onDrag}\r\n      i18n={i18n}\r\n      selected={selected}\r\n    >\r\n      <TilesGridCellDropDecorator droppable={droppable} onDrop={onDrop}>\r\n        <div className={classnames('tiles-grid-cell-content', folderGridCellContainer)}>\r\n          <TilesGridCellCard customCellCardClass={selectable ? 'selectable-cell-card' : ''}>\r\n            {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions, jsx-a11y/click-events-have-key-events */}\r\n            <div\r\n              className={classnames('folder-grid-cell-content', hasAccessory && 'grid-cell-with-accessory')}\r\n              onClick={onClick}\r\n              data-is-focusable\r\n            >\r\n              <div className=\"folder-thumbnail\">\r\n                <FolderIcon thumbnailImageUrl={thumbnailUrl} isEmptyFolder={isEmptyFolder} />\r\n              </div>\r\n              <div className=\"folder-info\">\r\n                <div className=\"folder-name\">\r\n                  <TextWithHighlight text={folderName || ''} highlightedText={highlightedText} enableTooltip />\r\n                </div>\r\n                <div className=\"folder-newlabel-counting\">\r\n                  <FolderCountInfo\r\n                    itemInfo={itemInfo}\r\n                    className=\"counting-info\"\r\n                    i18n={i18n}\r\n                    isEmptyFolder={isEmptyFolder}\r\n                  />\r\n                </div>\r\n              </div>\r\n            </div>\r\n            {hasAccessory ?\r\n              <div className=\"folder-cell-accessory\">\r\n                {selectable &&\r\n                <Checkbox onChange={onCheckboxChange} checked={selected} ariaLabel={folderName || i18n.getString(_TL_('Folder'))} />\r\n                }\r\n                {(renderAccessory && !selectable) && renderAccessory()}\r\n              </div>\r\n            : null}\r\n          </TilesGridCellCard>\r\n        </div>\r\n      </TilesGridCellDropDecorator>\r\n    </TilesGridCellDragDecorator>\r\n  );\r\n};\r\n\r\nFoldersGridCell.propTypes = {\r\n  item: PropTypes.shape({}).isRequired,\r\n  highlightedText: PropTypes.string,\r\n  onFolderClick: PropTypes.func.isRequired,\r\n  i18n: PropTypes.shape({\r\n    getString: PropTypes.func,\r\n  }).isRequired,\r\n\r\n  // show checkbox\r\n  selectable: PropTypes.bool,\r\n  selected: PropTypes.bool,\r\n  onSelect: PropTypes.func,\r\n\r\n  allowedAssetType: PropTypes.string,\r\n\r\n  renderAccessory: PropTypes.func,\r\n};\r\n\r\nFoldersGridCell.defaultProps = {\r\n  highlightedText: undefined,\r\n  selectable: false,\r\n  selected: false,\r\n  onSelect: undefined,\r\n  allowedAssetType: null,\r\n\r\n  renderAccessory: undefined,\r\n};\r\n\r\nexport const AdsStudioFoldersGridCell = FoldersGridCell;\r\n","import { makeStyles, shorthands, tokens } from '@fluentui/react-components';\r\nimport {\r\n  getSharedAssetContainerStyle,\r\n  getSharedMultiSelectingCellStyles,\r\n} from './../shared-cell-style';\r\n\r\nexport const useImageAssetsGridCellStyle = makeStyles({\r\n  imageAssetsGridCellContainer: {\r\n    ...getSharedAssetContainerStyle(),\r\n\r\n    // the 'Updating' label animation\r\n    '& .updating-label-icon-and-text': {\r\n      display: 'flex',\r\n      backgroundColor: tokens.colorNeutralBackgroundStatic,\r\n\r\n      '& .label-icon': {\r\n        animationName: [{\r\n          from: { transform: 'rotate(0deg)' },\r\n          to: { transform: 'rotate(360deg)' },\r\n        }],\r\n        animationDuration: '1.5s',\r\n        animationIterationCount: 'infinite',\r\n        animationTimingFunction: 'linear',\r\n      },\r\n    },\r\n  },\r\n\r\n  imageCellLabelContainer: {\r\n    display: 'flex',\r\n    flexDirection: 'row',\r\n    position: 'absolute',\r\n    left: '12px',\r\n    bottom: '8px',\r\n    zIndex: 1,\r\n\r\n    '& .label-icon-and-text.created-with-ai-label': {\r\n      display: 'flex',\r\n      ...shorthands.padding(0),\r\n      ...shorthands.margin(0),\r\n      marginRight: '6px',\r\n      height: '24px',\r\n      backgroundColor: '#FFFFFFBB',\r\n\r\n      '& .label-icon': {\r\n        ...shorthands.margin(0),\r\n      },\r\n    },\r\n\r\n    '& .label-icon-and-text.image-source-label': {\r\n      ...shorthands.padding('2px', '4px'),\r\n      backgroundColor: '#616161',\r\n    },\r\n  },\r\n\r\n  // only show checkbox on overlay if it is NOT in multi-selecting mode\r\n  ...getSharedMultiSelectingCellStyles(),\r\n\r\n});\r\n","/* eslint-disable react/jsx-closing-tag-location */\r\nimport _ from 'underscore';\r\nimport React, { Fragment, useCallback, useMemo, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport { ArrowSync16Filled } from '@fluentui/react-icons';\r\n\r\nimport {\r\n  TilesGridCellImage as CellImage,\r\n  TilesGridCellDecorativeLabel as CellLabel,\r\n  TilesGridCellCardWithOverlay,\r\n  TilesGridCellSelectionDecorator,\r\n  TilesGridCellDeletionButtonDecorator,\r\n  TilesGridCellDragDecorator,\r\n} from '../../ads-studio-tile-grid';\r\nimport { TextWithHighlight } from '../../text-with-highlight';\r\nimport { CSMLAssetSource, ManualAddedImageSource } from '../../../model';\r\nimport { InfoSparkleSVGIcon } from '../../../asset-images';\r\nimport { useImageAssetsGridCellStyle } from './style';\r\n\r\nexport const AdsStudioImageAssetsGridCell = ({\r\n  item,\r\n  highlightedText,\r\n  isOverlayEnabled,\r\n  isCellFocused,\r\n  renderCellContent,\r\n  renderOverlayContent,\r\n  i18n,\r\n  selectable,\r\n  selected,\r\n  isMultiSelecting, // is in multi-selection mode, need to show checkbox on cells\r\n  onClick,\r\n  deletable,\r\n  onDelete,\r\n  draggable,\r\n  onDrag,\r\n  selectedItemCount,\r\n}) => {\r\n  const [isImageLoaded, setImageLoaded] = useState(false);\r\n  const classes = useImageAssetsGridCellStyle();\r\n\r\n  const {\r\n    name,\r\n    url,\r\n    id,\r\n    updating,\r\n    sourceType,\r\n    manualAddedImageSourceType,\r\n  } = item || {};\r\n\r\n  const cellContent = useMemo(() => {\r\n    const defaultContent = (\r\n      <Fragment>\r\n        <CellImage\r\n          src={url}\r\n          alt={name || id || ''}\r\n          showSpinner={false}\r\n          onLoaded={setImageLoaded}\r\n          i18n={i18n}\r\n        />\r\n        <div className={classes.imageCellLabelContainer}>\r\n          {manualAddedImageSourceType === ManualAddedImageSource.Library && (\r\n            <CellLabel\r\n              text={i18n.getString(_TL_('Library'))}\r\n              customClass={{ iconTextWrapper: 'image-source-label' }}\r\n            />\r\n          )}\r\n          {manualAddedImageSourceType === ManualAddedImageSource.ShutterStock && (\r\n            <CellLabel\r\n              text={i18n.getString(_TL_('Stock'))}\r\n              customClass={{ iconTextWrapper: 'image-source-label' }}\r\n            />\r\n          )}\r\n          {(sourceType === CSMLAssetSource.AIGenerated || sourceType === CSMLAssetSource.BackgroundChangeGenerated || sourceType === CSMLAssetSource.AIGeneratedByRecraft) && (\r\n            <CellLabel\r\n              icon={InfoSparkleSVGIcon}\r\n              customClass={{ iconTextWrapper: 'created-with-ai-label' }}\r\n            />\r\n          )}\r\n          {updating && (\r\n            <CellLabel\r\n              text={i18n.getString(_TL_('Updating'))}\r\n              icon={ArrowSync16Filled}\r\n              customClass={{ iconTextWrapper: 'updating-label-icon-and-text' }}\r\n            />\r\n          )}\r\n        </div>\r\n      </Fragment>\r\n    );\r\n    if (renderCellContent) {\r\n      return renderCellContent(defaultContent);\r\n    }\r\n    return defaultContent;\r\n  }, [classes.imageCellLabelContainer, i18n, id, manualAddedImageSourceType, name, renderCellContent, sourceType, updating, url]);\r\n\r\n  const funcRenderOverlayContent = useCallback(() => {\r\n    if (renderOverlayContent) {\r\n      return renderOverlayContent();\r\n    }\r\n    return null;\r\n  }, [renderOverlayContent]);\r\n\r\n  const onCellClick = useCallback(() => {\r\n    if (selectable) {\r\n      onClick({ item, selected });\r\n    }\r\n  }, [item, onClick, selectable, selected]);\r\n\r\n  const withSelectionDecorator = useCallback(decoratedContent => (\r\n    selectable ? (\r\n      <TilesGridCellSelectionDecorator item={item} selected={selected} onClick={onClick} ariaLabel={name || i18n.getString(_TL_('Image'))} isFocused={isCellFocused} >\r\n        {decoratedContent}\r\n      </TilesGridCellSelectionDecorator>\r\n    ) : decoratedContent\r\n  ), [i18n, isCellFocused, item, name, onClick, selectable, selected]);\r\n\r\n  const withDeleteButtonDecorator = useCallback(decoratedContent => (\r\n    deletable ? (\r\n      <TilesGridCellDeletionButtonDecorator item={item} onDelete={onDelete}>\r\n        {decoratedContent}\r\n      </TilesGridCellDeletionButtonDecorator>\r\n    ) : decoratedContent\r\n  ), [deletable, item, onDelete]);\r\n\r\n  return (\r\n    <div className={classnames('tiles-grid-cell-content', classes.imageAssetsGridCellContainer)}>\r\n      <TilesGridCellDragDecorator\r\n        draggable={draggable}\r\n        item={item}\r\n        dragItemsLength={selectedItemCount}\r\n        onDrag={onDrag}\r\n        i18n={i18n}\r\n        selected={selected}\r\n      >\r\n        <TilesGridCellCardWithOverlay\r\n          isCellFocused={isCellFocused}\r\n          isOverlayEnabled={isOverlayEnabled && isImageLoaded}\r\n          renderOverlayContent={funcRenderOverlayContent}\r\n          customCellCardClass={(isOverlayEnabled && !selected && !isMultiSelecting) ? classes.selectableCardContainerAutoHideCheckbox : classes.selectableCardContainer}\r\n          onClick={onCellClick}\r\n        >\r\n          {_.compose(withDeleteButtonDecorator, withSelectionDecorator)(cellContent)}\r\n        </TilesGridCellCardWithOverlay>\r\n      </TilesGridCellDragDecorator>\r\n      <div className=\"cell-description\">\r\n        <div className=\"cell-description-name\">\r\n          <TextWithHighlight text={name || ''} highlightedText={highlightedText} enableTooltip />\r\n        </div>\r\n        {id && (\r\n          <div className=\"cell-description-id\">\r\n            {`${i18n.getString(_TL_('ID'))} `}\r\n            <TextWithHighlight text={id} highlightedText={highlightedText} />\r\n          </div>\r\n        )}\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nAdsStudioImageAssetsGridCell.propTypes = {\r\n  item: PropTypes.shape({\r\n    id: PropTypes.string,\r\n    name: PropTypes.string,\r\n    url: PropTypes.string,\r\n    createdTime: PropTypes.instanceOf(Date),\r\n    // cropping task progress\r\n    updating: PropTypes.bool,\r\n  }).isRequired,\r\n  highlightedText: PropTypes.string,\r\n  isOverlayEnabled: PropTypes.bool,\r\n  isCellFocused: PropTypes.bool,\r\n  renderCellContent: PropTypes.func,\r\n  renderOverlayContent: PropTypes.func,\r\n  i18n: PropTypes.shape({\r\n    getString: PropTypes.func,\r\n  }).isRequired,\r\n  selectable: PropTypes.bool,\r\n  selected: PropTypes.bool,\r\n  onClick: () => null,\r\n  isMultiSelecting: PropTypes.bool,\r\n  deletable: PropTypes.bool,\r\n  onDelete: PropTypes.func,\r\n  draggable: PropTypes.bool,\r\n  onDrag: PropTypes.func,\r\n  selectedItemCount: PropTypes.number,\r\n};\r\n\r\nAdsStudioImageAssetsGridCell.defaultProps = {\r\n  highlightedText: undefined,\r\n  isOverlayEnabled: false,\r\n  isCellFocused: false,\r\n  renderCellContent: null,\r\n  renderOverlayContent: null,\r\n  selectable: false,\r\n  selected: false,\r\n  onClick: undefined,\r\n  isMultiSelecting: false,\r\n  deletable: false,\r\n  onDelete: undefined,\r\n  draggable: false,\r\n  onDrag: _.noop,\r\n  selectedItemCount: 1,\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { FolderAssetType } from '../../../model';\r\nimport {\r\n  AdsStudioImageAssetsGridCell as DefaultImageGridCell,\r\n  AdsStudioVideoAssetsGridCell as DefaultVideoGridCell,\r\n} from '..';\r\n\r\nexport const GridCellFactory = (props) => {\r\n  const { item } = props;\r\n  const { folderAssetType } = item || {};\r\n\r\n  switch (folderAssetType) {\r\n    case FolderAssetType.Image:\r\n      return <DefaultImageGridCell {...props} />;\r\n    case FolderAssetType.Video:\r\n      return <DefaultVideoGridCell {...props} />;\r\n    default:\r\n      return null;\r\n  }\r\n};\r\n\r\nGridCellFactory.propTypes = {\r\n  item: PropTypes.shape({\r\n    folderAssetType: PropTypes.string.isRequired,\r\n  }),\r\n};\r\n\r\nGridCellFactory.defaultProps = {\r\n  item: null,\r\n};\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nexport const useStyles = makeStyles({\r\n  container: {\r\n    '& .cell-overlay-actions': {\r\n      zIndex: 1,\r\n      alignItems: 'end',\r\n      justifyContent: 'end',\r\n    },\r\n  },\r\n  actionButton: {\r\n    ...shorthands.margin('6px'),\r\n    marginLeft: '0px',\r\n\r\n    '&:focus': {\r\n      ...shorthands.border('1px', 'solid', '#FFFFFF'),\r\n    },\r\n\r\n    '&:hover': {\r\n      backgroundColor: '#C4C4C4',\r\n    },\r\n  },\r\n});\r\n","import _ from 'underscore';\r\nimport React, { useCallback, useState, useRef, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport { EditRegular, ListRegular } from '@fluentui/react-icons';\r\nimport { Button } from '@fluentui/react-components';\r\nimport { stringifySync } from '@bingads-webui/safe-json';\r\n\r\nimport { FolderAssetType, ManualAddedImageSource } from '../../../model';\r\nimport { GridCellFactory } from './grid-cell-factory';\r\nimport { useStyles } from './style';\r\n\r\nexport const AdsStudioAssetGridCell = ({\r\n  item,\r\n  highlightedText,\r\n  onDetailsClick,\r\n  onEditClick,\r\n  selectable,\r\n  selected,\r\n  onSelect,\r\n  isMultiSelecting,\r\n  i18n,\r\n  logger,\r\n  index,\r\n  draggable,\r\n  onDrag,\r\n  selectedItemCount,\r\n  permissions,\r\n}) => {\r\n  const classes = useStyles();\r\n\r\n  const [focusIndex, setFocusIndex] = useState(-1);\r\n  const focusCellButton = useRef();\r\n\r\n  const onKeyDown = useCallback((event, i) => {\r\n    const assetContainers = document.querySelectorAll('.asset-grid-cell-container');\r\n    const firstButton = document.querySelector('.ads-studio-page button');\r\n    switch (event.code) {\r\n      case 'ArrowUp':\r\n      case 'ArrowLeft':\r\n        if (i > 0 && assetContainers[i - 1]) {\r\n          assetContainers[i - 1].focus();\r\n          setFocusIndex(-1);\r\n        }\r\n        break;\r\n      case 'ArrowDown':\r\n      case 'ArrowRight':\r\n        if (i < assetContainers.length - 1 && assetContainers[i + 1]) {\r\n          assetContainers[i + 1].focus();\r\n          setFocusIndex(-1);\r\n        }\r\n        break;\r\n      case 'Space':\r\n        setFocusIndex(i);\r\n        break;\r\n      case 'Tab':\r\n        if (focusIndex < 0 && firstButton) {\r\n          firstButton.focus();\r\n        } else if (assetContainers[i]) {\r\n          const detailButton = assetContainers[i].querySelector('.detail-button');\r\n          const editButton = assetContainers[i].querySelector('.edit-button');\r\n          if (focusCellButton.current === 'edit') {\r\n            if (detailButton) {\r\n              detailButton.focus();\r\n              focusCellButton.current = 'detail';\r\n            }\r\n          } else if (editButton) {\r\n            if (editButton) {\r\n              editButton.focus();\r\n              focusCellButton.current = 'edit';\r\n            }\r\n          } else if (detailButton) {\r\n            detailButton.focus();\r\n            focusCellButton.current = 'detail';\r\n          }\r\n        }\r\n        break;\r\n      case 'Enter':\r\n        if (focusCellButton.current === 'detail') {\r\n          onDetailsClick(item);\r\n        } else if (focusCellButton.current === 'edit') {\r\n          onEditClick(item);\r\n        } else {\r\n          onSelect();\r\n        }\r\n        setFocusIndex(-1);\r\n        break;\r\n      default:\r\n        break;\r\n    }\r\n\r\n    event.stopPropagation();\r\n    event.preventDefault();\r\n  }, [focusIndex, item, onDetailsClick, onEditClick, onSelect]);\r\n\r\n  const renderOverlayContent = useCallback(() => {\r\n    const clickDetails = (evt) => {\r\n      onDetailsClick(item);\r\n      if (evt) {\r\n        evt.stopPropagation();\r\n        evt.preventDefault();\r\n      }\r\n    };\r\n    const onDetailsKeyDown = (evt) => {\r\n      if (evt.code === 'Enter' || evt.code === 'Space') {\r\n        clickDetails(evt);\r\n      }\r\n    };\r\n    const clickEdit = (evt) => {\r\n      onEditClick(item);\r\n      if (evt) {\r\n        evt.stopPropagation();\r\n        evt.preventDefault();\r\n      }\r\n    };\r\n    const onEditKeyDown = (evt) => {\r\n      if (evt.code === 'Enter' || evt.code === 'Space') {\r\n        clickEdit(evt);\r\n      }\r\n    };\r\n    const { folderAssetType, manualAddedImageSourceType } = item || {};\r\n    const isVideoCell = folderAssetType === FolderAssetType.Video;\r\n    const isStockImageCell = manualAddedImageSourceType === ManualAddedImageSource.ShutterStock;\r\n    const videoTemplateUIEnabled = permissions && permissions.dynamic && permissions.dynamic.VideoTemplateUI;\r\n    const showEditIcon = ((videoTemplateUIEnabled && isVideoCell && item && item.id && item.metaData) || !isVideoCell);\r\n\r\n    return (\r\n      <React.Fragment>\r\n        { showEditIcon &&\r\n          <Button\r\n            icon={<EditRegular />}\r\n            onClick={clickEdit}\r\n            onKeyDown={onEditKeyDown}\r\n            className={classnames('edit-button', classes.actionButton)}\r\n            title={i18n.getString(_TL_('Edit'))}\r\n            aria-label={i18n.getString(_TL_('Edit asset'))}\r\n          />\r\n        }\r\n        { !isStockImageCell &&\r\n          <Button\r\n            icon={<ListRegular />}\r\n            onClick={clickDetails}\r\n            onKeyDown={onDetailsKeyDown}\r\n            className={classnames('detail-button', classes.actionButton)}\r\n            title={i18n.getString(_TL_('Details'))}\r\n            aria-label={i18n.getString(_TL_('Click to view asset details'))}\r\n          />\r\n        }\r\n      </React.Fragment>\r\n    );\r\n  }, [classes.actionButton, i18n, item, onDetailsClick, onEditClick]);\r\n\r\n  useEffect(() => {\r\n    if (logger && logger.logTrace) {\r\n      logger.logTrace(`Grid cell rendered item: ${stringifySync(item)}`);\r\n    }\r\n  // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, []);\r\n\r\n  return (\r\n    // eslint-disable-next-line jsx-a11y/no-static-element-interactions\r\n    <div\r\n      className={classnames('asset-grid-cell-container', classes.container)}\r\n      onKeyDown={(event) => { onKeyDown(event, index); }}\r\n      style={{ width: '100%', height: '100%' }}\r\n      data-is-focusable\r\n    >\r\n      <GridCellFactory\r\n        item={item}\r\n        highlightedText={highlightedText}\r\n        i18n={i18n}\r\n        isOverlayEnabled\r\n        isCellFocused={focusIndex === index}\r\n        renderOverlayContent={renderOverlayContent}\r\n        selectable={selectable}\r\n        selected={selected}\r\n        onClick={onSelect}\r\n        isMultiSelecting={isMultiSelecting}\r\n        onClickVideo={onDetailsClick}\r\n        draggable={draggable}\r\n        onDrag={onDrag}\r\n        selectedItemCount={selectedItemCount}\r\n      />\r\n    </div>\r\n  );\r\n};\r\n\r\nAdsStudioAssetGridCell.propTypes = {\r\n  item: PropTypes.shape({\r\n    id: PropTypes.string,\r\n    name: PropTypes.string,\r\n    url: PropTypes.string,\r\n    createdTime: PropTypes.instanceOf(Date),\r\n    // cropping task progress\r\n    updating: PropTypes.bool,\r\n  }).isRequired,\r\n  highlightedText: PropTypes.string,\r\n  onDetailsClick: PropTypes.func.isRequired,\r\n  onEditClick: PropTypes.func,\r\n  i18n: PropTypes.shape({\r\n    getString: PropTypes.func,\r\n  }).isRequired,\r\n  selectable: PropTypes.bool,\r\n  selected: PropTypes.bool,\r\n  onSelect: PropTypes.func,\r\n  isMultiSelecting: PropTypes.bool,\r\n  index: PropTypes.number,\r\n  logger: PropTypes.shape({\r\n    logTrace: PropTypes.func,\r\n    logError: PropTypes.func,\r\n  }),\r\n  draggable: PropTypes.bool,\r\n  onDrag: PropTypes.func,\r\n  selectedItemCount: PropTypes.number,\r\n};\r\n\r\nAdsStudioAssetGridCell.defaultProps = {\r\n  highlightedText: undefined,\r\n  index: -1,\r\n  selectable: false,\r\n  selected: false,\r\n  onSelect: _.noop,\r\n  onEditClick: _.noop,\r\n  isMultiSelecting: false,\r\n  logger: undefined,\r\n  draggable: false,\r\n  onDrag: _.noop,\r\n  selectedItemCount: 1,\r\n};\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nexport const useControlStyles = makeStyles({\r\n  root: {\r\n    position: 'relative',\r\n    width: '100%',\r\n    ...shorthands.overflow('hidden'),\r\n    top: '-5px',\r\n    backgroundColor: 'rgba(0,0,0,0.75)',\r\n\r\n    '& .ms-Button svg': {\r\n      width: '100%',\r\n    },\r\n    '& .ms-Button:focus': {\r\n      ...shorthands.border('1px solid #fff'),\r\n    },\r\n    '& .ms-Button:hover': {\r\n      backgroundColor: 'transparent',\r\n    },\r\n  },\r\n  videoContainer: {\r\n    paddingBottom: '32px',\r\n  },\r\n  sliderContainer: {\r\n    width: '100%',\r\n  },\r\n  previewVideo: {\r\n    width: '100%',\r\n    maxHeight: '100%',\r\n  },\r\n  container: {\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n\r\n    '& i': {\r\n      width: '100%',\r\n      cursor: 'pointer',\r\n    },\r\n  },\r\n});\r\n\r\nconst commonParentStyles = {\r\n  display: 'flex',\r\n  alignItems: 'center',\r\n  justifyContent: 'center',\r\n  flexDirection: 'column',\r\n  height: '100%',\r\n};\r\n\r\nconst iconCommonStyles = {\r\n  fontSize: '36px',\r\n  lineHeight: '36px',\r\n  color: '#0078d4',\r\n};\r\n\r\nexport const usePlaceholderStyle = makeStyles({\r\n  encoding: {\r\n    ...commonParentStyles,\r\n    '& .placeholder-icon': {\r\n      ...iconCommonStyles,\r\n      animationName: [\r\n        {\r\n          to: {\r\n            transform: 'rotate(360deg)',\r\n          },\r\n        },\r\n      ],\r\n      animationDuration: '1.2s',\r\n      animationTimingFunction: 'linear',\r\n      animationIterationCount: 'infinite',\r\n    },\r\n    '& .add-video-content-container': {\r\n      marginTop: '14px',\r\n    },\r\n  },\r\n  unverified: {\r\n    ...commonParentStyles,\r\n    '& .download-icon-container': {\r\n      ...shorthands.overflow('hidden'),\r\n      ...shorthands.borderBottom('2px solid #0078d4'),\r\n    },\r\n    '& .placeholder-icon': {\r\n      ...iconCommonStyles,\r\n      animationName: [\r\n        {\r\n          from: {\r\n            transform: 'translateY(-18px)',\r\n          },\r\n          to: {\r\n            transform: 'translateY(42px)',\r\n          },\r\n        },\r\n      ],\r\n      animationDuration: '1.2s',\r\n      animationTimingFunction: 'ease',\r\n      animationIterationCount: 'infinite',\r\n    },\r\n  },\r\n  failed: {\r\n    ...commonParentStyles,\r\n    '& .placeholder-icon': {\r\n      ...iconCommonStyles,\r\n      color: '#d83b01',\r\n    },\r\n  },\r\n});\r\n","import React from 'react';\r\n\r\nimport { VideoPureComponent } from '@bingads-webui-campaign-react/video-pure-component';\r\n\r\nimport { useControlStyles } from './style';\r\n\r\nexport const Video = (props) => {\r\n  const classes = useControlStyles();\r\n\r\n  return <VideoPureComponent {...props} classes={classes} />;\r\n};\r\n","import React from 'react';\r\n\r\nimport { EncodingPlaceholder, FailedPlaceholder, UnverifiedPlaceholder } from '@bingads-webui-campaign-react/video-status-placeholder-pure-component';\r\n\r\nimport { usePlaceholderStyle } from './style';\r\n\r\nexport const EncodingPlaceholderWithStyle = (props) => {\r\n  const classes = usePlaceholderStyle();\r\n  return <EncodingPlaceholder {...props} classes={classes} />;\r\n};\r\n\r\nexport const FailedPlaceholderWithStyle = (props) => {\r\n  const classes = usePlaceholderStyle();\r\n  return <FailedPlaceholder {...props} classes={classes} />;\r\n};\r\n\r\nexport const UnverifiedPlaceholderWithStyle = (props) => {\r\n  const classes = usePlaceholderStyle();\r\n  return <UnverifiedPlaceholder {...props} classes={classes} />;\r\n};\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\nimport {\r\n  getSharedAssetContainerStyle,\r\n  getSharedMultiSelectingCellStyles,\r\n} from '../shared-cell-style';\r\n\r\nexport const useVideoAssetsGridCellStyle = makeStyles({\r\n  VideoAssetsGridCellContainer: {\r\n    ...getSharedAssetContainerStyle(),\r\n  },\r\n\r\n  videoCellLabelContainer: {\r\n    display: 'flex',\r\n    position: 'absolute',\r\n    left: '12px',\r\n    bottom: '8px',\r\n    zIndex: 1,\r\n  },\r\n\r\n  videoCell: {\r\n    // visibility: 'hidden',\r\n    opacity: 0,\r\n    position: 'absolute',\r\n    top: '0px',\r\n    left: '0px',\r\n    // zIndex: -1,\r\n    ...shorthands.borderRadius('6px'),\r\n    '& .video-previewer-root': {\r\n      backgroundColor: 'transparent',\r\n      transform: 'translateY(-100%)',\r\n      '& .time': {\r\n        paddingLeft: '8px',\r\n        paddingRight: '12px',\r\n        color: '#fff',\r\n        fontSize: '11px',\r\n        lineHeight: '14px',\r\n        whiteSpace: 'nowrap',\r\n      },\r\n      '& button[aria-label=\"Unmute\"], button[aria-label=\"Mute\"]': {\r\n        marginRight: '8px',\r\n        '& .ms-Icon': {\r\n          lineHeight: '32px',\r\n          fontSize: '32px',\r\n          height: '32px',\r\n        },\r\n      },\r\n    },\r\n    '&.show-video': {\r\n      // visibility: 'visible',\r\n      opacity: 1,\r\n      // zIndex: 2,\r\n    },\r\n  },\r\n  placeholderCell: {\r\n    width: '100%',\r\n    height: '135px',\r\n  },\r\n\r\n  // only show checkbox on overlay if it is NOT in multi-selecting mode\r\n  ...getSharedMultiSelectingCellStyles(),\r\n});\r\n","/* eslint-disable object-curly-newline */\r\nimport React, { useCallback, useMemo, useState, useRef, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\n\r\nimport { TimerRegular } from '@fluentui/react-icons';\r\nimport {\r\n  TilesGridCellImage as CellImage,\r\n  TilesGridCellDecorativeLabel as CellLabel,\r\n  TilesGridCellCardWithOverlay,\r\n  TilesGridCellSelectionDecorator,\r\n  TilesGridCellDragDecorator,\r\n} from '../../ads-studio-tile-grid';\r\nimport { TextWithHighlight } from '../../text-with-highlight';\r\nimport {\r\n  Video,\r\n  EncodingPlaceholderWithStyle,\r\n  UnverifiedPlaceholderWithStyle,\r\n  FailedPlaceholderWithStyle\r\n} from '../../video-component';\r\nimport { convertTimeDuration } from '../../../model';\r\n\r\nimport { useVideoAssetsGridCellStyle } from './style';\r\n\r\nexport const AdsStudioVideoAssetsGridCell = ({\r\n  item,\r\n  highlightedText,\r\n  isOverlayEnabled,\r\n  isCellFocused,\r\n  renderCellContent,\r\n  renderOverlayContent,\r\n  selectable,\r\n  selected,\r\n  isMultiSelecting,\r\n  onClick,\r\n  i18n,\r\n  onClickVideo,\r\n  draggable,\r\n  onDrag,\r\n  selectedItemCount,\r\n}) => {\r\n  const classes = useVideoAssetsGridCellStyle();\r\n  const [isVideoLoaded, setVideoLoaded] = useState(false);\r\n  const [showVideo, setShowVideo] = useState(false); // control opacity of video element\r\n  const [hideVideo, setHideVideo] = useState(false); // display video element or not\r\n  const [thumbnailSeletable, setThumbnailSelectable] = useState(false);\r\n\r\n  const { name, thumbnailUrl, id, durationInMS, status, url } = item || {};\r\n  const durationDesc = useMemo(() => convertTimeDuration(durationInMS), [durationInMS]);\r\n\r\n  const [cellRef, setCellRef] = useState(null);\r\n  const timerRef = useRef(null);\r\n\r\n  useEffect(() => {\r\n    if (isVideoLoaded && cellRef && !isMultiSelecting) {\r\n      cellRef.addEventListener('mouseover', () => {\r\n        setShowVideo(true);\r\n        timerRef.current = setTimeout(() => {\r\n          setShowVideo(false);\r\n          setThumbnailSelectable(true);\r\n          setHideVideo(true);\r\n        }, 5000);\r\n      });\r\n      cellRef.addEventListener('mouseout', () => {\r\n        setShowVideo(false);\r\n        clearTimeout(timerRef.current);\r\n        setThumbnailSelectable(false);\r\n      });\r\n    }\r\n  }, [cellRef, isMultiSelecting, isVideoLoaded]);\r\n\r\n  useEffect(() => () => {\r\n    if (timerRef.current) {\r\n      clearTimeout(timerRef.current);\r\n    }\r\n  }, []);\r\n\r\n  useEffect(() => {\r\n    if (selected) {\r\n      setShowVideo(false);\r\n      setThumbnailSelectable(true);\r\n    }\r\n  }, [selected]);\r\n\r\n  const onClickVideoCard = useCallback(() => {\r\n    clearTimeout(timerRef.current);\r\n    onClickVideo();\r\n  }, [onClickVideo]);\r\n\r\n  const playVideoObject = useMemo(() => ({ play: showVideo }), [showVideo]);\r\n\r\n  const wrapperWidth = cellRef ? cellRef.offsetWidth : 0;\r\n\r\n  const cellContent = useMemo(() => {\r\n    let defaultContent = null;\r\n    // status order: unverified => draft => active/invalid\r\n    if (status === 'Active') {\r\n      defaultContent = (\r\n        <div className=\"acitve-video-cell-content\">\r\n          <CellImage\r\n            src={thumbnailUrl}\r\n            alt={name || id || ''}\r\n            showSpinner={false}\r\n            onLoaded={setVideoLoaded}\r\n            i18n={i18n}\r\n          />\r\n          <div className={classes.videoCellLabelContainer}>\r\n            {isVideoLoaded && durationDesc && !showVideo && (\r\n              <CellLabel\r\n                text={durationDesc}\r\n                icon={TimerRegular}\r\n              />\r\n            )}\r\n          </div>\r\n        </div>\r\n      );\r\n    } else {\r\n      setVideoLoaded(true);\r\n\r\n      if (status === 'Unverified') {\r\n        defaultContent = <div className={classnames('unverified-video-cell-content', classes.placeholderCell)}><UnverifiedPlaceholderWithStyle placeholderContent={i18n.getString(_TL_('Downloading...'))} /></div>;\r\n      } else if (status === 'Draft') {\r\n        defaultContent = <div className={classnames('draft-video-cell-content', classes.placeholderCell)}><EncodingPlaceholderWithStyle placeholderContent={i18n.getString(_TL_('Processing...'))} /></div>;\r\n      } else if (status === 'Failed') {\r\n        defaultContent = <div className={classnames('failed-video-cell-content', classes.placeholderCell)}><FailedPlaceholderWithStyle placeholderContent={i18n.getString(_TL_('Invalid video'))} /></div>;\r\n      }\r\n    }\r\n\r\n    if (renderCellContent) {\r\n      return renderCellContent(defaultContent);\r\n    }\r\n    return defaultContent;\r\n  }, [status, renderCellContent, thumbnailUrl, name, id, i18n, classes.videoCellLabelContainer, classes.placeholderCell, isVideoLoaded, showVideo, durationDesc]);\r\n\r\n  const funcRenderOverlayContent = useCallback(() => {\r\n    if (renderOverlayContent) {\r\n      return renderOverlayContent();\r\n    }\r\n    return null;\r\n  }, [renderOverlayContent]);\r\n\r\n  const onCellClick = useCallback(() => {\r\n    if (selectable && thumbnailSeletable) {\r\n      onClick({ item, selected });\r\n    } else if (showVideo) {\r\n      onClickVideoCard();\r\n    }\r\n  }, [item, onClick, onClickVideoCard, selectable, selected, showVideo, thumbnailSeletable]);\r\n\r\n  useEffect(() => {\r\n    if (isMultiSelecting) {\r\n      setThumbnailSelectable(true);\r\n    }\r\n  }, [isMultiSelecting]);\r\n\r\n  return (\r\n    <div className={classnames('tiles-grid-cell-content', classes.VideoAssetsGridCellContainer)}>\r\n      <TilesGridCellDragDecorator\r\n        draggable={draggable}\r\n        item={item}\r\n        dragItemsLength={selectedItemCount}\r\n        onDrag={onDrag}\r\n        i18n={i18n}\r\n        selected={selected}\r\n      >\r\n        <TilesGridCellCardWithOverlay\r\n          isCellFocused={isCellFocused}\r\n          isOverlayEnabled={isOverlayEnabled && isVideoLoaded && thumbnailSeletable}\r\n          renderOverlayContent={funcRenderOverlayContent}\r\n          customCellCardClass={(isOverlayEnabled && !selected && !isMultiSelecting) ? classes.selectableCardContainerAutoHideCheckbox : classes.selectableCardContainer}\r\n          onClick={onCellClick}\r\n        >\r\n          {selectable && thumbnailSeletable ? (\r\n            <TilesGridCellSelectionDecorator item={item} selected={selected} onClick={onClick} ariaLabel={name || i18n.getString(_TL_('Video'))} isFocused={isCellFocused} >\r\n              {cellContent}\r\n            </TilesGridCellSelectionDecorator>\r\n            ) : cellContent}\r\n        </TilesGridCellCardWithOverlay>\r\n        {\r\n          !hideVideo && !isMultiSelecting && status === 'Active' &&\r\n          <div key={id} className={classnames('video-wrapper', classes.videoWrapper)} ref={x => setCellRef(x)}>\r\n            <Video\r\n              src={url}\r\n              autoPlay={false}\r\n              muteByDefault\r\n              i18n={i18n}\r\n              ariaLabel={i18n.getString(_TL_('Video'))}\r\n              maxWidth={wrapperWidth}\r\n              showTime\r\n              className={classnames(classes.videoCell, isVideoLoaded && showVideo && 'show-video')}\r\n              showPlay={false}\r\n              customPlayObject={playVideoObject}\r\n            />\r\n          </div>\r\n        }\r\n      </TilesGridCellDragDecorator>\r\n      <div className=\"cell-description\">\r\n        <div className=\"cell-description-name\">\r\n          <TextWithHighlight text={name || ''} highlightedText={highlightedText} enableTooltip />\r\n        </div>\r\n        {id && (\r\n          <div className=\"cell-description-id\">\r\n            {`${i18n.getString(_TL_('ID'))} `}\r\n            <TextWithHighlight text={id} highlightedText={highlightedText} />\r\n          </div>\r\n        )}\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nAdsStudioVideoAssetsGridCell.propTypes = {\r\n  item: PropTypes.shape({\r\n    id: PropTypes.string,\r\n    name: PropTypes.string,\r\n    url: PropTypes.string,\r\n    createdTime: PropTypes.instanceOf(Date),\r\n  }).isRequired,\r\n  highlightedText: PropTypes.string,\r\n  isOverlayEnabled: PropTypes.bool,\r\n  isCellFocused: PropTypes.bool,\r\n  renderCellContent: PropTypes.func,\r\n  renderOverlayContent: PropTypes.func,\r\n  i18n: PropTypes.shape({\r\n    getString: PropTypes.func,\r\n  }).isRequired,\r\n  selectable: PropTypes.bool,\r\n  selected: PropTypes.bool,\r\n  onClick: () => null,\r\n  isMultiSelecting: PropTypes.bool,\r\n  onClickVideo: PropTypes.func.isRequired,\r\n};\r\n\r\nAdsStudioVideoAssetsGridCell.defaultProps = {\r\n  highlightedText: undefined,\r\n  isOverlayEnabled: false,\r\n  isCellFocused: false,\r\n  renderCellContent: null,\r\n  renderOverlayContent: null,\r\n  selectable: false,\r\n  selected: false,\r\n  onClick: undefined,\r\n  isMultiSelecting: false,\r\n};\r\n","import React, { useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { makeStyles, tokens, shorthands, mergeClasses } from '@fluentui/react-components';\r\nimport classNames from 'classnames';\r\nimport { CheckmarkCircleFilled } from '@fluentui/react-icons';\r\nimport {\r\n  TilesGridCellImage as CellImage,\r\n} from '../../ads-studio-tile-grid';\r\n\r\nexport const useStyles = makeStyles({\r\n  imageWrapper: {\r\n    position: 'relative',\r\n    ...shorthands.borderRadius(tokens.borderRadiusXLarge),\r\n    ...shorthands.outline('2px', 'solid', '#0078d4'),\r\n  },\r\n  containerClass: {\r\n    ...shorthands.borderRadius(tokens.borderRadiusXLarge),\r\n    boxShadow: '0 0 2px 0 rgba(0, 0, 0, 0.12), 0 2px 4px 0 rgba(0, 0, 0, 0.14)',\r\n  },\r\n  imageClass: {\r\n    ...shorthands.borderRadius(tokens.borderRadiusXLarge),\r\n  },\r\n  iconChecked: {\r\n    top: '9px',\r\n    right: '10px',\r\n    position: 'absolute',\r\n    color: '#0078d4',\r\n    fontSize: '20px',\r\n    backgroundColor: '#ffffff',\r\n    ...shorthands.borderRadius(tokens.borderRadiusCircular),\r\n  },\r\n});\r\n\r\nexport const ImagePanelGridCell = (props) => {\r\n  const {\r\n    item, i18n, onSelectImage, isSelected, isMultiple,\r\n  } = props;\r\n  const { url, id } = item || {};\r\n  const classes = useStyles();\r\n\r\n  const onClickCell = useCallback(() => {\r\n    onSelectImage(id);\r\n  }, [id, onSelectImage]);\r\n\r\n  return (\r\n    <div className={isSelected ? mergeClasses('selected-image-wrapper', classes.imageWrapper) : ''}>\r\n      <CellImage\r\n        src={url}\r\n        alt={id || ''}\r\n        showSpinner={false}\r\n        i18n={i18n}\r\n        onClick={onClickCell}\r\n        customClasses={{ containerClass: classNames('panel-image-cell', classes.containerClass), imageClass: mergeClasses('cell-image', classes.imageClass) }}\r\n      />\r\n      {isSelected && isMultiple && <CheckmarkCircleFilled className={classNames('checked-icon', classes.iconChecked)} />}\r\n    </div>\r\n  );\r\n};\r\n\r\nImagePanelGridCell.propTypes = {\r\n  i18n: PropTypes.shape({\r\n    getString: PropTypes.func,\r\n  }).isRequired,\r\n  item: PropTypes.shape({\r\n    id: PropTypes.string,\r\n    url: PropTypes.string,\r\n  }).isRequired,\r\n  onSelectImage: PropTypes.func.isRequired,\r\n  isSelected: PropTypes.bool.isRequired,\r\n  isMultiple: PropTypes.bool,\r\n};\r\n\r\nImagePanelGridCell.defaultProps = {\r\n  isMultiple: true,\r\n};\r\n\r\n","import React, { useMemo, useCallback, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\n\r\nimport _ from 'underscore';\r\nimport { makeStyles, } from '@fluentui/react-components';\r\nimport { ImagePanelGridCell } from '../ads-studio-asset-grid-cell';\r\nimport { SectionTilesGrid, TilesGridLoadingCell } from '../ads-studio-tile-grid';\r\nimport { AdsStudioSpinner } from '../ads-studio-spinner';\r\nimport { GridSectionName, DEFAULT_PAGE_SIZE } from '../../model/constants';\r\n\r\nconst DEFAULT_IMAGE_WIDTH = 211;\r\nconst DEFAULT_COLUMN_PADDING = 16;\r\n\r\nconst useStyles = makeStyles({\r\n  contentGridWrapper: {\r\n    paddingTop: '24px',\r\n  },\r\n  description: {\r\n    marginBottom: '8px',\r\n    fontSize: '14px',\r\n    lineHeight: '20px',\r\n    fontWeight: '600',\r\n  },\r\n});\r\n\r\nexport const PanelImageGrid = ({\r\n  i18n,\r\n  dataService,\r\n  onFailedToLoadData,\r\n  onSelectImage,\r\n  overlayBodyRef,\r\n  imageWidth,\r\n  columnPadding,\r\n  isHideDescription,\r\n  isMultiple = true,\r\n  isLoadingMore,\r\n}) => {\r\n  const {\r\n    assets,\r\n    totalAssetCount,\r\n    loadMoreData,\r\n  } = dataService;\r\n  const classes = useStyles();\r\n  const [selectedItemIds, setSelectedItemIds] = useState([]);\r\n\r\n  const onSelectedChange = useCallback((selectedItemId) => {\r\n    if (selectedItemIds.includes(selectedItemId)) {\r\n      const newSelectedItems = selectedItemIds.filter(itemId => itemId !== selectedItemId);\r\n      setSelectedItemIds(newSelectedItems);\r\n    } else {\r\n      setSelectedItemIds(isMultiple ? [...selectedItemIds, selectedItemId] : [selectedItemId]);\r\n    }\r\n    onSelectImage(selectedItemId);\r\n  }, [isMultiple, onSelectImage, selectedItemIds]);\r\n\r\n  const assetsWithAction = useMemo(() => _.map(assets, (image) => {\r\n    const {\r\n      id,\r\n    } = image;\r\n\r\n    return ({\r\n      ...image,\r\n      onAction: (event) => {\r\n        const code = _.get(event, ['detail', 'originalEvent', 'code']);\r\n        if (code === 'Enter' || code === 'Space') {\r\n          onSelectedChange(id);\r\n          event.preventDefault();\r\n        }\r\n      },\r\n    });\r\n  }), [assets, onSelectedChange]);\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: assetsWithAction,\r\n    totalItemCount: totalAssetCount,\r\n    config: {\r\n      width: imageWidth || DEFAULT_IMAGE_WIDTH,\r\n      columnPadding: columnPadding || DEFAULT_COLUMN_PADDING,\r\n      scrollContainer: overlayBodyRef || '.ads-studio-panel-container-drawer-overlay-body',\r\n    },\r\n  }), [assetsWithAction, totalAssetCount, imageWidth, columnPadding, overlayBodyRef]);\r\n\r\n  const sectionGridData = useMemo(\r\n    () => ([imagesGridSection]),\r\n    [imagesGridSection]\r\n  );\r\n\r\n  const onRenderCell = useCallback(({ item }) => {\r\n    const { _index, id } = item;\r\n\r\n    return (\r\n      <ImagePanelGridCell\r\n        item={item}\r\n        index={_index}\r\n        i18n={i18n}\r\n        isMultiple={isMultiple}\r\n        onSelectImage={onSelectedChange}\r\n        isSelected={selectedItemIds.includes(id)}\r\n      />\r\n    );\r\n  }, [i18n, onSelectedChange, selectedItemIds, isMultiple]);\r\n\r\n  const loadNextPage = useCallback(() => {\r\n    if (assets && assets.length >= totalAssetCount) {\r\n      return;\r\n    }\r\n    const p$res = loadMoreData({ count: DEFAULT_PAGE_SIZE });\r\n    if (p$res) {\r\n      p$res.catch((err) => {\r\n        if (onFailedToLoadData) {\r\n          onFailedToLoadData(err);\r\n        }\r\n      });\r\n    }\r\n  }, [assets, loadMoreData, onFailedToLoadData, totalAssetCount]);\r\n\r\n  const onRenderLoadingCell = useCallback(({ items, totalItemCount }) => {\r\n    if ((items.length < totalItemCount) && (items.length > 0)) {\r\n      return (\r\n        <TilesGridLoadingCell onLoading={loadNextPage} key={items.length} >\r\n          {isLoadingMore && (\r\n            <div className=\"section-loading\">\r\n              <AdsStudioSpinner useCustomSize />\r\n            </div>\r\n          )}\r\n        </TilesGridLoadingCell>\r\n      );\r\n    }\r\n    return null;\r\n  }, [isLoadingMore, loadNextPage]);\r\n\r\n  return (\r\n    <div className={classNames('panel-grid', classes.contentGridWrapper)}>\r\n      {!isHideDescription && <div className={classes.description}>{i18n.getString(_TL_('Suggestions from recent searches'))}</div>}\r\n      <SectionTilesGrid\r\n        sectionData={sectionGridData}\r\n        onRenderCell={onRenderCell}\r\n        onRenderLoadingCell={onRenderLoadingCell}\r\n        loadNextPage={loadNextPage}\r\n      />\r\n    </div>\r\n  );\r\n};\r\n\r\nPanelImageGrid.propTypes = {\r\n  i18n: PropTypes.shape({\r\n    getString: PropTypes.func,\r\n  }).isRequired,\r\n  isMultiple: PropTypes.bool,\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  onSelectImage: PropTypes.func.isRequired,\r\n  overlayBodyRef: PropTypes.shape({}),\r\n};\r\n\r\nPanelImageGrid.defaultProps = {\r\n  dataService: {},\r\n  onFailedToLoadData: _.noop,\r\n  overlayBodyRef: null,\r\n  isMultiple: true,\r\n};\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nexport const usePerformanceFilterBarEditingStyle = makeStyles({\r\n  filterBarEditingContainer: {\r\n    position: 'relative',\r\n    minHeight: '56px',\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    backgroundColor: '#f3f2f1',\r\n\r\n    '& .filter-list-editing': {\r\n      display: 'flex',\r\n      ...shorthands.flex(1),\r\n      flexWrap: 'wrap',\r\n      alignItems: 'flex-start',\r\n      paddingLeft: '12px',\r\n\r\n      '& .filter-list-divider': {\r\n        paddingRight: '12px',\r\n      },\r\n    },\r\n\r\n    '& .filter-bar-button-group': {\r\n      marginLeft: 'auto',\r\n      display: 'flex',\r\n    },\r\n\r\n    '& button.add-filter-button .iconba-Add': {\r\n      color: '#373737',\r\n    },\r\n    '& button.filter-bar-button': {\r\n      ...shorthands.border('none'),\r\n      backgroundColor: 'transparent',\r\n      ...shorthands.padding('0px', '7px'),\r\n      height: '56px',\r\n      '& .iconba': {\r\n        color: '#373737',\r\n      },\r\n      '&:hover': {\r\n        backgroundColor: '#f3f2f1',\r\n      },\r\n      '&:focus': {\r\n        backgroundColor: '#e1dfdd',\r\n        '&:hover': {\r\n          backgroundColor: '#d0d0d0',\r\n        },\r\n      },\r\n    },\r\n    '& .filter-bar-divider': {\r\n      ...shorthands.borderLeft('1px', 'solid', '#eaeaea'),\r\n      ...shorthands.margin('8px', '0px'),\r\n    },\r\n    '& button.filter-bar-cancel-button': {\r\n      ...shorthands.padding('0px', '18px'),\r\n      minWidth: 'auto',\r\n      '& .iconba:before': {\r\n        color: '#373737',\r\n      },\r\n    },\r\n  },\r\n});\r\n\r\nexport const usePerformanceFilterBarReadonlyStyle = makeStyles({\r\n  filterBarReadonlyContainer: {\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n\r\n    '& .btn.btn-link': {\r\n      marginLeft: '5px',\r\n      color: '#17717a',\r\n      ...shorthands.textDecoration('underline'),\r\n    },\r\n\r\n    '& .filter-list': {\r\n      height: '56px',\r\n      paddingLeft: '12px',\r\n      display: 'block',\r\n      alignItems: 'center',\r\n      textOverflow: 'ellipsis',\r\n      color: '#17717a',\r\n      ...shorthands.overflow('hidden'),\r\n      whiteSpace: 'nowrap',\r\n\r\n      fontFamily: 'Segoe UI',\r\n      fontSize: '14px',\r\n      lineHeight: '19px',\r\n      paddingTop: '14px',\r\n\r\n      '& .asset-library-search': {\r\n        top: '0px',\r\n      },\r\n    },\r\n    '& .filter-list:focus-within': {\r\n      textOverflow: 'inherit', // collpase text would invisiable issues when use tab to change focus, reference here: https://msasg.visualstudio.com/DefaultCollection/Bing_Ads/_workitems/edit/3702640/\r\n    },\r\n  },\r\n  addFilterButton: {\r\n    ...shorthands.flex(0, 0, 'auto'),\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: '#ffffff',\r\n    fontWeight: '600',\r\n  },\r\n});\r\n\r\nexport const useViewAllFiltersButtonStyle = makeStyles({\r\n  viewAllButton: {\r\n    ...shorthands.border('none'),\r\n    color: 'rgb(23, 113, 122) !important',\r\n    fontWeight: '400',\r\n    width: 'auto',\r\n    minWidth: '0px !important',\r\n    ...shorthands.padding('0px !important', '8px !important'),\r\n    backgroundColor: 'transparent !important',\r\n    lineHeight: '56px !important',\r\n    '&:hover': {\r\n      ...shorthands.textDecoration('underline'),\r\n    },\r\n  },\r\n  viewContentTitle: {\r\n    paddingLeft: '8px',\r\n    fontWeight: '600',\r\n    fontSize: '20px',\r\n  },\r\n  viewAllFilterItem: {\r\n    display: 'block',\r\n    ...shorthands.border('none'),\r\n    color: 'rgb(23, 113, 122) !important',\r\n    fontWeight: '400',\r\n    width: 'auto',\r\n    minWidth: '0px !important',\r\n    ...shorthands.padding('0px !important', '8px !important'),\r\n    height: 'auto',\r\n    backgroundColor: 'transparent !important',\r\n    '&:hover': {\r\n      ...shorthands.textDecoration('underline'),\r\n    },\r\n  },\r\n});\r\n","import _ from 'underscore';\r\nimport classNames from 'classnames';\r\nimport React, { Fragment } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Button } from '@fluentui/react-components';\r\nimport { ArrowClockwiseRegular, DismissRegular } from '@fluentui/react-icons';\r\n\r\nimport { usePerformanceFilterBarEditingStyle } from './styles';\r\n\r\nconst EditingFilterBar = ({\r\n  filters,\r\n  focusedFilter,\r\n  onRenderNewFilterContextMenu,\r\n  onRenderFilter,\r\n  onCloseClick,\r\n  onResetClick,\r\n  i18n,\r\n}) => {\r\n  const classes = usePerformanceFilterBarEditingStyle();\r\n  // if no editing filter, show new filter context menu\r\n\r\n  const getDivider = (index) => {\r\n    if (index === filters.length - 1) {\r\n      return null;\r\n    }\r\n    return (<span className=\"filter-list-divider\" />);\r\n  };\r\n\r\n  return (\r\n    <div className={classNames('filterBarEditingContainer', classes.filterBarEditingContainer)}>\r\n      <div className=\"filter-list-editing\">\r\n        {filters.map((filter, index) => (\r\n          <Fragment key={`filter-${filter.id}`}>\r\n            {onRenderFilter({\r\n              filter,\r\n              focused: focusedFilter && focusedFilter.id === filter.id,\r\n              index,\r\n              isLast: index === filters.length - 1,\r\n              isFirst: index === 0,\r\n            })}\r\n            {getDivider(index)}\r\n          </Fragment>\r\n        ))}\r\n        {onRenderNewFilterContextMenu()}\r\n      </div>\r\n      <div className=\"filter-bar-button-group\">\r\n        <Button\r\n          onClick={onResetClick}\r\n          className=\"filter-bar-button reset-button\"\r\n          aria-label={i18n.getString(_TL_('Reset filter to default state'))}\r\n          icon={<ArrowClockwiseRegular />}\r\n        >\r\n          {i18n.getString(_TL_('Reset'))}\r\n        </Button>\r\n        <div className=\"filter-bar-divider\" />\r\n        <Button\r\n          onClick={onCloseClick}\r\n          className=\"filter-bar-cancel-button filter-bar-button\"\r\n          aria-label={i18n.getString(_TL_('Close filter panel'))}\r\n          icon={<DismissRegular />}\r\n        />\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nEditingFilterBar.propTypes = {\r\n  filters: PropTypes.arrayOf(PropTypes.shape({})),\r\n  focusedFilter: PropTypes.shape({\r\n    id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\r\n  }),\r\n  onRenderNewFilterContextMenu: PropTypes.func,\r\n  onRenderFilter: PropTypes.func.isRequired,\r\n  onCloseClick: PropTypes.func,\r\n  onResetClick: PropTypes.func,\r\n  i18n: PropTypes.shape({\r\n    getString: PropTypes.func,\r\n  }).isRequired,\r\n};\r\n\r\nEditingFilterBar.defaultProps = {\r\n  filters: [],\r\n  focusedFilter: null,\r\n  onRenderNewFilterContextMenu: () => null,\r\n  onCloseClick: _.noop,\r\n  onResetClick: _.noop,\r\n};\r\n\r\nexport const PerformanceEditingFilterBar\r\n  = React.memo(EditingFilterBar);\r\n","import _ from 'underscore';\r\nimport React from 'react';\r\nimport classNames from 'classnames';\r\nimport { Popover, PopoverSurface, PopoverTrigger, Button, mergeClasses } from '@fluentui/react-components';\r\nimport PropTypes from 'prop-types';\r\nimport { useViewAllFiltersButtonStyle } from './styles';\r\n\r\nexport const FilterListWithPopover = ({\r\n  filters, onClickFilter, i18n,\r\n}) => {\r\n  const classes = useViewAllFiltersButtonStyle();\r\n\r\n  return (\r\n    <div className=\"view-content-popover\">\r\n      <div className={classes.viewContentTitle}>{i18n.getString('Filters')}</div>\r\n      {_.map(filters, filter =>\r\n      (\r\n        <Button\r\n          key={`filter-${filter.id}`}\r\n          className={classNames('filter-item', classes.viewAllFilterItem)}\r\n          onClick={() => onClickFilter(filter)}\r\n        >\r\n          <span>{`${i18n.getString(filter.title)}: ${filter.humanizedValue}`}</span>\r\n        </Button>\r\n      ))}\r\n    </div>\r\n  );\r\n};\r\n\r\nFilterListWithPopover.propTypes = {\r\n  filters: PropTypes.arrayOf(PropTypes.shape({\r\n    humanizedValue: PropTypes.string,\r\n  })).isRequired,\r\n  onClickFilter: PropTypes.func.isRequired,\r\n  i18n: PropTypes.shape({\r\n    getString: PropTypes.func,\r\n  }).isRequired,\r\n};\r\n\r\n\r\nconst ViewAllFiltersButtonImpl = ({\r\n  filters, onClickFilter, i18n,\r\n}) => {\r\n  const classes = useViewAllFiltersButtonStyle();\r\n  // don't show the always visible filters on the View all popover\r\n  const selectedFilters = _.filter(filters, ({ isFilterAlwaysVisible }) => !isFilterAlwaysVisible);\r\n  return (_.isEmpty(selectedFilters) ? null : (\r\n    <Popover withArrow positioning={{ position: 'after', align: 'start' }}>\r\n      <PopoverTrigger>\r\n        <Button as=\"a\" className={mergeClasses('view-all-button', classes.viewAllButton)}>{i18n.getString(_TL_('View all'))}</Button>\r\n      </PopoverTrigger>\r\n\r\n      <PopoverSurface>\r\n        <FilterListWithPopover i18n={i18n} onClickFilter={onClickFilter} filters={selectedFilters} />\r\n      </PopoverSurface>\r\n    </Popover>\r\n  ));\r\n};\r\n\r\nViewAllFiltersButtonImpl.propTypes = {\r\n  filters: PropTypes.arrayOf(PropTypes.shape({\r\n    isFilterAlwaysVisible: PropTypes.bool,\r\n  })).isRequired,\r\n  onClickFilter: PropTypes.func.isRequired,\r\n  i18n: PropTypes.shape({\r\n    getString: PropTypes.func,\r\n  }).isRequired,\r\n};\r\n\r\nexport const ViewAllFiltersButton = React.memo(ViewAllFiltersButtonImpl);\r\n","import _ from 'underscore';\r\nimport classNames from 'classnames';\r\nimport { Button } from '@fluentui/react-components';\r\nimport { AddRegular } from '@fluentui/react-icons';\r\nimport React, { Fragment, useRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { keyCode } from '@bingads-webui/keycode';\r\nimport { FilterType } from '../../model/filter-type';\r\nimport { ViewAllFiltersButton } from './view-all-filters-button';\r\nimport { usePerformanceFilterBarReadonlyStyle } from './styles';\r\n\r\nconst ReadonlyFilterBar = ({\r\n  filters,\r\n  onRenderFilter,\r\n  onClickFilter,\r\n  onClickAddFilterButton,\r\n  i18n,\r\n}) => {\r\n  const classes = usePerformanceFilterBarReadonlyStyle();\r\n  const onKeyPress = (event, filter, index) => {\r\n    if (event.which === keyCode.Enter || event.which === keyCode.Space) {\r\n      onClickFilter(filter, index);\r\n    }\r\n  };\r\n\r\n  const filterListRef = useRef();\r\n  const onFilterBlur = () => {\r\n    // reset scroll position to 0\r\n    if (filterListRef.current) {\r\n      filterListRef.current.scrollTo(0, 0);\r\n    }\r\n  };\r\n\r\n  return (\r\n    <div className={classNames('filterBarReadonlyContainer', classes.filterBarReadonlyContainer)}>\r\n      <div className=\"filter-list\" ref={filterListRef} onBlur={onFilterBlur}>\r\n        {filters.map((filter, index) => (\r\n          filter.type === FilterType.SearchText ?\r\n            onRenderFilter({\r\n                filter,\r\n                index,\r\n                isLast: index === filters.length - 1,\r\n                isFirst: index === 0,\r\n              }) :\r\n            <Fragment key={`filter-${filter.id}`}>\r\n              <span\r\n                onClick={() => onClickFilter(filter, index)}\r\n                tabIndex=\"0\"\r\n                role=\"button\"\r\n                onKeyDown={event => onKeyPress(event, filter, index)}\r\n              >\r\n                {onRenderFilter({\r\n                  filter,\r\n                  index,\r\n                  isLast: index === filters.length - 1,\r\n                  isFirst: index === 0,\r\n                })}\r\n              </span>\r\n            </Fragment>\r\n        ))}\r\n      </div>\r\n      <ViewAllFiltersButton filters={filters} onClickFilter={onClickFilter} i18n={i18n} />\r\n      <Button className={classNames('add-filter-button', classes.addFilterButton)} icon={<AddRegular />} name=\"add filter\" onClick={onClickAddFilterButton}>{i18n.getString('Add filter')}</Button>\r\n    </div>\r\n  );\r\n};\r\n\r\nReadonlyFilterBar.propTypes = {\r\n  filters: PropTypes.arrayOf(PropTypes.shape({})),\r\n  onRenderFilter: PropTypes.func.isRequired,\r\n  onClickFilter: PropTypes.func,\r\n  onClickAddFilterButton: PropTypes.func,\r\n  i18n: PropTypes.shape({\r\n    getString: PropTypes.func,\r\n  }).isRequired,\r\n};\r\n\r\nReadonlyFilterBar.defaultProps = {\r\n  filters: [],\r\n  onClickFilter: _.noop,\r\n  onClickAddFilterButton: _.noop,\r\n};\r\n\r\nexport const PerformanceReadonlyFilterBar\r\n  = React.memo(ReadonlyFilterBar);\r\n","/* eslint-disable jsx-a11y/media-has-caption */\r\nimport React, { useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport classnames from 'classnames';\r\nimport { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nconst useStyles = makeStyles({\r\n  dynamicSizeContainer: {\r\n    height: '100%',\r\n\r\n    '& video': {\r\n      maxWidth: '100%',\r\n      maxHeight: '100%',\r\n      position: 'relative',\r\n      top: '50%',\r\n      transform: 'translateY(-50%)',\r\n    },\r\n  },\r\n  videoOutlineGray: {\r\n    '& video:focus': {\r\n      ...shorthands.outline('2px', 'solid', 'gray'),\r\n      outlineOffset: '1px',\r\n    },\r\n  },\r\n  videoNormalContainer: {\r\n    '& video::-webkit-media-controls-play-button:focus': {\r\n      outlineOffset: '-2px',\r\n    },\r\n    '& video::-webkit-media-controls-pause-button:focus': {\r\n      outlineOffset: '-2px',\r\n    },\r\n    '& video::-webkit-media-controls-volume-slider:focus': {\r\n      outlineOffset: '-2px',\r\n    },\r\n    '& video::-webkit-media-controls-timeline:focus': {\r\n      outlineOffset: '-2px',\r\n    },\r\n    '& video::-webkit-media-controls-mute-button:focus': {\r\n      outlineOffset: '-2px',\r\n    },\r\n    '& video::-webkit-media-controls-fullscreen-button:focus': {\r\n      outlineOffset: '-2px',\r\n    },\r\n    '& video::-webkit-media-controls-panel': {\r\n      backgroundImage: 'linear-gradient(0deg,rgba(255, 255, 255, 0.8), transparent) !important',\r\n      filter: 'brightness(1)',\r\n      boxShadow: 'none !important',\r\n    },\r\n  },\r\n});\r\n\r\n// since the <video> didn't support the stream play directly, so will using one link in DownloadUrl instead of the url as src.\r\nexport const VideoPlaybackView = (props) => {\r\n  const {\r\n    height,\r\n    width,\r\n    src,\r\n    thumbnailUrl,\r\n    hideControls,\r\n    onLoadedMetadata,\r\n    onErrorHanler,\r\n    isOutlineGray,\r\n  } = props;\r\n\r\n  const classes = useStyles();\r\n  const useDynamicVideoSize = !(width > 0 || height > 0);\r\n\r\n  const onError = useCallback((ev) => {\r\n    const errorCode = ev && ev.target && ev.target.error.code;\r\n    onErrorHanler(errorCode);\r\n  }, [onErrorHanler]);\r\n\r\n  return (\r\n    <div className={classnames(useDynamicVideoSize && classes.dynamicSizeContainer, isOutlineGray && classes.videoOutlineGray, classes.videoNormalContainer, 'video-playback-view')}>\r\n      <video\r\n        width={width}\r\n        height={height}\r\n        poster={thumbnailUrl}\r\n        controls={!hideControls}\r\n        onLoadedMetadata={onLoadedMetadata}\r\n        onError={onError}\r\n        src={src}\r\n        controlsList=\"nodownload nofullscreen\"\r\n        disablePictureInPicture\r\n      />\r\n    </div>);\r\n};\r\n\r\nVideoPlaybackView.propTypes = {\r\n  isOutlineGray: PropTypes.bool,\r\n  src: PropTypes.string.isRequired,\r\n  thumbnailUrl: PropTypes.string,\r\n  hideControls: PropTypes.bool,\r\n  height: PropTypes.number,\r\n  width: PropTypes.number,\r\n  onErrorHanler: PropTypes.func,\r\n  onLoadedMetadata: PropTypes.func,\r\n};\r\n\r\nVideoPlaybackView.defaultProps = {\r\n  isOutlineGray: false,\r\n  thumbnailUrl: null,\r\n  hideControls: false,\r\n  width: undefined,\r\n  height: undefined,\r\n  onErrorHanler: _.noop,\r\n  onLoadedMetadata: _.noop,\r\n};\r\n","import React, { useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport { makeStyles, Spinner, shorthands } from '@fluentui/react-components';\r\n\r\nconst useStyles = makeStyles({\r\n  container: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    justifyContent: 'center',\r\n  },\r\n  mainViewContainer: {\r\n    width: '100%',\r\n    backgroundColor: 'rgb(0,0,0, 0.8)',\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    justifyContent: 'center',\r\n    flexGrow: 1,\r\n  },\r\n  mainViewContentContainer: {\r\n    height: '41px',\r\n    width: '80px',\r\n    backgroundColor: 'rgb(50,49,48, 0.6)',\r\n    alignItems: 'center',\r\n    display: 'flex',\r\n    justifyContent: 'center',\r\n  },\r\n  mainViewIconLabelContainer: {\r\n    marginLeft: '6px',\r\n  },\r\n  contentIcon: {\r\n    width: '25px',\r\n  },\r\n\r\n  footerContainer: {\r\n    backgroundColor: '#2F2F2F',\r\n    display: 'flex',\r\n    height: '48px',\r\n    ...shorthands.padding('10px'),\r\n    alignItems: 'center',\r\n    lineHeight: '21px',\r\n    whiteSpace: 'nowrap',\r\n    ...shorthands.overflow('hidden'),\r\n    textOverflow: 'ellipsis',\r\n  },\r\n  footerInvalid: {\r\n    backgroundColor: '#FFF4CE',\r\n  }, // required otherwise nested classnames will not work\r\n  footerContent: {\r\n    // color: palette.white,\r\n    display: 'flex',\r\n    marginLeft: '8px',\r\n    alignItems: 'center',\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  },\r\n});\r\n\r\nexport const ItemPlaceholderBoxViewFooterType = {\r\n  info: 'info',\r\n  warning: 'warning',\r\n};\r\n\r\nexport const ItemPlaceholderBoxView = ({\r\n  className,\r\n  mainViewIcon,\r\n  mainViewIconLabel,\r\n  footerProps,\r\n}) => {\r\n  const {\r\n    type,\r\n    summary,\r\n    tip,\r\n    learnMoreLinkText,\r\n    learnMoreLinkTopic,\r\n  } = footerProps || {};\r\n\r\n  const classes = useStyles();\r\n\r\n  const renderFooter = useCallback(() => {\r\n    let content;\r\n\r\n    if (footerProps) {\r\n      content = (\r\n        <div className={classnames(\r\n            classes.footerContainer,\r\n            type === ItemPlaceholderBoxViewFooterType.warning && classes.footerInvalid\r\n          )}\r\n        >\r\n          <Spinner size=\"small\" />\r\n          <div className={classes.footerContent}>\r\n            {\r\n              summary &&\r\n              <span className={classes.footContentStatus}><b className=\"summary\">{summary}</b></span>\r\n            }\r\n            {\r\n              tip &&\r\n              <React.Fragment>\r\n                <span>&nbsp;</span>\r\n                <span className=\"tip\">{tip}</span>\r\n              </React.Fragment>\r\n            }\r\n            {\r\n              learnMoreLinkText && learnMoreLinkTopic &&\r\n              <React.Fragment>\r\n                <span>&nbsp;</span>\r\n                <button className={classnames(`HelpTopic ${classes.helpLink}`)} query={`help:${learnMoreLinkTopic}`}>{learnMoreLinkText}</button>\r\n              </React.Fragment>\r\n            }\r\n          </div>\r\n        </div>\r\n      );\r\n    }\r\n\r\n    return content;\r\n  }, [classes.footContentStatus, classes.footerContainer, classes.footerContent, classes.footerInvalid, classes.helpLink, footerProps, learnMoreLinkText, learnMoreLinkTopic, summary, tip, type]);\r\n\r\n  return (\r\n    <div className={classnames(classes.container, className)}>\r\n      <div className={classes.mainViewContainer}>\r\n        <div className={classes.mainViewContentContainer}>\r\n          <img src={mainViewIcon} className={classes.contentIcon} alt=\"\" />\r\n          <span className={classes.mainViewIconLabelContainer}>{mainViewIconLabel}</span>\r\n        </div>\r\n      </div>\r\n      {renderFooter()}\r\n    </div>\r\n  );\r\n};\r\n\r\nItemPlaceholderBoxView.propTypes = {\r\n  className: PropTypes.string,\r\n  mainViewIcon: PropTypes.string.isRequired,\r\n  mainViewIconLabel: PropTypes.string.isRequired,\r\n  footerProps: PropTypes.shape({\r\n    type: PropTypes.oneOf(Object.keys(ItemPlaceholderBoxViewFooterType)),\r\n    renderIcon: PropTypes.func,\r\n    summary: PropTypes.string,\r\n    tip: PropTypes.string,\r\n    learnMoreLinkText: PropTypes.string,\r\n    learnMoreLinkTopic: PropTypes.string,\r\n  }),\r\n};\r\n\r\nItemPlaceholderBoxView.defaultProps = {\r\n  className: '',\r\n  footerProps: {},\r\n};\r\n","import { baseItemBoxProgressStyles } from '@bingads-webui-campaign-react/upload-file-picker';\r\nimport { shorthands } from '@fluentui/react-components';\r\n\r\nexport const getFolderProgressPreviewStyles = {\r\n  imageContent: {\r\n    ...baseItemBoxProgressStyles.imageContent,\r\n    height: '50px',\r\n    display: 'flex',\r\n    flexDirection: 'row',\r\n    justifyContent: 'space-between',\r\n    alignItems: 'center',\r\n  },\r\n  imageName: {\r\n    display: 'none',\r\n  },\r\n  imageContentText: {\r\n    display: 'flex',\r\n    flexDirection: 'row',\r\n    flexGrow: '1',\r\n    flexShrink: '1',\r\n    justifyContent: 'space-between',\r\n    alignItems: 'center',\r\n    marginLeft: '9px',\r\n    marginRight: '22px',\r\n    fontSize: '12px',\r\n    ...shorthands.overflow('hidden'),\r\n  },\r\n  folderName: {\r\n    fontWeight: '600',\r\n    flexGrow: '1',\r\n    flexShrink: '1',\r\n    ...shorthands.overflow('hidden'),\r\n    textOverflow: 'ellipsis',\r\n  },\r\n  folderSize: {\r\n    flexGrow: '0',\r\n    flexShrink: '0',\r\n    fontWeight: '400',\r\n  },\r\n  folderIconRoot: {\r\n    display: 'inline-block',\r\n    height: '25.78px',\r\n    width: '34px',\r\n    marginLeft: '13px',\r\n    flexGrow: '0',\r\n    flexShrink: '0',\r\n  },\r\n};\r\n","import React from 'react';\r\nimport { makeStyles, mergeClasses } from '@fluentui/react-components';\r\nimport { FolderIcon } from '../folder-icon-component';\r\n\r\nimport { getFolderProgressPreviewStyles } from './styles';\r\n\r\nconst useStyle = makeStyles(getFolderProgressPreviewStyles);\r\n\r\nexport const createFolderPreviewComponent = ({ i18n }) => ({\r\n  url,\r\n  alt,\r\n  name,\r\n  numberOfAssets,\r\n}) => {\r\n  const classes = useStyle();\r\n  return (\r\n    <div className={mergeClasses('folder-upload-image-content', classes.imageContent)} alt={alt}>\r\n      <FolderIcon thumbnailImageUrl={url} folderIconRootClassName={classes.folderIconRoot} />\r\n      <div className={classes.imageContentText}>\r\n        <div className={mergeClasses('folder-name', classes.folderName)}>\r\n          {name}\r\n        </div>\r\n        <div className={classes.folderSize}>\r\n          {i18n.getString(_TL_('{{numberOfAssets}} assets'), { numberOfAssets: numberOfAssets || 0 })}\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { SimpleImagePreview } from '@bingads-webui-campaign-react/upload-file-picker';\r\n\r\nexport const FileUploadingPreview = ({\r\n  className,\r\n  url,\r\n  isVideo,\r\n  alt,\r\n}) => {\r\n  if (isVideo) {\r\n    // eslint-disable-next-line jsx-a11y/media-has-caption\r\n    return <video className={className} src={url} />;\r\n  }\r\n\r\n  return <SimpleImagePreview className={className} url={url} alt={alt} />;\r\n};\r\n\r\nFileUploadingPreview.propTypes = {\r\n  className: PropTypes.string,\r\n  url: PropTypes.string.isRequired,\r\n  isVideo: PropTypes.bool,\r\n  alt: PropTypes.string,\r\n};\r\n\r\nFileUploadingPreview.defaultProps = {\r\n  className: '',\r\n  isVideo: false,\r\n  alt: '',\r\n};\r\n","import React, { useState, useMemo, useCallback, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport classnames from 'classnames';\r\nimport { makeStyles } from '@fluentui/react-components';\r\nimport { ItemPlaceholderBoxView } from './item-placeholder-box-view';\r\nimport { VideoPlaybackView } from './video-playback-view';\r\n\r\n\r\nconst videoIcon = \"data:image/svg+xml,%3Csvg width='14' height='12' viewBox='0 0 14 12' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1 3C1 2.17157 1.67157 1.5 2.5 1.5H8.5C9.32843 1.5 10 2.17157 10 3V9C10 9.82843 9.32843 10.5 8.5 10.5H2.5C1.67157 10.5 1 9.82843 1 9V3ZM2.5 0.5C1.11929 0.5 0 1.61929 0 3V9C0 10.3807 1.11929 11.5 2.5 11.5H8.5C9.88071 11.5 11 10.3807 11 9V8.49943L12.7999 9.84997C13.2943 10.221 14 9.86819 14 9.25008V2.75496C14 2.13743 13.2954 1.78451 12.8009 2.15432L11 3.50093V3C11 1.61929 9.88071 0.5 8.5 0.5H2.5ZM11 4.74959L13 3.25407V8.74993L11 7.24921V4.74959Z' fill='white'/%3E%3C/svg%3E%0A\";\r\n\r\nconst VideoLoadState = {\r\n  notLoaded: 'notLoaded',\r\n  loaded: 'loaded',\r\n  error: 'error',\r\n};\r\n\r\nconst useStyles = makeStyles({\r\n  container: {\r\n    marginTop: '20px',\r\n  },\r\n  placeholderView: {\r\n    height: '500px',\r\n    maxWidth: '746px',\r\n    width: '100%',\r\n  },\r\n  hidden: {\r\n    visibility: 'hidden',\r\n  },\r\n  shown: {\r\n    visibility: 'visible',\r\n  },\r\n});\r\n\r\nconst PlaceHolderBoxViewFooterConfig = {\r\n  text: {\r\n    summary: _TL_('Your video is currently loading.'),\r\n    tip: _TL_('As long as your browser supports the video\\'s URL, it\\'ll display once it finishes.'),\r\n  },\r\n};\r\n\r\nexport const VideoLoadPreview = ({\r\n  i18n,\r\n  url,\r\n  onLoadedMetadata,\r\n  onErrorHandler,\r\n}) => {\r\n  const classes = useStyles();\r\n  const [videoLoadState, setVideoLoadState] = useState(VideoLoadState.notLoaded);\r\n  const [cachedUrl, setCachedUrl] = useState(url);\r\n\r\n  useEffect(() => {\r\n    if (url !== cachedUrl) {\r\n      setCachedUrl(url);\r\n      setVideoLoadState(VideoLoadState.notLoaded);\r\n    }\r\n  }, [cachedUrl, url]);\r\n\r\n  const footerProps = useMemo(() => {\r\n    const localizedTextFields = _.mapObject(\r\n      PlaceHolderBoxViewFooterConfig.text,\r\n      text => i18n.getString(text)\r\n    );\r\n\r\n    return {\r\n      ...localizedTextFields,\r\n    };\r\n  }, [i18n]);\r\n\r\n  const onLoadedMetadataInternal = useCallback(() => {\r\n    setVideoLoadState(VideoLoadState.loaded);\r\n    onLoadedMetadata();\r\n  }, [onLoadedMetadata]);\r\n\r\n  const onErrorHandlerInternal = useCallback((error) => {\r\n    setVideoLoadState(VideoLoadState.error);\r\n    onErrorHandler(error);\r\n  }, [onErrorHandler]);\r\n\r\n  return (\r\n    <div className={classnames(classes.container, 'video-load-preview')}>\r\n      {\r\n        videoLoadState === VideoLoadState.notLoaded &&\r\n        <ItemPlaceholderBoxView\r\n          className={classes.placeholderView}\r\n          mainViewIcon={videoIcon}\r\n          mainViewIconLabel={i18n.getString(_TL_('Video'))}\r\n          footerProps={footerProps}\r\n        />\r\n      }\r\n      <div className={classnames(classes.hidden, videoLoadState === VideoLoadState.loaded && classes.shown)}>\r\n        <VideoPlaybackView\r\n          onLoadedMetadata={onLoadedMetadataInternal}\r\n          onErrorHanler={onErrorHandlerInternal}\r\n          src={url}\r\n          height={400}\r\n          isOutlineGray\r\n        />\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nVideoLoadPreview.propTypes = {\r\n  i18n: PropTypes.shape({\r\n    getString: PropTypes.func,\r\n  }).isRequired,\r\n  url: PropTypes.string.isRequired,\r\n  onLoadedMetadata: PropTypes.func,\r\n  onErrorHandler: PropTypes.func,\r\n};\r\n\r\nVideoLoadPreview.defaultProps = {\r\n  onLoadedMetadata: _.noop,\r\n  onErrorHandler: _.noop,\r\n};\r\n","import React, { useState, useCallback } from 'react';\r\nimport classnames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport _, { isEmpty } from 'underscore';\r\nimport { MessageBar } from '@fluentui/react-message-bar';\r\nimport { isValidUrl } from '@bingads-webui/url-util';\r\nimport { SearchFilled } from '@fluentui/react-icons';\r\nimport { makeStyles, Input, shorthands } from '@fluentui/react-components';\r\nimport { VideoLoadPreview } from './video-load-preview';\r\n\r\nconst UrlInputMaxLen = 2048;\r\nconst EnterKeycode = 13;\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  container: {\r\n    marginTop: '16px',\r\n    lineHeight: '20px',\r\n  },\r\n  addUrlInput: {\r\n    marginTop: '16px',\r\n    width: '300px',\r\n  },\r\n  placeHolderImage: {\r\n    position: 'absolute',\r\n    right: '380px',\r\n    top: '300px',\r\n  },\r\n  errorMesBelowUrlInput: {\r\n    marginTop: '6px',\r\n    color: '#A80000',\r\n  },\r\n  videoPlaybackView: {\r\n    marginTop: '16px',\r\n  },\r\n  messageContainer: {\r\n    bottom: '65px',\r\n    position: 'absolute',\r\n    left: '0px',\r\n  },\r\n});\r\n\r\nconst placeholderImage =\r\n  \"data:image/svg+xml,%3Csvg width='283' height='208' viewBox='0 0 283 208' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg filter='url(%23filter0_d_725_95734)'%3E%3Cpath d='M70.5224 137.244H227.751C229.828 137.244 231.443 135.647 231.443 133.592V40.9266C231.443 38.8725 229.828 37.2748 227.751 37.2748H70.5224C68.446 37.2748 66.8311 38.8725 66.8311 40.9266V133.592C66.8311 135.647 68.5614 137.244 70.5224 137.244Z' fill='%2328C2D1'/%3E%3C/g%3E%3Cpath d='M87.7524 127.473H210.52C212.141 127.473 213.402 126.464 213.402 125.166V66.6407C213.402 65.3433 212.141 64.3342 210.52 64.3342H87.7524C86.1311 64.3342 84.8701 65.3433 84.8701 66.6407V125.166C84.8701 126.464 86.2212 127.473 87.7524 127.473Z' fill='%23EFEFEF'/%3E%3Cpath d='M231.667 40.3377L67.0303 40.2814L67.0038 55.6503L231.641 55.7066L231.667 40.3377Z' fill='%232B88D8'/%3E%3Cpath d='M219.951 46.3243L95.4434 46.2837L95.4373 49.6655L219.945 49.7061L219.951 46.3243Z' fill='%23EFEFEF'/%3E%3Cpath d='M79.4756 43.7731C79.4748 43.7731 79.4741 43.7732 79.4726 43.7733C79.4718 43.7734 79.4718 43.7734 79.471 43.7735C79.4695 43.7736 79.4688 43.7737 79.4673 43.7739C76.9794 43.7764 74.9626 45.7928 74.9606 48.2811C74.9586 50.7701 76.973 52.7894 79.4601 52.7954C79.4616 52.7952 79.4625 52.7959 79.464 52.7958C79.4647 52.7957 79.4647 52.7957 79.4655 52.7956C79.4663 52.7956 79.467 52.7955 79.4685 52.7953C81.9598 52.7971 83.9811 50.7795 83.9829 48.2881C83.9853 45.796 81.9669 43.7748 79.4756 43.7731ZM79.4662 52.1444C79.4655 52.1445 79.4639 52.1447 79.4632 52.1447C78.9887 52.1421 78.3591 51.3349 78.0565 49.9787L80.8781 49.9811C80.5724 51.337 79.9411 52.144 79.4662 52.1444ZM77.9424 49.328C77.9006 49.0019 77.8779 48.6525 77.8778 48.2825C77.8778 47.9064 77.903 47.5524 77.9457 47.2218L80.9909 47.2238C81.0339 47.5536 81.0578 47.9083 81.057 48.2845C81.0565 48.6553 81.0331 49.0038 80.9914 49.3296L77.9424 49.328ZM75.6117 48.281C75.6118 47.9133 75.6652 47.558 75.7617 47.2207L77.2916 47.2222C77.2505 47.5625 77.2285 47.917 77.2282 48.2824C77.2281 48.6425 77.2492 48.992 77.2882 49.3283L75.7553 49.3272C75.6622 48.9939 75.6111 48.6434 75.6117 48.281ZM79.4687 44.4233C79.4694 44.4233 79.4709 44.4231 79.4717 44.423C79.9445 44.4243 80.5721 45.2263 80.8761 46.574L78.0615 46.5717C78.3681 45.2256 78.9963 44.4258 79.4687 44.4233ZM81.646 47.2249L83.1843 47.2263C83.2809 47.5639 83.3333 47.9196 83.3332 48.2873C83.3326 48.6497 83.281 49.0002 83.1871 49.3326L81.6465 49.3315C81.6865 48.9959 81.7082 48.646 81.7083 48.2859C81.7086 47.9205 81.6869 47.5649 81.646 47.2249ZM82.9331 46.576L81.5426 46.5747C81.3873 45.8085 81.1297 45.1473 80.8048 44.6605C81.7346 45.0032 82.4969 45.6948 82.9331 46.576ZM78.1346 44.6624C77.8098 45.1484 77.5533 45.8078 77.3965 46.5715L76.0137 46.5703C76.4498 45.6942 77.2091 45.0057 78.1346 44.6624ZM76.0034 49.9771L77.3908 49.9779C77.5457 50.7487 77.8029 51.413 78.1289 51.9028C77.1988 51.557 76.4368 50.8616 76.0034 49.9771ZM80.7984 51.9101C81.1267 51.4207 81.3856 50.7542 81.5422 49.9813L82.938 49.9821C82.5016 50.8696 81.7347 51.5666 80.7984 51.9101Z' fill='%23EFEFEF'/%3E%3Cpath d='M141.25 87.5C139.455 87.5 138 88.9551 138 90.75V101.25C138 103.045 139.455 104.5 141.25 104.5H150.75C152.545 104.5 154 103.045 154 101.25V90.75C154 88.9551 152.545 87.5 150.75 87.5H141.25ZM159.123 102.643L155.5 99.0935V92.9989L159.112 89.3706C159.899 88.5804 161.248 89.1375 161.248 90.2525V101.75C161.248 102.858 159.914 103.418 159.123 102.643Z' fill='%232B88D8'/%3E%3Cpath d='M213.402 122.963H84.8701V127.473H213.402V122.963Z' fill='%232B88D8'/%3E%3Cg filter='url(%23filter1_d_725_95734)'%3E%3Cpath d='M42.7781 51.5561C49.8352 51.5561 55.5561 45.8352 55.5561 38.7781C55.5561 31.7209 49.8352 26 42.7781 26C35.7209 26 30 31.7209 30 38.7781C30 45.8352 35.7209 51.5561 42.7781 51.5561Z' fill='%23E1DFDD'/%3E%3C/g%3E%3Cg filter='url(%23filter2_d_725_95734)'%3E%3Cpath d='M241.89 174C247.702 174 252.413 169.289 252.413 163.477C252.413 157.665 247.702 152.954 241.89 152.954C236.079 152.954 231.367 157.665 231.367 163.477C231.367 169.289 236.079 174 241.89 174Z' fill='%23E1DFDD'/%3E%3C/g%3E%3Cg filter='url(%23filter3_d_725_95734)'%3E%3Cpath d='M229.188 166.559C234.169 166.559 238.208 162.52 238.208 157.539C238.208 152.557 234.169 148.519 229.188 148.519C224.206 148.519 220.168 152.557 220.168 157.539C220.168 162.52 224.206 166.559 229.188 166.559Z' fill='%23E1DFDD'/%3E%3C/g%3E%3Cdefs%3E%3Cfilter id='filter0_d_725_95734' x='36.8311' y='11.2748' width='224.611' height='159.97' filterUnits='userSpaceOnUse' color-interpolation-filters='sRGB'%3E%3CfeFlood flood-opacity='0' result='BackgroundImageFix'/%3E%3CfeColorMatrix in='SourceAlpha' type='matrix' values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0' result='hardAlpha'/%3E%3CfeOffset dy='4'/%3E%3CfeGaussianBlur stdDeviation='15'/%3E%3CfeComposite in2='hardAlpha' operator='out'/%3E%3CfeColorMatrix type='matrix' values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0'/%3E%3CfeBlend mode='normal' in2='BackgroundImageFix' result='effect1_dropShadow_725_95734'/%3E%3CfeBlend mode='normal' in='SourceGraphic' in2='effect1_dropShadow_725_95734' result='shape'/%3E%3C/filter%3E%3Cfilter id='filter1_d_725_95734' x='0' y='0' width='85.5557' height='85.5562' filterUnits='userSpaceOnUse' color-interpolation-filters='sRGB'%3E%3CfeFlood flood-opacity='0' result='BackgroundImageFix'/%3E%3CfeColorMatrix in='SourceAlpha' type='matrix' values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0' result='hardAlpha'/%3E%3CfeOffset dy='4'/%3E%3CfeGaussianBlur stdDeviation='15'/%3E%3CfeComposite in2='hardAlpha' operator='out'/%3E%3CfeColorMatrix type='matrix' values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0'/%3E%3CfeBlend mode='normal' in2='BackgroundImageFix' result='effect1_dropShadow_725_95734'/%3E%3CfeBlend mode='normal' in='SourceGraphic' in2='effect1_dropShadow_725_95734' result='shape'/%3E%3C/filter%3E%3Cfilter id='filter2_d_725_95734' x='201.367' y='126.954' width='81.0459' height='81.0463' filterUnits='userSpaceOnUse' color-interpolation-filters='sRGB'%3E%3CfeFlood flood-opacity='0' result='BackgroundImageFix'/%3E%3CfeColorMatrix in='SourceAlpha' type='matrix' values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0' result='hardAlpha'/%3E%3CfeOffset dy='4'/%3E%3CfeGaussianBlur stdDeviation='15'/%3E%3CfeComposite in2='hardAlpha' operator='out'/%3E%3CfeColorMatrix type='matrix' values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0'/%3E%3CfeBlend mode='normal' in2='BackgroundImageFix' result='effect1_dropShadow_725_95734'/%3E%3CfeBlend mode='normal' in='SourceGraphic' in2='effect1_dropShadow_725_95734' result='shape'/%3E%3C/filter%3E%3Cfilter id='filter3_d_725_95734' x='190.168' y='122.519' width='78.04' height='78.0397' filterUnits='userSpaceOnUse' color-interpolation-filters='sRGB'%3E%3CfeFlood flood-opacity='0' result='BackgroundImageFix'/%3E%3CfeColorMatrix in='SourceAlpha' type='matrix' values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0' result='hardAlpha'/%3E%3CfeOffset dy='4'/%3E%3CfeGaussianBlur stdDeviation='15'/%3E%3CfeComposite in2='hardAlpha' operator='out'/%3E%3CfeColorMatrix type='matrix' values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0'/%3E%3CfeBlend mode='normal' in2='BackgroundImageFix' result='effect1_dropShadow_725_95734'/%3E%3CfeBlend mode='normal' in='SourceGraphic' in2='effect1_dropShadow_725_95734' result='shape'/%3E%3C/filter%3E%3C/defs%3E%3C/svg%3E\";\r\n\r\n\r\nexport const AddVideoPanelContent = (props) => {\r\n  const { i18n, onChange } = props;\r\n  const classes = useStyles();\r\n  const [videoLoaded, setVideoLoaded] = useState(false);\r\n  const [processedUrl, setProcessedUrl] = useState('');\r\n  const [messageBarText, setMessageBarText] = useState('');\r\n  const [cachedUrl, setCachedUrl] = useState('');\r\n  const [urlInputErrors, setUrlInputErrors] = useState([]);\r\n  const [videoLoadStarted, setVideoLoadStarted] = useState(false);\r\n\r\n  const handleInput = useCallback(() => {\r\n    if (cachedUrl !== processedUrl) {\r\n      setProcessedUrl(cachedUrl);\r\n      setMessageBarText('');\r\n\r\n      if (isEmpty(urlInputErrors)) {\r\n        onChange([{ url: cachedUrl }]);\r\n        setVideoLoadStarted(true);\r\n      } else {\r\n        setVideoLoadStarted(false);\r\n      }\r\n    }\r\n  }, [cachedUrl, onChange, processedUrl, urlInputErrors]);\r\n\r\n  const onUrlInputChange = useCallback((event, data) => {\r\n    const { value } = data || {};\r\n    setCachedUrl(value);\r\n\r\n    const errors = [];\r\n\r\n    if (!isValidUrl(value)) {\r\n      errors.push(i18n.getString(_TL_('Please enter a valid URL.')));\r\n    }\r\n\r\n    if (_.size(value) > UrlInputMaxLen) {\r\n      errors.push(i18n.getString(\r\n        _TL_('The URL you entered is too long. Please enter a different URL. Max. URL length: {{max}} characters.'),\r\n        { max: UrlInputMaxLen }\r\n      ));\r\n    }\r\n\r\n    setUrlInputErrors(errors);\r\n  }, [i18n]);\r\n\r\n  const onKeyDown = useCallback((ev) => {\r\n    if (ev.keyCode === EnterKeycode) {\r\n      handleInput();\r\n    }\r\n  }, [handleInput]);\r\n\r\n  const onBlur = useCallback(() => {\r\n    handleInput();\r\n  }, [handleInput]);\r\n\r\n  const onErrorHandler = useCallback(() => {\r\n    setMessageBarText(i18n.getString(_TL_('A preview of your video cannot be displayed. Please confirm that your video\\'s URL is supported or upload your video file directly into Asset library.')));\r\n  }, [i18n]);\r\n\r\n  const onLoadedMetadata = useCallback(() => {\r\n    setVideoLoaded(true);\r\n  }, []);\r\n\r\n  return (\r\n    <div className={classnames(`url-video-view ${classes.container}`)}>\r\n      <div className=\"tip\">\r\n        { videoLoaded\r\n          ? <div> {i18n.getString(_TL_('We found this video from your URL'))} </div>\r\n          : (\r\n            <div>\r\n              {i18n.getString(_TL_(\"Please enter your video's URL.\"))}\r\n              <button className={classnames(`HelpTopic ${classes.helpLink}`)} query=\"help:app54863\">{i18n.getString(_TL_('Learn more about video source requirements.'))}</button>\r\n            </div>\r\n          )\r\n        }\r\n      </div>\r\n      <Input\r\n        className={classnames('add-url', classes.addUrlInput)}\r\n        // styles={styles.placeholderTextFieldStyles}\r\n        value={cachedUrl}\r\n        onChange={onUrlInputChange}\r\n        onKeyDown={onKeyDown}\r\n        onBlur={onBlur}\r\n        placeholder={i18n.getString(_TL_('Enter video URL'))}\r\n        contentBefore={<SearchFilled />}\r\n      />\r\n      <div aria-live=\"polite\">\r\n        {!_.isEmpty(urlInputErrors) &&\r\n          <div className={classnames('error-msg', classes.errorMesBelowUrlInput)}>\r\n            {urlInputErrors.map(err => <div key={err}>{err}</div>)}\r\n          </div>\r\n        }\r\n      </div>\r\n\r\n      { videoLoadStarted\r\n        ? <VideoLoadPreview\r\n            i18n={i18n}\r\n            url={processedUrl}\r\n            onLoadedMetadata={onLoadedMetadata}\r\n            onErrorHandler={onErrorHandler}\r\n        />\r\n        : <img className={classes.placeHolderImage} src={placeholderImage} alt=\"\" />\r\n      }\r\n\r\n      { messageBarText &&\r\n        <MessageBar intent=\"warning\" className={classes.messageContainer}>\r\n          {messageBarText}\r\n        </MessageBar>\r\n      }\r\n    </div>\r\n  );\r\n};\r\n\r\nAddVideoPanelContent.propTypes = {\r\n  onChange: PropTypes.func.isRequired,\r\n  i18n: PropTypes.shape({\r\n    getString: PropTypes.func,\r\n  }).isRequired,\r\n};\r\n","import React, { useCallback, useMemo, useState, useRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { extend, map } from 'underscore';\r\nimport { makeStyles, Input, shorthands } from '@fluentui/react-components';\r\nimport { StockImageDataService } from '@bingads-webui-campaign/stock-image-data-service';\r\nimport { MessageBar } from '@fluentui/react-message-bar';\r\nimport { SearchFilled } from '@fluentui/react-icons';\r\nimport { PanelImageGrid } from '../panel-image-grid';\r\nimport { AdsStudioSpinner } from '../ads-studio-spinner';\r\n\r\n\r\nconst PAGE_SIZE = 20;\r\n\r\nconst useStyles = makeStyles({\r\n  contentWrapper: {\r\n    paddingTop: '8px',\r\n  },\r\n  searchArea: {\r\n    marginBottom: '16px',\r\n    display: 'flex',\r\n    flexWrap: 'wrap',\r\n  },\r\n  input: {\r\n    width: '260px',\r\n    marginRight: '8px',\r\n    marginBottom: '8px',\r\n  },\r\n  messageBar: {\r\n    marginBottom: '8px',\r\n    backgroundColor: '#EFF6FC',\r\n  },\r\n  dropdown: {\r\n    marginBottom: '8px',\r\n    marginRight: '8px',\r\n    minWidth: 'auto',\r\n  },\r\n  listbox: {\r\n    minWidth: 'auto',\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});\r\n\r\nexport const StockImagePanelContent = (props) => {\r\n  const {\r\n    i18n, aid, cid, oDataConfig, setSelectedImages, overlayBodyRef,\r\n  } = props;\r\n  const classes = useStyles();\r\n  const [isLoadingMore, setIsLoadingMore] = useState(false);\r\n  const [isLoadingFirstPage, setIsLoadingFirstPage] = useState(false);\r\n  const [images, setImages] = useState([]);\r\n  const [totalCount, setTotalCount] = useState(0);\r\n  const selectedImages = useRef([]);\r\n  const searchQuery = useRef('');\r\n  const skip = useRef(0);\r\n  const hasMore = useRef(true);\r\n  const filterQueryJSON = useRef('{}');\r\n\r\n  const onInputChange = useCallback((ev, data) => {\r\n    const { value = '' } = data || {};\r\n    searchQuery.current = value;\r\n  }, []);\r\n  const stockImageService = useMemo(() => new StockImageDataService({\r\n    cid, aid, oDataConfig, controller: 'StockImages',\r\n  }), [oDataConfig, aid, cid]);\r\n\r\n  const getStockImages = useCallback(options => stockImageService.getStockImages(options), [stockImageService]);\r\n\r\n  /* istanbul ignore next */\r\n  const loadImages = useCallback(({ $search = searchQuery.current, $skip = skip.current, $query = JSON.parse(filterQueryJSON.current) || {} }) => {\r\n    if ($search) {\r\n      if ($skip === 0) {\r\n        selectedImages.current = [];\r\n        setSelectedImages(selectedImages.current);\r\n        setIsLoadingFirstPage(true);\r\n      } else {\r\n        setIsLoadingMore(true);\r\n      }\r\n\r\n      getStockImages({\r\n        customQueries: extend({\r\n          appName: 'CampaignUI',\r\n          $search,\r\n          $skip,\r\n          $top: PAGE_SIZE,\r\n          language: 'en',\r\n          includevertical: true,\r\n        }, $query),\r\n      }).then((data) => {\r\n        hasMore.current = data['@odata.count'] > data.value.length + $skip;\r\n        setTotalCount(data['@odata.count'] || 0);\r\n\r\n        setImages(prevImages => [\r\n          ...($skip > 0 ? prevImages : []),\r\n          ...map(data.value, (item) => {\r\n            const image = {\r\n              url: item.Preview.Url,\r\n              id: item.Id,\r\n            };\r\n\r\n            return image;\r\n          }),\r\n        ]);\r\n\r\n        if ($skip === 0) {\r\n          setIsLoadingFirstPage(false);\r\n        } else {\r\n          setIsLoadingMore(false);\r\n        }\r\n      });\r\n    }\r\n  }, [getStockImages, setSelectedImages]);\r\n\r\n  /* istanbul ignore next */\r\n  const loadNextPage = useCallback(() => {\r\n    if (hasMore.current) {\r\n      const newSkip = skip.current + PAGE_SIZE;\r\n      skip.current = newSkip;\r\n      loadImages({ $skip: newSkip });\r\n    }\r\n  }, [loadImages]);\r\n\r\n  const dataService = useMemo(() => ({\r\n    assets: images,\r\n    totalAssetCount: totalCount,\r\n    loadMoreData: loadNextPage,\r\n  }), [images, loadNextPage, totalCount]);\r\n\r\n  const onKeyDown = useCallback((ev) => {\r\n    if (ev.key === 'Enter') {\r\n      skip.current = 0;\r\n      loadImages({\r\n        $skip: 0,\r\n      });\r\n    }\r\n  }, [loadImages]);\r\n\r\n  /* istanbul ignore next */\r\n  const onSelectImage = useCallback((imageId) => {\r\n    const originSelectedLength = selectedImages.current.length;\r\n    const newSelectedList = selectedImages.current.filter(({ id }) => id !== imageId);\r\n    if (newSelectedList.length === originSelectedLength) {\r\n      const selectedItem = images.find(({ id }) => id === imageId);\r\n      selectedImages.current.push(selectedItem);\r\n    } else {\r\n      selectedImages.current = newSelectedList;\r\n    }\r\n    setSelectedImages([...selectedImages.current]);\r\n  }, [images, setSelectedImages]);\r\n\r\n  return (\r\n    <div className={classNames('stock-content-container', classes.contentWrapper)}>\r\n      <div className={classes.searchArea}>\r\n        <Input\r\n          className={classNames('stock-search-input', classes.input)}\r\n          onChange={onInputChange}\r\n          placeholder={i18n.getString(_TL_('Search for assets'))}\r\n          contentBefore={<SearchFilled />}\r\n          onKeyDown={onKeyDown}\r\n        />\r\n      </div>\r\n      <MessageBar className={classNames('stock-watermark-bar', classes.messageBar)}>\r\n        {i18n.getString(_TL_('The Shutterstock watermark appearing on the stock images below will not appear in your ad.'))}\r\n      </MessageBar>\r\n      <MessageBar className={classNames('stock-ms-bar', classes.messageBar)}>\r\n        <span>\r\n          {i18n.getString(_TL_('There may be images provided by Shutterstock that do not adhere to the Microsoft Advertising image policies.'))}\r\n          <button className={classNames(`HelpTopic ${classes.helpLink}`)} query=\"help:app54718\">{i18n.getString(_TL_('Learn more'))}</button>\r\n        </span>\r\n      </MessageBar>\r\n      { isLoadingFirstPage && !images.length && <AdsStudioSpinner useCustomSize customStyle={{ marginTop: '50px' }} /> }\r\n      {!!images.length && (\r\n        <PanelImageGrid\r\n          i18n={i18n}\r\n          isLoadingMore={isLoadingMore}\r\n          onSelectImage={onSelectImage}\r\n          dataService={dataService}\r\n          overlayBodyRef={overlayBodyRef}\r\n        />\r\n      )}\r\n    </div>\r\n  );\r\n};\r\n\r\nStockImagePanelContent.prototype = {\r\n  aid: PropTypes.number.isRequired,\r\n  cid: PropTypes.number.isRequired,\r\n  oDataConfig: PropTypes.shape({}).isRequired,\r\n  i18n: PropTypes.shape({\r\n    getString: PropTypes.func,\r\n  }).isRequired,\r\n  setSelectedImages: PropTypes.func.isRequired,\r\n};\r\n\r\n","import React, { useCallback, useMemo, useState, useRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { extend, map } from 'underscore';\r\nimport { makeStyles, Input, shorthands } from '@fluentui/react-components';\r\nimport { InvestImageDataService } from '@bingads-webui-campaign/invest-image-data-service';\r\nimport { SearchFilled } from '@fluentui/react-icons';\r\nimport { PanelImageGrid } from '../panel-image-grid';\r\nimport { AdsStudioSpinner } from '../ads-studio-spinner';\r\n\r\n\r\nconst PAGE_SIZE = 20;\r\n\r\nconst useStyles = makeStyles({\r\n  contentWrapper: {\r\n    paddingTop: '8px',\r\n  },\r\n  searchArea: {\r\n    marginBottom: '16px',\r\n    display: 'flex',\r\n    flexWrap: 'wrap',\r\n  },\r\n  input: {\r\n    width: '260px',\r\n    marginRight: '8px',\r\n    marginBottom: '8px',\r\n  },\r\n  messageBar: {\r\n    marginBottom: '8px',\r\n    backgroundColor: '#EFF6FC',\r\n  },\r\n  dropdown: {\r\n    marginBottom: '8px',\r\n    marginRight: '8px',\r\n    minWidth: 'auto',\r\n  },\r\n  listbox: {\r\n    minWidth: 'auto',\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});\r\n\r\nconst ASSET_TYPE_IMAGES = 1;\r\n\r\nexport const InvestImagePanelContent = (props) => {\r\n  const {\r\n    i18n, aid, cid, setSelectedImages, overlayBodyRef,\r\n  } = props;\r\n  const classes = useStyles();\r\n  const [isLoadingMore, setIsLoadingMore] = useState(false);\r\n  const [isLoadingFirstPage, setIsLoadingFirstPage] = useState(false);\r\n  const [images, setImages] = useState([]);\r\n  const [totalCount, setTotalCount] = useState(0);\r\n  const selectedImages = useRef([]);\r\n  const searchQuery = useRef('');\r\n  const skip = useRef(0);\r\n  const hasMore = useRef(true);\r\n\r\n  const onInputChange = useCallback((ev, data) => {\r\n    const { value = '' } = data || {};\r\n    searchQuery.current = value;\r\n  }, []);\r\n  const investImageService = useMemo(() => new InvestImageDataService({ cid, aid }), [aid, cid]);\r\n\r\n  const getInvestImages = useCallback(options => investImageService.getInvestAssets(options), [investImageService]);\r\n\r\n  /* istanbul ignore next */\r\n  const loadImages = useCallback(({ creativeId = searchQuery.current, $skip = skip.current, $query = {} }) => {\r\n    if (creativeId) {\r\n      if ($skip === 0) {\r\n        selectedImages.current = [];\r\n        setSelectedImages(selectedImages.current);\r\n        setIsLoadingFirstPage(true);\r\n      } else {\r\n        setIsLoadingMore(true);\r\n      }\r\n\r\n      const queryParams = {\r\n        appName: 'CampaignUI',\r\n        assetTypeId: ASSET_TYPE_IMAGES,\r\n        $skip,\r\n        $top: PAGE_SIZE,\r\n      };\r\n      if (creativeId) {\r\n        queryParams.creativeId = creativeId;\r\n      }\r\n      getInvestImages({\r\n        customQueries: extend(queryParams, $query),\r\n      }).then((data) => {\r\n        hasMore.current = data['@odata.count'] > data.value.length + $skip;\r\n        setTotalCount(data['@odata.count'] || 0);\r\n\r\n        setImages(prevImages => [\r\n          ...($skip > 0 ? prevImages : []),\r\n          ...map(data.value, (item) => {\r\n            const image = {\r\n              url: item.Url,\r\n              id: item.XandrAssetId,\r\n            };\r\n\r\n            return image;\r\n          }),\r\n        ]);\r\n\r\n        if ($skip === 0) {\r\n          setIsLoadingFirstPage(false);\r\n        } else {\r\n          setIsLoadingMore(false);\r\n        }\r\n      });\r\n    }\r\n  }, [getInvestImages, setSelectedImages]);\r\n\r\n  /* istanbul ignore next */\r\n  const loadNextPage = useCallback(() => {\r\n    if (hasMore.current) {\r\n      const newSkip = skip.current + PAGE_SIZE;\r\n      skip.current = newSkip;\r\n      loadImages({ $skip: newSkip });\r\n    }\r\n  }, [loadImages]);\r\n\r\n  const dataService = useMemo(() => ({\r\n    assets: images,\r\n    totalAssetCount: totalCount,\r\n    loadMoreData: loadNextPage,\r\n  }), [images, loadNextPage, totalCount]);\r\n\r\n  const onKeyDown = useCallback((ev) => {\r\n    if (ev.key === 'Enter') {\r\n      skip.current = 0;\r\n      loadImages({\r\n        $skip: 0,\r\n      });\r\n    }\r\n  }, [loadImages]);\r\n\r\n  /* istanbul ignore next */\r\n  const onSelectImage = useCallback((imageId) => {\r\n    const originSelectedLength = selectedImages.current.length;\r\n    const newSelectedList = selectedImages.current.filter(({ id }) => id !== imageId);\r\n    if (newSelectedList.length === originSelectedLength) {\r\n      const selectedItem = images.find(({ id }) => id === imageId);\r\n      selectedImages.current.push(selectedItem);\r\n    } else {\r\n      selectedImages.current = newSelectedList;\r\n    }\r\n    setSelectedImages([...selectedImages.current]);\r\n  }, [images, setSelectedImages]);\r\n\r\n  return (\r\n    <div className={classNames('invest-content-container', classes.contentWrapper)}>\r\n      <div className={classes.searchArea}>\r\n        <Input\r\n          className={classNames('invest-search-input', classes.input)}\r\n          onChange={onInputChange}\r\n          placeholder={i18n.getString(_TL_('Search by Invest creative Id'))}\r\n          contentBefore={<SearchFilled />}\r\n          onKeyDown={onKeyDown}\r\n        />\r\n      </div>\r\n      { isLoadingFirstPage && !images.length && <AdsStudioSpinner useCustomSize customStyle={{ marginTop: '50px' }} /> }\r\n      {!!images.length && (\r\n        <PanelImageGrid\r\n          i18n={i18n}\r\n          isLoadingMore={isLoadingMore}\r\n          onSelectImage={onSelectImage}\r\n          dataService={dataService}\r\n          overlayBodyRef={overlayBodyRef}\r\n        />\r\n      )}\r\n    </div>\r\n  );\r\n};\r\n\r\nInvestImagePanelContent.prototype = {\r\n  aid: PropTypes.number.isRequired,\r\n  cid: PropTypes.number.isRequired,\r\n  oDataConfig: PropTypes.shape({}).isRequired,\r\n  i18n: PropTypes.shape({\r\n    getString: PropTypes.func,\r\n  }).isRequired,\r\n  setSelectedImages: PropTypes.func.isRequired,\r\n};\r\n\r\n","/* eslint-disable jsx-a11y/media-has-caption */\r\nimport React, { useCallback, useMemo, useState, useRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { extend, map } from 'underscore';\r\nimport { makeStyles, Input, shorthands } from '@fluentui/react-components';\r\nimport { SearchFilled } from '@fluentui/react-icons';\r\nimport { InvestImageDataService } from '@bingads-webui-campaign/invest-image-data-service';\r\nimport { GridSectionName } from '../../model/constants';\r\nimport { SectionTilesGrid, TilesGridLoadingCell } from '../ads-studio-tile-grid';\r\nimport { AdsStudioSpinner } from '../ads-studio-spinner';\r\n\r\nconst PAGE_SIZE = 20;\r\n\r\nconst useStyles = makeStyles({\r\n  contentWrapper: {\r\n    paddingTop: '8px',\r\n  },\r\n  searchArea: {\r\n    marginBottom: '16px',\r\n    display: 'flex',\r\n    flexWrap: 'wrap',\r\n  },\r\n  input: {\r\n    width: '260px',\r\n    marginRight: '8px',\r\n    marginBottom: '8px',\r\n  },\r\n  listbox: {\r\n    minWidth: 'auto',\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  videoNameWrapper: {\r\n    display: 'flex',\r\n    justifyContent: 'center',\r\n    width: '100%',\r\n    marginTop: 5,\r\n    marginBottom: 5,\r\n  },\r\n  videoName: {\r\n    position: 'relative',\r\n    left: 0,\r\n    bottom: 0,\r\n    width: 'auto',\r\n    whiteSpace: 'nowrap',\r\n    textOverflow: 'ellipsis',\r\n  },\r\n});\r\n\r\nconst emptyButtonStyle = {\r\n  padding: '2px',\r\n  margin: '0px',\r\n  background: 'none',\r\n  color: 'unset',\r\n  cursor: 'pointer',\r\n  borderImage: 'unset',\r\n  borderColor: 'unset',\r\n  borderStyle: 'none',\r\n};\r\n\r\nconst ASSET_TYPE_VIDEOS = 2;\r\n\r\nexport const InvestVideoPanelContent = (props) => {\r\n  const {\r\n    i18n, aid, cid, setSelectedVideos,\r\n  } = props;\r\n  const classes = useStyles();\r\n  const [isLoadingMore, setIsLoadingMore] = useState(false);\r\n  const [isLoadingFirstPage, setIsLoadingFirstPage] = useState(false);\r\n  const [videos, setVideos] = useState([]);\r\n  const [totalCount, setTotalCount] = useState(0);\r\n  const selectedVideos = useRef([]);\r\n  const searchQuery = useRef('');\r\n  const skip = useRef(0);\r\n  const hasMore = useRef(true);\r\n\r\n  const onInputChange = useCallback((ev, data) => {\r\n    const { value = '' } = data || {};\r\n    searchQuery.current = value;\r\n  }, []);\r\n  const investImageService = useMemo(() => new InvestImageDataService({ cid, aid }), [aid, cid]);\r\n\r\n  const getInvestVideos = useCallback(options => investImageService.getInvestAssets(options), [investImageService]);\r\n\r\n  /* istanbul ignore next */\r\n  const loadVideos = useCallback(({ creativeId = searchQuery.current, $skip = skip.current, $query = {} }) => {\r\n    if (creativeId) {\r\n      if ($skip === 0) {\r\n        selectedVideos.current = [];\r\n        setSelectedVideos(selectedVideos.current);\r\n        setIsLoadingFirstPage(true);\r\n      } else {\r\n        setIsLoadingMore(true);\r\n      }\r\n\r\n      const queryParams = {\r\n        appName: 'CampaignUI',\r\n        assetTypeId: ASSET_TYPE_VIDEOS,\r\n        $skip,\r\n        $top: PAGE_SIZE,\r\n      };\r\n      if (creativeId) {\r\n        queryParams.creativeId = creativeId;\r\n      }\r\n      getInvestVideos({\r\n        customQueries: extend(queryParams, $query),\r\n      }).then((data) => {\r\n        hasMore.current = data['@odata.count'] > data.value.length + $skip;\r\n        setTotalCount(data['@odata.count'] || 0);\r\n        setVideos(prevVideos => [\r\n          ...($skip > 0 ? prevVideos : []),\r\n          ...map(data.value, (item) => {\r\n            const video = {\r\n              url: item.Url,\r\n              id: item.XandrAssetId,\r\n              name: item.Description,\r\n              description: item.Description,\r\n            };\r\n            return video;\r\n          }),\r\n        ]);\r\n\r\n        if ($skip === 0) {\r\n          setIsLoadingFirstPage(false);\r\n        } else {\r\n          setIsLoadingMore(false);\r\n        }\r\n      });\r\n    }\r\n  }, [getInvestVideos, setSelectedVideos]);\r\n\r\n  /* istanbul ignore next */\r\n  const loadNextPage = useCallback(() => {\r\n    if (hasMore.current) {\r\n      const newSkip = skip.current + PAGE_SIZE;\r\n      skip.current = newSkip;\r\n      loadVideos({ $skip: newSkip });\r\n    }\r\n  }, [loadVideos]);\r\n\r\n  const onKeyDown = useCallback((ev) => {\r\n    if (ev.key === 'Enter') {\r\n      skip.current = 0;\r\n      loadVideos({\r\n        $skip: 0,\r\n      });\r\n    }\r\n  }, [loadVideos]);\r\n\r\n  /* istanbul ignore next */\r\n  const onSelectVideo = useCallback((videoId) => {\r\n    const originSelectedLength = selectedVideos.current.length;\r\n    const newSelectedList = selectedVideos.current.filter(({ id }) => id !== videoId);\r\n    if (newSelectedList.length === originSelectedLength) {\r\n      const selectedItem = videos.find(({ id }) => id === videoId);\r\n      selectedVideos.current.push(selectedItem);\r\n    } else {\r\n      selectedVideos.current = newSelectedList;\r\n    }\r\n    setSelectedVideos([...selectedVideos.current]);\r\n  }, [videos, setSelectedVideos]);\r\n\r\n  const videosGridSection = useMemo(() => ({\r\n    sectionName: GridSectionName.Asset,\r\n    sectionClassName: 'ads-studio-invest-video-section',\r\n    itemKey: 'id',\r\n    items: videos,\r\n    totalItemCount: totalCount,\r\n    config: {\r\n      scrollContainer: '[role=\"main\"]',\r\n      minItemHeight: 42,\r\n    },\r\n  }), [videos, totalCount]);\r\n\r\n  const sectionGridData = useMemo(\r\n    () => ([videosGridSection]),\r\n    [videosGridSection]\r\n  );\r\n\r\n  const onRenderLoadingCell = useCallback(({ items, totalItemCount }) => {\r\n    if ((items.length < totalItemCount) && (items.length > 0)) {\r\n      return (\r\n        <TilesGridLoadingCell onLoading={loadNextPage} key={items.length} >\r\n          {isLoadingMore && (\r\n          <div className=\"section-loading\">\r\n            <AdsStudioSpinner useCustomSize />\r\n          </div>\r\n            )}\r\n        </TilesGridLoadingCell>\r\n      );\r\n    }\r\n    return null;\r\n  }, [isLoadingMore, loadNextPage]);\r\n\r\n  const onRenderCell = useCallback(({ item }) => {\r\n    const { id, name } = item;\r\n\r\n    return (\r\n      <div>\r\n        <button\r\n          onClick={() => onSelectVideo(id)}\r\n          id={item.id}\r\n          style={emptyButtonStyle}\r\n        >\r\n          <video autoPlay={false} loop style={{ width: '100%', height: '100%' }}>\r\n            <source src={item.url} />\r\n          </video>\r\n        </button>\r\n        <div className={classes.videoNameWrapper}>\r\n          <span className={classes.videoName} title={name}>\r\n            {name}\r\n          </span>\r\n        </div>\r\n      </div>\r\n    );\r\n  }, [classes.videoName, classes.videoNameWrapper, onSelectVideo]);\r\n\r\n  return (\r\n    <div className={classNames('invest-video-content-container', classes.contentWrapper)}>\r\n      <div className={classes.searchArea}>\r\n        <Input\r\n          className={classNames('invest-video-search-input', classes.input)}\r\n          onChange={onInputChange}\r\n          placeholder={i18n.getString(_TL_('Search by Invest Creative ID'))}\r\n          contentBefore={<SearchFilled />}\r\n          onKeyDown={onKeyDown}\r\n        />\r\n      </div>\r\n      { isLoadingFirstPage && !videos.length && <AdsStudioSpinner useCustomSize customStyle={{ marginTop: '50px' }} /> }\r\n      {!!videos.length && (\r\n        <SectionTilesGrid\r\n          sectionData={sectionGridData}\r\n          onRenderCell={onRenderCell}\r\n          onRenderLoadingCell={onRenderLoadingCell}\r\n          loadNextPage={loadNextPage}\r\n        />\r\n      )}\r\n    </div>\r\n  );\r\n};\r\n\r\nInvestVideoPanelContent.prototype = {\r\n  aid: PropTypes.number.isRequired,\r\n  cid: PropTypes.number.isRequired,\r\n  oDataConfig: PropTypes.shape({}).isRequired,\r\n  i18n: PropTypes.shape({\r\n    getString: PropTypes.func,\r\n  }).isRequired,\r\n  setSelectedVideos: PropTypes.func.isRequired,\r\n  logger: PropTypes.shape({\r\n    logTrace: PropTypes.func,\r\n  }).isRequired,\r\n};\r\n","import React, { useCallback, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { SearchFilled } from '@fluentui/react-icons';\r\nimport {\r\n  Input,\r\n  makeStyles,\r\n  Select,\r\n  shorthands,\r\n  useId,\r\n  mergeClasses,\r\n} from '@fluentui/react-components';\r\n\r\nconst urlPrefixOptions = [\r\n  { key: 'https://', text: 'https://' },\r\n  { key: 'http://', text: 'http://' },\r\n];\r\n\r\nconst useStyles = makeStyles({\r\n  domainInputWrapper: {\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    columnGap: '8px',\r\n  },\r\n  prefixSelect: {\r\n    width: '101px',\r\n    minWidth: 'auto',\r\n  },\r\n  domainInput: {\r\n    ...shorthands.flex(1),\r\n  },\r\n  suggestionErrorInvalid: {\r\n    marginTop: '16px',\r\n    color: 'red',\r\n  },\r\n});\r\n\r\nexport const DomainInputView = (props) => {\r\n  const {\r\n    i18n,\r\n    errorMessage,\r\n    onDomainChange,\r\n    isDomainInvalid,\r\n    errorMessageClassName,\r\n    domainInputWrapperClassName,\r\n  } = props;\r\n  const [urlPrefix, setUrlPrefix] = useState('https://');\r\n  const classes = useStyles();\r\n  const selectId = useId();\r\n\r\n  const onSelectChange = useCallback((evt, data) => {\r\n    const { value } = data;\r\n    setUrlPrefix(value);\r\n  }, []);\r\n\r\n  const onBlurUrl = useCallback(\r\n    (ev) => {\r\n      const newUrl = ev && ev.target && ev.target.value;\r\n      const prefix = urlPrefixOptions.find(({ key }) => key === urlPrefix).text;\r\n      const newDomain = `${prefix}${newUrl}`;\r\n      onDomainChange(newDomain);\r\n    },\r\n    [onDomainChange, urlPrefix]\r\n  );\r\n\r\n  const onKeyDown = useCallback(\r\n    (ev) => {\r\n      if (ev.key === 'Enter') {\r\n        onBlurUrl(ev);\r\n      }\r\n    },\r\n    [onBlurUrl]\r\n  );\r\n  return (\r\n    <>\r\n      <div\r\n        className={mergeClasses(\r\n          classes.domainInputWrapper,\r\n          domainInputWrapperClassName\r\n        )}\r\n      >\r\n        <Select\r\n          id={selectId}\r\n          aria-label={i18n.getString(_TL_('domain'))}\r\n          className={mergeClasses('prefix-select', classes.prefixSelect)}\r\n          onChange={onSelectChange}\r\n        >\r\n          {urlPrefixOptions.map(option => (\r\n            <option key={option.key}>{option.text}</option>\r\n          ))}\r\n        </Select>\r\n        <Input\r\n          className={mergeClasses('domain-input', classes.domainInput)}\r\n          placeholder={i18n.getString(_TL_('Enter your website URL'))}\r\n          contentBefore={<SearchFilled />}\r\n          onBlur={onBlurUrl}\r\n          onKeyDown={onKeyDown}\r\n        />\r\n      </div>\r\n      <div aria-live=\"polite\">\r\n        {isDomainInvalid && (\r\n          <div\r\n            className={mergeClasses(\r\n              'invalid-error',\r\n              classes.suggestionErrorInvalid,\r\n              errorMessageClassName\r\n            )}\r\n          >\r\n            {errorMessage ||\r\n              i18n.getString(_TL_('Please enter a valid Final URL to see images from your website.'))}\r\n          </div>\r\n        )}\r\n      </div>\r\n    </>\r\n  );\r\n};\r\n\r\nDomainInputView.propTypes = {\r\n  i18n: PropTypes.shape({}).isRequired,\r\n  isDomainInvalid: PropTypes.bool.isRequired,\r\n  onDomainChange: PropTypes.func.isRequired,\r\n  errorMessage: PropTypes.string,\r\n  errorMessageClassName: PropTypes.string,\r\n  domainInputWrapperClassName: PropTypes.string,\r\n};\r\n\r\nDomainInputView.defaultProps = {\r\n  errorMessage: '',\r\n  errorMessageClassName: '',\r\n  domainInputWrapperClassName: '',\r\n};\r\n","import React, { useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { Input, makeStyles } from '@fluentui/react-components';\r\nimport { SearchFilled } from '@fluentui/react-icons';\r\nimport { getUrlProtocolAndDomain, hasProtocol } from '@bingads-webui/url-util';\r\n\r\nconst useStyles = makeStyles({\r\n  subdomainWrapper: {\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n  },\r\n  input: {\r\n    width: '260px',\r\n  },\r\n  divider: {\r\n    marginLeft: '10px',\r\n    marginRight: '10px',\r\n    fontSize: '14px',\r\n  },\r\n});\r\n\r\nexport const SubdomainInputView = (props) => {\r\n  const {\r\n    i18n, isLoading, defaultDomainUrl, onDomainUrlChange, onSubdomainUrlChange,\r\n  } = props;\r\n  const classes = useStyles();\r\n\r\n  const onDomainBlur = useCallback((ev) => {\r\n    const temporaryFinalUrl = ev && ev.target && ev.target.value;\r\n    let newDomainUrl = getUrlProtocolAndDomain(temporaryFinalUrl);\r\n\r\n    if (!hasProtocol(newDomainUrl)) {\r\n      newDomainUrl = `https://${newDomainUrl}`;\r\n    }\r\n    onDomainUrlChange(newDomainUrl);\r\n  }, [onDomainUrlChange]);\r\n\r\n  const onDomainKeyDown = useCallback((ev) => {\r\n    if (ev.key === 'Enter') {\r\n      onDomainBlur(ev);\r\n    }\r\n  }, [onDomainBlur]);\r\n\r\n  const onSubdomainBlur = useCallback((ev) => {\r\n    const newSubdomainUrl = ev && ev.target && ev.target.value;\r\n    onSubdomainUrlChange(newSubdomainUrl);\r\n  }, [onSubdomainUrlChange]);\r\n\r\n  const onSubdomainKeyDown = useCallback((ev) => {\r\n    if (ev.key === 'Enter') {\r\n      onSubdomainBlur(ev);\r\n    }\r\n  }, [onSubdomainBlur]);\r\n\r\n  return (\r\n    <div className={classes.subdomainWrapper}>\r\n      <Input className={classNames('url-input', classes.input)} defaultValue={defaultDomainUrl} placeholder={i18n.getString(_TL_('Enter your website URL'))} contentBefore={<SearchFilled />} disabled={isLoading} onBlur={onDomainBlur} onKeyDown={onDomainKeyDown} />\r\n      <div className={classes.divider}>\r\n        /\r\n      </div>\r\n      <Input className={classNames('subdomain-input', classes.input)} placeholder={i18n.getString(_TL_('Enter your subdomain'))} disabled={isLoading} onBlur={onSubdomainBlur} onKeyDown={onSubdomainKeyDown} />\r\n    </div>\r\n  );\r\n};\r\n\r\nSubdomainInputView.propTypes = {\r\n  i18n: PropTypes.shape({}).isRequired,\r\n  isLoading: PropTypes.bool.isRequired,\r\n  defaultDomainUrl: PropTypes.string.isRequired,\r\n  onDomainUrlChange: PropTypes.func.isRequired,\r\n  onSubdomainUrlChange: PropTypes.func.isRequired,\r\n};\r\n\r\n","import React, { useState, useCallback, useMemo, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport classNames from 'classnames';\r\nimport { makeStyles } from '@fluentui/react-components';\r\nimport { getUrlProtocolAndDomain, isValidUrl } from '@bingads-webui/url-util';\r\nimport { DomainInputView } from './domain-input-view';\r\nimport { SubdomainInputView } from './subdomain-input-view';\r\nimport { useWebsiteImages } from './useWebsiteImages';\r\nimport { PanelImageGrid } from '../panel-image-grid';\r\nimport { AdsStudioSpinner } from '../ads-studio-spinner';\r\n\r\nconst subdomainUrlRegex = /^https?:\\/\\/([a-z0-9-_]+\\.)*[a-z0-9-_]+\\.[a-z]{2,63}(?=$|\\/)\\//i;\r\n\r\nconst useStyles = makeStyles({\r\n  contentWrapper: {\r\n    paddingTop: '8px',\r\n  },\r\n});\r\n\r\nconst getSubdomain = (url) => {\r\n  const regexResult = url.trim().split(subdomainUrlRegex);\r\n  if (regexResult && regexResult.length > 1) {\r\n    return regexResult[2];\r\n  }\r\n  return url;\r\n};\r\n\r\nexport const WebsiteImagePanelContent = (props) => {\r\n  const {\r\n    aid, cid, oDataConfig, i18n, setSelectedImages, overlayBodyRef,\r\n  } = props;\r\n  const [domainUrl, setDomailUrl] = useState('');\r\n  const [subdomain, setSubdomain] = useState('');\r\n  const [isDomainInvalid, setIsdomainInvalid] = useState(false);\r\n  const classes = useStyles();\r\n\r\n  const {\r\n    setPageNumber,\r\n    loadNextPage,\r\n    loadImages,\r\n    images,\r\n    totalCount,\r\n    isLoadingFistPage,\r\n    isLoading,\r\n    setImages,\r\n    onSelectImage,\r\n  } = useWebsiteImages({\r\n    aid, cid, oDataConfig, setSelectedImages,\r\n  });\r\n\r\n  const finalUrl = useMemo(() => `${domainUrl}/${subdomain}`, [domainUrl, subdomain]);\r\n  const showDomain = useMemo(() => !finalUrl || !isValidUrl(finalUrl), [finalUrl]);\r\n\r\n  const finalUrlDomain = useMemo(() => {\r\n    if (finalUrl) {\r\n      return getUrlProtocolAndDomain(finalUrl);\r\n    }\r\n    return '';\r\n  }, [finalUrl]);\r\n\r\n  const onDomainChange = useCallback((newDomainUrl) => {\r\n    setDomailUrl(newDomainUrl);\r\n    if (isValidUrl(newDomainUrl)) {\r\n      setIsdomainInvalid(false);\r\n      setPageNumber(1);\r\n      setImages([]);\r\n      loadImages({ url: `${newDomainUrl}/${subdomain}`, sDomain: subdomain });\r\n    } else {\r\n      setIsdomainInvalid(true);\r\n    }\r\n  }, [loadImages, setImages, setPageNumber, subdomain]);\r\n\r\n  const onSubdomainChange = useCallback((newSubdomainUrl) => {\r\n    if (!_.isNull(newSubdomainUrl) && !_.isUndefined(newSubdomainUrl)) {\r\n      const newValue = getSubdomain(newSubdomainUrl);\r\n      const newSearchUrl = `${finalUrlDomain}/${newValue}`;\r\n      if (newSearchUrl !== finalUrl) {\r\n        setSubdomain(newValue);\r\n        setPageNumber(1);\r\n        setImages([]);\r\n        loadImages({ url: newSearchUrl, sDomain: newValue });\r\n      }\r\n    }\r\n  }, [finalUrl, finalUrlDomain, loadImages, setImages, setPageNumber]);\r\n\r\n  const loadMoreData = useCallback(() => {\r\n    loadNextPage({ url: finalUrl, sDomain: subdomain });\r\n  }, [finalUrl, loadNextPage, subdomain]);\r\n\r\n  useEffect(() => {\r\n    if (showDomain) {\r\n      setDomailUrl('');\r\n      setSubdomain('');\r\n    }\r\n  }, [showDomain]);\r\n\r\n  return (\r\n    <div className={classNames('website-content-container', classes.contentWrapper)}>\r\n      {\r\n        showDomain ?\r\n          <DomainInputView isDomainInvalid={isDomainInvalid} i18n={i18n} onDomainChange={onDomainChange} /> :\r\n          <SubdomainInputView defaultDomainUrl={domainUrl} i18n={i18n} isLoading={isLoading} onDomainUrlChange={onDomainChange} onSubdomainUrlChange={onSubdomainChange} />\r\n      }\r\n      {\r\n        !showDomain && !isLoading && images.length === 0 &&\r\n        <div className=\"alert alert-info\" style={{ marginTop: '20px' }}>\r\n          <div className=\"alert-image\" />\r\n          <div className=\"alert-info-inline\">\r\n            {i18n.getString(_TL_('No suggestion found from your site.'))}\r\n          </div>\r\n        </div>\r\n      }\r\n      {\r\n        !showDomain && (\r\n          <>\r\n            { isLoadingFistPage && !images.length && <AdsStudioSpinner useCustomSize customStyle={{ marginTop: '50px' }} /> }\r\n            {!!images.length && (\r\n              <PanelImageGrid\r\n                i18n={i18n}\r\n                onSelectImage={onSelectImage}\r\n                overlayBodyRef={overlayBodyRef}\r\n                isLoadingMore={isLoading}\r\n                dataService={{\r\n                  assets: images,\r\n                  totalAssetCount: totalCount,\r\n                  loadMoreData,\r\n                }}\r\n              />\r\n            )}\r\n          </>\r\n        )\r\n      }\r\n    </div>\r\n  );\r\n};\r\n\r\nWebsiteImagePanelContent.prototype = {\r\n  aid: PropTypes.number.isRequired,\r\n  cid: PropTypes.number.isRequired,\r\n  oDataConfig: PropTypes.shape({}).isRequired,\r\n  i18n: PropTypes.shape({\r\n    getString: PropTypes.func,\r\n  }).isRequired,\r\n  setSelectedImages: PropTypes.func.isRequired,\r\n};\r\n","import { useMemo, useCallback, useState, useRef } from 'react';\r\nimport _ from 'underscore';\r\nimport { SuggestionPoller } from '@bingads-webui-campaign/media-repository';\r\nimport { MIN_SIZE } from '../../../src/model/constants';\r\n\r\nexport const useWebsiteImages = ({\r\n  cid, aid, oDataConfig, setSelectedImages,\r\n}) => {\r\n  const [images, setImages] = useState([]);\r\n  const [totalCount, setTotalCount] = useState(0);\r\n  const [isLoadingFistPage, setIsLoadingFirstPage] = useState(false);\r\n  const [isLoading, setIsLoading] = useState(false);\r\n  const pageNumber = useRef(0);\r\n  const selectedImages = useRef([]);\r\n\r\n  const suggestionPoller = useMemo(() => new SuggestionPoller({\r\n    cid,\r\n    aid,\r\n    oDataConfig,\r\n    logger: {\r\n      trace: _.noop,\r\n      startSignal: _.noop,\r\n      stopSignal: _.noop,\r\n    },\r\n    jobCompleteCallback: _.noop,\r\n  }), [cid, aid, oDataConfig]);\r\n\r\n  const setPageNumber = useCallback((newPageNumber) => {\r\n    pageNumber.current = newPageNumber;\r\n  }, []);\r\n\r\n  const getLandingPageSuggestions = useCallback(({\r\n    landingPageUrl,\r\n    isSubdomain,\r\n    pageNum,\r\n  }) => {\r\n    const minimumResolution = {\r\n      width: MIN_SIZE[0],\r\n      height: MIN_SIZE[1],\r\n    };\r\n    if (pageNum === 1) {\r\n      // eslint-disable-next-line no-restricted-globals\r\n      return new Promise((resolve) => {\r\n        suggestionPoller.setJobCompleteCallback(resolve);\r\n        suggestionPoller.getLandingPageSuggestions({\r\n          landingPageUrl,\r\n          forceInternalScrapingService: isSubdomain,\r\n          minimumResolution,\r\n          pageNumber: pageNum,\r\n        });\r\n      });\r\n    }\r\n    return suggestionPoller.getMoreLandingPageSuggestions({\r\n      landingPageUrl,\r\n      pageNumber: pageNum,\r\n      forceInternalScrapingService: isSubdomain,\r\n      minimumResolution,\r\n    });\r\n  }, [suggestionPoller]);\r\n  /* istanbul ignore next */\r\n  const loadImages =\r\n    useCallback(({ url = '', sDomain = '' }) => {\r\n      if (url) {\r\n        if (pageNumber.current === 1) {\r\n          selectedImages.current = [];\r\n          setSelectedImages(selectedImages.current);\r\n          setIsLoadingFirstPage(true);\r\n        }\r\n        setIsLoading(true);\r\n        getLandingPageSuggestions({\r\n          landingPageUrl: url,\r\n          isSubdomain: !!sDomain,\r\n          pageNum: pageNumber.current,\r\n        }).then((data) => {\r\n          const { TotalCount } = data.ImagePaging;\r\n          setTotalCount(TotalCount);\r\n          setImages(prevImages => [\r\n            ...(pageNumber.current > 1 ? prevImages : []),\r\n            ..._.map(data.Images, (item) => {\r\n              const image = {\r\n                url: item.ThumbnailUrl || item.ImageUrl,\r\n                id: item.ImageUrl,\r\n              };\r\n\r\n              return image;\r\n            }),\r\n          ]);\r\n\r\n          if (pageNumber.current === 1) {\r\n            setIsLoadingFirstPage(false);\r\n          }\r\n\r\n          setIsLoading(false);\r\n        }).catch(() => {\r\n          if (pageNumber.current === 1) {\r\n            setIsLoadingFirstPage(false);\r\n          }\r\n\r\n          setIsLoading(false);\r\n        });\r\n      }\r\n    }, [getLandingPageSuggestions, setSelectedImages]);\r\n  /* istanbul ignore else */\r\n  const loadNextPage = useCallback((props) => {\r\n    pageNumber.current += 1;\r\n    loadImages(props);\r\n  }, [loadImages]);\r\n\r\n  const onSelectImage = useCallback((imageId) => {\r\n    const originSelectedLength = selectedImages.current.length;\r\n    const newSelectedList = selectedImages.current.filter(({ id }) => id !== imageId);\r\n    /* istanbul ignore else */\r\n    if (newSelectedList.length === originSelectedLength) {\r\n      const selectedItem = images.find(({ id }) => id === imageId);\r\n      selectedImages.current.push(selectedItem);\r\n    } else {\r\n      selectedImages.current = newSelectedList;\r\n    }\r\n    setSelectedImages([...selectedImages.current]);\r\n  }, [images, setSelectedImages]);\r\n\r\n  return {\r\n    images,\r\n    totalCount,\r\n    isLoadingFistPage,\r\n    isLoading,\r\n    setImages,\r\n    loadNextPage,\r\n    loadImages,\r\n    setPageNumber,\r\n    onSelectImage,\r\n  };\r\n};\r\n","import React, { useCallback, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n  Tooltip,\r\n  Menu,\r\n  MenuTrigger,\r\n  useOverflowMenu,\r\n  MenuPopover,\r\n  MenuList,\r\n  MenuItem,\r\n  Button,\r\n  mergeClasses,\r\n} from '@fluentui/react-components';\r\nimport {\r\n  Breadcrumb,\r\n  BreadcrumbItem,\r\n  BreadcrumbButton,\r\n  BreadcrumbDivider,\r\n  partitionBreadcrumbItems,\r\n  truncateBreadcrumbLongName,\r\n  isTruncatableBreadcrumbContent,\r\n} from '@fluentui/react-breadcrumb';\r\nimport { MoreHorizontalRegular } from '@fluentui/react-icons';\r\n\r\nconst DefaultMaxDisplayedItems = 5;\r\nconst DefaultMaxLengthOfItem = 30;\r\n\r\nconst OverflowItemsMenu = ({\r\n  overflowItems,\r\n  onItemClick,\r\n}) => {\r\n  const { ref, isOverflowing, overflowCount } = useOverflowMenu();\r\n  // const tooltipStyles = useTooltipStyles();\r\n\r\n  const overflowItemsCount = useMemo(() =>\r\n    (overflowItems ? overflowItems.length + overflowCount : overflowCount\r\n    ), [overflowItems, overflowCount]);\r\n\r\n  if (!isOverflowing && overflowItems && overflowItems.length === 0) {\r\n    return null;\r\n  }\r\n\r\n  return (\r\n    <Menu>\r\n      <MenuTrigger disableButtonEnhancement>\r\n        <Button\r\n          id=\"menu\"\r\n          appearance=\"subtle\"\r\n          ref={ref}\r\n          icon={<MoreHorizontalRegular />}\r\n          aria-label={`${overflowItemsCount} more items`}\r\n          role=\"button\"\r\n        />\r\n      </MenuTrigger>\r\n      <MenuPopover>\r\n        <MenuList>\r\n          {\r\n            overflowItems && overflowItems.map(item => (\r\n              <MenuItem key={item.key} onClick={() => onItemClick(item)}>{item.text}</MenuItem>\r\n            ))\r\n          }\r\n        </MenuList>\r\n      </MenuPopover>\r\n    </Menu>\r\n  );\r\n};\r\n\r\nexport const AdsStudioBreadcrumb = ({\r\n  items,\r\n  onItemClick,\r\n  maxDisplayedItems,\r\n  maxLengthOfItem,\r\n  customItemStyle,\r\n}) => {\r\n  const {\r\n    startDisplayedItems,\r\n    overflowItems,\r\n    endDisplayedItems,\r\n  } = partitionBreadcrumbItems({\r\n    items,\r\n    maxDisplayedItems,\r\n  });\r\n\r\n  const lastIndex = useMemo(() => items.length - 1, [items]);\r\n\r\n  const renderItem = useCallback((entry, isLastItem, onClick) => (\r\n    <React.Fragment key={`item-${entry.key}`}>\r\n      {isTruncatableBreadcrumbContent(entry.text, maxLengthOfItem) ? (\r\n        <BreadcrumbItem>\r\n          <Tooltip withArrow content={entry.text} relationship=\"label\">\r\n            <BreadcrumbButton\r\n              current={isLastItem}\r\n              onClick={() => onClick(entry)}\r\n              className={mergeClasses(customItemStyle.breadcrumbButton, isLastItem && customItemStyle.breadcrumbButtonCurrent)}\r\n            >\r\n              {truncateBreadcrumbLongName(entry.text, maxLengthOfItem)}\r\n            </BreadcrumbButton>\r\n          </Tooltip>\r\n        </BreadcrumbItem>\r\n        ) : (\r\n          <BreadcrumbItem>\r\n            <BreadcrumbButton\r\n              current={isLastItem}\r\n              onClick={() => onClick(entry)}\r\n              className={mergeClasses(customItemStyle.breadcrumbButton, isLastItem && customItemStyle.breadcrumbButtonCurrent)}\r\n            >{entry.text}\r\n            </BreadcrumbButton>\r\n          </BreadcrumbItem>\r\n        )}\r\n\r\n      {!isLastItem && <BreadcrumbDivider />}\r\n    </React.Fragment>\r\n  ), [customItemStyle, maxLengthOfItem]);\r\n\r\n  return (\r\n    <Breadcrumb>\r\n      {\r\n        startDisplayedItems && startDisplayedItems.map((item, index) => renderItem(item, index === lastIndex, onItemClick))\r\n      }\r\n      {\r\n        overflowItems &&\r\n          <OverflowItemsMenu\r\n            overflowItems={overflowItems}\r\n            onItemClick={onItemClick}\r\n          />\r\n      }\r\n      {\r\n        endDisplayedItems && endDisplayedItems.map((item, index) => {\r\n          const isLastItem = index + (items.length - endDisplayedItems.length) === lastIndex;\r\n          return renderItem(item, isLastItem, onItemClick);\r\n        })\r\n      }\r\n    </Breadcrumb>\r\n  );\r\n};\r\n\r\nAdsStudioBreadcrumb.propTypes = {\r\n  items: PropTypes.arrayOf(PropTypes.shape({\r\n    key: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n    text: PropTypes.string,\r\n  })).isRequired,\r\n  onItemClick: PropTypes.func.isRequired,\r\n  maxDisplayedItems: PropTypes.number,\r\n  maxLengthOfItem: PropTypes.number,\r\n  customItemStyle: PropTypes.shape({\r\n    breadcrumbButton: PropTypes.string,\r\n    breadcrumbButtonCurrent: PropTypes.string,\r\n  }),\r\n};\r\n\r\nAdsStudioBreadcrumb.defaultProps = {\r\n  maxDisplayedItems: DefaultMaxDisplayedItems,\r\n  maxLengthOfItem: DefaultMaxLengthOfItem,\r\n  customItemStyle: {},\r\n};\r\n","import { makeStyles, shorthands, tokens } from '@fluentui/react-components';\r\n\r\n\r\nexport const useLibraryEmptyViewStyle = makeStyles({\r\n  CardContainer: {\r\n    display: 'flex',\r\n    flexDirection: 'row',\r\n    flexWrap: 'wrap',\r\n    justifyContent: 'center',\r\n    alignItems: 'center',\r\n    ...shorthands.gap('8px'),\r\n    ...shorthands.padding('8px', '0', '0', '0'),\r\n    width: '700px',\r\n\r\n    '& >button': {\r\n      width: '340px',\r\n    },\r\n  },\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\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { mergeClasses } from '@fluentui/react-components';\r\nimport { getEntryCardData } from '../../model/utils';\r\nimport { AddAssetEntryCard } from '../add-asset-entry-card';\r\n\r\nimport { EmptyViewIcons } from '../../asset-images';\r\nimport { useLibraryEmptyViewStyle } from '../ads-studio-library-page-content/styles/empty-view-style';\r\n\r\nexport const LibraryEmptyView = ({\r\n  i18n,\r\n  isInSubfolder,\r\n  isAnyFilterSet,\r\n  onClickStock,\r\n  onClickCreate,\r\n  onClickUpload,\r\n  onClickWebsite,\r\n  onClickInvest,\r\n  hideAddAssetCards,\r\n  isXandrIntegrationEnabled,\r\n}) => {\r\n  const cardData = getEntryCardData({\r\n    i18n,\r\n    onClickCreate,\r\n    onClickUpload,\r\n    onClickStock,\r\n    onClickWebsite,\r\n    onClickInvest,\r\n    isXandrIntegrationEnabled,\r\n  });\r\n\r\n  const classes = useLibraryEmptyViewStyle();\r\n\r\n  let str = i18n.getString(_TL_('You haven\\'t added any assets yet. Choose from the options below to add assets.'));\r\n  if (isAnyFilterSet) {\r\n    str = i18n.getString(_TL_('No assets match your search. Please try again.'));\r\n  } else if (isInSubfolder) {\r\n    str = i18n.getString(_TL_('You haven\\'t added any assets to this folder yet. Once you add assets, you\\'ll see them here.'));\r\n  }\r\n\r\n  return (\r\n    <div className={mergeClasses('empty-view-box', classes.emptyView)}>\r\n      <div className={mergeClasses('empty-icon', classes.emptyIcon)}>\r\n        <img src={EmptyViewIcons.LibraryEmptyViewSVG} alt=\"Empty Icon\" />\r\n      </div>\r\n      <div className={mergeClasses('main-text', classes.mainText)}>\r\n        {str}\r\n      </div>\r\n      {\r\n        !hideAddAssetCards &&\r\n        <div className={mergeClasses('card-container', classes.CardContainer)}>\r\n          {cardData.map(card => (\r\n            <AddAssetEntryCard\r\n              key={card.key}\r\n              id={card.key}\r\n              description={card.description}\r\n              title={card.title}\r\n              imageSrc={card.image}\r\n              onClick={card.onClick}\r\n            />\r\n          ))}\r\n        </div>\r\n      }\r\n    </div>\r\n  );\r\n};\r\n\r\nLibraryEmptyView.propTypes = {\r\n  i18n: PropTypes.shape({\r\n    getString: PropTypes.func,\r\n  }).isRequired,\r\n  isInSubfolder: PropTypes.bool,\r\n  isAnyFilterSet: PropTypes.bool,\r\n  onClickStock: PropTypes.func.isRequired,\r\n  onClickCreate: PropTypes.func.isRequired,\r\n  onClickUpload: PropTypes.func.isRequired,\r\n  onClickWebsite: PropTypes.func.isRequired,\r\n  onClickInvest: PropTypes.func.isRequired,\r\n  hideAddAssetCards: PropTypes.bool,\r\n  isXandrIntegrationEnabled: PropTypes.bool,\r\n};\r\n\r\nLibraryEmptyView.defaultProps = {\r\n  isInSubfolder: false,\r\n  isAnyFilterSet: false,\r\n  hideAddAssetCards: false,\r\n  isXandrIntegrationEnabled: false,\r\n};\r\n","import React, { useCallback } from 'react';\r\nimport {\r\n  Menu,\r\n  MenuButton,\r\n  MenuItem,\r\n  MenuList,\r\n  MenuDivider,\r\n  MenuPopover,\r\n  MenuTrigger,\r\n} from '@fluentui/react-components';\r\nimport {\r\n  Add20Regular,\r\n  ArrowUpload20Regular,\r\n  ImageMultiple20Regular,\r\n  FolderAdd20Regular,\r\n} from '@fluentui/react-icons';\r\nimport { SparkeSVGIcon } from '../../asset-images';\r\n\r\nconst AddFromAnotherSourceSubMenu = (props) => {\r\n  const {\r\n    i18n,\r\n    onUploadImage,\r\n    onUploadVideo,\r\n  } = props;\r\n\r\n  return (\r\n    <Menu>\r\n      <MenuTrigger disableButtonEnhancement>\r\n        <MenuItem className=\"add-asset-button\" icon={<ImageMultiple20Regular />}>\r\n          {i18n.getString(_TL_('Add from another source'))}\r\n        </MenuItem>\r\n      </MenuTrigger>\r\n\r\n      <MenuPopover>\r\n        <MenuList className=\"add-asset-menu-list\">\r\n          <MenuItem className=\"add-image-button\" onClick={onUploadImage}>\r\n            {i18n.getString(_TL_('Add image'))}\r\n          </MenuItem>\r\n          <MenuItem className=\"add-video-button\" onClick={onUploadVideo}>\r\n            {i18n.getString(_TL_('Add video'))}\r\n          </MenuItem>\r\n        </MenuList>\r\n      </MenuPopover>\r\n    </Menu>\r\n  );\r\n};\r\n\r\nconst UploadFromComputerSubMenu = (props) => {\r\n  const {\r\n    i18n,\r\n    onUploadLocalFile,\r\n    onUploadLocalFolder,\r\n  } = props;\r\n\r\n  return (\r\n    <Menu>\r\n      <MenuTrigger disableButtonEnhancement>\r\n        <MenuItem className=\"upload-button\" icon={<ArrowUpload20Regular />}>\r\n          {i18n.getString(_TL_('Upload from computer'))}\r\n        </MenuItem>\r\n      </MenuTrigger>\r\n\r\n      <MenuPopover>\r\n        <MenuList className=\"upload-menu-list\">\r\n          <MenuItem className=\"upload-file-button\" onClick={onUploadLocalFile}>\r\n            {i18n.getString(_TL_('Upload file'))}\r\n          </MenuItem>\r\n          <MenuItem className=\"upload-folder-button\" onClick={onUploadLocalFolder}>\r\n            {i18n.getString(_TL_('Upload folder'))}\r\n          </MenuItem>\r\n        </MenuList>\r\n      </MenuPopover>\r\n    </Menu>\r\n  );\r\n};\r\n\r\nexport const NewDropDown = (props) => {\r\n  const {\r\n    i18n,\r\n    className,\r\n    logger,\r\n    onUploadLocalFileClick,\r\n    onUploadLocalFolderClick,\r\n    onUploadImageClick,\r\n    onUploadVideoClick,\r\n    onAIGenerateClick,\r\n    onCreateFolderClick,\r\n    handleUsage,\r\n  } = props;\r\n\r\n  const onUploadLocalFile = useCallback(() => {\r\n    logger.logTrace('Add assets - file upload is clicked');\r\n    onUploadLocalFileClick();\r\n    if (handleUsage) {\r\n      handleUsage();\r\n    }\r\n  }, [handleUsage, logger, onUploadLocalFileClick]);\r\n\r\n  const onUploadLocalFolder = useCallback(() => {\r\n    logger.logTrace('Add assets - folder upload is clicked');\r\n    onUploadLocalFolderClick();\r\n    if (handleUsage) {\r\n      handleUsage();\r\n    }\r\n  }, [handleUsage, logger, onUploadLocalFolderClick]);\r\n\r\n  const onUploadImage = useCallback(() => {\r\n    logger.logTrace('Add assets - image source is clicked');\r\n    onUploadImageClick();\r\n    if (handleUsage) {\r\n      handleUsage();\r\n    }\r\n  }, [handleUsage, logger, onUploadImageClick]);\r\n\r\n  const onUploadVideo = useCallback(() => {\r\n    logger.logTrace('Add assets - video source is clicked');\r\n    onUploadVideoClick();\r\n    if (handleUsage) {\r\n      handleUsage();\r\n    }\r\n  }, [handleUsage, logger, onUploadVideoClick]);\r\n\r\n  const onAIGenerate = useCallback(() => {\r\n    logger.logTrace('Add assets - ai generate image clicked');\r\n    onAIGenerateClick();\r\n    if (handleUsage) {\r\n      handleUsage();\r\n    }\r\n  }, [handleUsage, logger, onAIGenerateClick]);\r\n\r\n  const onCreateFolder = useCallback(() => {\r\n    logger.logTrace('Create folder is clicked');\r\n    onCreateFolderClick();\r\n    if (handleUsage) {\r\n      handleUsage();\r\n    }\r\n  }, [handleUsage, logger, onCreateFolderClick]);\r\n\r\n  return (\r\n    <div className={className}>\r\n      <Menu>\r\n        <MenuTrigger disableButtonEnhancement>\r\n          <MenuButton className=\"new-drop-button\" appearance=\"primary\" icon={<Add20Regular />}>\r\n            {i18n.getString(_TL_('New'))}\r\n          </MenuButton>\r\n        </MenuTrigger>\r\n\r\n        <MenuPopover>\r\n          <MenuList className=\"new-menu-list\">\r\n            <MenuItem className=\"generate-images-button\" icon={<SparkeSVGIcon />} onClick={onAIGenerate}>\r\n              {i18n.getString(_TL_('Generate images'))}\r\n            </MenuItem>\r\n            <MenuDivider />\r\n            <UploadFromComputerSubMenu\r\n              i18n={i18n}\r\n              onUploadLocalFile={onUploadLocalFile}\r\n              onUploadLocalFolder={onUploadLocalFolder}\r\n            />\r\n            <AddFromAnotherSourceSubMenu\r\n              i18n={i18n}\r\n              onUploadImage={onUploadImage}\r\n              onUploadVideo={onUploadVideo}\r\n            />\r\n            <MenuItem className=\"create-folder-button\" icon={<FolderAdd20Regular />} onClick={onCreateFolder}>\r\n              {i18n.getString(_TL_('Create folder'))}\r\n            </MenuItem>\r\n          </MenuList>\r\n        </MenuPopover>\r\n      </Menu>\r\n    </div>\r\n  );\r\n};\r\n","import React, { useState, useRef, useCallback, useMemo, useEffect } from 'react';\r\nimport _ from 'underscore';\r\nimport {\r\n  Button,\r\n  MenuButton,\r\n  MenuList,\r\n  MenuDivider,\r\n  makeStyles,\r\n  tokens,\r\n  Label,\r\n  Input,\r\n  useId,\r\n  mergeClasses,\r\n  Popover,\r\n  PopoverTrigger,\r\n  PopoverSurface,\r\n  shorthands,\r\n} from '@fluentui/react-components';\r\nimport {\r\n  Dismiss20Regular,\r\n} from '@fluentui/react-icons';\r\n\r\nconst useStyles = makeStyles({\r\n  menuPopover: {\r\n    minWidth: '180px',\r\n    ...shorthands.padding('4px'),\r\n  },\r\n  menuButton: {\r\n    // This is a known fluent ui issue between Popover and MenuButton: https://github.com/microsoft/fluentui/issues/31804\r\n    // This bug has been fixed in the latest version, but as we use legacy version, update the style as a workaround.\r\n    backgroundColor: 'transparent',\r\n    '&[aria-expanded=\"true\"]': {\r\n      backgroundColor: '#EBEBEB',\r\n    },\r\n  },\r\n  unselectedMenuButton: {\r\n    '&[aria-expanded=\"false\"]': {\r\n      fontWeight: 'unset',\r\n    },\r\n  },\r\n  enabledClearButton: {\r\n    float: 'right',\r\n    color: tokens.colorNeutralForeground2BrandHover,\r\n  },\r\n  disabledClearButton: {\r\n    float: 'right',\r\n    color: tokens.colorNeutralForegroundDisabled,\r\n  },\r\n});\r\n\r\nconst useCustomItemStyles = makeStyles({\r\n  minWidth: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    marginLeft: '28px',\r\n    marginRight: '28px',\r\n    maxWidth: '124px',\r\n  },\r\n  minHeight: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    marginLeft: '28px',\r\n    marginRight: '28px',\r\n    marginBottom: '6px',\r\n    maxWidth: '124px',\r\n  },\r\n  input: {\r\n    paddingRight: '0px',\r\n    height: '32px',\r\n    lineHeight: '32px',\r\n    overflowX: 'hidden',\r\n    overflowY: 'hidden',\r\n  },\r\n  contentAfter: {\r\n    backgroundColor: tokens.colorNeutralBackground3,\r\n    paddingRight: '6px',\r\n    paddingLeft: '8px',\r\n  },\r\n  contentLabel: {\r\n    marginBottom: '6px',\r\n    marginTop: '8px',\r\n  },\r\n});\r\n\r\nexport const ImageSizeFilter = (props) => {\r\n  const {\r\n    i18n,\r\n    defaultMinWidth,\r\n    defaultMinHeight,\r\n    onChange,\r\n    forceClear,\r\n    onDismiss,\r\n    defaultOpen = false,\r\n  } = props;\r\n\r\n  const minWidthId = useId('minWidth');\r\n  const afterMinWidthId = useId('afterMinWidthId');\r\n  const minHeightId = useId('minHeight');\r\n  const afterMinHeightId = useId('afterMinHeightId');\r\n  const customClasses = useCustomItemStyles();\r\n\r\n  const classes = useStyles();\r\n  const [isOpen, setIsOpen] = useState(defaultOpen);\r\n  const [showInput, setShowInput] = useState(defaultOpen);\r\n  const [menuList, setMenuList] = useState(null);\r\n\r\n  // use ref to handle focus switching when pressing tab key\r\n  const minWidthRef = useRef(null);\r\n  const minHeightRef = useRef(null);\r\n\r\n  const [minWidth, setMinWidth] = useState(defaultMinWidth);\r\n  const [minHeight, setMinHeight] = useState(defaultMinHeight);\r\n\r\n  const getOnChangeCallback = useCallback(setter => (event, newValue) => {\r\n    const val = parseInt(newValue, 10);\r\n    if (_.isEmpty(newValue) || _.isNaN(val)) {\r\n      setter(null);\r\n      return;\r\n    }\r\n    if (!_.isNaN(val) && val >= 0 && val <= 1000000) {\r\n      setter(val);\r\n    }\r\n  }, []);\r\n\r\n  const onMinWidthChange = useMemo(\r\n    () => getOnChangeCallback(setMinWidth),\r\n    [getOnChangeCallback]\r\n  );\r\n\r\n  const onMinHeightChange = useMemo(\r\n    () => getOnChangeCallback(setMinHeight),\r\n    [getOnChangeCallback]\r\n  );\r\n\r\n  const onClear = useCallback(() => {\r\n    setMinWidth(null);\r\n    setMinHeight(null);\r\n    if ((defaultMinHeight || defaultMinWidth)) {\r\n      // trigger onchange only when dropdown list is closed\r\n      onChange({ newMinHeight: null, newMinWidth: null });\r\n    }\r\n    if (onDismiss) {\r\n      onDismiss();\r\n    }\r\n  }, [defaultMinHeight, defaultMinWidth, onChange, onDismiss]);\r\n\r\n  const title = useMemo(() => {\r\n    if (minWidth && minHeight) {\r\n      return `> ${minWidth}px x ${minHeight}px`;\r\n    }\r\n    if (minWidth) {\r\n      return `${i18n.getString(_TL_('Width'))} > ${minWidth}px`;\r\n    }\r\n    if (minHeight) {\r\n      return `${i18n.getString(_TL_('Height'))} > ${minHeight}px`;\r\n    }\r\n    return '';\r\n  }, [i18n, minHeight, minWidth]);\r\n\r\n  const focusTextField = useCallback(textFieldRef => (event) => {\r\n    if (event.key === 'Tab') {\r\n      if (textFieldRef.current) {\r\n        textFieldRef.current.focus();\r\n      }\r\n      if (event.stopPropagation) { event.stopPropagation(); }\r\n      if (event.preventDefault) { event.preventDefault(); }\r\n    }\r\n  }, []);\r\n\r\n  const onMinWidthKeyUp = useMemo(() => focusTextField(minHeightRef), [focusTextField]);\r\n  const onMinHeightKeyUp = useMemo(() => focusTextField(minWidthRef), [focusTextField]);\r\n\r\n  const onDropdownDismiss = useCallback(() => {\r\n    if (defaultMinHeight !== minHeight || defaultMinWidth !== minWidth) {\r\n      onChange({ newMinWidth: minWidth, newMinHeight: minHeight }, title);\r\n    }\r\n  }, [defaultMinHeight, defaultMinWidth, minHeight, minWidth, onChange, title]);\r\n\r\n  const clear = () => {\r\n    setIsOpen(false);\r\n    onClear();\r\n  };\r\n\r\n  const isSelected = useMemo(() => minWidth || minHeight, [minHeight, minWidth]);\r\n\r\n  const onOpenChange = (e, data) => {\r\n    setIsOpen(data.open);\r\n  };\r\n\r\n  useEffect(() => {\r\n    if (forceClear) {\r\n      clear();\r\n    }\r\n  // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [forceClear]);\r\n\r\n  useEffect(() => {\r\n    if (!isOpen) {\r\n      onDropdownDismiss();\r\n    }\r\n  }, [isOpen, onDropdownDismiss]);\r\n\r\n  useEffect(() => {\r\n    let timeoutId;\r\n    if (isOpen) {\r\n      timeoutId = setTimeout(() => {\r\n        if (minWidthRef.current) {\r\n          minWidthRef.current.focus();\r\n        }\r\n      }, 300);\r\n    }\r\n    setShowInput(isOpen);\r\n    return () => {\r\n      clearTimeout(timeoutId);\r\n    };\r\n  }, [isOpen]);\r\n\r\n  useEffect(() => {\r\n    if (menuList) {\r\n      // as we are using custom input, we need to remove menu role for accessibility\r\n      menuList.removeAttribute('role');\r\n    }\r\n  }, [menuList]);\r\n\r\n  return (\r\n    <Popover trapFocus open={isOpen} onOpenChange={onOpenChange} positioning=\"below-start\">\r\n      <PopoverTrigger disableButtonEnhancement>\r\n        <MenuButton appearance=\"subtle\" className={isSelected ? mergeClasses(classes.menuButton, 'image-size-button') : mergeClasses(classes.menuButton, classes.unselectedMenuButton, 'image-size-button')}>\r\n          {isSelected ? title : i18n.getString(_TL_('Image ratio'))}\r\n        </MenuButton>\r\n      </PopoverTrigger>\r\n\r\n      <PopoverSurface className={mergeClasses(classes.menuPopover, 'image-size-menu')}>\r\n        <MenuList ref={setMenuList}>\r\n          <div className=\"custom-ratio\">\r\n            <div className={mergeClasses(customClasses.minWidth, 'min-width')}>\r\n              <Label className={customClasses.contentLabel} htmlFor={minWidthId}>{i18n.getString(_TL_('Min. width'))}</Label>\r\n              {\r\n                // Add a condition to check if the input should be shown or not\r\n                // By this way, screen reader can read the expanded state of Menu correctly\r\n                showInput &&\r\n                <Input\r\n                  className={customClasses.input}\r\n                  ref={minWidthRef}\r\n                  value={minWidth ? minWidth.toString() : ''}\r\n                  onChange={(ev, data) => onMinWidthChange(ev, data.value)}\r\n                  contentAfter={\r\n                    <div className={customClasses.contentAfter} id={afterMinWidthId}>\r\n                      {i18n.getString(_TL_('px'))}\r\n                    </div>\r\n                }\r\n                  aria-labelledby={`${minWidthId} ${afterMinWidthId}`}\r\n                  id={minWidthId}\r\n                  onKeyDown={onMinWidthKeyUp}\r\n                />\r\n              }\r\n            </div>\r\n            <div className={mergeClasses(customClasses.minHeight, 'min-height')}>\r\n              <Label className={customClasses.contentLabel} htmlFor={minHeightId}>{i18n.getString(_TL_('Min. height'))}</Label>\r\n              {\r\n                showInput &&\r\n                <Input\r\n                  className={customClasses.input}\r\n                  ref={minHeightRef}\r\n                  value={minHeight ? minHeight.toString() : ''}\r\n                  onChange={(ev, data) => onMinHeightChange(ev, data.value)}\r\n                  contentAfter={\r\n                    <div className={customClasses.contentAfter} id={afterMinHeightId}>\r\n                      {i18n.getString(_TL_('px'))}\r\n                    </div>\r\n                  }\r\n                  onKeyDown={onMinHeightKeyUp}\r\n                  aria-labelledby={`${minHeightId} ${afterMinHeightId}`}\r\n                  id={minHeightId}\r\n                />\r\n              }\r\n            </div>\r\n          </div>\r\n          <MenuDivider />\r\n        </MenuList>\r\n        <div>\r\n          <Button\r\n            className={isSelected ? mergeClasses('clear-button', classes.enabledClearButton) : classes.disabledClearButton}\r\n            disabled={!isSelected}\r\n            appearance=\"transparent\"\r\n            icon={<Dismiss20Regular />}\r\n            onClick={() => clear()}\r\n          >\r\n            {i18n.getString(_TL_('Clear'))}\r\n          </Button>\r\n        </div>\r\n      </PopoverSurface>\r\n    </Popover>\r\n  );\r\n};\r\n\r\n","import { CivilDate } from 'tc39-proposal-temporal';\r\nimport {\r\n  getCivilDateToday,\r\n  compareCivilDate,\r\n} from '@bingads-webui-universal/temporal-utitlities';\r\n\r\nexport const civilDateEqual = (d1, d2) => {\r\n  if (!d1 && !d2) {\r\n    return true;\r\n  }\r\n  if (!d1 || !d2) {\r\n    return false;\r\n  }\r\n  return compareCivilDate(d1, d2) === 0;\r\n};\r\n\r\nexport const civilDateRangeEqual = (r1, r2) => {\r\n  if ((!r1 && !r2) || (r1 === r2)) {\r\n    return true;\r\n  }\r\n  if (!r1 || !r2) {\r\n    return false;\r\n  }\r\n  return civilDateEqual(r1.start, r2.start) && civilDateEqual(r1.end, r2.end);\r\n};\r\n\r\nexport const civilDateToDebugString = (cd) => {\r\n  if (!cd) return '';\r\n  const { year, month, day } = cd || {};\r\n  return `${year || ''}-${month || ''}-${day || ''}`;\r\n};\r\n\r\nexport const civilDateRangeToDebugString = (dr) => {\r\n  if (!dr) {\r\n    return '';\r\n  }\r\n  return `start:${civilDateToDebugString(dr.start)} end:${civilDateToDebugString(dr.end)}`;\r\n};\r\n\r\nexport const getDefaultDateRange = () => {\r\n  const yesterday = getCivilDateToday().plus({ days: -1 });\r\n  const defaultRange = { start: yesterday, end: yesterday };\r\n  return defaultRange;\r\n};\r\n\r\nexport const getDefaultMetricDateRange = (i18n, dateFormat, timeZone, lcid) => {\r\n  const todayObj = i18n.getToday({ timeZone });\r\n  const today = new CivilDate(todayObj.year, todayObj.month, todayObj.day);\r\n  const yesterday = today.plus({ days: -1 });\r\n  const last30day = today.plus({ days: -30 });\r\n  return {\r\n    RangeStartDate: i18n.formatCivilDate(last30day, { raw: dateFormat, timeZone }),\r\n    RangeEndDate: i18n.formatCivilDate(yesterday, { raw: dateFormat, timeZone }),\r\n    Rangelcid: lcid,\r\n    RangeId: 5, // last 30 days, RANGES.Last30Days\r\n  };\r\n};\r\n","import classnames from 'classnames';\r\nimport React, { useCallback, useMemo, useState, useRef, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { CivilDate } from 'tc39-proposal-temporal';\r\nimport { SingleMonthCalendar } from '@bingads-webui-react/single-month-calendar';\r\n\r\nimport { civilDateRangeEqual } from '../../../utils/date-utils';\r\n\r\n// this is a simple date range picker based on the Calendar control used in\r\n// Campaign UI (NOT Fluent UI Calendar)\r\n// the 'Compare' feature is not supported, so only one date range selection\r\n// is supported\r\nconst SimpleDateRangePickerInternal = ({\r\n  defaultSelectedDateRange,\r\n  // to select a date range, need to select 2 days (start & end) on calendars\r\n  // this value control which value is currently selecting\r\n  defaultIsSelectingStartDate,\r\n  onDateRangeChange,\r\n  timeZone,\r\n  i18n,\r\n}) => {\r\n  // use ref instead of state to avoid unnecessary rending\r\n  const isSelectingStartDate = useRef(defaultIsSelectingStartDate);\r\n\r\n  const [selectedDateRange, setSelectedDateRange]\r\n    = useState(defaultSelectedDateRange);\r\n\r\n  // the navigatedDate set on the left calendar, which control which month\r\n  // is shown on the calendar\r\n  const [leftNavigatedDate, setLeftNavigationDate] = useState(new CivilDate(\r\n    defaultSelectedDateRange.end.year,\r\n    defaultSelectedDateRange.end.month - 1,\r\n    15\r\n  ));\r\n\r\n  // the navigatedDate set on the right calendar\r\n  const rightNavigatedDate = useMemo(\r\n    () => new CivilDate(leftNavigatedDate.year, leftNavigatedDate.month + 1, 15),\r\n    [leftNavigatedDate]\r\n  );\r\n\r\n  const today = useMemo(() => {\r\n    const todayObj = i18n.getToday({ timeZone });\r\n    return new CivilDate(todayObj.year, todayObj.month, todayObj.day);\r\n  }, [i18n, timeZone]);\r\n\r\n  // for now, use the default values here\r\n  const minDate = useMemo(() => today.plus({ years: -3 }), [today]);\r\n  const maxDate = today;\r\n\r\n  // 'Compare' is not supported, so only one range is used\r\n  const selectedRanges = useMemo(() => [selectedDateRange], [selectedDateRange]);\r\n\r\n  // click '<' button on the left calendar\r\n  const onNavigateStartMonthDate = useCallback((date) => {\r\n    setLeftNavigationDate(date);\r\n  }, []);\r\n\r\n  // click '>' button on the right calendar\r\n  const onNavigateEndMonthDate = useCallback((date) => {\r\n    setLeftNavigationDate(date.plus({ months: -1 }));\r\n  }, []);\r\n\r\n  const onSelectDate = useCallback((newDate) => {\r\n    let { start, end } = selectedDateRange || {};\r\n    if (isSelectingStartDate.current) {\r\n      start = newDate;\r\n      end = end > newDate ? end : newDate;\r\n    } else {\r\n      end = newDate;\r\n    }\r\n    if (start > end) {\r\n      setSelectedDateRange({ start: end, end: start });\r\n    } else {\r\n      setSelectedDateRange({ start, end });\r\n    }\r\n    isSelectingStartDate.current = !isSelectingStartDate.current;\r\n  }, [selectedDateRange]);\r\n\r\n  useEffect(() => {\r\n    if (!civilDateRangeEqual(selectedDateRange, defaultSelectedDateRange) && onDateRangeChange) {\r\n      onDateRangeChange(selectedDateRange);\r\n    }\r\n  }, [onDateRangeChange, selectedDateRange, defaultSelectedDateRange]);\r\n\r\n  return (\r\n    <div className={classnames('simple-date-range-picker')}>\r\n      <div className=\"compared-date-range-picker-dialog\">\r\n        <div className=\"double-month-calendar\">\r\n          <div className=\"left-calendar\">\r\n            <SingleMonthCalendar\r\n              minDate={minDate}\r\n              maxDate={maxDate}\r\n              today={today}\r\n              onSelectDate={onSelectDate}\r\n              selectedRanges={selectedRanges}\r\n              navigatedDate={leftNavigatedDate}\r\n              onNavigateDate={onNavigateStartMonthDate}\r\n              isRightNavigateVisible={false}\r\n              i18n={i18n}\r\n            />\r\n          </div>\r\n          <div className=\"divider\" />\r\n          <div className=\"right-calendar\">\r\n            <SingleMonthCalendar\r\n              minDate={minDate}\r\n              maxDate={maxDate}\r\n              today={today}\r\n              onSelectDate={onSelectDate}\r\n              selectedRanges={selectedRanges}\r\n              navigatedDate={rightNavigatedDate}\r\n              onNavigateDate={onNavigateEndMonthDate}\r\n              isLeftNavigateVisible={false}\r\n              i18n={i18n}\r\n            />\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nSimpleDateRangePickerInternal.propTypes = {\r\n  defaultSelectedDateRange: PropTypes.shape({\r\n    start: PropTypes.instanceOf(CivilDate),\r\n    end: PropTypes.instanceOf(CivilDate),\r\n  }).isRequired,\r\n  defaultIsSelectingStartDate: PropTypes.bool,\r\n  onDateRangeChange: PropTypes.func,\r\n  timeZone: PropTypes.string.isRequired,\r\n  i18n: PropTypes.shape({\r\n    getString: PropTypes.func,\r\n    getToday: PropTypes.func,\r\n  }).isRequired,\r\n};\r\n\r\nSimpleDateRangePickerInternal.defaultProps = {\r\n  defaultIsSelectingStartDate: true,\r\n  onDateRangeChange: undefined,\r\n};\r\n\r\nexport const SimpleDateRangePicker = SimpleDateRangePickerInternal;\r\n","import _ from 'underscore';\r\nimport {\r\n  getFoldersLimitPerAccount,\r\n  getImageAssetLimitPerAccount,\r\n  getVideoAssetLimitPerAccount\r\n} from '../model';\r\n\r\nconst containsErrorCodeInList = (errorList, searchErrorCode) => {\r\n  const found = _.find(errorList, (err) => {\r\n    const errorCodeInn = _.get(err, ['body', 'value', 0, 'Code'], '') || err;\r\n    return errorCodeInn === searchErrorCode;\r\n  });\r\n  if (found) {\r\n    return true;\r\n  }\r\n\r\n  return false;\r\n};\r\n\r\nexport const processFolderSizeLimitError = ({ errorList, aid, logger }) => {\r\n  if (errorList.length > 0 && containsErrorCodeInList(errorList, 'FolderLimitExceededPerAccount')) {\r\n    const limit = getFoldersLimitPerAccount(aid, logger);\r\n\r\n    return { limit };\r\n  }\r\n\r\n  return null;\r\n};\r\n\r\nexport const processImageSizeLimitError = ({ errorList, aid, logger }) => {\r\n  if (errorList.length > 0 && containsErrorCodeInList(errorList, 'ImagesLimitExceededPerAccount')) {\r\n    const limit = getImageAssetLimitPerAccount(aid, logger);\r\n\r\n    return { limit };\r\n  }\r\n\r\n  return null;\r\n};\r\n\r\nexport const processVideoSizeLimitError = ({ errorList, aid, logger }) => {\r\n  if (errorList.length > 0 && containsErrorCodeInList(errorList, 'VideoLimitExceededPerAccount')) {\r\n    const limit = getVideoAssetLimitPerAccount(aid, logger);\r\n\r\n    return { limit };\r\n  }\r\n\r\n  return null;\r\n};\r\n","import { Promise } from 'bluebird';\r\nimport _ from 'underscore';\r\nimport { parseSync } from '@bingads-webui/safe-json';\r\n\r\nexport const fetchImgPromise = imgUrl => new Promise((resolve, reject) => {\r\n  const image = new Image();\r\n  image.onload = () => {\r\n    resolve(image);\r\n  };\r\n  image.onerror = () => {\r\n    reject(new Error('Failed to load image'));\r\n  };\r\n  image.crossOrigin = '';\r\n  image.src = imgUrl;\r\n});\r\n\r\nexport const createOffScreenContext = (width, height) => {\r\n  const canvas = document.createElement('canvas');\r\n  canvas.width = width;\r\n  canvas.height = height;\r\n  const context = canvas.getContext('2d');\r\n  return {\r\n    canvas,\r\n    context,\r\n  };\r\n};\r\n\r\nexport const getImagePixels = (image, imageWidth, imageHeight) => {\r\n  const {\r\n    canvas,\r\n    context,\r\n  } = createOffScreenContext(imageWidth, imageHeight);\r\n\r\n  context.drawImage(image, 0, 0);\r\n  const imageData = context.getImageData(0, 0, canvas.width, canvas.height);\r\n  const pixels = imageData.data;\r\n  return pixels;\r\n};\r\n\r\nexport const parseMaskResultPromise = ({\r\n  result,\r\n  imageUrl,\r\n  imageWidth,\r\n  imageHeight,\r\n}) => new Promise((resolve, reject) => {\r\n  const { rawMaskSetsBase64String } = result;\r\n  const maskSetsBase64Json = parseSync(rawMaskSetsBase64String);\r\n  if (_.isUndefined(maskSetsBase64Json)) {\r\n    reject(new Error('Failed to parse result'));\r\n  }\r\n  const {\r\n    shape = [],\r\n    data: maskSetsBase64,\r\n  } = maskSetsBase64Json;\r\n\r\n  // Convert the decompressed data into a 3D array\r\n  const reshapeTo3D = (array, x, y, z) => {\r\n    const res = [];\r\n    let index = 0;\r\n    for (let i = 0; i < x; i += 1) {\r\n      const temp2D = [];\r\n      for (let j = 0; j < y; j += 1) {\r\n        const temp1D = [];\r\n        for (let k = 0; k < z; k += 1) {\r\n          temp1D.push(array[index]);\r\n          index += 1;\r\n        }\r\n        temp2D.push(temp1D);\r\n      }\r\n      res.push(temp2D);\r\n    }\r\n    return res;\r\n  };\r\n\r\n  async function decompressAndParse3DArray(base64String, x, y, z) {\r\n    // Step 1: Decode the Base64 string to a binary Uint8Array\r\n    const binaryString = atob(base64String);\r\n    const byteArray = new Uint8Array(binaryString.length);\r\n    for (let i = 0; i < binaryString.length; i += 1) {\r\n      byteArray[i] = binaryString.charCodeAt(i);\r\n    }\r\n\r\n    // Step 2: Create a readable stream from the byteArray\r\n    const inputStream = new Blob([byteArray]).stream();\r\n\r\n    // Step 3: Decompress the stream using DecompressionStream (assuming 'gzip')\r\n    const decompressionStream = new DecompressionStream('gzip');\r\n    const decompressedStream = inputStream.pipeThrough(decompressionStream);\r\n\r\n    // Step 4: Collect the decompressed data\r\n    const decompressedResponse = new Response(decompressedStream);\r\n    const decompressedBuffer = await decompressedResponse.arrayBuffer();\r\n\r\n    // Step 5: Convert the decompressed data to a Uint8Array\r\n    const decompressedArray = new Uint8Array(decompressedBuffer);\r\n\r\n    // Step 6: Reshape the decompressed array into the specified 3D dimensions (x, y, z)\r\n    const int3DArray = reshapeTo3D(decompressedArray, x, y, z);\r\n\r\n    return int3DArray;\r\n  }\r\n\r\n  // Execute the function and log the result\r\n  decompressAndParse3DArray(maskSetsBase64, shape[1], shape[0], shape[2])\r\n    .then((maskSets3Darray) => {\r\n      const maskSetsArray = maskSets3Darray.map(row => row.map(a => a[0])).flat();\r\n      const alphaArray = maskSets3Darray.map(row => row.map(a => a[1])).flat();\r\n      const selectedMasksArray = _.filter(_.uniq(maskSetsArray), pixelMask => pixelMask > 0);\r\n      fetchImgPromise(imageUrl).then((image) => {\r\n        const {\r\n          canvas,\r\n          context,\r\n        } = createOffScreenContext(imageWidth, imageHeight);\r\n\r\n        context.drawImage(image, 0, 0);\r\n        const imageData = context.getImageData(0, 0, canvas.width, canvas.height);\r\n        const pixels = imageData.data;\r\n        return pixels;\r\n      }).then((originalImagePixels) => {\r\n        if (originalImagePixels && maskSetsArray) {\r\n          // If not in mask, return empty and transparent pixel\r\n          // If in mask, return the original pixel\r\n          const {\r\n            canvas,\r\n            context,\r\n          } = createOffScreenContext(imageWidth, imageHeight);\r\n          const imageData = context.getImageData(0, 0, canvas.width, canvas.height);\r\n          const pixels = imageData.data;\r\n          for (let i = 0; i < pixels.length; i += 4) {\r\n            if (maskSetsArray[i / 4] > 0) {\r\n              pixels[i] = originalImagePixels[i];\r\n              pixels[i + 1] = originalImagePixels[i + 1];\r\n              pixels[i + 2] = originalImagePixels[i + 2];\r\n              pixels[i + 3] = alphaArray[i / 4];\r\n            }\r\n          }\r\n          // put the selected image from first canvas to second canvas\r\n          const { context: secondContext, canvas: secondCanvas } = createOffScreenContext(imageWidth, imageHeight);\r\n          secondContext.putImageData(imageData, 0, 0);\r\n          resolve({\r\n            rawMaskSetsBase64String,\r\n            maskSetsArray,\r\n            alphaArray,\r\n            selectedMasksArray,\r\n            imageUrlWithoutBackground: secondCanvas.toDataURL(),\r\n          });\r\n        } else {\r\n          reject(new Error('Failed to parse result'));\r\n        }\r\n      });\r\n    })\r\n    .catch(() => {\r\n      reject(new Error('Failed to parse result'));\r\n    });\r\n});\r\n\r\nexport function hexToRgb(hex) {\r\n  const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\r\n  return result ? {\r\n    r: parseInt(result[1], 16),\r\n    g: parseInt(result[2], 16),\r\n    b: parseInt(result[3], 16),\r\n  } : null;\r\n}\r\n\r\nexport function getMaskValueAtPointFunc(x, y, imageWidth, segmentationMasks) {\r\n  if (x < 0 || y < 0) {\r\n    return null;\r\n  }\r\n  // Should transform the point to the original point on the image size\r\n  const width = imageWidth;\r\n\r\n  // get index of the mask array\r\n  const index = (parseInt(y, 10) * width) + parseInt(x, 10);\r\n  // get mask value at the index\r\n  return segmentationMasks[index];\r\n}\r\n\r\nexport function createColorBackground(image, imageWidth, imageHeight, color, segmentationMasks, selectedMasks, alphaArray) {\r\n  // If not in mask, return empty and transparent pixel\r\n  // If in mask, return the original pixel\r\n  const { r, g, b } = hexToRgb(color);\r\n  const {\r\n    canvas,\r\n    context,\r\n  } = createOffScreenContext(imageWidth, imageHeight);\r\n\r\n  context.drawImage(image, 0, 0);\r\n  const imageData = context.getImageData(0, 0, canvas.width, canvas.height);\r\n  const pixels = imageData.data;\r\n  for (let i = 0; i < pixels.length; i += 4) {\r\n    if (!selectedMasks.includes(segmentationMasks[i / 4])) {\r\n      pixels[i] = r;\r\n      pixels[i + 1] = g;\r\n      pixels[i + 2] = b;\r\n      pixels[i + 3] = 255;\r\n    } else {\r\n      const alpha = alphaArray[i / 4] / 255;\r\n      const newR = ((1 - alpha) * r) + ((alpha) * pixels[i]);\r\n      const newG = ((1 - alpha) * g) + ((alpha) * pixels[i + 1]);\r\n      const newB = ((1 - alpha) * b) + ((alpha) * pixels[i + 2]);\r\n      pixels[i] = newR;\r\n      pixels[i + 1] = newG;\r\n      pixels[i + 2] = newB;\r\n      pixels[i + 3] = 255;\r\n    }\r\n  }\r\n  // put the selected image from first canvas to second canvas\r\n  const { context: secondContext, canvas: secondCanvas } = createOffScreenContext(imageWidth, imageHeight);\r\n  secondContext.putImageData(imageData, 0, 0);\r\n  return secondCanvas.toDataURL();\r\n}\r\n\r\nexport function createSelectedImageSrc(image, imageWidth, imageHeight, originalImagePixels, segmentationMasks, masks, isAdd, hasSelectedImageSrc) {\r\n  // If not in mask, return empty and transparent pixel\r\n  // If in mask, return the original pixel\r\n  const {\r\n    canvas,\r\n    context,\r\n  } = createOffScreenContext(imageWidth, imageHeight);\r\n\r\n  if (hasSelectedImageSrc) {\r\n    context.drawImage(image, 0, 0);\r\n  }\r\n\r\n  const imageData = context.getImageData(0, 0, canvas.width, canvas.height);\r\n  const pixels = imageData.data;\r\n\r\n  for (let i = 0; i < pixels.length; i += 4) {\r\n    if (masks.includes(segmentationMasks[i / 4])) {\r\n      if (isAdd) {\r\n        pixels[i] = originalImagePixels[i];\r\n        pixels[i + 1] = originalImagePixels[i + 1];\r\n        pixels[i + 2] = originalImagePixels[i + 2];\r\n        pixels[i + 3] = originalImagePixels[i + 3];\r\n      } else {\r\n        pixels[i] = 0;\r\n        pixels[i + 1] = 0;\r\n        pixels[i + 2] = 0;\r\n        pixels[i + 3] = 0;\r\n      }\r\n    }\r\n  }\r\n\r\n  const { context: secondContext, canvas: secondCanvas } = createOffScreenContext(imageWidth, imageHeight);\r\n  secondContext.putImageData(imageData, 0, 0);\r\n\r\n  const dArr = [-1, -1, 0, -1, 1, -1, -1, 0, 1, 0, -1, 1, 0, 1, 1, 1]; // offset array\r\n  const s = 6; // thickness scale\r\n\r\n  context.clearRect(0, 0, canvas.width, canvas.height);\r\n  // draw images at offsets from the array scaled by s\r\n  for (let i = 0; i < dArr.length; i += 2) {\r\n    context.drawImage(secondCanvas, dArr[i] * s, dArr[i + 1] * s);\r\n  }\r\n\r\n  // fill with color\r\n  context.globalCompositeOperation = 'source-in';\r\n  context.fillStyle = '#D1ACFF';\r\n  context.fillRect(0, 0, canvas.width, canvas.height);\r\n\r\n  return ({\r\n    borderImageSrc: canvas.toDataURL(),\r\n    selectedImageSrc: secondCanvas.toDataURL(),\r\n  });\r\n}\r\n\r\nexport function createHighlightedImage(imageWidth, imageHeight, originalImagePixels, segmentationMasks, workingMasks, maskValue) {\r\n  const {\r\n    canvas,\r\n    context,\r\n  } = createOffScreenContext(imageWidth, imageHeight);\r\n\r\n  const imageData = context.getImageData(0, 0, canvas.width, canvas.height);\r\n  const pixels = imageData.data;\r\n\r\n  if (originalImagePixels) {\r\n    for (let i = 0; i < pixels.length; i += 4) {\r\n      if (segmentationMasks[i / 4] === maskValue) {\r\n        if (workingMasks.includes(maskValue)) {\r\n          pixels[i] = (originalImagePixels[i] + 1672) / 9; // X + Y * 8) / 9\r\n          pixels[i + 1] = (originalImagePixels[i + 1] + 1376) / 9;\r\n          pixels[i + 2] = (originalImagePixels[i + 2] + 2040) / 9;\r\n          pixels[i + 3] = originalImagePixels[i + 3];\r\n        } else if (maskValue > 0) {\r\n          pixels[i] = originalImagePixels[i];\r\n          pixels[i + 1] = originalImagePixels[i + 1];\r\n          pixels[i + 2] = originalImagePixels[i + 2];\r\n          pixels[i + 3] = 128;\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  context.putImageData(imageData, 0, 0);\r\n\r\n  return canvas.toDataURL();\r\n}\r\n","export const PlacementQualities = {\r\n  PERFECT: 7,\r\n  EXCELLENT_AND_PERFECT: 6,\r\n  PERFECT_AND_GOOD: 5,\r\n  ONLY_PERFECT: 4,\r\n  EXCELLENT: 3,\r\n  ONLY_EXCELLENT: 2,\r\n  GOOD: 1,\r\n  NONE: 0,\r\n};\r\n\r\n// recently changed wording for each quality label\r\n// perfect -> excellent\r\n// excellent -> good\r\n// good -> fair\r\nexport const PlacementQualityToText = {\r\n  [PlacementQualities.PERFECT]: _TL_('Excellent'),\r\n  [PlacementQualities.EXCELLENT]: _TL_('Good'),\r\n  [PlacementQualities.GOOD]: _TL_('Fair'),\r\n  [PlacementQualities.NONE]: _TL_('Poor'),\r\n  [PlacementQualities.PERFECT_AND_GOOD]: _TL_('Excellent'),\r\n  [PlacementQualities.EXCELLENT_AND_PERFECT]: _TL_('Excellent'),\r\n  [PlacementQualities.ONLY_PERFECT]: _TL_('Excellent'),\r\n  [PlacementQualities.ONLY_EXCELLENT]: _TL_('Good'),\r\n};\r\n\r\nexport const formatFileSize = fileSize => Math.round(fileSize / 1000000);\r\n\r\nexport const getClosestAspectRatio = (width, height) => {\r\n  const inputRatio = width / height;\r\n  const ratios = {\r\n    '16:9': (16 / 9),\r\n    '9:16': (9 / 16),\r\n    '4:3': (4 / 3),\r\n    '1:1': (1 / 1),\r\n    '9:21': (9 / 21),\r\n    '21:9': (21 / 9),\r\n    '3:4': (3 / 4),\r\n  };\r\n  let closestRatio = null;\r\n  let closestDiff = Math.abs(inputRatio - closestRatio);\r\n\r\n  /* eslint-disable no-restricted-syntax */\r\n  for (const [label, ratio] of Object.entries(ratios)) {\r\n    const diff = Math.abs(inputRatio - ratio);\r\n    if (diff < closestDiff) {\r\n      closestDiff = diff;\r\n      closestRatio = label;\r\n    }\r\n  }\r\n  /* eslint-enable no-restricted-syntax */\r\n\r\n  return closestRatio;\r\n};\r\n\r\nexport const formatBrandkitForAPI = (obj) => {\r\n  if (Array.isArray(obj)) {\r\n    return obj.map(formatBrandkitForAPI);\r\n  } else if (obj !== null && typeof obj === 'object') {\r\n    const formattedObj = {};\r\n    Object.keys(obj).forEach((key) => {\r\n      if (key === 'Id') {\r\n        formattedObj.Id = parseInt(obj[key], 10);\r\n      } else if (key === 'SubType') {\r\n        formattedObj.SubType = 'None';\r\n      } else if (obj[key] === null) {\r\n        formattedObj[key] = [];\r\n      } else if (key !== 'Type') {\r\n        formattedObj[key] = formatBrandkitForAPI(obj[key]);\r\n      }\r\n    });\r\n    return formattedObj;\r\n  }\r\n  return obj;\r\n};\r\n","import _ from 'underscore';\r\n\r\nconst errorObjectToString = (err) => {\r\n  const { name, message, stack } = err;\r\n  if (message || stack) {\r\n    return `Error: ${name}, message: ${message}, stack: ${stack}`;\r\n  }\r\n  return JSON.stringify(err) || '(no error message)';\r\n};\r\n\r\nexport const getErrorString = (err) => {\r\n  if (!err) {\r\n    return '';\r\n  }\r\n\r\n  if (_.isString(err)) {\r\n    return err;\r\n  }\r\n\r\n  if (_.isObject(err)) {\r\n    let msg = errorObjectToString(err);\r\n    if (err.originError) {\r\n      msg += `,\\r\\nOrigin ${errorObjectToString(err.originError)}`;\r\n    }\r\n    return msg;\r\n  }\r\n\r\n  return JSON.stringify(err);\r\n};\r\n","import _ from 'underscore';\r\n\r\n// return first truthy result\r\nexport const fetchResultFromProcessors = ({ processors, options = {} } = {}) => {\r\n  for (let i = 0; i < _.size(processors); i += 1) {\r\n    const result = processors[i](options);\r\n\r\n    if (result) {\r\n      return result;\r\n    }\r\n  }\r\n\r\n  return '';\r\n};\r\n","import React from 'react';\r\nimport _ from 'underscore';\r\nimport {\r\n  processImageSizeLimitError,\r\n  processVideoSizeLimitError,\r\n} from './upload-asset-limit-error';\r\nimport { fetchResultFromProcessors } from './processor-util';\r\n\r\nconst errorCodeMessageKeyMapping = {\r\n  InvalidDuration: _TL_('One or more videos failed to upload because their duration is outside the valid range: 6 - 120 seconds.'),\r\n  AssetDataInvalidWidth: _TL_('One or more videos failed to upload because their width is outside the valid range: 120 - 4096 pixels'),\r\n  AssetDataInvalidHeight: _TL_('One or more videos failed to upload because their height is outside the valid range: 120 - 2160 pixels'),\r\n  ImageAIUpScaleFailed: _TL_('One or more images are smaller than the required minimum size (703 x 368).'),\r\n};\r\n\r\nconst processAssetLimitErrors = ({\r\n  codes, aid, logger, i18n,\r\n}) => {\r\n  const imageSizeLimitResult = processImageSizeLimitError({ errorList: codes, aid, logger });\r\n\r\n  if (imageSizeLimitResult) {\r\n    const { limit: imageAssetLimit } = imageSizeLimitResult;\r\n\r\n    return i18n.getString(\r\n      _TL_('One or more images failed to upload because your account has exceeded the {{value}}-image asset limit. Please remove assets and try again.'),\r\n      { value: imageAssetLimit }\r\n    );\r\n  }\r\n\r\n  const videoSizeLimitResult = processVideoSizeLimitError({ errorList: codes, aid, logger });\r\n  if (videoSizeLimitResult) {\r\n    const { limit: videoAssetLimit } = videoSizeLimitResult;\r\n\r\n    return i18n.getString(\r\n      _TL_('One or more videos failed to upload because your account has exceeded the {{value}}-video asset limit. Please remove assets and try again.'),\r\n      { value: videoAssetLimit }\r\n    );\r\n  }\r\n\r\n  return '';\r\n};\r\n\r\nconst processImageErrors = ({ codes, filePickerI18n }) => filePickerI18n.getString(`ImageExperience_Error_${codes[0]}`);\r\n\r\nconst processPredefinedAssetErrors = ({ codes, i18n }) => {\r\n  const mappedKey = errorCodeMessageKeyMapping[codes[0]];\r\n\r\n  return mappedKey ? i18n.getString(mappedKey) : '';\r\n};\r\n\r\nexport const getAssetUploadError = ({\r\n  uploadErrorCodeArr,\r\n  i18n,\r\n  filePickerI18n,\r\n  aid,\r\n  logger,\r\n  disableGenericMessage = false,\r\n} = {}) => {\r\n  if (_.size(uploadErrorCodeArr) > 0) {\r\n    const errorMessage = fetchResultFromProcessors({\r\n      processors: [\r\n        processAssetLimitErrors,\r\n        processImageErrors,\r\n        processPredefinedAssetErrors,\r\n      ],\r\n      options: {\r\n        codes: uploadErrorCodeArr,\r\n        filePickerI18n,\r\n        i18n,\r\n        aid,\r\n        logger,\r\n      },\r\n    });\r\n\r\n    if (disableGenericMessage || errorMessage) {\r\n      return errorMessage;\r\n    }\r\n\r\n    const genericMessage = (\r\n      <span>\r\n        {\r\n          i18n.getString(_TL_('One or more assets failed to upload. Please try again'))\r\n        }\r\n        <a style={{ marginLeft: 5 }} className=\"HelpTopic\" href=\" \" query=\"help:app54863\" role=\"button\">{i18n.getString(_TL_('Learn more about asset guidelines and accepted file types.'))}</a>\r\n      </span>\r\n    );\r\n\r\n    return genericMessage;\r\n  }\r\n\r\n  return '';\r\n};\r\n","/* eslint-disable arrow-body-style */\r\nimport Promise from 'bluebird';\r\nimport _ from 'underscore';\r\nimport { runJobsInParallelWithRateLimit } from '@bingads-webui-universal/parallel-job-with-rate-limit';\r\nimport { parseFileName } from '@bingads-webui-campaign-react/upload-file-picker';\r\n\r\n// if folder creation fails, continue partial upload around failed folder\r\n// mark failing folder with unique id;\r\nexport const INVALID_FOLDER_ID = -9999;\r\n\r\nconst UPLOAD_PARALLEL_RATE_LIMIT = 6;\r\n\r\n/*\r\n* Folder traversal functions\r\n* Upload folder via input button results in an array of File objects\r\n* with property webkitRelativePath that contains path of File relative\r\n* to (and including) the selected folder.\r\n* e.g. if I selected a folder A with subfolder B and file C.jpg is in B\r\n* then B's webkitRelativePath is \"A/B/C.jpg\"\r\n*\r\n* More information can be found here: https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/webkitdirectory\r\n* Some of these property names may be liable to changing as the webkit\r\n* prefix is an artifact of this folder upload feature being originally\r\n* implemented in Chrome and not having been standardized across all\r\n* browsers initially.\r\n*/\r\n\r\n// Will return an array of folders that form the relative path\r\n// e.g. for \"A/B/C.jpg\", returns [\"A\", \"B\"]\r\nconst getRelativeFoldersFromRelativePath = (relativePath) => {\r\n  const pathArr = _.map(relativePath.split('/'), name => name.trim());\r\n\r\n  pathArr.pop();\r\n\r\n  return pathArr;\r\n};\r\n\r\n\r\n// Will return name of the parent folder directly containing the file\r\n// e.g. from file with path \"A/B/C.jpg\", returns \"B\"\r\nexport const getFileFolderName = (file) => {\r\n  const { webkitRelativePath } = file;\r\n  const pathArr = _.map(webkitRelativePath.split('/'), name => name.trim());\r\n\r\n  pathArr.pop();\r\n\r\n  return pathArr.pop();\r\n};\r\n\r\n// Filters out all files in the files array for files with supported\r\n// extension type (not handled by default by browser)\r\nexport const filterFilesByExtensions = ({ files, supportedExtensions }) => {\r\n  const acceptedFiles = [];\r\n\r\n  _.each(files, (file) => {\r\n    const { ext } = parseFileName(file.name);\r\n    if (ext && _.contains(supportedExtensions, ext)) {\r\n      acceptedFiles.push(file);\r\n    }\r\n  });\r\n\r\n  return acceptedFiles;\r\n};\r\n\r\n// For a list of files, will return a map of the folder hierarchy\r\n// where an empty object - {} - indicates that the folder is a leaf\r\n// node\r\n// e.g. for [\"A/B/C.jpg\", \"A/D/E.jpg\", \"A/F.png\"] will return\r\n// { A: { B: { C: {} }, D: { E: {} } } }\r\nexport const createFolderHierarchyMap = (files) => {\r\n  const foldersToCreate = {};\r\n\r\n  _.each(files, ({ webkitRelativePath }) => {\r\n    const folders = getRelativeFoldersFromRelativePath(webkitRelativePath);\r\n    let currFolderMap = foldersToCreate;\r\n\r\n    _.each(folders, (folder) => {\r\n      if (!currFolderMap[folder]) {\r\n        currFolderMap[folder] = {};\r\n      }\r\n      currFolderMap = currFolderMap[folder];\r\n    });\r\n  });\r\n\r\n  return foldersToCreate;\r\n};\r\n\r\nconst createFolderWithErrorHandling = ({\r\n  folderCreationErrors,\r\n  createFolderAsync,\r\n  folderName,\r\n  parentFolderId,\r\n  currentFolderId,\r\n  originalFolderName,\r\n  numberOfAttempts = 1,\r\n}) => {\r\n  return createFolderAsync({\r\n    folderName,\r\n    parentFolderId,\r\n  })\r\n    .catch((e) => {\r\n    // for duplicate folder upload, rename as <original folder>-1\r\n      if (parentFolderId === currentFolderId) {\r\n        const errorCode = _.get(e, ['body', 'value', 0, 'Code'], null);\r\n\r\n        if (errorCode === 'DuplicateEntity') {\r\n          return createFolderWithErrorHandling({\r\n            folderCreationErrors,\r\n            createFolderAsync,\r\n            folderName: `${originalFolderName}-${numberOfAttempts}`,\r\n            parentFolderId,\r\n            currentFolderId,\r\n            originalFolderName,\r\n            numberOfAttempts: numberOfAttempts + 1,\r\n          });\r\n        }\r\n      }\r\n      // allow other folder creation jobs to continue as we allow partial succeed\r\n      folderCreationErrors.push(e);\r\n      return INVALID_FOLDER_ID;\r\n    });\r\n};\r\n\r\nconst createFoldersByHierarchyInternal = ({\r\n  folderMap,\r\n  createFolderAsync,\r\n  creationPromises,\r\n  parentFolderName,\r\n  folderCreationErrors,\r\n  currentFolderId,\r\n}) => {\r\n  const folderNames = _.keys(folderMap);\r\n  if (folderNames.length > 0) {\r\n    _.each(folderNames, (folderName) => {\r\n      const subFoldersMap = folderMap[folderName];\r\n      const parentPromise = parentFolderName ? creationPromises[parentFolderName] : Promise.resolve(currentFolderId);\r\n\r\n      // eslint-disable-next-line no-param-reassign\r\n      creationPromises[folderName] = parentPromise.then((parentFolderId) => {\r\n        // if parent folder failed to be created, skip trying to create child folder\r\n        if (parentFolderId === INVALID_FOLDER_ID) {\r\n          return INVALID_FOLDER_ID;\r\n        }\r\n\r\n        return createFolderWithErrorHandling({\r\n          folderCreationErrors,\r\n          createFolderAsync,\r\n          folderName,\r\n          parentFolderId,\r\n          currentFolderId,\r\n          originalFolderName: folderName,\r\n        });\r\n      });\r\n\r\n      createFoldersByHierarchyInternal({\r\n        folderMap: subFoldersMap,\r\n        createFolderAsync,\r\n        creationPromises,\r\n        parentFolderName: folderName,\r\n        folderCreationErrors,\r\n      });\r\n    });\r\n  }\r\n};\r\n\r\n// For a given folderMap (in the format created by createFolderHierarchyMap)\r\n// Will create folders using the provided method in the correct sequence\r\n// e.g. if for file \"A/B/C.jpg\", createFolderHierarchyMap will generate map\r\n// { A: { B: {} } }, createFoldersByHierarchy will create folders in this order:\r\n// create folder A with parentId = null (null used for root in MT)\r\n// create folder B with parentId = folder A's Id\r\nexport const createFoldersByHierarchy = ({\r\n  folderMap,\r\n  createFolderAsync,\r\n  folderCreationErrors = [],\r\n  currentFolderId,\r\n}) => {\r\n  const creationPromises = {};\r\n\r\n  createFoldersByHierarchyInternal({\r\n    folderMap,\r\n    createFolderAsync,\r\n    creationPromises,\r\n    folderCreationErrors,\r\n    parentFolderName: null,\r\n    currentFolderId,\r\n  });\r\n\r\n  return Promise.all(_.values(creationPromises))\r\n    .then(() => creationPromises);\r\n};\r\n\r\n// Creates a promise which will ensure all assets are uploaded\r\n// in a rate limited manner, in which we will send AddAsset requests\r\n// one by one with a maximum of 6 parallel requests at a time\r\nexport const createRateLimitedAssetUploadPromises = ({\r\n  customizedFilesOptions = [],\r\n  acceptedAssets,\r\n  folderIdPromises,\r\n  validateAssetAsync = () => Promise.resolve(true),\r\n  uploadAssetAsync,\r\n  assetsSkippedUpload = [],\r\n  assetUploadErrors = [],\r\n  readAssetAsync,\r\n}) => {\r\n  const processAssetJobPromises = [];\r\n  const assetUploadJobs = [];\r\n\r\n  _.each(acceptedAssets, (asset, index) => {\r\n    const folderName = getFileFolderName(asset);\r\n    const extraOptions = customizedFilesOptions[index] || {};\r\n\r\n    const processAssetJobPromise = folderIdPromises[folderName].then((folderId) => {\r\n      if (folderId === INVALID_FOLDER_ID) {\r\n        assetsSkippedUpload.push(asset);\r\n        return Promise.resolve();\r\n      }\r\n\r\n      return readAssetAsync(asset, extraOptions)\r\n        .then((dataURL) => {\r\n          const assetUploadJob = () => {\r\n            return validateAssetAsync({\r\n              dataURL,\r\n              ...extraOptions,\r\n            })\r\n              .then((validatedResult) => {\r\n                const isImageUpscaled = _.get(validatedResult, 'isImageUpscaled', false);\r\n                const { nameWithoutExt } = parseFileName(asset.name);\r\n\r\n                return uploadAssetAsync({\r\n                  dataURL,\r\n                  fileObject: asset,\r\n                  nameWithoutExt,\r\n                  folderId,\r\n                  isImageUpscaled,\r\n                  ...extraOptions,\r\n                });\r\n              });\r\n          };\r\n          assetUploadJobs.push(assetUploadJob);\r\n        })\r\n        .catch((e) => {\r\n          assetUploadErrors.push(e);\r\n        });\r\n    });\r\n\r\n    processAssetJobPromises.push(processAssetJobPromise);\r\n  });\r\n\r\n  return Promise.all(processAssetJobPromises).then(() => {\r\n    return runJobsInParallelWithRateLimit({\r\n      jobsToRateLimit: assetUploadJobs,\r\n      maxJobsInParallel: UPLOAD_PARALLEL_RATE_LIMIT,\r\n      handleJobError: e => assetUploadErrors.push(e),\r\n    });\r\n  });\r\n};\r\n","import { fetchResultFromProcessors } from './processor-util';\r\nimport { processFolderSizeLimitError } from './upload-asset-limit-error';\r\nimport { getAssetUploadError } from './upload-asset-error';\r\n\r\nconst processFolderSizeLimitErrors = ({\r\n  folderCreationErrors, aid, logger, i18n,\r\n}) => {\r\n  const folderLimitResult = processFolderSizeLimitError({ errorList: folderCreationErrors, aid, logger });\r\n  if (folderLimitResult) {\r\n    const { limit: folderLimit } = folderLimitResult;\r\n    const warnMessage = _TL_('Failed to create one or more folders because your account has exceeded the {{value}}-folder limit. Please remove folders and try again.');\r\n\r\n    return i18n.getString(warnMessage, { value: folderLimit });\r\n  }\r\n\r\n  return '';\r\n};\r\n\r\nconst processAssetErrors = ({\r\n  assetUploadErrors, i18n, filePickerI18n, aid, logger,\r\n}) => getAssetUploadError({\r\n  uploadErrorCodeArr: assetUploadErrors,\r\n  i18n,\r\n  filePickerI18n,\r\n  aid,\r\n  logger,\r\n  disableGenericMessage: true,\r\n});\r\n\r\nexport const getFolderUploadError = ({\r\n  folderCreationErrors,\r\n  assetUploadErrors,\r\n  i18n,\r\n  filePickerI18n,\r\n  aid,\r\n  logger,\r\n}) => {\r\n  const result = fetchResultFromProcessors({\r\n    processors: [\r\n      processFolderSizeLimitErrors,\r\n      processAssetErrors,\r\n    ],\r\n    options: {\r\n      folderCreationErrors,\r\n      assetUploadErrors,\r\n      i18n,\r\n      filePickerI18n,\r\n      aid,\r\n      logger,\r\n    },\r\n  });\r\n\r\n  if (result) {\r\n    return result;\r\n  }\r\n\r\n  let genericErrorMessage;\r\n  if (folderCreationErrors.length > 0) {\r\n    if (assetUploadErrors.length > 0) {\r\n      genericErrorMessage = _TL_('One or more folders or assets within folders failed to upload.');\r\n    } else {\r\n      genericErrorMessage = _TL_('One or more folders failed to upload.');\r\n    }\r\n  } else {\r\n    genericErrorMessage = _TL_('One or more assets within your folders failed to upload.');\r\n  }\r\n\r\n  return i18n.getString(genericErrorMessage);\r\n};\r\n","import Promise from 'bluebird';\r\n\r\nexport const getTaskPoller = ({\r\n  task, // func returns a promise which resolves to a value { isFinished }\r\n  interval = 30000, // in milli-seconds\r\n}) => {\r\n  let timerId;\r\n  let stopRunning = false;\r\n  let counter = 0;\r\n  let taskPromise = null;\r\n\r\n  const start = () => {\r\n    if (taskPromise) {\r\n      return taskPromise;\r\n    }\r\n\r\n    taskPromise = new Promise((resolve, reject) => {\r\n      // run task immediately once\r\n      counter = 1;\r\n      task().then((result) => {\r\n        const { isFinished } = result || {};\r\n        if (!isFinished && !stopRunning) {\r\n          timerId = setInterval(() => {\r\n            if (!stopRunning) {\r\n              counter += 1;\r\n              task().then(({ isFinished: isDone }) => {\r\n                if (isDone) {\r\n                  clearInterval(timerId);\r\n                  timerId = undefined;\r\n                  resolve(counter);\r\n                }\r\n              }).catch((err) => {\r\n                clearInterval(timerId);\r\n                timerId = undefined;\r\n                reject(err);\r\n              });\r\n            } else {\r\n              if (timerId) {\r\n                clearInterval(timerId);\r\n                timerId = undefined;\r\n              }\r\n              resolve(counter);\r\n            }\r\n          }, interval);\r\n        } else {\r\n          resolve(counter);\r\n        }\r\n      }).catch((err) => {\r\n        reject(err);\r\n      });\r\n    });\r\n\r\n    return taskPromise;\r\n  };\r\n\r\n  const stop = () => {\r\n    stopRunning = true;\r\n    return taskPromise;\r\n  };\r\n\r\n  return { start, stop };\r\n};\r\n","import _ from 'underscore';\r\nimport { useCallback, useReducer } from 'react';\r\n\r\nconst existDup = (arr, newArr, itemKey) => {\r\n  const keys = _.pluck(arr, itemKey);\r\n  const newKeys = _.pluck(newArr, itemKey);\r\n\r\n  return _.intersection(keys, newKeys).length > 0;\r\n};\r\n\r\nconst ACTION_TYPE_SET_FOLDER_DATA = 100;\r\nconst ACTION_TYPE_SET_PERF_TIME_SERIES = 200;\r\nconst ACTION_TYPE_RESET_DATA = 300;\r\n\r\nconst AL_FOLDER_REDUCER_INIT_STATE = {\r\n  folders: null,\r\n  assets: null,\r\n  perfTimeSeriesData: null,\r\n};\r\n\r\n/*\r\n  state:{\r\n    // null - not yet initialized\r\n    // [] - no folders\r\n    folders: [\r\n      {\r\n        folderId: id of folder,\r\n        folderName: name of folder,\r\n        parentFolderId: id of parent folder, if parent is root\r\n        parentHierarchy: [],\r\n        assets: [],\r\n        subfolders: [],\r\n        itemCount: {\r\n          ImageAssetsCount,\r\n          LogoAssetsCount,\r\n          SubFoldersCount,\r\n          TextAssetsCount,\r\n          VideoAssetsCount,\r\n          TotalCount,\r\n        },\r\n        createdTime: time folder was created\r\n        modifiedTime: last time folder was modified\r\n      }\r\n    ],\r\n    assets: [\r\n      {\r\n        id,  // \"1234\"\r\n        name,\r\n        folderAssetType, // \"Image\"\r\n        url,\r\n        originalUrl,\r\n        sourceType, // \"UserUploaded\",\r\n        type, // \"GenericImage\",\r\n        height,\r\n        width,\r\n        originalHeight,\r\n        originalWidth,\r\n        cropSettings,\r\n        cropSettingOnOriginal,\r\n        placementSettings: [\r\n        ],\r\n        createdTime,\r\n        modifiedTime,\r\n\r\n        // !! Performance metrics, new for V4\r\n        usedByCount: 10, // ads count?\r\n        performanceLabel, // \"Best\", \"Good\", \"Low\",\r\n        // # performanceMetrics\r\n        impressions,\r\n        clicks,\r\n        CTR,\r\n        spend,\r\n        // # performanceMetricsChange\r\n        impressionsChange,\r\n        clicksChange,\r\n        CTRChange,\r\n        spendChange,\r\n        // # performanceMetricsChangePercentage\r\n        impressionsChangePercentage,\r\n        clicksChangePercentage,\r\n        CTRChangePercentage,\r\n        spendChangePercentage,\r\n        // # periodPerformanceMetrics\r\n        periodImpressions,\r\n        periodClicks,\r\n        periodCTR,\r\n        periodSpend,\r\n      }\r\n    ],\r\n    perfTimeSeriesData: [ // one entry for each selected metric, at most 2 selected metrics on UI chart currently\r\n      {\r\n        metricName: \"Impressions\",\r\n        uniqueId: 'a guid',\r\n        primaryDataPoints: [\r\n          {\r\n            datetime: \"2023-06-12T00:00:00\",\r\n            value: 400,\r\n          },\r\n          ...\r\n        ],\r\n        comparisonDataPoints: [ // empty if POP is disabled\r\n          {\r\n            datetime: \"2023-06-12T00:00:00\",\r\n            value: 600,\r\n          },\r\n          ...\r\n        ],\r\n      },\r\n    ],\r\n\r\n    // mark where the data are loaded\r\n    pageName: AdsStudioPageName.LibraryPage/AdsStudioPageName.PerfPage/undefined\r\n  }\r\n*/\r\nconst folderDataStateReducer = (state, action) => {\r\n  const { type: actionType, ...actionData } = action;\r\n  switch (actionType) {\r\n    case ACTION_TYPE_SET_FOLDER_DATA:\r\n    {\r\n      const {\r\n        newFolders = [], newAssets = [], newPerfTimeSeries = [], shouldFlush, logger, pageName,\r\n      } = actionData;\r\n\r\n      if (shouldFlush) {\r\n        return {\r\n          ...state, folders: newFolders, assets: newAssets, perfTimeSeriesData: newPerfTimeSeries, pageName,\r\n        };\r\n      }\r\n\r\n      // todo: investigate why there are duliacted folders and assets\r\n      const foundFolderDup = existDup(state.folders, newFolders, 'folderId');\r\n      const foundAssetDup = existDup(state.assets, newAssets, 'id');\r\n      if (foundFolderDup) {\r\n        logger.logTrace('Unexpected duplicate folders found in folderDataStateReducer');\r\n      }\r\n      if (foundAssetDup) {\r\n        logger.logTrace('Unexpected duplicate assets found in folderDataStateReducer');\r\n      }\r\n      if (foundFolderDup || foundAssetDup) {\r\n        // if found duplicate, which should not happen, don't update the state\r\n        return state;\r\n      }\r\n\r\n      // todo: don't update time series data if shouldFlush is false, is that expected? confirm with MT\r\n      return {\r\n        ...state,\r\n        folders: [...(state.folders || []), ...newFolders],\r\n        assets: [...(state.assets || []), ...newAssets],\r\n      };\r\n    }\r\n    case ACTION_TYPE_SET_PERF_TIME_SERIES:\r\n    {\r\n      const { newPerfTimeSeries } = actionData;\r\n      return { ...state, perfTimeSeriesData: newPerfTimeSeries };\r\n    }\r\n    case ACTION_TYPE_RESET_DATA:\r\n    {\r\n      return AL_FOLDER_REDUCER_INIT_STATE;\r\n    }\r\n    default:\r\n      return state;\r\n  }\r\n};\r\n\r\nexport const useDataServiceReducer = (logger, initState = AL_FOLDER_REDUCER_INIT_STATE) => {\r\n  const [folderData, dispatch] = useReducer(folderDataStateReducer, initState);\r\n\r\n  const setFolderData = useCallback(({\r\n    newAssets, newFolders, newPerfTimeSeries,\r\n  }, pageName) => {\r\n    dispatch({\r\n      type: ACTION_TYPE_SET_FOLDER_DATA,\r\n      newAssets,\r\n      newFolders,\r\n      newPerfTimeSeries,\r\n      pageName,\r\n      shouldFlush: true,\r\n      logger,\r\n    });\r\n  }, [logger]);\r\n\r\n  // replace assets only, and keep other data unchanged\r\n  const setAssetsOnly = useCallback((newAssets) => {\r\n    dispatch({\r\n      type: ACTION_TYPE_SET_FOLDER_DATA,\r\n      newAssets,\r\n      newFolders: folderData.folders,\r\n      newPerfTimeSeries: folderData.perfTimeSeriesData,\r\n      pageName: folderData.pageName,\r\n      shouldFlush: true,\r\n      logger,\r\n    });\r\n  }, [folderData.pageName, folderData.folders, folderData.perfTimeSeriesData, logger]);\r\n\r\n  const appendFolderData = useCallback(({ newAssets, newFolders }) => {\r\n    dispatch({\r\n      type: ACTION_TYPE_SET_FOLDER_DATA,\r\n      newAssets,\r\n      newFolders,\r\n      shouldFlush: false,\r\n      logger,\r\n    });\r\n  }, [logger]);\r\n\r\n  const setPerfTimeSeriesData = useCallback(({ newPerfTimeSeries }) => {\r\n    dispatch({\r\n      type: ACTION_TYPE_SET_PERF_TIME_SERIES,\r\n      newPerfTimeSeries,\r\n      logger,\r\n    });\r\n  }, [logger]);\r\n\r\n  const resetFolderData = useCallback(() => {\r\n    dispatch({ type: ACTION_TYPE_RESET_DATA });\r\n  }, []);\r\n\r\n  return {\r\n    folderData,\r\n    setFolderData,\r\n    setAssetsOnly,\r\n    appendFolderData,\r\n    setPerfTimeSeriesData,\r\n    resetFolderData,\r\n  };\r\n};\r\n","import _ from 'underscore';\r\n\r\nexport class AdsStudioErrorBase extends Error {\r\n  constructor({\r\n    message,\r\n    originError,\r\n    errorCode,\r\n    errorProcessor, // use processor to extend the error object with anything needed\r\n    ...rest // additional data passed to processor\r\n  }) {\r\n    super(message);\r\n    this.originError = originError;\r\n    this.errorCode = errorCode || (originError && originError.errorCode) || 'Unknown';\r\n    if (errorProcessor) {\r\n      const params = { message, errorCode, ...rest };\r\n      const info = errorProcessor(this.errorCode, params);\r\n      _.extendOwn(this, info);\r\n    }\r\n  }\r\n}\r\n","import { FolderAssetType } from '../model';\r\n\r\n// use processors to append any info to AdsStudioODataError instance based on errorCode,\r\n// for example:\r\n//    uxMessage: message to show on UI\r\n//    actionable: if use could correct this error\r\n//    getUXMessage(): function to get message shown on UI, but could pass in additiona parameters\r\n//    ...\r\n\r\nexport const renameFolderApiErrorProcessor = (errorCode) => {\r\n  const msgs = {\r\n    InvalidFolderId: {\r\n      uxMessage: _TL_(\"This folder doesn't exist because you may have already deleted it. Please refresh the page to confirm.\"),\r\n      actionable: false,\r\n    },\r\n    DuplicateFolderName: {\r\n      uxMessage: _TL_('This folder name already exists. Please enter another one.'),\r\n      actionable: true,\r\n    },\r\n    InvalidFolderName: {\r\n      uxMessage: _TL_(\"You've entered one or more invalid characters in the fields. Please correct them and try again.\"),\r\n      actionable: true,\r\n    },\r\n    genericError: {\r\n      uxMessage: _TL_(\"Your folder couldn't be renamed. Please refresh the page and try again.\"),\r\n      actionable: false,\r\n    },\r\n  };\r\n\r\n  // actionable:\r\n  //    true - ask user to do correct the error\r\n  //    false - user can't do any action, just show notification\r\n  return msgs[errorCode] || msgs.genericError;\r\n};\r\n\r\nexport const deleteFolderApiErrorProcessor = (errorCode /* {folderId, folderName} */) => {\r\n  const msgs = {\r\n    InvalidFolderId: {\r\n      uxMessage: _TL_(\"This folder doesn't exist because you may have already deleted it. Please refresh the page to confirm.\"),\r\n      ignorable: true,\r\n      shortMsg: _TL_('Error'),\r\n    },\r\n\r\n    FolderHasAssets: {\r\n      uxMessage: _TL_(\"Your folder couldn't be deleted because it contains assets or subfolders. Please remove these and try again.\"),\r\n      shortMsg: _TL_(\"Folder isn't empty\"),\r\n      ignorable: true,\r\n    },\r\n\r\n    genericError: {\r\n      uxMessage: _TL_(\"Your folder couldn't be deleted. Please refresh the page and try again.\"),\r\n      shortMsg: _TL_('Error'),\r\n    },\r\n  };\r\n  msgs.InvalidId = msgs.InvalidFolderId;\r\n  msgs.FolderHasSubFolders = msgs.FolderHasAssets;\r\n\r\n  // actionable:\r\n  //    true - ask user to do correct the error\r\n  //    false - user can't do any action, just show notification\r\n  return msgs[errorCode] || msgs.genericError;\r\n};\r\n\r\nexport const bulkMoveApiErrorProcessor = (errorCode, { folderCount, assetCount }) => {\r\n  const msgs = {\r\n    // DestFolderId is invalid\r\n    InvalidFolderId: {\r\n      getUXMessage: i18n => i18n.getString(\r\n        _TL_(\"({{folderCount}} folders, {{assetCount}} assets)) couldn't be moved because you may have already deleted the folder. Please refresh the page and try a different folder.\"),\r\n        { folderCount, assetCount }\r\n      ),\r\n      actionable: false,\r\n    },\r\n\r\n    genericError: {\r\n      getUXMessage: i18n => i18n.getString(\r\n        _TL_(\"({{folderCount}} folders, {{assetCount}} assets) couldn't be moved. Please refresh the page and try again.\"),\r\n        { folderCount, assetCount }\r\n      ),\r\n    },\r\n  };\r\n\r\n  // actionable:\r\n  //    true - ask user to do correct the error\r\n  //    false - user can't do any action, just show notification\r\n  return msgs[errorCode] || msgs.genericError;\r\n};\r\n\r\n// error for a specific item in the batch response\r\nexport const bulkMoveApiItemErrorProcessor = (errorCode) => {\r\n  const msgs = {\r\n    InvalidFolderId: {\r\n      uxMessage: _TL_(\"This folder doesn't exist because you may have already deleted it. Please refresh the page to confirm.\"),\r\n      shortMsg: _TL_(\"Folder doesn't exist\"),\r\n      availableActions: {},\r\n    },\r\n    AssetIdInvalid: {\r\n      uxMessage: _TL_(\"This asset doesn't exist because you may have already deleted it. Please refresh the page to confirm.\"),\r\n      shortMsg: _TL_(\"Asset doesn't exist\"),\r\n      availableActions: {},\r\n    },\r\n    DuplicateAssetsUnderFolder: {\r\n      uxMessage: _TL_('Your asset already exists in the folder. Please note that you can add the same asset to different folders, but you cannot have duplicate assets in the same folder.'),\r\n      shortMsg: _TL_('Duplicate asset'),\r\n      availableActions: {},\r\n    },\r\n    DuplicateImage: {\r\n      uxMessage: _TL_('Your image already exists in the folder. Please note that you can add the same image to different folders, but you cannot have duplicate images in the same folder.'),\r\n      shortMsg: _TL_('Duplicate image'),\r\n      availableActions: {},\r\n    },\r\n    DuplicateFolderName: {\r\n      uxMessage: _TL_('You cannot have duplicate subfolder names in the same folder. Please rename your subfolder and try again.'),\r\n      shortMsg: _TL_('Duplicate subfolder name'),\r\n      availableActions: {},\r\n    },\r\n    FolderCanNotMoveToTarget: {\r\n      uxMessage: _TL_('You cannot move a folder into itself or one of its subfolders. Please select a different folder and try again.'),\r\n      shortMsg: _TL_('Wrong target folder'),\r\n      availableActions: {},\r\n    },\r\n\r\n    genericError: {\r\n      uxMessage: _TL_(\"Your assets couldn't be moved. Please refresh the page and try again.\"),\r\n      shortMsg: _TL_('Error'),\r\n      availableActions: {},\r\n    },\r\n  };\r\n\r\n  // actionable:\r\n  //    true - ask user to do correct the error\r\n  //    false - user can't do any action, just show notification\r\n  return msgs[errorCode] || msgs.genericError;\r\n};\r\n\r\nexport const deleteAssetApiErrorProcessor = (errorCode, { assetType }) => {\r\n  const msgs = {\r\n    AssetIsUsed: {\r\n      uxMessage: assetType === FolderAssetType.Video\r\n        ? _TL_(\"You can't delete this video because it's being used by other campaigns, ads, or video extensions.\")\r\n        : _TL_(\"You can't delete this image because it's being used by other campaigns, ads, or image extensions.\"),\r\n      availableActions: {\r\n        gotoAds: true,\r\n        // others: true,\r\n      },\r\n    },\r\n    // ImageAdExtensionPilotNotEnabledForCustomer\r\n    // AssetDoesNotBelongToAccount\r\n    // AssetIdInvalid\r\n    // AssetIsAlreadyDeleted\r\n    // CamAssetCannotBeDeleted --Asset of this Type ( CAM ) can not be deleted\r\n    genericError: {\r\n      uxMessage: _TL_('Failed to delete image. Please try again or contact support.'),\r\n      availableActions: {},\r\n    },\r\n  };\r\n  return msgs[errorCode] || msgs.genericError;\r\n};\r\n\r\nexport const createFolderApiErrorProcessor = (errorCode) => {\r\n  const msgs = {\r\n    DuplicateEntity: {\r\n      getUXMessage: i18n => i18n.getString(_TL_('This folder name already exists. Please enter another one.')),\r\n      actionable: true,\r\n    },\r\n    InvalidFolderName: {\r\n      getUXMessage: i18n => i18n.getString(_TL_(\"You've entered one or more invalid characters in the fields. Please correct them and try again.\")),\r\n      actionable: true,\r\n    },\r\n    FolderLimitExceededPerAccount: {\r\n      getUXMessage: (i18n, getFolderLimit) => (i18n.getString(_TL_('Failed to create one or more folders because your account has exceeded the {{value}}-folder limit. Please remove folders and try again.'), getFolderLimit())\r\n      ),\r\n      actionable: false,\r\n    },\r\n    genericError: {\r\n      getUXMessage: i18n => i18n.getString(_TL_('Failed to create folder. Please try again.')),\r\n      actionable: false,\r\n    },\r\n  };\r\n  return msgs[errorCode] || msgs.genericError;\r\n};\r\n\r\n// ## rename asset\r\n// AssetIsNull\r\n// AssetDoesNotBelongToAccount\r\n// AssetIsAlreadyDeleted\r\n\r\n//\r\n// ## bulk delete asset\r\nexport const bulkDeleteAssetsApiItemErrorProcessor = (errorCode, { assetType }) => {\r\n  const msgs = {\r\n    // AssetIdInvalid\r\n    // AssetIsAlreadyDeleted\r\n    CampaignServiceMediaIdInvalid: {\r\n      uxMessage: _TL_(\"This asset doesn't exist because you may have already deleted it. Please refresh the page to confirm.\"),\r\n      shortMsg: _TL_(\"Asset doesn't exist\"),\r\n      availableActions: {},\r\n    },\r\n    // // AssetDoesNotBelongToAccount\r\n    // CampaignServiceMediaNotFoundInAccount: {\r\n    //   uxMessage: _TL_('Asset does not belong to account'),\r\n    //   availableActions: {},\r\n    // },\r\n    // // CamAssetCannotBeDeleted\r\n    // CampaignServiceMediaTypeInvalidForOperation: {\r\n    //   uxMessage: _TL_('Asset of this Type ( CAM ) cannot be deleted'),\r\n    //   availableActions: {},\r\n    // },\r\n    // AssetIsUsed\r\n    CampaignServiceMediaIsAssociated: {\r\n      uxMessage: assetType === FolderAssetType.Video\r\n        ? _TL_(\"You can't delete this video because it's being used by other campaigns, ads, or video extensions. Delete these associations and try again.\")\r\n        : _TL_(\"You can't delete this image because it's being used by other campaigns, ads, or image extensions. Delete these associations and try again.\"),\r\n      shortMsg: _TL_('Asset is currently in use '),\r\n      availableActions: {\r\n        gotoAds: true,\r\n        // others: true,\r\n      },\r\n    },\r\n    // // AccountIdInvalid\r\n    // CampaignServiceInvalidAccountId: {\r\n    //   uxMessage: _TL_('account id is invalid'),\r\n    //   availableActions: {},\r\n    // },\r\n    // // DuplicateId\r\n    // DuplicateId: {\r\n    //   uxMessage: _TL_('There are dulpicate ids from input'),\r\n    //   availableActions: {},\r\n    // },\r\n    genericError: {\r\n      uxMessage: _TL_(\"Your assets couldn't be deleted. Please refresh the page and try again.\"),\r\n      shortMsg: _TL_('Error'),\r\n      availableActions: {},\r\n    },\r\n  };\r\n  return msgs[errorCode] || msgs.genericError;\r\n};\r\n\r\nexport const bulkDeleteAssetsApiErrorProcessor = (errorCode) => {\r\n  const msgs = {\r\n    genericError: {\r\n      uxMessage: _TL_(\"Your assets couldn't be deleted. Please refresh the page and try again.\"),\r\n      shortMsg: _TL_('Error'),\r\n      availableActions: {},\r\n    },\r\n  };\r\n  return msgs[errorCode] || msgs.genericError;\r\n};\r\n\r\nexport const generateImagesWithAIAPIErrorProcessor = (errorCode, params) => {\r\n  const reqCountErr = _TL_(\"Sorry, our servers are busy and we're unable to process your request. We're working to resolve this issue. Please try again later.\");\r\n\r\n  const msgs = {\r\n    GenerateImagesPromptLengthInvalid: {\r\n      uxMessage: _TL_('Your image description is either too long or too short. 256 characters maximum.'),\r\n    },\r\n    GenerateImagesRequestCountLimitExceededPerAccount: {\r\n      uxMessage: reqCountErr,\r\n    },\r\n    GenerateImagesRequestCountLimitExceeded: {\r\n      uxMessage: reqCountErr,\r\n    },\r\n    GenerateImagesPromptContentInvalid: { // when AIGC told MT the input prompt is invalid\r\n      uxMessage: _TL_('Something went wrong with your request and we\\'re unable to process it at this time.'),\r\n    },\r\n\r\n    // use general message for this one\r\n    // GenerateImagesAIGCNoRecommendation: when AIGC failed to create task, failed to generate image, but it does not specify the reason.\r\n\r\n    GenerateImagesAIGCNoRecommendationWithBrand: {\r\n      brandNameDetected: true,\r\n      brandNames: (params && params.errorMessage) || '',\r\n    },\r\n\r\n    genericError: {\r\n      uxMessage: _TL_('We\\'ve encountered an error and failed to generate images.'),\r\n    },\r\n  };\r\n  return msgs[errorCode] || msgs.genericError;\r\n};\r\n\r\nexport const getAIGeneratedImageAPIErrorProcessor = (errorCode) => {\r\n  const msgs = {\r\n    AI_Generation_Failed: {\r\n      shouldRetry: false,\r\n      uxMessage: _TL_('Something went wrong with your request and we\\'re unable to process it at this time. We apologize for the inconvenience. Please try again later.'),\r\n    },\r\n    genericError: {\r\n      shouldRetry: true,\r\n      uxMessage: _TL_('We\\'ve encountered an error and failed to generate images.'),\r\n    },\r\n  };\r\n  return msgs[errorCode] || msgs.genericError;\r\n};\r\n\r\n// todo: handle error codes returned from MT (what error codes are returned from MT?)\r\n// todo: scrub error message text\r\nexport const getRemoveImageBackgroundAPIErrorProcessor = (errorCode) => {\r\n  const msgs = {\r\n    GenerateImagesAIGCInvalidImageSize: {\r\n      uxMessage: _TL_('We’re unable to generate the image because the image size does not meet the minimum required dimensions.'),\r\n    },\r\n    GenerateImagesAIGCInvalidImageContent: {\r\n      uxMessage: _TL_('We’re unable to generate the image because the image you provided may violate our policies and guidelines. To learn more, see '),\r\n      availableActions: {\r\n        gotoDisallowedContent: true,\r\n      },\r\n    },\r\n    GenerateImageAIGCInvalidUserPrompt: {\r\n      uxMessage: _TL_('We’re unable to generate the image because the prompt you provided may violate our policies and guidelines. To learn more, see '),\r\n      availableActions: {\r\n        gotoDisallowedContent: true,\r\n      },\r\n    },\r\n    GenerateImageAIGCInvalidGeneratedImage: {\r\n      uxMessage: _TL_('We’re unable to generate the image because it may violate our policies and guidelines. To learn more, see '),\r\n      availableActions: {\r\n        gotoDisallowedContent: true,\r\n      },\r\n    },\r\n    genericError: {\r\n      shouldRetry: true,\r\n      uxMessage: _TL_('We’ve encountered an error removing the image’s background. Please try again.'),\r\n    },\r\n  };\r\n  return msgs[errorCode] || msgs.genericError;\r\n};\r\n","/* istanbul ignore file */\r\n// ut tests of use-folders are covered in CMUI level\r\n/* eslint-disable arrow-body-style */\r\nimport Promise from 'bluebird';\r\nimport _ from 'underscore';\r\nimport { useCallback, useMemo, useRef, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport {\r\n  ROOT_FOLDER_ID,\r\n  RootFolderName,\r\n  DEFAULT_PAGE_SIZE,\r\n  CSMLSortBy,\r\n  FolderAssetType,\r\n} from '../../model';\r\nimport { civilDateRangeToDebugString } from '../../utils';\r\nimport { useDataServiceReducer } from './folder-reducer';\r\nimport { AdsStudioErrorBase, deleteFolderApiErrorProcessor } from '../../error-handling';\r\n\r\nconst PATH_SEPERATOR = ' > ';\r\n\r\nconst getPathString = (i18n, folderPath) => {\r\n  // remove ROOT section from the string\r\n  let pathString = folderPath.slice(1).map(fp => fp.folderName).join(PATH_SEPERATOR) || '';\r\n  if (pathString) {\r\n    pathString = `${PATH_SEPERATOR}${pathString}`;\r\n  }\r\n  pathString = `${i18n.getString(_TL_('Library'))}${pathString}`;\r\n  return pathString;\r\n};\r\n\r\nexport const getAssetTypeToFetch = ({ filterSettings, defaultAssetType }) => {\r\n  const { assetTypeFilter } = filterSettings || {};\r\n\r\n  return assetTypeFilter || defaultAssetType;\r\n};\r\n\r\nexport const useFolders = ({\r\n  perfMetricDateRange,\r\n  defaultPerfMetricDateRange,\r\n  repository,\r\n  logger,\r\n  assetType: defaultAssetType,\r\n  i18n,\r\n}) => {\r\n  const ROOT_FOLDER = {\r\n    folderId: ROOT_FOLDER_ID,\r\n    folderName: i18n.getString(RootFolderName[defaultAssetType] || _TL_('Library')),\r\n  };\r\n\r\n  const {\r\n    folderData, setFolderData, setAssetsOnly: setAssets, appendFolderData, setPerfTimeSeriesData, resetFolderData,\r\n  } = useDataServiceReducer(logger);\r\n\r\n  const [newFolderId, setNewFolderId] = useState('');\r\n  const totalItemCount = useRef({});\r\n\r\n  // set current folder navigation path\r\n  // ROOT_FOLDER will always be element 0 in the paths folder state\r\n  // when navigating, folders get pushed onto path\r\n  // so top most folder is the current folder\r\n  const [folderPath, setFolderPath] = useState([ROOT_FOLDER]);\r\n  const currentFolder = useMemo(() => folderPath[folderPath.length - 1], [folderPath]);\r\n  const currentFolderId = useMemo(() => currentFolder.folderId, [currentFolder]);\r\n\r\n  const latestRequestTimestamp = useRef(0);\r\n\r\n  /*\r\n    searchTerm,\r\n    minWidth,\r\n    minHeight,\r\n    dateAddedStart,\r\n    dateAddedEnd,\r\n    importSource,\r\n    assetSources,\r\n    assetTypeFilter,\r\n    minVideoDuration,\r\n    maxVideoDuration,\r\n    isGlobalSearch,\r\n    hasPerfData,\r\n    topRated,\r\n  */\r\n  const curFilterSettings = useRef(null);\r\n\r\n  const curSortBy = useRef(CSMLSortBy.MostRecent);\r\n  const curAssetCountToLoadForSubFolders = useRef(1);\r\n  const curFolderAssetTypeToLoad = useRef(defaultAssetType);\r\n  const curIncludeParentHierarchy = useRef(false);\r\n  const curIncludeSubfolders = useRef(true);\r\n  const curPageName = useRef(undefined);\r\n  const curPerfMarker = useRef(undefined);\r\n\r\n  const pendingVideoBlobUploadPromiseTokens = useRef([]);\r\n\r\n  const resetData = useCallback(() => {\r\n    resetFolderData();\r\n    curFilterSettings.current = null;\r\n    curSortBy.current = CSMLSortBy.MostRecent;\r\n    curAssetCountToLoadForSubFolders.current = 1;\r\n    curFolderAssetTypeToLoad.current = defaultAssetType;\r\n    curIncludeParentHierarchy.current = false;\r\n    curIncludeSubfolders.current = true;\r\n    curPageName.current = undefined;\r\n    curPerfMarker.current = undefined;\r\n  }, [defaultAssetType, resetFolderData]);\r\n\r\n  const logTrace = useCallback((message, ...rest) => {\r\n    logger.logTrace(`DataService: ${message}`, ...rest);\r\n  }, [logger]);\r\n\r\n  const loadFolderArgs = useCallback(({\r\n    filterSettings,\r\n    sortBy,\r\n    assetsToLoadForSubfolders,\r\n    includeParentHierarchy,\r\n    count,\r\n  }) => {\r\n    const folderAssetTypeToFetch = getAssetTypeToFetch({\r\n      filterSettings,\r\n      defaultAssetType,\r\n    });\r\n\r\n    return repository.getFolderArgs({\r\n      perfMetricDateRange,\r\n      ...filterSettings,\r\n      sortBy,\r\n      skip: 0,\r\n      count: count || DEFAULT_PAGE_SIZE,\r\n      folderId: currentFolderId,\r\n      assetType: folderAssetTypeToFetch,\r\n      includeAssets: true,\r\n      includeSubfolders: true,\r\n      includeParentHierarchy,\r\n      assetsToLoadForSubfolders,\r\n      isAssetPickerScenario: defaultAssetType !== null,\r\n    });\r\n  }, [defaultAssetType, repository, perfMetricDateRange, currentFolderId]);\r\n\r\n  const loadFolderDataInternal = useCallback(({\r\n    hasDateRange,\r\n    filterSettings,\r\n    sortBy,\r\n    folderId,\r\n    assetsToLoadForSubfolders,\r\n    includeParentHierarchy,\r\n    count,\r\n    includeSubfolders = true,\r\n    pageName,\r\n    perfMarker,\r\n    withBIData = false,\r\n  }) => {\r\n    const requestTimestamp = Date.now();\r\n    const folderAssetTypeToFetch = getAssetTypeToFetch({\r\n      filterSettings,\r\n      defaultAssetType,\r\n    });\r\n    const saveCurrentFilters = () => {\r\n      curSortBy.current = sortBy;\r\n      curFilterSettings.current = filterSettings;\r\n      curFolderAssetTypeToLoad.current = folderAssetTypeToFetch;\r\n      curAssetCountToLoadForSubFolders.current = assetsToLoadForSubfolders;\r\n      curIncludeParentHierarchy.current = includeParentHierarchy;\r\n      curIncludeSubfolders.current = includeSubfolders;\r\n      curPageName.current = pageName;\r\n      curPerfMarker.current = perfMarker;\r\n    };\r\n    return repository.getFolderData({\r\n      perfMetricDateRange: hasDateRange ? perfMetricDateRange : defaultPerfMetricDateRange,\r\n      ...filterSettings,\r\n      sortBy,\r\n      skip: 0,\r\n      count: count || DEFAULT_PAGE_SIZE,\r\n      folderId,\r\n      assetType: folderAssetTypeToFetch,\r\n      includeAssets: true,\r\n      includeSubfolders,\r\n      includeParentHierarchy,\r\n      assetsToLoadForSubfolders,\r\n      isAssetPickerScenario: defaultAssetType !== null,\r\n      withBIData,\r\n      perfMarker,\r\n    }).then((res) => {\r\n      if (requestTimestamp >= latestRequestTimestamp.current) {\r\n        const { folder } = res;\r\n        const newFolders = folder.subfolders || [];\r\n        const newAssets = folder.assets || [];\r\n        const perfTimeSeriesData = folder.perfTimeSeriesData || [];\r\n\r\n        totalItemCount.current = folder.itemCount;\r\n        saveCurrentFilters();\r\n\r\n        setFolderData({ newAssets, newFolders, newPerfTimeSeries: perfTimeSeriesData }, pageName);\r\n\r\n        latestRequestTimestamp.current = requestTimestamp;\r\n\r\n        const {\r\n          searchTerm: searchText, dateAddedStart, dateAddedEnd, ...otherFilters\r\n        } = filterSettings || {};\r\n        logTrace('FolderDataService: loaded assets, folders', {\r\n          ...otherFilters,\r\n          searchText,\r\n          dateAddedDateRange: (dateAddedStart != null && dateAddedEnd != null) ? civilDateRangeToDebugString({ start: dateAddedStart, end: dateAddedEnd }) : undefined,\r\n          sortBy: curSortBy.current,\r\n          skip: 0,\r\n          count: DEFAULT_PAGE_SIZE,\r\n          assetType: curFolderAssetTypeToLoad.current,\r\n          hasDateRange,\r\n        });\r\n      } else {\r\n        logTrace('DataService: load folders and assets through folder service, ignore other requests');\r\n      }\r\n\r\n      return res;\r\n    }).tapCatch(() => {\r\n      if (requestTimestamp > latestRequestTimestamp.current) {\r\n        saveCurrentFilters();\r\n        latestRequestTimestamp.current = requestTimestamp;\r\n      }\r\n    });\r\n  }, [defaultAssetType, repository, perfMetricDateRange, defaultPerfMetricDateRange, setFolderData, logTrace]);\r\n\r\n  const loadFolderData = useCallback(({\r\n    filterSettings,\r\n    sortBy,\r\n    assetsToLoadForSubfolders,\r\n    includeParentHierarchy,\r\n    count,\r\n    includeSubfolders = true,\r\n    pageName,\r\n    perfMarker,\r\n  }) => {\r\n    return loadFolderDataInternal({\r\n      hasDateRange: false,\r\n      filterSettings,\r\n      sortBy,\r\n      folderId: currentFolderId,\r\n      assetsToLoadForSubfolders,\r\n      includeParentHierarchy,\r\n      count,\r\n      includeSubfolders,\r\n      pageName,\r\n      perfMarker,\r\n    });\r\n  }, [loadFolderDataInternal, currentFolderId]);\r\n\r\n  const loadFolderDataInDateRange = useCallback(({\r\n    filterSettings,\r\n    sortBy,\r\n    assetsToLoadForSubfolders,\r\n    includeParentHierarchy,\r\n    count,\r\n    includeSubfolders = true,\r\n    pageName,\r\n    perfMarker,\r\n  }) => loadFolderDataInternal({\r\n    hasDateRange: true,\r\n    filterSettings,\r\n    sortBy,\r\n    folderId: currentFolderId,\r\n    assetsToLoadForSubfolders,\r\n    includeParentHierarchy,\r\n    count,\r\n    includeSubfolders,\r\n    pageName,\r\n    perfMarker,\r\n    withBIData: true,\r\n  }), [loadFolderDataInternal, currentFolderId]);\r\n\r\n  const loadPerfTimeSeriesData = useCallback(({ perfTimeSeriesParams, filterSettings }) => {\r\n    const ret = repository.getPerfTimeSeriesData({\r\n      perfMetricDateRange,\r\n      perfTimeSeriesParams,\r\n      ...(filterSettings || {}),\r\n      folderId: currentFolderId === ROOT_FOLDER_ID ? -1 : currentFolderId,\r\n    }).then((res) => {\r\n      const { perfTimeSeriesData } = res || {};\r\n      setPerfTimeSeriesData({ newPerfTimeSeries: perfTimeSeriesData });\r\n      logTrace('FolderDataService: loaded performance timeseries data');\r\n      return perfTimeSeriesData;\r\n    });\r\n    return ret;\r\n  }, [currentFolderId, logTrace, perfMetricDateRange, repository, setPerfTimeSeriesData]);\r\n\r\n  const loadMoreFolderDataImpl = useCallback(({ hasDateRange, count = DEFAULT_PAGE_SIZE, withBIData = false }) => {\r\n    const requestTimestamp = Date.now();\r\n\r\n    const { folders, assets } = folderData;\r\n\r\n    const skip = (folders ? folders.length : 0) + (assets ? assets.length : 0);\r\n\r\n    // avoid error: Invalid $top, $skip Combination. $skip should be multiple of $top\r\n    // this could happen if additional loadmore request (maybe caused by grid rerender) is sent after all items are aready loaded\r\n    if (totalItemCount.current && skip >= totalItemCount.current.TotalCount) {\r\n      logTrace('skip this request as all items are already loaded.', {\r\n        skip, top: count, totalItemCount: totalItemCount.current.TotalCount, hasDateRange,\r\n      });\r\n      return Promise.resolve({});\r\n    }\r\n    if (count && skip % count) {\r\n      logTrace('$skip is not multiple of $top', {\r\n        skip, top: count, totalItemCount: totalItemCount.current.TotalCount, hasDateRange,\r\n      });\r\n      return Promise.resolve({});\r\n    }\r\n\r\n    return repository.getFolderData({\r\n      perfMetricDateRange: hasDateRange ? perfMetricDateRange : defaultPerfMetricDateRange,\r\n      ...curFilterSettings.current,\r\n      sortBy: curSortBy.current,\r\n      skip,\r\n      folderId: currentFolderId,\r\n      count: count || DEFAULT_PAGE_SIZE,\r\n      assetType: curFolderAssetTypeToLoad.current,\r\n      includeAssets: true,\r\n      includeSubfolders: curIncludeSubfolders.current,\r\n      includeParentHierarchy: curIncludeParentHierarchy.current,\r\n      assetsToLoadForSubfolders: curAssetCountToLoadForSubFolders.current,\r\n      isAssetPickerScenario: defaultAssetType !== null,\r\n      withBIData,\r\n      perfMarker: curPerfMarker.current,\r\n    }).then((res) => {\r\n      if (requestTimestamp >= latestRequestTimestamp.current) {\r\n        const { folder } = res;\r\n        const newFolders = folder.subfolders || [];\r\n        const newAssets = folder.assets || [];\r\n\r\n        latestRequestTimestamp.current = requestTimestamp;\r\n\r\n        logTrace('DataService: loaded more folders and assets through folder service', {\r\n          sortBy: curSortBy.current,\r\n          skip,\r\n          count,\r\n          filterSettings: curFilterSettings.current,\r\n          assetType: curFolderAssetTypeToLoad.current,\r\n          hasDateRange,\r\n        });\r\n\r\n        appendFolderData({ newFolders, newAssets });\r\n      } else {\r\n        logTrace('DataService: load more data, ignore other requests');\r\n      }\r\n\r\n      return res;\r\n    }).tapCatch(() => {\r\n      logger.logError('Failed to load more data');\r\n    });\r\n  }, [folderData, repository, perfMetricDateRange, defaultPerfMetricDateRange, currentFolderId, defaultAssetType, logTrace, appendFolderData, logger]);\r\n\r\n  const loadMoreFolderData = useCallback(({ count = DEFAULT_PAGE_SIZE }) => loadMoreFolderDataImpl({ hasDateRange: false, count }), [loadMoreFolderDataImpl]);\r\n  const loadMoreFolderDataInDateRange = useCallback(({ count = DEFAULT_PAGE_SIZE }) => loadMoreFolderDataImpl({ hasDateRange: true, count, withBIData: true }), [loadMoreFolderDataImpl]);\r\n\r\n  const reloadFolders = useCallback(({ count } = {}) => loadFolderDataInternal({\r\n    hasDateRange: false,\r\n    filterSettings: curFilterSettings.current,\r\n    folderId: currentFolderId,\r\n    sortBy: curSortBy.current,\r\n    assetsToLoadForSubfolders: curAssetCountToLoadForSubFolders.current,\r\n    includeParentHierarchy: curIncludeParentHierarchy.current,\r\n    includeSubfolders: curIncludeSubfolders.current,\r\n    count,\r\n    pageName: curPageName.current,\r\n    perfMarker: curPerfMarker.current,\r\n  }), [loadFolderDataInternal, currentFolderId]);\r\n\r\n  const reloadFoldersInDateRange = useCallback(({ count } = {}) => loadFolderDataInternal({\r\n    hasDateRange: true,\r\n    filterSettings: curFilterSettings.current,\r\n    folderId: currentFolderId,\r\n    sortBy: curSortBy.current,\r\n    assetsToLoadForSubfolders: curAssetCountToLoadForSubFolders.current,\r\n    includeParentHierarchy: curIncludeParentHierarchy.current,\r\n    includeSubfolders: curIncludeSubfolders.current,\r\n    count,\r\n    pageName: curPageName.current,\r\n    perfMarker: curPerfMarker.current,\r\n  }), [loadFolderDataInternal, currentFolderId]);\r\n\r\n  // use method to navigate into a folder that's a child of the current folder\r\n  // i.e. user clicking a folder that's displayed in the folder grid\r\n  const navigateIntoFolder = useCallback(({ id = '', navigateToNewFolder = false }) => {\r\n    let folderToNavigate;\r\n\r\n    const { folders } = folderData;\r\n\r\n    if (navigateToNewFolder && !id && newFolderId) {\r\n      folderToNavigate = _.find(folders, ({ folderId }) => folderId === newFolderId);\r\n    } else if (id) {\r\n      folderToNavigate = _.find(folders, ({ folderId }) => folderId === id);\r\n    }\r\n\r\n    const { parentHierarchy } = folderToNavigate;\r\n    if (parentHierarchy && parentHierarchy.length > 0) {\r\n      setFolderPath([ROOT_FOLDER, ...parentHierarchy]);\r\n    } else {\r\n      setFolderPath(curFolderPath => [\r\n        ...curFolderPath,\r\n        folderToNavigate,\r\n      ]);\r\n    }\r\n    setNewFolderId('');\r\n  }, [ROOT_FOLDER, folderData, newFolderId]);\r\n\r\n  // use method to navigate to a folder in current path\r\n  // i.e. user clicking a parent folder that's displayed in the summary bar\r\n  const navigateToFolderInPath = useCallback(({ id }) => {\r\n    setFolderPath((curFolderPath) => {\r\n      const indexOfFolderInPath = _.findIndex(curFolderPath, ({ folderId }) => folderId === id);\r\n      return curFolderPath.slice(0, indexOfFolderInPath + 1);\r\n    });\r\n    setNewFolderId('');\r\n  }, [setFolderPath]);\r\n\r\n  // use method to navigate into a folder in navigation tree\r\n  // i.e. user clicking a folder in the navigation tree or in recent of home page\r\n  const navigateIntoFolderItem = useCallback(({ folder }) => {\r\n    const { parentHierarchy = [] } = folder;\r\n    setFolderPath([ROOT_FOLDER, ...parentHierarchy]);\r\n  }, [ROOT_FOLDER]);\r\n\r\n  const navigateIntoRootFolder = useCallback(() => {\r\n    setFolderPath([ROOT_FOLDER]);\r\n  }, [ROOT_FOLDER]);\r\n\r\n  const createFolder = useCallback(({ folderName }) => {\r\n    return repository.createFolder({ folderName, parentFolderId: currentFolderId });\r\n  }, [repository, currentFolderId]);\r\n\r\n  const createFolderBulk = useCallback(({ folderName, parentFolderId }) => {\r\n    return repository.createFolder({ folderName, parentFolderId });\r\n  }, [repository]);\r\n\r\n  const deleteEmptyFolder = useCallback(({ folderId, folderName }) => {\r\n    return repository.deleteFolder({ folderId, folderName });\r\n  }, [repository]);\r\n\r\n  const renameFolder = useCallback(({ folderId, newFolderName }) => {\r\n    return repository.renameFolder({ folderId, newFolderName });\r\n  }, [repository]);\r\n\r\n  const uploadImageByUrlToFolder = useCallback(({\r\n    imageUrl,\r\n    folderId,\r\n    sourceType,\r\n  }) => {\r\n    return repository.addUrlImageToFolder({\r\n      imageSrc: imageUrl,\r\n      folderId: folderId || currentFolderId,\r\n      sourceType,\r\n    });\r\n  }, [repository, currentFolderId]);\r\n\r\n  const addImageWithBaseIdToFolder = useCallback(({\r\n    folderId,\r\n    imageSrc,\r\n    metaData,\r\n    baseId,\r\n    sourceType,\r\n  }) => {\r\n    return repository.addImageWithBaseIdToFolder({\r\n      folderId: folderId || currentFolderId,\r\n      imageSrc,\r\n      metaData,\r\n      baseId,\r\n      sourceType,\r\n    });\r\n  }, [currentFolderId, repository]);\r\n\r\n  const uploadVideoToAzureBlob = useCallback(({\r\n    fileObject,\r\n    onProgress,\r\n  }) => {\r\n    const promise = new Promise((resolve, reject) => {\r\n      repository.uploadVideoToAzureBlobWithCancellation({\r\n        fileObject,\r\n        onProgress,\r\n      }).then(({ token, blobName }) => {\r\n        pendingVideoBlobUploadPromiseTokens.current.push(token);\r\n\r\n        token.on({\r\n          onSuccess: () => resolve({ token, blobName }),\r\n          onError: reject,\r\n          onCancel: () => {\r\n            logTrace('DataService: cancel azure upload for video file');\r\n\r\n            reject();\r\n          },\r\n        });\r\n      });\r\n    });\r\n\r\n    return promise;\r\n  }, [logTrace, repository]);\r\n\r\n  const uploadVideoToFolder = useCallback(({\r\n    fileObject,\r\n    updateCurrentProgress,\r\n    name,\r\n    folderId,\r\n    perfMarker,\r\n  }) => {\r\n    let uploadVideoPerfMarker = null;\r\n    if (perfMarker) {\r\n      uploadVideoPerfMarker = perfMarker.createChild('uploadSingleVideo');\r\n      uploadVideoPerfMarker.willInit();\r\n    }\r\n    // blob upload stage: 0.9 progress\r\n    // save blob to MT: 0.1 progress\r\n    const scale = 0.9;\r\n    const progressForBlobUpload = updateCurrentProgress ? (percentage) => {\r\n      return updateCurrentProgress({\r\n        loaded: percentage * scale,\r\n        total: 1,\r\n      });\r\n    } : undefined;\r\n    const progressForSavingBlobToMT = updateCurrentProgress ? (evt) => {\r\n      const { loaded, total } = evt;\r\n\r\n      return updateCurrentProgress({\r\n        loaded: (total * scale) + (loaded * (1 - scale)),\r\n        total,\r\n      });\r\n    } : undefined;\r\n\r\n    return uploadVideoToAzureBlob({\r\n      fileObject,\r\n      onProgress: progressForBlobUpload,\r\n    }).then(({ token, blobName }) => {\r\n      pendingVideoBlobUploadPromiseTokens.current = _.without(pendingVideoBlobUploadPromiseTokens.current, token);\r\n\r\n      return repository.addFolderUploadAsset({\r\n        folderId: folderId || currentFolderId,\r\n        asset: { blobName, name },\r\n        folderAssetType: FolderAssetType.Video,\r\n        inProgress: progressForSavingBlobToMT,\r\n      }).finally(() => {\r\n        if (uploadVideoPerfMarker) {\r\n          uploadVideoPerfMarker.done();\r\n        }\r\n      });\r\n    });\r\n  }, [currentFolderId, repository, uploadVideoToAzureBlob]);\r\n\r\n  const cancelPendingVideoUpload = () => {\r\n    _.each(pendingVideoBlobUploadPromiseTokens.current, (token) => {\r\n      token.cancel();\r\n    });\r\n  };\r\n\r\n  const postVideoByUrl = useCallback(({\r\n    videoUrl,\r\n    name,\r\n    folderId,\r\n  }) => {\r\n    return repository.postVideoByUrl({\r\n      folderId: folderId || currentFolderId,\r\n      videoUrl,\r\n      name,\r\n    });\r\n  }, [currentFolderId, repository]);\r\n\r\n  const uploadImageToFolder = useCallback(({\r\n    imageData,\r\n    updateCurrentProgress,\r\n    imageName,\r\n    folderId,\r\n    supportUpscale,\r\n  }) => {\r\n    return repository.addFolderUploadAsset({\r\n      folderId: folderId || currentFolderId,\r\n      asset: { data: imageData, name: imageName },\r\n      folderAssetType: FolderAssetType.Image,\r\n      inProgress: updateCurrentProgress,\r\n      supportUpscale,\r\n    });\r\n  }, [currentFolderId, repository]);\r\n\r\n  const uploadStockImageToFolder = useCallback(({\r\n    stockImageId,\r\n    folderId,\r\n  }) => {\r\n    return repository.addStockImageToFolder({\r\n      folderId: folderId || currentFolderId,\r\n      stockImageId,\r\n    });\r\n  }, [repository, currentFolderId]);\r\n\r\n  const uploadInvestImageToFolder = useCallback(({\r\n    investImageId,\r\n    imageSrc,\r\n    folderId,\r\n  }) => {\r\n    return repository.addInvestImageToFolder({\r\n      folderId: folderId || currentFolderId,\r\n      investImageId,\r\n      imageSrc,\r\n    });\r\n  }, [repository, currentFolderId]);\r\n\r\n  const uploadInvestVideoToFolder = useCallback(({\r\n    investVideoId,\r\n    videoSrc,\r\n    description,\r\n    folderId,\r\n  }) => {\r\n    return repository.addInvestVideoToFolder({\r\n      folderId: folderId || currentFolderId,\r\n      investVideoId,\r\n      videoSrc,\r\n      description,\r\n    });\r\n  }, [repository, currentFolderId]);\r\n\r\n  const renameAsset = useCallback(({\r\n    assetId,\r\n    folderAssetType,\r\n    name,\r\n  }) => {\r\n    return repository.renameAsset({\r\n      assetId,\r\n      folderAssetType,\r\n      name,\r\n    }).then(() => {\r\n      logTrace('DataService: asset is renamed', { assetId, folderAssetType, newName: name });\r\n\r\n      // update the internal state\r\n      const { assets } = folderData;\r\n      const idx = _.findIndex(assets, asset => asset.id === assetId);\r\n      if (idx >= 0 && assets[idx].name !== name) {\r\n        const newAsset = { ...assets[idx], name };\r\n        const newAssets = [...assets];\r\n        newAssets.splice(idx, 1, newAsset);\r\n        setAssets(newAssets);\r\n      }\r\n    });\r\n  }, [folderData, logTrace, repository, setAssets]);\r\n\r\n  const deleteAsset = useCallback(({\r\n    assetId,\r\n    folderAssetType,\r\n  }) => {\r\n    return repository.deleteAsset({ assetId, folderAssetType })\r\n      .tap(() => {\r\n        logTrace('DataService: asset is deleted', { assetId, folderAssetType });\r\n      });\r\n  }, [repository, logTrace]);\r\n\r\n  // eslint-disable-next-line no-underscore-dangle\r\n  const _batchDeleteAssetsAsync = useCallback(({ assets, parentPath, onItemDeleted }) => {\r\n    return repository.bulkDeleteAssets(assets).then(({ resultSummary }) => {\r\n      const ret = _.map(resultSummary, ({\r\n        err, id: assetId, name: assetName, folderAssetType, url, thumbnailUrl,\r\n      }) => {\r\n        onItemDeleted({\r\n          err, assetId, assetName, path: parentPath, assetType: folderAssetType, thumbnailUrl: thumbnailUrl || url, api: 'bulkdeleteAssetApi', errorCode: err && err.errorCode,\r\n        });\r\n        return {\r\n          err, assetId, assetName, parentPath, folderAssetType,\r\n        };\r\n      });\r\n      return ret;\r\n    }).catch((err) => {\r\n      const ret = _.map(assets, ({\r\n        id: assetId, name: assetName, folderAssetType, url, thumbnailUrl,\r\n      }) => {\r\n        onItemDeleted({\r\n          err, assetId, assetName, path: parentPath, assetType: folderAssetType, thumbnailUrl: thumbnailUrl || url, api: 'bulkdeleteAssetApi', errorCode: err && err.errorCode,\r\n        });\r\n        return {\r\n          err, assetId, assetName, parentPath, folderAssetType,\r\n        };\r\n      });\r\n      return ret;\r\n    });\r\n  }, [repository]);\r\n\r\n  // eslint-disable-next-line no-underscore-dangle\r\n  const _deleteEmptyFolderAsync = useCallback(({\r\n    folderId, folderName, parentPath, onItemDeleted = _.noop,\r\n  }) => {\r\n    return deleteEmptyFolder({ folderId, folderName }).then(() => {\r\n      onItemDeleted({\r\n        folderId, folderName, path: parentPath, api: 'deleteFolderApi',\r\n      });\r\n      return {\r\n        folderId, folderName, parentPath,\r\n      };\r\n    }).catch((err) => {\r\n      onItemDeleted({\r\n        err, folderId, folderName, path: parentPath, api: 'deleteFolderApi', errorCode: err && err.errorCode,\r\n      });\r\n      return {\r\n        err, folderId, folderName, parentPath,\r\n      };\r\n    });\r\n  }, [deleteEmptyFolder]);\r\n\r\n  // MT only support delete empty folder, to delete a folder with assets & subfolders,\r\n  // need to delete its subfolders one by one, and batch delete its assets\r\n  // eslint-disable-next-line no-underscore-dangle\r\n  const _batchDelete = useCallback(({\r\n    folders = [], assets = [], path, onItemDeleted, _deleteFolder,\r\n  }) => {\r\n    const parentPath = path || getPathString(i18n, folderPath);\r\n    const concurrencyCount = 3;\r\n\r\n    return Promise.map(\r\n      folders,\r\n      ({ folderId, folderName, itemCount: ic }) => _deleteFolder({\r\n        folderId, folderName, path: parentPath, totalItemCount: ic.TotalCount, onItemDeleted,\r\n      }),\r\n      { concurrency: concurrencyCount }\r\n    ).then((foldersResult) => {\r\n      return _batchDeleteAssetsAsync({ assets, parentPath, onItemDeleted }).then((assetsResult) => {\r\n        return { folders: foldersResult, assets: assetsResult };\r\n      });\r\n    });\r\n  }, [_batchDeleteAssetsAsync, folderPath, i18n]);\r\n\r\n  const deleteFolder = useCallback(({\r\n    folderId,\r\n    folderName,\r\n    totalItemCount: totalItmCnt, // optional param\r\n    path,\r\n    onItemDeleted,\r\n    skip = 0,\r\n  }) => {\r\n    const parentPath = path || getPathString(i18n, folderPath);\r\n\r\n    // query one page (without any filters) and then delete returned items.\r\n    const loadOnePageAndDeleteAsync = () => {\r\n      const ret = repository.getFolderData({\r\n        folderId, sortBy: curSortBy.current, skip, count: DEFAULT_PAGE_SIZE, includeAssets: true, includeSubfolders: true,\r\n      }).then((res) => {\r\n        const { folder } = res;\r\n        const { subfolders, assets, itemCount: { TotalCount: totalCount } } = folder || {};\r\n\r\n        logTrace('delete folder - loaded data to delete', { folderId, folderName, totalItemCount: totalCount });\r\n\r\n        // folder is empty\r\n        if (totalCount <= 0) {\r\n          return { hasNextPage: false };\r\n        }\r\n\r\n        // folder is not empty, batch deleting\r\n        return _batchDelete({\r\n          folders: subfolders, assets, path: `${parentPath}${PATH_SEPERATOR}${folderName}`, onItemDeleted, _deleteFolder: deleteFolder,\r\n        }).then((results) => {\r\n          // stop if all tasks failed\r\n          let newSkip = skip;\r\n          const successCount = _.filter([...results.folders, ...results.assets], ({ err }) => !err).length;\r\n          if (successCount <= 0) {\r\n            // all failed, skip the page\r\n            newSkip = skip + DEFAULT_PAGE_SIZE;\r\n          }\r\n\r\n          // all items are deleted (some of them may failed)\r\n          return { hasNextPage: totalCount > skip + DEFAULT_PAGE_SIZE, newSkip };\r\n        });\r\n      }).catch((e) => {\r\n        // failed to load data, stop handling this folder\r\n        const err = new AdsStudioErrorBase({ message: 'failed to load data to delete', originError: e, errorProcessor: deleteFolderApiErrorProcessor });\r\n        onItemDeleted({\r\n          e, folderId, folderName, path: parentPath, api: 'getFolderDataApi', errorCode: err && err.errorCode,\r\n        });\r\n\r\n\r\n        return { hasNextPage: undefined, loadDataError: err };\r\n      });\r\n      return ret;\r\n    };\r\n\r\n    // current folder is empty\r\n    if (totalItmCnt <= 0) {\r\n      return _deleteEmptyFolderAsync({\r\n        folderId, folderName, parentPath: path, onItemDeleted,\r\n      });\r\n    }\r\n\r\n    // load subfolders and assets for 'folderId' page by page and then delete them one by one\r\n    return loadOnePageAndDeleteAsync().then(({ hasNextPage, newSkip, loadDataError }) => {\r\n      // continue to load next page and delete it\r\n      if (hasNextPage === true) {\r\n        return deleteFolder({\r\n          folderId, folderName, totalItemCount: totalItmCnt, parentPath, onItemDeleted, skip: newSkip,\r\n        });\r\n      } else if (hasNextPage === false) {\r\n        // try to delete the folder itself\r\n        return _deleteEmptyFolderAsync({\r\n          folderId, folderName, parentPath, onItemDeleted, skip: newSkip,\r\n        });\r\n      }\r\n\r\n      // failed to load data (!!loadDataError), stop handling this folder\r\n      return {\r\n        folderId, folderName, parentPath, err: loadDataError,\r\n      };\r\n    // }).tap((result) => {\r\n    //   console.log('####', result);\r\n    });\r\n  }, [_batchDelete, _deleteEmptyFolderAsync, folderPath, i18n, logTrace, repository]);\r\n\r\n  const batchDelete = useCallback(({\r\n    folders = [], assets = [], path, onItemDeleted = _.noop,\r\n  }) => _batchDelete({\r\n    folders, assets, path, onItemDeleted, _deleteFolder: deleteFolder,\r\n  }), [_batchDelete, deleteFolder]);\r\n\r\n  const batchMove = useCallback(({ destFolderId, folders = [], assets = [] }) => {\r\n    return repository.batchMove({ destFolderId, folders, assets });\r\n  }, [repository]);\r\n\r\n  const folderContext = useMemo(() => ({\r\n    folders: folderData.folders,\r\n    folderPath,\r\n    loadFolderData,\r\n    loadMoreFolderData,\r\n    loadFolderDataInDateRange,\r\n    loadFolderArgs,\r\n    loadMoreFolderDataInDateRange,\r\n    perfTimeSeriesData: folderData.perfTimeSeriesData,\r\n    loadPerfTimeSeriesData,\r\n    navigateIntoFolder,\r\n    navigateToFolderInPath,\r\n    navigateIntoFolderItem,\r\n    navigateIntoRootFolder,\r\n    createFolder,\r\n    deleteFolder,\r\n    renameFolder,\r\n    createFolderBulk,\r\n    currentFolder,\r\n    uploadImageByUrlToFolder,\r\n    currentFolderId,\r\n    uploadVideoToFolder,\r\n    cancelPendingVideoUpload,\r\n    postVideoByUrl,\r\n    uploadImageToFolder,\r\n    uploadStockImageToFolder,\r\n    uploadInvestImageToFolder,\r\n    uploadInvestVideoToFolder,\r\n    reloadFolders,\r\n    reloadFoldersInDateRange,\r\n    totalItemCount,\r\n    assets: folderData.assets,\r\n    setAssets,\r\n    renameAsset,\r\n    deleteAsset,\r\n    batchDelete,\r\n    batchMove,\r\n    addImageWithBaseIdToFolder,\r\n    resetFolderData: resetData,\r\n    dataOwnerPageName: folderData.pageName,\r\n  }), [folderData.folders, folderData.perfTimeSeriesData, folderData.assets, folderData.pageName, folderPath, loadFolderData, loadMoreFolderData, loadFolderDataInDateRange, loadFolderArgs, loadMoreFolderDataInDateRange, loadPerfTimeSeriesData, navigateIntoFolder, navigateToFolderInPath, navigateIntoRootFolder, navigateIntoFolderItem, createFolder, deleteFolder, renameFolder, createFolderBulk, currentFolder, uploadImageByUrlToFolder, currentFolderId, uploadVideoToFolder, postVideoByUrl, uploadImageToFolder, uploadStockImageToFolder, uploadInvestImageToFolder, uploadInvestVideoToFolder, reloadFolders, reloadFoldersInDateRange, setAssets, renameAsset, deleteAsset, batchDelete, batchMove, resetData, addImageWithBaseIdToFolder]);\r\n\r\n  return folderContext;\r\n};\r\n\r\nuseFolders.propTypes = {\r\n  repository: PropTypes.shape({\r\n    getFolders: PropTypes.func.isRequired,\r\n    getImages: PropTypes.func.isRequired,\r\n    createFolder: PropTypes.func.isRequired,\r\n  }).isRequired,\r\n  logger: PropTypes.shape({\r\n    logTrace: PropTypes.func.isRequired,\r\n  }).isRequired,\r\n};\r\n","import { useCallback, useMemo, useRef, useState } from 'react';\r\nimport _ from 'underscore';\r\nimport Promise from 'bluebird';\r\n\r\nexport const useCommonImageRepoMethods = ({\r\n  imageRepository,\r\n  logger,\r\n  loadedImages,\r\n  setLoadedImages,\r\n}) => {\r\n  const latestTimestampRef = useRef(0);\r\n  const [imageCroppingTasks, setImageCroppingTasks] = useState({});\r\n  // used to restart task status poller\r\n  const [croppingTaskUpdated, setCroppingTaskUpdated] = useState(null);\r\n\r\n  const getImageById = useCallback(({ imageId, useCache = true }) => {\r\n    if (useCache) {\r\n      const image = _.find(loadedImages, img => img.id === imageId);\r\n      if (image) {\r\n        return Promise.resolve(image);\r\n      }\r\n    }\r\n    // no local value, request from backend\r\n    return imageRepository.getImage(imageId);\r\n  }, [loadedImages, imageRepository]);\r\n\r\n  const getImageCroppingTaskStatus = useCallback((imageId) => {\r\n    const requestTimestamp = Date.now();\r\n    return imageRepository.getImageCroppingTaskStatus(imageId).then(({ tasks /* totalCount */ }) => {\r\n      // if multipe requests are sent out, ensure to keep the result from the latest request\r\n      if (requestTimestamp > latestTimestampRef.current) {\r\n        // only update if any value is changed\r\n        setImageCroppingTasks((curTasks) => {\r\n          let dirty = false;\r\n          const newTaks = (tasks || []).reduce((prev, tsk = {}) => {\r\n            const curTsk = curTasks && curTasks[tsk.id];\r\n            const newTsk = _.pick(tsk, ['id', 'stage', 'hasError', 'failureMessage', 'isFinished']) || {};\r\n            if (newTsk.isFinished) {\r\n              dirty = dirty || !!curTsk;\r\n              // task is  finsished, remove it from the list\r\n              return prev;\r\n            }\r\n            if (!curTsk || !_.isEqual(curTsk, newTsk)) {\r\n              dirty = true;\r\n            }\r\n            return { ...prev, [newTsk.id]: newTsk };\r\n          }, {});\r\n          dirty = dirty || !_.isEmpty(_.difference(_.keys(curTasks), _.keys(newTaks)));\r\n          if (dirty) {\r\n            return newTaks;\r\n          }\r\n          return curTasks;\r\n        });\r\n        // eslint-disable-next-line no-param-reassign\r\n        latestTimestampRef.current = requestTimestamp;\r\n      }\r\n      const taskCount = _.filter(tasks || [], t => t && !t.isFinished).length;\r\n      return { totalCount: taskCount };\r\n    }).catch((ex) => {\r\n      // log and ignore the error\r\n      logger.logError(`Failed to get image cropping task status. ${JSON.stringify(ex)}`);\r\n    });\r\n  }, [logger, imageRepository, latestTimestampRef]);\r\n\r\n  const renameImage = useCallback(({ assetId: imageId, name }) => {\r\n    const renameLocalImage = (images, setImages) => {\r\n      const idx = _.findIndex(images, img => img.id === imageId);\r\n      if (idx >= 0 && images[idx].name !== name) {\r\n        const newImage = { ...images[idx], name };\r\n        const newImages = [...images];\r\n        newImages.splice(idx, 1, newImage);\r\n        setImages(newImages);\r\n      }\r\n    };\r\n\r\n    return imageRepository.renameImage({ imageId, name })\r\n      .then(() => {\r\n        logger.logTrace('DataService: image is renamed', { imageId, newName: name });\r\n        renameLocalImage(loadedImages, setLoadedImages);\r\n      })\r\n      .tapCatch(() => {\r\n        // logger.logError(err);\r\n      });\r\n  }, [imageRepository, logger, loadedImages, setLoadedImages]);\r\n\r\n  const deleteImage = useCallback(({ assetId: imageId }) => {\r\n    const promise = imageRepository.deleteImage(imageId)\r\n      .tap(() => {\r\n        logger.logTrace('DataService: image is deleted', { imageId });\r\n      })\r\n      .tapCatch(() => {\r\n        // logger.logError();\r\n      });\r\n    return promise;\r\n  }, [logger, imageRepository]);\r\n\r\n  const cropImage = useCallback(({ imageId, cropSettings, placementSettings }) => {\r\n    const ret = imageRepository.cropImage({ imageId, cropSettings, placementSettings }).then(() => {\r\n      // update state to notify the status changes\r\n      setCroppingTaskUpdated({ imageId });\r\n      logger.logTrace('DataService: image is cropping', { imageId });\r\n    });\r\n    return ret;\r\n  }, [logger, imageRepository]);\r\n\r\n  const addCreative = useCallback(({ creativeData, baseId }) => {\r\n    const ret = imageRepository.addCreative({ creativeData, baseId });\r\n    return ret;\r\n  }, [imageRepository]);\r\n\r\n  const returnVal = useMemo(() => ({\r\n    imageCroppingTasks,\r\n    croppingTaskUpdated,\r\n    getImageById,\r\n    getImageCroppingTaskStatus,\r\n    renameImage,\r\n    deleteImage,\r\n    cropImage,\r\n    addCreative,\r\n  }), [\r\n    imageCroppingTasks,\r\n    croppingTaskUpdated,\r\n    getImageById,\r\n    getImageCroppingTaskStatus,\r\n    renameImage,\r\n    deleteImage,\r\n    cropImage,\r\n    addCreative,\r\n  ]);\r\n\r\n  return returnVal;\r\n};\r\n","import { useCallback, useMemo, useRef, useState } from 'react';\r\nimport _ from 'underscore';\r\n\r\nimport { checkVideosIntermediateStatus } from '../../model';\r\n\r\n// below fields will be impacted along with status change\r\nconst VideoChangedFieldsWithStatusUpdate = [\r\n  'thumbnailUrl',\r\n  'url',\r\n  'width',\r\n  'height',\r\n  'durationInMS',\r\n  'status',\r\n];\r\n\r\nexport const useCommonVideoRepoMethods = ({\r\n  repository,\r\n  videoRepository,\r\n  logger,\r\n}) => {\r\n  const latestTimestampRef = useRef(0);\r\n  const [videoUpdated, setVideoUpdated] = useState({}); // sample: { 123: { .. } }\r\n  const getVideoTaskStatus = useCallback((videoTasks) => {\r\n    const requestTimestamp = Date.now();\r\n    const videosToCheck = _.keys(videoTasks);\r\n\r\n    return repository.updateVideoStatusByIds(videosToCheck).then((response) => {\r\n      // if multipe requests are sent out, ensure to keep the result from the latest request\r\n      let notFinishedTaskList = {};\r\n      let newVideoUpdated = {};\r\n      if (requestTimestamp > latestTimestampRef.current) {\r\n        const responseKeys = [];\r\n\r\n        response.forEach((item) => {\r\n          responseKeys.push(item.id);\r\n          newVideoUpdated = {\r\n            ...newVideoUpdated,\r\n            [item.id]: _.pick(item, VideoChangedFieldsWithStatusUpdate),\r\n          };\r\n\r\n          if (item && checkVideosIntermediateStatus(item)) {\r\n            notFinishedTaskList = { ...notFinishedTaskList, [item.id]: item.status };\r\n          }\r\n        });\r\n\r\n        // eslint-disable-next-line no-param-reassign\r\n        latestTimestampRef.current = requestTimestamp;\r\n      }\r\n\r\n      setVideoUpdated(newVideoUpdated);\r\n\r\n      const taskCount = Object.keys(notFinishedTaskList).length;\r\n\r\n      return { totalCount: taskCount };\r\n    }).catch(() => {\r\n      // log and ignore the error\r\n      logger.logError('Failed to get videos task status.');\r\n    });\r\n  }, [logger, repository]);\r\n\r\n  const addVideoCreative = useCallback(({ videoCreative }) => {\r\n    const promise = videoRepository.addVideoCreative({ videoCreative });\r\n    return promise;\r\n  }, [videoRepository]);\r\n\r\n  const getVideo = useCallback(({ id, fetchMetadata }) => {\r\n    const promise = videoRepository.getVideo({ id, fetchMetadata });\r\n    return promise;\r\n  }, [videoRepository]);\r\n\r\n  const returnVal = useMemo(() => ({\r\n    getVideoTaskStatus,\r\n    videoUpdated,\r\n    addVideoCreative,\r\n    getVideo,\r\n  }), [addVideoCreative, getVideo, getVideoTaskStatus, videoUpdated]);\r\n\r\n  return returnVal;\r\n};\r\n","import Promise from 'bluebird';\r\nimport { useCallback } from 'react';\r\nimport { getTaskPoller } from '../task-poller';\r\n\r\nfunction checkError(err) {\r\n  const { errorCode } = err || {};\r\n  return ['GenerateImagesAIGCNoRecommendation', 'AI_Generation_Failed'].includes(errorCode);\r\n}\r\n\r\n// retry promise if it fails within timeout\r\nfunction retryPromise(getPromise, retryCount, start, logger, { timeout = 5000, shouldRetry = () => true }) {\r\n  return getPromise().catch((err) => {\r\n    const now = Date.now();\r\n    const elapsed = now - start;\r\n\r\n    if (retryCount >= 1 && elapsed < timeout && shouldRetry(err)) {\r\n      return retryPromise(getPromise, retryCount - 1, start, logger, { timeout, shouldRetry });\r\n    }\r\n\r\n    logger.logError('Re-tried but failed to generate image by AI');\r\n    return Promise.reject(err);\r\n  });\r\n}\r\n\r\nexport const useAIGeneratedImages = ({\r\n  repository,\r\n  logger,\r\n  pollInterval = 3000,\r\n  maxRetryCount = 3, // max retry count for polling task status\r\n}) => {\r\n  const generateImagesByAI = useCallback(({\r\n    prompt, onProgress, onStartPolling, skipBrandDetection,\r\n  }) => {\r\n    if (!repository) {\r\n      return Promise.reject(new Error());\r\n    }\r\n\r\n    const generateImagesByAIPromise = () => new Promise((resolve, reject) => {\r\n      // start generating task\r\n      repository.generateImagesWithAIAsync(prompt, skipBrandDetection).then((res) => {\r\n        const { taskId } = res || {};\r\n\r\n        if (!taskId && res.brandNameDetected) {\r\n          resolve({\r\n            brandNameDetected: true, brandNames: res.brandNames, prompt, images: [],\r\n          });\r\n          return;\r\n        }\r\n\r\n        // poll task status\r\n        let retryCount = 0;\r\n        const pollStatus = () => repository.getAIGeneratedImageTaskStatus(taskId).then((taskStatus) => {\r\n          // status, progress, requestId, images, isTaskDone, taskId,\r\n          const { isTaskDone, ...rest } = taskStatus || {};\r\n\r\n          // reset retry count if there is successfull poll\r\n          retryCount = 0;\r\n\r\n          // report status\r\n          if (onProgress) {\r\n            onProgress({ ...rest, isTaskDone });\r\n          }\r\n\r\n          if (isTaskDone) {\r\n            resolve({ ...rest, prompt });\r\n          }\r\n\r\n          // stop polling if it's done\r\n          return { isFinished: isTaskDone };\r\n        }).catch((err) => {\r\n          retryCount += 1;\r\n          if (err.shouldRetry === false || retryCount >= maxRetryCount) { // got continuous errors\r\n            reject(err);\r\n            // stop polling if failed maxRetryCount times continuously\r\n            return { isFinished: true };\r\n          }\r\n\r\n          // ignore errors and retry\r\n          logger.logError(`failed to get AI generation task status, retryCount: ${retryCount}, taskId: ${taskId}, prompt: ${prompt}, error: ${err.uxMessage}`);\r\n          return { isFinished: false };\r\n        });\r\n\r\n        // start polling task status\r\n        const taskPoller = getTaskPoller({ task: pollStatus, interval: pollInterval });\r\n        taskPoller.start();\r\n        if (onStartPolling) {\r\n          onStartPolling(taskPoller);\r\n        }\r\n      }).catch((err) => {\r\n        reject(err);\r\n      });\r\n    });\r\n\r\n    const ret = retryPromise(generateImagesByAIPromise, 1, Date.now(), logger, { shouldRetry: checkError, timeout: 10000 });\r\n\r\n    if (logger.monitorPromise) {\r\n      return logger.monitorPromise({ promise: ret, msg: `generateImagesByAI, prompt: ${prompt}`, api: 'generateImagesByAI' });\r\n    }\r\n    return ret;\r\n  }, [logger, maxRetryCount, pollInterval, repository]);\r\n\r\n  return {\r\n    generateImagesByAI,\r\n  };\r\n};\r\n","/* istanbul ignore file */\r\n// ut test has been covered by other hook files\r\n/* eslint-disable arrow-body-style */\r\nimport React, { useCallback, useContext, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { useFolders } from './use-folders';\r\nimport { useCommonImageRepoMethods } from './use-image-repo-methods';\r\nimport { useCommonVideoRepoMethods } from './use-video-repo-methods';\r\nimport { useAIGeneratedImages } from './use-ai-generated-images';\r\nimport { useFolderPathTree } from './use-folder-path-tree';\r\n\r\nconst AssetWithFoldersDataServiceContext = React.createContext({});\r\n\r\nexport const AssetWithFoldersDataServiceProvider = ({\r\n  children, imageRepository, aigcRepository, folderRepository, videoRepository, logger, allowedAssetType, i18n, perfMetricDateRange, defaultPerfMetricDateRange,\r\n}) => {\r\n  const {\r\n    folders,\r\n    folderPath,\r\n    loadFolderData,\r\n    loadMoreFolderData,\r\n    loadFolderDataInDateRange,\r\n    loadFolderArgs,\r\n    loadMoreFolderDataInDateRange,\r\n    perfTimeSeriesData,\r\n    loadPerfTimeSeriesData,\r\n    navigateIntoFolder,\r\n    navigateToFolderInPath,\r\n    navigateIntoFolderItem,\r\n    navigateIntoRootFolder,\r\n    createFolder,\r\n    createFolderBulk,\r\n    deleteFolder,\r\n    renameFolder,\r\n    currentFolder,\r\n    currentFolderId,\r\n    uploadVideoToFolder,\r\n    cancelPendingVideoUpload,\r\n    postVideoByUrl,\r\n    uploadImageByUrlToFolder,\r\n    uploadImageToFolder,\r\n    uploadStockImageToFolder,\r\n    uploadInvestImageToFolder,\r\n    uploadInvestVideoToFolder,\r\n    reloadFolders,\r\n    reloadFoldersInDateRange,\r\n    totalItemCount,\r\n    loadAssetsUnderFolder,\r\n    assets,\r\n    setAssets,\r\n    renameAsset,\r\n    deleteAsset,\r\n    batchDelete,\r\n    batchMove,\r\n    resetFolderData,\r\n    dataOwnerPageName,\r\n    addImageWithBaseIdToFolder,\r\n  } = useFolders({\r\n    repository: folderRepository,\r\n    logger,\r\n    assetType: allowedAssetType,\r\n    i18n,\r\n    perfMetricDateRange,\r\n    defaultPerfMetricDateRange,\r\n  });\r\n\r\n  const {\r\n    imageCroppingTasks,\r\n    croppingTaskUpdated,\r\n    getImageById,\r\n    getImageCroppingTaskStatus,\r\n    cropImage,\r\n    addCreative,\r\n  } = useCommonImageRepoMethods({\r\n    imageRepository,\r\n    logger,\r\n    loadedImages: assets,\r\n    setLoadedImages: setAssets,\r\n  });\r\n\r\n  const {\r\n    generateImagesByAI,\r\n  } = useAIGeneratedImages({ repository: aigcRepository, logger });\r\n\r\n  const {\r\n    getVideoTaskStatus, videoUpdated, addVideoCreative, getVideo,\r\n  } = useCommonVideoRepoMethods({\r\n    repository: folderRepository,\r\n    videoRepository,\r\n    logger,\r\n    i18n,\r\n  });\r\n\r\n  const {\r\n    folderPathTree,\r\n    loadFolderPathTreeItem,\r\n    loadMoreFolderPathTreeItem,\r\n    initializeFolderPathTree,\r\n    reloadFolderPathTreeItem,\r\n  } = useFolderPathTree({ repository: folderRepository, defaultPerfMetricDateRange });\r\n\r\n  const totalAssetCount =\r\n    totalItemCount.current.ImageAssetsCount + totalItemCount.current.VideoAssetsCount;\r\n  const totalSubfoldersCount = totalItemCount.current.SubFoldersCount;\r\n\r\n  const loadDataArgs = useCallback(({\r\n    searchText,\r\n    minImageWidth,\r\n    minImageHeight,\r\n    dateAddedDateRange,\r\n    sortBy,\r\n    importSource,\r\n    assetSources,\r\n    assetsToLoadForSubfolders = 1,\r\n    assetTypeFilter,\r\n    minVideoDuration,\r\n    maxVideoDuration,\r\n    isGlobalSearch = false,\r\n    includeParentHierarchy = false,\r\n    count,\r\n    topRated,\r\n  } = {}) => {\r\n    return loadFolderArgs({\r\n      filterSettings: {\r\n        searchTerm: searchText,\r\n        minWidth: minImageWidth,\r\n        minHeight: minImageHeight,\r\n        dateAddedStart: dateAddedDateRange && dateAddedDateRange.start,\r\n        dateAddedEnd: dateAddedDateRange && dateAddedDateRange.end,\r\n        importSource,\r\n        assetSources,\r\n        assetTypeFilter,\r\n        minVideoDuration,\r\n        maxVideoDuration,\r\n        isGlobalSearch,\r\n        topRated,\r\n      },\r\n      sortBy,\r\n      assetsToLoadForSubfolders,\r\n      includeParentHierarchy,\r\n      count,\r\n    });\r\n  }, [loadFolderArgs]);\r\n\r\n  const loadDataImpl = useCallback(({\r\n    useDateRange,\r\n    searchText,\r\n    minImageWidth,\r\n    minImageHeight,\r\n    dateAddedDateRange,\r\n    sortBy,\r\n    importSource,\r\n    assetSources,\r\n    assetsToLoadForSubfolders = 1,\r\n    assetTypeFilter,\r\n    minVideoDuration,\r\n    maxVideoDuration,\r\n    isGlobalSearch = false,\r\n    includeParentHierarchy = false,\r\n    hasPerfData = false,\r\n    includeSubfolders = true,\r\n    count,\r\n    topRated,\r\n    pageName,\r\n    perfMarker,\r\n  } = {}) => {\r\n    const loadFolderDataFunc = useDateRange ? loadFolderDataInDateRange : loadFolderData;\r\n    return loadFolderDataFunc({\r\n      filterSettings: {\r\n        searchTerm: searchText,\r\n        minWidth: minImageWidth,\r\n        minHeight: minImageHeight,\r\n        dateAddedStart: dateAddedDateRange && dateAddedDateRange.start,\r\n        dateAddedEnd: dateAddedDateRange && dateAddedDateRange.end,\r\n        importSource,\r\n        assetSources,\r\n        assetTypeFilter,\r\n        minVideoDuration,\r\n        maxVideoDuration,\r\n        isGlobalSearch,\r\n        hasPerfData,\r\n        topRated,\r\n      },\r\n      perfMarker,\r\n      sortBy,\r\n      assetsToLoadForSubfolders,\r\n      includeParentHierarchy,\r\n      count,\r\n      includeSubfolders,\r\n      pageName,\r\n    });\r\n  }, [loadFolderData, loadFolderDataInDateRange]);\r\n\r\n  const loadData = useCallback(args => loadDataImpl({ ...args, useDateRange: false }), [loadDataImpl]);\r\n  const loadDataInDateRange = useCallback(args => loadDataImpl({ ...args, useDateRange: true }), [loadDataImpl]);\r\n\r\n  const loadPerfTimeSeriesDataImpl = useCallback((\r\n    perfTimeSeriesParams,\r\n    {\r\n      searchText,\r\n      minImageWidth,\r\n      minImageHeight,\r\n      dateAddedDateRange,\r\n      importSource,\r\n      assetSources,\r\n      // assetTypeFilter,\r\n      minVideoDuration,\r\n      maxVideoDuration,\r\n      isGlobalSearch = false,\r\n      hasPerfData = false,\r\n      topRated,\r\n    } = {}\r\n  ) => {\r\n    return loadPerfTimeSeriesData({\r\n      perfTimeSeriesParams,\r\n      filterSettings: {\r\n        searchTerm: searchText,\r\n        minWidth: minImageWidth,\r\n        minHeight: minImageHeight,\r\n        dateAddedStart: dateAddedDateRange && dateAddedDateRange.start,\r\n        dateAddedEnd: dateAddedDateRange && dateAddedDateRange.end,\r\n        importSource,\r\n        assetSources,\r\n        // assetTypeFilter,\r\n        minVideoDuration,\r\n        maxVideoDuration,\r\n        isGlobalSearch,\r\n        hasPerfData,\r\n        topRated,\r\n      },\r\n    });\r\n  }, [loadPerfTimeSeriesData]);\r\n\r\n  const uploadImageByUrl = useCallback(({ imageUrl, folderId, sourceType }) => {\r\n    return uploadImageByUrlToFolder({ imageUrl, folderId, sourceType }).tap(() => {\r\n      logger.logTrace('DataService: image is uploaded by Url to folder', { sourceType, imageUrl, folderId });\r\n    });\r\n  }, [logger, uploadImageByUrlToFolder]);\r\n\r\n  const uploadImage = useCallback(({\r\n    imageData,\r\n    updateCurrentProgress = null,\r\n    name = '',\r\n    folderId = null,\r\n    supportUpscale,\r\n  }) => {\r\n    return uploadImageToFolder({\r\n      imageData,\r\n      updateCurrentProgress,\r\n      imageName: name,\r\n      folderId,\r\n      supportUpscale,\r\n    }).tap(() => {\r\n      logger.logTrace('DataService: image is uploaded to folder');\r\n    });\r\n  }, [logger, uploadImageToFolder]);\r\n\r\n  const uploadVideo = useCallback(({\r\n    fileObject,\r\n    updateCurrentProgress = null,\r\n    name = '',\r\n    folderId = null,\r\n    perfMarker = null,\r\n  }) => {\r\n    return uploadVideoToFolder({\r\n      fileObject,\r\n      updateCurrentProgress,\r\n      name,\r\n      folderId,\r\n      perfMarker,\r\n    }).tap(() => {\r\n      logger.logTrace('DataService: video is uploaded to folder');\r\n    });\r\n  }, [logger, uploadVideoToFolder]);\r\n\r\n  const uploadVideoByUrl = useCallback(({\r\n    videoUrl,\r\n    name = '',\r\n    folderId = null,\r\n  }) => {\r\n    return postVideoByUrl({\r\n      videoUrl,\r\n      name,\r\n      folderId,\r\n    }).tap(() => {\r\n      logger.logTrace('DataService: video is uploaded by Url to folder');\r\n    });\r\n  }, [logger, postVideoByUrl]);\r\n\r\n  const uploadStockImage = useCallback(({ stockImageId, folderId }) => {\r\n    return uploadStockImageToFolder({ stockImageId, folderId }).tap(() => {\r\n      logger.logTrace('DataService: stock image is uploaded to folder');\r\n    });\r\n  }, [logger, uploadStockImageToFolder]);\r\n\r\n  const uploadInvestImage = useCallback(({ investImageId, imageSrc, folderId }) => {\r\n    return uploadInvestImageToFolder({ investImageId, imageSrc, folderId }).tap(() => {\r\n      logger.logTrace('DataService: invest image is uploaded to folder');\r\n    });\r\n  }, [logger, uploadInvestImageToFolder]);\r\n\r\n  const uploadInvestVideo = useCallback(({\r\n    investVideoId, videoSrc, description, folderId,\r\n  }) => {\r\n    return uploadInvestVideoToFolder({\r\n      investVideoId, videoSrc, description, folderId,\r\n    }).tap(() => {\r\n      logger.logTrace('DataService: invest video is uploaded to folder');\r\n    });\r\n  }, [logger, uploadInvestVideoToFolder]);\r\n\r\n  const contextVal = useMemo(\r\n    () => ({\r\n      assets,\r\n      totalAssetCount,\r\n      totalSubfoldersCount,\r\n      // load first page, with filters and sortby\r\n      loadData,\r\n      loadDataArgs,\r\n      loadDataInDateRange,\r\n      // reload images with previous filters\r\n      reloadData: reloadFolders,\r\n      reloadDataInDataRange: reloadFoldersInDateRange,\r\n      // load more, with previous filters/sort\r\n      loadMoreData: loadMoreFolderData,\r\n      loadMoreDataInDateRange: loadMoreFolderDataInDateRange,\r\n      getImageById, // if it's not cached, send a request (deep linking)\r\n      perfTimeSeriesData,\r\n      loadPerfTimeSeriesData: loadPerfTimeSeriesDataImpl,\r\n\r\n      // get image cropping tasks status\r\n      imageCroppingTasks,\r\n      getImageCroppingTaskStatus,\r\n      croppingTaskUpdated,\r\n\r\n      // get video tasks status\r\n      getVideoTaskStatus,\r\n      videoUpdated,\r\n      addVideoCreative,\r\n      getVideo,\r\n\r\n      renameAsset,\r\n      deleteAsset,\r\n      cropImage,\r\n      uploadVideo,\r\n      cancelPendingVideoUpload,\r\n      uploadVideoByUrl,\r\n      uploadImage,\r\n      uploadImageByUrl,\r\n      addCreative,\r\n      folders,\r\n      folderPath,\r\n      navigateIntoFolder,\r\n      navigateToFolderInPath,\r\n      navigateIntoFolderItem,\r\n      navigateIntoRootFolder,\r\n      createFolder,\r\n      createFolderBulk,\r\n      deleteFolder,\r\n      renameFolder,\r\n      currentFolder,\r\n      currentFolderId,\r\n      loadAssetsUnderFolder,\r\n      uploadStockImage,\r\n      uploadInvestImage,\r\n      uploadInvestVideo,\r\n      reloadFolders,\r\n      batchDelete,\r\n      batchMove,\r\n      resetFolderData,\r\n      dataOwnerPageName,\r\n      generateImagesByAI,\r\n      addImageWithBaseIdToFolder,\r\n\r\n      folderPathTree,\r\n      loadFolderPathTreeItem,\r\n      loadMoreFolderPathTreeItem,\r\n      initializeFolderPathTree,\r\n      reloadFolderPathTreeItem,\r\n    }),\r\n    [assets, totalAssetCount, totalSubfoldersCount, loadData, loadDataArgs, loadDataInDateRange, reloadFolders, reloadFoldersInDateRange, loadMoreFolderData, loadMoreFolderDataInDateRange, getImageById, perfTimeSeriesData, loadPerfTimeSeriesDataImpl, imageCroppingTasks, getImageCroppingTaskStatus, croppingTaskUpdated, getVideoTaskStatus, videoUpdated, addVideoCreative, getVideo, renameAsset, deleteAsset, cropImage, uploadVideo, cancelPendingVideoUpload, uploadVideoByUrl, uploadImage, uploadImageByUrl, addCreative, folders, folderPath, navigateIntoFolder, navigateToFolderInPath, navigateIntoFolderItem, navigateIntoRootFolder, createFolder, createFolderBulk, deleteFolder, renameFolder, currentFolder, currentFolderId, loadAssetsUnderFolder, uploadStockImage, uploadInvestImage, uploadInvestVideo, batchDelete, batchMove, resetFolderData, dataOwnerPageName, generateImagesByAI, folderPathTree, loadFolderPathTreeItem, loadMoreFolderPathTreeItem, initializeFolderPathTree, reloadFolderPathTreeItem, addImageWithBaseIdToFolder]\r\n  );\r\n\r\n  return (\r\n    <AssetWithFoldersDataServiceContext.Provider value={contextVal}>\r\n      {children}\r\n    </AssetWithFoldersDataServiceContext.Provider>\r\n  );\r\n};\r\n\r\nAssetWithFoldersDataServiceProvider.propTypes = {\r\n  children: PropTypes.node.isRequired,\r\n  imageRepository: PropTypes.shape({\r\n    getImage: PropTypes.func,\r\n    getImageCroppingTaskStatus: PropTypes.func,\r\n    renameImage: PropTypes.func,\r\n    deleteImage: PropTypes.func,\r\n    updateCropSettings: 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  aigcRepository: PropTypes.shape({}),\r\n  folderRepository: PropTypes.shape({}).isRequired,\r\n  videoRepository: PropTypes.shape({}).isRequired,\r\n  allowedAssetType: PropTypes.string,\r\n  i18n: PropTypes.shape({}).isRequired,\r\n  perfMetricDateRange: PropTypes.shape({}),\r\n  defaultPerfMetricDateRange: PropTypes.shape({}),\r\n};\r\n\r\nAssetWithFoldersDataServiceProvider.defaultProps = {\r\n  aigcRepository: null,\r\n  allowedAssetType: null,\r\n  perfMetricDateRange: null,\r\n  defaultPerfMetricDateRange: null,\r\n};\r\n\r\nexport const useAsssetWithFoldersDataService = () => useContext(AssetWithFoldersDataServiceContext);\r\n","import { useState, useCallback } from 'react';\r\nimport { Promise } from 'bluebird';\r\n\r\nimport { CSMLSortBy, DEFAULT_PAGE_SIZE, ROOT_FOLDER_ID } from '../../model';\r\n\r\n/**\r\n * floderPathTree:\r\n *   [{\r\n *    folderId,\r\n *    folderName,\r\n *    subFolders: [{}] // recursive\r\n *    subFoldersCount,\r\n * }]\r\n *\r\n */\r\n\r\nexport const useFolderPathTree = ({ repository, defaultPerfMetricDateRange }) => {\r\n  const [folderPathTree, setFolderPathTree] = useState([]);\r\n\r\n  const updateFolderPathTree = useCallback((currentFolderPathTree, folderIdArr, subFoldersArr, totalSubfoldersCount = [], reload = false) => {\r\n    const recursiveUpdate = items => items.map((item) => {\r\n      if (folderIdArr.includes(item.folderId)) {\r\n        const index = folderIdArr.indexOf(item.folderId);\r\n        if (reload) {\r\n          return {\r\n            ...item,\r\n            subFolders: subFoldersArr[index],\r\n            subFoldersCount: totalSubfoldersCount[index],\r\n          };\r\n        }\r\n        const newSubFloders = [...item.subFolders, ...subFoldersArr[index]];\r\n        return {\r\n          ...item,\r\n          subFolders: newSubFloders,\r\n        };\r\n      }\r\n      return {\r\n        ...item,\r\n        subFolders: item.subFolders.length > 0 ? recursiveUpdate(item.subFolders) : item.subFolders,\r\n      };\r\n    });\r\n\r\n    return recursiveUpdate(currentFolderPathTree);\r\n  }, []);\r\n\r\n  const loadFolderPathTreeItemImp = useCallback(({\r\n    folderId,\r\n    skip,\r\n  // eslint-disable-next-line arrow-body-style\r\n  }) => {\r\n    return repository.getFolderData({\r\n      perfMetricDateRange: defaultPerfMetricDateRange,\r\n      sortBy: CSMLSortBy.ImageName,\r\n      skip: skip || 0,\r\n      count: DEFAULT_PAGE_SIZE,\r\n      folderId,\r\n      includeAssets: false,\r\n      includeSubfolders: true,\r\n      includeParentHierarchy: true,\r\n      assetsToLoadForSubfolders: false,\r\n      isAssetPickerScenario: false,\r\n      withBIData: false,\r\n    }).then((res) => {\r\n      const { folder } = res;\r\n      const newFolders = (folder.subfolders || []).map(subFolder => ({\r\n        folderId: subFolder.folderId,\r\n        folderName: subFolder.folderName,\r\n        subFolders: [],\r\n        subFoldersCount: subFolder.itemCount.SubFoldersCount,\r\n        parentHierarchy: subFolder.parentHierarchy,\r\n      }));\r\n      const totalSubfoldersCount = folder.itemCount.SubFoldersCount || 0;\r\n      return {\r\n        subFolders: newFolders,\r\n        totalSubfoldersCount,\r\n      };\r\n    });\r\n  }, [defaultPerfMetricDateRange, repository]);\r\n\r\n  const initializeFolderPathTree = useCallback(() => loadFolderPathTreeItemImp({\r\n    folderId: ROOT_FOLDER_ID,\r\n  }).then(({\r\n    subFolders,\r\n    totalSubfoldersCount,\r\n  }) => {\r\n    setFolderPathTree([{\r\n      folderId: ROOT_FOLDER_ID,\r\n      subFolders,\r\n      subFoldersCount: totalSubfoldersCount,\r\n      folderName: 'Root',\r\n      parentHierarchy: [],\r\n    }]);\r\n  }), [loadFolderPathTreeItemImp]);\r\n\r\n  const loadFolderPathTreeItem = useCallback(folderId => loadFolderPathTreeItemImp({\r\n    folderId,\r\n  }).then(({\r\n    subFolders,\r\n  }) => {\r\n    setFolderPathTree(currentFolderPathTree => updateFolderPathTree(currentFolderPathTree, [folderId], [subFolders]));\r\n  }), [loadFolderPathTreeItemImp, updateFolderPathTree]);\r\n\r\n  const loadMoreFolderPathTreeItem = useCallback((folderId, currentFolderCount) => loadFolderPathTreeItemImp({\r\n    folderId,\r\n    skip: currentFolderCount,\r\n  }).then(({\r\n    subFolders,\r\n  }) => {\r\n    setFolderPathTree(currentFolderPathTree => updateFolderPathTree(currentFolderPathTree, [folderId], [subFolders]));\r\n  }), [loadFolderPathTreeItemImp, updateFolderPathTree]);\r\n\r\n  const reloadFolderPathTreeItem = useCallback(folderIdArr => Promise.all(folderIdArr.map(folderId => loadFolderPathTreeItemImp({\r\n    folderId,\r\n  }).then(({\r\n    subFolders,\r\n    totalSubfoldersCount,\r\n  }) => ({\r\n    subFolders, totalSubfoldersCount,\r\n  })))).then((result) => {\r\n    const subFoldersArr = result.map(({ subFolders }) => subFolders);\r\n    const totalSubfoldersCountArr = result.map(({ totalSubfoldersCount }) => totalSubfoldersCount);\r\n    setFolderPathTree(currentFolderPathTree => updateFolderPathTree(currentFolderPathTree, folderIdArr, subFoldersArr, totalSubfoldersCountArr, true));\r\n  }), [loadFolderPathTreeItemImp, updateFolderPathTree]);\r\n\r\n  return {\r\n    folderPathTree,\r\n    loadFolderPathTreeItem,\r\n    loadMoreFolderPathTreeItem,\r\n    initializeFolderPathTree,\r\n    reloadFolderPathTreeItem,\r\n  };\r\n};\r\n","/* istanbul ignore file */\r\n// ut test has been covered by other hook files\r\nimport React from 'react';\r\nimport hoistNonReactStatics from 'hoist-non-react-statics';\r\nimport _ from 'underscore';\r\n\r\nimport {\r\n  AssetWithFoldersDataServiceProvider,\r\n  useAsssetWithFoldersDataService,\r\n} from './asset-with-folders-data-service';\r\n\r\nexport const useAdsStudioServices = useAsssetWithFoldersDataService;\r\n\r\nexport const withAdsStudioServicesConsumer = (Comp, pickedPropNames) => {\r\n  const CompWithService = (props) => {\r\n    const dataService = useAdsStudioServices();\r\n    // explicitly pick these props to keep pages' props clean\r\n    let pickedProps = props;\r\n    if (pickedPropNames) {\r\n      pickedProps = _.pick(props, pickedPropNames);\r\n    }\r\n    return (<Comp dataService={dataService} {...pickedProps} />);\r\n  };\r\n\r\n  hoistNonReactStatics(CompWithService, Comp);\r\n\r\n  return CompWithService;\r\n};\r\n\r\nexport { AssetWithFoldersDataServiceProvider };\r\nexport { useFolders, getAssetTypeToFetch } from './use-folders';\r\nexport { useAIGeneratedImages } from './use-ai-generated-images';\r\nexport { useFolderPathTree } from './use-folder-path-tree';\r\n\r\n// todo: copilot depends on serverContext, should be move to cmui-shell package\r\n// export { withCopilotDataServiceLoaded } from './copilot-data-service';\r\n","/*\r\n  // an AssetWindow is a window of assets, which is a subset of the assets in a repository\r\n  // use this to keep track of the loading status of each window\r\n  // usually, each call to repository.loadAssets will load a window of assets\r\n  type AssetWindow = {\r\n    windowIndex: number,\r\n    windowSize: number,\r\n    //  status: string,\r\n    ... // any other properties as needed, which will be passed to the repository\r\n  }\r\n*/\r\n\r\n//\r\nexport const WindowStatus = {\r\n  loading: 'loading',\r\n  loaded: 'loaded',\r\n  error: 'error',\r\n};\r\n","import _ from 'underscore';\r\n\r\nimport { WindowStatus } from './asset-window';\r\n\r\n// -1 means the total count is unknown (maybe infinite), so the windows count is unknown too\r\nconst INDETERMINATE = -1; // indeterminate\r\n// -2 means the total count is not set yet\r\nconst UNSET = -2;\r\n\r\nconst MAX_ITEM_COUNT = 0x7FFFFFFF;\r\n\r\n// the loading windows manager is used to keep track which pages are loading/loaded or not loaded yet\r\nexport class AssetsWindowManager {\r\n  constructor(windowSize) {\r\n    this.windowSize = windowSize;\r\n  }\r\n\r\n  resetWindows() {\r\n    this.assetWindows = []; // array of WindowStatus\r\n    this.totalAssetCount = UNSET;\r\n    this.windowsCount = UNSET;\r\n  }\r\n\r\n  setTotalItemCount(totalAssetCount) {\r\n    if (this.totalAssetCount !== UNSET) {\r\n      return;\r\n    }\r\n    this.totalAssetCount = totalAssetCount >= 0 ? totalAssetCount : INDETERMINATE;\r\n    this.windowsCount = totalAssetCount >= 0 && this.windowSize > 0 ? Math.ceil(totalAssetCount / this.windowSize) : INDETERMINATE;\r\n  }\r\n\r\n  // is any window loading?\r\n  get isLoading() {\r\n    const ret = _.some(this.assetWindows, w => w === WindowStatus.loading);\r\n    return ret;\r\n  }\r\n\r\n  // all windows are loaded?\r\n  get isCompleted() {\r\n    // if the total count is not set, it means the loading is not started yet\r\n    if (this.totalAssetCount === UNSET) {\r\n      return false;\r\n    }\r\n\r\n    // if the total count is indeterminate, it will never be completed\r\n    if (this.totalAssetCount === INDETERMINATE || this.windowsCount === INDETERMINATE) {\r\n      return false;\r\n    }\r\n\r\n    // check status of all windows\r\n    for (let i = 0; i < this.windowsCount; i += 1) {\r\n      if (!this.assetWindows[i] || this.assetWindows[i] !== WindowStatus.loaded) {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  getTotalAssetCount() {\r\n    if (this.totalAssetCount === UNSET || this.totalAssetCount === INDETERMINATE) {\r\n      return MAX_ITEM_COUNT;\r\n    }\r\n    return this.totalAssetCount || 0;\r\n  }\r\n\r\n  // return AssetWindow object, which contains the windowIndex of the next window to load\r\n  // and if all windows are loaded, it will return -1\r\n  getNextUnloadedWindow() {\r\n    // the initial page load, item count is returned with the initial page data\r\n    if (this.totalAssetCount === UNSET) {\r\n      this.assetWindows = [WindowStatus.loading];\r\n      return { windowIndex: 0, windowSize: this.windowSize };\r\n    }\r\n\r\n    // find the first unloaded window\r\n    let windowIndex = -1;\r\n    const length = this.windowsCount >= 0 ? this.windowsCount : this.assetWindows.length;\r\n    for (let i = 0; i < length; i += 1) {\r\n      // for error windows, retry them\r\n      if (!this.assetWindows[i] || this.assetWindows[i] === WindowStatus.error) {\r\n        this.assetWindows[i] = WindowStatus.loading;\r\n        windowIndex = i;\r\n        break;\r\n      }\r\n    }\r\n\r\n    if (windowIndex !== -1) {\r\n      return { windowIndex, windowSize: this.windowSize };\r\n    }\r\n\r\n    // it's maybe a infinite list\r\n    if (this.totalAssetCount === INDETERMINATE) {\r\n      // add a new loading window\r\n      this.assetWindows.push(WindowStatus.loading);\r\n      return { windowIndex: this.assetWindows.length - 1, windowSize: this.windowSize };\r\n    }\r\n\r\n    // no more windows to load\r\n    return { windowIndex: -1, windowSize: this.windowSize };\r\n  }\r\n\r\n  // paremeter is the window object and status to set\r\n  setWindowStatus({ windowIndex }, status) {\r\n    this.assetWindows[windowIndex] = status;\r\n  }\r\n}\r\n\r\n// compose multiple AssetsWindowManager for multiple sources\r\nexport class SequenceAssetsWindowManager {\r\n  // sourceNames is an array of source names, like ['assetlibrary', 'stock']\r\n  constructor(windowSize, sourceNames) {\r\n    this.windowSize = windowSize;\r\n    this.sourceNames = sourceNames;\r\n    this.winMgrList = _.map(sourceNames, (sourceName) => {\r\n      const mgr = new AssetsWindowManager(windowSize);\r\n      mgr.sourceName = sourceName;\r\n      return mgr;\r\n    });\r\n  }\r\n\r\n  resetWindows() {\r\n    _.each(this.winMgrList, (mgr) => {\r\n      mgr.resetWindows();\r\n    });\r\n  }\r\n\r\n  setTotalItemCount(totalAssetCount, winObj) {\r\n    const { sourceName } = winObj;\r\n    const mgr = _.find(this.winMgrList, { sourceName });\r\n    if (mgr) {\r\n      mgr.setTotalItemCount(totalAssetCount);\r\n    }\r\n  }\r\n\r\n  get isLoading() {\r\n    const ret = _.some(this.winMgrList, mgr => mgr.isLoading);\r\n    return ret;\r\n  }\r\n\r\n  get isCompleted() {\r\n    const ret = _.every(this.winMgrList, mgr => mgr.isCompleted);\r\n    return ret;\r\n  }\r\n\r\n  getTotalAssetCount() {\r\n    let count = 0;\r\n    for (let i = 0; i < this.winMgrList.length; i += 1) {\r\n      const cnt = this.winMgrList[i].totalAssetCount;\r\n      if (cnt === INDETERMINATE || cnt === UNSET) {\r\n        return MAX_ITEM_COUNT;\r\n      }\r\n      count += cnt || 0;\r\n    }\r\n    return count;\r\n  }\r\n\r\n  getNextUnloadedWindow() {\r\n    // find the first incomplete window\r\n    const winMgr = _.find(this.winMgrList, mgr => !mgr.isCompleted);\r\n    if (winMgr) {\r\n      const { windowIndex } = winMgr.getNextUnloadedWindow();\r\n      //\r\n      let indexOffset = 0; // sum of previous windows' totalAssetCount\r\n      for (let i = 0; i < this.winMgrList.length; i += 1) {\r\n        if (this.winMgrList[i] === winMgr) {\r\n          break;\r\n        }\r\n        indexOffset += this.winMgrList[i].totalAssetCount;\r\n      }\r\n      // append sourceName to the window object\r\n      return {\r\n        windowIndex,\r\n        windowSize: this.windowSize,\r\n        sourceName: winMgr.sourceName,\r\n        indexOffset, // sum of previous windows' totalAssetCount\r\n      };\r\n    }\r\n    return { windowIndex: -1, windowSize: this.windowSize };\r\n  }\r\n\r\n  setWindowStatus(winObj, status) {\r\n    const { sourceName } = winObj;\r\n    const mgr = _.find(this.winMgrList, { sourceName });\r\n    if (mgr) {\r\n      mgr.setWindowStatus(winObj, status);\r\n    }\r\n  }\r\n\r\n  getAssetCountBySource() {\r\n    const ret = {};\r\n    _.each(this.winMgrList, (mgr) => {\r\n      ret[mgr.sourceName] = mgr.totalAssetCount;\r\n    });\r\n    return ret;\r\n  }\r\n}\r\n","import _ from 'underscore';\r\n\r\nexport const AssetsReducerActionType = {\r\n  SetAssetsData: 'ACTION_TYPE_SET_ASSETS_DATA',\r\n  AddAssetsData: 'ACTION_TYPE_ADD_ASSETS_DATA',\r\n  ResetAssetsData: 'ACTION_TYPE_RESET_ASSETS_DATA',\r\n  RenameAssetData: 'ACTION_TYPE_RENAME_ASSET_DATA',\r\n};\r\n\r\nexport const AssetsReducerActions = {\r\n  setAssetsData: ({\r\n    assets, ...rest\r\n  }) => ({\r\n    actionType: AssetsReducerActionType.SetAssetsData,\r\n    assets,\r\n    ...rest,\r\n  }),\r\n\r\n  addAssetsData: ({\r\n    assets, windowIndex, windowSize, ...rest\r\n  }) => ({\r\n    actionType: AssetsReducerActionType.AddAssetsData,\r\n    assets,\r\n    pageIndex: windowIndex,\r\n    pageSize: windowSize,\r\n    ...rest,\r\n  }),\r\n\r\n  resetAssetData: () => ({\r\n    actionType: AssetsReducerActionType.ResetAssetsData,\r\n  }),\r\n\r\n  renameAssetData: ({\r\n    assetId, name,\r\n  }) => ({\r\n    actionType: AssetsReducerActionType.RenameAssetData,\r\n    assetId,\r\n    name,\r\n  }),\r\n};\r\n\r\nexport const InitialReducerState = {\r\n  assets: [],\r\n};\r\n\r\nexport const defaultReducer = (state, action) => {\r\n  const { actionType, ...actionData } = action || {};\r\n  switch (actionType) {\r\n    case AssetsReducerActionType.SetAssetsData:\r\n    {\r\n      const { assets, ...rest } = actionData;\r\n      const newAssets = [...assets];\r\n      return { ...state, ...rest, assets: newAssets };\r\n    }\r\n\r\n    case AssetsReducerActionType.AddAssetsData:\r\n    {\r\n      const {\r\n        assets, pageIndex, pageSize, ...rest\r\n      } = actionData;\r\n      const newAssets = [...state.assets];\r\n      const startIdx = pageIndex * pageSize;\r\n      _.forEach(assets, (asset, idx) => {\r\n        newAssets[startIdx + idx] = asset;\r\n      });\r\n      return { ...state, ...rest, assets: newAssets };\r\n    }\r\n\r\n    case AssetsReducerActionType.ResetAssetsData:\r\n      return InitialReducerState;\r\n\r\n    case AssetsReducerActionType.RenameAssetData:\r\n    {\r\n      const { assetId, name } = actionData;\r\n      const idx = _.findIndex(state.assets, asset => asset.id === assetId);\r\n      if (idx >= 0 && state.assets[idx].name !== name) {\r\n        const newAsset = { ...state.assets[idx], name };\r\n        const newAssets = [...state.assets];\r\n        newAssets.splice(idx, 1, newAsset);\r\n        return { ...state, assets: newAssets };\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// used with SequenceAssetsWindowManager, which has sourceName and indexOffset in the window object\r\nexport const sequenceWindowReducer = (state, action) => {\r\n  const { actionType, ...actionData } = action || {};\r\n  switch (actionType) {\r\n    case AssetsReducerActionType.AddAssetsData:\r\n    {\r\n      const {\r\n        assets, pageIndex, pageSize, indexOffset = 0, ...rest // sourceName,\r\n      } = actionData;\r\n      const newAssets = [...state.assets];\r\n      const startIdx = indexOffset + (pageIndex * pageSize);\r\n      _.forEach(assets, (asset, idx) => {\r\n        newAssets[startIdx + idx] = asset;\r\n      });\r\n      return { ...state, ...rest, assets: newAssets };\r\n    }\r\n\r\n    default:\r\n      return defaultReducer(state, action);\r\n  }\r\n};\r\n","import Promise from 'bluebird';\r\nimport { useCallback, useReducer, useRef } from 'react';\r\n\r\nimport { WindowStatus } from './asset-window';\r\nimport { AssetsWindowManager } from './assets-window-manager';\r\nimport { AssetsReducerActions } from './assets-reducer-base';\r\n\r\n/*\r\n  @reducer\r\n  reducer function, support actions defined in AssetsReducerActions, and its state structure is transparent to this hook\r\n\r\n  @reducerInitialArg\r\n  initial state for reducer\r\n\r\n  @repository\r\n  repository object with following methods:\r\n    - loadAssets: (...filters, ...params) => Promise<{ assets, totalItemCount }>\r\n        filters : a filter object, which will be cached in this hook, and it's internal data is transparent to this hook\r\n        params  : additional parameters for loading assets, which will be passed to loadAssets\r\n                  it contains at least windowIndex and windowSize\r\n      both filters and params will be passed to repository without any modification\r\n */\r\nexport const useAssetsServiceBase = ({\r\n  reducer,\r\n  reducerInitialArg,\r\n  repository,\r\n  pageSize,\r\n  assetWindowManager,\r\n}) => {\r\n  const filtersRef = useRef(null);\r\n  const loadingWindowManagerRef = useRef(assetWindowManager || new AssetsWindowManager(pageSize));\r\n\r\n  const [assetState, dispatch] = useReducer(reducer, reducerInitialArg || null);\r\n\r\n  const uploadImage = useCallback(({\r\n    imageData,\r\n    updateCurrentProgress = null,\r\n    name = '',\r\n    folderId = null,\r\n    supportUpscale,\r\n  }) => repository.uploadImageToFolder({\r\n    imageData,\r\n    updateCurrentProgress,\r\n    imageName: name,\r\n    folderId,\r\n    supportUpscale,\r\n  }), [repository]);\r\n\r\n  /**\r\n   * Load assets\r\n   * @param {Object} filters\r\n   * @param {Object} params\r\n   * @returns {Promise}\r\n   */\r\n  const loadAssets = useCallback((filters, ...params) => {\r\n    // reset loading status\r\n    loadingWindowManagerRef.current.resetWindows();\r\n    const winObj = loadingWindowManagerRef.current.getNextUnloadedWindow();\r\n\r\n    // keep filter reference to use in loadMoreAssets\r\n    filtersRef.current = filters;\r\n\r\n    const ret = repository.loadAssets({\r\n      ...filters,\r\n      ...params,\r\n      ...winObj,\r\n    }).then(({ assets, totalItemCount, ...rest }) => {\r\n      // update loading status\r\n      loadingWindowManagerRef.current.setTotalItemCount(totalItemCount, winObj);\r\n      loadingWindowManagerRef.current.setWindowStatus(winObj, WindowStatus.loaded);\r\n      // save assets to reducer state\r\n      dispatch(AssetsReducerActions.setAssetsData({ assets, ...rest }));\r\n    }).catch((error) => {\r\n      // upload loading status\r\n      loadingWindowManagerRef.current.setWindowStatus(winObj, WindowStatus.error);\r\n      throw error;\r\n    });\r\n\r\n    return ret;\r\n  }, [repository]);\r\n\r\n  /**\r\n   * Load more assets\r\n   * @param {Object} params\r\n   * @returns {Promise}\r\n   */\r\n  const loadMoreAssets = useCallback((params) => {\r\n    const winObj = loadingWindowManagerRef.current.getNextUnloadedWindow();\r\n\r\n    // no more window to load\r\n    if (winObj.windowIndex < 0) {\r\n      return Promise.resolve({ noMoreData: true });\r\n    }\r\n\r\n    const ret = repository.loadAssets({\r\n      ...filtersRef.current,\r\n      ...params,\r\n      ...winObj,\r\n    }).then(({ assets, totalItemCount, ...rest }) => {\r\n      loadingWindowManagerRef.current.setTotalItemCount(totalItemCount, winObj);\r\n      loadingWindowManagerRef.current.setWindowStatus(winObj, WindowStatus.loaded);\r\n      // save assets to reducer state\r\n      dispatch(AssetsReducerActions.addAssetsData({\r\n        assets, ...winObj, ...rest,\r\n      }));\r\n    }).catch((error) => {\r\n      // upload loading status\r\n      loadingWindowManagerRef.current.setWindowStatus(winObj, WindowStatus.error);\r\n      throw error;\r\n    });\r\n\r\n    return ret;\r\n  }, [repository]);\r\n\r\n  /**\r\n   * Reload assets\r\n   * @param {Object} params\r\n   * @returns {Promise}\r\n   */\r\n  const reloadAssets = useCallback((params) => {\r\n    const ret = loadAssets(filtersRef.current, params);\r\n    return ret;\r\n  }, [loadAssets]);\r\n\r\n  /**\r\n   * Reset assets data\r\n   */\r\n  const resetAssetsData = useCallback(() => {\r\n    dispatch(AssetsReducerActions.resetAssetData());\r\n  }, []);\r\n\r\n  /**\r\n   * Rename asset\r\n   */\r\n  const renameAsset = useCallback(({\r\n    assetId,\r\n    folderAssetType,\r\n    name,\r\n  }) => {\r\n    const ret = repository.renameAsset({\r\n      assetId,\r\n      folderAssetType,\r\n      name,\r\n    }).then(() => {\r\n      dispatch(AssetsReducerActions.renameAssetData({\r\n        assetId,\r\n        name,\r\n      }));\r\n    });\r\n    return ret;\r\n  }, [repository]);\r\n\r\n  return {\r\n    ...assetState,\r\n    uploadImage,\r\n    loadAssets,\r\n    loadMoreAssets,\r\n    reloadAssets,\r\n    resetAssetsData,\r\n    renameAsset,\r\n    //\r\n    totalAssetCount: loadingWindowManagerRef.current.getTotalAssetCount(),\r\n    isLoading: loadingWindowManagerRef.current.isLoading,\r\n    isCompleted: loadingWindowManagerRef.current.isCompleted,\r\n\r\n    // for debug/logging only\r\n    // loadingWindowManagerRef,\r\n    // filtersRef,\r\n  };\r\n};\r\n","import { useRef } from 'react';\r\n\r\nimport { DEFAULT_PAGE_SIZE } from '../../model';\r\n\r\nimport { useAssetsServiceBase } from './base/use-assets-service-base';\r\nimport { InitialReducerState, defaultReducer, sequenceWindowReducer } from './base/assets-reducer-base';\r\nimport { SequenceAssetsWindowManager } from './base/assets-window-manager';\r\n\r\nexport const useBasicAssetsService = ({ repository, pageSize = DEFAULT_PAGE_SIZE }) => {\r\n  const service = useAssetsServiceBase({\r\n    reducer: defaultReducer,\r\n    reducerInitialArg: InitialReducerState,\r\n    repository,\r\n    pageSize,\r\n  });\r\n\r\n  return service;\r\n};\r\n\r\nexport const useMultiSourceAssetsService = ({ repository, pageSize = DEFAULT_PAGE_SIZE, dataSourceNames }) => {\r\n  const assetWindowManagerRef = useRef(new SequenceAssetsWindowManager(pageSize, dataSourceNames));\r\n  const service = useAssetsServiceBase({\r\n    reducer: sequenceWindowReducer,\r\n    reducerInitialArg: InitialReducerState,\r\n    repository,\r\n    pageSize,\r\n    assetWindowManager: assetWindowManagerRef.current,\r\n  });\r\n\r\n  return {\r\n    ...service,\r\n    getAssetCountBySource: () => assetWindowManagerRef.current.getAssetCountBySource(),\r\n  };\r\n};\r\n","/* eslint-disable arrow-body-style */\r\nimport { useCallback, useState } from 'react';\r\nimport { Promise } from 'bluebird';\r\nimport { get } from 'underscore';\r\nimport { CSMLAssetSource } from '../../model';\r\n\r\nexport const useEditImageService = ({\r\n  repository,\r\n  logger,\r\n}) => {\r\n  const [imagesWithFilter, setImagesWithFilter] = useState([]);\r\n  const [imagesWithFilterAndBlur, setImagesWithFilterAndBlur] = useState([]);\r\n\r\n  const getImagesWithFilter = useCallback((imageUrl) => {\r\n    return repository.generateImageWithSmartEffect({\r\n      imageUrl,\r\n      smartEffects: [{\r\n        smartEffectName: 'design_ideas',\r\n        smartEffectOptions: {},\r\n      }],\r\n    }).then((res = []) => {\r\n      const filterRes = res.map(filter => ({\r\n        filter: filter.Effect,\r\n        url: filter.Resource,\r\n      }));\r\n      filterRes.unshift({\r\n        url: imageUrl,\r\n        filter: 'None',\r\n      });\r\n      setImagesWithFilter(filterRes);\r\n      logger.logTrace('edit image services: get image filters successfully');\r\n      return filterRes;\r\n    }).catch((err) => {\r\n      logger.logError('edit image services: get image filters failed', err);\r\n      return [];\r\n    });\r\n  }, [logger, repository]);\r\n\r\n  const getImagesWithFilterAndBlurImp = useCallback((imageUrl, blurLevel) => {\r\n    return repository.generateImageWithSmartEffect({\r\n      imageUrl,\r\n      smartEffects: [{\r\n        smartEffectName: 'bg_blur',\r\n        smartEffectOptions: blurLevel ? {\r\n          ManualBgBlurLevel: blurLevel,\r\n        } : {},\r\n      },\r\n      {\r\n        smartEffectName: 'design_ideas',\r\n        smartEffectOptions: {},\r\n      },\r\n      ],\r\n    }).then((assets = []) => {\r\n      return assets;\r\n    });\r\n  }, [repository]);\r\n\r\n  const getOriginalImageWithBlur = useCallback((imageUrl, blurLevel) => {\r\n    return repository.generateImageWithSmartEffect({\r\n      imageUrl,\r\n      smartEffects: [{\r\n        smartEffectName: 'bg_blur',\r\n        smartEffectOptions: blurLevel ? {\r\n          ManualBgBlurLevel: blurLevel,\r\n        } : {},\r\n      }],\r\n    }).then((assets = []) => {\r\n      return assets;\r\n    });\r\n  }, [repository]);\r\n\r\n  const getImagesWithFilterAndBlur = useCallback((imageUrl, blurLevel) => {\r\n    return Promise.all([getOriginalImageWithBlur(imageUrl, blurLevel), getImagesWithFilterAndBlurImp(imageUrl, blurLevel)]).then(([originalImageWithBlurRes, imagesWithFilterAndBlurRes]) => {\r\n      const res = [...originalImageWithBlurRes, ...imagesWithFilterAndBlurRes];\r\n      const imagesWithFilterAndBlurInner = res.map((asset) => {\r\n        const filter = get(asset, 'Effect', '');\r\n        const url = get(asset, 'Resource', '');\r\n        return {\r\n          filter,\r\n          blur: blurLevel,\r\n          url,\r\n        };\r\n      });\r\n      setImagesWithFilterAndBlur(imagesWithFilterAndBlurInner);\r\n      logger.logTrace('edit image services: get image filters and blur successfully');\r\n      return imagesWithFilterAndBlurInner;\r\n    });\r\n  }, [getImagesWithFilterAndBlurImp, getOriginalImageWithBlur, logger]);\r\n\r\n  const removeImageBackground = useCallback((imageUrl) => {\r\n    return repository.removeImageBackground(imageUrl);\r\n  }, [repository]);\r\n\r\n  const generateImageBackground = useCallback(({\r\n    prompt,\r\n    imageUrl,\r\n    maskSetsBase64,\r\n    selectedMasks,\r\n    outputImageWidth,\r\n    outputImageHeight,\r\n  }) => {\r\n    return repository.generateImageBackground({\r\n      prompt,\r\n      imageUrl,\r\n      maskSetsBase64,\r\n      selectedMasks,\r\n      outputImageWidth,\r\n      outputImageHeight,\r\n    }).then((res) => {\r\n      const { imageUrl: newImageUrl } = res || {};\r\n      logger.logTrace('edit image services: generate image background successfully', { generatedUrl: newImageUrl, prompt });\r\n      return res;\r\n    });\r\n  }, [logger, repository]);\r\n\r\n  const getImageSegmentations = useCallback((imageUrl) => {\r\n    return repository.getImageSegmentations(imageUrl).then((res) => {\r\n      logger.logTrace('edit image services: get image segmentations successfully', { originalUrl: imageUrl });\r\n      return res;\r\n    });\r\n  }, [logger, repository]);\r\n\r\n  // Save function for background change generated image\r\n  const saveImageCopy = useCallback(({\r\n    image,\r\n    folderId = null,\r\n  }) => {\r\n    const imageUrl = image.url;\r\n    return repository.saveImageCopy({\r\n      imageUrl,\r\n      folderId,\r\n      sourceType: CSMLAssetSource.BackgroundChangeGenerated,\r\n    }).then((res) => {\r\n      logger.logTrace('edit image services: image is saved as copy', { imageUrl, folderId });\r\n      return res;\r\n    });\r\n  }, [logger, repository]);\r\n\r\n  const saveImage = useCallback(({\r\n    id,\r\n    type,\r\n    url,\r\n  }) => {\r\n    return repository.saveImage({\r\n      imageUrl: url,\r\n      imageId: id,\r\n      type,\r\n    }).then((res) => {\r\n      logger.logTrace('edit image services: image is saved directly', { url, id });\r\n      return res;\r\n    });\r\n  }, [logger, repository]);\r\n\r\n  const cropImage = useCallback(({ imageId, cropSettings, placementSettings }) => {\r\n    return repository.cropImage({ imageId, cropSettings, placementSettings }).then(() => {\r\n      logger.logTrace('edit image services: image is cropping', { imageId });\r\n    });\r\n  }, [logger, repository]);\r\n\r\n  const getImageById = useCallback(({ imageId, isImageFittingEnabled }) => {\r\n    return repository.getImageById({ imageId, isImageFittingEnabled }).then((res) => {\r\n      logger.logTrace('edit image services: get image by id', { imageId });\r\n      return res;\r\n    });\r\n  }, [logger, repository]);\r\n\r\n  const uploadImageToFolder = useCallback(({\r\n    imageData,\r\n    folderId = null,\r\n  }) => {\r\n    return repository.uploadImageToFolder({\r\n      imageData,\r\n      folderId,\r\n    });\r\n  }, [repository]);\r\n\r\n  const saveImageWithBaseId = useCallback(({\r\n    image,\r\n    baseId,\r\n    folderId = null,\r\n  }) => {\r\n    return repository.saveImageWithBaseId({ image, baseId, folderId });\r\n  }, [repository]);\r\n\r\n  const uploadStockImage = useCallback(({ stockImageId, folderId }) => {\r\n    return repository.uploadStockImageToFolder({ stockImageId, folderId }).tap(() => {\r\n      logger.logTrace('edit image services: stock image is uploaded to folder', { stockImageId, folderId });\r\n    });\r\n  }, [logger, repository]);\r\n\r\n  const moveImageToFolder = useCallback(({\r\n    image,\r\n    destFolderId,\r\n  }) => {\r\n    return repository.moveImageToFolder({\r\n      image,\r\n      destFolderId,\r\n    });\r\n  }, [repository]);\r\n\r\n  const imageFit = useCallback(({\r\n    imageUrl,\r\n    placements,\r\n    skipOutpainting,\r\n  }) => {\r\n    return repository.imageFit({\r\n      imageUrl,\r\n      placements,\r\n      skipOutpainting,\r\n    });\r\n  }, [repository]);\r\n\r\n  const addImageWithBaseIdToFolder = useCallback(({\r\n    imageSrc, baseId, folderId, metaData,\r\n  }) => {\r\n    return repository.addImageWithBaseIdToFolder({\r\n      imageSrc,\r\n      baseId,\r\n      folderId,\r\n      metaData,\r\n    });\r\n  }, [repository]);\r\n\r\n  return {\r\n    getImagesWithFilter,\r\n    getImagesWithFilterAndBlur,\r\n    imagesWithFilter,\r\n    imagesWithFilterAndBlur,\r\n    removeImageBackground,\r\n    generateImageBackground,\r\n    getImageSegmentations,\r\n    saveImage,\r\n    saveImageCopy,\r\n    cropImage,\r\n    getImageById,\r\n    uploadImageToFolder,\r\n    saveImageWithBaseId,\r\n    uploadStockImage,\r\n    moveImageToFolder,\r\n    imageFit,\r\n    addImageWithBaseIdToFolder,\r\n  };\r\n};\r\n","import { useCallback, useMemo, useRef, useState, useEffect } from 'react';\r\nimport _ from 'underscore';\r\nimport Promise from 'bluebird';\r\n\r\nimport { checkVideosIntermediateStatus, FolderAssetType } from '../../model';\r\nimport { getTaskPoller } from '../task-poller';\r\n\r\n// below fields will be impacted along with status change\r\nconst VideoChangedFieldsWithStatusUpdate = [\r\n  'thumbnailUrl',\r\n  'url',\r\n  'width',\r\n  'height',\r\n  'durationInMS',\r\n  'status',\r\n];\r\n\r\nexport const useVideoTaskPoller = ({\r\n  repository,\r\n  logger,\r\n  assets,\r\n  interval,\r\n}) => {\r\n  const latestTimestampRef = useRef(0);\r\n  const [videoUpdated, setVideoUpdated] = useState({}); // sample: { 123: { .. } }\r\n  const getVideoTaskStatus = useCallback((videoTasks) => {\r\n    const requestTimestamp = Date.now();\r\n    const videosToCheck = _.keys(videoTasks);\r\n\r\n    return repository.updateVideoStatusByIds(videosToCheck).then((response) => {\r\n      // if multipe requests are sent out, ensure to keep the result from the latest request\r\n      let notFinishedTaskList = {};\r\n      let newVideoUpdated = {};\r\n      if (requestTimestamp > latestTimestampRef.current) {\r\n        const responseKeys = [];\r\n\r\n        response.forEach((item) => {\r\n          responseKeys.push(item.id);\r\n          newVideoUpdated = {\r\n            ...newVideoUpdated,\r\n            [item.id]: _.pick(item, VideoChangedFieldsWithStatusUpdate),\r\n          };\r\n\r\n          if (item && checkVideosIntermediateStatus(item)) {\r\n            notFinishedTaskList = { ...notFinishedTaskList, [item.id]: item.status };\r\n          }\r\n        });\r\n\r\n        // eslint-disable-next-line no-param-reassign\r\n        latestTimestampRef.current = requestTimestamp;\r\n      }\r\n\r\n      setVideoUpdated(newVideoUpdated);\r\n\r\n      const taskCount = Object.keys(notFinishedTaskList).length;\r\n\r\n      return { totalCount: taskCount };\r\n    }).catch(() => {\r\n      // log and ignore the error\r\n      logger.logError('Failed to get videos task status.');\r\n    });\r\n  }, [logger, repository]);\r\n\r\n  const newVideoTasks = useRef({});\r\n  const isPollerRunning = useRef(false);\r\n\r\n  const currentTaskPoller = useRef(null);\r\n\r\n  const startVideoTaskStatusPoller = useCallback(() => {\r\n    const taskPoller = getTaskPoller({\r\n      task: () => {\r\n        isPollerRunning.current = true;\r\n\r\n        const queryPromise = _.isEmpty(newVideoTasks.current)\r\n          ? Promise.resolve({ totalCount: 0 })\r\n          : getVideoTaskStatus(newVideoTasks.current);\r\n\r\n        return queryPromise.then((res) => {\r\n          const { totalCount } = res || {};\r\n\r\n          const isFinished = totalCount === 0;\r\n\r\n          if (isFinished) {\r\n            isPollerRunning.current = false;\r\n          }\r\n\r\n          return { isFinished };\r\n        });\r\n      },\r\n      interval,\r\n    });\r\n    taskPoller.start();\r\n    const stopPoller = () => {\r\n      taskPoller.stop();\r\n      isPollerRunning.current = false;\r\n    };\r\n    return { stopPoller };\r\n  }, [getVideoTaskStatus, interval]);\r\n\r\n  useEffect(() => {\r\n    newVideoTasks.current = assets ? assets.reduce((prev, asset) => {\r\n      if (asset.folderAssetType === FolderAssetType.Video && checkVideosIntermediateStatus(asset)) {\r\n        return { ...prev, [asset.id]: asset.status };\r\n      }\r\n      return prev;\r\n    }, {}) : {};\r\n\r\n    // start pollerif there are no running poller\r\n    if (!isPollerRunning.current && !_.isEmpty(newVideoTasks.current)) {\r\n      const { stopPoller } = startVideoTaskStatusPoller();\r\n      currentTaskPoller.current = stopPoller;\r\n    }\r\n\r\n    // stop poller when component unmount.\r\n    return () => {\r\n      if (currentTaskPoller.current && isPollerRunning.current) {\r\n        currentTaskPoller.current();\r\n      }\r\n    };\r\n  }, [assets, startVideoTaskStatusPoller]);\r\n\r\n  const returnVal = useMemo(() => ({\r\n    videoUpdated,\r\n  }), [videoUpdated]);\r\n\r\n  return returnVal;\r\n};\r\n","/* istanbul ignore file */\r\nimport { useCallback, useEffect, } from 'react';\r\nimport { getSessionStorage } from '@bingads-webui/storage';\r\nimport { useAdsStudioServices, getTaskPoller } from '../services';\r\n\r\n// use session storeage to sync the in progress tasks count between\r\n// asset-library pages and summary bar\r\n\r\nconst KEY = 'ASSET_LIBRARY_STORAGE';\r\n\r\nconst updateInProgressTasksStatus = (inProgressTaskCount) => {\r\n  const ss = getSessionStorage();\r\n  if (ss.supportsStorage()) {\r\n    if (inProgressTaskCount > 0) {\r\n      ss.set(KEY, { inProgressTaskCount });\r\n    } else {\r\n      ss.invalidate(KEY);\r\n    }\r\n  }\r\n};\r\n\r\nconst clearInProgressTaskStatus = () => updateInProgressTasksStatus(0);\r\n\r\nexport const ImageCroppingTaskStatusPoller = ({ interval }) => {\r\n  //\r\n  const { getImageCroppingTaskStatus, croppingTaskUpdated } = useAdsStudioServices();\r\n\r\n  const startImageCroppingTaskStatusPoller = useCallback(() => {\r\n    const taskPoller = getTaskPoller({\r\n      task: () => getImageCroppingTaskStatus().then((res) => {\r\n        const { totalCount } = res || {};\r\n        updateInProgressTasksStatus(totalCount || 0);\r\n        return { isFinished: totalCount === 0 };\r\n      }),\r\n      interval,\r\n    });\r\n    taskPoller.start();\r\n    const stopPoller = () => {\r\n      taskPoller.stop();\r\n      clearInProgressTaskStatus();\r\n    };\r\n    return { stopPoller };\r\n  }, [getImageCroppingTaskStatus, interval]);\r\n\r\n  // query in progress task stasus, and update summary-bar status accordingly\r\n  useEffect(() => {\r\n    const { stopPoller } = startImageCroppingTaskStatusPoller();\r\n    return () => stopPoller();\r\n  // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [croppingTaskUpdated]);\r\n\r\n  return null;\r\n};\r\n","/* istanbul ignore file */\r\nimport { useCallback, useEffect, useRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Promise from 'bluebird';\r\nimport _ from 'underscore';\r\n\r\nimport { getSessionStorage } from '@bingads-webui/storage';\r\nimport { useAdsStudioServices, getTaskPoller } from '../services';\r\nimport { FolderAssetType, checkVideosIntermediateStatus } from '../model';\r\n\r\n// use session storeage to sync the in progress tasks count between\r\n// asset-library pages and summary bar\r\n\r\nconst KEY = 'ASSET_LIBRARY_STORAGE';\r\n\r\nconst updateInProgressTasksStatus = (inProgressTaskCount) => {\r\n  const ss = getSessionStorage();\r\n  if (ss.supportsStorage()) {\r\n    if (inProgressTaskCount > 0) {\r\n      ss.set(KEY, { inProgressTaskCount });\r\n    } else {\r\n      ss.invalidate(KEY);\r\n    }\r\n  }\r\n};\r\n\r\nexport const VideoTaskStatusPoller = ({ interval }) => {\r\n  const {\r\n    getVideoTaskStatus,\r\n    assets,\r\n  } = useAdsStudioServices();\r\n\r\n  const newVideoTasks = useRef({});\r\n  const isPollerRunning = useRef(false);\r\n\r\n  const currentTaskPoller = useRef(null);\r\n\r\n  const startVideoTaskStatusPoller = useCallback(() => {\r\n    const taskPoller = getTaskPoller({\r\n      task: () => {\r\n        isPollerRunning.current = true;\r\n\r\n        const queryPromise = _.isEmpty(newVideoTasks.current)\r\n          ? Promise.resolve({ totalCount: 0 })\r\n          : getVideoTaskStatus(newVideoTasks.current);\r\n\r\n        return queryPromise.then((res) => {\r\n          const { totalCount } = res || {};\r\n\r\n          updateInProgressTasksStatus(totalCount || 0);\r\n\r\n          const isFinished = totalCount === 0;\r\n\r\n          if (isFinished) {\r\n            isPollerRunning.current = false;\r\n          }\r\n\r\n          return { isFinished };\r\n        });\r\n      },\r\n      interval,\r\n    });\r\n    taskPoller.start();\r\n    const stopPoller = () => {\r\n      taskPoller.stop();\r\n      isPollerRunning.current = false;\r\n    };\r\n    return { stopPoller };\r\n  }, [getVideoTaskStatus, interval]);\r\n\r\n  useEffect(() => {\r\n    newVideoTasks.current = assets ? assets.reduce((prev, asset) => {\r\n      if (asset.folderAssetType === FolderAssetType.Video && checkVideosIntermediateStatus(asset)) {\r\n        return { ...prev, [asset.id]: asset.status };\r\n      }\r\n      return prev;\r\n    }, {}) : {};\r\n\r\n    // start pollerif there are no running poller\r\n    if (!isPollerRunning.current && !_.isEmpty(newVideoTasks.current)) {\r\n      const { stopPoller } = startVideoTaskStatusPoller();\r\n      currentTaskPoller.current = stopPoller;\r\n    }\r\n\r\n    // stop poller when component unmount.\r\n    return () => {\r\n      if (currentTaskPoller.current && isPollerRunning.current) {\r\n        currentTaskPoller.current();\r\n      }\r\n    };\r\n  }, [assets, startVideoTaskStatusPoller]);\r\n\r\n  return null;\r\n};\r\n\r\nVideoTaskStatusPoller.propTypes = {\r\n  interval: PropTypes.number.isRequired,\r\n};\r\n","/* istanbul ignore file */\r\nimport React from 'react';\r\nimport hoistNonReactStatics from 'hoist-non-react-statics';\r\nimport { ImageCroppingTaskStatusPoller } from './image-cropping-task-status-poller';\r\nimport { VideoTaskStatusPoller } from './video-task-status-poller';\r\n\r\nexport const withAssetTaskStatusPoller = (Component) => {\r\n  const Wrapper = props => (\r\n    <>\r\n      <Component {...props} />\r\n      <ImageCroppingTaskStatusPoller interval={10000} />\r\n      <VideoTaskStatusPoller interval={10000} />\r\n    </>\r\n  );\r\n\r\n  Wrapper.displayName = `withAssetTaskStatusPoller(${Component.displayName || Component.name})`;\r\n  hoistNonReactStatics(Wrapper, Component);\r\n\r\n  return Wrapper;\r\n};\r\n","import React, { useState, useMemo, useCallback, useRef, useEffect } from 'react';\r\nimport {\r\n  Menu,\r\n  Button,\r\n  MenuButton,\r\n  MenuList,\r\n  MenuDivider,\r\n  MenuPopover,\r\n  MenuTrigger,\r\n  MenuItemRadio,\r\n  makeStyles,\r\n  tokens,\r\n  shorthands,\r\n  Label,\r\n  Input,\r\n  useId,\r\n  mergeClasses,\r\n  Popover,\r\n  PopoverTrigger,\r\n  PopoverSurface,\r\n} from '@fluentui/react-components';\r\nimport {\r\n  Dismiss20Regular,\r\n  ChevronRight20Filled,\r\n  ChevronRight20Regular,\r\n  CalendarLtr20Regular,\r\n  bundleIcon,\r\n} from '@fluentui/react-icons';\r\nimport {\r\n  SimpleDateRangePicker,\r\n} from './simple-date-range-picker';\r\nimport {\r\n  CSMLTimeFrame,\r\n} from '../../model';\r\nimport {\r\n  civilDateRangeEqual,\r\n} from '../../utils';\r\n\r\n\r\nconst ChevronRightIcon = bundleIcon(ChevronRight20Filled, ChevronRight20Regular);\r\n\r\nconst useStyles = makeStyles({\r\n  menuPopover: {\r\n    minWidth: '240px',\r\n    ...shorthands.padding('4px'),\r\n  },\r\n  menuButton: {\r\n    // This is a known fluent ui issue between Popover and MenuButton: https://github.com/microsoft/fluentui/issues/31804\r\n    // This bug has been fixed in the latest version, but as we use legacy version, update the style as a workaround.\r\n    backgroundColor: 'transparent',\r\n    '&[aria-expanded=\"true\"]': {\r\n      backgroundColor: '#EBEBEB',\r\n    },\r\n  },\r\n  unselectedMenuButton: {\r\n    '&[aria-expanded=\"false\"]': {\r\n      fontWeight: 'unset',\r\n    },\r\n  },\r\n  enabledClearButton: {\r\n    float: 'right',\r\n    color: tokens.colorNeutralForeground2BrandHover,\r\n  },\r\n  disabledClearButton: {\r\n    float: 'right',\r\n    color: tokens.colorNeutralForegroundDisabled,\r\n  },\r\n});\r\n\r\nconst useCustomItemStyles = makeStyles({\r\n  menuPopover: {\r\n    maxWidth: 'unset',\r\n    '& .compared-date-range-picker-dialog': {\r\n      top: 'auto !important',\r\n      left: 'auto !important',\r\n      right: 'auto !important',\r\n      width: 'auto !important',\r\n      height: 'auto !important',\r\n      paddingLeft: '14px',\r\n      paddingRight: '14px',\r\n      paddingTop: '14px',\r\n      position: 'relative',\r\n      boxShadow: 'none',\r\n      ...shorthands.border('0px', 'none'),\r\n    },\r\n  },\r\n  item: {\r\n    '& .fui-MenuItem__content': {\r\n      display: 'flex',\r\n      paddingRight: '0px',\r\n    },\r\n  },\r\n  text: {\r\n    flexGrow: '1',\r\n  },\r\n  icon: {\r\n  },\r\n  startDate: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    marginLeft: '28px',\r\n    marginRight: '28px',\r\n    maxWidth: '160px',\r\n  },\r\n  endDate: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    marginLeft: '28px',\r\n    marginRight: '28px',\r\n    marginBottom: '6px',\r\n    maxWidth: '160px',\r\n  },\r\n  input: {\r\n    paddingRight: '0px',\r\n    height: '32px',\r\n    lineHeight: '32px',\r\n    overflowX: 'hidden',\r\n    overflowY: 'hidden',\r\n  },\r\n  contentAfter: {\r\n    paddingRight: '6px',\r\n    paddingLeft: '8px',\r\n    '& svg': {\r\n      display: 'block',\r\n    },\r\n  },\r\n  contentLabel: {\r\n    marginBottom: '6px',\r\n    marginTop: '8px',\r\n  },\r\n});\r\n\r\nconst CustomItem = (props) => {\r\n  const {\r\n    i18n,\r\n    isCustomSelected,\r\n    timeZone,\r\n    customDateRange,\r\n    setCustomDateRange,\r\n    customRangeStartStr,\r\n    customRangeEndStr,\r\n    name,\r\n    customOption,\r\n  } = props;\r\n\r\n  const classes = useCustomItemStyles();\r\n  const menuItemRef = useRef(null);\r\n  const startDateId = useId('startDate');\r\n  const afterStartDateId = useId('afterStartDateId');\r\n  const startDateRef = useRef(null);\r\n  const endDateId = useId('endDate');\r\n  const afterEndDateId = useId('afterEndDateId');\r\n  const [isDatePickerOpen, setIsDatePickerOpen] = useState(false);\r\n  const isOpen = useMemo(() => isDatePickerOpen && isCustomSelected, [isDatePickerOpen, isCustomSelected]);\r\n  const onOpenChange = (e, data) => {\r\n    setIsDatePickerOpen(data.open);\r\n  };\r\n\r\n  // date range picker related handling\r\n  // selecting 'start' or 'end' on date range picker\r\n  const isSelectingStartDate = useRef(true);\r\n\r\n  const onSelectedDateRangeChange = useCallback((newRange) => {\r\n    setCustomDateRange(newRange);\r\n  }, [setCustomDateRange]);\r\n\r\n  const openDatePickerForStart = useCallback(() => {\r\n    setIsDatePickerOpen(true);\r\n    isSelectingStartDate.current = true;\r\n  }, []);\r\n\r\n  const openDatePickerForEnd = useCallback(() => {\r\n    setIsDatePickerOpen(true);\r\n    isSelectingStartDate.current = false;\r\n  }, []);\r\n\r\n  const onStartKeyDown = useCallback((event) => {\r\n    if (event.code === 'Enter') {\r\n      openDatePickerForStart();\r\n      event.preventDefault();\r\n    } else if (event.code === 'ArrowUp') {\r\n      if (menuItemRef.current) {\r\n        menuItemRef.current.focus();\r\n        event.preventDefault();\r\n      }\r\n    }\r\n  }, [openDatePickerForStart]);\r\n\r\n  const onEndKeyDown = useCallback((event) => {\r\n    if (event.code === 'Enter') {\r\n      openDatePickerForEnd();\r\n      event.preventDefault();\r\n    } else if (event.code === 'ArrowUp') {\r\n      if (startDateRef.current) {\r\n        startDateRef.current.focus();\r\n        event.preventDefault();\r\n      }\r\n    }\r\n  }, [openDatePickerForEnd]);\r\n\r\n  return (\r\n    <>\r\n      <Menu open={isOpen} onOpenChange={onOpenChange}>\r\n        <MenuTrigger disableButtonEnhancement>\r\n          <MenuItemRadio ref={menuItemRef} name={name} value={customOption.key} hasSubmenu className={classes.item}>\r\n            <span className={classes.text}>\r\n              {customOption.text}\r\n            </span>\r\n            <span className={classes.icon}>\r\n              <ChevronRightIcon />\r\n            </span>\r\n          </MenuItemRadio>\r\n        </MenuTrigger>\r\n\r\n        <MenuPopover className={classes.menuPopover}>\r\n          <MenuList>\r\n            <SimpleDateRangePicker\r\n              i18n={i18n}\r\n              defaultSelectedDateRange={customDateRange}\r\n              defaultIsSelectingStartDate={isSelectingStartDate.current}\r\n              onDateRangeChange={onSelectedDateRangeChange}\r\n              timeZone={timeZone}\r\n            />\r\n          </MenuList>\r\n        </MenuPopover>\r\n      </Menu>\r\n      {isCustomSelected && (\r\n        <div className=\"custom-date-range\">\r\n          <div className={classes.startDate}>\r\n            <Label className={classes.contentLabel} htmlFor={startDateId}>{i18n.getString(_TL_('Start date'))}</Label>\r\n            <Input\r\n              className={mergeClasses(classes.input, 'start-date-input')}\r\n              ref={startDateRef}\r\n              onClick={() => openDatePickerForStart()}\r\n              onKeyDown={onStartKeyDown}\r\n              readOnly\r\n              contentAfter={\r\n                <div className={classes.contentAfter} id={afterStartDateId}>\r\n                  <CalendarLtr20Regular />\r\n                </div>\r\n              }\r\n              value={customRangeStartStr}\r\n              aria-labelledby={`${startDateId} ${afterStartDateId}`}\r\n              id={startDateId}\r\n            />\r\n          </div>\r\n          <div className={classes.endDate}>\r\n            <Label className={classes.contentLabel} htmlFor={endDateId}>{i18n.getString(_TL_('End date'))}</Label>\r\n            <Input\r\n              className={mergeClasses(classes.input, 'end-date-input')}\r\n              onClick={() => openDatePickerForEnd()}\r\n              onKeyDown={onEndKeyDown}\r\n              readOnly\r\n              contentAfter={\r\n                <div className={classes.contentAfter} id={afterEndDateId}>\r\n                  <CalendarLtr20Regular />\r\n                </div>\r\n              }\r\n              value={customRangeEndStr}\r\n              aria-labelledby={`${endDateId} ${afterEndDateId}`}\r\n              id={endDateId}\r\n            />\r\n          </div>\r\n        </div>\r\n      )}\r\n    </>\r\n  );\r\n};\r\n\r\nexport const DateAddedFilter = (props) => {\r\n  const {\r\n    i18n,\r\n    dateFormat,\r\n    timeZone,\r\n    defaultTimeFrame,\r\n    defaultCustomDateRange,\r\n    options,\r\n    onChange,\r\n    forceClear,\r\n    onDismiss,\r\n    defaultOpen = false,\r\n  } = props;\r\n\r\n  const classes = useStyles();\r\n  const name = 'date';\r\n  const [checkedValues, setCheckedValues] = useState({\r\n    [name]: [defaultTimeFrame],\r\n  });\r\n  const isCustomSelected = useMemo(() => checkedValues[name].includes(CSMLTimeFrame.Custom), [checkedValues]);\r\n  const customOption = useMemo(() => options.find(option => option.key === CSMLTimeFrame.Custom), [options]);\r\n  const optionsWithoutCustom = useMemo(() => options.filter(option => option.key !== CSMLTimeFrame.Custom), [options]);\r\n  // date range user selected for 'Custom'\r\n  const [customDateRange, setCustomDateRange] = useState(defaultCustomDateRange);\r\n\r\n  // dropdown related handling\r\n  const formatDate = useCallback(\r\n    date => i18n.formatCivilDate(date, { raw: dateFormat, timeZone }),\r\n    [dateFormat, i18n, timeZone]\r\n  );\r\n\r\n  const customRangeStartStr = useMemo(\r\n    () => formatDate(customDateRange.start),\r\n    [formatDate, customDateRange.start]\r\n  );\r\n\r\n  const customRangeEndStr = useMemo(\r\n    () => formatDate(customDateRange.end),\r\n    [formatDate, customDateRange.end]\r\n  );\r\n\r\n  const selectedChoice = useMemo(\r\n    () => options.find(r => r.key === checkedValues[name][0]),\r\n    [checkedValues, options]\r\n  );\r\n\r\n  // the string shown on dropdown title\r\n  const dropdownTitle = useMemo(() => {\r\n    if (!selectedChoice) {\r\n      return null;\r\n    }\r\n    if (selectedChoice.key === CSMLTimeFrame.Custom) {\r\n      return `${customRangeStartStr} - ${customRangeEndStr}`;\r\n    }\r\n    return selectedChoice.text;\r\n  }, [customRangeEndStr, customRangeStartStr, selectedChoice]);\r\n\r\n  // when the X button on dropdown title is clicked\r\n  const onDropdownClear = useCallback(() => {\r\n    if (onChange && defaultTimeFrame !== CSMLTimeFrame.Anytime) {\r\n      onChange({ timeframe: CSMLTimeFrame.Anytime, customDateRange });\r\n    }\r\n    if (onDismiss) {\r\n      onDismiss();\r\n    }\r\n  }, [customDateRange, defaultTimeFrame, onChange, onDismiss]);\r\n\r\n  // when dropdown list is dismissed\r\n  const onDropdownDismiss = useCallback(() => {\r\n    const timeframe = checkedValues[name][0];\r\n    if (timeframe && onChange) {\r\n      if (defaultTimeFrame !== timeframe\r\n        || !civilDateRangeEqual(defaultCustomDateRange, customDateRange)) {\r\n        onChange({ timeframe, customDateRange }, dropdownTitle);\r\n      }\r\n    }\r\n  }, [checkedValues, customDateRange, defaultCustomDateRange, defaultTimeFrame, dropdownTitle, onChange]);\r\n\r\n  const [isOpen, setIsOpen] = useState(defaultOpen);\r\n  const clear = useCallback(() => {\r\n    setIsOpen(false);\r\n    setCheckedValues(() => ({\r\n      [name]: [],\r\n    }));\r\n    onDropdownClear();\r\n  }, [onDropdownClear]);\r\n\r\n  const onCheckedValueChange = (e, data) => {\r\n    const {\r\n      checkedItems,\r\n    } = data;\r\n    setCheckedValues(s => ({\r\n      ...s,\r\n      [name]: checkedItems,\r\n    }));\r\n    if (checkedItems && checkedItems.length > 0 && checkedItems[0] !== CSMLTimeFrame.Custom) {\r\n      setIsOpen(false);\r\n    }\r\n  };\r\n\r\n  const isSelected = useMemo(() => checkedValues[name].length > 0 && checkedValues[name][0] !== CSMLTimeFrame.Anytime, [checkedValues]);\r\n\r\n  const onOpenChange = (e, data) => {\r\n    setIsOpen(data.open);\r\n  };\r\n\r\n  useEffect(() => {\r\n    if (forceClear) {\r\n      clear();\r\n    }\r\n  // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [forceClear]);\r\n\r\n  useEffect(() => {\r\n    if (!isOpen) {\r\n      onDropdownDismiss();\r\n    }\r\n  }, [isOpen, onDropdownDismiss]);\r\n\r\n  return (\r\n    <Popover trapFocus open={isOpen} onOpenChange={onOpenChange} positioning=\"below-start\">\r\n      <PopoverTrigger disableButtonEnhancement>\r\n        <MenuButton appearance=\"subtle\" className={isSelected ? mergeClasses(classes.menuButton, 'date-filter-button') : mergeClasses(classes.menuButton, classes.unselectedMenuButton, 'date-filter-button')}>\r\n          {isSelected ? dropdownTitle : i18n.getString(_TL_('Date added'))}\r\n        </MenuButton>\r\n      </PopoverTrigger>\r\n\r\n      <PopoverSurface className={mergeClasses(classes.menuPopover, 'date-filter-menu')}>\r\n        <MenuList checkedValues={checkedValues} onCheckedValueChange={onCheckedValueChange} hasCheckmarks>\r\n          {optionsWithoutCustom.map(option => (\r\n            <MenuItemRadio key={option.key} name={name} value={option.key}>\r\n              {option.text}\r\n            </MenuItemRadio>\r\n          ))}\r\n          {customOption &&\r\n            <CustomItem\r\n              i18n={i18n}\r\n              checkedValues={checkedValues}\r\n              isCustomSelected={isCustomSelected}\r\n              customDateRange={customDateRange}\r\n              timeZone={timeZone}\r\n              setCustomDateRange={setCustomDateRange}\r\n              customOption={customOption}\r\n              customRangeStartStr={customRangeStartStr}\r\n              customRangeEndStr={customRangeEndStr}\r\n              name={name}\r\n            />}\r\n          <MenuDivider />\r\n        </MenuList>\r\n        <div>\r\n          <Button\r\n            className={isSelected ? classes.enabledClearButton : classes.disabledClearButton}\r\n            disabled={!isSelected}\r\n            appearance=\"transparent\"\r\n            icon={<Dismiss20Regular />}\r\n            onClick={() => clear()}\r\n          >\r\n            {i18n.getString(_TL_('Clear'))}\r\n          </Button>\r\n        </div>\r\n      </PopoverSurface>\r\n    </Popover>\r\n  );\r\n};\r\n\r\n","import React from 'react';\r\nimport { SearchBox } from '@fluentui/react-search';\r\nimport {\r\n  makeStyles,\r\n  mergeClasses,\r\n} from '@fluentui/react-components';\r\n\r\nconst useStyles = makeStyles({\r\n  searchBox: {\r\n    minWidth: '300px',\r\n    '& input[type=\"search\"]': {\r\n      backgroundImage: 'none',\r\n      backgroundSize: 'unset',\r\n      paddingLeft: '4px',\r\n    },\r\n    '& input[type=\"search\"]::placeholder ': {\r\n      color: '#707070',\r\n    },\r\n  },\r\n});\r\n\r\nexport const SearchBoxFilter = (props) => {\r\n  const {\r\n    i18n,\r\n    className,\r\n    onSearchTextChanging,\r\n    onSearchTextChange,\r\n    onSearchTextBlur,\r\n    onSearchTextClear,\r\n    defaultSearchText,\r\n    searchboxPlaceHolder,\r\n    autoFocus,\r\n    ariaLabel,\r\n  } = props;\r\n\r\n  const classes = useStyles();\r\n\r\n  return (\r\n    <div className={className}>\r\n      <SearchBox\r\n        autoFocus={autoFocus}\r\n        className={mergeClasses('search-box', classes.searchBox)}\r\n        aria-label={ariaLabel || ''}\r\n        placeholder={searchboxPlaceHolder || i18n.getString(_TL_('Search by asset and folder name or ID'))}\r\n        defaultValue={defaultSearchText}\r\n        onChange={(e, data) => {\r\n          if (data.value === '' && e.type === 'click') {\r\n            onSearchTextClear(data);\r\n          } else {\r\n            onSearchTextChanging(e, data.value);\r\n          }\r\n        }}\r\n        onKeyDown={(e) => {\r\n          if (e.key === 'Enter') {\r\n            onSearchTextChange(e.target.value);\r\n          }\r\n        }}\r\n        onBlur={() => {\r\n          onSearchTextBlur();\r\n        }}\r\n      />\r\n    </div>\r\n  );\r\n};\r\n","import React from 'react';\r\nimport {\r\n  makeStyles,\r\n  mergeClasses,\r\n  shorthands,\r\n} from '@fluentui/react-components';\r\nimport { ToggleButtons } from '@bingads-webui-campaign-react/ads-studio-shared-components';\r\n\r\nconst useStyles = makeStyles({\r\n  toggleButton: {\r\n    minWidth: 'unset',\r\n    fontWeight: 'unset',\r\n  },\r\n  toggleButtons: {\r\n    display: 'flex',\r\n    columnGap: '8px',\r\n  },\r\n  selectedButton: {\r\n    minWidth: 'unset',\r\n    backgroundColor: '#EBF3FC',\r\n    ...shorthands.border('1px', 'solid', '#B4D6FA'),\r\n    color: '#115EA3',\r\n  },\r\n});\r\n\r\nexport const AssetTypeToggleButtonsFilter = (props) => {\r\n  const {\r\n    className,\r\n    options,\r\n    optionsState,\r\n    toggleSelectedOption,\r\n  } = props;\r\n\r\n  const classes = useStyles();\r\n\r\n  return (\r\n    <div className={className}>\r\n      <div className={mergeClasses('asset-type-filter', classes.toggleButtons)}>\r\n        <ToggleButtons\r\n          options={options}\r\n          classes={classes}\r\n          optionsState={optionsState}\r\n          toggleSelectedOption={toggleSelectedOption}\r\n        />\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n","import React, { useState, useMemo, useEffect } from 'react';\r\nimport {\r\n  Menu,\r\n  MenuButton,\r\n  MenuList,\r\n  MenuPopover,\r\n  MenuTrigger,\r\n  MenuItemRadio,\r\n  makeStyles,\r\n  mergeClasses,\r\n} from '@fluentui/react-components';\r\nimport {\r\n  ArrowSort20Regular,\r\n  ArrowSortUp20Regular,\r\n  ArrowSortDown20Regular,\r\n} from '@fluentui/react-icons';\r\nimport {\r\n  CSMLSortIcon,\r\n  CSMLSortBy,\r\n} from '../../model';\r\n\r\nconst useStyles = makeStyles({\r\n  menuPopover: {\r\n    minWidth: '180px',\r\n  },\r\n  item: {\r\n    '& .fui-MenuItem__content': {\r\n      display: 'flex',\r\n    },\r\n  },\r\n});\r\n\r\nexport const SortByFilter = (props) => {\r\n  const {\r\n    className,\r\n    options,\r\n    sortBy,\r\n    onChange,\r\n  } = props;\r\n\r\n  const classes = useStyles();\r\n  const name = 'sortBy';\r\n  const [checkedValues, setCheckedValues] = useState({\r\n    [name]: [sortBy || CSMLSortBy.MostRecent],\r\n  });\r\n  const [isOpen, setIsOpen] = useState(false);\r\n\r\n  const onCheckedValueChange = (e, data) => {\r\n    const {\r\n      checkedItems,\r\n    } = data;\r\n    setCheckedValues(s => ({\r\n      ...s,\r\n      [name]: checkedItems,\r\n    }));\r\n    onChange(e, {\r\n      key: checkedItems[0],\r\n    });\r\n  };\r\n\r\n  const onOpenChange = (e, data) => {\r\n    setIsOpen(data.open);\r\n  };\r\n\r\n  const selectedOptionMemo = useMemo(() => {\r\n    const selectedOption = options.find(option => option.key === checkedValues[name][0]);\r\n    return selectedOption ?\r\n      <>\r\n        {selectedOption.text}\r\n        {selectedOption.icon && selectedOption.icon === CSMLSortIcon.SortUp && <ArrowSortUp20Regular />}\r\n        {selectedOption.icon && selectedOption.icon === CSMLSortIcon.SortDown && <ArrowSortDown20Regular />}\r\n      </> : '';\r\n  }, [checkedValues, options]);\r\n\r\n  // As, this could be modified by the parent component, we need to update the checkedValues\r\n  useEffect(() => {\r\n    if (sortBy === checkedValues[name][0]) {\r\n      return;\r\n    }\r\n    if (sortBy == null) {\r\n      return;\r\n    }\r\n    setCheckedValues({\r\n      [name]: [sortBy],\r\n    });\r\n  }, [checkedValues, sortBy]);\r\n\r\n  return (\r\n    <div className={mergeClasses(className, 'sort-by-filter')}>\r\n      <Menu open={isOpen} checkedValues={checkedValues} onCheckedValueChange={onCheckedValueChange} hasCheckmarks onOpenChange={onOpenChange}>\r\n        <MenuTrigger disableButtonEnhancement>\r\n          <MenuButton icon={<ArrowSort20Regular />}>\r\n            {selectedOptionMemo}\r\n          </MenuButton>\r\n        </MenuTrigger>\r\n\r\n        <MenuPopover className={mergeClasses('sort-filter-list', classes.menuPopover)}>\r\n          <MenuList>\r\n            {\r\n              options.map((option, index) => (\r\n                <MenuItemRadio key={option.key} name={name} value={option.key} className={option.icon ? mergeClasses(classes.item, `option${index}`) : `option${index}`}>\r\n                  {option.text}\r\n                  {option.icon && option.icon === CSMLSortIcon.SortUp && <ArrowSortUp20Regular />}\r\n                  {option.icon && option.icon === CSMLSortIcon.SortDown && <ArrowSortDown20Regular />}\r\n                </MenuItemRadio>\r\n                ))\r\n            }\r\n          </MenuList>\r\n        </MenuPopover>\r\n      </Menu>\r\n    </div>\r\n  );\r\n};\r\n\r\n","import React, { useState, useCallback, useMemo, useEffect } from 'react';\r\nimport _ from 'underscore';\r\nimport {\r\n  Menu,\r\n  Button,\r\n  MenuButton,\r\n  MenuList,\r\n  MenuDivider,\r\n  MenuPopover,\r\n  MenuTrigger,\r\n  makeStyles,\r\n  tokens,\r\n  Checkbox,\r\n  mergeClasses,\r\n} from '@fluentui/react-components';\r\nimport {\r\n  Dismiss20Regular,\r\n} from '@fluentui/react-icons';\r\n\r\nconst useStyles = makeStyles({\r\n  menuPopover: {\r\n    minWidth: '180px',\r\n  },\r\n  unselectedMenuButton: {\r\n    '&[aria-expanded=\"false\"]': {\r\n      fontWeight: 'unset',\r\n    },\r\n  },\r\n  enabledClearButton: {\r\n    float: 'right',\r\n    color: tokens.colorNeutralForeground2BrandHover,\r\n  },\r\n  disabledClearButton: {\r\n    float: 'right',\r\n    color: tokens.colorNeutralForegroundDisabled,\r\n  },\r\n  checkbox: {\r\n    '& label': {\r\n      paddingLeft: '0px',\r\n      fontWeight: 'unset',\r\n    },\r\n  },\r\n});\r\n\r\nexport const AssetSourceFilter = (props) => {\r\n  const {\r\n    i18n,\r\n    defaultSelectedAssetSources,\r\n    options,\r\n    onChange,\r\n    forceClear,\r\n    onDismiss,\r\n    defaultOpen = false,\r\n  } = props;\r\n\r\n  const classes = useStyles();\r\n  const [selectedAssetSources, setSelectedAssetSources] = useState(defaultSelectedAssetSources);\r\n  const [isOpen, setIsOpen] = useState(defaultOpen);\r\n\r\n  const selectedOptions = useMemo(\r\n    () => _.filter(options, ({ key }) => _.contains(selectedAssetSources, key)) || [],\r\n    [selectedAssetSources, options]\r\n  );\r\n\r\n  const onChangeCallback = useCallback((key, checked) => {\r\n    const selectedSources = checked ? _.sortBy([...selectedAssetSources, key]) : _.without(selectedAssetSources, key);\r\n    setSelectedAssetSources(selectedSources || []);\r\n  }, [selectedAssetSources]);\r\n\r\n  // the string shown on dropdown title\r\n  const dropdownTitle = useMemo(() => {\r\n    if (_.isEmpty(selectedOptions)) return null;\r\n    const title = _.uniq(selectedOptions.map(({ text }) => text)).join('; ');\r\n    return title;\r\n  }, [selectedOptions]);\r\n\r\n  const isSelected = useMemo(() => !_.isEmpty(selectedAssetSources), [selectedAssetSources]);\r\n\r\n  // when the X button on dropdown title is clicked\r\n  const onDropdownClear = useCallback(() => {\r\n    setSelectedAssetSources([]);\r\n    if (onChange && !_.isEmpty(defaultSelectedAssetSources)) {\r\n      onChange([]);\r\n    }\r\n    if (onDismiss) {\r\n      onDismiss();\r\n    }\r\n  }, [defaultSelectedAssetSources, onChange, onDismiss]);\r\n\r\n  // when dropdown list is dismissed\r\n  const onDropdownDismiss = useCallback(() => {\r\n    if (onChange && !_.isEqual(defaultSelectedAssetSources, selectedAssetSources)) {\r\n      onChange(selectedAssetSources, dropdownTitle);\r\n    }\r\n  }, [defaultSelectedAssetSources, dropdownTitle, selectedAssetSources, onChange]);\r\n\r\n  const clear = () => {\r\n    setIsOpen(false);\r\n    onDropdownClear();\r\n  };\r\n\r\n  const onOpenChange = (e, data) => {\r\n    setIsOpen(data.open);\r\n  };\r\n\r\n  useEffect(() => {\r\n    if (forceClear) {\r\n      clear();\r\n    }\r\n  // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [forceClear]);\r\n\r\n  useEffect(() => {\r\n    if (!isOpen) {\r\n      onDropdownDismiss();\r\n    }\r\n  }, [isOpen, onDropdownDismiss]);\r\n\r\n  return (\r\n    <Menu open={isOpen} hasCheckmarks onOpenChange={onOpenChange}>\r\n      <MenuTrigger disableButtonEnhancement>\r\n        <MenuButton appearance=\"subtle\" className={isSelected ? 'asset-source-button' : mergeClasses(classes.unselectedMenuButton, 'asset-source-button')}>\r\n          {dropdownTitle || i18n.getString(_TL_('Source'))}\r\n        </MenuButton>\r\n      </MenuTrigger>\r\n\r\n      <MenuPopover className={mergeClasses(classes.menuPopover, 'asset-source-menu')}>\r\n        <MenuList>\r\n          <div className=\"custom-source\">\r\n            {options.map(option => (\r\n              <div key={option.key}>\r\n                <Checkbox\r\n                  label={option.title}\r\n                  className={mergeClasses(option.key, classes.checkbox)}\r\n                  checked={_.contains(selectedAssetSources, option.key)}\r\n                  onChange={(evt, data) => onChangeCallback(option.key, data.checked)}\r\n                />\r\n              </div>\r\n            ))}\r\n          </div>\r\n          <MenuDivider />\r\n          <div>\r\n            <Button\r\n              className={isSelected ? classes.enabledClearButton : classes.disabledClearButton}\r\n              disabled={!isSelected}\r\n              appearance=\"transparent\"\r\n              icon={<Dismiss20Regular />}\r\n              onClick={() => clear()}\r\n            >\r\n              {i18n.getString(_TL_('Clear'))}\r\n            </Button>\r\n          </div>\r\n        </MenuList>\r\n      </MenuPopover>\r\n    </Menu>\r\n  );\r\n};\r\n\r\n","import React, { useMemo, useEffect, useState, useRef, useCallback } from 'react';\r\nimport _ from 'underscore';\r\nimport {\r\n  Button,\r\n  MenuButton,\r\n  MenuList,\r\n  MenuDivider,\r\n  Popover,\r\n  PopoverSurface,\r\n  PopoverTrigger,\r\n  makeStyles,\r\n  shorthands,\r\n  tokens,\r\n  Label,\r\n  Input,\r\n  useId,\r\n  mergeClasses,\r\n} from '@fluentui/react-components';\r\nimport {\r\n  Dismiss20Regular,\r\n} from '@fluentui/react-icons';\r\n\r\nconst useStyles = makeStyles({\r\n  menuPopover: {\r\n    minWidth: '180px',\r\n    ...shorthands.padding('4px'),\r\n  },\r\n  menuButton: {\r\n    // This is a known fluent ui issue between Popover and MenuButton: https://github.com/microsoft/fluentui/issues/31804\r\n    // This bug has been fixed in the latest version, but as we use legacy version, update the style as a workaround.\r\n    backgroundColor: 'transparent',\r\n    '&[aria-expanded=\"true\"]': {\r\n      backgroundColor: '#EBEBEB',\r\n    },\r\n  },\r\n  unselectedMenuButton: {\r\n    '&[aria-expanded=\"false\"]': {\r\n      fontWeight: 'unset',\r\n    },\r\n  },\r\n  enabledClearButton: {\r\n    float: 'right',\r\n    color: tokens.colorNeutralForeground2BrandHover,\r\n  },\r\n  disabledClearButton: {\r\n    float: 'right',\r\n    color: tokens.colorNeutralForegroundDisabled,\r\n  },\r\n});\r\n\r\nconst useCustomItemStyles = makeStyles({\r\n  minDuration: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    marginLeft: '28px',\r\n    marginRight: '28px',\r\n    maxWidth: '124px',\r\n  },\r\n  customDuration: {\r\n    '& .invalidInput': {\r\n      '&:focus-within': {\r\n        '::after': {\r\n          ...shorthands.borderBottom('2px', 'solid', 'rgb(164, 38, 44)'),\r\n        },\r\n      },\r\n      ...shorthands.borderBottom('1px', 'solid', 'rgb(164, 38, 44)'),\r\n    },\r\n  },\r\n  maxDuration: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    marginLeft: '28px',\r\n    marginRight: '28px',\r\n    marginBottom: '6px',\r\n    maxWidth: '124px',\r\n  },\r\n  input: {\r\n    paddingRight: '0px',\r\n    height: '32px',\r\n    lineHeight: '32px',\r\n    overflowX: 'hidden',\r\n    overflowY: 'hidden',\r\n  },\r\n  contentAfter: {\r\n    backgroundColor: tokens.colorNeutralBackground3,\r\n    paddingRight: '6px',\r\n    paddingLeft: '8px',\r\n  },\r\n  contentLabel: {\r\n    marginBottom: '6px',\r\n    marginTop: '8px',\r\n  },\r\n});\r\n\r\nexport const VideoDurationFilter = (props) => {\r\n  const {\r\n    i18n,\r\n    defaultMaxDuration,\r\n    defaultMinDuration,\r\n    onChange,\r\n    forceClear,\r\n  } = props;\r\n\r\n  const minDurationId = useId('minDuration');\r\n  const afterMinDurationId = useId('afterMinDurationId');\r\n  const maxDurationId = useId('maxDuration');\r\n  const afterMaxDurationId = useId('afterMaxDurationId');\r\n  const customClasses = useCustomItemStyles();\r\n  const classes = useStyles();\r\n\r\n  // use ref to handle focus switching when pressing tab key\r\n  const minDurationRef = useRef(null);\r\n  const maxDurationRef = useRef(null);\r\n\r\n  const [minDuration, setMinDuration] = useState(defaultMinDuration);\r\n  const [maxDuration, setMaxDuration] = useState(defaultMaxDuration);\r\n\r\n  const [minDurationInvalid, setMinDurationInvalid] = useState(false);\r\n  const [maxDurationInvalid, setMaxDurationInvalid] = useState(false);\r\n\r\n  const onChangeCallback = useCallback((setter, newValue) => {\r\n    const val = parseInt(newValue, 10);\r\n    if (_.isEmpty(newValue) || _.isNaN(val)) {\r\n      setter(null);\r\n      return;\r\n    }\r\n    if (!_.isNaN(val) && val >= 0 && val <= 1000000) {\r\n      setter(val);\r\n    }\r\n  }, []);\r\n\r\n  const onMinDurationChange = useCallback((event, newValue) => {\r\n    onChangeCallback(setMinDuration, newValue);\r\n    if (_.isEmpty(newValue) || maxDuration > newValue) {\r\n      setMinDurationInvalid(false);\r\n      setMaxDurationInvalid(false);\r\n    } else if ((maxDuration && newValue >= maxDuration)) {\r\n      setMinDurationInvalid(true);\r\n    } else {\r\n      setMinDurationInvalid(false);\r\n    }\r\n  }, [maxDuration, onChangeCallback]);\r\n\r\n  const onMaxDurationChange = useCallback((event, newValue) => {\r\n    onChangeCallback(setMaxDuration, newValue);\r\n    if (_.isEmpty(newValue) || newValue > minDuration) {\r\n      setMinDurationInvalid(false);\r\n      setMaxDurationInvalid(false);\r\n    } else if (newValue <= minDuration) {\r\n      setMaxDurationInvalid(true);\r\n    } else {\r\n      setMaxDurationInvalid(false);\r\n    }\r\n  }, [onChangeCallback, minDuration]);\r\n\r\n  const onClear = useCallback(() => {\r\n    setMinDuration(null);\r\n    setMaxDuration(null);\r\n    if (!(defaultMinDuration || defaultMaxDuration)) {\r\n      // trigger onchange only when dropdown list is closed\r\n      onChange({ newMinDuration: null, newMaxDuration: null });\r\n    }\r\n    if (minDurationRef.current) {\r\n      minDurationRef.current.focus();\r\n    }\r\n  }, [defaultMinDuration, defaultMaxDuration, onChange]);\r\n\r\n  const title = useMemo(() => {\r\n    if (minDuration && maxDuration && !minDurationInvalid && !maxDurationInvalid) {\r\n      return `${minDuration}s < ${i18n.getString(_TL_('Duration'))} < ${maxDuration}s`;\r\n    }\r\n    if (minDuration && !minDurationInvalid) {\r\n      return `${i18n.getString(_TL_('Duration'))} > ${minDuration}s`;\r\n    }\r\n    if (maxDuration && !maxDurationInvalid) {\r\n      return `${i18n.getString(_TL_('Duration'))} < ${maxDuration}s`;\r\n    }\r\n    return '';\r\n  }, [minDuration, maxDuration, minDurationInvalid, maxDurationInvalid, i18n]);\r\n\r\n  const focusTextField = useCallback(textFieldRef => (event) => {\r\n    if (event.key === 'Tab') {\r\n      if (textFieldRef.current) {\r\n        textFieldRef.current.focus();\r\n      }\r\n      if (event.stopPropagation) { event.stopPropagation(); }\r\n      if (event.preventDefault) { event.preventDefault(); }\r\n    }\r\n  }, []);\r\n\r\n  const onMinDurationKeyUp = useMemo(() => focusTextField(maxDurationRef), [focusTextField]);\r\n  const onMaxDurationKeyUp = useMemo(() => focusTextField(minDurationRef), [focusTextField]);\r\n\r\n  const onDropdownDismiss = useCallback(() => {\r\n    if (defaultMinDuration !== minDuration || defaultMaxDuration !== maxDuration) {\r\n      onChange({ newMinDuration: minDurationInvalid ? null : minDuration, newMaxDuration: maxDurationInvalid ? null : maxDuration });\r\n    }\r\n  }, [defaultMinDuration, minDuration, defaultMaxDuration, maxDuration, onChange, minDurationInvalid, maxDurationInvalid]);\r\n\r\n\r\n  const [isOpen, setIsOpen] = useState(false);\r\n  const [menuList, setMenuList] = useState(null);\r\n\r\n  const isSelected = useMemo(() => minDuration || maxDuration, [minDuration, maxDuration]);\r\n\r\n  const onOpenChange = (e, data) => {\r\n    setIsOpen(data.open);\r\n  };\r\n\r\n  const clear = () => {\r\n    setIsOpen(false);\r\n    onClear();\r\n  };\r\n\r\n  useEffect(() => {\r\n    if (forceClear) {\r\n      clear();\r\n    }\r\n  // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [forceClear]);\r\n\r\n  useEffect(() => {\r\n    if (!isOpen) {\r\n      onDropdownDismiss();\r\n    }\r\n  }, [isOpen, onDropdownDismiss]);\r\n\r\n  useEffect(() => {\r\n    if (menuList) {\r\n      // as we are using custom input, we need to remove menu role for accessibility\r\n      menuList.removeAttribute('role');\r\n    }\r\n  }, [menuList]);\r\n\r\n  return (\r\n    <Popover trapFocus open={isOpen} onOpenChange={onOpenChange} positioning=\"below-start\">\r\n      <PopoverTrigger disableButtonEnhancement>\r\n        <MenuButton appearance=\"subtle\" className={isSelected ? mergeClasses(classes.menuButton, 'video-duration-button') : mergeClasses(classes.menuButton, classes.unselectedMenuButton, 'video-duration-button')}>\r\n          {isSelected ? title : i18n.getString(_TL_('Video duration'))}\r\n        </MenuButton>\r\n      </PopoverTrigger>\r\n\r\n      <PopoverSurface className={mergeClasses(classes.menuPopover, 'video-duration-menu')}>\r\n        <MenuList ref={setMenuList}>\r\n          <div className={mergeClasses('custom-duration', customClasses.customDuration)}>\r\n            <div className={mergeClasses(customClasses.minDuration, 'min-duration')}>\r\n              <Label className={customClasses.contentLabel} htmlFor={minDurationId}>{i18n.getString(_TL_('Min. duration'))}</Label>\r\n              <Input\r\n                ref={minDurationRef}\r\n                className={minDurationInvalid ? mergeClasses(customClasses.input, 'invalidInput') : customClasses.input}\r\n                value={minDuration ? minDuration.toString() : ''}\r\n                onChange={(ev, data) => onMinDurationChange(ev, data.value)}\r\n                contentAfter={\r\n                  <div className={customClasses.contentAfter} id={afterMinDurationId}>\r\n                    {i18n.getString(_TL_('s'))}\r\n                  </div>\r\n                }\r\n                aria-labelledby={`${minDurationId} ${afterMinDurationId}`}\r\n                id={minDurationId}\r\n                onKeyDown={onMinDurationKeyUp}\r\n              />\r\n            </div>\r\n            <div className={mergeClasses(customClasses.maxDuration, 'max-duration')}>\r\n              <Label className={customClasses.contentLabel} htmlFor={maxDurationId}>{i18n.getString(_TL_('Max. duration'))}</Label>\r\n              <Input\r\n                ref={maxDurationRef}\r\n                className={maxDurationInvalid ? mergeClasses(customClasses.input, 'invalidInput') : customClasses.input}\r\n                value={maxDuration ? maxDuration.toString() : ''}\r\n                onChange={(ev, data) => onMaxDurationChange(ev, data.value)}\r\n                contentAfter={\r\n                  <div className={customClasses.contentAfter} id={afterMaxDurationId}>\r\n                    {i18n.getString(_TL_('s'))}\r\n                  </div>\r\n                }\r\n                aria-labelledby={`${maxDurationId} ${afterMaxDurationId}`}\r\n                id={maxDurationId}\r\n                onKeyDown={onMaxDurationKeyUp}\r\n              />\r\n            </div>\r\n          </div>\r\n          <MenuDivider />\r\n        </MenuList>\r\n        <div>\r\n          <Button\r\n            className={isSelected ? mergeClasses('clear-button', classes.enabledClearButton) : classes.disabledClearButton}\r\n            disabled={!isSelected}\r\n            appearance=\"transparent\"\r\n            icon={<Dismiss20Regular />}\r\n            onClick={() => clear()}\r\n          >\r\n            {i18n.getString(_TL_('Clear'))}\r\n          </Button>\r\n        </div>\r\n      </PopoverSurface>\r\n    </Popover>\r\n  );\r\n};\r\n\r\n","import React, { useState, useMemo, useCallback, useEffect } from 'react';\r\nimport {\r\n  Menu,\r\n  MenuButton,\r\n  MenuList,\r\n  MenuPopover,\r\n  Button,\r\n  MenuTrigger,\r\n  MenuItemRadio,\r\n  makeStyles,\r\n  MenuDivider,\r\n  tokens,\r\n  mergeClasses,\r\n} from '@fluentui/react-components';\r\nimport {\r\n  Dismiss20Regular,\r\n} from '@fluentui/react-icons';\r\n\r\nconst useStyles = makeStyles({\r\n  menuPopover: {\r\n    minWidth: '180px',\r\n  },\r\n  unselectedMenuButton: {\r\n    '&[aria-expanded=\"false\"]': {\r\n      fontWeight: 'unset',\r\n    },\r\n  },\r\n  enabledClearButton: {\r\n    float: 'right',\r\n    color: tokens.colorNeutralForeground2BrandHover,\r\n  },\r\n  disabledClearButton: {\r\n    float: 'right',\r\n    color: tokens.colorNeutralForegroundDisabled,\r\n  },\r\n});\r\n\r\nexport const ImportSourceFilter = (props) => {\r\n  const {\r\n    className,\r\n    options,\r\n    defaultImportSource,\r\n    onChange,\r\n    forceClear,\r\n    i18n,\r\n    onDismiss,\r\n    defaultOpen = false,\r\n  } = props;\r\n\r\n  const classes = useStyles();\r\n  const name = 'importSource';\r\n  const [checkedValues, setCheckedValues] = useState({\r\n    [name]: [defaultImportSource],\r\n  });\r\n  const [isOpen, setIsOpen] = useState(defaultOpen);\r\n\r\n  const onCheckedValueChange = (e, data) => {\r\n    const {\r\n      checkedItems,\r\n    } = data;\r\n    setCheckedValues(s => ({\r\n      ...s,\r\n      [name]: checkedItems,\r\n    }));\r\n  };\r\n\r\n  const selectedChoice = useMemo(\r\n    () => options.find(r => r.key === checkedValues[name][0]),\r\n    [checkedValues, options]\r\n  );\r\n\r\n  // the string shown on dropdown title\r\n  const dropdownTitle = selectedChoice ? selectedChoice.title : null;\r\n\r\n  // when the X button on dropdown title is clicked\r\n  const onDropdownClear = useCallback(() => {\r\n    if (onChange && defaultImportSource !== null) {\r\n      onChange(null);\r\n    }\r\n  }, [defaultImportSource, onChange]);\r\n\r\n  // when dropdown list is dismissed\r\n  const onDropdownDismiss = useCallback(() => {\r\n    const importSource = checkedValues[name][0];\r\n    if (importSource && onChange && defaultImportSource !== importSource) {\r\n      onChange(importSource);\r\n    }\r\n  }, [checkedValues, defaultImportSource, onChange]);\r\n\r\n  const isSelected = checkedValues[name][0] != null;\r\n\r\n  const onOpenChange = (e, data) => {\r\n    setIsOpen(data.open);\r\n  };\r\n\r\n  const clear = useCallback(() => {\r\n    setIsOpen(false);\r\n    setCheckedValues(() => ({\r\n      [name]: [],\r\n    }));\r\n    onDropdownClear();\r\n    if (onDismiss) {\r\n      onDismiss();\r\n    }\r\n  }, [onDropdownClear, onDismiss]);\r\n\r\n  useEffect(() => {\r\n    if (forceClear) {\r\n      clear();\r\n    }\r\n  // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [forceClear]);\r\n\r\n  useEffect(() => {\r\n    if (!isOpen) {\r\n      onDropdownDismiss();\r\n    }\r\n  }, [isOpen, onDropdownDismiss]);\r\n\r\n  return (\r\n    <div className={className}>\r\n      <Menu open={isOpen} checkedValues={checkedValues} onCheckedValueChange={onCheckedValueChange} hasCheckmarks onOpenChange={onOpenChange}>\r\n        <MenuTrigger disableButtonEnhancement>\r\n          <MenuButton appearance=\"subtle\" className={isSelected ? 'import-source-button' : mergeClasses(classes.unselectedMenuButton, 'import-source-button')}>\r\n            {isSelected ? dropdownTitle : i18n.getString(_TL_('Import source'))}\r\n          </MenuButton>\r\n        </MenuTrigger>\r\n\r\n        <MenuPopover className={mergeClasses(classes.menuPopover, 'import-source-menu')}>\r\n          <MenuList>\r\n            {\r\n              options.map(option => (\r\n                <MenuItemRadio key={option.key} name={name} value={option.key} className={option.icon ? classes.item : ''}>\r\n                  {option.text}\r\n                </MenuItemRadio>\r\n                ))\r\n            }\r\n            <MenuDivider />\r\n            <div>\r\n              <Button\r\n                className={isSelected ? classes.enabledClearButton : classes.disabledClearButton}\r\n                disabled={!isSelected}\r\n                appearance=\"transparent\"\r\n                icon={<Dismiss20Regular />}\r\n                onClick={() => clear()}\r\n              >\r\n                {i18n.getString(_TL_('Clear'))}\r\n              </Button>\r\n            </div>\r\n          </MenuList>\r\n        </MenuPopover>\r\n      </Menu>\r\n    </div>\r\n  );\r\n};\r\n\r\n","/* eslint-disable jsx-a11y/click-events-have-key-events */\r\n/* eslint-disable jsx-a11y/interactive-supports-focus */\r\nimport React, { useRef, useState, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useId, makeStyles, mergeClasses, tokens, shorthands } from '@fluentui/react-components';\r\n\r\n\r\nconst thumbSizeVar = '--thumb-size';\r\nconst railSizeVar = '--rail-size';\r\nconst railColorVar = '--rail-color';\r\nconst progressColorVar = '--progress-color';\r\nconst thumbColorVar = '--thumb-color';\r\n\r\nexport const sliderCSSVars = {\r\n  sliderMinProgressVar: '--slider-min-progress',\r\n  sliderMaxProgressVar: '--slider-max-progress',\r\n};\r\n\r\nconst {\r\n  sliderMinProgressVar,\r\n  sliderMaxProgressVar,\r\n} = sliderCSSVars;\r\n\r\nconst useStyles = makeStyles({\r\n  videoDuration: {\r\n    position: 'relative',\r\n    display: 'inline-flex',\r\n    alignItems: 'center',\r\n    justifyContent: 'left',\r\n  },\r\n  videoDurationScrollbar: {\r\n    position: 'relative',\r\n    display: 'inline-grid',\r\n    touchAction: 'none',\r\n    alignItems: 'center',\r\n    justifyItems: 'center',\r\n    minWidth: '240px',\r\n    // 3x3 grid with the rail and thumb in the center cell [2,2] and the hidden input stretching across all cells\r\n    gridTemplateRows: `1fr var(${thumbSizeVar}) 1fr`,\r\n    gridTemplateColumns: `1fr calc(100% - var(${thumbSizeVar})) 1fr`,\r\n    [thumbSizeVar]: '20px',\r\n    [railSizeVar]: '4px',\r\n    minHeight: '32px',\r\n    marginRight: '8px',\r\n  },\r\n  colors: {\r\n    [railColorVar]: tokens.colorNeutralStrokeAccessible,\r\n    [progressColorVar]: tokens.colorCompoundBrandBackground,\r\n    [thumbColorVar]: tokens.colorCompoundBrandBackground,\r\n    ':hover': {\r\n      [thumbColorVar]: tokens.colorCompoundBrandBackgroundHover,\r\n      [progressColorVar]: tokens.colorCompoundBrandBackgroundHover,\r\n    },\r\n    ':active': {\r\n      [thumbColorVar]: tokens.colorCompoundBrandBackgroundPressed,\r\n      [progressColorVar]: tokens.colorCompoundBrandBackgroundPressed,\r\n    },\r\n    '@media (forced-colors: active)': {\r\n      [railColorVar]: 'CanvasText',\r\n      [thumbColorVar]: 'Highlight',\r\n      [progressColorVar]: 'Highlight',\r\n      ':hover': {\r\n        [thumbColorVar]: 'Highlight',\r\n        [progressColorVar]: 'Highlight',\r\n      },\r\n    },\r\n  },\r\n  rail: {\r\n    ...shorthands.borderRadius(tokens.borderRadiusXLarge),\r\n    gridRowStart: '2',\r\n    gridRowEnd: '2',\r\n    gridColumnStart: '2',\r\n    gridColumnEnd: '2',\r\n    position: 'relative',\r\n    forcedColorAdjust: 'none',\r\n    // Background gradient represents the progress of the slider\r\n    backgroundImage: `linear-gradient(90deg,\r\n      var(${railColorVar}) 0%,\r\n      var(${railColorVar}) var(${sliderMinProgressVar}),\r\n      var(${progressColorVar}) var(${sliderMinProgressVar}),\r\n      var(${progressColorVar}) var(${sliderMaxProgressVar}),\r\n      var(${railColorVar}) var(${sliderMaxProgressVar})\r\n    )`,\r\n    outlineWidth: '1px',\r\n    outlineStyle: 'solid',\r\n    outlineColor: tokens.colorTransparentStroke,\r\n    width: '100%',\r\n    height: `var(${railSizeVar})`,\r\n  },\r\n  thumb: {\r\n    gridRowStart: '2',\r\n    gridRowEnd: '2',\r\n    gridColumnStart: '2',\r\n    gridColumnEnd: '2',\r\n    position: 'absolute',\r\n    width: `var(${thumbSizeVar})`,\r\n    height: `var(${thumbSizeVar})`,\r\n    cursor: 'pointer',\r\n    outlineStyle: 'none',\r\n    forcedColorAdjust: 'none',\r\n    ...shorthands.borderRadius(tokens.borderRadiusCircular),\r\n    boxShadow: `0 0 0 calc(var(${thumbSizeVar}) * .2) ${tokens.colorNeutralBackground1} inset`,\r\n    backgroundColor: `var(${thumbColorVar})`,\r\n    '::before': {\r\n      position: 'absolute',\r\n      top: '0px',\r\n      left: '0px',\r\n      bottom: '0px',\r\n      right: '0px',\r\n      ...shorthands.borderRadius(tokens.borderRadiusCircular),\r\n      boxSizing: 'border-box',\r\n      content: \"''\",\r\n      ...shorthands.border(`calc(var(${thumbSizeVar}) * .05)`, 'solid', tokens.colorNeutralStroke1),\r\n    },\r\n    transform: 'translateX(-50%)',\r\n  },\r\n  rangeInput: {\r\n    gridRowStart: '2',\r\n    gridRowEnd: '-2',\r\n    gridColumnStart: '2',\r\n    gridColumnEnd: '-2',\r\n    pointerEvents: 'none',\r\n    opacity: '0',\r\n    ...shorthands.margin(0),\r\n    ...shorthands.padding(0),\r\n  },\r\n  minRangeInput: {\r\n    '&:focus ~ .video-duration-scrollbar__minThumb::after': {\r\n      content: '\"\"',\r\n      position: 'absolute',\r\n      pointerEvents: 'none',\r\n      zIndex: 1,\r\n\r\n      ...shorthands.border('2px', 'solid', tokens.colorStrokeFocus2),\r\n      ...shorthands.borderRadius(tokens.borderRadiusMedium),\r\n\r\n      top: '-4px',\r\n      right: '-4px',\r\n      bottom: '-4px',\r\n      left: '-4px',\r\n    },\r\n  },\r\n  maxRangeInput: {\r\n    '&:focus ~ .video-duration-scrollbar__maxThumb::after': {\r\n      content: '\"\"',\r\n      position: 'absolute',\r\n      pointerEvents: 'none',\r\n      zIndex: 1,\r\n\r\n      ...shorthands.border('2px', 'solid', tokens.colorStrokeFocus2),\r\n      ...shorthands.borderRadius(tokens.borderRadiusMedium),\r\n\r\n      top: '-4px',\r\n      right: '-4px',\r\n      bottom: '-4px',\r\n      left: '-4px',\r\n    },\r\n  },\r\n  minThumb: {\r\n    left: `var(${sliderMinProgressVar})`,\r\n  },\r\n  maxThumb: {\r\n    left: `var(${sliderMaxProgressVar})`,\r\n  },\r\n});\r\n\r\nconst getPercent = (value, min, max) => (max === min ? 0 : ((value - min) / (max - min)) * 100);\r\n\r\nconst Slider = (props) => {\r\n  const {\r\n    setValue,\r\n    getRelatedValue,\r\n    className,\r\n  } = props;\r\n\r\n  const [isDragging, setIsDragging] = useState(false);\r\n\r\n  const onMouseDown = (e) => {\r\n    if (e.button !== 0) {\r\n      return;\r\n    }\r\n    setIsDragging(true);\r\n    const newValue = getRelatedValue(e);\r\n    setValue(newValue);\r\n    e.stopPropagation();\r\n    e.preventDefault();\r\n  };\r\n\r\n  useEffect(() => {\r\n    if (isDragging) {\r\n      const onMouseMove = (e) => {\r\n        const newValue = getRelatedValue(e);\r\n        setValue(newValue);\r\n      };\r\n      const onMouseUp = (e) => {\r\n        setIsDragging(false);\r\n        const newValue = getRelatedValue(e);\r\n        setValue(newValue, true);\r\n        document.removeEventListener('mousemove', onMouseMove);\r\n        document.removeEventListener('mouseup', onMouseUp);\r\n      };\r\n      document.addEventListener('mousemove', onMouseMove);\r\n      document.addEventListener('mouseup', onMouseUp);\r\n      return () => {\r\n        document.removeEventListener('mousemove', onMouseMove);\r\n        document.removeEventListener('mouseup', onMouseUp);\r\n      };\r\n    }\r\n    return () => {};\r\n  }, [getRelatedValue, isDragging, setValue]);\r\n\r\n  return (\r\n    <div\r\n      role=\"presentation\"\r\n      className={className}\r\n      onMouseDown={(e) => {\r\n        console.log(e);\r\n        onMouseDown(e);\r\n      }}\r\n    />\r\n  );\r\n};\r\n\r\n// input slider for video duration\r\n// two thumbs for min and max duration\r\n// one rail for the range\r\nexport const VideoDurationScrollbarFilter = (props) => {\r\n  const minInputId = useId('min-input');\r\n  const maxInputId = useId('max-input');\r\n  const {\r\n    min,\r\n    max,\r\n    unlimited,\r\n    i18n,\r\n    minDurationFilter,\r\n    maxDurationFilter,\r\n    onChange,\r\n  } = props;\r\n\r\n  const [minValue, setMinValue] = useState(minDurationFilter);\r\n  const [maxValue, setMaxValue] = useState(maxDurationFilter);\r\n  const classes = useStyles();\r\n  const scrollbarRef = useRef();\r\n\r\n  const styleVariables = {\r\n    [sliderMinProgressVar]: (minValue == null ? '0%' : `${getPercent(minValue, min, unlimited)}%`),\r\n    [sliderMaxProgressVar]: (maxValue == null ? '100%' : `${getPercent(maxValue, min, unlimited)}%`),\r\n  };\r\n\r\n  const wrappedSetMinValue = (value, shouldCallOnChange) => {\r\n    const newValue = Math.min(Math.min(maxValue || unlimited, max), Math.max(min, value));\r\n    setMinValue(newValue);\r\n    if (shouldCallOnChange) {\r\n      onChange({ newMinDuration: newValue, newMaxDuration: maxValue });\r\n    }\r\n  };\r\n\r\n  const wrappedSetMaxValue = (value, shouldCallOnChange) => {\r\n    const newValue = Math.min(unlimited, Math.max(minValue || 0, value));\r\n    setMaxValue(newValue);\r\n    if (shouldCallOnChange) {\r\n      onChange({ newMinDuration: minValue, newMaxDuration: newValue });\r\n    }\r\n  };\r\n\r\n  const getRelatedValue = ({\r\n    clientX,\r\n  }) => {\r\n    if (!scrollbarRef.current) {\r\n      return null;\r\n    }\r\n    const scrollbarBox = scrollbarRef.current.getBoundingClientRect();\r\n    const {\r\n      left,\r\n      width,\r\n    } = scrollbarBox;\r\n\r\n    const x = clientX - left;\r\n    return parseInt(Math.min(unlimited, Math.max(min, ((x / width) * (unlimited - min)) + min)), 10);\r\n  };\r\n\r\n  const onClickRail = (e) => {\r\n    const value = getRelatedValue(e);\r\n    if (value != null) {\r\n      // set the min value if the click is closer to the min thumb\r\n      // set the max value if the click is closer to the max thumb\r\n      const minDistance = Math.abs((minValue || 0) - value);\r\n      const maxDistance = Math.abs((maxValue || unlimited) - value);\r\n      if (minDistance < maxDistance) {\r\n        wrappedSetMinValue(value, true);\r\n      } else {\r\n        wrappedSetMaxValue(value, true);\r\n      }\r\n    }\r\n  };\r\n\r\n\r\n  return (\r\n    <div className={mergeClasses('video-duration', classes.videoDuration)}>\r\n      <div ref={scrollbarRef} className={mergeClasses('video-duration-scrollbar', classes.videoDurationScrollbar, classes.colors)} style={styleVariables}>\r\n        <input\r\n          type=\"range\"\r\n          min={min}\r\n          max={unlimited}\r\n          value={minValue}\r\n          id={minInputId}\r\n          className={mergeClasses(classes.rangeInput, classes.minRangeInput, 'min-value')}\r\n          onChange={(e) => {\r\n            wrappedSetMinValue(parseInt(e.target.value, 10), true);\r\n          }}\r\n          aria-label={i18n.getString(_TL_('Min value: {{ value }}'), { value: minValue })}\r\n        />\r\n        <input\r\n          type=\"range\"\r\n          min={min}\r\n          max={unlimited}\r\n          value={maxValue}\r\n          id={maxInputId}\r\n          className={mergeClasses(classes.rangeInput, classes.maxRangeInput, 'max-value')}\r\n          onChange={(e) => {\r\n            wrappedSetMaxValue(parseInt(e.target.value, 10), true);\r\n          }}\r\n          aria-label={i18n.getString(_TL_('Max value: {{ value }}'), { value: maxValue > max ? 'unlimited' : maxValue })}\r\n        />\r\n        <div\r\n          role=\"presentation\"\r\n          className={mergeClasses('video-duration-scrollbar__rail', classes.rail)}\r\n          onClick={(e) => {\r\n            onClickRail(e);\r\n          }}\r\n        />\r\n        <Slider\r\n          value={minValue}\r\n          setValue={wrappedSetMinValue}\r\n          getRelatedValue={getRelatedValue}\r\n          className={mergeClasses('video-duration-scrollbar__minThumb', classes.minThumb, classes.thumb)}\r\n        />\r\n        <Slider\r\n          value={maxValue}\r\n          setValue={wrappedSetMaxValue}\r\n          getRelatedValue={getRelatedValue}\r\n          className={mergeClasses('video-duration-scrollbar__maxThumb', classes.maxThumb, classes.thumb)}\r\n        />\r\n      </div>\r\n      <div className=\"range-text\">\r\n        {maxValue > max || maxValue == null ? `≥${i18n.getString(_TL_('{{ min }} seconds'), {\r\n          min: minValue,\r\n        })}` : i18n.getString(_TL_('{{ min }}-{{ max }} seconds'), {\r\n          min: minValue,\r\n          max: maxValue,\r\n        })}\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\n\r\nVideoDurationScrollbarFilter.propTypes = {\r\n  min: PropTypes.number,\r\n  max: PropTypes.number,\r\n  unlimited: PropTypes.number,\r\n  i18n: PropTypes.shape({}).isRequired,\r\n};\r\n\r\nVideoDurationScrollbarFilter.defaultProps = {\r\n  min: 0,\r\n  max: 120,\r\n  unlimited: 121,\r\n};\r\n","import React from 'react';\r\nimport {\r\n  ToggleButton,\r\n  makeStyles,\r\n  mergeClasses,\r\n} from '@fluentui/react-components';\r\nimport {\r\n  Filter20Regular,\r\n} from '@fluentui/react-icons';\r\n\r\nconst useStyles = makeStyles({\r\n  toggleButton: {\r\n    minWidth: 'unset',\r\n  },\r\n});\r\n\r\nexport const FilterToggleButton = (props) => {\r\n  const {\r\n    i18n,\r\n    className,\r\n    onClick,\r\n    checked,\r\n  } = props;\r\n\r\n  const classes = useStyles();\r\n  const text = i18n.getString(_TL_('Filter'));\r\n\r\n  return (\r\n    <div className={className}>\r\n      <ToggleButton\r\n        key=\"filter\"\r\n        className={mergeClasses('filter-toggle-button', classes.toggleButton)}\r\n        checked={checked}\r\n        icon={<Filter20Regular />}\r\n        onClick={() => {\r\n          onClick();\r\n        }}\r\n      >\r\n        {text}\r\n      </ToggleButton>\r\n    </div>\r\n  );\r\n};\r\n","import { useCallback, useState, useMemo } from 'react';\r\nimport { getCivilDateToday } from '@bingads-webui-universal/temporal-utitlities';\r\nimport {\r\n  getDateAddedChoiceOptions,\r\n  CSMLTimeFrame,\r\n} from '../../../model';\r\nimport {\r\n  civilDateRangeEqual,\r\n  civilDateRangeToDebugString,\r\n} from '../../../utils';\r\n\r\nconst yesterday = getCivilDateToday().plus({ days: -1 });\r\nconst DEFAULT_RANGE = { start: yesterday, end: yesterday };\r\n\r\nexport const useDateAddedState = ({\r\n  logger,\r\n  i18n,\r\n  ianaTimeZone,\r\n  handleUsage,\r\n}) => {\r\n  const [dateAddedFilter, setDateAddedFilter] = useState(CSMLTimeFrame.Anytime);\r\n  // date range user selected for 'Custom'\r\n  const [dateAddedFilterCustomDateRange, setDateAddedFilterCustomDateRange] = useState(DEFAULT_RANGE);\r\n\r\n  const dateAddedChoiceOptions = useMemo(\r\n    () => getDateAddedChoiceOptions(i18n, ianaTimeZone),\r\n    [i18n, ianaTimeZone]\r\n  );\r\n\r\n  const onDateAddedFilterChange = useCallback(({ timeframe: tf, customDateRange: cdr }) => {\r\n    if (tf !== dateAddedFilter) {\r\n      logger.logTrace('onDateAddedFilterChange', { dateAddedFilter: tf });\r\n      setDateAddedFilter(tf);\r\n      if (handleUsage) {\r\n        handleUsage();\r\n      }\r\n    }\r\n    if (!civilDateRangeEqual(cdr, dateAddedFilterCustomDateRange)) {\r\n      logger.logTrace('onDateAddedFilterChange', { customDateRange: civilDateRangeToDebugString(cdr) });\r\n      setDateAddedFilterCustomDateRange(cdr);\r\n      if (handleUsage) {\r\n        handleUsage();\r\n      }\r\n    }\r\n  }, [dateAddedFilter, dateAddedFilterCustomDateRange, handleUsage, logger]);\r\n\r\n  return {\r\n    dateAddedChoiceOptions,\r\n    dateAddedFilter,\r\n    dateAddedFilterCustomDateRange,\r\n    onDateAddedFilterChange,\r\n  };\r\n};\r\n","import React from 'react';\r\n\r\nexport const FilterContext = React.createContext({});\r\n\r\n","import { useMemo, useContext, useEffect } from 'react';\r\nimport {\r\n  useAdditionalFilterBarState,\r\n  useAssetTypeState,\r\n  useSearchBoxState,\r\n  useSortByState,\r\n  useDateAddedState,\r\n  useImportSourceState,\r\n  useAssetSourcesState,\r\n  useImageSizeState,\r\n  useVideoDurationState,\r\n} from './components/state';\r\nimport {\r\n  FilterContext,\r\n} from './context/filter-context';\r\nimport {\r\n  CSMLTimeFrame,\r\n} from '../model';\r\n\r\nexport const useFilterBarState = ({\r\n  logger,\r\n  i18n,\r\n  userPreference,\r\n  defaultSearchText,\r\n  defaultMinVideoDuration,\r\n  defaultMaxVideoDuration,\r\n}) => {\r\n  const {\r\n    setFilterBar,\r\n  } = useContext(FilterContext);\r\n\r\n  const {\r\n    toggleFilterBar,\r\n    showAdditionalFilterBar,\r\n  } = useAdditionalFilterBarState({ logger });\r\n\r\n  const {\r\n    toggleAssetType,\r\n    assetTypesState,\r\n    assetTypes,\r\n    isImageSelected,\r\n    isVideoSelected,\r\n  } = useAssetTypeState({ logger, i18n });\r\n\r\n  const {\r\n    searchText,\r\n    onSearchTextChanging,\r\n    onSearchTextBlur,\r\n    onSearchTextChange,\r\n    onSearchTextClear,\r\n  } = useSearchBoxState({ logger, defaultSearchText });\r\n\r\n  const {\r\n    sortBy,\r\n    sortingOptions,\r\n    setSortBy,\r\n    onSortByChange,\r\n  } = useSortByState({ logger, i18n, userPreference });\r\n\r\n  const {\r\n    dateAddedChoiceOptions,\r\n    dateAddedFilter,\r\n    dateAddedFilterCustomDateRange,\r\n    onDateAddedFilterChange,\r\n  } = useDateAddedState({ logger, i18n });\r\n\r\n  const {\r\n    assetSources,\r\n    assetSourceOptions,\r\n    onAssetSourceFilterChange,\r\n  } = useAssetSourcesState({ logger, i18n });\r\n\r\n  const {\r\n    importSource,\r\n    importSourceOptions,\r\n    onImportSourceFilterChange,\r\n  } = useImportSourceState({ logger, i18n });\r\n\r\n  const {\r\n    minWidthFilter,\r\n    minHeightFilter,\r\n    onImageSizeFilterChange,\r\n  } = useImageSizeState({ logger, i18n });\r\n\r\n  const {\r\n    minDurationFilter,\r\n    maxDurationFilter,\r\n    onVideoDurationFilterChange,\r\n  } = useVideoDurationState({\r\n    logger,\r\n    i18n,\r\n    defaultMinVideoDuration,\r\n    defaultMaxVideoDuration,\r\n  });\r\n\r\n  const isDateAddedFilterActive = dateAddedFilter !== CSMLTimeFrame.Anytime;\r\n  const isImportSourceFilterActive = importSource !== null;\r\n  const isAssetSourceFilterActive = assetSources.length > 0;\r\n\r\n  const isAdditionalFilterActive = useMemo(\r\n    () => {\r\n      if (isImageSelected) {\r\n        if (minWidthFilter || minHeightFilter) {\r\n          return true;\r\n        }\r\n      }\r\n      if (isVideoSelected) {\r\n        if (minDurationFilter || maxDurationFilter) {\r\n          return true;\r\n        }\r\n      }\r\n      return isDateAddedFilterActive || isImportSourceFilterActive || isAssetSourceFilterActive;\r\n    },\r\n    [isAssetSourceFilterActive,\r\n      isDateAddedFilterActive,\r\n      isImageSelected,\r\n      isImportSourceFilterActive, isVideoSelected, maxDurationFilter, minDurationFilter, minHeightFilter, minWidthFilter]\r\n  );\r\n\r\n  useEffect(() => {\r\n    setFilterBar({\r\n      getFilters: () =>\r\n        ({\r\n          isImageSelected,\r\n          isVideoSelected,\r\n          assetTypesState,\r\n          searchText,\r\n          sortBy,\r\n          dateAddedFilter,\r\n          dateAddedFilterCustomDateRange,\r\n          importSource,\r\n          assetSources,\r\n          minWidthFilter,\r\n          minHeightFilter,\r\n          minDurationFilter,\r\n          maxDurationFilter,\r\n        }),\r\n    });\r\n  }, [assetSources, assetTypesState, dateAddedFilter, dateAddedFilterCustomDateRange, importSource,\r\n    isImageSelected, isVideoSelected, maxDurationFilter, minDurationFilter, minHeightFilter, minWidthFilter, searchText, setFilterBar, sortBy]);\r\n\r\n  return {\r\n    toggleFilterBar,\r\n    showAdditionalFilterBar,\r\n    isAdditionalFilterActive,\r\n    toggleAssetType,\r\n    isImageSelected,\r\n    isVideoSelected,\r\n    assetTypesState,\r\n    assetTypes,\r\n    // Search box state\r\n    searchText,\r\n    onSearchTextChanging,\r\n    onSearchTextBlur,\r\n    onSearchTextChange,\r\n    onSearchTextClear,\r\n    // Sort by state\r\n    sortBy,\r\n    sortingOptions,\r\n    setSortBy,\r\n    onSortByChange,\r\n    // Date added state\r\n    dateAddedChoiceOptions,\r\n    dateAddedFilter,\r\n    dateAddedFilterCustomDateRange,\r\n    onDateAddedFilterChange,\r\n    // Import source state\r\n    importSource,\r\n    importSourceOptions,\r\n    onImportSourceFilterChange,\r\n    // Asset source state\r\n    assetSources,\r\n    assetSourceOptions,\r\n    onAssetSourceFilterChange,\r\n    // Image size state\r\n    minWidthFilter,\r\n    minHeightFilter,\r\n    onImageSizeFilterChange,\r\n    // Video duration state\r\n    minDurationFilter,\r\n    maxDurationFilter,\r\n    onVideoDurationFilterChange,\r\n  };\r\n};\r\n","import { useState } from 'react';\r\n\r\nexport const useAdditionalFilterBarState = ({ logger, handleUsage }) => {\r\n  const [showAdditionalFilterBar, setShowAdditionalFilterBar] = useState(false);\r\n  const toggleFilterBar = () => {\r\n    logger.logTrace('toggle the filter bar', { showAdditionalFilterBar: !showAdditionalFilterBar });\r\n    if (handleUsage) {\r\n      handleUsage();\r\n    }\r\n    setShowAdditionalFilterBar(!showAdditionalFilterBar);\r\n  };\r\n\r\n  return {\r\n    toggleFilterBar,\r\n    showAdditionalFilterBar,\r\n  };\r\n};\r\n","import { useState, } from 'react';\r\nimport { getAssetTypeOptions } from '../../../model/get-asset-type-options';\r\nimport { FolderAssetType } from '../../../model/constants';\r\n\r\nexport const useAssetTypeState = ({ i18n, logger, handleUsage }) => {\r\n  const assetTypes = getAssetTypeOptions(i18n);\r\n\r\n  const [assetTypesState, setAssetTypesState] = useState(() => {\r\n    const initialState = {};\r\n    assetTypes.forEach((option) => {\r\n      initialState[option.key] = false;\r\n    });\r\n    initialState[FolderAssetType.All] = true;\r\n    return initialState;\r\n  });\r\n\r\n  const toggleAssetType = (key) => {\r\n    const newAssetTypesState = {};\r\n    assetTypes.forEach((option) => {\r\n      const { key: optionKey } = option;\r\n      if (optionKey === key) {\r\n        newAssetTypesState[optionKey] = !assetTypesState[optionKey];\r\n      } else {\r\n        newAssetTypesState[optionKey] = false;\r\n      }\r\n    });\r\n    if (newAssetTypesState[key] === false) {\r\n      newAssetTypesState[FolderAssetType.All] = true;\r\n    }\r\n    logger.logTrace('toggle the media type assetTypes', { assetTypesState: newAssetTypesState });\r\n    if (handleUsage) {\r\n      handleUsage();\r\n    }\r\n    setAssetTypesState(newAssetTypesState);\r\n  };\r\n\r\n  const isImageSelected = assetTypesState[FolderAssetType.Image];\r\n  const isVideoSelected = assetTypesState[FolderAssetType.Video];\r\n\r\n  return {\r\n    toggleAssetType,\r\n    assetTypesState,\r\n    assetTypes,\r\n    isImageSelected,\r\n    isVideoSelected,\r\n  };\r\n};\r\n","import _ from 'underscore';\r\nimport { useCallback, useState, useRef, } from 'react';\r\n\r\nexport const useSearchBoxState = ({ logger, handleUsage, defaultSearchText = '' }) => {\r\n  const [searchText, setSearchText] = useState(defaultSearchText);\r\n  const searchTextValueRef = useRef('');\r\n  const onSearchTextChanging = useCallback((evt, newValue) => {\r\n    searchTextValueRef.current = newValue || '';\r\n  }, []);\r\n\r\n  const onSearchTextBlur = useCallback(() => {\r\n    setSearchText(searchTextValueRef.current);\r\n  }, []);\r\n\r\n  const onSearchTextChange = useCallback((newValue) => {\r\n    if (newValue !== searchText) {\r\n      logger.logTrace('start searching text', { searchText: newValue });\r\n      setSearchText(newValue);\r\n    }\r\n    if (handleUsage) {\r\n      handleUsage();\r\n    }\r\n  }, [logger, searchText, handleUsage]);\r\n\r\n  const onSearchTextClear = useCallback(() => {\r\n    if (!_.isEmpty(searchText)) {\r\n      logger.logTrace('start searching text', { searchText: '<empty>' });\r\n      setSearchText('');\r\n      searchTextValueRef.current = '';\r\n    }\r\n  }, [logger, searchText]);\r\n\r\n  return {\r\n    searchText,\r\n    onSearchTextChanging,\r\n    onSearchTextBlur,\r\n    onSearchTextChange,\r\n    onSearchTextClear,\r\n  };\r\n};\r\n","import _ from 'underscore';\r\nimport { useCallback, useState, useMemo, useEffect } from 'react';\r\nimport {\r\n  CSMLSortBy, getSortingOptions,\r\n} from '../../../model';\r\n\r\nexport const useSortByState = ({\r\n  logger,\r\n  i18n,\r\n  handleUsage,\r\n  userPreference,\r\n}) => {\r\n  const [sortBy, setSortBy] = useState(() => {\r\n    if (userPreference && userPreference.sortBy) {\r\n      return userPreference.sortBy;\r\n    }\r\n    return CSMLSortBy.MostRecent;\r\n  });\r\n\r\n  useEffect(() => {\r\n    if (userPreference && userPreference.sortBy) {\r\n      setSortBy(userPreference.sortBy);\r\n    }\r\n  }, [setSortBy, userPreference]);\r\n\r\n  const sortingOptions = useMemo(\r\n    () => getSortingOptions(i18n),\r\n    [i18n]\r\n  );\r\n\r\n  const safeSetSortBy = useCallback((newVal) => {\r\n    const allSortByOptions = Object.values(CSMLSortBy);\r\n    let safeNewValue = CSMLSortBy.MostRecent; // default value\r\n    if (_.contains(allSortByOptions, newVal)) {\r\n      safeNewValue = newVal;\r\n    }\r\n    setSortBy(safeNewValue);\r\n    return safeNewValue;\r\n  }, []);\r\n\r\n  const onSortByChange = useCallback((_evt, item) => {\r\n    if (item) {\r\n      const newVal = safeSetSortBy(item.key);\r\n      logger.logTrace('onSortByChange', { sortby: newVal });\r\n      if (userPreference) {\r\n        // save preferences\r\n        userPreference.setSortBy(newVal);\r\n      }\r\n      if (handleUsage) {\r\n        handleUsage();\r\n      }\r\n    } else {\r\n      // shouldn't happen\r\n      logger.logError('onSortByChange, invalid key');\r\n    }\r\n  }, [safeSetSortBy, logger, userPreference, handleUsage]);\r\n\r\n  return {\r\n    sortBy,\r\n    sortingOptions,\r\n    setSortBy: safeSetSortBy,\r\n    onSortByChange,\r\n  };\r\n};\r\n\r\n","import _ from 'underscore';\r\nimport { useCallback, useState, useMemo } from 'react';\r\nimport {\r\n  getAssetSourceOptions,\r\n} from '../../../model';\r\n\r\nexport const useAssetSourcesState = ({\r\n  logger,\r\n  i18n,\r\n  handleUsage,\r\n  disabledAssetSources = [],\r\n}) => {\r\n  const [assetSources, setAssetSources] = useState([]);\r\n\r\n  const assetSourceOptions = useMemo(() => {\r\n    const options = getAssetSourceOptions(i18n);\r\n    if (!_.isEmpty(disabledAssetSources)) {\r\n      return options.filter(({ key }) => !disabledAssetSources.includes(key));\r\n    }\r\n\r\n    return options;\r\n  }, [disabledAssetSources, i18n]);\r\n\r\n  const onAssetSourceFilterChange = useCallback((newAssetSources) => {\r\n    if (!_.isEqual(assetSources, newAssetSources)) {\r\n      setAssetSources(newAssetSources);\r\n      logger.logTrace('onAssetSourceFilterChange', { assetSources: (assetSources || []).join(',') });\r\n      if (handleUsage) {\r\n        handleUsage();\r\n      }\r\n    }\r\n  }, [assetSources, handleUsage, logger]);\r\n\r\n  return {\r\n    assetSources,\r\n    assetSourceOptions,\r\n    onAssetSourceFilterChange,\r\n  };\r\n};\r\n","import { useCallback, useState, useMemo } from 'react';\r\nimport {\r\n  getImportSourceOptions,\r\n} from '../../../model';\r\n\r\nexport const useImportSourceState = ({\r\n  logger,\r\n  i18n,\r\n  handleUsage,\r\n}) => {\r\n  const [importSource, setImportSource] = useState(null);\r\n\r\n  const importSourceOptions = useMemo(() => getImportSourceOptions(i18n), [i18n]);\r\n\r\n  const onImportSourceFilterChange = useCallback((newImportSource) => {\r\n    if (importSource !== newImportSource) {\r\n      setImportSource(newImportSource);\r\n      logger.logTrace('onImportSourceFilterChange', { importSource: newImportSource });\r\n      if (handleUsage) {\r\n        handleUsage();\r\n      }\r\n    }\r\n  }, [handleUsage, importSource, logger]);\r\n\r\n  return {\r\n    importSource,\r\n    importSourceOptions,\r\n    onImportSourceFilterChange,\r\n  };\r\n};\r\n","import { useCallback, useState } from 'react';\r\n\r\nexport const useImageSizeState = ({\r\n  logger, handleUsage,\r\n}) => {\r\n  const [minWidthFilter, setMinWidthFilter] = useState(null);\r\n  const [minHeightFilter, setMinHeightFilter] = useState(null);\r\n\r\n  const onImageSizeFilterChange = useCallback(({ newMinWidth, newMinHeight }) => {\r\n    if (newMinWidth !== minWidthFilter) {\r\n      logger.logTrace('onImageSizeFilterChange', { minWidth: newMinWidth });\r\n      setMinWidthFilter(newMinWidth);\r\n      if (handleUsage) {\r\n        handleUsage();\r\n      }\r\n    }\r\n    if (newMinHeight !== minHeightFilter) {\r\n      logger.logTrace('onImageSizeFilterChange', { minHeight: newMinHeight });\r\n      setMinHeightFilter(newMinHeight);\r\n      if (handleUsage) {\r\n        handleUsage();\r\n      }\r\n    }\r\n  }, [handleUsage, logger, minHeightFilter, minWidthFilter]);\r\n\r\n  return {\r\n    minWidthFilter,\r\n    minHeightFilter,\r\n    onImageSizeFilterChange,\r\n  };\r\n};\r\n","import { useCallback, useState } from 'react';\r\n\r\nexport const useVideoDurationState = ({\r\n  logger,\r\n  handleUsage,\r\n  defaultMinVideoDuration = null,\r\n  defaultMaxVideoDuration = null,\r\n}) => {\r\n  const [minDurationFilter, setMinDurationFilter] = useState(defaultMinVideoDuration);\r\n  const [maxDurationFilter, setMaxDurationFilter] = useState(defaultMaxVideoDuration);\r\n\r\n  const onVideoDurationFilterChange = useCallback(({ newMinDuration, newMaxDuration }) => {\r\n    if (newMinDuration !== minDurationFilter) {\r\n      logger.logTrace('onVideoDurationFilterChange', { minDuration: newMinDuration });\r\n      setMinDurationFilter(newMinDuration);\r\n      if (handleUsage) {\r\n        handleUsage();\r\n      }\r\n    }\r\n    if (newMaxDuration !== maxDurationFilter) {\r\n      logger.logTrace('onVideoDurationFilterChange', { maxDuration: newMaxDuration });\r\n      setMaxDurationFilter(newMaxDuration);\r\n      if (handleUsage) {\r\n        handleUsage();\r\n      }\r\n    }\r\n  }, [handleUsage, logger, maxDurationFilter, minDurationFilter]);\r\n\r\n  return {\r\n    minDurationFilter,\r\n    maxDurationFilter,\r\n    onVideoDurationFilterChange,\r\n  };\r\n};\r\n","// Two level of filter bars\r\nimport React, { useState } from 'react';\r\nimport {\r\n  FluentProvider,\r\n  Label,\r\n  webLightTheme,\r\n  makeResetStyles,\r\n  makeStyles,\r\n  shorthands,\r\n  useId,\r\n  tokens,\r\n  Button,\r\n  mergeClasses,\r\n} from '@fluentui/react-components';\r\nimport {\r\n  Dismiss20Regular,\r\n} from '@fluentui/react-icons';\r\nimport {\r\n  CSMLVideoDuration,\r\n} from '../model';\r\nimport {\r\n  NewDropDown,\r\n  AssetTypeToggleButtonsFilter,\r\n  SearchBoxFilter,\r\n  FilterToggleButton,\r\n  ImageSizeFilter,\r\n  VideoDurationFilter,\r\n  AssetSourceFilter,\r\n  ImportSourceFilter,\r\n  DateAddedFilter,\r\n  SortByFilter,\r\n  VideoDurationScrollbarFilter,\r\n} from './components';\r\nimport {\r\n  useFilterBarState,\r\n} from './filter-bar-state';\r\n\r\nconst useFilterBarStyles = makeStyles({\r\n  filterBar: {\r\n    display: 'flex',\r\n    columnGap: '8px',\r\n    rowGap: '8px',\r\n    flexWrap: 'wrap',\r\n    '& button': {\r\n      whiteSpace: 'nowrap',\r\n    },\r\n  },\r\n  remaining: {\r\n    flexGrow: 1,\r\n  },\r\n});\r\n\r\nconst useBaseAdditionalFilterBarStyles = makeResetStyles({\r\n  marginTop: '12px',\r\n  display: 'flex',\r\n  columnGap: '8px',\r\n  rowGap: '8px',\r\n  flexWrap: 'wrap',\r\n  '& button': {\r\n    whiteSpace: 'nowrap',\r\n    color: tokens.colorNeutralForeground2,\r\n  },\r\n  ...shorthands.borderRadius('4px'),\r\n  ...shorthands.border('1px', 'solid', '#F1F1F1'),\r\n  ...shorthands.padding('8px', '16px'),\r\n  boxShadow: '0px 1px 4px 0px rgba(0, 0, 0, 0.15)',\r\n  alignItems: 'center',\r\n  '& button.clearButton': {\r\n    '&:hover': {\r\n      fontWeight: tokens.fontWeightSemibold,\r\n    },\r\n    color: tokens.colorNeutralForeground2BrandHover,\r\n    fontWeight: 'unset',\r\n  },\r\n});\r\n\r\nconst useAdditionalFilterBarStyles = makeStyles({\r\n  hide: {\r\n    display: 'none',\r\n  },\r\n  remaining: {\r\n    flexGrow: 1,\r\n  },\r\n  filterText: {\r\n    width: '60px',\r\n  },\r\n});\r\n\r\nconst AdditionalFilterBar = (props) => {\r\n  const {\r\n    i18n,\r\n    isSelected,\r\n    isImageSelected,\r\n    isVideoSelected,\r\n    logger,\r\n    timeZone,\r\n    dateFormat,\r\n    dateAddedChoiceOptions,\r\n    dateAddedFilter,\r\n    dateAddedFilterCustomDateRange,\r\n    onDateAddedFilterChange,\r\n    showAdditionalFilterBar,\r\n    isAdsStudioAIGCMVPEnabled,\r\n    importSource,\r\n    importSourceOptions,\r\n    onImportSourceFilterChange,\r\n    assetSources,\r\n    assetSourceOptions,\r\n    onAssetSourceFilterChange,\r\n    minWidthFilter,\r\n    minHeightFilter,\r\n    onImageSizeFilterChange,\r\n    minDurationFilter,\r\n    maxDurationFilter,\r\n    onVideoDurationFilterChange,\r\n  } = props;\r\n\r\n  const baseClasses = useBaseAdditionalFilterBarStyles();\r\n  const classes = useAdditionalFilterBarStyles();\r\n  const filterId = useId('filter');\r\n  const [forceClear, setForceClear] = useState(0);\r\n\r\n  return (\r\n    <div\r\n      className={showAdditionalFilterBar ? mergeClasses('additional-filter-bar', baseClasses) : mergeClasses('hided-additional-filter-bar', baseClasses, classes.hide)}\r\n      role=\"group\"\r\n      aria-labelledby={filterId}\r\n    >\r\n      <Label className={classes.filterText} id={filterId}>{i18n.getString(_TL_('Filters'))}</Label>\r\n      <div className={isImageSelected ? 'image-size-filter' : classes.hide}>\r\n        <ImageSizeFilter\r\n          i18n={i18n}\r\n          logger={logger}\r\n          defaultMinWidth={minWidthFilter}\r\n          defaultMinHeight={minHeightFilter}\r\n          onChange={onImageSizeFilterChange}\r\n          forceClear={forceClear}\r\n        />\r\n      </div>\r\n      <div className={isVideoSelected ? 'video-duration-filter' : classes.hide}>\r\n        <VideoDurationFilter\r\n          i18n={i18n}\r\n          logger={logger}\r\n          defaultMaxDuration={maxDurationFilter}\r\n          defaultMinDuration={minDurationFilter}\r\n          onChange={onVideoDurationFilterChange}\r\n          forceClear={forceClear}\r\n        />\r\n      </div>\r\n      <DateAddedFilter\r\n        i18n={i18n}\r\n        logger={logger}\r\n        timeZone={timeZone}\r\n        dateFormat={dateFormat}\r\n        defaultTimeFrame={dateAddedFilter}\r\n        defaultCustomDateRange={dateAddedFilterCustomDateRange}\r\n        options={dateAddedChoiceOptions}\r\n        onChange={onDateAddedFilterChange}\r\n        forceClear={forceClear}\r\n      />\r\n      {isAdsStudioAIGCMVPEnabled &&\r\n        <AssetSourceFilter\r\n          i18n={i18n}\r\n          logger={logger}\r\n          defaultSelectedAssetSources={assetSources}\r\n          options={assetSourceOptions}\r\n          onChange={onAssetSourceFilterChange}\r\n          forceClear={forceClear}\r\n        />}\r\n      {!isAdsStudioAIGCMVPEnabled &&\r\n        <ImportSourceFilter\r\n          i18n={i18n}\r\n          logger={logger}\r\n          forceClear={forceClear}\r\n          importSource={importSource}\r\n          options={importSourceOptions}\r\n          onChange={onImportSourceFilterChange}\r\n        />}\r\n      {isSelected &&\r\n      <Button\r\n        className=\"clearButton\"\r\n        appearance=\"transparent\"\r\n        icon={<Dismiss20Regular />}\r\n        onClick={() => {\r\n          setForceClear(forceClear + 1);\r\n        }}\r\n      >\r\n        {i18n.getString(_TL_('Clear all'))}\r\n      </Button>}\r\n      <div className={classes.remaining} />\r\n    </div>\r\n  );\r\n};\r\n\r\nexport const VideosFilterBar = (props) => {\r\n  const {\r\n    i18n,\r\n    logger,\r\n    defaultSearchText,\r\n    searchboxPlaceHolder,\r\n    userPreference,\r\n    defaultMinVideoDuration,\r\n    defaultMaxVideoDuration,\r\n  } = props;\r\n\r\n  const classes = useFilterBarStyles();\r\n  const {\r\n    onSearchTextChanging,\r\n    onSearchTextBlur,\r\n    onSearchTextChange,\r\n    onSearchTextClear,\r\n    sortBy,\r\n    sortingOptions,\r\n    onSortByChange,\r\n    minDurationFilter,\r\n    maxDurationFilter,\r\n    onVideoDurationFilterChange,\r\n  } = useFilterBarState({\r\n    logger,\r\n    i18n,\r\n    userPreference,\r\n    defaultSearchText,\r\n    defaultMinVideoDuration,\r\n    defaultMaxVideoDuration,\r\n  });\r\n\r\n  return (\r\n    <FluentProvider theme={webLightTheme}>\r\n      <div className={classes.filterBar}>\r\n        <SearchBoxFilter\r\n          i18n={i18n}\r\n          logger={logger}\r\n          onSearchTextChanging={onSearchTextChanging}\r\n          onSearchTextChange={onSearchTextChange}\r\n          onSearchTextBlur={onSearchTextBlur}\r\n          onSearchTextClear={onSearchTextClear}\r\n          defaultSearchText={defaultSearchText}\r\n          searchboxPlaceHolder={searchboxPlaceHolder}\r\n        />\r\n        <VideoDurationScrollbarFilter\r\n          i18n={i18n}\r\n          min={CSMLVideoDuration.min}\r\n          max={CSMLVideoDuration.max}\r\n          minDurationFilter={minDurationFilter}\r\n          maxDurationFilter={maxDurationFilter}\r\n          onChange={onVideoDurationFilterChange}\r\n          unlimited={CSMLVideoDuration.unlimited}\r\n        />\r\n        <div className={classes.remaining} />\r\n        <SortByFilter\r\n          i18n={i18n}\r\n          logger={logger}\r\n          options={sortingOptions}\r\n          onChange={onSortByChange}\r\n          sortBy={sortBy}\r\n        />\r\n      </div>\r\n    </FluentProvider>\r\n  );\r\n};\r\n\r\nexport const ImagesFilterBar = (props) => {\r\n  const {\r\n    i18n,\r\n    logger,\r\n    defaultSearchText,\r\n    userPreference,\r\n    searchboxPlaceHolder,\r\n  } = props;\r\n\r\n  const classes = useFilterBarStyles();\r\n  const {\r\n    onSearchTextChanging,\r\n    onSearchTextBlur,\r\n    onSearchTextChange,\r\n    onSearchTextClear,\r\n    sortBy,\r\n    sortingOptions,\r\n    onSortByChange,\r\n  } = useFilterBarState({\r\n    logger,\r\n    i18n,\r\n    userPreference,\r\n    defaultSearchText,\r\n  });\r\n\r\n  return (\r\n    <FluentProvider theme={webLightTheme}>\r\n      <div className={classes.filterBar}>\r\n        <SearchBoxFilter\r\n          i18n={i18n}\r\n          logger={logger}\r\n          onSearchTextChanging={onSearchTextChanging}\r\n          onSearchTextChange={onSearchTextChange}\r\n          onSearchTextBlur={onSearchTextBlur}\r\n          onSearchTextClear={onSearchTextClear}\r\n          defaultSearchText={defaultSearchText}\r\n          searchboxPlaceHolder={searchboxPlaceHolder}\r\n        />\r\n        <div className={classes.remaining} />\r\n        <SortByFilter\r\n          i18n={i18n}\r\n          logger={logger}\r\n          options={sortingOptions}\r\n          onChange={onSortByChange}\r\n          sortBy={sortBy}\r\n        />\r\n      </div>\r\n    </FluentProvider>\r\n  );\r\n};\r\n\r\nexport const LibraryFilterBar = (props) => {\r\n  const {\r\n    i18n,\r\n    logger,\r\n    ianaTimeZone,\r\n    dateFormat,\r\n    defaultSearchText,\r\n    searchboxPlaceHolder,\r\n    isAdsStudioAIGCMVPEnabled,\r\n    onUploadLocalFileClick,\r\n    onUploadLocalFolderClick,\r\n    onUploadImageClick,\r\n    onUploadVideoClick,\r\n    onAIGenerateClick,\r\n    onCreateFolderClick,\r\n    userPreference,\r\n  } = props;\r\n\r\n  const classes = useFilterBarStyles();\r\n  // Filter state change will trigger useEffect reload\r\n  const {\r\n    assetTypes,\r\n    assetTypesState,\r\n    toggleAssetType,\r\n    toggleFilterBar,\r\n    showAdditionalFilterBar,\r\n    isAdditionalFilterActive,\r\n    isImageSelected,\r\n    isVideoSelected,\r\n    onSearchTextChanging,\r\n    onSearchTextBlur,\r\n    onSearchTextChange,\r\n    onSearchTextClear,\r\n    sortBy,\r\n    sortingOptions,\r\n    onSortByChange,\r\n    dateAddedChoiceOptions,\r\n    dateAddedFilter,\r\n    dateAddedFilterCustomDateRange,\r\n    onDateAddedFilterChange,\r\n    importSource,\r\n    importSourceOptions,\r\n    onImportSourceFilterChange,\r\n    assetSources,\r\n    assetSourceOptions,\r\n    onAssetSourceFilterChange,\r\n    minWidthFilter,\r\n    minHeightFilter,\r\n    onImageSizeFilterChange,\r\n    minDurationFilter,\r\n    maxDurationFilter,\r\n    onVideoDurationFilterChange,\r\n  } = useFilterBarState({\r\n    logger,\r\n    i18n,\r\n    userPreference,\r\n    defaultSearchText,\r\n  });\r\n\r\n  return (\r\n    <FluentProvider theme={webLightTheme}>\r\n      <div className={classes.filterBar}>\r\n        <NewDropDown\r\n          onUploadLocalFileClick={onUploadLocalFileClick}\r\n          onUploadLocalFolderClick={onUploadLocalFolderClick}\r\n          onUploadImageClick={onUploadImageClick}\r\n          onUploadVideoClick={onUploadVideoClick}\r\n          onAIGenerateClick={onAIGenerateClick}\r\n          onCreateFolderClick={onCreateFolderClick}\r\n          i18n={i18n}\r\n          logger={logger}\r\n        />\r\n        <AssetTypeToggleButtonsFilter\r\n          i18n={i18n}\r\n          className={classes.assetTypeToggleButtons}\r\n          options={assetTypes}\r\n          optionsState={assetTypesState}\r\n          toggleSelectedOption={toggleAssetType}\r\n          logger={logger}\r\n        />\r\n        <div className={classes.remaining} />\r\n        <SearchBoxFilter\r\n          i18n={i18n}\r\n          logger={logger}\r\n          onSearchTextChanging={onSearchTextChanging}\r\n          onSearchTextChange={onSearchTextChange}\r\n          onSearchTextBlur={onSearchTextBlur}\r\n          onSearchTextClear={onSearchTextClear}\r\n          defaultSearchText={defaultSearchText}\r\n          searchboxPlaceHolder={searchboxPlaceHolder}\r\n        />\r\n        <FilterToggleButton\r\n          i18n={i18n}\r\n          onClick={() => toggleFilterBar()}\r\n          checked={showAdditionalFilterBar}\r\n          logger={logger}\r\n        />\r\n        <SortByFilter\r\n          i18n={i18n}\r\n          logger={logger}\r\n          options={sortingOptions}\r\n          onChange={onSortByChange}\r\n          sortBy={sortBy}\r\n        />\r\n      </div>\r\n      <AdditionalFilterBar\r\n        i18n={i18n}\r\n        showAdditionalFilterBar={showAdditionalFilterBar}\r\n        isSelected={isAdditionalFilterActive}\r\n        optionsState={assetTypesState}\r\n        isImageSelected={isImageSelected}\r\n        isVideoSelected={isVideoSelected}\r\n        timeZone={ianaTimeZone}\r\n        dateFormat={dateFormat}\r\n        dateAddedChoiceOptions={dateAddedChoiceOptions}\r\n        dateAddedFilter={dateAddedFilter}\r\n        dateAddedFilterCustomDateRange={dateAddedFilterCustomDateRange}\r\n        isAdsStudioAIGCMVPEnabled={isAdsStudioAIGCMVPEnabled}\r\n        onDateAddedFilterChange={onDateAddedFilterChange}\r\n        importSource={importSource}\r\n        importSourceOptions={importSourceOptions}\r\n        onImportSourceFilterChange={onImportSourceFilterChange}\r\n        assetSources={assetSources}\r\n        assetSourceOptions={assetSourceOptions}\r\n        onAssetSourceFilterChange={onAssetSourceFilterChange}\r\n        minWidthFilter={minWidthFilter}\r\n        minHeightFilter={minHeightFilter}\r\n        onImageSizeFilterChange={onImageSizeFilterChange}\r\n        minDurationFilter={minDurationFilter}\r\n        maxDurationFilter={maxDurationFilter}\r\n        onVideoDurationFilterChange={onVideoDurationFilterChange}\r\n        logger={logger}\r\n      />\r\n    </FluentProvider>\r\n  );\r\n};\r\n\r\nexport const SearchResultFilterBar = (props) => {\r\n  const {\r\n    i18n,\r\n    logger,\r\n    defaultSearchText,\r\n    searchboxPlaceHolder,\r\n  } = props;\r\n\r\n  const classes = useFilterBarStyles();\r\n  const {\r\n    onSearchTextChanging,\r\n    onSearchTextBlur,\r\n    onSearchTextChange,\r\n    onSearchTextClear,\r\n  } = useFilterBarState({ logger, i18n, defaultSearchText });\r\n\r\n  return (\r\n    <FluentProvider theme={webLightTheme}>\r\n      <div className={mergeClasses('search-filter-bar', classes.filterBar)}>\r\n        <SearchBoxFilter\r\n          i18n={i18n}\r\n          logger={logger}\r\n          onSearchTextChanging={onSearchTextChanging}\r\n          onSearchTextChange={onSearchTextChange}\r\n          onSearchTextBlur={onSearchTextBlur}\r\n          onSearchTextClear={onSearchTextClear}\r\n          defaultSearchText={defaultSearchText}\r\n          searchboxPlaceHolder={searchboxPlaceHolder}\r\n        />\r\n        <div className={classes.remaining} />\r\n      </div>\r\n    </FluentProvider>\r\n  );\r\n};\r\n","import React, { useState } from 'react';\r\nimport { FilterContext } from './filter-context';\r\n\r\nexport const FilterContextProvider = (props) => {\r\n  const [filterBar, setFilterBar] = useState({\r\n    getFilters: () => ({}),\r\n  });\r\n\r\n  return (\r\n    <FilterContext.Provider\r\n      value={{\r\n        filterBar,\r\n        setFilterBar,\r\n      }}\r\n    >\r\n      {props.children}\r\n    </FilterContext.Provider>\r\n  );\r\n};\r\n\r\nexport const withFilterContext = Component => props => (<FilterContextProvider><Component {...props} /></FilterContextProvider>);\r\n","import _ from 'underscore';\r\nimport classNames from 'classnames';\r\nimport React, { useCallback, useRef, useMemo } from 'react';\r\n// import { SearchBox } from '@bingads-webui-react/fabric-control';\r\n\r\nimport {\r\n  // AssetTypeToggleButtonsFilter,\r\n  ImportSourceFilter,\r\n  AssetSourceFilter,\r\n  ImageSizeFilter,\r\n  // VideoDurationFilter,\r\n  DateAddedFilter,\r\n  SearchBoxFilter,\r\n} from './components';\r\nimport {\r\n  CSMLTimeFrame,\r\n  FilterType,\r\n  // getAssetTypeOptions,\r\n  getImportSourceOptions,\r\n  getAssetSourceOptions,\r\n  getDateAddedChoiceOptions,\r\n} from '../model';\r\nimport { civilDateRangeEqual, getDefaultDateRange } from '../utils';\r\n\r\n// export const AssetTypeFilterComponent = React.memo(({\r\n//   filter, focused, onValueChange, onDropdownDismiss, i18n,\r\n// }) => {\r\n//   const { value } = filter || {};\r\n//   const { assetTypeFilter } = value || {};\r\n//   const dropdownOptions = useMemo(() => getAssetTypeOptions(i18n), [i18n]);\r\n\r\n//   const onChange = useCallback((newValue, newHumanizedVaue) => {\r\n//     if (newValue !== assetTypeFilter) {\r\n//       onValueChange(filter, { assetTypeFilter: newValue }, newHumanizedVaue);\r\n//     }\r\n//   }, [assetTypeFilter, filter, onValueChange]);\r\n\r\n//   return (\r\n//     <div className={classNames('dropdown-filter-container', 'asset-type-filter')}>\r\n//       <AssetTypeToggleButtonsFilter\r\n//         defaultAssetType={assetTypeFilter}\r\n//         assetTypeFilterOptions={dropdownOptions}\r\n//         dropdownWidth=\"auto\"\r\n//         onChange={onChange}\r\n//         onDismiss={(newValue, newHumanizedValue) => onDropdownDismiss(filter, { assetTypeFilter: newValue }, newHumanizedValue)}\r\n//         focused={focused}\r\n//         i18n={i18n}\r\n//       />\r\n//     </div>\r\n//   );\r\n// });\r\n\r\nexport const ImportSourceFilterComponent = React.memo(({\r\n  filter, i18n, onValueChange, onDropdownDismiss, defaultOpen,\r\n}) => {\r\n  const { value } = filter || {};\r\n  const { importSource } = value || {};\r\n  const dropdownOptions = useMemo(() => getImportSourceOptions(i18n), [i18n]);\r\n\r\n  const onChange = useCallback((newValue, newHumanizedVaue) => {\r\n    const option = _.find(dropdownOptions, { key: newValue }) || {};\r\n    if (newValue !== importSource) {\r\n      onValueChange(filter, { importSource: newValue }, option.text || newHumanizedVaue);\r\n    }\r\n  }, [dropdownOptions, filter, importSource, onValueChange]);\r\n\r\n  const onDismiss = useCallback((newValue, newHumanizedValue) => {\r\n    const option = _.find(dropdownOptions, { key: newValue }) || {};\r\n    onDropdownDismiss(filter, { importSource: newValue }, option.text || newHumanizedValue);\r\n  }, [dropdownOptions, filter, onDropdownDismiss]);\r\n\r\n  return (\r\n    <div className={classNames('dropdown-filter-container', 'ads-studio-import-source-filter')}>\r\n      <ImportSourceFilter\r\n        defaultOpen={defaultOpen}\r\n        defaultImportSource={importSource}\r\n        options={dropdownOptions}\r\n        onChange={onChange}\r\n        onDismiss={onDismiss}\r\n        i18n={i18n}\r\n      />\r\n    </div>\r\n  );\r\n});\r\n\r\nexport const AssetSourceFilterComponent = React.memo(({\r\n  filter, i18n, onValueChange, onDropdownDismiss, defaultOpen,\r\n}) => {\r\n  const { value } = filter || {};\r\n  const { assetSources } = value || {};\r\n  const assetSourceOptions = useMemo(() => getAssetSourceOptions(i18n), [i18n]);\r\n  const onChange = useCallback((newAssetSources, newHumanizedVaue) => {\r\n    if (!_.isEqual(assetSources, newAssetSources)) {\r\n      onValueChange(filter, { assetSources: newAssetSources }, newHumanizedVaue);\r\n    }\r\n  }, [assetSources, filter, onValueChange]);\r\n\r\n  const onDismiss = useCallback((newValue, newHumanizedValue) => {\r\n    onDropdownDismiss(filter, { assetSources: newValue }, newHumanizedValue);\r\n  }, [filter, onDropdownDismiss]);\r\n\r\n  return (\r\n    <div className={classNames('dropdown-filter-container', 'ads-studio-asset-source-filter')}>\r\n      <AssetSourceFilter\r\n        defaultOpen={defaultOpen}\r\n        defaultSelectedAssetSources={assetSources || []}\r\n        options={assetSourceOptions}\r\n        onChange={onChange}\r\n        onDismiss={onDismiss}\r\n        i18n={i18n}\r\n      />\r\n    </div>\r\n  );\r\n});\r\n\r\nexport const ImageSizeFilterComponent = React.memo(({\r\n  filter, i18n, onValueChange, onDropdownDismiss, defaultOpen,\r\n}) => {\r\n  const { value } = filter || {};\r\n  const { minImageWidth, minImageHeight } = value || {};\r\n\r\n  const onImageSizeChange = useCallback((newValue, newHumanizedVaue) => {\r\n    const { newMinWidth, newMinHeight } = newValue || {};\r\n    if (minImageWidth !== newMinWidth || minImageHeight !== newMinHeight) {\r\n      onValueChange(filter, { minImageWidth: newMinWidth, minImageHeight: newMinHeight }, newHumanizedVaue);\r\n    }\r\n  }, [filter, minImageHeight, minImageWidth, onValueChange]);\r\n\r\n  const onDismiss = useCallback((newValue, newHumanizedValue) => {\r\n    const { newMinWidth, newMinHeight } = newValue || {};\r\n    onDropdownDismiss(filter, { minImageWidth: newMinWidth, minImageHeight: newMinHeight }, newHumanizedValue);\r\n  }, [filter, onDropdownDismiss]);\r\n\r\n  return (\r\n    <div className={classNames('dropdown-filter-container', 'ads-studio-image-size-filter')}>\r\n      <ImageSizeFilter\r\n        defaultOpen={defaultOpen}\r\n        defaultMinWidth={minImageWidth}\r\n        defaultMinHeight={minImageHeight}\r\n        onChange={onImageSizeChange}\r\n        onDismiss={onDismiss}\r\n        i18n={i18n}\r\n      />\r\n    </div>\r\n  );\r\n});\r\n\r\n// export const VideoDurationFilterComponent = React.memo(({\r\n//   filter, focused, i18n, onValueChange, onDropdownDismiss,\r\n// }) => {\r\n//   const { value } = filter || {};\r\n//   const { minVideoDuration, maxVideoDuration } = value || {};\r\n\r\n//   const onChange = useCallback((newValue, newHumanizedVaue) => {\r\n//     const { newMinDuration, newMaxDuration } = newValue || {};\r\n//     if (minVideoDuration !== newMinDuration || maxVideoDuration !== newMaxDuration) {\r\n//       onValueChange(filter, { minVideoDuration: newMinDuration, maxVideoDuration: newMaxDuration }, newHumanizedVaue);\r\n//     }\r\n//   }, [filter, maxVideoDuration, minVideoDuration, onValueChange]);\r\n\r\n//   const onDismiss = useCallback((newValue, newHumanizedValue) => {\r\n//     const { newMinDuration, newMaxDuration } = newValue || {};\r\n//     onDropdownDismiss(filter, { minVideoDuration: newMinDuration, maxVideoDuration: newMaxDuration }, newHumanizedValue);\r\n//   }, [filter, onDropdownDismiss]);\r\n\r\n//   return (\r\n//     <div className={classNames('dropdown-filter-container', 'video-duration-filter')}>\r\n//       <VideoDurationFilter\r\n//         defaultMinDuration={minVideoDuration}\r\n//         defaultMaxDuration={maxVideoDuration}\r\n//         dropdownWidth=\"auto\"\r\n//         onChange={onChange}\r\n//         onDismiss={onDismiss}\r\n//         focused={focused}\r\n//         i18n={i18n}\r\n//       />\r\n//     </div>\r\n//   );\r\n// });\r\n\r\nexport const AL_DATE_ADDED_FILTER_DEFAULT_RANGE = getDefaultDateRange();\r\nexport const DateAddedFilterComponent = React.memo(({\r\n  filter, i18n, onValueChange, onDropdownDismiss, ianaTimeZone, dateFormat, defaultOpen,\r\n}) => {\r\n  const { value } = filter || {};\r\n  const { dateAddedFilter, dateAddedFilterCustomDateRange = AL_DATE_ADDED_FILTER_DEFAULT_RANGE } = value || {};\r\n  const dateAddedChoiceOptions = useMemo(() => getDateAddedChoiceOptions(i18n, ianaTimeZone), [i18n, ianaTimeZone]);\r\n\r\n  const onChange = useCallback((newValue, newHumanizedVaue) => {\r\n    const { timeframe: tf, customDateRange: cdr } = newValue || {};\r\n    if (tf !== dateAddedFilter || !civilDateRangeEqual(cdr, dateAddedFilterCustomDateRange)) {\r\n      onValueChange(filter, { dateAddedFilter: tf, dateAddedFilterCustomDateRange: cdr }, newHumanizedVaue);\r\n    }\r\n  }, [dateAddedFilter, dateAddedFilterCustomDateRange, filter, onValueChange]);\r\n\r\n  const onDismiss = useCallback((newValue, newHumanizedValue) => {\r\n    const { timeframe: tf, customDateRange: cdr } = newValue || {};\r\n    onDropdownDismiss(filter, { dateAddedFilter: tf, dateAddedFilterCustomDateRange: cdr }, newHumanizedValue);\r\n  }, [filter, onDropdownDismiss]);\r\n\r\n  return (\r\n    <div className={classNames('dropdown-filter-container', 'ads-studio-date-added-filter')}>\r\n      <DateAddedFilter\r\n        defaultOpen={defaultOpen}\r\n        defaultTimeFrame={dateAddedFilter || CSMLTimeFrame.Anytime}\r\n        defaultCustomDateRange={dateAddedFilterCustomDateRange}\r\n        options={dateAddedChoiceOptions}\r\n        onChange={onChange}\r\n        onDismiss={onDismiss}\r\n        timeZone={ianaTimeZone}\r\n        dateFormat={dateFormat}\r\n        i18n={i18n}\r\n      />\r\n    </div>\r\n  );\r\n});\r\n\r\nexport const PerformanceSearchTextFilterComponent = React.memo(({ i18n, filter, onValueChange }) => {\r\n  const { value, title } = filter || {};\r\n  const { searchText } = value || {};\r\n\r\n  const searchTextValueRef = useRef('');\r\n  const onSearchTextChanging = useCallback((evt, newValue) => {\r\n    searchTextValueRef.current = newValue || '';\r\n  }, []);\r\n\r\n  const onSearchTextChange = useCallback((newValue) => {\r\n    if (newValue !== searchText) {\r\n      onValueChange(filter, { searchText: newValue }, newValue);\r\n    }\r\n  }, [filter, onValueChange, searchText]);\r\n\r\n  const onSearchTextBlur = useCallback(() => {\r\n    onSearchTextChange(searchTextValueRef.current);\r\n  }, [onSearchTextChange]);\r\n\r\n\r\n  const onSearchTextClear = useCallback(() => {\r\n    onSearchTextChange('');\r\n  }, [onSearchTextChange]);\r\n\r\n  return (\r\n    <div className={classNames('asset-library-search')}>\r\n      <SearchBoxFilter\r\n        i18n={i18n}\r\n        ariaLabel={i18n.getString(_TL_('toolbar area search'))}\r\n        // logger={logger}\r\n        onSearchTextChanging={onSearchTextChanging}\r\n        onSearchTextChange={onSearchTextChange}\r\n        onSearchTextBlur={onSearchTextBlur}\r\n        onSearchTextClear={onSearchTextClear}\r\n        defaultSearchText={searchText || ''}\r\n        searchboxPlaceHolder={i18n.getString(title)}\r\n      />\r\n      {/* <SearchBox\r\n        placeholder={i18n.getString(title)}\r\n        showIcon\r\n        defaultValue={searchText || ''}\r\n        onSearch={onSearchTextChange}\r\n        onClear={onSearchTextClear}\r\n        onChange={onSearchTextChanging}\r\n        onBlur={onSearchTextBlur}\r\n      /> */}\r\n    </div>\r\n  );\r\n});\r\n\r\nexport const getPerformanceFilterComponents = ({ isAdsStudioAIGCMVPEnabled }) => {\r\n  const ComponentMap = {\r\n    // [FilterType.AssetType]: AssetTypeFilterComponent,\r\n    [FilterType.ImportSource]: !isAdsStudioAIGCMVPEnabled ? ImportSourceFilterComponent : undefined,\r\n    [FilterType.AssetSource]: isAdsStudioAIGCMVPEnabled ? AssetSourceFilterComponent : undefined,\r\n    [FilterType.ImageSize]: ImageSizeFilterComponent,\r\n    // [FilterType.VideoDuration]: VideoDurationFilterComponent,\r\n    [FilterType.DateAdded]: DateAddedFilterComponent,\r\n    [FilterType.SearchText]: PerformanceSearchTextFilterComponent,\r\n  };\r\n  return ComponentMap;\r\n};\r\n","import { makeStyles } from '@fluentui/react-components';\r\n\r\nexport const useBreadcrumbStyles = makeStyles({\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  breadcrumbContainer: {\r\n    marginBottom: '24px',\r\n  },\r\n});\r\n","import React, { useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { AdsStudioBreadcrumb } from '../ads-studio-breadcrumb';\r\n\r\nimport { useBreadcrumbStyles } from './style';\r\n\r\nexport const FolderPathBreadcrumb = ({\r\n  folderPath,\r\n  onItemClick,\r\n  visibleForRootFolder,\r\n}) => {\r\n  const items = useMemo(() => folderPath.map(item => ({\r\n    key: item.folderId,\r\n    text: item.folderName,\r\n  })), [folderPath]);\r\n\r\n  const classes = useBreadcrumbStyles();\r\n\r\n  return (\r\n    items.length > 1 || visibleForRootFolder ? (\r\n      <div className={classNames('folder-path-breadcrumb', classes.breadcrumbContainer)}>\r\n        <AdsStudioBreadcrumb\r\n          items={items}\r\n          onItemClick={onItemClick}\r\n          customItemStyle={{\r\n            breadcrumbButton: classNames('parent-folder-path', classes.breadcrumbButton),\r\n            breadcrumbButtonCurrent: classNames('current-folder-path', classes.breadcrumbButtonCurrent),\r\n          }}\r\n        />\r\n      </div>\r\n    ) : null\r\n  );\r\n};\r\n\r\nFolderPathBreadcrumb.propTypes = {\r\n  folderPath: PropTypes.arrayOf(PropTypes.shape({\r\n    folderId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n    folderName: PropTypes.string,\r\n  })),\r\n  onItemClick: PropTypes.func.isRequired,\r\n  visibleForRootFolder: PropTypes.bool,\r\n};\r\n\r\nFolderPathBreadcrumb.defaultProps = {\r\n  folderPath: [],\r\n  visibleForRootFolder: false,\r\n};\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nexport const useAdsStudioLibraryPageContentStyle = makeStyles({\r\n  container: {\r\n    '& .ads-studio-grid-container': {\r\n      marginTop: '12px',\r\n      position: 'relative',\r\n      ...shorthands.overflow('hidden'),\r\n      // to show the shadow\r\n      paddingLeft: '15px',\r\n      paddingRight: '15px',\r\n    },\r\n    '& .library-page-header': {\r\n      position: 'sticky',\r\n      paddingBottom: '12px',\r\n      paddingTop: '24px',\r\n      paddingLeft: '36px',\r\n      paddingRight: '36px',\r\n      marginLeft: '-21px',\r\n      marginRight: '-21px',\r\n      top: 0,\r\n      zIndex: 10,\r\n      backgroundColor: 'white',\r\n      height: 'auto',\r\n      '& .library-page-header-top-wrapper': {\r\n        visibility: 'visible',\r\n      },\r\n      '&.show-bulk-toolbar': {\r\n        paddingTop: '12px',\r\n        height: '80px',\r\n        '& .library-page-header-top-wrapper': {\r\n          visibility: 'hidden',\r\n        },\r\n      },\r\n    },\r\n    '& .library-page-header-toolbar': {\r\n      position: 'absolute',\r\n      top: '12px',\r\n      left: '36px',\r\n      right: '36px',\r\n      zIndex: 11,\r\n      backgroundColor: 'white',\r\n    },\r\n  },\r\n});\r\n\r\n","import React, { useState, useEffect } from 'react';\r\n\r\nexport const HiddenDivForAnnounce = ({\r\n  toAnnounce,\r\n}) => {\r\n  const [announce, setAnnounce] = useState('');\r\n\r\n  useEffect(() => {\r\n    if (toAnnounce && announce !== toAnnounce) {\r\n      setAnnounce(toAnnounce);\r\n    }\r\n  }, [announce, toAnnounce]);\r\n\r\n  return (\r\n    <div\r\n      aria-live=\"polite\"\r\n      aria-atomic=\"true\"\r\n      style={{\r\n        position: 'absolute',\r\n        width: 1,\r\n        height: 1,\r\n        overflow: 'hidden',\r\n        padding: 0,\r\n        margin: '-1px',\r\n        clip: 'rect(0,0,0,0)',\r\n        border: 0,\r\n      }}\r\n    >\r\n      {announce}\r\n    </div>\r\n  );\r\n};\r\n","import _ from 'underscore';\r\nimport { DEFAULT_CONFIG as DEFAULT_GRID_CONFIG } from '../ads-studio-tile-grid';\r\n\r\nexport const FOLDER_GRID_CONFIG = { ...DEFAULT_GRID_CONFIG, aspectRatio: undefined, rowHeight: 100 };\r\n\r\n// null means loading\r\nexport const isSectionDataLoadingStatus =\r\n  sectionData => _.every(sectionData, ({ items }) => items == null);\r\n\r\n// [] means loaded, but no data\r\nexport const isSectionDataEmptyStatus =\r\n  (sectionData) => {\r\n    const anySectionLoaded = _.any(sectionData, ({ items }) => !!items);\r\n\r\n    return anySectionLoaded && _.every(sectionData, ({ items }) => _.isEmpty(items));\r\n  };\r\n","import _ from 'underscore';\r\nimport React, { useCallback, useEffect, useMemo, useState, useContext, useRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport { Overlay } from '@bingads-webui-react/fabric-control';\r\nimport { setClarityTag } from '@bingads-webui-universal/clarity';\r\nimport { useJsData } from '@bingads-webui-cc-react/js-data-rest';\r\n\r\nimport { LibraryEmptyView } from '../empty-view/library-page-empty-view';\r\nimport { LibraryFilterBar, FilterContext } from '../../filter-bar';\r\n\r\nimport { SectionTilesGrid, DEFAULT_CONFIG as DEFAULT_GRID_CONFIG } from '../ads-studio-tile-grid';\r\n\r\nimport {\r\n  GridSectionName,\r\n  DEFAULT_PAGE_SIZE,\r\n  AdsStudioPageName,\r\n  FolderAssetType,\r\n  CSMLTimeFrame,\r\n  getDateAddedChoiceOptions,\r\n  getUpdatedAssets,\r\n  AIGCHandler,\r\n  isValidXandrAccount,\r\n} from '../../model';\r\n\r\nimport { FolderPathBreadcrumb } from '../folder-path-breadcrumb';\r\nimport { AdsStudioSpinner } from '../ads-studio-spinner';\r\n\r\nimport { useAdsStudioLibraryPageContentStyle } from './styles/library-page-style';\r\nimport {\r\n  isSectionDataLoadingStatus,\r\n  isSectionDataEmptyStatus,\r\n} from './sections-utils';\r\nimport { HiddenDivForAnnounce } from '../hidden-div-for-announce';\r\n\r\nconst overlaySpinnerStyles = { margin: 200 };\r\n// const bottomSpinnerStyles = { marginTop: 20, marginBottom: 100 };\r\n\r\nconst FOLDER_GRID_CONFIG = {\r\n  ...DEFAULT_GRID_CONFIG,\r\n  aspectRatio: undefined,\r\n  rowHeight: 110,\r\n  // width: 320,\r\n};\r\n\r\nconst AdsStudioLibraryPageContentInternal = ({\r\n  dataService,\r\n  renderHeader,\r\n  renderGridCell,\r\n  onFailedToLoadData,\r\n  dateFormat,\r\n  ianaTimeZone,\r\n  // assetLibraryUserPreferences,\r\n  // assetLibraryAccountPreferences,\r\n  adsStudioUserPreferences,\r\n  reload,\r\n  logger,\r\n  i18n,\r\n  aid,\r\n  cid,\r\n  oDataConfig,\r\n  dataLoaded,\r\n  perfMarker,\r\n  displayFolderPath,\r\n  reloadingFolders,\r\n  assetsToLoadForSubfolders,\r\n  renderToolbar,\r\n  renderEmptyView,\r\n\r\n  // multi-selection props\r\n  multiSelectionEnabled,\r\n  onSelectionChange,\r\n  // onFolderNavigationChange,\r\n  sectionSelectedItems,\r\n  //\r\n  // searchLocationFilterState,\r\n  // setSearchLocationFilterState,\r\n\r\n  // realUsedFlagSuffix,\r\n  isAssetLibraryAIGCMVPEnabled,\r\n  isAdsStudioAIGCMVPEnabled,\r\n  isAIGCRegionRestricted,\r\n  notificationApi,\r\n  // isClickableOutsideFocusTrap,\r\n\r\n  preDefinedAssetSources,\r\n  // disabledAssetSources,\r\n  onCreateFolderClick,\r\n  navigation,\r\n\r\n  gridScrollContainer,\r\n  permissions,\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 classes = useAdsStudioLibraryPageContentStyle();\r\n  const [announcedText, setAnnouncedText] = useState('');\r\n\r\n  const { filterBar } = useContext(FilterContext);\r\n  const {\r\n    isImageSelected,\r\n    isVideoSelected,\r\n    searchText: searchBoxText,\r\n    sortBy,\r\n    dateAddedFilter,\r\n    dateAddedFilterCustomDateRange,\r\n    importSource,\r\n    assetSources,\r\n    minWidthFilter,\r\n    minHeightFilter,\r\n    minDurationFilter,\r\n    maxDurationFilter,\r\n  } = useMemo(() => filterBar.getFilters(), [filterBar]);\r\n\r\n  const isAnyFilterSet = searchBoxText || importSource || isImageSelected || isVideoSelected\r\n      || minWidthFilter || minHeightFilter || minDurationFilter || maxDurationFilter\r\n      || (dateAddedFilter && dateAddedFilter !== CSMLTimeFrame.Anytime) || !_.isEmpty(assetSources);\r\n\r\n  const {\r\n    assets,\r\n    totalAssetCount,\r\n    totalSubfoldersCount,\r\n    imageCroppingTasks,\r\n    loadData,\r\n    loadMoreData,\r\n    folderPath,\r\n    navigateToFolderInPath,\r\n    folders,\r\n    currentFolderId,\r\n    videoUpdated,\r\n    dataOwnerPageName,\r\n  } = dataService || {};\r\n\r\n  const openSystemUploadRef = useRef(null);\r\n\r\n  const onUploadLocalFileClick = useCallback(() => {\r\n    openSystemUploadRef.current = {};\r\n    navigation.gotoUploadFilesPanelPage({\r\n      aid, cid, oDataConfig, i18n, openSystemUpload: openSystemUploadRef.current,\r\n    });\r\n  }, [aid, cid, i18n, navigation, oDataConfig]);\r\n\r\n  const onStockButtonClick = useCallback((props) => {\r\n    if (logger && logger.logTrace) {\r\n      logger.logTrace('Add asset from shutterstock');\r\n    }\r\n    navigation.gotoStockImagePanelPage(props);\r\n  }, [logger, navigation]);\r\n\r\n  const onInvestButtonClick = useCallback((props) => {\r\n    if (logger && logger.logTrace) {\r\n      logger.logTrace('Add asset from invest');\r\n    }\r\n    navigation.gotoInvestImagePanelPage(props);\r\n  }, [logger, navigation]);\r\n\r\n  const onWebsiteButtonClick = useCallback((props) => {\r\n    if (logger && logger.logTrace) {\r\n      logger.logTrace('Add asset from website');\r\n    }\r\n    navigation.gotoWebsiteImagePanelPage(props);\r\n  }, [logger, navigation]);\r\n\r\n  const onUploadLocalFolderClick = useCallback(() => {\r\n    openSystemUploadRef.current = {};\r\n    navigation.gotoUploadFolderPanelPage({\r\n      aid, cid, oDataConfig, i18n, openSystemUpload: openSystemUploadRef.current,\r\n    });\r\n  }, [aid, cid, i18n, navigation, oDataConfig]);\r\n\r\n  const onUploadVideoClick = useCallback(() => {\r\n    if (logger && logger.logTrace) {\r\n      logger.logTrace('Add video from URl');\r\n    }\r\n\r\n    if (isXandrIntegrationEnabled) {\r\n      navigation.gotoMixedVideoPanelPage({\r\n        aid, cid, oDataConfig, i18n,\r\n      });\r\n    } else {\r\n      navigation.gotoAddVideoPanelPage({\r\n        aid, cid, oDataConfig, i18n,\r\n      });\r\n    }\r\n  }, [aid, cid, i18n, logger, navigation, oDataConfig, isXandrIntegrationEnabled]);\r\n\r\n  const onUploadImageClick = useCallback(() => {\r\n    navigation.gotoMixedImagePanelPage({\r\n      aid, cid, oDataConfig, i18n,\r\n    });\r\n  }, [aid, cid, i18n, navigation, oDataConfig]);\r\n\r\n  // // load assets for initial page load, or after any filters are changed\r\n  const loadedAssetList = useMemo(() => getUpdatedAssets({\r\n    assets,\r\n    updates: {\r\n      imageCroppingTasks,\r\n      videoUpdated,\r\n    },\r\n  }), [assets, imageCroppingTasks, videoUpdated]);\r\n\r\n  const onRenderCell = useCallback(({ item, sectionName, ...others }) => {\r\n    if (renderGridCell) {\r\n      const cell = renderGridCell({\r\n        item, searchText: searchBoxText, sectionName, ...others,\r\n      });\r\n      if (cell) return cell;\r\n    }\r\n    return null;\r\n  }, [renderGridCell, searchBoxText]);\r\n\r\n  const [isPageInited, setPageInited] = useState(false);\r\n  // const [isGridInited, setGridInited] = useState(false);\r\n  const [loadingData, setLoadingData] = useState(false);\r\n\r\n  const loadDataAsync = useCallback(() => {\r\n    // get selected date range for date added filter\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\r\n    const usePreDefinedAssetSources = preDefinedAssetSources.length > 0 && assetSources.length === 0;\r\n    let assetTypeFilter = null;\r\n    if (isImageSelected || isVideoSelected) {\r\n      assetTypeFilter = isImageSelected ? FolderAssetType.Image : FolderAssetType.Video;\r\n    }\r\n    let libraryPageLoadDataPerfMarker;\r\n    if (perfMarker) {\r\n      libraryPageLoadDataPerfMarker = perfMarker.createChild('libraryPageLoadData');\r\n    }\r\n    return loadData({\r\n      searchText: searchBoxText,\r\n      minImageWidth: minWidthFilter,\r\n      minImageHeight: minHeightFilter,\r\n      minVideoDuration: minDurationFilter,\r\n      maxVideoDuration: maxDurationFilter,\r\n      dateAddedDateRange,\r\n      sortBy,\r\n      importSource,\r\n      assetSources: usePreDefinedAssetSources ? preDefinedAssetSources : assetSources,\r\n      assetsToLoadForSubfolders,\r\n      assetTypeFilter,\r\n      isGlobalSearch: false,\r\n      includeParentHierarchy: false, // include parent hierarchy when global searching\r\n      pageName: AdsStudioPageName.LibraryPage,\r\n      perfMarker: libraryPageLoadDataPerfMarker,\r\n    });\r\n  }, [assetSources, assetsToLoadForSubfolders, dateAddedFilter, dateAddedFilterCustomDateRange, i18n, ianaTimeZone, importSource, isImageSelected, isVideoSelected, loadData, maxDurationFilter, minDurationFilter, minHeightFilter, minWidthFilter, preDefinedAssetSources, searchBoxText, sortBy]);\r\n\r\n  const bulkTookbar = useMemo(() => (renderToolbar ? renderToolbar() : null), [renderToolbar]);\r\n\r\n  const onFolderPathClicked = useCallback((item) => {\r\n    logger.logTrace('Navigate to folder in path', { folderId: item.key });\r\n    navigateToFolderInPath({ id: item.key });\r\n  }, [navigateToFolderInPath, logger]);\r\n\r\n  const onRenderHeader = useCallback(() => (\r\n    !renderHeader ? (\r\n      <div className={classnames('library-page-header', bulkTookbar && 'show-bulk-toolbar')}>\r\n        <div className={classnames('library-page-header-top-wrapper')}>\r\n          {/* display folder path */}\r\n          {displayFolderPath &&\r\n            <FolderPathBreadcrumb\r\n              folderPath={folderPath}\r\n              onItemClick={onFolderPathClicked}\r\n            />\r\n          }\r\n          <LibraryFilterBar\r\n            i18n={i18n}\r\n            logger={logger}\r\n            ianaTimeZone={ianaTimeZone}\r\n            dateFormat={dateFormat}\r\n            isAdsStudioAIGCMVPEnabled={isAdsStudioAIGCMVPEnabled && !isAIGCRegionRestricted}\r\n            onUploadLocalFileClick={onUploadLocalFileClick}\r\n            onUploadLocalFolderClick={onUploadLocalFolderClick}\r\n            onUploadImageClick={onUploadImageClick}\r\n            onUploadVideoClick={onUploadVideoClick}\r\n            onAIGenerateClick={() => {\r\n              AIGCHandler(isAdsStudioAIGCMVPEnabled, isAIGCRegionRestricted, notificationApi, i18n, () => {\r\n                navigation.gotoAIGenerationPanelPage({ folderId: currentFolderId });\r\n              });\r\n            }}\r\n            onCreateFolderClick={onCreateFolderClick}\r\n            userPreference={adsStudioUserPreferences}\r\n          />\r\n        </div>\r\n        <div className=\"library-page-header-toolbar\">\r\n          {bulkTookbar}\r\n        </div>\r\n      </div>\r\n\r\n    ) : (\r\n      renderHeader()\r\n    )\r\n  ), [adsStudioUserPreferences, bulkTookbar, currentFolderId, dateFormat, displayFolderPath, folderPath, i18n, ianaTimeZone, isAIGCRegionRestricted, isAdsStudioAIGCMVPEnabled, logger, navigation, notificationApi, onCreateFolderClick, onFolderPathClicked, onUploadImageClick, onUploadLocalFileClick, onUploadLocalFolderClick, onUploadVideoClick, renderHeader]);\r\n\r\n  const foldersGridSection = useMemo(() => ({\r\n    sectionName: GridSectionName.Folder,\r\n    sectionTitle: i18n.getString(_TL_('Folders')),\r\n    sectionClassName: 'ads-studio-folders-section',\r\n    itemKey: 'folderId',\r\n    items: folders,\r\n    totalItemCount: totalSubfoldersCount,\r\n    config: {\r\n      ...FOLDER_GRID_CONFIG,\r\n      scrollContainer: gridScrollContainer,\r\n    },\r\n    selectedItems: sectionSelectedItems && sectionSelectedItems[GridSectionName.Folder],\r\n  }), [folders, gridScrollContainer, i18n, sectionSelectedItems, totalSubfoldersCount]);\r\n\r\n  const assetsGridSection = useMemo(() => ({\r\n    sectionName: GridSectionName.Asset,\r\n    sectionTitle: i18n.getString(_TL_('Assets')),\r\n    sectionClassName: 'ads-studio-assets-section',\r\n    itemKey: 'id',\r\n    items: loadedAssetList,\r\n    totalItemCount: totalAssetCount,\r\n    selectedItems: sectionSelectedItems && sectionSelectedItems[GridSectionName.Asset],\r\n    config: {\r\n      scrollContainer: gridScrollContainer,\r\n      minItemHeight: 42,\r\n    },\r\n  }), [gridScrollContainer, i18n, loadedAssetList, sectionSelectedItems, totalAssetCount]);\r\n\r\n  const sectionGridData = useMemo(\r\n    () => ([foldersGridSection, assetsGridSection]),\r\n    [assetsGridSection, foldersGridSection]\r\n  );\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  useEffect(() => {\r\n    if (isAssetLibraryAIGCMVPEnabled) {\r\n      setClarityTag({ AssetLibraryCopilot: 'true' });\r\n    }\r\n  }, [isAssetLibraryAIGCMVPEnabled]);\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    if (perfMarker) {\r\n      perfMarker.willFetchData();\r\n    }\r\n    setLoadingData(true);\r\n    loadDataAsync()\r\n      .tapCatch((err) => { // throw out so that this error will be shown in console for easy debugging\r\n        onFailedToLoadData(err);\r\n      }).finally(() => {\r\n        setLoadingData(false);\r\n        if (perfMarker) {\r\n          perfMarker.willRender();\r\n        }\r\n        dataLoaded();\r\n        // setGridInited(true);\r\n      });\r\n  }, [isPageInited, loadDataAsync, onFailedToLoadData, reload, logger]);\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  const isPageLoading = !isPageInited\r\n    || loadingData || isSectionDataLoadingStatus(sectionGridData) || reloadingFolders;\r\n\r\n  const hadNoData = isSectionDataEmptyStatus(sectionGridData);\r\n\r\n  useEffect(() => {\r\n    if (!isPageLoading && hadNoData && !_.isFunction(renderEmptyView) && isAnyFilterSet) {\r\n      setAnnouncedText(i18n.getString(_TL_('No assets match your search. Please try again.')));\r\n    } else {\r\n      setAnnouncedText('');\r\n    }\r\n  }, [hadNoData, i18n, isAnyFilterSet, isPageLoading, renderEmptyView]);\r\n\r\n  return (\r\n    <div className={classnames('ads-studio-page', classes.container, classes.injectedContentContainer)}>\r\n      {/*  grid header or toolbar */}\r\n      {onRenderHeader()}\r\n\r\n      {/* grid content */}\r\n      <div className=\"ads-studio-grid-container\">\r\n        {(!dataOwnerPageName || dataOwnerPageName === AdsStudioPageName.LibraryPage) && (\r\n        <SectionTilesGrid\r\n          sectionData={sectionGridData}\r\n          onRenderCell={onRenderCell}\r\n          loadNextPage={loadNextPage}\r\n          multiSelectionEnabled={multiSelectionEnabled}\r\n          onSelectionChange={onSelectionChange}\r\n        />\r\n          )}\r\n      </div>\r\n      {/* show loading indicator */}\r\n      {isPageLoading && (\r\n        <Overlay>\r\n          <AdsStudioSpinner className=\"page-load-spinner\" useCustomSize customStyle={overlaySpinnerStyles} />\r\n        </Overlay>\r\n      )}\r\n\r\n      {/* no content */}\r\n      {(!isPageLoading && hadNoData) && (\r\n      <div className={classnames('ads-studio-no-data', classes.emptyViewContainer)}>\r\n        {\r\n          renderEmptyView ? renderEmptyView() : (\r\n            <LibraryEmptyView\r\n              i18n={i18n}\r\n              isInSubfolder={!!(folderPath && folderPath.length > 1)}\r\n              isAnyFilterSet={isAnyFilterSet}\r\n              onClickCreate={() => {\r\n                AIGCHandler(isAdsStudioAIGCMVPEnabled, isAIGCRegionRestricted, notificationApi, i18n, () => {\r\n                  navigation.gotoAIGenerationPanelPage({ folderId: currentFolderId });\r\n                });\r\n              }}\r\n              onClickUpload={onUploadLocalFileClick}\r\n              onClickStock={onStockButtonClick}\r\n              onClickWebsite={onWebsiteButtonClick}\r\n              onClickInvest={onInvestButtonClick}\r\n              isXandrIntegrationEnabled={isXandrIntegrationEnabled}\r\n            />\r\n          )\r\n        }\r\n      </div>\r\n        )}\r\n      <HiddenDivForAnnounce toAnnounce={announcedText} />\r\n    </div>\r\n  );\r\n};\r\n\r\nAdsStudioLibraryPageContentInternal.propTypes = {\r\n  dataService: PropTypes.shape({\r\n    assets: 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  }).isRequired,\r\n  onFailedToLoadData: PropTypes.func,\r\n  logger: PropTypes.shape({\r\n    logTrace: PropTypes.func,\r\n    logError: PropTypes.func,\r\n  }).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  assetLibraryUserPreferences: PropTypes.shape({\r\n    sortBy: PropTypes.string,\r\n    setSortBy: PropTypes.func,\r\n  }),\r\n  assetLibraryAccountPreferences: PropTypes.shape({}),\r\n  reload: PropTypes.shape({}), // if changed, force to reload\r\n  renderHeader: PropTypes.func,\r\n  renderGridCell: PropTypes.func,\r\n  renderToolbar: PropTypes.func,\r\n\r\n  dataLoaded: PropTypes.func,\r\n  displayFolderPath: PropTypes.bool,\r\n  reloadingFolders: PropTypes.bool,\r\n  assetsToLoadForSubfolders: PropTypes.number,\r\n\r\n  // multi selection\r\n  multiSelectionEnabled: PropTypes.bool,\r\n  onSelectionChange: PropTypes.func,\r\n  // onFolderNavigationChange: PropTypes.func,\r\n  sectionSelectedItems: PropTypes.shape({}),\r\n\r\n  // searchLocationFilterState: PropTypes.string,\r\n  // setSearchLocationFilterState: PropTypes.func,\r\n\r\n  // realUsedFlagSuffix: PropTypes.string,\r\n  isAssetLibraryAIGCMVPEnabled: PropTypes.bool,\r\n  isAdsStudioAIGCMVPEnabled: PropTypes.bool,\r\n  // isClickableOutsideFocusTrap: PropTypes.bool,\r\n\r\n  // custom filter\r\n  preDefinedAssetSources: PropTypes.arrayOf(PropTypes.shape({})),\r\n  // disabledAssetSources: PropTypes.arrayOf(PropTypes.string),\r\n  onCreateFolderClick: PropTypes.func,\r\n  navigation: PropTypes.shape({\r\n    gotoUploadFilesPanelPage: PropTypes.func,\r\n    gotoUploadFolderPanelPage: PropTypes.func,\r\n    gotoWebsiteImagePanelPage: PropTypes.func,\r\n    gotoStockImagePanelPage: PropTypes.func,\r\n    gotoAddVideoPanelPage: PropTypes.func,\r\n    gotoAIGenerationPanelPage: PropTypes.func,\r\n    gotoMixedImagePanelPage: PropTypes.func,\r\n    gotoMixedVideoPanelPage: PropTypes.func,\r\n    gotoInvestImagePanelPage: PropTypes.func,\r\n  }),\r\n  gridScrollContainer: PropTypes.string,\r\n  isAIGCRegionRestricted: PropTypes.bool,\r\n  permissions: PropTypes.shape({\r\n    dynamic: PropTypes.shape({}),\r\n  }),\r\n\r\n};\r\n\r\nAdsStudioLibraryPageContentInternal.defaultProps = {\r\n  assetLibraryUserPreferences: null,\r\n  assetLibraryAccountPreferences: null,\r\n  reload: null,\r\n  renderHeader: null,\r\n  renderGridCell: null,\r\n  renderToolbar: null,\r\n  onFailedToLoadData: () => null,\r\n  dataLoaded: () => null,\r\n  displayFolderPath: false,\r\n  reloadingFolders: false,\r\n\r\n  multiSelectionEnabled: false,\r\n  onSelectionChange: undefined,\r\n  // onFolderNavigationChange: _.noop,\r\n  sectionSelectedItems: undefined,\r\n\r\n  assetsToLoadForSubfolders: 1,\r\n\r\n  // searchLocationFilterState: undefined,\r\n  // setSearchLocationFilterState: undefined,\r\n\r\n  // realUsedFlagSuffix: '',\r\n  isAssetLibraryAIGCMVPEnabled: false,\r\n  isAdsStudioAIGCMVPEnabled: false,\r\n  // isClickableOutsideFocusTrap: false,\r\n\r\n  preDefinedAssetSources: [],\r\n  // disabledAssetSources: [],\r\n  onCreateFolderClick: undefined,\r\n  navigation: {},\r\n  gridScrollContainer: '[role=\"main\"]',\r\n  isAIGCRegionRestricted: false,\r\n  permissions: { dynamic: {} },\r\n};\r\n\r\nexport const AdsStudioLibraryPageContent = AdsStudioLibraryPageContentInternal;\r\n","import React, { useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n  Dialog,\r\n  DialogTitle,\r\n  DialogContent,\r\n  DialogActions,\r\n  DialogBody,\r\n  DialogSurface,\r\n  Button,\r\n  makeStyles,\r\n  mergeClasses,\r\n} from '@fluentui/react-components';\r\nimport { Dismiss20Regular } from '@fluentui/react-icons';\r\n\r\nconst useStyles = makeStyles({\r\n  dialog: {\r\n    '&.fui-DialogSurface': {\r\n      width: '450px',\r\n    },\r\n  },\r\n  title: {\r\n    wordBreak: 'break-word',\r\n  },\r\n});\r\n\r\nexport const ConfirmDialog = (props) => {\r\n  const {\r\n    isDisplayed,\r\n    title,\r\n    errorText,\r\n    confirmString,\r\n    cancelString,\r\n    onClickConfirm,\r\n    onClickCancel,\r\n    isUiBlocked,\r\n    warningMsg,\r\n  } = props;\r\n\r\n  const classes = useStyles();\r\n\r\n  const DismissIcon = useMemo(() => <Dismiss20Regular onClick={onClickCancel} />, [onClickCancel]);\r\n\r\n  return (\r\n    <Dialog\r\n      open={isDisplayed}\r\n    >\r\n      <DialogSurface id=\"asset-delete-confirmation-dialog\" className={mergeClasses('confirmation-dialog', classes.dialog)}>\r\n        <DialogBody>\r\n          <DialogTitle className={classes.title} action={DismissIcon}>\r\n            {title}\r\n          </DialogTitle>\r\n          <DialogContent>\r\n            {\r\n              warningMsg &&\r\n                <div className=\"image-delete-warning warning-msg\" style={{ color: 'rgb(168,0,0)' }}>\r\n                  {warningMsg}\r\n                </div>\r\n            }\r\n            {\r\n              errorText &&\r\n              <div className=\"image-delete-error delete-error\" style={{ color: 'rgb(168,0,0)' }}>\r\n                {errorText}\r\n              </div>\r\n            }\r\n          </DialogContent>\r\n          <DialogActions position=\"start\">\r\n            <Button\r\n              disabled={errorText.length > 0 || isUiBlocked}\r\n              className=\"dialog-confirm-button\"\r\n              onClick={onClickConfirm}\r\n              appearance=\"primary\"\r\n            >\r\n              {confirmString}\r\n            </Button>\r\n            <Button\r\n              disabled={isUiBlocked}\r\n              className=\"dialog-cancel-button\"\r\n              onClick={onClickCancel}\r\n              appearance=\"secondary\"\r\n            >\r\n              {cancelString}\r\n            </Button>\r\n          </DialogActions>\r\n        </DialogBody>\r\n      </DialogSurface>\r\n    </Dialog>\r\n  );\r\n};\r\n\r\nConfirmDialog.propTypes = {\r\n  isDisplayed: PropTypes.bool.isRequired,\r\n  isUiBlocked: PropTypes.bool,\r\n  title: PropTypes.string.isRequired,\r\n  errorText: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\r\n  warningMsg: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\r\n  confirmString: PropTypes.string.isRequired,\r\n  cancelString: PropTypes.string.isRequired,\r\n  onClickConfirm: PropTypes.func.isRequired,\r\n  onClickCancel: PropTypes.func.isRequired,\r\n  customStyle: PropTypes.shape({}),\r\n};\r\n\r\nConfirmDialog.defaultProps = {\r\n  errorText: '',\r\n  warningMsg: '',\r\n  isUiBlocked: false,\r\n  customStyle: null,\r\n};\r\n","import React from 'react';\r\n\r\nexport const GenerateImageContext = React.createContext({});\r\n\r\n","import React, { useState } from 'react';\r\nimport { GenerateImageContext } from './generate-image-context';\r\n\r\nexport const GenerateImageContextProvider = (props) => {\r\n  const [generateImageExample, setGenerateImageExample] = useState({\r\n    prompt: undefined,\r\n    imageUrl: undefined,\r\n  });\r\n\r\n  return (\r\n    <GenerateImageContext.Provider\r\n      value={{\r\n        generateImageExample,\r\n        setGenerateImageExample,\r\n      }}\r\n    >\r\n      {props.children}\r\n    </GenerateImageContext.Provider>\r\n  );\r\n};\r\n\r\nexport const withGenerateImageContext = Component => props => (\r\n  <GenerateImageContextProvider>\r\n    <Component {...props} />\r\n  </GenerateImageContextProvider>\r\n);\r\n","import React from 'react';\r\nimport {\r\n  makeResetStyles,\r\n  shorthands,\r\n  mergeClasses,\r\n} from '@fluentui/react-components';\r\n\r\nconst useLoadingViewStyles = makeResetStyles({\r\n  width: '100%',\r\n  ...shorthands.borderRadius('2px'),\r\n  height: '4px',\r\n  background: 'linear-gradient(to right, rgba(0, 120, 212, 0) 0%, #213AD5 50%, rgba(0, 120, 212, 0) 100%)',\r\n  backgroundSize: '33%',\r\n  backgroundRepeat: 'no-repeat',\r\n  animation: 'loading_indicator 3s linear infinite',\r\n  animationIterationCount: 'infinite',\r\n  animationTimingFunction: 'linear',\r\n  animationDuration: '3s',\r\n  animationName: [{\r\n    from: { backgroundPosition: '-50%' },\r\n    to: { backgroundPosition: '150%' },\r\n  }],\r\n  backgroundColor: '#E6E6E6',\r\n  forcedColorAdjust: 'none',\r\n});\r\n\r\nexport const LoadingIndicator = () => {\r\n  const loadingViewStyles = useLoadingViewStyles();\r\n  return (\r\n    <div className={mergeClasses('loading-indicator', loadingViewStyles)} />\r\n  );\r\n};\r\n","import ExampleBackground1 from './media/background1.jpg';\r\nimport ExampleBackground2 from './media/background2.jpg';\r\nimport ExampleBackground3 from './media/background3.jpg';\r\nimport ExampleBackground4 from './media/background4.jpg';\r\n\r\nexport const ExamplePromptList = [\r\n  {\r\n    backgroundImageUrl: ExampleBackground1,\r\n    promptText: _TL_('<A bottle of perfume> behind subtle floral patterns, having a fresh and vibrant summer garden atmosphere. Surrounded by soft greenery and natural sunlight.'),\r\n  },\r\n  {\r\n    backgroundImageUrl: ExampleBackground2,\r\n    promptText: _TL_('<A bottle of white hand soap> on a sleek marble surface, having a clean and refreshing atmosphere. Surrounded by eucalyptus leaves and soft natural light filtering through a window.'),\r\n  },\r\n  {\r\n    backgroundImageUrl: ExampleBackground3,\r\n    promptText: _TL_('<A white vase> is placed under a Christmas tree, with lots of gift boxes besides it, having Christmas atmosphere.'),\r\n  },\r\n  {\r\n    backgroundImageUrl: ExampleBackground4,\r\n    promptText: _TL_('<A gift box> on a stone platform, having a serene and coastal atmosphere. Surrounded by beach reflections.'),\r\n  },\r\n];\r\n","import _ from 'underscore';\r\nimport classNames from 'classnames';\r\nimport React, { useMemo, useState, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { HiddenDivForAnnounce } from '../hidden-div-for-announce';\r\nimport { ExamplePromptList } from './example-prompt';\r\n\r\nexport const ExampleImageListWithoutStyle = ({\r\n  onSelectImage,\r\n  classes,\r\n  MultiLineEllipsisText,\r\n  ExampleImageCell,\r\n  i18n,\r\n  labelId,\r\n}) => {\r\n  const [announcedText, setAnnouncedText] = useState('');\r\n  const promptList = useMemo(() => ExamplePromptList.map(x => ({\r\n    ...x,\r\n    promptText: i18n.getString(x.promptText),\r\n  })), [i18n]);\r\n\r\n  const wrappedOnSelectImage = useCallback((promptText, index) => {\r\n    onSelectImage(promptText, index);\r\n    setAnnouncedText(i18n.getString(_TL_('Set the prompt to {{promptText}}'), { promptText }));\r\n  }, [onSelectImage, i18n]);\r\n\r\n  return (\r\n    <div className={classNames('example-image-list', classes.exampleImageList)} aria-labelledby={labelId} role=\"group\">\r\n      {_.map(promptList, (template, index) => (\r\n        <ExampleImageCell\r\n          key={`cell-${index}`}\r\n          backgroundImageUrl={template.backgroundImageUrl}\r\n          promptText={template.promptText}\r\n          index={index}\r\n          onSelectImage={wrappedOnSelectImage}\r\n          MultiLineEllipsisText={MultiLineEllipsisText}\r\n        />\r\n      ))}\r\n      <HiddenDivForAnnounce toAnnounce={announcedText} />\r\n    </div>);\r\n};\r\n\r\nExampleImageListWithoutStyle.propTypes = {\r\n  onSelectImage: PropTypes.func.isRequired,\r\n  classes: PropTypes.shape({\r\n    exampleImageList: PropTypes.string,\r\n  }),\r\n  labelId: PropTypes.string,\r\n};\r\n\r\nExampleImageListWithoutStyle.defaultProps = {\r\n  classes: {},\r\n  labelId: '',\r\n};\r\n\r\n","import classNames from 'classnames';\r\nimport React, { useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nexport const ExampleImageCellWithoutStyle = ({\r\n  backgroundImageUrl,\r\n  promptText,\r\n  onSelectImage,\r\n  index,\r\n  classes,\r\n  MultiLineEllipsisText,\r\n}) => {\r\n  // when press Enter key, trigger the click event\r\n  const onKeyDown = useCallback((event) => {\r\n    if (event.key === 'Enter') {\r\n      onSelectImage(promptText, index);\r\n    }\r\n  }, [index, onSelectImage, promptText]);\r\n\r\n  const onClick = useCallback(() => {\r\n    onSelectImage(promptText, index);\r\n  }, [index, onSelectImage, promptText]);\r\n\r\n  return (\r\n    <div\r\n      className={classNames('example-image-list-cell', classes.exampleImageCell)}\r\n      onClick={onClick}\r\n      role=\"button\"\r\n      tabIndex={0}\r\n      aria-label={promptText}\r\n      onKeyDown={onKeyDown}\r\n    >\r\n      <img src={backgroundImageUrl} alt={`Example ${index}`} />\r\n      <div className=\"example-image-list-cell-overlay\">\r\n        <div className=\"overlay-gradient\" />\r\n        <div className=\"overlay-solid\" />\r\n        <MultiLineEllipsisText\r\n          className=\"example-prompt-template\"\r\n          text={promptText}\r\n        />\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nExampleImageCellWithoutStyle.propTypes = {\r\n  backgroundImageUrl: PropTypes.string.isRequired,\r\n  promptText: PropTypes.string.isRequired,\r\n  onSelectImage: PropTypes.func.isRequired,\r\n  index: PropTypes.number.isRequired,\r\n  classes: PropTypes.shape({\r\n    exampleImageCell: PropTypes.string,\r\n  }),\r\n};\r\n\r\nExampleImageCellWithoutStyle.defaultProps = {\r\n  classes: {},\r\n};\r\n","import React from 'react';\r\nimport { Button, Textarea, mergeClasses, useId } from '@fluentui/react-components';\r\nimport {\r\n  SendRegular,\r\n} from '@fluentui/react-icons';\r\n\r\nexport const MAX_PROMPT_LENGTH = 200;\r\n\r\nexport const PromptEditor = (props) => {\r\n  const {\r\n    i18n,\r\n    prompt,\r\n    setPrompt,\r\n    disabledText,\r\n    disabledButton,\r\n    onKeyDownInTextArea,\r\n    onClickGenerateButton,\r\n    placeholder,\r\n  } = props;\r\n\r\n  const textAreaId = useId('prompt-editor-textarea');\r\n\r\n  return (\r\n    <>\r\n      <div className={mergeClasses('prompt-title', 'prompt-editor-label')}>{i18n.getString(_TL_('What background do you want to create?'))}</div>\r\n      <div className={mergeClasses('prompt-editor', 'prompt-editor-text-container')}>\r\n        <Textarea\r\n          value={prompt || ''}\r\n          onChange={(e, data) => setPrompt(data.value)}\r\n          onKeyDown={onKeyDownInTextArea}\r\n          className=\"prompt-textarea\"\r\n          aria-label={i18n.getString(_TL_('Prompt Editor'))}\r\n          aria-describedby={textAreaId}\r\n          placeholder={placeholder}\r\n          disabled={disabledText}\r\n        />\r\n        <div id={textAreaId} style={{ display: 'none' }}>{i18n.getString(_TL_('{{prompt}}'), { prompt })}</div>\r\n        <div className={mergeClasses('action-bar', 'prompt-editor-actions-container')}>\r\n          <Button\r\n            icon={<SendRegular />}\r\n            appearance=\"transparent\"\r\n            onClick={onClickGenerateButton}\r\n            disabled={disabledButton}\r\n            className={mergeClasses('generate-button', disabledButton ? 'disabled' : 'enabled')}\r\n            aria-label={i18n.getString(_TL_('Expand background'))}\r\n          />\r\n        </div>\r\n      </div>\r\n    </>\r\n  );\r\n};\r\n","import React, { useRef, useEffect, useCallback, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nexport const ObjectSelectionImageView = ({\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  borderImageSrc,\r\n  workingSelectedImageSrc,\r\n  highlightedImageSrc,\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  const [maskIndex, setMaskIndex] = useState(undefined);\r\n\r\n  const windowToImgPosition = useCallback((x, y) => {\r\n    if (imageContainer.current) {\r\n      const imageBox = imageContainer.current.getBoundingClientRect();\r\n      const targetWidth = imageBox.width;\r\n      const targetHeight = imageBox.height;\r\n      // calculate the ratio of the original image and the target image for object-fit: contain\r\n      const wr = targetWidth / originalImageWidth;\r\n      const hr = targetHeight / originalImageHeight;\r\n      const ratio = Math.min(wr, hr);\r\n      const width = originalImageWidth * ratio;\r\n      const height = originalImageHeight * ratio;\r\n      const leftToImage = (targetWidth - width) / 2.0;\r\n      const topToImage = (targetHeight - height) / 2.0;\r\n      const { top, left } = imageBox;\r\n      return {\r\n        x: ((x - left) - leftToImage) * (originalImageWidth / width),\r\n        y: ((y - top) - topToImage) * (originalImageHeight / height),\r\n      };\r\n    }\r\n    return { x: -1, y: -1 };\r\n  }, [originalImageHeight, originalImageWidth]);\r\n\r\n  const mousemoveHandler = useCallback((e) => {\r\n    const { x, y } = windowToImgPosition(e.clientX, e.clientY);\r\n    const maskValue = getMaskValueAtPoint(x, y, originalImageWidth);\r\n    updateHighlightedImage(maskValue);\r\n  }, [getMaskValueAtPoint, originalImageWidth, updateHighlightedImage, windowToImgPosition]);\r\n\r\n  const mouseleaveHandler = useCallback(() => {\r\n    updateHighlightedImage(undefined);\r\n  }, [updateHighlightedImage]);\r\n\r\n  const mousedownHandler = useCallback((e) => {\r\n    const { x, y } = windowToImgPosition(e.clientX, e.clientY);\r\n    const maskValue = getMaskValueAtPoint(x, y, originalImageWidth);\r\n    if (maskValue > 0) {\r\n      toggleSelectedMask(maskValue);\r\n      logger.logTrace('Copilot change image background - object selection view - object selection');\r\n    }\r\n  }, [getMaskValueAtPoint, logger, originalImageWidth, toggleSelectedMask, windowToImgPosition]);\r\n\r\n  const keyHandler = useCallback((e) => {\r\n    if (maskValues && maskValues.length > 0) {\r\n      if (e.key === 'Tab') {\r\n        if (e.shiftKey === true) {\r\n          if (maskIndex === undefined) {\r\n            setMaskIndex(maskValues.length - 1);\r\n            updateHighlightedImage(maskValues[maskValues.length - 1]);\r\n            e.preventDefault();\r\n          } else if (maskIndex - 1 >= 0) {\r\n            setMaskIndex((maskIndex - 1));\r\n            updateHighlightedImage(maskValues[(maskIndex - 1)]);\r\n            e.preventDefault();\r\n          }\r\n        } else if (e.shiftKey === false) {\r\n          if (maskIndex === undefined) {\r\n            setMaskIndex(0);\r\n            updateHighlightedImage(maskValues[0]);\r\n            e.preventDefault();\r\n          } else if ((maskIndex + 1) < maskValues.length - 1) {\r\n            setMaskIndex((maskIndex + 1));\r\n            updateHighlightedImage(maskValues[(maskIndex + 1)]);\r\n            e.preventDefault();\r\n          }\r\n        }\r\n      } else if (e.key === 'Enter' && maskIndex !== undefined) {\r\n        toggleSelectedMask(maskValues[maskIndex]);\r\n        logger.logTrace('Copilot change image background - object selection view - object selection');\r\n        e.preventDefault();\r\n      }\r\n    }\r\n  }, [logger, maskIndex, maskValues, toggleSelectedMask, updateHighlightedImage]);\r\n\r\n  const resetMaskHandler = useCallback(() => {\r\n    setMaskIndex(undefined);\r\n    updateHighlightedImage(undefined);\r\n  }, [updateHighlightedImage]);\r\n\r\n  useEffect(() => {\r\n    const imageBox = imageContainer.current;\r\n    if (imageBox) {\r\n      imageBox.addEventListener('mousemove', mousemoveHandler);\r\n      imageBox.addEventListener('mouseleave', mouseleaveHandler);\r\n      imageBox.addEventListener('mousedown', mousedownHandler);\r\n      imageBox.addEventListener('keydown', keyHandler);\r\n      imageBox.addEventListener('blur', resetMaskHandler);\r\n      imageBox.addEventListener('focus', resetMaskHandler);\r\n    }\r\n    return () => {\r\n      if (imageBox) {\r\n        imageBox.removeEventListener('mousemove', mousemoveHandler);\r\n        imageBox.removeEventListener('mouseleave', mouseleaveHandler);\r\n        imageBox.removeEventListener('mousedown', mousedownHandler);\r\n        imageBox.removeEventListener('keydown', keyHandler);\r\n        imageBox.removeEventListener('blur', resetMaskHandler);\r\n        imageBox.addEventListener('focus', resetMaskHandler);\r\n      }\r\n    };\r\n  }, [windowToImgPosition, mousemoveHandler, mouseleaveHandler, mousedownHandler, keyHandler, resetMaskHandler]);\r\n\r\n  return (\r\n    <div\r\n      className=\"image-wrapper\"\r\n      ref={imageContainer}\r\n      // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex\r\n      tabIndex={0}\r\n      aria-label={i18n.getString(_TL_('Object Selection Control'))}\r\n    >\r\n      {originalImageUrl && (\r\n        <>\r\n          <img className=\"original-image\" src={originalImageUrl} alt={i18n.getString(_TL_('Original image layer'))} />\r\n          <div className=\"cover-original-image\" />\r\n          {isFetchingSegmentations && (<div className=\"loading-segmentations-image\" />)}\r\n          {!isFetchingSegmentations && (\r\n            <>\r\n              {(borderImageSrc && <img className=\"border-image\" src={borderImageSrc} alt={i18n.getString(_TL_('Border image layer'))} />)}\r\n              {(workingSelectedImageSrc && <img className=\"selected-image\" src={workingSelectedImageSrc} alt={i18n.getString(_TL_('Selected image layer'))} />)}\r\n              {(highlightedImageSrc && <img className=\"highlighted-image\" src={highlightedImageSrc} alt={i18n.getString(_TL_('Highlighted image layer'))} />)}\r\n            </>\r\n          )}\r\n        </>\r\n      )}\r\n    </div>\r\n  );\r\n};\r\n\r\n\r\nObjectSelectionImageView.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  maskValues: PropTypes.arrayOf(PropTypes.number),\r\n  isFetchingSegmentations: PropTypes.bool.isRequired,\r\n};\r\n\r\nObjectSelectionImageView.defaultProps = {\r\n  maskValues: [],\r\n};\r\n","import { useCallback } from 'react';\r\n\r\nexport const useUploadAsset = ({ dataService, perfMarker, isUploadImageUpscaleEnabled }) => {\r\n  let videoUploadPerfMarker;\r\n\r\n  const uploadFileAsync = useCallback(({\r\n    dataURL,\r\n    fileObject,\r\n    nameWithoutExt,\r\n    updateCurrentProgress,\r\n    isVideo,\r\n    folderId,\r\n    uploadCallback,\r\n  }) => {\r\n    if (perfMarker) {\r\n      videoUploadPerfMarker = perfMarker.createChild('videoUpload');\r\n      videoUploadPerfMarker.willInit();\r\n    }\r\n\r\n    const commonOptions = {\r\n      updateCurrentProgress,\r\n      name: nameWithoutExt,\r\n      folderId,\r\n    };\r\n\r\n    if (isVideo) {\r\n      return dataService.uploadVideo({\r\n        ...commonOptions,\r\n        fileObject,\r\n        perfMarker: videoUploadPerfMarker,\r\n      }).then((res) => {\r\n        if (uploadCallback) {\r\n          uploadCallback(res);\r\n        }\r\n      });\r\n    }\r\n\r\n    return dataService.uploadImage({\r\n      ...commonOptions,\r\n      imageData: dataURL,\r\n      supportUpscale: isUploadImageUpscaleEnabled ? true : undefined,\r\n    }).then((res) => {\r\n      if (uploadCallback) {\r\n        uploadCallback(res);\r\n      }\r\n    });\r\n  }, [dataService, isUploadImageUpscaleEnabled, videoUploadPerfMarker]);\r\n\r\n  return {\r\n    uploadFileAsync,\r\n  };\r\n};\r\n","import { useCallback, useRef } from 'react';\r\nimport {\r\n  validateImageAsync as validateImageAsyncInternal,\r\n  validateVideoAsync,\r\n  readFileAsDataURLAsync,\r\n} from '@bingads-webui-campaign-react/upload-file-picker';\r\nimport { getImageDetailAsync } from '@bingads-webui-campaign/image-experience-utils';\r\nimport { MIN_SIZE, UPSCALE_MIN_SIZE } from '../model';\r\n\r\nconst READ_VIDEO_MAX_TIME = 10000; // 10s\r\n\r\nexport const useReadAsset = () => {\r\n  const readFileAsync = useCallback((fileObject, { isVideo } = {}) => {\r\n    if (isVideo) {\r\n      // for video, data URl is optional to MT request, so here swallow the error to unblock next.\r\n      return readFileAsDataURLAsync(fileObject).timeout(READ_VIDEO_MAX_TIME).catch(() => {});\r\n    }\r\n\r\n    return readFileAsDataURLAsync(fileObject);\r\n  }, []);\r\n\r\n  return {\r\n    readFileAsync,\r\n  };\r\n};\r\n\r\nexport const useValidateAsset = () => {\r\n  const isImageUpscaledRef = useRef(false);\r\n\r\n  const validateImageAsync = useCallback(\r\n    ({ dataURL, isUploadImageUpscaleEnabled }) => validateImageAsyncInternal({\r\n      imageSource: dataURL,\r\n      minimumHeight: isUploadImageUpscaleEnabled ? UPSCALE_MIN_SIZE[1] : MIN_SIZE[1],\r\n      minimumWidth: isUploadImageUpscaleEnabled ? UPSCALE_MIN_SIZE[0] : MIN_SIZE[0],\r\n    })\r\n      .then(() => getImageDetailAsync(dataURL))\r\n      .then((img) => {\r\n        if (isUploadImageUpscaleEnabled && img &&\r\n          ((img.naturalWidth >= UPSCALE_MIN_SIZE[0] && img.naturalWidth < MIN_SIZE[0]) ||\r\n            (img.naturalHeight >= UPSCALE_MIN_SIZE[1] && img.naturalHeight < MIN_SIZE[1]))\r\n        ) {\r\n          isImageUpscaledRef.current = true;\r\n        } else {\r\n          isImageUpscaledRef.current = false;\r\n        }\r\n        return {\r\n          isImageUpscaled: isImageUpscaledRef.current,\r\n        };\r\n      })\r\n    , []\r\n  );\r\n\r\n  const validateFileAsync = useCallback(({ dataURL, isVideo, isUploadImageUpscaleEnabled }) => {\r\n    if (isVideo) {\r\n      return validateVideoAsync();\r\n    }\r\n\r\n    return validateImageAsync({ dataURL, isUploadImageUpscaleEnabled });\r\n  }, [validateImageAsync]);\r\n\r\n  return {\r\n    validateImageAsync,\r\n    validateFileAsync,\r\n  };\r\n};\r\n","import { useCallback } from 'react';\r\nimport _ from 'underscore';\r\nimport {\r\n  supportedVideoExtensions,\r\n} from '../model/constants';\r\n\r\nconst checkExtension = (supportedList, ext) => {\r\n  if (ext && !_.isEmpty(supportedList)) {\r\n    const extToCheck = ext.toLowerCase();\r\n\r\n    return _.chain(supportedList)\r\n      .map(item => item.toLowerCase())\r\n      .contains(extToCheck)\r\n      .value();\r\n  }\r\n\r\n  return false;\r\n};\r\n\r\nexport const useCustomizedHandlerOptions = () => {\r\n  const getCustomizedHandlerOptions = useCallback(({ ext } = {}) => ({\r\n    isVideo: checkExtension(supportedVideoExtensions, ext),\r\n  }), []);\r\n\r\n  return {\r\n    getCustomizedHandlerOptions,\r\n  };\r\n};\r\n","import React, { useCallback, useState } from 'react';\r\nimport classNames from 'classnames';\r\nimport { map, each, get, contains, filter } from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport { makeStyles, shorthands, } from '@fluentui/react-components';\r\nimport { stringifySync } from '@bingads-webui/safe-json';\r\nimport { parseFileName, generatePreviewArray, updateFilePreviewArrayUploadProgress, updateProgress, MaximumImageFileSizeMB, MaximumVideoFileSizeMB, } from '@bingads-webui-campaign-react/upload-file-picker';\r\nimport { runJobsInParallelWithRateLimit } from '@bingads-webui-universal/parallel-job-with-rate-limit';\r\nimport {\r\n  getImageValidationErrorMessage,\r\n} from '@bingads-webui-campaign/image-experience-utils';\r\nimport { MaxAddAssetJobInParell, supportedImageExtensions, supportedVideoExtensions } from '../model';\r\nimport { getAssetUploadError } from '../utils';\r\nimport { useUploadAsset } from './use-upload-asset';\r\nimport { useReadAsset, useValidateAsset } from './use-validate-asset';\r\nimport { useCustomizedHandlerOptions } from './use-customized-handler-options';\r\n\r\nconst MAX_UPSCALED_SIZE = 4;\r\n\r\nconst useStyles = makeStyles({\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 useUploadFiles = ({\r\n  logger, dataService, perfMarker, notificationApi, i18n, onFilesAddedCallback, aid, setErrors, filePickerI18n, uploadCallback, isUploadImageUpscaleEnabled,\r\n}) => {\r\n  const [previewArr, setPreviewArr] = useState([]);\r\n  const { readFileAsync } = useReadAsset();\r\n  const { validateFileAsync } = useValidateAsset();\r\n  const { uploadFileAsync } = useUploadAsset({ dataService, perfMarker, isUploadImageUpscaleEnabled });\r\n  const { getCustomizedHandlerOptions } = useCustomizedHandlerOptions();\r\n  const classes = useStyles();\r\n\r\n  const onFileRead = useCallback((selectedFiles, callback) => {\r\n    setErrors([]);\r\n\r\n    const isMultipleFiles = selectedFiles.length > 1;\r\n    const customizedOptions = map(selectedFiles, (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 {\r\n        ...passedOptions,\r\n        nameWithoutExt,\r\n      };\r\n    });\r\n\r\n    // there is a perf concern for large video file\r\n    // previous design is reading files first and then process\r\n    // for video, may need different handling, will address it later\r\n    return Promise.map(\r\n      selectedFiles,\r\n      (fileObj, index) => readFileAsync(fileObj, customizedOptions[index])\r\n    ).then((fileSources) => {\r\n      const fileAdditionalInfoArr = [];\r\n      const validateFilePromise = Promise.map(\r\n        fileSources,\r\n        (fileSource, index) =>\r\n          validateFileAsync({\r\n            isUploadImageUpscaleEnabled,\r\n            dataURL: fileSource,\r\n            ...customizedOptions[index],\r\n          }).then((validatedResult) => {\r\n            const isImageUpscaled = get(validatedResult, 'isImageUpscaled', false);\r\n            const { nameWithoutExt } = customizedOptions[index];\r\n            fileAdditionalInfoArr[index] = {\r\n              isImageUpscaled,\r\n              text: nameWithoutExt,\r\n            };\r\n          }).catch((e) => {\r\n            if (e && e.message === 'SizeValidationError' && logger && logger.logTrace) {\r\n              logger.logTrace(`Add Media Panel per file - SizeValidationError: ${stringifySync(e)}`);\r\n              logger.logTrace(`Add Media Panel per file - SizeValidationError - ImageSource: ${stringifySync(fileSource)}`);\r\n            }\r\n            throw e;\r\n          })\r\n      );\r\n\r\n      const doubleValidateFilePromise = validateFilePromise\r\n        .then(() => {\r\n          const needUpscaledImage = filter(fileAdditionalInfoArr, item => item && item.isImageUpscaled);\r\n          if (needUpscaledImage.length > MAX_UPSCALED_SIZE) {\r\n            // When the need upscaled image count over the max size, should skip the upscale feature and use original threshold to validate again.\r\n            return Promise.map(fileSources, (fileSource, index) => {\r\n              if (fileAdditionalInfoArr[index].isImageUpscaled === true) {\r\n                return validateFileAsync({\r\n                  isUploadImageUpscaleEnabled: false,\r\n                  dataURL: fileSource,\r\n                  ...customizedOptions[index],\r\n                }).catch((e) => {\r\n                  if (e && e.message === 'SizeValidationError' && logger && logger.logTrace) {\r\n                    logger.logTrace(`Add Media Panel per file - SizeValidationError: ${stringifySync(e)}`);\r\n                    logger.logTrace(`Add Media Panel per file - SizeValidationError - ImageSource: ${stringifySync(fileSource)}`);\r\n                  }\r\n                  throw e;\r\n                });\r\n              }\r\n              return Promise.resolve();\r\n            });\r\n          }\r\n          return Promise.resolve();\r\n        });\r\n\r\n      return doubleValidateFilePromise.then(() => {\r\n        const sourcesForPreview = generatePreviewArray({\r\n          files: selectedFiles,\r\n          fileSources,\r\n          customizedOptions,\r\n        });\r\n\r\n        setPreviewArr(sourcesForPreview);\r\n\r\n        const setProgress = (index, progress) => {\r\n          setPreviewArr((prevArr) => {\r\n            const newState =\r\n                updateFilePreviewArrayUploadProgress(index, progress)({ previewArr: prevArr });\r\n\r\n            return newState.previewArr;\r\n          });\r\n        };\r\n\r\n        const uploadBatchs = [];\r\n\r\n        each(fileSources, (fileSource, index) => {\r\n          const { nameWithoutExt } = customizedOptions[index];\r\n\r\n          uploadBatchs.push(() => uploadFileAsync({\r\n            dataURL: fileSource,\r\n            fileObject: selectedFiles[index],\r\n            updateCurrentProgress: updateProgress({\r\n              setProgress,\r\n              index,\r\n              uploadProgressBoundary: 1,\r\n            }),\r\n            uploadCallback,\r\n            nameWithoutExt,\r\n            ...customizedOptions[index],\r\n          }));\r\n        });\r\n\r\n        const uploadErrorCodeArr = [];\r\n        const handleJobError = (err) => {\r\n          const errorCode = get(err, ['body', 'value', 0, 'Code'], '');\r\n\r\n          // when errorCode is empty, it means some server error, e.g. 500 response\r\n          uploadErrorCodeArr.push(errorCode);\r\n        };\r\n        return runJobsInParallelWithRateLimit({\r\n          jobsToRateLimit: uploadBatchs,\r\n          maxJobsInParallel: MaxAddAssetJobInParell,\r\n          handleJobError,\r\n        })\r\n          .then((uploadResult) => {\r\n            const errorMsg = getAssetUploadError({\r\n              uploadErrorCodeArr,\r\n              filePickerI18n,\r\n              aid,\r\n              logger,\r\n              i18n,\r\n            });\r\n\r\n            if (errorMsg) {\r\n              onFilesAddedCallback();\r\n              setPreviewArr([]);\r\n              notificationApi.showWarning(errorMsg);\r\n              logger.logTrace(`Add Media Panel: failed to upload assets to folder, error: ${errorMsg}`);\r\n            } else {\r\n              const assetIds = uploadResult && uploadResult.join(',');\r\n              logger.logTrace('Add Media Panel: saved uploaded assets to folder', { assetIds });\r\n\r\n              const upscaledImagesArr = filter(fileAdditionalInfoArr, 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 assets were 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                  <span>\r\n                    {i18n.getString(_TL_('Your assets were successfully uploaded.'))}\r\n                    <button className={classNames(`HelpTopic ${classes.linkButton}`)} query=\"help:app54863\">{i18n.getString(_TL_('Learn more about asset guidelines.'))}</button>\r\n                  </span>\r\n                ));\r\n              }\r\n              onFilesAddedCallback();\r\n              setPreviewArr([]);\r\n            }\r\n          });\r\n      });\r\n    }).catch((e) => {\r\n      const genericErrorMsg = i18n.getString(_TL_('We\\'ve encountered an error and can\\'t continue.'));\r\n      const newErrors = [\r\n        getImageValidationErrorMessage(e, filePickerI18n, isMultipleFiles, isUploadImageUpscaleEnabled /* skipDimension */) || genericErrorMsg,\r\n      ];\r\n      setPreviewArr([]);\r\n      setErrors(newErrors);\r\n\r\n      logger.logTrace(`Add Media Panel: failed to upload assets to folder, error: ${newErrors[0]}`);\r\n      if (e && e.message === 'SizeValidationError' && logger && logger.logTrace) {\r\n        logger.logTrace(`Add Media Panel - SizeValidationError: ${stringifySync(e)}`);\r\n      }\r\n    }).finally(() => {\r\n      callback();\r\n    });\r\n  }, [setErrors, getCustomizedHandlerOptions, readFileAsync, validateFileAsync, logger, uploadFileAsync, uploadCallback, filePickerI18n, aid, onFilesAddedCallback, notificationApi, i18n, classes.linkButton, isUploadImageUpscaleEnabled]);\r\n\r\n  return {\r\n    onFileRead,\r\n    previewArr,\r\n  };\r\n};\r\n\r\nexport const isReachFileSizeLimit = ({ ext, fileSizeMB }) => {\r\n  let limitMB;\r\n\r\n  if (contains(supportedImageExtensions, ext)) {\r\n    limitMB = MaximumImageFileSizeMB;\r\n  } else if (contains(supportedVideoExtensions, ext)) {\r\n    limitMB = MaximumVideoFileSizeMB;\r\n  }\r\n\r\n  return limitMB > 0 && fileSizeMB > limitMB;\r\n};\r\n\r\nexport const getReachFileSizeLimitErrorMessage = ({ i18n }) =>\r\n  i18n.getString(\r\n    _TL_('One or more assets exceed the maximum file size. Please upload images that are smaller than {{maximumImageFileSize}} MB and videos that are smaller than {{maximumVideoFileSize}} MB.'),\r\n    {\r\n      maximumImageFileSize: MaximumImageFileSizeMB,\r\n      maximumVideoFileSize: MaximumVideoFileSizeMB,\r\n    }\r\n  );\r\n","import _ from 'underscore';\r\nimport { GetJsDataInfo } from '@bingads-webui-clientcenter/js-data-cc-rest-base';\r\n\r\nconst ccJSData = {\r\n  jsDataCcRest: null,\r\n};\r\n\r\nexport const initCcJsData = ({ serverContext }) => {\r\n  if (!ccJSData.jsDataCcRest) {\r\n    const options = {\r\n      cidFetcher: () => serverContext.CurrentCustomer.Id,\r\n      uidFetcher: () => serverContext.CurrentUser.Id,\r\n      appendErrorSummary: _.noop,\r\n      handleAjaxAuthFailure: _.noop,\r\n      willSupportCors: true,\r\n    };\r\n\r\n    ccJSData.jsDataCcRest = GetJsDataInfo(options, serverContext.ServicesEndpoints.ClientCenterUIAPI, []).jsDataCcRest;\r\n  }\r\n\r\n  return ccJSData;\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { CcJsDataContextProvider } from '@bingads-webui-cc-react/js-data-rest';\r\nimport { withServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { initCcJsData } from './init-cc-js-data';\r\n\r\nexport const withCcJsDataContextProvider = (WrappedComponent) => {\r\n  const HOC = (props) => {\r\n    const { serverContext } = props;\r\n    const { jsDataCcRest } = initCcJsData({ serverContext });\r\n\r\n    return (\r\n      <CcJsDataContextProvider initialJsData={jsDataCcRest}>\r\n        <WrappedComponent {...props} />\r\n      </CcJsDataContextProvider>\r\n    );\r\n  };\r\n\r\n  HOC.propTypes = {\r\n    serverContext: PropTypes.shape({\r\n      CurrentUser: PropTypes.shape({ Id: PropTypes.number }).isRequired,\r\n      CurrentCustomer: PropTypes.shape({ Id: PropTypes.number }).isRequired,\r\n      ServicesEndpoints: PropTypes.shape({\r\n        ClientCenterUIAPI: PropTypes.string.isRequired,\r\n      }),\r\n    }).isRequired,\r\n  };\r\n\r\n  return withServerContext(HOC);\r\n};\r\n"],"names":["videoIcon","SparkeSVGIcon","_jsxs","xmlns","width","height","viewBox","fill","children","_jsx","d","id","x1","y1","x2","y2","gradientUnits","stopColor","offset","HollowSparkleSVGIcon","BlackSparkleSVGIcon","InfoSparkleSVGIcon","SquareDismissIcon","_ref","i18n","src","squareDismissImage","alt","getString","_TL_","SpinnerIcon","spinnerBase","className","EntryCardSVGIcons","CreateSVGIcon","UploadSVGIcon","StockSVGIcon","InvestSVGIcon","PdfSVGIcon","WebsiteSVGIcon","WarningSVGIcon","CreateManualBrandKitSVGIcon","BrandKitLogoIconSVG","AIWarningIcon","AIWarningIconSource","ChooseImageIcon","ChooseImageSVG","EmptyViewIcons","ImageEmptyViewSVG","LibraryEmptyViewSVG","VideoEmptyViewSVG","CSMLAdType","MMA","Audience","ImageExtension","PMax","CSMLSortIcon","SortUp","SortDown","CSMLSortBy","ImageName","ImageNameDesc","MostRecent","MostRecentAsc","LastCreated","LastCreatedAsc","TopRated","AssetIdAsc","AssetIdDesc","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","CSMLVideoDuration","min","max","unlimited","CSMLTimeFrame","Anytime","Today","Last7Days","Last30Days","Custom","CSMLImportSource","Google","Facebook","CSMLAssetSource","UserUploaded","AIGenerated","Website","Shutterstock","BackgroundChangeGenerated","AIGeneratedByRecraft","ManualAddedImageSource","Library","ShutterStock","AIModelSource","Dalle","Recraft","DEFAULT_PAGE_SIZE","MIN_SIZE","UPSCALE_MIN_SIZE","ClarityTags","LaunchedAdsStudio","LaunchedAddImageAssetsFromAdsStudio","DisplayTemplateHomePage","EditDisplayTemplateImage","CreateDisplayTemplate","BrandKitPage","EditBrandKitImage","EditBrandKitLogo","CSMLAdTypeAbbr","_defineProperty","ROOT_FOLDER_ID","FolderAssetType","Image","Video","All","Folder","RootFolderName","isRootFolderId","folderIdToTest","supportedImageExtensions","GridSectionName","Asset","MaxAddAssetJobInParell","VideoStatus","Unverified","Draft","Active","Failed","AdsStudioPageName","LibraryPage","PerfPage","WebsiteImagePanelPage","StockImagePanelPage","AddVideoPanelPage","UploadFilesPanelPage","UploadFolderPanelPage","MixedImagePanelPage","MixedVideoPanelPage","EditImagePage","AssetDetailsPage","BackgroundRemovalModalPage","InvestImagePanelPage","InvestVideoPanelPage","AdditionalQueries","Query","FolderId","EditImageUrl","InitialCurrentView","TemplateId","TemplateGroupId","AdStudioSurveyTriggerFlag","App","RealUsedFlagSuffix","FilterType","SearchText","AssetType","ImageSize","VideoDuration","DateAdded","ImportSource","AssetSource","SearchTextFilter","type","title","AssetTypeFilter","DateAddedFilter","ImageSizeFilter","ImportSourceFilter","AssetSourceFilter","VideoDurationFilter","AllSupportedFilters","getAssetTypeOptions","key","text","MAX_DAYS","getTimeDescription","timestamp","_","now","Date","diffInSec","Math","round","seconds","diffInMin","minutes","diffInHour","hours","diffInDay","days","convertTimeDuration","DurationInMS","floor","timeArr","push","concat","join","getDateAddedChoiceOptions","timeZone","todayObj","getToday","today","CivilDate","year","month","day","last7day","plus","last30day","range","start","end","getImportSourceOptions","getSortingOptions","icon","getAssetSourceOptions","_CSMLSortingRequestPa","sortBy","sortDirection","imageAdExtSettings","C","getPlacementConfig","PT","LandscapeImage","isRequired","aspectRatioUIString","previewTypeString","WideImage","SquareImage","VerticalImage","MSAN","MSEdgeSingleCarousel","MSNInArticle","MSNSmallHeadline","AudienceSquareImage","AudienceWideImage","MMALandscapeImage","MMAVerticalImage","MMAWideImage","MMAV2MSEdgeCarousel","MMAV2MSNSingleCarousel","MMAV2MSNRestoday","MMAV2MSNPartnerStripe","MMAV2MSNRiver","MSEdgeMobile","MSANV2","MSEdgeCarousel","MSANBanner","MSANRiver","MSNCarousel","MSNPartnerStripe","MSNRestoday","MSANRectangle","ImageExt","BingDesktopSingleImage","MSEdgeMediumHeadline","MSNSingleCarousel","MSNMediumHeadline","BingDesktopMultiImage","BingMobileMultiImage","MSNDoubleCarousel","getAspectRatioConfig","adType","isMMAV2Enabled","isPMaxAspectRatiosV2Enabled","aspectRatios","getAspectRatios","isMultimediaAd","isMultimediaAdinMSANEnabled","isCombinedMsanAndMmaAspectRatios","allAspectRatioConfig","Image191x100","aspectRatio","aspectRatioAsRatio","aspectRatioString","Image4x1","Image1x1","Image1x2","Image178x100","extraExtension","BingSingleImage","Image172x100","Image169x100","Image150x100","Image155x100","Image133x100","MobileMultiImage","BingDesktopImage","Image93x100","Image201x100","Image200x100","Image153x100","Image124x100","Image120x100","aspectRatiosExceptOriginal","item","_objectSpread","minSize","placementType","getPreviewText","isImageExtension","shortHeadline","longHeadline","description","businessName","url","finalUrl","callToAction","sizeValidForRatio","cropSettings","SourceWidth","SourceHeight","getSizeErrorRatioList","requiredOnly","arguments","length","undefined","ratioList","config","getAllSizeErrorRatioList","errorListForMMA","errorListForAudience","errorListForExtension","errorListForPmax","Pmax","_toConsumableArray","getPlacementsToExpand","reject","p","map","_ref2","minHeight","value","AIPromptExamples","promptText","imageSrc","getUpdatedAssets","assets","_ref$updates","updates","imageCroppingTasks","videoUpdated","updatedAssets","asset","taskStatus","updating","isFinished","newUpdates","status","useClarityTags","customTags","_useState","useState","_useState2","_slicedToArray","haveSetClarityTags","setHaveSetClarityTags","useEffect","tagsToSet","reduce","tagsObj","currentTag","setClarityTag","ExternalEntityType","checkVideosIntermediateStatus","video","getSizeLimitPerAccount","aid","localStorage","getItem","valObj","JSON","parse","e","limitData","data","val","isValidXandrAccount","account","ExternalAccountIds","externalAccountId","Type","Id","getEntryCardData","_ref$cardKeys","cardKeys","_ref$onClickCreate","onClickCreate","_ref$onClickUpload","onClickUpload","_ref$onClickStock","onClickStock","_ref$onClickInvest","onClickInvest","_ref$onClickWebsite","onClickWebsite","_ref$isImagePage","isImagePage","_ref$isVideoPage","isVideoPage","_ref$isXandrIntegrati","isXandrIntegrationEnabled","uploadDescription","websiteDescription","websiteTitle","createDescription","createTitle","investDescription","cardData","image","onClick","filter","card","includes","getHomePageCardData","_ref2$cardKeys","_ref2$onClickUpload","_ref2$onClickStock","_ref2$onClickWebsite","_ref2$onClickInvest","_ref2$isXandrIntegrat","getImageAssetLimitPerAccount","logger","assetLimit","logError","getFoldersLimitPerAccount","foldersLimit","getVideoAssetLimitPerAccount","validate","test","getSearchQuery","_ref3","_ref3$search","search","_ref3$additionalQueri","additionalQueries","_ref3$removeQueries","removeQueries","query","queryString","AIGCHandler","isAdsStudioAIGCMVPEnabled","isAIGCRegionRestricted","notificationApi","enabledCallback","showWarning","getRealUsedFlagValue","preference","flagSuffix","realUsedFlagStr","realUsedFlagHandlerStr","realUsedFlag","realUsedFlagHandler","handleRealUsedFlag","_getRealUsedFlagValue","haveUsed","addAdStudioSurveyTriggerFlag","triggerFlag","usedFlagSuffix","_ref5","getTime","window","survey","surveyManager","trigger","checkIfSurveyIsOpen","removeAdStudioSurveyTriggerFlag","commonButtonStyle","display","shorthands","padding","justifyContent","alignItems","gap","borderRadius","backgroundColor","boxShadow","border","outline","maxHeight","overflow","minWidth","commonTextStyle","fontFamily","fontStyle","textAlign","flex","textOverflow","whiteSpace","commonIconStyle","margin","useAssetsEntryCardStyle","makeStyles","fillWidth","assetsEntryCard","color","fontSize","lineHeight","fontWeight","objectFit","AssetsEntryCard","isFillWidth","cardClassName","classes","Button","mergeClasses","Add20Regular","defaultProps","AddAssetEntryCard","useStyles","addMediaPanel","top","bottom","panelContent","scrollbarWidth","overlay","zIndex","layer","AdsStudioPanelContainer","forwardRef","props","ref","onRenderFooterContent","isOpen","dismiss","headerText","size","overlayBodyRef","useRef","styles","_Fragment","DrawerOverlay","open","modalType","position","tabIndex","DrawerHeader","DrawerHeaderTitle","action","appearance","Dismiss24Regular","DrawerBody","Children","child","cloneElement","DrawerFooter","Layer","Overlay","isDarkThemed","AdsStudioSpinner","useCustomSize","customStyle","spinnerStyles","useMemo","circle","root","Spinner","SpinnerSize","large","useActionButtonStyles","actionButton","ActionButton","Icon","primary","classnames","TilesGridCellActionButton","AdsStudoThemeContext","React","AdsStudioThemeProvider","theme","componentStyles","getComponentStyles","useCallback","componentName","components","contextValue","Provider","emptyAdsStudioTheme","useThemedStyles","prefixClassName","getDefaultStyles","themedStyles","overridenStyles","getOverridenStyles","defaultStyles","createUseStyles","name","withAdsStudioStyles","WrappedComponent","options","Component","useRawStyles","finalComponentName","displayName","HOC","_useThemedStyles","hoistNonReactStatics","positionFill","left","right","CellOverlay","cellOverlayContainer","TilesGridCellOverlay","background","opacity","transition","getCommonCellCardStyle","palette","flexShrink","flexGrow","neutralLight","CellCardWithOverlay","isOverlayEnabled","isCellFocused","renderOverlayContent","renderStaticOverlayContent","customCellCardClass","onClickFunc","event","stopPropagation","preventDefault","containerClass","cellCardContainer","cellCardContainerOverflow","cellCardWithOverlayContainer","focused","onKeyDown","keyCode","CellCard","TilesGridCellCard","_ref$core","core","_ref$core2$palette","TilesGridCellCardWithOverlay","_ref2$core","_ref2$core2$palette","activeStyle","transform","flexDirection","button","CellDecorativeIcon","iconName","centerContainer","circleContainer","iconContent","labelName","white","marginLeft","useGridDecorativeLabelStyle","tilesGridCellDecorativeLabel","tokens","colorNeutralForegroundInverted","marginRight","colorNeutralBackgroundStatic","float","cellLabelDisplay","CellDecorativeLabel","secondaryText","additionaIconName","additionalText","customClass","cellLabel","iconTextWrapper","role","TilesGridCellDecorativeLabel","iconProps","CellDeletionButtonDecorator","onDelete","cellDeletionButtonDecorator","IconButton","ariaLabel","disabled","deleteButton","TilesGridCellDeletionButtonDecorator","themeLighter","CellImage","showSpinner","onLoaded","onError","enableRetry","customClasses","onCustomizedSpinner","imageFit","ImageLoadState","notLoaded","imageLoadState","setImageLoadState","onLoadingStateChange","s","onLoadError","loaded","error","reloadImage","img","onerror","onload","onErrorWithRetry","retryCount","setTimeout","onReloadImage","onImageLoadingStateChange","tilesGridCellImageContainer","imageStateOverlayClass","stateParent","ArrowClockwiseRegular","reloadBtn","FluentImage","imageClass","maximizeFrame","noop","ImageFit","cover","TilesGridCellImage","useCellSectionDecoratorStyle","makeResetStyles","outlineStyle","outlineWidth","outlineColor","colorBrandBackground","borderRadiusSmall","TilesGridCellSelectionDecorator","selected","isFocused","cellSelectionDecoratorWrapper","selectedStateWrapper","cellSelectionDecorator","selectedState","Checkbox","checked","TilesGridLoadingCell","onLoading","gridCellContent","hasSetUpObserver","setHasSetUpObserver","onLoadingCalled","observer","current","IntersectionObserver","entries","entry","isIntersecting","target","unobserve","rootMargin","threshold","observe","commonStyles","useFolderIconStyle","folderIconContainer","folderTag","emptyFolderTag","folderContent","emptyFolderContent","FolderIconInternal","thumbnailImageUrl","isEmptyFolder","folderIconRootClassName","fit","FolderIcon","dragPreview","dragPreviewImage","dragPreviewFolderWrapper","dragPreviewFolder","dragPreviewCount","verticalAlign","TilesGridCellDragDecorator","draggable","dragItemsLength","onDrag","dragPreviewDescription","dragItemsLengthInner","renderDragPreview","thumbnailUrl","onDragStart","container","document","createElement","DragPreview","ReactDOM","domElement","firstChild","body","appendChild","dataTransfer","setDragImage","useFolderGridCellDropStyle","outlineOffset","TilesGridCellDropDecorator","droppable","onDrop","customClassName","isOver","setIsOver","tilesGridCellDropOver","onDragOver","onDragLeave","onDropHandler","classNames","DEFAULT_CONFIG","maxColumnWidth","minColumnWidth","rowHeight","preferredCellsPerPage","TilesGridInternal","items","onRenderCell","onRenderCellImpl","gridItem","_index","index","tilesGridContainer","Grid","renderItem","columnWidth","gridMode","columnPadding","rowPadding","scrollContainer","maxColumns","minItemHeight","TilesGrid","overflowX","boxSizing","findItem","itemToFind","itemKey","addItem","itemToAdd","removeItem","itemToRemove","MultiSelectionGrid","onSelectionChange","propSelectedItems","selectedItems","rest","_objectWithoutProperties","_excluded","allItems","selectItem","_action","_action2","newSelectedItems","fnSelectItem","SectionTilesGridInternal","sectionData","loadNextPage","multiSelectionEnabled","onRenderLoadingCell","otherProps","wrappedSectionData","section","params","sectionName","_ref4","totalItemCount","countOfSectionsWithData","sec","GridComponent","sectionTilesGridContainer","gridConainerClass","sectionTitle","sectionClassName","_excluded2","SectionTilesGrid","marginBottom","marginTop","useStyle","TextWithHighlightImp","txt","highlightedText","highlightedClassname","enableTooltip","textFragments","substr","matched","idx","lowerText","toLowerCase","lowerSubstr","startIndex","fragments","indexOf","substring","f","splitString","content","Tooltip","relationship","withArrow","positioning","TextWithHighlight","getSharedAssetContainerStyle","flexWrap","colorPaletteYellowBackground3","getSharedMultiSelectingCellStyles","selectableCardContainerAutoHideCheckbox","visibility","selectableCardContainer","iconStyles","useFolderGridCellStyle","cursor","paddingTop","paddingRight","getCountDescription","itemInfo","subFoldersCountDesc","imagesCountDesc","videosCountDesc","subfoldersCount","count","imageAssetsCount","videoAssetsCount","FolderCountInfo","FolderRegular","ImageRegular","VideoRegular","FoldersGridCell","onFolderClick","selectable","onSelect","allowedAssetType","renderAccessory","selectedItemCount","folderGridCellContainer","_ref6","folderName","itemCount","itemInfos","result","SubFoldersCount","ImageAssetsCount","VideoAssetsCount","convertItemInfo","TotalCount","firstAsset","folderAssetType","getFolderThumbnail","onCheckboxChange","hasAccessory","onChange","AdsStudioFoldersGridCell","useImageAssetsGridCellStyle","imageAssetsGridCellContainer","animationName","from","to","animationDuration","animationIterationCount","animationTimingFunction","imageCellLabelContainer","AdsStudioImageAssetsGridCell","renderCellContent","isMultiSelecting","deletable","isImageLoaded","setImageLoaded","sourceType","manualAddedImageSourceType","cellContent","defaultContent","Fragment","CellLabel","ArrowSync16Filled","funcRenderOverlayContent","onCellClick","withSelectionDecorator","decoratedContent","withDeleteButtonDecorator","GridCellFactory","DefaultImageGridCell","DefaultVideoGridCell","AdsStudioAssetGridCell","onDetailsClick","onEditClick","permissions","focusIndex","setFocusIndex","focusCellButton","i","assetContainers","querySelectorAll","firstButton","querySelector","code","focus","detailButton","editButton","clickDetails","evt","clickEdit","isVideoCell","isStockImageCell","showEditIcon","dynamic","VideoTemplateUI","metaData","EditRegular","ListRegular","logTrace","stringifySync","style","onClickVideo","useControlStyles","videoContainer","paddingBottom","sliderContainer","previewVideo","commonParentStyles","iconCommonStyles","usePlaceholderStyle","encoding","unverified","borderBottom","failed","VideoPureComponent","EncodingPlaceholderWithStyle","EncodingPlaceholder","FailedPlaceholderWithStyle","FailedPlaceholder","UnverifiedPlaceholderWithStyle","UnverifiedPlaceholder","useVideoAssetsGridCellStyle","VideoAssetsGridCellContainer","videoCellLabelContainer","videoCell","paddingLeft","placeholderCell","AdsStudioVideoAssetsGridCell","isVideoLoaded","setVideoLoaded","_useState3","_useState4","showVideo","setShowVideo","_useState5","_useState6","hideVideo","setHideVideo","_useState7","_useState8","thumbnailSeletable","setThumbnailSelectable","durationInMS","durationDesc","_useState9","_useState10","cellRef","setCellRef","timerRef","addEventListener","clearTimeout","onClickVideoCard","playVideoObject","play","wrapperWidth","offsetWidth","TimerRegular","placeholderContent","videoWrapper","x","autoPlay","muteByDefault","maxWidth","showTime","showPlay","customPlayObject","imageWrapper","borderRadiusXLarge","iconChecked","borderRadiusCircular","ImagePanelGridCell","onSelectImage","isSelected","isMultiple","onClickCell","CheckmarkCircleFilled","contentGridWrapper","PanelImageGrid","dataService","onFailedToLoadData","imageWidth","isHideDescription","_ref$isMultiple","isLoadingMore","totalAssetCount","loadMoreData","selectedItemIds","setSelectedItemIds","onSelectedChange","selectedItemId","itemId","assetsWithAction","onAction","imagesGridSection","sectionGridData","p$res","catch","err","usePerformanceFilterBarEditingStyle","filterBarEditingContainer","borderLeft","usePerformanceFilterBarReadonlyStyle","filterBarReadonlyContainer","textDecoration","addFilterButton","useViewAllFiltersButtonStyle","viewAllButton","viewContentTitle","viewAllFilterItem","EditingFilterBar","filters","focusedFilter","onRenderNewFilterContextMenu","onRenderFilter","onCloseClick","onResetClick","getDivider","isLast","isFirst","DismissRegular","PerformanceEditingFilterBar","FilterListWithPopover","onClickFilter","humanizedValue","ViewAllFiltersButtonImpl","selectedFilters","isFilterAlwaysVisible","Popover","align","PopoverTrigger","as","PopoverSurface","ViewAllFiltersButton","ReadonlyFilterBar","onClickAddFilterButton","filterListRef","onBlur","scrollTo","which","Enter","Space","onKeyPress","AddRegular","PerformanceReadonlyFilterBar","dynamicSizeContainer","videoOutlineGray","videoNormalContainer","backgroundImage","VideoPlaybackView","hideControls","onLoadedMetadata","onErrorHanler","isOutlineGray","useDynamicVideoSize","ev","errorCode","poster","controls","controlsList","disablePictureInPicture","mainViewContainer","mainViewContentContainer","mainViewIconLabelContainer","contentIcon","footerContainer","footerInvalid","footerContent","helpLink","ItemPlaceholderBoxViewFooterType","info","warning","ItemPlaceholderBoxView","mainViewIcon","mainViewIconLabel","footerProps","summary","tip","learnMoreLinkText","learnMoreLinkTopic","renderFooter","footContentStatus","getFolderProgressPreviewStyles","imageContent","baseItemBoxProgressStyles","imageName","imageContentText","folderSize","folderIconRoot","createFolderPreviewComponent","numberOfAssets","FileUploadingPreview","isVideo","SimpleImagePreview","VideoLoadState","placeholderView","hidden","shown","PlaceHolderBoxViewFooterConfig","VideoLoadPreview","onErrorHandler","videoLoadState","setVideoLoadState","cachedUrl","setCachedUrl","localizedTextFields","onLoadedMetadataInternal","onErrorHandlerInternal","addUrlInput","placeHolderImage","errorMesBelowUrlInput","videoPlaybackView","messageContainer","AddVideoPanelContent","videoLoaded","processedUrl","setProcessedUrl","messageBarText","setMessageBarText","urlInputErrors","setUrlInputErrors","_useState11","_useState12","videoLoadStarted","setVideoLoadStarted","handleInput","isEmpty","onUrlInputChange","errors","isValidUrl","Input","placeholder","contentBefore","SearchFilled","MessageBar","intent","contentWrapper","searchArea","input","messageBar","dropdown","listbox","StockImagePanelContent","cid","oDataConfig","setSelectedImages","setIsLoadingMore","isLoadingFirstPage","setIsLoadingFirstPage","images","setImages","totalCount","setTotalCount","selectedImages","searchQuery","skip","hasMore","filterQueryJSON","onInputChange","_ref$value","stockImageService","StockImageDataService","controller","getStockImages","loadImages","_ref2$$search","$search","_ref2$$skip","$skip","_ref2$$query","$query","customQueries","extend","appName","$top","language","includevertical","then","prevImages","Preview","Url","newSkip","imageId","originSelectedLength","newSelectedList","selectedItem","find","prototype","PropTypes","InvestImagePanelContent","investImageService","InvestImageDataService","getInvestImages","getInvestAssets","_ref2$creativeId","creativeId","queryParams","assetTypeId","XandrAssetId","videoNameWrapper","videoName","emptyButtonStyle","borderImage","borderColor","borderStyle","InvestVideoPanelContent","setSelectedVideos","videos","setVideos","selectedVideos","getInvestVideos","loadVideos","prevVideos","Description","onSelectVideo","videoId","videosGridSection","loop","urlPrefixOptions","domainInputWrapper","columnGap","prefixSelect","domainInput","suggestionErrorInvalid","DomainInputView","errorMessage","onDomainChange","isDomainInvalid","errorMessageClassName","domainInputWrapperClassName","urlPrefix","setUrlPrefix","selectId","useId","onSelectChange","onBlurUrl","newUrl","prefix","newDomain","Select","option","subdomainWrapper","divider","SubdomainInputView","isLoading","defaultDomainUrl","onDomainUrlChange","onSubdomainUrlChange","onDomainBlur","temporaryFinalUrl","newDomainUrl","getUrlProtocolAndDomain","hasProtocol","onDomainKeyDown","onSubdomainBlur","newSubdomainUrl","onSubdomainKeyDown","defaultValue","subdomainUrlRegex","WebsiteImagePanelContent","domainUrl","setDomailUrl","subdomain","setSubdomain","setIsdomainInvalid","_useWebsiteImages","isLoadingFistPage","setIsLoading","pageNumber","suggestionPoller","SuggestionPoller","trace","startSignal","stopSignal","jobCompleteCallback","setPageNumber","newPageNumber","getLandingPageSuggestions","landingPageUrl","isSubdomain","pageNum","minimumResolution","Promise","resolve","setJobCompleteCallback","forceInternalScrapingService","getMoreLandingPageSuggestions","_ref3$url","_ref3$sDomain","sDomain","ImagePaging","Images","ThumbnailUrl","ImageUrl","useWebsiteImages","showDomain","finalUrlDomain","onSubdomainChange","newValue","regexResult","trim","split","getSubdomain","newSearchUrl","OverflowItemsMenu","overflowItems","onItemClick","_useOverflowMenu","useOverflowMenu","isOverflowing","overflowCount","overflowItemsCount","Menu","MenuTrigger","disableButtonEnhancement","MoreHorizontalRegular","MenuPopover","MenuList","MenuItem","AdsStudioBreadcrumb","maxDisplayedItems","maxLengthOfItem","customItemStyle","_partitionBreadcrumbI","partitionBreadcrumbItems","startDisplayedItems","endDisplayedItems","lastIndex","isLastItem","isTruncatableBreadcrumbContent","BreadcrumbItem","BreadcrumbButton","breadcrumbButton","breadcrumbButtonCurrent","truncateBreadcrumbLongName","BreadcrumbDivider","Breadcrumb","useLibraryEmptyViewStyle","CardContainer","emptyView","emptyIcon","mainText","neutralForegroundRest","LibraryEmptyView","isInSubfolder","isAnyFilterSet","hideAddAssetCards","str","AddFromAnotherSourceSubMenu","onUploadImage","onUploadVideo","ImageMultiple20Regular","UploadFromComputerSubMenu","onUploadLocalFile","onUploadLocalFolder","ArrowUpload20Regular","NewDropDown","onUploadLocalFileClick","onUploadLocalFolderClick","onUploadImageClick","onUploadVideoClick","onAIGenerateClick","onCreateFolderClick","handleUsage","onAIGenerate","onCreateFolder","MenuButton","MenuDivider","FolderAdd20Regular","menuPopover","menuButton","unselectedMenuButton","enabledClearButton","colorNeutralForeground2BrandHover","disabledClearButton","colorNeutralForegroundDisabled","useCustomItemStyles","overflowY","contentAfter","colorNeutralBackground3","contentLabel","defaultMinWidth","defaultMinHeight","forceClear","onDismiss","_props$defaultOpen","defaultOpen","minWidthId","afterMinWidthId","minHeightId","afterMinHeightId","setIsOpen","showInput","setShowInput","menuList","setMenuList","minWidthRef","minHeightRef","setMinWidth","setMinHeight","getOnChangeCallback","setter","parseInt","onMinWidthChange","onMinHeightChange","onClear","newMinHeight","newMinWidth","focusTextField","textFieldRef","onMinWidthKeyUp","onMinHeightKeyUp","onDropdownDismiss","clear","timeoutId","removeAttribute","trapFocus","onOpenChange","Label","htmlFor","toString","Dismiss20Regular","civilDateEqual","d1","d2","compareCivilDate","civilDateRangeEqual","r1","r2","civilDateToDebugString","cd","civilDateRangeToDebugString","dr","getDefaultMetricDateRange","dateFormat","lcid","yesterday","RangeStartDate","formatCivilDate","raw","RangeEndDate","Rangelcid","RangeId","SimpleDateRangePickerInternal","defaultSelectedDateRange","defaultIsSelectingStartDate","onDateRangeChange","isSelectingStartDate","selectedDateRange","setSelectedDateRange","leftNavigatedDate","setLeftNavigationDate","rightNavigatedDate","minDate","years","maxDate","selectedRanges","onNavigateStartMonthDate","date","onNavigateEndMonthDate","months","onSelectDate","newDate","SingleMonthCalendar","navigatedDate","onNavigateDate","isRightNavigateVisible","isLeftNavigateVisible","SimpleDateRangePicker","containsErrorCodeInList","errorList","searchErrorCode","processVideoSizeLimitError","limit","fetchImgPromise","imgUrl","Error","crossOrigin","createOffScreenContext","canvas","context","getContext","getImagePixels","imageHeight","_createOffScreenConte","drawImage","getImageData","parseMaskResultPromise","imageUrl","rawMaskSetsBase64String","maskSetsBase64Json","parseSync","_maskSetsBase64Json$s","shape","maskSetsBase64","reshapeTo3D","array","y","z","res","temp2D","j","temp1D","k","_decompressAndParse3DArray","_asyncToGenerator","_regeneratorRuntime","mark","_callee","base64String","binaryString","byteArray","inputStream","decompressionStream","decompressedStream","decompressedResponse","decompressedBuffer","decompressedArray","int3DArray","wrap","_context","prev","next","atob","Uint8Array","charCodeAt","Blob","stream","DecompressionStream","pipeThrough","Response","arrayBuffer","sent","abrupt","stop","apply","_x","_x2","_x3","_x4","decompressAndParse3DArray","maskSets3Darray","maskSetsArray","row","a","flat","alphaArray","selectedMasksArray","pixelMask","_createOffScreenConte2","originalImagePixels","_createOffScreenConte3","imageData","pixels","_createOffScreenConte4","secondContext","secondCanvas","putImageData","imageUrlWithoutBackground","toDataURL","getMaskValueAtPointFunc","segmentationMasks","createColorBackground","selectedMasks","_hexToRgb","hex","exec","r","g","b","hexToRgb","_createOffScreenConte5","alpha","newR","newG","newB","_createOffScreenConte6","createSelectedImageSrc","masks","isAdd","hasSelectedImageSrc","_createOffScreenConte7","_createOffScreenConte8","dArr","clearRect","globalCompositeOperation","fillStyle","fillRect","borderImageSrc","selectedImageSrc","createHighlightedImage","workingMasks","maskValue","_createOffScreenConte9","PlacementQualities","PlacementQualityToText","formatFileSize","fileSize","getClosestAspectRatio","inputRatio","closestRatio","closestDiff","abs","_i","_Object$entries","Object","_Object$entries$_i","label","ratio","diff","formatBrandkitForAPI","obj","Array","isArray","formattedObj","keys","forEach","SubType","errorObjectToString","message","stack","stringify","getErrorString","msg","originError","fetchResultFromProcessors","processors","_ref$options","errorCodeMessageKeyMapping","InvalidDuration","AssetDataInvalidWidth","AssetDataInvalidHeight","ImageAIUpScaleFailed","processAssetLimitErrors","codes","imageSizeLimitResult","processImageSizeLimitError","imageAssetLimit","videoSizeLimitResult","videoAssetLimit","processImageErrors","filePickerI18n","processPredefinedAssetErrors","mappedKey","getAssetUploadError","uploadErrorCodeArr","_ref4$disableGenericM","disableGenericMessage","href","INVALID_FOLDER_ID","filterFilesByExtensions","files","supportedExtensions","acceptedFiles","file","ext","parseFileName","createFolderHierarchyMap","foldersToCreate","folders","relativePath","pathArr","pop","getRelativeFoldersFromRelativePath","webkitRelativePath","currFolderMap","folder","createFolderWithErrorHandling","folderCreationErrors","createFolderAsync","parentFolderId","currentFolderId","originalFolderName","_ref3$numberOfAttempt","numberOfAttempts","createFoldersByHierarchyInternal","folderMap","creationPromises","parentFolderName","folderNames","subFoldersMap","parentPromise","createFoldersByHierarchy","_ref5$folderCreationE","createRateLimitedAssetUploadPromises","_ref6$customizedFiles","customizedFilesOptions","acceptedAssets","folderIdPromises","_ref6$validateAssetAs","validateAssetAsync","uploadAssetAsync","_ref6$assetsSkippedUp","assetsSkippedUpload","_ref6$assetUploadErro","assetUploadErrors","readAssetAsync","processAssetJobPromises","assetUploadJobs","getFileFolderName","extraOptions","processAssetJobPromise","folderId","dataURL","validatedResult","isImageUpscaled","nameWithoutExt","fileObject","runJobsInParallelWithRateLimit","jobsToRateLimit","maxJobsInParallel","handleJobError","processFolderSizeLimitErrors","folderLimitResult","processFolderSizeLimitError","folderLimit","processAssetErrors","getFolderUploadError","genericErrorMessage","getTaskPoller","timerId","task","_ref$interval","interval","stopRunning","counter","taskPromise","setInterval","clearInterval","existDup","arr","newArr","newKeys","ACTION_TYPE_SET_FOLDER_DATA","AL_FOLDER_REDUCER_INIT_STATE","perfTimeSeriesData","folderDataStateReducer","state","actionType","actionData","_actionData$newFolder","newFolders","_actionData$newAssets","newAssets","_actionData$newPerfTi","newPerfTimeSeries","shouldFlush","pageName","foundFolderDup","foundAssetDup","AdsStudioErrorBase","_Error","_this","errorProcessor","_classCallCheck","_callSuper","_inherits","_createClass","_wrapNativeSuper","renameFolderApiErrorProcessor","msgs","InvalidFolderId","uxMessage","actionable","DuplicateFolderName","InvalidFolderName","genericError","deleteFolderApiErrorProcessor","ignorable","shortMsg","FolderHasAssets","InvalidId","FolderHasSubFolders","bulkMoveApiErrorProcessor","folderCount","assetCount","getUXMessage","bulkMoveApiItemErrorProcessor","availableActions","AssetIdInvalid","DuplicateAssetsUnderFolder","DuplicateImage","FolderCanNotMoveToTarget","createFolderApiErrorProcessor","DuplicateEntity","FolderLimitExceededPerAccount","getFolderLimit","bulkDeleteAssetsApiItemErrorProcessor","CampaignServiceMediaIdInvalid","CampaignServiceMediaIsAssociated","assetType","gotoAds","bulkDeleteAssetsApiErrorProcessor","generateImagesWithAIAPIErrorProcessor","reqCountErr","GenerateImagesPromptLengthInvalid","GenerateImagesRequestCountLimitExceededPerAccount","GenerateImagesRequestCountLimitExceeded","GenerateImagesPromptContentInvalid","GenerateImagesAIGCNoRecommendationWithBrand","brandNameDetected","brandNames","getAIGeneratedImageAPIErrorProcessor","AI_Generation_Failed","shouldRetry","getRemoveImageBackgroundAPIErrorProcessor","GenerateImagesAIGCInvalidImageSize","GenerateImagesAIGCInvalidImageContent","gotoDisallowedContent","GenerateImageAIGCInvalidUserPrompt","GenerateImageAIGCInvalidGeneratedImage","PATH_SEPERATOR","getPathString","folderPath","pathString","slice","fp","getAssetTypeToFetch","filterSettings","defaultAssetType","assetTypeFilter","useFolders","perfMetricDateRange","defaultPerfMetricDateRange","repository","ROOT_FOLDER","_useDataServiceReduce","initState","_useReducer","useReducer","_useReducer2","folderData","dispatch","setFolderData","setAssetsOnly","appendFolderData","setPerfTimeSeriesData","resetFolderData","useDataServiceReducer","setAssets","newFolderId","setNewFolderId","setFolderPath","currentFolder","latestRequestTimestamp","curFilterSettings","curSortBy","curAssetCountToLoadForSubFolders","curFolderAssetTypeToLoad","curIncludeParentHierarchy","curIncludeSubfolders","curPageName","curPerfMarker","pendingVideoBlobUploadPromiseTokens","resetData","_len","_key","loadFolderArgs","assetsToLoadForSubfolders","includeParentHierarchy","folderAssetTypeToFetch","getFolderArgs","includeAssets","includeSubfolders","isAssetPickerScenario","loadFolderDataInternal","hasDateRange","_ref5$includeSubfolde","perfMarker","_ref5$withBIData","withBIData","requestTimestamp","saveCurrentFilters","getFolderData","subfolders","searchText","searchTerm","dateAddedStart","dateAddedEnd","otherFilters","dateAddedDateRange","tapCatch","loadFolderData","_ref7","_ref7$includeSubfolde","loadFolderDataInDateRange","_ref8","_ref8$includeSubfolde","loadPerfTimeSeriesData","_ref9","perfTimeSeriesParams","getPerfTimeSeriesData","loadMoreFolderDataImpl","_ref11","_ref11$count","_ref11$withBIData","loadMoreFolderData","_ref12","_ref12$count","loadMoreFolderDataInDateRange","_ref13","_ref13$count","reloadFolders","reloadFoldersInDateRange","navigateIntoFolder","_ref16","folderToNavigate","_ref16$id","_ref16$navigateToNewF","navigateToNewFolder","_ref17","_ref18","parentHierarchy","curFolderPath","navigateToFolderInPath","_ref19","indexOfFolderInPath","_ref20","navigateIntoFolderItem","_ref21","_folder$parentHierarc","navigateIntoRootFolder","createFolder","_ref22","createFolderBulk","_ref23","deleteEmptyFolder","_ref24","deleteFolder","renameFolder","_ref25","newFolderName","uploadImageByUrlToFolder","_ref26","addUrlImageToFolder","addImageWithBaseIdToFolder","_ref27","baseId","uploadVideoToAzureBlob","_ref28","onProgress","uploadVideoToAzureBlobWithCancellation","_ref29","token","blobName","on","onSuccess","onCancel","uploadVideoToFolder","_ref30","updateCurrentProgress","uploadVideoPerfMarker","createChild","willInit","progressForBlobUpload","percentage","total","progressForSavingBlobToMT","_ref31","addFolderUploadAsset","inProgress","finally","done","cancelPendingVideoUpload","cancel","postVideoByUrl","_ref32","videoUrl","uploadImageToFolder","_ref33","supportUpscale","uploadStockImageToFolder","_ref34","stockImageId","addStockImageToFolder","uploadInvestImageToFolder","_ref35","investImageId","addInvestImageToFolder","uploadInvestVideoToFolder","_ref36","investVideoId","videoSrc","addInvestVideoToFolder","renameAsset","_ref37","assetId","newName","newAsset","splice","deleteAsset","_ref38","tap","_batchDeleteAssetsAsync","_ref39","parentPath","onItemDeleted","bulkDeleteAssets","_ref40","resultSummary","_ref41","assetName","path","api","_ref42","_deleteEmptyFolderAsync","_ref43","_ref43$onItemDeleted","_batchDelete","_ref44","_ref44$folders","_ref44$assets","_deleteFolder","_ref45","ic","concurrency","foldersResult","assetsResult","_ref46","totalItmCnt","_ref46$skip","_ref47","hasNextPage","results","_ref48","loadDataError","_ref49","batchDelete","_ref50","_ref50$folders","_ref50$assets","_ref50$onItemDeleted","batchMove","_ref51","destFolderId","_ref51$folders","_ref51$assets","dataOwnerPageName","propTypes","getFolders","getImages","useCommonImageRepoMethods","imageRepository","loadedImages","setLoadedImages","latestTimestampRef","setImageCroppingTasks","croppingTaskUpdated","setCroppingTaskUpdated","getImageById","_ref2$useCache","useCache","getImage","getImageCroppingTaskStatus","tasks","curTasks","dirty","newTaks","tsk","curTsk","newTsk","t","ex","renameImage","newImage","newImages","renameLocalImage","deleteImage","cropImage","placementSettings","addCreative","creativeData","VideoChangedFieldsWithStatusUpdate","checkError","retryPromise","getPromise","_ref2$timeout","timeout","_ref2$shouldRetry","useAIGeneratedImages","_ref3$pollInterval","pollInterval","_ref3$maxRetryCount","maxRetryCount","generateImagesByAI","prompt","onStartPolling","skipBrandDetection","ret","generateImagesWithAIAsync","taskId","taskPoller","getAIGeneratedImageTaskStatus","isTaskDone","monitorPromise","promise","AssetWithFoldersDataServiceContext","AssetWithFoldersDataServiceProvider","aigcRepository","folderRepository","videoRepository","_useFolders","loadAssetsUnderFolder","_useCommonImageRepoMe","_useCommonVideoRepoMe","setVideoUpdated","getVideoTaskStatus","videoTasks","videosToCheck","updateVideoStatusByIds","response","notFinishedTaskList","newVideoUpdated","responseKeys","addVideoCreative","videoCreative","getVideo","fetchMetadata","useCommonVideoRepoMethods","_useFolderPathTree","folderPathTree","setFolderPathTree","updateFolderPathTree","currentFolderPathTree","folderIdArr","subFoldersArr","totalSubfoldersCount","reload","recursiveUpdate","subFolders","subFoldersCount","newSubFloders","loadFolderPathTreeItemImp","subFolder","initializeFolderPathTree","loadFolderPathTreeItem","loadMoreFolderPathTreeItem","currentFolderCount","reloadFolderPathTreeItem","all","totalSubfoldersCountArr","useFolderPathTree","loadDataArgs","minImageWidth","minImageHeight","importSource","assetSources","_ref2$assetsToLoadFor","minVideoDuration","maxVideoDuration","_ref2$isGlobalSearch","isGlobalSearch","_ref2$includeParentHi","topRated","loadDataImpl","useDateRange","_ref3$assetsToLoadFor","_ref3$isGlobalSearch","_ref3$includeParentHi","_ref3$hasPerfData","hasPerfData","_ref3$includeSubfolde","loadData","args","loadDataInDateRange","loadPerfTimeSeriesDataImpl","_ref4$isGlobalSearch","_ref4$hasPerfData","uploadImageByUrl","uploadImage","_ref6$updateCurrentPr","_ref6$name","_ref6$folderId","uploadVideo","_ref7$updateCurrentPr","_ref7$name","_ref7$folderId","_ref7$perfMarker","uploadVideoByUrl","_ref8$name","_ref8$folderId","uploadStockImage","uploadInvestImage","_ref10","uploadInvestVideo","contextVal","reloadData","reloadDataInDataRange","loadMoreDataInDateRange","useAdsStudioServices","useContext","withAdsStudioServicesConsumer","Comp","pickedPropNames","CompWithService","pickedProps","WindowStatus","INDETERMINATE","UNSET","MAX_ITEM_COUNT","AssetsWindowManager","windowSize","this","assetWindows","windowsCount","ceil","get","w","windowIndex","SequenceAssetsWindowManager","sourceNames","winMgrList","sourceName","mgr","resetWindows","winObj","setTotalItemCount","isCompleted","cnt","winMgr","getNextUnloadedWindow","indexOffset","setWindowStatus","AssetsReducerActionType","AssetsReducerActions","pageIndex","pageSize","InitialReducerState","defaultReducer","_excluded3","_excluded4","_excluded5","startIdx","sequenceWindowReducer","_excluded6","_actionData$indexOffs","_excluded7","useAssetsServiceBase","reducer","reducerInitialArg","assetWindowManager","filtersRef","loadingWindowManagerRef","assetState","_ref2$updateCurrentPr","_ref2$name","_ref2$folderId","loadAssets","loadMoreAssets","noMoreData","reloadAssets","resetAssetsData","getTotalAssetCount","useBasicAssetsService","_ref$pageSize","useMultiSourceAssetsService","_ref2$pageSize","dataSourceNames","assetWindowManagerRef","service","getAssetCountBySource","useEditImageService","imagesWithFilter","setImagesWithFilter","imagesWithFilterAndBlur","setImagesWithFilterAndBlur","getImagesWithFilter","generateImageWithSmartEffect","smartEffects","smartEffectName","smartEffectOptions","filterRes","Effect","Resource","unshift","getImagesWithFilterAndBlurImp","blurLevel","ManualBgBlurLevel","getOriginalImageWithBlur","getImagesWithFilterAndBlur","originalImageWithBlurRes","imagesWithFilterAndBlurRes","imagesWithFilterAndBlurInner","blur","removeImageBackground","generateImageBackground","outputImageWidth","outputImageHeight","newImageUrl","generatedUrl","getImageSegmentations","originalUrl","saveImageCopy","saveImage","isImageFittingEnabled","_ref10$folderId","saveImageWithBaseId","_ref11$folderId","moveImageToFolder","_ref14","placements","skipOutpainting","_ref15","useVideoTaskPoller","newVideoTasks","isPollerRunning","currentTaskPoller","startVideoTaskStatusPoller","stopPoller","KEY","updateInProgressTasksStatus","inProgressTaskCount","ss","getSessionStorage","supportsStorage","set","invalidate","ImageCroppingTaskStatusPoller","_useAdsStudioServices","startImageCroppingTaskStatusPoller","VideoTaskStatusPoller","withAssetTaskStatusPoller","Wrapper","ChevronRightIcon","bundleIcon","ChevronRight20Filled","ChevronRight20Regular","startDate","endDate","CustomItem","isCustomSelected","customDateRange","setCustomDateRange","customRangeStartStr","customRangeEndStr","customOption","menuItemRef","startDateId","afterStartDateId","startDateRef","endDateId","afterEndDateId","isDatePickerOpen","setIsDatePickerOpen","onSelectedDateRangeChange","newRange","openDatePickerForStart","openDatePickerForEnd","onStartKeyDown","onEndKeyDown","MenuItemRadio","hasSubmenu","readOnly","CalendarLtr20Regular","defaultTimeFrame","defaultCustomDateRange","checkedValues","setCheckedValues","optionsWithoutCustom","formatDate","selectedChoice","dropdownTitle","onDropdownClear","timeframe","onCheckedValueChange","checkedItems","hasCheckmarks","searchBox","backgroundSize","SearchBoxFilter","onSearchTextChanging","onSearchTextChange","onSearchTextBlur","onSearchTextClear","defaultSearchText","searchboxPlaceHolder","autoFocus","SearchBox","toggleButton","toggleButtons","selectedButton","AssetTypeToggleButtonsFilter","optionsState","toggleSelectedOption","ToggleButtons","SortByFilter","selectedOptionMemo","selectedOption","ArrowSortUp20Regular","ArrowSortDown20Regular","ArrowSort20Regular","checkbox","defaultSelectedAssetSources","selectedAssetSources","setSelectedAssetSources","selectedOptions","onChangeCallback","selectedSources","minDuration","customDuration","maxDuration","defaultMaxDuration","defaultMinDuration","minDurationId","afterMinDurationId","maxDurationId","afterMaxDurationId","minDurationRef","maxDurationRef","setMinDuration","setMaxDuration","minDurationInvalid","setMinDurationInvalid","maxDurationInvalid","setMaxDurationInvalid","onMinDurationChange","onMaxDurationChange","newMinDuration","newMaxDuration","onMinDurationKeyUp","onMaxDurationKeyUp","defaultImportSource","thumbSizeVar","railSizeVar","railColorVar","progressColorVar","thumbColorVar","sliderMinProgressVar","sliderMaxProgressVar","videoDuration","videoDurationScrollbar","touchAction","justifyItems","gridTemplateRows","gridTemplateColumns","colors","colorNeutralStrokeAccessible","colorCompoundBrandBackground","colorCompoundBrandBackgroundHover","colorCompoundBrandBackgroundPressed","rail","gridRowStart","gridRowEnd","gridColumnStart","gridColumnEnd","forcedColorAdjust","colorTransparentStroke","thumb","colorNeutralBackground1","colorNeutralStroke1","rangeInput","pointerEvents","minRangeInput","colorStrokeFocus2","borderRadiusMedium","maxRangeInput","minThumb","maxThumb","getPercent","Slider","setValue","getRelatedValue","isDragging","setIsDragging","onMouseMove","onMouseUp","removeEventListener","onMouseDown","console","log","VideoDurationScrollbarFilter","minInputId","maxInputId","minDurationFilter","maxDurationFilter","minValue","setMinValue","maxValue","setMaxValue","scrollbarRef","styleVariables","wrappedSetMinValue","shouldCallOnChange","wrappedSetMaxValue","clientX","scrollbarBox","getBoundingClientRect","onClickRail","FilterToggleButton","ToggleButton","Filter20Regular","getCivilDateToday","DEFAULT_RANGE","FilterContext","useFilterBarState","userPreference","defaultMinVideoDuration","defaultMaxVideoDuration","setFilterBar","_useAdditionalFilterB","showAdditionalFilterBar","setShowAdditionalFilterBar","toggleFilterBar","useAdditionalFilterBarState","_useAssetTypeState","assetTypes","initialState","assetTypesState","setAssetTypesState","isImageSelected","isVideoSelected","toggleAssetType","newAssetTypesState","optionKey","useAssetTypeState","_useSearchBoxState","_ref$defaultSearchTex","setSearchText","searchTextValueRef","useSearchBoxState","_useSortByState","setSortBy","sortingOptions","safeSetSortBy","newVal","allSortByOptions","values","safeNewValue","onSortByChange","_evt","sortby","useSortByState","_useDateAddedState","ianaTimeZone","dateAddedFilter","setDateAddedFilter","dateAddedFilterCustomDateRange","setDateAddedFilterCustomDateRange","dateAddedChoiceOptions","onDateAddedFilterChange","tf","cdr","useDateAddedState","_useAssetSourcesState","_ref$disabledAssetSou","disabledAssetSources","setAssetSources","assetSourceOptions","onAssetSourceFilterChange","newAssetSources","useAssetSourcesState","_useImportSourceState","setImportSource","importSourceOptions","onImportSourceFilterChange","newImportSource","useImportSourceState","_useImageSizeState","minWidthFilter","setMinWidthFilter","minHeightFilter","setMinHeightFilter","onImageSizeFilterChange","useImageSizeState","_useVideoDurationStat","_ref$defaultMinVideoD","_ref$defaultMaxVideoD","setMinDurationFilter","setMaxDurationFilter","onVideoDurationFilterChange","useVideoDurationState","isDateAddedFilterActive","isImportSourceFilterActive","isAssetSourceFilterActive","isAdditionalFilterActive","getFilters","useFilterBarStyles","filterBar","rowGap","remaining","useBaseAdditionalFilterBarStyles","colorNeutralForeground2","fontWeightSemibold","useAdditionalFilterBarStyles","hide","filterText","AdditionalFilterBar","baseClasses","filterId","setForceClear","VideosFilterBar","_useFilterBarState","FluentProvider","webLightTheme","ImagesFilterBar","_useFilterBarState2","LibraryFilterBar","_useFilterBarState3","assetTypeToggleButtons","SearchResultFilterBar","_useFilterBarState4","FilterContextProvider","withFilterContext","ImportSourceFilterComponent","onValueChange","dropdownOptions","newHumanizedVaue","newHumanizedValue","AssetSourceFilterComponent","ImageSizeFilterComponent","onImageSizeChange","AL_DATE_ADDED_FILTER_DEFAULT_RANGE","getDefaultDateRange","DateAddedFilterComponent","_ref14$dateAddedFilte","PerformanceSearchTextFilterComponent","getPerformanceFilterComponents","useBreadcrumbStyles","breadcrumbContainer","FolderPathBreadcrumb","visibleForRootFolder","useAdsStudioLibraryPageContentStyle","HiddenDivForAnnounce","DEFAULT_GRID_CONFIG","toAnnounce","announce","setAnnounce","clip","overlaySpinnerStyles","FOLDER_GRID_CONFIG","AdsStudioLibraryPageContentInternal","renderHeader","renderGridCell","adsStudioUserPreferences","dataLoaded","displayFolderPath","reloadingFolders","renderToolbar","renderEmptyView","sectionSelectedItems","isAssetLibraryAIGCMVPEnabled","preDefinedAssetSources","navigation","gridScrollContainer","isXandrIntEnabled","XandrIntegrationEnabled","useJsData","jsData","Account","announcedText","setAnnouncedText","_useMemo","searchBoxText","openSystemUploadRef","gotoUploadFilesPanelPage","openSystemUpload","onStockButtonClick","gotoStockImagePanelPage","onInvestButtonClick","gotoInvestImagePanelPage","onWebsiteButtonClick","gotoWebsiteImagePanelPage","gotoUploadFolderPanelPage","gotoMixedVideoPanelPage","gotoAddVideoPanelPage","gotoMixedImagePanelPage","loadedAssetList","others","cell","isPageInited","setPageInited","loadingData","setLoadingData","loadDataAsync","o","libraryPageLoadDataPerfMarker","usePreDefinedAssetSources","bulkTookbar","onFolderPathClicked","onRenderHeader","gotoAIGenerationPanelPage","foldersGridSection","assetsGridSection","AssetLibraryCopilot","willFetchData","willRender","isPageLoading","hadNoData","isSectionDataEmptyStatus","injectedContentContainer","emptyViewContainer","assetLibraryUserPreferences","assetLibraryAccountPreferences","AdsStudioLibraryPageContent","dialog","wordBreak","ConfirmDialog","isDisplayed","errorText","confirmString","cancelString","onClickConfirm","onClickCancel","isUiBlocked","warningMsg","DismissIcon","Dialog","DialogSurface","DialogBody","DialogTitle","DialogContent","DialogActions","GenerateImageContext","GenerateImageContextProvider","generateImageExample","setGenerateImageExample","withGenerateImageContext","useLoadingViewStyles","backgroundRepeat","animation","backgroundPosition","LoadingIndicator","loadingViewStyles","ExamplePromptList","backgroundImageUrl","ExampleImageListWithoutStyle","MultiLineEllipsisText","ExampleImageCell","labelId","promptList","wrappedOnSelectImage","exampleImageList","template","ExampleImageCellWithoutStyle","exampleImageCell","MAX_PROMPT_LENGTH","PromptEditor","setPrompt","disabledText","disabledButton","onKeyDownInTextArea","onClickGenerateButton","textAreaId","Textarea","SendRegular","ObjectSelectionImageView","originalImageUrl","originalImageHeight","originalImageWidth","getMaskValueAtPoint","updateHighlightedImage","isFetchingSegmentations","toggleSelectedMask","workingSelectedImageSrc","highlightedImageSrc","maskValues","imageContainer","maskIndex","setMaskIndex","windowToImgPosition","imageBox","targetWidth","targetHeight","wr","hr","leftToImage","topToImage","mousemoveHandler","_windowToImgPosition","clientY","mouseleaveHandler","mousedownHandler","_windowToImgPosition2","keyHandler","shiftKey","resetMaskHandler","useUploadAsset","videoUploadPerfMarker","isUploadImageUpscaleEnabled","uploadFileAsync","uploadCallback","commonOptions","useReadAsset","readFileAsync","readFileAsDataURLAsync","useValidateAsset","isImageUpscaledRef","validateImageAsync","validateImageAsyncInternal","imageSource","minimumHeight","minimumWidth","getImageDetailAsync","naturalWidth","naturalHeight","validateFileAsync","validateVideoAsync","checkExtension","supportedList","extToCheck","contains","useCustomizedHandlerOptions","getCustomizedHandlerOptions","supportedVideoExtensions","linkButton","useUploadFiles","onFilesAddedCallback","setErrors","previewArr","setPreviewArr","onFileRead","selectedFiles","callback","isMultipleFiles","customizedOptions","_parseFileName","passedOptions","fileObj","fileSources","fileAdditionalInfoArr","fileSource","sourcesForPreview","generatePreviewArray","setProgress","progress","prevArr","updateFilePreviewArrayUploadProgress","uploadBatchs","each","updateProgress","uploadProgressBoundary","uploadResult","errorMsg","assetIds","upscaledImagesArrCount","showInfo","fileCount","genericErrorMsg","newErrors","getImageValidationErrorMessage","isReachFileSizeLimit","limitMB","fileSizeMB","MaximumImageFileSizeMB","MaximumVideoFileSizeMB","getReachFileSizeLimitErrorMessage","maximumImageFileSize","maximumVideoFileSize","ccJSData","jsDataCcRest","withCcJsDataContextProvider","withServerContext","_initCcJsData","serverContext","cidFetcher","CurrentCustomer","uidFetcher","CurrentUser","appendErrorSummary","handleAjaxAuthFailure","willSupportCors","GetJsDataInfo","ServicesEndpoints","ClientCenterUIAPI","initCcJsData","CcJsDataContextProvider","initialJsData"],"sourceRoot":""}