{"version":3,"file":"static/js/application.initial~b04cfc1b.8e2882ae.js","mappings":"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","sources":["../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.45/node_modules/@bingads-webui/ads-copilot-ui/src/global.ts","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.45/node_modules/@bingads-webui/ads-copilot-ui/src/utils.ts","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.45/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.45/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.45/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.45/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.45/node_modules/@bingads-webui/ads-copilot-ui/src/activity-renderer-manager.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.45/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.45/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.45/node_modules/@bingads-webui/ads-copilot-ui/src/components/conversation-thread/constants.ts","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.45/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.45/node_modules/@bingads-webui/ads-copilot-ui/src/Loading.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.45/node_modules/@bingads-webui/ads-copilot-ui/src/StopGenerating.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.45/node_modules/@bingads-webui/ads-copilot-ui/src/hooks/useSSO.ts","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.45/node_modules/@bingads-webui/ads-copilot-ui/src/botTypes.ts","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.45/node_modules/@bingads-webui/ads-copilot-ui/src/StopTroubleshooting.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.45/node_modules/@bingads-webui/ads-copilot-ui/src/hooks/useLoading.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.45/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.45/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.45/node_modules/@bingads-webui/ads-copilot-ui/src/TimeStamp.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.45/node_modules/@bingads-webui/ads-copilot-ui/src/ActivityGroup.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.45/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.45/node_modules/@bingads-webui/ads-copilot-ui/src/components/message/base-message.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.45/node_modules/@bingads-webui/ads-copilot-ui/src/components/message/human-message.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.45/node_modules/@bingads-webui/ads-copilot-ui/src/CopyButton.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.45/node_modules/@bingads-webui/ads-copilot-ui/src/FeedbackButtons.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.45/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.45/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.45/node_modules/@bingads-webui/ads-copilot-ui/src/components/message/ai-message.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.45/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.45/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.45/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.45/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.45/node_modules/@bingads-webui/ads-copilot-ui/src/components/conversation-thread/conversation-thread.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.45/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.45/node_modules/@bingads-webui/ads-copilot-ui/src/hooks/SessionManager.ts","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.45/node_modules/@bingads-webui/ads-copilot-ui/src/hooks/use-conversation-restoration.ts","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.45/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.45/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.45/node_modules/@bingads-webui/ads-copilot-ui/src/ChatInput.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.45/node_modules/@bingads-webui/ads-copilot-ui/src/ChatSuggestionList.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.45/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.45/node_modules/@bingads-webui/ads-copilot-ui/src/components/conversation-list/conversations-list.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.45/node_modules/@bingads-webui/ads-copilot-ui/src/AutoScroller.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.45/node_modules/@bingads-webui/ads-copilot-ui/src/LoadingIntent.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.45/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.45/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.45/node_modules/@bingads-webui/ads-copilot-ui/src/components/static-message/static-message.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.45/node_modules/@bingads-webui/ads-copilot-ui/src/hooks/useStaticMessage.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.45/node_modules/@bingads-webui/ads-copilot-ui/src/hooks/useChatSuggestions.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.45/node_modules/@bingads-webui/ads-copilot-ui/src/hooks/useAdsCopilotStyles.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.45/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.45/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.45/node_modules/@bingads-webui/ads-copilot-ui/src/hooks/use-ads-copilot-logger.ts","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.45/node_modules/@bingads-webui/ads-copilot-ui/src/ErrorView.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.45/node_modules/@bingads-webui/ads-copilot-ui/src/PromptBar.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.45/node_modules/@bingads-webui/ads-copilot-ui/src/AdsCopilot.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.45/node_modules/@bingads-webui/ads-copilot-ui/src/hooks/useSesId.ts","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.45/node_modules/@bingads-webui/ads-copilot-ui/src/hooks/useInputDisabled.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.45/node_modules/@bingads-webui/ads-copilot-ui/src/AdaptiveCardRenderer.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.45/node_modules/@bingads-webui/ads-copilot-ui/src/BotFrameworkAdaptiveCardBuilder.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.45/node_modules/@bingads-webui/ads-copilot-ui/src/BotFrameworkOAuthCard.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.45/node_modules/@bingads-webui/ads-copilot-ui/src/PreparingView.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.45/node_modules/@bingads-webui/ads-copilot-ui/src/hooks/FeedbackTypes.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.45/node_modules/@bingads-webui/ads-copilot-ui/src/hooks/DefaultFeedbackOptions.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.45/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.45/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.45/node_modules/@bingads-webui/ads-copilot-ui/src/hooks/CentroFeedbackFunctions.tsx","../../../../node_modules/.pnpm/@bingads-webui+ads-copilot-ui@1.4.45/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 SignUpLink = 'SignUpLink',\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, shorthands, 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 '& table': {\r\n borderCollapse: 'collapse',\r\n width: '100%',\r\n marginTop: tokens.spacingVerticalS,\r\n marginBottom: tokens.spacingVerticalS,\r\n ...shorthands.border(tokens.strokeWidthThin, 'solid', 'black'),\r\n '& th, & td': {\r\n textAlign: 'right',\r\n ...shorthands.padding(tokens.spacingVerticalS, tokens.spacingHorizontalS),\r\n ...shorthands.border(tokens.strokeWidthThin, 'solid', 'black'),\r\n },\r\n '& th': {\r\n textAlign: 'center',\r\n backgroundColor: '#d5d5d5',\r\n fontWeight: 'bold',\r\n },\r\n '& tr:nth-child(even)': {\r\n backgroundColor: '#d5d5d5',\r\n },\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 'js-cookie';\r\n\r\nexport type EventType = 'message' | 'action';\r\n\r\nexport interface ICustomizedEvent {\r\n eventType: EventType;\r\n eventData: any;\r\n eventSource?: string;\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 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.remove(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 {\r\n useStructuredLog,\r\n dispatchStructuredLogMessageEvent,\r\n dispatchStructuredLogUserEngagementEvent,\r\n} from '@bingads-webui-react/copilot-logger';\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 locale,\r\n } = props;\r\n const autoScrollContainerRef = useRef(null);\r\n const resetConversation = React.useRef(false);\r\n const conversationIdRef = useRef('');\r\n\r\n /* Registers event listeners for structured log */\r\n useStructuredLog({\r\n log: (data) => {\r\n logger?.trace(`[Structured log] ${JSON.stringify(data)}`);\r\n },\r\n error: (data, errors) => {\r\n logger?.error(`[Structured log] ${JSON.stringify({ ...data, errors })}`);\r\n },\r\n });\r\n\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\r\n /* Stores the conversationId for structured log when live chat is not enabled.\r\n This will be used to override the conversationId in structured log during live chat. */\r\n if (!customStream) {\r\n conversationIdRef.current = activity.conversation?.id!;\r\n }\r\n\r\n dispatchStructuredLogMessageEvent({\r\n activity,\r\n botServiceConfig,\r\n locale: locale as string,\r\n options: {\r\n copilotConversationId: conversationIdRef.current,\r\n },\r\n });\r\n dispatchStructuredLogUserEngagementEvent({\r\n activity,\r\n botServiceConfig,\r\n locale: locale as string,\r\n });\r\n }, [onAIDegrade, postMessage, botServiceConfig, customStream, locale]);\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","axios","get","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","borderCollapse","border","strokeWidthThin","padding","spacingHorizontalS","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","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","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","secure","parse","defaultFetchDirectLineChannelToken","endpoint","tokenApi","isMarketingIntegrationEnabled","replace","post","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","conversationIdRef","useStructuredLog","log","errors","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","dispatchStructuredLogMessageEvent","copilotConversationId","dispatchStructuredLogUserEngagementEvent","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","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","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","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":""}