chore: rename .ce.vue files to .standalone.vue (#1690)

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

- Documentation
- Updated contributor guide to use “standalone” naming for web
components.
- Refactor
- Migrated app and component references from legacy variants to
standalone components.
- Unified component registry and updated global component typings to
standalone names.
- Tests
- Updated test suites to target standalone components; no behavior
changes.

No user-facing changes.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
Eli Bosley
2025-09-10 16:36:11 -04:00
committed by GitHub
parent 88a924c84f
commit 1c73a4af42
40 changed files with 91 additions and 91 deletions

View File

@@ -4,7 +4,7 @@
For legacy compatibility, Unraid ships web components to the webgui. These components
are written as Vue and turned into web components as a build step. By convention,
Vue components that are built as top-level web components are suffixed with `*.ce.vue`
Vue components that are built as top-level web components are suffixed with `*.standalone.vue`
for "**c**ustom **e**lement", which comes from the tool used for compilation: `nuxt-custom-elements`.
Note: `nuxt-custom-elements` is currently pinned to a specific version because

View File

@@ -9,7 +9,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
import type { ComposerTranslation } from 'vue-i18n';
import WelcomeModal from '~/components/Activation/WelcomeModal.ce.vue';
import WelcomeModal from '~/components/Activation/WelcomeModal.standalone.vue';
vi.mock('@unraid/ui', async (importOriginal) => {
const actual = (await importOriginal()) as Record<string, unknown>;
@@ -76,7 +76,7 @@ vi.mock('~/store/theme', () => ({
useThemeStore: () => mockThemeStore,
}));
describe('Activation/WelcomeModal.ce.vue', () => {
describe('Activation/WelcomeModal.standalone.vue', () => {
let mockSetProperty: ReturnType<typeof vi.fn>;
let mockQuerySelector: ReturnType<typeof vi.fn>;

View File

@@ -11,7 +11,7 @@ import { beforeEach, describe, expect, it, vi } from 'vitest';
import type { ServerconnectPluginInstalled } from '~/types/server';
import Auth from '~/components/Auth.ce.vue';
import Auth from '~/components/Auth.standalone.vue';
import { useServerStore } from '~/store/server';
vi.mock('vue-i18n', () => ({

View File

@@ -12,7 +12,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
import type { MockInstance } from 'vitest';
import ColorSwitcher from '~/components/ColorSwitcher.ce.vue';
import ColorSwitcher from '~/components/ColorSwitcher.standalone.vue';
import { useThemeStore } from '~/store/theme';
// Explicitly mock @unraid/ui to ensure we use the actual components

View File

@@ -8,7 +8,7 @@ import { mount } from '@vue/test-utils';
import { createTestingPinia } from '@pinia/testing';
import { beforeEach, describe, expect, it, vi } from 'vitest';
import DowngradeOs from '~/components/DowngradeOs.ce.vue';
import DowngradeOs from '~/components/DowngradeOs.standalone.vue';
import { useServerStore } from '~/store/server';
vi.mock('crypto-js/aes', () => ({

View File

@@ -8,7 +8,7 @@ import { BrandButton } from '@unraid/ui';
import { createTestingPinia } from '@pinia/testing';
import { beforeEach, describe, expect, it, vi } from 'vitest';
import DownloadApiLogs from '~/components/DownloadApiLogs.ce.vue';
import DownloadApiLogs from '~/components/DownloadApiLogs.standalone.vue';
vi.mock('~/helpers/urls', () => ({
CONNECT_FORUMS: new URL('http://mock-forums.local'),

View File

@@ -14,7 +14,7 @@ import type { VueWrapper } from '@vue/test-utils';
import type { Error as CustomApiError } from '~/store/errors';
import type { ServerUpdateOsResponse } from '~/types/server';
import HeaderOsVersion from '~/components/HeaderOsVersion.ce.vue';
import HeaderOsVersion from '~/components/HeaderOsVersion.standalone.vue';
import { useErrorsStore } from '~/store/errors';
import { useServerStore } from '~/store/server';

View File

@@ -12,7 +12,7 @@ import type { VueWrapper } from '@vue/test-utils';
import type { ServerconnectPluginInstalled } from '~/types/server';
import type { Pinia } from 'pinia';
import Registration from '~/components/Registration.ce.vue';
import Registration from '~/components/Registration.standalone.vue';
import { usePurchaseStore } from '~/store/purchase';
import { useReplaceRenewStore } from '~/store/replaceRenew';
import { useServerStore } from '~/store/server';
@@ -116,7 +116,7 @@ vi.mock('vue-i18n', () => ({
useI18n: () => ({ t }),
}));
describe('Registration.ce.vue', () => {
describe('Registration.standalone.vue', () => {
let wrapper: VueWrapper<unknown>;
let pinia: Pinia;
let serverStore: ReturnType<typeof useServerStore>;

View File

@@ -46,14 +46,14 @@ const mockLocation = {
vi.stubGlobal('location', mockLocation);
describe('ThemeSwitcher.ce.vue', () => {
describe('ThemeSwitcher.standalone.vue', () => {
let consoleDebugSpy: MockInstance;
let consoleLogSpy: MockInstance;
let consoleErrorSpy: MockInstance;
let ThemeSwitcher: unknown;
beforeEach(async () => {
ThemeSwitcher = (await import('~/components/ThemeSwitcher.ce.vue')).default;
ThemeSwitcher = (await import('~/components/ThemeSwitcher.standalone.vue')).default;
vi.useFakeTimers();
vi.clearAllMocks();

View File

@@ -8,7 +8,7 @@ import { mount } from '@vue/test-utils';
import { createTestingPinia } from '@pinia/testing';
import { beforeEach, describe, expect, it, vi } from 'vitest';
import UpdateOs from '~/components/UpdateOs.ce.vue';
import UpdateOs from '~/components/UpdateOs.standalone.vue';
vi.mock('@unraid/ui', () => ({
PageContainer: { template: '<div><slot /></div>' },
@@ -61,7 +61,7 @@ const UpdateOsThirdPartyDriversStub = {
props: ['t'],
};
describe('UpdateOs.ce.vue', () => {
describe('UpdateOs.standalone.vue', () => {
beforeEach(() => {
vi.clearAllMocks();
mockRebootType.value = '';

View File

@@ -11,7 +11,7 @@ import type { VueWrapper } from '@vue/test-utils';
import type { Server, ServerconnectPluginInstalled, ServerState } from '~/types/server';
import type { Pinia } from 'pinia';
import UserProfile from '~/components/UserProfile.ce.vue';
import UserProfile from '~/components/UserProfile.standalone.vue';
import { useServerStore } from '~/store/server';
import { useThemeStore } from '~/store/theme';
@@ -101,7 +101,7 @@ const stubs = {
UpcDropdownTrigger: { template: '<button data-testid="dropdown-trigger"></button>' },
};
describe('UserProfile.ce.vue', () => {
describe('UserProfile.standalone.vue', () => {
let wrapper: VueWrapper<InstanceType<typeof UserProfile>>;
let pinia: Pinia;
let serverStore: ReturnType<typeof useServerStore>;

View File

@@ -93,7 +93,7 @@ const WanIpCheckStub = defineComponent({
},
});
describe('WanIpCheck.ce.vue', () => {
describe('WanIpCheck.standalone.vue', () => {
beforeEach(() => {
vi.clearAllMocks();

View File

@@ -63,7 +63,7 @@ function calculateTitle(partnerName: string | null) {
: 'Welcome to Unraid!';
}
describe('WelcomeModal.ce.vue', () => {
describe('WelcomeModal.standalone.vue', () => {
beforeEach(() => {
vi.clearAllMocks();
mockPartnerName.mockReturnValue(null);

View File

@@ -1,55 +1,55 @@
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
// Mock all the component imports
vi.mock('~/components/Auth.ce.vue', () => ({
vi.mock('~/components/Auth.standalone.vue', () => ({
default: { name: 'MockAuth', template: '<div>Auth</div>' },
}));
vi.mock('~/components/ConnectSettings/ConnectSettings.ce.vue', () => ({
vi.mock('~/components/ConnectSettings/ConnectSettings.standalone.vue', () => ({
default: { name: 'MockConnectSettings', template: '<div>ConnectSettings</div>' },
}));
vi.mock('~/components/DownloadApiLogs.ce.vue', () => ({
vi.mock('~/components/DownloadApiLogs.standalone.vue', () => ({
default: { name: 'MockDownloadApiLogs', template: '<div>DownloadApiLogs</div>' },
}));
vi.mock('~/components/HeaderOsVersion.ce.vue', () => ({
vi.mock('~/components/HeaderOsVersion.standalone.vue', () => ({
default: { name: 'MockHeaderOsVersion', template: '<div>HeaderOsVersion</div>' },
}));
vi.mock('~/components/Modals.ce.vue', () => ({
vi.mock('~/components/Modals.standalone.vue', () => ({
default: { name: 'MockModals', template: '<div>Modals</div>' },
}));
vi.mock('~/components/UserProfile.ce.vue', () => ({
vi.mock('~/components/UserProfile.standalone.vue', () => ({
default: { name: 'MockUserProfile', template: '<div>UserProfile</div>' },
}));
vi.mock('~/components/UpdateOs.ce.vue', () => ({
vi.mock('~/components/UpdateOs.standalone.vue', () => ({
default: { name: 'MockUpdateOs', template: '<div>UpdateOs</div>' },
}));
vi.mock('~/components/DowngradeOs.ce.vue', () => ({
vi.mock('~/components/DowngradeOs.standalone.vue', () => ({
default: { name: 'MockDowngradeOs', template: '<div>DowngradeOs</div>' },
}));
vi.mock('~/components/Registration.ce.vue', () => ({
vi.mock('~/components/Registration.standalone.vue', () => ({
default: { name: 'MockRegistration', template: '<div>Registration</div>' },
}));
vi.mock('~/components/WanIpCheck.ce.vue', () => ({
vi.mock('~/components/WanIpCheck.standalone.vue', () => ({
default: { name: 'MockWanIpCheck', template: '<div>WanIpCheck</div>' },
}));
vi.mock('~/components/Activation/WelcomeModal.ce.vue', () => ({
vi.mock('~/components/Activation/WelcomeModal.standalone.vue', () => ({
default: { name: 'MockWelcomeModal', template: '<div>WelcomeModal</div>' },
}));
vi.mock('~/components/SsoButton.ce.vue', () => ({
vi.mock('~/components/SsoButton.standalone.vue', () => ({
default: { name: 'MockSsoButton', template: '<div>SsoButton</div>' },
}));
vi.mock('~/components/Logs/LogViewer.ce.vue', () => ({
vi.mock('~/components/Logs/LogViewer.standalone.vue', () => ({
default: { name: 'MockLogViewer', template: '<div>LogViewer</div>' },
}));
vi.mock('~/components/ThemeSwitcher.ce.vue', () => ({
vi.mock('~/components/ThemeSwitcher.standalone.vue', () => ({
default: { name: 'MockThemeSwitcher', template: '<div>ThemeSwitcher</div>' },
}));
vi.mock('~/components/ApiKeyPage.ce.vue', () => ({
vi.mock('~/components/ApiKeyPage.standalone.vue', () => ({
default: { name: 'MockApiKeyPage', template: '<div>ApiKeyPage</div>' },
}));
vi.mock('~/components/DevModalTest.ce.vue', () => ({
vi.mock('~/components/DevModalTest.standalone.vue', () => ({
default: { name: 'MockDevModalTest', template: '<div>DevModalTest</div>' },
}));
vi.mock('~/components/ApiKeyAuthorize.ce.vue', () => ({
vi.mock('~/components/ApiKeyAuthorize.standalone.vue', () => ({
default: { name: 'MockApiKeyAuthorize', template: '<div>ApiKeyAuthorize</div>' },
}));
vi.mock('~/components/UnraidToaster.vue', () => ({

40
web/components.d.ts vendored
View File

@@ -12,17 +12,17 @@ declare module 'vue' {
ActivationPartnerLogo: typeof import('./src/components/Activation/ActivationPartnerLogo.vue')['default']
ActivationPartnerLogoImg: typeof import('./src/components/Activation/ActivationPartnerLogoImg.vue')['default']
ActivationSteps: typeof import('./src/components/Activation/ActivationSteps.vue')['default']
'ApiKeyAuthorize.ce': typeof import('./src/components/ApiKeyAuthorize.ce.vue')['default']
'ApiKeyAuthorize.standalone': typeof import('./src/components/ApiKeyAuthorize.standalone.vue')['default']
ApiKeyCreate: typeof import('./src/components/ApiKey/ApiKeyCreate.vue')['default']
ApiKeyManager: typeof import('./src/components/ApiKey/ApiKeyManager.vue')['default']
'ApiKeyPage.ce': typeof import('./src/components/ApiKeyPage.ce.vue')['default']
'Auth.ce': typeof import('./src/components/Auth.ce.vue')['default']
'ApiKeyPage.standalone': typeof import('./src/components/ApiKeyPage.standalone.vue')['default']
'Auth.standalone': typeof import('./src/components/Auth.standalone.vue')['default']
Avatar: typeof import('./src/components/Brand/Avatar.vue')['default']
Beta: typeof import('./src/components/UserProfile/Beta.vue')['default']
CallbackButton: typeof import('./src/components/UpdateOs/CallbackButton.vue')['default']
CallbackFeedback: typeof import('./src/components/UserProfile/CallbackFeedback.vue')['default']
CallbackFeedbackStatus: typeof import('./src/components/UserProfile/CallbackFeedbackStatus.vue')['default']
'CallbackHandler.ce': typeof import('./src/components/CallbackHandler.ce.vue')['default']
'CallbackHandler.standalone': typeof import('./src/components/CallbackHandler.standalone.vue')['default']
Card: typeof import('./src/components/LayoutViews/Card/Card.vue')['default']
CardGrid: typeof import('./src/components/LayoutViews/Card/CardGrid.vue')['default']
CardGroupHeader: typeof import('./src/components/LayoutViews/Card/CardGroupHeader.vue')['default']
@@ -30,20 +30,20 @@ declare module 'vue' {
CardItem: typeof import('./src/components/LayoutViews/Card/CardItem.vue')['default']
ChangelogModal: typeof import('./src/components/UpdateOs/ChangelogModal.vue')['default']
CheckUpdateResponseModal: typeof import('./src/components/UpdateOs/CheckUpdateResponseModal.vue')['default']
'ColorSwitcher.ce': typeof import('./src/components/ColorSwitcher.ce.vue')['default']
'ConnectSettings.ce': typeof import('./src/components/ConnectSettings/ConnectSettings.ce.vue')['default']
'ColorSwitcher.standalone': typeof import('./src/components/ColorSwitcher.standalone.vue')['default']
'ConnectSettings.standalone': typeof import('./src/components/ConnectSettings/ConnectSettings.standalone.vue')['default']
Console: typeof import('./src/components/Docker/Console.vue')['default']
Detail: typeof import('./src/components/LayoutViews/Detail/Detail.vue')['default']
DetailContentHeader: typeof import('./src/components/LayoutViews/Detail/DetailContentHeader.vue')['default']
DetailLeftNavigation: typeof import('./src/components/LayoutViews/Detail/DetailLeftNavigation.vue')['default']
DetailRightContent: typeof import('./src/components/LayoutViews/Detail/DetailRightContent.vue')['default']
'DetailTest.ce': typeof import('./src/components/LayoutViews/Detail/DetailTest.ce.vue')['default']
'DetailTest.standalone': typeof import('./src/components/LayoutViews/Detail/DetailTest.standalone.vue')['default']
DeveloperAuthorizationLink: typeof import('./src/components/ApiKey/DeveloperAuthorizationLink.vue')['default']
'DevModalTest.ce': typeof import('./src/components/DevModalTest.ce.vue')['default']
'DevModalTest.standalone': typeof import('./src/components/DevModalTest.standalone.vue')['default']
DevSettings: typeof import('./src/components/DevSettings.vue')['default']
Downgrade: typeof import('./src/components/UpdateOs/Downgrade.vue')['default']
'DowngradeOs.ce': typeof import('./src/components/DowngradeOs.ce.vue')['default']
'DownloadApiLogs.ce': typeof import('./src/components/DownloadApiLogs.ce.vue')['default']
'DowngradeOs.standalone': typeof import('./src/components/DowngradeOs.standalone.vue')['default']
'DownloadApiLogs.standalone': typeof import('./src/components/DownloadApiLogs.standalone.vue')['default']
DropdownConnectStatus: typeof import('./src/components/UserProfile/DropdownConnectStatus.vue')['default']
DropdownContent: typeof import('./src/components/UserProfile/DropdownContent.vue')['default']
DropdownError: typeof import('./src/components/UserProfile/DropdownError.vue')['default']
@@ -57,7 +57,7 @@ declare module 'vue' {
FileViewer: typeof import('./src/components/FileViewer.vue')['default']
FilteredLogModal: typeof import('./src/components/Logs/FilteredLogModal.vue')['default']
HeaderContent: typeof import('./src/components/Docker/HeaderContent.vue')['default']
'HeaderOsVersion.ce': typeof import('./src/components/HeaderOsVersion.ce.vue')['default']
'HeaderOsVersion.standalone': typeof import('./src/components/HeaderOsVersion.standalone.vue')['default']
IgnoredRelease: typeof import('./src/components/UpdateOs/IgnoredRelease.vue')['default']
Indicator: typeof import('./src/components/Notifications/Indicator.vue')['default']
Item: typeof import('./src/components/Notifications/Item.vue')['default']
@@ -68,11 +68,11 @@ declare module 'vue' {
LogFilterInput: typeof import('./src/components/Logs/LogFilterInput.vue')['default']
Logo: typeof import('./src/components/Brand/Logo.vue')['default']
Logs: typeof import('./src/components/Docker/Logs.vue')['default']
'LogViewer.ce': typeof import('./src/components/Logs/LogViewer.ce.vue')['default']
'LogViewer.standalone': typeof import('./src/components/Logs/LogViewer.standalone.vue')['default']
LogViewerToolbar: typeof import('./src/components/Logs/LogViewerToolbar.vue')['default']
Mark: typeof import('./src/components/Brand/Mark.vue')['default']
Modal: typeof import('./src/components/Modal.vue')['default']
'Modals.ce': typeof import('./src/components/Modals.ce.vue')['default']
'Modals.standalone': typeof import('./src/components/Modals.standalone.vue')['default']
OidcDebugButton: typeof import('./src/components/Logs/OidcDebugButton.vue')['default']
OidcDebugLogs: typeof import('./src/components/ConnectSettings/OidcDebugLogs.vue')['default']
Overview: typeof import('./src/components/Docker/Overview.vue')['default']
@@ -81,7 +81,7 @@ declare module 'vue' {
RawChangelogRenderer: typeof import('./src/components/UpdateOs/RawChangelogRenderer.vue')['default']
RCloneConfig: typeof import('./src/components/RClone/RCloneConfig.vue')['default']
RCloneOverview: typeof import('./src/components/RClone/RCloneOverview.vue')['default']
'Registration.ce': typeof import('./src/components/Registration.ce.vue')['default']
'Registration.standalone': typeof import('./src/components/Registration.standalone.vue')['default']
ReleaseNotesModal: typeof import('./src/components/ReleaseNotesModal.vue')['default']
RemoteItem: typeof import('./src/components/RClone/RemoteItem.vue')['default']
ReplaceCheck: typeof import('./src/components/Registration/ReplaceCheck.vue')['default']
@@ -93,11 +93,11 @@ declare module 'vue' {
ServerStatus: typeof import('./src/components/UserProfile/ServerStatus.vue')['default']
Sidebar: typeof import('./src/components/Notifications/Sidebar.vue')['default']
SingleLogViewer: typeof import('./src/components/Logs/SingleLogViewer.vue')['default']
'SsoButton.ce': typeof import('./src/components/SsoButton.ce.vue')['default']
'SsoButton.standalone': typeof import('./src/components/SsoButton.standalone.vue')['default']
SsoButtons: typeof import('./src/components/sso/SsoButtons.vue')['default']
SsoProviderButton: typeof import('./src/components/sso/SsoProviderButton.vue')['default']
Status: typeof import('./src/components/UpdateOs/Status.vue')['default']
'ThemeSwitcher.ce': typeof import('./src/components/ThemeSwitcher.ce.vue')['default']
'ThemeSwitcher.standalone': typeof import('./src/components/ThemeSwitcher.standalone.vue')['default']
ThirdPartyDrivers: typeof import('./src/components/UpdateOs/ThirdPartyDrivers.vue')['default']
Trial: typeof import('./src/components/UserProfile/Trial.vue')['default']
UBadge: typeof import('./../node_modules/.pnpm/@nuxt+ui@4.0.0-alpha.0_@babel+parser@7.28.3_@netlify+blobs@9.1.2_change-case@5.4.4_db0@_717626353d7e2aa0e50ed397345224b8/node_modules/@nuxt/ui/dist/runtime/components/Badge.vue')['default']
@@ -115,13 +115,13 @@ declare module 'vue' {
UpdateExpiration: typeof import('./src/components/Registration/UpdateExpiration.vue')['default']
UpdateExpirationAction: typeof import('./src/components/Registration/UpdateExpirationAction.vue')['default']
UpdateIneligible: typeof import('./src/components/UpdateOs/UpdateIneligible.vue')['default']
'UpdateOs.ce': typeof import('./src/components/UpdateOs.ce.vue')['default']
'UpdateOs.standalone': typeof import('./src/components/UpdateOs.standalone.vue')['default']
UptimeExpire: typeof import('./src/components/UserProfile/UptimeExpire.vue')['default']
USelectMenu: typeof import('./../node_modules/.pnpm/@nuxt+ui@4.0.0-alpha.0_@babel+parser@7.28.3_@netlify+blobs@9.1.2_change-case@5.4.4_db0@_717626353d7e2aa0e50ed397345224b8/node_modules/@nuxt/ui/dist/runtime/components/SelectMenu.vue')['default']
'UserProfile.ce': typeof import('./src/components/UserProfile.ce.vue')['default']
'UserProfile.standalone': typeof import('./src/components/UserProfile.standalone.vue')['default']
USwitch: typeof import('./../node_modules/.pnpm/@nuxt+ui@4.0.0-alpha.0_@babel+parser@7.28.3_@netlify+blobs@9.1.2_change-case@5.4.4_db0@_717626353d7e2aa0e50ed397345224b8/node_modules/@nuxt/ui/dist/runtime/components/Switch.vue')['default']
UTabs: typeof import('./../node_modules/.pnpm/@nuxt+ui@4.0.0-alpha.0_@babel+parser@7.28.3_@netlify+blobs@9.1.2_change-case@5.4.4_db0@_717626353d7e2aa0e50ed397345224b8/node_modules/@nuxt/ui/dist/runtime/components/Tabs.vue')['default']
'WanIpCheck.ce': typeof import('./src/components/WanIpCheck.ce.vue')['default']
'WelcomeModal.ce': typeof import('./src/components/Activation/WelcomeModal.ce.vue')['default']
'WanIpCheck.standalone': typeof import('./src/components/WanIpCheck.standalone.vue')['default']
'WelcomeModal.standalone': typeof import('./src/components/Activation/WelcomeModal.standalone.vue')['default']
}
}

View File

@@ -11,7 +11,7 @@ import { watchDebounced } from '@vueuse/core';
import { BrandButton, jsonFormsAjv, jsonFormsRenderers, Label, SettingsGrid } from '@unraid/ui';
import { JsonForms } from '@jsonforms/vue';
import Auth from '~/components/Auth.ce.vue';
import Auth from '~/components/Auth.standalone.vue';
// unified settings values are returned as JSON, so use a generic record type
// import type { ConnectSettingsValues } from '~/composables/gql/graphql';
@@ -20,7 +20,7 @@ import {
updateConnectSettings,
} from '~/components/ConnectSettings/graphql/settings.query';
import OidcDebugLogs from '~/components/ConnectSettings/OidcDebugLogs.vue';
import DownloadApiLogs from '~/components/DownloadApiLogs.ce.vue';
import DownloadApiLogs from '~/components/DownloadApiLogs.standalone.vue';
import { useServerStore } from '~/store/server';
// Disable automatic attribute inheritance

View File

@@ -9,10 +9,10 @@ import '~/assets/main.css';
// Static imports for critical components that are always present
// These are included in the main bundle for faster initial render
import HeaderOsVersionCe from '@/components/HeaderOsVersion.ce.vue';
import ModalsCe from '@/components/Modals.ce.vue';
import ThemeSwitcherCe from '@/components/ThemeSwitcher.ce.vue';
import UserProfileCe from '@/components/UserProfile.ce.vue';
import HeaderOsVersionCe from '@/components/HeaderOsVersion.standalone.vue';
import ModalsCe from '@/components/Modals.standalone.vue';
import ThemeSwitcherCe from '@/components/ThemeSwitcher.standalone.vue';
import UserProfileCe from '@/components/UserProfile.standalone.vue';
// Type for Vue component module
type VueComponentModule = { default: object } | object;
@@ -31,17 +31,17 @@ export type ComponentMapping = {
// Page-specific components use dynamic imports (lazy loaded)
export const componentMappings: ComponentMapping[] = [
{
loader: () => import('../Auth.ce.vue'),
loader: () => import('../Auth.standalone.vue'),
selector: 'unraid-auth',
appId: 'auth',
},
{
loader: () => import('../ConnectSettings/ConnectSettings.ce.vue'),
loader: () => import('../ConnectSettings/ConnectSettings.standalone.vue'),
selector: 'unraid-connect-settings',
appId: 'connect-settings',
},
{
loader: () => import('../DownloadApiLogs.ce.vue'),
loader: () => import('../DownloadApiLogs.standalone.vue'),
selector: 'unraid-download-api-logs',
appId: 'download-api-logs',
},
@@ -61,42 +61,42 @@ export const componentMappings: ComponentMapping[] = [
appId: 'user-profile',
},
{
loader: () => import('../Registration.ce.vue'),
loader: () => import('../Registration.standalone.vue'),
selector: 'unraid-registration',
appId: 'registration',
},
{
loader: () => import('../WanIpCheck.ce.vue'),
loader: () => import('../WanIpCheck.standalone.vue'),
selector: 'unraid-wan-ip-check',
appId: 'wan-ip-check',
},
{
loader: () => import('../CallbackHandler.ce.vue'),
loader: () => import('../CallbackHandler.standalone.vue'),
selector: 'unraid-callback-handler',
appId: 'callback-handler',
},
{
loader: () => import('../Logs/LogViewer.ce.vue'),
loader: () => import('../Logs/LogViewer.standalone.vue'),
selector: 'unraid-log-viewer',
appId: 'log-viewer',
},
{
loader: () => import('../SsoButton.ce.vue'),
loader: () => import('../SsoButton.standalone.vue'),
selector: 'unraid-sso-button',
appId: 'sso-button',
},
{
loader: () => import('../Activation/WelcomeModal.ce.vue'),
loader: () => import('../Activation/WelcomeModal.standalone.vue'),
selector: 'unraid-welcome-modal',
appId: 'welcome-modal',
},
{
loader: () => import('../UpdateOs.ce.vue'),
loader: () => import('../UpdateOs.standalone.vue'),
selector: 'unraid-update-os',
appId: 'update-os',
},
{
loader: () => import('../DowngradeOs.ce.vue'),
loader: () => import('../DowngradeOs.standalone.vue'),
selector: 'unraid-downgrade-os',
appId: 'downgrade-os',
},
@@ -106,22 +106,22 @@ export const componentMappings: ComponentMapping[] = [
appId: 'dev-settings',
},
{
loader: () => import('../ApiKeyPage.ce.vue'),
loader: () => import('../ApiKeyPage.standalone.vue'),
selector: ['unraid-apikey-page', 'unraid-api-key-manager'],
appId: 'apikey-page',
},
{
loader: () => import('../ApiKeyAuthorize.ce.vue'),
loader: () => import('../ApiKeyAuthorize.standalone.vue'),
selector: 'unraid-apikey-authorize',
appId: 'apikey-authorize',
},
{
loader: () => import('../DevModalTest.ce.vue'),
loader: () => import('../DevModalTest.standalone.vue'),
selector: 'unraid-dev-modal-test',
appId: 'dev-modal-test',
},
{
loader: () => import('../LayoutViews/Detail/DetailTest.ce.vue'),
loader: () => import('../LayoutViews/Detail/DetailTest.standalone.vue'),
selector: 'unraid-detail-test',
appId: 'detail-test',
},
@@ -131,7 +131,7 @@ export const componentMappings: ComponentMapping[] = [
appId: 'theme-switcher',
},
{
loader: () => import('../ColorSwitcher.ce.vue'),
loader: () => import('../ColorSwitcher.standalone.vue'),
selector: 'unraid-color-switcher',
appId: 'color-switcher',
},

View File

@@ -10,16 +10,16 @@ import AES from 'crypto-js/aes';
import type { SendPayloads } from '@unraid/shared-callbacks';
import WelcomeModalCe from '~/components/Activation/WelcomeModal.ce.vue';
import ConnectSettingsCe from '~/components/ConnectSettings/ConnectSettings.ce.vue';
import DowngradeOsCe from '~/components/DowngradeOs.ce.vue';
import HeaderOsVersionCe from '~/components/HeaderOsVersion.ce.vue';
import LogViewerCe from '~/components/Logs/LogViewer.ce.vue';
import ModalsCe from '~/components/Modals.ce.vue';
import RegistrationCe from '~/components/Registration.ce.vue';
import SsoButtonCe from '~/components/SsoButton.ce.vue';
import UpdateOsCe from '~/components/UpdateOs.ce.vue';
import UserProfileCe from '~/components/UserProfile.ce.vue';
import WelcomeModalCe from '~/components/Activation/WelcomeModal.standalone.vue';
import ConnectSettingsCe from '~/components/ConnectSettings/ConnectSettings.standalone.vue';
import DowngradeOsCe from '~/components/DowngradeOs.standalone.vue';
import HeaderOsVersionCe from '~/components/HeaderOsVersion.standalone.vue';
import LogViewerCe from '~/components/Logs/LogViewer.standalone.vue';
import ModalsCe from '~/components/Modals.standalone.vue';
import RegistrationCe from '~/components/Registration.standalone.vue';
import SsoButtonCe from '~/components/SsoButton.standalone.vue';
import UpdateOsCe from '~/components/UpdateOs.standalone.vue';
import UserProfileCe from '~/components/UserProfile.standalone.vue';
import { useThemeStore } from '~/store/theme';
const serverStore = useDummyServerStore();

View File

@@ -7,7 +7,7 @@ import { useQuery } from '@vue/apollo-composable';
import { Button, Dialog, Input } from '@unraid/ui';
import { SERVER_INFO_QUERY } from '~/pages/login.query';
import SsoButtonCe from '~/components/SsoButton.ce.vue';
import SsoButtonCe from '~/components/SsoButton.standalone.vue';
const { t } = useI18n();
const { result } = useQuery(SERVER_INFO_QUERY);

View File

@@ -1,5 +1,5 @@
<script setup lang="ts">
import ApiKeyAuthorize from '~/components/ApiKeyAuthorize.ce.vue';
import ApiKeyAuthorize from '~/components/ApiKeyAuthorize.standalone.vue';
</script>
<template>

View File

@@ -5,8 +5,8 @@ import { storeToRefs } from 'pinia';
import { useActivationCodeDataStore } from '~/components/Activation/store/activationCodeData';
import { useActivationCodeModalStore } from '~/components/Activation/store/activationCodeModal';
import { useWelcomeModalDataStore } from '~/components/Activation/store/welcomeModalData';
import WelcomeModalCe from '~/components/Activation/WelcomeModal.ce.vue';
import ModalsCe from '~/components/Modals.ce.vue';
import WelcomeModalCe from '~/components/Activation/WelcomeModal.standalone.vue';
import ModalsCe from '~/components/Modals.standalone.vue';
import { useCallbackActionsStore } from '~/store/callbackActions';
const welcomeModalRef = ref<InstanceType<typeof WelcomeModalCe>>();