{"version":3,"file":"static/js/application.initial~b04cfc1b.fc209e71.js","mappings":"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","sources":["../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/global.ts","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/utils.ts","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/components/ads-copilot-context-provider/ads-copilot-context.ts","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/components/conversation-thread/find-existing-activity-index.ts","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/components/ads-copilot-context-provider/ads-copilot-context-provider.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/components/ads-copilot-context-provider/is-activity-relevant-to-app.ts","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/activity-renderer-manager.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/components/campaign-and-date-selector/date-selector.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/components/campaign-and-date-selector/campaign-and-date-selector.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/components/conversation-thread/constants.ts","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/components/direct-line-provider/direct-line-context.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/Loading.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/StopGenerating.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/hooks/useSSO.ts","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/botTypes.ts","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/StopTroubleshooting.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/hooks/useLoading.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/components/conversation-thread/make-activity-groups.ts","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/components/conversation-thread/should-display-in-conversation-thread.ts","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/TimeStamp.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/ActivityGroup.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/components/message/use-base-message-styles.ts","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/components/message/base-message.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/components/message/human-message.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/CopyButton.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/FeedbackButtons.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/components/message/anchor-in-new-window.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/components/message/use-ai-message-styles.ts","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/components/message/ai-message.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/components/conversation-thread/get-activity-key.ts","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/components/conversation-thread/conversation-thread-internal.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/components/conversation-thread/get-activities-with-feedback.ts","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/components/conversation-thread/get-current-feedback.ts","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/components/conversation-thread/conversation-thread.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/components/direct-line-provider/ads-copilot-direct-line.ts","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/hooks/SessionManager.ts","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/hooks/use-conversation-restoration.ts","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/components/direct-line-provider/chat-history-direct-line.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/components/direct-line-provider/direct-line-provider.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/ChatInput.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/ChatSuggestionList.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/components/conversation-list/use-conversations-list-styles.ts","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/components/conversation-list/conversations-list.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/AutoScroller.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/LoadingIntent.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/components/static-message/use-static-message-styles.ts","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/components/static-message/static-message-config.ts","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/components/static-message/static-message.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/hooks/useStaticMessage.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/hooks/useChatSuggestions.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/hooks/useAdsCopilotStyles.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/hooks/use-post-message/create-message.ts","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/hooks/use-post-message/use-post-message.ts","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/hooks/use-ads-copilot-logger.ts","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/ErrorView.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/PromptBar.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/AdsCopilot.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/hooks/useSesId.ts","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/hooks/useInputDisabled.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/AdaptiveCardRenderer.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/BotFrameworkAdaptiveCardBuilder.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/BotFrameworkOAuthCard.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/PreparingView.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/hooks/FeedbackTypes.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/hooks/DefaultFeedbackOptions.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/hooks/use-ads-copilot-pilot-map.ts","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/hooks/use-ads-copilot-is-send-disabled.ts","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/hooks/CentroFeedbackFunctions.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.36/node_modules/@bingads-webui/ads-copilot-ui/src/hooks/useOCVFeedback.tsx","../webpack/universalModuleDefinition","../webpack/bootstrap","../webpack-src:/aria-listener/index.js","../webpack-src:/aria-listener/src/aria-listener.es","../../../../../../../../external/underscore","../../../../../../../../external/@aria/webjs-sdk","../../../../../../../../external/@bingads-webui/listener","../webpack-src:/aria-listener/src/default-config.es","../webpack-src:/aria-listener/src/formatters/log-property-formatter.es","../webpack-src:/auto-refresh-token/index.js","../webpack-src:/auto-refresh-token/src/index.js","../../../../../../../../external/jquery","../../../../../../../../external/@bingads-webui/http-util","../../../../../../../../external/bluebird","../webpack-src:/automatic-positioning-popover/index.js","../webpack-src:/automatic-positioning-popover/src/index.es","../../../../../../../../external/@bingads-webui/popover","../webpack-src:/automatic-positioning-popover/src/get-popup-position.es","../webpack-src:/automatic-positioning-popover/src/position-options.es","../webpack-src:/embeded-svgs/index.js","../webpack-src:/embeded-svgs/src/asset-library-icon.js","../../../../../../../../external/react","../webpack-src:/embeded-svgs/src/chat-sparkle-icon.js","../webpack-src:/embeded-svgs/src/sparkle-icon.js","../webpack-src:/embeded-svgs/src/copilot-icon.js","../webpack-src:/theme-fluent/index.js","../webpack-src:/theme-fluent/src/components/index.js","../webpack-src:/theme-fluent/src/components/alert-style.js","../webpack-src:/theme-fluent/src/components/button-input-style.js","../webpack-src:/theme-fluent/src/components/button-style.js","../webpack-src:/theme-fluent/src/components/close-image-style.js","../webpack-src:/theme-fluent/src/components/control.js","../webpack-src:/theme-fluent/src/components/date-picker-style.js","../webpack-src:/theme-fluent/src/components/drop-down-editor-style.js","../webpack-src:/theme-fluent/src/components/fabric-panel-style.js","../webpack-src:/theme-fluent/src/components/float-button-style.js","../webpack-src:/theme-fluent/src/components/grid-inline-error-style.js","../webpack-src:/theme-fluent/src/components/help-button-style.js","../webpack-src:/theme-fluent/src/components/inline-editor-style.js","../webpack-src:/theme-fluent/src/components/inline-error-style.js","../webpack-src:/theme-fluent/src/components/scrollbar-style.js","../webpack-src:/theme-fluent/src/components/search-box-style.js","../webpack-src:/theme-fluent/src/components/search-box.js","../webpack-src:/theme-fluent/src/components/entity-selector-style.js","../webpack-src:/theme-fluent/src/components/pagination-style.js","../webpack-src:/theme-fluent/src/components/status-style.js","../webpack-src:/theme-fluent/src/components/toggle-button-style.js","../webpack-src:/theme-fluent/src/components/underline-link-style.js","../webpack-src:/theme-fluent/src/components/internal-link-style.js","../webpack-src:/theme-fluent/src/components/spinner-style.js","../webpack-src:/theme-fluent/src/components/ui-blocker-style.js","../webpack-src:/theme-fluent/src/constants/index.js","../webpack-src:/theme-fluent/src/constants/zindexes.js","../webpack-src:/theme-fluent/src/constants/pagePadding.js","../webpack-src:/theme-fluent/src/constants/responsiveSize.js","../webpack-src:/theme-fluent/src/components/grid-plugins/top-grid-panel-style.js","../webpack-src:/theme-fluent/src/components/grid-plugins/column-chooser-style.js","../webpack-src:/theme-fluent/src/components/grid-plugins/column-chooser-override-style.js","../webpack-src:/theme-fluent/src/components/new-feature-label-style.js","../webpack-src:/theme-fluent/src/components/grid-plugins/filter-editor-style.js","../webpack-src:/theme-fluent/src/components/grid-plugins/filter-editor-override-style.js","../webpack-src:/theme-fluent/src/components/grid-plugins/legacy-filter-bar-style.js","../webpack-src:/theme-fluent/src/components/grid-shared/index.js","../webpack-src:/theme-fluent/src/components/grid-shared/body.js","../webpack-src:/theme-fluent/src/components/grid-shared/variables.js","../webpack-src:/theme-fluent/src/components/grid-shared/col-group.js","../webpack-src:/theme-fluent/src/components/grid-shared/columns.js","../webpack-src:/theme-fluent/src/components/grid-shared/footer.js","../webpack-src:/theme-fluent/src/components/grid-shared/global.js","../webpack-src:/theme-fluent/src/components/grid-shared/header.js","../webpack-src:/theme-fluent/src/components/grid-shared/table.js","../webpack-src:/theme-fluent/src/core/index.js","../webpack-src:/theme-fluent/src/core/theme-fluent.js","../../../../../../../../external/@fluentui/react","../webpack-src:/theme-fluent/src/core/dark-theme.js","../webpack-src:/accessibility-helper/index.js","../webpack-src:/accessibility-helper/src/event-wrappers.js","../../../../../../../../external/@bingads-webui/keycode","../../../../../../../../external/@bingads-webui-universal/primitive-utilities","../webpack-src:/custom-column-utils/index.ts","../webpack-src:/custom-column-utils/src/utils.ts","../../../../../../../../external/underscore.string","../webpack-src:/i18n-model/index.js","../webpack-src:/i18n-model/src/index.js","../../../../../../../../external/globalize","../webpack-src:/i18n-model/src/locale.js","../webpack-src:/i18n-model/src/resource.js","../webpack-src:/js-data-cache-manager/index.js","../webpack-src:/js-data-cache-manager/src/constants.es","../webpack-src:/js-data-cache-manager/src/data-store.es","../../../../../../../../external/js-data","../webpack-src:/js-data-cache-manager/src/js-data-cache-manager.es","../../../../../../../../external/@bingads-webui-universal/observer-pattern","../../../../../../../../external/@bingads-webui-universal/time-aware-cache","../webpack-src:/js-data-cache-manager/src/match-strategy/index.es","../webpack-src:/js-data-cache-manager/src/match-strategy/base.es","../webpack-src:/js-data-cache-manager/src/match-strategy/standard.es","../webpack-src:/js-data-cache-manager/src/partition-strategy/index.es","../webpack-src:/js-data-cache-manager/src/partition-strategy/base.es","../webpack-src:/js-data-cache-manager/src/client-cache-manager.es","../webpack-src:/js-data-cache-manager/src/base-cache-manager.es","../../../../../../../../external/json-stable-stringify","../webpack-src:/js-data-cache-manager/src/cache-index/index.es","../webpack-src:/js-data-cache-manager/src/cache-index/base.es","../webpack-src:/js-data-cache-manager/src/cache-index/resource.es","../webpack-src:/js-data-cache-manager/src/server-cache-manager.es","../webpack-src:/js-data-cache-manager/src/invalidate-strategy/index.es","../webpack-src:/js-data-cache-manager/src/invalidate-strategy/base.es","../webpack-src:/js-data-cache-manager/src/invalidate-strategy/cascade-invalidate-strategy.es","../webpack-src:/js-data-cache-manager/src/invalidate-strategy/write-action-invalidate-strategy.es","../webpack-src:/observable/index.js","../webpack-src:/observable/src/observable.js","../webpack-src:/observable/src/promisify-observable.js","../webpack-src:/observable/src/call-observable.js","../../../../../../../../bootstrap/2b573647655303f11431","../webpack-src:/observer-pattern/index.es","../webpack-src:/observer-pattern/src/subject.es","../webpack-src:/primitive-utilities/index.ts","../webpack-src:/primitive-utilities/src/index.ts","../webpack-src:/primitive-utilities/src/lodash.ts","../webpack-src:/primitive-utilities/src/string.ts","../webpack-src:/primitive-utilities/src/guid.ts","../webpack-src:/primitive-utilities/src/date.ts","../webpack-src:/primitive-utilities/src/file.ts","../webpack-src:/primitive-utilities/src/promise.ts","../webpack-src:/primitive-utilities/src/color.ts","../webpack-src:/primitive-utilities/src/number.ts","../webpack-src:/primitive-utilities/src/memoize.ts","../webpack-src:/schema-i18n/index.ts","../webpack-src:/schema-i18n/src/index.ts","../webpack-src:/temporal-utitlities/index.js","../webpack-src:/temporal-utitlities/src/index.js","../../../../../../../../external/tc39-proposal-temporal","../webpack-src:/temporal-utitlities/src/date-options/default-specific-ranges.js","../webpack-src:/temporal-utitlities/src/date-options/compared-options.js","../webpack-src:/temporal-utitlities/src/date-util.js","../../../../../../../../external/@bingads-webui-universal/time-zone-converter","../webpack-src:/time-aware-cache/src/replacement-strategy/base.es","../webpack-src:/time-aware-cache/src/replacement-strategy/lru.es","../webpack-src:/time-aware-cache/src/constants.es","../webpack-src:/time-aware-cache/index.js","../webpack-src:/time-aware-cache/src/time-aware-cache.es","../webpack-src:/time-aware-cache/src/replacement-strategy/index.es","../webpack-src:/time-zone-converter/metadata.js","../webpack-src:/time-zone-converter/index.js","../webpack-src:/time-zone-converter/src/time-zone-converter.es"],"sourcesContent":["/* eslint-disable */\r\nif (!window._TL_) {\r\n window._TL_ = (str: string) => str;\r\n}\r\nvar _TL_: (str: string) => string = window._TL_;","import _ from 'underscore';\r\nimport { Message, Activity } from 'botframework-directlinejs';\r\n\r\nimport { BotActivity } from './botTypes';\r\n\r\n/**\r\n * Used by the UI to signal user intent to the AI. Returned by AI as the Name property of plugin results.\r\n * @see https://msasg.visualstudio.com/Bing_Ads/_git/AdsAppsMT?path=/private/Campaign/MT/Source/AdsCopilot/AdsCopilotMT.Library/Model/PluginScenarios.cs\r\n */\r\nexport enum PluginScenarios {\r\n Summarize = 'Summarize',\r\n AccountFluctuation = 'AccountFluctuation',\r\n CampaignFluctuation = 'CampaignFluctuation',\r\n PerformanceTimeSeries = 'PerformanceTimeSeries',\r\n}\r\n\r\nexport const PluginScenarioTroubleshootingDetection = 'AdDeliveryTroubleShooter';\r\n\r\n/**\r\n * Returned by the bot in value.Features array to signal which plugin functions were invoked.\r\n */\r\nexport enum PluginFunctions {\r\n SummarizeCampaignPerformance = 'SummarizeCampaignPerformance',\r\n GetAccountFluctuations = 'GetAccountFluctuations',\r\n GetCampaignFluctuations = 'GetCampaignFluctuations',\r\n CampaignPerformanceTimeSeries = 'CampaignPerformanceTimeSeries',\r\n GetAdvertiserAccountDetails = 'GetAdvertiserAccountDetails',\r\n}\r\n\r\nexport enum IntentType {\r\n None = 'None',\r\n ConnectAgent = 'ConnectAgent',\r\n AdsPreview = 'AdsPreview',\r\n}\r\n\r\nexport enum AgentQueue {\r\n Support = 'Support',\r\n Sales = 'Sales',\r\n None = 'None',\r\n}\r\n\r\nexport const CATEGORY_TROUBLESHOOTING = 'troubleshooting';\r\nexport const TROUBLESHOOTING_AD_DELIVERY = 'AdDelivery';\r\n\r\nexport const EVENT_NAME_ENGAGE_TROUBLESHOOTER = 'engageTroubleshooter';\r\nexport const EVENT_NAME_PLUGIN = 'pluginResults';\r\nexport const EVENT_NAME_LIVE_AGENT_CHAT = 'liveAgentChat';\r\n\r\nexport const isTypingMessage = (activity: BotActivity & Message) => activity?.text === 'StaticMessages' && (activity as BotActivity).value === 'Typing';\r\n\r\n// 1. engage troubleshooting event\r\n// 2. ad delivery plugin event from MT side\r\nexport function isTroubleshootingEvent(activity: Activity) {\r\n const isEngageEvent = activity.type === 'event'\r\n && activity.name === EVENT_NAME_ENGAGE_TROUBLESHOOTER;\r\n\r\n const isAdDeliveryPluginEvent = activity.type === 'event'\r\n && activity.name === EVENT_NAME_PLUGIN\r\n && _.any((activity as any).value, (pluginResult) => pluginResult.Name === PluginScenarioTroubleshootingDetection);\r\n\r\n return isEngageEvent || isAdDeliveryPluginEvent;\r\n}\r\n\r\nexport const getIsFluctuationsFeature = (activity: any) => {\r\n const features = (activity.value as any)?.Features;\r\n\r\n return _.any(features, (feature) => (feature === PluginFunctions.GetAccountFluctuations\r\n || feature === PluginFunctions.GetCampaignFluctuations));\r\n};\r\n\r\nexport const getIsAdvertiserAccountDetailsFeature = (activity: any) => {\r\n const features = (activity.value as any)?.Features;\r\n\r\n return _.any(features, (feature) => (feature === PluginFunctions.GetAdvertiserAccountDetails));\r\n};\r\n\r\nexport const shouldFeatureShowDisclaimer = (activity: any) => {\r\n const featuresWithDisclaimer = [PluginFunctions.GetAdvertiserAccountDetails, PluginFunctions.GetAccountFluctuations, PluginFunctions.GetCampaignFluctuations];\r\n const activityFeatures = (activity.value as any)?.Features;\r\n\r\n return !_.isEmpty(_.intersection(featuresWithDisclaimer, activityFeatures));\r\n};\r\n\r\nexport const getDisclaimerString = (activity: any) => {\r\n const features = (activity.value as any)?.Features;\r\n if (_.any(features, (feature) => (feature === PluginFunctions.GetAdvertiserAccountDetails))) {\r\n return _TL_('Copilot answers questions using Microsoft Advertising\\'s data for your account.');\r\n }\r\n\r\n return _TL_('Copilot answers questions about performance using Microsoft Advertising\\'s reporting data for both your enabled and paused campaigns.');\r\n};\r\n","import React, { useContext } from 'react';\r\nimport { Activity, DirectLine } from 'botframework-directlinejs';\r\n\r\nimport { type BotServiceConfig, type ILogger } from '../../types';\r\n\r\nexport interface IAdsCopilotContextValue {\r\n activities: Activity[];\r\n botServiceConfig?: BotServiceConfig;\r\n logger?: ILogger;\r\n onBotServiceConfigChange?: (botServiceConfig: BotServiceConfig | undefined) => void;\r\n onDirectLineCreated: (directLine: DirectLine, username: string, logger?: ILogger) => void;\r\n pilotMap?: Record;\r\n onPilotMapChange?: (pilotMap: Record) => void;\r\n onIsSendDisabledChange?: (disabled: boolean) => void;\r\n isSendDisabled?: boolean;\r\n}\r\n\r\nexport const AdsCopilotContext = React.createContext(undefined);\r\n\r\nexport const useAdsCopilotContext = () => useContext(AdsCopilotContext);\r\n","import { Activity } from 'botframework-directlinejs';\r\nimport { BotActivity } from '../../botTypes';\r\nimport { isTroubleshootingEvent } from '../../utils';\r\n\r\nconst NO_EXISTING_ACTIVITY_INDEX = -1;\r\n\r\nfunction isActivityReplaceable(existingActivity: BotActivity) {\r\n// 1. the activity is a message\r\n// 2. the activity is an troubleshooting event\r\n if (existingActivity.type === 'message' || isTroubleshootingEvent(existingActivity)) {\r\n if ((existingActivity.value as any) === 'AnimationCard' && ((existingActivity as any).attachments?.[0] as any)?.content?.text !== 'GeneratingAnswers') {\r\n // only GeneratingAnswers animation card can be replaced\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\n/**\r\n * Searches through the final activities from newest to oldest to find an existing activity that can be replaced with the new activity.\r\n * 1. This is used for streaming messages, the bot will send us a new message with more text to overwrite the previous message.\r\n * 2. This is used for troubleshooting engaged event, the bot will send us a new message to replace the previous message.\r\n * 3. This is used for ad delivery plugin event, the event should be replace by following up troubleshooting engage event.\r\n * @param finalActivities - List of activities to search through.\r\n * @param activity - New activity that was just received.\r\n * @param username - Used to identify if this message was sent by the user.\r\n * @returns Index of the message to replace, -1 if not found.\r\n */\r\nexport function findExistingActivityIndex(finalActivities: Activity[], activity: Activity, username: string): number {\r\n // 1. activity is a message and not be sent by the user.\r\n // 2. activity is an troubleshooting related event.\r\n if ((activity.type !== 'message' || activity.from?.name === username) && !isTroubleshootingEvent(activity)) {\r\n return NO_EXISTING_ACTIVITY_INDEX;\r\n }\r\n\r\n const botActivity = activity as BotActivity;\r\n\r\n // 1. if it's not a troubleshooting event, activity must be a reply to an earlier message\r\n // 2. if it's a troubleshooting event, activity.replyToId could be undefined\r\n if (!botActivity.replyToId && !isTroubleshootingEvent(botActivity)) {\r\n return NO_EXISTING_ACTIVITY_INDEX;\r\n }\r\n\r\n // iterate through final activities from newest to oldest\r\n for (let i = finalActivities.length - 1; i >= 0; i -= 1) {\r\n const currentActivity = finalActivities[i] as BotActivity;\r\n\r\n if (((currentActivity.replyToId === botActivity.replyToId && botActivity.replyToId !== undefined)\r\n || (isTroubleshootingEvent(botActivity) && currentActivity.id === botActivity.replyToId && botActivity.replyToId !== undefined))\r\n && isActivityReplaceable(currentActivity)) {\r\n if (botActivity.value === 'ConnectToAgent' && (currentActivity.value as any) !== 'AnimationCard') {\r\n // Sometimes bot will send ConnectToAgent immediately after GeneratingAnswers, sometimes it will start replying with a normal message before\r\n // sending ConnectToAgent. Normal message should not be replaced with ConnectToAgent.\r\n return NO_EXISTING_ACTIVITY_INDEX;\r\n }\r\n\r\n // found an existing activity that can be replaced with the new activity\r\n return i;\r\n }\r\n }\r\n\r\n return NO_EXISTING_ACTIVITY_INDEX;\r\n}\r\n","import React, {\r\n useCallback,\r\n useMemo,\r\n useState,\r\n} from 'react';\r\nimport { type Activity, type DirectLine } from 'botframework-directlinejs';\r\nimport { type Subscription } from 'rxjs';\r\n\r\nimport { AdsCopilotContext, type IAdsCopilotContextValue } from './ads-copilot-context';\r\nimport { isActivityRelevantToApp } from './is-activity-relevant-to-app';\r\nimport { findExistingActivityIndex } from '../conversation-thread/find-existing-activity-index';\r\nimport { type BotServiceConfig } from '../../types';\r\nimport { AdsCopilotDirectLine } from '../direct-line-provider/ads-copilot-direct-line';\r\n\r\nexport type AdsCopilotContextProviderProps = {\r\n children: React.ReactNode;\r\n};\r\n\r\n/**\r\n * App-level context for sharing Copilot chat information across the entire app.\r\n * Be aware that any changes here will have a perf impact to the entire app.\r\n */\r\nexport const AdsCopilotContextProvider: React.FC = React.memo((props) => {\r\n const { children } = props;\r\n const [, setDirectLine] = useState();\r\n const [, setSubscription] = useState();\r\n const [activities, setActivities] = useState([]);\r\n const [botServiceConfig, setBotServiceConfig] = useState();\r\n const [pilotMap, onPilotMapChange] = useState>({});\r\n const [logger, setLogger] = useState();\r\n const [isSendDisabled, setIsSendDisabled] = useState(false);\r\n\r\n const onDirectLineCreated = useCallback((dl, username, newLogger) => {\r\n setDirectLine(dl);\r\n setLogger(newLogger);\r\n\r\n const directLine = dl as AdsCopilotDirectLine;\r\n if (directLine.isCustomStream) {\r\n return;\r\n }\r\n\r\n setSubscription((prevSub) => {\r\n // unsubscribe from previous DirectLine\r\n prevSub?.unsubscribe();\r\n setActivities([]);\r\n\r\n // subscribe to all the complete messages received from DirectLine\r\n return dl.activity$.filter((activity) => isActivityRelevantToApp(dl, activity)).subscribe((activity) => {\r\n setActivities((prevActivities) => {\r\n const newActivities = [...prevActivities];\r\n\r\n // check if this is a streaming message that will replace a previous message\r\n const existingActivityIndex = findExistingActivityIndex(newActivities, activity, username);\r\n if (existingActivityIndex > -1) {\r\n newActivities[existingActivityIndex] = activity;\r\n } else {\r\n newActivities.push(activity);\r\n }\r\n\r\n return newActivities;\r\n });\r\n });\r\n });\r\n }, []);\r\n\r\n const value = useMemo(() => ({\r\n activities,\r\n botServiceConfig,\r\n logger,\r\n onBotServiceConfigChange: setBotServiceConfig,\r\n onDirectLineCreated,\r\n pilotMap,\r\n onPilotMapChange,\r\n onIsSendDisabledChange: setIsSendDisabled,\r\n isSendDisabled,\r\n }), [\r\n activities,\r\n botServiceConfig,\r\n logger,\r\n onDirectLineCreated,\r\n isSendDisabled,\r\n ]);\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n});\r\n","import { DirectLine } from 'botframework-directlinejs';\r\nimport { BotActivity } from '../../botTypes';\r\nimport { AdsCopilotDirectLine } from '../direct-line-provider/ads-copilot-direct-line';\r\n\r\n/**\r\n * Examines a bot activity and determines if it is something that needs to be shared across both Copilot chat and the rest of the app.\r\n * @param activity {BotActivity} The bot activity to examine.\r\n * @returns {boolean} True if the activity should be accessed by other parts of the app, false if the activity is only used for displaying in chat.\r\n */\r\nexport function isActivityRelevantToApp(dl: DirectLine, activity: BotActivity) {\r\n const directLine = dl as AdsCopilotDirectLine;\r\n\r\n if (directLine.isCustomStream) {\r\n // custom stream is set, all activities are irrelevant\r\n return false;\r\n }\r\n\r\n if (directLine.username && activity.from?.name === directLine.username) {\r\n // user message, not relevant\r\n return false;\r\n }\r\n\r\n if (activity.type === 'event' && activity.name === 'pluginResults') {\r\n // plugin results used for Reporting Insights feature\r\n return true;\r\n }\r\n\r\n if (activity.type === 'message') {\r\n const features = (activity.value as any)?.Features;\r\n if (Array.isArray(features) && features.length > 0) {\r\n // plugin result will have at least 1 feature\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n}\r\n","import React, { useMemo } from 'react';\r\n\r\nimport { type DefaultRenderActivity, type IActivityRenderer, type IActivityRendererProps } from './types';\r\n\r\ntype ActivityRendererManagerProps = {\r\n defaultRenderer: DefaultRenderActivity;\r\n renderers: Array>;\r\n} & T;\r\n\r\n/**\r\n * `ActivityRendererManager` is a React functional component that manages the rendering of activities.\r\n * It uses a list of renderers to find the appropriate renderer for a given activity.\r\n * If no suitable renderer is found, it falls back to a default renderer.\r\n *\r\n * @template T - The type of the activity renderer props.\r\n * @param {ActivityRendererManagerProps} props - The properties for the ActivityRendererManager component.\r\n * @param {IActivity} props.activity - The activity to be rendered.\r\n * @param {React.ComponentType} props.defaultRenderer - The default renderer to use if no suitable renderer is found.\r\n * @param {Array<{ canRender: (activity: IActivity, isFromUser: boolean) => boolean, render: React.ComponentType }>} props.renderers - The list of renderers to choose from.\r\n * @param {object} props.params - Additional parameters for rendering.\r\n * @returns {React.ReactNode} The rendered activity.\r\n */\r\nexport const ActivityRendererManager = React.memo(\r\n (props: ActivityRendererManagerProps) => {\r\n const {\r\n activity,\r\n defaultRenderer,\r\n renderers,\r\n params,\r\n } = props;\r\n\r\n const isFromUser = useMemo(() => activity.from.name === params.username, [activity.from.name, params.username]);\r\n\r\n // find the first renderer that can render the activity\r\n const Renderer = renderers.find((renderer) => renderer.canRender?.(activity, isFromUser));\r\n if (Renderer) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n // could not find a renderer, fallback to the default behavior\r\n return defaultRenderer(activity as any, params);\r\n },\r\n) as (props: ActivityRendererManagerProps) => React.ReactNode;\r\n","import React, { useContext, useCallback } from 'react';\r\nimport {\r\n Field,\r\n mergeClasses,\r\n makeStyles,\r\n tokens,\r\n} from '@fluentui/react-components';\r\nimport { I18nContext, I18nModel } from '@bingads-webui/copilot-i18n';\r\nimport {\r\n DateRangePickerWithCompare,\r\n useDefaultPresetOptions,\r\n ComparisonBehavior,\r\n StartOfWeek,\r\n} from '@bingads-webui-fluent-component/date-range-picker-with-compare';\r\n\r\nexport const useDateSelectorStyles = makeStyles({\r\n dateSelector: {\r\n display: 'grid',\r\n },\r\n label: {\r\n lineHeight: tokens.lineHeightBase200,\r\n paddingTop: tokens.spacingVerticalSNudge,\r\n paddingBottom: tokens.spacingVerticalSNudge,\r\n '& label': {\r\n fontWeight: tokens.fontWeightRegular,\r\n },\r\n },\r\n});\r\ninterface DateSelectorProps {\r\n selectedStartDate: Date;\r\n selectedEndDate: Date;\r\n setSelectedStartDate: (date:Date) => void;\r\n setSelectedEndDate: (date:Date) => void;\r\n}\r\n\r\nexport const DateSelector: React.FC = ({\r\n selectedStartDate, selectedEndDate, setSelectedStartDate, setSelectedEndDate,\r\n}) => {\r\n const i18n = useContext(I18nContext) as I18nModel;\r\n const styles = useDateSelectorStyles();\r\n\r\n const onSelectDate = useCallback((dateRange: { endDate:Date, startDate:Date }) => {\r\n setSelectedEndDate(dateRange.endDate);\r\n setSelectedStartDate(dateRange.startDate);\r\n }, []);\r\n\r\n return (\r\n
\r\n \r\n {\r\n onSelectDate(dateRange);\r\n }}\r\n dateRangePickerComparisonProps={{\r\n comparisonBehavior: ComparisonBehavior.NONE,\r\n presetCompareOptions: [],\r\n }}\r\n localizedStrings={{\r\n comparisonSectionLabel: i18n?.getString(_TL_('Comparison period')),\r\n customDateRangeSelectionLabel: i18n?.getString(_TL_('Custom date range')),\r\n dateRangePickerApplyButtonLabel: i18n?.getString(_TL_('Apply')),\r\n }}\r\n dateRangePickerCalendarProps={\r\n {\r\n calendarProps: {\r\n strings: {\r\n months: [i18n?.getString(_TL_('January')), i18n?.getString(_TL_('February')), i18n?.getString(_TL_('March')), i18n?.getString(_TL_('April')), i18n?.getString(_TL_('May')), i18n?.getString(_TL_('June')), i18n?.getString(_TL_('July')), i18n?.getString(_TL_('August')), i18n?.getString(_TL_('September')), i18n?.getString(_TL_('October')), i18n?.getString(_TL_('November')), i18n?.getString(_TL_('December'))],\r\n shortMonths: [i18n?.getString(_TL_('Jan')), i18n?.getString(_TL_('Feb')), i18n?.getString(_TL_('Mar')), i18n?.getString(_TL_('Apr')), i18n?.getString(_TL_('May')), i18n?.getString(_TL_('Jun')), i18n?.getString(_TL_('Jul')), i18n?.getString(_TL_('Aug')), i18n?.getString(_TL_('Sep')), i18n?.getString(_TL_('Oct')), i18n?.getString(_TL_('Nov')), i18n?.getString(_TL_('Dec'))],\r\n days: [i18n?.getString(_TL_('Sunday')), i18n?.getString(_TL_('Monday')), i18n?.getString(_TL_('Tuesday')), i18n?.getString(_TL_('Wednesday')), i18n?.getString(_TL_('Thursday')), i18n?.getString(_TL_('Friday')), i18n?.getString(_TL_('Saturday'))],\r\n shortDays: [i18n?.getString(_TL_('S')), i18n?.getString(_TL_('M')), i18n?.getString(_TL_('T')), i18n?.getString(_TL_('W')), i18n?.getString(_TL_('T')), i18n?.getString(_TL_('F')), i18n?.getString(_TL_('S'))],\r\n goToToday: i18n?.getString(_TL_('Go to today')),\r\n prevMonthAriaLabel: i18n?.getString(_TL_('Go to previous month')),\r\n nextMonthAriaLabel: i18n?.getString(_TL_('Go to next month')),\r\n prevYearAriaLabel: i18n?.getString(_TL_('Go to previous year')),\r\n nextYearAriaLabel: i18n?.getString(_TL_('Go to next year')),\r\n closeButtonAriaLabel: i18n?.getString(_TL_('Close date picker')),\r\n isRequiredErrorMessage: i18n?.getString(_TL_('Field is required')),\r\n invalidInputErrorMessage: i18n?.getString(_TL_('Invalid date format.')),\r\n },\r\n },\r\n }\r\n }\r\n />\r\n \r\n
\r\n );\r\n};\r\n","import React, {\r\n useContext,\r\n useState,\r\n useEffect,\r\n useCallback,\r\n} from 'react';\r\nimport {\r\n mergeClasses,\r\n makeStyles,\r\n tokens,\r\n Card,\r\n Text,\r\n} from '@fluentui/react-components';\r\nimport _ from 'underscore';\r\nimport { I18nContext, I18nModel } from '@bingads-webui/copilot-i18n';\r\nimport { ApplyButton, SearchableSelector } from '@bingads-webui-react/copilot-ui-base';\r\nimport { DateSelector } from './date-selector';\r\n\r\nexport type CampaignSaveData = {\r\n selectedCampaign?: { name: string, id: string };\r\n startDate?: Date;\r\n endDate?: Date;\r\n};\r\n\r\ninterface CampaignAndDateSelectorProps {\r\n getCampaigns?: () => Promise>;\r\n onSave: (_event: any, data?:CampaignSaveData) => void;\r\n showCampaignSelector: boolean;\r\n showDateSelector: boolean;\r\n cardText?: string;\r\n}\r\n\r\nexport const useCampaignAndDateSelectorStyles = makeStyles({\r\n card: {\r\n 'border-radius': `${tokens.borderRadiusLarge} !important`,\r\n rowGap: tokens.spacingVerticalS,\r\n minWidth: '272px',\r\n width: '100%',\r\n '&.campaign-and-date-selector': {\r\n marginTop: tokens.spacingVerticalM,\r\n display: 'inline-block',\r\n },\r\n },\r\n});\r\n\r\nexport const CampaignAndDateSelector: React.FC = ({\r\n getCampaigns,\r\n onSave,\r\n showCampaignSelector,\r\n showDateSelector,\r\n cardText,\r\n}) => {\r\n const i18n = useContext(I18nContext) as I18nModel;\r\n const styles = useCampaignAndDateSelectorStyles();\r\n const [campaigns, setCampaigns] = useState>();\r\n const [selectedCampaign, setSelectedCampaign] = useState<{ name: string, id: string }>();\r\n const today = new Date();\r\n const lastWeek = new Date(today.getTime() - 7 * 24 * 60 * 60 * 1000);\r\n const [selectedEndDate, setSelectedEndDate] = useState(today);\r\n const [selectedStartDate, setSelectedStartDate] = useState(lastWeek);\r\n const [disabled, setDisabled] = useState(false);\r\n const [errorMessage, setErrorMessage] = useState('');\r\n\r\n const handleApplyClick = useCallback((e: any) => {\r\n const data = { selectedCampaign, startDate: selectedStartDate, endDate: selectedEndDate };\r\n if (!selectedCampaign) {\r\n return setErrorMessage(i18n?.getString(_TL_('This field is required')));\r\n }\r\n onSave(e, data);\r\n return setDisabled(true);\r\n }, [onSave, selectedCampaign, selectedStartDate, selectedEndDate, setDisabled]);\r\n\r\n const onSelectCampaign = useCallback((_event:any, data:any) => {\r\n setErrorMessage('');\r\n\r\n const id = data?.optionValue;\r\n const name = data?.optionText;\r\n if (id && name) {\r\n setSelectedCampaign({ id, name });\r\n } else {\r\n // If the selected campaign is empty, reset the selected campaign to disable the apply button\r\n setSelectedCampaign(undefined);\r\n }\r\n }, []);\r\n\r\n let defaultCardText;\r\n if (showCampaignSelector && showDateSelector) {\r\n defaultCardText = _TL_('Please confirm the campaign name and date range to generate a summary.');\r\n } else if (showDateSelector) {\r\n defaultCardText = _TL_('Please confirm the date range so I can summarize for you.');\r\n } else {\r\n defaultCardText = _TL_('Please confirm the campaign name so I can summarize for you.');\r\n }\r\n\r\n const resetCampaign = useCallback(() => {\r\n setSelectedCampaign(undefined);\r\n }, [setSelectedCampaign]);\r\n\r\n useEffect(() => {\r\n if (_.isFunction(getCampaigns)) {\r\n getCampaigns().then((data: Array<{ name: string, id: string }> | undefined) => {\r\n resetCampaign();\r\n setCampaigns(data);\r\n });\r\n }\r\n }, []);\r\n\r\n return (\r\n \r\n \r\n {i18n?.getString(cardText || defaultCardText)}\r\n \r\n {((showCampaignSelector || !showDateSelector) && campaigns)\r\n && (\r\n \r\n )}\r\n {(showDateSelector)\r\n && (\r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n","export const DEFAULT_GROUP_TIME = 60 * 1000;\r\n","import React from 'react';\r\nimport { DirectLine } from 'botframework-directlinejs';\r\nimport { SupportedProduct } from '../../botTypes';\r\n\r\nexport interface IDirectLineContextValue {\r\n directLine?: DirectLine;\r\n userid: string;\r\n username: string;\r\n endpoint: string;\r\n productName: SupportedProduct;\r\n isCustomStream: boolean;\r\n}\r\n\r\nexport const DirectLineContext = React.createContext(null);\r\n","import React, { FC, memo } from 'react';\r\nimport {\r\n makeStyles,\r\n mergeClasses,\r\n Spinner,\r\n tokens,\r\n} from '@fluentui/react-components';\r\n\r\nconst useLoadingStyles = makeStyles({\r\n adsCopilotLoading: {\r\n marginTop: tokens.spacingVerticalM,\r\n '& svg .fui-Spinner__Tail': {\r\n animationDuration: '2s !important',\r\n animationIterationCount: 'infinite !important',\r\n },\r\n },\r\n});\r\n\r\ninterface ILoadingProps {\r\n loadingText?: string;\r\n}\r\n\r\nexport const Loading: FC = memo(({ loadingText }) => {\r\n const styles = useLoadingStyles();\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n});\r\n\r\nLoading.defaultProps = {\r\n loadingText: 'Generating answers...',\r\n};\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React, { FC, memo, useContext } from 'react';\r\nimport {\r\n Button,\r\n makeStyles,\r\n mergeClasses,\r\n tokens,\r\n} from '@fluentui/react-components';\r\nimport { CalendarCancel24Regular } from '@fluentui/react-icons';\r\nimport { I18nContext, I18nModel } from '@bingads-webui/copilot-i18n';\r\n\r\ninterface IStopGeneratingProps {\r\n onClickStopGenerating?: () => void;\r\n}\r\n\r\nconst useStopGeneratingStyles = makeStyles({\r\n container: {\r\n marginTop: tokens.spacingVerticalM,\r\n textAlign: 'center',\r\n },\r\n});\r\n\r\nexport const StopGenerating: FC = memo(({ onClickStopGenerating }) => {\r\n const i18n = useContext(I18nContext) as I18nModel;\r\n const styles = useStopGeneratingStyles();\r\n\r\n return (\r\n
\r\n }\r\n className=\"ads-copilot-stop-generating-btn\"\r\n onClick={onClickStopGenerating}\r\n >\r\n {i18n.getString(_TL_('Stop Generating'))}\r\n \r\n
\r\n );\r\n});\r\n","import { chain } from 'underscore';\r\nimport { useCallback } from 'react';\r\nimport { Activity, DirectLine } from 'botframework-directlinejs';\r\nimport axios from 'axios';\r\nimport { IAdsCopilotProps } from '../types';\r\n\r\nexport function getOAuthCardResourceUri(activity: any): string | null {\r\n if (activity\r\n && activity.attachments\r\n && activity.attachments[0]\r\n && activity.attachments[0].contentType === 'application/vnd.microsoft.card.oauth'\r\n && activity.attachments[0].content.tokenExchangeResource) {\r\n // asking for token exchange with AAD\r\n return activity.attachments[0].content.tokenExchangeResource.uri as string;\r\n }\r\n return null;\r\n}\r\n\r\nexport type FetchAllActivities = (conversationId: string, token: string) => Promise;\r\nexport const defaultFetchAllActivities: FetchAllActivities = (conversationId, token) => {\r\n const url = `https://directline.botframework.com/v3/directline/conversations/${conversationId}/activities`;\r\n return axios.get(url, {\r\n headers: {\r\n Authorization: `Bearer ${token}`,\r\n },\r\n }).then((res: { data: { activities: Activity[] } }) => res.data.activities);\r\n};\r\n\r\nexport const useSSO = (params : {\r\n onReceiveActivity?: IAdsCopilotProps['onReceiveActivity'],\r\n botServiceConfig: Pick\r\n fetchAllActivities?: FetchAllActivities,\r\n}) => {\r\n const { onReceiveActivity, botServiceConfig: { authToken, fetchOAuthToken, username }, fetchAllActivities = defaultFetchAllActivities } = params;\r\n const onReceiveActivityWithSSO = useCallback((activity: Activity, currentActivities: Activity[], directLine: DirectLine) => {\r\n const isAIMessage = activity.from.name !== username;\r\n const resourceUri = getOAuthCardResourceUri(activity);\r\n if (isAIMessage && resourceUri != null) {\r\n const conversationId = activity.conversation?.id;\r\n const dlToken = (directLine as any).token;\r\n\r\n fetchAllActivities(conversationId!, dlToken).then((activities) => {\r\n const lastAct = activities[activities.length - 1];\r\n\r\n // send token exchange invoke activity to bot only when OAuthCard is the last message sent by bot\r\n if (lastAct.id === activity.id) {\r\n const content = chain(activity).result('attachments').result('0').result('content')\r\n .value() as any;\r\n const id = chain(content)\r\n .result('tokenExchangeResource')\r\n .result('id')\r\n .value() as any;\r\n const connectionName = chain(content)\r\n .result('connectionName')\r\n .value();\r\n\r\n const oAuthTokenPromise = fetchOAuthToken ? fetchOAuthToken() : Promise.resolve({ token: authToken });\r\n oAuthTokenPromise.then(({ token: oAuthToken }) => {\r\n directLine?.postActivity({\r\n type: 'invoke',\r\n name: 'signin/tokenExchange',\r\n from: { name: username },\r\n value: {\r\n id,\r\n connectionName,\r\n token: oAuthToken,\r\n },\r\n } as any).subscribe();\r\n });\r\n }\r\n });\r\n return currentActivities;\r\n } if (onReceiveActivity) {\r\n return onReceiveActivity(activity, currentActivities, directLine);\r\n }\r\n\r\n return currentActivities;\r\n }, [authToken, fetchAllActivities, fetchOAuthToken, onReceiveActivity, username]);\r\n\r\n return { onReceiveActivity: onReceiveActivityWithSSO };\r\n};\r\n","import { Activity } from 'botframework-directlinejs';\r\n\r\nexport interface IResponseSources {\r\n Title: string;\r\n Url: string;\r\n}\r\n\r\nexport interface IResponseSiteLinks {\r\n DisplayName: string;\r\n Url: string;\r\n}\r\n\r\nexport interface IBotOutgoingMessageValue {\r\n QuestionId?: string;\r\n Sources?: IResponseSources[];\r\n SiteLinks?: IResponseSiteLinks[];\r\n Features?: string[];\r\n}\r\n\r\n// https://msasg.visualstudio.com/Bing_Ads/_git/AdsAppsMT?path=%2Fprivate%2FCampaign%2FMT%2FSource%2FAdsCopilot%2FAdsCopilotMT.Library%2FModel%2FStaticMessageFactory.cs\r\nexport type StaticMessageType = 'ResponsibleAI' | 'ConnectToAgent' | 'OutofScope' | 'LargePayload' | 'InternalError' | 'Welcome' | 'SignInError' | 'MissingArgumentsInPayload' | 'TurnLimitReached' | 'TokenExpired' | 'TokenExpiredAutoReload' | 'StreamingCancelled' | 'EmptyReplyToIdToCancelStreaming' | 'Timeout' | 'ConversationExpired' | 'InvalidPayload' | 'HandoffMessage' | 'ConversationResume' | 'SydneyResponsibleAI' | 'NoDataAvailable' | 'StreamingCompleted';\r\n\r\nexport type SupportedProduct = 'webui_smart_pages' | 'webui_smart_mode' | 'webui_expert_mode' | 'ucma' | 'ucmt' | 'xandr' | 'xandr_invest' | 'xandr_monetization' | 'xandr_curate' | 'map_dri_copilot' | 'xandr_support' | 'ads_marketing';\r\n\r\nexport interface IUserMessagePayload {\r\n BotFlightMode?: string;\r\n isHiddenFromUser?: boolean;\r\n Locale?: string;\r\n Product?: SupportedProduct;\r\n Timezone?: string;\r\n QuestionId?: string;\r\n UxContext?: any;\r\n Features?: string[];\r\n options?: object;\r\n AdditionalContext?: object;\r\n}\r\n\r\nexport type FeedbackType = 'ThumbsUp' | 'ThumbsDown' | 'None';\r\n\r\nexport interface ITokenApiPayload {\r\n userid: string;\r\n username: string;\r\n}\r\n\r\nexport interface ITokenApiResponse {\r\n data: {\r\n conversationId: string;\r\n token: string;\r\n tokenExpiryInSeconds: number;\r\n userId: string;\r\n error: any;\r\n }\r\n}\r\n\r\ntype DirectLineErrorMessage = 'fetchTokenError' | 'directLineChannelError' | 'directLineExpiredToken';\r\nexport interface IDirectLineError {\r\n message: DirectLineErrorMessage;\r\n}\r\n\r\nexport const StreamingStatusType = {\r\n InProgress: 'InProgress',\r\n Completed: 'Completed',\r\n Cancelled: 'Cancelled',\r\n};\r\n\r\nexport type BotActivity = Activity & {\r\n replyToId?: string,\r\n value?: {\r\n StreamingStatus?: string,\r\n isHiddenFromUser?: boolean,\r\n } | string,\r\n};\r\n","import React, { FC, memo, useContext } from 'react';\r\nimport {\r\n Button,\r\n makeStyles,\r\n mergeClasses,\r\n tokens,\r\n} from '@fluentui/react-components';\r\nimport { CalendarCancel24Regular } from '@fluentui/react-icons';\r\nimport { I18nContext, I18nModel } from '@bingads-webui/copilot-i18n';\r\n\r\ninterface StopTroubleshootingProps {\r\n onClickStopTroubleshooting?: () => void;\r\n}\r\n\r\nconst useStopTroubleshootingStyles = makeStyles({\r\n container: {\r\n marginTop: tokens.spacingVerticalM,\r\n textAlign: 'center',\r\n },\r\n});\r\n\r\nexport const StopTroubleshooting: FC = memo(({ onClickStopTroubleshooting }) => {\r\n const i18n = useContext(I18nContext) as I18nModel;\r\n const styles = useStopTroubleshootingStyles();\r\n\r\n return (\r\n
\r\n }\r\n className=\"ads-copilot-stop-troubleshooting-btn\"\r\n onClick={onClickStopTroubleshooting}\r\n >\r\n {i18n.getString(_TL_('Stop reviewing'))}\r\n \r\n
\r\n );\r\n});\r\n","import React, { useCallback, useContext, useState } from 'react';\r\nimport { I18nContext, I18nModel } from '@bingads-webui/copilot-i18n';\r\nimport { Activity } from 'botframework-directlinejs';\r\nimport { DirectLineContext } from '../components/direct-line-provider/direct-line-context';\r\nimport { IAdsCopilotProps } from '../types';\r\nimport { Loading } from '../Loading';\r\nimport { StopGenerating } from '../StopGenerating';\r\nimport { getOAuthCardResourceUri } from './useSSO';\r\nimport { BotActivity, StreamingStatusType } from '../botTypes';\r\nimport { isTypingMessage, EVENT_NAME_ENGAGE_TROUBLESHOOTER, isTroubleshootingEvent } from '../utils';\r\nimport { StopTroubleshooting } from '../StopTroubleshooting';\r\n\r\nconst IgnoreToggleTypes = ['messageReaction', 'endOfConversation'];\r\n\r\ninterface IUseLoadingProps {\r\n onReceiveActivity?: IAdsCopilotProps['onReceiveActivity'];\r\n renderBottomComponent?: IAdsCopilotProps['renderBottomComponent'];\r\n isCustomStream?: boolean;\r\n isStopGeneratingEnabled?: IAdsCopilotProps['isStopGeneratingEnabled'];\r\n isStopTroubleshootingEnabled?: IAdsCopilotProps['isStopTroubleshootingEnabled'];\r\n}\r\n\r\nexport const shouldToggleLoading = (activity: Activity) => {\r\n const isIgnoredType = IgnoreToggleTypes.indexOf(activity.type) > -1;\r\n return !isIgnoredType && !isTroubleshootingEvent(activity);\r\n};\r\n\r\nexport const shouldToggleTroubleShooting = (activity: Activity) => isTroubleshootingEvent(activity);\r\n\r\nexport function useLoading({\r\n onReceiveActivity,\r\n renderBottomComponent,\r\n isCustomStream,\r\n isStopGeneratingEnabled,\r\n isStopTroubleshootingEnabled,\r\n}: IUseLoadingProps) {\r\n const [loading, setLoading] = useState(false);\r\n const [troubleshooting, setTroubleshooting] = useState(false);\r\n const [postedMessageId, setPostedMessageId] = useState(undefined);\r\n const i18n = useContext(I18nContext) as I18nModel;\r\n const { directLine, userid, username } = useContext(DirectLineContext)!;\r\n\r\n const onReceiveActivityWithLoading = useCallback>((activity, currentActivities, dl) => {\r\n const messageActivity = activity as BotActivity;\r\n if (shouldToggleLoading(activity) && !isCustomStream) {\r\n if (activity.from.name === username) {\r\n setLoading(true);\r\n setPostedMessageId(activity.id);\r\n } else if (activity.type === 'message' && !isTypingMessage(activity) && getOAuthCardResourceUri(activity) == null) {\r\n if (messageActivity.value?.StreamingStatus === StreamingStatusType.InProgress) {\r\n setLoading(true);\r\n } else {\r\n setLoading(false);\r\n }\r\n }\r\n } else if (shouldToggleTroubleShooting(activity)) {\r\n if (messageActivity.value?.troubleshootingValue?.troubleshootingStatus === 'InProgress') {\r\n setTroubleshooting(true);\r\n } else {\r\n setTroubleshooting(false);\r\n }\r\n }\r\n\r\n if (onReceiveActivity) {\r\n return onReceiveActivity(activity, currentActivities, dl);\r\n }\r\n return currentActivities;\r\n }, [isCustomStream, onReceiveActivity, username]);\r\n\r\n const onClickStopGenerating = useCallback(() => {\r\n const stopRespondingMessage = {\r\n type: 'event',\r\n replyToId: postedMessageId,\r\n name: 'stopResponding',\r\n from: {\r\n id: userid,\r\n name: username,\r\n },\r\n };\r\n\r\n directLine?.postActivity(stopRespondingMessage as any).subscribe();\r\n }, [directLine, postedMessageId, userid, username]);\r\n\r\n const onClickStopTroubleshooting = useCallback(() => {\r\n const stopTroubleshootingMessage = {\r\n type: 'event',\r\n name: EVENT_NAME_ENGAGE_TROUBLESHOOTER,\r\n from: {\r\n id: userid,\r\n name: username,\r\n },\r\n value: {\r\n isForceStopTroubleshooting: true,\r\n Features: ['Troubleshooting'],\r\n },\r\n };\r\n\r\n directLine?.postActivity(stopTroubleshootingMessage as any).subscribe();\r\n }, [directLine, userid, username]);\r\n\r\n const renderBottomComponentWithLoading = useCallback>((currentActivities) => {\r\n if (loading) {\r\n if (isStopGeneratingEnabled) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n );\r\n } if (troubleshooting && isStopTroubleshootingEnabled) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n if (renderBottomComponent) {\r\n return renderBottomComponent(currentActivities);\r\n }\r\n\r\n return null;\r\n }, [i18n, loading, onClickStopGenerating, renderBottomComponent, isStopGeneratingEnabled, troubleshooting, isStopTroubleshootingEnabled]);\r\n\r\n return {\r\n onReceiveActivity: onReceiveActivityWithLoading,\r\n renderBottomComponent: renderBottomComponentWithLoading,\r\n };\r\n}\r\n","import _ from 'underscore';\r\nimport { Activity } from 'botframework-directlinejs';\r\nimport { DEFAULT_GROUP_TIME } from './constants';\r\nimport { shouldDisplayInConversationThread } from './should-display-in-conversation-thread';\r\n\r\ninterface IActivityGroup {\r\n key: string;\r\n activities: Activity[];\r\n}\r\n\r\nexport interface IMakeActivityGroupsProps {\r\n activities: Activity[];\r\n groupTime?: number;\r\n isTroubleshootingEnabled?: boolean;\r\n isReportingInsightsEnabled?: boolean;\r\n isTroubleshootingIntentionDetectionEnabled?: boolean;\r\n}\r\n\r\nexport function makeActivityGroups(props: IMakeActivityGroupsProps): IActivityGroup[] {\r\n const {\r\n activities,\r\n groupTime = DEFAULT_GROUP_TIME,\r\n isTroubleshootingEnabled = false,\r\n isReportingInsightsEnabled = false,\r\n isTroubleshootingIntentionDetectionEnabled = false,\r\n } = props;\r\n\r\n // filter to only the activities to display\r\n const filteredActivities = _.filter(activities, (activity) => shouldDisplayInConversationThread({\r\n activity,\r\n isTroubleshootingEnabled,\r\n isReportingInsightsEnabled,\r\n isTroubleshootingIntentionDetectionEnabled,\r\n }));\r\n\r\n const result: IActivityGroup[] = [];\r\n let i = 0;\r\n while (i < filteredActivities.length) {\r\n // start a new group with 1 activity\r\n const group = [filteredActivities[i]];\r\n i += 1;\r\n\r\n const groupStartTime = +((group[0] as any).timestamp as string);\r\n\r\n // look for more activities to add to the group\r\n while (i < filteredActivities.length) {\r\n const currentActivity = filteredActivities[i];\r\n const currentTime = +((currentActivity as any).timestamp || '0');\r\n\r\n const diff = currentTime - groupStartTime;\r\n if (!Number.isNaN(diff) && diff <= groupTime) {\r\n // current activity is inside the group time window, add it to the existing group\r\n group.push(currentActivity);\r\n i += 1;\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n result.push({\r\n key: group[0].id as string,\r\n activities: group,\r\n });\r\n }\r\n\r\n return result;\r\n}\r\n","import _ from 'underscore';\r\nimport { Activity } from 'botframework-directlinejs';\r\nimport {\r\n EVENT_NAME_ENGAGE_TROUBLESHOOTER,\r\n PluginScenarios,\r\n EVENT_NAME_PLUGIN,\r\n PluginScenarioTroubleshootingDetection,\r\n EVENT_NAME_LIVE_AGENT_CHAT,\r\n} from '../../utils';\r\n\r\n/**\r\n * Returns true if the activity should be displayed in the conversation thread.\r\n */\r\nexport function shouldDisplayInConversationThread({\r\n activity,\r\n isTroubleshootingEnabled,\r\n isReportingInsightsEnabled,\r\n isTroubleshootingIntentionDetectionEnabled,\r\n}: {\r\n activity: Activity;\r\n isTroubleshootingEnabled: boolean;\r\n isReportingInsightsEnabled: boolean;\r\n isTroubleshootingIntentionDetectionEnabled: boolean;\r\n}): boolean {\r\n if (activity.type === 'message') {\r\n return true;\r\n }\r\n\r\n if (activity.type === 'event') {\r\n if (activity.name === EVENT_NAME_LIVE_AGENT_CHAT) {\r\n return true;\r\n }\r\n\r\n const isTroubleshootingEvent = isTroubleshootingEnabled && activity.name === EVENT_NAME_ENGAGE_TROUBLESHOOTER;\r\n const isReportingPlugin = isReportingInsightsEnabled && activity.name === EVENT_NAME_PLUGIN && _.any(activity.value, (pluginResult) => _.contains(PluginScenarios, pluginResult.Name));\r\n const isTroubleshootingIntentionPlugin = isTroubleshootingIntentionDetectionEnabled\r\n && activity.name === EVENT_NAME_PLUGIN\r\n && _.any(activity.value, (pluginResult) => pluginResult.Name === PluginScenarioTroubleshootingDetection);\r\n return isTroubleshootingEvent || isReportingPlugin || isTroubleshootingIntentionPlugin;\r\n }\r\n\r\n return false;\r\n}\r\n","import React, { FC, memo, useContext } from 'react';\r\nimport { makeStyles, tokens, mergeClasses } from '@fluentui/react-components';\r\nimport { I18nContext, I18nModel } from '@bingads-webui/copilot-i18n';\r\nimport './global';\r\n\r\nconst useTimeStampStyles = makeStyles({\r\n root: {\r\n fontSize: tokens.fontSizeBase200,\r\n color: tokens.colorNeutralForeground4,\r\n textAlign: 'center',\r\n },\r\n});\r\n\r\ninterface ITimeStampProps {\r\n time: Date;\r\n}\r\n\r\nexport function dateTimeFormatter(date: Date, locale: string, timeZone: string | undefined = undefined) {\r\n const formatter = new Intl.DateTimeFormat(locale, {\r\n month: 'short',\r\n day: '2-digit',\r\n hour: 'numeric',\r\n minute: '2-digit',\r\n hour12: true,\r\n timeZone,\r\n });\r\n\r\n const formattedDate = formatter.format(date);\r\n return formattedDate;\r\n}\r\n\r\nexport const TimeStamp: FC = memo((props) => {\r\n const styles = useTimeStampStyles();\r\n const i18n = useContext(I18nContext) as I18nModel;\r\n const { time } = props;\r\n const locale = i18n.getLocale();\r\n const formattedDate = dateTimeFormatter(time, locale);\r\n\r\n return (\r\n
\r\n {formattedDate}\r\n
\r\n );\r\n});\r\n","import React, { memo, useMemo } from 'react';\r\nimport { makeStyles, mergeClasses, tokens } from '@fluentui/react-components';\r\nimport { Activity } from 'botframework-directlinejs';\r\nimport { TimeStamp } from './TimeStamp';\r\n\r\nconst useActivityGroupStyles = makeStyles({\r\n root: {\r\n },\r\n activityContainer: {\r\n '& .message-activity': {\r\n marginTop: tokens.spacingVerticalM,\r\n },\r\n },\r\n clear: {\r\n clear: 'both',\r\n },\r\n});\r\n\r\nexport interface IActivityGroupProps {\r\n activities: Activity[];\r\n renderActivity(activity: Activity): React.ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport const ActivityGroup = memo((props: IActivityGroupProps) => {\r\n const styles = useActivityGroupStyles();\r\n const {\r\n activities, renderActivity, className = '',\r\n } = props;\r\n\r\n const firstActivityTime = useMemo(() => {\r\n const firstNonWelcomeMessage = activities.find((activity) => activity.type === 'message' && (activity.value as any) !== 'Welcome');\r\n if (firstNonWelcomeMessage) {\r\n const parsedTimestamp = +(firstNonWelcomeMessage.timestamp!);\r\n if (!Number.isNaN(parsedTimestamp) && parsedTimestamp > 0) {\r\n return new Date(parsedTimestamp);\r\n }\r\n }\r\n\r\n return undefined;\r\n }, [activities]);\r\n\r\n return (\r\n
\r\n {!!firstActivityTime && }\r\n
\r\n {activities.map((activity) => renderActivity(activity))}\r\n
\r\n
\r\n
\r\n );\r\n});\r\n","import { makeStyles, tokens } from '@fluentui/react-components';\r\n\r\nexport const useBaseMessageStyles = makeStyles({\r\n root: {\r\n position: 'relative',\r\n '&>div': {\r\n wordBreak: 'normal',\r\n overflowWrap: 'anywhere',\r\n },\r\n '& p, & ul': {\r\n marginTop: '0',\r\n marginBottom: '0',\r\n },\r\n '&.human-message': {\r\n backgroundColor: '#DEECF9',\r\n boxShadow: 'none',\r\n float: 'right',\r\n clear: 'both',\r\n maxWidth: '88%',\r\n },\r\n '&.ai-message': {\r\n boxShadow: tokens.shadow2,\r\n float: 'left',\r\n clear: 'both',\r\n '& a': {\r\n wordBreak: 'break-all',\r\n },\r\n minWidth: '272px',\r\n },\r\n },\r\n actions: {\r\n position: 'relative',\r\n },\r\n});\r\n","import React from 'react';\r\nimport { Message } from 'botframework-directlinejs';\r\nimport { OutputCard } from '@fluentai/react-copilot';\r\nimport { makeStyles, mergeClasses, tokens } from '@fluentui/react-components';\r\nimport { useBaseMessageStyles } from './use-base-message-styles';\r\n\r\nexport interface IBaseMessageProps {\r\n message?: Message;\r\n className?: string;\r\n isAIMessage?: boolean;\r\n footer?: React.ReactNode;\r\n children?: React.ReactNode;\r\n action?: React.ReactNode;\r\n}\r\n\r\nconst useOutputSidecarContentStyles = makeStyles({\r\n root: {\r\n color: tokens.colorNeutralForeground1,\r\n },\r\n});\r\n\r\nconst OutputSidecarContent: React.FC<{ children: React.ReactNode }> = ({ children }) => {\r\n const styles = useOutputSidecarContentStyles();\r\n return
{children}
;\r\n};\r\n\r\nexport const BaseMessage: React.FC = React.memo(({\r\n className, footer, children, action,\r\n}) => {\r\n const styles = useBaseMessageStyles();\r\n return (\r\n \r\n \r\n {children}\r\n
\r\n {action}\r\n
\r\n
\r\n {footer}\r\n
\r\n );\r\n});\r\n\r\nBaseMessage.defaultProps = {\r\n className: '',\r\n isAIMessage: true,\r\n footer: null,\r\n children: null,\r\n message: undefined,\r\n};\r\n","import React from 'react';\r\nimport { Message } from 'botframework-directlinejs';\r\nimport { mergeClasses } from '@fluentui/react-components';\r\nimport { BaseMessage, IBaseMessageProps } from './base-message';\r\n\r\ninterface IHumanMessageProps extends Omit {\r\n message: Message;\r\n}\r\n\r\nexport const HumanMessage: React.FC = React.memo((props) => {\r\n const { message } = props;\r\n\r\n const pluginName = (message.value as any)?.PluginContext?.Name;\r\n if (pluginName === 'AccountFluctuation' || pluginName === 'CampaignFluctuation') {\r\n // do not show the automated message to trigger fluctuations\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n {props.message.text}\r\n \r\n );\r\n});\r\n","import React, {\r\n FC, memo, useCallback, useContext, useState,\r\n} from 'react';\r\nimport {\r\n makeStyles, Button, Tooltip, mergeClasses, TooltipProps, tokens, shorthands,\r\n} from '@fluentui/react-components';\r\nimport { Copy16Regular, Copy16Filled, bundleIcon } from '@fluentui/react-icons';\r\nimport { I18nContext, I18nModel } from '@bingads-webui/copilot-i18n';\r\n\r\nconst CopyIcon = bundleIcon(Copy16Filled, Copy16Regular);\r\n\r\nconst useCopyButtonStyles = makeStyles({\r\n copyBtn: {\r\n color: tokens.colorNeutralForeground3,\r\n '&.fui-Icon-filled': {\r\n color: tokens.colorNeutralForeground2BrandSelected,\r\n },\r\n },\r\n hiddenA11yAnnounceArea: {\r\n position: 'absolute',\r\n width: '1px',\r\n clip: 'rect(0 0 0 0)',\r\n height: '1px',\r\n ...shorthands.margin(0),\r\n ...shorthands.overflow('hidden'),\r\n ...shorthands.padding(0),\r\n ...shorthands.border('0'),\r\n },\r\n});\r\n\r\ninterface ICopyButtonProps {\r\n messageText: string;\r\n ariaHiddenWhileLoading: boolean;\r\n}\r\n\r\nconst COPY_BTN_TIP = _TL_('Copy');\r\nconst COPIED_TIP = _TL_('Copied!');\r\n\r\nexport const CopyButton: FC = memo(({ messageText, ariaHiddenWhileLoading }) => {\r\n const styles = useCopyButtonStyles();\r\n const i18n = useContext(I18nContext) as I18nModel;\r\n const [tooltipContent, setTooltipContent] = useState(i18n.getString(COPY_BTN_TIP));\r\n const copyMessage = useCallback(() => {\r\n navigator.clipboard.writeText(messageText)\r\n .then(() => {\r\n setTooltipContent(i18n.getString(COPIED_TIP));\r\n\r\n const a11yAnnounceArea = document.getElementById('a11yAnnounceArea');\r\n if (a11yAnnounceArea) {\r\n a11yAnnounceArea.textContent = i18n.getString(COPIED_TIP);\r\n a11yAnnounceArea.textContent = '';\r\n }\r\n });\r\n }, [i18n, messageText]);\r\n const onVisibleChange = useCallback>((_evt, data) => {\r\n if (!data.visible) {\r\n setTooltipContent(i18n.getString(COPY_BTN_TIP));\r\n }\r\n }, [i18n]);\r\n\r\n return (\r\n \r\n \r\n }\r\n appearance=\"transparent\"\r\n size=\"small\"\r\n onClick={copyMessage}\r\n aria-label={i18n.getString(COPY_BTN_TIP)}\r\n aria-hidden={ariaHiddenWhileLoading}\r\n tabIndex={ariaHiddenWhileLoading ? -1 : 0}\r\n />\r\n \r\n {/* for a11y announce do not remove the div below */}\r\n \r\n \r\n );\r\n});\r\n","import React, {\r\n useCallback, useMemo, useContext, memo, useState, useEffect,\r\n} from 'react';\r\nimport _ from 'underscore';\r\nimport {\r\n makeStyles,\r\n mergeClasses,\r\n tokens,\r\n shorthands,\r\n Tooltip,\r\n ToggleButton,\r\n} from '@fluentui/react-components';\r\nimport {\r\n ThumbDislike16Regular,\r\n ThumbLike16Regular,\r\n ThumbDislike16Filled,\r\n ThumbLike16Filled,\r\n bundleIcon,\r\n} from '@fluentui/react-icons';\r\nimport { I18nContext, I18nModel } from '@bingads-webui/copilot-i18n';\r\nimport './global';\r\nimport { FeedbackType } from './botTypes';\r\n\r\nconst ThumbLike = bundleIcon(ThumbLike16Filled, ThumbLike16Regular);\r\nconst ThumbDislike = bundleIcon(ThumbDislike16Filled, ThumbDislike16Regular);\r\n\r\nexport interface IFeedbackData {\r\n prevFeedback: FeedbackType;\r\n currentFeedback: FeedbackType;\r\n}\r\n\r\ntype IFeedbackButtonsProps = {\r\n onFeedbackChange: (\r\n data: IFeedbackData\r\n ) => void;\r\n currentFeedback?: FeedbackType;\r\n ariaHiddenWhileLoading?: boolean;\r\n} & Omit, 'onClick'>;\r\n\r\nconst useFeedbackButtonsStyles = makeStyles({\r\n root: {\r\n display: 'flex',\r\n },\r\n buttonIcon: {\r\n color: tokens.colorNeutralForeground3,\r\n '&.fui-Icon-filled': {\r\n color: tokens.colorNeutralForeground2BrandSelected,\r\n },\r\n },\r\n button: {\r\n ...shorthands.padding(0),\r\n },\r\n});\r\n\r\nexport const FeedbackButtons: React.FC = memo(({\r\n onFeedbackChange,\r\n className,\r\n currentFeedback: currentFeedbackFromParent,\r\n ariaHiddenWhileLoading,\r\n ...props\r\n}) => {\r\n const styles = useFeedbackButtonsStyles();\r\n const [currentFeedback, setCurrentFeedback] = useState('None');\r\n const thumbsUpChecked = currentFeedback === 'ThumbsUp';\r\n const thumbsDownChecked = currentFeedback === 'ThumbsDown';\r\n\r\n const onPositiveClick = useCallback(() => {\r\n const newFeedback = currentFeedback === 'ThumbsUp' ? 'None' : 'ThumbsUp';\r\n onFeedbackChange({ prevFeedback: currentFeedback, currentFeedback: newFeedback });\r\n setCurrentFeedback(newFeedback);\r\n }, [currentFeedback, onFeedbackChange]);\r\n\r\n const onNegativeClick = useCallback(() => {\r\n const newFeedback = currentFeedback === 'ThumbsDown' ? 'None' : 'ThumbsDown';\r\n onFeedbackChange({ prevFeedback: currentFeedback, currentFeedback: newFeedback });\r\n setCurrentFeedback(newFeedback);\r\n }, [currentFeedback, onFeedbackChange]);\r\n\r\n const thumbLikeIcon = useMemo(() => , [styles.buttonIcon]);\r\n const thumbsDislikeIcon = useMemo(() => , [styles.buttonIcon]);\r\n const i18n = useContext(I18nContext) as I18nModel;\r\n\r\n useEffect(() => {\r\n if (currentFeedbackFromParent != null && _.contains(['ThumbsUp', 'ThumbsDown'], currentFeedbackFromParent)) {\r\n setCurrentFeedback(currentFeedbackFromParent);\r\n }\r\n }, [currentFeedbackFromParent]);\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n});\r\n","import React from 'react';\r\n\r\nexport type AnchorInNewWindowProps = {\r\n children: React.ReactNode;\r\n};\r\n\r\nexport const AnchorInNewWindow: React.FC = ({ children, ...props }) => (\r\n \r\n {children}\r\n \r\n);\r\n","import { makeStyles, tokens, shorthands } from '@fluentui/react-components';\r\n\r\nexport const useAIMessageStyles = makeStyles({\r\n footer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n paddingTop: tokens.spacingVerticalXS,\r\n },\r\n footerContent: {\r\n display: 'flex',\r\n columnGap: tokens.spacingHorizontalS,\r\n alignItems: 'center',\r\n justifyContent: 'flex-end',\r\n position: 'relative',\r\n minHeight: tokens.spacingVerticalXXL,\r\n },\r\n buttons: {\r\n display: 'flex',\r\n position: 'absolute',\r\n top: 0,\r\n },\r\n dataDisclaimerContainer: {\r\n width: 'max-content',\r\n flexGrow: 1,\r\n },\r\n dataDisclaimerButton: {\r\n paddingLeft: tokens.spacingHorizontalNone,\r\n paddingTop: tokens.spacingHorizontalNone,\r\n paddingBottom: tokens.spacingHorizontalNone,\r\n paddingRight: tokens.spacingHorizontalNone,\r\n fontSize: tokens.fontSizeBase100,\r\n fontWeight: tokens.fontWeightRegular,\r\n color: tokens.colorNeutralStrokeAccessible,\r\n '&:hover':{\r\n color: tokens.colorNeutralStrokeAccessible,\r\n },\r\n '&:active':{\r\n color: `${tokens.colorNeutralStrokeAccessible} !important`,\r\n },\r\n '&:focus':{\r\n color: tokens.colorNeutralStrokeAccessible,\r\n },\r\n '& span':{\r\n marginLeft: tokens.spacingHorizontalNone,\r\n marginTop: tokens.spacingHorizontalXS,\r\n }\r\n },\r\n infoIcon:{\r\n color: tokens.colorNeutralStrokeAccessible,\r\n marginLeft: `${tokens.spacingHorizontalNone} !important`,\r\n },\r\n referenceGroup: {\r\n '& .fai-ReferenceGroup__label': {\r\n fontSize: tokens.fontSizeBase100,\r\n },\r\n },\r\n reference: {\r\n cursor: 'pointer',\r\n columnGap: 'unset',\r\n gridTemplateColumns: '0px 0px 1fr min-content',\r\n '& .fai-Reference__label': {\r\n wordBreak: 'break-all',\r\n whiteSpace: 'nowrap',\r\n textOverflow: 'ellipsis',\r\n ...shorthands.overflow('hidden'),\r\n },\r\n },\r\n});\r\n","import React, {\r\n useCallback, useContext, useEffect, useMemo,\r\n} from 'react';\r\nimport { Message } from 'botframework-directlinejs';\r\nimport { ReferenceList, ReferenceGroup } from '@fluentai/react-copilot';\r\nimport {\r\n mergeClasses,\r\n useId,\r\n Tooltip,\r\n ToggleButton,\r\n} from '@fluentui/react-components';\r\nimport { I18nContext, I18nModel } from '@bingads-webui/copilot-i18n';\r\nimport _ from 'underscore';\r\nimport Markdown from 'markdown-to-jsx';\r\nimport { Reference } from '@fluentai/reference';\r\nimport { Open16Regular, InfoRegular } from '@fluentui/react-icons';\r\n\r\nimport { CopyButton } from '../../CopyButton';\r\nimport { FeedbackButtons, IFeedbackData } from '../../FeedbackButtons';\r\nimport {\r\n FeedbackType,\r\n StreamingStatusType,\r\n IBotOutgoingMessageValue,\r\n IResponseSources,\r\n} from '../../botTypes';\r\nimport { DirectLineContext } from '../direct-line-provider/direct-line-context';\r\nimport { BaseMessage, IBaseMessageProps } from './base-message';\r\nimport { AnchorInNewWindow } from './anchor-in-new-window';\r\nimport { useAIMessageStyles } from './use-ai-message-styles';\r\nimport { getDisclaimerString, shouldFeatureShowDisclaimer } from '../../utils';\r\n\r\nexport interface IAIMessage extends Omit {\r\n message: Message;\r\n children?: React.ReactNode;\r\n className?: string;\r\n showDataDisclaimer?: boolean;\r\n showReferences?: boolean;\r\n showFeedback?: boolean;\r\n showCopyButton?: boolean;\r\n isShowFeaturesInHint?: boolean;\r\n action?: React.ReactNode;\r\n footer?: React.ReactNode;\r\n onFeedbackButtonClick?(data: IFeedbackData, message: Message): void;\r\n onReferenceClick?(url: string): void;\r\n}\r\n\r\nexport const AIMessage: React.FC = React.memo(({\r\n children,\r\n className,\r\n message,\r\n showDataDisclaimer,\r\n showReferences,\r\n showFeedback,\r\n showCopyButton,\r\n isShowFeaturesInHint,\r\n action,\r\n footer,\r\n onFeedbackButtonClick,\r\n onReferenceClick,\r\n}) => {\r\n const styles = useAIMessageStyles();\r\n const { directLine, userid, username } = useContext(DirectLineContext)!;\r\n const { Sources } = ((message.value || {}) as any) as IBotOutgoingMessageValue;\r\n const { Features } = ((message.value || {}) as any) as IBotOutgoingMessageValue;\r\n const i18n = useContext(I18nContext) as I18nModel;\r\n const onFeedbackButtonClickCb = useCallback((data: IFeedbackData) => {\r\n if (onFeedbackButtonClick) {\r\n onFeedbackButtonClick(data, message);\r\n }\r\n }, [message, onFeedbackButtonClick]);\r\n\r\n const referenceClick = useCallback((source: IResponseSources) => {\r\n const { Url: url } = ((source || {}) as any) as IResponseSources;\r\n\r\n if (onReferenceClick) {\r\n onReferenceClick(url);\r\n }\r\n\r\n if (directLine) {\r\n const messageReactionAction = {\r\n type: 'messageReaction',\r\n replyToId: message.id,\r\n from: {\r\n id: userid,\r\n name: username,\r\n },\r\n reactionsAdded: [{ type: 'CitationClicked' }],\r\n };\r\n\r\n directLine.postActivity((messageReactionAction as any)).subscribe();\r\n }\r\n\r\n window.open(url, '_blank');\r\n }, [directLine, message, onReferenceClick, userid, username]);\r\n\r\n const { text = '' } = message;\r\n const [isInert, setIsInert] = React.useState(true);\r\n const footerId = useId('footer');\r\n const streamingStatus = _.get(message, ['value', 'StreamingStatus']) as any;\r\n const ariaHiddenWhileLoading = streamingStatus !== StreamingStatusType.Completed;\r\n const shouldShowDisclaimer = useMemo(() => showDataDisclaimer || shouldFeatureShowDisclaimer(message), [message, showDataDisclaimer]);\r\n const disclaimerText = useMemo(() => getDisclaimerString(message), [message]);\r\n\r\n const showFooter = showReferences || showCopyButton || showFeedback || isShowFeaturesInHint;\r\n const currentFeedback: FeedbackType = _.get(message, ['value', 'currentFeedback']) as any;\r\n\r\n const finalFooter = showFooter ? (\r\n
\r\n
\r\n {(shouldShowDisclaimer) ? (\r\n
\r\n \r\n }\r\n iconPosition=\"after\"\r\n >\r\n {i18n.getString(_TL_('Content source'))}\r\n \r\n \r\n
\r\n ) : null}\r\n {!showDataDisclaimer && showReferences && Sources && Sources.length > 0 ? (\r\n \r\n \r\n {Sources.map((source, idx) => (\r\n \r\n }\r\n label={source.Title}\r\n title={source.Title}\r\n role=\"link\"\r\n aria-label={`${i18n.getString(_TL_('Learn More About:'))} ${source.Title}`}\r\n onClick={() => referenceClick(source)}\r\n tabIndex={0}\r\n />\r\n
\r\n ))}\r\n \r\n \r\n ) : null}\r\n \r\n {showCopyButton && }\r\n {showFeedback && }\r\n
\r\n
\r\n {footer}\r\n \r\n ) : null;\r\n\r\n const updateInertValueOnClick = useCallback((learnMoreButton: Element) => {\r\n setIsInert(_.get(learnMoreButton, ['ariaExpanded']) === 'true');\r\n }, [setIsInert]);\r\n\r\n useEffect(() => {\r\n const learnMoreButton = footerId && document.getElementById(footerId)?.getElementsByClassName('fai-ReferenceGroup__detailsButton')[0];\r\n if (learnMoreButton) {\r\n learnMoreButton.addEventListener('click', () => updateInertValueOnClick(learnMoreButton));\r\n } else {\r\n // if we can't listen to clicks on learn more, then we should not keep the links disabled\r\n setIsInert(false);\r\n }\r\n }, [updateInertValueOnClick, footerId]);\r\n\r\n return (\r\n
\r\n \r\n {children || (\r\n \r\n {text}\r\n \r\n )}\r\n \r\n
\r\n );\r\n});\r\n\r\nAIMessage.defaultProps = {\r\n showReferences: true,\r\n showFeedback: true,\r\n showCopyButton: true,\r\n className: '',\r\n action: null,\r\n onFeedbackButtonClick: () => { },\r\n onReferenceClick: () => { },\r\n footer: null,\r\n isShowFeaturesInHint: false,\r\n};\r\n","import React from 'react';\r\nimport { Activity } from 'botframework-directlinejs';\r\n\r\nimport { EVENT_NAME_ENGAGE_TROUBLESHOOTER } from '../../utils';\r\n\r\n/**\r\n * Gets the React key prop for an activity. This is usually the activity.id except in cases like streaming message from bot, where we want to keep the\r\n * same key so that the component does not get unmounted and remounted.\r\n * @param activity {Activity} - Activity to get the key for.\r\n * @returns {React.Key} - React key prop for list item.\r\n */\r\nexport function getActivityKey(activity: Activity): React.Key | undefined {\r\n if (activity.type === 'message') {\r\n const replyToId = (activity as any)?.replyToId;\r\n if (replyToId) {\r\n const isStaticMessage = (activity as any)?.text === 'StaticMessages';\r\n const isAnimationCard = (activity as any)?.value === 'AnimationCard';\r\n\r\n if (!isAnimationCard && !isStaticMessage) {\r\n return `reply-message-${replyToId}`;\r\n }\r\n }\r\n } else if (activity.type === 'event' && activity.name === EVENT_NAME_ENGAGE_TROUBLESHOOTER) {\r\n // for ad delivery troubleshooting, each activity is a new message\r\n // it need to be handled separately\r\n return activity.id;\r\n }\r\n\r\n return activity.id;\r\n}\r\n","import React, {\r\n forwardRef,\r\n useCallback,\r\n useContext,\r\n type Ref,\r\n} from 'react';\r\nimport { makeStyles, mergeClasses, tokens } from '@fluentui/react-components';\r\nimport { Activity, Message } from 'botframework-directlinejs';\r\n\r\nimport { DEFAULT_GROUP_TIME } from './constants';\r\nimport { makeActivityGroups } from './make-activity-groups';\r\nimport { DefaultRenderActivity, IConversationThreadPropsBase } from '../../types';\r\nimport { DirectLineContext } from '../direct-line-provider/direct-line-context';\r\nimport { ActivityGroup } from '../../ActivityGroup';\r\nimport { AIMessage, HumanMessage } from '../message';\r\nimport { getActivityKey } from './get-activity-key';\r\n\r\ninterface IConversationThreadPropsInternal extends IConversationThreadPropsBase {\r\n activities: Activity[];\r\n conversationId?: string;\r\n}\r\n\r\nconst useConversationThreadStyles = makeStyles({\r\n root: {\r\n },\r\n top: {\r\n paddingBottom: '40px',\r\n },\r\n activityGroupContainer: {\r\n paddingBottom: tokens.spacingHorizontalXXS,\r\n paddingLeft: tokens.spacingHorizontalXS,\r\n paddingRight: tokens.spacingHorizontalXS,\r\n '& .activity-group': {\r\n marginTop: tokens.spacingVerticalM,\r\n },\r\n '& .activity-group:first-child': {\r\n marginTop: 0,\r\n },\r\n },\r\n bottom: {},\r\n});\r\n\r\nconst defaultRenderActivity: DefaultRenderActivity = (activity, params) => {\r\n const {\r\n action,\r\n key,\r\n onFeedbackButtonClick,\r\n onReferenceClick,\r\n username,\r\n isShowFeaturesInHint,\r\n } = params;\r\n const isAIMessage = activity.from.name !== username;\r\n\r\n if (isAIMessage) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst ConversationThreadInternalWithForwardRef = (props: IConversationThreadPropsInternal, ref: Ref) => {\r\n const {\r\n activities,\r\n conversationId = '',\r\n groupTime = DEFAULT_GROUP_TIME,\r\n isCopilotDegraded = false,\r\n isTroubleshootingEnabled = false,\r\n isReportingInsightsEnabled = false,\r\n isTroubleshootingIntentionDetectionEnabled = false,\r\n isShowFeaturesInHint = false,\r\n onFeedbackButtonClick,\r\n onReferenceClick,\r\n onSuggestionClick,\r\n renderAction,\r\n renderActivity,\r\n renderBottomComponent,\r\n renderChatSuggestionList,\r\n renderTopComponent,\r\n } = props;\r\n const styles = useConversationThreadStyles();\r\n const {\r\n directLine, username,\r\n } = useContext(DirectLineContext)!;\r\n\r\n const activityGroups = makeActivityGroups({\r\n activities,\r\n groupTime,\r\n isTroubleshootingEnabled,\r\n isReportingInsightsEnabled,\r\n isTroubleshootingIntentionDetectionEnabled,\r\n });\r\n\r\n const finalRenderActivity = useCallback((activity: Message) => {\r\n const params = {\r\n onFeedbackButtonClick,\r\n username,\r\n isShowFeaturesInHint,\r\n currentActivities: activities,\r\n directLine,\r\n onReferenceClick,\r\n action: renderAction ? renderAction(activity) : undefined,\r\n key: getActivityKey(activity),\r\n };\r\n\r\n if (renderActivity) {\r\n return renderActivity(activity, params, defaultRenderActivity);\r\n }\r\n return defaultRenderActivity(activity, params);\r\n }, [activities, directLine, onFeedbackButtonClick, onReferenceClick, renderAction, renderActivity, username]);\r\n\r\n return (\r\n
\r\n
\r\n {renderTopComponent && renderTopComponent(activities, onSuggestionClick)}\r\n
\r\n
\r\n {activityGroups.map((actGroup) => (\r\n \r\n ))}\r\n
\r\n
\r\n {renderBottomComponent && renderBottomComponent(activities)}\r\n
\r\n {!isCopilotDegraded && renderChatSuggestionList && renderChatSuggestionList()}\r\n
\r\n );\r\n};\r\n\r\nexport const ConversationThreadInternal = forwardRef(ConversationThreadInternalWithForwardRef);\r\n","import { Activity, Message } from 'botframework-directlinejs';\r\nimport { getCurrentFeedback } from './get-current-feedback';\r\n\r\nexport const getActivitiesWithFeedback = (activity: any, currentActivities: Activity[]): Activity[] => {\r\n if ((activity.type as any) === 'messageReaction') {\r\n const { replyToId } = activity as any;\r\n const targetActivity = currentActivities.find((act) => act.id === replyToId) as Message;\r\n if (targetActivity) {\r\n const currentFeedback = getCurrentFeedback(activity);\r\n const newActivity = {\r\n ...targetActivity,\r\n value: {\r\n ...(targetActivity.value ? targetActivity.value : {}),\r\n currentFeedback,\r\n } as any,\r\n };\r\n\r\n return currentActivities.map((act) => (act.id === replyToId ? newActivity : act));\r\n }\r\n }\r\n\r\n return currentActivities;\r\n};\r\n","import _ from 'underscore';\r\nimport { FeedbackType } from '../../botTypes';\r\n\r\nexport const getCurrentFeedback = (activity: any): FeedbackType => {\r\n const { reactionsAdded } = activity;\r\n const firstAdded: FeedbackType = _.get(reactionsAdded, ['0', 'type']);\r\n\r\n return firstAdded || 'None';\r\n};\r\n","import _ from 'underscore';\r\nimport React, {\r\n forwardRef, useContext, useEffect, useRef, useState, useCallback, memo,\r\n type Ref,\r\n} from 'react';\r\nimport { Activity, DirectLine, Message } from 'botframework-directlinejs';\r\n\r\nimport { IConversationThreadProps } from '../../types';\r\nimport { DirectLineContext } from '../direct-line-provider/direct-line-context';\r\nimport { IFeedbackData } from '../../FeedbackButtons';\r\nimport { BotActivity } from '../../botTypes';\r\nimport { useLoading } from '../../hooks/useLoading';\r\nimport { getOAuthCardResourceUri } from '../../hooks/useSSO';\r\nimport { ConversationThreadInternal } from './conversation-thread-internal';\r\nimport { getActivitiesWithFeedback } from './get-activities-with-feedback';\r\nimport { findExistingActivityIndex } from './find-existing-activity-index';\r\nimport { isTroubleshootingEvent } from '../../utils';\r\n\r\nconst ConversationThreadWithForwardRef = (props: IConversationThreadProps, ref: Ref) => {\r\n const { directLine, userid, username } = useContext(DirectLineContext)!;\r\n const {\r\n onReceiveActivity: originalOnReceiveActivity,\r\n onReceiveActivityEnd,\r\n onReceiveActivityStart,\r\n onFeedbackButtonClick,\r\n renderBottomComponent: originalRenderBottomComponent,\r\n isCustomStream,\r\n isStopGeneratingEnabled = false,\r\n isTroubleshootingEnabled,\r\n } = props;\r\n const refreshId = useRef(-1);\r\n const activitiesRef = useRef([]);\r\n const existingActivitiesRef = useRef([]);\r\n const [, forceUpdate] = useState(-1);\r\n const activitySubscriber = useRef | null>(null);\r\n const [conversationId, setConversationId] = useState('');\r\n\r\n const sendFeedback = useCallback(({ prevFeedback, currentFeedback }: IFeedbackData, message: Message) => {\r\n if (!directLine) {\r\n return;\r\n }\r\n\r\n const reactionsRemoved = prevFeedback !== 'None' ? [{ type: prevFeedback }] : [];\r\n const reactionsAdded = currentFeedback !== 'None' ? [{ type: currentFeedback }] : [];\r\n const messageReactionAction = {\r\n type: 'messageReaction',\r\n replyToId: message.id,\r\n from: {\r\n id: userid,\r\n name: username,\r\n },\r\n reactionsRemoved,\r\n reactionsAdded,\r\n };\r\n\r\n directLine.postActivity((messageReactionAction as any)).subscribe(() => {\r\n if (onFeedbackButtonClick) {\r\n onFeedbackButtonClick({ prevFeedback, currentFeedback }, message);\r\n }\r\n });\r\n }, [directLine, userid, username, onFeedbackButtonClick]);\r\n\r\n const { onReceiveActivity, renderBottomComponent } = useLoading({\r\n renderBottomComponent: originalRenderBottomComponent,\r\n isCustomStream,\r\n isStopGeneratingEnabled,\r\n isStopTroubleshootingEnabled: isTroubleshootingEnabled,\r\n onReceiveActivity: originalOnReceiveActivity,\r\n });\r\n\r\n useEffect(() => {\r\n if (activitySubscriber.current) {\r\n activitySubscriber.current.unsubscribe();\r\n }\r\n\r\n if (directLine) {\r\n const subscribeTime = new Date();\r\n activitySubscriber.current = directLine.activity$.subscribe((activity: Activity) => {\r\n // Check if the activity ID exists in the DirectLine state.\r\n // When a live agent is active, messages sent won't have an activity ID,\r\n // so such messages are considered new.\r\n if (activity.id) {\r\n for (let i = existingActivitiesRef.current.length - 1; i >= 0; i -= 1) {\r\n if (existingActivitiesRef.current[i].id === activity.id) {\r\n // activity is already in the list, nothing to do\r\n return;\r\n }\r\n }\r\n }\r\n\r\n const convId = activity.conversation?.id;\r\n setConversationId(convId);\r\n\r\n const timestampDate = activity.timestamp ? new Date(activity.timestamp) : new Date();\r\n\r\n // if timestamp is before the subscription time, the activity is part of a restored conversation and not a new activity\r\n _.extend(activity, {\r\n isFromRestore: (activity as any).isFromRestore || timestampDate < subscribeTime,\r\n timestamp: timestampDate.getTime().toString(),\r\n });\r\n\r\n let finalActivities = activitiesRef.current;\r\n\r\n onReceiveActivityStart?.(activity, finalActivities);\r\n\r\n const messageActivity = activity as BotActivity;\r\n\r\n existingActivitiesRef.current = existingActivitiesRef.current.concat(activity);\r\n\r\n // 1. it is a message in streaming status\r\n // 2. it is a static message\r\n // 3. it is a troubleshooting event message\r\n if (messageActivity.value?.StreamingStatus\r\n || (messageActivity as Message)?.text === 'StaticMessages'\r\n || isTroubleshootingEvent(messageActivity)) {\r\n const existingActivityIndex = findExistingActivityIndex(finalActivities, activity, username);\r\n\r\n if (existingActivityIndex !== -1) {\r\n finalActivities[existingActivityIndex] = activity;\r\n } else {\r\n finalActivities = finalActivities.concat(activity);\r\n }\r\n } else {\r\n finalActivities = finalActivities.concat(activity);\r\n }\r\n\r\n if (onReceiveActivity) {\r\n finalActivities = onReceiveActivity(activity, finalActivities, directLine);\r\n }\r\n\r\n if (getOAuthCardResourceUri(activity)) {\r\n finalActivities.splice(-1);\r\n }\r\n\r\n activitiesRef.current = getActivitiesWithFeedback(activity, finalActivities);\r\n\r\n refreshId.current += 1;\r\n forceUpdate(refreshId.current);\r\n\r\n onReceiveActivityEnd?.(activity);\r\n });\r\n }\r\n\r\n return () => {\r\n if (activitySubscriber.current) {\r\n activitySubscriber.current.unsubscribe();\r\n }\r\n };\r\n }, [directLine, onReceiveActivity]);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport const ConversationThread = memo(forwardRef(ConversationThreadWithForwardRef));\r\n","import {\r\n DirectLine,\r\n DirectLineOptions,\r\n Services,\r\n} from 'botframework-directlinejs';\r\nimport { IAdsCopilotDirectLine } from '../../types';\r\n\r\ntype AdsCopilotDirectLineOptions = DirectLineOptions & Partial & {\r\n isCustomStream?: boolean;\r\n userId?: string;\r\n username?: string;\r\n};\r\n\r\nexport class AdsCopilotDirectLine extends DirectLine implements IAdsCopilotDirectLine {\r\n public userId?: string;\r\n\r\n public username?: string;\r\n\r\n public existingToken?: string;\r\n\r\n public isCustomStream: boolean;\r\n\r\n constructor(args: AdsCopilotDirectLineOptions) {\r\n super(args);\r\n this.existingToken = args.token;\r\n\r\n this.isCustomStream = !!args.isCustomStream;\r\n this.userId = args.userId;\r\n this.username = args.username;\r\n }\r\n}\r\n","/* eslint-disable no-restricted-globals */\r\nimport _ from 'underscore';\r\nimport cookie from 'browser-cookies';\r\n\r\nexport type EventType = 'message' | 'action';\r\n\r\nexport interface ICustomizedEvent {\r\n eventType: EventType;\r\n eventData: any;\r\n}\r\n\r\nexport interface ISessionInfo {\r\n isOpen?: boolean;\r\n token?: string;\r\n customizedEvent?: ICustomizedEvent;\r\n}\r\n\r\nexport interface ISessionManager {\r\n saveSessionInfo(info: ISessionInfo): Promise;\r\n getSessionInfo(): Promise;\r\n clearSessionInfo(): Promise;\r\n}\r\n\r\ntype SessionInfoEventHandler = (info: any, key: string) => void;\r\n\r\nexport interface ISessionManagerOptions {\r\n sessionInfoKey: string;\r\n onSaveSessionInfo?: SessionInfoEventHandler;\r\n onGetSessionInfo?: SessionInfoEventHandler;\r\n onClearSessionInfo?: SessionInfoEventHandler;\r\n}\r\n\r\nexport abstract class SessionManager implements ISessionManager {\r\n protected sessionInfoKey: string;\r\n\r\n protected sessionInfo: ISessionInfo | null = null;\r\n\r\n protected onSaveSessionInfo: SessionInfoEventHandler;\r\n\r\n protected onGetSessionInfo: SessionInfoEventHandler;\r\n\r\n protected onClearSessionInfo: SessionInfoEventHandler;\r\n\r\n constructor({\r\n sessionInfoKey,\r\n onSaveSessionInfo = _.noop,\r\n onGetSessionInfo = _.noop,\r\n onClearSessionInfo = _.noop,\r\n }: ISessionManagerOptions) {\r\n this.sessionInfoKey = sessionInfoKey;\r\n this.onSaveSessionInfo = onSaveSessionInfo;\r\n this.onGetSessionInfo = onGetSessionInfo;\r\n this.onClearSessionInfo = onClearSessionInfo;\r\n }\r\n\r\n public saveSessionInfo(_info: ISessionInfo): Promise {\r\n return Promise.reject(new Error('Not implemented'));\r\n }\r\n\r\n public getSessionInfo(): Promise {\r\n return Promise.reject(new Error('Not implemented'));\r\n }\r\n\r\n public clearSessionInfo(): Promise {\r\n return Promise.reject(new Error('Not implemented'));\r\n }\r\n}\r\n\r\nexport interface ICookieSessionManagerOptions extends ISessionManagerOptions {\r\n domain: string;\r\n}\r\n\r\nexport class CookieSessionManager extends SessionManager {\r\n private domain: string;\r\n\r\n constructor({\r\n domain,\r\n ...args\r\n }: ICookieSessionManagerOptions) {\r\n super(args);\r\n this.domain = domain;\r\n }\r\n\r\n public saveSessionInfo(newInfo: ISessionInfo) {\r\n this.sessionInfo = _.extend({}, this.sessionInfo, newInfo);\r\n cookie.set(this.sessionInfoKey, JSON.stringify(this.sessionInfo), {\r\n domain: this.domain,\r\n samesite: 'Strict',\r\n secure: true,\r\n });\r\n this.onSaveSessionInfo(this.sessionInfo, this.sessionInfoKey);\r\n return Promise.resolve(newInfo);\r\n }\r\n\r\n public getSessionInfo() {\r\n let result;\r\n\r\n try {\r\n if (this.sessionInfo == null) {\r\n this.sessionInfo = JSON.parse(cookie.get(this.sessionInfoKey) as string);\r\n }\r\n result = this.sessionInfo;\r\n } catch (e) {\r\n result = null;\r\n }\r\n\r\n this.onGetSessionInfo(result, this.sessionInfoKey);\r\n return Promise.resolve(result);\r\n }\r\n\r\n public clearSessionInfo() {\r\n this.onClearSessionInfo(this.sessionInfo, this.sessionInfoKey);\r\n cookie.erase(this.sessionInfoKey);\r\n return Promise.resolve();\r\n }\r\n}\r\n","import {\r\n useCallback, useEffect, useRef, useMemo, useState,\r\n} from 'react';\r\nimport _ from 'underscore';\r\nimport axios, { type AxiosRequestConfig } from 'axios';\r\nimport { type IBotConnection } from 'botframework-directlinejs';\r\n\r\nimport { CookieSessionManager, type ISessionManager, type ICookieSessionManagerOptions } from './SessionManager';\r\nimport { type FetchDirectLineChannelToken, type IAdsCopilotProps } from '../types';\r\nimport { type ITokenApiPayload, type ITokenApiResponse } from '../botTypes';\r\n\r\nconst DEFAULT_REFRESH_TIME = 15 * 1000;\r\ntype CopilotMode = 'expanded' | 'collapsed';\r\n\r\nfunction getRequestConfig(authToken?: string | null) {\r\n return {\r\n headers: {\r\n Authorization: `Bearer ${authToken}`,\r\n },\r\n } as AxiosRequestConfig;\r\n}\r\n\r\nexport const defaultFetchDirectLineChannelToken: FetchDirectLineChannelToken = ({\r\n endpoint, tokenApi, authToken, userid, username, isMarketingIntegrationEnabled = false,\r\n}) => {\r\n // strip any trailing slash from endpoint and any leading slash from tokenApi\r\n const url = `${endpoint.replace(/\\/$/, '')}/${tokenApi.replace(/^\\//, '')}`;\r\n if (isMarketingIntegrationEnabled) {\r\n return axios.post(url, { UserId: userid }).then((res) => ({ token: res.data.token, userid: res.data.userId }));\r\n }\r\n return axios.post(url, { UserId: userid, UserName: username }, getRequestConfig(authToken)).then((res) => ({ token: res.data.token, userid: res.data.userId }));\r\n};\r\n\r\nconst REFRESH_TOKEN_URL = 'https://directline.botframework.com/v3/directline/tokens/refresh';\r\nconst refreshToken = (oldToken: string | undefined) => axios.post(REFRESH_TOKEN_URL, {}, {\r\n headers: {\r\n Authorization: `BEARER ${oldToken}`,\r\n },\r\n}).then((res) => ({ token: res.data.token }));\r\n\r\ninterface IUseDirectLineTokenRestorationOptions {\r\n sessionManager: ISessionManager;\r\n botServiceConfig: IAdsCopilotProps['botServiceConfig'];\r\n logger?: IAdsCopilotProps['logger'];\r\n mode: CopilotMode;\r\n onCopilotModeChange: (param: { mode: CopilotMode }) => void;\r\n onBeforeValidateToken?: () => void;\r\n onTokenValidationSuccess?: () => void;\r\n onTokenValidationFail?: (err: any) => void;\r\n isMarketingIntegrationEnabled?: boolean;\r\n}\r\n\r\nexport const useDirectLineTokenRestoration = ({\r\n sessionManager,\r\n botServiceConfig: {\r\n endpoint, tokenApi = '/api/token', authToken, userid, username, fetchOAuthToken, fetchToken,\r\n },\r\n logger,\r\n mode,\r\n onCopilotModeChange,\r\n onBeforeValidateToken,\r\n onTokenValidationSuccess,\r\n onTokenValidationFail,\r\n isMarketingIntegrationEnabled,\r\n}: IUseDirectLineTokenRestorationOptions) => {\r\n const [token, setToken] = useState(null);\r\n const [error, setError] = useState(null);\r\n const isRestoringSession = useRef(false);\r\n\r\n const fetchTokenFromBotMT = useCallback(() => {\r\n const oAuthTokenPromise = fetchOAuthToken ? fetchOAuthToken() : Promise.resolve({ token: authToken });\r\n return oAuthTokenPromise.then(({ token: oAuthToken }) => {\r\n const fetchDirectLineChannelTokenFunc = fetchToken || defaultFetchDirectLineChannelToken;\r\n return fetchDirectLineChannelTokenFunc({\r\n endpoint, tokenApi, authToken: oAuthToken, userid, username, isMarketingIntegrationEnabled,\r\n });\r\n }).then(({ token: newToken }) => {\r\n setToken(newToken);\r\n }).catch((e) => {\r\n setError(e);\r\n });\r\n }, [authToken, endpoint, fetchOAuthToken, fetchToken, tokenApi, userid, username, isMarketingIntegrationEnabled]);\r\n\r\n const validateTokenInCookie = useCallback((oldToken: string | undefined) => {\r\n onBeforeValidateToken?.();\r\n\r\n return refreshToken(oldToken).then(({ token: newToken }) => {\r\n onTokenValidationSuccess?.();\r\n setToken(newToken);\r\n }).catch((err) => {\r\n onTokenValidationFail?.(err);\r\n sessionManager.clearSessionInfo();\r\n throw err;\r\n });\r\n }, [\r\n onBeforeValidateToken,\r\n onTokenValidationFail,\r\n onTokenValidationSuccess,\r\n sessionManager,\r\n ]);\r\n\r\n useEffect(() => {\r\n // if user was previously using Copilot chat, open it again\r\n sessionManager.getSessionInfo().then((sInfo) => {\r\n if (sInfo != null) {\r\n const { isOpen, token: oldToken } = sInfo;\r\n setToken(null);\r\n logger?.trace(`[Copilot][useDirectLineTokenRestoration] isOpen=${isOpen}, oldToken.length=${oldToken?.length}`);\r\n\r\n if (isOpen && !_.isEmpty(oldToken)) {\r\n // validate the token in the cookie\r\n validateTokenInCookie(oldToken).then(() => {\r\n logger?.trace('[Copilot][useDirectLineTokenRestoration] old token is valid, restoring earlier session...');\r\n isRestoringSession.current = true;\r\n // open copilot panel only if the token is valid\r\n onCopilotModeChange({ mode: 'expanded' });\r\n }).catch((err) => {\r\n logger?.trace(`[Copilot][useDirectLineTokenRestoration] oldToken is not valid: ${err}`);\r\n });\r\n }\r\n }\r\n });\r\n }, [validateTokenInCookie, onCopilotModeChange, sessionManager, logger]);\r\n\r\n const forceRefreshToken = useCallback(() => {\r\n setToken(null);\r\n setError(null);\r\n if (mode === 'expanded') {\r\n sessionManager.getSessionInfo().then((sInfo) => {\r\n const oldToken = sInfo && sInfo.token;\r\n if (oldToken && oldToken.length > 0) {\r\n validateTokenInCookie(oldToken).catch(() => {\r\n fetchTokenFromBotMT();\r\n });\r\n } else {\r\n fetchTokenFromBotMT();\r\n }\r\n });\r\n }\r\n }, [fetchTokenFromBotMT, mode, sessionManager, validateTokenInCookie]);\r\n\r\n useEffect(() => {\r\n // The flag is true when restoring token from cookie, for this case we do not need to validate and refresh the token\r\n if (isRestoringSession.current) {\r\n isRestoringSession.current = false;\r\n return;\r\n }\r\n forceRefreshToken();\r\n }, [mode, sessionManager, forceRefreshToken]);\r\n\r\n return { token, error, forceRefreshToken };\r\n};\r\n\r\ninterface IUseConversationTokenStorageOptions {\r\n sessionManager: ISessionManager;\r\n refreshTime?: number;\r\n onConnectionStatusChange?: IAdsCopilotProps['onConnectionStatusChange'];\r\n onInitDirectLine?: IAdsCopilotProps['onInitDirectLine'];\r\n}\r\n\r\nexport const useConversationTokenStorage = ({\r\n sessionManager,\r\n refreshTime = DEFAULT_REFRESH_TIME,\r\n onConnectionStatusChange,\r\n onInitDirectLine,\r\n}: IUseConversationTokenStorageOptions) => {\r\n const refreshTokenIntervalRef = useRef | null>(null);\r\n const dlRef = useRef(null);\r\n\r\n const saveTokenToCookie = useCallback(() => {\r\n if (dlRef.current && document.visibilityState === 'visible') {\r\n const { token } = dlRef.current as any;\r\n sessionManager.saveSessionInfo({ token });\r\n }\r\n }, [sessionManager]);\r\n\r\n const clearIntervalAndEventHandler = useCallback(() => {\r\n if (refreshTokenIntervalRef.current) {\r\n clearInterval(refreshTokenIntervalRef.current);\r\n }\r\n refreshTokenIntervalRef.current = null;\r\n document.removeEventListener('visibilitychange', saveTokenToCookie);\r\n }, [saveTokenToCookie]);\r\n\r\n const finalOnConnectionStatusChange = useCallback>((status) => {\r\n if (onConnectionStatusChange) {\r\n onConnectionStatusChange(status);\r\n }\r\n\r\n if (status === 2) { // Online\r\n clearIntervalAndEventHandler();\r\n document.addEventListener('visibilitychange', saveTokenToCookie);\r\n saveTokenToCookie();\r\n refreshTokenIntervalRef.current = setInterval(() => {\r\n saveTokenToCookie();\r\n }, refreshTime);\r\n } else if ((status === 3 || status === 4 || status === 5) && refreshTokenIntervalRef.current) { // Ended or expired token\r\n clearIntervalAndEventHandler();\r\n refreshTokenIntervalRef.current = null;\r\n }\r\n }, [clearIntervalAndEventHandler, onConnectionStatusChange, refreshTime, saveTokenToCookie]);\r\n\r\n const finalOnInitDirectLine = useCallback>((dl, userId, userName) => {\r\n if (onInitDirectLine) {\r\n onInitDirectLine(dl, userId, userName);\r\n }\r\n dlRef.current = dl;\r\n }, [onInitDirectLine]);\r\n\r\n return {\r\n onConnectionStatusChange: finalOnConnectionStatusChange,\r\n onInitDirectLine: finalOnInitDirectLine,\r\n };\r\n};\r\n\r\nexport const useConversationRestoration = (params: IUseDirectLineTokenRestorationOptions & IUseConversationTokenStorageOptions) => {\r\n const { token, error, forceRefreshToken } = useDirectLineTokenRestoration(params);\r\n const {\r\n onConnectionStatusChange,\r\n onInitDirectLine,\r\n } = useConversationTokenStorage(params);\r\n\r\n return {\r\n token,\r\n error,\r\n forceRefreshToken,\r\n onConnectionStatusChange,\r\n onInitDirectLine,\r\n };\r\n};\r\n\r\nexport const useCookieSessionManager = ({\r\n domain,\r\n sessionInfoKey,\r\n onClearSessionInfo,\r\n onSaveSessionInfo,\r\n onGetSessionInfo,\r\n}: ICookieSessionManagerOptions) => {\r\n const cookieSessionManager = useMemo(() => new CookieSessionManager({\r\n domain,\r\n sessionInfoKey,\r\n onClearSessionInfo,\r\n onSaveSessionInfo,\r\n onGetSessionInfo,\r\n }), [domain, sessionInfoKey, onClearSessionInfo, onSaveSessionInfo, onGetSessionInfo]);\r\n\r\n return cookieSessionManager;\r\n};\r\n\r\nexport const useConversationRestorationWithCookie = (params: Omit & ICookieSessionManagerOptions) => {\r\n const sessionManager = useCookieSessionManager(params);\r\n const result = useConversationRestoration({\r\n ...params,\r\n sessionManager,\r\n });\r\n\r\n return result;\r\n};\r\n","import { ConversationProps } from '../../types';\r\n\r\n// NOTE: This logic will be replaced once the MT side API is finished\r\n\r\nconst key = 'conversationData';\r\n\r\nconst saveConversation = (conversationToken: string, title: string) => {\r\n const newConversation = {\r\n id: conversationToken,\r\n title,\r\n date: new Date(Date.now()),\r\n };\r\n\r\n const existingConversations: ConversationProps = (() => {\r\n try {\r\n return JSON.parse(sessionStorage.getItem(key) || '[]') as ConversationProps;\r\n } catch {\r\n return [];\r\n }\r\n })();\r\n\r\n // Check if the conversation already exists based on the id\r\n const isConversationExists = existingConversations.some(\r\n (conversation) => conversation.id === newConversation.id,\r\n );\r\n\r\n // Add the new conversation to the array if it doesn't already exist\r\n if (!isConversationExists) {\r\n existingConversations.push(newConversation);\r\n }\r\n\r\n // Save the updated array back to sessionStorage\r\n window.sessionStorage.setItem('conversationData', JSON.stringify(existingConversations));\r\n};\r\n\r\nexport default saveConversation;\r\n","import React, {\r\n useState, useEffect, useMemo, useRef, FC, memo, useCallback,\r\n} from 'react';\r\nimport { ConnectionStatus, type DirectLine } from 'botframework-directlinejs';\r\nimport { DirectLineContext, type IDirectLineContextValue } from './direct-line-context';\r\nimport { type IAdsCopilotDirectLine, type DirectLineProviderProps } from '../../types';\r\nimport { AdsCopilotDirectLine } from './ads-copilot-direct-line';\r\nimport { IDirectLineError } from '../../botTypes';\r\nimport { defaultFetchDirectLineChannelToken } from '../../hooks/use-conversation-restoration';\r\nimport { useAdsCopilotContext } from '../ads-copilot-context-provider';\r\nimport saveConversation from './chat-history-direct-line';\r\n\r\nexport const DirectLineProvider: FC = memo((props) => {\r\n const [directLine, setDirectLine] = useState();\r\n const {\r\n endpoint,\r\n tokenApi = '/api/token',\r\n authToken = '',\r\n userid,\r\n username,\r\n token,\r\n onInitDirectLine,\r\n onConnectionStatusChange,\r\n children,\r\n fetchToken: fetchDirectLineChannelToken = defaultFetchDirectLineChannelToken,\r\n sesId = 0,\r\n productName,\r\n DirectLineClass = AdsCopilotDirectLine,\r\n fetchOAuthToken,\r\n renderErrorView,\r\n renderCustomErrorView,\r\n customStream,\r\n resetConversation,\r\n isChatHistoryEnabled,\r\n isMarketingIntegrationEnabled = false,\r\n conversationTitle = '',\r\n existingToken = useRef(null),\r\n logger,\r\n } = props;\r\n const activitySubscriber = useRef | null>(null);\r\n const onInitDirectLineRef = useRef(onInitDirectLine);\r\n const userIdRef = useRef(userid);\r\n const [error, setError] = useState(null);\r\n\r\n const adsCopilotContext = useAdsCopilotContext();\r\n\r\n const initDirectLine = useCallback((directLineInstance: AdsCopilotDirectLine, userIdValue: string, userNameValue: string) => {\r\n if (onInitDirectLineRef.current) {\r\n onInitDirectLineRef.current(directLineInstance, userIdValue, userNameValue);\r\n }\r\n setDirectLine(directLineInstance);\r\n\r\n adsCopilotContext?.onDirectLineCreated(directLineInstance, userNameValue, logger);\r\n }, [adsCopilotContext?.onDirectLineCreated]);\r\n\r\n useEffect(() => {\r\n setDirectLine(undefined);\r\n setError(null);\r\n let dl: IAdsCopilotDirectLine | null;\r\n\r\n let oAuthTokenPromise: Promise<{ token?: string | null | undefined }>;\r\n if (token && sesId === 0) {\r\n // If there is directline token passed from parent, we do not need to use oauth token to fetch directline token again\r\n oAuthTokenPromise = Promise.resolve({ token: '' });\r\n } else if (fetchOAuthToken) {\r\n oAuthTokenPromise = fetchOAuthToken();\r\n } else {\r\n oAuthTokenPromise = Promise.resolve({ token: authToken });\r\n }\r\n\r\n if (customStream) {\r\n // custom stream, initialize directline without token\r\n logger?.trace('[Copilot][CreateDirectLine] Initializing with custom stream');\r\n dl = new DirectLineClass({\r\n isCustomStream: true,\r\n userId: userIdRef.current,\r\n username,\r\n token: existingToken.current || '',\r\n });\r\n dl.activity$ = customStream;\r\n initDirectLine(dl as AdsCopilotDirectLine, userIdRef.current, username);\r\n } else if (!resetConversation?.current && existingToken.current) {\r\n // create a directline instance with existing conversation token\r\n logger?.trace(`[Copilot][CreateDirectLine] Initializing with existing directline token, existingToken.current.length=${existingToken.current.length}`);\r\n dl = new DirectLineClass({\r\n token: existingToken.current,\r\n userId: userIdRef.current,\r\n username,\r\n });\r\n initDirectLine(dl as AdsCopilotDirectLine, userIdRef.current, username);\r\n } else {\r\n if (isChatHistoryEnabled && existingToken.current) {\r\n saveConversation(existingToken.current, conversationTitle);\r\n }\r\n oAuthTokenPromise.then(({ token: oAuthToken }) => {\r\n if (token && sesId === 0) {\r\n // use token passed from parent component only for the initial bootstrapping\r\n logger?.trace(`[Copilot][CreateDirectLine] Bootstrapping with directline token passed from parent, token.length=${token.length}`);\r\n return Promise.resolve({ token, userid });\r\n }\r\n // fetching new conversation token to initialize new conversation\r\n logger?.trace(`[Copilot][CreateDirectLine] Exchanging OAuth token for new directline token, oAuthToken.length=${oAuthToken?.length}`);\r\n return fetchDirectLineChannelToken({\r\n endpoint, tokenApi: tokenApi!, authToken: oAuthToken, userid, username, isMarketingIntegrationEnabled,\r\n });\r\n }).then(({ token: fetchedToken, userid: fetchedUserId }) => {\r\n // create a directline instance with the fetched token\r\n dl = new DirectLineClass({\r\n token: fetchedToken,\r\n userId: userIdRef.current,\r\n username,\r\n });\r\n existingToken.current = fetchedToken;\r\n userIdRef.current = fetchedUserId;\r\n if (resetConversation) {\r\n resetConversation.current = false;\r\n }\r\n initDirectLine(dl as AdsCopilotDirectLine, fetchedUserId, username);\r\n }).catch((err) => {\r\n logger?.trace(`[Copilot][CreateDirectLine] Error initializing DirectLine: ${err instanceof Error ? err : JSON.stringify(err)}`);\r\n setError({ message: 'fetchTokenError' });\r\n });\r\n }\r\n\r\n return () => {\r\n dl = null;\r\n };\r\n }, [\r\n authToken,\r\n customStream,\r\n DirectLineClass,\r\n endpoint,\r\n fetchDirectLineChannelToken,\r\n fetchOAuthToken,\r\n initDirectLine,\r\n logger,\r\n productName,\r\n resetConversation,\r\n sesId,\r\n token,\r\n tokenApi,\r\n username,\r\n ]);\r\n\r\n // listen for connection status changes\r\n useEffect(() => {\r\n activitySubscriber.current?.unsubscribe();\r\n if (directLine) {\r\n activitySubscriber.current = directLine.connectionStatus$.subscribe((status) => {\r\n onConnectionStatusChange?.(status);\r\n\r\n if (status === ConnectionStatus.ExpiredToken) {\r\n setError({ message: 'directLineExpiredToken' });\r\n } else if (status === ConnectionStatus.FailedToConnect) {\r\n setError({ message: 'directLineChannelError' });\r\n }\r\n });\r\n }\r\n\r\n return () => {\r\n activitySubscriber.current?.unsubscribe();\r\n };\r\n }, [directLine, onConnectionStatusChange]);\r\n\r\n const context = useMemo(() => ({\r\n userid: userIdRef.current,\r\n username,\r\n endpoint,\r\n directLine,\r\n productName,\r\n isCustomStream: directLine?.isCustomStream || false,\r\n }), [directLine, endpoint, productName, username]);\r\n\r\n if (!context.isCustomStream && renderCustomErrorView) {\r\n return renderCustomErrorView();\r\n }\r\n\r\n if (error && renderErrorView != null) {\r\n return renderErrorView(error);\r\n }\r\n\r\n if (directLine) {\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n }\r\n return null;\r\n});\r\n","import React, {\r\n useCallback, useContext, useEffect, useRef, FC, memo, useMemo,\r\n} from 'react';\r\nimport { Textarea, TextareaValueData } from '@fluentai/textarea';\r\nimport { mergeClasses } from '@fluentui/react-components';\r\nimport { I18nContext, I18nModel } from '@bingads-webui/copilot-i18n';\r\n\r\nexport interface IChatInputProps {\r\n sendDisabled?: boolean;\r\n inputDisabled?: boolean;\r\n className?: string;\r\n maxLength?: number;\r\n value: string;\r\n onChange(_ev: any, { value }: TextareaValueData): void;\r\n postMessage(_evt: any, { value }: TextareaValueData): void;\r\n}\r\n\r\nexport const ChatInput: FC = memo((props) => {\r\n const {\r\n className,\r\n maxLength,\r\n value,\r\n inputDisabled,\r\n sendDisabled,\r\n onChange,\r\n postMessage,\r\n } = props;\r\n const textAreaRef = useRef(null);\r\n\r\n const i18n = useContext(I18nContext) as I18nModel;\r\n\r\n useEffect(() => {\r\n textAreaRef.current?.focus();\r\n }, [sendDisabled]);\r\n\r\n const hotKeyHandler = useCallback((evt: React.KeyboardEvent) => {\r\n if (evt.key === 'Enter' && !evt.shiftKey && value.trim().length > 0 && !sendDisabled) {\r\n postMessage(null, { value });\r\n }\r\n }, [postMessage, value]);\r\n\r\n const sendButtonProps = useMemo(() => ({\r\n disabled: sendDisabled || value.trim().length === 0,\r\n }), [sendDisabled, value]);\r\n\r\n const onSubmit = useCallback((_evt: any, { value: message }: TextareaValueData): void => {\r\n postMessage(_evt, { value: message });\r\n }, [postMessage]);\r\n\r\n return (\r\n \r\n );\r\n});\r\n\r\nChatInput.defaultProps = {\r\n inputDisabled: undefined,\r\n sendDisabled: undefined,\r\n className: '',\r\n maxLength: 500,\r\n};\r\n","import React, { FC, memo, useCallback } from 'react';\r\nimport { makeStyles, mergeClasses, tokens } from '@fluentui/react-components';\r\nimport { Suggestion, SuggestionList } from '@fluentai/suggestions';\r\n\r\nconst useChatSuggestionStyles = makeStyles({\r\n suggestionList: {\r\n marginTop: tokens.spacingVerticalL,\r\n },\r\n suggestion: {\r\n backgroundColor: tokens.colorTransparentBackground,\r\n whiteSpace: 'nowrap',\r\n textOverflow: 'ellipsis',\r\n justifyContent: 'left',\r\n display: 'inline-block',\r\n },\r\n});\r\n\r\nexport interface IChatSuggestion {\r\n Text: string;\r\n Id: string;\r\n}\r\n\r\ninterface IChatSuggestionListProps {\r\n chatSuggestions?: IChatSuggestion[];\r\n onClickChatSuggestion: (chatSuggestion: IChatSuggestion) => void;\r\n}\r\n\r\nexport const ChatSuggestionList: FC = memo(({\r\n chatSuggestions = [],\r\n onClickChatSuggestion,\r\n}) => {\r\n const styles = useChatSuggestionStyles();\r\n\r\n const onClick = useCallback((chatSuggestion: IChatSuggestion) => {\r\n onClickChatSuggestion(chatSuggestion);\r\n }, [onClickChatSuggestion]);\r\n\r\n return (\r\n \r\n {chatSuggestions?.map((chatSuggestion) => (\r\n onClick(chatSuggestion)}\r\n >\r\n \r\n {chatSuggestion.Text}\r\n \r\n \r\n ))}\r\n \r\n );\r\n});\r\n\r\nChatSuggestionList.defaultProps = {\r\n chatSuggestions: undefined,\r\n onClickChatSuggestion: undefined,\r\n};\r\n","import { makeStyles, tokens } from '@fluentui/react-components';\r\n\r\nexport const useConversationsListStyles = makeStyles({\r\n provider: {\r\n height: '100%',\r\n },\r\n wrapper: {\r\n height: '100%',\r\n },\r\n root: {\r\n height: '100%',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n backgroundColor: tokens.colorNeutralBackground2,\r\n borderLeftWidth: '1px',\r\n borderLeftStyle: 'solid',\r\n borderLeftColor: tokens.colorNeutralStroke1,\r\n paddingTop: tokens.spacingVerticalL,\r\n paddingBottom: tokens.spacingVerticalL,\r\n paddingLeft: tokens.spacingHorizontalL,\r\n paddingRight: tokens.spacingHorizontalL,\r\n marginTop: tokens.spacingVerticalS,\r\n marginBottom: tokens.spacingVerticalS,\r\n marginLeft: tokens.spacingHorizontalS,\r\n marginRight: tokens.spacingHorizontalS,\r\n },\r\n header: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n marginBottom: tokens.spacingVerticalL,\r\n },\r\n title: {\r\n marginLeft: tokens.spacingHorizontalS,\r\n fontSize: tokens.fontSizeBase300,\r\n color: tokens.colorNeutralForeground1,\r\n },\r\n button: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'flex-start',\r\n textAlign: 'left',\r\n paddingTop: tokens.spacingVerticalM,\r\n paddingBottom: tokens.spacingVerticalM,\r\n paddingRight: tokens.spacingHorizontalM,\r\n paddingLeft: tokens.spacingHorizontalM,\r\n backgroundColor: tokens.colorNeutralBackground1Hover,\r\n },\r\n date: {\r\n fontSize: tokens.fontSizeBase200,\r\n color: tokens.colorNeutralForeground2,\r\n },\r\n});\r\n","import _ from 'underscore';\r\nimport React, {\r\n FC, memo, useContext, useMemo,\r\n} from 'react';\r\nimport { ArrowLeft16Regular } from '@fluentui/react-icons';\r\nimport { I18nContext, I18nModel } from '@bingads-webui/copilot-i18n';\r\nimport { Button } from '@fluentui/react-components';\r\nimport { ConversationListProps } from '../../types';\r\nimport { useConversationsListStyles } from './use-conversations-list-styles';\r\n\r\nexport const ConversationsList: FC = memo((props) => {\r\n const { conversationsList: propConversationsList, onClose, onResetConversation } = props;\r\n const styles = useConversationsListStyles();\r\n const i18n = useContext(I18nContext) as I18nModel;\r\n\r\n const conversationsList = useMemo(() => {\r\n let existingConversations: ConversationListProps['conversationsList'] = [];\r\n const sessionData = sessionStorage.getItem('conversationData');\r\n\r\n try {\r\n if (sessionData) {\r\n existingConversations = JSON.parse(sessionData);\r\n if (!_.isArray(existingConversations)) {\r\n throw new Error('Invalid conversation data format in session storage.');\r\n }\r\n }\r\n } catch (error) {\r\n existingConversations = [];\r\n }\r\n return propConversationsList || existingConversations || [];\r\n }, [propConversationsList]);\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {conversationsList?.map(({ id, title, date }) => (\r\n onResetConversation?.(id)}\r\n >\r\n {title || i18n.getString(_TL_('Untitled'))}\r\n {new Date(date).toLocaleString()}\r\n \r\n ))}\r\n
\r\n );\r\n});\r\n","import React, {\r\n memo, useEffect, useRef,\r\n type RefObject,\r\n} from 'react';\r\nimport {\r\n makeStyles, mergeClasses, shorthands, tokens,\r\n} from '@fluentui/react-components';\r\n\r\nconst THRESHOLD = 16;\r\n\r\nconst useConverstationContainerStyles = makeStyles({\r\n container: {\r\n ...shorthands.flex(1),\r\n marginBottom: tokens.spacingVerticalL,\r\n overflowX: 'hidden',\r\n overflowY: 'auto',\r\n scrollBehavior: 'auto',\r\n position: 'relative',\r\n },\r\n contentContainer: {\r\n maxWidth: '652px',\r\n justifySelf: 'center',\r\n width: '100%',\r\n },\r\n});\r\n\r\ninterface IAutoScrollerProps {\r\n children: React.ReactNode;\r\n autoScrollContainerRef: RefObject\r\n className?: string;\r\n style?: React.CSSProperties;\r\n}\r\n\r\n/**\r\n * `AutoScroller` helps to scroll to the bottom of the wrapped child container when addition of new child element\r\n * is detected inside the container refed by autoScrollContainerRef.\r\n *\r\n * **Why autoScrollContainerRef is needed?**\r\n * There might be a case where the container needs to observed for any new child element addition is different or\r\n * a part of a larger container that needs to be scrolled to the bottom.\r\n * For such cases, autoScrollContainerRef is needed.\r\n *\r\n * **Example:**\r\n * In the below code, the component to be observed is the `content` div which is refed by `autoScrollContainerRef`,\r\n * Whereas the `parent` div is the container that needs to be scrolled to the bottom as a whole.\r\n *\r\n * ```tsx\r\n * const autoScrollContainerRef = useRef(null);\r\n *\r\n * \r\n *
\r\n *
\r\n * // contains some predefined cards to be shown\r\n *
\r\n *
\r\n * // here content will be added dynamically and need to be observed\r\n * // **Note:** This container should have bottom padding/margin <= 8px as the area considered for\r\n * // new element addition is 16px (threshold) from the bottom of the content container\r\n *
\r\n *
\r\n * // contains some predefined footer content having loader, links, buttons, etc\r\n *
\r\n *
\r\n *
\r\n * ```\r\n *\r\n * @param props - Props for the AutoScroller component\r\n * - `children` - ReactNode - The children to be rendered inside the AutoScroller\r\n * - `autoScrollContainerRef` - RefObject - The ref of the container to be\r\n * observed for new child element addition\r\n * - `className` - string - (optional) The class name to be applied to the `AutoScroller` container\r\n * - `style` - React.CSSProperties - (optional) The style object to be applied to the `AutoScroller` container\r\n * @returns JSX.Element\r\n *\r\n */\r\n\r\nexport const AutoScroller = memo((props: IAutoScrollerProps) => {\r\n const {\r\n children, autoScrollContainerRef, className = '', style = {},\r\n } = props;\r\n\r\n const styles = useConverstationContainerStyles();\r\n const containerRef = useRef(null);\r\n\r\n useEffect(() => {\r\n let observer: MutationObserver;\r\n const containerEl = containerRef.current;\r\n const autoScrollContainer = autoScrollContainerRef.current;\r\n\r\n if (containerEl && autoScrollContainer) {\r\n observer = new MutationObserver((mutationList) => {\r\n const isScrollbarVisible = containerEl.scrollHeight > containerEl.offsetHeight;\r\n containerEl.classList.toggle('scrollbar-visible', isScrollbarVisible);\r\n containerEl.classList.toggle('scrollbar-hidden', !isScrollbarVisible);\r\n\r\n const autoScrollContainerBoundary = autoScrollContainer.getBoundingClientRect();\r\n const lastMutatedEl = mutationList.find((mutation) => {\r\n if (mutation.type !== 'childList') return false;\r\n const childEl = mutation.target as HTMLElement;\r\n const childBoundary = childEl.getBoundingClientRect();\r\n return autoScrollContainerBoundary.bottom - childBoundary.bottom <= THRESHOLD;\r\n });\r\n\r\n if (lastMutatedEl) {\r\n containerEl.scrollTo({\r\n top: containerEl.scrollHeight,\r\n behavior: 'auto',\r\n });\r\n }\r\n });\r\n\r\n observer.observe(containerEl, { childList: true, subtree: true });\r\n }\r\n\r\n return () => {\r\n observer?.disconnect();\r\n };\r\n }, []);\r\n\r\n return (\r\n \r\n
\r\n {children}\r\n
\r\n \r\n );\r\n});\r\n","import React, { useContext } from 'react';\r\nimport {\r\n Text,\r\n makeStyles,\r\n mergeClasses,\r\n tokens,\r\n} from '@fluentui/react-components';\r\nimport { AnimationCard, Message } from 'botframework-directlinejs';\r\nimport { Checkmark20Filled } from '@fluentui/react-icons';\r\nimport { I18nContext, I18nModel } from '@bingads-webui/copilot-i18n';\r\n\r\nexport const useLoadingIntentStyles = makeStyles({\r\n loadingIntentContent: {\r\n fontSize: tokens.fontSizeBase200,\r\n textAlign: 'center',\r\n width: '100%',\r\n display: 'flex',\r\n paddingTop: tokens.spacingVerticalM,\r\n },\r\n loadingIntentText: {\r\n marginLeft: tokens.spacingVerticalSNudge,\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n overflowX: 'hidden',\r\n fontWeight: 600,\r\n },\r\n});\r\n\r\nexport const LoadingIntent: React.FC<{ activity: Message }> = ({ activity }) => {\r\n const i18n = useContext(I18nContext) as I18nModel;\r\n const styles = useLoadingIntentStyles();\r\n\r\n const { attachments } = (activity as Message);\r\n\r\n return attachments?.map((attachment, index) => {\r\n const animationCard = attachment as AnimationCard;\r\n\r\n if (animationCard.content.text !== 'GeneratingAnswers') {\r\n return null;\r\n }\r\n\r\n return (\r\n // eslint-disable-next-line react/no-array-index-key\r\n
\r\n \r\n {i18n.getString(_TL_('Generating answers for you...'))}\r\n
\r\n );\r\n });\r\n};\r\n","import { makeStyles, tokens } from '@fluentui/react-components';\r\n\r\nexport const useStaticMessageStyles = makeStyles({\r\n startOver: {\r\n fontWeight: tokens.fontWeightRegular,\r\n fontSize: tokens.fontSizeBase200,\r\n lineHeight: tokens.lineHeightBase200,\r\n position: 'absolute',\r\n top: tokens.spacingVerticalXS,\r\n paddingTop: tokens.spacingVerticalXXS,\r\n paddingBottom: tokens.spacingVerticalXXS,\r\n paddingRight: tokens.spacingHorizontalS,\r\n paddingLeft: tokens.spacingHorizontalS,\r\n zIndex: 1,\r\n },\r\n root: {\r\n '&.ResponsibleAI .start-over-btn': {\r\n position: 'static',\r\n marginTop: tokens.spacingVerticalXS,\r\n },\r\n },\r\n});\r\n","import { StaticMessageType } from '../../botTypes';\r\n\r\nexport const COMMON_ERR_MSG = _TL_('Sorry, something went wrong. Please try again.');\r\nconst COMMON_ERR = {\r\n showReferences: false,\r\n showStartOverBtn: true,\r\n showFeedback: true,\r\n msg: [COMMON_ERR_MSG],\r\n};\r\n\r\nexport interface IStaticMessageDisplayConfig {\r\n showReferences: boolean;\r\n showStartOverBtn: boolean;\r\n showFeedback: boolean;\r\n msg: string[];\r\n}\r\n\r\nexport const DEFAULT_DISPLAY_CONFIG: Record = {\r\n ResponsibleAI: {\r\n showReferences: false,\r\n showStartOverBtn: false,\r\n showFeedback: false,\r\n msg: [\r\n _TL_('Sorry, I\\'m not able to help with that. I can answer questions about Microsoft Advertising, such as:'),\r\n _TL_('{{pointPlaceholder}}How do I get ad campaigns up and running?'),\r\n _TL_('{{pointPlaceholder}}How can I get my ads in front of customers? '),\r\n _TL_('{{pointPlaceholder}}What are my billing options?'),\r\n ],\r\n },\r\n OutofScope: {\r\n showReferences: false,\r\n showStartOverBtn: false,\r\n showFeedback: true,\r\n msg: [\r\n _TL_('Sorry, I\\'m not able to help with that. I can answer questions about Microsoft Advertising, such as:'),\r\n _TL_('{{pointPlaceholder}}How do I get ad campaigns up and running?'),\r\n _TL_('{{pointPlaceholder}}How can I get my ads in front of customers? '),\r\n _TL_('{{pointPlaceholder}}What are my billing options?'),\r\n _TL_('\\n'),\r\n _TL_('Please feel free to ask Microsoft Bing Chat (Bing.com) any other questions you may have.'),\r\n ],\r\n },\r\n Welcome: {\r\n showReferences: false,\r\n showStartOverBtn: false,\r\n showFeedback: false,\r\n msg: [\r\n _TL_('Hello, how can I help you today?'),\r\n\r\n ],\r\n },\r\n TokenExpiredAutoReload: {\r\n showReferences: false,\r\n showStartOverBtn: false,\r\n showFeedback: false,\r\n msg: [_TL_('Hi, welcome back! Your previous session expired due to inactivity but we have started a new session for you.')],\r\n },\r\n ConnectToAgent: {\r\n showReferences: false,\r\n showStartOverBtn: false,\r\n showFeedback: false,\r\n msg: ['PLACEHOLDER_FOR_CONNECT_TO_AGENT'],\r\n },\r\n SignInError: {\r\n showReferences: false,\r\n showStartOverBtn: false,\r\n showFeedback: true,\r\n msg: [_TL_('Sign in error')],\r\n },\r\n InternalError: COMMON_ERR,\r\n LargePayload: COMMON_ERR,\r\n MissingArgumentsInPayload: COMMON_ERR,\r\n StreamingCancelled: COMMON_ERR,\r\n EmptyReplyToIdToCancelStreaming: COMMON_ERR,\r\n NoDataAvailable: COMMON_ERR,\r\n StreamingCompleted: COMMON_ERR,\r\n TurnLimitReached: {\r\n showReferences: false,\r\n showStartOverBtn: true,\r\n showFeedback: true,\r\n msg: [_TL_('Chat limit reached. Start a new chat to continue. Chat history will be lost after resuming, so copy and save important information.')],\r\n },\r\n TokenExpired: {\r\n showReferences: false,\r\n showStartOverBtn: true,\r\n showFeedback: true,\r\n msg: [_TL_('The conversation is expired. Start a new chat to continue. Chat history will be lost after resuming, so copy and save important information.')],\r\n },\r\n ConversationExpired: {\r\n showReferences: false,\r\n showStartOverBtn: true,\r\n showFeedback: true,\r\n msg: [_TL_('The conversation is expired. Start a new chat to continue. Chat history will be lost after resuming, so copy and save important information.')],\r\n },\r\n Timeout: {\r\n showReferences: false,\r\n showStartOverBtn: false,\r\n showFeedback: true,\r\n msg: [COMMON_ERR_MSG],\r\n },\r\n HandoffMessage: {\r\n showReferences: false,\r\n showStartOverBtn: false,\r\n showFeedback: false,\r\n msg: [_TL_('Would you like to chat with a Microsoft Advertising Expert? Please describe your issue or question first.')],\r\n },\r\n ConversationResume: {\r\n showReferences: false,\r\n showStartOverBtn: false,\r\n showFeedback: false,\r\n msg: [_TL_('Welcome back to Copilot! How can I help?')],\r\n },\r\n InvalidPayload: COMMON_ERR,\r\n SydneyResponsibleAI: {\r\n showReferences: false,\r\n showStartOverBtn: true,\r\n showFeedback: false,\r\n msg: [_TL_('Sorry, I\\'m not able to help with that. Please initiate a new conversation.')],\r\n },\r\n};\r\n","import _ from 'underscore';\r\nimport React, { useCallback, useContext, useMemo } from 'react';\r\nimport { Message } from 'botframework-directlinejs';\r\nimport { ChatAdd24Regular } from '@fluentui/react-icons';\r\nimport { Button, mergeClasses } from '@fluentui/react-components';\r\nimport { I18nModel, I18nContext } from '@bingads-webui/copilot-i18n';\r\n\r\nimport { StaticMessageType } from '../../botTypes';\r\nimport { AIMessage, IAIMessage } from '../message';\r\nimport { useStaticMessageStyles } from './use-static-message-styles';\r\nimport { COMMON_ERR_MSG, DEFAULT_DISPLAY_CONFIG } from './static-message-config';\r\n\r\n// Static messages types that will not be shown to users\r\nconst IgnoredStaticMessageTypes: StaticMessageType[] = [\r\n 'StreamingCancelled',\r\n 'EmptyReplyToIdToCancelStreaming',\r\n 'NoDataAvailable',\r\n 'StreamingCompleted',\r\n];\r\n\r\nexport interface IStaticMessageProps {\r\n activity: Message;\r\n onClickStartOver?(staticMessage: StaticMessageType, activity: Message): void;\r\n onFeedbackButtonClick?: IAIMessage['onFeedbackButtonClick'];\r\n onReferenceClick?(url: string): void;\r\n isWelcomeMessageEnabled?: boolean;\r\n}\r\n\r\nexport const StaticMessage: React.FC = React.memo(({\r\n activity,\r\n onClickStartOver,\r\n onFeedbackButtonClick,\r\n onReferenceClick,\r\n isWelcomeMessageEnabled = true,\r\n}) => {\r\n const styles = useStaticMessageStyles();\r\n const i18n = useContext(I18nContext) as I18nModel;\r\n const staticMessageType = (activity.value as any) as StaticMessageType;\r\n const config = DEFAULT_DISPLAY_CONFIG[staticMessageType];\r\n\r\n const activityWithText = useMemo(() => {\r\n const text = config ? _.map(config.msg, (m) => i18n.getString(m, { pointPlaceholder: '- ' })).join('\\n') : i18n.getString(COMMON_ERR_MSG);\r\n\r\n // replace the fixed text of the staticmessage with helpful error message\r\n return {\r\n ...activity,\r\n text,\r\n };\r\n }, [activity, config, i18n]);\r\n\r\n const onClickHandler = useCallback(() => {\r\n onClickStartOver?.(staticMessageType, activity);\r\n }, [activity, onClickStartOver, staticMessageType]);\r\n\r\n const startOverBtn = config?.showStartOverBtn ? (\r\n \r\n ) : null;\r\n\r\n if (_.contains(IgnoredStaticMessageTypes, staticMessageType)) {\r\n return null;\r\n }\r\n\r\n if (!isWelcomeMessageEnabled && staticMessageType === 'Welcome') {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n );\r\n});\r\n","import React, { useCallback } from 'react';\r\nimport { Message } from 'botframework-directlinejs';\r\n\r\nimport { StaticMessageType } from '../botTypes';\r\nimport { DefaultRenderActivity, RenderActivityParams, IAdsCopilotProps } from '../types';\r\nimport { isTypingMessage } from '../utils';\r\nimport { LoadingIntent } from '../LoadingIntent';\r\nimport { IStaticMessageProps, StaticMessage } from '../components/static-message';\r\n\r\nexport const errorMessageTypes: StaticMessageType[] = [\r\n 'ResponsibleAI',\r\n 'SignInError',\r\n 'InternalError',\r\n 'TurnLimitReached',\r\n 'TokenExpired',\r\n 'MissingArgumentsInPayload',\r\n 'LargePayload',\r\n 'Timeout',\r\n 'ConversationExpired',\r\n 'InvalidPayload',\r\n 'SydneyResponsibleAI',\r\n];\r\n\r\ntype UseStaticMessageParam = Pick & Pick;\r\n\r\nexport const useStaticMessage = ({\r\n isWelcomeMessageEnabled,\r\n onClickStartOver,\r\n onFeedbackButtonClick,\r\n renderActivity,\r\n}: UseStaticMessageParam) => {\r\n const defaultRenderStaticMessageActivity = useCallback((next: DefaultRenderActivity) => (activity: Message, params: RenderActivityParams) => {\r\n if (typeof activity?.value === 'string' && activity?.value === 'AnimationCard') {\r\n return ;\r\n }\r\n\r\n if (activity.text === 'StaticMessages') {\r\n if (isTypingMessage(activity)) {\r\n return null;\r\n }\r\n\r\n // render the static message\r\n return (\r\n \r\n );\r\n }\r\n\r\n // not a static message, pass the activity to the next renderer\r\n return next(activity, params);\r\n }, [onClickStartOver, onFeedbackButtonClick]);\r\n\r\n const finalRenderActivity = useCallback>((activity, params, next) => {\r\n if (renderActivity) {\r\n return renderActivity(activity, params, defaultRenderStaticMessageActivity(next));\r\n }\r\n\r\n return defaultRenderStaticMessageActivity(next)(activity, params);\r\n }, [defaultRenderStaticMessageActivity, renderActivity]);\r\n\r\n return {\r\n renderActivity: finalRenderActivity,\r\n };\r\n};\r\n","import React, { useState, useCallback } from 'react';\r\nimport _ from 'underscore';\r\nimport { v4 as uuidV4 } from 'uuid';\r\nimport { Activity } from 'botframework-directlinejs';\r\nimport { IAdsCopilotProps } from '../types';\r\nimport { IChatSuggestion, ChatSuggestionList } from '../ChatSuggestionList';\r\n\r\ninterface IUseChatSuggestionsProps {\r\n onReceiveActivity?: IAdsCopilotProps['onReceiveActivity'];\r\n isChatSuggestionsEnabled?: boolean;\r\n handleChatSuggestionClick?: (suggestionText: string) => void;\r\n}\r\n\r\nexport const extractChatSuggestionsFromActivity = (activity: any) => {\r\n const { QuestionSuggestions } = (_.get(activity, ['value']) || {}) as any;\r\n return QuestionSuggestions || [];\r\n};\r\n\r\nfunction shouldUpdateChatSuggestions(activity: Activity): boolean {\r\n if (activity.type === 'message') {\r\n return true;\r\n }\r\n\r\n if ((activity.type as any) === 'messageReaction') {\r\n // when receiving a reaction, keep the earlier chat suggestions\r\n return false;\r\n }\r\n\r\n if (activity.type === 'event') {\r\n if (activity.name === 'pluginResults') {\r\n // when receiving plugin results from summarize or fluctuations plugins, keep the earlier chat suggestions\r\n return false;\r\n }\r\n\r\n // by default, events will set chat suggestions to empty\r\n return true;\r\n }\r\n\r\n return true;\r\n}\r\n\r\nexport const useChatSuggestions = ({\r\n onReceiveActivity,\r\n handleChatSuggestionClick,\r\n isChatSuggestionsEnabled,\r\n}: IUseChatSuggestionsProps) => {\r\n const [chatSuggestions, setChatSuggestions] = useState([]);\r\n\r\n const onReceiveActivityWithChatSuggestions = useCallback>((activity, currentActivities, dl) => {\r\n if (isChatSuggestionsEnabled) {\r\n let suggestions: IChatSuggestion[] = [];\r\n const streamingStatus = _.get(activity as any, ['value', 'StreamingStatus']);\r\n if (streamingStatus === 'Completed') {\r\n suggestions = extractChatSuggestionsFromActivity(activity);\r\n suggestions = suggestions.map((suggestion) => ({\r\n ...suggestion,\r\n Id: uuidV4(),\r\n }));\r\n }\r\n if (shouldUpdateChatSuggestions(activity)) {\r\n setChatSuggestions(_.first(suggestions, 3));\r\n }\r\n }\r\n if (onReceiveActivity) {\r\n return onReceiveActivity(activity, currentActivities, dl);\r\n }\r\n return currentActivities;\r\n }, [onReceiveActivity]);\r\n\r\n const onClickChatSuggestion = useCallback((chatSuggestion: IChatSuggestion) => {\r\n handleChatSuggestionClick?.(chatSuggestion.Text);\r\n }, [handleChatSuggestionClick]);\r\n\r\n const renderChatSuggestionList = useCallback(() => {\r\n if (!isChatSuggestionsEnabled) {\r\n return null;\r\n }\r\n if (chatSuggestions?.length > 0) {\r\n return (\r\n \r\n );\r\n }\r\n return null;\r\n }, [chatSuggestions, isChatSuggestionsEnabled, onClickChatSuggestion]);\r\n\r\n return {\r\n onReceiveActivity: onReceiveActivityWithChatSuggestions,\r\n renderChatSuggestionList,\r\n };\r\n};\r\n","import { makeStyles, shorthands, tokens } from '@fluentui/react-components';\r\n\r\nexport const useAdsCopilotStyles = makeStyles({\r\n provider: {\r\n height: '100%',\r\n },\r\n wrapper: {\r\n height: '100%',\r\n },\r\n root: {\r\n height: '100%',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n backgroundColor: tokens.colorNeutralBackground2,\r\n borderLeftWidth: '1px',\r\n borderLeftStyle: 'solid',\r\n borderLeftColor: tokens.colorNeutralStroke1,\r\n '& .fai-Textarea': {\r\n alignSelf: 'center',\r\n maxWidth: '652px',\r\n width: '100%',\r\n '& .fai-Textarea__count': {\r\n position: 'absolute',\r\n bottom: tokens.spacingVerticalXXL,\r\n left: tokens.spacingVerticalM,\r\n },\r\n },\r\n },\r\n container: {\r\n ...shorthands.flex(1),\r\n width: '100%',\r\n alignSelf: 'center',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n paddingLeft: tokens.spacingHorizontalM,\r\n paddingRight: tokens.spacingHorizontalM,\r\n paddingTop: 0,\r\n paddingBottom: tokens.spacingHorizontalL,\r\n '& .scrollbar-hidden': {\r\n '& .ads-copilot-loading': {\r\n position: 'absolute',\r\n left: 0,\r\n right: 0,\r\n bottom: 0,\r\n },\r\n },\r\n },\r\n});\r\n","import _ from 'underscore';\r\nimport { Message } from 'botframework-directlinejs';\r\nimport { v4 as uuidV4 } from 'uuid';\r\nimport { BotServiceConfig } from '../../types';\r\nimport { IUserMessagePayload } from '../../botTypes';\r\nimport {\r\n EVENT_NAME_ENGAGE_TROUBLESHOOTER,\r\n CATEGORY_TROUBLESHOOTING,\r\n TROUBLESHOOTING_AD_DELIVERY,\r\n} from '../../utils';\r\n\r\ninterface ICreateMessageValueProps {\r\n locale: string | undefined,\r\n botServiceConfig: BotServiceConfig,\r\n isHiddenFromUser?: boolean,\r\n isTroubleshooting?: boolean,\r\n options?: object,\r\n additionalContext?: object,\r\n}\r\n\r\nfunction createMessageValue(props: ICreateMessageValueProps): IUserMessagePayload {\r\n const {\r\n locale,\r\n botServiceConfig,\r\n isHiddenFromUser,\r\n isTroubleshooting,\r\n options,\r\n additionalContext,\r\n } = props;\r\n\r\n const {\r\n accountId,\r\n botFlightMode,\r\n ccSmallToken,\r\n customerId,\r\n ianaTimeZone,\r\n productName,\r\n userid,\r\n } = botServiceConfig;\r\n\r\n const v: IUserMessagePayload = {\r\n QuestionId: uuidV4(),\r\n Locale: locale?.toLowerCase(),\r\n Product: productName,\r\n Timezone: ianaTimeZone,\r\n };\r\n\r\n if (botFlightMode) {\r\n v.BotFlightMode = botFlightMode;\r\n }\r\n\r\n // UxContext is used by AI plugins to make any additional requests on behalf of user\r\n v.UxContext = {\r\n CustomerId: customerId,\r\n AccountId: accountId,\r\n UserId: userid,\r\n AUTH_CCSmallToken: ccSmallToken,\r\n };\r\n\r\n if (isHiddenFromUser) {\r\n v.isHiddenFromUser = isHiddenFromUser;\r\n }\r\n\r\n if (isTroubleshooting) {\r\n v.Features = ['Troubleshooting'];\r\n }\r\n\r\n if (options) {\r\n v.options = options;\r\n }\r\n\r\n if (additionalContext) {\r\n // AdditionalContext is used to pass additional information to the bot\r\n // This parameter is consumed by both Bot MT and AI side\r\n // Today, it contains pilot value only\r\n v.AdditionalContext = {\r\n ...additionalContext,\r\n };\r\n }\r\n\r\n return v;\r\n}\r\n\r\n/**\r\n * Creates a user Message with the default \"from\" and \"value\" metadata.\r\n */\r\nexport function createMessage(\r\n text: string,\r\n options: {\r\n locale: string | undefined,\r\n botServiceConfig: BotServiceConfig,\r\n category?: string | undefined,\r\n isCustomStream?: boolean,\r\n isHiddenFromUser?: boolean,\r\n options?: object,\r\n additionalContext?: object,\r\n },\r\n): Message {\r\n const {\r\n locale, botServiceConfig, category, isCustomStream, isHiddenFromUser, options: additionalOptions, additionalContext,\r\n } = options;\r\n const { userid, username } = botServiceConfig;\r\n const isTroubleshooting = !isCustomStream && category === CATEGORY_TROUBLESHOOTING;\r\n\r\n const from = { id: userid, name: username };\r\n const value = createMessageValue({\r\n locale,\r\n botServiceConfig,\r\n isHiddenFromUser,\r\n isTroubleshooting,\r\n options: additionalOptions,\r\n additionalContext,\r\n });\r\n\r\n let message: Message = {\r\n type: 'message',\r\n from,\r\n text,\r\n value,\r\n };\r\n\r\n if (isTroubleshooting) {\r\n // send out troubleshooting trigger event\r\n message = _.defaults({\r\n type: 'event',\r\n name: EVENT_NAME_ENGAGE_TROUBLESHOOTER,\r\n params: {\r\n promptText: message.text,\r\n promptType: TROUBLESHOOTING_AD_DELIVERY,\r\n },\r\n }, message);\r\n }\r\n\r\n return message;\r\n}\r\n","import { useCallback, useContext, useRef } from 'react';\r\nimport { Activity } from 'botframework-directlinejs';\r\nimport { I18nContext, I18nModel } from '@bingads-webui/copilot-i18n';\r\nimport { Subject } from 'rxjs/Subject';\r\n\r\nimport { IUsePostMessageProps, type IUsePostMessage } from '../../types';\r\nimport { createMessage } from './create-message';\r\n\r\nexport function usePostMessage({\r\n onSendActivity,\r\n onSendActivityError,\r\n botServiceConfig,\r\n directLine,\r\n isCustomStream,\r\n additionalContext,\r\n}: IUsePostMessageProps) {\r\n const i18n = useContext(I18nContext) as I18nModel;\r\n const userMesIdRef = useRef('');\r\n\r\n const postMessage: IUsePostMessage['postMessage'] = useCallback((_evt, { value: message }, messageOptions) => {\r\n const {\r\n category,\r\n isHiddenFromUser,\r\n pluginName,\r\n options,\r\n } = messageOptions || {};\r\n\r\n if (directLine) {\r\n const locale = i18n.getLocale();\r\n\r\n let act: Activity = createMessage(\r\n message.trimEnd(),\r\n {\r\n botServiceConfig,\r\n category,\r\n isCustomStream,\r\n isHiddenFromUser,\r\n locale,\r\n options,\r\n additionalContext,\r\n },\r\n );\r\n\r\n if (pluginName) {\r\n (act.value as any).PluginContext = { Name: pluginName };\r\n }\r\n\r\n if (onSendActivity) {\r\n act = onSendActivity(act, directLine, isCustomStream);\r\n }\r\n if (isCustomStream) {\r\n (directLine.activity$ as Subject)?.next(act);\r\n } else {\r\n directLine.postActivity(act).subscribe((id) => {\r\n if (id === 'retry' && onSendActivityError) {\r\n onSendActivityError('DirectLine PostActivity failed due to connectivity issue');\r\n }\r\n userMesIdRef.current = id;\r\n }, (error) => {\r\n if (onSendActivityError) {\r\n onSendActivityError(error);\r\n }\r\n });\r\n }\r\n return true;\r\n }\r\n return false;\r\n }, [botServiceConfig, isCustomStream, directLine, i18n, onSendActivity, onSendActivityError]);\r\n\r\n return {\r\n postMessage,\r\n };\r\n}\r\n","import { useAdsCopilotContext } from '../components/ads-copilot-context-provider';\r\n\r\nexport function useAdsCopilotLogger() {\r\n const context = useAdsCopilotContext();\r\n return context?.logger;\r\n}\r\n","import React, {\r\n useCallback,\r\n useEffect,\r\n useMemo,\r\n useState,\r\n} from 'react';\r\nimport _ from 'underscore';\r\nimport {\r\n FluentProvider, Theme, makeStyles, mergeClasses, tokens, webLightTheme, shorthands, Button,\r\n} from '@fluentui/react-components';\r\nimport { DismissCircle20Filled } from '@fluentui/react-icons';\r\nimport { I18nProvider, useI18nContext } from '@bingads-webui/copilot-i18n';\r\nimport { Header, type IHeaderProps } from '@bingads-webui-react/copilot-ui-base';\r\n\r\nimport { type IDirectLineError } from './botTypes';\r\nimport { useAdsCopilotLogger } from './hooks/use-ads-copilot-logger';\r\n\r\nconst useCopilotErrorStyles = makeStyles({\r\n error: {\r\n ...shorthands.padding(tokens.spacingVerticalMNudge, tokens.spacingVerticalM),\r\n ...shorthands.border('1px', 'solid', tokens.colorPaletteCranberryBackground2),\r\n ...shorthands.borderRadius(tokens.borderRadiusMedium),\r\n color: '#242424',\r\n backgroundColor: '#fdf3f4',\r\n display: 'flex',\r\n },\r\n copilotErrorContent: {\r\n ...shorthands.flex(1),\r\n },\r\n icon: {\r\n marginRight: tokens.spacingHorizontalSNudge,\r\n },\r\n buttonWrapper: {\r\n display: 'flex',\r\n justifyContent: 'flex-end',\r\n },\r\n button: {\r\n marginTop: tokens.spacingVerticalMNudge,\r\n fontWeight: tokens.fontWeightBold,\r\n },\r\n errorTitle: {\r\n ...shorthands.margin(0),\r\n fontSize: tokens.fontSizeBase200,\r\n },\r\n errorText: {\r\n ...shorthands.margin(0),\r\n lineHeight: tokens.lineHeightBase200,\r\n fontSize: tokens.fontSizeBase200,\r\n },\r\n});\r\n\r\ninterface ICopilotErrorProps {\r\n errorTitle?: string;\r\n errorText?: string;\r\n showTryAgainButton?: boolean;\r\n tryAgainButtonText?: string;\r\n onRefresh?: () => void;\r\n isTokenExpiredAutoReloadEnabled?: boolean;\r\n onAutoReloading?: () => void;\r\n}\r\n\r\nexport const CopilotError: React.FC = React.memo((props) => {\r\n const styles = useCopilotErrorStyles();\r\n const {\r\n errorTitle, errorText, onRefresh, tryAgainButtonText, showTryAgainButton,\r\n } = props;\r\n\r\n return (\r\n
\r\n \r\n
\r\n

{errorTitle}

\r\n

{errorText}

\r\n {showTryAgainButton ? (\r\n
\r\n \r\n
\r\n ) : null}\r\n
\r\n
\r\n );\r\n});\r\n\r\nCopilotError.defaultProps = {\r\n errorTitle: 'There is some error here',\r\n errorText: 'Description of the error and how to solve it.',\r\n showTryAgainButton: true,\r\n tryAgainButtonText: 'Try again',\r\n onRefresh: _.noop,\r\n};\r\n\r\ninterface DirectLineErrorViewProps {\r\n error: IDirectLineError,\r\n onRefresh: ICopilotErrorProps['onRefresh'],\r\n isTokenExpiredAutoReloadEnabled?: ICopilotErrorProps['isTokenExpiredAutoReloadEnabled'],\r\n onAutoReloading?: ICopilotErrorProps['onAutoReloading'],\r\n}\r\n\r\nexport const DirectLineErrorView: React.FC = React.memo(({\r\n error,\r\n onRefresh,\r\n isTokenExpiredAutoReloadEnabled,\r\n onAutoReloading,\r\n}) => {\r\n const i18n = useI18nContext()!;\r\n const logger = useAdsCopilotLogger();\r\n const isTokenExpired = useMemo(() => error.message === 'directLineExpiredToken', []);\r\n const [isAutoReloading, setIsAutoReloading] = useState(false);\r\n\r\n const onTryAgainButtonClick = useCallback(() => {\r\n if (onRefresh) {\r\n logger?.trace('[Copilot][DirectLineErrorView] Try Again button clicked');\r\n onRefresh();\r\n }\r\n }, [logger, onRefresh]);\r\n\r\n useEffect(() => {\r\n if (!isAutoReloading && isTokenExpired && isTokenExpiredAutoReloadEnabled && _.isFunction(onRefresh) && _.isFunction(onAutoReloading)) {\r\n logger?.trace('[Copilot][DirectLineErrorView] Expired token detected, auto-reloading...');\r\n setIsAutoReloading(true);\r\n onRefresh();\r\n onAutoReloading();\r\n }\r\n }, [\r\n isTokenExpired,\r\n isTokenExpiredAutoReloadEnabled,\r\n logger,\r\n onRefresh,\r\n onAutoReloading,\r\n ]);\r\n\r\n useEffect(() => {\r\n if (!isAutoReloading) {\r\n logger?.trace(`[Copilot][DirectLineErrorView] Error detected: isTokenExpired=${isTokenExpired}, error.message=${error.message}`);\r\n }\r\n }, [error, isAutoReloading, isTokenExpired, logger]);\r\n\r\n if (isAutoReloading) {\r\n return null;\r\n }\r\n\r\n const errorTitle = isTokenExpired ? i18n.getString(_TL_('Your session has expired')) : i18n.getString(_TL_('There is some error here'));\r\n const errorText = isTokenExpired ? i18n.getString(_TL_('The conversation is expired. Start a new chat to continue.')) : i18n.getString(_TL_(\"We've encountered an error and can't continue. Please refresh to start a new chat.\"));\r\n\r\n return (\r\n \r\n );\r\n});\r\n\r\nDirectLineErrorView.defaultProps = {\r\n isTokenExpiredAutoReloadEnabled: false,\r\n onAutoReloading: undefined,\r\n};\r\n\r\nexport const useErrorViewStyles = makeStyles({\r\n provider: {\r\n height: '100%',\r\n },\r\n wrapper: {\r\n height: '100%',\r\n },\r\n root: {\r\n height: '100%',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n backgroundColor: tokens.colorNeutralBackground2,\r\n borderLeftWidth: '1px',\r\n borderLeftStyle: 'solid',\r\n borderLeftColor: tokens.colorNeutralStroke1,\r\n },\r\n errorWrapper: {\r\n ...shorthands.flex(1),\r\n ...shorthands.padding(0, tokens.spacingVerticalL),\r\n },\r\n});\r\n\r\ninterface IGlobalErrorViewViewProps extends IHeaderProps, ICopilotErrorProps {\r\n theme?: Theme;\r\n locale?: string;\r\n}\r\n\r\nexport const GlobalErrorView: React.FC = React.memo((props) => {\r\n const styles = useErrorViewStyles();\r\n const {\r\n theme,\r\n locale,\r\n } = props;\r\n return (\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n});\r\n\r\nGlobalErrorView.defaultProps = {\r\n theme: webLightTheme,\r\n errorTitle: 'There is some error here',\r\n errorText: 'Description of the error and how to solve it.',\r\n showTryAgainButton: true,\r\n tryAgainButtonText: 'Try again',\r\n onRefresh: _.noop,\r\n locale: 'en-us',\r\n};\r\n","import React, { useContext } from 'react';\r\nimport { Button, makeStyles, mergeClasses } from '@fluentui/react-components';\r\nimport { Book20Regular } from '@fluentui/react-icons';\r\nimport { I18nContext, I18nModel } from '@bingads-webui/copilot-i18n';\r\n\r\ninterface PromptBarProps {\r\n onViewPromptClick?: () => void;\r\n}\r\n\r\nconst usePromptBarStyles = makeStyles({\r\n promptBarContainer: {\r\n height: '24px',\r\n width: '100%',\r\n display: 'flex',\r\n maxWidth: '652px',\r\n alignSelf: 'center',\r\n flexDirection: 'row',\r\n justifyContent: 'end',\r\n marginBottom: '8px',\r\n },\r\n});\r\n\r\nexport const PromptBar: React.FC = ({ onViewPromptClick }) => {\r\n const i18n = useContext(I18nContext) as I18nModel;\r\n const styles = usePromptBarStyles();\r\n return (\r\n
\r\n \r\n
\r\n );\r\n};\r\n","import React, {\r\n FC,\r\n memo,\r\n useCallback,\r\n useEffect,\r\n useRef,\r\n useState,\r\n} from 'react';\r\nimport {\r\n mergeClasses,\r\n webLightTheme,\r\n FluentProvider,\r\n} from '@fluentui/react-components';\r\nimport { TextareaValueData } from '@fluentai/textarea';\r\nimport { CopilotProvider } from '@fluentai/react-copilot';\r\nimport { I18nProvider, DEFAULT_LOCALE } from '@bingads-webui/copilot-i18n';\r\nimport { Header } from '@bingads-webui-react/copilot-ui-base';\r\nimport { CopilotResizer } from '@bingads-webui-react/copilot-resizer';\r\nimport './global';\r\nimport { ConversationsList } from './components/conversation-list/conversations-list';\r\n\r\nimport { type IAdsCopilotProps, type IConversationThreadProps } from './types';\r\nimport { AutoScroller } from './AutoScroller';\r\nimport { ConversationThread, DEFAULT_GROUP_TIME } from './components/conversation-thread';\r\nimport { DirectLineProvider } from './components/direct-line-provider';\r\nimport { useAdsCopilotContext } from './components/ads-copilot-context-provider';\r\nimport { useStaticMessage } from './hooks/useStaticMessage';\r\nimport { useSesId } from './hooks/useSesId';\r\nimport { useChatSuggestions } from './hooks/useChatSuggestions';\r\nimport { useInputDisabled } from './hooks/useInputDisabled';\r\nimport { useAdsCopilotStyles } from './hooks/useAdsCopilotStyles';\r\nimport { usePostMessage } from './hooks/use-post-message';\r\nimport { ChatInput } from './ChatInput';\r\nimport { DirectLineErrorView } from './ErrorView';\r\nimport { type BotActivity, IDirectLineError } from './botTypes';\r\nimport { PromptBar } from './PromptBar';\r\nimport saveConversation from './components/direct-line-provider/chat-history-direct-line';\r\n\r\nconst COPILOT_WIDTH = 320;\r\n\r\nconst AdsCopilotInternal: FC = memo((props) => {\r\n const {\r\n onClose,\r\n botServiceConfig,\r\n onConnectionStatusChange,\r\n groupTime,\r\n renderAction,\r\n onSendActivityError,\r\n onFeedbackButtonClick,\r\n renderHeaderComponent,\r\n renderFooterComponent,\r\n renderTopComponent,\r\n renderBottomComponent,\r\n onReferenceClick,\r\n onSupportClick,\r\n showPreviewTag,\r\n showSupportButton,\r\n maxInputLength,\r\n headerContent,\r\n title,\r\n customStream,\r\n isTokenExpiredAutoReloadEnabled,\r\n onAutoReloading,\r\n isStopGeneratingEnabled,\r\n showViewPrompt,\r\n onViewPromptClick,\r\n isChatSuggestionsEnabled,\r\n isChatHistoryEnabled,\r\n isTroubleshootingEnabled,\r\n isReportingInsightsEnabled,\r\n isUxImprovementsEnabled: isUxImprovementsEnabledProp,\r\n onChatSuggestionClick,\r\n renderCustomErrorView,\r\n onChangeChatInput,\r\n isCopilotDegraded,\r\n isShowFeaturesInHint,\r\n onAIDegrade,\r\n isTroubleshootingIntentionDetectionEnabled,\r\n logger,\r\n onReceiveActivityEnd,\r\n showHeader,\r\n shouldDisableInput,\r\n } = props;\r\n const autoScrollContainerRef = useRef(null);\r\n const resetConversation = React.useRef(false);\r\n const styles = useAdsCopilotStyles();\r\n const {\r\n sesId, onClickStartOver, onInitDirectLine, directLine,\r\n } = useSesId(props);\r\n const [chatInputValue, setChatInputValue] = useState('');\r\n const [showChatHistory, setShowChatHistory] = useState(false);\r\n const existingToken = useRef(null);\r\n const activeConversation = useRef(null);\r\n\r\n // Handle showing the Chat History popover\r\n const handleChatHistoryClick = useCallback(() => {\r\n setShowChatHistory(true);\r\n }, [showChatHistory]);\r\n\r\n const handleChatHistoryClose = useCallback(() => {\r\n setShowChatHistory(false);\r\n\r\n /* NOTE: This is needed for now as the AdsCopilot component is being\r\n unmounted when ChatHistory is loaded. There's a bug ticket to fix this\r\n in the future: Work item 8440464 */\r\n onClickStartOver();\r\n }, [showChatHistory]);\r\n\r\n const handleChatHistoryResetConversation = useCallback((conversationToken: string) => {\r\n if (activeConversation.current && existingToken.current) {\r\n saveConversation(existingToken.current, activeConversation.current || 'Untitled');\r\n }\r\n handleChatHistoryClose();\r\n existingToken.current = conversationToken;\r\n }, [existingToken]);\r\n\r\n const onClickStartOverWithResetConversation = useCallback(() => {\r\n resetConversation.current = true;\r\n if (isChatHistoryEnabled && activeConversation.current) {\r\n activeConversation.current = null;\r\n }\r\n onClickStartOver();\r\n }, [onClickStartOver]);\r\n\r\n const {\r\n renderActivity,\r\n } = useStaticMessage({\r\n ...props,\r\n onClickStartOver: onClickStartOverWithResetConversation,\r\n });\r\n\r\n const {\r\n sendDisabled,\r\n inputDisabled,\r\n onSendActivity,\r\n onReceiveActivity,\r\n } = useInputDisabled({\r\n ...props,\r\n botServiceConfig,\r\n });\r\n\r\n const {\r\n postMessage,\r\n } = usePostMessage({\r\n ...props,\r\n directLine,\r\n isCustomStream: !!customStream,\r\n botServiceConfig,\r\n onSendActivity,\r\n onSendActivityError,\r\n });\r\n\r\n const onChangeChatInputInternal = useCallback((_ev: any, { value: v }: TextareaValueData) => {\r\n setChatInputValue(v);\r\n onChangeChatInput?.();\r\n }, [onChangeChatInput]);\r\n\r\n const handleChatInputPostMessage = useCallback((_evt: any, { value }: TextareaValueData) => {\r\n if (postMessage(_evt, { value })) {\r\n setChatInputValue('');\r\n if (isChatHistoryEnabled && !activeConversation.current) {\r\n activeConversation.current = value;\r\n }\r\n }\r\n }, [postMessage]);\r\n\r\n const handleConversationThreadSuggestionClick = useCallback>((_evt, value, messageOptions) => {\r\n if (postMessage(_evt, { value }, messageOptions)) {\r\n setChatInputValue('');\r\n if (isChatHistoryEnabled && !activeConversation.current) {\r\n activeConversation.current = value;\r\n }\r\n }\r\n }, [postMessage]);\r\n\r\n const handleChatSuggestionClick = useCallback((value: string) => {\r\n onChatSuggestionClick?.(value);\r\n if (postMessage(null, { value })) {\r\n setChatInputValue('');\r\n if (isChatHistoryEnabled && !activeConversation.current) {\r\n activeConversation.current = value;\r\n }\r\n }\r\n }, [postMessage, onChatSuggestionClick]);\r\n\r\n const {\r\n onReceiveActivity: onReceiveActivityWithChatSuggestions,\r\n renderChatSuggestionList,\r\n } = useChatSuggestions({\r\n onReceiveActivity,\r\n handleChatSuggestionClick,\r\n isChatSuggestionsEnabled,\r\n });\r\n\r\n const renderDirectLineErrorView = useCallback(\r\n (error: IDirectLineError) => (\r\n \r\n ),\r\n [onClickStartOverWithResetConversation, isTokenExpiredAutoReloadEnabled, onAutoReloading],\r\n );\r\n\r\n const onReceiveActivityStart = useCallback((\r\n activity: BotActivity,\r\n finalActivities: BotActivity[],\r\n ) => {\r\n onAIDegrade?.(activity, finalActivities, postMessage);\r\n }, [onAIDegrade, postMessage]);\r\n\r\n const adsCopilotContext = useAdsCopilotContext();\r\n useEffect(() => {\r\n adsCopilotContext?.onBotServiceConfigChange?.(botServiceConfig);\r\n }, [adsCopilotContext?.onBotServiceConfigChange, botServiceConfig]);\r\n const isUxImprovementsEnabled = isUxImprovementsEnabledProp || adsCopilotContext?.pilotMap?.isUxImprovementsEnabled;\r\n const isMarketingIntegrationEnabled = adsCopilotContext?.pilotMap?.isMarketingIntegrationEnabled;\r\n return (\r\n \r\n {(!isChatHistoryEnabled || !showChatHistory) && (\r\n
\r\n {showHeader && (\r\n \r\n {headerContent}\r\n \r\n )}\r\n {renderHeaderComponent?.()}\r\n
\r\n \r\n \r\n \r\n {renderFooterComponent?.()}\r\n {showViewPrompt && }\r\n \r\n
\r\n
\r\n )}\r\n {showChatHistory && (\r\n
\r\n \r\n
\r\n )}\r\n \r\n );\r\n});\r\n\r\nconst AdsCopilotBase: FC = memo((props) => {\r\n const {\r\n bingAdsI18n,\r\n className,\r\n currencyCode,\r\n locale,\r\n theme,\r\n } = props;\r\n const styles = useAdsCopilotStyles();\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n});\r\n\r\nexport const AdsCopilot: FC = memo((props) => {\r\n const { enableResizer, resizerProps } = props;\r\n\r\n if (enableResizer) {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n});\r\n\r\nAdsCopilotBase.defaultProps = {\r\n onInitDirectLine: undefined,\r\n onConnectionStatusChange: undefined,\r\n onReceiveActivity: undefined,\r\n onClose: undefined,\r\n renderActivity: undefined,\r\n onSendActivity: undefined,\r\n onSendActivityError: undefined,\r\n renderBottomComponent: undefined,\r\n renderAction: undefined,\r\n onFeedbackButtonClick: undefined,\r\n groupTime: DEFAULT_GROUP_TIME,\r\n locale: DEFAULT_LOCALE,\r\n className: '',\r\n showPreviewTag: true,\r\n maxInputLength: 500,\r\n headerContent: undefined,\r\n onReferenceClick: undefined,\r\n theme: webLightTheme,\r\n onStartOverClick: undefined,\r\n isTokenExpiredAutoReloadEnabled: false,\r\n onAutoReloading: undefined,\r\n showViewPrompt: false,\r\n onViewPromptClick: undefined,\r\n isChatSuggestionsEnabled: false,\r\n renderCustomErrorView: undefined,\r\n isCopilotDegraded: false,\r\n onAIDegrade: undefined,\r\n showHeader: true,\r\n shouldDisableInput: false,\r\n};\r\n\r\nAdsCopilot.defaultProps = {\r\n enableResizer: false,\r\n resizerProps: {},\r\n};\r\n","import {\r\n useCallback, useRef, useState, useEffect,\r\n} from 'react';\r\nimport { DirectLine, IBotConnection } from 'botframework-directlinejs';\r\nimport { IAdsCopilotProps } from '../types';\r\n\r\nexport function useSesId({ onInitDirectLine, botServiceConfig, onStartOverClick }: Pick) {\r\n const [sesId, setSesId] = useState(botServiceConfig.sesId || 0);\r\n const dlRef = useRef(null);\r\n\r\n useEffect(() => {\r\n if (botServiceConfig.sesId != null) {\r\n setSesId(botServiceConfig.sesId);\r\n }\r\n }, [botServiceConfig.sesId]);\r\n\r\n const finalOnInitDirectLine = useCallback>((dl, userId, userName) => {\r\n if (onInitDirectLine != null) {\r\n onInitDirectLine(dl, userId, userName);\r\n }\r\n dlRef.current = dl;\r\n }, [onInitDirectLine]);\r\n\r\n const refreshSesId = useCallback(() => {\r\n if (botServiceConfig.sesId == null) {\r\n setSesId((prev) => prev + 1);\r\n }\r\n if (onStartOverClick) {\r\n onStartOverClick();\r\n }\r\n }, [botServiceConfig.sesId, onStartOverClick]);\r\n\r\n const onClickStartOver = useCallback(() => {\r\n if (dlRef.current && (dlRef.current as any)?.token) {\r\n dlRef.current.postActivity({\r\n type: 'endOfConversation' as any,\r\n from: {\r\n name: botServiceConfig.username,\r\n id: botServiceConfig.userid,\r\n },\r\n }).subscribe(\r\n refreshSesId,\r\n refreshSesId,\r\n );\r\n } else {\r\n refreshSesId();\r\n }\r\n }, [botServiceConfig.userid, botServiceConfig.username, refreshSesId]);\r\n\r\n return {\r\n sesId,\r\n onClickStartOver,\r\n onInitDirectLine: finalOnInitDirectLine,\r\n directLine: dlRef.current as DirectLine | undefined,\r\n };\r\n}\r\n","import _ from 'underscore';\r\nimport { useState, useCallback, useMemo } from 'react';\r\nimport { Message } from 'botframework-directlinejs';\r\nimport { IAdsCopilotProps } from '../types';\r\nimport { getOAuthCardResourceUri } from './useSSO';\r\nimport { errorMessageTypes } from './useStaticMessage';\r\nimport { BotActivity, StreamingStatusType } from '../botTypes';\r\nimport { isTypingMessage, EVENT_NAME_ENGAGE_TROUBLESHOOTER } from '../utils';\r\nimport { useAdsCopilotContext } from '../components/ads-copilot-context-provider';\r\n\r\ninterface IUseInputDisabledParam {\r\n onSendActivity?: IAdsCopilotProps['onSendActivity'];\r\n onReceiveActivity?: IAdsCopilotProps['onReceiveActivity'];\r\n botServiceConfig: IAdsCopilotProps['botServiceConfig'];\r\n}\r\n\r\nexport const useInputDisabled = ({\r\n onSendActivity,\r\n onReceiveActivity,\r\n botServiceConfig,\r\n}: IUseInputDisabledParam) => {\r\n const [sendDisabled, setSendDisabled] = useState(false);\r\n const { onIsSendDisabledChange = _.noop } = useAdsCopilotContext() || {};\r\n\r\n const [inputDisabled, setInputDisabled] = useState(false);\r\n\r\n const blockingErrorMessageTypes = useMemo(() => _.filter(errorMessageTypes, (item) => item !== 'ResponsibleAI' && item !== 'Timeout'), []);\r\n\r\n const handleSendDisabledChange = useCallback((disabled: boolean) => {\r\n setSendDisabled(disabled);\r\n onIsSendDisabledChange(disabled);\r\n }, [onIsSendDisabledChange]);\r\n\r\n const finalOnSendActivity = useCallback>((activity, directLine, isCustomStream) => {\r\n // 1. disable send button when it is not a custom stream\r\n // 2. disable send button when it is not a troubleshooting event\r\n if (!isCustomStream && !(activity.type === 'event' && activity.name === EVENT_NAME_ENGAGE_TROUBLESHOOTER)) {\r\n handleSendDisabledChange(true);\r\n }\r\n\r\n if (onSendActivity) {\r\n return onSendActivity(activity, directLine, isCustomStream);\r\n }\r\n\r\n return activity;\r\n }, [onSendActivity]);\r\n\r\n const finalOnReceiveActivity = useCallback>((activity, currentActivities, directLine) => {\r\n const act = activity as Message;\r\n const messageActivity = activity as BotActivity;\r\n\r\n const isBotMessage = activity.from.name !== botServiceConfig.username;\r\n const isStreamingOrGenerating = messageActivity.value?.StreamingStatus === StreamingStatusType.InProgress || messageActivity.value === 'AnimationCard';\r\n\r\n if ((act.text === 'StaticMessages' && blockingErrorMessageTypes.indexOf(act.value as any) !== -1)) {\r\n handleSendDisabledChange(true);\r\n setInputDisabled(true);\r\n } else if (isBotMessage && !isTypingMessage(act) && getOAuthCardResourceUri(act) == null) {\r\n if (isStreamingOrGenerating) {\r\n // enable input when it is streaming, but disable send button\r\n handleSendDisabledChange(true);\r\n setInputDisabled(false);\r\n } else {\r\n handleSendDisabledChange(false);\r\n setInputDisabled(false);\r\n }\r\n }\r\n\r\n if (onReceiveActivity) {\r\n return onReceiveActivity(activity, currentActivities, directLine);\r\n }\r\n\r\n return currentActivities;\r\n }, [botServiceConfig.username, onReceiveActivity]);\r\n\r\n return {\r\n sendDisabled,\r\n inputDisabled,\r\n onSendActivity: finalOnSendActivity,\r\n onReceiveActivity: finalOnReceiveActivity,\r\n };\r\n};\r\n","/* istanbul ignore file */\r\nimport React, { useRef, useEffect } from 'react';\r\nimport { AdaptiveCard } from 'adaptivecards';\r\nimport { mergeClasses } from '@fluentui/react-components';\r\n\r\nexport const ADAPTIVE_CARDS_DEFAULT_STYLE_OPTIONS = {\r\n adaptiveCardsParserMaxVersion: undefined,\r\n cardEmphasisBackgroundColor: '#F9F9F9',\r\n cardPushButtonBackgroundColor: '#0063B1',\r\n cardPushButtonTextColor: 'White',\r\n richCardWrapTitle: false,\r\n};\r\n\r\nexport interface IAdaptiveCardRendererProps {\r\n card: AdaptiveCard;\r\n className?: string;\r\n onMount?(root:HTMLDivElement): void;\r\n}\r\n\r\nexport function AdaptiveCardRenderer({\r\n card, className, onMount,\r\n}: IAdaptiveCardRendererProps) {\r\n const rootNode = useRef(null);\r\n\r\n useEffect(() => {\r\n const renderedCard = card.render();\r\n\r\n if (renderedCard && rootNode.current) {\r\n const child = rootNode.current.firstChild;\r\n if (child) {\r\n rootNode.current.removeChild(child);\r\n }\r\n rootNode.current.appendChild(renderedCard);\r\n\r\n if (onMount) {\r\n onMount(rootNode.current);\r\n }\r\n }\r\n }, [card, onMount]);\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nAdaptiveCardRenderer.defaultProps = {\r\n className: undefined,\r\n onMount: () => {},\r\n};\r\n","/* istanbul ignore file */\r\nimport {\r\n AdaptiveCard,\r\n CardElement,\r\n Column,\r\n ColumnSet,\r\n Container,\r\n Image,\r\n OpenUrlAction,\r\n Size,\r\n SizeAndUnit,\r\n SizeUnit,\r\n SubmitAction,\r\n TextBlock,\r\n TextColor,\r\n TextSize,\r\n TextWeight,\r\n} from 'adaptivecards';\r\n\r\nexport interface BotFrameworkCardAction {\r\n __isBotFrameworkCardAction: true;\r\n cardAction: any;\r\n}\r\n\r\nfunction addCardAction(cardAction: any, includesOAuthButtons?: boolean) {\r\n const { type } = cardAction;\r\n let action;\r\n\r\n if (\r\n type === 'imBack'\r\n || type === 'messageBack'\r\n || type === 'postBack'\r\n || (type === 'signin' && includesOAuthButtons)\r\n ) {\r\n action = new SubmitAction();\r\n\r\n action.data = {\r\n __isBotFrameworkCardAction: true,\r\n cardAction,\r\n };\r\n\r\n action.title = (cardAction as { title: string }).title;\r\n } else {\r\n action = new OpenUrlAction();\r\n\r\n action.title = (cardAction as { title: string }).title;\r\n action.url = cardAction.type === 'call' ? `tel:${cardAction.value}` : cardAction.value;\r\n }\r\n\r\n return action;\r\n}\r\n\r\nexport interface ICommonContent {\r\n buttons?: any[];\r\n subtitle?: string;\r\n text?: string;\r\n title?: string;\r\n}\r\n\r\nexport default class AdaptiveCardBuilder {\r\n card: AdaptiveCard;\r\n\r\n container: Container;\r\n\r\n styleOptions: any;\r\n\r\n constructor(\r\n adaptiveCards: any,\r\n styleOptions: any,\r\n direction: 'ltr' | 'rtl' | 'auto' = 'ltr',\r\n ) {\r\n this.card = new adaptiveCards.AdaptiveCard();\r\n this.container = new Container();\r\n this.container.rtl = direction === 'rtl';\r\n this.styleOptions = styleOptions;\r\n\r\n this.card.addItem(this.container);\r\n }\r\n\r\n addColumnSet(sizes: number[], container: Container = this.container, selectAction?: any) {\r\n const columnSet = new ColumnSet();\r\n\r\n columnSet.selectAction = selectAction && addCardAction(selectAction);\r\n container.addItem(columnSet);\r\n\r\n return sizes.map((size) => {\r\n const column = new Column();\r\n\r\n column.width = new SizeAndUnit(size, SizeUnit.Weight);\r\n\r\n columnSet.addColumn(column);\r\n\r\n return column;\r\n });\r\n }\r\n\r\n addItems(cardElements: CardElement[], container: Container = this.container) {\r\n cardElements.forEach((cardElement) => container.addItem(cardElement));\r\n }\r\n\r\n addTextBlock(text: string, template: Partial, container: Container = this.container) {\r\n if (typeof text !== 'undefined') {\r\n const textblock = new TextBlock();\r\n\r\n textblock.text = text;\r\n\r\n container.addItem(textblock);\r\n }\r\n }\r\n\r\n addButtons(cardActions: any[], includesOAuthButtons?: boolean) {\r\n if (cardActions) {\r\n cardActions.forEach((cardAction) => {\r\n this.card.addAction(addCardAction(cardAction, includesOAuthButtons));\r\n });\r\n }\r\n }\r\n\r\n addCommonHeaders(content: ICommonContent) {\r\n const { richCardWrapTitle } = this.styleOptions;\r\n this.addTextBlock(content.title as string, {\r\n color: TextColor.Default,\r\n size: TextSize.Medium,\r\n style: 'heading',\r\n weight: TextWeight.Bolder,\r\n wrap: richCardWrapTitle,\r\n });\r\n this.addTextBlock(content.subtitle as string, { color: TextColor.Default, isSubtle: true, wrap: richCardWrapTitle });\r\n this.addTextBlock(content.text as string, { color: TextColor.Default, wrap: true });\r\n }\r\n\r\n addCommon(content: ICommonContent) {\r\n this.addCommonHeaders(content);\r\n this.addButtons(content.buttons as any);\r\n }\r\n\r\n addImage(url: string, container?: Container, selectAction?: any, altText?: string) {\r\n const finalContainer = container || this.container;\r\n\r\n const image = new Image();\r\n\r\n image.altText = altText;\r\n image.url = url;\r\n image.selectAction = selectAction && addCardAction(selectAction);\r\n image.size = Size.Stretch;\r\n\r\n finalContainer.addItem(image);\r\n }\r\n}\r\n","/* istanbul ignore file */\r\nimport React, { useCallback, useMemo } from 'react';\r\nimport { Message } from 'botframework-directlinejs';\r\nimport * as AdaptiveCards from 'adaptivecards';\r\nimport { mergeClasses } from '@fluentui/react-components';\r\nimport { AdaptiveCardRenderer, ADAPTIVE_CARDS_DEFAULT_STYLE_OPTIONS } from './AdaptiveCardRenderer';\r\nimport AdaptiveCardBuilder from './BotFrameworkAdaptiveCardBuilder';\r\n\r\ninterface IOAuthCardProps {\r\n activity: Message;\r\n className?: string;\r\n disabled?: boolean;\r\n}\r\n\r\nexport function BotFrameworkOAuthCard({ activity, className, disabled }: IOAuthCardProps) {\r\n const onExecuteAction = useCallback((action: any) => {\r\n if (disabled) {\r\n return;\r\n }\r\n const popup = window.open() as Window;\r\n const url = action.data.cardAction.value;\r\n popup.location.href = url;\r\n }, [disabled]);\r\n\r\n const attachment: any = activity.attachments?.find((aitem) => aitem.contentType === 'application/vnd.microsoft.card.oauth');\r\n const { content } = attachment;\r\n\r\n const direction = document.dir as 'ltr' | 'rtl' | 'auto';\r\n const card = useMemo(() => {\r\n const builder = new AdaptiveCardBuilder(AdaptiveCards, ADAPTIVE_CARDS_DEFAULT_STYLE_OPTIONS, direction);\r\n\r\n builder.addCommonHeaders(content);\r\n builder.addButtons((content.buttons), true);\r\n\r\n return builder.card;\r\n }, [content, direction]);\r\n card.hostConfig = new AdaptiveCards.HostConfig({});\r\n\r\n card.onExecuteAction = (action: any) => {\r\n if (onExecuteAction) {\r\n onExecuteAction(action);\r\n }\r\n };\r\n\r\n const onMount = useCallback((root: HTMLDivElement) => {\r\n const btn = root.querySelector('button') as HTMLButtonElement;\r\n btn.disabled = !!disabled;\r\n }, [disabled]);\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nBotFrameworkOAuthCard.defaultProps = {\r\n className: undefined,\r\n disabled: false,\r\n};\r\n","import React from 'react';\r\nimport {\r\n FluentProvider, Theme, makeStyles, mergeClasses, tokens, webLightTheme, shorthands,\r\n} from '@fluentui/react-components';\r\nimport { Textarea } from '@fluentai/textarea';\r\nimport { I18nProvider } from '@bingads-webui/copilot-i18n';\r\nimport { Header, IHeaderProps } from '@bingads-webui-react/copilot-ui-base';\r\nimport { Loading } from './Loading';\r\n\r\ninterface IPreparingViewProps extends IHeaderProps {\r\n loadingText?: string;\r\n theme?: Theme;\r\n chatInputPlaceholder?: string;\r\n locale?: string;\r\n}\r\n\r\nconst usePreparingViewStyles = makeStyles({\r\n provider: {\r\n height: '100%',\r\n },\r\n wrapper: {\r\n height: '100%',\r\n },\r\n root: {\r\n height: '100%',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n backgroundColor: tokens.colorNeutralBackground2,\r\n borderLeftWidth: '1px',\r\n borderLeftStyle: 'solid',\r\n borderLeftColor: tokens.colorNeutralStroke1,\r\n },\r\n loadingWrapper: {\r\n ...shorthands.flex(1),\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n chatInputWrapper: {\r\n alignSelf: 'center',\r\n maxWidth: '652px',\r\n width: '100%',\r\n ...shorthands.padding('16px'),\r\n },\r\n});\r\n\r\nexport const PreparingView: React.FC = React.memo((props) => {\r\n const styles = usePreparingViewStyles();\r\n const { theme, chatInputPlaceholder, locale } = props;\r\n return (\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n});\r\n\r\nPreparingView.defaultProps = {\r\n theme: webLightTheme,\r\n loadingText: 'Preparing Copilot...',\r\n chatInputPlaceholder: 'Ask a question',\r\n locale: 'en-us',\r\n};\r\n","/* eslint-disable no-unused-vars */\r\n/* eslint-disable no-shadow */\r\nimport { Theme } from '@fluentui/react-components';\r\n\r\nexport enum OcvFeedbackType {\r\n Smile = 'Smile',\r\n Frown = 'Frown',\r\n Idea = 'Idea',\r\n Unclassified = 'Unclassified',\r\n}\r\n\r\nexport enum FeedbackAgeGroup {\r\n Undefined = 'Undefined',\r\n MinorWithoutParentalConsent = 'MinorWithoutParentalConsent',\r\n MinorWithParentalConsent = 'MinorWithParentalConsent',\r\n NotAdult = 'NotAdult',\r\n Adult = 'Adult',\r\n MinorNoParentalConsentRequired = 'MinorNoParentalConsentRequired',\r\n}\r\n\r\nexport enum InAppFeedbackQuestionUiType {\r\n DropDown = 'DropDown',\r\n MultiSelect = 'MultiSelect',\r\n Rating = 'Rating',\r\n SingleSelect = 'SingleSelect',\r\n}\r\n\r\nexport enum InAppFeedbackScenarioType {\r\n FeatureArea = 'FeatureArea',\r\n ResponsibleAI = 'ResponsibleAI',\r\n ChildFeedback = 'ChildFeedback',\r\n Experience = 'Experience',\r\n ProductSatisfaction = 'ProductSatisfaction',\r\n CrashImpact = 'CrashImpact',\r\n Custom = 'Custom',\r\n AIThumbsDown = 'AIThumbsDown',\r\n AIThumbsUp = 'AIThumbsUp',\r\n}\r\n\r\nexport enum InAppFeedbackQuestionUiBehaviour {\r\n QuestionNotRequired = 'QuestionNotRequired',\r\n CommentNotRequired = 'CommentNotRequired',\r\n CommentRequiredWithLastOption = 'CommentRequiredWithLastOption',\r\n}\r\n\r\nexport enum FeedbackAuthenticationType {\r\n MSA = 'MSA',\r\n AAD = 'AAD',\r\n Unauthenticated = 'Unauthenticated',\r\n}\r\n\r\nexport enum FeedbackPolicyValue {\r\n Enabled = 'Enabled',\r\n Disabled = 'Disabled',\r\n NotConfigured = 'Not Configured',\r\n}\r\n\r\nexport enum FeedbackScreenshotInfoImageFormat {\r\n JPEG = 'jpeg',\r\n PNG = 'png',\r\n}\r\n\r\nexport enum FeedbackScreenshotSourceType {\r\n AutoCapture = 'AutoCapture', // Default: used for normal web integration where the SDK is responsible for taking screenshot.\r\n AutoCaptureWithHtml2Canvas = 'AutoCaptureWithHtml2Canvas', // Used for web integration where the SDK is responsible for taking screenshot and displayMedia is not supported.\r\n ProvidedAtInitialization = 'ProvidedAtInitialization', // Used when hostapp provides the screeenshot one time when it is initialzed mainly used in mobile scenarios.\r\n DynamicallyProvided = 'DynamicallyProvided', // When screenshot is provided dynamically using callback, used in Win32 and Mac Scenarios.\r\n}\r\n\r\nexport enum FeedbackUiType {\r\n SidePane = 'SidePane', // Default: Used for side pane/detail view\r\n Modal = 'Modal', // Used for modal view\r\n NoSurface = 'NoSurface', // Used when the surface is provided by the host app\r\n CallOut = 'CallOut', // Used for inscreen pop up dialogue\r\n NoSurfaceWithoutTitle = 'NoSurfaceWithoutTitle', // Used for inscreen pop up dialogue\r\n}\r\n\r\nexport enum FeedbackHostPlatformType {\r\n Windows = 'Windows',\r\n IOS = 'iOS',\r\n Android = 'Android',\r\n WacTaskPane = 'WacTaskPane',\r\n MacOS = 'MacOS',\r\n Web = 'Web',\r\n}\r\n\r\nexport const enum InitializationStatus {\r\n Success = 'Success',\r\n Error = 'Error',\r\n Warning = 'Warning',\r\n}\r\n\r\nexport interface InitializationResult {\r\n status: InitializationStatus\r\n timestamp?: number // in UTC timestamp milliseconds\r\n loadTime?: number // in milliseconds\r\n errorMessages?: string[]\r\n warningMessages?: string[]\r\n}\r\n\r\nexport interface IFeedbackScreenshotInfo {\r\n providedScreenshotType?: FeedbackScreenshotSourceType\r\n screenshotImageFormat?: FeedbackScreenshotInfoImageFormat\r\n screenshotBase64?: string | string[]\r\n}\r\n\r\nexport interface IFeedbackCallbackFunctions {\r\n attachDiagnosticsLogs?: (diagnosticsUploadId: string, diagnosticsEndpoint: string) => void // callback function to upload diagnostics logs when feedback is submitted\r\n initializationComplete?: (initializationCompleteResult: InitializationResult) => void // callback function to notify host that initialization is complete\r\n onDismiss?: (isFeedbackSent?: boolean) => void // invoke when feedback is dismissed true if feedback was sent otherwise false (UI)\r\n onSuccess?: (clientFeedbackId: string) => void // invoke when feedback is sent\r\n onError?: (errorMessage?: string) => void // invoke when fatal error occurs\r\n supportCallback?: () => void // invoke when contact support link is clicked\r\n}\r\n\r\nexport interface InAppFeedbackCompositeString {\r\n displayedString: string\r\n displayedStringInEnglish: string\r\n}\r\n\r\nexport interface InAppFeedbackQuestion {\r\n questionUiType?: InAppFeedbackQuestionUiType // eg. DropDown, MultiSelect, Rating, SingleSelect\r\n questionInstruction?: InAppFeedbackCompositeString // to set Question Instruction as a composite string\r\n questionOptions?: InAppFeedbackCompositeString[] // to set Options as an array of composite string\r\n questionUiBehaviour?: InAppFeedbackQuestionUiBehaviour[] // to set question validation behaviour\r\n}\r\n\r\nexport interface InAppFeedbackScenarioConfig {\r\n isScenarioEnabled?: boolean\r\n scenarioType: InAppFeedbackScenarioType\r\n questionDetails?: InAppFeedbackQuestion\r\n}\r\n\r\n// Details of the compliance checks https://www.owiki.ms/wiki/Working_with_feedback_policies\r\nexport interface IFeedbackComplianceChecks {\r\n // For MSA users rest of the variables are not valid\r\n // Allow the use of connected experiences in Office\r\n // Corresponds to L_ConnectedOfficeExperiences\r\n connectedExperiences?: FeedbackPolicyValue\r\n // Allow Microsoft to follow up on feedback submitted by users\r\n // Corresponds to L_EmailCollection\r\n policyAllowContact: FeedbackPolicyValue\r\n // Allow users to include log files and content samples when feedback is submitted to Microsoft\r\n // Corresponds to L_LogCollection\r\n policyAllowContent?: FeedbackPolicyValue\r\n // Allow users to submit feedback to Microsoft\r\n // Corresponds to L_SendFeedback\r\n policyAllowFeedback: FeedbackPolicyValue\r\n // Allow users to include screenshots and attachments when they submit feedback to Microsoft\r\n // Corresponds to L_Screenshot\r\n policyAllowScreenshot: FeedbackPolicyValue\r\n // Allow users to receive and respond to in-product surveys from Microsoft\r\n // Corresponds to L_SendSurvey\r\n policyAllowSurvey?: FeedbackPolicyValue\r\n}\r\n\r\nexport interface IFeedbackDiagnosticsUploadResult {\r\n diagnosticsUploadStatus: boolean\r\n}\r\n\r\nexport interface IFeedbackDiagnosticsConfig {\r\n attachDiagnostics?: (\r\n diagnosticsUploadId: string,\r\n diagnosticsEndpoint: string\r\n ) => any // callback function to upload diagnostics logs when feedback is submitted\r\n diagnosticsEndPoint: string\r\n diagnosticsUploadId: string\r\n diagnosticsExplanationUrl?: string\r\n isDiagnosticsIncluded: boolean\r\n waitForDiagnosticsUpload: boolean\r\n}\r\n\r\nexport interface IFeedbackConfig {\r\n appData?: string // custom data to include in the feedback\r\n calloutTargetID?: string // used for feedback ui callout type surface to target DOM element\r\n complianceChecks?: IFeedbackComplianceChecks\r\n diagnosticsExplanationUrl?: string // deprecated do not use\r\n diagnosticsConfig?: IFeedbackDiagnosticsConfig\r\n email?: string // must be dynamically fetched from the host app\r\n featureAreas?: string[] // Categories to show up in the dropdown part, associate with OCV sub area value\r\n feedbackForumUrl?: string // required if isFeedbackForumEnabled is true\r\n feedbackUiType?: FeedbackUiType\r\n hostPlatform?: FeedbackHostPlatformType\r\n initialFeedbackType?: OcvFeedbackType // if defined a single form feedback will be created\r\n isDisplayed?: boolean // control the visibility of the HVC, not applicable to NoSurface ui type\r\n isEmailCollectionEnabled?: boolean // to enable email colection\r\n isFeedbackForumEnabled?: boolean // to enable feedback forum link\r\n isFileUploadEnabled?: boolean // to enable file upload function\r\n isMyFeedbackEnabled?: boolean // to enble my feedback link\r\n isScreenRecordingEnabled?: boolean // to enable screenshot recording function\r\n isScreenshotEnabled?: boolean // to enable screenshot function\r\n isShareContextDataEnabled?: boolean // to enable share contextual data function\r\n isThankYouPageDisabled?: boolean // to disable thank you page\r\n maxHeight?: number | string // applicable for Modal and Callout ui types\r\n maxWidth?: number // applicable for Modal and Callout ui types\r\n minHeight?: number // applicable for Modal and Callout ui types\r\n minWidth?: number // applicable for Modal and Callout ui types\r\n myFeedbackUrl?: string // require if isMyFeedbackEnabled is true\r\n privacyUrl?: string // url for privacy link\r\n retentionDurationDays?: number // default 30 days, must be in range of 0 - 455\r\n scenarioConfig?: InAppFeedbackScenarioConfig // option to set scenarios or categorisation form elements\r\n screenshotInfo?: IFeedbackScreenshotInfo\r\n supportUrl?: string // url for contact support link\r\n width?: number // applicable for modal, side pane, and callout\r\n}\r\n\r\nexport interface IFeedbackTelemetry {\r\n audience?: string\r\n audienceGroup?: string\r\n browser?: string // Browser name.\r\n browserVersion?: string // Browser version number.\r\n channel?: string\r\n clientCountryCode?: string\r\n dataCenter?: string // Data center identifier.\r\n deviceId?: string\r\n deviceType?: string\r\n errorClassification?: string\r\n errorCode?: string\r\n errorName?: string\r\n featureArea?: string\r\n flights?: string\r\n flightSource?: string\r\n fundamentalArea?: string\r\n installationType?: string\r\n isUserSubscriber?: boolean\r\n officeArchitecture?: string\r\n officeBuild?: string\r\n officeEditingLang?: number\r\n officeUILang?: number\r\n osBitness?: number\r\n osBuild?: string\r\n osUserLang?: number\r\n platform?: string\r\n processSessionId?: string\r\n ringId?: number\r\n sku?: string\r\n sourceContext?: string\r\n sourcePageName?: string // Source web page name.\r\n sourcePageURI?: string // Source web page URI.\r\n systemManufacturer?: string\r\n systemProductName?: string\r\n}\r\n\r\nexport type ThemeType = string | Theme;\r\n\r\nexport interface IThemeOptions {\r\n baseTheme?: ThemeType // Pre-defined theme or a custom theme\r\n colorScheme?: ThemeType // Undefined, pre-defined theme color, or a new color theme.\r\n}\r\n\r\nexport interface IFeedbackInitOptions {\r\n appId?: number // Required, an ID that uniquely identify your app in OCV\r\n ageGroup?: FeedbackAgeGroup // Must be dynamically fetched from the host app, Required if authentication type is MSA\r\n authenticationType?: FeedbackAuthenticationType // Required and must be fetched by the host app\r\n callbackFunctions?: IFeedbackCallbackFunctions // Set of callback funtions\r\n clientFeedbackId?: string // If not provided we will generate a uuidv4 for this property\r\n clientName?: string // Name of your app that has onboarded with Centro\r\n feedbackConfig?: IFeedbackConfig\r\n isProduction?: boolean // Determine which environment your feedback will be sent to in OCV\r\n telemetry?: IFeedbackTelemetry // Telemetry is optional, the host app needs to set their own telemetry data\r\n tenantId?: string // Must be dynamically fetched from the host app, required if authentication type is AAD\r\n themeOptions?: IThemeOptions // Required to pass in the theme eg. 'WindowsLight'\r\n userId?: string // Must be dynamically fetched from the host app, required if authentication type is AAD\r\n}\r\n","/* eslint-disable no-console */\r\nimport {\r\n FeedbackAgeGroup,\r\n FeedbackAuthenticationType,\r\n FeedbackHostPlatformType,\r\n FeedbackPolicyValue,\r\n FeedbackUiType,\r\n IFeedbackInitOptions,\r\n InAppFeedbackScenarioType,\r\n OcvFeedbackType,\r\n InAppFeedbackQuestionUiType,\r\n InAppFeedbackQuestionUiBehaviour,\r\n} from './FeedbackTypes';\r\n\r\nexport const OCV_MICROSOFT_APP_ID = 2482;\r\nexport const OCV_MICROSOFT_CLIENT_NAME = 'MicrosoftAdvertising';\r\n\r\nexport const defaultThumbUpFeedbackOptions: IFeedbackInitOptions = {\r\n ageGroup: FeedbackAgeGroup.Adult,\r\n authenticationType: FeedbackAuthenticationType.AAD,\r\n feedbackConfig: {\r\n complianceChecks: {\r\n connectedExperiences: FeedbackPolicyValue.Enabled,\r\n policyAllowContact: FeedbackPolicyValue.Enabled,\r\n policyAllowContent: FeedbackPolicyValue.Enabled,\r\n policyAllowFeedback: FeedbackPolicyValue.Enabled,\r\n policyAllowScreenshot: FeedbackPolicyValue.Enabled,\r\n policyAllowSurvey: FeedbackPolicyValue.Enabled,\r\n },\r\n feedbackUiType: FeedbackUiType.Modal,\r\n initialFeedbackType: OcvFeedbackType.Smile,\r\n hostPlatform: FeedbackHostPlatformType.Web,\r\n isDisplayed: false,\r\n isEmailCollectionEnabled: false,\r\n isFeedbackForumEnabled: false,\r\n isFileUploadEnabled: false,\r\n isMyFeedbackEnabled: false,\r\n isScreenshotEnabled: false,\r\n isScreenRecordingEnabled: false,\r\n isShareContextDataEnabled: true,\r\n isThankYouPageDisabled: true,\r\n maxHeight: 'calc(100% - 32px)',\r\n scenarioConfig: {\r\n isScenarioEnabled: true,\r\n scenarioType: InAppFeedbackScenarioType.AIThumbsUp,\r\n },\r\n },\r\n themeOptions: { baseTheme: 'FabricDefaultTheme' },\r\n isProduction: true,\r\n appId: 50819,\r\n clientName: 'OcvFeedbackDemoHostingApp',\r\n};\r\n\r\nexport const defaultThumbDownFeedbackOptions: IFeedbackInitOptions = {\r\n ageGroup: FeedbackAgeGroup.Adult,\r\n authenticationType: FeedbackAuthenticationType.AAD,\r\n feedbackConfig: {\r\n complianceChecks: {\r\n connectedExperiences: FeedbackPolicyValue.Enabled,\r\n policyAllowContact: FeedbackPolicyValue.Enabled,\r\n policyAllowContent: FeedbackPolicyValue.Enabled,\r\n policyAllowFeedback: FeedbackPolicyValue.Enabled,\r\n policyAllowScreenshot: FeedbackPolicyValue.Enabled,\r\n policyAllowSurvey: FeedbackPolicyValue.Enabled,\r\n },\r\n feedbackUiType: FeedbackUiType.Modal,\r\n initialFeedbackType: OcvFeedbackType.Frown,\r\n hostPlatform: FeedbackHostPlatformType.Web,\r\n isDisplayed: false,\r\n isEmailCollectionEnabled: false,\r\n isFeedbackForumEnabled: false,\r\n isFileUploadEnabled: false,\r\n isMyFeedbackEnabled: false,\r\n isScreenshotEnabled: false,\r\n isScreenRecordingEnabled: false,\r\n isShareContextDataEnabled: true,\r\n isThankYouPageDisabled: true,\r\n maxHeight: 'calc(100% - 32px)',\r\n scenarioConfig: {\r\n isScenarioEnabled: true,\r\n scenarioType: InAppFeedbackScenarioType.AIThumbsDown,\r\n },\r\n },\r\n themeOptions: { baseTheme: 'FabricDefaultTheme' },\r\n isProduction: true,\r\n appId: 50819,\r\n clientName: 'OcvFeedbackDemoHostingApp',\r\n};\r\n\r\nexport const defaultProductFeedbackOptions: IFeedbackInitOptions = {\r\n ageGroup: FeedbackAgeGroup.Adult,\r\n authenticationType: FeedbackAuthenticationType.AAD,\r\n feedbackConfig: {\r\n complianceChecks: {\r\n connectedExperiences: FeedbackPolicyValue.Enabled,\r\n policyAllowContact: FeedbackPolicyValue.Enabled,\r\n policyAllowContent: FeedbackPolicyValue.Enabled,\r\n policyAllowFeedback: FeedbackPolicyValue.Enabled,\r\n policyAllowScreenshot: FeedbackPolicyValue.Enabled,\r\n policyAllowSurvey: FeedbackPolicyValue.Enabled,\r\n },\r\n feedbackUiType: FeedbackUiType.Modal,\r\n initialFeedbackType: OcvFeedbackType.Idea,\r\n hostPlatform: FeedbackHostPlatformType.Web,\r\n isDisplayed: false,\r\n isEmailCollectionEnabled: false,\r\n isFeedbackForumEnabled: false,\r\n isFileUploadEnabled: false,\r\n isMyFeedbackEnabled: false,\r\n isScreenshotEnabled: false,\r\n isScreenRecordingEnabled: false,\r\n isShareContextDataEnabled: true,\r\n isThankYouPageDisabled: true,\r\n maxHeight: 'calc(100% - 32px)',\r\n scenarioConfig: {\r\n isScenarioEnabled: true,\r\n scenarioType: InAppFeedbackScenarioType.Custom,\r\n questionDetails: {\r\n questionUiType: InAppFeedbackQuestionUiType.SingleSelect,\r\n questionInstruction: {\r\n displayedString: 'How satisfied are you with Chat Copilot for Microsoft Advertising?',\r\n displayedStringInEnglish: 'How satisfied are you with Chat Copilot for Microsoft Advertising?',\r\n },\r\n questionOptions: [{\r\n displayedString: 'Very Satisfied',\r\n displayedStringInEnglish: 'Very Satisfied',\r\n }, {\r\n displayedString: 'Moderately Satisfied',\r\n displayedStringInEnglish: 'Moderately Satisfied',\r\n }, {\r\n displayedString: 'Neither satisfied nor dissatisfied',\r\n displayedStringInEnglish: 'Neither satisfied nor dissatisfied',\r\n }, {\r\n displayedString: 'Moderately Dissatisfied',\r\n displayedStringInEnglish: 'Moderately Dissatisfied',\r\n }, {\r\n displayedString: 'Very Dissatisfied',\r\n displayedStringInEnglish: 'Very Dissatisfied',\r\n }],\r\n questionUiBehaviour: [InAppFeedbackQuestionUiBehaviour.CommentRequiredWithLastOption],\r\n },\r\n },\r\n },\r\n themeOptions: { baseTheme: 'FabricDefaultTheme' },\r\n isProduction: true,\r\n appId: 50819,\r\n clientName: 'OcvFeedbackDemoHostingApp',\r\n};\r\n","import { useAdsCopilotContext } from '../components/ads-copilot-context-provider';\r\n\r\nexport function useAdsCopilotPilotMap() {\r\n const context = useAdsCopilotContext();\r\n return context?.pilotMap || {};\r\n}\r\n","import { useAdsCopilotContext } from '../components/ads-copilot-context-provider';\r\n\r\nexport function useAdsCopilotIsSendDisabled() {\r\n const context = useAdsCopilotContext();\r\n return context?.isSendDisabled;\r\n}\r\n","import {\r\n bootstrapFeature,\r\n ConfigUpdatedListener,\r\n DataSourceSetter,\r\n initialize,\r\n preloadFeature,\r\n RequestFunction,\r\n} from '@ms/centro-hvc-loader';\r\nimport { IRuntimeHvcStaticConfig } from '@ms/centro-hvc-loader/dist/runtime/configuration/runtimeDataSources';\r\n\r\nimport { IFeedbackInitOptions } from './FeedbackTypes';\r\n\r\nconst CentroUrl = {\r\n Prod: 'https://admin.microsoft.com',\r\n CI: 'https://admin-ignite.microsoft.com',\r\n};\r\n\r\nconst InAppFeedbackInitOptionsListener = (() => {\r\n const feedbackData: IFeedbackInitOptions = {};\r\n // list of function provided to update Feedback configuration\r\n const listeners: ConfigUpdatedListener[] = [];\r\n\r\n // register listener to Centro to enable dynamic data passing\r\n const register = (listener?: ConfigUpdatedListener): Readonly> => {\r\n if (listener) {\r\n listeners.push(listener);\r\n }\r\n return feedbackData;\r\n };\r\n\r\n // unregister listener from Centro\r\n const unregister = (listener: ConfigUpdatedListener): void => {\r\n const index = listeners.indexOf(listener);\r\n if (index > -1) {\r\n listeners.splice(index, 1);\r\n }\r\n };\r\n\r\n const updateFeedbackObject = (updatedInAppFeedbackInitOptions: IFeedbackInitOptions) => {\r\n Object.assign(feedbackData, updatedInAppFeedbackInitOptions);\r\n listeners.forEach((listener: ConfigUpdatedListener) => listener(feedbackData));\r\n };\r\n\r\n const configObject = {\r\n register,\r\n unregister,\r\n updateFeedbackObject,\r\n };\r\n\r\n return configObject;\r\n})();\r\n\r\nexport interface InAppFeedBackInfo {\r\n hostName: string\r\n language: string\r\n inAppFeedbackRef?: string\r\n}\r\n\r\nfunction getDivToMountHvc(inAppFeedbackRef?: string) {\r\n let hvcDiv;\r\n\r\n if (inAppFeedbackRef) {\r\n hvcDiv = document.getElementById(inAppFeedbackRef);\r\n }\r\n\r\n if (!hvcDiv) {\r\n hvcDiv = document.createElement('div');\r\n hvcDiv.id = 'inapp-feedback-ref';\r\n document.body.appendChild(hvcDiv);\r\n }\r\n\r\n return hvcDiv;\r\n}\r\n\r\nexport function initializeInAppFeedback(feedbackInfo: InAppFeedBackInfo) {\r\n (async () => {\r\n const OcvInAppFeedback = 'ocv-inapp-feedback';\r\n const { hostName, language, inAppFeedbackRef } = feedbackInfo;\r\n\r\n const runtimeStaticConfig: IRuntimeHvcStaticConfig = {\r\n hostName,\r\n locale: language,\r\n\r\n // All perf log will be prefixed with this string.\r\n // So that when we analysis perf logs, we know that those logs are coming from HVC running in your environment.\r\n perfPrefix: `OcvFeedback${hostName}`,\r\n };\r\n\r\n const centroParams = {\r\n // Please use Centro Prod Url even for development to get the latest released of the HVC\r\n // Centro CI Url can also be used for unreleased features\r\n centroEnvironmentBaseUrl: CentroUrl.Prod,\r\n centroAdapters: {\r\n runtimeStaticConfig,\r\n request: ((() => {}) as unknown) as RequestFunction,\r\n },\r\n centroHvcData: '',\r\n forHostVersion: 'v2', // current stable major verion\r\n hvcVersion: '', // getting the latest version\r\n };\r\n\r\n await initialize(centroParams).catch((e) => {\r\n // eslint-disable-next-line no-console\r\n console.error(`In-App Feedback Initialization Failed: ${e}`);\r\n });\r\n\r\n await preloadFeature({ featureName: OcvInAppFeedback });\r\n\r\n const dataSources = (sd: DataSourceSetter) => {\r\n sd('centro.hvc.feedback.initOptions', InAppFeedbackInitOptionsListener as any);\r\n };\r\n\r\n const bootstrapper = await bootstrapFeature({\r\n featureName: OcvInAppFeedback,\r\n setAdditionalDataSource: dataSources,\r\n });\r\n\r\n await bootstrapper.main(getDivToMountHvc(inAppFeedbackRef));\r\n\r\n // eslint-disable-next-line no-console\r\n console.log('In-App Feedback Initialization Completed');\r\n })();\r\n}\r\n\r\nexport const updateFeedbackOptions = InAppFeedbackInitOptionsListener.updateFeedbackObject;\r\n","import { useEffect, useCallback } from 'react';\r\nimport { Message } from 'botframework-directlinejs';\r\nimport { IFeedbackInitOptions } from './FeedbackTypes';\r\nimport { InAppFeedBackInfo, initializeInAppFeedback as defaultInitializeInAppFeedback, updateFeedbackOptions as defaultUpdateFeedbackOptions } from './CentroFeedbackFunctions';\r\nimport { IFeedbackData } from '../FeedbackButtons';\r\nimport { IConversationThreadProps } from '../types';\r\n\r\nexport interface IOCVFeedback {\r\n updateFeedbackOptions?: typeof defaultUpdateFeedbackOptions;\r\n initializeInAppFeedback?: typeof defaultInitializeInAppFeedback;\r\n thumbDownFeedbackOptions?: IFeedbackInitOptions;\r\n thumbUpFeedbackOptions?: IFeedbackInitOptions;\r\n productFeedbackOptions?: IFeedbackInitOptions;\r\n onFeedbackButtonClick?: IConversationThreadProps['onFeedbackButtonClick'];\r\n locale?: string,\r\n}\r\n\r\nexport const getHostName = (props: IOCVFeedback) => {\r\n const {\r\n thumbDownFeedbackOptions,\r\n thumbUpFeedbackOptions,\r\n productFeedbackOptions,\r\n } = props;\r\n\r\n return thumbDownFeedbackOptions?.clientName || thumbUpFeedbackOptions?.clientName || productFeedbackOptions?.clientName || '';\r\n};\r\n\r\nlet ocvInited = false;\r\n\r\nexport const useOcvFeedback = (props: IOCVFeedback = {\r\n initializeInAppFeedback: defaultInitializeInAppFeedback,\r\n updateFeedbackOptions: defaultUpdateFeedbackOptions,\r\n thumbDownFeedbackOptions: undefined,\r\n thumbUpFeedbackOptions: undefined,\r\n productFeedbackOptions: undefined,\r\n locale: 'en',\r\n}) => {\r\n const {\r\n thumbDownFeedbackOptions,\r\n thumbUpFeedbackOptions,\r\n productFeedbackOptions,\r\n onFeedbackButtonClick,\r\n initializeInAppFeedback = defaultInitializeInAppFeedback,\r\n updateFeedbackOptions = defaultUpdateFeedbackOptions,\r\n locale,\r\n } = props || {};\r\n\r\n useEffect(() => {\r\n const feedbackInfo: InAppFeedBackInfo = {\r\n hostName: getHostName(props),\r\n language: locale || 'en',\r\n };\r\n\r\n if (!ocvInited) {\r\n ocvInited = true;\r\n initializeInAppFeedback(feedbackInfo);\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n const onFeedbackButtonClickWithOCVFeedback = useCallback((data: IFeedbackData, message: Message) => {\r\n const { currentFeedback } = data || {};\r\n if (currentFeedback === 'ThumbsDown' && thumbDownFeedbackOptions) {\r\n thumbDownFeedbackOptions.feedbackConfig = { ...thumbDownFeedbackOptions.feedbackConfig, isDisplayed: true };\r\n updateFeedbackOptions(thumbDownFeedbackOptions);\r\n } else if (currentFeedback === 'ThumbsUp' && thumbUpFeedbackOptions) {\r\n thumbUpFeedbackOptions.feedbackConfig = { ...thumbUpFeedbackOptions.feedbackConfig, isDisplayed: true };\r\n updateFeedbackOptions(thumbUpFeedbackOptions);\r\n }\r\n\r\n if (onFeedbackButtonClick) {\r\n onFeedbackButtonClick(data, message);\r\n }\r\n }, [onFeedbackButtonClick, thumbDownFeedbackOptions, thumbUpFeedbackOptions, updateFeedbackOptions]);\r\n\r\n const onProductFeedbackClick = useCallback(() => {\r\n if (productFeedbackOptions) {\r\n productFeedbackOptions.feedbackConfig = { ...productFeedbackOptions.feedbackConfig, isDisplayed: true };\r\n updateFeedbackOptions(productFeedbackOptions);\r\n }\r\n }, [productFeedbackOptions, updateFeedbackOptions]);\r\n\r\n return {\r\n onFeedbackButtonClick: onFeedbackButtonClickWithOCVFeedback,\r\n onProductFeedbackClick,\r\n };\r\n};\r\n","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"underscore\"), require(\"@aria/webjs-sdk\"), require(\"@bingads-webui/listener\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"underscore\", \"@aria/webjs-sdk\", \"@bingads-webui/listener\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"underscore\"), require(\"@aria/webjs-sdk\"), require(\"@bingads-webui/listener\")) : factory(root[\"underscore\"], root[\"@aria/webjs-sdk\"], root[\"@bingads-webui/listener\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE__3__, __WEBPACK_EXTERNAL_MODULE__4__, __WEBPACK_EXTERNAL_MODULE__5__) {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","export { AriaListener } from './src/aria-listener';\r\n","import _ from 'underscore';\r\nimport { AWTLogManager, AWT_NEAR_REAL_TIME, AWTSessionState } from '@aria/webjs-sdk';\r\nimport { Listener } from '@bingads-webui/listener';\r\nimport { defaultConfig } from './default-config';\r\n\r\nconst activeListeners = [];\r\nlet flushEventAttached = false;\r\nfunction registerListener(listener) {\r\n activeListeners.push(listener);\r\n\r\n if (!flushEventAttached) {\r\n window.addEventListener('beforeunload', () => {\r\n activeListeners.forEach(l => l.flushLogs(false));\r\n AWTLogManager.flush();\r\n });\r\n\r\n flushEventAttached = true;\r\n }\r\n}\r\n\r\n/**\r\n * Create an instance of an Aria listener\r\n */\r\nexport class AriaListener extends Listener {\r\n constructor(options = {}) {\r\n super(options);\r\n this.options = _.defaults(options, {\r\n flushInterval: defaultConfig.flushInterval,\r\n batchSize: defaultConfig.batchSize,\r\n enableSessionTracking: defaultConfig.enableSessionTracking,\r\n });\r\n this.formatters = _.defaults(this.options.formatters || {}, defaultConfig.formatters);\r\n this.filters = this.options.filters || [];\r\n this.logTableNames = this.options.logTableNames;\r\n this.defaultLogCategory = this.options.defaultLogCategory;\r\n }\r\n\r\n /**\r\n * init aria listener\r\n * @returns {undefined} - no returns\r\n */\r\n init() {\r\n if (!this.options.tenantToken || this.initialized) {\r\n return;\r\n }\r\n\r\n this.logs = [];\r\n\r\n // Setup AriaTelemetry\r\n AWTLogManager.initialize(this.options.tenantToken);\r\n AWTLogManager.setTransmitProfile(AWT_NEAR_REAL_TIME);\r\n\r\n this.defaultLogger = AWTLogManager.getLogger(this.options.tenantToken);\r\n\r\n if (this.options.enableSessionTracking) {\r\n this.defaultLogger.logSession(AWTSessionState.Started);\r\n }\r\n\r\n if (!AWTLogManager.trackedListenerRefs) {\r\n AWTLogManager.trackedListenerRefs = { count: 0 };\r\n }\r\n\r\n setInterval(() => this.flushBatch(), this.options.flushInterval);\r\n registerListener(this);\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * register instance for final flush of logs to Aria\r\n * @private\r\n * @returns {undefined} - no returns\r\n */\r\n registerForTeardown() {\r\n if (this.registeredForTeardown || !this.initialized) {\r\n return;\r\n }\r\n\r\n this.registeredForTeardown = true;\r\n AWTLogManager.trackedListenerRefs.count += 1;\r\n }\r\n\r\n /**\r\n * flushes logs to Aria and tears down the logger\r\n * @returns {undefined} - no returns\r\n */\r\n teardown() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n this.flushAll(false);\r\n this.initialized = false;\r\n\r\n if (this.options.enableSessionTracking) {\r\n this.defaultLogger.logSession(AWTSessionState.Ended);\r\n }\r\n\r\n if (this.registeredForTeardown) {\r\n AWTLogManager.trackedListenerRefs.count -= 1;\r\n }\r\n\r\n this.release();\r\n }\r\n\r\n /**\r\n * flushes logs to aria telemetry logger\r\n * @param {bool} batchLogs - specify if the logs should be flushed in batches\r\n * @private\r\n * @returns {undefined} - no returns\r\n */\r\n flushLogs(batchLogs) {\r\n const useBatching = batchLogs && (this.logs.length > this.options.batchSize);\r\n const batchSize = useBatching ? this.options.batchSize : this.logs.length;\r\n const logsToFlush = this.logs.splice(0, batchSize);\r\n _.each(logsToFlush, (log) => {\r\n this.defaultLogger.logEvent(log);\r\n });\r\n }\r\n\r\n /**\r\n * If there are no active listeners then tear down the underlying logger.\r\n * @private\r\n * @returns {undefined} - no returns\r\n */\r\n release() {\r\n if (AWTLogManager.trackedListenerRefs.count === 0) {\r\n AWTLogManager.flushAndTeardown();\r\n }\r\n }\r\n\r\n /**\r\n * writes logs to the listener\r\n * @param {object} logMessage - logs to be written\r\n * @returns {undefined} - no returns\r\n */\r\n write(logMessage) {\r\n if (!this.initialized || this.filterLogs(logMessage)) {\r\n return;\r\n }\r\n\r\n const categoryName = this.getCategoryName(logMessage.logCategory);\r\n const formattedMsg = this.formatLogs(logMessage);\r\n\r\n this.logs.push({\r\n name: this.logTableNames[categoryName].name,\r\n properties: formattedMsg,\r\n });\r\n }\r\n\r\n /**\r\n * @private\r\n * @returns {undefined} - no returns\r\n */\r\n flushAll() {\r\n this.flushLogs(false);\r\n }\r\n\r\n /**\r\n * @private\r\n * @returns {undefined} - no returns\r\n */\r\n flushBatch() {\r\n this.flushLogs(true);\r\n }\r\n\r\n /**\r\n * @private\r\n * @param {object} logCategory - logs to be written\r\n * @returns {undefined} - no returns\r\n */\r\n getCategoryName(logCategory) {\r\n const isValidLogCategory = _.has(this.logTableNames, logCategory);\r\n return isValidLogCategory ? logCategory : this.defaultLogCategory;\r\n }\r\n}\r\n","module.exports = __WEBPACK_EXTERNAL_MODULE__3__;","module.exports = __WEBPACK_EXTERNAL_MODULE__4__;","module.exports = __WEBPACK_EXTERNAL_MODULE__5__;","import { AriaPropertyFormatter } from './formatters/log-property-formatter';\r\n\r\nconst propertyFormatter = new AriaPropertyFormatter();\r\n\r\nexport const defaultConfig = {\r\n formatters: { propertyFormatter },\r\n enableSessionTracking: true,\r\n flushInterval: 5000,\r\n batchSize: 50,\r\n};\r\n","import _ from 'underscore';\r\nimport { Formatter } from '@bingads-webui/listener';\r\n\r\nexport class AriaPropertyFormatter extends Formatter {\r\n format(logMessage) {\r\n return _.mapObject(logMessage, val => ({\r\n value: val,\r\n }));\r\n }\r\n}\r\n","export {\r\n AutoRefreshToken, autoRefreshTokenInstance\r\n} from './src/index';\r\n","/* eslint-disable no-param-reassign */\r\nimport $ from 'jquery';\r\nimport { http } from '@bingads-webui/http-util';\r\n\r\nconst checkFrequencyInMinutes = 120; // 2 hours\r\n\r\n// max count is 1 week.\r\n// 7 * 24 = 168 hours.\r\n// 168 * 60 = 10080 minutes.\r\n// 10080 / 120 = 84 requests every 2 hours.\r\nconst autoRefreshTokenMaxCount = 10080 / checkFrequencyInMinutes;\r\n\r\nconst WorkerBlob = URL.createObjectURL(new Blob(\r\n [\r\n '(',\r\n // eslint-disable-next-line func-names\r\n function () {\r\n onmessage = function (e) {\r\n const url = e.data[0];\r\n const checkFrequency = e.data[1];\r\n const autoRefreshTokenMaxCountInternal = e.data[2];\r\n const sessionId = e.data[3];\r\n\r\n let lastRefreshTimestamp = Date.now();\r\n\r\n let autoRefreshTokenCounter = 0;\r\n\r\n setInterval(() => {\r\n const xhr = new XMLHttpRequest();\r\n\r\n xhr.open('GET', url, true);\r\n xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');\r\n xhr.setRequestHeader('x-ms-sessionid', sessionId);\r\n\r\n xhr.onreadystatechange = () => {\r\n if (xhr.readyState === 4 && xhr.status === 200) {\r\n autoRefreshTokenCounter += 1;\r\n lastRefreshTimestamp = Date.now();\r\n\r\n postMessage([JSON.parse(xhr.responseText)]);\r\n }\r\n };\r\n\r\n if (autoRefreshTokenCounter <= autoRefreshTokenMaxCountInternal) {\r\n const currentTime = Date.now();\r\n\r\n // get the hours difference between last successful refresh and current time.\r\n const hoursDiff = Math.abs(currentTime - lastRefreshTimestamp) / (60 * 60 * 1000);\r\n if (hoursDiff < 24) {\r\n xhr.send();\r\n }\r\n }\r\n }, checkFrequency);\r\n };\r\n }.toString(),\r\n ')()',\r\n ],\r\n { type: 'application/javascript' }\r\n));\r\n\r\nconst updateContexts = ({\r\n newSmallToken,\r\n serverContext,\r\n config,\r\n pageContext,\r\n setNewServerContext,\r\n}) => {\r\n serverContext.Token = newSmallToken;\r\n config.set('Token', newSmallToken);\r\n config.set('odata.token', newSmallToken);\r\n pageContext.Token = newSmallToken;\r\n\r\n if (window.campaignODataConfigs) {\r\n window.campaignODataConfigs.Token = newSmallToken;\r\n }\r\n\r\n if (setNewServerContext) {\r\n setNewServerContext(newSmallToken);\r\n }\r\n};\r\n\r\nexport class AutoRefreshToken {\r\n constructor({\r\n serverContext,\r\n setNewServerContext,\r\n PageContext,\r\n config,\r\n appActivity,\r\n }) {\r\n this.http = http;\r\n this.autoRefreshTaskWorker = null;\r\n this.autoRefreshTokenCounter = 0;\r\n this.checkFrequency = checkFrequencyInMinutes * 1000 * 60;\r\n this.url = `${window.location.origin}/campaign/pagecontext/refreshsmalltokenandupdatecookie${window.location.search}`;\r\n this.serverContext = serverContext;\r\n this.setNewServerContext = setNewServerContext;\r\n this.PageContext = PageContext;\r\n this.config = config;\r\n this.appActivity = appActivity;\r\n this.lastRefreshTimestamp = Date.now();\r\n\r\n if (window.Worker) {\r\n this.autoRefreshTaskWorker = new Worker(WorkerBlob);\r\n }\r\n }\r\n\r\n start() {\r\n if (this.autoRefreshTaskWorker) {\r\n this.autoRefreshTaskWorker.postMessage([\r\n this.url,\r\n this.checkFrequency,\r\n autoRefreshTokenMaxCount,\r\n this.PageContext.sessionId,\r\n ]);\r\n\r\n this.autoRefreshTaskWorker.onmessage = (e) => {\r\n if (e.data[0]) {\r\n this.appActivity.trace(`AutoRefreshToken received current token: ${e.data[0].Token}...`, 'auto-refresh-token');\r\n\r\n const token = e.data[0].Token;\r\n const currentAutoRefreshTokenCount = e.data[1];\r\n\r\n updateContexts({\r\n newSmallToken: token,\r\n serverContext: this.serverContext,\r\n pageContext: this.PageContext,\r\n config: this.config,\r\n setNewServerContext: this.setNewServerContext,\r\n });\r\n\r\n if (currentAutoRefreshTokenCount > autoRefreshTokenMaxCount) {\r\n this.stop();\r\n }\r\n } else {\r\n this.appActivity.trace('AutoRefreshToken received undefined for Token', 'auto-refresh-token');\r\n }\r\n };\r\n } else {\r\n this.appActivity.trace('AutoRefreshToken cannot start since web worker is unavailable', 'auto-refresh-token');\r\n this.stop();\r\n }\r\n\r\n $(window).on('unload', () => this.stop());\r\n }\r\n\r\n stop() {\r\n if (this.autoRefreshTaskWorker !== null) {\r\n this.autoRefreshTaskWorker.terminate();\r\n this.autoRefreshTaskWorker = null;\r\n }\r\n }\r\n\r\n refresh() {\r\n this.autoRefreshTokenCounter = 0;\r\n }\r\n}\r\n\r\nexport const autoRefreshTokenInstance = new AutoRefreshToken({});\r\n","module.exports = __WEBPACK_EXTERNAL_MODULE__43__;","module.exports = __WEBPACK_EXTERNAL_MODULE__44__;","module.exports = __WEBPACK_EXTERNAL_MODULE__17__;","\r\n\r\nexport { showPopup } from './src/index';\r\n\r\nexport { PositioningMethod, FixedPositionLocation } from './src/position-options';\r\n","import Promise from 'bluebird';\r\nimport { PopoverView } from '@bingads-webui/popover';\r\nimport { getPopupPosition } from './get-popup-position';\r\n\r\n/**\r\n * Show popup with provided template in the most suitable position\r\n * To close the popup, you can either click the close icon or outside of document\r\n * or trigger remove event for the contentView\r\n *\r\n * @param {Object} param - An object containing these default options:\r\n * @param {Object} param.container - the place where to render the popup, required\r\n * @param {function} param.contentView - inner content, must be deterministic view\r\n * you can use following ways to generate deterministic view:\r\n * for template, please use :\r\n * { DeterministicViewForHtml } from '@bingads-webui/deterministic-wrapper-view'.\r\n * for backbone view, please use :\r\n * { DeterministicViewForBackBoneView } from '@bingads-webui/deterministic-wrapper-view'\r\n * @param {PositioningMethod} param.positioningMethod - which method to use to\r\n * set popup position, default to be PositioningMethod.fit\r\n * @param {Object} param.positioningOptions - params for positioning\r\n * @param {number} param.positioningOptions.anchorPosition - used to replace position() for anchor\r\n * {height, width, top, left}\r\n * @param {number} param.positioningOptions.threshold - used in PositionMethod.fit only. Optional.\r\n * Specifies the threshold for acceptable measurement of whether the component fits\r\n * inside the container or not. It is specified in relative units [0..1].\r\n * 1 means 100% of the component's area must fit inside the container;\r\n * 0 means 0% can fit and position will be acceptable. If threshold is not specified, 1 is assumed\r\n * same format as backbone event settings\r\n * @param {String[]} param.classes - custom classes for popup container\r\n * @param {number} param.positioningOptions.location - used in PositionMethod.fixed only.\r\n * Required in fixed option, it can be any value of the { FixedPositionLocation }\r\n * @param {jQuery} param.anchor - the element as position base for popup position\r\n *\r\n * @returns {Promise} promise which will trigger resolve after click or save\r\n */\r\nexport function showPopup({\r\n container,\r\n contentView,\r\n positioningMethod,\r\n positioningOptions,\r\n classes,\r\n anchor,\r\n resolveOnceRendered = false,\r\n positioningClass,\r\n}) {\r\n const getPositionAutomatically = (view) => {\r\n const { left, top } = getPopupPosition(\r\n positioningMethod,\r\n positioningOptions, container, anchor, view.$el\r\n );\r\n return {\r\n isAbsolute: true,\r\n left,\r\n top,\r\n };\r\n };\r\n\r\n return new Promise((resolveCallback) => {\r\n const options = {\r\n target: anchor,\r\n position: getPositionAutomatically,\r\n containerClassName: classes,\r\n };\r\n const currentPopup = new PopoverView(options);\r\n\r\n currentPopup.setContent(contentView);\r\n\r\n if (positioningClass) currentPopup.$el.addClass(positioningClass);\r\n\r\n if (resolveOnceRendered) {\r\n contentView.on('remove', () => {\r\n currentPopup.off('removed');\r\n currentPopup.remove();\r\n });\r\n resolveCallback(currentPopup);\r\n } else {\r\n currentPopup.once('removed', () => {\r\n resolveCallback();\r\n });\r\n\r\n contentView.on('remove', (result) => {\r\n resolveCallback(result);\r\n currentPopup.off('removed');\r\n currentPopup.remove();\r\n });\r\n }\r\n container.append(currentPopup.el);\r\n });\r\n}\r\n","module.exports = __WEBPACK_EXTERNAL_MODULE__48__;","import $ from 'jquery';\r\nimport _ from 'underscore';\r\n\r\nimport { FixedPositionLocation, PositioningMethod } from './position-options';\r\n\r\nconst offsetPositions = ['relative', 'absolute', 'fixed'];\r\n\r\nfunction getDimensions(element) {\r\n const $element = $(element);\r\n\r\n return {\r\n width: $element.outerWidth(),\r\n height: $element.outerHeight(),\r\n };\r\n}\r\n\r\nfunction getBorderOffsets(element) {\r\n const borderLeft = parseFloat(element.css('border-left-width'));\r\n const borderTop = parseFloat(element.css('border-top-width'));\r\n\r\n return {\r\n leftBorderOffset: borderLeft,\r\n topBorderOffset: borderTop,\r\n };\r\n}\r\n\r\nfunction getOffsetWithBorderOffsets(element) {\r\n const { left, top } = element.offset();\r\n const {\r\n leftBorderOffset,\r\n topBorderOffset,\r\n } = getBorderOffsets(element);\r\n\r\n return {\r\n left: left + leftBorderOffset,\r\n top: top + topBorderOffset,\r\n };\r\n}\r\n\r\nfunction getContainerOffsetElement(container) {\r\n // if absolute position will be based off container, return container\r\n // if not, then return container's offset parent\r\n return _.contains(offsetPositions, container.css('position')) ?\r\n container : container.offsetParent();\r\n}\r\n\r\nfunction getParentOffset(container, anchor, anchorPosition) {\r\n const containerOffsetParent = getContainerOffsetElement(container);\r\n const anchorOffsetParent = anchor && anchor.offsetParent && anchor.offsetParent();\r\n\r\n // if anchorPosition was specified, it was meant for handling different parents manually,\r\n // so don't need to get an offset\r\n if (!_.isEmpty(anchorPosition) ||\r\n // if an offsetParent doesn't exist, we can't get the offset, so return 0s\r\n !containerOffsetParent || !containerOffsetParent.length ||\r\n !anchorOffsetParent || !anchorOffsetParent.length ||\r\n // if both are the same, we don't need the offset\r\n containerOffsetParent.get(0) === anchorOffsetParent.get(0)) {\r\n return { leftOffset: 0, topOffset: 0 };\r\n }\r\n\r\n const containerOffsetParentPosition = getOffsetWithBorderOffsets(containerOffsetParent);\r\n const anchorOffsetParentPosition = anchorOffsetParent.offset();\r\n\r\n return {\r\n leftOffset: containerOffsetParentPosition.left - anchorOffsetParentPosition.left,\r\n topOffset: containerOffsetParentPosition.top - anchorOffsetParentPosition.top,\r\n };\r\n}\r\n\r\nfunction getBoundingRect(element) {\r\n const position = element.position();\r\n const { width, height } = getDimensions(element);\r\n\r\n return {\r\n top: position.top,\r\n left: position.left,\r\n width,\r\n height,\r\n };\r\n}\r\n\r\nfunction testFit(containerDimensions, elementDimentions, position, { leftOffset, topOffset }) {\r\n const adjustedPosition = {\r\n top: position.top + topOffset,\r\n left: position.left + leftOffset,\r\n };\r\n\r\n // Calculating how much of the element intersects with the container\r\n const verticalFit = Math.max(\r\n 0,\r\n Math.min(containerDimensions.height, adjustedPosition.top + elementDimentions.height) -\r\n Math.max(0, adjustedPosition.top)\r\n ) / elementDimentions.height;\r\n\r\n const horizontalFit = Math.max(\r\n 0,\r\n Math.min(containerDimensions.width, adjustedPosition.left + elementDimentions.width) -\r\n Math.max(0, adjustedPosition.left)\r\n ) / elementDimentions.width;\r\n\r\n return {\r\n verticalFit,\r\n horizontalFit,\r\n get areaFit() {\r\n return verticalFit * horizontalFit;\r\n },\r\n };\r\n}\r\n\r\nfunction getFixedPosition(positionOptions, container, anchor, popupDimensions) {\r\n const { height: elementHeight, width: elementWidth } = popupDimensions;\r\n const { anchorPosition } = positionOptions || { };\r\n const {\r\n left, top, height, width,\r\n } = anchorPosition && !_.isEmpty(anchorPosition) ?\r\n anchorPosition : getBoundingRect(anchor);\r\n const { leftOffset, topOffset } = getParentOffset(container, anchor, anchorPosition);\r\n\r\n const offsetLeft = left - leftOffset;\r\n const offsetTop = top - topOffset;\r\n\r\n switch (positionOptions.location) {\r\n case FixedPositionLocation.bottomLeftCorner: return {\r\n top: offsetTop + height,\r\n left: offsetLeft - elementWidth,\r\n };\r\n case FixedPositionLocation.topRightCorner: return {\r\n top: offsetTop - elementHeight,\r\n left: offsetLeft + width,\r\n };\r\n case FixedPositionLocation.topLeftCorner: return {\r\n top: offsetTop - elementHeight,\r\n left: offsetLeft - elementWidth,\r\n };\r\n case FixedPositionLocation.bottomRightCorner: return {\r\n top: offsetTop + height,\r\n left: offsetLeft + width,\r\n };\r\n case FixedPositionLocation.bottomLeft: return {\r\n top: offsetTop + height,\r\n left: (offsetLeft + width) - elementWidth,\r\n };\r\n case FixedPositionLocation.topRight: return {\r\n top: offsetTop - elementHeight,\r\n left: offsetLeft,\r\n };\r\n case FixedPositionLocation.topLeft: return {\r\n top: offsetTop - elementHeight,\r\n left: (offsetLeft + width) - elementWidth,\r\n };\r\n case FixedPositionLocation.bottomRight:\r\n default: return {\r\n top: offsetTop + height,\r\n left: offsetLeft,\r\n };\r\n }\r\n}\r\n\r\nfunction getFittingPosition(positionOptions, container, anchor, popupDimensions) {\r\n const containerDimensions = getDimensions(container);\r\n const anchorPosition = positionOptions ? positionOptions.anchorPosition : null;\r\n\r\n const positions = [\r\n getFixedPosition(\r\n { location: FixedPositionLocation.bottomRight, anchorPosition },\r\n container, anchor, popupDimensions\r\n ),\r\n getFixedPosition(\r\n { location: FixedPositionLocation.bottomLeft, anchorPosition },\r\n container, anchor, popupDimensions\r\n ),\r\n getFixedPosition(\r\n { location: FixedPositionLocation.topRight, anchorPosition },\r\n container, anchor, popupDimensions\r\n ),\r\n getFixedPosition(\r\n { location: FixedPositionLocation.topLeft, anchorPosition },\r\n container, anchor, popupDimensions\r\n ),\r\n ];\r\n\r\n const threshold = positionOptions && positionOptions.threshold;\r\n\r\n const parentOffset = getParentOffset(container, anchor, anchorPosition);\r\n\r\n // try to find position with 100% fitting\r\n let fittingPosition = _.find(positions, position =>\r\n testFit(containerDimensions, popupDimensions, position, parentOffset).areaFit >= 1);\r\n\r\n // when no 100% fitting and has threshold try to find it with threshold fitting\r\n // threshold is 0, 1\r\n if (!fittingPosition) {\r\n fittingPosition = threshold &&\r\n (_.find(positions, position =>\r\n testFit(\r\n containerDimensions,\r\n popupDimensions,\r\n position,\r\n parentOffset\r\n ).areaFit >= threshold) || positions[0]);\r\n }\r\n\r\n // when no 100% fitting and no threshold or not threshold fitting\r\n // try to find maxmium fitting\r\n if (!fittingPosition) {\r\n fittingPosition = _.max(\r\n positions,\r\n position => testFit(containerDimensions, popupDimensions, position, parentOffset).areaFit\r\n );\r\n }\r\n\r\n return _.pick(fittingPosition, 'left', 'top');\r\n}\r\n\r\nfunction getPositioningMethod(positioningMethod) {\r\n switch (positioningMethod) {\r\n case PositioningMethod.fixed:\r\n return getFixedPosition;\r\n case PositioningMethod.fit:\r\n default:\r\n return getFittingPosition;\r\n }\r\n}\r\n\r\nexport function getPopupPosition(\r\n positioningMethod,\r\n positioningOptions,\r\n container,\r\n anchor,\r\n popupContainer\r\n) {\r\n const popupDimensions = getDimensions(popupContainer);\r\n const { height, width } = popupDimensions;\r\n\r\n // set width-heigh so the positioning isn't broken by the element resizing\r\n if (width && height) {\r\n popupContainer.css({\r\n width,\r\n height,\r\n });\r\n }\r\n\r\n // Hide element so it doesn't affect other dimensions\r\n popupContainer.hide();\r\n\r\n const position = getPositioningMethod(positioningMethod)(\r\n positioningOptions,\r\n container, anchor, popupDimensions\r\n );\r\n\r\n // Show element again\r\n popupContainer.show();\r\n\r\n return position;\r\n}\r\n","/**\r\n * define options for Position Options, useful in PositioningMethod.fixed\r\n * related position towards anchor, which has eight options:\r\n *
FixedPositionLocation.bottomLeft\r\n *
FixedPositionLocation.topRight\r\n *
FixedPositionLocation.topLeft\r\n *
FixedPositionLocation.bottomRightCorner\r\n *
FixedPositionLocation.bottomLeftCorner\r\n *
FixedPositionLocation.topRightCorner\r\n *
FixedPositionLocation.topLeftCorner\r\n *
FixedPositionLocation.bottomRightCorner\r\n *\r\n */\r\nexport const FixedPositionLocation = Object.freeze({\r\n bottomLeft: 'bottomLeft',\r\n topRight: 'topRight',\r\n topLeft: 'topLeft',\r\n bottomRight: 'bottomRight',\r\n bottomLeftCorner: 'bottomLeftCorner',\r\n topRightCorner: 'topRightCorner',\r\n topLeftCorner: 'topLeftCorner',\r\n bottomRightCorner: 'bottomRightCorner',\r\n});\r\n\r\n\r\n/**\r\n * define options for PositioningMethod\r\n * The four possible positions realted to trigger element\r\n * which has two types:\r\n *
PositioningMethod.fixed\r\n *
PositioningMethod.fit\r\n *\r\n */\r\nexport const PositioningMethod = Object.freeze({\r\n fixed: 'fixed',\r\n fit: 'fit',\r\n});\r\n","export { AssetLibraryIcon } from './src/asset-library-icon';\r\nexport { ChatSparkleIcon } from './src/chat-sparkle-icon';\r\nexport { SparkleIcon } from './src/sparkle-icon';\r\nexport { CopilotIcon } from './src/copilot-icon';\r\n","import React from 'react';\r\n\r\nexport class AssetLibraryIcon extends React.PureComponent {\r\n render() {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n","module.exports = __WEBPACK_EXTERNAL_MODULE__3__;","import React from 'react';\r\n\r\nexport const ChatSparkleIcon = () => (\r\n \r\n \r\n \r\n);\r\n","import React from 'react';\r\n\r\nexport const SparkleIcon = () => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n","import React from 'react';\r\n\r\nexport const CopilotIcon = () => (\r\n \r\n \r\n \r\n);\r\n","import * as ComponentSettings from './src/components/index';\r\nimport * as Constants from './src/constants';\r\n\r\nexport {\r\n ComponentSettings,\r\n ComponentSettings as ThemeFluentComponentSettings, // alias\r\n Constants\r\n};\r\nexport * from './src/core/index';\r\n","export { alertStyle } from './alert-style';\r\nexport { buttonInputStyle } from './button-input-style';\r\nexport { btnStyle, btnInteractStyle } from './button-style';\r\nexport { closeImageStyle } from './close-image-style';\r\nexport { controlStyle } from './control';\r\nexport { datePickerStyle } from './date-picker-style';\r\nexport { dropDownEditorStyle } from './drop-down-editor-style';\r\nexport { fabricPanelStyle } from './fabric-panel-style';\r\nexport { floatButtonStyle } from './float-button-style';\r\nexport { gridInlineErrorStyle } from './grid-inline-error-style';\r\nexport { helpbuttonStyle } from './help-button-style';\r\nexport { InlineEditorStyle } from './inline-editor-style';\r\nexport { inlineErrorStyle } from './inline-error-style';\r\nexport { scrollbarStyle } from './scrollbar-style';\r\nexport { searchboxStyle } from './search-box-style';\r\nexport { SearchBox } from './search-box';\r\nexport { entitySelectorStyle } from './entity-selector-style';\r\nexport { paginationStyle } from './pagination-style';\r\nexport { statusStyle } from './status-style';\r\nexport { toggleButtonStyle } from './toggle-button-style';\r\nexport { underlineLinkStyle } from './underline-link-style';\r\nexport { internalLinkStyle } from './internal-link-style';\r\nexport { getBlockerStyle, spinnerKeyframe } from './spinner-style';\r\nexport { uiblockerStyle, legacyUIBlockerStyle, reactUIBlockerStyle } from './ui-blocker-style';\r\n\r\n// shared grid plugins\r\nexport { getTopGridPanelCommonStyle } from './grid-plugins/top-grid-panel-style';\r\nexport { columnChooserStyle } from './grid-plugins/column-chooser-style';\r\nexport { getColumnChooserOverrideStyle } from './grid-plugins/column-chooser-override-style';\r\nexport { filterEditorStyle } from './grid-plugins/filter-editor-style';\r\nexport { getFilterEditorOverrideStyle } from './grid-plugins/filter-editor-override-style';\r\nexport { getLegacyFilterBarStyle } from './grid-plugins/legacy-filter-bar-style';\r\n\r\n// shared grid styles\r\nexport { GridSharedStyles } from './grid-shared';\r\n","export const alertStyle = ({ palette = {}, iconFontFamily = 'MsAds MDL2 Assets' }) => ({\r\n '& .alert': {\r\n border: 'none',\r\n boxShadow: 'none',\r\n color: palette.neutralPrimary,\r\n display: 'flex',\r\n fontSize: 12,\r\n height: 'auto',\r\n lineHeight: '16px',\r\n padding: '8px 32px 8px 8px',\r\n\r\n '&.alert-danger .alert-image:before': {\r\n fontFamily: iconFontFamily,\r\n fontSize: 16,\r\n lineHeight: '16px',\r\n color: '#A80000',\r\n marginRight: 8,\r\n content: '\"\\\\EA39\"',\r\n },\r\n\r\n '&.alert-info .alert-image:before': {\r\n fontFamily: iconFontFamily,\r\n fontSize: 16,\r\n lineHeight: '16px',\r\n color: palette.neutralSecondary,\r\n marginRight: 8,\r\n content: '\"\\\\E946\"',\r\n },\r\n\r\n '&.alert-warning .alert-image:before': {\r\n fontFamily: iconFontFamily,\r\n fontSize: 16,\r\n lineHeight: '16px',\r\n color: '#d83b01',\r\n marginRight: 8,\r\n\r\n content: '\"\\\\E7BA\"',\r\n },\r\n },\r\n});\r\n","export const buttonInputStyle = ({ palette = {} }) => ({\r\n '& input.btn-primary[type=\"button\"], input.btn-primary[type=\"submit\"], input.btn-hero[type=\"button\"]': {\r\n '&:focus': {\r\n boxShadow: `inset 0 0 0 1px ${palette.white}`,\r\n border: `2px solid ${palette.themePrimary}`,\r\n },\r\n },\r\n\r\n '& input.btn-default[type=\"button\"]': {\r\n '&:focus': {\r\n outline: `1px solid ${palette.neutralSecondaryAlt}`,\r\n boxShadow: `inset 0 0 0 1px ${palette.neutralSecondary}`,\r\n outlineOffset: 0,\r\n border: `2px solid ${palette.white}`,\r\n },\r\n },\r\n});\r\n","export const btnInteractStyle = ({ palette = {} }) => ({\r\n '&:hover': {\r\n background: palette.neutralLighter,\r\n },\r\n '&:focus': {\r\n background: palette.neutralLight,\r\n border: `1px solid ${palette.neutralSecondaryAlt}`,\r\n },\r\n});\r\n\r\nexport const btnStyle = ({ palette = {} }) => {\r\n const primary = {\r\n height: 32,\r\n minWidth: 80,\r\n background: palette.themePrimary,\r\n borderRadius: 2,\r\n textAlign: 'center',\r\n color: palette.white,\r\n boxSizing: 'border-box',\r\n\r\n '&:hover': {\r\n background: palette.themeDarkAlt,\r\n },\r\n\r\n '&:focus': {\r\n background: palette.themePrimary,\r\n outline: 'none',\r\n },\r\n\r\n '&:active': {\r\n background: palette.themeDark,\r\n },\r\n\r\n '&:disabled': {\r\n background: palette.neutralLighter,\r\n color: palette.neutralTertiary,\r\n },\r\n };\r\n\r\n return {\r\n '.btn-primary': primary,\r\n '.btn-hero': primary,\r\n\r\n '.btn-default': {\r\n height: 32,\r\n minWidth: 80,\r\n background: palette.white,\r\n borderRadius: 2,\r\n textAlign: 'center',\r\n color: palette.neutralPrimary,\r\n border: `1px solid ${palette.neutralSecondaryAlt}`,\r\n\r\n ...btnInteractStyle({ palette }),\r\n\r\n '&:disabled': {\r\n background: palette.neutralLighter,\r\n color: palette.neutralTertiary,\r\n },\r\n },\r\n };\r\n};\r\n","export const closeImageStyle = ({ palette = {}, iconFontFamily = 'MsAds MDL2 Assets' }) => ({\r\n '.closeimage': {\r\n fontFamily: iconFontFamily,\r\n color: palette.neutralSecondary,\r\n cursor: 'pointer',\r\n right: -8,\r\n position: 'relative',\r\n },\r\n\r\n '.closeimage:before': {\r\n content: '\"\\\\E711\"',\r\n },\r\n});\r\n","export const controlStyle = ({ palette = {} }) => ({\r\n '.form-control': {\r\n '-webkit-box-shadow': 'none',\r\n backgroundColor: palette.white,\r\n backgroundImage: 'none',\r\n border: `1px solid ${palette.neutralSecondary}`,\r\n borderRadius: 2,\r\n boxShadow: 'none',\r\n color: palette.neutralPrimary,\r\n display: 'block',\r\n fontSize: 14,\r\n height: 32,\r\n lineHeight: 1.5,\r\n padding: '6px 12px',\r\n transition: 'border-color .15s ease-in-out, box-shadow .15s ease-in-out',\r\n\r\n '&:active': {\r\n borderColor: palette.themePrimary,\r\n },\r\n\r\n '&:hover': {\r\n borderColor: palette.neutralPrimary,\r\n },\r\n\r\n '&:focus': {\r\n '-webkit-box-shadow': 'none',\r\n borderColor: palette.themePrimary,\r\n boxShadow: 'none',\r\n outline: 0,\r\n },\r\n },\r\n});\r\n","/* eslint-disable no-unused-vars */\r\nexport const datePickerStyle = ({ palette = {}, iconFontFamily = 'MsAds MDL2 Assets', focusedStyle }) => ({\r\n '.k-animation-container': {\r\n width: '220px !important',\r\n height: 'auto !important',\r\n background: palette.white,\r\n boxShadow: '0px 0.6px 1.8px rgba(0, 0, 0, 0.108), 0px 3.2px 7.2px rgba(0, 0, 0, 0.132)',\r\n borderRadius: 2,\r\n\r\n '& .k-calendar-container': {\r\n position: 'relative !important',\r\n padding: 12,\r\n width: '100%',\r\n height: '100%',\r\n\r\n '& .k-link:hover': {\r\n backgroundColor: `${palette.neutralLight} !important`,\r\n color: `${palette.neutralDark} !important`,\r\n },\r\n\r\n '& .k-header': {\r\n width: '100%',\r\n paddingBottom: 4,\r\n backgroundColor: 'white',\r\n display: 'flex',\r\n alignItems: 'center',\r\n\r\n '& .k-nav-fast': {\r\n order: '1',\r\n flex: '1',\r\n lineHeight: '19px',\r\n fontWeight: 600,\r\n textAlign: 'left',\r\n display: 'flex',\r\n paddingTop: 4,\r\n paddingBottom: 5,\r\n color: palette.neutralPrimary,\r\n },\r\n\r\n '& .k-nav-prev': {\r\n order: '2',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n '& .k-nav-next': {\r\n order: '3',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n\r\n '& .k-icon': {\r\n fontFamily: iconFontFamily,\r\n fontSize: 12,\r\n lineHeight: '12px',\r\n width: 28,\r\n height: '28px',\r\n padding: 8,\r\n color: palette.neutralSecondary,\r\n },\r\n\r\n '& .k-i-arrow-w:before': {\r\n content: '\"\\\\E74A\"',\r\n },\r\n\r\n '& .k-i-arrow-e:before': {\r\n content: '\"\\\\E74B\"',\r\n },\r\n },\r\n\r\n '& .k-content': {\r\n '& th, td': {\r\n width: 28,\r\n height: '28px',\r\n textAlign: 'center',\r\n fontWeight: 'normal',\r\n background: palette.white,\r\n borderRadius: 2,\r\n lineHeight: '16px',\r\n fontSize: 12,\r\n\r\n '& a': {\r\n color: '#212121',\r\n display: 'flex',\r\n width: '28px',\r\n height: '28px',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n },\r\n\r\n '& .k-link': {\r\n background: palette.neutralLighter,\r\n borderRadius: '2px',\r\n },\r\n\r\n '& .k-other-month .k-link': {\r\n background: palette.white,\r\n },\r\n\r\n '& .k-state-selected': {\r\n '& .k-link': {\r\n // outline will only be visible when media query (forced-colors: active)\r\n outline: '1px dashed transparent',\r\n background: palette.themePrimary,\r\n fontWeight: 600,\r\n color: palette.white,\r\n },\r\n },\r\n\r\n '& .k-today': {\r\n '& .k-link': {\r\n // outline will only be visible when media query (forced-colors: active)\r\n outline: '1px dotted transparent',\r\n background: palette.themeLighter,\r\n fontWeight: 600,\r\n color: palette.neutralDark,\r\n },\r\n },\r\n\r\n '& .k-state-focused': {\r\n '& .k-link': focusedStyle || {\r\n // outline will only be visible when media query (forced-colors: active)\r\n outline: '1px solid transparent',\r\n background: palette.themePrimary,\r\n fontWeight: 600,\r\n color: palette.white,\r\n },\r\n },\r\n },\r\n\r\n '& .k-meta-view': {\r\n '& tr': {\r\n '& td': {\r\n background: `${palette.white} !important`,\r\n\r\n '& a': {\r\n display: 'flex',\r\n color: `${palette.neutralPrimary} !important`,\r\n width: '36px',\r\n height: '36px',\r\n marginBottom: 20,\r\n marginRight: 17,\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n },\r\n\r\n '& td:last-child': {\r\n '& a': {\r\n marginRight: 0,\r\n },\r\n },\r\n },\r\n\r\n '& .k-state-focused': {\r\n '& a': {\r\n color: `${palette.neutralDark} !important`,\r\n background: palette.themeLighter,\r\n },\r\n },\r\n },\r\n },\r\n },\r\n});\r\n","export const dropDownEditorStyle = ({ palette = {} }) => ({\r\n '& .grid-editable-cell select.editor-control.select-editor': {\r\n borderWidth: '0px 0px 1px 0px',\r\n borderBottomColor: 'transparent',\r\n paddingBottom: 8,\r\n paddingTop: 8,\r\n '&:hover, &:focus, &:active': {\r\n borderBottomColor: 'unset',\r\n outline: 'none',\r\n },\r\n '&:active': {\r\n borderBottomColor: palette.themePrimary,\r\n },\r\n },\r\n});\r\n","export const fabricPanelStyle = () => ({\r\n footer: {\r\n background: 'white',\r\n zIndex: 1,\r\n },\r\n commands: {\r\n marginTop: 0,\r\n marginBottom: 0,\r\n zIndex: 1,\r\n },\r\n});\r\n","export const floatButtonStyle = ({ palette = {} }) => ({\r\n floatButton: {\r\n background: palette.neutralLighter,\r\n border: 'none',\r\n borderRadius: 0,\r\n color: palette.themeDarkAlt,\r\n fontWeight: 'normal',\r\n height: 'auto',\r\n minHeight: 'auto',\r\n minWidth: 'auto',\r\n width: 'auto',\r\n padding: '14px 8px',\r\n\r\n '&:active, &:focus, &:hover': {\r\n color: palette.themeDark,\r\n background: palette.neutralQuaternaryAlt,\r\n },\r\n },\r\n});\r\n","export const gridInlineErrorStyle = ({ palette = {}, iconFontFamily = 'MsAds MDL2 Assets' }) => ({\r\n '& .inline-editor-errors': {\r\n '& .error-messages': {\r\n listStyleType: 'none',\r\n marginBottom: 0,\r\n '& .error': {\r\n fontFamily: iconFontFamily,\r\n padding: '10px',\r\n fontSize: '10pt',\r\n '&:before': {\r\n content: '\"\\\\EA39\"',\r\n color: palette.red,\r\n },\r\n },\r\n '& .error-message': {\r\n fontSize: '14px',\r\n },\r\n },\r\n },\r\n});\r\n","export const helpbuttonStyle = ({ palette = {}, iconFontFamily = 'MsAds MDL2 Assets' }) => ({\r\n '.helpbutton': {\r\n fontSize: 15,\r\n color: `${palette.themePrimary} !important`,\r\n verticalAlign: 'middle',\r\n fontWeight: 'normal',\r\n marginLeft: 7,\r\n\r\n '&:focus': {\r\n outline: '1px solid',\r\n outlineColor: palette.neutralSecondary,\r\n border: 'none',\r\n color: palette.black,\r\n textDecoration: 'none',\r\n },\r\n\r\n '&:hover': {\r\n backgroundColor: palette.neutralLighter,\r\n color: palette.black,\r\n textDecoration: 'none',\r\n },\r\n\r\n '&:active': {\r\n backgroundColor: palette.neutralLight,\r\n color: palette.black,\r\n textDecoration: 'none',\r\n },\r\n },\r\n\r\n '.helpbutton::before': {\r\n content: '\"\\\\E9CE\"',\r\n fontFamily: iconFontFamily,\r\n position: 'relative',\r\n top: 2,\r\n },\r\n});\r\n\r\n","export const InlineEditorStyle = () => ({\r\n '.custom-parameters-inline-edit-popup': {\r\n width: 456,\r\n minWidth: 456,\r\n },\r\n\r\n '.grid-popupeditor .form-inline .form-group': {\r\n display: 'block',\r\n },\r\n});\r\n","export const inlineErrorStyle = ({ palette = {}, iconFontFamily = 'MsAds MDL2 Assets' }) => ({\r\n '.inline-editor-errors': {\r\n '& .error-messages': {\r\n listStyleType: 'none',\r\n '& .grid-error': {\r\n '&.spritedimage': {\r\n fontFamily: iconFontFamily,\r\n padding: '10px',\r\n fontSize: '10pt',\r\n },\r\n '&.spritedimage:before': {\r\n content: '\"\\\\EA39\"',\r\n color: palette.red,\r\n },\r\n },\r\n '& .error-message': {\r\n fontSize: '14px',\r\n },\r\n },\r\n },\r\n});\r\n","/* eslint-disable no-unused-vars */\r\nexport const scrollbarStyle = ({ palette = {} }) => ({\r\n '::-webkit-scrollbar':\r\n {\r\n width: 4,\r\n backgroundColor: 'transparent',\r\n },\r\n\r\n '::-webkit-scrollbar-track':\r\n {\r\n backgroundColor: 'transparent',\r\n },\r\n\r\n '::-webkit-scrollbar-thumb':\r\n {\r\n width: 4,\r\n height: 44,\r\n backgroundColor: '#EBEAE8',\r\n },\r\n\r\n '::-webkit-scrollbar:horizontal':\r\n {\r\n height: 4,\r\n backgroundColor: 'transparent',\r\n },\r\n\r\n '::-webkit-scrollbar-track:horizontal':\r\n {\r\n backgroundColor: 'transparent',\r\n },\r\n\r\n '::-webkit-scrollbar-thumb:horizontal':\r\n {\r\n width: 200,\r\n height: 4,\r\n backgroundColor: '#EBEAE8',\r\n },\r\n});\r\n","export const searchboxStyle = ({ palette = {}, iconFontFamily = 'MsAds MDL2 Assets' }) => ({\r\n '& .searchbox': {\r\n padding: 0,\r\n },\r\n\r\n '& .searchbox .form-horizontal': {\r\n width: '100%',\r\n },\r\n\r\n '& .searchbox-input': {\r\n paddingLeft: 40,\r\n },\r\n\r\n '& .searchbox .form-control': {\r\n border: 0,\r\n borderBottom: `1px solid ${palette.neutralLighter}`,\r\n },\r\n\r\n '& .filter_search_icon_small': {\r\n fontFamily: iconFontFamily,\r\n color: palette.themePrimary,\r\n fontSize: 14,\r\n },\r\n\r\n '& .filter_search_icon_small:before': {\r\n content: '\"\\\\E721\"',\r\n },\r\n});\r\n","export const SearchBox = {\r\n inputGroup: {\r\n position: 'relative',\r\n overflow: 'hidden',\r\n },\r\n\r\n input: {\r\n border: {\r\n width: 1,\r\n style: 'solid',\r\n },\r\n padding: {\r\n top: 3,\r\n right: 33,\r\n bottom: 3,\r\n left: 8,\r\n },\r\n display: 'block',\r\n width: '100%',\r\n fontSize: '1em',\r\n },\r\n\r\n icon: {\r\n position: 'absolute',\r\n right: 60,\r\n height: 15,\r\n marginTop: 5,\r\n width: 20,\r\n fontSize: 12,\r\n\r\n '&:hover': {\r\n cursor: 'pointer',\r\n },\r\n },\r\n};\r\n","export const entitySelectorStyle = ({ palette = {}, iconFontFamily = 'MsAds MDL2 Assets' }) => ({\r\n '& .ba-campaign-selector, & .ba-campaign-adgroup-selector': {\r\n '& .ba-list-selector': {\r\n border: '1px solid #BBB',\r\n height: 300,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n\r\n '& .list-selector-item': {\r\n position: 'relative',\r\n },\r\n\r\n '& .list-selector-content': {\r\n flex: 1,\r\n overflow: 'auto',\r\n },\r\n\r\n '& .list-selector-select-all-bar': {\r\n padding: '5px 10px',\r\n color: '#1470A5',\r\n cursor: 'pointer',\r\n\r\n '& .arrow-button.enabled': {\r\n marginLeft: 6,\r\n },\r\n\r\n '& .arrow-button.remove': {\r\n marginRight: 6,\r\n },\r\n\r\n '& .enabled.arrow-button:before, & .arrow-button.remove:before': {\r\n verticalAlign: 'middle',\r\n },\r\n },\r\n },\r\n\r\n '& .multi-selector': {\r\n '& .ba-entity-selector': {\r\n '& .ba-list-selector': {\r\n '& .list-selector-item': {\r\n padding: 0,\r\n '& .multi-item-container': {\r\n padding: '7px 8px 8px 8px',\r\n },\r\n '& .added-to-result-list': {\r\n backgroundColor: '#edebe9',\r\n },\r\n },\r\n },\r\n },\r\n },\r\n\r\n },\r\n '& .ba-campaign-adgroup-selector .selected-item, .ba-campaign-selector .selected-item': {\r\n maxWidth: 270,\r\n },\r\n '& .ba-campaign-selector, & .ba-campaign-adgroup-selector, & .disclaimer-selector, & .audience-planner-location-selector': {\r\n '& .dropdown-toggle': {\r\n lineHeight: 2,\r\n padding: '0 8px',\r\n verticalAlign: 'middle',\r\n fontWeight: 'normal',\r\n width: 320,\r\n textAlign: 'left !important',\r\n background: 'transparent !important',\r\n border: `1px solid ${palette.neutralSecondary}`,\r\n borderRadius: 2,\r\n outline: 'none',\r\n\r\n '&:hover': {\r\n borderColor: palette.neutralPrimary,\r\n },\r\n\r\n '&:focus, &:active': {\r\n borderColor: palette.themePrimary,\r\n },\r\n\r\n '& .selected-item': {\r\n textOverflow: 'ellipsis',\r\n overflowWrap: 'break-word',\r\n wordBreak: 'break-word',\r\n overflow: 'hidden',\r\n whiteSpace: 'nowrap',\r\n display: 'inline-block',\r\n verticalAlign: 'middle',\r\n },\r\n\r\n '& .icon-right': {\r\n float: 'right',\r\n },\r\n\r\n '& .glyphicon-triangle-bottom, .glyphicon-pencil': {\r\n marginTop: 5,\r\n fontFamily: iconFontFamily,\r\n fontSize: 16,\r\n verticalAlign: 'middle',\r\n color: palette.neutralSecondary,\r\n },\r\n\r\n '& .glyphicon-triangle-bottom:before': {\r\n content: '\"\\\\E70D\"',\r\n },\r\n\r\n '& .glyphicon.glyphicon-pencil::before': {\r\n content: '\"\\\\E70F\"',\r\n },\r\n },\r\n\r\n '& .dropdown-toggle:focus:after, .dropdown-toggle:active:after': {\r\n border: 0,\r\n },\r\n\r\n '& .dropdown-menu': {\r\n top: 'auto',\r\n left: 'auto',\r\n minWidth: 320,\r\n padding: 8,\r\n boxShadow: '0px 0.6px 1.8px rgba(0, 0, 0, 0.108), 0px 3.2px 7.2px rgba(0, 0, 0, 0.132)',\r\n borderRadius: '0px 0px 2px 2px',\r\n\r\n '& .ba-search-box ': {\r\n borderTop: `1px solid ${palette.neutralSecondary}`,\r\n borderLeft: `1px solid ${palette.neutralSecondary}`,\r\n borderRight: `1px solid ${palette.neutralSecondary}`,\r\n padding: 1,\r\n position: 'relative',\r\n\r\n '& .search-box__input': {\r\n height: 48,\r\n width: 'calc(100% - 2px)',\r\n border: 0,\r\n borderBottom: `1px solid ${palette.neutralLight}`,\r\n paddingLeft: 48,\r\n marginLeft: 1,\r\n },\r\n\r\n '& .search-box__icon': {\r\n fontFamily: iconFontFamily,\r\n fontSize: 16,\r\n verticalAlign: 'middle',\r\n position: 'absolute',\r\n left: 16,\r\n top: 16,\r\n },\r\n\r\n '& .search-box__icon:before': {\r\n content: '\"\\\\E721\"',\r\n color: palette.themePrimary,\r\n },\r\n },\r\n\r\n '& .ba-list-selector': {\r\n borderBottom: `1px solid ${palette.neutralSecondary}`,\r\n borderLeft: `1px solid ${palette.neutralSecondary}`,\r\n borderRight: `1px solid ${palette.neutralSecondary}`,\r\n\r\n '& .list-selector-header': {\r\n '& .panel-heading': {\r\n color: palette.neutralPrimary,\r\n fontSize: 14,\r\n padding: '7px 8px',\r\n\r\n '& .panel-title': {\r\n fontSize: 14,\r\n marginTop: 0,\r\n },\r\n },\r\n },\r\n\r\n '& .list-selector-content': {\r\n height: 380,\r\n\r\n '& .list-selector-item': {\r\n padding: '7px 8px 8px 8px',\r\n margin: 0,\r\n minHeight: 36,\r\n\r\n '& > div, & .item-content': {\r\n maxWidth: 225,\r\n textOverflow: 'ellipsis',\r\n overflow: 'hidden',\r\n whiteSpace: 'nowrap',\r\n cursor: 'pointer',\r\n paddingRight: '20px',\r\n '& .statusIcon': {\r\n verticalAlign: 'middle',\r\n height: '19px',\r\n },\r\n\r\n '& .text': {\r\n marginLeft: 10,\r\n verticalAlign: 'middle',\r\n },\r\n },\r\n },\r\n\r\n '& .selected': {\r\n background: palette.neutralLight,\r\n },\r\n },\r\n\r\n '& .list-selector-item:hover': {\r\n background: palette.neutralLight,\r\n },\r\n\r\n '& .list-selector-item:focus': {\r\n outline: 'none',\r\n border: `1px solid ${palette.neutralSecondary}`,\r\n },\r\n },\r\n\r\n '& .list-selector-empty': {\r\n marginLeft: 10,\r\n },\r\n\r\n '& .ba-cascader-selector': {\r\n border: 0,\r\n padding: 0,\r\n },\r\n\r\n '& .ba-cascader-selector>div': {\r\n width: '100% !important',\r\n marginBottom: 0,\r\n },\r\n\r\n '& .ba-cascader-selector>div:nth-child(2)>div:nth-child(2)': {\r\n '& .ba-list-selector': {\r\n borderLeft: '0 !important',\r\n },\r\n },\r\n\r\n '& .pagination-container': {\r\n '& .ba-pagination': {\r\n height: 36,\r\n padding: '6px 0',\r\n paddingBottom: 0,\r\n },\r\n },\r\n },\r\n },\r\n\r\n '& .ba-campaign-adgroup-selector, & .ba-campaign-selector': {\r\n '& .dropdown-toggle .dropdown-edit-mode-parent-text': {\r\n color: '#605e5c',\r\n },\r\n\r\n '& .item-content-parent-info': {\r\n color: '#605e5c',\r\n },\r\n },\r\n});\r\n\r\n","export const paginationStyle = ({ palette = {}, iconFontFamily = 'MsAds MDL2 Assets' }) => ({\r\n '& .ba-pagination, .dlb-pager-container, .pagination-control': {\r\n height: 'auto',\r\n padding: '6px 0',\r\n\r\n '& > .text': {\r\n display: 'inline-block',\r\n verticalAlign: 'middle',\r\n padding: '0px 0px 8px 5px',\r\n '& > span': {\r\n marginRight: '5px',\r\n },\r\n },\r\n '& button': {\r\n border: 0,\r\n background: 'transparent',\r\n minWidth: '1px',\r\n padding: 0,\r\n color: palette.neutralSecondary,\r\n },\r\n\r\n '& button:hover': {\r\n borderRadius: 2,\r\n background: palette.neutralLighter,\r\n },\r\n\r\n '& button:disabled': {\r\n background: 'transparent',\r\n color: '#BEBBB8',\r\n },\r\n\r\n '& .prev + .text, .pager-previous + .text': {\r\n display: 'none',\r\n },\r\n\r\n '& .pager-input': {\r\n border: `1px solid ${palette.neutralSecondary}`,\r\n padding: '6px 8px',\r\n height: 32,\r\n textAlign: 'center',\r\n margin: '0 12px',\r\n width: 70,\r\n display: 'inline-block',\r\n borderRadius: 2,\r\n boxSizing: 'border-box',\r\n color: palette.neutralPrimary,\r\n\r\n '&:active': {\r\n borderColor: palette.themePrimary,\r\n },\r\n\r\n '&:focus': {\r\n borderColor: palette.themePrimary,\r\n outline: 0,\r\n },\r\n\r\n '&:hover': {\r\n borderColor: palette.neutralPrimary,\r\n },\r\n },\r\n\r\n '& .glyphicon-triangle-left, & .glyphicon-triangle-right': {\r\n display: 'inline-block',\r\n fontFamily: iconFontFamily,\r\n color: 'inherit',\r\n },\r\n\r\n '& .glyphicon-triangle-left:before': {\r\n content: '\"\\\\E76B\"',\r\n },\r\n\r\n '& .glyphicon-triangle-right:before': {\r\n content: '\"\\\\E76C\"',\r\n },\r\n },\r\n\r\n '& .pager, .location-bid-pager-view': {\r\n height: 32,\r\n padding: 0,\r\n margin: 0,\r\n\r\n '& .pager-input, .page-number-input, .grid-pager-input': {\r\n border: `1px solid ${palette.neutralSecondary}`,\r\n padding: '6px 8px',\r\n height: 32,\r\n textAlign: 'center',\r\n margin: '0 12px',\r\n width: '70px !important',\r\n display: 'inline-block',\r\n borderRadius: 2,\r\n boxSizing: 'border-box',\r\n color: palette.neutralPrimary,\r\n background: palette.white,\r\n },\r\n\r\n '& .pager-input[disabled], & .page-number-input[disabled], & .grid-pager-input[disabled]': {\r\n backgroundColor: palette.neutralLighter,\r\n },\r\n\r\n '& .pager-previous, & .pager-next, & .glyphicon-triangle-left, & .glyphicon-triangle-right': {\r\n fontFamily: iconFontFamily,\r\n color: palette.neutralSecondary,\r\n background: 'transparent',\r\n display: 'inline-block',\r\n verticalAlign: 'middle',\r\n padding: '2px 5px',\r\n height: 32,\r\n lineHeight: '32px',\r\n marginTop: '-7px',\r\n outline: 'none',\r\n },\r\n\r\n '& .pager-previous, & .pager-next': {\r\n '&:focus': {\r\n outline: `1px solid ${palette.neutralSecondary}`,\r\n outlineOffset: '-2px',\r\n },\r\n },\r\n\r\n '& .pager-previous:hover, & .pager-next:hover': {\r\n borderRadius: 2,\r\n background: palette.neutralLighter,\r\n },\r\n\r\n '& .pager-previous-disabled, & .pager-next-disabled': {\r\n fontFamily: iconFontFamily,\r\n color: '#BEBBB8',\r\n background: 'transparent',\r\n display: 'inline-block',\r\n verticalAlign: 'middle',\r\n padding: '2px 5px',\r\n height: 32,\r\n lineHeight: '32px',\r\n marginTop: '-7px',\r\n outline: 'none',\r\n },\r\n\r\n '& .pager-previous-disabled:before, & .pager-previous:before': {\r\n content: '\"\\\\E76B\"',\r\n },\r\n\r\n '& .pager-next-disabled:before, & .pager-next:before': {\r\n content: '\"\\\\E76C\"',\r\n },\r\n\r\n '& .pager-totalCount': {\r\n verticalAlign: 'unset',\r\n marginLeft: 4,\r\n },\r\n },\r\n\r\n '& .pagination-control': {\r\n textAlign: 'left',\r\n\r\n '& .text': {\r\n display: 'inline-block',\r\n width: 'auto',\r\n },\r\n\r\n '& .page-size-selector': {\r\n height: 32,\r\n textAlign: 'center',\r\n margin: '0 12px',\r\n width: '70px !important',\r\n display: 'inline-block',\r\n borderRadius: 2,\r\n boxSizing: 'border-box',\r\n color: palette.neutralPrimary,\r\n },\r\n\r\n '& .pager': {\r\n display: 'inline-block',\r\n },\r\n },\r\n\r\n});\r\n\r\n","export const statusStyle = ({ palette = {} }) => ({\r\n '& .statusDraft_icon': {\r\n display: 'inline-block',\r\n fontFamily: '\"MsAds MDL2 Assets\"',\r\n fontSize: 14,\r\n fontStyle: 'normal',\r\n '-webkit-font-smoothing': 'antialiased',\r\n '-moz-osx-font-smoothing': 'grayscale',\r\n fontWeight: 'normal',\r\n },\r\n\r\n '& .statusDraft_icon::before': {\r\n content: '\"\\\\F6B0\"',\r\n color: palette.neutralPrimary,\r\n },\r\n\r\n '& .statusDeleted_icon': {\r\n display: 'inline-block',\r\n fontFamily: '\"MsAds MDL2 Assets\"',\r\n fontSize: 14,\r\n fontStyle: 'normal',\r\n '-webkit-font-smoothing': 'antialiased',\r\n '-moz-osx-font-smoothing': 'grayscale',\r\n fontWeight: 'normal',\r\n },\r\n\r\n '& .statusDeleted_icon::before': {\r\n content: '\"\\\\E738\"',\r\n color: palette.redOrange10,\r\n },\r\n\r\n '& .statusEnabled_icon': {\r\n display: 'inline-block',\r\n fontFamily: '\"MsAds MDL2 Assets\"',\r\n fontSize: 14,\r\n fontStyle: 'normal',\r\n '-webkit-font-smoothing': 'antialiased',\r\n '-moz-osx-font-smoothing': 'grayscale',\r\n fontWeight: 'normal',\r\n },\r\n\r\n '& .statusEnabled_icon::before': {\r\n content: '\"\\\\ECCC\"',\r\n color: palette.green,\r\n },\r\n\r\n '& .statusExcluded_icon': {\r\n display: 'inline-block',\r\n fontFamily: '\"MsAds MDL2 Assets\"',\r\n fontSize: 14,\r\n fontStyle: 'normal',\r\n '-webkit-font-smoothing': 'antialiased',\r\n '-moz-osx-font-smoothing': 'grayscale',\r\n fontWeight: 'normal',\r\n },\r\n\r\n '& .statusExcluded_icon::before': {\r\n content: '\"\\\\E733\"',\r\n color: '#A80000',\r\n },\r\n\r\n '& .statusPaused_icon': {\r\n display: 'inline-block',\r\n fontFamily: '\"MsAds MDL2 Assets\"',\r\n fontSize: 14,\r\n fontStyle: 'normal',\r\n '-webkit-font-smoothing': 'antialiased',\r\n '-moz-osx-font-smoothing': 'grayscale',\r\n fontWeight: 'normal',\r\n },\r\n\r\n '& .statusPaused_icon::before': {\r\n content: '\"\\\\F6B0\"',\r\n color: palette.neutralPrimary,\r\n },\r\n\r\n '& .statushypendisplay': {\r\n display: 'inline-block',\r\n fontFamily: '\"MsAds MDL2 Assets\"',\r\n fontSize: 14,\r\n fontStyle: 'normal',\r\n '-webkit-font-smoothing': 'antialiased',\r\n '-moz-osx-font-smoothing': 'grayscale',\r\n fontWeight: 'normal',\r\n },\r\n\r\n '& .statushypendisplay::before': {\r\n content: '\"\\\\E738\"',\r\n color: palette.neutralPrimary,\r\n },\r\n\r\n});\r\n","export const toggleButtonStyle = ({ palette = {} }) => ({\r\n\r\n '& .toggle': {\r\n display: 'inline-block',\r\n textDecoration: 'none',\r\n\r\n '& .toggle-button': {\r\n display: 'inline-block',\r\n boxsizing: 'border-box',\r\n width: 40,\r\n height: 20,\r\n padding: 4,\r\n lineHeight: '10px',\r\n border: '1px solid',\r\n borderRadius: 30,\r\n 'transition-duration': '0.2s',\r\n '-webkit-transition-duration': '0.2s',\r\n },\r\n\r\n '& .toggle-handle': {\r\n display: 'inline-block',\r\n boxsizing: 'border-box',\r\n width: 10,\r\n height: 10,\r\n borderRadius: 5,\r\n borderWidth: 5,\r\n borderStyle: 'solid',\r\n verticalAlign: 'top',\r\n 'transition-duration': '0.2s',\r\n '-webkit-transition-duration': '0.2s',\r\n },\r\n },\r\n\r\n '& .toggle-on': {\r\n '& .toggle-button': {\r\n backgroundColor: palette.themePrimary,\r\n borderColor: palette.themePrimary,\r\n },\r\n\r\n '& .toggle-handle': {\r\n marginLeft: 20,\r\n borderColor: palette.white,\r\n },\r\n },\r\n\r\n '& .toggle-off': {\r\n '& .toggle-button': {\r\n backgroundColor: palette.white,\r\n borderColor: '#333333',\r\n },\r\n\r\n '& .toggle-handle': {\r\n marginRight: 20,\r\n borderColor: '#333333',\r\n },\r\n },\r\n});\r\n","export const underlineLinkStyle = ({ palette = {}, elementLocator = 'a', isGreyBackground = false }) => ({\r\n [`& ${elementLocator}`]: {\r\n textDecoration: 'underline',\r\n color: isGreyBackground ? palette.themeDarkAlt : palette.themePrimary,\r\n '&:focus': {\r\n textDecoration: 'underline',\r\n outline: `1px solid ${palette.neutralSecondary}`,\r\n },\r\n '&:hover': {\r\n textDecoration: 'underline',\r\n color: palette.themeDarker,\r\n },\r\n },\r\n});\r\n","export const internalLinkStyle = ({ palette = {}, elementLocator = 'a', isGreyBackground = false }) => ({\r\n [`& ${elementLocator}`]: {\r\n textDecoration: 'none',\r\n color: isGreyBackground ? palette.themeDarkAlt : palette.themePrimary,\r\n '&:focus': {\r\n textDecoration: 'none',\r\n outline: `1px solid ${palette.neutralSecondary}`,\r\n },\r\n '&:hover': {\r\n textDecoration: 'underline',\r\n color: palette.themeDarker,\r\n },\r\n },\r\n});\r\n","export const getBlockerStyle = (size, palette) => ({\r\n width: size,\r\n height: size,\r\n border: '2px solid',\r\n borderLeftColor: palette.themePrimary,\r\n borderRightColor: palette.themeLight,\r\n borderTopColor: palette.themeLight,\r\n borderBottomColor: palette.themeLight,\r\n borderRadius: '50%',\r\n animation: 'spinner 1s linear infinite',\r\n marginRight: 9,\r\n});\r\n\r\nexport const spinnerKeyframe = {\r\n '@keyframes spinner': {\r\n to: { transform: 'rotate(360deg)' },\r\n },\r\n};\r\n","import { ZIndexShellComponents } from '../constants';\r\n\r\nimport { getBlockerStyle, spinnerKeyframe } from './spinner-style';\r\n// this style is in the body scope, out of the feature scope, so use as the global pattern\r\nexport const uiblockerStyle = ({ palette = {} }) => (\r\n Object.assign({\r\n '.blocker': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n backgroundColor: 'rgba(255,255,255,0.4)',\r\n zIndex: ZIndexShellComponents.Loader,\r\n },\r\n\r\n '.blocker-global, .blocker-local': {\r\n backgroundColor: 'rgba(255,255,255,0.4)',\r\n position: 'absolute',\r\n zIndex: ZIndexShellComponents.Loader,\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n },\r\n '.blocker-global': {\r\n left: 0,\r\n top: 0,\r\n right: 0,\r\n bottom: 0,\r\n },\r\n\r\n '.blocker, .blocker-global, .blocker-local': {\r\n '& .blocker-indicator': {\r\n outline: 'none',\r\n display: 'flex',\r\n alignItems: 'center',\r\n backgroundColor: 'white',\r\n padding: '10px',\r\n color: palette.themePrimary,\r\n top: 'calc(50% - 24px)',\r\n left: 'calc(50% - 58px)',\r\n position: 'absolute',\r\n\r\n '& .blocker-image': getBlockerStyle(28, palette),\r\n },\r\n },\r\n }, spinnerKeyframe));\r\n\r\n// blocker defined in $.advertiser\r\nexport const legacyUIBlockerStyle = ({ palette = {} }) => ({\r\n '.blocker-panel': {\r\n position: 'absolute',\r\n backgroundColor: 'rgba(255,255,255,0.4)',\r\n },\r\n '.blocker-panel + .blocker-indicator': {\r\n outline: 'none',\r\n backgroundColor: 'white',\r\n padding: '10px',\r\n color: palette.themePrimary,\r\n position: 'absolute',\r\n\r\n '& .blocker-image': {\r\n ...getBlockerStyle(28, palette),\r\n position: 'absolute',\r\n },\r\n '& .blocker-text': {\r\n margin: '5px 0 0 40px',\r\n },\r\n },\r\n});\r\n\r\n// for @bingads-webui-react/ui-blocker\r\nexport const reactUIBlockerStyle = (palette, backgroundColor = 'white') => ({\r\n '& .react-block-ui': {\r\n '& > div:last-child': {\r\n alignItems: 'center',\r\n backgroundColor,\r\n color: palette.themePrimary,\r\n display: 'flex',\r\n outline: 'none',\r\n padding: 10,\r\n\r\n '& .blocker-text': {\r\n fontWeight: 'normal',\r\n },\r\n\r\n '& .blocker-image': getBlockerStyle(28, palette),\r\n },\r\n },\r\n});\r\n","export { ZIndexShellComponents, ZIndexContentComponents } from './zindexes';\r\nexport { PagePadding } from './pagePadding';\r\nexport { ResponsiveSizeBreakpoints } from './responsiveSize';\r\n","// For the z-index defined in external place, we use leading \"_\" in key name to indicate it,\r\n// and put them here ONLY FOR REFERENCE.\r\n\r\n// We only focus on z-index of components in app-layout-container and direct children of .\r\n// That's to say, it doesn't matter that z-index of element A inside Content is greater than\r\n// element B inside Header: A will still shows behind B, since Content z-index < Header z-index.\r\nexport const ZIndexShellComponents = {\r\n _HelpContainer: 1100, // defined in apex style file\r\n _BootstrapPopover: 1060, // defined in bootstrap of theme-2018\r\n _BootstrapModal: 1050, // defined in bootstrap of theme-2018\r\n _BootstrapModalBackdrop: 1040, // defined in bootstrap of theme-2018\r\n ModalBackDrop: 1040,\r\n Header: 1031,\r\n Loader: 1030, // should be less than Header\r\n Panel: 1000,\r\n TopBanner: 250,\r\n PromotionBanner: 250,\r\n Nav: 200,\r\n Status: 150,\r\n Menu: 100,\r\n Tab: 75,\r\n SubTab: 50,\r\n Content: 0,\r\n};\r\n\r\n// This is the common place for elements inside \".app-shell-content\"\r\nexport const ZIndexContentComponents = {\r\n // add new elements here in descending order\r\n GridToolbar: 20,\r\n GridHeader: 20,\r\n StatusPopup: 10,\r\n};\r\n","export const PagePadding = {\r\n mainSectionLeftPadding: 32,\r\n smallMainSectionLeftPadding: 15,\r\n};\r\n","export const ResponsiveSizeBreakpoints = [\r\n {\r\n name: 's',\r\n minWidth: 360,\r\n },\r\n {\r\n name: 'm',\r\n minWidth: 480,\r\n },\r\n {\r\n name: 'l',\r\n minWidth: 640,\r\n },\r\n {\r\n name: 'xl',\r\n minWidth: 1024,\r\n },\r\n {\r\n name: 'xxl',\r\n minWidth: 1366,\r\n },\r\n];\r\n","import { internalLinkStyle } from '../internal-link-style';\r\nimport { underlineLinkStyle } from '../underline-link-style';\r\n\r\n// Styles for panel itself\r\nexport const getTopGridPanelCommonStyle = ({ palette }) => ({\r\n '& .panel': {\r\n // All top of grid panel have same margin left and top\r\n marginTop: '24px',\r\n marginLeft: '32px',\r\n marginBottom: '0px',\r\n padding: 0,\r\n backgroundColor: 'white',\r\n\r\n // Learn more button styles.\r\n ...underlineLinkStyle({ palette, elementLocator: 'a.HelpTopic' }),\r\n\r\n '& .alert-info .alert-info-inline': {\r\n ...internalLinkStyle({ palette, elementLocator: '> a', isGreyBackground: true }),\r\n },\r\n\r\n '& .panel-heading': {\r\n backgroundColor: 'white',\r\n padding: '0px',\r\n fontWeight: 600,\r\n\r\n '& .panel-title': {\r\n fontSize: '20px',\r\n lineHeight: '27px',\r\n fontWeight: 600,\r\n },\r\n },\r\n\r\n '& .panel-body': {\r\n lineHeight: '19px',\r\n paddingLeft: '0px',\r\n paddingBottom: '0px',\r\n marginBottom: '18px', // leave space between body and the footer buttons\r\n\r\n '& hr': {\r\n margin: 0,\r\n borderTop: '0px',\r\n },\r\n },\r\n\r\n '& .panel-footer': {\r\n borderTop: `1px solid ${palette.neutralLight}`,\r\n paddingTop: '16px',\r\n paddingBottom: '16px',\r\n paddingLeft: '0px',\r\n marginTop: 0,\r\n backgroundColor: 'white',\r\n\r\n '& input.btn, & button.btn': {\r\n marginRight: '8px',\r\n },\r\n '& input.btn:focus': {\r\n outline: `1px solid ${palette.neutralSecondary}`,\r\n outlineOffset: '-3px',\r\n },\r\n '& input.btn-primary:focus': {\r\n outline: '1px solid #fff',\r\n },\r\n '& .previewTable': {\r\n margin: '5px 0 !important',\r\n maxHeight: '250px',\r\n display: 'inline-block',\r\n minWidth: '500px',\r\n width: 'auto !important',\r\n },\r\n },\r\n },\r\n});\r\n","export const columnChooserStyle = {\r\n '& .column-chooser .option': {\r\n padding: '6px 10px',\r\n },\r\n '& .column-chooser .option:hover': {\r\n backgroundColor: 'transparent',\r\n borderColor: 'transparent',\r\n },\r\n '& .column-chooser input[type=\"checkbox\"]': {\r\n margin: '0 5px 0 0',\r\n },\r\n '& .column-chooser-instructions': {\r\n marginBottom: '35px',\r\n },\r\n '& .column-chooser-categories': {\r\n position: 'relative',\r\n float: 'left',\r\n width: '180px',\r\n left: '1px',\r\n zIndex: '1',\r\n },\r\n '& .column-chooser-list': {\r\n position: 'relative',\r\n border: '1px solid #bbb',\r\n background: 'white',\r\n boxSizing: 'border-box',\r\n height: '300px',\r\n width: '340px',\r\n float: 'left',\r\n overflow: 'hidden',\r\n },\r\n '& .column-chooser-list+.column-chooser-list': {\r\n marginLeft: '8px',\r\n },\r\n '& .column-chooser-list.right': {\r\n marginLeft: '10px',\r\n },\r\n '& .column-chooser-option-header': {\r\n padding: '10px',\r\n backgroundColor: '#f4f4f4',\r\n width: '340px',\r\n },\r\n '& .column-chooser-bulk-control': {\r\n padding: '10px',\r\n },\r\n '& .column-chooser-category': {\r\n padding: '10px',\r\n cursor: 'pointer',\r\n borderTop: '0',\r\n },\r\n '& .column-chooser-category.active': {\r\n backgroundColor: 'white',\r\n border: '1px solid #bbb',\r\n borderRightColor: 'white',\r\n borderRight: '0',\r\n },\r\n '& .column-chooser-category:focus, & .column-chooser-category.k-state-focused': {\r\n outline: '1px dashed #333 !important',\r\n },\r\n '& .column-chooser-options': {\r\n listStyle: 'none',\r\n verticalAlign: 'top',\r\n overflowX: 'visible',\r\n overflowY: 'auto',\r\n padding: '0 10px',\r\n height: '230px',\r\n },\r\n '& .column-chooser-options.selected': {\r\n padding: '10px',\r\n height: '290px',\r\n },\r\n '& .column-chooser-options.available': {\r\n height: '250px',\r\n },\r\n '& .column-chooser-option': {\r\n border: '1px solid white',\r\n borderLeftWidth: '0',\r\n borderRightWidth: '0',\r\n padding: '6px 10px',\r\n },\r\n '& .column-chooser-option:hover': {\r\n backgroundColor: '#e5e5e5',\r\n borderColor: '#e5e5e5',\r\n },\r\n '& .column-chooser-message': {\r\n marginBottom: '15px',\r\n fontSize: '12px',\r\n },\r\n '& .column-chooser-option-selected': {\r\n cursor: 'move',\r\n padding: '5px',\r\n marginBottom: '5px',\r\n backgroundColor: '#e7f0f6',\r\n border: '1px solid #1570a6',\r\n height: '28px !important',\r\n },\r\n '& .column-chooser-option-selected:hover': {\r\n backgroundColor: '#f4f4f4',\r\n borderColor: '#606060',\r\n },\r\n '& .column-chooser-option-selected .remove': {\r\n paddingTop: '2px',\r\n },\r\n '& .column-chooser-option-fixed': {\r\n cursor: 'not-allowed',\r\n },\r\n '& .column-chooser-option-unmovable': {\r\n backgroundColor: '#e5e5e5',\r\n borderColor: 'gray',\r\n cursor: 'not-allowed',\r\n padding: '7px',\r\n },\r\n '& .column-chooser-option-placeholder': {\r\n border: '1px solid #1570a6',\r\n opacity: '& .5',\r\n margin: '6px 10px',\r\n height: '20px',\r\n },\r\n '& .column-chooser': {\r\n display: 'block !important',\r\n lineHeight: '15px',\r\n fontWeight: 'normal',\r\n },\r\n '& .column-chooser .panel .panel-body .column-chooser-selection-area': {\r\n display: 'inline-block',\r\n },\r\n '& .column-chooser .panel .panel-body .column-chooser-selection-area .column-chooser-option': {\r\n float: 'left',\r\n padding: '0',\r\n backgroundColor: '#f4f4f4',\r\n border: 'none',\r\n },\r\n '& .column-chooser .panel .panel-body .column-chooser-selection-area .column-chooser-option .column-chooser-option-header': {\r\n padding: '10px',\r\n width: '340px',\r\n },\r\n '& .column-chooser .panel .panel-body .column-chooser-selection-area .column-chooser-option .column-chooser-search-box': {\r\n border: '1px solid #F3F2F1',\r\n position: 'relative',\r\n },\r\n '& .column-chooser .panel .panel-body .column-chooser-selection-area .column-chooser-option .search-input': {\r\n border: 'none',\r\n height: '48px',\r\n paddingLeft: '48px',\r\n },\r\n '& .column-chooser .panel .panel-body .column-chooser-selection-area .column-chooser-option .glyphicon-search': {\r\n top: '16px',\r\n left: '16px',\r\n color: '#0078d4',\r\n position: 'absolute',\r\n fontSize: '16px',\r\n fontFamily: 'MsAds MDL2 Assets',\r\n },\r\n '& .column-chooser .panel .panel-body .column-chooser-selection-area .column-chooser-option .glyphicon-search:before': {\r\n content: '\"\\\\E721\"',\r\n },\r\n '& .column-chooser .panel .panel-body .column-chooser-selection-area .column-chooser-option .category-tabs': {\r\n position: 'relative',\r\n left: '1px',\r\n zIndex: '1',\r\n marginBottom: '8.5px',\r\n marginTop: '0',\r\n paddingLeft: '0',\r\n float: 'left',\r\n width: '180px',\r\n listStyle: 'none',\r\n },\r\n '& .column-chooser .panel .panel-body .column-chooser-selection-area .column-chooser-option .category-tabs>li': {\r\n padding: '10px',\r\n cursor: 'pointer',\r\n borderTop: '0',\r\n },\r\n '& .column-chooser .panel .panel-body .column-chooser-selection-area .column-chooser-option .category-tabs>li.active': {\r\n backgroundColor: 'white',\r\n border: '1px solid #BBB',\r\n borderRightColor: 'white',\r\n borderRight: '0',\r\n fontWeight: 'bold',\r\n },\r\n '& .column-chooser .panel .panel-body .column-chooser-selection-area .column-chooser-option .options-view': {\r\n float: 'left',\r\n },\r\n '& .column-chooser .panel .panel-body .column-chooser-selection-area .column-chooser-option .options-view .column-chooser-option-list': {\r\n position: 'relative',\r\n border: '1px solid #BBB',\r\n background: 'white',\r\n boxSizing: 'border-box',\r\n height: '300px',\r\n width: '340px',\r\n overflow: 'hidden',\r\n },\r\n '& .column-chooser .panel .panel-body .column-chooser-selection-area .column-chooser-option .options-view .column-chooser-option-list .column-chooser-bulk-control': {\r\n padding: '10px',\r\n textAlign: 'right',\r\n },\r\n '& .column-chooser .panel .panel-body .column-chooser-selection-area .column-chooser-option .options-view .column-chooser-option-list ul.column-chooser-options': {\r\n listStyle: 'none',\r\n verticalAlign: 'top',\r\n overflowX: 'visible',\r\n overflowY: 'auto',\r\n padding: '0 10px',\r\n height: '250px',\r\n },\r\n '& .column-chooser .panel .panel-body .column-chooser-selection-area .column-chooser-option .options-view .column-chooser-option-list ul.column-chooser-options span.option-not-selected': {\r\n fontWeight: 'bold',\r\n },\r\n '& .column-chooser .panel .panel-body .column-chooser-selection-area .column-chooser-option .options-view .column-chooser-option-list ul.column-chooser-options span.option-status': {\r\n float: 'right',\r\n },\r\n '& .column-chooser .panel .panel-body .column-chooser-selection-area .column-chooser-option .options-view .column-chooser-option-list ul.column-chooser-options span.option-status.disabled': {\r\n color: '#ccc',\r\n },\r\n '& .column-chooser .panel .panel-body .column-chooser-selection-area .column-chooser-option .options-view .column-chooser-option-list ul.column-chooser-options a.add-column-link': {\r\n float: 'right',\r\n },\r\n '& .column-chooser .panel .panel-body .column-chooser-selection-area .column-chooser-selected': {\r\n float: 'left',\r\n },\r\n '& .column-chooser .panel .panel-body .column-chooser-selection-area .column-chooser-selected .column-chooser-selected-header': {\r\n padding: '10px',\r\n backgroundColor: '#f4f4f4',\r\n width: '340px',\r\n marginLeft: '0',\r\n },\r\n '& .column-chooser .panel .panel-body .column-chooser-selection-area .column-chooser-selected .draggable-list-view': {\r\n position: 'relative',\r\n border: '1px solid #BBB',\r\n background: 'white',\r\n boxSizing: 'border-box',\r\n height: '300px',\r\n width: '340px',\r\n overflow: 'hidden',\r\n marginLeft: '10px',\r\n },\r\n '& .column-chooser .panel .panel-body .column-chooser-selection-area .column-chooser-selected .draggable-list-view ul.draggable-list': {\r\n padding: '10px',\r\n height: '290px',\r\n overflowX: 'visible',\r\n overflowY: 'auto',\r\n },\r\n '& .column-chooser .panel .panel-body .column-chooser-selection-area .column-chooser-selected .draggable-list-view ul.draggable-list li.draggable-list-item.draggable-list__item-locked': {\r\n backgroundColor: '#E5E5E5',\r\n marginBottom: '5px',\r\n border: '1px solid gray',\r\n cursor: 'not-allowed',\r\n padding: '7px',\r\n },\r\n '& .column-chooser .panel .panel-body .column-chooser-selection-area .column-chooser-selected .draggable-list-view ul.draggable-list li.draggable-list-item.draggable-list__item-draggable': {\r\n cursor: 'move',\r\n padding: '5px',\r\n marginBottom: '5px',\r\n backgroundColor: '#e7f0f6',\r\n border: '1px solid #008272',\r\n height: '28px',\r\n },\r\n '& .column-chooser .panel .panel-body .column-chooser-selection-area .column-chooser-selected .draggable-list-view ul.draggable-list li.draggable-list-item.draggable-list__item-draggable.draggable-list__item-preview': {\r\n opacity: '& .5',\r\n marginLeft: '10px',\r\n marginRight: '10px',\r\n },\r\n '& .column-chooser .panel .panel-body .column-chooser-selection-area .column-chooser-selected .draggable-list-view ul.draggable-list li.draggable-list-item.draggable-list__item-draggable span.remove': {\r\n float: 'right',\r\n },\r\n '& .column-chooser .panel .panel-body .column-chooser-selection-area .column-chooser-selected .draggable-list-view ul.draggable-list li.draggable-list-item .selected-list-item span': {\r\n M: 'none',\r\n W: 'none',\r\n fallbacks: [\r\n {\r\n M: 'none',\r\n },\r\n ],\r\n userSelect: 'none',\r\n },\r\n '& .column-chooser .panel .panel-body .save-column-view': {\r\n display: 'inline-block',\r\n },\r\n '& .column-chooser .panel .panel-body .save-column-view .save-checkbox': {\r\n height: '25px',\r\n verticalAlign: 'middle',\r\n },\r\n '& .column-chooser .panel .panel-body .save-column-view .save-checkbox .column-chooser-save-column': {\r\n fontWeight: 'normal',\r\n },\r\n '& .column-chooser .panel .panel-body .save-column-view .save-checkbox input.column-chooser-saved-name': {\r\n border: '1px solid #BBB',\r\n padding: '3px 5px',\r\n fontSize: '12px',\r\n lineHeight: '1.45833333',\r\n },\r\n '& .column-chooser .panel .panel-footer': {\r\n marginTop: '5px',\r\n },\r\n // From @bingads-webui/theme-2016/style/css/bootstrap/less/override/panels.less\r\n // scoped under .column-chooser\r\n '& .column-chooser .panel-component': {\r\n backgroundColor: '#E7F0F6',\r\n },\r\n '& .column-chooser .panel-component .panel-heading': {\r\n backgroundColor: '#E7F0F6',\r\n },\r\n '& .column-chooser .panel-component .panel-title': {\r\n fontColor: '#333',\r\n },\r\n '& .column-chooser .panel-component .panel-body': {\r\n padding: '5px 15px',\r\n },\r\n '& .column-chooser .panel-form': {\r\n backgroundColor: 'white',\r\n border: '1px solid #BBB',\r\n padding: '5px',\r\n },\r\n '& .column-chooser .panel-form.noPadding': {\r\n padding: '0',\r\n },\r\n '& .column-chooser .panel-form .panel-heading': {\r\n marginBottom: '0',\r\n },\r\n '& .column-chooser .panel-form .section': {\r\n padding: '0 0 15px 0',\r\n },\r\n '& .column-chooser .panel-form .panel-body.noPadding': {\r\n padding: '0',\r\n },\r\n '& .column-chooser .panel-form-footer': {\r\n padding: '3px 0',\r\n },\r\n '& .column-chooser .panel.panel-white': {\r\n backgroundColor: 'white',\r\n W: 'none',\r\n boxShadow: 'none',\r\n },\r\n '& .column-chooser .panel-body': {\r\n padding: '0 15px 0 15px',\r\n },\r\n '& .column-chooser .panel-body:before, & .column-chooser .panel-body:after': {\r\n content: '\" \"',\r\n display: 'table',\r\n },\r\n '& .column-chooser .panel-body:after': {\r\n clear: 'both',\r\n },\r\n '& .column-chooser .panel-heading': {\r\n backgroundColor: '#E5E5E5',\r\n padding: '0 15px',\r\n marginBottom: '15px',\r\n },\r\n '& .column-chooser .panel-heading>.dropdown .dropdown-toggle': {\r\n color: 'inherit',\r\n },\r\n '& .column-chooser .panel-title': {\r\n fontWeight: 'bold',\r\n marginTop: '0',\r\n marginBottom: '0',\r\n lineHeight: '30px',\r\n fontSize: 14,\r\n display: 'inline',\r\n },\r\n '& .column-chooser .panel-title>a': {\r\n color: 'inherit',\r\n },\r\n '& .column-chooser .panel-footer': {\r\n padding: '0 15px 0 15px',\r\n borderTop: '0px',\r\n },\r\n '& .column-chooser hr': {\r\n borderTop: '1px solid #A2A2A2',\r\n },\r\n '& .column-chooser .save-column-checkbox': {\r\n float: 'left',\r\n },\r\n};\r\n","import { getNewFeatureLabelStyle } from '../new-feature-label-style';\r\n\r\nexport const getColumnChooserOverrideStyle = palette => ({\r\n // Shared part already moved to 'global-styles.js' to be shared with all top of grid panel.\r\n // Only put column chooser specific override here.\r\n '& .column-chooser': {\r\n display: 'block !important',\r\n lineHeight: '15px',\r\n fontWeight: 'normal',\r\n\r\n '& .panel': {\r\n '& .panel-body': {\r\n '& .column-chooser-selection-area': {\r\n padding: '0px 0px 18px 0px',\r\n\r\n '& .column-chooser-option': {\r\n backgroundColor: 'white',\r\n border: `1px solid ${palette.neutralTertiary}`,\r\n ...getNewFeatureLabelStyle({ palette }),\r\n\r\n '& .option': {\r\n height: '36px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n\r\n '& .column-chooser-option-header': {\r\n display: 'none',\r\n },\r\n\r\n '& .column-chooser-categories': {\r\n left: 0,\r\n width: '300px',\r\n\r\n '& .category-tabs': {\r\n left: 0,\r\n width: '300px',\r\n\r\n '& li a:after': {\r\n fontFamily: '\"MsAds MDL2 Assets\"',\r\n content: '\"\\\\E76C\"',\r\n color: palette.neutralSecondary,\r\n float: 'right',\r\n },\r\n\r\n '& > li': {\r\n padding: '10px 8px 10px 10px',\r\n\r\n '& .new-feature-label': {\r\n display: 'inline-block',\r\n position: 'absolute',\r\n },\r\n },\r\n\r\n '& > li.active': {\r\n fontWeight: 'normal',\r\n border: 0,\r\n backgroundColor: palette.neutralLight,\r\n '& > a.currentActive': {\r\n color: palette.themeDarker,\r\n },\r\n },\r\n },\r\n },\r\n\r\n '& .options-view .column-chooser-option-list': {\r\n border: '0px',\r\n borderLeft: `1px solid ${palette.neutralLight}`,\r\n width: '300px',\r\n height: '282px',\r\n\r\n '& .column-chooser-bulk-control': {\r\n padding: '10px 8px 9px 10px',\r\n minHeight: '38px',\r\n\r\n '& .arrow-button': {\r\n display: 'none',\r\n },\r\n },\r\n\r\n '& ul.column-chooser-options': {\r\n height: '243.6px',\r\n\r\n '& span.option-not-selected': {\r\n fontWeight: 'normal',\r\n },\r\n\r\n '& span.option-name': {\r\n display: 'inline-block',\r\n maxWidth: '165px',\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n overflow: 'hidden',\r\n },\r\n\r\n '& .option-status, & a.add-column-link': {\r\n marginLeft: 'auto',\r\n },\r\n },\r\n\r\n '& .column-chooser-editable-picker': {\r\n height: '282px',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n '& .custom-column-remove': {\r\n margin: '0px 10px',\r\n },\r\n '& .glyphicon-pencil': {\r\n textDecoration: 'none',\r\n '&:focus': {\r\n outline: `1px solid ${palette.neutralSecondary}`,\r\n },\r\n\r\n '&:before': {\r\n fontFamily: 'MsAds MDL2 Assets',\r\n content: '\"\\\\E70F\"',\r\n color: palette.themeDark,\r\n },\r\n },\r\n '& .glyphicon-remove': {\r\n textDecoration: 'none',\r\n '&:focus': {\r\n outline: `1px solid ${palette.neutralSecondary}`,\r\n },\r\n\r\n '&:before': {\r\n fontFamily: 'MsAds MDL2 Assets',\r\n content: '\"\\\\E711\"',\r\n },\r\n },\r\n '& span.option-status.enabled': {\r\n marginLeft: 'auto',\r\n },\r\n '& a.add-column-link': {\r\n marginLeft: 'auto',\r\n },\r\n '& .inapplicable-column': {\r\n marginLeft: 'auto',\r\n },\r\n '& .column-chooser-bulk-control': {\r\n padding: '0',\r\n minHeight: '38px',\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n\r\n '& .custom-column-add': {\r\n margin: '8px 8px 0px',\r\n },\r\n\r\n '& .remove-all-in-list, .add-all-in-list': {\r\n padding: '10px 8px 9px 10px',\r\n },\r\n },\r\n '& .invalid-custom-column:focus': {\r\n outline: `1px solid ${palette.neutralSecondary}`,\r\n },\r\n '& .column-chooser-options': {\r\n flex: '1 1 1px',\r\n margin: '0',\r\n '& .option': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n '& .option-name': {\r\n flex: '1',\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n\r\n '& .column-chooser-selected': {\r\n border: `1px solid ${palette.neutralTertiary}`,\r\n marginLeft: '8px',\r\n width: '300px',\r\n height: '334px',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n\r\n '& .column-chooser-selected-header': {\r\n backgroundColor: 'white',\r\n padding: '10px 0px 10px 10px',\r\n width: '298px',\r\n },\r\n\r\n '& .column-chooser-selected-header:before': {\r\n content: 'Test new header',\r\n fontWeight: 'bold',\r\n },\r\n\r\n '& .column-chooser-selected-header:after': {\r\n content: 'Test new subheader',\r\n },\r\n\r\n '& .remove-all-in-selected-list': {\r\n marginLeft: 'auto',\r\n float: 'right',\r\n display: 'inline-block',\r\n paddingTop: '10px',\r\n paddingRight: '10px',\r\n },\r\n\r\n '& .column-chooser-selected-list': {\r\n flex: '1',\r\n overflow: 'auto',\r\n '& .draggable-list-view': {\r\n margin: 0,\r\n height: '100%',\r\n width: '298px',\r\n border: 0,\r\n\r\n '& ul.draggable-list': {\r\n padding: 0,\r\n listStyle: 'none',\r\n height: '100%',\r\n overflow: 'auto',\r\n marginBottom: '0',\r\n\r\n '& li.draggable-list-item': {\r\n border: '1px solid transparent',\r\n padding: '1px 0',\r\n outline: 'none',\r\n\r\n '&:focus': {\r\n border: `1px solid ${palette.neutralTertiary}`,\r\n },\r\n\r\n '& .selected-list-item': {\r\n verticalAlign: 'middle',\r\n display: 'flex',\r\n alignItems: 'flex-start',\r\n\r\n '& .selected-item-name': {\r\n flex: '1',\r\n overflow: 'hidden',\r\n whiteSpace: 'nowrap',\r\n textOverflow: 'ellipsis',\r\n },\r\n\r\n '& .trigger-icon': {\r\n color: '#797775',\r\n fontFamily: '\"MsAds MDL2 Assets\"',\r\n lineHeight: '19px',\r\n padding: '0px 8px',\r\n position: 'relative',\r\n\r\n '&:after': {\r\n color: palette.themePrimary,\r\n content: '\"\\\\E76F\"',\r\n fontSize: '20px',\r\n },\r\n },\r\n },\r\n\r\n '&.selected, &:focus, &:hover': {\r\n '& .trigger-icon:before': {\r\n content: '\"\\\\F090\\\\F08E\"',\r\n fontSize: '14px',\r\n letterSpacing: '3px',\r\n marginTop: '-6px',\r\n position: 'absolute',\r\n writingMode: 'vertical-lr',\r\n },\r\n },\r\n\r\n '&.selected': {\r\n backgroundColor: palette.neutralLight,\r\n\r\n '& .trigger-icon:before': {\r\n color: palette.neutralPrimary,\r\n },\r\n },\r\n },\r\n\r\n '& li.draggable-list-item.draggable-list__item-locked': {\r\n height: '36px',\r\n padding: '0px',\r\n backgroundColor: 'white',\r\n\r\n '& .selected-list-item': {\r\n margin: '8px 8px 9px 36px',\r\n },\r\n },\r\n\r\n '& li.draggable-list-item.draggable-list__item-draggable': {\r\n height: '36px',\r\n padding: '0px',\r\n backgroundColor: 'white',\r\n\r\n '& .selected-list-item': {\r\n margin: '8px 8px 9px 0px',\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n\r\n '& .save-column-view': {\r\n '& .save-checkbox': {\r\n '& label+input': {\r\n marginLeft: '13px',\r\n },\r\n\r\n '& .column-chooser-save-column': {\r\n float: 'left',\r\n\r\n '& .save-column-checkbox': {\r\n height: '20px',\r\n width: '20px',\r\n },\r\n '& input[type=\"checkbox\"]': {\r\n marginRight: '8px',\r\n },\r\n },\r\n\r\n '& .column-chooser-saved-name': {\r\n height: '32px',\r\n width: '250px',\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n});\r\n","export const getNewFeatureLabelStyle = ({ palette = {} }) => ({\r\n '& .new-feature-label': {\r\n color: palette.white,\r\n border: `1px solid ${palette.white}`,\r\n padding: '0 9px',\r\n fontSize: '12px',\r\n borderRadius: '12px',\r\n backgroundColor: palette.orange,\r\n marginLeft: '5px',\r\n },\r\n});\r\n","export const filterEditorStyle = {\r\n '& .predicate-row': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n '& .filter-editor .panel': {\r\n backgroundColor: 'white',\r\n paddingBottom: '15px',\r\n border: '1px solid transparent',\r\n borderRadius: 0,\r\n boxShadow: '0 1px 1px rgba(0,0,0,0.05)',\r\n marginBottom: '15px',\r\n },\r\n '& .filter-body.filter-editor .save-form input[type=\"checkbox\"]': {\r\n marginRight: '5px',\r\n marginTop: 0,\r\n },\r\n '& .filter-body.filter-editor .save-form .btn + .btn': {\r\n marginLeft: '10px',\r\n },\r\n '& .filter-body.filter-editor .save-form .btn + .checkbox': {\r\n marginLeft: '15px',\r\n },\r\n '& .filter-body.filter-editor .save-form .checkbox label + input': {\r\n marginLeft: '10px',\r\n },\r\n '& .predicate-list li': {\r\n marginBottom: '5px',\r\n },\r\n '& .predicate-list li .error-row': {\r\n marginTop: '5px',\r\n },\r\n '& .predicate-list li .error-row label': {\r\n fontWeight: '500',\r\n fontSize: '12px',\r\n lineHeight: '16px',\r\n color: '#a80000',\r\n },\r\n '& .predicate-list li .predicate-row .filter-predicate-property': {\r\n position: 'relative',\r\n display: 'inline-block',\r\n },\r\n '& .predicate-list li .predicate-row .filter-predicate-property > .btn.btn-default': {\r\n textAlign: 'right',\r\n minWidth: '205px',\r\n },\r\n '& .predicate-list li .predicate-row .filter-predicate-property > .btn.btn-default > .selected': {\r\n float: 'left',\r\n },\r\n '& .predicate-list li .predicate-row .filter-predicate-property + .predicate-operator': {\r\n marginLeft: '10px',\r\n },\r\n '& .predicate-list li .predicate-row .form-control': {\r\n display: 'inline-block',\r\n },\r\n '& .predicate-list li .predicate-row > * + *': {\r\n marginLeft: '4px',\r\n },\r\n '& .predicate-list li .predicate-row .predicate-property': {\r\n width: '15em',\r\n },\r\n '& .predicate-list li .predicate-row .predicate-operator': {\r\n width: '15em',\r\n },\r\n '& .predicate-list li .predicate-row .predicate-operator + .predicate-value': {\r\n marginLeft: '10px',\r\n '& .checkbox-inline, & .checkbox-inline + .checkbox-inline, & .radio-inline, & .radio-inline + .radio-inline': {\r\n marginLeft: 0,\r\n marginRight: '10px',\r\n },\r\n '& .checkbox-inline:last-child, & .radio-inline:last-child': {\r\n marginRight: 0,\r\n },\r\n },\r\n '& .predicate-list li .predicate-row .predicate-value': {\r\n display: 'inline-block',\r\n },\r\n '& .predicate-list li .predicate-row .predicate-value > input': {\r\n width: 'inherit',\r\n },\r\n '& .predicate-list li .predicate-row .predicate-value + .remove': {\r\n marginLeft: '16px',\r\n height: '32px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n '& .predicate-list li .predicate-row .predicate-value button.selector-dropdown-button': {\r\n backgroundColor: '#fff',\r\n border: '0',\r\n },\r\n '& .predicate-list li .predicate-row .predicate-value .selector.dropdown-menu': {\r\n marginLeft: '-1px',\r\n border: '1px solid #ccc',\r\n },\r\n '& .predicate-list li .predicate-row .single-operator-column, & .predicate-list li .predicate-row .single-property-column': {\r\n display: 'inline-block',\r\n marginTop: '4px',\r\n },\r\n '& .predicate-list li .predicate-row .dropdown-submenu': {\r\n minWidth: '150px',\r\n position: 'relative',\r\n },\r\n '& .predicate-list li .predicate-row .dropdown-submenu li': {\r\n marginBottom: '0',\r\n },\r\n '& .predicate-list li .predicate-row .dropdown-submenu > span': {\r\n display: 'inline-block',\r\n },\r\n '& .predicate-list li .predicate-row .dropdown-submenu:hover > .dropdown-menu': {\r\n display: 'block',\r\n visibility: 'visible',\r\n },\r\n '& .predicate-list li .predicate-row .dropdown-submenu .spritedimage': {\r\n marginTop: '2px',\r\n },\r\n '& .predicate-list li .predicate-row .btn .caret': {\r\n marginLeft: '5px',\r\n },\r\n '& .filter-header': {\r\n display: 'inline-block',\r\n },\r\n '& .filter-header .filter-button': {\r\n padding: '7px 10px',\r\n display: 'inline-block',\r\n },\r\n '& .filter-header .filter-button:hover': {\r\n backgroundColor: '#e5e5e5',\r\n cursor: 'pointer',\r\n },\r\n '& .filter-header .glyphicon-filter': {\r\n marginRight: '6px',\r\n },\r\n '& .filter-header .filterMenu': {\r\n border: '1px solid #CCCCCC',\r\n minWidth: '250px',\r\n padding: '2px',\r\n },\r\n '& .filter-header .filterMenu .saved': {\r\n marginBottom: '2px',\r\n },\r\n '& .filter-header .filterMenu .new, & .filter-header .filterMenu .apply': {\r\n display: 'block',\r\n color: '#404040',\r\n padding: '4px 0 4px 20px',\r\n },\r\n '& .filter-header .filterMenu .new:hover, & .filter-header .filterMenu .apply:hover, & .filter-header .filterMenu .saved>li:hover': {\r\n textDecoration: 'none',\r\n backgroundColor: '#EAECEE',\r\n },\r\n '& .filter-header .filterMenu .delete': {\r\n color: '#404040',\r\n padding: '4px 4px 4px',\r\n float: 'right',\r\n clear: 'right',\r\n },\r\n '& .filter-header .filterMenu .apply-header': {\r\n color: '#929fad',\r\n padding: '6px 0 4px 9px',\r\n },\r\n '& .filter-header .quick': {\r\n minWidth: '151px',\r\n borderWidth: '1px',\r\n borderStyle: 'solid',\r\n borderColor: '#ccc',\r\n backgroundColor: '#FFFFFF',\r\n display: 'inline-block',\r\n },\r\n '& .filter-header .quick .quick-text': {\r\n padding: '3px 5px',\r\n border: 'none',\r\n },\r\n '& .filter-header .quick .quick-text:active': {\r\n border: 'none',\r\n },\r\n '& .filter-body .save-form': {\r\n marginTop: '25px',\r\n },\r\n '& .filter-body .save-form h5.checkbox': {\r\n marginLeft: '15px',\r\n },\r\n '& .filter-body .save-form .name': {\r\n width: '300px',\r\n },\r\n '& .grid-toolbar-bar': {\r\n fontSize: 12,\r\n },\r\n '& .predicate-list>ul': {\r\n marginBottom: '10px',\r\n },\r\n '& .predicate-list>ul>li.row': {\r\n marginBottom: '4px',\r\n },\r\n '& .predicate-list>ul>li.row>div': {\r\n paddingLeft: '2px',\r\n paddingRight: '2px',\r\n },\r\n '& .predicate-list>ul>li.row .operator-single': {\r\n lineHeight: '25px',\r\n marginLeft: '10px',\r\n marginBottom: '0',\r\n },\r\n '& .predicate-list>ul>li.row .dropdown .dropdown-control .glyphicon-triangle-bottom': {\r\n float: 'right',\r\n marginTop: '1px',\r\n },\r\n '& .predicate-list>ul>li.row .dropdown .dropdown-menu': {\r\n border: '1px solid #BBB',\r\n padding: '3px 5px',\r\n },\r\n '& .predicate-list>ul>li.row span.datepicker': {\r\n padding: '0',\r\n margin: '0',\r\n border: '0',\r\n },\r\n '& .predicate-list>ul>li.row ul.enum-options>li': {\r\n whiteSpace: 'nowrap',\r\n },\r\n '& .predicate-list>ul>li.row ul.enum-options>li input[type=\"checkbox\"]': {\r\n marginTop: '0',\r\n },\r\n '& .predicate-list a.remove, & .predicate-list a.new': {\r\n lineHeight: '20px',\r\n textDecoration: 'none',\r\n color: '#323130',\r\n fontSize: 12,\r\n },\r\n '& ol, & ul': {\r\n listStyle: 'none',\r\n paddingLeft: 0,\r\n },\r\n};\r\n","export const getFilterEditorOverrideStyle = palette => ({\r\n '& .filter-editor': {\r\n '& .save-form .checkbox label': {\r\n display: 'inline-block',\r\n },\r\n '& .panel-body': {\r\n paddingLeft: '32px',\r\n lineHeight: '19px',\r\n marginBottom: '28px',\r\n },\r\n '& .glyphicon-remove:before': {\r\n // eslint-disable-next-line no-useless-escape\r\n content: '\"\\\\E711\"',\r\n },\r\n '& .glyphicon': {\r\n display: 'inline-block',\r\n 'font-family': 'MsAds MDL2 Assets',\r\n 'font-size': '14px',\r\n 'font-style': 'normal',\r\n '-webkit-font-smoothing': 'antialiased',\r\n '-moz-osx-font-smoothing': 'grayscale',\r\n },\r\n '& .glyphicon.glyphicon-remove': {\r\n top: 0,\r\n },\r\n '& .glyphicon.glyphicon-plus': {\r\n marginRight: 8,\r\n height: 14,\r\n width: 14,\r\n fontFamily: 'MsAds MDL2 Assets',\r\n color: palette.themePrimary,\r\n top: 2,\r\n },\r\n '& .glyphicon-plus:before': {\r\n content: '\"\\\\E710\" !important',\r\n },\r\n '& .delivery-status-category-container:first-of-type': {\r\n float: 'left',\r\n marginLeft: '20px',\r\n display: 'inline-block',\r\n marginTop: 0,\r\n },\r\n\r\n '& .delivery-status-category-container + .delivery-status-category-container': {\r\n paddingLeft: 20,\r\n float: 'left',\r\n },\r\n '& .predicate-row': {\r\n alignItems: 'end',\r\n },\r\n '& .filter_button': {\r\n marginTop: 2,\r\n },\r\n },\r\n});\r\n","// Styles for legacy filter bar to make it looks like New UI, no need to use it for new filter bar\r\nexport const getLegacyFilterBarStyle = ({ palette }) => ({\r\n '& .filter-bar': {\r\n '& .panel-component': {\r\n backgroundColor: palette.neutralLighter,\r\n marginBottom: '0 !important',\r\n minHeight: 56,\r\n minWidth: 1000,\r\n lineHeight: '24px',\r\n padding: '15px 10px',\r\n\r\n '& .panel-body': {\r\n padding: 0,\r\n\r\n '& .filter_title_collapsed': {\r\n marginRight: 35,\r\n },\r\n\r\n '& .filter_row_readonly .humanized': {\r\n '& .column, & .filter_operator': {\r\n marginRight: 5,\r\n },\r\n\r\n '& .filterValue': {\r\n fontWeight: 600,\r\n },\r\n\r\n '& .filterand': {\r\n display: 'inline-block',\r\n width: 20,\r\n },\r\n },\r\n\r\n '& .filter_links': {\r\n marginLeft: 40,\r\n\r\n '& a': {\r\n display: 'inline-block',\r\n textDecoration: 'none',\r\n\r\n '&:nth-child(2n)': {\r\n fontWeight: 600,\r\n marginRight: 30,\r\n color: palette.neutralPrimary,\r\n },\r\n\r\n '&:last-child': {\r\n marginRight: 0,\r\n },\r\n },\r\n },\r\n\r\n '& .filter_title_collapsed, & .filter_row_readonly, & .filter_links': {\r\n display: 'inline-block',\r\n },\r\n },\r\n },\r\n },\r\n});\r\n","import { getSharedBodyStyles } from './body';\r\nimport { getSharedColGroupStyles } from './col-group';\r\nimport { getSharedColumnsStyles } from './columns';\r\nimport { getSharedFooterStyles } from './footer';\r\nimport { getSharedGlobalStyles } from './global';\r\nimport { getSharedHeaderStyles } from './header';\r\nimport { getSharedTableStyles } from './table';\r\nimport * as variables from './variables';\r\n\r\nexport const GridSharedStyles = {\r\n getSharedBodyStyles,\r\n getSharedColGroupStyles,\r\n getSharedColumnsStyles,\r\n getSharedFooterStyles,\r\n getSharedGlobalStyles,\r\n getSharedHeaderStyles,\r\n getSharedTableStyles,\r\n variables,\r\n};\r\n","import { totalRowBackgroundColor, tableBorder } from './variables';\r\n\r\nexport const getSharedBodyStyles = (components, { palette }) => ({\r\n '& tr.segment-row': {\r\n fontSize: '12px',\r\n\r\n // Need this so values in primary key will stay 12px\r\n '& .segment-value': {\r\n fontSize: '12px',\r\n },\r\n },\r\n // The total rows at the bottom of the table\r\n '& tr.aggregate-row': {\r\n '& td': {\r\n fontSize: '12px !important',\r\n },\r\n },\r\n '& tr.aggregated-row': {\r\n '& td': {\r\n fontSize: '12px !important',\r\n backgroundColor: totalRowBackgroundColor,\r\n },\r\n '&:hover': { // No hover color changes for aggregated rows.\r\n '& td': {\r\n fontSize: '12px !important',\r\n borderRight: tableBorder,\r\n },\r\n },\r\n },\r\n '& tr': {\r\n backgroundColor: '#FFFFFF',\r\n color: palette.neutralPrimary,\r\n\r\n // hide extra border between header and body, the first filler tr in grid need to be excluded\r\n '&[data-key]:first-child, &:not([data-key]) + tr[data-key]': {\r\n '& td': {\r\n borderTop: 'none',\r\n },\r\n },\r\n\r\n '&[data-key]:hover, &.row-selected[data-key], &.row-selected[data-key]:hover': {\r\n '& td': {\r\n borderBottom: '1px solid #FFFFFF',\r\n },\r\n },\r\n\r\n '&:hover': {\r\n backgroundColor: palette.neutralLighter,\r\n },\r\n\r\n '&.row-selected': {\r\n backgroundColor: palette.neutralLight,\r\n '& td a': {\r\n color: palette.themeDarker,\r\n fontWeight: 600,\r\n },\r\n '&:hover': {\r\n backgroundColor: palette.neutralQuaternaryAlt,\r\n },\r\n },\r\n\r\n '&:hover, &.row-selected, &.row-selected:hover': {\r\n '& td': {\r\n borderRight: '1px solid #FFFFFF',\r\n },\r\n },\r\n\r\n '&.grid-error-row': {\r\n '& td': {\r\n '& ul.grid-error-list': {\r\n listStyle: 'none',\r\n paddingLeft: 0,\r\n margin: '0.5em 0',\r\n color: '#A80000',\r\n '& .grid-error': {\r\n paddingRight: 5,\r\n },\r\n },\r\n },\r\n },\r\n },\r\n});\r\n","import { PagePadding } from '../../constants/pagePadding';\r\n\r\nexport const headerRowBackgroundColor = '#FFFFFF';\r\nexport const headerRowBorderTop = '2px solid #81868B';\r\nexport const headerRowBorderBottom = '2px solid #81868B';\r\nexport const totalRowBackgroundColor = '#FFFFFF';\r\nexport const totalRowBorderTop = 'none'; // `1px solid ${palette.neutralLighter}`\r\nexport const tableBorder = '1px solid #EDEBE9';\r\n\r\nexport const gridPaddingLeft = PagePadding.mainSectionLeftPadding;\r\nexport const gridPaddingComponsation = 0; // These two should add up to 32px\r\n","// use this in '& col'\r\nexport const getSharedColGroupStyles = () => ({\r\n width: 120,\r\n minWidth: 120,\r\n\r\n '&.col-selection': {\r\n width: 46,\r\n minWidth: 46,\r\n },\r\n});\r\n","/* eslint-disable max-len */\r\nimport { tableBorder } from './variables';\r\n\r\nexport const getSharedColumnsStyles = () => ({\r\n '&': {\r\n padding: '6px 8px',\r\n verticalAlign: 'middle',\r\n border: tableBorder, // NOTE: updated from 'palette.neutralLighter' for fit and finish experiments\r\n fontSize: '12px',\r\n overflowWrap: 'break-word',\r\n },\r\n\r\n '&:first-child': {\r\n paddingLeft: '12px',\r\n },\r\n\r\n '& span': {\r\n lineHeight: '16px',\r\n },\r\n});\r\n","import { gridPaddingComponsation } from './variables';\r\n\r\nexport const getSharedFooterStyles = () => ({\r\n '& tr.noborder': {\r\n '& td': {\r\n border: 'none',\r\n paddingLeft: '0px',\r\n paddingTop: '24px',\r\n '& .pagination-control': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n marginTop: '5px',\r\n marginBottom: '5px',\r\n marginLeft: gridPaddingComponsation,\r\n\r\n '& .form-control.page-size-selector': {\r\n marginLeft: '5px',\r\n minWidth: '60px',\r\n },\r\n '& .pager': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n marginTop: '0',\r\n marginBottom: '0',\r\n marginLeft: '20px',\r\n '& .nav-button': {\r\n border: 'none',\r\n padding: '0',\r\n minWidth: '20px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n '&.prev': {\r\n marginRight: '10px',\r\n '& + .text': {\r\n display: 'none', // to hide text \"Page:\"\r\n },\r\n },\r\n '&.next': {\r\n marginLeft: '10px',\r\n },\r\n '&:disabled': {\r\n backgroundColor: '#fff',\r\n },\r\n },\r\n '& .page-number-input': {\r\n marginRight: '5px',\r\n width: '75px',\r\n },\r\n },\r\n },\r\n },\r\n },\r\n});\r\n","export const getSharedGlobalStyles = (components, { palette }) => ({\r\n '.bingadsgrid': {\r\n '& .grid-noresult, & .grid-noresult-empty, & .noresult': {\r\n color: palette.neutralSecondary,\r\n fontSize: 26,\r\n lineHeight: '36px',\r\n padding: '20px 0 20px 40px',\r\n },\r\n },\r\n '.table-container .glyphicon.glyphicon-triangle-left': {\r\n fontFamily: '\"MsAds MDL2 Assets\"',\r\n },\r\n '.table-container .glyphicon.glyphicon-triangle-left::before': {\r\n content: '\"\\\\E76B\"',\r\n color: palette.neutralSecondary,\r\n },\r\n '.table-container .btn:disabled .glyphicon.glyphicon-triangle-left::before': {\r\n color: '#BEBBB8',\r\n },\r\n '.table-container .glyphicon.glyphicon-triangle-right': {\r\n fontFamily: '\"MsAds MDL2 Assets\"',\r\n },\r\n '.table-container .glyphicon.glyphicon-triangle-right::before': {\r\n content: '\"\\\\E76C\"',\r\n color: palette.neutralSecondary,\r\n },\r\n '.table-container .btn:disabled .glyphicon.glyphicon-triangle-right::before': {\r\n color: '#BEBBB8',\r\n },\r\n '.table-container .glyphicon.glyphicon-triangle-bottom': {\r\n fontFamily: '\"MsAds MDL2 Assets\"',\r\n },\r\n '.table-container .glyphicon.glyphicon-triangle-bottom::before': {\r\n content: '\"\\\\E70D\"',\r\n color: palette.neutralSecondary,\r\n },\r\n '.table-container .btn:disabled .glyphicon.glyphicon-triangle-bottom::before': {\r\n color: '#BEBBB8',\r\n },\r\n});\r\n","import { tableBorder, totalRowBorderTop, totalRowBackgroundColor, headerRowBorderBottom, headerRowBackgroundColor, headerRowBorderTop } from './variables';\r\n\r\nexport const getSharedHeaderStyles = (components, { palette, iconFontFamily = 'MsAds MDL2 Assets' }) => ({\r\n '& tr.aggregated-row': {\r\n '& th': {\r\n fontSize: '12px',\r\n },\r\n },\r\n '& tr.overall-total-row': {\r\n '& th': {\r\n fontWeight: 'normal',\r\n borderTop: totalRowBorderTop,\r\n borderBottom: tableBorder,\r\n backgroundColor: totalRowBackgroundColor,\r\n },\r\n },\r\n '& tr': {\r\n '& th.column-header': {\r\n borderTop: headerRowBorderTop,\r\n borderBottom: headerRowBorderBottom,\r\n '& .helpbutton::before': {\r\n position: 'static',\r\n },\r\n\r\n '& span.grid-header-text': {\r\n overflowWrap: 'break-word',\r\n wordBreak: 'break-word',\r\n },\r\n '& span.grid-header-helpId': {\r\n lineHeight: 1,\r\n },\r\n },\r\n '& th': {\r\n verticalAlign: 'middle',\r\n fontWeight: '600',\r\n backgroundColor: headerRowBackgroundColor,\r\n color: palette.neutralPrimary,\r\n border: tableBorder,\r\n padding: '6px 8px',\r\n },\r\n\r\n '& th:first-child': {\r\n paddingLeft: '12px',\r\n },\r\n\r\n // we don't want pop first column header to have special padding left\r\n '&.pop-enabled + tr.pop-enabled th:first-child': {\r\n paddingLeft: '10px',\r\n },\r\n\r\n '& th.column-header-sortable': {\r\n cursor: 'pointer',\r\n },\r\n\r\n '&.grid-cross-page-select-all': {\r\n '& th': {\r\n padding: '0',\r\n border: 'none',\r\n },\r\n },\r\n '& .glyphicon': {\r\n fontFamily: iconFontFamily,\r\n },\r\n '& .glyphicon-arrow-up:before': {\r\n content: '\"\\\\EE68\"',\r\n },\r\n '& .glyphicon-arrow-down:before': {\r\n content: '\"\\\\EE69\"',\r\n },\r\n\r\n // this temporary style for grid POP before we got UI from designer\r\n '& th span.pop-toggle-icon.clickable': {\r\n height: '14px',\r\n width: '14px',\r\n border: '1px solid transparent',\r\n display: 'inline-block',\r\n float: 'none',\r\n marginTop: '3px',\r\n\r\n '&:hover': {\r\n border: '1px solid black',\r\n },\r\n\r\n '& span': {\r\n display: 'block',\r\n fontSize: '10px',\r\n fontFamily: iconFontFamily,\r\n fontWeight: 'bold',\r\n '-webkit-font-smoothing': 'antialiased',\r\n height: '12px',\r\n lineHeight: '12px',\r\n textAlign: 'center',\r\n width: '12px',\r\n\r\n '&.pop-expand:before': {\r\n content: '\"\\\\E710\"',\r\n color: 'black',\r\n },\r\n\r\n '&.pop-collapse:before': {\r\n content: '\"\\\\E738\"',\r\n color: 'black',\r\n },\r\n },\r\n },\r\n },\r\n\r\n '& tr.pop-enabled th.column-header.pop-column-header > div.column-header-container': {\r\n display: 'inline-block',\r\n },\r\n});\r\n","export const getSharedTableStyles = (components, { palette }) => ({\r\n '&': {\r\n borderLeft: 'none',\r\n borderRight: 'none',\r\n borderBottom: 'none',\r\n },\r\n '& .glyphicon': {\r\n position: 'static',\r\n },\r\n\r\n '& .iconba': {\r\n position: 'static',\r\n },\r\n\r\n '& .grid-disabled': {\r\n color: palette.neutralSecondaryAlt,\r\n },\r\n});\r\n","// Export themes here\r\nexport { ThemeFluent } from './theme-fluent';\r\nexport { DarkTheme } from './dark-theme';\r\n","import { createTheme, CommunicationColors, NeutralColors, SharedColors, Depths } from '@fluentui/react';\r\n\r\nexport const ThemeFluent = createTheme({\r\n palette: {\r\n neutralDark: NeutralColors.gray190,\r\n neutralPrimary: NeutralColors.gray160,\r\n neutralPrimaryAlt: NeutralColors.gray150,\r\n neutralSecondary: NeutralColors.gray130,\r\n neutralSecondaryAlt: NeutralColors.gray110,\r\n neutralTertiary: NeutralColors.gray90,\r\n neutralTertiaryAlt: NeutralColors.gray60,\r\n neutralQuaternary: NeutralColors.gray50,\r\n neutralQuaternaryAlt: NeutralColors.gray40,\r\n neutralLight: NeutralColors.gray30,\r\n neutralLighter: NeutralColors.gray20,\r\n neutralLighterAlt: NeutralColors.gray10,\r\n themeDark: CommunicationColors.shade20,\r\n themeDarker: CommunicationColors.shade30,\r\n themeDarkAlt: CommunicationColors.shade10,\r\n themeLight: CommunicationColors.tint20,\r\n themeLighter: CommunicationColors.tint30,\r\n themeLighterAlt: CommunicationColors.tint40,\r\n themePrimary: CommunicationColors.primary,\r\n themeSecondary: CommunicationColors.tint10,\r\n themeTertiary: '#71afe5',\r\n // Shared Colors\r\n red: SharedColors.red10,\r\n redDark: SharedColors.red20,\r\n black: '#000000',\r\n white: '#ffffff',\r\n // MS Ads\r\n globalBackground: '#2f2f2f',\r\n mainMenuHoverBackground: '#484644',\r\n },\r\n effects: {\r\n roundedCorner2: '2px',\r\n elevation4: Depths.depth4,\r\n elevation8: Depths.depth8,\r\n elevation16: Depths.depth16,\r\n elevation64: Depths.depth64,\r\n },\r\n});\r\n\r\nThemeFluent.iconFontFamily = 'MsAds MDL2 Assets';\r\n","module.exports = __WEBPACK_EXTERNAL_MODULE__49__;","import { createTheme, Depths } from '@fluentui/react';\r\n\r\nexport const DarkTheme = createTheme({\r\n palette: {\r\n themePrimary: '#88b0cf',\r\n themeLighterAlt: '#050708',\r\n themeLighter: '#161c21',\r\n themeLight: '#29353e',\r\n themeTertiary: '#526a7c',\r\n themeSecondary: '#789bb6',\r\n themeDarkAlt: '#93b7d3',\r\n themeDark: '#a2c2da',\r\n themeDarker: '#b8d1e4',\r\n neutralLighterAlt: '#201f1e',\r\n neutralLighter: '#2A2A29',\r\n neutralLight: '#30302F',\r\n neutralQuaternaryAlt: '#1c1b1b',\r\n neutralQuaternary: '#1b1a19',\r\n neutralTertiaryAlt: '#1a1918',\r\n neutralTertiary: '#f5f9fd',\r\n neutralSecondary: '#f6fafe',\r\n neutralPrimaryAlt: '#f8fbfe',\r\n neutralPrimary: '#eff6fc',\r\n neutralDark: '#fbfdfe',\r\n black: '#fdfeff',\r\n white: '#201f1e',\r\n },\r\n\r\n effects: {\r\n roundedCorner2: '2px',\r\n elevation4: Depths.depth4,\r\n elevation8: Depths.depth8,\r\n elevation16: Depths.depth16,\r\n elevation64: Depths.depth64,\r\n },\r\n});\r\n\r\nDarkTheme.iconFontFamily = 'MsAds MDL2 Assets';\r\n","export { submitEvent } from './src/event-wrappers';\r\n","import { keyCode as KEY_CODES } from '@bingads-webui/keycode';\r\n\r\nexport const wrapKeyDownEvent = availablekeys => handler => ({ keyCode }, ...params) => {\r\n if (keyCode in availablekeys) {\r\n handler(...params);\r\n }\r\n};\r\n\r\nexport const submitEvent = wrapKeyDownEvent({ [KEY_CODES.Enter]: null, [KEY_CODES.Space]: null });\r\n","module.exports = __WEBPACK_EXTERNAL_MODULE__3__;","module.exports = __WEBPACK_EXTERNAL_MODULE__14__;","export * from './src/utils';\r\n","import _ from 'underscore';\r\nimport { startsWith } from 'underscore.string';\r\nimport { generateGuid } from '@bingads-webui-universal/primitive-utilities';\r\nimport { CustomColumnConfig } from '../types';\r\n\r\n/**\r\n * Custom columns are stored by GUID in preferences service. When referenced in\r\n * OData calls and within the grid and its plugins, the custom column is referred-to\r\n * by its ID prefixed with 'PerformanceMetrics/CustomColumn'\r\n */\r\nexport const ODATA_PREFIX = 'PerformanceMetrics/CustomColumn';\r\n\r\n/**\r\n * Grid that supports custom column in MCC level.\r\n */\r\nexport const MCCCUSTOMCOLUMNGRID = 'PerformanceGrid';\r\n\r\n/**\r\n * MCC preference name\r\n */\r\nexport const MCCPREFERENCENAME = 'MCCGrid';\r\n\r\n/**\r\n * single account preference name\r\n */\r\nexport const SINGLEACCOUNTPREFERENCENAME = 'SingleAccountGrid';\r\n\r\n/**\r\n * @param {string} customColumnId GUID string without dashes (see: generateSafeGuid())\r\n * or a custom column grid key (will passively refuse to recursively prefix IDs).\r\n * @returns {string} GUID prefixed with custom column grid key\r\n */\r\nexport function customColumnGridKeyFromId(customColumnId: string): string {\r\n if (!_.isString(customColumnId) || customColumnId.length < 1) {\r\n throw new Error('customColumnId is required to generate odataId');\r\n }\r\n\r\n if (startsWith(customColumnId, ODATA_PREFIX)) {\r\n return customColumnId;\r\n }\r\n\r\n return `${ODATA_PREFIX}${customColumnId}`;\r\n}\r\n\r\n/**\r\n * @param {string} idWithOrWithoutPrefix Custom Column grid key or output of generateSafeGuid()\r\n * @returns {string} GUID-only part of ID with prefix removed (if exists)\r\n */\r\nexport function parseIdFromGridKey(idWithOrWithoutPrefix: string): string {\r\n if (!_.isString(idWithOrWithoutPrefix) || idWithOrWithoutPrefix.length < 1) {\r\n throw new Error('non-empty string argument required to parse odataId');\r\n }\r\n\r\n return _.last(String(idWithOrWithoutPrefix).split(ODATA_PREFIX)) || '';\r\n}\r\n\r\n/**\r\n * Middle-tier endpoint does not support dashes in IDs\r\n * @returns {string} GUID with dashes removed\r\n */\r\nexport function generateSafeGuid(): string {\r\n return generateGuid().replace(/[-]+/g, '');\r\n}\r\n\r\n/**\r\n * @returns {string} A new GUID with custom column prefix attached\r\n */\r\nexport function generateCustomColumnGridKey(): string {\r\n return customColumnGridKeyFromId(generateSafeGuid());\r\n}\r\n\r\n/**\r\n * Generate a JSON object for gridDataParameters.CustomColumns from\r\n * custom column configuration object.\r\n * @param {CustomColumnConfig} customColumn - object representing custom column config\r\n * @param {boolean} strict - if true, undefined values will trigger error\r\n * @returns {Object} - properly-formatted CustomColumn for GDP\r\n */\r\nexport function customColumnForGridDataParams(customColumn: CustomColumnConfig, strict = true): object {\r\n if (strict) {\r\n _.each(['id', 'name', 'expression', 'format'], (requiredKey) => {\r\n if (!_.has(customColumn, requiredKey)) {\r\n throw new Error(`Missing custom column attribute \"${requiredKey}\"`);\r\n }\r\n });\r\n }\r\n\r\n return {\r\n Id: customColumn.id,\r\n Name: customColumn.name,\r\n CustomColumnExpression: _.isArray(customColumn.expression)\r\n ? _.compact(customColumn.expression).join(' ')\r\n : customColumn.expression,\r\n OutputFormat: customColumn.format,\r\n };\r\n}\r\n\r\n/**\r\n * Returns name used to create preference key.\r\n * It's shared across all grid except performance grid which is in MCC level.\r\n * @param {string} name - grid name\r\n * @returns {string} - preference name\r\n */\r\nexport function getCustomColumnPreferenceName(name: string): string {\r\n if (name === MCCCUSTOMCOLUMNGRID) {\r\n return MCCPREFERENCENAME;\r\n }\r\n\r\n return SINGLEACCOUNTPREFERENCENAME;\r\n}\r\n","module.exports = __WEBPACK_EXTERNAL_MODULE__18__;","export { I18nModel } from './src/index';\r\n","import _ from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport Globalize from 'globalize';\r\nimport { LocaleManager } from './locale';\r\nimport { Resource } from './resource';\r\n\r\nconst localeManager = new LocaleManager();\r\n\r\nconst dynamicLocaleInstances = [];\r\n\r\n/**\r\n * @this I18nModel\r\n * @param {String} key localization key\r\n * @returns {void}\r\n * @private\r\n */\r\nfunction assertReady(key) {\r\n if (!this.isReady()) {\r\n const debugInfo = `name-${this.name},culture-${this.locale},key-${key}`;\r\n\r\n throw new Error(`The resource is not yet ready(${debugInfo}). Please either call sync APIs only when the promise is fulfilled, or switch to use async APIs.`);\r\n }\r\n}\r\n\r\n/**\r\n * @this I18nModel\r\n * @param {String} key localization key\r\n * @returns {Resource} Current synchronous resource\r\n * @private\r\n */\r\nfunction synchronousResource(key) {\r\n assertReady.call(this, key);\r\n return this.p$data.value().resource;\r\n}\r\n\r\n/**\r\n * @this I18nModel\r\n * @returns {Globalize} Current synchronous globalize\r\n * @private\r\n */\r\nfunction synchronousGlobalize() {\r\n assertReady.call(this);\r\n return this.p$data.value().globalize;\r\n}\r\n\r\n/**\r\n * If the given object is thenable\r\n * @param {any} object - The object to be tested\r\n * @returns {bool} Current synchronous globalize\r\n * @private\r\n */\r\nfunction isThenable(object) {\r\n return object && _.isFunction(object.then);\r\n}\r\n\r\n/**\r\n * @this I18nModel\r\n * @param {string} locale - the locale used to load data\r\n * @returns {Promise} Promise of translation resource and globalize\r\n * @private\r\n */\r\nfunction loadData(locale) {\r\n const translationData = this.loadTranslationData(locale);\r\n const cldrData = this.loadCLDRData(locale);\r\n\r\n if (isThenable(translationData) || isThenable(cldrData)) {\r\n return Promise.props({\r\n locale,\r\n resource: Promise.resolve(translationData).then(data => new Resource({ data, failFast: this.failFast })),\r\n globalize: Promise.resolve(cldrData).then(cldr => new Globalize(cldr)),\r\n });\r\n }\r\n\r\n return Promise.resolve({\r\n locale,\r\n resource: new Resource({\r\n data: translationData,\r\n failFast: this.failFast,\r\n }),\r\n globalize: new Globalize(cldrData),\r\n });\r\n}\r\n\r\n/* @this I18nModel */\r\nfunction dateMethodOptions({\r\n skeleton,\r\n date,\r\n time,\r\n datetime,\r\n raw,\r\n timeZone = this.timeZone,\r\n} = {}) {\r\n return _.pick({\r\n skeleton,\r\n date,\r\n time,\r\n datetime,\r\n raw,\r\n timeZone,\r\n }, Boolean);\r\n}\r\n\r\n/* @this I18nModel */\r\nfunction withSignWrapper(withSign, method) {\r\n switch (withSign) {\r\n case 'auto':\r\n return value => method(value);\r\n case 'never':\r\n return value => method(Math.abs(value));\r\n case 'always': {\r\n const cldr = this.getCldr();\r\n const minusSign = cldr.main('numbers/symbols-numberSystem-latn/minusSign');\r\n const plusSign = cldr.main('numbers/symbols-numberSystem-latn/plusSign');\r\n\r\n return (value) => {\r\n if (value < 0) {\r\n return method(value);\r\n }\r\n // Same as described in CLDR ticket\r\n // see: http://unicode.org/cldr/trac/ticket/8732\r\n // Note: 0 will have no sign\r\n return method(-value).replace(\r\n // only support latn for now\r\n minusSign,\r\n plusSign\r\n );\r\n };\r\n }\r\n default:\r\n throw new RangeError(`'withSign' option should be one of 'auto', 'never' or 'always', but being ${withSign}`);\r\n }\r\n}\r\n\r\n/**\r\n * Return a function synchronously format a number with given options.\r\n * @param {string} [withSign=auto] - Show positive/negative sign or not.\r\n * Could be 'always', 'auto' or 'never'. 'auto' means show sign for negative but not positive.\r\n * @param {Object} [options] - Same options as [Globalize.js]{@link https://github.com/globalizejs/globalize/blob/master/doc/api/number/number-formatter.md}\r\n * @return {Function} The function formatting number\r\n * @private\r\n */\r\nfunction numberFormatterWithSign(withSign, options) {\r\n const globalizeFormatter = synchronousGlobalize.call(this).numberFormatter(options);\r\n // SignificantDigits related param override IntegerDigits/FractionDigits related param\r\n // pick Boolean to remove them if they're not passed in\r\n return withSignWrapper.call(this, withSign, value => globalizeFormatter(value));\r\n}\r\n\r\n/**\r\n * Return a function synchronously format a currency with given options.\r\n * @param {string} currency - Same options as [Globalize.js]{@link https://github.com/globalizejs/globalize/blob/master/doc/api/currency/currency-formatter.md}\r\n * @param {string} [withSign=auto] - Show positive/negative sign or not.\r\n * Could be 'always', 'auto' or 'never'. 'auto' means show sign for negative but not positive.\r\n * @param {Object} [options] - Same options as [Globalize.js]{@link https://github.com/globalizejs/globalize/blob/master/doc/api/currency/currency-formatter.md}\r\n * @return {Function} The function formatting number\r\n * @private\r\n */\r\nfunction currencyFormatterWithSign(currency, withSign = 'auto', options) {\r\n if (!currency) {\r\n return () => '0';\r\n }\r\n\r\n const globalizeFormatter = synchronousGlobalize.call(this).currencyFormatter(currency, options);\r\n // SignificantDigits related param override IntegerDigits/FractionDigits related param\r\n // pick Boolean to remove them if they're not passed in\r\n return withSignWrapper.call(this, withSign, value => globalizeFormatter(value));\r\n}\r\n\r\nfunction currencyFormatterWithSymbol(currency, withSign = 'auto', withSymbol = true, options) {\r\n if (!currency) {\r\n return () => '0';\r\n }\r\n\r\n if (withSymbol) {\r\n return currencyFormatterWithSign.call(this, currency, withSign, options);\r\n }\r\n\r\n const globalizeFormatter = synchronousGlobalize.call(this)\r\n .currencyToPartsFormatter(currency, options);\r\n const formatter = (value) => {\r\n const parts = globalizeFormatter(value);\r\n const newParts = _.map(parts, (part) => {\r\n if (part.type === 'integer'\r\n || part.type === 'group'\r\n || part.type === 'decimal'\r\n || part.type === 'fraction'\r\n ) {\r\n return part.value;\r\n }\r\n return '';\r\n });\r\n const finalValue = newParts.join('');\r\n\r\n return finalValue;\r\n };\r\n\r\n\r\n return withSignWrapper.call(this, withSign, formatter);\r\n}\r\n\r\nfunction withGlobalizeCache(fnName, i18nModel) {\r\n const realMethod = i18nModel[fnName];\r\n\r\n function createCache() {\r\n const cache = {};\r\n cache.size = 0;\r\n\r\n return cache;\r\n }\r\n\r\n return function wrappedGlobalizeMethod(...args) {\r\n const cache = i18nModel.parserFormatterCache;\r\n if (!cache[fnName]) {\r\n cache[fnName] = createCache();\r\n }\r\n\r\n let specificMethodCache = cache[fnName];\r\n\r\n const key = JSON.stringify(args);\r\n if (specificMethodCache[key]) {\r\n return specificMethodCache[key];\r\n }\r\n\r\n /* Just a precaution, don't expect cache to grow this large */\r\n if (specificMethodCache.size > 100) {\r\n cache[fnName] = createCache();\r\n specificMethodCache = cache[fnName];\r\n }\r\n\r\n specificMethodCache[key] = realMethod.apply(this, args);\r\n specificMethodCache.size += 1;\r\n\r\n return specificMethodCache[key];\r\n };\r\n}\r\n\r\n/**\r\n * I18n Model.\r\n */\r\nexport class I18nModel {\r\n static defaultFailFast = false;\r\n\r\n /**\r\n * Set global locale used for all i18n model as default locale.\r\n * @param {string} locale - should be in format of IETF language tag {@link http://www.langtag.net/}.\r\n * @returns {Promise.} resolved when all dynamic locale i18n models are ready\r\n */\r\n static setGlobalLocale(locale) {\r\n localeManager.setGlobalLocale(locale);\r\n return Promise.all(_.map(dynamicLocaleInstances, instance => instance.setLocale(locale)));\r\n }\r\n\r\n /**\r\n * Load CLDR data for Globalize.js.\r\n * Helper function which makes Globalize transparent to users.\r\n * Then user don't need to import it explictly.\r\n * @param {JSON[]} data - CLDR data.\r\n * @returns {void}\r\n */\r\n static loadCLDRData(...data) {\r\n Globalize.load(...data);\r\n }\r\n\r\n /**\r\n * Load time zone data for Globalize.js.\r\n * Helper function which makes Globalize transparent to users.\r\n * Then user don't need to import it explictly.\r\n * @param {JSON} data - Time zone data.\r\n * @returns {void}\r\n */\r\n static loadTimeZoneData(data) {\r\n Globalize.loadTimeZone(data);\r\n }\r\n\r\n /**\r\n * Sets the default failfast value for every i18nmodel\r\n *\r\n * @returns {void}\r\n * @param {string|bool} failfast when key missing\r\n * true - i18n throws error and crashes current execution\r\n * \"SAFE\" - i18n throws error asyncrounously but continues execution\r\n */\r\n static setDefaultFailFast(failfast) {\r\n I18nModel.defaultFailFast = failfast;\r\n }\r\n\r\n /**\r\n * @callback loadCLDRData\r\n * @param {string} locale - the locale used to load CLDR data\r\n * @returns {Promise.|Promise.|CldrJs|string}\r\n * The CLDR data or the locale name linked to already loaded CLDR data\r\n */\r\n\r\n /**\r\n * @callback loadTranslationData\r\n * @param {string} locale - the locale used to load translation data\r\n * @returns {Promise.>|Object.}\r\n * key value pairs as tranlation data\r\n */\r\n /**\r\n * Create a model.\r\n * When both options.loadCLDRData and options.loadTranslationData returns raw data instead\r\n * of Promise, and locale is neither 'current' nor 'dynamic', the model created is surely\r\n * ready for use synchronously.\r\n * @param {Object} options - The initialization options\r\n * @param {string} [options.name] - The name of the i18n package\r\n * @param {string} [options.locale=current] - The locale of this i18n model; could be a\r\n * specific locale (e.g. 'en-us'), 'dynamic' or 'current' (default)\r\n * @param {string} [options.timeZone] - The default timeZone used by formatDate\r\n * @param {string} [options.currency] - The default currency used by formatCurrency\r\n * @param {loadCLDRData} options.loadCLDRData - a function which accepts locale as param and\r\n * returns a promise which resolves after coresponding CLDR data loaded, and with value\r\n * the CLDR.js instance or the locale name as [Globalize constructor]{@link https://github.com/globalizejs/globalize/blob/master/doc/api/core/constructor.md} requires\r\n * @param {loadTranslationData} options.loadTranslationData - a function which accepts locale\r\n * as param and returns a promise which resolves with a translation data object\r\n * @param {string|bool} options.failFast - when key missing\r\n * true - i18n throws error and crashes current execution\r\n * \"SAFE\" - i18n throws error asyncrounously but continues execution\r\n *\r\n * @constructs I18nModel\r\n */\r\n constructor({\r\n name,\r\n locale = 'current',\r\n timeZone,\r\n currency,\r\n loadCLDRData,\r\n loadTranslationData,\r\n failFast = I18nModel.defaultFailFast,\r\n }) {\r\n this.locale = locale;\r\n this.name = name;\r\n this.timeZone = timeZone;\r\n this.currency = currency;\r\n\r\n this.loadCLDRData = loadCLDRData;\r\n this.loadTranslationData = loadTranslationData;\r\n this.missingKeys = {};\r\n this.failFast = failFast;\r\n this.parserFormatterCache = {};\r\n\r\n /* These methods return parsers and formatters that can be safely cached.\r\n (they don't have any functions as a parameter). Globalize recommends caching\r\n parsers and formatters as generating them can be very expensive */\r\n ['decimalParser',\r\n 'percentParser',\r\n 'dateFormatter',\r\n 'dateToPartsFormatter',\r\n 'dateParser',\r\n ].forEach((fnName) => {\r\n this[fnName] = withGlobalizeCache(fnName, this);\r\n });\r\n\r\n if (locale === 'dynamic') {\r\n // If dynamic, reload resource on locale change\r\n dynamicLocaleInstances.push(this);\r\n }\r\n\r\n if (locale === 'current' || locale === 'dynamic') {\r\n // Wait for initial locale to be set and then load the resource\r\n const p$globalLocale = localeManager.p$globalLocale();\r\n\r\n // when global locale is synced ready, make p$data synced ready too\r\n if (p$globalLocale.isFulfilled()) {\r\n this.p$data = loadData.call(this, p$globalLocale.value());\r\n } else {\r\n this.p$data = localeManager.p$globalLocale()\r\n .then(globalLocale => loadData.call(this, globalLocale));\r\n }\r\n } else {\r\n this.setLocale(locale);\r\n }\r\n }\r\n\r\n /**\r\n * Set locale used for this model, will reuse other data.\r\n * @param {string} locale - should be in format of IETF language tag {@link http://www.langtag.net/}.\r\n * @returns {Promise.} resolved when all resource for this model loaded\r\n */\r\n setLocale(locale) {\r\n this.p$data = loadData.call(this, locale);\r\n this.parserFormatterCache = {};\r\n\r\n return this.ready();\r\n }\r\n\r\n /**\r\n * Get a promise that resolves to this object when the resource is ready.\r\n * @return {Promise.} This object\r\n */\r\n ready() {\r\n return this.p$data.return(this);\r\n }\r\n\r\n /**\r\n * Check whether the resource is ready.\r\n * @return {boolean} Whether the resource is ready\r\n */\r\n isReady() {\r\n return this.p$data.isFulfilled();\r\n }\r\n\r\n // Sync API\r\n // All these methods only work when isReady().\r\n // If isReady() === false, these methods would throw error.\r\n\r\n /**\r\n * Synchronously get locale used for this model.\r\n * @returns {string} locale used for this model.\r\n */\r\n getLocale() {\r\n assertReady.call(this);\r\n return this.p$data.value().locale;\r\n }\r\n\r\n /**\r\n * Synchronously get Cldrjs instance.\r\n * @return {Cldrjs} The Cldrjs instance.\r\n * @see [cldr.js - Simple CLDR traverser]{@link https://github.com/rxaviers/cldrjs}\r\n */\r\n getCldr() {\r\n return synchronousGlobalize.call(this).cldr;\r\n }\r\n\r\n /**\r\n * Synchronously get first day of week.\r\n * @param {Object} [options] - options\r\n * @param {String} [options.alt] - undefined or 'variant'.\r\n * @return {string} The weekday as first day of week. One of 'mon', 'fri', 'sat', sun'.\r\n */\r\n getFirstDayOfWeek({\r\n alt,\r\n } = {}) {\r\n const cldr = this.getCldr();\r\n\r\n const defaultRegionKey = cldr.attributes.region;\r\n const key = alt ? `${defaultRegionKey}-alt-${alt}` : defaultRegionKey;\r\n\r\n return cldr.supplemental(`weekData/firstDay/${key}`) ||\r\n cldr.supplemental(`weekData/firstDay/${defaultRegionKey}`) ||\r\n // 001 means the world\r\n // see: http://cldr.unicode.org/index/cldr-spec/reasons-for-decisions\r\n cldr.supplemental('weekData/firstDay/001');\r\n }\r\n\r\n /**\r\n * Synchronously get today as CivilDate.\r\n * Note: for not introducing temporal for now,\r\n * this method only returns an object with same structure instead of a real CivilDate.\r\n * @param {Object} [options] - options\r\n * @param {String} [options.timeZone] - Time zone name under tz database format.\r\n * @return {CivilDate} Today as CivilDate.\r\n * @see [List of tz database time zones]{@link https://en.wikipedia.org/wiki/List_of_tz_database_time_zones}\r\n */\r\n getToday({\r\n timeZone = this.timeZone,\r\n } = {}) {\r\n const [\r\n { value: year },\r\n { value: month },\r\n { value: day },\r\n ] = this.formatDateToParts(new Date(), {\r\n raw: 'yyyyMMdd',\r\n timeZone,\r\n });\r\n\r\n return {\r\n year: Number(year),\r\n month: Number(month),\r\n day: Number(day),\r\n toString() { return `${year}-${month}-${day}`; },\r\n };\r\n }\r\n\r\n /**\r\n * Synchronously get today.\r\n * This method returns an object with all properties of CivilDate and time-related properties.\r\n * Note: for not introducing temporal for now,\r\n * this method only returns an object which can be operated as CivilDate but not a real CivilDate.\r\n * @param {Object} [options] - options\r\n * @param {String} [options.timeZone] - Time zone name under tz database format.\r\n * @return {CivilDate} Today as CivilDate.\r\n * @see [List of tz database time zones]{@link https://en.wikipedia.org/wiki/List_of_tz_database_time_zones}\r\n */\r\n getTodayTiming({\r\n timeZone = this.timeZone,\r\n } = {}) {\r\n const [\r\n { value: year },\r\n { value: month },\r\n { value: day },\r\n { value: hour },\r\n { value: minute },\r\n { value: second },\r\n ] = this.formatDateToParts(new Date(), {\r\n raw: 'yyyyMMddHHmmss',\r\n timeZone,\r\n });\r\n\r\n return {\r\n year: Number(year),\r\n month: Number(month),\r\n day: Number(day),\r\n hour: Number(hour),\r\n minute: Number(minute),\r\n second: Number(second),\r\n toString() { return `${year}-${month}-${day} ${hour}:${minute}:${second}`; },\r\n };\r\n }\r\n\r\n /**\r\n * Synchronously get and evaluate a localized string template (or the string as-is if it's\r\n * not a template).\r\n * If key not found, \"undefined\" will be returned, client code should check this for themselves.\r\n * @param {string} key - The key of the string resource\r\n * @param {Object} [model] - The model for the string template (if needed)\r\n * @return {string} The template evaluation result\r\n */\r\n getString(key, ...args) {\r\n let str = synchronousResource.call(this, key).getString(key, ...args);\r\n if (_.isUndefined(str)) { // key is not surrounded by fixture _TL_\r\n this.missingKeys[key] = true;\r\n if (this.failFast) {\r\n try {\r\n throw new RangeError(`i18n.getString: key is missing _TL_ fixture - \"${key}\"`);\r\n } catch (error) {\r\n if (this.failFast !== 'SAFE') {\r\n throw error;\r\n } else {\r\n _.defer(() => { throw error; });\r\n str = key;\r\n }\r\n }\r\n }\r\n }\r\n return str;\r\n }\r\n\r\n /**\r\n * Synchronously get all the localized string data object passed to Resource from onload.\r\n * @return {Object} An object of i18n key-localized value pair\r\n */\r\n getData() {\r\n return {\r\n ...synchronousResource.call(this, 'getData').data,\r\n };\r\n }\r\n\r\n /**\r\n * Synchronously get quarter's translation.\r\n * @param {Number} quarter - An integer from 1 to 4 which matches with 1st to 4th quarter\r\n * @param {Object} [options] - options\r\n * @param {String} [options.style=wide] - 'abbreviated', 'narrow' or 'wide'\r\n * @return {String} The quarter's translation\r\n */\r\n getQuarter(quarter, {\r\n style = 'wide',\r\n } = {}) {\r\n return this.getCldr().main(`dates/calendars/gregorian/quarters/stand-alone/${style}/${quarter}`);\r\n }\r\n\r\n /**\r\n * Synchronously get month's translation.\r\n * @param {Number} month - An integer from 1 to 12 which matches with January to December\r\n * @param {Object} [options] - options\r\n * @param {String} [options.style=wide] - 'abbreviated', 'narrow' or 'wide'\r\n * @return {String} The month's translation\r\n */\r\n getMonth(month, {\r\n style = 'wide',\r\n } = {}) {\r\n return this.getCldr().main(`dates/calendars/gregorian/months/stand-alone/${style}/${month}`);\r\n }\r\n\r\n /**\r\n * Synchronously get day's translation.\r\n * @param {String} day - 'sun', 'mon', 'tue', 'wed', 'thu', 'fri' or 'sat'\r\n * @param {Object} [options] - options\r\n * @param {String} [options.style=wide] - 'abbreviated', 'narrow', 'short' or 'wide'\r\n * @return {String} The day's translation\r\n */\r\n getDay(day, {\r\n style = 'wide',\r\n } = {}) {\r\n return this.getCldr().main(`dates/calendars/gregorian/days/stand-alone/${style}/${day}`);\r\n }\r\n\r\n /**\r\n * Alias of [getDay]{@link I18nModel#getDay}\r\n * @param {String} dayOfWeek - 'sun', 'mon', 'tue', 'wed', 'thu', 'fri' or 'sat'\r\n * @param {Object} [options] - options\r\n * @param {String} [options.style=wide] - 'abbreviated', 'narrow', 'short' or 'wide'\r\n * @return {String} The day's translation\r\n */\r\n getDayOfWeek(dayOfWeek, options) {\r\n return this.getDay(dayOfWeek, options);\r\n }\r\n\r\n /**\r\n * Synchronously get currency's display name.\r\n * @param {String} [currency=this.currency] - currency code under [ISO 4217]{@link https://www.iso.org/iso-4217-currency-codes.html}\r\n * @return {String} The currency's display name\r\n */\r\n getCurrency(currency = this.currency) {\r\n return this.getCldr().main(`numbers/currencies/${currency}/displayName`);\r\n }\r\n\r\n /**\r\n * Synchronously get currency's symbol.\r\n * @param {String} [currency=this.currency] - currency code under [ISO 4217]{@link https://www.iso.org/iso-4217-currency-codes.html}\r\n * @param {Object} [options] - options\r\n * @param {String} [options.alt] - undefined, 'narrow' or 'variant'.\r\n * 'narrow' or 'variant' won't exist for sure.\r\n * when the data missing, it will fallback to the default symbol.\r\n * As an example:\r\n * for TRY (Turkish Lira), default symbol is 'TRY', narrow alt is '₺', variant alt is 'TL'\r\n * @return {String} The currency's symbol\r\n */\r\n getCurrencySymbol(currency = this.currency, {\r\n alt,\r\n } = {}) {\r\n const defaultSymbolKey = 'symbol';\r\n const key = alt ? `symbol-alt-${alt}` : defaultSymbolKey;\r\n\r\n return this.getCldr().main(`numbers/currencies/${currency}/${key}`) ||\r\n this.getCldr().main(`numbers/currencies/${currency}/${defaultSymbolKey}`);\r\n }\r\n\r\n /**\r\n * The object contains all patterns\r\n * @typedef {Object} Patterns\r\n * @property {string} [full] The full format pattern\r\n * @property {string} [long] The long format pattern\r\n * @property {string} [medium] The medium format pattern\r\n * @property {string} [short] The short format pattern\r\n */\r\n\r\n /**\r\n * The DateFormats contains date/dateTime/time format patterns\r\n * @typedef {Object} DateFormats\r\n * @property {string} [default] The default date format pattern\r\n * @property {Patterns} [date] The date patterns\r\n * @property {Patterns} [dateTime] The dateTime patterns\r\n * @property {Patterns} [time] The time patterns\r\n */\r\n\r\n /**\r\n * Synchronously get date format patterns for user's culture\r\n * @return {DateFormats} The date format patterns object\r\n */\r\n getDateFormats() {\r\n const calendar = this.getCldr().main('dates/calendars/gregorian');\r\n const defaultProperties = ['full', 'long', 'medium', 'short'];\r\n\r\n return {\r\n default: calendar.dateTimeFormats.availableFormats.yMd, // Globalize will use yMd as the default date format pattern. https://github.com/globalizejs/globalize/blob/d5e98d1e3047ac722cce5817f8168268dd22ddf4/src/date.js#L136\r\n date: _.pick(calendar.dateFormats, defaultProperties),\r\n dateTime: _.pick(calendar.dateTimeFormats, defaultProperties),\r\n time: _.pick(calendar.timeFormats, defaultProperties),\r\n };\r\n }\r\n\r\n /**\r\n * Synchronously format decimal number with given options.\r\n * @param {number} number - The number to be formatted\r\n * @param {Object} [options] - Same options as [Globalize.js]{@link https://github.com/globalizejs/globalize/blob/master/doc/api/number/number-formatter.md}\r\n * @param {string} [options.withSign=auto] - Show positive/negative sign or not.\r\n * Could be 'always', 'auto' or 'never'. 'auto' means show sign for negative but not positive.\r\n * @return {string} The formatted decimal number\r\n */\r\n formatDecimal(number, options) {\r\n return this.decimalFormatter(options)(number);\r\n }\r\n\r\n /**\r\n * Return a function synchronously format decimal number with given options.\r\n * @param {Object} [options] - Same options as [Globalize.js]{@link https://github.com/globalizejs/globalize/blob/master/doc/api/number/number-formatter.md}\r\n * @param {string} [options.withSign=auto] - Show positive/negative sign or not.\r\n * Could be 'always', 'auto' or 'never'. 'auto' means show sign for negative but not positive.\r\n * @return {Function} The function formatting decimal number\r\n */\r\n decimalFormatter({\r\n minimumIntegerDigits,\r\n minimumFractionDigits,\r\n maximumFractionDigits,\r\n minimumSignificantDigits,\r\n maximumSignificantDigits,\r\n round,\r\n useGrouping,\r\n compact,\r\n withSign = 'auto',\r\n } = {}) {\r\n return numberFormatterWithSign.call(this, withSign, {\r\n style: 'decimal',\r\n minimumIntegerDigits,\r\n minimumFractionDigits,\r\n maximumFractionDigits,\r\n minimumSignificantDigits,\r\n maximumSignificantDigits,\r\n round,\r\n useGrouping,\r\n compact,\r\n });\r\n }\r\n\r\n /**\r\n * Synchronously format decimal number to fixed-point as toFixed(digits) with given options.\r\n * This method is only a shortcut built on top of formatDecimal, it isn't in i18n interface\r\n * and shouldn't be used by shared components.\r\n * @see [Number.prototype.toFixed()]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed}\r\n * @param {number} number - The number to be formatted\r\n * @param {Object} [options] - options\r\n * @param {number} [options.digits=2] - The number of fraction digits\r\n * @param {boolean} [options.round] - Same options as [Globalize.js]{@link https://github.com/globalizejs/globalize/blob/master/doc/api/number/number-formatter.md}\r\n * @param {boolean} [options.useGrouping] - Same options as [Globalize.js]{@link https://github.com/globalizejs/globalize/blob/master/doc/api/number/number-formatter.md}\r\n * @param {string} [options.withSign=auto] - Show positive/negative sign or not.\r\n * Could be 'always', 'auto' or 'never'. 'auto' means show sign for negative but not positive.\r\n * @return {string} The formatted decimal number\r\n */\r\n formatDecimalToFixed(number, options) {\r\n return this.decimalToFixedFormatter(options)(number);\r\n }\r\n\r\n /**\r\n * Return a function synchronously format decimal number to fixed-point as toFixed(digits).\r\n * This method is only a shortcut built on top of formatDecimal, it isn't in i18n interface\r\n * and shouldn't be used by shared components.\r\n * @see [Number.prototype.toFixed()]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed}\r\n * @param {Object} [options] - options\r\n * @param {number} [options.digits=2] - The number of fraction digits\r\n * @param {boolean} [options.round] - Same options as [Globalize.js]{@link https://github.com/globalizejs/globalize/blob/master/doc/api/number/number-formatter.md}\r\n * @param {boolean} [options.useGrouping] - Same options as [Globalize.js]{@link https://github.com/globalizejs/globalize/blob/master/doc/api/number/number-formatter.md}\r\n * @param {string} [options.withSign=auto] - Show positive/negative sign or not.\r\n * Could be 'always', 'auto' or 'never'. 'auto' means show sign for negative but not positive.\r\n * @return {Function} The function formatting decimal number\r\n */\r\n decimalToFixedFormatter({\r\n digits = 2,\r\n round,\r\n useGrouping,\r\n compact,\r\n withSign = 'auto',\r\n } = {}) {\r\n return this.decimalFormatter({\r\n minimumFractionDigits: digits,\r\n maximumFractionDigits: digits,\r\n round,\r\n useGrouping,\r\n compact,\r\n withSign,\r\n });\r\n }\r\n\r\n /**\r\n * Synchronously format decimal number to integer as toFixed(0) with given options.\r\n * This method is only a shortcut built on top of formatDecimal, it isn't in i18n interface\r\n * and shouldn't be used by shared components.\r\n * @see [Number.prototype.toFixed()]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed}\r\n * @param {number} number - The number to be formatted\r\n * @param {Object} [options] - options\r\n * @param {boolean} [options.round] - Same options as [Globalize.js]{@link https://github.com/globalizejs/globalize/blob/master/doc/api/number/number-formatter.md}\r\n * @param {boolean} [options.useGrouping] - Same options as [Globalize.js]{@link https://github.com/globalizejs/globalize/blob/master/doc/api/number/number-formatter.md}\r\n * @param {string} [options.withSign=auto] - Show positive/negative sign or not.\r\n * Could be 'always', 'auto' or 'never'. 'auto' means show sign for negative but not positive.\r\n * @return {string} The formatted decimal number\r\n */\r\n formatDecimalToInteger(number, options) {\r\n return this.decimalToIntegerFormatter(options)(number);\r\n }\r\n\r\n /**\r\n * Return a function synchronously format decimal number to integer as toFixed(0).\r\n * This method is only a shortcut built on top of formatDecimal, it isn't in i18n interface\r\n * and shouldn't be used by shared components.\r\n * @see [Number.prototype.toFixed()]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed}\r\n * @param {Object} [options] - options\r\n * @param {boolean} [options.round] - Same options as [Globalize.js]{@link https://github.com/globalizejs/globalize/blob/master/doc/api/number/number-formatter.md}\r\n * @param {boolean} [options.useGrouping] - Same options as [Globalize.js]{@link https://github.com/globalizejs/globalize/blob/master/doc/api/number/number-formatter.md}\r\n * @param {string} [options.withSign=auto] - Show positive/negative sign or not.\r\n * Could be 'always', 'auto' or 'never'. 'auto' means show sign for negative but not positive.\r\n * @return {Function} The function formatting decimal number\r\n */\r\n decimalToIntegerFormatter({\r\n round,\r\n useGrouping,\r\n compact,\r\n withSign = 'auto',\r\n } = {}) {\r\n return this.decimalToFixedFormatter({\r\n digits: 0,\r\n round,\r\n useGrouping,\r\n compact,\r\n withSign,\r\n });\r\n }\r\n\r\n /**\r\n * Synchronously parse decimal number.\r\n * @param {string} value - The number string to be parsed\r\n * @return {string} The parsed decimal number, NaN is value is invalid\r\n */\r\n parseDecimal(value) {\r\n return this.decimalParser()(value);\r\n }\r\n\r\n /**\r\n * Return a function synchronously parse decimal number.\r\n * @return {Function} The function parsing decimal number\r\n */\r\n decimalParser() {\r\n return synchronousGlobalize.call(this).numberParser({\r\n style: 'decimal',\r\n });\r\n }\r\n\r\n /**\r\n * Synchronously validate decimal number, a simple wrapper of parseDecimal.\r\n * @param {string} value - The number string to be validate\r\n * @return {boolean} If value is string and valid.\r\n * Note: number is not valid too, as this method is for strings.\r\n */\r\n isValidDecimal(value) {\r\n return this.decimalValidator()(value);\r\n }\r\n\r\n /**\r\n * Return a function synchronously validate decimal number.\r\n * @return {Function} The function validating decimal number\r\n */\r\n decimalValidator() {\r\n const parser = this.decimalParser();\r\n\r\n return value => _.isString(value) && !_.isNaN(parser(value));\r\n }\r\n\r\n /**\r\n * Synchronously format percent number with given options.\r\n * @param {number} number - The number to be formatted\r\n * @param {Object} [options] - Same options as [Globalize.js]{@link https://github.com/globalizejs/globalize/blob/master/doc/api/number/number-formatter.md}\r\n * @param {string} [options.withSign=auto] - Show positive/negative sign or not.\r\n * Could be 'always', 'auto' or 'never'. 'auto' means show sign for negative but not positive.\r\n * @return {string} The formatted percent number\r\n */\r\n formatPercent(number, options) {\r\n return this.percentFormatter(options)(number);\r\n }\r\n\r\n /**\r\n * Return a function synchronously format percent number with given options.\r\n * @param {Object} [options] - Same options as [Globalize.js]{@link https://github.com/globalizejs/globalize/blob/master/doc/api/number/number-formatter.md}\r\n * @param {string} [options.withSign=auto] - Show positive/negative sign or not.\r\n * Could be 'always', 'auto' or 'never'. 'auto' means show sign for negative but not positive.\r\n * @return {Function} The function formatting percent number\r\n */\r\n percentFormatter({\r\n minimumIntegerDigits,\r\n minimumFractionDigits,\r\n maximumFractionDigits,\r\n minimumSignificantDigits,\r\n maximumSignificantDigits,\r\n round,\r\n useGrouping,\r\n compact,\r\n withSign = 'auto',\r\n } = {}) {\r\n return numberFormatterWithSign.call(this, withSign, {\r\n style: 'percent',\r\n minimumIntegerDigits,\r\n minimumFractionDigits,\r\n maximumFractionDigits,\r\n minimumSignificantDigits,\r\n maximumSignificantDigits,\r\n round,\r\n useGrouping,\r\n compact,\r\n });\r\n }\r\n\r\n /**\r\n * Synchronously format percent number to fixed-point as toFixed(digits) with given options.\r\n * This method is only a shortcut built on top of formatPercent, it isn't in i18n interface\r\n * and shouldn't be used by shared components.\r\n * @see [Number.prototype.toFixed()]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed}\r\n * @param {number} number - The number to be formatted\r\n * @param {Object} [options] - options\r\n * @param {number} [options.digits=0] - The number of fraction digits\r\n * @param {boolean} [options.round] - Same options as [Globalize.js]{@link https://github.com/globalizejs/globalize/blob/master/doc/api/number/number-formatter.md}\r\n * @param {boolean} [options.useGrouping] - Same options as [Globalize.js]{@link https://github.com/globalizejs/globalize/blob/master/doc/api/number/number-formatter.md}\r\n * @param {string} [options.withSign=auto] - Show positive/negative sign or not.\r\n * Could be 'always', 'auto' or 'never'. 'auto' means show sign for negative but not positive.\r\n * @return {string} The formatted percent number\r\n */\r\n formatPercentToFixed(number, options) {\r\n return this.percentToFixedFormatter(options)(number);\r\n }\r\n\r\n /**\r\n * Return a function synchronously format percent number to fixed-point as toFixed(digits).\r\n * This method is only a shortcut built on top of percentFormatter, it isn't in i18n interface\r\n * and shouldn't be used by shared components.\r\n * @see [Number.prototype.toFixed()]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed}\r\n * @param {Object} [options] - options\r\n * @param {number} [options.digits=0] - The number of fraction digits\r\n * @param {boolean} [options.round] - Same options as [Globalize.js]{@link https://github.com/globalizejs/globalize/blob/master/doc/api/number/number-formatter.md}\r\n * @param {boolean} [options.useGrouping] - Same options as [Globalize.js]{@link https://github.com/globalizejs/globalize/blob/master/doc/api/number/number-formatter.md}\r\n * @param {string} [options.withSign=auto] - Show positive/negative sign or not.\r\n * Could be 'always', 'auto' or 'never'. 'auto' means show sign for negative but not positive.\r\n * @return {Function} The function formatting percent number\r\n */\r\n percentToFixedFormatter({\r\n digits = 0,\r\n round,\r\n useGrouping,\r\n compact,\r\n withSign = 'auto',\r\n } = {}) {\r\n return this.percentFormatter({\r\n minimumFractionDigits: digits,\r\n maximumFractionDigits: digits,\r\n round,\r\n useGrouping,\r\n compact,\r\n withSign,\r\n });\r\n }\r\n\r\n /**\r\n * Synchronously parse percent number.\r\n * @param {string} value - The number string to be parsed\r\n * @return {string} The parsed percent number, NaN when value is invalid\r\n */\r\n parsePercent(value) {\r\n return this.percentParser()(value);\r\n }\r\n\r\n /**\r\n * Return a function synchronously parse percent number.\r\n * @return {Function} The function parsing percent number\r\n */\r\n percentParser() {\r\n return synchronousGlobalize.call(this).numberParser({\r\n style: 'percent',\r\n });\r\n }\r\n\r\n /**\r\n * Synchronously validate percent number, a simple wrapper of parsePercent.\r\n * @param {string} value - The number string to be validate\r\n * @return {boolean} If value is string and valid\r\n */\r\n isValidPercent(value) {\r\n return this.percentValidator()(value);\r\n }\r\n\r\n /**\r\n * Return a function synchronously validate percent number.\r\n * @return {Function} The function validating percent number\r\n */\r\n percentValidator() {\r\n const parser = this.percentParser();\r\n\r\n return value => _.isString(value) && !_.isNaN(parser(value));\r\n }\r\n\r\n /**\r\n * Synchronously format currency with given options.\r\n * @param {number} number - The number to be formatted\r\n * @param {string} currency - Same options as [Globalize.js]{@link https://github.com/globalizejs/globalize/blob/master/doc/api/currency/currency-formatter.md}\r\n * @param {Object} [options] - Same options as [Globalize.js]{@link https://github.com/globalizejs/globalize/blob/master/doc/api/currency/currency-formatter.md}\r\n * @param {string} [options.withSign=auto] - Show positive/negative sign or not.\r\n * Could be 'always', 'auto' or 'never'. 'auto' means show sign for negative but not positive.\r\n * @param {string} [options.withSymbol=true] - Show currency symbol or not.\r\n * @return {string} The formatted currency\r\n */\r\n formatCurrency(number, currency = this.currency, options) {\r\n return this.currencyFormatter(currency, options)(number);\r\n }\r\n\r\n /**\r\n * Return a function synchronously format currency with given options.\r\n * @param {string} currency - Same options as [Globalize.js]{@link https://github.com/globalizejs/globalize/blob/master/doc/api/currency/currency-formatter.md}\r\n * @param {Object} [options] - Same options as [Globalize.js]{@link https://github.com/globalizejs/globalize/blob/master/doc/api/currency/currency-formatter.md}\r\n * @param {string} [options.withSign=auto] - Show positive/negative sign or not.\r\n * Could be 'always', 'auto' or 'never'. 'auto' means show sign for negative but not positive.\r\n * @param {string} [options.withSymbol=true] - Show currency symbol or not.\r\n * @return {Function} The function formatting currency\r\n */\r\n currencyFormatter(currency = this.currency, options = {}) {\r\n // Didn't do argument destructuring for options,\r\n // due to currencyFormatter dose not format floating point correctly\r\n // with some of the options undefined.\r\n const { withSign, withSymbol } = options;\r\n\r\n return currencyFormatterWithSymbol.call(this, currency, withSign, withSymbol, _.omit(options, 'withSign', 'withSymbol'));\r\n }\r\n\r\n /**\r\n * Synchronously format date with given options.\r\n * @param {Date} value - The date to be formatted\r\n * @param {Object} [options] Same options as [Globalize.js]{@link https://github.com/globalizejs/globalize/blob/master/doc/api/date/date-formatter.md}\r\n * @return {string} The formatted date\r\n */\r\n formatDate(value, options) {\r\n return this.dateFormatter(options)(value);\r\n }\r\n\r\n /**\r\n * Return a function synchronously format date with given options.\r\n * @param {Object} [options] Same options as [Globalize.js]{@link https://github.com/globalizejs/globalize/blob/master/doc/api/date/date-formatter.md}\r\n * @return {Function} The function formatting date\r\n */\r\n dateFormatter(options) {\r\n return synchronousGlobalize.call(this)\r\n .dateFormatter(dateMethodOptions.call(this, options));\r\n }\r\n\r\n /**\r\n * Synchronously format date into parts tokens with given options.\r\n * @param {Date} value - The date to be formatted\r\n * @param {Object} [options] Same options as [Globalize.js]{@link https://github.com/globalizejs/globalize/blob/master/doc/api/date/date-formatter.md}\r\n * @return {Object[]} The formatted date parts\r\n */\r\n formatDateToParts(value, options) {\r\n return this.dateToPartsFormatter(options)(value);\r\n }\r\n\r\n /**\r\n * Return a function synchronously format date into parts tokens with given options.\r\n * @param {Object} [options] Same options as [Globalize.js]{@link https://github.com/globalizejs/globalize/blob/master/doc/api/date/date-formatter.md}\r\n * @return {Function} The function formatting date to parts\r\n */\r\n dateToPartsFormatter(options) {\r\n return synchronousGlobalize.call(this)\r\n .dateToPartsFormatter(dateMethodOptions.call(this, options));\r\n }\r\n\r\n /**\r\n * Synchronously parse date.\r\n * @param {string} value - The date string to be parsed\r\n * @param {Object} [options] - Same options as [Globalize.js]{@link https://github.com/globalizejs/globalize/blob/master/doc/api/date/date-parser.md}\r\n * @return {string} The parsed date, null when value is invalid\r\n */\r\n parseDate(value, options) {\r\n return _.isString(value) ? this.dateParser(options)(value) : null;\r\n }\r\n\r\n /**\r\n * Return a function synchronously parse date with given options.\r\n * @param {Object} [options] Same options as [Globalize.js]{@link https://github.com/globalizejs/globalize/blob/master/doc/api/date/date-formatter.md}\r\n * @return {Function} The function parsing date\r\n */\r\n dateParser(options) {\r\n return synchronousGlobalize.call(this)\r\n .dateParser(dateMethodOptions.call(this, options));\r\n }\r\n\r\n /**\r\n * Synchronously validate date, a simple wrapper of parseDate.\r\n * @param {string} value - The date string to be validate\r\n * @param {Object} [options] - Same options as [Globalize.js]{@link https://github.com/globalizejs/globalize/blob/master/doc/api/date/date-parser.md}\r\n * @return {boolean} If value is string and valid\r\n */\r\n isValidDate(value, options) {\r\n return this.dateValidator(options)(value);\r\n }\r\n\r\n /**\r\n * Return a function synchronously validate date with given options.\r\n * @param {Object} [options] Same options as [Globalize.js]{@link https://github.com/globalizejs/globalize/blob/master/doc/api/date/date-formatter.md}\r\n * @return {Function} The function validating date\r\n */\r\n dateValidator(options) {\r\n const parser = this.dateParser(options);\r\n\r\n return value => _.isString(value) && !_.isNull(parser(value));\r\n }\r\n\r\n /**\r\n * Synchronously format civil date to localized string.\r\n * @param {CivilDate} civilDate - The civil date to be formatted\r\n * @param {Object} [options] Same options as [Globalize.js]{@link https://github.com/globalizejs/globalize/blob/master/doc/api/date/date-formatter.md}\r\n * except for 'timeZone', time', and 'datetime'.\r\n * As CivilDate doesn't have timeZone/time infomation.\r\n * @return {string} The formatted civil date\r\n * @see [Temporal Proposal]{@link https://github.com/tc39/proposal-temporal}\r\n */\r\n formatCivilDate(civilDate, options) {\r\n return this.civilDateFormatter(options)(civilDate);\r\n }\r\n\r\n /**\r\n * Return a function synchronously format civil date into string with given options.\r\n * @param {Object} [options] Same options as [Globalize.js]{@link https://github.com/globalizejs/globalize/blob/master/doc/api/date/date-formatter.md}\r\n * except for 'timeZone', time', and 'datetime'.\r\n * As CivilDate doesn't have timeZone/time infomation.\r\n * @return {Function} The function formatting civil date to string\r\n * @see [Temporal Proposal]{@link https://github.com/tc39/proposal-temporal}\r\n */\r\n civilDateFormatter(options) {\r\n const dateFormatter = this.dateFormatter(_.defaults({\r\n // we create a date under machine time zone from civilDate\r\n timeZone: null,\r\n }, _.omit(options, 'datetime', 'time')));\r\n\r\n return civilDate => dateFormatter(new Date(civilDate.year, civilDate.month - 1, civilDate.day));\r\n }\r\n\r\n /**\r\n * Synchronously parse civil date.\r\n * @param {string} value - The date string to be parsed\r\n * @param {Object} [options] Same options as [Globalize.js]{@link https://github.com/globalizejs/globalize/blob/master/doc/api/date/date-formatter.md}\r\n * except for 'timeZone', time', and 'datetime'.\r\n * As CivilDate doesn't have timeZone/time infomation.\r\n * @return {string} The parsed civil date, null when value is invalid\r\n * @see [Temporal Proposal]{@link https://github.com/tc39/proposal-temporal}\r\n */\r\n parseCivilDate(value, options) {\r\n return this.civilDateParser(options)(value);\r\n }\r\n\r\n /**\r\n * Return a function synchronously parse civil date with given options.\r\n * @param {Object} [options] Same options as [Globalize.js]{@link https://github.com/globalizejs/globalize/blob/master/doc/api/date/date-formatter.md}\r\n * except for 'timeZone', time', and 'datetime'.\r\n * As CivilDate doesn't have timeZone/time infomation.\r\n * @return {Function} The function parsing civil date\r\n * @see [Temporal Proposal]{@link https://github.com/tc39/proposal-temporal}\r\n */\r\n civilDateParser(options) {\r\n const dateParser = this.dateParser(_.defaults({\r\n // we create a date under machine time zone from civilDate\r\n timeZone: 'UTC',\r\n }, _.omit(options, 'datetime', 'time')));\r\n\r\n return (value) => {\r\n const date = dateParser(value);\r\n // for now, we don't want introduce temporal as dependency of this package\r\n return _.isDate(date) ? {\r\n year: date.getUTCFullYear(),\r\n month: date.getUTCMonth() + 1,\r\n day: date.getUTCDate(),\r\n toString() { return date.toISOString().substr(0, 10); },\r\n } : null;\r\n };\r\n }\r\n\r\n /**\r\n * Synchronously format unit with given options.\r\n * @param {number} value - The number to be formatted\r\n * @param {string} unit - The unit to be formatted\r\n * @param {Object} [options] Same options as [Globalize.js]{@link https://github.com/globalizejs/globalize/blob/master/doc/api/unit/unit-formatter.md}\r\n * @return {string} The formatted unit\r\n */\r\n formatUnit(value, unit, options) {\r\n return this.unitFormatter(unit, options)(value);\r\n }\r\n\r\n /**\r\n * Return a function synchronously format unit with given options.\r\n * @param {string} unit - The unit to be formatted\r\n * @param {Object} [options] Same options as [Globalize.js]{@link https://github.com/globalizejs/globalize/blob/master/doc/api/unit/unit-formatter.md}\r\n * @return {Function} The function formatting unit\r\n */\r\n unitFormatter(unit, {\r\n form,\r\n numberFormatter = this.decimalFormatter(),\r\n } = {}) {\r\n return synchronousGlobalize.call(this).unitFormatter(unit, {\r\n form,\r\n numberFormatter,\r\n });\r\n }\r\n\r\n /**\r\n * Synchronously format list with given options.\r\n * @param {string[]} list - The list to be formatted\r\n * @param {Object} [options] Same options as [Intl.ListFormat stage 2 proposal]{@link https://github.com/zbraniecki/proposal-intl-list-format}\r\n * @param {Object} [options.style=regular] Could be one of \"regular\", \"regular-long\",\r\n * \"regular-short\", \"unit\", \"unit-long\", \"unit-short\", \"unit-narrow\"\r\n * @return {string} The formatted list\r\n */\r\n formatList(list, options) {\r\n return this.listFormatter(options)(list);\r\n }\r\n\r\n /**\r\n * Return a function synchronously format list with given options.\r\n * @param {Object} [options] Same options as [Intl.ListFormat stage 2 proposal]{@link https://github.com/zbraniecki/proposal-intl-list-format}\r\n * @param {Object} [options.style=regular] Could be one of \"regular\", \"regular-long\",\r\n * \"regular-short\", \"unit\", \"unit-long\", \"unit-short\", \"unit-narrow\"\r\n * @return {Function} The function formatting list\r\n */\r\n listFormatter({\r\n style = 'regular',\r\n } = {}) {\r\n const [type, variant] = style.split('-');\r\n const cldr = this.getCldr();\r\n const cldrTypeName = _.compact([\r\n type === 'regular' ? 'standard' : type,\r\n variant === 'long' ? null : variant,\r\n ]).join('-');\r\n const listPattern = cldr.main(`listPatterns/listPattern-type-${cldrTypeName}`);\r\n const template = pattern => ([first, second]) => pattern.replace('{0}', first).replace('{1}', second);\r\n const twoTemplate = template(listPattern['2']);\r\n const middleTemplate = template(listPattern.middle);\r\n const startTemplate = template(listPattern.start);\r\n const endTemplate = template(listPattern.end);\r\n\r\n return (list) => {\r\n const size = _.size(list);\r\n\r\n if (size === 0) {\r\n return '';\r\n } else if (size === 1) {\r\n return list[0];\r\n }\r\n\r\n if (size === 2) {\r\n return twoTemplate(list);\r\n }\r\n\r\n const [first, second, ...rest] = list;\r\n const middle = _.reduce(\r\n _.initial(rest),\r\n (memo, item) => middleTemplate([memo, item]),\r\n second\r\n );\r\n\r\n return startTemplate([\r\n first,\r\n endTemplate([\r\n middle,\r\n _.last(list),\r\n ]),\r\n ]);\r\n };\r\n }\r\n\r\n // Async API\r\n\r\n /**\r\n * Asynchronously get and evaluate a localized string template (or the string as-is if it's\r\n * not a template).\r\n * @param {string} key - The key of the string resource\r\n * @param {Object} [model] - The model for the string template (if needed)\r\n * @return {Promise.} A promise that resolves to the template evaluation result\r\n */\r\n fetchString(key, ...args) {\r\n return this.p$data.then(({ resource }) => {\r\n const str = resource.getString(key, ...args);\r\n if (!str) {\r\n this.missingKeys[key] = true;\r\n }\r\n return str;\r\n });\r\n }\r\n\r\n /**\r\n * Asynchronously get locale used for this model.\r\n * @returns {Promise.} locale used for this model.\r\n */\r\n fetchLocale() {\r\n return this.p$data.then(data => data.locale);\r\n }\r\n}\r\n","module.exports = __WEBPACK_EXTERNAL_MODULE__5__;","import Promise from 'bluebird';\r\n\r\n/**\r\n * A helper to handle set/get global locale asynchronously.\r\n * @private\r\n */\r\nexport class LocaleManager {\r\n constructor() {\r\n this.p$global = new Promise((resolve) => {\r\n this.resolveGlobalLocale = resolve;\r\n });\r\n }\r\n\r\n /**\r\n * Get global locale promise.\r\n * @returns {Promise.} promise of global locale\r\n * @private\r\n */\r\n p$globalLocale() {\r\n return this.p$global;\r\n }\r\n\r\n /**\r\n * Set global locale.\r\n * @param {string} locale - global locale to set.\r\n * @returns {Promise.} promise of global locale\r\n * @private\r\n */\r\n setGlobalLocale(locale) {\r\n if (this.p$global.isFulfilled()) {\r\n // has been inited\r\n this.p$global = Promise.resolve(locale);\r\n } else {\r\n // first init\r\n this.resolveGlobalLocale(locale);\r\n }\r\n\r\n return this.p$globalLocale();\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport * as putil from '@bingads-webui-universal/primitive-utilities';\r\n\r\n/**\r\n * Translation resource.\r\n * @private\r\n */\r\nexport class Resource {\r\n /**\r\n * Creates an instance of Resource.\r\n * @param {Object} options - options\r\n * @param {Object.} data - key -> translation pairs.\r\n * @param {string|bool} failFast - when got errors\r\n * \"SAFE\" - ignore errors and try to recover by using keys\r\n * else - throw errors and crash current execution\r\n * @constructs Resource\r\n * @private\r\n */\r\n constructor({\r\n data,\r\n failFast,\r\n }) {\r\n if (!_.isObject(data)) {\r\n throw new Error('Localization data must be an Object');\r\n }\r\n\r\n this.data = data;\r\n this.failFast = failFast;\r\n }\r\n\r\n /**\r\n * Get translation of given key.\r\n * When translation is Mustache.js-style template string, model will be filled in.\r\n * @param {string} key - key of the message translated.\r\n * @param {Object.} [model] - model to be filled into the template string.\r\n * @param {Function} [preprocess] - Function to use on the template before running curlyTemplate.\r\n * @returns {string} the translation.\r\n * @private\r\n */\r\n getString(key, model, {\r\n preprocess = _.identity,\r\n } = {}) {\r\n if (!_.isString(key)) {\r\n throw new Error('Localization key must be a String');\r\n }\r\n\r\n let ret = putil.get(this.data, key);\r\n\r\n if (_.isNull(ret)) { // translation is not ready, use English text instead\r\n ret = key;\r\n }\r\n\r\n if (ret) {\r\n try {\r\n ret = preprocess(ret);\r\n } catch (ex) {\r\n if (this.failFast === 'SAFE') {\r\n // maybe there are some errors in the translated strings, try to recover by using the key\r\n ret = preprocess(key);\r\n } else {\r\n throw ex;\r\n }\r\n }\r\n\r\n if (!_.isString(ret)) {\r\n throw new Error(`Preprocess function must return a String. ${key}`);\r\n }\r\n\r\n if (model) {\r\n try {\r\n const compiled = putil.curlyTemplate(ret);\r\n ret = compiled(model);\r\n } catch (ex) {\r\n if (this.failFast === 'SAFE') {\r\n // maybe there are some errors in the translated strings, try to recover by using the key\r\n const compiled = putil.curlyTemplate(key);\r\n ret = compiled(model);\r\n } else {\r\n throw ex;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return ret;\r\n }\r\n}\r\n","import * as constants from './src/constants';\r\n\r\nexport { DateStore } from './src/data-store';\r\n\r\nexport { JSDataCacheManager } from './src/js-data-cache-manager';\r\n\r\nexport {\r\n PartitionStrategy,\r\n} from './src/partition-strategy/index';\r\n\r\nexport {\r\n MatchStrategy,\r\n StandardMatchStrategy,\r\n} from './src/match-strategy/index';\r\n\r\nexport {\r\n InvalidateStrategy,\r\n CascadeInvalidateStrategy,\r\n WriteActionInvalidateStrategy,\r\n} from './src/invalidate-strategy/index';\r\n\r\nexport {\r\n CacheIndex,\r\n ResourceCacheIndex,\r\n} from './src/cache-index/index';\r\n\r\nexport { constants };\r\n","export const BUILTIN_ACTIONS = [\r\n 'find',\r\n 'findAll',\r\n 'create',\r\n 'update',\r\n 'updateAll',\r\n 'destroy',\r\n 'destroyAll',\r\n];\r\n\r\nexport const BUILTIN_WRITE_ACTIONS = [\r\n 'create',\r\n 'update',\r\n 'updateAll',\r\n 'destroy',\r\n 'destroyAll',\r\n];\r\n","import _ from 'underscore';\r\nimport JSData from 'js-data';\r\nimport { JSDataCacheManager } from './js-data-cache-manager';\r\n\r\nexport class DataStore extends JSData.DS {\r\n /**\r\n * A subclass of JSData.DS integrated with the cache manager. This class\r\n * delegates all public APIs of {@link JSDataCacheManager}.\r\n * @param {Object} options -\r\n * @param {CacheOptions} options.cacheOptions -\r\n * The constructor parameters for the cache manager. Refer to\r\n * {@link JSDataCacheManager}. The `store` property is not needed. It will\r\n * be filled with the the newly created store instance.\r\n */\r\n constructor(options = {}) {\r\n super(_.omit(options, 'cacheOptions'));\r\n\r\n // Initialize the cache manager\r\n this.cacheManager = new JSDataCacheManager(_.defaults({\r\n store: this,\r\n }, options.cacheOptions));\r\n\r\n // Delegate the cache manager methods\r\n _.each([\r\n 'enableCacheOnAdapter',\r\n 'getResult',\r\n 'setResult',\r\n 'getCacheHint',\r\n 'setCacheHint',\r\n 'invalidate',\r\n ], (name) => {\r\n this[name] = (...args) => this.cacheManager[name](...args);\r\n });\r\n }\r\n}\r\n","module.exports = __WEBPACK_EXTERNAL_MODULE__13__;","import _ from 'underscore';\r\nimport { Subject } from '@bingads-webui-universal/observer-pattern';\r\nimport { TimeAwareCache } from '@bingads-webui-universal/time-aware-cache';\r\n\r\nimport { StandardMatchStrategy } from './match-strategy/index';\r\nimport { PartitionStrategy } from './partition-strategy/index';\r\nimport { ClientCacheManager } from './client-cache-manager';\r\nimport { ServerCacheManager } from './server-cache-manager';\r\n\r\nimport { BUILTIN_ACTIONS } from './constants';\r\n\r\n/**\r\n * Decorate a JSData adapter for a certain cache manager\r\n * @private\r\n * @param {JSDataCacheManager} cacheManager - The cache manager\r\n * @param {string} name - Name of the adapter\r\n * @param {WrapperCallback} wrapper - The wrapper callback used to decorate the adapter\r\n * @returns {void}\r\n */\r\nfunction decorateAdapter(cacheManager, name, wrapper) {\r\n const { store, actions } = cacheManager;\r\n const adapter = store.adapters[name];\r\n\r\n /**\r\n * @private\r\n * @callback {WrapperCallback}\r\n * @param {JSDataAdapter} adapter - The adapter to decorate\r\n * @returns {MethodWrapperCallback} - The callback to wrap adapter methods\r\n */\r\n const methodWrapper = wrapper(adapter);\r\n\r\n store.adapters[name] = _.reduce(actions, (memo, action) => {\r\n if (_.isFunction(adapter[action])) {\r\n _.extend(memo, {\r\n /**\r\n * @private\r\n * @callback {MethodWrapperCallback}\r\n * @param {string} action - The action name\r\n * @returns {Function} - The wrapped adapter method\r\n */\r\n [action]: methodWrapper(action),\r\n });\r\n }\r\n return memo;\r\n }, {});\r\n}\r\n\r\n/**\r\n * Monitor all actions of a certain adapter for a cache manager\r\n * @private\r\n * @param {JSDataCacheManager} cacheManager - The JSDataCacheManager instance\r\n * @param {string} name - The name of the adapter\r\n * @returns {void}\r\n */\r\nfunction monitorAdapter(cacheManager, name) {\r\n decorateAdapter(cacheManager, name, adapter => action => (...parameters) => {\r\n /**\r\n * @typedef {Object} BeforeExecuteParameters\r\n * @property {string} action - The action being execute\r\n * @property {string} adapter - The name of the adapter\r\n * @property {Object[]} parameters - The action parameters\r\n */\r\n const eventParams = {\r\n action,\r\n adapter: name,\r\n parameters,\r\n };\r\n\r\n // Send 'beforeExecute' notification\r\n cacheManager.notify('beforeExecute', eventParams);\r\n const result = adapter[action](...parameters);\r\n\r\n /**\r\n * @typedef {Object} AfterExecuteParameters\r\n * @property {string} action - The action being execute\r\n * @property {string} adapter - The name of the adapter\r\n * @property {Object[]} parameters - The action parameters\r\n * @property {boolean} isSuccess - If the action was succeeded\r\n * @property {Object} data - The data returned by the action on success\r\n * @property {Error} error - The error on failure\r\n */\r\n result.then((data) => {\r\n // Send 'afterExecute' notification on success\r\n cacheManager.notify('afterExecute', _.defaults({\r\n isSuccess: true,\r\n data,\r\n }, eventParams));\r\n }, (error) => {\r\n // Send 'afterExecute' notification on failure\r\n cacheManager.notify('afterExecute', _.defaults({\r\n isSuccess: false,\r\n error,\r\n }, eventParams));\r\n });\r\n\r\n return result;\r\n });\r\n}\r\n\r\n/**\r\n * Monitor all the adapters for a JSDataCacheManager\r\n * @private\r\n * @param {JSDataCacheManager} cacheManager - The JSDataCacheManager instance\r\n * @returns {void}\r\n */\r\nfunction monitorAdapters(cacheManager) {\r\n const { store } = cacheManager;\r\n const registerAdapter = store.registerAdapter.bind(store);\r\n\r\n store.registerAdapter = (name, adapter, options) => {\r\n registerAdapter(name, adapter, options);\r\n monitorAdapter(cacheManager, name);\r\n };\r\n\r\n _.each(_.keys(store.adapters), _.partial(monitorAdapter, cacheManager));\r\n}\r\n\r\nexport class JSDataCacheManager extends Subject {\r\n /**\r\n * Cache manager coupling with a JSData Store to manage both client side and\r\n * server side cache.\r\n * @param {Object} options -\r\n * @param {JSData.DS} options.store - The JSData data store\r\n * @param {string[]} [options.actions=[]] - Addtional custom JSData actions\r\n * @param {InvalidateStrategy[]} [options.invalidateStrategies=[]] -\r\n * Invalidate strategies which observe the cache manager actions and\r\n * invalidates cache items based on its customized logic\r\n * @param {MatchStrategy[]} [options.matchStrategies=[]] -\r\n * Custom match strategy for the client side cache to reuse cached values\r\n * with a similar cache key. The standard match strategy, which does the\r\n * exact match, will always be prepended to the list.\r\n * @param {PartitionStrategy[]} [options.partitionStrategies] -\r\n * Client side cache partition strategy. It can be used to assign separated\r\n * quota for certain queries. The default value is a single item array with\r\n * an unlimited partition for all cache entries\r\n */\r\n constructor({\r\n store,\r\n actions = [],\r\n invalidateStrategies = [],\r\n matchStrategies = [],\r\n partitionStrategies = [\r\n new PartitionStrategy({ cache: new TimeAwareCache() }),\r\n ],\r\n }) {\r\n super();\r\n this.store = store;\r\n this.actions = _.union(actions, BUILTIN_ACTIONS);\r\n\r\n // Initialize the client side cache manager\r\n this.clientCacheManager = new ClientCacheManager({\r\n matchStrategies: [new StandardMatchStrategy()].concat(matchStrategies),\r\n partitionStrategies,\r\n });\r\n\r\n // Initialize the server side cache manager\r\n this.serverCacheManager = new ServerCacheManager();\r\n\r\n // Initialize the invalidate strategies\r\n this.invalidateStrategies = invalidateStrategies;\r\n _.each(invalidateStrategies, strategy => strategy.initializeCacheManager(this));\r\n\r\n monitorAdapters(this);\r\n }\r\n\r\n /**\r\n * Enable cache on a given adapter. When cache is enabled on an adapter, all\r\n * the action methods will receive 5 cache related callbacks through options.\r\n * @param {string} name - The name of the adapter\r\n * @param {AdapterDecoratorCallback} decorator - A decorative function to\r\n * modify the behavior of a JSData adatper\r\n * @returns {void}\r\n */\r\n enableCacheOnAdapter(name, decorator) {\r\n decorateAdapter(this, name, (adapter) => {\r\n /**\r\n * To decorate an JSData adapter. The object returned can be a partial\r\n * adapter containing only the modified methods. For actions not included\r\n * in the decorated adatper, they will fallback to the original adapter.\r\n * @callback AdapterDecoratorCallback\r\n * @param {JSDataAdapter} adapter - The original adapter\r\n * @returns {JSDataAdapter} - The decorated adapter\r\n */\r\n const decoratedAdapter = decorator(adapter);\r\n\r\n return (action) => {\r\n const selectedAdapter = _.find([\r\n decoratedAdapter,\r\n adapter,\r\n ], _.compose(_.isFunction, _.property(action)));\r\n\r\n return (definition, ...args) => {\r\n const resource = definition.name;\r\n const scope = { resource, adapter: name };\r\n const resultKey = query => _.extend({ query }, scope);\r\n\r\n return selectedAdapter[action](definition, ..._.initial(args), _.defaults({\r\n /**\r\n * Get cached result for a query\r\n * @param {Object} query - The query\r\n * @returns {*} - The cached result, null for cache miss.\r\n */\r\n getResult: query => this.getResult(resultKey(query)),\r\n\r\n /**\r\n * Set cached result for a query\r\n * @param {Object} query - The query\r\n * @param {*} result - The query result\r\n * @param {number} ttl - The life cycle of this cached result\r\n * @returns {void}\r\n */\r\n setResult: (query, result, ttl) => this.setResult(resultKey(query), result, ttl),\r\n\r\n /**\r\n * Delete cached result for a query\r\n * @param {Object} query - The query\r\n * @returns {void}\r\n */\r\n delResult: query => this.delResult(resultKey(query)),\r\n\r\n /**\r\n * Get server side cache hint\r\n * @returns {*} - Server side cache hint\r\n */\r\n getCacheHint: () => this.getCacheHint(scope),\r\n\r\n /**\r\n * Set server side cache hint\r\n * @param {*} hint - Server side cache hint\r\n * @param {number} ttl - The life cycle of this cache hint\r\n * @returns {void}\r\n */\r\n setCacheHint: (hint, ttl) => this.setCacheHint(scope, hint, ttl),\r\n\r\n /**\r\n * Delete server side cache hint\r\n * @returns {*} - Server side cache hint\r\n */\r\n delCacheHint: () => this.delCacheHint(scope),\r\n\r\n /**\r\n * Wrap the data fetching callback to use client side cache. Return\r\n * the cached result on cache hit. Save the result in cache.\r\n * @param {Object} query - The query object\r\n * @param {FetchCallback} callback - The callback to fetch data\r\n * @param {number} ttl - The life time of the cached data\r\n * @returns {*} result - The fetched data\r\n */\r\n cacheResult: (query, callback, ttl) => {\r\n const key = resultKey(query);\r\n const result = this.getResult(key) || callback(query);\r\n\r\n this.setResult(key, result, ttl);\r\n return result;\r\n },\r\n }, _.last(args)));\r\n };\r\n };\r\n });\r\n }\r\n\r\n /**\r\n * Get the cached data\r\n * @param {ClientCacheKey} key - The cache key\r\n * @returns {*} - The cached data, null on cache miss\r\n */\r\n getResult(key) {\r\n return this.clientCacheManager.match(key);\r\n }\r\n\r\n /**\r\n * Set the cached data for given key\r\n * @param {ClientCacheKey} key - The cache key\r\n * @param {*} result - The data associated with the key\r\n * @param {number} ttl - The life time of the cache entry\r\n * @returns {*} - The cached value\r\n */\r\n setResult(key, result, ttl) {\r\n return this.clientCacheManager.set(key, result, ttl);\r\n }\r\n\r\n /**\r\n * Delete the cached data\r\n * @param {ClientCacheKey} key - The cache key\r\n * @returns {void}\r\n */\r\n delResult(key) {\r\n return this.clientCacheManager.del(key);\r\n }\r\n\r\n /**\r\n * Get the server cache hint\r\n * @param {ServerCacheKey} key - The cache key\r\n * @returns {*} - The server cache hint, null on cache miss\r\n */\r\n getCacheHint(key) {\r\n return this.serverCacheManager.get(key);\r\n }\r\n\r\n /**\r\n * Set the server side cache hint for given key\r\n * @param {ServerCacheKey} key - The cache key\r\n * @param {*} hint - The server cache hint associated with the key\r\n * @param {number} ttl - The life time of the cache entry\r\n * @returns {*} - The cache hint\r\n */\r\n setCacheHint(key, hint, ttl) {\r\n return this.serverCacheManager.set(key, hint, ttl);\r\n }\r\n\r\n /**\r\n * Get the server cache hint\r\n * @param {ServerCacheKey} key - The cache key\r\n * @returns {*} - The server cache hint, null on cache miss\r\n */\r\n delCacheHint(key) {\r\n return this.serverCacheManager.del(key);\r\n }\r\n\r\n /**\r\n * Invalidate both client side and server side cache for given resource\r\n * @param {string} resource - Name of the resoruce (entity type) to invalidate\r\n * @param {bool} isTriggeredFromOutside - Indicate whether the invalidate is from outside\r\n * @returns {void}\r\n */\r\n invalidate(resource, isTriggeredFromOutside = false) {\r\n this.notify('beforeInvalidate', resource);\r\n this.clientCacheManager.invalidate(resource);\r\n this.serverCacheManager.invalidate(resource);\r\n this.notify('afterInvalidate', resource, isTriggeredFromOutside);\r\n }\r\n}\r\n","module.exports = __WEBPACK_EXTERNAL_MODULE__15__;","module.exports = __WEBPACK_EXTERNAL_MODULE__16__;","export { MatchStrategy } from './base';\r\nexport { StandardMatchStrategy } from './standard';\r\n","/**\r\n * Match strategies provides customized client side cache matching logic, so\r\n * that the cached results with same/similar keys may be reused to improve cache\r\n * hit rate.\r\n */\r\nexport class MatchStrategy {\r\n /**\r\n * Initialize a cache manager for applying the match strategy\r\n * @param {ClientCacheManager} cacheManager - The cache manager to initialize\r\n * @returns {void}\r\n */\r\n initializeCacheManager(/* cacheManager */) {\r\n }\r\n\r\n /**\r\n * Find a cached value matching the key according to the match strategies\r\n * @abstract\r\n * @param {ClientCacheManager} cacheManager - The client cache manager\r\n * @param {ClientCacheKey} key - The cache key\r\n * @returns {*} - The value matching the given key. Return null for no match.\r\n */\r\n match(/* cacheManager, key */) {\r\n return null;\r\n }\r\n}\r\n","import { MatchStrategy } from './base';\r\n\r\n/**\r\n * Standard match strategy. Only match match the cache entry with exactly the\r\n * same key\r\n */\r\nexport class StandardMatchStrategy extends MatchStrategy {\r\n /**\r\n * Find a key/value pair matching the key according to the match strategies\r\n * @override\r\n * @param {ClientCacheManager} cacheManager - The client cache manager\r\n * @param {ClientCacheKey} key - The cache key\r\n * @returns {*} - The value matching the given key. Return null for no match.\r\n */\r\n match(cacheManager, key) {\r\n return cacheManager.get(key);\r\n }\r\n}\r\n","export { PartitionStrategy } from './base';\r\n","import _ from 'underscore';\r\n\r\nexport class PartitionStrategy {\r\n /**\r\n * Partition strategy is used to put certain cache items into separated storage\r\n * cache with standalone quota. A PartitionStrategy instance has a TimeAwareCache\r\n * and a condition method\r\n * @param {Object} options -\r\n * @param {TimeAwareCache} options.cache - Limit of the default partition\r\n * @param {PartitionConditionCallback} options.condition - The conditional partitions\r\n */\r\n constructor({\r\n cache = null,\r\n condition = _.constant(true),\r\n } = {}) {\r\n this.options = { cache, condition };\r\n }\r\n\r\n /**\r\n * Initialize a cache manager for applying the partition strategy\r\n * @param {ClientCacheManager} cacheManager - The cache manager to initialize\r\n * @returns {void}\r\n */\r\n initializeCacheManager(/* cacheManager */) {\r\n }\r\n\r\n /**\r\n * The storage cache\r\n * @type {TimeAwareCache}\r\n */\r\n get cache() {\r\n return this.options.cache;\r\n }\r\n\r\n /**\r\n * Condition for this partition\r\n * @param {ClientCacheManager} cacheManager - The client side cache manager\r\n * @param {ClientCacheKey} key - The cache key\r\n * @returns {boolean} - True if the key falls into this partition\r\n */\r\n condition(cacheManager, key) {\r\n /**\r\n * @callback {PartitionConditionCallback}\r\n * @param {ClientCacheManager} cacheManager - The client side cache manager\r\n * @param {ClientCacheKey} key - The cache key\r\n * @returns {boolean} - True if the key falls into this partition\r\n */\r\n return this.options.condition(cacheManager, key);\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { BaseCacheManager } from './base-cache-manager';\r\n\r\n/**\r\n * @typedef {Object} ClientCacheKey\r\n * @property {string} resource - Resource name (entity type name)\r\n * @property {string} adapter - Adapter name\r\n * @property {Object} query - The query object\r\n */\r\n\r\nexport class ClientCacheManager extends BaseCacheManager {\r\n /**\r\n * Client side cache manager to cache the response data\r\n * @param {Object} options -\r\n * @param {MatchStrategy[]} matchStrategies - The match strategies\r\n * @param {PartitionStrategy[]} partitionStrategies - The partition strategies\r\n */\r\n constructor({\r\n matchStrategies,\r\n partitionStrategies,\r\n }) {\r\n super();\r\n\r\n // Initialize the match strategies\r\n this.matchStrategies = matchStrategies;\r\n _.each(this.matchStrategies, strategy => strategy.initializeCacheManager(this));\r\n\r\n // Initialize the partition strategy\r\n this.partitionStrategies = partitionStrategies;\r\n _.each(this.partitionStrategies, strategy => strategy.initializeCacheManager(this));\r\n\r\n // Delegate the notifications from all storage caches, so that the cacheIndex\r\n // can be updated accordingly\r\n _.each(this.partitionStrategies, ({ cache }) => cache && cache.subscribe(this));\r\n }\r\n\r\n /**\r\n * Get the storage cache (TimeAwareCache) according to the partition strategy\r\n * @override\r\n * @param {ClientCacheKey} key - The cache key\r\n * @returns {TimeAwareCache} - The storage cache for the given key\r\n */\r\n storageCacheFor(key) {\r\n return _.chain(this.partitionStrategies)\r\n .find(strategy => strategy.condition(this, key))\r\n .result('cache', null)\r\n .value();\r\n }\r\n\r\n /**\r\n * Find the cached result using the matching strategies\r\n * @param {ClientCacheKey} key - The cache key\r\n * @returns {*} - The matched value\r\n */\r\n match(key) {\r\n let result = null;\r\n\r\n _.find(this.matchStrategies, (strategy) => {\r\n result = strategy.match(this, key);\r\n return Boolean(result);\r\n });\r\n\r\n return result;\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport stringify from 'json-stable-stringify';\r\nimport { Subject } from '@bingads-webui-universal/observer-pattern';\r\nimport { ResourceCacheIndex } from './cache-index/index';\r\n\r\nexport class BaseCacheManager extends Subject {\r\n /**\r\n * An abstraction of ClientCacheManager and ServerCacheManager\r\n */\r\n constructor() {\r\n super();\r\n\r\n /**\r\n * Resource based index of cache entries\r\n * @type {ResourceCacheIndex}\r\n */\r\n this.cacheIndex = new ResourceCacheIndex(this);\r\n }\r\n\r\n /**\r\n * Get the storage cache for the given cache key\r\n * @abstract\r\n * @param {Object} key - The cache key\r\n * @returns {TimeAwareCache} - The storage cache for the given key\r\n */\r\n storageCacheFor(/* key */) {\r\n return null;\r\n }\r\n\r\n /**\r\n * Serialize the cache key\r\n * @param {Object} key - The cache key\r\n * @returns {string} - The string representation of the cache key\r\n */\r\n serializeKey(key) {\r\n return stringify(key);\r\n }\r\n\r\n /**\r\n * Deserialize the cache key from a string\r\n * @param {Object} keyStr - The string representation of the cache key\r\n * @returns {string} - The deserialized cache key\r\n */\r\n deserializeKey(keyStr) {\r\n return JSON.parse(keyStr);\r\n }\r\n\r\n /**\r\n * Invalidate cache items for a given resource (entity type)\r\n * @param {string} resource - Name of the resource\r\n * @returns {void}\r\n */\r\n invalidate(resource) {\r\n _.each(this.cacheIndex.keys({ resource }), (keyStr) => {\r\n this.del(this.deserializeKey(keyStr));\r\n });\r\n }\r\n\r\n /**\r\n * Get cached value for a key\r\n * @param {Object} key - The cache key\r\n * @returns {*} - The cached value\r\n */\r\n get(key) {\r\n const cache = this.storageCacheFor(key);\r\n\r\n return cache ? cache.get(this.serializeKey(key)) : null;\r\n }\r\n\r\n /**\r\n * Set a value for a key\r\n * @param {Object} key - The cache key\r\n * @param {*} value - The cache value\r\n * @param {number} ttl - The life cycle of the cache entry (in milliseconds)\r\n * @returns {*} - The cached value. In case the value is a Promise, it would\r\n * return a new promise resolves to the same value after the cache item is\r\n * fully settled.\r\n */\r\n set(key, value, ttl) {\r\n const cache = this.storageCacheFor(key);\r\n\r\n if (cache) {\r\n const keyStr = this.serializeKey(key);\r\n\r\n cache.set(keyStr, value, ttl);\r\n\r\n if (Promise.resolve(value) === value) {\r\n return value.catch((err) => {\r\n cache.del(keyStr);\r\n throw err;\r\n });\r\n }\r\n }\r\n return value;\r\n }\r\n\r\n /**\r\n * Delete a cache entry\r\n * @param {Object} key - The cache key\r\n * @returns {void}\r\n */\r\n del(key) {\r\n const cache = this.storageCacheFor(key);\r\n\r\n if (cache) {\r\n cache.del(this.serializeKey(key));\r\n }\r\n }\r\n\r\n /**\r\n * Delegate the onGet notification\r\n * @private\r\n * @param {TimeAwareCache} cache - The issued storage cache\r\n * @param {number} timestamp - Timestamp of the action\r\n * @param {CacheEntry} entry - The matched cache entry\r\n * @returns {void}\r\n */\r\n onGet(cache, timestamp, entry) {\r\n this.notify('onGet', timestamp, entry);\r\n }\r\n\r\n /**\r\n * Delegate the onSet notification\r\n * @private\r\n * @param {TimeAwareCache} cache - The issued storage cache\r\n * @param {number} timestamp - Timestamp of the action\r\n * @param {CacheEntry} entry - The written cache entry\r\n * @param {string} keyToReplace - The key of replaced cache item\r\n * @returns {void}\r\n */\r\n onSet(cache, timestamp, entry, keyToReplace) {\r\n this.notify('onSet', timestamp, entry, keyToReplace);\r\n }\r\n\r\n /**\r\n * Delegate the onDel notification\r\n * @private\r\n * @param {TimeAwareCache} cache - The issued storage cache\r\n * @param {number} timestamp - Timestamp of the action\r\n * @param {CacheEntry} entry - The cache entry to be deleted\r\n * @returns {void}\r\n */\r\n onDel(cache, timestamp, entry) {\r\n this.notify('onDel', timestamp, entry);\r\n }\r\n}\r\n","module.exports = __WEBPACK_EXTERNAL_MODULE__24__;","export { CacheIndex } from './base';\r\nexport { ResourceCacheIndex } from './resource';\r\n","export class CacheIndex {\r\n /**\r\n * Index of cache entries. Keep track which keys are in the cache, and provide\r\n * query methods.\r\n * @param {TimeAwareCache} cache - The cache to index\r\n */\r\n constructor(cache) {\r\n cache.subscribe(this);\r\n }\r\n\r\n /**\r\n * Handle the onSet notification of the cache\r\n * @private\r\n * @param {TimeAwareCache} cache - The cache to index\r\n * @param {number} timestamp - The timestamp of the operation\r\n * @param {CacheEntry} entry - The cache entry being updated\r\n * @param {string} keyToReplace - The cache key being replaced\r\n * @returns {void}\r\n */\r\n onSet(cache, timestamp, { key } = {}, keyToReplace) {\r\n if (keyToReplace) {\r\n this.del(keyToReplace);\r\n }\r\n if (key) {\r\n this.add(key);\r\n }\r\n }\r\n\r\n /**\r\n * Handle the onDel notification of the cache\r\n * @private\r\n * @param {TimeAwareCache} cache - The cache to index\r\n * @param {number} timestamp - The timestamp of the operation\r\n * @param {CacheEntry} entry - The cache entry being updated\r\n * @returns {void}\r\n */\r\n onDel(cache, timestamp, { key } = {}) {\r\n if (key) {\r\n this.del(key);\r\n }\r\n }\r\n\r\n /**\r\n * Add a cache key to the index\r\n * @abstract\r\n * @param {string} key - The key to add\r\n * @returns {void}\r\n */\r\n add(/* key */) { }\r\n\r\n /**\r\n * Remove a cache key from the index\r\n * @abstract\r\n * @param {string} key - The key to remove\r\n * @returns {void}\r\n */\r\n del(/* key */) { }\r\n\r\n /**\r\n * Query the cached keys fits certain query\r\n * @abstract\r\n * @param {Object} query - The query object\r\n * @returns {string[]} - The keys matches the query\r\n */\r\n keys(/* query */) {\r\n return [];\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { CacheIndex } from './base';\r\n\r\nexport class ResourceCacheIndex extends CacheIndex {\r\n /**\r\n * Index of cache entries. Keep track which keys are in the cache, and provide\r\n * query methods to query all keys associated with certain resource.\r\n * @param {TimeAwareCache} cache - The cache to index\r\n */\r\n constructor(cache) {\r\n super(cache);\r\n this.indices = {};\r\n }\r\n\r\n /**\r\n * Add a cache key to the index\r\n * @override\r\n * @param {string} key - The key to add\r\n * @returns {void}\r\n */\r\n add(key) {\r\n const { resource } = JSON.parse(key);\r\n if (!_.has(this.indices, resource)) {\r\n this.indices[resource] = {};\r\n }\r\n this.indices[resource][key] = true;\r\n }\r\n\r\n /**\r\n * Remove a cache key from the index\r\n * @override\r\n * @param {string} key - The key to remove\r\n * @returns {void}\r\n */\r\n del(key) {\r\n const { resource } = JSON.parse(key);\r\n if (_.has(this.indices, resource)) {\r\n delete this.indices[resource][key];\r\n if (_.isEmpty(this.indices[resource])) {\r\n delete this.indices[resource];\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Query the cached keys associated with a certain resource (entity type)\r\n * @override\r\n * @param {Object} query - The query object\r\n * @returns {string[]} - The keys matches the query\r\n */\r\n keys({ resource }) {\r\n return _.chain(this.indices).result(resource, {}).keys().value();\r\n }\r\n}\r\n","import { TimeAwareCache } from '@bingads-webui-universal/time-aware-cache';\r\nimport { BaseCacheManager } from './base-cache-manager';\r\n\r\n/**\r\n * @typedef {Object} ServerCacheKey\r\n * @property {string} resource - Resource name (entity type name)\r\n * @property {string} adapter - Adapter name\r\n */\r\n\r\nexport class ServerCacheManager extends BaseCacheManager {\r\n /**\r\n * Server side cache manager to store the server cache hints.\r\n */\r\n constructor() {\r\n super();\r\n\r\n // Server side cache manager has no partition, all cache hints are saved in\r\n // 1 TimeAwareCache with unlimited slots\r\n this.cache = new TimeAwareCache();\r\n\r\n // Delegate the notifications from the storage cache, so that the cacheIndex\r\n // can be updated accordingly\r\n this.cache.subscribe(this);\r\n }\r\n\r\n /**\r\n * Get the storage cache for the given cache key\r\n * @override\r\n * @param {ServerCacheManager} key - The cache key\r\n * @returns {TimeAwareCache} - The storage cache for the given key\r\n */\r\n storageCacheFor(/* key */) {\r\n return this.cache;\r\n }\r\n}\r\n","export { InvalidateStrategy } from './base';\r\nexport { CascadeInvalidateStrategy } from './cascade-invalidate-strategy';\r\nexport { WriteActionInvalidateStrategy } from './write-action-invalidate-strategy';\r\n","/**\r\n * Invalidate strategy observes the notifications from the JSDataCacheManager,\r\n * and invalidate cache items based on the rules.\r\n */\r\nexport class InvalidateStrategy {\r\n /**\r\n * Initialize a cache manager for applying the invalidate strategy\r\n * @param {JSDataCacheManager} cacheManager - The cache manager to initialize\r\n * @returns {void}\r\n */\r\n initializeCacheManager(cacheManager) {\r\n cacheManager.subscribe(this);\r\n }\r\n\r\n /**\r\n * Handler for the beforeExecute notification\r\n * @abstract\r\n * @param {JSDataCacheManager} cacheManager - The subject of the notification\r\n * @param {BeforeExecuteParameters} params - The notification parameters\r\n * @returns {void}\r\n */\r\n beforeExecute(/* cacheManager, params */) { }\r\n\r\n /**\r\n * Handler for the afterExecute notification\r\n * @abstract\r\n * @param {JSDataCacheManager} cacheManager - The subject of the notification\r\n * @param {AfterExecuteParameters} params - The notification parameters\r\n * @returns {void}\r\n */\r\n afterExecute(/* cacheManager, params */) { }\r\n\r\n /**\r\n * Handler for the beforeInvalidate notification\r\n * @abstract\r\n * @param {JSDataCacheManager} cacheManager - The subject of the notification\r\n * @param {string} resource - The resource being invalidated\r\n * @returns {void}\r\n */\r\n beforeInvalidate(/* cacheManager, resource */) { }\r\n\r\n /**\r\n * Handler for the afterInvalidate notification\r\n * @abstract\r\n * @param {JSDataCacheManager} cacheManager - The subject of the notification\r\n * @param {string} resource - The resource being invalidated\r\n * @returns {void}\r\n */\r\n afterInvalidate(/* cacheManager, resource */) { }\r\n}\r\n","import _ from 'underscore';\r\nimport { InvalidateStrategy } from './base';\r\n\r\nconst CONTEXT_KEY = 'cascadeInvalidateStrategyContext';\r\n\r\nexport class CascadeInvalidateStrategy extends InvalidateStrategy {\r\n /**\r\n * Invalidate the cache for resources following the dependant tree\r\n * @param {Object} options -\r\n * @param {Object.} options.dependants -\r\n * The dependant tree. It's an object with the keys being the resoures, and\r\n * the values their dependants.\r\n */\r\n constructor({ dependants }) {\r\n super();\r\n this.dependants = dependants;\r\n }\r\n\r\n /* eslint no-param-reassign: [\"error\", { \"props\": false }] */\r\n\r\n /**\r\n * Handler for the afterInvalidate notification. Continue invalidate more\r\n * resources following the dependant tree\r\n * @override\r\n * @param {JSDataCacheManager} cacheManager - The subject of the notification\r\n * @param {string} resource - The resource being invalidated\r\n * @param {string} isTriggeredFromOutside - Indicate whether the invalidate is from outside\r\n * @returns {void}\r\n */\r\n afterInvalidate(cacheManager, resource, isTriggeredFromOutside) {\r\n const isCascaded = _.has(cacheManager, CONTEXT_KEY);\r\n\r\n if (!isCascaded) {\r\n cacheManager[CONTEXT_KEY] = {};\r\n }\r\n\r\n // Put a context object into the cache manager to mark which resources are\r\n // already invaliated. Prevent infinite recursion caused by circular\r\n // dependencies\r\n const context = cacheManager[CONTEXT_KEY];\r\n\r\n context[resource] = true;\r\n\r\n _.chain(this.dependants)\r\n .result(resource, [])\r\n .each((dependant) => {\r\n if (!_.has(context, dependant)) {\r\n cacheManager.invalidate(dependant, isTriggeredFromOutside);\r\n }\r\n })\r\n .value();\r\n\r\n if (!isCascaded) {\r\n delete cacheManager[CONTEXT_KEY];\r\n }\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { InvalidateStrategy } from './base';\r\n\r\nimport { BUILTIN_WRITE_ACTIONS } from '../constants';\r\n\r\nexport class WriteActionInvalidateStrategy extends InvalidateStrategy {\r\n /**\r\n * Invaliadate the cache of certain resource on write\r\n * @param {Object} options -\r\n * @param {string[]} options.writeActions - The additional write actions\r\n */\r\n constructor({\r\n writeActions = [],\r\n } = {}) {\r\n super();\r\n this.writeActions = _.union(writeActions, BUILTIN_WRITE_ACTIONS);\r\n }\r\n\r\n /**\r\n * Handler for the afterExecute notification. Invalidate the cache for the\r\n * given resource if its a succeeded write action.\r\n * @abstract\r\n * @param {JSDataCacheManager} cacheManager - The subject of the notification\r\n * @param {AfterExecuteParameters} params - The notification parameters\r\n * @returns {void}\r\n */\r\n afterExecute(cacheManager, {\r\n action,\r\n isSuccess,\r\n parameters: [{\r\n name: resource,\r\n }],\r\n }) {\r\n if (isSuccess && _.contains(this.writeActions, action)) {\r\n cacheManager.invalidate(resource);\r\n }\r\n }\r\n}\r\n","export * from './src/observable';\r\nexport * from './src/call-observable';\r\n","import _ from 'underscore';\r\nimport { promisifyObservable } from './promisify-observable';\r\n\r\nclass SubscriptionObserver {\r\n constructor({\r\n start = _.noop,\r\n next = _.noop,\r\n error = _.noop,\r\n complete = _.noop,\r\n }, subscription) {\r\n this.next = next;\r\n this.error = error;\r\n this.complete = complete;\r\n start(subscription);\r\n this.subscription = subscription;\r\n }\r\n\r\n get closed() {\r\n return this.subscription.closed;\r\n }\r\n}\r\n\r\nclass Subscription {\r\n constructor(observer, subscriber) {\r\n this.observer = new SubscriptionObserver(observer, this);\r\n this.unsubscribeCallback = subscriber(this.observer) || _.noop;\r\n this.isClosed = false;\r\n }\r\n\r\n unsubscribe() {\r\n this.unsubscribeCallback();\r\n this.isClosed = true;\r\n }\r\n\r\n get closed() {\r\n return this.isClosed;\r\n }\r\n}\r\n\r\n/**\r\n * A minimum implementation of https://github.com/tc39/proposal-observable\r\n */\r\nexport class Observable {\r\n constructor(subscriber) {\r\n this.subscriber = subscriber;\r\n }\r\n\r\n subscribe(observer) {\r\n return new Subscription(observer, this.subscriber);\r\n }\r\n\r\n toPromise() {\r\n return promisifyObservable(this);\r\n }\r\n}\r\n","/* eslint-disable */\r\nimport Promise from 'bluebird';\r\n\r\nexport function promisifyObservable(observable) {\r\n return new Promise((resolve, reject) => {\r\n var subscription = observable.subscribe({\r\n next: (data) => {\r\n resolve(data);\r\n if (subscription) {\r\n subscription.unsubscribe();\r\n }\r\n },\r\n error: (err) => {\r\n reject(err);\r\n if (subscription) {\r\n subscription.unsubscribe();\r\n }\r\n },\r\n });\r\n });\r\n}\r\n","/**\r\n * This file is extracted from edm-odata for reuse.\r\n * Original path: private\\client-data\\packages\\edm-odata\\src\\server-call-cache-item.js\r\n */\r\nimport { noop } from 'underscore';\r\nimport { Observable } from './observable';\r\n\r\n/**\r\n * make a server call and setup the cache item state\r\n * @param {Function} call function returns a Promise of data\r\n * @returns {Promise} a resolved promise\r\n */\r\nfunction makeCall(call) {\r\n this.state.status = 'PENDING';\r\n return call()\r\n .then((data) => {\r\n this.setData(data);\r\n\r\n return null;\r\n })\r\n .catch((err) => {\r\n this.observers.forEach((item) => {\r\n item.error(err);\r\n });\r\n this.state.status = 'ERROR';\r\n this.state.error = err;\r\n });\r\n}\r\n\r\nexport class CallObservable extends Observable {\r\n constructor({\r\n fetch,\r\n afterSubscribe = noop,\r\n afterUnsubscribe = noop,\r\n hardResetCacheData,\r\n }) {\r\n super((observer) => {\r\n this.observers.add(observer);\r\n this.afterSubscribe(this);\r\n if (this.state.status === 'WAITING') {\r\n if (hardResetCacheData) {\r\n this.setData(hardResetCacheData);\r\n } else {\r\n this.invalidate();\r\n }\r\n } else if (this.state.status === 'READY') {\r\n observer.next(this.state.data);\r\n } else if (this.state.status === 'ERROR') {\r\n observer.error(this.state.error);\r\n }\r\n return () => {\r\n this.observers.delete(observer);\r\n this.afterUnsubscribe(this);\r\n };\r\n });\r\n this.fetch = fetch;\r\n // eslint-disable-next-line no-undef\r\n this.observers = new Set();\r\n this.afterSubscribe = afterSubscribe;\r\n this.afterUnsubscribe = afterUnsubscribe;\r\n this.state = {\r\n // WAITING - before any subscription\r\n // PENDING - has subscription, call made but not responded\r\n // READY - already has data\r\n // ERROR - already has error\r\n status: 'WAITING',\r\n data: null,\r\n error: null,\r\n };\r\n }\r\n\r\n setData(data) {\r\n this.observers.forEach((item) => {\r\n item.next(data);\r\n });\r\n this.state.status = 'READY';\r\n this.state.data = data;\r\n\r\n return null;\r\n }\r\n\r\n invalidate() {\r\n if (this.observers.size === 0) {\r\n this.state.status = 'WAITING';\r\n } else {\r\n makeCall.call(this, () => this.fetch());\r\n }\r\n }\r\n\r\n hasObservers() {\r\n return this.observers.size > 0;\r\n }\r\n}\r\n"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 39);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 2b573647655303f11431","export { Subject } from './src/subject.es';\r\n\n\n\n// WEBPACK FOOTER //\n// ./d:/dbs/el/aapusc/private/client-universal/packages/observer-pattern/index.es","/* global Set */\r\n// Use the basic APIs of ES6 Set. If your site supports browsers not\r\n// having Set natively, you should use a polyfill\r\n\r\n/* Subject to observe */\r\nexport class Subject {\r\n constructor() {\r\n this.observers = new Set();\r\n }\r\n\r\n /**\r\n * Subscribe an observer to the subject\r\n * @param {Object} observer - The observer subscribing to the subject\r\n * @returns {void}\r\n */\r\n subscribe(observer) {\r\n if (!(observer instanceof Object)) {\r\n throw new Error('Invalid observer');\r\n }\r\n this.observers.add(observer);\r\n }\r\n\r\n /**\r\n * Unsubscribe an observer from the subject\r\n * @param {Object} observer - The observer to unsubscribe\r\n * @returns {void}\r\n */\r\n unsubscribe(observer) {\r\n this.observers.delete(observer);\r\n }\r\n\r\n /**\r\n * Notify the observers for a certain action\r\n * @param {string} action -\r\n * Name of the action, it will map to the handler method name on the observer\r\n * @param {...*} args - Additional arguments\r\n * @returns {void}\r\n */\r\n notify(action, ...args) {\r\n this.observers.forEach((observer) => {\r\n if (typeof observer[action] === 'function') {\r\n observer[action](this, ...args);\r\n }\r\n });\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./d:/dbs/el/aapusc/private/client-universal/packages/observer-pattern/src/subject.es","export * from './src/index';\r\n","export * from './lodash';\r\nexport * from './string';\r\nexport * from './guid';\r\nexport * from './date';\r\nexport * from './file';\r\nexport * from './promise';\r\nexport * from './color';\r\nexport * from './number';\r\nexport * from './memoize';\r\n","// TODO: Task 904718: refactor to use explicit dependency for es6 syntax rather than global variable\r\nimport _ from 'underscore';\r\n\r\ntype Path = string | string[];\r\n\r\nfunction castPath(value: Path, object: any) {\r\n if (_.isArray(value)) {\r\n return value;\r\n }\r\n\r\n if (_.has(object, value)) {\r\n return [value];\r\n }\r\n\r\n return _.compact(value.split(/[[\\].]/));\r\n}\r\n\r\nfunction clone(item: T, sourceCopyMap: Map): T {\r\n if (!_.isObject(item) || _.isDate(item) || _.isFunction(item)) {\r\n return item;\r\n }\r\n if (!sourceCopyMap.get(item)) {\r\n const result: T = (_.isArray(item) ? [] : {});\r\n sourceCopyMap.set(item, result);\r\n _.each(<_.Dictionary>item, (value, key) => {\r\n (<_.Dictionary>result)[key] = clone(value, sourceCopyMap);\r\n });\r\n }\r\n return sourceCopyMap.get(item);\r\n}\r\n\r\n/**\r\n * defined in lodash 4.5.1\r\n * sum list with iteratee\r\n * @param {Object[]} list - array to be summed\r\n * @param {Function} invoke - function invoked per element\r\n * @returns {number} - sum value of list\r\n */\r\nexport function sumBy(list: T[], invoke: string | object | ((item: T, index: string | number) => number)): number {\r\n let iteratee: any;\r\n\r\n // make separate calls to satisfy @types/underscore for iteratee\r\n if (invoke instanceof String) {\r\n iteratee = _.iteratee(invoke);\r\n } else if (invoke instanceof Object) {\r\n iteratee = _.iteratee(invoke);\r\n } else {\r\n iteratee = _.iteratee(invoke);\r\n }\r\n\r\n return _.reduce(\r\n list,\r\n (currentSum, item, index, arr) => currentSum + iteratee(item, index, arr),\r\n 0,\r\n );\r\n}\r\n\r\n/**\r\n * defined in lodash 0.5.0\r\n * merge two object from src to dest\r\n * @param {Object} dest - dest object\r\n * @param {Object} src - src object\r\n * @returns {Object} - merged object\r\n */\r\nexport function merge(...args: T[]): T {\r\n return _.reduce(_.rest(args), (dest, src) => {\r\n _.each(<_.Dictionary>src, (value, key) => {\r\n const destKey = (<_.Dictionary>dest)[key];\r\n if (_.isObject(destKey) && _.isObject(value) && !_.isFunction(value)) {\r\n merge(destKey, value);\r\n } else {\r\n _.extend(dest, _.object([key], [value]));\r\n }\r\n });\r\n\r\n return dest;\r\n }, _.first(args) || {});\r\n}\r\n\r\n/**\r\n * defined in lodash 4.6.1\r\n * Gets the value at path of object. If the resolved value is undefined,\r\n * the defaultValue is returned in its place.\r\n * @param {Object} object - The object to query.\r\n * @param {array|string} path - The path of the property to get.\r\n * @param {*} defaultValue - Optional, The value returned for undefined resolved values.\r\n * @returns {any} - return the value in object by path, if not exist, return default value\r\n */\r\nexport function get(object: T, path: Path, defaultValue?: TProp): TProp | undefined {\r\n let sub: _.Dictionary & TProp;\r\n let i;\r\n const keyPath = castPath(path, object);\r\n\r\n for (i = 0, sub = <_.Dictionary & TProp>object; i < keyPath.length; i += 1) {\r\n if (!_.isObject(sub)) {\r\n return defaultValue;\r\n }\r\n\r\n sub = <_.Dictionary & TProp>sub[keyPath[i]];\r\n\r\n if (_.isUndefined(sub)) {\r\n return defaultValue;\r\n }\r\n }\r\n\r\n return sub;\r\n}\r\n\r\n/**\r\n * lodash set, path don't support index\r\n * Sets the value at path of object. If a portion of path doesn't exist, it's created.\r\n * Arrays are created for missing index properties while\r\n * objects are created for all other missing properties.\r\n * @param {Object} object - The object to modify.\r\n * @param {string} path - The path of the property to set.\r\n * @param {*} value - The value to set.\r\n * @returns {Object} - Returns object.\r\n */\r\nexport function set(object: T, path: Path, value: TProp): T {\r\n if (!_.isObject(object)) {\r\n return object;\r\n }\r\n\r\n const keyPath = castPath(path, object);\r\n let index = 0;\r\n const { length } = keyPath;\r\n const lastIndex = length - 1;\r\n let nested = <_.Dictionary & TProp>object;\r\n\r\n while (nested != null && index < length) {\r\n const key = keyPath[index];\r\n\r\n if (index !== lastIndex) {\r\n (nested as _.Dictionary)[key] = nested[key] || {};\r\n nested = <_.Dictionary & TProp>nested[key];\r\n } else {\r\n (nested as _.Dictionary)[key] = value;\r\n }\r\n index += 1;\r\n }\r\n return object;\r\n}\r\n\r\n/**\r\n * Creates a function that returns the result of invoking the given\r\n * functions with the this binding of the created function,\r\n * where each successive invocation is supplied the return value of the previous.\r\n * lodash flow https://lodash.com/docs#flow\r\n * @param {function[]} funcs - The functions to invoke.\r\n * @returns {Function} - Returns the new composite function.\r\n */\r\nexport function flow(...funcs: Function[]): Function {\r\n return _.compose.apply(null, funcs.reverse());\r\n}\r\n\r\n/**\r\n * defined in lodash 4.0.0\r\n * Check whether value is undefined or null\r\n * @param {*} value - value to Check\r\n * @returns {boolean} - return true if value is undefined or null, otherwise, return false\r\n */\r\nexport function isNil(value: any): boolean {\r\n return _.isUndefined(value) || _.isNull(value);\r\n}\r\n\r\n/**\r\n * deep clone object\r\n * @param {array|Object} item - source item to be copied\r\n * @return {array|Object} - copied from item\r\n*/\r\nexport function cloneDeep(item: T): T {\r\n return clone(item, new Map());\r\n}\r\n\r\nfunction objIsArray(obj: any): obj is any[] {\r\n return _.isArray(obj) && Boolean(obj.length);\r\n}\r\n\r\n/**\r\n * array dedup function\r\n * @param {any[]} array - the array to inspect\r\n * @param {function} comparator - comparator function to determine whether 2 elements are the same\r\n * @returns {any[]} - new duplicate free array\r\n */\r\nexport function uniqWith(array: any, comparator?: (arg1: T, arg2: T) => boolean): T[] {\r\n if (!objIsArray(array)) {\r\n return [];\r\n }\r\n if (!_.isFunction(comparator)) {\r\n return _.uniq(array);\r\n }\r\n const result: T[] = [];\r\n _.each(array, (obj) => {\r\n if (_.every(result, (res) => !comparator(obj, res))) {\r\n result.push(obj);\r\n }\r\n });\r\n return result;\r\n}\r\n","import _ from 'underscore';\r\n\r\nconst noMatch = /(.)^/;\r\nconst settings = {\r\n escape: noMatch,\r\n evaluate: noMatch,\r\n interpolate: /\\{\\{(.+?)\\}\\}/g,\r\n};\r\n\r\n/**\r\n * Passes constant double curly brace settings to the underscore template function.\r\n * E.g. to support templates of the format: 'The bid is {{bidAmount}}'\r\n *\r\n * @see {@link http://underscorejs.org/#template}\r\n *\r\n * @param {String} templateString - The template markup that contains double curly bracket notation.\r\n * @return {Function} The template function, which can be passed an Object model with fields that\r\n * correspond to the names marked up by the curly braces.\r\n */\r\nexport function curlyTemplate(templateString: string): (...data: any[]) => string {\r\n return _.template(templateString, settings);\r\n}\r\n\r\n/**\r\n * check whether this string include CJK charact\r\n * @param {string} str - string to check\r\n * @returns {boolean} - return true if str contains CJK, otherwise, return false\r\n */\r\nexport function hasCJK(str: string): boolean {\r\n return !!(_.isString(str) && str.match(/[\\u4E00-\\u9FCC]/));\r\n}\r\n\r\n/**\r\n * Regex Pattern for wide characters\r\n */\r\nconst wideCharPattern = new RegExp(\r\n '[\\\\u1100-\\\\u11FF]' // IsHangulJamo\r\n + '|[\\\\u2E80-\\\\u2EFF]' // IsCJKRadicalsSupplement\r\n + '|[\\\\u3000-\\\\u303F]' // IsCJKSymbolsandPunctuation\r\n + '|[\\\\u3040-\\\\u309F]' // IsHiragana\r\n + '|[\\\\u30A0-\\\\u30FF]' // IsKatakana\r\n + '|[\\\\u3130-\\\\u318F]' // IsHangulCompatibilityJamo\r\n + '|[\\\\u3200-\\\\u32FF]' // IsEnclosedCJKLettersandMonths\r\n + '|[\\\\u3300-\\\\u33FF]' // IsCJKCompatibility\r\n + '|[\\\\u3400-\\\\u4DBF]' // IsCJKUnifiedIdeographsExtensionA\r\n + '|[\\\\u4E00-\\\\u9FFF]' // IsCJKUnifiedIdeographs\r\n + '|[\\\\uAC00-\\\\uD7AF]' // IsHangulSyllables\r\n + '|[\\\\uF900-\\\\uFAFF]' // IsCJKCompatibilityIdeographs\r\n + '|[\\\\uFE30-\\\\uFE4F]' // IsCJKCompatibilityForms\r\n + '|[\\\\uFF01-\\\\uFF60]' // Fullwidth Forms Part 1\r\n + '|[\\\\uFFE0-\\\\uFFE6]' // Fullwidth Forms Part 2\r\n + '|[\\\\uD800-\\\\uDBFF][\\\\uDC00-\\\\uDFFF]', // Astral Planes\r\n 'g',\r\n);\r\n\r\n/**\r\n * Get string length, which counting CJK character or Emojis as 2\r\n * @param {string} str - string to count\r\n * @returns {int} - length of string\r\n */\r\nexport function displayLength(str: string | null) {\r\n return _.isString(str) ? str.replace(wideCharPattern, '12').length : 0;\r\n}\r\n\r\nexport function getLength(str: string, distinguishWideChar = false) {\r\n return distinguishWideChar ? displayLength(str) : _.size(str);\r\n}\r\n\r\n// eslint-disable-next-line no-control-regex\r\nconst IsControlRegex = /[\\u0000-\\u001F\\u007F-\\u009F]/;\r\n\r\n/**\r\n * Validate if string contains controlled characters, http://unicode.org/glossary/#control_codes\r\n * @param {String} str - String to be validated\r\n * @returns {Boolean} - True if string contains controlled char.\r\n */\r\nexport const isControl = (str: string) => IsControlRegex.test(str);\r\n","/*\r\n* Create a new guid\r\n* @returns {String} - returns a guid\r\n*/\r\nexport function generateGuid() {\r\n function s4() {\r\n return Math.floor((1 + Math.random()) * 0x10000)\r\n .toString(16)\r\n .substring(1);\r\n }\r\n return `${s4()}${s4()}-${s4()}-${s4()}-${s4()}-${s4()}${s4()}${s4()}`;\r\n}\r\n","/* eslint-env browser */\r\nimport _ from 'underscore';\r\n\r\n/*\r\n* Returns a copy of the passed in Date with hours/minutes/seconds/milliseconds set to zero.\r\n* @param {Date} date - Date to remove time information from\r\n* @returns {Date} - Copy of passed in date\r\n*/\r\nexport function withoutTime(date: any) {\r\n if (!date) {\r\n return date;\r\n }\r\n\r\n const returnDate = new Date(date.valueOf());\r\n returnDate.setHours(0, 0, 0, 0);\r\n return returnDate;\r\n}\r\n\r\n/**\r\n * Validates if the date range passed in is incorrect. It ignores the time values.\r\n * @param { Date } [minDate] - The minimum date that can be selected.\r\n * @param { Date } [maxDate] - The maximum date that can be selected.\r\n * @param { Date } [selectedDate] - The date to pre-select in the datepicker.\r\n * @returns {String[]} - Array of error strings.\r\n * @throws Will throw if passed in date range is not valid.\r\n */\r\nexport function validateDateRange(minDate: any, maxDate: any, selectedDate: any): string[] {\r\n const selected = withoutTime(selectedDate);\r\n const min = withoutTime(minDate);\r\n const max = withoutTime(maxDate);\r\n\r\n const errors = [];\r\n\r\n if (min && max && min > max) {\r\n errors.push('MinDateLaterThanMaxDate');\r\n }\r\n\r\n if (selected && min && selected < min) {\r\n errors.push('MinDateLaterThanSelectedDate');\r\n }\r\n\r\n if (selected && max && selected > max) {\r\n errors.push('SelectedDateLaterThanMaxDate');\r\n }\r\n\r\n return errors;\r\n}\r\n\r\n/**\r\n * Private function to check if date is valid\r\n * @param {Object} date - Object to check\r\n * @returns {Boolean} - True if object is a valid date\r\n * @private\r\n*/\r\nfunction isValidDate(date: object): date is Date {\r\n return _.isDate(date);\r\n}\r\n\r\n/**\r\n * Get the date N days ago\r\n * @param {Date} dateTime - The input date object\r\n * @param {Number} [lookBackDays=0] - Number of days to remove\r\n * @returns {Date} - date object with new parameters, null if date is invalid\r\n */\r\nexport function lastNDate(dateTime: any, lookBackDays: number = 0): Date | null {\r\n return isValidDate(dateTime)\r\n ? new Date(dateTime.getFullYear(), dateTime.getMonth(), dateTime.getDate() - lookBackDays) : null;\r\n}\r\n\r\n/**\r\n * Get first date of the month N months ago\r\n * @param {Date} dateTime - The input date object\r\n * @param {Number} [lookBackMonths=0] - Number of months to remove\r\n * @returns {Date} - Date object with new parameters\r\n */\r\nexport function firstDateNMonthsAgo(dateTime: any, lookBackMonths: number = 0): Date | null {\r\n return isValidDate(dateTime)\r\n ? new Date(dateTime.getFullYear(), dateTime.getMonth() - lookBackMonths, 1) : null;\r\n}\r\n\r\n/**\r\n * Get last date of the month N months ago\r\n * @param {Date} dateTime - The input date object\r\n * @param {Number} [lookBackMonths=0] - Number of months to remove\r\n * @returns {Date} - Date object with new parameters\r\n */\r\nexport function lastDateNMonthsAgo(dateTime: any, lookBackMonths: number = 0): Date | null {\r\n return isValidDate(dateTime)\r\n ? lastNDate(firstDateNMonthsAgo(dateTime, lookBackMonths - 1), 1) : null;\r\n}\r\n\r\n/**\r\n * Get today for N years ago\r\n * @param {Date} dateTime - The input date object\r\n * @param {Number} [lookBackYears=0] - Number of years to remove\r\n * @returns {Date} - Date object with new parameters\r\n */\r\nexport function todayNYearsAgo(dateTime: any, lookBackYears: number = 0): Date | null {\r\n return isValidDate(dateTime) ? new Date(\r\n dateTime.getFullYear() - lookBackYears,\r\n dateTime.getMonth(),\r\n dateTime.getDate(),\r\n ) : null;\r\n}\r\n\r\n/**\r\n * Get first date of the year N years ago\r\n * @param {Date} dateTime - The input date object\r\n * @param {Number} [lookBackYears=0] - Number of years to remove\r\n * @returns {Date} - Date object with new parameters\r\n */\r\nexport function firstDateNYearsAgo(dateTime: Date, lookBackYears: number = 0): Date | null {\r\n return isValidDate(dateTime) ? new Date(dateTime.getFullYear() - lookBackYears, 0, 1) : null;\r\n}\r\n\r\n/**\r\n * Get the current UTC time\r\n * @returns {String} - the current utc datetime\r\n */\r\nexport function getUtcTime(): string {\r\n return new Date().toJSON();\r\n}\r\n\r\n/**\r\n * Get the current timestamp\r\n * @returns {number} - the timestamp since epoch in milliseconds\r\n */\r\nexport function getTimestamp(): number {\r\n // TODO: this method should not be here, as it depends on Web API performance\r\n if (window.performance && window.performance.now && window.performance.timing) {\r\n return window.performance.timing.navigationStart + window.performance.now();\r\n }\r\n\r\n return Date.now();\r\n}\r\n\r\ntype ComparisonDateRange = {\r\n start: Date,\r\n end: Date\r\n};\r\n\r\ntype DateRange = {\r\n start?: Date,\r\n end?: Date,\r\n key?: string,\r\n compared?: ComparisonDateRange | null\r\n};\r\n\r\n/**\r\n * Check if the given two date ranges equal\r\n * @param {Object} firstRange - The first input range\r\n * @param {Object} secondRange - The second input range\r\n * @returns {Boolean} - Two ranges equal\r\n */\r\nexport function dateRangeEquals(firstRange?: null | DateRange, secondRange?: null | DateRange): boolean {\r\n function convertForComparison(range: DateRange) {\r\n const dates = _.pick(range, 'start', 'end', 'key');\r\n\r\n if (range.compared) {\r\n _.extend(dates, {\r\n comparedStart: range.compared.start,\r\n comparedEnd: range.compared.end,\r\n });\r\n }\r\n return dates;\r\n }\r\n\r\n if (!firstRange || !secondRange) {\r\n return false;\r\n }\r\n\r\n return JSON.stringify(convertForComparison(firstRange))\r\n === JSON.stringify(convertForComparison(secondRange));\r\n}\r\n\r\ntype TimeZone = string;\r\ntype TimeZoneOption = TimeZone | null;\r\ntype DateMethodsOptions = { timeZone?: TimeZoneOption };\r\n\r\ntype I18nModel = {\r\n formatDate: (date: Date, options: DateMethodsOptions) => string,\r\n parseDate: (strDate: string, options: DateMethodsOptions) => Date | null,\r\n};\r\n\r\nexport function convertDateBetweenTimeZones(date: Date, i18n: I18nModel, {\r\n from,\r\n to,\r\n}: {\r\n from?: TimeZone | null,\r\n to?: TimeZone | null\r\n} = {}) {\r\n const dateString = i18n.formatDate(date, {\r\n timeZone: from,\r\n });\r\n\r\n return i18n.parseDate(dateString, {\r\n timeZone: to,\r\n });\r\n}\r\n\r\nexport function convertMachineDateToUTCDate(date: Date, i18n: any) {\r\n return convertDateBetweenTimeZones(date, i18n, { from: null, to: 'UTC' });\r\n}\r\n\r\nexport function convertUTCDateToMachineDate(date: Date, i18n: any) {\r\n return convertDateBetweenTimeZones(date, i18n, { from: 'UTC', to: null });\r\n}\r\n","/* eslint-env browser */\r\n// this file depends on Web API atob, Blob, File, it should not be in this project\r\nimport _ from 'underscore';\r\n\r\nexport function dataURItoBlob(dataURI: string) {\r\n const reg = /:(.+?);/;\r\n const arrs = dataURI.split(',');\r\n const header = _.first(arrs);\r\n const content = _.last(arrs);\r\n let type = 'image/png';\r\n\r\n const byteString = atob(content);\r\n const array = new Uint8Array(byteString.length);\r\n\r\n for (let i = 0; i < byteString.length; i += 1) {\r\n array[i] = byteString.charCodeAt(i);\r\n }\r\n if (reg.test(header)) {\r\n ({ 1: type } = header.match(reg));\r\n }\r\n return new Blob([array], { type });\r\n}\r\n\r\n/**\r\n * Convert image string to File object\r\n * @param {string} img image string to be convertImage2File\r\n * @param {string} name file name of image\r\n * @returns {File} File object\r\n */\r\nexport function convertImage2File(img: string, name: string): File {\r\n const blob = dataURItoBlob(img);\r\n const postfix = _.last(blob.type.split('/'));\r\n return new File([blob], `${name}.${postfix}`, { type: blob.type, lastModified: Date.now() });\r\n}\r\n","import _ from 'underscore';\r\nimport Promise from 'bluebird';\r\n\r\ntype WithLastPromiseOptions = {\r\n promiseFactory: (...args: any[]) => Promise,\r\n finish: (result?: T) => void,\r\n cancel?: () => void,\r\n fail?: (error: Error) => void\r\n};\r\n\r\n/**\r\n * This function returns a new \"guarded\" function. The guarded function behaves like this:\r\n * - everytime it is called it is going to call the promiseFactory function to\r\n * generate a new promise and remember it as the last promise;\r\n * - the guarded function returns a process handle object, which has the cancel function,\r\n * which can be used to ignore the results of the last promise, and, instead trigger\r\n * the cancel() callback;\r\n * - when the \"last promise\" finishes either finish or fail callback will be triggered,\r\n * depending on the outcome\r\n * of the last promise.\r\n * @param {Object} options - the options object\r\n * @param {Function} options.promiseFactory - the function that returns a new promise.\r\n * The factory will be called with the arguments passed to the guarded function.\r\n * @param {Function} options.finish - the function that will be called when the last\r\n * promise is resolved. The only argument to this function is the value the value from\r\n * the last promise.\r\n * @param {Function} options.fail - a function that is called when the last promise is\r\n * failed. The only\r\n * argument to this function is the error from the last promise.\r\n * @param {Function} options.cancel - a function that is called when the last promise is canceled.\r\n * No arguments are passed in. This function will be called not early than the next\r\n * scheduler iteration, after a call to process handle's cancel() function.\r\n * @returns {Function} - the \"guarded\" function. See description.\r\n */\r\nexport function withLastPromise(options: WithLastPromiseOptions): (...args: any[]) => { cancel: () => void } {\r\n const {\r\n promiseFactory, finish, cancel = _.noop, fail = _.noop,\r\n } = options;\r\n let lastPromise: Promise;\r\n let lastPromiseCanceled = false;\r\n\r\n const finishProcess = (error: Error | undefined, result?: T) => {\r\n if (lastPromiseCanceled) {\r\n cancel();\r\n } else if (error) {\r\n fail(error);\r\n } else {\r\n finish(result);\r\n }\r\n };\r\n\r\n const guardedFunction = (...factoryArgs: any[]) => {\r\n lastPromise = promiseFactory(...factoryArgs);\r\n lastPromiseCanceled = false;\r\n const processHandle = ((promise: Promise) => {\r\n promise.then((result) => {\r\n if (promise === lastPromise) {\r\n finishProcess(undefined, result);\r\n }\r\n\r\n // skipping the results, since a new promise has started since\r\n // or the last one was canceled\r\n }, (error) => {\r\n if (promise === lastPromise) {\r\n finishProcess(error);\r\n }\r\n\r\n // skipping the error, since a new promise has started since\r\n // or the last one was canceled\r\n });\r\n\r\n return {\r\n cancel() {\r\n lastPromiseCanceled = true;\r\n },\r\n };\r\n })(lastPromise);\r\n\r\n return processHandle;\r\n };\r\n\r\n return guardedFunction;\r\n}\r\n\r\nenum AsyncStatus {\r\n SUCCESS = 'SUCCESS',\r\n ERROR = 'ERROR',\r\n CANCELLED = 'CANCELLED',\r\n}\r\n\r\ntype Callbacks = {\r\n onSuccess?: (result: T) => void,\r\n onError?: (err: Error) => void,\r\n onCancel?: () => void,\r\n};\r\n\r\ntype PromiseChainItem = {\r\n resolve: (result: T) => Promise,\r\n reject: null | ((result: Error) => Promise)\r\n};\r\n\r\ntype Resolvable = R | PromiseLike;\r\n\r\ntype Options = {\r\n cancelCallback?: () => void,\r\n};\r\n\r\n/**\r\n * This function returns an async token, which allows the caller to cancel a promise.\r\n * The token behaves in the following way:\r\n * - The token is created using the function, however needs to be finalizes with .on().\r\n * - Only one of the callbacks will ever be called (onCancel, onSuccess, onError)\r\n * - If the token is cancelled, as long as the promise hasn't been resolved,\r\n * onCancel will be synchronously called and all references will be released.\r\n * @param {Object} promise - the promise\r\n * @param {Object} options - the options to create async token\r\n * @param {Function} options.cancelCallback\r\n * This callback is intended to be provided by a component that returns async token\r\n * from one of its interface method, and helps handle cancellation specific to the component\r\n * @returns {Object} asyncToken - the cancelable async token\r\n * @returns {Function} asyncToken.chain - (resolve, reject)\r\n * Allows the user to chain more async tasks,\r\n * similar to .then(resolve, reject), however will be cancelable by the token.\r\n * @returns {Function} asyncToken.on - ({onCancel, onSuccess, onError})\r\n * finalizes the token with three callbacks.\r\n * Only one will ever be called. If no onError function is submitted, it will re-throw any errors.\r\n * the last promise.\r\n * @returns {Function} asyncToken.cancel - if promise has resolved, will be a noop.\r\n * Otherwise will stop any more tasks or callbacks from being called,\r\n * and will synchronously call onCancel callback.\r\n */\r\nexport function createAsyncToken(promise: null | PromiseLike, options?: Options) {\r\n if (!promise) {\r\n throw new Error('promise is a required parameter');\r\n }\r\n\r\n // declare scoped variables\r\n let currentPromise: null | PromiseLike = promise;\r\n let promiseChain: PromiseChainItem[] = [];\r\n let callbacks: Callbacks | null = null;\r\n\r\n // Implement functions\r\n function queueNextWork() {\r\n (>currentPromise).then((result) => {\r\n finishProcess(AsyncStatus.SUCCESS, result);\r\n }, (error) => {\r\n finishProcess(AsyncStatus.ERROR, error);\r\n });\r\n }\r\n\r\n function dequeuePromise(status: AsyncStatus, result?: T | Error) {\r\n const { resolve, reject } = >promiseChain.shift();\r\n\r\n if (status === AsyncStatus.ERROR) {\r\n if (reject) {\r\n currentPromise = reject(result);\r\n } else {\r\n // if no reject function was provided, rerun finishProcess, don't call queueNextWork\r\n finishProcess(status, result);\r\n return;\r\n }\r\n } else {\r\n currentPromise = resolve(result);\r\n }\r\n\r\n queueNextWork();\r\n }\r\n\r\n function finishProcess(status: AsyncStatus, result?: T | Error) {\r\n if (callbacks == null) {\r\n // Noop\r\n return;\r\n }\r\n const {\r\n onSuccess = _.noop,\r\n onError = (err: Error) => { throw err; },\r\n onCancel = _.noop,\r\n } = callbacks;\r\n\r\n if (status === AsyncStatus.CANCELLED) {\r\n cleanup();\r\n onCancel();\r\n } else if (!_.isEmpty(promiseChain)) {\r\n dequeuePromise(status, result);\r\n } else if (status === AsyncStatus.ERROR) {\r\n cleanup();\r\n onError(result);\r\n } else {\r\n cleanup();\r\n onSuccess(result);\r\n }\r\n }\r\n\r\n function cleanup() {\r\n // cleanup all scoped references to unblock garbage collector\r\n callbacks = null;\r\n promiseChain = [];\r\n currentPromise = null;\r\n }\r\n\r\n const asyncToken = {\r\n chain(resolve: () => Resolvable, reject: null | (() => Resolvable) = null) {\r\n if (!_.isNull(callbacks)) {\r\n throw new Error('Cannot call .chain after calling .on');\r\n }\r\n\r\n // wrap callbacks to allow async\r\n promiseChain.push({\r\n resolve: Promise.method(resolve),\r\n reject: reject == null ? null : Promise.method(reject),\r\n });\r\n return asyncToken;\r\n },\r\n on({\r\n onSuccess,\r\n onError,\r\n onCancel,\r\n }: Callbacks) {\r\n if (!_.isNull(callbacks)) {\r\n throw new Error('Cannot call .on multiple times');\r\n }\r\n\r\n callbacks = {\r\n onSuccess,\r\n onError,\r\n onCancel,\r\n };\r\n\r\n // .on will finalize the token, begin work\r\n queueNextWork();\r\n return asyncToken;\r\n },\r\n cancel() {\r\n options?.cancelCallback?.();\r\n finishProcess(AsyncStatus.CANCELLED);\r\n return asyncToken;\r\n },\r\n };\r\n\r\n return asyncToken;\r\n}\r\n","/* eslint-disable no-bitwise */\r\n\r\nfunction numberToRgb(rgbInteger: number) {\r\n return {\r\n red: (rgbInteger & 0xff0000) >> 16,\r\n green: (rgbInteger & 0x00ff00) >> 8,\r\n blue: rgbInteger & 0x0000ff,\r\n };\r\n}\r\n\r\n/**\r\n * Converts an RGB color to its grayscale equivalent. Useful for determining if a color should be\r\n * contrasted against white or black.\r\n * @see {@link https://www.w3.org/TR/AERT/#color-contrast}\r\n * @param {Number} rgbInteger - Number that represents an RGB color, e.g. 15792383.\r\n * @returns {Number} Grayscale value of the number, e.g. 246.\r\n */\r\nexport function colorToGrayscale(rgbInteger: number): number {\r\n const rgb = numberToRgb(rgbInteger);\r\n\r\n // calculate grayscale value based on how humans perceive luminance in RBG\r\n return Math.round((0.299 * rgb.red) + (0.587 * rgb.green) + (0.114 * rgb.blue));\r\n}\r\n\r\n/**\r\n * Returns black if the grayscale equivalent of given color is <50% gray, otherwise returns white.\r\n * @param {Number} rgbInteger - Number that represents an RGB color, e.g. 15792383.\r\n * @returns {Number} Number that represents RGB black or RGB white.\r\n */\r\nexport function contrastColor(rgbInteger: number): number {\r\n const grayscale = colorToGrayscale(rgbInteger);\r\n\r\n return grayscale >= 256 / 2 ? 0 : 0xffffff;\r\n}\r\n\r\n/**\r\n * Convert a RGB hexadecimal color value into decimal.\r\n * @param {String} color - RGB 6-digit hexademical color, e.g. '#ff0000'\r\n * @returns {Number} Decimal representation, e.g. 16711680.\r\n */\r\nexport function toDec(color: string): number {\r\n return parseInt(color.substr(1), 16);\r\n}\r\n\r\n/**\r\n * Convert a decimal number into 6-digit hexademical.\r\n * @param {Number} color - Number value of an RGB color, e.g. 15792383\r\n * @returns {String} 6-digital hexademical representation, e.g. 'f0f9ff'\r\n */\r\nexport function toHex(color: number): string {\r\n return `000000${color.toString(16)}`.substr(-6);\r\n}\r\n","import _ from 'underscore';\r\n\r\nconst map = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_+';\r\n\r\n/**\r\n * translate int to base-64 representation\r\n * @param {Number} integer None negative integer to translate\r\n * @returns {String} encoded base-64 string\r\n */\r\nexport function toStringBase64(integer: number): string {\r\n if (!_.isNumber(integer) || integer % 1 !== 0 || integer < 0) {\r\n throw new Error('unknown data type, none negative integer only');\r\n }\r\n\r\n if (integer === 0) {\r\n return map[0];\r\n }\r\n\r\n let result = '';\r\n let dividend = integer;\r\n\r\n while (dividend > 0) {\r\n const remainder = dividend % 64;\r\n\r\n result = map[remainder].concat(result);\r\n dividend = Math.floor(dividend / 64);\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n *\r\n * @param {String} code, string output of toStringBase64\r\n * @returns {Number} the original integer number\r\n */\r\nexport function parseIntBase64(code: string): number {\r\n let result = 0;\r\n let remain = code.slice();\r\n\r\n while (remain.length > 0) {\r\n result = (result * 64) + map.indexOf(remain[0]);\r\n remain = remain.slice(1);\r\n }\r\n\r\n return result;\r\n}\r\n","class Cache {\r\n max: number;\r\n\r\n lruTrigger: number;\r\n\r\n cache: Map;\r\n\r\n constructor(max: number = 200) {\r\n this.max = max;\r\n this.lruTrigger = max / 2;\r\n this.cache = new window.Map();\r\n }\r\n\r\n get(key: any) {\r\n const item = this.cache.get(key);\r\n if (this.cache.size > this.lruTrigger && item) {\r\n // refresh key\r\n this.cache.delete(key);\r\n this.cache.set(key, item);\r\n }\r\n return item;\r\n }\r\n\r\n set(key: any, val: any) {\r\n if (this.cache.size > this.lruTrigger) {\r\n // refresh key\r\n if (this.cache.has(key)) {\r\n this.cache.delete(key);\r\n } else if (this.cache.size === this.max) {\r\n this.cache.delete(this.first());\r\n }\r\n }\r\n this.cache.set(key, val);\r\n }\r\n\r\n first() {\r\n return this.cache.keys().next().value;\r\n }\r\n}\r\n\r\nfunction resolveFromCache(args: any[], index: number, cache: Cache, func:(...args: any[]) => any): any {\r\n const key = args[index];\r\n const result = cache.get(key);\r\n if (index >= args.length - 1) { // reached last of arg\r\n if (result && !(result instanceof Cache)) {\r\n return result; // found actual result\r\n }\r\n // no result found, save the result as new entry\r\n // eslint-disable-next-line prefer-spread\r\n const toCache = func.apply(undefined, args);\r\n cache.set(key, toCache);\r\n return toCache;\r\n }\r\n // not finished searching yet\r\n if (result instanceof Cache) {\r\n return resolveFromCache(args, index + 1, result, func); // found nested Map, go deeper\r\n }\r\n // create nested Cache with key and continue\r\n const nestedCache = new Cache();\r\n cache.set(key, nestedCache);\r\n return resolveFromCache(args, index + 1, nestedCache, func);\r\n}\r\n\r\nexport function memoize(func: (...args: any[]) => any) {\r\n const memoized = function (...args: any[]) {\r\n return resolveFromCache(args, 0, memoized.cache, func);\r\n };\r\n memoized.cache = new Cache();\r\n return memoized;\r\n}\r\n","export { SchemaI18n } from './src/index';\r\n","import { capitalize } from 'underscore.string';\r\nimport { I18n } from '../types'; // Importing the I18n interface\r\n\r\n/**\r\n * A wrapper of i18n with schema.\r\n */\r\nexport class SchemaI18n {\r\n i18n: I18n;\r\n\r\n constructor({ i18n }: { i18n: I18n }) {\r\n this.i18n = i18n;\r\n }\r\n\r\n /**\r\n * Get the localized name of an item of an enum type.\r\n * @param {string} enumType - the enum type\r\n * @param {string} enumItem - the enum item of enumtype\r\n * @returns {string} - the localized string retrieved with the computed key.\r\n */\r\n enum(enumType: string, enumItem: string): string {\r\n return this.i18n.getString(`Schema_Enum_${capitalize(enumType.toString())}_${capitalize(enumItem.toString())}`);\r\n }\r\n\r\n /**\r\n * Get the localized string of the description of an item of an enum type.\r\n * @param {string} enumType - the enum type\r\n * @param {string} enumItem - the enum item of enumtype\r\n * @returns {string} - the localized string retrieved with the computed key.\r\n */\r\n enumDescription(enumType: string, enumItem: string): string {\r\n return this.i18n.getString(`Schema_Enum_${capitalize(enumType.toString())}_${capitalize(enumItem.toString())}_Description`);\r\n }\r\n\r\n /**\r\n * Get the localized name of a type\r\n * @param {string} type - the type\r\n * @returns {string} - the localized string retrieved with the computed key.\r\n */\r\n type(type: string): string {\r\n return this.i18n.getString(`Schema_${type}`);\r\n }\r\n\r\n /**\r\n * Get the localized name of a property of a type.\r\n * @param {string} type - the type\r\n * @param {string} property - the property\r\n * @returns {string} - the localized string retrieved with the computed key\r\n * or the result of type(property) if key not found.\r\n */\r\n property(type: string, property: string): string {\r\n return this.i18n.getString(`Schema_${type}_Property_${property}`)\r\n || this.type(property); // most non-primitive property has same name with it's type\r\n }\r\n\r\n /**\r\n * Get the localized string of a propery value of a type.\r\n * @param {string} type - the type\r\n * @param {string} property - the property\r\n * @param {string} value - the value\r\n * @returns {string} - the localized string retrieved with the computed key\r\n * or the result of enum(property, value) or undefined if nothing was found.\r\n */\r\n valueOrUndefined(type: string, property: string, value: string): string | undefined {\r\n return this.i18n.getString(`Schema_${type}_Property_${property}_Value_${capitalize(value.toString())}`)\r\n || this.enum(property, value)\r\n || undefined;\r\n }\r\n\r\n /**\r\n * Get the localized string of a propery value of a type, with fallback.\r\n * @param {string} type - the type\r\n * @param {string} property - the property\r\n * @param {string} value - the value\r\n * @returns {string} - the localized string retrieved with the computed key\r\n * or the result of enum(property, value) if key not found or the value itself.\r\n */\r\n value(type: string, property: string, value: string): string {\r\n return this.valueOrUndefined(type, property, value)\r\n // default to value itself, useful for already-localized value or no-need-to-localize value\r\n || String(value);\r\n }\r\n\r\n /**\r\n * Get the localized string of the description of a property value of a type.\r\n * @param {string} type - the type\r\n * @param {string} property - the property\r\n * @param {string} value - the value\r\n * @returns {string} - the localized string retrieved with the computed key.\r\n * or the result of enumDescription(property, value) if key not found or the value itself.\r\n */\r\n valueDescription(type: string, property: string, value: string): string {\r\n return this.i18n.getString(`Schema_${type}_Property_${property}_Value_${capitalize(value.toString())}_Description`)\r\n || this.enumDescription(property, value)\r\n || String(value);\r\n }\r\n}\r\n","export * from './src/index';\r\nexport { DefaultSpecificRanges, RANGES } from './src/date-options/default-specific-ranges';\r\nexport { ComparedOptions } from './src/date-options/compared-options';\r\nexport {\r\n generateDateData,\r\n getRangesFromData,\r\n translateLegacyToIANATimezone,\r\n parseCivilDate,\r\n formatCivilDate,\r\n} from './src/date-util';\r\n","import _ from 'underscore';\r\nimport { CivilDate } from 'tc39-proposal-temporal';\r\n\r\nexport const MAX_VALUE = 8640000000000000;\r\nexport const MIN_VALUE = -8640000000000000;\r\n\r\nexport function isDateInvalid(date) {\r\n const year = _.get(date, 'year');\r\n const month = _.get(date, 'month');\r\n const day = _.get(date, 'day');\r\n return _.isNaN(year) || _.isUndefined(year) || _.isNull(year) ||\r\n _.isNaN(month) || _.isUndefined(month) || _.isNull(month) ||\r\n _.isNaN(day) || _.isUndefined(day) || _.isNull(day);\r\n}\r\n\r\n// Returns a date that is the first day of the month of the provided date.\r\nexport function getCivilDateMonthStart(date) {\r\n return new CivilDate(date.year, date.month, 1);\r\n}\r\n\r\n// Returns a date that is the last day of the month of the provided date.\r\nexport function getCivilDateMonthEnd(date) {\r\n return new CivilDate(date.year, date.month + 1, 0);\r\n}\r\n\r\n// Checks whether the date is valid.\r\nexport const isValidDate = value => _.isDate(value) && !_.isNaN(value.getTime());\r\n\r\n// Get a Civil Date from Date object\r\nexport const getCivilDateFromDate = value => (isValidDate(value) ? new CivilDate(\r\n value.getFullYear(),\r\n value.getMonth() + 1,\r\n value.getDate()\r\n) : null);\r\n\r\nexport const maxCivilDate = getCivilDateFromDate(new Date(MAX_VALUE));\r\nexport const minCivilDate = getCivilDateFromDate(new Date(MIN_VALUE));\r\n\r\n// Compare the month parts of two dates. A negative value if date1 is earlier than date2,\r\n// 0 if the dates are equal, or a positive value if date1 is later than date2.\r\nexport function compareCivilMonth(date1, date2) {\r\n if (date1.year !== date2.year) {\r\n return date1.year - date2.year;\r\n }\r\n return date1.month - date2.month;\r\n}\r\n\r\n// Compare the date parts of two dates. A negative value if date1 is earlier than date2,\r\n// 0 if the dates are equal, or a positive value if date1 is later than date2.\r\nexport function compareCivilDate(date1, date2) {\r\n if (date1.year !== date2.year) {\r\n return date1.year - date2.year;\r\n } else if (date1.month !== date2.month) {\r\n return date1.month - date2.month;\r\n }\r\n return date1.day - date2.day;\r\n}\r\n\r\nexport function getMinDate(date1, date2) {\r\n if (isDateInvalid(date1)) {\r\n return date2;\r\n }\r\n if (isDateInvalid(date2)) {\r\n return date1;\r\n }\r\n if (compareCivilDate(date1, date2) <= 0) {\r\n return date1;\r\n }\r\n return date2;\r\n}\r\n\r\nexport function getMaxDate(date1, date2) {\r\n if (isDateInvalid(date1)) {\r\n return date2;\r\n }\r\n if (isDateInvalid(date2)) {\r\n return date1;\r\n }\r\n if (compareCivilDate(date1, date2) >= 0) {\r\n return date1;\r\n }\r\n return date2;\r\n}\r\n\r\n// Checks whether the specified date is in the given date range.\r\nexport function isCivilDateInRange(date, { start, end }) {\r\n if (start && end) {\r\n if ((compareCivilDate(start, date) >= 0 && compareCivilDate(end, date) <= 0)\r\n || (compareCivilDate(start, date) <= 0 && compareCivilDate(end, date) >= 0)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\n// Checks whether the specified date is in the given date open range\r\n// eslint-disable-next-line max-len\r\nexport const isCivilDateInOpenRange = ({ minDate = minCivilDate, maxDate = maxCivilDate, value }) => {\r\n if (!value) {\r\n return false;\r\n }\r\n return isCivilDateInRange(value, { start: minDate, end: maxDate });\r\n};\r\n\r\n// Checks whether the month of the specified date is in the given date range.\r\nexport function isCivilMonthInRange(date, { start, end }) {\r\n if (start && end) {\r\n return (compareCivilMonth(start, date) >= 0 && compareCivilMonth(end, date) <= 0)\r\n || (compareCivilMonth(start, date) <= 0 && compareCivilMonth(end, date) >= 0);\r\n }\r\n return false;\r\n}\r\n\r\n// TODO: remove it and use civildate own function to do this.\r\n// There is a issue tracking this function: https://github.com/tc39/proposal-temporal/issues/69\r\nexport function getCivilDateDayOfWeek(civilDate) {\r\n return (new Date(civilDate.year, civilDate.month - 1, civilDate.day)).getDay();\r\n}\r\n\r\n// get a date that is the monday of this week(monday - sunday)\r\nexport const getThisMonday = (date, includeToday = true) => {\r\n if (isDateInvalid(date) || date.plus == null) {\r\n return null;\r\n }\r\n if (includeToday) {\r\n return (getCivilDateDayOfWeek(date) === 0 ?\r\n date.plus({ days: -6 }) :\r\n date.plus({ days: -getCivilDateDayOfWeek(date) + 1 }));\r\n }\r\n // map [1, 2, 3, 4, 5, 6, 0] to [7, 1, 2, 3, 4, 5, 6]\r\n const dayOfWeek = getCivilDateDayOfWeek(date);\r\n if (dayOfWeek === 1) {\r\n return date.plus({ days: -7 });\r\n }\r\n return date.plus({ days: -((dayOfWeek + 6) % 7) });\r\n};\r\n\r\nexport function getCivilDateToday() {\r\n return getCivilDateFromDate(new Date());\r\n}\r\n\r\n// Checks whether the specified date is the the given date range start or end.\r\nexport function isCivilDateRangeStartOrEnd(date, dateRange) {\r\n return _.some(dateRange, d => compareCivilDate(date, d) === 0);\r\n}\r\n\r\nfunction withDateChecker(date, func) {\r\n if (isDateInvalid(date) || date.plus == null) {\r\n return null;\r\n }\r\n return func();\r\n}\r\n\r\nexport function getThisSunday(date, includeToday = true) {\r\n // map [1, 2, 3, 4, 5, 6, 0] to [1, 2, 3, 4, 5, 6, 0]\r\n return withDateChecker(date, () => {\r\n const dayOfWeek = getCivilDateDayOfWeek(date);\r\n if (!includeToday && dayOfWeek === 0) {\r\n return date.plus({ days: -7 });\r\n }\r\n return date.plus({ days: -(dayOfWeek) });\r\n });\r\n}\r\n\r\nexport function getThisSaturday(date, includeToday = true) {\r\n // map [1, 2, 3, 4, 5, 6, 0] to [2, 3, 4, 5, 6, 0, 1]\r\n return withDateChecker(date, () => {\r\n const dayOfWeek = getCivilDateDayOfWeek(date);\r\n if (!includeToday && dayOfWeek === 6) {\r\n return date.plus({ days: -7 });\r\n }\r\n return date.plus({ days: -((dayOfWeek + 1) % 7) });\r\n });\r\n}\r\n\r\nexport function getLastMonday(date, includeToday = true) {\r\n // map [1, 2, 3, 4, 5, 6, 0] to [0, 1, 2, 3, 4, 5, 6]\r\n return withDateChecker(date, () => {\r\n const dayOfWeek = getCivilDateDayOfWeek(date);\r\n if (!includeToday && dayOfWeek === 1) {\r\n return date.plus({ days: -14 });\r\n }\r\n return date.plus({ days: -(((dayOfWeek + 6) % 7) + 7) });\r\n });\r\n}\r\n\r\nexport function getLastSunday(date, includeToday = true) {\r\n return withDateChecker(date, () => {\r\n const dayOfWeek = getCivilDateDayOfWeek(date);\r\n if (!includeToday && dayOfWeek === 0) {\r\n return date.plus({ days: -14 });\r\n }\r\n return date.plus({ days: -(dayOfWeek + 7) });\r\n });\r\n}\r\n\r\nexport function getNextMonday(date, includeToday = false) {\r\n return withDateChecker(date, () => {\r\n if (includeToday) {\r\n // map [1, 2, 3, 4, 5, 6, 0] to [0, 6, 5, 4, 3, 2, 1]\r\n const dayOfWeek = getCivilDateDayOfWeek(date);\r\n return date.plus({ days: (((7 - dayOfWeek) + 1) % 7) });\r\n }\r\n const dayOfWeek = getCivilDateDayOfWeek(date);\r\n return date.plus({ days: -((dayOfWeek + 6) % 7) + 7 });\r\n });\r\n}\r\n\r\nexport function getNextSunday(date, includeToday = false) {\r\n return withDateChecker(date, () => {\r\n if (includeToday) {\r\n const dayOfWeek = getCivilDateDayOfWeek(date);\r\n return date.plus({ days: ((7 - dayOfWeek) % 7) });\r\n }\r\n const dayOfWeek = getCivilDateDayOfWeek(date);\r\n return date.plus({ days: -(dayOfWeek) + 7 });\r\n });\r\n}\r\n\r\nexport function getNextSaturday(date, includeToday = false) {\r\n return withDateChecker(date, () => {\r\n if (includeToday) {\r\n // map [1, 2, 3, 4, 5, 6, 0] to [5, 4, 3, 2, 1, 0, 6]\r\n const dayOfWeek = getCivilDateDayOfWeek(date);\r\n return date.plus({ days: ((6 - dayOfWeek) % 7) });\r\n }\r\n const dayOfWeek = getCivilDateDayOfWeek(date);\r\n return date.plus({ days: -((dayOfWeek + 1) % 7) + 7 });\r\n });\r\n}\r\n\r\nexport function getNextNextSunday(date, includeToday = false) {\r\n return withDateChecker(date, () => {\r\n const dayOfWeek = getCivilDateDayOfWeek(date);\r\n if (includeToday && dayOfWeek === 0) {\r\n return date.plus({ days: 7 });\r\n }\r\n return date.plus({ days: -(dayOfWeek) + 14 });\r\n });\r\n}\r\n\r\nexport function getNextNextSaturday(date, includeToday = false) {\r\n return withDateChecker(date, () => {\r\n const dayOfWeek = getCivilDateDayOfWeek(date);\r\n if (includeToday && dayOfWeek === 6) {\r\n return date.plus({ days: 7 });\r\n }\r\n return date.plus({ days: -((dayOfWeek + 1) % 7) + 14 });\r\n });\r\n}\r\n\r\nexport function isDateAvailable(date, minDate, maxDate) {\r\n if (isDateInvalid(date) || isDateInvalid(minDate) || isDateInvalid(maxDate)) {\r\n return false;\r\n }\r\n return isCivilDateInRange(date, { start: minDate, end: maxDate });\r\n}\r\n\r\nexport function isRangeValid(range) {\r\n const start = _.get(range, 'start');\r\n const end = _.get(range, 'end');\r\n if (isDateInvalid(start) || isDateInvalid(end)) {\r\n return false;\r\n }\r\n return compareCivilDate(start, end) <= 0;\r\n}\r\n\r\nexport function isRangeDateAvailable(range, minDate, maxDate) {\r\n if (!isRangeValid(range)) {\r\n return false;\r\n }\r\n const start = _.get(range, 'start');\r\n const end = _.get(range, 'end');\r\n return isDateAvailable(start, minDate, maxDate) && isDateAvailable(end, minDate, maxDate);\r\n}\r\n\r\nexport function getDaysOfARange(range) {\r\n if (!isRangeValid(range)) {\r\n return 0;\r\n }\r\n const end = _.get(range, 'end');\r\n const start = _.get(range, 'start');\r\n const t2 = new Date(end.year, end.month - 1, end.day).getTime();\r\n const t1 = new Date(start.year, start.month - 1, start.day).getTime();\r\n // eslint-disable-next-line radix\r\n const difference = Math.round((t2 - t1) / (24 * 3600 * 1000));\r\n return difference + 1;\r\n}\r\n\r\nexport function getMonthsOfARange(range) {\r\n if (!isRangeValid(range)) {\r\n return 0;\r\n }\r\n const end = _.get(range, 'end');\r\n const start = _.get(range, 'start');\r\n if (end.year === start.year) {\r\n return (end.month - start.month) + 1;\r\n }\r\n const fullYears = end.year - start.year - 1;\r\n return (fullYears * 12) + ((12 - start.month) + 1) + end.month;\r\n}\r\n\r\nexport function isTheSameRange(range1, range2) {\r\n const start1 = _.get(range1, 'start');\r\n const start2 = _.get(range2, 'start');\r\n const end1 = _.get(range1, 'end');\r\n const end2 = _.get(range2, 'end');\r\n if (isDateInvalid(start1) || isDateInvalid(start2) || isDateInvalid(end1) || isDateInvalid(end2)) {\r\n return false;\r\n }\r\n return compareCivilDate(start1, start2) === 0 && compareCivilDate(end1, end2) === 0;\r\n}\r\n","module.exports = __WEBPACK_EXTERNAL_MODULE__91__;","\r\n\r\nimport { CivilDate } from 'tc39-proposal-temporal';\r\nimport {\r\n getCivilDateDayOfWeek,\r\n getCivilDateMonthStart,\r\n getThisMonday,\r\n} from '../index';\r\n\r\nexport const RANGES = {\r\n Yesterday: 1,\r\n Last7Days: 2,\r\n Today: 3,\r\n Custom: 4,\r\n Last30Days: 5,\r\n Last14Days: 6,\r\n ThisWeek: 7,\r\n ThisWeekMon: 8,\r\n LastWeek: 9,\r\n ThisMonth: 10,\r\n LastMonth: 11,\r\n Last3Months: 12,\r\n Last6Months: 13,\r\n LastWeekMon: 14,\r\n ThisYear: 15,\r\n LastYear: 16,\r\n EntireTimeLast18Months: 17,\r\n EntireTimeLast5Years: 18,\r\n EntireTime: 22,\r\n};\r\n\r\nexport const DefaultSpecificRanges = (i18n, timeZone) => {\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 thisSunday = today.plus({ days: -getCivilDateDayOfWeek(today) });\r\n const thisMonday = getThisMonday(today);\r\n const last7day = today.plus({ days: -7 });\r\n const last14day = today.plus({ days: -14 });\r\n const last30day = today.plus({ days: -30 });\r\n const lastMonday = today.plus({ days: -getCivilDateDayOfWeek(today) - 6 });\r\n const lastSunday = today.plus({ days: -getCivilDateDayOfWeek(today) - 7 });\r\n const lastSaturday = today.plus({ days: -getCivilDateDayOfWeek(today) - 1 });\r\n const thisMonthFirstDay = getCivilDateMonthStart(today);\r\n const lastMonthlastDay = thisMonthFirstDay.plus({ days: -1 });\r\n const lastMonthFirstDay = getCivilDateMonthStart(lastMonthlastDay);\r\n const minSupportDay = today.plus({ years: -3 });\r\n\r\n return [\r\n {\r\n rangeId: RANGES.Custom, key: 'Custom', range: { start: undefined, end: undefined },\r\n },\r\n {\r\n rangeId: RANGES.Today, key: 'Today', range: { start: today, end: today },\r\n },\r\n {\r\n rangeId: RANGES.Yesterday, key: 'Yesterday', range: { start: yesterday, end: yesterday },\r\n },\r\n {\r\n rangeId: RANGES.ThisWeek, key: 'ThisWeek', range: { start: thisSunday, end: today },\r\n },\r\n {\r\n rangeId: RANGES.ThisWeekMon, key: 'ThisWeekMon', range: { start: thisMonday, end: today },\r\n },\r\n {\r\n rangeId: RANGES.Last7Days, key: 'Last7Days', range: { start: last7day, end: yesterday },\r\n },\r\n {\r\n rangeId: RANGES.LastWeek, key: 'LastWeek', range: { start: lastSunday, end: lastSaturday },\r\n },\r\n {\r\n rangeId: RANGES.LastWeekMon, key: 'LastWeekMon', range: { start: lastMonday, end: thisSunday },\r\n },\r\n {\r\n rangeId: RANGES.Last14Days, key: 'Last14Days', range: { start: last14day, end: yesterday },\r\n },\r\n {\r\n rangeId: RANGES.ThisMonth, key: 'ThisMonth', range: { start: thisMonthFirstDay, end: today },\r\n },\r\n {\r\n rangeId: RANGES.LastMonth, key: 'LastMonth', range: { start: lastMonthFirstDay, end: lastMonthlastDay },\r\n },\r\n {\r\n rangeId: RANGES.Last30Days, key: 'Last30Days', range: { start: last30day, end: yesterday },\r\n },\r\n {\r\n rangeId: RANGES.EntireTime, key: 'EntireTime', range: { start: minSupportDay, end: today },\r\n },\r\n ];\r\n};\r\n","import { getLastMonth } from '../date-util';\r\n\r\nexport const ComparedType = {\r\n LastPeriod: 0,\r\n LastMonth: 1,\r\n LastYear: 2,\r\n Custom: 3,\r\n};\r\nexport const ComparedOptions = [\r\n {\r\n type: ComparedType.LastPeriod,\r\n textToExport: 'Previous period',\r\n keyToExport: 'previousPeriod',\r\n get: (range, specificRangeId) => {\r\n switch (specificRangeId) {\r\n // this week\r\n case 7:\r\n case 8:\r\n return ({\r\n start: range.start.plus({ days: -7 }),\r\n end: range.end.plus({ days: -7 }),\r\n });\r\n // this month\r\n case 10:\r\n return ({\r\n start: getLastMonth(range.start),\r\n end: getLastMonth(range.end),\r\n });\r\n default: {\r\n const t2 = new Date(range.end.year, range.end.month - 1, range.end.day).getTime();\r\n const t1 = new Date(range.start.year, range.start.month - 1, range.start.day).getTime();\r\n // eslint-disable-next-line radix\r\n const difference = parseInt((t2 - t1) / (24 * 3600 * 1000));\r\n return ({\r\n start: range.start.plus({ days: -1 - difference }),\r\n end: range.start.plus({ days: -1 }),\r\n });\r\n }\r\n }\r\n },\r\n }, {\r\n type: ComparedType.LastMonth,\r\n textToExport: 'Last month',\r\n keyToExport: 'lastMonth',\r\n get: range => ({\r\n start: getLastMonth(range.start),\r\n end: getLastMonth(range.end),\r\n }),\r\n }, {\r\n type: ComparedType.LastYear,\r\n textToExport: 'Same period last year',\r\n keyToExport: 'samePeriodLastYear',\r\n get: range => ({\r\n start: range.start.plus({ years: -1 }),\r\n end: range.end.plus({ years: -1 }),\r\n }),\r\n }, {\r\n type: ComparedType.Custom,\r\n textToExport: 'Custom',\r\n keyToExport: 'customPeriod',\r\n get: () => ({\r\n start: undefined,\r\n end: undefined,\r\n }),\r\n },\r\n];\r\n","/* eslint-disable max-len */\r\nimport { CivilDate } from 'tc39-proposal-temporal';\r\nimport { fromLegacyTimeZone, toIANATimeZone } from '@bingads-webui-universal/time-zone-converter';\r\n\r\nexport const getLastMonth = (date) => {\r\n let lastMonthDate = date.plus({ months: -1 });\r\n if (lastMonthDate.day !== date.day) {\r\n lastMonthDate = lastMonthDate.plus({ days: -lastMonthDate.day });\r\n }\r\n return lastMonthDate;\r\n};\r\n\r\nexport const formatCivilDate = ({\r\n i18n, date, dateFormat = 'M/d/yyyy',\r\n}) => `${date ? i18n.formatCivilDate(date, { raw: dateFormat }) : ''}`;\r\n\r\nexport const getDateObj = ({ i18n, dateString, dateFormat }) => {\r\n if (!dateString) { return null; }\r\n if (dateFormat) { return i18n.parseCivilDate(dateString, { raw: dateFormat }); }\r\n\r\n const date = new Date(dateString);\r\n const year = date.getFullYear();\r\n const month = date.getMonth() + 1;\r\n const day = date.getDate();\r\n\r\n return (year && month && day) ? {\r\n year,\r\n month,\r\n day,\r\n } : null;\r\n};\r\n\r\nexport const parseCivilDate = ({ i18n, dateString, dateFormat }) => {\r\n const dateObj = getDateObj({ i18n, dateString, dateFormat });\r\n return dateObj ? new CivilDate(dateObj.year, dateObj.month, dateObj.day) : undefined;\r\n};\r\n\r\nexport const translateLegacyToIANATimezone =\r\n legacyTimeZone => toIANATimeZone(fromLegacyTimeZone(legacyTimeZone));\r\n\r\nexport const generateDateData = (i18n, dateFromDatePicker, dateFormat, lcid) => {\r\n const formattedStart = dateFromDatePicker.selectedComparedRange ? formatCivilDate({ i18n, date: dateFromDatePicker.selectedComparedRange.start, dateFormat }) : null;\r\n const formattedEnd = dateFromDatePicker.selectedComparedRange ? formatCivilDate({ i18n, date: dateFromDatePicker.selectedComparedRange.end, dateFormat }) : null;\r\n let compared;\r\n if (!formattedStart && !formattedEnd) {\r\n compared = null;\r\n } else {\r\n compared = {\r\n formattedStart,\r\n formattedEnd,\r\n text: dateFromDatePicker.comparedOption && dateFromDatePicker.comparedOption.textToExport,\r\n key: dateFromDatePicker.comparedOption && dateFromDatePicker.comparedOption.keyToExport,\r\n start: i18n.parseDate(formattedStart),\r\n end: i18n.parseDate(formattedEnd),\r\n };\r\n }\r\n const date = {\r\n RangeStartDate: formatCivilDate({ i18n, date: dateFromDatePicker.selectedRange.start, dateFormat }),\r\n RangeEndDate: formatCivilDate({ i18n, date: dateFromDatePicker.selectedRange.end, dateFormat }),\r\n RangeId: dateFromDatePicker.rangeType.rangeId,\r\n Rangelcid: lcid,\r\n compared,\r\n RangeIndex: dateFromDatePicker.rangeIndex,\r\n RangeDays: dateFromDatePicker.rangeDays,\r\n };\r\n return date;\r\n};\r\n\r\nexport const getRangesFromData = (i18n, dateData, dateFormat, lcid) => {\r\n if (!dateData || dateData.Rangelcid !== lcid) {\r\n return { selectedRange: undefined, selectedComparedRange: undefined };\r\n }\r\n const {\r\n RangeStartDate,\r\n RangeEndDate,\r\n compared,\r\n } = dateData;\r\n return {\r\n selectedRange: {\r\n start: RangeStartDate ? parseCivilDate({ i18n, dateString: RangeStartDate, dateFormat }) : undefined,\r\n end: RangeEndDate ? parseCivilDate({ i18n, dateString: RangeEndDate, dateFormat }) : undefined,\r\n },\r\n selectedComparedRange: {\r\n start: compared && compared.formattedStart ?\r\n parseCivilDate({ i18n, dateString: compared.formattedStart, dateFormat }) : undefined,\r\n end: compared && compared.formattedEnd ?\r\n parseCivilDate({ i18n, dateString: compared.formattedEnd, dateFormat }) : undefined,\r\n },\r\n };\r\n};\r\n","module.exports = __WEBPACK_EXTERNAL_MODULE__95__;","/**\r\n * The base cache replacement strategy.\r\n */\r\nexport class ReplacementStrategy {\r\n /**\r\n * Get the key of the cache entry to replace\r\n * @param {TimeAwareCache} cache - The cache to write with\r\n * @param {string} key - The key for the new cache entry\r\n * @param {number} timestamp - The timestamp of the write operation\r\n * @returns {string} - The key of the entry to replace\r\n */\r\n keyToReplace(/* cache, key, timestamp */) { return null; }\r\n\r\n /**\r\n * Initialize the data structure to apply the strategy on a given cache\r\n * @param {TimeAwareCache} cache - The cache to work with\r\n * @returns {void}\r\n */\r\n initializeCache(cache) {\r\n cache.subscribe(this);\r\n }\r\n}\r\n","// Terms\r\n// TLRU - Time aware Least Recently Used\r\n// LRU record - least recently used cache record\r\n// LLT record - least life time cache record\r\n// LRU chain - a chain of all cache records in access sequence. The head of the\r\n// chain is the LRU record\r\n// TTL heap - a min-heap of all cache records according to their time to live.\r\n// the root of the heap is the LLT record\r\n\r\nimport { ReplacementStrategy } from './base';\r\nimport { EXP_INVALIDATED, DEFAULT_LIMIT } from '../constants';\r\n\r\nfunction validateLimit(limit) {\r\n if (typeof limit !== 'number' || Math.floor(limit) !== limit || limit <= 0) {\r\n throw new Error('Invalid limit');\r\n }\r\n}\r\n\r\n/**\r\n * The record for 1 cached key value pair\r\n * @typedef {Object} LRURecord\r\n * @property {string} key - The key for the object cached in the record\r\n * @property {number} exp - The expiration time\r\n * @property {LRURecord} next - Next record in LRU chain (more recently used)\r\n * @property {LRURecord} prev - Previous record in LRU chain (less recenlty used)\r\n */\r\n\r\n/* eslint-disable no-param-reassign */\r\n/**\r\n * Remove an LRU record from the chain\r\n * @private\r\n * @param {LRURecord} record - The record to remove\r\n * @returns {void}\r\n */\r\nfunction removeLRURecord(record) {\r\n record.prev.next = record.next;\r\n record.next.prev = record.prev;\r\n}\r\n\r\n/**\r\n * Insert an LRU record into the chain before the anchor record\r\n * @private\r\n * @param {LRURecord} record - The record to insert\r\n * @param {LRURecord} anchor - The anchor record\r\n * @returns {void}\r\n */\r\nfunction insertLRURecord(record, anchor) {\r\n anchor.prev.next = record;\r\n record.prev = anchor.prev;\r\n anchor.prev = record;\r\n record.next = anchor;\r\n}\r\n/* eslit-enable no-param-reassign */\r\n\r\n/**\r\n * Promote an LRU record in the chain, mark it as most recently used\r\n * @private\r\n * @param {Object} lru - The TLRU cache state\r\n * @param {LRURecord} lru.records - The LRU records\r\n * @param {Object} lru.indices -\r\n * The index hash, a mapping from cache key to record index\r\n * @param {string} key - The key of the record to be promoted\r\n * @returns {void}\r\n */\r\nfunction promoteLRURecord(lru, key) {\r\n const { records, indices } = lru;\r\n const record = records[indices[key]];\r\n const pseudoRecord = records[0];\r\n\r\n if (record !== pseudoRecord && record !== pseudoRecord.prev) {\r\n removeLRURecord(record);\r\n insertLRURecord(record, pseudoRecord);\r\n }\r\n}\r\n\r\n/* eslint-disable no-bitwise, no-continue */\r\n\r\n/**\r\n * Adjust the LRU records\r\n * @private\r\n * @param {Object} lru - The TLRU cache state\r\n * @param {LRURecord} lru.records - The LRU records\r\n * @param {Object} lru.indices - The mapping from cache key to record index\r\n * @param {string} key - The key of the record to be promoted\r\n * @returns {void}\r\n */\r\nfunction adjustHeap(lru, key) {\r\n const { records, indices } = lru;\r\n let index = indices[key];\r\n\r\n while (index > 0 && index < records.length) {\r\n const record = records[index];\r\n\r\n const indexParent = index >> 1;\r\n const recordParent = indexParent > 0 ? records[indexParent] : null;\r\n\r\n // Shift up the record if it has less life time than parent\r\n if (recordParent && recordParent.exp > record.exp) {\r\n indices[record.key] = indexParent;\r\n indices[recordParent.key] = index;\r\n records[index] = recordParent;\r\n records[indexParent] = record;\r\n index = indexParent;\r\n continue;\r\n }\r\n\r\n // Choose the child with less life time\r\n const indexL = index << 1;\r\n const indexR = indexL + 1;\r\n const recordL = records[indexL] || null;\r\n const recordR = records[indexR] || null;\r\n const indexChild = (recordR && recordR.exp < recordL.exp) ? indexR : indexL;\r\n const recordChild = records[indexChild] || null;\r\n\r\n // Shift down the record if it has more life time than the child\r\n if (recordChild && recordChild.exp < record.exp) {\r\n indices[record.key] = indexChild;\r\n indices[recordChild.key] = index;\r\n records[index] = recordChild;\r\n records[indexChild] = record;\r\n index = indexChild;\r\n continue;\r\n }\r\n\r\n break;\r\n }\r\n}\r\n/* eslint-disable no-continue */\r\n\r\nexport class LRUReplacementStrategy extends ReplacementStrategy {\r\n /**\r\n * The Time aware Least Recently Used cache replacement strategy.\r\n * The replacement rules are\r\n * 1. If the LLT cache entry is expired, reuse it\r\n * 2. If the cache is not full, create a new entry\r\n * 3. Reuse the LRU cache entry\r\n * @extends ReplacementStrategy\r\n * @param {Object} options -\r\n * @param {number} options.limit - Maximum number of cache entries\r\n */\r\n constructor({ limit = DEFAULT_LIMIT } = {}) {\r\n super();\r\n validateLimit(limit);\r\n\r\n this.limit = limit;\r\n }\r\n\r\n /**\r\n * Initialize the data structure to apply the strategy on a given cache\r\n * @override\r\n * @param {TimeAwareCache} cache - The cache to work with\r\n * @returns {void}\r\n */\r\n initializeCache(cache) {\r\n super.initializeCache(cache);\r\n\r\n // The pseudoRecord, doesn't hold any data, the purpose is\r\n // 1. Hold the head and tail of the LRU chain. Make the linked list a ring\r\n // to simplify the logic.\r\n // 2. Take the index 0 of the TTL heap, to simplify the calculation of the\r\n // index of the parent and the children in the heap.\r\n const pseudoRecord = {};\r\n pseudoRecord.next = pseudoRecord;\r\n pseudoRecord.prev = pseudoRecord;\r\n\r\n cache.lru = {\r\n // The TTL heap of the records, while the `next`, `prev` of the records\r\n // forms the LRU chain\r\n records: [pseudoRecord],\r\n\r\n // A map from the key to index in the TTL heap\r\n indices: {},\r\n };\r\n }\r\n\r\n /**\r\n * Get the key of the cache entry to replace, the rules are\r\n * 1. If the LLT entry is expired, reused it (return key of the LLT entry)\r\n * 2. If the cache is not full, allocate a new entry (return null)\r\n * 3. Reuse the LRU entry (return key of the LRU entry)\r\n * @override\r\n * @param {TimeAwareCache} cache - The cache to write with\r\n * @param {string} key - The key for the new cache entry\r\n * @param {number} timestamp - The timestamp of the write operation\r\n * @returns {string} - The key of the entry to replace\r\n */\r\n keyToReplace(cache, key, timestamp) {\r\n const { records, indices } = cache.lru;\r\n\r\n // Reuse the existing entry if the LRU record exists\r\n if (indices[key]) {\r\n return key;\r\n }\r\n\r\n // Reuse the LLT entry if it's already expired\r\n const recordLLT = records[1] || null;\r\n\r\n if (recordLLT && recordLLT.exp <= timestamp) {\r\n return recordLLT.key;\r\n }\r\n\r\n // Allocate a new entry if the cache is not full\r\n if (records.length <= this.limit) {\r\n return null;\r\n }\r\n\r\n // Reuse the LRU entry\r\n return records[0].next.key;\r\n }\r\n\r\n /**\r\n * Update the LRU records onGet\r\n * @override\r\n * @param {TimeAwareCache} cache - The cache being accessed\r\n * @param {number} timestamp - The timestamp of the operation\r\n * @param {CacheEntry} entry - The cache entry being read, null on cache miss\r\n * @returns {void}\r\n */\r\n onGet(cache, timestamp, { key, value, exp }) {\r\n if (value !== null && exp > timestamp) {\r\n promoteLRURecord(cache.lru, key);\r\n }\r\n }\r\n\r\n /**\r\n * Update the LRU records onSet\r\n * @override\r\n * @param {TimeAwareCache} cache - The cache being accessed\r\n * @param {number} timestamp - The timestamp of the operation\r\n * @param {CacheEntry} entry - The cache entry being written\r\n * @param {string} keyToReplace - The key of the replaced cache entry\r\n * @returns {void}\r\n */\r\n onSet(cache, timestamp, entry, keyToReplace) {\r\n const { records, indices } = cache.lru;\r\n\r\n if (keyToReplace) {\r\n const index = indices[keyToReplace];\r\n const record = records[index];\r\n\r\n record.key = entry.key;\r\n record.exp = entry.exp;\r\n\r\n delete indices[keyToReplace];\r\n indices[entry.key] = index;\r\n\r\n promoteLRURecord(cache.lru, entry.key);\r\n } else {\r\n const index = records.length;\r\n const record = { key: entry.key, exp: entry.exp };\r\n\r\n indices[entry.key] = index;\r\n records.push(record);\r\n insertLRURecord(record, records[0]);\r\n }\r\n\r\n adjustHeap(cache.lru, entry.key);\r\n }\r\n\r\n /**\r\n * Update the LRU records onGet\r\n * @override\r\n * @param {TimeAwareCache} cache - The cache being accessed\r\n * @param {number} timestamp - The timestamp of the operation\r\n * @param {CacheEntry} entry - The cache entry to delete, null on cache miss\r\n * @returns {void}\r\n */\r\n onDel(cache, timestamp, { key, value, exp }) {\r\n if (value !== null && exp > EXP_INVALIDATED) {\r\n const { records, indices } = cache.lru;\r\n const index = indices[key];\r\n const record = records[index];\r\n\r\n record.exp = EXP_INVALIDATED;\r\n adjustHeap(cache.lru, key);\r\n }\r\n }\r\n}\r\n","/**\r\n * The expiration time for invalidated items\r\n * @constant {number}\r\n */\r\nexport const EXP_INVALIDATED = -1;\r\nexport const DEFAULT_LIMIT = 10;\r\n","/** @module @bingads-webui-universal/time-aware-cache */\r\n\r\n/**\r\n * Version of the package\r\n * @type {string}\r\n */\r\n\r\nexport {\r\n /**\r\n * The TimeAwareCache class\r\n * @see TimeAwareCache\r\n */\r\n TimeAwareCache,\r\n} from './src/time-aware-cache';\r\n\r\nexport {\r\n /**\r\n * The expiration time for invalidated items\r\n * @constant number\r\n */\r\n EXP_INVALIDATED\r\n} from './src/constants';\r\n\r\nexport {\r\n /**\r\n * The ReplacementStrategy class\r\n * @see ReplacementStrategy\r\n */\r\n ReplacementStrategy,\r\n\r\n /**\r\n * The UnlimitedReplacementStrategy class\r\n * @see UnlimitedReplacementStrategy\r\n */\r\n UnlimitedReplacementStrategy,\r\n\r\n /**\r\n * The LRUReplacementStrategy class\r\n * @see LRUReplacementStrategy\r\n */\r\n LRUReplacementStrategy,\r\n\r\n /**\r\n * The default cache strategy\r\n * @type UnlimitedReplacementStrategy\r\n */\r\n defaultStrategy,\r\n} from './src/replacement-strategy/index';\r\n","import { Subject } from '@bingads-webui-universal/observer-pattern';\r\nimport { defaultStrategy } from './replacement-strategy/index';\r\nimport { EXP_INVALIDATED } from './constants';\r\n\r\nfunction validateTTL(ttl) {\r\n if (typeof ttl !== 'number' || ttl <= 0) {\r\n throw new Error('Invalid TTL');\r\n }\r\n}\r\n\r\nfunction validateKey(key) {\r\n if (typeof key !== 'string') {\r\n throw new Error('Invalid key');\r\n }\r\n}\r\n\r\nfunction validateValue(value) {\r\n if (typeof value === 'undefined' || value === null) {\r\n throw new Error('Invalid value');\r\n }\r\n}\r\n\r\nfunction stubEntry(key) {\r\n return { key, value: null, exp: EXP_INVALIDATED };\r\n}\r\n\r\n/**\r\n * Observer of cache read/write/delete events\r\n * @typedef {Object} CacheObserver\r\n * @property {CacheOnGetCallback} onGet - Callback on cache read operations\r\n * @property {CacheOnSetCallback} onSet - Callback on cache write operations\r\n * @property {CacheOnDelCallback} onDel - Callback on cache delete operations\r\n */\r\n\r\n/**\r\n * Callback on cache read operations\r\n * @callback CacheOnGetCallback\r\n * @param {TimeAwareCache} cache - The cache being accessed\r\n * @param {number} timestamp - The timestamp of the operation\r\n * @param {CacheEntry} entry - The cache entry being read. On cache miss, it\r\n * will be a fake entry with the accessing key and a null value.\r\n * @returns {void}\r\n */\r\n\r\n/**\r\n * Callback on cache write operations\r\n * @callback CacheOnSetCallback\r\n * @param {TimeAwareCache} cache - The cache being accessed\r\n * @param {number} timestamp - The timestamp of the operation\r\n * @param {CacheEntry} entry - The cache entry being written\r\n * @param {string} keyToReplace - The key of the replaced cache entry\r\n * @returns {void}\r\n */\r\n\r\n/**\r\n * Callback on cache delete operations\r\n * @callback CacheOnDelCallback\r\n * @param {TimeAwareCache} cache - The cache being accessed\r\n * @param {number} timestamp - The timestamp of the operation\r\n * @param {CacheEntry} entry - The cache entry to delete, null on cache miss\r\n * @returns {void}\r\n */\r\n\r\n/**\r\n * A key-value cache with a TTL attached to each item\r\n */\r\nexport class TimeAwareCache extends Subject {\r\n /**\r\n * @param {Object} options -\r\n * @param {number} [options.ttl=Infinity] -\r\n * The default TTL for items in this cache in milliseconds.\r\n * @param {CacheStrategy} [options.strategy=defaultStrategy] -\r\n * The cache replacement strategy.\r\n * Default to an instance of UnlimitedCacheStrategy.\r\n */\r\n constructor({\r\n ttl = Infinity,\r\n strategy = defaultStrategy,\r\n } = {}) {\r\n super();\r\n validateTTL(ttl);\r\n\r\n this.ttl = ttl;\r\n this.strategy = strategy;\r\n this.entries = {};\r\n\r\n strategy.initializeCache(this);\r\n }\r\n\r\n /**\r\n * Read value for given key from cache\r\n * @param {string} key - The key to access\r\n * @returns {Object} - The value associated with the key\r\n */\r\n get(key) {\r\n validateKey(key);\r\n\r\n const timestamp = Date.now();\r\n const entry = this.entries[key] || null;\r\n\r\n this.notify('onGet', timestamp, entry || stubEntry(key));\r\n return entry && entry.exp > timestamp ? entry.value : null;\r\n }\r\n\r\n /**\r\n * Write a key/value pair to cache\r\n * @param {string} key - The key of to write\r\n * @param {Object} value - The value to write\r\n * @param {number} ttl - The time for the key/value pair to live in milliseconds\r\n * @returns {void}\r\n */\r\n set(key, value, ttl = this.ttl) {\r\n validateKey(key);\r\n validateValue(value);\r\n validateTTL(ttl);\r\n\r\n const timestamp = Date.now();\r\n const entry = this.entries[key] || null;\r\n const keyToReplace = entry ? key : this.strategy.keyToReplace(this, key, timestamp);\r\n const entryNew = { key, value, exp: timestamp + ttl };\r\n\r\n if (keyToReplace && keyToReplace !== key) {\r\n delete this.entries[keyToReplace];\r\n }\r\n\r\n this.entries[key] = entryNew;\r\n\r\n this.notify('onSet', timestamp, entryNew, keyToReplace);\r\n }\r\n\r\n /**\r\n * Delete a key/value pair from cache\r\n * @param {string} key - The key to remove\r\n * @returns {void}\r\n */\r\n del(key) {\r\n validateKey(key);\r\n\r\n const timestamp = Date.now();\r\n const entry = this.entries[key] || null;\r\n\r\n if (entry) {\r\n delete this.entries[key];\r\n }\r\n\r\n this.notify('onDel', timestamp, entry || stubEntry(key));\r\n }\r\n\r\n /**\r\n * Purge all the expired entries\r\n * @returns {void}\r\n */\r\n purge() {\r\n const timestamp = Date.now();\r\n\r\n Object.keys(this.entries).forEach((key) => {\r\n if (this.entries[key].exp <= timestamp) {\r\n this.del(key);\r\n }\r\n });\r\n }\r\n}\r\n","/** @exports @bingads-webui/time-aware-cache */\r\n\r\nimport { ReplacementStrategy } from './base';\r\n\r\nexport { LRUReplacementStrategy } from './lru';\r\nexport { ReplacementStrategy };\r\n\r\n/**\r\n * The unlimited cache replacement strategy class, assume the cache can have\r\n * unlimited entries\r\n * @extends ReplacementStrategy\r\n */\r\nexport class UnlimitedReplacementStrategy extends ReplacementStrategy {}\r\n\r\nexport const defaultStrategy = new UnlimitedReplacementStrategy();\r\n","/* eslint-env node */\r\n\r\n// same as enum TimeZone defined in\r\n// \\\\AdsAppUI\\private\\UI\\Common\\Microsoft.AdCenter.UI.Advertiser.BusinessEntities\r\n// \\Common\\Enums\\Enums.cs\r\n// For iana-tz-data, see\r\n// https://en.wikipedia.org/wiki/List_of_tz_database_time_zones\r\n// https://github.com/eggert/tz\r\n// https://www.iana.org/time-zones/repository/tz-link.html\r\n// http://www.unicode.org/repos/cldr/trunk/common/bcp47/timezone.xml\r\n// There're several mismatched time zones between ours and iana ones,\r\n// that's because we prefer capital, but iana prefers largest city\r\n// offset is defined by ourselves, which doesn't consider Daylight Saving Time\r\nmodule.exports = {\r\n AbuDhabiMuscat: {\r\n legacy: 32,\r\n offset: '+04:00',\r\n // Abu Dhabi is missing in iana-tz-data, use Asia/Dubai for Abu Dhabi (United Arab Emirates)\r\n iana: ['Asia/Dubai', 'Asia/Muscat'],\r\n },\r\n Adelaide: {\r\n legacy: 11,\r\n offset: '+09:30',\r\n // Australia/Adelaide has UTC offset +09:30/+10:30\r\n iana: ['Australia/Adelaide'],\r\n },\r\n Alaska: {\r\n legacy: 72,\r\n offset: '-09:00',\r\n // Australia/Adelaide has UTC offset -09:00/-08:00\r\n iana: ['US/Alaska'],\r\n },\r\n Almaty_Novosibirsk: {\r\n legacy: 25,\r\n offset: '+06:00',\r\n // Asia/Almaty has UTC offset +06:00/+06:00\r\n // Asia/Novosibirsk has +07:00/+07:00\r\n iana: ['Asia/Almaty', 'Asia/Novosibirsk'],\r\n },\r\n AmsterdamBerlinBernRomeStockholmVienna: {\r\n legacy: 48,\r\n offset: '+01:00',\r\n // Bern is missing in iana-tz-data, use Europe/Zurich for Bern (Switzerland)\r\n // All these iana time zone has UTC offset +01:00/+02:00\r\n iana: ['Europe/Amsterdam', 'Europe/Berlin', 'Europe/Zurich', 'Europe/Rome', 'Europe/Stockholm', 'Europe/Vienna'],\r\n },\r\n Arizona: {\r\n legacy: 68,\r\n offset: '-07:00',\r\n iana: ['US/Arizona'],\r\n },\r\n AstanaDhaka: {\r\n legacy: 24,\r\n offset: '+06:00',\r\n // Astana is missing in iana-tz-data, use Asia/Almaty for Astana (Kazakhstan)\r\n iana: ['Asia/Almaty', 'Asia/Dhaka'],\r\n },\r\n AthensIslandanbulMinsk: {\r\n legacy: 43,\r\n offset: '+02:00',\r\n // Islandanbul should be misspelled Istanbul\r\n // Europe/Athens has UTC offset +02:00/+03:00\r\n // other 2 have UTC offset +03:00/+03:00\r\n iana: ['Europe/Athens', 'Europe/Istanbul', 'Europe/Minsk'],\r\n },\r\n AtlanticTimeCanada: {\r\n legacy: 58,\r\n offset: '-04:00',\r\n // Canada/Atlantic has UTC offset -04:00/-03:00\r\n iana: ['Canada/Atlantic'],\r\n },\r\n AucklandWellington: {\r\n legacy: 3,\r\n offset: '+12:00',\r\n // Wellington is missing in iana-tz-data, use NZ for Wellington (New Zealand)\r\n // Both these iana time zones have UTC offset +12:00/+13:00\r\n iana: ['Pacific/Auckland', 'NZ'],\r\n },\r\n Azores: {\r\n legacy: 51,\r\n offset: '-01:00',\r\n // Atlantic/Azores has UTC offset -01:00/+00:00\r\n iana: ['Atlantic/Azores'],\r\n },\r\n Baghdad: {\r\n legacy: 37,\r\n offset: '+03:00',\r\n iana: ['Asia/Baghdad'],\r\n },\r\n BakuTbilisiYerevan: {\r\n legacy: 31,\r\n offset: '+04:00',\r\n iana: ['Asia/Baku', 'Asia/Tbilisi', 'Asia/Yerevan'],\r\n },\r\n BangkokHanoiJakarta: {\r\n legacy: 21,\r\n offset: '+07:00',\r\n // Hanoi is missing in iana-tz-data, use Asia/Ho_Chi_Minh for Hanoi (Vietnam)\r\n iana: ['Asia/Bangkok', 'Asia/Ho_Chi_Minh', 'Asia/Jakarta'],\r\n },\r\n BeijingChongqingHongKongUrumqi: {\r\n legacy: 19,\r\n offset: '+08:00',\r\n // Beijing is missing in iana-tz-data, use PRC for Beijing (China)\r\n // Asia/Urumqi has UTC offset +06:00/+06:00\r\n iana: ['PRC', 'Asia/Chongqing', 'Asia/Hong_Kong', 'Asia/Urumqi'],\r\n },\r\n BelgradeBratislavaBudapestLjubljanaPrague: {\r\n legacy: 47,\r\n offset: '+01:00',\r\n // All these iana time zones have UTC offset +01:00/+02:00\r\n iana: ['Europe/Belgrade', 'Europe/Bratislava', 'Europe/Budapest', 'Europe/Ljubljana', 'Europe/Prague'],\r\n },\r\n BogotaLimaQuito: {\r\n legacy: 61,\r\n offset: '-05:00',\r\n // Quito is missing in iana-tz-data, use America/Guayaquil for Quito (Ecuador)\r\n iana: ['America/Bogota', 'America/Lima', 'America/Guayaquil'],\r\n },\r\n Brasilia: {\r\n legacy: 54,\r\n offset: '-03:00',\r\n // Brasília is missing in iana-tz-data, use Brazil/East for Brasília (Brazil)\r\n // Brazil has several time zones, see: https://en.wikipedia.org/wiki/Time_in_Brazil\r\n // Brazil/East has UTC offset -03:00/-02:00\r\n iana: ['Brazil/East'],\r\n },\r\n Brisbane: {\r\n legacy: 9,\r\n offset: '+10:00',\r\n iana: ['Australia/Brisbane'],\r\n },\r\n BrusselsCopenhagenMadridParis: {\r\n legacy: 46,\r\n offset: '+01:00',\r\n // All these iana time zones have UTC offset +01:00/+02:00\r\n iana: ['Europe/Brussels', 'Europe/Copenhagen', 'Europe/Madrid', 'Europe/Paris'],\r\n },\r\n Bucharest: {\r\n legacy: 42,\r\n offset: '+02:00',\r\n // Europe/Bucharest has UTC offset +02:00/+03:00\r\n iana: ['Europe/Bucharest'],\r\n },\r\n BuenosAiresGeorgetown: {\r\n legacy: 55,\r\n offset: '-03:00',\r\n // Georgetown is missing in iana-tz-data, use America/Guyana for Georgetown (Guyana)\r\n // America/Guyana has UTC offset -04:00/-04:00\r\n iana: ['America/Buenos_Aires', 'America/Guyana'],\r\n },\r\n Cairo: {\r\n legacy: 41,\r\n offset: '+02:00',\r\n iana: ['Africa/Cairo'],\r\n },\r\n CanberraMelbourneSydney: {\r\n legacy: 8,\r\n offset: '+10:00',\r\n // All these iana time zones have UTC offset +10:00/+11:00\r\n iana: ['Australia/Canberra', 'Australia/Melbourne', 'Australia/Sydney'],\r\n },\r\n CapeVerdeIsland: {\r\n legacy: 52,\r\n offset: '-01:00',\r\n iana: ['Atlantic/Cape_Verde'],\r\n },\r\n CaracasLaPaz: {\r\n legacy: 59,\r\n offset: '-04:00',\r\n iana: ['America/Caracas', 'America/La_Paz'],\r\n },\r\n CasablancaMonrovia: {\r\n legacy: 49,\r\n offset: '+00:00',\r\n // Africa/Casablanca has UTC offset +00:00/+01:00\r\n iana: ['Africa/Casablanca', 'Africa/Monrovia'],\r\n },\r\n CentralAmerica: {\r\n legacy: 64,\r\n offset: '-06:00',\r\n // US/Central has UTC offset -06:00/-05:00\r\n iana: ['US/Central'],\r\n },\r\n CentralTimeUSCanada: {\r\n legacy: 65,\r\n offset: '-06:00',\r\n // US/Central is duplicated with CentralAmerica\r\n // Both these iana time zones have UTC offset -06:00/-05:00\r\n iana: ['US/Central', 'Canada/Central'],\r\n },\r\n ChennaiKolkataMumbaiNewDelhi: {\r\n legacy: 27,\r\n offset: '+05:30',\r\n // India has only one time zone\r\n // see: https://en.wikipedia.org/wiki/Time_in_India\r\n iana: ['Asia/Kolkata'],\r\n },\r\n ChihuahuaLaPazMazatlan: {\r\n legacy: 69,\r\n offset: '-07:00',\r\n // LaPaz alrady covered by CaracasLaPaz\r\n // America/La_Paz has UTC offset -04:00/-04:00\r\n // other 2 have UTC offset -07:00/-06:00\r\n iana: ['America/Chihuahua', 'America/La_Paz', 'America/Mazatlan'],\r\n },\r\n Darwin: {\r\n legacy: 10,\r\n offset: '+09:30',\r\n iana: ['Australia/Darwin'],\r\n },\r\n EasternTimeUSCanada: {\r\n legacy: 62,\r\n offset: '-05:00',\r\n // Both these iana time zones have UTC offset -05:00/-04:00\r\n iana: ['US/Eastern', 'Canada/Eastern'],\r\n },\r\n Ekaterinburg: {\r\n legacy: 29,\r\n offset: '+05:00',\r\n // Ekaterinburg should be misspelled Yekaterinburg\r\n iana: ['Asia/Yekaterinburg'],\r\n },\r\n FijiKamchatkaMarshallIsland: {\r\n legacy: 2,\r\n offset: '+12:00',\r\n // Marshall Islands is missing in iana-tz-data, use Pacific/Majuro for Marshall Islands\r\n // Pacific/Fiji has UTC offset +12:00/+13:00\r\n iana: ['Pacific/Fiji', 'Asia/Kamchatka', 'Pacific/Majuro'],\r\n },\r\n Greenland: {\r\n legacy: 56,\r\n offset: '-03:00',\r\n // Greenland is missing in iana-tz-data, use America/Godthab for Greenland\r\n // America/Godthab has UTC offset -03:00/-02:00\r\n iana: ['America/Godthab'],\r\n },\r\n GreenwichMeanTimeDublinEdinburghLisbonLondon: {\r\n legacy: 50,\r\n offset: '+00:00',\r\n // Edinburgh is missing in iana-tz-data, use GB for Edinburgh (Great British)\r\n // Europe/Dublin, GB, Europe/Lisbon and Europe/London have UTC offset +00:00/+01:00\r\n iana: ['GMT', 'Europe/Dublin', 'GB', 'Europe/Lisbon', 'Europe/London'],\r\n },\r\n GuadalajaraMexicoCityMonterrey: {\r\n legacy: 66,\r\n offset: '-06:00',\r\n // Guadalajara is missing in iana-tz-data, use Mexico/General for Guadalajara (Mexico)\r\n // All these iana time zones have UTC offset -06:00/-05:00\r\n iana: ['Mexico/General', 'America/Mexico_City', 'America/Monterrey'],\r\n },\r\n GuamPortMoresby: {\r\n legacy: 7,\r\n offset: '+10:00',\r\n iana: ['Pacific/Guam', 'Pacific/Port_Moresby'],\r\n },\r\n HararePretoria: {\r\n legacy: 40,\r\n offset: '+02:00',\r\n // Pretoria is missing in iana-tz-data, use Africa/Johannesburg for Pretoria (South Africa)\r\n iana: ['Africa/Harare', 'Africa/Johannesburg'],\r\n },\r\n Hawaii: {\r\n legacy: 73,\r\n offset: '-10:00',\r\n iana: ['US/Hawaii'],\r\n },\r\n HelsinkiKyivRigaSofiaTallinnVilnius: {\r\n legacy: 39,\r\n offset: '+02:00',\r\n // Kyiv is also translated as Kiev\r\n // All these iana time zones have UTC offset +02:00/+03:00\r\n iana: ['Europe/Helsinki', 'Europe/Kiev', 'Europe/Riga', 'Europe/Sofia', 'Europe/Tallinn', 'Europe/Vilnius'],\r\n },\r\n Hobart: {\r\n legacy: 6,\r\n offset: '+10:00',\r\n // Australia/Hobart has UTC offset +10:00/+11:00\r\n iana: ['Australia/Hobart'],\r\n },\r\n IndianaEast: {\r\n legacy: 63,\r\n offset: '-05:00',\r\n // US/East-Indiana has UTC offset -05:00/-04:00\r\n iana: ['US/East-Indiana'],\r\n },\r\n InternationalDateLineWest: {\r\n legacy: 75,\r\n offset: '-12:00',\r\n iana: ['Etc/GMT+12'],\r\n },\r\n IrkutskUlaanBataar: {\r\n legacy: 18,\r\n offset: '+08:00',\r\n iana: ['Asia/Irkutsk', 'Asia/Ulaanbaatar'],\r\n },\r\n IslandamabadKarachiTashkent: {\r\n legacy: 28,\r\n offset: '+05:00',\r\n // Islandamabad is misspelled Islamabad\r\n // Islamabad is missing in iana-tz-data, use Etc/GMT-5 for Islamabad (Pakistan)\r\n iana: ['Etc/GMT-5', 'Asia/Karachi', 'Asia/Tashkent'],\r\n },\r\n Jerusalem: {\r\n legacy: 38,\r\n offset: '+02:00',\r\n // Asia/Jerusalem has UTC offset +02:00/+03:00\r\n iana: ['Asia/Jerusalem'],\r\n },\r\n Kabul: {\r\n legacy: 30,\r\n offset: '+04:30',\r\n iana: ['Asia/Kabul'],\r\n },\r\n Kathmandu: {\r\n legacy: 26,\r\n offset: '+05:45',\r\n iana: ['Asia/Kathmandu'],\r\n },\r\n Krasnoyarsk: {\r\n legacy: 20,\r\n offset: '+07:00',\r\n iana: ['Asia/Krasnoyarsk'],\r\n },\r\n KualaLumpurSingapore: {\r\n legacy: 17,\r\n offset: '+08:00',\r\n iana: ['Asia/Kuala_Lumpur', 'Asia/Singapore'],\r\n },\r\n KuwaitRiyadh: {\r\n legacy: 36,\r\n offset: '+03:00',\r\n iana: ['Asia/Kuwait', 'Asia/Riyadh'],\r\n },\r\n MagadanSolomonIslandNewCaledonia: {\r\n legacy: 4,\r\n offset: '+11:00',\r\n // Solomon Islands is missing in iana-tz-data, use Pacific/Guadalcanal for Solomon Islands\r\n // New Caledonia is missing in iana-tz-data, use Pacific/Noumea for New Caledonia\r\n iana: ['Asia/Magadan', 'Pacific/Guadalcanal', 'Pacific/Noumea'],\r\n },\r\n MidAtlantic: {\r\n legacy: 53,\r\n offset: '-02:00',\r\n iana: ['America/Noronha'],\r\n },\r\n MidwayIslandand_Samoa: {\r\n legacy: 74,\r\n offset: '-11:00',\r\n iana: ['Pacific/Midway', 'Pacific/Samoa'],\r\n },\r\n MoscowStPetersburgVolgograd: {\r\n legacy: 35,\r\n offset: '+03:00',\r\n // Saint Petersburg is missing in iana-tz-data, use W-SU for Saint Petersburg (Russia)\r\n iana: ['Europe/Moscow', 'W-SU', 'Europe/Volgograd'],\r\n },\r\n MountainTime_US_Canada: {\r\n legacy: 70,\r\n offset: '-07:00',\r\n // Both these iana time zones have UTC offset -07:00/-06:00\r\n iana: ['US/Mountain', 'Canada/Mountain'],\r\n },\r\n Nairobi: {\r\n legacy: 34,\r\n offset: '+03:00',\r\n iana: ['Africa/Nairobi'],\r\n },\r\n Newfoundland: {\r\n legacy: 57,\r\n offset: '-03:30',\r\n // Canada/Newfoundland has UTC offset -03:30/-02:30\r\n iana: ['Canada/Newfoundland'],\r\n },\r\n None: {\r\n legacy: 0,\r\n offset: '+00:00',\r\n iana: ['UTC'],\r\n },\r\n Nukualofa: {\r\n legacy: 1,\r\n offset: '+13:00',\r\n // Nukuʻalofa is missing in iana-tz-data, use Pacific/Tongatapu for Nukuʻalofa (Tonga)\r\n // Pacific/Tongatapu has UTC offset +13:00/+14:00\r\n iana: ['Pacific/Tongatapu'],\r\n },\r\n OsakaSapporoTokyo: {\r\n legacy: 14,\r\n offset: '+09:00',\r\n // Japan uses same time zone in mainland\r\n iana: ['Japan'],\r\n },\r\n PacificTimeUSCanadaTijuana: {\r\n legacy: 71,\r\n offset: '-08:00',\r\n // All these iana time zones have UTC offset -08:00/-07:00\r\n iana: ['US/Pacific', 'Canada/Pacific', 'America/Tijuana'],\r\n },\r\n Perth: {\r\n legacy: 16,\r\n offset: '+08:00',\r\n iana: ['Australia/Perth'],\r\n },\r\n Rangoon: {\r\n legacy: 22,\r\n offset: '+06:30',\r\n iana: ['Asia/Rangoon'],\r\n },\r\n Santiago: {\r\n legacy: 60,\r\n offset: '-03:00',\r\n // Pacific/Tongatapu has UTC offset -04:00/-03:00\r\n iana: ['America/Santiago'],\r\n },\r\n SarajevoSkopjeWarsawZagreb: {\r\n legacy: 45,\r\n offset: '+01:00',\r\n // All these iana time zones have UTC offset +01:00/+02:00\r\n iana: ['Europe/Sarajevo', 'Europe/Skopje', 'Europe/Warsaw', 'Europe/Zagreb'],\r\n },\r\n Saskatchewan: {\r\n legacy: 67,\r\n offset: '-06:00',\r\n iana: ['Canada/Saskatchewan'],\r\n },\r\n Seoul: {\r\n legacy: 13,\r\n offset: '+09:00',\r\n iana: ['Asia/Seoul'],\r\n },\r\n SriJayawardenepura: {\r\n legacy: 23,\r\n offset: '+06:00',\r\n // Sri Jayawardenepura Kotte is missing in iana-tz-data\r\n // use Asia/Colombo for Sri Jayawardenepura Kotte (Sri Lanka)\r\n // Asia/Colombo has UTC offset +05:30/+05:30\r\n iana: ['Asia/Colombo'],\r\n },\r\n Taipei: {\r\n legacy: 15,\r\n offset: '+08:00',\r\n iana: ['Asia/Taipei'],\r\n },\r\n Tehran: {\r\n legacy: 33,\r\n offset: '+03:30',\r\n // Asia/Tehran has UTC offset +03:30/+04:30\r\n iana: ['Asia/Tehran'],\r\n },\r\n Vladivostok: {\r\n legacy: 5,\r\n offset: '+10:00',\r\n iana: ['Asia/Vladivostok'],\r\n },\r\n WestCentralAfrica: {\r\n legacy: 44,\r\n offset: '+01:00',\r\n // West Central Africa is missing in iana-tz-data, use Africa/Lagos for West Central Africa\r\n // see https://www.timeanddate.com/time/map/\r\n iana: ['Africa/Lagos'],\r\n },\r\n Yakutsk: {\r\n legacy: 12,\r\n offset: '+09:00',\r\n iana: ['Asia/Yakutsk'],\r\n },\r\n};\r\n","export * from './src/time-zone-converter';\r\n","/* eslint camelcase: 0 */\r\nimport _ from 'underscore';\r\nimport { get } from '@bingads-webui-universal/primitive-utilities';\r\nimport timeZoneMetadata from '../metadata';\r\n\r\n/**\r\n * Convert legacy Number type time zone (Enum value) to String type time zone (Enum name)\r\n * @param {Number} legacyTimeZone - the legacy time zone used in JS code\r\n * @returns {String} String type time zone\r\n */\r\nexport function fromLegacyTimeZone(legacyTimeZone) {\r\n return _.findKey(timeZoneMetadata, ({ legacy }) => legacy === legacyTimeZone);\r\n}\r\n\r\n/**\r\n * Convert String type time zone (Enum name) to legacy Number type time zone (Enum value)\r\n * @param {String} timeZone - the String type time zone\r\n * @returns {Number} Number type time zone\r\n */\r\nexport function toLegacyTimeZone(timeZone) {\r\n return get(timeZoneMetadata[timeZone], 'legacy');\r\n}\r\n\r\n/**\r\n * Convert String type time zone to IANA tz data time zone used in @bingads-webui/i18n-model\r\n * @param {String} timeZone - the String type time zone\r\n * @returns {String} String type time zone\r\n */\r\nexport function toIANATimeZone(timeZone) {\r\n // only return first IANA time zone, leave other ones for future usage\r\n return get(timeZoneMetadata[timeZone], 'iana[0]');\r\n}\r\n\r\n/**\r\n * Get String type time zone's UTC offset\r\n * This offset is defined by BingAdsApps, which doesn't consider Daylight Saving Time\r\n * @param {String} timeZone - the String type time zone\r\n * @returns {String} Readable UTC offset\r\n */\r\nexport function getUTCOffsetWithoutDST(timeZone) {\r\n return get(timeZoneMetadata[timeZone], 'offset');\r\n}\r\n\r\n/**\r\n * Get all supported time zones\r\n * @returns {String[]} all time zones\r\n */\r\nexport const allTimeZones = _.keys(timeZoneMetadata);\r\n"],"names":["window","_TL_","str","PluginScenarios","PluginScenarioTroubleshootingDetection","PluginFunctions","IntentType","AgentQueue","CATEGORY_TROUBLESHOOTING","TROUBLESHOOTING_AD_DELIVERY","EVENT_NAME_ENGAGE_TROUBLESHOOTER","EVENT_NAME_PLUGIN","EVENT_NAME_LIVE_AGENT_CHAT","isTypingMessage","activity","text","value","isTroubleshootingEvent","isEngageEvent","type","name","isAdDeliveryPluginEvent","pluginResult","Name","getIsFluctuationsFeature","features","Features","feature","GetAccountFluctuations","GetCampaignFluctuations","getIsAdvertiserAccountDetailsFeature","GetAdvertiserAccountDetails","shouldFeatureShowDisclaimer","featuresWithDisclaimer","activityFeatures","getDisclaimerString","AdsCopilotContext","undefined","useAdsCopilotContext","useContext","isActivityReplaceable","existingActivity","attachments","content","findExistingActivityIndex","finalActivities","username","from","botActivity","replyToId","i","length","currentActivity","id","AdsCopilotContextProvider","props","children","setDirectLine","useState","setSubscription","activities","setActivities","botServiceConfig","setBotServiceConfig","pilotMap","onPilotMapChange","logger","setLogger","isSendDisabled","setIsSendDisabled","onDirectLineCreated","useCallback","dl","newLogger","isCustomStream","prevSub","unsubscribe","activity$","filter","directLine","Array","isArray","isActivityRelevantToApp","subscribe","prevActivities","newActivities","existingActivityIndex","push","useMemo","onBotServiceConfigChange","onIsSendDisabledChange","Provider","ActivityRendererManager","defaultRenderer","renderers","params","isFromUser","Renderer","find","renderer","canRender","useDateSelectorStyles","dateSelector","display","label","lineHeight","tokens","lineHeightBase200","paddingTop","spacingVerticalSNudge","paddingBottom","fontWeight","fontWeightRegular","DateSelector","selectedStartDate","selectedEndDate","setSelectedStartDate","setSelectedEndDate","i18n","I18nContext","styles","onSelectDate","dateRange","endDate","startDate","className","Field","getString","size","dateRangePickerPresetMenuProps","presetDateRangeOptions","SUNDAY","today","last7Days","last30Days","thisMonth","lastMonth","last14Days","lastWeek","thisWeek","customDateRangeOption","isDefaultSelected","defaultCustomDateRangeSelection","onApply","_preset","_cdateRange","_comparePreset","dateRangePickerComparisonProps","comparisonBehavior","NONE","presetCompareOptions","localizedStrings","comparisonSectionLabel","customDateRangeSelectionLabel","dateRangePickerApplyButtonLabel","dateRangePickerCalendarProps","calendarProps","strings","months","shortMonths","days","shortDays","goToToday","prevMonthAriaLabel","nextMonthAriaLabel","prevYearAriaLabel","nextYearAriaLabel","closeButtonAriaLabel","isRequiredErrorMessage","invalidInputErrorMessage","useCampaignAndDateSelectorStyles","card","borderRadiusLarge","rowGap","spacingVerticalS","minWidth","width","marginTop","spacingVerticalM","CampaignAndDateSelector","getCampaigns","onSave","showCampaignSelector","showDateSelector","cardText","campaigns","setCampaigns","selectedCampaign","setSelectedCampaign","Date","getTime","disabled","setDisabled","errorMessage","setErrorMessage","handleApplyClick","e","onSelectCampaign","_event","data","optionValue","optionText","defaultCardText","resetCampaign","useEffect","then","Card","Text","SearchableSelector","entities","onSelectEntity","placeholder","ApplyButton","DEFAULT_GROUP_TIME","DirectLineContext","useLoadingStyles","adsCopilotLoading","animationDuration","animationIterationCount","Loading","memo","loadingText","Spinner","defaultProps","useStopGeneratingStyles","container","textAlign","StopGenerating","onClickStopGenerating","Button","appearance","icon","onClick","getOAuthCardResourceUri","contentType","tokenExchangeResource","uri","defaultFetchAllActivities","conversationId","token","url","headers","Authorization","res","useSSO","onReceiveActivity","authToken","fetchOAuthToken","fetchAllActivities","currentActivities","isAIMessage","resourceUri","conversation","dlToken","chain","result","connectionName","Promise","resolve","oAuthToken","postActivity","StreamingStatusType","InProgress","Completed","Cancelled","useStopTroubleshootingStyles","StopTroubleshooting","onClickStopTroubleshooting","IgnoreToggleTypes","useLoading","renderBottomComponent","isStopGeneratingEnabled","isStopTroubleshootingEnabled","loading","setLoading","troubleshooting","setTroubleshooting","postedMessageId","setPostedMessageId","userid","onReceiveActivityWithLoading","messageActivity","indexOf","shouldToggleLoading","StreamingStatus","shouldToggleTroubleShooting","troubleshootingValue","troubleshootingStatus","stopRespondingMessage","stopTroubleshootingMessage","isForceStopTroubleshooting","makeActivityGroups","groupTime","isTroubleshootingEnabled","isReportingInsightsEnabled","isTroubleshootingIntentionDetectionEnabled","filteredActivities","isReportingPlugin","isTroubleshootingIntentionPlugin","shouldDisplayInConversationThread","group","groupStartTime","timestamp","diff","Number","isNaN","key","useTimeStampStyles","root","fontSize","fontSizeBase200","color","colorNeutralForeground4","TimeStamp","time","formattedDate","date","locale","timeZone","Intl","DateTimeFormat","month","day","hour","minute","hour12","format","dateTimeFormatter","getLocale","useActivityGroupStyles","activityContainer","clear","ActivityGroup","renderActivity","firstActivityTime","firstNonWelcomeMessage","parsedTimestamp","map","useBaseMessageStyles","position","wordBreak","overflowWrap","marginBottom","backgroundColor","boxShadow","float","maxWidth","shadow2","actions","useOutputSidecarContentStyles","colorNeutralForeground1","OutputSidecarContent","BaseMessage","footer","action","OutputCard","mode","message","HumanMessage","pluginName","PluginContext","CopyIcon","bundleIcon","useCopyButtonStyles","copyBtn","colorNeutralForeground3","colorNeutralForeground2BrandSelected","hiddenA11yAnnounceArea","clip","height","margin","overflow","padding","border","COPY_BTN_TIP","COPIED_TIP","CopyButton","messageText","ariaHiddenWhileLoading","tooltipContent","setTooltipContent","copyMessage","navigator","clipboard","writeText","a11yAnnounceArea","document","getElementById","textContent","onVisibleChange","_evt","visible","Tooltip","relationship","tabIndex","ThumbLike","ThumbDislike","useFeedbackButtonsStyles","buttonIcon","button","FeedbackButtons","onFeedbackChange","currentFeedback","currentFeedbackFromParent","setCurrentFeedback","thumbsUpChecked","thumbsDownChecked","onPositiveClick","newFeedback","prevFeedback","onNegativeClick","thumbLikeIcon","thumbsDislikeIcon","ToggleButton","checked","AnchorInNewWindow","target","rel","useAIMessageStyles","flexDirection","spacingVerticalXS","footerContent","columnGap","spacingHorizontalS","alignItems","justifyContent","minHeight","spacingVerticalXXL","buttons","top","dataDisclaimerContainer","flexGrow","dataDisclaimerButton","paddingLeft","spacingHorizontalNone","paddingRight","fontSizeBase100","colorNeutralStrokeAccessible","marginLeft","spacingHorizontalXS","infoIcon","referenceGroup","reference","cursor","gridTemplateColumns","whiteSpace","textOverflow","AIMessage","showDataDisclaimer","showReferences","showFeedback","showCopyButton","isShowFeaturesInHint","onFeedbackButtonClick","onReferenceClick","Sources","onFeedbackButtonClickCb","referenceClick","source","Url","messageReactionAction","reactionsAdded","open","isInert","setIsInert","footerId","useId","shouldShowDisclaimer","disclaimerText","showFooter","finalFooter","withArrow","iconPosition","ReferenceGroup","ReferenceList","idx","inert","Reference","citation","media","index","detailsButton","Title","title","role","join","updateInertValueOnClick","learnMoreButton","getElementsByClassName","addEventListener","options","overrides","a","getActivityKey","isStaticMessage","useConversationThreadStyles","activityGroupContainer","spacingHorizontalXXS","bottom","defaultRenderActivity","ConversationThreadInternal","forwardRef","ref","isCopilotDegraded","onSuggestionClick","renderAction","renderChatSuggestionList","renderTopComponent","activityGroups","finalRenderActivity","actGroup","getActivitiesWithFeedback","targetActivity","act","getCurrentFeedback","newActivity","ConversationThread","originalOnReceiveActivity","onReceiveActivityEnd","onReceiveActivityStart","originalRenderBottomComponent","refreshId","useRef","activitiesRef","existingActivitiesRef","forceUpdate","activitySubscriber","setConversationId","sendFeedback","reactionsRemoved","current","subscribeTime","convId","timestampDate","isFromRestore","toString","concat","splice","AdsCopilotDirectLine","DirectLine","constructor","args","super","this","existingToken","userId","SessionManager","sessionInfoKey","onSaveSessionInfo","onGetSessionInfo","onClearSessionInfo","sessionInfo","saveSessionInfo","_info","reject","Error","getSessionInfo","clearSessionInfo","CookieSessionManager","domain","newInfo","JSON","stringify","samesite","secure","parse","defaultFetchDirectLineChannelToken","endpoint","tokenApi","isMarketingIntegrationEnabled","replace","UserId","UserName","getRequestConfig","useDirectLineTokenRestoration","sessionManager","fetchToken","onCopilotModeChange","onBeforeValidateToken","onTokenValidationSuccess","onTokenValidationFail","setToken","error","setError","isRestoringSession","fetchTokenFromBotMT","newToken","catch","validateTokenInCookie","oldToken","refreshToken","err","sInfo","isOpen","trace","forceRefreshToken","useConversationTokenStorage","refreshTime","onConnectionStatusChange","onInitDirectLine","refreshTokenIntervalRef","dlRef","saveTokenToCookie","visibilityState","clearIntervalAndEventHandler","clearInterval","removeEventListener","status","setInterval","userName","useConversationRestoration","useCookieSessionManager","useConversationRestorationWithCookie","conversationToken","newConversation","now","existingConversations","sessionStorage","getItem","some","setItem","DirectLineProvider","fetchDirectLineChannelToken","sesId","productName","DirectLineClass","renderErrorView","renderCustomErrorView","customStream","resetConversation","isChatHistoryEnabled","conversationTitle","onInitDirectLineRef","userIdRef","adsCopilotContext","initDirectLine","directLineInstance","userIdValue","userNameValue","oAuthTokenPromise","fetchedToken","fetchedUserId","connectionStatus$","ConnectionStatus","ExpiredToken","FailedToConnect","context","ChatInput","maxLength","inputDisabled","sendDisabled","onChange","postMessage","textAreaRef","focus","hotKeyHandler","evt","shiftKey","trim","sendButtonProps","onSubmit","Textarea","T","onKeyUp","showCount","characterCount","send","useChatSuggestionStyles","suggestionList","spacingVerticalL","suggestion","colorTransparentBackground","ChatSuggestionList","chatSuggestions","onClickChatSuggestion","chatSuggestion","SuggestionList","Suggestion","Id","useConversationsListStyles","provider","wrapper","colorNeutralBackground2","borderLeftWidth","borderLeftStyle","borderLeftColor","colorNeutralStroke1","spacingHorizontalL","marginRight","header","fontSizeBase300","spacingHorizontalM","colorNeutralBackground1Hover","colorNeutralForeground2","ConversationsList","conversationsList","propConversationsList","onClose","onResetConversation","sessionData","toLocaleString","useConverstationContainerStyles","flex","overflowX","overflowY","scrollBehavior","contentContainer","justifySelf","AutoScroller","autoScrollContainerRef","style","containerRef","observer","containerEl","autoScrollContainer","MutationObserver","mutationList","isScrollbarVisible","scrollHeight","offsetHeight","classList","toggle","autoScrollContainerBoundary","getBoundingClientRect","mutation","childBoundary","scrollTo","behavior","observe","childList","subtree","disconnect","useLoadingIntentStyles","loadingIntentContent","loadingIntentText","LoadingIntent","attachment","useStaticMessageStyles","startOver","spacingVerticalXXS","zIndex","COMMON_ERR_MSG","COMMON_ERR","showStartOverBtn","msg","DEFAULT_DISPLAY_CONFIG","ResponsibleAI","OutofScope","Welcome","TokenExpiredAutoReload","ConnectToAgent","SignInError","InternalError","LargePayload","MissingArgumentsInPayload","StreamingCancelled","EmptyReplyToIdToCancelStreaming","NoDataAvailable","StreamingCompleted","TurnLimitReached","TokenExpired","ConversationExpired","Timeout","HandoffMessage","ConversationResume","InvalidPayload","SydneyResponsibleAI","IgnoredStaticMessageTypes","StaticMessage","onClickStartOver","isWelcomeMessageEnabled","staticMessageType","config","activityWithText","m","pointPlaceholder","onClickHandler","startOverBtn","errorMessageTypes","useStaticMessage","defaultRenderStaticMessageActivity","next","extractChatSuggestionsFromActivity","QuestionSuggestions","useChatSuggestions","handleChatSuggestionClick","isChatSuggestionsEnabled","setChatSuggestions","onReceiveActivityWithChatSuggestions","suggestions","shouldUpdateChatSuggestions","useAdsCopilotStyles","alignSelf","left","right","createMessage","category","isHiddenFromUser","additionalOptions","additionalContext","isTroubleshooting","accountId","botFlightMode","ccSmallToken","customerId","ianaTimeZone","v","QuestionId","Locale","toLowerCase","Product","Timezone","BotFlightMode","UxContext","CustomerId","AccountId","AUTH_CCSmallToken","AdditionalContext","createMessageValue","promptText","promptType","usePostMessage","onSendActivity","onSendActivityError","userMesIdRef","messageOptions","trimEnd","useAdsCopilotLogger","useCopilotErrorStyles","spacingVerticalMNudge","colorPaletteCranberryBackground2","borderRadius","borderRadiusMedium","copilotErrorContent","spacingHorizontalSNudge","buttonWrapper","fontWeightBold","errorTitle","errorText","CopilotError","onRefresh","tryAgainButtonText","showTryAgainButton","primaryFill","DirectLineErrorView","isTokenExpiredAutoReloadEnabled","onAutoReloading","useI18nContext","isTokenExpired","isAutoReloading","setIsAutoReloading","onTryAgainButtonClick","useErrorViewStyles","errorWrapper","GlobalErrorView","theme","FluentProvider","applyStylesToPortals","I18nProvider","Header","usePromptBarStyles","promptBarContainer","PromptBar","onViewPromptClick","AdsCopilotInternal","renderHeaderComponent","renderFooterComponent","onSupportClick","showPreviewTag","showSupportButton","maxInputLength","headerContent","showViewPrompt","isUxImprovementsEnabled","isUxImprovementsEnabledProp","onChatSuggestionClick","onChangeChatInput","onAIDegrade","showHeader","shouldDisableInput","onStartOverClick","setSesId","finalOnInitDirectLine","refreshSesId","prev","useSesId","chatInputValue","setChatInputValue","showChatHistory","setShowChatHistory","activeConversation","handleChatHistoryClick","handleChatHistoryClose","handleChatHistoryResetConversation","onClickStartOverWithResetConversation","setSendDisabled","setInputDisabled","blockingErrorMessageTypes","item","handleSendDisabledChange","isBotMessage","isStreamingOrGenerating","useInputDisabled","onChangeChatInputInternal","_ev","handleChatInputPostMessage","handleConversationThreadSuggestionClick","renderDirectLineErrorView","onChatHistoryClick","AdsCopilotBase","bingAdsI18n","currencyCode","AdsCopilot","enableResizer","resizerProps","CopilotResizer","DEFAULT_LOCALE","ADAPTIVE_CARDS_DEFAULT_STYLE_OPTIONS","adaptiveCardsParserMaxVersion","cardEmphasisBackgroundColor","cardPushButtonBackgroundColor","cardPushButtonTextColor","richCardWrapTitle","AdaptiveCardRenderer","onMount","rootNode","renderedCard","render","child","firstChild","removeChild","appendChild","addCardAction","cardAction","includesOAuthButtons","SubmitAction","__isBotFrameworkCardAction","OpenUrlAction","AdaptiveCardBuilder","adaptiveCards","styleOptions","direction","AdaptiveCard","Container","rtl","addItem","addColumnSet","sizes","selectAction","columnSet","ColumnSet","column","Column","SizeAndUnit","SizeUnit","Weight","addColumn","addItems","cardElements","forEach","cardElement","addTextBlock","template","textblock","TextBlock","addButtons","cardActions","addAction","addCommonHeaders","TextColor","Default","TextSize","Medium","weight","TextWeight","Bolder","wrap","subtitle","isSubtle","addCommon","addImage","altText","finalContainer","image","Image","Size","Stretch","BotFrameworkOAuthCard","onExecuteAction","popup","location","href","aitem","dir","builder","hostConfig","querySelector","usePreparingViewStyles","loadingWrapper","chatInputWrapper","PreparingView","chatInputPlaceholder","OcvFeedbackType","FeedbackAgeGroup","InAppFeedbackQuestionUiType","InAppFeedbackScenarioType","InAppFeedbackQuestionUiBehaviour","FeedbackAuthenticationType","FeedbackPolicyValue","FeedbackScreenshotInfoImageFormat","FeedbackScreenshotSourceType","FeedbackUiType","FeedbackHostPlatformType","OCV_MICROSOFT_APP_ID","OCV_MICROSOFT_CLIENT_NAME","defaultThumbUpFeedbackOptions","ageGroup","Adult","authenticationType","AAD","feedbackConfig","complianceChecks","connectedExperiences","Enabled","policyAllowContact","policyAllowContent","policyAllowFeedback","policyAllowScreenshot","policyAllowSurvey","feedbackUiType","Modal","initialFeedbackType","Smile","hostPlatform","Web","isDisplayed","isEmailCollectionEnabled","isFeedbackForumEnabled","isFileUploadEnabled","isMyFeedbackEnabled","isScreenshotEnabled","isScreenRecordingEnabled","isShareContextDataEnabled","isThankYouPageDisabled","maxHeight","scenarioConfig","isScenarioEnabled","scenarioType","AIThumbsUp","themeOptions","baseTheme","isProduction","appId","clientName","defaultThumbDownFeedbackOptions","Frown","AIThumbsDown","defaultProductFeedbackOptions","Idea","Custom","questionDetails","questionUiType","SingleSelect","questionInstruction","displayedString","displayedStringInEnglish","questionOptions","questionUiBehaviour","CommentRequiredWithLastOption","useAdsCopilotPilotMap","useAdsCopilotIsSendDisabled","CentroUrl","InAppFeedbackInitOptionsListener","feedbackData","listeners","register","listener","unregister","updateFeedbackObject","updatedInAppFeedbackInitOptions","Object","assign","feedbackInfo","OcvInAppFeedback","hostName","language","inAppFeedbackRef","centroParams","centroEnvironmentBaseUrl","centroAdapters","runtimeStaticConfig","perfPrefix","request","centroHvcData","forHostVersion","hvcVersion","console","featureName","bootstrapper","setAdditionalDataSource","sd","main","hvcDiv","createElement","body","getDivToMountHvc","log","getHostName","thumbDownFeedbackOptions","thumbUpFeedbackOptions","productFeedbackOptions","ocvInited","useOcvFeedback","initializeInAppFeedback","updateFeedbackOptions","onProductFeedbackClick","factory","self","__WEBPACK_EXTERNAL_MODULE__3__","__WEBPACK_EXTERNAL_MODULE__4__","__WEBPACK_EXTERNAL_MODULE__5__","installedModules","moduleId","exports","module","l","modules","call","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","t","__esModule","ns","create","bind","n","object","property","prototype","hasOwnProperty","p","s","activeListeners","flushEventAttached","AriaListener","Listener","_","defaults","flushInterval","defaultConfig","batchSize","enableSessionTracking","formatters","filters","logTableNames","defaultLogCategory","init","tenantToken","initialized","logs","AWTLogManager","initialize","setTransmitProfile","AWT_NEAR_REAL_TIME","defaultLogger","getLogger","logSession","AWTSessionState","Started","trackedListenerRefs","count","flushBatch","flushLogs","flush","registerForTeardown","registeredForTeardown","teardown","flushAll","Ended","release","batchLogs","logsToFlush","each","logEvent","flushAndTeardown","write","logMessage","filterLogs","categoryName","getCategoryName","logCategory","formattedMsg","formatLogs","properties","has","propertyFormatter","AriaPropertyFormatter","Formatter","mapObject","val","WorkerBlob","URL","createObjectURL","Blob","onmessage","checkFrequency","autoRefreshTokenMaxCountInternal","sessionId","lastRefreshTimestamp","autoRefreshTokenCounter","xhr","XMLHttpRequest","setRequestHeader","onreadystatechange","readyState","responseText","currentTime","Math","abs","AutoRefreshToken","serverContext","setNewServerContext","PageContext","appActivity","http","autoRefreshTaskWorker","checkFrequencyInMinutes","origin","search","Worker","start","Token","currentAutoRefreshTokenCount","newSmallToken","pageContext","set","campaignODataConfigs","updateContexts","stop","on","terminate","refresh","autoRefreshTokenInstance","__WEBPACK_EXTERNAL_MODULE__43__","__WEBPACK_EXTERNAL_MODULE__44__","__WEBPACK_EXTERNAL_MODULE__17__","contentView","positioningMethod","positioningOptions","classes","anchor","resolveOnceRendered","positioningClass","getPositionAutomatically","view","getPopupPosition","$el","isAbsolute","resolveCallback","containerClassName","currentPopup","PopoverView","setContent","addClass","off","remove","once","append","el","__WEBPACK_EXTERNAL_MODULE__48__","popupContainer","popupDimensions","getDimensions","css","hide","PositioningMethod","fixed","getFixedPosition","fit","getFittingPosition","getPositioningMethod","show","offsetPositions","element","$element","outerWidth","outerHeight","getOffsetWithBorderOffsets","offset","leftBorderOffset","parseFloat","topBorderOffset","getBorderOffsets","getParentOffset","anchorPosition","containerOffsetParent","contains","offsetParent","getContainerOffsetElement","anchorOffsetParent","isEmpty","leftOffset","topOffset","containerOffsetParentPosition","anchorOffsetParentPosition","testFit","containerDimensions","elementDimentions","adjustedPosition","verticalFit","max","min","horizontalFit","areaFit","positionOptions","elementHeight","elementWidth","getBoundingRect","offsetLeft","offsetTop","FixedPositionLocation","bottomLeftCorner","topRightCorner","topLeftCorner","bottomRightCorner","bottomLeft","topRight","topLeft","bottomRight","positions","threshold","parentOffset","fittingPosition","pick","freeze","AssetLibraryIcon","React","PureComponent","viewBox","fill","xmlns","cx","cy","fillRule","clipRule","fillOpacity","x1","y1","x2","y2","gradientUnits","stopColor","stopOpacity","palette","iconFontFamily","neutralPrimary","fontFamily","neutralSecondary","white","themePrimary","outline","neutralSecondaryAlt","outlineOffset","btnInteractStyle","background","neutralLighter","neutralLight","primary","boxSizing","themeDarkAlt","themeDark","neutralTertiary","backgroundImage","transition","borderColor","focusedStyle","neutralDark","order","themeLighter","borderWidth","borderBottomColor","commands","floatButton","neutralQuaternaryAlt","listStyleType","red","verticalAlign","outlineColor","black","textDecoration","borderBottom","inputGroup","input","borderTop","borderLeft","borderRight","fontStyle","redOrange10","green","boxsizing","borderStyle","elementLocator","isGreyBackground","themeDarker","borderRightColor","themeLight","borderTopColor","animation","to","transform","ZIndexShellComponents","Loader","getBlockerStyle","spinnerKeyframe","_HelpContainer","_BootstrapPopover","_BootstrapModal","_BootstrapModalBackdrop","ModalBackDrop","Panel","TopBanner","PromotionBanner","Nav","Status","Menu","Tab","SubTab","Content","GridToolbar","GridHeader","StatusPopup","mainSectionLeftPadding","smallMainSectionLeftPadding","underlineLinkStyle","internalLinkStyle","listStyle","borderRightWidth","opacity","M","W","fallbacks","userSelect","fontColor","getNewFeatureLabelStyle","letterSpacing","writingMode","orange","visibility","GridSharedStyles","getSharedBodyStyles","getSharedColGroupStyles","getSharedColumnsStyles","getSharedFooterStyles","getSharedGlobalStyles","getSharedHeaderStyles","getSharedTableStyles","variables","components","totalRowBackgroundColor","tableBorder","gridPaddingLeft","PagePadding","gridPaddingComponsation","totalRowBorderTop","headerRowBorderTop","headerRowBorderBottom","headerRowBackgroundColor","ThemeFluent","createTheme","NeutralColors","gray190","gray160","neutralPrimaryAlt","gray150","gray130","gray110","gray90","neutralTertiaryAlt","gray60","neutralQuaternary","gray50","gray40","gray30","gray20","neutralLighterAlt","gray10","CommunicationColors","shade20","shade30","shade10","tint20","tint30","themeLighterAlt","tint40","themeSecondary","tint10","themeTertiary","SharedColors","red10","redDark","red20","globalBackground","mainMenuHoverBackground","effects","roundedCorner2","elevation4","Depths","depth4","elevation8","depth8","elevation16","depth16","elevation64","depth64","__WEBPACK_EXTERNAL_MODULE__49__","DarkTheme","wrapKeyDownEvent","availablekeys","handler","keyCode","submitEvent","KEY_CODES","Enter","Space","__WEBPACK_EXTERNAL_MODULE__14__","idWithOrWithoutPrefix","isString","last","String","split","ODATA_PREFIX","customColumnGridKeyFromId","generateSafeGuid","customColumn","strict","requiredKey","CustomColumnExpression","expression","compact","OutputFormat","MCCCUSTOMCOLUMNGRID","MCCPREFERENCENAME","SINGLEACCOUNTPREFERENCENAME","customColumnId","startsWith","generateGuid","__WEBPACK_EXTERNAL_MODULE__18__","localeManager","LocaleManager","dynamicLocaleInstances","assertReady","isReady","debugInfo","synchronousResource","p$data","resource","synchronousGlobalize","globalize","isThenable","isFunction","loadData","translationData","loadTranslationData","cldrData","loadCLDRData","Resource","failFast","cldr","Globalize","dateMethodOptions","skeleton","datetime","raw","Boolean","withSignWrapper","withSign","method","getCldr","minusSign","plusSign","RangeError","numberFormatterWithSign","globalizeFormatter","numberFormatter","currencyFormatterWithSign","currency","currencyFormatter","currencyFormatterWithSymbol","currencyToPartsFormatter","parts","part","I18nModel","defaultFailFast","missingKeys","parserFormatterCache","fnName","i18nModel","realMethod","createCache","cache","specificMethodCache","apply","withGlobalizeCache","p$globalLocale","isFulfilled","globalLocale","setLocale","setGlobalLocale","all","instance","load","loadTimeZone","failfast","ready","return","alt","defaultRegionKey","attributes","region","supplemental","formatDateToParts","year","second","isUndefined","defer","quarter","dayOfWeek","getDay","defaultSymbolKey","calendar","defaultProperties","default","dateTimeFormats","availableFormats","yMd","dateFormats","dateTime","timeFormats","number","decimalFormatter","minimumIntegerDigits","minimumFractionDigits","maximumFractionDigits","minimumSignificantDigits","maximumSignificantDigits","round","useGrouping","decimalToFixedFormatter","digits","decimalToIntegerFormatter","decimalParser","numberParser","decimalValidator","parser","percentFormatter","percentToFixedFormatter","percentParser","percentValidator","withSymbol","omit","dateFormatter","dateToPartsFormatter","dateParser","dateValidator","isNull","civilDate","civilDateFormatter","civilDateParser","isDate","getUTCFullYear","getUTCMonth","getUTCDate","toISOString","substr","unit","unitFormatter","form","list","listFormatter","variant","cldrTypeName","listPattern","pattern","first","twoTemplate","middleTemplate","middle","startTemplate","endTemplate","end","rest","reduce","initial","p$global","resolveGlobalLocale","isObject","model","preprocess","identity","ret","putil","ex","curlyTemplate","compiled","DataStore","cacheManager","JSDataCacheManager","store","cacheOptions","JSData","DS","__WEBPACK_EXTERNAL_MODULE__13__","decorateAdapter","adapter","adapters","methodWrapper","extend","monitorAdapter","parameters","eventParams","notify","isSuccess","invalidateStrategies","matchStrategies","partitionStrategies","PartitionStrategy","TimeAwareCache","union","BUILTIN_ACTIONS","clientCacheManager","ClientCacheManager","StandardMatchStrategy","serverCacheManager","ServerCacheManager","strategy","initializeCacheManager","registerAdapter","keys","partial","monitorAdapters","decorator","decoratedAdapter","selectedAdapter","compose","definition","scope","resultKey","query","getResult","setResult","ttl","delResult","getCacheHint","setCacheHint","hint","delCacheHint","cacheResult","callback","match","del","isTriggeredFromOutside","invalidate","Subject","__WEBPACK_EXTERNAL_MODULE__15__","__WEBPACK_EXTERNAL_MODULE__16__","MatchStrategy","condition","constant","BaseCacheManager","cacheIndex","ResourceCacheIndex","keyStr","deserializeKey","storageCacheFor","serializeKey","entry","keyToReplace","__WEBPACK_EXTERNAL_MODULE__24__","CacheIndex","add","indices","InvalidateStrategy","CONTEXT_KEY","CascadeInvalidateStrategy","dependants","isCascaded","dependant","WriteActionInvalidateStrategy","writeActions","BUILTIN_WRITE_ACTIONS","SubscriptionObserver","noop","complete","subscription","closed","Subscription","subscriber","unsubscribeCallback","isClosed","toPromise","promisifyObservable","observable","makeCall","state","setData","observers","CallObservable","Observable","fetch","afterSubscribe","afterUnsubscribe","hardResetCacheData","delete","Set","hasObservers","invoke","iteratee","currentSum","arr","merge","dest","src","destKey","path","defaultValue","sub","keyPath","castPath","lastIndex","nested","funcs","reverse","clone","Map","array","comparator","obj","uniq","every","sourceCopyMap","templateString","settings","distinguishWideChar","displayLength","noMatch","escape","evaluate","interpolate","wideCharPattern","RegExp","IsControlRegex","test","s4","floor","random","substring","minDate","maxDate","selectedDate","selected","withoutTime","errors","lookBackMonths","isValidDate","lastNDate","firstDateNMonthsAgo","lookBackYears","getFullYear","getMonth","getDate","toJSON","performance","timing","navigationStart","firstRange","secondRange","convertForComparison","range","dates","compared","comparedStart","comparedEnd","convertDateBetweenTimeZones","returnDate","valueOf","setHours","lookBackDays","dateString","formatDate","parseDate","img","blob","dataURItoBlob","postfix","File","lastModified","dataURI","reg","arrs","byteString","atob","Uint8Array","charCodeAt","lastPromise","promiseFactory","finish","cancel","fail","lastPromiseCanceled","finishProcess","promise","factoryArgs","currentPromise","promiseChain","callbacks","queueNextWork","AsyncStatus","SUCCESS","ERROR","onSuccess","onError","onCancel","CANCELLED","cleanup","shift","dequeuePromise","asyncToken","cancelCallback","colorToGrayscale","rgbInteger","rgb","blue","numberToRgb","parseInt","integer","isNumber","dividend","code","remain","slice","func","memoized","resolveFromCache","Cache","lruTrigger","toCache","nestedCache","enum","enumType","enumItem","capitalize","enumDescription","valueOrUndefined","valueDescription","CivilDate","date1","date2","isDateInvalid","compareCivilDate","compareCivilMonth","getCivilDateFromDate","includeToday","withDateChecker","getCivilDateDayOfWeek","plus","isRangeValid","isDateAvailable","t2","t1","range1","range2","start1","start2","end1","end2","MAX_VALUE","MIN_VALUE","maxCivilDate","minCivilDate","isCivilDateInRange","__WEBPACK_EXTERNAL_MODULE__91__","RANGES","Yesterday","Last7Days","Today","Last30Days","Last14Days","ThisWeek","ThisWeekMon","LastWeek","ThisMonth","LastMonth","Last3Months","Last6Months","LastWeekMon","ThisYear","LastYear","EntireTimeLast18Months","EntireTimeLast5Years","EntireTime","todayObj","getToday","yesterday","thisSunday","thisMonday","getThisMonday","last7day","last14day","last30day","lastMonday","lastSunday","lastSaturday","thisMonthFirstDay","getCivilDateMonthStart","lastMonthlastDay","lastMonthFirstDay","minSupportDay","years","rangeId","ComparedType","LastPeriod","ComparedOptions","textToExport","keyToExport","specificRangeId","getLastMonth","difference","lastMonthDate","formatCivilDate","dateFormat","getDateObj","parseCivilDate","dateObj","legacyTimeZone","toIANATimeZone","fromLegacyTimeZone","dateFromDatePicker","lcid","formattedStart","selectedComparedRange","formattedEnd","comparedOption","RangeStartDate","selectedRange","RangeEndDate","RangeId","rangeType","Rangelcid","RangeIndex","rangeIndex","RangeDays","rangeDays","dateData","__WEBPACK_EXTERNAL_MODULE__95__","initializeCache","insertLRURecord","record","promoteLRURecord","lru","records","pseudoRecord","removeLRURecord","adjustHeap","indexParent","recordParent","exp","indexL","indexR","recordL","recordR","indexChild","recordChild","LRUReplacementStrategy","ReplacementStrategy","limit","DEFAULT_LIMIT","validateLimit","recordLLT","onGet","onSet","onDel","EXP_INVALIDATED","validateTTL","validateKey","stubEntry","Infinity","defaultStrategy","entries","validateValue","entryNew","purge","UnlimitedReplacementStrategy","AbuDhabiMuscat","legacy","iana","Adelaide","Alaska","Almaty_Novosibirsk","AmsterdamBerlinBernRomeStockholmVienna","Arizona","AstanaDhaka","AthensIslandanbulMinsk","AtlanticTimeCanada","AucklandWellington","Azores","Baghdad","BakuTbilisiYerevan","BangkokHanoiJakarta","BeijingChongqingHongKongUrumqi","BelgradeBratislavaBudapestLjubljanaPrague","BogotaLimaQuito","Brasilia","Brisbane","BrusselsCopenhagenMadridParis","Bucharest","BuenosAiresGeorgetown","Cairo","CanberraMelbourneSydney","CapeVerdeIsland","CaracasLaPaz","CasablancaMonrovia","CentralAmerica","CentralTimeUSCanada","ChennaiKolkataMumbaiNewDelhi","ChihuahuaLaPazMazatlan","Darwin","EasternTimeUSCanada","Ekaterinburg","FijiKamchatkaMarshallIsland","Greenland","GreenwichMeanTimeDublinEdinburghLisbonLondon","GuadalajaraMexicoCityMonterrey","GuamPortMoresby","HararePretoria","Hawaii","HelsinkiKyivRigaSofiaTallinnVilnius","Hobart","IndianaEast","InternationalDateLineWest","IrkutskUlaanBataar","IslandamabadKarachiTashkent","Jerusalem","Kabul","Kathmandu","Krasnoyarsk","KualaLumpurSingapore","KuwaitRiyadh","MagadanSolomonIslandNewCaledonia","MidAtlantic","MidwayIslandand_Samoa","MoscowStPetersburgVolgograd","MountainTime_US_Canada","Nairobi","Newfoundland","None","Nukualofa","OsakaSapporoTokyo","PacificTimeUSCanadaTijuana","Perth","Rangoon","Santiago","SarajevoSkopjeWarsawZagreb","Saskatchewan","Seoul","SriJayawardenepura","Taipei","Tehran","Vladivostok","WestCentralAfrica","Yakutsk","findKey","timeZoneMetadata","allTimeZones"],"sourceRoot":""}