├── .dockerignore ├── .editorconfig ├── .github ├── ISSUE_TEMPLATE │ ├── accessibility.md │ ├── broken.md │ └── config.yml └── workflows │ ├── e2e-tests-readonly.yml │ ├── e2e-tests-readwrite.yml │ └── unit-tests.yml ├── .gitignore ├── .husky ├── .gitignore └── pre-commit ├── .testcaferc.json ├── .vercelignore ├── BREAKING_CHANGES.md ├── CHANGELOG.md ├── CONTRIBUTING.md ├── Dockerfile ├── LICENSE ├── README.md ├── bin ├── backup-mastodon-data.sh ├── browser-shim.js ├── build-assets.js ├── build-inline-script.js ├── build-sass.js ├── build-svg.js ├── build-template-html.js ├── build-vercel-json.js ├── clone-mastodon.js ├── copy-vercel-json.sh ├── getIntl.js ├── install-mastodon.js ├── mastodon-config.js ├── mastodon-data.js ├── print-export-info.js ├── restore-mastodon-data.js ├── run-mastodon.js ├── svgs.js ├── terserOptions.js ├── test-vercel-json-unchanged.sh ├── wait-for-mastodon-data.js └── wait-for-mastodon-to-start.js ├── docker-compose.yml ├── docs ├── Admin-Guide.md ├── Architecture.md ├── Internationalization.md ├── Screenshot1.png ├── Screenshot2.png ├── Screenshot3.png ├── Screenshot4.png ├── Screenshot5.png ├── Screenshot6.png ├── Theming.md └── User-Guide.md ├── package.json ├── server.js ├── src ├── build │ ├── manifest.json │ └── template.html ├── client.js ├── inline-script │ └── inline-script.js ├── intl │ ├── de.js │ ├── en-US.js │ ├── es.js │ ├── fr.js │ └── ru-RU.JS ├── routes │ ├── _a11y │ │ ├── getAccessibleLabelForStatus.js │ │ └── getAccountAccessibleName.js │ ├── _actions │ │ ├── accounts.js │ │ ├── addInstance.js │ │ ├── addStatusOrNotification.js │ │ ├── autosuggest.js │ │ ├── autosuggestAccountSearch.js │ │ ├── autosuggestEmojiSearch.js │ │ ├── autosuggestHashtagSearch.js │ │ ├── block.js │ │ ├── bookmark.js │ │ ├── compose.js │ │ ├── composePoll.js │ │ ├── contentWarnings.js │ │ ├── copyText.js │ │ ├── createMakeProps.js │ │ ├── delete.js │ │ ├── deleteAndRedraft.js │ │ ├── deleteStatuses.js │ │ ├── doQuickLoginIfNecessary.js │ │ ├── emoji.js │ │ ├── favorite.js │ │ ├── filters.js │ │ ├── follow.js │ │ ├── followRequests.js │ │ ├── getRecentStatusesForAccount.js │ │ ├── goToSearch.js │ │ ├── instances.js │ │ ├── lists.js │ │ ├── media.js │ │ ├── mention.js │ │ ├── mute.js │ │ ├── muteConversation.js │ │ ├── onUserIsLoggedOut.js │ │ ├── pin.js │ │ ├── pinnedStatuses.js │ │ ├── polls.js │ │ ├── postPrivacy.js │ │ ├── pushSubscription.js │ │ ├── reblog.js │ │ ├── rehydrateStatusOrNotification.js │ │ ├── report.js │ │ ├── reportStatuses.js │ │ ├── requests.js │ │ ├── search.js │ │ ├── setAccountNotified.js │ │ ├── setDomainBlocked.js │ │ ├── setShowReblogs.js │ │ ├── share.js │ │ ├── showComposeDialog.js │ │ ├── showMoreAndScrollToTop.js │ │ ├── statuses.js │ │ ├── stream │ │ │ ├── fillStreamingGap.js │ │ │ ├── processMessage.js │ │ │ └── streaming.js │ │ ├── timeline.js │ │ ├── toggleMute.js │ │ └── updateStatus.js │ ├── _api │ │ ├── block.js │ │ ├── blockDomain.js │ │ ├── blockedAndMuted.js │ │ ├── bookmark.js │ │ ├── delete.js │ │ ├── emoji.js │ │ ├── favorite.js │ │ ├── filters.js │ │ ├── follow.js │ │ ├── followRequests.js │ │ ├── followsAndFollowers.js │ │ ├── instance.js │ │ ├── lists.js │ │ ├── media.js │ │ ├── mute.js │ │ ├── muteConversation.js │ │ ├── notify.js │ │ ├── oauth.js │ │ ├── pin.js │ │ ├── pinnedStatuses.js │ │ ├── polls.js │ │ ├── pushSubscription.js │ │ ├── reblog.js │ │ ├── reblogsAndFavs.js │ │ ├── relationships.js │ │ ├── report.js │ │ ├── requests.js │ │ ├── search.js │ │ ├── showReblogs.js │ │ ├── statuses.js │ │ ├── stream │ │ │ ├── TimelineStream.js │ │ │ └── getStreamUrl.js │ │ ├── timelines.js │ │ ├── updateCredentials.js │ │ ├── user.js │ │ └── utils.js │ ├── _components │ │ ├── AccountsListPage.html │ │ ├── AutoplayVideo.html │ │ ├── Avatar.html │ │ ├── Draggable.html │ │ ├── DynamicHeading.html │ │ ├── DynamicPageBanner.html │ │ ├── ExternalLink.html │ │ ├── FocusRestoration.html │ │ ├── FreeTextLayout.html │ │ ├── HiddenFromSSR.html │ │ ├── IconButton.html │ │ ├── InfoAside.html │ │ ├── InformationalFooter.html │ │ ├── Label.html │ │ ├── LazyImage.html │ │ ├── LazyPage.html │ │ ├── LengthGauge.html │ │ ├── LengthIndicator.html │ │ ├── LoadingMask.html │ │ ├── LoadingPage.html │ │ ├── LoadingSpinner.html │ │ ├── MediaControlsFix.html │ │ ├── Nav.html │ │ ├── NavItem.html │ │ ├── NavItemIcon.html │ │ ├── NavShortcuts.html │ │ ├── NonAutoplayGifv.html │ │ ├── NonAutoplayImg.html │ │ ├── NotLoggedInHome.html │ │ ├── NotificationFilters.html │ │ ├── PlayVideoIcon.html │ │ ├── Select.html │ │ ├── ShortcutHelpInfo.html │ │ ├── SvgIcon.html │ │ ├── TabSet.html │ │ ├── TimelineHomePage.html │ │ ├── TimelinePage.html │ │ ├── Title.html │ │ ├── Tooltip.html │ │ ├── community │ │ │ ├── PageList.html │ │ │ └── PageListItem.html │ │ ├── compose │ │ │ ├── ComposeAuthor.html │ │ │ ├── ComposeAutosuggest.html │ │ │ ├── ComposeAutosuggestContainer.html │ │ │ ├── ComposeAutosuggestionList.html │ │ │ ├── ComposeBox.html │ │ │ ├── ComposeButton.html │ │ │ ├── ComposeContentWarning.html │ │ │ ├── ComposeFileDrop.html │ │ │ ├── ComposeInput.html │ │ │ ├── ComposeLengthGauge.html │ │ │ ├── ComposeLengthIndicator.html │ │ │ ├── ComposeMedia.html │ │ │ ├── ComposeMediaItem.html │ │ │ ├── ComposeMediaSensitive.html │ │ │ ├── ComposePoll.html │ │ │ ├── ComposeStickyButton.html │ │ │ ├── ComposeToolbar.html │ │ │ ├── LazyComposeBox.html │ │ │ └── constants.js │ │ ├── dialog │ │ │ ├── asyncDialogs │ │ │ │ ├── importShowAccountProfileOptionsDialog.js │ │ │ │ ├── importShowComposeDialog.js │ │ │ │ ├── importShowCopyDialog.js │ │ │ │ ├── importShowEmojiDialog.js │ │ │ │ ├── importShowMediaDialog.js │ │ │ │ ├── importShowMediaEditDialog.js │ │ │ │ ├── importShowMuteDialog.js │ │ │ │ ├── importShowPostPrivacyDialog.js │ │ │ │ ├── importShowReportDialog.js │ │ │ │ ├── importShowShortcutHelpDialog.js │ │ │ │ ├── importShowStatusOptionsDialog.js │ │ │ │ ├── importShowTextConfirmationDialog.js │ │ │ │ └── importShowWordFilterDialog.js │ │ │ ├── components │ │ │ │ ├── AccountProfileOptionsDialog.html │ │ │ │ ├── ComposeDialog.html │ │ │ │ ├── ConfirmationDialog.html │ │ │ │ ├── CopyDialog.html │ │ │ │ ├── EmojiDialog.html │ │ │ │ ├── GenericConfirmationDialog.html │ │ │ │ ├── GenericDialogList.html │ │ │ │ ├── MediaAltEditor.html │ │ │ │ ├── MediaDialog.html │ │ │ │ ├── MediaEditDialog.html │ │ │ │ ├── MediaFocalPointEditor.html │ │ │ │ ├── MediaInDialog.html │ │ │ │ ├── ModalDialog.html │ │ │ │ ├── MuteDialog.html │ │ │ │ ├── PinchZoomable.html │ │ │ │ ├── PostPrivacyDialog.html │ │ │ │ ├── ReportDialog.html │ │ │ │ ├── ShortcutHelpDialog.html │ │ │ │ ├── StatusOptionsDialog.html │ │ │ │ ├── TextConfirmationDialog.html │ │ │ │ └── WordFilterDialog.html │ │ │ ├── creators │ │ │ │ ├── showAccountProfileOptionsDialog.js │ │ │ │ ├── showComposeDialog.js │ │ │ │ ├── showCopyDialog.js │ │ │ │ ├── showDialog.js │ │ │ │ ├── showEmojiDialog.js │ │ │ │ ├── showMediaDialog.js │ │ │ │ ├── showMediaEditDialog.js │ │ │ │ ├── showMuteDialog.js │ │ │ │ ├── showPostPrivacyDialog.js │ │ │ │ ├── showReportDialog.js │ │ │ │ ├── showShortcutHelpDialog.js │ │ │ │ ├── showStatusOptionsDialog.js │ │ │ │ ├── showTextConfirmationDialog.js │ │ │ │ └── showWordFilterDialog.js │ │ │ └── helpers │ │ │ │ ├── closeDialog.js │ │ │ │ ├── createDialogElement.js │ │ │ │ ├── createDialogId.js │ │ │ │ ├── onCreateDialog.js │ │ │ │ └── showDialog.js │ │ ├── list │ │ │ ├── List.html │ │ │ ├── ListItem.html │ │ │ ├── ListLazyItem.html │ │ │ └── listStore.js │ │ ├── profile │ │ │ ├── AccountDisplayName.html │ │ │ ├── AccountProfile.html │ │ │ ├── AccountProfileDetails.html │ │ │ ├── AccountProfileFilters.html │ │ │ ├── AccountProfileFollow.html │ │ │ ├── AccountProfileHeader.html │ │ │ ├── AccountProfileMeta.html │ │ │ ├── AccountProfileMovedBanner.html │ │ │ ├── AccountProfileNote.html │ │ │ └── AccountProfilePage.html │ │ ├── radio │ │ │ ├── RadioGroup.html │ │ │ └── RadioGroupButton.html │ │ ├── search │ │ │ ├── AccountSearchResult.html │ │ │ ├── HashtagSearchResult.html │ │ │ ├── Search.html │ │ │ ├── SearchResult.html │ │ │ ├── SearchResults.html │ │ │ └── StatusSearchResult.html │ │ ├── settings │ │ │ ├── SettingsLayout.html │ │ │ ├── SettingsList.html │ │ │ ├── SettingsListButton.html │ │ │ ├── SettingsListRow.html │ │ │ ├── SettingsNav.html │ │ │ ├── SettingsNavItem.html │ │ │ ├── UISettingsStyles.html │ │ │ └── instance │ │ │ │ ├── GenericInstanceSettings.html │ │ │ │ ├── GenericInstanceSettingsStyle.html │ │ │ │ ├── HomeTimelineFilterSettings.html │ │ │ │ ├── InstanceActions.html │ │ │ │ ├── InstanceUserProfile.html │ │ │ │ ├── NotificationFilterSettings.html │ │ │ │ ├── PushNotificationSettings.html │ │ │ │ ├── ThemeSettings.html │ │ │ │ └── WordFilterSettings.html │ │ ├── shortcut │ │ │ ├── ScrollListShortcuts.html │ │ │ └── Shortcut.html │ │ ├── snackbar │ │ │ ├── Snackbar.html │ │ │ └── snackbar.js │ │ ├── status │ │ │ ├── Media.html │ │ │ ├── MediaAttachments.html │ │ │ ├── Notification.html │ │ │ ├── Status.html │ │ │ ├── StatusAuthorHandle.html │ │ │ ├── StatusAuthorName.html │ │ │ ├── StatusCard.html │ │ │ ├── StatusComposeBox.html │ │ │ ├── StatusContent.html │ │ │ ├── StatusDetails.html │ │ │ ├── StatusHeader.html │ │ │ ├── StatusMediaAttachments.html │ │ │ ├── StatusMentions.html │ │ │ ├── StatusPoll.html │ │ │ ├── StatusRelativeDate.html │ │ │ ├── StatusSidebar.html │ │ │ ├── StatusSpoiler.html │ │ │ └── StatusToolbar.html │ │ ├── timeline │ │ │ ├── LazyTimeline.html │ │ │ ├── LoadingFooter.html │ │ │ ├── MoreHeader.html │ │ │ ├── MoreHeaderVirtualWrapper.html │ │ │ ├── NotificationVirtualListItem.html │ │ │ ├── PinnedStatuses.html │ │ │ ├── StatusVirtualListItem.html │ │ │ └── Timeline.html │ │ ├── toast │ │ │ ├── Toast.html │ │ │ └── toast.js │ │ └── virtualList │ │ │ ├── VirtualList.html │ │ │ ├── VirtualListContainer.html │ │ │ ├── VirtualListFooter.html │ │ │ ├── VirtualListHeader.html │ │ │ ├── VirtualListItem.html │ │ │ ├── VirtualListLazyItem.html │ │ │ └── virtualListStore.js │ ├── _database │ │ ├── accounts.js │ │ ├── asyncDatabase.js │ │ ├── cache.js │ │ ├── cleanup.js │ │ ├── clear.js │ │ ├── constants.js │ │ ├── database.js │ │ ├── databaseApis.js │ │ ├── databaseLifecycle.js │ │ ├── helpers.js │ │ ├── keys.js │ │ ├── knownInstances.js │ │ ├── mediaUploadFileCache.js │ │ ├── meta.js │ │ ├── migrations.js │ │ ├── relationships.js │ │ ├── timelines │ │ │ ├── cacheStatus.js │ │ │ ├── deletion.js │ │ │ ├── fetchAccount.js │ │ │ ├── fetchNotification.js │ │ │ ├── fetchStatus.js │ │ │ ├── getStatusOrNotification.js │ │ │ ├── insertion.js │ │ │ ├── lookup.js │ │ │ ├── pagination.js │ │ │ ├── pinnedStatuses.js │ │ │ └── updateStatus.js │ │ ├── utils.js │ │ └── webShare.js │ ├── _error.html │ ├── _intl │ │ └── formatTimeagoDate.js │ ├── _layout.html │ ├── _pages │ │ ├── accounts │ │ │ └── [accountId] │ │ │ │ ├── followers.html │ │ │ │ ├── follows.html │ │ │ │ ├── index.html │ │ │ │ ├── media.html │ │ │ │ └── with_replies.html │ │ ├── blocked.html │ │ ├── bookmarks.html │ │ ├── community │ │ │ └── index.html │ │ ├── direct.html │ │ ├── favorites.html │ │ ├── federated.html │ │ ├── index.html │ │ ├── lists │ │ │ └── [listId].html │ │ ├── local.html │ │ ├── muted.html │ │ ├── notifications │ │ │ ├── index.html │ │ │ └── mentions.html │ │ ├── pinned.html │ │ ├── requests.html │ │ ├── search.html │ │ ├── settings │ │ │ ├── about.html │ │ │ ├── general.html │ │ │ ├── hotkeys.html │ │ │ ├── index.html │ │ │ ├── instances │ │ │ │ ├── [instanceName].html │ │ │ │ ├── add.html │ │ │ │ └── index.html │ │ │ └── wellness.html │ │ ├── statuses │ │ │ └── [statusId] │ │ │ │ ├── favorites.html │ │ │ │ ├── index.html │ │ │ │ └── reblogs.html │ │ └── tags │ │ │ └── [tagName].html │ ├── _static │ │ ├── animations.js │ │ ├── autosuggest.js │ │ ├── blocks.js │ │ ├── blurhash.js │ │ ├── database.js │ │ ├── emojiPickerIntl.js │ │ ├── fonts.js │ │ ├── instanceSettings.js │ │ ├── intl.js │ │ ├── media.js │ │ ├── pages.js │ │ ├── polls.js │ │ ├── share.js │ │ ├── statuses.js │ │ ├── themes.js │ │ ├── timelines.js │ │ └── wordFilters.js │ ├── _store │ │ ├── LocalStorageStore.js │ │ ├── computations │ │ │ ├── autosuggestComputations.js │ │ │ ├── badgeComputations.js │ │ │ ├── computations.js │ │ │ ├── instanceComputations.js │ │ │ ├── loggedInComputations.js │ │ │ ├── navComputations.js │ │ │ ├── timelineComputations.js │ │ │ ├── timelineFilterComputations.js │ │ │ └── wordFilterComputations.js │ │ ├── loggedInStoreExtensions.js │ │ ├── mixins │ │ │ ├── autosuggestMixins.js │ │ │ ├── composeMixins.js │ │ │ ├── instanceMixins.js │ │ │ ├── loggedInMixins.js │ │ │ ├── mixins.js │ │ │ ├── statusMixins.js │ │ │ └── timelineMixins.js │ │ ├── observers │ │ │ ├── autosuggestObservers.js │ │ │ ├── badgeObservers.js │ │ │ ├── bottomNavObservers.js │ │ │ ├── centerNavObservers.js │ │ │ ├── cleanup.js │ │ │ ├── countryFlagEmojiPolyfill.js │ │ │ ├── customEmojiObservers.js │ │ │ ├── customScrollbarObservers.js │ │ │ ├── focusRingObservers.js │ │ │ ├── grayscaleObservers.js │ │ │ ├── instanceObservers.js │ │ │ ├── leftRightFocusObservers.js │ │ │ ├── logOutObservers.js │ │ │ ├── loggedInObservers.js │ │ │ ├── navObservers.js │ │ │ ├── notificationObservers.js │ │ │ ├── notificationPermissionObservers.js │ │ │ ├── nowObservers.js │ │ │ ├── observers.js │ │ │ ├── onlineObservers.js │ │ │ ├── pageVisibilityObservers.js │ │ │ ├── resizeObservers.js │ │ │ ├── setupLoggedInObservers.js │ │ │ ├── showComposeDialogObservers.js │ │ │ ├── timelineObservers.js │ │ │ ├── touchObservers.js │ │ │ └── wordFilterObservers.js │ │ ├── store.js │ │ └── storeLite.js │ ├── _thirdparty │ │ ├── a11y-dialog │ │ │ ├── LICENSE │ │ │ └── a11y-dialog.js │ │ ├── autosize │ │ │ ├── LICENSE.md │ │ │ └── autosize.js │ │ ├── idb-keyval │ │ │ ├── LICENCE │ │ │ └── idb-keyval.js │ │ ├── intrinsic-scale │ │ │ ├── LICENSE │ │ │ └── intrinsicScale.js │ │ ├── large-small-dynamic-viewport-units-polyfill │ │ │ ├── LICENSE │ │ │ └── dynamic-viewport-utils-polyfill.js │ │ ├── lodash │ │ │ ├── LICENSE │ │ │ ├── objects.js │ │ │ ├── objects.src.js │ │ │ ├── rollup.config.js │ │ │ ├── timers.js │ │ │ └── timers.src.js │ │ ├── quick-lru │ │ │ ├── license │ │ │ └── quick-lru.js │ │ ├── timeago │ │ │ ├── LICENSE │ │ │ └── timeago.js │ │ ├── unescape │ │ │ ├── LICENSE │ │ │ └── unescape.js │ │ └── websocket │ │ │ ├── LICENSE │ │ │ ├── backoff.js │ │ │ └── websocket.js │ ├── _transitions │ │ └── slide.js │ ├── _utils │ │ ├── PromiseThrottler.js │ │ ├── RealmStore.js │ │ ├── RequestThrottler.js │ │ ├── addEmojiTooltips.js │ │ ├── ajax.js │ │ ├── animate.js │ │ ├── announceAriaLivePolite.js │ │ ├── arrays.js │ │ ├── asyncModules │ │ │ ├── importArrowKeyNavigation.js │ │ │ ├── importComposeBox.js │ │ │ ├── importDatabase.js │ │ │ ├── importEmojiMart.js │ │ │ ├── importList.js │ │ │ ├── importLoggedInStoreExtensions.js │ │ │ ├── importNavShortcuts.js │ │ │ ├── importNotificationVirtualListItem.js │ │ │ ├── importPageLifecycle.js │ │ │ ├── importSnackbar.js │ │ │ ├── importStatusVirtualListItem.js │ │ │ ├── importTesseractWorker.js │ │ │ ├── importTimeline.js │ │ │ ├── importToast.js │ │ │ ├── importVirtualList.js │ │ │ └── importVirtualListStore.js │ │ ├── base64.js │ │ ├── blurhash.js │ │ ├── checkDomAncestors.js │ │ ├── classname.js │ │ ├── computeFilterContextsForStatusOrNotification.js │ │ ├── convertCssPropertyToDataUrl.js │ │ ├── convertCustomEmojiToEmojiPickerFormat.js │ │ ├── coordsToPercent.js │ │ ├── createAutosuggestAccessibleLabel.js │ │ ├── createFilterFunction.js │ │ ├── createPriorityQueue.js │ │ ├── createRegexFromFilters.js │ │ ├── createSearchIndexFromStatusOrNotification.js │ │ ├── createStatusOrNotificationUuid.js │ │ ├── decodeImage.js │ │ ├── delegate.js │ │ ├── doubleRAF.js │ │ ├── emojiDatabase.js │ │ ├── emojiRegex.js │ │ ├── emojifyText.js │ │ ├── eventBus.js │ │ ├── events.js │ │ ├── forceOnline.js │ │ ├── formatIntl.js │ │ ├── formatters.js │ │ ├── fullscreen.js │ │ ├── getIdFromItemSummaries.js │ │ ├── getImageNativeDimensions.js │ │ ├── handleRegex.js │ │ ├── historyEvents.js │ │ ├── isDarkTheme.js │ │ ├── lifecycle.js │ │ ├── loadCSS.js │ │ ├── loadingMask.js │ │ ├── lodash-lite.js │ │ ├── maps.js │ │ ├── marks.js │ │ ├── massageStatusPlainText.js │ │ ├── massageUserText.js │ │ ├── measureText.js │ │ ├── normalizePageName.js │ │ ├── once.js │ │ ├── pointerEvents.js │ │ ├── polyfills │ │ │ ├── asyncPolyfills.js │ │ │ ├── loadNonCriticalPolyfills.js │ │ │ └── loadPolyfills.js │ │ ├── queueMicrotask.js │ │ ├── removeEmoji.js │ │ ├── replaceEmoji.js │ │ ├── requestPostAnimationFrame.js │ │ ├── reselect.js │ │ ├── resize.js │ │ ├── runMediumPriorityTask.js │ │ ├── runTesseract.js │ │ ├── safeLocalStorage.js │ │ ├── safeParse.js │ │ ├── scheduleIdleTask.js │ │ ├── scheduleInterval.js │ │ ├── scrollContainer.js │ │ ├── scrollIntoView.js │ │ ├── scrollToTop.js │ │ ├── serviceWorkerClient.js │ │ ├── setFavicon.js │ │ ├── shortcuts.js │ │ ├── smoothScroll.js │ │ ├── sortItemSummariesForThread.js │ │ ├── statusHtmlToPlainText.js │ │ ├── statusIdSorting.js │ │ ├── strings.js │ │ ├── supportsFocusVisible.js │ │ ├── supportsSelector.js │ │ ├── sync.js │ │ ├── tesseractWorker.js │ │ ├── testEmojiSupported.js │ │ ├── testStorage.js │ │ ├── themeEngine.js │ │ ├── throttleTimer.js │ │ ├── thunk.js │ │ ├── timelineItemToSummary.js │ │ ├── tryToFocusElement.js │ │ ├── urlIsCrossOrigin.js │ │ ├── urlRegex.js │ │ ├── urlRegexSource.js │ │ └── userAgent │ │ │ ├── isChrome.js │ │ │ ├── isChromePre82.js │ │ │ ├── isChromePre87.js │ │ │ ├── isFirefoxPre90.js │ │ │ ├── isIOS.js │ │ │ ├── isIOSPre12Point2.js │ │ │ ├── isIOSPre13.js │ │ │ ├── isKaiOS.js │ │ │ ├── isMac.js │ │ │ ├── isMobile.js │ │ │ └── isWebKit.js │ ├── _workers │ │ └── blurhash.js │ ├── accounts │ │ └── [accountId] │ │ │ ├── followers.html │ │ │ ├── follows.html │ │ │ ├── index.html │ │ │ ├── media.html │ │ │ └── with_replies.html │ ├── blocked.html │ ├── bookmarks.html │ ├── community │ │ └── index.html │ ├── direct.html │ ├── favorites.html │ ├── federated.html │ ├── index.html │ ├── lists │ │ └── [listId].html │ ├── local.html │ ├── muted.html │ ├── notifications │ │ ├── index.html │ │ └── mentions.html │ ├── pinned.html │ ├── requests.html │ ├── search.html │ ├── settings │ │ ├── about.html │ │ ├── general.html │ │ ├── hotkeys.html │ │ ├── index.html │ │ ├── instances │ │ │ ├── [instanceName].html │ │ │ ├── add.html │ │ │ └── index.html │ │ └── wellness.html │ ├── statuses │ │ └── [statusId] │ │ │ ├── favorites.html │ │ │ ├── index.html │ │ │ └── reblogs.html │ └── tags │ │ └── [tagName].html ├── scss │ ├── custom-scrollbars.scss │ ├── focus.scss │ ├── fonts.scss │ ├── global.scss │ ├── themes │ │ ├── _base.scss │ │ ├── _dark.scss │ │ ├── _dark_navbar.scss │ │ ├── _dark_scrollbars.scss │ │ ├── _default.scss │ │ ├── _light_scrollbars.scss │ │ ├── _scrollbars.scss │ │ ├── cobalt.scss │ │ ├── dark-grayscale.scss │ │ ├── gecko.scss │ │ ├── grayscale.scss │ │ ├── hacker.scss │ │ ├── hotpants.scss │ │ ├── majesty.scss │ │ ├── mastodon.scss │ │ ├── oaken.scss │ │ ├── ozark.scss │ │ ├── pitchblack.scss │ │ ├── punk.scss │ │ ├── riot.scss │ │ ├── scarlet.scss │ │ ├── seafoam.scss │ │ └── sorcery.scss │ └── variables.scss ├── server.js ├── server │ └── sapperInlineScriptChecksums.js ├── service-worker.js ├── static │ ├── icon-shortcut-fa-bell.xcf │ ├── icon-shortcut-fa-pencil.xcf │ ├── logo.svg │ ├── semaphore-logo-square.svg │ └── semaphore-logo.svg └── thirdparty │ └── font-awesome-svg-png │ ├── LICENSE │ ├── README.md │ └── white │ └── svg │ ├── 500px.svg │ ├── address-book-o.svg │ ├── address-book.svg │ ├── address-card-o.svg │ ├── address-card.svg │ ├── adjust.svg │ ├── adn.svg │ ├── align-center.svg │ ├── align-justify.svg │ ├── align-left.svg │ ├── align-right.svg │ ├── amazon.svg │ ├── ambulance.svg │ ├── american-sign-language-interpreting.svg │ ├── anchor.svg │ ├── android.svg │ ├── angellist.svg │ ├── angle-double-down.svg │ ├── angle-double-left.svg │ ├── angle-double-right.svg │ ├── angle-double-up.svg │ ├── angle-down.svg │ ├── angle-left.svg │ ├── angle-right.svg │ ├── angle-up.svg │ ├── apple.svg │ ├── archive.svg │ ├── area-chart.svg │ ├── arrow-circle-down.svg │ ├── arrow-circle-left.svg │ ├── arrow-circle-o-down.svg │ ├── arrow-circle-o-left.svg │ ├── arrow-circle-o-right.svg │ ├── arrow-circle-o-up.svg │ ├── arrow-circle-right.svg │ ├── arrow-circle-up.svg │ ├── arrow-down.svg │ ├── arrow-left.svg │ ├── arrow-right.svg │ ├── arrow-up.svg │ ├── arrows-alt.svg │ ├── arrows-h.svg │ ├── arrows-v.svg │ ├── arrows.svg │ ├── asl-interpreting.svg │ ├── assistive-listening-systems.svg │ ├── asterisk.svg │ ├── at.svg │ ├── audio-description.svg │ ├── automobile.svg │ ├── backward.svg │ ├── balance-scale.svg │ ├── ban.svg │ ├── bandcamp.svg │ ├── bank.svg │ ├── bar-chart-o.svg │ ├── bar-chart.svg │ ├── barcode.svg │ ├── bars.svg │ ├── bath.svg │ ├── bathtub.svg │ ├── battery-0.svg │ ├── battery-1.svg │ ├── battery-2.svg │ ├── battery-3.svg │ ├── battery-4.svg │ ├── battery-empty.svg │ ├── battery-full.svg │ ├── battery-half.svg │ ├── battery-quarter.svg │ ├── battery-three-quarters.svg │ ├── battery.svg │ ├── bed.svg │ ├── beer.svg │ ├── behance-square.svg │ ├── behance.svg │ ├── bell-o.svg │ ├── bell-slash-o.svg │ ├── bell-slash.svg │ ├── bell.svg │ ├── bicycle.svg │ ├── binoculars.svg │ ├── birthday-cake.svg │ ├── bitbucket-square.svg │ ├── bitbucket.svg │ ├── bitcoin.svg │ ├── black-tie.svg │ ├── blind.svg │ ├── bluetooth-b.svg │ ├── bluetooth.svg │ ├── bold.svg │ ├── bolt.svg │ ├── bomb.svg │ ├── book.svg │ ├── bookmark-o.svg │ ├── bookmark.svg │ ├── braille.svg │ ├── briefcase.svg │ ├── btc.svg │ ├── bug.svg │ ├── building-o.svg │ ├── building.svg │ ├── bullhorn.svg │ ├── bullseye.svg │ ├── bus.svg │ ├── buysellads.svg │ ├── cab.svg │ ├── calculator.svg │ ├── calendar-check-o.svg │ ├── calendar-minus-o.svg │ ├── calendar-o.svg │ ├── calendar-plus-o.svg │ ├── calendar-times-o.svg │ ├── calendar.svg │ ├── camera-retro.svg │ ├── camera.svg │ ├── car.svg │ ├── caret-down.svg │ ├── caret-left.svg │ ├── caret-right.svg │ ├── caret-square-o-down.svg │ ├── caret-square-o-left.svg │ ├── caret-square-o-right.svg │ ├── caret-square-o-up.svg │ ├── caret-up.svg │ ├── cart-arrow-down.svg │ ├── cart-plus.svg │ ├── cc-amex.svg │ ├── cc-diners-club.svg │ ├── cc-discover.svg │ ├── cc-jcb.svg │ ├── cc-mastercard.svg │ ├── cc-paypal.svg │ ├── cc-stripe.svg │ ├── cc-visa.svg │ ├── cc.svg │ ├── certificate.svg │ ├── chain-broken.svg │ ├── chain.svg │ ├── check-circle-o.svg │ ├── check-circle.svg │ ├── check-square-o.svg │ ├── check-square.svg │ ├── check.svg │ ├── chevron-circle-down.svg │ ├── chevron-circle-left.svg │ ├── chevron-circle-right.svg │ ├── chevron-circle-up.svg │ ├── chevron-down.svg │ ├── chevron-left.svg │ ├── chevron-right.svg │ ├── chevron-up.svg │ ├── child.svg │ ├── chrome.svg │ ├── circle-o-notch.svg │ ├── circle-o.svg │ ├── circle-thin.svg │ ├── circle.svg │ ├── clipboard.svg │ ├── clock-o.svg │ ├── clone.svg │ ├── close.svg │ ├── cloud-download.svg │ ├── cloud-upload.svg │ ├── cloud.svg │ ├── cny.svg │ ├── code-fork.svg │ ├── code.svg │ ├── codepen.svg │ ├── codiepie.svg │ ├── coffee.svg │ ├── cog.svg │ ├── cogs.svg │ ├── columns.svg │ ├── comment-o.svg │ ├── comment.svg │ ├── commenting-o.svg │ ├── commenting.svg │ ├── comments-o.svg │ ├── comments.svg │ ├── compass.svg │ ├── compress.svg │ ├── connectdevelop.svg │ ├── contao.svg │ ├── copy.svg │ ├── copyright.svg │ ├── creative-commons.svg │ ├── credit-card-alt.svg │ ├── credit-card.svg │ ├── crop.svg │ ├── crosshairs.svg │ ├── css3.svg │ ├── cube.svg │ ├── cubes.svg │ ├── cut.svg │ ├── cutlery.svg │ ├── dashboard.svg │ ├── dashcube.svg │ ├── database.svg │ ├── deaf.svg │ ├── deafness.svg │ ├── dedent.svg │ ├── delicious.svg │ ├── desktop.svg │ ├── deviantart.svg │ ├── diamond.svg │ ├── digg.svg │ ├── dollar.svg │ ├── dot-circle-o.svg │ ├── download.svg │ ├── dribbble.svg │ ├── drivers-license-o.svg │ ├── drivers-license.svg │ ├── dropbox.svg │ ├── drupal.svg │ ├── edge.svg │ ├── edit.svg │ ├── eercast.svg │ ├── eject.svg │ ├── ellipsis-h.svg │ ├── ellipsis-v.svg │ ├── empire.svg │ ├── envelope-o.svg │ ├── envelope-open-o.svg │ ├── envelope-open.svg │ ├── envelope-square.svg │ ├── envelope.svg │ ├── envira.svg │ ├── eraser.svg │ ├── etsy.svg │ ├── eur.svg │ ├── euro.svg │ ├── exchange.svg │ ├── exclamation-circle.svg │ ├── exclamation-triangle.svg │ ├── exclamation.svg │ ├── expand.svg │ ├── expeditedssl.svg │ ├── external-link-square.svg │ ├── external-link.svg │ ├── eye-slash.svg │ ├── eye.svg │ ├── eyedropper.svg │ ├── fa.svg │ ├── facebook-f.svg │ ├── facebook-official.svg │ ├── facebook-square.svg │ ├── facebook.svg │ ├── fast-backward.svg │ ├── fast-forward.svg │ ├── fax.svg │ ├── feed.svg │ ├── female.svg │ ├── fighter-jet.svg │ ├── file-archive-o.svg │ ├── file-audio-o.svg │ ├── file-code-o.svg │ ├── file-excel-o.svg │ ├── file-image-o.svg │ ├── file-movie-o.svg │ ├── file-o.svg │ ├── file-pdf-o.svg │ ├── file-photo-o.svg │ ├── file-picture-o.svg │ ├── file-powerpoint-o.svg │ ├── file-sound-o.svg │ ├── file-text-o.svg │ ├── file-text.svg │ ├── file-video-o.svg │ ├── file-word-o.svg │ ├── file-zip-o.svg │ ├── file.svg │ ├── files-o.svg │ ├── film.svg │ ├── filter.svg │ ├── fire-extinguisher.svg │ ├── fire.svg │ ├── firefox.svg │ ├── first-order.svg │ ├── flag-checkered.svg │ ├── flag-o.svg │ ├── flag.svg │ ├── flash.svg │ ├── flask.svg │ ├── flickr.svg │ ├── floppy-o.svg │ ├── folder-o.svg │ ├── folder-open-o.svg │ ├── folder-open.svg │ ├── folder.svg │ ├── font-awesome.svg │ ├── font.svg │ ├── fonticons.svg │ ├── fort-awesome.svg │ ├── forumbee.svg │ ├── forward.svg │ ├── foursquare.svg │ ├── free-code-camp.svg │ ├── frown-o.svg │ ├── futbol-o.svg │ ├── gamepad.svg │ ├── gavel.svg │ ├── gbp.svg │ ├── ge.svg │ ├── gear.svg │ ├── gears.svg │ ├── genderless.svg │ ├── get-pocket.svg │ ├── gg-circle.svg │ ├── gg.svg │ ├── gift.svg │ ├── git-square.svg │ ├── git.svg │ ├── github-alt.svg │ ├── github-square.svg │ ├── github.svg │ ├── gitlab.svg │ ├── gittip.svg │ ├── glass.svg │ ├── glide-g.svg │ ├── glide.svg │ ├── globe.svg │ ├── google-plus-circle.svg │ ├── google-plus-official.svg │ ├── google-plus-square.svg │ ├── google-plus.svg │ ├── google-wallet.svg │ ├── google.svg │ ├── graduation-cap.svg │ ├── gratipay.svg │ ├── grav.svg │ ├── group.svg │ ├── h-square.svg │ ├── hacker-news.svg │ ├── hand-grab-o.svg │ ├── hand-lizard-o.svg │ ├── hand-o-down.svg │ ├── hand-o-left.svg │ ├── hand-o-right.svg │ ├── hand-o-up.svg │ ├── hand-paper-o.svg │ ├── hand-peace-o.svg │ ├── hand-pointer-o.svg │ ├── hand-rock-o.svg │ ├── hand-scissors-o.svg │ ├── hand-spock-o.svg │ ├── hand-stop-o.svg │ ├── handshake-o.svg │ ├── hard-of-hearing.svg │ ├── hashtag.svg │ ├── hdd-o.svg │ ├── header.svg │ ├── headphones.svg │ ├── heart-o.svg │ ├── heart.svg │ ├── heartbeat.svg │ ├── history.svg │ ├── home.svg │ ├── hospital-o.svg │ ├── hotel.svg │ ├── hourglass-1.svg │ ├── hourglass-2.svg │ ├── hourglass-3.svg │ ├── hourglass-end.svg │ ├── hourglass-half.svg │ ├── hourglass-o.svg │ ├── hourglass-start.svg │ ├── hourglass.svg │ ├── houzz.svg │ ├── html5.svg │ ├── i-cursor.svg │ ├── id-badge.svg │ ├── id-card-o.svg │ ├── id-card.svg │ ├── ils.svg │ ├── image.svg │ ├── imdb.svg │ ├── inbox.svg │ ├── indent.svg │ ├── industry.svg │ ├── info-circle.svg │ ├── info.svg │ ├── inr.svg │ ├── instagram.svg │ ├── institution.svg │ ├── internet-explorer.svg │ ├── intersex.svg │ ├── ioxhost.svg │ ├── italic.svg │ ├── joomla.svg │ ├── jpy.svg │ ├── jsfiddle.svg │ ├── key.svg │ ├── keyboard-o.svg │ ├── krw.svg │ ├── language.svg │ ├── laptop.svg │ ├── lastfm-square.svg │ ├── lastfm.svg │ ├── leaf.svg │ ├── leanpub.svg │ ├── legal.svg │ ├── lemon-o.svg │ ├── level-down.svg │ ├── level-up.svg │ ├── life-bouy.svg │ ├── life-buoy.svg │ ├── life-ring.svg │ ├── life-saver.svg │ ├── lightbulb-o.svg │ ├── line-chart.svg │ ├── link.svg │ ├── linkedin-square.svg │ ├── linkedin.svg │ ├── linode.svg │ ├── linux.svg │ ├── list-alt.svg │ ├── list-ol.svg │ ├── list-ul.svg │ ├── list.svg │ ├── location-arrow.svg │ ├── lock.svg │ ├── long-arrow-down.svg │ ├── long-arrow-left.svg │ ├── long-arrow-right.svg │ ├── long-arrow-up.svg │ ├── low-vision.svg │ ├── magic.svg │ ├── magnet.svg │ ├── mail-forward.svg │ ├── mail-reply-all.svg │ ├── mail-reply.svg │ ├── male.svg │ ├── map-marker.svg │ ├── map-o.svg │ ├── map-pin.svg │ ├── map-signs.svg │ ├── map.svg │ ├── mars-double.svg │ ├── mars-stroke-h.svg │ ├── mars-stroke-v.svg │ ├── mars-stroke.svg │ ├── mars.svg │ ├── maxcdn.svg │ ├── meanpath.svg │ ├── medium.svg │ ├── medkit.svg │ ├── meetup.svg │ ├── meh-o.svg │ ├── mercury.svg │ ├── microchip.svg │ ├── microphone-slash.svg │ ├── microphone.svg │ ├── minus-circle.svg │ ├── minus-square-o.svg │ ├── minus-square.svg │ ├── minus.svg │ ├── mixcloud.svg │ ├── mobile-phone.svg │ ├── mobile.svg │ ├── modx.svg │ ├── money.svg │ ├── moon-o.svg │ ├── mortar-board.svg │ ├── motorcycle.svg │ ├── mouse-pointer.svg │ ├── music.svg │ ├── navicon.svg │ ├── neuter.svg │ ├── newspaper-o.svg │ ├── object-group.svg │ ├── object-ungroup.svg │ ├── odnoklassniki-square.svg │ ├── odnoklassniki.svg │ ├── opencart.svg │ ├── openid.svg │ ├── opera.svg │ ├── optin-monster.svg │ ├── outdent.svg │ ├── pagelines.svg │ ├── paint-brush.svg │ ├── paper-plane-o.svg │ ├── paper-plane.svg │ ├── paperclip.svg │ ├── paragraph.svg │ ├── paste.svg │ ├── pause-circle-o.svg │ ├── pause-circle.svg │ ├── pause.svg │ ├── paw.svg │ ├── paypal.svg │ ├── pencil-square-o.svg │ ├── pencil-square.svg │ ├── pencil.svg │ ├── percent.svg │ ├── phone-square.svg │ ├── phone.svg │ ├── photo.svg │ ├── picture-o.svg │ ├── pie-chart.svg │ ├── pied-piper-alt.svg │ ├── pied-piper-pp.svg │ ├── pied-piper.svg │ ├── pinterest-p.svg │ ├── pinterest-square.svg │ ├── pinterest.svg │ ├── plane.svg │ ├── play-circle-o.svg │ ├── play-circle.svg │ ├── play.svg │ ├── plug.svg │ ├── plus-circle.svg │ ├── plus-square-o.svg │ ├── plus-square.svg │ ├── plus.svg │ ├── podcast.svg │ ├── power-off.svg │ ├── print.svg │ ├── product-hunt.svg │ ├── puzzle-piece.svg │ ├── qq.svg │ ├── qrcode.svg │ ├── question-circle-o.svg │ ├── question-circle.svg │ ├── question.svg │ ├── quora.svg │ ├── quote-left.svg │ ├── quote-right.svg │ ├── ra.svg │ ├── random.svg │ ├── ravelry.svg │ ├── rebel.svg │ ├── recycle.svg │ ├── reddit-alien.svg │ ├── reddit-square.svg │ ├── reddit.svg │ ├── refresh.svg │ ├── registered.svg │ ├── remove.svg │ ├── renren.svg │ ├── reorder.svg │ ├── repeat.svg │ ├── reply-all.svg │ ├── reply.svg │ ├── resistance.svg │ ├── retweet.svg │ ├── rmb.svg │ ├── road.svg │ ├── rocket.svg │ ├── rotate-left.svg │ ├── rotate-right.svg │ ├── rouble.svg │ ├── rss-square.svg │ ├── rss.svg │ ├── rub.svg │ ├── ruble.svg │ ├── rupee.svg │ ├── s15.svg │ ├── safari.svg │ ├── save.svg │ ├── scissors.svg │ ├── scribd.svg │ ├── search-minus.svg │ ├── search-plus.svg │ ├── search.svg │ ├── sellsy.svg │ ├── send-o.svg │ ├── send.svg │ ├── server.svg │ ├── share-alt-square.svg │ ├── share-alt.svg │ ├── share-square-o.svg │ ├── share-square.svg │ ├── share.svg │ ├── shekel.svg │ ├── sheqel.svg │ ├── shield.svg │ ├── ship.svg │ ├── shirtsinbulk.svg │ ├── shopping-bag.svg │ ├── shopping-basket.svg │ ├── shopping-cart.svg │ ├── shower.svg │ ├── sign-in.svg │ ├── sign-language.svg │ ├── sign-out.svg │ ├── signal.svg │ ├── signing.svg │ ├── simplybuilt.svg │ ├── sitemap.svg │ ├── skyatlas.svg │ ├── skype.svg │ ├── slack.svg │ ├── sliders.svg │ ├── slideshare.svg │ ├── smile-o.svg │ ├── snapchat-ghost.svg │ ├── snapchat-square.svg │ ├── snapchat.svg │ ├── snowflake-o.svg │ ├── soccer-ball-o.svg │ ├── sort-alpha-asc.svg │ ├── sort-alpha-desc.svg │ ├── sort-amount-asc.svg │ ├── sort-amount-desc.svg │ ├── sort-asc.svg │ ├── sort-desc.svg │ ├── sort-down.svg │ ├── sort-numeric-asc.svg │ ├── sort-numeric-desc.svg │ ├── sort-up.svg │ ├── sort.svg │ ├── soundcloud.svg │ ├── space-shuttle.svg │ ├── spinner.svg │ ├── spoon.svg │ ├── spotify.svg │ ├── square-o.svg │ ├── square.svg │ ├── stack-exchange.svg │ ├── stack-overflow.svg │ ├── star-half-empty.svg │ ├── star-half-full.svg │ ├── star-half-o.svg │ ├── star-half.svg │ ├── star-o.svg │ ├── star.svg │ ├── steam-square.svg │ ├── steam.svg │ ├── step-backward.svg │ ├── step-forward.svg │ ├── stethoscope.svg │ ├── sticky-note-o.svg │ ├── sticky-note.svg │ ├── stop-circle-o.svg │ ├── stop-circle.svg │ ├── stop.svg │ ├── street-view.svg │ ├── strikethrough.svg │ ├── stumbleupon-circle.svg │ ├── stumbleupon.svg │ ├── subscript.svg │ ├── subway.svg │ ├── suitcase.svg │ ├── sun-o.svg │ ├── superpowers.svg │ ├── superscript.svg │ ├── support.svg │ ├── table.svg │ ├── tablet.svg │ ├── tachometer.svg │ ├── tag.svg │ ├── tags.svg │ ├── tasks.svg │ ├── taxi.svg │ ├── telegram.svg │ ├── television.svg │ ├── tencent-weibo.svg │ ├── terminal.svg │ ├── text-height.svg │ ├── text-width.svg │ ├── th-large.svg │ ├── th-list.svg │ ├── th.svg │ ├── themeisle.svg │ ├── thermometer-0.svg │ ├── thermometer-1.svg │ ├── thermometer-2.svg │ ├── thermometer-3.svg │ ├── thermometer-4.svg │ ├── thermometer-empty.svg │ ├── thermometer-full.svg │ ├── thermometer-half.svg │ ├── thermometer-quarter.svg │ ├── thermometer-three-quarters.svg │ ├── thermometer.svg │ ├── thumb-tack.svg │ ├── thumbs-down.svg │ ├── thumbs-o-down.svg │ ├── thumbs-o-up.svg │ ├── thumbs-up.svg │ ├── ticket.svg │ ├── times-circle-o.svg │ ├── times-circle.svg │ ├── times-rectangle-o.svg │ ├── times-rectangle.svg │ ├── times.svg │ ├── tint.svg │ ├── toggle-down.svg │ ├── toggle-left.svg │ ├── toggle-off.svg │ ├── toggle-on.svg │ ├── toggle-right.svg │ ├── toggle-up.svg │ ├── trademark.svg │ ├── train.svg │ ├── transgender-alt.svg │ ├── transgender.svg │ ├── trash-o.svg │ ├── trash.svg │ ├── tree.svg │ ├── trello.svg │ ├── tripadvisor.svg │ ├── trophy.svg │ ├── truck.svg │ ├── try.svg │ ├── tty.svg │ ├── tumblr-square.svg │ ├── tumblr.svg │ ├── turkish-lira.svg │ ├── tv.svg │ ├── twitch.svg │ ├── twitter-square.svg │ ├── twitter.svg │ ├── umbrella.svg │ ├── underline.svg │ ├── undo.svg │ ├── universal-access.svg │ ├── university.svg │ ├── unlink.svg │ ├── unlock-alt.svg │ ├── unlock.svg │ ├── unsorted.svg │ ├── upload.svg │ ├── usb.svg │ ├── usd.svg │ ├── user-circle-o.svg │ ├── user-circle.svg │ ├── user-md.svg │ ├── user-o.svg │ ├── user-plus.svg │ ├── user-secret.svg │ ├── user-times.svg │ ├── user.svg │ ├── users.svg │ ├── vcard-o.svg │ ├── vcard.svg │ ├── venus-double.svg │ ├── venus-mars.svg │ ├── venus.svg │ ├── viacoin.svg │ ├── viadeo-square.svg │ ├── viadeo.svg │ ├── video-camera.svg │ ├── vimeo-square.svg │ ├── vimeo.svg │ ├── vine.svg │ ├── vk.svg │ ├── volume-control-phone.svg │ ├── volume-down.svg │ ├── volume-off.svg │ ├── volume-up.svg │ ├── warning.svg │ ├── wechat.svg │ ├── weibo.svg │ ├── weixin.svg │ ├── whatsapp.svg │ ├── wheelchair-alt.svg │ ├── wheelchair.svg │ ├── wifi.svg │ ├── wikipedia-w.svg │ ├── window-close-o.svg │ ├── window-close.svg │ ├── window-maximize.svg │ ├── window-minimize.svg │ ├── window-restore.svg │ ├── windows.svg │ ├── won.svg │ ├── wordpress.svg │ ├── wpbeginner.svg │ ├── wpexplorer.svg │ ├── wpforms.svg │ ├── wrench.svg │ ├── xing-square.svg │ ├── xing.svg │ ├── y-combinator-square.svg │ ├── y-combinator.svg │ ├── yahoo.svg │ ├── yc-square.svg │ ├── yc.svg │ ├── yelp.svg │ ├── yen.svg │ ├── yoast.svg │ ├── youtube-play.svg │ ├── youtube-square.svg │ └── youtube.svg ├── static ├── apple-icon.png ├── eng.traineddata.gz ├── favicon-alert.png ├── favicon.png ├── icon-144-maskable.png ├── icon-144.png ├── icon-150.png ├── icon-192-maskable.png ├── icon-192.png ├── icon-44.png ├── icon-48-maskable.png ├── icon-48.png ├── icon-50.png ├── icon-512-maskable.png ├── icon-512.png ├── icon-72-maskable.png ├── icon-72.png ├── icon-96-maskable.png ├── icon-96.png ├── icon-push-badge.png ├── icon-push-fa-retweet.png ├── icon-push-fa-star.png ├── icon-shortcut-fa-bell.png ├── icon-shortcut-fa-pencil.png ├── ipad_splash.png ├── ipadpro1_splash.png ├── ipadpro2_splash.png ├── ipadpro3_splash.png ├── iphone5_splash.png ├── iphone6_splash.png ├── iphoneplus_splash.png ├── iphonex_splash.png ├── iphonexr_splash.png ├── iphonexsmax_splash.png ├── screenshot-540-720-1.png ├── screenshot-540-720-2.png └── screenshot-540-720-3.png ├── tests ├── blobUtils.js ├── fixtures.js ├── fixtures │ ├── dump.sql │ └── system.tgz ├── images.js ├── images │ ├── kitten1.gif │ ├── kitten1.jpg │ ├── kitten1.mp4 │ ├── kitten2.gif │ ├── kitten2.jpg │ ├── kitten2.mp4 │ ├── kitten3.jpg │ ├── kitten4.jpg │ └── kitten5.jpg ├── indexedDBShims.js ├── loadMedia.cjs ├── roles.js ├── serverActions.js ├── spec │ ├── 001-basic-spec.js │ ├── 002-login-spec.js │ ├── 003-basic-timeline-spec.js │ ├── 004-pinned-statuses.js │ ├── 005-status-types.js │ ├── 006-tabindex.js │ ├── 007-account-profile.js │ ├── 008-status-media.js │ ├── 009-threads.js │ ├── 010-focus.js │ ├── 011-reblog-favorites-count.js │ ├── 012-compose.js │ ├── 013-compose-media.js │ ├── 014-compose-post-privacy.js │ ├── 015-compose-content-warnings.js │ ├── 016-external-links.js │ ├── 017-compose-reply.js │ ├── 018-compose-autosuggest.js │ ├── 019-mention.js │ ├── 020-themes.js │ ├── 021-followers-follows.js │ ├── 022-status-aria-label.js │ ├── 023-mark-media-as-sensitive.js │ ├── 024-shortcuts-navigation.js │ ├── 025-shortcuts-status.js │ ├── 026-shortcuts-notification.js │ ├── 027-web-share-and-web-shortcuts.js │ ├── 028-report-ui.js │ ├── 029-back-button-modal.js │ ├── 030-shortcuts-modal.js │ ├── 031-account-filters.js │ ├── 032-mute-dialog.js │ ├── 033-notification-mentions.js │ ├── 034-home-timeline-filters.js │ ├── 035-notification-timeline-filters.js │ ├── 036-disable-infinite-load.js │ ├── 037-pin-timelines.js │ ├── 038-memory-leaks.js │ ├── 039-empty-list.js │ ├── 040-shortcuts-search.js │ ├── 041-wellness.js │ ├── 042-headings.js │ ├── 043-content-warnings.js │ ├── 100-favorite-unfavorite.js │ ├── 101-reblog-unreblog.js │ ├── 102-notifications.js │ ├── 103-compose.js │ ├── 104-streaming.js │ ├── 105-deletes.js │ ├── 106-follow-requests.js │ ├── 107-streaming-gap.js │ ├── 108-compose-dialog.js │ ├── 109-compose-media.js │ ├── 110-compose-content-warnings.js │ ├── 111-focus.js │ ├── 112-status-links.js │ ├── 113-block-unblock.js │ ├── 114-mute-unmute.js │ ├── 115-follow-unfollow.js │ ├── 116-follow-requests.js │ ├── 117-pin-unpin.js │ ├── 118-display-name-custom-emoji.js │ ├── 119-status-counts-update.js │ ├── 120-status-aria-label.js │ ├── 121-delete-and-redraft.js │ ├── 122-replies-in-thread.js │ ├── 123-notification-mentions.js │ ├── 124-home-timeline-filters.js │ ├── 125-notification-timeline-filters.js │ ├── 126-polls.js │ ├── 127-compose-polls.js │ ├── 128-disable-infinite-load.js │ ├── 129-wellness.js │ ├── 130-focal-point.js │ ├── 131-compose-autosuggest.js │ ├── 132-threads-and-updates.js │ ├── 133-favorites.js │ ├── 134-community.js │ ├── 135-bookmarks.js │ ├── 136-empty-list.js │ ├── 137-shortcuts-spoiler.js │ ├── 138-word-filters.js │ ├── 139-notify-denotify.js │ └── 140-editing.js ├── spyDomListeners.js ├── submitMedia.js ├── unit │ ├── test-database.mjs │ ├── test-emoji.mjs │ ├── test-id-sorting.mjs │ ├── test-intl.mjs │ ├── test-measure-text.mjs │ ├── test-media-cache.mjs │ ├── test-quick-lru.mjs │ ├── test-shortcuts.mjs │ ├── test-thread-ordering.mjs │ ├── test-timeago.mjs │ └── test-unescape.mjs ├── users.js └── utils.js ├── vercel.json ├── webpack ├── client.config.js ├── rollup.config.js ├── server.config.js ├── service-worker.config.js ├── shared.config.js ├── svelte-intl-loader.js ├── terser.config.js └── webpack.config.js └── yarn.lock /.dockerignore: -------------------------------------------------------------------------------- 1 | .git 2 | BREAKING_CHANGES.md 3 | CONTRIBUTING.md 4 | docs 5 | README.md 6 | tests 7 | .DS_Store 8 | /node_modules 9 | /__sapper__ 10 | /mastodon 11 | /mastodon.log 12 | /src/template.html 13 | /static/*.css 14 | /static/icons.svg 15 | /static/inline-script.js.map 16 | /static/emoji-*.json 17 | /static/manifest.json 18 | /src/inline-script/checksum.js 19 | yarn-error.log 20 | /vercel.json 21 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = space 5 | indent_size = 2 6 | end_of_line = lf 7 | charset = utf-8 8 | trim_trailing_whitespace = true 9 | insert_final_newline = true 10 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/accessibility.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: ♿ Report an accessibility issue 3 | about: Access issues are treated as high priority 4 | title: '' 5 | labels: '♿ accessibility' 6 | assignees: 'NickColley' 7 | 8 | --- 9 | 10 | 11 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | contact_links: 3 | - name: 💡 Suggest a new feature or idea 4 | url: https://github.com/NickColley/semaphore/discussions/categories/new-features-and-ideas 5 | about: Missing something in Semaphore? Accessibility related features and ideas will be prioritised. 6 | - name: ❔ Ask a question 7 | url: https://fosstodon.org/@semaphore 8 | about: Send us a toot on Mastodon 9 | 10 | 11 | -------------------------------------------------------------------------------- /.github/workflows/unit-tests.yml: -------------------------------------------------------------------------------- 1 | name: Unit tests 2 | on: 3 | pull_request: 4 | branches: [ main ] 5 | jobs: 6 | test: 7 | runs-on: ubuntu-latest 8 | steps: 9 | - uses: actions/checkout@v3 10 | - uses: actions/setup-node@v3 11 | with: 12 | node-version: '14' 13 | cache: 'yarn' 14 | - run: yarn --frozen-lockfile 15 | - run: yarn lint 16 | - run: yarn test-vercel-json 17 | - run: yarn test-unit 18 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | /node_modules 3 | /__sapper__ 4 | /mastodon 5 | /mastodon.log 6 | /src/template.html 7 | /static/*.css 8 | /static/icons.svg 9 | /static/inline-script.js.map 10 | /static/emoji-*.json 11 | /static/manifest.json 12 | /static/TwemojiCountryFlags.woff2 13 | /src/inline-script/checksum.js 14 | yarn-error.log 15 | 16 | .now 17 | .vercel 18 | /webpack/*.cjs 19 | -------------------------------------------------------------------------------- /.husky/.gitignore: -------------------------------------------------------------------------------- 1 | _ 2 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | . "$(dirname $0)/_/husky.sh" 3 | 4 | set -e 5 | set -x 6 | 7 | PATH="$PATH:./node_modules/.bin" 8 | 9 | lint-staged 10 | run-s build-vercel-json 11 | git add vercel.json 12 | -------------------------------------------------------------------------------- /.testcaferc.json: -------------------------------------------------------------------------------- 1 | { 2 | "hostname": "localhost", 3 | "quarantineMode": true, 4 | "screenshots": { 5 | "takeOnFails": false 6 | }, 7 | "skipJsErrors": true, 8 | "stopOnFirstFail": true 9 | } 10 | -------------------------------------------------------------------------------- /.vercelignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | /node_modules 3 | /__sapper__ 4 | /mastodon 5 | /mastodon.log 6 | /src/template.html 7 | /static/*.css 8 | /static/icons.svg 9 | /static/inline-script.js.map 10 | /static/emoji-*.json 11 | /static/manifest.json 12 | /src/inline-script/checksum.js 13 | yarn-error.log 14 | -------------------------------------------------------------------------------- /BREAKING_CHANGES.md: -------------------------------------------------------------------------------- 1 | # Breaking changes 2 | 3 | There are no breaking changes yet. 4 | 5 | > See [previous breaking changes in Pinafore](https://github.com/nolanlawson/pinafore/releases). 6 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | For full release notes, see [GitHub releases](https://github.com/NickColley/semaphore/releases). 4 | 5 | For breaking changes, see [BREAKING_CHANGES.md](https://github.com/NickColley/semaphore/blob/main/BREAKING_CHANGES.md). 6 | -------------------------------------------------------------------------------- /bin/backup-mastodon-data.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -x 4 | set -e 5 | 6 | PGPASSWORD=semaphore pg_dump -U semaphore -w semaphore_development -h 127.0.0.1 > tests/fixtures/dump.sql 7 | cd mastodon/public/system 8 | tar -czf ../../../tests/fixtures/system.tgz . 9 | -------------------------------------------------------------------------------- /bin/browser-shim.js: -------------------------------------------------------------------------------- 1 | // browser shims that run in node, so that page-lifecycle won't error 2 | global.self = global 3 | global.document = { 4 | visibilityState: 'visible', 5 | hasFocus: () => true, 6 | wasDiscarded: false 7 | } 8 | global.addEventListener = () => {} 9 | global.removeEventListener = () => {} 10 | -------------------------------------------------------------------------------- /bin/copy-vercel-json.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Designed to be run before yarn build, and then tested with test-vercel-json-unchanged.sh 4 | 5 | cp ./vercel.json /tmp/vercel-old.json 6 | -------------------------------------------------------------------------------- /bin/terserOptions.js: -------------------------------------------------------------------------------- 1 | export default { 2 | ecma: 8, 3 | mangle: true, 4 | compress: { 5 | pure_funcs: [ 6 | 'console.log' // remove console logs in production 7 | ] 8 | }, 9 | output: { 10 | comments: false 11 | }, 12 | safari10: true 13 | } 14 | -------------------------------------------------------------------------------- /bin/test-vercel-json-unchanged.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # In CI, we need to make sure the vercel.json file is built correctly, 4 | # or else it will mess up the deployment to Vercel 5 | 6 | if ! diff -q /tmp/vercel-old.json ./vercel.json &>/dev/null; then 7 | diff /tmp/vercel-old.json ./vercel.json 8 | echo "vercel.json changed, run yarn build and make sure everything looks okay" 9 | exit 1 10 | fi 11 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | --- 2 | version: "3" 3 | services: 4 | semaphore: 5 | restart: unless-stopped 6 | build: 7 | context: . 8 | dockerfile: Dockerfile 9 | image: semaphore:latest 10 | ports: 11 | - 4002:4002 12 | -------------------------------------------------------------------------------- /docs/Screenshot1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/docs/Screenshot1.png -------------------------------------------------------------------------------- /docs/Screenshot2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/docs/Screenshot2.png -------------------------------------------------------------------------------- /docs/Screenshot3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/docs/Screenshot3.png -------------------------------------------------------------------------------- /docs/Screenshot4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/docs/Screenshot4.png -------------------------------------------------------------------------------- /docs/Screenshot5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/docs/Screenshot5.png -------------------------------------------------------------------------------- /docs/Screenshot6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/docs/Screenshot6.png -------------------------------------------------------------------------------- /src/routes/_a11y/getAccountAccessibleName.js: -------------------------------------------------------------------------------- 1 | import { removeEmoji } from '../_utils/removeEmoji.js' 2 | 3 | export function getAccountAccessibleName (account, omitEmojiInDisplayNames) { 4 | const emojis = account.emojis 5 | let displayName = account.display_name || account.username 6 | if (omitEmojiInDisplayNames) { 7 | displayName = removeEmoji(displayName, emojis) || displayName 8 | } 9 | return displayName 10 | } 11 | -------------------------------------------------------------------------------- /src/routes/_actions/composePoll.js: -------------------------------------------------------------------------------- 1 | import { store } from '../_store/store.js' 2 | 3 | export function enablePoll (realm) { 4 | store.setComposeData(realm, { 5 | poll: { 6 | options: [ 7 | '', 8 | '' 9 | ] 10 | } 11 | }) 12 | } 13 | 14 | export function disablePoll (realm) { 15 | store.setComposeData(realm, { 16 | poll: null 17 | }) 18 | } 19 | -------------------------------------------------------------------------------- /src/routes/_actions/getRecentStatusesForAccount.js: -------------------------------------------------------------------------------- 1 | import { store } from '../_store/store.js' 2 | import { getTimeline } from '../_api/timelines.js' 3 | 4 | export async function getRecentStatusesForAccount (accountId) { 5 | const { currentInstance, accessToken } = store.get() 6 | return (await getTimeline(currentInstance, accessToken, `account/${accountId}`, null, null, 20)).items 7 | } 8 | -------------------------------------------------------------------------------- /src/routes/_actions/mention.js: -------------------------------------------------------------------------------- 1 | import { importShowComposeDialog } from '../_components/dialog/asyncDialogs/importShowComposeDialog.js' 2 | import { store } from '../_store/store.js' 3 | 4 | export async function composeNewStatusMentioning (account) { 5 | store.setComposeData('dialog', { text: `@${account.acct} ` }) 6 | const showComposeDialog = await importShowComposeDialog() 7 | showComposeDialog() 8 | } 9 | -------------------------------------------------------------------------------- /src/routes/_actions/postPrivacy.js: -------------------------------------------------------------------------------- 1 | 2 | import { store } from '../_store/store.js' 3 | 4 | export function setPostPrivacy (realm, postPrivacyKey) { 5 | store.setComposeData(realm, { postPrivacy: postPrivacyKey }) 6 | } 7 | -------------------------------------------------------------------------------- /src/routes/_actions/report.js: -------------------------------------------------------------------------------- 1 | import { importShowReportDialog } from '../_components/dialog/asyncDialogs/importShowReportDialog.js' 2 | 3 | export async function reportStatusOrAccount ({ status, account }) { 4 | const showReportDialog = await importShowReportDialog() 5 | showReportDialog({ status, account }) 6 | } 7 | -------------------------------------------------------------------------------- /src/routes/_actions/toggleMute.js: -------------------------------------------------------------------------------- 1 | import { importShowMuteDialog } from '../_components/dialog/asyncDialogs/importShowMuteDialog.js' 2 | import { setAccountMuted } from './mute.js' 3 | 4 | export async function toggleMute (account, mute) { 5 | if (mute) { 6 | (await importShowMuteDialog())(account) 7 | } else { 8 | await setAccountMuted(account.id, mute, /* notifications */ false, /* toastOnSuccess */ true) 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/routes/_actions/updateStatus.js: -------------------------------------------------------------------------------- 1 | import { database } from '../_database/database.js' 2 | import { scheduleIdleTask } from '../_utils/scheduleIdleTask.js' 3 | 4 | async function doUpdateStatus (instanceName, newStatus) { 5 | console.log('updating status', newStatus) 6 | await database.updateStatus(instanceName, newStatus) 7 | } 8 | 9 | export function updateStatus (instanceName, newStatus) { 10 | scheduleIdleTask(() => { 11 | /* no await */ doUpdateStatus(instanceName, newStatus) 12 | }) 13 | } 14 | -------------------------------------------------------------------------------- /src/routes/_api/delete.js: -------------------------------------------------------------------------------- 1 | import { auth, basename } from './utils.js' 2 | import { del, WRITE_TIMEOUT } from '../_utils/ajax.js' 3 | 4 | export async function deleteStatus (instanceName, accessToken, statusId) { 5 | const url = `${basename(instanceName)}/api/v1/statuses/${statusId}` 6 | return del(url, auth(accessToken), { timeout: WRITE_TIMEOUT }) 7 | } 8 | -------------------------------------------------------------------------------- /src/routes/_api/emoji.js: -------------------------------------------------------------------------------- 1 | import { auth, basename } from './utils.js' 2 | import { DEFAULT_TIMEOUT, get } from '../_utils/ajax.js' 3 | 4 | export function getCustomEmoji (instanceName, accessToken) { 5 | const url = `${basename(instanceName)}/api/v1/custom_emojis` 6 | return get(url, auth(accessToken), { timeout: DEFAULT_TIMEOUT }) 7 | } 8 | -------------------------------------------------------------------------------- /src/routes/_api/instance.js: -------------------------------------------------------------------------------- 1 | import { get, DEFAULT_TIMEOUT } from '../_utils/ajax.js' 2 | import { auth, basename } from './utils.js' 3 | 4 | export function getInstanceInfo (instanceName, accessToken) { 5 | const url = `${basename(instanceName)}/api/v1/instance` 6 | // accessToken is required in limited federation mode, but elsewhere we don't need it (e.g. during login) 7 | const headers = accessToken ? auth(accessToken) : null 8 | return get(url, headers, { timeout: DEFAULT_TIMEOUT }) 9 | } 10 | -------------------------------------------------------------------------------- /src/routes/_api/pinnedStatuses.js: -------------------------------------------------------------------------------- 1 | import { get, paramsString, DEFAULT_TIMEOUT } from '../_utils/ajax.js' 2 | import { auth, basename } from './utils.js' 3 | 4 | export async function getPinnedStatuses (instanceName, accessToken, accountId) { 5 | let url = `${basename(instanceName)}/api/v1/accounts/${accountId}/statuses` 6 | url += '?' + paramsString({ 7 | limit: 40, 8 | pinned: true 9 | }) 10 | return get(url, auth(accessToken), { timeout: DEFAULT_TIMEOUT }) 11 | } 12 | -------------------------------------------------------------------------------- /src/routes/_api/relationships.js: -------------------------------------------------------------------------------- 1 | import { basename, auth } from './utils.js' 2 | import { get, paramsString, DEFAULT_TIMEOUT } from '../_utils/ajax.js' 3 | 4 | export async function getRelationship (instanceName, accessToken, accountId) { 5 | const url = `${basename(instanceName)}/api/v1/accounts/relationships?${paramsString({ id: accountId })}` 6 | const res = await get(url, auth(accessToken), { timeout: DEFAULT_TIMEOUT }) 7 | return res[0] 8 | } 9 | -------------------------------------------------------------------------------- /src/routes/_api/report.js: -------------------------------------------------------------------------------- 1 | import { auth, basename } from './utils.js' 2 | import { post } from '../_utils/ajax.js' 3 | 4 | export async function report (instanceName, accessToken, accountId, statusIds, comment, forward) { 5 | const url = `${basename(instanceName)}/api/v1/reports` 6 | return post(url, { 7 | account_id: accountId, 8 | status_ids: statusIds, 9 | comment, 10 | forward 11 | }, auth(accessToken)) 12 | } 13 | -------------------------------------------------------------------------------- /src/routes/_api/showReblogs.js: -------------------------------------------------------------------------------- 1 | import { auth, basename } from './utils.js' 2 | import { post, WRITE_TIMEOUT } from '../_utils/ajax.js' 3 | 4 | export function setShowReblogs (instanceName, accessToken, accountId, showReblogs) { 5 | const url = `${basename(instanceName)}/api/v1/accounts/${accountId}/follow` 6 | return post(url, { reblogs: !!showReblogs }, auth(accessToken), { timeout: WRITE_TIMEOUT }) 7 | } 8 | -------------------------------------------------------------------------------- /src/routes/_api/updateCredentials.js: -------------------------------------------------------------------------------- 1 | import { WRITE_TIMEOUT, patch } from '../_utils/ajax.js' 2 | import { auth, basename } from './utils.js' 3 | 4 | export async function updateCredentials (instanceName, accessToken, accountData) { 5 | const url = `${basename(instanceName)}/api/v1/accounts/update_credentials` 6 | return patch(url, accountData, auth(accessToken), { timeout: WRITE_TIMEOUT }) 7 | } 8 | -------------------------------------------------------------------------------- /src/routes/_api/utils.js: -------------------------------------------------------------------------------- 1 | function targetIsLocalhost (instanceName) { 2 | return instanceName.startsWith('localhost:') || instanceName.startsWith('127.0.0.1:') 3 | } 4 | 5 | export function basename (instanceName) { 6 | if (targetIsLocalhost(instanceName)) { 7 | return `http://${instanceName}` 8 | } 9 | return `https://${instanceName}` 10 | } 11 | 12 | export function auth (accessToken) { 13 | return { 14 | Authorization: `Bearer ${accessToken}` 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/routes/_components/DynamicHeading.html: -------------------------------------------------------------------------------- 1 | {#if level === 2} 2 |

3 | {:else} 4 |

5 | {/if} 6 | -------------------------------------------------------------------------------- /src/routes/_components/HiddenFromSSR.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 |
5 | 10 | -------------------------------------------------------------------------------- /src/routes/_components/InformationalFooter.html: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 15 | -------------------------------------------------------------------------------- /src/routes/_components/compose/ComposeLengthGauge.html: -------------------------------------------------------------------------------- 1 | 6 | 17 | -------------------------------------------------------------------------------- /src/routes/_components/compose/ComposeLengthIndicator.html: -------------------------------------------------------------------------------- 1 | 7 | 18 | -------------------------------------------------------------------------------- /src/routes/_components/dialog/asyncDialogs/importShowAccountProfileOptionsDialog.js: -------------------------------------------------------------------------------- 1 | export const importShowAccountProfileOptionsDialog = () => import( 2 | '../creators/showAccountProfileOptionsDialog.js' 3 | ).then(mod => mod.default) 4 | -------------------------------------------------------------------------------- /src/routes/_components/dialog/asyncDialogs/importShowComposeDialog.js: -------------------------------------------------------------------------------- 1 | export const importShowComposeDialog = () => import( 2 | '../creators/showComposeDialog.js' 3 | ).then(mod => mod.default) 4 | -------------------------------------------------------------------------------- /src/routes/_components/dialog/asyncDialogs/importShowCopyDialog.js: -------------------------------------------------------------------------------- 1 | export const importShowCopyDialog = () => import( 2 | '../creators/showCopyDialog.js' 3 | ).then(mod => mod.default) 4 | -------------------------------------------------------------------------------- /src/routes/_components/dialog/asyncDialogs/importShowEmojiDialog.js: -------------------------------------------------------------------------------- 1 | export const importShowEmojiDialog = () => import( 2 | '../creators/showEmojiDialog.js' 3 | ).then(mod => mod.default) 4 | -------------------------------------------------------------------------------- /src/routes/_components/dialog/asyncDialogs/importShowMediaDialog.js: -------------------------------------------------------------------------------- 1 | export const importShowMediaDialog = () => import( 2 | '../creators/showMediaDialog.js' 3 | ).then(mod => mod.default) 4 | -------------------------------------------------------------------------------- /src/routes/_components/dialog/asyncDialogs/importShowMediaEditDialog.js: -------------------------------------------------------------------------------- 1 | export const importShowMediaEditDialog = () => import( 2 | '../creators/showMediaEditDialog.js' 3 | ).then(mod => mod.default) 4 | -------------------------------------------------------------------------------- /src/routes/_components/dialog/asyncDialogs/importShowMuteDialog.js: -------------------------------------------------------------------------------- 1 | export const importShowMuteDialog = () => import( 2 | '../creators/showMuteDialog.js' 3 | ).then(mod => mod.default) 4 | -------------------------------------------------------------------------------- /src/routes/_components/dialog/asyncDialogs/importShowPostPrivacyDialog.js: -------------------------------------------------------------------------------- 1 | export const importShowPostPrivacyDialog = () => import( 2 | '../creators/showPostPrivacyDialog.js' 3 | ).then(mod => mod.default) 4 | -------------------------------------------------------------------------------- /src/routes/_components/dialog/asyncDialogs/importShowReportDialog.js: -------------------------------------------------------------------------------- 1 | export const importShowReportDialog = () => import( 2 | '../creators/showReportDialog.js' 3 | ).then(mod => mod.default) 4 | -------------------------------------------------------------------------------- /src/routes/_components/dialog/asyncDialogs/importShowShortcutHelpDialog.js: -------------------------------------------------------------------------------- 1 | export const importShowShortcutHelpDialog = () => import( 2 | '../creators/showShortcutHelpDialog.js' 3 | ).then(mod => mod.default) 4 | -------------------------------------------------------------------------------- /src/routes/_components/dialog/asyncDialogs/importShowStatusOptionsDialog.js: -------------------------------------------------------------------------------- 1 | export const importShowStatusOptionsDialog = () => import( 2 | '../creators/showStatusOptionsDialog.js' 3 | ).then(mod => mod.default) 4 | -------------------------------------------------------------------------------- /src/routes/_components/dialog/asyncDialogs/importShowTextConfirmationDialog.js: -------------------------------------------------------------------------------- 1 | export const importShowTextConfirmationDialog = () => import( 2 | '../creators/showTextConfirmationDialog.js' 3 | ).then(mod => mod.default) 4 | -------------------------------------------------------------------------------- /src/routes/_components/dialog/asyncDialogs/importShowWordFilterDialog.js: -------------------------------------------------------------------------------- 1 | export const importShowWordFilterDialog = () => import( 2 | '../creators/showWordFilterDialog.js' 3 | ).then(mod => mod.default) 4 | -------------------------------------------------------------------------------- /src/routes/_components/dialog/creators/showAccountProfileOptionsDialog.js: -------------------------------------------------------------------------------- 1 | import AccountProfileOptionsDialog from '../components/AccountProfileOptionsDialog.html' 2 | import { showDialog } from './showDialog.js' 3 | 4 | export default function showAccountProfileOptionsDialog (account, relationship, verifyCredentials) { 5 | return showDialog(AccountProfileOptionsDialog, { 6 | label: 'intl.profileOptions', 7 | title: '', 8 | account, 9 | relationship, 10 | verifyCredentials 11 | }) 12 | } 13 | -------------------------------------------------------------------------------- /src/routes/_components/dialog/creators/showComposeDialog.js: -------------------------------------------------------------------------------- 1 | import ComposeDialog from '../components/ComposeDialog.html' 2 | import { showDialog } from './showDialog.js' 3 | 4 | export default function showComposeDialog () { 5 | return showDialog(ComposeDialog, { label: 'intl.composeStatus' }) 6 | } 7 | -------------------------------------------------------------------------------- /src/routes/_components/dialog/creators/showCopyDialog.js: -------------------------------------------------------------------------------- 1 | import CopyDialog from '../components/CopyDialog.html' 2 | import { showDialog } from './showDialog.js' 3 | 4 | export default function showCopyDialog (text) { 5 | return showDialog(CopyDialog, { 6 | label: 'intl.copyLink', 7 | title: 'intl.copyLink', 8 | text 9 | }) 10 | } 11 | -------------------------------------------------------------------------------- /src/routes/_components/dialog/creators/showDialog.js: -------------------------------------------------------------------------------- 1 | import { createDialogElement } from '../helpers/createDialogElement.js' 2 | import { createDialogId } from '../helpers/createDialogId.js' 3 | 4 | export function showDialog (Dialog, data) { 5 | const dialog = new Dialog({ 6 | target: createDialogElement(), 7 | data: Object.assign({ 8 | id: createDialogId() 9 | }, data) 10 | }) 11 | dialog.show() 12 | return dialog 13 | } 14 | -------------------------------------------------------------------------------- /src/routes/_components/dialog/creators/showEmojiDialog.js: -------------------------------------------------------------------------------- 1 | import EmojiDialog from '../components/EmojiDialog.html' 2 | import { showDialog } from './showDialog.js' 3 | 4 | export default function showEmojiDialog (realm) { 5 | return showDialog(EmojiDialog, { 6 | label: 'intl.emoji', 7 | title: 'intl.emoji', 8 | realm 9 | }) 10 | } 11 | -------------------------------------------------------------------------------- /src/routes/_components/dialog/creators/showMediaDialog.js: -------------------------------------------------------------------------------- 1 | import MediaDialog from '../components/MediaDialog.html' 2 | import { showDialog } from './showDialog.js' 3 | 4 | export default function showMediaDialog (mediaItems, scrolledItem) { 5 | return showDialog(MediaDialog, { 6 | label: 'intl.media', 7 | mediaItems, 8 | scrolledItem 9 | }) 10 | } 11 | -------------------------------------------------------------------------------- /src/routes/_components/dialog/creators/showMediaEditDialog.js: -------------------------------------------------------------------------------- 1 | import MediaFocalPointDialog from '../components/MediaEditDialog.html' 2 | import { showDialog } from './showDialog.js' 3 | 4 | export default function showMediaEditDialog (realm, index, type) { 5 | return showDialog(MediaFocalPointDialog, { 6 | label: 'intl.editMedia', 7 | title: 'intl.editMedia', 8 | realm, 9 | index, 10 | type 11 | }) 12 | } 13 | -------------------------------------------------------------------------------- /src/routes/_components/dialog/creators/showMuteDialog.js: -------------------------------------------------------------------------------- 1 | import MuteDialog from '../components/MuteDialog.html' 2 | import { showDialog } from './showDialog.js' 3 | 4 | export default function showMuteDialog (account) { 5 | return showDialog(MuteDialog, { 6 | label: 'intl.mute', 7 | account 8 | }) 9 | } 10 | -------------------------------------------------------------------------------- /src/routes/_components/dialog/creators/showPostPrivacyDialog.js: -------------------------------------------------------------------------------- 1 | import PostPrivacyDialog from '../components/PostPrivacyDialog.html' 2 | import { showDialog } from './showDialog.js' 3 | 4 | export default function showPostPrivacyDialog (realm) { 5 | return showDialog(PostPrivacyDialog, { 6 | label: 'intl.postPrivacy', 7 | title: 'intl.postPrivacy', 8 | realm 9 | }) 10 | } 11 | -------------------------------------------------------------------------------- /src/routes/_components/dialog/creators/showReportDialog.js: -------------------------------------------------------------------------------- 1 | import ReportDialog from '../components/ReportDialog.html' 2 | import { showDialog } from './showDialog.js' 3 | import { formatIntl } from '../../../_utils/formatIntl.js' 4 | 5 | export default function showReportDialog ({ account, status }) { 6 | const label = formatIntl('intl.reportAccount', { account: `@${account.acct}` }) 7 | return showDialog(ReportDialog, { 8 | label, 9 | title: label, 10 | account, 11 | status 12 | }) 13 | } 14 | -------------------------------------------------------------------------------- /src/routes/_components/dialog/creators/showShortcutHelpDialog.js: -------------------------------------------------------------------------------- 1 | import ShortcutHelpDialog from '../components/ShortcutHelpDialog.html' 2 | import { showDialog } from './showDialog.js' 3 | 4 | export default function showShortcutHelpDialog (options) { 5 | return showDialog(ShortcutHelpDialog, Object.assign({ 6 | label: 'intl.shortcutHelp' 7 | }, options)) 8 | } 9 | -------------------------------------------------------------------------------- /src/routes/_components/dialog/creators/showStatusOptionsDialog.js: -------------------------------------------------------------------------------- 1 | import StatusOptionsDialog from '../components/StatusOptionsDialog.html' 2 | import { showDialog } from './showDialog.js' 3 | 4 | export default function showStatusOptionsDialog (status) { 5 | return showDialog(StatusOptionsDialog, { 6 | label: 'intl.statusOptions', 7 | title: '', 8 | status 9 | }) 10 | } 11 | -------------------------------------------------------------------------------- /src/routes/_components/dialog/creators/showTextConfirmationDialog.js: -------------------------------------------------------------------------------- 1 | import TextConfirmationDialog from '../components/TextConfirmationDialog.html' 2 | import { showDialog } from './showDialog.js' 3 | 4 | export default function showTextConfirmationDialog (options) { 5 | return showDialog(TextConfirmationDialog, Object.assign({ 6 | label: 'intl.confirm' 7 | }, options)) 8 | } 9 | -------------------------------------------------------------------------------- /src/routes/_components/dialog/creators/showWordFilterDialog.js: -------------------------------------------------------------------------------- 1 | import WordFilterDialog from '../components/WordFilterDialog.html' 2 | import { showDialog } from './showDialog.js' 3 | 4 | export default function showReportDialog ({ filter, instanceName }) { 5 | const label = filter ? 'intl.editFilter' : 'intl.addFilter' 6 | return showDialog(WordFilterDialog, { 7 | label, 8 | title: label, 9 | filter, 10 | instanceName 11 | }) 12 | } 13 | -------------------------------------------------------------------------------- /src/routes/_components/dialog/helpers/closeDialog.js: -------------------------------------------------------------------------------- 1 | import { emit } from '../../../_utils/eventBus.js' 2 | 3 | export function close () { 4 | const { id } = this.get() 5 | emit('closeDialog', id) 6 | } 7 | -------------------------------------------------------------------------------- /src/routes/_components/dialog/helpers/createDialogElement.js: -------------------------------------------------------------------------------- 1 | export function createDialogElement () { 2 | const div = document.createElement('div') 3 | div.setAttribute('class', 'modal-dialog') 4 | div.setAttribute('aria-hidden', 'true') 5 | document.body.appendChild(div) 6 | return div 7 | } 8 | -------------------------------------------------------------------------------- /src/routes/_components/dialog/helpers/createDialogId.js: -------------------------------------------------------------------------------- 1 | let count = -1 2 | 3 | export function createDialogId () { 4 | return ++count 5 | } 6 | -------------------------------------------------------------------------------- /src/routes/_components/dialog/helpers/onCreateDialog.js: -------------------------------------------------------------------------------- 1 | import { on } from '../../../_utils/eventBus.js' 2 | 3 | function onDestroy (thisId) { 4 | const { id } = this.get() 5 | if (id !== thisId) { 6 | return 7 | } 8 | this.destroy() 9 | } 10 | 11 | export function oncreate () { 12 | on('destroyDialog', this, onDestroy) 13 | } 14 | -------------------------------------------------------------------------------- /src/routes/_components/dialog/helpers/showDialog.js: -------------------------------------------------------------------------------- 1 | import { emit } from '../../../_utils/eventBus.js' 2 | 3 | export function show () { 4 | const { id } = this.get() 5 | emit('showDialog', id) 6 | } 7 | -------------------------------------------------------------------------------- /src/routes/_components/search/HashtagSearchResult.html: -------------------------------------------------------------------------------- 1 | 2 | {'#' + hashtag.name} 3 | 4 | 6 | 14 | -------------------------------------------------------------------------------- /src/routes/_components/search/StatusSearchResult.html: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 8 | -------------------------------------------------------------------------------- /src/routes/_components/settings/UISettingsStyles.html: -------------------------------------------------------------------------------- 1 | 21 | -------------------------------------------------------------------------------- /src/routes/_components/settings/instance/GenericInstanceSettingsStyle.html: -------------------------------------------------------------------------------- 1 | 11 | -------------------------------------------------------------------------------- /src/routes/_components/timeline/MoreHeaderVirtualWrapper.html: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /src/routes/_database/clear.js: -------------------------------------------------------------------------------- 1 | import { accountsCache, clearCache, metaCache, statusesCache } from './cache.js' 2 | import { deleteDatabase } from './databaseLifecycle.js' 3 | 4 | export async function clearDatabaseForInstance (instanceName) { 5 | clearCache(statusesCache, instanceName) 6 | clearCache(accountsCache, instanceName) 7 | clearCache(metaCache, instanceName) 8 | await deleteDatabase(instanceName) 9 | } 10 | -------------------------------------------------------------------------------- /src/routes/_database/database.js: -------------------------------------------------------------------------------- 1 | import { asyncDatabase } from './asyncDatabase.js' 2 | export { asyncDatabase as database } 3 | -------------------------------------------------------------------------------- /src/routes/_database/timelines/cacheStatus.js: -------------------------------------------------------------------------------- 1 | import { 2 | accountsCache, setInCache, statusesCache 3 | } from '../cache.js' 4 | 5 | export function cacheStatus (status, instanceName) { 6 | setInCache(statusesCache, instanceName, status.id, status) 7 | setInCache(accountsCache, instanceName, status.account.id, status.account) 8 | if (status.reblog) { 9 | setInCache(accountsCache, instanceName, status.reblog.account.id, status.reblog.account) 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/routes/_database/timelines/fetchAccount.js: -------------------------------------------------------------------------------- 1 | export function fetchAccount (accountsStore, id, callback) { 2 | accountsStore.get(id).onsuccess = e => { 3 | callback(e.target.result) 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /src/routes/_database/utils.js: -------------------------------------------------------------------------------- 1 | export function deleteAll (store, index, keyRange) { 2 | index.getAllKeys(keyRange).onsuccess = e => { 3 | for (const result of e.target.result) { 4 | store.delete(result) 5 | } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/routes/_pages/accounts/[accountId]/index.html: -------------------------------------------------------------------------------- 1 | 2 | 11 | -------------------------------------------------------------------------------- /src/routes/_pages/accounts/[accountId]/media.html: -------------------------------------------------------------------------------- 1 | 2 | 11 | -------------------------------------------------------------------------------- /src/routes/_pages/accounts/[accountId]/with_replies.html: -------------------------------------------------------------------------------- 1 | 2 | 11 | -------------------------------------------------------------------------------- /src/routes/_static/autosuggest.js: -------------------------------------------------------------------------------- 1 | export const SEARCH_RESULTS_LIMIT = 4 2 | -------------------------------------------------------------------------------- /src/routes/_static/blocks.js: -------------------------------------------------------------------------------- 1 | export const DOMAIN_BLOCKS = [ 2 | 'gab.com', 3 | 'gab.ai' 4 | ] 5 | -------------------------------------------------------------------------------- /src/routes/_static/blurhash.js: -------------------------------------------------------------------------------- 1 | export const BLURHASH_RESOLUTION = 32 2 | -------------------------------------------------------------------------------- /src/routes/_static/database.js: -------------------------------------------------------------------------------- 1 | export const CLEANUP_TIME_AGO = 5 * 24 * 60 * 60 * 1000 // five days ago 2 | export const CLEANUP_DELAY = 5 * 60 * 1000 // five minutes 3 | -------------------------------------------------------------------------------- /src/routes/_static/fonts.js: -------------------------------------------------------------------------------- 1 | // same as the one used for SemaphoreEmoji 2 | export const FONT_FAMILY = '"Twemoji Mozilla","Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol",' + 3 | '"Noto Color Emoji","EmojiOne Color","Android Emoji",sans-serif' 4 | -------------------------------------------------------------------------------- /src/routes/_static/instanceSettings.js: -------------------------------------------------------------------------------- 1 | export const HOME_REBLOGS = 'homeReblogs' 2 | export const HOME_REPLIES = 'homeReplies' 3 | 4 | export const NOTIFICATION_REBLOGS = 'notificationReblogs' 5 | export const NOTIFICATION_FAVORITES = 'notificationFavs' 6 | export const NOTIFICATION_FOLLOWS = 'notificationFollows' 7 | export const NOTIFICATION_MENTIONS = 'notificationMentions' 8 | export const NOTIFICATION_POLLS = 'notificationPolls' 9 | export const NOTIFICATION_SUBSCRIPTIONS = 'notificationSubscriptions' 10 | -------------------------------------------------------------------------------- /src/routes/_static/intl.js: -------------------------------------------------------------------------------- 1 | export const DEFAULT_LOCALE = 'en-US' 2 | export const LOCALE = process.env.LOCALE || DEFAULT_LOCALE 3 | -------------------------------------------------------------------------------- /src/routes/_static/pages.js: -------------------------------------------------------------------------------- 1 | export const PAGE_HISTORY_SIZE = 10 2 | -------------------------------------------------------------------------------- /src/routes/_static/share.js: -------------------------------------------------------------------------------- 1 | export const WEB_SHARE_TARGET_DATA_IDB_KEY = 'web-share-data' 2 | -------------------------------------------------------------------------------- /src/routes/_static/timelines.js: -------------------------------------------------------------------------------- 1 | export const TIMELINE_BATCH_SIZE = 20 2 | 3 | export const timelines = { 4 | home: { name: 'home', label: 'intl.home' }, 5 | local: { name: 'local', label: 'intl.local' }, 6 | federated: { name: 'federated', label: 'intl.federated' } 7 | } 8 | -------------------------------------------------------------------------------- /src/routes/_store/computations/computations.js: -------------------------------------------------------------------------------- 1 | import { instanceComputations } from './instanceComputations.js' 2 | import { navComputations } from './navComputations.js' 3 | 4 | export function computations (store) { 5 | instanceComputations(store) 6 | navComputations(store) 7 | } 8 | -------------------------------------------------------------------------------- /src/routes/_store/loggedInStoreExtensions.js: -------------------------------------------------------------------------------- 1 | import { loggedInComputations } from './computations/loggedInComputations.js' 2 | import { loggedInObservers } from './observers/loggedInObservers.js' 3 | import { loggedInMixins } from './mixins/loggedInMixins.js' 4 | 5 | console.log('imported logged in observers and computations') 6 | loggedInMixins() 7 | loggedInComputations() 8 | loggedInObservers() 9 | -------------------------------------------------------------------------------- /src/routes/_store/mixins/loggedInMixins.js: -------------------------------------------------------------------------------- 1 | import { timelineMixins } from './timelineMixins.js' 2 | import { statusMixins } from './statusMixins.js' 3 | import { autosuggestMixins } from './autosuggestMixins.js' 4 | import { composeMixins } from './composeMixins.js' 5 | import { SemaphoreStore as Store } from '../store.js' 6 | 7 | export function loggedInMixins () { 8 | composeMixins(Store) 9 | timelineMixins(Store) 10 | statusMixins(Store) 11 | autosuggestMixins(Store) 12 | } 13 | -------------------------------------------------------------------------------- /src/routes/_store/mixins/mixins.js: -------------------------------------------------------------------------------- 1 | import { instanceMixins } from './instanceMixins.js' 2 | 3 | export function mixins (Store) { 4 | instanceMixins(Store) 5 | } 6 | -------------------------------------------------------------------------------- /src/routes/_store/observers/bottomNavObservers.js: -------------------------------------------------------------------------------- 1 | const style = process.browser && document.getElementById('theBottomNavStyle') 2 | 3 | export function bottomNavObservers (store) { 4 | if (!process.browser) { 5 | return 6 | } 7 | 8 | store.observe('bottomNav', bottomNav => { 9 | // disables or enables the style 10 | style.setAttribute('media', bottomNav ? 'all' : 'only x') // disable or enable the style 11 | }, { init: false }) // init: false because the inline script takes care of it 12 | } 13 | -------------------------------------------------------------------------------- /src/routes/_store/observers/logOutObservers.js: -------------------------------------------------------------------------------- 1 | import { onUserIsLoggedOut } from '../../_actions/onUserIsLoggedOut.js' 2 | 3 | export function logOutObservers (store) { 4 | if (!process.browser) { 5 | return 6 | } 7 | store.observe('isUserLoggedIn', isUserLoggedIn => { 8 | if (!isUserLoggedIn) { 9 | onUserIsLoggedOut() 10 | } 11 | }) 12 | } 13 | -------------------------------------------------------------------------------- /src/routes/_store/observers/pageVisibilityObservers.js: -------------------------------------------------------------------------------- 1 | export function pageVisibilityObservers (store) { 2 | if (!process.browser) { 3 | return 4 | } 5 | 6 | document.addEventListener('visibilitychange', () => { 7 | store.set({ pageVisibilityHidden: document.hidden }) 8 | }) 9 | } 10 | -------------------------------------------------------------------------------- /src/routes/_store/observers/touchObservers.js: -------------------------------------------------------------------------------- 1 | export function touchObservers (store) { 2 | if (!process.browser) { 3 | return 4 | } 5 | 6 | const onTouch = () => { 7 | store.set({ isUserTouching: true }) 8 | window.removeEventListener('touchstart', onTouch) 9 | } 10 | 11 | window.addEventListener('touchstart', onTouch, { passive: true }) 12 | } 13 | -------------------------------------------------------------------------------- /src/routes/_thirdparty/lodash/objects.src.js: -------------------------------------------------------------------------------- 1 | export { isEqual, difference, uniqBy } from 'lodash-es' 2 | -------------------------------------------------------------------------------- /src/routes/_thirdparty/lodash/timers.src.js: -------------------------------------------------------------------------------- 1 | export { debounce, throttle } from 'lodash-es' 2 | -------------------------------------------------------------------------------- /src/routes/_utils/announceAriaLivePolite.js: -------------------------------------------------------------------------------- 1 | const ariaLiveElement = process.browser && document.getElementById('theAriaLive') 2 | 3 | export function announceAriaLivePolite (text) { 4 | ariaLiveElement.textContent = text 5 | } 6 | -------------------------------------------------------------------------------- /src/routes/_utils/asyncModules/importArrowKeyNavigation.js: -------------------------------------------------------------------------------- 1 | export const importArrowKeyNavigation = () => import( 2 | 'arrow-key-navigation' 3 | ) 4 | -------------------------------------------------------------------------------- /src/routes/_utils/asyncModules/importComposeBox.js: -------------------------------------------------------------------------------- 1 | export const importComposeBox = () => import( 2 | '../../_components/compose/ComposeBox.html' 3 | ).then(mod => mod.default) 4 | -------------------------------------------------------------------------------- /src/routes/_utils/asyncModules/importDatabase.js: -------------------------------------------------------------------------------- 1 | export const importDatabase = () => import( 2 | '../../_database/databaseApis.js' 3 | ) 4 | -------------------------------------------------------------------------------- /src/routes/_utils/asyncModules/importEmojiMart.js: -------------------------------------------------------------------------------- 1 | export const importEmojiMart = () => import( 2 | '../../_react/createEmojiMartPickerFromData.js' 3 | ).then(mod => mod.default) 4 | -------------------------------------------------------------------------------- /src/routes/_utils/asyncModules/importList.js: -------------------------------------------------------------------------------- 1 | export const importList = () => import( 2 | '../../_components/list/List.html' 3 | ).then(mod => mod.default) 4 | -------------------------------------------------------------------------------- /src/routes/_utils/asyncModules/importLoggedInStoreExtensions.js: -------------------------------------------------------------------------------- 1 | export const importLoggedInStoreExtensions = () => import( 2 | '../../_store/loggedInStoreExtensions.js' 3 | ) 4 | -------------------------------------------------------------------------------- /src/routes/_utils/asyncModules/importNavShortcuts.js: -------------------------------------------------------------------------------- 1 | export const importNavShortcuts = () => import( 2 | '../../_components/NavShortcuts.html' 3 | ).then(mod => mod.default) 4 | -------------------------------------------------------------------------------- /src/routes/_utils/asyncModules/importNotificationVirtualListItem.js: -------------------------------------------------------------------------------- 1 | export const importNotificationVirtualListItem = () => import( 2 | '../../_components/timeline/NotificationVirtualListItem.html' 3 | ).then(mod => mod.default) 4 | -------------------------------------------------------------------------------- /src/routes/_utils/asyncModules/importPageLifecycle.js: -------------------------------------------------------------------------------- 1 | export const importPageLifecycle = () => import( 2 | 'page-lifecycle/dist/lifecycle.mjs' 3 | ).then(mod => mod.default) 4 | -------------------------------------------------------------------------------- /src/routes/_utils/asyncModules/importSnackbar.js: -------------------------------------------------------------------------------- 1 | export const importSnackbar = () => import( 2 | '../../_components/snackbar/Snackbar.html' 3 | ).then(mod => mod.default) 4 | -------------------------------------------------------------------------------- /src/routes/_utils/asyncModules/importStatusVirtualListItem.js: -------------------------------------------------------------------------------- 1 | export const importStatusVirtualListItem = () => import( 2 | '../../_components/timeline/StatusVirtualListItem.html' 3 | ).then(mod => mod.default) 4 | -------------------------------------------------------------------------------- /src/routes/_utils/asyncModules/importTesseractWorker.js: -------------------------------------------------------------------------------- 1 | export const importTesseractWorker = () => import( 2 | '../../_utils/tesseractWorker.js' 3 | ).then(mod => mod.default) 4 | -------------------------------------------------------------------------------- /src/routes/_utils/asyncModules/importTimeline.js: -------------------------------------------------------------------------------- 1 | export const importTimeline = () => import( 2 | '../../_components/timeline/Timeline.html' 3 | ).then(mod => mod.default) 4 | -------------------------------------------------------------------------------- /src/routes/_utils/asyncModules/importToast.js: -------------------------------------------------------------------------------- 1 | export const importToast = () => import( 2 | '../../_components/toast/Toast.html' 3 | ).then(mod => mod.default) 4 | -------------------------------------------------------------------------------- /src/routes/_utils/asyncModules/importVirtualList.js: -------------------------------------------------------------------------------- 1 | export const importVirtualList = () => import( 2 | '../../_components/virtualList/VirtualList.html' 3 | ).then(mod => mod.default) 4 | -------------------------------------------------------------------------------- /src/routes/_utils/asyncModules/importVirtualListStore.js: -------------------------------------------------------------------------------- 1 | export const importVirtualListStore = () => import( 2 | '../../_components/virtualList/virtualListStore.js' 3 | ) 4 | -------------------------------------------------------------------------------- /src/routes/_utils/classname.js: -------------------------------------------------------------------------------- 1 | export function classname () { 2 | let res = '' 3 | const len = arguments.length 4 | let i = -1 5 | while (++i < len) { 6 | const item = arguments[i] 7 | if (item) { 8 | if (res) { 9 | res += ' ' 10 | } 11 | res += item 12 | } 13 | } 14 | return res 15 | } 16 | -------------------------------------------------------------------------------- /src/routes/_utils/convertCustomEmojiToEmojiPickerFormat.js: -------------------------------------------------------------------------------- 1 | export function convertCustomEmojiToEmojiPickerFormat (customEmoji, autoplayGifs) { 2 | if (!customEmoji) { 3 | return [] 4 | } 5 | return customEmoji.filter(emoji => emoji.visible_in_picker).map(emoji => ({ 6 | name: emoji.shortcode, 7 | shortcodes: [emoji.shortcode], 8 | url: autoplayGifs ? emoji.url : emoji.static_url, 9 | category: emoji.category 10 | })) 11 | } 12 | -------------------------------------------------------------------------------- /src/routes/_utils/coordsToPercent.js: -------------------------------------------------------------------------------- 1 | export const coordsToPercent = coord => ((1 + coord) / 2) * 100 2 | 3 | export const percentToCoords = percent => ((percent / 100) * 2) - 1 4 | -------------------------------------------------------------------------------- /src/routes/_utils/createStatusOrNotificationUuid.js: -------------------------------------------------------------------------------- 1 | export function createStatusOrNotificationUuid (currentInstance, timelineType, timelineValue, notificationId, statusId) { 2 | return `${currentInstance}/${timelineType}/${timelineValue}/${notificationId || ''}/${statusId || ''}` 3 | } 4 | -------------------------------------------------------------------------------- /src/routes/_utils/decodeImage.js: -------------------------------------------------------------------------------- 1 | export function decodeImage (img) { 2 | if (typeof img.decode === 'function' && !img.src.startsWith('data:image/png;base64,')) { 3 | return img.decode() 4 | } 5 | 6 | return new Promise((resolve, reject) => { 7 | img.onload = resolve 8 | img.onerror = reject 9 | }) 10 | } 11 | -------------------------------------------------------------------------------- /src/routes/_utils/doubleRAF.js: -------------------------------------------------------------------------------- 1 | export function doubleRAF (fn) { 2 | requestAnimationFrame(() => requestAnimationFrame(fn)) 3 | } 4 | -------------------------------------------------------------------------------- /src/routes/_utils/emojiRegex.js: -------------------------------------------------------------------------------- 1 | import emojiRegex from 'emoji-regex' 2 | import { thunk } from './thunk.js' 3 | 4 | export const getEmojiRegex = thunk(emojiRegex) 5 | -------------------------------------------------------------------------------- /src/routes/_utils/getIdFromItemSummaries.js: -------------------------------------------------------------------------------- 1 | export function getFirstIdFromItemSummaries (itemSummaries) { 2 | return itemSummaries && 3 | itemSummaries[0] && 4 | itemSummaries[0].id 5 | } 6 | 7 | export function getLastIdFromItemSummaries (itemSummaries) { 8 | return itemSummaries && 9 | itemSummaries[itemSummaries.length - 1] && 10 | itemSummaries[itemSummaries.length - 1].id 11 | } 12 | -------------------------------------------------------------------------------- /src/routes/_utils/getImageNativeDimensions.js: -------------------------------------------------------------------------------- 1 | import { decodeImage } from './decodeImage.js' 2 | 3 | export async function getImageNativeDimensions (url) { 4 | const img = document.createElement('img') 5 | img.src = url 6 | await decodeImage(img) 7 | return { 8 | width: img.naturalWidth, 9 | height: img.naturalHeight 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/routes/_utils/handleRegex.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | import { thunk } from './thunk.js' 3 | 4 | export const handleRegex = thunk(() => /(^|[^\/\w])@(([a-z0-9_]+)@[a-z0-9\.\-]+[a-z0-9]+)/ig) 5 | /* eslint-enable */ 6 | -------------------------------------------------------------------------------- /src/routes/_utils/isDarkTheme.js: -------------------------------------------------------------------------------- 1 | import { themes } from '../_static/themes.js' 2 | import { DEFAULT_THEME } from './themeEngine.js' 3 | 4 | export function isDarkTheme (themeName) { 5 | const theme = themes.find(_ => _.name === themeName) || themes.find(_ => _.name === DEFAULT_THEME) 6 | return theme.dark 7 | } 8 | -------------------------------------------------------------------------------- /src/routes/_utils/loadCSS.js: -------------------------------------------------------------------------------- 1 | export function loadCSS (href) { 2 | const existingLink = document.querySelector(`link[href="${href}"]`) 3 | 4 | if (existingLink) { 5 | return 6 | } 7 | const link = document.createElement('link') 8 | link.rel = 'stylesheet' 9 | link.href = href 10 | 11 | document.head.appendChild(link) 12 | } 13 | -------------------------------------------------------------------------------- /src/routes/_utils/loadingMask.js: -------------------------------------------------------------------------------- 1 | import LoadingMask from '../_components/LoadingMask.html' 2 | 3 | let loadingMask 4 | 5 | if (process.browser) { 6 | loadingMask = new LoadingMask({ 7 | target: document.querySelector('#loading-mask') 8 | }) 9 | if (process.env.NODE_ENV !== 'production') { 10 | window.loadingMask = loadingMask // for debugging 11 | } 12 | } else { 13 | loadingMask = { 14 | } 15 | } 16 | 17 | export { loadingMask } 18 | -------------------------------------------------------------------------------- /src/routes/_utils/massageStatusPlainText.js: -------------------------------------------------------------------------------- 1 | // Glitch Social can have statuses that just contain blockquote/ol/ul, no p 2 | const STARTING_TAG_REGEX = /^<(?:p|blockquote|ol|ul)>/i 3 | 4 | export function massageStatusPlainText (text) { 5 | // GNU Social and Pleroma don't add

tags, so wrap them 6 | if (text && !STARTING_TAG_REGEX.test(text)) { 7 | text = `

${text}

` 8 | } 9 | return text 10 | } 11 | -------------------------------------------------------------------------------- /src/routes/_utils/massageUserText.js: -------------------------------------------------------------------------------- 1 | import { emojifyText } from './emojifyText.js' 2 | import { massageStatusPlainText } from './massageStatusPlainText.js' 3 | 4 | export function massageUserText (text, emojis, $autoplayGifs) { 5 | text = text || '' 6 | text = emojifyText(text, emojis, $autoplayGifs) 7 | text = massageStatusPlainText(text) 8 | return text 9 | } 10 | -------------------------------------------------------------------------------- /src/routes/_utils/normalizePageName.js: -------------------------------------------------------------------------------- 1 | // return the page name for purposes of figuring out which part of the nav 2 | // is highlighted/selected 3 | export function normalizePageName (page) { 4 | // notifications/mentions and settings/foo are a special case; they show as selected in the nav 5 | return page === 'notifications/mentions' 6 | ? 'notifications' 7 | : (page && page.startsWith('settings/')) 8 | ? 'settings' 9 | : page 10 | } 11 | -------------------------------------------------------------------------------- /src/routes/_utils/once.js: -------------------------------------------------------------------------------- 1 | // svelte helper to add a .once() method similar to .on, but only fires once 2 | 3 | export function once (eventName, callback) { 4 | const listener = this.on(eventName, eventValue => { 5 | listener.cancel() 6 | callback(eventValue) 7 | }) 8 | } 9 | -------------------------------------------------------------------------------- /src/routes/_utils/polyfills/loadNonCriticalPolyfills.js: -------------------------------------------------------------------------------- 1 | import { importFocusVisible } from './asyncPolyfills.js' 2 | import { supportsFocusVisible } from '../supportsFocusVisible.js' 3 | 4 | export function loadNonCriticalPolyfills () { 5 | return Promise.all([ 6 | !supportsFocusVisible() && importFocusVisible() 7 | ]) 8 | } 9 | -------------------------------------------------------------------------------- /src/routes/_utils/queueMicrotask.js: -------------------------------------------------------------------------------- 1 | // via https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/queueMicrotask 2 | function queueMicrotaskPolyfill (callback) { 3 | Promise.resolve() 4 | .then(callback) 5 | .catch(e => setTimeout(() => { throw e })) 6 | } 7 | 8 | const qM = typeof queueMicrotask === 'function' ? queueMicrotask : queueMicrotaskPolyfill 9 | 10 | export { 11 | qM as queueMicrotask 12 | } 13 | -------------------------------------------------------------------------------- /src/routes/_utils/removeEmoji.js: -------------------------------------------------------------------------------- 1 | import { replaceAll } from './strings.js' 2 | import { replaceEmoji } from './replaceEmoji.js' 3 | 4 | export function removeEmoji (text, emojis) { 5 | // remove custom emoji 6 | if (emojis) { 7 | for (const emoji of emojis) { 8 | const shortcodeWithColons = `:${emoji.shortcode}:` 9 | text = replaceAll(text, shortcodeWithColons, '') 10 | } 11 | } 12 | // remove native emoji 13 | return replaceEmoji(text, () => '').trim() 14 | } 15 | -------------------------------------------------------------------------------- /src/routes/_utils/safeLocalStorage.js: -------------------------------------------------------------------------------- 1 | import localStorageMemory from 'localstorage-memory' 2 | import { testHasLocalStorage } from './testStorage.js' 3 | 4 | const safeLocalStorage = testHasLocalStorage() ? localStorage : localStorageMemory 5 | 6 | export { safeLocalStorage } 7 | -------------------------------------------------------------------------------- /src/routes/_utils/safeParse.js: -------------------------------------------------------------------------------- 1 | export function safeParse (str) { 2 | return !str ? undefined : (str === 'undefined' ? undefined : JSON.parse(str)) 3 | } 4 | -------------------------------------------------------------------------------- /src/routes/_utils/scrollToTop.js: -------------------------------------------------------------------------------- 1 | import { getScrollContainer } from './scrollContainer.js' 2 | import { smoothScroll } from './smoothScroll.js' 3 | 4 | export function scrollToTop (smooth) { 5 | const scroller = getScrollContainer() 6 | const { scrollTop } = scroller 7 | if (scrollTop === 0) { 8 | return false 9 | } 10 | if (smooth) { 11 | smoothScroll(scroller, 0, /* horizontal */ false, /* preferFast */ true) 12 | } else { 13 | scroller.scrollTop = 0 14 | } 15 | return true 16 | } 17 | -------------------------------------------------------------------------------- /src/routes/_utils/strings.js: -------------------------------------------------------------------------------- 1 | export function replaceAll (string, replacee, replacement) { 2 | if (!string.length || !replacee.length) { 3 | return string 4 | } 5 | let idx 6 | let pos = 0 7 | while (true) { 8 | idx = string.indexOf(replacee, pos) 9 | if (idx === -1) { 10 | break 11 | } 12 | string = string.substring(0, idx) + replacement + string.substring(idx + replacee.length) 13 | pos = idx + replacement.length 14 | } 15 | return string 16 | } 17 | -------------------------------------------------------------------------------- /src/routes/_utils/supportsFocusVisible.js: -------------------------------------------------------------------------------- 1 | import { thunk } from './thunk.js' 2 | import { supportsSelector } from './supportsSelector.js' 3 | import { isFirefoxPre90 } from './userAgent/isFirefoxPre90.js' 4 | 5 | // Disabling in Firefox <90 due to bugs: 6 | // https://bugzilla.mozilla.org/show_bug.cgi?id=1699154 7 | // https://bugzilla.mozilla.org/show_bug.cgi?id=1711057 8 | export const supportsFocusVisible = thunk(() => (!isFirefoxPre90() && supportsSelector(':focus-visible'))) 9 | -------------------------------------------------------------------------------- /src/routes/_utils/supportsSelector.js: -------------------------------------------------------------------------------- 1 | // See https://stackoverflow.com/a/8533927 2 | export function supportsSelector (selector) { 3 | const style = document.createElement('style') 4 | document.head.appendChild(style) 5 | try { 6 | style.sheet.insertRule(selector + '{}', 0) 7 | } catch (e) { 8 | return false 9 | } finally { 10 | document.head.removeChild(style) 11 | } 12 | return true 13 | } 14 | -------------------------------------------------------------------------------- /src/routes/_utils/thunk.js: -------------------------------------------------------------------------------- 1 | // Run a function once, then cache the result and return the cached result thereafter 2 | export function thunk (func) { 3 | let cached 4 | let runOnce 5 | return () => { 6 | if (!runOnce) { 7 | cached = func() 8 | runOnce = true 9 | } 10 | return cached 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/routes/_utils/urlIsCrossOrigin.js: -------------------------------------------------------------------------------- 1 | export function urlIsCrossOrigin (href) { 2 | try { 3 | return new URL(href, location.href).origin !== location.origin 4 | } catch (e) { 5 | console.error('Ignoring malformed URL', href) 6 | return true 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/routes/_utils/urlRegex.js: -------------------------------------------------------------------------------- 1 | import { thunk } from './thunk.js' 2 | 3 | export const urlRegex = thunk(() => { 4 | // this is provided at build time to avoid having a lot of runtime code just to build 5 | // a static regex 6 | return process.env.URL_REGEX 7 | }) 8 | -------------------------------------------------------------------------------- /src/routes/_utils/userAgent/isChrome.js: -------------------------------------------------------------------------------- 1 | import { thunk } from '../thunk.js' 2 | 3 | export const isChrome = thunk(() => process.browser && /Chrome/.test(navigator.userAgent)) 4 | -------------------------------------------------------------------------------- /src/routes/_utils/userAgent/isChromePre87.js: -------------------------------------------------------------------------------- 1 | import { isChrome } from './isChrome.js' 2 | import { thunk } from '../thunk.js' 3 | 4 | // https://caniuse.com/cookie-store-api 5 | export const isChromePre87 = thunk(() => (process.browser && isChrome() && typeof cookieStore === 'undefined')) 6 | -------------------------------------------------------------------------------- /src/routes/_utils/userAgent/isFirefoxPre90.js: -------------------------------------------------------------------------------- 1 | import { thunk } from '../thunk.js' 2 | 3 | export const isFirefoxPre90 = thunk(() => { 4 | return process.browser && 5 | // https://stackoverflow.com/a/9851769/680742 6 | typeof InstallTrigger !== 'undefined' && 7 | // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/at#browser_compatibility 8 | !Array.prototype.at 9 | }) 10 | -------------------------------------------------------------------------------- /src/routes/_utils/userAgent/isIOS.js: -------------------------------------------------------------------------------- 1 | import { thunk } from '../thunk.js' 2 | 3 | export const isIOS = thunk(() => process.browser && /iP(?:hone|ad|od)/.test(navigator.userAgent)) 4 | -------------------------------------------------------------------------------- /src/routes/_utils/userAgent/isIOSPre12Point2.js: -------------------------------------------------------------------------------- 1 | // IntersectionObserver introduced in iOS 12.2 https://caniuse.com/#feat=intersectionobserver 2 | import { thunk } from '../thunk.js' 3 | import { isIOS } from './isIOS.js' 4 | 5 | export const isIOSPre12Point2 = thunk(() => process.browser && isIOS() && 6 | !(typeof IntersectionObserver === 'function' && 7 | IntersectionObserver.toString().includes('[native code]'))) 8 | -------------------------------------------------------------------------------- /src/routes/_utils/userAgent/isIOSPre13.js: -------------------------------------------------------------------------------- 1 | // PointerEvent introduced in iOS 13 https://caniuse.com/#feat=pointer 2 | import { thunk } from '../thunk.js' 3 | import { isIOS } from '../userAgent/isIOS.js' 4 | 5 | export const isIOSPre13 = thunk(() => process.browser && isIOS() && 6 | !(typeof PointerEvent === 'function' && 7 | PointerEvent.toString().includes('[native code]'))) 8 | -------------------------------------------------------------------------------- /src/routes/_utils/userAgent/isKaiOS.js: -------------------------------------------------------------------------------- 1 | import { thunk } from '../thunk.js' 2 | 3 | export const isKaiOS = thunk(() => process.browser && /KAIOS/.test(navigator.userAgent)) 4 | -------------------------------------------------------------------------------- /src/routes/_utils/userAgent/isMac.js: -------------------------------------------------------------------------------- 1 | import { thunk } from '../thunk.js' 2 | 3 | export const isMac = thunk(() => process.browser && /mac/i.test(navigator.platform)) 4 | -------------------------------------------------------------------------------- /src/routes/_utils/userAgent/isMobile.js: -------------------------------------------------------------------------------- 1 | import { thunk } from '../thunk.js' 2 | 3 | export const isMobile = thunk(() => process.browser && navigator.userAgent.match(/(?:iPhone|iPod|iPad|Android|KAIOS)/)) 4 | -------------------------------------------------------------------------------- /src/routes/_utils/userAgent/isWebKit.js: -------------------------------------------------------------------------------- 1 | import { thunk } from '../thunk.js' 2 | 3 | export const isWebKit = thunk(() => process.browser && typeof webkitIndexedDB !== 'undefined') 4 | -------------------------------------------------------------------------------- /src/routes/blocked.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | <LazyPage {pageComponent} {params} /> 4 | 5 | <script> 6 | import Title from './_components/Title.html' 7 | import LazyPage from './_components/LazyPage.html' 8 | import pageComponent from './_pages/blocked.html' 9 | 10 | export default { 11 | components: { 12 | 13 | Title, 14 | LazyPage 15 | }, 16 | data: () => ({ 17 | pageComponent 18 | }) 19 | } 20 | </script> 21 | -------------------------------------------------------------------------------- /src/routes/bookmarks.html: -------------------------------------------------------------------------------- 1 | <Title name="{intl.bookmarks}" /> 2 | 3 | <LazyPage {pageComponent} {params} /> 4 | 5 | <script> 6 | import Title from './_components/Title.html' 7 | import LazyPage from './_components/LazyPage.html' 8 | import pageComponent from './_pages/bookmarks.html' 9 | 10 | export default { 11 | components: { 12 | 13 | Title, 14 | LazyPage 15 | }, 16 | data: () => ({ 17 | pageComponent 18 | }) 19 | } 20 | </script> 21 | -------------------------------------------------------------------------------- /src/routes/community/index.html: -------------------------------------------------------------------------------- 1 | <Title name="{intl.community}" /> 2 | 3 | <LazyPage {pageComponent} {params} /> 4 | 5 | <script> 6 | import Title from '../_components/Title.html' 7 | import LazyPage from '../_components/LazyPage.html' 8 | import pageComponent from '../_pages/community/index.html' 9 | 10 | export default { 11 | components: { 12 | 13 | Title, 14 | LazyPage 15 | }, 16 | data: () => ({ 17 | pageComponent 18 | }) 19 | } 20 | </script> 21 | -------------------------------------------------------------------------------- /src/routes/direct.html: -------------------------------------------------------------------------------- 1 | <Title name="{intl.directMessages}" /> 2 | 3 | <LazyPage {pageComponent} {params} /> 4 | 5 | <script> 6 | import Title from './_components/Title.html' 7 | import LazyPage from './_components/LazyPage.html' 8 | import pageComponent from './_pages/direct.html' 9 | 10 | export default { 11 | components: { 12 | 13 | Title, 14 | LazyPage 15 | }, 16 | data: () => ({ 17 | pageComponent 18 | }) 19 | } 20 | </script> 21 | -------------------------------------------------------------------------------- /src/routes/favorites.html: -------------------------------------------------------------------------------- 1 | <Title name="{intl.favorites}" /> 2 | 3 | <LazyPage {pageComponent} {params} /> 4 | 5 | <script> 6 | import Title from './_components/Title.html' 7 | import LazyPage from './_components/LazyPage.html' 8 | import pageComponent from './_pages/favorites.html' 9 | 10 | export default { 11 | components: { 12 | 13 | Title, 14 | LazyPage 15 | }, 16 | data: () => ({ 17 | pageComponent 18 | }) 19 | } 20 | </script> 21 | -------------------------------------------------------------------------------- /src/routes/federated.html: -------------------------------------------------------------------------------- 1 | <Title name="{intl.federated}" /> 2 | 3 | <LazyPage {pageComponent} {params} /> 4 | 5 | <script> 6 | import Title from './_components/Title.html' 7 | import LazyPage from './_components/LazyPage.html' 8 | import pageComponent from './_pages/federated.html' 9 | 10 | export default { 11 | components: { 12 | 13 | Title, 14 | LazyPage 15 | }, 16 | data: () => ({ 17 | pageComponent 18 | }) 19 | } 20 | </script> 21 | -------------------------------------------------------------------------------- /src/routes/index.html: -------------------------------------------------------------------------------- 1 | <Title name="{intl.home}" /> 2 | 3 | <LazyPage {pageComponent} {params} /> 4 | 5 | <script> 6 | import Title from './_components/Title.html' 7 | import LazyPage from './_components/LazyPage.html' 8 | import pageComponent from './_pages/index.html' 9 | 10 | export default { 11 | components: { 12 | 13 | Title, 14 | LazyPage 15 | }, 16 | data: () => ({ 17 | pageComponent 18 | }) 19 | } 20 | </script> 21 | -------------------------------------------------------------------------------- /src/routes/lists/[listId].html: -------------------------------------------------------------------------------- 1 | <Title name="{intl.list}" /> 2 | 3 | <LazyPage {pageComponent} {params} /> 4 | 5 | <script> 6 | import Title from '../_components/Title.html' 7 | import LazyPage from '../_components/LazyPage.html' 8 | import pageComponent from '../_pages/lists/[listId].html' 9 | 10 | export default { 11 | components: { 12 | 13 | Title, 14 | LazyPage 15 | }, 16 | data: () => ({ 17 | pageComponent 18 | }) 19 | } 20 | </script> 21 | -------------------------------------------------------------------------------- /src/routes/local.html: -------------------------------------------------------------------------------- 1 | <Title name="{intl.local}" /> 2 | 3 | <LazyPage {pageComponent} {params} /> 4 | 5 | <script> 6 | import Title from './_components/Title.html' 7 | import LazyPage from './_components/LazyPage.html' 8 | import pageComponent from './_pages/local.html' 9 | 10 | export default { 11 | components: { 12 | 13 | Title, 14 | LazyPage 15 | }, 16 | data: () => ({ 17 | pageComponent 18 | }) 19 | } 20 | </script> 21 | -------------------------------------------------------------------------------- /src/routes/muted.html: -------------------------------------------------------------------------------- 1 | <Title name="{intl.mutedUsers}" /> 2 | 3 | <LazyPage {pageComponent} {params} /> 4 | 5 | <script> 6 | import Title from './_components/Title.html' 7 | import LazyPage from './_components/LazyPage.html' 8 | import pageComponent from './_pages/muted.html' 9 | 10 | export default { 11 | components: { 12 | 13 | Title, 14 | LazyPage 15 | }, 16 | data: () => ({ 17 | pageComponent 18 | }) 19 | } 20 | </script> 21 | -------------------------------------------------------------------------------- /src/routes/notifications/index.html: -------------------------------------------------------------------------------- 1 | <Title name="{intl.notifications}" /> 2 | 3 | <LazyPage {pageComponent} {params} /> 4 | 5 | <script> 6 | import Title from '../_components/Title.html' 7 | import LazyPage from '../_components/LazyPage.html' 8 | import pageComponent from '../_pages/notifications/index.html' 9 | 10 | export default { 11 | components: { 12 | 13 | Title, 14 | LazyPage 15 | }, 16 | data: () => ({ 17 | pageComponent 18 | }) 19 | } 20 | </script> 21 | -------------------------------------------------------------------------------- /src/routes/notifications/mentions.html: -------------------------------------------------------------------------------- 1 | <Title name="{intl.notifications}" /> 2 | 3 | <LazyPage {pageComponent} {params} /> 4 | 5 | <script> 6 | import Title from '../_components/Title.html' 7 | import LazyPage from '../_components/LazyPage.html' 8 | import pageComponent from '../_pages/notifications/mentions.html' 9 | 10 | export default { 11 | components: { 12 | 13 | Title, 14 | LazyPage 15 | }, 16 | data: () => ({ 17 | pageComponent 18 | }) 19 | } 20 | </script> 21 | -------------------------------------------------------------------------------- /src/routes/pinned.html: -------------------------------------------------------------------------------- 1 | <Title name="{intl.pinnedStatuses}" /> 2 | 3 | <LazyPage {pageComponent} {params} /> 4 | 5 | <script> 6 | import Title from './_components/Title.html' 7 | import LazyPage from './_components/LazyPage.html' 8 | import pageComponent from './_pages/pinned.html' 9 | 10 | export default { 11 | components: { 12 | 13 | Title, 14 | LazyPage 15 | }, 16 | data: () => ({ 17 | pageComponent 18 | }) 19 | } 20 | </script> 21 | -------------------------------------------------------------------------------- /src/routes/requests.html: -------------------------------------------------------------------------------- 1 | <Title name="{intl.followRequests}" /> 2 | 3 | <LazyPage {pageComponent} {params} /> 4 | 5 | <script> 6 | import Title from './_components/Title.html' 7 | import LazyPage from './_components/LazyPage.html' 8 | import pageComponent from './_pages/requests.html' 9 | 10 | export default { 11 | components: { 12 | 13 | Title, 14 | LazyPage 15 | }, 16 | data: () => ({ 17 | pageComponent 18 | }) 19 | } 20 | </script> 21 | -------------------------------------------------------------------------------- /src/routes/search.html: -------------------------------------------------------------------------------- 1 | <Title name="{intl.search}" /> 2 | 3 | <LazyPage {pageComponent} {params} /> 4 | 5 | <script> 6 | import Title from './_components/Title.html' 7 | import LazyPage from './_components/LazyPage.html' 8 | import pageComponent from './_pages/search.html' 9 | 10 | export default { 11 | components: { 12 | 13 | Title, 14 | LazyPage 15 | }, 16 | data: () => ({ 17 | pageComponent 18 | }) 19 | } 20 | </script> 21 | -------------------------------------------------------------------------------- /src/routes/settings/about.html: -------------------------------------------------------------------------------- 1 | <Title name="{intl.about}" settingsPage={true} /> 2 | 3 | <LazyPage {pageComponent} {params} /> 4 | 5 | <script> 6 | import Title from '../_components/Title.html' 7 | import LazyPage from '../_components/LazyPage.html' 8 | import pageComponent from '../_pages/settings/about.html' 9 | 10 | export default { 11 | components: { 12 | 13 | Title, 14 | LazyPage 15 | }, 16 | data: () => ({ 17 | pageComponent 18 | }) 19 | } 20 | </script> 21 | -------------------------------------------------------------------------------- /src/routes/settings/hotkeys.html: -------------------------------------------------------------------------------- 1 | <Title name="{intl.hotkeys}" settingsPage={true} /> 2 | 3 | <LazyPage {pageComponent} {params} /> 4 | 5 | <script> 6 | import Title from '../_components/Title.html' 7 | import LazyPage from '../_components/LazyPage.html' 8 | import pageComponent from '../_pages/settings/hotkeys.html' 9 | 10 | export default { 11 | components: { 12 | 13 | Title, 14 | LazyPage 15 | }, 16 | data: () => ({ 17 | pageComponent 18 | }) 19 | } 20 | </script> 21 | -------------------------------------------------------------------------------- /src/routes/settings/index.html: -------------------------------------------------------------------------------- 1 | <Title name="{intl.settings}" settingsPage={true} /> 2 | 3 | <LazyPage {pageComponent} {params} /> 4 | 5 | <script> 6 | import Title from '../_components/Title.html' 7 | import LazyPage from '../_components/LazyPage.html' 8 | import pageComponent from '../_pages/settings/index.html' 9 | 10 | export default { 11 | components: { 12 | 13 | Title, 14 | LazyPage 15 | }, 16 | data: () => ({ 17 | pageComponent 18 | }) 19 | } 20 | </script> 21 | -------------------------------------------------------------------------------- /src/routes/tags/[tagName].html: -------------------------------------------------------------------------------- 1 | <Title name="{intl.hashtag}" /> 2 | 3 | <LazyPage {pageComponent} {params} /> 4 | 5 | <script> 6 | import Title from '../_components/Title.html' 7 | import LazyPage from '../_components/LazyPage.html' 8 | import pageComponent from '../_pages/tags/[tagName].html' 9 | 10 | export default { 11 | components: { 12 | 13 | Title, 14 | LazyPage 15 | }, 16 | data: () => ({ 17 | pageComponent 18 | }) 19 | } 20 | </script> 21 | -------------------------------------------------------------------------------- /src/scss/themes/_dark_navbar.scss: -------------------------------------------------------------------------------- 1 | :root { 2 | --nav-bg: #{lighten($body-bg-color, 10%)}; 3 | --nav-a-bg-hover: #{lighten($body-bg-color, 25%)}; 4 | --nav-active-bg: #{lighten($body-bg-color, 35%)}; 5 | --nav-a-selected-bg: #{lighten($body-bg-color, 25%)}; 6 | --nav-a-selected-bg-hover: #{lighten($body-bg-color, 40%)}; 7 | --nav-a-selected-active-bg: #{lighten($body-bg-color, 50%)}; 8 | 9 | --button-primary-bg: #{darken($main-theme-color, 5%)}; 10 | } 11 | -------------------------------------------------------------------------------- /src/scss/themes/_dark_scrollbars.scss: -------------------------------------------------------------------------------- 1 | $scrollbar-face: #{lighten($main-theme-color, 5%)} !default; 2 | $scrollbar-face-hover: #{lighten($main-theme-color, 7%)} !default; 3 | $scrollbar-face-active: #{lighten($main-theme-color, 3%)} !default; 4 | $scrollbar-track: #{lighten($body-bg-color, 7%)} !default; 5 | 6 | @import "_scrollbars.scss"; -------------------------------------------------------------------------------- /src/scss/themes/_default.scss: -------------------------------------------------------------------------------- 1 | $main-theme-color: #6248CA; 2 | $body-bg-color: lighten($main-theme-color, 38%); 3 | $anchor-color: $main-theme-color; 4 | $main-text-color: #333; 5 | $border-color: #dadada; 6 | $main-bg-color: white; 7 | $secondary-text-color: white; 8 | $toast-border: #fafafa; 9 | $toast-bg: #333; 10 | $focus-outline: lighten($main-theme-color, 30%); 11 | $compose-background: lighten($main-theme-color, 32%); 12 | 13 | @import "_base.scss"; 14 | @import "_light_scrollbars.scss"; -------------------------------------------------------------------------------- /src/scss/themes/_light_scrollbars.scss: -------------------------------------------------------------------------------- 1 | $scrollbar-face: #{lighten($main-theme-color, 18%)} !default; 2 | $scrollbar-face-hover: #{lighten($main-theme-color, 20%)} !default; 3 | $scrollbar-face-active: #{lighten($main-theme-color, 15%)} !default; 4 | $scrollbar-track: #{darken($body-bg-color, 3%)} !default; 5 | 6 | @import "_scrollbars.scss"; -------------------------------------------------------------------------------- /src/scss/themes/_scrollbars.scss: -------------------------------------------------------------------------------- 1 | :root { 2 | --scrollbar-face-color: #{$scrollbar-face}; 3 | --scrollbar-track-color: #{$scrollbar-track}; 4 | --scrollbar-border-radius: 0; 5 | --scrollbar-face-color-hover: #{$scrollbar-face-hover}; 6 | --scrollbar-face-color-active: #{$scrollbar-face-active}; 7 | --scrollbar-width: calc(20px + .25em); 8 | --scrollbar-height: calc(20px + .25em); 9 | --scrollbar-background-color: transparent; 10 | } 11 | -------------------------------------------------------------------------------- /src/scss/themes/oaken.scss: -------------------------------------------------------------------------------- 1 | $main-theme-color: saddlebrown; 2 | $body-bg-color: lighten($main-theme-color, 60%); 3 | $anchor-color: $main-theme-color; 4 | $main-text-color: #333; 5 | $border-color: #dadada; 6 | $main-bg-color: white; 7 | $secondary-text-color: white; 8 | $toast-border: #fafafa; 9 | $toast-bg: #333; 10 | $focus-outline: lighten($main-theme-color, 30%); 11 | $compose-background: lighten($main-theme-color, 32%); 12 | 13 | @import "_base.scss"; 14 | @import "_light_scrollbars.scss"; 15 | -------------------------------------------------------------------------------- /src/scss/themes/scarlet.scss: -------------------------------------------------------------------------------- 1 | $main-theme-color: #e04e41; 2 | $body-bg-color: lighten($main-theme-color, 38%); 3 | $anchor-color: $main-theme-color; 4 | $main-text-color: #333; 5 | $border-color: #dadada; 6 | $main-bg-color: white; 7 | $secondary-text-color: white; 8 | $toast-border: #fafafa; 9 | $toast-bg: #333; 10 | $focus-outline: lighten($main-theme-color, 30%); 11 | $compose-background: lighten($main-theme-color, 32%); 12 | 13 | @import "_base.scss"; 14 | @import "_light_scrollbars.scss"; 15 | -------------------------------------------------------------------------------- /src/scss/themes/seafoam.scss: -------------------------------------------------------------------------------- 1 | $main-theme-color: #177380; 2 | $body-bg-color: lighten($main-theme-color, 60%); 3 | $anchor-color: $main-theme-color; 4 | $main-text-color: #333; 5 | $border-color: #dadada; 6 | $main-bg-color: white; 7 | $secondary-text-color: white; 8 | $toast-border: #fafafa; 9 | $toast-bg: #333; 10 | $focus-outline: lighten($main-theme-color, 50%); 11 | $compose-background: lighten($main-theme-color, 52%); 12 | 13 | @import "_base.scss"; 14 | @import "_light_scrollbars.scss"; -------------------------------------------------------------------------------- /src/static/icon-shortcut-fa-bell.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/src/static/icon-shortcut-fa-bell.xcf -------------------------------------------------------------------------------- /src/static/icon-shortcut-fa-pencil.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/src/static/icon-shortcut-fa-pencil.xcf -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/README.md: -------------------------------------------------------------------------------- 1 | Copied from https://raw.githubusercontent.com/encharm/Font-Awesome-SVG-PNG 2 | 3 | Version used: 1.2.2 4 | -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/adjust.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M896 1440v-1088q-148 0-273 73t-198 198-73 273 73 273 198 198 273 73zm768-544q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/adn.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M896 622l201 306h-402zm365 530h94l-459-691-459 691h94l104-160h522zm403-256q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/angle-double-down.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1395 864q0 13-10 23l-466 466q-10 10-23 10t-23-10l-466-466q-10-10-10-23t10-23l50-50q10-10 23-10t23 10l393 393 393-393q10-10 23-10t23 10l50 50q10 10 10 23zm0-384q0 13-10 23l-466 466q-10 10-23 10t-23-10l-466-466q-10-10-10-23t10-23l50-50q10-10 23-10t23 10l393 393 393-393q10-10 23-10t23 10l50 50q10 10 10 23z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/angle-double-right.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M979 960q0 13-10 23l-466 466q-10 10-23 10t-23-10l-50-50q-10-10-10-23t10-23l393-393-393-393q-10-10-10-23t10-23l50-50q10-10 23-10t23 10l466 466q10 10 10 23zm384 0q0 13-10 23l-466 466q-10 10-23 10t-23-10l-50-50q-10-10-10-23t10-23l393-393-393-393q-10-10-10-23t10-23l50-50q10-10 23-10t23 10l466 466q10 10 10 23z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/angle-down.svg: -------------------------------------------------------------------------------- 1 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1792 1792"><path fill="#fff" d="M1395 736q0 13-10 23l-466 466q-10 10-23 10t-23-10L407 759q-10-10-10-23t10-23l50-50q10-10 23-10t23 10l393 393 393-393q10-10 23-10t23 10l50 50q10 10 10 23z"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/angle-left.svg: -------------------------------------------------------------------------------- 1 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1792 1792"><path fill="#fff" d="M1203 544q0 13-10 23L800 960l393 393q10 10 10 23t-10 23l-50 50q-10 10-23 10t-23-10L631 983q-10-10-10-23t10-23l466-466q10-10 23-10t23 10l50 50q10 10 10 23z"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/angle-right.svg: -------------------------------------------------------------------------------- 1 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1792 1792"><path fill="#fff" d="M1171 960q0 13-10 23l-466 466q-10 10-23 10t-23-10l-50-50q-10-10-10-23t10-23l393-393-393-393q-10-10-10-23t10-23l50-50q10-10 23-10t23 10l466 466q10 10 10 23z"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/angle-up.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1395 1184q0 13-10 23l-50 50q-10 10-23 10t-23-10l-393-393-393 393q-10 10-23 10t-23-10l-50-50q-10-10-10-23t10-23l466-466q10-10 23-10t23 10l466 466q10 10 10 23z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/archive.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1088 832q0-26-19-45t-45-19h-256q-26 0-45 19t-19 45 19 45 45 19h256q26 0 45-19t19-45zm576-192v960q0 26-19 45t-45 19h-1408q-26 0-45-19t-19-45v-960q0-26 19-45t45-19h1408q26 0 45 19t19 45zm64-448v256q0 26-19 45t-45 19h-1536q-26 0-45-19t-19-45v-256q0-26 19-45t45-19h1536q26 0 45 19t19 45z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/area-chart.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="2048" height="1792" viewBox="0 0 2048 1792" xmlns="http://www.w3.org/2000/svg"><path d="M2048 1536v128h-2048v-1536h128v1408h1920zm-384-1024l256 896h-1664v-576l448-576 576 576z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/arrow-down.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1675 832q0 53-37 90l-651 652q-39 37-91 37-53 0-90-37l-651-652q-38-36-38-90 0-53 38-91l74-75q39-37 91-37 53 0 90 37l294 294v-704q0-52 38-90t90-38h128q52 0 90 38t38 90v704l294-294q37-37 90-37 52 0 91 37l75 75q37 39 37 91z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/arrow-left.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1664 896v128q0 53-32.5 90.5t-84.5 37.5h-704l293 294q38 36 38 90t-38 90l-75 76q-37 37-90 37-52 0-91-37l-651-652q-37-37-37-90 0-52 37-91l651-650q38-38 91-38 52 0 90 38l75 74q38 38 38 91t-38 91l-293 293h704q52 0 84.5 37.5t32.5 90.5z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/arrow-right.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1600 960q0 54-37 91l-651 651q-39 37-91 37-51 0-90-37l-75-75q-38-38-38-91t38-91l293-293h-704q-52 0-84.5-37.5t-32.5-90.5v-128q0-53 32.5-90.5t84.5-37.5h704l-293-294q-38-36-38-90t38-90l75-75q38-38 90-38 53 0 91 38l651 651q37 35 37 90z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/arrow-up.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1675 971q0 51-37 90l-75 75q-38 38-91 38-54 0-90-38l-294-293v704q0 52-37.5 84.5t-90.5 32.5h-128q-53 0-90.5-32.5t-37.5-84.5v-704l-294 293q-36 38-90 38t-90-38l-75-75q-38-38-38-90 0-53 38-91l651-651q35-37 90-37 54 0 91 37l651 651q37 39 37 91z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/arrows-h.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1792 896q0 26-19 45l-256 256q-19 19-45 19t-45-19-19-45v-128h-1024v128q0 26-19 45t-45 19-45-19l-256-256q-19-19-19-45t19-45l256-256q19-19 45-19t45 19 19 45v128h1024v-128q0-26 19-45t45-19 45 19l256 256q19 19 19 45z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/arrows-v.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1216 320q0 26-19 45t-45 19h-128v1024h128q26 0 45 19t19 45-19 45l-256 256q-19 19-45 19t-45-19l-256-256q-19-19-19-45t19-45 45-19h128v-1024h-128q-26 0-45-19t-19-45 19-45l256-256q19-19 45-19t45 19l256 256q19 19 19 45z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/backward.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1683 141q19-19 32-13t13 32v1472q0 26-13 32t-32-13l-710-710q-9-9-13-19v710q0 26-13 32t-32-13l-710-710q-19-19-19-45t19-45l710-710q19-19 32-13t13 32v710q4-10 13-19z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/ban.svg: -------------------------------------------------------------------------------- 1 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1792 1792"><path fill="#fff" d="M1440 893q0-161-87-295l-754 753q137 89 297 89 111 0 212-43t173-117 116-174 43-213zm-999 299l755-754q-135-91-300-91-148 0-273 73T425 619t-73 274q0 162 89 299zm1223-299q0 157-61 300t-163 246-245 164-299 61-298-61-245-164-164-246-61-300 61-299 164-246 245-164 298-61 299 61 245 164 163 246 61 299z"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/bandcamp.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1070 1178l306-564h-654l-306 564h654zm722-282q0 182-71 348t-191 286-286 191-348 71-348-71-286-191-191-286-71-348 71-348 191-286 286-191 348-71 348 71 286 191 191 286 71 348z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/bank.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="2048" height="1792" viewBox="0 0 2048 1792" xmlns="http://www.w3.org/2000/svg"><path d="M960 0l960 384v128h-128q0 26-20.5 45t-48.5 19h-1526q-28 0-48.5-19t-20.5-45h-128v-128zm-704 640h256v768h128v-768h256v768h128v-768h256v768h128v-768h256v768h59q28 0 48.5 19t20.5 45v64h-1664v-64q0-26 20.5-45t48.5-19h59v-768zm1595 960q28 0 48.5 19t20.5 45v128h-1920v-128q0-26 20.5-45t48.5-19h1782z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/bar-chart-o.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="2048" height="1792" viewBox="0 0 2048 1792" xmlns="http://www.w3.org/2000/svg"><path d="M640 896v512h-256v-512h256zm384-512v1024h-256v-1024h256zm1024 1152v128h-2048v-1536h128v1408h1920zm-640-896v768h-256v-768h256zm384-384v1152h-256v-1152h256z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/bar-chart.svg: -------------------------------------------------------------------------------- 1 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2048 1792"><path d="M640 896v512H384V896zm384-512v1024H768V384zm1024 1152v128H0V128h128v1408zm-640-896v768h-256V640zm384-384v1152h-256V256z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/bars.svg: -------------------------------------------------------------------------------- 1 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1792 1792"><path fill="#fff" d="M1664 1344v128q0 26-19 45t-45 19H192q-26 0-45-19t-19-45v-128q0-26 19-45t45-19h1408q26 0 45 19t19 45zm0-512v128q0 26-19 45t-45 19H192q-26 0-45-19t-19-45V832q0-26 19-45t45-19h1408q26 0 45 19t19 45zm0-512v128q0 26-19 45t-45 19H192q-26 0-45-19t-19-45V320q0-26 19-45t45-19h1408q26 0 45 19t19 45z"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/battery-0.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="2304" height="1792" viewBox="0 0 2304 1792" xmlns="http://www.w3.org/2000/svg"><path d="M2176 576q53 0 90.5 37.5t37.5 90.5v384q0 53-37.5 90.5t-90.5 37.5v160q0 66-47 113t-113 47h-1856q-66 0-113-47t-47-113v-960q0-66 47-113t113-47h1856q66 0 113 47t47 113v160zm0 512v-384h-128v-288q0-14-9-23t-23-9h-1856q-14 0-23 9t-9 23v960q0 14 9 23t23 9h1856q14 0 23-9t9-23v-288h128z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/battery-1.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="2304" height="1792" viewBox="0 0 2304 1792" xmlns="http://www.w3.org/2000/svg"><path d="M256 1280v-768h512v768h-512zm1920-704q53 0 90.5 37.5t37.5 90.5v384q0 53-37.5 90.5t-90.5 37.5v160q0 66-47 113t-113 47h-1856q-66 0-113-47t-47-113v-960q0-66 47-113t113-47h1856q66 0 113 47t47 113v160zm0 512v-384h-128v-288q0-14-9-23t-23-9h-1856q-14 0-23 9t-9 23v960q0 14 9 23t23 9h1856q14 0 23-9t9-23v-288h128z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/battery-2.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="2304" height="1792" viewBox="0 0 2304 1792" xmlns="http://www.w3.org/2000/svg"><path d="M256 1280v-768h896v768h-896zm1920-704q53 0 90.5 37.5t37.5 90.5v384q0 53-37.5 90.5t-90.5 37.5v160q0 66-47 113t-113 47h-1856q-66 0-113-47t-47-113v-960q0-66 47-113t113-47h1856q66 0 113 47t47 113v160zm0 512v-384h-128v-288q0-14-9-23t-23-9h-1856q-14 0-23 9t-9 23v960q0 14 9 23t23 9h1856q14 0 23-9t9-23v-288h128z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/battery-3.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="2304" height="1792" viewBox="0 0 2304 1792" xmlns="http://www.w3.org/2000/svg"><path d="M256 1280v-768h1280v768h-1280zm1920-704q53 0 90.5 37.5t37.5 90.5v384q0 53-37.5 90.5t-90.5 37.5v160q0 66-47 113t-113 47h-1856q-66 0-113-47t-47-113v-960q0-66 47-113t113-47h1856q66 0 113 47t47 113v160zm0 512v-384h-128v-288q0-14-9-23t-23-9h-1856q-14 0-23 9t-9 23v960q0 14 9 23t23 9h1856q14 0 23-9t9-23v-288h128z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/battery-4.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="2304" height="1792" viewBox="0 0 2304 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1920 512v768h-1664v-768h1664zm128 576h128v-384h-128v-288q0-14-9-23t-23-9h-1856q-14 0-23 9t-9 23v960q0 14 9 23t23 9h1856q14 0 23-9t9-23v-288zm256-384v384q0 53-37.5 90.5t-90.5 37.5v160q0 66-47 113t-113 47h-1856q-66 0-113-47t-47-113v-960q0-66 47-113t113-47h1856q66 0 113 47t47 113v160q53 0 90.5 37.5t37.5 90.5z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/battery-empty.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="2304" height="1792" viewBox="0 0 2304 1792" xmlns="http://www.w3.org/2000/svg"><path d="M2176 576q53 0 90.5 37.5t37.5 90.5v384q0 53-37.5 90.5t-90.5 37.5v160q0 66-47 113t-113 47h-1856q-66 0-113-47t-47-113v-960q0-66 47-113t113-47h1856q66 0 113 47t47 113v160zm0 512v-384h-128v-288q0-14-9-23t-23-9h-1856q-14 0-23 9t-9 23v960q0 14 9 23t23 9h1856q14 0 23-9t9-23v-288h128z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/battery-full.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="2304" height="1792" viewBox="0 0 2304 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1920 512v768h-1664v-768h1664zm128 576h128v-384h-128v-288q0-14-9-23t-23-9h-1856q-14 0-23 9t-9 23v960q0 14 9 23t23 9h1856q14 0 23-9t9-23v-288zm256-384v384q0 53-37.5 90.5t-90.5 37.5v160q0 66-47 113t-113 47h-1856q-66 0-113-47t-47-113v-960q0-66 47-113t113-47h1856q66 0 113 47t47 113v160q53 0 90.5 37.5t37.5 90.5z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/battery-half.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="2304" height="1792" viewBox="0 0 2304 1792" xmlns="http://www.w3.org/2000/svg"><path d="M256 1280v-768h896v768h-896zm1920-704q53 0 90.5 37.5t37.5 90.5v384q0 53-37.5 90.5t-90.5 37.5v160q0 66-47 113t-113 47h-1856q-66 0-113-47t-47-113v-960q0-66 47-113t113-47h1856q66 0 113 47t47 113v160zm0 512v-384h-128v-288q0-14-9-23t-23-9h-1856q-14 0-23 9t-9 23v960q0 14 9 23t23 9h1856q14 0 23-9t9-23v-288h128z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/battery-quarter.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="2304" height="1792" viewBox="0 0 2304 1792" xmlns="http://www.w3.org/2000/svg"><path d="M256 1280v-768h512v768h-512zm1920-704q53 0 90.5 37.5t37.5 90.5v384q0 53-37.5 90.5t-90.5 37.5v160q0 66-47 113t-113 47h-1856q-66 0-113-47t-47-113v-960q0-66 47-113t113-47h1856q66 0 113 47t47 113v160zm0 512v-384h-128v-288q0-14-9-23t-23-9h-1856q-14 0-23 9t-9 23v960q0 14 9 23t23 9h1856q14 0 23-9t9-23v-288h128z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/battery.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="2304" height="1792" viewBox="0 0 2304 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1920 512v768h-1664v-768h1664zm128 576h128v-384h-128v-288q0-14-9-23t-23-9h-1856q-14 0-23 9t-9 23v960q0 14 9 23t23 9h1856q14 0 23-9t9-23v-288zm256-384v384q0 53-37.5 90.5t-90.5 37.5v160q0 66-47 113t-113 47h-1856q-66 0-113-47t-47-113v-960q0-66 47-113t113-47h1856q66 0 113 47t47 113v160q53 0 90.5 37.5t37.5 90.5z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/bed.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="2048" height="1792" viewBox="0 0 2048 1792" xmlns="http://www.w3.org/2000/svg"><path d="M256 1024h1728q26 0 45 19t19 45v448h-256v-256h-1536v256h-256v-1216q0-26 19-45t45-19h128q26 0 45 19t19 45v704zm576-320q0-106-75-181t-181-75-181 75-75 181 75 181 181 75 181-75 75-181zm1216 256v-64q0-159-112.5-271.5t-271.5-112.5h-704q-26 0-45 19t-19 45v384h1152z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/beer.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M704 896v-384h-256v256q0 53 37.5 90.5t90.5 37.5h128zm1024 448v192h-1152v-192l128-192h-128q-159 0-271.5-112.5t-112.5-271.5v-320l-64-64 32-128h480l32-128h960l32 192-64 32v800z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/bell.svg: -------------------------------------------------------------------------------- 1 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1792 1792"><path fill="#fff" d="M912 1696q0-16-16-16-59 0-101-42t-43-102q0-16-16-16t-16 16q0 73 52 125t124 51q16 0 16-16zm816-288q0 52-38 90t-90 38h-448q0 106-75 181t-181 75-181-75-75-181H192q-52 0-90-38t-38-90q50-42 91-88t85-119 75-159 50-206 19-260q0-152 117-282t307-159q-8-19-8-39 0-40 28-68t68-28 68 28 28 68q0 20-8 39 190 28 307 159t117 282q0 139 20 260t50 206 74 159 85 119 91 88z"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/black-tie.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M128 128h1536v1536h-1536v-1536zm1085 1115l-221-631 221-297h-634l221 297-221 631 317 304z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/bluetooth-b.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M980 1423l173-172-173-172v344zm0-710l173-172-173-172v344zm32 183l356 356-539 540v-711l-297 296-108-108 372-373-372-373 108-108 297 296v-711l539 540z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/bolt.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1333 566q18 20 7 44l-540 1157q-13 25-42 25-4 0-14-2-17-5-25.5-19t-4.5-30l197-808-406 101q-4 1-12 1-18 0-31-11-18-15-13-39l201-825q4-14 16-23t28-9h328q19 0 32 12.5t13 29.5q0 8-5 18l-171 463 396-98q8-2 12-2 19 0 34 15z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/bookmark-o.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1408 256h-1024v1242l423-406 89-85 89 85 423 406v-1242zm12-128q23 0 44 9 33 13 52.5 41t19.5 62v1289q0 34-19.5 62t-52.5 41q-19 8-44 8-48 0-83-32l-441-424-441 424q-36 33-83 33-23 0-44-9-33-13-52.5-41t-19.5-62v-1289q0-34 19.5-62t52.5-41q21-9 44-9h1048z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/bookmark.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1420 128q23 0 44 9 33 13 52.5 41t19.5 62v1289q0 34-19.5 62t-52.5 41q-19 8-44 8-48 0-83-32l-441-424-441 424q-36 33-83 33-23 0-44-9-33-13-52.5-41t-19.5-62v-1289q0-34 19.5-62t52.5-41q21-9 44-9h1048z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/briefcase.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M640 256h512v-128h-512v128zm1152 640v480q0 66-47 113t-113 47h-1472q-66 0-113-47t-47-113v-480h672v160q0 26 19 45t45 19h320q26 0 45-19t19-45v-160h672zm-768 0v128h-256v-128h256zm768-480v384h-1792v-384q0-66 47-113t113-47h352v-160q0-40 28-68t68-28h576q40 0 68 28t28 68v160h352q66 0 113 47t47 113z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/buysellads.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1043 1086h-294l147-551zm86 322h311l-324-1024h-440l-324 1024h311l383-314zm535-992v960q0 118-85 203t-203 85h-960q-118 0-203-85t-85-203v-960q0-118 85-203t203-85h960q118 0 203 85t85 203z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/camera.svg: -------------------------------------------------------------------------------- 1 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2048 1792"><path fill="#fff" d="M1024 672q119 0 204 85t84 203-84 204-204 84-203-84-85-204 85-203 203-85zm704-416q106 0 181 75t75 181v896q0 106-75 181t-181 75H320q-106 0-181-75t-75-181V512q0-106 75-181t181-75h224l51-136q19-49 70-84T768 0h512q53 0 104 36t69 84l51 136h224zm-704 1152q185 0 317-131t131-317-131-316-317-132-316 132-132 316 132 317 316 131z"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/caret-down.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1408 704q0 26-19 45l-448 448q-19 19-45 19t-45-19l-448-448q-19-19-19-45t19-45 45-19h896q26 0 45 19t19 45z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/caret-left.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1216 448v896q0 26-19 45t-45 19-45-19l-448-448q-19-19-19-45t19-45l448-448q19-19 45-19t45 19 19 45z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/caret-right.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1152 896q0 26-19 45l-448 448q-19 19-45 19t-45-19-19-45v-896q0-26 19-45t45-19 45 19l448 448q19 19 19 45z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/caret-up.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1408 1216q0 26-19 45t-45 19h-896q-26 0-45-19t-19-45 19-45l448-448q19-19 45-19t45 19l448 448q19 19 19 45z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/check-circle.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1412 734q0-28-18-46l-91-90q-19-19-45-19t-45 19l-408 407-226-226q-19-19-45-19t-45 19l-91 90q-18 18-18 46 0 27 18 45l362 362q19 19 45 19 27 0 46-19l543-543q18-18 18-45zm252 162q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/check-square.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M813 1299l614-614q19-19 19-45t-19-45l-102-102q-19-19-45-19t-45 19l-467 467-211-211q-19-19-45-19t-45 19l-102 102q-19 19-19 45t19 45l358 358q19 19 45 19t45-19zm851-883v960q0 119-84.5 203.5t-203.5 84.5h-960q-119 0-203.5-84.5t-84.5-203.5v-960q0-119 84.5-203.5t203.5-84.5h960q119 0 203.5 84.5t84.5 203.5z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/check.svg: -------------------------------------------------------------------------------- 1 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1792 1792"><path fill="#fff" d="M1671 566q0 40-28 68l-724 724-136 136q-28 28-68 28t-68-28l-136-136-362-362q-28-28-28-68t28-68l136-136q28-28 68-28t68 28l294 295 656-657q28-28 68-28t68 28l136 136q28 28 28 68z"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/chevron-circle-down.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M941 1299l454-454q19-19 19-45t-19-45l-102-102q-19-19-45-19t-45 19l-307 307-307-307q-19-19-45-19t-45 19l-102 102q-19 19-19 45t19 45l454 454q19 19 45 19t45-19zm723-403q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/chevron-circle-left.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1037 1395l102-102q19-19 19-45t-19-45l-307-307 307-307q19-19 19-45t-19-45l-102-102q-19-19-45-19t-45 19l-454 454q-19 19-19 45t19 45l454 454q19 19 45 19t45-19zm627-499q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/chevron-circle-right.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M845 1395l454-454q19-19 19-45t-19-45l-454-454q-19-19-45-19t-45 19l-102 102q-19 19-19 45t19 45l307 307-307 307q-19 19-19 45t19 45l102 102q19 19 45 19t45-19zm819-499q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/chevron-circle-up.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1293 1139l102-102q19-19 19-45t-19-45l-454-454q-19-19-45-19t-45 19l-454 454q-19 19-19 45t19 45l102 102q19 19 45 19t45-19l307-307 307 307q19 19 45 19t45-19zm371-243q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/chevron-down.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1683 808l-742 741q-19 19-45 19t-45-19l-742-741q-19-19-19-45.5t19-45.5l166-165q19-19 45-19t45 19l531 531 531-531q19-19 45-19t45 19l166 165q19 19 19 45.5t-19 45.5z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/chevron-left.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1427 301l-531 531 531 531q19 19 19 45t-19 45l-166 166q-19 19-45 19t-45-19l-742-742q-19-19-19-45t19-45l742-742q19-19 45-19t45 19l166 166q19 19 19 45t-19 45z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/chevron-right.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1363 877l-742 742q-19 19-45 19t-45-19l-166-166q-19-19-19-45t19-45l531-531-531-531q-19-19-19-45t19-45l166-166q19-19 45-19t45 19l742 742q19 19 19 45t-19 45z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/chevron-up.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1683 1331l-166 165q-19 19-45 19t-45-19l-531-531-531 531q-19 19-45 19t-45-19l-166-165q-19-19-19-45.5t19-45.5l742-741q19-19 45-19t45 19l742 741q19 19 19 45.5t-19 45.5z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/child.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1444 548l-292 292v824q0 46-33 79t-79 33-79-33-33-79v-384h-64v384q0 46-33 79t-79 33-79-33-33-79v-824l-292-292q-28-28-28-68t28-68q29-28 68.5-28t67.5 28l228 228h368l228-228q28-28 68-28t68 28q28 29 28 68.5t-28 67.5zm-324-164q0 93-65.5 158.5t-158.5 65.5-158.5-65.5-65.5-158.5 65.5-158.5 158.5-65.5 158.5 65.5 65.5 158.5z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/circle-o-notch.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1760 896q0 176-68.5 336t-184 275.5-275.5 184-336 68.5-336-68.5-275.5-184-184-275.5-68.5-336q0-213 97-398.5t265-305.5 374-151v228q-221 45-366.5 221t-145.5 406q0 130 51 248.5t136.5 204 204 136.5 248.5 51 248.5-51 204-136.5 136.5-204 51-248.5q0-230-145.5-406t-366.5-221v-228q206 31 374 151t265 305.5 97 398.5z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/circle-o.svg: -------------------------------------------------------------------------------- 1 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1792 1792"><path fill="#fff" d="M896 352q-148 0-273 73T425 623t-73 273 73 273 198 198 273 73 273-73 198-198 73-273-73-273-198-198-273-73zm768 544q0 209-103 386t-279 279-386 103-385-103-280-279-103-386 103-385 280-280 385-103 386 103 279 280 103 385z"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/circle-thin.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M896 256q-130 0-248.5 51t-204 136.5-136.5 204-51 248.5 51 248.5 136.5 204 204 136.5 248.5 51 248.5-51 204-136.5 136.5-204 51-248.5-51-248.5-136.5-204-204-136.5-248.5-51zm768 640q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/circle.svg: -------------------------------------------------------------------------------- 1 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1792 1792"><circle cx="50%" cy="50%" r="42.9%" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/clock-o.svg: -------------------------------------------------------------------------------- 1 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1792 1792"><path fill="#fff" d="M1024 544v448q0 14-9 23t-23 9H672q-14 0-23-9t-9-23v-64q0-14 9-23t23-9h224V544q0-14 9-23t23-9h64q14 0 23 9t9 23zm416 352q0-148-73-273t-198-198-273-73-273 73-198 198-73 273 73 273 198 198 273 73 273-73 198-198 73-273zm224 0q0 209-103 386t-279 279-386 103-385-103-280-279-103-386 103-385 280-280 385-103 386 103 279 280 103 385z"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/close.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1490 1322q0 40-28 68l-136 136q-28 28-68 28t-68-28l-294-294-294 294q-28 28-68 28t-68-28l-136-136q-28-28-28-68t28-68l294-294-294-294q-28-28-28-68t28-68l136-136q28-28 68-28t68 28l294 294 294-294q28-28 68-28t68 28l136 136q28 28 28 68t-28 68l-294 294 294 294q28 28 28 68z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/cloud.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="2048" height="1792" viewBox="0 0 2048 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1984 1152q0 159-112.5 271.5t-271.5 112.5h-1088q-185 0-316.5-131.5t-131.5-316.5q0-132 71-241.5t187-163.5q-2-28-2-43 0-212 150-362t362-150q158 0 286.5 88t187.5 230q70-62 166-62 106 0 181 75t75 181q0 75-41 138 129 30 213 134.5t84 239.5z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/coffee.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="2048" height="1792" viewBox="0 0 2048 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1728 640q0-80-56-136t-136-56h-64v384h64q80 0 136-56t56-136zm-1664 768h1792q0 106-75 181t-181 75h-1280q-106 0-181-75t-75-181zm1856-768q0 159-112.5 271.5t-271.5 112.5h-64v32q0 92-66 158t-158 66h-704q-92 0-158-66t-66-158v-736q0-26 19-45t45-19h1152q159 0 271.5 112.5t112.5 271.5z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/columns.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M224 1536h608v-1152h-640v1120q0 13 9.5 22.5t22.5 9.5zm1376-32v-1120h-640v1152h608q13 0 22.5-9.5t9.5-22.5zm128-1216v1216q0 66-47 113t-113 47h-1344q-66 0-113-47t-47-113v-1216q0-66 47-113t113-47h1344q66 0 113 47t47 113z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/comment.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1792 896q0 174-120 321.5t-326 233-450 85.5q-70 0-145-8-198 175-460 242-49 14-114 22-17 2-30.5-9t-17.5-29v-1q-3-4-.5-12t2-10 4.5-9.5l6-9 7-8.5 8-9q7-8 31-34.5t34.5-38 31-39.5 32.5-51 27-59 26-76q-157-89-247.5-220t-90.5-281q0-130 71-248.5t191-204.5 286-136.5 348-50.5q244 0 450 85.5t326 233 120 321.5z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/compass.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M768 1088l256-128-256-128v256zm384-591v542l-512 256v-542zm288 399q0-148-73-273t-198-198-273-73-273 73-198 198-73 273 73 273 198 198 273 73 273-73 198-198 73-273zm224 0q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/credit-card-alt.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="2304" height="1792" viewBox="0 0 2304 1792" xmlns="http://www.w3.org/2000/svg"><path d="M0 1504v-608h2304v608q0 66-47 113t-113 47h-1984q-66 0-113-47t-47-113zm640-224v128h384v-128h-384zm-384 0v128h256v-128h-256zm1888-1152q66 0 113 47t47 113v224h-2304v-224q0-66 47-113t113-47h1984z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/css3.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M275 128h1505l-266 1333-804 267-698-267 71-356h297l-29 147 422 161 486-161 68-339h-1208l58-297h1209l38-191h-1208z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/cube.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M896 1629l640-349v-636l-640 233v752zm-64-865l698-254-698-254-698 254zm832-252v768q0 35-18 65t-49 47l-704 384q-28 16-61 16t-61-16l-704-384q-31-17-49-47t-18-65v-768q0-40 23-73t61-47l704-256q22-8 44-8t44 8l704 256q38 14 61 47t23 73z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/dashcube.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M128 680q0-131 91.5-226.5t222.5-95.5h742l352-358v1470q0 132-91.5 227t-222.5 95h-780q-131 0-222.5-95t-91.5-227v-790zm1232 754l-176-180v-425q0-46-32-79t-78-33h-484q-46 0-78 33t-32 79v492q0 46 32.5 79.5t77.5 33.5h770z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/delicious.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1600 1376v-480h-704v-704h-480q-93 0-158.5 65.5t-65.5 158.5v480h704v704h480q93 0 158.5-65.5t65.5-158.5zm64-960v960q0 119-84.5 203.5t-203.5 84.5h-960q-119 0-203.5-84.5t-84.5-203.5v-960q0-119 84.5-203.5t203.5-84.5h960q119 0 203.5 84.5t84.5 203.5z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/deviantart.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1408 303l-303 582 24 31h279v415h-507l-44 30-142 273-30 30h-301v-303l303-583-24-30h-279v-415h507l44-30 142-273 30-30h301v303z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/diamond.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="2048" height="1792" viewBox="0 0 2048 1792" xmlns="http://www.w3.org/2000/svg"><path d="M212 768l623 665-300-665h-323zm812 772l349-772h-698zm-486-900l204-384h-262l-288 384h346zm675 793l623-665h-323zm-530-793h682l-204-384h-274zm827 0h346l-288-384h-262zm141-486l384 512q14 18 13 41.5t-17 40.5l-960 1024q-18 20-47 20t-47-20l-960-1024q-16-17-17-40.5t13-41.5l384-512q18-26 51-26h1152q33 0 51 26z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/digg.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="2048" height="1792" viewBox="0 0 2048 1792" xmlns="http://www.w3.org/2000/svg"><path d="M328 282h204v983h-532v-697h328v-286zm0 819v-369h-123v369h123zm286-533v697h205v-697h-205zm0-286v204h205v-204h-205zm287 286h533v942h-533v-163h328v-82h-328v-697zm328 533v-369h-123v369h123zm287-533h532v942h-532v-163h327v-82h-327v-697zm327 533v-369h-123v369h123z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/dropbox.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M402 707l494 305-342 285-490-319zm986 555v108l-490 293v1l-1-1-1 1v-1l-489-293v-108l147 96 342-284v-2l1 1 1-1v2l343 284zm-834-1144l342 285-494 304-338-270zm836 589l338 271-489 319-343-285zm-151-589l489 319-338 270-494-304z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/eject.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M141 979l710-710q19-19 45-19t45 19l710 710q19 19 13 32t-32 13h-1472q-26 0-32-13t13-32zm1459 557h-1408q-26 0-45-19t-19-45v-256q0-26 19-45t45-19h1408q26 0 45 19t19 45v256q0 26-19 45t-45 19z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/ellipsis-h.svg: -------------------------------------------------------------------------------- 1 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1792 1792"><path fill="#fff" d="M576 736v192q0 40-28 68t-68 28H288q-40 0-68-28t-28-68V736q0-40 28-68t68-28h192q40 0 68 28t28 68zm512 0v192q0 40-28 68t-68 28H800q-40 0-68-28t-28-68V736q0-40 28-68t68-28h192q40 0 68 28t28 68zm512 0v192q0 40-28 68t-68 28h-192q-40 0-68-28t-28-68V736q0-40 28-68t68-28h192q40 0 68 28t28 68z"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/ellipsis-v.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1088 1248v192q0 40-28 68t-68 28h-192q-40 0-68-28t-28-68v-192q0-40 28-68t68-28h192q40 0 68 28t28 68zm0-512v192q0 40-28 68t-68 28h-192q-40 0-68-28t-28-68v-192q0-40 28-68t68-28h192q40 0 68 28t28 68zm0-512v192q0 40-28 68t-68 28h-192q-40 0-68-28t-28-68v-192q0-40 28-68t68-28h192q40 0 68 28t28 68z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/envelope.svg: -------------------------------------------------------------------------------- 1 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1792 1792"><path fill="#fff" d="M1792 710v794q0 66-47 113t-113 47H160q-66 0-113-47T0 1504V710q44 49 101 87 362 246 497 345 57 42 93 66t94 48 110 24h2q51 0 110-24t95-48 92-66q170-123 498-345 57-39 100-87zm0-294q0 79-49 151t-122 123l-468 325-42 31q-32 24-54 38t-52 32-58 27-50 9h-2q-23 0-50-9t-57-27-52-32-54-38-43-31L377 833Q206 715 172 690q-62-42-117-115T0 438q0-78 42-130t118-52h1472q65 0 113 47t47 113z"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/eraser.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="2048" height="1792" viewBox="0 0 2048 1792" xmlns="http://www.w3.org/2000/svg"><path d="M960 1408l336-384h-768l-336 384h768zm1013-1077q15 34 9.5 71.5t-30.5 65.5l-896 1024q-38 44-96 44h-768q-38 0-69.5-20.5t-47.5-54.5q-15-34-9.5-71.5t30.5-65.5l896-1024q38-44 96-44h768q38 0 69.5 20.5t47.5 54.5z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/exclamation-triangle.svg: -------------------------------------------------------------------------------- 1 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1792 1792"><path fill="#fff" d="M1024 1375v-190q0-14-9-23t-23-10H800q-13 0-22 10t-10 23v190q0 14 10 24t22 9h192q13 0 23-9t9-24zm-2-374l18-459q0-12-10-19-13-11-24-11H786q-11 0-24 11-10 7-10 21l17 457q0 10 10 17t24 6h185q14 0 24-6t10-17zm-14-934l768 1408q35 63-2 126-17 29-46 46t-64 17H128q-34 0-63-17t-47-46q-37-63-2-126L784 67q17-31 47-49t65-18 65 18 47 49z"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/exclamation.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1088 1248v224q0 26-19 45t-45 19h-256q-26 0-45-19t-19-45v-224q0-26 19-45t45-19h256q26 0 45 19t19 45zm30-1056l-28 768q-1 26-20.5 45t-45.5 19h-256q-26 0-45.5-19t-20.5-45l-28-768q-1-26 17.5-45t44.5-19h320q26 0 44.5 19t17.5 45z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/fa.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1664 512v839q0 48-49 62-174 52-338 52-73 0-215.5-29.5t-227.5-29.5q-164 0-370 48v338h-160v-1368q-63-25-101-81t-38-124q0-91 64-155t155-64 155 64 64 155q0 68-38 124t-101 81v68q190-44 343-44 99 0 198 15 14 2 111.5 22.5t149.5 20.5q77 0 165-18 11-2 80-21t89-19q26 0 45 19t19 45z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/facebook-f.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1343 12v264h-157q-86 0-116 36t-30 108v189h293l-39 296h-254v759h-306v-759h-255v-296h255v-218q0-186 104-288.5t277-102.5q147 0 228 12z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/facebook-official.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1579 128q35 0 60 25t25 60v1366q0 35-25 60t-60 25h-391v-595h199l30-232h-229v-148q0-56 23.5-84t91.5-28l122-1v-207q-63-9-178-9-136 0-217.5 80t-81.5 226v171h-200v232h200v595h-735q-35 0-60-25t-25-60v-1366q0-35 25-60t60-25h1366z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/facebook-square.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1376 128q119 0 203.5 84.5t84.5 203.5v960q0 119-84.5 203.5t-203.5 84.5h-188v-595h199l30-232h-229v-148q0-56 23.5-84t91.5-28l122-1v-207q-63-9-178-9-136 0-217.5 80t-81.5 226v171h-200v232h200v595h-532q-119 0-203.5-84.5t-84.5-203.5v-960q0-119 84.5-203.5t203.5-84.5h960z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/facebook.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1343 12v264h-157q-86 0-116 36t-30 108v189h293l-39 296h-254v759h-306v-759h-255v-296h255v-218q0-186 104-288.5t277-102.5q147 0 228 12z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/fast-backward.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1747 141q19-19 32-13t13 32v1472q0 26-13 32t-32-13l-710-710q-9-9-13-19v710q0 26-13 32t-32-13l-710-710q-9-9-13-19v678q0 26-19 45t-45 19h-128q-26 0-45-19t-19-45v-1408q0-26 19-45t45-19h128q26 0 45 19t19 45v678q4-10 13-19l710-710q19-19 32-13t13 32v710q4-10 13-19z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/fast-forward.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M45 1651q-19 19-32 13t-13-32v-1472q0-26 13-32t32 13l710 710q9 9 13 19v-710q0-26 13-32t32 13l710 710q9 9 13 19v-678q0-26 19-45t45-19h128q26 0 45 19t19 45v1408q0 26-19 45t-45 19h-128q-26 0-45-19t-19-45v-678q-4 10-13 19l-710 710q-19 19-32 13t-13-32v-710q-4 10-13 19z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/file-o.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1596 380q28 28 48 76t20 88v1152q0 40-28 68t-68 28h-1344q-40 0-68-28t-28-68v-1600q0-40 28-68t68-28h896q40 0 88 20t76 48zm-444-244v376h376q-10-29-22-41l-313-313q-12-12-41-22zm384 1528v-1024h-416q-40 0-68-28t-28-68v-416h-768v1536h1280z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/file.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1152 512v-472q22 14 36 28l408 408q14 14 28 36h-472zm-128 32q0 40 28 68t68 28h544v1056q0 40-28 68t-68 28h-1344q-40 0-68-28t-28-68v-1600q0-40 28-68t68-28h800v544z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/filter.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1595 295q17 41-14 70l-493 493v742q0 42-39 59-13 5-25 5-27 0-45-19l-256-256q-19-19-19-45v-486l-493-493q-31-29-14-70 17-39 59-39h1280q42 0 59 39z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/flag.svg: -------------------------------------------------------------------------------- 1 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1792 1792"><path fill="#fff" d="M320 256q0 72-64 110v1266q0 13-9 23t-23 9h-64q-13 0-22-9t-10-23V366q-64-38-64-110 0-53 38-90t90-38 91 38 37 90zm1472 64v763q0 25-12 39t-40 27q-215 116-369 116-61 0-123-22t-109-48-115-48-143-22q-192 0-464 146-17 9-33 9-26 0-45-19t-19-45V474q0-32 31-55 21-14 79-43 236-120 421-120 107 0 200 29t219 88q38 19 88 19 54 0 118-21t110-47 88-47 54-21q26 0 45 19t19 45z"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/flash.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1333 566q18 20 7 44l-540 1157q-13 25-42 25-4 0-14-2-17-5-25.5-19t-4.5-30l197-808-406 101q-4 1-12 1-18 0-31-11-18-15-13-39l201-825q4-14 16-23t28-9h328q19 0 32 12.5t13 29.5q0 8-5 18l-171 463 396-98q8-2 12-2 19 0 34 15z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/flask.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1591 1448q56 89 21.5 152.5t-140.5 63.5h-1152q-106 0-140.5-63.5t21.5-152.5l503-793v-399h-64q-26 0-45-19t-19-45 19-45 45-19h512q26 0 45 19t19 45-19 45-45 19h-64v399zm-779-725l-272 429h712l-272-429-20-31v-436h-128v436z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/flickr.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1376 128q119 0 203.5 84.5t84.5 203.5v960q0 119-84.5 203.5t-203.5 84.5h-960q-119 0-203.5-84.5t-84.5-203.5v-960q0-119 84.5-203.5t203.5-84.5h960zm-550 768q0-88-62-150t-150-62-150 62-62 150 62 150 150 62 150-62 62-150zm564 0q0-88-62-150t-150-62-150 62-62 150 62 150 150 62 150-62 62-150z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/folder-o.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1600 1312v-704q0-40-28-68t-68-28h-704q-40 0-68-28t-28-68v-64q0-40-28-68t-68-28h-320q-40 0-68 28t-28 68v960q0 40 28 68t68 28h1216q40 0 68-28t28-68zm128-704v704q0 92-66 158t-158 66h-1216q-92 0-158-66t-66-158v-960q0-92 66-158t158-66h320q92 0 158 66t66 158v32h672q92 0 158 66t66 158z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/folder.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1728 608v704q0 92-66 158t-158 66h-1216q-92 0-158-66t-66-158v-960q0-92 66-158t158-66h320q92 0 158 66t66 158v32h672q92 0 158 66t66 158z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/font-awesome.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1664 512v839q0 48-49 62-174 52-338 52-73 0-215.5-29.5t-227.5-29.5q-164 0-370 48v338h-160v-1368q-63-25-101-81t-38-124q0-91 64-155t155-64 155 64 64 155q0 68-38 124t-101 81v68q190-44 343-44 99 0 198 15 14 2 111.5 22.5t149.5 20.5q77 0 165-18 11-2 80-21t89-19q26 0 45 19t19 45z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/forward.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M109 1651q-19 19-32 13t-13-32v-1472q0-26 13-32t32 13l710 710q9 9 13 19v-710q0-26 13-32t32 13l710 710q19 19 19 45t-19 45l-710 710q-19 19-32 13t-13-32v-710q-4 10-13 19z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/genderless.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1280 960q0-185-131.5-316.5t-316.5-131.5-316.5 131.5-131.5 316.5 131.5 316.5 316.5 131.5 316.5-131.5 131.5-316.5zm128 0q0 117-45.5 223.5t-123 184-184 123-223.5 45.5-223.5-45.5-184-123-123-184-45.5-223.5 45.5-223.5 123-184 184-123 223.5-45.5 223.5 45.5 184 123 123 184 45.5 223.5z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/gg.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="2048" height="1792" viewBox="0 0 2048 1792" xmlns="http://www.w3.org/2000/svg"><path d="M736 800l384 384-384 384-672-672 672-672 168 168-96 96-72-72-480 480 480 480 193-193-289-287zm576-576l672 672-672 672-168-168 96-96 72 72 480-480-480-480-193 193 289 287-96 96-384-384z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/gitlab.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M104 706l792 1015-868-630q-18-13-25-34.5t0-42.5l101-308zm462 0h660l-330 1015zm-198-612l198 612h-462l198-612q8-23 33-23t33 23zm1320 612l101 308q7 21 0 42.5t-25 34.5l-868 630 792-1015zm0 0h-462l198-612q8-23 33-23t33 23z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/gittip.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M901 1302l350-473q16-22 24.5-59t-6-85-61.5-79q-40-26-83-25.5t-73.5 17.5-54.5 45q-36 40-96 40-59 0-95-40-24-28-54.5-45t-73.5-17.5-84 25.5q-46 31-60.5 79t-6 85 24.5 59zm763-406q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/glass.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1699 186q0 35-43 78l-632 632v768h320q26 0 45 19t19 45-19 45-45 19h-896q-26 0-45-19t-19-45 19-45 45-19h320v-768l-632-632q-43-43-43-78 0-23 18-36.5t38-17.5 43-4h1408q23 0 43 4t38 17.5 18 36.5z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/google.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M896 786h725q12 67 12 128 0 217-91 387.5t-259.5 266.5-386.5 96q-157 0-299-60.5t-245-163.5-163.5-245-60.5-299 60.5-299 163.5-245 245-163.5 299-60.5q300 0 515 201l-209 201q-123-119-306-119-129 0-238.5 65t-173.5 176.5-64 243.5 64 243.5 173.5 176.5 238.5 65q87 0 160-24t120-60 82-82 51.5-87 22.5-78h-436v-264z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/gratipay.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M901 1302l350-473q16-22 24.5-59t-6-85-61.5-79q-40-26-83-25.5t-73.5 17.5-54.5 45q-36 40-96 40-59 0-95-40-24-28-54.5-45t-73.5-17.5-84 25.5q-46 31-60.5 79t-6 85 24.5 59zm763-406q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/hacker-news.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M937 1004l266-499h-112l-157 312q-24 48-44 92l-42-92-155-312h-120l263 493v324h101v-318zm727-588v960q0 119-84.5 203.5t-203.5 84.5h-960q-119 0-203.5-84.5t-84.5-203.5v-960q0-119 84.5-203.5t203.5-84.5h960q119 0 203.5 84.5t84.5 203.5z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/heart.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M896 1664q-26 0-44-18l-624-602q-10-8-27.5-26t-55.5-65.5-68-97.5-53.5-121-23.5-138q0-220 127-344t351-124q62 0 126.5 21.5t120 58 95.5 68.5 76 68q36-36 76-68t95.5-68.5 120-58 126.5-21.5q224 0 351 124t127 344q0 221-229 450l-623 600q-18 18-44 18z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/hotel.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="2048" height="1792" viewBox="0 0 2048 1792" xmlns="http://www.w3.org/2000/svg"><path d="M256 1024h1728q26 0 45 19t19 45v448h-256v-256h-1536v256h-256v-1216q0-26 19-45t45-19h128q26 0 45 19t19 45v704zm576-320q0-106-75-181t-181-75-181 75-75 181 75 181 181 75 181-75 75-181zm1216 256v-64q0-159-112.5-271.5t-271.5-112.5h-704q-26 0-45 19t-19 45v384h1152z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/houzz.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M896 1191l512-295v591l-512 296v-592zm-512-295v591l512-296zm512-887v591l-512 296v-591zm0 591l512-295v591z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/html5.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1322 597l16-175h-884l47 534h612l-22 228-197 53-196-53-13-140h-175l22 278 362 100h4v-1l359-99 50-544h-644l-15-181h674zm-1130-469h1408l-128 1438-578 162-574-162z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/i-cursor.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1216 128q-320 0-320 224v416h128v128h-128v544q0 224 320 224h64v128h-64q-272 0-384-146-112 146-384 146h-64v-128h64q320 0 320-224v-544h-128v-128h128v-416q0-224-320-224h-64v-128h64q272 0 384 146 112-146 384-146h64v128h-64z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/inbox.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1151 960h316q-1-3-2.5-8.5t-2.5-7.5l-212-496h-708l-212 496q-1 3-2.5 8.5t-2.5 7.5h316l95 192h320zm513 30v482q0 26-19 45t-45 19h-1408q-26 0-45-19t-19-45v-482q0-62 25-123l238-552q10-25 36.5-42t52.5-17h832q26 0 52.5 17t36.5 42l238 552q25 61 25 123z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/industry.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M448 0q26 0 45 19t19 45v891l536-429q17-14 40-14 26 0 45 19t19 45v379l536-429q17-14 40-14 26 0 45 19t19 45v1152q0 26-19 45t-45 19h-1664q-26 0-45-19t-19-45v-1664q0-26 19-45t45-19h384z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/info-circle.svg: -------------------------------------------------------------------------------- 1 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1792 1792"><path fill="#fff" d="M1152 1376v-160q0-14-9-23t-23-9h-96V672q0-14-9-23t-23-9H672q-14 0-23 9t-9 23v160q0 14 9 23t23 9h96v320h-96q-14 0-23 9t-9 23v160q0 14 9 23t23 9h448q14 0 23-9t9-23zm-128-896V320q0-14-9-23t-23-9H800q-14 0-23 9t-9 23v160q0 14 9 23t23 9h192q14 0 23-9t9-23zm640 416q0 209-103 386t-279 279-386 103-385-103-280-279-103-386 103-385 280-280 385-103 386 103 279 280 103 385z"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/info.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1216 1344v128q0 26-19 45t-45 19h-512q-26 0-45-19t-19-45v-128q0-26 19-45t45-19h64v-384h-64q-26 0-45-19t-19-45v-128q0-26 19-45t45-19h384q26 0 45 19t19 45v576h64q26 0 45 19t19 45zm-128-1152v192q0 26-19 45t-45 19h-256q-26 0-45-19t-19-45v-192q0-26 19-45t45-19h256q26 0 45 19t19 45z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/institution.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="2048" height="1792" viewBox="0 0 2048 1792" xmlns="http://www.w3.org/2000/svg"><path d="M960 0l960 384v128h-128q0 26-20.5 45t-48.5 19h-1526q-28 0-48.5-19t-20.5-45h-128v-128zm-704 640h256v768h128v-768h256v768h128v-768h256v768h128v-768h256v768h59q28 0 48.5 19t20.5 45v64h-1664v-64q0-26 20.5-45t48.5-19h59v-768zm1595 960q28 0 48.5 19t20.5 45v128h-1920v-128q0-26 20.5-45t48.5-19h1782z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/level-down.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M416 256h704q13 0 22.5 9.5t9.5 23.5v863h192q40 0 58 37t-9 69l-320 384q-18 22-49 22t-49-22l-320-384q-26-31-9-69 18-37 58-37h192v-640h-320q-14 0-25-11l-160-192q-13-14-4-34 9-19 29-19z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/level-up.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1402 603q-18 37-58 37h-192v864q0 14-9 23t-23 9h-704q-21 0-29-18-8-20 4-35l160-192q9-11 25-11h320v-640h-192q-40 0-58-37-17-37 9-68l320-384q18-22 49-22t49 22l320 384q27 32 9 68z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/line-chart.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="2048" height="1792" viewBox="0 0 2048 1792" xmlns="http://www.w3.org/2000/svg"><path d="M2048 1536v128h-2048v-1536h128v1408h1920zm-128-1248v435q0 21-19.5 29.5t-35.5-7.5l-121-121-633 633q-10 10-23 10t-23-10l-233-233-416 416-192-192 585-585q10-10 23-10t23 10l233 233 464-464-121-121q-16-16-7.5-35.5t29.5-19.5h435q14 0 23 9t9 23z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/location-arrow.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1593 349l-640 1280q-17 35-57 35-5 0-15-2-22-5-35.5-22.5t-13.5-39.5v-576h-576q-22 0-39.5-13.5t-22.5-35.5 4-42 29-30l1280-640q13-7 29-7 27 0 45 19 15 14 18.5 34.5t-6.5 39.5z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/lock.svg: -------------------------------------------------------------------------------- 1 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1792 1792"><path fill="#fff" d="M640 768h512V576q0-106-75-181t-181-75-181 75-75 181v192zm832 96v576q0 40-28 68t-68 28H416q-40 0-68-28t-28-68V864q0-40 28-68t68-28h32V576q0-184 132-316t316-132 316 132 132 316v192h32q40 0 68 28t28 68z"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/long-arrow-down.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1277 1299q8 19-5 35l-350 384q-10 10-23 10-14 0-24-10l-355-384q-13-16-5-35 9-19 29-19h224v-1248q0-14 9-23t23-9h192q14 0 23 9t9 23v1248h224q21 0 29 19z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/long-arrow-left.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1792 800v192q0 14-9 23t-23 9h-1248v224q0 21-19 29t-35-5l-384-350q-10-10-10-23 0-14 10-24l384-354q16-14 35-6 19 9 19 29v224h1248q14 0 23 9t9 23z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/long-arrow-right.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1728 893q0 14-10 24l-384 354q-16 14-35 6-19-9-19-29v-224h-1248q-14 0-23-9t-9-23v-192q0-14 9-23t23-9h1248v-224q0-21 19-29t35 5l384 350q10 10 10 23z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/long-arrow-up.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1277 493q-9 19-29 19h-224v1248q0 14-9 23t-23 9h-192q-14 0-23-9t-9-23v-1248h-224q-21 0-29-19t5-35l350-384q10-10 23-10 14 0 24 10l355 384q13 16 5 35z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/magic.svg: -------------------------------------------------------------------------------- 1 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1792 1792"><path fill="#fff" d="M1254 581l293-293-107-107-293 293zm447-293q0 27-18 45L397 1619q-18 18-45 18t-45-18l-198-198q-18-18-18-45t18-45L1395 45q18-18 45-18t45 18l198 198q18 18 18 45zM350 98l98 30-98 30-30 98-30-98-98-30 98-30 30-98zm350 162l196 60-196 60-60 196-60-196-196-60 196-60 60-196zm930 478l98 30-98 30-30 98-30-98-98-30 98-30 30-98zM990 98l98 30-98 30-30 98-30-98-98-30 98-30 30-98z"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/map-marker.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1152 640q0-106-75-181t-181-75-181 75-75 181 75 181 181 75 181-75 75-181zm256 0q0 109-33 179l-364 774q-16 33-47.5 52t-67.5 19-67.5-19-46.5-52l-365-774q-33-70-33-179 0-212 150-362t362-150 362 150 150 362z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/map-o.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="2048" height="1792" viewBox="0 0 2048 1792" xmlns="http://www.w3.org/2000/svg"><path d="M2020 11q28 20 28 53v1408q0 20-11 36t-29 23l-640 256q-24 11-48 0l-616-246-616 246q-10 5-24 5-19 0-36-11-28-20-28-53v-1408q0-20 11-36t29-23l640-256q24-11 48 0l616 246 616-246q32-13 60 6zm-1284 135v1270l576 230v-1270zm-608 217v1270l544-217v-1270zm1792 1066v-1270l-544 217v1270z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/map-pin.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M896 1088q66 0 128-15v655q0 26-19 45t-45 19h-128q-26 0-45-19t-19-45v-655q62 15 128 15zm0-1088q212 0 362 150t150 362-150 362-362 150-362-150-150-362 150-362 362-150zm0 224q14 0 23-9t9-23-9-23-23-9q-146 0-249 103t-103 249q0 14 9 23t23 9 23-9 9-23q0-119 84.5-203.5t203.5-84.5z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/maxcdn.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1745 773l-164 763h-334l178-832q13-56-15-88-27-33-83-33h-169l-204 953h-334l204-953h-286l-204 953h-334l204-953-153-327h1276q101 0 189.5 40.5t147.5 113.5q60 73 81 168.5t0 194.5z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/medium.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M597 421v1173q0 25-12.5 42.5t-36.5 17.5q-17 0-33-8l-465-233q-21-10-35.5-33.5t-14.5-46.5v-1140q0-20 10-34t29-14q14 0 44 15l511 256q3 3 3 5zm64 101l534 866-534-266v-600zm1131 18v1054q0 25-14 40.5t-38 15.5-47-13l-441-220zm-3-120q0 3-256.5 419.5t-300.5 487.5l-390-634 324-527q17-28 52-28 14 0 26 6l541 270q4 2 4 6z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/minus-circle.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1344 960v-128q0-26-19-45t-45-19h-768q-26 0-45 19t-19 45v128q0 26 19 45t45 19h768q26 0 45-19t19-45zm320-64q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/minus-square.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1408 960v-128q0-26-19-45t-45-19h-896q-26 0-45 19t-19 45v128q0 26 19 45t45 19h896q26 0 45-19t19-45zm256-544v960q0 119-84.5 203.5t-203.5 84.5h-960q-119 0-203.5-84.5t-84.5-203.5v-960q0-119 84.5-203.5t203.5-84.5h960q119 0 203.5 84.5t84.5 203.5z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/minus.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1600 736v192q0 40-28 68t-68 28h-1216q-40 0-68-28t-28-68v-192q0-40 28-68t68-28h1216q40 0 68 28t28 68z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/modx.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1427 709l-614-386 92-151h855zm-1022 265l-184-116v-858l1183 743zm1019-135l147 95v858l-532-335zm-37-21l-500 802h-855l356-571z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/mouse-pointer.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1389 1043q31 30 14 69-17 40-59 40h-382l201 476q10 25 0 49t-34 35l-177 75q-25 10-49 0t-35-34l-191-452-312 312q-19 19-45 19-12 0-24-5-40-17-40-59v-1504q0-42 40-59 12-5 24-5 27 0 45 19z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/navicon.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1664 1344v128q0 26-19 45t-45 19h-1408q-26 0-45-19t-19-45v-128q0-26 19-45t45-19h1408q26 0 45 19t19 45zm0-512v128q0 26-19 45t-45 19h-1408q-26 0-45-19t-19-45v-128q0-26 19-45t45-19h1408q26 0 45 19t19 45zm0-512v128q0 26-19 45t-45 19h-1408q-26 0-45-19t-19-45v-128q0-26 19-45t45-19h1408q26 0 45 19t19 45z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/openid.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1086 0v1536l-272 128q-228-20-414-102t-293-208.5-107-272.5q0-140 100.5-263.5t275-205.5 391.5-108v172q-217 38-356.5 150t-139.5 255q0 152 154.5 267t388.5 145v-1360zm669 582l37 390-525-114 147-83q-119-70-280-99v-172q277 33 481 157z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/paper-plane-o.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1764 11q33 24 27 64l-256 1536q-5 29-32 45-14 8-31 8-11 0-24-5l-527-215-298 327q-18 21-47 21-14 0-23-4-19-7-30-23.5t-11-36.5v-452l-472-193q-37-14-40-55-3-39 32-59l1664-960q35-21 68 2zm-342 1499l221-1323-1434 827 336 137 863-639-478 797z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/paper-plane.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1764 11q33 24 27 64l-256 1536q-5 29-32 45-14 8-31 8-11 0-24-5l-453-185-242 295q-18 23-49 23-13 0-22-4-19-7-30.5-23.5t-11.5-36.5v-349l864-1059-1069 925-395-162q-37-14-40-55-2-40 32-59l1664-960q15-9 32-9 20 0 36 11z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/paragraph.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1534 189v73q0 29-18.5 61t-42.5 32q-50 0-54 1-26 6-32 31-3 11-3 64v1152q0 25-18 43t-43 18h-108q-25 0-43-18t-18-43v-1218h-143v1218q0 25-17.5 43t-43.5 18h-108q-26 0-43.5-18t-17.5-43v-496q-147-12-245-59-126-58-192-179-64-117-64-259 0-166 88-286 88-118 209-159 111-37 417-37h479q25 0 43 18t18 43z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/pause.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1664 192v1408q0 26-19 45t-45 19h-512q-26 0-45-19t-19-45v-1408q0-26 19-45t45-19h512q26 0 45 19t19 45zm-896 0v1408q0 26-19 45t-45 19h-512q-26 0-45-19t-19-45v-1408q0-26 19-45t45-19h512q26 0 45 19t19 45z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/pencil.svg: -------------------------------------------------------------------------------- 1 | <svg viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="m491 1536 91-91-235-235-91 91v107h128v128zm523-928q0-22-22-22-10 0-17 7l-542 542q-7 7-7 17 0 22 22 22 10 0 17-7l542-542q7-7 7-17zm-54-192 416 416-832 832h-416v-416zm683 96q0 53-37 90l-166 166-416-416 166-165q36-38 90-38 53 0 91 38l235 234q37 39 37 91z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/pie-chart.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M768 890l546 546q-106 108-247.5 168t-298.5 60q-209 0-385.5-103t-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103v762zm187 6h773q0 157-60 298.5t-168 247.5zm709-128h-768v-768q209 0 385.5 103t279.5 279.5 103 385.5z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/play-circle.svg: -------------------------------------------------------------------------------- 1 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1792 1792"><path fill="#fff" d="M896 128q209 0 386 103t279 280 103 385-103 386-279 279-386 103-385-103-280-279-103-386 103-385 280-280 385-103zm384 823q32-18 32-55t-32-55L736 521q-31-19-64-1-32 19-32 56v640q0 37 32 56 16 8 32 8 17 0 32-9z"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/play.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1576 927l-1328 738q-23 13-39.5 3t-16.5-36v-1472q0-26 16.5-36t39.5 3l1328 738q23 13 23 31t-23 31z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/plug.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1755 453q37 38 37 90.5t-37 90.5l-401 400 150 150-160 160q-163 163-389.5 186.5t-411.5-100.5l-362 362h-181v-181l362-362q-124-185-100.5-411.5t186.5-389.5l160-160 150 150 400-401q38-37 91-37t90 37 37 90.5-37 90.5l-400 401 234 234 401-400q38-37 91-37t90 37z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/plus.svg: -------------------------------------------------------------------------------- 1 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1792 1792"><path fill="#fff" d="M1600 736v192q0 40-28 68t-68 28h-416v416q0 40-28 68t-68 28H800q-40 0-68-28t-28-68v-416H288q-40 0-68-28t-28-68V736q0-40 28-68t68-28h416V224q0-40 28-68t68-28h192q40 0 68 28t28 68v416h416q40 0 68 28t28 68z"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/product-hunt.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1150 762q0 56-39.5 95t-95.5 39h-253v-269h253q56 0 95.5 39.5t39.5 95.5zm179 0q0-130-91.5-222t-222.5-92h-433v896h180v-269h253q130 0 222-91.5t92-221.5zm463 134q0 182-71 348t-191 286-286 191-348 71-348-71-286-191-191-286-71-348 71-348 191-286 286-191 348-71 348 71 286 191 191 286 71 348z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/remove.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1490 1322q0 40-28 68l-136 136q-28 28-68 28t-68-28l-294-294-294 294q-28 28-68 28t-68-28l-136-136q-28-28-28-68t28-68l294-294-294-294q-28-28-28-68t28-68l136-136q28-28 68-28t68 28l294 294 294-294q28-28 68-28t68 28l136 136q28 28 28 68t-28 68l-294 294 294 294q28 28 28 68z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/renren.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1261 1570q-171 94-368 94-196 0-367-94 138-87 235.5-211t131.5-268q35 144 132.5 268t235.5 211zm-495-1428v485q0 252-126.5 459.5t-330.5 306.5q-181-215-181-495 0-187 83.5-349.5t229.5-269.5 325-137zm898 756q0 280-181 495-204-99-330.5-306.5t-126.5-459.5v-485q179 30 325 137t229.5 269.5 83.5 349.5z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/reorder.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1664 1344v128q0 26-19 45t-45 19h-1408q-26 0-45-19t-19-45v-128q0-26 19-45t45-19h1408q26 0 45 19t19 45zm0-512v128q0 26-19 45t-45 19h-1408q-26 0-45-19t-19-45v-128q0-26 19-45t45-19h1408q26 0 45 19t19 45zm0-512v128q0 26-19 45t-45 19h-1408q-26 0-45-19t-19-45v-128q0-26 19-45t45-19h1408q26 0 45 19t19 45z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/reply-all.svg: -------------------------------------------------------------------------------- 1 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1792 1792"><path fill="#fff" d="M640 1082v70q0 42-39 59-13 5-25 5-27 0-45-19L19 685Q0 666 0 640t19-45L531 83q29-31 70-14 39 17 39 59v69L243 595q-19 19-19 45t19 45zm1152 38q0 58-17 134t-38 138-48 125-41 90l-20 40q-8 17-28 17l-9-1q-25-8-23-34 43-400-106-565-64-71-170-110t-268-53v251q0 42-39 59-13 5-25 5-27 0-45-19L403 685q-19-19-19-45t19-45L915 83q29-31 70-14 39 17 39 59v262q411 28 599 221 169 173 169 509z"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/reply.svg: -------------------------------------------------------------------------------- 1 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1792 1792"><path fill="#fff" d="M1792 1120q0 166-127 451l-10 24-14 30-13 22q-12 17-28 17-15 0-23-10t-9-25q0-9 3-26t2-24q5-68 5-123 0-101-17-181t-49-138-80-101-105-70-133-42-154-22-176-6H640v256q0 26-19 45t-45 19-45-19L19 685Q0 666 0 640t19-45L531 83q19-19 45-19t45 19 19 45v256h224q713 0 875 403 53 134 53 333z"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/search-minus.svg: -------------------------------------------------------------------------------- 1 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1792 1792"><path fill="#fff" d="M1088 800v64q0 13-9 23t-23 9H480q-13 0-22-9t-10-23v-64q0-13 10-22t22-10h576q13 0 23 10t9 22zm128 32q0-185-131-316T768 384 452 516 320 832t132 317 316 131 317-131 131-317zm512 832q0 53-37 91t-91 37q-54 0-90-38l-343-342q-179 124-399 124-143 0-273-55t-225-150-150-225-56-274 56-273 150-225 225-150 273-56 274 56 225 150 150 225 55 273q0 220-124 399l343 343q37 37 37 90z"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/search.svg: -------------------------------------------------------------------------------- 1 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1792 1792"><path fill="#fff" d="M1216 832q0-185-131-316T768 384 452 516 320 832t132 317 316 131 317-131 131-317zm512 832q0 52-38 90t-90 38q-54 0-90-38l-343-342q-179 124-399 124-143 0-273-55t-225-150-150-225-56-274 56-273 150-225 225-150 273-56 274 56 225 150 150 225 55 273q0 220-124 399l343 343q37 37 37 90z"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/send-o.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1764 11q33 24 27 64l-256 1536q-5 29-32 45-14 8-31 8-11 0-24-5l-527-215-298 327q-18 21-47 21-14 0-23-4-19-7-30-23.5t-11-36.5v-452l-472-193q-37-14-40-55-3-39 32-59l1664-960q35-21 68 2zm-342 1499l221-1323-1434 827 336 137 863-639-478 797z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/send.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1764 11q33 24 27 64l-256 1536q-5 29-32 45-14 8-31 8-11 0-24-5l-453-185-242 295q-18 23-49 23-13 0-22-4-19-7-30.5-23.5t-11.5-36.5v-349l864-1059-1069 925-395-162q-37-14-40-55-2-40 32-59l1664-960q15-9 32-9 20 0 36 11z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/shield.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1344 960v-640h-448v1137q119-63 213-137 235-184 235-360zm192-768v768q0 86-33.5 170.5t-83 150-118 127.5-126.5 103-121 77.5-89.5 49.5-42.5 20q-12 6-26 6t-26-6q-16-7-42.5-20t-89.5-49.5-121-77.5-126.5-103-118-127.5-83-150-33.5-170.5v-768q0-26 19-45t45-19h1152q26 0 45 19t19 45z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/sort-asc.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1408 704q0 26-19 45t-45 19h-896q-26 0-45-19t-19-45 19-45l448-448q19-19 45-19t45 19l448 448q19 19 19 45z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/sort-desc.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1408 1088q0 26-19 45l-448 448q-19 19-45 19t-45-19l-448-448q-19-19-19-45t19-45 45-19h896q26 0 45 19t19 45z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/sort-down.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1408 1088q0 26-19 45l-448 448q-19 19-45 19t-45-19l-448-448q-19-19-19-45t19-45 45-19h896q26 0 45 19t19 45z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/sort-up.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1408 704q0 26-19 45t-45 19h-896q-26 0-45-19t-19-45 19-45l448-448q19-19 45-19t45 19l448 448q19 19 19 45z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/sort.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1408 1088q0 26-19 45l-448 448q-19 19-45 19t-45-19l-448-448q-19-19-19-45t19-45 45-19h896q26 0 45 19t19 45zm0-384q0 26-19 45t-45 19h-896q-26 0-45-19t-19-45 19-45l448-448q19-19 45-19t45 19l448 448q19 19 19 45z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/spoon.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1216 528q0 145-57 243.5t-152 135.5l45 821q2 26-16 45t-44 19h-192q-26 0-44-19t-16-45l45-821q-95-37-152-135.5t-57-243.5q0-128 42.5-249.5t117.5-200 160-78.5 160 78.5 117.5 200 42.5 249.5z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/square-o.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1312 256h-832q-66 0-113 47t-47 113v832q0 66 47 113t113 47h832q66 0 113-47t47-113v-832q0-66-47-113t-113-47zm288 160v832q0 119-84.5 203.5t-203.5 84.5h-832q-119 0-203.5-84.5t-84.5-203.5v-832q0-119 84.5-203.5t203.5-84.5h832q119 0 203.5 84.5t84.5 203.5z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/square.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1664 416v960q0 119-84.5 203.5t-203.5 84.5h-960q-119 0-203.5-84.5t-84.5-203.5v-960q0-119 84.5-203.5t203.5-84.5h960q119 0 203.5 84.5t84.5 203.5z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/stack-exchange.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1515 1253v66q0 85-57.5 144.5t-138.5 59.5h-57l-260 269v-269h-529q-81 0-138.5-59.5t-57.5-144.5v-66h1238zm0-326v255h-1238v-255h1238zm0-328v255h-1238v-255h1238zm0-140v67h-1238v-67q0-84 57.5-143.5t138.5-59.5h846q81 0 138.5 59.5t57.5 143.5z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/stack-overflow.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1417 1632h-1118v-480h-160v640h1438v-640h-160v480zm-942-524l33-157 783 165-33 156zm103-374l67-146 725 339-67 145zm201-356l102-123 614 513-102 123zm397-378l477 641-128 96-477-641zm-718 1471v-159h800v159h-800z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/star-half-empty.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1250 957l257-250-356-52-66-10-30-60-159-322v963l59 31 318 168-60-355-12-66zm452-262l-363 354 86 500q5 33-6 51.5t-34 18.5q-17 0-40-12l-449-236-449 236q-23 12-40 12-23 0-34-18.5t-6-51.5l86-500-364-354q-32-32-23-59.5t54-34.5l502-73 225-455q20-41 49-41 28 0 49 41l225 455 502 73q45 7 54 34.5t-24 59.5z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/star-half-full.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1250 957l257-250-356-52-66-10-30-60-159-322v963l59 31 318 168-60-355-12-66zm452-262l-363 354 86 500q5 33-6 51.5t-34 18.5q-17 0-40-12l-449-236-449 236q-23 12-40 12-23 0-34-18.5t-6-51.5l86-500-364-354q-32-32-23-59.5t54-34.5l502-73 225-455q20-41 49-41 28 0 49 41l225 455 502 73q45 7 54 34.5t-24 59.5z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/star-half-o.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1250 957l257-250-356-52-66-10-30-60-159-322v963l59 31 318 168-60-355-12-66zm452-262l-363 354 86 500q5 33-6 51.5t-34 18.5q-17 0-40-12l-449-236-449 236q-23 12-40 12-23 0-34-18.5t-6-51.5l86-500-364-354q-32-32-23-59.5t54-34.5l502-73 225-455q20-41 49-41 28 0 49 41l225 455 502 73q45 7 54 34.5t-24 59.5z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/star-half.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1280 32v1339l-449 236q-22 12-40 12-21 0-31.5-14.5t-10.5-35.5q0-6 2-20l86-500-364-354q-25-27-25-48 0-37 56-46l502-73 225-455q19-41 49-41z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/star-o.svg: -------------------------------------------------------------------------------- 1 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1792 1792"><path fill="#fff" d="M1201 1004l306-297-422-62-189-382-189 382-422 62 306 297-73 421 378-199 377 199zm527-357q0 22-26 48l-363 354 86 500 1 20q0 50-41 50-19 0-40-12l-449-236-449 236q-22 12-40 12-21 0-31-14t-11-36l2-20 86-500L89 695q-25-27-25-48 0-37 56-46l502-73L847 73q19-41 49-41t49 41l225 455 502 73q56 9 56 46z"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/star.svg: -------------------------------------------------------------------------------- 1 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1792 1792"><path fill="#fff" d="M1728 647q0 22-26 48l-363 354 86 500 1 20q0 21-10 36t-31 14q-19 0-40-12l-449-236-449 236q-22 12-40 12-21 0-31-14t-11-36l2-20 86-500L89 695q-25-27-25-48 0-37 56-46l502-73L847 73q19-41 49-41t49 41l225 455 502 73q56 9 56 46z"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/step-backward.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1363 141q19-19 32-13t13 32v1472q0 26-13 32t-32-13l-710-710q-9-9-13-19v678q0 26-19 45t-45 19h-128q-26 0-45-19t-19-45v-1408q0-26 19-45t45-19h128q26 0 45 19t19 45v678q4-10 13-19z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/step-forward.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M429 1651q-19 19-32 13t-13-32v-1472q0-26 13-32t32 13l710 710q9 9 13 19v-678q0-26 19-45t45-19h128q26 0 45 19t19 45v1408q0 26-19 45t-45 19h-128q-26 0-45-19t-19-45v-678q-4 10-13 19z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/sticky-note-o.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1528 1280h-248v248q29-10 41-22l185-185q12-12 22-41zm-280-128h288v-896h-1280v1280h896v-288q0-40 28-68t68-28zm416-928v1024q0 40-20 88t-48 76l-184 184q-28 28-76 48t-88 20h-1024q-40 0-68-28t-28-68v-1344q0-40 28-68t68-28h1344q40 0 68 28t28 68z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/sticky-note.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1152 1248v416h-928q-40 0-68-28t-28-68v-1344q0-40 28-68t68-28h1344q40 0 68 28t28 68v928h-416q-40 0-68 28t-28 68zm128 32h381q-15 82-65 132l-184 184q-50 50-132 65v-381z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/stop-circle.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1216 1184v-576q0-14-9-23t-23-9h-576q-14 0-23 9t-9 23v576q0 14 9 23t23 9h576q14 0 23-9t9-23zm448-288q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/stop.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1664 192v1408q0 26-19 45t-45 19h-1408q-26 0-45-19t-19-45v-1408q0-26 19-45t45-19h1408q26 0 45 19t19 45z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/suitcase.svg: -------------------------------------------------------------------------------- 1 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1792 1792"><path fill="#fff" d="M640 384h512V256H640v128zm-352 0v1280h-64q-92 0-158-66T0 1440V608q0-92 66-158t158-66h64zm1120 0v1280H384V384h128V224q0-40 28-68t68-28h576q40 0 68 28t28 68v160h128zm384 224v832q0 92-66 158t-158 66h-64V384h64q92 0 158 66t66 158z"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/tablet.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M960 1408q0-26-19-45t-45-19-45 19-19 45 19 45 45 19 45-19 19-45zm384-160v-960q0-13-9.5-22.5t-22.5-9.5h-832q-13 0-22.5 9.5t-9.5 22.5v960q0 13 9.5 22.5t22.5 9.5h832q13 0 22.5-9.5t9.5-22.5zm128-960v1088q0 66-47 113t-113 47h-832q-66 0-113-47t-47-113v-1088q0-66 47-113t113-47h832q66 0 113 47t47 113z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/tag.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M576 448q0-53-37.5-90.5t-90.5-37.5-90.5 37.5-37.5 90.5 37.5 90.5 90.5 37.5 90.5-37.5 37.5-90.5zm1067 576q0 53-37 90l-491 492q-39 37-91 37-53 0-90-37l-715-716q-38-37-64.5-101t-26.5-117v-416q0-52 38-90t90-38h416q53 0 117 26.5t102 64.5l715 714q37 39 37 91z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/telegram.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1189 1307l147-693q9-44-10.5-63t-51.5-7l-864 333q-29 11-39.5 25t-2.5 26.5 32 19.5l221 69 513-323q21-14 32-6 7 5-4 15l-415 375-16 228q23 0 45-22l108-104 224 165q64 36 81-38zm603-411q0 182-71 348t-191 286-286 191-348 71-348-71-286-191-191-286-71-348 71-348 191-286 286-191 348-71 348 71 286 191 191 286 71 348z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/terminal.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M649 983l-466 466q-10 10-23 10t-23-10l-50-50q-10-10-10-23t10-23l393-393-393-393q-10-10-10-23t10-23l50-50q10-10 23-10t23 10l466 466q10 10 10 23t-10 23zm1079 457v64q0 14-9 23t-23 9h-960q-14 0-23-9t-9-23v-64q0-14 9-23t23-9h960q14 0 23 9t9 23z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/thumb-tack.svg: -------------------------------------------------------------------------------- 1 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1792 1792"><path fill="#fff" d="M800 864V416q0-14-9-23t-23-9-23 9-9 23v448q0 14 9 23t23 9 23-9 9-23zm672 352q0 26-19 45t-45 19H979l-51 483q-2 12-10 21t-21 8h-1q-27 0-32-27l-76-485H384q-26 0-45-19t-19-45q0-123 79-221t177-99V384q-52 0-90-38t-38-90 38-90 90-38h640q52 0 90 38t38 90-38 90-90 38v512q99 0 178 99t78 221z"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/times.svg: -------------------------------------------------------------------------------- 1 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1792 1792"><path fill="#fff" d="M1490 1322q0 40-28 68l-136 136q-28 28-68 28t-68-28l-294-294-294 294q-28 28-68 28t-68-28l-136-136q-28-28-28-68t28-68l294-294-294-294q-28-28-28-68t28-68l136-136q28-28 68-28t68 28l294 294 294-294q28-28 68-28t68 28l136 136q28 28 28 68t-28 68l-294 294 294 294q28 28 28 68z"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/train.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1216 0q185 0 316.5 93.5t131.5 226.5v896q0 130-125.5 222t-305.5 97l213 202q16 15 8 35t-30 20h-1056q-22 0-30-20t8-35l213-202q-180-5-305.5-97t-125.5-222v-896q0-133 131.5-226.5t316.5-93.5h640zm-320 1344q80 0 136-56t56-136-56-136-136-56-136 56-56 136 56 136 136 56zm576-576v-512h-1152v512h1152z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/trello.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M832 1344v-1024q0-14-9-23t-23-9h-480q-14 0-23 9t-9 23v1024q0 14 9 23t23 9h480q14 0 23-9t9-23zm672-384v-640q0-14-9-23t-23-9h-480q-14 0-23 9t-9 23v640q0 14 9 23t23 9h480q14 0 23-9t9-23zm160-768v1408q0 26-19 45t-45 19h-1408q-26 0-45-19t-19-45v-1408q0-26 19-45t45-19h1408q26 0 45 19t19 45z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/tumblr.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1328 1329l80 237q-23 35-111 66t-177 32q-104 2-190.5-26t-142.5-74-95-106-55.5-120-16.5-118v-544h-168v-215q72-26 129-69.5t91-90 58-102 34-99 15-88.5q1-5 4.5-8.5t7.5-3.5h244v424h333v252h-334v518q0 30 6.5 56t22.5 52.5 49.5 41.5 81.5 14q78-2 134-29z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/twitch.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M896 434v434h-145v-434h145zm398 0v434h-145v-434h145zm0 760l253-254v-795h-1194v1049h326v217l217-217h398zm398-1194v1013l-434 434h-326l-217 217h-217v-217h-398v-1158l109-289h1483z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/university.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="2048" height="1792" viewBox="0 0 2048 1792" xmlns="http://www.w3.org/2000/svg"><path d="M960 0l960 384v128h-128q0 26-20.5 45t-48.5 19h-1526q-28 0-48.5-19t-20.5-45h-128v-128zm-704 640h256v768h128v-768h256v768h128v-768h256v768h128v-768h256v768h59q28 0 48.5 19t20.5 45v64h-1664v-64q0-26 20.5-45t48.5-19h59v-768zm1595 960q28 0 48.5 19t20.5 45v128h-1920v-128q0-26 20.5-45t48.5-19h1782z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/unlock-alt.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1376 768q40 0 68 28t28 68v576q0 40-28 68t-68 28h-960q-40 0-68-28t-28-68v-576q0-40 28-68t68-28h32v-320q0-185 131.5-316.5t316.5-131.5 316.5 131.5 131.5 316.5q0 26-19 45t-45 19h-64q-26 0-45-19t-19-45q0-106-75-181t-181-75-181 75-75 181v320h736z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/unlock.svg: -------------------------------------------------------------------------------- 1 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1792 1792"><path fill="#fff" d="M1728 576v256q0 26-19 45t-45 19h-64q-26 0-45-19t-19-45V576q0-106-75-181t-181-75-181 75-75 181v192h96q40 0 68 28t28 68v576q0 40-28 68t-68 28H160q-40 0-68-28t-28-68V864q0-40 28-68t68-28h672V576q0-185 132-316t316-132 317 132 131 316z"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/unsorted.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1408 1088q0 26-19 45l-448 448q-19 19-45 19t-45-19l-448-448q-19-19-19-45t19-45 45-19h896q26 0 45 19t19 45zm0-384q0 26-19 45t-45 19h-896q-26 0-45-19t-19-45 19-45l448-448q19-19 45-19t45 19l448 448q19 19 19 45z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/user.svg: -------------------------------------------------------------------------------- 1 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1792 1792"><path fill="#fff" d="M1536 1399q0 109-62 187t-151 78H469q-88 0-150-78t-63-187q0-85 9-160t31-152 59-131 94-89 134-35q131 128 313 128t313-128q76 0 135 35t94 89 58 131 32 152 8 160zm-256-887q0 159-112 272T896 896 625 784 512 512t113-271 271-113 272 113 112 271z"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/viacoin.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1664 0l-192 448h192v192h-274l-55 128h329v192h-411l-357 832-357-832h-411v-192h329l-55-128h-274v-192h192l-192-448h256l323 768h378l323-768h256zm-768 1216l108-256h-216z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/video-camera.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1792 352v1088q0 42-39 59-13 5-25 5-27 0-45-19l-403-403v166q0 119-84.5 203.5t-203.5 84.5h-704q-119 0-203.5-84.5t-84.5-203.5v-704q0-119 84.5-203.5t203.5-84.5h704q119 0 203.5 84.5t84.5 203.5v165l403-402q18-19 45-19 12 0 25 5 39 17 39 59z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/vimeo.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1709 518q-10 236-332 651-333 431-562 431-142 0-240-263-44-160-132-482-72-262-157-262-18 0-127 76l-77-98q24-21 108-96.5t130-115.5q156-138 241-146 95-9 153 55.5t81 203.5q44 287 66 373 55 249 120 249 51 0 154-161 101-161 109-246 13-139-109-139-57 0-121 26 120-393 459-382 251 8 236 326z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/volume-off.svg: -------------------------------------------------------------------------------- 1 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1792 1792"><path fill="#fff" d="M1280 352v1088q0 26-19 45t-45 19-45-19l-333-333H576q-26 0-45-19t-19-45V704q0-26 19-45t45-19h262l333-333q19-19 45-19t45 19 19 45z"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/window-maximize.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M256 1408h1280v-768h-1280v768zm1536-1120v1216q0 66-47 113t-113 47h-1472q-66 0-113-47t-47-113v-1216q0-66 47-113t113-47h1472q66 0 113 47t47 113z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/window-minimize.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1792 1312v192q0 66-47 113t-113 47h-1472q-66 0-113-47t-47-113v-192q0-66 47-113t113-47h1472q66 0 113 47t47 113z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/window-restore.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="2048" height="1792" viewBox="0 0 2048 1792" xmlns="http://www.w3.org/2000/svg"><path d="M256 1536h768v-512h-768v512zm1024-512h512v-768h-768v256h96q66 0 113 47t47 113v352zm768-864v960q0 66-47 113t-113 47h-608v352q0 66-47 113t-113 47h-960q-66 0-113-47t-47-113v-960q0-66 47-113t113-47h608v-352q0-66 47-113t113-47h960q66 0 113 47t47 113z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/windows.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M746 1006v651l-682-94v-557h682zm0-743v659h-682v-565zm982 743v786l-907-125v-661h907zm0-878v794h-907v-669z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/xing.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M789 667q-10 18-257 456-27 46-65 46h-239q-21 0-31-17t0-36l253-448q1 0 0-1l-161-279q-12-22-1-37 9-15 32-15h239q40 0 66 45zm806-642q11 16 0 37l-528 934v1l336 615q11 20 1 37-10 15-32 15h-239q-42 0-66-45l-339-622q18-32 531-942 25-45 64-45h241q22 0 31 15z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/y-combinator-square.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M937 1004l266-499h-112l-157 312q-24 48-44 92l-42-92-155-312h-120l263 493v324h101v-318zm727-588v960q0 119-84.5 203.5t-203.5 84.5h-960q-119 0-203.5-84.5t-84.5-203.5v-960q0-119 84.5-203.5t203.5-84.5h960q119 0 203.5 84.5t84.5 203.5z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/y-combinator.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M937 1004l266-499h-112l-157 312q-24 48-44 92l-42-92-155-312h-120l263 493v324h101v-318zm727-876v1536h-1536v-1536h1536z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/yahoo.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M987 957l13 707q-62-11-105-11-41 0-105 11l13-707q-40-69-168.5-295.5t-216.5-374.5-181-287q58 15 108 15 44 0 111-15 63 111 133.5 229.5t167 276.5 138.5 227q37-61 109.5-177.5t117.5-190 105-176 107-189.5q54 14 107 14 56 0 114-14-28 39-60 88.5t-49.5 78.5-56.5 96-49 84q-146 248-353 610z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/yc-square.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M937 1004l266-499h-112l-157 312q-24 48-44 92l-42-92-155-312h-120l263 493v324h101v-318zm727-588v960q0 119-84.5 203.5t-203.5 84.5h-960q-119 0-203.5-84.5t-84.5-203.5v-960q0-119 84.5-203.5t203.5-84.5h960q119 0 203.5 84.5t84.5 203.5z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /src/thirdparty/font-awesome-svg-png/white/svg/yc.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M937 1004l266-499h-112l-157 312q-24 48-44 92l-42-92-155-312h-120l263 493v324h101v-318zm727-876v1536h-1536v-1536h1536z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /static/apple-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/static/apple-icon.png -------------------------------------------------------------------------------- /static/eng.traineddata.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/static/eng.traineddata.gz -------------------------------------------------------------------------------- /static/favicon-alert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/static/favicon-alert.png -------------------------------------------------------------------------------- /static/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/static/favicon.png -------------------------------------------------------------------------------- /static/icon-144-maskable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/static/icon-144-maskable.png -------------------------------------------------------------------------------- /static/icon-144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/static/icon-144.png -------------------------------------------------------------------------------- /static/icon-150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/static/icon-150.png -------------------------------------------------------------------------------- /static/icon-192-maskable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/static/icon-192-maskable.png -------------------------------------------------------------------------------- /static/icon-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/static/icon-192.png -------------------------------------------------------------------------------- /static/icon-44.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/static/icon-44.png -------------------------------------------------------------------------------- /static/icon-48-maskable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/static/icon-48-maskable.png -------------------------------------------------------------------------------- /static/icon-48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/static/icon-48.png -------------------------------------------------------------------------------- /static/icon-50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/static/icon-50.png -------------------------------------------------------------------------------- /static/icon-512-maskable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/static/icon-512-maskable.png -------------------------------------------------------------------------------- /static/icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/static/icon-512.png -------------------------------------------------------------------------------- /static/icon-72-maskable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/static/icon-72-maskable.png -------------------------------------------------------------------------------- /static/icon-72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/static/icon-72.png -------------------------------------------------------------------------------- /static/icon-96-maskable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/static/icon-96-maskable.png -------------------------------------------------------------------------------- /static/icon-96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/static/icon-96.png -------------------------------------------------------------------------------- /static/icon-push-badge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/static/icon-push-badge.png -------------------------------------------------------------------------------- /static/icon-push-fa-retweet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/static/icon-push-fa-retweet.png -------------------------------------------------------------------------------- /static/icon-push-fa-star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/static/icon-push-fa-star.png -------------------------------------------------------------------------------- /static/icon-shortcut-fa-bell.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/static/icon-shortcut-fa-bell.png -------------------------------------------------------------------------------- /static/icon-shortcut-fa-pencil.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/static/icon-shortcut-fa-pencil.png -------------------------------------------------------------------------------- /static/ipad_splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/static/ipad_splash.png -------------------------------------------------------------------------------- /static/ipadpro1_splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/static/ipadpro1_splash.png -------------------------------------------------------------------------------- /static/ipadpro2_splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/static/ipadpro2_splash.png -------------------------------------------------------------------------------- /static/ipadpro3_splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/static/ipadpro3_splash.png -------------------------------------------------------------------------------- /static/iphone5_splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/static/iphone5_splash.png -------------------------------------------------------------------------------- /static/iphone6_splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/static/iphone6_splash.png -------------------------------------------------------------------------------- /static/iphoneplus_splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/static/iphoneplus_splash.png -------------------------------------------------------------------------------- /static/iphonex_splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/static/iphonex_splash.png -------------------------------------------------------------------------------- /static/iphonexr_splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/static/iphonexr_splash.png -------------------------------------------------------------------------------- /static/iphonexsmax_splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/static/iphonexsmax_splash.png -------------------------------------------------------------------------------- /static/screenshot-540-720-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/static/screenshot-540-720-1.png -------------------------------------------------------------------------------- /static/screenshot-540-720-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/static/screenshot-540-720-2.png -------------------------------------------------------------------------------- /static/screenshot-540-720-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/static/screenshot-540-720-3.png -------------------------------------------------------------------------------- /tests/blobUtils.js: -------------------------------------------------------------------------------- 1 | export function base64StringToBlob (base64, type) { 2 | function binaryStringToArrayBuffer (binary) { 3 | const length = binary.length 4 | const buf = new ArrayBuffer(length) 5 | const arr = new Uint8Array(buf) 6 | let i = -1 7 | while (++i < length) { 8 | arr[i] = binary.charCodeAt(i) 9 | } 10 | return buf 11 | } 12 | 13 | const parts = [binaryStringToArrayBuffer(atob(base64))] 14 | return type ? new Blob(parts, { type }) : new Blob(parts) 15 | } 16 | -------------------------------------------------------------------------------- /tests/fixtures/system.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/tests/fixtures/system.tgz -------------------------------------------------------------------------------- /tests/images/kitten1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/tests/images/kitten1.gif -------------------------------------------------------------------------------- /tests/images/kitten1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/tests/images/kitten1.jpg -------------------------------------------------------------------------------- /tests/images/kitten1.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/tests/images/kitten1.mp4 -------------------------------------------------------------------------------- /tests/images/kitten2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/tests/images/kitten2.gif -------------------------------------------------------------------------------- /tests/images/kitten2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/tests/images/kitten2.jpg -------------------------------------------------------------------------------- /tests/images/kitten2.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/tests/images/kitten2.mp4 -------------------------------------------------------------------------------- /tests/images/kitten3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/tests/images/kitten3.jpg -------------------------------------------------------------------------------- /tests/images/kitten4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/tests/images/kitten4.jpg -------------------------------------------------------------------------------- /tests/images/kitten5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NickColley/semaphore/a7eaec339186330d402c67cebdd1fce110dc0155/tests/images/kitten5.jpg -------------------------------------------------------------------------------- /tests/indexedDBShims.js: -------------------------------------------------------------------------------- 1 | import { indexedDB, IDBKeyRange } from 'fake-indexeddb' 2 | 3 | global.indexedDB = indexedDB 4 | global.IDBKeyRange = IDBKeyRange 5 | -------------------------------------------------------------------------------- /tests/loadMedia.cjs: -------------------------------------------------------------------------------- 1 | const fs = require('fs') 2 | const path = require('path') 3 | 4 | // Have to use CJS so this file can run in TestCafe. Otherwise it's impossible to get __dirname to work in both envs 5 | const dirname = __dirname 6 | 7 | exports.loadMedia = function loadMedia (filename) { 8 | const filepath = path.join(dirname, 'images', filename) 9 | if (!fs.existsSync(filepath)) { 10 | throw new Error('File does not exist: ' + filepath) 11 | } 12 | return fs.createReadStream(filepath) 13 | } 14 | -------------------------------------------------------------------------------- /webpack/terser.config.js: -------------------------------------------------------------------------------- 1 | import TerserWebpackPlugin from 'terser-webpack-plugin' 2 | import terserOptions from '../bin/terserOptions' 3 | 4 | export default () => new TerserWebpackPlugin({ 5 | exclude: /(tesseract-asset|page-lifecycle)/, // tesseract causes problems, page-lifecycle is pre-minified 6 | parallel: true, 7 | terserOptions 8 | }) 9 | -------------------------------------------------------------------------------- /webpack/webpack.config.js: -------------------------------------------------------------------------------- 1 | import client from './client.config.js' 2 | import server from './server.config.js' 3 | import serviceworker from './service-worker.config.js' 4 | 5 | export default { 6 | client, 7 | server, 8 | serviceworker 9 | } 10 | --------------------------------------------------------------------------------