@absolutejs/absolute 0.19.0-beta.1048 → 0.19.0-beta.1049
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/dist/angular/components/core/streamingSlotRegistrar.js +1 -1
- package/dist/angular/components/core/streamingSlotRegistry.js +2 -2
- package/dist/cli/config/client.js +58 -10
- package/dist/cli/config/server.js +1061 -114
- 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/resolveAuthState.d.ts +2 -0
- package/dist/src/cli/config/integrations/IntegrationsPanel.d.ts +6 -0
- package/dist/src/cli/config/page/configStyles.d.ts +1 -1
- package/dist/src/cli/config/server.d.ts +38 -0
- package/dist/types/authPanel.d.ts +29 -0
- package/dist/types/config.d.ts +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { AbsoluteConfigState } from '../../../../types/absoluteConfig';
|
|
2
|
+
type IntegrationsPanelProps = {
|
|
3
|
+
state: AbsoluteConfigState;
|
|
4
|
+
};
|
|
5
|
+
export declare const IntegrationsPanel: ({ state: initial }: IntegrationsPanelProps) => import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
export {};
|
|
@@ -1 +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@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";
|
|
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@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";
|
|
@@ -77,6 +77,30 @@ export declare const launchConfig: (args: string[], cwd?: string) => Promise<Ely
|
|
|
77
77
|
};
|
|
78
78
|
};
|
|
79
79
|
};
|
|
80
|
+
} & {
|
|
81
|
+
integrations: {
|
|
82
|
+
get: {
|
|
83
|
+
body: unknown;
|
|
84
|
+
params: {};
|
|
85
|
+
query: unknown;
|
|
86
|
+
headers: unknown;
|
|
87
|
+
response: {
|
|
88
|
+
200: Response;
|
|
89
|
+
};
|
|
90
|
+
};
|
|
91
|
+
};
|
|
92
|
+
} & {
|
|
93
|
+
auth: {
|
|
94
|
+
get: {
|
|
95
|
+
body: unknown;
|
|
96
|
+
params: {};
|
|
97
|
+
query: unknown;
|
|
98
|
+
headers: unknown;
|
|
99
|
+
response: {
|
|
100
|
+
200: Response;
|
|
101
|
+
};
|
|
102
|
+
};
|
|
103
|
+
};
|
|
80
104
|
} & {
|
|
81
105
|
package: {
|
|
82
106
|
get: {
|
|
@@ -232,6 +256,20 @@ export declare const launchConfig: (args: string[], cwd?: string) => Promise<Ely
|
|
|
232
256
|
};
|
|
233
257
|
};
|
|
234
258
|
};
|
|
259
|
+
} & {
|
|
260
|
+
api: {
|
|
261
|
+
auth: {
|
|
262
|
+
get: {
|
|
263
|
+
body: unknown;
|
|
264
|
+
params: {};
|
|
265
|
+
query: unknown;
|
|
266
|
+
headers: unknown;
|
|
267
|
+
response: {
|
|
268
|
+
200: import("../../../types/authPanel").AuthPanelState;
|
|
269
|
+
};
|
|
270
|
+
};
|
|
271
|
+
};
|
|
272
|
+
};
|
|
235
273
|
} & {
|
|
236
274
|
api: {
|
|
237
275
|
package: {
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/** One @absolutejs/auth capability, paired with whether the scanned app actually
|
|
2
|
+
* configured it. `kind` separates features that mount HTTP routes from those that
|
|
3
|
+
* only change behavior (emit events, add a derive, throttle) so the panel can say
|
|
4
|
+
* what each one does. */
|
|
5
|
+
export type AuthFeatureStatus = {
|
|
6
|
+
blurb: string;
|
|
7
|
+
configKey: string;
|
|
8
|
+
configured: boolean;
|
|
9
|
+
id: string;
|
|
10
|
+
kind: 'behavior' | 'routes';
|
|
11
|
+
label: string;
|
|
12
|
+
};
|
|
13
|
+
/** Read-only introspection of an app's @absolutejs/auth setup, produced by
|
|
14
|
+
* `resolveAuthState` and rendered by the Auth panel. The config lives in code
|
|
15
|
+
* (the `auth({...})` call), so `introspected` records whether we could actually
|
|
16
|
+
* read the configured keys — when false the panel shows the full catalog as a
|
|
17
|
+
* reference instead of a per-app status. */
|
|
18
|
+
export type AuthPanelState = {
|
|
19
|
+
declaredVersion: string | null;
|
|
20
|
+
features: AuthFeatureStatus[];
|
|
21
|
+
installed: boolean;
|
|
22
|
+
installedVersion: string | null;
|
|
23
|
+
introspected: boolean;
|
|
24
|
+
npmUrl: string;
|
|
25
|
+
providerCount: number | null;
|
|
26
|
+
repoUrl: string;
|
|
27
|
+
setupPath: string | null;
|
|
28
|
+
usesSpread: boolean;
|
|
29
|
+
};
|
package/dist/types/config.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type ConfigPanelId = 'absolute' | 'package' | 'eslint' | 'tsconfig' | 'prettier';
|
|
1
|
+
export type ConfigPanelId = 'absolute' | 'integrations' | 'auth' | 'package' | 'eslint' | 'tsconfig' | 'prettier';
|
|
2
2
|
export type ConfigPanelStatus = 'ready' | 'soon';
|
|
3
3
|
export type ConfigPanelMeta = {
|
|
4
4
|
/** One-line description shown under the panel name in the sidebar. */
|