diff --git a/.gitignore b/.gitignore index 4ce68366dbf..84de6f089f3 100644 --- a/.gitignore +++ b/.gitignore @@ -185,7 +185,6 @@ docs-shopify.dev/commands/interfaces/ vite.config.ts.timestamp* # from nested gitignores -packages/app/assets/dev-console packages/ui-extensions-server-kit/*.d.ts packages/ui-extensions-server-kit/!typings.d.ts packages/ui-extensions-server-kit/index.* @@ -196,12 +195,6 @@ packages/store/src/cli/api/graphql/business-platform-organizations/organizations packages/ui-extensions-test-utils/*.d.ts packages/ui-extensions-test-utils/!typings.d.ts packages/ui-extensions-test-utils/dist -packages/ui-extensions-dev-console/*.js -packages/ui-extensions-dev-console/*.d.ts -packages/ui-extensions-dev-console/!typings.d.ts -packages/ui-extensions-dev-console/.eslintrc.js -packages/ui-extensions-dev-console/css-transform.js -packages/ui-extensions-dev-console/dist packages/cli-kit/src/cli/api/graphql/*/*_schema.graphql packages/organizations/src/cli/api/graphql/*/*_schema.graphql packages/store/src/cli/api/graphql/*/*_schema.graphql diff --git a/package.json b/package.json index e4329c091fb..73a14aa7f41 100644 --- a/package.json +++ b/package.json @@ -359,12 +359,6 @@ ] } }, - "packages/ui-extensions-dev-console": { - "entry": [ - "**/src/main.tsx!" - ], - "project": "**/*.{ts,tsx}!" - }, "packages/ui-extensions-server-kit": { "entry": [ "**/src/index.ts!", diff --git a/packages/app/project.json b/packages/app/project.json index 1137aaef142..6f889c815db 100644 --- a/packages/app/project.json +++ b/packages/app/project.json @@ -4,7 +4,6 @@ "sourceRoot": "packages/app/src", "projectType": "library", "tags": ["scope:feature"], - "implicitDependencies": ["ui-extensions-dev-console"], "targets": { "clean": { "executor": "nx:run-commands", diff --git a/packages/app/src/cli/services/dev/extension/server.ts b/packages/app/src/cli/services/dev/extension/server.ts index 456c8364c61..bee668bd034 100644 --- a/packages/app/src/cli/services/dev/extension/server.ts +++ b/packages/app/src/cli/services/dev/extension/server.ts @@ -1,14 +1,12 @@ import { corsMiddleware, - devConsoleAssetsMiddleware, - devConsoleIndexMiddleware, getExtensionAssetMiddleware, getExtensionPayloadMiddleware, getExtensionPointMiddleware, getExtensionsPayloadMiddleware, getLogMiddleware, noCacheMiddleware, - redirectToDevConsoleMiddleware, + redirectToExtensionsMiddleware, } from './server/middlewares.js' import {ExtensionsPayloadStore, ExtensionsPayloadStoreOptions} from './payload/store.js' import {ExtensionInstance} from '../../../models/extensions/extension-instance.js' @@ -28,15 +26,14 @@ export function setupHTTPServer(options: SetupHTTPServerOptions) { httpApp.use(getLogMiddleware(options)) httpApp.use(corsMiddleware) httpApp.use(noCacheMiddleware) - httpRouter.use('/extensions/dev-console', devConsoleIndexMiddleware) - httpRouter.use('/extensions/dev-console/assets/**:assetPath', devConsoleAssetsMiddleware) + httpRouter.use('/extensions/dev-console', redirectToExtensionsMiddleware) httpRouter.use('/extensions/:extensionId', getExtensionPayloadMiddleware(options)) httpRouter.use('/extensions/:extensionId/', getExtensionPayloadMiddleware(options)) httpRouter.use('/extensions/:extensionId/:extensionPointTarget', getExtensionPointMiddleware(options)) httpRouter.use('/extensions/:extensionId/assets/**:assetPath', getExtensionAssetMiddleware(options)) httpRouter.use('/extensions', getExtensionsPayloadMiddleware(options)) httpRouter.use('/extensions/', getExtensionsPayloadMiddleware(options)) - httpRouter.use('/', redirectToDevConsoleMiddleware) + httpRouter.use('/', redirectToExtensionsMiddleware) httpApp.use(httpRouter) diff --git a/packages/app/src/cli/services/dev/extension/server/middlewares.test.ts b/packages/app/src/cli/services/dev/extension/server/middlewares.test.ts index 206d63ed971..88b8fffb033 100644 --- a/packages/app/src/cli/services/dev/extension/server/middlewares.test.ts +++ b/packages/app/src/cli/services/dev/extension/server/middlewares.test.ts @@ -4,7 +4,7 @@ import { getExtensionPayloadMiddleware, fileServerMiddleware, noCacheMiddleware, - redirectToDevConsoleMiddleware, + redirectToExtensionsMiddleware, getExtensionPointMiddleware, } from './middlewares.js' import * as utilities from './utilities.js' @@ -100,13 +100,13 @@ describe('noCacheMiddleware()', () => { }) }) -describe('redirectToDevConsoleMiddleware()', () => { - test('redirects to /extensions/dev-console', async () => { +describe('redirectToExtensionsMiddleware()', () => { + test('redirects to /extensions', async () => { const event = getMockEvent() - await redirectToDevConsoleMiddleware(event) + await redirectToExtensionsMiddleware(event) - expect(h3.sendRedirect).toHaveBeenCalledWith(event, '/extensions/dev-console', 307) + expect(h3.sendRedirect).toHaveBeenCalledWith(event, '/extensions', 307) }) }) diff --git a/packages/app/src/cli/services/dev/extension/server/middlewares.ts b/packages/app/src/cli/services/dev/extension/server/middlewares.ts index 1f1789662a3..3c3c553553b 100644 --- a/packages/app/src/cli/services/dev/extension/server/middlewares.ts +++ b/packages/app/src/cli/services/dev/extension/server/middlewares.ts @@ -4,9 +4,9 @@ import {getUIExtensionPayload} from '../payload.js' import {getHTML} from '../templates.js' import {getWebSocketUrl} from '../../extension.js' import {resolveOutputDir} from '../../../build/steps/include-assets/generate-manifest.js' -import {fileExists, isDirectory, readFile, findPathUp} from '@shopify/cli-kit/node/fs' +import {fileExists, isDirectory, readFile} from '@shopify/cli-kit/node/fs' import {sendRedirect, defineEventHandler, getRequestHeader, getRouterParams, setResponseHeader} from 'h3' -import {joinPath, resolvePath, isSubpath, extname, moduleDirectory} from '@shopify/cli-kit/node/path' +import {joinPath, resolvePath, isSubpath, extname} from '@shopify/cli-kit/node/path' import {outputDebug} from '@shopify/cli-kit/node/output' import type {H3Event} from 'h3' @@ -25,8 +25,8 @@ export const noCacheMiddleware = defineEventHandler((event) => { setResponseHeader(event, 'Cache-Control', 'no-cache') }) -export const redirectToDevConsoleMiddleware = defineEventHandler(async (event) => { - return sendRedirect(event, '/extensions/dev-console', 307) +export const redirectToExtensionsMiddleware = defineEventHandler(async (event) => { + return sendRedirect(event, '/extensions', 307) }) export async function fileServerMiddleware(event: H3Event, options: {filePath: string}) { @@ -113,44 +113,6 @@ export function getExtensionsPayloadMiddleware({payloadStore}: GetExtensionsMidd }) } -export const devConsoleIndexMiddleware = defineEventHandler(async (event) => { - const rootDirectory = await findPathUp(joinPath('assets', 'dev-console'), { - type: 'directory', - cwd: moduleDirectory(import.meta.url), - }) - - if (!rootDirectory) { - return sendError(event, { - statusCode: 404, - statusMessage: `Could not find root directory for dev console`, - }) - } - - return fileServerMiddleware(event, { - filePath: rootDirectory, - }) -}) - -export const devConsoleAssetsMiddleware = defineEventHandler(async (event) => { - const {assetPath = ''} = getRouterParams(event) - - const rootDirectory = await findPathUp(joinPath('assets', 'dev-console', 'extensions', 'dev-console', 'assets'), { - type: 'directory', - cwd: moduleDirectory(import.meta.url), - }) - - if (!rootDirectory) { - return sendError(event, { - statusCode: 404, - statusMessage: `Could not find root directory for dev console asset`, - }) - } - - return fileServerMiddleware(event, { - filePath: joinPath(rootDirectory, assetPath), - }) -}) - export function getLogMiddleware({devOptions}: GetExtensionsMiddlewareOptions) { return defineEventHandler((event) => { outputDebug(`UI extensions server received a ${event.method} request to URL ${event.path}`, devOptions.stdout) diff --git a/packages/ui-extensions-dev-console/CHANGELOG.md b/packages/ui-extensions-dev-console/CHANGELOG.md deleted file mode 100644 index e3b5f8a5915..00000000000 --- a/packages/ui-extensions-dev-console/CHANGELOG.md +++ /dev/null @@ -1,505 +0,0 @@ -# @shopify/ui-extensions-dev-console-app - -## 4.4.0 - -## 4.3.0 - -## 4.2.0 - -## 4.1.0 - -## 4.0.0 - -## 3.94.0 - -### Patch Changes - -- Updated dependencies [dbc91b4] - - @shopify/ui-extensions-server-kit@5.4.1 - -## 3.93.0 - -## 3.92.0 - -## 3.91.0 - -## 3.90.0 - -### Patch Changes - -- Updated dependencies [7680a16] - - @shopify/ui-extensions-server-kit@5.4.0 - -## 3.89.0 - -## 3.88.0 - -## 3.87.0 - -## 3.86.0 - -## 3.85.0 - -### Patch Changes - -- Updated dependencies [7f2f69a] - - @shopify/ui-extensions-server-kit@5.3.1 - -## 3.84.0 - -## 3.83.0 - -## 3.82.0 - -### Patch Changes - -- Updated dependencies [386bf0e] - - @shopify/ui-extensions-server-kit@5.3.0 - -## 3.81.1 - -## 3.81.0 - -### Minor Changes - -- ce3dfdc: Print all log messages to stderr instead of stdout - -## 3.80.0 - -## 3.79.0 - -## 3.78.0 - -## 3.77.0 - -## 3.76.0 - -## 3.75.0 - -## 3.74.0 - -## 3.73.0 - -## 3.72.0 - -## 3.71.5 - -## 3.71.4 - -## 3.71.3 - -## 3.71.2 - -## 3.71.1 - -## 3.71.0 - -## 3.70.0 - -## 3.69.0 - -## 3.68.0 - -## 3.67.0 - -## 3.66.0 - -### Patch Changes - -- 40a7b1229a: CLI now better handles 429 rate limiting for large projects -- Updated dependencies [40a7b1229a] - - @shopify/ui-extensions-server-kit@5.2.1 - -## 3.65.0 - -## 3.64.0 - -## 3.63.0 - -## 3.62.0 - -## 3.61.0 - -## 3.60.0 - -## 3.59.0 - -## 3.58.0 - -## 3.57.0 - -## 3.56.0 - -## 3.55.0 - -## 3.54.0 - -### Patch Changes - -- a9e847717: Update @shopify/polaris and @shopify/polaris-icons to latest version - -## 3.53.0 - -### Minor Changes - -- 1d6fe3475: Increase minimum Node version to 18 -- 0896e62b1: Versioned app config support - -### Patch Changes - -- Updated dependencies [1d6fe3475] -- Updated dependencies [0896e62b1] - - @shopify/ui-extensions-server-kit@5.2.0 - -## 3.52.0 - -## 3.51.0 - -## 3.50.0 - -## 3.49.1 - -### Patch Changes - -- c0e97b168: Remove the show/hide button from console - -## 3.49.0 - -### Patch Changes - -- Updated dependencies [84fddcf69] - - @shopify/ui-extensions-server-kit@5.1.0 - -## 3.48.0 - -### Patch Changes - -- 8519a9701: Update helper for return the surface for each extension target to account for new target names -- Updated dependencies [8519a9701] -- Updated dependencies [b8e11a77d] -- Updated dependencies [ec90885f4] - - @shopify/ui-extensions-server-kit@5.0.0 - -## 3.47.0 - -### Patch Changes - -- Updated dependencies [ae1e35d42] - - @shopify/ui-extensions-server-kit@4.2.1 - -## 3.47.0-pre.0 - -## 3.46.0 - -### Patch Changes - -- Updated dependencies [2c6e98652] - - @shopify/ui-extensions-server-kit@4.2.0 - -## 3.46.0-pre.3 - -## 3.46.0-pre.2 - -## 3.46.0-pre.1 - -## 3.46.0-pre.0 - -## 3.45.0 - -## 3.45.0-pre.5 - -## 3.45.0-pre.4 - -## 3.45.0-pre.3 - -## 3.45.0-pre.2 - -## 3.45.0-pre.1 - -## 3.44.1-pre.0 - -## 3.44.0 - -## 3.43.0 - -### Minor Changes - -- 942316711: Added a Tooltip component used to wrap any item you wish to have a tooltip. - - Tooltip accepts a string prop `text` for the content of the tooltip, and a single child of type `JSX.Element` OR `string`. - - ### Example - - ```tsx - import {Tooltip} from '@components/Tooltip' - - // Add a tooltip to a component - - - - - - // Add a tooltip to an a string - - - This string will have a dotted underline. - - - // Since Tooltip is wrapped an inline-block div, it may be used - // in a block of text - -

- Only this section will be underlined and trigger a tooltip. -

