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 \"controls\": {\n \"future\": {\n \"placeholder\": \"Placeholder for future development\",\n \"q\": \"Q\"\n },\n \"schematic-table\": {\n \"model\": {\n \"photodiode\": {\n \"bias\": \"bias\",\n \"cd\": \"cd\",\n \"circuitName\": \"circuitName\",\n \"ip\": \"ip\",\n \"rsh\": \"rsh\",\n \"vBias\": \"vBias\",\n \"vr\": \"vr\"\n },\n \"stage1\": {\n \"bw\": \"bw\",\n \"cf\": \"cf\",\n \"cin\": \"cin\",\n \"opamp\": {\n \"partNumber\": \"opAmp\"\n },\n \"q\": \"q\",\n \"rf\": \"rf\",\n \"rin\": \"rin\",\n \"title\": \"Stage 1\"\n },\n \"stage2\": {\n \"bw\": \"bw\",\n \"cfilter\": \"cfilter\",\n \"opamp\": {\n \"partNumber\": \"opAmp\"\n },\n \"rf\": \"rf\",\n \"rfilter\": \"rfilter\",\n \"rg\": \"rg\",\n \"title\": \"Stage 2\"\n }\n },\n \"title\": \"Photodiode\"\n }\n },\n \"current-calculation\": {\n \"active-area\": \"Active Area:\",\n \"cancel\": \"Cancel\",\n \"equals\": \" = \",\n \"instruction\": \"Enter either the peak light intensity or the peak photodiode current:\",\n \"multiply\": \" X \",\n \"peak-current\": \"Peak Photodiode Current:\",\n \"peak-light-intensity\": \"Peak Light Intensity:\",\n \"sensitivity\": \"Sensitivity:\",\n \"title\": \"Peak Photodiode Current Calculation\",\n \"use-this-peak\": \"Use this Peak Current\"\n },\n \"dialogs\": {\n \"download\": {\n \"error-message\": \"Unable to get design files. This error may occur for the following reasons:
1) Broken connection to the server.
2) Services are down.
\",\n \"error-title\": \"Download\"\n },\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 \"load\": {\n \"invalid-file\": \"Invalid design file. Please verify the contents of the design file you are trying to load.\",\n \"invalid-parts\": \"Unable to load design. The following {numParts, plural, =1 {part in this design file is} other {parts in this design file are}} no longer supported by this application: {parts}\",\n \"no-opamps\": \"OpAmp data is unavailable. Unable to load design. Try to refresh your browser. If the problem persists, please use Photodiode's feedback button in the upper right to report the issue.\",\n \"title\": \"Load Design\"\n },\n \"samples\": {\n \"title\": \"Order Samples\"\n },\n \"save\": {\n \"error-message\": \"Cannot save design. Please check if the data you entered is correct before saving.\",\n \"error-title\": \"Save Design\"\n },\n \"share\": {\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 \"title\": \"Email My Design\"\n },\n \"system\": {\n \"application-busy\": \"Working...\",\n \"connecting-to\": \"Connecting to {tool}...\",\n \"download-create-bom\": \"Creating BOM File...\",\n \"download-create-data\": \"Creating Data Files...\",\n \"download-create-design\": \"Creating Design File...\",\n \"download-create-eval-board\": \"Creating Eval Board File...\",\n \"download-create-graph\": \"Creating Graph Data...\",\n \"download-create-pdf\": \"Creating PDF File...\",\n \"download-create-spice\": \"Creating SPICE Files...\",\n \"download-downloading\": \"Downloading...\",\n \"download-requesting\": \"Requesting...\",\n \"error-config-data\": \"Configuration data is unavailable. Unable to proceed as Photodiode Specifications cannot be validated properly. Try to refresh your browser. If the problem persists, please use Photodiode's feedback button in the upper right to report the issue.\",\n \"error-opamp-data\": \"OpAmp data is unavailable. Photodiode is unable to proceed. Save your design and try to refresh your browser. If the problem persists, please use Photodiode's feedback button in the upper right to report the issue.\",\n \"error-pst-data\": \"Data map is temporarily unavailable, and hence the OpAmp table cannot be displayed. Save your design and try to refresh your browser. If the problem persists, please use Photodiode's feedback button in the upper right to report the issue.\",\n \"error-sensor-data\": \"Sensor data is temporarily unavailable, and hence the Sensor table cannot be displayed. Save your design and try to refresh your browser. If the problem persists, please use Photodiode's feedback button in the upper right to report the issue.\",\n \"loading-opamp-data\": \"Loading OpAmp data...\",\n \"sending-filter\": \"Sending filter to {tool}...\",\n \"title\": \"Application Message\"\n }\n },\n \"download\": {\n \"data-files\": {\n \"frequency-response\": {\n \"frequency\": \"Frequency\",\n \"magnitude\": \"Magnitude\"\n },\n \"noise-gain\": {\n \"caps\": \"(Cin + Cf) / Cf\",\n \"frequency\": \"Frequency\",\n \"noise-gain\": \"Noise Gain\",\n \"opamp-gain\": \"Op Amp Gain\",\n \"zero\": \"(Cin || Cf) (Rin || Rf)
Zero\"\n },\n \"pulse-response\": {\n \"pulse-response\": \"Pulse Response\",\n \"time-axis\": \"Time Axis\"\n },\n \"spectral-noise\": {\n \"frequency\": \"Frequency\",\n \"opi\": \"Op Amp I\",\n \"opi2\": \"Op Amp 2 I\",\n \"opv\": \"Op Amp V\",\n \"opv2\": \"Op Amp 2 V\",\n \"rf\": \"Rf\",\n \"rfilter\": \"Rfilter\",\n \"rin\": \"Rin\",\n \"total\": \"Total\"\n }\n },\n \"pdf-content\": {\n \"pdf-data-fields\": {\n \"capacitance\": \"Capacitance (Cd)\",\n \"one-stage\": \"One Stage\",\n \"peak-current\": \"Peak Current (Ip)\",\n \"peak-voltage\": \"Peak Voltage (Vp)\",\n \"photodiode-bias\": \"Photodiode Bias\",\n \"requested-bandwidth\": \"Requested Bandwidth\",\n \"reverse-voltage\": \"Reverse Voltage (Vr)\",\n \"sensor\": \"Sensor\",\n \"shunt-resistance\": \"Shunt Resistance (Rsh)\",\n \"stages\": \"Stage\",\n \"two-stage\": \"Two Stages\"\n },\n \"pdf-data-ie-image-missing\": \"We are very sorry, but we are unable to generate images if you are using Internet Explorer 8 or below to browse this tool. Please use Firefox, Chrome, or Internet Explorer 9 or above if you would like to see the image on this page.\",\n \"pdf-desc\": \"{desc}\\n\\nCreated by {user} on {date}\",\n \"pdf-desc-no-design-name\": \"Created by {user} on {date}\",\n \"pdf-desc-no-name-desc\": \"Created on {date}\",\n \"pdf-desc-no-user-name\": \"{desc}\\n\\nCreated on {date}\",\n \"pdf-heading\": \"Photodiode Design Report\",\n \"pdf-page-headers\": {\n \"bill-of-materials\": \"Bill of Materials\",\n \"circuit\": \"Circuit\",\n \"frequency-response\": \"Frequency Response\",\n \"noise-gain\": \"Noise Gain\",\n \"pulse-response\": \"Pulse Response\",\n \"snr\": \"SNR\",\n \"spectral-noise\": \"Spectral Noise Density\"\n },\n \"pdf-subheading\": \"Design Parameters Entered by User\",\n \"pdf-tool-name\": \"Photodiode\"\n },\n \"spice-files\": {\n \"message_netlist_readme\": \"This directory (Spice Files) contains three simulation-ready SPICE netlists.\\r\\nThese netlists contain the photodiode amplifier design generated by Photodiode \\r\\nWizard, and the corresponding SPICE macromodels for the selected op amp(s). \\r\\nAlso included is a suitable input signal, and appropriate analysis mode \\r\\n(.AC, .TRAN, .NOISE).\\r\\n\\nThese netlists are text-based .cir files, and should be compatible with a wide\\r\\nvariety of SPICE simulators. More information about text-based SPICE netlists\\r\\ncan be found at: http://bwrcs.eecs.berkeley.edu/Classes/IcBook/SPICE/ \\r\\n\\n\\t- ACAnalysis.cir: Simulates AC response of the photodiode amplifier design. \\r\\n\\t Output of circuit can be plotted by probing V(OUT) \\r\\n\\n\\t- TransientAnalysis.cir: Simulates the step response of the photodiode \\r\\n\\t amplifier design. Output of circuit can be plotted by \\r\\n\\t probing V(OUT) \\r\\n\\n\\t- NoiseAnalysis.cir: Simulates the noise of the photodiode amplifier design. \\r\\n\\t Noise gain can be plotted by probing GAIN, or \\r\\n\\t V(ONOISE)/V(INOISE) \\r\\n\\n\\nAny questions about these SPICE netlists, or about Photodiode Wizard in general \\r\\ncan be submitted at: \\r\\nhttp://ez.analog.com/community/amplifiers/operational-amplifiers \\r\\n\",\n \"message_netlist_readme_filename\": \"README.txt\",\n \"message_no_netlist_filename\": \"Why no netlist files.txt\",\n \"message_no_schematic\": \"Now that LTspice is part of Analog Devices, we are converting our SPICE netlists into LTspice models. The op amps in your design do not currently have LTspice models available. If you would like ADI to prioritize LTspice model generation for a particular part, please let your sales representative know or send feedback through this tool.\\r\\n\\r\\nSPICE simulation supported by parts in your design:\\r\\n\",\n \"message_no_schematic_filename\": \"Why no LTspice.txt\",\n \"message_no_schematic_no_netlist\": \"ADI is currently in the process of transitioning our op amps from SPICE netlists to LTspice models. Your design contains a mixture of parts, where some have text based netlists and some have LTspice files. Because of this, the tool is not able to generate any SPICE output. We apologize for the inconvenience and are working on getting this fixed. If you would like ADI to prioritize LTspice model generation for a particular part, please let your sales representative know or send feedback through this tool.\\r\\n\\r\\nSPICE simulation supported by parts in your design:\\r\\n\",\n \"message_no_schematic_no_netlist_filename\": \"README.txt\",\n \"message_part_no_netlist\": \"The following parts cannot generate netlist model information.\\r\\n\",\n \"message_part_no_spice_info\": \"The following op amps in your design do not have LTspice models or text netlist models.\\r\\nIf you would like ADI to prioritize LTspice model generation for a particular part, please let your sales representative know or send feedback through this tool.\\r\\n\",\n \"message_part_no_spice_info_filename\": \"Why no spice files.txt\"\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 \"figures\": {\n \"bom\": {\n \"description\": \"Click on 'Get Design File' to download a zip file that includes a Bill of Materials in tab delimited format.\",\n \"designator\": \"Reference Designator\",\n \"extra-components\": {\n \"header\": \"header\",\n \"jumper\": \"jumper\",\n \"sma-jack\": \"SMA Jack, board edge female\",\n \"sma-male\": \"male-male SMA\",\n \"socket\": \"socket\",\n \"test-pin\": \"Test pin\"\n },\n \"material\": \"Material\",\n \"materials\": {\n \"tantalum\": \"tantalum\"\n },\n \"package\": \"Package\",\n \"quantity\": \"Quantity\",\n \"title\": \"BOM\",\n \"tolerance\": \"Tolerance\",\n \"value\": \"Value\"\n },\n \"frequency-response\": {\n \"fn\": \"fN = {fn}Hz\",\n \"hover-graph-legend\": {\n \"trans-gain\": \"Transimpedance Gain: \",\n \"x-title\": \"Frequency: \",\n \"x-unit\": \"Hz\",\n \"y-unit\": \"dB\",\n \"y-unit2\": \"V/A\"\n },\n \"q\": \"Q = {q}\",\n \"title\": \"Frequency Resp.\",\n \"tooltip\": \"Frequency Response\",\n \"x-title\": \"Frequency (Hz)\",\n \"y-title\": \"Transimpedance Gain ({unit})\"\n },\n \"noise-gain\": {\n \"graph-legend\": {\n \"caps\": \"(Cin + Cf) / Cf\",\n \"noise-gain\": \"Noise Gain\",\n \"opamp-gain\": \"Op Amp Gain\",\n \"x-title\": \"Frequency\",\n \"zero\": \"(Cin || Cf) (Rin || Rf)
Zero\"\n },\n \"hover-graph-legend\": {\n \"caps\": \"(Cin + Cf) / Cf: \",\n \"noise-gain\": \"Noise Gain: \",\n \"opamp-gain\": \"Op Amp Gain: \",\n \"x-title\": \"Frequency: \",\n \"x-unit\": \"Hz\",\n \"y-unit\": \"dB\",\n \"y-unit2\": \"V/V\",\n \"zero\": \"(Cin || Cf) (Rin || Rf) Zero: \"\n },\n \"title\": \"Noise Gain\",\n \"tooltip\": \"Noise Gain\",\n \"x-title\": \"Frequency (Hz)\",\n \"y-title\": \"Gain ({unit})\"\n },\n \"pulse-response\": {\n \"hover-graph-legend\": {\n \"circuit-output\": \"Circuit Output: \",\n \"x-title\": \"Time: \",\n \"x-unit\": \"s\",\n \"y-unit\": \"V\"\n },\n \"overshoot\": \"Overshoot = {overshootPercent}%\",\n \"rise-time\": \"Rise Time (10% to 90%) = {riseTime}s\",\n \"title\": \"Pulse Resp.\",\n \"tooltip\": \"Pulse Response\",\n \"x-title\": \"Time (s)\",\n \"y-title\": \"Circuit Output (V)\"\n },\n \"schematic\": {\n \"amp-single-stage-title-1\": \"TRANSIMPEDANCE\",\n \"amp-single-stage-title-2\": \"AMPLIFIER\",\n \"amp-single-stage-title-3\": \"\",\n \"amp-stage-one-title-1\": \"STAGE 1\",\n \"amp-stage-one-title-2\": \"TRANSIMPEDANCE\",\n \"amp-stage-one-title-3\": \"AMPLIFIER\",\n \"amp-stage-two-title-1\": \"STAGE 2\",\n \"amp-stage-two-title-2\": \"ADDITIONAL GAIN\",\n \"amp-stage-two-title-3\": \"AND FILTERING\",\n \"bypass-capacitors\": \"BYPASS CAPACITORS\",\n \"equivalent-circuit-tooltip\": \"Equivalent Circuit\",\n \"photodiode-model\": \"Photodiode Model ( {pd} )\",\n \"photodiode-model-custom\": \"Custom\",\n \"photodiode-model-next-steps\": \"Model: {pd}\",\n \"photodiode-stage-title-1\": \"PHOTODIODE\",\n \"photodiode-stage-title-2\": \"\",\n \"spares\": \"SPARES\",\n \"supply-voltage-title-1\": \"SUPPLY VOLTAGE\",\n \"supply-voltage-title-2\": \"MIN: ± {minVoltage}V\",\n \"supply-voltage-title-3\": \"MAX: ± {maxVoltage}V\",\n \"supply-voltage-tooltip\": \"Supply Voltage\",\n \"title\": \"Circuit\",\n \"warning-cf-less-than-1pF\": \"Warning: The feedback capacitance, Cf, needed for your design is only {feedback}F. At this low level, board capacitance will have a significant effect on the peaking (Q) of this design. The actual value of Cf should be determined empirically with your specific PCB board. Because the value is so low, the tool has not converted the capacitance into a standard value.\",\n \"warning-gain-greater-than-1-stable\": \"Warning: This circuit may not be stable. The {opamp} is stable for noise gains of {gain} or greater. This means (Cd + Cf) / Cf should be larger than {gain}. In the circuit above Cd = {capacitance}F and Cf = {feedback}F, so (Cd + Cf) / Cf = {noise}. Make sure you verify in spice before building.\",\n \"why-the-spares-tooltip\": \"Why the Spares?\"\n },\n \"snr\": {\n \"enob\": \"ENOB = {enob} bits\",\n \"minimum-signal\": \"Minimum Signal (Noise Floor)\",\n \"noise-1f-not-modeled\": \"1/f and tail current noise not modeled.\",\n \"noise-contributors\": \"Noise Contributors (V rms)\",\n \"noise-floor\": \"Referred to Output: {voltage}V rms\",\n \"noise-referred-output\": \"All noise referred to output\",\n \"opamp-current\": \"Op Amp Current\",\n \"opamp-voltage\": \"Op Amp Voltage\",\n \"output-voltage\": \"Output Voltage: {voltage}V\",\n \"peak-signal\": \"Peak Signal\",\n \"photodiode-current\": \"Photodiode Current: {current}A\",\n \"photodiode-current-rms\": \"Referred to Input: {current}A rms\",\n \"rf\": \"RF\",\n \"rfilter\": \"RFILTER\",\n \"rg\": \"RG\",\n \"rin\": \"RIN\",\n \"snr\": \"SNR = {snr} dB\",\n \"stage-1\": \"Stage 1\",\n \"stage-1-total\": \"Stage 1 Total\",\n \"stage-2\": \"Stage 2\",\n \"stage-2-total\": \"Stage 2 Total\",\n \"title\": \"SNR\",\n \"tooltip\": \"SNR/Dynamic Range\",\n \"total\": \"Total\",\n \"total-noise\": \"Total Noise: {noise}V rms\"\n },\n \"spectral-noise\": {\n \"graph-legend\": {\n \"opi\": \"Op Amp I\",\n \"opi2\": \"Op Amp 2 I\",\n \"opv\": \"Op Amp V\",\n \"opv2\": \"Op Amp 2 V\",\n \"rf\": \"Rf\",\n \"rfilter\": \"Rfilter\",\n \"rin\": \"Rin\",\n \"total\": \"Total\",\n \"x-title\": \"Frequency\"\n },\n \"hover-graph-legend\": {\n \"opi\": \"Op Amp I: \",\n \"opi2\": \"Op Amp 2 I: \",\n \"opv\": \"Op Amp V: \",\n \"opv2\": \"Op Amp 2 V: \",\n \"rf\": \"Rf: \",\n \"rfilter\": \"Rfilter: \",\n \"rin\": \"Rin: \",\n \"total\": \"Total: \",\n \"x-title\": \"Frequency: \",\n \"x-unit\": \"Hz\",\n \"y-unit\": \"V/√Hz\"\n },\n \"title\": \"Spectral Noise\",\n \"tooltip\": \"Spectral Noise Density\",\n \"x-title\": \"Frequency (Hz)\",\n \"y-title\": \"Spectral Noise (V/√Hz)\"\n }\n },\n \"help\": {\n \"bias-polarity\": {\n \"title\": \"Photodiode Bias\"\n },\n \"circuit-peaking\": {\n \"title\": \"Output Signal: Peaking\"\n },\n \"circuit-stages\": {\n \"title\": \"Stages\"\n },\n \"dynamic-range\": {\n \"title\": \"SNR/Dynamic Range\"\n },\n \"equivalent-circuit\": {\n \"title\": \"Photodiode Equivalent Circuit\"\n },\n \"frequency-response\": {\n \"title\": \"Frequency Response\"\n },\n \"main-help\": {\n \"title\": \"Photodiode Circuit Design Wizard Help\"\n },\n \"noise-gain\": {\n \"title\": \"Noise Gain\"\n },\n \"opamp\": {\n \"title\": \"Op Amp\"\n },\n \"peak-current\": {\n \"title\": \"Photodiode Specs: Peak Current\"\n },\n \"peak-voltage\": {\n \"title\": \"Output Signal: Peak Voltage\"\n },\n \"photodiode-capacitance\": {\n \"title\": \"Photodiode Specs: Capacitance (CD)\"\n },\n \"pulse-response\": {\n \"title\": \"Pulse Response\"\n },\n \"quick-results\": {\n \"title\": \"Quick Results\"\n },\n \"reverse-voltage\": {\n \"title\": \"Photodiode Bias: Reverse Voltage (VR)\"\n },\n \"shunt-resistance\": {\n \"title\": \"Photodiode Specs: Shunt Resistance (RSH)\"\n },\n \"spectral-noise-density\": {\n \"title\": \"Spectral Noise Density\"\n },\n \"stability\": {\n \"title\": \"Stability\"\n },\n \"supply-voltage\": {\n \"title\": \"Supply Voltage\"\n },\n \"target-speed\": {\n \"title\": \"Output Signal: Speed\"\n },\n \"why-the-spares\": {\n \"title\": \"Why the spares?\"\n }\n },\n \"main\": {\n \"busy\": \"Working...\",\n \"next-tab\": \"Next Tab\",\n \"previous-tab\": \"Previous Tab\",\n \"title\": \"Photodiode Circuit Design Wizard\"\n },\n \"marginal-design\": {\n \"button\": \"Show marginal design\",\n \"message\": \"To create a robust design, we recommend adjusting your design parameters as described above. However if that is not possible, we were able to find an op amp that might work. The tool has identified the following issues with this design: \"\n },\n \"menu\": {\n \"links\": {\n \"feedback\": \"Feedback\",\n \"help\": \"Help\",\n \"load\": \"Load\",\n \"save\": \"Save\"\n },\n \"tabs\": {\n \"circuit-design\": \"Circuit Design\",\n \"next-steps\": \"Next Steps\",\n \"photodiode\": \"Photodiode\"\n }\n },\n \"model-error\": {\n \"amp_status_bias_current_is\": \"high output offset (bias current is {data})\",\n \"amp_status_big_2nd_stage_gain\": \"Requires 2nd stage gain of {data}\",\n \"amp_status_cf_less_100fF\": \"Cf < 0.1pF\",\n \"amp_status_cf_less_50fF\": \"Cf < 50fF\",\n \"amp_status_cfb_no_cf\": \"Current feedback amp can't support cap in feedback path\",\n \"amp_status_cfb_rf_too_small\": \"unable to drive Rf\",\n \"amp_status_dB_error\": \"database error - part data incorrect in database\",\n \"amp_status_gbw_less_than_bandwith_requested\": \"Op Amp GBW less than bandwidth requested \",\n \"amp_status_high_vos\": \"high output offset (input Vos is {data})\",\n \"amp_status_internal_cf_too_high\": \"internal feedback capacitance too high\",\n \"amp_status_min_stable_gain\": \"min stable gain = {data}\",\n \"amp_status_not_enough_peaking\": \"can't create enough peaking\",\n \"amp_status_not_fast_enough\": \"not fast enough\",\n \"amp_status_quad\": \"quad\",\n \"amp_status_slew_rate_low\": \"slew rate too low\",\n \"amp_status_slew_rate_marginal\": \"slew rate marginal\",\n \"amp_status_specialty_amp\": \"specialty amplifier\",\n \"amp_status_too_fast\": \"fast amp = lower SNR\",\n \"amp_status_voltage_not_enough\": \"voltage range not enough for peak output voltage\",\n \"amp_status_zero_drift\": \"zero drift\",\n \"fixed_op_amp_no_good\": \"The {partName} is not able to meet the design requirements. Please choose another op amp or unlock the op amp to have the program choose for you.
Reason {partName} is unsuitable:\",\n \"internal_cf_too_high\": \"The {partName} has {cfint}F of internal feedback capacitance. So what would normally be {cf}F of feedback capacitance for a standard amp is {cfext}F for the {partName}.
Reason {partName} is unsuitable:\",\n \"no_op_amps_available_for_first_stage_too_fast\": \"Unable to recommend an op amp that can meet design requirements for the first stage.
Things to try:
- Reduce speed requirements
- Reduce photodiode capacitance
- Reduce peak output voltage
- Increase photodiode peak current
\",\n \"no_op_amps_available_for_first_stage_too_slow\": \"Unable to recommend an op amp that can meet design requirements for the first stage.
Things to try:
- Increase speed requirements
- Increase photodiode capacitance
- Increase peak output voltage
- Decrease photodiode peak current
\",\n \"no_op_amps_available_for_second_stage\": \"Unable to recommend an op amp that can meet design requirements for the second stage.
Solutions:
- Reduce speed requirements
- Reduce peak output voltage
\",\n \"no_op_amps_available_for_single_stage_too_fast\": \"Unable to recommend an op amp that meets these design requirements.
Things to try:
- Choose 2 stage solution
- Reduce speed requirements
- Reduce photodiode capacitance
- Reduce peak output voltage
- Increase photodiode peak current
\",\n \"no_op_amps_available_for_single_stage_too_slow\": \"Unable to recommend an op amp that meets these design requirements.
Things to try:
- Increase speed requirements
- Increase photodiode capacitance
- Increase peak output voltage
- Decrease photodiode peak current
\",\n \"peak_light_error\": \"The peak current you provided does not fall in the accepted range ({min} - {max}). Please update the value.\",\n \"peak_photodiode_error\": \"The resulting peak current does not fall in the accepted range ({min} - {max}).\",\n \"rf_too_high\": \"Gain required is too high for a single stage amplifier configuration.
Solutions:
- Choose 2 stage solution
- Reduce peak output voltage
- Increase photodiode peak current
\"\n },\n \"opamp-selection\": {\n \"GBW\": \"GBW\",\n \"cancel\": \"Cancel\",\n \"comment-drop-down\": {\n \"message\": {\n \"amp_status_bias_current_is\": \"high output offset (bias current is {value}A)\",\n \"amp_status_big_2nd_stage_gain\": \"Requires 2nd stage gain of {value}\",\n \"amp_status_cf_less_100fF\": \"Cf < 0.1pF\",\n \"amp_status_cf_less_50fF\": \"Cf < 50fF\",\n \"amp_status_cfb_no_cf\": \"Current feedback amp can't support cap in feedback path\",\n \"amp_status_cfb_rf_too_small\": \"unable to drive Rf\",\n \"amp_status_dB_error\": \"database error - part data incorrect in database\",\n \"amp_status_gbw_less_than_bandwith_requested\": \"Op Amp GBW less than bandwidth requested \",\n \"amp_status_high_vos\": \"high output offset (input Vos is {value}V) \",\n \"amp_status_internal_cf_too_high\": \"internal feedback capacitance too high\",\n \"amp_status_last_time_buy\": \"Last Time Buy\",\n \"amp_status_min_stable_gain\": \"min stable gain = {value}\",\n \"amp_status_not_allowed\": \"not allowed:\",\n \"amp_status_not_enough_peaking\": \"can't create enough peaking\",\n \"amp_status_not_fast_enough\": \"not fast enough\",\n \"amp_status_not_recommended\": \"not recommended:\",\n \"amp_status_not_recommended_for_new_designs\": \"not recommended for new designs\",\n \"amp_status_obsolete\": \"Obsolete\",\n \"amp_status_quad\": \"quad\",\n \"amp_status_recommended\": \"recommended\",\n \"amp_status_slew_rate_low\": \"slew rate too low\",\n \"amp_status_slew_rate_marginal\": \"slew rate marginal\",\n \"amp_status_specialty_amp\": \"specialty amplifier\",\n \"amp_status_too_fast\": \"fast amp = lower SNR\",\n \"amp_status_voltage_not_enough\": \"voltage range not enough for peak output voltage\",\n \"amp_status_zero_drift\": \"zero drift\"\n },\n \"not-allowed\": \"Not Allowed\",\n \"not-allowed-match\": \"not allowed\",\n \"not-recommended\": \"Not Recommended\",\n \"not-recommended-match\": \"not recommended\",\n \"recommended\": \"Recommended\",\n \"recommended-match\": \"recommended\",\n \"show-all\": \"Show all\"\n },\n \"comments\": \"Comments\",\n \"part-label\": \"Part\",\n \"row-count\": \"'{count, plural, =0 {Displaying # of {total} op amps. Please check the filters provided.} other {Displaying # of {total} op amps.}}'\",\n \"select\": \"Select\",\n \"spice-drop-down\": {\n \"no\": \"No\",\n \"show-all\": \"Show all\",\n \"yes\": \"Yes\"\n },\n \"status-drop-down\": {\n \"not-recommended\": \"Not Recommended for New Designs\",\n \"not-recommended-match\": \"Not Recommended for New Designs\",\n \"production\": \"Production\",\n \"production-match\": \"Production\",\n \"recommended\": \"Recommended for New Designs\",\n \"recommended-match\": \"Recommended for New Designs\",\n \"show-all\": \"Show all\"\n },\n \"supply-max\": \"Supply Max\",\n \"supply-min\": \"Supply Min\",\n \"temp-range\": \"Temperature Range\",\n \"title\": \"Choose Op Amp\"\n },\n \"parameter-selector\": {\n \"choose-parameters\": \"Choose Parameters\",\n \"ok\": \"OK\"\n },\n \"sensor-selection\": {\n \"active-area\": \"Active Area\",\n \"cancel\": \"Cancel\",\n \"capacitance\": \"Capacitance\",\n \"dark-current\": \"Dark Current\",\n \"manufacturer\": \"Manufacturer\",\n \"operating-temperature\": \"Operating Temperature\",\n \"package\": \"Package\",\n \"part-number\": \"Part Number\",\n \"product-page\": \"Home Page\",\n \"resistance\": \"Resistance\",\n \"response-time\": \"Response Time\",\n \"reverse-breakdown\": \"Reverse Breakdown\",\n \"row-count\": \"'{count, plural, =0 {Displaying # of {total} sensors. Please check the filters provided.} other {Displaying # of {total} sensors.}}'\",\n \"select\": \"Select\",\n \"sensitivity\": \"Sensitivity\",\n \"spectral-peak\": \"Spectral Peak\",\n \"spectral-range\": \"Spectral Range\",\n \"spice\": \"SPICE\",\n \"spice-file\": \"Spice File\",\n \"title\": \"Please Select A Sensor\",\n \"vendor-link\": \"Vendor Link\",\n \"viewing-angle\": \"Viewing Angle\"\n },\n \"settings\": {\n \"circuit-design\": {\n \"enob\": \"ENOB: {enob} bits\",\n \"one-stage\": \"One Stage\",\n \"opamp-lock\": \"Lock\",\n \"opamp-stage1\": \"Stage 1:\",\n \"opamp-stage2\": \"Stage 2:\",\n \"opamps\": \"Op Amps:\",\n \"opamps-tooltip\": \"Op Amp\",\n \"output-offset\": \"Output Offset: {offset}V\",\n \"output-signal\": \"Output Signal\",\n \"peak-voltage\": \"Peak Voltage (VP)\",\n \"peak-voltage-tooltip\": \"Peak Voltage\",\n \"peaking\": \"Peaking\",\n \"peaking-high\": \"high\",\n \"peaking-low\": \"low\",\n \"peaking-tooltip\": \"Peaking\",\n \"quick-results\": \"Quick Results\",\n \"quick-results-tooltip\": \"Quick Results\",\n \"snr\": \"SNR: {snr} dB\",\n \"stages\": \"Stages\",\n \"stages-tooltip\": \"Stages\",\n \"target-bandwidth\": \"Target Bandwidth\",\n \"target-option-band\": \"Bandwidth\",\n \"target-option-pulse\": \"Pulse Width\",\n \"target-pulse-width\": \"Target Pulse Width\",\n \"target-speed-tooltip\": \"Speed\",\n \"two-stage\": \"Two Stages\"\n },\n \"next-steps\": {\n \"get-files\": \"Get Files\",\n \"get-files-all\": \"All Files\",\n \"get-files-all-tooltip\": \"Download zip file containing SPICE files, BOM, and pdf versions of views\",\n \"get-files-spice\": \"SPICE Only\",\n \"get-files-spice-tooltip\": \"Download zip file containing schematic files\",\n \"mail\": \"Mail to Colleague\",\n \"mail-tooltip\": \"Send a copy of this design to a colleague\",\n \"order\": \"Order\",\n \"order-samples\": \"Order Samples\",\n \"order-samples-tooltip\": \"Order component sample\",\n \"share\": \"Share\"\n },\n \"photodiode\": {\n \"bias-polarity-tooltip\": \"Photodiode Bias\",\n \"capacitance-1\": \"Capacitance (CD)\",\n \"capacitance-2\": \"at VR = {vr} V\",\n \"capacitance-tooltip\": \"Capacitance\",\n \"capacitance-warning\": \"Be careful. This is the capacitance at your reverse voltage, which may be different than what is specified in the datasheet table. You may need to read this value from a datasheet graph instead.\",\n \"or\": \"or\",\n \"peak-current\": \"Peak Current (IP)\",\n \"peak-current-tooltip\": \"Peak Current\",\n \"photodiode-bias\": \"Photodiode Bias\",\n \"photodiode-select\": \"Select Photodiode From Library\",\n \"photodiode-specs\": \"Photodiode Specs\",\n \"reverse-voltage\": \"Reverse Voltage (VR)\",\n \"reverse-voltage-negative\": \"Negative\",\n \"reverse-voltage-positive\": \"Positive\",\n \"reverse-voltage-tooltip\": \"Reverse Voltage\",\n \"shunt-resistance\": \"Shunt Resistance (RSH)\",\n \"shunt-resistance-tooltip\": \"Shunt Resistance\"\n }\n },\n \"units\": {\n \"A\": \"A\",\n \"F\": \"F\",\n \"Q\": \"Q\",\n \"R\": \"Ω\",\n \"V\": \"V\",\n \"active-area\": \"mm2\",\n \"dB\": \"dB\",\n \"farad\": \"F\",\n \"hertz\": \"Hz\",\n \"meters\": \"m\",\n \"ohm\": \"Ohm\",\n \"operating-temperature\": \"°C\",\n \"peak-light-intensity\": \" W/m'2\",\n \"seconds\": \"s\",\n \"sensitivity\": \"A/W\",\n \"unit-price\": \"$ US\",\n \"viewing-angle\": \"°\",\n \"volts-per-amp\": \"V/A\",\n \"volts-per-volt\": \"V/V\"\n },\n \"validation-error\": {\n \"button-tooltip\": \"Please correct error before continuing\",\n \"capacitance\": \"Capacitance Value must be in range: {min} to {max}\",\n \"invalid-input-error\": \"The value \\\"{value}\\\" in field {field} cannot be parsed.\",\n \"min-pulse-speed\": \"Speed Value must be in range: {min} to {max}\",\n \"no-opamp-found\": \"None found\",\n \"peak-current\": \"Peak Current Value must be in range: {min} to {max}\",\n \"peak-light-intensity\": \"Peak Light Intensity must be in range: {min} to {max}\",\n \"peak-voltage\": \"Peak Voltage Value must be in range: {min} to {max}\",\n \"reverse-voltage\": \"Reverse Voltage value must be in range: {min} to {max}\",\n \"shunt-resistance\": \"Shunt Resistance Value must be in range: {min} to {max}\",\n \"speed\": \"Speed Value must be in range: {min} to {max}\"\n }\n}], [\"ja-jp\", {\n \"controls\": {\n \"future\": {\n \"placeholder\": \"将来の開発のためのプレースホルダー\",\n \"q\": \"Q\"\n },\n \"schematic-table\": {\n \"model\": {\n \"photodiode\": {\n \"bias\": \"バイアス\",\n \"cd\": \"CD\",\n \"circuitName\": \"回路名\",\n \"ip\": \"IP\",\n \"rsh\": \"rsh\",\n \"vBias\": \"vバイアス\",\n \"vr\": \"vr\"\n },\n \"stage1\": {\n \"bw\": \"bw\",\n \"cf\": \"cf\",\n \"cin\": \"シン\",\n \"opamp\": {\n \"partNumber\": \"オペアンプ\"\n },\n \"q\": \"q\",\n \"rf\": \"rf\",\n \"rin\": \"リン\",\n \"title\": \"ステージ1\"\n },\n \"stage2\": {\n \"bw\": \"bw\",\n \"cfilter\": \"cfilter\",\n \"opamp\": {\n \"partNumber\": \"opAmp\"\n },\n \"rf\": \"rf\",\n \"rfilter\": \"rfilter\",\n \"rg\": \"rg\",\n \"title\": \"Stage 2\"\n }\n },\n \"title\": \"フォトダイオード\"\n }\n },\n \"current-calculation\": {\n \"active-area\": \"アクティブ領域:\",\n \"cancel\": \"キャンセル\",\n \"equals\": \" = \",\n \"instruction\": \"ピーク光度あるいはピーク・フォトダイオード電流を入力してください:\",\n \"multiply\": \" X \",\n \"peak-current\": \"ピーク・フォトダイオード電流:\",\n \"peak-light-intensity\": \"光量のピーク強度:\",\n \"sensitivity\": \"感度:\",\n \"title\": \"ピーク・フォトダイオード電流の計算\",\n \"use-this-peak\": \"このピーク電流を使用します\"\n },\n \"dialogs\": {\n \"download\": {\n \"error-message\": \"設計ファイルを取得できません。 このエラーは、以下の理由で発生している場合があります。 p>
1)サーバとの接続が切れているため。 p>
2)サービスが停止されているため。\",\n \"error-title\": \"ダウンロード\"\n },\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 \"load\": {\n \"invalid-file\": \"有効でない設計ファイルです。ファイルをご確認ください。\",\n \"invalid-parts\": \"{numParts,plural,other{設計を読み込めません。この設計で使用されている次の部品は、このアプリケーションではサポートされていません: }}{parts}\",\n \"no-opamps\": \"オペアンプのデータが入手できません。設計を読み込むことができません。ブラウザを更新してみてください。引き続きこの問題が発生する場合は、フォトダイオード回路設計ウィザードの右上部にある[ご意見・ご要望]ボタンで問題をご報告ください。\",\n \"title\": \"設計を読み込む\"\n },\n \"samples\": {\n \"title\": \"サンプル注文\"\n },\n \"save\": {\n \"error-message\": \"デザインを保存できません。入力したデータが正しいか確認してから保存してください。\",\n \"error-title\": \"デザインを保存\"\n },\n \"share\": {\n \"share-dialog-ng-message\": \"回路を共有できません。サーバーの接続不良による可能性があります。再度お試しください。\",\n \"share-dialog-ok-message\": \"回路は共有されました\",\n \"title\": \"自分の設計をメールで送信\"\n },\n \"system\": {\n \"application-busy\": \"処理中・・・\",\n \"connecting-to\": \"Connecting to {tool}...\",\n \"download-create-bom\": \"BOM ファイルを作成中・・・\",\n \"download-create-data\": \"データ・ファイルを作成中・・・\",\n \"download-create-design\": \"設計ファイルの作成中・・・\",\n \"download-create-eval-board\": \"評価用ボード・ファイルを作成中・・・\",\n \"download-create-graph\": \"Graph データを作成中・・・\",\n \"download-create-pdf\": \"PDFファイルを作成中・・・\",\n \"download-create-spice\": \"SPICEファイルを作成中・・・\",\n \"download-downloading\": \"ダウンロード中・・・\",\n \"download-requesting\": \"送信中・・・\",\n \"error-config-data\": \"構成データが入手できません。フォトダイオードの仕様を正しく検証できないため続行できません。ブラウザを更新してみてください。引き続きこの問題が発生する場合は、フォトダイオード回路設計ウィザードの右上部にある[ご意見・ご要望]ボタンで問題をご報告ください。\",\n \"error-opamp-data\": \"オペアンプのデータが入手できません。フォトダイオード回路設計ウィザードを続行できません。設計を保存しブラウザを更新してみてください。引き続きこの問題が発生する場合は、フォトダイオード回路設計ウィザードの右上部にある[ご意見・ご要望]ボタンで問題をご報告ください。\",\n \"error-pst-data\": \"現在データ・マップが入手できません。そのため、オペアンプ・テーブルを表示できません。設計を保存しブラウザを更新してみてください。引き続きこの問題が発生する場合は、フォトダイオード回路設計ウィザードの右上部にある[ご意見・ご要望]ボタンで問題をご報告ください。\",\n \"error-sensor-data\": \"現在センサー・データが入手できません。そのため、センサー・テーブルを表示できません。設計を保存しブラウザを更新してみてください。引き続きこの問題が発生する場合は、フォトダイオード回路設計ウィザードの右上部にある[ご意見・ご要望]ボタンで問題をご報告ください。\",\n \"loading-opamp-data\": \"オペアンプ・データ読み込み中...\",\n \"sending-filter\": \"Sending filter to {tool}...\",\n \"title\": \"アプリケーション・メッセージ\"\n }\n },\n \"download\": {\n \"data-files\": {\n \"frequency-response\": {\n \"frequency\": \"周波数\",\n \"magnitude\": \"振幅\"\n },\n \"noise-gain\": {\n \"caps\": \"(Cin + Cf) / Cf\",\n \"frequency\": \"周波数\",\n \"noise-gain\": \"ノイズゲイン\",\n \"opamp-gain\": \"オペアンプ・ゲイン\",\n \"zero\": \"(Cin || Cf) (Rin || Rf)
Zero\"\n },\n \"pulse-response\": {\n \"pulse-response\": \"パルス応答\",\n \"time-axis\": \"時間軸\"\n },\n \"spectral-noise\": {\n \"frequency\": \"周波数\",\n \"opi\": \"Op Amp I\",\n \"opi2\": \"Op Amp 2 I\",\n \"opv\": \"Op Amp V\",\n \"opv2\": \"Op Amp 2 V\",\n \"rf\": \"Rf\",\n \"rfilter\": \"Rfilter\",\n \"rin\": \"Rin\",\n \"total\": \"Total\"\n }\n },\n \"pdf-content\": {\n \"pdf-data-fields\": {\n \"capacitance\": \"静電容量 (Cd)\",\n \"one-stage\": \"1ステージ\",\n \"peak-current\": \"ピーク電流 (Ip)\",\n \"peak-voltage\": \"ピーク電圧 (Vp)\",\n \"photodiode-bias\": \"フォトダイオードのバイアス電圧\",\n \"requested-bandwidth\": \"希望する帯域\",\n \"reverse-voltage\": \"逆電圧 (Vr)\",\n \"sensor\": \"センサー\",\n \"shunt-resistance\": \"フォトダイオードのシャント抵抗 (Rsh)\",\n \"stages\": \"段\",\n \"two-stage\": \"2ステージ\"\n },\n \"pdf-data-ie-image-missing\": \"大変申し訳ありませんが、このツールをExplorer 8 またはそれ以下のバージョンでお使いの場合、画像を表示することができません。Firefox,Chrome,または Explorer 9をお使いください。\",\n \"pdf-desc\": \"{desc}\\n\\n作成者 {user} 作成日 {date}\",\n \"pdf-desc-no-design-name\": \"作成者 {user} 作成日{date}\",\n \"pdf-desc-no-name-desc\": \"作成日{date}\",\n \"pdf-desc-no-user-name\": \"{desc}\\n\\n作成日 {date}\",\n \"pdf-heading\": \"フォトダイオード・デザイン・レポート\",\n \"pdf-page-headers\": {\n \"bill-of-materials\": \"部品表\",\n \"circuit\": \"回路\",\n \"frequency-response\": \"周波数応答\",\n \"noise-gain\": \"ノイズ・ゲイン\",\n \"pulse-response\": \"パルス応答\",\n \"snr\": \"SNR\",\n \"spectral-noise\": \"スペクトル・ノイズ密度\"\n },\n \"pdf-subheading\": \"フォトダイオードの特性と部品\",\n \"pdf-tool-name\": \"フォトダイオード\"\n },\n \"spice-files\": {\n \"message_netlist_readme\": \"This directory (Spice Files) contains three simulation-ready SPICE netlists.\\r\\nThese netlists contain the photodiode amplifier design generated by Photodiode \\r\\nWizard, and the corresponding SPICE macromodels for the selected op amp(s). \\r\\nAlso included is a suitable input signal, and appropriate analysis mode \\r\\n(.AC, .TRAN, .NOISE).\\r\\n\\nThese netlists are text-based .cir files, and should be compatible with a wide\\r\\nvariety of SPICE simulators. More information about text-based SPICE netlists\\r\\ncan be found at: http://bwrcs.eecs.berkeley.edu/Classes/IcBook/SPICE/ \\r\\n\\n\\t- ACAnalysis.cir: Simulates AC response of the photodiode amplifier design. \\r\\n\\t Output of circuit can be plotted by probing V(OUT) \\r\\n\\n\\t- TransientAnalysis.cir: Simulates the step response of the photodiode \\r\\n\\t amplifier design. Output of circuit can be plotted by \\r\\n\\t probing V(OUT) \\r\\n\\n\\t- NoiseAnalysis.cir: Simulates the noise of the photodiode amplifier design. \\r\\n\\t Noise gain can be plotted by probing GAIN, or \\r\\n\\t V(ONOISE)/V(INOISE) \\r\\n\\n\\nAny questions about these SPICE netlists, or about Photodiode Wizard in general \\r\\ncan be submitted at: \\r\\nhttp://ez.analog.com/community/amplifiers/operational-amplifiers \\r\\n\",\n \"message_netlist_readme_filename\": \"README.txt\",\n \"message_no_netlist_filename\": \"Why no netlist files.txt\",\n \"message_no_schematic\": \"現在、LTspiceはアナログ・デバイセズのツールとなり、SPICEネットリストをLTspiceモデルに変換しております。残念ながら、お客様の設計で使用しているオペアンプ製品は、現在LTspiceでは使用できません。特定の製品をLTspiceで使用されることをご希望の場合には、営業担当者にご連絡いただくか、このツールのフィードバック機能よりご意見をお送りください。\\r\\n\\r\\nSPICEシュミレーション・ツールでのサポート済み製品:\\r\\n\",\n \"message_no_schematic_filename\": \"Why no LTspice.txt\",\n \"message_no_schematic_no_netlist\": \"アナログ・デバイセズは、現在SPICE ネットリストのオペアンプ製品をLTspiceにてご使用いただけるよう移行を行っております。お客様の設計にはLTspiceで使用できるものと使用できないものがあり、このツールではSPICE用ファイルを作成することが出来ません。ご不便をお掛けしておりますこと、お詫び申し上げます。特定の製品をLTspiceで使用されることをご希望の場合には、営業担当者にご連絡いただくか、このツールのフィードバック機能よりご意見を頂きますようお願い申し上げます。\\r\\n\\r\\nSPICEシュミレーション・ツールでのサポート済み製品:\\r\\n\",\n \"message_no_schematic_no_netlist_filename\": \"README.txt\",\n \"message_part_no_netlist\": \"以下の部分は、ネットリストモデル情報を生成できません。\\r\\n\",\n \"message_part_no_spice_info\": \"The following op amps in your design do not have LTspice models or text netlist models.\\r\\nIf you would like ADI to prioritize LTspice model generation for a particular part, please let your sales representative know or send feedback through this tool.\\r\\n\",\n \"message_part_no_spice_info_filename\": \"Why no spice files.txt\"\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 \"figures\": {\n \"bom\": {\n \"description\": \"「設計用ファイル」のボタンをクリックすると、テキストファイル形式のBOMのzipファイルをダウンロードできます。\",\n \"designator\": \"リファレンス・デジグネーター\",\n \"extra-components\": {\n \"header\": \"ヘッダ\",\n \"jumper\": \"ジャンパ\",\n \"sma-jack\": \"SMAジャック、ボード・エッジ、メス\",\n \"sma-male\": \"オス-オスSMA\",\n \"socket\": \"ソケット\",\n \"test-pin\": \"テスト・ピン\"\n },\n \"material\": \"材料\",\n \"materials\": {\n \"tantalum\": \"タンタル\"\n },\n \"package\": \"パッケージ\",\n \"quantity\": \"量\",\n \"title\": \"部品リスト(BOM)\",\n \"tolerance\": \"許容誤差\",\n \"value\": \"値\"\n },\n \"frequency-response\": {\n \"fn\": \"fN = {fn}Hz\",\n \"hover-graph-legend\": {\n \"trans-gain\": \"トランスインピーダンス・ゲイン: \",\n \"x-title\": \"周波数: \",\n \"x-unit\": \"Hz\",\n \"y-unit\": \"dB\",\n \"y-unit2\": \"V/A\"\n },\n \"q\": \"Q = {q}\",\n \"title\": \"周波数応答\",\n \"tooltip\": \"Frequency Response\",\n \"x-title\": \"周波数(Hz)\",\n \"y-title\": \"トランスインピーダンス・ゲイン({unit})\"\n },\n \"noise-gain\": {\n \"graph-legend\": {\n \"caps\": \"(Cin + Cf) / Cf\",\n \"noise-gain\": \"ノイズゲイン\",\n \"opamp-gain\": \"オペアンプ・ゲイン\",\n \"x-title\": \"周波数\",\n \"zero\": \"(Cin || Cf) (Rin || Rf)
Zero\"\n },\n \"hover-graph-legend\": {\n \"caps\": \"(Cin + Cf) / Cf: \",\n \"noise-gain\": \"ノイズゲイン: \",\n \"opamp-gain\": \"オペアンプ・ゲイン: \",\n \"x-title\": \"周波数: \",\n \"x-unit\": \"Hz\",\n \"y-unit\": \"dB\",\n \"y-unit2\": \"V/V\",\n \"zero\": \"(Cin || Cf) (Rin || Rf) Zero: \"\n },\n \"title\": \"ノイズ・ゲイン\",\n \"tooltip\": \"ノイズ・ゲイン\",\n \"x-title\": \"周波数(Hz)\",\n \"y-title\": \"ゲイン({unit})\"\n },\n \"pulse-response\": {\n \"hover-graph-legend\": {\n \"circuit-output\": \"回路出力: \",\n \"x-title\": \"時間: \",\n \"x-unit\": \"秒\",\n \"y-unit\": \"V\"\n },\n \"overshoot\": \"オーバーシュート = {overshootPercent}%\",\n \"rise-time\": \"立上り時間(10%~90%)= {riseTime}s\",\n \"title\": \"パルス応答\",\n \"tooltip\": \"Pulse Response\",\n \"x-title\": \"時間(秒)\",\n \"y-title\": \"回路出力(V)\"\n },\n \"schematic\": {\n \"amp-single-stage-title-1\": \"トランスインピーダンス・\",\n \"amp-single-stage-title-2\": \"アンプ\",\n \"amp-single-stage-title-3\": \"\",\n \"amp-stage-one-title-1\": \"1段\",\n \"amp-stage-one-title-2\": \"トランスインピーダンス・\",\n \"amp-stage-one-title-3\": \"アンプ\",\n \"amp-stage-two-title-1\": \"2段\",\n \"amp-stage-two-title-2\": \"追加ゲイン\",\n \"amp-stage-two-title-3\": \"とフィルタリング\",\n \"bypass-capacitors\": \"バイパスコンデンサ\",\n \"equivalent-circuit-tooltip\": \"Equivalent Circuit\",\n \"photodiode-model\": \"フォトダイオードの等価回路モデル ( {pd} )\",\n \"photodiode-model-custom\": \"カスタム\",\n \"photodiode-model-next-steps\": \"製品番号: {pd}\",\n \"photodiode-stage-title-1\": \"フォトダイオード\",\n \"photodiode-stage-title-2\": \"\",\n \"spares\": \"スペア\",\n \"supply-voltage-title-1\": \"供給電圧\",\n \"supply-voltage-title-2\": \"最小値: ± {minVoltage}V\",\n \"supply-voltage-title-3\": \"最大値: ± {maxVoltage}V\",\n \"supply-voltage-tooltip\": \"Supply Voltage\",\n \"title\": \"回路\",\n \"warning-cf-less-than-1pF\": \"警告:お客様の設計回路に必要とされるフィードバック容量(Cf)は {feedback}F。 この低いレベルおいては、基板の寄生容量はこの設計のピーキング(Q)に大きく影響します。 Cfの実際の値はお客様のPCBボードで実験的に決める必要があります。 値が低すぎるのでツールはコンデンサ容量を標準値に変換しませんでした。\",\n \"warning-gain-greater-than-1-stable\": \"Warning: This circuit may not be stable. The {opamp} is stable for noise gains of {gain} or greater. This means (Cd + Cf) / Cf should be larger than {gain}. In the circuit above Cd = {capacitance}F and Cf = {feedback}F, so (Cd + Cf) / Cf = {noise}. Make sure you verify in spice before building.\",\n \"why-the-spares-tooltip\": \"Why the Spares?\"\n },\n \"snr\": {\n \"enob\": \"ENOB = {enob} bits\",\n \"minimum-signal\": \"最小信号(ノイズフロア)\",\n \"noise-1f-not-modeled\": \"1/fノイズとテール電流ノイズはモデル化されていません。\",\n \"noise-contributors\": \"ノイズの要因 (V rms)\",\n \"noise-floor\": \"出力換算: {voltage}V rms\",\n \"noise-referred-output\": \"全出力換算ノイズ\",\n \"opamp-current\": \"オペアンプ電流\",\n \"opamp-voltage\": \"オペアンプ電圧\",\n \"output-voltage\": \"出力電圧: {voltage}V\",\n \"peak-signal\": \"ピークシグナル\",\n \"photodiode-current\": \"フォトダイオード電流: {current}A\",\n \"photodiode-current-rms\": \"入力換算: {current}A rms\",\n \"rf\": \"RF\",\n \"rfilter\": \"RFILTER\",\n \"rg\": \"RG\",\n \"rin\": \"RIN\",\n \"snr\": \"SNR = {snr} dB\",\n \"stage-1\": \"1段目\",\n \"stage-1-total\": \"1段目合計\",\n \"stage-2\": \"2段目\",\n \"stage-2-total\": \"2段目合計\",\n \"title\": \"SNR\",\n \"tooltip\": \"SNR/Dynamic Range\",\n \"total\": \"合計\",\n \"total-noise\": \"総合ノイズ: {noise}V rms\"\n },\n \"spectral-noise\": {\n \"graph-legend\": {\n \"opi\": \"Op Amp I\",\n \"opi2\": \"Op Amp 2 I\",\n \"opv\": \"Op Amp V\",\n \"opv2\": \"Op Amp 2 V\",\n \"rf\": \"Rf\",\n \"rfilter\": \"Rfilter\",\n \"rin\": \"Rin\",\n \"total\": \"Total\",\n \"x-title\": \"周波数\"\n },\n \"hover-graph-legend\": {\n \"opi\": \"Op Amp I: \",\n \"opi2\": \"Op Amp 2 I: \",\n \"opv\": \"Op Amp V: \",\n \"opv2\": \"Op Amp 2 V: \",\n \"rf\": \"Rf: \",\n \"rfilter\": \"Rfilter: \",\n \"rin\": \"Rin: \",\n \"total\": \"Total: \",\n \"x-title\": \"周波数: \",\n \"x-unit\": \"Hz\",\n \"y-unit\": \"V/√Hz\"\n },\n \"title\": \"スペクトラル・ノイズ密度\",\n \"tooltip\": \"Spectral Noise Density\",\n \"x-title\": \"周波数(Hz)\",\n \"y-title\": \"スペクトラル・ノイズ密度 (V/√Hz)\"\n }\n },\n \"help\": {\n \"bias-polarity\": {\n \"title\": \"フォトダイオード・バイアス\"\n },\n \"circuit-peaking\": {\n \"title\": \"出力信号:ピーキング\"\n },\n \"circuit-stages\": {\n \"title\": \"段\"\n },\n \"dynamic-range\": {\n \"title\": \"SNR/ダイナミック・レンジ\"\n },\n \"equivalent-circuit\": {\n \"title\": \"フォトダイオードの等価回路\"\n },\n \"frequency-response\": {\n \"title\": \"周波数応答\"\n },\n \"main-help\": {\n \"title\": \"フォトダイオード回路設計ウィザードのヘルプ\"\n },\n \"noise-gain\": {\n \"title\": \"ノイズ・ゲイン\"\n },\n \"opamp\": {\n \"title\": \"オペアンプ\"\n },\n \"peak-current\": {\n \"title\": \"フォトダイオードの仕様:ピーク電流\"\n },\n \"peak-voltage\": {\n \"title\": \"出力信号:ピーク電圧\"\n },\n \"photodiode-capacitance\": {\n \"title\": \"フォトダイオードの仕様:容量(CD)\"\n },\n \"pulse-response\": {\n \"title\": \"パルス応答\"\n },\n \"quick-results\": {\n \"title\": \"クイック・リザルト\"\n },\n \"reverse-voltage\": {\n \"title\": \"フォトダイオード・バイアス: 逆電圧 (VR)\"\n },\n \"shunt-resistance\": {\n \"title\": \"フォトダイオードの仕様:シャント抵抗(RSH)\"\n },\n \"spectral-noise-density\": {\n \"title\": \"スペクトル・ノイズ密度\"\n },\n \"stability\": {\n \"title\": \"安定性\"\n },\n \"supply-voltage\": {\n \"title\": \"供給電圧\"\n },\n \"target-speed\": {\n \"title\": \"出力信号:スピード\"\n },\n \"why-the-spares\": {\n \"title\": \"なぜ予備品?\"\n }\n },\n \"main\": {\n \"busy\": \"処理中・・・\",\n \"next-tab\": \"次のタブ\",\n \"previous-tab\": \"前のタブ\",\n \"title\": \"フォトダイオード 回路設計 ウィザード\"\n },\n \"marginal-design\": {\n \"button\": \"設計限界を示します\",\n \"message\": \"ロバストな設計回路を作成するために、上記のような設計回路のパラメータを調整する事をお勧めします。 もしそれができなければ、動作すると思われるオペアンプを探す事は困難です。 ツールはこの設計回路で次の問題を認識しました。 \"\n },\n \"menu\": {\n \"links\": {\n \"feedback\": \"ご意見 ・ ご要望\",\n \"help\": \"ヘルプ\",\n \"load\": \"設計を読み込む\",\n \"save\": \"保存\"\n },\n \"tabs\": {\n \"circuit-design\": \"回路設計\",\n \"next-steps\": \"次のステップ\",\n \"photodiode\": \"フォトダイオード\"\n }\n },\n \"model-error\": {\n \"amp_status_bias_current_is\": \"高い出力オフセット(バイアス電流は {data})\",\n \"amp_status_big_2nd_stage_gain\": \"要求される2段目のゲインは {data}\",\n \"amp_status_cf_less_100fF\": \"Cf < 0.1pF\",\n \"amp_status_cf_less_50fF\": \"Cf < 50fF\",\n \"amp_status_cfb_no_cf\": \"現在の帰還アンプでは帰還パスのコンデンサに対応できません。\",\n \"amp_status_cfb_rf_too_small\": \"无法驱动Rf; \",\n \"amp_status_dB_error\": \"データベース・エラー - データベースの一部間違ったデータ\",\n \"amp_status_gbw_less_than_bandwith_requested\": \"Op Amp GBW less than bandwidth requested \",\n \"amp_status_high_vos\": \"高い出力オフセット(入力 Vosは {data})\",\n \"amp_status_internal_cf_too_high\": \"内部フィードバック容量が高すぎる\",\n \"amp_status_min_stable_gain\": \"最小安定ゲイン= {data}\",\n \"amp_status_not_enough_peaking\": \"充分なピークを作成できません\",\n \"amp_status_not_fast_enough\": \"速度が十分でありません\",\n \"amp_status_quad\": \"クワッド\",\n \"amp_status_slew_rate_low\": \"スルーレートの値が低すぎます\",\n \"amp_status_slew_rate_marginal\": \"スルーレートが不十分\",\n \"amp_status_specialty_amp\": \"特殊機能アンプ\",\n \"amp_status_too_fast\": \"高速アンプ=低SNR\",\n \"amp_status_voltage_not_enough\": \"電圧範囲はピーク出力電圧に対して不十分です\",\n \"amp_status_zero_drift\": \"ゼロ・ドリフト\",\n \"fixed_op_amp_no_good\": \"{partName}で設計要求を満たすことはできません。別のオペアンプを選択するか、オペアンプのロックを解除してプログラムを使って選択してください。
{partName}は理由として適していません。:\",\n \"internal_cf_too_high\": \"{partName}の内部フィードバック容量は{cfint}Fです。そのため、標準的なアンプでは通常{cf}Fの帰還容量が、{partName}では{cfext}Fとなります。
{partName}が不向きな理由:\",\n \"no_op_amps_available_for_first_stage_too_fast\": \"設計要求を満たす1段目のオペアンプはありません。
以下をお試しください:
- 速度に対する要求を低くしてください
- フォトダイオードの容量を小さくしてください
- ピーク出力電圧を低くしてください
- フォトダイオードのピーク電流を増やす
\",\n \"no_op_amps_available_for_first_stage_too_slow\": \"これらの設計要求を満たすオペアンプはありません。
以下をお試しください:
- 2段回路構成を選んでください
- 速度に対する要求を低くしてください
- フォトダイオードの容量を小さくしてください
- ピーク出力電圧を低くしてください
- フォトダイオードのピーク電流を増やしてください
\",\n \"no_op_amps_available_for_second_stage\": \"設計要求を満たす2段目のオペアンプはありません。
解決方法:
- 速度に対する要求を低くしてください
- ピーク出力電圧を低くしてください
\",\n \"no_op_amps_available_for_single_stage_too_fast\": \"これらの設計要求を満たすオペアンプはありません。
以下をお試しください:
- 2段回路構成を選んでください
- 速度に対する要求を低くしてください
- フォトダイオードの容量を小さくしてください
- ピーク出力電圧を低くしてください
- フォトダイオードのピーク電流を増やしてください
\",\n \"no_op_amps_available_for_single_stage_too_slow\": \"これらの設計要求を満たすオペアンプはありません。
以下をお試しください:
- 速度を増やす
- フォトダイオードの容量を大きくする
- ピーク出力電圧を大きくする
- フォトダイオードのピーク電流を減少させる
\",\n \"peak_light_error\": \"お客様が入力したピーク電流は許容範囲内に入りません ({min} - {max})。 値を更新してください。\",\n \"peak_photodiode_error\": \"ピーク電流は許容範囲内に入りません ({min} - {max})。\",\n \"rf_too_high\": \"必要となるゲインは1段のアンプ構成としては高過ぎます。
解決方法:
- 2段回路構成を選んでください
- ピーク出力電圧を低くしてください
- フォトダイオードのピーク電流を増やしてください
\"\n },\n \"opamp-selection\": {\n \"GBW\": \"GBW\",\n \"cancel\": \"キャンセル\",\n \"comment-drop-down\": {\n \"message\": {\n \"amp_status_bias_current_is\": \"高い出力オフセット(バイアス電流は {value}A)\",\n \"amp_status_big_2nd_stage_gain\": \"要求される2段目のゲインは {value}\",\n \"amp_status_cf_less_100fF\": \"Cf < 0.1pF\",\n \"amp_status_cf_less_50fF\": \"Cf < 50fF\",\n \"amp_status_cfb_no_cf\": \"現在の帰還アンプでは帰還パスのコンデンサに対応できません。\",\n \"amp_status_cfb_rf_too_small\": \"无法驱动Rf; \",\n \"amp_status_dB_error\": \"データベース・エラー - データベースの一部間違ったデータ\",\n \"amp_status_gbw_less_than_bandwith_requested\": \"Op Amp GBW less than bandwidth requested \",\n \"amp_status_high_vos\": \"高い出力オフセット(入力 Vosは {value}V)\",\n \"amp_status_internal_cf_too_high\": \"内部フィードバック容量が高すぎる\",\n \"amp_status_last_time_buy\": \"ラスト・タイム・バイ\",\n \"amp_status_min_stable_gain\": \"最小安定ゲイン= {value} \",\n \"amp_status_not_allowed\": \"使用できません:\",\n \"amp_status_not_enough_peaking\": \"充分なピークを作成できません\",\n \"amp_status_not_fast_enough\": \"速度が十分でありません\",\n \"amp_status_not_recommended\": \"非推奨:\",\n \"amp_status_not_recommended_for_new_designs\": \"新規設計にお勧めしません。\",\n \"amp_status_obsolete\": \"生産中止\",\n \"amp_status_quad\": \"クワッド\",\n \"amp_status_recommended\": \"推奨\",\n \"amp_status_slew_rate_low\": \"スルーレートの値が低すぎます\",\n \"amp_status_slew_rate_marginal\": \"スルーレートが不十分\",\n \"amp_status_specialty_amp\": \"特殊機能アンプ\",\n \"amp_status_too_fast\": \"高速アンプ=低SNR\",\n \"amp_status_voltage_not_enough\": \"電圧範囲はピーク出力電圧に対して不十分です\",\n \"amp_status_zero_drift\": \"ゼロ・ドリフト\"\n },\n \"not-allowed\": \"許可されていない\",\n \"not-allowed-match\": \"使用できません\",\n \"not-recommended\": \"おススメではない\",\n \"not-recommended-match\": \"非推奨\",\n \"recommended\": \"お勧め\",\n \"recommended-match\": \"推奨\",\n \"show-all\": \"すべて表示\"\n },\n \"comments\": \"コメント\",\n \"part-label\": \"部品\",\n \"row-count\": \"'{count, plural, =0 {{total}製品中#個のオペアンプを表示しています。フィルタを確認してください。} other {{total}製品中#個のオペアンプを表示しています。}}'\",\n \"select\": \"選ぶ\",\n \"spice-drop-down\": {\n \"no\": \"いいえ\",\n \"show-all\": \"すべて表示\",\n \"yes\": \"はい\"\n },\n \"status-drop-down\": {\n \"not-recommended\": \"新規設計には非推奨\",\n \"not-recommended-match\": \"Not Recommended for New Designs\",\n \"production\": \"生産/供給中\",\n \"production-match\": \"Production\",\n \"recommended\": \"新規設計にお薦めします。\",\n \"recommended-match\": \"Recommended for New Designs\",\n \"show-all\": \"すべて表示\"\n },\n \"supply-max\": \"最大供給\",\n \"supply-min\": \"最少供給\",\n \"temp-range\": \"温度範囲\",\n \"title\": \"オペアンプを選ぶ\"\n },\n \"parameter-selector\": {\n \"choose-parameters\": \"パラメータを選ぶ\",\n \"ok\": \"OK\"\n },\n \"sensor-selection\": {\n \"active-area\": \"アクティブ領域\",\n \"cancel\": \"キャンセル\",\n \"capacitance\": \"静電容量\",\n \"dark-current\": \"暗電流\",\n \"manufacturer\": \"メーカー名\",\n \"operating-temperature\": \"動作温度\",\n \"package\": \"梱包\",\n \"part-number\": \"部品番号\",\n \"product-page\": \"製品ページ\",\n \"resistance\": \"抵抗\",\n \"response-time\": \"応答時間\",\n \"reverse-breakdown\": \"逆方向ブレークダウン\",\n \"row-count\": \"'{count, plural, =0 {{total}製品中#個のセンサーを表示しています。フィルタを確認してください。} other {{total}製品中#個のセンサーを表示しています。}}'\",\n \"select\": \"選ぶ\",\n \"sensitivity\": \"感度\",\n \"spectral-peak\": \"スペクトルのピーク\",\n \"spectral-range\": \"スペクトル範囲\",\n \"spice\": \"SPICE\",\n \"spice-file\": \"SPICEファイル\",\n \"title\": \"センサーをお選びください。\",\n \"vendor-link\": \"ベンダーのデータシートリンク\",\n \"viewing-angle\": \"視野角\"\n },\n \"settings\": {\n \"circuit-design\": {\n \"enob\": \"ENOB: {enob} bits\",\n \"one-stage\": \"1 段\",\n \"opamp-lock\": \"Lock\",\n \"opamp-stage1\": \"1段\",\n \"opamp-stage2\": \"2段\",\n \"opamps\": \"Op Amps:\",\n \"opamps-tooltip\": \"Op Amp\",\n \"output-offset\": \"出力オフセット: {offset}V\",\n \"output-signal\": \"出力信号\",\n \"peak-voltage\": \"ピーク電圧 (VP)\",\n \"peak-voltage-tooltip\": \"ピーク電圧\",\n \"peaking\": \"ピーク\",\n \"peaking-high\": \"高\",\n \"peaking-low\": \"低\",\n \"peaking-tooltip\": \"ピーク\",\n \"quick-results\": \"クイック・リザルト\",\n \"quick-results-tooltip\": \"クイック・リザルト\",\n \"snr\": \"SNR: {snr} dB\",\n \"stages\": \"段\",\n \"stages-tooltip\": \"段\",\n \"target-bandwidth\": \"Target Bandwidth\",\n \"target-option-band\": \"帯域幅\",\n \"target-option-pulse\": \"パルス幅\",\n \"target-pulse-width\": \"目標とする速度\",\n \"target-speed-tooltip\": \"Speed\",\n \"two-stage\": \"2 段\"\n },\n \"next-steps\": {\n \"get-files\": \"ファイル取得\",\n \"get-files-all\": \"設計用ファイル\",\n \"get-files-all-tooltip\": \"SPICEファイル、BOM、評価ボードデザインファイル、PDFファイルのバージョン情報等が格納されたzipファイルをダウンロードする \",\n \"get-files-spice\": \"SPICE ファイル\",\n \"get-files-spice-tooltip\": \"SPICEファイルを含んだzipファイルをダウンロード\",\n \"mail\": \"同僚にメールする(email)\",\n \"mail-tooltip\": \"同僚に送る\",\n \"order\": \"注文\",\n \"order-samples\": \"サンプル注文\",\n \"order-samples-tooltip\": \"構成部品のサンプルを注文\",\n \"share\": \"共有\"\n },\n \"photodiode\": {\n \"bias-polarity-tooltip\": \"フォトダイオードのバイアス電圧\",\n \"capacitance-1\": \"静電容量 (CD)\",\n \"capacitance-2\": \"@ VR = {vr} V\",\n \"capacitance-tooltip\": \"静電容量\",\n \"capacitance-warning\": \"Be careful. This is the capacitance at your reverse voltage, which may be different than what is specified in the datasheet table. You may need to read this value from a datasheet graph instead.\",\n \"or\": \"または\",\n \"peak-current\": \"ピーク電流 (IP)\",\n \"peak-current-tooltip\": \"ピーク電流\",\n \"photodiode-bias\": \"フォトダイオードのバイアス電圧\",\n \"photodiode-select\": \"フォトダイオードを選択\",\n \"photodiode-specs\": \"フォトダイオードの仕様\",\n \"reverse-voltage\": \"逆電圧 (VR)\",\n \"reverse-voltage-negative\": \"負\",\n \"reverse-voltage-positive\": \"正\",\n \"reverse-voltage-tooltip\": \"逆電圧\",\n \"shunt-resistance\": \"フォトダイオードのシャント抵抗 (RSH)\",\n \"shunt-resistance-tooltip\": \"フォトダイオードのシャント抵抗\"\n }\n },\n \"units\": {\n \"A\": \"A\",\n \"F\": \"F\",\n \"Q\": \"Q\",\n \"R\": \"Ω\",\n \"V\": \"V\",\n \"active-area\": \"mm2\",\n \"dB\": \"dB\",\n \"farad\": \"F\",\n \"hertz\": \"Hz\",\n \"meters\": \"m\",\n \"ohm\": \"Ohm\",\n \"operating-temperature\": \"°C\",\n \"peak-light-intensity\": \" W/m2\",\n \"seconds\": \"s\",\n \"sensitivity\": \"A/W\",\n \"unit-price\": \"$ US\",\n \"viewing-angle\": \"°\",\n \"volts-per-amp\": \"V/A\",\n \"volts-per-volt\": \"V/V\"\n },\n \"validation-error\": {\n \"button-tooltip\": \"エラーを修正してから続けてください。\",\n \"capacitance\": \"コンデンサ値は次の範囲にある必要があります: {min} ~ {max}\",\n \"invalid-input-error\": \"{field}フィールドに入力された{value}という値は解析できません。\",\n \"min-pulse-speed\": \"速度の値は次の範囲にある必要があります: {min} ~ {max}\",\n \"no-opamp-found\": \"None found\",\n \"peak-current\": \"ピーク電流値は次の範囲にある必要があります: {min} ~ {max}\",\n \"peak-light-intensity\": \"光量のピーク強度の範囲: {min} ~ {max}\",\n \"peak-voltage\": \"ピーク電圧値は次の範囲にある必要があります: {min} ~ {max}\",\n \"reverse-voltage\": \"逆電圧値は次の範囲にある必要があります: {min} ~ {max}\",\n \"shunt-resistance\": \"シャント抵抗値は次の範囲にある必要があります: {min} ~ {max}\",\n \"speed\": \"速度の値は次の範囲にある必要があります: {min} ~ {max}\"\n }\n}], [\"zh-cn\", {\n \"controls\": {\n \"future\": {\n \"placeholder\": \"未来发展的占位符\",\n \"q\": \"Q\"\n },\n \"schematic-table\": {\n \"model\": {\n \"photodiode\": {\n \"bias\": \"偏见\",\n \"cd\": \"光盘\",\n \"circuitName\": \"电路名称\",\n \"ip\": \"ip\",\n \"rsh\": \"rsh\",\n \"vBias\": \"偏差\",\n \"vr\": \"虚拟现实\"\n },\n \"stage1\": {\n \"bw\": \"体重\",\n \"cf\": \"参考\",\n \"cin\": \"辛\",\n \"opamp\": {\n \"partNumber\": \"运算放大器\"\n },\n \"q\": \"q\",\n \"rf\": \"射频\",\n \"rin\": \"凛\",\n \"title\": \"阶段1\"\n },\n \"stage2\": {\n \"bw\": \"bw\",\n \"cfilter\": \"cfilter\",\n \"opamp\": {\n \"partNumber\": \"opAmp\"\n },\n \"rf\": \"rf\",\n \"rfilter\": \"rfilter\",\n \"rg\": \"rg\",\n \"title\": \"Stage 2\"\n }\n },\n \"title\": \"光电二极管\"\n }\n },\n \"current-calculation\": {\n \"active-area\": \"有效面积:\",\n \"cancel\": \"取消\",\n \"equals\": \" = \",\n \"instruction\": \"输入光强度峰值或光电二极管峰值电流:\",\n \"multiply\": \" X \",\n \"peak-current\": \"光电二极管峰值电流:\",\n \"peak-light-intensity\": \"光强度峰值:\",\n \"sensitivity\": \"灵敏度:\",\n \"title\": \"光电二极管峰值电流计算\",\n \"use-this-peak\": \"采用该峰值电流\"\n },\n \"dialogs\": {\n \"download\": {\n \"error-message\": \"无法获取设计文件。出现此错误的原因可能有:
1)与服务器的连接中断。
2)服务中断。
\",\n \"error-title\": \"下载\"\n },\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 \"load\": {\n \"invalid-file\": \"设计文件无效。请验证您尝试加载的设计文件的内容。\",\n \"invalid-parts\": \"{numParts,plural,other{如果不能加载设计,接下来的设计文件将不支持这个应用:}}{parts}\",\n \"no-opamps\": \"运算放大器数据不可用。无法加载设计。请尝试刷新浏览器。如果问题依然存在,请使用光电二极管设计向导右上方的反馈按钮来报告该问题。\",\n \"title\": \"加载设计\"\n },\n \"samples\": {\n \"title\": \"申请样片\"\n },\n \"save\": {\n \"error-message\": \"無法保存設計。保存前請檢查您輸入的數據是否正確。\",\n \"error-title\": \"保存設計\"\n },\n \"share\": {\n \"share-dialog-ng-message\": \"无法共享设计,这可能是因为服务器连接问题。请重试。\",\n \"share-dialog-ok-message\": \"已共享设计\",\n \"title\": \"通过邮件发送我的设计\"\n },\n \"system\": {\n \"application-busy\": \"处理中...\",\n \"connecting-to\": \"Connecting to {tool}...\",\n \"download-create-bom\": \"正在创建BOM文件...\",\n \"download-create-data\": \"正在创建数据文件...\",\n \"download-create-design\": \"正在创建设计文件...\",\n \"download-create-eval-board\": \"正在创建评估板文件...\",\n \"download-create-graph\": \"正在创建图形数据...\",\n \"download-create-pdf\": \"正在创建PDF文件...\",\n \"download-create-spice\": \"正在创建SPICE文件...\",\n \"download-downloading\": \"正在下载……\",\n \"download-requesting\": \"正在请求……\",\n \"error-config-data\": \"配置数据不可用。由于因此无法正确验证光电二极管规格,无法继续进行操作。请尝试刷新浏览器。如果问题依然存在,请使用光电二极管设计向导右上方的反馈按钮来报告该问题。\",\n \"error-opamp-data\": \"运算放大器数据不可用。光电二极管设计向导无法继续运行。请保存您的设计,然后尝试刷新浏览器。如果问题依然存在,请使用光电二极管设计向导右上方的反馈按钮来报告该问题。\",\n \"error-pst-data\": \"数据映射暂时不可用,因此无法显示运算放大器表。请保存您的设计,然后尝试刷新浏览器。如果问题依然存在,请使用光电二极管设计向导右上方的反馈按钮来报告该问题。\",\n \"error-sensor-data\": \"传感器数据暂时不可用,因此无法显示传感器表。请保存您的设计,然后尝试刷新浏览器。如果问题依然存在,请使用光电二极管设计向导右上方的反馈按钮来报告该问题。\",\n \"loading-opamp-data\": \"加载 OpAmp 数据...\",\n \"sending-filter\": \"Sending filter to {tool}...\",\n \"title\": \"应用消息\"\n }\n },\n \"download\": {\n \"data-files\": {\n \"frequency-response\": {\n \"frequency\": \"频率\",\n \"magnitude\": \"幅度\"\n },\n \"noise-gain\": {\n \"caps\": \"(Cin + Cf) / Cf\",\n \"frequency\": \"频率\",\n \"noise-gain\": \"噪声增益\",\n \"opamp-gain\": \"运算放大器增益\",\n \"zero\": \"(Cin || Cf) (Rin || Rf) Zero\"\n },\n \"pulse-response\": {\n \"pulse-response\": \"脉冲响应\",\n \"time-axis\": \"时间轴\"\n },\n \"spectral-noise\": {\n \"frequency\": \"频率\",\n \"opi\": \"Op Amp I\",\n \"opi2\": \"Op Amp 2 I\",\n \"opv\": \"Op Amp V\",\n \"opv2\": \"Op Amp 2 V\",\n \"rf\": \"Rf\",\n \"rfilter\": \"Rfilter\",\n \"rin\": \"Rin\",\n \"total\": \"Total\"\n }\n },\n \"pdf-content\": {\n \"pdf-data-fields\": {\n \"capacitance\": \"电容 (Cd)\",\n \"one-stage\": \"单级\",\n \"peak-current\": \"峰值电流 (Ip)\",\n \"peak-voltage\": \"峰值电压 (Vp)\",\n \"photodiode-bias\": \"光电二极管偏置\",\n \"requested-bandwidth\": \"要求带宽\",\n \"reverse-voltage\": \"反向电压 (Vr)\",\n \"sensor\": \"传感器\",\n \"shunt-resistance\": \"分流电阻 (Rsh)\",\n \"stages\": \"级数\",\n \"two-stage\": \"双级\"\n },\n \"pdf-data-ie-image-missing\": \"很遗憾,若您使用IE 8或更低版本的IE浏览该工具,将无法生成图片。若您想要浏览页面上的图片,请使用Firefox、Chrome、IE 9或更高版本的IE浏览器。\",\n \"pdf-desc\": \"{desc}\\n\\n由{user}在{date}上创建\",\n \"pdf-desc-no-design-name\": \"由 {user} 创建于{date}\",\n \"pdf-desc-no-name-desc\": \"创建于{date}\",\n \"pdf-desc-no-user-name\": \"{desc}\\n\\n创建于 {date}\",\n \"pdf-heading\": \"光电二极管设计报告\",\n \"pdf-page-headers\": {\n \"bill-of-materials\": \"物料清单\",\n \"circuit\": \"电路\",\n \"frequency-response\": \"频率响应\",\n \"noise-gain\": \"噪声增益\",\n \"pulse-response\": \"脉冲响应\",\n \"snr\": \"SNR\",\n \"spectral-noise\": \"频谱噪声密度\"\n },\n \"pdf-subheading\": \"Photodiode属性和器件\",\n \"pdf-tool-name\": \"光电二极管\"\n },\n \"spice-files\": {\n \"message_netlist_readme\": \"This directory (Spice Files) contains three simulation-ready SPICE netlists.\\r\\nThese netlists contain the photodiode amplifier design generated by Photodiode \\r\\nWizard, and the corresponding SPICE macromodels for the selected op amp(s). \\r\\nAlso included is a suitable input signal, and appropriate analysis mode \\r\\n(.AC, .TRAN, .NOISE).\\r\\n\\nThese netlists are text-based .cir files, and should be compatible with a wide\\r\\nvariety of SPICE simulators. More information about text-based SPICE netlists\\r\\ncan be found at: http://bwrcs.eecs.berkeley.edu/Classes/IcBook/SPICE/ \\r\\n\\n\\t- ACAnalysis.cir: Simulates AC response of the photodiode amplifier design. \\r\\n\\t Output of circuit can be plotted by probing V(OUT) \\r\\n\\n\\t- TransientAnalysis.cir: Simulates the step response of the photodiode \\r\\n\\t amplifier design. Output of circuit can be plotted by \\r\\n\\t probing V(OUT) \\r\\n\\n\\t- NoiseAnalysis.cir: Simulates the noise of the photodiode amplifier design. \\r\\n\\t Noise gain can be plotted by probing GAIN, or \\r\\n\\t V(ONOISE)/V(INOISE) \\r\\n\\n\\nAny questions about these SPICE netlists, or about Photodiode Wizard in general \\r\\ncan be submitted at: \\r\\nhttp://ez.analog.com/community/amplifiers/operational-amplifiers \\r\\n\",\n \"message_netlist_readme_filename\": \"README.txt\",\n \"message_no_netlist_filename\": \"Why no netlist files.txt\",\n \"message_no_schematic\": \"既然 LTspice 是ADI公司的一部分,我们可将SPICE网络列表转换为 LTspice 模型。设计中的运算放大器当前没有可用的 LTspice 模型。如果您希望ADI优先考虑针对特定器件生成 LTspice 模型,请告诉您的销售代表或通过此工具发送反馈。\\r\\n\\r\\n由您设计中的器件支持的SPICE仿真:\\r\\n\",\n \"message_no_schematic_filename\": \"Why no LTspice.txt\",\n \"message_no_schematic_no_netlist\": \"ADI当前正处于将运算放大器从SPICE网络列表转换为LTspice模型的过程。您的设计包含一系列器件,有些器件具有基于文本的网络列表,而另一些具有LTspice文件。为此,该工具无法生成任何SPICE输出。对于由此带来的不便,我们表示歉意并将努力解决此问题。如果您希望ADI优先考虑针对特定器件生成LTspice模型,请告诉您的销售代表或通过此工具发送反馈。\\r\\n\\r\\n由您设计中的器件支持的SPICE仿真:\\r\\n\",\n \"message_no_schematic_no_netlist_filename\": \"README.txt\",\n \"message_part_no_netlist\": \"以下部分无法生成网表模型信息。\\r\\n\",\n \"message_part_no_spice_info\": \"The following op amps in your design do not have LTspice models or text netlist models.\\r\\nIf you would like ADI to prioritize LTspice model generation for a particular part, please let your sales representative know or send feedback through this tool.\\r\\n\",\n \"message_part_no_spice_info_filename\": \"Why no spice files.txt\"\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 \"figures\": {\n \"bom\": {\n \"description\": \" 点击“获取设计文件”下载Zip包,其中包含一张表格形式的物料清单。\",\n \"designator\": \"标识\",\n \"extra-components\": {\n \"header\": \"表头\",\n \"jumper\": \"跳线\",\n \"sma-jack\": \"SMA插孔、插口式电路板边缘\",\n \"sma-male\": \"插入式-插入式SMA\",\n \"socket\": \"插座\",\n \"test-pin\": \"测试引脚\"\n },\n \"material\": \"材料\",\n \"materials\": {\n \"tantalum\": \"钽\"\n },\n \"package\": \"封装\",\n \"quantity\": \"数量\",\n \"title\": \"材料清单(BOM)\",\n \"tolerance\": \"容差\",\n \"value\": \"值\"\n },\n \"frequency-response\": {\n \"fn\": \"fN = {fn}Hz\",\n \"hover-graph-legend\": {\n \"trans-gain\": \"跨阻增益: \",\n \"x-title\": \"频率: \",\n \"x-unit\": \"Hz\",\n \"y-unit\": \"dB\",\n \"y-unit2\": \"V/A\"\n },\n \"q\": \"Q = {q}\",\n \"title\": \"频率响应\",\n \"tooltip\": \"Frequency Response\",\n \"x-title\": \"频率(Hz)\",\n \"y-title\": \"跨阻增益({unit})\"\n },\n \"noise-gain\": {\n \"graph-legend\": {\n \"caps\": \"(Cin + Cf) / Cf\",\n \"noise-gain\": \"噪声增益\",\n \"opamp-gain\": \"运算放大器增益\",\n \"x-title\": \"频率\",\n \"zero\": \"(Cin || Cf) (Rin || Rf)
Zero\"\n },\n \"hover-graph-legend\": {\n \"caps\": \"(Cin + Cf) / Cf: \",\n \"noise-gain\": \"噪声增益: \",\n \"opamp-gain\": \"运算放大器增益: \",\n \"x-title\": \"频率: \",\n \"x-unit\": \"Hz\",\n \"y-unit\": \"dB\",\n \"y-unit2\": \"V/V\",\n \"zero\": \"(Cin || Cf) (Rin || Rf) Zero: \"\n },\n \"title\": \"噪声增益\",\n \"tooltip\": \"噪声增益\",\n \"x-title\": \"频率(Hz)\",\n \"y-title\": \"增益({unit})\"\n },\n \"pulse-response\": {\n \"hover-graph-legend\": {\n \"circuit-output\": \"电路输出: \",\n \"x-title\": \"时间: \",\n \"x-unit\": \"s\",\n \"y-unit\": \"伏\"\n },\n \"overshoot\": \"过冲 = {overshootPercent}%\",\n \"rise-time\": \"上升时间(10%至90%)= {riseTime}s\",\n \"title\": \"脉冲响应\",\n \"tooltip\": \"Pulse Response\",\n \"x-title\": \"时间(s)\",\n \"y-title\": \"电路输出(伏)\"\n },\n \"schematic\": {\n \"amp-single-stage-title-1\": \"互阻放大器\",\n \"amp-single-stage-title-2\": \"\",\n \"amp-single-stage-title-3\": \"\",\n \"amp-stage-one-title-1\": \"第1级\",\n \"amp-stage-one-title-2\": \"互阻放大器\",\n \"amp-stage-one-title-3\": \"\",\n \"amp-stage-two-title-1\": \"第2级\",\n \"amp-stage-two-title-2\": \"额外的增益\",\n \"amp-stage-two-title-3\": \"和滤波\",\n \"bypass-capacitors\": \"旁路电容\",\n \"equivalent-circuit-tooltip\": \"Equivalent Circuit\",\n \"photodiode-model\": \"光电二极管模型 ( {pd} )\",\n \"photodiode-model-custom\": \"定制\",\n \"photodiode-model-next-steps\": \"型号: {pd}\",\n \"photodiode-stage-title-1\": \"光电二极管\",\n \"photodiode-stage-title-2\": \"\",\n \"spares\": \"备件\",\n \"supply-voltage-title-1\": \"电源电压\",\n \"supply-voltage-title-2\": \"最小值: ± {minVoltage}V\",\n \"supply-voltage-title-3\": \"最大值: ± {maxVoltage}V\",\n \"supply-voltage-tooltip\": \"Supply Voltage\",\n \"title\": \"电路\",\n \"warning-cf-less-than-1pF\": \"警告:您的设计所需要的反馈电容Cf仅 {feedback}F. 在如此低的水平下,电路板电容将会显著 产生严重的峰化(Q)影响。实际Cf值应当被确定 根据您特定的PCB板凭经验确定。 由于该数值过低,工具未能转换 电容值转换为标准值。\",\n \"warning-gain-greater-than-1-stable\": \"Warning: This circuit may not be stable. The {opamp} is stable for noise gains of {gain} or greater. This means (Cd + Cf) / Cf should be larger than {gain}. In the circuit above Cd = {capacitance}F and Cf = {feedback}F, so (Cd + Cf) / Cf = {noise}. Make sure you verify in spice before building.\",\n \"why-the-spares-tooltip\": \"Why the Spares?\"\n },\n \"snr\": {\n \"enob\": \"ENOB = {enob} bits\",\n \"minimum-signal\": \"最小信号(本底噪声)\",\n \"noise-1f-not-modeled\": \"1/f和尾电流噪声未建模。\",\n \"noise-contributors\": \"噪声来源 (V rms)\",\n \"noise-floor\": \"参考输出: {voltage}V rms\",\n \"noise-referred-output\": \"所有噪声均指输出\",\n \"opamp-current\": \"运算放大器电流\",\n \"opamp-voltage\": \"运算放大器电压\",\n \"output-voltage\": \"输出电压: {voltage}V\",\n \"peak-signal\": \"峰值信号\",\n \"photodiode-current\": \"光电二极管电流: {current}A\",\n \"photodiode-current-rms\": \"参考输入: {current}A rms\",\n \"rf\": \"RF\",\n \"rfilter\": \"RFILTER\",\n \"rg\": \"RG\",\n \"rin\": \"RIN\",\n \"snr\": \"SNR = {snr} dB\",\n \"stage-1\": \"第一级\",\n \"stage-1-total\": \"第一级总和\",\n \"stage-2\": \"第二级\",\n \"stage-2-total\": \"第二级总和\",\n \"title\": \"SNR\",\n \"tooltip\": \"SNR/Dynamic Range\",\n \"total\": \"总\",\n \"total-noise\": \"噪声总和: {noise}V rms\"\n },\n \"spectral-noise\": {\n \"graph-legend\": {\n \"opi\": \"Op Amp I\",\n \"opi2\": \"Op Amp 2 I\",\n \"opv\": \"Op Amp V\",\n \"opv2\": \"Op Amp 2 V\",\n \"rf\": \"Rf\",\n \"rfilter\": \"Rfilter\",\n \"rin\": \"Rin\",\n \"total\": \"Total\",\n \"x-title\": \"频率\"\n },\n \"hover-graph-legend\": {\n \"opi\": \"Op Amp I: \",\n \"opi2\": \"Op Amp 2 I: \",\n \"opv\": \"Op Amp V: \",\n \"opv2\": \"Op Amp 2 V: \",\n \"rf\": \"Rf: \",\n \"rfilter\": \"Rfilter: \",\n \"rin\": \"Rin: \",\n \"total\": \"Total: \",\n \"x-title\": \"频率: \",\n \"x-unit\": \"Hz\",\n \"y-unit\": \"V/√Hz\"\n },\n \"title\": \"频谱噪声密度\",\n \"tooltip\": \"Spectral Noise Density\",\n \"x-title\": \"频率(Hz)\",\n \"y-title\": \"频谱噪声密度 (V/√Hz)\"\n }\n },\n \"help\": {\n \"bias-polarity\": {\n \"title\": \"光电二极管偏置\"\n },\n \"circuit-peaking\": {\n \"title\": \"输出信号:峰化\"\n },\n \"circuit-stages\": {\n \"title\": \"级数\"\n },\n \"dynamic-range\": {\n \"title\": \"SNR/动态范围\"\n },\n \"equivalent-circuit\": {\n \"title\": \"光电二极管等效电路\"\n },\n \"frequency-response\": {\n \"title\": \"频率响应\"\n },\n \"main-help\": {\n \"title\": \"光电二极管电路设计向导帮助\"\n },\n \"noise-gain\": {\n \"title\": \"噪声增益\"\n },\n \"opamp\": {\n \"title\": \"运算放大器\"\n },\n \"peak-current\": {\n \"title\": \"光电二极管规格:峰值电流\"\n },\n \"peak-voltage\": {\n \"title\": \"输出信号:峰值电压\"\n },\n \"photodiode-capacitance\": {\n \"title\": \"光电二极管规格:电容(CD)\"\n },\n \"pulse-response\": {\n \"title\": \"脉冲响应\"\n },\n \"quick-results\": {\n \"title\": \"快速结果\"\n },\n \"reverse-voltage\": {\n \"title\": \"光电二极管偏置:反向电压 (VR)\"\n },\n \"shunt-resistance\": {\n \"title\": \"光电二极管规格:分流电阻(RSH)\"\n },\n \"spectral-noise-density\": {\n \"title\": \"频谱噪声密度\"\n },\n \"stability\": {\n \"title\": \"稳定性\"\n },\n \"supply-voltage\": {\n \"title\": \"电源电压\"\n },\n \"target-speed\": {\n \"title\": \"输出信号:速度\"\n },\n \"why-the-spares\": {\n \"title\": \"为何要有备件?\"\n }\n },\n \"main\": {\n \"busy\": \"处理中...\",\n \"next-tab\": \"下一个选项卡\",\n \"previous-tab\": \"上一个选项卡\",\n \"title\": \"光电二极管电路设计向导\"\n },\n \"marginal-design\": {\n \"button\": \"显示边际设计\",\n \"message\": \"若要创建鲁棒的设计,我们建议根据下文所述调节您的设计参数。 然而,如果这样做不可行,我们仍能找到可行的运算放大器。 本工具发现该设计存在如下问题: \"\n },\n \"menu\": {\n \"links\": {\n \"feedback\": \"提交意见反馈\",\n \"help\": \"帮助\",\n \"load\": \"加载设计\",\n \"save\": \"保存\"\n },\n \"tabs\": {\n \"circuit-design\": \"电路设计\",\n \"next-steps\": \"后续步骤\",\n \"photodiode\": \"光电二极管\"\n }\n },\n \"model-error\": {\n \"amp_status_bias_current_is\": \"高输出失调(偏置电流等于 {data})\",\n \"amp_status_big_2nd_stage_gain\": \"需第二级增益 {data}\",\n \"amp_status_cf_less_100fF\": \"Cf < 0.1pF\",\n \"amp_status_cf_less_50fF\": \"Cf < 50fF\",\n \"amp_status_cfb_no_cf\": \"电流反馈放大器的反馈路径不支持电容\",\n \"amp_status_cfb_rf_too_small\": \"无法驱动Rf;\",\n \"amp_status_dB_error\": \"数据库错误 - 数据库中的器件数据不正确\",\n \"amp_status_gbw_less_than_bandwith_requested\": \"Op Amp GBW less than bandwidth requested \",\n \"amp_status_high_vos\": \"高输出失调(输入Vos等于 {data})\",\n \"amp_status_internal_cf_too_high\": \"内部反馈电容过高\",\n \"amp_status_min_stable_gain\": \"最小稳定增益 = {data}\",\n \"amp_status_not_enough_peaking\": \"无法形成足够的峰化\",\n \"amp_status_not_fast_enough\": \"不够快\",\n \"amp_status_quad\": \"四通道\",\n \"amp_status_slew_rate_low\": \"压摆率过低\",\n \"amp_status_slew_rate_marginal\": \"边际压摆率\",\n \"amp_status_specialty_amp\": \"专用放大器\",\n \"amp_status_too_fast\": \"太快\",\n \"amp_status_voltage_not_enough\": \"电压范围不足以用于峰值输出电压\",\n \"amp_status_zero_drift\": \"零漂移\",\n \"fixed_op_amp_no_good\": \"{partName}不能满足设计要求。请选择另外一个运算放大器或解锁,允许程序为您选择运算放大器。
原因 {partName} 是不适合:\",\n \"internal_cf_too_high\": \"{partName} 提供了内部反馈电容 {cfint}F。因此,标准放大器的反馈电容 {cf}F 通常为 {partName} 的 {cfext}F.
原因 {partName} 不合适:\",\n \"no_op_amps_available_for_first_stage_too_fast\": \"无法推荐满足第一级设计要求的运算放大器。
可以尝试如下方式:
- 降低速度要求
- 减小光电二极管电容
- 减小峰值输出电压
- 增加光电二极管峰值电流
\",\n \"no_op_amps_available_for_first_stage_too_slow\": \"无法推荐满足第一级设计要求的运算放大器。
可以尝试如下方式:
- 增加速度要求
- 增加光电二极管电容
- 增加峰值输出电压
- 降低光电二极管峰值电流
\",\n \"no_op_amps_available_for_second_stage\": \"无法推荐满足第二级设计要求的运算放大器。
解决方案:
\",\n \"no_op_amps_available_for_single_stage_too_fast\": \"无法推荐满足这些设计要求的运算放大器
可以尝试如下方式:
- 选择双级解决方案
- 降低速度要求
- 减小光电二极管电容
- 减小峰值输出电压
- 增加光电二极管峰值电流
\",\n \"no_op_amps_available_for_single_stage_too_slow\": \"无法推荐满足这些设计要求的运算放大器
可以尝试如下方式:
- 增加速度要求
- 增加光电二极管电容
- 增加峰值输出电压
- 降低光电二极管峰值电流
\",\n \"peak_light_error\": \"您提供的峰值电流超出可接受范围 ({min} - {max})。 请更新数值。\",\n \"peak_photodiode_error\": \"峰值电流计算结果超出可接受范围 ({min} - {max})。\",\n \"rf_too_high\": \"单级放大器配置的增益要求过高。.
可以尝试如下方式:
- 选择双级解决方案
- 减小峰值输出电压
- 增加光电二极管峰值电流
\"\n },\n \"opamp-selection\": {\n \"GBW\": \"GBW\",\n \"cancel\": \"取消\",\n \"comment-drop-down\": {\n \"message\": {\n \"amp_status_bias_current_is\": \"高输出失调(偏置电流等于 {value}A)\",\n \"amp_status_big_2nd_stage_gain\": \"需第二级增益 {value}\",\n \"amp_status_cf_less_100fF\": \"Cf < 0.1pF\",\n \"amp_status_cf_less_50fF\": \"Cf < 50fF\",\n \"amp_status_cfb_no_cf\": \"电流反馈放大器的反馈路径不支持电容\",\n \"amp_status_cfb_rf_too_small\": \"无法驱动Rf;\",\n \"amp_status_dB_error\": \"数据库错误 - 数据库中的器件数据不正确\",\n \"amp_status_gbw_less_than_bandwith_requested\": \"Op Amp GBW less than bandwidth requested \",\n \"amp_status_high_vos\": \"高输出失调(输入Vos等于 {value}V)\",\n \"amp_status_internal_cf_too_high\": \"内部反馈电容过高\",\n \"amp_status_last_time_buy\": \"最后一次采购\",\n \"amp_status_min_stable_gain\": \"最小稳定增益 = {value}\",\n \"amp_status_not_allowed\": \"不允许:\",\n \"amp_status_not_enough_peaking\": \"无法形成足够的峰化\",\n \"amp_status_not_fast_enough\": \"不够快\",\n \"amp_status_not_recommended\": \"不推荐使用:\",\n \"amp_status_not_recommended_for_new_designs\": \"新设计不推荐使用本产品\",\n \"amp_status_obsolete\": \"停产\",\n \"amp_status_quad\": \"四通道\",\n \"amp_status_recommended\": \"推荐\",\n \"amp_status_slew_rate_low\": \"压摆率过低\",\n \"amp_status_slew_rate_marginal\": \"边际压摆率\",\n \"amp_status_specialty_amp\": \"专用放大器\",\n \"amp_status_too_fast\": \"太快\",\n \"amp_status_voltage_not_enough\": \"电压范围不足以用于峰值输出电压\",\n \"amp_status_zero_drift\": \"零漂移\"\n },\n \"not-allowed\": \"不允许\",\n \"not-allowed-match\": \"不允许\",\n \"not-recommended\": \"不推荐使用\",\n \"not-recommended-match\": \"不推荐使用\",\n \"recommended\": \"推荐\",\n \"recommended-match\": \"推荐\",\n \"show-all\": \"显示全部\"\n },\n \"comments\": \"注释\",\n \"part-label\": \"产品型号\",\n \"row-count\": \"'{count, plural, =0 {显示#/{total}个运算放大器。请检查提供的滤波器。} other {显示#/{total}个运算放大器。}}'\",\n \"select\": \"选择\",\n \"spice-drop-down\": {\n \"no\": \"否\",\n \"show-all\": \"显示全部\",\n \"yes\": \"是\"\n },\n \"status-drop-down\": {\n \"not-recommended\": \"不推荐用于新设计\",\n \"not-recommended-match\": \"Not Recommended for New Designs\",\n \"production\": \"量产\",\n \"production-match\": \"Production\",\n \"recommended\": \"推荐用于新设计\",\n \"recommended-match\": \"Recommended for New Designs\",\n \"show-all\": \"显示全部\"\n },\n \"supply-max\": \"最大电源电压\",\n \"supply-min\": \"最小电源电压\",\n \"temp-range\": \"温度范围\",\n \"title\": \"选择运算放大器\"\n },\n \"parameter-selector\": {\n \"choose-parameters\": \"选择参数\",\n \"ok\": \"OK\"\n },\n \"sensor-selection\": {\n \"active-area\": \"有效面积\",\n \"cancel\": \"取消\",\n \"capacitance\": \"电容\",\n \"dark-current\": \"暗电流\",\n \"manufacturer\": \"制造厂商\",\n \"operating-temperature\": \"工作温度\",\n \"package\": \"封装\",\n \"part-number\": \"产品型号\",\n \"product-page\": \"产品页面\",\n \"resistance\": \"电阻\",\n \"response-time\": \"响应时间\",\n \"reverse-breakdown\": \"反向击穿\",\n \"row-count\": \"'{count, plural, =0 {Displaying # of {total} sensors. Please check the filters provided.} other {Displaying # of {total} sensors.}}'\",\n \"select\": \"选择\",\n \"sensitivity\": \"灵敏度\",\n \"spectral-peak\": \"频谱峰值\",\n \"spectral-range\": \"频谱范围\",\n \"spice\": \"SPICE\",\n \"spice-file\": \"SPICE文件\",\n \"title\": \"请选择一个传感器\",\n \"vendor-link\": \"供应商链接\",\n \"viewing-angle\": \"视角\"\n },\n \"settings\": {\n \"circuit-design\": {\n \"enob\": \"ENOB: {enob} bits\",\n \"one-stage\": \"单\",\n \"opamp-lock\": \"Lock\",\n \"opamp-stage1\": \"第1级\",\n \"opamp-stage2\": \"第2级\",\n \"opamps\": \"Op Amps:\",\n \"opamps-tooltip\": \"Op Amp\",\n \"output-offset\": \"输出失调: {offset}V\",\n \"output-signal\": \"输出信号\",\n \"peak-voltage\": \"峰值电压 (VP)\",\n \"peak-voltage-tooltip\": \"Peak Voltage\",\n \"peaking\": \"峰值\",\n \"peaking-high\": \"高\",\n \"peaking-low\": \"低\",\n \"peaking-tooltip\": \"峰值\",\n \"quick-results\": \"快速结果\",\n \"quick-results-tooltip\": \"快速结果\",\n \"snr\": \"SNR: {snr} dB\",\n \"stages\": \"级数\",\n \"stages-tooltip\": \"级数\",\n \"target-bandwidth\": \"Target Bandwidth\",\n \"target-option-band\": \"带宽\",\n \"target-option-pulse\": \"脉冲宽度\",\n \"target-pulse-width\": \"目标速度\",\n \"target-speed-tooltip\": \"Speed\",\n \"two-stage\": \"双\"\n },\n \"next-steps\": {\n \"get-files\": \"获取文件\",\n \"get-files-all\": \"获取设计\",\n \"get-files-all-tooltip\": \"下载包含SPICE文件、BOM、评估板文件、和pdf版视图的zip文件\",\n \"get-files-spice\": \"仅SPICE\",\n \"get-files-spice-tooltip\": \"下载包含SPICE文件的zip文件\",\n \"mail\": \"邮件分享给同事\",\n \"mail-tooltip\": \"将此设计的副本发送给同事\",\n \"order\": \"订购\",\n \"order-samples\": \"申请样片\",\n \"order-samples-tooltip\": \"申请器件样片\",\n \"share\": \"共享\"\n },\n \"photodiode\": {\n \"bias-polarity-tooltip\": \"光电二极管偏置\",\n \"capacitance-1\": \"电容 (CD)\",\n \"capacitance-2\": \"在 VR = {vr} V\",\n \"capacitance-tooltip\": \"电容\",\n \"capacitance-warning\": \"Be careful. This is the capacitance at your reverse voltage, which may be different than what is specified in the datasheet table. You may need to read this value from a datasheet graph instead.\",\n \"or\": \"或\",\n \"peak-current\": \"峰值电流 (IP)\",\n \"peak-current-tooltip\": \"峰值电流\",\n \"photodiode-bias\": \"光电二极管偏置\",\n \"photodiode-select\": \"从器件库中选择光电二极管\",\n \"photodiode-specs\": \"光电二极管规格\",\n \"reverse-voltage\": \"反向电压 (VR)\",\n \"reverse-voltage-negative\": \"负\",\n \"reverse-voltage-positive\": \"正\",\n \"reverse-voltage-tooltip\": \"反向电压\",\n \"shunt-resistance\": \"分流电阻 (RSH)\",\n \"shunt-resistance-tooltip\": \"分流电阻\"\n }\n },\n \"units\": {\n \"A\": \"A\",\n \"F\": \"F\",\n \"Q\": \"Q\",\n \"R\": \"Ω\",\n \"V\": \"V\",\n \"active-area\": \"mm2\",\n \"dB\": \"dB\",\n \"farad\": \"F\",\n \"hertz\": \"Hz\",\n \"meters\": \"m\",\n \"ohm\": \"Ohm\",\n \"operating-temperature\": \"°C\",\n \"peak-light-intensity\": \" W/m2\",\n \"seconds\": \"s\",\n \"sensitivity\": \"A/W\",\n \"unit-price\": \"$ US\",\n \"viewing-angle\": \"°\",\n \"volts-per-amp\": \"V/A\",\n \"volts-per-volt\": \"V/V\"\n },\n \"validation-error\": {\n \"button-tooltip\": \"请先修正错误,然后继续。\",\n \"capacitance\": \"电容值必须在以下范围内:{min}至{max}\",\n \"invalid-input-error\": \"无法解析字段{field}中的值{value}。\",\n \"min-pulse-speed\": \"电容值必须在以下范围内:{min}至{max}\",\n \"no-opamp-found\": \"None found\",\n \"peak-current\": \"峰值电流必须在以下范围内:{min}至{max}\",\n \"peak-light-intensity\": \"光强度的峰值必须限制在这个范围:{min}到{max}\",\n \"peak-voltage\": \"峰值电压值必须在以下范围内:{min}至{max}\",\n \"reverse-voltage\": \"反向电压值必须在以下范围内:{min}至{max}\",\n \"shunt-resistance\": \"分流电阻值必须在以下范围内:{min}至{max}\",\n \"speed\": \"电容值必须在以下范围内:{min}至{max}\"\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}","export function isFactory(\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\n_factoryOrClass) {\n return !true;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nconst noop = () => {};\n\n/**\n * Consume each positional and named argument to entangle it in autotracking and\n * enable updates.\n *\n * This is a temporary workaround for a change in the autotracking semantics of\n * the args proxy introduced in `v3.22`. What changed is that arguments are no\n * longer eagerly consumed. Didn’t use an argument? Then updates won’t be run\n * when its value changes. This workaround reproduces the previous behaviour to\n * avoid introducing a breaking change until a suitable transition path is made\n * available.\n */\nlet consumeArgs = noop;\nif (true) {\n consumeArgs = function ({\n positional,\n named\n }) {\n // SAFETY: TS before 4.6 does not correctly/fully resolve the type in a way\n // that allows the type checker to see that `positional` must *always* be\n // something which `extends unknown[]` here, because the underlying\n // machinery is fairly complicated and relies on a fair bit of type\n // recursion. It will stop mattering when we cut v4.0, because we won't be\n // doing this anyway.\n const pos = positional;\n for (let i = 0; i < pos.length; i++) {\n pos[i];\n }\n\n // SAFETY: TS 4.7 does not see that `named` will always be an object here.\n // However, it is guaranteed to be resolved as such by the types. This *may*\n // be a bug (https://github.com/microsoft/TypeScript/issues/48468), but it\n // *should* also stop being relevant once we ship 4.0.\n Object.values(named);\n };\n}\nexport { consumeArgs };","function _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); }\nimport { capabilities } from '@ember/modifier';\nimport { destroy, registerDestructor } from '@ember/destroyable';\nimport { Element, _implementsModify, Args } from './modifier';\nimport { consumeArgs, isFactory } from '../compat';\nfunction destroyModifier(modifier) {\n modifier.willRemove();\n modifier.willDestroy();\n}\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 */\n\n/**\n * The `State` after calling `createModifier`, and therefore the state available\n * at the start of `InstallModifier`.\n * @internal\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 */\n\n// Wraps the unsafe (b/c it mutates, rather than creating new state) code that\n// TS does not yet understand.\nfunction installElement(state, element) {\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;\n installedState.element = element;\n return installedState;\n}\nfunction installElementOnInstance(instance, element) {\n // SAFETY: we use the internal API for all class-based modifiers to set this\n // in a way which lets us issue the deprecation warning for anyone accessing\n // `element` as a getter while allowing types to continue working for any\n // existing subclasses (see the discussion on the class definition).\n instance[Element] = element;\n}\nfunction updateArgsOnInstance(instance, args) {\n // SAFETY: we use the internal API for all class-based modifiers to set this\n // in a way which lets us issue the deprecation warning for anyone accessing\n // `args` as a getter while allowing types to continue working for any\n // existing subclasses (see the discussion on the class definition).\n instance[Args] = args;\n}\nexport default class ClassBasedModifierManager {\n constructor(owner) {\n _defineProperty(this, \"capabilities\", capabilities(true ? '3.22' : '3.13'));\n this.owner = owner;\n }\n createModifier(factoryOrClass, args) {\n const Modifier = isFactory(factoryOrClass) ? factoryOrClass.class : factoryOrClass;\n const modifier = new Modifier(this.owner, args);\n registerDestructor(modifier, destroyModifier);\n return {\n instance: modifier,\n implementsModify: _implementsModify(modifier),\n element: null\n };\n }\n installModifier(createdState, element, args) {\n const state = installElement(createdState, element);\n\n // TODO: this can be deleted entirely at v4.\n const {\n instance\n } = state;\n installElementOnInstance(instance, element);\n if (state.implementsModify) {\n instance.modify(element, args.positional, args.named);\n } else {\n // The `consumeArgs()` call provides backwards compatibility on v3 for the\n // deprecated legacy lifecycle hooks (`didInstall`, `didReceiveArguments`,\n // and `didUpdateArguments`), which accidentally had eager consumption\n // semantics prior to Ember 3.22. The new, recommended `modify` hook has\n // the updated lazy semantics associated with normal auto-tracking.\n if (true) {\n consumeArgs(args);\n }\n instance.didReceiveArguments();\n instance.didInstall();\n }\n }\n updateModifier(state, args) {\n const {\n instance\n } = state;\n\n // TODO: remove at 4.0\n updateArgsOnInstance(state.instance, args);\n if (state.implementsModify) {\n instance.modify(state.element, args.positional, args.named);\n } else {\n // The `consumeArgs()` call provides backwards compatibility on v3 for the\n // deprecated legacy lifecycle hooks (`didInstall`, `didReceiveArguments`,\n // and `didUpdateArguments`), which accidentally had eager consumption\n // semantics prior to Ember 3.22. The new, recommended `modify` hook has\n // the updated lazy semantics associated with normal auto-tracking.\n if (true) {\n consumeArgs(args);\n }\n instance.didUpdateArguments();\n instance.didReceiveArguments();\n }\n }\n destroyModifier(state) {\n destroy(state.instance);\n }\n}","import { setOwner } from '@ember/application';\nimport { setModifierManager } from '@ember/modifier';\nimport Manager from './modifier-manager';\nimport { isDestroying, isDestroyed } from '@ember/destroyable';\nimport { assert, deprecate } from '@ember/debug';\nimport { DEBUG } from '@glimmer/env';\n\n// SAFETY: these sets are dev-only code to avoid showing deprecations for the\n// same class more than once.\n\nlet SEEN_CLASSES_FOR_LIFECYCLE;\nif (DEBUG) {\n SEEN_CLASSES_FOR_LIFECYCLE = new Set();\n}\nlet SEEN_CLASSES_FOR_DESTROYABLES;\nif (DEBUG) {\n SEEN_CLASSES_FOR_DESTROYABLES = new Set();\n}\nlet SEEN_CLASSES_FOR_ARGS;\nif (DEBUG) {\n SEEN_CLASSES_FOR_ARGS = new Set();\n}\nlet SEEN_CLASSES_FOR_ELEMENTS;\nif (DEBUG) {\n SEEN_CLASSES_FOR_ELEMENTS = new Set();\n}\n\n/** @internal */\nexport const _implementsModify = instance => instance.modify !== ClassBasedModifier.prototype.modify;\n\n/** @internal */\nexport const _implementsLegacyHooks = instance => instance.didInstall !== ClassBasedModifier.prototype.didInstall || instance.didUpdateArguments !== ClassBasedModifier.prototype.didUpdateArguments || instance.didReceiveArguments !== ClassBasedModifier.prototype.didReceiveArguments;\n\n/** @internal */\nexport const Element = Symbol('Element');\n\n/** @internal */\nexport const Args = Symbol('Args');\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\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 */\nexport default class ClassBasedModifier {\n // Done this way with the weird combination of `declare` and `defineProperty`\n // so that subclasses which are overriding this by writing their own `args`\n // field type declarations continue to type check correctly. (If we introduced\n // a getter here, existing classes defining their args via a `declare args:`\n // would stop type checking, because TS -- correctly! -- differentiates\n // between class fields and getters).\n /**\n * The arguments passed to the modifier. `args.positional` is an array of\n * positional arguments, and `args.named` is an object containing the named\n * arguments.\n *\n * @deprecated Until 4.0. Access positional and named arguments directly in\n * the `modify` hook instead.\n */\n\n // Done this way with the weird combination of `declare` and `defineProperty`\n // so that subclasses which are overriding this by writing their own `element`\n // field declarations continue to type check correctly.\n /**\n * The element the modifier is applied to.\n *\n * @warning `element` is ***not*** available during `constructor` or\n * `willDestroy`.\n * @deprecated Until 4.0. Access the `element` as an argument in the `modify`\n * hook instead.\n */\n\n constructor(owner, args) {\n setOwner(this, owner);\n\n // SAFETY: the point here is (for the period where we are providing `args`\n // and `element`) to provide an internal-only way of setting and update the\n // `args` for the modifier instance; we use the `InternalClassBasedModifier`\n // interface to represent the internal-only API in a way that end users do\n // *not* have access to when subclassing `ClassBasedModifier`.\n this[Args] = args;\n assert('ember-modifier: You cannot implement both `modify` and any of the deprecated legacy lifecycle hooks (`didInstall`, `didReceiveArguments`, and `didUpdateArguments`)', !(_implementsModify(this) && _implementsLegacyHooks(this)));\n deprecate(`ember-modifier (in ${this.constructor.name} at ${new Error().stack}): \\`willDestroy\\`, \\`isDestroyed\\`, and \\`isDestroyed\\` are deprecated. Use the corresponding API from '@ember/destroyable' instead.`, this.willDestroy === ClassBasedModifier.prototype.willDestroy || SEEN_CLASSES_FOR_DESTROYABLES.has(this.constructor), {\n id: 'ember-modifier.use-destroyables',\n until: '4.0.0',\n for: 'ember-modifier',\n since: {\n available: '3.2.0',\n enabled: '3.2.0'\n }\n });\n if (DEBUG && !SEEN_CLASSES_FOR_DESTROYABLES.has(this.constructor)) {\n SEEN_CLASSES_FOR_DESTROYABLES.add(this.constructor);\n }\n deprecate(`ember-modifier (in ${this.constructor.name} at ${new Error().stack}): The \\`didInstall\\`, \\`didReceiveArguments\\`, and \\`didUpdateArguments\\` hooks are deprecated. Use the new \\`modify\\` hook instead.`, _implementsModify(this) || SEEN_CLASSES_FOR_LIFECYCLE.has(this.constructor), {\n id: 'ember-modifier.use-modify',\n until: '4.0.0',\n for: 'ember-modifier',\n since: {\n available: '3.2.0',\n enabled: '3.2.0'\n }\n });\n if (DEBUG && !SEEN_CLASSES_FOR_LIFECYCLE.has(this.constructor)) {\n SEEN_CLASSES_FOR_LIFECYCLE.add(this.constructor);\n }\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(/* eslint-disable @typescript-eslint/no-unused-vars */\n element, positional, named) {\n /* no op, for subclassing */\n }\n\n /**\n * Called when the modifier is installed **and** anytime the arguments are\n * updated.\n *\n * @deprecated Until 4.0. Use `modify()`.\n */\n didReceiveArguments() {\n /* no op, for subclassing */\n }\n\n /**\n * Called anytime the arguments are updated but **not** on the initial\n * install. Called before `didReceiveArguments`.\n *\n * @deprecated Until 4.0. Use `modify()`.\n */\n didUpdateArguments() {\n /* no op, for subclassing */\n }\n\n /**\n * Called when the modifier is installed on the DOM element. Called after\n * `didReceiveArguments`.\n *\n * @deprecated Until 4.0. Use `modify()`.\n */\n didInstall() {\n /* no op, for subclassing */\n }\n\n /**\n * Called when the DOM element is about to be destroyed; use for removing\n * event listeners on the element and other similar clean-up tasks.\n *\n * @deprecated since 2.0.0: prefer to use `willDestroy`, since both it and\n * `willRemove` can perform all the same operations, including on the\n * `element`.\n */\n willRemove() {\n /* no op, for subclassing */\n }\n\n /**\n * Called when the modifier itself is about to be destroyed; use for teardown\n * code. Called after `willRemove`.\n *\n * @deprecated Until 4.0. Use `registerDestructor` from `@ember/destroyables`.\n */\n willDestroy() {\n /* no op, for subclassing */\n }\n\n /**\n * @deprecated Until 4.0. Use `isDestroying` from `@ember/destroyables`.\n */\n get isDestroying() {\n deprecate('Modifier.isDestroying is deprecated', SEEN_CLASSES_FOR_DESTROYABLES.has(this.constructor), {\n id: 'ember-modifier.use-destroyables',\n until: '4.0.0',\n for: 'ember-modifier',\n since: {\n available: '3.2.0',\n enabled: '3.2.0'\n }\n });\n if (DEBUG && !SEEN_CLASSES_FOR_DESTROYABLES.has(this.constructor)) {\n SEEN_CLASSES_FOR_DESTROYABLES.add(this.constructor);\n }\n return isDestroying(this);\n }\n\n /**\n * @deprecated Until 4.0. Use `isDestroyed` from `@ember/destroyables`.\n */\n get isDestroyed() {\n deprecate('Modifier.isDestroyed is deprecated', SEEN_CLASSES_FOR_DESTROYABLES.has(this.constructor), {\n id: 'ember-modifier.use-destroyables',\n until: '4.0.0',\n for: 'ember-modifier',\n since: {\n available: '3.2.0',\n enabled: '3.2.0'\n }\n });\n if (DEBUG && !SEEN_CLASSES_FOR_DESTROYABLES.has(this.constructor)) {\n SEEN_CLASSES_FOR_DESTROYABLES.add(this.constructor);\n }\n return isDestroyed(this);\n }\n}\n\n// We apply these here, against the prototype, so that there is only one of\n// these, rather than one per instance. We also only issue the deprecation once\n// per class for each of `args` and `element`.\nObject.defineProperty(ClassBasedModifier.prototype, 'args', {\n enumerable: true,\n get() {\n deprecate(`ember-modifier (in ${this.constructor.name} at ${new Error().stack}): using \\`this.args\\` is deprecated. Access positional and named arguments directly in the \\`modify\\` hook instead.`, SEEN_CLASSES_FOR_ARGS.has(this.constructor), {\n id: 'ember-modifier.no-args-property',\n for: 'ember-modifier',\n since: {\n available: '3.2.0',\n enabled: '3.2.0'\n },\n until: '4.0.0'\n });\n if (DEBUG && !SEEN_CLASSES_FOR_ARGS.has(this.constructor)) {\n SEEN_CLASSES_FOR_ARGS.add(this.constructor);\n }\n return this[Args];\n }\n});\nObject.defineProperty(ClassBasedModifier.prototype, 'element', {\n enumerable: true,\n get() {\n deprecate(`ember-modifier (in ${this.constructor.name} at ${new Error().stack}): using \\`this.element\\` is deprecated. Access the \\`element\\` as an argument in the \\`modify\\` hook instead.`, SEEN_CLASSES_FOR_ELEMENTS.has(this.constructor), {\n id: 'ember-modifier.no-element-property',\n for: 'ember-modifier',\n since: {\n available: '3.2.0',\n enabled: '3.2.0'\n },\n until: '4.0.0'\n });\n if (DEBUG && !SEEN_CLASSES_FOR_ELEMENTS.has(this.constructor)) {\n SEEN_CLASSES_FOR_ELEMENTS.add(this.constructor);\n }\n return this[Element] ?? null;\n }\n});\n\n/**\n * @internal This provides an interface we can use to backwards-compatibly set\n * up the element in a way that external callers will not have access to or\n * even see.\n */\n\nsetModifierManager(owner => new Manager(owner), ClassBasedModifier);","function _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); }\nimport { capabilities } from '@ember/modifier';\nimport { consumeArgs, isFactory } from '../compat';\n// Wraps the unsafe (b/c it mutates, rather than creating new state) code that\n// TS does not yet understand.\nfunction installElement(state, element) {\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;\n installedState.element = element;\n return installedState;\n}\nexport default class FunctionBasedModifierManager {\n constructor(options) {\n _defineProperty(this, \"capabilities\", capabilities(true ? '3.22' : '3.13'));\n _defineProperty(this, \"options\", void 0);\n this.options = {\n eager: options?.eager ?? true\n };\n }\n createModifier(factoryOrClass) {\n const instance = isFactory(factoryOrClass) ? factoryOrClass.class : factoryOrClass;\n return {\n element: null,\n instance: instance\n };\n }\n installModifier(createdState, element, args) {\n const state = installElement(createdState, element);\n const {\n positional,\n named\n } = args;\n const teardown = createdState.instance(element, positional, named);\n if (typeof teardown === 'function') {\n state.teardown = teardown;\n }\n if (true && this.options.eager) {\n consumeArgs(args);\n }\n }\n updateModifier(state, args) {\n if (state.teardown) {\n state.teardown();\n }\n const teardown = state.instance(state.element, args.positional, args.named);\n if (typeof teardown === 'function') {\n state.teardown = teardown;\n }\n if (true && this.options.eager) {\n consumeArgs(args);\n }\n }\n destroyModifier(state) {\n if (typeof state.teardown === 'function') {\n state.teardown();\n }\n }\n}","import { deprecate } from '@ember/debug';\nimport { setModifierManager } from '@ember/modifier';\nimport Modifier from '../class/modifier';\nimport FunctionBasedModifierManager from './modifier-manager';\n\n// Provide a singleton manager for each of the options. (If we extend this to\n// many more options in the future, we can revisit, but for now this means we\n// only ever allocate two managers.)\nconst EAGER_MANAGER = new FunctionBasedModifierManager({\n eager: true\n});\nconst LAZY_MANAGER = new FunctionBasedModifierManager({\n eager: false\n});\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.\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.\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 */\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, and if any of them changes, the function\n * will run again.\n *\n * **Note:** this will rerun if any of its arguments change, *whether or not you\n * access them*. This is legacy behavior and you should switch to using the\n * `{ eager: false }` variant, which has normal auto-tracking semantics.\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 * @deprecated Until 4.0. Calling `modifier()` without an options argument is\n * deprecated. It is supported until 4.0 so that existing modifiers can be\n * migrated individually. Please update your function-based modifiers to pass\n * `{ eager: false }`.\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.\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, and if any of them changes, the function\n * will run again.\n *\n * **Note:** this will rerun if any of its arguments change, *whether or not you\n * access them*. This is legacy behavior and you should switch to using the\n * `{ eager: false }` variant, which has normal auto-tracking semantics.\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 * @deprecated Until 4.0. Calling `modifier()` with `{ eager: true }` is\n * deprecated. It is supported until 4.0 so that existing modifiers can be\n * migrated individually. Please update your function-based modifiers to pass\n * `{ eager: false }`.\n *\n * @param fn The function which defines the modifier.\n * @param options Configuration for 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.\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 * @param options Configuration for 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.\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 * @param options Configuration for 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.\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(fn, options = {\n eager: true\n}) {\n deprecate(`ember-modifier (for ${fn.name ?? fn} at ${new Error().stack}): creating a function-based modifier without options is deprecated and will be removed at v4.0`, options !== undefined, {\n id: 'ember-modifier.function-based-options',\n for: 'ember-modifier',\n since: {\n available: '3.2.0',\n enabled: '3.2.0'\n },\n until: '4.0.0'\n });\n deprecate(`ember-modifier (for ${fn.name ?? fn} at ${new Error().stack}): creating a function-based modifier with \\`{ eager: true }\\` is deprecated and will be removed at v4.0`, options?.eager === false, {\n id: 'ember-modifier.function-based-options',\n for: 'ember-modifier',\n since: {\n available: '3.2.0',\n enabled: '3.2.0'\n },\n until: '4.0.0'\n });\n\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(() => options.eager ? EAGER_MANAGER : LAZY_MANAGER, fn);\n}\n\n/**\n * @internal\n */\n\n/**\n * @deprecated Instead of defining a function to match this type, simply define\n * a function-based modifier either using a `Signature` or by defining the\n * types on the callback passed to the `modifier`.\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","import { helper } from '@ember/component/helper';\nimport truthConvert from '../utils/truth-convert';\n\nexport function and(params) {\n for (let i=0, len=params.length; i data image data base64 encoded (string) //\n // > format - Image format like PNG or JPEG (string) //\n ///////////////////////////////////////////////////////////////////////////////////////\n\n\n addTitlePage(appName, designDescription, coverImage) {\n // Add a Page\n this.pdfDoc.addPage(); // Get Page dimensions\n\n let width = this.pdfDoc.internal.pageSize.getWidth();\n let height = this.pdfDoc.internal.pageSize.getHeight(); // Set Image Dimensions (We will stretch to fill the page)\n\n let imageWidth = width - 16;\n let imageHeight = height - 16; // Draw Cover Image\n\n this.pdfDoc.addImage(coverImage.data, coverImage.format, 8, 8, imageWidth, imageHeight, undefined, 'MEDIUM');\n let xOffset = width * 32 / 50;\n let yOffset = height * 14 / 48; // Draw Application Name\n\n this.pdfDoc.setFont(this.normalFontName, 'normal').setFontSize(FONT_SIZE_H1).setTextColor('#48D1CC').text(appName, xOffset, yOffset, 'left');\n yOffset = height * 16 / 48; // Draw Box\n\n this.pdfDoc.setLineWidth(0.75);\n this.pdfDoc.rect(xOffset, yOffset, 85, 60);\n this.pdfDoc.setFont(this.normalFontName, 'normal').setFontSize(FONT_SIZE_SMALL).setTextColor('#000000');\n yOffset += this.pdfDoc.getTextDimensions('A').h * 1.5;\n xOffset += this.pdfDoc.getTextDimensions('A').w * 1.5; // Draw Text inside Box (Design Description, Design Owner, Created Date)\n\n let descriptionContents = this.pdfDoc.splitTextToSize(designDescription, 85 - this.pdfDoc.getTextDimensions('A').w * 3);\n\n for (let i = 0; i < descriptionContents.length; i++) {\n this.pdfDoc.text(descriptionContents[i], xOffset, yOffset, 'left');\n yOffset += this.pdfDoc.getTextDimensions('A').h;\n }\n\n return;\n } ///////////////////////////////////////////////////////////////////////////////////////\n // This function adds the data page to your PDF File. //\n // Inputs: //\n // heading - Page heading (string) //\n // subheading - Page subheading (string) //\n // fieldData - a structure with the following properties: //\n // > name (string) //\n // > value (string) //\n ///////////////////////////////////////////////////////////////////////////////////////\n\n\n addDataPage(heading, subheading, fieldData) {\n // Add a Page\n this.pdfDoc.addPage(); // Get Page dimensions\n\n let width = this.pdfDoc.internal.pageSize.getWidth(); //let height = this.pdfDoc.internal.pageSize.getHeight();\n\n let yOffset = PAGE_MARGIN_TOP; // Draw Data Page Title, Top and Center\n\n this.pdfDoc.setFont(this.boldFontName, 'bold').setFontSize(FONT_SIZE_H1).text(heading, width / 2, yOffset, 'center');\n yOffset += this.pdfDoc.getTextDimensions(heading).h * 2; // Draw Data Page Subheading\n\n this.pdfDoc.setFont(this.boldFontName, 'bold').setFontSize(FONT_SIZE_H2).text(subheading, PAGE_MARGIN_LEFT, yOffset);\n yOffset += this.pdfDoc.getTextDimensions(subheading).h * 2; // Draw Data Fields\n\n this.pdfDoc.setFont(this.normalFontName, 'normal').setFontSize(FONT_SIZE_NORMAL);\n\n for (let fieldItem of fieldData) {\n let fieldtext = fieldItem.name + ': ' + fieldItem.value;\n this.pdfDoc.text(fieldtext, PAGE_MARGIN_LEFT, yOffset);\n yOffset += this.pdfDoc.getTextDimensions(fieldtext).h * 1.5;\n }\n\n return;\n } ///////////////////////////////////////////////////////////////////////////////////////\n // This function adds a page containing an image to your PDF File. //\n // Usually our graphs, stages and circuits are images. //\n // Inputs: //\n // imgData - a structure with the following properties: //\n // > name - Page heading (string) //\n // > value - image data in Base64 format (string) //\n // > format - image format like PNG, JPEG, GIF (string) //\n // > width - image width in pixels (number) //\n // > height - image height in pixels (number) //\n ///////////////////////////////////////////////////////////////////////////////////////\n\n\n addImagePage(imgData) {\n // Get image information\n let name = imgData.name;\n let data = imgData.value;\n let format = imgData.format;\n let imgWidth = imgData.width / PX_PER_MM;\n let imgHeight = imgData.height / PX_PER_MM; // Add a Page\n\n this.pdfDoc.addPage(); // Get Page dimensions\n\n let width = this.pdfDoc.internal.pageSize.getWidth();\n let height = this.pdfDoc.internal.pageSize.getHeight();\n let yOffset = PAGE_MARGIN_TOP; // Draw Image Title, Top and Center\n\n this.pdfDoc.setFont(this.boldFontName, 'bold').setFontSize(FONT_SIZE_H2).text(name, width / 2, yOffset, 'center');\n yOffset += this.pdfDoc.getTextDimensions(name).h; // Set Image Dimensions (Scaling is considered)\n\n let scaleWidth = (width - PAGE_MARGIN_LEFT - PAGE_MARGIN_RIGHT) / imgWidth;\n let scaleHeight = (height - yOffset - PAGE_MARGIN_BOTTOM) / imgHeight;\n let useScale = scaleWidth < scaleHeight ? scaleWidth : scaleHeight;\n let imageWidth = imgWidth * useScale;\n let imageHeight = imgHeight * useScale; // Draw Image information\n\n this.pdfDoc.addImage(data, format, PAGE_MARGIN_LEFT, yOffset, imageWidth, imageHeight, undefined, 'MEDIUM');\n return;\n } ///////////////////////////////////////////////////////////////////////////////////////\n // This function adds a page containing a table to your PDF File. //\n // Inputs: //\n // tableData - a structure with the following properties: //\n // > title - Page heading (string) //\n // > columns - Table column names (array of string) //\n // > columnWidths - List of table columns widths in //\n // percentage/100 (array of number) //\n // > data - table rows (two dimensional array of strings) //\n ///////////////////////////////////////////////////////////////////////////////////////\n\n\n addTablePage(tableData) {\n this.pdfDoc.addPage(); // Get Page dimensions\n\n let width = this.pdfDoc.internal.pageSize.getWidth();\n let yOffset = PAGE_MARGIN_TOP;\n let xOffset = PAGE_MARGIN_LEFT; // Draw Data Page Title, Top and Center\n\n this.pdfDoc.setFont(this.boldFontName, 'bold').setFontSize(FONT_SIZE_H2).text(tableData.title, width / 2, yOffset, 'center');\n yOffset += this.pdfDoc.getTextDimensions(tableData.title).h * 2;\n let tableWidth = width - PAGE_MARGIN_LEFT - PAGE_MARGIN_RIGHT;\n let rowHeight = this.pdfDoc.getTextDimensions(tableData.title).h * 1.25; // Draw Data Table Headers\n\n this.pdfDoc.setFont(this.boldFontName, 'bold').setFontSize(FONT_SIZE_NORMAL);\n this.pdfDoc.setFillColor(0, 91, 149);\n this.pdfDoc.rect(xOffset, yOffset, tableWidth, rowHeight, 'FD');\n let tableStart = yOffset;\n let tableEnd = yOffset + rowHeight * (tableData.data.length + 1); // Draw Table Content\n\n yOffset += rowHeight;\n this.pdfDoc.rect(xOffset, yOffset, tableWidth, rowHeight * tableData.data.length); // Draw Row Lines\n\n for (let i = 0; i < tableData.data.length - 1; i++) {\n yOffset += rowHeight;\n this.pdfDoc.line(xOffset, yOffset, width - PAGE_MARGIN_RIGHT, yOffset);\n } // Draw Column Lines\n\n\n for (let i = 0; i < tableData.columns.length - 1; i++) {\n xOffset += tableWidth * tableData.columnWidths[i];\n this.pdfDoc.line(xOffset, tableStart, xOffset, tableEnd);\n } // Draw Header Text\n\n\n this.pdfDoc.setTextColor(255);\n xOffset = PAGE_MARGIN_LEFT + 1;\n yOffset = tableStart;\n\n for (let i = 0; i < tableData.columns.length; i++) {\n this.pdfDoc.text(tableData.columns[i], xOffset, yOffset + this.pdfDoc.getTextDimensions(tableData.columns[i]).h + 0.5, 'left');\n xOffset += tableWidth * tableData.columnWidths[i];\n } // Draw Row Data\n\n\n this.pdfDoc.setFont(this.normalFontName, 'normal').setFontSize(FONT_SIZE_NORMAL);\n this.pdfDoc.setTextColor(0);\n yOffset = tableStart;\n\n for (let i = 0; i < tableData.data.length; i++) {\n xOffset = PAGE_MARGIN_LEFT + 1;\n yOffset += rowHeight;\n let rowData = tableData.data[i];\n\n for (let j = 0; j < rowData.length; j++) {\n this.pdfDoc.text(rowData[j], xOffset, yOffset + this.pdfDoc.getTextDimensions(rowData[j]).h + 0.5, 'left');\n xOffset += tableWidth * tableData.columnWidths[j];\n }\n }\n\n return;\n } ///////////////////////////////////////////////////////////////////////////////////////\n // This function returns your PDF Document Object in Blob form. //\n // Returns: //\n // Blob object containing your PDF document (Blob) //\n ///////////////////////////////////////////////////////////////////////////////////////\n\n\n toBlob() {\n return this.pdfDoc.output('blob');\n } ///////////////////////////////////////////////////////////////////////////////////////\n // This function saves your PDF to a file on storage. //\n // Inputs: //\n // fileName - Name of PDF file, including path (string) //\n ///////////////////////////////////////////////////////////////////////////////////////\n\n\n toFile(fileName) {\n this.pdfDoc.save(fileName);\n return;\n } ///////////////////////////////////////////////////////////////////////////////////////\n // This function deletes all pages of your PDF Document. //\n ///////////////////////////////////////////////////////////////////////////////////////\n\n\n clear() {\n let numPages = this.pdfDoc.internal.getNumberOfPages();\n\n for (let i = 0; i < numPages; i++) {\n this.pdfDoc.deletePage(1); // Delete PDF PAge\n }\n\n return;\n } // Internal function called inside constructor to add custom/external fonts\n\n\n addFonts(fonts) {\n let normalFontIndex = 0;\n\n if (fonts) {\n for (let i = 0; i < fonts.length; i++) {\n this.pdfDoc.addFileToVFS(fonts[i].fileName, fonts[i].data);\n this.pdfDoc.addFont(fonts[i].fileName, fonts[i].fontName, fonts[i].fontStyle);\n\n switch (fonts[i].fontStyle) {\n case 'normal':\n this.normalFontName = fonts[i].fontName;\n normalFontIndex = i;\n break;\n\n case 'bold':\n this.boldFontName = fonts[i].fontName;\n break;\n\n case 'italic':\n this.italicFontName = fonts[i].fontName;\n break;\n }\n }\n }\n\n if (!this.normalFontName) this.normalFontName = 'helvetica';\n\n if (!this.boldFontName) {\n this.boldFontName = this.normalFontName;\n if (this.normalFontName !== 'helvetica') this.pdfDoc.addFont(fonts[normalFontIndex].fileName, fonts[normalFontIndex].fontName, 'bold');\n }\n\n if (!this.italicFontName) {\n this.italicFontName = this.normalFontName;\n if (this.normalFontName !== 'helvetica') this.pdfDoc.addFont(fonts[normalFontIndex].fileName, fonts[normalFontIndex].fontName, 'italic');\n }\n }\n\n}\n\nexports.default = Pdf;","\n// UMD Module boilerplate\n(function (root, factory) {\n /*global define */\n /*global module */\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define([], factory);\n } else if (typeof module === 'object' && module.exports) {\n // Node. Does not work with strict CommonJS, but\n // only CommonJS-like environments that support module.exports,\n // like Node.\n module.exports = factory();\n } else {\n // Browser globals (root is window)\n root.PrecisionStudioMenu = factory();\n }\n}(typeof self !== 'undefined' ? self : this, function () { /* eslint-disable-line no-restricted-globals */\n var SYMBOLTEXT = \n '';\n\n var DROPDOWN_EN = \n '' +\n '';\n\n var DROPDOWN_JP = \n '' +\n '';\n\n var DROPDOWN_CN = \n '' +\n '';\n\n var DROPDOWN_RU = \n '' +\n '';\n\n var DROPDOWN = {\n en: DROPDOWN_EN,\n jp: DROPDOWN_JP,\n cn: DROPDOWN_CN,\n ru: DROPDOWN_RU\n }\n \n var DEFAULT_TOOL_URLS = {\n PrecisionStudioUrl: \"https://tools.analog.com/{pstd-locale}/precisionstudio\",\n FilterWizardUrl: \"https://tools.analog.com/{pstd-locale}/filterwizard\",\n AdcDriverUrl: \"https://tools.analog.com/{pstd-locale}/adcdriver/\",\n PhotodiodeUrl: \"https://tools.analog.com/{pstd-locale}/photodiode\",\n DiamondUrl: \"https:/tools.analog.com/{pstd-locale}/diamond\",\n NoiseUrl: \"https://beta-tools.analog.com/noise/\",\n SignalChainDesignerUrl: \"https://beta-tools.analog.com/signalchaindesigner/\",\n SimDDSUrl: \"https://tools.analog.com/{pstd-locale}/simdds\",\n VirtualEvalUrl: \"https://beta-tools.analog.com/virtualeval/#category=2\",\n DACErrorCalculatorUrl: \"https://beta-tools.analog.com/DACErrorBudget/\"\n }\n \n var DEFAULT_OPTIONS = {\n locale: 'en',\n toolurls: DEFAULT_TOOL_URLS\n }\n\n var URL_KEY_MAP = {\n PrecisionStudioUrl: \"pstdUrl\",\n FilterWizardUrl: \"fwUrl\",\n AdcDriverUrl: \"adcUrl\",\n PhotodiodeUrl: \"pdUrl\",\n DiamondUrl: \"dmdUrl\",\n NoiseUrl: \"noiseUrl\",\n SignalChainDesignerUrl: \"scdUrl\",\n SimDDSUrl: \"ddsUrl\",\n VirtualEvalUrl: \"evalUrl\",\n DACErrorCalculatorUrl: \"dacUrl\" \n }\n\n var applyUrlsToMarkup = function(markup, urls, locale) {\n var updatedMarkup = markup;\n for (let name in URL_KEY_MAP) {\n updatedMarkup = updatedMarkup.replace(\n new RegExp('{' + URL_KEY_MAP[name] + '}','gi'), \n (name in urls) ? urls[name] : DEFAULT_TOOL_URLS[name]);\n }\n updatedMarkup = updatedMarkup.replace(/\\{pstd-locale\\}/gi, locale);\n updatedMarkup = updatedMarkup.replace(/\\{pstd-locale-w-ru\\}/gi, locale); //For compatibility with a very short-lived feature from 1.0.0\n return updatedMarkup;\n }\n // This is where the returned class really begins\n\n return /** @class */ (function () {\n function PrecisionStudioMenu(options) {\n var locale = (!!options && !!options.locale && options.locale in DROPDOWN) ? options.locale : DEFAULT_OPTIONS.locale;\n var toolurls = (!!options && !!options.toolurls) ? options.toolurls : DEFAULT_OPTIONS.toolurls;\n this.dropdown = applyUrlsToMarkup(DROPDOWN[locale], toolurls, locale);\n this.focusOutListenerBound = this.focusOutListener.bind(this);\n }\n\n PrecisionStudioMenu.prototype.focusOutListener = function (event) {\n const popover = this.element.querySelector(\".precisionstudiomenu_items\");\n // If focusout bubbled from within popover isn't headed to something else inside popover, hide the popover\n if (event.relatedTarget && !popover.contains(event.relatedTarget)) {\n popover.hidePopover();\n }\n }\n\n PrecisionStudioMenu.prototype.attach = function(element){\n this.element = element;\n // Apply icon catalog\n var tempwrapper = document.createElement(\"div\");\n tempwrapper.innerHTML = SYMBOLTEXT;\n var symbols = tempwrapper.querySelector(\"svg\");\n document.body.insertBefore(symbols, document.body.firstChild);\n\n // Apply dropdown using icons\n element.innerHTML = this.dropdown;\n var dropdown = this.element.querySelector(\".precisionstudiomenu_items\");\n dropdown.addEventListener(\"focusout\", this.focusOutListenerBound);\n\n }\n\n PrecisionStudioMenu.prototype.detach = function(){\n\n if (this.element) {\n // First tear down behavior - no event listener leaks\n var dropdown = this.element.querySelector(\".precisionstudiomenu_items\");\n if (dropdown) {\n dropdown.removeEventListener(\"focusout\", this.focusOutListenerBound);\n }\n // Remove the dropdown\n this.element.innerHTML = \"\";\n\n // Remove the icon catalog \n var iconsNode = document.querySelector(\"#precisionstudio-icons\");\n if (iconsNode) {\n document.body.removeChild(iconsNode);\n }\n\n }\n }\n\n return PrecisionStudioMenu;\n }());\n}));","export {\r\n transformCoordinates,\r\n multiply3x3,\r\n multiply3x1,\r\n getConnectionOffset,\r\n calculatePositions,\r\n _orderConnections,\r\n IDENTITY_MATRIX,\r\n};\r\n\r\n// export to a buffer with utf-8 encoding.\r\n// export function toBuffer(circuitSVG) {\r\n// var buf = Buffer.from(circuitSVG, 'utf-8');\r\n// return buf;\r\n// }\r\nconst IDENTITY_MATRIX = [1, 0, 0, 0, 1, 0, 0, 0, 1];\r\n\r\nfunction multiply3x3(a, b) {\r\n // Multiply each row by matrixA\r\n let result0 = multiply3x1(a, [b[0], b[1], b[2]]);\r\n let result1 = multiply3x1(a, [b[3], b[4], b[5]]);\r\n let result2 = multiply3x1(a, [b[6], b[7], b[8]]);\r\n return [result0[0], result0[1], result0[2], result1[0], result1[1], result1[2], result2[0], result2[1], result2[2]];\r\n}\r\n\r\nfunction multiply3x1(matrix, [x, y, z]) {\r\n return [\r\n x * matrix[0] + y * matrix[1] + z * matrix[2],\r\n x * matrix[3] + y * matrix[4] + z * matrix[5],\r\n x * matrix[6] + y * matrix[7] + z * matrix[8],\r\n ];\r\n}\r\n\r\nfunction transformCoordinates([x, y], matrices) {\r\n let coords = [x, y, 1];\r\n for (let matrix of matrices) {\r\n coords = multiply3x1(matrix, coords);\r\n }\r\n return [coords[0], coords[1]];\r\n}\r\n\r\nfunction getConnectionOffset(connection, circuitsWithMetadata) {\r\n let fromConnectionPoint = circuitsWithMetadata[connection.fromCircuit].metadata.connectionPoints.find((cp) => {\r\n return cp.type === 'primary-out' && cp.name === connection.fromOutput;\r\n });\r\n let toConnectionPoint = circuitsWithMetadata[connection.toCircuit].metadata.connectionPoints.find((cp) => {\r\n return cp.type === 'primary-in' && cp.name === connection.toInput;\r\n });\r\n return {\r\n x: fromConnectionPoint.position[0] - toConnectionPoint.position[0],\r\n y: fromConnectionPoint.position[1] - toConnectionPoint.position[1],\r\n };\r\n}\r\n\r\nfunction calculatePositions(connections, offsets, circuitCount) {\r\n let orderedConnections = _orderConnections(connections, offsets);\r\n // Seed the positions with an initial position of [0,0] - the rest should follow\r\n\r\n let positions = [];\r\n for (let i = 0; i < circuitCount; i++) positions.push(undefined);\r\n\r\n if (orderedConnections[0].reverse) {\r\n positions[orderedConnections[0].toCircuit] = { x: 0, y: 0 };\r\n } else {\r\n positions[orderedConnections[0].fromCircuit] = { x: 0, y: 0 };\r\n }\r\n for (let connIndex = 0; connIndex < orderedConnections.length; connIndex++) {\r\n let conn = orderedConnections[connIndex];\r\n if (conn.reverse) {\r\n // ToCircuit already placed - apply offsets in reverse\r\n let newPosition = {\r\n x: positions[conn.toCircuit].x - conn.offset.x,\r\n y: positions[conn.toCircuit].y - conn.offset.y,\r\n };\r\n if (!positions[conn.fromCircuit]) {\r\n positions[conn.fromCircuit] = newPosition;\r\n } else if (positions[conn.fromCircuit].x != newPosition.x || positions[conn.fromCircuit].y != newPosition.y) {\r\n throw 'Circuits in meshes with inconsistent connection point positions cannot be placed';\r\n }\r\n } else {\r\n // FromCircuit already placed - apply offsets as calculated\r\n let newPosition = {\r\n x: positions[conn.fromCircuit].x + conn.offset.x,\r\n y: positions[conn.fromCircuit].y + conn.offset.y,\r\n };\r\n if (!positions[conn.toCircuit]) {\r\n positions[conn.toCircuit] = newPosition;\r\n } else if (positions[conn.toCircuit].x !== newPosition.x || positions[conn.toCircuit].y !== newPosition.y) {\r\n throw 'Circuits in meshes with inconsistent connection point positions cannot be placed';\r\n }\r\n }\r\n }\r\n return positions;\r\n}\r\n\r\nfunction _orderConnections(connections, offsets) {\r\n let orderCount = 0;\r\n let orderedConnections = connections.map((connection, index) =>\r\n Object.assign({ offset: offsets[index] }, connection)\r\n ); //shallow clone with offset\r\n // Seed the loop with the first connection, regardless of topology\r\n let toProcess = [0];\r\n orderedConnections[0]['ordered'] = orderCount++;\r\n orderedConnections[0]['reverse'] = false;\r\n while (toProcess.length > 0) {\r\n let processing = toProcess;\r\n toProcess = [];\r\n // find unprocessed connections adjacent to each connection processed so far\r\n for (let connectionIndex of processing) {\r\n orderedConnections.forEach((connection, index) => {\r\n if (\r\n !('ordered' in connection) &&\r\n (connection.fromCircuit === connections[connectionIndex].toCircuit ||\r\n connection.toCircuit === connections[connectionIndex].fromCircuit)\r\n ) {\r\n toProcess.push(index);\r\n connection['ordered'] = orderCount;\r\n connection['reverse'] = connection.toCircuit === connections[connectionIndex].fromCircuit;\r\n orderCount++;\r\n }\r\n });\r\n }\r\n }\r\n if (orderCount < connections.length) {\r\n throw 'Circuits that do not form a single island of connection cannot be placed';\r\n }\r\n orderedConnections.sort((a, b) => {\r\n return a.ordered - b.ordered;\r\n });\r\n return orderedConnections;\r\n}\r\n","export { innerSVG, reduceSVGToGroup, wrapGroupsInSVG, removeConnectionPoints };\r\n\r\n// return all the elements inside SVG element.\r\nfunction innerSVG(circuit) {\r\n var svgContent = circuit.substr(circuit.indexOf('', '');\r\n}\r\n\r\nfunction reduceSVGToGroup(circuit, xOffset, yOffset, id, matrix) {\r\n var endSvgOffset = circuit.indexOf('>', circuit.indexOf('