diff --git a/clients/extension/.gitignore b/clients/extension/.gitignore deleted file mode 100644 index 2b4c91dab..000000000 --- a/clients/extension/.gitignore +++ /dev/null @@ -1,31 +0,0 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -node_modules - -# testing -coverage - -# production -dist - -# misc -.DS_Store - -# lock files -yarn.lock -package-lock.json - -# debug files -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# extension.js -extension-env.d.ts - -# keys -.env -.env.chrome -.env.firefox -.env.safari diff --git a/clients/extension/README.md b/clients/extension/README.md deleted file mode 100644 index 7282639d7..000000000 --- a/clients/extension/README.md +++ /dev/null @@ -1,31 +0,0 @@ -# Save to Pocket - -> Save to Pocket from anywhere and access it when you need it wherever you are - -## Available Scripts - -In the project directory, you can run the following scripts: - -### pnpm dev - -**Development Mode**: This command runs your extension in development mode. It will launch a new browser instance with your extension loaded. The page will automatically reload whenever you make changes to your code, allowing for a smooth development experience. - -```bash -pnpm dev -``` - -### pnpm start - -**Production Preview**: This command runs your extension in production mode. It will launch a new browser instance with your extension loaded, simulating the environment and behavior of your extension as it will appear once published. - -```bash -pnpm start -``` - -### pnpm build - -**Build for Production**: This command builds your extension for production. It optimizes and bundles your extension, preparing it for deployment to the target browser's store. - -```bash -pnpm build -``` diff --git a/clients/extension/action/app.tsx b/clients/extension/action/app.tsx deleted file mode 100644 index f1e6d34b2..000000000 --- a/clients/extension/action/app.tsx +++ /dev/null @@ -1,143 +0,0 @@ -import { useEffect, useState } from 'react' -import { EXT_ACTIONS } from '../actions' -import { ActionContainer } from '../components/action-container' -import { sendMessage } from '../utilities/send-message' - -import type { ExtItem, ExtMessage } from '../types' -import type { NoteEdge } from '@common/types/pocket' - -export function App() { - const [isOpen, setIsOpen] = useState(false) - const [saveStatus, setSaveStatus] = useState('saving') - const [noteStatus, setNoteStatus] = useState(undefined) - const [errorMessage, setErrorMessage] = useState(undefined) - const [item, setItem] = useState(undefined) - const [notes, setNotes] = useState([]) - - /* Setup Listeners and show popup - –––––––––––––––––––––––––––––––––––––––––––––––––– */ - useEffect(() => { - setIsOpen(true) - chrome.runtime.onMessage.addListener(handleMessages) - return () => { - setIsOpen(false) - chrome.runtime.onMessage.removeListener(handleMessages) - } - }, []) - - /* Send a message on action activating - –––––––––––––––––––––––––––––––––––––––––––––––––– */ - useEffect(() => { - if (isOpen) void sendMessage({ action: EXT_ACTIONS.BROWSER_ACTION }) - }, [isOpen]) - - /* Handle incoming messages - –––––––––––––––––––––––––––––––––––––––––––––––––– */ - function handleMessages(message: ExtMessage) { - const { action = 'Unknown Action' } = message || {} - - switch (action) { - case EXT_ACTIONS.ADD_NOTE_SUCCESS: - case EXT_ACTIONS.SAVE_TO_POCKET_SUCCESS: { - const item = message?.item as ExtItem - setItem(item) - setNotes(item.savedItem.notes.edges) - setNoteStatus(undefined) - setSaveStatus('saved') - return - } - - case EXT_ACTIONS.SAVE_TO_POCKET_FAILURE: { - const { error } = message ?? 'Unknown error' - setErrorMessage(error) - setSaveStatus('save_failed') - return - } - - case EXT_ACTIONS.ADD_NOTE_FAILURE: { - const { error } = message ?? 'Unknown error' - setNoteStatus(undefined) - setErrorMessage(error) - return - } - - case EXT_ACTIONS.DELETE_NOTE_SUCCESS: { - const { noteId } = message - if (noteId) { - setNoteStatus(undefined) - setNotes((notes) => { - return notes.filter((note) => note?.node?.id !== noteId) - }) - } - return - } - - case EXT_ACTIONS.REMOVE_ITEM_REQUEST: { - setSaveStatus('removing') - return - } - - case EXT_ACTIONS.REMOVE_ITEM_SUCCESS: { - setSaveStatus('removed') - return - } - - case EXT_ACTIONS.REMOVE_ITEM_FAILURE: { - setSaveStatus('remove_failed') - return - } - - case EXT_ACTIONS.TAG_SYNC_REQUEST: { - setSaveStatus('tags_saving') - return - } - - case EXT_ACTIONS.TAG_SYNC_SUCCESS: { - setSaveStatus('tags_saved') - return - } - - case EXT_ACTIONS.TAG_SYNC_FAILURE: { - setSaveStatus('tags_failed') - return - } - - case EXT_ACTIONS.UPDATE_TAG_ERROR: { - const { error } = message ?? 'Unknown error' - setErrorMessage(error) - return - } - - case EXT_ACTIONS.AUTH_ERROR: { - setErrorMessage('Authorization Error') - return - } - - default: { - return - } - } - } - - /* Send messages - –––––––––––––––––––––––––––––––––––––––––––––––––– */ - const actionUnSave = () => {} - - const actionLogOut = () => { - void sendMessage({ action: EXT_ACTIONS.LOGGED_OUT_OF_POCKET }) - } - - return ( - - ) -} diff --git a/clients/extension/action/index.html b/clients/extension/action/index.html deleted file mode 100644 index 89f4272a8..000000000 --- a/clients/extension/action/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - Save to Pocket - - - -
- - - diff --git a/clients/extension/action/script.tsx b/clients/extension/action/script.tsx deleted file mode 100644 index 7388f80ab..000000000 --- a/clients/extension/action/script.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import React from 'react' -import ReactDOM from 'react-dom/client' -import '../public/styles/fonts.css' -import '../public/styles/global.css' -import { App } from './app' - -const root = ReactDOM.createRoot(document.getElementById('root')!) - -root.render( - - - -) diff --git a/clients/extension/actions.ts b/clients/extension/actions.ts deleted file mode 100644 index aee7e0edd..000000000 --- a/clients/extension/actions.ts +++ /dev/null @@ -1,37 +0,0 @@ -export enum EXT_ACTIONS { - AUTH_CODE_RECEIVED = 'AUTH_CODE_RECEIVED', - AUTH_ERROR = 'AUTH_ERROR', - BROWSER_ACTION = 'BROWSER_ACTION', - COLOR_MODE_CHANGE = 'COLOR_MODE_CHANGE', - LOGGED_OUT_OF_POCKET = 'LOGGED_OUT_OF_POCKET', - OPEN_OPTIONS = 'OPEN_OPTIONS', - OPEN_POCKET = 'OPEN_POCKET', - POPUP_CLOSED = 'POPUP_CLOSED', - REMOVE_ITEM = 'REMOVE_ITEM', - REMOVE_ITEM_FAILURE = 'REMOVE_ITEM_FAILURE', - REMOVE_ITEM_REQUEST = 'REMOVE_ITEM_REQUEST', - REMOVE_ITEM_SUCCESS = 'REMOVE_ITEM_SUCCESS', - RESAVE_ITEM = 'RESAVE_ITEM', - SAVE_TO_POCKET_FAILURE = 'SAVE_TO_POCKET_FAILURE', - SAVE_TO_POCKET_REQUEST = 'SAVE_TO_POCKET_REQUEST', - SAVE_TO_POCKET_SUCCESS = 'SAVE_TO_POCKET_SUCCESS', - SELECTION_ADD = 'SELECTION_ADD', - SEND_TAG_ERROR = 'SEND_TAG_ERROR', - SUGGESTED_TAGS_FAILURE = 'SUGGESTED_TAGS_FAILURE', - SUGGESTED_TAGS_SUCCESS = 'SUGGESTED_TAGS_SUCCESS', - TAG_SYNC_FAILURE = 'TAG_SYNC_FAILURE', - TAG_SYNC_REQUEST = 'TAG_SYNC_REQUEST', - TAG_SYNC_SUCCESS = 'TAG_SYNC_SUCCESS', - TAGS_SYNC = 'TAGS_SYNC', - UNKNOWN_ACTION = 'UNKNOWN_ACTION', - UPDATE_ITEM_PREVIEW = 'UPDATE_ITEM_PREVIEW', - UPDATE_STORED_TAGS = 'UPDATE_STORED_TAGS', - UPDATE_TAG_ERROR = 'UPDATE_TAG_ERROR', - USER_LOG_IN = 'USER_LOG_IN', - ADD_NOTE_REQUEST = 'ADD_NOTE_REQUEST', - ADD_NOTE_SUCCESS = 'ADD_NOTE_SUCCESS', - ADD_NOTE_FAILURE = 'ADD_NOTE_FAILURE', - DELETE_NOTE_REQUEST = 'DELETE_NOTE_REQUEST', - DELETE_NOTE_SUCCESS = 'DELETE_NOTE_SUCCESS', - DELETE_NOTE_FAILURE = 'DELETE_NOTE_FAILURE' -} diff --git a/clients/extension/background/api/add-note.ts b/clients/extension/background/api/add-note.ts deleted file mode 100644 index 6b73923bb..000000000 --- a/clients/extension/background/api/add-note.ts +++ /dev/null @@ -1,75 +0,0 @@ -import { extensionRequest } from '../../utilities/request' -import { verifySession } from '../auth' -import { FRAGMENT_ITEM_PREVIEW } from './fragments/preview' -import { FRAGMENT_SAVED_ITEM } from './fragments/saved-item' - -import type { ExtItem, ExtSavedItem } from '../../types' -import type { CreateNoteMarkdownInput } from '@common/types/pocket' - -interface ExtCreateNoteMarkdown { - archived: boolean - contentPreview: string - createdAt: string - deleted: boolean - docMarkdown: boolean - id: string - source: string | undefined - title: string | undefined - updatedAt: string - savedItem: ExtSavedItem -} - -const gql = String.raw -const query = gql` - mutation CreateNoteMarkdown($input: CreateNoteMarkdownInput!) { - createNoteMarkdown(input: $input) { - archived - contentPreview - createdAt - deleted - docMarkdown - id - source - title - updatedAt - savedItem { - ...ItemSaved - item { - ... on Item { - preview { - ...ItemPreview - } - } - } - } - } - } - - ${FRAGMENT_SAVED_ITEM} - ${FRAGMENT_ITEM_PREVIEW} -` - -export async function addNote(input: CreateNoteMarkdownInput) { - // We need a token to save. This will create a session if need be - // be requesting a new bearer if the current one is expired - const token = await verifySession() - - // Set up the variables we need for this request - const data = { variables: { input }, query } - - // Make the request and return it - const response = await extensionRequest<{ createNoteMarkdown: ExtCreateNoteMarkdown }>( - data, - token - ) - - const responseItem = response?.createNoteMarkdown?.savedItem - const { item, ...savedItem } = responseItem - const preview = item?.preview - - // We have got a pending item back from the server ... we should handle it - if (!item || !preview) throw new Error(`Trouble creating note`) - - const validItem: ExtItem = { savedItem, preview } - return validItem -} diff --git a/clients/extension/background/api/fragments/preview.ts b/clients/extension/background/api/fragments/preview.ts deleted file mode 100644 index dc7984793..000000000 --- a/clients/extension/background/api/fragments/preview.ts +++ /dev/null @@ -1,30 +0,0 @@ -const gql = String.raw - -export const FRAGMENT_ITEM_PREVIEW = gql` - fragment ItemPreview on PocketMetadata { - ... on ItemSummary { - previewId: id - id - image { - caption - credit - url - cachedImages(imageOptions: [{ width: 80, id: "ext", height: 80, fileType: PNG }]) { - url - id - } - } - excerpt - title - authors { - name - } - domain { - name - } - datePublished - url - source - } - } -` diff --git a/clients/extension/background/api/fragments/saved-item.ts b/clients/extension/background/api/fragments/saved-item.ts deleted file mode 100644 index 0a486f6a9..000000000 --- a/clients/extension/background/api/fragments/saved-item.ts +++ /dev/null @@ -1,30 +0,0 @@ -const gql = String.raw - -export const FRAGMENT_SAVED_ITEM = gql` - fragment ItemSaved on SavedItem { - savedId: id - id - suggestedTags { - id - name - } - tags { - id - name - } - notes { - edges { - cursor - node { - archived - createdAt - deleted - id - updatedAt - title - contentPreview - } - } - } - } -` diff --git a/clients/extension/background/api/remove-note.ts b/clients/extension/background/api/remove-note.ts deleted file mode 100644 index a5c857aaf..000000000 --- a/clients/extension/background/api/remove-note.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { extensionRequest } from '../../utilities/request' -import { verifySession } from '../auth' - -const gql = String.raw -const query = gql` - mutation DeleteNote($input: DeleteNoteInput!) { - deleteNote(input: $input) - } -` - -export async function removeNote(noteId: string) { - // We need a token to save. This will create a session if need be - // be requesting a new bearer if the current one is expired - const token = await verifySession() - - // Set up the variables we need for this request - const data = { variables: { input: { id: noteId } }, query } - - // Make the request and return it - const response = await extensionRequest<{ deleteNote: boolean }>(data, token) - - return response -} diff --git a/clients/extension/background/api/upsert.ts b/clients/extension/background/api/upsert.ts deleted file mode 100644 index d9222d1d5..000000000 --- a/clients/extension/background/api/upsert.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { extensionRequest } from '../../utilities/request' -import { verifySession } from '../auth' - -import { FRAGMENT_ITEM_PREVIEW } from './fragments/preview' -import { FRAGMENT_SAVED_ITEM } from './fragments/saved-item' -import type { ExtSave, ExtItemResponse, ExtItem } from '../../types' - -interface upsertSavedItem { - item: ExtItemResponse -} - -const gql = String.raw -const query = gql` - mutation ItemUpsert($input: SavedItemUpsertInput!) { - upsertSavedItem(input: $input) { - item { - ... on Item { - preview { - ...ItemPreview - } - savedItem { - ...ItemSaved - } - } - } - } - } - - ${FRAGMENT_SAVED_ITEM} - ${FRAGMENT_ITEM_PREVIEW} -` - -export async function upsertItem(saveData: ExtSave) { - const { url } = saveData - - // We need a token to save. This will create a session if need be - // be requesting a new bearer if the current one is expired - const token = await verifySession() - - // Set up the variables we need for this request - const data = { variables: { input: { url } }, query } - - // Make the request and return it - const response = await extensionRequest<{ upsertSavedItem: upsertSavedItem }>(data, token) - - const item = response?.upsertSavedItem?.item - - // We have got a pending item back from the server ... we should handle it - if (item && 'status' in item) throw new Error(`Item save is pending: ${item?.status}`) - - const validItem = item as ExtItem - // If we don't have a preview, something has gone awry and we should be in - // in the land of sending an error already ... but if we're not let's throw - if (!validItem?.preview) throw new Error('There was an error while saving') - - return { item: validItem } -} diff --git a/clients/extension/background/auth/index.ts b/clients/extension/background/auth/index.ts deleted file mode 100644 index 3ac666e46..000000000 --- a/clients/extension/background/auth/index.ts +++ /dev/null @@ -1,184 +0,0 @@ -import * as jose from 'jose' -import { v4 as uuidv4 } from 'uuid' -import { LOGOUT_URL, AUTH_URL, CONSUMER_KEY } from '../../constants' -import { getSetting, setSettings } from '../../utilities/storage' - -import type { V3AuthorizationResponse, JWTResponse } from '../../types' - -/** - * setAuth - * --- - * Takes a token and a userId and requests valid authorizations to use in - * requests - */ -export async function setAuth(token: string, userId: string) { - // Getting a Guid to use in the request - // Getting an auth token - try { - const guid = await getGuid() - if (!guid) throw new Error('Guid could not be generated') - - await authorize(guid, token, userId) - return true - } catch (err) { - console.error(err) - return false - } -} - -export function logOut() { - void chrome.tabs.create({ url: LOGOUT_URL }) -} - -export function loggedOutOfPocket() { - void chrome.storage.local.clear() -} - -export function logIn() { - void chrome.tabs.create({ url: AUTH_URL }) -} - -/* GUID -–––––––––––––––––––––––––––––––––––––––––––––––––– */ -export async function getGuid(): Promise { - const extensionGuid = await getExtensionGuid() - if (extensionGuid) return extensionGuid as string - - const siteGuid = await getSiteGuid() - if (siteGuid) return siteGuid - - return uuidv4() -} - -export async function getExtensionGuid() { - const guid = await getSetting('guid') - return guid ? guid : false -} - -export async function getSiteGuid() { - const cookies = await chrome.cookies.get({ - url: 'https://getpocket.com/', - name: 'sess_guid' - }) - - return cookies?.value -} - -/** - * Authorize - * --- - * This takes the token we get from our extension log in and gets an access_token - * for us to store and create sessions with - */ -export async function authorize(guid: string, token: string, user_id: string) { - const headers = new Headers({ - 'X-Accept': 'application/json', - 'Content-Type': 'application/json' - }) - - const response = await fetch('https://getpocket.com/v3/oauth/authorize/', { - method: 'POST', - headers: headers, - body: JSON.stringify({ - consumer_key: CONSUMER_KEY, - guid, - token, - user_id, - account: '1', - grant_type: 'extension' - }) - }) - - if (!response.ok) { - throw new Error(`An error has occurred: ${response.status}`) - } - - const { access_token, account, username } = (await response.json()) as V3AuthorizationResponse - if (!access_token || !account) throw new Error(`Error getting account information `) - - const { premium_status } = account - - await setSettings({ access_token, premium_status, username }) - await createSession() -} - -/** - * createSession - * --- - * Creates a new session by requesting a JWT token. If a valid access token is present, the JWT - * should include authentication data - */ -export async function createSession() { - try { - // Retrieve the access token (if we have one) to fetch a new JWT - const access_token = (await getSetting('access_token')) as string - const response = await fetch( - `https://getpocket.com/v3/jwt?access_token=${access_token}&consumer_key=${CONSUMER_KEY}` - ) - - // General error like the server is not responding - if (!response.ok) throw new BearerTokenError(`Server Error: ${response.status}`) - - // If we don't have a bearer token, something has gone wrong with the response - const { jwt: bearer_token } = (await response.json()) as JWTResponse - if (!bearer_token) throw new BearerTokenError(`Bad response: ${response.status}`) - - // Otherwise we will store the new token and pass that valid token back to - // the function verifying things - await setSettings({ bearer_token }) - return bearer_token - } catch (err) { - console.error(err) - return - } -} - -/** - * verifySession - * --- - * Verifies the current session by checking the bearer token from cookies. - * If the token exists and is not expired, it returns the token and authentication status. - * Otherwise, it attempts to create a new session. - */ -export async function verifySession(): Promise { - try { - const bearer_token = (await getSetting('bearer_token')) as string - - if (bearer_token) { - const { isExpired } = checkToken(bearer_token) - if (!isExpired) return bearer_token - } - - const new_bearer_token = await createSession() - return new_bearer_token - } catch (err) { - console.log(err) - return - } -} - -/** - * checkToken - * --- - * Decodes a JWT bearer token and determines its authentication and expiration status. - * - */ -function checkToken(bearerToken: string) { - const claims = jose.decodeJwt(bearerToken) - const isAuthenticated = claims?.sub !== 'anonymous' - const isExpired = claims?.exp ? Date.now() >= claims?.exp * 1000 : true - - return { isAuthenticated, isExpired } -} - -/** - * UserRequestError - * --- - * Something has gone wrong with the request at the server level - */ -class BearerTokenError extends Error { - constructor(message?: string) { - super(message) - this.name = 'BearerTokenError' - } -} diff --git a/clients/extension/background/context-menus/index.ts b/clients/extension/background/context-menus/index.ts deleted file mode 100644 index 640706b73..000000000 --- a/clients/extension/background/context-menus/index.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { localize } from '../../utilities/localization' -import { getSetting } from '../../utilities/storage' - -/* Context Menus -–––––––––––––––––––––––––––––––––––––––––––––––––– */ -export async function setContextMenus() { - chrome.contextMenus.removeAll() - - // Page Context - Right click menu on page - chrome.contextMenus.create({ - title: localize('context_menu_save'), - id: 'pageContextClick', - contexts: ['page', 'frame', 'editable', 'image', 'video', 'audio', 'link', 'selection'] // prettier-ignore - }) - - // Browser Icon - Right click menu - chrome.contextMenus.create({ - title: localize('context_menu_open_list'), - id: 'toolbarContextClickList', - contexts: ['action'] - }) - - chrome.contextMenus.create({ - title: localize('context_menu_discover_more'), - id: 'toolbarContextClickHome', - contexts: ['action'] - }) - - // Log In or Out menu item depending on existence of access token - const access_token = await getSetting('access_token') - if (access_token) { - chrome.contextMenus.create({ - title: localize('context_menu_log_out'), - id: 'toolbarContextClickLogOut', - contexts: ['action'] - }) - } else { - chrome.contextMenus.create({ - title: localize('context_menu_log_in'), - id: 'toolbarContextClickLogIn', - contexts: ['action'] - }) - } -} diff --git a/clients/extension/background/icon-updates/index.ts b/clients/extension/background/icon-updates/index.ts deleted file mode 100644 index 4a7edcb4c..000000000 --- a/clients/extension/background/icon-updates/index.ts +++ /dev/null @@ -1,42 +0,0 @@ -/* Action Iconography -–––––––––––––––––––––––––––––––––––––––––––––––––– */ -export async function setDefaultIcon() { - const imageData = inactiveIcon() - await chrome.action.setIcon({ imageData }) -} - -export async function setToolbarIcon(tabId: number, isSaved: boolean) { - // const imageData = isSaved ? savedIcon() : inactiveIcon() - const imageData = inactiveIcon() - await chrome.action.setIcon({ tabId, imageData }) -} - -export function savedIcon() { - const canvas = new OffscreenCanvas(32, 32) - const context = canvas.getContext('2d')! - const saved = new Path2D( - 'M16 31C24.8366 31 32 23.7868 32 14.8889V5.22167C32 3.44208 30.5673 2 28.8 2H3.2C1.43269 2 0 3.43932 0 5.2189V14.8889C0 23.7868 7.16344 31 16 31ZM10.7314 12.1386C10.1065 11.5094 9.09347 11.5094 8.46863 12.1386C7.84379 12.7677 7.84379 13.7878 8.46863 14.417L14.8686 20.8615C15.4935 21.4906 16.5065 21.4906 17.1314 20.8615L23.5314 14.417C24.1562 13.7878 24.1562 12.7677 23.5314 12.1386C22.9065 11.5094 21.8935 11.5094 21.2686 12.1386L16 17.4438L10.7314 12.1386Z' - ) - context.clearRect(0, 0, 32, 32) - context.fillStyle = '#EF4056' // Pocket Brand Coral/Red - context.fill(saved, 'evenodd') - return context.getImageData(0, 0, 32, 32) -} - -export function inactiveIcon() { - const canvas = new OffscreenCanvas(32, 32) - const context = canvas.getContext('2d')! - - const outer = new Path2D( - 'M0 5.22222C0 3.44264 1.43269 2 3.2 2H28.8C30.5673 2 32 3.44264 32 5.22222H28.8H3.2H0ZM3.2 5.22222H0V14.8889C0 23.7868 7.16344 31 16 31C24.8366 31 32 23.7868 32 14.8889V5.22222H28.8V14.8889C28.8 22.0072 23.0692 27.7778 16 27.7778C8.93075 27.7778 3.2 22.0072 3.2 14.8889V5.22222Z' - ) - const inner = new Path2D( - 'M8.46863 12.1386C9.09347 11.5094 10.1065 11.5094 10.7314 12.1386L16 17.4438L21.2686 12.1386C21.8935 11.5094 22.9065 11.5094 23.5314 12.1386C24.1562 12.7677 24.1562 13.7878 23.5314 14.417L17.1314 20.8615C16.5065 21.4906 15.4935 21.4906 14.8686 20.8615L8.46863 14.417C7.84379 13.7878 7.84379 12.7677 8.46863 12.1386Z' - ) - - context.clearRect(0, 0, 32, 32) - context.fillStyle = '#EF4056' // Pocket Brand Coral/Red - context.fill(outer, 'evenodd') - context.fill(inner, 'evenodd') - return context.getImageData(0, 0, 32, 32) -} diff --git a/clients/extension/background/index.ts b/clients/extension/background/index.ts deleted file mode 100644 index 70a9f75de..000000000 --- a/clients/extension/background/index.ts +++ /dev/null @@ -1,223 +0,0 @@ -import { EXT_ACTIONS } from '../actions' -import { POCKET_SAVES, POCKET_HOME } from '../constants' -import { getErrorMessage } from '../utilities/error' -import { isSystemPage } from '../utilities/is-system' -import { sendMessage } from '../utilities/send-message' -import { getSetting } from '../utilities/storage' -import { addNote } from './api/add-note' -import { removeNote } from './api/remove-note' -import { upsertItem } from './api/upsert' -import { setAuth, logIn } from './auth' -import { setDefaultIcon, setToolbarIcon } from './icon-updates' - -// Types -import type { ExtMessage, ExtSave } from '../types' -import type { ExtNote } from '../types/note' - -let saveQueue: ExtSave | null = null - -/* Initial Setup -–––––––––––––––––––––––––––––––––––––––––––––––––– */ -chrome.runtime.onInstalled.addListener(function () { - // Use SVG icons over the png for more control - void setDefaultIcon() - // handle.setContextMenus() -}) - -/* Tab Changes -–––––––––––––––––––––––––––––––––––––––––––––––––– */ -// chrome.tabs.onUpdated.addListener(tabUpdated) -// function tabUpdated(tabId: number, changeInfo: chrome.tabs.TabChangeInfo) { -// // if actively loading a new page, unset save state on icon -// // if (changeInfo.status === 'loading' && changeInfo.url) { -// // void setToolbarIcon(tabId, false) -// // } -// } - -/* Message handling -–––––––––––––––––––––––––––––––––––––––––––––––––– */ -// eslint-disable-next-line @typescript-eslint/no-misused-promises -chrome.runtime.onMessage.addListener(messageHandler) -async function messageHandler(message: ExtMessage, sender: chrome.runtime.MessageSender) { - const { action = EXT_ACTIONS.UNKNOWN_ACTION } = message || {} - - // Messages from `popup action` don't have a sender so we need to query the active tab - const activeTab = await chrome.tabs.query({ active: true, lastFocusedWindow: true }) - - // Context messages will have a sender (it may be unnecessary to do this check) - const senderTab = sender.tab - - // Let's get the correct tab to use before we proceed - const tab = senderTab ?? activeTab[0] - const tabId = tab?.id - - switch (action) { - case EXT_ACTIONS.BROWSER_ACTION: { - // No tab was sent - // !! ADD BETTER RESPONSE TO BAD DATA - if (!tab || !tabId) return true - - // If it's a system page, just send them to Pocket proper - if (isSystemPage(tab)) return openPocketHome() - - // Let's do a quick check to see if the user has any text selected and pass - // it back to the popup so we can populate the note - const selection = await getSelection(tabId) - if (selection) { - await chrome.runtime.sendMessage({ action: EXT_ACTIONS.SAVE_TO_POCKET_REQUEST, selection }) - } - - // Let's initiate a save - await save({ - id: tabId, - title: tab.title, - url: tab.url, - ...(selection && { note: selection }) - }) - - return true - } - - case EXT_ACTIONS.ADD_NOTE_REQUEST: { - const { noteData } = message - if (noteData) await saveNote(noteData, tab?.url) - return true - } - - case EXT_ACTIONS.DELETE_NOTE_REQUEST: { - const { noteId } = message - if (noteId) await deleteNote(noteId) - return true - } - - case EXT_ACTIONS.AUTH_CODE_RECEIVED: { - try { - const { auth } = message - const { token, userId } = auth! - - // Let's make sure we don't fail silently - if (!token || !userId) return void sendMessage({ action: EXT_ACTIONS.AUTH_ERROR }) - - // All's well, set us up for future requests - await setAuth(token, userId) - - // Let's also close that login page - chrome.tabs.query({ url: '*://getpocket.com/extension_login_success*' }, (tabs) => { - const tabIds = tabs.map((tab) => tab?.id ?? false).filter(Boolean) - void chrome.tabs.remove(tabIds as number[]) - }) - - // Did we try and save before we auth'd? Let's continue on - if (saveQueue) { - const saveData = saveQueue - saveQueue = null - - await save(saveData) - return true - } - } catch (err) { - console.warn(err) - } - return - } - - case EXT_ACTIONS.LOGGED_OUT_OF_POCKET: { - await chrome.storage.local.clear() - return true - } - default: { - // Important! Return true to indicate you want to send a response asynchronously - return true - } - } -} - -/* Saving -–––––––––––––––––––––––––––––––––––––––––––––––––– */ -async function save(saveData: ExtSave) { - const { url, id } = saveData - try { - // No url ... not sure how you managed that one ;) - if (!url || !id) return - - // Are we authed? - const access_token = await getSetting('access_token') - - // If we aren't authed, we are gonna save our tab and run through auth. - if (!access_token) { - saveQueue = saveData - return logIn() - } - - // We are auth'd! Let's make a save - const { item } = await upsertItem(saveData) - - // send a message so the popup can display the preview - sendMessage({ action: EXT_ACTIONS.SAVE_TO_POCKET_SUCCESS, item }) - } catch (error) { - // Things have gone awry. Let's send the error along - const message = getErrorMessage(error) - sendMessage({ action: EXT_ACTIONS.SAVE_TO_POCKET_FAILURE, error: message }) - if (id) await setToolbarIcon(id, true) - return false - } -} - -async function saveNote(noteData: ExtNote, source?: string) { - try { - if (!source) throw new Error('Error attaching note!') - - // Let's add our note - const item = await addNote({ ...noteData, source }) - - // send a message so the popup can display the preview - sendMessage({ action: EXT_ACTIONS.ADD_NOTE_SUCCESS, item }) - } catch (error) { - // Things have gone awry. Let's send the error along - const message = getErrorMessage(error) - sendMessage({ action: EXT_ACTIONS.ADD_NOTE_FAILURE, error: message }) - return false - } -} - -async function deleteNote(noteId: string) { - try { - if (!noteId) throw new Error('Error finding noteId') - - await removeNote(noteId) - // send a message so the popup can display the preview - sendMessage({ action: EXT_ACTIONS.DELETE_NOTE_SUCCESS, noteId }) - } catch (error) { - // Things have gone awry. Let's send the error along - const message = getErrorMessage(error) - sendMessage({ action: EXT_ACTIONS.DELETE_NOTE_FAILURE, error: message }) - return false - } -} - -export function openPocket() { - void chrome.tabs.create({ url: POCKET_SAVES }) -} - -export function openPocketHome() { - void chrome.tabs.create({ url: POCKET_HOME }) - return true -} - -export function openOptionsPage() { - void chrome.runtime.openOptionsPage() -} - -/** - * getSelection - * --- - * This executes a script in the context of the chosen tabId and sends back the - * selected text, if any exists. - */ -export async function getSelection(tabId: number): Promise { - const data = await chrome.scripting.executeScript({ - target: { tabId }, - func: () => document.getSelection()?.toString() - }) - return data[0]?.result?.length ? data[0]?.result : undefined -} diff --git a/clients/extension/components/action-container/component.story.tsx b/clients/extension/components/action-container/component.story.tsx deleted file mode 100644 index c8d80df00..000000000 --- a/clients/extension/components/action-container/component.story.tsx +++ /dev/null @@ -1,46 +0,0 @@ -// Components -import upsertResponse from '@common/mock-data/graph-response/upsert-response.json' -import { ActionContainer as Component } from '.' - -// Types -import type { ExtItem } from '../../types' -import type { Meta, StoryObj } from '@storybook/react' - -// Storybook Meta -const SavedOne: ExtItem = upsertResponse[0]?.data?.upsertSavedItem?.item -const SavedTwo: ExtItem = upsertResponse[1]?.data?.upsertSavedItem?.item -const SavedThree: ExtItem = upsertResponse[2]?.data?.upsertSavedItem?.item - -const meta: Meta = { - title: 'Action - Complete', - component: Component -} -export default meta - -// Stories -export const ActionComplete: StoryObj = { - render: (args) => { - return ( - console.log('action unsave')} - actionLogOut={() => console.log('action log out')} - /> - ) - }, - argTypes: { - item: { - options: ['No Notes', 'Simple Notes', 'Complex Notes', 'Saving'], - mapping: { - 'No Notes': SavedOne, - 'Simple Notes': SavedThree, - 'Complex Notes': SavedTwo, - Saving: undefined - }, - control: { type: 'select' } - } - }, - args: { item: SavedOne, errorMessage: undefined } -} diff --git a/clients/extension/components/action-container/index.tsx b/clients/extension/components/action-container/index.tsx deleted file mode 100644 index c37a2309f..000000000 --- a/clients/extension/components/action-container/index.tsx +++ /dev/null @@ -1,66 +0,0 @@ -import { useState } from 'react' -import { ExtensionError } from '../action-error' -import { ExtensionHeader } from '../action-header' -import { ActionLoader } from '../action-loader' -import { Notes } from '../notes' -import { SavedScreen } from '../saved' - -// Types -import type { ExtItem } from '../../types' -import type { NoteEdge } from '@common/types/pocket' -import type { Dispatch, SetStateAction } from 'react' - -export function ActionContainer({ - isOpen = false, - errorMessage, - noteStatus, - setNoteStatus, - notes, - item -}: { - isOpen: boolean - errorMessage?: string - saveStatus?: string - noteStatus?: string - item?: ExtItem - notes: NoteEdge[] | [] - setNoteStatus: Dispatch> - actionLogOut: () => void - actionUnSave: () => void -}) { - const [showNotes, setShowNotes] = useState(false) - const [errorText, setErrorText] = useState(errorMessage) - - const preview = item?.preview - const tags = item?.savedItem?.tags - const suggestedTags = item?.savedItem?.suggestedTags - - return isOpen ? ( -
- - {item?.preview ? ( - <> - {showNotes ? ( - - ) : ( - - )} - - ) : ( - - )} - {errorText ? : null} -
- ) : null -} diff --git a/clients/extension/components/action-container/style.module.css b/clients/extension/components/action-container/style.module.css deleted file mode 100644 index e69de29bb..000000000 diff --git a/clients/extension/components/action-error/component.story.tsx b/clients/extension/components/action-error/component.story.tsx deleted file mode 100644 index d8ee18198..000000000 --- a/clients/extension/components/action-error/component.story.tsx +++ /dev/null @@ -1,22 +0,0 @@ -// Components -import { ExtensionError as Component } from '.' - -// Types -import type { Meta, StoryObj } from '@storybook/react' - -// Storybook Meta -const meta: Meta = { - title: 'Action - Error', - component: Component -} -export default meta - -// Stories -export const ActionError: StoryObj = { - render: (args) => { - return - }, - args: { - errorMessage: 'Oops, something is awry.' - } -} diff --git a/clients/extension/components/action-error/index.tsx b/clients/extension/components/action-error/index.tsx deleted file mode 100644 index a37a45c1d..000000000 --- a/clients/extension/components/action-error/index.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import style from './style.module.css' - -export function ExtensionError({ errorMessage }: { errorMessage?: string }) { - return
{errorMessage}
-} diff --git a/clients/extension/components/action-error/style.module.css b/clients/extension/components/action-error/style.module.css deleted file mode 100644 index c9029a039..000000000 --- a/clients/extension/components/action-error/style.module.css +++ /dev/null @@ -1,7 +0,0 @@ -.error { - border-top: 1px solid var(--color-divider); - padding: 1rem; - font-size: 0.85rem; - font-style: italic; - color: var(--color-error); -} diff --git a/clients/extension/components/action-header/component.story.tsx b/clients/extension/components/action-header/component.story.tsx deleted file mode 100644 index 32b192005..000000000 --- a/clients/extension/components/action-header/component.story.tsx +++ /dev/null @@ -1,20 +0,0 @@ -// Components -import { ExtensionHeader as Component } from '.' - -// Types -import type { Meta, StoryObj } from '@storybook/react' - -// Storybook Meta -const meta: Meta = { - title: 'Action - Header', - component: Component -} -export default meta - -// Stories -export const ActionHeader: StoryObj = { - render: () => { - return - }, - args: {} -} diff --git a/clients/extension/components/action-header/index.tsx b/clients/extension/components/action-header/index.tsx deleted file mode 100644 index 9c3bd8135..000000000 --- a/clients/extension/components/action-header/index.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import style from './style.module.css' -import { OverflowMenuIcon } from '@ui/icons/OverflowMenuIcon' -import { PocketLogo } from '../icons/Pocket' -// import { SaveFilledIcon } from '../icons/SaveFilledIcon' -// import { SaveIcon } from '../icons/SaveIcon' - -export function ExtensionHeader() { - return ( -
- {/* {loaded ? : } */} - - -
- ) -} diff --git a/clients/extension/components/action-header/style.module.css b/clients/extension/components/action-header/style.module.css deleted file mode 100644 index 556230b5b..000000000 --- a/clients/extension/components/action-header/style.module.css +++ /dev/null @@ -1,18 +0,0 @@ -.header { - display: grid; - grid-template-columns: auto 32px; - align-items: center; - padding: 0.5rem 1rem; - font-size: 1rem; - font-weight: 600; - line-height: 19.09px; - letter-spacing: -0.03em; - border-bottom: 1px solid var(--color-divider); - min-height: 2.5rem; -} - -.icon { - color: var(--color-brandPocket); - width: 24px; - height: 24px; -} diff --git a/clients/extension/components/action-loader/component.story.tsx b/clients/extension/components/action-loader/component.story.tsx deleted file mode 100644 index 85a57d16c..000000000 --- a/clients/extension/components/action-loader/component.story.tsx +++ /dev/null @@ -1,27 +0,0 @@ -// Components -import { ActionLoader as Component } from '.' - -// Types -import type { Meta, StoryObj } from '@storybook/react' - -// Storybook Meta -const meta: Meta = { - title: 'Action - Loader ', - component: Component -} -export default meta - -// Stories -export const ActionLoader: StoryObj = { - render: () => { - return - }, - decorators: [ - (Story) => ( -
- -
- ) - ], - args: {} -} diff --git a/clients/extension/components/action-loader/index.tsx b/clients/extension/components/action-loader/index.tsx deleted file mode 100644 index e2f96eb18..000000000 --- a/clients/extension/components/action-loader/index.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import style from './style.module.css' - -export function ActionLoader() { - return ( -
-
-
- ) -} diff --git a/clients/extension/components/action-loader/style.module.css b/clients/extension/components/action-loader/style.module.css deleted file mode 100644 index f2624e0ee..000000000 --- a/clients/extension/components/action-loader/style.module.css +++ /dev/null @@ -1,55 +0,0 @@ -.container { - width: 100%; - display: flex; - justify-content: center; - align-items: center; - padding: 2rem 0; -} -.title { - font-size: 16px; - font-weight: 700; - line-height: 19.09px; - letter-spacing: -0.03em; - text-align: left; - margin: 0 0 0.5rem; -} -.loader, -.loader:before, -.loader:after { - border-radius: 50%; - width: 1em; - height: 1em; - animation-fill-mode: both; - animation: bblFadInOut 1.8s infinite ease-in-out; -} -.loader { - color: var(--color-loader); - font-size: 7px; - position: relative; - transform: translate3d(0, -1em, 0); - animation-delay: -0.16s; -} -.loader:before, -.loader:after { - content: ''; - position: absolute; - top: 0; -} -.loader:before { - left: -3.5em; - animation-delay: -0.32s; -} -.loader:after { - left: 3.5em; -} - -@keyframes bblFadInOut { - 0%, - 80%, - 100% { - box-shadow: 0 1em 0 -0.75em; - } - 40% { - box-shadow: 0 1em 0 0; - } -} diff --git a/clients/extension/components/icons/Pocket.tsx b/clients/extension/components/icons/Pocket.tsx deleted file mode 100644 index 8d2011919..000000000 --- a/clients/extension/components/icons/Pocket.tsx +++ /dev/null @@ -1,63 +0,0 @@ -import type { SVGProps } from 'react' - -export const PocketLogo = ({ className, ...rest }: SVGProps) => { - return ( - - - - - - - - - - - ) -} diff --git a/clients/extension/components/notes-add/component.story.tsx b/clients/extension/components/notes-add/component.story.tsx deleted file mode 100644 index 1560c7bef..000000000 --- a/clients/extension/components/notes-add/component.story.tsx +++ /dev/null @@ -1,22 +0,0 @@ -// Components -import { useRef } from 'react' -import { NotesAdd as Component } from '.' - -// Types -import type { Meta, StoryObj } from '@storybook/react' - -// Storybook Meta -const meta: Meta = { - title: 'Notes - Add', - component: Component -} -export default meta - -// Stories -export const NotesAdd: StoryObj = { - render: () => { - const textRef = useRef(null) - return null} textRef={textRef} /> - }, - args: {} -} diff --git a/clients/extension/components/notes-add/index.tsx b/clients/extension/components/notes-add/index.tsx deleted file mode 100644 index 12523aa7b..000000000 --- a/clients/extension/components/notes-add/index.tsx +++ /dev/null @@ -1,38 +0,0 @@ -import style from './style.module.css' - -import { ActionLoader } from '../action-loader' -import type { RefObject } from 'react' -import type { Dispatch, SetStateAction } from 'react' - -export function NotesAdd({ - textRef, - titleRef, - noteStatus, - setErrorText -}: { - titleRef?: RefObject - textRef?: RefObject - noteStatus?: string - setErrorText: Dispatch> -}) { - const resetError = () => setErrorText(undefined) - - return ( -
- {noteStatus ? ( - - ) : ( - <> - - - - )} -
- ) -} diff --git a/clients/extension/components/notes-add/style.module.css b/clients/extension/components/notes-add/style.module.css deleted file mode 100644 index fa1cfda6f..000000000 --- a/clients/extension/components/notes-add/style.module.css +++ /dev/null @@ -1,10 +0,0 @@ -.container { - padding: 1rem; - input, - textarea { - background-color: var(--color-canvas-darker); - } - input[type='text'] { - margin-bottom: 0.5rem; - } -} diff --git a/clients/extension/components/notes-footer/component.story.tsx b/clients/extension/components/notes-footer/component.story.tsx deleted file mode 100644 index a08690355..000000000 --- a/clients/extension/components/notes-footer/component.story.tsx +++ /dev/null @@ -1,28 +0,0 @@ -// Components -import { NotesFooter as Component } from '.' - -// Types -import type { Meta, StoryObj } from '@storybook/react' - -// Storybook Meta -const meta: Meta = { - title: 'Notes - Footer', - component: Component -} -export default meta - -// Stories -export const NotesFooter: StoryObj = { - render: () => { - const setShowNotes = () => {} - return ( - - ) - }, - args: {} -} diff --git a/clients/extension/components/notes-footer/index.tsx b/clients/extension/components/notes-footer/index.tsx deleted file mode 100644 index 96a4466ed..000000000 --- a/clients/extension/components/notes-footer/index.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import style from './style.module.css' -import { AddNoteIcon } from '@ui/icons/AddNoteIcon' -import { ChevronLeftIcon } from '@ui/icons/ChevronLeftIcon' - -// Types -import type { Dispatch, SetStateAction } from 'react' - -export function NotesFooter({ - setShowNotes, - noteStatus, - handleAddNote = () => {} -}: { - setShowNotes: Dispatch> - noteStatus: string | undefined - handleAddNote: () => void -}) { - const handleBackClick = () => setShowNotes(false) - const handleAddClick = () => handleAddNote() - const isLoading = Boolean(noteStatus) - - return ( -
- - -
- ) -} diff --git a/clients/extension/components/notes-footer/style.module.css b/clients/extension/components/notes-footer/style.module.css deleted file mode 100644 index b7335bdd5..000000000 --- a/clients/extension/components/notes-footer/style.module.css +++ /dev/null @@ -1,15 +0,0 @@ -.footer { - display: flex; - justify-content: space-between; - align-items: center; - padding: 1rem; - column-gap: 0.5rem; - font-size: 1rem; - font-weight: 600; - line-height: 19.09px; - letter-spacing: -0.03em; -} - -.backIcon { - margin-right: 0; -} diff --git a/clients/extension/components/notes-list/component.story.tsx b/clients/extension/components/notes-list/component.story.tsx deleted file mode 100644 index 61ba783d5..000000000 --- a/clients/extension/components/notes-list/component.story.tsx +++ /dev/null @@ -1,36 +0,0 @@ -// Components -import upsertResponse from '@common/mock-data/graph-response/upsert-response.json' -import { NotesList as Component } from '.' - -// Types -import type { Meta, StoryObj } from '@storybook/react' - -const NotesOne = upsertResponse[0]?.data?.upsertSavedItem?.item?.savedItem?.notes?.edges -const NotesTwo = upsertResponse[1]?.data?.upsertSavedItem?.item?.savedItem?.notes?.edges -const NotesThree = upsertResponse[2]?.data?.upsertSavedItem?.item?.savedItem?.notes?.edges - -// Storybook Meta -const meta: Meta = { - title: 'Notes - List', - component: Component -} -export default meta - -// Stories -export const NotesList: StoryObj = { - render: (args) => { - return - }, - argTypes: { - notes: { - options: ['NotesOne', 'NotesTwo', 'NotesThree'], - mapping: { - NotesOne, - NotesTwo, - NotesThree - }, - control: { type: 'select' } - } - }, - args: { notes: NotesOne } -} diff --git a/clients/extension/components/notes-list/index.tsx b/clients/extension/components/notes-list/index.tsx deleted file mode 100644 index 4ac92bbf6..000000000 --- a/clients/extension/components/notes-list/index.tsx +++ /dev/null @@ -1,104 +0,0 @@ -import style from './style.module.css' -import { CrossIcon } from '@ui/icons/CrossIcon' -import { useState, useRef } from 'react' -import ReactMarkdown from 'react-markdown' - -// Types -import type { Note, NoteEdge } from '@common/types/pocket' - -export function NotesList({ - notes, - handleNoteDelete -}: { - notes?: NoteEdge[] - handleNoteDelete: (id: string) => void -}) { - const validNotes = notes?.filter((note) => !note?.node?.deleted) ?? [] - return ( -
- {Array.isArray(notes) && notes.length ? ( - validNotes.map((note) => ( - - )) - ) : ( - - )} -
- ) -} - -function Note({ - note, - handleNoteDelete -}: { - note?: NoteEdge - handleNoteDelete: (id: string) => void -}) { - const [confirmDelete, setConfirmDelete] = useState(false) - const noteRef = useRef(null) - - const node = note?.node - const noteId = node?.id - const title = node?.title - const date = new Date(node?.createdAt as string) - const dateString = date.toLocaleString(undefined, { - year: 'numeric', - month: 'short', - day: 'numeric' - }) - const contentPreview = node?.contentPreview as string - - const handleDeleteClick = () => { - if (noteRef.current) noteRef.current.scrollIntoView({ behavior: 'smooth' }) - setConfirmDelete(true) - } - const handleCancelClick = () => setConfirmDelete(false) - - const handleConfirmClick = () => { - setConfirmDelete(false) - if (noteId) handleNoteDelete(noteId) - } - - return contentPreview ? ( -
-
- {title ?

{title}

: null} -
{dateString}
- - {contentPreview} - -
-
- {!confirmDelete ? ( - - ) : null} -
- {confirmDelete ? ( - - ) : null} -
- ) : null -} - -function NoteDeleteConfirm({ - handleCancelClick, - handleConfirmClick -}: { - handleCancelClick: () => void - handleConfirmClick: () => void -}) { - return ( -
- - -
- ) -} -function NoNotes() { - return
Add your first note to this page
-} diff --git a/clients/extension/components/notes-list/style.module.css b/clients/extension/components/notes-list/style.module.css deleted file mode 100644 index 2753480ad..000000000 --- a/clients/extension/components/notes-list/style.module.css +++ /dev/null @@ -1,89 +0,0 @@ -.notes { - font-size: 0.825rem; - max-height: 344px; - overflow-y: auto; - border-bottom: 1px solid var(--color-divider); -} - -.container { - padding: 1rem; - border-bottom: 1px solid var(--color-divider); - display: grid; - grid-template-columns: auto 42px; - column-gap: 1rem; - &.active { - background-color: var(--color-canvas-active); - } - &:last-child { - border-bottom: none; - } - .actions { - display: flex; - align-items: center; - visibility: hidden; - color: var(--color-text-secondary); - button { - border: 0; - } - svg { - width: 16px; - height: 16px; - margin-right: 0; - } - } - &:hover .actions { - visibility: visible; - } -} -.note { - display: -webkit-box; - -webkit-line-clamp: 3; - -webkit-box-orient: vertical; - overflow: hidden; - h3 { - font-size: 1rem; - font-weight: 500; - margin: 0; - padding: 0 0 0.25rem; - } - p { - margin: 0 0 0.25rem; - } - a { - color: var(--color-text-secondary); - &:hover { - color: var(--color-text-secondary); - } - } - blockquote { - margin: 0; - } -} - -.noNotes { - padding: 1rem; - font-size: 0.825rem; - font-style: italic; - color: var(--color-text-secondary); -} - -.confirm { - margin-top: 1rem; - grid-column: span 2; - display: flex; - justify-content: space-between; - column-gap: 1rem; - button { - display: block; - text-align: center; - padding: 0.5rem; - width: 100%; - } -} - -.date { - font-size: 0.75rem; - font-style: italic; - padding: 0 0 0.5rem 0; - color: var(--color-text-secondary); -} diff --git a/clients/extension/components/notes/component.story.tsx b/clients/extension/components/notes/component.story.tsx deleted file mode 100644 index f1fcc3e4c..000000000 --- a/clients/extension/components/notes/component.story.tsx +++ /dev/null @@ -1,28 +0,0 @@ -// Components -import { Notes as Component } from '.' -import type { SetStateAction } from 'react' - -// Types -import type { Meta, StoryObj } from '@storybook/react' - -// Storybook Meta -const meta: Meta = { - title: 'Notes - Complete', - component: Component -} -export default meta - -// Stories -export const NotesComplete: StoryObj = { - render: () => { - return ( - ): void { - // eslint-disable-next-line @typescript-eslint/restrict-template-expressions - throw new Error(`Function not implemented. ${value}`) - }} - /> - ) - }, - args: {} -} diff --git a/clients/extension/components/notes/index.tsx b/clients/extension/components/notes/index.tsx deleted file mode 100644 index 6659b2104..000000000 --- a/clients/extension/components/notes/index.tsx +++ /dev/null @@ -1,78 +0,0 @@ -import style from './style.module.css' -import { useRef } from 'react' -import { EXT_ACTIONS } from '../../actions' -import { sendMessage } from '../../utilities/send-message' -import { NotesAdd } from '../notes-add' -import { NotesFooter } from '../notes-footer' -import { NotesList } from '../notes-list' - -// Types -import type { NoteEdge } from '@common/types/pocket' -import type { Dispatch, SetStateAction } from 'react' - -export function Notes({ - notes, - noteStatus, - setNoteStatus, - setShowNotes, - setErrorText -}: { - notes?: NoteEdge[] - noteStatus?: string | undefined - setNoteStatus: Dispatch> - setErrorText: Dispatch> - setShowNotes: Dispatch> -}) { - const textRef = useRef(null) - const titleRef = useRef(null) - - const handleAddNote = () => { - // Get the value of our textarea - if (!textRef.current) return - const docMarkdown = textRef.current.value.trim() - - // Let's sort out the optional title - const title = titleRef.current ? titleRef.current.value.trim() : false - - // Let's not add empty notes - if (!docMarkdown?.length) { - textRef.current.value = '' // gets rid of space only values - return setErrorText('Text is require to create a note') - } - - // Need to reset the input fields - if (titleRef.current) titleRef.current.value = '' - textRef.current.value = '' - - // Let's - setNoteStatus('saving note') - void sendMessage({ - action: EXT_ACTIONS.ADD_NOTE_REQUEST, - noteData: { docMarkdown, ...(title && { title }) } - }) - } - - const handleNoteDelete = (id: string) => { - setNoteStatus('deleting note') - void sendMessage({ action: EXT_ACTIONS.DELETE_NOTE_REQUEST, noteId: id }) - } - - return ( -
-
- - -
- -
- ) -} diff --git a/clients/extension/components/notes/style.module.css b/clients/extension/components/notes/style.module.css deleted file mode 100644 index a7bc51bfe..000000000 --- a/clients/extension/components/notes/style.module.css +++ /dev/null @@ -1,4 +0,0 @@ -.container { - padding: 0; - border-bottom: 1px solid var(--color-divider); -} diff --git a/clients/extension/components/saved-footer/component.story.tsx b/clients/extension/components/saved-footer/component.story.tsx deleted file mode 100644 index 24ddf7ca5..000000000 --- a/clients/extension/components/saved-footer/component.story.tsx +++ /dev/null @@ -1,21 +0,0 @@ -// Components -import { SavedFooter as Component } from '.' - -// Types -import type { Meta, StoryObj } from '@storybook/react' - -// Storybook Meta -const meta: Meta = { - title: 'Saves - Footer', - component: Component -} -export default meta - -// Stories -export const SavesFooter: StoryObj = { - render: () => { - const setShowNotes = () => {} - return - }, - args: {} -} diff --git a/clients/extension/components/saved-footer/index.tsx b/clients/extension/components/saved-footer/index.tsx deleted file mode 100644 index bdb68a845..000000000 --- a/clients/extension/components/saved-footer/index.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import style from './style.module.css' - -import { DeleteIcon } from '@ui/icons/DeleteIcon' -import { NotesIcon } from '@ui/icons/NotesIcon' - -// Types -import type { Dispatch, SetStateAction } from 'react' - -export function SavedFooter({ setShowNotes }: { setShowNotes: Dispatch> }) { - const handleNoteClick = () => setShowNotes(true) - return ( -
- - -
- ) -} diff --git a/clients/extension/components/saved-footer/style.module.css b/clients/extension/components/saved-footer/style.module.css deleted file mode 100644 index 2dbe5a875..000000000 --- a/clients/extension/components/saved-footer/style.module.css +++ /dev/null @@ -1,11 +0,0 @@ -.footer { - display: flex; - justify-content: space-between; - align-items: center; - padding: 1rem; - column-gap: 0.5rem; - font-size: 1rem; - font-weight: 600; - line-height: 19.09px; - letter-spacing: -0.03em; -} diff --git a/clients/extension/components/saved-preview/component.story.tsx b/clients/extension/components/saved-preview/component.story.tsx deleted file mode 100644 index 37422e930..000000000 --- a/clients/extension/components/saved-preview/component.story.tsx +++ /dev/null @@ -1,43 +0,0 @@ -// Components -import upsertResponse from '@common/mock-data/graph-response/upsert-response.json' -import { SavedPreview as Component } from '.' - -// Types -import type { Meta, StoryObj } from '@storybook/react' - -// Storybook Meta -const SavedOne = upsertResponse[0]?.data?.upsertSavedItem?.item?.preview -const SavedTwo = upsertResponse[1]?.data?.upsertSavedItem?.item?.preview - -const meta: Meta = { - title: 'Saved - Preview ', - component: Component -} -export default meta - -// Stories -export const SavedPreview: StoryObj = { - render: (args) => { - const preview = args?.preview - return - }, - decorators: [ - (Story) => ( -
- -
- ) - ], - argTypes: { - preview: { - options: ['SavedOne', 'SavedTwo', 'Saving'], - mapping: { - SavedOne, - SavedTwo, - Saving: undefined - }, - control: { type: 'select' } - } - }, - args: { preview: SavedOne } -} diff --git a/clients/extension/components/saved-preview/index.tsx b/clients/extension/components/saved-preview/index.tsx deleted file mode 100644 index bfa767a90..000000000 --- a/clients/extension/components/saved-preview/index.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import style from './style.module.css' -import type { ExtPreview } from '../../types' - -export function SavedPreview({ preview }: { preview: ExtPreview }) { - if (!preview) return null - - const cachedImages = preview?.image?.cachedImages - const image = cachedImages ? cachedImages[0]?.url : false - - const title = preview?.title - const excerpt = title.length < 80 ? preview?.excerpt : undefined - const domain = preview?.domain?.name - - return ( -
- {image ? ( - - - - ) : null} -
-
{title}
- {excerpt ?
{excerpt}
: null} -
{domain}
-
-
- ) -} diff --git a/clients/extension/components/saved-preview/style.module.css b/clients/extension/components/saved-preview/style.module.css deleted file mode 100644 index f94159e3b..000000000 --- a/clients/extension/components/saved-preview/style.module.css +++ /dev/null @@ -1,59 +0,0 @@ -.preview { - padding: 0 0 1rem; - display: grid; - grid-template-columns: 60px auto; - column-gap: 0.75rem; - - picture { - display: block; - width: 60px; - height: 60px; - background: var(--color-picture-base); - border-radius: 0.25rem; - overflow: hidden; - transform: translateY(0.25em); - img { - width: 100%; - height: 100%; - object-fit: cover; - } - } -} - -.title { - font-size: 0.875rem; - font-weight: 500; - margin-bottom: 0.5rem; - letter-spacing: 0.025rem; - line-clamp: 4; - max-height: 4.75em; - overflow: hidden; - text-overflow: ellipsis; - overflow: hidden; - overflow-wrap: anywhere; - display: -webkit-box; - -webkit-line-clamp: 4; - -webkit-box-orient: vertical; -} - -.excerpt { - font-size: 0.75rem; - font-weight: 400; - margin-bottom: 0.25rem; - letter-spacing: 0.025rem; - line-clamp: 4; - max-height: 4.75em; - overflow: hidden; - text-overflow: ellipsis; - overflow: hidden; - overflow-wrap: anywhere; - display: -webkit-box; - -webkit-line-clamp: 4; - -webkit-box-orient: vertical; -} - -.domain { - font-size: 0.8125rem; - font-weight: 400; - font-style: italic; -} diff --git a/clients/extension/components/saved-tags/component.story.tsx b/clients/extension/components/saved-tags/component.story.tsx deleted file mode 100644 index 1b6da3ae6..000000000 --- a/clients/extension/components/saved-tags/component.story.tsx +++ /dev/null @@ -1,34 +0,0 @@ -// Components -import { SavedTags as Component } from '.' - -// Types -import type { Meta, StoryObj } from '@storybook/react' - -// Storybook Meta -const meta: Meta = { - title: 'Saved - Tags ', - component: Component -} -export default meta - -// Stories -export const SavedTags: StoryObj = { - render: (args) => { - const tags = args.tags - return - }, - decorators: [ - (Story) => ( -
- -
- ) - ], - args: { - tags: [ - { id: '1', name: 'peace' }, - { id: '2', name: 'love' }, - { id: '3', name: 'video games' } - ] - } -} diff --git a/clients/extension/components/saved-tags/index.tsx b/clients/extension/components/saved-tags/index.tsx deleted file mode 100644 index 20936c8b5..000000000 --- a/clients/extension/components/saved-tags/index.tsx +++ /dev/null @@ -1,132 +0,0 @@ -import style from './style.module.css' -import { useState, useRef } from 'react' - -import type { Tag } from '@common/types/pocket' -import type { ChangeEvent, KeyboardEvent } from 'react' - -export function SavedTags({ - tags = [], - suggestedTags = [] -}: { - tags?: Tag[] - suggestedTags?: Tag[] -}) { - const inputRef = useRef(null) - const [activeTags, setActiveTags] = useState(tags.map((tag) => tag.name)) - const [errorMessage, setErrorMessage] = useState() - - const filteredTags = suggestedTags - .map((tag) => tag.name) - .filter((tag) => !activeTags.includes(tag)) - - function addTag(tag: string) { - const updatedTags = Array.from(new Set([...activeTags, tag])) - // Add the value to the tags array - setActiveTags(updatedTags) - } - - const removeTag = (tag: string) => { - const updatedTags = activeTags.filter((current) => current !== tag) - setActiveTags(updatedTags) - } - - const removeLastTag = () => { - if (!activeTags.length) return - const updatedTags = activeTags.slice(0, -1) - setActiveTags(updatedTags) - } - - function handleKeyDown(e: KeyboardEvent) { - // Get the value of the input - const target = e.target as HTMLInputElement - const value = target.value.trim() - - // We don't want people to enter more than 25 characters - if (value.length > 25 && e.key !== 'Backspace') return e.preventDefault() - - if (e.key === 'Enter' || e.key === 'Tab') { - // If user did not press enter or tab key, return - // If the value is empty, return - if (!value) return - - // Otherwise let's add the tag - addTag(value) - - // Clear the input and refocus it - target.value = '' - e.preventDefault() - - if (inputRef.current) inputRef.current.focus() - } - - // If user did not press backspace, ignore it - if (e.key === 'Backspace') { - // Get the value of the input - const target = e.target as HTMLInputElement - const value = target.value.trim() - - // All we want to know is if we have an empty string - if (!value.length) removeLastTag() - } - } - - function handleChange(e: ChangeEvent) { - // Get the value of the input - const target = e.target as HTMLInputElement - const value = target.value.trim() - - // Add some validation - if (value.length > 25) { - target.value = target.value.substring(0, 26) - setErrorMessage('Tags can be up to 25 characters') - } - if (value.length <= 25 && errorMessage) return setErrorMessage(undefined) - } - - return ( -
-
- - -
- - {errorMessage ?
{errorMessage}
: null} -
- ) -} - -interface TagsElement { - tags?: string[] - action: (tag: string) => void -} - -function ActiveTags({ tags, action }: TagsElement) { - return <>{tags ? tags.map((tag) => ) : null} -} - -function SuggestedTags({ tags, action }: TagsElement) { - return ( -
- {tags ? tags.map((tag) => ) : null} -
- ) -} - -interface TagElement { - tag: string - action: (tag: string) => void -} -function Tag({ tag, action }: TagElement) { - const onClick = () => action(tag) - return ( - - ) -} diff --git a/clients/extension/components/saved-tags/style.module.css b/clients/extension/components/saved-tags/style.module.css deleted file mode 100644 index 85a43cf34..000000000 --- a/clients/extension/components/saved-tags/style.module.css +++ /dev/null @@ -1,87 +0,0 @@ -.title { - font-size: 16px; - font-weight: 700; - line-height: 19.09px; - letter-spacing: -0.03em; - text-align: left; - margin: 0 0 0.5rem; -} -.actions { - display: flex; - flex-direction: column; - row-gap: 0.5rem; - padding: 0 0.5rem; - - button { - width: 100%; - } -} - -.tagInput { - border: 1px solid var(--color-input-border); - border-radius: 0.25rem; - padding: 0.25rem; - display: flex; - row-gap: 0.25rem; - column-gap: 0.25rem; - flex-wrap: wrap; - min-height: 30px; - button:hover span:after { - content: '\2A2F'; - font-size: 1.825em; - padding-left: 0.25rem; - line-height: 0; - } - input { - overflow: hidden; - flex-grow: 1; - width: 1rem; - max-width: initial; - min-width: initial; - border: 0; - padding: 0 0.25rem; - } -} - -.suggestedTags { - display: flex; - row-gap: 0.25rem; - column-gap: 0.25rem; - padding: 0.5rem 0; - align-items: center; - button span:before { - display: inline-block; - transform: translateY(1px); - content: '+'; - font-size: 1.25em; - padding-right: 0.25rem; - line-height: 0; - } -} - -.tag { - font-size: 0.85rem; - line-height: 1.25; - padding: 0.25rem 1rem; - background-color: var(--color-bg-suggested-tag); - color: var(--color-suggested-tag); - border-radius: 0.25rem; - white-space: nowrap; - position: relative; - &:hover { - background-color: var(--color-bg-suggested-tag-hover); - } - button span:before { - color: var(--color-tag-add); - font-size: 0.75em; - display: inline-block; - box-sizing: border-box; - } -} - -.error { - font-size: 0.85rem; - font-style: italic; - color: var(--color-error); - padding-bottom: 0.5rem; -} diff --git a/clients/extension/components/saved/component.story.tsx b/clients/extension/components/saved/component.story.tsx deleted file mode 100644 index a78152a20..000000000 --- a/clients/extension/components/saved/component.story.tsx +++ /dev/null @@ -1,36 +0,0 @@ -// Components -import upsertResponse from '@common/mock-data/graph-response/upsert-response.json' -import { SavedScreen as Component } from '.' - -// Types -import type { Meta, StoryObj } from '@storybook/react' - -const SavedOne = upsertResponse[0]?.data?.upsertSavedItem?.item?.preview -const SavedTwo = upsertResponse[1]?.data?.upsertSavedItem?.item?.preview - -const meta: Meta = { - title: 'Saved - Complete ', - component: Component -} -export default meta - -// Stories -export const SavedComplete: StoryObj = { - render: (args) => { - const preview = args?.preview - - return - }, - argTypes: { - preview: { - options: ['SavedOne', 'SavedTwo', 'Saving'], - mapping: { - SavedOne, - SavedTwo, - Saving: undefined - }, - control: { type: 'select' } - } - }, - args: { preview: SavedOne } -} diff --git a/clients/extension/components/saved/index.tsx b/clients/extension/components/saved/index.tsx deleted file mode 100644 index e656aa642..000000000 --- a/clients/extension/components/saved/index.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import style from './style.module.css' - -import { SavedFooter } from '../saved-footer' -import { SavedPreview } from '../saved-preview' -import { SavedTags } from '../saved-tags' - -//Types -import type { ExtPreview } from '../../types' -import type { Tag } from '@common/types/pocket' -import type { Dispatch, SetStateAction } from 'react' - -export function SavedScreen({ - preview, - tags, - suggestedTags, - setShowNotes -}: { - preview: ExtPreview - tags?: Tag[] - suggestedTags?: Tag[] - setShowNotes: Dispatch> -}) { - return preview ? ( -
-
- - -
- -
- ) : null -} diff --git a/clients/extension/components/saved/style.module.css b/clients/extension/components/saved/style.module.css deleted file mode 100644 index cbacc23a1..000000000 --- a/clients/extension/components/saved/style.module.css +++ /dev/null @@ -1,18 +0,0 @@ -.container { - padding: 1rem; - border-bottom: 1px solid var(--color-divider); -} - -.title { - font-size: 1rem; - font-weight: 600; - text-align: left; - margin: 0 0 0.5rem; -} -.triggers { - margin-top: 1rem; - display: flex; - justify-content: flex-end; - column-gap: 0.5rem; - padding: 0; -} diff --git a/clients/extension/components/waypoint/index.tsx b/clients/extension/components/waypoint/index.tsx deleted file mode 100644 index cfc02bcf4..000000000 --- a/clients/extension/components/waypoint/index.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import style from './style.module.css' -import { SaveIcon } from '@ui/icons/SaveIcon' -import { SnippetsIcon } from '@ui/icons/SnippetsIcon' - -export function SaveActions({ actionSave }: { actionSave: () => void }) { - return ( -
-

Save To Pocket

-
- - -
-
- ) -} diff --git a/clients/extension/components/waypoint/style.module.css b/clients/extension/components/waypoint/style.module.css deleted file mode 100644 index 74fed5cce..000000000 --- a/clients/extension/components/waypoint/style.module.css +++ /dev/null @@ -1,20 +0,0 @@ -.title { - padding: 0.5rem; - font-size: 16px; - font-weight: 700; - line-height: 19.09px; - letter-spacing: -0.03em; - text-align: left; - margin: 0 0 0.5rem; -} - -.actions { - display: flex; - flex-direction: column; - row-gap: 0.5rem; - padding: 0 0.5rem; - - button { - width: 100%; - } -} diff --git a/clients/extension/constants.ts b/clients/extension/constants.ts deleted file mode 100644 index 1327ed31e..000000000 --- a/clients/extension/constants.ts +++ /dev/null @@ -1,6 +0,0 @@ -export const AUTH_URL = 'https://getpocket.com/signup?src=extension&route=/extension_login_success' -export const LOGOUT_URL = 'https://getpocket.com/lo' -export const SET_SHORTCUTS = 'chrome://extensions/configureCommands' -export const POCKET_SAVES = 'https://getpocket.com/saves' -export const POCKET_HOME = 'https://getpocket.com/home' -export const CONSUMER_KEY = process.env.EXTENSION_PUBLIC_CONSUMER_KEY diff --git a/clients/extension/content/login.ts b/clients/extension/content/login.ts deleted file mode 100644 index a597886e0..000000000 --- a/clients/extension/content/login.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { EXT_ACTIONS } from '../actions' -import { sendMessage } from '../utilities/send-message' - -import type { ExtCookieAuth, ExtAuth } from '../types' - -// Check page has loaded and if not add listener for it -if (document.readyState === 'loading') { - document.addEventListener('DOMContentLoaded', setLoginLoaded) -} else { - setLoginLoaded() -} - -function setLoginLoaded() { - try { - const siteCookies = getCookies(document.cookie) - - console.log(siteCookies) - if (!siteCookies.sess_user_id || !siteCookies.sess_exttok) { - console.groupCollapsed('Auth Error') - console.log({ - userId: siteCookies.sess_user_id, - token: siteCookies.sess_exttok - }) - console.groupEnd() - } - - const auth: ExtAuth = { - userId: siteCookies.sess_user_id, - token: siteCookies.sess_exttok - } - - // This time out is for user experience so they don't get a flash of - // a page with no context, since we close this page after getting this data - setTimeout(function () { - sendMessage({ action: EXT_ACTIONS.AUTH_CODE_RECEIVED, auth }) - }, 1500) - } catch (err) { - console.log('Unexpected login error', err) - } -} - -/* UTILITIES -–––––––––––––––––––––––––––––––––––––––––––––––––– */ -function getCookies(cookieString: string): ExtCookieAuth { - if (!cookieString || cookieString === '') return {} - return cookieString - .split(';') - .map((x) => x.trim().split(/(=)/)) - .reduce( - (cookiesObject, currentArray) => ({ - ...cookiesObject, - [currentArray[0]]: decodeURIComponent(currentArray[2]) - }), - {} - ) -} diff --git a/clients/extension/content/logout.ts b/clients/extension/content/logout.ts deleted file mode 100644 index f545dc1ac..000000000 --- a/clients/extension/content/logout.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { EXT_ACTIONS } from '../actions' -import { sendMessage } from '../utilities/send-message' - -// Check page has loaded and if not add listener for it -if (document.readyState === 'loading') { - document.addEventListener('DOMContentLoaded', setLogoutLoaded) -} else { - setLogoutLoaded() -} - -function setLogoutLoaded() { - setTimeout(function () { - sendMessage({ action: EXT_ACTIONS.LOGGED_OUT_OF_POCKET }) - }, 500) -} diff --git a/clients/extension/eslint.config.mjs b/clients/extension/eslint.config.mjs deleted file mode 100644 index e1a1ab57b..000000000 --- a/clients/extension/eslint.config.mjs +++ /dev/null @@ -1,33 +0,0 @@ -// type-check - -import perfectionist from '@config/eslint-config/perfectionist.mjs' -import prettierConfig from 'eslint-config-prettier' -import tseslint from 'typescript-eslint' - -export default tseslint.config( - { - ignores: ['node_modules/**'] - }, - ...tseslint.configs.recommendedTypeChecked, - ...tseslint.configs.stylisticTypeChecked, - ...perfectionist, - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument - prettierConfig, - { - plugins: { - '@typescript-eslint': tseslint.plugin - }, - languageOptions: { - parser: tseslint.parser, - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: import.meta.dirname - } - }, - rules: { - '@typescript-eslint/await-thenable': 0, - '@typescript-eslint/no-empty-function': ['error', { allow: ['arrowFunctions'] }], - '@typescript-eslint/no-unused-vars': ['error', { ignoreRestSiblings: true }] - } - } -) diff --git a/clients/extension/extension.config.js b/clients/extension/extension.config.js deleted file mode 100644 index b9abad921..000000000 --- a/clients/extension/extension.config.js +++ /dev/null @@ -1,14 +0,0 @@ -/* eslint-disable @typescript-eslint/no-unsafe-return */ -/* eslint-disable @typescript-eslint/no-unsafe-call */ -/* eslint-disable @typescript-eslint/no-unsafe-member-access */ - -module.exports = { - config: (config) => { - config.module.rules.push({ - test: /\.tsx?$/, - use: 'ts-loader', - include: /ui/ - }) - return config - } -} diff --git a/clients/extension/manifest.json b/clients/extension/manifest.json deleted file mode 100644 index 08b5614a8..000000000 --- a/clients/extension/manifest.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/chrome-manifest.json", - "manifest_version": 3, - "author": "Pocket", - "name": "Save to Pocket", - "version": "0.0.1", - "description": "Save what's important to you and access it anywhere", - "icons": { - "16": "images/icon-16.png", - "48": "images/icon-48.png", - "128": "images/icon-128.png" - }, - "permissions": ["activeTab", "contextMenus", "cookies", "storage"], - "host_permissions": ["*://getpocket.com/*", "*://client-api.getpocket.com/*"], - "background": { - "chromium:service_worker": "./background/index.ts", - "firefox:scripts": ["./background/index.ts"] - }, - "action": { - "default_popup": "action/index.html", - "default_title": "Save to Pocket", - "default_icon": { - "38": "images/action-icon.png" - } - }, - "default_locale": "en", - "content_scripts": [ - { - "matches": ["*://getpocket.com/extension_login_success*"], - "js": ["./content/login.ts"] - }, - { - "matches": ["*://getpocket.com/login?e=4"], - "js": ["./content/logout.ts"] - } - ], - "commands": { - "save-to-pocket-action": { - "suggested_key": { - "default": "Ctrl+Shift+P", - "windows": "Ctrl+Shift+P", - "mac": "Ctrl+Shift+P", - "chromeos": "Ctrl+Shift+P", - "linux": "Ctrl+Shift+P" - }, - "description": "Save page to Pocket" - } - } -} diff --git a/clients/extension/package.json b/clients/extension/package.json deleted file mode 100644 index a8edc7eb8..000000000 --- a/clients/extension/package.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "@client/extension", - "version": "0.0.1", - "dependencies": { - "@storybook/react": "8.5.3", - "@types/node": "24.10.2", - "@ui/components": "workspace:*", - "@ui/icons": "workspace:*", - "jose": "5.9.6", - "react": "^19.2.1", - "react-dom": "^19.2.1", - "react-markdown": "9.0.3", - "ts-loader": "9.5.2", - "uuid": "11.0.5" - }, - "devDependencies": { - "@common/mock-data": "workspace:*", - "@common/types": "workspace:*", - "@common/utilities": "workspace:*", - "@config/eslint-config": "workspace:*", - "@types/react": "^19.0.8", - "@types/react-dom": "^19.0.3", - "extension": "2.0.0-beta.9", - "typescript": "^5.7.3" - }, - "private": true, - "scripts": { - "build:extension": "extension build", - "dev:extension": "extension dev --chromium-binary=/Applications/Brave\\ Browser.app/Contents/MacOS/Brave\\ Browser", - "dev:extension:ch": "extension dev", - "dev:extension:ff": "extension dev --browser=firefox", - "start:extension": "extension start" - } -} diff --git a/clients/extension/public/_locales/de/messages.json b/clients/extension/public/_locales/de/messages.json deleted file mode 100644 index 89b7327d4..000000000 --- a/clients/extension/public/_locales/de/messages.json +++ /dev/null @@ -1,125 +0,0 @@ -{ - "extension_description" : { - "message" : "Die einfachste und schnellste Möglichkeit, Artikel, Videos und mehr zu speichern." - }, - "heading_idle" : { - "message" : "" - }, - "heading_error" : { - "message" : "Da ist etwas schiefgegangen." - }, - "heading_saving" : { - "message" : "Speichern..." - }, - "heading_saved" : { - "message" : "In Pocket gespeichert" - }, - "heading_save_failed" : { - "message" : "Da ist etwas schiefgegangen." - }, - "heading_removing" : { - "message" : "Wird entfernt ..." - }, - "heading_removed" : { - "message" : "Entfernt" - }, - "heading_remove_failed" : { - "message" : "Da ist etwas schiefgegangen." - }, - "heading_tags_saving" : { - "message" : "Tags werden gespeichert …" - }, - "heading_tags_saved" : { - "message" : "Tags gespeichert" - }, - "heading_tags_failed" : { - "message" : "Da ist etwas schiefgegangen." - }, - "heading_tags_error" : { - "message" : "Tags sind auf 25 Zeichen begrenzt." - }, - "buttons_remove" : { - "message" : "Entfernen" - }, - "buttons_mylist" : { - "message" : "Gespeichert" - }, - "buttons_save" : { - "message" : "Speichern" - }, - "context_menu_open_list" : { - "message" : "Öffne deine in Pocket Gespeichert" - }, - "context_menu_discover_more" : { - "message" : "Entdecke noch mehr interessante Inhalte auf Pocket" - }, - "context_menu_log_in" : { - "message" : "Einloggen" - }, - "context_menu_log_out" : { - "message" : "Ausloggen" - }, - "context_menu_save" : { - "message" : "In Pocket speichern" - }, - "tagging_add_tags" : { - "message" : "Tags hinzufügen" - }, - "options_header" : { - "message" : "Erweiterung zum Speichern in Pocket" - }, - "options_login_title" : { - "message" : "Eingeloggt als" - }, - "options_log_out" : { - "message" : "Ausloggen" - }, - "options_log_in" : { - "message" : "Einloggen" - }, - "options_shortcut_title" : { - "message" : "Tastenkombination" - }, - "options_shortcut_record" : { - "message" : "Neue Tastenkombination festlegen" - }, - "options_theme_title" : { - "message" : "Modus" - }, - "options_theme_light" : { - "message" : "Hell" - }, - "options_theme_dark" : { - "message" : "Dunkel" - }, - "options_theme_system" : { - "message" : "Systemeinstellung verwenden" - }, - "options_app_title" : { - "message" : "Die mobile Pocket-App" - }, - "options_app_apple" : { - "message" : "Im Apple App Store herunterladen" - }, - "options_app_google" : { - "message" : "In Google Play herunterladen" - }, - "options_need_help" : { - "message" : "Du brauchst Hilfe?" - }, - "options_email_us" : { - "message" : "Schreibe uns eine E-Mail" - }, - "options_follow" : { - "message" : "Jetzt Pocket folgen" - }, - "options_family" : { - "message" : "Pocket gehört zur Mozilla-Produktfamilie." - }, - "options_privacy" : { - "message" : "Datenschutzrichtlinie" - }, - "options_terms" : { - "message" : "AGB" - } -} diff --git a/clients/extension/public/_locales/en/messages.json b/clients/extension/public/_locales/en/messages.json deleted file mode 100644 index 2879fa177..000000000 --- a/clients/extension/public/_locales/en/messages.json +++ /dev/null @@ -1,125 +0,0 @@ -{ - "extension_description": { - "message": "The easiest, fastest way to capture articles, videos, and more." - }, - "heading_idle": { - "message": "" - }, - "heading_error": { - "message": "Something went wrong!" - }, - "heading_saving": { - "message": "Saving..." - }, - "heading_saved": { - "message": "Saved to Pocket" - }, - "heading_save_failed": { - "message": "Something went wrong!" - }, - "heading_removing": { - "message": "Removing..." - }, - "heading_removed": { - "message": "Removed" - }, - "heading_remove_failed": { - "message": "Something went wrong!" - }, - "heading_tags_saving": { - "message": "Saving tags..." - }, - "heading_tags_saved": { - "message": "Tags saved" - }, - "heading_tags_failed": { - "message": "Something went wrong!" - }, - "heading_tags_error": { - "message": "Tags are limited to 25 characters" - }, - "buttons_remove": { - "message": "Remove" - }, - "buttons_mylist": { - "message": "Saves" - }, - "buttons_save": { - "message": "Save" - }, - "context_menu_open_list": { - "message": "Open Your Pocket Saves" - }, - "context_menu_discover_more": { - "message": "Discover more at Pocket" - }, - "context_menu_log_in": { - "message": "Log In" - }, - "context_menu_log_out": { - "message": "Log Out" - }, - "context_menu_save": { - "message": "Save To Pocket" - }, - "tagging_add_tags": { - "message": "Add Tags" - }, - "options_header": { - "message": "Save to Pocket extension" - }, - "options_login_title": { - "message": "Logged in as" - }, - "options_log_out": { - "message": "Log out" - }, - "options_log_in": { - "message": "Log in" - }, - "options_shortcut_title": { - "message": "Keyboard Shortcut" - }, - "options_shortcut_record": { - "message": "Record a new shortcut" - }, - "options_theme_title": { - "message": "Theme" - }, - "options_theme_light": { - "message": "Light" - }, - "options_theme_dark": { - "message": "Dark" - }, - "options_theme_system": { - "message": "Use System Setting" - }, - "options_app_title": { - "message": "Pocket’s Mobile App" - }, - "options_app_apple": { - "message": "Download on the Apple App Store" - }, - "options_app_google": { - "message": "Get it on Google Play" - }, - "options_need_help": { - "message": "Need Help?" - }, - "options_email_us": { - "message": "Email Us" - }, - "options_follow": { - "message": "Follow Pocket" - }, - "options_family": { - "message": "Pocket is part of the Mozilla family of products." - }, - "options_privacy": { - "message": "Privacy policy" - }, - "options_terms": { - "message": "Terms of service" - } -} diff --git a/clients/extension/public/_locales/es/messages.json b/clients/extension/public/_locales/es/messages.json deleted file mode 100644 index ca948d363..000000000 --- a/clients/extension/public/_locales/es/messages.json +++ /dev/null @@ -1,125 +0,0 @@ -{ - "extension_description" : { - "message" : "La forma más fácil y rápida de capturar artículos, vídeos y mucho más." - }, - "heading_idle" : { - "message" : "" - }, - "heading_error" : { - "message" : "¡Parece que algo ha ido mal!" - }, - "heading_saving" : { - "message" : "Guardando…" - }, - "heading_saved" : { - "message" : "Guardado en Pocket" - }, - "heading_save_failed" : { - "message" : "¡Parece que algo ha ido mal!" - }, - "heading_removing" : { - "message" : "Eliminando..." - }, - "heading_removed" : { - "message" : "Eliminado" - }, - "heading_remove_failed" : { - "message" : "¡Parece que algo ha ido mal!" - }, - "heading_tags_saving" : { - "message" : "Guardando etiquetas..." - }, - "heading_tags_saved" : { - "message" : "Etiquetas guardadas" - }, - "heading_tags_failed" : { - "message" : "¡Parece que algo ha ido mal!" - }, - "heading_tags_error" : { - "message" : "La longitud máxima de una etiqueta es 25 caracteres." - }, - "buttons_remove" : { - "message" : "Eliminar" - }, - "buttons_mylist" : { - "message" : "Guardados" - }, - "buttons_save" : { - "message" : "Guardar" - }, - "context_menu_open_list" : { - "message" : "Abrir tus artículos guardados en Pocket" - }, - "context_menu_discover_more" : { - "message" : "Descubre más en Pocket" - }, - "context_menu_log_in" : { - "message" : "Iniciar sesión" - }, - "context_menu_log_out" : { - "message" : "Cerrar sesión" - }, - "context_menu_save" : { - "message" : "Guardar en Pocket" - }, - "tagging_add_tags" : { - "message" : "Añadir etiquetas" - }, - "options_header" : { - "message" : "Extensión Guardar en Pocket" - }, - "options_login_title" : { - "message" : "Has iniciado sesión como" - }, - "options_log_out" : { - "message" : "Cerrar sesión" - }, - "options_log_in" : { - "message" : "Iniciar sesión" - }, - "options_shortcut_title" : { - "message" : "Atajo de teclado" - }, - "options_shortcut_record" : { - "message" : "Grabar un nuevo atajo" - }, - "options_theme_title" : { - "message" : "Tema" - }, - "options_theme_light" : { - "message" : "Claro" - }, - "options_theme_dark" : { - "message" : "Oscuro" - }, - "options_theme_system" : { - "message" : "Usar configuración del sistema" - }, - "options_app_title" : { - "message" : "Aplicación móvil de Pocket" - }, - "options_app_apple" : { - "message" : "Descargar en la App Store de Apple" - }, - "options_app_google" : { - "message" : "Consíguela en Google Play" - }, - "options_need_help" : { - "message" : "¿Necesitas ayuda?" - }, - "options_email_us" : { - "message" : "Envíanos un correo" - }, - "options_follow" : { - "message" : "Seguir a Pocket" - }, - "options_family" : { - "message" : "Pocket es parte de la familia de productos de Mozilla." - }, - "options_privacy" : { - "message" : "Política de privacidad" - }, - "options_terms" : { - "message" : "Condiciones de servicio" - } -} diff --git a/clients/extension/public/_locales/es_419/messages.json b/clients/extension/public/_locales/es_419/messages.json deleted file mode 100644 index 902c59a50..000000000 --- a/clients/extension/public/_locales/es_419/messages.json +++ /dev/null @@ -1,125 +0,0 @@ -{ - "extension_description" : { - "message" : "La forma más fácil y rápida de capturar artículos, videos y más." - }, - "heading_idle" : { - "message" : "" - }, - "heading_error" : { - "message" : "¡Se produjo un error!" - }, - "heading_saving" : { - "message" : "Guardando..." - }, - "heading_saved" : { - "message" : "Guardado en Pocket" - }, - "heading_save_failed" : { - "message" : "¡Se produjo un error!" - }, - "heading_removing" : { - "message" : "Eliminando..." - }, - "heading_removed" : { - "message" : "Eliminado" - }, - "heading_remove_failed" : { - "message" : "¡Se produjo un error!" - }, - "heading_tags_saving" : { - "message" : "Guardando etiquetas..." - }, - "heading_tags_saved" : { - "message" : "Etiquetas guardadas" - }, - "heading_tags_failed" : { - "message" : "¡Se produjo un error!" - }, - "heading_tags_error" : { - "message" : "Las etiquetas se limitan a 25 caracteres" - }, - "buttons_remove" : { - "message" : "Eliminar" - }, - "buttons_mylist" : { - "message" : "Guardado" - }, - "buttons_save" : { - "message" : "Guardar" - }, - "context_menu_open_list" : { - "message" : "Abrir el contenido guardado en Pocket" - }, - "context_menu_discover_more" : { - "message" : "Descubre más en Pocket" - }, - "context_menu_log_in" : { - "message" : "Iniciar sesión" - }, - "context_menu_log_out" : { - "message" : "Finalizar sesión" - }, - "context_menu_save" : { - "message" : "Guardar en Pocket" - }, - "tagging_add_tags" : { - "message" : "Agregar Etiquetas" - }, - "options_header" : { - "message" : "Extensión para guardar en Pocket" - }, - "options_login_title" : { - "message" : "Iniciaste sesión como" - }, - "options_log_out" : { - "message" : "Cerrar sesión" - }, - "options_log_in" : { - "message" : "Iniciar sesión" - }, - "options_shortcut_title" : { - "message" : "Atajo de teclado" - }, - "options_shortcut_record" : { - "message" : "Registra un nuevo atajo" - }, - "options_theme_title" : { - "message" : "Tema" - }, - "options_theme_light" : { - "message" : "Claro" - }, - "options_theme_dark" : { - "message" : "Oscuro" - }, - "options_theme_system" : { - "message" : "Usar configuración del sistema" - }, - "options_app_title" : { - "message" : "Aplicación móvil de Pocket" - }, - "options_app_apple" : { - "message" : "Descargar en el App Store de Apple" - }, - "options_app_google" : { - "message" : "Obtenerlo en Google Play" - }, - "options_need_help" : { - "message" : "¿Necesitas ayuda?" - }, - "options_email_us" : { - "message" : "Envíanos un email" - }, - "options_follow" : { - "message" : "Seguir a Pocket" - }, - "options_family" : { - "message" : "Pocket forma parte de la familia de productos Mozilla." - }, - "options_privacy" : { - "message" : "Política de privacidad" - }, - "options_terms" : { - "message" : "Términos del Servicio" - } -} diff --git a/clients/extension/public/_locales/fr/messages.json b/clients/extension/public/_locales/fr/messages.json deleted file mode 100644 index 6fcb232cd..000000000 --- a/clients/extension/public/_locales/fr/messages.json +++ /dev/null @@ -1,125 +0,0 @@ -{ - "extension_description" : { - "message" : "Le moyen le plus simple et le plus rapide de sauvegarder des articles, des vidéos et plus encore." - }, - "heading_idle" : { - "message" : "" - }, - "heading_error" : { - "message" : "Un problème est survenu !" - }, - "heading_saving" : { - "message" : "Sauvegarde..." - }, - "heading_saved" : { - "message" : "Sauvegardé dans Pocket" - }, - "heading_save_failed" : { - "message" : "Un problème est survenu !" - }, - "heading_removing" : { - "message" : "Suppression en cours..." - }, - "heading_removed" : { - "message" : "Suppression effectuée" - }, - "heading_remove_failed" : { - "message" : "Un problème est survenu !" - }, - "heading_tags_saving" : { - "message" : "Sauvegarde des labels..." - }, - "heading_tags_saved" : { - "message" : "Labels sauvegardés" - }, - "heading_tags_failed" : { - "message" : "Un problème est survenu !" - }, - "heading_tags_error" : { - "message" : "Les labels sont limités à 25 caractères" - }, - "buttons_remove" : { - "message" : "Supprimer" - }, - "buttons_mylist" : { - "message" : "Sauvegardes" - }, - "buttons_save" : { - "message" : "Sauvegarder" - }, - "context_menu_open_list" : { - "message" : "Ouvrez vos sauvegardes Pocket" - }, - "context_menu_discover_more" : { - "message" : "Découvrez-en plus sur Pocket" - }, - "context_menu_log_in" : { - "message" : "Se connecter" - }, - "context_menu_log_out" : { - "message" : "Déconnexion" - }, - "context_menu_save" : { - "message" : "Sauvegarder dans Pocket" - }, - "tagging_add_tags" : { - "message" : "Ajouter des labels" - }, - "options_header" : { - "message" : "Extension Sauvegarder dans Pocket" - }, - "options_login_title" : { - "message" : "Connecté(e) en tant que" - }, - "options_log_out" : { - "message" : "Déconnexion" - }, - "options_log_in" : { - "message" : "Se connecter" - }, - "options_shortcut_title" : { - "message" : "Raccourci clavier" - }, - "options_shortcut_record" : { - "message" : "Enregistrer un nouveau raccourci" - }, - "options_theme_title" : { - "message" : "Thème" - }, - "options_theme_light" : { - "message" : "Clair" - }, - "options_theme_dark" : { - "message" : "Foncé" - }, - "options_theme_system" : { - "message" : "Utiliser le paramètre système" - }, - "options_app_title" : { - "message" : "Application mobile de Pocket" - }, - "options_app_apple" : { - "message" : "Télécharger sur l'Apple Store" - }, - "options_app_google" : { - "message" : "Télécharger sur Google Play" - }, - "options_need_help" : { - "message" : "Besoin d'aide ?" - }, - "options_email_us" : { - "message" : "Nous écrire" - }, - "options_follow" : { - "message" : "Suivez Pocket" - }, - "options_family" : { - "message" : "Pocket fait partie de la famille de produits Mozilla." - }, - "options_privacy" : { - "message" : "Politique de confidentialité" - }, - "options_terms" : { - "message" : "Conditions générales d'utilisation" - } -} diff --git a/clients/extension/public/_locales/it/messages.json b/clients/extension/public/_locales/it/messages.json deleted file mode 100644 index 5da79f406..000000000 --- a/clients/extension/public/_locales/it/messages.json +++ /dev/null @@ -1,125 +0,0 @@ -{ - "extension_description" : { - "message" : "Il modo più semplice e veloce per raccogliere articoli, video e molto altro." - }, - "heading_idle" : { - "message" : "" - }, - "heading_error" : { - "message" : "Qualcosa non ha funzionato." - }, - "heading_saving" : { - "message" : "Salvataggio..." - }, - "heading_saved" : { - "message" : "Salvato in Pocket" - }, - "heading_save_failed" : { - "message" : "Qualcosa non ha funzionato." - }, - "heading_removing" : { - "message" : "Rimozione in corso…" - }, - "heading_removed" : { - "message" : "Rimosso" - }, - "heading_remove_failed" : { - "message" : "Qualcosa non ha funzionato." - }, - "heading_tags_saving" : { - "message" : "Salvataggio tag in corso..." - }, - "heading_tags_saved" : { - "message" : "Tag salvati" - }, - "heading_tags_failed" : { - "message" : "Qualcosa non ha funzionato." - }, - "heading_tags_error" : { - "message" : "I tag hanno un limite di 25 caratteri" - }, - "buttons_remove" : { - "message" : "Elimina" - }, - "buttons_mylist" : { - "message" : "Salvati" - }, - "buttons_save" : { - "message" : "Salva" - }, - "context_menu_open_list" : { - "message" : "Apri i tuoi salvataggi Pocket" - }, - "context_menu_discover_more" : { - "message" : "Scopri di più con Pocket" - }, - "context_menu_log_in" : { - "message" : "Accedi" - }, - "context_menu_log_out" : { - "message" : "Esci" - }, - "context_menu_save" : { - "message" : "Salva in Pocket" - }, - "tagging_add_tags" : { - "message" : "Aggiungi tag" - }, - "options_header" : { - "message" : "Estensione Salva in Pocket" - }, - "options_login_title" : { - "message" : "Accesso eseguito come" - }, - "options_log_out" : { - "message" : "Esci" - }, - "options_log_in" : { - "message" : "Accedi" - }, - "options_shortcut_title" : { - "message" : "Scelta rapida da tastiera" - }, - "options_shortcut_record" : { - "message" : "Memorizza un nuovo tasto di scelta rapida" - }, - "options_theme_title" : { - "message" : "Tema" - }, - "options_theme_light" : { - "message" : "Chiaro" - }, - "options_theme_dark" : { - "message" : "Scuro" - }, - "options_theme_system" : { - "message" : "Usa impostazione di sistema" - }, - "options_app_title" : { - "message" : "App per dispositivi mobili Pocket" - }, - "options_app_apple" : { - "message" : "Scarica dall'App Store di Apple" - }, - "options_app_google" : { - "message" : "Scaricalo da Google Play" - }, - "options_need_help" : { - "message" : "Hai bisogno di aiuto?" - }, - "options_email_us" : { - "message" : "Scrivi un'email" - }, - "options_follow" : { - "message" : "Segui Pocket" - }, - "options_family" : { - "message" : "Pocket fa parte della famiglia di prodotti Mozilla." - }, - "options_privacy" : { - "message" : "Tutela della privacy" - }, - "options_terms" : { - "message" : "Condizioni d'uso" - } -} diff --git a/clients/extension/public/_locales/ja/messages.json b/clients/extension/public/_locales/ja/messages.json deleted file mode 100644 index 58d085843..000000000 --- a/clients/extension/public/_locales/ja/messages.json +++ /dev/null @@ -1,125 +0,0 @@ -{ - "extension_description" : { - "message" : "記事、ビデオなどを最も簡単かつ迅速に取り込むことができます。" - }, - "heading_idle" : { - "message" : "" - }, - "heading_error" : { - "message" : "エラーが発生したようです。" - }, - "heading_saving" : { - "message" : "保存中..." - }, - "heading_saved" : { - "message" : "Pocket に保存済み" - }, - "heading_save_failed" : { - "message" : "エラーが発生したようです。" - }, - "heading_removing" : { - "message" : "削除しています..." - }, - "heading_removed" : { - "message" : "削除されました" - }, - "heading_remove_failed" : { - "message" : "エラーが発生したようです。" - }, - "heading_tags_saving" : { - "message" : "タグを保存しています..." - }, - "heading_tags_saved" : { - "message" : "タグが保存されました" - }, - "heading_tags_failed" : { - "message" : "エラーが発生したようです。" - }, - "heading_tags_error" : { - "message" : "タグは最大25文字となっています" - }, - "buttons_remove" : { - "message" : "削除" - }, - "buttons_mylist" : { - "message" : "保存アイテム" - }, - "buttons_save" : { - "message" : "保存" - }, - "context_menu_open_list" : { - "message" : "Pocket の保存アイテムを開く" - }, - "context_menu_discover_more" : { - "message" : "Pocket で他のコンテンツを発見" - }, - "context_menu_log_in" : { - "message" : "ログイン" - }, - "context_menu_log_out" : { - "message" : "ログアウト" - }, - "context_menu_save" : { - "message" : "Pocket に保存" - }, - "tagging_add_tags" : { - "message" : "タグを追加" - }, - "options_header" : { - "message" : "「Pocket に保存」拡張機能" - }, - "options_login_title" : { - "message" : "次のユーザー名でログイン中:" - }, - "options_log_out" : { - "message" : "ログアウト" - }, - "options_log_in" : { - "message" : "ログイン" - }, - "options_shortcut_title" : { - "message" : "キーボードショートカット" - }, - "options_shortcut_record" : { - "message" : "新しいショートカットを記録" - }, - "options_theme_title" : { - "message" : "テーマ" - }, - "options_theme_light" : { - "message" : "ライト" - }, - "options_theme_dark" : { - "message" : "ダーク" - }, - "options_theme_system" : { - "message" : "システム設定を使用する" - }, - "options_app_title" : { - "message" : "Pocket モバイルアプリ" - }, - "options_app_apple" : { - "message" : "Apple App Store でダウンロード" - }, - "options_app_google" : { - "message" : "Google Playからダウンロード" - }, - "options_need_help" : { - "message" : "お困りですか?" - }, - "options_email_us" : { - "message" : "メールでお問い合わせ" - }, - "options_follow" : { - "message" : "Pocket をフォロー" - }, - "options_family" : { - "message" : "Pocket は Mozilla 製品ファミリーの一部です。" - }, - "options_privacy" : { - "message" : "プライバシーポリシー" - }, - "options_terms" : { - "message" : "サービス利用規約" - } -} diff --git a/clients/extension/public/_locales/ko/messages.json b/clients/extension/public/_locales/ko/messages.json deleted file mode 100644 index e0d8da229..000000000 --- a/clients/extension/public/_locales/ko/messages.json +++ /dev/null @@ -1,125 +0,0 @@ -{ - "extension_description" : { - "message" : "아티클, 동영상 등을 캡처하는 가장 쉽고 빠른 방법." - }, - "heading_idle" : { - "message" : "" - }, - "heading_error" : { - "message" : "문제가 발생했습니다!" - }, - "heading_saving" : { - "message" : "저장 중..." - }, - "heading_saved" : { - "message" : "Pocket에 저장됨" - }, - "heading_save_failed" : { - "message" : "문제가 발생했습니다!" - }, - "heading_removing" : { - "message" : "제거 중..." - }, - "heading_removed" : { - "message" : "제거됨" - }, - "heading_remove_failed" : { - "message" : "문제가 발생했습니다!" - }, - "heading_tags_saving" : { - "message" : "태그 저장 중..." - }, - "heading_tags_saved" : { - "message" : "태그 저장됨" - }, - "heading_tags_failed" : { - "message" : "문제가 발생했습니다!" - }, - "heading_tags_error" : { - "message" : "태그는 25자로 제한됩니다." - }, - "buttons_remove" : { - "message" : "제거하기" - }, - "buttons_mylist" : { - "message" : "저장" - }, - "buttons_save" : { - "message" : "저장" - }, - "context_menu_open_list" : { - "message" : "Pocket Saves 열기" - }, - "context_menu_discover_more" : { - "message" : "Pocket에서 더 찾기" - }, - "context_menu_log_in" : { - "message" : "로그인" - }, - "context_menu_log_out" : { - "message" : "로그아웃" - }, - "context_menu_save" : { - "message" : "Pocket에 저장" - }, - "tagging_add_tags" : { - "message" : "태그 추가" - }, - "options_header" : { - "message" : "Pocket 확장에 저장" - }, - "options_login_title" : { - "message" : "다음 이름으로 로그인됨" - }, - "options_log_out" : { - "message" : "로그아웃" - }, - "options_log_in" : { - "message" : "로그인" - }, - "options_shortcut_title" : { - "message" : "키보드 바로 가기" - }, - "options_shortcut_record" : { - "message" : "새 바로 가기 기록" - }, - "options_theme_title" : { - "message" : "테마" - }, - "options_theme_light" : { - "message" : "밝게" - }, - "options_theme_dark" : { - "message" : "어둡게" - }, - "options_theme_system" : { - "message" : "시스템 설정 사용" - }, - "options_app_title" : { - "message" : "Pocket 모바일 앱" - }, - "options_app_apple" : { - "message" : "Apple App Store에서 다운로드" - }, - "options_app_google" : { - "message" : "Google Play에서 다운로드" - }, - "options_need_help" : { - "message" : "도움이 필요하십니까?" - }, - "options_email_us" : { - "message" : "이메일 보내기" - }, - "options_follow" : { - "message" : "Pocket 팔로우" - }, - "options_family" : { - "message" : "Pocket은 Mozilla 제품군의 일부입니다." - }, - "options_privacy" : { - "message" : "개인정보 보호정책" - }, - "options_terms" : { - "message" : "서비스 약관" - } -} diff --git a/clients/extension/public/_locales/nl/messages.json b/clients/extension/public/_locales/nl/messages.json deleted file mode 100644 index 4fe575e77..000000000 --- a/clients/extension/public/_locales/nl/messages.json +++ /dev/null @@ -1,125 +0,0 @@ -{ - "extension_description" : { - "message" : "De gemakkelijkste en snelste manier om artikelen, video's en meer op te slaan." - }, - "heading_idle" : { - "message" : "" - }, - "heading_error" : { - "message" : "Er is iets misgegaan!" - }, - "heading_saving" : { - "message" : "Opslaan..." - }, - "heading_saved" : { - "message" : "Opgeslagen naar Pocket" - }, - "heading_save_failed" : { - "message" : "Er is iets misgegaan!" - }, - "heading_removing" : { - "message" : "Verwijderen..." - }, - "heading_removed" : { - "message" : "Verwijderd" - }, - "heading_remove_failed" : { - "message" : "Er is iets misgegaan!" - }, - "heading_tags_saving" : { - "message" : "Tags opslaan..." - }, - "heading_tags_saved" : { - "message" : "Tags opgeslagen" - }, - "heading_tags_failed" : { - "message" : "Er is iets misgegaan!" - }, - "heading_tags_error" : { - "message" : "Tags zijn beperkt tot 25 tekens" - }, - "buttons_remove" : { - "message" : "Verwijderen" - }, - "buttons_mylist" : { - "message" : "Opgeslagen" - }, - "buttons_save" : { - "message" : "Opslaan" - }, - "context_menu_open_list" : { - "message" : "Open Opgeslagen in Pocket" - }, - "context_menu_discover_more" : { - "message" : "Ontdek meer op Pocket" - }, - "context_menu_log_in" : { - "message" : "Inloggen" - }, - "context_menu_log_out" : { - "message" : "Uitloggen" - }, - "context_menu_save" : { - "message" : "Opslaan naar Pocket" - }, - "tagging_add_tags" : { - "message" : "Tags toevoegen" - }, - "options_header" : { - "message" : "Extensie Naar Pocket opslaan" - }, - "options_login_title" : { - "message" : "Ingelogd als" - }, - "options_log_out" : { - "message" : "Afmelden" - }, - "options_log_in" : { - "message" : "Inloggen" - }, - "options_shortcut_title" : { - "message" : "Sneltoets" - }, - "options_shortcut_record" : { - "message" : "Een nieuwe snelkoppeling vastleggen" - }, - "options_theme_title" : { - "message" : "Thema" - }, - "options_theme_light" : { - "message" : "Licht" - }, - "options_theme_dark" : { - "message" : "Donker" - }, - "options_theme_system" : { - "message" : "Systeeminstelling gebruiken" - }, - "options_app_title" : { - "message" : "Mobiele Pocket-app" - }, - "options_app_apple" : { - "message" : "Downloaden in de appstore van Apple" - }, - "options_app_google" : { - "message" : "Downloaden via Google Play" - }, - "options_need_help" : { - "message" : "Hulp nodig?" - }, - "options_email_us" : { - "message" : "Mail ons" - }, - "options_follow" : { - "message" : "Volg Pocket" - }, - "options_family" : { - "message" : "Pocket maakt deel uit van de Mozilla-productfamilie." - }, - "options_privacy" : { - "message" : "Privacybeleid" - }, - "options_terms" : { - "message" : "Gebruiksvoorwaarden" - } -} diff --git a/clients/extension/public/_locales/pl/messages.json b/clients/extension/public/_locales/pl/messages.json deleted file mode 100644 index 79f679d29..000000000 --- a/clients/extension/public/_locales/pl/messages.json +++ /dev/null @@ -1,125 +0,0 @@ -{ - "extension_description" : { - "message" : "Najłatwiejsza i najszybsza metoda zapisywania artykułów, filmów i innych treści." - }, - "heading_idle" : { - "message" : "" - }, - "heading_error" : { - "message" : "Wystąpił problem." - }, - "heading_saving" : { - "message" : "Zapisywanie..." - }, - "heading_saved" : { - "message" : "Zapisano w aplikacji Pocket" - }, - "heading_save_failed" : { - "message" : "Wystąpił problem." - }, - "heading_removing" : { - "message" : "Usuwanie..." - }, - "heading_removed" : { - "message" : "Usunięto" - }, - "heading_remove_failed" : { - "message" : "Wystąpił problem." - }, - "heading_tags_saving" : { - "message" : "Zapisywanie tagów..." - }, - "heading_tags_saved" : { - "message" : "Zapisano tagi" - }, - "heading_tags_failed" : { - "message" : "Wystąpił problem." - }, - "heading_tags_error" : { - "message" : "Tagi mogą mieć maksymalnie 25 znaków" - }, - "buttons_remove" : { - "message" : "Usuń" - }, - "buttons_mylist" : { - "message" : "Zapisane" - }, - "buttons_save" : { - "message" : "Zapisz" - }, - "context_menu_open_list" : { - "message" : "Otwórz elementy zapisane w Pocket" - }, - "context_menu_discover_more" : { - "message" : "Odkryj więcej w Pocket" - }, - "context_menu_log_in" : { - "message" : "Zaloguj się" - }, - "context_menu_log_out" : { - "message" : "Wyloguj się" - }, - "context_menu_save" : { - "message" : "Zapisz w aplikacji Pocket" - }, - "tagging_add_tags" : { - "message" : "Dodaj tagi" - }, - "options_header" : { - "message" : "Rozszerzenie Zapisz do Pocket" - }, - "options_login_title" : { - "message" : "Zalogowano jako" - }, - "options_log_out" : { - "message" : "Wyloguj się" - }, - "options_log_in" : { - "message" : "Zaloguj się" - }, - "options_shortcut_title" : { - "message" : "Skrót klawiaturowy" - }, - "options_shortcut_record" : { - "message" : "Zarejestruj nowy skrót" - }, - "options_theme_title" : { - "message" : "Motyw" - }, - "options_theme_light" : { - "message" : "Jasny" - }, - "options_theme_dark" : { - "message" : "Ciemny" - }, - "options_theme_system" : { - "message" : "Użyj ustawienia systemowego" - }, - "options_app_title" : { - "message" : "Aplikacja mobilna Pocket" - }, - "options_app_apple" : { - "message" : "Pobierz z serwisu Apple App Store" - }, - "options_app_google" : { - "message" : "Pobierz z serwisu Google Play" - }, - "options_need_help" : { - "message" : "Potrzebna pomoc?" - }, - "options_email_us" : { - "message" : "Napisz do nas wiadomość e-mail" - }, - "options_follow" : { - "message" : "Obserwuj Pocket" - }, - "options_family" : { - "message" : "Pocket należy do rodziny produktów Mozilla." - }, - "options_privacy" : { - "message" : "Zasady ochrony prywatności" - }, - "options_terms" : { - "message" : "Warunki użytkowania usługi" - } -} diff --git a/clients/extension/public/_locales/pt_BR/messages.json b/clients/extension/public/_locales/pt_BR/messages.json deleted file mode 100644 index 97b8d9ca2..000000000 --- a/clients/extension/public/_locales/pt_BR/messages.json +++ /dev/null @@ -1,125 +0,0 @@ -{ - "extension_description" : { - "message" : "A maneira mais fácil e rápida de salvar artigos, vídeos e muito mais." - }, - "heading_idle" : { - "message" : "" - }, - "heading_error" : { - "message" : "Ocorreu um erro!" - }, - "heading_saving" : { - "message" : "Salvando…" - }, - "heading_saved" : { - "message" : "Salvo no Pocket" - }, - "heading_save_failed" : { - "message" : "Ocorreu um erro!" - }, - "heading_removing" : { - "message" : "Removendo..." - }, - "heading_removed" : { - "message" : "Removido" - }, - "heading_remove_failed" : { - "message" : "Ocorreu um erro!" - }, - "heading_tags_saving" : { - "message" : "Salvando tags..." - }, - "heading_tags_saved" : { - "message" : "Tags salvas" - }, - "heading_tags_failed" : { - "message" : "Ocorreu um erro!" - }, - "heading_tags_error" : { - "message" : "As tags têm um limite de 25 caracteres" - }, - "buttons_remove" : { - "message" : "Remover" - }, - "buttons_mylist" : { - "message" : "Salvos" - }, - "buttons_save" : { - "message" : "Salvar" - }, - "context_menu_open_list" : { - "message" : "Abra seus Salvos no Pocket" - }, - "context_menu_discover_more" : { - "message" : "Descubra mais no Pocket" - }, - "context_menu_log_in" : { - "message" : "Entrar" - }, - "context_menu_log_out" : { - "message" : "Sair" - }, - "context_menu_save" : { - "message" : "Salvar no Pocket" - }, - "tagging_add_tags" : { - "message" : "Adicionar tags" - }, - "options_header" : { - "message" : "Extensão Salvar no Pocket" - }, - "options_login_title" : { - "message" : "Conectado como" - }, - "options_log_out" : { - "message" : "Sair" - }, - "options_log_in" : { - "message" : "Entrar" - }, - "options_shortcut_title" : { - "message" : "Atalho do teclado" - }, - "options_shortcut_record" : { - "message" : "Gravar um novo atalho" - }, - "options_theme_title" : { - "message" : "Tema" - }, - "options_theme_light" : { - "message" : "Claro" - }, - "options_theme_dark" : { - "message" : "Escuro" - }, - "options_theme_system" : { - "message" : "Usar a configuração do sistema" - }, - "options_app_title" : { - "message" : "Aplicativo móvel do Pocket" - }, - "options_app_apple" : { - "message" : "Baixe o aplicativo na App Store da Apple" - }, - "options_app_google" : { - "message" : "Baixar no Google Play" - }, - "options_need_help" : { - "message" : "Precisa de ajuda?" - }, - "options_email_us" : { - "message" : "Envie-nos um e-mail" - }, - "options_follow" : { - "message" : "Siga o Pocket" - }, - "options_family" : { - "message" : "O Pocket faz parte da linha de produtos da Mozilla." - }, - "options_privacy" : { - "message" : "Política de privacidade" - }, - "options_terms" : { - "message" : "Termos de serviço" - } -} diff --git a/clients/extension/public/_locales/pt_PT/messages.json b/clients/extension/public/_locales/pt_PT/messages.json deleted file mode 100644 index 3ee5867c3..000000000 --- a/clients/extension/public/_locales/pt_PT/messages.json +++ /dev/null @@ -1,125 +0,0 @@ -{ - "extension_description" : { - "message" : "A maneira mais fácil e rápida de capturar artigos, vídeos e muito mais." - }, - "heading_idle" : { - "message" : "" - }, - "heading_error" : { - "message" : "Algo correu mal!" - }, - "heading_saving" : { - "message" : "A guardar…" - }, - "heading_saved" : { - "message" : "Guardado no Pocket" - }, - "heading_save_failed" : { - "message" : "Algo correu mal!" - }, - "heading_removing" : { - "message" : "A remover..." - }, - "heading_removed" : { - "message" : "Removido" - }, - "heading_remove_failed" : { - "message" : "Algo correu mal!" - }, - "heading_tags_saving" : { - "message" : "A guardar etiquetas..." - }, - "heading_tags_saved" : { - "message" : "Etiquetas guardadas" - }, - "heading_tags_failed" : { - "message" : "Algo correu mal!" - }, - "heading_tags_error" : { - "message" : "As etiquetas têm um limite de 25 caracteres" - }, - "buttons_remove" : { - "message" : "Remover" - }, - "buttons_mylist" : { - "message" : "Guardados" - }, - "buttons_save" : { - "message" : "Guardar" - }, - "context_menu_open_list" : { - "message" : "Abra os seus Guardados no Pocket" - }, - "context_menu_discover_more" : { - "message" : "Descubra mais no Pocket" - }, - "context_menu_log_in" : { - "message" : "Entrar" - }, - "context_menu_log_out" : { - "message" : "Sair" - }, - "context_menu_save" : { - "message" : "Guardar no Pocket" - }, - "tagging_add_tags" : { - "message" : "Adicionar Etiquetas" - }, - "options_header" : { - "message" : "Guardar na extensão do Pocket" - }, - "options_login_title" : { - "message" : "Sessão iniciada como" - }, - "options_log_out" : { - "message" : "Terminar sessão" - }, - "options_log_in" : { - "message" : "Iniciar sessão" - }, - "options_shortcut_title" : { - "message" : "Atalhos de teclado" - }, - "options_shortcut_record" : { - "message" : "Gravar um atalho novo" - }, - "options_theme_title" : { - "message" : "Tema" - }, - "options_theme_light" : { - "message" : "Claro" - }, - "options_theme_dark" : { - "message" : "Escuro" - }, - "options_theme_system" : { - "message" : "Usar a definição do sistema" - }, - "options_app_title" : { - "message" : "Aplicação móvel do Pocket" - }, - "options_app_apple" : { - "message" : "Transferir na Apple App Store" - }, - "options_app_google" : { - "message" : "Obtenha a app no Google Play" - }, - "options_need_help" : { - "message" : "Precisa de Ajuda?" - }, - "options_email_us" : { - "message" : "Envie-nos um e-mail" - }, - "options_follow" : { - "message" : "Seguir o Pocket" - }, - "options_family" : { - "message" : "O Pocket faz parte da família de produtos Mozilla." - }, - "options_privacy" : { - "message" : "Política de privacidade" - }, - "options_terms" : { - "message" : "Condições do serviço" - } -} diff --git a/clients/extension/public/_locales/ru/messages.json b/clients/extension/public/_locales/ru/messages.json deleted file mode 100644 index 5b9dd8404..000000000 --- a/clients/extension/public/_locales/ru/messages.json +++ /dev/null @@ -1,125 +0,0 @@ -{ - "extension_description" : { - "message" : "Самый простой и быстрый способ записывать статьи, видео и многое другое." - }, - "heading_idle" : { - "message" : "" - }, - "heading_error" : { - "message" : "К сожалению, что-то пошло не так!" - }, - "heading_saving" : { - "message" : "Сохранение..." - }, - "heading_saved" : { - "message" : "Сохранено в Pocket" - }, - "heading_save_failed" : { - "message" : "К сожалению, что-то пошло не так!" - }, - "heading_removing" : { - "message" : "Удаление..." - }, - "heading_removed" : { - "message" : "Удалено" - }, - "heading_remove_failed" : { - "message" : "К сожалению, что-то пошло не так!" - }, - "heading_tags_saving" : { - "message" : "Сохранение тегов..." - }, - "heading_tags_saved" : { - "message" : "Теги сохранены" - }, - "heading_tags_failed" : { - "message" : "К сожалению, что-то пошло не так!" - }, - "heading_tags_error" : { - "message" : "Длина тега ограничена 25 символами" - }, - "buttons_remove" : { - "message" : "Удалить" - }, - "buttons_mylist" : { - "message" : "Сохраненное" - }, - "buttons_save" : { - "message" : "Сохранить" - }, - "context_menu_open_list" : { - "message" : "Откройте сохраненные файлы Pocket" - }, - "context_menu_discover_more" : { - "message" : "Откройте больше с Pocket" - }, - "context_menu_log_in" : { - "message" : "Вход" - }, - "context_menu_log_out" : { - "message" : "Выйти" - }, - "context_menu_save" : { - "message" : "Сохранить в Pocket" - }, - "tagging_add_tags" : { - "message" : "Добавить теги" - }, - "options_header" : { - "message" : "Расширение \"Сохранить в Pocket\"" - }, - "options_login_title" : { - "message" : "Вы вошли как" - }, - "options_log_out" : { - "message" : "Выйти" - }, - "options_log_in" : { - "message" : "Войти" - }, - "options_shortcut_title" : { - "message" : "Сочетание клавиш" - }, - "options_shortcut_record" : { - "message" : "Задать новое сочетание клавиш" - }, - "options_theme_title" : { - "message" : "Тема" - }, - "options_theme_light" : { - "message" : "Светлый" - }, - "options_theme_dark" : { - "message" : "Темный" - }, - "options_theme_system" : { - "message" : "Использовать системные настройки" - }, - "options_app_title" : { - "message" : "Мобильное приложение Pocket" - }, - "options_app_apple" : { - "message" : "Скачать в Apple App Store" - }, - "options_app_google" : { - "message" : "Загрузить из Google Play" - }, - "options_need_help" : { - "message" : "Нужна помощь?" - }, - "options_email_us" : { - "message" : "Пишите нам" - }, - "options_follow" : { - "message" : "Следите за Pocket" - }, - "options_family" : { - "message" : "Pocket входит в семейство продуктов Mozilla." - }, - "options_privacy" : { - "message" : "Политика конфиденциальности" - }, - "options_terms" : { - "message" : "Условия использования" - } -} diff --git a/clients/extension/public/_locales/zh_CN/messages.json b/clients/extension/public/_locales/zh_CN/messages.json deleted file mode 100644 index 06351bc52..000000000 --- a/clients/extension/public/_locales/zh_CN/messages.json +++ /dev/null @@ -1,125 +0,0 @@ -{ - "extension_description" : { - "message" : "捕获文章、视频等内容的最轻松、快捷方式。" - }, - "heading_idle" : { - "message" : "" - }, - "heading_error" : { - "message" : "出错了!" - }, - "heading_saving" : { - "message" : "保存..." - }, - "heading_saved" : { - "message" : "已保存到 Pocket" - }, - "heading_save_failed" : { - "message" : "出错了!" - }, - "heading_removing" : { - "message" : "正在删除..." - }, - "heading_removed" : { - "message" : "已删除" - }, - "heading_remove_failed" : { - "message" : "出错了!" - }, - "heading_tags_saving" : { - "message" : "正在保存标记……" - }, - "heading_tags_saved" : { - "message" : "标记已保存" - }, - "heading_tags_failed" : { - "message" : "出错了!" - }, - "heading_tags_error" : { - "message" : "标记限于 25 个字符" - }, - "buttons_remove" : { - "message" : "删除" - }, - "buttons_mylist" : { - "message" : "保存内容" - }, - "buttons_save" : { - "message" : "保存" - }, - "context_menu_open_list" : { - "message" : "打开您的 Pocket 保存内容" - }, - "context_menu_discover_more" : { - "message" : "在 Pocket 发现更多内容" - }, - "context_menu_log_in" : { - "message" : "登录" - }, - "context_menu_log_out" : { - "message" : "注销" - }, - "context_menu_save" : { - "message" : "保存到 Pocket" - }, - "tagging_add_tags" : { - "message" : "添加标记" - }, - "options_header" : { - "message" : "保存到 Pocket 扩展件" - }, - "options_login_title" : { - "message" : "登录为" - }, - "options_log_out" : { - "message" : "注销" - }, - "options_log_in" : { - "message" : "登录" - }, - "options_shortcut_title" : { - "message" : "键盘快捷键" - }, - "options_shortcut_record" : { - "message" : "记录新的快捷键" - }, - "options_theme_title" : { - "message" : "主题" - }, - "options_theme_light" : { - "message" : "浅色" - }, - "options_theme_dark" : { - "message" : "深色" - }, - "options_theme_system" : { - "message" : "使用系统设置" - }, - "options_app_title" : { - "message" : "Pocket 的移动应用" - }, - "options_app_apple" : { - "message" : "从 Apple App Store 下载" - }, - "options_app_google" : { - "message" : "从 Google Play 获取" - }, - "options_need_help" : { - "message" : "需要帮助?" - }, - "options_email_us" : { - "message" : "电邮我们" - }, - "options_follow" : { - "message" : "关注 Pocket" - }, - "options_family" : { - "message" : "Pocket 是 Mozilla 系列产品的一部分。" - }, - "options_privacy" : { - "message" : "隐私政策" - }, - "options_terms" : { - "message" : "服务条款" - } -} diff --git a/clients/extension/public/_locales/zh_TW/messages.json b/clients/extension/public/_locales/zh_TW/messages.json deleted file mode 100644 index abe113ba8..000000000 --- a/clients/extension/public/_locales/zh_TW/messages.json +++ /dev/null @@ -1,125 +0,0 @@ -{ - "extension_description" : { - "message" : "擷取文章、短片等内容的最簡捷方法。" - }, - "heading_idle" : { - "message" : "" - }, - "heading_error" : { - "message" : "出了點問題!" - }, - "heading_saving" : { - "message" : "正在儲存..." - }, - "heading_saved" : { - "message" : "已儲存到 Pocket" - }, - "heading_save_failed" : { - "message" : "出了點問題!" - }, - "heading_removing" : { - "message" : "移除中..." - }, - "heading_removed" : { - "message" : "已移除" - }, - "heading_remove_failed" : { - "message" : "出了點問題!" - }, - "heading_tags_saving" : { - "message" : "正在儲存標籤……" - }, - "heading_tags_saved" : { - "message" : "標籤已儲存" - }, - "heading_tags_failed" : { - "message" : "出了點問題!" - }, - "heading_tags_error" : { - "message" : "標籤長度限於 25 個字元" - }, - "buttons_remove" : { - "message" : "移除" - }, - "buttons_mylist" : { - "message" : "儲存項目" - }, - "buttons_save" : { - "message" : "儲存" - }, - "context_menu_open_list" : { - "message" : "開啟您的 Pocket 儲存內容" - }, - "context_menu_discover_more" : { - "message" : "在 Pocket 上發掘更多內容" - }, - "context_menu_log_in" : { - "message" : "登入" - }, - "context_menu_log_out" : { - "message" : "登出" - }, - "context_menu_save" : { - "message" : "儲存到 Pocket" - }, - "tagging_add_tags" : { - "message" : "新增標籤" - }, - "options_header" : { - "message" : "儲存到 Pocket 擴充功能" - }, - "options_login_title" : { - "message" : "已登入為" - }, - "options_log_out" : { - "message" : "登出" - }, - "options_log_in" : { - "message" : "登入" - }, - "options_shortcut_title" : { - "message" : "鍵盤快速鍵" - }, - "options_shortcut_record" : { - "message" : "記錄新捷徑" - }, - "options_theme_title" : { - "message" : "主題" - }, - "options_theme_light" : { - "message" : "淺色" - }, - "options_theme_dark" : { - "message" : "暗色調" - }, - "options_theme_system" : { - "message" : "使用系統設定" - }, - "options_app_title" : { - "message" : "Pocket 的行動應用程式" - }, - "options_app_apple" : { - "message" : "在 Apple App Store 下載" - }, - "options_app_google" : { - "message" : "在 Google Play 取得" - }, - "options_need_help" : { - "message" : "需要幫助?" - }, - "options_email_us" : { - "message" : "電郵我們" - }, - "options_follow" : { - "message" : "關注 Pocket" - }, - "options_family" : { - "message" : "Pocket 屬於 Mozilla 系列產品之一。" - }, - "options_privacy" : { - "message" : "隱私政策" - }, - "options_terms" : { - "message" : "服務條款" - } -} diff --git a/clients/extension/public/images/action-icon.png b/clients/extension/public/images/action-icon.png deleted file mode 100644 index 5b50c4687..000000000 Binary files a/clients/extension/public/images/action-icon.png and /dev/null differ diff --git a/clients/extension/public/images/icon-128.png b/clients/extension/public/images/icon-128.png deleted file mode 100644 index 26c122e21..000000000 Binary files a/clients/extension/public/images/icon-128.png and /dev/null differ diff --git a/clients/extension/public/images/icon-16.png b/clients/extension/public/images/icon-16.png deleted file mode 100644 index db68d5534..000000000 Binary files a/clients/extension/public/images/icon-16.png and /dev/null differ diff --git a/clients/extension/public/images/icon-32.png b/clients/extension/public/images/icon-32.png deleted file mode 100644 index 1313669fa..000000000 Binary files a/clients/extension/public/images/icon-32.png and /dev/null differ diff --git a/clients/extension/public/images/icon-48.png b/clients/extension/public/images/icon-48.png deleted file mode 100644 index 27b1eec98..000000000 Binary files a/clients/extension/public/images/icon-48.png and /dev/null differ diff --git a/clients/extension/public/images/pocket-logo.png b/clients/extension/public/images/pocket-logo.png deleted file mode 100644 index 2959d45fc..000000000 Binary files a/clients/extension/public/images/pocket-logo.png and /dev/null differ diff --git a/clients/extension/public/styles/fonts.css b/clients/extension/public/styles/fonts.css deleted file mode 100644 index 6fbb6243c..000000000 --- a/clients/extension/public/styles/fonts.css +++ /dev/null @@ -1,19 +0,0 @@ -/* stylelint-disable */ -@font-face { - font-family: 'Graphik Web'; - font-weight: 400; - src: url('data:font/truetype;charset=utf-8;base64,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') format('woff'); -} - -@font-face { - font-family: 'Graphik Web'; - font-weight: 500; - src: url('data:font/truetype;charset=utf-8;base64, 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') format('woff'); -} - -@font-face { - font-family: 'Graphik Web'; - font-weight: 600; - src: url('data:font/truetype;charset=utf-8;base64, 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') format('woff'); -} -/* stylelint-enable */ diff --git a/clients/extension/public/styles/global.css b/clients/extension/public/styles/global.css deleted file mode 100644 index 40ab9fd00..000000000 --- a/clients/extension/public/styles/global.css +++ /dev/null @@ -1,160 +0,0 @@ -:root { - --color-white100: #ffffff; - --color-grey10: #1a1a1a; - --color-grey20: #333333; - --color-grey25: #404040; - --color-grey30: #4d4d4d; - --color-grey35: #595959; - --color-grey40: #666666; - --color-grey45: #737373; - --color-grey55: #8c8c8c; - --color-grey65: #a6a6a6; - --color-grey80: #cccccc; - --color-grey85: #d9d9d9; - --color-grey95: #f2f2f2; - - --color-coral: #ef4056; - --color-amber: #fcb643; - --color-brandPocket: #ef4056; - --color-error: #e64a4a; - --font-sans-serif: 'Graphik Web', 'Helvetica Neue', Helvetica, Arial, Sans-Serif; - - --color-canvas: #ffffff; - --color-canvas-active: hsl(0, 0%, 90%); - --color-canvas-darker: hsl(0, 0%, 95%); - --color-loader: #42414d; - --color-text-primary: #15141a; - --color-text-secondary: #333; - --color-divider: var(--color-grey85); - --color-button-active: #42414d; - --color-button-active-text: #ffffff; - --color-button-neutral-text: #15141a; - --color-input-base: #ffffff; - --color-input-border: var(--color-grey85); - --color-bg-suggested-tag: #f0f0f4; - --color-bg-suggested-tag-hover: hsl(240, 15%, 93%); - --color-suggested-tag: hsl(250, 13%, 9%); - --color-tag-add: hsl(250, 13%, 15%); - - @media (prefers-color-scheme: dark) { - --color-canvas: #42414d; - --color-canvas-active: hsl(245, 8%, 38%); - --color-canvas-darker: hsl(245, 8%, 24%); - --color-loader: #15141a; - --color-text-primary: #fbfbfe; - --color-text-secondary: var(--color-grey85); - --color-divider: #2b2a33; - --color-button-active: #15141a; - --color-button-active-text: #fbfbfe; - --color-button-neutral: #2b2a33; - --color-button-neutral-text: #fbfbfe; - --color-picture-base: #2b2a33; - --color-input-base: #42414d; - --color-input-border: #2b2a33; - --color-bg-suggested-tag: hsl(247, 10%, 18%); - --color-bg-suggested-tag-hover: hsl(247, 10%, 16%); - --color-suggested-tag: hsl(240, 60%, 99%); - --color-tag-add: hsl(240, 60%, 94%); - - .colormode-light { - --color-canvas: #ffffff; - --color-canvas-active: hsl(0, 0%, 90%); - --color-canvas-darker: hsl(0, 0%, 95%); - --color-loader: #42414d; - --color-text-primary: #15141a; - --color-text-secondary: #333; - --color-divider: var(--color-grey85); - --color-button-active: #42414d; - --color-button-active-text: #ffffff; - --color-button-neutral: #f0f0f4; - --color-button-neutral-text: #15141a; - --color-picture-base: #f0f0f4; - --color-input-base: #ffffff; - --color-input-border: var(--color-grey85); - --color-bg-suggested-tag: hsl(240, 15%, 95%); - --color-bg-suggested-tag-hover: hsl(240, 15%, 93%); - --color-suggested-tag: #15141a; - --color-tag-add: hsl(250, 13%, 15%); - } - } -} - -html { - font-size: 16px; - font-family: var(--font-sans-serif); -} - -body { - margin: 0px !important; - width: 400px; - height: 100%; - box-sizing: border-box; - background-color: var(--color-canvas); - color: var(--color-text-primary); -} - -svg { - shape-rendering: geometricPrecision; -} - -.icon { - width: 24px; - height: 24px; - margin-right: 0.625rem; -} - -hr { - background: var(--color-divider); - border: none; - height: 1px; - margin: 0.5rem 0; - display: block; -} - -button, -a.button { - font-size: 0.875rem; - font-weight: 400; - font-family: var(--font-sans-serif); - text-decoration: none; - background-color: var(--color-canvas); - border: 1px solid var(--color-divider); - color: var(--color-button-neutral-text); - border-radius: 0.25rem; - padding: 0.25rem 0.5rem; - display: flex; - align-items: center; - cursor: pointer; - - &:hover { - color: var(--color-button-active-text); - background-color: var(--color-button-active); - } -} - -label { - font-size: 0.8125rem; - display: block; - margin-bottom: 0.25rem; -} - -input, -textarea { - box-sizing: border-box; - padding: 0.5rem; - border-radius: 0.25rem; - border: 1px solid var(--color-input-border); - width: 100%; - max-width: 100%; - min-width: 100%; - min-height: 80px; - color: var(--color-text-primary); - background-color: var(--color-input-base); - &:focus-visible { - outline: none; - } -} - -input { - min-height: 24px; -} diff --git a/clients/extension/tsconfig.json b/clients/extension/tsconfig.json deleted file mode 100644 index 8f138e5de..000000000 --- a/clients/extension/tsconfig.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "compilerOptions": { - "allowJs": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "isolatedModules": true, - "jsx": "react-jsx", - "lib": ["dom", "dom.iterable", "esnext"], - "moduleResolution": "node", - "module": "esnext", - "noEmit": true, - "resolveJsonModule": true, - "strict": true, - "target": "esnext", - "verbatimModuleSyntax": true, - "useDefineForClassFields": true, - "skipLibCheck": true - }, - "include": ["./"], - "exclude": ["node_modules", "dist"] -} diff --git a/clients/extension/types/auth.ts b/clients/extension/types/auth.ts deleted file mode 100644 index 0142e534c..000000000 --- a/clients/extension/types/auth.ts +++ /dev/null @@ -1,21 +0,0 @@ -export interface ExtCookieAuth { - sess_user_id?: string - sess_exttok?: string -} - -export interface ExtAuth { - userId?: string - token?: string -} - -export interface V3AuthorizationResponse { - access_token: string - account: { - premium_status: string - } - username: string -} - -export interface JWTResponse { - jwt: string -} diff --git a/clients/extension/types/index.d.ts b/clients/extension/types/index.d.ts deleted file mode 100644 index 62a744396..000000000 --- a/clients/extension/types/index.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from './auth' -export * from './message' -export * from './item' -export * from './save' diff --git a/clients/extension/types/item.ts b/clients/extension/types/item.ts deleted file mode 100644 index f52bffbfe..000000000 --- a/clients/extension/types/item.ts +++ /dev/null @@ -1,30 +0,0 @@ -import type { Maybe, PendingItem, Tag, NoteEdge } from '@common/types/pocket' - -export interface ExtItem { - preview: ExtPreview - savedItem: ExtSavedItem -} - -export interface ExtPreview { - image: { cachedImages: { url: string; id: string }[] } - title: string - excerpt: string - domain: { name: string } - url: string - id: string - source: string - authors: { id: string; name: string }[] -} - -export interface ExtSavedItem { - suggestedTags: Tag[] - tags?: Tag[] - notes: { - edges: NoteEdge[] - } - item?: { - preview: ExtPreview - } -} - -export type ExtItemResponse = Maybe diff --git a/clients/extension/types/message.ts b/clients/extension/types/message.ts deleted file mode 100644 index c812d39ab..000000000 --- a/clients/extension/types/message.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { EXT_ACTIONS } from '../actions' - -import type { ExtAuth } from './auth' -import type { ExtItemResponse } from './item' -import type { ExtNote } from './note' -import type { ExtSave } from './save' - -export interface ExtMessage { - action: EXT_ACTIONS - item?: ExtItemResponse - auth?: ExtAuth - error?: string - saveData?: ExtSave - noteData?: ExtNote - noteId?: string -} diff --git a/clients/extension/types/note.ts b/clients/extension/types/note.ts deleted file mode 100644 index 7aa0c35cd..000000000 --- a/clients/extension/types/note.ts +++ /dev/null @@ -1,4 +0,0 @@ -export interface ExtNote { - docMarkdown: string - title?: string -} diff --git a/clients/extension/types/save.ts b/clients/extension/types/save.ts deleted file mode 100644 index 4bec25dea..000000000 --- a/clients/extension/types/save.ts +++ /dev/null @@ -1,6 +0,0 @@ -export interface ExtSave { - url?: string - title?: string - id?: number - note?: string -} diff --git a/clients/extension/utilities/error.ts b/clients/extension/utilities/error.ts deleted file mode 100644 index cdc0f5127..000000000 --- a/clients/extension/utilities/error.ts +++ /dev/null @@ -1,28 +0,0 @@ -interface ErrorWithMessage { - message: string -} - -function isErrorWithMessage(error: unknown): error is ErrorWithMessage { - return ( - typeof error === 'object' && - error !== null && - 'message' in error && - typeof (error as Record).message === 'string' - ) -} - -function toErrorWithMessage(maybeError: unknown): ErrorWithMessage { - if (isErrorWithMessage(maybeError)) return maybeError - - try { - return new Error(JSON.stringify(maybeError)) - } catch { - // fallback in case there's an error stringifying the maybeError - // like with circular references for example. - return new Error(String(maybeError)) - } -} - -export function getErrorMessage(error: unknown) { - return toErrorWithMessage(error).message -} diff --git a/clients/extension/utilities/is-system.ts b/clients/extension/utilities/is-system.ts deleted file mode 100644 index 46e6df048..000000000 --- a/clients/extension/utilities/is-system.ts +++ /dev/null @@ -1,11 +0,0 @@ -export function isSystemLink(link: string) { - return ( - link.startsWith('chrome://') || - link.startsWith('chrome-extension://') || - link.startsWith('chrome-search://') - ) -} - -export function isSystemPage(tab?: chrome.tabs.Tab) { - return tab && tab.active && tab.url && isSystemLink(tab.url) -} diff --git a/clients/extension/utilities/localization.ts b/clients/extension/utilities/localization.ts deleted file mode 100644 index ec60bb76a..000000000 --- a/clients/extension/utilities/localization.ts +++ /dev/null @@ -1,67 +0,0 @@ -import de from '../public/_locales/de/messages.json' -import en from '../public/_locales/en/messages.json' -import es from '../public/_locales/es/messages.json' -import es_419 from '../public/_locales/es_419/messages.json' -import fr from '../public/_locales/fr/messages.json' -import it from '../public/_locales/it/messages.json' -import ja from '../public/_locales/ja/messages.json' -import ko from '../public/_locales/ko/messages.json' -import nl from '../public/_locales/nl/messages.json' -import pl from '../public/_locales/pl/messages.json' -import pt_BR from '../public/_locales/pt_BR/messages.json' -import pt_PT from '../public/_locales/pt_PT/messages.json' -import ru from '../public/_locales/ru/messages.json' -import zh_CN from '../public/_locales/zh_CN/messages.json' -import zh_TW from '../public/_locales/zh_TW/messages.json' - -function getCurrentLanguageCode() { - let language: string = navigator.languages ? navigator.languages[0] : navigator.language - - language = typeof language !== 'undefined' ? language.toLowerCase() : 'en' - - if (language.startsWith('en')) return 'en' // English - if (language.startsWith('de')) return 'de' // German - if (language.startsWith('fr')) return 'fr' // French - if (language.startsWith('it')) return 'it' // Italian - if (language.startsWith('es_419')) return 'es_419' // Spanish (Latin America and Caribbean) - if (language.startsWith('es')) return 'es' // Spanish - if (language.startsWith('ja')) return 'ja' // Japanese - if (language.startsWith('ru')) return 'ru' // Russian - if (language.startsWith('ko')) return 'ko' // Korean - if (language.startsWith('nl')) return 'nl' // Dutch - if (language.startsWith('pl')) return 'pl' // Polish - if (language.startsWith('pt_BR')) return 'pt_BR' // Portuguese Brazil - if (language.startsWith('pt_PT')) return 'pt_PT' // Portuguese Portugal - if (language.startsWith('zh_CN')) return 'zh_CN' // Chinese Simplified - if (language.startsWith('zh_TW')) return 'zh_TW' // Chinese Traditional - return 'en' // Default is English -} - -function localizedStrings() { - const localizedCopy = { - de, - en, - es, - es_419, - fr, - it, - ja, - ko, - nl, - pl, - pt_BR, - pt_PT, - ru, - zh_CN, - zh_TW - } - - const currentLanguage = getCurrentLanguageCode() - return localizedCopy[currentLanguage] || localizedCopy.en -} - -const currentStrings: Record = localizedStrings() - -export function localize(key: string): string { - return currentStrings[key]?.message -} diff --git a/clients/extension/utilities/request.ts b/clients/extension/utilities/request.ts deleted file mode 100644 index 4d05cb48a..000000000 --- a/clients/extension/utilities/request.ts +++ /dev/null @@ -1,114 +0,0 @@ -//!! THIS FILE IS INCLUDED HERE DUE TO TRANSPILING ISSUE AT THE MOMENT -/** - * GraphQLRequestBody - * --- - * Define the structure of a GraphQL request body - * `variables` are optional and can be any shape you need. - */ -interface GraphQLRequestBody { - query: string - variables?: Record -} - -/** - * GraphQLError - * --- - * Define the structure of GraphQL errors to handle them gracefully. - */ -interface GraphQLError { - message: string - extensions?: Record -} - -/** - * GraphQLResponse - * --- - * Define the structure of a typical GraphQL response. It includes - * either data of type T or an array of GraphQLError objects. - */ -interface GraphQLResponse { - data?: T - errors?: GraphQLError[] -} - -const API_URL = 'https://client-api.getpocket.com/' - -// This just gives use better string literal handling with gql`` -export const gql = String.raw - -/** - * gqlRequest - * --- - * Create a generic request function that can handle any GraphQL query. - * It accepts a request body, an optional auth token, and extra headers. - * The function then returns the typed data (T). - */ -export async function gqlRequest( - client: string, - data: GraphQLRequestBody, - token?: string -): Promise { - // Build headers. If an auth token is provided, set the Authorization header. - // We also add some additional info for the backend team - const headers = { - 'apollographql-client-name': client, - 'Content-Type': 'application/graphql-response+json', - ...(token && { Authorization: `Bearer ${token}` }) - } - - // Send the POST request to GraphQL endpoint - const response = await fetch(API_URL, { - method: 'POST', - headers, - body: JSON.stringify(data) - }) - - // Error in the response itself means server is down or something - // or the request was somehow malformed - if (!response.ok) { - throw new GenericRequestError(`${response.status}: ${response.statusText}`) - } - - // Parse the JSON response, which should match the GraphQLResponse shape. - const json = (await response.json()) as GraphQLResponse - - // If GraphQL returned any errors, throw them. - if (json.errors && json.errors.length > 0) { - throw new GraphQLRequestError(`GraphQL error: ${json.errors.map((e) => e.message).join(', ')}`) - } - - // If GraphQL returns no `data` - if (!json.data) { - throw new GraphQLRequestError('No data returned from GraphQL request') - } - - return json.data -} - -/** - * Convenience function that sets web-client as the client, - */ -export async function pocketRequest(body: GraphQLRequestBody, token?: string): Promise { - return gqlRequest('web-client', body, token) -} - -/** - * Convenience function that sets web-client as the client, - */ -export async function extensionRequest(body: GraphQLRequestBody, token?: string): Promise { - return gqlRequest('web-extension', body, token) -} - -class GraphQLRequestError extends Error { - constructor(message?: string) { - super(message) - this.name = 'GenericRequestError' - } -} - -class GenericRequestError extends Error { - constructor(message?: string) { - super(message) - this.name = 'GenericRequestError' - } -} diff --git a/clients/extension/utilities/send-message.ts b/clients/extension/utilities/send-message.ts deleted file mode 100644 index bfbb2cedd..000000000 --- a/clients/extension/utilities/send-message.ts +++ /dev/null @@ -1,9 +0,0 @@ -import type { ExtMessage } from '../types' - -export function sendMessage(message: ExtMessage) { - void chrome.runtime.sendMessage(message) -} - -export function sendMessageToTab(tabId: number, message: ExtMessage) { - void chrome.tabs.sendMessage(tabId, message) -} diff --git a/clients/extension/utilities/storage.ts b/clients/extension/utilities/storage.ts deleted file mode 100644 index 9971a47df..000000000 --- a/clients/extension/utilities/storage.ts +++ /dev/null @@ -1,35 +0,0 @@ -/* Local Storage -–––––––––––––––––––––––––––––––––––––––––––––––––– */ -export function getSetting(key: string) { - return new Promise((resolve, reject) => { - chrome.storage.local.get([key], (result) => { - if (chrome.runtime.lastError) { - handleSettingError(chrome.runtime.lastError) - return reject( - new Error('Error when retrieving local settings. Please contact Pocket Support') - ) - } - resolve(result[key]) - }) - }) -} - -export function setSettings(values: Record) { - return new Promise((resolve, reject) => { - chrome.storage.local.set(values, () => { - if (chrome.runtime.lastError) { - handleSettingError(chrome.runtime.lastError) - return reject(new Error('Error when storing local settings. Please contact Pocket Support')) - } - resolve() - }) - }) -} - -export function clearSettings() { - void chrome.storage.local.clear() -} - -function handleSettingError(err: chrome.runtime.LastError) { - console.error(err) -} diff --git a/clients/scraper/index.ts b/clients/scraper/index.ts deleted file mode 100644 index c502fdac5..000000000 --- a/clients/scraper/index.ts +++ /dev/null @@ -1,143 +0,0 @@ -import express from 'express' -import dotenv from 'dotenv' -import ogScraper from 'open-graph-scraper' -import crypto from 'crypto' -import type { Item, ItemMedia } from '@common/types' -import { arrayToObject } from '@common/utilities/object-array' - -// Types -import type { Express, Request, Response } from 'express' -import type { SuccessResult } from 'open-graph-scraper' - -dotenv.config() - -const app: Express = express() -const port = process.env.PORT - -app.get('/', async (req: Request, res: Response) => { - const userAgent = - 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36' - - const youTubeShorts = [ - 'https://www.youtube.com/shorts/9XpQRWCipcA', - 'https://www.youtube.com/shorts/Lly_YLl8yG0', - 'https://www.youtube.com/shorts/GWMnGzshNm0', - 'https://www.youtube.com/shorts/KCMJOAFiThQ', - 'https://www.youtube.com/shorts/nuRUaWxgu2U', - 'https://www.youtube.com/shorts/TJhZoZvitbU', - 'https://www.youtube.com/shorts/eTv8nbfFA40' - ] - - const soundCloud = [ - 'https://soundcloud.com/johnsummit/shiver-by-john-summit-and-hayla', - 'https://soundcloud.com/anemoiarecordings/don-toliver-x-sheloveztre-give-it-up', - 'https://soundcloud.com/zedsdead/zeds-dead-x-flux-pavilion-x-deathbyromy-waves', - 'https://soundcloud.com/johnsummit/the-temper-trap-sweet-disposition-john-summit-silver-panda-remix', - 'https://soundcloud.com/johnsummit/daft-punk-x-john-summit-veridis-quo-x-human-live-bmo-stadium', - 'https://www.mixcloud.com/SuburbanArchitecture/suburban-architecture-dancefloor-heritage-volume-2-mixed-version/', - 'https://www.mixcloud.com/SyphonDnB/deep-liquid-drum-bass-rollers-82/' - ] - - const videos = [ - 'https://www.youtube.com/watch?v=SLQnU63I3IQ', - 'https://www.youtube.com/watch?v=djSKp_pwmOA', - 'https://www.twitch.tv/videos/2121294696', - 'https://www.youtube.com/watch?v=sBU8ejvW6fM', - 'https://www.dailymotion.com/video/x8wwjza', - 'https://www.dailymotion.com/video/x8i9u7k', - 'https://www.youtube.com/watch?v=lU_NKNZljoQ', - 'https://www.dailymotion.com/video/x8jeakq', - 'https://www.twitch.tv/videos/2123387770', - 'https://www.dailymotion.com/video/x8ipowa' - ] - - const micro = [ - 'https://twitter.com/Culture_Crit/status/1781034112133799970', - 'https://twitter.com/sciam/status/1780792206778847652', - 'https://twitter.com/MadHatterMommy/status/1781305103196270806', - 'https://twitter.com/SeffSaid/status/1781380994458886415', - 'https://twitter.com/WiseVersatile_/status/1781381358826201304' - ] - - const podcast = [ - 'https://open.spotify.com/episode/3uzhLUUKsZ67Bz73SULFfx', - 'https://open.spotify.com/episode/6Fg6L9A2xo8dKiwmPaEA05', - 'https://open.spotify.com/episode/1FOH40Zr5aFhhgQEWgTnR4' - ] - - const products = [ - 'https://www.amazon.com/dp/B0CY46GYMT', - 'https://www.amazon.com/Crocs-Clogs-Black-Unisex-Little/dp/B0BVF5TRBT' - ] - - const results = await Promise.all( - micro.map(async (url) => { - const data = await ogScraper({ - url, - fetchOptions: { headers: { 'user-agent': userAgent } } - }) - const { error, result, html } = data as SuccessResult - - const hash = crypto.createHash('sha256').update(url).digest('hex') - - if (error) return undefined - return { ...result, id: hash } - }) - ) - - const derivedItems = deriveFromOG(results as OpenGraphPropertiesWithId[]) - const itemsById = arrayToObject(derivedItems, 'id') - res.send(JSON.stringify({ results, itemsById })) -}) - -app.listen(port, () => { - console.log(`[server]: Server is running at http://localhost:${port}`) -}) - -export type OpenGraphPropertiesWithId = { - id: string -} & SuccessResult['result'] - -type ImageObject = { - height?: number - type?: string - url: string - width?: number - alt?: string -} -type VideoObject = { - height?: number - type?: string - url: string - width?: number -} -type OpenGraphImage = ImageObject | VideoObject | string - -export function deriveFromOG(ogItems: OpenGraphPropertiesWithId[]) { - const itemsById: Item[] = ogItems - .map( - (ogItem): Item => ({ - excerpt: '', - id: ogItem.id as string, - image: getCorrectMedia(ogItem.ogImage) || getCorrectMedia(ogItem.twitterImage), - video: getCorrectMedia(ogItem.ogVideo), - publisher: - ogItem.ogSiteName || - ogItem.twitterAppNameiPhone || - ogItem.twitterAppNameiPad || - ogItem.twitterAppNameGooglePlay || - '', - title: ogItem.ogTitle || ogItem.twitterTitle || '', - url: ogItem.ogUrl || ogItem.twitterUrl || ogItem.requestUrl || '' - }) - ) - .filter(Boolean) - return itemsById -} - -function getCorrectMedia(media: string | OpenGraphImage | OpenGraphImage[] | undefined) { - if (!media) return undefined - if (typeof media === 'string') return { url: 'media' } - - return Array.isArray(media) ? (media[0] as ItemMedia) : (media as ItemMedia) -} diff --git a/clients/scraper/package.json b/clients/scraper/package.json deleted file mode 100644 index b1ec66611..000000000 --- a/clients/scraper/package.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "@client/scraper", - "description": "", - "version": "1.0.0", - "author": "", - "dependencies": { - "@common/types": "workspace:*", - "@common/utilities": "workspace:*", - "@types/express": "5.0.0", - "@types/node": "24.10.2", - "dotenv": "16.4.7", - "express": "4.21.2", - "nodemon": "3.1.9", - "open-graph-scraper": "6.9.0", - "ts-node": "^10.9.2", - "typescript": "5.7.3" - }, - "keywords": [], - "license": "ISC", - "main": "index.js", - "scripts": { - "scraper": "nodemon index.ts" - } -} diff --git a/clients/scraper/tsconfig.json b/clients/scraper/tsconfig.json deleted file mode 100644 index e075f973c..000000000 --- a/clients/scraper/tsconfig.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "compilerOptions": { - /* Visit https://aka.ms/tsconfig to read more about this file */ - - /* Projects */ - // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ - // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ - // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ - // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ - // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ - // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ - - /* Language and Environment */ - "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ - // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ - // "jsx": "preserve", /* Specify what JSX code is generated. */ - // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ - // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ - // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ - // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ - // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ - // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ - // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ - // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ - // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ - - /* Modules */ - "module": "commonjs", /* Specify what module code is generated. */ - // "rootDir": "./", /* Specify the root folder within your source files. */ - // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ - // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ - // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ - // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ - // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ - // "types": [], /* Specify type package names to be included without being referenced in a source file. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ - // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ - // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ - // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ - // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ - // "resolveJsonModule": true, /* Enable importing .json files. */ - // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ - // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ - - /* JavaScript Support */ - // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ - // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ - // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ - - /* Emit */ - // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ - // "declarationMap": true, /* Create sourcemaps for d.ts files. */ - // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ - // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ - // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ - // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ - // "outDir": "./", /* Specify an output folder for all emitted files. */ - // "removeComments": true, /* Disable emitting comments. */ - // "noEmit": true, /* Disable emitting files from a compilation. */ - // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ - // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ - // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ - // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ - // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ - // "newLine": "crlf", /* Set the newline character for emitting files. */ - // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ - // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ - // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ - // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ - // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ - // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ - - /* Interop Constraints */ - // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ - // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ - // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ - "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ - // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ - "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ - - /* Type Checking */ - "strict": true, /* Enable all strict type-checking options. */ - // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ - // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ - // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ - // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ - // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ - // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ - // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ - // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ - // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ - // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ - // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ - // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ - // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ - // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ - // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ - // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ - // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ - // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ - - /* Completeness */ - // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ - "skipLibCheck": true /* Skip type checking all .d.ts files. */ - } -} diff --git a/clients/web/package.json b/clients/web/package.json index 0bde285b2..e4139409c 100644 --- a/clients/web/package.json +++ b/clients/web/package.json @@ -9,7 +9,6 @@ "@emotion/css": "11.13.5", "@emotion/react": "11.14.0", "@freestar/pubfig-adslot-react-component": "3.6.2", - "@mozilla-services/majc": "https://github.com/mozilla-services/majc#v0.1.7", "@n8tb1t/use-scroll-position": "2.0.3", "@popperjs/core": "2.11.8", "@sentry/integrations": "7.114.0", @@ -22,7 +21,6 @@ "@snowplow/browser-plugin-privacy-sandbox": "4.3.1", "@snowplow/browser-plugin-timezone": "4.3.1", "@snowplow/browser-tracker": "4.3.1", - "@storybook/react": "8.5.3", "@types/jest": "^29.5.14", "@ui/icons": "workspace:*", "@ui/styles": "workspace:*", @@ -78,7 +76,7 @@ "@testing-library/react": "16.2.0", "@testing-library/user-event": "14.6.1", "@types/node": "24.10.2", - "@types/react": "19.0.8", + "@types/react": "19.2.7", "@types/react-beautiful-dnd": "13.1.8", "graphql": "16.10.0", "jest": "29.7.0", diff --git a/clients/web/src/components/account/email/addresses.story.js b/clients/web/src/components/account/email/addresses.story.js deleted file mode 100644 index 45cc2074e..000000000 --- a/clients/web/src/components/account/email/addresses.story.js +++ /dev/null @@ -1,29 +0,0 @@ -import { EmailAddresses as EmailAddressesComponent } from './addresses' -import { accountStyles } from '../account' - -export default { - title: 'Components/EmailAddresses' -} - -const noop = () => {} -export const EmailAddresses = () => { - const aliases = { - 'thisistheevenlongestemail@wowwhyisthisolongImeanreallythisiscrazy.com': {}, - 'thelongestemailisevenlongerthattheotheremails@wowwhyisthisolongImeanreallythisiscrazy.com': {} - } - return ( -
- -
- ) -} diff --git a/clients/web/src/components/annotations/annotations.story.js b/clients/web/src/components/annotations/annotations.story.js deleted file mode 100644 index 26c16c774..000000000 --- a/clients/web/src/components/annotations/annotations.story.js +++ /dev/null @@ -1,69 +0,0 @@ -import { Rail } from 'components/rail/rail' -import { cardStyles, Quote, CreatedDate } from './annotations.card' -import { EmptyList } from './annotations.empty-list' -import { QuoteList } from './annotations.list' - -export default { - title: 'Article/Annotations' -} - -export const emptyListMessage = () => - -export const quoteCard = () => ( -
- - Although James Cromwell would get more screen time in George Miller’s talking pig tale than in - any of his previous films, he had only 171 words of dialogue. - - 2019-11-12 13:02:07 -
-) - -const annotations = [ - { - annotation_id: '3d9b0e41-7367-400d-87dd-b3a823a43577', - item_id: '791330381', - quote: - 'It is remarkable to think that with all these patterns each cell is only listening to its immediate neighbour.', - patch: - '@@ -3586,16 +3586,36 @@\n gates: %0A\n+%3Cpkt_tag_annotation%3E\n It is re\n@@ -3716,16 +3716,37 @@\n ighbour.\n+%3C/pkt_tag_annotation%3E\n %0AIf you \n', - version: '2', - created_at: '2020-10-07 17:07:06' - }, - { - annotation_id: 'bfff4b51-17db-4c27-bd89-3bad00ab0582', - item_id: '791330381', - quote: - 'When Conway came up with the Life rules, he was not sure if a pattern existed with a total number of live cells that kept on growing.', - patch: - '@@ -2623,16 +2623,36 @@\n eships.%0A\n+%3Cpkt_tag_annotation%3E\n When Con\n@@ -2776,16 +2776,37 @@\n growing.\n+%3C/pkt_tag_annotation%3E\n %0ABill Go\n', - version: '2', - created_at: '2020-10-07 15:58:55' - }, - { - annotation_id: 'e0a6ec44-374b-4fd8-98d9-3aa9e5e944e2', - item_id: '791330381', - quote: - 'We start with a pattern on the grid (generation 0) and we apply the rules simultaneously on all cells. ', - patch: - '@@ -1232,16 +1232,36 @@\n %0A \n+%3Cpkt_tag_annotation%3E\n We start\n@@ -1355,16 +1355,37 @@\n cells. \n+%3C/pkt_tag_annotation%3E\n This act\n', - version: '2', - created_at: '2019-11-12 13:02:07' - } -] - -export const quoteList = () => ( - - - -) - -export const quoteFullList = () => ( - - ??? - isPremium={false} - /> - -) diff --git a/clients/web/src/components/arrow-link/arrow-link.story.js b/clients/web/src/components/arrow-link/arrow-link.story.js deleted file mode 100644 index c36a1d306..000000000 --- a/clients/web/src/components/arrow-link/arrow-link.story.js +++ /dev/null @@ -1,13 +0,0 @@ -import { ArrowLink as Component } from './arrow-link' - -export default { - title: 'Components/ArrowLink', - component: Component -} - -const Template = (args) => Test Link - -export const ArrowLink = Template.bind({}) -ArrowLink.args = { - href: 'https://getpocket.com/explore' -} diff --git a/clients/web/src/components/avatar/avatar-button.story.js b/clients/web/src/components/avatar/avatar-button.story.js deleted file mode 100644 index cd452051a..000000000 --- a/clients/web/src/components/avatar/avatar-button.story.js +++ /dev/null @@ -1,23 +0,0 @@ -import { AvatarButton as Component } from './avatar-button' - -export default { - title: 'Components/Avatar', - component: Component, - argTypes: { - onClick: { action: 'clicked' }, - buttonCopy: { - type: 'string' - }, - children: { - table: { - disable: true - } - } - } -} - -const Template = (args) => -export const Avatar = Template.bind({}) -Avatar.args = { - src: 'https://i.pravatar.cc/300?img=50' -} diff --git a/clients/web/src/components/avatar/avatar.stories.js b/clients/web/src/components/avatar/avatar.stories.js deleted file mode 100644 index e6b7ec86e..000000000 --- a/clients/web/src/components/avatar/avatar.stories.js +++ /dev/null @@ -1,11 +0,0 @@ -import React from 'react' -import Avatar from './avatar' - -export default { - title: 'Components/Avatar', - component: Avatar -} - -export const defaultAvatar = () => - -export const imageAvatar = () => diff --git a/clients/web/src/components/banner/newsroom.story.tsx b/clients/web/src/components/banner/newsroom.story.tsx deleted file mode 100644 index 80c857ff7..000000000 --- a/clients/web/src/components/banner/newsroom.story.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import { BannerNewsroom as Component } from './newsroom' - -export default { - title: 'Components/Banner', - component: Component -} - -const Template = () => -export const BannerNewsroom = Template.bind({}) diff --git a/clients/web/src/components/call-out/call-out-brand.story.js b/clients/web/src/components/call-out/call-out-brand.story.js deleted file mode 100644 index 91bb600c0..000000000 --- a/clients/web/src/components/call-out/call-out-brand.story.js +++ /dev/null @@ -1,10 +0,0 @@ -import { CallOutBrand } from './call-out-brand' - -export default { - title: 'Messaging/Brand', - component: CallOutBrand -} - -export const Brand = () => { - return -} diff --git a/clients/web/src/components/call-out/call-out-build-home.story.js b/clients/web/src/components/call-out/call-out-build-home.story.js deleted file mode 100644 index d34d57734..000000000 --- a/clients/web/src/components/call-out/call-out-build-home.story.js +++ /dev/null @@ -1,10 +0,0 @@ -import { CallOutBuildHome } from './call-out-build-home' - -export default { - title: 'Messaging/Home', - component: CallOutBuildHome -} - -export const Home = () => { - return -} diff --git a/clients/web/src/components/call-out/call-out-collection.story.js b/clients/web/src/components/call-out/call-out-collection.story.js deleted file mode 100644 index f2df8b536..000000000 --- a/clients/web/src/components/call-out/call-out-collection.story.js +++ /dev/null @@ -1,10 +0,0 @@ -import { CallOutCollections } from './call-out-collections' - -export default { - title: 'Messaging/Collections', - component: CallOutCollections -} - -export const Collections = () => { - return -} diff --git a/clients/web/src/components/call-out/call-out-pocket-hits.story.js b/clients/web/src/components/call-out/call-out-pocket-hits.story.js deleted file mode 100644 index 027e57cbe..000000000 --- a/clients/web/src/components/call-out/call-out-pocket-hits.story.js +++ /dev/null @@ -1,18 +0,0 @@ -import { CallOutPocketHitsSignup } from './call-out-pocket-hits' - -export default { - title: 'Messaging/Pocket Hits', - component: CallOutPocketHitsSignup -} - -export const normal = () => { - return -} - -export const isProcessing = () => { - return -} - -export const isSuccessful = () => { - return -} diff --git a/clients/web/src/components/call-out/call-out-start-library.story.js b/clients/web/src/components/call-out/call-out-start-library.story.js deleted file mode 100644 index 7a8d28574..000000000 --- a/clients/web/src/components/call-out/call-out-start-library.story.js +++ /dev/null @@ -1,25 +0,0 @@ -import { CallOutStartLibrary } from './call-out-start-library' -import { CallOutStartLibraryExplore } from './call-out-start-library' - -import { css } from '@emotion/css' - -export default { - title: 'Messaging/Start Library', - component: CallOutStartLibrary -} - -const storyWrapper = css` - padding: 0 48px; -` - -export const standard = () => { - return ( -
- {}} /> -
- ) -} - -export const ExplorePosition = () => { - return {}} /> -} diff --git a/clients/web/src/components/call-out/newsroom.story.tsx b/clients/web/src/components/call-out/newsroom.story.tsx deleted file mode 100644 index 573344367..000000000 --- a/clients/web/src/components/call-out/newsroom.story.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import { CallOutNewsroom as Component } from './newsroom' -import { css } from '@emotion/css' - -export default { - title: 'Components/CallOut', - component: Component -} - -const templateContainerStyle = css` - box-sizing: content-box; - margin: 0px auto; - max-width: 1128px; - padding: 2.5rem; - - .main { - display: grid; - align-items: start; - justify-content: space-between; - grid-column-gap: 1.5rem; - grid-row-gap: 1.5rem; - grid-template-columns: repeat(12, 1fr); - grid-auto-flow: dense; - position: unset; - } -` -const Template = () => ( -
-
- -
-
-) -export const NewsroomCallOut = Template.bind({}) diff --git a/clients/web/src/components/chyron/chyron.stories.js b/clients/web/src/components/chyron/chyron.stories.js deleted file mode 100644 index a4026a0b8..000000000 --- a/clients/web/src/components/chyron/chyron.stories.js +++ /dev/null @@ -1,106 +0,0 @@ -import React, { Fragment } from 'react' -import { Chyron } from './chyron' -import { ScrollChyron } from './chyron-scroll' -import { ContentParsed } from 'components/content-parsed/content-parsed' -import { articleContent } from 'mock/article' -import { css } from '@emotion/css' - -export default { - title: 'Article/Chyron', - component: Chyron -} - -const ChildContainer = css` - background-color: rgba(214, 80, 118, 0.5); - border: solid 1px rgba(214, 80, 118, 1); - padding: 2em; -` - -const SimpleChild = ({ dismissChyron, completeChyron }) => ( -
- -

CTA

- -
-) - -const resetLocalStorage = (instanceId) => { - const chyronId = `chyron-${instanceId}` - const chyronDismissalDate = `chyron-dismissed-${instanceId}` - - localStorage.removeItem(chyronId) - localStorage.removeItem(chyronDismissalDate) - - // reload page - document.location.reload() - return false -} - -const DevReset = css` - position: absolute; - top: 0; - left: 0; - z-index: 1; -` - -const INSTANCE_ID = 'storybook-dev' - -export const normal = () => ( - - - - - - - -) - -export const dismissed = () => ( - - - - - - - -) - -export const succeeded = () => ( - - - - - - - -) - -export const scrollChryron = () => ( - - - - - - - -) - -export const scrollChryronSuppressed = () => ( - - - - - - - -) diff --git a/clients/web/src/components/content-author/author-bio.story.js b/clients/web/src/components/content-author/author-bio.story.js deleted file mode 100644 index 410262754..000000000 --- a/clients/web/src/components/content-author/author-bio.story.js +++ /dev/null @@ -1,54 +0,0 @@ -import { AuthorBio as Component } from './author-bio' -const mockAuthors = { - 'Aric Jenkins': { - name: 'Aric Jenkins', - bio: '[Aric Jenkins](https://twitter.com/aricwithan_a) is a staff writer at Fortune magazine, where he has covered transportation and infrastructure and edits the [raceAhead newsletter](https://fortune.com/newsletter/raceahead) on culture and diversity in corporate America. In late 2019, his [magazine feature](https://fortune.com/longform/airbnb-deaths-fraud-safety-experiences-ipo-2020/) examined Airbnb and its struggles expanding into cities and new businesses. [His writing](https://aricjenkins.com/) has appeared in the *New York Times*, *Time*, *Newsweek*, and more. Aric lives in Brooklyn, New York.', - imageUrl: - 'https://s3.amazonaws.com/pocket-collectionapi-prod-images/1807a4ff-7b45-42a1-9e7c-5b2b08339c9c.jpeg' - }, - 'Simran Jeet Singh': { - name: 'Simran Jeet Singh', - bio: 'Simran Jeet Singh loves sports and signed up for his first marathon after being inspired by Fauja Singh—and like Fauja, he hasn`t stopped running since. Simran is an activist, writer, and scholar who believes deeply in the divine goodness of all people. He was born and raised in San Antonio, Texas, and now lives in New York City with his wife and two daughters.', - imageUrl: - 'https://s3.amazonaws.com/pocket-collectionapi-prod-images/a8a9a5be-5c7e-4c65-9752-533e90b605b3.jpeg' - }, - 'Alex Dalenberg': { - name: 'Alex Dalenberg', - bio: 'Affogato edison bulb lo-fi cronut. Direct trade photo booth keffiyeh skateboard 90s locavore YOLO iPhone craft beer sustainable echo park la croix fanny pack beard. Kale chips mustache williamsburg keffiyeh chartreuse keytar live-edge photo booth. Activated charcoal yr neutra cred. Chambray leggings yr ethical stumptown narwhal vice shabby chic. Mumblecore bitters thundercats pinterest, synth bushwick ugh photo booth hashtag chartreuse ennui before they sold out normcore four dollar toast gastropub. Godard cloud bread vice, ramps PBR&B hell of selfies 8-bit adaptogen keffiyeh chia woke knausgaard vegan synth.', - imageUrl: '' - }, - 'Pocket Editors (No Bio)': { - name: 'Pocket Editors', - bio: '', - imageUrl: '' - } -} - -const authorKeys = Object.keys(mockAuthors) - -export default { - title: 'Article/AuthorBio', - component: Component, - argTypes: { - selectedAuthor: { - description: 'Select an Author to display', - options: authorKeys, - control: { - type: 'select' - } - } - } -} - -const Template = (args) => { - const { selectedAuthor, ...rest } = args - const authorData = mockAuthors[selectedAuthor] - const mixedArgs = { ...authorData, ...rest } - - return -} - -export const AuthorBio = Template.bind({}) -AuthorBio.args = { - selectedAuthor: 'Aric Jenkins' -} diff --git a/clients/web/src/components/content-author/author-byline.story.js b/clients/web/src/components/content-author/author-byline.story.js deleted file mode 100644 index 71e23b6ac..000000000 --- a/clients/web/src/components/content-author/author-byline.story.js +++ /dev/null @@ -1,35 +0,0 @@ -import { AuthorByline as Component } from './author-byline' - -import { article, publisher } from 'mocks/_data/article' -const authorNames = article.photosAndCaptions.authorNames -const { url, name, showAuthors } = publisher.theVerge - -export default { - title: 'Article/AuthorByline', - component: Component -} - -export const singleAuthor = () => { - return ( - - ) -} - -export const twoAuthors = () => { - return ( - - ) -} - -export const multipleAuthors = () => { - return -} - -export const noAuthors = () => { - return -} diff --git a/clients/web/src/components/content-cta/getpocket-cta.story.js b/clients/web/src/components/content-cta/getpocket-cta.story.js deleted file mode 100644 index 937d87580..000000000 --- a/clients/web/src/components/content-cta/getpocket-cta.story.js +++ /dev/null @@ -1,10 +0,0 @@ -import { GetPocketCTA as Component } from './getpocket-cta' - -export default { - title: 'Article/GetPocketCTA', - component: Component -} - -export const GetPocketCTA = () => { - return -} diff --git a/clients/web/src/components/content-headline/parsed-headline.story.js b/clients/web/src/components/content-headline/parsed-headline.story.js deleted file mode 100644 index 0c675cacc..000000000 --- a/clients/web/src/components/content-headline/parsed-headline.story.js +++ /dev/null @@ -1,13 +0,0 @@ -import { ParsedHeadline as Component } from './parsed-headline' - -import { article } from 'mocks/_data/article' -const { title, description } = article.photosAndCaptions - -export default { - title: 'Article/ParsedHeadline', - component: Component -} - -export const ParsedHeadline = () => { - return -} diff --git a/clients/web/src/components/content-headline/pocket-worthy.story.js b/clients/web/src/components/content-headline/pocket-worthy.story.js deleted file mode 100644 index 087f59a48..000000000 --- a/clients/web/src/components/content-headline/pocket-worthy.story.js +++ /dev/null @@ -1,10 +0,0 @@ -import { PocketWorthy as Component } from './pocket-worthy' - -export default { - title: 'Article/PocketWorthy', - component: Component -} - -export const PocketWorthy = () => { - return -} diff --git a/clients/web/src/components/content-parsed/content-parsed.story.js b/clients/web/src/components/content-parsed/content-parsed.story.js deleted file mode 100644 index b0d970f99..000000000 --- a/clients/web/src/components/content-parsed/content-parsed.story.js +++ /dev/null @@ -1,44 +0,0 @@ -import { ContentParsed } from './content-parsed' - -import { articleContent } from 'mocks/_data/article' - -export default { - title: 'Article/ContentParsed', - component: ContentParsed -} - -export const alignedImages = () => { - return -} - -export const orderedList = () => { - return -} - -export const listWithChildElements = () => { - return -} - -export const photosAndCaptions = () => { - return -} - -export const quotes = () => { - return -} - -export const blockquote = () => { - return -} - -export const media = () => { - return -} - -export const largeImages = () => { - return -} - -export const aspectRatios = () => { - return -} diff --git a/clients/web/src/components/content-partner/partner.story.js b/clients/web/src/components/content-partner/partner.story.js deleted file mode 100644 index 689739150..000000000 --- a/clients/web/src/components/content-partner/partner.story.js +++ /dev/null @@ -1,26 +0,0 @@ -import { Partner as Component } from './partner' - -export default { - title: 'Article/Partnership Info', - component: Component -} - -const partnerInfo = { - name: 'Mozilla', - url: 'http://www.mozilla.org', - imageUrl: 'http://placekitten.com/150/150', - type: 'PARTNERED' -} - -const sponsorInfo = { - ...partnerInfo, - type: 'SPONSORED' -} - -export const partner = () => { - return -} - -export const sponsor = () => { - return -} diff --git a/clients/web/src/components/content-publisher/publisher-attribution.story.js b/clients/web/src/components/content-publisher/publisher-attribution.story.js deleted file mode 100644 index 15d6e8eda..000000000 --- a/clients/web/src/components/content-publisher/publisher-attribution.story.js +++ /dev/null @@ -1,21 +0,0 @@ -import { PublisherAttribution as Component } from './publisher-attribution' - -import { publisher, article } from 'mocks/_data/article' -const { publishedAt } = article.photosAndCaptions - -export default { - title: 'Article/PublisherAttribution', - component: Component -} - -export const normal = () => { - return -} - -export const noArticleCta = () => { - return -} - -export const noPublisher = () => { - return -} diff --git a/clients/web/src/components/content-recs/publisher-recs.story.js b/clients/web/src/components/content-recs/publisher-recs.story.js deleted file mode 100644 index 6d9678e55..000000000 --- a/clients/web/src/components/content-recs/publisher-recs.story.js +++ /dev/null @@ -1,26 +0,0 @@ -import { PublisherRecs } from './publisher-recs' -import { publisher, publisherRecommendations as publisherRecs } from 'mocks/_data/article' - -export default { - title: 'Recommendations/Publisher', - component: PublisherRecs -} - -export const normal = () => { - return ( - - ) -} - -export const noPublisherLogo = () => { - return ( - - ) -} - -export const noRecs = () => { - return -} diff --git a/clients/web/src/components/content-saving/save-article.story.js b/clients/web/src/components/content-saving/save-article.story.js deleted file mode 100644 index 01408ad9f..000000000 --- a/clients/web/src/components/content-saving/save-article.story.js +++ /dev/null @@ -1,13 +0,0 @@ -import { SaveArticleTop, SaveArticleBottom } from './save-article' - -export default { - title: 'Article/SaveArticle' -} - -export const Top = () => { - return -} - -export const Bottom = () => { - return -} diff --git a/clients/web/src/components/content-saving/save-list.story.js b/clients/web/src/components/content-saving/save-list.story.js deleted file mode 100644 index 5ba7f6928..000000000 --- a/clients/web/src/components/content-saving/save-list.story.js +++ /dev/null @@ -1,13 +0,0 @@ -import { SaveListButton } from './save-list' - -export default { - title: 'Article/SaveList' -} - -export const LoggedIn = () => { - return -} - -export const LoggedOut = () => { - return -} diff --git a/clients/web/src/components/dev-tools/dev-tools.story.js b/clients/web/src/components/dev-tools/dev-tools.story.js deleted file mode 100644 index 78e9484ad..000000000 --- a/clients/web/src/components/dev-tools/dev-tools.story.js +++ /dev/null @@ -1,126 +0,0 @@ -import { sectionStyles } from './tool-styles' -import { LinkCopyIcon } from '@ui/icons/LinkCopyIcon' - -export default { - title: 'Dev/Tools' -} - -const features = { - 'lab.braze': { - assigned: false, - active: false, - variant: null, - test: 'temp.web.client.lab.braze', - payload: null, - name: 'lab.braze' - }, - 'lab.listen': { - assigned: false, - active: false, - variant: null, - test: 'temp.web.client.lab.listen', - payload: null, - name: 'lab.listen' - }, - 'api.next': { - assigned: false, - active: false, - variant: null, - test: 'temp.web.client.api.next', - payload: null, - name: 'api.next' - }, - lab: { - assigned: false, - active: false, - variant: null, - test: 'temp.web.client.lab', - payload: null, - name: 'lab' - }, - flagsReady: true -} -const featureList = Object.keys(features) - -export const Tools = () => { - const onboardingReset = () => {} - const wipeBrazeData = () => {} - const requestPush = () => {} - const toggleDevMode = () => {} - const links = [{ src: '#', title: 'superawesome', description: 'A superawesome feature' }] - - return ( - <> -
-
Account Resets
-
-
Reset Onboarding
-
Start onboarding from the start
-
-
- -
-
-
Reset Braze
-
Wipes data and starts new session
-
- -
-
Push notifications
-
You’re subscribed! 🎉
-
- -
-
- Push notifications are currently blocked. -
- Please update your settings -
-
- -
-
Push notifications
-
Allows push notifications from Braze
-
-
- -
-
Links in progress
- {links.map((link) => ( - -
{link.title}
-
{link.description}
-
- ))} -
- -
-
Feature Flags
-
- {featureList.length - ? featureList.map((feature) => ) - : null} -
-
-
- from Home -
-
- from Saves -
-
-
- - ) -} - -const Feature = ({ feature }) => { - const handleChange = () => {} - const featureAssigned = features[feature].assigned - return ( -
- - -
- ) -} diff --git a/clients/web/src/components/display-settings/display-settings.story.js b/clients/web/src/components/display-settings/display-settings.story.js deleted file mode 100644 index b6591c2f4..000000000 --- a/clients/web/src/components/display-settings/display-settings.story.js +++ /dev/null @@ -1,39 +0,0 @@ -import { DisplaySettings } from './display-settings' -import { useState } from 'react' - -export default { - title: 'Article/DisplaySettings' -} - -const DisplaySettingsWrapper = ({ isPremium, forceShow }) => { - const [fontFamily, setFontFamily] = useState('blanco') - const [fontSize, setFontSize] = useState(4) - const [lineHeight, setLineHeight] = useState(4) - const [columnWidth, setColumnWidth] = useState(4) - - return ( -
- -
- ) -} - -export const displaySettings = () => - -export const displaySettingsPremium = () => ( - -) - -export const fullExperience = () => diff --git a/clients/web/src/components/drawer/drawer.story.js b/clients/web/src/components/drawer/drawer.story.js deleted file mode 100644 index 4a3de0918..000000000 --- a/clients/web/src/components/drawer/drawer.story.js +++ /dev/null @@ -1,14 +0,0 @@ -import { Drawer as Component } from './drawer' - -export default { - title: 'Components/Drawer', - component: Component -} - -export const Drawer = () => { - return ( - {}} appRootSelector="#root"> - Behold the content - - ) -} diff --git a/clients/web/src/components/email-signup-form/email-signup-form.story.js b/clients/web/src/components/email-signup-form/email-signup-form.story.js deleted file mode 100644 index 88bd32aec..000000000 --- a/clients/web/src/components/email-signup-form/email-signup-form.story.js +++ /dev/null @@ -1,10 +0,0 @@ -import Component from './email-signup-form' - -export default { - title: 'Forms/Email Signup Form', - component: Component -} - -export const EmailSignupForm = () => { - return -} diff --git a/clients/web/src/components/global-footer/global-footer.story.js b/clients/web/src/components/global-footer/global-footer.story.js deleted file mode 100644 index ddcecc1a0..000000000 --- a/clients/web/src/components/global-footer/global-footer.story.js +++ /dev/null @@ -1,10 +0,0 @@ -import { GlobalFooter as Component } from './global-footer' - -export default { - title: 'GlobalNav/GlobalFooter', - component: Component -} - -export const GlobalFooter = () => { - return -} diff --git a/clients/web/src/components/global-nav/account/global-nav-account.stories.js b/clients/web/src/components/global-nav/account/global-nav-account.stories.js deleted file mode 100644 index dd144676f..000000000 --- a/clients/web/src/components/global-nav/account/global-nav-account.stories.js +++ /dev/null @@ -1,23 +0,0 @@ -import React from 'react' - -import GlobalNavAccount from './global-nav-account' - -export default { - title: 'GlobalNav/GlobalNavAccount', - component: GlobalNavAccount -} - -const baseProps = { - appRootSelector: '#root', - accountName: 'Fluffers' -} - -export const loggedOutUser = () => { - return -} - -export const loggedInUser = () => - -export const loggedInPremiumUser = () => ( - -) diff --git a/clients/web/src/components/global-nav/global-nav.story.js b/clients/web/src/components/global-nav/global-nav.story.js deleted file mode 100644 index 68f762a7b..000000000 --- a/clients/web/src/components/global-nav/global-nav.story.js +++ /dev/null @@ -1,47 +0,0 @@ -import React from 'react' - -import { SearchIcon } from '@ui/icons/SearchIcon' -import { AddIcon } from '@ui/icons/AddIcon' -import { EditIcon } from '@ui/icons/EditIcon' -import { NotificationIcon } from '@ui/icons/NotificationIcon' -import GlobalNav from './global-nav' - -export default { - title: 'GlobalNav/TopNav', - component: GlobalNav -} - -const baseProps = { - selectedLink: 'discover', - appRootSelector: '#root', - accountName: 'Fluffers', - flagsReady: true -} - -export const standard = () => -export const loggedInUser = () => -export const premiumUser = () => ( - -) -export const withTools = () => ( - }, - { name: 'add-item', label: 'Save a URL', icon: }, - { name: 'bulk-edit', label: 'Bulk Edit', icon: }, - { - name: 'notifications', - label: 'View Activity', - icon: - } - ]} - /> -) -export const childrenSpecified = () => ( - -

show this text instead of the standard nav kit please

-
-) diff --git a/clients/web/src/components/global-nav/links/global-nav-links.stories.js b/clients/web/src/components/global-nav/links/global-nav-links.stories.js deleted file mode 100644 index 463cb7daa..000000000 --- a/clients/web/src/components/global-nav/links/global-nav-links.stories.js +++ /dev/null @@ -1,9 +0,0 @@ -import React from 'react' -import GlobalNavLinks from './global-nav-links' - -export default { - title: 'GlobalNav/GlobalNavLinks', - component: GlobalNavLinks -} - -export const standard = () => diff --git a/clients/web/src/components/global-nav/mobile/global-nav-mobile-menu.stories.js b/clients/web/src/components/global-nav/mobile/global-nav-mobile-menu.stories.js deleted file mode 100644 index c3eba70ae..000000000 --- a/clients/web/src/components/global-nav/mobile/global-nav-mobile-menu.stories.js +++ /dev/null @@ -1,47 +0,0 @@ -import React from 'react' -import GlobalNavMobileMenu from './global-nav-mobile-menu' -import { DiscoverIcon } from '@ui/icons/DiscoverIcon' -import { ListViewIcon } from '@ui/icons/ListViewIcon' - -const baseProps = { - appRootSelector: '#root', - links: [ - { - name: 'discover', - id: 'global-nav-discover-link', - label: 'Discover', - url: 'https://getpocket.com/explore', - icon: - }, - { - name: 'saves', - id: 'global-nav-saves-link', - label: 'Saves', - url: 'https://getpocket.com/saves', - icon: - }, - { - name: 'disabled-link', - id: 'disabled-link', - label: 'Disabled Link', - url: 'https://getpocket.com/saves', - isDisabled: true - }, - { - name: 'no-icon', - id: 'no-icon', - label: 'No Icon', - url: 'https://getpocket.com/saves' - } - ] -} - -export default { - title: 'GlobalNav/GlobalNavMobileMenu', - component: GlobalNavMobileMenu -} - -export const standard = () => -export const premiumNudge = () => ( - -) diff --git a/clients/web/src/components/global-nav/tools/global-nav-tools.stories.js b/clients/web/src/components/global-nav/tools/global-nav-tools.stories.js deleted file mode 100644 index 017fe4574..000000000 --- a/clients/web/src/components/global-nav/tools/global-nav-tools.stories.js +++ /dev/null @@ -1,27 +0,0 @@ -import React from 'react' - -import GlobalNavTools from './global-nav-tools' -import { SearchIcon } from '@ui/icons/SearchIcon' -import { AddIcon } from '@ui/icons/AddIcon' -import { EditIcon } from '@ui/icons/EditIcon' -import { NotificationIcon } from '@ui/icons/NotificationIcon' - -export default { - title: 'GlobalNav/GlobalNavTools', - component: GlobalNavTools -} - -export const standard = () => ( - }, - { name: 'add-item', label: 'Save a URL', icon: }, - { name: 'bulk-edit', label: 'Bulk Edit', icon: }, - { - name: 'notifications', - label: 'View Activity', - icon: - } - ]} - /> -) diff --git a/clients/web/src/components/global-nav/tools/search/global-nav-search.stories.js b/clients/web/src/components/global-nav/tools/search/global-nav-search.stories.js deleted file mode 100644 index c55929c63..000000000 --- a/clients/web/src/components/global-nav/tools/search/global-nav-search.stories.js +++ /dev/null @@ -1,15 +0,0 @@ -import React from 'react' -import GlobalNavSearch from './global-nav-search' - -export default { - title: 'GlobalNav/GlobalNavSearch', - component: GlobalNavSearch -} - -const baseProps = { - onSubmit: () => {}, - onClose: () => {} -} - -export const globalNavSearch = () => -export const globalNavSearchNoCloseIcon = () => diff --git a/clients/web/src/components/item-actions/item-actions.story.js b/clients/web/src/components/item-actions/item-actions.story.js deleted file mode 100644 index 2c4fdd6c5..000000000 --- a/clients/web/src/components/item-actions/item-actions.story.js +++ /dev/null @@ -1,118 +0,0 @@ -import { ItemActions } from 'components/item-actions/inline' -import { IosShareIcon } from '@ui/icons/IosShareIcon' -import { DeleteIcon } from '@ui/icons/DeleteIcon' -import { ArchiveIcon } from '@ui/icons/ArchiveIcon' -import { FavoriteIcon } from '@ui/icons/FavoriteIcon' -import { TagIcon } from '@ui/icons/TagIcon' -import { ReportIcon } from '@ui/icons/ReportIcon' -import { RefreshIcon } from '@ui/icons/RefreshIcon' -import { itemActionStyle } from 'components/item-actions/base' -import { SaveToPocket } from 'components/item-actions/save-to-pocket' -import { OverflowAction } from 'components/item-actions/overflow' -import { ShowSimilar } from 'components/item-actions/show-similar' - -const noop = function () { - /** noop */ -} -export const Saves = ({ id }) => ( - , onClick: noop }, - { - key: `favorite-${id}`, - label: 'Favorite', - icon: , - onClick: noop - }, - { - key: `tag-${id}`, - label: 'Tag', - icon: , - onClick: noop - }, - { - key: `share-${id}`, - label: 'Share', - icon: , - onClick: noop - }, - { - key: `delete-${id}`, - label: 'Delete', - icon: , - onClick: noop - }, - { - key: `refresh-${id}`, - label: 'Refresh', - icon: , - onClick: noop - } - ]} - /> -) - -export const Recommendation = ({ id = 1 }) => { - return ( -
- - - , - onClick: noop - } - ]} - /> -
- ) -} - -export const Home = ({ id = 1 }) => { - return ( -
- -
- ) -} - -export const Similar = () => { - return ( -
- -
- ) -} - -export default { - title: 'Card/Card Actions', - component: ItemActions, - decorators: [ - (Story) => ( -
- -
- ) - ] -} diff --git a/clients/web/src/components/item-actions/save-to-pocket.story.js b/clients/web/src/components/item-actions/save-to-pocket.story.js deleted file mode 100644 index 0b556bea5..000000000 --- a/clients/web/src/components/item-actions/save-to-pocket.story.js +++ /dev/null @@ -1,43 +0,0 @@ -import { SaveToPocket } from './save-to-pocket' -import { useEffect, useState } from 'react' -import { css } from '@emotion/css' - -const styles = css` - font-family: sans-serif; -` - -export default { - title: 'Components/SaveToPocket', - component: SaveToPocket -} - -export const LoggedOut = () => { - return ( -
- -
- ) -} - -export const LoggedIn = () => { - const [saveStatus, setSaveStatus] = useState('unsaved') - let timer - - useEffect(() => { - return () => clearTimeout(timer) - }, [timer]) - - const startTimer = () => { - setSaveStatus('saving') - - timer = setTimeout(() => { - setSaveStatus('saved') - }, 1000) - } - - return ( -
- -
- ) -} diff --git a/clients/web/src/components/item/item.signaled.story.js b/clients/web/src/components/item/item.signaled.story.js deleted file mode 100644 index 50ad4a151..000000000 --- a/clients/web/src/components/item/item.signaled.story.js +++ /dev/null @@ -1,162 +0,0 @@ -import { ItemSignaled as ItemComponent } from './item.signaled' -import savesResponse from 'mocks/savedItems.json' -import { topics } from 'mocks/_data/article' -import { deriveListItem } from 'common/api/derivers/item' -import { arrayToObject } from 'common/utilities/object-array/object-array' -import { css, cx } from '@emotion/css' -import { SavedActions } from './actions/saved' -import { TransitionalActions } from './actions/transitional' -import { SignaledActions } from './actions/signaled' - -const savesItems = Object.values(savesResponse.edges).map((item) => { - const derivedItem = deriveListItem(item) - derivedItem['storyName'] = item.storybookContext - return derivedItem -}) - -const itemsToDisplay = arrayToObject([...savesItems], 'storyName') - -const gridContainer = css` - display: grid; - grid-template-columns: repeat(12, 1fr); - .column6 { - grid-column: span 6; - } - .column5 { - grid-column: span 5; - } - .column4 { - grid-column: span 4; - } - .column3 { - grid-column: span 3; - } - .column2 { - grid-column: span 2; - } -` - -export default { - title: 'Item/Signaled', - component: ItemComponent, - decorators: [ - (Story) => ( -
- -
- ) - ], - argTypes: { - cardSpan: { - control: { type: 'range', min: 2, max: 6, step: 1 } - }, - itemToDisplay: { - control: { type: 'select' }, - options: Object.keys(itemsToDisplay) - }, - Actions: { - control: { type: 'inline-radio' }, - options: ['discovery', 'saved', 'signaled'], - mapping: { - saved: SavedActions, - discovery: TransitionalActions, - signaled: SignaledActions - } - }, - topicName: { - control: { type: 'select' }, - options: Object.keys(topics), - if: { - arg: 'showTopic' - } - } - } -} - -export const Signaled = (args) => { - const itemToDisplay = args.itemToDisplay - const item = itemsToDisplay[itemToDisplay] - - if (!item) return
No card to display
- - const { - itemId, - url, - tags, - title, - authors, - publisher, - excerpt, - timeToRead, - isSyndicated, - isUserList, - isInternalItem, - onItemInView = () => {}, - onReport = () => {}, - publisherLogo, - fromPartner, - clamp, - topic - } = item - - const getShownImage = () => { - if (item?.noImage) return '' - if (args.useHeroImage) return item?.heroImage || item?.thumbnail - return item?.thumbnail - } - const itemImage = getShownImage() - - const cardClassnames = cx( - args.className, - `column${args.cardSpan}`, - args.sideBySide && 'side-by-side' - ) - - return ( - - ) -} - -Signaled.args = { - cardSpan: 3, - itemToDisplay: savesItems[0].storyName, - Actions: 'signaled', - saveStatus: 'unsaved', - isSyndicated: false, - isUserList: false, - isFavorite: false, - isArchive: false, - isPremium: false, - isInternalItem: false, - fromPartner: true, // This is so we can supersede this with the selector - clamp: false, - showExcerpt: true, - partnerType: false, - sideBySide: false, - showTopic: true, - topicName: 'Technology', - tags: 'none' -} diff --git a/clients/web/src/components/item/item.story.js b/clients/web/src/components/item/item.story.js deleted file mode 100644 index c97e428d3..000000000 --- a/clients/web/src/components/item/item.story.js +++ /dev/null @@ -1,216 +0,0 @@ -import { Item as ItemComponent } from './item' -import savesResponse from 'mocks/savedItems.json' -import { topics } from 'mocks/_data/article' -import { deriveListItem } from 'common/api/derivers/item' -import { arrayToObject } from 'common/utilities/object-array/object-array' -import { css, cx } from '@emotion/css' -import { SavedActions } from './actions/saved' -import { TransitionalActions } from './actions/transitional' -import { SignalActions } from './actions/signaled' - -const savesItems = Object.values(savesResponse.edges).map((item) => { - const derivedItem = deriveListItem(item) - derivedItem['storyName'] = item.storybookContext - return derivedItem -}) - -const itemsToDisplay = arrayToObject([...savesItems], 'storyName') - -const gridContainer = css` - display: grid; - grid-template-columns: repeat(12, 1fr); - .column6 { - grid-column: span 6; - } - .column5 { - grid-column: span 5; - } - .column4 { - grid-column: span 4; - } - .column3 { - grid-column: span 3; - } - .column2 { - grid-column: span 2; - } -` - -export default { - title: 'Item/Item', - component: Item, - decorators: [ - (Story) => ( -
- -
- ) - ], - argTypes: { - cardSpan: { - control: { type: 'range', min: 2, max: 6, step: 1 } - }, - itemToDisplay: { - control: { - type: 'select' - }, - options: Object.keys(itemsToDisplay) - }, - saveStatus: { - control: { - type: 'inline-radio', - options: ['saved', 'unsaved'] - } - }, - tags: { - control: { - type: 'inline-radio' - }, - options: ['none', 'one', 'a few', 'ridiculous'], - mapping: { - none: [], - one: [{ name: 'i am a tag' }], - 'a few': [{ name: 'philosophy' }, { name: 'science' }], - ridiculous: [ - { name: 'things' }, - { name: 'stuff' }, - { name: 'whatnot' }, - { name: 'thing a ma bobs' }, - { name: 'such organize' }, - { name: 'much wow' } - ] - } - }, - Actions: { - control: { - type: 'inline-radio' - }, - options: ['discovery', 'saved', 'signaled'], - mapping: { - saved: SavedActions, - discovery: TransitionalActions, - signaled: SignalActions - } - }, - partnerType: { - control: { - type: 'inline-radio' - }, - options: [false, 'PARTNERED', 'SPONSORED'] - }, - topicName: { - control: { type: 'select' }, - options: Object.keys(topics), - if: { - arg: 'showTopic' - } - }, - itemId: { table: { disable: true } }, - title: { table: { disable: true } }, - publisher: { table: { disable: true } }, - timeToRead: { table: { disable: true } }, - excerpt: { table: { disable: true } }, - hiddenActions: { table: { disable: true } }, - bulkSelected: { table: { disable: true } }, - authors: { table: { disable: true } }, - fromPartner: { table: { disable: true } }, - itemImage: { table: { disable: true } }, - isUserList: { table: { disable: false } }, - className: { table: { disable: false }, control: 'text' }, - position: { table: { disable: true } }, - bulkEdit: { table: { disable: true } }, - bulkSelect: { table: { disable: true } }, - shortcutSelect: { table: { disable: true } }, - openUrl: { table: { disable: true } }, - externalUrl: { table: { disable: true } }, - onItemInView: { table: { disable: true } }, - onOpen: { table: { disable: true } }, - onOpenOriginalUrl: { table: { disable: true } } - } -} - -export const Item = (args) => { - const itemToDisplay = args.itemToDisplay - const item = itemsToDisplay[itemToDisplay] - - if (!item) return
No card to display
- - const { - itemId, - url, - tags, - title, - authors, - publisher, - excerpt, - timeToRead, - isSyndicated, - isUserList, - isInternalItem, - onItemInView = () => {}, - publisherLogo, - fromPartner, - clamp, - topic - } = item - - const getShownImage = () => { - if (item?.noImage) return '' - if (args.useHeroImage) return item?.heroImage || item?.thumbnail - return item?.thumbnail - } - const itemImage = getShownImage() - - const cardClassnames = cx( - args.className, - `column${args.cardSpan}`, - args.sideBySide && 'side-by-side' - ) - - return ( - - ) -} - -Item.args = { - cardSpan: 3, - itemToDisplay: savesItems[0].storyName, - Actions: 'discovery', - saveStatus: 'unsaved', - isSyndicated: false, - isUserList: false, - isFavorite: false, - isArchive: false, - isPremium: false, - isInternalItem: false, - fromPartner: true, // This is so we can supersede this with the selector - clamp: false, - showExcerpt: true, - partnerType: false, - sideBySide: false, - showTopic: false, - topicName: null, - tags: 'none' -} diff --git a/clients/web/src/components/items-media/card-media.story.js b/clients/web/src/components/items-media/card-media.story.js deleted file mode 100644 index 60d4c4730..000000000 --- a/clients/web/src/components/items-media/card-media.story.js +++ /dev/null @@ -1,39 +0,0 @@ -import { CardMedia } from 'components/items-media/card-media' -import { css } from '@emotion/css' - -const imageWrapper = css` - width: 500px; -` - -export default { - title: 'Card/Media', - component: CardMedia -} - -const Template = (args) => ( -
- -
-) - -export const ValidImage = Template.bind({}) - -ValidImage.args = { - image_src: 'https://picsum.photos/seed/picsum/600/400', - title: 'Random Picsum', - id: 1 -} - -export const NoImage = Template.bind({}) -NoImage.args = { - image_src: '', - title: 'No Image', - id: 3 -} - -export const NonWordTitle = Template.bind({}) -NonWordTitle.args = { - image_src: '', - title: '!Quote', - id: 4 -} diff --git a/clients/web/src/components/loader/loader.story.js b/clients/web/src/components/loader/loader.story.js deleted file mode 100644 index 4088df44e..000000000 --- a/clients/web/src/components/loader/loader.story.js +++ /dev/null @@ -1,22 +0,0 @@ -import { Loader, LoaderCentered, LoadMore } from './loader' - -export default { - title: 'Components/Loader' -} - -export const loader = () => - -export const loaderCentered = () => ( - - - -) - -// This was a much more complicated example involving -// list items and such. In other words, make me more -// complex once you get list stuffs -export const loadMore = () => ( - - - -) diff --git a/clients/web/src/components/logo-animated/logo-animated.story.js b/clients/web/src/components/logo-animated/logo-animated.story.js deleted file mode 100644 index 378071bff..000000000 --- a/clients/web/src/components/logo-animated/logo-animated.story.js +++ /dev/null @@ -1,17 +0,0 @@ -import { LogoAnimated } from './logo-animated' -import { css } from '@emotion/css' - -export default { - title: 'Components/LogoAnimated' -} - -const logoWrapper = css` - margin: 50px; - display: inline-block; -` - -export const normal = () => ( -
- -
-) diff --git a/clients/web/src/components/modal/modal.story.js b/clients/web/src/components/modal/modal.story.js deleted file mode 100644 index a736e7693..000000000 --- a/clients/web/src/components/modal/modal.story.js +++ /dev/null @@ -1,303 +0,0 @@ -import { useState } from 'react' -import { css } from '@emotion/css' -import Modal, { ModalBody, ModalFooter } from './modal' -import { TextArea } from 'components/form-fields/text-area' -import { CreateEditShareableList } from 'components/shareable-lists/create-edit-modal' -import { AddToListModal } from 'components/shareable-lists/add-to-list-modal' -import { AddNoteModal } from 'components/shareable-lists/add-note-modal' -import { COLORS } from 'mocks/_data/colors' - -export default { - title: 'Overlays/Modal', - component: Modal -} - -const APP_ROOT_SELECTOR = '#root' - -const testChildStyles = css` - width: 248px; - height: 350px; - background-color: teal; - margin: 1rem 0; - color: var(--color-canvas); - padding: 10px; -` - -const OverflowElement = () => ( -
Placeholder content block (can overflow)
-) - -export const CreateList = () => ( - -) - -export const ListSettings = () => ( - -) - -export const AddToList = () => ( - -) - -export const AddNote = () => - -export const Basic = () => ( - {}} - isOpen={true}> - - The quick brown fox jumped over the lazy dog -
-
-
- -
-
-
-) - -export const StaticModal = () => ( - {}} - isOpen={true} - forceMobile={false} - showCloseButton={true}> - Wocka wocka - - - - -) - -const standardReasons = [ - { - id: 'broken-meta', - label: 'The title, link, or image is broken' - }, - { - id: 'wrong-category', - label: 'It’s in the wrong category' - }, - { - id: 'sexually-explicit', - label: 'It’s sexually explicit' - }, - { - id: 'offensive', - label: 'It’s rude, vulgar, or offensive' - }, - { - id: 'misinformation', - label: 'It contains misinformation' - } -] - -const otherFieldStyles = css` - margin: var(--spacing100) 0 var(--spacing075); - &, - & textarea { - max-width: inherit; - } -` - -export const WithForm = () => { - const [currentReason, updateReason] = useState(null) - const [otherText, updateOtherText] = useState('') - const handleRadioChange = (event) => { - updateReason(event.target.value) - } - const handleTextAreaChange = (event) => { - updateOtherText(event.target.value) - } - return ( - {}} - isOpen={true} - showCloseButton={true}> - -
- {standardReasons.map(({ id, label }) => ( -
- -
- ))} -
- -
- {currentReason !== 'other' ? null : ( - - - -
- Checks/Radios/Toggles -
- -
-
- - - -
-
- - - -
-
- - ) -} diff --git a/ui/components/_base/typography.story.tsx b/ui/components/_base/typography.story.tsx deleted file mode 100644 index 3751fb707..000000000 --- a/ui/components/_base/typography.story.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import type { Meta } from '@storybook/react' - -const meta: Meta = { - title: 'UI/Typography' -} - -export default meta - -export const Typography = () => { - return ( -
-

Heading H1

-

Heading H2

-

Heading H3

-

Heading H4

-
Heading H5
-
Heading H6
-
- ) -} diff --git a/ui/components/_decorators/inArticleLayout.tsx b/ui/components/_decorators/inArticleLayout.tsx deleted file mode 100644 index 50039cabb..000000000 --- a/ui/components/_decorators/inArticleLayout.tsx +++ /dev/null @@ -1,23 +0,0 @@ -// Components -import { ItemArticleLayout, type LayoutType } from '../item-article-layout' - -// Types -import type { StoryFn } from '@storybook/react' - -/** - * inGrid - * --- - * Places the story in a grid - * @see {@link https://storybook.js.org/docs/react/writing-stories/decorators} - */ -export function inArticleLayout(Story: StoryFn, layoutType: LayoutType) { - return ( -
- - - -
- ) -} - -export type { LayoutType } from '../item-article-layout' diff --git a/ui/components/_decorators/inCard.tsx b/ui/components/_decorators/inCard.tsx deleted file mode 100644 index 1f1c95d6e..000000000 --- a/ui/components/_decorators/inCard.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import style from '../item-article/style.module.css' - -import type { StoryFn } from '@storybook/react' - -/** - * inLayout - * --- - * Places the story in a container that simulates how it would sit - * on an actual page - * @see {@link https://storybook.js.org/docs/react/writing-stories/decorators} - */ -export function inCard(Story: StoryFn) { - return ( -
- -
- ) -} diff --git a/ui/components/_decorators/inCenter.tsx b/ui/components/_decorators/inCenter.tsx deleted file mode 100644 index 7e9e441ab..000000000 --- a/ui/components/_decorators/inCenter.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import style from './style.module.css' - -import type { StoryFn } from '@storybook/react' - -/** - * inCenter - * --- - * Places the story in the center of the page. Useful for minor elements with overflows (like menus) - * @see {@link https://storybook.js.org/docs/react/writing-stories/decorators} - */ -export function inCenter(Story: StoryFn) { - return ( -
- -
- ) -} diff --git a/ui/components/_decorators/inGrid.tsx b/ui/components/_decorators/inGrid.tsx deleted file mode 100644 index 25c7fc004..000000000 --- a/ui/components/_decorators/inGrid.tsx +++ /dev/null @@ -1,22 +0,0 @@ -// Types -import type { StoryFn } from '@storybook/react' - -/** - * inGrid - * --- - * Places the story in a grid - * @see {@link https://storybook.js.org/docs/react/writing-stories/decorators} - */ -export function inGrid(Story: StoryFn, gridCount: GridCount) { - return ( -
-
-
- -
-
-
- ) -} - -export type GridCount = 1 | 2 | 3 | 4 | 5 | 'lockup' diff --git a/ui/components/_decorators/inLayout.tsx b/ui/components/_decorators/inLayout.tsx deleted file mode 100644 index f0308d776..000000000 --- a/ui/components/_decorators/inLayout.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import type { StoryFn } from '@storybook/react' - -/** - * inLayout - * --- - * Places the story in a container that simulates how it would sit - * on an actual page - * @see {@link https://storybook.js.org/docs/react/writing-stories/decorators} - */ -export function inLayout(Story: StoryFn) { - return ( -
- -
- ) -} diff --git a/ui/components/_decorators/style.module.css b/ui/components/_decorators/style.module.css deleted file mode 100644 index cf89e15ae..000000000 --- a/ui/components/_decorators/style.module.css +++ /dev/null @@ -1,4 +0,0 @@ -/* !! FOR STORYBOOK DECORATOR STYLING ONLY — USE SPARINGLY */ -.center { - transform: translate(30vw, 40vh); -} diff --git a/ui/components/error-not-found/component.story.tsx b/ui/components/error-not-found/component.story.tsx deleted file mode 100644 index 68791d573..000000000 --- a/ui/components/error-not-found/component.story.tsx +++ /dev/null @@ -1,20 +0,0 @@ -// Components -import { ErrorNotFound as Component } from '.' - -// Types -import type { Meta, StoryObj } from '@storybook/react' - -// Storybook Meta -const meta: Meta = { - title: 'Error / Not Found', - component: Component -} -export default meta - -// Stories -export const NotFound: StoryObj = { - render: () => { - return - }, - args: {} -} diff --git a/ui/components/error/component.story.tsx b/ui/components/error/component.story.tsx deleted file mode 100644 index ebba99dc3..000000000 --- a/ui/components/error/component.story.tsx +++ /dev/null @@ -1,20 +0,0 @@ -// Components -import { Error as Component } from '.' - -// Types -import type { Meta, StoryObj } from '@storybook/react' - -// Storybook Meta -const meta: Meta = { - title: 'Error / Complete', - component: Component -} -export default meta - -// Stories -export const Complete: StoryObj = { - render: () => { - return - }, - args: {} -} diff --git a/ui/components/item-actions-overflow/component.story.tsx b/ui/components/item-actions-overflow/component.story.tsx deleted file mode 100644 index 2af87ab9b..000000000 --- a/ui/components/item-actions-overflow/component.story.tsx +++ /dev/null @@ -1,23 +0,0 @@ -// Decorators -import { inCenter } from '../_decorators/inCenter' - -// Components -import { ItemActionsOverflow as Component } from '.' - -// Types -import type { Meta, StoryObj } from '@storybook/react' - -// Storybook Meta -const meta: Meta = { - title: 'Item - Actions / Overflow', - component: Component, - decorators: [inCenter] -} -export default meta - -// Stories -export const Overflow: StoryObj = { - render: () => { - return - } -} diff --git a/ui/components/item-actions-save/component.story.tsx b/ui/components/item-actions-save/component.story.tsx deleted file mode 100644 index 9c05a0d33..000000000 --- a/ui/components/item-actions-save/component.story.tsx +++ /dev/null @@ -1,23 +0,0 @@ -// Decorators -import { inCenter } from '../_decorators/inCenter' - -// Components -import { ItemActionsSave as Component } from '.' - -// Types -import type { Meta, StoryObj } from '@storybook/react' - -// Storybook Meta -const meta: Meta = { - title: 'Item — Actions / Save', - component: Component, - decorators: [inCenter] -} -export default meta - -// Stories -export const Save: StoryObj = { - render: () => { - return - } -} diff --git a/ui/components/item-actions/component.story.tsx b/ui/components/item-actions/component.story.tsx deleted file mode 100644 index 5da20db3c..000000000 --- a/ui/components/item-actions/component.story.tsx +++ /dev/null @@ -1,44 +0,0 @@ -// Decorators -import { inCard } from '../_decorators/inCard' -import { inCenter } from '../_decorators/inCenter' - -// Components -import { ItemActions as Component } from '.' - -// Types -import type { Meta, StoryObj } from '@storybook/react' - -// Storybook Meta -const meta: Meta = { - title: 'Item - Actions / Complete', - component: Component, - decorators: [inCenter] -} -export default meta - -// Stories -export const Complete: StoryObj = { - decorators: [inCard], - render: () => { - return ( -
-
-
-
-
-
- -
-
- ) - }, - args: {} -} diff --git a/ui/components/item-article-layout/component.story.tsx b/ui/components/item-article-layout/component.story.tsx deleted file mode 100644 index 7898ff1fc..000000000 --- a/ui/components/item-article-layout/component.story.tsx +++ /dev/null @@ -1,50 +0,0 @@ -// Components -import { ItemArticle as Component } from '../item-article' -import { ItemArticleLayout, type LayoutType } from '../item-article-layout' - -// Mock Data -import itemData from '@common/mock-data/in-state/itemsById.json' - -// Types -import { Item } from '@common/types' -import type { Meta, StoryObj } from '@storybook/react' - -// Storybook Meta -const meta: Meta = { - title: 'Item - Article / Layout', - component: Component -} -export default meta - -// Stories -type ComponentPropsAndCustomArgs = { - gridCount: LayoutType -} & React.ComponentProps - -const itemsById: Record = itemData - -export const Layout: StoryObj = { - render: (args) => { - return ( - - {Object.keys(itemsById).map((id) => ( - - ))} - - ) - }, - argTypes: { - gridCount: { - options: [1, 2, 3, 4, 5, 'lockup'], - control: { type: 'inline-radio' } - }, - item: { - table: { - disable: true - } - } - }, - args: { - gridCount: 3 - } -} diff --git a/ui/components/item-article-media/component.story.tsx b/ui/components/item-article-media/component.story.tsx deleted file mode 100644 index 47071f73f..000000000 --- a/ui/components/item-article-media/component.story.tsx +++ /dev/null @@ -1,74 +0,0 @@ -// Decorators -import { inCard } from '../_decorators/inCard' -import { inGrid } from '../_decorators/inGrid' - -// Components -import { ItemArticleMedia as Component } from '.' - -// Types -import type { Meta, StoryObj } from '@storybook/react' - -// Storybook Meta -const meta: Meta = { - title: 'Item - Article / Media', - component: Component, - decorators: [(Story) => inGrid(Story, 2)] -} -export default meta - -// Stories -type ComponentPropsAndCustomArgs = { - idToUse: number - imageType: string -} & React.ComponentProps -// prettier-ignore -const images = { - missing: null, - perfect: 'https://pocket-image-cache.com/640x320/filters:format(WEBP):quality(100):no_upscale():strip_exif()/https%3A%2F%2Fs3.us-east-1.amazonaws.com%2Fpocket-curatedcorpusapi-prod-images%2Fc9d67046-1886-4384-806d-f0c7b83e5d5a.jpeg', - tall: 'https://pocket-image-cache.com/320x640/filters:format(WEBP):quality(100):no_upscale():strip_exif()/https%3A%2F%2Fs3.us-east-1.amazonaws.com%2Fpocket-curatedcorpusapi-prod-images%2Fc9d67046-1886-4384-806d-f0c7b83e5d5a.jpeg', - wide: 'https://pocket-image-cache.com/640x120/filters:format(WEBP):quality(100):no_upscale():strip_exif()/https%3A%2F%2Fs3.us-east-1.amazonaws.com%2Fpocket-curatedcorpusapi-prod-images%2Fc9d67046-1886-4384-806d-f0c7b83e5d5a.jpeg', - small: 'https://pocket-image-cache.com/120x80/filters:format(WEBP):quality(100):no_upscale():strip_exif()/https%3A%2F%2Fs3.us-east-1.amazonaws.com%2Fpocket-curatedcorpusapi-prod-images%2Fc9d67046-1886-4384-806d-f0c7b83e5d5a.jpeg', - broken: 'https://www.baltimoresun.com/resizer/S386uMJ7GqScn6h_15U_J5YOYgI=/1200x0/top/cloudfront-us-east-1.images.arcpublishing.com/tronc/GQFD7ILH6FHHBEIT4LF3XDARJA.JPG' -} - -export const Media: StoryObj = { - render: (args) => { - const id = args.idToUse.toString() - const image = { - cachedImages: [ - { - url: images[args.imageType as keyof typeof images], - id: 'WebP640' - } - ] - } - - return ( -
- -
- ) - }, - decorators: [inCard], - argTypes: { - id: { - table: { - disable: true - } - }, - idToUse: { - control: { type: 'range', min: 1, max: 30, step: 1 } - }, - imageType: { - options: Object.keys(images), - mapping: images, - control: { - type: 'select' - } - } - }, - args: { - idToUse: 1, - imageType: 'missing' - } -} diff --git a/ui/components/item-article/component.story.tsx b/ui/components/item-article/component.story.tsx deleted file mode 100644 index 195635855..000000000 --- a/ui/components/item-article/component.story.tsx +++ /dev/null @@ -1,56 +0,0 @@ -// Components -import { ItemArticle as Component } from '.' -// Types -import { ItemArticleLayout, type LayoutType } from '../item-article-layout' - -// Mock Data -import itemData from '@common/mock-data/in-state/itemsById.json' - -import type { Item } from '@common/types' -import type { Meta, StoryObj } from '@storybook/react' - -// Storybook Meta -const meta: Meta = { - title: 'Item - Article / Complete', - component: Component -} -export default meta - -// Stories -type ComponentPropsAndCustomArgs = { - gridCount: LayoutType - id: string -} & React.ComponentProps - -const itemsById: Record = itemData - -export const Complete: StoryObj = { - render: (args) => { - const itemId = args.id ?? 0 - const item = itemsById[itemId] - return ( - - - - ) - }, - argTypes: { - gridCount: { - options: [1, 2, 3, 4, 5], - control: { type: 'inline-radio' } - }, - id: { - options: Object.keys(itemsById), - control: { type: 'select' } - }, - item: { - table: { - disable: true - } - } - }, - args: { - gridCount: 3, - id: Object.keys(itemsById)[0] - } -} diff --git a/ui/components/item-short-layout/component.story.tsx b/ui/components/item-short-layout/component.story.tsx deleted file mode 100644 index f756fc4e6..000000000 --- a/ui/components/item-short-layout/component.story.tsx +++ /dev/null @@ -1,32 +0,0 @@ -// Components -import { ItemShortLayout as Component } from '.' -import { ItemShort } from '../item-short' - -// Mock Data -import itemData from '@common/mock-data/in-state/shortsById.json' - -import type { Item } from '@common/types' -// Types -import type { Meta, StoryObj } from '@storybook/react' - -// Storybook Meta -const meta: Meta = { - title: 'Item - Short / Layout', - component: Component -} -export default meta - -// Stories -const itemsById: Record = itemData - -export const Layout: StoryObj = { - render: (args) => { - return ( - - {Object.keys(itemsById).map((id) => ( - - ))} - - ) - } -} diff --git a/ui/components/item-short/component.story.tsx b/ui/components/item-short/component.story.tsx deleted file mode 100644 index ea4657c08..000000000 --- a/ui/components/item-short/component.story.tsx +++ /dev/null @@ -1,54 +0,0 @@ -// Decorators -import { type LayoutType, inArticleLayout } from '../_decorators/inArticleLayout' - -// Components -import { ItemShort as Component } from '.' - -// Mock Data -import itemData from '@common/mock-data/in-state/shortsById.json' - -// Types -import type { Item } from '@common/types' -import type { Meta, StoryObj } from '@storybook/react' - -// Storybook Meta -const meta: Meta = { - title: 'Item - Short / Complete', - component: Component -} -export default meta - -// Stories -type ComponentPropsAndCustomArgs = { - layoutType: LayoutType - id: string -} & React.ComponentProps - -const itemsById: Record = itemData - -export const Complete: StoryObj = { - render: (args) => { - const item = itemsById[args.id] as unknown as Item - return - }, - decorators: [(Story, { args }) => inArticleLayout(Story, args.layoutType)], - argTypes: { - layoutType: { - options: [1, 2, 3, 4, 5], - control: { type: 'inline-radio' } - }, - id: { - options: Object.keys(itemsById), - control: { type: 'select' } - }, - item: { - table: { - disable: true - } - } - }, - args: { - id: Object.keys(itemsById)[0], - layoutType: 3 - } -} diff --git a/ui/components/item-sound-layout/component.story.tsx b/ui/components/item-sound-layout/component.story.tsx deleted file mode 100644 index 2a823e1fe..000000000 --- a/ui/components/item-sound-layout/component.story.tsx +++ /dev/null @@ -1,32 +0,0 @@ -// Components -import { ItemSoundLayout as Component } from '.' -import { ItemSound } from '../item-sound' - -// Mock Data -import itemData from '@common/mock-data/in-state/soundById.json' - -// Types -import type { Item } from '@common/types' -import type { Meta, StoryObj } from '@storybook/react' - -// Storybook Meta -const meta: Meta = { - title: 'Item - Sound / Layout', - component: Component -} -export default meta - -// Stories -const itemsById: Record = itemData - -export const Layout: StoryObj = { - render: (args) => { - return ( - - {Object.keys(itemsById).map((id) => ( - - ))} - - ) - } -} diff --git a/ui/components/item-sound/component.story.tsx b/ui/components/item-sound/component.story.tsx deleted file mode 100644 index adcbef9ce..000000000 --- a/ui/components/item-sound/component.story.tsx +++ /dev/null @@ -1,56 +0,0 @@ -// Decorators -import { type LayoutType, inArticleLayout } from '../_decorators/inArticleLayout' - -// Components -import { ItemSound as Component } from '.' - -// Mock Data -import itemData from '@common/mock-data/in-state/soundById.json' - -// Types -import { Item } from '@common/types' -import type { Meta, StoryObj } from '@storybook/react' - -// Storybook Meta -const meta: Meta = { - title: 'Item - Sound / Complete', - component: Component -} -export default meta - -// Stories -type ComponentPropsAndCustomArgs = { - layoutType: LayoutType - id: string -} & React.ComponentProps - -// Stories -const itemsById: Record = itemData - -export const Complete: StoryObj = { - render: (args) => { - const item = itemsById[args.id]! - return - }, - decorators: [(Story, { args }) => inArticleLayout(Story, args.layoutType)], - argTypes: { - id: { - options: Object.keys(itemsById), - control: { type: 'select' }, - mapping: {} - }, - layoutType: { - options: [1, 2, 3, 4, 5], - control: { type: 'inline-radio' } - }, - item: { - table: { - disable: true - } - } - }, - args: { - id: Object.keys(itemsById)[0], - layoutType: 3 - } -} diff --git a/ui/components/item-video-layout/component.story.tsx b/ui/components/item-video-layout/component.story.tsx deleted file mode 100644 index 6b5429ea9..000000000 --- a/ui/components/item-video-layout/component.story.tsx +++ /dev/null @@ -1,34 +0,0 @@ -// Components -import { ItemVideoLayout as Component } from '.' -import { ItemVideo } from '../item-video' - -// Mock Data -import itemData from '@common/mock-data/in-state/videosById.json' - -// Types -import { Item } from '@common/types' -import type { Meta, StoryObj } from '@storybook/react' - -// Storybook Meta -const meta: Meta = { - title: 'Item - Video / Layout', - component: Component -} -export default meta - -// Stories -const itemsById: Record = itemData - -export const Layout: StoryObj = { - render: (args) => { - return ( -
- - {Object.keys(itemsById).map((id) => ( - - ))} - -
- ) - } -} diff --git a/ui/components/item-video/component.story.tsx b/ui/components/item-video/component.story.tsx deleted file mode 100644 index 4604bd48f..000000000 --- a/ui/components/item-video/component.story.tsx +++ /dev/null @@ -1,50 +0,0 @@ -// Decorators -import { type LayoutType, inArticleLayout } from '../_decorators/inArticleLayout' - -// Components -import { ItemVideo as Component } from '.' - -// Mock Data -import itemData from '@common/mock-data/in-state/videosById.json' - -// Types -import { Item } from '@common/types' -import type { Meta, StoryObj } from '@storybook/react' - -// Storybook Meta -const meta: Meta = { - title: 'Item - Video / Complete', - component: Component -} -export default meta - -// Stories -type ComponentPropsAndCustomArgs = { - layoutType: LayoutType - id: string -} & React.ComponentProps - -const itemsById: Record = itemData - -export const Complete: StoryObj = { - render: (args) => { - const item = itemsById[args.id]! - return - }, - decorators: [(Story, { args }) => inArticleLayout(Story, args.layoutType)], - argTypes: { - id: { - options: Object.keys(itemsById), - control: { type: 'select' }, - mapping: {} - }, - layoutType: { - options: [1, 2], - control: { type: 'inline-radio' } - } - }, - args: { - id: Object.keys(itemsById)[0], - layoutType: 3 - } -} diff --git a/ui/components/layout-main/component.story.ssr.tsx b/ui/components/layout-main/component.story.ssr.tsx deleted file mode 100644 index 877164775..000000000 --- a/ui/components/layout-main/component.story.ssr.tsx +++ /dev/null @@ -1,77 +0,0 @@ -/* eslint-disable react/no-unescaped-entities */ -import style from './style.module.css' - -import { NavFooter } from '../nav-footer' -import { NavTop } from '../nav-top' - -// Types -import type { Meta, StoryObj } from '@storybook/react' -import type { PropsWithChildren } from 'react' - -// Storybook Meta -const meta: Meta = { - title: 'Site Layout / Main', - component: Component, - parameters: { - layout: 'fullscreen' - } -} -export default meta - -// Stories -/** - * - */ -function Component({ children }: PropsWithChildren) { - return ( -
- -
{children}
- -
- ) -} - -export const Main: StoryObj = { - render: () => { - return ( - -

- You need the dark in order to show the light. That is when you can experience true joy, - when you have no fear. A tree cannot be straight if it has a crooked trunk. That's crazy. - Son of a gun. We tell people sometimes: we're like drug dealers, come into town and get - everybody absolutely addicted to painting. It doesn't take much to get you addicted. Look - around, look at what we have. Beauty is everywhere, you only have to look to see it. -

- -

- And right there you got an almighty cloud. It's almost like something out of a fairytale - book. You have to make those little noises or it won't work. There it is. -

- -

- When you buy that first tube of paint it gives you an artist license. We'll make some - happy little bushes here. I want everybody to be happy. That's what it's all about. Let's - put a touch more of the magic here. We'll play with clouds today. I'm going to mix up a - little color. We’ll use Van Dyke Brown, Permanent Red, and a little bit of Prussian Blue. - Now it's beginning to make a little sense. I guess I'm a little weird. I like to talk to - trees and animals. That's okay though; I have more fun than most people. -

- -

- Now we'll take the almighty fan brush. Just think about these things in your mind and drop - em' on canvas. Mountains are so simple, they're hard. Fluff that up. Let's put some happy - little clouds in our world. It's hard to see things when you're too close. Take a step - back and look. You've got to learn to fight the temptation to resist these things. Just - let them happen. -

- -

- Isn't that fantastic? You gotta think like a tree. Think about a cloud. Just float around - and be there. You better get your coat out, this is going to be a cold painting. -

-
- ) - }, - args: {} -} diff --git a/ui/components/nav-footer-language/component.story.tsx b/ui/components/nav-footer-language/component.story.tsx deleted file mode 100644 index 01889b22b..000000000 --- a/ui/components/nav-footer-language/component.story.tsx +++ /dev/null @@ -1,20 +0,0 @@ -// Components -import { LanguageSelector as Component } from '.' - -// Types -import type { Meta, StoryObj } from '@storybook/react' - -// Storybook Meta -const meta: Meta = { - title: 'Nav - Footer / Language Selector', - component: Component -} -export default meta - -// Stories -export const LanguageSelector: StoryObj = { - render: () => { - return - }, - args: {} -} diff --git a/ui/components/nav-footer-theme/component.story.tsx b/ui/components/nav-footer-theme/component.story.tsx deleted file mode 100644 index 09d034da6..000000000 --- a/ui/components/nav-footer-theme/component.story.tsx +++ /dev/null @@ -1,20 +0,0 @@ -// Components -import { NavFooterTheme as Component } from '.' - -// Types -import type { Meta, StoryObj } from '@storybook/react' - -// Storybook Meta -const meta: Meta = { - title: 'Nav - Footer / Theme', - component: Component -} -export default meta - -// Stories -export const Theme: StoryObj = { - render: () => { - return - }, - args: {} -} diff --git a/ui/components/nav-footer/component.story.tsx b/ui/components/nav-footer/component.story.tsx deleted file mode 100644 index 435dd0f84..000000000 --- a/ui/components/nav-footer/component.story.tsx +++ /dev/null @@ -1,23 +0,0 @@ -// Components -import { NavFooter as Component } from '.' - -// Types -import type { Meta, StoryObj } from '@storybook/react' - -// Storybook Meta -const meta: Meta = { - title: 'Nav - Footer / Complete', - component: Component, - parameters: { - layout: 'fullscreen' - } -} -export default meta - -// Stories -export const Complete: StoryObj = { - render: () => { - return - }, - args: {} -} diff --git a/ui/components/nav-top-account-auth/component.story.tsx b/ui/components/nav-top-account-auth/component.story.tsx deleted file mode 100644 index cb4797d3e..000000000 --- a/ui/components/nav-top-account-auth/component.story.tsx +++ /dev/null @@ -1,20 +0,0 @@ -// Components -import { NavTopAccountAuth as Component } from '.' - -// Types -import type { Meta, StoryObj } from '@storybook/react' - -// Storybook Meta -const meta: Meta = { - title: 'Nav - Top / Account - Auth', - component: Component -} -export default meta - -// Stories -export const AccountAuth: StoryObj = { - render: () => { - return - }, - args: {} -} diff --git a/ui/components/nav-top-account-profile/component.story.ssr.tsx b/ui/components/nav-top-account-profile/component.story.ssr.tsx deleted file mode 100644 index 1712a60c4..000000000 --- a/ui/components/nav-top-account-profile/component.story.ssr.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import { Suspense } from 'react' - -// Components -import { NavTopAccountProfile as Component } from '.' - -// State -import { HydrateUserInfo } from '@common/state/user-info/hydrate' - -// Types -import type { UserInfoState } from '@common/state/user-info' -import type { Meta, StoryFn, StoryObj } from '@storybook/react' - -// Setting up required state -const state: UserInfoState = { - pending: false, - firstName: 'Jason', - lastName: 'Mendoza', - avatarUrl: 'https://i.pravatar.cc/150?img=11', - id: 'abc123' -} -const withState = (Story: StoryFn) => { - return ( - <> - - - - - - ) -} - -// Storybook Meta -const meta: Meta = { - title: 'Nav - Top / Account - Profile', - component: Component, - decorators: [withState] -} -export default meta - -// Stories -export const AccountProfile: StoryObj = { - render: () => { - return - }, - args: {} -} diff --git a/ui/components/nav-top-account/component.story.ssr.tsx b/ui/components/nav-top-account/component.story.ssr.tsx deleted file mode 100644 index 0e1900f32..000000000 --- a/ui/components/nav-top-account/component.story.ssr.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import { Suspense } from 'react' - -// Components -import { NavTopAccount as Component } from '.' - -// State -import { HydrateUserInfo } from '@common/state/user-info/hydrate' - -// Types -import type { UserInfoState } from '@common/state/user-info' -import type { Meta, StoryFn, StoryObj } from '@storybook/react' - -// Setting up required state -const state: UserInfoState = { - pending: false, - firstName: 'Jason', - lastName: 'Mendoza', - avatarUrl: 'https://i.pravatar.cc/150?img=11', - id: 'abc123' -} -const withState = (Story: StoryFn) => { - return ( - <> - - - - - - ) -} - -// Storybook Meta -const meta: Meta = { - title: 'Nav - Top / Account', - component: Component, - decorators: [withState] -} -export default meta - -// Stories -export const Account: StoryObj = { - render: () => { - return - } -} diff --git a/ui/components/nav-top-brand/component.story.tsx b/ui/components/nav-top-brand/component.story.tsx deleted file mode 100644 index b8194054c..000000000 --- a/ui/components/nav-top-brand/component.story.tsx +++ /dev/null @@ -1,20 +0,0 @@ -// Components -import { NavTopBrand as Component } from '.' - -// Types -import type { Meta, StoryObj } from '@storybook/react' - -// Storybook Meta -const meta: Meta = { - title: 'Nav - Top / Brand', - component: Component -} -export default meta - -// Stories -export const Brand: StoryObj = { - render: () => { - return - }, - args: {} -} diff --git a/ui/components/nav-top-search/component.story.tsx b/ui/components/nav-top-search/component.story.tsx deleted file mode 100644 index 52737e574..000000000 --- a/ui/components/nav-top-search/component.story.tsx +++ /dev/null @@ -1,20 +0,0 @@ -// Components -import { NavTopSearch as Component } from '.' - -// Types -import type { Meta, StoryObj } from '@storybook/react' - -// Storybook Meta -const meta: Meta = { - title: 'Nav - Top / Search', - component: Component -} -export default meta - -// Stories -export const Search: StoryObj = { - render: () => { - return - }, - args: {} -} diff --git a/ui/components/nav-top/component.story.ssr.tsx b/ui/components/nav-top/component.story.ssr.tsx deleted file mode 100644 index 980972c83..000000000 --- a/ui/components/nav-top/component.story.ssr.tsx +++ /dev/null @@ -1,22 +0,0 @@ -// Components -import { NavTop as Component } from '.' - -// Types -import type { Meta, StoryObj } from '@storybook/react' - -// Storybook Meta -const meta: Meta = { - title: 'Nav - Top / Complete', - component: Component, - parameters: { - layout: 'fullscreen' - } -} -export default meta - -// Stories -export const Complete: StoryObj = { - render: () => { - return - } -} diff --git a/ui/components/package.json b/ui/components/package.json index 4846a785c..668ecbe21 100644 --- a/ui/components/package.json +++ b/ui/components/package.json @@ -28,7 +28,7 @@ "@testing-library/user-event": "^14.6.1", "@types/jest": "^29.5.14", "@types/node": "^24.10.2", - "@types/react": "19.0.8", + "@types/react": "19.2.7", "@types/react-dom": "^19.0.3", "jest": "29.7.0", "postcss-flexbugs-fixes": "^5.0.2", diff --git a/ui/components/placard/component.story.tsx b/ui/components/placard/component.story.tsx deleted file mode 100644 index 08d05743d..000000000 --- a/ui/components/placard/component.story.tsx +++ /dev/null @@ -1,20 +0,0 @@ -// Components -import { Placard as Component } from '.' - -// Types -import type { Meta, StoryObj } from '@storybook/react' - -// Storybook Meta -const meta: Meta = { - title: 'Placard / Complete', - component: Component -} -export default meta - -// Stories -export const Complete: StoryObj = { - render: () => { - return - }, - args: {} -} diff --git a/ui/components/setting-theme/component.story.tsx b/ui/components/setting-theme/component.story.tsx deleted file mode 100644 index b568ba3bd..000000000 --- a/ui/components/setting-theme/component.story.tsx +++ /dev/null @@ -1,20 +0,0 @@ -// Components -import { SettingTheme as Component } from '.' - -// Types -import type { Meta, StoryObj } from '@storybook/react' - -// Storybook Meta -const meta: Meta = { - title: 'Setting / Theme', - component: Component -} -export default meta - -// Stories -export const Theme: StoryObj = { - render: () => { - return - }, - args: {} -} diff --git a/ui/icons/package.json b/ui/icons/package.json index f034befe8..9f79ce8b1 100644 --- a/ui/icons/package.json +++ b/ui/icons/package.json @@ -9,7 +9,7 @@ "devDependencies": { "@config/typescript-config": "workspace:*", "@types/fs-extra": "11.0.4", - "@types/react": "19.0.8", + "@types/react": "19.2.7", "fs-extra": "11.3.0", "svgo": "3.3.2", "ts-node": "^10.9.2" diff --git a/ui/styles/legacy/global.css b/ui/styles/legacy/global.css index add898ff0..859b18d7e 100644 --- a/ui/styles/legacy/global.css +++ b/ui/styles/legacy/global.css @@ -48,13 +48,13 @@ sub{bottom:-.25em} sup{top:-.5em} -a{background-color:transparent;color:inherit;text-decoration:none} +a{background-color:transparent;text-decoration:none} -a:hover{color:inherit;text-decoration:underline} +a,a:hover{color:inherit} -a:not([href]):not([tabindex]){color:inherit;text-decoration:none} +a:hover{text-decoration:underline} -a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none} +a:not([href]):not([tabindex]),a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none} a:not([href]):not([tabindex]):focus{outline:0} @@ -210,17 +210,15 @@ input[type=radio]+label:after{background:var(--color-actionPrimary);height:14px; input[type=radio]:focus{outline:2px solid var(--color-actionPrimary);outline-offset:2px} -input[type=radio]:hover:enabled{border-color:var(--color-actionPrimaryHover)} - -input[type=radio]:hover:enabled+label:before{border-color:var(--color-actionPrimaryHover)} +input[type=radio]:hover:enabled,input[type=radio]:hover:enabled+label:before{border-color:var(--color-actionPrimaryHover)} input[type=radio]:disabled+label{opacity:.5} input[type=radio]:disabled:hover+label,input[type=radio]:disabled:hover+label:before{cursor:not-allowed} -input[type=radio]:checked{background-color:var(--color-actionPrimary);border-color:var(--color-actionPrimary);box-shadow:inset 0 0 0 2px var(--color-canvas)} +input[type=radio]:checked{background-color:var(--color-actionPrimary);box-shadow:inset 0 0 0 2px var(--color-canvas)} -input[type=radio]:checked+label:before{border-color:var(--color-actionPrimary)} +input[type=radio]:checked,input[type=radio]:checked+label:before{border-color:var(--color-actionPrimary)} input[type=radio]:checked+label:after{transform:scale(1)} @@ -248,9 +246,7 @@ input[type=checkbox]:checked:hover{background:var(--color-actionPrimaryHover);bo input[type=checkbox]:focus{box-shadow:0 0 0 2px var(--color-canvas),0 0 0 4px var(--color-formFieldFocusLabel)} -input[type=checkbox]:disabled,input[type=checkbox]:disabled:checked{opacity:.5;pointer-events:none} - -input[type=checkbox]:disabled+label,input[type=checkbox]:disabled:checked+label{opacity:.5;pointer-events:none} +input[type=checkbox]:disabled,input[type=checkbox]:disabled+label,input[type=checkbox]:disabled:checked,input[type=checkbox]:disabled:checked+label{opacity:.5;pointer-events:none} input.toggle[type=checkbox]{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:var(--color-toggleOff);border:none;border-radius:18px;color:var(--color-actionPrimary);cursor:pointer;height:36px;margin:.25 0;outline:none;transition:background 50ms cubic-bezier(.4,0,.2,1);vertical-align:middle;width:64px} @@ -272,9 +268,7 @@ input.toggle[type=checkbox]:checked:hover:before{content:var(--checkboxCheckMark input.toggle[type=checkbox]:focus{box-shadow:0 0 0 2px var(--color-canvas),0 0 0 4px var(--color-formFieldFocusLabel)} -input.toggle[type=checkbox]:disabled,input.toggle[type=checkbox]:disabled:checked{opacity:.5;pointer-events:none} - -input.toggle[type=checkbox]:disabled+label,input.toggle[type=checkbox]:disabled:checked+label{opacity:.5;pointer-events:none} +input.toggle[type=checkbox]:disabled,input.toggle[type=checkbox]:disabled+label,input.toggle[type=checkbox]:disabled:checked,input.toggle[type=checkbox]:disabled:checked+label{opacity:.5;pointer-events:none} select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:var(--selectDownArrowLight);background-position:right .7rem top 50%;background-repeat:no-repeat;background-size:11px auto;padding-right:1.725rem} diff --git a/ui/styles/pocket/global.css b/ui/styles/pocket/global.css index 39035daf4..05d56fc3a 100644 --- a/ui/styles/pocket/global.css +++ b/ui/styles/pocket/global.css @@ -48,13 +48,13 @@ sub{bottom:-.25em} sup{top:-.5em} -a{background-color:transparent;color:inherit;text-decoration:none} +a{background-color:transparent;text-decoration:none} -a:hover{color:inherit;text-decoration:underline} +a,a:hover{color:inherit} -a:not([href]):not([tabindex]){color:inherit;text-decoration:none} +a:hover{text-decoration:underline} -a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none} +a:not([href]):not([tabindex]),a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none} a:not([href]):not([tabindex]):focus{outline:0} @@ -296,9 +296,7 @@ input[type=checkbox]:before{content:var(--checkboxCheckMarkLight);display:block; input[type=checkbox]:checked:before{opacity:1;transform:scale(1.25)} -input[type=checkbox]:disabled,input[type=checkbox]:disabled:checked{opacity:.5;pointer-events:none} - -input[type=checkbox]:disabled+label,input[type=checkbox]:disabled:checked+label{opacity:.5;pointer-events:none} +input[type=checkbox]:disabled,input[type=checkbox]:disabled+label,input[type=checkbox]:disabled:checked,input[type=checkbox]:disabled:checked+label{opacity:.5;pointer-events:none} input.toggle[type=checkbox]{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:var(--color-toggle-base);border:none;border-radius:18px;color:var(--color-accent-base);cursor:pointer;height:36px;margin:.25 0;outline:none;transition:background 50ms cubic-bezier(.4,0,.2,1);vertical-align:middle;width:64px} @@ -318,9 +316,7 @@ input.toggle[type=checkbox]:checked:active:before,input.toggle[type=checkbox]:ch input.toggle[type=checkbox]:focus{box-shadow:0 0 0 2px var(--color-surface-base),0 0 0 4px var(--color-formFieldFocusLabel)} -input.toggle[type=checkbox]:disabled,input.toggle[type=checkbox]:disabled:checked{opacity:.5;pointer-events:none} - -input.toggle[type=checkbox]:disabled+label,input.toggle[type=checkbox]:disabled:checked+label{opacity:.5;pointer-events:none} +input.toggle[type=checkbox]:disabled,input.toggle[type=checkbox]:disabled+label,input.toggle[type=checkbox]:disabled:checked,input.toggle[type=checkbox]:disabled:checked+label{opacity:.5;pointer-events:none} select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:var(--selectDownArrowLight);background-position:right .7rem top 50%;background-repeat:no-repeat;background-size:11px auto;padding-right:1.725rem}