- ``` - -## 3.42.0 - -## 3.41.2 - -## 3.41.1 - -## 3.41.0 - -## 3.40.3 - -## 3.40.2 - -## 3.40.1 - -## 3.40.0 - -## 3.39.0 - -## 3.38.0 - -## 3.37.0 - -## 3.36.2 - -## 3.36.1 - -## 3.36.0 - -### Minor Changes - -- 335a96a24: Improved dev console with new UX & functionality. New functionality: Preview app link and QRCode, better post purchase extension instructions, copy button for all preview links, support for upcoming UI extension changes - -### Patch Changes - -- Updated dependencies [335a96a24] - - @shopify/ui-extensions-server-kit@4.1.0 - -## 3.35.0 - -### Patch Changes - -- Updated dependencies [10b86c459] - - @shopify/ui-extensions-server-kit@4.0.1 - -## 3.34.0 - -## 3.33.0 - -## 3.32.1 - -## 3.32.0 - -## 3.31.1 - -## 3.31.0 - -## 3.30.2 - -## 3.30.1 - -## 3.30.0 - -## 3.29.0 - -## 3.28.0 - -## 3.27.0 - -## 3.26.0 - -### Patch Changes - -- Updated dependencies [feee9215] - - @shopify/ui-extensions-server-kit@4.0.0 - -## 3.25.0 - -### Patch Changes - -- @shopify/ui-extensions-server-kit@3.25.0 - -## 3.24.1 - -### Patch Changes - -- @shopify/ui-extensions-server-kit@3.24.1 - -## 3.24.0 - -### Patch Changes - -- @shopify/ui-extensions-server-kit@3.24.0 - -## 3.23.0 - -### Patch Changes - -- @shopify/ui-extensions-server-kit@3.23.0 - -## 3.22.1 - -### Patch Changes - -- @shopify/ui-extensions-server-kit@3.22.1 - -## 3.22.0 - -### Patch Changes - -- @shopify/ui-extensions-server-kit@3.22.0 - -## 3.21.0 - -### Patch Changes - -- @shopify/ui-extensions-server-kit@3.21.0 - -## 3.20.1 - -### Patch Changes - -- @shopify/ui-extensions-server-kit@3.20.1 - -## 3.20.0 - -### Patch Changes - -- @shopify/ui-extensions-server-kit@3.20.0 - -## 3.19.0 - -### Patch Changes - -- @shopify/ui-extensions-server-kit@3.19.0 - -## 3.18.0 - -### Patch Changes - -- @shopify/ui-extensions-server-kit@3.18.0 - -## 3.17.0 - -### Patch Changes - -- @shopify/ui-extensions-server-kit@3.17.0 - -## 3.16.3 - -### Patch Changes - -- @shopify/ui-extensions-server-kit@3.16.3 - -## 3.16.2 - -### Patch Changes - -- @shopify/ui-extensions-server-kit@3.16.2 - -## 3.16.1 - -### Patch Changes - -- @shopify/ui-extensions-server-kit@3.16.1 - -## 3.16.0 - -### Patch Changes - -- @shopify/ui-extensions-server-kit@3.16.0 - -## 3.15.0 - -### Patch Changes - -- @shopify/ui-extensions-server-kit@3.15.0 - -## 3.14.0 - -### Patch Changes - -- @shopify/ui-extensions-server-kit@3.14.0 - -## 3.13.1 - -### Patch Changes - -- @shopify/ui-extensions-server-kit@3.13.1 - -## 3.13.0 - -### Patch Changes - -- @shopify/ui-extensions-server-kit@3.13.0 - -## 3.12.0 - -### Patch Changes - -- @shopify/ui-extensions-server-kit@3.12.0 - -## 3.11.0 - -### Patch Changes - -- 9bfa8428: Fix the extensions hover background for Safari in the dev console -- Updated dependencies [4fca2930] - - @shopify/ui-extensions-server-kit@3.11.0 - -## 3.10.1 - -### Patch Changes - -- @shopify/ui-extensions-server-kit@3.10.1 - -## 3.10.0 - -### Patch Changes - -- @shopify/ui-extensions-server-kit@3.10.0 - -## 3.9.2 - -### Patch Changes - -- @shopify/ui-extensions-server-kit@3.9.2 - -## 3.9.1 - -### Patch Changes - -- @shopify/ui-extensions-server-kit@3.9.1 - -## 3.9.0 - -### Patch Changes - -- @shopify/ui-extensions-server-kit@3.9.0 - -## 3.8.0 - -### Patch Changes - -- @shopify/ui-extensions-server-kit@3.8.0 - -## 3.7.1 - -### Patch Changes - -- @shopify/ui-extensions-server-kit@3.7.1 diff --git a/packages/ui-extensions-dev-console/README.md b/packages/ui-extensions-dev-console/README.md deleted file mode 100644 index f614a54abd2..00000000000 --- a/packages/ui-extensions-dev-console/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# The extension dev console - -A tool for developing extensions locally. - -## Local development - -In terminal 1: - -1. `dev cd cli` -2. `bin/create-test-app.js -e ui` -4. Copy the **Shopify extension dev console URL** e.g: `https://d1b8-2a09-bac1-14c0-188-00-b-224.ngrok.io/extensions/dev-console` - -In terminal 2: - -1. `dev cd cli` -2. `cd packages/ui-extensions-dev-console` -3. `VITE_CONNECTION_URL=[SHOPIFY_EXTENSION_DEV_CONSOLE_URL] pnpm dev` - -Go to the localhost URL that is output by the command. - -### Limitations - -When you run `pnpm dev` a version of the dev console will be run, which is served from a static build. If you go to a preview URL Shopify web will load the dev console from this URL, rather than the vite dev server which is on localhost:3000. - -If you want to see your changes on Shopify web: - -1. `dev cd cli` -2. `cd packages/ui-extensions-dev-console` -3. `pnpm build` diff --git a/packages/ui-extensions-dev-console/index.html b/packages/ui-extensions-dev-console/index.html deleted file mode 100644 index 6223ab0242c..00000000000 --- a/packages/ui-extensions-dev-console/index.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - UI Extensions DevConsole - - -
- - - diff --git a/packages/ui-extensions-dev-console/package.json b/packages/ui-extensions-dev-console/package.json deleted file mode 100644 index cdbf2b7f2fb..00000000000 --- a/packages/ui-extensions-dev-console/package.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "@shopify/ui-extensions-dev-console-app", - "version": "4.4.0", - "packageManager": "pnpm@10.11.1", - "private": true, - "scripts": { - "build": "nx build", - "clean": "nx clean", - "dev": "nx dev", - "lint": "nx lint", - "lint:fix": "nx lint:fix", - "vitest": "vitest" - }, - "dependencies": { - "@shopify/polaris-icons": "^8.0.0", - "@shopify/ui-extensions-server-kit": "5.4.1", - "copy-to-clipboard": "^3.3.3", - "qrcode.react": "^4.2.0", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-toastify": "^9.1.3", - "react-transition-group": "^4.4.5" - }, - "devDependencies": { - "@shopify/ui-extensions-test-utils": "3.26.0", - "@testing-library/jest-dom": "^6.9.1", - "@testing-library/react": "^16.3.2", - "@types/react": "^18.2.0", - "@types/react-dom": "^18.2.0", - "@vitejs/plugin-react": "^5.2.0", - "jsdom": "^25.0.0", - "sass": "^1.100.0", - "vite": "6.4.3" - } -} diff --git a/packages/ui-extensions-dev-console/project.json b/packages/ui-extensions-dev-console/project.json deleted file mode 100644 index 36a8758f6b5..00000000000 --- a/packages/ui-extensions-dev-console/project.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "ui-extensions-dev-console", - "$schema": "../../node_modules/nx/schemas/project-schema.json", - "sourceRoot": "packages/ui-extensions-dev-console/src", - "projectType": "library", - "implicitDependencies": ["ui-extensions-server-kit", "ui-extensions-test-utils"], - "tags": ["scope:feature", "scope:ui-extensions"], - "targets": { - "clean": { - "executor": "nx:run-commands", - "options": { - "command": "pnpm rimraf dist/ ../app/assets/dev-console", - "cwd": "packages/ui-extensions-dev-console" - } - }, - "build": { - "inputs": ["production","^production", "{projectRoot}/index.html"], - "outputs": ["{workspaceRoot}/packages/app/assets/dev-console"], - "executor": "nx:run-commands", - "options": { - "command": "pnpm vite build", - "cwd": "packages/ui-extensions-dev-console" - } - }, - "lint": { - "executor": "nx:run-commands", - "options": { - "command": "pnpm eslint src tests", - "cwd": "packages/ui-extensions-dev-console" - } - }, - "lint:fix": { - "executor": "nx:run-commands", - "options": { - "command": "pnpm eslint src tests --fix", - "cwd": "packages/ui-extensions-dev-console" - } - }, - "dev": { - "executor": "nx:run-commands", - "options": { - "command": "pnpm vite dev", - "cwd": "packages/ui-extensions-dev-console" - } - } - } -} diff --git a/packages/ui-extensions-dev-console/src/App.tsx b/packages/ui-extensions-dev-console/src/App.tsx deleted file mode 100644 index a2b346a1c16..00000000000 --- a/packages/ui-extensions-dev-console/src/App.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import {Layout} from '@/foundation/Layout' -import {Extensions} from '@/sections/Extensions' -import {Toast} from '@/foundation/Toast' -import {Theme} from '@/foundation/Theme' -import {ModalContainer} from '@/foundation/ModalContainer' -import {ExtensionServerProvider, isValidSurface} from '@shopify/ui-extensions-server-kit' -import React from 'react' - -function getConnectionUrl() { - if (import.meta.env.VITE_CONNECTION_URL) { - return import.meta.env.VITE_CONNECTION_URL.replace('https', 'wss').replace('/dev-console', '') - } - - const protocol = location.protocol === 'http:' ? 'ws:' : 'wss:' - - return `${protocol}//${location.host}/extensions` -} - -const surface = new URLSearchParams(location.search).get('surface') -const extensionServerOptions = { - connection: { - url: getConnectionUrl(), - }, - surface: isValidSurface(surface) ? surface : undefined, -} - -function App() { - return ( - - - - - - - - - - ) -} - -export default App diff --git a/packages/ui-extensions-dev-console/src/assets/favicon/android-chrome-192x192.png b/packages/ui-extensions-dev-console/src/assets/favicon/android-chrome-192x192.png deleted file mode 100644 index 3cc6394394d..00000000000 Binary files a/packages/ui-extensions-dev-console/src/assets/favicon/android-chrome-192x192.png and /dev/null differ diff --git a/packages/ui-extensions-dev-console/src/assets/favicon/android-chrome-512x512.png b/packages/ui-extensions-dev-console/src/assets/favicon/android-chrome-512x512.png deleted file mode 100644 index e5f16610c79..00000000000 Binary files a/packages/ui-extensions-dev-console/src/assets/favicon/android-chrome-512x512.png and /dev/null differ diff --git a/packages/ui-extensions-dev-console/src/assets/favicon/apple-touch-icon.png b/packages/ui-extensions-dev-console/src/assets/favicon/apple-touch-icon.png deleted file mode 100644 index 052751fbdc0..00000000000 Binary files a/packages/ui-extensions-dev-console/src/assets/favicon/apple-touch-icon.png and /dev/null differ diff --git a/packages/ui-extensions-dev-console/src/assets/favicon/browserconfig.xml b/packages/ui-extensions-dev-console/src/assets/favicon/browserconfig.xml deleted file mode 100644 index b3930d0f047..00000000000 --- a/packages/ui-extensions-dev-console/src/assets/favicon/browserconfig.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - #da532c - - - diff --git a/packages/ui-extensions-dev-console/src/assets/favicon/favicon-16x16.png b/packages/ui-extensions-dev-console/src/assets/favicon/favicon-16x16.png deleted file mode 100644 index 025d625d564..00000000000 Binary files a/packages/ui-extensions-dev-console/src/assets/favicon/favicon-16x16.png and /dev/null differ diff --git a/packages/ui-extensions-dev-console/src/assets/favicon/favicon-32x32.png b/packages/ui-extensions-dev-console/src/assets/favicon/favicon-32x32.png deleted file mode 100644 index 7ce0004d03b..00000000000 Binary files a/packages/ui-extensions-dev-console/src/assets/favicon/favicon-32x32.png and /dev/null differ diff --git a/packages/ui-extensions-dev-console/src/assets/favicon/favicon.ico b/packages/ui-extensions-dev-console/src/assets/favicon/favicon.ico deleted file mode 100644 index 3ec66878753..00000000000 Binary files a/packages/ui-extensions-dev-console/src/assets/favicon/favicon.ico and /dev/null differ diff --git a/packages/ui-extensions-dev-console/src/assets/favicon/mstile-144x144.png b/packages/ui-extensions-dev-console/src/assets/favicon/mstile-144x144.png deleted file mode 100644 index 55913de71a2..00000000000 Binary files a/packages/ui-extensions-dev-console/src/assets/favicon/mstile-144x144.png and /dev/null differ diff --git a/packages/ui-extensions-dev-console/src/assets/favicon/mstile-150x150.png b/packages/ui-extensions-dev-console/src/assets/favicon/mstile-150x150.png deleted file mode 100644 index bc08fb0d24d..00000000000 Binary files a/packages/ui-extensions-dev-console/src/assets/favicon/mstile-150x150.png and /dev/null differ diff --git a/packages/ui-extensions-dev-console/src/assets/favicon/mstile-310x150.png b/packages/ui-extensions-dev-console/src/assets/favicon/mstile-310x150.png deleted file mode 100644 index 2a7fc63273c..00000000000 Binary files a/packages/ui-extensions-dev-console/src/assets/favicon/mstile-310x150.png and /dev/null differ diff --git a/packages/ui-extensions-dev-console/src/assets/favicon/mstile-310x310.png b/packages/ui-extensions-dev-console/src/assets/favicon/mstile-310x310.png deleted file mode 100644 index c377c7ce521..00000000000 Binary files a/packages/ui-extensions-dev-console/src/assets/favicon/mstile-310x310.png and /dev/null differ diff --git a/packages/ui-extensions-dev-console/src/assets/favicon/mstile-70x70.png b/packages/ui-extensions-dev-console/src/assets/favicon/mstile-70x70.png deleted file mode 100644 index 2b0ac78ce96..00000000000 Binary files a/packages/ui-extensions-dev-console/src/assets/favicon/mstile-70x70.png and /dev/null differ diff --git a/packages/ui-extensions-dev-console/src/assets/favicon/safari-pinned-tab.svg b/packages/ui-extensions-dev-console/src/assets/favicon/safari-pinned-tab.svg deleted file mode 100644 index af62000f0a6..00000000000 --- a/packages/ui-extensions-dev-console/src/assets/favicon/safari-pinned-tab.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - -Created by potrace 1.14, written by Peter Selinger 2001-2017 - - - - - diff --git a/packages/ui-extensions-dev-console/src/assets/favicon/site.webmanifest b/packages/ui-extensions-dev-console/src/assets/favicon/site.webmanifest deleted file mode 100644 index b20abb7cbb2..00000000000 --- a/packages/ui-extensions-dev-console/src/assets/favicon/site.webmanifest +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "", - "short_name": "", - "icons": [ - { - "src": "/android-chrome-192x192.png", - "sizes": "192x192", - "type": "image/png" - }, - { - "src": "/android-chrome-512x512.png", - "sizes": "512x512", - "type": "image/png" - } - ], - "theme_color": "#ffffff", - "background_color": "#ffffff", - "display": "standalone" -} diff --git a/packages/ui-extensions-dev-console/src/components/Button/Button.module.scss b/packages/ui-extensions-dev-console/src/components/Button/Button.module.scss deleted file mode 100644 index b36d8841609..00000000000 --- a/packages/ui-extensions-dev-console/src/components/Button/Button.module.scss +++ /dev/null @@ -1,35 +0,0 @@ -.Button { - all: unset; - - padding: 0.3rem 0.8rem; - - display:flex; - gap: 0.6rem; - - line-height: 2rem; - font-weight: var(--dc-font-weight-500); - - background: var(--dc-color-grey-700); - border-radius: var(--dc-border-radius); - - cursor: pointer; - - &.WithIcon { - padding-right: 1rem; - } - - .Icon { - position: relative; - top: 0.1rem; - } - - &:hover, - &:focus { - background: var(--dc-color-grey-600); - } - - &[aria-pressed=true] { - background-color: var(--dc-color-blue-500); - } -} - diff --git a/packages/ui-extensions-dev-console/src/components/Button/Button.tsx b/packages/ui-extensions-dev-console/src/components/Button/Button.tsx deleted file mode 100644 index daff96a5ed9..00000000000 --- a/packages/ui-extensions-dev-console/src/components/Button/Button.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import * as styles from './Button.module.scss' -import {Icon, IconProps} from '../Icon/Icon.js' -import {classNames} from '@/utilities/css' -import React from 'react' - -interface ButtonProps extends React.HTMLProps { - icon?: { - source: IconProps['source'] - position: 'left' | 'right' - } - type: 'button' | 'submit' | 'reset' | undefined -} - -export function Button({className, selected, icon, children, ...props}: ButtonProps) { - const iconMarkup = icon ? ( - - - - ) : null - - return ( - - ) -} diff --git a/packages/ui-extensions-dev-console/src/components/Button/index.ts b/packages/ui-extensions-dev-console/src/components/Button/index.ts deleted file mode 100644 index 8486fd6d62d..00000000000 --- a/packages/ui-extensions-dev-console/src/components/Button/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './Button' diff --git a/packages/ui-extensions-dev-console/src/components/Icon/Icon.module.scss b/packages/ui-extensions-dev-console/src/components/Icon/Icon.module.scss deleted file mode 100644 index 94309f068d6..00000000000 --- a/packages/ui-extensions-dev-console/src/components/Icon/Icon.module.scss +++ /dev/null @@ -1,20 +0,0 @@ -.Icon { - display: block; - height: 2rem; - width: 2rem; - max-height: 100%; - max-width: 100%; -} - -svg { - position: relative; - display: block; - max-width: 100%; - max-height: 100%; - fill: var(--dc-color-white); - margin: 0 auto; -} - -.Muted { - fill: var(--dc-color-grey-500); -} diff --git a/packages/ui-extensions-dev-console/src/components/Icon/Icon.tsx b/packages/ui-extensions-dev-console/src/components/Icon/Icon.tsx deleted file mode 100644 index 65883124fc5..00000000000 --- a/packages/ui-extensions-dev-console/src/components/Icon/Icon.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import styles from './Icon.module.scss' -import {VisuallyHidden} from '../VisuallyHidden/VisuallyHidden.js' -import {classNames} from '@/utilities/css' -import React from 'react' - -export interface IconProps { - /** The SVG contents to display in the icon (icons should fit in a 20 × 20 pixel viewBox) */ - source: React.FunctionComponent> - - /** Descriptive text to be read to screenreaders */ - accessibilityLabel?: string - - /** Causes the SVG to be filled with a muted grey */ - muted?: boolean -} - -export function Icon({source, accessibilityLabel, muted = false}: IconProps) { - const SourceComponent = source - - return ( - <> - {accessibilityLabel} - - - - ) -} diff --git a/packages/ui-extensions-dev-console/src/components/Icon/index.ts b/packages/ui-extensions-dev-console/src/components/Icon/index.ts deleted file mode 100644 index 7aebbe9de7e..00000000000 --- a/packages/ui-extensions-dev-console/src/components/Icon/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './Icon' diff --git a/packages/ui-extensions-dev-console/src/components/IconButton/IconButton.module.scss b/packages/ui-extensions-dev-console/src/components/IconButton/IconButton.module.scss deleted file mode 100644 index be05e97e371..00000000000 --- a/packages/ui-extensions-dev-console/src/components/IconButton/IconButton.module.scss +++ /dev/null @@ -1,25 +0,0 @@ -.IconButton { - all: unset; - display: flex; - align-items: center; - - width: 2.4rem; - height: 2.4rem; - - background-color: var(--dc-color-grey-700); - border-radius: var(--dc-border-radius); - - cursor: pointer; - - &:hover, - &:focus { - background-color: var(--dc-color-grey-600); - } - - .Icon { - margin: 0 auto; - position:relative; - top: 0.1rem; - } -} - diff --git a/packages/ui-extensions-dev-console/src/components/IconButton/IconButton.tsx b/packages/ui-extensions-dev-console/src/components/IconButton/IconButton.tsx deleted file mode 100644 index d1fc0620fab..00000000000 --- a/packages/ui-extensions-dev-console/src/components/IconButton/IconButton.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import * as styles from './IconButton.module.scss' -import {Icon, IconProps} from '@/components/Icon' -import {classNames} from '@/utilities/css' -import React from 'react' - -interface IconButtonProps extends React.HTMLProps, IconProps { - type: 'button' | 'submit' | 'reset' | undefined -} - -export function IconButton({className, selected, source, accessibilityLabel, ...props}: IconButtonProps) { - return ( - - ) -} diff --git a/packages/ui-extensions-dev-console/src/components/IconButton/index.ts b/packages/ui-extensions-dev-console/src/components/IconButton/index.ts deleted file mode 100644 index a37a7fc4ae0..00000000000 --- a/packages/ui-extensions-dev-console/src/components/IconButton/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './IconButton' diff --git a/packages/ui-extensions-dev-console/src/components/Modal/Modal.module.scss b/packages/ui-extensions-dev-console/src/components/Modal/Modal.module.scss deleted file mode 100644 index d74fdb9796f..00000000000 --- a/packages/ui-extensions-dev-console/src/components/Modal/Modal.module.scss +++ /dev/null @@ -1,16 +0,0 @@ -.BodyWrapper { - display: flex; - flex-grow: 1; - overflow-x: hidden; - -webkit-overflow-scrolling: touch; - padding: 2.6rem 2.4rem; - - button { - background-color: var(--dc-color-grey-600); - } - - button:hover, - button:focus { - background-color: var(--dc-color-grey-500); - } -} diff --git a/packages/ui-extensions-dev-console/src/components/Modal/Modal.tsx b/packages/ui-extensions-dev-console/src/components/Modal/Modal.tsx deleted file mode 100644 index 2a7aa4453be..00000000000 --- a/packages/ui-extensions-dev-console/src/components/Modal/Modal.tsx +++ /dev/null @@ -1,59 +0,0 @@ -import styles from './Modal.module.scss' -import {Dialog, Header, Backdrop} from './components' -import {ModalContainerId} from '@/foundation/ModalContainer' -import {TransitionGroup} from 'react-transition-group' -import React, {useState} from 'react' -import {createPortal} from 'react-dom' - -export interface ModalProps { - /** Whether the modal is open or not */ - open: boolean - /** The content for the title of the modal */ - title: React.ReactElement | string - /** The content to display inside modal */ - children: React.ReactNode - /** Callback when the modal is closed */ - onClose(): void - /** Width of the Modal, default: 'large' */ - width?: 'small' | 'large' -} - -export function Modal({children, title, open, onClose, width = 'large'}: ModalProps) { - const [closing, setClosing] = useState(false) - - let dialog: React.ReactNode - let backdrop: React.ReactNode - - if (open) { - dialog = ( - -
- {title} -
-
{children}
-
- ) - - backdrop = - } - - const modalContainer = document.getElementById(ModalContainerId) - - if (modalContainer === null) { - if (open) { - // eslint-disable-next-line no-console - console.error(`Could not find element with id ${ModalContainerId} to render Modal inside`) - } - return null - } - - return createPortal( - <> - - {dialog} - - {backdrop} - , - modalContainer, - ) -} diff --git a/packages/ui-extensions-dev-console/src/components/Modal/components/Backdrop/Backdrop.module.scss b/packages/ui-extensions-dev-console/src/components/Modal/components/Backdrop/Backdrop.module.scss deleted file mode 100644 index 932a69ec144..00000000000 --- a/packages/ui-extensions-dev-console/src/components/Modal/components/Backdrop/Backdrop.module.scss +++ /dev/null @@ -1,16 +0,0 @@ -@keyframes opacity { - from {opacity: 0;} - to {opacity: 0.5;} -} - -.Backdrop { - position: fixed; - z-index: 10; - top: 0; - right: 0; - bottom: 0; - left: 0; - display: block; - background-color: var(--dc-color-grey-900); - animation: opacity 100ms 1 forwards; -} diff --git a/packages/ui-extensions-dev-console/src/components/Modal/components/Backdrop/Backdrop.test.tsx b/packages/ui-extensions-dev-console/src/components/Modal/components/Backdrop/Backdrop.test.tsx deleted file mode 100644 index 5e94bd6c8ac..00000000000 --- a/packages/ui-extensions-dev-console/src/components/Modal/components/Backdrop/Backdrop.test.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import {Backdrop} from '.' -import React from 'react' -import {render, fireEvent} from '@testing-library/react' - -describe('', () => { - const defaultProps = { - onClick: vi.fn(), - setClosing: vi.fn(), - } - - describe('onClick()', () => { - test('is called when the backdrop is clicked', () => { - const spy = vi.fn() - const {container} = render() - fireEvent.click(container.firstElementChild!) - expect(spy).toHaveBeenCalled() - }) - }) - - describe('onMouseDown', () => { - test('calls setClosing()', () => { - const spy = vi.fn() - const {container} = render() - fireEvent.mouseDown(container.firstElementChild!) - expect(spy).toHaveBeenCalledWith(true) - }) - }) - - describe('onMouseUp', () => { - test('calls setClosing()', () => { - const spy = vi.fn() - const {container} = render() - fireEvent.mouseUp(container.firstElementChild!) - expect(spy).toHaveBeenCalledWith(false) - }) - - test('calls onClick()', () => { - const spy = vi.fn() - const {container} = render() - fireEvent.mouseUp(container.firstElementChild!) - expect(spy).toHaveBeenCalled() - }) - }) -}) diff --git a/packages/ui-extensions-dev-console/src/components/Modal/components/Backdrop/Backdrop.tsx b/packages/ui-extensions-dev-console/src/components/Modal/components/Backdrop/Backdrop.tsx deleted file mode 100644 index 83b46432b0a..00000000000 --- a/packages/ui-extensions-dev-console/src/components/Modal/components/Backdrop/Backdrop.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import styles from './Backdrop.module.scss' -import React, {Dispatch, SetStateAction} from 'react' - -interface Props { - onClick(): void - setClosing: Dispatch> -} - -export function Backdrop({onClick, setClosing}: Props) { - const handleMouseDown = () => { - setClosing(true) - } - - const handleMouseUp = () => { - setClosing(false) - onClick() - } - - return ( - <> - {/* The backdrop is intentionally click-only without keyboard interaction */} -
- - ) -} diff --git a/packages/ui-extensions-dev-console/src/components/Modal/components/Backdrop/index.ts b/packages/ui-extensions-dev-console/src/components/Modal/components/Backdrop/index.ts deleted file mode 100644 index bca8f190b97..00000000000 --- a/packages/ui-extensions-dev-console/src/components/Modal/components/Backdrop/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './Backdrop' diff --git a/packages/ui-extensions-dev-console/src/components/Modal/components/Dialog/Dialog.module.scss b/packages/ui-extensions-dev-console/src/components/Modal/components/Dialog/Dialog.module.scss deleted file mode 100644 index 4c9ba4c9801..00000000000 --- a/packages/ui-extensions-dev-console/src/components/Modal/components/Dialog/Dialog.module.scss +++ /dev/null @@ -1,60 +0,0 @@ -.Container { - position: fixed; - z-index: 11; - top: 0; - right: 0; - bottom: 0; - left: 0; - display: flex; - flex-direction: column; - justify-content: center; - pointer-events: none; -} - -.Dialog:focus { - outline: 0; -} - -.Modal { - pointer-events: initial; - position: relative; - right: 0; - bottom: 0; - left: 0; - display: flex; - flex-direction: column; - width: 62rem; - margin: 0 auto; - max-height: calc(100vh - 6rem); - border-radius: var(--dc-border-radius-2); - background: var(--dc-color-grey-700); - box-shadow: 0 0 1px rgba(0, 0, 0, 0.2), 0 26px 80px rgba(0, 0, 0, 0.2); - - &.Width-large { - width: 62rem; - } - - &.Width-small { - width: 45rem; - } -} - -.animateFadeUp { - will-change: transform, opacity; - opacity: 1; - transform: translateY(0); - transition: transform 200ms, - opacity 200ms; - - &.entering, - &.exiting, - &.exited { - opacity: 0; - transform: translateY(20rem); - } - - &.entered { - opacity: 1; - transform: translateY(0); - } -} diff --git a/packages/ui-extensions-dev-console/src/components/Modal/components/Dialog/Dialog.tsx b/packages/ui-extensions-dev-console/src/components/Modal/components/Dialog/Dialog.tsx deleted file mode 100644 index 1d06b5a2cba..00000000000 --- a/packages/ui-extensions-dev-console/src/components/Modal/components/Dialog/Dialog.tsx +++ /dev/null @@ -1,79 +0,0 @@ -import styles from './Dialog.module.scss' -import {focusFirstFocusableNode} from '@/utilities/focus' -import {classNames} from '@/utilities/css' -import React, {useRef, SetStateAction, Dispatch, useLayoutEffect, useCallback} from 'react' -import {CSSTransition} from 'react-transition-group' - -enum Key { - Escape = 27, -} - -interface DialogProps { - labelledBy?: string - children?: React.ReactNode - onClose(): void - setClosing: Dispatch> - in: boolean - width: 'small' | 'large' -} - -export function Dialog({labelledBy, children, onClose, setClosing, width, ...cssTransitionProps}: DialogProps) { - const containerNode = useRef(null) - - const ensureFocusInsideModal = useCallback(() => { - // eslint-disable-next-line @typescript-eslint/no-unused-expressions - containerNode.current && - !containerNode.current.contains(document.activeElement) && - focusFirstFocusableNode(containerNode.current) - }, []) - - const handleKeyDown = (event: KeyboardEvent) => { - if (event.keyCode === Key.Escape) { - setClosing(true) - } - } - - const handleKeyUp = (event: KeyboardEvent) => { - if (event.keyCode === Key.Escape) { - setClosing(false) - onClose() - } - } - - useLayoutEffect(ensureFocusInsideModal, []) - - useLayoutEffect(() => { - document.addEventListener('keydown', handleKeyDown) - document.addEventListener('keyup', handleKeyUp) - return () => { - document.removeEventListener('keydown', handleKeyDown) - document.removeEventListener('keyup', handleKeyUp) - } - }, []) - - return ( - -
-
-
{children}
-
-
-
- ) -} - -const fadeUpClasses = { - appear: classNames(styles.animateFadeUp, styles.entering), - appearActive: classNames(styles.animateFadeUp, styles.entered), - enter: classNames(styles.animateFadeUp, styles.entering), - enterActive: classNames(styles.animateFadeUp, styles.entered), - exit: classNames(styles.animateFadeUp, styles.exiting), - exitActive: classNames(styles.animateFadeUp, styles.exited), -} diff --git a/packages/ui-extensions-dev-console/src/components/Modal/components/Dialog/index.ts b/packages/ui-extensions-dev-console/src/components/Modal/components/Dialog/index.ts deleted file mode 100644 index 8390808a2a1..00000000000 --- a/packages/ui-extensions-dev-console/src/components/Modal/components/Dialog/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './Dialog' diff --git a/packages/ui-extensions-dev-console/src/components/Modal/components/Header/Header.module.scss b/packages/ui-extensions-dev-console/src/components/Modal/components/Header/Header.module.scss deleted file mode 100644 index d1bb7a45a11..00000000000 --- a/packages/ui-extensions-dev-console/src/components/Modal/components/Header/Header.module.scss +++ /dev/null @@ -1,21 +0,0 @@ -.Header { - display: flex; - align-items: center; - flex-shrink: 0; - height: 6.2rem; - padding: 2rem 2rem 1.8rem 2rem; - border-bottom: 1px solid var(--dc-color-grey-600); -} - -.Title { - word-wrap: break-word; - word-break: break-word; - overflow-wrap: break-word; - flex: 1; - align-self: center; - font-size: 1.6rem; - - h2 { - font-weight: var(--dc-font-weight-600); - } -} diff --git a/packages/ui-extensions-dev-console/src/components/Modal/components/Header/Header.tsx b/packages/ui-extensions-dev-console/src/components/Modal/components/Header/Header.tsx deleted file mode 100644 index f7553b0a013..00000000000 --- a/packages/ui-extensions-dev-console/src/components/Modal/components/Header/Header.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import styles from './Header.module.scss' -import {CloseButton} from './components' -import React from 'react' - -interface HeaderProps { - id: string - closing: boolean - children: React.ReactNode - onClose(): void -} - -export function Header({id, closing, children, onClose}: HeaderProps) { - return ( -
-
-

{children}

-
- -
- ) -} diff --git a/packages/ui-extensions-dev-console/src/components/Modal/components/Header/components/CloseButton/CloseButton.tsx b/packages/ui-extensions-dev-console/src/components/Modal/components/Header/components/CloseButton/CloseButton.tsx deleted file mode 100644 index 2c5c09af238..00000000000 --- a/packages/ui-extensions-dev-console/src/components/Modal/components/Header/components/CloseButton/CloseButton.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import en from './translations/en.json' -import {IconButton} from '@/components/IconButton/IconButton' -import {useI18n} from '@/hooks/useI18n' -import React from 'react' -import {XIcon} from '@shopify/polaris-icons' - -interface CloseButtonProps { - pressed?: boolean - onClick(): void -} - -export function CloseButton({pressed, onClick}: CloseButtonProps) { - const [i18n] = useI18n({ - id: 'ModalCloseButton', - fallback: en, - }) - - return ( - - ) -} diff --git a/packages/ui-extensions-dev-console/src/components/Modal/components/Header/components/CloseButton/index.ts b/packages/ui-extensions-dev-console/src/components/Modal/components/Header/components/CloseButton/index.ts deleted file mode 100644 index 83bba2d186c..00000000000 --- a/packages/ui-extensions-dev-console/src/components/Modal/components/Header/components/CloseButton/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './CloseButton' diff --git a/packages/ui-extensions-dev-console/src/components/Modal/components/Header/components/CloseButton/translations/en.json b/packages/ui-extensions-dev-console/src/components/Modal/components/Header/components/CloseButton/translations/en.json deleted file mode 100644 index 79943c42f2b..00000000000 --- a/packages/ui-extensions-dev-console/src/components/Modal/components/Header/components/CloseButton/translations/en.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "close": "Close modal" -} diff --git a/packages/ui-extensions-dev-console/src/components/Modal/components/Header/components/index.ts b/packages/ui-extensions-dev-console/src/components/Modal/components/Header/components/index.ts deleted file mode 100644 index 83bba2d186c..00000000000 --- a/packages/ui-extensions-dev-console/src/components/Modal/components/Header/components/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './CloseButton' diff --git a/packages/ui-extensions-dev-console/src/components/Modal/components/Header/index.ts b/packages/ui-extensions-dev-console/src/components/Modal/components/Header/index.ts deleted file mode 100644 index f8879953f9b..00000000000 --- a/packages/ui-extensions-dev-console/src/components/Modal/components/Header/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './Header' diff --git a/packages/ui-extensions-dev-console/src/components/Modal/components/index.ts b/packages/ui-extensions-dev-console/src/components/Modal/components/index.ts deleted file mode 100644 index 79e16aa59f5..00000000000 --- a/packages/ui-extensions-dev-console/src/components/Modal/components/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from './Backdrop' -export * from './Header/components/CloseButton' -export * from './Dialog' -export * from './Header' diff --git a/packages/ui-extensions-dev-console/src/components/Modal/index.ts b/packages/ui-extensions-dev-console/src/components/Modal/index.ts deleted file mode 100644 index 8d3bcd7a061..00000000000 --- a/packages/ui-extensions-dev-console/src/components/Modal/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './Modal' diff --git a/packages/ui-extensions-dev-console/src/components/Tooltip/Tooltip.module.css b/packages/ui-extensions-dev-console/src/components/Tooltip/Tooltip.module.css deleted file mode 100644 index 9a86246b421..00000000000 --- a/packages/ui-extensions-dev-console/src/components/Tooltip/Tooltip.module.css +++ /dev/null @@ -1,13 +0,0 @@ -.Tooltip { - display: inline-block; -} - -.Tooltip:hover { - cursor: help; -} - -.TooltipUnderline { - text-align: baseline; - border-bottom: 1px dotted var(--dc-color-grey-500); - margin-bottom: -1px; -} diff --git a/packages/ui-extensions-dev-console/src/components/Tooltip/Tooltip.tsx b/packages/ui-extensions-dev-console/src/components/Tooltip/Tooltip.tsx deleted file mode 100644 index 1d7363ce3fd..00000000000 --- a/packages/ui-extensions-dev-console/src/components/Tooltip/Tooltip.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import styles from './Tooltip.module.css' -import {TooltipPopover} from './TooltipPopover' -import {classNames} from '@/utilities/css' -import React, {useRef, useState} from 'react' - -interface TooltipProps { - children: JSX.Element | string - text: string -} - -export function Tooltip({children, text}: TooltipProps) { - const ref = useRef(null) - - const [isVisible, setIsVisible] = useState(false) - - const handleShow = () => { - if (!ref.current || isVisible) return - - // This is currently my best solution for avoid the tooltip-wrapped element - // from needing two tab presses to get past. I'm not sure if this is the best - // solution, but it works for now. - if (typeof children !== 'string') { - ;(ref.current.firstChild as HTMLElement).tabIndex = -1 - } - - setIsVisible(true) - } - - // This is part of the double-tab solution menmtioned above. Since we will - // never tab to the child, we can use the enter key to trigger the click. - // Foreseeable problem: if the child is an input, we will need to write a - // special case for that. Off the top of my head, we could probably just have a - // boolean prop that disables this behavior. - const handleEnter = (event: React.KeyboardEvent) => { - if (event.key === 'Enter') { - ;(ref.current?.firstChild as HTMLElement).click() - } - } - - return ( -
setIsVisible(false)} - onMouseLeave={() => setIsVisible(false)} - onKeyUp={handleEnter} - ref={ref} - tabIndex={0} - > - {children} - {isVisible && } -
- ) -} diff --git a/packages/ui-extensions-dev-console/src/components/Tooltip/TooltipPopover.module.css b/packages/ui-extensions-dev-console/src/components/Tooltip/TooltipPopover.module.css deleted file mode 100644 index fbabca9d50e..00000000000 --- a/packages/ui-extensions-dev-console/src/components/Tooltip/TooltipPopover.module.css +++ /dev/null @@ -1,20 +0,0 @@ -:root { - --tooltip-popover-max-width: 250px; -} - -.Popover { - position: fixed; - background-color: var(--dc-color-grey-600); - color: var(--dc-color-white); - font-weight: 400; - padding: 1rem; - border-radius: 4px; - width: max-content; - max-width: var(--tooltip-popover-max-width); - white-space: pre-wrap; - word-break: break-word; - word-wrap: break-word; - z-index: 9999; - box-shadow: 0px 3px 6px -3px rgba(23, 24, 24, 0.08), - 0px 8px 20px -4px rgba(23, 24, 24, 0.12); -} diff --git a/packages/ui-extensions-dev-console/src/components/Tooltip/TooltipPopover.tsx b/packages/ui-extensions-dev-console/src/components/Tooltip/TooltipPopover.tsx deleted file mode 100644 index 87b4cf833f7..00000000000 --- a/packages/ui-extensions-dev-console/src/components/Tooltip/TooltipPopover.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import styles from './TooltipPopover.module.css' -import React, {useLayoutEffect, useRef} from 'react' - -interface Position { - x: number - y: number -} - -interface TooltipPopoverProps { - text: string - targetRef: React.RefObject -} - -const TOOLTIP_VERTICAL_OFFSET = 10 - -export function TooltipPopover({targetRef, text}: TooltipPopoverProps) { - const ref = useRef(null) - - const getPositionRelativeToRef = (): Position => { - if (!targetRef.current) return {x: 0, y: 0} - - const {x, y, height} = targetRef.current.getBoundingClientRect() - const {scrollY, scrollX} = window - - return { - x: x + scrollX, - y: y + height + TOOLTIP_VERTICAL_OFFSET + scrollY, - } - } - - useLayoutEffect(() => { - if (!ref.current || !targetRef?.current) return - - // check if ref is still inside the viewport - let {x, y} = getPositionRelativeToRef() - const {innerWidth, innerHeight} = window - const {height, width} = ref.current.getBoundingClientRect() - - if (x + width > innerWidth) { - x -= width - targetRef.current.getBoundingClientRect().width - } - - if (y + height > innerHeight) { - y -= height + targetRef.current.getBoundingClientRect().height + 2 * TOOLTIP_VERTICAL_OFFSET - } - // end check - - ref.current.style.top = `${y}px` - ref.current.style.left = `${x}px` - }, []) - - return ( -
- {text} -
- ) -} diff --git a/packages/ui-extensions-dev-console/src/components/Tooltip/index.ts b/packages/ui-extensions-dev-console/src/components/Tooltip/index.ts deleted file mode 100644 index ba15f407377..00000000000 --- a/packages/ui-extensions-dev-console/src/components/Tooltip/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './Tooltip' diff --git a/packages/ui-extensions-dev-console/src/components/Tooltip/tests/Tooltip.test.tsx b/packages/ui-extensions-dev-console/src/components/Tooltip/tests/Tooltip.test.tsx deleted file mode 100644 index 237e57f03b3..00000000000 --- a/packages/ui-extensions-dev-console/src/components/Tooltip/tests/Tooltip.test.tsx +++ /dev/null @@ -1,49 +0,0 @@ -import {Tooltip} from '../Tooltip' -import React from 'react' -import {render, screen, fireEvent, act} from '@testing-library/react' - -const handleClick = vi.fn() - -const TextChildComponent = () => test -const ComponentChildComponent = () => ( - - - -) - -describe('', () => { - test.each([ - ['mouseEnter', 'mouseLeave'], - ['focus', 'blur'], - ] as const)('appears if hovered/focused/etc, hidden otherwise', (showEvent, hideEvent) => { - render() - - const trigger = screen.getByText('test') - - act(() => { - fireEvent[showEvent](trigger) - }) - - expect(screen.queryByRole('tooltip')).toBeInTheDocument() - - act(() => { - fireEvent[hideEvent](trigger) - }) - - expect(screen.queryByRole('tooltip')).not.toBeInTheDocument() - }) - - test('hitting enter triggers content onClick', () => { - render() - - const trigger = screen.getByText('Button').closest('div[tabindex]')! - - act(() => { - fireEvent.keyUp(trigger, {key: 'Enter'}) - }) - - expect(handleClick).toHaveBeenCalled() - }) -}) diff --git a/packages/ui-extensions-dev-console/src/components/VisuallyHidden/VisuallyHidden.module.scss b/packages/ui-extensions-dev-console/src/components/VisuallyHidden/VisuallyHidden.module.scss deleted file mode 100644 index 7d201609d31..00000000000 --- a/packages/ui-extensions-dev-console/src/components/VisuallyHidden/VisuallyHidden.module.scss +++ /dev/null @@ -1,12 +0,0 @@ -.VisuallyHidden { - // Need to make sure we override any existing styles. - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: 0 !important; - padding: 0 !important; - overflow: hidden !important; - clip-path: inset(50%) !important; - border: 0 !important; - white-space: nowrap !important; -} diff --git a/packages/ui-extensions-dev-console/src/components/VisuallyHidden/VisuallyHidden.tsx b/packages/ui-extensions-dev-console/src/components/VisuallyHidden/VisuallyHidden.tsx deleted file mode 100644 index 3bc7255cab4..00000000000 --- a/packages/ui-extensions-dev-console/src/components/VisuallyHidden/VisuallyHidden.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import styles from './VisuallyHidden.module.scss' -import React from 'react' - -interface Props { - children: React.ReactNode -} - -export function VisuallyHidden({children}: Props) { - return {children} -} diff --git a/packages/ui-extensions-dev-console/src/components/VisuallyHidden/index.ts b/packages/ui-extensions-dev-console/src/components/VisuallyHidden/index.ts deleted file mode 100644 index 06f81174b7a..00000000000 --- a/packages/ui-extensions-dev-console/src/components/VisuallyHidden/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './VisuallyHidden' diff --git a/packages/ui-extensions-dev-console/src/components/index.ts b/packages/ui-extensions-dev-console/src/components/index.ts deleted file mode 100644 index c98315c048e..00000000000 --- a/packages/ui-extensions-dev-console/src/components/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from './Button' -export * from './Icon' -export * from './IconButton' -export * from './Modal' -export * from './VisuallyHidden' diff --git a/packages/ui-extensions-dev-console/src/favicon.svg b/packages/ui-extensions-dev-console/src/favicon.svg deleted file mode 100644 index 37ef62370e4..00000000000 --- a/packages/ui-extensions-dev-console/src/favicon.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/packages/ui-extensions-dev-console/src/foundation/Layout/Layout.module.scss b/packages/ui-extensions-dev-console/src/foundation/Layout/Layout.module.scss deleted file mode 100644 index 18ffff4d7bf..00000000000 --- a/packages/ui-extensions-dev-console/src/foundation/Layout/Layout.module.scss +++ /dev/null @@ -1,59 +0,0 @@ -.OuterContainer { - height: 100vh; - background: var(--dc-color-grey-900); - overflow: hidden; -} - -.DevTool { - display: flex; - flex-direction: column; - height: 100%; - width: 100%; - color: var(--dc-color-white); - font-weight: var(--dc-font-weight); - overflow: hidden; - - a { - color: var(--dc-color-blue-400); - } - - a:hover, - a:focus { - color: var(--dc-color-blue-500); - } - - main { - display: flex; - flex: 1; - overflow: hidden; - } - - svg { - width: 1.8rem; - } -} - -.Header { - display: flex; - justify-content: space-between; - height: 5.6rem; - padding: 1.5rem 1.6rem 1rem; - background: var(--dc-color-grey-800); - - svg { - fill: var(--dc-color-white); - } - - .HeaderContent { - display: flex; - align-items: center; - gap: 1.3rem; - } - - h1 { - font-weight: var(--dc-font-weight-700); - font-family: monospace; - font-size: 1.4rem; - } -} - diff --git a/packages/ui-extensions-dev-console/src/foundation/Layout/Layout.tsx b/packages/ui-extensions-dev-console/src/foundation/Layout/Layout.tsx deleted file mode 100644 index 8afaebb8022..00000000000 --- a/packages/ui-extensions-dev-console/src/foundation/Layout/Layout.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import en from './translations/en.json' -import * as styles from './Layout.module.scss' -import {isAppPreview} from '@/utilities/app-preview' -import {useI18n} from '@/hooks/useI18n' -import React from 'react' -import {WrenchIcon} from '@shopify/polaris-icons' - -interface Props { - children: React.ReactNode -} - -export function Layout({children}: Props) { - const [i18n] = useI18n({ - id: 'Layout', - fallback: en, - }) - - return ( -
-
- {!isAppPreview && ( -
-
- -

 {i18n.translate('title')}

-
-
- )} -
{children}
-
-
- ) -} diff --git a/packages/ui-extensions-dev-console/src/foundation/Layout/index.ts b/packages/ui-extensions-dev-console/src/foundation/Layout/index.ts deleted file mode 100644 index 19b84975dac..00000000000 --- a/packages/ui-extensions-dev-console/src/foundation/Layout/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './Layout' diff --git a/packages/ui-extensions-dev-console/src/foundation/Layout/translations/en.json b/packages/ui-extensions-dev-console/src/foundation/Layout/translations/en.json deleted file mode 100644 index 34318e02041..00000000000 --- a/packages/ui-extensions-dev-console/src/foundation/Layout/translations/en.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "title": "Developer Console", - "close": "Close Developer Console", - "nav": { - "extensions": "Extensions" - } -} diff --git a/packages/ui-extensions-dev-console/src/foundation/ModalContainer/ModalContainer.tsx b/packages/ui-extensions-dev-console/src/foundation/ModalContainer/ModalContainer.tsx deleted file mode 100644 index 578a4df8899..00000000000 --- a/packages/ui-extensions-dev-console/src/foundation/ModalContainer/ModalContainer.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import React from 'react' - -export const ModalContainerId = 'modal-container' - -export function ModalContainer() { - return
-} diff --git a/packages/ui-extensions-dev-console/src/foundation/ModalContainer/index.ts b/packages/ui-extensions-dev-console/src/foundation/ModalContainer/index.ts deleted file mode 100644 index 7d3f764b544..00000000000 --- a/packages/ui-extensions-dev-console/src/foundation/ModalContainer/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './ModalContainer' diff --git a/packages/ui-extensions-dev-console/src/foundation/Theme/Reset.scss b/packages/ui-extensions-dev-console/src/foundation/Theme/Reset.scss deleted file mode 100644 index bfa16659f3e..00000000000 --- a/packages/ui-extensions-dev-console/src/foundation/Theme/Reset.scss +++ /dev/null @@ -1,70 +0,0 @@ -@charset "UTF-8"; -:root { - --polaris-version-number: '6.6.0'; - --polaris-animation-skeleton-shimmer: polaris-SkeletonShimmerAnimation; -} - -html, -body { - font-size: 1.3rem; - font-weight: 400; - line-height: 2rem; - text-transform: initial; - letter-spacing: initial; - font-weight: 400; - color: var(--p-text); -} - -html, -body, -button { - font-family: -apple-system, BlinkMacSystemFont, San Francisco, Segoe UI, Roboto, Helvetica Neue, sans-serif; -} - -html { - position: relative; - font-size: 62.5%; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - -webkit-text-size-adjust: 100%; - text-size-adjust: 100%; - text-rendering: optimizeLegibility; -} - -body { - min-height: 100%; - margin: 0; - padding: 0; - background-color: #f4f6f8; -} - -@media print { - body { - background-color: transparent !important; - } -} - -*, -*::before, -*::after { - box-sizing: border-box; -} - -h1, -h2, -h3, -h4, -h5, -h6, -p { - margin: 0; - font-size: 1em; - font-weight: 400; -} - -button::-moz-focus-inner, -[type='button']::-moz-focus-inner, -[type='reset']::-moz-focus-inner, -[type='submit']::-moz-focus-inner { - border-style: none; -} diff --git a/packages/ui-extensions-dev-console/src/foundation/Theme/Theme.module.scss b/packages/ui-extensions-dev-console/src/foundation/Theme/Theme.module.scss deleted file mode 100644 index 30abf1f96b4..00000000000 --- a/packages/ui-extensions-dev-console/src/foundation/Theme/Theme.module.scss +++ /dev/null @@ -1,34 +0,0 @@ -.Theme { - /* Grey/Black */ - --dc-color-grey-900: rgb(13, 13, 13); - --dc-color-grey-800: rgb(25, 25, 25); - --dc-color-grey-700: rgb(36, 36, 36); - --dc-color-grey-600: rgb(49, 51, 53); - --dc-color-grey-500: rgb(120, 125, 129); - --dc-color-grey-400: rgb(157, 161, 164); - --dc-color-grey-100: rgb(235, 235, 235); - - /* Blue */ - --dc-color-blue-500: #36A3FF; - --dc-color-blue-400: rgb(91, 206, 255); - - /* White */ - --dc-color-white: rgb(255, 255, 255); - - /* Green */ - --dc-color-green: rgb(0, 244, 185); - - /* Red */ - --dc-color-red: rgb(255, 87, 77); - - /* Font */ - --dc-font-weight-400: 200; - --dc-font-weight-400: 400; - --dc-font-weight-500: 600; - --dc-font-weight-600: 600; - --dc-font-weight-700: 700; - - /* border */ - --dc-border-radius: 0.4rem; - --dc-border-radius-2: 0.8rem; -} diff --git a/packages/ui-extensions-dev-console/src/foundation/Theme/Theme.tsx b/packages/ui-extensions-dev-console/src/foundation/Theme/Theme.tsx deleted file mode 100644 index f4657b9a4c0..00000000000 --- a/packages/ui-extensions-dev-console/src/foundation/Theme/Theme.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import './Reset.scss' -import * as styles from './Theme.module.scss' -import React from 'react' - -interface Props { - children: React.ReactNode -} - -export function Theme({children}: Props) { - return
{children}
-} diff --git a/packages/ui-extensions-dev-console/src/foundation/Theme/index.ts b/packages/ui-extensions-dev-console/src/foundation/Theme/index.ts deleted file mode 100644 index 9590e591001..00000000000 --- a/packages/ui-extensions-dev-console/src/foundation/Theme/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './Theme' diff --git a/packages/ui-extensions-dev-console/src/foundation/Toast/Toast.module.scss b/packages/ui-extensions-dev-console/src/foundation/Toast/Toast.module.scss deleted file mode 100644 index ed8ada1703b..00000000000 --- a/packages/ui-extensions-dev-console/src/foundation/Toast/Toast.module.scss +++ /dev/null @@ -1,38 +0,0 @@ -.Toast { - /* Toast (See: https://fkhadra.github.io/react-toastify/how-to-style) */ - --toastify-color-dark: var(--dc-color-grey-700); - --toastify-color-info: var(--dc-color-blue-400); - --toastify-color-success: var(--dc-color-green); - --toastify-color-warning: var(--dc-color-red); - --toastify-color-error: var(--dc-color-red); - --toastify-color-transparent: rgba(255, 255, 255, 0.7); - - --toastify-icon-color-info: var(--dc-color-blue-400); - --toastify-icon-color-success: var(--dc-color-green); - --toastify-icon-color-warning: var(--dc-color-red); - --toastify-icon-color-error: var(--dc-color-red); - - --toastify-toast-width: 32rem; - --toastify-toast-background: var(--dc-color-white); - --toastify-toast-min-height: 4.4rem; - --toastify-toast-max-height: 4.4rem; - --toastify-z-index: 9999; - - --toastify-text-color-dark: var(--dc-color-white); - - /* Used only for colored theme */ - --toastify-text-color-info: var(--dc-color-white); - --toastify-text-color-success: var(--dc-color-white); - --toastify-text-color-warning: var(--dc-color-white); - --toastify-text-color-error: var(--dc-color-white); - - --toastify-spinner-color: var(--dc-color-grey-500); - --toastify-spinner-color-empty-area: var(--dc-color-white); - - /* Used when no type is provided */ - --toastify-color-progress-dark: var(--dc-color-blue-400); - --toastify-color-progress-info: var(--toastify-color-info); - --toastify-color-progress-success: var(--toastify-color-success); - --toastify-color-progress-warning: var(--toastify-color-warning); - --toastify-color-progress-error: var(--toastify-color-error); -} diff --git a/packages/ui-extensions-dev-console/src/foundation/Toast/Toast.tsx b/packages/ui-extensions-dev-console/src/foundation/Toast/Toast.tsx deleted file mode 100644 index fcdec072e02..00000000000 --- a/packages/ui-extensions-dev-console/src/foundation/Toast/Toast.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import * as styles from './Toast.module.scss' -import React from 'react' -import {ToastContainer} from 'react-toastify' -import 'react-toastify/dist/ReactToastify.css' - -export function Toast() { - return ( -
- - {/* react-toastify requires exactly this class. */} - {/* Inlining the style prevents the className from changing */} - -
- ) -} diff --git a/packages/ui-extensions-dev-console/src/foundation/Toast/index.ts b/packages/ui-extensions-dev-console/src/foundation/Toast/index.ts deleted file mode 100644 index c2014f70cc3..00000000000 --- a/packages/ui-extensions-dev-console/src/foundation/Toast/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './Toast' diff --git a/packages/ui-extensions-dev-console/src/hooks/useI18n.ts b/packages/ui-extensions-dev-console/src/hooks/useI18n.ts deleted file mode 100644 index 8033058a199..00000000000 --- a/packages/ui-extensions-dev-console/src/hooks/useI18n.ts +++ /dev/null @@ -1,62 +0,0 @@ -import React from 'react' - -type TranslationDictionary = Record -type Replacements = Record - -interface I18nTranslator { - translate(key: string, replacements?: Replacements): React.ReactNode -} - -function getNestedValue(obj: TranslationDictionary, key: string): string | undefined { - const result = key.split('.').reduce((current, segment) => { - if (current != null && typeof current === 'object') { - return (current as TranslationDictionary)[segment] - } - return undefined - }, obj) - return typeof result === 'string' ? result : undefined -} - -function interpolate(template: string, replacements?: Replacements): React.ReactNode { - if (!replacements) return template - - const hasReactNodes = Object.values(replacements).some((value) => React.isValidElement(value)) - - if (!hasReactNodes) { - return template.replace(/\{(\w+)\}/g, (match, key: string) => - key in replacements ? String(replacements[key]) : match, - ) - } - - const parts: React.ReactNode[] = [] - const regex = /\{(\w+)\}/g - let lastIndex = 0 - let match: RegExpExecArray | null - - while ((match = regex.exec(template)) !== null) { - if (match.index > lastIndex) { - parts.push(template.slice(lastIndex, match.index)) - } - const key = match[1] - parts.push(key in replacements ? replacements[key] : match[0]) - lastIndex = regex.lastIndex - } - - if (lastIndex < template.length) { - parts.push(template.slice(lastIndex)) - } - - return React.createElement(React.Fragment, null, ...parts) -} - -export function useI18n({fallback}: {id: string; fallback: TranslationDictionary}): [I18nTranslator] { - return [ - { - translate(key: string, replacements?: Replacements) { - const template = getNestedValue(fallback, key) - if (template == null) return key - return interpolate(template, replacements) - }, - }, - ] -} diff --git a/packages/ui-extensions-dev-console/src/main.tsx b/packages/ui-extensions-dev-console/src/main.tsx deleted file mode 100644 index 77868af88f3..00000000000 --- a/packages/ui-extensions-dev-console/src/main.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import App from './App' -import React from 'react' -import {createRoot} from 'react-dom/client' - -createRoot(document.getElementById('root')!).render( - - - , -) diff --git a/packages/ui-extensions-dev-console/src/sections/Extensions/Extensions.module.scss b/packages/ui-extensions-dev-console/src/sections/Extensions/Extensions.module.scss deleted file mode 100644 index e55383ee360..00000000000 --- a/packages/ui-extensions-dev-console/src/sections/Extensions/Extensions.module.scss +++ /dev/null @@ -1,57 +0,0 @@ - -.Intro { - height: 5.6rem; - padding: 2.2rem 1.8rem 1.5rem; - line-height: 1.6rem; - color: 1px solid var(--dc-color-grey-100); - border-bottom: 1px solid var(--dc-color-grey-600); -} - -.ExtensionList { - width: 100%; - overflow: auto; - flex: 1; - - table { - text-align: left; - width: 100%; - border-collapse: collapse; - } - - th { - vertical-align: middle; - } -} - -.ExtensionList.isAppPreview { - font-size: 1.1rem; - th { - color: #808689; - } - th:first-child, - td:first-child { - padding-left: 2rem - } - th, td { - padding-top: .5rem; - padding-bottom: .5rem; - vertical-align: middle; - } -} - -.WithIcon { - display: inline-grid; - grid-template-columns: auto auto; - grid-gap: 6px; -} - -.Empty { - width: 100%; - text-align: center; - padding: 1.5rem; -} - -.ActionGroup { - display: flex; - justify-content: flex-end; -} diff --git a/packages/ui-extensions-dev-console/src/sections/Extensions/Extensions.test.tsx b/packages/ui-extensions-dev-console/src/sections/Extensions/Extensions.test.tsx deleted file mode 100644 index 00fcd44e9b1..00000000000 --- a/packages/ui-extensions-dev-console/src/sections/Extensions/Extensions.test.tsx +++ /dev/null @@ -1,58 +0,0 @@ -import {Extensions} from './Extensions.js' -import {DefaultProviders} from 'tests/DefaultProviders' -import React from 'react' -import {ExtensionServerClient} from '@shopify/ui-extensions-server-kit' -import {mockExtension} from '@shopify/ui-extensions-server-kit/testing' -import {render, withProviders} from '@shopify/ui-extensions-test-utils' -import {screen} from '@testing-library/react' - -vi.mock('./components', () => ({ - ExtensionRow: ({uuid}: any) =>
, - PostPurchaseRow: () => null, - AppHomeRow: () =>
, - Row: () => null, -})) - -describe('', () => { - let client: ExtensionServerClient - - beforeEach(() => { - client = new ExtensionServerClient({connection: {url: 'ws://localhost'}}) - }) - - afterEach(() => { - client.connection.close() - }) - - test('renders a blank slate if there is no data', async () => { - render(, withProviders(DefaultProviders)) - - expect(screen.queryByRole('table')).not.toBeInTheDocument() - expect(screen.queryByTestId('app-home-row')).not.toBeInTheDocument() - expect(screen.queryByTestId(/extension-row-/)).not.toBeInTheDocument() - }) - - test('renders ', async () => { - const extensions = [mockExtension()] - - render(, withProviders(DefaultProviders), { - state: {extensions, store: 'shop1.myshopify.io', app: {url: 'mock.url', title: 'Mock App Title'}}, - }) - - expect(screen.getByTestId('app-home-row')).toBeInTheDocument() - }) - - test('renders an for each Extension', async () => { - const extension1 = mockExtension() - const extension2 = mockExtension() - const extensions = [extension1, extension2] - - render(, withProviders(DefaultProviders), { - state: {extensions, store: 'shop1.myshopify.io'}, - }) - - expect(screen.getAllByTestId(/extension-row-/)).toHaveLength(extensions.length) - expect(screen.getByTestId(`extension-row-${extension1.uuid}`)).toBeInTheDocument() - expect(screen.getByTestId(`extension-row-${extension2.uuid}`)).toBeInTheDocument() - }) -}) diff --git a/packages/ui-extensions-dev-console/src/sections/Extensions/Extensions.tsx b/packages/ui-extensions-dev-console/src/sections/Extensions/Extensions.tsx deleted file mode 100644 index ae3bb68617d..00000000000 --- a/packages/ui-extensions-dev-console/src/sections/Extensions/Extensions.tsx +++ /dev/null @@ -1,61 +0,0 @@ -import * as styles from './Extensions.module.scss' - -import {ExtensionRow, AppHomeRow, Row} from './components' -import en from './translations/en.json' -import {useExtensions} from './hooks/useExtensions' -import {useExtensionServerOptions} from './hooks/useExtensionServerOptions' -import {useApp} from './hooks/useApp' - -import {isEmbedded} from '@/utilities/embedded' -import {isAppPreview} from '@/utilities/app-preview' -import {useI18n} from '@/hooks/useI18n' -import React from 'react' - -export function Extensions() { - const [i18n] = useI18n({ - id: 'Extensions', - fallback: en, - }) - - const extensionIds = useExtensions() - const {surface} = useExtensionServerOptions() - const {app} = useApp() - - if (!extensionIds.length) { - return ( -
- {surface ? i18n.translate('errors.noExtensionsForSurface', {surface}) : i18n.translate('errors.noExtensions')} -
- ) - } - - const introMessage = i18n.translate('intro', { - installLink: ( - - {i18n.translate('introInstallCta')} - - ), - }) - - return ( -
- {isEmbedded ? null :

{introMessage}

} - - - - - - - - - - - - {extensionIds.map(({uuid}) => { - return - })} - -
{i18n.translate('extensionList.handle')}{i18n.translate('extensionList.preview')}{i18n.translate('extensionList.mobile')}{i18n.translate('extensionList.status')}
-
- ) -} diff --git a/packages/ui-extensions-dev-console/src/sections/Extensions/components/AppHomeRow/AppHomeRow.module.scss b/packages/ui-extensions-dev-console/src/sections/Extensions/components/AppHomeRow/AppHomeRow.module.scss deleted file mode 100644 index 9dc0addfd06..00000000000 --- a/packages/ui-extensions-dev-console/src/sections/Extensions/components/AppHomeRow/AppHomeRow.module.scss +++ /dev/null @@ -1,3 +0,0 @@ -.Title { - font-weight: var(--dc-font-weight-400); -} diff --git a/packages/ui-extensions-dev-console/src/sections/Extensions/components/AppHomeRow/AppHomeRow.test.tsx b/packages/ui-extensions-dev-console/src/sections/Extensions/components/AppHomeRow/AppHomeRow.test.tsx deleted file mode 100644 index 5b748dcad2b..00000000000 --- a/packages/ui-extensions-dev-console/src/sections/Extensions/components/AppHomeRow/AppHomeRow.test.tsx +++ /dev/null @@ -1,86 +0,0 @@ -import {AppHomeRow} from '.' -import {DefaultProviders} from 'tests/DefaultProviders' -import React from 'react' -import {render, withProviders} from '@shopify/ui-extensions-test-utils' -import {screen, fireEvent} from '@testing-library/react' - -const {QRCodeModalMock, PreviewLinkMock} = vi.hoisted(() => ({ - QRCodeModalMock: vi.fn(), - PreviewLinkMock: vi.fn(), -})) - -vi.mock('..', () => ({ - NotApplicable: () => null, - PreviewLink: (props: any) => { - PreviewLinkMock(props) - return null - }, - QRCodeModal: (props: any) => { - QRCodeModalMock(props) - return
- }, - Row: ({children}: any) => {children}, -})) - -describe('', () => { - const defaultState = { - app: {url: 'mock.url', title: 'Mock App Title'}, - } - - beforeEach(() => { - QRCodeModalMock.mockClear() - PreviewLinkMock.mockClear() - }) - - test('renders a , closed by default', () => { - render(, withProviders(DefaultProviders), {state: defaultState}) - - expect(QRCodeModalMock).toHaveBeenLastCalledWith(expect.objectContaining({code: undefined})) - }) - - test('Opens and closes the ', () => { - render(, withProviders(DefaultProviders), {state: defaultState}) - - fireEvent.click(screen.getByText('View mobile')) - - expect(QRCodeModalMock).toHaveBeenLastCalledWith( - expect.objectContaining({ - code: { - url: defaultState.app.url, - type: 'home', - title: defaultState.app.title, - }, - }), - ) - - fireEvent.click(screen.getByTestId('qr-code-modal')) - - expect(QRCodeModalMock).toHaveBeenLastCalledWith(expect.objectContaining({code: undefined})) - }) - - test("renders a with the resource url set to the app's handle if the surface has been set to 'admin'", () => { - const appState = { - app: {url: 'mock.url', title: 'Mock App Title', handle: 'my-app-handle'}, - } - render(, withProviders(DefaultProviders), { - state: appState, - client: {options: {surface: 'admin'}}, - }) - - expect(PreviewLinkMock).toHaveBeenLastCalledWith( - expect.objectContaining({resourceUrl: '/admin/apps/my-app-handle'}), - ) - }) - - test("renders a without a resource url if the surface has not been set to 'admin'", () => { - const appState = { - app: {url: 'mock.url', title: 'Mock App Title', handle: 'my-app-handle'}, - } - render(, withProviders(DefaultProviders), { - state: appState, - client: {options: {surface: 'checkout'}}, - }) - - expect(PreviewLinkMock).toHaveBeenLastCalledWith(expect.objectContaining({resourceUrl: undefined})) - }) -}) diff --git a/packages/ui-extensions-dev-console/src/sections/Extensions/components/AppHomeRow/AppHomeRow.tsx b/packages/ui-extensions-dev-console/src/sections/Extensions/components/AppHomeRow/AppHomeRow.tsx deleted file mode 100644 index e07331f0dc0..00000000000 --- a/packages/ui-extensions-dev-console/src/sections/Extensions/components/AppHomeRow/AppHomeRow.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import en from './translations/en.json' -import * as styles from './AppHomeRow.module.scss' -import {NotApplicable, PreviewLink, QRCodeModal, Row} from '..' -import {useApp} from '../../hooks/useApp' -import {useExtensionServerOptions} from '../../hooks/useExtensionServerOptions.js' - -import {Button} from '@/components' -import {useI18n} from '@/hooks/useI18n' -import React, {useState} from 'react' - -export function AppHomeRow() { - const [showModal, setShowModal] = useState(false) - const [i18n] = useI18n({ - id: 'AppHomeRow', - fallback: en, - }) - - const {surface} = useExtensionServerOptions() - const {app} = useApp() - - if (!app) { - return null - } - - const resourceUrl = surface === 'admin' && app.handle ? `/admin/apps/${app.handle}` : undefined - - return ( - - - {app.title} - - - - - - - setShowModal(false)} - /> - - - - - - ) -} diff --git a/packages/ui-extensions-dev-console/src/sections/Extensions/components/AppHomeRow/index.ts b/packages/ui-extensions-dev-console/src/sections/Extensions/components/AppHomeRow/index.ts deleted file mode 100644 index a076f280e35..00000000000 --- a/packages/ui-extensions-dev-console/src/sections/Extensions/components/AppHomeRow/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './AppHomeRow' diff --git a/packages/ui-extensions-dev-console/src/sections/Extensions/components/AppHomeRow/translations/en.json b/packages/ui-extensions-dev-console/src/sections/Extensions/components/AppHomeRow/translations/en.json deleted file mode 100644 index e6df290dbd8..00000000000 --- a/packages/ui-extensions-dev-console/src/sections/Extensions/components/AppHomeRow/translations/en.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "viewMobile": "View mobile" -} diff --git a/packages/ui-extensions-dev-console/src/sections/Extensions/components/ExtensionRow/ExtensionRow.module.scss b/packages/ui-extensions-dev-console/src/sections/Extensions/components/ExtensionRow/ExtensionRow.module.scss deleted file mode 100644 index 9dc0addfd06..00000000000 --- a/packages/ui-extensions-dev-console/src/sections/Extensions/components/ExtensionRow/ExtensionRow.module.scss +++ /dev/null @@ -1,3 +0,0 @@ -.Title { - font-weight: var(--dc-font-weight-400); -} diff --git a/packages/ui-extensions-dev-console/src/sections/Extensions/components/ExtensionRow/ExtensionRow.test.tsx b/packages/ui-extensions-dev-console/src/sections/Extensions/components/ExtensionRow/ExtensionRow.test.tsx deleted file mode 100644 index 973b9ced99f..00000000000 --- a/packages/ui-extensions-dev-console/src/sections/Extensions/components/ExtensionRow/ExtensionRow.test.tsx +++ /dev/null @@ -1,148 +0,0 @@ -import {ExtensionRow} from '.' -import {DefaultProviders} from 'tests/DefaultProviders' -import React from 'react' -import {render, withProviders} from '@shopify/ui-extensions-test-utils' -import {screen, fireEvent} from '@testing-library/react' -import {mockExtension} from '@shopify/ui-extensions-server-kit/testing' - -const {QRCodeModalMock} = vi.hoisted(() => ({ - QRCodeModalMock: vi.fn(), -})) - -vi.mock('./components', () => ({ - PreviewLinks: () => null, -})) - -vi.mock('..', () => ({ - QRCodeModal: (props: any) => { - QRCodeModalMock(props) - return
- }, - Row: ({children, ...props}: any) => {children}, - Status: () => null, -})) - -describe('', () => { - const legacyAdminExtension = mockExtension({type: 'product_subscription', surface: 'admin'}) - const legacyPosExtension = mockExtension({type: 'pos_ui_extension', surface: 'point_of_sale'}) - const legacyPostPurchaseExtension = mockExtension({type: 'post_purchase', surface: 'post-checkout'}) - const legacyCheckoutExtension = mockExtension({type: 'checkout_ui_extension', surface: 'checkout'}) - const adminUiExtension = mockExtension({ - type: 'ui_extension', - surface: 'admin', - extensionPoints: [{target: 'admin.product-details.block.render'}], - }) - const checkoutUiExtension = mockExtension({ - type: 'ui_extension', - surface: 'checkout', - extensionPoints: [{target: 'purchase.checkout.cart-line-list.render-after'}], - }) - - const posUiExtension = mockExtension({ - type: 'ui_extension', - extensionPoints: [{target: 'pos.home.tile.render', surface: 'point_of_sale'}], - }) - - const defaultProps = { - uuid: legacyAdminExtension.uuid, - } - const defaultState = { - extensions: [ - legacyAdminExtension, - legacyPosExtension, - legacyPostPurchaseExtension, - legacyCheckoutExtension, - adminUiExtension, - checkoutUiExtension, - posUiExtension, - ], - } - - beforeEach(() => { - QRCodeModalMock.mockClear() - }) - - test('renders a , closed by default', () => { - render(, withProviders(DefaultProviders), {state: defaultState}) - - expect(QRCodeModalMock).toHaveBeenLastCalledWith(expect.objectContaining({code: undefined})) - }) - - test('renders a button to open the QRCodeModal for a POS UI extension', () => { - render(, withProviders(DefaultProviders), { - state: defaultState, - }) - - expect(screen.getByText('View mobile')).toBeInTheDocument() - }) - - test('renders a button to open the QRCodeModal for a legacy Admin extension', () => { - render(, withProviders(DefaultProviders), { - state: defaultState, - }) - - expect(screen.getByText('View mobile')).toBeInTheDocument() - }) - - test('renders a button to open the QRCodeModal for a legacy POS extension', () => { - render(, withProviders(DefaultProviders), { - state: defaultState, - }) - - expect(screen.getByText('View mobile')).toBeInTheDocument() - }) - - test('does not render a button to open the QRCodeModal for a legacy Post purchase extension', () => { - render( - , - withProviders(DefaultProviders), - {state: defaultState}, - ) - - expect(screen.queryByText('View mobile')).not.toBeInTheDocument() - }) - - test('does not render a button to open the QRCodeModal for a legacy Checkout extension', () => { - render(, withProviders(DefaultProviders), { - state: defaultState, - }) - - expect(screen.queryByText('View mobile')).not.toBeInTheDocument() - }) - - test('does not render a button to open the QRCodeModal for a Checkout UI extension', () => { - render(, withProviders(DefaultProviders), { - state: defaultState, - }) - - expect(screen.queryByText('View mobile')).not.toBeInTheDocument() - }) - - test('does not render a button to open the QRCodeModal for an Admin UI extension', () => { - render(, withProviders(DefaultProviders), { - state: defaultState, - }) - - expect(screen.queryByText('View mobile')).not.toBeInTheDocument() - }) - - test('Opens and closes the ', () => { - render(, withProviders(DefaultProviders), {state: defaultState}) - - fireEvent.click(screen.getByText('View mobile')) - - expect(QRCodeModalMock).toHaveBeenLastCalledWith( - expect.objectContaining({ - code: { - url: legacyAdminExtension.development.root.url, - type: legacyAdminExtension.surface, - title: legacyAdminExtension.handle, - }, - }), - ) - - fireEvent.click(screen.getByTestId('qr-code-modal')) - - expect(QRCodeModalMock).toHaveBeenLastCalledWith(expect.objectContaining({code: undefined})) - }) -}) diff --git a/packages/ui-extensions-dev-console/src/sections/Extensions/components/ExtensionRow/ExtensionRow.tsx b/packages/ui-extensions-dev-console/src/sections/Extensions/components/ExtensionRow/ExtensionRow.tsx deleted file mode 100644 index 1226470dfac..00000000000 --- a/packages/ui-extensions-dev-console/src/sections/Extensions/components/ExtensionRow/ExtensionRow.tsx +++ /dev/null @@ -1,75 +0,0 @@ -import {PreviewLinks} from './components' -import en from './translations/en.json' -import * as styles from './ExtensionRow.module.scss' -import {QRCodeModal, Row, Status} from '..' -import {useExtension} from '../../hooks/useExtension' -import {Button} from '@/components/Button' -import {useI18n} from '@/hooks/useI18n' -import React, {useState} from 'react' -import {ExtensionPayload, ExtensionPoint, isUIExtension} from '@shopify/ui-extensions-server-kit' - -interface Props { - uuid: ExtensionPayload['uuid'] -} - -function isUnifiedPOSUIExtension(extension: ExtensionPayload): boolean { - return (extension.extensionPoints as ExtensionPoint[])?.some((point) => { - return point.surface === 'point_of_sale' - }) -} - -function showMobileQrCode(extension: ExtensionPayload) { - if (isUIExtension(extension)) { - // We currently only support POS UI Extensions for mobile. We don't have support for Admin yet. - return isUnifiedPOSUIExtension(extension) - } - - return extension.surface === 'point_of_sale' || extension.surface === 'admin' -} - -export function ExtensionRow({uuid}: Props) { - const [showModal, setShowModal] = useState(false) - const [i18n] = useI18n({ - id: 'ExtensionRow', - fallback: en, - }) - - const {focus, unfocus, extension} = useExtension(uuid) - - if (!extension) { - return null - } - - return ( - - - {extension.handle} - - - - - - {showMobileQrCode(extension) && ( - - )} - setShowModal(false)} - /> - - - - - - ) -} diff --git a/packages/ui-extensions-dev-console/src/sections/Extensions/components/ExtensionRow/components/PreviewLinks/PreviewLinks.module.scss b/packages/ui-extensions-dev-console/src/sections/Extensions/components/ExtensionRow/components/PreviewLinks/PreviewLinks.module.scss deleted file mode 100644 index 259543545bf..00000000000 --- a/packages/ui-extensions-dev-console/src/sections/Extensions/components/ExtensionRow/components/PreviewLinks/PreviewLinks.module.scss +++ /dev/null @@ -1,19 +0,0 @@ -.PreviewLinksTitle { - display: block; - padding-bottom: 1rem; - font-weight: var(--dc-font-weight-500); -} - -.PreviewLinks { - display: flex; - flex-direction: column; - gap: 1rem; - padding-left: 0.8rem; - padding-right: 0.8rem; -} - -.PreviewLink { - display: flex; - align-items: center; - gap: 2.6rem; -} diff --git a/packages/ui-extensions-dev-console/src/sections/Extensions/components/ExtensionRow/components/PreviewLinks/PreviewLinks.tsx b/packages/ui-extensions-dev-console/src/sections/Extensions/components/ExtensionRow/components/PreviewLinks/PreviewLinks.tsx deleted file mode 100644 index 0ddeec12819..00000000000 --- a/packages/ui-extensions-dev-console/src/sections/Extensions/components/ExtensionRow/components/PreviewLinks/PreviewLinks.tsx +++ /dev/null @@ -1,63 +0,0 @@ -import en from './translations/en.json' -import * as styles from './PreviewLinks.module.scss' -import {NotApplicable, PreviewLink} from '../../..' -import {classNames} from '@/utilities/css' -import {useI18n} from '@/hooks/useI18n' -import React from 'react' -import {ExtensionPayload} from '@shopify/ui-extensions-server-kit' - -interface Props { - extension: ExtensionPayload - isUnifiedPOSUI: boolean -} - -export function PreviewLinks({extension, isUnifiedPOSUI}: Props) { - const [i18n] = useI18n({ - id: 'PreviewLinks', - fallback: en, - }) - - if (extension.surface === 'point_of_sale') { - return - } - - if (extension.type === 'ui_extension' || extension.type === 'checkout_post_purchase') { - const hasMultiple = extension.extensionPoints && extension.extensionPoints.length > 1 - const titleMarkup = hasMultiple ? ( - {i18n.translate('previewLinksTitle')}: - ) : null - - return ( - <> - {titleMarkup} - - {extension.extensionPoints?.map((extensionPoint) => { - if (typeof extensionPoint === 'string') { - return null - } - - const {root, target, resource} = extensionPoint - - return ( - - ) - })} - - - ) - } - - return ( - - ) -} diff --git a/packages/ui-extensions-dev-console/src/sections/Extensions/components/ExtensionRow/components/PreviewLinks/index.ts b/packages/ui-extensions-dev-console/src/sections/Extensions/components/ExtensionRow/components/PreviewLinks/index.ts deleted file mode 100644 index 32165211d7d..00000000000 --- a/packages/ui-extensions-dev-console/src/sections/Extensions/components/ExtensionRow/components/PreviewLinks/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './PreviewLinks' diff --git a/packages/ui-extensions-dev-console/src/sections/Extensions/components/ExtensionRow/components/PreviewLinks/translations/en.json b/packages/ui-extensions-dev-console/src/sections/Extensions/components/ExtensionRow/components/PreviewLinks/translations/en.json deleted file mode 100644 index 923acc44d78..00000000000 --- a/packages/ui-extensions-dev-console/src/sections/Extensions/components/ExtensionRow/components/PreviewLinks/translations/en.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "previewLinksTitle": "Extension targets" -} diff --git a/packages/ui-extensions-dev-console/src/sections/Extensions/components/ExtensionRow/components/index.ts b/packages/ui-extensions-dev-console/src/sections/Extensions/components/ExtensionRow/components/index.ts deleted file mode 100644 index 32165211d7d..00000000000 --- a/packages/ui-extensions-dev-console/src/sections/Extensions/components/ExtensionRow/components/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './PreviewLinks' diff --git a/packages/ui-extensions-dev-console/src/sections/Extensions/components/ExtensionRow/index.ts b/packages/ui-extensions-dev-console/src/sections/Extensions/components/ExtensionRow/index.ts deleted file mode 100644 index 723cfc9a214..00000000000 --- a/packages/ui-extensions-dev-console/src/sections/Extensions/components/ExtensionRow/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './ExtensionRow' diff --git a/packages/ui-extensions-dev-console/src/sections/Extensions/components/ExtensionRow/translations/en.json b/packages/ui-extensions-dev-console/src/sections/Extensions/components/ExtensionRow/translations/en.json deleted file mode 100644 index e6df290dbd8..00000000000 --- a/packages/ui-extensions-dev-console/src/sections/Extensions/components/ExtensionRow/translations/en.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "viewMobile": "View mobile" -} diff --git a/packages/ui-extensions-dev-console/src/sections/Extensions/components/NotApplicable/NotApplicable.module.scss b/packages/ui-extensions-dev-console/src/sections/Extensions/components/NotApplicable/NotApplicable.module.scss deleted file mode 100644 index 91e992c435d..00000000000 --- a/packages/ui-extensions-dev-console/src/sections/Extensions/components/NotApplicable/NotApplicable.module.scss +++ /dev/null @@ -1,3 +0,0 @@ -.NotApplicable { - font-weight: var(--dc-font-weight-200); -} diff --git a/packages/ui-extensions-dev-console/src/sections/Extensions/components/NotApplicable/NotApplicable.tsx b/packages/ui-extensions-dev-console/src/sections/Extensions/components/NotApplicable/NotApplicable.tsx deleted file mode 100644 index 24dd694b1de..00000000000 --- a/packages/ui-extensions-dev-console/src/sections/Extensions/components/NotApplicable/NotApplicable.tsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as styles from './NotApplicable.module.scss' -import React from 'react' - -export function NotApplicable() { - return -- -} diff --git a/packages/ui-extensions-dev-console/src/sections/Extensions/components/NotApplicable/index.ts b/packages/ui-extensions-dev-console/src/sections/Extensions/components/NotApplicable/index.ts deleted file mode 100644 index 29a10ae861b..00000000000 --- a/packages/ui-extensions-dev-console/src/sections/Extensions/components/NotApplicable/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './NotApplicable' diff --git a/packages/ui-extensions-dev-console/src/sections/Extensions/components/PreviewLink/PreviewLink.module.scss b/packages/ui-extensions-dev-console/src/sections/Extensions/components/PreviewLink/PreviewLink.module.scss deleted file mode 100644 index b212f3039ef..00000000000 --- a/packages/ui-extensions-dev-console/src/sections/Extensions/components/PreviewLink/PreviewLink.module.scss +++ /dev/null @@ -1,16 +0,0 @@ -.PreviewLinksTitle { - font-style: italic; -} - -.PreviewLinks { - display: grid; - padding-left: 0.6rem; - padding-right: 0.6rem; -} - -.PreviewLink { - display: flex; - align-items: center; - gap: 0.6rem; - font-weight: var(--dc-font-weight-500); -} diff --git a/packages/ui-extensions-dev-console/src/sections/Extensions/components/PreviewLink/PreviewLink.tsx b/packages/ui-extensions-dev-console/src/sections/Extensions/components/PreviewLink/PreviewLink.tsx deleted file mode 100644 index 0a77188365a..00000000000 --- a/packages/ui-extensions-dev-console/src/sections/Extensions/components/PreviewLink/PreviewLink.tsx +++ /dev/null @@ -1,66 +0,0 @@ -import en from './translations/en.json' -import * as styles from './PreviewLink.module.scss' -import {useNavigate} from '../../hooks/useNavigate.js' -import {IconButton} from '@/components/IconButton' -import {isEmbedded} from '@/utilities/embedded' -import {useI18n} from '@/hooks/useI18n' -import React from 'react' -import {ClipboardIcon} from '@shopify/polaris-icons' -import {toast} from 'react-toastify' - -interface Props { - rootUrl: string - resourceUrl?: string - title: string - hasLink?: boolean -} - -export function PreviewLink({rootUrl, resourceUrl, title, hasLink = true}: Props) { - const [i18n] = useI18n({ - id: 'PreviewLink', - fallback: en, - }) - - const navigate = useNavigate() - - const handleOpenRoot = (event: React.MouseEvent) => { - if (isEmbedded && resourceUrl) { - navigate(resourceUrl) - event.preventDefault() - } - } - - function handleCopyPreviewLink() { - navigator.clipboard - .writeText(rootUrl) - .then(() => { - toast(i18n.translate('copy.success'), {toastId: `copy-${rootUrl}`}) - }) - .catch(() => { - toast(i18n.translate('copy.error'), {type: 'error', toastId: `copy-${rootUrl}-error`}) - }) - } - - return ( - - {hasLink ? ( - - {title} - - ) : ( - title - )} - handleCopyPreviewLink()} - source={ClipboardIcon} - accessibilityLabel={i18n.translate('iconLabel', {title})} - /> - - ) -} diff --git a/packages/ui-extensions-dev-console/src/sections/Extensions/components/PreviewLink/index.ts b/packages/ui-extensions-dev-console/src/sections/Extensions/components/PreviewLink/index.ts deleted file mode 100644 index 2b5b9eeedc9..00000000000 --- a/packages/ui-extensions-dev-console/src/sections/Extensions/components/PreviewLink/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './PreviewLink' diff --git a/packages/ui-extensions-dev-console/src/sections/Extensions/components/PreviewLink/translations/en.json b/packages/ui-extensions-dev-console/src/sections/Extensions/components/PreviewLink/translations/en.json deleted file mode 100644 index 27f3fcf1ff3..00000000000 --- a/packages/ui-extensions-dev-console/src/sections/Extensions/components/PreviewLink/translations/en.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "copy": { - "success": "URL copied", - "error": "Couldn't copy URL" - }, - "linkLabel": "Preview {title}", - "iconLabel": "Copy preview link for {title} to clipboard" -} diff --git a/packages/ui-extensions-dev-console/src/sections/Extensions/components/QRCodeModal/QRCodeModal.module.scss b/packages/ui-extensions-dev-console/src/sections/Extensions/components/QRCodeModal/QRCodeModal.module.scss deleted file mode 100644 index f0f3e41bc53..00000000000 --- a/packages/ui-extensions-dev-console/src/sections/Extensions/components/QRCodeModal/QRCodeModal.module.scss +++ /dev/null @@ -1,40 +0,0 @@ -.Wrapper { - display: flex; - gap: 2.4rem; -} - -.LeftColumn { - width: 17.5rem; - display: flex; - flex-direction: column; - gap: 1.2rem; - line-height: 1.4rem; - font-size: 1.2rem; -} - -.QRCode { - display:block; - padding: 0.2rem 0.2rem 0 0.2rem; - background: var(--dc-color-white); -} - -.RightColumn { - font-size: 1.2rem; - line-height: 1.8rem; - display: flex; - flex-direction: column; - gap: 0.8rem; -} - -.UrlCta { - display: flex; - gap: 0.8rem; - align-items: center; -} - -.Url { - font-size: 1.1rem; - line-height: 1.6rem; - word-break: break-all; - color: var(--dc-color-grey-400); -} diff --git a/packages/ui-extensions-dev-console/src/sections/Extensions/components/QRCodeModal/QRCodeModal.test.tsx b/packages/ui-extensions-dev-console/src/sections/Extensions/components/QRCodeModal/QRCodeModal.test.tsx deleted file mode 100644 index ace0a495144..00000000000 --- a/packages/ui-extensions-dev-console/src/sections/Extensions/components/QRCodeModal/QRCodeModal.test.tsx +++ /dev/null @@ -1,108 +0,0 @@ -import {QRCodeModal} from './QRCodeModal' -import {DefaultProviders} from 'tests/DefaultProviders' -import React from 'react' -import {mockApp, mockExtension} from '@shopify/ui-extensions-server-kit/testing' -import {render, withProviders} from '@shopify/ui-extensions-test-utils' - -const {ModalMock, QRCodeMock} = vi.hoisted(() => ({ - ModalMock: vi.fn(), - QRCodeMock: vi.fn(), -})) - -vi.mock('@/components/Modal', () => ({ - Modal: (props: any) => { - ModalMock(props) - return props.children - }, -})) - -vi.mock('qrcode.react', () => ({ - QRCodeCanvas: (props: any) => { - QRCodeMock(props) - return - }, -})) - -describe('QRCodeModal', () => { - const defaultProps = { - onClose: vi.fn(), - code: { - url: 'mock.url.com', - title: 'mock ttle', - type: 'home' as const, - }, - } - - beforeEach(() => { - ModalMock.mockClear() - QRCodeMock.mockClear() - }) - - test('Renders closed if code is undefined', async () => { - const app = mockApp() - const store = 'example.com' - const extension = mockExtension() - - render(, withProviders(DefaultProviders), { - state: {app, store, extensions: [extension]}, - }) - - expect(ModalMock).toHaveBeenLastCalledWith(expect.objectContaining({open: false})) - }) - - test('Renders open if code is defined', async () => { - const app = mockApp() - const store = 'example.com' - const extension = mockExtension() - - render(, withProviders(DefaultProviders), { - state: {app, store, extensions: [extension]}, - }) - - expect(ModalMock).toHaveBeenLastCalledWith(expect.objectContaining({open: true, width: 'small'})) - }) - - test('renders QRCode for pos', async () => { - const app = mockApp() - const store = 'example.com' - const extension = mockExtension() - - render( - , - withProviders(DefaultProviders), - {state: {app, store, extensions: [extension]}}, - ) - - expect(QRCodeMock).toHaveBeenLastCalledWith( - expect.objectContaining({value: `com.shopify.pos://pos-ui-extensions?url=${defaultProps.code.url}`}), - ) - }) - - test('renders QRCode for app home', async () => { - const app = mockApp() - const store = 'example.com' - const extension = mockExtension() - - render(, withProviders(DefaultProviders), { - state: {app, store, extensions: [extension]}, - }) - - expect(QRCodeMock).toHaveBeenLastCalledWith(expect.objectContaining({value: app.mobileUrl})) - }) - - test('renders QRCode for mobile', async () => { - const app = mockApp() - const store = 'example.com' - const extension = mockExtension() - - render( - , - withProviders(DefaultProviders), - {state: {app, store, extensions: [extension]}}, - ) - - expect(QRCodeMock).toHaveBeenLastCalledWith( - expect.objectContaining({value: `https://${store}/admin/extensions-dev/mobile?url=${defaultProps.code.url}`}), - ) - }) -}) diff --git a/packages/ui-extensions-dev-console/src/sections/Extensions/components/QRCodeModal/QRCodeModal.tsx b/packages/ui-extensions-dev-console/src/sections/Extensions/components/QRCodeModal/QRCodeModal.tsx deleted file mode 100644 index b307592b48d..00000000000 --- a/packages/ui-extensions-dev-console/src/sections/Extensions/components/QRCodeModal/QRCodeModal.tsx +++ /dev/null @@ -1,98 +0,0 @@ -import * as styles from './QRCodeModal.module.scss' -import en from './translations/en.json' -import {useApp} from '../../hooks/useApp' -import {Modal, ModalProps} from '@/components/Modal' -import {IconButton} from '@/components/IconButton' -import {useI18n} from '@/hooks/useI18n' -import React, {useCallback, useMemo} from 'react' -import copyToClipboard from 'copy-to-clipboard' -import {QRCodeCanvas as QRCode} from 'qrcode.react' -import {toast} from 'react-toastify' -import {Surface} from '@shopify/ui-extensions-server-kit' -import {ClipboardIcon} from '@shopify/polaris-icons' - -interface Code { - url: string - title: string - type: Surface | 'home' -} - -interface QRCodeModalProps extends Pick { - code?: Code -} - -export function QRCodeModal({code, onClose}: QRCodeModalProps) { - const [i18n] = useI18n({ - id: 'QRCodeModal', - fallback: en, - }) - - return ( - - {code ? : null} - - ) -} - -function QRCodeContent({url, type}: Code) { - const [i18n] = useI18n({ - id: 'QRCodeModal', - fallback: en, - }) - - const {store, app} = useApp() - - const qrCodeURL = useMemo(() => { - // The Websocket hasn't loaded data yet. - // Shouldn't happen since you can't open modal without data, - // but just in case. - if (!app) { - return null - } - - // View a POS extension in POS app - if (type === 'point_of_sale') { - return `com.shopify.pos://pos-ui-extensions?url=${url}` - } - - // View app home (iframe) in mobile app - if (type === 'home') { - return app.mobileUrl - } - - // View a UI extension in mobile app - return `https://${store}/admin/extensions-dev/mobile?url=${url}` - }, [url, app, app?.mobileUrl]) - - const onButtonClick = useCallback(() => { - if (qrCodeURL && copyToClipboard(qrCodeURL)) { - toast(i18n.translate('qrcode.copied'), {toastId: `copy-qrcode-${qrCodeURL}`}) - } - }, [qrCodeURL]) - - if (!qrCodeURL) { - return null - } - - return ( -
- - - - - - - {i18n.translate('right.one')} - - {i18n.translate('right.two')}{' '} - - - -
- ) -} diff --git a/packages/ui-extensions-dev-console/src/sections/Extensions/components/QRCodeModal/index.ts b/packages/ui-extensions-dev-console/src/sections/Extensions/components/QRCodeModal/index.ts deleted file mode 100644 index d3ca24998d1..00000000000 --- a/packages/ui-extensions-dev-console/src/sections/Extensions/components/QRCodeModal/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './QRCodeModal' diff --git a/packages/ui-extensions-dev-console/src/sections/Extensions/components/QRCodeModal/translations/en.json b/packages/ui-extensions-dev-console/src/sections/Extensions/components/QRCodeModal/translations/en.json deleted file mode 100644 index 113d32e5e8c..00000000000 --- a/packages/ui-extensions-dev-console/src/sections/Extensions/components/QRCodeModal/translations/en.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "title": "View your work on mobile", - "right": { - "one": "Scan with your phone camera to see your work", - "two": "Or copy the URL to share:" - }, - "qrcode": { - "copy": "Copy link", - "copied": "Link copied", - "content": "Scan to test {title} on mobile" - } -} diff --git a/packages/ui-extensions-dev-console/src/sections/Extensions/components/Row/Row.module.scss b/packages/ui-extensions-dev-console/src/sections/Extensions/components/Row/Row.module.scss deleted file mode 100644 index 2971f76c3bd..00000000000 --- a/packages/ui-extensions-dev-console/src/sections/Extensions/components/Row/Row.module.scss +++ /dev/null @@ -1,28 +0,0 @@ -.Row { - border-bottom: 1px solid var(--dc-color-grey-600); - - th { - padding: 1.2rem 6.9rem 1.2rem 0; - line-height: 1.6rem; - font-weight: var(--dc-font-weight-600); - } - - &.Hoverable:hover { - background-color: rgba(3, 18, 49, 0.2); - } - - th:first-child, - td:first-child { - padding-left: 1.8rem - } - - td { - padding: 1.6rem 6.9rem 1.5rem 0; - vertical-align: top; - } - - th:last-child, - td:last-child { - padding-right: 1.8rem - } -} diff --git a/packages/ui-extensions-dev-console/src/sections/Extensions/components/Row/Row.tsx b/packages/ui-extensions-dev-console/src/sections/Extensions/components/Row/Row.tsx deleted file mode 100644 index f22e510955b..00000000000 --- a/packages/ui-extensions-dev-console/src/sections/Extensions/components/Row/Row.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import * as styles from './Row.module.scss' -import {classNames} from '@/utilities/css' -import React from 'react' - -interface Props extends React.HTMLProps { - children: React.ReactNode -} - -export function Row({className, children, ...props}: Props) { - const classes = classNames( - className, - styles.Row, - props.onMouseEnter || props.onMouseLeave ? styles.Hoverable : undefined, - ) - - return ( - - {children} - - ) -} diff --git a/packages/ui-extensions-dev-console/src/sections/Extensions/components/Row/index.ts b/packages/ui-extensions-dev-console/src/sections/Extensions/components/Row/index.ts deleted file mode 100644 index b27ce74573d..00000000000 --- a/packages/ui-extensions-dev-console/src/sections/Extensions/components/Row/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './Row' diff --git a/packages/ui-extensions-dev-console/src/sections/Extensions/components/Status/Status.module.scss b/packages/ui-extensions-dev-console/src/sections/Extensions/components/Status/Status.module.scss deleted file mode 100644 index 902638ca6ab..00000000000 --- a/packages/ui-extensions-dev-console/src/sections/Extensions/components/Status/Status.module.scss +++ /dev/null @@ -1,29 +0,0 @@ -.Status { - display: flex; - gap: 0.6rem; - align-items: center; - white-space: nowrap; - font-weight: var(--dc-font-weight-500); - color: var(--dc-color-grey-400) -} - -.success, -.disconnected, -.error { - display: inline-block; - width: 1.2rem; - height: 1.2rem; - border-radius: 50%; -} - -.success { - background: var(--dc-color-green); -} - -.disconnected { - background: var(--dc-color-red); -} - -.error { - background: var(--dc-color-red); -} diff --git a/packages/ui-extensions-dev-console/src/sections/Extensions/components/Status/Status.tsx b/packages/ui-extensions-dev-console/src/sections/Extensions/components/Status/Status.tsx deleted file mode 100644 index e7ea4fe1d20..00000000000 --- a/packages/ui-extensions-dev-console/src/sections/Extensions/components/Status/Status.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import en from './translations/en.json' -import * as styles from './Status.module.scss' -import {Tooltip} from '@/components/Tooltip' -import {useI18n} from '@/hooks/useI18n' -import React from 'react' -import {Status as StatusProp} from '@shopify/ui-extensions-server-kit' - -interface Props { - status: StatusProp -} - -export function Status({status}: Props) { - const [i18n] = useI18n({ - id: 'Status', - fallback: en, - }) - - const statusClass = status ? styles[status || 'error'] : styles.error - - return ( - - - {i18n.translate(`${status}.label`)} - - ) -} diff --git a/packages/ui-extensions-dev-console/src/sections/Extensions/components/Status/index.ts b/packages/ui-extensions-dev-console/src/sections/Extensions/components/Status/index.ts deleted file mode 100644 index af8e6f519fb..00000000000 --- a/packages/ui-extensions-dev-console/src/sections/Extensions/components/Status/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './Status' diff --git a/packages/ui-extensions-dev-console/src/sections/Extensions/components/Status/translations/en.json b/packages/ui-extensions-dev-console/src/sections/Extensions/components/Status/translations/en.json deleted file mode 100644 index d4f2cd68088..00000000000 --- a/packages/ui-extensions-dev-console/src/sections/Extensions/components/Status/translations/en.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "success": { - "label": "Connected", - "tooltipMessage": "No connection issues detected." - }, - "disconnected": { - "label": "Disconnected", - "tooltipMessage": "Extension not available. Return to the CLI and run the 'dev' command again." - }, - "error": { - "label": "Build Error", - "tooltipMessage": "Check the CLI logs about an error in your source code." - } -} diff --git a/packages/ui-extensions-dev-console/src/sections/Extensions/components/index.ts b/packages/ui-extensions-dev-console/src/sections/Extensions/components/index.ts deleted file mode 100644 index d82814d71af..00000000000 --- a/packages/ui-extensions-dev-console/src/sections/Extensions/components/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -export * from './AppHomeRow' -export * from './ExtensionRow' -export * from './NotApplicable' -export * from './PreviewLink' -export * from './QRCodeModal' -export * from './Row' -export * from './Status' diff --git a/packages/ui-extensions-dev-console/src/sections/Extensions/hooks/useApp.ts b/packages/ui-extensions-dev-console/src/sections/Extensions/hooks/useApp.ts deleted file mode 100644 index 3d65a694b99..00000000000 --- a/packages/ui-extensions-dev-console/src/sections/Extensions/hooks/useApp.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {useExtensionServerContext} from '@shopify/ui-extensions-server-kit' -import {useMemo} from 'react' - -export function useApp() { - const extensionServer = useExtensionServerContext() - const store = extensionServer.state.store - const app = extensionServer.state.app - - return useMemo( - () => ({ - store, - app, - }), - [JSON.stringify(app), store], - ) -} diff --git a/packages/ui-extensions-dev-console/src/sections/Extensions/hooks/useExtension.ts b/packages/ui-extensions-dev-console/src/sections/Extensions/hooks/useExtension.ts deleted file mode 100644 index 352e41abfa4..00000000000 --- a/packages/ui-extensions-dev-console/src/sections/Extensions/hooks/useExtension.ts +++ /dev/null @@ -1,19 +0,0 @@ -import {useExtensionServerContext} from '@shopify/ui-extensions-server-kit' -import {useMemo} from 'react' - -export function useExtension(uuid: string) { - const extensionServer = useExtensionServerContext() - const extensions = extensionServer.state.extensions - const extension = extensions.find((extension) => extension.uuid === uuid) - - return useMemo( - () => ({ - extension, - // dispatch events - focus: () => extensionServer.client.emit('focus', [{uuid}]), - unfocus: () => extensionServer.client.emit('unfocus'), - navigate: (url: string) => extensionServer.client.emit('navigate', {url}), - }), - [JSON.stringify(extensions)], - ) -} diff --git a/packages/ui-extensions-dev-console/src/sections/Extensions/hooks/useExtensionServerOptions.ts b/packages/ui-extensions-dev-console/src/sections/Extensions/hooks/useExtensionServerOptions.ts deleted file mode 100644 index 83459c03a5e..00000000000 --- a/packages/ui-extensions-dev-console/src/sections/Extensions/hooks/useExtensionServerOptions.ts +++ /dev/null @@ -1,9 +0,0 @@ -import {useExtensionServerContext} from '@shopify/ui-extensions-server-kit' -import {useMemo} from 'react' - -export function useExtensionServerOptions() { - const extensionServer = useExtensionServerContext() - const options = extensionServer.client.options - - return useMemo(() => options, [JSON.stringify(options)]) -} diff --git a/packages/ui-extensions-dev-console/src/sections/Extensions/hooks/useExtensions.ts b/packages/ui-extensions-dev-console/src/sections/Extensions/hooks/useExtensions.ts deleted file mode 100644 index a0d6e951417..00000000000 --- a/packages/ui-extensions-dev-console/src/sections/Extensions/hooks/useExtensions.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {useExtensionServerContext} from '@shopify/ui-extensions-server-kit' -import {useMemo} from 'react' - -export function useExtensions() { - const extensionServer = useExtensionServerContext() - - return useMemo( - () => - extensionServer.state.extensions - .sort((aExtension, bExtension) => { - if (aExtension.type.toLowerCase() === 'app_home') { - // aExtension will come first - return -1 - } - return aExtension.handle.localeCompare(bExtension.handle) - }) - .map(({uuid, type}) => ({ - uuid, - type, - })), - [extensionServer.state.extensions.length], - ) -} diff --git a/packages/ui-extensions-dev-console/src/sections/Extensions/hooks/useNavigate.tsx b/packages/ui-extensions-dev-console/src/sections/Extensions/hooks/useNavigate.tsx deleted file mode 100644 index f2a2d482cd5..00000000000 --- a/packages/ui-extensions-dev-console/src/sections/Extensions/hooks/useNavigate.tsx +++ /dev/null @@ -1,8 +0,0 @@ -import {useExtensionServerContext} from '@shopify/ui-extensions-server-kit' -import {useMemo} from 'react' - -export function useNavigate() { - const extensionServer = useExtensionServerContext() - - return useMemo(() => (url: string) => extensionServer.client.emit('navigate', {url}), [extensionServer.client.emit]) -} diff --git a/packages/ui-extensions-dev-console/src/sections/Extensions/index.tsx b/packages/ui-extensions-dev-console/src/sections/Extensions/index.tsx deleted file mode 100644 index f5eb0628836..00000000000 --- a/packages/ui-extensions-dev-console/src/sections/Extensions/index.tsx +++ /dev/null @@ -1 +0,0 @@ -export {Extensions} from './Extensions' diff --git a/packages/ui-extensions-dev-console/src/sections/Extensions/translations/en.json b/packages/ui-extensions-dev-console/src/sections/Extensions/translations/en.json deleted file mode 100644 index b74acaec960..00000000000 --- a/packages/ui-extensions-dev-console/src/sections/Extensions/translations/en.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "intro": "{installLink} to see changes live. Share preview links with teammates or clients.", - "introInstallCta": "Install your app", - "extensionList": { - "handle": "Handle", - "preview": "Preview link", - "mobile": "Mobile", - "view": "View", - "status": "Status", - "refresh": "Refresh", - "delete": "Delete" - }, - "tooltips": { - "viewColumnHeader": "Hide your local extensions to view what's in production." - }, - "bulkActions": { - "show": "Show", - "hide": "Hide", - "selectAll": "Select all", - "deselectAll": "Deselect all" - }, - "errors": { - "noExtensions": "No extensions found", - "noExtensionsForSurface": "No extensions found for the surface: {surface}" - } -} diff --git a/packages/ui-extensions-dev-console/src/typings.d.ts b/packages/ui-extensions-dev-console/src/typings.d.ts deleted file mode 100644 index 3c187f64726..00000000000 --- a/packages/ui-extensions-dev-console/src/typings.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -declare module '*.scss' -declare module '*.css' diff --git a/packages/ui-extensions-dev-console/src/utilities/app-preview.ts b/packages/ui-extensions-dev-console/src/utilities/app-preview.ts deleted file mode 100644 index 58df132c100..00000000000 --- a/packages/ui-extensions-dev-console/src/utilities/app-preview.ts +++ /dev/null @@ -1 +0,0 @@ -export const isAppPreview = window.top && new URLSearchParams(location.search).get('app-preview') === 'true' diff --git a/packages/ui-extensions-dev-console/src/utilities/css.ts b/packages/ui-extensions-dev-console/src/utilities/css.ts deleted file mode 100644 index fee907bef00..00000000000 --- a/packages/ui-extensions-dev-console/src/utilities/css.ts +++ /dev/null @@ -1,5 +0,0 @@ -type Falsy = boolean | undefined | null | 0 - -export function classNames(...classes: (string | Falsy)[]) { - return classes.filter(Boolean).join(' ') -} diff --git a/packages/ui-extensions-dev-console/src/utilities/embedded.ts b/packages/ui-extensions-dev-console/src/utilities/embedded.ts deleted file mode 100644 index 3dee6d7d444..00000000000 --- a/packages/ui-extensions-dev-console/src/utilities/embedded.ts +++ /dev/null @@ -1 +0,0 @@ -export const isEmbedded = window.top && new URLSearchParams(location.search).get('embedded') === 'true' diff --git a/packages/ui-extensions-dev-console/src/utilities/focus.ts b/packages/ui-extensions-dev-console/src/utilities/focus.ts deleted file mode 100644 index 35540715b9a..00000000000 --- a/packages/ui-extensions-dev-console/src/utilities/focus.ts +++ /dev/null @@ -1,24 +0,0 @@ -export function focusFirstFocusableNode(element: HTMLElement, onlyDescendants = true) { - findFirstFocusableNode(element, onlyDescendants)?.focus() -} - -function findFirstFocusableNode(element: HTMLElement, onlyDescendants = true): HTMLElement | null { - const focusableSelector = - 'a,frame,iframe,input:not([type=hidden]):not(:disabled),select:not(:disabled),textarea:not(:disabled),button:not(:disabled):not([aria-disabled="true"]):not([tabindex="-1"]),*[tabindex]' - - if (!onlyDescendants && matches(element, focusableSelector)) { - return element - } - - return element.querySelector(focusableSelector) -} - -function matches(node: HTMLElement, selector: string) { - if (node.matches) { - return node.matches(selector) - } - - const matches = (node.ownerDocument || document).querySelectorAll(selector) - let i = matches.length - while (--i >= 0 && matches.item(i) !== node) return i > -1 -} diff --git a/packages/ui-extensions-dev-console/tests/DefaultProviders.ts b/packages/ui-extensions-dev-console/tests/DefaultProviders.ts deleted file mode 100644 index ebc45214da0..00000000000 --- a/packages/ui-extensions-dev-console/tests/DefaultProviders.ts +++ /dev/null @@ -1,4 +0,0 @@ -import {MockExtensionServerProvider} from '@shopify/ui-extensions-server-kit/testing' -import {withProviders} from '@shopify/ui-extensions-test-utils' - -export const DefaultProviders = withProviders(MockExtensionServerProvider) diff --git a/packages/ui-extensions-dev-console/tests/css-transform.js b/packages/ui-extensions-dev-console/tests/css-transform.js deleted file mode 100644 index 5f95492bb30..00000000000 --- a/packages/ui-extensions-dev-console/tests/css-transform.js +++ /dev/null @@ -1,9 +0,0 @@ -module.exports = { - process() { - return 'module.exports = {};' - }, - getCacheKey() { - // The output is always the same. - return 'cssTransform' - }, -} diff --git a/packages/ui-extensions-dev-console/tests/setup.ts b/packages/ui-extensions-dev-console/tests/setup.ts deleted file mode 100644 index 834184042f5..00000000000 --- a/packages/ui-extensions-dev-console/tests/setup.ts +++ /dev/null @@ -1,17 +0,0 @@ -import '@testing-library/jest-dom/vitest' - -Object.defineProperty(window, 'matchMedia', { - writable: true, - value: vi.fn().mockImplementation((query) => ({ - matches: false, - media: query, - onchange: null, - addEventListener: vi.fn(), - removeEventListener: vi.fn(), - dispatchEvent: vi.fn(), - - // Deprecated - addListener: vi.fn(), - removeListener: vi.fn(), - })), -}) diff --git a/packages/ui-extensions-dev-console/tsconfig.base.json b/packages/ui-extensions-dev-console/tsconfig.base.json deleted file mode 100644 index 80526418126..00000000000 --- a/packages/ui-extensions-dev-console/tsconfig.base.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "compilerOptions": { - "target": "ESNext", - "lib": ["ESNext", "DOM"], - "types": ["vite/client", "node"], - "composite": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "module": "ESNext", - "moduleResolution": "Node", - "resolveJsonModule": true, - "isolatedModules": true, - "jsx": "react", - "baseUrl": ".", - "rootDir": "..", - "tsBuildInfoFile": "dist/tsconfig.tsbuildinfo" - }, - "references": [{"path": "../ui-extensions-server-kit"}, {"path": "../shopify-cli-extensions-test-utils"}] -} diff --git a/packages/ui-extensions-dev-console/tsconfig.build.json b/packages/ui-extensions-dev-console/tsconfig.build.json deleted file mode 100644 index 332b6f113bd..00000000000 --- a/packages/ui-extensions-dev-console/tsconfig.build.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "extends": "./tsconfig.base.json", - "compilerOptions": { - "outDir": "dist", - "paths": { - "@/*": ["src/*"], - "@shopify/ui-extensions-server-kit": ["../ui-extensions-server-kit/src"], - "@shopify/ui-extensions-test-utils": ["../ui-extensions-test-utils/src"], - } - }, - "exclude": ["tests/**/*", "src/**/*.test.tsx", "src/**/*.test.ts", "dist/**"], - "include": ["src/**/*", "src/**/*.json"], - "references": [{"path": "../ui-extensions-server-kit"}, {"path": "../ui-extensions-test-utils"}] -} diff --git a/packages/ui-extensions-dev-console/tsconfig.json b/packages/ui-extensions-dev-console/tsconfig.json deleted file mode 100644 index a1bcf990e36..00000000000 --- a/packages/ui-extensions-dev-console/tsconfig.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "extends": "./tsconfig.base.json", - "compilerOptions": { - "paths": { - "tests/*": ["tests/*"], - "@/*": ["src/*"], - "@shopify/ui-extensions-server-kit/testing": ["../ui-extensions-server-kit/src/testing"], - "@shopify/ui-extensions-server-kit": ["../ui-extensions-server-kit/src"], - "@shopify/ui-extensions-test-utils": ["../ui-extensions-test-utils/src"] - }, - "outDir": "dist", - "types": ["vitest/globals"], - }, - "include": ["src/**/*", "tests/**/*", "src/**/*.json"], - "references": [{"path": "../ui-extensions-server-kit"}, {"path": "../ui-extensions-test-utils"}] -} diff --git a/packages/ui-extensions-dev-console/vite.config.mts b/packages/ui-extensions-dev-console/vite.config.mts deleted file mode 100644 index a719cfd9ffb..00000000000 --- a/packages/ui-extensions-dev-console/vite.config.mts +++ /dev/null @@ -1,30 +0,0 @@ -import {defineConfig} from 'vite' -import react from '@vitejs/plugin-react' -import path from 'path' - -// https://vitejs.dev/config/ -export default defineConfig({ - plugins: [react()], - build: { - outDir: '../app/assets/dev-console', - assetsDir: 'extensions/dev-console/assets', - }, - resolve: { - alias: { - // vite.config.ts, tsconfig.json, and jest.config.ts all need to define their own aliases - '@': path.resolve(__dirname, './src'), - '@shopify/ui-extensions-server-kit': path.resolve(__dirname, '../ui-extensions-server-kit/src'), - tests: path.resolve(__dirname, './tests'), - '@shopify/ui-extensions-test-utils': path.resolve(__dirname, '../ui-extensions-test-utils/src'), - '@shopify/ui-extensions-server-kit/testing': path.resolve(__dirname, '../ui-extensions-server-kit/src/testing'), - }, - }, - test: { - globals: true, - environment: 'jsdom', - setupFiles: [path.resolve(__dirname, './tests/setup.ts')], - deps: { - inline: ['@shopify/react-testing'], - }, - }, -}) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1e1f23ffed3..686f16aafad 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -718,61 +718,6 @@ importers: specifier: ^1.15.0 version: 1.15.0 - packages/ui-extensions-dev-console: - dependencies: - '@shopify/polaris-icons': - specifier: ^8.0.0 - version: 8.11.1(react@18.3.1) - '@shopify/ui-extensions-server-kit': - specifier: 5.4.1 - version: link:../ui-extensions-server-kit - copy-to-clipboard: - specifier: ^3.3.3 - version: 3.3.3 - qrcode.react: - specifier: ^4.2.0 - version: 4.2.0(react@18.3.1) - react: - specifier: ^18.2.0 - version: 18.3.1 - react-dom: - specifier: ^18.2.0 - version: 18.3.1(react@18.3.1) - react-toastify: - specifier: ^9.1.3 - version: 9.1.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react-transition-group: - specifier: ^4.4.5 - version: 4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - devDependencies: - '@shopify/ui-extensions-test-utils': - specifier: 3.26.0 - version: link:../ui-extensions-test-utils - '@testing-library/jest-dom': - specifier: ^6.9.1 - version: 6.9.1 - '@testing-library/react': - specifier: ^16.3.2 - version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@18.3.7(@types/react@18.3.12))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@types/react': - specifier: 18.3.12 - version: 18.3.12 - '@types/react-dom': - specifier: ^18.2.0 - version: 18.3.7(@types/react@18.3.12) - '@vitejs/plugin-react': - specifier: ^5.2.0 - version: 5.2.0(vite@6.4.3(@types/node@22.19.17)(jiti@2.6.1)(sass@1.100.0)(tsx@4.22.4)(yaml@2.9.0)) - jsdom: - specifier: ^25.0.0 - version: 25.0.1 - sass: - specifier: ^1.100.0 - version: 1.100.0 - vite: - specifier: 6.4.3 - version: 6.4.3(@types/node@22.19.17)(jiti@2.6.1)(sass@1.100.0)(tsx@4.22.4)(yaml@2.9.0) - packages/ui-extensions-server-kit: devDependencies: '@testing-library/react': @@ -844,9 +789,6 @@ packages: '@actions/io@1.1.3': resolution: {integrity: sha512-wi9JjgKLYS7U/z8PPbco+PvTb/nRWjeoFlJ1Qer83k/3C5PHQi28hiVdeE2kHXmIL99mQFawx8qt/JPjZilJ8Q==, tarball: https://registry.npmjs.org/@actions/io/-/io-1.1.3.tgz} - '@adobe/css-tools@4.4.4': - resolution: {integrity: sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==, tarball: https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.4.tgz} - '@alcalzone/ansi-tokenize@0.1.3': resolution: {integrity: sha512-3yWxPTq3UQ/FY9p1ErPxIyfT64elWaMvM9lIHnaqpyft63tkxodF5aUElYHrdisWve5cETkh1+KBw1yJuW0aRw==, tarball: https://registry.npmjs.org/@alcalzone/ansi-tokenize/-/ansi-tokenize-0.1.3.tgz} engines: {node: '>=14.13.1'} @@ -920,48 +862,56 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [glibc] '@ast-grep/napi-linux-arm64-gnu@0.43.0': resolution: {integrity: sha512-yJSRPxwwrvVW94J2rtaatcixSAGWcSaHNbAh6soXD6HXgq6I7uMc+cyMnJstFL789yd6Pu3QIhTlpD9VY0oYhw==, tarball: https://registry.npmjs.org/@ast-grep/napi-linux-arm64-gnu/-/napi-linux-arm64-gnu-0.43.0.tgz} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [glibc] '@ast-grep/napi-linux-arm64-musl@0.34.1': resolution: {integrity: sha512-IXdqwTbkdqHrcuQb448Qzd82QdTqVFe/f0sSkFYQTic8P2qNzmiHsVnxgEFsQPPbe09BVAoZ885j3OnaNfcDYA==, tarball: https://registry.npmjs.org/@ast-grep/napi-linux-arm64-musl/-/napi-linux-arm64-musl-0.34.1.tgz} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [musl] '@ast-grep/napi-linux-arm64-musl@0.43.0': resolution: {integrity: sha512-mknXLDsf66HvT/JEl18ZQSvR7/qWgWfqh3eHuVRqD2lE6cKBDXRnAzx9ZNZkUnL2Z5ph54Yk8dKVu09k45cegA==, tarball: https://registry.npmjs.org/@ast-grep/napi-linux-arm64-musl/-/napi-linux-arm64-musl-0.43.0.tgz} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [musl] '@ast-grep/napi-linux-x64-gnu@0.34.1': resolution: {integrity: sha512-on4LyIeN/zN7SIh8zr5v+NTzVu3kXm2mG28ib1Qe9GVcf35dz52ckf7bilulayKSa2MHZWAXMjuc6NYMiNEw+w==, tarball: https://registry.npmjs.org/@ast-grep/napi-linux-x64-gnu/-/napi-linux-x64-gnu-0.34.1.tgz} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [glibc] '@ast-grep/napi-linux-x64-gnu@0.43.0': resolution: {integrity: sha512-KM6M5KKFsHG9Y7VKCKnMsWQQ1sYwj/SPdyr91SKp66AeFJ5xMtXb13WVQ3Joe9NEsi84dzzOBIJgMddz+UMvQw==, tarball: https://registry.npmjs.org/@ast-grep/napi-linux-x64-gnu/-/napi-linux-x64-gnu-0.43.0.tgz} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [glibc] '@ast-grep/napi-linux-x64-musl@0.34.1': resolution: {integrity: sha512-l1R5L9LOp0jTPjs8C+LUndZOA8cRw7PFlvoVxVbi2jCfcns00dqatSYc4yA/ke6ng2K0LSxjoV/jS8tefve0sA==, tarball: https://registry.npmjs.org/@ast-grep/napi-linux-x64-musl/-/napi-linux-x64-musl-0.34.1.tgz} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [musl] '@ast-grep/napi-linux-x64-musl@0.43.0': resolution: {integrity: sha512-NfjI74m7CEEOsLi7ZkYwcxY10CfKIHPHRrr9aqMulmnrC4FGvxQMk1qpDrTqkjmEd8LdZt3PsPrmBa8AZCErew==, tarball: https://registry.npmjs.org/@ast-grep/napi-linux-x64-musl/-/napi-linux-x64-musl-0.43.0.tgz} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [musl] '@ast-grep/napi-win32-arm64-msvc@0.34.1': resolution: {integrity: sha512-eVsdMtnY7jmN2xQjYY9gaqIxRHA44+QYivlP1uLbg8w3P4YlZWTFgOJ7aa357Hg/257mjeQCpodCkr0lGRsSYQ==, tarball: https://registry.npmjs.org/@ast-grep/napi-win32-arm64-msvc/-/napi-win32-arm64-msvc-0.34.1.tgz} @@ -3117,41 +3067,49 @@ packages: resolution: {integrity: sha512-aaWUYXFaB9ztrICg0WHuz0tzoil+OkSpWi+wtM9PsV+vNQTYWIPclO+OpSp4am68/bdtuMuITOH99EvEIfv7ZA==, tarball: https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-22.0.2.tgz} cpu: [arm64] os: [linux] + libc: [glibc] '@nx/nx-linux-arm64-gnu@22.7.5': resolution: {integrity: sha512-QLnkJl3HkHsPfpLiNiAiMfpfAeFpic0U1diAxF8RqChOkCpQ7ulvyBVgE1UrQxvhd+gFQ3ed5RNDxtCRw8nTiw==, tarball: https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-22.7.5.tgz} cpu: [arm64] os: [linux] + libc: [glibc] '@nx/nx-linux-arm64-musl@22.0.2': resolution: {integrity: sha512-ylT5GBJCUpTXp5ud8f/uRyW9OA2KR65nuFQ5iXNf1KXwfjGuinFDvZEDDj0zGQ4E/PwLrInqBkkSH25Ry99lOQ==, tarball: https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-22.0.2.tgz} cpu: [arm64] os: [linux] + libc: [musl] '@nx/nx-linux-arm64-musl@22.7.5': resolution: {integrity: sha512-cEP6KmwBgnb38+jTTaibWCjwXcHmigqhTfy0tN1be7WZr6bHxbqNLsXqKRN70PSNA3HouZcxw1cdRL8tqbPBBA==, tarball: https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-22.7.5.tgz} cpu: [arm64] os: [linux] + libc: [musl] '@nx/nx-linux-x64-gnu@22.0.2': resolution: {integrity: sha512-N8beYlkdKbAC5CA3i5WoqUUbbsSO/0cQk3gMW7c41bouqdMWDUKG6m50d4yHk8V7RFC+sqY59tso3rYmXW3big==, tarball: https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-22.0.2.tgz} cpu: [x64] os: [linux] + libc: [glibc] '@nx/nx-linux-x64-gnu@22.7.5': resolution: {integrity: sha512-tbaX1tZCSpGifDNBfDdEZAMxVF3Yg4bhFP/bm1needc0diqb+Zflc0u5tM5/6BWDMITQDwenJVsNiQ8ZdtJURA==, tarball: https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-22.7.5.tgz} cpu: [x64] os: [linux] + libc: [glibc] '@nx/nx-linux-x64-musl@22.0.2': resolution: {integrity: sha512-Q0joIxZHs9JVr/+6x1bee7z+7Z4SoO0mbhADuugjxly50O44Igg+rx78Iou00VrtSR+Ht5NlpILxOe4GhpFCpA==, tarball: https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-22.0.2.tgz} cpu: [x64] os: [linux] + libc: [musl] '@nx/nx-linux-x64-musl@22.7.5': resolution: {integrity: sha512-H0M7csOZIgPT822LqjxSXzf4MXRND15vIkAQe3F3Jlr3Si8LC3tzbL52aVcRfgb8MF/xOB5U47mSwxWt1M2bPQ==, tarball: https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-22.7.5.tgz} cpu: [x64] os: [linux] + libc: [musl] '@nx/nx-win32-arm64-msvc@22.0.2': resolution: {integrity: sha512-/4FXsBh+SB6fKFeVBFptPPWJIeFPQWmK29Q+XLrjYW/31bOs1k2uwn+7QYX0D+Z4HiME3iiRdAInFD9pVlyZbQ==, tarball: https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-22.0.2.tgz} @@ -3474,41 +3432,49 @@ packages: resolution: {integrity: sha512-0bJnmYFp62JdZ4nVMDUZ/C58BCZOCcqgKtnUlp7L9Ojf/czIN+3j72YlLPeWLkzlr6SlYvIQA4SGV/HyO0d+qg==, tarball: https://registry.npmjs.org/@oxc-resolver/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-11.20.0.tgz} cpu: [arm64] os: [linux] + libc: [glibc] '@oxc-resolver/binding-linux-arm64-musl@11.20.0': resolution: {integrity: sha512-wKHHzPKZo7Ufhv/Bt6yxT7FOgnIgW4gwXcJUipkShGp68W3wGVqvr1Sr0fY65lN0Oy6y41+g2kIDvkgZaMMUkw==, tarball: https://registry.npmjs.org/@oxc-resolver/binding-linux-arm64-musl/-/binding-linux-arm64-musl-11.20.0.tgz} cpu: [arm64] os: [linux] + libc: [musl] '@oxc-resolver/binding-linux-ppc64-gnu@11.20.0': resolution: {integrity: sha512-RN8goF7Ie0B79L4i4G6OeBocTgSC56vJbQ65VJje+oXnldVpLnOU7j/AQ/dP94TcCS+Yh6WG8u3Qt4ETteXFNQ==, tarball: https://registry.npmjs.org/@oxc-resolver/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-11.20.0.tgz} cpu: [ppc64] os: [linux] + libc: [glibc] '@oxc-resolver/binding-linux-riscv64-gnu@11.20.0': resolution: {integrity: sha512-5l1yU6/xQEqLZRzxqmMxJfWPslpwCmBsdDGaBvABPehxquCXDC7dd7oraNdKSJUMDXSM7VvVj8H2D2FTjU7oWw==, tarball: https://registry.npmjs.org/@oxc-resolver/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-11.20.0.tgz} cpu: [riscv64] os: [linux] + libc: [glibc] '@oxc-resolver/binding-linux-riscv64-musl@11.20.0': resolution: {integrity: sha512-xHEvkbgz6UC+A3JOyDQy76LkUaxsNSfIr3/GV8slwZsnuooJiIB34gzJfsyvR4JdCYNUUPsRJc/w/oWkODu+hg==, tarball: https://registry.npmjs.org/@oxc-resolver/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-11.20.0.tgz} cpu: [riscv64] os: [linux] + libc: [musl] '@oxc-resolver/binding-linux-s390x-gnu@11.20.0': resolution: {integrity: sha512-aWPDUUmSeyHvlW+SoEUd+JIJsQhVhu6a5tBpDRMu058naPAchTgAVGCFy35zjbnFlt0i8hLWziff6HX0D3LU4g==, tarball: https://registry.npmjs.org/@oxc-resolver/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-11.20.0.tgz} cpu: [s390x] os: [linux] + libc: [glibc] '@oxc-resolver/binding-linux-x64-gnu@11.20.0': resolution: {integrity: sha512-x2YeSimvhJjKLVD8KSu8f/rqU1potcdEMkApIPJqjZWN7c2Fpt4g2X32WDg1p+XDAmyT7nuQGe0vnhvXeLbH+g==, tarball: https://registry.npmjs.org/@oxc-resolver/binding-linux-x64-gnu/-/binding-linux-x64-gnu-11.20.0.tgz} cpu: [x64] os: [linux] + libc: [glibc] '@oxc-resolver/binding-linux-x64-musl@11.20.0': resolution: {integrity: sha512-kcRLEIxpZefeYfLChjpgFf3ilBzRDZ+yobMrpRsQlSrxuFGtm3U6PMU7AaEpMqo3NfDGVyJJseAjnRLzMFHjwQ==, tarball: https://registry.npmjs.org/@oxc-resolver/binding-linux-x64-musl/-/binding-linux-x64-musl-11.20.0.tgz} cpu: [x64] os: [linux] + libc: [musl] '@oxc-resolver/binding-openharmony-arm64@11.20.0': resolution: {integrity: sha512-HHcfnApSZGtKhTiHqe8OZruOZe5XuFQH5/E0Yhj3u8fnFvzkM4/k6WjacUf4SvA0SPEAbfbgYmVPuo0VX/fIBQ==, tarball: https://registry.npmjs.org/@oxc-resolver/binding-openharmony-arm64/-/binding-openharmony-arm64-11.20.0.tgz} @@ -3559,36 +3525,42 @@ packages: engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm-musl@2.5.6': resolution: {integrity: sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==, tarball: https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.6.tgz} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] + libc: [musl] '@parcel/watcher-linux-arm64-glibc@2.5.6': resolution: {integrity: sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==, tarball: https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.6.tgz} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm64-musl@2.5.6': resolution: {integrity: sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==, tarball: https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.6.tgz} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + libc: [musl] '@parcel/watcher-linux-x64-glibc@2.5.6': resolution: {integrity: sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==, tarball: https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.6.tgz} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + libc: [glibc] '@parcel/watcher-linux-x64-musl@2.5.6': resolution: {integrity: sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==, tarball: https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.6.tgz} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + libc: [musl] '@parcel/watcher-win32-arm64@2.5.6': resolution: {integrity: sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==, tarball: https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.6.tgz} @@ -3712,66 +3684,79 @@ packages: resolution: {integrity: sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.59.0.tgz} cpu: [arm] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm-musleabihf@4.59.0': resolution: {integrity: sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.59.0.tgz} cpu: [arm] os: [linux] + libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.59.0': resolution: {integrity: sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.59.0.tgz} cpu: [arm64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm64-musl@4.59.0': resolution: {integrity: sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.59.0.tgz} cpu: [arm64] os: [linux] + libc: [musl] '@rollup/rollup-linux-loong64-gnu@4.59.0': resolution: {integrity: sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.59.0.tgz} cpu: [loong64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-loong64-musl@4.59.0': resolution: {integrity: sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.59.0.tgz} cpu: [loong64] os: [linux] + libc: [musl] '@rollup/rollup-linux-ppc64-gnu@4.59.0': resolution: {integrity: sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.59.0.tgz} cpu: [ppc64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-ppc64-musl@4.59.0': resolution: {integrity: sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.59.0.tgz} cpu: [ppc64] os: [linux] + libc: [musl] '@rollup/rollup-linux-riscv64-gnu@4.59.0': resolution: {integrity: sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.59.0.tgz} cpu: [riscv64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-musl@4.59.0': resolution: {integrity: sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.59.0.tgz} cpu: [riscv64] os: [linux] + libc: [musl] '@rollup/rollup-linux-s390x-gnu@4.59.0': resolution: {integrity: sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.59.0.tgz} cpu: [s390x] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.59.0': resolution: {integrity: sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.0.tgz} cpu: [x64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-musl@4.59.0': resolution: {integrity: sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.59.0.tgz} cpu: [x64] os: [linux] + libc: [musl] '@rollup/rollup-openbsd-x64@4.59.0': resolution: {integrity: sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==, tarball: https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.59.0.tgz} @@ -4164,10 +4149,6 @@ packages: resolution: {integrity: sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==, tarball: https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz} engines: {node: '>=18'} - '@testing-library/jest-dom@6.9.1': - resolution: {integrity: sha512-zIcONa+hVtVSSep9UT3jZ5rizo2BsxgyDYU7WFD5eICBE7no3881HGeb/QkGfsJs6JTkY1aQhT7rIPC7e+0nnA==, tarball: https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.9.1.tgz} - engines: {node: '>=14', npm: '>=6', yarn: '>=1'} - '@testing-library/react@16.3.2': resolution: {integrity: sha512-XU5/SytQM+ykqMnAnvB2umaJNIOsLF3PVv//1Ew4CTcpz0/BRyy/af40qqrt7SjKpDdT1saBMc42CUok5gaw+g==, tarball: https://registry.npmjs.org/@testing-library/react/-/react-16.3.2.tgz} engines: {node: '>=18'} @@ -4443,41 +4424,49 @@ packages: resolution: {integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==, tarball: https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz} cpu: [arm64] os: [linux] + libc: [glibc] '@unrs/resolver-binding-linux-arm64-musl@1.11.1': resolution: {integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==, tarball: https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz} cpu: [arm64] os: [linux] + libc: [musl] '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': resolution: {integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==, tarball: https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz} cpu: [ppc64] os: [linux] + libc: [glibc] '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': resolution: {integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==, tarball: https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz} cpu: [riscv64] os: [linux] + libc: [glibc] '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': resolution: {integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==, tarball: https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz} cpu: [riscv64] os: [linux] + libc: [musl] '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': resolution: {integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==, tarball: https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz} cpu: [s390x] os: [linux] + libc: [glibc] '@unrs/resolver-binding-linux-x64-gnu@1.11.1': resolution: {integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==, tarball: https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz} cpu: [x64] os: [linux] + libc: [glibc] '@unrs/resolver-binding-linux-x64-musl@1.11.1': resolution: {integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==, tarball: https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz} cpu: [x64] os: [linux] + libc: [musl] '@unrs/resolver-binding-wasm32-wasi@1.11.1': resolution: {integrity: sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==, tarball: https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz} @@ -5083,10 +5072,6 @@ packages: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==, tarball: https://registry.npmjs.org/clone/-/clone-1.0.4.tgz} engines: {node: '>=0.8'} - clsx@1.2.1: - resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==, tarball: https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz} - engines: {node: '>=6'} - code-block-writer@11.0.3: resolution: {integrity: sha512-NiujjUFB4SwScJq2bwbYUtXbZhBSlY6vYzm++3Q6oC+U+injTqfPYFK8wS9COOmb2lueqp0ZRB4nK1VYeHgNyw==, tarball: https://registry.npmjs.org/code-block-writer/-/code-block-writer-11.0.3.tgz} @@ -5213,9 +5198,6 @@ packages: resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==, tarball: https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz} engines: {node: '>=18'} - copy-to-clipboard@3.3.3: - resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==, tarball: https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz} - core-js-compat@3.48.0: resolution: {integrity: sha512-OM4cAF3D6VtH/WkLtWvyNC56EZVXsZdU3iqaMG2B4WvYrlqU831pc4UtG5yp0sE9z8Y02wVN7PjW5Zf9Gt0f1Q==, tarball: https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.48.0.tgz} @@ -5281,9 +5263,6 @@ packages: resolution: {integrity: sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==, tarball: https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} - css.escape@1.5.1: - resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==, tarball: https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz} - cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==, tarball: https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz} engines: {node: '>=4'} @@ -5481,9 +5460,6 @@ packages: dom-accessibility-api@0.5.16: resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==, tarball: https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz} - dom-accessibility-api@0.6.3: - resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==, tarball: https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz} - dom-helpers@5.2.1: resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==, tarball: https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz} @@ -7915,11 +7891,6 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==, tarball: https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz} engines: {node: '>=6'} - qrcode.react@4.2.0: - resolution: {integrity: sha512-QpgqWi8rD9DsS9EP3z7BT+5lY5SFhsqGjpgW5DY/i3mK4M9DTBNz3ErMi8BWYEfI3L0d8GIbGmcdFAS1uIRGjA==, tarball: https://registry.npmjs.org/qrcode.react/-/qrcode.react-4.2.0.tgz} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - quansync@0.2.11: resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==, tarball: https://registry.npmjs.org/quansync/-/quansync-0.2.11.tgz} @@ -7982,12 +7953,6 @@ packages: resolution: {integrity: sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==, tarball: https://registry.npmjs.org/react-refresh/-/react-refresh-0.18.0.tgz} engines: {node: '>=0.10.0'} - react-toastify@9.1.3: - resolution: {integrity: sha512-fPfb8ghtn/XMxw3LkxQBk3IyagNpF/LIKjOBflbexr2AWxAH1MJgvnESwEwBn9liLFXgTKWgBSdZpw9m4OTHTg==, tarball: https://registry.npmjs.org/react-toastify/-/react-toastify-9.1.3.tgz} - peerDependencies: - react: '>=16' - react-dom: '>=16' - react-transition-group@4.4.5: resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==, tarball: https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz} peerDependencies: @@ -8685,9 +8650,6 @@ packages: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==, tarball: https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz} engines: {node: '>=8.0'} - toggle-selection@1.0.6: - resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==, tarball: https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz} - tough-cookie@5.1.2: resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==, tarball: https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz} engines: {node: '>=16'} @@ -9305,8 +9267,6 @@ snapshots: '@actions/io@1.1.3': {} - '@adobe/css-tools@4.4.4': {} - '@alcalzone/ansi-tokenize@0.1.3': dependencies: ansi-styles: 6.2.3 @@ -13153,10 +13113,6 @@ snapshots: transitivePeerDependencies: - graphql - '@shopify/polaris-icons@8.11.1(react@18.3.1)': - optionalDependencies: - react: 18.3.1 - '@shopify/polaris-icons@8.11.1(react@19.2.4)': optionalDependencies: react: 19.2.4 @@ -13630,15 +13586,6 @@ snapshots: picocolors: 1.1.1 pretty-format: 27.5.1 - '@testing-library/jest-dom@6.9.1': - dependencies: - '@adobe/css-tools': 4.4.4 - aria-query: 5.3.2 - css.escape: 1.5.1 - dom-accessibility-api: 0.6.3 - picocolors: 1.1.1 - redent: 3.0.0 - '@testing-library/react@16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@18.3.7(@types/react@18.3.12))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.28.6 @@ -14641,6 +14588,7 @@ snapshots: chokidar@5.0.0: dependencies: readdirp: 5.0.0 + optional: true chownr@1.1.4: {} @@ -14690,8 +14638,6 @@ snapshots: clone@1.0.4: {} - clsx@1.2.1: {} - code-block-writer@11.0.3: {} code-block-writer@12.0.0: {} @@ -14820,10 +14766,6 @@ snapshots: cookie@1.1.1: {} - copy-to-clipboard@3.3.3: - dependencies: - toggle-selection: 1.0.6 - core-js-compat@3.48.0: dependencies: browserslist: 4.28.1 @@ -14901,8 +14843,6 @@ snapshots: source-map-js: 1.2.1 optional: true - css.escape@1.5.1: {} - cssesc@3.0.0: {} cssstyle@4.6.0: @@ -15062,8 +15002,6 @@ snapshots: dom-accessibility-api@0.5.16: {} - dom-accessibility-api@0.6.3: {} - dom-helpers@5.2.1: dependencies: '@babel/runtime': 7.28.6 @@ -17948,10 +17886,6 @@ snapshots: punycode@2.3.1: {} - qrcode.react@4.2.0(react@18.3.1): - dependencies: - react: 18.3.1 - quansync@0.2.11: {} queue-microtask@1.2.3: {} @@ -18010,21 +17944,6 @@ snapshots: react-refresh@0.18.0: {} - react-toastify@9.1.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1): - dependencies: - clsx: 1.2.1 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - react-transition-group@4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1): - dependencies: - '@babel/runtime': 7.28.6 - dom-helpers: 5.2.1 - loose-envify: 1.4.0 - prop-types: 15.8.1 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - react-transition-group@4.4.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: '@babel/runtime': 7.28.6 @@ -18084,7 +18003,8 @@ snapshots: dependencies: picomatch: 2.3.1 - readdirp@5.0.0: {} + readdirp@5.0.0: + optional: true rechoir@0.6.2: dependencies: @@ -18309,6 +18229,7 @@ snapshots: source-map-js: 1.2.1 optionalDependencies: '@parcel/watcher': 2.5.6 + optional: true saxes@6.0.0: dependencies: @@ -18817,8 +18738,6 @@ snapshots: dependencies: is-number: 7.0.0 - toggle-selection@1.0.6: {} - tough-cookie@5.1.2: dependencies: tldts: 6.1.86 diff --git a/vite.config.ts b/vite.config.ts index 1012152abc4..95a7828e0eb 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -17,7 +17,6 @@ export default defineConfig({ 'packages/plugin-did-you-mean/vite.config.ts', 'packages/store/vite.config.ts', 'packages/theme/vite.config.ts', - 'packages/ui-extensions-dev-console/vite.config.mts', 'packages/ui-extensions-server-kit/vite.config.mts', ], }, diff --git a/workspace/src/lint.js b/workspace/src/lint.js index b152bf62cf5..eb709d00c52 100644 --- a/workspace/src/lint.js +++ b/workspace/src/lint.js @@ -30,11 +30,10 @@ let exitCode = 0 console.info(colors.green.bold(`Linting that packages have strict version requirements`)) const packageJsonPaths = await fg(path.join(rootDirectory, 'packages/*/package.json'), {type: 'file'}) const dependenciesWithLooseVersionRequirement = [] -const internalPackages = ['@shopify/ui-extensions-dev-console-app'] const ignoredDependencies = ['react'] for (const packageJsonPath of packageJsonPaths) { const {dependencies, name: pkg} = JSON.parse((await fs.readFile(packageJsonPath)).toString()) - if (internalPackages.includes(pkg) || !dependencies) { + if (!dependencies) { continue } for (const [dependency, version] of Object.entries(dependencies)) {