├── .babelrc ├── .eslintrc ├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md └── workflows │ └── publish-github-release.yml ├── .gitignore ├── .node-version ├── LICENSE.md ├── README.md ├── TODO.md ├── build ├── common.js ├── electron.js ├── extension.js ├── web.js └── xcode │ └── Save to Raindrop.io │ ├── App │ ├── App.entitlements │ ├── AppDelegate.swift │ ├── Assets.xcassets │ │ ├── AccentColor.colorset │ │ │ └── Contents.json │ │ ├── AppIcon.appiconset │ │ │ ├── Contents.json │ │ │ ├── icon_16.png │ │ │ ├── icon_32.png │ │ │ ├── safari_1024.png │ │ │ ├── safari_128.png │ │ │ ├── safari_256 1.png │ │ │ ├── safari_256.png │ │ │ ├── safari_32.png │ │ │ ├── safari_512 1.png │ │ │ ├── safari_512.png │ │ │ └── safari_64.png │ │ ├── Brand.imageset │ │ │ ├── Contents.json │ │ │ ├── icon_128.png │ │ │ ├── icon_256.png │ │ │ └── icon_384.png │ │ ├── Contents.json │ │ ├── Pro │ │ │ ├── Contents.json │ │ │ └── ProArt.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── Group 4.png │ │ │ │ ├── Group 4@2x.png │ │ │ │ └── Group 4@3x.png │ │ └── Welcome │ │ │ ├── Browse.imageset │ │ │ ├── Artboard.png │ │ │ ├── Artboard@2x.png │ │ │ ├── Artboard@3x.png │ │ │ └── Contents.json │ │ │ └── Contents.json │ ├── Base.lproj │ │ └── Main.storyboard │ ├── Info.plist │ ├── SubscribeViewController.swift │ ├── WelcomeViewController.swift │ ├── WindowController.swift │ └── readme.md │ ├── Extension │ ├── Extension.entitlements │ ├── Info.plist │ └── SafariWebExtensionHandler.swift │ ├── Save to Raindrop.io.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ ├── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ │ └── xcuserdata │ │ │ └── exentrich.xcuserdatad │ │ │ └── UserInterfaceState.xcuserstate │ ├── xcshareddata │ │ └── xcschemes │ │ │ ├── App.xcscheme │ │ │ └── Extension.xcscheme │ └── xcuserdata │ │ └── exentrich.xcuserdatad │ │ └── xcschemes │ │ └── xcschememanagement.plist │ └── version.sh ├── functions ├── account │ └── login.js └── pb │ ├── api │ └── event.js │ ├── hash.js.js │ └── site.js.js ├── jsconfig.json ├── now.json ├── package-lock.json ├── package.json ├── src ├── assets │ ├── _headers │ ├── _redirects │ ├── brand │ │ ├── favicon.ico │ │ ├── icon_128.png │ │ ├── icon_16.png │ │ ├── icon_180.png │ │ ├── icon_32.png │ │ ├── icon_48.png │ │ ├── icon_512.png │ │ ├── icon_64.png │ │ ├── icon_raw.svg │ │ ├── macos_512.png │ │ ├── maskable_512.png │ │ └── og.png │ ├── icons │ │ ├── add.svg │ │ ├── add_active.svg │ │ ├── add_tabs.svg │ │ ├── ai.svg │ │ ├── ai_active.svg │ │ ├── alfred.svg │ │ ├── android.svg │ │ ├── android_active.svg │ │ ├── apple.svg │ │ ├── arrow.svg │ │ ├── arrow_alt.svg │ │ ├── article.svg │ │ ├── article_active.svg │ │ ├── audio.svg │ │ ├── back.svg │ │ ├── blank.svg │ │ ├── book.svg │ │ ├── broken.svg │ │ ├── broken_active.svg │ │ ├── cache_failed.svg │ │ ├── cache_ready.svg │ │ ├── cache_retry.svg │ │ ├── calendar.svg │ │ ├── check.svg │ │ ├── check_active.svg │ │ ├── clear.svg │ │ ├── click.svg │ │ ├── close.svg │ │ ├── cloud.svg │ │ ├── cloud_active.svg │ │ ├── day.svg │ │ ├── default_collection.svg │ │ ├── default_collection_active.svg │ │ ├── dev.svg │ │ ├── dev_active.svg │ │ ├── diamond.svg │ │ ├── diamond_active.svg │ │ ├── document.svg │ │ ├── download.svg │ │ ├── dropbox.svg │ │ ├── dropbox_active.svg │ │ ├── duplicates.svg │ │ ├── duplicates_active.svg │ │ ├── edit.svg │ │ ├── edit_active.svg │ │ ├── exit.svg │ │ ├── export.svg │ │ ├── export_active.svg │ │ ├── extension.svg │ │ ├── extension_active.svg │ │ ├── facebook.svg │ │ ├── fonts.svg │ │ ├── fonts_active.svg │ │ ├── fullscreen.svg │ │ ├── fullscreen_active.svg │ │ ├── gdrive.svg │ │ ├── gdrive_active.svg │ │ ├── github.svg │ │ ├── google.svg │ │ ├── help.svg │ │ ├── hide.svg │ │ ├── highlights.svg │ │ ├── history.svg │ │ ├── history_active.svg │ │ ├── hotkey.svg │ │ ├── ifttt.svg │ │ ├── image.svg │ │ ├── image_active.svg │ │ ├── import.svg │ │ ├── import_active.svg │ │ ├── inbox.svg │ │ ├── inbox_active.svg │ │ ├── info.svg │ │ ├── install.svg │ │ ├── install_active.svg │ │ ├── integrations.svg │ │ ├── integrations_active.svg │ │ ├── like.svg │ │ ├── like_active.svg │ │ ├── like_outline.svg │ │ ├── link.svg │ │ ├── link_active.svg │ │ ├── lock.svg │ │ ├── markdown.svg │ │ ├── menu.svg │ │ ├── micro_add.svg │ │ ├── micro_ai.svg │ │ ├── micro_arrow.svg │ │ ├── micro_article.svg │ │ ├── micro_audio.svg │ │ ├── micro_book.svg │ │ ├── micro_broken.svg │ │ ├── micro_cache_failed.svg │ │ ├── micro_calendar.svg │ │ ├── micro_close.svg │ │ ├── micro_cloud.svg │ │ ├── micro_colapse.svg │ │ ├── micro_comment.svg │ │ ├── micro_document.svg │ │ ├── micro_download.svg │ │ ├── micro_duplicate.svg │ │ ├── micro_edit.svg │ │ ├── micro_expand.svg │ │ ├── micro_image.svg │ │ ├── micro_important.svg │ │ ├── micro_important_active.svg │ │ ├── micro_link.svg │ │ ├── micro_list.svg │ │ ├── micro_next.svg │ │ ├── micro_open.svg │ │ ├── micro_progress.svg │ │ ├── micro_public.svg │ │ ├── micro_reminder.svg │ │ ├── micro_screenshot.svg │ │ ├── micro_search.svg │ │ ├── micro_tag.svg │ │ ├── micro_tune.svg │ │ ├── micro_user.svg │ │ ├── micro_video.svg │ │ ├── more.svg │ │ ├── more_horizontal.svg │ │ ├── move_to.svg │ │ ├── move_to_active.svg │ │ ├── new_bookmark.svg │ │ ├── new_collection.svg │ │ ├── new_collection_active.svg │ │ ├── next.svg │ │ ├── night.svg │ │ ├── note.svg │ │ ├── open.svg │ │ ├── public.svg │ │ ├── public_active.svg │ │ ├── raindrop_logo.svg │ │ ├── readwise.svg │ │ ├── refresh.svg │ │ ├── reminder.svg │ │ ├── reminder_active.svg │ │ ├── reminder_add.svg │ │ ├── rss.svg │ │ ├── search.svg │ │ ├── select_all.svg │ │ ├── select_none.svg │ │ ├── settings.svg │ │ ├── settings_active.svg │ │ ├── share.svg │ │ ├── sharing.svg │ │ ├── sharing_active.svg │ │ ├── show.svg │ │ ├── show_active.svg │ │ ├── sidebar.svg │ │ ├── sidebar_alt.svg │ │ ├── sidebar_alt_active.svg │ │ ├── slack.svg │ │ ├── sort_+lastUpdate.svg │ │ ├── sort_+lastUpdate_active.svg │ │ ├── sort_-created.svg │ │ ├── sort_-created_active.svg │ │ ├── sort_-domain.svg │ │ ├── sort_-domain_active.svg │ │ ├── sort_-lastUpdate.svg │ │ ├── sort_-lastUpdate_active.svg │ │ ├── sort_-title.svg │ │ ├── sort_-title_active.svg │ │ ├── sort_created.svg │ │ ├── sort_created_active.svg │ │ ├── sort_domain.svg │ │ ├── sort_domain_active.svg │ │ ├── sort_rating.svg │ │ ├── sort_rating_active.svg │ │ ├── sort_score.svg │ │ ├── sort_score_active.svg │ │ ├── sort_sort.svg │ │ ├── sort_sort_active.svg │ │ ├── sort_title.svg │ │ ├── sort_title_active.svg │ │ ├── tag.svg │ │ ├── tag_active.svg │ │ ├── trash.svg │ │ ├── trash_active.svg │ │ ├── twitter.svg │ │ ├── twitter_outline.svg │ │ ├── type.svg │ │ ├── upload.svg │ │ ├── upload_active.svg │ │ ├── user.svg │ │ ├── user_active.svg │ │ ├── video.svg │ │ ├── video_active.svg │ │ ├── view_grid.svg │ │ ├── view_grid_active.svg │ │ ├── view_list.svg │ │ ├── view_masonry.svg │ │ ├── view_simple.svg │ │ ├── vkontakte.svg │ │ ├── web.svg │ │ ├── web_active.svg │ │ └── youtube.svg │ ├── languages │ │ ├── da.json │ │ ├── de.json │ │ ├── en.json │ │ ├── es.json │ │ ├── fi.json │ │ ├── fr.json │ │ ├── hi.json │ │ ├── index.json │ │ ├── it.json │ │ ├── ja.json │ │ ├── ko.json │ │ ├── nl.json │ │ ├── pl.json │ │ ├── pt_BR.json │ │ ├── ru.json │ │ ├── sv.json │ │ ├── tr.json │ │ ├── zh-Hans.json │ │ └── zh-Hant.json │ ├── robots.txt │ ├── sw.js │ └── target │ │ └── extension │ │ ├── action_chrome_16.png │ │ ├── action_chrome_24.png │ │ ├── action_chrome_32.png │ │ ├── action_firefox_dark_16.png │ │ ├── action_firefox_dark_24.png │ │ ├── action_firefox_dark_32.png │ │ ├── action_firefox_light_16.png │ │ ├── action_firefox_light_24.png │ │ ├── action_firefox_light_32.png │ │ ├── action_in_iframe.html │ │ ├── action_in_iframe.js │ │ ├── action_safari.png │ │ ├── action_safari_16.png │ │ ├── action_safari_19.png │ │ ├── action_safari_32.png │ │ ├── action_safari_38.png │ │ └── welcome │ │ ├── index.html │ │ ├── logic.js │ │ ├── logo-icon.webp │ │ ├── modern-normalize.css │ │ ├── screen-highlights.webp │ │ ├── screen-save.webp │ │ ├── screen-search.webp │ │ ├── screen-sidepanel.webp │ │ └── style.css ├── co │ ├── bookmarks │ │ ├── add │ │ │ ├── extension │ │ │ │ ├── highlights │ │ │ │ │ └── index.js │ │ │ │ ├── index.js │ │ │ │ ├── more.js │ │ │ │ ├── tab │ │ │ │ │ ├── button.js │ │ │ │ │ ├── button.module.styl │ │ │ │ │ ├── index.js │ │ │ │ │ └── permission.js │ │ │ │ └── tabs │ │ │ │ │ └── index.js │ │ │ ├── fallback │ │ │ │ ├── file.js │ │ │ │ ├── index.js │ │ │ │ ├── link.js │ │ │ │ └── link.module.css │ │ │ └── index.js │ │ ├── container │ │ │ ├── index.js │ │ │ ├── scroll.js │ │ │ ├── scroll.module.styl │ │ │ ├── wrap.js │ │ │ └── wrap.module.styl │ │ ├── dnd │ │ │ ├── drag │ │ │ │ └── item.js │ │ │ └── drop.js │ │ ├── edit │ │ │ ├── crash.js │ │ │ ├── form │ │ │ │ ├── action │ │ │ │ │ ├── index.js │ │ │ │ │ └── main.js │ │ │ │ ├── collection │ │ │ │ │ ├── index.js │ │ │ │ │ ├── suggested.js │ │ │ │ │ └── suggested.module.styl │ │ │ │ ├── cover.js │ │ │ │ ├── cover.module.styl │ │ │ │ ├── date.js │ │ │ │ ├── important.js │ │ │ │ ├── index.js │ │ │ │ ├── index.module.styl │ │ │ │ ├── link.js │ │ │ │ ├── note.js │ │ │ │ ├── note.module.styl │ │ │ │ ├── reminder.js │ │ │ │ ├── tags │ │ │ │ │ ├── index.js │ │ │ │ │ ├── suggested.js │ │ │ │ │ └── suggested.module.styl │ │ │ │ └── title.js │ │ │ ├── index.js │ │ │ └── index.module.styl │ │ ├── export │ │ │ ├── button.js │ │ │ └── popover.js │ │ ├── footer │ │ │ ├── index.js │ │ │ └── index.module.styl │ │ ├── header │ │ │ ├── index.js │ │ │ ├── regular │ │ │ │ ├── icon.js │ │ │ │ ├── icon.module.styl │ │ │ │ ├── index.js │ │ │ │ ├── index.module.styl │ │ │ │ ├── more.js │ │ │ │ ├── open.js │ │ │ │ ├── rename.js │ │ │ │ ├── sort.js │ │ │ │ ├── title.js │ │ │ │ └── view │ │ │ │ │ ├── coverSize.js │ │ │ │ │ ├── index.js │ │ │ │ │ ├── menu.js │ │ │ │ │ └── show.js │ │ │ └── selectMode │ │ │ │ ├── addTags.js │ │ │ │ ├── cancel.js │ │ │ │ ├── checkbox.js │ │ │ │ ├── checkbox.module.styl │ │ │ │ ├── index.js │ │ │ │ ├── more.js │ │ │ │ ├── move.js │ │ │ │ ├── open.js │ │ │ │ ├── remove.js │ │ │ │ ├── title.js │ │ │ │ └── working.js │ │ ├── index.js │ │ ├── index.module.styl │ │ ├── item │ │ │ ├── actions.js │ │ │ ├── actions.module.styl │ │ │ ├── contextmenu.js │ │ │ ├── cover │ │ │ │ ├── index.js │ │ │ │ ├── size.js │ │ │ │ ├── view.js │ │ │ │ └── view.module.styl │ │ │ ├── highlights.js │ │ │ ├── highlights.module.styl │ │ │ ├── index.js │ │ │ ├── info │ │ │ │ ├── index.js │ │ │ │ ├── index.module.styl │ │ │ │ ├── path.js │ │ │ │ └── path.module.styl │ │ │ ├── reminder.js │ │ │ ├── reminder.module.styl │ │ │ ├── tags.js │ │ │ ├── tags.module.styl │ │ │ ├── view.js │ │ │ └── view.module.styl │ │ ├── items │ │ │ ├── empty │ │ │ │ ├── index.js │ │ │ │ ├── view.js │ │ │ │ └── view.module.styl │ │ │ ├── index.js │ │ │ ├── sortable │ │ │ │ ├── index.js │ │ │ │ └── index.module.styl │ │ │ └── view │ │ │ │ ├── grid.js │ │ │ │ ├── grid.module.styl │ │ │ │ ├── index.js │ │ │ │ ├── list.js │ │ │ │ ├── list.module.styl │ │ │ │ ├── masonry.js │ │ │ │ ├── masonry.module.styl │ │ │ │ ├── simple.js │ │ │ │ └── simple.module.styl │ │ └── openAll │ │ │ └── index.js │ ├── collections │ │ ├── changeIcon │ │ │ └── index.js │ │ ├── group │ │ │ ├── contextmenu.js │ │ │ ├── index.js │ │ │ ├── view.js │ │ │ └── view.module.styl │ │ ├── item │ │ │ ├── accentColor.js │ │ │ ├── blank.js │ │ │ ├── contextmenu.js │ │ │ ├── icon.js │ │ │ ├── index.js │ │ │ ├── rename.js │ │ │ ├── title.js │ │ │ ├── title.module.styl │ │ │ ├── view.js │ │ │ └── view.module.styl │ │ ├── items │ │ │ ├── empty.js │ │ │ ├── index.js │ │ │ ├── index.module.styl │ │ │ ├── selectMode.js │ │ │ ├── selectMode.module.styl │ │ │ ├── tree.js │ │ │ └── tree.module.styl │ │ ├── picker │ │ │ ├── index.js │ │ │ └── index.module.styl │ │ └── sharing │ │ │ ├── collaborators │ │ │ ├── index.js │ │ │ ├── invite │ │ │ │ ├── index.js │ │ │ │ └── view.js │ │ │ ├── user.js │ │ │ └── view.js │ │ │ ├── index.js │ │ │ ├── index.module.styl │ │ │ ├── public │ │ │ ├── customization.js │ │ │ ├── enable.js │ │ │ ├── footer.js │ │ │ ├── index.js │ │ │ └── link.js │ │ │ ├── tabs │ │ │ └── index.js │ │ │ └── title │ │ │ ├── index.js │ │ │ └── view.js │ ├── common │ │ ├── alert │ │ │ ├── index.js │ │ │ └── index.module.styl │ │ ├── button │ │ │ ├── index.js │ │ │ └── index.module.styl │ │ ├── footer │ │ │ ├── index.js │ │ │ └── index.module.styl │ │ ├── form │ │ │ ├── checkbox.js │ │ │ ├── checkbox.module.styl │ │ │ ├── date_time.js │ │ │ ├── date_time.module.styl │ │ │ ├── group.js │ │ │ ├── group.module.styl │ │ │ ├── index.js │ │ │ ├── label.js │ │ │ ├── label.module.styl │ │ │ ├── layout.js │ │ │ ├── layout.module.styl │ │ │ ├── progress.js │ │ │ ├── progress.module.styl │ │ │ ├── radio.js │ │ │ ├── radio.module.styl │ │ │ ├── range.js │ │ │ ├── range.module.styl │ │ │ ├── search.js │ │ │ ├── search.module.styl │ │ │ ├── separator.js │ │ │ ├── separator.module.styl │ │ │ ├── sub_label.js │ │ │ ├── sub_label.module.styl │ │ │ ├── text.js │ │ │ ├── text.module.styl │ │ │ ├── title.js │ │ │ ├── title.module.styl │ │ │ ├── toggle.js │ │ │ └── toggle.module.styl │ │ ├── header │ │ │ ├── index.js │ │ │ └── index.module.styl │ │ ├── icon │ │ │ ├── index.js │ │ │ └── index.module.styl │ │ ├── list │ │ │ ├── index.js │ │ │ ├── item.js │ │ │ ├── item.module.styl │ │ │ ├── section.js │ │ │ ├── section.module.styl │ │ │ ├── separator.js │ │ │ ├── separator.module.styl │ │ │ ├── wrap.js │ │ │ └── wrap.module.styl │ │ ├── preloader │ │ │ ├── index.js │ │ │ └── index.module.styl │ │ ├── safeHtml.js │ │ ├── safeMarkdown.js │ │ ├── select │ │ │ ├── index.js │ │ │ ├── multi │ │ │ │ ├── index.js │ │ │ │ └── index.module.styl │ │ │ └── single │ │ │ │ └── index.js │ │ ├── slider │ │ │ ├── index.js │ │ │ └── index.module.styl │ │ ├── superImg.js │ │ ├── superLink │ │ │ ├── index.js │ │ │ └── index.module.styl │ │ ├── superOverflow.js │ │ ├── tabs │ │ │ ├── index.js │ │ │ └── index.module.styl │ │ ├── webview │ │ │ ├── browser.js │ │ │ ├── browser.module.styl │ │ │ ├── electron.js │ │ │ ├── electron.module.styl │ │ │ ├── error.js │ │ │ ├── error.module.styl │ │ │ ├── index.js │ │ │ ├── index.module.styl │ │ │ ├── preloader.js │ │ │ └── preloader.module.styl │ │ └── withPause.js │ ├── filters │ │ ├── item │ │ │ ├── index.js │ │ │ ├── index.module.styl │ │ │ └── useItemInfo.js │ │ └── section │ │ │ ├── contextmenu.js │ │ │ ├── index.js │ │ │ ├── view.js │ │ │ └── view.module.styl │ ├── highlights │ │ ├── copy-button │ │ │ └── index.js │ │ ├── export-button │ │ │ └── index.js │ │ ├── item │ │ │ ├── color.js │ │ │ ├── color.module.styl │ │ │ ├── index.js │ │ │ ├── view.js │ │ │ └── view.module.styl │ │ ├── items │ │ │ ├── index.js │ │ │ ├── index.module.styl │ │ │ └── useScrollToNew.js │ │ ├── text │ │ │ ├── index.js │ │ │ └── index.module.styl │ │ └── useWithWebView │ │ │ ├── index.js │ │ │ └── messaging.js │ ├── overlay │ │ ├── dialog │ │ │ ├── index.js │ │ │ └── view │ │ │ │ ├── alert.js │ │ │ │ ├── alert.module.styl │ │ │ │ ├── confirm.js │ │ │ │ ├── confirm.module.styl │ │ │ │ ├── loading.js │ │ │ │ ├── loading.module.styl │ │ │ │ ├── prompt.js │ │ │ │ └── prompt.module.styl │ │ ├── modal │ │ │ ├── content.js │ │ │ ├── content.module.styl │ │ │ ├── context.js │ │ │ ├── header.js │ │ │ ├── header.module.styl │ │ │ ├── index.js │ │ │ └── index.module.styl │ │ └── popover │ │ │ ├── context.js │ │ │ ├── index.js │ │ │ ├── index.module.styl │ │ │ ├── menu │ │ │ ├── index.js │ │ │ ├── index.module.styl │ │ │ ├── item.js │ │ │ ├── item.module.styl │ │ │ ├── section.js │ │ │ ├── separator.js │ │ │ └── separator.module.styl │ │ │ └── more │ │ │ └── index.js │ ├── picker │ │ ├── file │ │ │ ├── base │ │ │ │ ├── index.js │ │ │ │ ├── progress.js │ │ │ │ └── progress.module.styl │ │ │ ├── drop │ │ │ │ ├── index.js │ │ │ │ └── module.js │ │ │ └── element │ │ │ │ └── index.js │ │ ├── icon │ │ │ ├── add.js │ │ │ ├── index.js │ │ │ ├── items.js │ │ │ ├── items.module.styl │ │ │ └── reset.js │ │ ├── image │ │ │ ├── index.js │ │ │ └── index.module.styl │ │ ├── link │ │ │ ├── index.js │ │ │ └── index.module.styl │ │ └── tags │ │ │ ├── index.js │ │ │ └── index.module.styl │ ├── screen │ │ ├── basic │ │ │ ├── header.js │ │ │ ├── index.js │ │ │ ├── index.module.css │ │ │ ├── size.module.css │ │ │ └── themes.module.css │ │ ├── error │ │ │ └── index.js │ │ └── splitview │ │ │ ├── helpers │ │ │ ├── small.js │ │ │ └── small.module.styl │ │ │ ├── index.js │ │ │ ├── index.module.styl │ │ │ ├── main │ │ │ ├── content.js │ │ │ ├── content.module.styl │ │ │ ├── footer.js │ │ │ ├── header.js │ │ │ ├── index.js │ │ │ └── index.module.styl │ │ │ ├── reader │ │ │ ├── content.js │ │ │ ├── content.module.styl │ │ │ ├── footer.js │ │ │ ├── header.js │ │ │ ├── index.js │ │ │ └── index.module.styl │ │ │ └── sidebar │ │ │ ├── backdrop.js │ │ │ ├── content.js │ │ │ ├── content.module.styl │ │ │ ├── footer.js │ │ │ ├── header.js │ │ │ ├── index.js │ │ │ ├── index.module.styl │ │ │ ├── resize.js │ │ │ └── resize.module.styl │ ├── search │ │ ├── field │ │ │ ├── index.js │ │ │ └── index.module.styl │ │ ├── form │ │ │ ├── index.js │ │ │ └── index.module.styl │ │ ├── index.js │ │ ├── menu │ │ │ ├── help │ │ │ │ ├── index.js │ │ │ │ └── index.module.styl │ │ │ ├── incollection │ │ │ │ └── index.js │ │ │ ├── index.js │ │ │ ├── recent │ │ │ │ ├── index.js │ │ │ │ ├── item.js │ │ │ │ ├── item.module.styl │ │ │ │ ├── section.js │ │ │ │ └── section.module.styl │ │ │ └── suggestions │ │ │ │ ├── index.js │ │ │ │ ├── tip.js │ │ │ │ └── tip.module.styl │ │ ├── useDownshift.js │ │ ├── useFilterValue.js │ │ ├── useMenuItems.js │ │ └── useSpaceId.js │ ├── tags │ │ ├── autocomplete │ │ │ ├── index.js │ │ │ └── index.module.styl │ │ ├── field │ │ │ └── index.js │ │ ├── item │ │ │ ├── contextmenu.js │ │ │ ├── icon.js │ │ │ ├── icon.module.styl │ │ │ ├── index.js │ │ │ ├── rename.js │ │ │ ├── view.js │ │ │ └── view.module.styl │ │ └── section │ │ │ ├── contextmenu.js │ │ │ ├── index.js │ │ │ ├── view.js │ │ │ └── view.module.styl │ ├── user │ │ ├── about │ │ │ ├── index.js │ │ │ └── index.module.styl │ │ ├── profile │ │ │ ├── button.js │ │ │ ├── index.js │ │ │ └── menu.js │ │ ├── upgrade │ │ │ ├── index.js │ │ │ └── index.module.styl │ │ └── withEdit.js │ └── virtual │ │ ├── helpers │ │ └── withAutoSize.js │ │ ├── lazy │ │ ├── dimension.js │ │ ├── index.js │ │ ├── item.js │ │ ├── item.module.css │ │ ├── readme.md │ │ └── visibility.js │ │ └── tree │ │ ├── index.js │ │ └── index.module.styl ├── config │ ├── csp.js │ ├── index.js │ ├── links.js │ └── vendors.js ├── data │ ├── README.md │ ├── TODO.md │ ├── actions │ │ ├── backups.js │ │ ├── bookmarks │ │ │ ├── draft.js │ │ │ ├── highlights.js │ │ │ ├── html.js │ │ │ ├── index.js │ │ │ ├── recent.js │ │ │ ├── selectMode.js │ │ │ ├── single.js │ │ │ └── space.js │ │ ├── collections.js │ │ ├── config.js │ │ ├── covers.js │ │ ├── filters.js │ │ ├── import.js │ │ ├── oauth.js │ │ ├── predictions.js │ │ ├── rate.js │ │ ├── tags.js │ │ └── user.js │ ├── constants │ │ ├── app.js │ │ ├── backups.js │ │ ├── bookmarks.js │ │ ├── collections.js │ │ ├── config.js │ │ ├── covers.js │ │ ├── filters.js │ │ ├── import.js │ │ ├── oauth.js │ │ ├── predictions.js │ │ ├── rate.js │ │ ├── tags.js │ │ └── user.js │ ├── helpers │ │ ├── bookmarks │ │ │ ├── blankSpace.js │ │ │ ├── getUrl.js │ │ │ ├── index.js │ │ │ ├── normalizeRecentSearch.js │ │ │ └── queryIsEqual.js │ │ ├── collections.js │ │ ├── colors.js │ │ ├── defaults.js │ │ ├── filters │ │ │ ├── blankSpace.js │ │ │ ├── index.js │ │ │ └── normalizeItems.js │ │ ├── oauth │ │ │ ├── blankClient.js │ │ │ ├── index.js │ │ │ └── normalizeClient.js │ │ ├── tags │ │ │ ├── blankSpace.js │ │ │ ├── index.js │ │ │ ├── normalizeTag.js │ │ │ └── normalizeTags.js │ │ └── user.js │ ├── index.js │ ├── modules │ │ ├── api.js │ │ ├── error.js │ │ ├── format │ │ │ ├── cache_url.js │ │ │ ├── domain.js │ │ │ ├── favicon.js │ │ │ ├── iframeable_url.js │ │ │ ├── screenshot.js │ │ │ ├── thumb.js │ │ │ └── url.js │ │ ├── persistConfig.js │ │ └── user │ │ │ └── isPro.js │ ├── reducers │ │ ├── backups.js │ │ ├── bookmarks │ │ │ ├── draft.js │ │ │ ├── highlights.js │ │ │ ├── html.js │ │ │ ├── index.js │ │ │ ├── recent.js │ │ │ ├── selectMode.js │ │ │ ├── single.js │ │ │ ├── sort.js │ │ │ ├── space.js │ │ │ └── utils.js │ │ ├── collections │ │ │ ├── defaults.js │ │ │ ├── drafts.js │ │ │ ├── groups.js │ │ │ ├── index.js │ │ │ ├── items.js │ │ │ ├── reorder.js │ │ │ ├── selectMode.js │ │ │ ├── sharing.js │ │ │ ├── single.js │ │ │ └── utils.js │ │ ├── config.js │ │ ├── covers.js │ │ ├── filters.js │ │ ├── import.js │ │ ├── index.js │ │ ├── notes.md │ │ ├── oauth.js │ │ ├── predictions.js │ │ ├── rate.js │ │ ├── tags │ │ │ ├── index.js │ │ │ ├── items.js │ │ │ ├── recent.js │ │ │ └── single.js │ │ └── user.js │ ├── sagas │ │ ├── backups.js │ │ ├── bookmarks │ │ │ ├── draft.js │ │ │ ├── highlights.js │ │ │ ├── html.js │ │ │ ├── index.js │ │ │ ├── recent.js │ │ │ ├── selectMode.js │ │ │ ├── single.js │ │ │ └── space.js │ │ ├── collections │ │ │ ├── drafts.js │ │ │ ├── groups.js │ │ │ ├── index.js │ │ │ ├── items.js │ │ │ ├── selectMode.js │ │ │ ├── sharing.js │ │ │ └── single.js │ │ ├── common.js │ │ ├── config.js │ │ ├── covers.js │ │ ├── filters.js │ │ ├── import.js │ │ ├── index.js │ │ ├── oauth.js │ │ ├── predictions.js │ │ ├── tags │ │ │ ├── index.js │ │ │ ├── items.js │ │ │ ├── recent.js │ │ │ └── single.js │ │ └── user.js │ ├── selectors │ │ ├── bookmarks │ │ │ ├── draft.js │ │ │ ├── html.js │ │ │ ├── index.js │ │ │ ├── selectMode.js │ │ │ ├── single.js │ │ │ └── space.js │ │ ├── collections │ │ │ ├── drafts.js │ │ │ ├── groups.js │ │ │ ├── index.js │ │ │ ├── items.js │ │ │ ├── selectMode.js │ │ │ ├── sharing.js │ │ │ └── single.js │ │ ├── filters │ │ │ ├── index.js │ │ │ ├── items.js │ │ │ └── search.js │ │ ├── oauth │ │ │ ├── connections.js │ │ │ ├── index.js │ │ │ └── my.js │ │ ├── search │ │ │ ├── collections.js │ │ │ ├── index.js │ │ │ ├── options.js │ │ │ ├── recent.js │ │ │ └── suggestions.js │ │ ├── tags │ │ │ ├── autocomplete.js │ │ │ ├── index.js │ │ │ ├── items.js │ │ │ └── search.js │ │ └── user.js │ └── utils │ │ ├── authStatus.js │ │ └── wrapFunc.js ├── index.ejs ├── index.js ├── local │ ├── actions │ │ ├── app.js │ │ ├── index.js │ │ └── pause.js │ ├── constants │ │ ├── app.js │ │ ├── index.js │ │ └── pause.js │ └── reducers │ │ ├── app.js │ │ ├── index.js │ │ └── pause.js ├── modules │ ├── browser │ │ ├── copyText.js │ │ ├── eventOrder.js │ │ ├── index.js │ │ ├── resizeObserver.js │ │ └── scrollbarIsObtrusive.js │ ├── format │ │ ├── callback │ │ │ ├── debounce.js │ │ │ └── use-debounce.js │ │ ├── color │ │ │ └── hextToHsl.js │ │ ├── date │ │ │ ├── index.js │ │ │ ├── long.js │ │ │ ├── longTime.js │ │ │ ├── month.js │ │ │ ├── numeric.js │ │ │ ├── parse.js │ │ │ ├── short.js │ │ │ └── shortTime.js │ │ ├── file │ │ │ ├── dataURItoFile.js │ │ │ └── index.js │ │ ├── number │ │ │ ├── compact.js │ │ │ ├── fileSize.js │ │ │ └── index.js │ │ ├── string │ │ │ ├── codeToLanguage.js │ │ │ └── index.js │ │ └── url │ │ │ ├── extractURLs.js │ │ │ ├── getDomain.js │ │ │ ├── index.js │ │ │ ├── isSPA.js │ │ │ └── normalizeURL.js │ ├── localStorage │ │ └── index.js │ ├── sessionStorage │ │ └── index.js │ ├── sw │ │ └── component.js │ ├── translate │ │ ├── component.js │ │ └── index.js │ └── vendors │ │ └── sentry │ │ ├── component.js │ │ └── index.js ├── routes │ ├── _app │ │ ├── extension │ │ │ ├── index.js │ │ │ ├── useBookmarksChanged.js │ │ │ └── useExternalLinks.js │ │ ├── fallback.js │ │ └── index.js │ ├── _document │ │ ├── body.js │ │ ├── html.js │ │ ├── html.module.css │ │ ├── index.js │ │ └── normalize.css │ ├── _protected │ │ └── index.js │ ├── _splash │ │ ├── extension.js │ │ ├── fallback.js │ │ └── index.js │ ├── account │ │ ├── electron │ │ │ └── index.js │ │ ├── extension │ │ │ ├── index.js │ │ │ └── index.module.styl │ │ ├── index.js │ │ ├── jwt │ │ │ └── index.js │ │ ├── layout.js │ │ ├── layout.module.styl │ │ ├── login │ │ │ └── index.js │ │ ├── lost │ │ │ └── index.js │ │ ├── recover │ │ │ └── index.js │ │ ├── redirect.js │ │ ├── signup │ │ │ ├── index.js │ │ │ └── index.module.styl │ │ ├── social │ │ │ ├── index.js │ │ │ └── index.module.styl │ │ └── tfa │ │ │ ├── login.js │ │ │ └── revoke.js │ ├── add │ │ ├── content.js │ │ ├── events.js │ │ ├── header │ │ │ ├── close.js │ │ │ ├── index.js │ │ │ ├── index.module.styl │ │ │ └── title.js │ │ └── index.js │ ├── default.js │ ├── extension │ │ ├── clipper │ │ │ ├── buttons.js │ │ │ ├── content.js │ │ │ ├── header.js │ │ │ ├── header.module.styl │ │ │ └── index.js │ │ ├── highlights │ │ │ ├── bookmark │ │ │ │ ├── header.js │ │ │ │ ├── index.js │ │ │ │ └── index.module.styl │ │ │ ├── empty │ │ │ │ ├── assets │ │ │ │ │ └── safari-ios.png │ │ │ │ ├── howto.js │ │ │ │ ├── howto.module.styl │ │ │ │ ├── index.js │ │ │ │ └── permissions.js │ │ │ └── index.js │ │ ├── index.extension.js │ │ ├── index.js │ │ └── tabs │ │ │ ├── action.js │ │ │ ├── close.js │ │ │ ├── collection.js │ │ │ ├── header.js │ │ │ ├── index.js │ │ │ ├── list.js │ │ │ ├── list.module.styl │ │ │ ├── tags.js │ │ │ ├── useSubmit.js │ │ │ └── useTabs.js │ ├── index.js │ ├── join │ │ ├── index.js │ │ └── layout.module.styl │ ├── my │ │ ├── index.js │ │ ├── item │ │ │ ├── highlights │ │ │ │ ├── collapsed.js │ │ │ │ ├── expanded.js │ │ │ │ ├── expanded.module.styl │ │ │ │ └── index.js │ │ │ ├── index.js │ │ │ ├── layout.js │ │ │ ├── notFound.js │ │ │ ├── tab │ │ │ │ ├── any.js │ │ │ │ ├── cache.js │ │ │ │ ├── cache.module.styl │ │ │ │ ├── edit.js │ │ │ │ ├── preview.js │ │ │ │ ├── preview.module.styl │ │ │ │ ├── web.js │ │ │ │ └── web.module.styl │ │ │ └── toolbar │ │ │ │ ├── index.js │ │ │ │ ├── settings.js │ │ │ │ └── settings.module.styl │ │ ├── layout.js │ │ ├── onboard-upgrade.js │ │ ├── sidebar │ │ │ ├── filters_tags.js │ │ │ ├── index.js │ │ │ ├── profile │ │ │ │ ├── index.js │ │ │ │ └── index.module.styl │ │ │ └── upgrade │ │ │ │ ├── index.js │ │ │ │ ├── index.module.styl │ │ │ │ └── pic.svg │ │ └── space │ │ │ ├── bookmarks.js │ │ │ ├── header │ │ │ ├── add.js │ │ │ ├── index.js │ │ │ └── share.js │ │ │ ├── index.js │ │ │ └── search_in │ │ │ ├── index.js │ │ │ └── index.module.styl │ ├── notFound.js │ ├── settings │ │ ├── account │ │ │ ├── connect.js │ │ │ ├── connect.module.styl │ │ │ ├── index.js │ │ │ ├── logoutAll.js │ │ │ ├── profile │ │ │ │ ├── avatar.js │ │ │ │ ├── avatar.module.styl │ │ │ │ ├── index.js │ │ │ │ ├── password.js │ │ │ │ └── password.module.styl │ │ │ ├── remove.js │ │ │ ├── reset.js │ │ │ └── usage.js │ │ ├── app │ │ │ ├── ai.js │ │ │ ├── broken_level.js │ │ │ ├── default_collection_view.js │ │ │ ├── index.js │ │ │ ├── lang.js │ │ │ ├── lang.module.styl │ │ │ ├── nested_view_legacy.js │ │ │ ├── raindrops_buttons.js │ │ │ ├── raindrops_click.js │ │ │ ├── raindrops_search_by_score.js │ │ │ ├── size.js │ │ │ ├── tags_sort.js │ │ │ ├── theme.js │ │ │ └── theme.module.styl │ │ ├── backups │ │ │ ├── add.js │ │ │ ├── automatic.js │ │ │ ├── cloud.js │ │ │ ├── cloud.module.styl │ │ │ ├── files │ │ │ │ ├── index.js │ │ │ │ └── item.js │ │ │ ├── index.js │ │ │ └── index.module.styl │ │ ├── extension │ │ │ ├── add │ │ │ │ └── index.js │ │ │ ├── browser_extension_mode │ │ │ │ ├── clipper.svg │ │ │ │ ├── index.js │ │ │ │ ├── index.module.styl │ │ │ │ └── mini_app.svg │ │ │ ├── hotkeys │ │ │ │ └── index.js │ │ │ ├── index.js │ │ │ └── permissions │ │ │ │ └── index.js │ │ ├── import │ │ │ ├── file.js │ │ │ ├── file.module.styl │ │ │ ├── help.js │ │ │ ├── index.js │ │ │ ├── mode.js │ │ │ └── parcel.js │ │ ├── index.js │ │ ├── integrations │ │ │ ├── connections │ │ │ │ ├── index.js │ │ │ │ └── index.module.styl │ │ │ ├── dev │ │ │ │ ├── create.js │ │ │ │ ├── edit.js │ │ │ │ ├── edit.module.styl │ │ │ │ ├── help.js │ │ │ │ ├── index.js │ │ │ │ ├── index.module.styl │ │ │ │ └── my.js │ │ │ ├── index.js │ │ │ └── ready │ │ │ │ ├── index.js │ │ │ │ ├── index.module.styl │ │ │ │ └── item.js │ │ ├── layout.js │ │ ├── layout.module.styl │ │ ├── pro │ │ │ ├── free │ │ │ │ ├── index.js │ │ │ │ └── index.module.styl │ │ │ ├── index.js │ │ │ └── paid │ │ │ │ ├── actions.js │ │ │ │ ├── actions.module.styl │ │ │ │ ├── alert.js │ │ │ │ ├── alert.module.styl │ │ │ │ ├── help.js │ │ │ │ ├── help.module.styl │ │ │ │ ├── index.js │ │ │ │ ├── period.js │ │ │ │ ├── period.module.styl │ │ │ │ ├── price.js │ │ │ │ ├── price.module.styl │ │ │ │ ├── status.js │ │ │ │ └── status.module.styl │ │ ├── sidebar │ │ │ ├── app.js │ │ │ ├── header.js │ │ │ ├── index.js │ │ │ ├── index.module.styl │ │ │ ├── pages.js │ │ │ ├── user.js │ │ │ └── user.module.styl │ │ └── tfa │ │ │ ├── enable.js │ │ │ ├── help.js │ │ │ ├── index.js │ │ │ ├── revoke.js │ │ │ └── status.js │ └── suggestions │ │ ├── index.js │ │ ├── index.module.css │ │ ├── intro │ │ ├── index.js │ │ ├── index.module.styl │ │ └── intro.png │ │ └── predictions │ │ ├── empty.js │ │ ├── index.js │ │ ├── mergetags.js │ │ ├── move.js │ │ ├── raindrops-list.js │ │ ├── style.module.styl │ │ └── tag.js ├── target │ ├── extension │ │ ├── background │ │ │ ├── action.js │ │ │ ├── commands.js │ │ │ ├── contextMenus.js │ │ │ ├── fix-safari-permissions.js │ │ │ ├── highlights │ │ │ │ ├── README.md │ │ │ │ ├── highlight.js │ │ │ │ ├── index.js │ │ │ │ └── logic.js │ │ │ ├── index.js │ │ │ ├── links.js │ │ │ ├── omnibox.js │ │ │ ├── popup.js │ │ │ ├── runtime.js │ │ │ └── storage.js │ │ ├── browser.js │ │ ├── captureTab.js │ │ ├── currentTab.js │ │ ├── environment.js │ │ ├── getLanguage.js │ │ ├── getMeta │ │ │ ├── index.js │ │ │ └── parse.js │ │ ├── hotkeys.js │ │ ├── index.js │ │ ├── manifest │ │ │ ├── index.js │ │ │ └── locales.js │ │ └── openTab.js │ ├── fallback │ │ ├── captureTab.js │ │ ├── environment.js │ │ ├── getLanguage.js │ │ ├── getMeta.js │ │ ├── hotkeys.js │ │ ├── index.js │ │ └── openTab.js │ └── index.js └── wdyr.js └── vercel.json /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | Do not post feature requests here please! 11 | We have a dedicated website for them https://raindropio.canny.io/feature-requests 12 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # OSX 2 | .DS_Store 3 | __MACOSX 4 | 5 | # Node 6 | node_modules 7 | yarn-error.log 8 | npm-debug.log 9 | .yarn 10 | 11 | # Next 12 | dist 13 | 14 | # Xcode 15 | # 16 | *.pbxuser 17 | !default.pbxuser 18 | *.mode1v3 19 | !default.mode1v3 20 | *.mode2v3 21 | !default.mode2v3 22 | *.perspectivev3 23 | !default.perspectivev3 24 | xcuserdata 25 | *.xccheckout 26 | *.moved-aside 27 | DerivedData 28 | *.hmap 29 | *.ipa 30 | *.xcuserstate 31 | project.xcworkspace -------------------------------------------------------------------------------- /.node-version: -------------------------------------------------------------------------------- 1 | 18.16.0 -------------------------------------------------------------------------------- /build/xcode/Save to Raindrop.io/App/App.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.files.user-selected.read-only 8 | 9 | com.apple.security.network.client 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /build/xcode/Save to Raindrop.io/App/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // Save to Raindrop.io 4 | // 5 | // Created by Rustem Mussabekov on 18.09.2020. 6 | // 7 | 8 | import Cocoa 9 | 10 | @NSApplicationMain 11 | class AppDelegate: NSObject, NSApplicationDelegate { 12 | 13 | func applicationDidFinishLaunching(_ aNotification: Notification) { 14 | // Insert code here to initialize your application 15 | } 16 | 17 | func applicationWillTerminate(_ aNotification: Notification) { 18 | // Insert code here to tear down your application 19 | } 20 | 21 | func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { 22 | return true 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /build/xcode/Save to Raindrop.io/App/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "idiom" : "universal" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /build/xcode/Save to Raindrop.io/App/Assets.xcassets/AppIcon.appiconset/icon_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/app/ac9acd4ba5eeb70f6af600b722a01b8c4f39cd92/build/xcode/Save to Raindrop.io/App/Assets.xcassets/AppIcon.appiconset/icon_16.png -------------------------------------------------------------------------------- /build/xcode/Save to Raindrop.io/App/Assets.xcassets/AppIcon.appiconset/icon_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/app/ac9acd4ba5eeb70f6af600b722a01b8c4f39cd92/build/xcode/Save to Raindrop.io/App/Assets.xcassets/AppIcon.appiconset/icon_32.png -------------------------------------------------------------------------------- /build/xcode/Save to Raindrop.io/App/Assets.xcassets/AppIcon.appiconset/safari_1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/app/ac9acd4ba5eeb70f6af600b722a01b8c4f39cd92/build/xcode/Save to Raindrop.io/App/Assets.xcassets/AppIcon.appiconset/safari_1024.png -------------------------------------------------------------------------------- /build/xcode/Save to Raindrop.io/App/Assets.xcassets/AppIcon.appiconset/safari_128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/app/ac9acd4ba5eeb70f6af600b722a01b8c4f39cd92/build/xcode/Save to Raindrop.io/App/Assets.xcassets/AppIcon.appiconset/safari_128.png -------------------------------------------------------------------------------- /build/xcode/Save to Raindrop.io/App/Assets.xcassets/AppIcon.appiconset/safari_256 1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/app/ac9acd4ba5eeb70f6af600b722a01b8c4f39cd92/build/xcode/Save to Raindrop.io/App/Assets.xcassets/AppIcon.appiconset/safari_256 1.png -------------------------------------------------------------------------------- /build/xcode/Save to Raindrop.io/App/Assets.xcassets/AppIcon.appiconset/safari_256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/app/ac9acd4ba5eeb70f6af600b722a01b8c4f39cd92/build/xcode/Save to Raindrop.io/App/Assets.xcassets/AppIcon.appiconset/safari_256.png -------------------------------------------------------------------------------- /build/xcode/Save to Raindrop.io/App/Assets.xcassets/AppIcon.appiconset/safari_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/app/ac9acd4ba5eeb70f6af600b722a01b8c4f39cd92/build/xcode/Save to Raindrop.io/App/Assets.xcassets/AppIcon.appiconset/safari_32.png -------------------------------------------------------------------------------- /build/xcode/Save to Raindrop.io/App/Assets.xcassets/AppIcon.appiconset/safari_512 1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/app/ac9acd4ba5eeb70f6af600b722a01b8c4f39cd92/build/xcode/Save to Raindrop.io/App/Assets.xcassets/AppIcon.appiconset/safari_512 1.png -------------------------------------------------------------------------------- /build/xcode/Save to Raindrop.io/App/Assets.xcassets/AppIcon.appiconset/safari_512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/app/ac9acd4ba5eeb70f6af600b722a01b8c4f39cd92/build/xcode/Save to Raindrop.io/App/Assets.xcassets/AppIcon.appiconset/safari_512.png -------------------------------------------------------------------------------- /build/xcode/Save to Raindrop.io/App/Assets.xcassets/AppIcon.appiconset/safari_64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/app/ac9acd4ba5eeb70f6af600b722a01b8c4f39cd92/build/xcode/Save to Raindrop.io/App/Assets.xcassets/AppIcon.appiconset/safari_64.png -------------------------------------------------------------------------------- /build/xcode/Save to Raindrop.io/App/Assets.xcassets/Brand.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "icon_128.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "icon_256.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "icon_384.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /build/xcode/Save to Raindrop.io/App/Assets.xcassets/Brand.imageset/icon_128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/app/ac9acd4ba5eeb70f6af600b722a01b8c4f39cd92/build/xcode/Save to Raindrop.io/App/Assets.xcassets/Brand.imageset/icon_128.png -------------------------------------------------------------------------------- /build/xcode/Save to Raindrop.io/App/Assets.xcassets/Brand.imageset/icon_256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/app/ac9acd4ba5eeb70f6af600b722a01b8c4f39cd92/build/xcode/Save to Raindrop.io/App/Assets.xcassets/Brand.imageset/icon_256.png -------------------------------------------------------------------------------- /build/xcode/Save to Raindrop.io/App/Assets.xcassets/Brand.imageset/icon_384.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/app/ac9acd4ba5eeb70f6af600b722a01b8c4f39cd92/build/xcode/Save to Raindrop.io/App/Assets.xcassets/Brand.imageset/icon_384.png -------------------------------------------------------------------------------- /build/xcode/Save to Raindrop.io/App/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /build/xcode/Save to Raindrop.io/App/Assets.xcassets/Pro/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /build/xcode/Save to Raindrop.io/App/Assets.xcassets/Pro/ProArt.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "Group 4.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "Group 4@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "Group 4@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /build/xcode/Save to Raindrop.io/App/Assets.xcassets/Pro/ProArt.imageset/Group 4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/app/ac9acd4ba5eeb70f6af600b722a01b8c4f39cd92/build/xcode/Save to Raindrop.io/App/Assets.xcassets/Pro/ProArt.imageset/Group 4.png -------------------------------------------------------------------------------- /build/xcode/Save to Raindrop.io/App/Assets.xcassets/Pro/ProArt.imageset/Group 4@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/app/ac9acd4ba5eeb70f6af600b722a01b8c4f39cd92/build/xcode/Save to Raindrop.io/App/Assets.xcassets/Pro/ProArt.imageset/Group 4@2x.png -------------------------------------------------------------------------------- /build/xcode/Save to Raindrop.io/App/Assets.xcassets/Pro/ProArt.imageset/Group 4@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/app/ac9acd4ba5eeb70f6af600b722a01b8c4f39cd92/build/xcode/Save to Raindrop.io/App/Assets.xcassets/Pro/ProArt.imageset/Group 4@3x.png -------------------------------------------------------------------------------- /build/xcode/Save to Raindrop.io/App/Assets.xcassets/Welcome/Browse.imageset/Artboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/app/ac9acd4ba5eeb70f6af600b722a01b8c4f39cd92/build/xcode/Save to Raindrop.io/App/Assets.xcassets/Welcome/Browse.imageset/Artboard.png -------------------------------------------------------------------------------- /build/xcode/Save to Raindrop.io/App/Assets.xcassets/Welcome/Browse.imageset/Artboard@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/app/ac9acd4ba5eeb70f6af600b722a01b8c4f39cd92/build/xcode/Save to Raindrop.io/App/Assets.xcassets/Welcome/Browse.imageset/Artboard@2x.png -------------------------------------------------------------------------------- /build/xcode/Save to Raindrop.io/App/Assets.xcassets/Welcome/Browse.imageset/Artboard@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/app/ac9acd4ba5eeb70f6af600b722a01b8c4f39cd92/build/xcode/Save to Raindrop.io/App/Assets.xcassets/Welcome/Browse.imageset/Artboard@3x.png -------------------------------------------------------------------------------- /build/xcode/Save to Raindrop.io/App/Assets.xcassets/Welcome/Browse.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "Artboard.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "Artboard@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "Artboard@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /build/xcode/Save to Raindrop.io/App/Assets.xcassets/Welcome/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /build/xcode/Save to Raindrop.io/App/readme.md: -------------------------------------------------------------------------------- 1 | # Subscribe 2 | https://api.raindrop.io/v1/auth/jwt?done_uri=rniomacsafari://subscribe 3 | -------------------------------------------------------------------------------- /build/xcode/Save to Raindrop.io/Extension/Extension.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.files.user-selected.read-only 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /build/xcode/Save to Raindrop.io/Save to Raindrop.io.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /build/xcode/Save to Raindrop.io/Save to Raindrop.io.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /build/xcode/Save to Raindrop.io/Save to Raindrop.io.xcodeproj/project.xcworkspace/xcuserdata/exentrich.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/app/ac9acd4ba5eeb70f6af600b722a01b8c4f39cd92/build/xcode/Save to Raindrop.io/Save to Raindrop.io.xcodeproj/project.xcworkspace/xcuserdata/exentrich.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /build/xcode/Save to Raindrop.io/version.sh: -------------------------------------------------------------------------------- 1 | if [[ "$OSTYPE" == "darwin"* ]]; then 2 | PACKAGE_VERSION=$(cat ../../../package.json \ 3 | | grep version \ 4 | | head -1 \ 5 | | awk -F: '{ print $2 }' \ 6 | | sed 's/[",]//g') 7 | echo $PACKAGE_VERSION 8 | agvtool new-marketing-version $PACKAGE_VERSION 9 | agvtool next-version -all 10 | sed -i '' "s/MARKETING_VERSION = [0-9]*\.[0-9]*\.[0-9]*/MARKETING_VERSION =$PACKAGE_VERSION/" "Save to Raindrop.io.xcodeproj/project.pbxproj" 11 | else 12 | echo "This script can only run on macOS!" 13 | fi -------------------------------------------------------------------------------- /functions/account/login.js: -------------------------------------------------------------------------------- 1 | export async function onRequest({ request }) { 2 | const res = await fetch(request) 3 | 4 | return new Response(res.body, { 5 | status: 401, 6 | headers: res.headers 7 | }) 8 | } -------------------------------------------------------------------------------- /functions/pb/api/event.js: -------------------------------------------------------------------------------- 1 | export async function onRequest({ request }) { 2 | return fetch('https://plausible.io/api/event', request) 3 | } -------------------------------------------------------------------------------- /functions/pb/hash.js.js: -------------------------------------------------------------------------------- 1 | export async function onRequest({ request }) { 2 | return fetch('https://plausible.io/js/plausible.hash.exclusions.js', request) 3 | } -------------------------------------------------------------------------------- /functions/pb/site.js.js: -------------------------------------------------------------------------------- 1 | export async function onRequest({ request }) { 2 | return fetch('https://plausible.io/js/plausible.exclusions.js', request) 3 | } -------------------------------------------------------------------------------- /jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "baseUrl": ".", 4 | "paths": { 5 | "~t": ["src/modules/translate"], 6 | "~*": ["src/*"] 7 | } 8 | }, 9 | "include": ["src/**/*"] 10 | } -------------------------------------------------------------------------------- /src/assets/_headers: -------------------------------------------------------------------------------- 1 | /assets/* 2 | Cache-Control: public,max-age=31536000,immutable 3 | 4 | /* 5 | X-Frame-Options: DENY -------------------------------------------------------------------------------- /src/assets/_redirects: -------------------------------------------------------------------------------- 1 | /legacy/4 https://extension.raindrop.io -------------------------------------------------------------------------------- /src/assets/brand/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/app/ac9acd4ba5eeb70f6af600b722a01b8c4f39cd92/src/assets/brand/favicon.ico -------------------------------------------------------------------------------- /src/assets/brand/icon_128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/app/ac9acd4ba5eeb70f6af600b722a01b8c4f39cd92/src/assets/brand/icon_128.png -------------------------------------------------------------------------------- /src/assets/brand/icon_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/app/ac9acd4ba5eeb70f6af600b722a01b8c4f39cd92/src/assets/brand/icon_16.png -------------------------------------------------------------------------------- /src/assets/brand/icon_180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/app/ac9acd4ba5eeb70f6af600b722a01b8c4f39cd92/src/assets/brand/icon_180.png -------------------------------------------------------------------------------- /src/assets/brand/icon_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/app/ac9acd4ba5eeb70f6af600b722a01b8c4f39cd92/src/assets/brand/icon_32.png -------------------------------------------------------------------------------- /src/assets/brand/icon_48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/app/ac9acd4ba5eeb70f6af600b722a01b8c4f39cd92/src/assets/brand/icon_48.png -------------------------------------------------------------------------------- /src/assets/brand/icon_512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/app/ac9acd4ba5eeb70f6af600b722a01b8c4f39cd92/src/assets/brand/icon_512.png -------------------------------------------------------------------------------- /src/assets/brand/icon_64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/app/ac9acd4ba5eeb70f6af600b722a01b8c4f39cd92/src/assets/brand/icon_64.png -------------------------------------------------------------------------------- /src/assets/brand/macos_512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/app/ac9acd4ba5eeb70f6af600b722a01b8c4f39cd92/src/assets/brand/macos_512.png -------------------------------------------------------------------------------- /src/assets/brand/maskable_512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/app/ac9acd4ba5eeb70f6af600b722a01b8c4f39cd92/src/assets/brand/maskable_512.png -------------------------------------------------------------------------------- /src/assets/brand/og.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/app/ac9acd4ba5eeb70f6af600b722a01b8c4f39cd92/src/assets/brand/og.png -------------------------------------------------------------------------------- /src/assets/icons/add.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/icons/add_active.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/icons/alfred.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/icons/arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | arrow 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/assets/icons/arrow_alt.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | arrow_alt 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/assets/icons/audio.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/icons/blank.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/icons/cache_failed.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/icons/cloud_active.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/icons/document.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/icons/edit_active.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/icons/gdrive.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/icons/gdrive_active.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/icons/inbox_active.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/icons/info.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/icons/markdown.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/icons/menu.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/icons/micro_arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/icons/micro_article.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/icons/micro_audio.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/icons/micro_broken.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/icons/micro_cache_failed.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/icons/micro_comment.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/icons/micro_document.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/icons/micro_duplicate.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/assets/icons/micro_expand.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/icons/micro_next.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | micro_next 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/assets/icons/micro_reminder.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/icons/micro_search.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/icons/micro_video.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/icons/more_horizontal.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/icons/night.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/icons/show_active.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/icons/sidebar.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | sidebar 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/assets/icons/sort_-title.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/icons/sort_-title_active.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/icons/sort_rating.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/icons/type.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/icons/upload_active.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/icons/view_simple.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/assets/icons/youtube.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/languages/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "de": "Deutsch", 3 | "en": "English", 4 | "es": "Español", 5 | "fr": "Français", 6 | "hi": "हिन्दी", 7 | "it": "Italiano", 8 | "ja": "日本語", 9 | "ko": "한국어", 10 | "nl": "Nederlands", 11 | "pl": "Polski", 12 | "pt_BR": "Português (Brasil)", 13 | "ru": "Русский", 14 | "sv": "Svenska", 15 | "tr": "Türkçe", 16 | "zh-Hans": "中文(汉语)", 17 | "zh-Hant": "中文(漢語)" 18 | } -------------------------------------------------------------------------------- /src/assets/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Allow: / -------------------------------------------------------------------------------- /src/assets/sw.js: -------------------------------------------------------------------------------- 1 | // On install, cache some stuff 2 | addEventListener('install', function (event) { 3 | 4 | }); 5 | 6 | 7 | // listen for requests 8 | addEventListener('fetch', function (event) { 9 | 10 | }); -------------------------------------------------------------------------------- /src/assets/target/extension/action_chrome_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/app/ac9acd4ba5eeb70f6af600b722a01b8c4f39cd92/src/assets/target/extension/action_chrome_16.png -------------------------------------------------------------------------------- /src/assets/target/extension/action_chrome_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/app/ac9acd4ba5eeb70f6af600b722a01b8c4f39cd92/src/assets/target/extension/action_chrome_24.png -------------------------------------------------------------------------------- /src/assets/target/extension/action_chrome_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/app/ac9acd4ba5eeb70f6af600b722a01b8c4f39cd92/src/assets/target/extension/action_chrome_32.png -------------------------------------------------------------------------------- /src/assets/target/extension/action_firefox_dark_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/app/ac9acd4ba5eeb70f6af600b722a01b8c4f39cd92/src/assets/target/extension/action_firefox_dark_16.png -------------------------------------------------------------------------------- /src/assets/target/extension/action_firefox_dark_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/app/ac9acd4ba5eeb70f6af600b722a01b8c4f39cd92/src/assets/target/extension/action_firefox_dark_24.png -------------------------------------------------------------------------------- /src/assets/target/extension/action_firefox_dark_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/app/ac9acd4ba5eeb70f6af600b722a01b8c4f39cd92/src/assets/target/extension/action_firefox_dark_32.png -------------------------------------------------------------------------------- /src/assets/target/extension/action_firefox_light_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/app/ac9acd4ba5eeb70f6af600b722a01b8c4f39cd92/src/assets/target/extension/action_firefox_light_16.png -------------------------------------------------------------------------------- /src/assets/target/extension/action_firefox_light_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/app/ac9acd4ba5eeb70f6af600b722a01b8c4f39cd92/src/assets/target/extension/action_firefox_light_24.png -------------------------------------------------------------------------------- /src/assets/target/extension/action_firefox_light_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/app/ac9acd4ba5eeb70f6af600b722a01b8c4f39cd92/src/assets/target/extension/action_firefox_light_32.png -------------------------------------------------------------------------------- /src/assets/target/extension/action_safari.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/app/ac9acd4ba5eeb70f6af600b722a01b8c4f39cd92/src/assets/target/extension/action_safari.png -------------------------------------------------------------------------------- /src/assets/target/extension/action_safari_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/app/ac9acd4ba5eeb70f6af600b722a01b8c4f39cd92/src/assets/target/extension/action_safari_16.png -------------------------------------------------------------------------------- /src/assets/target/extension/action_safari_19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/app/ac9acd4ba5eeb70f6af600b722a01b8c4f39cd92/src/assets/target/extension/action_safari_19.png -------------------------------------------------------------------------------- /src/assets/target/extension/action_safari_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/app/ac9acd4ba5eeb70f6af600b722a01b8c4f39cd92/src/assets/target/extension/action_safari_32.png -------------------------------------------------------------------------------- /src/assets/target/extension/action_safari_38.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/app/ac9acd4ba5eeb70f6af600b722a01b8c4f39cd92/src/assets/target/extension/action_safari_38.png -------------------------------------------------------------------------------- /src/assets/target/extension/welcome/logo-icon.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/app/ac9acd4ba5eeb70f6af600b722a01b8c4f39cd92/src/assets/target/extension/welcome/logo-icon.webp -------------------------------------------------------------------------------- /src/assets/target/extension/welcome/screen-highlights.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/app/ac9acd4ba5eeb70f6af600b722a01b8c4f39cd92/src/assets/target/extension/welcome/screen-highlights.webp -------------------------------------------------------------------------------- /src/assets/target/extension/welcome/screen-save.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/app/ac9acd4ba5eeb70f6af600b722a01b8c4f39cd92/src/assets/target/extension/welcome/screen-save.webp -------------------------------------------------------------------------------- /src/assets/target/extension/welcome/screen-search.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/app/ac9acd4ba5eeb70f6af600b722a01b8c4f39cd92/src/assets/target/extension/welcome/screen-search.webp -------------------------------------------------------------------------------- /src/assets/target/extension/welcome/screen-sidepanel.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/app/ac9acd4ba5eeb70f6af600b722a01b8c4f39cd92/src/assets/target/extension/welcome/screen-sidepanel.webp -------------------------------------------------------------------------------- /src/co/bookmarks/add/extension/highlights/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import t from '~t' 3 | import { Link } from 'react-router-dom' 4 | import { MenuItem } from '~co/overlay/popover' 5 | import Icon from '~co/common/icon' 6 | 7 | export default function BookmarksAddExtensionHighlights() { 8 | return ( 9 | 12 | 13 | {t.s('add')} {t.s('highlights').toLowerCase()}… 14 | 15 | ) 16 | } -------------------------------------------------------------------------------- /src/co/bookmarks/add/extension/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { PropTypes } from 'prop-types' 3 | 4 | import { ButtonsGroup } from '~co/common/button' 5 | import Tab from './tab' 6 | import More from './more' 7 | 8 | function BookmarksAdd(props) { 9 | return ( 10 | 11 | 12 | 13 | 14 | ) 15 | } 16 | 17 | BookmarksAdd.propTypes = { 18 | spaceId: PropTypes.any, 19 | onEdit: PropTypes.func 20 | } 21 | 22 | export default BookmarksAdd -------------------------------------------------------------------------------- /src/co/bookmarks/add/extension/more.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { PropTypes } from 'prop-types' 3 | 4 | import { More, Menu } from '~co/overlay/popover' 5 | import Tabs from './tabs' 6 | import File from '../fallback/file' 7 | import Highlights from './highlights' 8 | 9 | function BookmarksAddMore(props) { 10 | return ( 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | ) 19 | } 20 | 21 | BookmarksAddMore.propTypes = { 22 | spaceId: PropTypes.any, 23 | onEdit: PropTypes.func 24 | } 25 | 26 | export default BookmarksAddMore -------------------------------------------------------------------------------- /src/co/bookmarks/add/extension/tab/button.module.styl: -------------------------------------------------------------------------------- 1 | .button[data-init='true'] { 2 | pointer-events: none 3 | } 4 | 5 | .label { 6 | overflow: visible 7 | } 8 | 9 | html:global(.mobile) .label { 10 | display: none 11 | } -------------------------------------------------------------------------------- /src/co/bookmarks/add/extension/tabs/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import t from '~t' 3 | import { Link } from 'react-router-dom' 4 | import { MenuItem } from '~co/overlay/popover' 5 | import Icon from '~co/common/icon' 6 | 7 | export default function BookmarksAddExtensionTabs({ spaceId }) { 8 | return ( 9 | 12 | 13 | {t.s('save')} {t.s('tabs').toLowerCase()}… 14 | 15 | ) 16 | } -------------------------------------------------------------------------------- /src/co/bookmarks/add/fallback/link.module.css: -------------------------------------------------------------------------------- 1 | .modal { 2 | width: 11rem 3 | } -------------------------------------------------------------------------------- /src/co/bookmarks/add/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { target } from '~target' 3 | 4 | let Component = target == 'extension' ? 5 | require('./extension').default : 6 | require('./fallback').default 7 | 8 | export default class BookmarksAddWrap extends React.PureComponent { 9 | static defaultProps = { 10 | spaceId: 0, 11 | onEdit: undefined //func([item]) 12 | } 13 | 14 | render() { 15 | return ( 16 | 17 | ) 18 | } 19 | } -------------------------------------------------------------------------------- /src/co/bookmarks/container/scroll.module.styl: -------------------------------------------------------------------------------- 1 | .scroll { 2 | overflow-x: clip 3 | overflow-y: auto 4 | flex: 1 5 | } -------------------------------------------------------------------------------- /src/co/bookmarks/container/wrap.js: -------------------------------------------------------------------------------- 1 | import s from './wrap.module.styl' 2 | import React from 'react' 3 | 4 | import AccentColor from '~co/collections/item/accentColor' 5 | import Drop from '../dnd/drop' 6 | 7 | export default function BookmarksContainerWrap({ spaceId, children }) { 8 | return ( 9 | {style=> 10 | {({ dropHandlers, isDropping })=> 11 |
15 | {children} 16 |
17 | }
18 | }
19 | ) 20 | } -------------------------------------------------------------------------------- /src/co/bookmarks/container/wrap.module.styl: -------------------------------------------------------------------------------- 1 | .wrap { 2 | width: 100% 3 | height: 100% 4 | position: relative 5 | display: flex 6 | flex-direction: column 7 | } 8 | 9 | .isDropping:before { 10 | background: unquote('hsla(var(--accent-hsl), .1)') 11 | left:0;top:0;right:0;bottom:0; 12 | content: "" 13 | position: absolute 14 | z-index:11 15 | pointer-events: none 16 | box-shadow: inset 0px 0px 0px 2px var(--accent-color) 17 | } -------------------------------------------------------------------------------- /src/co/bookmarks/edit/form/action/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Buttons } from '~co/common/form' 3 | import Main from './main' 4 | 5 | export default function BookmarkEditAction({ buttons, ...etc }) { 6 | return ( 7 | 8 | {buttons} 9 |
10 | 11 | ) 12 | } -------------------------------------------------------------------------------- /src/co/bookmarks/edit/form/date.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import t from '~t' 3 | 4 | import { SubLabel } from '~co/common/form' 5 | import { ShortDateTime } from '~modules/format/date' 6 | 7 | export default function BookmarkEditFormDate({ item: { created } }) { 8 | if (!created) 9 | return null 10 | 11 | return ( 12 | <> 13 |
14 | {t.s('saved')} 15 | 16 | ) 17 | } -------------------------------------------------------------------------------- /src/co/bookmarks/edit/form/important.js: -------------------------------------------------------------------------------- 1 | import React, { useCallback } from 'react' 2 | import t from '~t' 3 | import Button from '~co/common/button' 4 | import Icon from '~co/common/icon' 5 | 6 | export default function BookmarkEditFormImportant({ item: { important }, onChange, onSave }) { 7 | const onToggle = useCallback(e=>{ 8 | e.preventDefault() 9 | onChange({ important: !important }) 10 | onSave() 11 | }, [important]) 12 | 13 | return ( 14 | 20 | ) 21 | } -------------------------------------------------------------------------------- /src/co/bookmarks/edit/form/index.module.styl: -------------------------------------------------------------------------------- 1 | .edit { 2 | width: 100% 3 | max-width: 13rem //520px 4 | margin: 0 auto 5 | padding: var(--padding-small) 0 6 | display: flex 7 | } 8 | 9 | .form { 10 | flex: 1 11 | position: relative 12 | 13 | &[data-status='loading'], 14 | &[data-status='idle'] { 15 | pointer-events: none 16 | user-select: none 17 | } 18 | } -------------------------------------------------------------------------------- /src/co/bookmarks/edit/form/note.module.styl: -------------------------------------------------------------------------------- 1 | .note { 2 | position: relative 3 | } 4 | 5 | .button { 6 | position: absolute 7 | right: var(--padding-micro) 8 | bottom: var(--padding-micro) 9 | --primary-text-color: var(--disable-text-color) 10 | } -------------------------------------------------------------------------------- /src/co/bookmarks/edit/index.module.styl: -------------------------------------------------------------------------------- 1 | .edit { 2 | width: 100% 3 | max-width: 12.5rem //500px 4 | margin: 0 auto 5 | display: flex 6 | } -------------------------------------------------------------------------------- /src/co/bookmarks/footer/index.module.styl: -------------------------------------------------------------------------------- 1 | .footer { 2 | width: 100% 3 | height: var(--header-height) 4 | display: flex 5 | align-items: center 6 | justify-content: center 7 | padding: 0 var(--padding-medium) 8 | font-size: var(--secondary-font-size) 9 | color: var(--secondary-text-color) 10 | 11 | &[data-compact='true'] { 12 | background: unquote('linear-gradient(to bottom, hsla(var(--background-hsl), 0) 0, var(--background-color) 100%)') 13 | } 14 | } -------------------------------------------------------------------------------- /src/co/bookmarks/header/index.js: -------------------------------------------------------------------------------- 1 | import React, { useRef } from 'react' 2 | import { useSelector } from 'react-redux' 3 | import { makeSelectModeEnabled } from '~data/selectors/bookmarks' 4 | 5 | import Regular from './regular' 6 | import SelectMode from './selectMode' 7 | 8 | export default function BookmarksHeader(props) { 9 | const { spaceId } = props 10 | 11 | const getSelectModeEnabled = useRef(makeSelectModeEnabled()).current 12 | const selectModeEnabled = useSelector(state=>getSelectModeEnabled(state, spaceId)) 13 | 14 | return selectModeEnabled ? 15 | : 16 | 17 | } -------------------------------------------------------------------------------- /src/co/bookmarks/header/regular/icon.module.styl: -------------------------------------------------------------------------------- 1 | .button { 2 | position: relative 3 | 4 | &[data-selectable='false'] { 5 | pointer-events: none 6 | } 7 | } 8 | 9 | .icon, .select { 10 | transition: .2s ease-in-out 11 | transition-delay: .2s 12 | } 13 | 14 | .select { 15 | opacity: 0 16 | position: absolute 17 | left: 0 18 | right: 0 19 | bottom: 0 20 | top: 0 21 | pointer-events: none 22 | display: flex 23 | align-items: center 24 | justify-content: center 25 | } 26 | 27 | [data-is-header]:hover .button[data-selectable='true'], 28 | .button[data-selectable='true']:focus-visible { 29 | .select { 30 | opacity: 1 31 | } 32 | 33 | .icon { 34 | opacity: 0 35 | } 36 | } -------------------------------------------------------------------------------- /src/co/bookmarks/header/regular/index.module.styl: -------------------------------------------------------------------------------- 1 | .header:hover .rename, .rename:focus-visible, 2 | .header:hover .open, .open:focus-visible { 3 | opacity: 1 4 | } 5 | 6 | .rename, .open { 7 | opacity: 0 8 | transition: .2s ease-in-out opacity; 9 | transition-delay: .1s 10 | 11 | &:focus-visible { 12 | transition: none 13 | } 14 | } 15 | 16 | html:global(:not(.extension)) .open { 17 | display: none 18 | } -------------------------------------------------------------------------------- /src/co/bookmarks/header/regular/open.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import t from '~t' 3 | import config from '~config' 4 | import Button from '~co/common/button' 5 | import Icon from '~co/common/icon' 6 | 7 | export default ({ className, spaceId })=>( 8 | 15 | ) -------------------------------------------------------------------------------- /src/co/bookmarks/header/selectMode/checkbox.module.styl: -------------------------------------------------------------------------------- 1 | .check { 2 | width: var(--icon-size) 3 | height: var(--icon-size) 4 | display: flex 5 | align-items: center 6 | justify-content: center 7 | } -------------------------------------------------------------------------------- /src/co/bookmarks/index.module.styl: -------------------------------------------------------------------------------- 1 | .bookmarks { 2 | --lazy-item-height: var(--header-height) 3 | overflow-x: clip 4 | overflow-y: auto 5 | height: 100% 6 | } -------------------------------------------------------------------------------- /src/co/bookmarks/item/actions.module.styl: -------------------------------------------------------------------------------- 1 | //Actions 2 | .actions { 3 | position: absolute 4 | z-index: 1 5 | right: var(--padding-medium) 6 | top: var(--padding-medium) 7 | display: inline-grid 8 | grid-auto-flow: column 9 | grid-gap: var(--padding-small) 10 | justify-content: start 11 | display: none 12 | //transition: opacity .1s linear 13 | 14 | > * { 15 | display: none 16 | } 17 | } 18 | 19 | for button in current_tab new_tab preview web copy important tags edit remove 20 | :global(.button-{button}) [data-button={button}] { 21 | display: grid 22 | } -------------------------------------------------------------------------------- /src/co/bookmarks/item/cover/index.js: -------------------------------------------------------------------------------- 1 | import View from './view' 2 | 3 | export default View -------------------------------------------------------------------------------- /src/co/bookmarks/item/cover/size.js: -------------------------------------------------------------------------------- 1 | export default function(view, amplifier=1) { 2 | switch(view){ 3 | case 'simple': 4 | return { 5 | width: 20, 6 | height: 20, 7 | ar: '1:1' 8 | } 9 | 10 | case 'grid': 11 | case 'masonry': 12 | return { 13 | width: 194 + (amplifier * 30), 14 | ar: view == 'grid' ? '16:9' : undefined 15 | } 16 | 17 | default: 18 | return { 19 | width: 56, 20 | height: 48, 21 | ar: '7:6' 22 | } 23 | } 24 | } -------------------------------------------------------------------------------- /src/co/bookmarks/item/highlights.module.styl: -------------------------------------------------------------------------------- 1 | .highlight { 2 | margin: var(--padding-mini) 0 3 | 4 | display: -webkit-box 5 | line-clamp: 2 6 | -webkit-line-clamp: 2 7 | -webkit-box-orient: vertical 8 | overflow: hidden 9 | overflow: clip 10 | 11 | .note { 12 | margin-right: var(--padding-small) 13 | } 14 | } -------------------------------------------------------------------------------- /src/co/bookmarks/item/info/path.module.styl: -------------------------------------------------------------------------------- 1 | .path { 2 | display: inline-flex 3 | align-items: center 4 | justify-content: center 5 | font-weight: 500 6 | position: relative 7 | z-index: 1 8 | 9 | &:hover { 10 | text-decoration: underline 11 | } 12 | } 13 | 14 | a.path, 15 | .path { 16 | color: inherit 17 | } 18 | 19 | .icon { 20 | width: var(--padding-medium) 21 | height: var(--padding-medium) 22 | margin-right: var(--padding-small) 23 | } -------------------------------------------------------------------------------- /src/co/bookmarks/item/reminder.js: -------------------------------------------------------------------------------- 1 | import s from './reminder.module.styl' 2 | import React from 'react' 3 | import { ShortDateTime } from '~modules/format/date' 4 | import Icon from '~co/common/icon' 5 | 6 | export default function BookmarksItemReminder({ reminder }) { 7 | if (reminder?.date) 8 | return ( 9 |
10 | 11 | {' '} 12 | 13 |
14 | ) 15 | 16 | return null 17 | } -------------------------------------------------------------------------------- /src/co/bookmarks/item/reminder.module.styl: -------------------------------------------------------------------------------- 1 | .reminder { 2 | font-size: var(--secondary-font-size) 3 | color: var(--reminder-color) 4 | padding: var(--padding-mini) 0 5 | } -------------------------------------------------------------------------------- /src/co/bookmarks/item/tags.module.styl: -------------------------------------------------------------------------------- 1 | :global(.hide-tags) .tags { 2 | display: none 3 | } 4 | 5 | .tags { 6 | a { 7 | color: var(--accent-color) 8 | margin-right: var(--padding-small) 9 | } 10 | 11 | &:empty { 12 | display:none 13 | } 14 | } -------------------------------------------------------------------------------- /src/co/bookmarks/items/empty/view.module.styl: -------------------------------------------------------------------------------- 1 | .empty { 2 | flex: 1 3 | display: flex 4 | align-items: center 5 | justify-content: center 6 | text-align: center 7 | padding: var(--padding-large) 8 | 9 | &:empty { 10 | //otherwise virtualized list glitches: 11 | padding: 0 12 | min-height: 1px 13 | } 14 | 15 | svg path { 16 | fill: var(--accent-color) 17 | } 18 | 19 | svg :not([fill]) { 20 | fill: currentColor 21 | } 22 | } -------------------------------------------------------------------------------- /src/co/bookmarks/items/sortable/index.module.styl: -------------------------------------------------------------------------------- 1 | .ghost { 2 | opacity: 0 3 | transform: scale(0.9) 4 | transition-duration: 0s !important 5 | content-visibility: visible !important 6 | } -------------------------------------------------------------------------------- /src/co/bookmarks/items/view/grid.js: -------------------------------------------------------------------------------- 1 | import s from './grid.module.styl' 2 | import React, { useMemo } from 'react' 3 | import { useSelector } from 'react-redux' 4 | import { getCoverSize } from '~data/selectors/bookmarks' 5 | import itemCoverSize from '~co/bookmarks/item/cover/size' 6 | 7 | export default function BookmarksItemsGrid({ className='', children }) { 8 | const coverSize = useSelector(state=>getCoverSize(state, 'grid')) 9 | const style = useMemo(()=>({ 10 | '--grid-item-width': itemCoverSize('grid', coverSize).width+'px' 11 | }), [coverSize]) 12 | 13 | return ( 14 |
17 | {children} 18 |
19 | ) 20 | } -------------------------------------------------------------------------------- /src/co/bookmarks/items/view/grid.module.styl: -------------------------------------------------------------------------------- 1 | .grid { 2 | --lazy-item-height: 300px 3 | 4 | main { 5 | display: grid; 6 | grid-template-columns: unquote('repeat(auto-fill, minmax(min(calc(50% - var(--padding-medium) * 2), var(--grid-item-width)), 1fr))') 7 | grid-template-rows: 1fr; 8 | grid-gap: var(--padding-medium) 9 | padding: var(--padding-medium) 10 | padding-bottom: 0 11 | } 12 | 13 | [data-lazy-item] { 14 | transition: background .2s ease-in-out; 15 | 16 | &:empty { 17 | box-shadow: inset 0 0 0 var(--shadow-height) var(--shadow-color) 18 | border-radius: var(--border-radius) 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /src/co/bookmarks/items/view/list.js: -------------------------------------------------------------------------------- 1 | import s from './list.module.styl' 2 | import React from 'react' 3 | import { useSelector } from 'react-redux' 4 | 5 | export default function BookmarksItemsList({ className='', children }) { 6 | const listCoverRight = useSelector(state=>state.config.raindrops_list_cover_right) 7 | 8 | return ( 9 |
10 | {children} 11 |
12 | ) 13 | } -------------------------------------------------------------------------------- /src/co/bookmarks/items/view/list.module.styl: -------------------------------------------------------------------------------- 1 | .list { 2 | --lazy-item-height: 100px 3 | } -------------------------------------------------------------------------------- /src/co/bookmarks/items/view/masonry.module.styl: -------------------------------------------------------------------------------- 1 | .masonry { 2 | main { 3 | display: grid; 4 | grid-template-columns: unquote('repeat(auto-fill, minmax(min(calc(50% - var(--padding-medium) * 2), var(--grid-item-width)), 1fr))') 5 | grid-auto-rows: 15px //this value + grid-gap should be send to Lazy component in `gridCellSize`, also smaller than 20 value works unpredictable :( 6 | grid-gap: var(--padding-medium) 7 | padding: var(--padding-medium) 8 | padding-bottom: 0 9 | } 10 | 11 | [data-lazy-item] { 12 | grid-row-end: span 5 //default height (calculated as =(grid-auto-rows+grid-gap)*N ) 13 | } 14 | } -------------------------------------------------------------------------------- /src/co/bookmarks/items/view/simple.js: -------------------------------------------------------------------------------- 1 | import s from './simple.module.styl' 2 | import React from 'react' 3 | 4 | export default function BookmarksItemsSimple({ className='', children }) { 5 | return ( 6 |
7 | {children} 8 |
9 | ) 10 | } -------------------------------------------------------------------------------- /src/co/bookmarks/items/view/simple.module.styl: -------------------------------------------------------------------------------- 1 | .simple { 2 | --lazy-item-height: 75px 3 | } -------------------------------------------------------------------------------- /src/co/collections/group/view.module.styl: -------------------------------------------------------------------------------- 1 | .section { 2 | cursor: pointer 3 | } -------------------------------------------------------------------------------- /src/co/collections/item/title.module.styl: -------------------------------------------------------------------------------- 1 | .path { 2 | direction: rtl 3 | text-align: left 4 | display: block 5 | white-space: nowrap 6 | overflow: hidden 7 | text-overflow: ellipsis 8 | word-wrap: break-word 9 | } 10 | 11 | .parents { 12 | color: var(--secondary-text-color) 13 | } -------------------------------------------------------------------------------- /src/co/collections/items/empty.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Item } from '~co/common/list' 3 | 4 | export default function CollectionsItemsEmpty() { 5 | return ( 6 |
7 | 8 | ————————————— 9 | 10 | 11 | ————————— 12 | 13 | 14 | ————————— 15 | 16 |
17 | ) 18 | } -------------------------------------------------------------------------------- /src/co/collections/items/index.module.styl: -------------------------------------------------------------------------------- 1 | .wrap { 2 | position: relative 3 | height: 100% 4 | } -------------------------------------------------------------------------------- /src/co/collections/items/tree.module.styl: -------------------------------------------------------------------------------- 1 | .tree { 2 | overflow-x: clip !important 3 | overflow-y: overlay !important 4 | } -------------------------------------------------------------------------------- /src/co/collections/picker/index.module.styl: -------------------------------------------------------------------------------- 1 | .content { 2 | overflow: hidden 3 | overflow: clip 4 | } -------------------------------------------------------------------------------- /src/co/collections/sharing/index.module.styl: -------------------------------------------------------------------------------- 1 | .sharing { 2 | width: 13rem //520px 3 | } -------------------------------------------------------------------------------- /src/co/collections/sharing/title/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { connect } from 'react-redux' 3 | import { makeCollection } from '~data/selectors/collections' 4 | import View from './view' 5 | 6 | class CollectionSharingTitle extends React.Component { 7 | render() { 8 | return 10 | } 11 | } 12 | 13 | export default connect( 14 | () => { 15 | const getCollection = makeCollection() 16 | 17 | return (state, { _id })=> 18 | getCollection(state, _id) 19 | } 20 | )(CollectionSharingTitle) -------------------------------------------------------------------------------- /src/co/collections/sharing/title/view.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import t from '~t' 3 | import { Header } from '~co/overlay/modal' 4 | 5 | export default function CollectionSharingTitleView({ title }) { 6 | return ( 7 |
10 | ) 11 | } -------------------------------------------------------------------------------- /src/co/common/alert/index.js: -------------------------------------------------------------------------------- 1 | import s from './index.module.styl' 2 | import React from 'react' 3 | 4 | export default function Alert({ className='', variant='default', children, ...etc }) { 5 | let icon = '' 6 | switch (variant) { 7 | case 'warning': icon = '⚠️'; break 8 | } 9 | 10 | return ( 11 |
14 | {icon && {icon} } 15 | {children} 16 |
17 | ) 18 | } -------------------------------------------------------------------------------- /src/co/common/footer/index.js: -------------------------------------------------------------------------------- 1 | import s from './index.module.styl' 2 | import React from 'react' 3 | 4 | function Footer({ as='div', className='', forwardedRef, ...etc }) { 5 | const Component = as 6 | 7 | return ( 8 | 12 | ) 13 | } 14 | 15 | export default React.forwardRef((props, ref) => { 16 | return