├── .github ├── FUNDING.yml └── workflows │ ├── ext-web.yml │ └── release.yml ├── .gitignore ├── .idea └── vcs.xml ├── .npmrc ├── .vscode └── settings.json ├── apps ├── example │ ├── .gitignore │ ├── action.html │ ├── bridge.html │ ├── index.html │ ├── package.json │ └── src │ │ ├── actions.tsx │ │ ├── bridge.tsx │ │ ├── component.tsx │ │ └── index.ts └── web │ ├── .cache │ ├── 0764216a-e635-4351-8314-0adafdc3ecf4.json │ ├── 0983443a-51b4-49dd-a7d0-ab98d5d5e9db.json │ ├── 16be3c9d-ee14-4d04-974c-775e2a3e92f1.json │ ├── 1bb9f313-d3e1-4633-978f-cdee7b3c05bf.json │ ├── 26ebb7af-8dee-4517-8d68-4fd4f5eaa5ef.json │ ├── 36617f0d-68ee-41f2-906e-5d5cc7415883.json │ ├── 3fdf1250-b41a-4e39-a387-4948be959ecd.json │ ├── 4812d679-4230-453c-a96c-fe15314f348a.json │ ├── 58a605be-aaf3-481a-af1a-ebb0a632b3b3.json │ ├── 6748f1bb-0fe3-426f-a4e3-1b68cb5fbbdb.json │ ├── 749f1ace-912c-46a9-a5fc-79d938e1a5c7.json │ ├── 8013dcda-1e18-402f-8375-0af46f8d7fce.json │ ├── 9ba20cf8-0ca1-4551-a93e-ca35f1064077.json │ ├── ab7af3cd-14e8-43bb-a246-2deb11423238.json │ ├── about │ │ └── privacy.json │ ├── author.json │ ├── b5fe205b-aff7-4f14-a466-14fe2ba29caa.json │ ├── b7f758f3-1101-46c5-b9ef-1f29f76102cf.json │ ├── bdc8dfa9-d384-4062-b1ad-34438bfc24a3.json │ ├── bind-vip.json │ ├── ce1300d2-471b-4391-946b-d1a7c281758f.json │ ├── cf23ccbd-6b9d-4f0b-857f-561cbb7cddf0.json │ ├── cfd9af87-0210-4934-9e04-20bc708c4206.json │ ├── dea4f9dd-2de0-4ae3-bf41-e7b01cbbf39a.json │ ├── developer │ │ └── project.json │ ├── docs.json │ ├── donation.json │ ├── e11f15bf-3bf6-414c-85d3-8751d768f31d.json │ ├── e2aafc8ce93a453aacc427662287251f.json │ ├── e5d356bf-66ce-48c0-9f45-38c69dff5ccc.json │ ├── enable-and-disable.json │ ├── expired.json │ ├── f304934c-4969-4297-864a-7c19cf3849b5.json │ ├── fbf262c4-8672-4099-95ff-18eb04b7d142.json │ ├── fca779b7-95c0-4b70-88aa-eabc345a7af8.json │ ├── frontend │ │ └── mv3-extension.json │ ├── guide-book.json │ ├── guide │ │ └── shortcut.json │ ├── install.json │ ├── invite.json │ ├── issues.json │ ├── items.json │ ├── jobs.json │ ├── lizhi-todo-list.json │ ├── no-cloud.json │ ├── privacy.json │ ├── pro-plan.json │ ├── pro-plan │ │ └── tips.json │ ├── question.json │ ├── rate.json │ ├── release.json │ ├── release │ │ ├── 0.27.5.json │ │ ├── 0.28.json │ │ ├── 0.29.json │ │ └── 27.json │ ├── shortcuts.json │ ├── sitemap.json │ ├── skills.json │ ├── some-tips.json │ ├── status.json │ ├── stay-stupid.json │ ├── uninstall.json │ ├── versions.json │ ├── welcome.json │ ├── widget │ │ └── 404.json │ └── wuxianyijin.json │ ├── .env │ ├── .eslintrc.json │ ├── .gitignore │ ├── .husky │ └── pre-commit │ ├── .lintstagedrc.js │ ├── .prettierrc │ ├── @ │ ├── components │ │ └── ui │ │ │ ├── alert-dialog.tsx │ │ │ ├── alert.tsx │ │ │ ├── avatar.tsx │ │ │ ├── badge.tsx │ │ │ ├── button.tsx │ │ │ ├── card.tsx │ │ │ ├── dialog.tsx │ │ │ ├── dropdown-menu.tsx │ │ │ ├── form.tsx │ │ │ ├── hover-card.tsx │ │ │ ├── input.tsx │ │ │ ├── label.tsx │ │ │ ├── menubar.tsx │ │ │ ├── navigation-menu.tsx │ │ │ ├── popover.tsx │ │ │ ├── radio-group.tsx │ │ │ ├── select.tsx │ │ │ ├── separator.tsx │ │ │ ├── sheet.tsx │ │ │ ├── switch.tsx │ │ │ ├── table.tsx │ │ │ ├── textarea.tsx │ │ │ ├── toast.tsx │ │ │ ├── toaster.tsx │ │ │ ├── tooltip.tsx │ │ │ └── use-toast.ts │ └── utils.ts │ ├── CHANGELOG.md │ ├── README.md │ ├── assets │ ├── json │ │ └── question.json │ └── svg │ │ ├── 404 │ │ └── not_found.svg │ │ ├── account │ │ └── group.svg │ │ ├── back.svg │ │ ├── bangzhu.svg │ │ ├── bilibili.svg │ │ ├── card.svg │ │ ├── close.svg │ │ ├── edit.svg │ │ ├── email.svg │ │ ├── free.svg │ │ ├── gift.svg │ │ ├── github.svg │ │ ├── home.svg │ │ ├── info.svg │ │ ├── jinzhi.svg │ │ ├── loading.svg │ │ ├── me.svg │ │ ├── min.svg │ │ ├── more.svg │ │ ├── notify.svg │ │ ├── offline_download.svg │ │ ├── outlink.svg │ │ ├── pingfen.svg │ │ ├── question.svg │ │ ├── right-more.svg │ │ ├── search.svg │ │ ├── setting.svg │ │ ├── state.svg │ │ ├── tada.svg │ │ ├── toggle.svg │ │ ├── vip.svg │ │ ├── warn.svg │ │ ├── wechat.svg │ │ └── wenjianfuzhi.svg │ ├── components.json │ ├── components │ ├── Breadcrumbs.tsx │ ├── ColorLines.tsx │ ├── CommonForm.tsx │ ├── Day.tsx │ ├── DeveloperContainer.tsx │ ├── DeveloperTip.tsx │ ├── Empty.tsx │ ├── ExtensionInfos.tsx │ ├── Footer.tsx │ ├── FooterSetting.tsx │ ├── HelpAside.tsx │ ├── HighLightText.tsx │ ├── IconButton.tsx │ ├── InstallBar.tsx │ ├── KeyboardTip.tsx │ ├── Keywords.tsx │ ├── LightText.tsx │ ├── Loading.tsx │ ├── Modal.tsx │ ├── PageLightBrief.tsx │ ├── RedirectToExt.tsx │ ├── ShortCutInfo.tsx │ ├── Star.tsx │ ├── Status.tsx │ ├── TDKHead.tsx │ ├── Table.tsx │ ├── TipInfo.tsx │ ├── WhoAmIBoard.tsx │ ├── account │ │ ├── AuthBottoms.tsx │ │ ├── AuthList.tsx │ │ ├── Avatar.tsx │ │ ├── BookDetail.tsx │ │ ├── BookList.tsx │ │ ├── DeviceInfo.tsx │ │ ├── InviteGroup.tsx │ │ ├── Nickname.tsx │ │ ├── Profile.tsx │ │ ├── ProfileEditor.tsx │ │ ├── SignUpForm.tsx │ │ ├── TodayRelated.tsx │ │ ├── UserCard.tsx │ │ ├── UserInfoForm.tsx │ │ ├── VipRecords.tsx │ │ ├── id │ │ │ └── IdHome.tsx │ │ └── sign │ │ │ ├── SignForm.tsx │ │ │ └── Signin.tsx │ ├── actions │ │ └── ActionItem.tsx │ ├── auth │ │ └── Callback.tsx │ ├── backup │ │ ├── BackupStat.tsx │ │ ├── CloudBackup.tsx │ │ ├── CloudBackupList.tsx │ │ ├── CloudSupporters.tsx │ │ ├── ConfigSwitch.tsx │ │ ├── api.ts │ │ └── extension │ │ │ ├── CloudStatus.tsx │ │ │ ├── ExportFilter.tsx │ │ │ ├── FilterCheckBox.tsx │ │ │ ├── ImageCloud.tsx │ │ │ ├── ImportAndExport.tsx │ │ │ ├── ImportFilter.tsx │ │ │ └── StorageInfo.tsx │ ├── button │ │ ├── ActionButton.tsx │ │ └── IconButton.tsx │ ├── check │ │ ├── CheckDomain.tsx │ │ ├── CheckFallback.tsx │ │ ├── CheckUser.tsx │ │ └── CheckVersion.tsx │ ├── cloud │ │ ├── CloudFunctions.tsx │ │ ├── CloudIndex.tsx │ │ ├── CloudSelector.tsx │ │ ├── CloudStat.tsx │ │ ├── CloudSupportLink.tsx │ │ └── CloudSync.tsx │ ├── contact │ │ ├── FeedbackForm.tsx │ │ └── FeedbackList.tsx │ ├── data │ │ └── ExtensionData.tsx │ ├── debug │ │ ├── ErrorBound.tsx │ │ ├── ErrorTip.tsx │ │ └── Logs.tsx │ ├── editor │ │ ├── Memo.tsx │ │ ├── TipTap.tsx │ │ ├── extension │ │ │ └── HashTag.ts │ │ ├── node │ │ │ ├── Hashtag.ts │ │ │ └── MentionList.tsx │ │ └── suggestion.ts │ ├── error │ │ └── NotFound.tsx │ ├── form │ │ ├── BindVipForm.tsx │ │ ├── CustomLinkForm.tsx │ │ ├── CustomStyleForm.tsx │ │ ├── PlainInputArea.tsx │ │ ├── UnbindForm.tsx │ │ ├── UrlRuleForm.tsx │ │ ├── ValidateForm.tsx │ │ ├── WebdavForm.tsx │ │ └── bindEmailForm.tsx │ ├── image │ │ ├── ImageShape.tsx │ │ ├── ImgFallback.tsx │ │ ├── UploadTrigger.tsx │ │ ├── canvasPreview.tsx │ │ ├── imgPreview.tsx │ │ └── useDebounceEffect.ts │ ├── loading │ │ └── Loading.tsx │ ├── manage │ │ └── ClipboardList.tsx │ ├── notion │ │ ├── Code.tsx │ │ ├── NotionContent.tsx │ │ └── NotionDoc.tsx │ ├── permission │ │ └── PermissionList.tsx │ ├── popup │ │ ├── Achieve.tsx │ │ ├── Bookmark.tsx │ │ ├── LightedTab.tsx │ │ ├── NavTabs.tsx │ │ ├── PageMemo.tsx │ │ ├── PopupLights.tsx │ │ ├── Search.tsx │ │ ├── Summary.tsx │ │ ├── WindowTabs.tsx │ │ └── state │ │ │ ├── DisableButton.tsx │ │ │ ├── EnableCheck.tsx │ │ │ └── PageInfo.tsx │ ├── pro │ │ ├── Discount.tsx │ │ ├── DonationCard.tsx │ │ ├── PlanCard.tsx │ │ ├── Plans.tsx │ │ └── Tip.tsx │ ├── setting │ │ ├── About.tsx │ │ ├── Advance.tsx │ │ ├── BasicSettingLine.tsx │ │ ├── CustomStyle.tsx │ │ ├── DisabledDetail.tsx │ │ ├── LightSetting.tsx │ │ ├── LinkedRule.tsx │ │ ├── Safety.tsx │ │ ├── Setting.tsx │ │ ├── SettingDetail.tsx │ │ └── actions │ │ │ └── ActionSetting.tsx │ ├── tag │ │ ├── Tag.tsx │ │ └── Tagfy.tsx │ ├── versions │ │ └── VersionItem.tsx │ └── webpage │ │ └── WebPageItem.tsx │ ├── const │ ├── collection.ts │ ├── developerTask.ts │ ├── env.ts │ ├── git.ts │ ├── image.ts │ ├── notion.ts │ ├── oauth.ts │ ├── supporters.ts │ └── tdk.ts │ ├── development.md │ ├── global.d.ts │ ├── hooks │ ├── table │ │ ├── useKeys.tsx │ │ ├── useSettingConfig.ts │ │ ├── useStorage.ts │ │ ├── useTableKeys.ts │ │ └── useTableQuery.ts │ ├── useAuthList.ts │ ├── useBackupList.ts │ ├── useBooks.tsx │ ├── useClickOutside.ts │ ├── useConfig.ts │ ├── useCurrentTab.ts │ ├── useDataStat.ts │ ├── useDeveloperKeyValue.ts │ ├── useFrequency.ts │ ├── useGiftDetail.ts │ ├── useImageCloud.ts │ ├── useInviteInfo.ts │ ├── useLights.ts │ ├── useOfflineHtml.ts │ ├── useOssKey.ts │ ├── usePermissions.ts │ ├── usePrice.ts │ ├── useSettings.ts │ ├── useShortcut.ts │ ├── useStat.ts │ ├── useTabPagenoteData.tsx │ ├── useTabPagenoteState.ts │ ├── useUserInfo.ts │ ├── useVersionValid.ts │ ├── useVersions.ts │ ├── useWebpage.ts │ ├── useWhoAmi.ts │ └── userLazyEffect.ts │ ├── layouts │ ├── BasicLayout.tsx │ ├── Doc.tsx │ └── ExtLayout.tsx │ ├── lib │ └── types.ts │ ├── next.config.js │ ├── npm.md │ ├── package.json │ ├── pages │ ├── 404.tsx │ ├── [...paths] │ │ └── index.tsx │ ├── _app.tsx │ ├── _document.tsx │ ├── account.tsx │ ├── api │ │ ├── doc.ts │ │ ├── docs.ts │ │ ├── search.ts │ │ └── sitemap.ts │ ├── contact │ │ └── feedback.tsx │ ├── developer │ │ └── log.tsx │ ├── ext │ │ ├── achieve.tsx │ │ ├── actions │ │ │ ├── export.yml │ │ │ └── index.tsx │ │ ├── data.tsx │ │ ├── gallery.tsx │ │ ├── id.tsx │ │ ├── img.tsx │ │ ├── memo.tsx │ │ ├── offline.tsx │ │ ├── permission.tsx │ │ ├── popup.tsx │ │ ├── setting.tsx │ │ └── sidepanel.tsx │ ├── file │ │ ├── [filename].tsx │ │ └── index.tsx │ ├── gift.tsx │ ├── index.tsx │ ├── manage │ │ ├── light.tsx │ │ ├── page.tsx │ │ └── trash.tsx │ ├── oauth │ │ ├── callback_github.tsx │ │ ├── callback_notion.tsx │ │ └── email.tsx │ ├── offline.tsx │ ├── pagenote.tsx │ ├── redirect.tsx │ ├── setting.tsx │ ├── signin.tsx │ ├── vip-bind.tsx │ ├── vip.tsx │ └── widget │ │ ├── close-on-installed.tsx │ │ ├── pro-plan.tsx │ │ ├── rate.tsx │ │ └── terminal.tsx │ ├── postcss.config.js │ ├── public │ ├── ads.txt │ ├── base_default_page_data.json │ ├── changelog.json │ ├── components.js │ ├── favicon.ico │ ├── images │ │ ├── light-1024.png │ │ ├── light-128.png │ │ ├── light-16.png │ │ ├── light-256.png │ │ ├── light-32.png │ │ ├── light-48.png │ │ ├── light-512.png │ │ ├── light-64.png │ │ ├── light-96.png │ │ ├── light-disable.png │ │ ├── og.svg │ │ ├── pagenote.png │ │ └── wechat.jpg │ ├── img │ │ ├── email.webp │ │ └── icons │ │ │ ├── light-64.png │ │ │ └── readme.md │ ├── lib │ │ └── aliyun-oss-sdk.min.js │ ├── markdown.css │ ├── markdown2.css │ ├── robots.txt │ ├── sitemap.xml │ ├── sw.js │ ├── sw.resource.js │ ├── version.json │ ├── worker-register.js │ └── yml │ │ └── sync_setting_by_obsidian.yml │ ├── service │ ├── account.ts │ ├── ext.ts │ ├── gift.ts │ ├── index.ts │ ├── offline.ts │ └── server │ │ ├── api.ts │ │ ├── cache.ts │ │ ├── doc.ts │ │ └── notion.ts │ ├── store │ └── ContextProvider.tsx │ ├── styles │ ├── animation.scss │ ├── ext.scss │ ├── globals.scss │ ├── memo.scss │ ├── notion-dark.scss │ ├── notion-doc.scss │ ├── swiper.scss │ ├── tailwind.scss │ ├── tiptap.scss │ └── variables.scss │ ├── tailwind.config.js │ ├── tsconfig.json │ ├── typing │ └── index.ts │ └── utils │ ├── Error.ts │ ├── backup.ts │ ├── check.ts │ ├── chrome.ts │ ├── document.ts │ ├── fetch.ts │ ├── file.ts │ ├── form.ts │ ├── image.ts │ ├── notion.ts │ ├── popup.ts │ ├── search-engine.ts │ ├── size.ts │ ├── time.ts │ ├── toast.ts │ ├── upload.ts │ └── url.ts ├── build_web.sh ├── lerna.json ├── package.json ├── packages ├── actions │ ├── .github │ │ └── workflows │ │ │ ├── main.yml │ │ │ └── size.yml │ ├── .gitignore │ ├── .npmrc │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── jest.config.js │ ├── package.json │ ├── src │ │ ├── actions │ │ │ ├── call.ts │ │ │ ├── format.ts │ │ │ ├── handlebars.ts │ │ │ ├── http.ts │ │ │ ├── index.ts │ │ │ ├── pkData.ts │ │ │ └── table.ts │ │ ├── index.ts │ │ ├── runner │ │ │ ├── Background.ts │ │ │ └── index.ts │ │ ├── typing │ │ │ ├── IAction.ts │ │ │ ├── IRunner.ts │ │ │ └── index.ts │ │ └── utils │ │ │ ├── expr-eval.ts │ │ │ ├── handlebars.ts │ │ │ ├── index.ts │ │ │ ├── matrix.ts │ │ │ └── replace.ts │ ├── test │ │ ├── actions │ │ │ ├── call.test.ts │ │ │ ├── fetch.test.ts │ │ │ └── format.test.ts │ │ ├── data │ │ │ └── index.ts │ │ ├── export.ts │ │ ├── export.yml │ │ ├── if_check.yml │ │ ├── index.test.ts │ │ ├── mock │ │ │ ├── Mock.ts │ │ │ └── MockDatabase.ts │ │ └── utils │ │ │ ├── expr-eval.test.ts │ │ │ ├── matrix.test.ts │ │ │ └── replace.test.ts │ └── tsconfig.json ├── bridge │ ├── .gitignore │ ├── .npmignore │ ├── CHANGELOG.md │ ├── LICENSE │ ├── package.json │ ├── readme.md │ ├── src │ │ ├── base.ts │ │ ├── bridges │ │ │ ├── DomBridge.ts │ │ │ ├── ExtensionBridge.ts │ │ │ ├── ExtensionImBridge.ts │ │ │ ├── IndexedDBBridge.ts │ │ │ ├── ServiceWorkerBridge.ts │ │ │ └── common │ │ │ │ ├── BridgeBy.ts │ │ │ │ └── index.ts │ │ ├── index.ts │ │ └── utils.ts │ └── tsconfig.json ├── component │ ├── .gitignore │ ├── package.json │ ├── rollup.config.js │ ├── src │ │ ├── components.ts │ │ ├── components │ │ │ ├── CodeSnippet │ │ │ │ └── index.tsx │ │ │ ├── HOC.tsx │ │ │ ├── Highlight │ │ │ │ ├── highlight.ts │ │ │ │ └── index.tsx │ │ │ ├── LetMeKnow │ │ │ │ ├── confetti.ts │ │ │ │ ├── index.scss │ │ │ │ └── index.tsx │ │ │ ├── index.ts │ │ │ ├── readme.md │ │ │ └── tailwind.css │ │ ├── global.d.ts │ │ ├── index.ts │ │ ├── pagenote.ts │ │ ├── pagenote │ │ │ ├── index.ts │ │ │ └── readme.md │ │ ├── typing.ts │ │ ├── utils │ │ │ ├── css.ts │ │ │ └── webComponent.tsx │ │ └── webComponents.ts │ ├── tailwind.config.js │ └── tsconfig.json ├── obsidian │ ├── .github │ │ └── workflows │ │ │ ├── main.yml │ │ │ └── size.yml │ ├── .gitignore │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── package.json │ ├── src │ │ ├── index.ts │ │ └── util.ts │ ├── test │ │ ├── files │ │ │ ├── test.html │ │ │ ├── test.json │ │ │ ├── test.md │ │ │ ├── test.png │ │ │ └── test.svg │ │ ├── obsidian.test.ts │ │ └── utils.test.ts │ └── tsconfig.json ├── sdk │ ├── .babelrc.json │ ├── .gitignore │ ├── .npmrc │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── changelog.md │ ├── dev │ │ ├── dev.html │ │ ├── index.js │ │ ├── readme.md │ │ └── yuque.html │ ├── dist │ │ ├── 5.3.0 │ │ │ ├── pagenote.css │ │ │ ├── pagenote.js │ │ │ ├── pagenote.js.LICENSE.txt │ │ │ └── pagenote.js.map │ │ ├── 5.3.11 │ │ │ ├── pagenote.css │ │ │ ├── pagenote.js │ │ │ ├── pagenote.js.LICENSE.txt │ │ │ └── pagenote.js.map │ │ ├── 5.3.12 │ │ │ ├── pagenote.css │ │ │ ├── pagenote.js │ │ │ ├── pagenote.js.LICENSE.txt │ │ │ └── pagenote.js.map │ │ ├── 5.3.13 │ │ │ ├── pagenote.css │ │ │ ├── pagenote.js │ │ │ ├── pagenote.js.LICENSE.txt │ │ │ └── pagenote.js.map │ │ ├── 5.3.3 │ │ │ ├── pagenote.css │ │ │ ├── pagenote.js │ │ │ ├── pagenote.js.LICENSE.txt │ │ │ └── pagenote.js.map │ │ ├── 5.3.4 │ │ │ ├── pagenote.css │ │ │ ├── pagenote.js │ │ │ ├── pagenote.js.LICENSE.txt │ │ │ └── pagenote.js.map │ │ ├── 5.3.6 │ │ │ ├── pagenote.css │ │ │ ├── pagenote.js │ │ │ ├── pagenote.js.LICENSE.txt │ │ │ └── pagenote.js.map │ │ ├── 5.3.8 │ │ │ ├── pagenote.css │ │ │ ├── pagenote.js │ │ │ ├── pagenote.js.LICENSE.txt │ │ │ └── pagenote.js.map │ │ ├── 5.4.5 │ │ │ ├── pagenote.css │ │ │ ├── pagenote.js │ │ │ ├── pagenote.js.LICENSE.txt │ │ │ └── pagenote.js.map │ │ └── 5.4.7 │ │ │ ├── pagenote.css │ │ │ ├── pagenote.js │ │ │ ├── pagenote.js.LICENSE.txt │ │ │ └── pagenote.js.map │ ├── package.json │ ├── src │ │ ├── README.MD │ │ ├── action │ │ │ ├── ActionBars.js │ │ │ └── action-bar.scss │ │ ├── annotationEditor.js │ │ ├── assets │ │ │ ├── iconfont │ │ │ │ └── icon.css │ │ │ ├── images │ │ │ │ ├── color.svg │ │ │ │ ├── comment.svg │ │ │ │ ├── copy.svg │ │ │ │ ├── delete.svg │ │ │ │ ├── expand.svg │ │ │ │ ├── highlight.svg │ │ │ │ ├── image.svg │ │ │ │ ├── inject.svg │ │ │ │ ├── light.svg │ │ │ │ ├── link.svg │ │ │ │ ├── mask.svg │ │ │ │ ├── more-action.svg │ │ │ │ ├── more.svg │ │ │ │ ├── next.svg │ │ │ │ ├── note.svg │ │ │ │ ├── pin.svg │ │ │ │ ├── remove.svg │ │ │ │ ├── tag.svg │ │ │ │ ├── tag2.svg │ │ │ │ ├── text.svg │ │ │ │ └── toggle.svg │ │ │ └── styles │ │ │ │ ├── animation.scss │ │ │ │ ├── camera.scss │ │ │ │ ├── editor.scss │ │ │ │ ├── modal.scss │ │ │ │ ├── normal.scss │ │ │ │ ├── print.scss │ │ │ │ └── variable.scss │ │ ├── common │ │ │ ├── Pconsole.ts │ │ │ ├── data.js │ │ │ ├── export │ │ │ │ ├── convert.ts │ │ │ │ ├── exports.ts │ │ │ │ └── templates.ts │ │ │ └── readme.md │ │ ├── component │ │ │ ├── Colors.js │ │ │ ├── LightActionBar.js │ │ │ ├── aside │ │ │ │ ├── AsideBar.js │ │ │ │ ├── DropLabel.js │ │ │ │ ├── LightIcon.js │ │ │ │ ├── LightRefAnotation.js │ │ │ │ ├── LightRefAnotation.scss │ │ │ │ ├── ScrollProgress.js │ │ │ │ ├── Tags.js │ │ │ │ ├── aside.scss │ │ │ │ ├── droplabel.module.scss │ │ │ │ ├── lightIcon.scss │ │ │ │ ├── scroll-progress.scss │ │ │ │ └── tags.less │ │ │ ├── common │ │ │ │ └── modal.js │ │ │ ├── light │ │ │ │ ├── annotation.scss │ │ │ │ └── light-node.scss │ │ │ ├── pagnote-modal.js │ │ │ └── tip │ │ │ │ ├── Popover.js │ │ │ │ ├── Tip.js │ │ │ │ ├── base.less │ │ │ │ ├── popover.less │ │ │ │ └── tip.less │ │ ├── const.js │ │ ├── documents │ │ │ ├── annotationMenu.scss │ │ │ └── annotationMenus.js │ │ ├── light-menu.js │ │ ├── locale │ │ │ ├── de.json │ │ │ ├── en.json │ │ │ ├── i18n.js │ │ │ ├── jp.json │ │ │ ├── kr.json │ │ │ ├── readme.md │ │ │ ├── ru.json │ │ │ └── zh_CN.json │ │ ├── pagenote-core.js │ │ ├── pagenote-step.tsx │ │ ├── pagenote.js │ │ ├── pagenote.option.d.ts │ │ ├── step │ │ │ ├── const.ts │ │ │ ├── step-connectToKeywordTag.ts │ │ │ ├── step-gotoView.ts │ │ │ ├── step-initAnnotation.ts │ │ │ └── step-initKeywordTags.ts │ │ └── utils │ │ │ ├── canvas2image.js │ │ │ ├── console.ts │ │ │ ├── data.js │ │ │ ├── debug.js │ │ │ ├── document.js │ │ │ ├── highlight.ts │ │ │ ├── image-clipboard.js │ │ │ ├── index.js │ │ │ ├── light.js │ │ │ ├── modal.js │ │ │ └── notification.ts │ ├── tsconfig-cjs.json │ ├── tsconfig.json │ ├── webpack.common.js │ ├── webpack.dev.js │ └── webpack.prod.js ├── shared │ ├── .gitignore │ ├── .mocharc.json │ ├── .npmignore │ ├── CHANGELOG.md │ ├── LICENSE │ ├── package.json │ ├── readme.md │ ├── src │ │ ├── @types │ │ │ ├── common.ts │ │ │ ├── data.ts │ │ │ ├── database.ts │ │ │ ├── utils.ts │ │ │ └── webdav.ts │ │ ├── extApi.ts │ │ ├── global.d.ts │ │ ├── icons │ │ │ └── index.ts │ │ ├── index.ts │ │ ├── library │ │ │ ├── DirDatabaseTable.ts │ │ │ ├── cache.ts │ │ │ ├── image.ts │ │ │ ├── localFileSystem.ts │ │ │ ├── schedule.ts │ │ │ └── toast.ts │ │ ├── models │ │ │ └── WebPageItem.ts │ │ ├── pagenote-actions │ │ │ ├── @types │ │ │ │ └── index.ts │ │ │ ├── copy.ts │ │ │ ├── create_new_light.ts │ │ │ ├── custom.ts │ │ │ ├── fetch.ts │ │ │ ├── index.ts │ │ │ ├── readme.md │ │ │ ├── search.ts │ │ │ ├── send_to_email.ts │ │ │ └── send_to_flomo.ts │ │ ├── pagenote-api │ │ │ ├── core.ts │ │ │ ├── extension.ts │ │ │ ├── index.ts │ │ │ └── web.ts │ │ ├── pagenote-appstores │ │ │ └── index.ts │ │ ├── pagenote-brush │ │ │ └── index.ts │ │ ├── pagenote-config │ │ │ └── utils.ts │ │ ├── pagenote-constant │ │ │ └── index.ts │ │ ├── pagenote-convert │ │ │ ├── index.ts │ │ │ ├── predefined.ts │ │ │ └── util.ts │ │ ├── pagenote-fetch │ │ │ └── readme.md │ │ ├── pagenote-light │ │ │ └── util.ts │ │ ├── pagenote-setting │ │ │ └── uitl.ts │ │ ├── pagenote-utils │ │ │ ├── meta.ts │ │ │ ├── sdk-communication.ts │ │ │ └── share-pagenote.ts │ │ └── utils │ │ │ ├── browser.ts │ │ │ ├── code.ts │ │ │ ├── day.ts │ │ │ ├── document.ts │ │ │ ├── filter.ts │ │ │ ├── history.ts │ │ │ ├── text.ts │ │ │ └── window.ts │ ├── test │ │ └── bdd │ │ │ ├── brush.test.ts │ │ │ └── code.test.ts │ └── tsconfig.json ├── sync │ ├── .github │ │ └── workflows │ │ │ ├── main.yml │ │ │ └── size.yml │ ├── .gitignore │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── package.json │ ├── src │ │ ├── database │ │ │ ├── const.ts │ │ │ ├── index.ts │ │ │ ├── readme.md │ │ │ ├── syncStrategy.ts │ │ │ ├── typing.ts │ │ │ └── utils.ts │ │ ├── ftp │ │ │ └── SyncFile.ts │ │ ├── git-like │ │ │ └── git.ts │ │ ├── index.ts │ │ └── utils │ │ │ ├── index.ts │ │ │ └── pick.ts │ ├── test │ │ ├── fileSync.test.ts │ │ ├── mock │ │ │ ├── FileClient.ts │ │ │ └── client.ts │ │ ├── pick.test.ts │ │ └── syncStrategy.test.ts │ └── tsconfig.json └── web-components │ ├── .dumirc.ts │ ├── .editorconfig │ ├── .eslintrc.js │ ├── .fatherrc.ts │ ├── .gitignore │ ├── .prettierignore │ ├── .prettierrc.js │ ├── .stylelintrc │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── package.json │ ├── postcss.config.js │ ├── src │ ├── .editorconfig │ ├── Card │ │ └── KeywordCard.tsx │ ├── Demo │ │ ├── index.md │ │ ├── index.scss │ │ └── index.tsx │ ├── Foo │ │ ├── index.md │ │ └── index.tsx │ ├── HOC.tsx │ ├── Keyword │ │ ├── index.md │ │ ├── index.scss │ │ └── index.tsx │ ├── LetMeKnow │ │ ├── index.md │ │ ├── index.scss │ │ └── index.tsx │ ├── Markdown │ │ └── index.tsx │ ├── Popup │ │ ├── index.md │ │ └── index.tsx │ ├── WebContainer │ │ ├── index.md │ │ ├── index.scss │ │ └── index.tsx │ ├── globals.d.ts │ ├── index.ts │ ├── index.wc.ts │ ├── service │ │ └── request.ts │ ├── tailwind.css │ └── utils │ │ ├── focus.ts │ │ ├── position.ts │ │ └── webComponent.tsx │ ├── tailwind.config.js │ └── tsconfig.json ├── readme.md ├── snapshots └── pagenote.gif └── yarn.lock /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | custom: https://pagenote.cn/donation 4 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | canvas_binary_host_mirror=https://registry.npmmirror.com/-/binary/canvas 2 | sass_binary_site=http://cdn.npm.taobao.org/dist/node-sass 3 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "nuxt.isNuxtApp": false 3 | } -------------------------------------------------------------------------------- /apps/example/.gitignore: -------------------------------------------------------------------------------- 1 | dist -------------------------------------------------------------------------------- /apps/example/action.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Title 6 | 7 | 8 |
9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /apps/example/bridge.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Title 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /apps/example/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | web components 6 | 7 | 8 | 9 | 10 |

