gitextract_w8wgf1mm/ ├── .browserslistrc ├── .editorconfig ├── .eslintrc.js ├── .gitattributes ├── .github/ │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ ├── _bug_report_chs.md │ │ ├── _feature_request_chs.md │ │ ├── _new_dict_chs.md │ │ ├── bug_report.md │ │ ├── config.yml │ │ └── feature_request.md │ ├── config.yml │ └── no-response.yml ├── .gitignore ├── .neutrinorc.js ├── .prettierrc ├── .storybook/ │ ├── addons.ts │ ├── config.ts │ ├── configs/ │ │ └── contexts.tsx │ ├── manager-head.html │ ├── preview-head.html │ ├── style.css │ └── webpack.config.js ├── .travis.yml ├── .vscode/ │ ├── locales.schema.json │ └── settings.json ├── CHANGELOG.md ├── CONTRIBUTING-zh.md ├── CONTRIBUTING.md ├── LICENSE ├── README-zh.md ├── README.md ├── assets/ │ ├── content.css │ ├── fanyi.youdao.2.0/ │ │ ├── all-packed.css │ │ ├── conn.html │ │ ├── conn.js │ │ └── main.js │ ├── google-page-trans.js │ ├── inject-dict-panel.js │ └── vimium-c-injector.js ├── commitlint.config.js ├── config/ │ └── jest/ │ ├── cssTransform.js │ ├── fileTransform.js │ └── setupTests.js ├── jest.config.js ├── jsconfig.json ├── mac-app/ │ └── Saladict - Pop-up Dictionary and Page Translator/ │ ├── Saladict - Pop-up Dictionary and Page Translator/ │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets/ │ │ │ ├── AccentColor.colorset/ │ │ │ │ └── Contents.json │ │ │ ├── AppIcon.appiconset/ │ │ │ │ └── Contents.json │ │ │ └── Contents.json │ │ ├── Base.lproj/ │ │ │ └── Main.storyboard │ │ ├── Info.plist │ │ ├── Saladict___Pop_up_Dictionary_and_Page_Translator.entitlements │ │ └── ViewController.swift │ ├── Saladict - Pop-up Dictionary and Page Translator Extension/ │ │ ├── Info.plist │ │ ├── SafariWebExtensionHandler.swift │ │ └── Saladict___Pop_up_Dictionary_and_Page_Translator_Extension.entitlements │ └── Saladict - Pop-up Dictionary and Page Translator.xcodeproj/ │ ├── project.pbxproj │ ├── project.xcworkspace/ │ │ ├── contents.xcworkspacedata │ │ ├── xcshareddata/ │ │ │ └── IDEWorkspaceChecks.plist │ │ └── xcuserdata/ │ │ └── crimx.xcuserdatad/ │ │ └── UserInterfaceState.xcuserstate │ └── xcuserdata/ │ └── crimx.xcuserdatad/ │ └── xcschemes/ │ └── xcschememanagement.plist ├── package.json ├── postcss.config.js ├── scripts/ │ ├── after-build.js │ ├── build.js │ ├── firefox-fix.js │ ├── fixtures.js │ ├── pdf.js │ ├── setup-env.js │ ├── start.js │ ├── style-extractor.js │ └── test.js ├── src/ │ ├── _helpers/ │ │ ├── __mocks__/ │ │ │ ├── browser-api.ts │ │ │ ├── config-manager.ts │ │ │ └── selection.ts │ │ ├── analytics/ │ │ │ ├── events.ts │ │ │ └── index.ts │ │ ├── browser-api.ts │ │ ├── check-update.ts │ │ ├── chs-to-chz.ts │ │ ├── config-manager.ts │ │ ├── dom.ts │ │ ├── fetch-dom.ts │ │ ├── getSuggests.ts │ │ ├── hooks.ts │ │ ├── i18n.ts │ │ ├── injectSaladictInternal.ts │ │ ├── integrity.ts │ │ ├── lang-check.ts │ │ ├── matchPatternToRegExpStr.ts │ │ ├── observables.ts │ │ ├── permission-manager.ts │ │ ├── profile-manager.ts │ │ ├── promise-more.ts │ │ ├── record-manager.ts │ │ ├── saladict.ts │ │ ├── scrollbar-width.ts │ │ ├── storybook.tsx │ │ ├── titlebar-offset.ts │ │ ├── translateCtx.ts │ │ ├── uniqueKey.ts │ │ └── wordoftheday.ts │ ├── _locales/ │ │ ├── en/ │ │ │ ├── background.ts │ │ │ ├── common.ts │ │ │ ├── content.ts │ │ │ ├── langcode.ts │ │ │ ├── menus.ts │ │ │ ├── options.ts │ │ │ ├── popup.ts │ │ │ └── wordpage.ts │ │ ├── es/ │ │ │ ├── background.ts │ │ │ ├── common.ts │ │ │ ├── content.ts │ │ │ ├── langcode.ts │ │ │ ├── menus.ts │ │ │ ├── options.ts │ │ │ ├── popup.ts │ │ │ └── wordpage.ts │ │ ├── manifest/ │ │ │ ├── en/ │ │ │ │ └── messages.json │ │ │ ├── np/ │ │ │ │ └── messages.json │ │ │ ├── zh_CN/ │ │ │ │ └── messages.json │ │ │ └── zh_TW/ │ │ │ └── messages.json │ │ ├── ne/ │ │ │ ├── background.ts │ │ │ ├── common.ts │ │ │ ├── content.ts │ │ │ ├── langcode.ts │ │ │ ├── menus.ts │ │ │ ├── options.ts │ │ │ ├── popup.ts │ │ │ └── wordpage.ts │ │ ├── zh-CN/ │ │ │ ├── background.ts │ │ │ ├── common.ts │ │ │ ├── content.ts │ │ │ ├── langcode.ts │ │ │ ├── menus.ts │ │ │ ├── options.ts │ │ │ ├── popup.ts │ │ │ └── wordpage.ts │ │ └── zh-TW/ │ │ ├── background.ts │ │ ├── common.ts │ │ ├── content.ts │ │ ├── langcode.ts │ │ ├── menus.ts │ │ ├── options.ts │ │ ├── popup.ts │ │ └── wordpage.ts │ ├── _sass_shared/ │ │ ├── _fancy-scrollbar.scss │ │ ├── _global/ │ │ │ ├── _interfaces.scss │ │ │ ├── _mixins.scss │ │ │ ├── _variables.scss │ │ │ └── _z-indices.scss │ │ ├── _namespace.scss │ │ ├── _reset.scss │ │ └── _theme.scss │ ├── app-config/ │ │ ├── auth.ts │ │ ├── context-menus.ts │ │ ├── dicts.ts │ │ ├── index.ts │ │ ├── merge-config.ts │ │ ├── merge-profile.ts │ │ └── profiles.ts │ ├── audio-control/ │ │ ├── audio-control.scss │ │ └── index.tsx │ ├── background/ │ │ ├── __fake__/ │ │ │ └── env.ts │ │ ├── __mocks__/ │ │ │ └── database.ts │ │ ├── audio-manager.ts │ │ ├── badge.ts │ │ ├── clipboard-manager.ts │ │ ├── context-menus.ts │ │ ├── database/ │ │ │ ├── core.ts │ │ │ ├── index.ts │ │ │ ├── read.ts │ │ │ ├── sync-meta.ts │ │ │ └── write.ts │ │ ├── env.ts │ │ ├── i18n-manager.ts │ │ ├── index.ts │ │ ├── initialization.ts │ │ ├── page-translate/ │ │ │ └── caiyun.ts │ │ ├── pdf-sniffer.ts │ │ ├── server.ts │ │ ├── sync-manager/ │ │ │ ├── __mocks__/ │ │ │ │ └── helpers.ts │ │ │ ├── helpers.ts │ │ │ ├── index.ts │ │ │ ├── interface.ts │ │ │ └── services/ │ │ │ ├── ankiconnect/ │ │ │ │ ├── _locales/ │ │ │ │ │ ├── en.ts │ │ │ │ │ ├── zh-CN.ts │ │ │ │ │ └── zh-TW.ts │ │ │ │ └── index.ts │ │ │ ├── eudic/ │ │ │ │ ├── _locales/ │ │ │ │ │ ├── en.ts │ │ │ │ │ ├── zh-CN.ts │ │ │ │ │ └── zh-TW.ts │ │ │ │ └── index.ts │ │ │ ├── shanbay/ │ │ │ │ ├── _locales/ │ │ │ │ │ ├── en.ts │ │ │ │ │ ├── zh-CN.ts │ │ │ │ │ └── zh-TW.ts │ │ │ │ └── index.ts │ │ │ └── webdav/ │ │ │ ├── _locales/ │ │ │ │ ├── en.ts │ │ │ │ ├── zh-CN.ts │ │ │ │ └── zh-TW.ts │ │ │ └── index.ts │ │ ├── types.ts │ │ └── windows-manager.ts │ ├── components/ │ │ ├── AntdRoot/ │ │ │ ├── AntdRootContainer.tsx │ │ │ ├── _style.scss │ │ │ └── index.tsx │ │ ├── EntryBox/ │ │ │ ├── EntryBox.scss │ │ │ ├── EntryBox.stories.tsx │ │ │ └── index.tsx │ │ ├── ErrorBoundary.tsx │ │ ├── FloatBox/ │ │ │ ├── FloatBox.scss │ │ │ ├── FloatBox.stories.tsx │ │ │ └── index.tsx │ │ ├── HoverBox/ │ │ │ ├── HoverBox.scss │ │ │ └── index.tsx │ │ ├── MachineTrans/ │ │ │ ├── MachineTrans.scss │ │ │ ├── MachineTrans.stories.tsx │ │ │ ├── MachineTrans.tsx │ │ │ └── engine.ts │ │ ├── ShadowPortal/ │ │ │ ├── ShadowPortal.scss │ │ │ └── index.tsx │ │ ├── Speaker/ │ │ │ ├── Speaker.scss │ │ │ ├── Speaker.stories.tsx │ │ │ └── index.tsx │ │ ├── StarRates/ │ │ │ └── index.tsx │ │ ├── StrElm/ │ │ │ └── index.tsx │ │ ├── Waveform/ │ │ │ ├── Waveform.scss │ │ │ ├── Waveform.stories.tsx │ │ │ └── Waveform.tsx │ │ ├── WordPage/ │ │ │ ├── ExportModal/ │ │ │ │ ├── Linebreak.tsx │ │ │ │ ├── PlaceholderTable.tsx │ │ │ │ └── index.tsx │ │ │ ├── Header.tsx │ │ │ ├── WordTable.tsx │ │ │ ├── _style.scss │ │ │ └── index.tsx │ │ └── dictionaries/ │ │ ├── ahdict/ │ │ │ ├── View.tsx │ │ │ ├── _locales.json │ │ │ ├── _style.shadow.scss │ │ │ ├── config.ts │ │ │ └── engine.ts │ │ ├── baidu/ │ │ │ ├── View.tsx │ │ │ ├── _locales.ts │ │ │ ├── _style.shadow.scss │ │ │ ├── auth.ts │ │ │ ├── config.ts │ │ │ └── engine.ts │ │ ├── bing/ │ │ │ ├── View.tsx │ │ │ ├── _locales.json │ │ │ ├── _style.shadow.scss │ │ │ ├── config.ts │ │ │ └── engine.ts │ │ ├── caiyun/ │ │ │ ├── View.tsx │ │ │ ├── _locales.ts │ │ │ ├── _style.shadow.scss │ │ │ ├── auth.ts │ │ │ ├── config.ts │ │ │ └── engine.ts │ │ ├── cambridge/ │ │ │ ├── View.tsx │ │ │ ├── _locales.json │ │ │ ├── _style.shadow.scss │ │ │ ├── config.ts │ │ │ └── engine.ts │ │ ├── cnki/ │ │ │ ├── View.tsx │ │ │ ├── _locales.json │ │ │ ├── _style.shadow.scss │ │ │ ├── config.ts │ │ │ └── engine.ts │ │ ├── cobuild/ │ │ │ ├── View.tsx │ │ │ ├── _locales.json │ │ │ ├── _style.shadow.scss │ │ │ ├── config.ts │ │ │ └── engine.ts │ │ ├── dictionaries.stories.tsx │ │ ├── etymonline/ │ │ │ ├── View.tsx │ │ │ ├── _locales.json │ │ │ ├── _style.shadow.scss │ │ │ ├── config.ts │ │ │ └── engine.ts │ │ ├── eudic/ │ │ │ ├── View.tsx │ │ │ ├── _locales.json │ │ │ ├── _style.shadow.scss │ │ │ ├── config.ts │ │ │ └── engine.ts │ │ ├── google/ │ │ │ ├── View.tsx │ │ │ ├── _locales.ts │ │ │ ├── _style.shadow.scss │ │ │ ├── config.ts │ │ │ └── engine.ts │ │ ├── googledict/ │ │ │ ├── View.tsx │ │ │ ├── _locales.json │ │ │ ├── _style.shadow.scss │ │ │ ├── config.ts │ │ │ └── engine.ts │ │ ├── guoyu/ │ │ │ ├── View.tsx │ │ │ ├── _locales.json │ │ │ ├── _style.shadow.scss │ │ │ ├── config.ts │ │ │ └── engine.ts │ │ ├── helpers.ts │ │ ├── hjdict/ │ │ │ ├── View.tsx │ │ │ ├── _locales.json │ │ │ ├── _style.shadow.scss │ │ │ ├── config.ts │ │ │ └── engine.ts │ │ ├── jikipedia/ │ │ │ ├── View.tsx │ │ │ ├── _locales.json │ │ │ ├── _style.shadow.scss │ │ │ ├── config.ts │ │ │ └── engine.ts │ │ ├── jukuu/ │ │ │ ├── View.tsx │ │ │ ├── _locales.json │ │ │ ├── _style.shadow.scss │ │ │ ├── config.ts │ │ │ └── engine.ts │ │ ├── lexico/ │ │ │ ├── View.tsx │ │ │ ├── _locales.json │ │ │ ├── _style.shadow.scss │ │ │ ├── config.ts │ │ │ └── engine.ts │ │ ├── liangan/ │ │ │ ├── View.tsx │ │ │ ├── _locales.json │ │ │ ├── _style.shadow.scss │ │ │ ├── config.ts │ │ │ └── engine.ts │ │ ├── locales.ts │ │ ├── longman/ │ │ │ ├── View.tsx │ │ │ ├── _locales.json │ │ │ ├── _style.shadow.scss │ │ │ ├── config.ts │ │ │ └── engine.ts │ │ ├── macmillan/ │ │ │ ├── View.tsx │ │ │ ├── _locales.json │ │ │ ├── _style.shadow.scss │ │ │ ├── config.ts │ │ │ └── engine.ts │ │ ├── merriamwebster/ │ │ │ ├── View.tsx │ │ │ ├── _locales.json │ │ │ ├── _style.shadow.scss │ │ │ ├── config.ts │ │ │ └── engine.ts │ │ ├── mojidict/ │ │ │ ├── View.tsx │ │ │ ├── _locales.json │ │ │ ├── _style.shadow.scss │ │ │ ├── config.ts │ │ │ └── engine.ts │ │ ├── naver/ │ │ │ ├── View.tsx │ │ │ ├── _locales.json │ │ │ ├── _style.shadow.scss │ │ │ ├── config.ts │ │ │ └── engine.ts │ │ ├── oaldict/ │ │ │ ├── View.tsx │ │ │ ├── _locales.json │ │ │ ├── _style.shadow.scss │ │ │ ├── config.ts │ │ │ └── engine.ts │ │ ├── renren/ │ │ │ ├── View.tsx │ │ │ ├── _locales.json │ │ │ ├── _style.shadow.scss │ │ │ ├── config.ts │ │ │ └── engine.ts │ │ ├── shanbay/ │ │ │ ├── View.tsx │ │ │ ├── _locales.json │ │ │ ├── _style.shadow.scss │ │ │ ├── config.ts │ │ │ └── engine.ts │ │ ├── sogou/ │ │ │ ├── View.tsx │ │ │ ├── _locales.ts │ │ │ ├── _style.shadow.scss │ │ │ ├── auth.ts │ │ │ ├── config.ts │ │ │ └── engine.ts │ │ ├── tencent/ │ │ │ ├── View.tsx │ │ │ ├── _locales.ts │ │ │ ├── _style.shadow.scss │ │ │ ├── auth.ts │ │ │ ├── config.ts │ │ │ └── engine.ts │ │ ├── urban/ │ │ │ ├── View.tsx │ │ │ ├── _locales.json │ │ │ ├── _style.shadow.scss │ │ │ ├── config.ts │ │ │ └── engine.ts │ │ ├── vocabulary/ │ │ │ ├── View.tsx │ │ │ ├── _locales.json │ │ │ ├── _style.shadow.scss │ │ │ ├── config.ts │ │ │ └── engine.ts │ │ ├── weblio/ │ │ │ ├── View.tsx │ │ │ ├── _locales.json │ │ │ ├── _style.shadow.scss │ │ │ ├── config.ts │ │ │ └── engine.ts │ │ ├── weblioejje/ │ │ │ ├── View.tsx │ │ │ ├── _locales.json │ │ │ ├── _style.shadow.scss │ │ │ ├── config.ts │ │ │ └── engine.ts │ │ ├── websterlearner/ │ │ │ ├── View.tsx │ │ │ ├── _locales.json │ │ │ ├── _style.shadow.scss │ │ │ ├── config.ts │ │ │ └── engine.ts │ │ ├── wikipedia/ │ │ │ ├── View.tsx │ │ │ ├── _locales.json │ │ │ ├── _style.shadow.scss │ │ │ ├── config.ts │ │ │ └── engine.ts │ │ ├── youdao/ │ │ │ ├── View.tsx │ │ │ ├── _locales.json │ │ │ ├── _style.shadow.scss │ │ │ ├── config.ts │ │ │ └── engine.ts │ │ ├── youdaotrans/ │ │ │ ├── View.tsx │ │ │ ├── _locales.ts │ │ │ ├── _style.shadow.scss │ │ │ ├── auth.ts │ │ │ ├── config.ts │ │ │ └── engine.ts │ │ └── zdic/ │ │ ├── View.tsx │ │ ├── _locales.json │ │ ├── _style.shadow.scss │ │ ├── config.ts │ │ └── engine.ts │ ├── content/ │ │ ├── __fake__/ │ │ │ ├── env-instant-capture.ts │ │ │ ├── env-select-text.ts │ │ │ └── env.ts │ │ ├── _style.scss │ │ ├── components/ │ │ │ ├── DictItem/ │ │ │ │ ├── DictItem.scss │ │ │ │ ├── DictItem.stories.tsx │ │ │ │ ├── DictItem.tsx │ │ │ │ ├── DictItemBody.tsx │ │ │ │ ├── DictItemContent.shadow.scss │ │ │ │ ├── DictItemHead.scss │ │ │ │ └── DictItemHead.tsx │ │ │ ├── DictList/ │ │ │ │ ├── DictList.container.tsx │ │ │ │ ├── DictList.scss │ │ │ │ ├── DictList.stories.tsx │ │ │ │ └── DictList.tsx │ │ │ ├── DictPanel/ │ │ │ │ ├── DictPanel.container.tsx │ │ │ │ ├── DictPanel.portal.tsx │ │ │ │ ├── DictPanel.scss │ │ │ │ ├── DictPanel.shadow.scss │ │ │ │ ├── DictPanel.stories.tsx │ │ │ │ ├── DictPanel.tsx │ │ │ │ ├── DictPanelStandalone.container.tsx │ │ │ │ ├── DictPanelStandalone.scss │ │ │ │ └── DictPanelStandalone.tsx │ │ │ ├── MenuBar/ │ │ │ │ ├── MenuBar.container.tsx │ │ │ │ ├── MenuBar.scss │ │ │ │ ├── MenuBar.stories.tsx │ │ │ │ ├── MenuBar.tsx │ │ │ │ ├── MenubarBtns.scss │ │ │ │ ├── MenubarBtns.stories.tsx │ │ │ │ ├── MenubarBtns.tsx │ │ │ │ ├── Profiles.scss │ │ │ │ ├── Profiles.stories.tsx │ │ │ │ ├── Profiles.tsx │ │ │ │ ├── SearchBox.scss │ │ │ │ ├── SearchBox.stories.tsx │ │ │ │ ├── SearchBox.tsx │ │ │ │ ├── Suggest.scss │ │ │ │ ├── Suggest.stories.tsx │ │ │ │ └── Suggest.tsx │ │ │ ├── MtaBox/ │ │ │ │ ├── MtaBox.container.tsx │ │ │ │ ├── MtaBox.scss │ │ │ │ ├── MtaBox.stories.tsx │ │ │ │ └── MtaBox.tsx │ │ │ ├── SaladBowl/ │ │ │ │ ├── SaladBowl.container.tsx │ │ │ │ ├── SaladBowl.portal.tsx │ │ │ │ ├── SaladBowl.shadow.scss │ │ │ │ ├── SaladBowl.stories.tsx │ │ │ │ └── SaladBowl.tsx │ │ │ ├── WaveformBox/ │ │ │ │ ├── WaveformBox.container.tsx │ │ │ │ ├── WaveformBox.scss │ │ │ │ ├── WaveformBox.stories.tsx │ │ │ │ └── WaveformBox.tsx │ │ │ └── WordEditor/ │ │ │ ├── CtxTransList.scss │ │ │ ├── CtxTransList.stories.tsx │ │ │ ├── CtxTransList.tsx │ │ │ ├── Notes.scss │ │ │ ├── Notes.tsx │ │ │ ├── WordCards.scss │ │ │ ├── WordCards.tsx │ │ │ ├── WordEditor.container.tsx │ │ │ ├── WordEditor.portal.tsx │ │ │ ├── WordEditor.scss │ │ │ ├── WordEditor.shadow.scss │ │ │ ├── WordEditor.stories.tsx │ │ │ ├── WordEditor.tsx │ │ │ ├── WordEditorPanel.scss │ │ │ ├── WordEditorPanel.stories.tsx │ │ │ ├── WordEditorPanel.tsx │ │ │ └── WordEditorStandalone.container.tsx │ │ ├── index.tsx │ │ └── redux/ │ │ ├── epics/ │ │ │ ├── index.ts │ │ │ ├── newSelection.epic.ts │ │ │ ├── searchStart.epic.ts │ │ │ └── utils.ts │ │ ├── index.ts │ │ ├── init.ts │ │ └── modules/ │ │ ├── action-catalog.ts │ │ ├── action-handlers/ │ │ │ ├── index.ts │ │ │ ├── new-selection.ts │ │ │ ├── open-qs-panel.ts │ │ │ └── search-start.ts │ │ ├── index.ts │ │ └── state.ts │ ├── history/ │ │ ├── env.ts │ │ └── index.tsx │ ├── manifest/ │ │ ├── chrome.manifest.json │ │ ├── common.manifest.js │ │ ├── edge.manifest.json │ │ ├── firefox.manifest.json │ │ └── safari.manifest.json │ ├── notebook/ │ │ ├── env.ts │ │ └── index.tsx │ ├── options/ │ │ ├── __fake__/ │ │ │ └── env.ts │ │ ├── _style.scss │ │ ├── acknowledgement.ts │ │ ├── components/ │ │ │ ├── BtnPreview/ │ │ │ │ ├── PreviewIcon.tsx │ │ │ │ ├── _style.scss │ │ │ │ └── index.tsx │ │ │ ├── Entries/ │ │ │ │ ├── BlackWhiteList.tsx │ │ │ │ ├── ContextMenus/ │ │ │ │ │ ├── AddModal.tsx │ │ │ │ │ ├── EditeModal.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── DictAuths.tsx │ │ │ │ ├── DictPanel.tsx │ │ │ │ ├── Dictionaries/ │ │ │ │ │ ├── AllDicts.tsx │ │ │ │ │ ├── DictTitle/ │ │ │ │ │ │ ├── _style.scss │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── EditModal.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── General.tsx │ │ │ │ ├── ImportExport.tsx │ │ │ │ ├── Notebook/ │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── sync-services/ │ │ │ │ │ ├── ankiconnect.tsx │ │ │ │ │ ├── eudic.tsx │ │ │ │ │ ├── shanbay.tsx │ │ │ │ │ └── webdav.tsx │ │ │ │ ├── PDF.tsx │ │ │ │ ├── Permissions.tsx │ │ │ │ ├── Popup.tsx │ │ │ │ ├── Privacy.tsx │ │ │ │ ├── Profiles/ │ │ │ │ │ ├── EditNameModal.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── Pronunciation.tsx │ │ │ │ ├── QuickSearch/ │ │ │ │ │ ├── StandaloneModal.tsx │ │ │ │ │ ├── TitlebarOffsetModal.tsx │ │ │ │ │ └── index.tsx │ │ │ │ └── SearchModes/ │ │ │ │ ├── index.tsx │ │ │ │ └── searchMode.tsx │ │ │ ├── EntryError.tsx │ │ │ ├── EntrySideBar/ │ │ │ │ ├── _style.scss │ │ │ │ └── index.tsx │ │ │ ├── Header/ │ │ │ │ ├── HeadInfo/ │ │ │ │ │ ├── AckList.tsx │ │ │ │ │ ├── _style.scss │ │ │ │ │ └── index.tsx │ │ │ │ ├── _style.scss │ │ │ │ └── index.tsx │ │ │ ├── InputNumberGroup/ │ │ │ │ ├── _style.scss │ │ │ │ └── index.tsx │ │ │ ├── MainEntry.tsx │ │ │ ├── MatchPatternModal/ │ │ │ │ ├── PatternItem.tsx │ │ │ │ └── index.tsx │ │ │ ├── SaladictForm/ │ │ │ │ ├── SaveBtn.tsx │ │ │ │ ├── _style.scss │ │ │ │ └── index.tsx │ │ │ ├── SaladictModalForm.tsx │ │ │ └── SortableList/ │ │ │ ├── _style.scss │ │ │ ├── index.tsx │ │ │ └── reorder.ts │ │ ├── env.ts │ │ ├── helpers/ │ │ │ ├── change-entry.ts │ │ │ ├── layout.ts │ │ │ ├── panel-store.ts │ │ │ ├── path-joiner.ts │ │ │ ├── upload.ts │ │ │ ├── use-check-dict-auth.ts │ │ │ └── use-form-dirty.ts │ │ └── index.tsx │ ├── popup/ │ │ ├── Notebook.tsx │ │ ├── Popup.tsx │ │ ├── __fake__/ │ │ │ ├── _style.scss │ │ │ └── env.ts │ │ ├── _style.scss │ │ ├── env.ts │ │ └── index.tsx │ ├── quick-search/ │ │ ├── env.ts │ │ ├── index.tsx │ │ └── quick-search.scss │ ├── selection/ │ │ ├── helper.ts │ │ ├── index.ts │ │ ├── instant-capture.ts │ │ ├── message.ts │ │ ├── quick-search.ts │ │ └── select-text.ts │ ├── typings/ │ │ ├── css.d.ts │ │ ├── global.d.ts │ │ ├── helpers.ts │ │ └── message.ts │ └── word-editor/ │ ├── env.ts │ ├── index.tsx │ └── word-editor.scss ├── test/ │ ├── helper.ts │ └── specs/ │ ├── _helpers/ │ │ ├── browser-api.spec.ts │ │ ├── check-update.spec.ts │ │ ├── chs-to-chz.spec.ts │ │ ├── lang-check.spec.ts │ │ ├── profile-manager.spec.ts │ │ └── promise-more.spec.ts │ ├── background/ │ │ ├── audio-manager.spec.ts │ │ ├── context-menus.spec.ts │ │ ├── initialization.spec.ts │ │ ├── pdf-sniffer.spec.ts │ │ └── sync-manager/ │ │ └── services/ │ │ ├── ankiconnect.spec.ts │ │ └── webdav.spec.ts │ └── components/ │ └── dictionaries/ │ ├── ahdict/ │ │ ├── fixtures.js │ │ └── requests.mock.ts │ ├── bing/ │ │ ├── engine.spec.ts │ │ ├── fixtures.js │ │ └── requests.mock.ts │ ├── cambridge/ │ │ ├── engine.spec.ts │ │ ├── fixtures.js │ │ └── requests.mock.ts │ ├── cnki/ │ │ ├── engine.spec.ts │ │ ├── fixtures.js │ │ └── requests.mock.ts │ ├── cobuild/ │ │ ├── engine.spec.ts │ │ ├── fixtures.js │ │ └── requests.mock.ts │ ├── etymonline/ │ │ ├── engine.spec.ts │ │ ├── fixtures.js │ │ └── requests.mock.ts │ ├── eudic/ │ │ ├── engine.spec.ts │ │ ├── fixtures.js │ │ └── requests.mock.ts │ ├── googledict/ │ │ ├── fixtures.js │ │ └── requests.mock.ts │ ├── guoyu/ │ │ ├── engine.spec.ts │ │ ├── fixtures.js │ │ └── requests.mock.ts │ ├── helpers.ts │ ├── hjdict/ │ │ ├── fixtures.js │ │ └── requests.mock.ts │ ├── jikipedia/ │ │ ├── engine.spec.ts │ │ ├── fixtures.js │ │ └── requests.mock.ts │ ├── jukuu/ │ │ ├── engine.spec.ts │ │ ├── fixtures.js │ │ └── requests.mock.ts │ ├── lexico/ │ │ ├── engine.spec.ts │ │ ├── fixtures.js │ │ └── requests.mock.ts │ ├── liangan/ │ │ ├── fixtures.js │ │ └── requests.mock.ts │ ├── longman/ │ │ ├── engine.spec.ts │ │ ├── fixtures.js │ │ └── requests.mock.ts │ ├── macmillan/ │ │ ├── engine.spec.ts │ │ ├── fixtures.js │ │ └── requests.mock.ts │ ├── merriamwebster/ │ │ ├── engine.spec.ts │ │ ├── fixtures.js │ │ ├── requests.mock.ts │ │ └── testCases.ts │ ├── mojidict/ │ │ ├── fixtures.js │ │ └── requests.mock.ts │ ├── naver/ │ │ ├── engine.spec.ts │ │ ├── fixtures.js │ │ └── requests.mock.ts │ ├── oaldict/ │ │ ├── fixtures.js │ │ └── requests.mock.ts │ ├── renren/ │ │ ├── engine.spec.ts │ │ ├── fixtures.js │ │ └── requests.mock.ts │ ├── shanbay/ │ │ ├── engine.spec.ts │ │ ├── fixtures.js │ │ └── requests.mock.ts │ ├── urban/ │ │ ├── engine.spec.ts │ │ ├── fixtures.js │ │ └── requests.mock.ts │ ├── vocabulary/ │ │ ├── engine.spec.ts │ │ ├── fixtures.js │ │ └── requests.mock.ts │ ├── weblio/ │ │ ├── engine.spec.ts │ │ ├── fixtures.js │ │ └── requests.mock.ts │ ├── weblioejje/ │ │ ├── engine.spec.ts │ │ ├── fixtures.js │ │ └── requests.mock.ts │ ├── websterlearner/ │ │ ├── engine.spec.ts │ │ ├── fixtures.js │ │ └── requests.mock.ts │ ├── wikipedia/ │ │ ├── engine.spec.ts │ │ ├── fixtures.js │ │ └── requests.mock.ts │ ├── youdao/ │ │ ├── engine.spec.ts │ │ ├── fixtures.js │ │ └── requests.mock.ts │ └── zdic/ │ ├── engine.spec.ts │ ├── fixtures.js │ └── requests.mock.ts ├── tsconfig.json └── webpack.config.js