@absolutejs/absolute 0.19.0-beta.999 → 0.20.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -13
- package/README.md +48 -2
- package/dist/angular/browser.js +82 -77
- package/dist/angular/browser.js.map +11 -11
- package/dist/angular/components/constants.js +43 -0
- package/dist/angular/components/core/streamingSlotRegistrar.js +1 -1
- package/dist/angular/components/core/streamingSlotRegistry.js +2 -2
- package/dist/angular/hmrPreserveCore.ts +132 -134
- package/dist/angular/index.js +1719 -844
- package/dist/angular/index.js.map +34 -26
- package/dist/angular/server.js +1620 -768
- package/dist/angular/server.js.map +28 -20
- package/dist/build.js +4935 -2593
- package/dist/build.js.map +72 -57
- package/dist/cli/config/client.js +578 -0
- package/dist/cli/config/server.js +39587 -0
- package/dist/cli/htmx/htmx.min.js +1 -0
- package/dist/cli/index.js +16828 -3511
- package/dist/client/index.js +49 -46
- package/dist/client/index.js.map +12 -12
- package/dist/core/streamingSlotRegistrar.js +1 -19
- package/dist/core/streamingSlotRegistrar.js.map +2 -2
- package/dist/core/streamingSlotRegistry.js +1 -19
- package/dist/core/streamingSlotRegistry.js.map +2 -2
- package/dist/dev/client/cssUtils.ts +98 -41
- package/dist/dev/client/domState.ts +2 -0
- package/dist/dev/client/errorOverlay.ts +14 -13
- package/dist/dev/client/handlers/angularHmrShim.ts +20 -20
- package/dist/dev/client/handlers/angularRemount.ts +74 -55
- package/dist/dev/client/handlers/angularRemountWiring.ts +1 -2
- package/dist/dev/client/handlers/html.ts +144 -41
- package/dist/dev/client/handlers/htmx.ts +43 -8
- package/dist/dev/client/handlers/react.ts +114 -32
- package/dist/dev/client/handlers/rebuild.ts +28 -8
- package/dist/dev/client/handlers/svelte.ts +92 -51
- package/dist/dev/client/handlers/vue.ts +36 -45
- package/dist/dev/client/hmrClient.ts +101 -26
- package/dist/dev/client/hmrTiming.ts +141 -0
- package/dist/dev/client/hmrToast.ts +22 -24
- package/dist/dev/client/reactRefreshSetup.ts +4 -0
- package/dist/dev/client/vendor/reactRefreshRuntime.d.ts +12 -0
- package/dist/dev/client/vendor/reactRefreshRuntime.js +313 -0
- package/dist/dev/serverBootstrap.js +45 -0
- package/dist/index.js +7153 -3224
- package/dist/index.js.map +118 -86
- package/dist/islands/browser.js +1 -19
- package/dist/islands/browser.js.map +3 -3
- package/dist/islands/index.js +709 -120
- package/dist/islands/index.js.map +18 -13
- package/dist/mobile/browser.js +428 -0
- package/dist/mobile/browser.js.map +12 -0
- package/dist/mobile/index.js +3058 -0
- package/dist/mobile/index.js.map +35 -0
- package/dist/react/browser.js +13 -62
- package/dist/react/browser.js.map +5 -6
- package/dist/react/components/browser/index.js +23 -13
- package/dist/react/components/index.js +30 -34
- package/dist/react/components/index.js.map +8 -7
- package/dist/react/hooks/index.js +1 -19
- package/dist/react/hooks/index.js.map +3 -3
- package/dist/react/index.js +1643 -679
- package/dist/react/index.js.map +29 -20
- package/dist/react/jsxDevRuntimeCompat.js +22 -20
- package/dist/react/jsxDevRuntimeCompat.js.map +5 -4
- package/dist/react/jsxRuntimeCompat.js +90 -0
- package/dist/react/jsxRuntimeCompat.js.map +10 -0
- package/dist/react/router/browser.js +77 -0
- package/dist/react/router/browser.js.map +10 -0
- package/dist/react/router/index.js +77 -0
- package/dist/react/router/index.js.map +10 -0
- package/dist/react/server.js +950 -565
- package/dist/react/server.js.map +16 -11
- package/dist/src/angular/components/constants.d.ts +21 -0
- package/dist/src/angular/hmrPreserveCore.d.ts +7 -20
- package/dist/src/angular/islands.d.ts +1 -1
- package/dist/src/angular/pageHandler.d.ts +2 -0
- package/dist/src/angular/ssrRender.d.ts +4 -1
- package/dist/src/build/bunStringRawUnicodePlugin.d.ts +12 -0
- package/dist/src/build/chainInlineSourcemaps.d.ts +1 -0
- package/dist/src/build/compileAngular.d.ts +5 -7
- package/dist/src/build/compileSvelte.d.ts +3 -0
- package/dist/src/build/compileVue.d.ts +3 -1
- package/dist/src/build/generateReactIndexes.d.ts +1 -0
- package/dist/src/build/islandRegistryTransform.d.ts +17 -0
- package/dist/src/build/maskLiterals.d.ts +28 -0
- package/dist/src/build/parseVueSpaRoutes.d.ts +5 -0
- package/dist/src/build/resolveBuildMode.d.ts +7 -0
- package/dist/src/build/serverExternals.d.ts +14 -0
- package/dist/src/build/spaSideManifests.d.ts +16 -0
- package/dist/src/build/tailwindCompiler.d.ts +0 -1
- package/dist/src/cli/add/dependencies.d.ts +13 -0
- package/dist/src/cli/config/absolute/AbsoluteConfigPanel.d.ts +6 -0
- package/dist/src/cli/config/absolute/editAbsoluteConfig.d.ts +5 -0
- package/dist/src/cli/config/absolute/resolveAbsoluteConfig.d.ts +19 -0
- package/dist/src/cli/config/auth/AuthPanel.d.ts +6 -0
- package/dist/src/cli/config/auth/authCatalog.d.ts +10 -0
- package/dist/src/cli/config/auth/authScaffolds.d.ts +16 -0
- package/dist/src/cli/config/auth/editAuthConfig.d.ts +5 -0
- package/dist/src/cli/config/auth/resolveAuthSettings.d.ts +14 -0
- package/dist/src/cli/config/auth/resolveAuthState.d.ts +2 -0
- package/dist/src/cli/config/auth/scaffoldAuthFeature.d.ts +6 -0
- package/dist/src/cli/config/client.d.ts +1 -0
- package/dist/src/cli/config/configCert.d.ts +12 -0
- package/dist/src/cli/config/eslint/EslintPanel.d.ts +6 -0
- package/dist/src/cli/config/eslint/configAst.d.ts +18 -0
- package/dist/src/cli/config/eslint/editConfigRule.d.ts +6 -0
- package/dist/src/cli/config/eslint/eslintStyles.d.ts +1 -0
- package/dist/src/cli/config/eslint/resolveConfig.d.ts +3 -0
- package/dist/src/cli/config/eslint/serializeValue.d.ts +9 -0
- package/dist/src/cli/config/guards.d.ts +4 -0
- package/dist/src/cli/config/integrations/IntegrationsPanel.d.ts +6 -0
- package/dist/src/cli/config/packageJson/PackageJsonPanel.d.ts +6 -0
- package/dist/src/cli/config/packageJson/editPackageJson.d.ts +9 -0
- package/dist/src/cli/config/packageJson/resolvePackageJson.d.ts +8 -0
- package/dist/src/cli/config/page/ConfigShell.d.ts +6 -0
- package/dist/src/cli/config/page/FieldEditor.d.ts +9 -0
- package/dist/src/cli/config/page/PanelHost.d.ts +6 -0
- package/dist/src/cli/config/page/configStyles.d.ts +1 -0
- package/dist/src/cli/config/panels.d.ts +7 -0
- package/dist/src/cli/config/prettier/PrettierPanel.d.ts +6 -0
- package/dist/src/cli/config/prettier/editPrettier.d.ts +5 -0
- package/dist/src/cli/config/prettier/resolvePrettier.d.ts +11 -0
- package/dist/src/cli/config/schema/fromJsonSchema.d.ts +3 -0
- package/dist/src/cli/config/schema/fromType.d.ts +1 -0
- package/dist/src/cli/config/schema/serialize.d.ts +1 -0
- package/dist/src/cli/config/server.d.ts +527 -0
- package/dist/src/cli/config/tsconfig/TsconfigPanel.d.ts +6 -0
- package/dist/src/cli/config/tsconfig/editTsconfig.d.ts +5 -0
- package/dist/src/cli/config/tsconfig/resolveTsconfig.d.ts +8 -0
- package/dist/src/cli/config/tsconfig/tsconfigStyles.d.ts +1 -0
- package/dist/src/cli/discoverInstances.d.ts +5 -0
- package/dist/src/cli/elysiaOpenApiTypeboxPlugin.d.ts +8 -0
- package/dist/src/cli/generate/componentTemplates.d.ts +7 -0
- package/dist/src/cli/generate/context.d.ts +30 -0
- package/dist/src/cli/generate/cssStrategy.d.ts +20 -0
- package/dist/src/cli/generate/frameworkKey.d.ts +3 -0
- package/dist/src/cli/generate/frameworks.d.ts +40 -0
- package/dist/src/cli/generate/generateApi.d.ts +3 -0
- package/dist/src/cli/generate/generateComponent.d.ts +4 -0
- package/dist/src/cli/generate/generatePage.d.ts +4 -0
- package/dist/src/cli/generate/naming.d.ts +5 -0
- package/dist/src/cli/generate/navData.d.ts +10 -0
- package/dist/src/cli/generate/outcome.d.ts +17 -0
- package/dist/src/cli/generate/pageTemplates.d.ts +11 -0
- package/dist/src/cli/generate/routeWiring.d.ts +40 -0
- package/dist/src/cli/generate/staticNav.d.ts +5 -0
- package/dist/src/cli/heapDiff.d.ts +1 -0
- package/dist/src/cli/htmx/install.d.ts +6 -0
- package/dist/src/cli/inspectData.d.ts +12 -0
- package/dist/src/cli/inspectTui.d.ts +1 -0
- package/dist/src/cli/instanceStatus.d.ts +22 -0
- package/dist/src/cli/integrations/addPlugin.d.ts +8 -0
- package/dist/src/cli/integrations/catalog.d.ts +20 -0
- package/dist/src/cli/psTui.d.ts +1 -0
- package/dist/src/cli/scripts/add.d.ts +1 -0
- package/dist/src/cli/scripts/analyze.d.ts +1 -0
- package/dist/src/cli/scripts/api.d.ts +1 -0
- package/dist/src/cli/scripts/build.d.ts +1 -1
- package/dist/src/cli/scripts/db.d.ts +20 -0
- package/dist/src/cli/scripts/dev.d.ts +5 -1
- package/dist/src/cli/scripts/doctor.d.ts +1 -0
- package/dist/src/cli/scripts/env.d.ts +7 -0
- package/dist/src/cli/scripts/eslint.d.ts +37 -2
- package/dist/src/cli/scripts/eslintChunked.d.ts +37 -0
- package/dist/src/cli/scripts/generate.d.ts +1 -0
- package/dist/src/cli/scripts/htmx.d.ts +1 -0
- package/dist/src/cli/scripts/inspect.d.ts +1 -0
- package/dist/src/cli/scripts/islands.d.ts +1 -0
- package/dist/src/cli/scripts/lintProof.d.ts +42 -0
- package/dist/src/cli/scripts/logs.d.ts +1 -0
- package/dist/src/cli/scripts/ls.d.ts +1 -0
- package/dist/src/cli/scripts/mem.d.ts +1 -0
- package/dist/src/cli/scripts/mobile.d.ts +1 -0
- package/dist/src/cli/scripts/prettier.d.ts +2 -0
- package/dist/src/cli/scripts/ps.d.ts +1 -0
- package/dist/src/cli/scripts/remove.d.ts +1 -0
- package/dist/src/cli/scripts/routes.d.ts +1 -0
- package/dist/src/cli/scripts/start.d.ts +6 -1
- package/dist/src/cli/scripts/tunnelRelay.d.ts +9 -0
- package/dist/src/cli/scripts/workspace.d.ts +3 -1
- package/dist/src/cli/serverBundleExternals.d.ts +2 -0
- package/dist/src/cli/tuiPrimitives.d.ts +14 -0
- package/dist/src/cli/typeGraphCoherence.d.ts +32 -0
- package/dist/src/cli/utils.d.ts +3 -1
- package/dist/src/cli/workspaceTui.d.ts +2 -1
- package/dist/src/client/hydrators/react.d.ts +1 -1
- package/dist/src/client/hydrators/svelte.d.ts +1 -1
- package/dist/src/client/hydrators/vue.d.ts +1 -1
- package/dist/src/client/islandStore.d.ts +3 -3
- package/dist/src/client/preserveIslandMarkup.d.ts +4 -1
- package/dist/src/constants.d.ts +21 -0
- package/dist/src/core/angularServerModule.d.ts +1 -0
- package/dist/src/core/build.d.ts +11 -3
- package/dist/src/core/devRouteRegistrationCallsite.d.ts +1 -5
- package/dist/src/core/index.d.ts +1 -0
- package/dist/src/core/pageResponseCache.d.ts +23 -0
- package/dist/src/core/prepare.d.ts +192 -154
- package/dist/src/core/requestContext.d.ts +18 -0
- package/dist/src/dev/angular/fastHmrCompiler.d.ts +5 -3
- package/dist/src/dev/angular/hmrCompiler.d.ts +1 -1
- package/dist/src/dev/angular/resolveOwningComponents.d.ts +1 -1
- package/dist/src/dev/clientManager.d.ts +10 -1
- package/dist/src/dev/configResolver.d.ts +2 -0
- package/dist/src/dev/moduleMapper.d.ts +1 -1
- package/dist/src/dev/moduleServer.d.ts +2 -1
- package/dist/src/dev/pathUtils.d.ts +1 -1
- package/dist/src/dev/reactComponentClassifier.d.ts +1 -1
- package/dist/src/dev/rebuildTrigger.d.ts +4 -0
- package/dist/src/dev/requestInspector.d.ts +31 -0
- package/dist/src/dev/serverBootstrap.d.ts +1 -0
- package/dist/src/dev/serverEntryWatcher.d.ts +3 -3
- package/dist/src/dev/tunnel/client.d.ts +20 -0
- package/dist/src/dev/tunnel/protocol.d.ts +85 -0
- package/dist/src/dev/tunnel/relay.d.ts +28 -0
- package/dist/src/dev/webSocket.d.ts +1 -1
- package/dist/src/mobile/androidConformance.d.ts +42 -0
- package/dist/src/mobile/androidEmulatorController.d.ts +99 -0
- package/dist/src/mobile/androidNativeWatcher.d.ts +19 -0
- package/dist/src/mobile/androidRelease.d.ts +47 -0
- package/dist/src/mobile/androidWebView.d.ts +46 -0
- package/dist/src/mobile/artifactStore.d.ts +47 -0
- package/dist/src/mobile/associationFiles.d.ts +49 -0
- package/dist/src/mobile/browser.d.ts +2 -0
- package/dist/src/mobile/buildMetadata.d.ts +10 -0
- package/dist/src/mobile/buildPipeline.d.ts +8 -0
- package/dist/src/mobile/buildRelease.d.ts +24 -0
- package/dist/src/mobile/capacitorBundle.d.ts +28 -0
- package/dist/src/mobile/capacitorProject.d.ts +9 -0
- package/dist/src/mobile/client.d.ts +35 -0
- package/dist/src/mobile/compatibilityDispatcher.d.ts +26 -0
- package/dist/src/mobile/config.d.ts +16 -0
- package/dist/src/mobile/emulatorDoctor.d.ts +25 -0
- package/dist/src/mobile/emulatorInstaller.d.ts +41 -0
- package/dist/src/mobile/index.d.ts +19 -0
- package/dist/src/mobile/materializedBundle.d.ts +36 -0
- package/dist/src/mobile/nativeDeepLinks.d.ts +5 -0
- package/dist/src/mobile/pageProtocol.d.ts +89 -0
- package/dist/src/mobile/producerContext.d.ts +4 -0
- package/dist/src/mobile/producerContextState.d.ts +10 -0
- package/dist/src/mobile/releaseArtifact.d.ts +75 -0
- package/dist/src/mobile/releaseDoctor.d.ts +13 -0
- package/dist/src/mobile/routeMatcher.d.ts +3 -0
- package/dist/src/mobile/routeMetadataTransform.d.ts +13 -0
- package/dist/src/mobile/shellBootstrap.d.ts +1 -0
- package/dist/src/mobile/transport.d.ts +31 -0
- package/dist/src/plugins/devtoolsJson.d.ts +6 -47
- package/dist/src/plugins/hmr.d.ts +22 -96
- package/dist/src/plugins/imageOptimizer.d.ts +150 -62
- package/dist/src/plugins/networking.d.ts +2 -2
- package/dist/src/plugins/openApiPlugin.d.ts +4 -0
- package/dist/src/plugins/telemetryPlugin.d.ts +36 -0
- package/dist/src/react/browser.d.ts +0 -2
- package/dist/src/react/hooks/useMediaQuery.d.ts +1 -1
- package/dist/src/react/index.d.ts +0 -2
- package/dist/src/react/jsxDevRuntimeCompat.d.ts +1 -1
- package/dist/src/react/jsxRuntimeCompat.d.ts +7 -0
- package/dist/src/react/pageHandler.d.ts +8 -0
- package/dist/src/react/router/UniversalRouter.d.ts +43 -0
- package/dist/src/react/router/browser.d.ts +2 -0
- package/dist/src/react/router/index.d.ts +2 -0
- package/dist/src/svelte/pageHandler.d.ts +5 -0
- package/dist/src/svelte/router/hashMode.d.ts +1 -6
- package/dist/src/svelte/router/matchPath.d.ts +4 -24
- package/dist/src/svelte/router/page.svelte.d.ts +1 -10
- package/dist/src/svelte/router/prefetchCache.d.ts +2 -6
- package/dist/src/utils/cleanup.d.ts +1 -0
- package/dist/src/utils/defineConvention.d.ts +2 -2
- package/dist/src/utils/defineEnv.d.ts +4 -4
- package/dist/src/utils/formatBytes.d.ts +2 -0
- package/dist/src/utils/generatedDir.d.ts +1 -1
- package/dist/src/utils/iconVersion.d.ts +5 -0
- package/dist/src/utils/imageProcessing.d.ts +1 -1
- package/dist/src/utils/index.d.ts +2 -0
- package/dist/src/utils/inlinePageCss.d.ts +9 -0
- package/dist/src/utils/instanceRegistry.d.ts +13 -0
- package/dist/src/utils/isTestSourcePath.d.ts +1 -0
- package/dist/src/utils/jsonLd.d.ts +1 -1
- package/dist/src/utils/loadConfig.d.ts +11 -3
- package/dist/src/utils/logger.d.ts +2 -0
- package/dist/src/utils/portScan.d.ts +22 -0
- package/dist/src/utils/projectRoot.d.ts +17 -0
- package/dist/src/utils/resolveConvention.d.ts +1 -1
- package/dist/src/utils/resolveDevPort.d.ts +4 -1
- package/dist/src/utils/runtimeMode.d.ts +1 -1
- package/dist/src/utils/spaRouteCss.d.ts +10 -0
- package/dist/src/utils/spaRouteManifest.d.ts +8 -0
- package/dist/src/utils/stripStringsAndComments.d.ts +18 -0
- package/dist/src/utils/userAgentFunctions.d.ts +1 -1
- package/dist/src/utils/vueCompiler.d.ts +1 -0
- package/dist/src/vue/components/Image.d.ts +2 -2
- package/dist/src/vue/defineVuePage.d.ts +1 -11
- package/dist/src/vue/index.d.ts +3 -0
- package/dist/src/vue/pageHandler.d.ts +5 -0
- package/dist/src/vue/resolveGeneratedVueModulePath.d.ts +1 -0
- package/dist/src/vue/teleports.d.ts +2 -0
- package/dist/src/vue/useResource.d.ts +65 -0
- package/dist/svelte/browser.js +1 -19
- package/dist/svelte/browser.js.map +3 -3
- package/dist/svelte/components/Head.svelte +7 -1
- package/dist/svelte/index.js +1281 -543
- package/dist/svelte/index.js.map +27 -19
- package/dist/svelte/router/Link.svelte.d.ts +3 -3
- package/dist/svelte/router/Route.svelte.d.ts +5 -5
- package/dist/svelte/router/Router.svelte.d.ts +3 -3
- package/dist/svelte/router/hashMode.ts +6 -12
- package/dist/svelte/router/matchPath.ts +44 -61
- package/dist/svelte/router/page.d.ts +1 -10
- package/dist/svelte/router/page.js +6 -6
- package/dist/svelte/router/prefetchCache.ts +21 -23
- package/dist/svelte/router/viewTransitions.ts +22 -12
- package/dist/svelte/server.js +697 -565
- package/dist/svelte/server.js.map +14 -11
- package/dist/types/absoluteConfig.d.ts +22 -0
- package/dist/types/angular.d.ts +4 -1
- package/dist/types/authPanel.d.ts +62 -0
- package/dist/types/build.d.ts +116 -0
- package/dist/types/cli.d.ts +57 -0
- package/dist/types/config.d.ts +52 -0
- package/dist/types/eslintConfig.d.ts +68 -0
- package/dist/types/globals.d.ts +31 -10
- package/dist/types/image.d.ts +2 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/integrationsPanel.d.ts +29 -0
- package/dist/types/messages.d.ts +12 -0
- package/dist/types/packageJson.d.ts +74 -0
- package/dist/types/packageJsonPanel.d.ts +29 -0
- package/dist/types/prettier.d.ts +26 -0
- package/dist/types/tsconfig.d.ts +31 -0
- package/dist/types/vue.d.ts +13 -15
- package/dist/vue/browser.js +14 -36
- package/dist/vue/browser.js.map +5 -5
- package/dist/vue/components/Image.js +3 -20
- package/dist/vue/components/Image.js.map +3 -3
- package/dist/vue/components/index.js +3 -20
- package/dist/vue/components/index.js.map +3 -3
- package/dist/vue/index.js +1573 -620
- package/dist/vue/index.js.map +34 -22
- package/dist/vue/server.js +800 -520
- package/dist/vue/server.js.map +17 -11
- package/package.json +145 -68
- package/dist/src/react/UniversalRouter.d.ts +0 -12
|
@@ -4,6 +4,7 @@ export declare const ANSI_ESCAPE_LENGTH = 3;
|
|
|
4
4
|
export declare const ASCII_SPACE = 32;
|
|
5
5
|
export declare const BASE_36_RADIX = 36;
|
|
6
6
|
export declare const BUN_BUILD_WARNING_SUPPRESSION = "wildcard sideEffects are not supported yet";
|
|
7
|
+
export declare const TAILWIND_BUN_CSS_WARNING_PATTERN: RegExp;
|
|
7
8
|
export declare const BODY_SLICE_LENGTH = 2000;
|
|
8
9
|
export declare const BYTES_PER_KILOBYTE = 1024;
|
|
9
10
|
export declare const CLI_ARGS_OFFSET = 3;
|
|
@@ -20,6 +21,10 @@ export declare const FILE_PROTOCOL_PREFIX_LENGTH = 7;
|
|
|
20
21
|
export declare const FOCUS_ID_PREFIX_LENGTH = 3;
|
|
21
22
|
export declare const FOCUS_IDX_PREFIX_LENGTH = 4;
|
|
22
23
|
export declare const FOCUS_NAME_PREFIX_LENGTH = 5;
|
|
24
|
+
export declare const ESLINT_STUDIO_DEFAULT_HOST = "eslint.absolute.localhost";
|
|
25
|
+
export declare const ESLINT_STUDIO_DEFAULT_PORT = 4099;
|
|
26
|
+
export declare const CONFIG_DEFAULT_HOST = "config.absolute.localhost";
|
|
27
|
+
export declare const CONFIG_DEFAULT_PORT = 4099;
|
|
23
28
|
export declare const HMR_UPDATE_TIMEOUT_MS = 2000;
|
|
24
29
|
export declare const HOOK_SIGNATURE_LENGTH = 12;
|
|
25
30
|
export declare const EXCLUDE_LAST_OFFSET = -1;
|
|
@@ -32,6 +37,7 @@ export declare const IMAGE_DEFAULT_DEVICE_SIZES: number[];
|
|
|
32
37
|
export declare const IMAGE_DEFAULT_IMAGE_SIZES: number[];
|
|
33
38
|
export declare const IMAGE_DEFAULT_QUALITY = 75;
|
|
34
39
|
export declare const IMAGE_GLOB_SUFFIX_LENGTH = 2;
|
|
40
|
+
export declare const INSTANCE_PROBE_TIMEOUT_MS = 250;
|
|
35
41
|
export declare const MAX_ERROR_LENGTH = 200;
|
|
36
42
|
export declare const MAX_RECONNECT_ATTEMPTS = 60;
|
|
37
43
|
export declare const MILLISECONDS_IN_A_SECOND = 1000;
|
|
@@ -41,6 +47,18 @@ export declare const MILLISECONDS_IN_A_MINUTE: number;
|
|
|
41
47
|
export declare const MILLISECONDS_IN_A_DAY: number;
|
|
42
48
|
export declare const OVERLAY_FADE_DURATION_MS = 150;
|
|
43
49
|
export declare const PING_INTERVAL_MS = 30000;
|
|
50
|
+
export declare const LIST_LOG_TAIL_MAX_BYTES = 65536;
|
|
51
|
+
export declare const LIST_TUI_COLUMN_GAP = 2;
|
|
52
|
+
export declare const LIST_TUI_DEFAULT_HEIGHT = 28;
|
|
53
|
+
export declare const LIST_TUI_DEFAULT_WIDTH = 100;
|
|
54
|
+
export declare const LIST_TUI_ESCAPE_SEQUENCE_TIMEOUT_MS = 30;
|
|
55
|
+
export declare const LIST_TUI_FOOTER_LINE_COUNT = 2;
|
|
56
|
+
export declare const LIST_TUI_MARKER_WIDTH = 2;
|
|
57
|
+
export declare const LIST_TUI_MIN_LOG_HEIGHT = 3;
|
|
58
|
+
export declare const LIST_TUI_MIN_URL_WIDTH = 16;
|
|
59
|
+
export declare const LIST_TUI_RENDER_DEBOUNCE_MS = 16;
|
|
60
|
+
export declare const LIST_TUI_STATUS_MESSAGE_TIMEOUT_MS = 4000;
|
|
61
|
+
export declare const LIST_WATCH_REFRESH_MS = 1000;
|
|
44
62
|
export declare const RAF_BATCH_COUNT = 3;
|
|
45
63
|
export declare const RANDOM_ID_END_INDEX = 11;
|
|
46
64
|
export declare const REBUILD_BATCH_DELAY_MS = 10;
|
|
@@ -56,6 +74,9 @@ export declare const TIME_PRECISION = 2;
|
|
|
56
74
|
export declare const TWO_THIRDS: number;
|
|
57
75
|
export declare const UNFOUND_INDEX = -1;
|
|
58
76
|
export declare const WEBSOCKET_NORMAL_CLOSURE = 1000;
|
|
77
|
+
export declare const DEFAULT_WEBSOCKET_IDLE_TIMEOUT_SECONDS = 240;
|
|
78
|
+
export declare const DEFAULT_HTTP_IDLE_TIMEOUT_SECONDS = 240;
|
|
79
|
+
export declare const MAX_HTTP_IDLE_TIMEOUT_SECONDS = 255;
|
|
59
80
|
export declare const WORKSPACE_COMMAND_ARGS_OFFSET = 3;
|
|
60
81
|
export declare const WORKSPACE_FAILURE_LOG_PRINT_LIMIT = 30;
|
|
61
82
|
export declare const WORKSPACE_FAILURE_RECENT_LOG_LIMIT = 60;
|
|
@@ -8,27 +8,14 @@ export type RebootStats = {
|
|
|
8
8
|
captured: number;
|
|
9
9
|
restoredKeys: Set<string>;
|
|
10
10
|
};
|
|
11
|
-
export declare const
|
|
12
|
-
export declare const
|
|
13
|
-
export declare const
|
|
14
|
-
export declare const
|
|
11
|
+
export declare const buildCacheKey: (instance: object, key?: unknown) => string | null;
|
|
12
|
+
export declare const captureTrackedInstanceStates: () => void;
|
|
13
|
+
export declare const endHmrReboot: () => void;
|
|
14
|
+
export declare const getCache: () => Map<any, any>;
|
|
15
|
+
export declare const getKeyMap: () => WeakMap<WeakKey, any>;
|
|
15
16
|
export declare const getRebootFlag: () => RebootFlag;
|
|
16
17
|
export declare const getRebootStats: () => RebootStats;
|
|
18
|
+
export declare const getTracker: () => Set<any>;
|
|
19
|
+
export declare const isHmrPreserveDev: () => boolean;
|
|
17
20
|
export declare const isPreservable: (value: unknown, depth?: number) => boolean;
|
|
18
|
-
export declare const buildCacheKey: (instance: object, key?: unknown) => string | null;
|
|
19
|
-
/** Copy preservable own properties from the cached snapshot onto the
|
|
20
|
-
* instance. Records the restoration in stats so the end-of-reboot
|
|
21
|
-
* summary can list which classes had state restored. Returns whether
|
|
22
|
-
* anything was actually written. */
|
|
23
21
|
export declare const restoreFromCacheCore: (instance: object, key: string) => boolean;
|
|
24
|
-
/** Snapshot every tracked instance's preservable own properties into
|
|
25
|
-
* the shared cache and flip the reboot-in-progress flag on. Called by
|
|
26
|
-
* the dev-client HMR handler right before `destroyAngularApp()`. */
|
|
27
|
-
export declare const captureTrackedInstanceStates: () => void;
|
|
28
|
-
/** Clear the active-reboot flag and emit a one-line summary so
|
|
29
|
-
* developers can see at-a-glance which classes had state preserved.
|
|
30
|
-
* Called by the dev-client HMR handler after the new app has reported
|
|
31
|
-
* stable. After this, `preserveAcrossHmr` calls track but don't
|
|
32
|
-
* restore — so navigating to a route after HMR doesn't resurrect
|
|
33
|
-
* stale state from the last reboot. */
|
|
34
|
-
export declare const endHmrReboot: () => void;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const isAngularComponent: (value: unknown) => value is import("@angular/core").Type<object>;
|
|
2
1
|
export declare const getAngularIslandSelector: (_islandId: string) => string;
|
|
2
|
+
export declare const isAngularComponent: (value: unknown) => value is import("@angular/core").Type<object>;
|
|
3
3
|
export declare const mountAngularIsland: <Props extends Record<string, unknown>>(component: import("@angular/core").Type<object>, element: HTMLElement, props: Props, islandId: string) => Promise<import("@angular/core").ApplicationRef>;
|
|
4
4
|
export declare const renderAngularIslandToHtml: <Props extends Record<string, unknown>>(component: import("@angular/core").Type<object>, props: Props, islandId: string) => Promise<string>;
|
|
@@ -44,5 +44,7 @@ export type AngularPageRequestInput<Ctx = unknown> = AngularPageRenderOptions &
|
|
|
44
44
|
} : {
|
|
45
45
|
requestContext: NoInfer<Ctx>;
|
|
46
46
|
});
|
|
47
|
+
export declare const resolveAngularSsrOutDir: (projectRoot?: string, configuredOutDir?: string | undefined) => string;
|
|
48
|
+
export declare const ensureAngularSsrNodeModules: (outDir: string, projectRoot?: string, hasConfiguredOutDir?: boolean) => Promise<void>;
|
|
47
49
|
export declare const handleAngularPageRequest: <Page = unknown>(input: AngularPageRequestInput<Page>) => Promise<Response>;
|
|
48
50
|
export {};
|
|
@@ -2,7 +2,10 @@ import type { EnvironmentProviders, Provider, Type } from '@angular/core';
|
|
|
2
2
|
import type { AngularDeps, CachedRouteData } from '../../types/angular';
|
|
3
3
|
export declare const cacheRouteData: (pagePath: string, data: CachedRouteData) => void;
|
|
4
4
|
export declare const getCachedRouteData: (pagePath: string) => CachedRouteData | undefined;
|
|
5
|
-
export declare const buildProviders: (deps: AngularDeps, sanitizer: InstanceType<AngularDeps["DomSanitizer"]>, request: Request | undefined, requestContext: unknown, responseInit: ResponseInit | undefined, userProviders?: ReadonlyArray<Provider | EnvironmentProviders>) => (
|
|
5
|
+
export declare const buildProviders: (deps: AngularDeps, sanitizer: InstanceType<AngularDeps["DomSanitizer"]>, request: Request | undefined, requestContext: unknown, responseInit: ResponseInit | undefined, userProviders?: ReadonlyArray<Provider | EnvironmentProviders>) => ({
|
|
6
|
+
provide: import("@angular/core").InjectionToken<unknown>;
|
|
7
|
+
useValue: {} | null;
|
|
8
|
+
} | Provider | EnvironmentProviders)[];
|
|
6
9
|
export declare const clearSelectorCache: () => void;
|
|
7
10
|
export declare const resolveSelector: (deps: AngularDeps, pagePath: string, PageComponent: Type<unknown>) => string;
|
|
8
11
|
export declare const injectSsrScripts: (html: string, requestId: string, indexPath: string, requestContext?: unknown) => string;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { BunPlugin } from 'bun';
|
|
2
|
+
/**
|
|
3
|
+
* Work around oven-sh/bun#16763. With target "bun", Bun escapes non-ASCII
|
|
4
|
+
* characters inside tagged templates. String.raw then observes the generated
|
|
5
|
+
* escape text instead of the character that was present in source.
|
|
6
|
+
*
|
|
7
|
+
* `String.raw` is specified in terms of a first argument with a `raw` array,
|
|
8
|
+
* so spelling the same operation as a normal call avoids the faulty tagged
|
|
9
|
+
* template transform without changing backslashes or substitutions.
|
|
10
|
+
*/
|
|
11
|
+
export declare const rewriteBunStringRawUnicode: (source: string, filePath?: string) => string;
|
|
12
|
+
export declare const createBunStringRawUnicodePlugin: () => BunPlugin;
|
|
@@ -10,4 +10,5 @@ export declare const inlineLineMapComment: (sourcePath: string, sourceContent: s
|
|
|
10
10
|
export declare const remapGeneratedLines: (mappings: string, lineRemap: number[]) => string;
|
|
11
11
|
export declare const chainSourcemap: (outer: SourceMap, fetchInner: (sourcePath: string) => SourceMap | null) => SourceMap;
|
|
12
12
|
export declare const chainBundleInlineSourcemap: (bundleFilePath: string) => void;
|
|
13
|
+
export declare const chainExternalSourcemap: (mapFilePath: string) => void;
|
|
13
14
|
export {};
|
|
@@ -2,11 +2,6 @@ import type { StylePreprocessorConfig } from '../../types/build';
|
|
|
2
2
|
export declare const compileAngularFiles: (inputPaths: string[], outDir: string, stylePreprocessors?: StylePreprocessorConfig) => Promise<string[]>;
|
|
3
3
|
export declare const compileAngularFile: (inputPath: string, outDir: string, stylePreprocessors?: StylePreprocessorConfig) => Promise<string[]>;
|
|
4
4
|
export declare const invalidateAngularJitCache: (filePath: string) => void;
|
|
5
|
-
/** Angular HMR Runtime Layer (Level 3) — JIT-mode compilation for dev/HMR builds.
|
|
6
|
-
* Uses ts.transpileModule() instead of Angular AOT performCompilation().
|
|
7
|
-
* Inlines templateUrl → template and styleUrls → styles from disk.
|
|
8
|
-
* Recursively transpiles all local imports so Bun's bundler can resolve them.
|
|
9
|
-
* ~50-100ms for a tree of ~10 files vs ~500-700ms for AOT. */
|
|
10
5
|
export declare const compileAngularFileJIT: (inputPath: string, outDir: string, rootDir?: string, stylePreprocessors?: StylePreprocessorConfig, cacheBuster?: string) => Promise<string[]>;
|
|
11
6
|
/** Build-time providers info threaded down from `runAngularHandlerScan`.
|
|
12
7
|
* When present, `compileAngular` injects an `export const providers = [...]`
|
|
@@ -18,8 +13,11 @@ export declare const compileAngularFileJIT: (inputPath: string, outDir: string,
|
|
|
18
13
|
* `.providers.ts` — circular; `provideRouter(undefined, ...)` then
|
|
19
14
|
* throws NG04014 at SSR bootstrap). */
|
|
20
15
|
export type AngularProvidersInjection = {
|
|
21
|
-
/** Source `.ts` path of the user's `angular.providers` binding
|
|
22
|
-
|
|
16
|
+
/** Source `.ts` path of the user's `angular.providers` binding, or null
|
|
17
|
+
* when no global binding is configured. Router pages still get
|
|
18
|
+
* `provideRouter(routes)` + `APP_BASE_HREF` injected without it — the
|
|
19
|
+
* global `appProviders` spread is simply omitted. */
|
|
20
|
+
appProvidersSource: string | null;
|
|
23
21
|
/** Source `.ts` path → page metadata for every page the scanner saw. */
|
|
24
22
|
pagesByFile: Map<string, {
|
|
25
23
|
hasRoutes: boolean;
|
|
@@ -3,6 +3,9 @@ type Built = {
|
|
|
3
3
|
ssr: string;
|
|
4
4
|
client: string;
|
|
5
5
|
hasAwaitSlot: boolean;
|
|
6
|
+
/** `.svelte.ts`/`.svelte.js` runes module (compileModule output) — has no
|
|
7
|
+
* component default export, so it must never get a hydration index. */
|
|
8
|
+
isModule: boolean;
|
|
6
9
|
};
|
|
7
10
|
type Cache = Map<string, Built>;
|
|
8
11
|
export declare const clearSvelteCompilerCache: () => void;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { SFCDescriptor } from '@vue/compiler-sfc';
|
|
2
|
+
import { type ParsedVueSpaRoute } from './parseVueSpaRoutes';
|
|
2
3
|
import type { StylePreprocessorConfig } from '../../types/build';
|
|
3
4
|
export type VueChangeType = 'style-only' | 'template-only' | 'script' | 'full';
|
|
4
5
|
export declare const vueHmrMetadata: Map<string, {
|
|
@@ -6,7 +7,7 @@ export declare const vueHmrMetadata: Map<string, {
|
|
|
6
7
|
changeType: VueChangeType;
|
|
7
8
|
}>;
|
|
8
9
|
export declare const clearVueHmrCaches: () => void;
|
|
9
|
-
export declare const detectVueChangeType: (filePath: string, descriptor: SFCDescriptor) => "script" | "
|
|
10
|
+
export declare const detectVueChangeType: (filePath: string, descriptor: SFCDescriptor) => "script" | "style-only" | "template-only" | "full";
|
|
10
11
|
export declare const generateVueHmrId: (sourceFilePath: string, vueRootDir: string) => string;
|
|
11
12
|
export declare const compileVue: (entryPoints: string[], vueRootDir: string, isDev?: boolean, stylePreprocessors?: StylePreprocessorConfig, ssrOnlyEntries?: ReadonlySet<string>) => Promise<{
|
|
12
13
|
hmrMetadata: Map<string, {
|
|
@@ -17,4 +18,5 @@ export declare const compileVue: (entryPoints: string[], vueRootDir: string, isD
|
|
|
17
18
|
vueCssPaths: string[];
|
|
18
19
|
vueIndexPaths: string[];
|
|
19
20
|
vueServerPaths: string[];
|
|
21
|
+
vueSpaRoutesBySource: Map<string, ParsedVueSpaRoute[]>;
|
|
20
22
|
}>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { BunPlugin } from 'bun';
|
|
2
|
+
import type { IslandFramework } from '../../types/island';
|
|
3
|
+
type IslandDefinitionLite = {
|
|
4
|
+
buildReference: {
|
|
5
|
+
export?: string;
|
|
6
|
+
source: string;
|
|
7
|
+
} | null;
|
|
8
|
+
component: string;
|
|
9
|
+
framework: IslandFramework;
|
|
10
|
+
};
|
|
11
|
+
export type IslandRegistryTransformInfo = {
|
|
12
|
+
definitions: IslandDefinitionLite[];
|
|
13
|
+
resolvedRegistryPath: string;
|
|
14
|
+
};
|
|
15
|
+
export declare const transformIslandRegistrySource: (source: string, filePath: string, info: IslandRegistryTransformInfo) => string | null;
|
|
16
|
+
export declare const createIslandRegistryDefinitionPlugin: (info: IslandRegistryTransformInfo) => BunPlugin;
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/** Shields non-code spans from the regex/text-based import rewriters.
|
|
2
|
+
*
|
|
3
|
+
* The import rewriters (rewriteReactImports, rewriteImportsPlugin, the native
|
|
4
|
+
* Zig scanner, and compile's runtime-specifier rewrite) replace `from "X"` /
|
|
5
|
+
* `import "X"` / `import("X")` / `require("X")` across the whole file text. That
|
|
6
|
+
* text scan can't tell a real import from the *text* `from 'X'` sitting inside a
|
|
7
|
+
* template literal / data string (an example-code snippet a page renders) or a
|
|
8
|
+
* comment — so it rewrites the snippet's specifier too. The browser bundle then
|
|
9
|
+
* diverges from the SSR pre-render → React hydration mismatch on the code block.
|
|
10
|
+
*
|
|
11
|
+
* Fix: before rewriting, replace template literals and comments with opaque
|
|
12
|
+
* placeholders, plus any string literal whose *own text* contains an
|
|
13
|
+
* import-like sequence (`from`/`import`/`require` + quote); rewrite; then
|
|
14
|
+
* restore them verbatim. A real import specifier string (e.g.
|
|
15
|
+
* "react/jsx-runtime") never contains that sequence, so it is left untouched
|
|
16
|
+
* and always gets rewritten — no matter what token precedes it. Regex literals
|
|
17
|
+
* are skipped (copied verbatim) so their contents can't be misread as
|
|
18
|
+
* strings/templates.
|
|
19
|
+
*
|
|
20
|
+
* Usage: `const { masked, restore } = maskLiterals(src)`, run the existing
|
|
21
|
+
* rewriter on `masked`, then `restore(rewritten)`.
|
|
22
|
+
*/
|
|
23
|
+
export declare const SENTINEL: string;
|
|
24
|
+
export type MaskedSource = {
|
|
25
|
+
masked: string;
|
|
26
|
+
restore: (rewritten: string) => string;
|
|
27
|
+
};
|
|
28
|
+
export declare const maskLiterals: (src: string) => MaskedSource;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { BuildConfig } from '../../types/build';
|
|
2
|
+
export declare const resolveBuildDevelopmentMode: (mode: BuildConfig["mode"], nodeEnv: string | undefined) => boolean;
|
|
3
|
+
export declare const resolveVueFeatureFlags: (development: boolean) => {
|
|
4
|
+
__VUE_OPTIONS_API__: string;
|
|
5
|
+
__VUE_PROD_DEVTOOLS__: string;
|
|
6
|
+
__VUE_PROD_HYDRATION_MISMATCH_DETAILS__: string;
|
|
7
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** Cross-framework externals for SERVER (Bun-target) page bundles.
|
|
2
|
+
*
|
|
3
|
+
* `@absolutejs/absolute`'s internals reference every framework's runtime
|
|
4
|
+
* transitively (react-dom/server, svelte/server, @angular/core, …). A
|
|
5
|
+
* single-framework project only has its own framework installed, so these
|
|
6
|
+
* specifiers must stay bare — resolved (or harmlessly absent) at runtime —
|
|
7
|
+
* instead of failing the bundle at build time with "Could not resolve".
|
|
8
|
+
*
|
|
9
|
+
* The initial build always used this list (core/build.ts); the dev bundle
|
|
10
|
+
* rebuilds only externalized their own framework's packages, which meant a
|
|
11
|
+
* vue-only project's SSR rebuild failed on react/svelte/angular imports on
|
|
12
|
+
* EVERY edit — silently, before soft-failure logging landed — and the dev
|
|
13
|
+
* server served boot-time SSR bundles until restart. */
|
|
14
|
+
export declare const buildServerBundleExternals: (angularVendorPaths?: Record<string, string> | null) => string[];
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ParsedVueSpaRoute } from './parseVueSpaRoutes';
|
|
2
|
+
/** Write `<Page>.spa.json` next to each SPA page's SSR bundle — the child
|
|
3
|
+
* routes' compiled-CSS paths the Vue page handler inlines at request time
|
|
4
|
+
* (see `utils/spaRouteCss.ts`).
|
|
5
|
+
*
|
|
6
|
+
* Shared by the initial build (`core/build.ts`) and the dev bundle rebuild
|
|
7
|
+
* (`dev/rebuildTrigger.ts`). The dev path used to skip this entirely: a
|
|
8
|
+
* rebuilt page's SSR bundle landed under a fresh hash with no side manifest
|
|
9
|
+
* beside it, so SSR either inlined the boot-time CSS (old bundle still
|
|
10
|
+
* live) or nothing at all, until the server restarted.
|
|
11
|
+
*
|
|
12
|
+
* `resolveServerJsPath` maps a page's Pascal name to its CURRENT SSR
|
|
13
|
+
* bundle path — the initial build passes its artifact map, the dev rebuild
|
|
14
|
+
* passes a manifest lookup so children outside the rebuilt batch still
|
|
15
|
+
* resolve. Returns the manifest entries (`<Page>SpaManifest` → path). */
|
|
16
|
+
export declare const writeSpaSideManifests: (spaRoutesBySource: Map<string, ParsedVueSpaRoute[]>, resolveServerJsPath: (pascalName: string) => string | undefined) => Promise<Record<string, string>>;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { StylePreprocessorConfig, TailwindConfig } from '../../types/build';
|
|
2
|
-
export declare const extractCandidates: (source: string) => Set<string>;
|
|
3
2
|
export declare const disposeTailwindCompiler: (cssPath?: string) => void;
|
|
4
3
|
export declare const incrementalTailwindBuild: (tailwind: TailwindConfig, buildPath: string, changedFiles: string[], styleTransformConfig?: StylePreprocessorConfig, extraSources?: string[]) => Promise<{
|
|
5
4
|
cssChanged: boolean;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { FrameworkKey } from '../generate/frameworkKey';
|
|
2
|
+
type FrameworkDependencies = {
|
|
3
|
+
dependencies: Record<string, string>;
|
|
4
|
+
devDependencies: Record<string, string>;
|
|
5
|
+
};
|
|
6
|
+
export declare const FRAMEWORK_DEPENDENCIES: Record<FrameworkKey, FrameworkDependencies>;
|
|
7
|
+
export declare const frameworkDependencyNames: (framework: FrameworkKey) => string[];
|
|
8
|
+
export declare const installFrameworkDependencies: (cwd: string, framework: FrameworkKey) => {
|
|
9
|
+
ok: boolean;
|
|
10
|
+
specs: string[];
|
|
11
|
+
};
|
|
12
|
+
export declare const installPackages: (cwd: string, specs: string[], dev?: boolean) => boolean;
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { AbsoluteConfigState } from '../../../../types/absoluteConfig';
|
|
2
|
+
type AbsoluteConfigPanelProps = {
|
|
3
|
+
state: AbsoluteConfigState;
|
|
4
|
+
};
|
|
5
|
+
export declare const AbsoluteConfigPanel: ({ state: initial }: AbsoluteConfigPanelProps) => import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
export {};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
export declare const findConfigPath: (cwd: string, override?: string) => string | null;
|
|
3
|
+
export declare const findConfigObject: (sourceFile: ts.Node) => ts.ObjectLiteralExpression | null;
|
|
4
|
+
export declare const parseConfigObject: (configPath: string) => {
|
|
5
|
+
object: ts.ObjectLiteralExpression | null;
|
|
6
|
+
text: string;
|
|
7
|
+
};
|
|
8
|
+
export declare const readAbsoluteConfigValues: (cwd: string, override?: string) => {
|
|
9
|
+
configPath: string | null;
|
|
10
|
+
current: Record<string, unknown>;
|
|
11
|
+
opaqueKeys: string[];
|
|
12
|
+
};
|
|
13
|
+
export declare const resolveAbsoluteConfigState: (cwd: string, override?: string) => {
|
|
14
|
+
available: boolean;
|
|
15
|
+
configPath: string | null;
|
|
16
|
+
current: Record<string, unknown>;
|
|
17
|
+
fields: any[];
|
|
18
|
+
opaqueKeys: string[];
|
|
19
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export type AuthScaffoldField = {
|
|
2
|
+
name: string;
|
|
3
|
+
value: string;
|
|
4
|
+
};
|
|
5
|
+
export type AuthScaffold = {
|
|
6
|
+
configKey: string;
|
|
7
|
+
exportName: string;
|
|
8
|
+
fields: AuthScaffoldField[];
|
|
9
|
+
generic: boolean;
|
|
10
|
+
imports: string[];
|
|
11
|
+
note: string | null;
|
|
12
|
+
packages: string[];
|
|
13
|
+
typeName: string;
|
|
14
|
+
};
|
|
15
|
+
export declare const AUTH_SCAFFOLDS: Record<string, AuthScaffold>;
|
|
16
|
+
export declare const isScaffoldableFeature: (id: string) => boolean;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
export declare const findAuthSettingsPath: (cwd: string, override?: string) => string | null;
|
|
3
|
+
export declare const findAuthSettingsObject: (sourceFile: ts.Node) => ts.ObjectLiteralExpression | null;
|
|
4
|
+
export declare const parseAuthSettingsObject: (configPath: string) => {
|
|
5
|
+
object: ts.ObjectLiteralExpression | null;
|
|
6
|
+
text: string;
|
|
7
|
+
};
|
|
8
|
+
export declare const resolveAuthSettingsState: (cwd: string, override?: string) => {
|
|
9
|
+
available: boolean;
|
|
10
|
+
configPath: string | null;
|
|
11
|
+
current: Record<string, unknown>;
|
|
12
|
+
fields: any[];
|
|
13
|
+
opaqueKeys: string[];
|
|
14
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export type ConfigCert = {
|
|
2
|
+
cert: string;
|
|
3
|
+
key: string;
|
|
4
|
+
};
|
|
5
|
+
/**
|
|
6
|
+
* Produce a TLS cert/key covering `host` (a `*.localhost` subdomain that
|
|
7
|
+
* browsers resolve to loopback) plus localhost + loopback IPs, reusing the
|
|
8
|
+
* mkcert toolchain AbsoluteJS already relies on for dev HTTPS. Certs are
|
|
9
|
+
* cached per host under `.absolutejs/`. Returns `null` when mkcert isn't
|
|
10
|
+
* available so the caller can fall back to plain HTTP.
|
|
11
|
+
*/
|
|
12
|
+
export declare const ensureConfigCert: (host: string) => ConfigCert | null;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/** Minimal structural view of an ESTree node. We treat the AST as plain
|
|
2
|
+
* records (espree ships no bundled types) and narrow on `type` + `range`,
|
|
3
|
+
* which `parseConfigSource` always populates. */
|
|
4
|
+
export type AstNode = {
|
|
5
|
+
range: [number, number];
|
|
6
|
+
type: string;
|
|
7
|
+
[key: string]: unknown;
|
|
8
|
+
};
|
|
9
|
+
export type StaticValue = {
|
|
10
|
+
isStatic: boolean;
|
|
11
|
+
value: unknown;
|
|
12
|
+
};
|
|
13
|
+
export declare const isNode: (value: unknown) => value is AstNode;
|
|
14
|
+
export declare const findConfigElements: (ast: unknown) => AstNode[] | null;
|
|
15
|
+
export declare const parseConfigSource: (source: string) => unknown;
|
|
16
|
+
export declare const evaluateNode: (node: AstNode | null) => StaticValue;
|
|
17
|
+
export declare const findProperty: (objectNode: AstNode, key: string) => AstNode | null;
|
|
18
|
+
export declare const objectProperties: (objectNode: AstNode) => AstNode[];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const ESLINT_CSS = "\n:root {\n\t--bg: #0b0c0e;\n\t--bg-grid: #14161a;\n\t--panel: #111317;\n\t--panel-2: #15181d;\n\t--border: #23262d;\n\t--border-soft: #1b1e23;\n\t--text: #e7e9ec;\n\t--dim: #82888f;\n\t--faint: #565c64;\n\t--accent: #cdf25b;\n\t--accent-dim: #8ea53a;\n\t--off: #565c64;\n\t--warn: #f0b429;\n\t--error: #ff5d5d;\n\t--mono: 'JetBrains Mono', ui-monospace, 'SF Mono', Menlo, Consolas, monospace;\n\t--serif: 'Instrument Serif', Georgia, 'Times New Roman', serif;\n}\n\n* { box-sizing: border-box; margin: 0; padding: 0; }\n\nhtml { -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; }\n\nbody {\n\tbackground-color: var(--bg);\n\tbackground-image:\n\t\tlinear-gradient(var(--bg-grid) 1px, transparent 1px),\n\t\tlinear-gradient(90deg, var(--bg-grid) 1px, transparent 1px);\n\tbackground-size: 44px 44px;\n\tbackground-position: center top;\n\tcolor: var(--text);\n\tfont-family: var(--mono);\n\tfont-size: 13px;\n\tline-height: 1.5;\n\tmin-height: 100vh;\n}\n\nbody::before {\n\tcontent: '';\n\tposition: fixed;\n\tinset: 0;\n\tbackground: radial-gradient(ellipse 80% 60% at 50% -10%, rgba(205, 242, 91, 0.06), transparent 70%);\n\tpointer-events: none;\n\tz-index: 0;\n}\n\n.shell { position: relative; z-index: 1; max-width: 1280px; margin: 0 auto; padding: 0 28px 80px; }\n\n/* ---- header ---- */\n.topbar {\n\tdisplay: flex;\n\talign-items: flex-end;\n\tjustify-content: space-between;\n\tgap: 24px;\n\tpadding: 34px 0 22px;\n\tborder-bottom: 1px solid var(--border);\n\tflex-wrap: wrap;\n}\n.brand { display: flex; flex-direction: column; gap: 2px; }\n.wordmark {\n\tfont-family: var(--serif);\n\tfont-size: 42px;\n\tline-height: 0.9;\n\tletter-spacing: -0.01em;\n\tfont-weight: 400;\n}\n.wordmark em { color: var(--accent); font-style: italic; }\n.subpath {\n\tfont-size: 11px;\n\tcolor: var(--dim);\n\tletter-spacing: 0.02em;\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 8px;\n}\n.dot { width: 5px; height: 5px; border-radius: 50%; background: var(--accent); box-shadow: 0 0 8px var(--accent); }\n.counts { display: flex; gap: 26px; }\n.count { text-align: right; }\n.count b { display: block; font-size: 24px; font-weight: 500; letter-spacing: -0.02em; }\n.count span { font-size: 10px; text-transform: uppercase; letter-spacing: 0.14em; color: var(--faint); }\n\n/* ---- controls row ---- */\n.controls { display: flex; gap: 12px; align-items: center; padding: 18px 0; flex-wrap: wrap; }\n.tabs { display: flex; gap: 2px; background: var(--panel); border: 1px solid var(--border); border-radius: 9px; padding: 3px; }\n.tab {\n\tfont-family: var(--mono);\n\tfont-size: 12px;\n\tcolor: var(--dim);\n\tbackground: transparent;\n\tborder: 0;\n\tpadding: 7px 16px;\n\tborder-radius: 6px;\n\tcursor: pointer;\n\ttransition: color 0.15s, background 0.15s;\n\tletter-spacing: 0.01em;\n}\n.tab:hover { color: var(--text); }\n.tab[data-active='true'] { background: var(--panel-2); color: var(--accent); box-shadow: inset 0 0 0 1px var(--border); }\n.search {\n\tflex: 1;\n\tmin-width: 220px;\n\tfont-family: var(--mono);\n\tfont-size: 13px;\n\tcolor: var(--text);\n\tbackground: var(--panel);\n\tborder: 1px solid var(--border);\n\tborder-radius: 9px;\n\tpadding: 10px 14px;\n\toutline: none;\n\ttransition: border-color 0.15s, box-shadow 0.15s;\n}\n.search:focus { border-color: var(--accent-dim); box-shadow: 0 0 0 3px rgba(205, 242, 91, 0.08); }\n.search::placeholder { color: var(--faint); }\n.scope {\n\tmin-width: 250px;\n\tfont-family: var(--mono);\n\tfont-size: 12.5px;\n\tcolor: var(--accent);\n\tbackground: var(--bg);\n\tborder: 1px solid var(--border);\n\tborder-radius: 9px;\n\tpadding: 10px 14px;\n\toutline: none;\n\ttransition: border-color 0.15s, box-shadow 0.15s;\n}\n.scope:focus { border-color: var(--accent-dim); box-shadow: 0 0 0 3px rgba(205, 242, 91, 0.08); }\n.scope::placeholder { color: var(--faint); }\n.scope-clear {\n\tfont-family: var(--mono);\n\tfont-size: 11px;\n\tcolor: var(--dim);\n\tbackground: var(--panel);\n\tborder: 1px solid var(--border);\n\tborder-radius: 8px;\n\tpadding: 9px 12px;\n\tcursor: pointer;\n\ttransition: color 0.15s, border-color 0.15s;\n}\n.scope-clear:hover { color: var(--error); border-color: rgba(255, 93, 93, 0.4); }\n\n/* ---- rule controls + options editor ---- */\n.rule-controls { display: flex; align-items: center; gap: 8px; }\n.opts-toggle {\n\tfont-family: var(--mono);\n\tfont-size: 11px;\n\tcolor: var(--faint);\n\tbackground: transparent;\n\tborder: 1px solid var(--border);\n\tborder-radius: 7px;\n\tpadding: 6px 10px;\n\tcursor: pointer;\n\ttransition: color 0.13s, border-color 0.13s, background 0.13s;\n}\n.opts-toggle:hover { color: var(--text); }\n.opts-toggle[data-on='true'] { color: var(--accent); border-color: var(--accent-dim); background: rgba(205, 242, 91, 0.06); }\n.opts-editor { margin-top: 10px; max-width: 70ch; }\n.opts-input {\n\twidth: 100%;\n\tfont-family: var(--mono);\n\tfont-size: 12px;\n\tline-height: 1.5;\n\tcolor: var(--text);\n\tbackground: var(--bg);\n\tborder: 1px solid var(--border);\n\tborder-radius: 8px;\n\tpadding: 10px 12px;\n\tresize: vertical;\n\toutline: none;\n}\n.opts-input:focus { border-color: var(--accent-dim); box-shadow: 0 0 0 3px rgba(205, 242, 91, 0.08); }\n.opts-error { color: var(--error); font-size: 11px; margin-top: 6px; white-space: pre-wrap; }\n.opts-actions { display: flex; gap: 8px; margin-top: 8px; }\n.opts-btn {\n\tfont-family: var(--mono);\n\tfont-size: 11px;\n\tcolor: var(--dim);\n\tbackground: var(--panel);\n\tborder: 1px solid var(--border);\n\tborder-radius: 7px;\n\tpadding: 7px 13px;\n\tcursor: pointer;\n\ttransition: color 0.13s, border-color 0.13s;\n}\n.opts-btn:hover { color: var(--text); }\n.opts-btn.save { color: var(--accent); border-color: var(--accent-dim); }\n.opts-btn.save:hover { background: rgba(205, 242, 91, 0.08); }\n\n/* ---- layout ---- */\n.layout { display: grid; grid-template-columns: 200px 1fr; gap: 24px; margin-top: 20px; align-items: start; }\n.rail { position: sticky; top: 20px; display: flex; flex-direction: column; gap: 3px; }\n.rail-label { font-size: 10px; text-transform: uppercase; letter-spacing: 0.16em; color: var(--faint); padding: 4px 10px 8px; }\n.source-btn {\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n\tgap: 8px;\n\tfont-family: var(--mono);\n\tfont-size: 12px;\n\tcolor: var(--dim);\n\tbackground: transparent;\n\tborder: 0;\n\tborder-left: 2px solid transparent;\n\tpadding: 7px 10px;\n\tcursor: pointer;\n\ttext-align: left;\n\ttransition: color 0.15s, background 0.12s, border-color 0.15s;\n\tborder-radius: 0 6px 6px 0;\n}\n.source-btn:hover { color: var(--text); background: var(--panel); }\n.source-btn[data-active='true'] { color: var(--accent); border-left-color: var(--accent); background: var(--panel); }\n.source-btn .n { font-size: 11px; color: var(--faint); }\n.source-btn[data-active='true'] .n { color: var(--accent-dim); }\n\n/* ---- rule list ---- */\n.section { margin-bottom: 30px; animation: rise 0.5s cubic-bezier(0.2, 0.8, 0.2, 1) both; }\n.section-head { display: flex; align-items: baseline; gap: 12px; padding: 0 2px 10px; border-bottom: 1px dashed var(--border-soft); margin-bottom: 4px; }\n.section-title { font-family: var(--serif); font-size: 22px; font-style: italic; }\n.section-files { font-size: 11px; color: var(--faint); }\n\n.rule {\n\tdisplay: grid;\n\tgrid-template-columns: 1fr auto;\n\tgap: 14px;\n\talign-items: center;\n\tpadding: 13px 14px;\n\tborder: 1px solid transparent;\n\tborder-radius: 10px;\n\ttransition: background 0.14s, border-color 0.14s;\n\tposition: relative;\n}\n.rule:hover { background: var(--panel); border-color: var(--border-soft); }\n.rule-main { min-width: 0; }\n.rule-name-row { display: flex; align-items: center; gap: 9px; flex-wrap: wrap; }\n.rule-name { font-size: 13.5px; color: var(--text); letter-spacing: -0.01em; }\n.rule-name .pfx { color: var(--faint); }\n.badge {\n\tfont-size: 9.5px;\n\ttext-transform: uppercase;\n\tletter-spacing: 0.08em;\n\tpadding: 2px 6px;\n\tborder-radius: 4px;\n\tborder: 1px solid var(--border);\n\tcolor: var(--dim);\n\tbackground: var(--panel-2);\n}\n.badge.src { color: var(--accent-dim); border-color: rgba(205, 242, 91, 0.2); }\n.badge.fix { color: #6cc6ff; border-color: rgba(108, 198, 255, 0.22); }\n.badge.dep { color: var(--warn); border-color: rgba(240, 180, 41, 0.25); }\n.rule-desc { font-size: 11.5px; color: var(--dim); margin-top: 4px; max-width: 64ch; line-height: 1.45; }\n.rule-opts { font-size: 11px; color: var(--accent-dim); margin-top: 5px; background: var(--bg); border: 1px solid var(--border-soft); border-radius: 5px; padding: 3px 7px; display: inline-block; white-space: pre-wrap; word-break: break-word; }\n.docs { color: var(--faint); text-decoration: none; transition: color 0.15s; font-size: 11px; }\n.docs:hover { color: var(--accent); }\n\n/* ---- severity segmented control ---- */\n.seg { display: inline-flex; background: var(--bg); border: 1px solid var(--border); border-radius: 8px; padding: 2px; gap: 2px; }\n.seg button {\n\tfont-family: var(--mono);\n\tfont-size: 11px;\n\tletter-spacing: 0.02em;\n\tcolor: var(--faint);\n\tbackground: transparent;\n\tborder: 0;\n\tpadding: 5px 11px;\n\tborder-radius: 6px;\n\tcursor: pointer;\n\ttransition: color 0.13s, background 0.13s, box-shadow 0.13s;\n}\n.seg button:hover:not([data-on='true']) { color: var(--text); }\n.seg button[data-sev='off'][data-on='true'] { background: rgba(86, 92, 100, 0.22); color: #c2c7cd; box-shadow: inset 0 0 0 1px rgba(130,136,143,0.4); }\n.seg button[data-sev='warn'][data-on='true'] { background: rgba(240, 180, 41, 0.16); color: var(--warn); box-shadow: inset 0 0 0 1px rgba(240,180,41,0.45); }\n.seg button[data-sev='error'][data-on='true'] { background: rgba(255, 93, 93, 0.15); color: var(--error); box-shadow: inset 0 0 0 1px rgba(255,93,93,0.45); }\n.seg.busy { opacity: 0.45; pointer-events: none; }\n\n.cat-control { display: flex; align-items: center; }\n.effective { font-size: 10px; color: var(--faint); margin-right: 10px; letter-spacing: 0.04em; }\n.effective b { color: var(--dim); }\n\n/* ---- toast ---- */\n.toast {\n\tposition: fixed;\n\tbottom: 22px;\n\tleft: 50%;\n\ttransform: translateX(-50%);\n\tz-index: 50;\n\tfont-family: var(--mono);\n\tfont-size: 12px;\n\tpadding: 11px 18px;\n\tborder-radius: 10px;\n\tborder: 1px solid var(--border);\n\tbackground: var(--panel-2);\n\tbox-shadow: 0 18px 50px rgba(0, 0, 0, 0.55);\n\tanimation: rise 0.3s ease both;\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 10px;\n}\n.toast b { font-size: 14px; }\n.toast.ok b { color: var(--accent); }\n.toast.err b { color: var(--error); }\n\n.empty { padding: 60px 20px; text-align: center; color: var(--faint); font-size: 13px; }\n.more { padding: 18px 4px; font-size: 11px; color: var(--faint); text-align: center; }\n\n@keyframes rise { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: none; } }\n\n@media (max-width: 820px) {\n\t.layout { grid-template-columns: 1fr; }\n\t.rail { position: static; flex-direction: row; flex-wrap: wrap; }\n\t.wordmark { font-size: 34px; }\n}\n";
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Emit a JS source literal for a rule option value in the same flat,
|
|
3
|
+
* single-quoted style the config files already use (e.g.
|
|
4
|
+
* `{ detectObjects: false, ignore: [0, 1, 2] }`). Used to render edited
|
|
5
|
+
* rule values back into `eslint.config.*` so they read like hand-written
|
|
6
|
+
* config rather than JSON.
|
|
7
|
+
*/
|
|
8
|
+
export declare const serializeRuleValue: (severity: string, options: unknown[]) => string;
|
|
9
|
+
export declare const serializeValue: (value: unknown) => string;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare const getRecord: (value: unknown, key: string) => Record<string, unknown> | null;
|
|
2
|
+
export declare const getString: (value: unknown, key: string) => string | null;
|
|
3
|
+
export declare const isMap: (value: unknown) => value is Map<unknown, unknown>;
|
|
4
|
+
export declare const isRecord: (value: unknown) => value is Record<string, unknown>;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { IntegrationsPanelState } from '../../../../types/integrationsPanel';
|
|
2
|
+
type IntegrationsPanelProps = {
|
|
3
|
+
state: IntegrationsPanelState;
|
|
4
|
+
};
|
|
5
|
+
export declare const IntegrationsPanel: ({ state: initial }: IntegrationsPanelProps) => import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
export {};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { PackageJsonState } from '../../../../types/packageJsonPanel';
|
|
2
|
+
type PackageJsonPanelProps = {
|
|
3
|
+
state: PackageJsonState;
|
|
4
|
+
};
|
|
5
|
+
export declare const PackageJsonPanel: ({ state: initial }: PackageJsonPanelProps) => import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { PackageFieldEdit, PackageScriptEdit } from '../../../../types/packageJsonPanel';
|
|
2
|
+
export declare const applyFieldEdit: (configPath: string, edit: PackageFieldEdit) => {
|
|
3
|
+
message: string;
|
|
4
|
+
ok: boolean;
|
|
5
|
+
};
|
|
6
|
+
export declare const applyScriptEdit: (configPath: string, edit: PackageScriptEdit) => {
|
|
7
|
+
message: string;
|
|
8
|
+
ok: boolean;
|
|
9
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { PackageScript } from '../../../../types/packageJsonPanel';
|
|
2
|
+
export declare const findPackageJsonPath: (cwd: string) => string | null;
|
|
3
|
+
export declare const resolvePackageJsonState: (cwd: string) => {
|
|
4
|
+
configPath: string | null;
|
|
5
|
+
current: Record<string, unknown>;
|
|
6
|
+
fields: any[];
|
|
7
|
+
scripts: PackageScript[];
|
|
8
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { FieldSchema } from '../../../../types/config';
|
|
2
|
+
type EditorProps = {
|
|
3
|
+
onChange: (value: unknown) => void;
|
|
4
|
+
schema: FieldSchema;
|
|
5
|
+
value: unknown;
|
|
6
|
+
};
|
|
7
|
+
export declare const emptyValue: (schema: FieldSchema) => unknown;
|
|
8
|
+
export declare const FieldEditor: (props: EditorProps) => import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const CONFIG_CSS = "\n.cfg {\n\tposition: relative;\n\tz-index: 1;\n\tdisplay: flex;\n\talign-items: stretch;\n\tmin-height: 100vh;\n}\n\n.cfg-nav {\n\tflex: 0 0 240px;\n\twidth: 240px;\n\theight: 100vh;\n\tposition: sticky;\n\ttop: 0;\n\talign-self: flex-start;\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 26px;\n\tpadding: 30px 18px;\n\tborder-right: 1px solid var(--border);\n\tbackground: rgba(17, 19, 23, 0.6);\n}\n\n.cfg-brand { display: flex; flex-direction: column; gap: 4px; }\n.cfg-word { font-family: var(--serif); font-size: 26px; line-height: 1; }\n.cfg-word em { color: var(--accent); font-style: italic; }\n.cfg-tag {\n\tcolor: var(--faint);\n\tfont-size: 10px;\n\ttext-transform: uppercase;\n\tletter-spacing: 1.5px;\n}\n\n.cfg-panels { display: flex; flex-direction: column; gap: 4px; }\n.cfg-rail-label {\n\tcolor: var(--faint);\n\tfont-size: 10px;\n\ttext-transform: uppercase;\n\tletter-spacing: 1.5px;\n\tpadding: 0 10px 8px;\n}\n\n.cfg-item {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 2px;\n\tpadding: 10px 12px;\n\tborder-radius: 8px;\n\tborder: 1px solid transparent;\n\tcolor: var(--text);\n\ttext-decoration: none;\n\ttransition: background 0.12s ease, border-color 0.12s ease;\n}\n.cfg-item:hover { background: var(--panel-2); }\n.cfg-item[data-active='true'] { background: var(--panel-2); border-color: var(--border); }\n.cfg-item[data-soon='true'] { opacity: 0.6; }\n.cfg-item-top { display: flex; align-items: center; justify-content: space-between; gap: 8px; }\n.cfg-item-name { font-weight: 500; font-size: 13px; }\n.cfg-item-blurb { color: var(--dim); font-size: 11px; }\n.cfg-soon {\n\tfont-size: 9px;\n\ttext-transform: uppercase;\n\tletter-spacing: 1px;\n\tcolor: var(--bg);\n\tbackground: var(--accent-dim);\n\tpadding: 2px 6px;\n\tborder-radius: 999px;\n}\n\n.cfg-main { flex: 1 1 auto; min-width: 0; }\n\n.cfg-placeholder {\n\tposition: relative;\n\tz-index: 1;\n\tmax-width: 760px;\n\tmargin: 0 auto;\n\tpadding: 120px 28px;\n\ttext-align: center;\n}\n.cfg-placeholder-title { font-family: var(--serif); font-size: 40px; margin-bottom: 12px; }\n.cfg-placeholder-title em { color: var(--accent); font-style: italic; }\n.cfg-placeholder-text { color: var(--dim); font-size: 14px; max-width: 460px; margin: 0 auto; }\n.cfg-loading { animation: cfg-pulse 1.2s ease-in-out infinite; }\n@keyframes cfg-pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.4; } }\n\n/* ---- recursive field editor ---- */\n.fe-block { align-items: flex-start; }\n.fe-root { margin-top: 10px; width: 100%; }\n.fe-actions { flex-direction: column; gap: 6px; }\n.fe-object {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 10px;\n\tborder-left: 2px solid var(--border);\n\tpadding-left: 14px;\n}\n.fe-field { display: flex; flex-direction: column; gap: 4px; }\n.fe-label { display: flex; align-items: center; gap: 8px; }\n.fe-name { color: var(--dim); font-size: 12px; }\n.fe-array, .fe-record, .fe-union { display: flex; flex-direction: column; gap: 6px; }\n.fe-item, .fe-entry { display: flex; align-items: flex-start; gap: 6px; }\n.fe-key { min-width: 160px; flex: 0 0 auto; }\n.fe-add {\n\talign-self: flex-start;\n\tfont-family: var(--mono);\n\tfont-size: 11px;\n\tcolor: var(--accent);\n\tbackground: transparent;\n\tborder: 1px dashed var(--border);\n\tborder-radius: 7px;\n\tpadding: 4px 10px;\n\tcursor: pointer;\n}\n.fe-add:hover { border-color: var(--accent); }\n.fe-remove {\n\tfont-family: var(--mono);\n\tfont-size: 11px;\n\tcolor: var(--dim);\n\tbackground: transparent;\n\tborder: 1px solid var(--border);\n\tborder-radius: 7px;\n\tpadding: 4px 8px;\n\tcursor: pointer;\n}\n.fe-remove:hover { color: var(--error); border-color: var(--error); }\n.fe-type { color: var(--faint); font-size: 11px; margin-top: 4px; }\n.fe-raw { width: 100%; }\n.fe-raw .opts-input { width: 100%; }\n\n/* ---- integrations panel ---- */\n.intg-note {\n\tfont-size: 11.5px;\n\tcolor: var(--warn);\n\tmargin-top: 6px;\n\tmax-width: 64ch;\n\tline-height: 1.45;\n}\n.intg-code {\n\tfont-family: var(--mono);\n\tfont-size: 11.5px;\n\tcolor: var(--accent-dim);\n\tbackground: var(--bg);\n\tborder: 1px solid var(--border);\n\tborder-radius: 7px;\n\tpadding: 7px 10px;\n\tmargin-top: 8px;\n\toverflow-x: auto;\n\twhite-space: pre;\n}\n\n/* ---- auth panel ---- */\n.auth-banner {\n\tfont-size: 12px;\n\tcolor: var(--dim);\n\tbackground: var(--panel);\n\tborder: 1px solid var(--border);\n\tborder-radius: 9px;\n\tpadding: 10px 14px;\n\tmargin-bottom: 18px;\n\tline-height: 1.5;\n}\n.auth-banner.warn { color: var(--warn); border-color: rgba(240, 180, 41, 0.25); }\n.auth-banner code { color: var(--accent-dim); }\n.auth-chips { display: flex; flex-wrap: wrap; gap: 7px; }\n.auth-chip {\n\tfont-family: var(--mono);\n\tfont-size: 11px;\n\tcolor: var(--dim);\n\tbackground: var(--bg);\n\tborder: 1px solid var(--border);\n\tborder-radius: 7px;\n\tpadding: 4px 9px;\n}\n.auth-links { display: flex; flex-wrap: wrap; gap: 14px; margin-top: 10px; }\n.auth-link { font-size: 12px; color: var(--accent); text-decoration: none; }\n.auth-link:hover { text-decoration: underline; }\n\n/* ---- grouped sidebar ---- */\n.cfg-group + .cfg-group { margin-top: 16px; }\n\n@media (max-width: 720px) {\n\t.cfg { flex-direction: column; }\n\t.cfg-nav {\n\t\twidth: auto;\n\t\tflex-basis: auto;\n\t\theight: auto;\n\t\tposition: static;\n\t\tborder-right: none;\n\t\tborder-bottom: 1px solid var(--border);\n\t}\n}\n";
|