contains a `defaultMessage` prop.\n resolvedConfig.locale = resolvedConfig.defaultLocale || 'en';\n }\n else if (!Intl.NumberFormat.supportedLocalesOf(locale).length && onError) {\n onError(new MissingDataError(\"Missing locale data for locale: \\\"\".concat(locale, \"\\\" in Intl.NumberFormat. Using default locale: \\\"\").concat(defaultLocale, \"\\\" as fallback. See https://formatjs.io/docs/react-intl#runtime-requirements for more details\")));\n }\n else if (!Intl.DateTimeFormat.supportedLocalesOf(locale).length &&\n onError) {\n onError(new MissingDataError(\"Missing locale data for locale: \\\"\".concat(locale, \"\\\" in Intl.DateTimeFormat. Using default locale: \\\"\").concat(defaultLocale, \"\\\" as fallback. See https://formatjs.io/docs/react-intl#runtime-requirements for more details\")));\n }\n verifyConfigMessages(resolvedConfig);\n return __assign(__assign({}, resolvedConfig), { formatters: formatters, formatNumber: formatNumber.bind(null, resolvedConfig, formatters.getNumberFormat), formatNumberToParts: formatNumberToParts.bind(null, resolvedConfig, formatters.getNumberFormat), formatRelativeTime: formatRelativeTime.bind(null, resolvedConfig, formatters.getRelativeTimeFormat), formatDate: formatDate.bind(null, resolvedConfig, formatters.getDateTimeFormat), formatDateToParts: formatDateToParts.bind(null, resolvedConfig, formatters.getDateTimeFormat), formatTime: formatTime.bind(null, resolvedConfig, formatters.getDateTimeFormat), formatDateTimeRange: formatDateTimeRange.bind(null, resolvedConfig, formatters.getDateTimeFormat), formatTimeToParts: formatTimeToParts.bind(null, resolvedConfig, formatters.getDateTimeFormat), formatPlural: formatPlural.bind(null, resolvedConfig, formatters.getPluralRules), \n // @ts-expect-error TODO: will get to this later\n formatMessage: formatMessage.bind(null, resolvedConfig, formatters), \n // @ts-expect-error TODO: will get to this later\n $t: formatMessage.bind(null, resolvedConfig, formatters), formatList: formatList.bind(null, resolvedConfig, formatters.getListFormat), formatListToParts: formatListToParts.bind(null, resolvedConfig, formatters.getListFormat), formatDisplayName: formatDisplayName.bind(null, resolvedConfig, formatters.getDisplayNames) });\n}\n","import { createIntl, createIntlCache, IntlErrorCode } from '@formatjs/intl';\nexport { createIntl, createIntlCache };\nexport function onFormatjsIntlError(error) {\n switch (error.code) {\n case IntlErrorCode.MISSING_TRANSLATION:\n {\n // Do nothing\n break;\n }\n default:\n {\n throw error;\n }\n }\n}","export default [[\"en-us\", {\n \"dialogs\": {\n \"feedback\": {\n \"email\": \"EMail: \",\n \"feedback\": \"Your Feedback\",\n \"feedback-dialog-ng-message\": \"Failed to send user feedback. This may be due to a poor connection to the server. Please try again.\",\n \"feedback-dialog-ok-message\": \"Your feedback has been sent.\",\n \"give-feedback\": \"Tell us\",\n \"invitation\": \"Please let us know your opinion of this tool, good and bad.\",\n \"name\": \"Name: \",\n \"optional\": \"(Optional)\",\n \"title\": \"Give us your feedback!\"\n },\n \"system\": {\n \"application-busy\": \"Working...\",\n \"title\": \"Application Message\"\n }\n },\n \"ember-aditools-page\": {\n \"card\": {\n \"checkbox-tooltip\": \"Toggle\",\n \"help-tooltip\": \"Click for help\",\n \"part-number-tooltip\": \"Click to select part\"\n },\n \"common\": {\n \"cancel\": \"Cancel\",\n \"close\": \"Close\",\n \"load\": \"Load\",\n \"ok\": \"OK\",\n \"open\": \"Open\",\n \"save\": \"Save\",\n \"select\": \"Select\"\n },\n \"dialogs\": {\n \"feedback\": {\n \"email\": \"EMail: \",\n \"feedback\": \"Your Feedback\",\n \"give-feedback\": \"Tell us\",\n \"invitation\": \"Please let us know your opinion of this tool, good and bad.\",\n \"name\": \"Name: \",\n \"optional\": \"(Optional)\",\n \"title\": \"Give us your feedback!\"\n },\n \"load\": {\n \"choose-button\": \"Choose File\",\n \"message\": \"Load a design from a file on your computer.\",\n \"no-file-selected\": \"No file selected.\",\n \"title\": \"Load Design\"\n },\n \"samples\": {\n \"add-button\": \"Add Selected Samples to Cart\",\n \"add-link\": \"Add to Order\",\n \"add-to-cart-column\": \"Add Sample to Cart\",\n \"model-column\": \"Device Model/Package\",\n \"part-column\": \"Device Name\",\n \"quantities-warning\": \"Analog Devices offers a limited amount of free samples to qualified customers. Due to the large demand for our product samples we ask that you limit your sample request to 2 pieces per part with a maximum of 4 parts per request within a 14 day time period. Should your design needs require additional product quantities, you can purchase them on the web through Buy Online, or you can contact one of our authorized distributors.\",\n \"title\": \"Order Samples\",\n \"unavailable-message\": \"Not available for sample\"\n },\n \"save\": {\n \"save-desc-error\": \"Please provide a Description\",\n \"save-desc-field\": \"Description\",\n \"save-name-error\": \"Please provide a Design Name\",\n \"save-name-field\": \"Design Name\",\n \"title\": \"Save Design\"\n },\n \"share\": {\n \"share-button\": \"Email\",\n \"share-design-information\": \"To share a copy of your design, enter your name into the Sender name field. Then enter the email address of the recipients in the Share design with field.
The recipients will receive an email from Analog Devices with an attachment containing a ZIP archive of the shared design. All you have to do is extract the design from the ZIP file and upload it using the Load Design functionality of the application
This process creates a copy of the design for each recipient. If recipients choose to make edits on their copies, it will have no effect on your design you saved to your own computer.
\",\n \"share-dialog-ng-message\": \"Unable to share design. This is likely due to a server connection error. Please try again.\",\n \"share-dialog-ok-message\": \"Design has been shared\",\n \"share-duplicate-email\": \"Duplicate emails found\",\n \"share-email-empty-error\": \"Please enter an email address\",\n \"share-email-field\": \"Share design with\",\n \"share-email-format-error\": \"At least one of the email addresses you entered is invalid. Please correct and try again\",\n \"share-email-placeholder\": \"Email Address\",\n \"share-name-error\": \"Please provide a Design Name\",\n \"share-name-field\": \"Design Name\",\n \"share-sender-error\": \"Please provide a Sender Name\",\n \"share-sender-field\": \"Sender Name\",\n \"title\": \"Share My Design\"\n },\n \"system\": {\n \"application-busy\": \"Working...\",\n \"title\": \"Application Message\"\n }\n },\n \"footer\": {\n \"accessibility\": \"Accessibility\",\n \"cookie-settings\": \"Cookie Settings\",\n \"copyright-text\": \"1995 - 2025 Analog Devices, Inc. All Rights Reserved\",\n \"icp-id\": \"\",\n \"legal\": \"Legal and Risk\",\n \"privacy-policy\": \"Privacy Policy\",\n \"privacy-settings\": \"Privacy Settings\",\n \"sitemap\": \"Sitemap\"\n },\n \"header\": {\n \"applications\": \"Applications\",\n \"company\": \"Company\",\n \"design-center\": \"Design Center\",\n \"education\": \"Education\",\n \"parametric-search\": \"Parametric Search\",\n \"products\": \"Products\",\n \"spoken\": {\n \"homepage\": \"ADI Home Page\",\n \"sitelinks\": \"ADI Site Links\"\n },\n \"support\": \"Support\"\n },\n \"menubar\": {\n \"chinese\": \"简体中文\",\n \"english\": \"English\",\n \"help\": \"Help\",\n \"japanese\": \"日本語\",\n \"load\": \"Load Design\",\n \"save\": \"Save\"\n },\n \"studio\": {\n \"adcdriver\": \"ADC Driver\",\n \"dacebc\": \"DAC\",\n \"diamond\": \"In Amp\",\n \"filterwizard\": \"Analog Filter\",\n \"noise\": \"Noise\",\n \"photodiode\": \"Photodiode\",\n \"precisionstudio\": \"ADI℠ Precision Studio\",\n \"signalchaindesigner\": \"Signal Chain\",\n \"simdds\": \"DDS\",\n \"spoken\": {\n \"studiolinks\": \"ADI Precision Studio Links\"\n },\n \"virteval\": \"Virtual Eval\"\n },\n \"toolbar\": {\n \"actions\": \"Actions\"\n }\n },\n \"help\": {\n \"main\": {\n \"message\": \"To Be Supplied
\",\n \"title\": \"ADI Precision Studio Help\"\n }\n },\n \"navbar\": {\n \"feedback\": \"Feedback\",\n \"help\": \"Help\"\n },\n \"page\": {\n \"description\": \"\",\n \"title\": \"ADI℠ Precision Studio | Analog Devices\"\n },\n \"tools\": {\n \"select-tool\": \"Select tool to launch\",\n \"urls\": {\n \"adcdriver\": \"https://beta-tools.analog.com/adcdriver/\"\n }\n },\n \"tooltips\": {\n \"adcDriver\": \"Simulate how the driver amplifier affects the performance of a precision ADC.\",\n \"analogFilter\": \"Create active filters with real op amps in minutes.\",\n \"dacEbc\": \"Design your Precision DAC signal chain and simulate its DC accuracy.\",\n \"dds\": \"Simulate a Direct Digital Synthesis (DDS) chip's output. See spurs, DAC Images, and harmonics.\",\n \"inAmp\": \"Verify the instrumentation amplifier you’ve chosen can handle your input signal range.\",\n \"noise\": \"Simulate noise and ac performance of your precision signal chain\",\n \"photodiode\": \"Design a transimpedance amplifier circuit to match your photodiode.\",\n \"signalChain\": \"Build and simulate precision signal conditioning chains.\",\n \"virtualEval\": \"Virtually configure and simulate Analog to Digital Converters (ADCs) and Digital to Analog Converters (DACs).\"\n }\n}], [\"ja-jp\", {\n \"dialogs\": {\n \"feedback\": {\n \"email\": \"お客様のメールアドレス:\",\n \"feedback\": \"ご意見、ご要望:\",\n \"feedback-dialog-ng-message\": \"フィードバックの送信に失敗しました。ネットワーク接続に問題がある場合があります。お手数ですが再度お試しください。\",\n \"feedback-dialog-ok-message\": \"ご意見、ご要望をご記入頂きありがとうございました。\",\n \"give-feedback\": \"意見または感想を送る\",\n \"invitation\": \"このツールに関する率直なご意見、ご要望をお聞かせください。 \",\n \"name\": \"お客様のお名前:\",\n \"optional\": \"(Optional)\",\n \"title\": \"皆様のご意見をお聞かせください!\"\n },\n \"system\": {\n \"application-busy\": \"処理中・・・\",\n \"title\": \"アプリケーション・メッセージ\"\n }\n },\n \"ember-aditools-page\": {\n \"card\": {\n \"checkbox-tooltip\": \"Toggle\",\n \"help-tooltip\": \"Click for help\",\n \"part-number-tooltip\": \"Click to select part\"\n },\n \"common\": {\n \"cancel\": \"キャンセル\",\n \"close\": \"閉じる\",\n \"load\": \"読み込む\",\n \"ok\": \"OK\",\n \"open\": \"開く\",\n \"save\": \"保存する\",\n \"select\": \"選ぶ\"\n },\n \"dialogs\": {\n \"feedback\": {\n \"email\": \"お客様のメールアドレス:\",\n \"feedback\": \"ご意見、ご要望:\",\n \"give-feedback\": \"意見または感想を送る\",\n \"invitation\": \"このツールに関する率直なご意見、ご要望をお聞かせください。 \",\n \"name\": \"お客様のお名前:\",\n \"optional\": \"(Optional)\",\n \"title\": \"皆様のご意見をお聞かせください!\"\n },\n \"load\": {\n \"choose-button\": \"ファイルを選択\",\n \"message\": \"ローカルPC上の設計ファイルを読み込む\",\n \"no-file-selected\": \"No file selected.\",\n \"title\": \"設計を読み込む\"\n },\n \"samples\": {\n \"add-button\": \"選択したサンプルをカートに入れる\",\n \"add-link\": \"Add to Order\",\n \"add-to-cart-column\": \"サンプルをカートに入れる\",\n \"model-column\": \"モデル/パッケージ\",\n \"part-column\": \"構成部品\",\n \"quantities-warning\": \"アナログ・デバイセズは認証させていただいたお客様に限り、無料サンプルのご注文を受け付けています。 サンプルについては大変多くのご要望をいただいておりますため、おひとり様2週間あたり最大で4製品、各2個ずつまでのご注文とさせていただきます。無料サンプルとしてご注文いただける以上の量が必要な場合は、オンライン購入をしていただくか(在庫がある場合に限ります)、販売代理店にお問い合わせください。\",\n \"title\": \"サンプル注文\",\n \"unavailable-message\": \"サンプルの提供はありません。\"\n },\n \"save\": {\n \"save-desc-error\": \"概要を入力してください。\",\n \"save-desc-field\": \"概要\",\n \"save-name-error\": \"デザイン名を入力してください。\",\n \"save-name-field\": \"デザイン名\",\n \"title\": \"保存\"\n },\n \"share\": {\n \"share-button\": \"Email\",\n \"share-design-information\": \"設計ファイルのコピーを共有するには、“差出人名”にお客様のお名前を、共有したい方のメールアドレスを“設計を共有”項目にご入力ください。送信先が複数の場合には、それぞれのメールアドレスを改行してご入力ください。
アナログ・デバイセズよりZIPファイルにまとめられた設計ファイルが添付されたメールを、ご入力いただいたメールアドレスにお送りします。添付されたZIPファイルを解凍して、各ツールのアップロード機能を使用して設計ファイルをアップロードするだけで、その設計ファイルを使用することが出来ます。
上記手順により、共有された設計ファイルのコピーを使用することが出来ます。ただし、共有された設計ファイルのコピーが編集されても、お客様のオリジナルの設計ファイルが編集されることはありません。
\",\n \"share-dialog-ng-message\": \"回路を共有できません。サーバーの接続不良による可能性があります。再度お試しください。\",\n \"share-dialog-ok-message\": \"回路は共有されました\",\n \"share-duplicate-email\": \"同じメールアドレスが複数含まれています\",\n \"share-email-empty-error\": \"メールアドレスを入力してください。\",\n \"share-email-field\": \"設計を共有\",\n \"share-email-format-error\": \"お客様が入力したメールアドレスの中で少なくとも1つは無効です。修正して再度お試しください。\",\n \"share-email-placeholder\": \"メールアドレス\",\n \"share-name-error\": \"デザイン名を入力してください。\",\n \"share-name-field\": \"デザイン名\",\n \"share-sender-error\": \"差出人名を入力してください。\",\n \"share-sender-field\": \"差出人名\",\n \"title\": \"自分の設計をメールで送信\"\n },\n \"system\": {\n \"application-busy\": \"処理中・・・\",\n \"title\": \"アプリケーション・メッセージ\"\n }\n },\n \"footer\": {\n \"accessibility\": \"アクセシビリティ\",\n \"cookie-settings\": \"Cookieの設定\",\n \"copyright-text\": \"1995 - 2025 Analog Devices, Inc. 全著作権所有\",\n \"icp-id\": \"\",\n \"legal\": \"法的事項およびリスク約\",\n \"privacy-policy\": \"プライバシーポリシー\",\n \"privacy-settings\": \"プライバシー設定\",\n \"sitemap\": \"サイトマップ\"\n },\n \"header\": {\n \"applications\": \"アプリケーション\",\n \"company\": \"企業情報\",\n \"design-center\": \"設計支援\",\n \"education\": \"調べる/学ぶ\",\n \"parametric-search\": \"パラメータ検索\",\n \"products\": \"製品\",\n \"spoken\": {\n \"homepage\": \"ホームページ\",\n \"sitelinks\": \"アナログ・デバイセズのサイトへのリンク\"\n },\n \"support\": \"サポート\"\n },\n \"menubar\": {\n \"chinese\": \"简体中文\",\n \"english\": \"English\",\n \"help\": \"ヘルプ\",\n \"japanese\": \"日本語\",\n \"load\": \"設計を読み込む\",\n \"save\": \"保存\"\n },\n \"studio\": {\n \"adcdriver\": \"ADCドライバ\",\n \"dacebc\": \"DAC\",\n \"diamond\": \"計装アンプ\",\n \"filterwizard\": \"アナログ・フィルタ\",\n \"noise\": \"ノイズ\",\n \"photodiode\": \"フォトダイオード\",\n \"precisionstudio\": \"ADI℠ Precision Studio\",\n \"signalchaindesigner\": \"Signal Chain\",\n \"simdds\": \"DDS\",\n \"spoken\": {\n \"studiolinks\": \"ADI Precision Studio へのリンク\"\n },\n \"virteval\": \"Virtual Eval\"\n },\n \"toolbar\": {\n \"actions\": \"Actions\"\n }\n },\n \"help\": {\n \"main\": {\n \"message\": \"To Be Supplied
\",\n \"title\": \"ADI Precision Studio Help\"\n }\n },\n \"navbar\": {\n \"feedback\": \"ご意見 ・ ご要望\",\n \"help\": \"ヘルプ\"\n },\n \"page\": {\n \"description\": \"\",\n \"title\": \"ADI℠ Precision Studio | アナログ・デバイセズ\"\n },\n \"tools\": {\n \"select-tool\": \"ツールを選択\",\n \"urls\": {\n \"adcdriver\": \"https://beta-tools.analog.com/adcdriver/\"\n }\n },\n \"tooltips\": {\n \"adcDriver\": \"ドライバアンプが高精度ADCのパフォーマンスにどのように影響するかをシミュレーションします。\",\n \"analogFilter\": \"実際のOPアンプを用いたアクティブ・フィルタをすぐに作成できます。\",\n \"dacEbc\": \"DAC回路設計とDC精度のDCシミューレションができます。\",\n \"dds\": \"ダイレクト・デジタル・シンセサイザ(DDS)チップの出力をシミュレーションした結果のスプリアス、DACイメージ、高調波をご覧ください。\",\n \"inAmp\": \"選択した計装アンプが、指定の入力信号範囲を処理できることを確認します。\",\n \"noise\": \"回路のノイズとAC性能のシミュレーションができます。\",\n \"photodiode\": \"フォトダイオードの性能に見合うトランスインピーダンス・アンプ回路を設計します。\",\n \"signalChain\": \"高精度シグナル・コンディショニング回路の設計とシミュレーション。\",\n \"virtualEval\": \"A/Dコンバータ(ADC)とD/Aコンバータ(DAC)を、仮想的に構成、シミュレーションします。\"\n }\n}], [\"zh-cn\", {\n \"dialogs\": {\n \"feedback\": {\n \"email\": \"电子邮件:\",\n \"feedback\": \"你的反馈:\",\n \"feedback-dialog-ng-message\": \"您的反馈发送失败。可能是由于服务器的连接问题,请尝试再次发送。\",\n \"feedback-dialog-ok-message\": \"您的反馈已经发送。\",\n \"give-feedback\": \"给予反馈\",\n \"invitation\": \"请告诉我们你对这款工具的看法,任何好的或坏的。 \",\n \"name\": \"姓名:\",\n \"optional\": \"(Optional)\",\n \"title\": \"提交您的意见或反馈!\"\n },\n \"system\": {\n \"application-busy\": \"处理中...\",\n \"title\": \"应用消息\"\n }\n },\n \"ember-aditools-page\": {\n \"card\": {\n \"checkbox-tooltip\": \"Toggle\",\n \"help-tooltip\": \"Click for help\",\n \"part-number-tooltip\": \"Click to select part\"\n },\n \"common\": {\n \"cancel\": \"取消\",\n \"close\": \"关闭\",\n \"load\": \"加载\",\n \"ok\": \"确定\",\n \"open\": \"打开\",\n \"save\": \"保存\",\n \"select\": \"选择\"\n },\n \"dialogs\": {\n \"feedback\": {\n \"email\": \"电子邮件:\",\n \"feedback\": \"你的反馈:\",\n \"give-feedback\": \"给予反馈\",\n \"invitation\": \"请告诉我们你对这款工具的看法,任何好的或坏的。 \",\n \"name\": \"姓名:\",\n \"optional\": \"(Optional)\",\n \"title\": \"提交您的意见或反馈!\"\n },\n \"load\": {\n \"choose-button\": \"选择文档\",\n \"message\": \"从计算机文件中加载设计\",\n \"no-file-selected\": \"No file selected.\",\n \"title\": \"加载设计\"\n },\n \"samples\": {\n \"add-button\": \"添加所选样片至购物车\",\n \"add-link\": \"Add to Order\",\n \"add-to-cart-column\": \"样片加入购物车\",\n \"model-column\": \"元器件模型/封装\",\n \"part-column\": \"组成部分\",\n \"quantities-warning\": \"ADI公司向符合条件的客户免费限量提供样片。 出于客户对我们产品样片有大量需求,两周内,每款器件您只能申请2片,每份申请最多申请4款器件。 如果您的设计需要额外数量的产品,请在网站上通过在线购买或者联系我们的授权代理商购买。\",\n \"title\": \"申请样片\",\n \"unavailable-message\": \"无法申请样片\"\n },\n \"save\": {\n \"save-desc-error\": \"请提供描述\",\n \"save-desc-field\": \"介绍\",\n \"save-name-error\": \"请输入设计名称\",\n \"save-name-field\": \"设计名称\",\n \"title\": \"保存\"\n },\n \"share\": {\n \"share-button\": \"Email\",\n \"share-design-information\": \"若要共享您的设计副本,请在 发件人名称 字段中输入您的姓名。然后在 共享设计 字段中输入收件人的电子邮件地址。多个收件人的地址需分行填写。
收件人将收到ADI发出的电子邮件,内含包括共享设计ZIP存档的附件。您只需要从ZIP文件中提取设计并使用应用的“加载设计”功能上传。
本过程为每个收件人创建一份设计副本。收件人编辑他们的副本并不会影响您保存在您自己的电脑中的设计。
\",\n \"share-dialog-ng-message\": \"无法共享设计,这可能是因为服务器连接问题。请重试。\",\n \"share-dialog-ok-message\": \"已共享设计\",\n \"share-duplicate-email\": \"找到重复的电子邮件\",\n \"share-email-empty-error\": \"请输入电子邮件地址\",\n \"share-email-field\": \"收件人\",\n \"share-email-format-error\": \"您输入的电子邮件地址中有一个或多个无效,请更正后重试。\",\n \"share-email-placeholder\": \"电子邮件地址\",\n \"share-name-error\": \"请输入设计名称\",\n \"share-name-field\": \"设计名称\",\n \"share-sender-error\": \"请提交收件人姓名\",\n \"share-sender-field\": \"收件人姓名\",\n \"title\": \"通过邮件发送我的设计\"\n },\n \"system\": {\n \"application-busy\": \"处理中...\",\n \"title\": \"应用消息\"\n }\n },\n \"footer\": {\n \"accessibility\": \"可访问性\",\n \"cookie-settings\": \"Cookie设置\",\n \"copyright-text\": \"1995 - 2025 Analog Devices, Inc. 保留所有权利\",\n \"icp-id\": \"沪ICP备09046653号-1\",\n \"legal\": \"法律与风险\",\n \"privacy-policy\": \"隐私政策\",\n \"privacy-settings\": \"隐私设置\",\n \"sitemap\": \"网站地图\"\n },\n \"header\": {\n \"applications\": \"应用\",\n \"company\": \"公司\",\n \"design-center\": \"设计中心\",\n \"education\": \"教育培训\",\n \"parametric-search\": \"参数搜索\",\n \"products\": \"产品\",\n \"spoken\": {\n \"homepage\": \"ADI主页\",\n \"sitelinks\": \"ADI网站链接\"\n },\n \"support\": \"支持\"\n },\n \"menubar\": {\n \"chinese\": \"简体中文\",\n \"english\": \"English\",\n \"help\": \"帮助\",\n \"japanese\": \"日本語\",\n \"load\": \"加载设计\",\n \"save\": \"保存\"\n },\n \"studio\": {\n \"adcdriver\": \"ADC驱动器\",\n \"dacebc\": \"DAC\",\n \"diamond\": \"仪表放大器\",\n \"filterwizard\": \"模拟滤波器\",\n \"noise\": \"噪声\",\n \"photodiode\": \"光电二极管\",\n \"precisionstudio\": \"ADI℠ Precision Studio\",\n \"signalchaindesigner\": \"Signal Chain\",\n \"simdds\": \"DDS\",\n \"spoken\": {\n \"studiolinks\": \"ADI Precision Studio链接\"\n },\n \"virteval\": \"Virtual Eval\"\n },\n \"toolbar\": {\n \"actions\": \"Actions\"\n }\n },\n \"help\": {\n \"main\": {\n \"message\": \"To Be Supplied
\",\n \"title\": \"ADI Precision Studio Help\"\n }\n },\n \"navbar\": {\n \"feedback\": \"提交意见反馈\",\n \"help\": \"帮助\"\n },\n \"page\": {\n \"description\": \"\",\n \"title\": \"ADI℠ Precision Studio | 亚德诺半导体\"\n },\n \"tools\": {\n \"select-tool\": \"选择一个工具发布\",\n \"urls\": {\n \"adcdriver\": \"https://beta-tools.analog.com/adcdriver/\"\n }\n },\n \"tooltips\": {\n \"adcDriver\": \"仿真驱动放大器如何影响精密ADC的性能。\",\n \"analogFilter\": \"在几分钟内创建集成实际运算放大器的有源滤波器。\",\n \"dacEbc\": \"设计您的精密 DAC 信号链,并模拟其直流精度。\",\n \"dds\": \"仿真直接数字频率合成(DDS)芯片输出。了解杂散、DAC镜像和谐波。\",\n \"inAmp\": \"验证您选择的仪表放大器可以处理输入信号范围。\",\n \"noise\": \"精密信号链的噪声和交流性能仿真。\",\n \"photodiode\": \"设计与光电二极管匹配的跨阻放大器电路。\",\n \"signalChain\": \"构建和模拟精密信号调理链。\",\n \"virtualEval\": \"虚拟配置和仿真模数转换器(ADC)和数模转换器(DAC)\"\n }\n}]];","/**\n * @private\n * @hide\n */\nexport function convertToArray(locale) {\n if (Array.isArray(locale)) {\n return locale;\n }\n return [locale];\n}\n\n/**\n * @private\n * @hide\n */\nexport function convertToString(locale) {\n if (Array.isArray(locale)) {\n return locale[0];\n }\n return locale;\n}\n/**\n * @private\n * @hide\n */\nexport function hasLocaleChanged(locale1, locale2) {\n if (!Array.isArray(locale2)) {\n return true;\n }\n return locale1.toString() !== locale2.toString();\n}\n\n/**\n * @private\n * @hide\n */\nexport function normalizeLocale(locale) {\n return locale.replace(/_/g, '-').toLowerCase();\n}","/**\n * @private\n * @hide\n */\nexport function flattenKeys(object) {\n const result = {};\n for (const key in object) {\n if (!Object.prototype.hasOwnProperty.call(object, key)) {\n continue;\n }\n const value = object[key];\n\n // If `value` is not `null`\n if (value && typeof value === 'object') {\n const hash = flattenKeys(value);\n for (const suffix in hash) {\n const translation = hash[suffix];\n if (typeof translation !== 'undefined') {\n result[`${key}.${suffix}`] = translation;\n }\n }\n } else {\n if (typeof value !== 'undefined') {\n result[key] = value;\n }\n }\n }\n return result;\n}","var _class, _descriptor, _descriptor2;\nfunction _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\nfunction _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\nimport { getOwner } from '@ember/application';\nimport { assert } from '@ember/debug';\nimport { registerDestructor } from '@ember/destroyable';\nimport { dependentKeyCompat } from '@ember/object/compat';\nimport { cancel, next } from '@ember/runloop';\nimport Service from '@ember/service';\nimport { tracked } from '@glimmer/tracking';\nimport EventEmitter from 'eventemitter3';\nimport { FormatDate, FormatList, FormatMessage, FormatNumber, FormatRelative, FormatTime } from '../-private/formatters';\nimport { createIntl, createIntlCache, onFormatjsIntlError } from '../-private/utils/formatjs';\nimport getDOM from '../-private/utils/get-dom';\nimport hydrate from '../-private/utils/hydrate';\nimport { convertToArray, convertToString, hasLocaleChanged, normalizeLocale } from '../-private/utils/locale';\nimport { flattenKeys } from '../-private/utils/translations';\nlet IntlService = (_class = class IntlService extends Service {\n /**\n * Returns an array of registered locale names\n *\n */\n get locales() {\n return Object.keys(this._intls);\n }\n\n /** @public **/\n set locale(localeName) {\n const proposedLocale = convertToArray(localeName).map(normalizeLocale);\n if (hasLocaleChanged(proposedLocale, this._locale)) {\n this._locale = proposedLocale;\n cancel(this._timer);\n this._timer = next(() => {\n this._ee.emit('localeChanged');\n this._updateDocumentLanguage(this._locale);\n });\n }\n }\n get locale() {\n return this._locale;\n }\n\n /**\n * Returns the first locale of the currently active locales\n *\n */\n get primaryLocale() {\n return this.locale[0];\n }\n\n /** @public **/\n\n /** @public **/\n constructor() {\n super(...arguments);\n _defineProperty(this, \"formatRelative\", createFormatterProxy('relative'));\n /** @public **/\n _defineProperty(this, \"formatMessage\", createFormatterProxy('message'));\n /** @public **/\n _defineProperty(this, \"formatNumber\", createFormatterProxy('number'));\n /** @public **/\n _defineProperty(this, \"formatTime\", createFormatterProxy('time'));\n /** @public **/\n _defineProperty(this, \"formatDate\", createFormatterProxy('date'));\n /** @public **/\n _defineProperty(this, \"formatList\", createFormatterProxy('list'));\n /** @private **/\n _initializerDefineProperty(this, \"_locale\", _descriptor, this);\n /** @private **/\n _defineProperty(this, \"_timer\", null);\n /** @private **/\n _defineProperty(this, \"_formats\", null);\n /** @private **/\n _defineProperty(this, \"_formatters\", {\n message: new FormatMessage(),\n relative: new FormatRelative(),\n number: new FormatNumber(),\n time: new FormatTime(),\n date: new FormatDate(),\n list: new FormatList()\n });\n /** @private */\n _initializerDefineProperty(this, \"_intls\", _descriptor2, this);\n /**\n * @private\n * @type {EventEmitter}\n */\n _defineProperty(this, \"_ee\", null);\n _defineProperty(this, \"_cache\", createIntlCache());\n const initialLocale = this.locale || ['en-us'];\n this._intls = {};\n this._ee = new EventEmitter();\n this.setLocale(initialLocale);\n this._owner = getOwner(this);\n if (!this._formats) {\n this._formats = this._owner.resolveRegistration('formats:main') || {};\n }\n this.getIntl = this.getIntl.bind(this);\n this.getOrCreateIntl = this.getOrCreateIntl.bind(this);\n hydrate(this);\n }\n willDestroy() {\n super.willDestroy(...arguments);\n cancel(this._timer);\n }\n\n /** @public **/\n lookup(key, localeName, options = {}) {\n const localeNames = this._localeWithDefault(localeName);\n let translation;\n for (let i = 0; i < localeNames.length; i++) {\n const messages = this.translationsFor(localeNames[i]);\n if (!messages) {\n continue;\n }\n translation = messages[key];\n if (translation !== undefined) {\n break;\n }\n }\n if (translation === undefined && options.resilient !== true) {\n const missingMessage = this._owner.resolveRegistration('util:intl/missing-message');\n return missingMessage.call(this, key, localeNames, options);\n }\n return translation;\n }\n\n /**\n * @private\n */\n getIntl(locale) {\n const resolvedLocale = convertToString(locale);\n return this._intls[resolvedLocale];\n }\n getOrCreateIntl(locale, messages) {\n const resolvedLocale = convertToString(locale);\n const existingIntl = this._intls[resolvedLocale];\n if (!existingIntl) {\n this._intls = {\n ...this._intls,\n [resolvedLocale]: this.createIntl(resolvedLocale, messages)\n };\n } else if (messages) {\n this._intls = {\n ...this._intls,\n [resolvedLocale]: this.createIntl(resolvedLocale, {\n ...(existingIntl.messages || {}),\n ...messages\n })\n };\n }\n return this._intls[resolvedLocale];\n }\n\n /**\n * @private\n * @param {String} locale Locale of intl obj to create\n */\n createIntl(locale, messages = {}) {\n const {\n _formats: formats\n } = this;\n const resolvedLocale = convertToString(locale);\n return createIntl({\n defaultFormats: formats,\n defaultLocale: resolvedLocale,\n formats,\n locale: resolvedLocale,\n messages,\n onError: onFormatjsIntlError\n }, this._cache);\n }\n\n /** @public **/\n t(key, options = {}) {\n let keys = [key];\n if (options.default) {\n if (Array.isArray(options.default)) {\n keys = [...keys, ...options.default];\n } else if (typeof options.default === 'string') {\n keys = [...keys, options.default];\n }\n }\n keys.forEach(key => {\n assert(`[ember-intl] expected translation key \"${key}\" to be of type String but received: \"${typeof key}\"`, typeof key === 'string');\n });\n for (let index = 0; index < keys.length; index++) {\n const key = keys[index];\n const message = this.lookup(key, options.locale, {\n ...options,\n // Note: last iteration will throw with the last key that was missing\n // in the future maybe the thrown error should include all the keys to help debugging\n resilient: keys.length - 1 !== index\n });\n\n // @formatjs/intl consider empty message to be an error\n if (message === '' || typeof message === 'number') {\n return message;\n }\n if (message) {\n return this.formatMessage({\n id: key,\n defaultMessage: message\n }, options);\n }\n }\n }\n\n /** @public **/\n exists(key, localeName) {\n const localeNames = this._localeWithDefault(localeName);\n assert(`[ember-intl] locale is unset, cannot lookup '${key}'`, Array.isArray(localeNames) && localeNames.length);\n return localeNames.some(localeName => key in (this.getIntl(localeName)?.messages || {}));\n }\n\n /** @public */\n setLocale(locale) {\n assert(`[ember-intl] No locale has been set. See https://ember-intl.github.io/ember-intl/docs/quickstart#4-configure-project`, locale);\n this.locale = locale;\n this.getOrCreateIntl(locale);\n }\n\n /** @public **/\n addTranslations(localeName, payload) {\n const locale = normalizeLocale(localeName);\n const messages = flattenKeys(payload);\n this.getOrCreateIntl(locale, messages);\n }\n\n /** @public **/\n translationsFor(localeName) {\n const locale = normalizeLocale(localeName);\n return this.getIntl(locale)?.messages;\n }\n\n /** @private **/\n _localeWithDefault(localeName) {\n if (!localeName) {\n return this._locale || [];\n }\n return convertToArray(localeName).map(normalizeLocale);\n }\n\n /** @private **/\n _updateDocumentLanguage(locales) {\n const dom = getDOM(this);\n if (dom) {\n const [primaryLocale] = locales;\n const html = dom.documentElement;\n html.setAttribute('lang', primaryLocale);\n }\n }\n\n /**\n * @private\n * @param fn\n * @param context\n */\n onLocaleChanged(fn, context) {\n this._ee.on('localeChanged', fn, context);\n registerDestructor(context, () => {\n this._ee.off('localeChanged', fn, context);\n });\n }\n}, _applyDecoratedDescriptor(_class.prototype, \"locale\", [dependentKeyCompat], Object.getOwnPropertyDescriptor(_class.prototype, \"locale\"), _class.prototype), _descriptor = _applyDecoratedDescriptor(_class.prototype, \"_locale\", [tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return null;\n }\n}), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"_intls\", [tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return null;\n }\n}), _class);\nexport { IntlService as default };\nfunction createFormatterProxy(name) {\n return function serviceFormatterProxy(value, formatOptions) {\n let locale;\n let intl;\n if (formatOptions && formatOptions.locale) {\n locale = this._localeWithDefault(formatOptions.locale);\n // Cannot use getOrCreateIntl since it triggers a re-render which\n // might cause infinite loop\n // This is also a case we're not optimizing for so let it take\n // the slow path\n intl = this.createIntl(locale);\n } else {\n locale = this.locale;\n intl = this.getIntl(locale);\n }\n return this._formatters[name].format(intl, value, formatOptions);\n };\n}","import translations from '../../translations';\n\n/**\n * @private\n * @hide\n */\nexport default function hydrate(service) {\n translations.forEach(([locale, translations]) => {\n service.addTranslations(locale, translations);\n });\n}","import { getOwner } from '@ember/application';\n\n// adjusted from https://github.com/yapplabs/ember-wormhole/blob/0.5.4/addon/utils/dom.js#L45-L63\n//\n// Private Ember API usage. Get the dom implementation used by the current\n// renderer, be it native browser DOM or Fastboot SimpleDOM\n/**\n * @private\n * @hide\n */\nexport default function getDOM(context) {\n let {\n renderer\n } = context;\n if (!renderer || !renderer._dom) {\n // pre glimmer2\n let container = getOwner ? getOwner(context) : context.container;\n let documentService = container.lookup('service:-document');\n if (documentService) {\n return documentService;\n }\n renderer = container.lookup('renderer:-dom');\n }\n if (renderer._dom && renderer._dom.document) {\n // pre Ember 2.6\n return renderer._dom.document;\n }\n return null;\n}","import { warn } from '@ember/debug';\nimport { isEmpty } from '@ember/utils';\n\n/**\n * @private\n * @hide\n */\nexport default function missingMessage(key, locales) {\n if (isEmpty(locales)) {\n warn(`[ember-intl] No locale has been set. See https://ember-intl.github.io/ember-intl/docs/quickstart#4-configure-project`, false, {\n id: 'ember-intl-no-locale-set'\n });\n return `No locale defined. Unable to resolve translation: \"${key}\"`;\n }\n const localeNames = locales.join(', ');\n warn(`[ember-intl] translation: \"${key}\" on locale: \"${localeNames}\" was not found.`, false, {\n id: 'ember-intl-missing-translation'\n });\n return `Missing translation \"${key}\" for locale \"${localeNames}\"`;\n}","import { A } from '@ember/array';\nimport ContainerDebugAdapter from '@ember/debug/container-debug-adapter';\nimport { ModuleRegistry } from './index';\nimport { getOwner } from '@ember/application';\n\nfunction getPod(type, key, prefix) {\n let match = key.match(new RegExp('^/?' + prefix + '/(.+)/' + type + '$'));\n if (match !== null) {\n return match[1];\n }\n}\n\n/*\n * This module defines a subclass of Ember.ContainerDebugAdapter that adds\n * support for resolving from modules.\n *\n */\n\n/* eslint-disable ember/no-classic-classes */\nexport default ContainerDebugAdapter.extend({\n _moduleRegistry: null,\n\n init() {\n this._super(...arguments);\n this.namespace = getOwner(this).lookup('application:main');\n\n if (!this._moduleRegistry) {\n this._moduleRegistry = new ModuleRegistry();\n }\n },\n\n /**\n The container of the application being debugged.\n This property will be injected\n on creation.\n\n @property container\n @default null\n */\n\n /**\n The resolver instance of the application\n being debugged. This property will be injected\n on creation.\n\n @property resolver\n @default null\n */\n\n /**\n Returns true if it is possible to catalog a list of available\n classes in the resolver for a given type.\n\n @method canCatalogEntriesByType\n @param {string} type The type. e.g. \"model\", \"controller\", \"route\"\n @return {boolean} whether a list is available for this type.\n */\n canCatalogEntriesByType(type) {\n if (type === 'model') {\n return true;\n }\n return this._super(...arguments);\n },\n\n /**\n Returns the available classes a given type.\n\n @method catalogEntriesByType\n @param {string} type The type. e.g. \"model\", \"controller\", \"route\"\n @return {Array} An array of classes.\n */\n catalogEntriesByType(type) {\n let moduleNames = this._moduleRegistry.moduleNames();\n let types = A();\n\n let prefix = this.namespace.modulePrefix;\n\n for (let i = 0, l = moduleNames.length; i < l; i++) {\n let key = moduleNames[i];\n\n if (key.indexOf(type) !== -1) {\n // Check if it's a pod module\n let name = getPod(type, key, this.namespace.podModulePrefix || prefix);\n if (!name) {\n // Not pod\n name = key.split(type + 's/').pop();\n\n // Support for different prefix (such as ember-cli addons).\n // Uncomment the code below when\n // https://github.com/ember-cli/ember-resolver/pull/80 is merged.\n\n //let match = key.match('^/?(.+)/' + type);\n //if (match && match[1] !== prefix) {\n // Different prefix such as an addon\n //name = match[1] + '@' + name;\n //}\n }\n types.addObject(name);\n }\n }\n return types;\n },\n});\n","export default class Cache {\n constructor(limit, func, store) {\n this.limit = limit;\n this.func = func;\n this.store = store;\n this.size = 0;\n this.misses = 0;\n this.hits = 0;\n this.store = store || new Map();\n }\n get(key) {\n let value = this.store.get(key);\n if (this.store.has(key)) {\n this.hits++;\n return this.store.get(key);\n } else {\n this.misses++;\n value = this.set(key, this.func(key));\n }\n return value;\n }\n set(key, value) {\n if (this.limit > this.size) {\n this.size++;\n this.store.set(key, value);\n }\n return value;\n }\n purge() {\n this.store.clear();\n this.size = 0;\n this.hits = 0;\n this.misses = 0;\n }\n}\n","/* eslint-disable no-useless-escape */\nimport Cache from './cache';\nlet STRINGS = {};\nexport function setStrings(strings) {\n STRINGS = strings;\n}\nexport function getStrings() {\n return STRINGS;\n}\nexport function getString(name) {\n return STRINGS[name];\n}\nconst STRING_DASHERIZE_REGEXP = /[ _]/g;\nconst STRING_DASHERIZE_CACHE = new Cache(1000, (key) =>\n decamelize(key).replace(STRING_DASHERIZE_REGEXP, '-')\n);\nconst STRING_CLASSIFY_REGEXP_1 = /^(\\-|_)+(.)?/;\nconst STRING_CLASSIFY_REGEXP_2 = /(.)(\\-|\\_|\\.|\\s)+(.)?/g;\nconst STRING_CLASSIFY_REGEXP_3 = /(^|\\/|\\.)([a-z])/g;\nconst CLASSIFY_CACHE = new Cache(1000, (str) => {\n const replace1 = (_match, _separator, chr) =>\n chr ? `_${chr.toUpperCase()}` : '';\n const replace2 = (_match, initialChar, _separator, chr) =>\n initialChar + (chr ? chr.toUpperCase() : '');\n const parts = str.split('/');\n for (let i = 0; i < parts.length; i++) {\n parts[i] = parts[i]\n .replace(STRING_CLASSIFY_REGEXP_1, replace1)\n .replace(STRING_CLASSIFY_REGEXP_2, replace2);\n }\n return parts\n .join('/')\n .replace(STRING_CLASSIFY_REGEXP_3, (match /*, separator, chr */) =>\n match.toUpperCase()\n );\n});\nconst STRING_UNDERSCORE_REGEXP_1 = /([a-z\\d])([A-Z]+)/g;\nconst STRING_UNDERSCORE_REGEXP_2 = /\\-|\\s+/g;\nconst UNDERSCORE_CACHE = new Cache(1000, (str) =>\n str\n .replace(STRING_UNDERSCORE_REGEXP_1, '$1_$2')\n .replace(STRING_UNDERSCORE_REGEXP_2, '_')\n .toLowerCase()\n);\nconst STRING_DECAMELIZE_REGEXP = /([a-z\\d])([A-Z])/g;\nconst DECAMELIZE_CACHE = new Cache(1000, (str) =>\n str.replace(STRING_DECAMELIZE_REGEXP, '$1_$2').toLowerCase()\n);\n/**\n Converts a camelized string into all lower case separated by underscores.\n\n ```javascript\n import { decamelize } from '@ember/string';\n\n decamelize('innerHTML'); // 'inner_html'\n decamelize('action_name'); // 'action_name'\n decamelize('css-class-name'); // 'css-class-name'\n decamelize('my favorite items'); // 'my favorite items'\n ```\n\n @method decamelize\n @param {String} str The string to decamelize.\n @return {String} the decamelized string.\n @public\n*/\nexport function decamelize(str) {\n return DECAMELIZE_CACHE.get(str);\n}\n/**\n Replaces underscores, spaces, or camelCase with dashes.\n\n ```javascript\n import { dasherize } from '@ember/string';\n\n dasherize('innerHTML'); // 'inner-html'\n dasherize('action_name'); // 'action-name'\n dasherize('css-class-name'); // 'css-class-name'\n dasherize('my favorite items'); // 'my-favorite-items'\n dasherize('privateDocs/ownerInvoice'; // 'private-docs/owner-invoice'\n ```\n\n @method dasherize\n @param {String} str The string to dasherize.\n @return {String} the dasherized string.\n @public\n*/\nexport function dasherize(str) {\n return STRING_DASHERIZE_CACHE.get(str);\n}\n/**\n Returns the UpperCamelCase form of a string.\n\n ```javascript\n import { classify } from '@ember/string';\n\n classify('innerHTML'); // 'InnerHTML'\n classify('action_name'); // 'ActionName'\n classify('css-class-name'); // 'CssClassName'\n classify('my favorite items'); // 'MyFavoriteItems'\n classify('private-docs/owner-invoice'); // 'PrivateDocs/OwnerInvoice'\n ```\n\n @method classify\n @param {String} str the string to classify\n @return {String} the classified string\n @public\n*/\nexport function classify(str) {\n return CLASSIFY_CACHE.get(str);\n}\n/**\n More general than decamelize. Returns the lower\\_case\\_and\\_underscored\n form of a string.\n\n ```javascript\n import { underscore } from '@ember/string';\n\n underscore('innerHTML'); // 'inner_html'\n underscore('action_name'); // 'action_name'\n underscore('css-class-name'); // 'css_class_name'\n underscore('my favorite items'); // 'my_favorite_items'\n underscore('privateDocs/ownerInvoice'); // 'private_docs/owner_invoice'\n ```\n\n @method underscore\n @param {String} str The string to underscore.\n @return {String} the underscored string.\n @public\n*/\nexport function underscore(str) {\n return UNDERSCORE_CACHE.get(str);\n}\n","/* globals requirejs, require */\n\nimport { assert, deprecate, warn } from '@ember/debug';\nimport EmberObject from '@ember/object';\nimport { dasherize, classify, underscore } from './string';\nimport { DEBUG } from '@glimmer/env';\nimport classFactory from './utils/class-factory';\n\nimport { getOwner } from '@ember/owner';\n\nif (typeof requirejs.entries === 'undefined') {\n requirejs.entries = requirejs._eak_seen;\n}\n\nexport class ModuleRegistry {\n constructor(entries) {\n this._entries = entries || requirejs.entries;\n }\n moduleNames() {\n return Object.keys(this._entries);\n }\n has(moduleName) {\n return moduleName in this._entries;\n }\n get(...args) {\n return require(...args);\n }\n}\n\n/**\n * This module defines a subclass of Ember.DefaultResolver that adds two\n * important features:\n *\n * 1) The resolver makes the container aware of es6 modules via the AMD\n * output. The loader's _moduleEntries is consulted so that classes can be\n * resolved directly via the module loader, without needing a manual\n * `import`.\n * 2) is able to provide injections to classes that implement `extend`\n * (as is typical with Ember).\n */\nclass Resolver extends EmberObject {\n static moduleBasedResolver = true;\n moduleBasedResolver = true;\n\n _deprecatedPodModulePrefix = false;\n _normalizeCache = Object.create(null);\n\n /**\n A listing of functions to test for moduleName's based on the provided\n `parsedName`. This allows easy customization of additional module based\n lookup patterns.\n\n @property moduleNameLookupPatterns\n @returns {Ember.Array}\n */\n moduleNameLookupPatterns = [\n this.podBasedModuleName,\n this.podBasedComponentsInSubdir,\n this.mainModuleName,\n this.defaultModuleName,\n this.nestedColocationComponentModuleName,\n ];\n\n constructor() {\n super(...arguments);\n\n if (!this._moduleRegistry) {\n this._moduleRegistry = new ModuleRegistry();\n }\n\n this.pluralizedTypes = this.pluralizedTypes || Object.create(null);\n\n if (!this.pluralizedTypes.config) {\n this.pluralizedTypes.config = 'config';\n }\n }\n\n makeToString(factory, fullName) {\n return '' + this.namespace.modulePrefix + '@' + fullName + ':';\n }\n\n shouldWrapInClassFactory(/* module, parsedName */) {\n return false;\n }\n\n parseName(fullName) {\n if (fullName.parsedName === true) {\n return fullName;\n }\n\n let prefix, type, name;\n let fullNameParts = fullName.split('@');\n\n if (fullNameParts.length === 3) {\n if (fullNameParts[0].length === 0) {\n // leading scoped namespace: `@scope/pkg@type:name`\n prefix = `@${fullNameParts[1]}`;\n let prefixParts = fullNameParts[2].split(':');\n type = prefixParts[0];\n name = prefixParts[1];\n } else {\n // interweaved scoped namespace: `type:@scope/pkg@name`\n prefix = `@${fullNameParts[1]}`;\n type = fullNameParts[0].slice(0, -1);\n name = fullNameParts[2];\n }\n\n if (type === 'template:components') {\n name = `components/${name}`;\n type = 'template';\n }\n } else if (fullNameParts.length === 2) {\n let prefixParts = fullNameParts[0].split(':');\n\n if (prefixParts.length === 2) {\n if (prefixParts[1].length === 0) {\n type = prefixParts[0];\n name = `@${fullNameParts[1]}`;\n } else {\n prefix = prefixParts[1];\n type = prefixParts[0];\n name = fullNameParts[1];\n }\n } else {\n let nameParts = fullNameParts[1].split(':');\n\n prefix = fullNameParts[0];\n type = nameParts[0];\n name = nameParts[1];\n }\n\n if (type === 'template' && prefix.lastIndexOf('components/', 0) === 0) {\n name = `components/${name}`;\n prefix = prefix.slice(11);\n }\n } else {\n fullNameParts = fullName.split(':');\n type = fullNameParts[0];\n name = fullNameParts[1];\n }\n\n let fullNameWithoutType = name;\n let namespace = this.namespace;\n let root = namespace;\n\n return {\n parsedName: true,\n fullName: fullName,\n prefix: prefix || this.prefix({ type: type }),\n type: type,\n fullNameWithoutType: fullNameWithoutType,\n name: name,\n root: root,\n resolveMethodName: 'resolve' + classify(type),\n };\n }\n\n resolveOther(parsedName) {\n assert('`modulePrefix` must be defined', this.namespace.modulePrefix);\n\n let normalizedModuleName = this.findModuleName(parsedName);\n\n if (normalizedModuleName) {\n let defaultExport = this._extractDefaultExport(\n normalizedModuleName,\n parsedName\n );\n\n if (defaultExport === undefined) {\n throw new Error(\n ` Expected to find: '${parsedName.fullName}' within '${normalizedModuleName}' but got 'undefined'. Did you forget to 'export default' within '${normalizedModuleName}'?`\n );\n }\n\n if (this.shouldWrapInClassFactory(defaultExport, parsedName)) {\n defaultExport = classFactory(defaultExport);\n }\n\n return defaultExport;\n }\n }\n\n normalize(fullName) {\n return (\n this._normalizeCache[fullName] ||\n (this._normalizeCache[fullName] = this._normalize(fullName))\n );\n }\n\n resolve(fullName) {\n let parsedName = this.parseName(fullName);\n let resolveMethodName = parsedName.resolveMethodName;\n let resolved;\n\n if (typeof this[resolveMethodName] === 'function') {\n resolved = this[resolveMethodName](parsedName);\n }\n\n if (resolved == null) {\n resolved = this.resolveOther(parsedName);\n }\n\n return resolved;\n }\n\n _normalize(fullName) {\n // A) Convert underscores to dashes\n // B) Convert camelCase to dash-case, except for components (their\n // templates) and helpers where we want to avoid shadowing camelCase\n // expressions\n // C) replace `.` with `/` in order to make nested controllers work in the following cases\n // 1. `needs: ['posts/post']`\n // 2. `{{render \"posts/post\"}}`\n // 3. `this.render('posts/post')` from Route\n\n let split = fullName.split(':');\n if (split.length > 1) {\n let type = split[0];\n\n if (\n type === 'component' ||\n type === 'helper' ||\n type === 'modifier' ||\n (type === 'template' && split[1].indexOf('components/') === 0)\n ) {\n return type + ':' + split[1].replace(/_/g, '-');\n } else {\n return type + ':' + dasherize(split[1].replace(/\\./g, '/'));\n }\n } else {\n return fullName;\n }\n }\n\n pluralize(type) {\n return (\n this.pluralizedTypes[type] || (this.pluralizedTypes[type] = type + 's')\n );\n }\n\n podBasedLookupWithPrefix(podPrefix, parsedName) {\n let fullNameWithoutType = parsedName.fullNameWithoutType;\n\n if (parsedName.type === 'template') {\n fullNameWithoutType = fullNameWithoutType.replace(/^components\\//, '');\n }\n\n return podPrefix + '/' + fullNameWithoutType + '/' + parsedName.type;\n }\n\n podBasedModuleName(parsedName) {\n let podPrefix =\n this.namespace.podModulePrefix || this.namespace.modulePrefix;\n\n return this.podBasedLookupWithPrefix(podPrefix, parsedName);\n }\n\n podBasedComponentsInSubdir(parsedName) {\n let podPrefix =\n this.namespace.podModulePrefix || this.namespace.modulePrefix;\n podPrefix = podPrefix + '/components';\n\n if (\n parsedName.type === 'component' ||\n /^components/.test(parsedName.fullNameWithoutType)\n ) {\n return this.podBasedLookupWithPrefix(podPrefix, parsedName);\n }\n }\n\n resolveEngine(parsedName) {\n let engineName = parsedName.fullNameWithoutType;\n let engineModule = engineName + '/engine';\n\n if (this._moduleRegistry.has(engineModule)) {\n return this._extractDefaultExport(engineModule);\n }\n }\n\n resolveRouteMap(parsedName) {\n let engineName = parsedName.fullNameWithoutType;\n let engineRoutesModule = engineName + '/routes';\n\n if (this._moduleRegistry.has(engineRoutesModule)) {\n let routeMap = this._extractDefaultExport(engineRoutesModule);\n\n assert(\n `The route map for ${engineName} should be wrapped by 'buildRoutes' before exporting.`,\n routeMap.isRouteMap\n );\n\n return routeMap;\n }\n }\n\n resolveTemplate(parsedName) {\n return this.resolveOther(parsedName);\n }\n\n mainModuleName(parsedName) {\n if (parsedName.fullNameWithoutType === 'main') {\n // if router:main or adapter:main look for a module with just the type first\n return parsedName.prefix + '/' + parsedName.type;\n }\n }\n\n defaultModuleName(parsedName) {\n return (\n parsedName.prefix +\n '/' +\n this.pluralize(parsedName.type) +\n '/' +\n parsedName.fullNameWithoutType\n );\n }\n\n nestedColocationComponentModuleName(parsedName) {\n if (parsedName.type === 'component') {\n return (\n parsedName.prefix +\n '/' +\n this.pluralize(parsedName.type) +\n '/' +\n parsedName.fullNameWithoutType +\n '/index'\n );\n }\n }\n\n prefix(parsedName) {\n let tmpPrefix = this.namespace.modulePrefix;\n\n if (this.namespace[parsedName.type + 'Prefix']) {\n tmpPrefix = this.namespace[parsedName.type + 'Prefix'];\n }\n\n return tmpPrefix;\n }\n\n findModuleName(parsedName, loggingDisabled) {\n let moduleNameLookupPatterns = this.moduleNameLookupPatterns;\n let moduleName;\n\n for (\n let index = 0, length = moduleNameLookupPatterns.length;\n index < length;\n index++\n ) {\n let item = moduleNameLookupPatterns[index];\n\n let tmpModuleName = item.call(this, parsedName);\n\n // allow treat all dashed and all underscored as the same thing\n // supports components with dashes and other stuff with underscores.\n if (tmpModuleName) {\n tmpModuleName = this.chooseModuleName(tmpModuleName, parsedName);\n }\n\n if (tmpModuleName && this._moduleRegistry.has(tmpModuleName)) {\n moduleName = tmpModuleName;\n }\n\n if (!loggingDisabled) {\n this._logLookup(moduleName, parsedName, tmpModuleName);\n }\n\n if (moduleName) {\n return moduleName;\n }\n }\n }\n\n chooseModuleName(moduleName, parsedName) {\n let underscoredModuleName = underscore(moduleName);\n\n if (\n moduleName !== underscoredModuleName &&\n this._moduleRegistry.has(moduleName) &&\n this._moduleRegistry.has(underscoredModuleName)\n ) {\n throw new TypeError(\n `Ambiguous module names: '${moduleName}' and '${underscoredModuleName}'`\n );\n }\n\n if (this._moduleRegistry.has(moduleName)) {\n return moduleName;\n } else if (this._moduleRegistry.has(underscoredModuleName)) {\n return underscoredModuleName;\n }\n // workaround for dasherized partials:\n // something/something/-something => something/something/_something\n let partializedModuleName = moduleName.replace(/\\/-([^/]*)$/, '/_$1');\n\n if (this._moduleRegistry.has(partializedModuleName)) {\n deprecate(\n 'Modules should not contain underscores. ' +\n 'Attempted to lookup \"' +\n moduleName +\n '\" which ' +\n 'was not found. Please rename \"' +\n partializedModuleName +\n '\" ' +\n 'to \"' +\n moduleName +\n '\" instead.',\n false,\n {\n id: 'ember-resolver.underscored-modules',\n until: '3.0.0',\n for: 'ember-resolver',\n since: '0.1.0',\n }\n );\n\n return partializedModuleName;\n }\n\n if (DEBUG) {\n let isCamelCaseHelper =\n parsedName.type === 'helper' && /[a-z]+[A-Z]+/.test(moduleName);\n if (isCamelCaseHelper) {\n this._camelCaseHelperWarnedNames =\n this._camelCaseHelperWarnedNames || [];\n let alreadyWarned =\n this._camelCaseHelperWarnedNames.indexOf(parsedName.fullName) > -1;\n if (!alreadyWarned && this._moduleRegistry.has(dasherize(moduleName))) {\n this._camelCaseHelperWarnedNames.push(parsedName.fullName);\n warn(\n 'Attempted to lookup \"' +\n parsedName.fullName +\n '\" which ' +\n 'was not found. In previous versions of ember-resolver, a bug would have ' +\n 'caused the module at \"' +\n dasherize(moduleName) +\n '\" to be ' +\n 'returned for this camel case helper name. This has been fixed. ' +\n 'Use the dasherized name to resolve the module that would have been ' +\n 'returned in previous versions.',\n false,\n { id: 'ember-resolver.camelcase-helper-names', until: '3.0.0' }\n );\n }\n }\n }\n }\n\n // used by Ember.DefaultResolver.prototype._logLookup\n lookupDescription(fullName) {\n let parsedName = this.parseName(fullName);\n\n let moduleName = this.findModuleName(parsedName, true);\n\n return moduleName;\n }\n\n // only needed until 1.6.0-beta.2 can be required\n _logLookup(found, parsedName, description) {\n let owner = getOwner(this);\n let env = owner?.resolveRegistration?.('config:environment');\n if (!env?.LOG_MODULE_RESOLVER && !parsedName.root.LOG_RESOLVER) {\n return;\n }\n\n let padding;\n let symbol = found ? '[✓]' : '[ ]';\n\n if (parsedName.fullName.length > 60) {\n padding = '.';\n } else {\n padding = new Array(60 - parsedName.fullName.length).join('.');\n }\n\n if (!description) {\n description = this.lookupDescription(parsedName);\n }\n\n /* eslint-disable no-console */\n if (console && console.info) {\n console.info(symbol, parsedName.fullName, padding, description);\n }\n }\n\n knownForType(type) {\n let moduleKeys = this._moduleRegistry.moduleNames();\n\n let items = Object.create(null);\n for (let index = 0, length = moduleKeys.length; index < length; index++) {\n let moduleName = moduleKeys[index];\n let fullname = this.translateToContainerFullname(type, moduleName);\n\n if (fullname) {\n items[fullname] = true;\n }\n }\n\n return items;\n }\n\n translateToContainerFullname(type, moduleName) {\n let prefix = this.prefix({ type });\n\n // Note: using string manipulation here rather than regexes for better performance.\n // pod modules\n // '^' + prefix + '/(.+)/' + type + '$'\n let podPrefix = prefix + '/';\n let podSuffix = '/' + type;\n let start = moduleName.indexOf(podPrefix);\n let end = moduleName.indexOf(podSuffix);\n\n if (\n start === 0 &&\n end === moduleName.length - podSuffix.length &&\n moduleName.length > podPrefix.length + podSuffix.length\n ) {\n return type + ':' + moduleName.slice(start + podPrefix.length, end);\n }\n\n // non-pod modules\n // '^' + prefix + '/' + pluralizedType + '/(.+)$'\n let pluralizedType = this.pluralize(type);\n let nonPodPrefix = prefix + '/' + pluralizedType + '/';\n\n if (\n moduleName.indexOf(nonPodPrefix) === 0 &&\n moduleName.length > nonPodPrefix.length\n ) {\n return type + ':' + moduleName.slice(nonPodPrefix.length);\n }\n }\n\n _extractDefaultExport(normalizedModuleName) {\n let module = this._moduleRegistry.get(\n normalizedModuleName,\n null,\n null,\n true /* force sync */\n );\n\n if (module && module['default']) {\n module = module['default'];\n }\n\n return module;\n }\n}\n\nexport default Resolver;\n","export default function classFactory(klass) {\n return {\n create(injections) {\n if (typeof klass.extend === 'function') {\n return klass.extend(injections);\n } else {\n return klass;\n }\n },\n };\n}\n","// Analytics: Delivers events to analytics when interesting behaviors occur\n\nexport interface Logger {\n log(...args: unknown[]): void;\n info(...args: unknown[]): void;\n warn(...args: unknown[]): void;\n error(...args: unknown[]): void;\n time(label?: string): void;\n timeEnd(label?: string): void;\n}\n\ninterface AnalyticsGlobal {\n webData: { toolName: string };\n setWebEvent: (name: string, options: { toolName?: string; event?: string; payload?: string }) => void;\n}\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace globalThis {\n // eslint-disable-next-line no-var\n var AnalyticsAL: AnalyticsGlobal | undefined;\n }\n}\n\ninterface QueuedEvent {\n tool: string;\n evt: string;\n data?: string;\n}\n//------------------------ Local non-class functions ---------------------\n\nconst loadScript = (source: string, beforeEl?: Element, async = true, defer = true) => {\n // eslint-disable-next-line no-undef\n return new Promise((resolve, reject) => {\n let script: HTMLScriptElement | undefined = document.createElement('script');\n const scripts = document.getElementsByTagName('script');\n const lastScript = scripts && scripts.length ? scripts[scripts.length - 1] : undefined;\n const prior = beforeEl || lastScript?.nextElementSibling;\n\n script.async = async;\n script.defer = defer;\n\n function onloadHander(this: GlobalEventHandlers, event: Event): void {\n if (script) {\n script.onload = null;\n script = undefined;\n }\n event instanceof AbortSignal ? reject() : resolve('');\n }\n\n script.onload = onloadHander;\n\n script.src = source;\n if (prior) {\n prior.parentNode?.insertBefore(script, prior);\n } else {\n document.getElementsByTagName('body')[0]?.append(script);\n }\n });\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst poll = function (fn: () => any, interval: number, retries: number) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const checkCondition = function (resolve: (result: any) => void, reject: (e: Error) => void) {\n // If the condition is met, we're done!\n const result = fn();\n if (result) {\n resolve(result);\n }\n // If the condition isn't met but the timeout hasn't elapsed, go again\n else if (--retries > 0) {\n setTimeout(checkCondition, interval, resolve, reject);\n }\n // Didn't match and too much time, reject!\n else {\n reject(new Error('timed out for ' + fn));\n }\n };\n\n // eslint-disable-next-line no-undef\n return new Promise(checkCondition);\n};\n\nconst supplyDummySession = function (toolname: string, logger: Logger, message?: string) {\n // Supply placeholder for dummmy analytics for remainder of session\n globalThis.AnalyticsAL = {\n setWebEvent: function () {\n if (message) {\n logger.info(message);\n }\n },\n webData: { toolName: toolname },\n };\n};\n\nconst releaseDummySessionResources = function () {\n globalThis.AnalyticsAL = undefined;\n};\n\nconst analyticsLoaded = function () {\n return typeof globalThis.AnalyticsAL !== 'undefined' && globalThis.AnalyticsAL;\n};\n\nconst CONSOLE_LOGGER: Logger = {\n error(...args) {\n console.error(...args);\n }, // eslint-disable-line no-console\n warn(...args) {\n console.warn(...args);\n }, // eslint-disable-line no-console\n info(...args) {\n console.info(...args);\n }, // eslint-disable-line no-console\n log(...args) {\n console.error(...args);\n }, // eslint-disable-line no-console\n time(...args) {\n console.time(...args);\n }, // eslint-disable-line no-console\n timeEnd(...args) {\n console.timeEnd(...args);\n }, // eslint-disable-line no-console\n};\nconst INTERVAL = 200; //ms\nconst RETRIES = 30;\n// Analytics states\nexport const LOADING = 0;\nexport const ACTIVE = 1;\nexport const ABANDONED = -1;\n\n//-----------------------------Analytics class definition---------------------\n\nexport default class Analytics {\n toolname = '';\n analyticsUrl = '';\n logSuppressions = false;\n usesDummySession = false;\n state = LOADING;\n queue: Array = [];\n logger: Logger = CONSOLE_LOGGER;\n start(\n toolname: string,\n analyticsUrl: string,\n isSSR: boolean,\n isTesting: boolean,\n logSuppressions: boolean,\n logger?: Logger,\n ): void {\n this.toolname = toolname;\n this.logger = logger || this.logger;\n this.logSuppressions = logSuppressions;\n if (isSSR) {\n this.logger.info('Analytics turned off for SSR');\n this.usesDummySession = true;\n supplyDummySession(this.toolname, this.logger);\n this.state = ABANDONED;\n this._trackSessionStart();\n } else if (isTesting) {\n this.logger.info('Analytics turned off in test automation');\n this.usesDummySession = true;\n supplyDummySession(this.toolname, this.logger);\n this.state = ABANDONED;\n this._trackSessionStart();\n } else {\n this.logger.time('analyticsLoadTime');\n loadScript(analyticsUrl)\n .then(() => {\n // Execution of the Analytics URL from Adobe defines a global AnalyticsAL object ... eventually ... in theory\n poll(analyticsLoaded, INTERVAL, RETRIES)\n .then(() => {\n // if statement to satisfy TypeScript\n if (globalThis.AnalyticsAL) {\n this.logger.timeEnd('analyticsLoadTime');\n this.state = ACTIVE;\n globalThis.AnalyticsAL.webData.toolName = this.toolname;\n this._trackSessionStart();\n }\n })\n .catch(() => {\n this.logger.timeEnd('analyticsLoadTime');\n this.state = ABANDONED;\n this.logger.warn(\n `Analytics didn't start after a timeout of roughly ${(INTERVAL * RETRIES) / 1000} seconds.`,\n );\n this.usesDummySession = true;\n supplyDummySession(\n this.toolname,\n this.logger,\n 'Analytics event not delivered - analytics startup timed out',\n );\n this._trackSessionStart();\n });\n })\n .catch((error) => {\n this.logger.timeEnd('analyticsLoadTime');\n this.state = ABANDONED;\n this.logger.warn(`Analytics failed to load for ${location.origin}.`, error);\n this.usesDummySession = true;\n supplyDummySession(\n this.toolname,\n this.logger,\n 'Analytics event not delivered - analytics URL failed to load',\n );\n this._trackSessionStart();\n });\n }\n }\n stop() {\n if (this.usesDummySession) {\n releaseDummySessionResources();\n }\n this.queue = [];\n this.state = LOADING;\n }\n _trackSessionStart() {\n // Track session start\n // if statement to satisfy TypeScript\n if (globalThis.AnalyticsAL) {\n globalThis.AnalyticsAL.setWebEvent('toolStart', { toolName: this.toolname });\n this.logger.info(`ADOBEDTM: ${this.toolname} session start`);\n for (let q = 0, qlen = this.queue.length; q < qlen; q++) {\n const item = this.queue[q];\n if (item) {\n this.setWebEvent(item.tool, item.evt, item.data);\n }\n }\n }\n this.queue = [];\n }\n setWebEvent(toolName: string, eventName: string, eventData?: string) {\n if (this.state == LOADING) {\n this.queue.push({ tool: toolName, evt: eventName, data: eventData });\n } else {\n try {\n if (globalThis.AnalyticsAL) {\n globalThis.AnalyticsAL.setWebEvent('payload', { event: eventName, payload: eventData });\n if (!this.usesDummySession || this.logSuppressions) {\n this.logger.info(`ADOBEDTM: ${this.toolname} [${eventName}]`, eventData);\n }\n }\n } catch (e) {\n this.logger.error(`setWebEvent or subsequent logging failed unexpectedly for ${eventName}`, eventData);\n }\n }\n }\n}\n","import Service from '@ember/service';\nimport Analytics, { LOADING, ACTIVE, ABANDONED } from '../utils/analytics.ts';\nimport type { Logger } from '../utils/analytics';\nexport type { Logger };\n\nexport default class AnalyticsService extends Service {\n analytics: Analytics = new Analytics();\n\n start(\n toolname: string,\n url: string,\n isSSR: boolean,\n isTesting: boolean,\n logSuppressions: boolean,\n logger?: Logger,\n ): void {\n this.analytics.start(toolname, url, isSSR, isTesting, logSuppressions, logger);\n }\n willDestroy(): void {\n this.analytics.stop();\n }\n setWebEvent(toolName: string, eventName: string, eventData?: string): void {\n this.analytics.setWebEvent(toolName, eventName, eventData);\n }\n get isActive(): boolean {\n return this.analytics.state === ACTIVE;\n }\n get isAbandoned(): boolean {\n return this.analytics.state === ABANDONED;\n }\n get isLoading(): boolean {\n return this.analytics.state === LOADING;\n }\n}\ndeclare module '@ember/service' {\n interface Registry {\n 'aditools-analytics': AnalyticsService;\n }\n}\n","const SHOEBOX_DATA_NAME = 'siteconfig';\nconst SITECONFIG_URL = undefined;\n\nexport interface Logger {\n log(...args: unknown[]): void;\n info(...args: unknown[]): void;\n warn(...args: unknown[]): void;\n error(...args: unknown[]): void;\n time(label?: string): void;\n timeEnd(label?: string): void;\n}\n\nexport interface FastbootRequest {\n /** The cookies for the current request. */\n cookies: Record;\n\n /** The headers for the current request. */\n headers: Pick;\n\n /**\n * The host of the request that the current FastBoot server is responding to\n * (`example.com` or `localhost:3000`).\n * Retrieving host will error on 2 conditions:\n * 1. you do not have a hostWhitelist defined\n * 2. the Host header does not match an entry in your hostWhitelist\n */\n host: string;\n\n /** The query parameters for the current request, as a key-value pair. */\n queryParams: Record;\n\n /**\n * The path (`/` or `/some-path`) of the request that the current FastBoot\n * server is responding to.\n */\n path: string;\n\n /**\n * The protocol (`http:` or `https:`) of the request that the current\n * FastBoot server is responding to.\n */\n protocol: string;\n\n /**\n * The request type of the request that the current\n * FastBoot server is responding to.\n */\n method: string;\n\n /** Contains key-value pairs of data submitted in the request body. */\n body: Record;\n}\n\nexport interface Shoebox {\n put(key: string, value: unknown): void;\n retrieve(key: string): unknown;\n}\n\nexport interface FastBoot {\n /** Allows you to check if you are running within FastBoot. */\n isFastBoot: boolean;\n\n /**\n * A request object which exposes details about the current request being\n * handled by FastBoot.\n */\n request: FastbootRequest;\n\n /**\n * You can pass application state from the FastBoot rendered application to\n * the browser rendered application using a feature called the \"Shoebox\".\n * This allows you to leverage server API calls made by the FastBoot rendered\n * application on the browser rendered application. Thus preventing you from\n * duplicating work that the FastBoot application is performing. This should\n * result in a performance benefit for your browser application, as it does\n * not need to issue server API calls whose results are available from the\n * Shoebox.\n */\n shoebox: Shoebox;\n\n /**\n * By default, FastBoot waits for the `beforeModel`, `model`, and\n * `afterModel` hooks to resolve before sending the response back to the\n * client. If you have asynchrony that runs outside of those contexts, your\n * response may not reflect the state that you want.\n * To solve this, the `fastboot` service has `deferRendering` method that\n * accepts a promise. It will chain all promises passed to it, and the\n * FastBoot server will wait until all of these promises resolve before\n * sending the response to the client. These promises must be chained before\n * the rendering is complete after the model hooks. For example, if a\n * component that is rendered into the page makes an async call for data,\n * registering a promise to be resolved in its `init` hook would allow the\n * component to defer the rendering of the page.\n */\n deferRendering(promise: Promise): void;\n}\n\nconst _getURLLocale = function (defaultLocale: string, fastboot?: FastBoot): string {\n let path;\n if (fastboot && fastboot.isFastBoot) {\n // You're on the server - no default host\n path = fastboot.request.path;\n } else {\n path = window.location.pathname;\n }\n\n const pos = path.indexOf('/designtools/');\n if (pos !== -1) {\n const start = pos + '/designtools/'.length;\n return path.substring(start, start + 2);\n } else {\n return defaultLocale;\n }\n};\n\ninterface LocaleSet {\n full: string;\n adi: string;\n iso: string;\n cdp: string;\n}\n\ninterface SiteLocales {\n AdiLocale: string;\n IsoLocale: string;\n CdpLocale: string;\n FullLocale: string;\n}\n\nconst locales: Record = {\n en: { full: 'en-us', adi: 'en', iso: 'en', cdp: 'en' },\n zh: { full: 'zh-cn', adi: 'cn', iso: 'zh', cdp: 'zh' },\n cn: { full: 'zh-cn', adi: 'cn', iso: 'zh', cdp: 'zh' },\n ja: { full: 'ja-jp', adi: 'jp', iso: 'ja', cdp: 'jp' },\n jp: { full: 'ja-jp', adi: 'jp', iso: 'ja', cdp: 'jp' },\n ru: { full: 'ru-ru', adi: 'ru', iso: 'ru', cdp: 'ru' },\n};\n\nconst _getLocales = function (defaultLocale: string, supportedLocales: string[], fastboot?: FastBoot): SiteLocales {\n const urlLocale = _getURLLocale(defaultLocale, fastboot);\n const localeSet: LocaleSet | undefined = locales[urlLocale];\n const useDefault =\n !localeSet || (!supportedLocales.includes(localeSet.full) && !supportedLocales.includes(localeSet.iso));\n const foundLocale = locales[useDefault ? 'en' : urlLocale] as LocaleSet; // cannot be undefined\n return {\n AdiLocale: foundLocale.adi,\n IsoLocale: foundLocale.iso,\n CdpLocale: foundLocale.cdp,\n FullLocale: foundLocale.full,\n };\n};\n\nconst _getURL = function (url: string, fastboot: FastBoot | undefined, logger: Logger) {\n if (fastboot && fastboot.isFastBoot) {\n // You're on the server - no default host\n if (url[0] === '/') {\n let protocol = fastboot.request.protocol;\n if (!protocol) {\n protocol = 'http:';\n }\n let host = '---';\n try {\n host = fastboot.request.host;\n } catch (e) {\n logger.error(`Error getting FastBoot host: ${e}`);\n throw e;\n }\n return `${protocol}//${host}${url}`;\n } else {\n return url;\n }\n } else {\n // in browser\n return url;\n }\n};\n\nconst _fixLocalUrl = function (url: string, rootUrl: string) {\n const idx = url.indexOf('{root}');\n if (idx >= 0) {\n const prefix = url.substring(0, idx);\n const suffix = url.substring(idx + '{root}'.length);\n if (rootUrl.endsWith('/')) {\n return prefix + rootUrl + (suffix.startsWith('/') ? suffix.slice(1) : suffix);\n } else {\n return prefix + rootUrl + (suffix.startsWith('/') ? suffix : '/' + suffix);\n }\n }\n return url;\n};\n\nconst _replaceLocale = function (text: string, locales: SiteLocales) {\n if (locales.AdiLocale) {\n return text\n .replace('{0}', locales.AdiLocale)\n .replace('{adi}', locales.AdiLocale)\n .replace('{iso}', locales.IsoLocale)\n .replace('{cdp}', locales.CdpLocale)\n .replace('{full}', locales.FullLocale);\n } else {\n return text;\n }\n};\n\nconst _loadConfigFromJson = function (\n url: string,\n locales: SiteLocales,\n rootUrl: string,\n logger: Logger,\n fastboot?: FastBoot,\n) {\n let request;\n\n const _logger = logger\n ? logger\n : {\n info(...args: unknown[]) {\n console.info(...args);\n }, // eslint-disable-line no-console\n error(...args: unknown[]) {\n console.error(...args);\n }, // eslint-disable-line no-console\n };\n\n const _url =\n typeof SITECONFIG_URL !== 'undefined' && SITECONFIG_URL ? SITECONFIG_URL : _getURL(url, fastboot, logger); //eslint-disable-line no-undef\n const shoebox = fastboot ? fastboot.shoebox : null;\n\n if (fastboot && fastboot.isFastBoot) {\n _logger.info(`Loading site configuration from ${_url} in fastboot`);\n request = fetch(_url)\n .then((response) => {\n return response.json();\n })\n .then((config) => {\n Object.keys(config).forEach((item) => {\n config[item] = _fixLocalUrl(_replaceLocale(config[item], locales), rootUrl);\n });\n shoebox && shoebox.put(SHOEBOX_DATA_NAME, config);\n return config;\n })\n .catch((error) => {\n _logger.error(`Load of site configuration at ${_url} failed: ${error}`);\n throw error;\n });\n } else {\n const cache = shoebox && shoebox.retrieve(SHOEBOX_DATA_NAME);\n if (cache) {\n _logger.info(`Loading site configuration from shoebox in browser`);\n request = Promise.resolve(cache);\n } else {\n _logger.info(`Loading site configuration from ${_url} in browser`);\n request = fetch(_url)\n .then((response) => {\n return response.json();\n })\n .then((config) => {\n Object.keys(config).forEach((item) => {\n config[item] = _fixLocalUrl(_replaceLocale(config[item], locales), rootUrl);\n });\n return config;\n })\n .catch((error) => {\n _logger.error(`Load of site configuration at ${_url} failed: ${error}`);\n throw error;\n });\n }\n }\n\n return request;\n};\n\nexport function start(\n target: unknown,\n url: string,\n rootUrl: string,\n defaultLocale: string,\n supportedlocales: string[],\n logger: Logger,\n fastboot?: FastBoot,\n): Promise & SiteLocales> {\n const locales = _getLocales(defaultLocale, supportedlocales, fastboot);\n return _loadConfigFromJson(url, locales, rootUrl, logger, fastboot).then((data) => {\n data.AdiLocale = locales.AdiLocale;\n data.FullLocale = locales.FullLocale;\n data.IsoLocale = locales.IsoLocale;\n data.CdpLocale = locales.CdpLocale;\n Object.keys(data).forEach((item) => {\n Object.defineProperty(target, item, {\n get: function () {\n return data[item];\n },\n });\n });\n return data;\n });\n}\n","import Service from '@ember/service';\nimport { start as utils_start } from '../utils/aditools-site.ts';\nimport type { Logger, FastBoot } from '../utils/aditools-site';\nexport type { Logger };\n\n// Site Configuration Service - Delivers server-side site-based configuration data to the client\nexport default class AditoolsSite extends Service {\n start(\n url: string,\n rootUrl: string,\n defaultLocale: string,\n supportedlocales: string[],\n logger: Logger,\n fastboot?: FastBoot,\n ): Promise> {\n return utils_start(this, url, rootUrl, defaultLocale, supportedlocales, logger, fastboot);\n }\n declare AdiLocale: string;\n declare CdpLocale: string;\n declare FullLocale: string;\n declare IsoLocale: string;\n [name: string]: unknown;\n}\n","import { capabilities } from '@ember/modifier';\nimport { destroy } from '@ember/destroyable';\nimport type Owner from '@ember/owner';\n\nimport type ClassBasedModifier from './modifier';\nimport type { ArgsFor, ElementFor } from '../signature';\n\n/**\n * The state bucket used throughout the life-cycle of the modifier. Basically a\n * state *machine*, where the framework calls us with the version we hand back\n * to it at each phase. The two states are the two `extends` versions of this\n * below.\n *\n * @internal\n */\ninterface State {\n instance: ClassBasedModifier;\n}\n\n/**\n * The `State` after calling `createModifier`, and therefore the state available\n * at the start of `InstallModifier`.\n * @internal\n */\ninterface CreatedState extends State {\n element: null;\n}\n\n/**\n * The `State` after calling `installModifier`, and therefore the state\n * available in all `updateModifier` calls and in `destroyModifier`.\n * @internal\n */\ninterface InstalledState extends State {\n element: ElementFor;\n}\n\n// Wraps the unsafe (b/c it mutates, rather than creating new state) code that\n// TS does not yet understand.\nfunction installElement(\n state: CreatedState,\n element: ElementFor,\n): InstalledState {\n // SAFETY: this cast represents how we are actually handling the state machine\n // transition: from this point forward in the lifecycle of the modifier, it\n // always behaves as `InstalledState`. It is safe because, and *only*\n // because, we immediately initialize `element`. (We cannot create a new state\n // from the old one because the modifier manager API expects mutation of a\n // single state bucket rather than updating it at hook calls.)\n const installedState = state as State as InstalledState;\n installedState.element = element;\n return installedState;\n}\n\nexport default class ClassBasedModifierManager {\n capabilities = capabilities('3.22');\n\n constructor(private owner: Owner) {}\n\n createModifier(\n modifierClass: typeof ClassBasedModifier,\n args: ArgsFor,\n ): CreatedState {\n const instance = new modifierClass(this.owner, args);\n return { instance, element: null };\n }\n\n installModifier(\n createdState: CreatedState,\n element: ElementFor,\n args: ArgsFor,\n ): void {\n const state = installElement(createdState, element);\n state.instance.modify(element, args.positional, args.named);\n }\n\n updateModifier(state: InstalledState, args: ArgsFor): void {\n state.instance.modify(state.element, args.positional, args.named);\n }\n\n destroyModifier({ instance }: InstalledState): void {\n destroy(instance);\n }\n}\n","import { setOwner } from '@ember/application';\nimport { setModifierManager } from '@ember/modifier';\nimport type Owner from '@ember/owner';\nimport Manager from './modifier-manager.ts';\nimport type {\n ElementFor,\n ArgsFor,\n DefaultSignature,\n PositionalArgs,\n NamedArgs,\n} from '../signature';\nimport type Opaque from '../opaque';\n\n// Preserve the signature on a class-based modifier, so it can be plucked off\n// later (by e.g. Glint), using interface merging with an opaque item to\n// preserve it in the type system. The fact that it's an empty interface is\n// actually the point: it *only* hooks the type parameter into the opaque\n// (nominal) type. Note that this is distinct from the function-based modifier\n// type intentionally, because it is actually the static class side of a\n// class-based modifier which corresponds to the result of calling `modifier()`\n// with a callback defining a function-based modifier.\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport default interface ClassBasedModifier\n extends Opaque {}\n\n/**\n * A base class for modifiers which need more capabilities than function-based\n * modifiers. Useful if, for example:\n *\n * 1. You need to inject services and access them\n * 2. You need fine-grained control of updates, either for performance or\n * convenience reasons, and don't want to teardown the state of your modifier\n * every time only to set it up again.\n * 3. You need to store some local state within your modifier.\n *\n * The lifecycle hooks of class modifiers are tracked. When they run, they any\n * values they access will be added to the modifier, and the modifier will\n * update if any of those values change.\n */\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nexport default class ClassBasedModifier {\n // `args` is passed here for the sake of subclasses to have access to args in\n // their constructors while having constructors which are properly asssignable\n // for the superclass.\n /**\n *\n * @param owner An instance of an Owner (for service injection etc.).\n * @param args The positional and named arguments passed to the modifier.\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n constructor(owner: Owner, args: ArgsFor) {\n setOwner(this, owner);\n }\n\n /**\n * Called when the modifier is installed and any time any tracked state used\n * in the modifier changes.\n *\n * If you need to do first-time-only setup, create a class field representing\n * the initialization state and check it when running the hook. That is also\n * where and when you should use `registerDestructor` for any teardown you\n * need to do. For example:\n *\n * ```js\n * function disconnect(instance) {\n * instance.observer?.disconnect();\n * }\n *\n * class IntersectionObserver extends Modifier {\n * observer;\n *\n * constructor(owner, args) {\n * super(owner, args);\n * registerDestructor(this, disconnect);\n * }\n *\n * modify(element, callback, options) {\n * disconnect(this);\n *\n * this.observer = new IntersectionObserver(callback, options);\n * this.observer.observe(element);\n * }\n * }\n * ```\n *\n * @param element The element to which the modifier is applied.\n * @param positional The positional arguments to the modifier.\n * @param named The named arguments to the modifier.\n */\n modify(\n /* eslint-disable @typescript-eslint/no-unused-vars */\n element: ElementFor,\n positional: PositionalArgs,\n named: NamedArgs,\n /* eslint-enable @typescript-eslint/no-unused-vars */\n ): void {\n /* no op, for subclassing */\n }\n}\n\nsetModifierManager((owner) => new Manager(owner), ClassBasedModifier);\n","import { setModifierManager } from '@ember/modifier';\nimport type {\n ElementFor,\n EmptyObject,\n NamedArgs,\n PositionalArgs,\n} from '../signature';\nimport type Modifier from '../class-based/modifier';\nimport FunctionBasedModifierManager from './modifier-manager.ts';\n\n// Provide a singleton manager.\nconst MANAGER = new FunctionBasedModifierManager();\n\n// This type exists to provide a non-user-constructible, non-subclassable\n// type representing the conceptual \"instance type\" of a function modifier.\n// The abstract field of type `never` prevents subclassing in userspace of\n// the value returned from `modifier()`. By extending `Modifier`, any\n// augmentations of the `Modifier` type performed by tools like Glint will\n// also apply to function-based modifiers as well.\nexport declare abstract class FunctionBasedModifierInstance<\n S,\n> extends Modifier {\n protected abstract __concrete__: never;\n}\n\n// This provides a type whose only purpose here is to represent the runtime\n// type of a function-based modifier: a virtually opaque item. The fact that it's\n// a bare constructor type allows `modifier()` to preserve type parameters from\n// a generic function it's passed, and by making it abstract and impossible to\n// subclass (see above) we prevent users from attempting to instantiate the return\n// value from a `modifier()` call.\nexport type FunctionBasedModifier =\n abstract new () => FunctionBasedModifierInstance;\n\n/**\n * The (optional) return type for a modifier which needs to perform some kind of\n * cleanup or teardown -- for example, removing an event listener from an\n * element besides the one passed into the modifier.\n */\nexport type Teardown = () => unknown;\n\n/**\n * An API for writing simple modifiers.\n *\n * This function runs the first time when the element the modifier was applied\n * to is inserted into the DOM, and it *autotracks* while running. Any values\n * that it accesses will be tracked, including any of its arguments that it\n * accesses, and if any of them changes, the function will run again.\n *\n * **Note:** this will *not* automatically rerun because an argument changes. It\n * will only rerun if it is *using* that argument (the same as with auto-tracked\n * state in general).\n *\n * The modifier can also optionally return a *destructor*. The destructor\n * function will be run just before the next update, and when the element is\n * being removed entirely. It should generally clean up the changes that the\n * modifier made in the first place.\n *\n * @param fn The function which defines the modifier.\n */\n// This overload allows users to write types directly on the callback passed to\n// the `modifier` function and infer the resulting type correctly.\nexport default function modifier<\n E extends Element,\n P extends unknown[],\n N = EmptyObject,\n>(\n fn: (element: E, positional: P, named: N) => void | Teardown,\n): FunctionBasedModifier<{\n Args: {\n Positional: P;\n Named: N;\n };\n Element: E;\n}>;\n\n/**\n * An API for writing simple modifiers.\n *\n * This function runs the first time when the element the modifier was applied\n * to is inserted into the DOM, and it *autotracks* while running. Any values\n * that it accesses will be tracked, including any of its arguments that it\n * accesses, and if any of them changes, the function will run again.\n *\n * **Note:** this will *not* automatically rerun because an argument changes. It\n * will only rerun if it is *using* that argument (the same as with auto-tracked\n * state in general).\n *\n * The modifier can also optionally return a *destructor*. The destructor\n * function will be run just before the next update, and when the element is\n * being removed entirely. It should generally clean up the changes that the\n * modifier made in the first place.\n *\n * @param fn The function which defines the modifier.\n */\n// This overload allows users to provide a `Signature` type explicitly at the\n// modifier definition site, e.g. `modifier((el, pos, named) => {...})`.\n// **Note:** this overload must appear second, since TS' inference engine will\n// not correctly infer the type of `S` here from the types on the supplied\n// callback.\nexport default function modifier(\n fn: (\n element: ElementFor,\n positional: PositionalArgs,\n named: NamedArgs,\n ) => void | Teardown,\n): FunctionBasedModifier<{\n Element: ElementFor;\n Args: {\n Named: NamedArgs;\n Positional: PositionalArgs;\n };\n}>;\n\n// This is the runtime signature; it performs no inference whatsover and just\n// uses the simplest version of the invocation possible since, for the case of\n// setting it on the modifier manager, we don't *need* any of that info, and\n// the two previous overloads capture all invocations from a type perspective.\nexport default function modifier(\n fn: (\n element: Element,\n positional: unknown[],\n named: object,\n ) => void | Teardown,\n options?: {\n name: string;\n },\n): FunctionBasedModifier<{\n Element: Element;\n Args: {\n Named: object;\n Positional: unknown[];\n };\n}> {\n fn.toString = () => options?.name || fn.name;\n // SAFETY: the cast here is a *lie*, but it is a useful one. The actual return\n // type of `setModifierManager` today is `void`; we pretend it actually\n // returns an opaque `Modifier` type so that we can provide a result from this\n // type which is useful to TS-aware tooling (e.g. Glint).\n return setModifierManager(\n () => MANAGER,\n fn,\n ) as unknown as FunctionBasedModifier<{\n Element: Element;\n Args: {\n Named: object;\n Positional: unknown[];\n };\n }>;\n}\n\n/**\n * @internal\n */\nexport type FunctionBasedModifierDefinition = (\n element: ElementFor,\n positional: PositionalArgs,\n named: NamedArgs,\n) => void | Teardown;\n","import { capabilities } from '@ember/modifier';\nimport type { FunctionBasedModifierDefinition, Teardown } from './modifier';\nimport type { ArgsFor, ElementFor } from '../signature';\n\ninterface State {\n instance: FunctionBasedModifierDefinition;\n}\n\ninterface CreatedState extends State {\n element: null;\n}\n\ninterface InstalledState extends State {\n element: ElementFor;\n teardown?: Teardown;\n}\n\n// Wraps the unsafe (b/c it mutates, rather than creating new state) code that\n// TS does not yet understand.\nfunction installElement(\n state: CreatedState,\n element: ElementFor,\n): InstalledState {\n // SAFETY: this cast represents how we are actually handling the state machine\n // transition: from this point forward in the lifecycle of the modifier, it\n // always behaves as `InstalledState`. It is safe because, and *only*\n // because, we immediately initialize `element`. (We cannot create a new state\n // from the old one because the modifier manager API expects mutation of a\n // single state bucket rather than updating it at hook calls.)\n const installedState = state as State as InstalledState;\n installedState.element = element;\n return installedState;\n}\n\nexport default class FunctionBasedModifierManager {\n capabilities = capabilities('3.22');\n\n createModifier(\n instance: FunctionBasedModifierDefinition,\n ): CreatedState {\n return { element: null, instance };\n }\n\n installModifier(\n createdState: CreatedState,\n element: ElementFor,\n args: ArgsFor,\n ): void {\n const state = installElement(createdState, element);\n\n const { positional, named } = args;\n const teardown = createdState.instance(element, positional, named);\n if (typeof teardown === 'function') {\n state.teardown = teardown;\n }\n }\n\n updateModifier(state: InstalledState, args: ArgsFor): void {\n if (typeof state.teardown === 'function') {\n state.teardown();\n }\n\n const teardown = state.instance(state.element, args.positional, args.named);\n if (typeof teardown === 'function') {\n state.teardown = teardown;\n }\n }\n\n destroyModifier(state: InstalledState): void {\n if (typeof state.teardown === 'function') {\n state.teardown();\n }\n }\n\n getDebugName(state: InstalledState): string {\n return state.instance.toString();\n }\n\n getDebugInstance(state: InstalledState): InstalledState {\n return state;\n }\n}\n","import { scheduleOnce } from '@ember/runloop';\nimport Service, { inject as service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport { assert } from '@ember/debug';\nimport type ApplicationInstance from '@ember/application/instance';\nimport type RouterService from '@ember/routing/router-service';\nimport type Owner from '@ember/owner';\n\nimport type {\n FastBootDocument,\n PageTitleToken,\n PageTitleConfig,\n} from '../private-types.ts';\n\nconst isFastBoot = typeof FastBoot !== 'undefined';\n\nconst RouterEvent = {\n ROUTE_DID_CHANGE: 'routeDidChange',\n} as const;\n\nfunction hasResolveRegistration(owner: Owner): owner is ApplicationInstance {\n return `resolveRegistration` in owner;\n}\n\nfunction hasPageTitleConfig(\n fromEnv: unknown,\n): fromEnv is { pageTitle: PageTitleConfig } {\n if (typeof fromEnv !== 'object') return false;\n if (fromEnv === null) return false;\n\n // all properties on the pageTitle config are optional,\n // so we can't check for more\n return 'pageTitle' in fromEnv;\n}\n\nconst configKeys = ['separator', 'prepend', 'replace'] as const;\n\n/**\n @class page-title\n @extends Ember.Service\n */\nexport default class PageTitleService extends Service {\n @service('router') declare router: RouterService;\n\n // in fastboot context \"document\" is instance of\n // ember-fastboot/simple-dom document\n @service('-document') private declare document: FastBootDocument;\n\n tokens: PageTitleToken[] = [];\n\n _defaultConfig: PageTitleConfig = {\n // The default separator to use between tokens.\n separator: ' | ',\n\n // The default prepend value to use.\n prepend: true,\n\n // The default replace value to use.\n replace: null,\n };\n\n constructor(owner: Owner) {\n super(owner);\n this._validateExistingTitleElement();\n\n if (hasResolveRegistration(owner)) {\n const config = owner.resolveRegistration('config:environment');\n\n if (hasPageTitleConfig(config)) {\n configKeys.forEach((key) => {\n if (!isEmpty(config.pageTitle[key])) {\n const configValue = config.pageTitle[key];\n\n // SAFETY: how is one supposed to iterate over keys for an object and have it\n // known to the compiler that both objects, having the same shape,\n // will have the same type per-value?\n // as-is, the `configValue` is a union of all value-types from the object.\n (this._defaultConfig[key] as PageTitleConfig[typeof key]) =\n configValue;\n }\n });\n }\n }\n this.router.on(RouterEvent.ROUTE_DID_CHANGE, this.scheduleTitleUpdate);\n }\n\n applyTokenDefaults(token: PageTitleToken) {\n const defaultSeparator = this._defaultConfig.separator;\n const defaultPrepend = this._defaultConfig.prepend;\n const defaultReplace = this._defaultConfig.replace;\n\n token.previous ??= null;\n token.next ??= null;\n\n if (token.separator == null) {\n token.separator = defaultSeparator;\n }\n\n if (token.prepend == null && defaultPrepend != null) {\n token.prepend = defaultPrepend;\n }\n\n if (token.replace == null && defaultReplace != null) {\n token.replace = defaultReplace;\n }\n }\n\n inheritFromPrevious(token: PageTitleToken) {\n const previous = token.previous;\n if (previous) {\n if (token.separator == null) {\n token.separator = previous.separator;\n }\n\n if (token.prepend == null) {\n token.prepend = previous.prepend;\n }\n }\n }\n\n push(token: PageTitleToken) {\n const tokenForId = this._findTokenById(token.id);\n if (tokenForId) {\n const index = this.tokens.indexOf(tokenForId);\n const tokens = [...this.tokens];\n const previous = tokenForId.previous;\n token.previous = previous;\n token.next = tokenForId.next;\n this.inheritFromPrevious(token);\n this.applyTokenDefaults(token);\n\n tokens.splice(index, 1, token);\n this.tokens = tokens;\n return;\n }\n\n const previous = this.tokens.slice(-1)[0];\n if (previous) {\n token.previous = previous ?? null;\n previous.next = token;\n this.inheritFromPrevious(token);\n }\n\n this.applyTokenDefaults(token);\n this.tokens = [...this.tokens, token];\n }\n\n remove(id: PageTitleToken['id']) {\n const token = this._findTokenById(id);\n\n if (!token) return;\n\n const { next, previous } = token;\n if (next) {\n next.previous = previous;\n }\n\n if (previous) {\n previous.next = next;\n }\n\n token.previous = token.next = null;\n\n const tokens = [...this.tokens];\n tokens.splice(tokens.indexOf(token), 1);\n this.tokens = tokens;\n }\n\n get visibleTokens(): PageTitleToken[] {\n const tokens = this.tokens;\n let i = tokens ? tokens.length : 0;\n const visible = [];\n while (i--) {\n const token = tokens[i];\n\n if (!token) continue;\n\n if (token.replace) {\n visible.unshift(token);\n break;\n } else {\n visible.unshift(token);\n }\n }\n return visible;\n }\n\n get sortedTokens(): PageTitleToken[] {\n const visible = this.visibleTokens;\n if (!visible) return [];\n\n let appending = true;\n let group: PageTitleToken[] = [];\n const groups = [group];\n const frontGroups: PageTitleToken[] = [];\n\n visible.forEach((token) => {\n if (token.front) {\n frontGroups.unshift(token);\n } else if (token.prepend) {\n if (appending) {\n appending = false;\n group = [];\n groups.push(group);\n }\n const lastToken = group[0];\n if (lastToken) {\n token = { ...token };\n token.separator = lastToken.separator;\n }\n group.unshift(token);\n } else {\n if (!appending) {\n appending = true;\n group = [];\n groups.push(group);\n }\n group.push(token);\n }\n });\n\n return frontGroups.concat(groups.reduce((E, group) => E.concat(group), []));\n }\n\n scheduleTitleUpdate = () => {\n scheduleOnce('afterRender', this, this._updateTitle);\n };\n\n toString(): string {\n const tokens = this.sortedTokens;\n const title = [];\n\n for (let i = 0, len = tokens.length; i < len; i++) {\n const token = tokens[i];\n if (!token) continue;\n\n if (token.title) {\n title.push(token.title);\n if (i + 1 < len) {\n title.push(token.separator);\n }\n }\n }\n\n return title.join('');\n }\n\n willDestroy() {\n super.willDestroy();\n this.router.off(RouterEvent.ROUTE_DID_CHANGE, this.scheduleTitleUpdate);\n }\n\n private _updateTitle() {\n const toBeTitle = this.toString();\n\n if (isFastBoot) {\n this.updateFastbootTitle(toBeTitle);\n } else {\n /**\n * When rendering app with \"?fastboot=false\" (http://ember-fastboot.com/docs/user-guide#disabling-fastboot)\n * We will not have element present in DOM.\n *\n * But this is fine as by HTML spec,\n * one is created upon assigning \"document.title\" value;\n *\n * https://html.spec.whatwg.org/multipage/dom.html#dom-tree-accessors\n */\n this.document.title = toBeTitle;\n }\n\n this.titleDidUpdate(toBeTitle);\n }\n\n /**\n * Validate if there's more than one title element present.\n *\n * Example: ember-cli-head can cause conflicting updates.\n * @private\n */\n private _validateExistingTitleElement() {\n if (isFastBoot) {\n return;\n }\n assert(\n '[ember-page-title]: Multiple title elements found. Check for other addons like ember-cli-head updating as well.',\n document.head.querySelectorAll('title').length <= 1,\n );\n }\n\n /**\n * Find token by id\n *\n * @param {String} id\n * @private\n */\n private _findTokenById(id: PageTitleToken['id']) {\n return this.tokens.find((token) => token.id === id);\n }\n\n updateFastbootTitle(toBeTitle: string) {\n if (!isFastBoot) {\n return;\n }\n const headElement = this.document.head;\n const headChildNodes = headElement.childNodes;\n\n // Remove existing title elements from previous render cycle\n for (let i = 0; i < headChildNodes.length; i++) {\n const node = headChildNodes[i];\n if (!node) continue;\n\n if (node.nodeName.toLowerCase() === 'title') {\n headElement.removeChild(node);\n }\n }\n\n // Add title element with latest value\n const titleEl = this.document.createElement('title');\n const titleContents = this.document.createTextNode(toBeTitle);\n titleEl.appendChild(titleContents);\n headElement.appendChild(titleEl);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n titleDidUpdate(_title: string) {\n // default is empty, meant to be overriden by user if desired\n }\n}\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","export default function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {\n var desc = {};\n Object.keys(descriptor).forEach(function (key) {\n desc[key] = descriptor[key];\n });\n desc.enumerable = !!desc.enumerable;\n desc.configurable = !!desc.configurable;\n if ('value' in desc || desc.initializer) {\n desc.writable = true;\n }\n desc = decorators.slice().reverse().reduce(function (desc, decorator) {\n return decorator(target, property, desc) || desc;\n }, desc);\n if (context && desc.initializer !== void 0) {\n desc.value = desc.initializer ? desc.initializer.call(context) : void 0;\n desc.initializer = undefined;\n }\n if (desc.initializer === void 0) {\n Object.defineProperty(target, property, desc);\n desc = null;\n }\n return desc;\n}","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}","import toPropertyKey from \"./toPropertyKey.js\";\nexport default function _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function _toPropertyKey(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}","import _typeof from \"./typeof.js\";\nexport default function _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}","export default function _initializerDefineProperty(target, property, descriptor, context) {\n if (!descriptor) return;\n Object.defineProperty(target, property, {\n enumerable: descriptor.enumerable,\n configurable: descriptor.configurable,\n writable: descriptor.writable,\n value: descriptor.initializer ? descriptor.initializer.call(context) : void 0\n });\n}"],"names":["createTemplateFactory","GlimmerComponent","GlimmerComponentBase","setComponentManager","owner","GlimmerComponentManager","_class","_descriptor","Constants","urls","home","company","products","applications","designCenter","education","support","sitemap","legal","accessibility","privacyPolicy","privacySettings","cookieSettings","THelper","Helper","constructor","r","super","arguments","Object","defineProperty","this","enumerable","configurable","writable","value","initializer","call","e","t","i","Symbol","toPrimitive","TypeError","String","_toPrimitive","_toPropertyKey","_defineProperty","intl","onLocaleChanged","recompute","compute","_ref","namedOptions","positionalOptions","options","assign","isEmpty","allowEmpty","Error","prototype","service","n","a","keys","forEach","slice","reverse","reduce","TEMPLATE","AditoolsHeader","Component","args","_siteURL","siteURL","_locale","locale","title","logoClass","logo","companyURL","replace","productsURL","applicationsURL","designCenterURL","educationURL","supportURL","homeURL","setComponentTemplate","consumeArgs","noop","destroyModifier","modifier","willRemove","willDestroy","positional","named","pos","length","values","ClassBasedModifierManager","capabilities","createModifier","factoryOrClass","registerDestructor","instance","implementsModify","_implementsModify","element","installModifier","createdState","state","installedState","installElement","Element","installElementOnInstance","modify","didReceiveArguments","didInstall","updateModifier","Args","updateArgsOnInstance","didUpdateArguments","destroy","ClassBasedModifier","setOwner","isDestroying","isDestroyed","get","setModifierManager","Manager","FunctionBasedModifierManager","eager","teardown","EAGER_MANAGER","LAZY_MANAGER","fn","undefined","__export","c","decorateClass","f","decorateFieldV1","g","decorateFieldV2","initializeDeferredDecorator","m","decorateMethodV1","decorateMethodV2","p","decoratePOJO","deferred","WeakMap","target","prop","decorators","desc","decorator","proto","map","Map","set","deferDecorator","getOwnPropertyDescriptor","cursor","_deferred$get","findDeferredDecorator","accum","pojo","decorated","type","decoratePojoField","_Object$getOwnPropert","truthConvert","result","truthy","isArray","helper","params","len","min","Math","max","round","createCoords","floor","v","x","y","oppositeSideMap","left","right","bottom","top","oppositeAlignmentMap","start","end","clamp","evaluate","param","getSide","placement","split","getAlignment","getOppositeAxis","axis","getAxisLength","getSideAxis","includes","getAlignmentAxis","getOppositeAlignmentPlacement","alignment","getOppositePlacement","side","rectToClientRect","rect","width","height","computeCoordsFromPlacement","rtl","reference","floating","sideAxis","alignmentAxis","alignLength","isVertical","commonX","commonY","commonAlign","coords","async","detectOverflow","_await$platform$isEle","platform","rects","elements","strategy","boundary","rootBoundary","elementContext","altBoundary","padding","paddingObject","expandPaddingObject","getPaddingObject","clippingClientRect","getClippingRect","isElement","contextElement","getDocumentElement","offsetParent","getOffsetParent","offsetScale","getScale","elementClientRect","convertOffsetParentRelativeRectToViewportRelativeRect","getNodeName","node","isNode","nodeName","toLowerCase","getWindow","_node$ownerDocument","ownerDocument","defaultView","window","document","documentElement","Node","isHTMLElement","HTMLElement","isShadowRoot","ShadowRoot","isOverflowElement","overflow","overflowX","overflowY","display","getComputedStyle","test","isTableElement","isTopLayer","some","selector","matches","isContainingBlock","elementOrCss","webkit","isWebKit","css","transform","perspective","containerType","backdropFilter","filter","willChange","contain","CSS","supports","isLastTraversableNode","getNodeScroll","scrollLeft","scrollTop","scrollX","scrollY","getParentNode","assignedSlot","parentNode","host","getNearestOverflowAncestor","body","getOverflowAncestors","list","traverseIframes","_node$ownerDocument2","scrollableAncestor","isBody","win","frameElement","getFrameElement","concat","visualViewport","parent","getPrototypeOf","getCssDimensions","parseFloat","hasOffset","offsetWidth","offsetHeight","shouldFallback","$","unwrapElement","domElement","getBoundingClientRect","Number","isFinite","noOffsets","getVisualOffsets","offsetLeft","offsetTop","includeScale","isFixedStrategy","clientRect","scale","visualOffsets","isFixed","floatingOffsetParent","shouldAddVisualOffsets","offsetWin","currentWin","currentIFrame","iframeScale","iframeRect","clientLeft","paddingLeft","clientTop","paddingTop","getWindowScrollBarX","getClientRectFromClippingAncestor","clippingAncestor","html","clientWidth","clientHeight","visualViewportBased","getViewportRect","scroll","scrollWidth","scrollHeight","direction","getDocumentRect","getInnerBoundingClientRect","hasFixedPositionAncestor","stopNode","position","getRectRelativeToOffsetParent","isOffsetParentAnElement","offsets","offsetRect","isStaticPositioned","getTrueOffsetParent","polyfill","svgOffsetParent","currentNode","getContainingBlock","topLayer","clippingAncestors","cache","cachedResult","el","currentContainingBlockComputedStyle","elementIsFixed","computedStyle","currentNodeIsContaining","ancestor","getClippingElementAncestors","_c","firstClippingAncestor","clippingRect","accRect","getElementRects","data","getOffsetParentFn","getDimensionsFn","getDimensions","floatingDimensions","getClientRects","Array","from","isRTL","ToggleEvent","Event","oldState","newState","init","popoverToggleTaskQueue","queuePopoverToggleEventTask","setTimeout","has","dispatchEvent","cancelable","globalThis","HTMLDialogElement","topLayerElements","autoPopoverList","visibilityState","getPopoverVisibilityState","popover","popoverInvoker","checkPopoverValidity","expectedToBeShowing","isConnected","hasAttribute","fullscreenElement","getStackPosition","indexOf","topMostAutoPopover","document2","documentPopovers","delete","getRootNode","nearestInclusiveOpenPopover","parentElement","Document","isFocusable","focusTarget","hidden","HTMLButtonElement","HTMLInputElement","HTMLSelectElement","HTMLTextAreaElement","HTMLOptGroupElement","HTMLOptionElement","HTMLFieldSetElement","disabled","HTMLAnchorElement","href","tabIndex","previouslyFocusedElements","showPopover","shouldRestoreFocus","originalType","getAttribute","newPopover","popoverPositions","topMostPopoverAncestor2","candidate","candidateAncestor","candidatePosition","checkAncestor","topMostPopoverAncestor","hideAllPopoversUntil","originallyFocusedElement","activeElement","_focusDelegate","classList","add","Set","shadowRoot","delegatesFocus","whereToLook","autoFocusDelegate","querySelector","slots","querySelectorAll","slot","assignedElements","flatten","walker","createTreeWalker","NodeFilter","SHOW_ELEMENT","descendant","nextNode","focusDelegate","focus","setInvokerAriaExpanded","hidePopover","_topLayerElements$get","_autoPopoverList$get","focusPreviousElement","fireEvents","remove","previouslyFocusedElement","closeAllOpenPopovers","endpoint","lastToHide","foundEndpoint","_autoPopoverList$get2","size","popoverPointerDownTargets","lightDismissOpenPopovers","event","isTrusted","composedPath","clickedPopover","invokerPopover","nodePopover","popoverTargetElement","nearestInclusiveTargetPopoverForInvoker","topMostClickedPopover","sameTarget","initialAriaExpandedValue","force","setAttribute","initialValue","removeAttribute","ShadowRoot2","patchSelectorFn","object","name","mapper","original","nonEscapedPopoverSelector","styles","popoverStyleSheet","injectStyles","root","CSSStyleSheet","replaceSync","sheet","createElement","textContent","head","prepend","adoptedStyleSheets","rewriteSelector","_selector","DocumentFragment","defineProperties","togglePopover","originalAttachShadow","attachShadow","originalAttachInternals","attachInternals","internals","popoverTargetAssociatedElements","applyPopoverInvokerElementMixin","ElementClass","targetElement","localName","form","idref","getElementById","popoverTargetAction","addEventListener","invoker","closest","visibility","popoverTargetAttributeActivationBehavior","preventDefault","key","defaultPrevented","apply","positioner","_","offset$1","flip","flip$1","positionPopover","_placement","_padding","_offset","_flip","style","middleware","push","_middlewareData$offse","_middlewareData$arrow","middlewareData","diffCoords","mainAxisMulti","crossAxisMulti","rawValue","mainAxis","crossAxis","convertValueToCoords","offset","arrow","alignmentOffset","_middlewareData$flip","initialPlacement","checkMainAxis","checkCrossAxis","fallbackPlacements","specifiedFallbackPlacements","fallbackStrategy","fallbackAxisSideDirection","flipAlignment","detectOverflowOptions","initialSideAxis","isBasePlacement","oppositePlacement","getExpandedPlacements","hasFallbackAxisSideDirection","isStart","lr","rl","tb","bt","getSideList","getOppositeAxisPlacements","placements","overflows","overflowsData","sides","mainAlignmentSide","getAlignmentSides","every","_middlewareData$flip2","_overflowsData$filter","nextIndex","index","nextPlacement","reset","resetPlacement","d","sort","b","_overflowsData$filter2","currentSideAxis","acc","limiter","mainAxisCoord","crossAxisCoord","maxSide","limitedCoords","shift","computePosition","mergedOptions","platformWithCache","config","validMiddleware","Boolean","statefulPlacement","resetCount","nextX","nextY","computePosition$1","then","_ref2","removeEventListener","hidePopoverOnClickOutside","globalClickListener","container","contains","AditoolsToolbar","hideDropdown","_currentFocus$closest","currentTarget","currentFocus","relatedTarget","action","Cache","limit","func","store","hits","misses","purge","clear","STRING_DASHERIZE_REGEXP","STRING_CAMELIZE_REGEXP_1","decamelize","str","DECAMELIZE_CACHE","STRING_CAMELIZE_REGEXP_2","STRING_CLASSIFY_REGEXP_1","_match","_separator","chr","toUpperCase","match","STRING_CLASSIFY_REGEXP_2","STRING_CLASSIFY_REGEXP_3","STRING_UNDERSCORE_REGEXP_1","replace1","replace2","initialChar","parts","join","STRING_UNDERSCORE_REGEXP_2","UNDERSCORE_CACHE","STRING_CAPITALIZE_REGEXP","STRING_DECAMELIZE_REGEXP","_isActive","AditoolsToolbarAction","_classPrivateFieldInitSpec","qaName","label","activate","isActive","onOpen","select","onSubmit","close","onClose","_AditoolsToolbarAction","tracked","AditoolsRenderer","inserted","destroying","_lastFocus","AditoolsDialog","_suppressFocusTrap","suppressFocusTrap","hideCloseX","_enableFocusTrap","_hideCloseX","_hideTitlebar","hideTitlebar","closeDialog","dialogElement","guardCancel","dialogClosed","lastFocus","showModal","_AditoolsDialog","_intl","_name","_email","_feedback","AditoolsFeedbackDialog","_model","model","email","feedback","isDisabled","validate","onValueChanged","fieldName","id","toString","fieldProperties","hasOwnProperty","fieldPropertySafe","giveFeedback","submitFeedback","_AditoolsFeedbackDialog","inject","AditoolsContentWrap","templateOnlyComponent","aditoolsContentWrap","templateOnly","resize","resizeListener","resized","ToolSelection","scope","CaptionedLink","_dec","_initializerDefineProperty","_descriptor2","_descriptor3","_descriptor4","_descriptor5","displayWidth","isTextHidden","windowHeight","isTextAdjust","scdBranding","isSCD","toolConfigData","toolSettings","icon","url","siteconfig","SignalChainDesignerUrl","NoiseUrl","tooltip","innerHeight","_applyDecoratedDescriptor","AditoolsFooter","sitemapURL","legalURL","accessibilityURL","privacyPolicyURL","privacySettingsURL","cookieSettingsURL","doNotAddToUrl","AditoolsSystemDialog","_message","message","_title","dontClose","AditoolsHelpDialog","_closeButtonText","closeButtonText","_AditoolsHelpDialog","aditoolsHeader_","t_","aditoolsToolbar_","aditoolsToolbarAction_","aditoolsFeedbackDialog_","aditoolsContentWrap_","tools_","aditoolsFooter_","aditoolsSystemDialog_","aditoolsHelpDialog_","resolveInitializer","moduleName","module","require","lastIndexOf","_endsWith","suffix","App","Application","modulePrefix","podModulePrefix","Resolver","app","prefix","initializerPrefix","instanceInitializerPrefix","initializers","instanceInitializers","moduleNames","requirejs","_eak_seen","registerInitializers","instanceInitializer","registerInstanceInitializers","loadInitializers","esCompat","__esModule","default","define","esc","runningTests","create","metaName","rawConfig","exports","JSON","parse","decodeURIComponent","err","widthTracker","resizer","IndexController","_dec2","Controller","enabled","_descriptor6","showNotification","msgparams","adjparams","htmlSafe","systemDialogFunc","status","setAppWidth","appWidth","consentReady","closeNotification","Promise","resolve","bind","deliverFeedback","catch","error","logger","log","closeConsentDialog","time","hhmmss","hour","minute","second","date","number","EUR","currency","minimumFractionDigits","maximumFractionDigits","USD","Router","EmberRouter","locationType","rootURL","LOCALES","IndexRoute","Route","beforeModel","location","queryIndex","newUrl","substring","history","replaceState","_document","configURL","ENV","endsWith","htmlElement","fullLanguage","defaultLanguage","lang","locales","FullLocale","setLocale","analytics","toolname","AnalyticsUrl","environment","setupToolsConfig","abortController","AbortController","startsWith","Date","getTime","response","fetch","signal","statusText","jsonData","json","setupController","controller","transition","FeedbackService","Service","feedbackData","ToolId","Name","encodeURIComponent","Email","Feedback","ApiUrl","AdiLocale","headers","Accept","method","stringify","LoggingService","console","info","warn","timeEnd","BaseComponent","Ember","setDestroyed","setDestroying","destroyables","CAPABILITIES","destructor","asyncLifecycleCallbacks","updateHook","EmberGlimmerComponentManager","getOwner","attrs","createComponent","ComponentClass","getContext","component","BaseComponentManager","destroyComponent","cached","metal","version","APP","initialize","registered","libraries","register","initializerFactory","FormatterBase","FormatDate","Formatter","format","_len","_key","opts","formatDate","FormatList","formatList","escaped","needToEscape","badCharacters","FormatMessage","stringOrDesc","isHTMLSafe","escapedOptions","escapedOpts","toHTML","character","escapeExpression","escapeOptions","defaultMessage","formatMessage","ignoreTag","FormatNumber","formatNumber","FormatRelative","formatOptions","unit","formats","relative","formatRelativeTime","FormatTime","formatTime","extendStatics","setPrototypeOf","__proto__","__extends","__","ErrorKind","TYPE","SKELETON_TYPE","__assign","s","__spreadArray","to","pack","ar","l","isLiteralElement","literal","isArgumentElement","argument","isNumberElement","isDateElement","isTimeElement","isSelectElement","isPluralElement","plural","isPoundElement","pound","isTagElement","tag","isNumberSkeleton","isDateTimeSkeleton","dateTime","SuppressedError","SPACE_SEPARATOR_REGEX","DATE_TIME_REGEX","parseDateTimeSkeleton","skeleton","era","year","RangeError","month","day","weekday","hour12","hourCycle","timeZoneName","WHITE_SPACE_REGEX","FRACTION_PRECISION_REGEX","SIGNIFICANT_PRECISION_REGEX","INTEGER_WIDTH_REGEX","CONCISE_INTEGER_WIDTH_REGEX","parseSignificantPrecision","roundingPriority","g1","g2","minimumSignificantDigits","maximumSignificantDigits","parseSign","signDisplay","currencySign","parseConciseScientificAndEngineeringStem","stem","notation","minimumIntegerDigits","parseNotationOptions","opt","parseNumberSkeleton","tokens","_i","tokens_1","token","useGrouping","compactDisplay","all","currencyDisplay","unitDisplay","roundingMode","g3","g4","g5","trailingZeroDisplay","signOpts","conciseScientificAndEngineeringOpts","_a","timeData","getDefaultHourSymbolFromLocale","hourCycles","regionTag","languageTag","language","maximize","region","SPACE_SEPARATOR_START_REGEX","RegExp","source","SPACE_SEPARATOR_END_REGEX","createLocation","hasNativeStartsWith","hasNativeFromCodePoint","fromCodePoint","hasNativeFromEntries","fromEntries","hasNativeCodePointAt","codePointAt","hasTrimStart","trimStart","hasTrimEnd","trimEnd","isSafeInteger","abs","REGEX_SUPPORTS_U_AND_Y","RE","exec","matchIdentifierAtIndex","search","codePoints","code","fromCharCode","entries","obj","entries_1","k","first","charCodeAt","flag","IDENTIFIER_PREFIX_RE_1","lastIndex","_isWhiteSpace","_isPatternSyntax","Parser","line","column","requiresOtherClause","shouldParseSkeletons","parseMessage","nestingLevel","parentArgType","expectingCloseTag","isEOF","char","parseArgument","val","peek","UNMATCHED_CLOSING_TAG","clonePosition","_isAlpha","parseTag","parseLiteral","bump","startPosition","tagName","parseTagName","bumpSpace","bumpIf","childrenResult","children","endTagStartPosition","INVALID_TAG","closingTagNameStartPosition","UNCLOSED_TAG","startOffset","parseQuoteResult","tryParseQuote","parseUnquotedResult","tryParseUnquoted","parseLeftAngleResult","tryParseLeftAngleBracket","codepoint","ch","openingBracePosition","EXPECT_ARGUMENT_CLOSING_BRACE","EMPTY_ARGUMENT","parseIdentifierIfPossible","MALFORMED_ARGUMENT","parseArgumentOptions","startingPosition","endOffset","bumpTo","typeStartPosition","argType","typeEndPosition","EXPECT_ARGUMENT_TYPE","styleAndLocation","styleStartPosition","parseSimpleArgStyleIfPossible","EXPECT_ARGUMENT_STYLE","styleLocation","argCloseResult","tryParseArgumentClose","location_1","parseNumberSkeletonFromString","EXPECT_DATE_TIME_SKELETON","dateTimePattern","skeletonCopy","patternPos","patternChar","charAt","extraLength","hourLen","dayPeriodLen","hourChar","getBestPattern","pattern","parsedOptions","typeEndPosition_1","EXPECT_SELECT_ARGUMENT_OPTIONS","identifierAndLocation","pluralOffset","EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE","tryParseDecimalInteger","INVALID_PLURAL_ARGUMENT_OFFSET_VALUE","optionsResult","tryParsePluralOrSelectOptions","location_2","pluralType","INVALID_ARGUMENT_TYPE","nestedBraces","apostrophePosition","bumpUntil","UNCLOSED_QUOTE_IN_ARGUMENT_STYLE","stringTokens_1","stemAndOptions","options_1","INVALID_NUMBER_SKELETON","expectCloseTag","parsedFirstIdentifier","hasOtherClause","parsedSelectors","selectorLocation","EXPECT_PLURAL_ARGUMENT_SELECTOR","INVALID_PLURAL_ARGUMENT_SELECTOR","DUPLICATE_SELECT_ARGUMENT_SELECTOR","DUPLICATE_PLURAL_ARGUMENT_SELECTOR","EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT","EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT","fragmentResult","EXPECT_SELECT_ARGUMENT_SELECTOR","MISSING_OTHER_CLAUSE","expectNumberError","invalidNumberError","sign","hasDigits","decimal","kind","currentOffset","targetOffset","nextCode","pruneLocation","els","SyntaxError","originalMessage","captureLocation","memoize","cacheDefault","serializer","serializerDefault","strategyDefault","monadic","arg","cacheKey","computedValue","variadic","assemble","context","serialize","ObjectWithoutPrototypeCache","ErrorCode","strategies","PART_TYPE","FormatError","_super","msg","_this","InvalidValueError","variableId","INVALID_VALUE","InvalidValueTypeError","MissingValueError","MISSING_VALUE","isFormatXMLElementFn","formatToParts","formatters","currentPluralValue","els_1","getNumberFormat","varName","getDateTimeFormat","medium","value_1","formatFn","chunks","other","Intl","PluralRules","MISSING_INTL_API","rule","getPluralRules","part","lastPart","createFastMemoizeCache","IntlErrorCode","IntlMessageFormat","overrideFormats","defaultConfig","configs","defaultLocale","formatterCache","pluralRules","ast","resolvedOptions","resolvedLocale","NumberFormat","supportedLocalesOf","getAst","resolveLocale","__parse","parseOpts","getOwnPropertySymbols","propertyIsEnumerable","__rest","c1","c2","DateTimeFormat","memoizedDefaultLocale","Locale","supportedLocales","integer","percent","short","long","full","IntlError","exception","stack","captureStackTrace","UnsupportedFormatterError","UNSUPPORTED_FORMATTER","InvalidConfigError","INVALID_CONFIG","MissingDataError","MISSING_DATA","IntlFormatError","FORMAT_ERROR","MessageFormatError","descriptor","description","MissingTranslationError","MISSING_TRANSLATION","filterProps","props","allowlist","defaults","filtered","DEFAULT_INTL_CONFIG","messages","timeZone","defaultFormats","fallbackOnEmptyString","onError","onWarn","warning","getNamedFormat","formatType","NUMBER_FORMAT_OPTIONS","getFormatter","formatNumberToParts","RELATIVE_TIME_FORMAT_OPTIONS","getRelativeTimeFormat","RelativeTimeFormat","DATE_TIME_FORMAT_OPTIONS","filteredOptions","timeStyle","dateStyle","_b","formatDateTimeRange","formatRange","formatDateToParts","formatTimeToParts","PLURAL_FORMAT_OPTIONS","formatPlural","setTimeZoneInOptions","deepMergeOptions","opts1","opts2","deepMergeFormatsAndSetTimeZone","f1","mfFormats","messageDescriptor","defaultRichTextElements","msgId","condition","Err","invariant","getMessageFormat","LIST_FORMAT_OPTIONS","now","getListFormat","results","formatListToParts","ListFormat","richValues_1","serializedValues","generateToken","DISPLAY_NAMES_OPTONS","formatDisplayName","getDisplayNames","DisplayNames","of","createIntl","relativeTime","displayNames","createFormatters","resolvedConfig","verifyConfigMessages","$t","onFormatjsIntlError","convertToArray","convertToString","normalizeLocale","flattenKeys","hash","translation","IntlService","_intls","localeName","proposedLocale","locale1","locale2","cancel","_timer","next","_ee","emit","_updateDocumentLanguage","primaryLocale","createFormatterProxy","initialLocale","EventEmitter","_owner","_formats","resolveRegistration","getIntl","getOrCreateIntl","translations","addTranslations","lookup","localeNames","_localeWithDefault","translationsFor","resilient","existingIntl","_cache","exists","_this$getIntl","payload","_this$getIntl2","dom","renderer","_dom","documentService","getDOM","on","off","dependentKeyCompat","_formatters","missingMessage","getPod","ContainerDebugAdapter","_moduleRegistry","namespace","ModuleRegistry","canCatalogEntriesByType","catalogEntriesByType","types","A","pop","addObject","STRING_DASHERIZE_CACHE","CLASSIFY_CACHE","_entries","EmberObject","podBasedModuleName","podBasedComponentsInSubdir","mainModuleName","defaultModuleName","nestedColocationComponentModuleName","pluralizedTypes","makeToString","factory","fullName","shouldWrapInClassFactory","parseName","parsedName","fullNameParts","prefixParts","nameParts","fullNameWithoutType","resolveMethodName","resolveOther","normalizedModuleName","findModuleName","defaultExport","_extractDefaultExport","klass","injections","extend","normalize","_normalizeCache","_normalize","resolved","pluralize","podBasedLookupWithPrefix","podPrefix","resolveEngine","engineModule","resolveRouteMap","engineRoutesModule","resolveTemplate","tmpPrefix","loggingDisabled","moduleNameLookupPatterns","tmpModuleName","chooseModuleName","_logLookup","underscoredModuleName","partializedModuleName","lookupDescription","found","_owner$resolveRegistr","env","LOG_MODULE_RESOLVER","LOG_RESOLVER","symbol","knownForType","moduleKeys","items","fullname","translateToContainerFullname","podSuffix","nonPodPrefix","supplyDummySession","AnalyticsAL","setWebEvent","webData","toolName","analyticsLoaded","CONSOLE_LOGGER","Analytics","analyticsUrl","isSSR","isTesting","logSuppressions","usesDummySession","_trackSessionStart","beforeEl","defer","reject","script","scripts","getElementsByTagName","lastScript","prior","nextElementSibling","_prior$parentNode","_document$getElements","onload","AbortSignal","src","insertBefore","append","loadScript","interval","retries","checkCondition","poll","origin","stop","queue","q","qlen","item","tool","evt","eventName","eventData","AnalyticsService","isAbandoned","isLoading","SHOEBOX_DATA_NAME","en","adi","iso","cdp","zh","cn","ja","jp","ru","_getLocales","fastboot","urlLocale","path","isFastBoot","request","pathname","_getURLLocale","localeSet","useDefault","foundLocale","IsoLocale","CdpLocale","_fixLocalUrl","rootUrl","idx","_replaceLocale","text","AditoolsSite","supportedlocales","_logger","_url","protocol","_getURL","shoebox","put","retrieve","_loadConfigFromJson","modifierClass","installElement$1","MANAGER","getDebugName","getDebugInstance","FastBoot","RouterEvent","configKeys","PageTitleService","separator","scheduleOnce","_updateTitle","_validateExistingTitleElement","hasResolveRegistration","fromEnv","pageTitle","configValue","_defaultConfig","router","scheduleTitleUpdate","applyTokenDefaults","defaultSeparator","defaultPrepend","defaultReplace","previous","inheritFromPrevious","tokenForId","_findTokenById","splice","visibleTokens","visible","unshift","sortedTokens","appending","group","groups","frontGroups","front","lastToken","E","toBeTitle","updateFastbootTitle","titleDidUpdate","find","headElement","headChildNodes","childNodes","removeChild","titleEl","titleContents","createTextNode","appendChild","Events","EE","once","addListener","emitter","listener","_events","_eventsCount","clearEvent","eventNames","events","names","listeners","handlers","ee","listenerCount","a1","a2","a3","a4","a5","removeListener","j","removeAllListeners","prefixed","property","_typeof","iterator","input","hint","prim","res","toPropertyKey"],"sourceRoot":""}