From 5386a30bdda507695cafb66434761a0912f503ab Mon Sep 17 00:00:00 2001 From: Brian Hanson Date: Fri, 5 Jun 2026 11:03:05 -0500 Subject: [PATCH 1/6] Remove ConfigService, consolidate onto window.Craft global MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Remove ConfigService class entirely — window.Craft is the single source of config truth (flat object canonical) - Remove window.Cp and window.CpConfig globals - bootstrap/cp.ts reads config directly from window.Craft and attaches services ($queue, $axios) and lifecycle (booting, booted, init, start) - actionClient.ts getActionUrl/getCpUrl delegate to Craft.getActionUrl() and Craft.getCpUrl() (canonical implementations from legacy Craft.js) - Fix: actionHeaders() read Cp.registeredAssetBundles (wrong global) - Fix: apiClient.ts read Cp.apiParams/Cp.httpProxy (wrong global) - QueueService uses imported getActionUrl() instead of ConfigService - CpQueueIndicator uses imported getCpUrl() instead of ConfigService - app.blade.php: config merged onto Craft via Object.assign, head shim provides early booting/booted stubs, start() called directly - Types: CraftStatic extends CpServices, includes lifecycle and URL helpers - Add CraftConfigData DTO with #[TypeScript] for Spatie type generation - Generated types.d.ts includes full CraftConfigData type Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- packages/craftcms-cp/src/index.ts | 1 - .../craftcms-cp/src/services/Queue.test.ts | 16 +- packages/craftcms-cp/src/services/Queue.ts | 9 +- packages/craftcms-cp/src/types/globals.ts | 2 - .../src/utilities/api/actionClient.ts | 32 ++- .../src/utilities/api/apiClient.ts | 8 +- resources/js/bootstrap/cp.ts | 172 +++++++-------- resources/js/common/types/globals.d.ts | 33 ++- resources/js/common/types/keys.ts | 2 - resources/js/cp.ts | 6 +- resources/js/legacy.ts | 4 +- .../navigation/components/CpQueueIndicator.ts | 6 +- resources/views/app.blade.php | 7 +- src/Cp/Data/CraftConfigData.php | 201 ++++++++++++++++++ .../TypeScriptTransformerServiceProvider.php | 2 + 15 files changed, 347 insertions(+), 154 deletions(-) create mode 100644 src/Cp/Data/CraftConfigData.php diff --git a/packages/craftcms-cp/src/index.ts b/packages/craftcms-cp/src/index.ts index cf4b2bab405..50a075bf363 100644 --- a/packages/craftcms-cp/src/index.ts +++ b/packages/craftcms-cp/src/index.ts @@ -69,7 +69,6 @@ export * from './utilities/dom.js'; // Services export {QueueService} from './services/Queue.js'; -export {ConfigService} from './services/Config.js'; export {AssetIndexer} from './services/AssetIndexer.js'; export type { IndexingSession, diff --git a/packages/craftcms-cp/src/services/Queue.test.ts b/packages/craftcms-cp/src/services/Queue.test.ts index 1138e45b1ad..8e2c1026b62 100644 --- a/packages/craftcms-cp/src/services/Queue.test.ts +++ b/packages/craftcms-cp/src/services/Queue.test.ts @@ -1,6 +1,5 @@ import {afterEach, beforeEach, describe, expect, test, vi} from 'vitest'; import {QueueService} from './Queue.js'; -import {ConfigService} from './Config.js'; import type {JobInfo} from '../types/index.js'; import {JobStatus} from '../types/index.js'; @@ -12,21 +11,16 @@ vi.mock('axios', () => ({ }, })); -// Mock ConfigService -vi.mock('./Config', () => ({ - ConfigService: { - getInstance: vi.fn(() => ({ - getActionUrl: vi.fn( - (path: string) => `https://example.com/actions/${path}` - ), - })), - }, +// Mock getActionUrl +vi.mock('../utilities/api/actionClient', () => ({ + getActionUrl: vi.fn( + (path: string) => `https://example.com/actions/${path}` + ), })); describe('QueueService', () => { beforeEach(() => { QueueService.resetInstance(); - ConfigService.getInstance(); vi.clearAllMocks(); }); diff --git a/packages/craftcms-cp/src/services/Queue.ts b/packages/craftcms-cp/src/services/Queue.ts index 61eedc699da..7b63c698cea 100644 --- a/packages/craftcms-cp/src/services/Queue.ts +++ b/packages/craftcms-cp/src/services/Queue.ts @@ -8,7 +8,7 @@ import type { } from '@src/types'; import {JobStatus} from '@src/types'; import axios from 'axios'; -import {ConfigService} from '@src/services/Config'; +import {getActionUrl} from '@src/utilities/api/actionClient'; /** * Service for managing queue job tracking. @@ -50,9 +50,6 @@ export class QueueService extends EventTarget { // Cross-tab broadcasting #broadcaster: BroadcastChannel | null = null; - // Configuration service instance - #config: ConfigService = ConfigService.getInstance(); - /** Get the singleton instance */ static getInstance(): QueueService { if (!QueueService.#instance) { @@ -92,7 +89,7 @@ export class QueueService extends EventTarget { } try { - await axios.post(this.#config.getActionUrl('queue/run')); + await axios.post(getActionUrl('queue/run')); } catch (e: unknown) { // Ignore errors - queue might already be running console.error(e); @@ -223,7 +220,7 @@ export class QueueService extends EventTarget { try { const response = await axios.get( - this.#config.getActionUrl('queue/get-job-info'), + getActionUrl('queue/get-job-info'), { params: {dontExtendSession: 1}, signal: this.#abortController.signal, diff --git a/packages/craftcms-cp/src/types/globals.ts b/packages/craftcms-cp/src/types/globals.ts index f6c8a51ed29..a204a78cedb 100644 --- a/packages/craftcms-cp/src/types/globals.ts +++ b/packages/craftcms-cp/src/types/globals.ts @@ -1,5 +1,4 @@ import {QueueService} from '@src/services/Queue'; -import {ConfigService} from '@src/services/Config'; declare const d3: any | undefined; declare const d3FormatLocaleDefinition: any | undefined; @@ -39,7 +38,6 @@ type Site = { export interface CpServices { $queue: QueueService; - $config: ConfigService; } export {}; diff --git a/packages/craftcms-cp/src/utilities/api/actionClient.ts b/packages/craftcms-cp/src/utilities/api/actionClient.ts index 4969ff9b1a4..0aa3e7041d2 100644 --- a/packages/craftcms-cp/src/utilities/api/actionClient.ts +++ b/packages/craftcms-cp/src/utilities/api/actionClient.ts @@ -1,29 +1,39 @@ import axios, {type RawAxiosRequestHeaders} from 'axios'; import {Csrf} from '@src/services/Csrf'; +declare const Craft: any; + /** - * @TODO + * Get the action URL for a given action path. + * Delegates to Craft.getActionUrl() when available (runtime), + * falls back to a path-based URL for early/test contexts. */ export function getActionUrl(action: string = '') { + if (typeof Craft !== 'undefined' && Craft.getActionUrl) { + return Craft.getActionUrl(action); + } return `/admin/actions/${action}`; } /** - * @TODO + * Get the CP URL for a given path. + * Delegates to Craft.getCpUrl() when available. */ +export function getCpUrl(path: string = '', params?: object) { + if (typeof Craft !== 'undefined' && Craft.getCpUrl) { + return Craft.getCpUrl(path, params); + } + return `/admin/${path}`; +} + export function actionHeaders(): RawAxiosRequestHeaders { let headers: Record = { - 'X-Registered-Asset-Bundles': [...new Set(Cp.registeredAssetBundles)].join( - ',' - ), - 'X-Registered-Js-Files': [...new Set(Cp.registeredJsFiles)].join(','), + 'X-Registered-Asset-Bundles': [ + ...new Set(Craft.registeredAssetBundles), + ].join(','), + 'X-Registered-Js-Files': [...new Set(Craft.registeredJsFiles)].join(','), }; - // @TODO Make sure we really don't need this anymore - // if (Cp.csrfTokenValue) { - // headers['X-CSRF-Token'] = Cp.csrfTokenValue; - // } - return headers; } diff --git a/packages/craftcms-cp/src/utilities/api/apiClient.ts b/packages/craftcms-cp/src/utilities/api/apiClient.ts index 3d63712ca39..ef0e5c21889 100644 --- a/packages/craftcms-cp/src/utilities/api/apiClient.ts +++ b/packages/craftcms-cp/src/utilities/api/apiClient.ts @@ -5,6 +5,8 @@ import axios, { } from 'axios'; import {actionClient} from './actionClient.js'; +declare const Craft: any; + let loadingApiHeaders = false; let apiHeaderWaitlist: Promise[] = []; let apiHeaders: Record | null = null; @@ -111,7 +113,7 @@ apiClient.interceptors.request.use(async (config) => { const finalConfig = { ...config, params: { - ...(Cp.apiParams || {}), + ...(Craft.apiParams || {}), ...config.params, v: new Date().getTime(), }, @@ -121,8 +123,8 @@ apiClient.interceptors.request.use(async (config) => { finalConfig.params.processCraftHeaders = 1; } - if (Cp.httpProxy) { - finalConfig.proxy = Cp.httpProxy as AxiosProxyConfig; + if (Craft.httpProxy) { + finalConfig.proxy = Craft.httpProxy as AxiosProxyConfig; } return finalConfig; diff --git a/resources/js/bootstrap/cp.ts b/resources/js/bootstrap/cp.ts index 60275f799cb..bcbf28ad028 100644 --- a/resources/js/bootstrap/cp.ts +++ b/resources/js/bootstrap/cp.ts @@ -1,7 +1,7 @@ -import {QueueService, ConfigService} from '@craftcms/cp'; +import {QueueService} from '@craftcms/cp'; import {createInertiaApp, router} from '@inertiajs/vue3'; import QueueManager from '@/modules/utilities/components/queue-manager/QueueManager.vue'; -import {Axios, Config, Queue} from '@/common/types/keys'; +import {Axios, Queue} from '@/common/types/keys'; import axios from 'axios'; import QueueManagerToolbar from '@/modules/utilities/components/queue-manager/QueueManagerToolbar.vue'; import DeprecationErrors from '@/modules/utilities/components/deprecation-errors/DeprecationErrors.vue'; @@ -16,99 +16,74 @@ import SystemMessages from '@/modules/utilities/components/system-messages/Syste import DeprecationErrorsToolbar from '@/modules/utilities/components/deprecation-errors/DeprecationErrorsToolbar.vue'; import {setTranslations} from '@craftcms/cp/utilities/translate.ts.mjs'; -let bootedCallbacks: Array<(instance: any) => void> = []; -let bootingCallbacks: Array<(instance: any) => void> = []; - -// Instantiate services -const config = ConfigService.getInstance(); const queue = QueueService.getInstance(); +let hasBooted = false; + +function booting(callback: (craft: any) => void) { + (window.bootingCallbacks ||= []).push(callback); +} + +function booted(callback: (craft: any) => void) { + if (hasBooted) { + callback(window.Craft); + } else { + (window.bootedCallbacks ||= []).push(callback); + } +} + +function init() { + queue.initialize({ + runAutomatically: window.Craft.runQueueAutomatically ?? true, + enabled: true, + appId: window.Craft.systemUid ?? '', + canAccessQueueManager: window.Craft.canAccessQueueManager ?? false, + }); -// Create our object -const Cp = { - initialConfig: {} as Record, - - get $config() { - return config; - }, - - get $queue() { - return queue; - }, - - get $axios() { - return axios; - }, - - booted(callback: (instance: any) => void) { - bootedCallbacks.push(callback); - }, - - booting(callback: (instance: any) => void) { - bootingCallbacks.push(callback); - }, - - config(config: Record) { - this.initialConfig = config; - }, - - init() { - config.initialize(this.initialConfig); - queue.initialize({ - runAutomatically: config.get('runQueueAutomatically', true), - enabled: true, - appId: config.get('systemUid', ''), - canAccessQueueManager: config.get('canAccessQueueManager', false), - }); - - setTranslations(this.initialConfig.translations); - }, - - async start() { - this.init(); - - axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; - axios.defaults.headers.common['X-CSRF-TOKEN'] = - this.$config.get('csrfToken'); - - console.groupCollapsed('Craft configuration'); - console.log(config.all().entries()); - console.groupEnd(); - - console.log('Calling booting callbacks', bootingCallbacks); - bootingCallbacks.forEach((callback) => callback(this)); - bootingCallbacks = []; - - await createInertiaApp({ - pages: '../pages', - title: (title) => `${title} - ${this.$config.get('systemName')}`, - withApp(app) { - app.provide(Queue, queue); - app.provide(Axios, axios); - app.provide(Config, config); - app.provide(Craft, config); - - app.component('QueueManager', QueueManager); - app.component('QueueManagerToolbar', QueueManagerToolbar); - app.component('DeprecationErrors', DeprecationErrors); - app.component('DeprecationErrorsToolbar', DeprecationErrorsToolbar); - app.component('ClearCaches', ClearCaches); - app.component('FindReplace', FindReplace); - app.component('DatabaseBackup', DatabaseBackup); - app.component('Migrations', Migrations); - app.component('Updates', Updates); - app.component('ProjectConfig', ProjectConfig); - app.component('AssetIndexes', AssetIndexes); - app.component('SystemMessages', SystemMessages); - }, - }); - - handleNonInertiaRequests(); - - console.log('Calling booted callbacks', bootedCallbacks); - bootedCallbacks.forEach((callback) => callback(this)); - bootedCallbacks = []; - }, -}; + setTranslations(window.Craft.translations); +} + +async function start() { + init(); + + axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; + axios.defaults.headers.common['X-CSRF-TOKEN'] = + window.Craft.csrfTokenValue; + + (window.bootingCallbacks ?? []).forEach((callback) => + callback(window.Craft) + ); + window.bootingCallbacks = []; + + await createInertiaApp({ + pages: '../pages', + title: (title) => `${title} - ${window.Craft.systemName}`, + withApp(app) { + app.provide(Queue, queue); + app.provide(Axios, axios); + + app.component('QueueManager', QueueManager); + app.component('QueueManagerToolbar', QueueManagerToolbar); + app.component('DeprecationErrors', DeprecationErrors); + app.component('DeprecationErrorsToolbar', DeprecationErrorsToolbar); + app.component('ClearCaches', ClearCaches); + app.component('FindReplace', FindReplace); + app.component('DatabaseBackup', DatabaseBackup); + app.component('Migrations', Migrations); + app.component('Updates', Updates); + app.component('ProjectConfig', ProjectConfig); + app.component('AssetIndexes', AssetIndexes); + app.component('SystemMessages', SystemMessages); + }, + }); + + handleNonInertiaRequests(); + + hasBooted = true; + (window.bootedCallbacks ?? []).forEach((callback) => + callback(window.Craft) + ); + window.bootedCallbacks = []; +} function handleNonInertiaRequests() { let fallbackUrl = ''; @@ -151,4 +126,13 @@ function handleNonInertiaRequests() { }); } -export default Cp; +Object.assign(window.Craft, { + $queue: queue, + $axios: axios, + booting, + booted, + init, + start, +}); + +export default window.Craft; diff --git a/resources/js/common/types/globals.d.ts b/resources/js/common/types/globals.d.ts index a719e99e0e9..d577b2c54af 100644 --- a/resources/js/common/types/globals.d.ts +++ b/resources/js/common/types/globals.d.ts @@ -1,4 +1,5 @@ import type {CpServices} from '@craftcms/cp/types/globals.d.ts'; +import type {AxiosInstance} from 'axios'; declare module '@tanstack/vue-table' { interface ColumnMeta { @@ -52,9 +53,6 @@ type Site = { uid: string; }; -// eslint-disable-next-line @typescript-eslint/no-empty-object-type -interface CpStatic extends CpServices {} - interface CpNotificationSettings { icon: string; iconLabel: string; @@ -69,9 +67,25 @@ interface SlideoutInstance { on(event: string, callback: () => void): void; } -interface CraftStatic { +interface CraftStatic extends CpServices { + $axios: AxiosInstance; + booting(cb: (craft: CraftStatic) => void): void; + booted(cb: (craft: CraftStatic) => void): void; + init(): void; + start(): Promise; + + // Server config csrfTokenName?: string; csrfTokenValue?: string; + systemUid?: string; + systemName?: string; + runQueueAutomatically?: boolean; + canAccessQueueManager?: boolean; + translations?: Record>; + registeredAssetBundles?: string[]; + registeredJsFiles?: string[]; + + // Legacy classes/utils ProgressBar: ProgressBarInterface; IntervalManager: IntervalManagerInterface; t(message: string, params?: object, category?: string): string; @@ -79,11 +93,13 @@ interface CraftStatic { initUiElements($container: JQuery): void; expandPostArray(arr: object): any; escapeHtml(str: string); + getUrl(path: string, params?: string | object, baseUrl?: string): string; + getActionUrl(action: string, params?: string | object): string; + getCpUrl(path: string, params?: string | object): string; sites: Site[]; Preview: any; setCookie(name: string, value: string): any; getCookie(name: string): any; - getUrl(path: string, params?: string | object, baseUrl?: string): string; cp?: { jobInfo?: unknown[]; displayedJobInfo?: unknown; @@ -99,8 +115,6 @@ interface CraftStatic { settings?: CpNotificationSettings ) => object; }; - systemUid?: string; - canAccessQueueManager?: boolean; queue?: { hasWaitingJobs?: boolean; hasReservedJobs?: boolean; @@ -120,6 +134,8 @@ interface CraftStatic { CpScreenSlideout: { new (url: string, settings?: object): SlideoutInstance; }; + + [key: string]: any; } // eslint-disable-next-line @typescript-eslint/no-empty-object-type @@ -130,15 +146,12 @@ interface JQueryObject {} // Declare existing variables, mock the things we'll use. declare global { - let Cp: CpStatic; let Craft: CraftStatic; let Garnish: GarnishStatic; let $: any; interface Window { bootedCallbacks: Array<(craft: any) => void>; bootingCallbacks: Array<(craft: any) => void>; - CpConfig: Record; - Cp: CpStatic; Craft: CraftStatic; $: JQueryObject; jQuery: JQueryObject; diff --git a/resources/js/common/types/keys.ts b/resources/js/common/types/keys.ts index d0e45f6cd8e..390c46b9574 100644 --- a/resources/js/common/types/keys.ts +++ b/resources/js/common/types/keys.ts @@ -1,8 +1,6 @@ import type {InjectionKey} from 'vue'; import type {QueueService} from '@craftcms/cp/services/Queue.ts.mjs'; import type {AxiosInstance} from 'axios'; -import type {ConfigService} from '@craftcms/cp/services/Config.ts.mjs'; export const Queue: InjectionKey = Symbol('Queue'); export const Axios: InjectionKey = Symbol('Axios'); -export const Config: InjectionKey = Symbol('Config'); diff --git a/resources/js/cp.ts b/resources/js/cp.ts index 788896a201d..5848bc93c6e 100644 --- a/resources/js/cp.ts +++ b/resources/js/cp.ts @@ -1,8 +1,4 @@ import '@craftcms/cp'; -import Cp from './bootstrap/cp.js'; +import './bootstrap/cp.js'; import './modules/navigation/components/CpGlobalSidebar.js'; import './modules/navigation/components/CpQueueIndicator.js'; - -window.Cp = Cp; - -console.log('window.Cp defined', window.Cp); diff --git a/resources/js/legacy.ts b/resources/js/legacy.ts index a770391ea16..0eefa97bd2e 100644 --- a/resources/js/legacy.ts +++ b/resources/js/legacy.ts @@ -3,9 +3,7 @@ import './modules/auth/components/login/login-form.js'; import './modules/auth/components/totp/totp-form.js'; import './modules/auth/components/recovery-codes/recovery-code-form.js'; -import Cp from './bootstrap/cp.js'; - -window.Cp = Cp; +import './bootstrap/cp.js'; /** * Components - dynamically imported after Craft is initialized diff --git a/resources/js/modules/navigation/components/CpQueueIndicator.ts b/resources/js/modules/navigation/components/CpQueueIndicator.ts index 8d7b1924a35..650b46f0d2c 100644 --- a/resources/js/modules/navigation/components/CpQueueIndicator.ts +++ b/resources/js/modules/navigation/components/CpQueueIndicator.ts @@ -4,7 +4,8 @@ import {JobStatus} from '@craftcms/cp/types/queue.js'; import type {JobInfo, JobUpdateDetail} from '@craftcms/cp'; import '@craftcms/cp/components/progress/progress.ts.mjs'; -import {QueueService, ConfigService} from '@craftcms/cp'; +import {QueueService} from '@craftcms/cp'; +import {getCpUrl} from '@craftcms/cp/utilities/api/actionClient.ts.mjs'; @customElement('cp-queue-indicator') class CpQueueIndicator extends LitElement { @@ -31,7 +32,6 @@ class CpQueueIndicator extends LitElement { hasWaitingJobs: boolean = false; #queue: QueueService = QueueService.getInstance(); - #config: ConfigService = ConfigService.getInstance(); override connectedCallback() { super.connectedCallback(); @@ -110,7 +110,7 @@ class CpQueueIndicator extends LitElement { return null; } - return this.#config.getCpUrl('utilities/queue-manager'); + return getCpUrl('utilities/queue-manager'); } protected override render() { diff --git a/resources/views/app.blade.php b/resources/views/app.blade.php index 1b3e225c0cf..81120ff967b 100644 --- a/resources/views/app.blade.php +++ b/resources/views/app.blade.php @@ -8,7 +8,8 @@ {!! app(\CraftCms\Cms\Plugin\Plugins::class)->getAssetsHtml() !!} {{ config('app.name') }} @@ -18,10 +19,10 @@ {!! $bodyHtml !!} diff --git a/src/Cp/Data/CraftConfigData.php b/src/Cp/Data/CraftConfigData.php new file mode 100644 index 00000000000..99e9a98db77 --- /dev/null +++ b/src/Cp/Data/CraftConfigData.php @@ -0,0 +1,201 @@ + */ + public array $asciiCharMap; + + public string $baseApiUrl; + + public string $baseSiteUrl; + + public string $baseUrl; + + public string $clientOs; + + /** @var array */ + public array $datepickerOptions; + + /** @var array */ + public array $defaultCookieOptions; + + /** @var array> */ + public array $fileKinds; + + public string $language; + + public string $left; + + public int $maxPasswordLength; + + public int $minPasswordLength; + + public string $orientation; + + public int $pageNum; + + public string $pageTrigger; + + public string $path; + + /** @var string[] */ + public array $registeredAssetBundles; + + /** @var string[] */ + public array $registeredJsFiles; + + public string $right; + + public string $systemUid; + + /** @var array */ + public array $timepickerOptions; + + public string $timezone; + + public string $tokenParam; + + /** @var object|array> */ + public object|array $translations; + + public bool $useEmailAsUsername; + + // ── CP-request keys ────────────────────────────────────────────────────── + + /** @var array>|null */ + public ?array $announcements; + + public ?string $baseCpUrl; + + public ?string $cpTrigger; + + // ── Auth/session keys ──────────────────────────────────────────────────── + + public string $csrfTokenName; + + public string $csrfTokenValue; + + // ── Authenticated-user keys ────────────────────────────────────────────── + + public ?bool $allowAdminChanges; + + public ?bool $allowUpdates; + + public ?bool $allowUppercaseInSlug; + + public ?bool $autosaveDrafts; + + /** @var array|null */ + public ?array $apiParams; + + public ?string $appId; + + public ?bool $autofocusPreferred; + + public ?bool $canAccessQueueManager; + + /** @var string[]|null */ + public ?array $dataAttributes; + + /** @var array|null */ + public ?array $defaultIndexCriteria; + + public ?bool $disableAutofocus; + + public ?int $edition; + + /** @var array|null */ + public ?array $elementTypeNames; + + public ?int $elevatedSessionDuration; + + /** @var string[]|null */ + public ?array $fieldsWithoutContent; + + public ?string $handleCasing; + + /** @var array{host: string, port: int, auth?: array{username?: string, password?: string}, protocol?: string}|null */ + public ?array $httpProxy; + + public ?bool $isImagick; + + public ?bool $isMultiSite; + + public ?bool $limitAutoSlugsToAscii; + + public ?int $maxUploadSize; + + public ?int $notificationDuration; + + public ?string $notificationPosition; + + public ?string $slideoutPosition; + + /** @var array|false|null */ + public array|false|null $previewIframeResizerOptions; + + public ?int $primarySiteId; + + public ?string $primarySiteLanguage; + + /** @var array>|null */ + public ?array $publishableSections; + + public ?bool $runQueueAutomatically; + + public ?int $siteId; + + /** @var array|null */ + public ?array $sites; + + public ?string $siteToken; + + public ?string $slugWordSeparator; + + public ?string $userEmail; + + public ?bool $userHasPasskeys; + + public ?int $userId; + + public ?bool $userIsAdmin; + + public ?string $username; + + // ── Merged from Cp::config() ───────────────────────────────────────────── + + public ?string $cpLogoUrl; + + public ?string $cpUrl; + + public ?string $defaultCpLocale; + + public ?int $rememberedUserSessionDuration; +} diff --git a/workbench/app/Providers/TypeScriptTransformerServiceProvider.php b/workbench/app/Providers/TypeScriptTransformerServiceProvider.php index befe715b9de..1af68290be9 100644 --- a/workbench/app/Providers/TypeScriptTransformerServiceProvider.php +++ b/workbench/app/Providers/TypeScriptTransformerServiceProvider.php @@ -4,6 +4,7 @@ namespace Workbench\App\Providers; +use CraftCms\Cms\Cp\Data\CraftConfigData; use CraftCms\Cms\Update\Data\Updates; use DateTimeInterface; use Spatie\LaravelTypeScriptTransformer\TypeScriptTransformerApplicationServiceProvider; @@ -24,6 +25,7 @@ protected function configure(TypeScriptTransformerConfigFactory $config): void ->provider(new ClassListTransformedProvider( [ Updates::class, + CraftConfigData::class, ], [ new EnumTransformer, From a0ade642c650f3997a4d3238aced8bc6119b3f37 Mon Sep 17 00:00:00 2001 From: Brian Hanson Date: Fri, 5 Jun 2026 11:09:52 -0500 Subject: [PATCH 2/6] Decouple @craftcms/cp from window.Craft global Introduce configure()/getCraft()/tryGetCraft() pattern so the @craftcms/cp package no longer depends on the global window.Craft object. The host application passes the context explicitly at boot via configure(). - Add craft.ts with configure(), getCraft(), tryGetCraft(), resetConfiguration() - actionClient.ts uses getCraft() lazily in request interceptor - apiClient.ts uses getCraft() lazily in request interceptor - disclosure.ts uses tryGetCraft() for optional setCookie - Export CraftContext type and configure functions from package index - bootstrap/cp.ts calls configure(window.Craft) during init() Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../src/components/disclosure/disclosure.ts | 6 +- packages/craftcms-cp/src/craft.ts | 56 +++++++++++++++++++ packages/craftcms-cp/src/index.ts | 4 ++ .../src/utilities/api/actionClient.ts | 44 +++++---------- .../src/utilities/api/apiClient.ts | 11 ++-- resources/js/bootstrap/cp.ts | 4 +- 6 files changed, 86 insertions(+), 39 deletions(-) create mode 100644 packages/craftcms-cp/src/craft.ts diff --git a/packages/craftcms-cp/src/components/disclosure/disclosure.ts b/packages/craftcms-cp/src/components/disclosure/disclosure.ts index 4db5ec2a9cc..3583e241159 100644 --- a/packages/craftcms-cp/src/components/disclosure/disclosure.ts +++ b/packages/craftcms-cp/src/components/disclosure/disclosure.ts @@ -4,6 +4,8 @@ * Allows you to wrap a button[type="button"] and target an element to toggle the `data-state` attribute on. * Set `aria-expanded` on the button */ +import {tryGetCraft} from '@src/craft'; + export default class CraftDisclosure extends HTMLElement { static observedAttributes = ['state']; private cookieName: string | null = null; @@ -91,7 +93,7 @@ export default class CraftDisclosure extends HTMLElement { } if (this.cookieName) { - window.Craft?.setCookie(this.cookieName, 'expanded'); + tryGetCraft()?.setCookie?.(this.cookieName, 'expanded'); } }; @@ -109,7 +111,7 @@ export default class CraftDisclosure extends HTMLElement { } if (this.cookieName) { - window.Craft?.setCookie(this.cookieName, 'collapsed'); + tryGetCraft()?.setCookie?.(this.cookieName, 'collapsed'); } }; diff --git a/packages/craftcms-cp/src/craft.ts b/packages/craftcms-cp/src/craft.ts new file mode 100644 index 00000000000..cef418875f7 --- /dev/null +++ b/packages/craftcms-cp/src/craft.ts @@ -0,0 +1,56 @@ +import type {AxiosProxyConfig} from 'axios'; + +/** + * The contract for the Craft context that the @craftcms/cp package needs. + * + * This is intentionally minimal — only the capabilities the package actually + * uses. The consuming application provides this via `configure()` at boot. + */ +export interface CraftContext { + getActionUrl(action?: string, params?: string | object): string; + getCpUrl(path?: string, params?: string | object): string; + setCookie?: (name: string, value: string) => void; + registeredAssetBundles: string[]; + registeredJsFiles: string[]; + apiParams?: Record; + httpProxy?: AxiosProxyConfig; +} + +let context: CraftContext | null = null; + +/** + * Configure the package with a Craft context. + * Must be called before any API utilities are used. + */ +export function configure(craft: CraftContext): void { + context = craft; +} + +/** + * Get the configured Craft context. + * Throws if `configure()` has not been called — use for required capabilities + * (API clients, URL builders). + */ +export function getCraft(): CraftContext { + if (!context) { + throw new Error( + '@craftcms/cp has not been configured. Call configure(craft) before using package utilities.' + ); + } + return context; +} + +/** + * Get the configured Craft context, or null if not yet configured. + * Use for optional/graceful-degradation behaviors (e.g. cookie persistence). + */ +export function tryGetCraft(): CraftContext | null { + return context; +} + +/** + * Reset configuration (for testing). + */ +export function resetConfiguration(): void { + context = null; +} diff --git a/packages/craftcms-cp/src/index.ts b/packages/craftcms-cp/src/index.ts index 50a075bf363..b445c52208f 100644 --- a/packages/craftcms-cp/src/index.ts +++ b/packages/craftcms-cp/src/index.ts @@ -67,6 +67,10 @@ export * from './utilities/api/apiClient.js'; export * from './utilities/string.js'; export * from './utilities/dom.js'; +// Configuration +export {configure, getCraft, tryGetCraft, resetConfiguration} from './craft.js'; +export type {CraftContext} from './craft.js'; + // Services export {QueueService} from './services/Queue.js'; export {AssetIndexer} from './services/AssetIndexer.js'; diff --git a/packages/craftcms-cp/src/utilities/api/actionClient.ts b/packages/craftcms-cp/src/utilities/api/actionClient.ts index 0aa3e7041d2..6da2fb420ff 100644 --- a/packages/craftcms-cp/src/utilities/api/actionClient.ts +++ b/packages/craftcms-cp/src/utilities/api/actionClient.ts @@ -1,49 +1,44 @@ import axios, {type RawAxiosRequestHeaders} from 'axios'; import {Csrf} from '@src/services/Csrf'; - -declare const Craft: any; +import {getCraft} from '@src/craft'; /** * Get the action URL for a given action path. - * Delegates to Craft.getActionUrl() when available (runtime), - * falls back to a path-based URL for early/test contexts. */ export function getActionUrl(action: string = '') { - if (typeof Craft !== 'undefined' && Craft.getActionUrl) { - return Craft.getActionUrl(action); - } - return `/admin/actions/${action}`; + return getCraft().getActionUrl(action); } /** * Get the CP URL for a given path. - * Delegates to Craft.getCpUrl() when available. */ export function getCpUrl(path: string = '', params?: object) { - if (typeof Craft !== 'undefined' && Craft.getCpUrl) { - return Craft.getCpUrl(path, params); - } - return `/admin/${path}`; + return getCraft().getCpUrl(path, params); } export function actionHeaders(): RawAxiosRequestHeaders { + const craft = getCraft(); + let headers: Record = { 'X-Registered-Asset-Bundles': [ - ...new Set(Craft.registeredAssetBundles), + ...new Set(craft.registeredAssetBundles), ].join(','), - 'X-Registered-Js-Files': [...new Set(Craft.registeredJsFiles)].join(','), + 'X-Registered-Js-Files': [...new Set(craft.registeredJsFiles)].join(','), }; return headers; } -export const actionClient = axios.create({ - baseURL: getActionUrl(), -}); +export const actionClient = axios.create(); const csrf = new Csrf(); actionClient.interceptors.request.use(async (config) => { + const craft = getCraft(); + + // Set base URL lazily so configure() can be called after import + config.baseURL ??= craft.getActionUrl(''); + // Set X-Requested-With header config.headers.set('X-Requested-With', 'XMLHttpRequest'); @@ -53,19 +48,6 @@ actionClient.interceptors.request.use(async (config) => { config.headers.set(key, value); }); - // @TODO Make sure we really don't need this anymore - // if ( - // ['post', 'put', 'patch', 'delete'].includes( - // config.method?.toLowerCase() || '' - // ) && - // !config.url?.includes('users/session-info') - // ) { - // const tokenValue = await csrf.getToken(); - // if (tokenValue) { - // config.headers.set('X-CSRF-Token', tokenValue); - // } - // } - return config; }); diff --git a/packages/craftcms-cp/src/utilities/api/apiClient.ts b/packages/craftcms-cp/src/utilities/api/apiClient.ts index ef0e5c21889..765503fbd57 100644 --- a/packages/craftcms-cp/src/utilities/api/apiClient.ts +++ b/packages/craftcms-cp/src/utilities/api/apiClient.ts @@ -4,8 +4,7 @@ import axios, { type InternalAxiosRequestConfig, } from 'axios'; import {actionClient} from './actionClient.js'; - -declare const Craft: any; +import {getCraft} from '@src/craft'; let loadingApiHeaders = false; let apiHeaderWaitlist: Promise[] = []; @@ -110,10 +109,12 @@ apiClient.interceptors.request.use(async (config) => { }); } + const craft = getCraft(); + const finalConfig = { ...config, params: { - ...(Craft.apiParams || {}), + ...(craft.apiParams || {}), ...config.params, v: new Date().getTime(), }, @@ -123,8 +124,8 @@ apiClient.interceptors.request.use(async (config) => { finalConfig.params.processCraftHeaders = 1; } - if (Craft.httpProxy) { - finalConfig.proxy = Craft.httpProxy as AxiosProxyConfig; + if (craft.httpProxy) { + finalConfig.proxy = craft.httpProxy as AxiosProxyConfig; } return finalConfig; diff --git a/resources/js/bootstrap/cp.ts b/resources/js/bootstrap/cp.ts index bcbf28ad028..654540582be 100644 --- a/resources/js/bootstrap/cp.ts +++ b/resources/js/bootstrap/cp.ts @@ -1,4 +1,4 @@ -import {QueueService} from '@craftcms/cp'; +import {QueueService, configure} from '@craftcms/cp'; import {createInertiaApp, router} from '@inertiajs/vue3'; import QueueManager from '@/modules/utilities/components/queue-manager/QueueManager.vue'; import {Axios, Queue} from '@/common/types/keys'; @@ -32,6 +32,8 @@ function booted(callback: (craft: any) => void) { } function init() { + configure(window.Craft); + queue.initialize({ runAutomatically: window.Craft.runQueueAutomatically ?? true, enabled: true, From 68f93b8c000619b41605481d8e702b4b6b6e8079 Mon Sep 17 00:00:00 2001 From: Brian Hanson Date: Fri, 5 Jun 2026 11:26:12 -0500 Subject: [PATCH 3/6] Remove CraftConfigData DTO and generated types Undo the Spatie typescript-transformer type generation for window.Craft. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Cp/Data/CraftConfigData.php | 201 ------------------ .../TypeScriptTransformerServiceProvider.php | 2 - 2 files changed, 203 deletions(-) delete mode 100644 src/Cp/Data/CraftConfigData.php diff --git a/src/Cp/Data/CraftConfigData.php b/src/Cp/Data/CraftConfigData.php deleted file mode 100644 index 99e9a98db77..00000000000 --- a/src/Cp/Data/CraftConfigData.php +++ /dev/null @@ -1,201 +0,0 @@ - */ - public array $asciiCharMap; - - public string $baseApiUrl; - - public string $baseSiteUrl; - - public string $baseUrl; - - public string $clientOs; - - /** @var array */ - public array $datepickerOptions; - - /** @var array */ - public array $defaultCookieOptions; - - /** @var array> */ - public array $fileKinds; - - public string $language; - - public string $left; - - public int $maxPasswordLength; - - public int $minPasswordLength; - - public string $orientation; - - public int $pageNum; - - public string $pageTrigger; - - public string $path; - - /** @var string[] */ - public array $registeredAssetBundles; - - /** @var string[] */ - public array $registeredJsFiles; - - public string $right; - - public string $systemUid; - - /** @var array */ - public array $timepickerOptions; - - public string $timezone; - - public string $tokenParam; - - /** @var object|array> */ - public object|array $translations; - - public bool $useEmailAsUsername; - - // ── CP-request keys ────────────────────────────────────────────────────── - - /** @var array>|null */ - public ?array $announcements; - - public ?string $baseCpUrl; - - public ?string $cpTrigger; - - // ── Auth/session keys ──────────────────────────────────────────────────── - - public string $csrfTokenName; - - public string $csrfTokenValue; - - // ── Authenticated-user keys ────────────────────────────────────────────── - - public ?bool $allowAdminChanges; - - public ?bool $allowUpdates; - - public ?bool $allowUppercaseInSlug; - - public ?bool $autosaveDrafts; - - /** @var array|null */ - public ?array $apiParams; - - public ?string $appId; - - public ?bool $autofocusPreferred; - - public ?bool $canAccessQueueManager; - - /** @var string[]|null */ - public ?array $dataAttributes; - - /** @var array|null */ - public ?array $defaultIndexCriteria; - - public ?bool $disableAutofocus; - - public ?int $edition; - - /** @var array|null */ - public ?array $elementTypeNames; - - public ?int $elevatedSessionDuration; - - /** @var string[]|null */ - public ?array $fieldsWithoutContent; - - public ?string $handleCasing; - - /** @var array{host: string, port: int, auth?: array{username?: string, password?: string}, protocol?: string}|null */ - public ?array $httpProxy; - - public ?bool $isImagick; - - public ?bool $isMultiSite; - - public ?bool $limitAutoSlugsToAscii; - - public ?int $maxUploadSize; - - public ?int $notificationDuration; - - public ?string $notificationPosition; - - public ?string $slideoutPosition; - - /** @var array|false|null */ - public array|false|null $previewIframeResizerOptions; - - public ?int $primarySiteId; - - public ?string $primarySiteLanguage; - - /** @var array>|null */ - public ?array $publishableSections; - - public ?bool $runQueueAutomatically; - - public ?int $siteId; - - /** @var array|null */ - public ?array $sites; - - public ?string $siteToken; - - public ?string $slugWordSeparator; - - public ?string $userEmail; - - public ?bool $userHasPasskeys; - - public ?int $userId; - - public ?bool $userIsAdmin; - - public ?string $username; - - // ── Merged from Cp::config() ───────────────────────────────────────────── - - public ?string $cpLogoUrl; - - public ?string $cpUrl; - - public ?string $defaultCpLocale; - - public ?int $rememberedUserSessionDuration; -} diff --git a/workbench/app/Providers/TypeScriptTransformerServiceProvider.php b/workbench/app/Providers/TypeScriptTransformerServiceProvider.php index 1af68290be9..befe715b9de 100644 --- a/workbench/app/Providers/TypeScriptTransformerServiceProvider.php +++ b/workbench/app/Providers/TypeScriptTransformerServiceProvider.php @@ -4,7 +4,6 @@ namespace Workbench\App\Providers; -use CraftCms\Cms\Cp\Data\CraftConfigData; use CraftCms\Cms\Update\Data\Updates; use DateTimeInterface; use Spatie\LaravelTypeScriptTransformer\TypeScriptTransformerApplicationServiceProvider; @@ -25,7 +24,6 @@ protected function configure(TypeScriptTransformerConfigFactory $config): void ->provider(new ClassListTransformedProvider( [ Updates::class, - CraftConfigData::class, ], [ new EnumTransformer, From 603dedce2024b76fdec3efeda5852587b20dd34e Mon Sep 17 00:00:00 2001 From: Brian Hanson Date: Fri, 5 Jun 2026 12:12:38 -0500 Subject: [PATCH 4/6] Rename @craftcms/cp to @craftcms/ui, extract services to app layer Split the monolithic @craftcms/cp package into: - @craftcms/ui: Pure UI components, translations, cookies, utilities, styles, constants, and Storybook (no HTTP/service logic) - resources/js/common/services/: QueueService, AssetIndexer, Csrf - resources/js/common/api/: actionClient, apiClient Key changes: - Package renamed from @craftcms/cp to @craftcms/ui - Services and API utilities moved to resources/js/common/ - Auth challenge form refactored to use native fetch (no actionClient dep) - Disclosure component uses Cookies class directly (no configure() needed) - Removed craft.ts configure/getCraft pattern (app layer uses window.Craft) - Queue types moved to resources/js/common/types/queue.ts - Updated all imports across 100+ files - All 193 tests pass (186 UI + 7 Queue) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .storybook/main.ts | 2 +- .storybook/preview.ts | 2 +- package-lock.json | 2708 ++++++++--------- package.json | 2 +- packages/craftcms-cp/src/craft.ts | 56 - packages/craftcms-cp/src/services/Config.ts | 55 - .../craftcms-legacy/cp/src/css/_compat.scss | 2 +- packages/craftcms-legacy/cp/src/js/CP.js | 4 +- packages/craftcms-legacy/cp/src/js/Craft.js | 2 +- packages/craftcms-legacy/package.json | 2 +- .../{craftcms-cp => craftcms-ui}/.gitignore | 0 packages/{craftcms-cp => craftcms-ui}/.nvmrc | 0 .../.prettierignore | 0 .../.storybook/main.ts | 0 .../.storybook/preview.css | 0 .../.storybook/preview.ts | 0 .../.storybook/vitest.setup.ts | 0 .../{craftcms-cp => craftcms-ui}/README.md | 0 .../custom-elements-manifest.config.mjs | 0 .../custom-elements.json | 0 .../{craftcms-cp => craftcms-ui}/package.json | 16 +- .../scripts/build.js | 2 +- .../scripts/generate-color-palette.js | 0 .../scripts/generate-colors.js | 0 .../scripts/generate-vue-wrappers.js | 0 .../scripts/utils.js | 0 .../src/actions/index.ts | 0 .../action-item/action-item.stories.ts | 0 .../action-item/action-item.styles.ts | 0 .../src/components/action-item/action-item.ts | 0 .../action-menu/action-menu.stories.ts | 0 .../src/components/action-menu/action-menu.ts | 0 .../auth-challenge-form.ts | 17 +- .../src/components/avatar/avatar.stories.ts | 0 .../src/components/avatar/avatar.styles.ts | 0 .../src/components/avatar/avatar.ts | 0 .../badge-indicator.stories.ts | 0 .../badge-indicator/badge-indicator.styles.ts | 0 .../badge-indicator/badge-indicator.ts | 0 .../breadcrumb-item/breadcrumb-item.ts | 0 .../breadcrumbs/breadcrumbs.stories.ts | 0 .../breadcrumbs/breadcrumbs.styles.ts | 0 .../src/components/breadcrumbs/breadcrumbs.ts | 0 .../button-group/button-group.stories.ts | 0 .../button-group/button-group.styles.ts | 0 .../components/button-group/button-group.ts | 0 .../src/components/button/button.stories.ts | 0 .../src/components/button/button.styles.ts | 0 .../src/components/button/button.ts | 0 .../src/components/callout/callout.stories.ts | 0 .../src/components/callout/callout.styles.ts | 0 .../src/components/callout/callout.ts | 0 .../src/components/card/card.stories.ts | 0 .../src/components/card/card.styles.ts | 0 .../src/components/card/card.ts | 0 .../checkbox-group/checkbox-group.ts | 0 .../checkbox-indeterminate.stories.ts | 0 .../checkbox-indeterminate.ts | 0 .../components/checkbox/checkbox.stories.ts | 0 .../src/components/checkbox/checkbox.ts | 0 .../src/components/chip/chip.stories.ts | 0 .../src/components/chip/chip.styles.ts | 0 .../src/components/chip/chip.ts | 0 .../components/combobox/combobox.stories.ts | 0 .../components/combobox/combobox.styles.ts | 0 .../src/components/combobox/combobox.ts | 0 .../copy-attribute/copy-attribute.stories.ts | 0 .../copy-attribute/copy-attribute.styles.ts | 0 .../copy-attribute/copy-attribute.ts | 0 .../copy-button/copy-button.stories.ts | 0 .../copy-button/copy-button.styles.ts | 0 .../src/components/copy-button/copy-button.ts | 0 .../src/components/dialog/dialog.stories.ts | 0 .../src/components/dialog/dialog.ts | 0 .../disclosure/disclosure.stories.ts | 0 .../src/components/disclosure/disclosure.ts | 8 +- .../src/components/drawer/drawer.stories.ts | 0 .../src/components/drawer/drawer.ts | 0 .../components/dropdown/dropdown.stories.ts | 0 .../components/dropdown/dropdown.styles.ts | 0 .../src/components/dropdown/dropdown.ts | 0 .../src/components/field-group/field-group.ts | 0 .../src/components/icon/icon.stories.ts | 0 .../src/components/icon/icon.ts | 0 .../src/components/indicator/Indicator.mdx | 0 .../components/indicator/indicator.stories.ts | 0 .../src/components/indicator/indicator.ts | 0 .../components/info-icon/info-icon.stories.ts | 0 .../src/components/info-icon/info-icon.ts | 0 .../input-file/input-file.stories.ts | 0 .../input-file/input-file.styles.ts | 0 .../src/components/input-file/input-file.ts | 0 .../input-file/selected-file-list.ts | 0 .../components/input-handle/input-handle.ts | 0 .../input-password/input-password.stories.ts | 0 .../input-password/input-password.ts | 0 .../src/components/input/input.stories.ts | 0 .../src/components/input/input.styles.ts | 0 .../src/components/input/input.ts | 0 .../components/nav-item/nav-item.stories.ts | 0 .../components/nav-item/nav-item.styles.ts | 0 .../src/components/nav-item/nav-item.ts | 0 .../src/components/nav-list/nav-list.ts | 0 .../src/components/option/option.styles.ts | 0 .../src/components/option/option.ts | 0 .../src/components/pane/pane.ts | 0 .../src/components/popover/popover.ts | 0 .../progress-bar/progress-bar.stories.ts | 0 .../progress-bar/progress-bar.styles.ts | 0 .../components/progress-bar/progress-bar.ts | 0 .../components/progress/progress.stories.ts | 0 .../src/components/progress/progress.ts | 0 .../src/components/radio-group/radio-group.ts | 0 .../src/components/radio/radio.ts | 0 .../src/components/select/select.stories.ts | 0 .../src/components/select/select.styles.ts | 0 .../src/components/select/select.ts | 0 .../components/shortcut/shortcut.stories.ts | 0 .../src/components/shortcut/shortcut.ts | 0 .../src/components/spinner/spinner.stories.ts | 0 .../src/components/spinner/spinner.styles.ts | 0 .../src/components/spinner/spinner.ts | 0 .../src/components/status/status.stories.ts | 0 .../src/components/status/status.styles.ts | 0 .../src/components/status/status.ts | 0 .../components/switch-button/switch-button.ts | 0 .../src/components/switch/switch.stories.ts | 0 .../src/components/switch/switch.styles.ts | 0 .../src/components/switch/switch.ts | 0 .../src/components/tab/tab.styles.ts | 0 .../src/components/tab/tab.ts | 0 .../src/components/tabs/tabs.stories.ts | 0 .../src/components/tabs/tabs.styles.ts | 0 .../src/components/tabs/tabs.ts | 0 .../components/textarea/textarea.stories.ts | 0 .../components/textarea/textarea.styles.ts | 0 .../src/components/textarea/textarea.ts | 0 .../src/components/tooltip/Tooltip.mdx | 0 .../src/components/tooltip/tooltip.stories.ts | 0 .../src/components/tooltip/tooltip.ts | 0 .../visually-hidden/visually-hidden.ts | 0 .../src/constants/appearances.ts | 0 .../src/constants/colors.ts | 0 .../src/constants/variants.ts | 0 .../{craftcms-cp => craftcms-ui}/src/index.ts | 23 - .../src/stories/tokens/Colors.mdx | 0 .../src/stories/tokens/Docs.mdx | 0 .../src/stories/tokens/colorable.stories.ts | 0 .../src/stories/tokens/colors.stories.ts | 0 .../src/stories/tokens/helpers.ts | 0 .../src/stories/tokens/spacing.stories.ts | 0 .../src/stories/tokens/surface.stories.ts | 0 .../src/stories/tokens/text.stories.ts | 0 .../src/stories/tokens/variants.stories.ts | 0 .../src/styles/color-definitions.js | 0 .../src/styles/cp.css | 0 .../src/styles/form.styles.ts | 0 .../src/styles/host.styles.ts | 0 .../src/styles/shared/base.css | 0 .../src/styles/shared/color-palette.css | 0 .../src/styles/shared/colorable.css | 0 .../src/styles/shared/preflight.css | 0 .../src/styles/shared/tokens.css | 0 .../src/styles/shared/variables.css | 0 .../src/styles/variants.styles.ts | 0 .../src/styles/visually-hidden.styles.ts | 0 .../src/types/events.ts | 0 .../src/types/globals.ts | 6 - .../src/types/index.ts | 8 - .../src/utilities/cookies.test.ts | 0 .../src/utilities/cookies.ts | 0 .../src/utilities/dom.test.ts | 0 .../src/utilities/dom.ts | 0 .../src/utilities/escapeHtml.ts | 0 .../src/utilities/format.test.ts | 0 .../src/utilities/format.ts | 0 .../src/utilities/icons.test.ts | 0 .../src/utilities/icons.ts | 0 .../src/utilities/string.test.ts | 0 .../src/utilities/string.ts | 0 .../src/utilities/translate.test.ts | 0 .../src/utilities/translate.ts | 0 .../{craftcms-cp => craftcms-ui}/tailwind.css | 4 +- .../tsconfig.json | 0 .../vitest.config.ts | 10 - .../vitest.shims.d.ts | 0 resources/css/cp.css | 4 +- resources/js/bootstrap/cp.ts | 6 +- .../js/common}/api/actionClient.ts | 21 +- .../js/common}/api/apiClient.ts | 11 +- resources/js/common/components/ActionMenu.vue | 2 +- .../js/common/components/Breadcrumbs.vue | 2 +- .../js/common/components/CalloutReadOnly.vue | 2 +- resources/js/common/components/CpSidebar.vue | 2 +- resources/js/common/components/FileUpload.vue | 2 +- resources/js/common/components/ModalForm.vue | 2 +- .../js/common/components/ReorderButton.vue | 2 +- resources/js/common/components/Text.vue | 2 +- resources/js/common/components/UserMenu.vue | 2 +- .../js/common/composables/useAppendHtml.ts | 2 +- resources/js/common/composables/useFetch.ts | 2 +- resources/js/common/form/CheckboxGroup.vue | 4 +- resources/js/common/form/CraftCombobox.vue | 2 +- resources/js/common/form/ErrorSummary.vue | 2 +- resources/js/common/form/Select.vue | 2 +- resources/js/common/layouts/AppLayout.vue | 2 +- resources/js/common/layouts/AuthBase.vue | 2 +- resources/js/common/layouts/IndexLayout.vue | 2 +- .../js/common}/services/AssetIndexer.ts | 9 +- .../js/common}/services/Csrf.ts | 2 +- .../js/common}/services/Queue.test.ts | 8 +- .../js/common}/services/Queue.ts | 6 +- resources/js/common/types/globals.d.ts | 5 +- resources/js/common/types/index.ts | 2 +- resources/js/common/types/keys.ts | 2 +- .../js/common}/types/queue.ts | 0 .../common/utils/transformBooleanOptions.ts | 2 +- resources/js/cp.ts | 2 +- resources/js/legacy.ts | 4 +- .../admin-table/components/AdminTable.vue | 2 +- .../admin-table/components/DeleteButton.vue | 2 +- .../admin-table/components/SearchForm.vue | 4 +- .../composables/useEditableTable.ts | 2 +- .../helpers/createCraftColumnHelper.ts | 2 +- .../auth/components/login/login-challenge.ts | 2 +- .../auth/components/login/login-form.ts | 3 +- .../components/login/login-reset-password.ts | 3 +- .../recovery-codes/recovery-code-form.ts | 2 +- .../modules/auth/components/totp/totp-form.ts | 2 +- .../components/CreateEntryTypeButton.vue | 2 +- .../components/EntryTypeSelect.vue | 4 +- .../install/components/AccountFields.vue | 6 +- .../modules/install/components/DbFields.vue | 6 +- .../install/components/InstallingScreen.vue | 2 +- .../modules/install/components/SiteFields.vue | 4 +- .../modules/install/composables/useInstall.ts | 2 +- .../navigation/components/CpQueueIndicator.ts | 10 +- .../permissions/components/PermissionList.vue | 2 +- .../components/PluginActionMenu.vue | 2 +- .../components/PluginDetails.vue | 2 +- .../components/PluginEdition.vue | 2 +- .../components/PluginLicenseInput.vue | 4 +- .../components/PluginLicenseIssues.vue | 2 +- .../components/PluginStatus.vue | 2 +- .../plugin-manager/components/PluginsList.vue | 2 +- .../components/DeleteSectionButton.vue | 2 +- .../components/PreviewTargetsTable.vue | 2 +- .../sections/components/SiteSettingsTable.vue | 2 +- .../components/email/SiteOverridesTable.vue | 2 +- .../sites/components/DeleteSiteModal.vue | 2 +- .../modules/sites/components/SiteFields.vue | 4 +- .../js/modules/updater/components/Release.vue | 2 +- .../js/modules/updater/components/Update.vue | 2 +- .../js/modules/updater/components/Updates.vue | 2 +- .../modules/updater/composables/useUpdater.ts | 2 +- .../utilities/components/DatabaseBackup.vue | 4 +- .../utilities/components/Migrations.vue | 2 +- .../components/asset-indexes/AssetIndexes.vue | 4 +- .../asset-indexes/IndexingSessions.vue | 2 +- .../asset-indexes/ReviewSessionModal.vue | 6 +- .../asset-indexes/SessionActions.vue | 2 +- .../components/clear-caches/ClearCaches.vue | 2 +- .../deprecation-errors/DeleteLogButton.vue | 2 +- .../deprecation-errors/DeprecationErrors.vue | 2 +- .../DeprecationErrorsToolbar.vue | 2 +- .../deprecation-errors/StackTraceButton.vue | 2 +- .../components/find-replace/FindReplace.vue | 4 +- .../project-config/ProjectConfig.vue | 2 +- .../project-config/ProjectConfigDiff.vue | 2 +- .../project-config/SyncConfigButton.vue | 2 +- .../components/queue-manager/QueueManager.vue | 2 +- .../queue-manager/QueueManagerIndex.vue | 4 +- .../queue-manager/QueueManagerShow.vue | 4 +- .../queue-manager/QueueManagerToolbar.vue | 4 +- .../queue-manager/ReleaseJobButton.vue | 4 +- .../queue-manager/RetryJobButton.vue | 4 +- .../SystemMessageEditModal.vue | 6 +- .../system-messages/SystemMessages.vue | 2 +- .../utilities/composables/useAssetIndexer.ts | 2 +- .../utilities/composables/useProjectConfig.ts | 2 +- resources/js/pages/graphql/Schemas.vue | 2 +- resources/js/pages/graphql/Tokens.vue | 2 +- resources/js/pages/install/Install.vue | 2 +- resources/js/pages/settings/Email.vue | 4 +- resources/js/pages/settings/EntryTypes.vue | 2 +- resources/js/pages/settings/Fields.vue | 2 +- resources/js/pages/settings/Filesystems.vue | 2 +- resources/js/pages/settings/General.vue | 4 +- .../js/pages/settings/ImageTransforms.vue | 2 +- resources/js/pages/settings/Index.vue | 2 +- resources/js/pages/settings/Sections.vue | 2 +- resources/js/pages/settings/SectionsEdit.vue | 10 +- resources/js/pages/settings/Sites.vue | 2 +- resources/js/pages/settings/SitesEdit.vue | 2 +- resources/js/pages/settings/UserGroups.vue | 2 +- .../js/pages/settings/UserGroupsEdit.vue | 8 +- resources/js/pages/settings/Volumes.vue | 2 +- tsconfig.json | 2 +- 298 files changed, 1525 insertions(+), 1754 deletions(-) delete mode 100644 packages/craftcms-cp/src/craft.ts delete mode 100644 packages/craftcms-cp/src/services/Config.ts rename packages/{craftcms-cp => craftcms-ui}/.gitignore (100%) rename packages/{craftcms-cp => craftcms-ui}/.nvmrc (100%) rename packages/{craftcms-cp => craftcms-ui}/.prettierignore (100%) rename packages/{craftcms-cp => craftcms-ui}/.storybook/main.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/.storybook/preview.css (100%) rename packages/{craftcms-cp => craftcms-ui}/.storybook/preview.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/.storybook/vitest.setup.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/README.md (100%) rename packages/{craftcms-cp => craftcms-ui}/custom-elements-manifest.config.mjs (100%) rename packages/{craftcms-cp => craftcms-ui}/custom-elements.json (100%) rename packages/{craftcms-cp => craftcms-ui}/package.json (91%) rename packages/{craftcms-cp => craftcms-ui}/scripts/build.js (98%) rename packages/{craftcms-cp => craftcms-ui}/scripts/generate-color-palette.js (100%) rename packages/{craftcms-cp => craftcms-ui}/scripts/generate-colors.js (100%) rename packages/{craftcms-cp => craftcms-ui}/scripts/generate-vue-wrappers.js (100%) rename packages/{craftcms-cp => craftcms-ui}/scripts/utils.js (100%) rename packages/{craftcms-cp => craftcms-ui}/src/actions/index.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/action-item/action-item.stories.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/action-item/action-item.styles.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/action-item/action-item.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/action-menu/action-menu.stories.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/action-menu/action-menu.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/auth-challenge-form/auth-challenge-form.ts (95%) rename packages/{craftcms-cp => craftcms-ui}/src/components/avatar/avatar.stories.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/avatar/avatar.styles.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/avatar/avatar.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/badge-indicator/badge-indicator.stories.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/badge-indicator/badge-indicator.styles.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/badge-indicator/badge-indicator.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/breadcrumb-item/breadcrumb-item.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/breadcrumbs/breadcrumbs.stories.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/breadcrumbs/breadcrumbs.styles.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/breadcrumbs/breadcrumbs.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/button-group/button-group.stories.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/button-group/button-group.styles.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/button-group/button-group.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/button/button.stories.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/button/button.styles.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/button/button.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/callout/callout.stories.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/callout/callout.styles.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/callout/callout.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/card/card.stories.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/card/card.styles.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/card/card.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/checkbox-group/checkbox-group.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/checkbox-indeterminate/checkbox-indeterminate.stories.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/checkbox-indeterminate/checkbox-indeterminate.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/checkbox/checkbox.stories.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/checkbox/checkbox.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/chip/chip.stories.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/chip/chip.styles.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/chip/chip.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/combobox/combobox.stories.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/combobox/combobox.styles.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/combobox/combobox.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/copy-attribute/copy-attribute.stories.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/copy-attribute/copy-attribute.styles.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/copy-attribute/copy-attribute.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/copy-button/copy-button.stories.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/copy-button/copy-button.styles.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/copy-button/copy-button.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/dialog/dialog.stories.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/dialog/dialog.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/disclosure/disclosure.stories.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/disclosure/disclosure.ts (94%) rename packages/{craftcms-cp => craftcms-ui}/src/components/drawer/drawer.stories.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/drawer/drawer.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/dropdown/dropdown.stories.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/dropdown/dropdown.styles.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/dropdown/dropdown.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/field-group/field-group.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/icon/icon.stories.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/icon/icon.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/indicator/Indicator.mdx (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/indicator/indicator.stories.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/indicator/indicator.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/info-icon/info-icon.stories.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/info-icon/info-icon.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/input-file/input-file.stories.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/input-file/input-file.styles.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/input-file/input-file.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/input-file/selected-file-list.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/input-handle/input-handle.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/input-password/input-password.stories.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/input-password/input-password.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/input/input.stories.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/input/input.styles.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/input/input.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/nav-item/nav-item.stories.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/nav-item/nav-item.styles.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/nav-item/nav-item.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/nav-list/nav-list.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/option/option.styles.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/option/option.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/pane/pane.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/popover/popover.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/progress-bar/progress-bar.stories.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/progress-bar/progress-bar.styles.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/progress-bar/progress-bar.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/progress/progress.stories.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/progress/progress.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/radio-group/radio-group.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/radio/radio.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/select/select.stories.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/select/select.styles.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/select/select.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/shortcut/shortcut.stories.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/shortcut/shortcut.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/spinner/spinner.stories.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/spinner/spinner.styles.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/spinner/spinner.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/status/status.stories.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/status/status.styles.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/status/status.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/switch-button/switch-button.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/switch/switch.stories.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/switch/switch.styles.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/switch/switch.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/tab/tab.styles.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/tab/tab.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/tabs/tabs.stories.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/tabs/tabs.styles.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/tabs/tabs.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/textarea/textarea.stories.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/textarea/textarea.styles.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/textarea/textarea.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/tooltip/Tooltip.mdx (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/tooltip/tooltip.stories.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/tooltip/tooltip.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/components/visually-hidden/visually-hidden.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/constants/appearances.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/constants/colors.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/constants/variants.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/index.ts (87%) rename packages/{craftcms-cp => craftcms-ui}/src/stories/tokens/Colors.mdx (100%) rename packages/{craftcms-cp => craftcms-ui}/src/stories/tokens/Docs.mdx (100%) rename packages/{craftcms-cp => craftcms-ui}/src/stories/tokens/colorable.stories.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/stories/tokens/colors.stories.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/stories/tokens/helpers.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/stories/tokens/spacing.stories.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/stories/tokens/surface.stories.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/stories/tokens/text.stories.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/stories/tokens/variants.stories.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/styles/color-definitions.js (100%) rename packages/{craftcms-cp => craftcms-ui}/src/styles/cp.css (100%) rename packages/{craftcms-cp => craftcms-ui}/src/styles/form.styles.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/styles/host.styles.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/styles/shared/base.css (100%) rename packages/{craftcms-cp => craftcms-ui}/src/styles/shared/color-palette.css (100%) rename packages/{craftcms-cp => craftcms-ui}/src/styles/shared/colorable.css (100%) rename packages/{craftcms-cp => craftcms-ui}/src/styles/shared/preflight.css (100%) rename packages/{craftcms-cp => craftcms-ui}/src/styles/shared/tokens.css (100%) rename packages/{craftcms-cp => craftcms-ui}/src/styles/shared/variables.css (100%) rename packages/{craftcms-cp => craftcms-ui}/src/styles/variants.styles.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/styles/visually-hidden.styles.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/types/events.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/types/globals.ts (85%) rename packages/{craftcms-cp => craftcms-ui}/src/types/index.ts (61%) rename packages/{craftcms-cp => craftcms-ui}/src/utilities/cookies.test.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/utilities/cookies.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/utilities/dom.test.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/utilities/dom.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/utilities/escapeHtml.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/utilities/format.test.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/utilities/format.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/utilities/icons.test.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/utilities/icons.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/utilities/string.test.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/utilities/string.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/utilities/translate.test.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/src/utilities/translate.ts (100%) rename packages/{craftcms-cp => craftcms-ui}/tailwind.css (97%) rename packages/{craftcms-cp => craftcms-ui}/tsconfig.json (100%) rename packages/{craftcms-cp => craftcms-ui}/vitest.config.ts (86%) rename packages/{craftcms-cp => craftcms-ui}/vitest.shims.d.ts (100%) rename {packages/craftcms-cp/src/utilities => resources/js/common}/api/actionClient.ts (76%) rename {packages/craftcms-cp/src/utilities => resources/js/common}/api/apiClient.ts (93%) rename {packages/craftcms-cp/src => resources/js/common}/services/AssetIndexer.ts (98%) rename {packages/craftcms-cp/src => resources/js/common}/services/Csrf.ts (94%) rename {packages/craftcms-cp/src => resources/js/common}/services/Queue.test.ts (95%) rename {packages/craftcms-cp/src => resources/js/common}/services/Queue.ts (98%) rename {packages/craftcms-cp/src => resources/js/common}/types/queue.ts (100%) diff --git a/.storybook/main.ts b/.storybook/main.ts index e7fc48c2c03..3dcaaae08ba 100644 --- a/.storybook/main.ts +++ b/.storybook/main.ts @@ -32,7 +32,7 @@ const config: StorybookConfig = { viteFinal(config) { // Storybook's vue3-vite framework adds its own Vue plugin with default options. // We need to configure `isCustomElement` so Vue treats `craft-*` tags as web - // components (from @craftcms/cp) rather than trying to resolve them as Vue + // components (from @craftcms/ui) rather than trying to resolve them as Vue // components. Since Vite's mergeConfig doesn't deep-merge plugin options, // we remove Storybook's Vue plugin and add our own with the correct config. const filteredPlugins = (config.plugins || []).flat().filter((plugin) => { diff --git a/.storybook/preview.ts b/.storybook/preview.ts index 8194479ba14..a2ed9d3e6ed 100644 --- a/.storybook/preview.ts +++ b/.storybook/preview.ts @@ -1,7 +1,7 @@ import type {Preview} from '@storybook/vue3'; import {setup} from '@storybook/vue3'; import {withThemeByDataAttribute} from '@storybook/addon-themes'; -import '@craftcms/cp'; +import '@craftcms/ui'; import '../resources/css/cp.css'; import './preview.css'; import {installInertiaMock, setPageProps} from './inertia-mock'; diff --git a/package-lock.json b/package-lock.json index 2a226312d7d..1b92ea33537 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "@atlaskit/pragmatic-drag-and-drop": "^1.8.1", "@atlaskit/pragmatic-drag-and-drop-hitbox": "^1.1.0", - "@craftcms/cp": "file:packages/craftcms-cp", + "@craftcms/ui": "file:packages/craftcms-ui", "@headlessui/vue": "^1.7.23", "@inertiajs/vite": "^3.0.3", "@inertiajs/vue3": "^3.0.3", @@ -588,14 +588,18 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -632,10 +636,12 @@ } }, "node_modules/@babel/parser": { - "version": "7.29.2", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", + "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", "license": "MIT", "dependencies": { - "@babel/types": "^7.29.0" + "@babel/types": "^7.29.7" }, "bin": { "parser": "bin/babel-parser.js" @@ -1825,11 +1831,13 @@ } }, "node_modules/@babel/types": { - "version": "7.29.0", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", + "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1837,7 +1845,7 @@ }, "node_modules/@bcoe/v8-coverage": { "version": "1.0.2", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=18" @@ -1911,10 +1919,6 @@ "resolved": "packages/craftcms-browserslist-config", "link": true }, - "node_modules/@craftcms/cp": { - "resolved": "packages/craftcms-cp", - "link": true - }, "node_modules/@craftcms/graphiql": { "resolved": "packages/craftcms-graphiql", "link": true @@ -1931,6 +1935,10 @@ "resolved": "packages/craftcms-sass", "link": true }, + "node_modules/@craftcms/ui": { + "resolved": "packages/craftcms-ui", + "link": true + }, "node_modules/@craftcms/vue": { "resolved": "packages/craftcms-vue", "link": true @@ -5228,6 +5236,22 @@ "node": "^20.19.0 || >=22.12.0" } }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.0.0-rc.17", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.17.tgz", + "integrity": "sha512-4ksWc9n0mhlZpZ9PMZgTGjeOPRu8MB1Z3Tz0Mo02eWfWCHMW1zN82Qz/pL/rC+yQa+8ZnutMF0JjJe7PjwasYw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, "node_modules/@rolldown/binding-darwin-x64": { "version": "1.0.0-rc.17", "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.17.tgz", @@ -6507,6 +6531,8 @@ }, "node_modules/@types/jsesc": { "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@types/jsesc/-/jsesc-2.5.1.tgz", + "integrity": "sha512-9VN+6yxLOPLOav+7PwjZbxiID2bVaeq0ED4qSQmdQTdjnXJSaCVKTR58t15oqH1H5t8Ng2ZX1SabJVoN9Q34bw==", "dev": true, "license": "MIT" }, @@ -6940,83 +6966,6 @@ "vue": "^3.2.25" } }, - "node_modules/@vitest/browser": { - "version": "4.1.5", - "license": "MIT", - "dependencies": { - "@blazediff/core": "1.9.1", - "@vitest/mocker": "4.1.5", - "@vitest/utils": "4.1.5", - "magic-string": "^0.30.21", - "pngjs": "^7.0.0", - "sirv": "^3.0.2", - "tinyrainbow": "^3.1.0", - "ws": "^8.19.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "vitest": "4.1.5" - } - }, - "node_modules/@vitest/browser-playwright": { - "version": "4.1.5", - "license": "MIT", - "dependencies": { - "@vitest/browser": "4.1.5", - "@vitest/mocker": "4.1.5", - "tinyrainbow": "^3.1.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "playwright": "*", - "vitest": "4.1.5" - }, - "peerDependenciesMeta": { - "playwright": { - "optional": false - } - } - }, - "node_modules/@vitest/browser-playwright/node_modules/tinyrainbow": { - "version": "3.1.0", - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@vitest/browser/node_modules/@vitest/pretty-format": { - "version": "4.1.5", - "license": "MIT", - "dependencies": { - "tinyrainbow": "^3.1.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/browser/node_modules/@vitest/utils": { - "version": "4.1.5", - "license": "MIT", - "dependencies": { - "@vitest/pretty-format": "4.1.5", - "convert-source-map": "^2.0.0", - "tinyrainbow": "^3.1.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/browser/node_modules/tinyrainbow": { - "version": "3.1.0", - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } - }, "node_modules/@vitest/expect": { "version": "3.2.4", "license": "MIT", @@ -7031,37 +6980,6 @@ "url": "https://opencollective.com/vitest" } }, - "node_modules/@vitest/mocker": { - "version": "4.1.5", - "license": "MIT", - "dependencies": { - "@vitest/spy": "4.1.5", - "estree-walker": "^3.0.3", - "magic-string": "^0.30.21" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "msw": "^2.4.9", - "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "msw": { - "optional": true - }, - "vite": { - "optional": true - } - } - }, - "node_modules/@vitest/mocker/node_modules/@vitest/spy": { - "version": "4.1.5", - "license": "MIT", - "funding": { - "url": "https://opencollective.com/vitest" - } - }, "node_modules/@vitest/pretty-format": { "version": "3.2.4", "license": "MIT", @@ -7072,88 +6990,6 @@ "url": "https://opencollective.com/vitest" } }, - "node_modules/@vitest/runner": { - "version": "4.1.5", - "license": "MIT", - "dependencies": { - "@vitest/utils": "4.1.5", - "pathe": "^2.0.3" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/runner/node_modules/@vitest/pretty-format": { - "version": "4.1.5", - "license": "MIT", - "dependencies": { - "tinyrainbow": "^3.1.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/runner/node_modules/@vitest/utils": { - "version": "4.1.5", - "license": "MIT", - "dependencies": { - "@vitest/pretty-format": "4.1.5", - "convert-source-map": "^2.0.0", - "tinyrainbow": "^3.1.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/runner/node_modules/tinyrainbow": { - "version": "3.1.0", - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@vitest/snapshot": { - "version": "4.1.5", - "license": "MIT", - "dependencies": { - "@vitest/pretty-format": "4.1.5", - "@vitest/utils": "4.1.5", - "magic-string": "^0.30.21", - "pathe": "^2.0.3" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/snapshot/node_modules/@vitest/pretty-format": { - "version": "4.1.5", - "license": "MIT", - "dependencies": { - "tinyrainbow": "^3.1.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/snapshot/node_modules/@vitest/utils": { - "version": "4.1.5", - "license": "MIT", - "dependencies": { - "@vitest/pretty-format": "4.1.5", - "convert-source-map": "^2.0.0", - "tinyrainbow": "^3.1.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/snapshot/node_modules/tinyrainbow": { - "version": "3.1.0", - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } - }, "node_modules/@vitest/spy": { "version": "3.2.4", "license": "MIT", @@ -7730,6 +7566,17 @@ "vue": "^3.5.0" } }, + "node_modules/@wc-toolkit/storybook-helpers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@wc-toolkit/storybook-helpers/-/storybook-helpers-10.3.0.tgz", + "integrity": "sha512-eMZfFVRFcgZREgt37/yQpHOEV7Vdoi2//akT65cdat0jk9yT4f2/AL8696BnRDkJvr3wup6irZSawarg+8bpXg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "lit": "^2.0.0 || ^3.0.0", + "storybook": ">=10.1.11-0 <11.0.0-0" + } + }, "node_modules/@web/config-loader": { "version": "0.1.3", "dev": true, @@ -8310,6 +8157,74 @@ "node": ">=12" } }, + "node_modules/ast-kit": { + "version": "3.0.0-beta.1", + "resolved": "https://registry.npmjs.org/ast-kit/-/ast-kit-3.0.0-beta.1.tgz", + "integrity": "sha512-trmleAnZ2PxN/loHWVhhx1qeOHSRXq4TDsBBxq3GqeJitfk3+jTQ+v/C1km/KYq9M7wKqCewMh+/NAvVH7m+bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^8.0.0-beta.4", + "estree-walker": "^3.0.3", + "pathe": "^2.0.3" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + } + }, + "node_modules/ast-kit/node_modules/@babel/helper-string-parser": { + "version": "8.0.0-rc.6", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-8.0.0-rc.6.tgz", + "integrity": "sha512-BCkFy+zN6kXQed3YOT7aJl93NfDSzQc3pBfsvTVPs9gU9X3V0aefEF5kwBT0E+mDWH9QgKaZstYUQN9VdQZT4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/ast-kit/node_modules/@babel/helper-validator-identifier": { + "version": "8.0.0-rc.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-8.0.0-rc.6.tgz", + "integrity": "sha512-nVJ+1JcCgntv8d78rRo++o2wuODT0Irknx2BF8Np4Ft2CRgjLqIs4qzSZ8b66yGbBdMWGmZBO9WEZv1hhNiSpg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/ast-kit/node_modules/@babel/parser": { + "version": "8.0.0-rc.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-8.0.0-rc.6.tgz", + "integrity": "sha512-rOS8IpdO7mQELkTPlCsTgPejO0bFuZdEDCGQJouYbYf9e1FLTym7Fei2pEjq8q7MWbX0ravcd7QQYKs1TxOuog==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^8.0.0-rc.6" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/ast-kit/node_modules/@babel/types": { + "version": "8.0.0-rc.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-8.0.0-rc.6.tgz", + "integrity": "sha512-p7/ABylAYlexb31wtRdIfH9L9A0Z2T/9H6zAqzqndkY2PLkvNNc580wGhp/gGKN4Sp9sQvSkhc6Oga8/O+wTyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^8.0.0-rc.6", + "@babel/helper-validator-identifier": "^8.0.0-rc.6" + }, + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, "node_modules/ast-types": { "version": "0.16.1", "license": "MIT", @@ -8320,6 +8235,25 @@ "node": ">=4" } }, + "node_modules/ast-v8-to-istanbul": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-1.0.3.tgz", + "integrity": "sha512-jCMQ6ZylLPudp0CDfBmQBZUsrh1/8psbmu9ibeVWKuHWD0YrH9YABwlKu5kVEFoT0GCQQW9Z/SxfuEbbkGQCRg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.31", + "estree-walker": "^3.0.3", + "js-tokens": "^10.0.0" + } + }, + "node_modules/ast-v8-to-istanbul/node_modules/js-tokens": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-10.0.0.tgz", + "integrity": "sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==", + "devOptional": true, + "license": "MIT" + }, "node_modules/astral-regex": { "version": "2.0.0", "dev": true, @@ -8790,6 +8724,16 @@ "node": ">= 0.8" } }, + "node_modules/cac": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cac/-/cac-7.0.0.tgz", + "integrity": "sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.19.0" + } + }, "node_modules/cacache": { "version": "16.1.3", "license": "ISC", @@ -13138,8 +13082,15 @@ "node": ">=0.10.0" } }, - "node_modules/hookified": { - "version": "1.15.0", + "node_modules/hookable": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-6.1.1.tgz", + "integrity": "sha512-U9LYDy1CwhMCnprUfeAZWZGByVbhd54hwepegYTK7Pi5NvqEj63ifz5z+xukznehT7i6NIZRu89Ay1AZmRsLEQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/hookified": { + "version": "1.15.0", "dev": true, "license": "MIT" }, @@ -13207,7 +13158,7 @@ }, "node_modules/html-escaper": { "version": "2.0.2", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/html-tags": { @@ -14352,7 +14303,7 @@ }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", - "dev": true, + "devOptional": true, "license": "BSD-3-Clause", "engines": { "node": ">=8" @@ -14360,7 +14311,7 @@ }, "node_modules/istanbul-lib-report": { "version": "3.0.1", - "dev": true, + "devOptional": true, "license": "BSD-3-Clause", "dependencies": { "istanbul-lib-coverage": "^3.0.0", @@ -14373,7 +14324,7 @@ }, "node_modules/istanbul-lib-report/node_modules/has-flag": { "version": "4.0.0", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -14381,7 +14332,7 @@ }, "node_modules/istanbul-lib-report/node_modules/supports-color": { "version": "7.2.0", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -14392,7 +14343,7 @@ }, "node_modules/istanbul-reports": { "version": "3.2.0", - "dev": true, + "devOptional": true, "license": "BSD-3-Clause", "dependencies": { "html-escaper": "^2.0.0", @@ -15344,9 +15295,21 @@ "@jridgewell/sourcemap-codec": "^1.5.5" } }, + "node_modules/magicast": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.3.tgz", + "integrity": "sha512-pVKE4UdSQ7DvHzivsCIFx2BJn1mHG6KsyrFcaxFx6tONdneEuThrDx0Cj3AMg58KyN4pzYT+LHOotxDQDjNvkw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.3", + "@babel/types": "^7.29.0", + "source-map-js": "^1.2.1" + } + }, "node_modules/make-dir": { "version": "4.0.0", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "semver": "^7.5.3" @@ -15360,7 +15323,7 @@ }, "node_modules/make-dir/node_modules/semver": { "version": "7.7.3", - "dev": true, + "devOptional": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -18809,6 +18772,159 @@ "version": "3.0.3", "license": "Unlicense" }, + "node_modules/rolldown": { + "version": "1.0.0-rc.17", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-rc.17.tgz", + "integrity": "sha512-ZrT53oAKrtA4+YtBWPQbtPOxIbVDbxT0orcYERKd63VJTF13zPcgXTvD4843L8pcsI7M6MErt8QtON6lrB9tyA==", + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.127.0", + "@rolldown/pluginutils": "1.0.0-rc.17" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.0.0-rc.17", + "@rolldown/binding-darwin-arm64": "1.0.0-rc.17", + "@rolldown/binding-darwin-x64": "1.0.0-rc.17", + "@rolldown/binding-freebsd-x64": "1.0.0-rc.17", + "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.17", + "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.17", + "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.17", + "@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.17", + "@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.17", + "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.17", + "@rolldown/binding-linux-x64-musl": "1.0.0-rc.17", + "@rolldown/binding-openharmony-arm64": "1.0.0-rc.17", + "@rolldown/binding-wasm32-wasi": "1.0.0-rc.17", + "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.17", + "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.17" + } + }, + "node_modules/rolldown-plugin-dts": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/rolldown-plugin-dts/-/rolldown-plugin-dts-0.23.2.tgz", + "integrity": "sha512-PbSqLawLgZBGcOGT3yqWBGn4cX+wh2nt5FuBGdcMHyOhoukmjbhYAl8NT9sE4U38Cm9tqLOIQeOrvzeayM0DLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/generator": "8.0.0-rc.3", + "@babel/helper-validator-identifier": "8.0.0-rc.3", + "@babel/parser": "8.0.0-rc.3", + "@babel/types": "8.0.0-rc.3", + "ast-kit": "^3.0.0-beta.1", + "birpc": "^4.0.0", + "dts-resolver": "^2.1.3", + "get-tsconfig": "^4.13.7", + "obug": "^2.1.1", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + }, + "peerDependencies": { + "@ts-macro/tsc": "^0.3.6", + "@typescript/native-preview": ">=7.0.0-dev.20260325.1", + "rolldown": "^1.0.0-rc.12", + "typescript": "^5.0.0 || ^6.0.0", + "vue-tsc": "~3.2.0" + }, + "peerDependenciesMeta": { + "@ts-macro/tsc": { + "optional": true + }, + "@typescript/native-preview": { + "optional": true + }, + "typescript": { + "optional": true + }, + "vue-tsc": { + "optional": true + } + } + }, + "node_modules/rolldown-plugin-dts/node_modules/@babel/generator": { + "version": "8.0.0-rc.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-8.0.0-rc.3.tgz", + "integrity": "sha512-em37/13/nR320G4jab/nIIHZgc2Wz2y/D39lxnTyxB4/D/omPQncl/lSdlnJY1OhQcRGugTSIF2l/69o31C9dA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^8.0.0-rc.3", + "@babel/types": "^8.0.0-rc.3", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "@types/jsesc": "^2.5.0", + "jsesc": "^3.0.2" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/rolldown-plugin-dts/node_modules/@babel/helper-string-parser": { + "version": "8.0.0-rc.6", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-8.0.0-rc.6.tgz", + "integrity": "sha512-BCkFy+zN6kXQed3YOT7aJl93NfDSzQc3pBfsvTVPs9gU9X3V0aefEF5kwBT0E+mDWH9QgKaZstYUQN9VdQZT4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/rolldown-plugin-dts/node_modules/@babel/helper-validator-identifier": { + "version": "8.0.0-rc.3", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-8.0.0-rc.3.tgz", + "integrity": "sha512-8AWCJ2VJJyDFlGBep5GpaaQ9AAaE/FjAcrqI7jyssYhtL7WGV0DOKpJsQqM037xDbpRLHXsY8TwU7zDma7coOw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/rolldown-plugin-dts/node_modules/@babel/parser": { + "version": "8.0.0-rc.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-8.0.0-rc.3.tgz", + "integrity": "sha512-B20dvP3MfNc/XS5KKCHy/oyWl5IA6Cn9YjXRdDlCjNmUFrjvLXMNUfQq/QUy9fnG2gYkKKcrto2YaF9B32ToOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^8.0.0-rc.3" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/rolldown-plugin-dts/node_modules/@babel/types": { + "version": "8.0.0-rc.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-8.0.0-rc.3.tgz", + "integrity": "sha512-mOm5ZrYmphGfqVWoH5YYMTITb3cDXsFgmvFlvkvWDMsR9X8RFnt7a0Wb6yNIdoFsiMO9WjYLq+U/FMtqIYAF8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^8.0.0-rc.3", + "@babel/helper-validator-identifier": "^8.0.0-rc.3" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/rolldown/node_modules/@rolldown/pluginutils": { + "version": "1.0.0-rc.17", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.17.tgz", + "integrity": "sha512-n8iosDOt6Ig1UhJ2AYqoIhHWh/isz0xpicHTzpKBeotdVsTEcxsSA/i3EVM7gQAj0rU27OLAxCjzlj15IWY7bg==", + "license": "MIT" + }, "node_modules/rs-module-lexer": { "version": "2.8.0", "dev": true, @@ -21844,58 +21960,6 @@ } } }, - "node_modules/unrun/node_modules/@rolldown/binding-darwin-arm64": { - "version": "1.0.0-rc.17", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/unrun/node_modules/@rolldown/pluginutils": { - "version": "1.0.0-rc.17", - "dev": true, - "license": "MIT" - }, - "node_modules/unrun/node_modules/rolldown": { - "version": "1.0.0-rc.17", - "dev": true, - "license": "MIT", - "dependencies": { - "@oxc-project/types": "=0.127.0", - "@rolldown/pluginutils": "1.0.0-rc.17" - }, - "bin": { - "rolldown": "bin/cli.mjs" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - }, - "optionalDependencies": { - "@rolldown/binding-android-arm64": "1.0.0-rc.17", - "@rolldown/binding-darwin-arm64": "1.0.0-rc.17", - "@rolldown/binding-darwin-x64": "1.0.0-rc.17", - "@rolldown/binding-freebsd-x64": "1.0.0-rc.17", - "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.17", - "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.17", - "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.17", - "@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.17", - "@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.17", - "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.17", - "@rolldown/binding-linux-x64-musl": "1.0.0-rc.17", - "@rolldown/binding-openharmony-arm64": "1.0.0-rc.17", - "@rolldown/binding-wasm32-wasi": "1.0.0-rc.17", - "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.17", - "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.17" - } - }, "node_modules/update-browserslist-db": { "version": "1.1.4", "funding": [ @@ -22200,244 +22264,46 @@ } } }, - "node_modules/vite/node_modules/@rolldown/binding-darwin-arm64": { - "version": "1.0.0-rc.17", - "cpu": [ - "arm64" - ], + "node_modules/vite/node_modules/fsevents": { + "version": "2.3.3", "license": "MIT", "optional": true, "os": [ "darwin" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/vite/node_modules/@rolldown/pluginutils": { - "version": "1.0.0-rc.17", - "license": "MIT" - }, - "node_modules/vite/node_modules/fsevents": { - "version": "2.3.3", + "node_modules/void-elements": { + "version": "3.1.0", + "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": ">=0.10.0" } }, - "node_modules/vite/node_modules/rolldown": { - "version": "1.0.0-rc.17", + "node_modules/vscode-languageserver-types": { + "version": "3.17.5", + "license": "MIT" + }, + "node_modules/vscode-uri": { + "version": "3.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/vue": { + "version": "3.5.33", "license": "MIT", "dependencies": { - "@oxc-project/types": "=0.127.0", - "@rolldown/pluginutils": "1.0.0-rc.17" - }, - "bin": { - "rolldown": "bin/cli.mjs" + "@vue/compiler-dom": "3.5.33", + "@vue/compiler-sfc": "3.5.33", + "@vue/runtime-dom": "3.5.33", + "@vue/server-renderer": "3.5.33", + "@vue/shared": "3.5.33" }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - }, - "optionalDependencies": { - "@rolldown/binding-android-arm64": "1.0.0-rc.17", - "@rolldown/binding-darwin-arm64": "1.0.0-rc.17", - "@rolldown/binding-darwin-x64": "1.0.0-rc.17", - "@rolldown/binding-freebsd-x64": "1.0.0-rc.17", - "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.17", - "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.17", - "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.17", - "@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.17", - "@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.17", - "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.17", - "@rolldown/binding-linux-x64-musl": "1.0.0-rc.17", - "@rolldown/binding-openharmony-arm64": "1.0.0-rc.17", - "@rolldown/binding-wasm32-wasi": "1.0.0-rc.17", - "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.17", - "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.17" - } - }, - "node_modules/vitest": { - "version": "4.1.5", - "license": "MIT", - "dependencies": { - "@vitest/expect": "4.1.5", - "@vitest/mocker": "4.1.5", - "@vitest/pretty-format": "4.1.5", - "@vitest/runner": "4.1.5", - "@vitest/snapshot": "4.1.5", - "@vitest/spy": "4.1.5", - "@vitest/utils": "4.1.5", - "es-module-lexer": "^2.0.0", - "expect-type": "^1.3.0", - "magic-string": "^0.30.21", - "obug": "^2.1.1", - "pathe": "^2.0.3", - "picomatch": "^4.0.3", - "std-env": "^4.0.0-rc.1", - "tinybench": "^2.9.0", - "tinyexec": "^1.0.2", - "tinyglobby": "^0.2.15", - "tinyrainbow": "^3.1.0", - "vite": "^6.0.0 || ^7.0.0 || ^8.0.0", - "why-is-node-running": "^2.3.0" - }, - "bin": { - "vitest": "vitest.mjs" - }, - "engines": { - "node": "^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "@edge-runtime/vm": "*", - "@opentelemetry/api": "^1.9.0", - "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", - "@vitest/browser-playwright": "4.1.5", - "@vitest/browser-preview": "4.1.5", - "@vitest/browser-webdriverio": "4.1.5", - "@vitest/coverage-istanbul": "4.1.5", - "@vitest/coverage-v8": "4.1.5", - "@vitest/ui": "4.1.5", - "happy-dom": "*", - "jsdom": "*", - "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "@edge-runtime/vm": { - "optional": true - }, - "@opentelemetry/api": { - "optional": true - }, - "@types/node": { - "optional": true - }, - "@vitest/browser-playwright": { - "optional": true - }, - "@vitest/browser-preview": { - "optional": true - }, - "@vitest/browser-webdriverio": { - "optional": true - }, - "@vitest/coverage-istanbul": { - "optional": true - }, - "@vitest/coverage-v8": { - "optional": true - }, - "@vitest/ui": { - "optional": true - }, - "happy-dom": { - "optional": true - }, - "jsdom": { - "optional": true - }, - "vite": { - "optional": false - } - } - }, - "node_modules/vitest/node_modules/@vitest/expect": { - "version": "4.1.5", - "license": "MIT", - "dependencies": { - "@standard-schema/spec": "^1.1.0", - "@types/chai": "^5.2.2", - "@vitest/spy": "4.1.5", - "@vitest/utils": "4.1.5", - "chai": "^6.2.2", - "tinyrainbow": "^3.1.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/vitest/node_modules/@vitest/pretty-format": { - "version": "4.1.5", - "license": "MIT", - "dependencies": { - "tinyrainbow": "^3.1.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/vitest/node_modules/@vitest/spy": { - "version": "4.1.5", - "license": "MIT", - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/vitest/node_modules/@vitest/utils": { - "version": "4.1.5", - "license": "MIT", - "dependencies": { - "@vitest/pretty-format": "4.1.5", - "convert-source-map": "^2.0.0", - "tinyrainbow": "^3.1.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/vitest/node_modules/chai": { - "version": "6.2.2", - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/vitest/node_modules/es-module-lexer": { - "version": "2.1.0", - "license": "MIT" - }, - "node_modules/vitest/node_modules/tinyrainbow": { - "version": "3.1.0", - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/void-elements": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/vscode-languageserver-types": { - "version": "3.17.5", - "license": "MIT" - }, - "node_modules/vscode-uri": { - "version": "3.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/vue": { - "version": "3.5.33", - "license": "MIT", - "dependencies": { - "@vue/compiler-dom": "3.5.33", - "@vue/compiler-sfc": "3.5.33", - "@vue/runtime-dom": "3.5.33", - "@vue/server-renderer": "3.5.33", - "@vue/shared": "3.5.33" - }, - "peerDependencies": { - "typescript": "*" + "peerDependencies": { + "typescript": "*" }, "peerDependenciesMeta": { "typescript": { @@ -23796,6 +23662,7 @@ "packages/craftcms-cp": { "name": "@craftcms/cp", "version": "0.0.0", + "extraneous": true, "license": "MIT", "dependencies": { "@chromatic-com/storybook": "^5.1.2", @@ -23850,1300 +23717,1351 @@ "lit": "3.x" } }, - "packages/craftcms-cp/node_modules/@babel/generator": { - "version": "8.0.0-rc.3", - "dev": true, + "packages/craftcms-graphiql": { + "name": "@craftcms/graphiql", + "version": "1.0.0", "license": "MIT", "dependencies": { - "@babel/parser": "^8.0.0-rc.3", - "@babel/types": "^8.0.0-rc.3", - "@jridgewell/gen-mapping": "^0.3.12", - "@jridgewell/trace-mapping": "^0.3.28", - "@types/jsesc": "^2.5.0", - "jsesc": "^3.0.2" + "graphiql": "^4.1.0", + "graphql": "^16.10.0", + "graphql-ws": "^6.0.4", + "react": "^19.2.0", + "react-dom": "^19.2.0" + }, + "devDependencies": { + "@craftcms/sass": "file:../craftcms-sass", + "@craftcms/webpack": "file:../craftcms-webpack" }, "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "packages/craftcms-cp/node_modules/@babel/generator/node_modules/@babel/helper-validator-identifier": { - "version": "8.0.0-rc.4", - "dev": true, - "license": "MIT", - "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=20" } }, - "packages/craftcms-cp/node_modules/@babel/generator/node_modules/@babel/parser": { - "version": "8.0.0-rc.4", - "dev": true, - "license": "MIT", + "packages/craftcms-legacy": { + "name": "@craftcms/legacy", "dependencies": { - "@babel/types": "^8.0.0-rc.4" + "@benmajor/jquery-touch-events": "^2.0.3", + "@craftcms/graphiql": "file:../craftcms-graphiql", + "@craftcms/sass": "file:../craftcms-sass", + "@craftcms/ui": "file:../craftcms-ui", + "@craftcms/vue": "file:../craftcms-vue", + "@floating-ui/dom": "^1.7.6", + "@selectize/selectize": "selectize/selectize.js#master", + "@simplewebauthn/browser": "^13.3.0", + "@types/jquery": "^3.5.34", + "accounting": "^0.4.1", + "apexcharts": "^5.10.6", + "axios": "^1.15.1", + "blueimp-file-upload": "^10.32.0", + "codemirror": "^5.65.21", + "d3": "^7.9.0", + "fabric": "^1.7.22", + "htmx.org": "^1.9.12", + "iframe-resizer": "^4.4.5", + "inputmask": "^5.0.9", + "jquery": "^3.7.1", + "jquery-ui": "^1.14.2", + "jquery.payment": "^3.0.0", + "picturefill": "^3.0.3", + "punycode": "^2.3.1", + "swiper": "^8.4.7", + "timepicker": "^1.14.1", + "ttf2woff2": "^5.0.0", + "typescript": "^5.9.3", + "v-tooltip": "^2.1.3", + "velocity-animate": "^1.5.2", + "vue": "^2.7.16", + "vue-autosuggest": "^2.2.0", + "vue-awesome-swiper": "^4.1.1", + "vue-cleave": "^1.2.2", + "vue-lodash": "^1.0.4", + "vue-router": "^3.6.5", + "vuex": "^3.6.2", + "xregexp": "^5.1.2", + "yii2-pjax": "~2.0.8" }, - "bin": { - "parser": "bin/babel-parser.js" + "devDependencies": { + "@craftcms/playwright": "file:../craftcms-playwright", + "@craftcms/webpack": "file:../craftcms-webpack", + "@playwright/test": "^1.59.1", + "husky": "^9.1.7", + "lint-staged": "^16.4.0", + "pkg-dir": "^5.0.0", + "prettier": "3.8.3", + "stylelint": "^16.26.1", + "stylelint-config-standard": "^36.0.1", + "stylelint-config-standard-scss": "^13.1.0", + "stylelint-prettier": "^5.0.3", + "stylelint-use-logical-spec": "^5.0.1", + "tailwindcss": "^3.4.19", + "vue-apexcharts": "^1.7.0" }, "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=20" + }, + "optionalDependencies": { + "@awesome.me/kit-ddaed3f5c5": "^1.0.74" } }, - "packages/craftcms-cp/node_modules/@babel/generator/node_modules/@babel/types": { - "version": "8.0.0-rc.4", + "packages/craftcms-legacy/node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.5", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^8.0.0-rc.4", - "@babel/helper-validator-identifier": "^8.0.0-rc.4" - }, "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.4" } }, - "packages/craftcms-cp/node_modules/@babel/helper-string-parser": { - "version": "8.0.0-rc.4", + "packages/craftcms-legacy/node_modules/@csstools/css-tokenizer": { + "version": "3.0.4", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "license": "MIT", "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=18" } }, - "packages/craftcms-cp/node_modules/@babel/helper-validator-identifier": { - "version": "8.0.0-rc.3", + "packages/craftcms-legacy/node_modules/@csstools/media-query-list-parser": { + "version": "4.0.3", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "license": "MIT", "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, - "packages/craftcms-cp/node_modules/@rolldown/binding-darwin-arm64": { - "version": "1.0.0-rc.17", - "cpu": [ - "arm64" - ], - "dev": true, + "packages/craftcms-legacy/node_modules/@vue/compiler-sfc": { + "version": "2.7.16", + "dependencies": { + "@babel/parser": "^7.23.5", + "postcss": "^8.4.14", + "source-map": "^0.6.1" + }, + "optionalDependencies": { + "prettier": "^1.18.2 || ^2.0.0" + } + }, + "packages/craftcms-legacy/node_modules/@vue/compiler-sfc/node_modules/prettier": { + "version": "2.8.8", "license": "MIT", "optional": true, - "os": [ - "darwin" - ], + "bin": { + "prettier": "bin-prettier.js" + }, "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "packages/craftcms-cp/node_modules/@rolldown/pluginutils": { - "version": "1.0.0-rc.17", + "packages/craftcms-legacy/node_modules/ansi-regex": { + "version": "5.0.1", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "packages/craftcms-cp/node_modules/@types/jquery": { - "version": "4.0.0", + "packages/craftcms-legacy/node_modules/balanced-match": { + "version": "2.0.0", "dev": true, "license": "MIT" }, - "packages/craftcms-cp/node_modules/@vitest/coverage-v8": { - "version": "4.1.5", + "packages/craftcms-legacy/node_modules/chokidar": { + "version": "3.6.0", "dev": true, "license": "MIT", "dependencies": { - "@bcoe/v8-coverage": "^1.0.2", - "@vitest/utils": "4.1.5", - "ast-v8-to-istanbul": "^1.0.0", - "istanbul-lib-coverage": "^3.2.2", - "istanbul-lib-report": "^3.0.1", - "istanbul-reports": "^3.2.0", - "magicast": "^0.5.2", - "obug": "^2.1.1", - "std-env": "^4.0.0-rc.1", - "tinyrainbow": "^3.1.0" + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" }, - "funding": { - "url": "https://opencollective.com/vitest" + "engines": { + "node": ">= 8.10.0" }, - "peerDependencies": { - "@vitest/browser": "4.1.5", - "vitest": "4.1.5" + "funding": { + "url": "https://paulmillr.com/funding/" }, - "peerDependenciesMeta": { - "@vitest/browser": { - "optional": true - } + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "packages/craftcms-cp/node_modules/@vitest/pretty-format": { - "version": "4.1.5", + "packages/craftcms-legacy/node_modules/globby": { + "version": "11.1.0", "dev": true, "license": "MIT", "dependencies": { - "tinyrainbow": "^3.1.0" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "packages/craftcms-cp/node_modules/@vitest/utils": { - "version": "4.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/pretty-format": "4.1.5", - "convert-source-map": "^2.0.0", - "tinyrainbow": "^3.1.0" + "engines": { + "node": ">=10" }, "funding": { - "url": "https://opencollective.com/vitest" + "url": "https://github.com/sponsors/sindresorhus" } }, - "packages/craftcms-cp/node_modules/@wc-toolkit/storybook-helpers": { - "version": "10.3.0", + "packages/craftcms-legacy/node_modules/globby/node_modules/ignore": { + "version": "5.3.2", "dev": true, "license": "MIT", - "peerDependencies": { - "lit": "^2.0.0 || ^3.0.0", - "storybook": ">=10.1.11-0 <11.0.0-0" + "engines": { + "node": ">= 4" } }, - "packages/craftcms-cp/node_modules/ast-kit": { - "version": "3.0.0-beta.1", + "packages/craftcms-legacy/node_modules/html-tags": { + "version": "3.3.1", "dev": true, "license": "MIT", - "dependencies": { - "@babel/parser": "^8.0.0-beta.4", - "estree-walker": "^3.0.3", - "pathe": "^2.0.3" - }, "engines": { - "node": ">=20.19.0" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/sxzz" + "url": "https://github.com/sponsors/sindresorhus" } }, - "packages/craftcms-cp/node_modules/ast-kit/node_modules/@babel/helper-validator-identifier": { - "version": "8.0.0-rc.4", + "packages/craftcms-legacy/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", "dev": true, "license": "MIT", "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=8" } }, - "packages/craftcms-cp/node_modules/ast-kit/node_modules/@babel/parser": { - "version": "8.0.0-rc.4", + "packages/craftcms-legacy/node_modules/jiti": { + "version": "1.21.7", "dev": true, "license": "MIT", - "dependencies": { - "@babel/types": "^8.0.0-rc.4" - }, "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "packages/craftcms-cp/node_modules/ast-kit/node_modules/@babel/types": { - "version": "8.0.0-rc.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^8.0.0-rc.4", - "@babel/helper-validator-identifier": "^8.0.0-rc.4" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" + "jiti": "bin/jiti.js" } }, - "packages/craftcms-cp/node_modules/ast-v8-to-istanbul": { - "version": "1.0.0", + "packages/craftcms-legacy/node_modules/mathml-tag-names": { + "version": "2.1.3", "dev": true, "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.31", - "estree-walker": "^3.0.3", - "js-tokens": "^10.0.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "packages/craftcms-cp/node_modules/balanced-match": { - "version": "4.0.4", + "packages/craftcms-legacy/node_modules/meow": { + "version": "13.2.0", "dev": true, "license": "MIT", "engines": { - "node": "18 || 20 || >=22" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "packages/craftcms-cp/node_modules/brace-expansion": { - "version": "5.0.5", + "packages/craftcms-legacy/node_modules/pkg-dir": { + "version": "5.0.0", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^4.0.2" + "find-up": "^5.0.0" }, "engines": { - "node": "18 || 20 || >=22" + "node": ">=10" } }, - "packages/craftcms-cp/node_modules/cac": { - "version": "7.0.0", + "packages/craftcms-legacy/node_modules/postcss-selector-parser": { + "version": "7.1.1", "dev": true, "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, "engines": { - "node": ">=20.19.0" + "node": ">=4" } }, - "packages/craftcms-cp/node_modules/chalk": { - "version": "5.6.2", + "packages/craftcms-legacy/node_modules/string-width": { + "version": "4.2.3", "dev": true, "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "engines": { + "node": ">=8" } }, - "packages/craftcms-cp/node_modules/cli-spinners": { - "version": "3.3.0", + "packages/craftcms-legacy/node_modules/strip-ansi": { + "version": "6.0.1", "dev": true, "license": "MIT", - "engines": { - "node": ">=18.20" + "dependencies": { + "ansi-regex": "^5.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=8" } }, - "packages/craftcms-cp/node_modules/del": { - "version": "8.0.1", + "packages/craftcms-legacy/node_modules/stylelint": { + "version": "16.26.1", "dev": true, - "license": "MIT", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" + }, + { + "type": "github", + "url": "https://github.com/sponsors/stylelint" + } + ], + "license": "MIT", "dependencies": { - "globby": "^14.0.2", - "is-glob": "^4.0.3", - "is-path-cwd": "^3.0.0", - "is-path-inside": "^4.0.0", - "p-map": "^7.0.2", - "presentable-error": "^0.0.1", - "slash": "^5.1.0" + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-syntax-patches-for-csstree": "^1.0.19", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/media-query-list-parser": "^4.0.3", + "@csstools/selector-specificity": "^5.0.0", + "@dual-bundle/import-meta-resolve": "^4.2.1", + "balanced-match": "^2.0.0", + "colord": "^2.9.3", + "cosmiconfig": "^9.0.0", + "css-functions-list": "^3.2.3", + "css-tree": "^3.1.0", + "debug": "^4.4.3", + "fast-glob": "^3.3.3", + "fastest-levenshtein": "^1.0.16", + "file-entry-cache": "^11.1.1", + "global-modules": "^2.0.0", + "globby": "^11.1.0", + "globjoin": "^0.1.4", + "html-tags": "^3.3.1", + "ignore": "^7.0.5", + "imurmurhash": "^0.1.4", + "is-plain-object": "^5.0.0", + "known-css-properties": "^0.37.0", + "mathml-tag-names": "^2.1.3", + "meow": "^13.2.0", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.5.6", + "postcss-resolve-nested-selector": "^0.1.6", + "postcss-safe-parser": "^7.0.1", + "postcss-selector-parser": "^7.1.0", + "postcss-value-parser": "^4.2.0", + "resolve-from": "^5.0.0", + "string-width": "^4.2.3", + "supports-hyperlinks": "^3.2.0", + "svg-tags": "^1.0.0", + "table": "^6.9.0", + "write-file-atomic": "^5.0.1" }, - "engines": { - "node": ">=18" + "bin": { + "stylelint": "bin/stylelint.mjs" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=18.12.0" } }, - "packages/craftcms-cp/node_modules/dom-accessibility-api": { - "version": "0.7.1", - "dev": true, - "license": "MIT" - }, - "packages/craftcms-cp/node_modules/glob": { - "version": "13.0.6", + "packages/craftcms-legacy/node_modules/stylelint-config-recommended": { + "version": "14.0.1", "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "minimatch": "^10.2.2", - "minipass": "^7.1.3", - "path-scurry": "^2.0.2" - }, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" + }, + { + "type": "github", + "url": "https://github.com/sponsors/stylelint" + } + ], + "license": "MIT", "engines": { - "node": "18 || 20 || >=22" + "node": ">=18.12.0" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependencies": { + "stylelint": "^16.1.0" } }, - "packages/craftcms-cp/node_modules/globby": { + "packages/craftcms-legacy/node_modules/stylelint-config-recommended-scss": { "version": "14.1.0", "dev": true, "license": "MIT", "dependencies": { - "@sindresorhus/merge-streams": "^2.1.0", - "fast-glob": "^3.3.3", - "ignore": "^7.0.3", - "path-type": "^6.0.0", - "slash": "^5.1.0", - "unicorn-magic": "^0.3.0" + "postcss-scss": "^4.0.9", + "stylelint-config-recommended": "^14.0.1", + "stylelint-scss": "^6.4.0" }, "engines": { - "node": ">=18" + "node": ">=18.12.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "packages/craftcms-cp/node_modules/hookable": { - "version": "6.1.1", - "dev": true, - "license": "MIT" - }, - "packages/craftcms-cp/node_modules/is-interactive": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" + "peerDependencies": { + "postcss": "^8.3.3", + "stylelint": "^16.6.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependenciesMeta": { + "postcss": { + "optional": true + } } }, - "packages/craftcms-cp/node_modules/is-path-cwd": { - "version": "3.0.0", + "packages/craftcms-legacy/node_modules/stylelint-config-standard": { + "version": "36.0.1", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" + }, + { + "type": "github", + "url": "https://github.com/sponsors/stylelint" + } + ], "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "dependencies": { + "stylelint-config-recommended": "^14.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "packages/craftcms-cp/node_modules/is-path-inside": { - "version": "4.0.0", - "dev": true, - "license": "MIT", "engines": { - "node": ">=12" + "node": ">=18.12.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "stylelint": "^16.1.0" } }, - "packages/craftcms-cp/node_modules/is-unicode-supported": { - "version": "2.1.0", + "packages/craftcms-legacy/node_modules/stylelint-config-standard-scss": { + "version": "13.1.0", "dev": true, "license": "MIT", + "dependencies": { + "stylelint-config-recommended-scss": "^14.0.0", + "stylelint-config-standard": "^36.0.0" + }, "engines": { - "node": ">=18" + "node": ">=18.12.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "postcss": "^8.3.3", + "stylelint": "^16.3.1" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + } } }, - "packages/craftcms-cp/node_modules/js-tokens": { - "version": "10.0.0", - "dev": true, - "license": "MIT" - }, - "packages/craftcms-cp/node_modules/log-symbols": { - "version": "7.0.1", + "packages/craftcms-legacy/node_modules/stylelint-scss": { + "version": "6.14.0", "dev": true, "license": "MIT", "dependencies": { - "is-unicode-supported": "^2.0.0", - "yoctocolors": "^2.1.1" + "css-tree": "^3.0.1", + "is-plain-object": "^5.0.0", + "known-css-properties": "^0.37.0", + "mdn-data": "^2.25.0", + "postcss-media-query-parser": "^0.2.3", + "postcss-resolve-nested-selector": "^0.1.6", + "postcss-selector-parser": "^7.1.1", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=18" + "node": ">=18.12.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "stylelint": "^16.8.2" } }, - "packages/craftcms-cp/node_modules/magicast": { - "version": "0.5.2", + "packages/craftcms-legacy/node_modules/tailwindcss": { + "version": "3.4.19", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.29.0", - "@babel/types": "^7.29.0", - "source-map-js": "^1.2.1" + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.6.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.7", + "lilconfig": "^3.1.3", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.2 || ^5.0 || ^6.0", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" } }, - "packages/craftcms-cp/node_modules/minimatch": { - "version": "10.2.5", + "packages/craftcms-legacy/node_modules/tailwindcss/node_modules/glob-parent": { + "version": "6.0.2", "dev": true, - "license": "BlueOak-1.0.0", + "license": "ISC", "dependencies": { - "brace-expansion": "^5.0.5" + "is-glob": "^4.0.3" }, "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=10.13.0" } }, - "packages/craftcms-cp/node_modules/ora": { - "version": "9.4.0", + "packages/craftcms-legacy/node_modules/tailwindcss/node_modules/postcss-selector-parser": { + "version": "6.1.2", "dev": true, "license": "MIT", "dependencies": { - "chalk": "^5.6.2", - "cli-cursor": "^5.0.0", - "cli-spinners": "^3.2.0", - "is-interactive": "^2.0.0", - "is-unicode-supported": "^2.1.0", - "log-symbols": "^7.0.1", - "stdin-discarder": "^0.3.2", - "string-width": "^8.1.0" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, "engines": { - "node": ">=20" + "node": ">=4" + } + }, + "packages/craftcms-legacy/node_modules/typescript": { + "version": "5.9.3", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=14.17" } }, - "packages/craftcms-cp/node_modules/p-map": { - "version": "7.0.4", - "dev": true, + "packages/craftcms-legacy/node_modules/vue": { + "version": "2.7.16", "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "@vue/compiler-sfc": "2.7.16", + "csstype": "^3.1.0" } }, - "packages/craftcms-cp/node_modules/path-scurry": { - "version": "2.0.2", + "packages/craftcms-legacy/node_modules/write-file-atomic": { + "version": "5.0.1", "dev": true, - "license": "BlueOak-1.0.0", + "license": "ISC", "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" }, "engines": { - "node": "18 || 20 || >=22" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "packages/craftcms-playwright": { + "name": "@craftcms/playwright", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "@playwright/test": "^1.47.0", + "events": "^3.3.0", + "signale": "^1.4.0" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "bin": { + "craft-playwright": "src/cli.js" } }, - "packages/craftcms-cp/node_modules/path-type": { - "version": "6.0.0", - "dev": true, + "packages/craftcms-sass": { + "name": "@craftcms/sass", + "version": "1.1.0", + "license": "MIT" + }, + "packages/craftcms-ui": { + "name": "@craftcms/ui", + "version": "0.0.0", "license": "MIT", - "engines": { - "node": ">=18" + "dependencies": { + "@chromatic-com/storybook": "^5.1.2", + "@formatjs/intl-durationformat": "^0.10.8", + "@github/relative-time-element": "^5.0.0", + "@simplewebauthn/browser": "^13.3.0", + "@vitest/browser-playwright": "^4.1.5" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "devDependencies": { + "@adobe/leonardo-contrast-colors": "^1.1.0", + "@arethetypeswrong/cli": "^0.18.2", + "@awesome.me/webawesome": "^3.6.0", + "@custom-elements-manifest/analyzer": "^0.11.0", + "@lion/ui": "^0.16.1", + "@shoelace-style/shoelace": "^2.20.1", + "@storybook/addon-a11y": "^10.4.1", + "@storybook/addon-docs": "^10.4.1", + "@storybook/addon-themes": "^10.4.1", + "@storybook/addon-vitest": "^10.4.1", + "@storybook/web-components-vite": "^10.4.1", + "@total-typescript/tsconfig": "^1.0.4", + "@types/humanize-duration": "^3.27.4", + "@types/jquery": "^4.0.0", + "@types/node": "^25.6.0", + "@vitest/browser": "^4.1.5", + "@vitest/coverage-v8": "^4.1.5", + "@wc-toolkit/storybook-helpers": "^10.3.0", + "del": "^8.0.1", + "dom-accessibility-api": "^0.7.1", + "esbuild": "^0.28.0", + "globby": "^16.2.0", + "happy-dom": "^20.9.0", + "humanize-duration": "^3.33.2", + "lit": "^3.3.2", + "ora": "^9.4.0", + "playwright": "^1.59.1", + "plop": "^4.0.5", + "recursive-copy": "^2.0.14", + "rimraf": "^6.1.3", + "storybook": "^10.4.1", + "tsdown": "^0.21.10", + "typescript": "^6.0.3", + "unplugin-dts": "^1.0.0", + "vite-plugin-dts": "^5.0.0", + "vite-tsconfig-paths": "^6.1.1", + "vitest": "^4.1.5" + }, + "peerDependencies": { + "@awesome.me/webawesome": "^3.0.0", + "@lion/ui": "0.x", + "lit": "3.x" } }, - "packages/craftcms-cp/node_modules/rimraf": { - "version": "6.1.3", + "packages/craftcms-ui/node_modules/@types/jquery": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-4.0.0.tgz", + "integrity": "sha512-Z+to+A2VkaHq1DfI2oSwsoCdhCHMpTSgjWzNcbNlRGYzksDBpPUgEcAL+RQjOBJRaLoEAOHXxqDGBVP+BblBwg==", "dev": true, - "license": "BlueOak-1.0.0", + "license": "MIT" + }, + "packages/craftcms-ui/node_modules/@vitest/browser": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@vitest/browser/-/browser-4.1.8.tgz", + "integrity": "sha512-u21VzX07HzlJYpFgkxmjEXar/tG2UqWGgyGG/46SrrPc7rSdCTPw5vuowopO9CIqF8UCUQzDFdbVnNpw6N0BfQ==", + "license": "MIT", "dependencies": { - "glob": "^13.0.3", - "package-json-from-dist": "^1.0.1" + "@blazediff/core": "1.9.1", + "@vitest/mocker": "4.1.8", + "@vitest/utils": "4.1.8", + "magic-string": "^0.30.21", + "pngjs": "^7.0.0", + "sirv": "^3.0.2", + "tinyrainbow": "^3.1.0", + "ws": "^8.19.0" }, - "bin": { - "rimraf": "dist/esm/bin.mjs" + "funding": { + "url": "https://opencollective.com/vitest" }, - "engines": { - "node": "20 || >=22" + "peerDependencies": { + "vitest": "4.1.8" + } + }, + "packages/craftcms-ui/node_modules/@vitest/browser-playwright": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@vitest/browser-playwright/-/browser-playwright-4.1.8.tgz", + "integrity": "sha512-SR7FqgegaexEg73xvf3ArtygXegagMdXnL0EZMpxrWvvhQxvicD/E8p0ib0J91riPRtQUViyh67Xjw3NqvyhVg==", + "license": "MIT", + "dependencies": { + "@vitest/browser": "4.1.8", + "@vitest/mocker": "4.1.8", + "tinyrainbow": "^3.1.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "playwright": "*", + "vitest": "4.1.8" + }, + "peerDependenciesMeta": { + "playwright": { + "optional": false + } } }, - "packages/craftcms-cp/node_modules/rolldown": { - "version": "1.0.0-rc.17", - "dev": true, + "packages/craftcms-ui/node_modules/@vitest/coverage-v8": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-4.1.8.tgz", + "integrity": "sha512-lt3kovsyHwYe00wq4D1ti0Z974fWj4NLp6siqiyEufUpyFwK9Yhi7rBhac9JL5aA0zoMrJqc4vYPZRUnI7l7nw==", + "devOptional": true, "license": "MIT", "dependencies": { - "@oxc-project/types": "=0.127.0", - "@rolldown/pluginutils": "1.0.0-rc.17" + "@bcoe/v8-coverage": "^1.0.2", + "@vitest/utils": "4.1.8", + "ast-v8-to-istanbul": "^1.0.0", + "istanbul-lib-coverage": "^3.2.2", + "istanbul-lib-report": "^3.0.1", + "istanbul-reports": "^3.2.0", + "magicast": "^0.5.2", + "obug": "^2.1.1", + "std-env": "^4.0.0-rc.1", + "tinyrainbow": "^3.1.0" }, - "bin": { - "rolldown": "bin/cli.mjs" + "funding": { + "url": "https://opencollective.com/vitest" }, - "engines": { - "node": "^20.19.0 || >=22.12.0" + "peerDependencies": { + "@vitest/browser": "4.1.8", + "vitest": "4.1.8" }, - "optionalDependencies": { - "@rolldown/binding-android-arm64": "1.0.0-rc.17", - "@rolldown/binding-darwin-arm64": "1.0.0-rc.17", - "@rolldown/binding-darwin-x64": "1.0.0-rc.17", - "@rolldown/binding-freebsd-x64": "1.0.0-rc.17", - "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.17", - "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.17", - "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.17", - "@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.17", - "@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.17", - "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.17", - "@rolldown/binding-linux-x64-musl": "1.0.0-rc.17", - "@rolldown/binding-openharmony-arm64": "1.0.0-rc.17", - "@rolldown/binding-wasm32-wasi": "1.0.0-rc.17", - "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.17", - "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.17" + "peerDependenciesMeta": { + "@vitest/browser": { + "optional": true + } } }, - "packages/craftcms-cp/node_modules/rolldown-plugin-dts": { - "version": "0.23.2", - "dev": true, + "packages/craftcms-ui/node_modules/@vitest/expect": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.8.tgz", + "integrity": "sha512-h3nDO677RDLEGlBxyQ5CW8RlMThSKSRLUePLOx09gNIWRL40edgA1GCZSZgf1W55MFAG6/Sw14KeaAnqv0NKdQ==", "license": "MIT", "dependencies": { - "@babel/generator": "8.0.0-rc.3", - "@babel/helper-validator-identifier": "8.0.0-rc.3", - "@babel/parser": "8.0.0-rc.3", - "@babel/types": "8.0.0-rc.3", - "ast-kit": "^3.0.0-beta.1", - "birpc": "^4.0.0", - "dts-resolver": "^2.1.3", - "get-tsconfig": "^4.13.7", - "obug": "^2.1.1", - "picomatch": "^4.0.4" + "@standard-schema/spec": "^1.1.0", + "@types/chai": "^5.2.2", + "@vitest/spy": "4.1.8", + "@vitest/utils": "4.1.8", + "chai": "^6.2.2", + "tinyrainbow": "^3.1.0" }, - "engines": { - "node": ">=20.19.0" + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "packages/craftcms-ui/node_modules/@vitest/mocker": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.8.tgz", + "integrity": "sha512-LEiN/xe4OSIbKe9HQIp5OC24agGD9J5CnmMgsLohVVoOPWL9a2sBoR6VBx43jQZb7Kr1l4RCuyCJzcAa0+dojw==", + "license": "MIT", + "dependencies": { + "@vitest/spy": "4.1.8", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.21" }, "funding": { - "url": "https://github.com/sponsors/sxzz" + "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "@ts-macro/tsc": "^0.3.6", - "@typescript/native-preview": ">=7.0.0-dev.20260325.1", - "rolldown": "^1.0.0-rc.12", - "typescript": "^5.0.0 || ^6.0.0", - "vue-tsc": "~3.2.0" + "msw": "^2.4.9", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { - "@ts-macro/tsc": { - "optional": true - }, - "@typescript/native-preview": { - "optional": true - }, - "typescript": { + "msw": { "optional": true }, - "vue-tsc": { + "vite": { "optional": true } } }, - "packages/craftcms-cp/node_modules/rolldown-plugin-dts/node_modules/@babel/parser": { - "version": "8.0.0-rc.3", - "dev": true, + "packages/craftcms-ui/node_modules/@vitest/pretty-format": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.8.tgz", + "integrity": "sha512-9GasEBxpZ1VYIpqHf/0+YGg121uSNwCKOJqIrTwWP/TB7DmFCiaBpNl3aPZzoLWfWkuqhbH8vJIVobZkvdo2cA==", "license": "MIT", "dependencies": { - "@babel/types": "^8.0.0-rc.3" - }, - "bin": { - "parser": "bin/babel-parser.js" + "tinyrainbow": "^3.1.0" }, - "engines": { - "node": "^20.19.0 || >=22.12.0" + "funding": { + "url": "https://opencollective.com/vitest" } }, - "packages/craftcms-cp/node_modules/rolldown-plugin-dts/node_modules/@babel/types": { - "version": "8.0.0-rc.3", - "dev": true, + "packages/craftcms-ui/node_modules/@vitest/runner": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.8.tgz", + "integrity": "sha512-EmVxeBAfMJvycdjd6Hm+RbFBbA9fKvo0Kx37hNpBYoYeavH3RNsBXWDooR1mgD52dCrxIIuP7UotpfiwOikvcg==", "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^8.0.0-rc.3", - "@babel/helper-validator-identifier": "^8.0.0-rc.3" + "@vitest/utils": "4.1.8", + "pathe": "^2.0.3" }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "packages/craftcms-cp/node_modules/semver": { - "version": "7.7.4", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "funding": { + "url": "https://opencollective.com/vitest" } }, - "packages/craftcms-cp/node_modules/slash": { - "version": "5.1.0", - "dev": true, + "packages/craftcms-ui/node_modules/@vitest/snapshot": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.8.tgz", + "integrity": "sha512-acfZboRmAIf05DEKcBQy33VXojFJjtUdLyo7oOmV9kebb2xdU01UknNiPuPZoJZQyO7DF0gZdTGTpeAzET9QPQ==", "license": "MIT", - "engines": { - "node": ">=14.16" + "dependencies": { + "@vitest/pretty-format": "4.1.8", + "@vitest/utils": "4.1.8", + "magic-string": "^0.30.21", + "pathe": "^2.0.3" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/vitest" } }, - "packages/craftcms-cp/node_modules/tinyrainbow": { - "version": "3.1.0", - "dev": true, + "packages/craftcms-ui/node_modules/@vitest/spy": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.8.tgz", + "integrity": "sha512-6EevtBp6OZOPF7bmz36HrGMeP3txgVSrgebWxHOafDXGkhIzfXK14f8KF6MuFfgXXUeHxmpD3BQxkV00/3s5mA==", "license": "MIT", - "engines": { - "node": ">=14.0.0" + "funding": { + "url": "https://opencollective.com/vitest" } }, - "packages/craftcms-cp/node_modules/tsdown": { - "version": "0.21.10", - "dev": true, + "packages/craftcms-ui/node_modules/@vitest/utils": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.8.tgz", + "integrity": "sha512-uOJamYALNhfJ6iolExyQM40yIQwDqYnkKtQ5VCiSe17E33H0aQ/u+1GlRuz4LZBk6Mm3sg90G9hEbmEt37C1Zg==", "license": "MIT", "dependencies": { - "ansis": "^4.2.0", - "cac": "^7.0.0", - "defu": "^6.1.7", - "empathic": "^2.0.0", - "hookable": "^6.1.1", - "import-without-cache": "^0.3.3", - "obug": "^2.1.1", - "picomatch": "^4.0.4", - "rolldown": "1.0.0-rc.17", - "rolldown-plugin-dts": "^0.23.2", - "semver": "^7.7.4", - "tinyexec": "^1.1.1", - "tinyglobby": "^0.2.16", - "tree-kill": "^1.2.2", - "unconfig-core": "^7.5.0", - "unrun": "^0.2.37" - }, - "bin": { - "tsdown": "dist/run.mjs" - }, - "engines": { - "node": ">=20.19.0" + "@vitest/pretty-format": "4.1.8", + "convert-source-map": "^2.0.0", + "tinyrainbow": "^3.1.0" }, "funding": { - "url": "https://github.com/sponsors/sxzz" - }, - "peerDependencies": { - "@arethetypeswrong/core": "^0.18.1", - "@tsdown/css": "0.21.10", - "@tsdown/exe": "0.21.10", - "@vitejs/devtools": "*", - "publint": "^0.3.0", - "typescript": "^5.0.0 || ^6.0.0", - "unplugin-unused": "^0.5.0" - }, - "peerDependenciesMeta": { - "@arethetypeswrong/core": { - "optional": true - }, - "@tsdown/css": { - "optional": true - }, - "@tsdown/exe": { - "optional": true - }, - "@vitejs/devtools": { - "optional": true - }, - "publint": { - "optional": true - }, - "typescript": { - "optional": true - }, - "unplugin-unused": { - "optional": true - } + "url": "https://opencollective.com/vitest" } }, - "packages/craftcms-graphiql": { - "name": "@craftcms/graphiql", - "version": "1.0.0", + "packages/craftcms-ui/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, "license": "MIT", - "dependencies": { - "graphiql": "^4.1.0", - "graphql": "^16.10.0", - "graphql-ws": "^6.0.4", - "react": "^19.2.0", - "react-dom": "^19.2.0" - }, - "devDependencies": { - "@craftcms/sass": "file:../craftcms-sass", - "@craftcms/webpack": "file:../craftcms-webpack" - }, "engines": { - "node": ">=20" + "node": "18 || 20 || >=22" } }, - "packages/craftcms-legacy": { - "name": "@craftcms/legacy", + "packages/craftcms-ui/node_modules/brace-expansion": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", + "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", + "dev": true, + "license": "MIT", "dependencies": { - "@benmajor/jquery-touch-events": "^2.0.3", - "@craftcms/cp": "file:../craftcms-cp", - "@craftcms/graphiql": "file:../craftcms-graphiql", - "@craftcms/sass": "file:../craftcms-sass", - "@craftcms/vue": "file:../craftcms-vue", - "@floating-ui/dom": "^1.7.6", - "@selectize/selectize": "selectize/selectize.js#master", - "@simplewebauthn/browser": "^13.3.0", - "@types/jquery": "^3.5.34", - "accounting": "^0.4.1", - "apexcharts": "^5.10.6", - "axios": "^1.15.1", - "blueimp-file-upload": "^10.32.0", - "codemirror": "^5.65.21", - "d3": "^7.9.0", - "fabric": "^1.7.22", - "htmx.org": "^1.9.12", - "iframe-resizer": "^4.4.5", - "inputmask": "^5.0.9", - "jquery": "^3.7.1", - "jquery-ui": "^1.14.2", - "jquery.payment": "^3.0.0", - "picturefill": "^3.0.3", - "punycode": "^2.3.1", - "swiper": "^8.4.7", - "timepicker": "^1.14.1", - "ttf2woff2": "^5.0.0", - "typescript": "^5.9.3", - "v-tooltip": "^2.1.3", - "velocity-animate": "^1.5.2", - "vue": "^2.7.16", - "vue-autosuggest": "^2.2.0", - "vue-awesome-swiper": "^4.1.1", - "vue-cleave": "^1.2.2", - "vue-lodash": "^1.0.4", - "vue-router": "^3.6.5", - "vuex": "^3.6.2", - "xregexp": "^5.1.2", - "yii2-pjax": "~2.0.8" - }, - "devDependencies": { - "@craftcms/playwright": "file:../craftcms-playwright", - "@craftcms/webpack": "file:../craftcms-webpack", - "@playwright/test": "^1.59.1", - "husky": "^9.1.7", - "lint-staged": "^16.4.0", - "pkg-dir": "^5.0.0", - "prettier": "3.8.3", - "stylelint": "^16.26.1", - "stylelint-config-standard": "^36.0.1", - "stylelint-config-standard-scss": "^13.1.0", - "stylelint-prettier": "^5.0.3", - "stylelint-use-logical-spec": "^5.0.1", - "tailwindcss": "^3.4.19", - "vue-apexcharts": "^1.7.0" + "balanced-match": "^4.0.2" }, "engines": { - "node": ">=20" - }, - "optionalDependencies": { - "@awesome.me/kit-ddaed3f5c5": "^1.0.74" + "node": "18 || 20 || >=22" } }, - "packages/craftcms-legacy/node_modules/@csstools/css-parser-algorithms": { - "version": "3.0.5", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], + "packages/craftcms-ui/node_modules/chai": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", + "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", "license": "MIT", "engines": { "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-tokenizer": "^3.0.4" } }, - "packages/craftcms-legacy/node_modules/@csstools/css-tokenizer": { - "version": "3.0.4", + "packages/craftcms-ui/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], "license": "MIT", "engines": { - "node": ">=18" + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "packages/craftcms-legacy/node_modules/@csstools/media-query-list-parser": { - "version": "4.0.3", + "packages/craftcms-ui/node_modules/cli-spinners": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-3.4.0.tgz", + "integrity": "sha512-bXfOC4QcT1tKXGorxL3wbJm6XJPDqEnij2gQ2m7ESQuE+/z9YFIWnl/5RpTiKWbMq3EVKR4fRLJGn6DVfu0mpw==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], "license": "MIT", "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - } - }, - "packages/craftcms-legacy/node_modules/@vue/compiler-sfc": { - "version": "2.7.16", - "dependencies": { - "@babel/parser": "^7.23.5", - "postcss": "^8.4.14", - "source-map": "^0.6.1" + "node": ">=18.20" }, - "optionalDependencies": { - "prettier": "^1.18.2 || ^2.0.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "packages/craftcms-legacy/node_modules/@vue/compiler-sfc/node_modules/prettier": { - "version": "2.8.8", + "packages/craftcms-ui/node_modules/del": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/del/-/del-8.0.1.tgz", + "integrity": "sha512-gPqh0mKTPvaUZGAuHbrBUYKZWBNAeHG7TU3QH5EhVwPMyKvmfJaNXhcD2jTcXsJRRcffuho4vaYweu80dRrMGA==", + "dev": true, "license": "MIT", - "optional": true, - "bin": { - "prettier": "bin-prettier.js" + "dependencies": { + "globby": "^14.0.2", + "is-glob": "^4.0.3", + "is-path-cwd": "^3.0.0", + "is-path-inside": "^4.0.0", + "p-map": "^7.0.2", + "presentable-error": "^0.0.1", + "slash": "^5.1.0" }, "engines": { - "node": ">=10.13.0" + "node": ">=18" }, "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "packages/craftcms-legacy/node_modules/ansi-regex": { - "version": "5.0.1", + "packages/craftcms-ui/node_modules/del/node_modules/globby": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz", + "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==", "dev": true, "license": "MIT", + "dependencies": { + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.3", + "ignore": "^7.0.3", + "path-type": "^6.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.3.0" + }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "packages/craftcms-legacy/node_modules/balanced-match": { - "version": "2.0.0", + "packages/craftcms-ui/node_modules/dom-accessibility-api": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.7.1.tgz", + "integrity": "sha512-vdnCeZD+3wZ+8h8xXL/ZtBlvvoobOFyPzSiIfO6sGOZDqjFx4aLMAjZhl4rawj5xYz3UwP6Tgvyh0iH4IOCVnQ==", "dev": true, "license": "MIT" }, - "packages/craftcms-legacy/node_modules/chokidar": { - "version": "3.6.0", + "packages/craftcms-ui/node_modules/es-module-lexer": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.1.0.tgz", + "integrity": "sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==", + "license": "MIT" + }, + "packages/craftcms-ui/node_modules/glob": { + "version": "13.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", + "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", "dev": true, - "license": "MIT", + "license": "BlueOak-1.0.0", "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" }, "engines": { - "node": ">= 8.10.0" + "node": "18 || 20 || >=22" }, "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "url": "https://github.com/sponsors/isaacs" } }, - "packages/craftcms-legacy/node_modules/globby": { - "version": "11.1.0", + "packages/craftcms-ui/node_modules/is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", "dev": true, "license": "MIT", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "packages/craftcms-legacy/node_modules/globby/node_modules/ignore": { - "version": "5.3.2", + "packages/craftcms-ui/node_modules/is-path-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-3.0.0.tgz", + "integrity": "sha512-kyiNFFLU0Ampr6SDZitD/DwUo4Zs1nSdnygUBqsu3LooL00Qvb5j+UnvApUn/TTj1J3OuE6BTdQ5rudKmU2ZaA==", "dev": true, "license": "MIT", "engines": { - "node": ">= 4" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "packages/craftcms-legacy/node_modules/html-tags": { - "version": "3.3.1", + "packages/craftcms-ui/node_modules/is-path-inside": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz", + "integrity": "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "packages/craftcms-legacy/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", + "packages/craftcms-ui/node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "packages/craftcms-legacy/node_modules/jiti": { - "version": "1.21.7", + "packages/craftcms-ui/node_modules/log-symbols": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-7.0.1.tgz", + "integrity": "sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==", "dev": true, "license": "MIT", - "bin": { - "jiti": "bin/jiti.js" + "dependencies": { + "is-unicode-supported": "^2.0.0", + "yoctocolors": "^2.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "packages/craftcms-legacy/node_modules/mathml-tag-names": { - "version": "2.1.3", + "packages/craftcms-ui/node_modules/minimatch": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", "dev": true, - "license": "MIT", + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.5" + }, + "engines": { + "node": "18 || 20 || >=22" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/sponsors/isaacs" } }, - "packages/craftcms-legacy/node_modules/meow": { - "version": "13.2.0", + "packages/craftcms-ui/node_modules/ora": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-9.4.0.tgz", + "integrity": "sha512-84cglkRILFxdtA8hAvLNdMrtBpPNBTrQ9/ulg0FA7xLMnD6mifv+enAIeRmvtv+WgdCE+LPGOfQmtJRrVaIVhQ==", "dev": true, "license": "MIT", + "dependencies": { + "chalk": "^5.6.2", + "cli-cursor": "^5.0.0", + "cli-spinners": "^3.2.0", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^2.1.0", + "log-symbols": "^7.0.1", + "stdin-discarder": "^0.3.2", + "string-width": "^8.1.0" + }, "engines": { - "node": ">=18" + "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "packages/craftcms-legacy/node_modules/pkg-dir": { - "version": "5.0.0", + "packages/craftcms-ui/node_modules/p-map": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.4.tgz", + "integrity": "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==", "dev": true, "license": "MIT", - "dependencies": { - "find-up": "^5.0.0" - }, "engines": { - "node": ">=10" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "packages/craftcms-legacy/node_modules/postcss-selector-parser": { - "version": "7.1.1", + "packages/craftcms-ui/node_modules/path-scurry": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", + "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", "dev": true, - "license": "MIT", + "license": "BlueOak-1.0.0", "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" }, "engines": { - "node": ">=4" + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "packages/craftcms-legacy/node_modules/string-width": { - "version": "4.2.3", + "packages/craftcms-ui/node_modules/path-type": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz", + "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==", "dev": true, "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "packages/craftcms-legacy/node_modules/strip-ansi": { - "version": "6.0.1", + "packages/craftcms-ui/node_modules/rimraf": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.1.3.tgz", + "integrity": "sha512-LKg+Cr2ZF61fkcaK1UdkH2yEBBKnYjTyWzTJT6KNPcSPaiT7HSdhtMXQuN5wkTX0Xu72KQ1l8S42rlmexS2hSA==", "dev": true, - "license": "MIT", + "license": "BlueOak-1.0.0", "dependencies": { - "ansi-regex": "^5.0.1" + "glob": "^13.0.3", + "package-json-from-dist": "^1.0.1" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" }, "engines": { - "node": ">=8" + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "packages/craftcms-legacy/node_modules/stylelint": { - "version": "16.26.1", + "packages/craftcms-ui/node_modules/semver": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.2.tgz", + "integrity": "sha512-c8jsqUZm3omBOI66G90z1Dyw5z622G8oLG+omfsHBJf3CWQTlOcwOjvOG6wtiNfW6anKm/eA39LMwMtMez2TiQ==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/stylelint" - }, - { - "type": "github", - "url": "https://github.com/sponsors/stylelint" - } - ], - "license": "MIT", - "dependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-syntax-patches-for-csstree": "^1.0.19", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/media-query-list-parser": "^4.0.3", - "@csstools/selector-specificity": "^5.0.0", - "@dual-bundle/import-meta-resolve": "^4.2.1", - "balanced-match": "^2.0.0", - "colord": "^2.9.3", - "cosmiconfig": "^9.0.0", - "css-functions-list": "^3.2.3", - "css-tree": "^3.1.0", - "debug": "^4.4.3", - "fast-glob": "^3.3.3", - "fastest-levenshtein": "^1.0.16", - "file-entry-cache": "^11.1.1", - "global-modules": "^2.0.0", - "globby": "^11.1.0", - "globjoin": "^0.1.4", - "html-tags": "^3.3.1", - "ignore": "^7.0.5", - "imurmurhash": "^0.1.4", - "is-plain-object": "^5.0.0", - "known-css-properties": "^0.37.0", - "mathml-tag-names": "^2.1.3", - "meow": "^13.2.0", - "micromatch": "^4.0.8", - "normalize-path": "^3.0.0", - "picocolors": "^1.1.1", - "postcss": "^8.5.6", - "postcss-resolve-nested-selector": "^0.1.6", - "postcss-safe-parser": "^7.0.1", - "postcss-selector-parser": "^7.1.0", - "postcss-value-parser": "^4.2.0", - "resolve-from": "^5.0.0", - "string-width": "^4.2.3", - "supports-hyperlinks": "^3.2.0", - "svg-tags": "^1.0.0", - "table": "^6.9.0", - "write-file-atomic": "^5.0.1" - }, + "license": "ISC", "bin": { - "stylelint": "bin/stylelint.mjs" + "semver": "bin/semver.js" }, "engines": { - "node": ">=18.12.0" + "node": ">=10" } }, - "packages/craftcms-legacy/node_modules/stylelint-config-recommended": { - "version": "14.0.1", + "packages/craftcms-ui/node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/stylelint" - }, - { - "type": "github", - "url": "https://github.com/sponsors/stylelint" - } - ], "license": "MIT", "engines": { - "node": ">=18.12.0" + "node": ">=14.16" }, - "peerDependencies": { - "stylelint": "^16.1.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "packages/craftcms-legacy/node_modules/stylelint-config-recommended-scss": { - "version": "14.1.0", - "dev": true, + "packages/craftcms-ui/node_modules/tinyrainbow": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz", + "integrity": "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==", "license": "MIT", - "dependencies": { - "postcss-scss": "^4.0.9", - "stylelint-config-recommended": "^14.0.1", - "stylelint-scss": "^6.4.0" - }, "engines": { - "node": ">=18.12.0" - }, - "peerDependencies": { - "postcss": "^8.3.3", - "stylelint": "^16.6.1" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - } + "node": ">=14.0.0" } }, - "packages/craftcms-legacy/node_modules/stylelint-config-standard": { - "version": "36.0.1", + "packages/craftcms-ui/node_modules/tsdown": { + "version": "0.21.10", + "resolved": "https://registry.npmjs.org/tsdown/-/tsdown-0.21.10.tgz", + "integrity": "sha512-3wk73yBhZe/wX7REqSdivNQ84TDs1mJ+IlnzrrEREP70xlJ/AEIzqaI04l/TzMKVIdkTdC3CPaADn2Lk/0SkdA==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/stylelint" - }, - { - "type": "github", - "url": "https://github.com/sponsors/stylelint" - } - ], "license": "MIT", "dependencies": { - "stylelint-config-recommended": "^14.0.1" - }, - "engines": { - "node": ">=18.12.0" + "ansis": "^4.2.0", + "cac": "^7.0.0", + "defu": "^6.1.7", + "empathic": "^2.0.0", + "hookable": "^6.1.1", + "import-without-cache": "^0.3.3", + "obug": "^2.1.1", + "picomatch": "^4.0.4", + "rolldown": "1.0.0-rc.17", + "rolldown-plugin-dts": "^0.23.2", + "semver": "^7.7.4", + "tinyexec": "^1.1.1", + "tinyglobby": "^0.2.16", + "tree-kill": "^1.2.2", + "unconfig-core": "^7.5.0", + "unrun": "^0.2.37" }, - "peerDependencies": { - "stylelint": "^16.1.0" - } - }, - "packages/craftcms-legacy/node_modules/stylelint-config-standard-scss": { - "version": "13.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "stylelint-config-recommended-scss": "^14.0.0", - "stylelint-config-standard": "^36.0.0" + "bin": { + "tsdown": "dist/run.mjs" }, "engines": { - "node": ">=18.12.0" + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" }, "peerDependencies": { - "postcss": "^8.3.3", - "stylelint": "^16.3.1" + "@arethetypeswrong/core": "^0.18.1", + "@tsdown/css": "0.21.10", + "@tsdown/exe": "0.21.10", + "@vitejs/devtools": "*", + "publint": "^0.3.0", + "typescript": "^5.0.0 || ^6.0.0", + "unplugin-unused": "^0.5.0" }, "peerDependenciesMeta": { - "postcss": { + "@arethetypeswrong/core": { + "optional": true + }, + "@tsdown/css": { + "optional": true + }, + "@tsdown/exe": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "publint": { + "optional": true + }, + "typescript": { + "optional": true + }, + "unplugin-unused": { "optional": true } } }, - "packages/craftcms-legacy/node_modules/stylelint-scss": { - "version": "6.14.0", - "dev": true, - "license": "MIT", - "dependencies": { - "css-tree": "^3.0.1", - "is-plain-object": "^5.0.0", - "known-css-properties": "^0.37.0", - "mdn-data": "^2.25.0", - "postcss-media-query-parser": "^0.2.3", - "postcss-resolve-nested-selector": "^0.1.6", - "postcss-selector-parser": "^7.1.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18.12.0" - }, - "peerDependencies": { - "stylelint": "^16.8.2" - } - }, - "packages/craftcms-legacy/node_modules/tailwindcss": { - "version": "3.4.19", - "dev": true, + "packages/craftcms-ui/node_modules/vitest": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.8.tgz", + "integrity": "sha512-flY6ScbCIt9HThs+C5HS7jvGOB560DJtk/Z15IQROTA6zEy49Nh8T/dofWTQL+n3vswqn87sbJNiuqw1SDp5Ig==", "license": "MIT", "dependencies": { - "@alloc/quick-lru": "^5.2.0", - "arg": "^5.0.2", - "chokidar": "^3.6.0", - "didyoumean": "^1.2.2", - "dlv": "^1.1.3", - "fast-glob": "^3.3.2", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "jiti": "^1.21.7", - "lilconfig": "^3.1.3", - "micromatch": "^4.0.8", - "normalize-path": "^3.0.0", - "object-hash": "^3.0.0", - "picocolors": "^1.1.1", - "postcss": "^8.4.47", - "postcss-import": "^15.1.0", - "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.2 || ^5.0 || ^6.0", - "postcss-nested": "^6.2.0", - "postcss-selector-parser": "^6.1.2", - "resolve": "^1.22.8", - "sucrase": "^3.35.0" + "@vitest/expect": "4.1.8", + "@vitest/mocker": "4.1.8", + "@vitest/pretty-format": "4.1.8", + "@vitest/runner": "4.1.8", + "@vitest/snapshot": "4.1.8", + "@vitest/spy": "4.1.8", + "@vitest/utils": "4.1.8", + "es-module-lexer": "^2.0.0", + "expect-type": "^1.3.0", + "magic-string": "^0.30.21", + "obug": "^2.1.1", + "pathe": "^2.0.3", + "picomatch": "^4.0.3", + "std-env": "^4.0.0-rc.1", + "tinybench": "^2.9.0", + "tinyexec": "^1.0.2", + "tinyglobby": "^0.2.15", + "tinyrainbow": "^3.1.0", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0", + "why-is-node-running": "^2.3.0" }, "bin": { - "tailwind": "lib/cli.js", - "tailwindcss": "lib/cli.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/craftcms-legacy/node_modules/tailwindcss/node_modules/glob-parent": { - "version": "6.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "packages/craftcms-legacy/node_modules/tailwindcss/node_modules/postcss-selector-parser": { - "version": "6.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" + "vitest": "vitest.mjs" }, "engines": { - "node": ">=4" - } - }, - "packages/craftcms-legacy/node_modules/typescript": { - "version": "5.9.3", - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "node": "^20.0.0 || ^22.0.0 || >=24.0.0" }, - "engines": { - "node": ">=14.17" - } - }, - "packages/craftcms-legacy/node_modules/vue": { - "version": "2.7.16", - "license": "MIT", - "dependencies": { - "@vue/compiler-sfc": "2.7.16", - "csstype": "^3.1.0" - } - }, - "packages/craftcms-legacy/node_modules/write-file-atomic": { - "version": "5.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^4.0.1" + "funding": { + "url": "https://opencollective.com/vitest" }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "packages/craftcms-playwright": { - "name": "@craftcms/playwright", - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "@playwright/test": "^1.47.0", - "events": "^3.3.0", - "signale": "^1.4.0" + "peerDependencies": { + "@edge-runtime/vm": "*", + "@opentelemetry/api": "^1.9.0", + "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", + "@vitest/browser-playwright": "4.1.8", + "@vitest/browser-preview": "4.1.8", + "@vitest/browser-webdriverio": "4.1.8", + "@vitest/coverage-istanbul": "4.1.8", + "@vitest/coverage-v8": "4.1.8", + "@vitest/ui": "4.1.8", + "happy-dom": "*", + "jsdom": "*", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" }, - "bin": { - "craft-playwright": "src/cli.js" + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@opentelemetry/api": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser-playwright": { + "optional": true + }, + "@vitest/browser-preview": { + "optional": true + }, + "@vitest/browser-webdriverio": { + "optional": true + }, + "@vitest/coverage-istanbul": { + "optional": true + }, + "@vitest/coverage-v8": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + }, + "vite": { + "optional": false + } } }, - "packages/craftcms-sass": { - "name": "@craftcms/sass", - "version": "1.1.0", - "license": "MIT" - }, "packages/craftcms-vue": { "name": "@craftcms/vue", "version": "1.0.1", diff --git a/package.json b/package.json index 2665d82aab4..e3bf47aa8fc 100644 --- a/package.json +++ b/package.json @@ -68,7 +68,7 @@ "dependencies": { "@atlaskit/pragmatic-drag-and-drop": "^1.8.1", "@atlaskit/pragmatic-drag-and-drop-hitbox": "^1.1.0", - "@craftcms/cp": "file:packages/craftcms-cp", + "@craftcms/ui": "file:packages/craftcms-ui", "@headlessui/vue": "^1.7.23", "@inertiajs/vite": "^3.0.3", "@inertiajs/vue3": "^3.0.3", diff --git a/packages/craftcms-cp/src/craft.ts b/packages/craftcms-cp/src/craft.ts deleted file mode 100644 index cef418875f7..00000000000 --- a/packages/craftcms-cp/src/craft.ts +++ /dev/null @@ -1,56 +0,0 @@ -import type {AxiosProxyConfig} from 'axios'; - -/** - * The contract for the Craft context that the @craftcms/cp package needs. - * - * This is intentionally minimal — only the capabilities the package actually - * uses. The consuming application provides this via `configure()` at boot. - */ -export interface CraftContext { - getActionUrl(action?: string, params?: string | object): string; - getCpUrl(path?: string, params?: string | object): string; - setCookie?: (name: string, value: string) => void; - registeredAssetBundles: string[]; - registeredJsFiles: string[]; - apiParams?: Record; - httpProxy?: AxiosProxyConfig; -} - -let context: CraftContext | null = null; - -/** - * Configure the package with a Craft context. - * Must be called before any API utilities are used. - */ -export function configure(craft: CraftContext): void { - context = craft; -} - -/** - * Get the configured Craft context. - * Throws if `configure()` has not been called — use for required capabilities - * (API clients, URL builders). - */ -export function getCraft(): CraftContext { - if (!context) { - throw new Error( - '@craftcms/cp has not been configured. Call configure(craft) before using package utilities.' - ); - } - return context; -} - -/** - * Get the configured Craft context, or null if not yet configured. - * Use for optional/graceful-degradation behaviors (e.g. cookie persistence). - */ -export function tryGetCraft(): CraftContext | null { - return context; -} - -/** - * Reset configuration (for testing). - */ -export function resetConfiguration(): void { - context = null; -} diff --git a/packages/craftcms-cp/src/services/Config.ts b/packages/craftcms-cp/src/services/Config.ts deleted file mode 100644 index cf2ac31b829..00000000000 --- a/packages/craftcms-cp/src/services/Config.ts +++ /dev/null @@ -1,55 +0,0 @@ -export class ConfigService { - static #instance: ConfigService | null = null; - - #config: Map = new Map(); - - /** Get the singleton instance */ - static getInstance(initialConfig = {}): ConfigService { - if (!ConfigService.#instance) { - ConfigService.#instance = new ConfigService(); - } - return ConfigService.#instance; - } - - /** Reset the singleton (mainly for testing) */ - static resetInstance(): void { - if (ConfigService.#instance) { - ConfigService.#instance = null; - } - } - - initialize(initialConfig = {}) { - this.#config = new Map(Object.entries(initialConfig)); - } - - #buildUrl(baseUrl: string, path: string): string { - const url = new URL(baseUrl); - const cleanPath = path.startsWith('/') ? path.slice(1) : path; - url.pathname = `${url.pathname}/${cleanPath}`; - return url.toString(); - } - - getCpUrl(path: string) { - return this.#buildUrl(this.#config.get('cpUrl'), path); - } - - getActionUrl(path: string) { - return this.#buildUrl(this.#config.get('actionUrl'), path); - } - - all() { - return this.#config; - } - - set(key: string, value: any): void { - this.#config.set(key, value); - } - - get(key: string, fallback: any = null): any { - if (this.#config.has(key)) { - return this.#config.get(key); - } - - return fallback; - } -} diff --git a/packages/craftcms-legacy/cp/src/css/_compat.scss b/packages/craftcms-legacy/cp/src/css/_compat.scss index 1c6e49acb8a..0947c76657b 100644 --- a/packages/craftcms-legacy/cp/src/css/_compat.scss +++ b/packages/craftcms-legacy/cp/src/css/_compat.scss @@ -2,7 +2,7 @@ * Legacy Token Mapping * * This file maps legacy CSS variables to the new token system defined in - * @craftcms/cp tokens.css. Import this file to provide backwards compatibility + * @craftcms/ui tokens.css. Import this file to provide backwards compatibility * for legacy styles. * * Variables mapped to --CHANGE require manual review and update. diff --git a/packages/craftcms-legacy/cp/src/js/CP.js b/packages/craftcms-legacy/cp/src/js/CP.js index 7387335a166..c9a5492814f 100644 --- a/packages/craftcms-legacy/cp/src/js/CP.js +++ b/packages/craftcms-legacy/cp/src/js/CP.js @@ -1,8 +1,8 @@ // Import from the deep service module rather than the package root. The root -// entry (`@craftcms/cp`) side-effect-registers WebAwesome components (e.g. +// entry (`@craftcms/ui`) side-effect-registers WebAwesome components (e.g. // `wa-icon`); pulling that into this separately-webpacked legacy bundle causes // a duplicate custom-element registration when it loads alongside the Vite app. -import {QueueService} from '@craftcms/cp/services/Queue.ts.mjs'; +import {QueueService} from '../../../resources/js/common/services/Queue'; /** global: Craft */ /** global: Garnish */ /** global: $ */ diff --git a/packages/craftcms-legacy/cp/src/js/Craft.js b/packages/craftcms-legacy/cp/src/js/Craft.js index ce6365aafb5..42477931e05 100644 --- a/packages/craftcms-legacy/cp/src/js/Craft.js +++ b/packages/craftcms-legacy/cp/src/js/Craft.js @@ -1,4 +1,4 @@ -import {formatMessage, t} from '@craftcms/cp/utilities/translate.ts.mjs'; +import {formatMessage, t} from '@craftcms/ui/utilities/translate.ts.mjs'; import * as d3 from 'd3'; /** global: Craft */ diff --git a/packages/craftcms-legacy/package.json b/packages/craftcms-legacy/package.json index 956a27f31dc..2f722b4ac0e 100644 --- a/packages/craftcms-legacy/package.json +++ b/packages/craftcms-legacy/package.json @@ -35,7 +35,7 @@ }, "dependencies": { "@benmajor/jquery-touch-events": "^2.0.3", - "@craftcms/cp": "file:../craftcms-cp", + "@craftcms/ui": "file:../craftcms-ui", "@craftcms/graphiql": "file:../craftcms-graphiql", "@craftcms/sass": "file:../craftcms-sass", "@craftcms/vue": "file:../craftcms-vue", diff --git a/packages/craftcms-cp/.gitignore b/packages/craftcms-ui/.gitignore similarity index 100% rename from packages/craftcms-cp/.gitignore rename to packages/craftcms-ui/.gitignore diff --git a/packages/craftcms-cp/.nvmrc b/packages/craftcms-ui/.nvmrc similarity index 100% rename from packages/craftcms-cp/.nvmrc rename to packages/craftcms-ui/.nvmrc diff --git a/packages/craftcms-cp/.prettierignore b/packages/craftcms-ui/.prettierignore similarity index 100% rename from packages/craftcms-cp/.prettierignore rename to packages/craftcms-ui/.prettierignore diff --git a/packages/craftcms-cp/.storybook/main.ts b/packages/craftcms-ui/.storybook/main.ts similarity index 100% rename from packages/craftcms-cp/.storybook/main.ts rename to packages/craftcms-ui/.storybook/main.ts diff --git a/packages/craftcms-cp/.storybook/preview.css b/packages/craftcms-ui/.storybook/preview.css similarity index 100% rename from packages/craftcms-cp/.storybook/preview.css rename to packages/craftcms-ui/.storybook/preview.css diff --git a/packages/craftcms-cp/.storybook/preview.ts b/packages/craftcms-ui/.storybook/preview.ts similarity index 100% rename from packages/craftcms-cp/.storybook/preview.ts rename to packages/craftcms-ui/.storybook/preview.ts diff --git a/packages/craftcms-cp/.storybook/vitest.setup.ts b/packages/craftcms-ui/.storybook/vitest.setup.ts similarity index 100% rename from packages/craftcms-cp/.storybook/vitest.setup.ts rename to packages/craftcms-ui/.storybook/vitest.setup.ts diff --git a/packages/craftcms-cp/README.md b/packages/craftcms-ui/README.md similarity index 100% rename from packages/craftcms-cp/README.md rename to packages/craftcms-ui/README.md diff --git a/packages/craftcms-cp/custom-elements-manifest.config.mjs b/packages/craftcms-ui/custom-elements-manifest.config.mjs similarity index 100% rename from packages/craftcms-cp/custom-elements-manifest.config.mjs rename to packages/craftcms-ui/custom-elements-manifest.config.mjs diff --git a/packages/craftcms-cp/custom-elements.json b/packages/craftcms-ui/custom-elements.json similarity index 100% rename from packages/craftcms-cp/custom-elements.json rename to packages/craftcms-ui/custom-elements.json diff --git a/packages/craftcms-cp/package.json b/packages/craftcms-ui/package.json similarity index 91% rename from packages/craftcms-cp/package.json rename to packages/craftcms-ui/package.json index 2b869da7015..d7349f54553 100644 --- a/packages/craftcms-cp/package.json +++ b/packages/craftcms-ui/package.json @@ -1,9 +1,9 @@ { - "name": "@craftcms/cp", + "name": "@craftcms/ui", "version": "0.0.0", - "description": "CP Components for Craft CMS", + "description": "UI Components for Craft CMS", "type": "module", - "main": "dist/cp.js", + "main": "dist/ui.js", "types": "dist/index.d.ts", "repository": { "type": "git", @@ -34,15 +34,14 @@ "exports": { "./package.json": "./package.json", ".": { - "types": "./dist/cp.d.mts", - "import": "./dist/cp.mjs", - "require": "./dist/cp.cjs" + "types": "./dist/ui.d.mts", + "import": "./dist/ui.mjs", + "require": "./dist/ui.cjs" }, "./*": "./dist/*", "./dist/*": "./dist/*", "./vue/*": "./dist/vue/*", "./types/*": "./src/types/*", - "./services/*": "./dist/services/*", "./styles/*": "./dist/styles/*", "./utilities/*": "./dist/utilities/*", "./components/*": "./dist/components/*", @@ -104,8 +103,7 @@ "@formatjs/intl-durationformat": "^0.10.8", "@github/relative-time-element": "^5.0.0", "@simplewebauthn/browser": "^13.3.0", - "@vitest/browser-playwright": "^4.1.5", - "axios": "^1.15.2" + "@vitest/browser-playwright": "^4.1.5" }, "customElements": "dist/custom-elements.json" } diff --git a/packages/craftcms-cp/scripts/build.js b/packages/craftcms-ui/scripts/build.js similarity index 98% rename from packages/craftcms-cp/scripts/build.js rename to packages/craftcms-ui/scripts/build.js index e3e71d44810..2ecdda35eb0 100755 --- a/packages/craftcms-cp/scripts/build.js +++ b/packages/craftcms-ui/scripts/build.js @@ -9,7 +9,7 @@ import {join} from 'path'; import {deleteAsync} from 'del'; import createVueWrappers from './generate-vue-wrappers.js'; -const spinner = ora({text: '@craftcms/cp', color: 'red'}).start(); +const spinner = ora({text: '@craftcms/ui', color: 'red'}).start(); const isDeveloping = process.argv.includes('--develop'); async function cleanup() { diff --git a/packages/craftcms-cp/scripts/generate-color-palette.js b/packages/craftcms-ui/scripts/generate-color-palette.js similarity index 100% rename from packages/craftcms-cp/scripts/generate-color-palette.js rename to packages/craftcms-ui/scripts/generate-color-palette.js diff --git a/packages/craftcms-cp/scripts/generate-colors.js b/packages/craftcms-ui/scripts/generate-colors.js similarity index 100% rename from packages/craftcms-cp/scripts/generate-colors.js rename to packages/craftcms-ui/scripts/generate-colors.js diff --git a/packages/craftcms-cp/scripts/generate-vue-wrappers.js b/packages/craftcms-ui/scripts/generate-vue-wrappers.js similarity index 100% rename from packages/craftcms-cp/scripts/generate-vue-wrappers.js rename to packages/craftcms-ui/scripts/generate-vue-wrappers.js diff --git a/packages/craftcms-cp/scripts/utils.js b/packages/craftcms-ui/scripts/utils.js similarity index 100% rename from packages/craftcms-cp/scripts/utils.js rename to packages/craftcms-ui/scripts/utils.js diff --git a/packages/craftcms-cp/src/actions/index.ts b/packages/craftcms-ui/src/actions/index.ts similarity index 100% rename from packages/craftcms-cp/src/actions/index.ts rename to packages/craftcms-ui/src/actions/index.ts diff --git a/packages/craftcms-cp/src/components/action-item/action-item.stories.ts b/packages/craftcms-ui/src/components/action-item/action-item.stories.ts similarity index 100% rename from packages/craftcms-cp/src/components/action-item/action-item.stories.ts rename to packages/craftcms-ui/src/components/action-item/action-item.stories.ts diff --git a/packages/craftcms-cp/src/components/action-item/action-item.styles.ts b/packages/craftcms-ui/src/components/action-item/action-item.styles.ts similarity index 100% rename from packages/craftcms-cp/src/components/action-item/action-item.styles.ts rename to packages/craftcms-ui/src/components/action-item/action-item.styles.ts diff --git a/packages/craftcms-cp/src/components/action-item/action-item.ts b/packages/craftcms-ui/src/components/action-item/action-item.ts similarity index 100% rename from packages/craftcms-cp/src/components/action-item/action-item.ts rename to packages/craftcms-ui/src/components/action-item/action-item.ts diff --git a/packages/craftcms-cp/src/components/action-menu/action-menu.stories.ts b/packages/craftcms-ui/src/components/action-menu/action-menu.stories.ts similarity index 100% rename from packages/craftcms-cp/src/components/action-menu/action-menu.stories.ts rename to packages/craftcms-ui/src/components/action-menu/action-menu.stories.ts diff --git a/packages/craftcms-cp/src/components/action-menu/action-menu.ts b/packages/craftcms-ui/src/components/action-menu/action-menu.ts similarity index 100% rename from packages/craftcms-cp/src/components/action-menu/action-menu.ts rename to packages/craftcms-ui/src/components/action-menu/action-menu.ts diff --git a/packages/craftcms-cp/src/components/auth-challenge-form/auth-challenge-form.ts b/packages/craftcms-ui/src/components/auth-challenge-form/auth-challenge-form.ts similarity index 95% rename from packages/craftcms-cp/src/components/auth-challenge-form/auth-challenge-form.ts rename to packages/craftcms-ui/src/components/auth-challenge-form/auth-challenge-form.ts index 1b7f70a30f8..d73f3dd6096 100644 --- a/packages/craftcms-cp/src/components/auth-challenge-form/auth-challenge-form.ts +++ b/packages/craftcms-ui/src/components/auth-challenge-form/auth-challenge-form.ts @@ -1,6 +1,6 @@ import {css, html, LitElement} from 'lit'; import {property, query, state} from 'lit/decorators.js'; -import {actionClient, t} from '@src/index'; +import {t} from '@src/utilities/translate'; /** @internal Module-private registry of PHP METHOD handle → element class. */ const _registry = new Map(); @@ -20,7 +20,7 @@ const _registry = new Map(); * @example * ```typescript * import {html} from 'lit'; - * import {CraftAuthChallengeForm} from '@craftcms/cp'; + * import {CraftAuthChallengeForm} from '@craftcms/ui'; * * class MyPluginForm extends CraftAuthChallengeForm { * static METHOD = 'my-method'; @@ -139,7 +139,18 @@ export abstract class CraftAuthChallengeForm extends LitElement { this._state = 'loading'; try { - await actionClient.post(this.endpoint, {code}); + const response = await fetch(this.endpoint, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-Requested-With': 'XMLHttpRequest', + }, + body: JSON.stringify({code}), + }); + + if (!response.ok) { + throw new Error(`HTTP ${response.status}`); + } this.dispatchEvent( new CustomEvent('login-verified', { diff --git a/packages/craftcms-cp/src/components/avatar/avatar.stories.ts b/packages/craftcms-ui/src/components/avatar/avatar.stories.ts similarity index 100% rename from packages/craftcms-cp/src/components/avatar/avatar.stories.ts rename to packages/craftcms-ui/src/components/avatar/avatar.stories.ts diff --git a/packages/craftcms-cp/src/components/avatar/avatar.styles.ts b/packages/craftcms-ui/src/components/avatar/avatar.styles.ts similarity index 100% rename from packages/craftcms-cp/src/components/avatar/avatar.styles.ts rename to packages/craftcms-ui/src/components/avatar/avatar.styles.ts diff --git a/packages/craftcms-cp/src/components/avatar/avatar.ts b/packages/craftcms-ui/src/components/avatar/avatar.ts similarity index 100% rename from packages/craftcms-cp/src/components/avatar/avatar.ts rename to packages/craftcms-ui/src/components/avatar/avatar.ts diff --git a/packages/craftcms-cp/src/components/badge-indicator/badge-indicator.stories.ts b/packages/craftcms-ui/src/components/badge-indicator/badge-indicator.stories.ts similarity index 100% rename from packages/craftcms-cp/src/components/badge-indicator/badge-indicator.stories.ts rename to packages/craftcms-ui/src/components/badge-indicator/badge-indicator.stories.ts diff --git a/packages/craftcms-cp/src/components/badge-indicator/badge-indicator.styles.ts b/packages/craftcms-ui/src/components/badge-indicator/badge-indicator.styles.ts similarity index 100% rename from packages/craftcms-cp/src/components/badge-indicator/badge-indicator.styles.ts rename to packages/craftcms-ui/src/components/badge-indicator/badge-indicator.styles.ts diff --git a/packages/craftcms-cp/src/components/badge-indicator/badge-indicator.ts b/packages/craftcms-ui/src/components/badge-indicator/badge-indicator.ts similarity index 100% rename from packages/craftcms-cp/src/components/badge-indicator/badge-indicator.ts rename to packages/craftcms-ui/src/components/badge-indicator/badge-indicator.ts diff --git a/packages/craftcms-cp/src/components/breadcrumb-item/breadcrumb-item.ts b/packages/craftcms-ui/src/components/breadcrumb-item/breadcrumb-item.ts similarity index 100% rename from packages/craftcms-cp/src/components/breadcrumb-item/breadcrumb-item.ts rename to packages/craftcms-ui/src/components/breadcrumb-item/breadcrumb-item.ts diff --git a/packages/craftcms-cp/src/components/breadcrumbs/breadcrumbs.stories.ts b/packages/craftcms-ui/src/components/breadcrumbs/breadcrumbs.stories.ts similarity index 100% rename from packages/craftcms-cp/src/components/breadcrumbs/breadcrumbs.stories.ts rename to packages/craftcms-ui/src/components/breadcrumbs/breadcrumbs.stories.ts diff --git a/packages/craftcms-cp/src/components/breadcrumbs/breadcrumbs.styles.ts b/packages/craftcms-ui/src/components/breadcrumbs/breadcrumbs.styles.ts similarity index 100% rename from packages/craftcms-cp/src/components/breadcrumbs/breadcrumbs.styles.ts rename to packages/craftcms-ui/src/components/breadcrumbs/breadcrumbs.styles.ts diff --git a/packages/craftcms-cp/src/components/breadcrumbs/breadcrumbs.ts b/packages/craftcms-ui/src/components/breadcrumbs/breadcrumbs.ts similarity index 100% rename from packages/craftcms-cp/src/components/breadcrumbs/breadcrumbs.ts rename to packages/craftcms-ui/src/components/breadcrumbs/breadcrumbs.ts diff --git a/packages/craftcms-cp/src/components/button-group/button-group.stories.ts b/packages/craftcms-ui/src/components/button-group/button-group.stories.ts similarity index 100% rename from packages/craftcms-cp/src/components/button-group/button-group.stories.ts rename to packages/craftcms-ui/src/components/button-group/button-group.stories.ts diff --git a/packages/craftcms-cp/src/components/button-group/button-group.styles.ts b/packages/craftcms-ui/src/components/button-group/button-group.styles.ts similarity index 100% rename from packages/craftcms-cp/src/components/button-group/button-group.styles.ts rename to packages/craftcms-ui/src/components/button-group/button-group.styles.ts diff --git a/packages/craftcms-cp/src/components/button-group/button-group.ts b/packages/craftcms-ui/src/components/button-group/button-group.ts similarity index 100% rename from packages/craftcms-cp/src/components/button-group/button-group.ts rename to packages/craftcms-ui/src/components/button-group/button-group.ts diff --git a/packages/craftcms-cp/src/components/button/button.stories.ts b/packages/craftcms-ui/src/components/button/button.stories.ts similarity index 100% rename from packages/craftcms-cp/src/components/button/button.stories.ts rename to packages/craftcms-ui/src/components/button/button.stories.ts diff --git a/packages/craftcms-cp/src/components/button/button.styles.ts b/packages/craftcms-ui/src/components/button/button.styles.ts similarity index 100% rename from packages/craftcms-cp/src/components/button/button.styles.ts rename to packages/craftcms-ui/src/components/button/button.styles.ts diff --git a/packages/craftcms-cp/src/components/button/button.ts b/packages/craftcms-ui/src/components/button/button.ts similarity index 100% rename from packages/craftcms-cp/src/components/button/button.ts rename to packages/craftcms-ui/src/components/button/button.ts diff --git a/packages/craftcms-cp/src/components/callout/callout.stories.ts b/packages/craftcms-ui/src/components/callout/callout.stories.ts similarity index 100% rename from packages/craftcms-cp/src/components/callout/callout.stories.ts rename to packages/craftcms-ui/src/components/callout/callout.stories.ts diff --git a/packages/craftcms-cp/src/components/callout/callout.styles.ts b/packages/craftcms-ui/src/components/callout/callout.styles.ts similarity index 100% rename from packages/craftcms-cp/src/components/callout/callout.styles.ts rename to packages/craftcms-ui/src/components/callout/callout.styles.ts diff --git a/packages/craftcms-cp/src/components/callout/callout.ts b/packages/craftcms-ui/src/components/callout/callout.ts similarity index 100% rename from packages/craftcms-cp/src/components/callout/callout.ts rename to packages/craftcms-ui/src/components/callout/callout.ts diff --git a/packages/craftcms-cp/src/components/card/card.stories.ts b/packages/craftcms-ui/src/components/card/card.stories.ts similarity index 100% rename from packages/craftcms-cp/src/components/card/card.stories.ts rename to packages/craftcms-ui/src/components/card/card.stories.ts diff --git a/packages/craftcms-cp/src/components/card/card.styles.ts b/packages/craftcms-ui/src/components/card/card.styles.ts similarity index 100% rename from packages/craftcms-cp/src/components/card/card.styles.ts rename to packages/craftcms-ui/src/components/card/card.styles.ts diff --git a/packages/craftcms-cp/src/components/card/card.ts b/packages/craftcms-ui/src/components/card/card.ts similarity index 100% rename from packages/craftcms-cp/src/components/card/card.ts rename to packages/craftcms-ui/src/components/card/card.ts diff --git a/packages/craftcms-cp/src/components/checkbox-group/checkbox-group.ts b/packages/craftcms-ui/src/components/checkbox-group/checkbox-group.ts similarity index 100% rename from packages/craftcms-cp/src/components/checkbox-group/checkbox-group.ts rename to packages/craftcms-ui/src/components/checkbox-group/checkbox-group.ts diff --git a/packages/craftcms-cp/src/components/checkbox-indeterminate/checkbox-indeterminate.stories.ts b/packages/craftcms-ui/src/components/checkbox-indeterminate/checkbox-indeterminate.stories.ts similarity index 100% rename from packages/craftcms-cp/src/components/checkbox-indeterminate/checkbox-indeterminate.stories.ts rename to packages/craftcms-ui/src/components/checkbox-indeterminate/checkbox-indeterminate.stories.ts diff --git a/packages/craftcms-cp/src/components/checkbox-indeterminate/checkbox-indeterminate.ts b/packages/craftcms-ui/src/components/checkbox-indeterminate/checkbox-indeterminate.ts similarity index 100% rename from packages/craftcms-cp/src/components/checkbox-indeterminate/checkbox-indeterminate.ts rename to packages/craftcms-ui/src/components/checkbox-indeterminate/checkbox-indeterminate.ts diff --git a/packages/craftcms-cp/src/components/checkbox/checkbox.stories.ts b/packages/craftcms-ui/src/components/checkbox/checkbox.stories.ts similarity index 100% rename from packages/craftcms-cp/src/components/checkbox/checkbox.stories.ts rename to packages/craftcms-ui/src/components/checkbox/checkbox.stories.ts diff --git a/packages/craftcms-cp/src/components/checkbox/checkbox.ts b/packages/craftcms-ui/src/components/checkbox/checkbox.ts similarity index 100% rename from packages/craftcms-cp/src/components/checkbox/checkbox.ts rename to packages/craftcms-ui/src/components/checkbox/checkbox.ts diff --git a/packages/craftcms-cp/src/components/chip/chip.stories.ts b/packages/craftcms-ui/src/components/chip/chip.stories.ts similarity index 100% rename from packages/craftcms-cp/src/components/chip/chip.stories.ts rename to packages/craftcms-ui/src/components/chip/chip.stories.ts diff --git a/packages/craftcms-cp/src/components/chip/chip.styles.ts b/packages/craftcms-ui/src/components/chip/chip.styles.ts similarity index 100% rename from packages/craftcms-cp/src/components/chip/chip.styles.ts rename to packages/craftcms-ui/src/components/chip/chip.styles.ts diff --git a/packages/craftcms-cp/src/components/chip/chip.ts b/packages/craftcms-ui/src/components/chip/chip.ts similarity index 100% rename from packages/craftcms-cp/src/components/chip/chip.ts rename to packages/craftcms-ui/src/components/chip/chip.ts diff --git a/packages/craftcms-cp/src/components/combobox/combobox.stories.ts b/packages/craftcms-ui/src/components/combobox/combobox.stories.ts similarity index 100% rename from packages/craftcms-cp/src/components/combobox/combobox.stories.ts rename to packages/craftcms-ui/src/components/combobox/combobox.stories.ts diff --git a/packages/craftcms-cp/src/components/combobox/combobox.styles.ts b/packages/craftcms-ui/src/components/combobox/combobox.styles.ts similarity index 100% rename from packages/craftcms-cp/src/components/combobox/combobox.styles.ts rename to packages/craftcms-ui/src/components/combobox/combobox.styles.ts diff --git a/packages/craftcms-cp/src/components/combobox/combobox.ts b/packages/craftcms-ui/src/components/combobox/combobox.ts similarity index 100% rename from packages/craftcms-cp/src/components/combobox/combobox.ts rename to packages/craftcms-ui/src/components/combobox/combobox.ts diff --git a/packages/craftcms-cp/src/components/copy-attribute/copy-attribute.stories.ts b/packages/craftcms-ui/src/components/copy-attribute/copy-attribute.stories.ts similarity index 100% rename from packages/craftcms-cp/src/components/copy-attribute/copy-attribute.stories.ts rename to packages/craftcms-ui/src/components/copy-attribute/copy-attribute.stories.ts diff --git a/packages/craftcms-cp/src/components/copy-attribute/copy-attribute.styles.ts b/packages/craftcms-ui/src/components/copy-attribute/copy-attribute.styles.ts similarity index 100% rename from packages/craftcms-cp/src/components/copy-attribute/copy-attribute.styles.ts rename to packages/craftcms-ui/src/components/copy-attribute/copy-attribute.styles.ts diff --git a/packages/craftcms-cp/src/components/copy-attribute/copy-attribute.ts b/packages/craftcms-ui/src/components/copy-attribute/copy-attribute.ts similarity index 100% rename from packages/craftcms-cp/src/components/copy-attribute/copy-attribute.ts rename to packages/craftcms-ui/src/components/copy-attribute/copy-attribute.ts diff --git a/packages/craftcms-cp/src/components/copy-button/copy-button.stories.ts b/packages/craftcms-ui/src/components/copy-button/copy-button.stories.ts similarity index 100% rename from packages/craftcms-cp/src/components/copy-button/copy-button.stories.ts rename to packages/craftcms-ui/src/components/copy-button/copy-button.stories.ts diff --git a/packages/craftcms-cp/src/components/copy-button/copy-button.styles.ts b/packages/craftcms-ui/src/components/copy-button/copy-button.styles.ts similarity index 100% rename from packages/craftcms-cp/src/components/copy-button/copy-button.styles.ts rename to packages/craftcms-ui/src/components/copy-button/copy-button.styles.ts diff --git a/packages/craftcms-cp/src/components/copy-button/copy-button.ts b/packages/craftcms-ui/src/components/copy-button/copy-button.ts similarity index 100% rename from packages/craftcms-cp/src/components/copy-button/copy-button.ts rename to packages/craftcms-ui/src/components/copy-button/copy-button.ts diff --git a/packages/craftcms-cp/src/components/dialog/dialog.stories.ts b/packages/craftcms-ui/src/components/dialog/dialog.stories.ts similarity index 100% rename from packages/craftcms-cp/src/components/dialog/dialog.stories.ts rename to packages/craftcms-ui/src/components/dialog/dialog.stories.ts diff --git a/packages/craftcms-cp/src/components/dialog/dialog.ts b/packages/craftcms-ui/src/components/dialog/dialog.ts similarity index 100% rename from packages/craftcms-cp/src/components/dialog/dialog.ts rename to packages/craftcms-ui/src/components/dialog/dialog.ts diff --git a/packages/craftcms-cp/src/components/disclosure/disclosure.stories.ts b/packages/craftcms-ui/src/components/disclosure/disclosure.stories.ts similarity index 100% rename from packages/craftcms-cp/src/components/disclosure/disclosure.stories.ts rename to packages/craftcms-ui/src/components/disclosure/disclosure.stories.ts diff --git a/packages/craftcms-cp/src/components/disclosure/disclosure.ts b/packages/craftcms-ui/src/components/disclosure/disclosure.ts similarity index 94% rename from packages/craftcms-cp/src/components/disclosure/disclosure.ts rename to packages/craftcms-ui/src/components/disclosure/disclosure.ts index 3583e241159..cf65ba69d08 100644 --- a/packages/craftcms-cp/src/components/disclosure/disclosure.ts +++ b/packages/craftcms-ui/src/components/disclosure/disclosure.ts @@ -4,7 +4,9 @@ * Allows you to wrap a button[type="button"] and target an element to toggle the `data-state` attribute on. * Set `aria-expanded` on the button */ -import {tryGetCraft} from '@src/craft'; +import {Cookies} from '@src/utilities/cookies'; + +const cookies = new Cookies(); export default class CraftDisclosure extends HTMLElement { static observedAttributes = ['state']; @@ -93,7 +95,7 @@ export default class CraftDisclosure extends HTMLElement { } if (this.cookieName) { - tryGetCraft()?.setCookie?.(this.cookieName, 'expanded'); + cookies.set(this.cookieName, 'expanded'); } }; @@ -111,7 +113,7 @@ export default class CraftDisclosure extends HTMLElement { } if (this.cookieName) { - tryGetCraft()?.setCookie?.(this.cookieName, 'collapsed'); + cookies.set(this.cookieName, 'collapsed'); } }; diff --git a/packages/craftcms-cp/src/components/drawer/drawer.stories.ts b/packages/craftcms-ui/src/components/drawer/drawer.stories.ts similarity index 100% rename from packages/craftcms-cp/src/components/drawer/drawer.stories.ts rename to packages/craftcms-ui/src/components/drawer/drawer.stories.ts diff --git a/packages/craftcms-cp/src/components/drawer/drawer.ts b/packages/craftcms-ui/src/components/drawer/drawer.ts similarity index 100% rename from packages/craftcms-cp/src/components/drawer/drawer.ts rename to packages/craftcms-ui/src/components/drawer/drawer.ts diff --git a/packages/craftcms-cp/src/components/dropdown/dropdown.stories.ts b/packages/craftcms-ui/src/components/dropdown/dropdown.stories.ts similarity index 100% rename from packages/craftcms-cp/src/components/dropdown/dropdown.stories.ts rename to packages/craftcms-ui/src/components/dropdown/dropdown.stories.ts diff --git a/packages/craftcms-cp/src/components/dropdown/dropdown.styles.ts b/packages/craftcms-ui/src/components/dropdown/dropdown.styles.ts similarity index 100% rename from packages/craftcms-cp/src/components/dropdown/dropdown.styles.ts rename to packages/craftcms-ui/src/components/dropdown/dropdown.styles.ts diff --git a/packages/craftcms-cp/src/components/dropdown/dropdown.ts b/packages/craftcms-ui/src/components/dropdown/dropdown.ts similarity index 100% rename from packages/craftcms-cp/src/components/dropdown/dropdown.ts rename to packages/craftcms-ui/src/components/dropdown/dropdown.ts diff --git a/packages/craftcms-cp/src/components/field-group/field-group.ts b/packages/craftcms-ui/src/components/field-group/field-group.ts similarity index 100% rename from packages/craftcms-cp/src/components/field-group/field-group.ts rename to packages/craftcms-ui/src/components/field-group/field-group.ts diff --git a/packages/craftcms-cp/src/components/icon/icon.stories.ts b/packages/craftcms-ui/src/components/icon/icon.stories.ts similarity index 100% rename from packages/craftcms-cp/src/components/icon/icon.stories.ts rename to packages/craftcms-ui/src/components/icon/icon.stories.ts diff --git a/packages/craftcms-cp/src/components/icon/icon.ts b/packages/craftcms-ui/src/components/icon/icon.ts similarity index 100% rename from packages/craftcms-cp/src/components/icon/icon.ts rename to packages/craftcms-ui/src/components/icon/icon.ts diff --git a/packages/craftcms-cp/src/components/indicator/Indicator.mdx b/packages/craftcms-ui/src/components/indicator/Indicator.mdx similarity index 100% rename from packages/craftcms-cp/src/components/indicator/Indicator.mdx rename to packages/craftcms-ui/src/components/indicator/Indicator.mdx diff --git a/packages/craftcms-cp/src/components/indicator/indicator.stories.ts b/packages/craftcms-ui/src/components/indicator/indicator.stories.ts similarity index 100% rename from packages/craftcms-cp/src/components/indicator/indicator.stories.ts rename to packages/craftcms-ui/src/components/indicator/indicator.stories.ts diff --git a/packages/craftcms-cp/src/components/indicator/indicator.ts b/packages/craftcms-ui/src/components/indicator/indicator.ts similarity index 100% rename from packages/craftcms-cp/src/components/indicator/indicator.ts rename to packages/craftcms-ui/src/components/indicator/indicator.ts diff --git a/packages/craftcms-cp/src/components/info-icon/info-icon.stories.ts b/packages/craftcms-ui/src/components/info-icon/info-icon.stories.ts similarity index 100% rename from packages/craftcms-cp/src/components/info-icon/info-icon.stories.ts rename to packages/craftcms-ui/src/components/info-icon/info-icon.stories.ts diff --git a/packages/craftcms-cp/src/components/info-icon/info-icon.ts b/packages/craftcms-ui/src/components/info-icon/info-icon.ts similarity index 100% rename from packages/craftcms-cp/src/components/info-icon/info-icon.ts rename to packages/craftcms-ui/src/components/info-icon/info-icon.ts diff --git a/packages/craftcms-cp/src/components/input-file/input-file.stories.ts b/packages/craftcms-ui/src/components/input-file/input-file.stories.ts similarity index 100% rename from packages/craftcms-cp/src/components/input-file/input-file.stories.ts rename to packages/craftcms-ui/src/components/input-file/input-file.stories.ts diff --git a/packages/craftcms-cp/src/components/input-file/input-file.styles.ts b/packages/craftcms-ui/src/components/input-file/input-file.styles.ts similarity index 100% rename from packages/craftcms-cp/src/components/input-file/input-file.styles.ts rename to packages/craftcms-ui/src/components/input-file/input-file.styles.ts diff --git a/packages/craftcms-cp/src/components/input-file/input-file.ts b/packages/craftcms-ui/src/components/input-file/input-file.ts similarity index 100% rename from packages/craftcms-cp/src/components/input-file/input-file.ts rename to packages/craftcms-ui/src/components/input-file/input-file.ts diff --git a/packages/craftcms-cp/src/components/input-file/selected-file-list.ts b/packages/craftcms-ui/src/components/input-file/selected-file-list.ts similarity index 100% rename from packages/craftcms-cp/src/components/input-file/selected-file-list.ts rename to packages/craftcms-ui/src/components/input-file/selected-file-list.ts diff --git a/packages/craftcms-cp/src/components/input-handle/input-handle.ts b/packages/craftcms-ui/src/components/input-handle/input-handle.ts similarity index 100% rename from packages/craftcms-cp/src/components/input-handle/input-handle.ts rename to packages/craftcms-ui/src/components/input-handle/input-handle.ts diff --git a/packages/craftcms-cp/src/components/input-password/input-password.stories.ts b/packages/craftcms-ui/src/components/input-password/input-password.stories.ts similarity index 100% rename from packages/craftcms-cp/src/components/input-password/input-password.stories.ts rename to packages/craftcms-ui/src/components/input-password/input-password.stories.ts diff --git a/packages/craftcms-cp/src/components/input-password/input-password.ts b/packages/craftcms-ui/src/components/input-password/input-password.ts similarity index 100% rename from packages/craftcms-cp/src/components/input-password/input-password.ts rename to packages/craftcms-ui/src/components/input-password/input-password.ts diff --git a/packages/craftcms-cp/src/components/input/input.stories.ts b/packages/craftcms-ui/src/components/input/input.stories.ts similarity index 100% rename from packages/craftcms-cp/src/components/input/input.stories.ts rename to packages/craftcms-ui/src/components/input/input.stories.ts diff --git a/packages/craftcms-cp/src/components/input/input.styles.ts b/packages/craftcms-ui/src/components/input/input.styles.ts similarity index 100% rename from packages/craftcms-cp/src/components/input/input.styles.ts rename to packages/craftcms-ui/src/components/input/input.styles.ts diff --git a/packages/craftcms-cp/src/components/input/input.ts b/packages/craftcms-ui/src/components/input/input.ts similarity index 100% rename from packages/craftcms-cp/src/components/input/input.ts rename to packages/craftcms-ui/src/components/input/input.ts diff --git a/packages/craftcms-cp/src/components/nav-item/nav-item.stories.ts b/packages/craftcms-ui/src/components/nav-item/nav-item.stories.ts similarity index 100% rename from packages/craftcms-cp/src/components/nav-item/nav-item.stories.ts rename to packages/craftcms-ui/src/components/nav-item/nav-item.stories.ts diff --git a/packages/craftcms-cp/src/components/nav-item/nav-item.styles.ts b/packages/craftcms-ui/src/components/nav-item/nav-item.styles.ts similarity index 100% rename from packages/craftcms-cp/src/components/nav-item/nav-item.styles.ts rename to packages/craftcms-ui/src/components/nav-item/nav-item.styles.ts diff --git a/packages/craftcms-cp/src/components/nav-item/nav-item.ts b/packages/craftcms-ui/src/components/nav-item/nav-item.ts similarity index 100% rename from packages/craftcms-cp/src/components/nav-item/nav-item.ts rename to packages/craftcms-ui/src/components/nav-item/nav-item.ts diff --git a/packages/craftcms-cp/src/components/nav-list/nav-list.ts b/packages/craftcms-ui/src/components/nav-list/nav-list.ts similarity index 100% rename from packages/craftcms-cp/src/components/nav-list/nav-list.ts rename to packages/craftcms-ui/src/components/nav-list/nav-list.ts diff --git a/packages/craftcms-cp/src/components/option/option.styles.ts b/packages/craftcms-ui/src/components/option/option.styles.ts similarity index 100% rename from packages/craftcms-cp/src/components/option/option.styles.ts rename to packages/craftcms-ui/src/components/option/option.styles.ts diff --git a/packages/craftcms-cp/src/components/option/option.ts b/packages/craftcms-ui/src/components/option/option.ts similarity index 100% rename from packages/craftcms-cp/src/components/option/option.ts rename to packages/craftcms-ui/src/components/option/option.ts diff --git a/packages/craftcms-cp/src/components/pane/pane.ts b/packages/craftcms-ui/src/components/pane/pane.ts similarity index 100% rename from packages/craftcms-cp/src/components/pane/pane.ts rename to packages/craftcms-ui/src/components/pane/pane.ts diff --git a/packages/craftcms-cp/src/components/popover/popover.ts b/packages/craftcms-ui/src/components/popover/popover.ts similarity index 100% rename from packages/craftcms-cp/src/components/popover/popover.ts rename to packages/craftcms-ui/src/components/popover/popover.ts diff --git a/packages/craftcms-cp/src/components/progress-bar/progress-bar.stories.ts b/packages/craftcms-ui/src/components/progress-bar/progress-bar.stories.ts similarity index 100% rename from packages/craftcms-cp/src/components/progress-bar/progress-bar.stories.ts rename to packages/craftcms-ui/src/components/progress-bar/progress-bar.stories.ts diff --git a/packages/craftcms-cp/src/components/progress-bar/progress-bar.styles.ts b/packages/craftcms-ui/src/components/progress-bar/progress-bar.styles.ts similarity index 100% rename from packages/craftcms-cp/src/components/progress-bar/progress-bar.styles.ts rename to packages/craftcms-ui/src/components/progress-bar/progress-bar.styles.ts diff --git a/packages/craftcms-cp/src/components/progress-bar/progress-bar.ts b/packages/craftcms-ui/src/components/progress-bar/progress-bar.ts similarity index 100% rename from packages/craftcms-cp/src/components/progress-bar/progress-bar.ts rename to packages/craftcms-ui/src/components/progress-bar/progress-bar.ts diff --git a/packages/craftcms-cp/src/components/progress/progress.stories.ts b/packages/craftcms-ui/src/components/progress/progress.stories.ts similarity index 100% rename from packages/craftcms-cp/src/components/progress/progress.stories.ts rename to packages/craftcms-ui/src/components/progress/progress.stories.ts diff --git a/packages/craftcms-cp/src/components/progress/progress.ts b/packages/craftcms-ui/src/components/progress/progress.ts similarity index 100% rename from packages/craftcms-cp/src/components/progress/progress.ts rename to packages/craftcms-ui/src/components/progress/progress.ts diff --git a/packages/craftcms-cp/src/components/radio-group/radio-group.ts b/packages/craftcms-ui/src/components/radio-group/radio-group.ts similarity index 100% rename from packages/craftcms-cp/src/components/radio-group/radio-group.ts rename to packages/craftcms-ui/src/components/radio-group/radio-group.ts diff --git a/packages/craftcms-cp/src/components/radio/radio.ts b/packages/craftcms-ui/src/components/radio/radio.ts similarity index 100% rename from packages/craftcms-cp/src/components/radio/radio.ts rename to packages/craftcms-ui/src/components/radio/radio.ts diff --git a/packages/craftcms-cp/src/components/select/select.stories.ts b/packages/craftcms-ui/src/components/select/select.stories.ts similarity index 100% rename from packages/craftcms-cp/src/components/select/select.stories.ts rename to packages/craftcms-ui/src/components/select/select.stories.ts diff --git a/packages/craftcms-cp/src/components/select/select.styles.ts b/packages/craftcms-ui/src/components/select/select.styles.ts similarity index 100% rename from packages/craftcms-cp/src/components/select/select.styles.ts rename to packages/craftcms-ui/src/components/select/select.styles.ts diff --git a/packages/craftcms-cp/src/components/select/select.ts b/packages/craftcms-ui/src/components/select/select.ts similarity index 100% rename from packages/craftcms-cp/src/components/select/select.ts rename to packages/craftcms-ui/src/components/select/select.ts diff --git a/packages/craftcms-cp/src/components/shortcut/shortcut.stories.ts b/packages/craftcms-ui/src/components/shortcut/shortcut.stories.ts similarity index 100% rename from packages/craftcms-cp/src/components/shortcut/shortcut.stories.ts rename to packages/craftcms-ui/src/components/shortcut/shortcut.stories.ts diff --git a/packages/craftcms-cp/src/components/shortcut/shortcut.ts b/packages/craftcms-ui/src/components/shortcut/shortcut.ts similarity index 100% rename from packages/craftcms-cp/src/components/shortcut/shortcut.ts rename to packages/craftcms-ui/src/components/shortcut/shortcut.ts diff --git a/packages/craftcms-cp/src/components/spinner/spinner.stories.ts b/packages/craftcms-ui/src/components/spinner/spinner.stories.ts similarity index 100% rename from packages/craftcms-cp/src/components/spinner/spinner.stories.ts rename to packages/craftcms-ui/src/components/spinner/spinner.stories.ts diff --git a/packages/craftcms-cp/src/components/spinner/spinner.styles.ts b/packages/craftcms-ui/src/components/spinner/spinner.styles.ts similarity index 100% rename from packages/craftcms-cp/src/components/spinner/spinner.styles.ts rename to packages/craftcms-ui/src/components/spinner/spinner.styles.ts diff --git a/packages/craftcms-cp/src/components/spinner/spinner.ts b/packages/craftcms-ui/src/components/spinner/spinner.ts similarity index 100% rename from packages/craftcms-cp/src/components/spinner/spinner.ts rename to packages/craftcms-ui/src/components/spinner/spinner.ts diff --git a/packages/craftcms-cp/src/components/status/status.stories.ts b/packages/craftcms-ui/src/components/status/status.stories.ts similarity index 100% rename from packages/craftcms-cp/src/components/status/status.stories.ts rename to packages/craftcms-ui/src/components/status/status.stories.ts diff --git a/packages/craftcms-cp/src/components/status/status.styles.ts b/packages/craftcms-ui/src/components/status/status.styles.ts similarity index 100% rename from packages/craftcms-cp/src/components/status/status.styles.ts rename to packages/craftcms-ui/src/components/status/status.styles.ts diff --git a/packages/craftcms-cp/src/components/status/status.ts b/packages/craftcms-ui/src/components/status/status.ts similarity index 100% rename from packages/craftcms-cp/src/components/status/status.ts rename to packages/craftcms-ui/src/components/status/status.ts diff --git a/packages/craftcms-cp/src/components/switch-button/switch-button.ts b/packages/craftcms-ui/src/components/switch-button/switch-button.ts similarity index 100% rename from packages/craftcms-cp/src/components/switch-button/switch-button.ts rename to packages/craftcms-ui/src/components/switch-button/switch-button.ts diff --git a/packages/craftcms-cp/src/components/switch/switch.stories.ts b/packages/craftcms-ui/src/components/switch/switch.stories.ts similarity index 100% rename from packages/craftcms-cp/src/components/switch/switch.stories.ts rename to packages/craftcms-ui/src/components/switch/switch.stories.ts diff --git a/packages/craftcms-cp/src/components/switch/switch.styles.ts b/packages/craftcms-ui/src/components/switch/switch.styles.ts similarity index 100% rename from packages/craftcms-cp/src/components/switch/switch.styles.ts rename to packages/craftcms-ui/src/components/switch/switch.styles.ts diff --git a/packages/craftcms-cp/src/components/switch/switch.ts b/packages/craftcms-ui/src/components/switch/switch.ts similarity index 100% rename from packages/craftcms-cp/src/components/switch/switch.ts rename to packages/craftcms-ui/src/components/switch/switch.ts diff --git a/packages/craftcms-cp/src/components/tab/tab.styles.ts b/packages/craftcms-ui/src/components/tab/tab.styles.ts similarity index 100% rename from packages/craftcms-cp/src/components/tab/tab.styles.ts rename to packages/craftcms-ui/src/components/tab/tab.styles.ts diff --git a/packages/craftcms-cp/src/components/tab/tab.ts b/packages/craftcms-ui/src/components/tab/tab.ts similarity index 100% rename from packages/craftcms-cp/src/components/tab/tab.ts rename to packages/craftcms-ui/src/components/tab/tab.ts diff --git a/packages/craftcms-cp/src/components/tabs/tabs.stories.ts b/packages/craftcms-ui/src/components/tabs/tabs.stories.ts similarity index 100% rename from packages/craftcms-cp/src/components/tabs/tabs.stories.ts rename to packages/craftcms-ui/src/components/tabs/tabs.stories.ts diff --git a/packages/craftcms-cp/src/components/tabs/tabs.styles.ts b/packages/craftcms-ui/src/components/tabs/tabs.styles.ts similarity index 100% rename from packages/craftcms-cp/src/components/tabs/tabs.styles.ts rename to packages/craftcms-ui/src/components/tabs/tabs.styles.ts diff --git a/packages/craftcms-cp/src/components/tabs/tabs.ts b/packages/craftcms-ui/src/components/tabs/tabs.ts similarity index 100% rename from packages/craftcms-cp/src/components/tabs/tabs.ts rename to packages/craftcms-ui/src/components/tabs/tabs.ts diff --git a/packages/craftcms-cp/src/components/textarea/textarea.stories.ts b/packages/craftcms-ui/src/components/textarea/textarea.stories.ts similarity index 100% rename from packages/craftcms-cp/src/components/textarea/textarea.stories.ts rename to packages/craftcms-ui/src/components/textarea/textarea.stories.ts diff --git a/packages/craftcms-cp/src/components/textarea/textarea.styles.ts b/packages/craftcms-ui/src/components/textarea/textarea.styles.ts similarity index 100% rename from packages/craftcms-cp/src/components/textarea/textarea.styles.ts rename to packages/craftcms-ui/src/components/textarea/textarea.styles.ts diff --git a/packages/craftcms-cp/src/components/textarea/textarea.ts b/packages/craftcms-ui/src/components/textarea/textarea.ts similarity index 100% rename from packages/craftcms-cp/src/components/textarea/textarea.ts rename to packages/craftcms-ui/src/components/textarea/textarea.ts diff --git a/packages/craftcms-cp/src/components/tooltip/Tooltip.mdx b/packages/craftcms-ui/src/components/tooltip/Tooltip.mdx similarity index 100% rename from packages/craftcms-cp/src/components/tooltip/Tooltip.mdx rename to packages/craftcms-ui/src/components/tooltip/Tooltip.mdx diff --git a/packages/craftcms-cp/src/components/tooltip/tooltip.stories.ts b/packages/craftcms-ui/src/components/tooltip/tooltip.stories.ts similarity index 100% rename from packages/craftcms-cp/src/components/tooltip/tooltip.stories.ts rename to packages/craftcms-ui/src/components/tooltip/tooltip.stories.ts diff --git a/packages/craftcms-cp/src/components/tooltip/tooltip.ts b/packages/craftcms-ui/src/components/tooltip/tooltip.ts similarity index 100% rename from packages/craftcms-cp/src/components/tooltip/tooltip.ts rename to packages/craftcms-ui/src/components/tooltip/tooltip.ts diff --git a/packages/craftcms-cp/src/components/visually-hidden/visually-hidden.ts b/packages/craftcms-ui/src/components/visually-hidden/visually-hidden.ts similarity index 100% rename from packages/craftcms-cp/src/components/visually-hidden/visually-hidden.ts rename to packages/craftcms-ui/src/components/visually-hidden/visually-hidden.ts diff --git a/packages/craftcms-cp/src/constants/appearances.ts b/packages/craftcms-ui/src/constants/appearances.ts similarity index 100% rename from packages/craftcms-cp/src/constants/appearances.ts rename to packages/craftcms-ui/src/constants/appearances.ts diff --git a/packages/craftcms-cp/src/constants/colors.ts b/packages/craftcms-ui/src/constants/colors.ts similarity index 100% rename from packages/craftcms-cp/src/constants/colors.ts rename to packages/craftcms-ui/src/constants/colors.ts diff --git a/packages/craftcms-cp/src/constants/variants.ts b/packages/craftcms-ui/src/constants/variants.ts similarity index 100% rename from packages/craftcms-cp/src/constants/variants.ts rename to packages/craftcms-ui/src/constants/variants.ts diff --git a/packages/craftcms-cp/src/index.ts b/packages/craftcms-ui/src/index.ts similarity index 87% rename from packages/craftcms-cp/src/index.ts rename to packages/craftcms-ui/src/index.ts index b445c52208f..9cff967fb18 100644 --- a/packages/craftcms-cp/src/index.ts +++ b/packages/craftcms-ui/src/index.ts @@ -5,7 +5,6 @@ import {configureIcons} from './utilities/icons'; import './types/globals.js'; import './types/events.js'; import './types/index.js'; -import './types/queue.js'; export {default as CraftDisclosure} from './components/disclosure/disclosure.js'; export {default as CraftSpinner} from './components/spinner/spinner.js'; @@ -62,31 +61,9 @@ export {default as CraftVisuallyHidden} from './components/visually-hidden/visua export * from './utilities/cookies.js'; export * from './utilities/translate.js'; export * from './utilities/format.js'; -export * from './utilities/api/actionClient.js'; -export * from './utilities/api/apiClient.js'; export * from './utilities/string.js'; export * from './utilities/dom.js'; -// Configuration -export {configure, getCraft, tryGetCraft, resetConfiguration} from './craft.js'; -export type {CraftContext} from './craft.js'; - -// Services -export {QueueService} from './services/Queue.js'; -export {AssetIndexer} from './services/AssetIndexer.js'; -export type { - IndexingSession, - IndexingResponse, - StartIndexingParams, - FinishIndexingParams, - ChangeEventData, - ErrorEventData, - MissingEntries, - IndexerEventType, - IndexerEventListener, -} from './services/AssetIndexer.js'; -export {IndexingActions} from './services/AssetIndexer.js'; - // Types export * from './types/index.js'; diff --git a/packages/craftcms-cp/src/stories/tokens/Colors.mdx b/packages/craftcms-ui/src/stories/tokens/Colors.mdx similarity index 100% rename from packages/craftcms-cp/src/stories/tokens/Colors.mdx rename to packages/craftcms-ui/src/stories/tokens/Colors.mdx diff --git a/packages/craftcms-cp/src/stories/tokens/Docs.mdx b/packages/craftcms-ui/src/stories/tokens/Docs.mdx similarity index 100% rename from packages/craftcms-cp/src/stories/tokens/Docs.mdx rename to packages/craftcms-ui/src/stories/tokens/Docs.mdx diff --git a/packages/craftcms-cp/src/stories/tokens/colorable.stories.ts b/packages/craftcms-ui/src/stories/tokens/colorable.stories.ts similarity index 100% rename from packages/craftcms-cp/src/stories/tokens/colorable.stories.ts rename to packages/craftcms-ui/src/stories/tokens/colorable.stories.ts diff --git a/packages/craftcms-cp/src/stories/tokens/colors.stories.ts b/packages/craftcms-ui/src/stories/tokens/colors.stories.ts similarity index 100% rename from packages/craftcms-cp/src/stories/tokens/colors.stories.ts rename to packages/craftcms-ui/src/stories/tokens/colors.stories.ts diff --git a/packages/craftcms-cp/src/stories/tokens/helpers.ts b/packages/craftcms-ui/src/stories/tokens/helpers.ts similarity index 100% rename from packages/craftcms-cp/src/stories/tokens/helpers.ts rename to packages/craftcms-ui/src/stories/tokens/helpers.ts diff --git a/packages/craftcms-cp/src/stories/tokens/spacing.stories.ts b/packages/craftcms-ui/src/stories/tokens/spacing.stories.ts similarity index 100% rename from packages/craftcms-cp/src/stories/tokens/spacing.stories.ts rename to packages/craftcms-ui/src/stories/tokens/spacing.stories.ts diff --git a/packages/craftcms-cp/src/stories/tokens/surface.stories.ts b/packages/craftcms-ui/src/stories/tokens/surface.stories.ts similarity index 100% rename from packages/craftcms-cp/src/stories/tokens/surface.stories.ts rename to packages/craftcms-ui/src/stories/tokens/surface.stories.ts diff --git a/packages/craftcms-cp/src/stories/tokens/text.stories.ts b/packages/craftcms-ui/src/stories/tokens/text.stories.ts similarity index 100% rename from packages/craftcms-cp/src/stories/tokens/text.stories.ts rename to packages/craftcms-ui/src/stories/tokens/text.stories.ts diff --git a/packages/craftcms-cp/src/stories/tokens/variants.stories.ts b/packages/craftcms-ui/src/stories/tokens/variants.stories.ts similarity index 100% rename from packages/craftcms-cp/src/stories/tokens/variants.stories.ts rename to packages/craftcms-ui/src/stories/tokens/variants.stories.ts diff --git a/packages/craftcms-cp/src/styles/color-definitions.js b/packages/craftcms-ui/src/styles/color-definitions.js similarity index 100% rename from packages/craftcms-cp/src/styles/color-definitions.js rename to packages/craftcms-ui/src/styles/color-definitions.js diff --git a/packages/craftcms-cp/src/styles/cp.css b/packages/craftcms-ui/src/styles/cp.css similarity index 100% rename from packages/craftcms-cp/src/styles/cp.css rename to packages/craftcms-ui/src/styles/cp.css diff --git a/packages/craftcms-cp/src/styles/form.styles.ts b/packages/craftcms-ui/src/styles/form.styles.ts similarity index 100% rename from packages/craftcms-cp/src/styles/form.styles.ts rename to packages/craftcms-ui/src/styles/form.styles.ts diff --git a/packages/craftcms-cp/src/styles/host.styles.ts b/packages/craftcms-ui/src/styles/host.styles.ts similarity index 100% rename from packages/craftcms-cp/src/styles/host.styles.ts rename to packages/craftcms-ui/src/styles/host.styles.ts diff --git a/packages/craftcms-cp/src/styles/shared/base.css b/packages/craftcms-ui/src/styles/shared/base.css similarity index 100% rename from packages/craftcms-cp/src/styles/shared/base.css rename to packages/craftcms-ui/src/styles/shared/base.css diff --git a/packages/craftcms-cp/src/styles/shared/color-palette.css b/packages/craftcms-ui/src/styles/shared/color-palette.css similarity index 100% rename from packages/craftcms-cp/src/styles/shared/color-palette.css rename to packages/craftcms-ui/src/styles/shared/color-palette.css diff --git a/packages/craftcms-cp/src/styles/shared/colorable.css b/packages/craftcms-ui/src/styles/shared/colorable.css similarity index 100% rename from packages/craftcms-cp/src/styles/shared/colorable.css rename to packages/craftcms-ui/src/styles/shared/colorable.css diff --git a/packages/craftcms-cp/src/styles/shared/preflight.css b/packages/craftcms-ui/src/styles/shared/preflight.css similarity index 100% rename from packages/craftcms-cp/src/styles/shared/preflight.css rename to packages/craftcms-ui/src/styles/shared/preflight.css diff --git a/packages/craftcms-cp/src/styles/shared/tokens.css b/packages/craftcms-ui/src/styles/shared/tokens.css similarity index 100% rename from packages/craftcms-cp/src/styles/shared/tokens.css rename to packages/craftcms-ui/src/styles/shared/tokens.css diff --git a/packages/craftcms-cp/src/styles/shared/variables.css b/packages/craftcms-ui/src/styles/shared/variables.css similarity index 100% rename from packages/craftcms-cp/src/styles/shared/variables.css rename to packages/craftcms-ui/src/styles/shared/variables.css diff --git a/packages/craftcms-cp/src/styles/variants.styles.ts b/packages/craftcms-ui/src/styles/variants.styles.ts similarity index 100% rename from packages/craftcms-cp/src/styles/variants.styles.ts rename to packages/craftcms-ui/src/styles/variants.styles.ts diff --git a/packages/craftcms-cp/src/styles/visually-hidden.styles.ts b/packages/craftcms-ui/src/styles/visually-hidden.styles.ts similarity index 100% rename from packages/craftcms-cp/src/styles/visually-hidden.styles.ts rename to packages/craftcms-ui/src/styles/visually-hidden.styles.ts diff --git a/packages/craftcms-cp/src/types/events.ts b/packages/craftcms-ui/src/types/events.ts similarity index 100% rename from packages/craftcms-cp/src/types/events.ts rename to packages/craftcms-ui/src/types/events.ts diff --git a/packages/craftcms-cp/src/types/globals.ts b/packages/craftcms-ui/src/types/globals.ts similarity index 85% rename from packages/craftcms-cp/src/types/globals.ts rename to packages/craftcms-ui/src/types/globals.ts index a204a78cedb..36031aaddde 100644 --- a/packages/craftcms-cp/src/types/globals.ts +++ b/packages/craftcms-ui/src/types/globals.ts @@ -1,5 +1,3 @@ -import {QueueService} from '@src/services/Queue'; - declare const d3: any | undefined; declare const d3FormatLocaleDefinition: any | undefined; @@ -36,8 +34,4 @@ type Site = { uid: string; }; -export interface CpServices { - $queue: QueueService; -} - export {}; diff --git a/packages/craftcms-cp/src/types/index.ts b/packages/craftcms-ui/src/types/index.ts similarity index 61% rename from packages/craftcms-cp/src/types/index.ts rename to packages/craftcms-ui/src/types/index.ts index f8866fcbcc4..9be42406667 100644 --- a/packages/craftcms-cp/src/types/index.ts +++ b/packages/craftcms-ui/src/types/index.ts @@ -1,9 +1,3 @@ -export interface DateObject { - date: string; - timezone_type: string; - timezone: string; -} - export const AsyncStates = { Idle: 'idle', Loading: 'loading', @@ -12,5 +6,3 @@ export const AsyncStates = { } as const; export type AsyncState = (typeof AsyncStates)[keyof typeof AsyncStates]; - -export * from './queue.js'; diff --git a/packages/craftcms-cp/src/utilities/cookies.test.ts b/packages/craftcms-ui/src/utilities/cookies.test.ts similarity index 100% rename from packages/craftcms-cp/src/utilities/cookies.test.ts rename to packages/craftcms-ui/src/utilities/cookies.test.ts diff --git a/packages/craftcms-cp/src/utilities/cookies.ts b/packages/craftcms-ui/src/utilities/cookies.ts similarity index 100% rename from packages/craftcms-cp/src/utilities/cookies.ts rename to packages/craftcms-ui/src/utilities/cookies.ts diff --git a/packages/craftcms-cp/src/utilities/dom.test.ts b/packages/craftcms-ui/src/utilities/dom.test.ts similarity index 100% rename from packages/craftcms-cp/src/utilities/dom.test.ts rename to packages/craftcms-ui/src/utilities/dom.test.ts diff --git a/packages/craftcms-cp/src/utilities/dom.ts b/packages/craftcms-ui/src/utilities/dom.ts similarity index 100% rename from packages/craftcms-cp/src/utilities/dom.ts rename to packages/craftcms-ui/src/utilities/dom.ts diff --git a/packages/craftcms-cp/src/utilities/escapeHtml.ts b/packages/craftcms-ui/src/utilities/escapeHtml.ts similarity index 100% rename from packages/craftcms-cp/src/utilities/escapeHtml.ts rename to packages/craftcms-ui/src/utilities/escapeHtml.ts diff --git a/packages/craftcms-cp/src/utilities/format.test.ts b/packages/craftcms-ui/src/utilities/format.test.ts similarity index 100% rename from packages/craftcms-cp/src/utilities/format.test.ts rename to packages/craftcms-ui/src/utilities/format.test.ts diff --git a/packages/craftcms-cp/src/utilities/format.ts b/packages/craftcms-ui/src/utilities/format.ts similarity index 100% rename from packages/craftcms-cp/src/utilities/format.ts rename to packages/craftcms-ui/src/utilities/format.ts diff --git a/packages/craftcms-cp/src/utilities/icons.test.ts b/packages/craftcms-ui/src/utilities/icons.test.ts similarity index 100% rename from packages/craftcms-cp/src/utilities/icons.test.ts rename to packages/craftcms-ui/src/utilities/icons.test.ts diff --git a/packages/craftcms-cp/src/utilities/icons.ts b/packages/craftcms-ui/src/utilities/icons.ts similarity index 100% rename from packages/craftcms-cp/src/utilities/icons.ts rename to packages/craftcms-ui/src/utilities/icons.ts diff --git a/packages/craftcms-cp/src/utilities/string.test.ts b/packages/craftcms-ui/src/utilities/string.test.ts similarity index 100% rename from packages/craftcms-cp/src/utilities/string.test.ts rename to packages/craftcms-ui/src/utilities/string.test.ts diff --git a/packages/craftcms-cp/src/utilities/string.ts b/packages/craftcms-ui/src/utilities/string.ts similarity index 100% rename from packages/craftcms-cp/src/utilities/string.ts rename to packages/craftcms-ui/src/utilities/string.ts diff --git a/packages/craftcms-cp/src/utilities/translate.test.ts b/packages/craftcms-ui/src/utilities/translate.test.ts similarity index 100% rename from packages/craftcms-cp/src/utilities/translate.test.ts rename to packages/craftcms-ui/src/utilities/translate.test.ts diff --git a/packages/craftcms-cp/src/utilities/translate.ts b/packages/craftcms-ui/src/utilities/translate.ts similarity index 100% rename from packages/craftcms-cp/src/utilities/translate.ts rename to packages/craftcms-ui/src/utilities/translate.ts diff --git a/packages/craftcms-cp/tailwind.css b/packages/craftcms-ui/tailwind.css similarity index 97% rename from packages/craftcms-cp/tailwind.css rename to packages/craftcms-ui/tailwind.css index fd95de39987..ca13e93c1da 100644 --- a/packages/craftcms-cp/tailwind.css +++ b/packages/craftcms-ui/tailwind.css @@ -6,8 +6,8 @@ * * Usage in your CSS entry file: * - * @import "@craftcms/cp/dist/styles/cp.css"; // loads :root token values - * @import "@craftcms/cp/tailwind.css"; // @theme inline — generate utilities + * @import "@craftcms/ui/dist/styles/cp.css"; // loads :root token values + * @import "@craftcms/ui/tailwind.css"; // @theme inline — generate utilities * @import "tailwindcss"; // Tailwind v4 engine * * The --c-* variables must already be in scope (via cp.css) for var() to diff --git a/packages/craftcms-cp/tsconfig.json b/packages/craftcms-ui/tsconfig.json similarity index 100% rename from packages/craftcms-cp/tsconfig.json rename to packages/craftcms-ui/tsconfig.json diff --git a/packages/craftcms-cp/vitest.config.ts b/packages/craftcms-ui/vitest.config.ts similarity index 86% rename from packages/craftcms-cp/vitest.config.ts rename to packages/craftcms-ui/vitest.config.ts index 4b413cdd686..8666df03cc1 100644 --- a/packages/craftcms-cp/vitest.config.ts +++ b/packages/craftcms-ui/vitest.config.ts @@ -22,16 +22,6 @@ export default defineConfig({ environment: 'happy-dom', }, }, - { - resolve: { - tsconfigPaths: true, - }, - test: { - name: 'services', - root: './src/services', - environment: 'happy-dom', - }, - }, { extends: true, plugins: [ diff --git a/packages/craftcms-cp/vitest.shims.d.ts b/packages/craftcms-ui/vitest.shims.d.ts similarity index 100% rename from packages/craftcms-cp/vitest.shims.d.ts rename to packages/craftcms-ui/vitest.shims.d.ts diff --git a/resources/css/cp.css b/resources/css/cp.css index 09d93105ac4..25a96e81db9 100644 --- a/resources/css/cp.css +++ b/resources/css/cp.css @@ -4,8 +4,8 @@ CP Styles @layer theme, base, components, cp, utilities; @import 'tailwindcss/theme.css' layer(theme); @import 'tailwindcss/utilities.css' layer(utilities); -@import '@craftcms/cp/styles/cp.css' layer(cp); -@import '@craftcms/cp/tailwind.css' layer(theme); +@import '@craftcms/ui/styles/cp.css' layer(cp); +@import '@craftcms/ui/tailwind.css' layer(theme); @import './global-sidebar.css'; diff --git a/resources/js/bootstrap/cp.ts b/resources/js/bootstrap/cp.ts index 654540582be..abfa3e29b29 100644 --- a/resources/js/bootstrap/cp.ts +++ b/resources/js/bootstrap/cp.ts @@ -1,4 +1,4 @@ -import {QueueService, configure} from '@craftcms/cp'; +import {QueueService} from '@/common/services/Queue'; import {createInertiaApp, router} from '@inertiajs/vue3'; import QueueManager from '@/modules/utilities/components/queue-manager/QueueManager.vue'; import {Axios, Queue} from '@/common/types/keys'; @@ -14,7 +14,7 @@ import ProjectConfig from '@/modules/utilities/components/project-config/Project import AssetIndexes from '@/modules/utilities/components/asset-indexes/AssetIndexes.vue'; import SystemMessages from '@/modules/utilities/components/system-messages/SystemMessages.vue'; import DeprecationErrorsToolbar from '@/modules/utilities/components/deprecation-errors/DeprecationErrorsToolbar.vue'; -import {setTranslations} from '@craftcms/cp/utilities/translate.ts.mjs'; +import {setTranslations} from '@craftcms/ui/utilities/translate.ts.mjs'; const queue = QueueService.getInstance(); let hasBooted = false; @@ -32,8 +32,6 @@ function booted(callback: (craft: any) => void) { } function init() { - configure(window.Craft); - queue.initialize({ runAutomatically: window.Craft.runQueueAutomatically ?? true, enabled: true, diff --git a/packages/craftcms-cp/src/utilities/api/actionClient.ts b/resources/js/common/api/actionClient.ts similarity index 76% rename from packages/craftcms-cp/src/utilities/api/actionClient.ts rename to resources/js/common/api/actionClient.ts index 6da2fb420ff..b0f0988abbd 100644 --- a/packages/craftcms-cp/src/utilities/api/actionClient.ts +++ b/resources/js/common/api/actionClient.ts @@ -1,29 +1,28 @@ import axios, {type RawAxiosRequestHeaders} from 'axios'; -import {Csrf} from '@src/services/Csrf'; -import {getCraft} from '@src/craft'; +import {Csrf} from '@/common/services/Csrf'; /** * Get the action URL for a given action path. */ export function getActionUrl(action: string = '') { - return getCraft().getActionUrl(action); + return window.Craft.getActionUrl(action); } /** * Get the CP URL for a given path. */ export function getCpUrl(path: string = '', params?: object) { - return getCraft().getCpUrl(path, params); + return window.Craft.getCpUrl(path, params); } export function actionHeaders(): RawAxiosRequestHeaders { - const craft = getCraft(); - let headers: Record = { 'X-Registered-Asset-Bundles': [ - ...new Set(craft.registeredAssetBundles), + ...new Set(window.Craft.registeredAssetBundles), ].join(','), - 'X-Registered-Js-Files': [...new Set(craft.registeredJsFiles)].join(','), + 'X-Registered-Js-Files': [...new Set(window.Craft.registeredJsFiles)].join( + ',' + ), }; return headers; @@ -34,10 +33,8 @@ export const actionClient = axios.create(); const csrf = new Csrf(); actionClient.interceptors.request.use(async (config) => { - const craft = getCraft(); - - // Set base URL lazily so configure() can be called after import - config.baseURL ??= craft.getActionUrl(''); + // Set base URL lazily + config.baseURL ??= window.Craft.getActionUrl(''); // Set X-Requested-With header config.headers.set('X-Requested-With', 'XMLHttpRequest'); diff --git a/packages/craftcms-cp/src/utilities/api/apiClient.ts b/resources/js/common/api/apiClient.ts similarity index 93% rename from packages/craftcms-cp/src/utilities/api/apiClient.ts rename to resources/js/common/api/apiClient.ts index 765503fbd57..f3c25b0dee1 100644 --- a/packages/craftcms-cp/src/utilities/api/apiClient.ts +++ b/resources/js/common/api/apiClient.ts @@ -3,8 +3,7 @@ import axios, { type CancelToken, type InternalAxiosRequestConfig, } from 'axios'; -import {actionClient} from './actionClient.js'; -import {getCraft} from '@src/craft'; +import {actionClient} from './actionClient'; let loadingApiHeaders = false; let apiHeaderWaitlist: Promise[] = []; @@ -109,12 +108,10 @@ apiClient.interceptors.request.use(async (config) => { }); } - const craft = getCraft(); - const finalConfig = { ...config, params: { - ...(craft.apiParams || {}), + ...(window.Craft.apiParams || {}), ...config.params, v: new Date().getTime(), }, @@ -124,8 +121,8 @@ apiClient.interceptors.request.use(async (config) => { finalConfig.params.processCraftHeaders = 1; } - if (craft.httpProxy) { - finalConfig.proxy = craft.httpProxy as AxiosProxyConfig; + if (window.Craft.httpProxy) { + finalConfig.proxy = window.Craft.httpProxy as AxiosProxyConfig; } return finalConfig; diff --git a/resources/js/common/components/ActionMenu.vue b/resources/js/common/components/ActionMenu.vue index 67e8b79ca72..f7ded082d63 100644 --- a/resources/js/common/components/ActionMenu.vue +++ b/resources/js/common/components/ActionMenu.vue @@ -1,5 +1,5 @@