web component

11 |
12 | 13 | 14 |
15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /apps/example/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "example", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "author": "rowthan", 6 | "license": "MIT", 7 | "private": true, 8 | "scripts": { 9 | "dev": "parcel ./*.html", 10 | "test":"echo 'skip'" 11 | }, 12 | "dependencies": { 13 | "@pagenote/component":"1.0.0", 14 | "@pagenote/shared":"^1.14.36-next.1", 15 | "@pagenote/actions":"^0.1.1-next.2", 16 | "@pagenote/bridge": "^1.0.18-next.0" 17 | }, 18 | "devDependencies": { 19 | "parcel": "^2.11.0" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /apps/example/src/component.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import {createRoot} from 'react-dom/client'; 3 | import '@pagenote/component' 4 | import {LetMeKnow,Highlight} from '@pagenote/component' 5 | 6 | const rootElement = document.getElementById('root'); 7 | const App = () => { 8 | return ( 9 |
10 | 11 | 12 | 内容

h2

13 |
14 |
15 | ); 16 | }; 17 | 18 | 19 | export default function init(){ 20 | const root = createRoot(rootElement!) 21 | root.render(); 22 | } 23 | -------------------------------------------------------------------------------- /apps/example/src/index.ts: -------------------------------------------------------------------------------- 1 | 2 | import init from './component'; 3 | 4 | init(); -------------------------------------------------------------------------------- /apps/web/.env: -------------------------------------------------------------------------------- 1 | API_HOST=https://api.pagenote.cn 2 | WEB_HOST=https://pagenote.cn 3 | -------------------------------------------------------------------------------- /apps/web/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "next", 4 | "next/core-web-vitals", 5 | "prettier", 6 | "plugin:@next/next/recommended" 7 | ], 8 | "rules": { 9 | "@next/next/no-img-element": "off", 10 | "react-hooks/exhaustive-deps": "off", 11 | "@next/next/no-sync-scripts": "off" 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /apps/web/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # next.js 12 | /.next/ 13 | /out/ 14 | 15 | # production 16 | /build 17 | 18 | # misc 19 | .DS_Store 20 | *.pem 21 | 22 | # debug 23 | npm-debug.log* 24 | yarn-debug.log* 25 | yarn-error.log* 26 | .pnpm-debug.log* 27 | pnpm-lock.yaml 28 | 29 | # local env files 30 | .env*.local 31 | .env.development 32 | 33 | # vercel 34 | .vercel 35 | 36 | # typescript 37 | *.tsbuildinfo 38 | next-env.d.ts 39 | 40 | .idea 41 | .local 42 | 43 | package-lock.json 44 | yarn.lock 45 | 46 | _pages 47 | -------------------------------------------------------------------------------- /apps/web/.husky/pre-commit: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | . "$(dirname -- "$0")/_/husky.sh" 3 | 4 | npm run lint-staged 5 | -------------------------------------------------------------------------------- /apps/web/.lintstagedrc.js: -------------------------------------------------------------------------------- 1 | const path = require('path') 2 | 3 | const buildEslintCommand = (filenames) => 4 | `next lint --fix --file ${filenames 5 | .map((f) => path.relative(process.cwd(), f)) 6 | .join(' --file ')}` 7 | 8 | module.exports = { 9 | '*.{js,jsx,ts,tsx}': [buildEslintCommand], 10 | } 11 | -------------------------------------------------------------------------------- /apps/web/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "trailingComma": "es5", 3 | "tabWidth": 2, 4 | "semi": false, 5 | "singleQuote": true, 6 | "end-of-line": "lf" 7 | } 8 | -------------------------------------------------------------------------------- /apps/web/@/components/ui/input.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react" 2 | 3 | import {cn} from "@/utils" 4 | 5 | export interface InputProps 6 | extends React.InputHTMLAttributes { 7 | } 8 | 9 | const Input = React.forwardRef( 10 | ({className, type, ...props}, ref) => { 11 | return ( 12 | 21 | ) 22 | } 23 | ) 24 | Input.displayName = "Input" 25 | 26 | export {Input} 27 | -------------------------------------------------------------------------------- /apps/web/@/components/ui/label.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react" 2 | import * as LabelPrimitive from "@radix-ui/react-label" 3 | import {cva, type VariantProps} from "class-variance-authority" 4 | 5 | import {cn} from "@/utils" 6 | 7 | const labelVariants = cva( 8 | "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70" 9 | ) 10 | 11 | const Label = React.forwardRef< 12 | React.ElementRef, 13 | React.ComponentPropsWithoutRef & 14 | VariantProps 15 | >(({className, ...props}, ref) => ( 16 | 21 | )) 22 | Label.displayName = LabelPrimitive.Root.displayName 23 | 24 | export {Label} 25 | -------------------------------------------------------------------------------- /apps/web/@/components/ui/separator.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react" 2 | import * as SeparatorPrimitive from "@radix-ui/react-separator" 3 | 4 | import {cn} from "@/utils" 5 | 6 | const Separator = React.forwardRef< 7 | React.ElementRef, 8 | React.ComponentPropsWithoutRef 9 | >( 10 | ( 11 | {className, orientation = "horizontal", decorative = true, ...props}, 12 | ref 13 | ) => ( 14 | 25 | ) 26 | ) 27 | Separator.displayName = SeparatorPrimitive.Root.displayName 28 | 29 | export {Separator} 30 | -------------------------------------------------------------------------------- /apps/web/@/components/ui/textarea.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react" 2 | 3 | import { cn } from "@/utils" 4 | 5 | export interface TextareaProps 6 | extends React.TextareaHTMLAttributes {} 7 | 8 | const Textarea = React.forwardRef( 9 | ({ className, ...props }, ref) => { 10 | return ( 11 |