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 @@
-
-
-
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 = (
-
- )
-
- 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 (
-
-
-
- )
-}
-
-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 (
-
- )
-}
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}
}
-
-
-
- | {i18n.translate('extensionList.handle')} |
- {i18n.translate('extensionList.preview')} |
- {i18n.translate('extensionList.mobile')} |
- {i18n.translate('extensionList.status')} |
-
-
-
-
- {extensionIds.map(({uuid}) => {
- return
- })}
-
-
-
- )
-}
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)) {